rea-agents 6.1.0 → 6.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -24
- package/bridge/ghidra/ReaGhidraBridge.java +32 -4
- package/bridge/hopper_bridge.py +8 -1
- package/dist/android/JadxConfiguration.js +87 -7
- package/dist/android/JadxMcpTransport.js +14 -2
- package/dist/android/JadxProvider.js +64 -36
- package/dist/android/JadxSession.js +51 -9
- package/dist/application/BinaryTargetResolver.js +68 -20
- package/dist/application/BrowserEvidence.js +3 -8
- package/dist/application/BrowserScenarioEvidence.js +4 -20
- package/dist/application/CapabilityInventory.js +43 -9
- package/dist/application/ClientConfigurationDocument.js +97 -25
- package/dist/application/ClientRegistrationStatus.js +19 -6
- package/dist/application/DirectAnalysis.js +41 -20
- package/dist/application/DirectAnalysisCleanup.js +71 -0
- package/dist/application/DirectAnalysisStatus.js +3 -7
- package/dist/application/Doctor.js +40 -53
- package/dist/application/DoctorDiagnostics.js +2 -3
- package/dist/application/EnhancedTools.js +51 -6
- package/dist/application/EvidenceBundleFiles.js +8 -3
- package/dist/application/InvestigationProviders.js +13 -5
- package/dist/application/JsonFiles.js +56 -23
- package/dist/application/LinuxHopper.js +11 -7
- package/dist/application/MacHopper.js +15 -18
- package/dist/application/RealHopperAssertions.js +0 -11
- package/dist/application/ReconstructionObligationCandidates.js +10 -3
- package/dist/application/ReconstructionObligationLedgerProjection.js +3 -1
- package/dist/application/ReferenceSourceImportEntries.js +1 -1
- package/dist/application/RegularFileRead.js +17 -0
- package/dist/application/Setup.js +26 -23
- package/dist/application/SetupClientConfiguration.js +18 -7
- package/dist/application/SetupHost.js +20 -29
- package/dist/application/SetupPlan.js +24 -20
- package/dist/application/SetupSkill.js +57 -8
- package/dist/application/SupportedClients.js +43 -0
- package/dist/application/Uninstall.js +98 -30
- package/dist/application/UpdateMaintenance.js +13 -7
- package/dist/application/UpdateRuntime.js +12 -12
- package/dist/application/Utf8JsonInput.js +64 -0
- package/dist/application/WebScriptExportService.js +38 -5
- package/dist/application/WorkflowEvidence.js +25 -2
- package/dist/application/XrefsAddressResolution.js +45 -0
- package/dist/application/analysisView/AnalysisViewService.js +76 -0
- package/dist/application/android/AndroidAnalysisService.js +1 -1
- package/dist/application/binary/AnalysisClientCleanup.js +30 -5
- package/dist/application/binary/AnalysisProviderEvaluation.js +1 -2
- package/dist/application/binary/AnalysisProviderRegistry.js +2 -6
- package/dist/application/binary/AnalysisSnapshotCache.js +13 -10
- package/dist/application/binary/BinarySession.js +86 -29
- package/dist/application/binary/BinarySessionComposition.js +1 -3
- package/dist/application/binary/BinarySessionExecution.js +3 -5
- package/dist/application/binary/BinarySessionOpen.js +10 -2
- package/dist/application/binary/BinarySessionRecords.js +1 -1
- package/dist/application/binary/BinarySessionStatus.js +1 -6
- package/dist/application/binary/CompositeProvider.js +4 -18
- package/dist/application/binary/LazyAnalysisProvider.js +5 -5
- package/dist/application/binary/SessionProviderRouter.js +27 -135
- package/dist/application/homebrew.js +48 -0
- package/dist/application/javascript/ElectronActiveEvidence.js +10 -14
- package/dist/application/javascript/ElectronBoundaryAnalysis.js +2 -2
- package/dist/application/javascript/ElectronBoundaryGraphNative.js +5 -1
- package/dist/application/javascript/JavaScriptApplicationEvidence.js +3 -6
- package/dist/application/javascript/JavaScriptApplicationEvidenceGraph.js +107 -46
- package/dist/application/javascript/JavaScriptApplicationService.js +7 -1
- package/dist/application/javascript/JavaScriptApplicationWorkflowService.js +59 -45
- package/dist/application/javascript/JavaScriptArtifactAnalysis.js +5 -9
- package/dist/application/javascript/JavaScriptArtifactGraphBuilder.js +19 -27
- package/dist/application/javascript/JavaScriptArtifactGraphBundlers.js +11 -3
- package/dist/application/javascript/JavaScriptArtifactGraphContext.js +9 -0
- package/dist/application/javascript/JavaScriptArtifactGraphDocuments.js +8 -5
- package/dist/application/javascript/JavaScriptArtifactGraphFindings.js +46 -29
- package/dist/application/javascript/JavaScriptArtifactGraphStructure.js +0 -1
- package/dist/application/javascript/JavaScriptArtifactPathResolution.js +86 -27
- package/dist/application/javascript/JavaScriptArtifactReconstruction.js +52 -9
- package/dist/application/javascript/JavaScriptArtifactReconstructionInput.js +1 -0
- package/dist/application/javascript/JavaScriptJsonModules.js +2 -2
- package/dist/application/javascript/JavaScriptModuleRelationships.js +6 -18
- package/dist/application/javascript/JavaScriptRuntimeObservationService.js +3 -3
- package/dist/application/javascript/JavaScriptRuntimeReconciliationService.js +11 -27
- package/dist/application/javascript/JavaScriptSemanticGraphAsyncProjection.js +4 -5
- package/dist/application/javascript/JavaScriptSemanticGraphBuilder.js +8 -6
- package/dist/application/javascript/JavaScriptSemanticGraphChildProcessProjection.js +2 -3
- package/dist/application/javascript/JavaScriptSemanticGraphConstruction.js +7 -5
- package/dist/application/javascript/JavaScriptSemanticGraphDataProjection.js +3 -4
- package/dist/application/javascript/JavaScriptSemanticGraphEvidence.js +1 -1
- package/dist/application/javascript/JavaScriptSemanticGraphFingerprintProjection.js +2 -2
- package/dist/application/javascript/JavaScriptSemanticGraphFlowProjection.js +3 -7
- package/dist/application/javascript/JavaScriptSemanticGraphObjectProjection.js +76 -47
- package/dist/application/javascript/JavaScriptSemanticGraphProjection.js +4 -4
- package/dist/application/javascript/JavaScriptSemanticGraphResourceProjection.js +3 -4
- package/dist/application/javascript/JavaScriptSemanticGraphValueProjection.js +51 -25
- package/dist/application/javascript/JavaScriptSemanticTraceService.js +15 -10
- package/dist/application/managed/ManagedMemberComparisonService.js +2 -1
- package/dist/application/managed/ManagedNativeVerificationService.js +2 -1
- package/dist/application/native/NativeCallRoutes.js +2 -4
- package/dist/application/process/ProcessCli.js +11 -11
- package/dist/application/process/ProcessEvidence.js +0 -1
- package/dist/artifacts/ArtifactProvider.js +53 -30
- package/dist/artifacts/ArtifactProviderMetadata.js +1 -4
- package/dist/artifacts/ArtifactReader.js +31 -0
- package/dist/artifacts/AsarArtifactReader.js +81 -17
- package/dist/artifacts/DirectoryArtifactReader.js +2 -1
- package/dist/artifacts/MachOSliceArtifactReader.js +9 -2
- package/dist/artifacts/NativeDmgArtifactReader.js +207 -77
- package/dist/artifacts/NativeDmgOwnership.js +109 -0
- package/dist/artifacts/SafeOutputTree.js +16 -2
- package/dist/artifacts/ZipArtifactReader.js +11 -4
- package/dist/artifacts/apple/AppleAssetCatalogAnalysis.js +4 -2
- package/dist/artifacts/apple/DylibResolutionReader.js +17 -7
- package/dist/artifacts/apple/KeyedArchiveReader.js +68 -42
- package/dist/artifacts/apple/MachoLoadCommandReader.js +36 -6
- package/dist/artifacts/extraction/ArtifactExtraction.js +104 -29
- package/dist/artifacts/inventory/ArtifactGraphConstruction.js +71 -66
- package/dist/artifacts/inventory/ArtifactInventory.js +0 -1
- package/dist/artifacts/inventory/classify.js +33 -14
- package/dist/artifacts/inventory/hashStableRootArtifact.js +37 -0
- package/dist/artifacts/inventory/reader.js +3 -3
- package/dist/artifacts/inventory/scanCanonical.js +64 -34
- package/dist/artifacts/inventory/scanReader.js +12 -20
- package/dist/artifacts/javascript/JavaScriptArtifactFiles.js +65 -27
- package/dist/browser/BrowserScenarioPartialObservation.js +106 -0
- package/dist/browser/CdpBrowserProvider.js +6 -6
- package/dist/browser/CdpCaptureEventHandlers.js +2 -4
- package/dist/browser/CdpCaptureEvents.js +0 -1
- package/dist/browser/CdpCaptureStorageFingerprints.js +3 -3
- package/dist/browser/CdpCaptureValues.js +20 -0
- package/dist/browser/CdpElectronInspection.js +2 -2
- package/dist/browser/CdpElectronProvider.js +4 -5
- package/dist/browser/CdpElectronScriptEvents.js +2 -8
- package/dist/browser/CdpElectronScripts.js +4 -5
- package/dist/browser/CdpPageCaptureScripts.js +2 -3
- package/dist/browser/CdpSafeMetadata.js +10 -10
- package/dist/browser/CdpWebMcpDiscovery.js +16 -13
- package/dist/browser/PlaywrightBrowserScenarioProvider.js +64 -49
- package/dist/browser/PlaywrightElectronActiveActions.js +2 -56
- package/dist/browser/PlaywrightElectronActiveProvider.js +10 -6
- package/dist/browser/PlaywrightScenarioArtifacts.js +1 -1
- package/dist/browser/PlaywrightScenarioBrowser.js +269 -66
- package/dist/browser/PlaywrightScenarioEvents.js +1 -1
- package/dist/browser/PlaywrightScenarioSession.js +41 -32
- package/dist/browser/WebSourceMapFetcher.js +32 -6
- package/dist/browser/assets/ScenarioScriptCapture.js +8 -12
- package/dist/browser/assets/ScriptCaptureAdapters.js +1 -1
- package/dist/browser/history/CaptureFailures.js +6 -2
- package/dist/browser/history/MitmproxyCaptureAdapter.js +4 -2
- package/dist/catalogIdentity.js +0 -1
- package/dist/cli/analysisViewCommands.js +36 -0
- package/dist/cli/artifactCommands.js +11 -12
- package/dist/cli/coreAnalysisCommands.js +3 -3
- package/dist/cli/coreBinaryCommands.js +37 -28
- package/dist/cli/coreNativeCommands.js +9 -10
- package/dist/cli/electronCommands.js +12 -13
- package/dist/cli/interactiveSetup.js +6 -6
- package/dist/cli/javascriptApplicationAnalysis.js +2 -12
- package/dist/cli/jsonOutput.js +3 -2
- package/dist/cli/managedCommands.js +7 -8
- package/dist/cli/nativeCallCommands.js +1 -2
- package/dist/cli/omittableDefaults.js +50 -0
- package/dist/cli/processCommands.js +3 -2
- package/dist/cli/setupCommands.js +16 -15
- package/dist/cli/streamedJsonOutput.js +83 -4
- package/dist/cli/utilityCommands.js +10 -12
- package/dist/cli.js +19 -8
- package/dist/cliBrowserScenarioCommands.js +2 -2
- package/dist/cliCommandNames.js +1 -0
- package/dist/cliJsonFile.js +179 -0
- package/dist/cliJsonInput.js +60 -33
- package/dist/cliObservationOptions.js +4 -0
- package/dist/cliOutput.js +0 -38
- package/dist/composition/auxiliaryAnalysisProviders.js +30 -25
- package/dist/composition/binary.js +9 -9
- package/dist/composition/browserScenario.js +2 -1
- package/dist/composition/directAnalysis.js +20 -14
- package/dist/composition/electronScenario.js +1 -1
- package/dist/composition/optionalObservationProviders.js +12 -7
- package/dist/config/environment.js +6 -0
- package/dist/config/ghidraStartupTimeout.js +4 -9
- package/dist/config/homeDirectory.js +12 -0
- package/dist/config/mcpResponseBudget.js +9 -1
- package/dist/config/parseConfig.js +7 -3
- package/dist/config/parsers.js +19 -22
- package/dist/contracts/analysisViewToolContracts.js +56 -0
- package/dist/contracts/applicationToolContracts.js +5 -4
- package/dist/contracts/artifactComparisonExample.js +7 -7
- package/dist/contracts/artifactToolContracts.js +1 -1
- package/dist/contracts/browserScenarioToolContracts.js +1 -1
- package/dist/contracts/browserToolContracts.js +19 -15
- package/dist/contracts/enhancedInputs.js +2 -2
- package/dist/contracts/enhancedToolContracts.js +4 -3
- package/dist/contracts/errorSchemas.js +3 -1
- package/dist/contracts/evm/evmToolContracts.js +1 -1
- package/dist/contracts/functionComparisonExample.js +8 -0
- package/dist/contracts/functionWorkflowToolContracts.js +1 -1
- package/dist/contracts/inputSchemaPresentation.js +181 -0
- package/dist/contracts/investigationExamples.js +4 -3
- package/dist/contracts/javascript/electronToolContracts.js +3 -2
- package/dist/contracts/javascript/javascriptApplicationWorkflowExamples.js +3 -22
- package/dist/contracts/javascript/javascriptExportShapeComparisonExample.js +248 -0
- package/dist/contracts/javascript/javascriptRuntimeObservationToolContracts.js +1 -1
- package/dist/contracts/javascript/javascriptRuntimeReconciliationExample.js +8 -7
- package/dist/contracts/managed/managedToolContracts.js +8 -12
- package/dist/contracts/managed/managedWorkflowToolContracts.js +1 -1
- package/dist/contracts/mobileApplicationGraphExamples.js +8 -8
- package/dist/contracts/native/binaryDiagnosticsToolContracts.js +1 -1
- package/dist/contracts/native/nativeToolContracts.js +2 -2
- package/dist/contracts/officialToolContracts.js +2 -1
- package/dist/contracts/promptContracts.js +2 -2
- package/dist/contracts/providerSelection.js +1 -1
- package/dist/contracts/sessionLifecycleInputs.js +4 -3
- package/dist/contracts/sessionStatusContract.js +3 -2
- package/dist/contracts/sessionToolContracts.js +17 -4
- package/dist/contracts/sessionToolSchemas.js +4 -16
- package/dist/contracts/toolContracts.js +2 -0
- package/dist/contracts/toolEffects.js +1 -0
- package/dist/contracts/toolOutputSchemaGroups.js +138 -94
- package/dist/contracts/toolOutputSchemaPrimitives.js +13 -26
- package/dist/contracts/toolSchemaMetadata.js +18 -69
- package/dist/contracts/webNetworkCaptureToolContracts.js +1 -1
- package/dist/contracts/webRuntimeToolContracts.js +1 -1
- package/dist/contracts/webScriptToolContracts.js +1 -1
- package/dist/doctorRuntime.js +7 -5
- package/dist/domain/analysisErrorBase.js +5 -0
- package/dist/domain/analysisErrorCore.js +3 -0
- package/dist/domain/analysisErrorPresentation.js +22 -5
- package/dist/domain/analysisErrorProjection.js +24 -5
- package/dist/domain/analysisSnapshot.js +31 -31
- package/dist/domain/analysisView/analysisView.js +241 -0
- package/dist/domain/analysisView/analysisViewCoverage.js +19 -0
- package/dist/domain/analysisView/binaryLayoutView.js +159 -0
- package/dist/domain/analysisView/javascriptApplicationView.js +238 -0
- package/dist/domain/android/androidApplication.js +1 -1
- package/dist/domain/android/androidPartialObservation.js +36 -0
- package/dist/domain/apple/appleApplication.js +1 -1
- package/dist/domain/apple/dylibResolution.js +10 -3
- package/dist/domain/apple/interfaceBuilderGraph.js +0 -1
- package/dist/domain/apple/keyedArchive.js +26 -2
- package/dist/domain/artifactComparison.js +15 -6
- package/dist/domain/artifactGraph.js +17 -4
- package/dist/domain/artifactIdentity.js +8 -8
- package/dist/domain/artifactInspection.js +8 -8
- package/dist/domain/artifactInventoryEvidence.js +9 -16
- package/dist/domain/artifactOperationError.js +3 -3
- package/dist/domain/artifactPartialObservation.js +1 -0
- package/dist/domain/artifactPathSyntax.js +49 -0
- package/dist/domain/binaryTarget.js +39 -13
- package/dist/domain/browserCaptureComparison.js +13 -49
- package/dist/domain/browserCompleteness.js +3 -2
- package/dist/domain/browserNetworkEvidence.js +10 -4
- package/dist/domain/browserObservation.js +0 -1
- package/dist/domain/browserObservationSchemas.js +14 -3
- package/dist/domain/browserScenario.js +0 -1
- package/dist/domain/browserScenarioCapture.js +1 -2
- package/dist/domain/browserScenarioCaptureValues.js +2 -2
- package/dist/domain/browserScenarioDiff.js +0 -2
- package/dist/domain/browserScenarioDiffEvidence.js +0 -12
- package/dist/domain/browserScenarioDiffValues.js +2 -2
- package/dist/domain/browserScenarioNormalization.js +3 -3
- package/dist/domain/browserScenarioValues.js +6 -6
- package/dist/domain/callPath.js +15 -18
- package/dist/domain/callPathSchemas.js +2 -2
- package/dist/domain/canonicalDigest.js +7 -1
- package/dist/domain/canonicalOrdering.js +1 -13
- package/dist/domain/changedBehavior.js +5 -6
- package/dist/domain/comparisonSemantics.js +0 -5
- package/dist/domain/completionLedgerGeneration.js +2 -1
- package/dist/domain/configurationErrors.js +12 -0
- package/dist/domain/conformancePackage.js +4 -3
- package/dist/domain/digests.js +0 -3
- package/dist/domain/evidence.js +19 -40
- package/dist/domain/evidenceBundle.js +58 -42
- package/dist/domain/evidenceCompletionLedger.js +2 -1
- package/dist/domain/firmware/firmwareAnalysis.js +4 -3
- package/dist/domain/functionComparison.js +6 -6
- package/dist/domain/functionComparisonDimensions.js +120 -87
- package/dist/domain/functionComparisonNormalization.js +26 -36
- package/dist/domain/functionComparisonResults.js +3 -6
- package/dist/domain/functionComparisonSchemas.js +2 -8
- package/dist/domain/functionDossierEvidence.js +4 -38
- package/dist/domain/hopperValues.js +11 -15
- package/dist/domain/javascript/electronActiveObservation.js +29 -71
- package/dist/domain/javascript/electronObservation.js +14 -3
- package/dist/domain/javascript/electronStaticAnalysisBrowser.js +12 -11
- package/dist/domain/javascript/electronStaticAnalysisIpc.js +11 -2
- package/dist/domain/javascript/electronStaticAnalysisNative.js +7 -4
- package/dist/domain/javascript/electronStaticAnalysisValues.js +8 -4
- package/dist/domain/javascript/javascriptApplicationAnalysis.js +3 -1
- package/dist/domain/javascript/javascriptApplicationChangeGraph.js +12 -8
- package/dist/domain/javascript/javascriptApplicationEvidenceSchemas.js +6 -0
- package/dist/domain/javascript/javascriptApplicationGraph.js +41 -16
- package/dist/domain/javascript/javascriptApplicationGraphSchemas.js +9 -2
- package/dist/domain/javascript/javascriptApplicationVersionComparison.js +4 -4
- package/dist/domain/javascript/javascriptApplicationVersionComparisonSchemas.js +37 -22
- package/dist/domain/javascript/javascriptApplicationVersionItems.js +50 -36
- package/dist/domain/javascript/javascriptApplicationVersionKeys.js +9 -8
- package/dist/domain/javascript/javascriptAstFingerprint.js +2 -2
- package/dist/domain/javascript/javascriptAstValues.js +22 -0
- package/dist/{application/javascript/JavaScriptReturnShapeProjection.js → domain/javascript/javascriptExportReturnShapeProjection.js} +4 -4
- package/dist/domain/javascript/javascriptExportShapeComparison.js +10 -3
- package/dist/domain/javascript/javascriptExportShapeComparisonIdentity.js +6 -1
- package/dist/domain/javascript/javascriptExportShapeComparisonSchemas.js +58 -22
- package/dist/domain/javascript/javascriptExportShapeSelection.js +7 -7
- package/dist/domain/javascript/javascriptExportShapeVariants.js +70 -16
- package/dist/domain/javascript/javascriptFeatureSeed.js +25 -3
- package/dist/domain/javascript/javascriptFeatureTrace.js +7 -6
- package/dist/domain/javascript/javascriptFeatureTraceSchemas.js +17 -9
- package/dist/domain/javascript/javascriptFeatureTraversal.js +4 -5
- package/dist/domain/javascript/javascriptNativeHandoff.js +7 -7
- package/dist/domain/javascript/javascriptRuntimeLoadState.js +0 -1
- package/dist/domain/javascript/javascriptRuntimeObservation.js +18 -7
- package/dist/domain/javascript/javascriptRuntimeReconciliation.js +12 -6
- package/dist/domain/javascript/javascriptRuntimeReconciliationActive.js +9 -8
- package/dist/domain/javascript/javascriptRuntimeReconciliationCaptureParsing.js +212 -0
- package/dist/domain/javascript/javascriptRuntimeReconciliationGraph.js +5 -4
- package/dist/domain/javascript/javascriptRuntimeReconciliationInputValidation.js +28 -0
- package/dist/domain/javascript/javascriptRuntimeReconciliationMatching.js +6 -6
- package/dist/domain/javascript/javascriptRuntimeReconciliationParsing.js +12 -222
- package/dist/domain/javascript/javascriptRuntimeReconciliationResult.js +2 -2
- package/dist/domain/javascript/javascriptRuntimeReconciliationRuntime.js +15 -4
- package/dist/domain/javascript/javascriptRuntimeReconciliationSchemas.js +2 -2
- package/dist/domain/javascript/javascriptRuntimeStaticCandidates.js +7 -7
- package/dist/domain/javascript/javascriptSemanticAnalysis.js +209 -11
- package/dist/domain/javascript/javascriptSemanticAsyncEffects.js +2 -1
- package/dist/domain/javascript/javascriptSemanticCallResolution.js +9 -7
- package/dist/domain/javascript/javascriptSemanticCalls.js +2 -1
- package/dist/domain/javascript/javascriptSemanticChildProcesses.js +4 -3
- package/dist/domain/javascript/javascriptSemanticCoverage.js +20 -0
- package/dist/domain/javascript/javascriptSemanticDataEffectHelpers.js +7 -9
- package/dist/domain/javascript/javascriptSemanticDataEffects.js +4 -11
- package/dist/domain/javascript/javascriptSemanticFingerprints.js +2 -2
- package/dist/domain/javascript/javascriptSemanticGraph.js +220 -71
- package/dist/domain/javascript/javascriptSemanticGraphSchemas.js +19 -1
- package/dist/domain/javascript/javascriptSemanticIr.js +0 -4
- package/dist/domain/javascript/javascriptSemanticIterationSources.js +106 -0
- package/dist/domain/javascript/javascriptSemanticMemberMutations.js +515 -74
- package/dist/domain/javascript/javascriptSemanticMutationInitializers.js +190 -0
- package/dist/domain/javascript/javascriptSemanticMutationValues.js +44 -36
- package/dist/domain/javascript/javascriptSemanticObjects.js +79 -42
- package/dist/domain/javascript/javascriptSemanticPrimitives.js +8 -14
- package/dist/domain/javascript/javascriptSemanticProjection.js +21 -16
- package/dist/domain/javascript/javascriptSemanticPromises.js +16 -21
- package/dist/domain/javascript/javascriptSemanticPropertyPaths.js +23 -0
- package/dist/domain/javascript/javascriptSemanticProvenance.js +3 -3
- package/dist/domain/javascript/javascriptSemanticQuery.js +8 -2
- package/dist/domain/javascript/javascriptSemanticQueryIdentity.js +3 -2
- package/dist/domain/javascript/javascriptSemanticQuerySchemas.js +8 -9
- package/dist/domain/javascript/javascriptSemanticRequireOrigin.js +16 -10
- package/dist/domain/javascript/javascriptSemanticResourceLimits.js +1 -1
- package/dist/domain/javascript/javascriptSemanticResources.js +1 -1
- package/dist/domain/javascript/javascriptSemanticReturns.js +55 -44
- package/dist/domain/javascript/javascriptSemanticSlots.js +72 -0
- package/dist/domain/javascript/javascriptSemanticTraversal.js +6 -1
- package/dist/domain/javascript/javascriptSemanticValues.js +180 -76
- package/dist/domain/javascript/javascriptSourceMapPaths.js +114 -0
- package/dist/domain/javascript/javascriptSourceParser.js +34 -9
- package/dist/domain/javascript/javascriptStaticAnalysisBundler.js +5 -6
- package/dist/domain/javascript/javascriptStaticAnalysisCalls.js +2 -1
- package/dist/domain/javascript/javascriptStaticAnalysisHelpers.js +26 -16
- package/dist/domain/javascript/sourceToBundleComparison.js +19 -8
- package/dist/domain/javascript/sourceToBundleSignals.js +53 -25
- package/dist/domain/jsonSerialization.js +109 -55
- package/dist/domain/jsonShape.js +46 -19
- package/dist/domain/localPath.js +10 -4
- package/dist/domain/managed/managedApplicationGraph.js +10 -6
- package/dist/domain/managed/managedApplicationGraphNodes.js +82 -57
- package/dist/domain/managed/managedArtifact.js +6 -4
- package/dist/domain/managed/managedMemberComparison.js +2 -9
- package/dist/domain/managed/managedMemberComparisonMatch.js +6 -7
- package/dist/domain/managed/managedNativeVerification.js +0 -2
- package/dist/domain/managed/managedNativeVerificationMatch.js +9 -3
- package/dist/domain/native/binaryLayout.js +2 -3
- package/dist/domain/native/nativeApiBoundary.js +1 -1
- package/dist/domain/native/nativeCallObservation.js +3 -3
- package/dist/domain/native/nativeInstruction.js +7 -0
- package/dist/domain/native/nativeValueFlow.js +5 -11
- package/dist/domain/native/objcSwiftMetadata.js +15 -17
- package/dist/domain/native/recordedCrash.js +2 -3
- package/dist/domain/offsetDateTime.js +17 -0
- package/dist/domain/process/processCapture.js +22 -20
- package/dist/domain/process/processCaptureCoverage.js +70 -0
- package/dist/domain/process/processCaptureExample.js +45 -1
- package/dist/domain/process/processCaptureParsing.js +1 -34
- package/dist/domain/process/processCaptureValidation.js +82 -13
- package/dist/domain/process/processComparison.js +39 -43
- package/dist/domain/process/processObservation.js +10 -2
- package/dist/domain/process/processScenario.js +24 -2
- package/dist/domain/process/processTraceComparison.js +0 -2
- package/dist/domain/process/processTraceDimensionProjection.js +1 -1
- package/dist/domain/process/processTraceEvaluation.js +19 -15
- package/dist/domain/process/processTraceSpecification.js +4 -7
- package/dist/domain/providerAdapterError.js +2 -0
- package/dist/domain/providerCleanupError.js +6 -2
- package/dist/domain/reconstructionCoverage.js +7 -3
- package/dist/domain/reconstructionObligationLedgerSchemas.js +2 -1
- package/dist/domain/reconstructionReadinessSchemas.js +2 -1
- package/dist/domain/reconstructionUnknowns.js +4 -3
- package/dist/domain/reconstructionVerification.js +6 -5
- package/dist/domain/reconstructionVerificationSchemas.js +2 -1
- package/dist/domain/referenceSourceGraph.js +27 -28
- package/dist/domain/referenceSourceImportParsing.js +34 -45
- package/dist/domain/residualUnknown.js +3 -2
- package/dist/domain/staticRuntimeCorrelation.js +4 -3
- package/dist/domain/stringPatterns.js +6 -0
- package/dist/domain/swiftSymbolClassification.js +66 -0
- package/dist/domain/symbolAnalysis.js +83 -20
- package/dist/domain/unicodeCodePointOrder.js +6 -0
- package/dist/domain/webBundleAnalyzerInspection.js +9 -1
- package/dist/domain/webCaptureDiff.js +71 -30
- package/dist/domain/webCaptureDiffSchemas.js +8 -11
- package/dist/domain/webEventListeners.js +3 -2
- package/dist/domain/webExecution.js +3 -2
- package/dist/domain/webInventory.js +3 -2
- package/dist/domain/webMcpDiscovery.js +4 -3
- package/dist/domain/webRuntime.js +0 -2
- package/dist/domain/webScriptExport.js +2 -2
- package/dist/dotnet/ManagedArtifactInspector.js +2 -19
- package/dist/dotnet/ManagedMemberInspector.js +12 -18
- package/dist/dotnet/ManagedMemberInspectorCore.js +47 -44
- package/dist/dotnet/ManagedMemberInstructionDecoder.js +1 -2
- package/dist/dotnet/ManagedMemberRows.js +75 -62
- package/dist/dotnet/ManagedMetadataInventory.js +16 -22
- package/dist/dotnet/ManagedMethodBodyReader.js +4 -0
- package/dist/dotnet/ManagedNativeBoundaryHelpers.js +109 -94
- package/dist/dotnet/ManagedNativeBoundaryInspector.js +12 -21
- package/dist/dotnet/ManagedReaderFailure.js +16 -0
- package/dist/dotnet/ManagedStaticProvider.js +13 -12
- package/dist/dotnet/ManagedStaticProviderMetadata.js +1 -4
- package/dist/evaluation/AgentEvaluationFixtures.js +250 -0
- package/dist/evaluation/AgentEvaluationReport.js +28 -0
- package/dist/evaluation/CodexAgentEval.js +12 -8
- package/dist/evaluation/KnownAnswerEvaluation.js +281 -0
- package/dist/evm/EvmoleInterfaceProvider.js +2 -1
- package/dist/filesystem/RegularFile.js +41 -0
- package/dist/firmware/FirmwareCommand.js +9 -5
- package/dist/firmware/FirmwareProvider.js +4 -4
- package/dist/generatedPackageMetadata.js +2 -2
- package/dist/ghidra/GhidraAnalysisProfile.js +3 -6
- package/dist/ghidra/GhidraClient.js +105 -36
- package/dist/ghidra/GhidraClientStartup.js +0 -2
- package/dist/ghidra/GhidraDoctor.js +6 -5
- package/dist/ghidra/GhidraFunctionValues.js +3 -5
- package/dist/ghidra/GhidraInstallation.js +151 -22
- package/dist/ghidra/GhidraJavaLaunch.js +6 -2
- package/dist/ghidra/GhidraLauncher.js +58 -26
- package/dist/ghidra/GhidraProvider.js +6 -2
- package/dist/ghidra/GhidraProviderCapabilities.js +6 -0
- package/dist/ghidra/GhidraProviderClient.js +13 -3
- package/dist/ghidra/GhidraSessionError.js +2 -0
- package/dist/ghidra/GhidraSessionRoot.js +39 -0
- package/dist/ghidra/extensions/GhidraExtensions.js +17 -10
- package/dist/ghidra/extensions/nativeaot/NativeAotAdapter.js +8 -2
- package/dist/hopper/BridgeLauncher.js +34 -45
- package/dist/hopper/HopperAnalysisProfile.js +3 -8
- package/dist/hopper/HopperCleanup.js +56 -27
- package/dist/hopper/HopperClient.js +86 -65
- package/dist/hopper/HopperMachOImage.js +3 -2
- package/dist/hopper/HopperProvider.js +16 -18
- package/dist/hopper/HopperRegexSearch.js +3 -6
- package/dist/hopper/HopperTargetLease.js +132 -49
- package/dist/hopper/LinuxPrivateDisplayProbe.js +6 -0
- package/dist/ida/IdaConfiguration.js +8 -3
- package/dist/ida/IdaInput.js +1 -7
- package/dist/ida/IdaMcpConnection.js +8 -4
- package/dist/ida/IdaOperationRunner.js +5 -3
- package/dist/ida/IdaProvider.js +8 -12
- package/dist/ida/IdaSessionClient.js +24 -20
- package/dist/ida/IdaWorkspace.js +12 -13
- package/dist/inspector/JavaScriptRuntimeScope.js +9 -5
- package/dist/inspector/V8InspectorCaptureProjection.js +47 -14
- package/dist/inspector/V8InspectorProvider.js +97 -35
- package/dist/javascript/recovery/WakaruCommand.js +7 -2
- package/dist/javascript/recovery/WakaruExecution.js +5 -2
- package/dist/main/shutdown.js +81 -29
- package/dist/main/startup.js +9 -2
- package/dist/main/transport.js +23 -3
- package/dist/main.js +11 -18
- package/dist/native/AppleMachoSelection.js +16 -6
- package/dist/native/AppleObjcDispatchFacets.js +3 -3
- package/dist/native/AppleObjcProperties.js +17 -7
- package/dist/native/CommandRunner.js +9 -7
- package/dist/native/LldbCallTracer.js +249 -77
- package/dist/native/NativeMacOSProvider.js +32 -17
- package/dist/native/NativeMacOSProviderMetadata.js +1 -2
- package/dist/native/NativeUiHelperRuntime.js +11 -2
- package/dist/native/NativeUiObservation.js +2 -2
- package/dist/native/pwntools/PwntoolsDecoder.js +2 -1
- package/dist/process/DarwinProcessRunTokenReader.js +16 -2
- package/dist/process/ExecFileOutput.js +88 -6
- package/dist/process/PrivateRuntimeRoot.js +10 -5
- package/dist/process/ProcessOwnership.js +1 -4
- package/dist/process/ProcessOwnershipObservation.js +18 -16
- package/dist/process/ProviderProcess.js +1 -3
- package/dist/process/capture/FilesystemSnapshot.js +131 -24
- package/dist/process/capture/ProcessCaptureError.js +13 -0
- package/dist/process/capture/ProcessCaptureLifecycle.js +148 -74
- package/dist/process/capture/ProcessFilesystemEffects.js +51 -6
- package/dist/process/capture/ProcessHarness.js +16 -33
- package/dist/process/capture/ProcessNormalization.js +20 -2
- package/dist/process/capture/ProcessSampling.js +25 -2
- package/dist/process/capture/TerminalRenderer.js +14 -0
- package/dist/process/snapshotEnvironment.js +14 -0
- package/dist/server/EvidenceMcpServer.js +25 -14
- package/dist/server/analysisAdmission.js +8 -0
- package/dist/server/createServer.js +71 -59
- package/dist/server/mcpClientMetadata.js +12 -5
- package/dist/server/promptCompletion.js +3 -8
- package/dist/server/registerAnalysisViewTool.js +15 -0
- package/dist/server/registerAndroidTools.js +2 -3
- package/dist/server/registerApplicationTools/compareExportShapes.js +6 -6
- package/dist/server/registerApplicationTools/compareSourceToBundle.js +4 -5
- package/dist/server/registerApplicationTools/compareVersions.js +4 -5
- package/dist/server/registerApplicationTools/coverage.js +1 -2
- package/dist/server/registerApplicationTools/helpers.js +4 -4
- package/dist/server/registerApplicationTools/obligationLedger.js +4 -5
- package/dist/server/registerApplicationTools/projectMobileApplicationGraph.js +3 -4
- package/dist/server/registerApplicationTools/traceFeature.js +4 -5
- package/dist/server/registerApplicationTools/traceSemantics.js +4 -5
- package/dist/server/registerArtifactComparisonTool.js +4 -5
- package/dist/server/registerArtifactTools.js +2 -2
- package/dist/server/registerBinaryDiagnosticsTools.js +2 -3
- package/dist/server/registerBrowserScenarioTool.js +3 -4
- package/dist/server/registerBrowserTools.js +13 -16
- package/dist/server/registerBundleComparisonTool.js +5 -6
- package/dist/server/registerCloseLifecycleTool.js +8 -7
- package/dist/server/registerElectronTools.js +10 -13
- package/dist/server/registerEnhancedTools.js +82 -77
- package/dist/server/registerEvidenceTools.js +54 -47
- package/dist/server/registerEvmTools.js +2 -3
- package/dist/server/registerFirmwareTools.js +2 -3
- package/dist/server/registerFunctionComparisonTool.js +7 -8
- package/dist/server/registerInvestigationTools.js +14 -15
- package/dist/server/registerJavaScriptRecoveryTool.js +2 -3
- package/dist/server/registerJavaScriptRuntimeObservationTools.js +6 -6
- package/dist/server/registerManagedTools.js +7 -4
- package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +5 -6
- package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +4 -5
- package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +6 -7
- package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +6 -7
- package/dist/server/registerOfficialTools.js +32 -41
- package/dist/server/registerProcessComparisonTool.js +8 -8
- package/dist/server/registerRecordedCrashTools.js +2 -3
- package/dist/server/registerSessionRecordTools.js +15 -19
- package/dist/server/registerSessionStatusTool.js +3 -4
- package/dist/server/registerSessionTools.js +19 -19
- package/dist/server/registerWebModuleTool.js +2 -3
- package/dist/server/registerWebNetworkCaptureTool.js +2 -3
- package/dist/server/registerWebRuntimeTools.js +4 -5
- package/dist/server/registerWebScriptTool.js +2 -3
- package/dist/server/registerWebSourceLocationTool.js +2 -3
- package/dist/server/toolResult.js +66 -94
- package/dist/server/toolResultEncoding.js +11 -10
- package/dist/windows/WindowsNativeLoader.js +1 -0
- package/dist/windows/WindowsOwnedProcess.js +60 -15
- package/dist/windows/WindowsPrivateRuntime.js +7 -8
- package/native/windows/README.md +3 -1
- package/native/windows/build/manifest.json +2 -2
- package/native/windows/build/rea-windows-x64.node +0 -0
- package/package.json +42 -30
- package/scripts/rea.mjs +3 -6
- package/skills/reverse-engineer-anything/SKILL.md +14 -13
- package/skills/reverse-engineer-anything/references/android-applications.md +6 -3
- package/skills/reverse-engineer-anything/references/evidence-workflows.md +8 -4
- package/skills/reverse-engineer-anything/references/javascript-applications.md +16 -6
- package/skills/reverse-engineer-anything/references/native-and-artifacts.md +18 -0
- package/dist/artifacts/inventory/policy.js +0 -2
- package/dist/config.js +0 -1
- package/dist/contracts/browserCaptureToolInputSchema.js +0 -43
- package/dist/contracts/process/processCaptureExample.js +0 -2
- package/dist/contracts/toolOutputSchemas.js +0 -2
- package/dist/domain/managed/managedApplicationGraphNodeCoverage.js +0 -6
- package/dist/main/reload.js +0 -12
- package/dist/main/state.js +0 -3
- package/dist/server/registerNativeTools.js +0 -6
- package/dist/server/sessionToolPolicies.js +0 -2
|
@@ -34,7 +34,8 @@ export const historicalCaptureFailure = (input, cause, phase, options) => {
|
|
|
34
34
|
if (phase === "decoder" &&
|
|
35
35
|
input.format === "har" &&
|
|
36
36
|
cause.reason === "process" &&
|
|
37
|
-
cause.snapshot?.signal === "SIGABRT"
|
|
37
|
+
(cause.snapshot?.signal === "SIGABRT" ||
|
|
38
|
+
(cause.snapshot?.signal === null && cause.snapshot.exitCode === 134)) &&
|
|
38
39
|
/FATAL ERROR:[^\r\n]*heap out of memory/u.test(cause.snapshot.stderr.text))
|
|
39
40
|
return captureMemoryFailure(input, "The HAR decoder exhausted its fixed V8 heap", cause);
|
|
40
41
|
}
|
|
@@ -120,7 +121,10 @@ export const captureMemoryFailure = (input, reason, cause) => new AnalysisResour
|
|
|
120
121
|
}
|
|
121
122
|
: {}),
|
|
122
123
|
...(cause instanceof OwnedCommandFailure
|
|
123
|
-
? {
|
|
124
|
+
? {
|
|
125
|
+
observed_exit_code: cause.snapshot?.exitCode ?? null,
|
|
126
|
+
observed_signal: cause.snapshot?.signal ?? null,
|
|
127
|
+
}
|
|
124
128
|
: {}),
|
|
125
129
|
}, {
|
|
126
130
|
cause,
|
|
@@ -5,6 +5,7 @@ import { fileURLToPath } from "node:url";
|
|
|
5
5
|
import { AnalysisCapabilityUnavailableError } from "../../domain/analysisErrorCore.js";
|
|
6
6
|
import { MITMPROXY_CAPTURE_PROVIDER_IDENTITY } from "./CaptureRelease.js";
|
|
7
7
|
const OPERATION = "inspect_web_network_capture";
|
|
8
|
+
const MITMDUMP_REQUIREMENT = "Native capture decoding requires Linux and an absolute REA_MITMDUMP_COMMAND path to caller-supplied mitmdump 12.2.3; HAR needs no external engine.";
|
|
8
9
|
/** Native mitmproxy decoding is offline and uses only an explicitly configured Linux tool. */
|
|
9
10
|
export class MitmproxyCaptureAdapter {
|
|
10
11
|
environment;
|
|
@@ -18,12 +19,13 @@ export class MitmproxyCaptureAdapter {
|
|
|
18
19
|
if (process.platform !== "linux" ||
|
|
19
20
|
command === undefined ||
|
|
20
21
|
!isAbsolute(command))
|
|
21
|
-
throw new AnalysisCapabilityUnavailableError("mitmproxy", OPERATION,
|
|
22
|
+
throw new AnalysisCapabilityUnavailableError("mitmproxy", OPERATION, MITMDUMP_REQUIREMENT, { userMessage: MITMDUMP_REQUIREMENT });
|
|
22
23
|
try {
|
|
23
24
|
await access(command, constants.R_OK | constants.X_OK);
|
|
24
25
|
}
|
|
25
26
|
catch (cause) {
|
|
26
|
-
|
|
27
|
+
const reason = `Configured mitmdump executable is unavailable: ${command}.`;
|
|
28
|
+
throw new AnalysisCapabilityUnavailableError("mitmproxy", OPERATION, reason, { cause, userMessage: reason });
|
|
27
29
|
}
|
|
28
30
|
return {
|
|
29
31
|
command,
|
package/dist/catalogIdentity.js
CHANGED
|
@@ -4,7 +4,6 @@ import { z } from "zod";
|
|
|
4
4
|
import { PROMPT_CONTRACTS } from "./contracts/promptContracts.js";
|
|
5
5
|
import { TOOL_CONTRACTS } from "./contracts/toolContracts.js";
|
|
6
6
|
import { CLI_COMMAND_NAMES } from "./cliCommandNames.js";
|
|
7
|
-
export { CLI_COMMAND_NAMES } from "./cliCommandNames.js";
|
|
8
7
|
const sortedToolContracts = [...TOOL_CONTRACTS].sort((left, right) => left.name.localeCompare(right.name));
|
|
9
8
|
const createToolCatalog = () => sortedToolContracts.map((contract) => ({
|
|
10
9
|
name: contract.name,
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { z } from "incur";
|
|
2
|
+
import { inspectAnalysisViewValidated } from "../application/analysisView/AnalysisViewService.js";
|
|
3
|
+
import { CLI_COMMANDS } from "../cliCommandNames.js";
|
|
4
|
+
import { parseCliJsonInput } from "../cliJsonInput.js";
|
|
5
|
+
import { logCliCommand } from "../cliLogging.js";
|
|
6
|
+
import { projectAnalysisError } from "../domain/analysisErrorProjection.js";
|
|
7
|
+
import { analysisInputErrorFromIssues } from "../domain/inputIssueProjection.js";
|
|
8
|
+
import { jsonValueSchema } from "../domain/jsonValue.js";
|
|
9
|
+
import { inspectAnalysisViewInputSchema } from "../domain/analysisView/analysisView.js";
|
|
10
|
+
/** Project selected views of completed analysis Evidence through the CLI. */
|
|
11
|
+
export const registerAnalysisViewCommands = (cli, logger) => {
|
|
12
|
+
cli.command(CLI_COMMANDS.inspectAnalysisView, {
|
|
13
|
+
description: "Project a selected view of completed layout or JavaScript application Evidence JSON",
|
|
14
|
+
args: z.object({
|
|
15
|
+
inputJson: z.string().describe("Inline workflow JSON or JSON file path"),
|
|
16
|
+
}),
|
|
17
|
+
run: ({ args }) => logCliCommand(logger, CLI_COMMANDS.inspectAnalysisView, async () => {
|
|
18
|
+
const input = await parseCliJsonInput(args.inputJson, CLI_COMMANDS.inspectAnalysisView);
|
|
19
|
+
if (!input.ok)
|
|
20
|
+
return input.error;
|
|
21
|
+
const parsed = inspectAnalysisViewInputSchema.safeParse(input.value);
|
|
22
|
+
if (!parsed.success)
|
|
23
|
+
return {
|
|
24
|
+
error: "Application workflow failed",
|
|
25
|
+
...projectAnalysisError(analysisInputErrorFromIssues(CLI_COMMANDS.inspectAnalysisView, parsed.error.issues, input.value)),
|
|
26
|
+
};
|
|
27
|
+
const result = inspectAnalysisViewValidated(parsed.data);
|
|
28
|
+
return result.ok
|
|
29
|
+
? jsonValueSchema.parse(result.value)
|
|
30
|
+
: {
|
|
31
|
+
error: "Application workflow failed",
|
|
32
|
+
...projectAnalysisError(result.error),
|
|
33
|
+
};
|
|
34
|
+
}),
|
|
35
|
+
});
|
|
36
|
+
};
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
import { z } from "incur";
|
|
2
|
-
import { runProviderAnalysis } from "../composition/directAnalysis.js";
|
|
3
2
|
import { createArtifactExtractionDestination } from "../application/artifacts/ArtifactExtractionDestination.js";
|
|
4
3
|
import { logCliCommand } from "../cliLogging.js";
|
|
5
4
|
import { CLI_COMMANDS } from "../cliCommandNames.js";
|
|
6
|
-
export const registerArtifactCommands = (cli, logger) => {
|
|
7
|
-
registerInspectionCommand(cli, logger);
|
|
8
|
-
registerExtractionCommand(cli, logger);
|
|
9
|
-
registerInterfaceBuilderCommand(cli, logger);
|
|
10
|
-
registerAssetCatalogCommand(cli, logger);
|
|
11
|
-
registerDylibResolutionCommand(cli, logger);
|
|
5
|
+
export const registerArtifactCommands = (cli, logger, runProviderAnalysis) => {
|
|
6
|
+
registerInspectionCommand(cli, logger, runProviderAnalysis);
|
|
7
|
+
registerExtractionCommand(cli, logger, runProviderAnalysis);
|
|
8
|
+
registerInterfaceBuilderCommand(cli, logger, runProviderAnalysis);
|
|
9
|
+
registerAssetCatalogCommand(cli, logger, runProviderAnalysis);
|
|
10
|
+
registerDylibResolutionCommand(cli, logger, runProviderAnalysis);
|
|
12
11
|
cli.command(CLI_COMMANDS.inspectKeyedArchive, {
|
|
13
12
|
description: "Inspect a Foundation keyed archive as an object-reference graph",
|
|
14
13
|
args: z.object({
|
|
@@ -42,7 +41,7 @@ export const registerArtifactCommands = (cli, logger) => {
|
|
|
42
41
|
}, logger)),
|
|
43
42
|
});
|
|
44
43
|
};
|
|
45
|
-
const registerDylibResolutionCommand = (cli, logger) => {
|
|
44
|
+
const registerDylibResolutionCommand = (cli, logger, runProviderAnalysis) => {
|
|
46
45
|
cli.command(CLI_COMMANDS.traceDylibResolution, {
|
|
47
46
|
description: "Trace dyld load-path resolution for a Mach-O or every executable in an app bundle",
|
|
48
47
|
args: z.object({
|
|
@@ -66,7 +65,7 @@ const registerDylibResolutionCommand = (cli, logger) => {
|
|
|
66
65
|
}, logger)),
|
|
67
66
|
});
|
|
68
67
|
};
|
|
69
|
-
const registerAssetCatalogCommand = (cli, logger) => {
|
|
68
|
+
const registerAssetCatalogCommand = (cli, logger, runProviderAnalysis) => {
|
|
70
69
|
cli.command(CLI_COMMANDS.inspectAssetCatalog, {
|
|
71
70
|
description: "Inspect compiled Apple asset catalog metadata",
|
|
72
71
|
args: z.object({ path: z.string().describe("Apple .app bundle path") }),
|
|
@@ -89,7 +88,7 @@ const registerAssetCatalogCommand = (cli, logger) => {
|
|
|
89
88
|
run: ({ args, options }) => logCliCommand(logger, CLI_COMMANDS.inspectAssetCatalog, () => runProviderAnalysis(args.path, "inspect_asset_catalog", { offset: options.offset, limit: options.limit }, logger)),
|
|
90
89
|
});
|
|
91
90
|
};
|
|
92
|
-
const registerInterfaceBuilderCommand = (cli, logger) => {
|
|
91
|
+
const registerInterfaceBuilderCommand = (cli, logger, runProviderAnalysis) => {
|
|
93
92
|
cli.command(CLI_COMMANDS.decodeInterfaceBuilder, {
|
|
94
93
|
description: "Decode compiled storyboard and nib archives from an app bundle",
|
|
95
94
|
args: z.object({
|
|
@@ -130,7 +129,7 @@ const registerInterfaceBuilderCommand = (cli, logger) => {
|
|
|
130
129
|
}, logger)),
|
|
131
130
|
});
|
|
132
131
|
};
|
|
133
|
-
const registerExtractionCommand = (cli, logger) => {
|
|
132
|
+
const registerExtractionCommand = (cli, logger, runProviderAnalysis) => {
|
|
134
133
|
cli.command(CLI_COMMANDS.extractArtifact, {
|
|
135
134
|
description: "Extract all regular artifact contents safely",
|
|
136
135
|
args: z.object({
|
|
@@ -142,7 +141,7 @@ const registerExtractionCommand = (cli, logger) => {
|
|
|
142
141
|
}, logger)),
|
|
143
142
|
});
|
|
144
143
|
};
|
|
145
|
-
const registerInspectionCommand = (cli, logger) => {
|
|
144
|
+
const registerInspectionCommand = (cli, logger, runProviderAnalysis) => {
|
|
146
145
|
cli.command(CLI_COMMANDS.inspectArtifact, {
|
|
147
146
|
description: "Inspect one artifact and return all available observations and next probes",
|
|
148
147
|
args: z.object({
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { registerCoreBinaryCommands } from "./coreBinaryCommands.js";
|
|
2
2
|
import { registerCoreNativeCommands } from "./coreNativeCommands.js";
|
|
3
3
|
/** Register core binary and native deep-analysis CLI commands. */
|
|
4
|
-
export const registerCoreAnalysisCommands = (cli, logger,
|
|
5
|
-
registerCoreBinaryCommands(cli, logger,
|
|
6
|
-
registerCoreNativeCommands(cli, logger);
|
|
4
|
+
export const registerCoreAnalysisCommands = (cli, logger, runDirectAnalysis) => {
|
|
5
|
+
registerCoreBinaryCommands(cli, logger, runDirectAnalysis);
|
|
6
|
+
registerCoreNativeCommands(cli, logger, runDirectAnalysis);
|
|
7
7
|
};
|
|
@@ -2,22 +2,23 @@ import { z } from "incur";
|
|
|
2
2
|
import { stat } from "node:fs/promises";
|
|
3
3
|
import { resolve } from "node:path";
|
|
4
4
|
import { resolveCliAnalysisSelector } from "./analysisSelector.js";
|
|
5
|
-
import { runDirectAnalysis } from "../composition/directAnalysis.js";
|
|
6
5
|
import { CLI_COMMANDS } from "../cliCommandNames.js";
|
|
7
6
|
import { logCliCommand } from "../cliLogging.js";
|
|
8
7
|
import { directAnalysisOptions, formatSelectionOption, providerSelectionOption, } from "./options.js";
|
|
9
8
|
import { runCliJavaScriptApplicationAnalysis } from "./javascriptApplicationAnalysis.js";
|
|
9
|
+
import { withCommandCancellation } from "./commandCancellation.js";
|
|
10
|
+
import { javascriptApplicationOptions } from "../cliObservationOptions.js";
|
|
10
11
|
/** Register provider-neutral binary overview and procedure CLI commands. */
|
|
11
|
-
export const registerCoreBinaryCommands = (cli, logger,
|
|
12
|
-
registerOverviewCommands(cli, logger,
|
|
13
|
-
registerDecompileCommand(cli, logger);
|
|
14
|
-
registerFunctionCommand(cli, logger);
|
|
15
|
-
registerInstructionsCommand(cli, logger);
|
|
16
|
-
registerSearchCommand(cli, logger);
|
|
17
|
-
registerXrefsCommand(cli, logger);
|
|
18
|
-
registerTraceCommand(cli, logger);
|
|
12
|
+
export const registerCoreBinaryCommands = (cli, logger, runDirectAnalysis) => {
|
|
13
|
+
registerOverviewCommands(cli, logger, runDirectAnalysis);
|
|
14
|
+
registerDecompileCommand(cli, logger, runDirectAnalysis);
|
|
15
|
+
registerFunctionCommand(cli, logger, runDirectAnalysis);
|
|
16
|
+
registerInstructionsCommand(cli, logger, runDirectAnalysis);
|
|
17
|
+
registerSearchCommand(cli, logger, runDirectAnalysis);
|
|
18
|
+
registerXrefsCommand(cli, logger, runDirectAnalysis);
|
|
19
|
+
registerTraceCommand(cli, logger, runDirectAnalysis);
|
|
19
20
|
};
|
|
20
|
-
const registerOverviewCommands = (cli, logger,
|
|
21
|
+
const registerOverviewCommands = (cli, logger, runDirectAnalysis) => {
|
|
21
22
|
const overviewOptions = z.object({
|
|
22
23
|
snapshot: z
|
|
23
24
|
.string()
|
|
@@ -32,10 +33,21 @@ const registerOverviewCommands = (cli, logger, resultOutput) => {
|
|
|
32
33
|
args: z.object({
|
|
33
34
|
path: z.string().describe("App, program, or analysis database path"),
|
|
34
35
|
}),
|
|
35
|
-
options: overviewOptions
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
36
|
+
options: overviewOptions.extend({
|
|
37
|
+
integrityPolicy: javascriptApplicationOptions.shape.integrityPolicy,
|
|
38
|
+
}),
|
|
39
|
+
alias: { integrityPolicy: "integrity-policy" },
|
|
40
|
+
run: async ({ args, options }) => {
|
|
41
|
+
// Route JavaScript targets exactly like analyze-javascript-application,
|
|
42
|
+
// including typed cancellation; cancellation wraps logging so its exit
|
|
43
|
+
// code is not replaced by the logged failure status.
|
|
44
|
+
if (await routesToJavaScriptAnalysis(args.path, options))
|
|
45
|
+
return withCommandCancellation((signal) => logCliCommand(logger, "analyze", () => runCliJavaScriptApplicationAnalysis({
|
|
46
|
+
input_path: resolve(args.path),
|
|
47
|
+
integrity_policy: options.integrityPolicy,
|
|
48
|
+
}, signal)));
|
|
49
|
+
return logCliCommand(logger, "analyze", () => runDirectAnalysis(args.path, "binary_overview", {}, directAnalysisOptions(logger, options.snapshot, options.provider, options["target-format"])));
|
|
50
|
+
},
|
|
39
51
|
});
|
|
40
52
|
cli.command(CLI_COMMANDS.inspect, {
|
|
41
53
|
description: "Inspect an app overview with evidence",
|
|
@@ -46,7 +58,7 @@ const registerOverviewCommands = (cli, logger, resultOutput) => {
|
|
|
46
58
|
run: ({ args, options }) => logCliCommand(logger, "inspect", () => runDirectAnalysis(args.path, "binary_overview", {}, directAnalysisOptions(logger, options.snapshot, options.provider, options["target-format"]))),
|
|
47
59
|
});
|
|
48
60
|
};
|
|
49
|
-
const registerDecompileCommand = (cli, logger) => {
|
|
61
|
+
const registerDecompileCommand = (cli, logger, runDirectAnalysis) => {
|
|
50
62
|
cli.command(CLI_COMMANDS.decompile, {
|
|
51
63
|
description: "Read one part of an app as code",
|
|
52
64
|
args: z.object({
|
|
@@ -76,14 +88,11 @@ const registerDecompileCommand = (cli, logger) => {
|
|
|
76
88
|
}, directAnalysisOptions(logger, options.snapshot, options.provider, options["target-format"]))),
|
|
77
89
|
});
|
|
78
90
|
};
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
return runCliJavaScriptApplicationAnalysis({ input_path: resolve(path) }, output);
|
|
85
|
-
return runDirectAnalysis(path, "binary_overview", {}, directAnalysisOptions(logger, options.snapshot, options.provider, options["target-format"]));
|
|
86
|
-
};
|
|
91
|
+
/** Select static JavaScript analysis only when no binary-analysis option applies. */
|
|
92
|
+
const routesToJavaScriptAnalysis = async (path, options) => options.provider === undefined &&
|
|
93
|
+
options.snapshot === undefined &&
|
|
94
|
+
options["target-format"] === undefined &&
|
|
95
|
+
(await isJavaScriptApplicationPath(path));
|
|
87
96
|
const isJavaScriptApplicationPath = async (path) => {
|
|
88
97
|
const lower = path.toLowerCase();
|
|
89
98
|
if (lower.endsWith(".asar"))
|
|
@@ -100,7 +109,7 @@ const isJavaScriptApplicationPath = async (path) => {
|
|
|
100
109
|
return false;
|
|
101
110
|
}
|
|
102
111
|
};
|
|
103
|
-
const registerXrefsCommand = (cli, logger) => {
|
|
112
|
+
const registerXrefsCommand = (cli, logger, runDirectAnalysis) => {
|
|
104
113
|
cli.command(CLI_COMMANDS.xrefs, {
|
|
105
114
|
description: "List bounded references to an analyzed address",
|
|
106
115
|
args: z.object({
|
|
@@ -126,7 +135,7 @@ const registerXrefsCommand = (cli, logger) => {
|
|
|
126
135
|
}, directAnalysisOptions(logger, options.snapshot, options.provider, options["target-format"]))),
|
|
127
136
|
});
|
|
128
137
|
};
|
|
129
|
-
const registerTraceCommand = (cli, logger) => {
|
|
138
|
+
const registerTraceCommand = (cli, logger, runDirectAnalysis) => {
|
|
130
139
|
cli.command(CLI_COMMANDS.trace, {
|
|
131
140
|
description: "Trace a literal feature through analyzed references",
|
|
132
141
|
args: z.object({
|
|
@@ -160,7 +169,7 @@ const registerTraceCommand = (cli, logger) => {
|
|
|
160
169
|
}, directAnalysisOptions(logger, options.snapshot, options.provider, options["target-format"]))),
|
|
161
170
|
});
|
|
162
171
|
};
|
|
163
|
-
const registerFunctionCommand = (cli, logger) => {
|
|
172
|
+
const registerFunctionCommand = (cli, logger, runDirectAnalysis) => {
|
|
164
173
|
cli.command(CLI_COMMANDS.function, {
|
|
165
174
|
description: "Analyze one complete function with evidence",
|
|
166
175
|
args: z.object({
|
|
@@ -190,7 +199,7 @@ const registerFunctionCommand = (cli, logger) => {
|
|
|
190
199
|
}, directAnalysisOptions(logger, options.snapshot, options.provider, options["target-format"]))),
|
|
191
200
|
});
|
|
192
201
|
};
|
|
193
|
-
const registerInstructionsCommand = (cli, logger) => {
|
|
202
|
+
const registerInstructionsCommand = (cli, logger, runDirectAnalysis) => {
|
|
194
203
|
cli.command(CLI_COMMANDS.instructions, {
|
|
195
204
|
description: "Read every raw instruction without decompiling",
|
|
196
205
|
args: z.object({
|
|
@@ -220,7 +229,7 @@ const registerInstructionsCommand = (cli, logger) => {
|
|
|
220
229
|
}, directAnalysisOptions(logger, options.snapshot, options.provider, options["target-format"]))),
|
|
221
230
|
});
|
|
222
231
|
};
|
|
223
|
-
const registerSearchCommand = (cli, logger) => {
|
|
232
|
+
const registerSearchCommand = (cli, logger, runDirectAnalysis) => {
|
|
224
233
|
cli.command(CLI_COMMANDS.search, {
|
|
225
234
|
description: "Search every analyzed string or procedure name",
|
|
226
235
|
args: z.object({
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import { z } from "incur";
|
|
2
|
-
import { runDirectAnalysis } from "../composition/directAnalysis.js";
|
|
3
2
|
import { CLI_COMMANDS } from "../cliCommandNames.js";
|
|
4
3
|
import { logCliCommand } from "../cliLogging.js";
|
|
5
4
|
import { directAnalysisOptions, formatSelectionOption, providerSelectionOption, } from "./options.js";
|
|
6
5
|
/** Register native load-image, memory, and annotation CLI commands. */
|
|
7
|
-
export const registerCoreNativeCommands = (cli, logger) => {
|
|
8
|
-
registerAnnotationCommand(cli, logger);
|
|
6
|
+
export const registerCoreNativeCommands = (cli, logger, runDirectAnalysis) => {
|
|
7
|
+
registerAnnotationCommand(cli, logger, runDirectAnalysis);
|
|
9
8
|
cli.command(CLI_COMMANDS.inspectNativeLoadImage, {
|
|
10
9
|
description: "Verify loaded native bytes, source mappings, relocations and entry",
|
|
11
10
|
args: z.object({ path: z.string().describe("Local executable path") }),
|
|
@@ -160,11 +159,11 @@ export const registerCoreNativeCommands = (cli, logger) => {
|
|
|
160
159
|
run: ({ args, options }) => logCliCommand(logger, command, () => runDirectAnalysis(args.path, operation, { address: args.address }, directAnalysisOptions(logger, undefined, options.provider, options["target-format"]))),
|
|
161
160
|
});
|
|
162
161
|
}
|
|
163
|
-
registerNativeApiCommand(cli, logger);
|
|
164
|
-
registerNativeUiActionCommand(cli, logger);
|
|
165
|
-
registerNativeDispatchMetadataCommand(cli, logger);
|
|
162
|
+
registerNativeApiCommand(cli, logger, runDirectAnalysis);
|
|
163
|
+
registerNativeUiActionCommand(cli, logger, runDirectAnalysis);
|
|
164
|
+
registerNativeDispatchMetadataCommand(cli, logger, runDirectAnalysis);
|
|
166
165
|
};
|
|
167
|
-
const registerNativeDispatchMetadataCommand = (cli, logger) => {
|
|
166
|
+
const registerNativeDispatchMetadataCommand = (cli, logger, runDirectAnalysis) => {
|
|
168
167
|
cli.command(CLI_COMMANDS.inspectNativeDispatchMetadata, {
|
|
169
168
|
description: "Inspect typed Objective-C and Swift dispatch metadata",
|
|
170
169
|
args: z.object({
|
|
@@ -190,7 +189,7 @@ const registerNativeDispatchMetadataCommand = (cli, logger) => {
|
|
|
190
189
|
run: async ({ args, options }) => logCliCommand(logger, "inspect-native-dispatch-metadata", () => runDirectAnalysis(args.path, "inspect_native_dispatch_metadata", { max_records: options.maxRecords }, directAnalysisOptions(logger, options.snapshot, options.provider, options["target-format"]))),
|
|
191
190
|
});
|
|
192
191
|
};
|
|
193
|
-
const registerNativeUiActionCommand = (cli, logger) => {
|
|
192
|
+
const registerNativeUiActionCommand = (cli, logger, runDirectAnalysis) => {
|
|
194
193
|
cli.command(CLI_COMMANDS.traceNativeUiAction, {
|
|
195
194
|
description: "Trace a compiled UI action selector to its native handler and direct callees",
|
|
196
195
|
args: z.object({
|
|
@@ -238,7 +237,7 @@ const registerNativeUiActionCommand = (cli, logger) => {
|
|
|
238
237
|
}, directAnalysisOptions(logger, undefined, options.provider, options["target-format"]))),
|
|
239
238
|
});
|
|
240
239
|
};
|
|
241
|
-
const registerNativeApiCommand = (cli, logger) => {
|
|
240
|
+
const registerNativeApiCommand = (cli, logger, runDirectAnalysis) => {
|
|
242
241
|
cli.command(CLI_COMMANDS.inspectNativeApi, {
|
|
243
242
|
description: "Reconstruct one native function API boundary with evidence",
|
|
244
243
|
args: z.object({
|
|
@@ -257,7 +256,7 @@ const registerNativeApiCommand = (cli, logger) => {
|
|
|
257
256
|
run: ({ args, options }) => logCliCommand(logger, "inspect-native-api", () => runDirectAnalysis(args.path, "inspect_native_api", { procedure: args.address }, directAnalysisOptions(logger, options.snapshot, options.provider, options["target-format"]))),
|
|
258
257
|
});
|
|
259
258
|
};
|
|
260
|
-
const registerAnnotationCommand = (cli, logger) => {
|
|
259
|
+
const registerAnnotationCommand = (cli, logger, runDirectAnalysis) => {
|
|
261
260
|
cli.command(CLI_COMMANDS.annotateNativeFunction, {
|
|
262
261
|
description: "Edit function annotations and return refreshed analysis",
|
|
263
262
|
args: z.object({
|
|
@@ -14,13 +14,13 @@ import { electronPageInspectionOptions, javascriptApplicationOptions, } from "..
|
|
|
14
14
|
import { runCliJavaScriptApplicationAnalysis } from "./javascriptApplicationAnalysis.js";
|
|
15
15
|
import { withCommandCancellation } from "./commandCancellation.js";
|
|
16
16
|
/** Register CLI equivalents of the Electron MCP tools. */
|
|
17
|
-
export const registerElectronCommands = (cli, logger,
|
|
17
|
+
export const registerElectronCommands = (cli, logger, environment) => {
|
|
18
18
|
registerElectronObservationCommands(cli, logger);
|
|
19
|
-
registerElectronActiveCommand(cli, logger);
|
|
20
|
-
registerJavaScriptApplicationCommand(cli, logger
|
|
19
|
+
registerElectronActiveCommand(cli, logger, environment);
|
|
20
|
+
registerJavaScriptApplicationCommand(cli, logger);
|
|
21
21
|
registerJavaScriptRuntimeReconciliationCommand(cli, logger);
|
|
22
22
|
};
|
|
23
|
-
const registerElectronActiveCommand = (cli, logger) => {
|
|
23
|
+
const registerElectronActiveCommand = (cli, logger, environment) => {
|
|
24
24
|
cli.command(CLI_COMMANDS.captureElectronScenario, {
|
|
25
25
|
description: "Run one owned Electron scenario with cancellable actions",
|
|
26
26
|
args: z.object({
|
|
@@ -40,7 +40,7 @@ const registerElectronActiveCommand = (cli, logger) => {
|
|
|
40
40
|
if (!parsed.success)
|
|
41
41
|
return inputError("capture_electron_scenario", parsed.error.issues, input.value);
|
|
42
42
|
const { createElectronScenarioProvider } = await import("../composition/electronScenario.js");
|
|
43
|
-
const result = await captureElectronScenario(createElectronScenarioProvider(), parsed.data, { signal });
|
|
43
|
+
const result = await captureElectronScenario(createElectronScenarioProvider(environment), parsed.data, { signal });
|
|
44
44
|
return result.ok ? result.value : cliError(result.error);
|
|
45
45
|
})),
|
|
46
46
|
});
|
|
@@ -107,20 +107,19 @@ const registerElectronPageInspection = (cli, logger) => {
|
|
|
107
107
|
}),
|
|
108
108
|
});
|
|
109
109
|
};
|
|
110
|
-
const registerJavaScriptApplicationCommand = (cli, logger
|
|
110
|
+
const registerJavaScriptApplicationCommand = (cli, logger) => {
|
|
111
111
|
cli.command(CLI_COMMANDS.analyzeJavaScriptApplication, {
|
|
112
112
|
description: "Statically reconstruct a local JavaScript/Electron application",
|
|
113
113
|
args: z.object({
|
|
114
114
|
path: z.string().describe("ASAR or extracted application path"),
|
|
115
115
|
}),
|
|
116
116
|
options: javascriptApplicationOptions,
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
:
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
}, signal))),
|
|
117
|
+
alias: { integrityPolicy: "integrity-policy" },
|
|
118
|
+
run: ({ args, options }) => withCommandCancellation((signal) => logCliCommand(logger, CLI_COMMANDS.analyzeJavaScriptApplication, () => runCliJavaScriptApplicationAnalysis({
|
|
119
|
+
input_path: args.path,
|
|
120
|
+
format: options.artifactFormat,
|
|
121
|
+
integrity_policy: options.integrityPolicy,
|
|
122
|
+
}, signal))),
|
|
124
123
|
});
|
|
125
124
|
};
|
|
126
125
|
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,8 +2,7 @@ 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,
|
|
6
|
-
const started = performance.now();
|
|
5
|
+
export const runCliJavaScriptApplicationAnalysis = async (input, signal) => {
|
|
7
6
|
const progress = createProgressReporter(async (update) => {
|
|
8
7
|
process.stderr.write(`${JSON.stringify({ rea_progress: update })}\n`);
|
|
9
8
|
}, { minimumIntervalMs: 0 });
|
|
@@ -11,16 +10,7 @@ export const runCliJavaScriptApplicationAnalysis = async (input, output, signal)
|
|
|
11
10
|
progress,
|
|
12
11
|
...(signal === undefined ? {} : { signal }),
|
|
13
12
|
});
|
|
14
|
-
|
|
15
|
-
if (output !== undefined &&
|
|
16
|
-
(await output.output.write(value, {
|
|
17
|
-
command: output.command,
|
|
18
|
-
format: output.format,
|
|
19
|
-
duration: `${Math.round(performance.now() - started)}ms`,
|
|
20
|
-
})))
|
|
21
|
-
// Keep failures visible to command logging after the stream has handled stdout.
|
|
22
|
-
return result.ok ? undefined : value;
|
|
23
|
-
return value;
|
|
13
|
+
return result.ok ? result.value : cliError(result.error);
|
|
24
14
|
};
|
|
25
15
|
const cliError = (error) => ({
|
|
26
16
|
error: "JavaScript application analysis failed",
|
package/dist/cli/jsonOutput.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { bufferedJsonParts, jsonParts } from "../domain/jsonSerialization.js";
|
|
2
2
|
/** Write ordinary JSON without constructing a document-sized string. */
|
|
3
3
|
export const writeJsonOutput = async (value, destination, format = "json") => {
|
|
4
|
-
for (const part of bufferedJsonParts(
|
|
4
|
+
for (const part of bufferedJsonParts(jsonOutputParts(value, format)))
|
|
5
5
|
await writePart(destination, part);
|
|
6
6
|
};
|
|
7
7
|
const writePart = (destination, part) => new Promise((resolve, reject) => {
|
|
@@ -25,7 +25,8 @@ const writePart = (destination, part) => new Promise((resolve, reject) => {
|
|
|
25
25
|
reject(cause);
|
|
26
26
|
}
|
|
27
27
|
});
|
|
28
|
-
|
|
28
|
+
/** The exact formatted document, including its final newline. */
|
|
29
|
+
export function* jsonOutputParts(value, format) {
|
|
29
30
|
if (format === "jsonl" && Array.isArray(value)) {
|
|
30
31
|
for (const item of value) {
|
|
31
32
|
yield* jsonParts(item);
|
|
@@ -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,5 +1,4 @@
|
|
|
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";
|
|
@@ -9,7 +8,7 @@ import { jsonValueSchema } from "../domain/jsonValue.js";
|
|
|
9
8
|
import { nativeCallObservationInputSchema } from "../domain/native/nativeCallObservation.js";
|
|
10
9
|
const OPERATION = "observe_native_calls";
|
|
11
10
|
/** `observe-native-calls <path> <input-json>`: the MCP input object as JSON. */
|
|
12
|
-
export const registerNativeCallCommands = (cli, logger) => {
|
|
11
|
+
export const registerNativeCallCommands = (cli, logger, runProviderAnalysis) => {
|
|
13
12
|
cli.command(CLI_COMMANDS.observeNativeCalls, {
|
|
14
13
|
description: "Launch a Mach-O under LLDB and record entries into selected functions or Objective-C methods",
|
|
15
14
|
args: z.object({
|
|
@@ -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
|
+
};
|