rea-agents 3.1.0 → 3.2.1

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.
Files changed (590) hide show
  1. package/README.md +72 -95
  2. package/bridge/ghidra/ReaGhidraBridge.java +609 -841
  3. package/bridge/hopper_bridge.py +99 -344
  4. package/dist/application/AbortablePromise.js +6 -3
  5. package/dist/application/AnalysisSnapshotCache.js +0 -1
  6. package/dist/application/AnalysisSnapshotFiles.js +7 -7
  7. package/dist/application/AndroidApplicationService.js +1 -1
  8. package/dist/application/AppleApplicationService.js +1 -1
  9. package/dist/application/ArtifactExtraction.js +35 -54
  10. package/dist/application/ArtifactExtractionDestination.js +17 -0
  11. package/dist/application/ArtifactGraphConstruction.js +2 -17
  12. package/dist/application/ArtifactInventory/classify.js +2 -6
  13. package/dist/application/ArtifactInventory/hash.js +2 -20
  14. package/dist/application/ArtifactInventory/scanCanonical.js +8 -12
  15. package/dist/application/ArtifactInventory/scanReader.js +69 -51
  16. package/dist/application/ArtifactInventory.js +6 -14
  17. package/dist/application/AuthorizedArtifactInventory.js +3 -13
  18. package/dist/application/BinarySession.js +41 -13
  19. package/dist/application/BinarySessionComposition.js +0 -11
  20. package/dist/application/BinarySessionOpen.js +2 -1
  21. package/dist/application/BinarySessionRecords.js +5 -93
  22. package/dist/application/BinarySessionStatus.js +5 -16
  23. package/dist/application/BinaryTargetResolver.js +216 -0
  24. package/dist/application/BrowserEvidence.js +42 -58
  25. package/dist/application/BrowserObservationService.js +3 -6
  26. package/dist/application/BrowserScenarioCaptureService.js +3 -6
  27. package/dist/application/BrowserScenarioEvidence.js +3 -3
  28. package/dist/application/CallPathTracing.js +2 -36
  29. package/dist/application/CapabilityInventory.js +10 -15
  30. package/dist/application/ClientConfigurationDocument.js +27 -0
  31. package/dist/application/ClientRegistrationStatus.js +16 -13
  32. package/dist/application/CommandShimReplay.js +14 -1
  33. package/dist/application/DirectAnalysis.js +22 -46
  34. package/dist/application/DirectAnalysisStatus.js +5 -61
  35. package/dist/application/Doctor.js +11 -32
  36. package/dist/application/DoctorDiagnostics.js +1 -2
  37. package/dist/application/DoctorScope.js +1 -1
  38. package/dist/application/ElectronActiveEvidence.js +3 -8
  39. package/dist/application/ElectronActiveObservationService.js +3 -6
  40. package/dist/application/ElectronBoundaryAnalysis.js +7 -8
  41. package/dist/application/ElectronBoundaryGraphContext.js +1 -1
  42. package/dist/application/ElectronBoundaryGraphIpc.js +3 -3
  43. package/dist/application/ElectronBoundaryGraphNative.js +1 -2
  44. package/dist/application/ElectronBoundaryGraphWindows.js +6 -8
  45. package/dist/application/ElectronEvidence.js +4 -7
  46. package/dist/application/ElectronObservationService.js +5 -9
  47. package/dist/application/EnhancedLiteralTracing.js +42 -65
  48. package/dist/application/EnhancedTools.js +76 -44
  49. package/dist/application/EvidenceBundleCommands.js +11 -11
  50. package/dist/application/EvidenceBundleFiles.js +9 -15
  51. package/dist/application/EvidenceLedger.js +6 -41
  52. package/dist/application/FilesystemSnapshot.js +2 -3
  53. package/dist/application/InterfaceBuilderAnalysis.js +266 -0
  54. package/dist/application/InventoryProjectionEvidence.js +4 -2
  55. package/dist/application/InvestigationProviders.js +1 -1
  56. package/dist/application/JavaScriptApplicationEvidence.js +2 -5
  57. package/dist/application/JavaScriptApplicationEvidenceGraph.js +6 -10
  58. package/dist/application/JavaScriptApplicationService.js +6 -29
  59. package/dist/application/JavaScriptApplicationWorkflowEvidence.js +5 -5
  60. package/dist/application/JavaScriptApplicationWorkflowService.js +0 -8
  61. package/dist/application/JavaScriptArtifactAnalysis.js +38 -127
  62. package/dist/application/JavaScriptArtifactFiles.js +67 -107
  63. package/dist/application/JavaScriptArtifactGraphAccumulator.js +0 -7
  64. package/dist/application/JavaScriptArtifactGraphBuilder.js +7 -58
  65. package/dist/application/JavaScriptArtifactGraphBundlers.js +1 -6
  66. package/dist/application/JavaScriptArtifactGraphContext.js +12 -39
  67. package/dist/application/JavaScriptArtifactGraphDocuments.js +4 -11
  68. package/dist/application/JavaScriptArtifactGraphEvidence.js +0 -14
  69. package/dist/application/JavaScriptArtifactGraphFindings.js +3 -3
  70. package/dist/application/JavaScriptArtifactGraphStructure.js +16 -17
  71. package/dist/application/JavaScriptArtifactPathResolution.js +61 -49
  72. package/dist/application/JavaScriptArtifactReconstruction.js +5 -10
  73. package/dist/application/JavaScriptArtifactReconstructionInput.js +2 -14
  74. package/dist/application/JavaScriptJsonModules.js +2 -2
  75. package/dist/application/JavaScriptModuleRelationships.js +22 -27
  76. package/dist/application/JavaScriptReplayPlanning.js +9 -3
  77. package/dist/application/JavaScriptReplayService.js +6 -32
  78. package/dist/application/JavaScriptReturnShapeProjection.js +12 -42
  79. package/dist/application/JavaScriptRuntimeObservationEvidence.js +7 -8
  80. package/dist/application/JavaScriptRuntimeObservationService.js +4 -8
  81. package/dist/application/JavaScriptRuntimeReconciliationEvidence.js +2 -3
  82. package/dist/application/JavaScriptSemanticGraphBuilder.js +11 -41
  83. package/dist/application/JavaScriptSemanticGraphConstruction.js +5 -29
  84. package/dist/application/JavaScriptSemanticGraphEvidence.js +1 -1
  85. package/dist/application/JavaScriptSemanticGraphFingerprintProjection.js +1 -1
  86. package/dist/application/JavaScriptSemanticGraphFlowProjection.js +0 -13
  87. package/dist/application/JavaScriptSemanticGraphProjection.js +1 -3
  88. package/dist/application/JavaScriptSemanticTraceService.js +1 -10
  89. package/dist/application/JsonFiles.js +79 -0
  90. package/dist/application/LinuxHopper.js +11 -9
  91. package/dist/application/LoopbackReplay.js +26 -23
  92. package/dist/application/LoopbackReplayRecorder.js +29 -1
  93. package/dist/application/ManagedApplicationGraphService.js +1 -2
  94. package/dist/application/ManagedMemberComparisonService.js +11 -41
  95. package/dist/application/ManagedNativeVerificationService.js +1 -2
  96. package/dist/application/ManagedReconstructionService.js +1 -1
  97. package/dist/application/ManagedRuntimeCorrelationService.js +5 -8
  98. package/dist/application/NativeApiInspection.js +2 -7
  99. package/dist/application/NativeUiActionTrace.js +394 -0
  100. package/dist/application/NodeRuntimeCharacterizationService.js +3 -7
  101. package/dist/application/PermissionAuthority.js +15 -7
  102. package/dist/application/PermissionFailure.js +5 -0
  103. package/dist/application/ProcessCaptureAuthority.js +5 -7
  104. package/dist/application/ProcessCaptureJournal.js +3 -2
  105. package/dist/application/ProcessCaptureLifecycle.js +5 -12
  106. package/dist/application/ProcessCheckpoints.js +29 -11
  107. package/dist/application/ProcessCli.js +6 -16
  108. package/dist/application/ProcessEvidence.js +5 -7
  109. package/dist/application/ProcessHarness.js +52 -17
  110. package/dist/application/ProcessReactiveCoordinator.js +2 -4
  111. package/dist/application/ProcessReactiveEffects.js +9 -3
  112. package/dist/application/ProcessReactiveHarness.js +13 -7
  113. package/dist/application/ProcessSampling.js +2 -4
  114. package/dist/application/ProcessTimer.js +39 -0
  115. package/dist/application/ProjectPermissionStore.js +39 -96
  116. package/dist/application/RealHopperAssertions.js +20 -66
  117. package/dist/application/ReconstructionCoverageService.js +12 -58
  118. package/dist/application/ReconstructionObligationAuthority.js +2 -2
  119. package/dist/application/ReconstructionObligationCandidates.js +4 -4
  120. package/dist/application/ReconstructionObligationLedgerEvaluation.js +8 -15
  121. package/dist/application/ReconstructionObligationLedgerProjection.js +3 -7
  122. package/dist/application/ReconstructionObligationLedgerService.js +19 -38
  123. package/dist/application/ReferenceSourceImport.js +19 -45
  124. package/dist/application/ReferenceSourceImportEntries.js +2 -4
  125. package/dist/application/ReferenceSourceImportPolicy.js +5 -32
  126. package/dist/application/ReferenceSourceImportTypes.js +0 -16
  127. package/dist/application/RuntimeExecutableDiagnostics.js +55 -29
  128. package/dist/application/SessionProviderRouter.js +2 -2
  129. package/dist/application/Setup.js +1 -3
  130. package/dist/application/SetupClientConfiguration.js +22 -93
  131. package/dist/application/SetupRegistrationEnvironment.js +0 -7
  132. package/dist/application/StoreFileLock.js +119 -0
  133. package/dist/application/TerminalRenderer.js +2 -3
  134. package/dist/application/Uninstall.js +9 -14
  135. package/dist/application/UnknownEvidence.js +1 -1
  136. package/dist/artifacts/ArtifactPaths.js +2 -5
  137. package/dist/artifacts/ArtifactProvider.js +36 -58
  138. package/dist/artifacts/DirectoryArtifactReader.js +13 -8
  139. package/dist/artifacts/MachOSliceArtifactReader.js +1 -5
  140. package/dist/artifacts/NativeDmgArtifactReader.js +11 -11
  141. package/dist/artifacts/NibArchive.js +269 -0
  142. package/dist/artifacts/SafeOutputTree.js +15 -24
  143. package/dist/browser/BrowserProcessStartup.js +1 -2
  144. package/dist/browser/CdpAuthorizedMainFrame.js +16 -0
  145. package/dist/browser/CdpBrowserProvider.js +3 -13
  146. package/dist/browser/CdpCanonicalJsonDigest.js +9 -0
  147. package/dist/browser/CdpCaptureDocuments.js +28 -76
  148. package/dist/browser/CdpCaptureEventBodyShapes.js +13 -33
  149. package/dist/browser/CdpCaptureEventHandlers.js +22 -87
  150. package/dist/browser/CdpCaptureEvents.js +2 -8
  151. package/dist/browser/CdpCaptureStorage.js +9 -20
  152. package/dist/browser/CdpCaptureStorageFingerprints.js +85 -98
  153. package/dist/browser/CdpCaptureValues.js +21 -21
  154. package/dist/browser/CdpConnection.js +10 -25
  155. package/dist/browser/CdpElectronInspection.js +26 -50
  156. package/dist/browser/CdpElectronProvider.js +10 -35
  157. package/dist/browser/CdpElectronScriptEvents.js +8 -16
  158. package/dist/browser/CdpElectronScripts.js +6 -35
  159. package/dist/browser/CdpElectronWorkers.js +6 -10
  160. package/dist/browser/CdpEndpoint.js +25 -41
  161. package/dist/browser/CdpObservationSession.js +14 -26
  162. package/dist/browser/CdpPageCapture.js +34 -48
  163. package/dist/browser/CdpPageCaptureScripts.js +1 -19
  164. package/dist/browser/CdpPageCaptureWorkers.js +6 -10
  165. package/dist/browser/CdpSafeMetadata.js +19 -22
  166. package/dist/browser/CdpScreenshot.js +3 -5
  167. package/dist/browser/CdpTargetSession.js +1 -2
  168. package/dist/browser/CdpWebMcpDiscovery.js +13 -22
  169. package/dist/browser/ElectronFileScope.js +8 -19
  170. package/dist/browser/JavaScriptRuntimeScope.js +9 -14
  171. package/dist/browser/PlaywrightBrowserScenarioProvider.js +31 -64
  172. package/dist/browser/PlaywrightElectronActiveActions.js +54 -69
  173. package/dist/browser/PlaywrightElectronActiveProvider.js +14 -34
  174. package/dist/browser/PlaywrightExecutionBoundary.js +16 -5
  175. package/dist/browser/PlaywrightScenarioActions.js +3 -7
  176. package/dist/browser/PlaywrightScenarioArtifacts.js +23 -92
  177. package/dist/browser/PlaywrightScenarioBrowser.js +3 -5
  178. package/dist/browser/PlaywrightScenarioEvents.js +45 -94
  179. package/dist/browser/PlaywrightScenarioSession.js +14 -30
  180. package/dist/browser/PngVisualDiff.js +22 -14
  181. package/dist/browser/SensitiveTextCapture.js +0 -17
  182. package/dist/browser/V8InspectorCaptureProjection.js +7 -8
  183. package/dist/browser/V8InspectorEndpoint.js +12 -14
  184. package/dist/browser/V8InspectorProvider.js +20 -61
  185. package/dist/browser/WebSourceMapFetcher.js +56 -176
  186. package/dist/catalogIdentity.js +0 -54
  187. package/dist/cli/artifactCommands.js +49 -77
  188. package/dist/cli/coreAnalysisCommands.js +83 -133
  189. package/dist/cli/javascriptApplicationAnalysis.js +1 -9
  190. package/dist/cli/managedCommands.js +5 -270
  191. package/dist/cli/setupCommands.js +3 -12
  192. package/dist/cli/utilityCommands.js +7 -41
  193. package/dist/cli.js +0 -2
  194. package/dist/cliApplicationCommands.js +42 -112
  195. package/dist/cliBrowserAdvancedCommands.js +10 -106
  196. package/dist/cliBrowserCommands.js +15 -127
  197. package/dist/cliBrowserContext.js +30 -0
  198. package/dist/cliCommandNames.js +4 -5
  199. package/dist/cliElectronCommands.js +8 -72
  200. package/dist/cliEvidenceCommands.js +8 -77
  201. package/dist/cliJavaScriptRuntimeCommands.js +9 -91
  202. package/dist/cliJsonInput.js +4 -14
  203. package/dist/cliObservationOptions.js +11 -96
  204. package/dist/cliPolicyCommands.js +2 -17
  205. package/dist/cliProcessCommands.js +3 -3
  206. package/dist/cliSetup.js +0 -13
  207. package/dist/config/browserScenario.js +2 -2
  208. package/dist/config/environment.js +0 -9
  209. package/dist/config/parseConfig.js +1 -33
  210. package/dist/config/parsers.js +6 -27
  211. package/dist/config/passiveObservation.js +7 -77
  212. package/dist/config/permissions.js +0 -7
  213. package/dist/contracts/analysisSearchContract.js +2 -5
  214. package/dist/contracts/applicationToolContracts.js +56 -109
  215. package/dist/contracts/applicationWorkflowInputContracts.js +27 -102
  216. package/dist/contracts/artifactComparisonExample.js +58 -60
  217. package/dist/contracts/artifactToolContracts.js +20 -67
  218. package/dist/contracts/browserScenarioToolContracts.js +6 -51
  219. package/dist/contracts/browserToolContracts.js +8 -73
  220. package/dist/contracts/electronToolContracts.js +8 -108
  221. package/dist/contracts/enhancedInputs.js +23 -54
  222. package/dist/contracts/errorSchemas.js +0 -1
  223. package/dist/contracts/functionComparisonExample.js +10 -24
  224. package/dist/contracts/functionInstructionContract.js +1 -3
  225. package/dist/contracts/functionWorkflowToolContracts.js +2 -2
  226. package/dist/contracts/hopperMemoryContracts.js +3 -3
  227. package/dist/contracts/investigationExamples.js +14 -11
  228. package/dist/contracts/javascriptApplicationWorkflowExamples.js +12 -19
  229. package/dist/contracts/javascriptRuntimeObservationToolContracts.js +2 -20
  230. package/dist/contracts/javascriptRuntimeReconciliationExample.js +45 -12
  231. package/dist/contracts/managedToolContracts.js +6 -95
  232. package/dist/contracts/managedWorkflowExamples.js +77 -128
  233. package/dist/contracts/managedWorkflowToolContracts.js +51 -77
  234. package/dist/contracts/nativeToolContracts.js +7 -11
  235. package/dist/contracts/processCaptureExample.js +2 -69
  236. package/dist/contracts/promptContracts.js +49 -67
  237. package/dist/contracts/providerSelection.js +0 -1
  238. package/dist/contracts/reconstructionReadinessExample.js +1 -6
  239. package/dist/contracts/sessionStatusContract.js +1 -17
  240. package/dist/contracts/sessionToolSchemas.js +6 -15
  241. package/dist/contracts/toolContractExamples.js +11 -11
  242. package/dist/contracts/toolContractHelpers.js +0 -4
  243. package/dist/contracts/toolContracts.js +60 -71
  244. package/dist/contracts/toolEffects.js +5 -13
  245. package/dist/contracts/toolOutputSchemaGroups.js +37 -91
  246. package/dist/contracts/toolOutputSchemaPrimitives.js +16 -56
  247. package/dist/contracts/toolSchemaMetadata.js +8 -19
  248. package/dist/contracts/unknownContractExamples.js +0 -2
  249. package/dist/domain/analysisErrorPresentation.js +46 -54
  250. package/dist/domain/analysisErrorProjection.js +28 -37
  251. package/dist/domain/analysisProfile.js +3 -31
  252. package/dist/domain/analysisSnapshot.js +3 -12
  253. package/dist/domain/androidApplication.js +15 -54
  254. package/dist/domain/appleApplication.js +24 -67
  255. package/dist/domain/artifactComparison.js +11 -29
  256. package/dist/domain/artifactGraph.js +14 -44
  257. package/dist/domain/artifactInspection.js +38 -69
  258. package/dist/domain/artifactInventoryEvidence.js +27 -21
  259. package/dist/domain/binaryTarget.js +2 -221
  260. package/dist/domain/browserCaptureComparison.js +47 -24
  261. package/dist/domain/browserObservation.js +28 -193
  262. package/dist/domain/browserObservationSchemas.js +5 -23
  263. package/dist/domain/browserScenario.js +11 -14
  264. package/dist/domain/browserScenarioCapture.js +11 -12
  265. package/dist/domain/browserScenarioCaptureValues.js +146 -84
  266. package/dist/domain/browserScenarioDiff.js +2 -59
  267. package/dist/domain/browserScenarioDiffEvidence.js +51 -0
  268. package/dist/domain/browserScenarioDiffValues.js +21 -38
  269. package/dist/domain/browserScenarioValues.js +80 -109
  270. package/dist/domain/browserSession.js +4 -7
  271. package/dist/domain/bundleComparison.js +6 -32
  272. package/dist/domain/bytecodeProvider.js +20 -19
  273. package/dist/domain/callPath.js +47 -167
  274. package/dist/domain/callPathSchemas.js +79 -0
  275. package/dist/domain/changedBehavior.js +34 -60
  276. package/dist/domain/completionLedgerGeneration.js +8 -14
  277. package/dist/domain/conformancePackage.js +126 -97
  278. package/dist/domain/conformanceReplay.js +36 -8
  279. package/dist/domain/conformanceTrustGate.js +23 -14
  280. package/dist/domain/customProtocolCapture.js +1 -1
  281. package/dist/domain/electronActiveObservation.js +70 -103
  282. package/dist/domain/electronObservation.js +14 -80
  283. package/dist/domain/electronStaticAnalysisBrowser.js +36 -46
  284. package/dist/domain/electronStaticAnalysisIpc.js +38 -14
  285. package/dist/domain/electronStaticAnalysisNative.js +1 -8
  286. package/dist/domain/electronStaticAnalysisValues.js +10 -17
  287. package/dist/domain/errors.js +33 -54
  288. package/dist/domain/eventProcessTree.js +20 -12
  289. package/dist/domain/evidence.js +2 -10
  290. package/dist/domain/evidenceBundle.js +3 -5
  291. package/dist/domain/evidenceCompletionLedger.js +6 -8
  292. package/dist/domain/functionComparison.js +4 -14
  293. package/dist/domain/functionComparisonNormalization.js +4 -11
  294. package/dist/domain/functionComparisonResults.js +25 -15
  295. package/dist/domain/functionComparisonSchemas.js +49 -33
  296. package/dist/domain/functionDossierEvidence.js +31 -156
  297. package/dist/domain/hopperStartupFailure.js +1 -1
  298. package/dist/domain/hopperValues.js +15 -136
  299. package/dist/domain/interfaceBuilderGraph.js +654 -0
  300. package/dist/domain/javascriptApplicationAnalysis.js +8 -112
  301. package/dist/domain/javascriptApplicationChangeGraph.js +22 -82
  302. package/dist/domain/javascriptApplicationEvidenceSchemas.js +59 -47
  303. package/dist/domain/javascriptApplicationGraph.js +3 -13
  304. package/dist/domain/javascriptApplicationGraphSchemas.js +12 -34
  305. package/dist/domain/javascriptApplicationVersionComparison.js +26 -30
  306. package/dist/domain/javascriptApplicationVersionComparisonSchemas.js +123 -68
  307. package/dist/domain/javascriptApplicationVersionItems.js +120 -53
  308. package/dist/domain/javascriptApplicationVersionKeys.js +24 -11
  309. package/dist/domain/javascriptAstFingerprint.js +25 -58
  310. package/dist/domain/javascriptAstValues.js +9 -0
  311. package/dist/domain/javascriptExportInstrumentation.js +2 -4
  312. package/dist/domain/javascriptExportShapeComparison.js +6 -7
  313. package/dist/domain/javascriptExportShapeComparisonSchemas.js +68 -75
  314. package/dist/domain/javascriptExportShapeSelection.js +17 -19
  315. package/dist/domain/javascriptFeatureSeed.js +20 -12
  316. package/dist/domain/javascriptFeatureTrace.js +13 -67
  317. package/dist/domain/javascriptFeatureTraceSchemas.js +24 -52
  318. package/dist/domain/javascriptFeatureTraversal.js +1 -44
  319. package/dist/domain/javascriptNativeHandoff.js +1 -1
  320. package/dist/domain/javascriptReplay.js +24 -41
  321. package/dist/domain/javascriptRuntimeLoadState.js +3 -8
  322. package/dist/domain/javascriptRuntimeObservation.js +42 -103
  323. package/dist/domain/javascriptRuntimeReconciliation.js +1 -3
  324. package/dist/domain/javascriptRuntimeReconciliationActive.js +8 -17
  325. package/dist/domain/javascriptRuntimeReconciliationGraph.js +10 -23
  326. package/dist/domain/javascriptRuntimeReconciliationMatching.js +18 -12
  327. package/dist/domain/javascriptRuntimeReconciliationParsing.js +16 -45
  328. package/dist/domain/javascriptRuntimeReconciliationResult.js +4 -5
  329. package/dist/domain/javascriptRuntimeReconciliationRuntime.js +8 -12
  330. package/dist/domain/javascriptRuntimeReconciliationSchemas.js +33 -48
  331. package/dist/domain/javascriptRuntimeStaticCandidates.js +3 -3
  332. package/dist/domain/javascriptSemanticAnalysis.js +12 -45
  333. package/dist/domain/javascriptSemanticAsyncEffects.js +1 -9
  334. package/dist/domain/javascriptSemanticCallResolution.js +6 -16
  335. package/dist/domain/javascriptSemanticCalls.js +5 -32
  336. package/dist/domain/javascriptSemanticChildProcesses.js +1 -11
  337. package/dist/domain/javascriptSemanticCoverage.js +11 -0
  338. package/dist/domain/javascriptSemanticDataEffectHelpers.js +1 -8
  339. package/dist/domain/javascriptSemanticDataEffects.js +1 -11
  340. package/dist/domain/javascriptSemanticFingerprints.js +3 -5
  341. package/dist/domain/javascriptSemanticGraphSchemas.js +25 -51
  342. package/dist/domain/javascriptSemanticGraphSerialization.js +2 -13
  343. package/dist/domain/javascriptSemanticIr.js +1 -29
  344. package/dist/domain/javascriptSemanticObjects.js +1 -5
  345. package/dist/domain/javascriptSemanticPrimitives.js +2 -9
  346. package/dist/domain/javascriptSemanticProjection.js +0 -18
  347. package/dist/domain/javascriptSemanticPromises.js +9 -16
  348. package/dist/domain/javascriptSemanticProvenance.js +16 -19
  349. package/dist/domain/javascriptSemanticQuery.js +17 -139
  350. package/dist/domain/javascriptSemanticQueryAssessment.js +9 -37
  351. package/dist/domain/javascriptSemanticQueryIdentity.js +2 -23
  352. package/dist/domain/javascriptSemanticQuerySchemas.js +14 -107
  353. package/dist/domain/javascriptSemanticResources.js +1 -6
  354. package/dist/domain/javascriptSemanticReturns.js +10 -27
  355. package/dist/domain/javascriptSemanticValueTypes.js +1 -0
  356. package/dist/domain/javascriptSemanticValues.js +44 -62
  357. package/dist/domain/javascriptStaticAnalysis.js +21 -43
  358. package/dist/domain/javascriptStaticAnalysisBundler.js +34 -93
  359. package/dist/domain/javascriptStaticAnalysisCalls.js +17 -16
  360. package/dist/domain/javascriptStaticAnalysisFindings.js +3 -19
  361. package/dist/domain/javascriptStaticAnalysisHelpers.js +47 -88
  362. package/dist/domain/javascriptStaticAnalysisState.js +1 -5
  363. package/dist/domain/javascriptStaticAnalysisTypes.js +1 -0
  364. package/dist/domain/jsonShape.js +7 -33
  365. package/dist/domain/localPath.js +7 -0
  366. package/dist/domain/managedApplicationGraph.js +9 -41
  367. package/dist/domain/managedApplicationGraphCoverage.js +24 -156
  368. package/dist/domain/managedApplicationGraphNodes.js +10 -13
  369. package/dist/domain/managedArtifact.js +14 -27
  370. package/dist/domain/managedMemberComparison.js +90 -92
  371. package/dist/domain/managedMemberComparisonCoverage.js +11 -33
  372. package/dist/domain/managedMemberComparisonItems.js +221 -0
  373. package/dist/domain/managedMemberComparisonMatch.js +8 -208
  374. package/dist/domain/managedNativeVerification.js +3 -6
  375. package/dist/domain/managedNativeVerificationMatch.js +55 -59
  376. package/dist/domain/managedNativeVerificationSchemas.js +83 -47
  377. package/dist/domain/managedReconstruction.js +19 -23
  378. package/dist/domain/managedRuntimeCorrelation.js +6 -9
  379. package/dist/domain/nativeApiBoundary.js +2 -7
  380. package/dist/domain/nativeInspection.js +0 -2
  381. package/dist/domain/nativeInvestigationGraph.js +351 -0
  382. package/dist/domain/nativeValueFlow.js +61 -0
  383. package/dist/domain/nodeRuntimeCharacterization.js +1 -5
  384. package/dist/domain/objcSwiftMetadata.js +254 -0
  385. package/dist/domain/peInspection.js +1 -1
  386. package/dist/domain/permissionPolicy.js +13 -0
  387. package/dist/domain/processCapture.js +76 -113
  388. package/dist/domain/processCaptureExample.js +68 -0
  389. package/dist/domain/processCaptureParsing.js +21 -0
  390. package/dist/domain/processCaptureReactiveSchema.js +68 -0
  391. package/dist/domain/processCaptureValidation.js +1 -7
  392. package/dist/domain/processComparison.js +3 -12
  393. package/dist/domain/processReactiveMatching.js +29 -50
  394. package/dist/domain/processReactiveRuntime.js +4 -8
  395. package/dist/domain/processReactiveScenario.js +28 -94
  396. package/dist/domain/processReactiveScenarioPreflight.js +5 -30
  397. package/dist/domain/processReactiveTransition.js +33 -18
  398. package/dist/domain/processScenario.js +56 -90
  399. package/dist/domain/processTraceComparison.js +0 -8
  400. package/dist/domain/processTraceEvaluation.js +14 -4
  401. package/dist/domain/processTraceSpecification.js +11 -17
  402. package/dist/domain/protocolCapture.js +3 -3
  403. package/dist/domain/reconstructionCoverage.js +62 -129
  404. package/dist/domain/reconstructionCoverageEvaluation.js +17 -17
  405. package/dist/domain/reconstructionObligationLedgerSchemas.js +45 -72
  406. package/dist/domain/reconstructionReadiness.js +1 -2
  407. package/dist/domain/reconstructionReadinessSchemas.js +36 -38
  408. package/dist/domain/reconstructionUnknowns.js +3 -3
  409. package/dist/domain/reconstructionVerification.js +13 -47
  410. package/dist/domain/reconstructionVerificationSchemas.js +50 -38
  411. package/dist/domain/referenceSourceGraph.js +53 -61
  412. package/dist/domain/referenceSourceImportParsing.js +1 -5
  413. package/dist/domain/replayMachine.js +19 -31
  414. package/dist/domain/replayMachineRun.js +15 -63
  415. package/dist/domain/replayMachineRuntime.js +41 -41
  416. package/dist/domain/replayMachineValues.js +84 -0
  417. package/dist/domain/residualUnknown.js +25 -30
  418. package/dist/domain/runtimeCharacterization.js +15 -16
  419. package/dist/domain/runtimeIdentification.js +48 -47
  420. package/dist/domain/sourceToBundleComparison.js +9 -85
  421. package/dist/domain/sourceToBundleComparisonSchemas.js +17 -42
  422. package/dist/domain/sourceToBundleSignals.js +4 -15
  423. package/dist/domain/staticRuntimeCorrelation.js +37 -49
  424. package/dist/domain/symbolAnalysis.js +10 -19
  425. package/dist/domain/unicodeCodePointOrder.js +12 -0
  426. package/dist/domain/webBundleAnalysis.js +70 -99
  427. package/dist/domain/webBundleAnalyzer.js +2 -4
  428. package/dist/domain/webBundleAnalyzerAst.js +0 -13
  429. package/dist/domain/webBundleAnalyzerInspection.js +26 -52
  430. package/dist/domain/webBundleAnalyzerResult.js +7 -24
  431. package/dist/domain/webCaptureDiff.js +33 -73
  432. package/dist/domain/webCaptureDiffSchemas.js +86 -0
  433. package/dist/domain/webContentArtifact.js +1 -10
  434. package/dist/domain/webMcpDiscovery.js +3 -14
  435. package/dist/domain/webScreenshot.js +58 -34
  436. package/dist/domain/zipPackageFormat.js +7 -0
  437. package/dist/dotnet/ManagedArtifactInspector.js +17 -50
  438. package/dist/dotnet/ManagedMemberInspector.js +27 -58
  439. package/dist/dotnet/ManagedMemberInspectorCore.js +14 -51
  440. package/dist/dotnet/ManagedMemberInstructionDecoder.js +2 -2
  441. package/dist/dotnet/ManagedMemberRows.js +16 -16
  442. package/dist/dotnet/ManagedMetadataHeaps.js +26 -8
  443. package/dist/dotnet/ManagedMetadataInventory.js +21 -30
  444. package/dist/dotnet/ManagedMetadataInventoryRows.js +57 -63
  445. package/dist/dotnet/ManagedMetadataLayout.js +3 -5
  446. package/dist/dotnet/ManagedMethodBodyReader.js +5 -30
  447. package/dist/dotnet/ManagedNativeBoundaryHelpers.js +19 -49
  448. package/dist/dotnet/ManagedNativeBoundaryInspector.js +13 -41
  449. package/dist/dotnet/ManagedPeReader.js +2 -2
  450. package/dist/dotnet/ManagedStaticProvider.js +13 -71
  451. package/dist/generatedMcpToolCatalog.js +1 -1
  452. package/dist/generatedPackageMetadata.js +1 -1
  453. package/dist/ghidra/GhidraAnalysisProfile.js +3 -8
  454. package/dist/ghidra/GhidraClient.js +4 -12
  455. package/dist/ghidra/GhidraClientWire.js +9 -5
  456. package/dist/ghidra/GhidraDefaults.js +0 -18
  457. package/dist/ghidra/GhidraDiagnostics.js +0 -2
  458. package/dist/ghidra/GhidraDoctor.js +16 -12
  459. package/dist/ghidra/GhidraFunctionValues.js +65 -108
  460. package/dist/ghidra/GhidraInstallation.js +98 -42
  461. package/dist/ghidra/GhidraInventoryValues.js +16 -85
  462. package/dist/ghidra/GhidraLauncher.js +0 -8
  463. package/dist/ghidra/GhidraProvider.js +15 -22
  464. package/dist/ghidra/GhidraProviderCapabilities.js +6 -47
  465. package/dist/ghidra/GhidraRequestQueue.js +6 -30
  466. package/dist/ghidra/GhidraResponseBuffer.js +1 -7
  467. package/dist/ghidra/GhidraSessionValues.js +0 -2
  468. package/dist/ghidra/GhidraTransport.js +4 -7
  469. package/dist/ghidra/protocol.js +2 -2
  470. package/dist/hopper/BridgeLauncher.js +112 -36
  471. package/dist/hopper/HopperAnalysisProfile.js +1 -1
  472. package/dist/hopper/HopperCleanup.js +6 -3
  473. package/dist/hopper/HopperClient.js +4 -7
  474. package/dist/hopper/HopperProcessDiagnostic.js +2 -2
  475. package/dist/hopper/HopperProvider.js +0 -16
  476. package/dist/hopper/HopperRequestQueue.js +21 -40
  477. package/dist/hopper/HopperResponseStream.js +1 -9
  478. package/dist/hopper/HopperSessionValues.js +3 -2
  479. package/dist/hopper/HopperTargetLease.js +119 -0
  480. package/dist/hopper/LinuxPrivateDisplayDiagnostic.js +24 -31
  481. package/dist/hopper/LinuxPrivateDisplayProbe.js +5 -16
  482. package/dist/hopper/protocol.js +6 -4
  483. package/dist/main/reload.js +0 -3
  484. package/dist/main/shutdown.js +1 -1
  485. package/dist/main/state.js +0 -9
  486. package/dist/main/transport.js +0 -5
  487. package/dist/mcpDoctor.js +25 -45
  488. package/dist/native/CommandRunner.js +18 -25
  489. package/dist/native/NativeMacOSProvider.js +13 -38
  490. package/dist/native/NativeMachoInspection.js +1 -1
  491. package/dist/process/BoundedFileBytes.js +17 -0
  492. package/dist/process/ExecFileOutput.js +11 -0
  493. package/dist/process/PendingOperations.js +8 -6
  494. package/dist/process/ProcessOwnership.js +3 -2
  495. package/dist/process/ProcessOwnershipObservation.js +0 -1
  496. package/dist/process/ProviderProcess.js +7 -28
  497. package/dist/reference/ReferenceSourceReader.js +8 -24
  498. package/dist/reference/ReferenceSourceReaderEntries.js +11 -39
  499. package/dist/reference/ReferenceSourceReaderFile.js +13 -31
  500. package/dist/reference/ReferenceSourceReaderPaths.js +3 -18
  501. package/dist/reference/ReferenceSourceReaderValidate.js +3 -6
  502. package/dist/replay/JavaScriptReplayWorker.js +3 -5
  503. package/dist/replay/LinuxJavaScriptReplayRunner.js +33 -29
  504. package/dist/replay/LinuxJavaScriptReplaySandbox.js +0 -19
  505. package/dist/replay/LinuxRuntimeClosure.js +1 -3
  506. package/dist/replay/ReplayOutcome.js +1 -3
  507. package/dist/replay/ReplayProcessLifecycle.js +32 -7
  508. package/dist/replay/ReplaySeccompFile.js +29 -0
  509. package/dist/replay/ReplayWorkerProtocol.js +0 -2
  510. package/dist/replay/SystemJavaScriptReplayHost.js +45 -74
  511. package/dist/server/ProcessCaptureElicitation.js +4 -8
  512. package/dist/server/createServer.js +6 -44
  513. package/dist/server/promptCompletion.js +37 -61
  514. package/dist/server/recordDerivedEvidence.js +1 -1
  515. package/dist/server/registerApplicationTools/characterization.js +4 -8
  516. package/dist/server/registerApplicationTools/compareExportShapes.js +5 -10
  517. package/dist/server/registerApplicationTools/compareSourceToBundle.js +6 -10
  518. package/dist/server/registerApplicationTools/compareVersions.js +5 -10
  519. package/dist/server/registerApplicationTools/controlledReplay.js +3 -5
  520. package/dist/server/registerApplicationTools/coverage.js +6 -71
  521. package/dist/server/registerApplicationTools/helpers.js +1 -13
  522. package/dist/server/registerApplicationTools/obligationLedger.js +3 -2
  523. package/dist/server/registerApplicationTools/traceFeature.js +5 -9
  524. package/dist/server/registerApplicationTools/traceSemantics.js +5 -8
  525. package/dist/server/registerApplicationTools.js +0 -2
  526. package/dist/server/registerArtifactComparisonTool.js +23 -27
  527. package/dist/server/registerBrowserScenarioTool.js +4 -4
  528. package/dist/server/registerBrowserTools.js +5 -8
  529. package/dist/server/registerBundleComparisonTool.js +5 -7
  530. package/dist/server/registerCloseLifecycleTool.js +2 -16
  531. package/dist/server/registerElectronTools.js +10 -29
  532. package/dist/server/registerEnhancedTools.js +10 -11
  533. package/dist/server/registerEvidenceTools.js +15 -22
  534. package/dist/server/registerFunctionComparisonTool.js +30 -25
  535. package/dist/server/registerInvestigationTools/helpers.js +3 -32
  536. package/dist/server/registerInvestigationTools.js +20 -116
  537. package/dist/server/registerJavaScriptRuntimeObservationTools.js +6 -4
  538. package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +15 -17
  539. package/dist/server/registerManagedWorkflowTools/evidence.js +19 -35
  540. package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +3 -8
  541. package/dist/server/registerManagedWorkflowTools/planManagedRuntimeCorrelation.js +3 -8
  542. package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +10 -14
  543. package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +9 -15
  544. package/dist/server/registerOfficialTools.js +1 -43
  545. package/dist/server/registerProcessComparisonTool.js +33 -23
  546. package/dist/server/registerPrompts.js +19 -17
  547. package/dist/server/registerSessionRecordTools.js +10 -156
  548. package/dist/server/registerSessionStatusTool.js +6 -69
  549. package/dist/server/registerSessionTools.js +10 -51
  550. package/dist/server/sessionAvailabilityPolicy.js +0 -2
  551. package/dist/server/sessionEvidence.js +9 -15
  552. package/dist/server/sessionToolPolicies.js +0 -8
  553. package/dist/server/toolResult.js +14 -50
  554. package/dist/serverIdentity.js +0 -20
  555. package/install.sh +1 -1
  556. package/package.json +11 -7
  557. package/scripts/electron-active-hook.cjs +23 -55
  558. package/scripts/hopper-demo-x11.py +13 -32
  559. package/skills/reverse-engineer-anything/SKILL.md +47 -12
  560. package/skills/reverse-engineer-anything/references/evidence-workflows.md +6 -4
  561. package/skills/reverse-engineer-anything/references/javascript-applications.md +13 -13
  562. package/skills/reverse-engineer-anything/references/native-and-artifacts.md +12 -8
  563. package/dist/application/ApplicationWorkflowEvidenceResolver.js +0 -188
  564. package/dist/application/BoundedJsonFiles.js +0 -86
  565. package/dist/application/CrossVersionInventory.js +0 -129
  566. package/dist/application/CrossVersionInvestigation.js +0 -301
  567. package/dist/application/CrossVersionInvestigationCollections.js +0 -23
  568. package/dist/application/CrossVersionInvestigationEvidence.js +0 -64
  569. package/dist/application/CrossVersionInvestigationReplay.js +0 -170
  570. package/dist/application/DeferredFileAuthorization.js +0 -61
  571. package/dist/application/DoctorProjection.js +0 -43
  572. package/dist/application/EnhancedToolPagination.js +0 -22
  573. package/dist/application/EvidenceReferenceResolver.js +0 -26
  574. package/dist/application/InvestigationWorkspaceStore.js +0 -204
  575. package/dist/application/ProcessPairedExperiment.js +0 -72
  576. package/dist/application/ReconstructionCoverageWorkspaceStore.js +0 -31
  577. package/dist/application/ReconstructionReadinessService.js +0 -48
  578. package/dist/cliInvestigationCommands.js +0 -173
  579. package/dist/domain/boundedCartesianProjection.js +0 -15
  580. package/dist/domain/investigationWorkspace.js +0 -347
  581. package/dist/domain/jsonLimits.js +0 -26
  582. package/dist/domain/knownPageCoverage.js +0 -29
  583. package/dist/domain/processPairedExperiment.js +0 -128
  584. package/dist/server/javascriptApplicationResult.js +0 -106
  585. package/dist/server/permissionFailure.js +0 -12
  586. package/dist/server/registerApplicationTools/readiness.js +0 -50
  587. package/dist/server/registerEvidenceResources.js +0 -315
  588. package/dist/server/registerJavaScriptApplicationGraphResource.js +0 -65
  589. package/dist/server/registerReconstructionObligationLedgerResource.js +0 -32
  590. package/dist/server/registerReconstructionReadinessResource.js +0 -32
