rea-agents 3.2.1 → 4.0.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 +183 -332
- package/bridge/ghidra/ReaGhidraBridge.java +561 -74
- package/bridge/hopper_bridge.py +70 -27
- package/bridge/native/ReaNativeUI.swift +157 -0
- package/dist/application/AnalysisContextQueries.js +19 -5
- package/dist/application/AnalysisSnapshotCache.js +30 -11
- package/dist/application/AppleAssetCatalogAnalysis.js +171 -0
- package/dist/application/ArtifactExtractionDestination.js +0 -12
- package/dist/application/ArtifactGraphConstruction.js +44 -11
- package/dist/application/ArtifactInventory/classify.js +7 -15
- package/dist/application/ArtifactInventory/hash.js +4 -2
- package/dist/application/ArtifactInventory/policy.js +2 -17
- package/dist/application/ArtifactInventory/reader.js +3 -3
- package/dist/application/ArtifactInventory/scanCanonical.js +2 -2
- package/dist/application/ArtifactInventory/scanReader.js +12 -4
- package/dist/application/ArtifactInventory/types.js +0 -3
- package/dist/application/BinarySession.js +28 -43
- package/dist/application/BinarySessionExecution.js +37 -1
- package/dist/application/BinaryTargetResolver.js +50 -4
- package/dist/application/BrowserEvidence.js +36 -7
- package/dist/application/BrowserObservationService.js +17 -44
- package/dist/application/BrowserScenarioCaptureService.js +2 -35
- package/dist/application/BrowserScenarioEvidence.js +13 -9
- package/dist/application/CapabilityClientRequirements.js +2 -11
- package/dist/application/CapabilityInventory.js +21 -35
- package/dist/application/ClientConfigurationDocument.js +84 -7
- package/dist/application/ClientRegistrationIdentity.js +32 -0
- package/dist/application/ClientRegistrationStatus.js +59 -6
- package/dist/application/DirectAnalysis.js +37 -58
- package/dist/application/DirectAnalysisStatus.js +4 -4
- package/dist/application/Doctor.js +89 -80
- package/dist/application/DoctorDiagnostics.js +2 -26
- package/dist/application/DoctorScope.js +8 -14
- package/dist/application/ElectronActiveEvidence.js +10 -27
- package/dist/application/ElectronActiveObservationService.js +9 -36
- package/dist/application/ElectronBoundaryAnalysis.js +2 -0
- package/dist/application/ElectronBoundaryGraphNative.js +1 -1
- package/dist/application/ElectronEvidence.js +8 -3
- package/dist/application/ElectronObservationService.js +9 -25
- package/dist/application/EnhancedLiteralTracing.js +4 -8
- package/dist/application/EnhancedTools.js +15 -35
- package/dist/application/FilesystemSnapshot.js +7 -8
- package/dist/application/JavaScriptApplicationEvidenceGraph.js +2 -1
- package/dist/application/JavaScriptApplicationWorkflowService.js +31 -7
- package/dist/application/JavaScriptArtifactAnalysis.js +6 -4
- package/dist/application/JavaScriptArtifactFiles.js +5 -0
- package/dist/application/JavaScriptArtifactPathResolution.js +179 -47
- package/dist/application/JavaScriptRuntimeObservationEvidence.js +6 -3
- package/dist/application/JavaScriptRuntimeObservationService.js +9 -25
- package/dist/application/JavaScriptRuntimeReconciliationService.js +45 -4
- package/dist/application/JavaScriptSemanticGraphAsyncProjection.js +11 -0
- package/dist/application/JavaScriptSemanticGraphChildProcessProjection.js +11 -0
- package/dist/application/JavaScriptSemanticGraphDataProjection.js +11 -0
- package/dist/application/JavaScriptSemanticGraphFlowProjection.js +14 -5
- package/dist/application/JsonFiles.js +1 -1
- package/dist/application/LazyAnalysisProvider.js +27 -6
- package/dist/application/ManagedMemberComparisonService.js +19 -6
- package/dist/application/NativeApiInspection.js +2 -0
- package/dist/application/NativeCallRoutes.js +72 -0
- package/dist/application/NativeDispatchMetadataInspection.js +33 -0
- package/dist/application/NativeUiActionTrace.js +73 -49
- package/dist/application/NativeValueTrace.js +320 -0
- package/dist/application/ProcessCaptureCapability.js +32 -5
- package/dist/application/ProcessCaptureEnvironment.js +9 -26
- package/dist/application/ProcessCaptureError.js +1 -5
- package/dist/application/ProcessCaptureJournal.js +3 -40
- package/dist/application/ProcessCaptureLifecycle.js +102 -111
- package/dist/application/ProcessCli.js +18 -25
- package/dist/application/ProcessEvidence.js +5 -7
- package/dist/application/ProcessFilesystemEffects.js +36 -0
- package/dist/application/ProcessHarness.js +41 -120
- package/dist/application/ProcessNormalization.js +2 -17
- package/dist/application/ProcessScenarioRuntimeValidation.js +76 -0
- package/dist/application/ReferenceSourceImport.js +3 -4
- package/dist/application/Setup.js +236 -84
- package/dist/application/SetupClientConfiguration.js +14 -9
- package/dist/application/SetupPlan.js +138 -86
- package/dist/application/SetupSkill.js +0 -1
- package/dist/application/SupportedClients.js +102 -21
- package/dist/application/Uninstall.js +31 -20
- package/dist/application/Update.js +93 -0
- package/dist/application/UpdateMaintenance.js +108 -0
- package/dist/application/UpdateRuntime.js +126 -0
- package/dist/application/runtime.js +13 -2
- package/dist/artifacts/ArtifactPaths.js +6 -8
- package/dist/artifacts/ArtifactProvider.js +94 -41
- package/dist/artifacts/AsarArtifactReader.js +19 -4
- package/dist/artifacts/KeyedArchiveReader.js +110 -0
- package/dist/artifacts/MachOSliceArtifactReader.js +53 -5
- package/dist/artifacts/ZipArtifactReader.js +18 -1
- package/dist/browser/BrowserScenarioSecrets.js +28 -1
- package/dist/browser/CdpBrowserProvider.js +36 -15
- package/dist/browser/CdpCaptureDocuments.js +22 -8
- package/dist/browser/CdpCaptureEventHandlers.js +14 -5
- package/dist/browser/CdpCaptureEventHelpers.js +13 -0
- package/dist/browser/CdpCaptureEvents.js +10 -1
- package/dist/browser/CdpElectronInspection.js +5 -10
- package/dist/browser/CdpElectronProvider.js +1 -5
- package/dist/browser/CdpElectronScripts.js +1 -1
- package/dist/browser/CdpEndpoint.js +3 -2
- package/dist/browser/CdpObservationSession.js +14 -10
- package/dist/browser/CdpPageCapture.js +1 -1
- package/dist/browser/CdpPageCaptureScripts.js +1 -1
- package/dist/browser/CdpSafeMetadata.js +5 -4
- package/dist/browser/CdpScreenshot.js +16 -5
- package/dist/browser/CdpTargetSession.js +25 -4
- package/dist/browser/CdpWebMcpDiscovery.js +93 -20
- package/dist/browser/JavaScriptRuntimeScope.js +28 -2
- package/dist/browser/PlaywrightBrowserScenarioProvider.js +9 -8
- package/dist/browser/PlaywrightElectronActiveActions.js +3 -10
- package/dist/browser/PlaywrightElectronActiveProvider.js +5 -5
- package/dist/browser/PlaywrightScenarioActions.js +1 -1
- package/dist/browser/PlaywrightScenarioArtifacts.js +13 -25
- package/dist/browser/PlaywrightScenarioBrowser.js +28 -25
- package/dist/browser/PlaywrightScenarioEvents.js +82 -93
- package/dist/browser/PlaywrightScenarioSession.js +27 -123
- package/dist/browser/PngVisualDiff.js +22 -3
- package/dist/browser/V8InspectorCaptureProjection.js +7 -1
- package/dist/browser/V8InspectorProvider.js +60 -7
- package/dist/browser/WebSourceMapFetcher.js +99 -53
- package/dist/cli/artifactCommands.js +56 -12
- package/dist/cli/coreAnalysisCommands.js +110 -0
- package/dist/cli/managedCommands.js +1 -31
- package/dist/cli/setupCommands.js +16 -14
- package/dist/cli/utilityCommands.js +61 -4
- package/dist/cli.js +5 -7
- package/dist/cliApplicationCommands.js +0 -83
- package/dist/cliBrowserAdvancedCommands.js +7 -11
- package/dist/cliBrowserCommands.js +15 -23
- package/dist/cliBrowserContext.js +3 -24
- package/dist/cliBrowserScenarioCommands.js +2 -10
- package/dist/cliCommandNames.js +82 -7
- package/dist/cliElectronCommands.js +10 -36
- package/dist/cliJavaScriptRuntimeCommands.js +6 -30
- package/dist/cliJsonInput.js +4 -2
- package/dist/cliLogging.js +16 -7
- package/dist/cliObservationOptions.js +1 -1
- package/dist/cliOutput.js +2 -4
- package/dist/cliProcessCommands.js +6 -33
- package/dist/cliSetup.js +90 -160
- package/dist/config/environment.js +2 -78
- package/dist/config/parseConfig.js +18 -109
- package/dist/config/parsers.js +0 -23
- package/dist/contracts/applicationToolContracts.js +1 -118
- package/dist/contracts/artifactToolContracts.js +11 -19
- package/dist/contracts/browserScenarioToolContracts.js +1 -5
- package/dist/contracts/browserToolContracts.js +9 -16
- package/dist/contracts/electronToolContracts.js +5 -6
- package/dist/contracts/enhancedInputs.js +3 -2
- package/dist/contracts/errorSchemas.js +16 -40
- package/dist/contracts/functionWorkflowToolContracts.js +2 -2
- package/dist/contracts/javascriptApplicationWorkflowExamples.js +2 -2
- package/dist/contracts/javascriptRuntimeObservationToolContracts.js +4 -4
- package/dist/contracts/javascriptRuntimeReconciliationExample.js +1 -1
- package/dist/contracts/managedToolContracts.js +7 -4
- package/dist/contracts/managedWorkflowExamples.js +0 -22
- package/dist/contracts/managedWorkflowToolContracts.js +16 -31
- package/dist/contracts/nativeToolContracts.js +9 -0
- package/dist/contracts/promptContracts.js +6 -6
- package/dist/contracts/sessionToolSchemas.js +3 -3
- package/dist/contracts/toolContractExamples.js +4 -3
- package/dist/contracts/toolContracts.js +18 -7
- package/dist/contracts/toolEffects.js +34 -21
- package/dist/contracts/toolOutputSchemaGroups.js +18 -5
- package/dist/contracts/toolOutputSchemaPrimitives.js +9 -6
- package/dist/contracts/toolSchemaMetadata.js +5 -8
- package/dist/doctorRuntime.js +0 -41
- package/dist/domain/analysisErrorPresentation.js +4 -28
- package/dist/domain/analysisErrorProjection.js +33 -50
- package/dist/domain/analysisProfile.js +1 -1
- package/dist/domain/analysisSnapshot.js +77 -3
- package/dist/domain/androidApplication.js +5 -4
- package/dist/domain/appleApplication.js +5 -4
- package/dist/domain/appleAssetCatalog.js +127 -0
- package/dist/domain/artifactComparison.js +7 -11
- package/dist/domain/artifactGraph.js +8 -6
- package/dist/domain/artifactInspection.js +13 -12
- package/dist/domain/binaryTarget.js +23 -9
- package/dist/domain/browserObservation.js +43 -24
- package/dist/domain/browserObservationSchemas.js +2 -1
- package/dist/domain/browserScenario.js +7 -107
- package/dist/domain/browserScenarioCapture.js +0 -1
- package/dist/domain/browserScenarioCaptureValues.js +5 -4
- package/dist/domain/browserScenarioDiff.js +1 -3
- package/dist/domain/browserScenarioValues.js +16 -107
- package/dist/domain/bundleComparison.js +18 -17
- package/dist/domain/callPathSchemas.js +17 -7
- package/dist/domain/changedBehavior.js +2 -3
- package/dist/domain/comparisonSemantics.js +19 -0
- package/dist/domain/completionLedgerGeneration.js +3 -2
- package/dist/domain/conformancePackage.js +2 -1
- package/dist/domain/conformanceTrustGate.js +3 -5
- package/dist/domain/customProtocolCapture.js +2 -2
- package/dist/domain/digests.js +30 -0
- package/dist/domain/dosMz.js +83 -0
- package/dist/domain/electronActiveObservation.js +7 -5
- package/dist/domain/electronObservation.js +3 -2
- package/dist/domain/electronStaticAnalysisNative.js +15 -6
- package/dist/domain/emptyArraySchema.js +3 -0
- package/dist/domain/errors.js +10 -28
- package/dist/domain/evidence.js +5 -3
- package/dist/domain/evidenceCompletionLedger.js +3 -2
- package/dist/domain/functionComparisonNormalization.js +24 -18
- package/dist/domain/functionComparisonResults.js +3 -7
- package/dist/domain/functionComparisonSchemas.js +3 -2
- package/dist/domain/hopperValues.js +108 -8
- package/dist/domain/javascriptApplicationAnalysis.js +4 -7
- package/dist/domain/javascriptApplicationEvidenceSchemas.js +4 -3
- package/dist/domain/javascriptApplicationGraphSchemas.js +8 -7
- package/dist/domain/javascriptApplicationVersionComparisonSchemas.js +9 -7
- package/dist/domain/javascriptApplicationVersionItems.js +12 -18
- package/dist/domain/javascriptAstValues.js +4 -0
- package/dist/domain/javascriptExportShapeComparison.js +1 -6
- package/dist/domain/javascriptExportShapeComparisonSchemas.js +6 -10
- package/dist/domain/javascriptExportShapeVariants.js +15 -2
- package/dist/domain/javascriptFeatureTraceSchemas.js +8 -7
- package/dist/domain/javascriptRuntimeObservation.js +14 -2
- package/dist/domain/javascriptRuntimeReconciliationMatching.js +8 -0
- package/dist/domain/javascriptRuntimeReconciliationParsing.js +4 -2
- package/dist/domain/javascriptRuntimeReconciliationResult.js +6 -4
- package/dist/domain/javascriptRuntimeReconciliationRuntime.js +15 -4
- package/dist/domain/javascriptRuntimeReconciliationSchemas.js +19 -18
- package/dist/domain/javascriptRuntimeStaticCandidates.js +18 -6
- package/dist/domain/javascriptSemanticAnalysis.js +57 -19
- package/dist/domain/javascriptSemanticAsyncEffects.js +39 -40
- package/dist/domain/javascriptSemanticCalls.js +46 -27
- package/dist/domain/javascriptSemanticChildProcesses.js +43 -50
- package/dist/domain/javascriptSemanticDataEffectHelpers.js +91 -18
- package/dist/domain/javascriptSemanticDataEffects.js +22 -10
- package/dist/domain/javascriptSemanticGraphSchemas.js +8 -6
- package/dist/domain/javascriptSemanticObjects.js +13 -3
- package/dist/domain/javascriptSemanticProjection.js +144 -38
- package/dist/domain/javascriptSemanticPromises.js +14 -27
- package/dist/domain/javascriptSemanticQuerySchemas.js +6 -9
- package/dist/domain/javascriptSemanticResources.js +2 -5
- package/dist/domain/javascriptSemanticState.js +4 -0
- package/dist/domain/javascriptSemanticTraceSchemas.js +2 -1
- package/dist/domain/javascriptSemanticTraversal.js +13 -5
- package/dist/domain/javascriptSemanticValues.js +10 -9
- package/dist/domain/javascriptSourceParser.js +5 -1
- package/dist/domain/javascriptStaticAnalysisCalls.js +8 -5
- package/dist/domain/javascriptStaticAnalysisHelpers.js +16 -7
- package/dist/domain/keyedArchive.js +181 -0
- package/dist/domain/managedApplicationGraph.js +4 -3
- package/dist/domain/managedArtifact.js +2 -1
- package/dist/domain/managedMemberComparison.js +18 -13
- package/dist/domain/managedMemberComparisonCoverage.js +2 -1
- package/dist/domain/managedMemberComparisonItems.js +27 -7
- package/dist/domain/managedMemberComparisonMatch.js +22 -6
- package/dist/domain/managedNativeVerificationMatch.js +2 -2
- package/dist/domain/managedNativeVerificationSchemas.js +7 -5
- package/dist/domain/managedReconstruction.js +6 -5
- package/dist/domain/nativeApiBoundary.js +7 -0
- package/dist/domain/nativeDataType.js +51 -0
- package/dist/domain/nativeInspection.js +0 -1
- package/dist/domain/nativeInstruction.js +82 -0
- package/dist/domain/nativeInvestigationGraph.js +9 -5
- package/dist/domain/nativeUiObservation.js +123 -0
- package/dist/domain/nativeValueFlow.js +17 -0
- package/dist/domain/nativeValueTrace.js +64 -0
- package/dist/domain/objcSwiftMetadata.js +39 -0
- package/dist/domain/peInspection.js +1 -0
- package/dist/domain/processCapture.js +5 -55
- package/dist/domain/processCaptureExample.js +0 -9
- package/dist/domain/processCaptureValidation.js +13 -144
- package/dist/domain/processComparison.js +3 -25
- package/dist/domain/processObservation.js +0 -29
- package/dist/domain/processScenario.js +28 -228
- package/dist/domain/processTraceDimensionProjection.js +0 -15
- package/dist/domain/processTraceEvaluation.js +0 -6
- package/dist/domain/protocolCapture.js +8 -36
- package/dist/domain/reconstructionCoverage.js +3 -2
- package/dist/domain/reconstructionObligationLedgerSchemas.js +4 -12
- package/dist/domain/reconstructionReadinessSchemas.js +4 -3
- package/dist/domain/reconstructionVerification.js +2 -1
- package/dist/domain/reconstructionVerificationSchemas.js +6 -13
- package/dist/domain/referenceSourceClassification.js +0 -110
- package/dist/domain/referenceSourceGraph.js +15 -5
- package/dist/domain/residualUnknown.js +3 -2
- package/dist/domain/runtimeIdentification.js +6 -5
- package/dist/domain/sourceMapContents.js +5 -0
- package/dist/domain/sourceToBundleComparison.js +3 -10
- package/dist/domain/sourceToBundleComparisonSchemas.js +7 -6
- package/dist/domain/sourceToBundleSignals.js +9 -3
- package/dist/domain/staticRuntimeCorrelation.js +5 -11
- package/dist/domain/webBundleAnalysis.js +17 -9
- package/dist/domain/webBundleAnalyzer.js +1 -1
- package/dist/domain/webCaptureDiff.js +5 -11
- package/dist/domain/webCaptureDiffSchemas.js +2 -1
- package/dist/domain/webMcpDiscovery.js +2 -1
- package/dist/dotnet/ManagedMemberInspectorCore.js +15 -7
- package/dist/dotnet/ManagedMemberInstructionDecoder.js +57 -40
- package/dist/dotnet/ManagedMemberRows.js +2 -0
- package/dist/dotnet/ManagedMethodBodyReader.js +15 -8
- package/dist/dotnet/ManagedPeReader.js +2 -0
- package/dist/generatedMcpToolCatalog.js +1 -1
- package/dist/generatedPackageMetadata.js +2 -2
- package/dist/ghidra/GhidraAnalysisProfile.js +15 -5
- package/dist/ghidra/GhidraClient.js +38 -8
- package/dist/ghidra/GhidraFunctionValues.js +56 -20
- package/dist/ghidra/GhidraInstallation.js +7 -4
- package/dist/ghidra/GhidraInventoryValues.js +44 -9
- package/dist/ghidra/GhidraLauncher.js +18 -3
- package/dist/ghidra/GhidraProvider.js +23 -2
- package/dist/ghidra/GhidraRequestQueue.js +45 -4
- package/dist/ghidra/GhidraSessionValues.js +5 -0
- package/dist/hopper/HopperAnalysisProfile.js +2 -0
- package/dist/hopper/HopperProvider.js +29 -6
- package/dist/hopper/HopperTargetLease.js +18 -4
- package/dist/logger.js +0 -13
- package/dist/main/messages.js +0 -1
- package/dist/main/reload.js +3 -32
- package/dist/main/shutdown.js +1 -2
- package/dist/main/transport.js +0 -17
- package/dist/main.js +0 -10
- package/dist/native/AppleDispatchMetadata.js +582 -0
- package/dist/native/AppleObjcProtocols.js +88 -0
- package/dist/native/AppleSwiftVtables.js +86 -0
- package/dist/native/CommandRunner.js +1 -1
- package/dist/native/NativeHostCapabilities.js +23 -0
- package/dist/native/NativeMacOSProvider.js +61 -9
- package/dist/native/NativeMachoInspection.js +39 -6
- package/dist/native/NativeUiHelperRuntime.js +42 -0
- package/dist/native/NativeUiObservation.js +174 -0
- package/dist/native/parsers/codesign.js +4 -1
- package/dist/native/parsers/dyldInfo.js +51 -25
- package/dist/native/parsers/lipo.js +13 -4
- package/dist/native/parsers/otool.js +84 -39
- package/dist/native/parsers/plist.js +2 -1
- package/dist/process/ExecFileOutput.js +5 -1
- package/dist/process/ProcessOwnership.js +69 -33
- package/dist/process/ProcessOwnershipObservation.js +31 -12
- package/dist/process/ProviderProcess.js +4 -2
- package/dist/reference/ReferenceSourceReaderEntries.js +48 -31
- package/dist/reference/ReferenceSourceReaderErrors.js +24 -0
- package/dist/reference/ReferenceSourceReaderFile.js +11 -5
- package/dist/reference/ReferenceSourceReaderValidate.js +22 -8
- package/dist/server/createServer.js +7 -62
- package/dist/server/registerApplicationTools/helpers.js +2 -9
- package/dist/server/registerApplicationTools.js +0 -4
- package/dist/server/registerArtifactComparisonTool.js +1 -1
- package/dist/server/registerBrowserScenarioTool.js +4 -2
- package/dist/server/registerBrowserTools.js +7 -7
- package/dist/server/registerBundleComparisonTool.js +1 -1
- package/dist/server/registerCloseLifecycleTool.js +1 -1
- package/dist/server/registerElectronTools.js +10 -4
- package/dist/server/registerEnhancedTools.js +20 -12
- package/dist/server/registerEvidenceTools.js +4 -28
- package/dist/server/registerFunctionComparisonTool.js +1 -1
- package/dist/server/registerInvestigationTools.js +6 -6
- package/dist/server/registerJavaScriptRuntimeObservationTools.js +2 -2
- package/dist/server/registerManagedTools.js +28 -14
- package/dist/server/registerManagedWorkflowTools.js +0 -2
- package/dist/server/registerProcessComparisonTool.js +1 -3
- package/dist/server/registerSessionRecordTools.js +9 -9
- package/dist/server/registerSessionStatusTool.js +1 -1
- package/dist/server/registerSessionTools.js +28 -57
- package/dist/server/sessionAvailabilityPolicy.js +2 -3
- package/dist/server/sessionToolPolicies.js +0 -4
- package/dist/server/toolResult.js +8 -10
- package/package.json +32 -22
- package/skills/reverse-engineer-anything/SKILL.md +15 -11
- package/skills/reverse-engineer-anything/references/evidence-workflows.md +3 -2
- package/skills/reverse-engineer-anything/references/javascript-applications.md +3 -2
- package/skills/reverse-engineer-anything/references/native-and-artifacts.md +8 -6
- package/skills/reverse-engineer-anything/references/runtime-observation.md +15 -11
- package/dist/application/CommandShimReplay.js +0 -152
- package/dist/application/ConfiguredRoots.js +0 -19
- package/dist/application/InstrumentedJavaScriptReplayHost.js +0 -36
- package/dist/application/JavaScriptReplayPermission.js +0 -16
- package/dist/application/JavaScriptReplayPlanning.js +0 -207
- package/dist/application/JavaScriptReplayService.js +0 -274
- package/dist/application/LoopbackReplay.js +0 -389
- package/dist/application/LoopbackReplayRecorder.js +0 -129
- package/dist/application/ManagedRuntimeCorrelationService.js +0 -104
- package/dist/application/NodeRuntimeCharacterizationService.js +0 -191
- package/dist/application/PermissionAuthority.js +0 -268
- package/dist/application/PermissionConfiguration.js +0 -26
- package/dist/application/PermissionFailure.js +0 -5
- package/dist/application/ProcessCaptureAuthority.js +0 -24
- package/dist/application/ProcessCapturePermission.js +0 -13
- package/dist/application/ProcessCheckpoints.js +0 -178
- package/dist/application/ProcessReactiveCoordinator.js +0 -223
- package/dist/application/ProcessReactiveEffects.js +0 -153
- package/dist/application/ProcessReactiveHarness.js +0 -106
- package/dist/application/ProcessReactiveObservations.js +0 -105
- package/dist/application/ProjectPermissionStore.js +0 -199
- package/dist/application/RuntimeExecutableDiagnostics.js +0 -198
- package/dist/application/Upgrade.js +0 -134
- package/dist/browser/SensitiveTextCapture.js +0 -8
- package/dist/cliPolicyCommands.js +0 -185
- package/dist/config/browserScenario.js +0 -77
- package/dist/config/electronAutomation.js +0 -35
- package/dist/config/javascriptReplay.js +0 -41
- package/dist/config/managedRuntime.js +0 -25
- package/dist/config/passiveObservation.js +0 -87
- package/dist/config/permissions.js +0 -23
- package/dist/config/processCapture.js +0 -47
- package/dist/contracts/replayMachineExample.js +0 -37
- package/dist/domain/javascriptExportInstrumentation.js +0 -95
- package/dist/domain/javascriptReplay.js +0 -360
- package/dist/domain/managedRuntimeCorrelation.js +0 -181
- package/dist/domain/nodeRuntimeCharacterization.js +0 -63
- package/dist/domain/permissionPolicy.js +0 -176
- package/dist/domain/processCaptureReactiveSchema.js +0 -68
- package/dist/domain/processCaptureReactiveValidation.js +0 -180
- package/dist/domain/processReactiveCheckpointDataflow.js +0 -32
- package/dist/domain/processReactiveMatching.js +0 -196
- package/dist/domain/processReactiveRuntime.js +0 -116
- package/dist/domain/processReactiveScenario.js +0 -296
- package/dist/domain/processReactiveScenarioPreflight.js +0 -95
- package/dist/domain/processReactiveTransition.js +0 -187
- package/dist/domain/replayMachine.js +0 -320
- package/dist/domain/replayMachineRun.js +0 -168
- package/dist/domain/replayMachineRuntime.js +0 -296
- package/dist/domain/replayMachineValues.js +0 -84
- package/dist/domain/runtimeCharacterization.js +0 -84
- package/dist/replay/JavaScriptReplayWorker.js +0 -382
- package/dist/replay/JavaScriptReplayWorkerTypes.js +0 -1
- package/dist/replay/LinuxJavaScriptReplayRunner.js +0 -216
- package/dist/replay/LinuxJavaScriptReplaySandbox.js +0 -121
- package/dist/replay/LinuxRuntimeClosure.js +0 -44
- package/dist/replay/LinuxSeccompPolicy.js +0 -40
- package/dist/replay/ReplayOutcome.js +0 -104
- package/dist/replay/ReplayProcessLifecycle.js +0 -96
- package/dist/replay/ReplaySeccompFile.js +0 -29
- package/dist/replay/ReplayWorkerProtocol.js +0 -58
- package/dist/replay/SystemJavaScriptReplayHost.js +0 -153
- package/dist/server/ProcessCaptureElicitation.js +0 -153
- package/dist/server/registerApplicationTools/characterization.js +0 -46
- package/dist/server/registerApplicationTools/controlledReplay.js +0 -31
- package/dist/server/registerManagedWorkflowTools/planManagedRuntimeCorrelation.js +0 -29
- package/dist/server/registerReplayMachineTool.js +0 -14
- package/skills/reverse-engineer-anything/references/controlled-replay.md +0 -12
|
@@ -9,71 +9,201 @@ import { installMacHopper } from "./MacHopper.js";
|
|
|
9
9
|
import { configureDetectedClients } from "./SetupClients.js";
|
|
10
10
|
import { supportedClients } from "./SupportedClients.js";
|
|
11
11
|
import { canonicalSkillNeedsInstall, installCanonicalSkill, } from "./SetupSkill.js";
|
|
12
|
-
import {
|
|
13
|
-
import { clientConfigurationAligned, configureJsonClient, configureTomlClient, inspectClientConfiguration, } from "./SetupClientConfiguration.js";
|
|
12
|
+
import { discoverSetupState, planSetupActions } from "./SetupPlan.js";
|
|
13
|
+
import { clientConfigurationAligned, configureClientConfiguration, configureJsonClient, configureTomlClient, inspectClientConfiguration, } from "./SetupClientConfiguration.js";
|
|
14
14
|
export { configureJsonClient, configureTomlClient };
|
|
15
15
|
import { setupInstallFailure, } from "./SetupInstallFailure.js";
|
|
16
16
|
import { providerRegistrationEnvironment } from "./SetupRegistrationEnvironment.js";
|
|
17
17
|
export { canonicalSkillNeedsInstall, installCanonicalSkill };
|
|
18
|
-
|
|
18
|
+
/** Resolve the executable and arguments used in a managed MCP registration. */
|
|
19
|
+
export const setupRegistrationCommand = (platform, useNpmRunner = process.env.npm_command === "exec") => useNpmRunner
|
|
19
20
|
? PRODUCT_IDENTITY.mcpCommand.split(" ")
|
|
20
|
-
:
|
|
21
|
+
: platform === "win32"
|
|
22
|
+
? [
|
|
23
|
+
process.execPath,
|
|
24
|
+
resolve(process.argv[1] ?? PRODUCT_IDENTITY.cliBinary),
|
|
25
|
+
"mcp",
|
|
26
|
+
]
|
|
27
|
+
: [resolve(process.argv[1] ?? PRODUCT_IDENTITY.cliBinary), "mcp"];
|
|
28
|
+
/** Whether the requested setup actions still need approval or human repair. */
|
|
29
|
+
export const isSetupFailure = (result) => {
|
|
30
|
+
const status = result.status;
|
|
31
|
+
switch (status) {
|
|
32
|
+
case "planned":
|
|
33
|
+
case "cancelled":
|
|
34
|
+
case "ready":
|
|
35
|
+
return false;
|
|
36
|
+
case "needs_confirmation":
|
|
37
|
+
case "needs_human":
|
|
38
|
+
return true;
|
|
39
|
+
default: {
|
|
40
|
+
const exhaustive = status;
|
|
41
|
+
throw new TypeError(`Unhandled setup result status: ${String(exhaustive)}`);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
};
|
|
21
45
|
/** Discover, approve, and apply setup actions idempotently. */
|
|
22
46
|
export const runSetup = async (options, host = systemSetupHost(), confirm) => {
|
|
23
47
|
const appliedActions = [];
|
|
24
48
|
let plannedActions = [];
|
|
25
49
|
const clients = {};
|
|
26
|
-
|
|
27
|
-
|
|
50
|
+
let clientStates = [];
|
|
51
|
+
let readinessScope = options.readinessScope;
|
|
52
|
+
const fail = (remediation) => setupFailure(remediation, [host, plannedActions, appliedActions, clients, clientStates], readinessScope);
|
|
53
|
+
const unsupported = await hostRemediation(host, false);
|
|
28
54
|
if (unsupported !== undefined)
|
|
29
55
|
return fail(unsupported);
|
|
30
56
|
let hopperPath = await host.hopperPath();
|
|
31
57
|
let providerEnvironment = await initialProviderEnvironment(host, hopperPath);
|
|
32
|
-
const discovery = await
|
|
58
|
+
const discovery = await discoverSetupState({
|
|
33
59
|
host,
|
|
34
60
|
providerEnvironment,
|
|
35
|
-
command: registrationCommand(),
|
|
36
61
|
forceHopperInstall: options.installHopper,
|
|
37
|
-
proposeHopper: options.proposeHopper ??
|
|
38
|
-
selectedClientIds: options.clientIds,
|
|
39
|
-
installSkillSelection: options.installSkill,
|
|
62
|
+
proposeHopper: options.proposeHopper ?? (confirm !== undefined && !options.structured),
|
|
40
63
|
doctorScope: options.readinessScope,
|
|
41
64
|
});
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
65
|
+
clientStates = discovery.clientStates;
|
|
66
|
+
const clientSelectionAllowed = options.clientIds === undefined &&
|
|
67
|
+
options.readinessScope?.clients === undefined &&
|
|
68
|
+
options.allDetectedClients !== true &&
|
|
69
|
+
options.installHopper !== true &&
|
|
70
|
+
options.installSkill === undefined;
|
|
71
|
+
const interactiveSelection = confirm !== undefined && !options.structured && clientSelectionAllowed;
|
|
72
|
+
let selectedClientIds = options.allDetectedClients
|
|
73
|
+
? discovery.detectedClientIds
|
|
74
|
+
: (options.clientIds ??
|
|
75
|
+
options.readinessScope?.clients ??
|
|
76
|
+
discovery.defaultClientIds);
|
|
77
|
+
let skillSelected = options.installSkill === true ||
|
|
78
|
+
(options.installSkill !== false && selectedClientIds.length > 0);
|
|
79
|
+
let installSkill = skillSelected && discovery.skillNeedsInstall;
|
|
80
|
+
let planDiscovery = discovery;
|
|
81
|
+
if (interactiveSelection) {
|
|
82
|
+
const offerSkillAction = options.installSkill !== false && discovery.skillNeedsInstall;
|
|
83
|
+
const selectionActions = await planSetupActions({
|
|
84
|
+
discovery,
|
|
85
|
+
host,
|
|
86
|
+
providerEnvironment,
|
|
87
|
+
command: setupRegistrationCommand(host.platform),
|
|
88
|
+
clientIds: [],
|
|
89
|
+
installSkill: offerSkillAction,
|
|
90
|
+
});
|
|
91
|
+
const decision = await confirm(selectionActions.plannedActions, {
|
|
92
|
+
stage: "select",
|
|
93
|
+
clientStates,
|
|
94
|
+
selectedClientIds: discovery.defaultClientIds,
|
|
95
|
+
clientSelectionAllowed,
|
|
96
|
+
});
|
|
97
|
+
if (isSetupDecisionCancelled(decision))
|
|
98
|
+
return setupCancelled(selectionActions.plannedActions, clients, clientStates, discovery.initialDoctor);
|
|
99
|
+
const selectedActionIds = new Set(typeof decision === "boolean"
|
|
100
|
+
? decision
|
|
101
|
+
? [
|
|
102
|
+
...selectionActions.plannedActions.map(({ id }) => id),
|
|
103
|
+
...discovery.defaultClientIds.map((id) => `configure_client:${id}`),
|
|
104
|
+
]
|
|
105
|
+
: []
|
|
106
|
+
: decision.selectedActionIds);
|
|
107
|
+
selectedClientIds = [...selectedActionIds]
|
|
108
|
+
.filter((id) => id.startsWith("configure_client:"))
|
|
109
|
+
.map((id) => id.slice("configure_client:".length));
|
|
110
|
+
const proposedInstallAction = selectionActions.plannedActions.some(({ id }) => id === "install_hopper");
|
|
111
|
+
planDiscovery = {
|
|
112
|
+
...discovery,
|
|
113
|
+
installHopper: options.installHopper ||
|
|
114
|
+
(proposedInstallAction && selectedActionIds.has("install_hopper")),
|
|
115
|
+
};
|
|
116
|
+
skillSelected =
|
|
117
|
+
options.installSkill === true ||
|
|
118
|
+
(selectedActionIds.has("install_skill") &&
|
|
119
|
+
selectedClientIds.length === 0) ||
|
|
120
|
+
(options.installSkill !== false && selectedClientIds.length > 0);
|
|
121
|
+
installSkill = skillSelected && discovery.skillNeedsInstall;
|
|
122
|
+
}
|
|
123
|
+
const planned = await planSetupActions({
|
|
124
|
+
discovery: planDiscovery,
|
|
125
|
+
host,
|
|
126
|
+
providerEnvironment,
|
|
127
|
+
command: setupRegistrationCommand(host.platform),
|
|
128
|
+
clientIds: selectedClientIds,
|
|
129
|
+
installSkill,
|
|
130
|
+
});
|
|
131
|
+
plannedActions = planned.plannedActions;
|
|
132
|
+
if (planned.blocker !== undefined)
|
|
133
|
+
return fail(planned.blocker);
|
|
134
|
+
const hopperBlocker = await hostRemediation(host, planDiscovery.installHopper);
|
|
135
|
+
if (hopperBlocker !== undefined)
|
|
136
|
+
return fail(hopperBlocker);
|
|
137
|
+
const planSelection = {
|
|
138
|
+
installHopper: planDiscovery.installHopper,
|
|
139
|
+
installSkill,
|
|
140
|
+
skillSelected,
|
|
141
|
+
selectedClients: planned.selectedClients,
|
|
142
|
+
clientsToConfigure: planned.clientsToConfigure,
|
|
143
|
+
};
|
|
144
|
+
readinessScope = resolvedReadinessScope(options.readinessScope, planSelection);
|
|
145
|
+
if (options.dryRun === true)
|
|
47
146
|
return {
|
|
48
|
-
status:
|
|
147
|
+
status: "planned",
|
|
49
148
|
plannedActions,
|
|
50
149
|
appliedActions,
|
|
51
150
|
clients,
|
|
52
|
-
doctor: discovery.initialDoctor,
|
|
53
|
-
|
|
151
|
+
doctor: summarizeDoctor(discovery.initialDoctor),
|
|
152
|
+
clientStates,
|
|
54
153
|
};
|
|
55
|
-
let
|
|
56
|
-
|
|
57
|
-
|
|
154
|
+
let approved = options.approved || plannedActions.length === 0;
|
|
155
|
+
let interactiveApproval = false;
|
|
156
|
+
if (!approved && confirm !== undefined && !options.structured) {
|
|
157
|
+
const decision = await confirm?.(plannedActions, {
|
|
158
|
+
stage: "confirm",
|
|
159
|
+
clientStates,
|
|
160
|
+
selectedClientIds,
|
|
161
|
+
clientSelectionAllowed: false,
|
|
162
|
+
});
|
|
163
|
+
if (decision !== undefined) {
|
|
164
|
+
if (isSetupDecisionCancelled(decision))
|
|
165
|
+
return setupCancelled(plannedActions, clients, clientStates, discovery.initialDoctor);
|
|
166
|
+
approved = typeof decision === "boolean" ? decision : decision.approved;
|
|
167
|
+
interactiveApproval = approved;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
if (!approved)
|
|
171
|
+
return {
|
|
172
|
+
status: confirm === undefined ? "needs_confirmation" : "cancelled",
|
|
173
|
+
plannedActions,
|
|
174
|
+
appliedActions,
|
|
175
|
+
clients,
|
|
176
|
+
doctor: summarizeDoctor(discovery.initialDoctor),
|
|
177
|
+
clientStates,
|
|
178
|
+
...(confirm === undefined
|
|
179
|
+
? {
|
|
180
|
+
remediation: "Review the setup plan, then rerun interactively or with --yes.",
|
|
181
|
+
}
|
|
182
|
+
: {}),
|
|
183
|
+
};
|
|
184
|
+
let selectedClients = planSelection.clientsToConfigure;
|
|
185
|
+
if (planSelection.installHopper &&
|
|
186
|
+
(interactiveApproval || options.installHopper)) {
|
|
58
187
|
const install = await installHopperAction({
|
|
59
188
|
host,
|
|
60
189
|
options,
|
|
61
190
|
plannedActions,
|
|
62
191
|
appliedActions,
|
|
63
192
|
clients,
|
|
64
|
-
|
|
193
|
+
selectedClients,
|
|
65
194
|
providerEnvironment,
|
|
66
|
-
doctorScope:
|
|
195
|
+
doctorScope: readinessScope,
|
|
196
|
+
clientStates,
|
|
67
197
|
});
|
|
68
198
|
if ("failure" in install)
|
|
69
199
|
return install.failure;
|
|
70
|
-
({ hopperPath, providerEnvironment,
|
|
200
|
+
({ hopperPath, providerEnvironment, selectedClients } = install);
|
|
71
201
|
}
|
|
72
202
|
const clientFailure = await configureDetectedClients({
|
|
73
203
|
host,
|
|
74
|
-
detectedClients,
|
|
204
|
+
detectedClients: selectedClients,
|
|
75
205
|
providerEnvironment,
|
|
76
|
-
command:
|
|
206
|
+
command: setupRegistrationCommand(host.platform),
|
|
77
207
|
clients,
|
|
78
208
|
appliedActions,
|
|
79
209
|
...(options.onProgress === undefined
|
|
@@ -82,10 +212,10 @@ export const runSetup = async (options, host = systemSetupHost(), confirm) => {
|
|
|
82
212
|
});
|
|
83
213
|
if (clientFailure !== undefined)
|
|
84
214
|
return fail(clientFailure);
|
|
85
|
-
if (
|
|
215
|
+
if (planSelection.installSkill &&
|
|
86
216
|
!(await installSkillAction(host, options, appliedActions)))
|
|
87
217
|
return fail("REA analysis skill could not be installed or verified. Check permissions for `~/.agents/skills`, then rerun setup.");
|
|
88
|
-
const doctor = await host.doctor(
|
|
218
|
+
const doctor = summarizeDoctor(await host.doctor(readinessScope));
|
|
89
219
|
const remediation = finalSetupRemediation(host.platform, appliedActions.includes("installed_hopper"), doctor.healthy, hopperPath);
|
|
90
220
|
return {
|
|
91
221
|
status: remediation === undefined ? "ready" : "needs_human",
|
|
@@ -93,38 +223,10 @@ export const runSetup = async (options, host = systemSetupHost(), confirm) => {
|
|
|
93
223
|
appliedActions,
|
|
94
224
|
clients,
|
|
95
225
|
doctor,
|
|
226
|
+
clientStates,
|
|
96
227
|
...(remediation === undefined ? {} : { remediation }),
|
|
97
228
|
};
|
|
98
229
|
};
|
|
99
|
-
const resolveSetupSelection = async (options, discovery, confirm) => {
|
|
100
|
-
let { installHopper, installSkill, detectedClients, plannedActions } = discovery;
|
|
101
|
-
let approved = options.approved || plannedActions.length === 0;
|
|
102
|
-
let interactiveApproval = false;
|
|
103
|
-
if (!approved && confirm !== undefined && !options.structured) {
|
|
104
|
-
const decision = await confirm(plannedActions);
|
|
105
|
-
if (typeof decision === "boolean") {
|
|
106
|
-
interactiveApproval = decision;
|
|
107
|
-
approved = decision;
|
|
108
|
-
}
|
|
109
|
-
else {
|
|
110
|
-
const selected = new Set(decision.selectedActionIds);
|
|
111
|
-
plannedActions = plannedActions.filter(({ id }) => selected.has(id));
|
|
112
|
-
installHopper = plannedActions.some(({ kind }) => kind === "install_hopper");
|
|
113
|
-
installSkill = plannedActions.some(({ kind }) => kind === "install_skill");
|
|
114
|
-
detectedClients = detectedClients.filter((client) => selected.has(`configure_client:${client.name}`));
|
|
115
|
-
interactiveApproval = decision.approved;
|
|
116
|
-
approved = decision.approved;
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
return {
|
|
120
|
-
approved,
|
|
121
|
-
interactiveApproval,
|
|
122
|
-
installHopper,
|
|
123
|
-
installSkill,
|
|
124
|
-
detectedClients,
|
|
125
|
-
plannedActions,
|
|
126
|
-
};
|
|
127
|
-
};
|
|
128
230
|
const installHopperAction = async (input) => {
|
|
129
231
|
const label = "Hopper deep-analysis provider";
|
|
130
232
|
emitProgress(input.options, {
|
|
@@ -146,7 +248,8 @@ const installHopperAction = async (input) => {
|
|
|
146
248
|
plannedActions: input.plannedActions,
|
|
147
249
|
appliedActions: input.appliedActions,
|
|
148
250
|
clients: input.clients,
|
|
149
|
-
doctor: await input.host.doctor(input.doctorScope),
|
|
251
|
+
doctor: summarizeDoctor(await input.host.doctor(input.doctorScope)),
|
|
252
|
+
clientStates: input.clientStates,
|
|
150
253
|
code: installed.code,
|
|
151
254
|
remediation: installed.remediation,
|
|
152
255
|
},
|
|
@@ -166,7 +269,7 @@ const installHopperAction = async (input) => {
|
|
|
166
269
|
return {
|
|
167
270
|
hopperPath: installed.launcherPath,
|
|
168
271
|
providerEnvironment,
|
|
169
|
-
|
|
272
|
+
selectedClients: await filterClientsNeedingConfigure(input.host, input.selectedClients, providerEnvironment, setupRegistrationCommand(input.host.platform)),
|
|
170
273
|
};
|
|
171
274
|
};
|
|
172
275
|
const installSkillAction = async (host, options, appliedActions) => {
|
|
@@ -195,14 +298,17 @@ const installSkillAction = async (host, options, appliedActions) => {
|
|
|
195
298
|
});
|
|
196
299
|
return true;
|
|
197
300
|
};
|
|
198
|
-
const setupFailure = async (remediation, [host, plannedActions, appliedActions, clients], scope) =>
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
301
|
+
const setupFailure = async (remediation, [host, plannedActions, appliedActions, clients, clientStates], scope) => {
|
|
302
|
+
return {
|
|
303
|
+
status: "needs_human",
|
|
304
|
+
plannedActions,
|
|
305
|
+
appliedActions,
|
|
306
|
+
clients,
|
|
307
|
+
doctor: summarizeDoctor(await host.doctor(scope)),
|
|
308
|
+
clientStates,
|
|
309
|
+
remediation,
|
|
310
|
+
};
|
|
311
|
+
};
|
|
206
312
|
const emitProgress = (options, event) => options.onProgress?.(event);
|
|
207
313
|
const filterClientsNeedingConfigure = async (host, detectedClients, providerEnvironment, command) => {
|
|
208
314
|
const needs = await Promise.all(detectedClients.map((client) => host.clientNeedsConfigure(client, providerEnvironment, command)));
|
|
@@ -221,11 +327,57 @@ const finalSetupRemediation = (platform, installedHopper, healthy, hopperPath) =
|
|
|
221
327
|
? "Hopper is optional for non-Hopper providers. Rerun with --yes --install-hopper for deep native analysis."
|
|
222
328
|
: "Run rea doctor and apply each reported remediation.";
|
|
223
329
|
};
|
|
224
|
-
const
|
|
225
|
-
|
|
226
|
-
|
|
330
|
+
const isSetupDecisionCancelled = (decision) => typeof decision === "boolean" ? !decision : decision.cancelled === true;
|
|
331
|
+
const setupCancelled = (plannedActions, clients, clientStates, doctor) => ({
|
|
332
|
+
status: "cancelled",
|
|
333
|
+
plannedActions,
|
|
334
|
+
appliedActions: [],
|
|
335
|
+
clients,
|
|
336
|
+
doctor: summarizeDoctor(doctor),
|
|
337
|
+
clientStates,
|
|
338
|
+
});
|
|
339
|
+
const resolvedReadinessScope = (requested, selection) => ({
|
|
340
|
+
clients: selection.selectedClients.map(({ name }) => name),
|
|
341
|
+
providers: selection.installHopper
|
|
342
|
+
? ["hopper"]
|
|
343
|
+
: (requested?.providers ?? []),
|
|
344
|
+
skill: selection.skillSelected === true || requested?.skill === true,
|
|
345
|
+
});
|
|
346
|
+
const summarizeDoctor = (report) => ({
|
|
347
|
+
healthy: report.healthy,
|
|
348
|
+
environment_healthy: report.environment_healthy,
|
|
349
|
+
scope: report.scope,
|
|
350
|
+
availableProviders: [
|
|
351
|
+
...(report.hopperPath !== undefined &&
|
|
352
|
+
report.checks
|
|
353
|
+
.filter(({ name }) => name.startsWith("hopper"))
|
|
354
|
+
.every(({ ok }) => ok)
|
|
355
|
+
? ["hopper"]
|
|
356
|
+
: []),
|
|
357
|
+
...(report.providerInspections ?? [])
|
|
358
|
+
.filter(({ available }) => available)
|
|
359
|
+
.map(({ id }) => id),
|
|
360
|
+
],
|
|
361
|
+
...(report.hopperPath === undefined ? {} : { hopperPath: report.hopperPath }),
|
|
362
|
+
...(report.providerInspections === undefined
|
|
363
|
+
? {}
|
|
364
|
+
: { providerInspections: report.providerInspections }),
|
|
365
|
+
...(report.identity === undefined
|
|
366
|
+
? {}
|
|
367
|
+
: {
|
|
368
|
+
identity: {
|
|
369
|
+
skill: report.identity.skill,
|
|
370
|
+
registrations: report.identity.registrations,
|
|
371
|
+
},
|
|
372
|
+
}),
|
|
373
|
+
});
|
|
374
|
+
const hostRemediation = async (host, installHopper) => {
|
|
227
375
|
if (!supportsNodeVersion(host.nodeVersion))
|
|
228
376
|
return "Install Node.js 22.19+ or 24.11+ and rerun setup.";
|
|
377
|
+
if (!installHopper)
|
|
378
|
+
return undefined;
|
|
379
|
+
if (host.platform !== "darwin" && host.platform !== "linux")
|
|
380
|
+
return "REA supports Hopper on macOS and selected 64-bit Linux distributions.";
|
|
229
381
|
if (host.platform === "darwin") {
|
|
230
382
|
const version = await host.macosVersion();
|
|
231
383
|
return version === undefined || major(version) < 12
|
|
@@ -234,17 +386,13 @@ const hostRemediation = async (host, forceHopperInstall) => {
|
|
|
234
386
|
}
|
|
235
387
|
if ((await host.linuxDistribution())?.supported === true)
|
|
236
388
|
return undefined;
|
|
237
|
-
const providerEnvironment = await host.providerEnvironment?.();
|
|
238
|
-
if (!forceHopperInstall &&
|
|
239
|
-
providerEnvironment !== undefined &&
|
|
240
|
-
Object.keys(providerEnvironment).length > 0)
|
|
241
|
-
return undefined;
|
|
242
389
|
return "Automated Hopper setup supports Ubuntu 24.04+, Fedora 41+, and 64-bit Arch Linux; configure an existing supported provider instead.";
|
|
243
390
|
};
|
|
244
391
|
/** Production setup effects for Hopper, agent configuration, and the canonical skill directory. */
|
|
245
392
|
export const systemSetupHost = (doctorHost = systemDoctorHost()) => {
|
|
393
|
+
const platform = doctorHost.platform;
|
|
246
394
|
return {
|
|
247
|
-
platform
|
|
395
|
+
platform,
|
|
248
396
|
nodeVersion: process.versions.node,
|
|
249
397
|
macosVersion: () => doctorHost.macosVersion(),
|
|
250
398
|
linuxDistribution: readLinuxDistribution,
|
|
@@ -259,7 +407,7 @@ export const systemSetupHost = (doctorHost = systemDoctorHost()) => {
|
|
|
259
407
|
};
|
|
260
408
|
},
|
|
261
409
|
installHopper: async (replaceExisting) => {
|
|
262
|
-
const result =
|
|
410
|
+
const result = platform === "linux"
|
|
263
411
|
? await installLinuxHopper()
|
|
264
412
|
: await installMacHopper({ replaceExisting });
|
|
265
413
|
if (result.status === "installed")
|
|
@@ -267,11 +415,10 @@ export const systemSetupHost = (doctorHost = systemDoctorHost()) => {
|
|
|
267
415
|
return setupInstallFailure(result.reason);
|
|
268
416
|
},
|
|
269
417
|
detectedClients: () => detectClients(homedir()),
|
|
418
|
+
supportedClients: () => Promise.resolve(supportedClients(homedir())),
|
|
270
419
|
configureClient: (client, providerEnvironment, command) => client.format === "unsupported"
|
|
271
420
|
? Promise.resolve({ status: "skipped" })
|
|
272
|
-
: client
|
|
273
|
-
? configureTomlClient(client, providerEnvironment, command)
|
|
274
|
-
: configureJsonClient(client, providerEnvironment, command),
|
|
421
|
+
: configureClientConfiguration(client, providerEnvironment, command),
|
|
275
422
|
clientNeedsConfigure: (client, providerEnvironment, command) => clientConfigurationAligned(client, providerEnvironment, command).then((aligned) => !aligned),
|
|
276
423
|
inspectClientConfiguration: inspectClientConfiguration,
|
|
277
424
|
skillNeedsInstall: () => canonicalSkillNeedsInstall(homedir()),
|
|
@@ -279,12 +426,17 @@ export const systemSetupHost = (doctorHost = systemDoctorHost()) => {
|
|
|
279
426
|
doctor: (scope) => runDoctor(undefined, doctorHost, scope),
|
|
280
427
|
};
|
|
281
428
|
};
|
|
282
|
-
/** Detect supported agents from stable
|
|
429
|
+
/** Detect supported agents from their config files or stable installation markers. */
|
|
283
430
|
export const detectClients = async (home) => {
|
|
284
431
|
const detected = [];
|
|
285
|
-
for (const candidate of supportedClients(home))
|
|
286
|
-
|
|
432
|
+
for (const candidate of supportedClients(home)) {
|
|
433
|
+
const [hasConfig, hasMarker] = await Promise.all([
|
|
434
|
+
exists(candidate.configPath),
|
|
435
|
+
candidate.markerPath === undefined ? false : exists(candidate.markerPath),
|
|
436
|
+
]);
|
|
437
|
+
if (hasConfig || hasMarker)
|
|
287
438
|
detected.push(candidate);
|
|
439
|
+
}
|
|
288
440
|
return detected;
|
|
289
441
|
};
|
|
290
442
|
const major = (version) => Number.parseInt(version.split(".")[0] ?? "0", 10);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { clientConfigurationValuesEqual, parseClientConfiguration, serializeClientConfiguration, } from "./ClientConfigurationDocument.js";
|
|
1
|
+
import { clientRegistrationEntry, clientConfigurationValuesEqual, parseClientConfiguration, serializeClientConfiguration, } from "./ClientConfigurationDocument.js";
|
|
2
2
|
import { constants as fsConstants } from "node:fs";
|
|
3
3
|
import { copyFile, mkdir, readFile, rm, writeFile } from "node:fs/promises";
|
|
4
4
|
import { dirname } from "node:path";
|
|
@@ -16,6 +16,12 @@ const defaultCommand = () => [
|
|
|
16
16
|
export const configureJsonClient = (client, environment = {}, command = defaultCommand()) => configureClientDocument(client, environment, command, "json");
|
|
17
17
|
/** Back up, atomically update, and semantically read back one TOML MCP configuration. */
|
|
18
18
|
export const configureTomlClient = (client, environment = {}, command = defaultCommand()) => configureClientDocument(client, environment, command, "toml");
|
|
19
|
+
/** Configure one supported client's native stdio MCP registration shape. */
|
|
20
|
+
export const configureClientConfiguration = (client, environment = {}, command = defaultCommand()) => {
|
|
21
|
+
if (client.format === undefined || client.format === "unsupported")
|
|
22
|
+
return Promise.resolve({ status: "failed", reason: "readback" });
|
|
23
|
+
return configureClientDocument(client, environment, command, client.format);
|
|
24
|
+
};
|
|
19
25
|
const configureClientDocument = async (client, environment, command, format) => {
|
|
20
26
|
const transactionPath = await resolveClientConfigTransactionPath(client.configPath);
|
|
21
27
|
if (transactionPath === undefined)
|
|
@@ -36,7 +42,7 @@ const configureClientDocument = async (client, environment, command, format) =>
|
|
|
36
42
|
return { status: "failed", reason: "readback" };
|
|
37
43
|
}
|
|
38
44
|
const { document, servers, serversKey } = parsed;
|
|
39
|
-
const desired = clientConfigurationDesired(client, environment, command);
|
|
45
|
+
const desired = clientConfigurationDesired(client, environment, command, format);
|
|
40
46
|
if (clientConfigurationValuesEqual(servers[PRODUCT_IDENTITY.mcpServerKey], desired))
|
|
41
47
|
return { status: "unchanged" };
|
|
42
48
|
const backupPath = original === undefined ? undefined : `${client.configPath}.rea.backup`;
|
|
@@ -49,7 +55,7 @@ const configureClientDocument = async (client, environment, command, format) =>
|
|
|
49
55
|
};
|
|
50
56
|
try {
|
|
51
57
|
await mkdir(dirname(client.configPath), { recursive: true });
|
|
52
|
-
await writeFileAtomic(transactionPath, serializeClientConfiguration(document, format), {
|
|
58
|
+
await writeFileAtomic(transactionPath, serializeClientConfiguration(document, format, original, PRODUCT_IDENTITY.mcpServerKey), {
|
|
53
59
|
encoding: "utf8",
|
|
54
60
|
mode: 0o600,
|
|
55
61
|
});
|
|
@@ -75,7 +81,7 @@ const configureClientDocument = async (client, environment, command, format) =>
|
|
|
75
81
|
};
|
|
76
82
|
/** Determine whether an existing client configuration matches the desired registration. */
|
|
77
83
|
export const clientConfigurationAligned = async (client, providerEnvironment, command) => {
|
|
78
|
-
const desired = clientConfigurationDesired(client, providerEnvironment, command);
|
|
84
|
+
const desired = clientConfigurationDesired(client, providerEnvironment, command, client.format);
|
|
79
85
|
try {
|
|
80
86
|
const original = await readFile(client.configPath, "utf8");
|
|
81
87
|
const { servers } = parseClientConfiguration(original, client.format);
|
|
@@ -107,7 +113,7 @@ export const inspectClientConfiguration = async (client, providerEnvironment, co
|
|
|
107
113
|
remediation: "The configuration file could not be read. Check its permissions before rerunning setup.",
|
|
108
114
|
};
|
|
109
115
|
}
|
|
110
|
-
const desired = clientConfigurationDesired(client, providerEnvironment, command);
|
|
116
|
+
const desired = clientConfigurationDesired(client, providerEnvironment, command, client.format);
|
|
111
117
|
try {
|
|
112
118
|
const { servers } = parseClientConfiguration(original, client.format);
|
|
113
119
|
if (clientConfigurationValuesEqual(servers[PRODUCT_IDENTITY.mcpServerKey], desired))
|
|
@@ -145,16 +151,15 @@ const restoreConfig = async (path, original) => {
|
|
|
145
151
|
// The backup remains available for the remediation reported by setup.
|
|
146
152
|
}
|
|
147
153
|
};
|
|
148
|
-
const clientConfigurationDesired = (client, providerEnvironment, command) => {
|
|
154
|
+
const clientConfigurationDesired = (client, providerEnvironment, command, format) => {
|
|
149
155
|
const environment = Object.fromEntries(Object.entries(providerEnvironment).sort(([left], [right]) => left.localeCompare(right)));
|
|
156
|
+
const registration = clientRegistrationEntry(format ?? "json", command.length === 0 ? [PRODUCT_IDENTITY.cliBinary, "mcp"] : command, environment);
|
|
150
157
|
return {
|
|
151
|
-
|
|
152
|
-
args: command.slice(1),
|
|
158
|
+
...registration,
|
|
153
159
|
...(client.name === "codex"
|
|
154
160
|
? {
|
|
155
161
|
startup_timeout_sec: MCP_STARTUP_POLICY.codexStartupTimeoutSeconds,
|
|
156
162
|
}
|
|
157
163
|
: {}),
|
|
158
|
-
...(Object.keys(environment).length === 0 ? {} : { env: environment }),
|
|
159
164
|
};
|
|
160
165
|
};
|