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.
Files changed (628) hide show
  1. package/README.md +83 -108
  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/AnalysisContextQueries.js +21 -9
  6. package/dist/application/AnalysisSnapshotCache.js +0 -1
  7. package/dist/application/AnalysisSnapshotFiles.js +7 -7
  8. package/dist/application/AndroidApplicationService.js +1 -1
  9. package/dist/application/AppleApplicationService.js +1 -1
  10. package/dist/application/ArtifactExtraction.js +35 -54
  11. package/dist/application/ArtifactExtractionDestination.js +17 -0
  12. package/dist/application/ArtifactGraphConstruction.js +2 -17
  13. package/dist/application/ArtifactInventory/classify.js +2 -6
  14. package/dist/application/ArtifactInventory/hash.js +2 -20
  15. package/dist/application/ArtifactInventory/policy.js +17 -0
  16. package/dist/application/ArtifactInventory/reader.js +1 -4
  17. package/dist/application/ArtifactInventory/scanCanonical.js +8 -15
  18. package/dist/application/ArtifactInventory/scanReader.js +76 -58
  19. package/dist/application/ArtifactInventory/types.js +1 -5
  20. package/dist/application/ArtifactInventory.js +6 -14
  21. package/dist/application/AuthorizedArtifactInventory.js +3 -13
  22. package/dist/application/BinarySession.js +54 -28
  23. package/dist/application/BinarySessionComposition.js +0 -11
  24. package/dist/application/BinarySessionOpen.js +2 -1
  25. package/dist/application/BinarySessionRecords.js +24 -86
  26. package/dist/application/BinarySessionStatus.js +16 -21
  27. package/dist/application/BinaryTargetResolver.js +216 -0
  28. package/dist/application/BrowserEvidence.js +39 -57
  29. package/dist/application/BrowserObservationService.js +3 -6
  30. package/dist/application/BrowserScenarioCaptureService.js +3 -6
  31. package/dist/application/BrowserScenarioEvidence.js +3 -3
  32. package/dist/application/CallPathTracing.js +2 -36
  33. package/dist/application/CapabilityClientRequirements.js +26 -0
  34. package/dist/application/CapabilityInventory.js +143 -77
  35. package/dist/application/ClientConfigurationDocument.js +27 -0
  36. package/dist/application/ClientRegistrationStatus.js +16 -13
  37. package/dist/application/CommandShimReplay.js +14 -1
  38. package/dist/application/DirectAnalysis.js +22 -46
  39. package/dist/application/DirectAnalysisStatus.js +5 -61
  40. package/dist/application/Doctor.js +11 -32
  41. package/dist/application/DoctorDiagnostics.js +1 -2
  42. package/dist/application/DoctorScope.js +1 -1
  43. package/dist/application/ElectronActiveEvidence.js +50 -0
  44. package/dist/application/ElectronActiveObservationPort.js +1 -0
  45. package/dist/application/ElectronActiveObservationService.js +78 -0
  46. package/dist/application/ElectronBoundaryAnalysis.js +7 -8
  47. package/dist/application/ElectronBoundaryGraphContext.js +1 -1
  48. package/dist/application/ElectronBoundaryGraphIpc.js +3 -3
  49. package/dist/application/ElectronBoundaryGraphNative.js +1 -2
  50. package/dist/application/ElectronBoundaryGraphWindows.js +6 -8
  51. package/dist/application/ElectronEvidence.js +4 -7
  52. package/dist/application/ElectronObservationService.js +5 -9
  53. package/dist/application/EnhancedLiteralTracing.js +42 -65
  54. package/dist/application/EnhancedTools.js +98 -64
  55. package/dist/application/EvidenceBundleCommands.js +16 -12
  56. package/dist/application/EvidenceBundleFiles.js +9 -15
  57. package/dist/application/EvidenceLedger.js +14 -42
  58. package/dist/application/FilesystemSnapshot.js +2 -3
  59. package/dist/application/InterfaceBuilderAnalysis.js +266 -0
  60. package/dist/application/InventoryProjectionEvidence.js +4 -2
  61. package/dist/application/InvestigationProviders.js +1 -1
  62. package/dist/application/JavaScriptApplicationEvidence.js +2 -5
  63. package/dist/application/JavaScriptApplicationEvidenceGraph.js +6 -10
  64. package/dist/application/JavaScriptApplicationService.js +6 -29
  65. package/dist/application/JavaScriptApplicationWorkflowEvidence.js +5 -5
  66. package/dist/application/JavaScriptApplicationWorkflowService.js +0 -8
  67. package/dist/application/JavaScriptArtifactAnalysis.js +38 -127
  68. package/dist/application/JavaScriptArtifactFiles.js +67 -107
  69. package/dist/application/JavaScriptArtifactGraphAccumulator.js +0 -7
  70. package/dist/application/JavaScriptArtifactGraphBuilder.js +7 -58
  71. package/dist/application/JavaScriptArtifactGraphBundlers.js +1 -6
  72. package/dist/application/JavaScriptArtifactGraphContext.js +12 -39
  73. package/dist/application/JavaScriptArtifactGraphDocuments.js +4 -11
  74. package/dist/application/JavaScriptArtifactGraphEvidence.js +0 -14
  75. package/dist/application/JavaScriptArtifactGraphFindings.js +3 -3
  76. package/dist/application/JavaScriptArtifactGraphStructure.js +16 -17
  77. package/dist/application/JavaScriptArtifactPathResolution.js +61 -49
  78. package/dist/application/JavaScriptArtifactReconstruction.js +5 -10
  79. package/dist/application/JavaScriptArtifactReconstructionInput.js +2 -14
  80. package/dist/application/JavaScriptJsonModules.js +2 -2
  81. package/dist/application/JavaScriptModuleRelationships.js +22 -27
  82. package/dist/application/JavaScriptReplayPermission.js +1 -1
  83. package/dist/application/JavaScriptReplayPlanning.js +9 -3
  84. package/dist/application/JavaScriptReplayService.js +29 -47
  85. package/dist/application/JavaScriptReturnShapeProjection.js +12 -42
  86. package/dist/application/JavaScriptRuntimeObservationEvidence.js +7 -8
  87. package/dist/application/JavaScriptRuntimeObservationService.js +4 -8
  88. package/dist/application/JavaScriptRuntimeReconciliationEvidence.js +2 -3
  89. package/dist/application/JavaScriptSemanticGraphBuilder.js +11 -41
  90. package/dist/application/JavaScriptSemanticGraphConstruction.js +5 -29
  91. package/dist/application/JavaScriptSemanticGraphEvidence.js +1 -1
  92. package/dist/application/JavaScriptSemanticGraphFingerprintProjection.js +1 -1
  93. package/dist/application/JavaScriptSemanticGraphFlowProjection.js +0 -13
  94. package/dist/application/JavaScriptSemanticGraphProjection.js +1 -3
  95. package/dist/application/JavaScriptSemanticTraceService.js +1 -10
  96. package/dist/application/JsonFiles.js +79 -0
  97. package/dist/application/LinuxHopper.js +11 -9
  98. package/dist/application/LoopbackReplay.js +26 -23
  99. package/dist/application/LoopbackReplayRecorder.js +29 -1
  100. package/dist/application/ManagedApplicationGraphService.js +1 -2
  101. package/dist/application/ManagedMemberComparisonService.js +11 -41
  102. package/dist/application/ManagedNativeVerificationService.js +1 -2
  103. package/dist/application/ManagedReconstructionService.js +1 -1
  104. package/dist/application/ManagedRuntimeCorrelationService.js +14 -13
  105. package/dist/application/NativeApiInspection.js +2 -7
  106. package/dist/application/NativeUiActionTrace.js +394 -0
  107. package/dist/application/NodeRuntimeCharacterizationService.js +11 -16
  108. package/dist/application/PermissionAuthority.js +15 -7
  109. package/dist/application/PermissionFailure.js +5 -0
  110. package/dist/application/ProcessCaptureAuthority.js +5 -7
  111. package/dist/application/ProcessCaptureJournal.js +3 -2
  112. package/dist/application/ProcessCaptureLifecycle.js +10 -12
  113. package/dist/application/ProcessCheckpoints.js +29 -11
  114. package/dist/application/ProcessCli.js +8 -17
  115. package/dist/application/ProcessEvidence.js +5 -7
  116. package/dist/application/ProcessHarness.js +60 -20
  117. package/dist/application/ProcessNormalization.js +2 -1
  118. package/dist/application/ProcessReactiveCoordinator.js +2 -4
  119. package/dist/application/ProcessReactiveEffects.js +9 -3
  120. package/dist/application/ProcessReactiveHarness.js +13 -7
  121. package/dist/application/ProcessSampling.js +2 -4
  122. package/dist/application/ProcessTimer.js +39 -0
  123. package/dist/application/ProjectPermissionStore.js +39 -95
  124. package/dist/application/RealHopperAssertions.js +20 -66
  125. package/dist/application/ReconstructionCoverageService.js +12 -58
  126. package/dist/application/ReconstructionObligationAuthority.js +2 -2
  127. package/dist/application/ReconstructionObligationCandidates.js +4 -4
  128. package/dist/application/ReconstructionObligationLedgerEvaluation.js +8 -15
  129. package/dist/application/ReconstructionObligationLedgerProjection.js +3 -7
  130. package/dist/application/ReconstructionObligationLedgerService.js +19 -38
  131. package/dist/application/ReferenceSourceImport.js +21 -47
  132. package/dist/application/ReferenceSourceImportEntries.js +2 -4
  133. package/dist/application/ReferenceSourceImportPolicy.js +5 -32
  134. package/dist/application/ReferenceSourceImportTypes.js +0 -16
  135. package/dist/application/RuntimeExecutableDiagnostics.js +55 -29
  136. package/dist/application/SessionProviderRouter.js +2 -2
  137. package/dist/application/Setup.js +1 -3
  138. package/dist/application/SetupClientConfiguration.js +22 -88
  139. package/dist/application/SetupRegistrationEnvironment.js +0 -7
  140. package/dist/application/StoreFileLock.js +119 -0
  141. package/dist/application/TerminalRenderer.js +2 -3
  142. package/dist/application/Uninstall.js +9 -14
  143. package/dist/application/UnknownEvidence.js +1 -1
  144. package/dist/application/WindowsCapabilities.js +5 -4
  145. package/dist/artifacts/ArtifactPaths.js +2 -5
  146. package/dist/artifacts/ArtifactProvider.js +43 -67
  147. package/dist/artifacts/DirectoryArtifactReader.js +13 -8
  148. package/dist/artifacts/MachOSliceArtifactReader.js +1 -5
  149. package/dist/artifacts/NativeDmgArtifactReader.js +11 -11
  150. package/dist/artifacts/NibArchive.js +269 -0
  151. package/dist/artifacts/SafeOutputTree.js +21 -31
  152. package/dist/browser/BrowserProcessStartup.js +1 -2
  153. package/dist/browser/CdpAuthorizedMainFrame.js +16 -0
  154. package/dist/browser/CdpBrowserProvider.js +3 -13
  155. package/dist/browser/CdpCanonicalJsonDigest.js +9 -0
  156. package/dist/browser/CdpCaptureDocuments.js +28 -76
  157. package/dist/browser/CdpCaptureEventBodyShapes.js +13 -33
  158. package/dist/browser/CdpCaptureEventHandlers.js +22 -87
  159. package/dist/browser/CdpCaptureEvents.js +2 -8
  160. package/dist/browser/CdpCaptureStorage.js +9 -20
  161. package/dist/browser/CdpCaptureStorageFingerprints.js +85 -95
  162. package/dist/browser/CdpCaptureValues.js +21 -21
  163. package/dist/browser/CdpConnection.js +10 -25
  164. package/dist/browser/CdpElectronInspection.js +29 -51
  165. package/dist/browser/CdpElectronProvider.js +10 -35
  166. package/dist/browser/CdpElectronScriptEvents.js +8 -16
  167. package/dist/browser/CdpElectronScripts.js +6 -35
  168. package/dist/browser/CdpElectronWorkers.js +6 -10
  169. package/dist/browser/CdpEndpoint.js +25 -41
  170. package/dist/browser/CdpObservationSession.js +14 -26
  171. package/dist/browser/CdpPageCapture.js +34 -48
  172. package/dist/browser/CdpPageCaptureScripts.js +1 -19
  173. package/dist/browser/CdpPageCaptureWorkers.js +6 -10
  174. package/dist/browser/CdpSafeMetadata.js +19 -22
  175. package/dist/browser/CdpScreenshot.js +3 -5
  176. package/dist/browser/CdpTargetSession.js +1 -2
  177. package/dist/browser/CdpWebMcpDiscovery.js +13 -22
  178. package/dist/browser/ElectronFileScope.js +8 -19
  179. package/dist/browser/JavaScriptRuntimeScope.js +10 -10
  180. package/dist/browser/PlaywrightBrowserScenarioProvider.js +31 -64
  181. package/dist/browser/PlaywrightElectronActiveActions.js +309 -0
  182. package/dist/browser/PlaywrightElectronActiveProvider.js +274 -0
  183. package/dist/browser/PlaywrightExecutionBoundary.js +16 -5
  184. package/dist/browser/PlaywrightScenarioActions.js +3 -7
  185. package/dist/browser/PlaywrightScenarioArtifacts.js +23 -92
  186. package/dist/browser/PlaywrightScenarioBrowser.js +7 -9
  187. package/dist/browser/PlaywrightScenarioEvents.js +45 -94
  188. package/dist/browser/PlaywrightScenarioSession.js +18 -34
  189. package/dist/browser/PngVisualDiff.js +22 -14
  190. package/dist/browser/SensitiveTextCapture.js +1 -18
  191. package/dist/browser/V8InspectorCaptureProjection.js +7 -7
  192. package/dist/browser/V8InspectorEndpoint.js +12 -14
  193. package/dist/browser/V8InspectorProvider.js +20 -61
  194. package/dist/browser/WebSourceMapFetcher.js +56 -176
  195. package/dist/catalogIdentity.js +12 -60
  196. package/dist/cli/artifactCommands.js +49 -77
  197. package/dist/cli/coreAnalysisCommands.js +83 -133
  198. package/dist/cli/javascriptApplicationAnalysis.js +1 -9
  199. package/dist/cli/managedCommands.js +6 -271
  200. package/dist/cli/setupCommands.js +3 -12
  201. package/dist/cli/utilityCommands.js +7 -41
  202. package/dist/cli.js +0 -2
  203. package/dist/cliApplicationCommands.js +44 -114
  204. package/dist/cliBrowserAdvancedCommands.js +12 -102
  205. package/dist/cliBrowserCommands.js +19 -124
  206. package/dist/cliBrowserContext.js +30 -0
  207. package/dist/cliCommandNames.js +5 -5
  208. package/dist/cliElectronCommands.js +49 -71
  209. package/dist/cliEvidenceCommands.js +8 -77
  210. package/dist/cliJavaScriptRuntimeCommands.js +18 -92
  211. package/dist/cliJsonInput.js +4 -14
  212. package/dist/cliObservationOptions.js +11 -92
  213. package/dist/cliPolicyCommands.js +2 -16
  214. package/dist/cliProcessCommands.js +3 -3
  215. package/dist/cliSetup.js +0 -13
  216. package/dist/config/browserScenario.js +77 -0
  217. package/dist/config/electronAutomation.js +35 -0
  218. package/dist/config/environment.js +6 -9
  219. package/dist/config/javascriptReplay.js +41 -0
  220. package/dist/config/managedRuntime.js +25 -0
  221. package/dist/config/parseConfig.js +56 -232
  222. package/dist/config/parsers.js +16 -28
  223. package/dist/config/passiveObservation.js +87 -0
  224. package/dist/config/permissions.js +0 -7
  225. package/dist/config/processCapture.js +47 -0
  226. package/dist/contracts/analysisSearchContract.js +2 -5
  227. package/dist/contracts/applicationToolContracts.js +58 -114
  228. package/dist/contracts/applicationWorkflowInputContracts.js +29 -114
  229. package/dist/contracts/artifactComparisonExample.js +58 -60
  230. package/dist/contracts/artifactToolContracts.js +37 -91
  231. package/dist/contracts/browserScenarioToolContracts.js +6 -51
  232. package/dist/contracts/browserToolContracts.js +10 -75
  233. package/dist/contracts/electronToolContracts.js +27 -98
  234. package/dist/contracts/enhancedInputs.js +31 -78
  235. package/dist/contracts/errorSchemas.js +0 -1
  236. package/dist/contracts/functionComparisonExample.js +10 -24
  237. package/dist/contracts/functionInstructionContract.js +1 -3
  238. package/dist/contracts/functionWorkflowToolContracts.js +4 -5
  239. package/dist/contracts/hopperMemoryContracts.js +3 -3
  240. package/dist/contracts/investigationExamples.js +14 -11
  241. package/dist/contracts/javascriptApplicationWorkflowExamples.js +12 -19
  242. package/dist/contracts/javascriptRuntimeObservationToolContracts.js +2 -20
  243. package/dist/contracts/javascriptRuntimeReconciliationExample.js +45 -12
  244. package/dist/contracts/managedToolContracts.js +10 -104
  245. package/dist/contracts/managedWorkflowExamples.js +77 -125
  246. package/dist/contracts/managedWorkflowToolContracts.js +51 -74
  247. package/dist/contracts/nativeToolContracts.js +9 -14
  248. package/dist/contracts/processCaptureExample.js +2 -69
  249. package/dist/contracts/promptContracts.js +49 -67
  250. package/dist/contracts/providerSelection.js +0 -1
  251. package/dist/contracts/reconstructionReadinessExample.js +1 -6
  252. package/dist/contracts/sessionStatusContract.js +1 -17
  253. package/dist/contracts/sessionToolSchemas.js +52 -0
  254. package/dist/contracts/toolContractExamples.js +11 -10
  255. package/dist/contracts/toolContractHelpers.js +19 -0
  256. package/dist/contracts/toolContracts.js +60 -143
  257. package/dist/contracts/toolEffects.js +16 -9
  258. package/dist/contracts/toolOutputSchemaGroups.js +47 -86
  259. package/dist/contracts/toolOutputSchemaPrimitives.js +72 -62
  260. package/dist/contracts/toolSchemaMetadata.js +117 -0
  261. package/dist/contracts/unknownContractExamples.js +0 -2
  262. package/dist/doctorRuntime.js +1 -1
  263. package/dist/domain/analysisErrorPresentation.js +46 -54
  264. package/dist/domain/analysisErrorProjection.js +28 -37
  265. package/dist/domain/analysisProfile.js +3 -31
  266. package/dist/domain/analysisSnapshot.js +3 -12
  267. package/dist/domain/androidApplication.js +15 -52
  268. package/dist/domain/appleApplication.js +24 -65
  269. package/dist/domain/artifactComparison.js +11 -29
  270. package/dist/domain/artifactGraph.js +14 -44
  271. package/dist/domain/artifactInspection.js +38 -69
  272. package/dist/domain/artifactInventoryEvidence.js +27 -21
  273. package/dist/domain/binaryTarget.js +2 -219
  274. package/dist/domain/binaryTargetTypes.js +1 -0
  275. package/dist/domain/browserCaptureComparison.js +35 -60
  276. package/dist/domain/browserObservation.js +45 -197
  277. package/dist/domain/browserObservationSchemas.js +5 -23
  278. package/dist/domain/browserScenario.js +11 -14
  279. package/dist/domain/browserScenarioCapture.js +11 -12
  280. package/dist/domain/browserScenarioCaptureValues.js +146 -84
  281. package/dist/domain/browserScenarioDiff.js +2 -59
  282. package/dist/domain/browserScenarioDiffEvidence.js +51 -0
  283. package/dist/domain/browserScenarioDiffValues.js +21 -38
  284. package/dist/domain/browserScenarioValues.js +80 -109
  285. package/dist/domain/browserSession.js +4 -7
  286. package/dist/domain/bundleComparison.js +6 -32
  287. package/dist/domain/bytecodeProvider.js +53 -54
  288. package/dist/domain/callPath.js +50 -169
  289. package/dist/domain/callPathSchemas.js +79 -0
  290. package/dist/domain/changedBehavior.js +34 -60
  291. package/dist/domain/completionLedgerGeneration.js +8 -14
  292. package/dist/domain/conformancePackage.js +126 -97
  293. package/dist/domain/conformanceReplay.js +39 -11
  294. package/dist/domain/conformanceTrustGate.js +174 -30
  295. package/dist/domain/customProtocolCapture.js +4 -4
  296. package/dist/domain/electronActiveObservation.js +244 -0
  297. package/dist/domain/electronObservation.js +21 -83
  298. package/dist/domain/electronStaticAnalysisBrowser.js +36 -46
  299. package/dist/domain/electronStaticAnalysisIpc.js +38 -14
  300. package/dist/domain/electronStaticAnalysisNative.js +1 -8
  301. package/dist/domain/electronStaticAnalysisValues.js +14 -18
  302. package/dist/domain/errors.js +33 -54
  303. package/dist/domain/eventProcessTree.js +101 -90
  304. package/dist/domain/evidence.js +2 -10
  305. package/dist/domain/evidenceBundle.js +3 -5
  306. package/dist/domain/evidenceCompletionLedger.js +6 -8
  307. package/dist/domain/functionComparison.js +4 -14
  308. package/dist/domain/functionComparisonNormalization.js +8 -8
  309. package/dist/domain/functionComparisonResults.js +25 -15
  310. package/dist/domain/functionComparisonSchemas.js +49 -33
  311. package/dist/domain/functionDossierEvidence.js +31 -151
  312. package/dist/domain/hopperStartupFailure.js +1 -1
  313. package/dist/domain/hopperValues.js +17 -141
  314. package/dist/domain/inputIssueProjection.js +4 -1
  315. package/dist/domain/interfaceBuilderGraph.js +654 -0
  316. package/dist/domain/javascriptApplicationAnalysis.js +8 -112
  317. package/dist/domain/javascriptApplicationChangeGraph.js +22 -82
  318. package/dist/domain/javascriptApplicationEvidenceSchemas.js +59 -47
  319. package/dist/domain/javascriptApplicationGraph.js +3 -13
  320. package/dist/domain/javascriptApplicationGraphSchemas.js +12 -34
  321. package/dist/domain/javascriptApplicationVersionComparison.js +26 -30
  322. package/dist/domain/javascriptApplicationVersionComparisonSchemas.js +123 -68
  323. package/dist/domain/javascriptApplicationVersionItems.js +120 -53
  324. package/dist/domain/javascriptApplicationVersionKeys.js +24 -11
  325. package/dist/domain/javascriptAstFingerprint.js +25 -58
  326. package/dist/domain/javascriptAstValues.js +9 -0
  327. package/dist/domain/javascriptExportInstrumentation.js +2 -4
  328. package/dist/domain/javascriptExportShapeComparison.js +6 -7
  329. package/dist/domain/javascriptExportShapeComparisonSchemas.js +70 -77
  330. package/dist/domain/javascriptExportShapeSelection.js +17 -19
  331. package/dist/domain/javascriptFeatureSeed.js +20 -12
  332. package/dist/domain/javascriptFeatureTrace.js +13 -67
  333. package/dist/domain/javascriptFeatureTraceSchemas.js +24 -52
  334. package/dist/domain/javascriptFeatureTraversal.js +1 -44
  335. package/dist/domain/javascriptNativeHandoff.js +1 -1
  336. package/dist/domain/javascriptReplay.js +100 -101
  337. package/dist/domain/javascriptRuntimeLoadState.js +3 -8
  338. package/dist/domain/javascriptRuntimeObservation.js +43 -103
  339. package/dist/domain/javascriptRuntimeReconciliation.js +1 -3
  340. package/dist/domain/javascriptRuntimeReconciliationActive.js +80 -0
  341. package/dist/domain/javascriptRuntimeReconciliationGraph.js +21 -33
  342. package/dist/domain/javascriptRuntimeReconciliationMatching.js +75 -61
  343. package/dist/domain/javascriptRuntimeReconciliationParsing.js +21 -46
  344. package/dist/domain/javascriptRuntimeReconciliationResult.js +25 -19
  345. package/dist/domain/javascriptRuntimeReconciliationRuntime.js +8 -12
  346. package/dist/domain/javascriptRuntimeReconciliationSchemas.js +34 -49
  347. package/dist/domain/javascriptRuntimeStaticCandidates.js +3 -3
  348. package/dist/domain/javascriptSemanticAnalysis.js +12 -45
  349. package/dist/domain/javascriptSemanticAsyncEffects.js +1 -9
  350. package/dist/domain/javascriptSemanticCallResolution.js +6 -16
  351. package/dist/domain/javascriptSemanticCalls.js +5 -32
  352. package/dist/domain/javascriptSemanticChildProcesses.js +1 -11
  353. package/dist/domain/javascriptSemanticCoverage.js +11 -0
  354. package/dist/domain/javascriptSemanticDataEffectHelpers.js +1 -8
  355. package/dist/domain/javascriptSemanticDataEffects.js +1 -11
  356. package/dist/domain/javascriptSemanticFingerprints.js +3 -5
  357. package/dist/domain/javascriptSemanticGraphSchemas.js +25 -51
  358. package/dist/domain/javascriptSemanticGraphSerialization.js +2 -13
  359. package/dist/domain/javascriptSemanticIr.js +1 -29
  360. package/dist/domain/javascriptSemanticObjects.js +1 -5
  361. package/dist/domain/javascriptSemanticPrimitives.js +2 -9
  362. package/dist/domain/javascriptSemanticProjection.js +0 -18
  363. package/dist/domain/javascriptSemanticPromises.js +9 -16
  364. package/dist/domain/javascriptSemanticProvenance.js +16 -19
  365. package/dist/domain/javascriptSemanticQuery.js +17 -139
  366. package/dist/domain/javascriptSemanticQueryAssessment.js +9 -37
  367. package/dist/domain/javascriptSemanticQueryIdentity.js +2 -23
  368. package/dist/domain/javascriptSemanticQuerySchemas.js +14 -107
  369. package/dist/domain/javascriptSemanticResources.js +1 -6
  370. package/dist/domain/javascriptSemanticReturns.js +10 -27
  371. package/dist/domain/javascriptSemanticValueTypes.js +1 -0
  372. package/dist/domain/javascriptSemanticValues.js +44 -62
  373. package/dist/domain/javascriptStaticAnalysis.js +21 -43
  374. package/dist/domain/javascriptStaticAnalysisBundler.js +34 -93
  375. package/dist/domain/javascriptStaticAnalysisCalls.js +17 -16
  376. package/dist/domain/javascriptStaticAnalysisFindings.js +3 -19
  377. package/dist/domain/javascriptStaticAnalysisHelpers.js +47 -88
  378. package/dist/domain/javascriptStaticAnalysisState.js +1 -5
  379. package/dist/domain/javascriptStaticAnalysisTypes.js +1 -0
  380. package/dist/domain/jsonShape.js +7 -33
  381. package/dist/domain/localPath.js +7 -0
  382. package/dist/domain/managedApplicationGraph.js +9 -41
  383. package/dist/domain/managedApplicationGraphCoverage.js +24 -156
  384. package/dist/domain/managedApplicationGraphNodes.js +10 -13
  385. package/dist/domain/managedArtifact.js +14 -27
  386. package/dist/domain/managedMemberComparison.js +90 -92
  387. package/dist/domain/managedMemberComparisonCoverage.js +11 -33
  388. package/dist/domain/managedMemberComparisonItems.js +221 -0
  389. package/dist/domain/managedMemberComparisonMatch.js +8 -208
  390. package/dist/domain/managedNativeVerification.js +3 -6
  391. package/dist/domain/managedNativeVerificationMatch.js +55 -59
  392. package/dist/domain/managedNativeVerificationSchemas.js +83 -47
  393. package/dist/domain/managedReconstruction.js +19 -23
  394. package/dist/domain/managedRuntimeCorrelation.js +6 -9
  395. package/dist/domain/nativeApiBoundary.js +17 -14
  396. package/dist/domain/nativeInspection.js +0 -2
  397. package/dist/domain/nativeInvestigationGraph.js +351 -0
  398. package/dist/domain/nativeValueFlow.js +61 -0
  399. package/dist/domain/nodeRuntimeCharacterization.js +15 -18
  400. package/dist/domain/objcSwiftMetadata.js +254 -0
  401. package/dist/domain/peInspection.js +1 -1
  402. package/dist/domain/permissionPolicy.js +13 -0
  403. package/dist/domain/processCapture.js +76 -113
  404. package/dist/domain/processCaptureExample.js +68 -0
  405. package/dist/domain/processCaptureParsing.js +21 -0
  406. package/dist/domain/processCaptureReactiveSchema.js +68 -0
  407. package/dist/domain/processCaptureReactiveValidation.js +8 -3
  408. package/dist/domain/processCaptureValidation.js +8 -10
  409. package/dist/domain/processComparison.js +12 -16
  410. package/dist/domain/processObservation.js +5 -6
  411. package/dist/domain/processReactiveMatching.js +32 -46
  412. package/dist/domain/processReactiveRuntime.js +4 -8
  413. package/dist/domain/processReactiveScenario.js +28 -94
  414. package/dist/domain/processReactiveScenarioPreflight.js +5 -30
  415. package/dist/domain/processReactiveTransition.js +42 -21
  416. package/dist/domain/processScenario.js +62 -93
  417. package/dist/domain/processTraceComparison.js +0 -7
  418. package/dist/domain/processTraceEvaluation.js +14 -4
  419. package/dist/domain/processTraceSpecification.js +11 -17
  420. package/dist/domain/protocolCapture.js +11 -9
  421. package/dist/domain/reconstructionCoverage.js +62 -129
  422. package/dist/domain/reconstructionCoverageEvaluation.js +17 -17
  423. package/dist/domain/reconstructionObligationLedgerSchemas.js +45 -72
  424. package/dist/domain/reconstructionReadiness.js +1 -2
  425. package/dist/domain/reconstructionReadinessSchemas.js +66 -40
  426. package/dist/domain/reconstructionUnknowns.js +3 -3
  427. package/dist/domain/reconstructionVerification.js +13 -47
  428. package/dist/domain/reconstructionVerificationSchemas.js +50 -38
  429. package/dist/domain/referenceSourceGraph.js +53 -61
  430. package/dist/domain/referenceSourceImportParsing.js +3 -7
  431. package/dist/domain/replayMachine.js +19 -31
  432. package/dist/domain/replayMachineRun.js +15 -63
  433. package/dist/domain/replayMachineRuntime.js +46 -44
  434. package/dist/domain/replayMachineValues.js +84 -0
  435. package/dist/domain/residualUnknown.js +25 -30
  436. package/dist/domain/runtimeCharacterization.js +15 -16
  437. package/dist/domain/runtimeIdentification.js +48 -47
  438. package/dist/domain/sourceToBundleComparison.js +11 -87
  439. package/dist/domain/sourceToBundleComparisonSchemas.js +25 -50
  440. package/dist/domain/sourceToBundleSignals.js +11 -16
  441. package/dist/domain/staticRuntimeCorrelation.js +44 -54
  442. package/dist/domain/symbolAnalysis.js +10 -19
  443. package/dist/domain/unicodeCodePointOrder.js +12 -0
  444. package/dist/domain/webBundleAnalysis.js +70 -99
  445. package/dist/domain/webBundleAnalyzer.js +2 -4
  446. package/dist/domain/webBundleAnalyzerAst.js +0 -13
  447. package/dist/domain/webBundleAnalyzerInspection.js +26 -52
  448. package/dist/domain/webBundleAnalyzerResult.js +7 -24
  449. package/dist/domain/webCaptureDiff.js +48 -85
  450. package/dist/domain/webCaptureDiffSchemas.js +86 -0
  451. package/dist/domain/webContentArtifact.js +1 -10
  452. package/dist/domain/webMcpDiscovery.js +3 -14
  453. package/dist/domain/webScreenshot.js +58 -34
  454. package/dist/domain/zipPackageFormat.js +7 -0
  455. package/dist/dotnet/ManagedArtifactInspector.js +17 -50
  456. package/dist/dotnet/ManagedMemberInspector.js +27 -58
  457. package/dist/dotnet/ManagedMemberInspectorCore.js +14 -51
  458. package/dist/dotnet/ManagedMemberInstructionDecoder.js +2 -2
  459. package/dist/dotnet/ManagedMemberRows.js +16 -16
  460. package/dist/dotnet/ManagedMetadataHeaps.js +26 -8
  461. package/dist/dotnet/ManagedMetadataInventory.js +21 -30
  462. package/dist/dotnet/ManagedMetadataInventoryRows.js +57 -63
  463. package/dist/dotnet/ManagedMetadataLayout.js +3 -5
  464. package/dist/dotnet/ManagedMethodBodyReader.js +5 -30
  465. package/dist/dotnet/ManagedNativeBoundaryHelpers.js +19 -49
  466. package/dist/dotnet/ManagedNativeBoundaryInspector.js +13 -42
  467. package/dist/dotnet/ManagedPeReader.js +2 -2
  468. package/dist/dotnet/ManagedStaticProvider.js +13 -71
  469. package/dist/generatedMcpToolCatalog.js +1 -1
  470. package/dist/generatedPackageMetadata.js +1 -1
  471. package/dist/ghidra/GhidraAnalysisProfile.js +3 -8
  472. package/dist/ghidra/GhidraClient.js +5 -13
  473. package/dist/ghidra/GhidraClientStartup.js +1 -1
  474. package/dist/ghidra/GhidraClientWire.js +9 -5
  475. package/dist/ghidra/GhidraDefaults.js +0 -18
  476. package/dist/ghidra/GhidraDiagnostics.js +0 -2
  477. package/dist/ghidra/GhidraDoctor.js +16 -12
  478. package/dist/ghidra/GhidraFunctionValues.js +67 -108
  479. package/dist/ghidra/GhidraInstallation.js +98 -42
  480. package/dist/ghidra/GhidraInventoryValues.js +18 -77
  481. package/dist/ghidra/GhidraLauncher.js +0 -8
  482. package/dist/ghidra/GhidraProvider.js +32 -31
  483. package/dist/ghidra/GhidraProviderCapabilities.js +11 -48
  484. package/dist/ghidra/GhidraRequestQueue.js +6 -30
  485. package/dist/ghidra/GhidraResponseBuffer.js +1 -7
  486. package/dist/ghidra/GhidraSessionValues.js +0 -2
  487. package/dist/ghidra/GhidraSocketConnection.js +1 -1
  488. package/dist/ghidra/GhidraTransport.js +4 -7
  489. package/dist/ghidra/protocol.js +19 -42
  490. package/dist/hopper/BridgeLauncher.js +115 -37
  491. package/dist/hopper/HopperAnalysisProfile.js +3 -5
  492. package/dist/hopper/HopperCleanup.js +11 -9
  493. package/dist/hopper/HopperClient.js +5 -8
  494. package/dist/hopper/HopperProcessDiagnostic.js +2 -2
  495. package/dist/hopper/HopperProvider.js +0 -30
  496. package/dist/hopper/HopperRequestQueue.js +21 -40
  497. package/dist/hopper/HopperResponseStream.js +1 -9
  498. package/dist/hopper/HopperSessionValues.js +3 -2
  499. package/dist/hopper/HopperTargetLease.js +119 -0
  500. package/dist/hopper/LinuxPrivateDisplayDiagnostic.js +24 -31
  501. package/dist/hopper/LinuxPrivateDisplayProbe.js +21 -26
  502. package/dist/hopper/protocol.js +6 -4
  503. package/dist/main/reload.js +1 -9
  504. package/dist/main/shutdown.js +1 -1
  505. package/dist/main/state.js +0 -23
  506. package/dist/main/transport.js +27 -39
  507. package/dist/main.js +17 -15
  508. package/dist/mcpDoctor.js +27 -69
  509. package/dist/native/CommandRunner.js +18 -25
  510. package/dist/native/NativeMacOSProvider.js +13 -38
  511. package/dist/native/NativeMachoInspection.js +1 -1
  512. package/dist/process/BoundedFileBytes.js +17 -0
  513. package/dist/process/ExecFileOutput.js +11 -0
  514. package/dist/process/PendingOperations.js +8 -6
  515. package/dist/process/PrivateRuntimeRoot.js +17 -0
  516. package/dist/process/ProcessOwnership.js +67 -130
  517. package/dist/process/ProcessOwnershipIdentity.js +13 -0
  518. package/dist/process/ProcessOwnershipObservation.js +87 -0
  519. package/dist/process/ProcessOwnershipProcessTree.js +22 -0
  520. package/dist/process/ProviderDeadline.js +8 -12
  521. package/dist/process/ProviderProcess.js +7 -28
  522. package/dist/process/WindowsAuthority.js +32 -0
  523. package/dist/reference/ReferenceSourceReader.js +8 -24
  524. package/dist/reference/ReferenceSourceReaderEntries.js +11 -39
  525. package/dist/reference/ReferenceSourceReaderFile.js +13 -31
  526. package/dist/reference/ReferenceSourceReaderPaths.js +3 -18
  527. package/dist/reference/ReferenceSourceReaderValidate.js +3 -6
  528. package/dist/replay/JavaScriptReplayWorker.js +95 -13
  529. package/dist/replay/JavaScriptReplayWorkerTypes.js +1 -0
  530. package/dist/replay/LinuxJavaScriptReplayRunner.js +42 -43
  531. package/dist/replay/LinuxJavaScriptReplaySandbox.js +0 -19
  532. package/dist/replay/LinuxRuntimeClosure.js +1 -3
  533. package/dist/replay/ReplayOutcome.js +27 -18
  534. package/dist/replay/ReplayProcessLifecycle.js +32 -7
  535. package/dist/replay/ReplaySeccompFile.js +29 -0
  536. package/dist/replay/ReplayWorkerProtocol.js +33 -30
  537. package/dist/replay/SystemJavaScriptReplayHost.js +45 -74
  538. package/dist/server/ProcessCaptureElicitation.js +4 -8
  539. package/dist/server/createServer.js +145 -119
  540. package/dist/server/mcpClientMetadata.js +32 -0
  541. package/dist/server/promptCompletion.js +37 -61
  542. package/dist/server/recordDerivedEvidence.js +1 -1
  543. package/dist/server/registerApplicationTools/characterization.js +10 -21
  544. package/dist/server/registerApplicationTools/compareExportShapes.js +6 -16
  545. package/dist/server/registerApplicationTools/compareSourceToBundle.js +6 -15
  546. package/dist/server/registerApplicationTools/compareVersions.js +6 -16
  547. package/dist/server/registerApplicationTools/controlledReplay.js +8 -15
  548. package/dist/server/registerApplicationTools/coverage.js +7 -78
  549. package/dist/server/registerApplicationTools/helpers.js +1 -13
  550. package/dist/server/registerApplicationTools/obligationLedger.js +4 -8
  551. package/dist/server/registerApplicationTools/traceFeature.js +6 -15
  552. package/dist/server/registerApplicationTools/traceSemantics.js +5 -13
  553. package/dist/server/registerApplicationTools.js +0 -2
  554. package/dist/server/registerArtifactComparisonTool.js +27 -35
  555. package/dist/server/registerBrowserScenarioTool.js +3 -8
  556. package/dist/server/registerBrowserTools.js +36 -81
  557. package/dist/server/registerBundleComparisonTool.js +10 -16
  558. package/dist/server/registerCloseLifecycleTool.js +5 -27
  559. package/dist/server/registerElectronTools.js +29 -65
  560. package/dist/server/registerEnhancedTools.js +118 -127
  561. package/dist/server/registerEvidenceTools.js +19 -30
  562. package/dist/server/registerFunctionComparisonTool.js +35 -34
  563. package/dist/server/registerInvestigationTools/helpers.js +3 -32
  564. package/dist/server/registerInvestigationTools.js +36 -148
  565. package/dist/server/registerJavaScriptRuntimeObservationTools.js +15 -27
  566. package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +16 -23
  567. package/dist/server/registerManagedWorkflowTools/contract.js +2 -3
  568. package/dist/server/registerManagedWorkflowTools/evidence.js +19 -35
  569. package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +4 -14
  570. package/dist/server/registerManagedWorkflowTools/planManagedRuntimeCorrelation.js +4 -14
  571. package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +11 -20
  572. package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +10 -21
  573. package/dist/server/registerOfficialTools.js +8 -51
  574. package/dist/server/registerProcessComparisonTool.js +43 -38
  575. package/dist/server/registerPrompts.js +19 -17
  576. package/dist/server/registerReplayMachineTool.js +4 -10
  577. package/dist/server/registerSessionRecordTools.js +36 -153
  578. package/dist/server/registerSessionStatusTool.js +18 -96
  579. package/dist/server/registerSessionTools.js +34 -91
  580. package/dist/server/sessionAvailabilityPolicy.js +2 -3
  581. package/dist/server/sessionEvidence.js +9 -15
  582. package/dist/server/sessionToolPolicies.js +1 -13
  583. package/dist/server/toolRegistrationOptions.js +4 -192
  584. package/dist/server/toolResult.js +15 -67
  585. package/dist/serverIdentity.js +0 -20
  586. package/install.sh +1 -1
  587. package/package.json +27 -15
  588. package/scripts/electron-active-hook-boundaries.cjs +394 -0
  589. package/scripts/electron-active-hook.cjs +469 -0
  590. package/scripts/hopper-demo-x11.py +13 -32
  591. package/scripts/rea.mjs +1 -11
  592. package/skills/reverse-engineer-anything/SKILL.md +46 -11
  593. package/skills/reverse-engineer-anything/references/evidence-workflows.md +6 -4
  594. package/skills/reverse-engineer-anything/references/javascript-applications.md +13 -13
  595. package/skills/reverse-engineer-anything/references/native-and-artifacts.md +12 -8
  596. package/dist/application/ApplicationWorkflowEvidenceResolver.js +0 -180
  597. package/dist/application/BoundedJsonFiles.js +0 -86
  598. package/dist/application/CrossVersionInventory.js +0 -128
  599. package/dist/application/CrossVersionInvestigation.js +0 -301
  600. package/dist/application/CrossVersionInvestigationCollections.js +0 -23
  601. package/dist/application/CrossVersionInvestigationEvidence.js +0 -64
  602. package/dist/application/CrossVersionInvestigationReplay.js +0 -170
  603. package/dist/application/DeferredFileAuthorization.js +0 -61
  604. package/dist/application/DoctorProjection.js +0 -43
  605. package/dist/application/EnhancedToolPagination.js +0 -22
  606. package/dist/application/EvidenceReferenceResolver.js +0 -26
  607. package/dist/application/InvestigationWorkspaceStore.js +0 -204
  608. package/dist/application/ProcessPairedExperiment.js +0 -72
  609. package/dist/application/ReconstructionCoverageWorkspaceStore.js +0 -31
  610. package/dist/application/ReconstructionReadinessService.js +0 -48
  611. package/dist/cliInvestigationCommands.js +0 -173
  612. package/dist/domain/boundedCartesianProjection.js +0 -15
  613. package/dist/domain/investigationWorkspace.js +0 -346
  614. package/dist/domain/jsonLimits.js +0 -26
  615. package/dist/domain/knownPageCoverage.js +0 -21
  616. package/dist/domain/processPairedExperiment.js +0 -128
  617. package/dist/server/DynamicToolAvailability.js +0 -70
  618. package/dist/server/LazyToolCatalog.js +0 -134
  619. package/dist/server/hydrateServerTools.js +0 -191
  620. package/dist/server/javascriptApplicationResult.js +0 -106
  621. package/dist/server/permissionFailure.js +0 -12
  622. package/dist/server/registerApplicationTools/readiness.js +0 -55
  623. package/dist/server/registerEvidenceResources.js +0 -315
  624. package/dist/server/registerJavaScriptApplicationGraphResource.js +0 -65
  625. package/dist/server/registerReconstructionObligationLedgerResource.js +0 -32
  626. package/dist/server/registerReconstructionReadinessResource.js +0 -32
  627. package/dist/server/toolInputValidation.js +0 -77
  628. package/scripts/package-runner-bootstrap.mjs +0 -72
