rea-agents 3.0.0 → 3.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 +83 -108
- package/bridge/ghidra/ReaGhidraBridge.java +609 -841
- package/bridge/hopper_bridge.py +99 -344
- package/dist/application/AbortablePromise.js +6 -3
- package/dist/application/AnalysisContextQueries.js +21 -9
- package/dist/application/AnalysisSnapshotCache.js +0 -1
- package/dist/application/AnalysisSnapshotFiles.js +7 -7
- package/dist/application/AndroidApplicationService.js +1 -1
- package/dist/application/AppleApplicationService.js +1 -1
- package/dist/application/ArtifactExtraction.js +35 -54
- package/dist/application/ArtifactExtractionDestination.js +17 -0
- package/dist/application/ArtifactGraphConstruction.js +2 -17
- package/dist/application/ArtifactInventory/classify.js +2 -6
- package/dist/application/ArtifactInventory/hash.js +2 -20
- package/dist/application/ArtifactInventory/policy.js +17 -0
- package/dist/application/ArtifactInventory/reader.js +1 -4
- package/dist/application/ArtifactInventory/scanCanonical.js +8 -15
- package/dist/application/ArtifactInventory/scanReader.js +76 -58
- package/dist/application/ArtifactInventory/types.js +1 -5
- package/dist/application/ArtifactInventory.js +6 -14
- package/dist/application/AuthorizedArtifactInventory.js +3 -13
- package/dist/application/BinarySession.js +54 -28
- package/dist/application/BinarySessionComposition.js +0 -11
- package/dist/application/BinarySessionOpen.js +2 -1
- package/dist/application/BinarySessionRecords.js +24 -86
- package/dist/application/BinarySessionStatus.js +16 -21
- package/dist/application/BinaryTargetResolver.js +216 -0
- package/dist/application/BrowserEvidence.js +39 -57
- package/dist/application/BrowserObservationService.js +3 -6
- package/dist/application/BrowserScenarioCaptureService.js +3 -6
- package/dist/application/BrowserScenarioEvidence.js +3 -3
- package/dist/application/CallPathTracing.js +2 -36
- package/dist/application/CapabilityClientRequirements.js +26 -0
- package/dist/application/CapabilityInventory.js +143 -77
- package/dist/application/ClientConfigurationDocument.js +27 -0
- package/dist/application/ClientRegistrationStatus.js +16 -13
- package/dist/application/CommandShimReplay.js +14 -1
- package/dist/application/DirectAnalysis.js +22 -46
- package/dist/application/DirectAnalysisStatus.js +5 -61
- package/dist/application/Doctor.js +11 -32
- package/dist/application/DoctorDiagnostics.js +1 -2
- package/dist/application/DoctorScope.js +1 -1
- package/dist/application/ElectronActiveEvidence.js +50 -0
- package/dist/application/ElectronActiveObservationPort.js +1 -0
- package/dist/application/ElectronActiveObservationService.js +78 -0
- package/dist/application/ElectronBoundaryAnalysis.js +7 -8
- package/dist/application/ElectronBoundaryGraphContext.js +1 -1
- package/dist/application/ElectronBoundaryGraphIpc.js +3 -3
- package/dist/application/ElectronBoundaryGraphNative.js +1 -2
- package/dist/application/ElectronBoundaryGraphWindows.js +6 -8
- package/dist/application/ElectronEvidence.js +4 -7
- package/dist/application/ElectronObservationService.js +5 -9
- package/dist/application/EnhancedLiteralTracing.js +42 -65
- package/dist/application/EnhancedTools.js +98 -64
- package/dist/application/EvidenceBundleCommands.js +16 -12
- package/dist/application/EvidenceBundleFiles.js +9 -15
- package/dist/application/EvidenceLedger.js +14 -42
- package/dist/application/FilesystemSnapshot.js +2 -3
- package/dist/application/InterfaceBuilderAnalysis.js +266 -0
- package/dist/application/InventoryProjectionEvidence.js +4 -2
- package/dist/application/InvestigationProviders.js +1 -1
- package/dist/application/JavaScriptApplicationEvidence.js +2 -5
- package/dist/application/JavaScriptApplicationEvidenceGraph.js +6 -10
- package/dist/application/JavaScriptApplicationService.js +6 -29
- package/dist/application/JavaScriptApplicationWorkflowEvidence.js +5 -5
- package/dist/application/JavaScriptApplicationWorkflowService.js +0 -8
- package/dist/application/JavaScriptArtifactAnalysis.js +38 -127
- package/dist/application/JavaScriptArtifactFiles.js +67 -107
- package/dist/application/JavaScriptArtifactGraphAccumulator.js +0 -7
- package/dist/application/JavaScriptArtifactGraphBuilder.js +7 -58
- package/dist/application/JavaScriptArtifactGraphBundlers.js +1 -6
- package/dist/application/JavaScriptArtifactGraphContext.js +12 -39
- package/dist/application/JavaScriptArtifactGraphDocuments.js +4 -11
- package/dist/application/JavaScriptArtifactGraphEvidence.js +0 -14
- package/dist/application/JavaScriptArtifactGraphFindings.js +3 -3
- package/dist/application/JavaScriptArtifactGraphStructure.js +16 -17
- package/dist/application/JavaScriptArtifactPathResolution.js +61 -49
- package/dist/application/JavaScriptArtifactReconstruction.js +5 -10
- package/dist/application/JavaScriptArtifactReconstructionInput.js +2 -14
- package/dist/application/JavaScriptJsonModules.js +2 -2
- package/dist/application/JavaScriptModuleRelationships.js +22 -27
- package/dist/application/JavaScriptReplayPermission.js +1 -1
- package/dist/application/JavaScriptReplayPlanning.js +9 -3
- package/dist/application/JavaScriptReplayService.js +29 -47
- package/dist/application/JavaScriptReturnShapeProjection.js +12 -42
- package/dist/application/JavaScriptRuntimeObservationEvidence.js +7 -8
- package/dist/application/JavaScriptRuntimeObservationService.js +4 -8
- package/dist/application/JavaScriptRuntimeReconciliationEvidence.js +2 -3
- package/dist/application/JavaScriptSemanticGraphBuilder.js +11 -41
- package/dist/application/JavaScriptSemanticGraphConstruction.js +5 -29
- package/dist/application/JavaScriptSemanticGraphEvidence.js +1 -1
- package/dist/application/JavaScriptSemanticGraphFingerprintProjection.js +1 -1
- package/dist/application/JavaScriptSemanticGraphFlowProjection.js +0 -13
- package/dist/application/JavaScriptSemanticGraphProjection.js +1 -3
- package/dist/application/JavaScriptSemanticTraceService.js +1 -10
- package/dist/application/JsonFiles.js +79 -0
- package/dist/application/LinuxHopper.js +11 -9
- package/dist/application/LoopbackReplay.js +26 -23
- package/dist/application/LoopbackReplayRecorder.js +29 -1
- package/dist/application/ManagedApplicationGraphService.js +1 -2
- package/dist/application/ManagedMemberComparisonService.js +11 -41
- package/dist/application/ManagedNativeVerificationService.js +1 -2
- package/dist/application/ManagedReconstructionService.js +1 -1
- package/dist/application/ManagedRuntimeCorrelationService.js +14 -13
- package/dist/application/NativeApiInspection.js +2 -7
- package/dist/application/NativeUiActionTrace.js +394 -0
- package/dist/application/NodeRuntimeCharacterizationService.js +11 -16
- package/dist/application/PermissionAuthority.js +15 -7
- package/dist/application/PermissionFailure.js +5 -0
- package/dist/application/ProcessCaptureAuthority.js +5 -7
- package/dist/application/ProcessCaptureJournal.js +3 -2
- package/dist/application/ProcessCaptureLifecycle.js +10 -12
- package/dist/application/ProcessCheckpoints.js +29 -11
- package/dist/application/ProcessCli.js +8 -17
- package/dist/application/ProcessEvidence.js +5 -7
- package/dist/application/ProcessHarness.js +60 -20
- package/dist/application/ProcessNormalization.js +2 -1
- package/dist/application/ProcessReactiveCoordinator.js +2 -4
- package/dist/application/ProcessReactiveEffects.js +9 -3
- package/dist/application/ProcessReactiveHarness.js +13 -7
- package/dist/application/ProcessSampling.js +2 -4
- package/dist/application/ProcessTimer.js +39 -0
- package/dist/application/ProjectPermissionStore.js +39 -95
- package/dist/application/RealHopperAssertions.js +20 -66
- package/dist/application/ReconstructionCoverageService.js +12 -58
- package/dist/application/ReconstructionObligationAuthority.js +2 -2
- package/dist/application/ReconstructionObligationCandidates.js +4 -4
- package/dist/application/ReconstructionObligationLedgerEvaluation.js +8 -15
- package/dist/application/ReconstructionObligationLedgerProjection.js +3 -7
- package/dist/application/ReconstructionObligationLedgerService.js +19 -38
- package/dist/application/ReferenceSourceImport.js +21 -47
- package/dist/application/ReferenceSourceImportEntries.js +2 -4
- package/dist/application/ReferenceSourceImportPolicy.js +5 -32
- package/dist/application/ReferenceSourceImportTypes.js +0 -16
- package/dist/application/RuntimeExecutableDiagnostics.js +55 -29
- package/dist/application/SessionProviderRouter.js +2 -2
- package/dist/application/Setup.js +1 -3
- package/dist/application/SetupClientConfiguration.js +22 -88
- package/dist/application/SetupRegistrationEnvironment.js +0 -7
- package/dist/application/StoreFileLock.js +119 -0
- package/dist/application/TerminalRenderer.js +2 -3
- package/dist/application/Uninstall.js +9 -14
- package/dist/application/UnknownEvidence.js +1 -1
- package/dist/application/WindowsCapabilities.js +5 -4
- package/dist/artifacts/ArtifactPaths.js +2 -5
- package/dist/artifacts/ArtifactProvider.js +43 -67
- package/dist/artifacts/DirectoryArtifactReader.js +13 -8
- package/dist/artifacts/MachOSliceArtifactReader.js +1 -5
- package/dist/artifacts/NativeDmgArtifactReader.js +11 -11
- package/dist/artifacts/NibArchive.js +269 -0
- package/dist/artifacts/SafeOutputTree.js +21 -31
- package/dist/browser/BrowserProcessStartup.js +1 -2
- package/dist/browser/CdpAuthorizedMainFrame.js +16 -0
- package/dist/browser/CdpBrowserProvider.js +3 -13
- package/dist/browser/CdpCanonicalJsonDigest.js +9 -0
- package/dist/browser/CdpCaptureDocuments.js +28 -76
- package/dist/browser/CdpCaptureEventBodyShapes.js +13 -33
- package/dist/browser/CdpCaptureEventHandlers.js +22 -87
- package/dist/browser/CdpCaptureEvents.js +2 -8
- package/dist/browser/CdpCaptureStorage.js +9 -20
- package/dist/browser/CdpCaptureStorageFingerprints.js +85 -95
- package/dist/browser/CdpCaptureValues.js +21 -21
- package/dist/browser/CdpConnection.js +10 -25
- package/dist/browser/CdpElectronInspection.js +29 -51
- package/dist/browser/CdpElectronProvider.js +10 -35
- package/dist/browser/CdpElectronScriptEvents.js +8 -16
- package/dist/browser/CdpElectronScripts.js +6 -35
- package/dist/browser/CdpElectronWorkers.js +6 -10
- package/dist/browser/CdpEndpoint.js +25 -41
- package/dist/browser/CdpObservationSession.js +14 -26
- package/dist/browser/CdpPageCapture.js +34 -48
- package/dist/browser/CdpPageCaptureScripts.js +1 -19
- package/dist/browser/CdpPageCaptureWorkers.js +6 -10
- package/dist/browser/CdpSafeMetadata.js +19 -22
- package/dist/browser/CdpScreenshot.js +3 -5
- package/dist/browser/CdpTargetSession.js +1 -2
- package/dist/browser/CdpWebMcpDiscovery.js +13 -22
- package/dist/browser/ElectronFileScope.js +8 -19
- package/dist/browser/JavaScriptRuntimeScope.js +10 -10
- package/dist/browser/PlaywrightBrowserScenarioProvider.js +31 -64
- package/dist/browser/PlaywrightElectronActiveActions.js +309 -0
- package/dist/browser/PlaywrightElectronActiveProvider.js +274 -0
- package/dist/browser/PlaywrightExecutionBoundary.js +16 -5
- package/dist/browser/PlaywrightScenarioActions.js +3 -7
- package/dist/browser/PlaywrightScenarioArtifacts.js +23 -92
- package/dist/browser/PlaywrightScenarioBrowser.js +7 -9
- package/dist/browser/PlaywrightScenarioEvents.js +45 -94
- package/dist/browser/PlaywrightScenarioSession.js +18 -34
- package/dist/browser/PngVisualDiff.js +22 -14
- package/dist/browser/SensitiveTextCapture.js +1 -18
- package/dist/browser/V8InspectorCaptureProjection.js +7 -7
- package/dist/browser/V8InspectorEndpoint.js +12 -14
- package/dist/browser/V8InspectorProvider.js +20 -61
- package/dist/browser/WebSourceMapFetcher.js +56 -176
- package/dist/catalogIdentity.js +12 -60
- package/dist/cli/artifactCommands.js +49 -77
- package/dist/cli/coreAnalysisCommands.js +83 -133
- package/dist/cli/javascriptApplicationAnalysis.js +1 -9
- package/dist/cli/managedCommands.js +6 -271
- package/dist/cli/setupCommands.js +3 -12
- package/dist/cli/utilityCommands.js +7 -41
- package/dist/cli.js +0 -2
- package/dist/cliApplicationCommands.js +44 -114
- package/dist/cliBrowserAdvancedCommands.js +12 -102
- package/dist/cliBrowserCommands.js +19 -124
- package/dist/cliBrowserContext.js +30 -0
- package/dist/cliCommandNames.js +5 -5
- package/dist/cliElectronCommands.js +49 -71
- package/dist/cliEvidenceCommands.js +8 -77
- package/dist/cliJavaScriptRuntimeCommands.js +18 -92
- package/dist/cliJsonInput.js +4 -14
- package/dist/cliObservationOptions.js +11 -92
- package/dist/cliPolicyCommands.js +2 -16
- package/dist/cliProcessCommands.js +3 -3
- package/dist/cliSetup.js +0 -13
- package/dist/config/browserScenario.js +77 -0
- package/dist/config/electronAutomation.js +35 -0
- package/dist/config/environment.js +6 -9
- package/dist/config/javascriptReplay.js +41 -0
- package/dist/config/managedRuntime.js +25 -0
- package/dist/config/parseConfig.js +56 -232
- package/dist/config/parsers.js +16 -28
- package/dist/config/passiveObservation.js +87 -0
- package/dist/config/permissions.js +0 -7
- package/dist/config/processCapture.js +47 -0
- package/dist/contracts/analysisSearchContract.js +2 -5
- package/dist/contracts/applicationToolContracts.js +58 -114
- package/dist/contracts/applicationWorkflowInputContracts.js +29 -114
- package/dist/contracts/artifactComparisonExample.js +58 -60
- package/dist/contracts/artifactToolContracts.js +37 -91
- package/dist/contracts/browserScenarioToolContracts.js +6 -51
- package/dist/contracts/browserToolContracts.js +10 -75
- package/dist/contracts/electronToolContracts.js +27 -98
- package/dist/contracts/enhancedInputs.js +31 -78
- package/dist/contracts/errorSchemas.js +0 -1
- package/dist/contracts/functionComparisonExample.js +10 -24
- package/dist/contracts/functionInstructionContract.js +1 -3
- package/dist/contracts/functionWorkflowToolContracts.js +4 -5
- package/dist/contracts/hopperMemoryContracts.js +3 -3
- package/dist/contracts/investigationExamples.js +14 -11
- package/dist/contracts/javascriptApplicationWorkflowExamples.js +12 -19
- package/dist/contracts/javascriptRuntimeObservationToolContracts.js +2 -20
- package/dist/contracts/javascriptRuntimeReconciliationExample.js +45 -12
- package/dist/contracts/managedToolContracts.js +10 -104
- package/dist/contracts/managedWorkflowExamples.js +77 -125
- package/dist/contracts/managedWorkflowToolContracts.js +51 -74
- package/dist/contracts/nativeToolContracts.js +9 -14
- package/dist/contracts/processCaptureExample.js +2 -69
- package/dist/contracts/promptContracts.js +49 -67
- package/dist/contracts/providerSelection.js +0 -1
- package/dist/contracts/reconstructionReadinessExample.js +1 -6
- package/dist/contracts/sessionStatusContract.js +1 -17
- package/dist/contracts/sessionToolSchemas.js +52 -0
- package/dist/contracts/toolContractExamples.js +11 -10
- package/dist/contracts/toolContractHelpers.js +19 -0
- package/dist/contracts/toolContracts.js +60 -143
- package/dist/contracts/toolEffects.js +16 -9
- package/dist/contracts/toolOutputSchemaGroups.js +47 -86
- package/dist/contracts/toolOutputSchemaPrimitives.js +72 -62
- package/dist/contracts/toolSchemaMetadata.js +117 -0
- package/dist/contracts/unknownContractExamples.js +0 -2
- package/dist/doctorRuntime.js +1 -1
- package/dist/domain/analysisErrorPresentation.js +46 -54
- package/dist/domain/analysisErrorProjection.js +28 -37
- package/dist/domain/analysisProfile.js +3 -31
- package/dist/domain/analysisSnapshot.js +3 -12
- package/dist/domain/androidApplication.js +15 -52
- package/dist/domain/appleApplication.js +24 -65
- package/dist/domain/artifactComparison.js +11 -29
- package/dist/domain/artifactGraph.js +14 -44
- package/dist/domain/artifactInspection.js +38 -69
- package/dist/domain/artifactInventoryEvidence.js +27 -21
- package/dist/domain/binaryTarget.js +2 -219
- package/dist/domain/binaryTargetTypes.js +1 -0
- package/dist/domain/browserCaptureComparison.js +35 -60
- package/dist/domain/browserObservation.js +45 -197
- package/dist/domain/browserObservationSchemas.js +5 -23
- package/dist/domain/browserScenario.js +11 -14
- package/dist/domain/browserScenarioCapture.js +11 -12
- package/dist/domain/browserScenarioCaptureValues.js +146 -84
- package/dist/domain/browserScenarioDiff.js +2 -59
- package/dist/domain/browserScenarioDiffEvidence.js +51 -0
- package/dist/domain/browserScenarioDiffValues.js +21 -38
- package/dist/domain/browserScenarioValues.js +80 -109
- package/dist/domain/browserSession.js +4 -7
- package/dist/domain/bundleComparison.js +6 -32
- package/dist/domain/bytecodeProvider.js +53 -54
- package/dist/domain/callPath.js +50 -169
- package/dist/domain/callPathSchemas.js +79 -0
- package/dist/domain/changedBehavior.js +34 -60
- package/dist/domain/completionLedgerGeneration.js +8 -14
- package/dist/domain/conformancePackage.js +126 -97
- package/dist/domain/conformanceReplay.js +39 -11
- package/dist/domain/conformanceTrustGate.js +174 -30
- package/dist/domain/customProtocolCapture.js +4 -4
- package/dist/domain/electronActiveObservation.js +244 -0
- package/dist/domain/electronObservation.js +21 -83
- package/dist/domain/electronStaticAnalysisBrowser.js +36 -46
- package/dist/domain/electronStaticAnalysisIpc.js +38 -14
- package/dist/domain/electronStaticAnalysisNative.js +1 -8
- package/dist/domain/electronStaticAnalysisValues.js +14 -18
- package/dist/domain/errors.js +33 -54
- package/dist/domain/eventProcessTree.js +101 -90
- package/dist/domain/evidence.js +2 -10
- package/dist/domain/evidenceBundle.js +3 -5
- package/dist/domain/evidenceCompletionLedger.js +6 -8
- package/dist/domain/functionComparison.js +4 -14
- package/dist/domain/functionComparisonNormalization.js +8 -8
- package/dist/domain/functionComparisonResults.js +25 -15
- package/dist/domain/functionComparisonSchemas.js +49 -33
- package/dist/domain/functionDossierEvidence.js +31 -151
- package/dist/domain/hopperStartupFailure.js +1 -1
- package/dist/domain/hopperValues.js +17 -141
- package/dist/domain/inputIssueProjection.js +4 -1
- package/dist/domain/interfaceBuilderGraph.js +654 -0
- package/dist/domain/javascriptApplicationAnalysis.js +8 -112
- package/dist/domain/javascriptApplicationChangeGraph.js +22 -82
- package/dist/domain/javascriptApplicationEvidenceSchemas.js +59 -47
- package/dist/domain/javascriptApplicationGraph.js +3 -13
- package/dist/domain/javascriptApplicationGraphSchemas.js +12 -34
- package/dist/domain/javascriptApplicationVersionComparison.js +26 -30
- package/dist/domain/javascriptApplicationVersionComparisonSchemas.js +123 -68
- package/dist/domain/javascriptApplicationVersionItems.js +120 -53
- package/dist/domain/javascriptApplicationVersionKeys.js +24 -11
- package/dist/domain/javascriptAstFingerprint.js +25 -58
- package/dist/domain/javascriptAstValues.js +9 -0
- package/dist/domain/javascriptExportInstrumentation.js +2 -4
- package/dist/domain/javascriptExportShapeComparison.js +6 -7
- package/dist/domain/javascriptExportShapeComparisonSchemas.js +70 -77
- package/dist/domain/javascriptExportShapeSelection.js +17 -19
- package/dist/domain/javascriptFeatureSeed.js +20 -12
- package/dist/domain/javascriptFeatureTrace.js +13 -67
- package/dist/domain/javascriptFeatureTraceSchemas.js +24 -52
- package/dist/domain/javascriptFeatureTraversal.js +1 -44
- package/dist/domain/javascriptNativeHandoff.js +1 -1
- package/dist/domain/javascriptReplay.js +100 -101
- package/dist/domain/javascriptRuntimeLoadState.js +3 -8
- package/dist/domain/javascriptRuntimeObservation.js +43 -103
- package/dist/domain/javascriptRuntimeReconciliation.js +1 -3
- package/dist/domain/javascriptRuntimeReconciliationActive.js +80 -0
- package/dist/domain/javascriptRuntimeReconciliationGraph.js +21 -33
- package/dist/domain/javascriptRuntimeReconciliationMatching.js +75 -61
- package/dist/domain/javascriptRuntimeReconciliationParsing.js +21 -46
- package/dist/domain/javascriptRuntimeReconciliationResult.js +25 -19
- package/dist/domain/javascriptRuntimeReconciliationRuntime.js +8 -12
- package/dist/domain/javascriptRuntimeReconciliationSchemas.js +34 -49
- package/dist/domain/javascriptRuntimeStaticCandidates.js +3 -3
- package/dist/domain/javascriptSemanticAnalysis.js +12 -45
- package/dist/domain/javascriptSemanticAsyncEffects.js +1 -9
- package/dist/domain/javascriptSemanticCallResolution.js +6 -16
- package/dist/domain/javascriptSemanticCalls.js +5 -32
- package/dist/domain/javascriptSemanticChildProcesses.js +1 -11
- package/dist/domain/javascriptSemanticCoverage.js +11 -0
- package/dist/domain/javascriptSemanticDataEffectHelpers.js +1 -8
- package/dist/domain/javascriptSemanticDataEffects.js +1 -11
- package/dist/domain/javascriptSemanticFingerprints.js +3 -5
- package/dist/domain/javascriptSemanticGraphSchemas.js +25 -51
- package/dist/domain/javascriptSemanticGraphSerialization.js +2 -13
- package/dist/domain/javascriptSemanticIr.js +1 -29
- package/dist/domain/javascriptSemanticObjects.js +1 -5
- package/dist/domain/javascriptSemanticPrimitives.js +2 -9
- package/dist/domain/javascriptSemanticProjection.js +0 -18
- package/dist/domain/javascriptSemanticPromises.js +9 -16
- package/dist/domain/javascriptSemanticProvenance.js +16 -19
- package/dist/domain/javascriptSemanticQuery.js +17 -139
- package/dist/domain/javascriptSemanticQueryAssessment.js +9 -37
- package/dist/domain/javascriptSemanticQueryIdentity.js +2 -23
- package/dist/domain/javascriptSemanticQuerySchemas.js +14 -107
- package/dist/domain/javascriptSemanticResources.js +1 -6
- package/dist/domain/javascriptSemanticReturns.js +10 -27
- package/dist/domain/javascriptSemanticValueTypes.js +1 -0
- package/dist/domain/javascriptSemanticValues.js +44 -62
- package/dist/domain/javascriptStaticAnalysis.js +21 -43
- package/dist/domain/javascriptStaticAnalysisBundler.js +34 -93
- package/dist/domain/javascriptStaticAnalysisCalls.js +17 -16
- package/dist/domain/javascriptStaticAnalysisFindings.js +3 -19
- package/dist/domain/javascriptStaticAnalysisHelpers.js +47 -88
- package/dist/domain/javascriptStaticAnalysisState.js +1 -5
- package/dist/domain/javascriptStaticAnalysisTypes.js +1 -0
- package/dist/domain/jsonShape.js +7 -33
- package/dist/domain/localPath.js +7 -0
- package/dist/domain/managedApplicationGraph.js +9 -41
- package/dist/domain/managedApplicationGraphCoverage.js +24 -156
- package/dist/domain/managedApplicationGraphNodes.js +10 -13
- package/dist/domain/managedArtifact.js +14 -27
- package/dist/domain/managedMemberComparison.js +90 -92
- package/dist/domain/managedMemberComparisonCoverage.js +11 -33
- package/dist/domain/managedMemberComparisonItems.js +221 -0
- package/dist/domain/managedMemberComparisonMatch.js +8 -208
- package/dist/domain/managedNativeVerification.js +3 -6
- package/dist/domain/managedNativeVerificationMatch.js +55 -59
- package/dist/domain/managedNativeVerificationSchemas.js +83 -47
- package/dist/domain/managedReconstruction.js +19 -23
- package/dist/domain/managedRuntimeCorrelation.js +6 -9
- package/dist/domain/nativeApiBoundary.js +17 -14
- package/dist/domain/nativeInspection.js +0 -2
- package/dist/domain/nativeInvestigationGraph.js +351 -0
- package/dist/domain/nativeValueFlow.js +61 -0
- package/dist/domain/nodeRuntimeCharacterization.js +15 -18
- package/dist/domain/objcSwiftMetadata.js +254 -0
- package/dist/domain/peInspection.js +1 -1
- package/dist/domain/permissionPolicy.js +13 -0
- package/dist/domain/processCapture.js +76 -113
- package/dist/domain/processCaptureExample.js +68 -0
- package/dist/domain/processCaptureParsing.js +21 -0
- package/dist/domain/processCaptureReactiveSchema.js +68 -0
- package/dist/domain/processCaptureReactiveValidation.js +8 -3
- package/dist/domain/processCaptureValidation.js +8 -10
- package/dist/domain/processComparison.js +12 -16
- package/dist/domain/processObservation.js +5 -6
- package/dist/domain/processReactiveMatching.js +32 -46
- package/dist/domain/processReactiveRuntime.js +4 -8
- package/dist/domain/processReactiveScenario.js +28 -94
- package/dist/domain/processReactiveScenarioPreflight.js +5 -30
- package/dist/domain/processReactiveTransition.js +42 -21
- package/dist/domain/processScenario.js +62 -93
- package/dist/domain/processTraceComparison.js +0 -7
- package/dist/domain/processTraceEvaluation.js +14 -4
- package/dist/domain/processTraceSpecification.js +11 -17
- package/dist/domain/protocolCapture.js +11 -9
- package/dist/domain/reconstructionCoverage.js +62 -129
- package/dist/domain/reconstructionCoverageEvaluation.js +17 -17
- package/dist/domain/reconstructionObligationLedgerSchemas.js +45 -72
- package/dist/domain/reconstructionReadiness.js +1 -2
- package/dist/domain/reconstructionReadinessSchemas.js +66 -40
- package/dist/domain/reconstructionUnknowns.js +3 -3
- package/dist/domain/reconstructionVerification.js +13 -47
- package/dist/domain/reconstructionVerificationSchemas.js +50 -38
- package/dist/domain/referenceSourceGraph.js +53 -61
- package/dist/domain/referenceSourceImportParsing.js +3 -7
- package/dist/domain/replayMachine.js +19 -31
- package/dist/domain/replayMachineRun.js +15 -63
- package/dist/domain/replayMachineRuntime.js +46 -44
- package/dist/domain/replayMachineValues.js +84 -0
- package/dist/domain/residualUnknown.js +25 -30
- package/dist/domain/runtimeCharacterization.js +15 -16
- package/dist/domain/runtimeIdentification.js +48 -47
- package/dist/domain/sourceToBundleComparison.js +11 -87
- package/dist/domain/sourceToBundleComparisonSchemas.js +25 -50
- package/dist/domain/sourceToBundleSignals.js +11 -16
- package/dist/domain/staticRuntimeCorrelation.js +44 -54
- package/dist/domain/symbolAnalysis.js +10 -19
- package/dist/domain/unicodeCodePointOrder.js +12 -0
- package/dist/domain/webBundleAnalysis.js +70 -99
- package/dist/domain/webBundleAnalyzer.js +2 -4
- package/dist/domain/webBundleAnalyzerAst.js +0 -13
- package/dist/domain/webBundleAnalyzerInspection.js +26 -52
- package/dist/domain/webBundleAnalyzerResult.js +7 -24
- package/dist/domain/webCaptureDiff.js +48 -85
- package/dist/domain/webCaptureDiffSchemas.js +86 -0
- package/dist/domain/webContentArtifact.js +1 -10
- package/dist/domain/webMcpDiscovery.js +3 -14
- package/dist/domain/webScreenshot.js +58 -34
- package/dist/domain/zipPackageFormat.js +7 -0
- package/dist/dotnet/ManagedArtifactInspector.js +17 -50
- package/dist/dotnet/ManagedMemberInspector.js +27 -58
- package/dist/dotnet/ManagedMemberInspectorCore.js +14 -51
- package/dist/dotnet/ManagedMemberInstructionDecoder.js +2 -2
- package/dist/dotnet/ManagedMemberRows.js +16 -16
- package/dist/dotnet/ManagedMetadataHeaps.js +26 -8
- package/dist/dotnet/ManagedMetadataInventory.js +21 -30
- package/dist/dotnet/ManagedMetadataInventoryRows.js +57 -63
- package/dist/dotnet/ManagedMetadataLayout.js +3 -5
- package/dist/dotnet/ManagedMethodBodyReader.js +5 -30
- package/dist/dotnet/ManagedNativeBoundaryHelpers.js +19 -49
- package/dist/dotnet/ManagedNativeBoundaryInspector.js +13 -42
- package/dist/dotnet/ManagedPeReader.js +2 -2
- package/dist/dotnet/ManagedStaticProvider.js +13 -71
- package/dist/generatedMcpToolCatalog.js +1 -1
- package/dist/generatedPackageMetadata.js +1 -1
- package/dist/ghidra/GhidraAnalysisProfile.js +3 -8
- package/dist/ghidra/GhidraClient.js +5 -13
- package/dist/ghidra/GhidraClientStartup.js +1 -1
- package/dist/ghidra/GhidraClientWire.js +9 -5
- package/dist/ghidra/GhidraDefaults.js +0 -18
- package/dist/ghidra/GhidraDiagnostics.js +0 -2
- package/dist/ghidra/GhidraDoctor.js +16 -12
- package/dist/ghidra/GhidraFunctionValues.js +67 -108
- package/dist/ghidra/GhidraInstallation.js +98 -42
- package/dist/ghidra/GhidraInventoryValues.js +18 -77
- package/dist/ghidra/GhidraLauncher.js +0 -8
- package/dist/ghidra/GhidraProvider.js +32 -31
- package/dist/ghidra/GhidraProviderCapabilities.js +11 -48
- package/dist/ghidra/GhidraRequestQueue.js +6 -30
- package/dist/ghidra/GhidraResponseBuffer.js +1 -7
- package/dist/ghidra/GhidraSessionValues.js +0 -2
- package/dist/ghidra/GhidraSocketConnection.js +1 -1
- package/dist/ghidra/GhidraTransport.js +4 -7
- package/dist/ghidra/protocol.js +19 -42
- package/dist/hopper/BridgeLauncher.js +115 -37
- package/dist/hopper/HopperAnalysisProfile.js +3 -5
- package/dist/hopper/HopperCleanup.js +11 -9
- package/dist/hopper/HopperClient.js +5 -8
- package/dist/hopper/HopperProcessDiagnostic.js +2 -2
- package/dist/hopper/HopperProvider.js +0 -30
- package/dist/hopper/HopperRequestQueue.js +21 -40
- package/dist/hopper/HopperResponseStream.js +1 -9
- package/dist/hopper/HopperSessionValues.js +3 -2
- package/dist/hopper/HopperTargetLease.js +119 -0
- package/dist/hopper/LinuxPrivateDisplayDiagnostic.js +24 -31
- package/dist/hopper/LinuxPrivateDisplayProbe.js +21 -26
- package/dist/hopper/protocol.js +6 -4
- package/dist/main/reload.js +1 -9
- package/dist/main/shutdown.js +1 -1
- package/dist/main/state.js +0 -23
- package/dist/main/transport.js +27 -39
- package/dist/main.js +17 -15
- package/dist/mcpDoctor.js +27 -69
- package/dist/native/CommandRunner.js +18 -25
- package/dist/native/NativeMacOSProvider.js +13 -38
- package/dist/native/NativeMachoInspection.js +1 -1
- package/dist/process/BoundedFileBytes.js +17 -0
- package/dist/process/ExecFileOutput.js +11 -0
- package/dist/process/PendingOperations.js +8 -6
- package/dist/process/PrivateRuntimeRoot.js +17 -0
- package/dist/process/ProcessOwnership.js +67 -130
- package/dist/process/ProcessOwnershipIdentity.js +13 -0
- package/dist/process/ProcessOwnershipObservation.js +87 -0
- package/dist/process/ProcessOwnershipProcessTree.js +22 -0
- package/dist/process/ProviderDeadline.js +8 -12
- package/dist/process/ProviderProcess.js +7 -28
- package/dist/process/WindowsAuthority.js +32 -0
- package/dist/reference/ReferenceSourceReader.js +8 -24
- package/dist/reference/ReferenceSourceReaderEntries.js +11 -39
- package/dist/reference/ReferenceSourceReaderFile.js +13 -31
- package/dist/reference/ReferenceSourceReaderPaths.js +3 -18
- package/dist/reference/ReferenceSourceReaderValidate.js +3 -6
- package/dist/replay/JavaScriptReplayWorker.js +95 -13
- package/dist/replay/JavaScriptReplayWorkerTypes.js +1 -0
- package/dist/replay/LinuxJavaScriptReplayRunner.js +42 -43
- package/dist/replay/LinuxJavaScriptReplaySandbox.js +0 -19
- package/dist/replay/LinuxRuntimeClosure.js +1 -3
- package/dist/replay/ReplayOutcome.js +27 -18
- package/dist/replay/ReplayProcessLifecycle.js +32 -7
- package/dist/replay/ReplaySeccompFile.js +29 -0
- package/dist/replay/ReplayWorkerProtocol.js +33 -30
- package/dist/replay/SystemJavaScriptReplayHost.js +45 -74
- package/dist/server/ProcessCaptureElicitation.js +4 -8
- package/dist/server/createServer.js +145 -119
- package/dist/server/mcpClientMetadata.js +32 -0
- package/dist/server/promptCompletion.js +37 -61
- package/dist/server/recordDerivedEvidence.js +1 -1
- package/dist/server/registerApplicationTools/characterization.js +10 -21
- package/dist/server/registerApplicationTools/compareExportShapes.js +6 -16
- package/dist/server/registerApplicationTools/compareSourceToBundle.js +6 -15
- package/dist/server/registerApplicationTools/compareVersions.js +6 -16
- package/dist/server/registerApplicationTools/controlledReplay.js +8 -15
- package/dist/server/registerApplicationTools/coverage.js +7 -78
- package/dist/server/registerApplicationTools/helpers.js +1 -13
- package/dist/server/registerApplicationTools/obligationLedger.js +4 -8
- package/dist/server/registerApplicationTools/traceFeature.js +6 -15
- package/dist/server/registerApplicationTools/traceSemantics.js +5 -13
- package/dist/server/registerApplicationTools.js +0 -2
- package/dist/server/registerArtifactComparisonTool.js +27 -35
- package/dist/server/registerBrowserScenarioTool.js +3 -8
- package/dist/server/registerBrowserTools.js +36 -81
- package/dist/server/registerBundleComparisonTool.js +10 -16
- package/dist/server/registerCloseLifecycleTool.js +5 -27
- package/dist/server/registerElectronTools.js +29 -65
- package/dist/server/registerEnhancedTools.js +118 -127
- package/dist/server/registerEvidenceTools.js +19 -30
- package/dist/server/registerFunctionComparisonTool.js +35 -34
- package/dist/server/registerInvestigationTools/helpers.js +3 -32
- package/dist/server/registerInvestigationTools.js +36 -148
- package/dist/server/registerJavaScriptRuntimeObservationTools.js +15 -27
- package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +16 -23
- package/dist/server/registerManagedWorkflowTools/contract.js +2 -3
- package/dist/server/registerManagedWorkflowTools/evidence.js +19 -35
- package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +4 -14
- package/dist/server/registerManagedWorkflowTools/planManagedRuntimeCorrelation.js +4 -14
- package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +11 -20
- package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +10 -21
- package/dist/server/registerOfficialTools.js +8 -51
- package/dist/server/registerProcessComparisonTool.js +43 -38
- package/dist/server/registerPrompts.js +19 -17
- package/dist/server/registerReplayMachineTool.js +4 -10
- package/dist/server/registerSessionRecordTools.js +36 -153
- package/dist/server/registerSessionStatusTool.js +18 -96
- package/dist/server/registerSessionTools.js +34 -91
- package/dist/server/sessionAvailabilityPolicy.js +2 -3
- package/dist/server/sessionEvidence.js +9 -15
- package/dist/server/sessionToolPolicies.js +1 -13
- package/dist/server/toolRegistrationOptions.js +4 -192
- package/dist/server/toolResult.js +15 -67
- package/dist/serverIdentity.js +0 -20
- package/install.sh +1 -1
- package/package.json +27 -15
- package/scripts/electron-active-hook-boundaries.cjs +394 -0
- package/scripts/electron-active-hook.cjs +469 -0
- package/scripts/hopper-demo-x11.py +13 -32
- package/scripts/rea.mjs +1 -11
- package/skills/reverse-engineer-anything/SKILL.md +46 -11
- package/skills/reverse-engineer-anything/references/evidence-workflows.md +6 -4
- package/skills/reverse-engineer-anything/references/javascript-applications.md +13 -13
- package/skills/reverse-engineer-anything/references/native-and-artifacts.md +12 -8
- package/dist/application/ApplicationWorkflowEvidenceResolver.js +0 -180
- package/dist/application/BoundedJsonFiles.js +0 -86
- package/dist/application/CrossVersionInventory.js +0 -128
- package/dist/application/CrossVersionInvestigation.js +0 -301
- package/dist/application/CrossVersionInvestigationCollections.js +0 -23
- package/dist/application/CrossVersionInvestigationEvidence.js +0 -64
- package/dist/application/CrossVersionInvestigationReplay.js +0 -170
- package/dist/application/DeferredFileAuthorization.js +0 -61
- package/dist/application/DoctorProjection.js +0 -43
- package/dist/application/EnhancedToolPagination.js +0 -22
- package/dist/application/EvidenceReferenceResolver.js +0 -26
- package/dist/application/InvestigationWorkspaceStore.js +0 -204
- package/dist/application/ProcessPairedExperiment.js +0 -72
- package/dist/application/ReconstructionCoverageWorkspaceStore.js +0 -31
- package/dist/application/ReconstructionReadinessService.js +0 -48
- package/dist/cliInvestigationCommands.js +0 -173
- package/dist/domain/boundedCartesianProjection.js +0 -15
- package/dist/domain/investigationWorkspace.js +0 -346
- package/dist/domain/jsonLimits.js +0 -26
- package/dist/domain/knownPageCoverage.js +0 -21
- package/dist/domain/processPairedExperiment.js +0 -128
- package/dist/server/DynamicToolAvailability.js +0 -70
- package/dist/server/LazyToolCatalog.js +0 -134
- package/dist/server/hydrateServerTools.js +0 -191
- package/dist/server/javascriptApplicationResult.js +0 -106
- package/dist/server/permissionFailure.js +0 -12
- package/dist/server/registerApplicationTools/readiness.js +0 -55
- package/dist/server/registerEvidenceResources.js +0 -315
- package/dist/server/registerJavaScriptApplicationGraphResource.js +0 -65
- package/dist/server/registerReconstructionObligationLedgerResource.js +0 -32
- package/dist/server/registerReconstructionReadinessResource.js +0 -32
- package/dist/server/toolInputValidation.js +0 -77
- package/scripts/package-runner-bootstrap.mjs +0 -72
|
@@ -8,15 +8,12 @@ export const compareSourceToBundle = (input) => {
|
|
|
8
8
|
const mappings = compareMappings(input, projection);
|
|
9
9
|
const factors = {
|
|
10
10
|
...projection.factors,
|
|
11
|
-
omittedCandidateEvaluations: mappings.omittedCandidateEvaluations,
|
|
12
|
-
omittedCandidateReferences: mappings.omittedCandidateReferences,
|
|
13
11
|
};
|
|
14
12
|
const mappedCurrentIds = new Set(mappings.items.flatMap(({ current_node_ids: nodeIds }) => nodeIds));
|
|
15
13
|
const unmappedCurrentNodeIds = projection.currentNodes
|
|
16
14
|
.map(({ node_id: nodeId }) => nodeId)
|
|
17
15
|
.filter((nodeId) => !mappedCurrentIds.has(nodeId));
|
|
18
16
|
const semanticResult = {
|
|
19
|
-
schema_version: 1,
|
|
20
17
|
reference: {
|
|
21
18
|
root_sha256: input.reference.root_sha256,
|
|
22
19
|
inventory_state: input.reference.inventory_state,
|
|
@@ -42,10 +39,8 @@ export const compareSourceToBundle = (input) => {
|
|
|
42
39
|
const projectComparison = (input) => {
|
|
43
40
|
const allSources = historicalSourceFiles(input.reference);
|
|
44
41
|
const allCurrentNodes = sourceBearingNodes(input.application.graph.nodes);
|
|
45
|
-
const sources = allSources
|
|
46
|
-
const currentNodes = allCurrentNodes
|
|
47
|
-
const omittedSourceFiles = allSources.length - sources.length;
|
|
48
|
-
const omittedApplicationNodes = allCurrentNodes.length - currentNodes.length;
|
|
42
|
+
const sources = allSources;
|
|
43
|
+
const currentNodes = allCurrentNodes;
|
|
49
44
|
const index = buildSourceToBundleCandidateIndex(currentNodes);
|
|
50
45
|
return {
|
|
51
46
|
sources,
|
|
@@ -53,41 +48,23 @@ const projectComparison = (input) => {
|
|
|
53
48
|
index,
|
|
54
49
|
absenceComplete: input.reference.inventory_state === "complete" &&
|
|
55
50
|
input.application.graph.coverage.status === "complete" &&
|
|
56
|
-
!input.application.graph.coverage.truncated
|
|
57
|
-
omittedSourceFiles === 0 &&
|
|
58
|
-
omittedApplicationNodes === 0 &&
|
|
59
|
-
!index.pathIndexTruncated,
|
|
51
|
+
!input.application.graph.coverage.truncated,
|
|
60
52
|
factors: {
|
|
61
53
|
input,
|
|
62
|
-
omittedSourceFiles,
|
|
63
|
-
omittedApplicationNodes,
|
|
64
|
-
omittedCandidateEvaluations: 0,
|
|
65
|
-
omittedCandidateReferences: 0,
|
|
66
|
-
pathIndexTruncated: index.pathIndexTruncated,
|
|
67
54
|
},
|
|
68
55
|
};
|
|
69
56
|
};
|
|
70
57
|
const compareMappings = (input, projection) => {
|
|
71
|
-
let evaluationsRemaining = input.limits.max_candidate_evaluations;
|
|
72
58
|
let candidateEvaluations = 0;
|
|
73
|
-
let omittedCandidateEvaluations = 0;
|
|
74
|
-
let omittedCandidateReferences = 0;
|
|
75
59
|
const provisionalItems = [];
|
|
76
60
|
for (const source of projection.sources) {
|
|
77
61
|
const candidateIds = candidateIdsForSource(source, projection.index);
|
|
78
|
-
|
|
79
|
-
const
|
|
80
|
-
evaluationsRemaining -= retainedIds.length;
|
|
81
|
-
candidateEvaluations += retainedIds.length;
|
|
82
|
-
omittedCandidateEvaluations += omittedEvaluations;
|
|
83
|
-
const scored = retainedIds
|
|
62
|
+
candidateEvaluations += candidateIds.length;
|
|
63
|
+
const scored = candidateIds
|
|
84
64
|
.map((nodeId) => scoreSourceToBundleCandidate(source, nodeId, projection.index))
|
|
85
65
|
.filter((candidate) => candidate !== null)
|
|
86
66
|
.sort(compareCandidates);
|
|
87
|
-
const
|
|
88
|
-
const omittedCandidates = omittedEvaluations + scored.length - retainedCandidates.length;
|
|
89
|
-
omittedCandidateReferences += omittedCandidates;
|
|
90
|
-
const classification = classifyMapping(retainedCandidates, omittedCandidates === 0, projection.absenceComplete);
|
|
67
|
+
const classification = classifyMapping(scored, projection.absenceComplete);
|
|
91
68
|
const semantic = {
|
|
92
69
|
source_path: source.path,
|
|
93
70
|
source_sha256: source.sha256,
|
|
@@ -95,16 +72,10 @@ const compareMappings = (input, projection) => {
|
|
|
95
72
|
status: classification.status,
|
|
96
73
|
confidence: classification.confidence,
|
|
97
74
|
current_node_ids: classification.currentNodeIds,
|
|
98
|
-
candidates:
|
|
99
|
-
omitted_candidates: omittedCandidates,
|
|
75
|
+
candidates: scored,
|
|
100
76
|
limitations: uniqueSorted([
|
|
101
77
|
...source.limitations,
|
|
102
78
|
...classification.limitations,
|
|
103
|
-
...(omittedCandidates > 0
|
|
104
|
-
? [
|
|
105
|
-
`${String(omittedCandidates)} candidate references were omitted by comparison limits.`,
|
|
106
|
-
]
|
|
107
|
-
: []),
|
|
108
79
|
]),
|
|
109
80
|
};
|
|
110
81
|
provisionalItems.push({
|
|
@@ -115,8 +86,6 @@ const compareMappings = (input, projection) => {
|
|
|
115
86
|
return {
|
|
116
87
|
items: markMergedMappings(input, provisionalItems),
|
|
117
88
|
candidateEvaluations,
|
|
118
|
-
omittedCandidateEvaluations,
|
|
119
|
-
omittedCandidateReferences,
|
|
120
89
|
};
|
|
121
90
|
};
|
|
122
91
|
const comparisonCoverage = (projection, mappings, factors) => ({
|
|
@@ -124,32 +93,18 @@ const comparisonCoverage = (projection, mappings, factors) => ({
|
|
|
124
93
|
reference_inventory_state: factors.input.reference.inventory_state,
|
|
125
94
|
application_graph_status: factors.input.application.graph.coverage.status,
|
|
126
95
|
retained_source_files: projection.sources.length,
|
|
127
|
-
omitted_source_files: factors.omittedSourceFiles,
|
|
128
96
|
retained_application_nodes: projection.currentNodes.length,
|
|
129
|
-
omitted_application_nodes: factors.omittedApplicationNodes,
|
|
130
97
|
candidate_evaluations: mappings.candidateEvaluations,
|
|
131
|
-
omitted_candidate_evaluations: mappings.omittedCandidateEvaluations,
|
|
132
|
-
omitted_candidate_references: mappings.omittedCandidateReferences,
|
|
133
|
-
omitted_unmapped_current_nodes: 0,
|
|
134
98
|
});
|
|
135
99
|
const scoringModel = () => ({
|
|
136
|
-
algorithm: "rea-source-to-bundle-signals
|
|
100
|
+
algorithm: "rea-source-to-bundle-signals",
|
|
137
101
|
minimum_candidate_score: 20,
|
|
138
|
-
weights:
|
|
139
|
-
signal
|
|
102
|
+
weights: SOURCE_TO_BUNDLE_SIGNAL_WEIGHTS.map(([signal, weight]) => ({
|
|
103
|
+
signal,
|
|
140
104
|
weight,
|
|
141
105
|
})),
|
|
142
106
|
});
|
|
143
|
-
const classifyMapping = (candidates,
|
|
144
|
-
if (!evaluationComplete)
|
|
145
|
-
return {
|
|
146
|
-
status: "unknown",
|
|
147
|
-
confidence: "unknown",
|
|
148
|
-
currentNodeIds: [],
|
|
149
|
-
limitations: [
|
|
150
|
-
"Candidate evaluation stopped at the declared limit; a stronger match may be omitted.",
|
|
151
|
-
],
|
|
152
|
-
};
|
|
107
|
+
const classifyMapping = (candidates, absenceComplete) => {
|
|
153
108
|
const exact = candidates.filter((candidate) => hasSignal(candidate, "exact-source-digest"));
|
|
154
109
|
if (exact.length === 1)
|
|
155
110
|
return {
|
|
@@ -271,12 +226,6 @@ const comparisonSummary = (items) => ({
|
|
|
271
226
|
});
|
|
272
227
|
const countStatus = (items, status) => items.filter((item) => item.status === status).length;
|
|
273
228
|
const coverageStatus = (factors) => {
|
|
274
|
-
if (factors.omittedSourceFiles > 0 ||
|
|
275
|
-
factors.omittedApplicationNodes > 0 ||
|
|
276
|
-
factors.omittedCandidateEvaluations > 0 ||
|
|
277
|
-
factors.omittedCandidateReferences > 0 ||
|
|
278
|
-
factors.pathIndexTruncated)
|
|
279
|
-
return "truncated";
|
|
280
229
|
return factors.input.reference.inventory_state === "complete" &&
|
|
281
230
|
factors.input.application.graph.coverage.status === "complete"
|
|
282
231
|
? "complete-within-inputs"
|
|
@@ -296,31 +245,6 @@ const comparisonLimitations = (factors) => uniqueSorted([
|
|
|
296
245
|
: [
|
|
297
246
|
`Application graph coverage is ${factors.input.application.graph.coverage.status}; unmatched files remain unknown.`,
|
|
298
247
|
]),
|
|
299
|
-
...(factors.omittedSourceFiles > 0
|
|
300
|
-
? [
|
|
301
|
-
`${String(factors.omittedSourceFiles)} historical source files were omitted by max_source_files.`,
|
|
302
|
-
]
|
|
303
|
-
: []),
|
|
304
|
-
...(factors.omittedApplicationNodes > 0
|
|
305
|
-
? [
|
|
306
|
-
`${String(factors.omittedApplicationNodes)} source-bearing application nodes were omitted by max_application_nodes.`,
|
|
307
|
-
]
|
|
308
|
-
: []),
|
|
309
|
-
...(factors.omittedCandidateEvaluations > 0
|
|
310
|
-
? [
|
|
311
|
-
`${String(factors.omittedCandidateEvaluations)} candidate evaluations were omitted by max_candidate_evaluations.`,
|
|
312
|
-
]
|
|
313
|
-
: []),
|
|
314
|
-
...(factors.omittedCandidateReferences > 0
|
|
315
|
-
? [
|
|
316
|
-
`${String(factors.omittedCandidateReferences)} candidate references were omitted from item output.`,
|
|
317
|
-
]
|
|
318
|
-
: []),
|
|
319
|
-
...(factors.pathIndexTruncated
|
|
320
|
-
? [
|
|
321
|
-
"At least one current path exceeded the 128-segment suffix index bound.",
|
|
322
|
-
]
|
|
323
|
-
: []),
|
|
324
248
|
]);
|
|
325
249
|
const hasSignal = (candidate, kind) => candidate.signals.some((signal) => signal.kind === kind);
|
|
326
250
|
const compareCandidates = (left, right) => right.score - left.score ||
|
|
@@ -5,15 +5,15 @@ import { historicalSourceGraphSchema } from "./referenceSourceGraph.js";
|
|
|
5
5
|
const digestSchema = z.string().regex(/^[a-f0-9]{64}$/u);
|
|
6
6
|
const evidenceIdSchema = z.string().regex(/^ev_[a-f0-9]{64}$/u);
|
|
7
7
|
const nodeIdSchema = z.string().regex(/^jag_node_[a-f0-9]{64}$/u);
|
|
8
|
-
const
|
|
9
|
-
export const SOURCE_TO_BUNDLE_SIGNAL_WEIGHTS =
|
|
10
|
-
"exact-source-digest"
|
|
11
|
-
"source-map-original-path"
|
|
12
|
-
"current-path-exact"
|
|
13
|
-
"current-path-suffix"
|
|
14
|
-
"basename-match"
|
|
15
|
-
"language-extension"
|
|
16
|
-
|
|
8
|
+
const textSchema = z.string().min(1);
|
|
9
|
+
export const SOURCE_TO_BUNDLE_SIGNAL_WEIGHTS = [
|
|
10
|
+
["exact-source-digest", 100],
|
|
11
|
+
["source-map-original-path", 70],
|
|
12
|
+
["current-path-exact", 60],
|
|
13
|
+
["current-path-suffix", 40],
|
|
14
|
+
["basename-match", 20],
|
|
15
|
+
["language-extension", 5],
|
|
16
|
+
];
|
|
17
17
|
const sourceToBundleSignalKindSchema = z.enum([
|
|
18
18
|
"exact-source-digest",
|
|
19
19
|
"source-map-original-path",
|
|
@@ -22,47 +22,29 @@ const sourceToBundleSignalKindSchema = z.enum([
|
|
|
22
22
|
"basename-match",
|
|
23
23
|
"language-extension",
|
|
24
24
|
]);
|
|
25
|
-
|
|
26
|
-
max_source_files: z.number().int().min(1).max(100_000).default(10_000),
|
|
27
|
-
max_application_nodes: z.number().int().min(1).max(100_000).default(20_000),
|
|
28
|
-
max_candidate_nodes: z.number().int().min(1).max(1_000).default(100),
|
|
29
|
-
max_candidate_evaluations: z
|
|
30
|
-
.number()
|
|
31
|
-
.int()
|
|
32
|
-
.min(1)
|
|
33
|
-
.max(10_000_000)
|
|
34
|
-
.default(1_000_000),
|
|
35
|
-
});
|
|
36
|
-
/** Historical source inventory, authenticated application Evidence, and bounds. */
|
|
25
|
+
/** Historical source inventory and authenticated application Evidence. */
|
|
37
26
|
export const compareSourceToBundleInputSchema = z.strictObject({
|
|
38
27
|
reference: historicalSourceGraphSchema,
|
|
39
28
|
application: evidenceSchema,
|
|
40
|
-
limits: sourceToBundleLimitsSchema.default({
|
|
41
|
-
max_source_files: 10_000,
|
|
42
|
-
max_application_nodes: 20_000,
|
|
43
|
-
max_candidate_nodes: 100,
|
|
44
|
-
max_candidate_evaluations: 1_000_000,
|
|
45
|
-
}),
|
|
46
|
-
unknown_registry_approved: z.literal(true).optional(),
|
|
47
29
|
});
|
|
48
30
|
const sourceToBundleSignalSchema = z.strictObject({
|
|
49
31
|
kind: sourceToBundleSignalKindSchema,
|
|
50
32
|
weight: z.number().int().min(1).max(100),
|
|
51
|
-
source_value:
|
|
52
|
-
current_values: z.array(
|
|
33
|
+
source_value: textSchema,
|
|
34
|
+
current_values: z.array(textSchema).min(1),
|
|
53
35
|
});
|
|
54
36
|
const sourceToBundleCandidateSchema = z.strictObject({
|
|
55
37
|
current_node_id: nodeIdSchema,
|
|
56
38
|
current_node_kind: z.enum(JAVASCRIPT_APPLICATION_NODE_KINDS),
|
|
57
|
-
score: z.number().int().min(1)
|
|
39
|
+
score: z.number().int().min(1),
|
|
58
40
|
confidence: z.enum(["exact", "high", "medium", "low"]),
|
|
59
|
-
signals: z.array(sourceToBundleSignalSchema).min(1)
|
|
41
|
+
signals: z.array(sourceToBundleSignalSchema).min(1),
|
|
60
42
|
});
|
|
61
43
|
const sourceToBundleItemSchema = z.strictObject({
|
|
62
44
|
mapping_id: z.string().regex(/^stbc_item_[a-f0-9]{64}$/u),
|
|
63
|
-
source_path:
|
|
45
|
+
source_path: textSchema,
|
|
64
46
|
source_sha256: digestSchema.nullable(),
|
|
65
|
-
source_language:
|
|
47
|
+
source_language: textSchema.nullable(),
|
|
66
48
|
status: z.enum([
|
|
67
49
|
"unchanged",
|
|
68
50
|
"modified",
|
|
@@ -73,14 +55,12 @@ const sourceToBundleItemSchema = z.strictObject({
|
|
|
73
55
|
"unknown",
|
|
74
56
|
]),
|
|
75
57
|
confidence: z.enum(["exact", "high", "medium", "unknown"]),
|
|
76
|
-
current_node_ids: z.array(nodeIdSchema)
|
|
77
|
-
candidates: z.array(sourceToBundleCandidateSchema)
|
|
78
|
-
|
|
79
|
-
limitations: z.array(boundedTextSchema).max(100),
|
|
58
|
+
current_node_ids: z.array(nodeIdSchema),
|
|
59
|
+
candidates: z.array(sourceToBundleCandidateSchema),
|
|
60
|
+
limitations: z.array(textSchema),
|
|
80
61
|
});
|
|
81
62
|
/** Deterministic, evidence-bearing historical-source to shipped-bundle comparison. */
|
|
82
63
|
export const sourceToBundleComparisonResultSchema = z.strictObject({
|
|
83
|
-
schema_version: z.literal(1),
|
|
84
64
|
comparison_id: z.string().regex(/^stbc_[a-f0-9]{64}$/u),
|
|
85
65
|
reference: z.strictObject({
|
|
86
66
|
root_sha256: digestSchema,
|
|
@@ -92,7 +72,7 @@ export const sourceToBundleComparisonResultSchema = z.strictObject({
|
|
|
92
72
|
root_artifact_sha256: digestSchema,
|
|
93
73
|
}),
|
|
94
74
|
scoring: z.strictObject({
|
|
95
|
-
algorithm: z.literal("rea-source-to-bundle-signals
|
|
75
|
+
algorithm: z.literal("rea-source-to-bundle-signals"),
|
|
96
76
|
minimum_candidate_score: z.literal(20),
|
|
97
77
|
weights: z.array(z.strictObject({
|
|
98
78
|
signal: sourceToBundleSignalKindSchema,
|
|
@@ -108,10 +88,10 @@ export const sourceToBundleComparisonResultSchema = z.strictObject({
|
|
|
108
88
|
duplicated: z.number().int().min(0),
|
|
109
89
|
unknown: z.number().int().min(0),
|
|
110
90
|
}),
|
|
111
|
-
items: z.array(sourceToBundleItemSchema)
|
|
112
|
-
unmapped_current_node_ids: z.array(nodeIdSchema)
|
|
91
|
+
items: z.array(sourceToBundleItemSchema),
|
|
92
|
+
unmapped_current_node_ids: z.array(nodeIdSchema),
|
|
113
93
|
coverage: z.strictObject({
|
|
114
|
-
status: z.enum(["complete-within-inputs", "partial"
|
|
94
|
+
status: z.enum(["complete-within-inputs", "partial"]),
|
|
115
95
|
reference_inventory_state: z.enum(["complete", "partial", "unknown"]),
|
|
116
96
|
application_graph_status: z.enum([
|
|
117
97
|
"complete",
|
|
@@ -120,14 +100,9 @@ export const sourceToBundleComparisonResultSchema = z.strictObject({
|
|
|
120
100
|
"unavailable",
|
|
121
101
|
]),
|
|
122
102
|
retained_source_files: z.number().int().min(0),
|
|
123
|
-
omitted_source_files: z.number().int().min(0),
|
|
124
103
|
retained_application_nodes: z.number().int().min(0),
|
|
125
|
-
omitted_application_nodes: z.number().int().min(0),
|
|
126
104
|
candidate_evaluations: z.number().int().min(0),
|
|
127
|
-
omitted_candidate_evaluations: z.number().int().min(0),
|
|
128
|
-
omitted_candidate_references: z.number().int().min(0),
|
|
129
|
-
omitted_unmapped_current_nodes: z.number().int().min(0),
|
|
130
105
|
}),
|
|
131
|
-
evidence_links: z.array(evidenceIdSchema).
|
|
132
|
-
limitations: z.array(
|
|
106
|
+
evidence_links: z.array(evidenceIdSchema).length(1),
|
|
107
|
+
limitations: z.array(textSchema),
|
|
133
108
|
});
|
|
@@ -13,7 +13,12 @@ const PATH_PROPERTIES = [
|
|
|
13
13
|
"resolved_path",
|
|
14
14
|
"declared_path",
|
|
15
15
|
];
|
|
16
|
-
const
|
|
16
|
+
const signalWeight = (kind) => {
|
|
17
|
+
const entry = SOURCE_TO_BUNDLE_SIGNAL_WEIGHTS.find(([signal]) => signal === kind);
|
|
18
|
+
if (entry === undefined)
|
|
19
|
+
throw new TypeError(`Missing source-to-bundle signal weight: ${kind}`);
|
|
20
|
+
return entry[1];
|
|
21
|
+
};
|
|
17
22
|
/** Keep source-bearing application nodes in stable identifier order. */
|
|
18
23
|
export const sourceBearingNodes = (nodes) => nodes
|
|
19
24
|
.filter(({ kind }) => RELEVANT_NODE_KINDS.has(kind))
|
|
@@ -22,20 +27,17 @@ export const sourceBearingNodes = (nodes) => nodes
|
|
|
22
27
|
export const historicalSourceFiles = (graph) => graph.entries
|
|
23
28
|
.filter((entry) => entry.kind === "file" && entry.classifications.includes("source"))
|
|
24
29
|
.sort((left, right) => compareText(left.path, right.path));
|
|
25
|
-
/** Build
|
|
30
|
+
/** Build deterministic candidate indices without assigning fuzzy matches. */
|
|
26
31
|
export const buildSourceToBundleCandidateIndex = (nodes) => {
|
|
27
32
|
const projections = nodes.map(projectCurrentNode);
|
|
28
33
|
const byDigest = new Map();
|
|
29
34
|
const byPathSuffix = new Map();
|
|
30
35
|
const byBasename = new Map();
|
|
31
|
-
let pathIndexTruncated = false;
|
|
32
36
|
for (const projection of projections) {
|
|
33
37
|
for (const digest of projection.digests)
|
|
34
38
|
addIndexValue(byDigest, digest, projection.node.node_id);
|
|
35
39
|
for (const path of projection.paths) {
|
|
36
|
-
const
|
|
37
|
-
pathIndexTruncated ||= suffixes.truncated;
|
|
38
|
-
for (const suffix of suffixes.values)
|
|
40
|
+
for (const suffix of pathSuffixes(path.value))
|
|
39
41
|
addIndexValue(byPathSuffix, suffix, projection.node.node_id);
|
|
40
42
|
addIndexValue(byBasename, posix.basename(path.value), projection.node.node_id);
|
|
41
43
|
}
|
|
@@ -45,7 +47,6 @@ export const buildSourceToBundleCandidateIndex = (nodes) => {
|
|
|
45
47
|
byDigest,
|
|
46
48
|
byPathSuffix,
|
|
47
49
|
byBasename,
|
|
48
|
-
pathIndexTruncated,
|
|
49
50
|
};
|
|
50
51
|
};
|
|
51
52
|
/** Candidate identifiers ordered by strongest available signal, then ID. */
|
|
@@ -145,9 +146,9 @@ const candidateSignals = (source, current) => {
|
|
|
145
146
|
};
|
|
146
147
|
const signal = (kind, sourceValue, currentValues) => ({
|
|
147
148
|
kind,
|
|
148
|
-
weight:
|
|
149
|
+
weight: signalWeight(kind),
|
|
149
150
|
source_value: sourceValue,
|
|
150
|
-
current_values: [...new Set(currentValues)].sort(compareText)
|
|
151
|
+
current_values: [...new Set(currentValues)].sort(compareText),
|
|
151
152
|
});
|
|
152
153
|
const candidateConfidence = (signals) => {
|
|
153
154
|
const kinds = new Set(signals.map(({ kind }) => kind));
|
|
@@ -185,13 +186,7 @@ const uniquePaths = (paths) => [
|
|
|
185
186
|
].sort((left, right) => compareText(`${left.kind}\0${left.value}`, `${right.kind}\0${right.value}`));
|
|
186
187
|
const pathSuffixes = (path) => {
|
|
187
188
|
const parts = path.split("/");
|
|
188
|
-
|
|
189
|
-
return {
|
|
190
|
-
values: parts
|
|
191
|
-
.slice(start)
|
|
192
|
-
.map((_, index) => parts.slice(start + index).join("/")),
|
|
193
|
-
truncated: start > 0,
|
|
194
|
-
};
|
|
189
|
+
return parts.map((_, index) => parts.slice(index).join("/"));
|
|
195
190
|
};
|
|
196
191
|
const addIndexValue = (index, key, nodeId) => {
|
|
197
192
|
const values = index.get(key) ?? new Set();
|
|
@@ -39,7 +39,7 @@ const observedPatternSchema = z.enum([
|
|
|
39
39
|
const artifactSelectorSchema = z
|
|
40
40
|
.object({
|
|
41
41
|
kind: z.literal("artifact"),
|
|
42
|
-
logical_path: z.string().min(1)
|
|
42
|
+
logical_path: z.string().min(1),
|
|
43
43
|
})
|
|
44
44
|
.strict();
|
|
45
45
|
const functionSelectorSchema = z
|
|
@@ -66,21 +66,18 @@ const mappingSchema = z
|
|
|
66
66
|
side_alignment: z.enum(["left_to_left", "left_to_right"]),
|
|
67
67
|
hypothesis: z
|
|
68
68
|
.object({
|
|
69
|
-
statement: z.string().trim().min(1)
|
|
69
|
+
statement: z.string().trim().min(1),
|
|
70
70
|
expected_pattern: expectedPatternSchema,
|
|
71
71
|
})
|
|
72
72
|
.strict(),
|
|
73
73
|
})
|
|
74
74
|
.strict();
|
|
75
|
-
/** Strict
|
|
75
|
+
/** Strict input for explicit static/runtime hypothesis correlation. */
|
|
76
76
|
export const staticRuntimeCorrelationInputSchema = z
|
|
77
77
|
.object({
|
|
78
|
-
static_comparisons: z.array(evidenceSchema).min(1)
|
|
79
|
-
runtime_comparisons: z.array(evidenceSchema).min(1)
|
|
80
|
-
mappings: z.array(mappingSchema).min(1)
|
|
81
|
-
offset: z.number().int().min(0).default(0),
|
|
82
|
-
limit: z.number().int().min(1).max(100).default(100),
|
|
83
|
-
unknown_registry_approved: z.literal(true).optional(),
|
|
78
|
+
static_comparisons: z.array(evidenceSchema).min(1),
|
|
79
|
+
runtime_comparisons: z.array(evidenceSchema).min(1),
|
|
80
|
+
mappings: z.array(mappingSchema).min(1),
|
|
84
81
|
})
|
|
85
82
|
.strict();
|
|
86
83
|
const correlationItemSchema = z.object({
|
|
@@ -102,15 +99,15 @@ const correlationItemSchema = z.object({
|
|
|
102
99
|
}),
|
|
103
100
|
side_alignment: z.enum(["left_to_left", "left_to_right"]),
|
|
104
101
|
hypothesis: z.object({
|
|
105
|
-
statement: z.string().min(1)
|
|
102
|
+
statement: z.string().min(1),
|
|
106
103
|
expected_pattern: expectedPatternSchema,
|
|
107
104
|
}),
|
|
108
105
|
observed_pattern: observedPatternSchema,
|
|
109
106
|
classification: z.enum(["hypothesis", "contradiction", "unresolved_branch"]),
|
|
110
|
-
evidence_links: z.array(evidenceIdSchema).min(2)
|
|
107
|
+
evidence_links: z.array(evidenceIdSchema).min(2),
|
|
111
108
|
limitations: z.array(z.string()),
|
|
112
109
|
});
|
|
113
|
-
/** Deterministic
|
|
110
|
+
/** Deterministic static/runtime correlation payload. */
|
|
114
111
|
export const staticRuntimeCorrelationResultSchema = z.object({
|
|
115
112
|
status: z.enum(["correlated", "contradicted", "unknown", "truncated"]),
|
|
116
113
|
summary: z.object({
|
|
@@ -119,28 +116,24 @@ export const staticRuntimeCorrelationResultSchema = z.object({
|
|
|
119
116
|
unresolved: z.number().int().min(0),
|
|
120
117
|
}),
|
|
121
118
|
correlations: z.object({
|
|
122
|
-
items: z.array(correlationItemSchema)
|
|
123
|
-
offset: z.number().int().min(0),
|
|
124
|
-
limit: z.number().int().min(1).max(100),
|
|
125
|
-
total: z.number().int().min(0),
|
|
126
|
-
next_offset: z.number().int().min(0).nullable(),
|
|
119
|
+
items: z.array(correlationItemSchema),
|
|
127
120
|
}),
|
|
128
|
-
evidence_links: z.array(evidenceIdSchema).min(2)
|
|
121
|
+
evidence_links: z.array(evidenceIdSchema).min(2),
|
|
129
122
|
limitations: z.array(z.string()),
|
|
130
123
|
});
|
|
131
124
|
const EXPECTED = {
|
|
132
125
|
compare_artifacts: [
|
|
133
|
-
"rea.artifact-comparison
|
|
126
|
+
"rea.artifact-comparison",
|
|
134
127
|
"rea-artifact-comparison",
|
|
135
128
|
"REA artifact comparison",
|
|
136
129
|
],
|
|
137
130
|
compare_functions: [
|
|
138
|
-
"rea.function-comparison
|
|
131
|
+
"rea.function-comparison",
|
|
139
132
|
"rea-function-comparison",
|
|
140
133
|
"REA function comparison",
|
|
141
134
|
],
|
|
142
135
|
compare_process_captures: [
|
|
143
|
-
|
|
136
|
+
"rea.process-comparison",
|
|
144
137
|
"rea-process",
|
|
145
138
|
"REA deterministic process harness",
|
|
146
139
|
],
|
|
@@ -160,10 +153,7 @@ export const correlateStaticAndRuntime = (input) => {
|
|
|
160
153
|
if (new Set(correlations.map(({ correlation_id: id }) => id)).size !==
|
|
161
154
|
correlations.length)
|
|
162
155
|
throw new TypeError("Static/runtime correlation rejects duplicate mappings");
|
|
163
|
-
const page = correlations.slice(parsed.offset, parsed.offset + parsed.limit);
|
|
164
156
|
const links = uniqueSorted(correlations.flatMap(({ evidence_links: evidenceLinks }) => evidenceLinks));
|
|
165
|
-
if (links.length > 20_100)
|
|
166
|
-
throw new TypeError("Static/runtime Evidence closure exceeds limit");
|
|
167
157
|
const unresolved = correlations.filter(({ classification }) => classification === "unresolved_branch");
|
|
168
158
|
const contradictions = correlations.filter(({ classification }) => classification === "contradiction");
|
|
169
159
|
return staticRuntimeCorrelationResultSchema.parse({
|
|
@@ -180,13 +170,7 @@ export const correlateStaticAndRuntime = (input) => {
|
|
|
180
170
|
unresolved: unresolved.length,
|
|
181
171
|
},
|
|
182
172
|
correlations: {
|
|
183
|
-
items:
|
|
184
|
-
offset: parsed.offset,
|
|
185
|
-
limit: parsed.limit,
|
|
186
|
-
total: correlations.length,
|
|
187
|
-
next_offset: parsed.offset + page.length < correlations.length
|
|
188
|
-
? parsed.offset + page.length
|
|
189
|
-
: null,
|
|
173
|
+
items: correlations,
|
|
190
174
|
},
|
|
191
175
|
evidence_links: links,
|
|
192
176
|
limitations: [
|
|
@@ -242,24 +226,22 @@ const selectStatic = (evidence, selector) => {
|
|
|
242
226
|
throw new TypeError("Function selector requires function comparison Evidence");
|
|
243
227
|
const result = functionComparisonResultSchema.parse(evidence.normalized_result);
|
|
244
228
|
const matches = result.dimensions.filter(({ dimension }) => dimension === selector.dimension);
|
|
245
|
-
|
|
229
|
+
const match = matches.at(0);
|
|
230
|
+
if (matches.length !== 1 || match === undefined)
|
|
246
231
|
throw new TypeError("Function selector must resolve exactly once");
|
|
247
232
|
return {
|
|
248
|
-
status:
|
|
249
|
-
conclusion_kind:
|
|
233
|
+
status: match.status,
|
|
234
|
+
conclusion_kind: match.conclusion_kind,
|
|
250
235
|
};
|
|
251
236
|
}
|
|
252
237
|
if (evidence.operation !== "compare_artifacts")
|
|
253
238
|
throw new TypeError("Artifact selector requires artifact comparison Evidence");
|
|
254
239
|
const result = artifactComparisonResultSchema.parse(evidence.normalized_result);
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
throw new TypeError("Static/runtime correlation requires complete artifact comparison pagination");
|
|
259
|
-
const matches = result.changes.items.filter(({ logical_path: path }) => path === selector.logical_path);
|
|
260
|
-
if (matches.length !== 1)
|
|
240
|
+
const matches = result.changes.filter(({ logical_path: path }) => path === selector.logical_path);
|
|
241
|
+
const match = matches.at(0);
|
|
242
|
+
if (matches.length !== 1 || match === undefined)
|
|
261
243
|
throw new TypeError("Artifact selector must resolve exactly one reported delta");
|
|
262
|
-
const status =
|
|
244
|
+
const status = match.classification;
|
|
263
245
|
return {
|
|
264
246
|
status,
|
|
265
247
|
conclusion_kind: status === "contradiction"
|
|
@@ -277,8 +259,7 @@ const parseStatic = (input) => {
|
|
|
277
259
|
assertComparisonIdentity(evidence);
|
|
278
260
|
if (evidence.operation === "compare_artifacts") {
|
|
279
261
|
const result = artifactComparisonResultSchema.parse(evidence.normalized_result);
|
|
280
|
-
|
|
281
|
-
assertNestedLinks(evidence, result.changes.items.flatMap(({ evidence_links: links }) => links));
|
|
262
|
+
assertNestedLinks(evidence, result.changes.flatMap(({ evidence_links: links }) => links));
|
|
282
263
|
}
|
|
283
264
|
else {
|
|
284
265
|
const result = functionComparisonResultSchema.parse(evidence.normalized_result);
|
|
@@ -332,21 +313,30 @@ const comparisonParameterLinks = (evidence) => {
|
|
|
332
313
|
}
|
|
333
314
|
const parameters = z
|
|
334
315
|
.object({
|
|
335
|
-
|
|
336
|
-
|
|
316
|
+
left_evidence_id: evidenceIdSchema.optional(),
|
|
317
|
+
right_evidence_id: evidenceIdSchema.optional(),
|
|
318
|
+
left_evidence_ids: z.array(evidenceIdSchema).min(1).optional(),
|
|
319
|
+
right_evidence_ids: z.array(evidenceIdSchema).min(1).optional(),
|
|
337
320
|
})
|
|
338
321
|
.passthrough()
|
|
339
322
|
.parse(evidence.parameters);
|
|
340
|
-
|
|
323
|
+
const left = parameters.left_evidence_id === undefined
|
|
324
|
+
? (parameters.left_evidence_ids ?? [])
|
|
325
|
+
: [parameters.left_evidence_id];
|
|
326
|
+
const right = parameters.right_evidence_id === undefined
|
|
327
|
+
? (parameters.right_evidence_ids ?? [])
|
|
328
|
+
: [parameters.right_evidence_id];
|
|
329
|
+
if (left.length === 0 || right.length === 0)
|
|
330
|
+
throw new TypeError("Comparison Evidence omitted its source parameters");
|
|
331
|
+
return [...left, ...right];
|
|
341
332
|
};
|
|
342
|
-
const sameSet = (left, right) =>
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
const
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
throw new TypeError("Static/runtime correlation requires complete artifact comparison pagination");
|
|
333
|
+
const sameSet = (left, right) => {
|
|
334
|
+
if (left.length !== right.length)
|
|
335
|
+
return false;
|
|
336
|
+
const rightSet = new Set(right);
|
|
337
|
+
return (rightSet.size === right.length &&
|
|
338
|
+
new Set(left).size === left.length &&
|
|
339
|
+
left.every((item) => rightSet.has(item)));
|
|
350
340
|
};
|
|
351
341
|
const observedPattern = (staticStatus, runtimeStatus) => {
|
|
352
342
|
if (staticStatus === "truncated" || runtimeStatus === "truncated")
|
|
@@ -1,16 +1,3 @@
|
|
|
1
|
-
const MAX_SCANNED_SYMBOLS = 5_000;
|
|
2
|
-
const MAX_RETURNED_SYMBOLS = 100;
|
|
3
|
-
/** Select Swift class symbols using the legacy `_TtC` convention. */
|
|
4
|
-
export const discoverSwiftClasses = (procedures, pattern) => {
|
|
5
|
-
const classes = procedures
|
|
6
|
-
.slice(0, MAX_SCANNED_SYMBOLS)
|
|
7
|
-
.filter(({ name }) => name.includes("_TtC"))
|
|
8
|
-
.filter(({ name }) => pattern.length === 0 || name.includes(pattern));
|
|
9
|
-
return {
|
|
10
|
-
count: classes.length,
|
|
11
|
-
classes: classes.slice(0, MAX_RETURNED_SYMBOLS).map(toJsonEntry),
|
|
12
|
-
};
|
|
13
|
-
};
|
|
14
1
|
/** Select and deduplicate Objective-C class labels. */
|
|
15
2
|
export const discoverObjcClasses = (names, pattern) => {
|
|
16
3
|
const classes = uniqueByName(names
|
|
@@ -18,7 +5,7 @@ export const discoverObjcClasses = (names, pattern) => {
|
|
|
18
5
|
.filter(({ name }) => pattern.length === 0 || name.includes(pattern)));
|
|
19
6
|
return {
|
|
20
7
|
count: classes.length,
|
|
21
|
-
classes: classes.
|
|
8
|
+
classes: classes.map(toJsonEntry),
|
|
22
9
|
};
|
|
23
10
|
};
|
|
24
11
|
/** Select and deduplicate Objective-C and Swift protocol labels. */
|
|
@@ -26,7 +13,7 @@ export const discoverObjcProtocols = (names) => {
|
|
|
26
13
|
const protocols = uniqueByName(names.filter(({ name }) => name.includes("OBJC_PROTOCOL") || name.includes("_TtP")));
|
|
27
14
|
return {
|
|
28
15
|
count: protocols.length,
|
|
29
|
-
protocols: protocols.
|
|
16
|
+
protocols: protocols.map(toJsonEntry),
|
|
30
17
|
};
|
|
31
18
|
};
|
|
32
19
|
const SWIFT_CATEGORIES = [
|
|
@@ -37,19 +24,23 @@ const SWIFT_CATEGORIES = [
|
|
|
37
24
|
["extensions", "_TtE"],
|
|
38
25
|
];
|
|
39
26
|
/** Categorize deduplicated Swift mangled symbols. */
|
|
40
|
-
export const categorizeSwiftTypes = (procedures) => {
|
|
27
|
+
export const categorizeSwiftTypes = (procedures, filter = {}) => {
|
|
41
28
|
const groups = Object.fromEntries([...SWIFT_CATEGORIES.map(([category]) => category), "other"].map((category) => [category, []]));
|
|
42
29
|
const seen = new Set();
|
|
43
|
-
for (const entry of procedures
|
|
30
|
+
for (const entry of procedures) {
|
|
44
31
|
if (!entry.name.includes("_Tt") || seen.has(entry.name))
|
|
45
32
|
continue;
|
|
46
|
-
seen.add(entry.name);
|
|
47
33
|
const category = SWIFT_CATEGORIES.find(([, prefix]) => entry.name.startsWith(prefix))?.[0] ?? "other";
|
|
34
|
+
if (filter.category !== undefined && filter.category !== category)
|
|
35
|
+
continue;
|
|
36
|
+
if (filter.pattern !== undefined && !entry.name.includes(filter.pattern))
|
|
37
|
+
continue;
|
|
38
|
+
seen.add(entry.name);
|
|
48
39
|
groups[category]?.push(entry);
|
|
49
40
|
}
|
|
50
41
|
const categories = Object.fromEntries(Object.entries(groups).map(([category, items]) => [
|
|
51
42
|
category,
|
|
52
|
-
{ count: items.length, items: items.
|
|
43
|
+
{ count: items.length, items: items.map(toJsonEntry) },
|
|
53
44
|
]));
|
|
54
45
|
return { total: seen.size, categories };
|
|
55
46
|
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/** Compare strings lexicographically by Unicode code point, independent of locale. */
|
|
2
|
+
export const compareUnicodeCodePoints = (left, right) => {
|
|
3
|
+
const leftPoints = [...left].map((value) => value.codePointAt(0) ?? 0);
|
|
4
|
+
const rightPoints = [...right].map((value) => value.codePointAt(0) ?? 0);
|
|
5
|
+
const length = Math.min(leftPoints.length, rightPoints.length);
|
|
6
|
+
for (let index = 0; index < length; index += 1) {
|
|
7
|
+
const difference = (leftPoints[index] ?? 0) - (rightPoints[index] ?? 0);
|
|
8
|
+
if (difference !== 0)
|
|
9
|
+
return difference;
|
|
10
|
+
}
|
|
11
|
+
return leftPoints.length - rightPoints.length;
|
|
12
|
+
};
|