@@ -0,0 +1,84 @@
1
+ /** Compare JSON-compatible replay values without recursive stack growth. */
2
+ export const replayValuesEqual = (left, right) => {
3
+ const pending = [[left, right]];
4
+ while (pending.length > 0) {
5
+ const pair = pending.pop();
6
+ if (pair === undefined)
7
+ continue;
8
+ const [currentLeft, currentRight] = pair;
9
+ const primitive = equalPrimitiveReplayValues(currentLeft, currentRight);
10
+ if (primitive !== undefined) {
11
+ if (!primitive)
12
+ return false;
13
+ continue;
14
+ }
15
+ const array = compareReplayArrays(currentLeft, currentRight, pending);
16
+ if (array !== undefined) {
17
+ if (!array)
18
+ return false;
19
+ continue;
20
+ }
21
+ if (!compareReplayRecords(currentLeft, currentRight, pending))
22
+ return false;
23
+ }
24
+ return true;
25
+ };
26
+ /** Check that captured values can be serialized as JSON without recursion. */
27
+ export const isJsonCompatible = (value) => {
28
+ const pending = [value];
29
+ while (pending.length > 0) {
30
+ const candidate = pending.pop();
31
+ if (candidate === null ||
32
+ typeof candidate === "string" ||
33
+ typeof candidate === "boolean")
34
+ continue;
35
+ if (typeof candidate === "number") {
36
+ if (!Number.isFinite(candidate))
37
+ return false;
38
+ continue;
39
+ }
40
+ if (Array.isArray(candidate)) {
41
+ for (const item of candidate)
42
+ pending.push(item);
43
+ continue;
44
+ }
45
+ if (typeof candidate !== "object")
46
+ return false;
47
+ for (const item of Object.values(candidate))
48
+ pending.push(item);
49
+ }
50
+ return true;
51
+ };
52
+ const equalPrimitiveReplayValues = (left, right) => {
53
+ if (left === null || typeof left === "string" || typeof left === "boolean")
54
+ return left === right;
55
+ if (typeof left !== "number")
56
+ return undefined;
57
+ return (Number.isFinite(left) &&
58
+ left === right &&
59
+ typeof right === "number" &&
60
+ Number.isFinite(right));
61
+ };
62
+ const compareReplayArrays = (left, right, pending) => {
63
+ if (!Array.isArray(left))
64
+ return undefined;
65
+ if (!Array.isArray(right) || left.length !== right.length)
66
+ return false;
67
+ for (let index = 0; index < left.length; index += 1)
68
+ pending.push([left[index], right[index]]);
69
+ return true;
70
+ };
71
+ const compareReplayRecords = (left, right, pending) => {
72
+ if (typeof left !== "object" || left === null)
73
+ return undefined;
74
+ if (typeof right !== "object" || right === null || Array.isArray(right))
75
+ return false;
76
+ const leftKeys = Object.keys(left).sort();
77
+ const rightKeys = Object.keys(right).sort();
78
+ if (leftKeys.length !== rightKeys.length ||
79
+ leftKeys.some((key, index) => key !== rightKeys[index]))
80
+ return false;
81
+ for (const key of leftKeys)
82
+ pending.push([Reflect.get(left, key), Reflect.get(right, key)]);
83
+ return true;
84
+ };
@@ -3,18 +3,18 @@ import canonicalize from "canonicalize";
3
3
  import { z } from "zod";