@@ -1,15 +1,11 @@
1
- import canonicalize from "canonicalize";
2
1
  import { z } from "zod";
2
+ import { isJsonCompatible, replayValuesEqual } from "./replayMachineValues.js";
3
3
  /** One bounded inbound protocol event offered to a replay machine. */
4
4
  const replayEventHeadersSchema = z
5
5
  .record(z
6
6
  .string()
7
7
  .min(1)
8
- .max(256)
9
- .regex(/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/u), z
10
- .string()
11
- .max(8_192)
12
- .regex(/^[\t\x20-\x7e\x80-\xff]*$/u))
8
+ .regex(/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/u), z.string().regex(/^[\t\x20-\x7e\x80-\xff]*$/u))
13
9
  .superRefine((headers, context) => {
14
10
  const normalized = Object.keys(headers).map((name) => name.toLowerCase());
15
11
  if (new Set(normalized).size !== normalized.length)
@@ -20,10 +16,10 @@ const replayEventHeadersSchema = z
20
16
  });
21
17
  });
22
18
  const replayEventFields = {
23
- at_ms: z.number().int().nonnegative().safe(),
24
- path: z.string().startsWith("/").max(8_192),
19
+ at_ms: z.number().int().safe().nonnegative(),
20
+ path: z.string().startsWith("/"),
25
21
  headers: replayEventHeadersSchema,
26
- body: z.string().max(1_000_000),
22
+ body: z.string(),
27
23
  };
