rea-agents 6.0.0 → 6.2.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 +26 -18
- package/bridge/android/ReaJadxBridge.java +14 -5
- package/bridge/ghidra/ReaGhidraBridge.java +205 -51
- package/bridge/hopper_bridge.py +314 -127
- package/bridge/mitmproxy/capture.py +0 -2
- package/bridge/native/rea_lldb_tracer.py +630 -94
- package/bridge/process/ProcessRunTokenReader.swift +39 -5
- package/bridge/pwntools/recorded_crash_impl.py +4 -0
- package/dist/android/JadxConfiguration.js +274 -31
- package/dist/android/JadxMcpTransport.js +18 -2
- package/dist/android/JadxProtocol.js +6 -0
- package/dist/android/JadxProvider.js +76 -37
- package/dist/android/JadxSession.js +23 -4
- package/dist/application/AnalysisContextQueries.js +8 -35
- package/dist/application/AnalysisDocument.js +32 -0
- package/dist/application/AppBundleExecutable.js +67 -21
- package/dist/application/BinaryTargetResolver.js +5 -3
- package/dist/application/BrowserEvidence.js +3 -8
- package/dist/application/BrowserScenarioEvidence.js +2 -18
- package/dist/application/CallPathTracing.js +19 -3
- package/dist/application/CapabilityInventory.js +48 -11
- package/dist/application/ClientConfigurationDocument.js +917 -8
- package/dist/application/ClientRegistrationIdentity.js +26 -5
- package/dist/application/ClientRegistrationStatus.js +29 -14
- package/dist/application/DirectAnalysis.js +56 -51
- package/dist/application/DirectAnalysisCleanup.js +72 -0
- package/dist/application/DirectAnalysisStatus.js +4 -5
- package/dist/application/Doctor.js +19 -21
- package/dist/application/DoctorDiagnostics.js +1 -2
- package/dist/application/DoctorScope.js +25 -13
- package/dist/application/EnhancedLiteralTracing.js +22 -25
- package/dist/application/EnhancedTools.js +64 -17
- package/dist/application/EvidenceBundleFiles.js +30 -13
- package/dist/application/FunctionAnalysisEvidence.js +2 -3
- package/dist/application/InventoryProjectionEvidence.js +4 -3
- package/dist/application/InvestigationProviders.js +11 -2
- package/dist/application/JsonFiles.js +83 -28
- package/dist/application/LinuxHopper.js +9 -6
- package/dist/application/MacHopper.js +15 -18
- package/dist/application/ProcedureAddressResolution.js +11 -0
- package/dist/application/RealHopperAssertions.js +0 -11
- package/dist/application/ReconstructionCoverageService.js +7 -4
- package/dist/application/ReconstructionObligationCandidates.js +1 -1
- package/dist/application/ReconstructionObligationLedgerService.js +4 -3
- package/dist/application/ReferenceSourceImportEntries.js +1 -1
- package/dist/application/Setup.js +21 -17
- package/dist/application/SetupClientConfiguration.js +10 -15
- package/dist/application/SetupHost.js +21 -29
- package/dist/application/SetupPlan.js +11 -9
- package/dist/application/SupportedClients.js +34 -1
- package/dist/application/Uninstall.js +82 -29
- package/dist/application/Update.js +18 -3
- package/dist/application/UpdateMaintenance.js +7 -5
- package/dist/application/UpdateRuntime.js +57 -36
- package/dist/application/WebModuleTraceService.js +4 -2
- package/dist/application/WebNetworkCaptureService.js +4 -2
- package/dist/application/WebRuntimeService.js +5 -3
- package/dist/application/WebScriptExportService.js +32 -6
- package/dist/application/WebSourceLocationService.js +4 -2
- package/dist/application/WorkflowEvidence.js +105 -0
- package/dist/application/XrefsAddressResolution.js +45 -0
- package/dist/application/analysisView/AnalysisViewService.js +76 -0
- package/dist/application/binary/AnalysisClientCleanup.js +30 -5
- package/dist/application/binary/AnalysisProviderEvaluation.js +22 -7
- package/dist/application/binary/AnalysisProviderRegistry.js +4 -6
- package/dist/application/binary/AnalysisSnapshotCache.js +13 -14
- package/dist/application/binary/BinarySession.js +161 -93
- package/dist/application/binary/BinarySessionComposition.js +1 -3
- package/dist/application/binary/BinarySessionExecution.js +3 -5
- package/dist/application/binary/BinarySessionOpen.js +4 -4
- package/dist/application/binary/BinarySessionRecords.js +26 -4
- package/dist/application/binary/BinarySessionStatus.js +18 -7
- package/dist/application/binary/CompositeProvider.js +16 -17
- package/dist/application/binary/LazyAnalysisProvider.js +8 -5
- package/dist/application/binary/SessionProviderRouter.js +27 -135
- package/dist/application/binaryDiagnostics/BinaryLayoutService.js +4 -2
- package/dist/application/binaryDiagnostics/RecordedCrashService.js +4 -2
- package/dist/application/evm/EvmInterfaceService.js +4 -2
- package/dist/application/homebrew.js +48 -0
- package/dist/application/investigation/EvidenceLedger.js +21 -7
- package/dist/application/investigation/InvestigationRecords.js +8 -0
- package/dist/application/javascript/ElectronActiveEvidence.js +9 -13
- package/dist/application/javascript/JavaScriptAnalysisControl.js +34 -0
- package/dist/application/javascript/JavaScriptApplicationEvidence.js +21 -4
- package/dist/application/javascript/JavaScriptApplicationEvidenceGraph.js +19 -2
- package/dist/application/javascript/JavaScriptApplicationService.js +27 -15
- package/dist/application/javascript/JavaScriptApplicationWorkflowService.js +5 -5
- package/dist/application/javascript/JavaScriptArtifactAnalysis.js +10 -7
- package/dist/application/javascript/JavaScriptArtifactGraphBuilder.js +44 -10
- package/dist/application/javascript/JavaScriptArtifactGraphBundlers.js +11 -3
- package/dist/application/javascript/JavaScriptArtifactGraphContext.js +9 -0
- package/dist/application/javascript/JavaScriptArtifactGraphDocuments.js +8 -5
- package/dist/application/javascript/JavaScriptArtifactGraphFindings.js +12 -3
- package/dist/application/javascript/JavaScriptArtifactGraphStructure.js +0 -1
- package/dist/application/javascript/JavaScriptArtifactPathResolution.js +49 -19
- package/dist/application/javascript/JavaScriptArtifactReconstruction.js +56 -8
- package/dist/application/javascript/JavaScriptModuleRelationships.js +38 -9
- package/dist/application/javascript/JavaScriptRecoveryService.js +4 -2
- package/dist/application/javascript/JavaScriptRuntimeObservationService.js +6 -4
- package/dist/application/javascript/JavaScriptRuntimeReconciliationService.js +3 -3
- package/dist/application/javascript/JavaScriptSemanticGraphAsyncProjection.js +2 -3
- package/dist/application/javascript/JavaScriptSemanticGraphBuilder.js +63 -61
- package/dist/application/javascript/JavaScriptSemanticGraphChildProcessProjection.js +1 -2
- package/dist/application/javascript/JavaScriptSemanticGraphDataProjection.js +2 -3
- package/dist/application/javascript/JavaScriptSemanticGraphFlowProjection.js +1 -5
- package/dist/application/javascript/JavaScriptSemanticGraphObjectProjection.js +75 -46
- package/dist/application/javascript/JavaScriptSemanticGraphResourceProjection.js +2 -3
- package/dist/application/javascript/JavaScriptSemanticGraphValueProjection.js +64 -19
- package/dist/application/managed/ManagedApplicationGraphService.js +4 -3
- package/dist/application/managed/ManagedMemberComparisonService.js +9 -5
- package/dist/application/managed/ManagedNativeVerificationService.js +6 -4
- package/dist/application/managed/ManagedReconstructionService.js +4 -3
- package/dist/application/process/ProcessCli.js +25 -17
- package/dist/application/process/ProcessEvidence.js +4 -4
- package/dist/application/workflowInputError.js +18 -0
- package/dist/artifacts/ArtifactProvider.js +48 -13
- package/dist/artifacts/ArtifactReader.js +31 -0
- package/dist/artifacts/DirectoryArtifactReader.js +2 -1
- package/dist/artifacts/MachOSliceArtifactReader.js +106 -15
- package/dist/artifacts/NativeDmgArtifactReader.js +73 -21
- package/dist/artifacts/SafeOutputTree.js +16 -2
- package/dist/artifacts/ZipArtifactReader.js +11 -4
- package/dist/artifacts/apple/AppleAssetCatalogAnalysis.js +26 -5
- package/dist/artifacts/apple/DylibResolutionReader.js +17 -7
- package/dist/artifacts/apple/InterfaceBuilderAnalysis.js +176 -56
- package/dist/artifacts/apple/InterfaceBuilderDecodeBudget.js +195 -0
- package/dist/artifacts/apple/KeyedArchiveReader.js +55 -23
- package/dist/artifacts/apple/MachoLoadCommandReader.js +92 -31
- package/dist/artifacts/apple/NibArchive.js +81 -14
- package/dist/artifacts/apple/NibViewHierarchy.js +10 -3
- package/dist/artifacts/apple/PlistNumberLiterals.js +164 -0
- package/dist/artifacts/extraction/ArtifactExtraction.js +78 -21
- package/dist/artifacts/inventory/ArtifactGraphConstruction.js +79 -68
- package/dist/artifacts/inventory/ArtifactInventory.js +0 -1
- package/dist/artifacts/inventory/reader.js +3 -3
- package/dist/artifacts/inventory/scanCanonical.js +59 -38
- package/dist/artifacts/inventory/scanReader.js +5 -9
- package/dist/artifacts/javascript/JavaScriptArtifactFiles.js +6 -2
- package/dist/browser/BrowserScenarioPartialObservation.js +106 -0
- package/dist/browser/CdpBrowserProvider.js +2 -3
- package/dist/browser/CdpCaptureCompleteness.js +2 -0
- package/dist/browser/CdpCaptureEventHandlers.js +78 -15
- package/dist/browser/CdpCaptureEventTypes.js +5 -1
- package/dist/browser/CdpCaptureEvents.js +25 -1
- package/dist/browser/CdpCaptureValues.js +20 -0
- package/dist/browser/CdpConnection.js +30 -11
- package/dist/browser/CdpElectronProvider.js +0 -2
- package/dist/browser/CdpElectronScriptEvents.js +2 -8
- package/dist/browser/CdpElectronScripts.js +2 -3
- package/dist/browser/CdpOptionalCommand.js +2 -3
- package/dist/browser/CdpPageCapture.js +23 -1
- package/dist/browser/CdpPageCaptureScripts.js +2 -3
- package/dist/browser/CdpSafeMetadata.js +10 -10
- package/dist/browser/PlaywrightBrowserScenarioProvider.js +59 -44
- package/dist/browser/PlaywrightElectronActiveActions.js +34 -79
- package/dist/browser/PlaywrightElectronActiveProjection.js +141 -0
- package/dist/browser/PlaywrightElectronActiveProvider.js +133 -130
- package/dist/browser/PlaywrightScenarioArtifacts.js +1 -1
- package/dist/browser/PlaywrightScenarioBrowser.js +139 -39
- package/dist/browser/PlaywrightScenarioEvents.js +1 -1
- package/dist/browser/PlaywrightScenarioSession.js +39 -22
- package/dist/browser/WebSourceMapFetcher.js +426 -72
- package/dist/browser/assets/LocalWebScriptArtifacts.js +2 -2
- package/dist/browser/assets/ScriptCaptureAdapters.js +1 -1
- package/dist/browser/history/CaptureFailures.js +41 -1
- package/dist/browser/history/CaptureRelease.js +5 -0
- package/dist/browser/history/HarCaptureAdapter.js +3 -3
- package/dist/browser/history/HarJson.js +3 -2
- package/dist/browser/history/HistoricalCaptureDecoder.js +4 -2
- package/dist/browser/history/MitmproxyCaptureAdapter.js +4 -2
- package/dist/catalogIdentity.js +0 -1
- package/dist/cli/analysisSelector.js +23 -0
- package/dist/cli/analysisViewCommands.js +36 -0
- package/dist/cli/applicationCommands.js +2 -3
- package/dist/cli/artifactCommands.js +11 -12
- package/dist/cli/coreAnalysisCommands.js +3 -3
- package/dist/cli/coreBinaryCommands.js +100 -37
- package/dist/cli/coreNativeCommands.js +9 -10
- package/dist/cli/electronCommands.js +10 -9
- package/dist/cli/interactiveSetup.js +6 -6
- package/dist/cli/javascriptApplicationAnalysis.js +7 -3
- package/dist/cli/jsonOutput.js +4 -99
- package/dist/cli/managedCommands.js +7 -8
- package/dist/cli/nativeCallCommands.js +3 -5
- package/dist/cli/omittableDefaults.js +50 -0
- package/dist/cli/processCommands.js +3 -2
- package/dist/cli/setupCommands.js +16 -15
- package/dist/cli/utilityCommands.js +9 -9
- package/dist/cli/webRuntimeCommands.js +8 -8
- package/dist/cli.js +18 -9
- package/dist/cliBrowserScenarioCommands.js +2 -2
- package/dist/cliCommandNames.js +1 -1
- package/dist/cliJsonInput.js +24 -5
- package/dist/cliOutput.js +0 -38
- package/dist/composition/auxiliaryAnalysisProviders.js +27 -23
- package/dist/composition/binary.js +9 -9
- package/dist/composition/browserScenario.js +2 -1
- package/dist/composition/directAnalysis.js +20 -13
- package/dist/composition/electronScenario.js +1 -1
- package/dist/composition/optionalObservationProviders.js +12 -7
- package/dist/config/environment.js +10 -0
- package/dist/config/ghidraStartupTimeout.js +12 -0
- package/dist/config/homeDirectory.js +12 -0
- package/dist/config/mcpResponseBudget.js +30 -0
- package/dist/config/parseConfig.js +8 -3
- package/dist/config/parsers.js +19 -22
- package/dist/contracts/analysisViewToolContracts.js +56 -0
- package/dist/contracts/applicationToolContracts.js +5 -4
- package/dist/contracts/artifactComparisonExample.js +2 -2
- package/dist/contracts/artifactToolContracts.js +1 -1
- package/dist/contracts/browserScenarioToolContracts.js +1 -1
- package/dist/contracts/browserToolContracts.js +19 -15
- package/dist/contracts/enhancedInputs.js +7 -5
- package/dist/contracts/enhancedToolContracts.js +7 -6
- package/dist/contracts/evm/evmToolContracts.js +1 -1
- package/dist/contracts/functionWorkflowToolContracts.js +1 -1
- package/dist/contracts/hopperMemoryContracts.js +2 -5
- package/dist/contracts/inputSchemaPresentation.js +90 -0
- package/dist/contracts/investigationExamples.js +4 -3
- package/dist/contracts/javascript/electronToolContracts.js +2 -2
- package/dist/contracts/javascript/javascriptApplicationWorkflowExamples.js +0 -20
- package/dist/contracts/javascript/javascriptExportShapeComparisonExample.js +245 -0
- package/dist/contracts/javascript/javascriptRuntimeObservationToolContracts.js +1 -1
- package/dist/contracts/managed/managedToolContracts.js +7 -14
- package/dist/contracts/managed/managedWorkflowToolContracts.js +1 -1
- package/dist/contracts/mobileApplicationGraphExamples.js +3 -3
- package/dist/contracts/native/binaryDiagnosticsToolContracts.js +1 -1
- package/dist/contracts/native/nativeToolContracts.js +5 -3
- package/dist/contracts/officialToolContracts.js +16 -16
- package/dist/contracts/promptContracts.js +5 -5
- package/dist/contracts/providerSelection.js +1 -1
- package/dist/contracts/sessionLifecycleInputs.js +3 -7
- package/dist/contracts/sessionStatusContract.js +2 -4
- package/dist/contracts/sessionToolContracts.js +18 -8
- package/dist/contracts/sessionToolSchemas.js +3 -19
- package/dist/contracts/toolContractExamples.js +0 -1
- package/dist/contracts/toolContractHelpers.js +4 -1
- package/dist/contracts/toolContracts.js +2 -0
- package/dist/contracts/toolEffects.js +1 -1
- package/dist/contracts/toolOutputSchemaGroups.js +160 -115
- package/dist/contracts/toolOutputSchemaPrimitives.js +28 -20
- package/dist/contracts/toolSchemaMetadata.js +41 -33
- package/dist/contracts/webNetworkCaptureToolContracts.js +2 -2
- package/dist/contracts/webRuntimeToolContracts.js +1 -1
- package/dist/contracts/webScriptToolContracts.js +1 -1
- package/dist/doctorRuntime.js +7 -5
- package/dist/domain/analysisErrorBase.js +8 -3
- package/dist/domain/analysisErrorCore.js +6 -1
- package/dist/domain/analysisErrorPresentation.js +90 -20
- package/dist/domain/analysisErrorProjection.js +130 -32
- package/dist/domain/analysisSnapshot.js +29 -31
- package/dist/domain/analysisView/analysisView.js +243 -0
- package/dist/domain/analysisView/analysisViewCoverage.js +19 -0
- package/dist/domain/analysisView/binaryLayoutView.js +159 -0
- package/dist/domain/analysisView/javascriptApplicationView.js +238 -0
- package/dist/domain/android/androidAnalysis.js +2 -4
- package/dist/domain/android/androidApplication.js +18 -10
- package/dist/domain/apple/appleApplication.js +42 -15
- package/dist/domain/apple/dyldEnvironment.js +73 -0
- package/dist/domain/apple/dylibResolution.js +130 -12
- package/dist/domain/apple/dylibResolutionFindings.js +9 -7
- package/dist/domain/apple/interfaceBuilderGraph.js +25 -14
- package/dist/domain/apple/interfaceBuilderKeyedArchive.js +13 -3
- package/dist/domain/apple/keyedArchive.js +35 -3
- package/dist/domain/apple/machoContainer.js +54 -0
- package/dist/domain/apple/plistNumbers.js +76 -0
- package/dist/domain/artifactComparison.js +15 -6
- package/dist/domain/artifactGraph.js +16 -3
- package/dist/domain/artifactIdentity.js +29 -0
- package/dist/domain/artifactInventoryEvidence.js +28 -40
- package/dist/domain/artifactOperationError.js +3 -3
- package/dist/domain/artifactPartialObservation.js +1 -0
- package/dist/domain/artifactPathSyntax.js +49 -0
- package/dist/domain/binaryTarget.js +39 -13
- package/dist/domain/bridgeCandidateProjection.js +71 -0
- package/dist/domain/browserCaptureComparison.js +13 -49
- package/dist/domain/browserCompleteness.js +1 -0
- package/dist/domain/browserNetworkEvidence.js +10 -4
- package/dist/domain/browserObservation.js +0 -1
- package/dist/domain/browserObservationError.js +24 -5
- package/dist/domain/browserObservationSchemas.js +14 -3
- package/dist/domain/browserScenario.js +0 -1
- package/dist/domain/browserScenarioCapture.js +1 -2
- package/dist/domain/browserScenarioDiff.js +0 -2
- package/dist/domain/browserScenarioDiffEvidence.js +0 -12
- package/dist/domain/browserScenarioDiffValues.js +2 -2
- package/dist/domain/browserScenarioValues.js +5 -10
- package/dist/domain/bundleComparison.js +3 -2
- package/dist/domain/callPath.js +8 -9
- package/dist/domain/callPathSchemas.js +2 -2
- package/dist/domain/canonicalJsonDigestSteps.js +133 -0
- package/dist/domain/canonicalOrdering.js +9 -5
- package/dist/domain/changedBehavior.js +9 -9
- package/dist/domain/comparisonSourceEvidence.js +40 -0
- package/dist/domain/completionLedgerGeneration.js +2 -1
- package/dist/domain/configurationErrors.js +13 -1
- package/dist/domain/conformancePackage.js +4 -3
- package/dist/domain/evidence.js +65 -36
- package/dist/domain/evidenceBundle.js +47 -8
- package/dist/domain/evidenceCompletionLedger.js +2 -1
- package/dist/domain/evidenceErrors.js +12 -1
- package/dist/domain/explicitSensitiveFailure.js +17 -1
- package/dist/domain/firmware/firmwareAnalysis.js +6 -7
- package/dist/domain/functionComparison.js +4 -5
- package/dist/domain/functionComparisonDimensions.js +120 -87
- package/dist/domain/functionComparisonNormalization.js +23 -34
- package/dist/domain/functionComparisonResults.js +1 -4
- package/dist/domain/functionComparisonSchemas.js +2 -8
- package/dist/domain/functionDossierEvidence.js +2 -37
- package/dist/domain/hopperErrors.js +23 -2
- package/dist/domain/hopperValues.js +51 -8
- package/dist/domain/immutableJson.js +114 -0
- package/dist/domain/inputIssueProjection.js +3 -0
- package/dist/domain/javascript/electronActiveObservation.js +47 -64
- package/dist/domain/javascript/electronObservation.js +14 -3
- package/dist/domain/javascript/electronStaticAnalysisBrowser.js +10 -9
- package/dist/domain/javascript/electronStaticAnalysisIpc.js +2 -1
- package/dist/domain/javascript/electronStaticAnalysisNative.js +2 -1
- package/dist/domain/javascript/electronStaticAnalysisValues.js +6 -12
- package/dist/domain/javascript/javascriptApplicationAnalysis.js +71 -23
- package/dist/domain/javascript/javascriptApplicationEvidenceSchemas.js +2 -0
- package/dist/domain/javascript/javascriptApplicationGraph.js +39 -3
- package/dist/domain/javascript/javascriptApplicationGraphSchemas.js +9 -2
- package/dist/domain/javascript/javascriptApplicationVersionItems.js +5 -2
- package/dist/domain/javascript/javascriptApplicationVersionKeys.js +2 -1
- package/dist/domain/javascript/javascriptAstValues.js +20 -0
- package/dist/{application/javascript/JavaScriptReturnShapeProjection.js → domain/javascript/javascriptExportReturnShapeProjection.js} +4 -4
- package/dist/domain/javascript/javascriptExportShapeComparison.js +7 -1
- package/dist/domain/javascript/javascriptExportShapeComparisonIdentity.js +6 -1
- package/dist/domain/javascript/javascriptExportShapeComparisonSchemas.js +29 -1
- package/dist/domain/javascript/javascriptExportShapeSelection.js +5 -5
- package/dist/domain/javascript/javascriptExportShapeVariants.js +67 -14
- package/dist/domain/javascript/javascriptFeatureSeed.js +20 -0
- package/dist/domain/javascript/javascriptFeatureTraversal.js +0 -1
- package/dist/domain/javascript/javascriptNativeHandoff.js +1 -1
- package/dist/domain/javascript/javascriptRecovery.js +3 -8
- package/dist/domain/javascript/javascriptRuntimeLoadState.js +0 -1
- package/dist/domain/javascript/javascriptRuntimeObservation.js +10 -2
- package/dist/domain/javascript/javascriptRuntimeReconciliationMatching.js +1 -1
- package/dist/domain/javascript/javascriptRuntimeReconciliationParsing.js +3 -2
- package/dist/domain/javascript/javascriptRuntimeStaticCandidates.js +0 -1
- package/dist/domain/javascript/javascriptSemanticAnalysis.js +106 -5
- package/dist/domain/javascript/javascriptSemanticAsyncEffects.js +2 -1
- package/dist/domain/javascript/javascriptSemanticCalls.js +2 -1
- package/dist/domain/javascript/javascriptSemanticChildProcesses.js +2 -1
- package/dist/domain/javascript/javascriptSemanticCoverage.js +6 -5
- package/dist/domain/javascript/javascriptSemanticDataEffectHelpers.js +9 -17
- package/dist/domain/javascript/javascriptSemanticDataEffects.js +23 -6
- package/dist/domain/javascript/javascriptSemanticGraph.js +98 -43
- package/dist/domain/javascript/javascriptSemanticGraphSchemas.js +1 -0
- package/dist/domain/javascript/javascriptSemanticMemberMutations.js +77 -20
- package/dist/domain/javascript/javascriptSemanticMutationValues.js +21 -27
- package/dist/domain/javascript/javascriptSemanticObjects.js +83 -42
- package/dist/domain/javascript/javascriptSemanticPrimitives.js +18 -21
- package/dist/domain/javascript/javascriptSemanticProjection.js +2 -3
- package/dist/domain/javascript/javascriptSemanticPromises.js +2 -1
- package/dist/domain/javascript/javascriptSemanticQuerySchemas.js +8 -4
- package/dist/domain/javascript/javascriptSemanticResourceLimits.js +77 -0
- package/dist/domain/javascript/javascriptSemanticResources.js +1 -1
- package/dist/domain/javascript/javascriptSemanticReturns.js +32 -17
- package/dist/domain/javascript/javascriptSemanticSlots.js +72 -0
- package/dist/domain/javascript/javascriptSemanticValues.js +126 -61
- package/dist/domain/javascript/javascriptSourceMapPaths.js +104 -0
- package/dist/domain/javascript/javascriptSourceParser.js +6 -2
- package/dist/domain/javascript/javascriptStaticAnalysis.js +22 -17
- package/dist/domain/javascript/javascriptStaticAnalysisBundler.js +5 -3
- package/dist/domain/javascript/javascriptStaticAnalysisCalls.js +16 -5
- package/dist/domain/javascript/javascriptStaticAnalysisFindings.js +66 -7
- package/dist/domain/javascript/javascriptStaticAnalysisHelpers.js +28 -17
- package/dist/domain/javascript/javascriptStaticAnalysisState.js +3 -2
- package/dist/domain/javascript/sourceToBundleComparison.js +12 -3
- package/dist/domain/javascript/sourceToBundleSignals.js +47 -19
- package/dist/domain/jsonSerialization.js +109 -0
- package/dist/domain/jsonValue.js +90 -6
- package/dist/domain/localPath.js +6 -0
- package/dist/domain/managed/managedApplicationGraph.js +10 -10
- package/dist/domain/managed/managedArtifact.js +6 -4
- package/dist/domain/managed/managedInspectionEvidence.js +16 -0
- package/dist/domain/managed/managedMemberComparison.js +2 -9
- package/dist/domain/managed/managedMemberComparisonMatch.js +5 -9
- package/dist/domain/managed/managedNativeVerification.js +3 -11
- package/dist/domain/managed/managedNativeVerificationMatch.js +9 -3
- package/dist/domain/native/binaryLayout.js +2 -3
- package/dist/domain/native/fileOffsetPartialObservation.js +1 -0
- package/dist/domain/native/nativeApiBoundary.js +1 -1
- package/dist/domain/native/nativeCallObservation.js +37 -13
- package/dist/domain/native/nativeCallPartialObservation.js +33 -0
- package/dist/domain/native/nativeInstruction.js +7 -0
- package/dist/domain/native/recordedCrash.js +2 -3
- package/dist/domain/offsetDateTime.js +17 -0
- package/dist/domain/process/processCapture.js +21 -16
- package/dist/domain/process/processCaptureCoverage.js +67 -0
- package/dist/domain/process/processCaptureExample.js +2 -1
- package/dist/domain/process/processCaptureParsing.js +1 -34
- package/dist/domain/process/processCaptureValidation.js +81 -13
- package/dist/domain/process/processComparison.js +79 -26
- package/dist/domain/process/processObservation.js +10 -2
- package/dist/domain/process/processScenario.js +35 -12
- package/dist/domain/process/processTraceComparison.js +0 -2
- package/dist/domain/process/processTraceDimensionProjection.js +1 -1
- package/dist/domain/process/processTraceEvaluation.js +15 -11
- package/dist/domain/process/processTraceSpecification.js +3 -4
- package/dist/domain/propertyListKeys.js +1 -1
- package/dist/domain/propertyListXmlText.js +19 -0
- package/dist/domain/providerAdapterError.js +3 -1
- package/dist/domain/providerOperationHealth.js +54 -0
- package/dist/domain/reconstructionCoverage.js +5 -2
- package/dist/domain/reconstructionObligationLedgerSchemas.js +2 -1
- package/dist/domain/reconstructionReadinessSchemas.js +2 -1
- package/dist/domain/reconstructionVerification.js +9 -46
- package/dist/domain/reconstructionVerificationSchemas.js +4 -3
- package/dist/domain/referenceSourceGraph.js +20 -21
- package/dist/domain/staticRuntimeCorrelation.js +8 -45
- package/dist/domain/stringPatterns.js +6 -0
- package/dist/domain/swiftSymbolClassification.js +61 -0
- package/dist/domain/symbolAnalysis.js +66 -18
- package/dist/domain/webBundleAnalysis.js +20 -8
- package/dist/domain/webBundleAnalyzerInspection.js +13 -8
- package/dist/domain/webBundleAnalyzerResult.js +41 -2
- package/dist/domain/webCaptureDiff.js +0 -1
- package/dist/domain/webCaptureDiffSchemas.js +6 -3
- package/dist/domain/webEventListeners.js +3 -2
- package/dist/domain/webExecution.js +3 -2
- package/dist/domain/webRuntime.js +19 -7
- package/dist/domain/webScriptExport.js +1 -1
- package/dist/domain/webSourceLocation.js +1 -0
- package/dist/dotnet/ManagedArtifactInspector.js +2 -19
- package/dist/dotnet/ManagedMemberInspector.js +12 -18
- package/dist/dotnet/ManagedMemberInspectorCore.js +47 -44
- package/dist/dotnet/ManagedMemberRows.js +75 -62
- package/dist/dotnet/ManagedMetadataInventory.js +16 -22
- package/dist/dotnet/ManagedMethodBodyReader.js +4 -0
- package/dist/dotnet/ManagedNativeBoundaryHelpers.js +109 -94
- package/dist/dotnet/ManagedNativeBoundaryInspector.js +12 -21
- package/dist/dotnet/ManagedReaderFailure.js +16 -0
- package/dist/dotnet/ManagedStaticProvider.js +3 -5
- package/dist/evaluation/AgentEvaluationFixtures.js +250 -0
- package/dist/evaluation/AgentEvaluationReport.js +28 -0
- package/dist/evaluation/CodexAgentEval.js +12 -8
- package/dist/evaluation/KnownAnswerEvaluation.js +281 -0
- package/dist/evm/EvmoleInterfaceProvider.js +2 -1
- package/dist/firmware/FirmwareCommand.js +9 -5
- package/dist/firmware/FirmwareFiles.js +1 -1
- package/dist/firmware/FirmwareProvider.js +4 -4
- package/dist/generatedPackageMetadata.js +2 -2
- package/dist/ghidra/GhidraAnalysisProfile.js +7 -5
- package/dist/ghidra/GhidraClient.js +126 -34
- package/dist/ghidra/GhidraClientStartup.js +0 -2
- package/dist/ghidra/GhidraDiagnostics.js +7 -7
- package/dist/ghidra/GhidraDoctor.js +6 -5
- package/dist/ghidra/GhidraFunctionValues.js +13 -12
- package/dist/ghidra/GhidraInstallation.js +58 -33
- package/dist/ghidra/GhidraInventoryValues.js +14 -4
- package/dist/ghidra/GhidraJavaLaunch.js +66 -0
- package/dist/ghidra/GhidraLauncher.js +47 -22
- package/dist/ghidra/GhidraProvider.js +6 -2
- package/dist/ghidra/GhidraProviderCapabilities.js +20 -2
- package/dist/ghidra/GhidraProviderClient.js +36 -15
- package/dist/ghidra/GhidraSessionError.js +13 -7
- package/dist/ghidra/GhidraSessionRoot.js +39 -0
- package/dist/ghidra/GhidraTargetSnapshot.js +47 -12
- package/dist/ghidra/GhidraTransport.js +20 -0
- package/dist/ghidra/extensions/GhidraExtensions.js +17 -10
- package/dist/ghidra/extensions/nativeaot/NativeAotAdapter.js +8 -2
- package/dist/hopper/BridgeLauncher.js +65 -56
- package/dist/hopper/HopperAnalysisProfile.js +65 -12
- package/dist/hopper/HopperCleanup.js +63 -22
- package/dist/hopper/HopperClient.js +288 -59
- package/dist/hopper/HopperFileOffset.js +237 -0
- package/dist/hopper/HopperMachOImage.js +197 -0
- package/dist/hopper/HopperOperationStage.js +6 -0
- package/dist/hopper/HopperProvider.js +71 -19
- package/dist/hopper/HopperProviderCapabilities.js +19 -1
- package/dist/hopper/HopperRegexSearch.js +134 -0
- package/dist/hopper/HopperRegexWorker.js +27 -0
- package/dist/hopper/HopperRequestQueue.js +68 -19
- package/dist/hopper/HopperTargetLease.js +133 -49
- package/dist/hopper/LinuxPrivateDisplayProbe.js +6 -0
- package/dist/ida/IdaConfiguration.js +8 -3
- package/dist/ida/IdaInput.js +1 -7
- package/dist/ida/IdaMcpConnection.js +8 -4
- package/dist/ida/IdaOperationRunner.js +3 -3
- package/dist/ida/IdaProvider.js +8 -12
- package/dist/ida/IdaSessionClient.js +20 -18
- package/dist/ida/IdaWorkspace.js +12 -13
- package/dist/inspector/JavaScriptRuntimeScope.js +9 -1
- package/dist/inspector/V8InspectorCaptureProjection.js +9 -4
- package/dist/inspector/V8InspectorProvider.js +82 -36
- package/dist/javascript/recovery/WakaruCommand.js +7 -2
- package/dist/javascript/recovery/WakaruExecution.js +5 -2
- package/dist/javascript/sourceMaps/DecodedSourceMap.js +47 -0
- package/dist/javascript/sourceMaps/SourceMapCommand.js +16 -0
- package/dist/javascript/sourceMaps/SourceMapFormat.js +79 -31
- package/dist/javascript/sourceMaps/TraceSourceMap.js +14 -28
- package/dist/main/shutdown.js +11 -3
- package/dist/main/startup.js +9 -2
- package/dist/main/transport.js +22 -2
- package/dist/main.js +11 -18
- package/dist/mcpDoctor.js +62 -2
- package/dist/native/AppleDispatchCoverage.js +47 -6
- package/dist/native/AppleDispatchDecodeFacts.js +6 -0
- package/dist/native/AppleDispatchMetadata.js +6 -3
- package/dist/native/AppleMachoFixups.js +48 -24
- package/dist/native/AppleMachoSelection.js +48 -22
- package/dist/native/AppleObjcCategories.js +6 -2
- package/dist/native/AppleObjcDispatchFacets.js +5 -2
- package/dist/native/AppleObjcProperties.js +2 -1
- package/dist/native/AppleSwiftDispatchFacets.js +27 -21
- package/dist/native/AppleSwiftVtables.js +21 -15
- package/dist/native/CommandRunner.js +87 -88
- package/dist/native/LldbCallTracer.js +372 -103
- package/dist/native/LldbRetainedObservations.js +178 -0
- package/dist/native/NativeCallObservation.js +62 -3
- package/dist/native/NativeMacOSProvider.js +122 -31
- package/dist/native/NativeUiHelperRuntime.js +11 -2
- package/dist/native/NativeUiObservation.js +2 -2
- package/dist/native/SignatureTargetBinding.js +155 -0
- package/dist/native/parsers/lipo.js +71 -1
- package/dist/native/pwndbg/PwndbgCoreContext.js +25 -5
- package/dist/native/pwntools/PwntoolsDecoder.js +2 -1
- package/dist/native/pwntools/RecordedCrashStructureBindings.js +2 -0
- package/dist/process/DarwinProcessRunTokenReader.js +23 -10
- package/dist/process/ExecFileOutput.js +108 -6
- package/dist/process/OwnedCommand.js +7 -2
- package/dist/process/PrivateRuntimeRoot.js +10 -5
- package/dist/process/ProcessOwnership.js +204 -57
- package/dist/process/ProcessOwnershipObservation.js +60 -9
- package/dist/process/ProviderProcess.js +39 -10
- package/dist/process/capture/FilesystemSnapshot.js +50 -13
- package/dist/process/capture/ProcessCaptureError.js +15 -2
- package/dist/process/capture/ProcessCaptureLifecycle.js +235 -81
- package/dist/process/capture/ProcessFilesystemEffects.js +33 -3
- package/dist/process/capture/ProcessHarness.js +21 -25
- package/dist/process/capture/ProcessNormalization.js +20 -2
- package/dist/process/capture/ProcessSampling.js +25 -2
- package/dist/process/capture/TerminalRenderer.js +14 -0
- package/dist/process/snapshotEnvironment.js +14 -0
- package/dist/server/EvidenceMcpServer.js +157 -0
- package/dist/server/createServer.js +61 -41
- package/dist/server/mcpClientMetadata.js +12 -5
- package/dist/server/promptCompletion.js +3 -8
- package/dist/server/registerAnalysisViewTool.js +15 -0
- package/dist/server/registerAndroidTools.js +2 -5
- package/dist/server/registerApplicationTools/compareExportShapes.js +4 -5
- package/dist/server/registerApplicationTools/compareSourceToBundle.js +4 -5
- package/dist/server/registerApplicationTools/compareVersions.js +4 -5
- package/dist/server/registerApplicationTools/coverage.js +1 -2
- package/dist/server/registerApplicationTools/helpers.js +1 -4
- package/dist/server/registerApplicationTools/obligationLedger.js +4 -5
- package/dist/server/registerApplicationTools/projectMobileApplicationGraph.js +3 -4
- package/dist/server/registerApplicationTools/traceFeature.js +4 -5
- package/dist/server/registerApplicationTools/traceSemantics.js +4 -5
- package/dist/server/registerArtifactComparisonTool.js +13 -10
- package/dist/server/registerBinaryDiagnosticsTools.js +2 -5
- package/dist/server/registerBrowserScenarioTool.js +3 -6
- package/dist/server/registerBrowserTools.js +13 -18
- package/dist/server/registerBundleComparisonTool.js +5 -7
- package/dist/server/registerCloseLifecycleTool.js +9 -20
- package/dist/server/registerElectronTools.js +10 -15
- package/dist/server/registerEnhancedTools.js +36 -77
- package/dist/server/registerEvidenceTools.js +3 -6
- package/dist/server/registerEvmTools.js +2 -5
- package/dist/server/registerFirmwareTools.js +2 -5
- package/dist/server/registerFunctionComparisonTool.js +15 -12
- package/dist/server/registerInvestigationTools.js +16 -17
- package/dist/server/registerJavaScriptRecoveryTool.js +2 -5
- package/dist/server/registerJavaScriptRuntimeObservationTools.js +6 -8
- package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +5 -8
- package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +4 -7
- package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +6 -9
- package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +6 -9
- package/dist/server/registerOfficialTools.js +4 -21
- package/dist/server/registerProcessComparisonTool.js +74 -48
- package/dist/server/registerRecordedCrashTools.js +2 -5
- package/dist/server/registerSessionRecordTools.js +19 -24
- package/dist/server/registerSessionStatusTool.js +19 -6
- package/dist/server/registerSessionTools.js +20 -18
- package/dist/server/registerWebModuleTool.js +2 -5
- package/dist/server/registerWebNetworkCaptureTool.js +2 -5
- package/dist/server/registerWebRuntimeTools.js +4 -9
- package/dist/server/registerWebScriptTool.js +2 -5
- package/dist/server/registerWebSourceLocationTool.js +2 -5
- package/dist/server/runDerivedOperation.js +15 -3
- package/dist/server/sessionAvailabilityPolicy.js +0 -1
- package/dist/server/toolRegistrationOptions.js +2 -2
- package/dist/server/toolResult.js +75 -51
- package/dist/server/toolResultEncoding.js +34 -0
- package/dist/windows/WindowsNativeLoader.js +1 -0
- package/dist/windows/WindowsOwnedProcess.js +60 -15
- package/dist/windows/WindowsPrivateRuntime.js +7 -8
- package/install.sh +1 -1
- package/native/windows/README.md +3 -1
- package/native/windows/build/manifest.json +2 -2
- package/native/windows/build/rea-windows-x64.node +0 -0
- package/package.json +44 -30
- package/scripts/electron-active-hook-boundaries.cjs +18 -20
- package/scripts/electron-active-hook.cjs +241 -37
- package/scripts/rea.mjs +3 -6
- package/skills/reverse-engineer-anything/SKILL.md +12 -3
- package/skills/reverse-engineer-anything/references/android-applications.md +6 -3
- package/skills/reverse-engineer-anything/references/evidence-workflows.md +8 -4
- package/skills/reverse-engineer-anything/references/javascript-applications.md +20 -3
- package/skills/reverse-engineer-anything/references/native-and-artifacts.md +9 -0
- package/dist/config.js +0 -1
- package/dist/contracts/browserCaptureToolInputSchema.js +0 -43
- package/dist/contracts/process/processCaptureExample.js +0 -2
- package/dist/contracts/toolOutputSchemas.js +0 -2
- package/dist/ghidra/GhidraDefaults.js +0 -2
- package/dist/main/reload.js +0 -12
- package/dist/main/state.js +0 -3
- package/dist/server/sessionToolPolicies.js +0 -2
|
@@ -12,22 +12,23 @@ import { CLI_COMMANDS } from "../cliCommandNames.js";
|
|
|
12
12
|
import { parseCliJsonInput, resolveCliJsonPaths } from "../cliJsonInput.js";
|
|
13
13
|
import { electronPageInspectionOptions, javascriptApplicationOptions, } from "../cliObservationOptions.js";
|
|
14
14
|
import { runCliJavaScriptApplicationAnalysis } from "./javascriptApplicationAnalysis.js";
|
|
15
|
+
import { withCommandCancellation } from "./commandCancellation.js";
|
|
15
16
|
/** Register CLI equivalents of the Electron MCP tools. */
|
|
16
|
-
export const registerElectronCommands = (cli, logger, resultOutput) => {
|
|
17
|
+
export const registerElectronCommands = (cli, logger, environment, resultOutput) => {
|
|
17
18
|
registerElectronObservationCommands(cli, logger);
|
|
18
|
-
registerElectronActiveCommand(cli, logger);
|
|
19
|
+
registerElectronActiveCommand(cli, logger, environment);
|
|
19
20
|
registerJavaScriptApplicationCommand(cli, logger, resultOutput);
|
|
20
21
|
registerJavaScriptRuntimeReconciliationCommand(cli, logger);
|
|
21
22
|
};
|
|
22
|
-
const registerElectronActiveCommand = (cli, logger) => {
|
|
23
|
+
const registerElectronActiveCommand = (cli, logger, environment) => {
|
|
23
24
|
cli.command(CLI_COMMANDS.captureElectronScenario, {
|
|
24
|
-
description: "Run one
|
|
25
|
+
description: "Run one owned Electron scenario with cancellable actions",
|
|
25
26
|
args: z.object({
|
|
26
27
|
inputJson: z
|
|
27
28
|
.string()
|
|
28
29
|
.describe("Inline JSON or a JSON file matching capture_electron_scenario"),
|
|
29
30
|
}),
|
|
30
|
-
run: ({ args }) => logCliCommand(logger, CLI_COMMANDS.captureElectronScenario, async () => {
|
|
31
|
+
run: ({ args }) => withCommandCancellation((signal) => logCliCommand(logger, CLI_COMMANDS.captureElectronScenario, async () => {
|
|
31
32
|
const input = await parseCliJsonInput(args.inputJson, "capture_electron_scenario");
|
|
32
33
|
if (!input.ok)
|
|
33
34
|
return input.error;
|
|
@@ -39,9 +40,9 @@ const registerElectronActiveCommand = (cli, logger) => {
|
|
|
39
40
|
if (!parsed.success)
|
|
40
41
|
return inputError("capture_electron_scenario", parsed.error.issues, input.value);
|
|
41
42
|
const { createElectronScenarioProvider } = await import("../composition/electronScenario.js");
|
|
42
|
-
const result = await captureElectronScenario(createElectronScenarioProvider(), parsed.data);
|
|
43
|
+
const result = await captureElectronScenario(createElectronScenarioProvider(environment), parsed.data, { signal });
|
|
43
44
|
return result.ok ? result.value : cliError(result.error);
|
|
44
|
-
}),
|
|
45
|
+
})),
|
|
45
46
|
});
|
|
46
47
|
};
|
|
47
48
|
const registerJavaScriptRuntimeReconciliationCommand = (cli, logger) => {
|
|
@@ -113,13 +114,13 @@ const registerJavaScriptApplicationCommand = (cli, logger, resultOutput) => {
|
|
|
113
114
|
path: z.string().describe("ASAR or extracted application path"),
|
|
114
115
|
}),
|
|
115
116
|
options: javascriptApplicationOptions,
|
|
116
|
-
run: ({ args, options, format }) => logCliCommand(logger, CLI_COMMANDS.analyzeJavaScriptApplication, () => runCliJavaScriptApplicationAnalysis({ input_path: args.path, format: options.artifactFormat }, resultOutput === undefined
|
|
117
|
+
run: ({ args, options, format }) => withCommandCancellation((signal) => logCliCommand(logger, CLI_COMMANDS.analyzeJavaScriptApplication, () => runCliJavaScriptApplicationAnalysis({ input_path: args.path, format: options.artifactFormat }, resultOutput === undefined
|
|
117
118
|
? undefined
|
|
118
119
|
: {
|
|
119
120
|
output: resultOutput,
|
|
120
121
|
command: CLI_COMMANDS.analyzeJavaScriptApplication,
|
|
121
122
|
format,
|
|
122
|
-
})),
|
|
123
|
+
}, signal))),
|
|
123
124
|
});
|
|
124
125
|
};
|
|
125
126
|
const electronObservationContext = async () => {
|
|
@@ -53,13 +53,13 @@ export const renderSetupProgress = (event) => {
|
|
|
53
53
|
writeLine(`${symbol} ${event.label}${suffix}`);
|
|
54
54
|
};
|
|
55
55
|
/** Finish an interactive setup journey without exposing the full doctor catalog. */
|
|
56
|
-
export const renderInteractiveSetupResult = (result) => {
|
|
56
|
+
export const renderInteractiveSetupResult = (result, environment = process.env) => {
|
|
57
57
|
if (result.status === "ready") {
|
|
58
58
|
const changedClients = Object.entries(result.clients)
|
|
59
59
|
.filter(([, client]) => client.status === "configured")
|
|
60
60
|
.map(([client]) => clientDisplayNames.get(client) ?? client);
|
|
61
61
|
const readyClients = readyAgentClients(result, changedClients);
|
|
62
|
-
renderReadyCapabilities(result, readyClients);
|
|
62
|
+
renderReadyCapabilities(result, readyClients, environment);
|
|
63
63
|
outro(changedClients.length === 0
|
|
64
64
|
? "REA is ready for local app analysis."
|
|
65
65
|
: `Restart ${changedClients.join(", ")} to load REA.`, promptStreams);
|
|
@@ -68,7 +68,7 @@ export const renderInteractiveSetupResult = (result) => {
|
|
|
68
68
|
if (result.status === "planned" || result.status === "cancelled")
|
|
69
69
|
return;
|
|
70
70
|
writeLine(`! ${result.remediation ?? "Setup needs attention."}`);
|
|
71
|
-
outro(`Run \`${cliInvocation()} doctor\` for the remaining checks.`, promptStreams);
|
|
71
|
+
outro(`Run \`${cliInvocation(environment)} doctor\` for the remaining checks.`, promptStreams);
|
|
72
72
|
};
|
|
73
73
|
const selectSetupActions = async (actions, accessible, context) => {
|
|
74
74
|
const clientStates = context.clientStates.filter(({ client }) => client.format !== "unsupported");
|
|
@@ -167,8 +167,8 @@ const renderKeyboardHelp = (accessible) => {
|
|
|
167
167
|
? "│ Keys: Enter answer · Ctrl-C cancel"
|
|
168
168
|
: "│ Keys: ↑/↓ navigate · Space toggle · Enter confirm · Ctrl-C cancel");
|
|
169
169
|
};
|
|
170
|
-
const cliInvocation = () =>
|
|
171
|
-
const renderReadyCapabilities = (result, readyClients) => {
|
|
170
|
+
const cliInvocation = (environment) => environment.npm_command === "exec" ? "npx rea-agents" : "rea";
|
|
171
|
+
const renderReadyCapabilities = (result, readyClients, environment) => {
|
|
172
172
|
writeLine("◆ What you can do now");
|
|
173
173
|
const providers = readyProviders(result);
|
|
174
174
|
if (providers.length > 0)
|
|
@@ -177,7 +177,7 @@ const renderReadyCapabilities = (result, readyClients) => {
|
|
|
177
177
|
writeLine(`│ Agent access: ${humanList(readyClients)}`);
|
|
178
178
|
if (result.doctor.identity?.skill.state === "aligned")
|
|
179
179
|
writeLine("│ Guided reverse-engineering workflows: installed");
|
|
180
|
-
writeLine(`│ CLI: ${cliInvocation()} ${providers.length > 0 ? "analyze /path/to/app" : "capabilities"}`);
|
|
180
|
+
writeLine(`│ CLI: ${cliInvocation(environment)} ${providers.length > 0 ? "analyze /path/to/app" : "capabilities"}`);
|
|
181
181
|
const firstClient = readyClients[0];
|
|
182
182
|
if (firstClient !== undefined)
|
|
183
183
|
writeLine(`│ Try in ${firstClient}: "Explain how a feature works in /path/to/app and show the evidence."`);
|
|
@@ -2,12 +2,15 @@ import { analyzeJavaScriptApplication } from "../application/javascript/JavaScri
|
|
|
2
2
|
import { createProgressReporter } from "../application/ProgressReporter.js";
|
|
3
3
|
import { projectAnalysisError } from "../domain/analysisErrorProjection.js";
|
|
4
4
|
/** Execute the shared one-shot CLI boundary for static JavaScript analysis. */
|
|
5
|
-
export const runCliJavaScriptApplicationAnalysis = async (input, output) => {
|
|
5
|
+
export const runCliJavaScriptApplicationAnalysis = async (input, output, signal) => {
|
|
6
6
|
const started = performance.now();
|
|
7
7
|
const progress = createProgressReporter(async (update) => {
|
|
8
8
|
process.stderr.write(`${JSON.stringify({ rea_progress: update })}\n`);
|
|
9
9
|
}, { minimumIntervalMs: 0 });
|
|
10
|
-
const result = await analyzeJavaScriptApplication(input, {
|
|
10
|
+
const result = await analyzeJavaScriptApplication(input, {
|
|
11
|
+
progress,
|
|
12
|
+
...(signal === undefined ? {} : { signal }),
|
|
13
|
+
});
|
|
11
14
|
const value = result.ok ? result.value : cliError(result.error);
|
|
12
15
|
if (output !== undefined &&
|
|
13
16
|
(await output.output.write(value, {
|
|
@@ -15,7 +18,8 @@ export const runCliJavaScriptApplicationAnalysis = async (input, output) => {
|
|
|
15
18
|
format: output.format,
|
|
16
19
|
duration: `${Math.round(performance.now() - started)}ms`,
|
|
17
20
|
})))
|
|
18
|
-
|
|
21
|
+
// Keep failures visible to command logging after the stream has handled stdout.
|
|
22
|
+
return result.ok ? undefined : value;
|
|
19
23
|
return value;
|
|
20
24
|
};
|
|
21
25
|
const cliError = (error) => ({
|
package/dist/cli/jsonOutput.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import { bufferedJsonParts, jsonParts } from "../domain/jsonSerialization.js";
|
|
1
2
|
/** Write ordinary JSON without constructing a document-sized string. */
|
|
2
3
|
export const writeJsonOutput = async (value, destination, format = "json") => {
|
|
3
|
-
for (const part of
|
|
4
|
+
for (const part of bufferedJsonParts(documentParts(value, format)))
|
|
4
5
|
await writePart(destination, part);
|
|
5
6
|
};
|
|
6
7
|
const writePart = (destination, part) => new Promise((resolve, reject) => {
|
|
@@ -27,107 +28,11 @@ const writePart = (destination, part) => new Promise((resolve, reject) => {
|
|
|
27
28
|
function* documentParts(value, format) {
|
|
28
29
|
if (format === "jsonl" && Array.isArray(value)) {
|
|
29
30
|
for (const item of value) {
|
|
30
|
-
yield*
|
|
31
|
+
yield* jsonParts(item);
|
|
31
32
|
yield "\n";
|
|
32
33
|
}
|
|
33
34
|
return;
|
|
34
35
|
}
|
|
35
|
-
yield*
|
|
36
|
+
yield* jsonParts(value, format === "json");
|
|
36
37
|
yield "\n";
|
|
37
38
|
}
|
|
38
|
-
function* bufferedParts(parts) {
|
|
39
|
-
let buffer = "";
|
|
40
|
-
for (const part of parts) {
|
|
41
|
-
if (buffer.length + part.length > 64 * 1024 && buffer !== "") {
|
|
42
|
-
yield buffer;
|
|
43
|
-
buffer = "";
|
|
44
|
-
}
|
|
45
|
-
buffer += part;
|
|
46
|
-
}
|
|
47
|
-
if (buffer !== "")
|
|
48
|
-
yield buffer;
|
|
49
|
-
}
|
|
50
|
-
function* encodeString(value) {
|
|
51
|
-
if (value.length <= 8192) {
|
|
52
|
-
yield JSON.stringify(value);
|
|
53
|
-
return;
|
|
54
|
-
}
|
|
55
|
-
yield '"';
|
|
56
|
-
for (let start = 0; start < value.length;) {
|
|
57
|
-
let end = Math.min(start + 8192, value.length);
|
|
58
|
-
const last = value.charCodeAt(end - 1);
|
|
59
|
-
const next = value.charCodeAt(end);
|
|
60
|
-
// Keep a surrogate pair in the same JSON.stringify and UTF-8 write.
|
|
61
|
-
if (end < value.length &&
|
|
62
|
-
last >= 0xd800 &&
|
|
63
|
-
last <= 0xdbff &&
|
|
64
|
-
next >= 0xdc00 &&
|
|
65
|
-
next <= 0xdfff)
|
|
66
|
-
end -= 1;
|
|
67
|
-
yield JSON.stringify(value.slice(start, end)).slice(1, -1);
|
|
68
|
-
start = end;
|
|
69
|
-
}
|
|
70
|
-
yield '"';
|
|
71
|
-
}
|
|
72
|
-
function* encodeValue(value, pretty, depth, ancestors) {
|
|
73
|
-
if (typeof value === "string") {
|
|
74
|
-
yield* encodeString(value);
|
|
75
|
-
return;
|
|
76
|
-
}
|
|
77
|
-
if (value === null || typeof value === "boolean") {
|
|
78
|
-
yield value === null ? "null" : String(value);
|
|
79
|
-
return;
|
|
80
|
-
}
|
|
81
|
-
if (typeof value === "number" && Number.isFinite(value)) {
|
|
82
|
-
yield String(value);
|
|
83
|
-
return;
|
|
84
|
-
}
|
|
85
|
-
if (typeof value !== "object" || value === null)
|
|
86
|
-
throw new TypeError("CLI JSON output requires ordinary JSON values");
|
|
87
|
-
if (ancestors.has(value))
|
|
88
|
-
throw new TypeError("CLI JSON output contains a circular reference");
|
|
89
|
-
if (!Array.isArray(value) &&
|
|
90
|
-
Object.prototype.toString.call(value) !== "[object Object]")
|
|
91
|
-
throw new TypeError("CLI JSON output requires ordinary JSON objects");
|
|
92
|
-
ancestors.add(value);
|
|
93
|
-
try {
|
|
94
|
-
const array = Array.isArray(value);
|
|
95
|
-
const keys = array
|
|
96
|
-
? undefined
|
|
97
|
-
: Object.keys(value).filter((key) => {
|
|
98
|
-
const item = Reflect.get(value, key);
|
|
99
|
-
// Incur's filter can select inherited methods. Match native JSON's
|
|
100
|
-
// omission of fields that have no JSON representation.
|
|
101
|
-
return (item !== undefined &&
|
|
102
|
-
typeof item !== "function" &&
|
|
103
|
-
typeof item !== "symbol");
|
|
104
|
-
});
|
|
105
|
-
const count = array ? value.length : (keys?.length ?? 0);
|
|
106
|
-
yield array ? "[" : "{";
|
|
107
|
-
for (let index = 0; index < count; index += 1) {
|
|
108
|
-
if (index > 0)
|
|
109
|
-
yield ",";
|
|
110
|
-
if (pretty)
|
|
111
|
-
yield `\n${" ".repeat(depth + 1)}`;
|
|
112
|
-
let item;
|
|
113
|
-
if (array) {
|
|
114
|
-
item = value[index];
|
|
115
|
-
}
|
|
116
|
-
else {
|
|
117
|
-
const key = keys?.[index];
|
|
118
|
-
if (key === undefined)
|
|
119
|
-
throw new TypeError("CLI JSON object changed during serialization");
|
|
120
|
-
yield* encodeString(key);
|
|
121
|
-
yield pretty ? ": " : ":";
|
|
122
|
-
item = Reflect.get(value, key);
|
|
123
|
-
}
|
|
124
|
-
yield* encodeValue(item, pretty, depth + 1, ancestors);
|
|
125
|
-
}
|
|
126
|
-
if (pretty && count > 0)
|
|
127
|
-
yield `\n${" ".repeat(depth)}`;
|
|
128
|
-
yield array ? "]" : "}";
|
|
129
|
-
}
|
|
130
|
-
finally {
|
|
131
|
-
ancestors.delete(value);
|
|
132
|
-
}
|
|
133
|
-
}
|
|
@@ -2,22 +2,21 @@ import { z } from "incur";
|
|
|
2
2
|
import { compareManagedMemberPaths } from "../application/managed/ManagedMemberComparisonService.js";
|
|
3
3
|
import { verifyManagedNativeBoundariesEvidence } from "../application/managed/ManagedNativeVerificationService.js";
|
|
4
4
|
import { importManagedReconstructionEvidence } from "../application/managed/ManagedReconstructionService.js";
|
|
5
|
-
import { runProviderAnalysis } from "../composition/directAnalysis.js";
|
|
6
5
|
import { parseCliJsonInput } from "../cliJsonInput.js";
|
|
7
6
|
import { projectAnalysisError } from "../domain/analysisErrorProjection.js";
|
|
8
7
|
import { CLI_COMMANDS } from "../cliCommandNames.js";
|
|
9
8
|
import { logCliCommand } from "../cliLogging.js";
|
|
10
9
|
import { registerProjectManagedApplicationGraph } from "./managedProjectGraphCommand.js";
|
|
11
|
-
export const registerManagedCommands = (cli, logger) => {
|
|
12
|
-
registerInspectManagedArtifact(cli, logger);
|
|
13
|
-
registerInspectManagedMembers(cli, logger);
|
|
14
|
-
registerInspectManagedNativeBoundaries(cli, logger);
|
|
10
|
+
export const registerManagedCommands = (cli, logger, runProviderAnalysis) => {
|
|
11
|
+
registerInspectManagedArtifact(cli, logger, runProviderAnalysis);
|
|
12
|
+
registerInspectManagedMembers(cli, logger, runProviderAnalysis);
|
|
13
|
+
registerInspectManagedNativeBoundaries(cli, logger, runProviderAnalysis);
|
|
15
14
|
registerCompareManagedMembers(cli, logger);
|
|
16
15
|
registerImportManagedReconstruction(cli, logger);
|
|
17
16
|
registerVerifyManagedNativeBoundaries(cli, logger);
|
|
18
17
|
registerProjectManagedApplicationGraph(cli, logger);
|
|
19
18
|
};
|
|
20
|
-
const registerInspectManagedArtifact = (cli, logger) => {
|
|
19
|
+
const registerInspectManagedArtifact = (cli, logger, runProviderAnalysis) => {
|
|
21
20
|
cli.command(CLI_COMMANDS.inspectManagedArtifact, {
|
|
22
21
|
description: "Inspect PE/CLI identity without loading target code",
|
|
23
22
|
args: z.object({
|
|
@@ -26,7 +25,7 @@ const registerInspectManagedArtifact = (cli, logger) => {
|
|
|
26
25
|
run: ({ args }) => logCliCommand(logger, "inspect-managed-artifact", () => runProviderAnalysis(args.path, "inspect_managed_artifact", {}, logger)),
|
|
27
26
|
});
|
|
28
27
|
};
|
|
29
|
-
const registerInspectManagedMembers = (cli, logger) => {
|
|
28
|
+
const registerInspectManagedMembers = (cli, logger, runProviderAnalysis) => {
|
|
30
29
|
cli.command(CLI_COMMANDS.inspectManagedMembers, {
|
|
31
30
|
description: "Inspect PE/CLI metadata members, signatures, and CIL anchors without loading target code",
|
|
32
31
|
args: z.object({
|
|
@@ -35,7 +34,7 @@ const registerInspectManagedMembers = (cli, logger) => {
|
|
|
35
34
|
run: ({ args }) => logCliCommand(logger, "inspect-managed-members", () => runProviderAnalysis(args.path, "inspect_managed_members", {}, logger)),
|
|
36
35
|
});
|
|
37
36
|
};
|
|
38
|
-
const registerInspectManagedNativeBoundaries = (cli, logger) => {
|
|
37
|
+
const registerInspectManagedNativeBoundaries = (cli, logger, runProviderAnalysis) => {
|
|
39
38
|
cli.command(CLI_COMMANDS.inspectManagedNativeBoundaries, {
|
|
40
39
|
description: "Inspect PE/CLI PInvoke and native implementation boundary declarations without loading target code",
|
|
41
40
|
args: z.object({
|
|
@@ -1,16 +1,14 @@
|
|
|
1
1
|
import { z } from "incur";
|
|
2
|
-
import { runProviderAnalysis } from "../composition/directAnalysis.js";
|
|
3
2
|
import { CLI_COMMANDS } from "../cliCommandNames.js";
|
|
4
3
|
import { parseCliJsonInput } from "../cliJsonInput.js";
|
|
5
4
|
import { logCliCommand } from "../cliLogging.js";
|
|
6
|
-
import { AnalysisInputError } from "../domain/analysisErrorCore.js";
|
|
7
5
|
import { projectAnalysisError } from "../domain/analysisErrorProjection.js";
|
|
8
|
-
import {
|
|
6
|
+
import { analysisInputErrorFromIssues } from "../domain/inputIssueProjection.js";
|
|
9
7
|
import { jsonValueSchema } from "../domain/jsonValue.js";
|
|
10
8
|
import { nativeCallObservationInputSchema } from "../domain/native/nativeCallObservation.js";
|
|
11
9
|
const OPERATION = "observe_native_calls";
|
|
12
10
|
/** `observe-native-calls <path> <input-json>`: the MCP input object as JSON. */
|
|
13
|
-
export const registerNativeCallCommands = (cli, logger) => {
|
|
11
|
+
export const registerNativeCallCommands = (cli, logger, runProviderAnalysis) => {
|
|
14
12
|
cli.command(CLI_COMMANDS.observeNativeCalls, {
|
|
15
13
|
description: "Launch a Mach-O under LLDB and record entries into selected functions or Objective-C methods",
|
|
16
14
|
args: z.object({
|
|
@@ -27,7 +25,7 @@ export const registerNativeCallCommands = (cli, logger) => {
|
|
|
27
25
|
if (!parsed.success)
|
|
28
26
|
return {
|
|
29
27
|
error: "Analysis failed",
|
|
30
|
-
...projectAnalysisError(
|
|
28
|
+
...projectAnalysisError(analysisInputErrorFromIssues(OPERATION, parsed.error.issues, input.value)),
|
|
31
29
|
};
|
|
32
30
|
return runProviderAnalysis(args.path, OPERATION, z.record(z.string(), jsonValueSchema).parse(parsed.data), logger);
|
|
33
31
|
}),
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { Cli, z } from "incur";
|
|
2
|
+
const INPUT_GROUPS = ["args", "env", "options"];
|
|
3
|
+
// Incur types its router key without vars, env, or globals; accept any CLI.
|
|
4
|
+
const registeredCommands = Cli.toCommands;
|
|
5
|
+
/**
|
|
6
|
+
* Advertise parser-filled defaults as omittable CLI inputs.
|
|
7
|
+
*
|
|
8
|
+
* Incur derives `--schema`, the `--llms` manifests, and help synopses from
|
|
9
|
+
* Zod's output view, where a defaulted field always has a value and is
|
|
10
|
+
* therefore listed as required. Callers may omit such a field, so each one is
|
|
11
|
+
* wrapped as optional while its default, constraints, metadata, and parsed
|
|
12
|
+
* value stay unchanged.
|
|
13
|
+
*/
|
|
14
|
+
export const presentOmittableDefaults = (cli) => {
|
|
15
|
+
const commands = registeredCommands.get(cli);
|
|
16
|
+
if (commands !== undefined)
|
|
17
|
+
presentCommands(commands);
|
|
18
|
+
};
|
|
19
|
+
const presentCommands = (commands) => {
|
|
20
|
+
for (const entry of commands.values()) {
|
|
21
|
+
if ("_group" in entry) {
|
|
22
|
+
presentCommands(entry.commands);
|
|
23
|
+
if (entry.root !== undefined)
|
|
24
|
+
presentInputs(entry.root);
|
|
25
|
+
}
|
|
26
|
+
else if (!("_alias" in entry) && !("_fetch" in entry))
|
|
27
|
+
presentInputs(entry);
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
const presentInputs = (command) => {
|
|
31
|
+
for (const group of INPUT_GROUPS) {
|
|
32
|
+
const schema = command[group];
|
|
33
|
+
if (schema instanceof z.ZodObject)
|
|
34
|
+
command[group] = withOmittableDefaults(schema);
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
const withOmittableDefaults = (schema) => {
|
|
38
|
+
const omittable = Object.entries(schema.shape).filter(([, field]) => fillsOmission(field));
|
|
39
|
+
if (omittable.length === 0)
|
|
40
|
+
return schema;
|
|
41
|
+
return schema.safeExtend(Object.fromEntries(omittable.map(([key, field]) => [key, optionalWithMetadata(field)])));
|
|
42
|
+
};
|
|
43
|
+
/** Zod accepts an omitted value (`optin`) but always produces one (`optout`). */
|
|
44
|
+
const fillsOmission = (field) => field._zod.optin === "optional" && field._zod.optout === undefined;
|
|
45
|
+
const optionalWithMetadata = (field) => {
|
|
46
|
+
const metadata = field.meta();
|
|
47
|
+
return metadata === undefined
|
|
48
|
+
? field.optional()
|
|
49
|
+
: field.optional().meta(metadata);
|
|
50
|
+
};
|
|
@@ -2,12 +2,13 @@ import { Cli, z } from "incur";
|
|
|
2
2
|
import { captureProcessScenarioFile, compareProcessEvidenceFiles, isProcessCliFailure, } from "../application/process/ProcessCli.js";
|
|
3
3
|
import { logCliCommand } from "../cliLogging.js";
|
|
4
4
|
import { CLI_COMMANDS } from "../cliCommandNames.js";
|
|
5
|
+
import { withCommandCancellation } from "./commandCancellation.js";
|
|
5
6
|
/** Register direct process capture and comparison commands. */
|
|
6
|
-
export const registerProcessCommands = (cli, logger, environment
|
|
7
|
+
export const registerProcessCommands = (cli, logger, environment) => {
|
|
7
8
|
cli.command(CLI_COMMANDS.captureProcess, {
|
|
8
9
|
description: "Capture one caller-selected process scenario",
|
|
9
10
|
args: z.object({ scenario: z.string().describe("Scenario JSON path") }),
|
|
10
|
-
run: ({ args }) => logCliCommand(logger, "capture-process", () => captureProcessScenarioFile(args.scenario, environment), isProcessCliFailure),
|
|
11
|
+
run: ({ args }) => withCommandCancellation((signal) => logCliCommand(logger, "capture-process", () => captureProcessScenarioFile(args.scenario, environment, signal), isProcessCliFailure)),
|
|
11
12
|
});
|
|
12
13
|
cli.command(CLI_COMMANDS.compareProcessCaptures, {
|
|
13
14
|
description: "Compare two process capture Evidence JSON files",
|
|
@@ -3,7 +3,8 @@ import { DOCTOR_PROVIDER_IDS, runDoctor, } from "../application/Doctor.js";
|
|
|
3
3
|
import { isSetupFailure, } from "../application/SetupTypes.js";
|
|
4
4
|
import { runSetup } from "../application/Setup.js";
|
|
5
5
|
import { systemSetupHost } from "../application/SetupHost.js";
|
|
6
|
-
import { isUninstallFailure, runUninstall } from "../application/Uninstall.js";
|
|
6
|
+
import { isUninstallFailure, runUninstall, systemUninstallHost, } from "../application/Uninstall.js";
|
|
7
|
+
import { homeDirectoryFromEnvironment } from "../config/homeDirectory.js";
|
|
7
8
|
import { isUpdateFailure, runUpdate } from "../application/Update.js";
|
|
8
9
|
import { systemUpdateHost } from "../application/UpdateRuntime.js";
|
|
9
10
|
import { confirmInteractiveSetup, renderInteractiveSetupResult, renderSetupProgress, } from "./interactiveSetup.js";
|
|
@@ -17,12 +18,12 @@ const supportedClientSchema = z
|
|
|
17
18
|
.string()
|
|
18
19
|
.refine((candidate) => supportedClientIds.some((name) => name === candidate), "Unsupported agent integration");
|
|
19
20
|
/** Register setup, doctor, uninstall, and update CLI commands. */
|
|
20
|
-
export const registerSetupCommands = (cli, logger) => {
|
|
21
|
-
registerSetupCommand(cli, logger);
|
|
22
|
-
registerDoctorCommand(cli, logger);
|
|
23
|
-
registerMaintenanceCommands(cli, logger);
|
|
21
|
+
export const registerSetupCommands = (cli, logger, environment) => {
|
|
22
|
+
registerSetupCommand(cli, logger, environment);
|
|
23
|
+
registerDoctorCommand(cli, logger, environment);
|
|
24
|
+
registerMaintenanceCommands(cli, logger, environment);
|
|
24
25
|
};
|
|
25
|
-
const registerSetupCommand = (cli, logger) => {
|
|
26
|
+
const registerSetupCommand = (cli, logger, environment) => {
|
|
26
27
|
cli.command(CLI_COMMANDS.setup, {
|
|
27
28
|
description: "Configure agent integrations and optional analysis providers",
|
|
28
29
|
outputPolicy: "agent-only",
|
|
@@ -57,10 +58,10 @@ const registerSetupCommand = (cli, logger) => {
|
|
|
57
58
|
.describe("Use sequential accessible setup prompts"),
|
|
58
59
|
}),
|
|
59
60
|
alias: { yes: "y" },
|
|
60
|
-
run: ({ options, formatExplicit }) => logCliCommand(logger, CLI_COMMANDS.setup, () => runSetupCommand({ options, formatExplicit }), isSetupFailure),
|
|
61
|
+
run: ({ options, formatExplicit }) => logCliCommand(logger, CLI_COMMANDS.setup, () => runSetupCommand({ options, formatExplicit }, environment), isSetupFailure),
|
|
61
62
|
});
|
|
62
63
|
};
|
|
63
|
-
const registerDoctorCommand = (cli, logger) => {
|
|
64
|
+
const registerDoctorCommand = (cli, logger, environment) => {
|
|
64
65
|
cli.command(CLI_COMMANDS.doctor, {
|
|
65
66
|
description: "Check whether REA is ready",
|
|
66
67
|
options: z.object({
|
|
@@ -78,10 +79,10 @@ const registerDoctorCommand = (cli, logger) => {
|
|
|
78
79
|
.optional()
|
|
79
80
|
.describe("Require the installed REA skill identity to be aligned"),
|
|
80
81
|
}),
|
|
81
|
-
run: ({ options }) => logCliCommand(logger, "doctor", () => runDoctor(options.target, createSystemDoctorHost(), doctorScope(options))),
|
|
82
|
+
run: ({ options }) => logCliCommand(logger, "doctor", () => runDoctor(options.target, createSystemDoctorHost(environment), doctorScope(options))),
|
|
82
83
|
});
|
|
83
84
|
};
|
|
84
|
-
const registerMaintenanceCommands = (cli, logger) => {
|
|
85
|
+
const registerMaintenanceCommands = (cli, logger, environment) => {
|
|
85
86
|
cli.command(CLI_COMMANDS.uninstall, {
|
|
86
87
|
description: "Remove REA-owned agent configuration and skill files",
|
|
87
88
|
options: z.object({
|
|
@@ -91,22 +92,22 @@ const registerMaintenanceCommands = (cli, logger) => {
|
|
|
91
92
|
.describe("Also remove REA caches and state"),
|
|
92
93
|
}),
|
|
93
94
|
alias: { purgeData: "purge-data" },
|
|
94
|
-
run: ({ options }) => logCliCommand(logger, "uninstall", () => runUninstall(options.purgeData), isUninstallFailure),
|
|
95
|
+
run: ({ options }) => logCliCommand(logger, "uninstall", () => runUninstall(options.purgeData, systemUninstallHost(homeDirectoryFromEnvironment(environment, process.platform), undefined, environment)), isUninstallFailure),
|
|
95
96
|
});
|
|
96
97
|
cli.command(CLI_COMMANDS.update, {
|
|
97
98
|
description: "Update this REA installation and verify the installed release",
|
|
98
|
-
run: ({ formatExplicit }) => logCliCommand(logger, CLI_COMMANDS.update, () => runUpdate(PRODUCT_IDENTITY.packageVersion, systemUpdateHost(), formatExplicit ? "structured" : "human"), isUpdateFailure),
|
|
99
|
+
run: ({ formatExplicit }) => logCliCommand(logger, CLI_COMMANDS.update, () => runUpdate(PRODUCT_IDENTITY.packageVersion, systemUpdateHost(undefined, undefined, environment), formatExplicit ? "structured" : "human"), isUpdateFailure),
|
|
99
100
|
});
|
|
100
101
|
};
|
|
101
|
-
const runSetupCommand = async (input) => {
|
|
102
|
+
const runSetupCommand = async (input, environment) => {
|
|
102
103
|
const { options } = input;
|
|
103
104
|
const interactive = setupIsInteractive(options, input.formatExplicit);
|
|
104
105
|
const hasExplicitScope = setupHasExplicitScope(options);
|
|
105
|
-
const result = await runSetup(setupRunOptions(input, interactive, hasExplicitScope), systemSetupHost(createSystemDoctorHost()), interactive
|
|
106
|
+
const result = await runSetup(setupRunOptions(input, interactive, hasExplicitScope), systemSetupHost(createSystemDoctorHost(environment), environment), interactive
|
|
106
107
|
? (actions, context) => confirmInteractiveSetup(actions, options.accessible, context)
|
|
107
108
|
: undefined);
|
|
108
109
|
if (interactive)
|
|
109
|
-
renderInteractiveSetupResult(result);
|
|
110
|
+
renderInteractiveSetupResult(result, environment);
|
|
110
111
|
return result;
|
|
111
112
|
};
|
|
112
113
|
const setupRunOptions = (input, interactive, hasExplicitScope) => {
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { z } from "incur";
|
|
2
|
-
import { runCapabilityStatus, runProviderAnalysis, runProviderStatus, } from "../composition/directAnalysis.js";
|
|
3
2
|
import { importReferenceSource } from "../application/ReferenceSourceImport.js";
|
|
4
3
|
import { projectReferenceSourceImportError } from "../application/ReferenceSourceImportTypes.js";
|
|
5
|
-
import { parseConfig } from "../config.js";
|
|
4
|
+
import { parseConfig } from "../config/parseConfig.js";
|
|
6
5
|
import { projectAnalysisError } from "../domain/analysisErrorProjection.js";
|
|
7
6
|
import { AnalysisInputError } from "../domain/analysisErrorCore.js";
|
|
8
7
|
import { projectInputIssues } from "../domain/inputIssueProjection.js";
|
|
@@ -14,10 +13,11 @@ import { CLI_COMMANDS } from "../cliCommandNames.js";
|
|
|
14
13
|
import { swiftSymbolsSchema } from "../contracts/native/nativeToolContracts.js";
|
|
15
14
|
import { isReferenceSourceImportCliFailure } from "./referenceSourceImportStatus.js";
|
|
16
15
|
import { registerNativeCallCommands } from "./nativeCallCommands.js";
|
|
17
|
-
export const registerUtilityCommands = (cli, logger, environment
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
16
|
+
export const registerUtilityCommands = (cli, logger, environment, analysis) => {
|
|
17
|
+
const { runProviderAnalysis } = analysis;
|
|
18
|
+
registerCapabilityCommands(cli, logger, analysis);
|
|
19
|
+
registerNativeCommands(cli, logger, runProviderAnalysis);
|
|
20
|
+
registerNativeCallCommands(cli, logger, runProviderAnalysis);
|
|
21
21
|
for (const [command, operation] of [
|
|
22
22
|
[CLI_COMMANDS.observeNativeUi, "observe_native_ui"],
|
|
23
23
|
[CLI_COMMANDS.captureNativeUiScenario, "capture_native_ui_scenario"],
|
|
@@ -97,7 +97,7 @@ const invalidNativeUiScenarioInput = (operation, issues) => ({
|
|
|
97
97
|
error: "Application workflow failed",
|
|
98
98
|
...projectAnalysisError(new AnalysisInputError(operation, undefined, issues)),
|
|
99
99
|
});
|
|
100
|
-
const registerCapabilityCommands = (cli, logger) => {
|
|
100
|
+
const registerCapabilityCommands = (cli, logger, { runProviderStatus, runCapabilityStatus, }) => {
|
|
101
101
|
for (const command of [
|
|
102
102
|
CLI_COMMANDS.capabilities,
|
|
103
103
|
CLI_COMMANDS.providers,
|
|
@@ -112,7 +112,7 @@ const registerCapabilityCommands = (cli, logger) => {
|
|
|
112
112
|
});
|
|
113
113
|
}
|
|
114
114
|
};
|
|
115
|
-
const registerNativeCommands = (cli, logger) => {
|
|
115
|
+
const registerNativeCommands = (cli, logger, runProviderAnalysis) => {
|
|
116
116
|
for (const [command, tool] of [
|
|
117
117
|
[CLI_COMMANDS.inspectMacho, "inspect_macho"],
|
|
118
118
|
[CLI_COMMANDS.inspectSignature, "inspect_signature"],
|
|
@@ -147,7 +147,7 @@ const registerNativeCommands = (cli, logger) => {
|
|
|
147
147
|
run: ({ args }) => logCliCommand(logger, "demangle-swift", () => runProviderAnalysis(args.path, "demangle_swift", { symbols: args.symbols }, logger)),
|
|
148
148
|
});
|
|
149
149
|
};
|
|
150
|
-
const registerReferenceSourceCommand = (cli, logger, environment
|
|
150
|
+
const registerReferenceSourceCommand = (cli, logger, environment) => {
|
|
151
151
|
cli.command(CLI_COMMANDS.importReferenceSource, {
|
|
152
152
|
description: "Import a source tree as historical reference only",
|
|
153
153
|
args: z.object({
|
|
@@ -25,15 +25,15 @@ export const registerWebRuntimeCommands = (cli, logger) => {
|
|
|
25
25
|
...browserScopeOptions,
|
|
26
26
|
observationMs: observationDuration(10_000, 1),
|
|
27
27
|
}),
|
|
28
|
-
run: ({ args, options }) => logCliCommand(logger, "observe-web-execution", async () => {
|
|
29
|
-
const result = await
|
|
28
|
+
run: ({ args, options }) => withCommandCancellation((signal) => logCliCommand(logger, "observe-web-execution", async () => {
|
|
29
|
+
const result = await createWebRuntimeService().observe({
|
|
30
30
|
cdp_endpoint: args.endpoint,
|
|
31
31
|
target_id: args.targetId,
|
|
32
32
|
allowed_origins: options.allowedOrigins,
|
|
33
33
|
observation_ms: options.observationMs,
|
|
34
|
-
}, { progress: runtimeProgress, signal })
|
|
34
|
+
}, { progress: runtimeProgress, signal });
|
|
35
35
|
return result.ok ? result.value : browserCliError(result.error);
|
|
36
|
-
}),
|
|
36
|
+
})),
|
|
37
37
|
});
|
|
38
38
|
cli.command(CLI_COMMANDS.inspectWebEventListeners, {
|
|
39
39
|
description: "Inspect native listener source locations on the first main-document CSS match",
|
|
@@ -47,14 +47,14 @@ export const registerWebRuntimeCommands = (cli, logger) => {
|
|
|
47
47
|
.describe("Native CSS selector; inspect the first main-document match"),
|
|
48
48
|
}),
|
|
49
49
|
options: z.object({ ...browserScopeOptions }),
|
|
50
|
-
run: ({ args, options }) => logCliCommand(logger, "inspect-web-event-listeners", async () => {
|
|
51
|
-
const result = await
|
|
50
|
+
run: ({ args, options }) => withCommandCancellation((signal) => logCliCommand(logger, "inspect-web-event-listeners", async () => {
|
|
51
|
+
const result = await createWebRuntimeService().inspect({
|
|
52
52
|
cdp_endpoint: args.endpoint,
|
|
53
53
|
target_id: args.targetId,
|
|
54
54
|
selector: args.selector,
|
|
55
55
|
allowed_origins: options.allowedOrigins,
|
|
56
|
-
}, { signal })
|
|
56
|
+
}, { signal });
|
|
57
57
|
return result.ok ? result.value : browserCliError(result.error);
|
|
58
|
-
}),
|
|
58
|
+
})),
|
|
59
59
|
});
|
|
60
60
|
};
|
package/dist/cli.js
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
|
+
import { snapshotEnvironment } from "./process/snapshotEnvironment.js";
|
|
2
|
+
import { createDirectAnalysis } from "./composition/directAnalysis.js";
|
|
1
3
|
import { registerEvmCommands } from "./cli/evmCommands.js";
|
|
4
|
+
import { registerAnalysisViewCommands } from "./cli/analysisViewCommands.js";
|
|
2
5
|
import { registerBinaryDiagnosticsCommands } from "./cli/binaryDiagnosticsCommands.js";
|
|
3
6
|
import { Cli } from "incur";
|
|
4
7
|
import { createLogger, parseLogLevel } from "./logger.js";
|
|
5
8
|
import { PRODUCT_IDENTITY } from "./identity.js";
|
|
9
|
+
import { npxRegistrationCommand } from "./application/ClientRegistrationIdentity.js";
|
|
6
10
|
import { registerSetupCommands } from "./cli/setupCommands.js";
|
|
7
11
|
import { registerCoreAnalysisCommands } from "./cli/coreAnalysisCommands.js";
|
|
8
12
|
import { registerUtilityCommands } from "./cli/utilityCommands.js";
|
|
@@ -24,12 +28,15 @@ import { registerBrowserScenarioCommands } from "./cliBrowserScenarioCommands.js
|
|
|
24
28
|
import { registerElectronCommands } from "./cli/electronCommands.js";
|
|
25
29
|
import { registerJavaScriptRuntimeObservationCommands } from "./cliJavaScriptRuntimeCommands.js";
|
|
26
30
|
import { registerApplicationCommands } from "./cli/applicationCommands.js";
|
|
31
|
+
import { presentOmittableDefaults } from "./cli/omittableDefaults.js";
|
|
27
32
|
/**
|
|
28
33
|
* Build the one-shot Incur CLI without starting Hopper at import time.
|
|
29
34
|
* Analysis commands acquire and close their own sessions; bare `mcp` and
|
|
30
35
|
* `--mcp` are intercepted by the executable dispatcher before this module loads.
|
|
31
36
|
*/
|
|
32
|
-
export const createCli = (
|
|
37
|
+
export const createCli = (selectedEnvironment = process.env, resultOutput) => {
|
|
38
|
+
const environment = snapshotEnvironment(selectedEnvironment);
|
|
39
|
+
const analysis = createDirectAnalysis(environment);
|
|
33
40
|
const logger = createLogger("cli", environment.REA_LOG_LEVEL === undefined
|
|
34
41
|
? "silent"
|
|
35
42
|
: parseLogLevel(environment.REA_LOG_LEVEL));
|
|
@@ -37,20 +44,21 @@ export const createCli = (environment = process.env, resultOutput) => {
|
|
|
37
44
|
version: PRODUCT_IDENTITY.packageVersion,
|
|
38
45
|
description: "Reverse engineer anything from your terminal or agent.",
|
|
39
46
|
mcp: {
|
|
40
|
-
command:
|
|
47
|
+
command: npxRegistrationCommand().join(" "),
|
|
41
48
|
instructions: "Ask what software, artifact, protocol, or behavior the user wants to understand, then choose the available investigation capabilities that can produce evidence.",
|
|
42
49
|
},
|
|
43
50
|
sync: false,
|
|
44
51
|
});
|
|
45
|
-
registerSetupCommands(cli, logger);
|
|
46
|
-
registerCoreAnalysisCommands(cli, logger, resultOutput);
|
|
47
|
-
registerUtilityCommands(cli, logger, environment);
|
|
52
|
+
registerSetupCommands(cli, logger, environment);
|
|
53
|
+
registerCoreAnalysisCommands(cli, logger, analysis.runDirectAnalysis, resultOutput);
|
|
54
|
+
registerUtilityCommands(cli, logger, environment, analysis);
|
|
48
55
|
registerEvmCommands(cli, logger, environment);
|
|
49
|
-
registerArtifactCommands(cli, logger);
|
|
50
|
-
registerManagedCommands(cli, logger);
|
|
56
|
+
registerArtifactCommands(cli, logger, analysis.runProviderAnalysis);
|
|
57
|
+
registerManagedCommands(cli, logger, analysis.runProviderAnalysis);
|
|
51
58
|
registerAndroidCommands(cli, logger, environment);
|
|
52
59
|
registerFirmwareCommands(cli, logger, environment);
|
|
53
60
|
registerBinaryDiagnosticsCommands(cli, logger, environment);
|
|
61
|
+
registerAnalysisViewCommands(cli, logger);
|
|
54
62
|
registerEvidenceCommands(cli, logger);
|
|
55
63
|
registerProcessCommands(cli, logger, environment);
|
|
56
64
|
registerBrowserCommands(cli, logger);
|
|
@@ -61,9 +69,10 @@ export const createCli = (environment = process.env, resultOutput) => {
|
|
|
61
69
|
registerWebNetworkCaptureCommands(cli, logger, environment);
|
|
62
70
|
registerJavaScriptRecoveryCommands(cli, logger, environment);
|
|
63
71
|
registerAdvancedBrowserCommands(cli, logger);
|
|
64
|
-
registerBrowserScenarioCommands(cli, logger);
|
|
65
|
-
registerElectronCommands(cli, logger, resultOutput);
|
|
72
|
+
registerBrowserScenarioCommands(cli, logger, environment);
|
|
73
|
+
registerElectronCommands(cli, logger, environment, resultOutput);
|
|
66
74
|
registerJavaScriptRuntimeObservationCommands(cli, logger);
|
|
67
75
|
registerApplicationCommands(cli, logger);
|
|
76
|
+
presentOmittableDefaults(cli);
|
|
68
77
|
return cli;
|
|
69
78
|
};
|