rea-agents 6.1.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 +7 -5
- package/bridge/ghidra/ReaGhidraBridge.java +32 -4
- package/bridge/hopper_bridge.py +6 -1
- package/dist/android/JadxConfiguration.js +87 -7
- package/dist/android/JadxMcpTransport.js +14 -2
- package/dist/android/JadxProvider.js +57 -35
- package/dist/application/BinaryTargetResolver.js +5 -3
- package/dist/application/BrowserEvidence.js +3 -8
- package/dist/application/BrowserScenarioEvidence.js +2 -18
- package/dist/application/CapabilityInventory.js +43 -9
- package/dist/application/ClientConfigurationDocument.js +69 -25
- package/dist/application/DirectAnalysis.js +29 -14
- package/dist/application/DirectAnalysisCleanup.js +72 -0
- package/dist/application/DirectAnalysisStatus.js +4 -5
- package/dist/application/Doctor.js +15 -19
- package/dist/application/DoctorDiagnostics.js +1 -2
- package/dist/application/EnhancedTools.js +51 -6
- package/dist/application/EvidenceBundleFiles.js +8 -3
- package/dist/application/InvestigationProviders.js +9 -1
- package/dist/application/JsonFiles.js +42 -9
- package/dist/application/LinuxHopper.js +9 -6
- package/dist/application/MacHopper.js +15 -18
- package/dist/application/RealHopperAssertions.js +0 -11
- package/dist/application/ReconstructionObligationCandidates.js +1 -1
- package/dist/application/ReferenceSourceImportEntries.js +1 -1
- package/dist/application/Setup.js +8 -16
- package/dist/application/SetupHost.js +16 -27
- package/dist/application/SetupPlan.js +6 -6
- package/dist/application/Uninstall.js +81 -29
- package/dist/application/UpdateMaintenance.js +7 -5
- package/dist/application/UpdateRuntime.js +12 -12
- package/dist/application/WebScriptExportService.js +30 -4
- 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/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 +10 -8
- package/dist/application/binary/BinarySession.js +70 -29
- package/dist/application/binary/BinarySessionComposition.js +1 -3
- package/dist/application/binary/BinarySessionExecution.js +3 -5
- package/dist/application/binary/BinarySessionOpen.js +1 -1
- 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 +9 -13
- package/dist/application/javascript/JavaScriptApplicationEvidence.js +2 -6
- package/dist/application/javascript/JavaScriptApplicationService.js +6 -1
- package/dist/application/javascript/JavaScriptArtifactAnalysis.js +5 -3
- package/dist/application/javascript/JavaScriptArtifactGraphBuilder.js +11 -9
- 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 +43 -16
- package/dist/application/javascript/JavaScriptArtifactReconstruction.js +46 -6
- package/dist/application/javascript/JavaScriptModuleRelationships.js +1 -1
- package/dist/application/javascript/JavaScriptRuntimeObservationService.js +3 -3
- package/dist/application/javascript/JavaScriptSemanticGraphAsyncProjection.js +2 -3
- 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 +42 -19
- package/dist/application/managed/ManagedMemberComparisonService.js +2 -1
- package/dist/application/managed/ManagedNativeVerificationService.js +2 -1
- package/dist/application/process/ProcessCli.js +11 -11
- package/dist/application/process/ProcessEvidence.js +0 -1
- package/dist/artifacts/ArtifactProvider.js +39 -14
- package/dist/artifacts/ArtifactReader.js +31 -0
- package/dist/artifacts/DirectoryArtifactReader.js +2 -1
- package/dist/artifacts/MachOSliceArtifactReader.js +9 -2
- package/dist/artifacts/NativeDmgArtifactReader.js +65 -20
- 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 +21 -3
- package/dist/artifacts/extraction/ArtifactExtraction.js +78 -21
- package/dist/artifacts/inventory/ArtifactGraphConstruction.js +67 -61
- package/dist/artifacts/inventory/ArtifactInventory.js +0 -1
- package/dist/artifacts/inventory/reader.js +3 -3
- package/dist/artifacts/inventory/scanCanonical.js +48 -24
- package/dist/artifacts/inventory/scanReader.js +5 -9
- package/dist/browser/BrowserScenarioPartialObservation.js +106 -0
- package/dist/browser/CdpBrowserProvider.js +2 -3
- package/dist/browser/CdpCaptureEventHandlers.js +2 -4
- package/dist/browser/CdpCaptureEvents.js +0 -1
- package/dist/browser/CdpCaptureValues.js +20 -0
- package/dist/browser/CdpElectronProvider.js +0 -2
- package/dist/browser/CdpElectronScriptEvents.js +2 -8
- package/dist/browser/CdpElectronScripts.js +2 -3
- 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 +2 -56
- package/dist/browser/PlaywrightElectronActiveProvider.js +10 -6
- 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/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 +32 -27
- package/dist/cli/coreNativeCommands.js +9 -10
- package/dist/cli/electronCommands.js +4 -4
- package/dist/cli/interactiveSetup.js +6 -6
- 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/utilityCommands.js +9 -9
- package/dist/cli.js +16 -8
- package/dist/cliBrowserScenarioCommands.js +2 -2
- package/dist/cliCommandNames.js +1 -0
- package/dist/cliJsonInput.js +15 -1
- 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 +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 +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 +2 -2
- package/dist/contracts/enhancedToolContracts.js +4 -3
- package/dist/contracts/evm/evmToolContracts.js +1 -1
- package/dist/contracts/functionWorkflowToolContracts.js +1 -1
- package/dist/contracts/inputSchemaPresentation.js +90 -0
- package/dist/contracts/investigationExamples.js +4 -3
- package/dist/contracts/javascript/electronToolContracts.js +1 -1
- 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 +5 -10
- 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 +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/sessionToolContracts.js +14 -2
- package/dist/contracts/sessionToolSchemas.js +1 -14
- package/dist/contracts/toolContracts.js +2 -0
- package/dist/contracts/toolEffects.js +1 -0
- package/dist/contracts/toolOutputSchemaGroups.js +136 -92
- package/dist/contracts/toolOutputSchemaPrimitives.js +11 -21
- 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/analysisErrorCore.js +3 -0
- package/dist/domain/analysisErrorPresentation.js +18 -3
- package/dist/domain/analysisErrorProjection.js +24 -5
- 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/androidApplication.js +1 -1
- 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 +16 -3
- 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/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/browserScenarioDiff.js +0 -2
- package/dist/domain/browserScenarioDiffEvidence.js +0 -12
- package/dist/domain/browserScenarioDiffValues.js +2 -2
- package/dist/domain/browserScenarioValues.js +3 -4
- package/dist/domain/callPath.js +8 -9
- package/dist/domain/callPathSchemas.js +2 -2
- package/dist/domain/changedBehavior.js +3 -3
- package/dist/domain/completionLedgerGeneration.js +2 -1
- package/dist/domain/configurationErrors.js +12 -0
- package/dist/domain/conformancePackage.js +4 -3
- package/dist/domain/evidence.js +10 -36
- package/dist/domain/evidenceBundle.js +7 -9
- package/dist/domain/evidenceCompletionLedger.js +2 -1
- 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/javascript/electronActiveObservation.js +26 -69
- 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/javascriptApplicationEvidenceSchemas.js +2 -0
- package/dist/domain/javascript/javascriptApplicationGraph.js +26 -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/{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/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 +9 -3
- 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/javascriptSemanticDataEffects.js +1 -1
- package/dist/domain/javascript/javascriptSemanticGraph.js +88 -46
- 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 +1 -12
- package/dist/domain/javascript/javascriptSemanticProjection.js +2 -3
- package/dist/domain/javascript/javascriptSemanticPromises.js +2 -1
- package/dist/domain/javascript/javascriptSemanticResourceLimits.js +1 -1
- 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 +47 -54
- package/dist/domain/javascript/javascriptSourceMapPaths.js +104 -0
- package/dist/domain/javascript/javascriptStaticAnalysisCalls.js +2 -1
- package/dist/domain/javascript/javascriptStaticAnalysisHelpers.js +0 -1
- package/dist/domain/javascript/sourceToBundleComparison.js +12 -3
- package/dist/domain/javascript/sourceToBundleSignals.js +47 -19
- package/dist/domain/localPath.js +1 -1
- package/dist/domain/managed/managedArtifact.js +6 -4
- package/dist/domain/managed/managedMemberComparison.js +2 -9
- 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 +5 -3
- 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 +13 -12
- 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 +41 -22
- 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 +15 -11
- package/dist/domain/process/processTraceSpecification.js +3 -4
- package/dist/domain/providerAdapterError.js +2 -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 +3 -3
- package/dist/domain/reconstructionVerificationSchemas.js +2 -1
- package/dist/domain/referenceSourceGraph.js +20 -21
- package/dist/domain/staticRuntimeCorrelation.js +2 -2
- package/dist/domain/stringPatterns.js +6 -0
- package/dist/domain/swiftSymbolClassification.js +61 -0
- package/dist/domain/symbolAnalysis.js +66 -18
- 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 +0 -2
- package/dist/domain/webScriptExport.js +1 -1
- 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/FirmwareProvider.js +4 -4
- package/dist/generatedPackageMetadata.js +2 -2
- package/dist/ghidra/GhidraAnalysisProfile.js +3 -6
- package/dist/ghidra/GhidraClient.js +91 -32
- 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 +40 -12
- package/dist/ghidra/GhidraJavaLaunch.js +6 -2
- package/dist/ghidra/GhidraLauncher.js +15 -7
- 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 +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/V8InspectorCaptureProjection.js +1 -1
- package/dist/inspector/V8InspectorProvider.js +38 -28
- package/dist/javascript/recovery/WakaruCommand.js +7 -2
- package/dist/javascript/recovery/WakaruExecution.js +5 -2
- 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/native/AppleMachoSelection.js +16 -6
- package/dist/native/CommandRunner.js +9 -7
- package/dist/native/LldbCallTracer.js +8 -2
- package/dist/native/NativeMacOSProvider.js +25 -15
- 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 +11 -5
- package/dist/process/ProviderProcess.js +1 -3
- package/dist/process/capture/FilesystemSnapshot.js +50 -13
- package/dist/process/capture/ProcessCaptureError.js +13 -0
- package/dist/process/capture/ProcessCaptureLifecycle.js +158 -70
- 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 +25 -14
- package/dist/server/createServer.js +49 -36
- 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 +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 -2
- 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/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 +2 -3
- package/dist/server/registerElectronTools.js +10 -13
- package/dist/server/registerEnhancedTools.js +23 -23
- package/dist/server/registerEvidenceTools.js +3 -4
- 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/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 +4 -19
- 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 +12 -18
- 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 +39 -30
- package/scripts/rea.mjs +3 -6
- package/skills/reverse-engineer-anything/SKILL.md +9 -8
- 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 +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/main/reload.js +0 -12
- package/dist/main/state.js +0 -3
- package/dist/server/sessionToolPolicies.js +0 -2
|
@@ -4,11 +4,13 @@ export class ProviderAdapterError extends AnalysisError {
|
|
|
4
4
|
providerId;
|
|
5
5
|
operation;
|
|
6
6
|
_tag = "ProviderAdapterError";
|
|
7
|
+
userMessage;
|
|
7
8
|
diagnostics;
|
|
8
9
|
constructor(providerId, operation, options = {}) {
|
|
9
10
|
super(`Provider ${providerId} adapter failed during ${operation}`, options);
|
|
10
11
|
this.providerId = providerId;
|
|
11
12
|
this.operation = operation;
|
|
13
|
+
this.userMessage = options.userMessage;
|
|
12
14
|
this.diagnostics =
|
|
13
15
|
options.diagnostics === undefined
|
|
14
16
|
? undefined
|
|
@@ -5,8 +5,11 @@ import { evidenceBundleSchema, parseEvidenceBundle } from "./evidenceBundle.js";
|
|
|
5
5
|
import { evaluateReconstructionClaims, evaluateReconstructionPackageProofs, evaluateReconstructionSurfaces, evaluateReconstructionCoverageRisks, recommendedReconstructionProbes, } from "./reconstructionCoverageEvaluation.js";
|
|
6
6
|
import { digestSchema } from "./../domain/digests.js";
|
|
7
7
|
import { prefixedDigestSchema } from "./../domain/digests.js";
|
|
8
|
+
import { offsetDateTimeSchema } from "./offsetDateTime.js";
|
|
8
9
|
const evidenceIdSchema = prefixedDigestSchema("ev");
|
|
9
|
-
const stableIdSchema = z
|
|
10
|
+
const stableIdSchema = z
|
|
11
|
+
.string()
|
|
12
|
+
.regex(/^[A-Za-z][A-Za-z0-9._:\x2f\x2d]{0,199}$/u);
|
|
10
13
|
const boundedTextSchema = z.string().trim().min(1);
|
|
11
14
|
const authoritySchema = z.enum([
|
|
12
15
|
"observed",
|
|
@@ -86,7 +89,7 @@ const verifierContractSchema = verifierContractBaseSchema.extend({
|
|
|
86
89
|
const verifierResultSchema = z.strictObject({
|
|
87
90
|
verifier_id: stableIdSchema,
|
|
88
91
|
contract_sha256: digestSchema,
|
|
89
|
-
observed_at:
|
|
92
|
+
observed_at: offsetDateTimeSchema,
|
|
90
93
|
status: z.enum([
|
|
91
94
|
"pass",
|
|
92
95
|
"fail",
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
+
import { STABLE_IDENTIFIER_PATTERN } from "./stringPatterns.js";
|
|
2
3
|
import { evidenceBundleSchema } from "./evidenceBundle.js";
|
|
3
4
|
import { digestSchema } from "./../domain/digests.js";
|
|
4
5
|
import { prefixedDigestSchema } from "./../domain/digests.js";
|
|
5
6
|
const evidenceIdSchema = prefixedDigestSchema("ev");
|
|
6
|
-
const stableIdSchema = z.string().regex(
|
|
7
|
+
const stableIdSchema = z.string().regex(STABLE_IDENTIFIER_PATTERN);
|
|
7
8
|
const textSchema = z.string().trim().min(1);
|
|
8
9
|
export const obligationStatusSchema = z.enum([
|
|
9
10
|
"unowned",
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
+
import { STABLE_IDENTIFIER_PATTERN } from "./stringPatterns.js";
|
|
2
3
|
import { evidenceBundleSchema } from "./evidenceBundle.js";
|
|
3
4
|
import { reconstructionObligationLedgerSchema } from "./reconstructionObligationLedgerSchemas.js";
|
|
4
5
|
import { digestSchema } from "./../domain/digests.js";
|
|
5
6
|
import { prefixedDigestSchema } from "./../domain/digests.js";
|
|
6
7
|
const evidenceIdSchema = prefixedDigestSchema("ev");
|
|
7
|
-
const stableIdSchema = z.string().regex(
|
|
8
|
+
const stableIdSchema = z.string().regex(STABLE_IDENTIFIER_PATTERN);
|
|
8
9
|
const boundedTextSchema = z.string().trim().min(1);
|
|
9
10
|
export const readinessStatusSchema = z.enum([
|
|
10
11
|
"pass",
|
|
@@ -7,13 +7,13 @@ import { uniqueSorted } from "./canonicalOrdering.js";
|
|
|
7
7
|
import { comparisonSourceEvidenceSides } from "./comparisonSourceEvidence.js";
|
|
8
8
|
import { parseEvidence } from "./evidence.js";
|
|
9
9
|
import { parseEvidenceBundle } from "./evidenceBundle.js";
|
|
10
|
-
import { functionComparisonResultSchema } from "./
|
|
10
|
+
import { functionComparisonResultSchema } from "./functionComparisonSchemas.js";
|
|
11
11
|
import { PROCESS_PROVIDER, isProcessEvidenceProvider, } from "./process/processEvidenceProvider.js";
|
|
12
12
|
import { functionDossierSchema } from "./hopperValues.js";
|
|
13
|
-
import { deriveProcessComparisonStatus, PROCESS_COMPARISON_DIMENSIONS, processCaptureComparisonSchema,
|
|
13
|
+
import { deriveProcessComparisonStatus, PROCESS_COMPARISON_DIMENSIONS, processCaptureComparisonSchema, } from "./process/processComparison.js";
|
|
14
|
+
import { parseProcessCapture } from "./process/processCaptureParsing.js";
|
|
14
15
|
import { reconstructionClaimResultSchema, reconstructionSpecificationSchema, reconstructionVerificationResultSchema, } from "./reconstructionVerificationSchemas.js";
|
|
15
16
|
import { reconstructionClaimUnknowns, reconstructionProbes, reconstructionUnknownHeads, } from "./reconstructionUnknowns.js";
|
|
16
|
-
export { reconstructionVerificationInputSchema, reconstructionVerificationResultSchema, } from "./reconstructionVerificationSchemas.js";
|
|
17
17
|
const providers = {
|
|
18
18
|
behavioral: {
|
|
19
19
|
operation: "compare_process_captures",
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
+
import { IDENTIFIER_PATTERN } from "./stringPatterns.js";
|
|
2
3
|
import { digestSchema } from "./../domain/digests.js";
|
|
3
4
|
import { prefixedDigestSchema } from "./../domain/digests.js";
|
|
4
5
|
import { PROCESS_COMPARISON_DIMENSIONS } from "./process/processComparison.js";
|
|
5
6
|
const evidenceIdSchema = prefixedDigestSchema("ev");
|
|
6
7
|
const unknownIdSchema = prefixedDigestSchema("unk");
|
|
7
|
-
const claimIdSchema = z.string().regex(
|
|
8
|
+
const claimIdSchema = z.string().regex(IDENTIFIER_PATTERN);
|
|
8
9
|
const titleSchema = z.string().trim().min(1);
|
|
9
10
|
const verificationStatusSchema = z.enum(["pass", "fail", "unknown"]);
|
|
10
11
|
const commonClaim = {
|
|
@@ -66,26 +66,27 @@ const sourceDirectorySchema = z.strictObject({
|
|
|
66
66
|
const symlinkTargetSchema = z
|
|
67
67
|
.string()
|
|
68
68
|
.min(1)
|
|
69
|
-
.refine((target) => target
|
|
70
|
-
isPortableAbsoluteSymlinkTarget(target) ||
|
|
69
|
+
.refine((target) => isPortableAbsoluteSymlinkTarget(target) ||
|
|
71
70
|
(!target.startsWith("/") &&
|
|
72
71
|
!target.includes("\\") &&
|
|
73
72
|
posix.normalize(target) === target), "Expected a normalized POSIX symlink target");
|
|
74
73
|
const isPortableAbsoluteSymlinkTarget = (target) => target.startsWith("/") ||
|
|
75
74
|
/^[A-Za-z]:[\\/]/u.test(target) ||
|
|
76
75
|
/^\\\\[^\\/]+[\\/][^\\/]+/u.test(target);
|
|
77
|
-
const sourceSymlinkSchema = z.
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
"internal",
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
"
|
|
87
|
-
|
|
88
|
-
|
|
76
|
+
const sourceSymlinkSchema = z.union([
|
|
77
|
+
z.strictObject({
|
|
78
|
+
...entryBaseShape,
|
|
79
|
+
kind: z.literal("symlink"),
|
|
80
|
+
target: symlinkTargetSchema,
|
|
81
|
+
target_state: z.enum(["internal", "external", "missing"]),
|
|
82
|
+
}),
|
|
83
|
+
z.strictObject({
|
|
84
|
+
...entryBaseShape,
|
|
85
|
+
kind: z.literal("symlink"),
|
|
86
|
+
target: z.null(),
|
|
87
|
+
target_state: z.enum(["unreadable", "unknown"]),
|
|
88
|
+
}),
|
|
89
|
+
]);
|
|
89
90
|
const sourceEntrySchema = z.union([
|
|
90
91
|
sourceFileSchema,
|
|
91
92
|
sourceDirectorySchema,
|
|
@@ -152,7 +153,7 @@ const graphShape = {
|
|
|
152
153
|
caller: z
|
|
153
154
|
.string()
|
|
154
155
|
.min(1)
|
|
155
|
-
.regex(/^[\w
|
|
156
|
+
.regex(/^[\w .:@\x2f+\x2d]+$/u),
|
|
156
157
|
}),
|
|
157
158
|
limitations: z.array(boundedTextSchema),
|
|
158
159
|
};
|
|
@@ -232,13 +233,11 @@ const checkSymlinks = (graph, paths, context) => {
|
|
|
232
233
|
for (const [index, entry] of graph.entries.entries()) {
|
|
233
234
|
if (entry.kind !== "symlink")
|
|
234
235
|
continue;
|
|
236
|
+
if (entry.target === null)
|
|
237
|
+
continue;
|
|
235
238
|
const absolute = isPortableAbsoluteSymlinkTarget(entry.target);
|
|
236
|
-
if ((entry.target_state === "external" &&
|
|
237
|
-
entry.
|
|
238
|
-
!absolute) ||
|
|
239
|
-
(entry.target_state === "internal" &&
|
|
240
|
-
(entry.target === "<outside-root>" || absolute)) ||
|
|
241
|
-
(entry.target_state === "missing" && entry.target === "<outside-root>"))
|
|
239
|
+
if ((entry.target_state === "external" && !absolute) ||
|
|
240
|
+
(entry.target_state === "internal" && absolute))
|
|
242
241
|
context.addIssue({
|
|
243
242
|
code: "custom",
|
|
244
243
|
message: "Symlink target path does not match its target state",
|
|
@@ -5,9 +5,9 @@ import { artifactComparisonResultSchema } from "./artifactComparison.js";
|
|
|
5
5
|
import { uniqueSorted } from "./canonicalOrdering.js";
|
|
6
6
|
import { comparisonSourceEvidenceIds } from "./comparisonSourceEvidence.js";
|
|
7
7
|
import { evidenceSchema, parseEvidence } from "./evidence.js";
|
|
8
|
-
import { functionComparisonResultSchema } from "./
|
|
8
|
+
import { functionComparisonResultSchema } from "./functionComparisonSchemas.js";
|
|
9
9
|
import { PROCESS_PROVIDER, isProcessEvidenceProvider, } from "./process/processEvidenceProvider.js";
|
|
10
|
-
import { comparisonStatusSchema, processCaptureComparisonSchema, } from "./process/
|
|
10
|
+
import { comparisonStatusSchema, processCaptureComparisonSchema, } from "./process/processComparison.js";
|
|
11
11
|
import { PROCESS_COMPARISON_DIMENSIONS } from "./process/processComparison.js";
|
|
12
12
|
import { prefixedDigestSchema } from "./../domain/digests.js";
|
|
13
13
|
const evidenceIdSchema = prefixedDigestSchema("ev");
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/** Portable ASCII identifier starting with a letter. */
|
|
2
|
+
export const IDENTIFIER_PATTERN = /^[A-Za-z][A-Za-z0-9._\x2d]*$/u;
|
|
3
|
+
/** Stable evidence identifier, also admitting namespace and path separators. */
|
|
4
|
+
export const STABLE_IDENTIFIER_PATTERN = /^[A-Za-z][A-Za-z0-9._:\x2f\x2d]*$/u;
|
|
5
|
+
/** Canonical padded base64, including zero pad bits and the empty encoding. */
|
|
6
|
+
export const CANONICAL_BASE64_PATTERN = /^(?:[A-Za-z0-9+\x2f]{4})*(?:[A-Za-z0-9+\x2f][AQgw]==|[A-Za-z0-9+\x2f]{2}[AEIMQUYcgkosw048]=)?$/;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
const LEGACY_CATEGORIES = [
|
|
2
|
+
["_TtC", "classes"],
|
|
3
|
+
["_TtV", "structs"],
|
|
4
|
+
["_TtO", "enums"],
|
|
5
|
+
["_TtP", "protocols"],
|
|
6
|
+
["_TtE", "extensions"],
|
|
7
|
+
];
|
|
8
|
+
const NOMINAL_CATEGORIES = new Map([
|
|
9
|
+
["C", "classes"],
|
|
10
|
+
["V", "structs"],
|
|
11
|
+
["O", "enums"],
|
|
12
|
+
["P", "protocols"],
|
|
13
|
+
]);
|
|
14
|
+
/**
|
|
15
|
+
* Recognize Swift manglings and decode literal module/nominal contexts.
|
|
16
|
+
* Substitutions, generic contexts, and other encodings remain unknown.
|
|
17
|
+
*/
|
|
18
|
+
export const classifySwiftSymbol = (name) => {
|
|
19
|
+
const prefix = /^_?(?:\$[sS]|_T0)/u.exec(name);
|
|
20
|
+
if (prefix === null) {
|
|
21
|
+
if (!name.includes("_Tt"))
|
|
22
|
+
return undefined;
|
|
23
|
+
return {
|
|
24
|
+
category: LEGACY_CATEGORIES.find(([prefix]) => name.startsWith(prefix))?.[1] ??
|
|
25
|
+
null,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
const mangling = name.slice(prefix[0].length);
|
|
29
|
+
let offset = identifierEnd(mangling, 0);
|
|
30
|
+
if (offset === undefined)
|
|
31
|
+
return { category: null };
|
|
32
|
+
let category = null;
|
|
33
|
+
for (;;) {
|
|
34
|
+
const end = identifierEnd(mangling, offset);
|
|
35
|
+
if (end === undefined)
|
|
36
|
+
break;
|
|
37
|
+
const kind = mangling.charAt(end);
|
|
38
|
+
const nominal = NOMINAL_CATEGORIES.get(kind);
|
|
39
|
+
if (nominal === undefined) {
|
|
40
|
+
if (kind === "E" && category !== null)
|
|
41
|
+
category = "extensions";
|
|
42
|
+
break;
|
|
43
|
+
}
|
|
44
|
+
category = nominal;
|
|
45
|
+
offset = end + 1;
|
|
46
|
+
}
|
|
47
|
+
return { category };
|
|
48
|
+
};
|
|
49
|
+
const identifierEnd = (mangling, offset) => {
|
|
50
|
+
const lengthToken = /^[1-9][0-9]*/u.exec(mangling.slice(offset))?.[0];
|
|
51
|
+
if (lengthToken === undefined)
|
|
52
|
+
return undefined;
|
|
53
|
+
const start = offset + lengthToken.length;
|
|
54
|
+
const end = start + Number(lengthToken);
|
|
55
|
+
// Swift identifiers with substitutions/punycode need a fuller decoder.
|
|
56
|
+
if (!Number.isSafeInteger(end) ||
|
|
57
|
+
end > mangling.length ||
|
|
58
|
+
!/^[A-Za-z_][A-Za-z0-9_]*$/u.test(mangling.slice(start, end)))
|
|
59
|
+
return undefined;
|
|
60
|
+
return end;
|
|
61
|
+
};
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { classifySwiftSymbol, } from "./swiftSymbolClassification.js";
|
|
1
2
|
/** Select and deduplicate Objective-C class labels. */
|
|
2
3
|
export const discoverObjcClasses = (names, pattern) => {
|
|
3
4
|
const classes = uniqueByName(names
|
|
@@ -16,33 +17,80 @@ export const discoverObjcProtocols = (names) => {
|
|
|
16
17
|
protocols: protocols.map(toJsonEntry),
|
|
17
18
|
};
|
|
18
19
|
};
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
["structs", "
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
["extensions", "_TtE"],
|
|
25
|
-
];
|
|
26
|
-
/** Categorize deduplicated Swift mangled symbols. */
|
|
27
|
-
export const categorizeSwiftTypes = (procedures, filter = {}) => {
|
|
28
|
-
const groups = Object.fromEntries([...SWIFT_CATEGORIES.map(([category]) => category), "other"].map((category) => [category, []]));
|
|
20
|
+
/** Categorize procedure names using Swift manglings at their exact addresses. */
|
|
21
|
+
export const categorizeSwiftTypes = (procedures, filter = {}, symbols = []) => {
|
|
22
|
+
const groups = Object.fromEntries(["classes", "structs", "enums", "protocols", "extensions", "other"].map((category) => [category, []]));
|
|
23
|
+
const aliases = swiftAliasesByAddress(symbols);
|
|
24
|
+
const pattern = filter.pattern;
|
|
29
25
|
const seen = new Set();
|
|
26
|
+
const unclassifiedNames = new Set();
|
|
27
|
+
const unclassified = [];
|
|
30
28
|
for (const entry of procedures) {
|
|
31
|
-
if (
|
|
29
|
+
if (seen.has(entry.name))
|
|
32
30
|
continue;
|
|
33
|
-
const
|
|
34
|
-
|
|
31
|
+
const mangledNames = [
|
|
32
|
+
...new Set([
|
|
33
|
+
...(classifySwiftSymbol(entry.name) === undefined ? [] : [entry.name]),
|
|
34
|
+
...(aliases.get(entry.address) ?? []),
|
|
35
|
+
]),
|
|
36
|
+
];
|
|
37
|
+
if (mangledNames.length === 0)
|
|
35
38
|
continue;
|
|
36
|
-
if (
|
|
39
|
+
if (pattern !== undefined &&
|
|
40
|
+
![entry.name, ...mangledNames].some((name) => name.includes(pattern)))
|
|
37
41
|
continue;
|
|
38
|
-
|
|
39
|
-
|
|
42
|
+
const kinds = new Set(mangledNames.map((name) => classifySwiftSymbol(name)?.category ?? null));
|
|
43
|
+
const category = kinds.size === 1 ? ([...kinds][0] ?? null) : null;
|
|
44
|
+
const item = {
|
|
45
|
+
address: entry.address,
|
|
46
|
+
name: entry.name,
|
|
47
|
+
mangled_names: mangledNames,
|
|
48
|
+
};
|
|
49
|
+
if (category === null && !unclassifiedNames.has(entry.name)) {
|
|
50
|
+
unclassifiedNames.add(entry.name);
|
|
51
|
+
unclassified.push({
|
|
52
|
+
...item,
|
|
53
|
+
reason: kinds.size > 1 && !kinds.has(null)
|
|
54
|
+
? "conflicting_categories"
|
|
55
|
+
: "category_not_decoded",
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
const bucket = category ?? "other";
|
|
59
|
+
if (filter.category === undefined || filter.category === bucket) {
|
|
60
|
+
seen.add(entry.name);
|
|
61
|
+
groups[bucket]?.push(item);
|
|
62
|
+
}
|
|
40
63
|
}
|
|
41
64
|
const categories = Object.fromEntries(Object.entries(groups).map(([category, items]) => [
|
|
42
65
|
category,
|
|
43
|
-
{ count: items.length, items
|
|
66
|
+
{ count: items.length, items },
|
|
44
67
|
]));
|
|
45
|
-
return {
|
|
68
|
+
return {
|
|
69
|
+
total: Object.values(groups).reduce((sum, items) => sum + items.length, 0),
|
|
70
|
+
categories,
|
|
71
|
+
unclassified,
|
|
72
|
+
limitations: [
|
|
73
|
+
"Identification uses Swift mangled procedure names or same-address symbol aliases. Demangled names without retained Swift manglings cannot be identified. Counts deduplicate procedure names, not source declarations.",
|
|
74
|
+
...(unclassified.length === 0
|
|
75
|
+
? []
|
|
76
|
+
: [
|
|
77
|
+
"Some Swift categories could not be established from the retained manglings. Unclassified observations remain inline regardless of the category filter.",
|
|
78
|
+
]),
|
|
79
|
+
],
|
|
80
|
+
};
|
|
81
|
+
};
|
|
82
|
+
const swiftAliasesByAddress = (symbols) => {
|
|
83
|
+
const aliases = new Map();
|
|
84
|
+
for (const { address, name } of symbols) {
|
|
85
|
+
if (classifySwiftSymbol(name) === undefined)
|
|
86
|
+
continue;
|
|
87
|
+
const existing = aliases.get(address);
|
|
88
|
+
if (existing === undefined)
|
|
89
|
+
aliases.set(address, [name]);
|
|
90
|
+
else
|
|
91
|
+
existing.push(name);
|
|
92
|
+
}
|
|
93
|
+
return aliases;
|
|
46
94
|
};
|
|
47
95
|
const uniqueByName = (entries) => {
|
|
48
96
|
const seen = new Set();
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { canonicalDigest } from "./comparisonSemantics.js";
|
|
2
2
|
import { webCaptureDiffSchema, } from "./webCaptureDiffSchemas.js";
|
|
3
|
-
export { captureSnapshotSchema, compareWebCapturesInputSchema, webCaptureDiffSchema, } from "./webCaptureDiffSchemas.js";
|
|
4
3
|
/** Compare normalized observations without treating incomplete absence as proof. */
|
|
5
4
|
export const compareWebCaptures = (input) => {
|
|
6
5
|
const before = input.before.inspection;
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { emptyArraySchema } from "./emptyArraySchema.js";
|
|
3
|
-
import { webPageInspectionSchema } from "./
|
|
3
|
+
import { webPageInspectionSchema } from "./browserObservationSchemas.js";
|
|
4
4
|
import { webMcpDiscoverySchema } from "./webMcpDiscovery.js";
|
|
5
5
|
/** One normalized passive page snapshot accepted by capture comparison. */
|
|
6
6
|
export const captureSnapshotSchema = z.object({
|
|
7
|
-
inspection: webPageInspectionSchema,
|
|
8
|
-
webmcp: webMcpDiscoverySchema
|
|
7
|
+
inspection: webPageInspectionSchema.describe("Complete normalized_result from inspect_web_page, including capture identity, observations, completeness, and limitations."),
|
|
8
|
+
webmcp: webMcpDiscoverySchema
|
|
9
|
+
.nullable()
|
|
10
|
+
.default(null)
|
|
11
|
+
.describe("Complete normalized_result from discover_webmcp_tools for this capture, or null when it was not recorded."),
|
|
9
12
|
});
|
|
10
13
|
/** Input for deterministic comparison of two normalized web captures. */
|
|
11
14
|
export const compareWebCapturesInputSchema = z.strictObject({
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
import {
|
|
2
|
+
import { webRuntimeLocationSchema, webRuntimeScopeSchema, webRuntimeSourceSchema, webRuntimeTargetSchema, } from "./webRuntime.js";
|
|
3
|
+
import { browserVersionSchema } from "./browserObservationSchemas.js";
|
|
3
4
|
/** Inspect listeners registered directly on the first main-document CSS match. */
|
|
4
5
|
export const inspectWebEventListenersInputSchema = webRuntimeScopeSchema.extend({
|
|
5
6
|
selector: z.string().min(1),
|
|
6
7
|
});
|
|
7
8
|
/** A listener declaration and its source location do not establish that it ran. */
|
|
8
9
|
export const webEventListenersSchema = z.object({
|
|
9
|
-
browser:
|
|
10
|
+
browser: browserVersionSchema,
|
|
10
11
|
target: webRuntimeTargetSchema,
|
|
11
12
|
inspected_at: z.iso.datetime(),
|
|
12
13
|
selected_node: z.object({
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { jsonObjectSchema } from "./jsonValue.js";
|
|
3
|
-
import {
|
|
3
|
+
import { webRuntimeLocationSchema, webRuntimeScopeSchema, webRuntimeSourceSchema, webRuntimeTargetSchema, } from "./webRuntime.js";
|
|
4
|
+
import { browserVersionSchema } from "./browserObservationSchemas.js";
|
|
4
5
|
/** Explicit instrumentation request for one finite, externally driven execution window. */
|
|
5
6
|
export const observeWebExecutionInputSchema = webRuntimeScopeSchema.extend({
|
|
6
7
|
observation_ms: z.number().int().min(1).max(2_147_483_647).default(10_000),
|
|
@@ -18,7 +19,7 @@ const functionSchema = z.object({
|
|
|
18
19
|
});
|
|
19
20
|
/** Precise V8 ranges retain their nested structure and counts without summing them. */
|
|
20
21
|
export const webExecutionSchema = z.object({
|
|
21
|
-
browser:
|
|
22
|
+
browser: browserVersionSchema,
|
|
22
23
|
target: webRuntimeTargetSchema,
|
|
23
24
|
window: z.object({
|
|
24
25
|
armed_at: z.iso.datetime(),
|
|
@@ -71,8 +71,6 @@ export const webRuntimeTargetSchema = z.object({
|
|
|
71
71
|
frame_id: z.string().min(1),
|
|
72
72
|
loader_id: z.string().nullable(),
|
|
73
73
|
});
|
|
74
|
-
/** Producer product identity is observed separately from the unknown host platform. */
|
|
75
|
-
export const webRuntimeBrowserSchema = browserVersionSchema;
|
|
76
74
|
/** Complete runtime evidence has explicit byte budgets rather than silent item truncation. */
|
|
77
75
|
export const WEB_RUNTIME_LIMITS = {
|
|
78
76
|
protocolBytes: 64 * 1024 * 1024,
|
|
@@ -18,7 +18,7 @@ const sourceSchema = z.discriminatedUnion("kind", [
|
|
|
18
18
|
kind: z.literal("page-script"),
|
|
19
19
|
script_key: z.string().min(1),
|
|
20
20
|
frame_id: z.string().nullable(),
|
|
21
|
-
is_module: z.boolean(),
|
|
21
|
+
is_module: z.boolean().nullable(),
|
|
22
22
|
language: z.string().nullable(),
|
|
23
23
|
source_map_url: z.string().nullable(),
|
|
24
24
|
}),
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { managedArtifactInspectionSchema, } from "../domain/managed/managedArtifact.js";
|
|
2
2
|
import { readManagedPeLayout, } from "./ManagedPeReader.js";
|
|
3
|
-
import { managedTableRowCounts, readManagedMetadataInventory, } from "./ManagedMetadataInventory.js";
|
|
3
|
+
import { managedTableRowCounts, readManagedMetadataInventory, readManagedResourceDirectory, } from "./ManagedMetadataInventory.js";
|
|
4
4
|
import { readManagedMetadataLayout, } from "./ManagedMetadataLayout.js";
|
|
5
5
|
import { ManagedReaderFailure } from "./ManagedReaderFailure.js";
|
|
6
6
|
const flagNames = (flags) => {
|
|
@@ -228,23 +228,6 @@ const partialMetadataResult = ({ target, bytes, layout, issue, }) => ({
|
|
|
228
228
|
"CLI metadata could not be read because the PE/CLI structure is malformed or unsupported.",
|
|
229
229
|
],
|
|
230
230
|
});
|
|
231
|
-
const mapResources = (bytes, layout, issues) => {
|
|
232
|
-
const resources = layout.cli?.resources;
|
|
233
|
-
if (resources === undefined || (resources.rva === 0 && resources.size === 0))
|
|
234
|
-
return null;
|
|
235
|
-
try {
|
|
236
|
-
return {
|
|
237
|
-
offset: layout.rvaToOffset(resources.rva, resources.size, "cli.resources"),
|
|
238
|
-
size: resources.size,
|
|
239
|
-
};
|
|
240
|
-
}
|
|
241
|
-
catch (cause) {
|
|
242
|
-
if (!(cause instanceof ManagedReaderFailure))
|
|
243
|
-
throw cause;
|
|
244
|
-
issues.push(cause.issue);
|
|
245
|
-
return null;
|
|
246
|
-
}
|
|
247
|
-
};
|
|
248
231
|
/** Inspect PE/CLI identity directly from local bytes without CLR loading. */
|
|
249
232
|
export const inspectManagedArtifactBytes = (bytes, target) => {
|
|
250
233
|
const layout = readManagedPeLayout(bytes);
|
|
@@ -267,7 +250,7 @@ export const inspectManagedArtifactBytes = (bytes, target) => {
|
|
|
267
250
|
}));
|
|
268
251
|
}
|
|
269
252
|
const resourceIssues = [];
|
|
270
|
-
const resourceDirectory =
|
|
253
|
+
const resourceDirectory = readManagedResourceDirectory(layout, resourceIssues);
|
|
271
254
|
const inventory = readManagedMetadataInventory(bytes, metadata, resourceDirectory);
|
|
272
255
|
const issues = [...resourceIssues, ...inventory.issues];
|
|
273
256
|
const limitations = [
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { managedMemberInspectionSchema, } from "../domain/managed/managedArtifact.js";
|
|
2
2
|
import { readManagedPeLayout, } from "./ManagedPeReader.js";
|
|
3
|
-
import { managedTableRowCounts, readManagedMetadataInventory, } from "./ManagedMetadataInventory.js";
|
|
3
|
+
import { readManagedResourceDirectory, managedTableRowCounts, readManagedMetadataInventory, } from "./ManagedMetadataInventory.js";
|
|
4
4
|
import { readManagedMetadataLayout } from "./ManagedMetadataLayout.js";
|
|
5
|
-
import { ManagedReaderFailure } from "./ManagedReaderFailure.js";
|
|
5
|
+
import { ManagedReaderFailure, uniqueManagedParseIssues, } from "./ManagedReaderFailure.js";
|
|
6
6
|
import { parseTypes, typeRanges } from "./ManagedMemberInspectorCore.js";
|
|
7
7
|
import { edges, parseFields, parseMemberRefs, parseMethods, } from "./ManagedMemberRows.js";
|
|
8
8
|
const unavailable = (target, bytes, issue) => managedMemberInspectionSchema.parse({
|
|
@@ -39,23 +39,13 @@ const unavailable = (target, bytes, issue) => managedMemberInspectionSchema.pars
|
|
|
39
39
|
: "The CLI metadata could not be admitted; managed member inspection is unavailable.",
|
|
40
40
|
],
|
|
41
41
|
});
|
|
42
|
-
const
|
|
43
|
-
if (pe.cli === null ||
|
|
44
|
-
pe.cli.resources.rva === 0 ||
|
|
45
|
-
pe.cli.resources.size === 0)
|
|
46
|
-
return null;
|
|
47
|
-
return {
|
|
48
|
-
offset: pe.rvaToOffset(pe.cli.resources.rva, pe.cli.resources.size, "cli.resources"),
|
|
49
|
-
size: pe.cli.resources.size,
|
|
50
|
-
};
|
|
51
|
-
};
|
|
52
|
-
const readMemberInventory = (bytes, pe) => {
|
|
42
|
+
const readMemberInventory = (bytes, pe, issues) => {
|
|
53
43
|
const cli = pe.cli;
|
|
54
44
|
if (cli === null)
|
|
55
45
|
throw new TypeError("Managed inventory requires CLI metadata");
|
|
56
46
|
const rootOffset = pe.rvaToOffset(cli.metadata.rva, cli.metadata.size, "cli.metadata");
|
|
57
47
|
const layout = readManagedMetadataLayout(bytes, rootOffset, cli.metadata.size);
|
|
58
|
-
const inventory = readManagedMetadataInventory(bytes, layout,
|
|
48
|
+
const inventory = readManagedMetadataInventory(bytes, layout, readManagedResourceDirectory(pe, issues));
|
|
59
49
|
return { layout, inventory };
|
|
60
50
|
};
|
|
61
51
|
/** Inspect metadata members and method bodies without loading target code. */
|
|
@@ -65,9 +55,9 @@ export const inspectManagedMembersBytes = (bytes, target) => {
|
|
|
65
55
|
return unavailable(target, bytes, pe.cliIssue);
|
|
66
56
|
const issues = [];
|
|
67
57
|
try {
|
|
68
|
-
const { layout, inventory } = readMemberInventory(bytes, pe);
|
|
58
|
+
const { layout, inventory } = readMemberInventory(bytes, pe, issues);
|
|
69
59
|
issues.push(...inventory.issues);
|
|
70
|
-
const ranges = typeRanges(bytes, layout);
|
|
60
|
+
const ranges = typeRanges(bytes, layout, issues);
|
|
71
61
|
const parsedTypes = parseTypes(bytes, layout, ranges);
|
|
72
62
|
issues.push(...parsedTypes.issues);
|
|
73
63
|
const fields = parseFields(bytes, layout, ranges);
|
|
@@ -79,7 +69,11 @@ export const inspectManagedMembersBytes = (bytes, target) => {
|
|
|
79
69
|
pe,
|
|
80
70
|
ranges,
|
|
81
71
|
});
|
|
82
|
-
|
|
72
|
+
issues.push(...fields.issues, ...methods.issues);
|
|
73
|
+
const coverageIssues = uniqueManagedParseIssues(issues);
|
|
74
|
+
const incompleteMembers = [...fields.fields, ...memberRefs.refs, ...methods.methods].some((member) => member.signature.parse_status !== "decoded") ||
|
|
75
|
+
methods.methods.some((method) => method.body.status === "partial" ||
|
|
76
|
+
method.body.status === "malformed");
|
|
83
77
|
const related = edges(methods.methods, methods.core, fields.core, memberRefs.core);
|
|
84
78
|
return managedMemberInspectionSchema.parse({
|
|
85
79
|
artifact: {
|
|
@@ -106,7 +100,7 @@ export const inspectManagedMembersBytes = (bytes, target) => {
|
|
|
106
100
|
call_edges: related.callEdges,
|
|
107
101
|
field_accesses: related.fieldAccesses,
|
|
108
102
|
coverage: {
|
|
109
|
-
state:
|
|
103
|
+
state: issues.length === 0 && !incompleteMembers ? "complete" : "partial",
|
|
110
104
|
issues: coverageIssues,
|
|
111
105
|
},
|
|
112
106
|
limitations: [
|