28
24
  export const replayMachineEventSchema = z.discriminatedUnion("protocol", [
29
25
  z.strictObject({
@@ -32,7 +28,6 @@ export const replayMachineEventSchema = z.discriminatedUnion("protocol", [
32
28
  method: z
33
29
  .string()
34
30
  .min(1)
35
- .max(16)
36
31
  .transform((method) => method.toUpperCase()),
37
32
  ...replayEventFields,
38
33
  }),
@@ -51,7 +46,8 @@ export const replayMachineEventSchema = z.discriminatedUnion("protocol", [
51
46
  ]);
52
47
  const parseJson = (value) => {
53
48
  try {
54
- return JSON.parse(value);
49
+ const parsed = JSON.parse(value);
50
+ return parsed;
55
51
  }
56
52
  catch {
57
53
  return undefined;
@@ -70,7 +66,8 @@ const atPath = (value, path) => {
70
66
  current === null ||
71
67
  !Object.hasOwn(current, segment))
72
68
  return undefined;
73
- current = current[segment];
69
+ const next = Reflect.get(current, segment);
70
+ current = next;
74
71
  }
75
72
  return current;
76
73
  };
@@ -82,6 +79,7 @@ const actionJsonBody = (transition) => {
82
79
  return action.data;
83
80
  return undefined;
84
81
  };
82
+ const triggerKey = (transition) => `${transition.trigger.protocol}\0${transition.trigger.path}`;
85
83
  const readValue = (source, event, transition) => {
86
84
  switch (source.source) {
87
85
  case "request_header":
@@ -112,20 +110,6 @@ const triggerMatches = (transition, event) => {
112
110
  return trigger.body === null || trigger.body === event.body;
113
111
  return true;
114
112
  };
115
- const isJsonCompatible = (value) => {
116
- if (value === null || typeof value === "string" || typeof value === "boolean")
117
- return true;
118
- if (typeof value === "number")
119
- return Number.isFinite(value);
120
- if (Array.isArray(value))
121
- return value.every(isJsonCompatible);
122
- if (typeof value !== "object")
123
- return false;
124
- return Object.values(value).every(isJsonCompatible);
125
- };
126
- const replayValuesEqual = (left, right) => isJsonCompatible(left) &&
127
- isJsonCompatible(right) &&
128
- (Object.is(left, right) || canonicalize(left) === canonicalize(right));
129
113
  const createTransitionRecord = ({ sequence, atMs, stateBefore, transition, captures, }) => ({
130
114
  sequence,
131
115
  at_ms: atMs,
@@ -140,6 +124,7 @@ const createTransitionRecord = ({ sequence, atMs, stateBefore, transition, captu
140
124
  /** Stateful evaluator for one validated replay-machine instance. */
141
125
  export class ReplayMachineRuntime {
142
126
  machine;
127
+ #transitionsByTrigger = new Map();
143
128
  #variables = new Map();
144
129
  #sensitiveValues = new Map();
145
130
  #uses = new Map();
@@ -155,6 +140,16 @@ export class ReplayMachineRuntime {
155
140
  this.machine = machine;
156
141
  this.#state = machine.initial_state;
157
142
  this.#stateVisits.set(machine.initial_state, 1);
143
+ const byTrigger = new Map();
144
+ for (const [declarationOrder, transition,] of machine.transitions.entries()) {
145
+ const key = triggerKey(transition);
146
+ const indexed = byTrigger.get(key) ?? [];
147
+ indexed.push({ transition, declarationOrder });
148
+ byTrigger.set(key, indexed);
149
+ }
150
+ for (const [key, indexed] of byTrigger)
151
+ this.#transitionsByTrigger.set(key, indexed.sort((left, right) => left.transition.priority - right.transition.priority ||
152
+ left.declarationOrder - right.declarationOrder));
158
153
  }
159
154
  /** Current machine state after all accepted transitions. */
160
155
  get state() {
@@ -205,25 +200,11 @@ export class ReplayMachineRuntime {
205
200
  };
206
201
  if (!this.#admitEvent(normalizedEvent))
207
202
  return this.#refusal("limit_exhausted");
208
- const matching = this.machine.transitions
209
- .map((transition, declarationOrder) => ({
210
- transition,
211
- declarationOrder,
212
- }))
213
- .filter(({ transition }) => triggerMatches(transition, normalizedEvent));
214
- const eligible = matching
215
- .filter(({ transition }) => transition.from === this.#state)
216
- .sort((left, right) => left.transition.priority - right.transition.priority ||
217
- left.declarationOrder - right.declarationOrder);
203
+ const matching = this.#matchingTransitions(normalizedEvent);
204
+ const eligible = matching.filter(({ transition }) => this.#transitionStartsHere(transition));
218
205
  if (eligible.length === 0)
219
- return this.#refusal(matching.length === 0
220
- ? "unmatched"
221
- : normalizedEvent.protocol === "websocket_connect" &&
222
- normalizedEvent.connection === "reconnect"
223
- ? "unexpected_reconnect"
224
- : "invalid_state");
225
- const guarded = eligible.filter(({ transition }) => transition.guards.every((guard) => this.#variables.has(guard.variable) &&
226
- replayValuesEqual(this.#variables.get(guard.variable), readValue(guard.value, normalizedEvent, transition))));
206
+ return this.#refusal(this.#noEligibleReason(matching, normalizedEvent));
207
+ const guarded = eligible.filter(({ transition }) => this.#transitionGuardsMatch(transition, normalizedEvent));
227
208
  if (guarded.length === 0)
228
209
  return this.#refusal("guard_failed");
229
210
  if (this.#timeline.length >= this.machine.max_transitions)
@@ -270,6 +251,27 @@ export class ReplayMachineRuntime {
270
251
  transition: record,
271
252
  };
272
253
  }
254
+ #matchingTransitions(event) {
255
+ return (this.#transitionsByTrigger.get(`${event.protocol}\0${event.path}`) ?? []).filter(({ transition }) => triggerMatches(transition, event));
256
+ }
257
+ #transitionStartsHere(transition) {
258
+ return transition.from === this.#state;
259
+ }
260
+ #noEligibleReason(matching, event) {
261
+ if (matching.length === 0)
262
+ return "unmatched";
263
+ return event.protocol === "websocket_connect" &&
264
+ event.connection === "reconnect"
265
+ ? "unexpected_reconnect"
266
+ : "invalid_state";
267
+ }
268
+ #transitionGuardsMatch(transition, event) {
269
+ return transition.guards.every((guard) => {
270
+ if (!this.#variables.has(guard.variable))
271
+ return false;
272
+ return replayValuesEqual(this.#variables.get(guard.variable), readValue(guard.value, event, transition));
273
+ });
274
+ }
273
275
  #admitEvent(event) {
274
276
  const connections = this.#connections + (event.protocol === "websocket_connect" ? 1 : 0);
275
277
  const messages = this.#messages + (event.protocol === "websocket_message" ? 1 : 0);
@@ -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" ||