4
4
  const evidenceIdSchema = z.string().regex(/^ev_[a-f0-9]{64}$/u);
5
5
  const unknownIdSchema = z.string().regex(/^unk_[a-f0-9]{64}$/u);
6
- const boundedText = z.string().trim().min(1).max(1_000);
6
+ const text = z.string().trim().min(1);
7
7
  const environmentRequirementSchema = z.object({
8
- id: z.string().min(1).max(200).nullable(),
9
- platform: z.string().min(1).max(100).nullable(),
10
- architecture: z.string().min(1).max(100).nullable(),
8
+ id: z.string().min(1).nullable(),
9
+ platform: z.string().min(1).nullable(),
10
+ architecture: z.string().min(1).nullable(),
11
11
  isolation: z
12
12
  .enum(["none", "process", "container", "virtual-machine"])
13
13
  .nullable(),
14
14
  });
15
15
  const probeSchema = z.object({
16
- operation: z.string().min(1).max(200),
17
- rationale: boundedText,
16
+ operation: z.string().min(1),
17
+ rationale: text,
18
18
  });
19
19
  const relationshipSchema = z.object({
20
20
  type: z.enum(["depends-on", "related-to", "contradicts"]),
@@ -23,18 +23,17 @@ const relationshipSchema = z.object({
23
23
  const resolutionSchema = z.discriminatedUnion("disposition", [
24
24
  z.object({
25
25
  disposition: z.literal("verified"),
26
- rationale: boundedText,
27
- evidence_ids: z.array(evidenceIdSchema).min(1).max(100),
26
+ rationale: text,
27
+ evidence_ids: z.array(evidenceIdSchema).min(1),
28
28
  }),
29
29
  z.object({
30
30
  disposition: z.enum(["withdrawn", "out-of-scope"]),
31
- rationale: boundedText,
32
- evidence_ids: z.array(evidenceIdSchema).max(100),
31
+ rationale: text,
32
+ evidence_ids: z.array(evidenceIdSchema),
33
33
  }),
34
34
  ]);
35
35
  /** Strict durable record for one unresolved or evidence-qualified question. */
36
36
  const residualUnknownObjectSchema = z.object({
37
- registry_version: z.literal(1),
38
37
  unknown_id: unknownIdSchema,
39
38
  revision: z.number().int().min(1),
40
39
  previous_revision_digest: z
@@ -46,7 +45,7 @@ const residualUnknownObjectSchema = z.object({
46
45
  .string()
47
46
  .regex(/^[a-f0-9]{64}$/u)
48
47
  .nullable(),
49
- question: boundedText,
48
+ question: text,
50
49
  status: z.enum([
51
50
  "open",
52
51
  "investigating",
@@ -55,9 +54,9 @@ const residualUnknownObjectSchema = z.object({
55
54
  "resolved",
56
55
  ]),
57
56
  severity: z.enum(["low", "medium", "high", "critical"]),
58
- domain: z.string().trim().min(1).max(100),
59
- supporting_evidence_ids: z.array(evidenceIdSchema).max(100),
60
- contradicting_evidence_ids: z.array(evidenceIdSchema).max(100),
57
+ domain: text,
58
+ supporting_evidence_ids: z.array(evidenceIdSchema),
59
+ contradicting_evidence_ids: z.array(evidenceIdSchema),
61
60
  required_authority: z
62
61
  .enum([
63
62
  "shipped-artifact",
@@ -69,10 +68,10 @@ const residualUnknownObjectSchema = z.object({
69
68
  .nullable(),
70
69
  required_confidence: z.enum(["observed", "derived", "inferred"]),
71
70
  required_environment: environmentRequirementSchema.nullable(),
72
- recommended_probes: z.array(probeSchema).max(20),
73
- relationships: z.array(relationshipSchema).max(100),
71
+ recommended_probes: z.array(probeSchema),
72
+ relationships: z.array(relationshipSchema),
74
73
  resolution: resolutionSchema.nullable(),
75
- mutation_evidence_ids: z.array(evidenceIdSchema).min(1).max(100),
74
+ mutation_evidence_ids: z.array(evidenceIdSchema).min(1),
76
75
  });
77
76
  export const residualUnknownSchema = residualUnknownObjectSchema.superRefine((value, context) => {
78
77
  if (computeRevisionDigest(value) !== value.revision_digest)
@@ -116,7 +115,8 @@ export const residualUnknownSchema = residualUnknownObjectSchema.superRefine((va
116
115
  code: "custom",
117
116
  message: "Evidence IDs must be unique",
118
117
  });
119
- if (value.supporting_evidence_ids.some((id) => value.contradicting_evidence_ids.includes(id)))
118
+ const contradictingEvidence = new Set(value.contradicting_evidence_ids);
119
+ if (value.supporting_evidence_ids.some((id) => contradictingEvidence.has(id)))
120
120
  context.addIssue({
121
121
  code: "custom",
122
122
  message: "Evidence cannot simultaneously support and contradict",
@@ -132,7 +132,6 @@ export const residualUnknownSchema = residualUnknownObjectSchema.superRefine((va
132
132
  /** Input for deterministic creation of one residual unknown. */
133
133
  export const recordUnknownInputSchema = residualUnknownObjectSchema
134
134
  .omit({
135
- registry_version: true,
136
135
  unknown_id: true,
137
136
  revision: true,
138
137
  previous_revision_digest: true,
@@ -145,24 +144,22 @@ export const recordUnknownInputSchema = residualUnknownObjectSchema
145
144
  mutation_evidence_ids: true,
146
145
  })
147
146
  .extend({
148
- supporting_evidence_ids: z.array(evidenceIdSchema).max(100).default([]),
149
- contradicting_evidence_ids: z.array(evidenceIdSchema).max(100).default([]),
150
- approved: z.literal(true),
147
+ supporting_evidence_ids: z.array(evidenceIdSchema).default([]),
148
+ contradicting_evidence_ids: z.array(evidenceIdSchema).default([]),
151
149
  });
152
150
  /** Explicit optimistic-concurrency update command for one unknown. */
153
151
  export const updateUnknownInputSchema = z.object({
154
152
  unknown_id: unknownIdSchema,
155
153
  expected_revision: z.number().int().min(1),
156
- approved: z.literal(true),
157
154
  status: residualUnknownObjectSchema.shape.status,
158
155
  severity: residualUnknownObjectSchema.shape.severity,
159
- supporting_evidence_ids: z.array(evidenceIdSchema).max(100),
160
- contradicting_evidence_ids: z.array(evidenceIdSchema).max(100),
156
+ supporting_evidence_ids: z.array(evidenceIdSchema),
157
+ contradicting_evidence_ids: z.array(evidenceIdSchema),
161
158
  required_authority: residualUnknownObjectSchema.shape.required_authority,
162
159
  required_confidence: residualUnknownObjectSchema.shape.required_confidence,
163
160
  required_environment: environmentRequirementSchema.nullable(),
164
- recommended_probes: z.array(probeSchema).max(20),
165
- relationships: z.array(relationshipSchema).max(100),
161
+ recommended_probes: z.array(probeSchema),
162
+ relationships: z.array(relationshipSchema),
166
163
  resolution: resolutionSchema.nullable(),
167
164
  });
168
165
  /** Create stable identity from immutable question and domain fields. */
@@ -174,7 +171,6 @@ export const createResidualUnknown = (input, mutationEvidenceId, scopeDigest) =>
174
171
  scope_digest: scopeDigest,
175
172
  });
176
173
  const revision = {
177
- registry_version: 1,
178
174
  unknown_id: `unk_${createHash("sha256").update(identity).digest("hex")}`,
179
175
  revision: 1,
180
176
  previous_revision_digest: null,
@@ -194,7 +190,6 @@ export const createResidualUnknown = (input, mutationEvidenceId, scopeDigest) =>
194
190
  /** Apply a complete, revision-guarded replacement while preserving identity. */
195
191
  export const updateResidualUnknown = (current, input, mutationEvidenceId) => {
196
192
  const revision = {
197
- registry_version: 1,
198
193
  unknown_id: current.unknown_id,
199
194
  revision: current.revision + 1,
200
195
  previous_revision_digest: current.revision_digest,
@@ -2,24 +2,24 @@ import { createHash } from "node:crypto";
2
2
  import canonicalize from "canonicalize";
3
3
  import { z } from "zod";
4
4
  const digestSchema = z.string().regex(/^[a-f0-9]{64}$/u);
5
- const stableIdSchema = z.string().regex(/^[A-Za-z][A-Za-z0-9._:/-]{0,199}$/u);
5
+ const stableIdSchema = z.string().regex(/^[A-Za-z][A-Za-z0-9._:/-]*$/u);
6
6
  const runtimeIdentitySchema = z.strictObject({
7
- family: z.string().trim().min(1).max(100),
7
+ family: z.string().trim().min(1),
8
8
  provider_id: stableIdSchema,
9
- executable_path: z.string().min(1).max(4_096),
9
+ executable_path: z.string().min(1),
10
10
  executable_sha256: digestSchema,
11
- version: z.string().trim().min(1).max(500),
11
+ version: z.string().trim().min(1),
12
12
  profile_sha256: digestSchema,
13
13
  });
14
14
  const artifactIdentitySchema = z.strictObject({
15
- path: z.string().min(1).max(4_096),
15
+ path: z.string().min(1),
16
16
  sha256: digestSchema,
17
17
  byte_length: z.number().int().min(0).max(Number.MAX_SAFE_INTEGER),
18
18
  });
19
19
  const callableIdentitySchema = z.strictObject({
20
20
  callable_id: stableIdSchema,
21
21
  module_id: stableIdSchema,
22
- export_name: z.string().min(1).max(1_000),
22
+ export_name: z.string().min(1),
23
23
  semantic_evidence_id: z
24
24
  .string()
25
25
  .regex(/^ev_[a-f0-9]{64}$/u)
@@ -27,24 +27,23 @@ const callableIdentitySchema = z.strictObject({
27
27
  selector_sha256: digestSchema,
28
28
  });
29
29
  export const runtimeCharacterizationPlanSchema = z.strictObject({
30
- schema_version: z.literal(1),
31
30
  plan_sha256: digestSchema,
32
31
  preparation_sha256: digestSchema,
33
32
  artifact: artifactIdentitySchema,
34
33
  runtime: runtimeIdentitySchema,
35
34
  callable: callableIdentitySchema,
36
- working_directory: z.string().min(1).max(4_096),
37
- isolated_home: z.string().min(1).max(4_096),
35
+ working_directory: z.string().min(1),
36
+ isolated_home: z.string().min(1),
38
37
  expected_effect: z.enum(["pure", "bounded-effects", "observation-only"]),
39
- allowed_boundaries: z.array(stableIdSchema).max(1_000),
38
+ allowed_boundaries: z.array(stableIdSchema),
40
39
  limits: z.strictObject({
41
- max_calls: z.number().int().min(1).max(10_000),
42
- max_processes: z.number().int().min(0).max(1_000),
43
- max_files: z.number().int().min(0).max(100_000),
40
+ max_calls: z.number().int().min(1),
41
+ max_processes: z.number().int().min(0),
42
+ max_files: z.number().int().min(0),
44
43
  max_bytes: z.number().int().min(1).max(Number.MAX_SAFE_INTEGER),
45
- max_handles: z.number().int().min(0).max(100_000),
46
- timeout_ms: z.number().int().min(1).max(300_000),
47
- idle_timeout_ms: z.number().int().min(1).max(300_000),
44
+ max_handles: z.number().int().min(0),
45
+ timeout_ms: z.number().int().min(1),
46
+ idle_timeout_ms: z.number().int().min(1),
48
47
  }),
49
48
  determinism: z.strictObject({
50
49
  clock: z.enum(["fixed", "real"]),
@@ -14,45 +14,51 @@ const runtimeFamilySchema = z.enum([
14
14
  "webassembly",
15
15
  ]);
16
16
  const observationSchema = z.strictObject({
17
- path: z.string().min(1).max(4_096),
17
+ path: z.string().min(1),
18
18
  artifact_id: z.string().regex(/^art_[a-f0-9]{64}$/u),
19
19
  sha256: digestSchema,
20
- format: z.string().min(1).max(100),
20
+ format: z.string().min(1),
21
21
  });
22
+ const runtimeObservationShape = {
23
+ family: runtimeFamilySchema,
24
+ observations: z.array(observationSchema),
25
+ };
26
+ const identifiedRuntimeSchema = z.discriminatedUnion("inspection", [
27
+ z.strictObject({
28
+ ...runtimeObservationShape,
29
+ inspection: z.literal("available"),
30
+ provider_id: z.string().min(1),
31
+ reason: z.null(),
32
+ }),
33
+ z.strictObject({
34
+ ...runtimeObservationShape,
35
+ inspection: z.literal("provider-missing"),
36
+ provider_id: z.null(),
37
+ reason: z.string().min(1),
38
+ }),
39
+ z.strictObject({
40
+ ...runtimeObservationShape,
41
+ inspection: z.literal("provider-selection-required"),
42
+ provider_id: z.null(),
43
+ reason: z.string().min(1),
44
+ }),
45
+ ]);
22
46
  /** Authenticated artifact inventory pages to classify by runtime family. */
23
47
  const runtimeIdentificationInputSchema = z.strictObject({
24
- inventory_evidence: z.array(evidenceSchema).min(1).max(100),
25
- limits: z
26
- .strictObject({
27
- max_observations: z.number().int().min(1).max(10_000).default(1_000),
28
- })
29
- .default({ max_observations: 1_000 }),
48
+ inventory_evidence: z.array(evidenceSchema).min(1),
30
49
  });
31
50
  /** Provider-neutral runtime identification with explicit tooling availability. */
32
51
  export const runtimeIdentificationResultSchema = z.strictObject({
33
- schema_version: z.literal(1),
34
52
  identification_id: z.string().regex(/^rid_[a-f0-9]{64}$/u),
35
53
  root_sha256: digestSchema,
36
- root_format: z.string().min(1).max(100),
37
- source_evidence_ids: z.array(evidenceIdSchema).min(1).max(100),
38
- runtimes: z.array(z.strictObject({
39
- family: runtimeFamilySchema,
40
- inspection: z.enum([
41
- "available",
42
- "provider-missing",
43
- "provider-selection-required",
44
- ]),
45
- provider_id: z.string().min(1).max(200).nullable(),
46
- reason: z.string().min(1).max(1_000).nullable(),
47
- observations: z.array(observationSchema),
48
- omitted_observations: z.number().int().min(0),
49
- })),
54
+ root_format: z.string().min(1),
55
+ source_evidence_ids: z.array(evidenceIdSchema).min(1),
56
+ runtimes: z.array(identifiedRuntimeSchema),
50
57
  coverage: z.strictObject({
51
- status: z.enum(["complete-within-inventory", "partial", "truncated"]),
58
+ status: z.enum(["complete-within-inventory", "partial"]),
52
59
  inventory_complete: z.boolean(),
53
- omitted_observations: z.number().int().min(0),
54
60
  }),
55
- limitations: z.array(z.string().min(1).max(4_096)).max(100),
61
+ limitations: z.array(z.string().min(1)),
56
62
  });
57
63
  const PROVIDERS = {
58
64
  android: {
@@ -117,24 +123,15 @@ export const identifyRuntimes = (input) => {
117
123
  sha256: rootObservation.sha256,
118
124
  format: rootObservation.format,
119
125
  });
120
- let remaining = parsed.limits.max_observations;
121
- let omitted = 0;
122
126
  const runtimes = [...grouped.entries()]
123
127
  .sort(([left], [right]) => compare(left, right))
124
128
  .map(([family, values]) => {
125
129
  const unique = deduplicate(values);
126
- const observations = unique.slice(0, remaining);
127
- remaining -= observations.length;
128
- const omittedObservations = unique.length - observations.length;
129
- omitted += omittedObservations;
130
130
  const provider = providerFor(family, inventory.manifest.root_format);
131
131
  return {
132
132
  family,
133
- inspection: provider.inspection,
134
- provider_id: provider.id,
135
- reason: provider.reason,
136
- observations,
137
- omitted_observations: omittedObservations,
133
+ ...runtimeInspection(provider),
134
+ observations: unique,
138
135
  };
139
136
  });
140
137
  const limitations = [
@@ -143,13 +140,9 @@ export const identifyRuntimes = (input) => {
143
140
  "Source inventory pages are incomplete; absent runtimes remain unknown.",
144
141
  ]
145
142
  : []),
146
- ...(omitted > 0
147
- ? [`${String(omitted)} runtime observations were omitted by the limit.`]
148
- : []),
149
143
  "Runtime families are identified from exact artifact formats and paths; semantic claims require the named provider.",
150
144
  ];
151
145
  const withoutId = {
152
- schema_version: 1,
153
146
  root_sha256: inventory.manifest.root_sha256,
154
147
  root_format: inventory.manifest.root_format,
155
148
  source_evidence_ids: evidence
@@ -157,13 +150,10 @@ export const identifyRuntimes = (input) => {
157
150
  .sort(compare),
158
151
  runtimes,
159
152
  coverage: {
160
- status: omitted > 0
161
- ? "truncated"
162
- : inventory.complete
163
- ? "complete-within-inventory"
164
- : "partial",
153
+ status: inventory.complete
154
+ ? "complete-within-inventory"
155
+ : "partial",
165
156
  inventory_complete: inventory.complete,
166
- omitted_observations: omitted,
167
157
  },
168
158
  limitations,
169
159
  };
@@ -179,6 +169,17 @@ const providerFor = (family, rootFormat) => family === "android" && rootFormat !
179
169
  reason: "Extract or select an APK root before using the Android application provider.",
180
170
  }
181
171
  : PROVIDERS[family];
172
+ const runtimeInspection = (provider) => provider.inspection === "available"
173
+ ? {
174
+ inspection: provider.inspection,
175
+ provider_id: provider.id,
176
+ reason: null,
177
+ }
178
+ : {
179
+ inspection: provider.inspection,
180
+ provider_id: null,
181
+ reason: provider.reason,
182
+ };
182
183
  const familiesFor = (format, path) => {
183
184
  const families = new Set();
184
185
  if (format === "apk" ||
@@ -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.slice(0, input.limits.max_source_files);
46
- const currentNodes = allCurrentNodes.slice(0, input.limits.max_application_nodes);
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
- const retainedIds = candidateIds.slice(0, evaluationsRemaining);
79
- const omittedEvaluations = candidateIds.length - retainedIds.length;
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 retainedCandidates = scored.slice(0, input.limits.max_candidate_nodes);
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: retainedCandidates,
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/v1",
100
+ algorithm: "rea-source-to-bundle-signals",
137
101
  minimum_candidate_score: 20,
138
102
  weights: SOURCE_TO_BUNDLE_SIGNAL_WEIGHTS.map(([signal, weight]) => ({
139
103
  signal,
140
104
  weight,
141
105
  })),
142
106
  });
143
- const classifyMapping = (candidates, evaluationComplete, absenceComplete) => {
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 ||