rea-agents 6.2.0 → 6.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +18 -20
- package/bridge/hopper_bridge.py +2 -0
- package/dist/android/JadxProvider.js +8 -2
- package/dist/android/JadxSession.js +51 -9
- package/dist/application/BinaryTargetResolver.js +63 -17
- package/dist/application/BrowserScenarioEvidence.js +2 -2
- package/dist/application/ClientConfigurationDocument.js +28 -0
- package/dist/application/ClientRegistrationStatus.js +19 -6
- package/dist/application/DirectAnalysis.js +12 -6
- package/dist/application/DirectAnalysisCleanup.js +0 -1
- package/dist/application/DirectAnalysisStatus.js +2 -5
- package/dist/application/Doctor.js +25 -34
- package/dist/application/DoctorDiagnostics.js +1 -1
- package/dist/application/EvidenceBundleFiles.js +1 -1
- package/dist/application/InvestigationProviders.js +4 -4
- package/dist/application/JsonFiles.js +15 -15
- package/dist/application/LinuxHopper.js +2 -1
- package/dist/application/ReconstructionObligationCandidates.js +9 -2
- package/dist/application/ReconstructionObligationLedgerProjection.js +3 -1
- package/dist/application/RegularFileRead.js +17 -0
- package/dist/application/Setup.js +18 -7
- package/dist/application/SetupClientConfiguration.js +18 -7
- package/dist/application/SetupHost.js +6 -4
- package/dist/application/SetupPlan.js +19 -15
- package/dist/application/SetupSkill.js +57 -8
- package/dist/application/SupportedClients.js +43 -0
- package/dist/application/Uninstall.js +18 -2
- package/dist/application/UpdateMaintenance.js +6 -2
- package/dist/application/Utf8JsonInput.js +64 -0
- package/dist/application/WebScriptExportService.js +13 -6
- package/dist/application/android/AndroidAnalysisService.js +1 -1
- package/dist/application/binary/AnalysisSnapshotCache.js +5 -4
- package/dist/application/binary/BinarySession.js +16 -0
- package/dist/application/binary/BinarySessionOpen.js +9 -1
- package/dist/application/javascript/ElectronActiveEvidence.js +2 -2
- package/dist/application/javascript/ElectronBoundaryAnalysis.js +2 -2
- package/dist/application/javascript/ElectronBoundaryGraphNative.js +5 -1
- package/dist/application/javascript/JavaScriptApplicationEvidence.js +1 -0
- package/dist/application/javascript/JavaScriptApplicationEvidenceGraph.js +107 -46
- package/dist/application/javascript/JavaScriptApplicationService.js +1 -0
- package/dist/application/javascript/JavaScriptApplicationWorkflowService.js +59 -45
- package/dist/application/javascript/JavaScriptArtifactAnalysis.js +0 -6
- package/dist/application/javascript/JavaScriptArtifactGraphBuilder.js +8 -18
- package/dist/application/javascript/JavaScriptArtifactGraphFindings.js +34 -26
- package/dist/application/javascript/JavaScriptArtifactPathResolution.js +44 -12
- package/dist/application/javascript/JavaScriptArtifactReconstruction.js +6 -3
- package/dist/application/javascript/JavaScriptArtifactReconstructionInput.js +1 -0
- package/dist/application/javascript/JavaScriptJsonModules.js +2 -2
- package/dist/application/javascript/JavaScriptModuleRelationships.js +5 -17
- package/dist/application/javascript/JavaScriptRuntimeReconciliationService.js +11 -27
- package/dist/application/javascript/JavaScriptSemanticGraphAsyncProjection.js +2 -2
- package/dist/application/javascript/JavaScriptSemanticGraphBuilder.js +8 -6
- package/dist/application/javascript/JavaScriptSemanticGraphChildProcessProjection.js +1 -1
- package/dist/application/javascript/JavaScriptSemanticGraphConstruction.js +7 -5
- package/dist/application/javascript/JavaScriptSemanticGraphDataProjection.js +1 -1
- package/dist/application/javascript/JavaScriptSemanticGraphEvidence.js +1 -1
- package/dist/application/javascript/JavaScriptSemanticGraphFingerprintProjection.js +2 -2
- package/dist/application/javascript/JavaScriptSemanticGraphFlowProjection.js +2 -2
- package/dist/application/javascript/JavaScriptSemanticGraphObjectProjection.js +1 -1
- package/dist/application/javascript/JavaScriptSemanticGraphProjection.js +4 -4
- package/dist/application/javascript/JavaScriptSemanticGraphResourceProjection.js +1 -1
- package/dist/application/javascript/JavaScriptSemanticGraphValueProjection.js +10 -7
- package/dist/application/javascript/JavaScriptSemanticTraceService.js +15 -10
- package/dist/application/native/NativeCallRoutes.js +2 -4
- package/dist/artifacts/ArtifactProvider.js +14 -16
- package/dist/artifacts/ArtifactProviderMetadata.js +1 -4
- package/dist/artifacts/AsarArtifactReader.js +81 -17
- package/dist/artifacts/DirectoryArtifactReader.js +2 -2
- package/dist/artifacts/NativeDmgArtifactReader.js +152 -67
- package/dist/artifacts/NativeDmgOwnership.js +109 -0
- package/dist/artifacts/apple/KeyedArchiveReader.js +54 -46
- package/dist/artifacts/apple/MachoLoadCommandReader.js +36 -6
- package/dist/artifacts/extraction/ArtifactExtraction.js +29 -11
- package/dist/artifacts/inventory/ArtifactGraphConstruction.js +7 -8
- package/dist/artifacts/inventory/classify.js +33 -14
- package/dist/artifacts/inventory/hashStableRootArtifact.js +37 -0
- package/dist/artifacts/inventory/scanCanonical.js +28 -22
- package/dist/artifacts/inventory/scanReader.js +7 -11
- package/dist/artifacts/javascript/JavaScriptArtifactFiles.js +65 -27
- package/dist/browser/CdpBrowserProvider.js +4 -3
- package/dist/browser/CdpCaptureStorageFingerprints.js +3 -3
- package/dist/browser/CdpElectronInspection.js +2 -2
- package/dist/browser/CdpElectronProvider.js +4 -3
- package/dist/browser/CdpElectronScripts.js +2 -2
- package/dist/browser/CdpWebMcpDiscovery.js +16 -13
- package/dist/browser/PlaywrightBrowserScenarioProvider.js +6 -6
- package/dist/browser/PlaywrightScenarioBrowser.js +145 -42
- package/dist/browser/PlaywrightScenarioSession.js +3 -11
- package/dist/browser/WebSourceMapFetcher.js +32 -6
- package/dist/browser/assets/ScenarioScriptCapture.js +8 -12
- package/dist/cli/coreAnalysisCommands.js +2 -2
- package/dist/cli/coreBinaryCommands.js +13 -9
- package/dist/cli/electronCommands.js +9 -10
- package/dist/cli/javascriptApplicationAnalysis.js +2 -12
- package/dist/cli/jsonOutput.js +3 -2
- package/dist/cli/streamedJsonOutput.js +83 -4
- package/dist/cli/utilityCommands.js +2 -4
- package/dist/cli.js +5 -2
- package/dist/cliJsonFile.js +179 -0
- package/dist/cliJsonInput.js +47 -34
- package/dist/cliObservationOptions.js +4 -0
- package/dist/composition/auxiliaryAnalysisProviders.js +5 -4
- package/dist/composition/browserScenario.js +2 -2
- package/dist/composition/directAnalysis.js +2 -3
- package/dist/contracts/artifactComparisonExample.js +5 -5
- package/dist/contracts/errorSchemas.js +3 -1
- package/dist/contracts/functionComparisonExample.js +8 -0
- package/dist/contracts/inputSchemaPresentation.js +94 -3
- package/dist/contracts/javascript/electronToolContracts.js +2 -1
- package/dist/contracts/javascript/javascriptApplicationWorkflowExamples.js +3 -2
- package/dist/contracts/javascript/javascriptExportShapeComparisonExample.js +6 -3
- package/dist/contracts/javascript/javascriptRuntimeReconciliationExample.js +8 -7
- package/dist/contracts/managed/managedToolContracts.js +3 -2
- package/dist/contracts/mobileApplicationGraphExamples.js +5 -5
- package/dist/contracts/native/nativeToolContracts.js +1 -1
- package/dist/contracts/sessionLifecycleInputs.js +4 -3
- package/dist/contracts/sessionStatusContract.js +3 -2
- package/dist/contracts/sessionToolContracts.js +3 -2
- package/dist/contracts/sessionToolSchemas.js +3 -2
- package/dist/contracts/toolOutputSchemaGroups.js +2 -2
- package/dist/contracts/toolOutputSchemaPrimitives.js +2 -5
- package/dist/domain/analysisErrorBase.js +5 -0
- package/dist/domain/analysisErrorPresentation.js +4 -2
- package/dist/domain/analysisSnapshot.js +3 -1
- package/dist/domain/analysisView/analysisView.js +1 -3
- package/dist/domain/android/androidPartialObservation.js +36 -0
- package/dist/domain/apple/dylibResolution.js +1 -1
- package/dist/domain/artifactComparison.js +4 -4
- package/dist/domain/artifactGraph.js +1 -1
- package/dist/domain/artifactIdentity.js +8 -8
- package/dist/domain/artifactInspection.js +8 -8
- package/dist/domain/artifactInventoryEvidence.js +5 -5
- package/dist/domain/browserCompleteness.js +3 -2
- 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/canonicalOrdering.js +1 -13
- package/dist/domain/changedBehavior.js +2 -3
- package/dist/domain/comparisonSemantics.js +0 -5
- package/dist/domain/digests.js +0 -3
- package/dist/domain/evidence.js +10 -5
- package/dist/domain/evidenceBundle.js +51 -33
- 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/javascript/electronActiveObservation.js +4 -3
- package/dist/domain/javascript/electronStaticAnalysisBrowser.js +2 -2
- package/dist/domain/javascript/electronStaticAnalysisIpc.js +9 -1
- package/dist/domain/javascript/electronStaticAnalysisNative.js +5 -3
- package/dist/domain/javascript/electronStaticAnalysisValues.js +8 -4
- package/dist/domain/javascript/javascriptApplicationAnalysis.js +3 -1
- package/dist/domain/javascript/javascriptApplicationChangeGraph.js +12 -8
- package/dist/domain/javascript/javascriptApplicationEvidenceSchemas.js +4 -0
- package/dist/domain/javascript/javascriptApplicationGraph.js +15 -13
- package/dist/domain/javascript/javascriptApplicationVersionComparison.js +4 -4
- package/dist/domain/javascript/javascriptApplicationVersionComparisonSchemas.js +37 -22
- package/dist/domain/javascript/javascriptApplicationVersionItems.js +45 -34
- package/dist/domain/javascript/javascriptApplicationVersionKeys.js +7 -7
- package/dist/domain/javascript/javascriptAstFingerprint.js +2 -2
- package/dist/domain/javascript/javascriptAstValues.js +22 -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/javascriptNativeHandoff.js +6 -6
- 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 +5 -4
- 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 +7 -6
- package/dist/domain/javascript/javascriptSemanticAnalysis.js +200 -8
- package/dist/domain/javascript/javascriptSemanticCallResolution.js +9 -7
- 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/javascriptSemanticFingerprints.js +2 -2
- package/dist/domain/javascript/javascriptSemanticGraph.js +142 -35
- package/dist/domain/javascript/javascriptSemanticGraphSchemas.js +19 -1
- package/dist/domain/javascript/javascriptSemanticIr.js +0 -4
- package/dist/domain/javascript/javascriptSemanticIterationSources.js +106 -0
- package/dist/domain/javascript/javascriptSemanticMemberMutations.js +497 -113
- package/dist/domain/javascript/javascriptSemanticMutationInitializers.js +190 -0
- package/dist/domain/javascript/javascriptSemanticMutationValues.js +41 -27
- package/dist/domain/javascript/javascriptSemanticObjects.js +2 -6
- package/dist/domain/javascript/javascriptSemanticPrimitives.js +7 -2
- package/dist/domain/javascript/javascriptSemanticProjection.js +20 -14
- package/dist/domain/javascript/javascriptSemanticPromises.js +15 -21
- package/dist/domain/javascript/javascriptSemanticPropertyPaths.js +23 -0
- package/dist/domain/javascript/javascriptSemanticProvenance.js +3 -3
- package/dist/domain/javascript/javascriptSemanticQuery.js +8 -2
- package/dist/domain/javascript/javascriptSemanticQueryIdentity.js +3 -2
- package/dist/domain/javascript/javascriptSemanticQuerySchemas.js +8 -9
- package/dist/domain/javascript/javascriptSemanticRequireOrigin.js +16 -10
- package/dist/domain/javascript/javascriptSemanticReturns.js +23 -27
- package/dist/domain/javascript/javascriptSemanticTraversal.js +6 -1
- package/dist/domain/javascript/javascriptSemanticValues.js +135 -24
- package/dist/domain/javascript/javascriptSourceMapPaths.js +11 -1
- package/dist/domain/javascript/javascriptSourceParser.js +34 -9
- package/dist/domain/javascript/javascriptStaticAnalysisBundler.js +5 -6
- package/dist/domain/javascript/javascriptStaticAnalysisHelpers.js +26 -15
- package/dist/domain/javascript/sourceToBundleComparison.js +7 -5
- package/dist/domain/javascript/sourceToBundleSignals.js +7 -7
- package/dist/domain/jsonSerialization.js +109 -55
- package/dist/domain/jsonShape.js +46 -19
- package/dist/domain/localPath.js +10 -4
- package/dist/domain/managed/managedApplicationGraph.js +10 -6
- package/dist/domain/managed/managedApplicationGraphNodes.js +82 -57
- package/dist/domain/managed/managedMemberComparisonMatch.js +6 -7
- package/dist/domain/native/nativeCallObservation.js +2 -4
- package/dist/domain/native/nativeValueFlow.js +5 -11
- package/dist/domain/native/objcSwiftMetadata.js +15 -17
- package/dist/domain/process/processCapture.js +11 -10
- package/dist/domain/process/processCaptureCoverage.js +8 -5
- package/dist/domain/process/processCaptureExample.js +43 -0
- package/dist/domain/process/processCaptureValidation.js +4 -3
- package/dist/domain/process/processComparison.js +0 -23
- package/dist/domain/process/processScenario.js +3 -3
- package/dist/domain/process/processTraceEvaluation.js +4 -4
- package/dist/domain/process/processTraceSpecification.js +1 -3
- 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 +7 -7
- package/dist/domain/referenceSourceImportParsing.js +34 -45
- 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 +9 -1
- package/dist/domain/webCaptureDiff.js +71 -29
- 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/dotnet/ManagedMemberInstructionDecoder.js +1 -2
- package/dist/dotnet/ManagedStaticProvider.js +10 -7
- package/dist/dotnet/ManagedStaticProviderMetadata.js +1 -4
- package/dist/filesystem/RegularFile.js +41 -0
- package/dist/generatedPackageMetadata.js +1 -1
- package/dist/ghidra/GhidraClient.js +14 -4
- package/dist/ghidra/GhidraInstallation.js +111 -10
- package/dist/ghidra/GhidraLauncher.js +43 -19
- package/dist/hopper/HopperCleanup.js +1 -1
- package/dist/ida/IdaOperationRunner.js +2 -0
- package/dist/ida/IdaSessionClient.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/main/shutdown.js +76 -32
- package/dist/main/transport.js +1 -1
- 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 +10 -5
- package/dist/native/NativeMacOSProviderMetadata.js +1 -2
- package/dist/process/ProcessOwnershipObservation.js +9 -13
- package/dist/process/capture/FilesystemSnapshot.js +88 -18
- package/dist/process/capture/ProcessCaptureLifecycle.js +13 -27
- package/dist/process/capture/ProcessFilesystemEffects.js +19 -4
- package/dist/process/capture/ProcessHarness.js +8 -21
- package/dist/server/analysisAdmission.js +8 -0
- package/dist/server/createServer.js +22 -23
- package/dist/server/registerApplicationTools/compareExportShapes.js +2 -1
- package/dist/server/registerApplicationTools/helpers.js +3 -2
- package/dist/server/registerArtifactTools.js +2 -2
- package/dist/server/registerCloseLifecycleTool.js +6 -4
- package/dist/server/registerEnhancedTools.js +78 -73
- package/dist/server/registerEvidenceTools.js +54 -46
- package/dist/server/registerManagedTools.js +7 -4
- package/dist/server/registerOfficialTools.js +31 -25
- package/dist/server/registerSessionTools.js +9 -3
- package/native/windows/build/manifest.json +1 -1
- package/package.json +6 -3
- package/skills/reverse-engineer-anything/SKILL.md +5 -5
- package/skills/reverse-engineer-anything/references/native-and-artifacts.md +9 -0
- package/dist/artifacts/inventory/policy.js +0 -2
- package/dist/domain/managed/managedApplicationGraphNodeCoverage.js +0 -6
- package/dist/server/registerNativeTools.js +0 -6
|
@@ -7,7 +7,7 @@ import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
|
|
|
7
7
|
import { executeFunctionAnalysisEvidence } from "../application/FunctionAnalysisEvidence.js";
|
|
8
8
|
/** Register composed workflows against the same port as direct bridge tools. */
|
|
9
9
|
// oxlint-disable-next-line max-lines-per-function -- direct SDK calls retain each schema-handler type correlation.
|
|
10
|
-
export const registerEnhancedTools = (server,
|
|
10
|
+
export const registerEnhancedTools = (server, options) => {
|
|
11
11
|
const registration = { ...options, delivery: server.delivery };
|
|
12
12
|
const nativeDispatchMetadata = toolContract("inspect_native_dispatch_metadata");
|
|
13
13
|
const objcClasses = toolContract("get_objc_classes");
|
|
@@ -23,125 +23,130 @@ export const registerEnhancedTools = (server, analysis, options) => {
|
|
|
23
23
|
const traceCallPath = toolContract("trace_call_path");
|
|
24
24
|
const traceNativeUiAction = toolContract("trace_native_ui_action");
|
|
25
25
|
const traceNativeValues = toolContract("trace_native_values");
|
|
26
|
-
server.registerTool(traceNativeValues.name, toolRegistrationOptions(traceNativeValues), (input, context) => executeEnhancedTool(
|
|
26
|
+
server.registerTool(traceNativeValues.name, toolRegistrationOptions(traceNativeValues), (input, context) => executeEnhancedTool(registration, traceNativeValues, {
|
|
27
27
|
validatedCall: { name: "trace_native_values", input },
|
|
28
28
|
context,
|
|
29
29
|
}));
|
|
30
|
-
server.registerTool(nativeDispatchMetadata.name, toolRegistrationOptions(nativeDispatchMetadata), (input, context) => executeEnhancedTool(
|
|
30
|
+
server.registerTool(nativeDispatchMetadata.name, toolRegistrationOptions(nativeDispatchMetadata), (input, context) => executeEnhancedTool(registration, nativeDispatchMetadata, {
|
|
31
31
|
validatedCall: { name: "inspect_native_dispatch_metadata", input },
|
|
32
32
|
context,
|
|
33
33
|
}));
|
|
34
|
-
server.registerTool(objcClasses.name, toolRegistrationOptions(objcClasses), (input, context) => executeEnhancedTool(
|
|
34
|
+
server.registerTool(objcClasses.name, toolRegistrationOptions(objcClasses), (input, context) => executeEnhancedTool(registration, objcClasses, {
|
|
35
35
|
validatedCall: { name: "get_objc_classes", input },
|
|
36
36
|
context,
|
|
37
37
|
}));
|
|
38
|
-
server.registerTool(objcProtocols.name, toolRegistrationOptions(objcProtocols), (input, context) => executeEnhancedTool(
|
|
38
|
+
server.registerTool(objcProtocols.name, toolRegistrationOptions(objcProtocols), (input, context) => executeEnhancedTool(registration, objcProtocols, {
|
|
39
39
|
validatedCall: { name: "get_objc_protocols", input },
|
|
40
40
|
context,
|
|
41
41
|
}));
|
|
42
|
-
server.registerTool(batchDecompile.name, toolRegistrationOptions(batchDecompile), (input, context) => executeEnhancedTool(
|
|
42
|
+
server.registerTool(batchDecompile.name, toolRegistrationOptions(batchDecompile), (input, context) => executeEnhancedTool(registration, batchDecompile, {
|
|
43
43
|
validatedCall: { name: "batch_decompile", input },
|
|
44
44
|
context,
|
|
45
45
|
}));
|
|
46
|
-
server.registerTool(callGraph.name, toolRegistrationOptions(callGraph), (input, context) => executeEnhancedTool(
|
|
46
|
+
server.registerTool(callGraph.name, toolRegistrationOptions(callGraph), (input, context) => executeEnhancedTool(registration, callGraph, {
|
|
47
47
|
validatedCall: { name: "get_call_graph", input },
|
|
48
48
|
context,
|
|
49
49
|
}));
|
|
50
|
-
server.registerTool(swiftTypes.name, toolRegistrationOptions(swiftTypes), (input, context) => executeEnhancedTool(
|
|
50
|
+
server.registerTool(swiftTypes.name, toolRegistrationOptions(swiftTypes), (input, context) => executeEnhancedTool(registration, swiftTypes, {
|
|
51
51
|
validatedCall: { name: "analyze_swift_types", input },
|
|
52
52
|
context,
|
|
53
53
|
}));
|
|
54
|
-
server.registerTool(xrefsToName.name, toolRegistrationOptions(xrefsToName), (input, context) => executeEnhancedTool(
|
|
54
|
+
server.registerTool(xrefsToName.name, toolRegistrationOptions(xrefsToName), (input, context) => executeEnhancedTool(registration, xrefsToName, {
|
|
55
55
|
validatedCall: { name: "find_xrefs_to_name", input },
|
|
56
56
|
context,
|
|
57
57
|
}));
|
|
58
|
-
server.registerTool(binaryOverview.name, toolRegistrationOptions(binaryOverview), (input, context) => executeEnhancedTool(
|
|
58
|
+
server.registerTool(binaryOverview.name, toolRegistrationOptions(binaryOverview), (input, context) => executeEnhancedTool(registration, binaryOverview, {
|
|
59
59
|
validatedCall: { name: "binary_overview", input },
|
|
60
60
|
context,
|
|
61
61
|
}));
|
|
62
|
-
server.registerTool(analyzeFunction.name, toolRegistrationOptions(analyzeFunction), (input, context) => executeEnhancedTool(
|
|
62
|
+
server.registerTool(analyzeFunction.name, toolRegistrationOptions(analyzeFunction), (input, context) => executeEnhancedTool(registration, analyzeFunction, {
|
|
63
63
|
validatedCall: { name: "analyze_function", input },
|
|
64
64
|
context,
|
|
65
65
|
}));
|
|
66
|
-
server.registerTool(inspectNativeApi.name, toolRegistrationOptions(inspectNativeApi), (input, context) => executeEnhancedTool(
|
|
66
|
+
server.registerTool(inspectNativeApi.name, toolRegistrationOptions(inspectNativeApi), (input, context) => executeEnhancedTool(registration, inspectNativeApi, {
|
|
67
67
|
validatedCall: { name: "inspect_native_api", input },
|
|
68
68
|
context,
|
|
69
69
|
}));
|
|
70
|
-
server.registerTool(traceFeature.name, toolRegistrationOptions(traceFeature), (input, context) => executeEnhancedTool(
|
|
70
|
+
server.registerTool(traceFeature.name, toolRegistrationOptions(traceFeature), (input, context) => executeEnhancedTool(registration, traceFeature, {
|
|
71
71
|
validatedCall: { name: "trace_feature", input },
|
|
72
72
|
context,
|
|
73
73
|
}));
|
|
74
|
-
server.registerTool(traceCallPath.name, toolRegistrationOptions(traceCallPath), (input, context) => executeEnhancedTool(
|
|
74
|
+
server.registerTool(traceCallPath.name, toolRegistrationOptions(traceCallPath), (input, context) => executeEnhancedTool(registration, traceCallPath, {
|
|
75
75
|
validatedCall: { name: "trace_call_path", input },
|
|
76
76
|
context,
|
|
77
77
|
}));
|
|
78
|
-
server.registerTool(traceNativeUiAction.name, toolRegistrationOptions(traceNativeUiAction), (input, context) => executeEnhancedTool(
|
|
78
|
+
server.registerTool(traceNativeUiAction.name, toolRegistrationOptions(traceNativeUiAction), (input, context) => executeEnhancedTool(registration, traceNativeUiAction, {
|
|
79
79
|
validatedCall: { name: "trace_native_ui_action", input },
|
|
80
80
|
context,
|
|
81
81
|
}));
|
|
82
82
|
};
|
|
83
|
-
const executeEnhancedTool = async (
|
|
84
|
-
const
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
const parsedInput = validatedCall.input;
|
|
94
|
-
const parameters = jsonParameters(parsedInput);
|
|
95
|
-
if (name === "analyze_function")
|
|
96
|
-
return executeFunctionTool(analysis, registration, contract, {
|
|
97
|
-
context,
|
|
98
|
-
parameters,
|
|
83
|
+
const executeEnhancedTool = async (registration, contract, request) => {
|
|
84
|
+
const admitted = await registration.withAdmittedAnalysis(request.validatedCall.name, request.context.mcpReq.signal, async (admittedAnalysis) => {
|
|
85
|
+
const { validatedCall, context } = request;
|
|
86
|
+
const name = validatedCall.name;
|
|
87
|
+
const progress = mcpProgressReporter(context);
|
|
88
|
+
await progress.report({
|
|
89
|
+
phase: name,
|
|
90
|
+
completed: 0,
|
|
91
|
+
total: 1,
|
|
92
|
+
message: "started",
|
|
99
93
|
});
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
upstreamProfile: registration.analysisProfile?.(),
|
|
94
|
+
const parsedInput = validatedCall.input;
|
|
95
|
+
const parameters = jsonParameters(parsedInput);
|
|
96
|
+
if (name === "analyze_function")
|
|
97
|
+
return executeFunctionTool(admittedAnalysis, registration, contract, {
|
|
98
|
+
context,
|
|
99
|
+
parameters,
|
|
100
|
+
});
|
|
101
|
+
const services = new EnhancedTools({
|
|
102
|
+
execute: (operation, operationParameters, executionOptions) => admittedAnalysis.execute(operation, operationParameters, {
|
|
103
|
+
...executionOptions,
|
|
104
|
+
progress,
|
|
105
|
+
}),
|
|
106
|
+
});
|
|
107
|
+
const result = await logToolExecution(registration.logger, name, () => services.executeValidated(validatedCall, context.mcpReq.signal));
|
|
108
|
+
await progress.report({
|
|
109
|
+
phase: name,
|
|
110
|
+
completed: 1,
|
|
111
|
+
total: 1,
|
|
112
|
+
message: result.ok ? "completed" : "failed",
|
|
113
|
+
terminal: true,
|
|
121
114
|
});
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
115
|
+
if (result.ok) {
|
|
116
|
+
const evidence = createWorkflowEvidence({
|
|
117
|
+
target: registration.activeTarget?.(),
|
|
118
|
+
operation: name,
|
|
119
|
+
parameters,
|
|
120
|
+
result: result.value,
|
|
121
|
+
upstreamProfile: registration.analysisProfile?.(),
|
|
122
|
+
});
|
|
123
|
+
const recorded = registration.recordEvidence?.(evidence);
|
|
124
|
+
if (recorded !== undefined && !recorded.ok)
|
|
125
|
+
return registration.delivery.toCallToolResult(recorded, contract);
|
|
126
|
+
if (name !== "trace_native_ui_action" &&
|
|
127
|
+
registration.allowsSnapshotReplay?.(name) === true) {
|
|
128
|
+
const workflowRecord = workflowSnapshotRecord(evidence, name);
|
|
129
|
+
if (workflowRecord !== undefined) {
|
|
130
|
+
const snapshot = registration.recordWorkflowSnapshot?.(workflowRecord);
|
|
131
|
+
if (snapshot !== undefined && !snapshot.ok)
|
|
132
|
+
return registration.delivery.toCallToolResult(snapshot, contract);
|
|
133
|
+
}
|
|
132
134
|
}
|
|
135
|
+
const unknowns = recordWorkflowUnknowns({
|
|
136
|
+
name,
|
|
137
|
+
result: result.value,
|
|
138
|
+
evidenceId: evidence.evidence_id,
|
|
139
|
+
recordUnknown: registration.recordUnknown,
|
|
140
|
+
});
|
|
141
|
+
if (!unknowns.ok)
|
|
142
|
+
return registration.delivery.toCallToolResult(unknowns, contract);
|
|
143
|
+
return registration.delivery.toEvidenceToolResult(evidence, contract, recorded);
|
|
133
144
|
}
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
});
|
|
140
|
-
if (!unknowns.ok)
|
|
141
|
-
return registration.delivery.toCallToolResult(unknowns, contract);
|
|
142
|
-
return registration.delivery.toEvidenceToolResult(evidence, contract, recorded);
|
|
143
|
-
}
|
|
144
|
-
return registration.delivery.toCallToolResult(result, contract);
|
|
145
|
+
return registration.delivery.toCallToolResult(result, contract);
|
|
146
|
+
});
|
|
147
|
+
return admitted.ok
|
|
148
|
+
? admitted.value
|
|
149
|
+
: registration.delivery.toCallToolResult(admitted, contract);
|
|
145
150
|
};
|
|
146
151
|
const executeFunctionTool = async (analysis, registration, contract, request) => {
|
|
147
152
|
const { context, parameters } = request;
|
|
@@ -5,56 +5,64 @@ import { logToolExecution } from "./toolLogging.js";
|
|
|
5
5
|
import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
|
|
6
6
|
import { createArtifactExtractionDestination } from "../application/artifacts/ArtifactExtractionDestination.js";
|
|
7
7
|
/** Register provider-backed contracts that return atomic Evidence observations. */
|
|
8
|
-
export const registerEvidenceTools = (server,
|
|
8
|
+
export const registerEvidenceTools = (server, contracts, options) => {
|
|
9
9
|
for (const contract of contracts) {
|
|
10
10
|
server.registerTool(contract.name, toolRegistrationOptions(contract), async (input, context) => {
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
11
|
+
const admitted = await options.withAdmittedAnalysis(contract.name, context.mcpReq.signal, async (admittedAnalysis) => {
|
|
12
|
+
const analysis = options.analysisForAdmission?.(admittedAnalysis) ??
|
|
13
|
+
admittedAnalysis;
|
|
14
|
+
const progress = mcpProgressReporter(context);
|
|
15
|
+
await progress.report({
|
|
16
|
+
phase: contract.name,
|
|
17
|
+
completed: 0,
|
|
18
|
+
total: 1,
|
|
19
|
+
message: "started",
|
|
20
|
+
});
|
|
21
|
+
const parameters = jsonObjectSchema.parse(input);
|
|
22
|
+
const executionParameters = contract.name === "extract_artifact"
|
|
23
|
+
? {
|
|
24
|
+
...parameters,
|
|
25
|
+
output_root: createArtifactExtractionDestination(),
|
|
26
|
+
}
|
|
27
|
+
: parameters;
|
|
28
|
+
const execution = await logToolExecution(options.logger, contract.name, () => analysis.execute(contract.name, executionParameters, {
|
|
29
|
+
signal: context.mcpReq.signal,
|
|
30
|
+
progress,
|
|
31
|
+
}));
|
|
32
|
+
await progress.report({
|
|
33
|
+
phase: contract.name,
|
|
34
|
+
completed: 1,
|
|
35
|
+
total: 1,
|
|
36
|
+
message: execution.ok ? "completed" : "failed",
|
|
37
|
+
terminal: true,
|
|
38
|
+
});
|
|
39
|
+
if (!execution.ok)
|
|
40
|
+
return server.delivery.toCallToolResult(execution, contract);
|
|
41
|
+
const sourceEvidence = options.sourceEvidence?.(contract.name, execution.value.result) ??
|
|
42
|
+
[];
|
|
43
|
+
const evidence = createEvidence(execution.value.subject ?? options.activeTarget?.(), execution.value.provider, {
|
|
44
|
+
operation: contract.name,
|
|
45
|
+
parameters,
|
|
46
|
+
result: execution.value.result,
|
|
47
|
+
...(execution.value.analysisProfile === undefined
|
|
48
|
+
? {}
|
|
49
|
+
: { analysisProfile: execution.value.analysisProfile }),
|
|
50
|
+
rawResult: execution.value.rawResult,
|
|
51
|
+
limitations: execution.value.limitations,
|
|
52
|
+
locations: execution.value.locations,
|
|
53
|
+
evidenceLinks: sourceEvidence.map(({ evidence_id: id }) => id),
|
|
54
|
+
});
|
|
55
|
+
for (const source of sourceEvidence) {
|
|
56
|
+
const sourceRecorded = options.recordEvidence?.(source);
|
|
57
|
+
if (sourceRecorded !== undefined && !sourceRecorded.ok)
|
|
58
|
+
return server.delivery.toCallToolResult(sourceRecorded, contract);
|
|
23
59
|
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
signal: context.mcpReq.signal,
|
|
27
|
-
progress,
|
|
28
|
-
}));
|
|
29
|
-
await progress.report({
|
|
30
|
-
phase: contract.name,
|
|
31
|
-
completed: 1,
|
|
32
|
-
total: 1,
|
|
33
|
-
message: execution.ok ? "completed" : "failed",
|
|
34
|
-
terminal: true,
|
|
35
|
-
});
|
|
36
|
-
if (!execution.ok)
|
|
37
|
-
return server.delivery.toCallToolResult(execution, contract);
|
|
38
|
-
const sourceEvidence = options.sourceEvidence?.(contract.name, execution.value.result) ?? [];
|
|
39
|
-
const evidence = createEvidence(execution.value.subject ?? options.activeTarget?.(), execution.value.provider, {
|
|
40
|
-
operation: contract.name,
|
|
41
|
-
parameters,
|
|
42
|
-
result: execution.value.result,
|
|
43
|
-
...(execution.value.analysisProfile === undefined
|
|
44
|
-
? {}
|
|
45
|
-
: { analysisProfile: execution.value.analysisProfile }),
|
|
46
|
-
rawResult: execution.value.rawResult,
|
|
47
|
-
limitations: execution.value.limitations,
|
|
48
|
-
locations: execution.value.locations,
|
|
49
|
-
evidenceLinks: sourceEvidence.map(({ evidence_id: id }) => id),
|
|
60
|
+
const recorded = options.recordEvidence?.(evidence);
|
|
61
|
+
return server.delivery.toEvidenceToolResult(evidence, contract, recorded);
|
|
50
62
|
});
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
return server.delivery.toCallToolResult(sourceRecorded, contract);
|
|
55
|
-
}
|
|
56
|
-
const recorded = options.recordEvidence?.(evidence);
|
|
57
|
-
return server.delivery.toEvidenceToolResult(evidence, contract, recorded);
|
|
63
|
+
return admitted.ok
|
|
64
|
+
? admitted.value
|
|
65
|
+
: server.delivery.toCallToolResult(admitted, contract);
|
|
58
66
|
});
|
|
59
67
|
}
|
|
60
68
|
};
|
|
@@ -5,9 +5,9 @@ import { registerEvidenceTools } from "./registerEvidenceTools.js";
|
|
|
5
5
|
import { runManagedProviderExecution } from "../composition/directAnalysis.js";
|
|
6
6
|
import { isManagedToolName } from "../contracts/managed/managedToolContracts.js";
|
|
7
7
|
/** Register execution-free managed PE/CLI inspection. */
|
|
8
|
-
export const registerManagedTools = (server,
|
|
8
|
+
export const registerManagedTools = (server, options) => {
|
|
9
9
|
let selectedManagedPath;
|
|
10
|
-
const
|
|
10
|
+
const analysisForAdmission = (analysis) => ({
|
|
11
11
|
execute: async (operation, parameters, executionOptions) => {
|
|
12
12
|
if (!isManagedToolName(operation))
|
|
13
13
|
return analysis.execute(operation, parameters, executionOptions);
|
|
@@ -32,6 +32,9 @@ export const registerManagedTools = (server, analysis, options) => {
|
|
|
32
32
|
selectedManagedPath = requestedPath;
|
|
33
33
|
return execution;
|
|
34
34
|
},
|
|
35
|
-
};
|
|
36
|
-
registerEvidenceTools(server,
|
|
35
|
+
});
|
|
36
|
+
registerEvidenceTools(server, MANAGED_TOOL_CONTRACTS, {
|
|
37
|
+
...options,
|
|
38
|
+
analysisForAdmission,
|
|
39
|
+
});
|
|
37
40
|
};
|
|
@@ -5,40 +5,46 @@ import { mcpProgressReporter } from "./mcpProgress.js";
|
|
|
5
5
|
import { logToolExecution } from "./toolLogging.js";
|
|
6
6
|
import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
|
|
7
7
|
/** Register direct bridge proxies, preserving MCP cancellation and typed errors. */
|
|
8
|
-
export const registerOfficialTools = (server,
|
|
8
|
+
export const registerOfficialTools = (server, options) => {
|
|
9
9
|
for (const contract of OFFICIAL_TOOL_CONTRACTS) {
|
|
10
|
-
registerOfficialTool(server,
|
|
10
|
+
registerOfficialTool(server, contract, {
|
|
11
11
|
logger: options.logger,
|
|
12
12
|
activeTarget: options.activeTarget,
|
|
13
13
|
recordEvidence: options.recordEvidence,
|
|
14
|
+
withAdmittedAnalysis: options.withAdmittedAnalysis,
|
|
14
15
|
});
|
|
15
16
|
}
|
|
16
17
|
};
|
|
17
|
-
const registerOfficialTool = (server,
|
|
18
|
+
const registerOfficialTool = (server, contract, registration) => {
|
|
18
19
|
server.registerTool(contract.name, toolRegistrationOptions(contract), async (input, context) => {
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
20
|
+
const admitted = await registration.withAdmittedAnalysis(contract.name, context.mcpReq.signal, async (admittedAnalysis) => {
|
|
21
|
+
const arguments_ = jsonObjectSchema.parse(contract.inputSchema.parse(input));
|
|
22
|
+
const progress = mcpProgressReporter(context);
|
|
23
|
+
const result = await runOfficialOperation(admittedAnalysis, contract, arguments_, {
|
|
24
|
+
logger: registration.logger,
|
|
25
|
+
signal: context.mcpReq.signal,
|
|
26
|
+
progress,
|
|
27
|
+
});
|
|
28
|
+
if (!result.ok) {
|
|
29
|
+
return server.delivery.toCallToolResult(result, contract);
|
|
30
|
+
}
|
|
31
|
+
const evidence = createEvidence(result.value.subject ?? registration.activeTarget?.(), result.value.provider, {
|
|
32
|
+
operation: contract.name,
|
|
33
|
+
parameters: arguments_,
|
|
34
|
+
result: result.value.result,
|
|
35
|
+
...(result.value.analysisProfile === undefined
|
|
36
|
+
? {}
|
|
37
|
+
: { analysisProfile: result.value.analysisProfile }),
|
|
38
|
+
rawResult: result.value.rawResult,
|
|
39
|
+
limitations: result.value.limitations,
|
|
40
|
+
locations: result.value.locations,
|
|
41
|
+
});
|
|
42
|
+
const recorded = registration.recordEvidence?.(evidence);
|
|
43
|
+
return server.delivery.toEvidenceToolResult(evidence, contract, recorded);
|
|
25
44
|
});
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
const evidence = createEvidence(result.value.subject ?? registration.activeTarget?.(), result.value.provider, {
|
|
30
|
-
operation: contract.name,
|
|
31
|
-
parameters: arguments_,
|
|
32
|
-
result: result.value.result,
|
|
33
|
-
...(result.value.analysisProfile === undefined
|
|
34
|
-
? {}
|
|
35
|
-
: { analysisProfile: result.value.analysisProfile }),
|
|
36
|
-
rawResult: result.value.rawResult,
|
|
37
|
-
limitations: result.value.limitations,
|
|
38
|
-
locations: result.value.locations,
|
|
39
|
-
});
|
|
40
|
-
const recorded = registration.recordEvidence?.(evidence);
|
|
41
|
-
return server.delivery.toEvidenceToolResult(evidence, contract, recorded);
|
|
45
|
+
return admitted.ok
|
|
46
|
+
? admitted.value
|
|
47
|
+
: server.delivery.toCallToolResult(admitted, contract);
|
|
42
48
|
});
|
|
43
49
|
};
|
|
44
50
|
const runOfficialOperation = async (analysis, contract, arguments_, execution) => {
|
|
@@ -15,7 +15,7 @@ import { registerInvestigationTools } from "./registerInvestigationTools.js";
|
|
|
15
15
|
import { registerProcessComparisonTool } from "./registerProcessComparisonTool.js";
|
|
16
16
|
import { registerEvidenceTools, registerUnknownTools, } from "./registerSessionRecordTools.js";
|
|
17
17
|
import { registerSessionStatusTool } from "./registerSessionStatusTool.js";
|
|
18
|
-
import { sessionAvailabilityPolicy
|
|
18
|
+
import { sessionAvailabilityPolicy } from "./sessionAvailabilityPolicy.js";
|
|
19
19
|
import { logToolExecution } from "./toolLogging.js";
|
|
20
20
|
import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
|
|
21
21
|
const recordProcessResidualUnknowns = (session, evidence, residuals) => {
|
|
@@ -121,10 +121,16 @@ const registerContextTools = (server, session) => {
|
|
|
121
121
|
const navigationContract = toolContract("get_navigation_context");
|
|
122
122
|
const addressContract = toolContract("inspect_address_context");
|
|
123
123
|
server.registerTool(navigationContract.name, toolRegistrationOptions(navigationContract), async (input, context) => {
|
|
124
|
-
|
|
124
|
+
const admitted = await session.withAdmittedAnalysis(navigationContract.name, context.mcpReq.signal, async (analysis) => server.delivery.toCallToolResult(await getNavigationContext(analysis, input, context.mcpReq.signal), navigationContract));
|
|
125
|
+
return admitted.ok
|
|
126
|
+
? admitted.value
|
|
127
|
+
: server.delivery.toCallToolResult(admitted, navigationContract);
|
|
125
128
|
});
|
|
126
129
|
server.registerTool(addressContract.name, toolRegistrationOptions(addressContract), async (input, context) => {
|
|
127
|
-
|
|
130
|
+
const admitted = await session.withAdmittedAnalysis(addressContract.name, context.mcpReq.signal, async (analysis) => server.delivery.toCallToolResult(await inspectAddressContext(analysis, input, context.mcpReq.signal), addressContract));
|
|
131
|
+
return admitted.ok
|
|
132
|
+
? admitted.value
|
|
133
|
+
: server.delivery.toCallToolResult(admitted, addressContract);
|
|
128
134
|
});
|
|
129
135
|
};
|
|
130
136
|
export const registerSessionTools = (server, session, logger, options = {}) => {
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "rea-agents",
|
|
3
3
|
"mcpName": "io.github.morluto/rea",
|
|
4
|
-
"version": "6.
|
|
4
|
+
"version": "6.3.0",
|
|
5
5
|
"description": "Reverse engineer anything from your terminal or agent with one CLI and MCP server.",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"repository": {
|
|
@@ -88,7 +88,7 @@
|
|
|
88
88
|
"prebuild": "npm run deps:check",
|
|
89
89
|
"build": "node scripts/run-exclusive.mjs artifacts turbo run artifacts:skills --force",
|
|
90
90
|
"precheck": "npm run deps:check",
|
|
91
|
-
"check": "node scripts/run-exclusive.mjs artifacts turbo run typecheck lint format:check knip metadata:check",
|
|
91
|
+
"check": "node scripts/run-exclusive.mjs artifacts turbo run typecheck lint format:check knip metadata:check && npm run verify:architecture-guards",
|
|
92
92
|
"precheck:fast": "npm run deps:check",
|
|
93
93
|
"check:fast": "turbo run typecheck lint --output-logs=errors-only",
|
|
94
94
|
"precheck:changed": "npm run deps:check",
|
|
@@ -98,7 +98,7 @@
|
|
|
98
98
|
"precheck:pr": "npm run deps:check",
|
|
99
99
|
"check:pr": "node scripts/run-exclusive.mjs artifacts turbo run typecheck lint format:check knip metadata:check test:run && npm run docs:check && npm run jscpd && npm run scan:todos",
|
|
100
100
|
"precheck:ci": "npm run deps:check",
|
|
101
|
-
"check:ci": "node scripts/run-exclusive.mjs artifacts turbo run typecheck lint format:check knip metadata:check jscpd scan:todos",
|
|
101
|
+
"check:ci": "node scripts/run-exclusive.mjs artifacts turbo run typecheck lint format:check knip metadata:check jscpd scan:todos && npm run verify:architecture-guards",
|
|
102
102
|
"build:cached": "node scripts/check-dependency-install.mjs && node scripts/run-exclusive.mjs artifacts turbo run artifacts:skills",
|
|
103
103
|
"format": "oxfmt .",
|
|
104
104
|
"format:check": "oxfmt --check .",
|
|
@@ -144,6 +144,8 @@
|
|
|
144
144
|
"verify:native-ui": "npm run build:cached && node scripts/verify-native-ui.mjs",
|
|
145
145
|
"verify:keyed-archive": "npm run build:cached && node scripts/verify/apple/keyed-archive.mjs",
|
|
146
146
|
"verify:macos-bundle": "npm run build:cached && node scripts/verify/apple/macos-bundle.mjs",
|
|
147
|
+
"verify:legacy-simulator": "npm run build:cached && node scripts/verify/apple/legacy-simulator.mjs",
|
|
148
|
+
"verify:architecture-guards": "node scripts/verify/architecture-guards.mjs",
|
|
147
149
|
"verify:ghidra": "npm run build:cached && node scripts/verify-real-ghidra.mjs",
|
|
148
150
|
"verify:ghidra:swift": "npm run build:cached && node scripts/verify-real-ghidra-swift.mjs",
|
|
149
151
|
"verify:ida": "npm run build:cached && node scripts/verify-real-ida.mjs",
|
|
@@ -263,6 +265,7 @@
|
|
|
263
265
|
"plist": "5.0.0",
|
|
264
266
|
"semver": "7.8.5",
|
|
265
267
|
"smol-toml": "1.9.0",
|
|
268
|
+
"stream-json": "3.7.0",
|
|
266
269
|
"write-file-atomic": "7.0.0",
|
|
267
270
|
"ws": "8.21.0",
|
|
268
271
|
"zod": "4.4.3",
|
|
@@ -29,10 +29,10 @@ advertise retained references.
|
|
|
29
29
|
When tools are absent or registration is stale:
|
|
30
30
|
|
|
31
31
|
1. Diagnose without changing files. For Codex, run
|
|
32
|
-
`npx -y rea-agents@
|
|
32
|
+
`npx -y rea-agents@6.3.0 doctor --client codex --json`. Substitute the current
|
|
33
33
|
supported client: `claude_code`, `claude_desktop`, `codex`, `cursor`,
|
|
34
34
|
`gemini_cli`, `windsurf`, `devin`, `opencode`, `antigravity`, `copilot_cli`,
|
|
35
|
-
`commandcode`, `vscode`, `grok_build`, or `grok_bot`. `grok_bot` has no local
|
|
35
|
+
`commandcode`, `vscode`, `grok_build`, `omp`, or `grok_bot`. `grok_bot` has no local
|
|
36
36
|
file registration: doctor reports the Grok Bot chat step, and setup does not
|
|
37
37
|
write `mcp.json`. If the client is unknown, use `doctor --json` and
|
|
38
38
|
inspect its registration results before choosing a setup scope.
|
|
@@ -43,12 +43,12 @@ When tools are absent or registration is stale:
|
|
|
43
43
|
that provider: static JavaScript inspection needs neither Hopper nor Ghidra,
|
|
44
44
|
and Android inspection has separate bring-your-own JADX/Java prerequisites.
|
|
45
45
|
3. For a configuration repair, prepare the read-only plan:
|
|
46
|
-
`npx -y rea-agents@
|
|
46
|
+
`npx -y rea-agents@6.3.0 setup --client codex --dry-run --json`.
|
|
47
47
|
Use the current client's ID, show its exact proposed paths, backups, and
|
|
48
48
|
changes, and obtain approval before setup writes configuration or installs
|
|
49
49
|
Hopper. Setup normally installs the matching bundled skill too; include that
|
|
50
50
|
replacement in the reviewed plan. After approval, apply the same scope with
|
|
51
|
-
`npx -y rea-agents@
|
|
51
|
+
`npx -y rea-agents@6.3.0 setup --client codex --yes`. Add `--install-hopper`
|
|
52
52
|
only if that separate installation was needed and explicitly approved.
|
|
53
53
|
4. Restart/reconnect the affected agent. Verify that REA tools actually appear
|
|
54
54
|
in the session, then resume the original investigation. If they remain
|
|
@@ -63,7 +63,7 @@ with a version-pinned `rea-agents` package or continue through the CLI.
|
|
|
63
63
|
A concrete CLI fallback for an operator-supplied JavaScript tree or ASAR is:
|
|
64
64
|
|
|
65
65
|
```bash
|
|
66
|
-
npx -y rea-agents@
|
|
66
|
+
npx -y rea-agents@6.3.0 analyze-javascript-application /absolute/path/to/app --json
|
|
67
67
|
```
|
|
68
68
|
|
|
69
69
|
No MCP registration or native engine is required. Read the returned Evidence,
|
|
@@ -60,6 +60,15 @@ use inclusive ends and can contain gaps. Do not treat the enclosing span as code
|
|
|
60
60
|
For packed targets, retain the original and separately derived artifact identities;
|
|
61
61
|
decompiling an unpacking stub does not recover the unpacked program.
|
|
62
62
|
|
|
63
|
+
When reading Objective-C dispatch metadata, distinguish class implementation
|
|
64
|
+
methods from protocol requirements: class methods report null requirement
|
|
65
|
+
flags, while decoded protocol declarations retain required and optional facts.
|
|
66
|
+
Property attributes remain raw name/value tokens; use the property's
|
|
67
|
+
`atomicity` field for the decoded `N` marker or the default atomic behavior.
|
|
68
|
+
Null class/meta flags, ivar counts, atomicity, or read-only values mean the
|
|
69
|
+
selected provider did not establish that fact. Symbol names alone do not prove
|
|
70
|
+
that a class is a root class or has no ivars.
|
|
71
|
+
|
|
63
72
|
## Managed PE/CLI
|
|
64
73
|
|
|
65
74
|
Start with `inspect_managed_artifact`. REA's canonical managed inspection is
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
/** Derive module coverage from the best available managed evidence source. */
|
|
2
|
-
export const moduleCoverageState = (parsed) => parsed.artifact !== null && parsed.artifact.result.module !== null
|
|
3
|
-
? parsed.artifact.result.coverage.state
|
|
4
|
-
: parsed.members !== null && parsed.members.result.module !== null
|
|
5
|
-
? parsed.members.result.coverage.state
|
|
6
|
-
: (parsed.boundaries?.result.coverage.state ?? "complete");
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import { NATIVE_TOOL_CONTRACTS } from "../contracts/native/nativeToolContracts.js";
|
|
2
|
-
import { registerEvidenceTools } from "./registerEvidenceTools.js";
|
|
3
|
-
/** Register provider-neutral static inspection operations. */
|
|
4
|
-
export const registerNativeTools = (server, analysis, options) => {
|
|
5
|
-
registerEvidenceTools(server, analysis, NATIVE_TOOL_CONTRACTS, options);
|
|
6
|
-
};
|