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
@@ -10,11 +10,10 @@ const EXTENSIONS = [
10
10
  ".html",
11
11
  ".node",
12
12
  ];
13
- const MAX_PACKAGE_DEPTH = 4;
14
13
  const NODE_BUILTINS = new Set(builtinModules.map((name) => name.replace(/^node:/u, "")));
15
14
  /** Resolve one declaration under its exact syntax/metadata context. */
16
- export const resolveArtifactPathByContext = (input) => resolveAtDepth(input, 0);
17
- const resolveAtDepth = (input, packageDepth) => {
15
+ export const resolveArtifactPathByContext = (input) => resolvePackagePath(input, new Set());
16
+ const resolvePackagePath = (input, packageChain) => {
18
17
  const rejected = rejectDeclaration(input);
19
18
  if (rejected !== null)
20
19
  return rejected;
@@ -24,23 +23,21 @@ const resolveAtDepth = (input, packageDepth) => {
24
23
  const confined = confineCandidate(input, candidate);
25
24
  if (typeof confined !== "string")
26
25
  return confined;
27
- const resolved = resolveCandidate(input, confined, packageDepth);
28
- return outcome(input, resolved.status, resolved.resolvedPath, resolved.limitations);
26
+ const resolved = resolveCandidate(input, confined, packageChain);
27
+ return outcome(input, resolved);
29
28
  };
30
29
  const rejectDeclaration = (input) => {
31
30
  const declared = input.declaredPath;
32
31
  if (declared.length === 0)
33
- return outcome(input, "rejected", null, ["The declared path is empty."]);
34
- if (declared.length > 4_096)
35
- return outcome(input, "rejected", null, [
36
- "The declared path exceeds the 4096-character resolution bound.",
32
+ return unresolvedOutcome(input, "rejected", [
33
+ "The declared path is empty.",
37
34
  ]);
38
35
  if (declared.includes("\0") || declared.includes("\\"))
39
- return outcome(input, "rejected", null, [
36
+ return unresolvedOutcome(input, "rejected", [
40
37
  "NUL and backslash path syntax are not admitted for canonical artifact paths.",
41
38
  ]);
42
39
  if (/%(?:2e|2f|5c)/iu.test(declared))
43
- return outcome(input, "rejected", null, [
40
+ return unresolvedOutcome(input, "rejected", [
44
41
  "Encoded dot or separator bytes are rejected before artifact path resolution.",
45
42
  ]);
46
43
  return null;
@@ -57,14 +54,14 @@ const contextualCandidate = (input) => {
57
54
  if (fileUrl !== undefined)
58
55
  return fileUrl;
59
56
  if (hasScheme(declared))
60
- return outcome(input, "external", null, [
57
+ return unresolvedOutcome(input, "external", [
61
58
  "URL and Node builtin schemes are outside static artifact module resolution.",
62
59
  ]);
63
60
  if (!declared.startsWith(".") && !declared.startsWith("/"))
64
61
  return bareModuleCandidate(input, declared);
65
62
  }
66
63
  else if (hasScheme(declared))
67
- return outcome(input, "external", null, [
64
+ return unresolvedOutcome(input, "external", [
68
65
  "URL schemes are outside this local artifact path context.",
69
66
  ]);
70
67
  const relative = declared.startsWith("/") ? declared.slice(1) : declared;
@@ -77,11 +74,11 @@ const bareModuleCandidate = (input, declared) => {
77
74
  if (packageName === null ||
78
75
  NODE_BUILTINS.has(packageName) ||
79
76
  declared.startsWith("#"))
80
- return outcome(input, "external", null, [
77
+ return unresolvedOutcome(input, "external", [
81
78
  "The bare specifier is a Node builtin, package import map, or invalid package name.",
82
79
  ]);
83
80
  if (declared !== packageName)
84
- return outcome(input, "external", null, [
81
+ return unresolvedOutcome(input, "external", [
85
82
  "Bare package subpaths remain unresolved unless an exact package-exports subpath model is available.",
86
83
  ]);
87
84
  const source = input.files.get(input.sourcePath);
@@ -94,7 +91,7 @@ const bareModuleCandidate = (input, declared) => {
94
91
  break;
95
92
  directory = posix.dirname(directory);
96
93
  }
97
- return outcome(input, "external", null, [
94
+ return unresolvedOutcome(input, "external", [
98
95
  "No matching bare package was inventoried in an enclosing node_modules directory.",
99
96
  ]);
100
97
  };
@@ -115,7 +112,7 @@ const hasContainerCandidate = (files, candidate, containerSha256) => [...directC
115
112
  const htmlCandidate = (input) => {
116
113
  const declared = stripQueryAndFragment(input.declaredPath);
117
114
  if (hasScheme(declared))
118
- return outcome(input, "external", null, [
115
+ return unresolvedOutcome(input, "external", [
119
116
  "External HTML references are not mapped to local artifact assets.",
120
117
  ]);
121
118
  if (declared.startsWith("/"))
@@ -124,7 +121,7 @@ const htmlCandidate = (input) => {
124
121
  if (base === undefined || base === null || base === "")
125
122
  return posix.join(posix.dirname(input.sourcePath), declared);
126
123
  if (hasScheme(base))
127
- return outcome(input, "external", null, [
124
+ return unresolvedOutcome(input, "external", [
128
125
  "The document base href is external, so its script reference is not a local artifact path.",
129
126
  ]);
130
127
  const basePath = base.startsWith("/")
@@ -138,12 +135,12 @@ const confineCandidate = (input, candidate) => {
138
135
  if (normalized === ".." ||
139
136
  normalized.startsWith("../") ||
140
137
  normalized.startsWith("/"))
141
- return outcome(input, "rejected", null, [
138
+ return unresolvedOutcome(input, "rejected", [
142
139
  "The resolved candidate escapes the canonical artifact root.",
143
140
  ]);
144
141
  return normalized === "." ? "" : normalized;
145
142
  };
146
- const resolveCandidate = (input, candidate, packageDepth) => {
143
+ const resolveCandidate = (input, candidate, packageChain) => {
147
144
  const source = input.files.get(input.sourcePath);
148
145
  for (const path of directCandidates(candidate)) {
149
146
  const target = input.files.get(path);
@@ -152,14 +149,6 @@ const resolveCandidate = (input, candidate, packageDepth) => {
152
149
  target.container_sha256 === source.container_sha256))
153
150
  return { resolvedPath: path, status: "resolved", limitations: [] };
154
151
  }
155
- if (packageDepth >= MAX_PACKAGE_DEPTH)
156
- return {
157
- resolvedPath: null,
158
- status: "unavailable",
159
- limitations: [
160
- `Directory package resolution exceeded its ${String(MAX_PACKAGE_DEPTH)}-package recursion bound.`,
161
- ],
162
- };
163
152
  const packagePath = posix.join(candidate, "package.json");
164
153
  const packageFile = input.files.get(packagePath);
165
154
  if (packageFile === undefined ||
@@ -174,28 +163,42 @@ const resolveCandidate = (input, candidate, packageDepth) => {
174
163
  `Directory package metadata ${packagePath} was inventoried but its text is unavailable: ${packageFile.text.reason}.`,
175
164
  ],
176
165
  };
166
+ if (packageChain.has(packagePath))
167
+ return {
168
+ resolvedPath: null,
169
+ status: "unavailable",
170
+ limitations: [
171
+ `Directory package entrypoint cycle includes ${packagePath}.`,
172
+ ],
173
+ };
177
174
  const main = packageEntry(packageFile.text.value, input.moduleKind);
178
175
  if (main.status === "invalid")
179
176
  return {
180
177
  resolvedPath: null,
181
178
  status: "unavailable",
182
179
  limitations: [
183
- `Directory package metadata ${packagePath} is not valid bounded package JSON.`,
180
+ `Directory package metadata ${packagePath} is not valid package JSON.`,
184
181
  ],
185
182
  };
186
183
  if (main.status === "missing")
187
184
  return notFoundCandidate();
188
- const nested = resolveAtDepth({
185
+ const nested = resolvePackagePath({
189
186
  declaredPath: main.value,
190
187
  sourcePath: packagePath,
191
188
  context: "package-entrypoint",
192
189
  files: input.files,
193
- }, packageDepth + 1);
194
- return {
195
- resolvedPath: nested.resolved_path,
196
- status: nested.resolution_status,
197
- limitations: nested.limitations,
198
- };
190
+ }, new Set([...packageChain, packagePath]));
191
+ return nested.resolution_status === "resolved"
192
+ ? {
193
+ resolvedPath: nested.resolved_path,
194
+ status: nested.resolution_status,
195
+ limitations: nested.limitations,
196
+ }
197
+ : {
198
+ resolvedPath: null,
199
+ status: nested.resolution_status,
200
+ limitations: nested.limitations,
201
+ };
199
202
  };
200
203
  const directCandidates = (candidate) => [
201
204
  candidate,
@@ -216,7 +219,7 @@ const packageEntry = (text, moduleKind) => {
216
219
  const entry = preferred.find((candidate) => candidate !== undefined);
217
220
  if (entry === undefined)
218
221
  return { status: "missing" };
219
- return boundedPackagePath(entry);
222
+ return packagePathValue(entry);
220
223
  }
221
224
  catch {
222
225
  return { status: "invalid" };
@@ -224,25 +227,25 @@ const packageEntry = (text, moduleKind) => {
224
227
  };
225
228
  const packageExport = (value, moduleKind) => {
226
229
  if (typeof value === "string")
227
- return boundedPackagePath(value);
230
+ return packagePathValue(value);
228
231
  if (typeof value !== "object" || value === null || Array.isArray(value))
229
232
  return { status: "invalid" };
230
233
  const root = Reflect.get(value, ".") ?? value;
231
234
  if (typeof root === "string")
232
- return boundedPackagePath(root);
235
+ return packagePathValue(root);
233
236
  if (typeof root !== "object" || root === null || Array.isArray(root))
234
237
  return { status: "invalid" };
235
238
  const condition = Reflect.get(root, moduleKind ?? "default") ?? Reflect.get(root, "default");
236
- return boundedPackagePath(condition);
239
+ return packagePathValue(condition);
237
240
  };
238
- const boundedPackagePath = (value) => typeof value === "string" && value.length > 0 && value.length <= 4_096
241
+ const packagePathValue = (value) => typeof value === "string" && value.length > 0
239
242
  ? { status: "value", value }
240
243
  : { status: "invalid" };
241
244
  const notFoundCandidate = () => ({
242
245
  resolvedPath: null,
243
246
  status: "not-found",
244
247
  limitations: [
245
- "No bounded extension, directory package, or index candidate exists in the inventoried artifact container.",
248
+ "No extension, directory package, or index candidate exists in the inventoried artifact container.",
246
249
  ],
247
250
  });
248
251
  const hasScheme = (value) => /^[A-Za-z][A-Za-z+.-]*:/u.test(value);
@@ -260,10 +263,19 @@ const fileUrlPath = (value) => {
260
263
  }
261
264
  };
262
265
  const stripQueryAndFragment = (value) => value.split("#", 1)[0]?.split("?", 1)[0] ?? "";
263
- const outcome = (input, status, resolvedPath, limitations) => ({
264
- declared_path: input.declaredPath,
265
- resolution_context: input.context,
266
- resolved_path: resolvedPath,
267
- resolution_status: status,
268
- limitations,
269
- });
266
+ const outcome = (input, resolution) => resolution.status === "resolved"
267
+ ? {
268
+ declared_path: input.declaredPath,
269
+ resolution_context: input.context,
270
+ resolved_path: resolution.resolvedPath,
271
+ resolution_status: resolution.status,
272
+ limitations: resolution.limitations,
273
+ }
274
+ : {
275
+ declared_path: input.declaredPath,
276
+ resolution_context: input.context,
277
+ resolved_path: null,
278
+ resolution_status: resolution.status,
279
+ limitations: resolution.limitations,
280
+ };
281
+ const unresolvedOutcome = (input, status, limitations) => outcome(input, { resolvedPath: null, status, limitations });
@@ -1,12 +1,11 @@
1
1
  import { lstat, realpath } from "node:fs/promises";
2
- import { performance } from "node:perf_hooks";
3
2
  import { AsarArtifactReader } from "../artifacts/AsarArtifactReader.js";
4
3
  import { ArtifactReaderFailure, } from "../artifacts/ArtifactReader.js";
5
4
  import { DirectoryArtifactReader } from "../artifacts/DirectoryArtifactReader.js";
6
5
  import { analyzeJavaScriptArtifactFiles } from "./JavaScriptArtifactAnalysis.js";
7
6
  import { readJavaScriptArtifactFiles } from "./JavaScriptArtifactFiles.js";
8
7
  import { buildJavaScriptArtifactGraph } from "./JavaScriptArtifactGraphBuilder.js";
9
- import { artifactLimitsForReconstruction, javascriptArtifactReconstructionInputSchema, } from "./JavaScriptArtifactReconstructionInput.js";
8
+ import { javascriptArtifactReconstructionInputSchema, } from "./JavaScriptArtifactReconstructionInput.js";
10
9
  import { scanCanonicalArtifactInventory } from "./ArtifactInventory.js";
11
10
  import { summarizeElectronBoundaries } from "./ElectronBoundaryAnalysis.js";
12
11
  import { buildJavaScriptSemanticGraph } from "./JavaScriptSemanticGraphBuilder.js";
@@ -16,15 +15,15 @@ export const reconstructJavaScriptArtifact = async (rawInput, signal) => {
16
15
  abortIfNeeded(signal);
17
16
  const path = await realpath(input.input_path);
18
17
  const format = await resolveFormat(path, input);
19
- const snapshot = await scanCanonicalArtifactInventory(path, artifactLimitsForReconstruction(input), { signal });
18
+ const snapshot = await scanCanonicalArtifactInventory(path, { signal });
20
19
  if (snapshot.manifest.root_format !== format)
21
20
  throw new ArtifactReaderFailure("format", `Artifact inventory classified ${path} as ${snapshot.manifest.root_format}, not ${format}`);
22
21
  const reader = createReader(path, format);
23
22
  try {
24
- const files = await readJavaScriptArtifactFiles(reader, snapshot, input, signal);
25
- const analysis = analyzeJavaScriptArtifactFiles(files, input, () => performance.now());
23
+ const files = await readJavaScriptArtifactFiles(reader, snapshot, signal);
24
+ const analysis = analyzeJavaScriptArtifactFiles(files);
26
25
  abortIfNeeded(signal);
27
- const graph = buildJavaScriptArtifactGraph(snapshot, files, analysis, input);
26
+ const graph = buildJavaScriptArtifactGraph(snapshot, files, analysis);
28
27
  const semanticGraph = buildJavaScriptSemanticGraph({
29
28
  rootArtifactSha256: snapshot.manifest.root_sha256,
30
29
  applicationGraph: graph,
@@ -42,11 +41,7 @@ export const reconstructJavaScriptArtifact = async (rawInput, signal) => {
42
41
  statistics: {
43
42
  relevant_files: files.files.length,
44
43
  nested_asar_containers: files.containers.length,
45
- text_files_selected: files.text_files_selected,
46
44
  text_bytes_read: files.text_bytes_read,
47
- omitted_text_files: files.omitted_text_files,
48
- limit_omitted_text_files: files.limit_omitted_text_files,
49
- policy_filtered_text_files: files.policy_filtered_text_files,
50
45
  invalid_utf8_files: files.invalid_utf8_files,
51
46
  parsed_javascript_files: analysis.files.filter(({ javascript }) => javascript !== null).length,
52
47
  visited_ast_nodes: analysis.visited_ast_nodes,
@@ -1,18 +1,6 @@
1
1
  import { z } from "zod";
2
- import { JAVASCRIPT_APPLICATION_ANALYSIS_DEFAULT_LIMITS, javascriptApplicationAnalysisLimitsSchema, } from "../domain/javascriptApplicationAnalysis.js";
3
- /** Local ASAR/directory reconstruction request with explicit source-map authority. */
2
+ /** Local ASAR/directory reconstruction request. */
4
3
  export const javascriptArtifactReconstructionInputSchema = z.strictObject({
5
- input_path: z.string().min(1).max(16_384),
4
+ input_path: z.string().min(1),
6
5
  format: z.enum(["auto", "asar", "directory"]).default("auto"),
7
- source_map_read_approved: z.boolean().default(false),
8
- limits: javascriptApplicationAnalysisLimitsSchema.default(JAVASCRIPT_APPLICATION_ANALYSIS_DEFAULT_LIMITS),
9
- });
10
- /** Project reconstruction limits into the shared artifact traversal policy. */
11
- export const artifactLimitsForReconstruction = (input) => ({
12
- maxEntries: input.limits.max_entries,
13
- maxTotalBytes: input.limits.max_total_artifact_bytes,
14
- maxEntryBytes: input.limits.max_artifact_entry_bytes,
15
- maxCompressionRatio: input.limits.max_compression_ratio,
16
- maxDepth: input.limits.max_depth,
17
- maxPathBytes: input.limits.max_path_bytes,
18
6
  });
@@ -26,13 +26,13 @@ export const analyzeJavaScriptJsonModule = (file) => {
26
26
  const keys = typeof value === "object" && value !== null && !Array.isArray(value)
27
27
  ? Object.keys(value).sort(compareCodePoints)
28
28
  : [];
29
- const retained = keys.slice(0, 128);
29
+ const retained = keys;
30
30
  return {
31
31
  path: file.path,
32
32
  sha256: file.sha256,
33
33
  status: "included",
34
34
  top_level_keys: retained,
35
- omitted_top_level_keys: keys.length - retained.length,
35
+ omitted_top_level_keys: 0,
36
36
  limitation: null,
37
37
  };
38
38
  };
@@ -1,7 +1,8 @@
1
1
  import { posix } from "node:path";
2
+ import { completeApplicationCoverage, partialApplicationCoverage, } from "../domain/javascriptApplicationEvidenceSchemas.js";
2
3
  import { addAstContainsEdge, artifactLocalIdentity, } from "./JavaScriptArtifactGraphContext.js";
3
- import { astObservationEvidence, completeReconstructionCoverage, partialReconstructionCoverage, staticInferenceEvidence, } from "./JavaScriptArtifactGraphEvidence.js";
4
- import { resolveArtifactPathByContext } from "./JavaScriptArtifactPathResolution.js";
4
+ import { astObservationEvidence, staticInferenceEvidence, } from "./JavaScriptArtifactGraphEvidence.js";
5
+ import { resolveArtifactPathByContext, } from "./JavaScriptArtifactPathResolution.js";
5
6
  import { projectJavaScriptExportReturnShapes } from "./JavaScriptReturnShapeProjection.js";
6
7
  /** Create one path-scoped source-module identity for every analyzed source file. */
7
8
  export const addJavaScriptSourceModules = (context) => {
@@ -14,7 +15,7 @@ export const addJavaScriptSourceModules = (context) => {
14
15
  const exports = semantic.ir.moduleLinks
15
16
  .flatMap(({ exportedName }) => exportedName === null ? [] : [exportedName])
16
17
  .sort(compareCodePoints);
17
- const retainedExports = [...new Set(exports)].slice(0, 128);
18
+ const retainedExports = [...new Set(exports)];
18
19
  const source = context.accumulator.addNode({
19
20
  kind: "javascript-module",
20
21
  identity: artifactLocalIdentity(file.sha256, "source-module", `${file.container_sha256}:${file.path}`),
@@ -30,7 +31,7 @@ export const addJavaScriptSourceModules = (context) => {
30
31
  import_relationships: semantic.ir.moduleLinks.filter(({ kind }) => kind === "import" || kind === "require").length,
31
32
  export_relationships: exports.length,
32
33
  export_names: retainedExports,
33
- omitted_export_names: Math.max(0, exports.length - retainedExports.length),
34
+ omitted_export_names: 0,
34
35
  },
35
36
  evidence: astObservationEvidence({
36
37
  sha256: file.sha256,
@@ -161,25 +162,25 @@ const resolveModuleTarget = (input, specifier) => {
161
162
  ? "require"
162
163
  : "import",
163
164
  });
164
- const path = resolution.resolved_path;
165
- const file = path === null ? undefined : input.context.filesByPath.get(path);
166
- const node = path === null
167
- ? undefined
168
- : (input.context.sourceModuleNodes.get(path) ??
169
- input.context.fileNodes.get(path));
170
- if (path !== null && file !== undefined && node !== undefined)
165
+ if (resolution.resolution_status !== "resolved")
171
166
  return {
172
- node,
173
- path,
174
- file,
175
- status: "resolved",
167
+ node: unresolvedModuleNode(input, specifier, resolution.resolution_status),
168
+ path: null,
169
+ file: null,
170
+ status: resolution.resolution_status,
176
171
  limitations: resolution.limitations,
177
172
  };
173
+ const path = resolution.resolved_path;
174
+ const file = input.context.filesByPath.get(path);
175
+ const node = input.context.sourceModuleNodes.get(path) ??
176
+ input.context.fileNodes.get(path);
177
+ if (file === undefined || node === undefined)
178
+ throw new TypeError(`Resolved artifact path ${path} is absent from its graph context.`);
178
179
  return {
179
- node: unresolvedModuleNode(input, specifier, resolution.resolution_status),
180
- path: null,
181
- file: null,
182
- status: resolution.resolution_status,
180
+ node,
181
+ path,
182
+ file,
183
+ status: "resolved",
183
184
  limitations: resolution.limitations,
184
185
  };
185
186
  };
@@ -243,14 +244,9 @@ const relationshipEvidence = (input, operation, limitations, confidence = "high"
243
244
  limitations: [...input.semantic.ir.limitations, ...limitations],
244
245
  });
245
246
  const semanticCoverage = (semantic) => {
246
- const limits = Object.entries(semantic.limits).map(([name, value]) => ({
247
- name: `semantic-${camelToKebab(name)}`,
248
- value,
249
- unit: "items",
250
- }));
251
247
  if (semantic.ir.coverage.status === "complete")
252
- return completeReconstructionCoverage(limits);
253
- return partialReconstructionCoverage(limits, semantic.ir.coverage.omittedCount, semantic.ir.coverage.status === "truncated");
248
+ return completeApplicationCoverage();
249
+ return partialApplicationCoverage([], semantic.ir.coverage.omittedCount);
254
250
  };
255
251
  const moduleFormat = (path, ir) => {
256
252
  const extension = posix.extname(path).toLowerCase();
@@ -282,5 +278,4 @@ const jsonStatus = (file) => {
282
278
  const isExportLink = (link) => link.kind === "export" ||
283
279
  link.kind === "re-export" ||
284
280
  link.kind === "commonjs-export";
285
- const camelToKebab = (value) => value.replaceAll(/([a-z])([A-Z])/gu, "$1-$2").toLowerCase();
286
281
  const compareCodePoints = (left, right) => left < right ? -1 : left > right ? 1 : 0;
@@ -12,5 +12,5 @@ export const replayPermissionRequest = (input, policy) => ({
12
12
  environment_names: [],
13
13
  network: "none",
14
14
  mount: true,
15
- operation_identity: `run_controlled_replay:${input.plan_digest ?? "plan"}`,
15
+ operation_identity: `run_controlled_replay:${input.mode === "plan" ? "plan" : input.plan_digest}`,
16
16
  });
@@ -11,8 +11,14 @@ const REPLAY_POLICY_DOCUMENT = Object.freeze({
11
11
  resource_manager: "systemd-user-cgroup-v2",
12
12
  nested_user_namespaces: false,
13
13
  });
14
+ const assertReplayManifestWithinProtocolLimit = (input) => {
15
+ if (new TextEncoder().encode(JSON.stringify(input)).byteLength >
16
+ input.limits.protocol_bytes)
17
+ throw new RangeError("Replay plan input exceeds its protocol byte limit");
18
+ };
14
19
  /** Read, normalize, and content-address every input to one replay experiment. */
15
20
  export const prepareReplayPlan = async (input, policy, host) => {
21
+ assertReplayManifestWithinProtocolLimit(input);
16
22
  const cases = replayCases(input).map((item) => ({
17
23
  ...item,
18
24
  sha256: digestJson(item.arguments),
@@ -34,7 +40,6 @@ export const prepareReplayPlan = async (input, policy, host) => {
34
40
  : prepareSide(input.right, input.limits.module_bytes, host),
35
41
  ]);
36
42
  const withoutDigest = {
37
- schema_version: 1,
38
43
  policy_version: REPLAY_POLICY_VERSION,
39
44
  policy_sha256: digestJson(REPLAY_POLICY_DOCUMENT),
40
45
  network: "none",
@@ -70,14 +75,13 @@ export const prepareReplayPlan = async (input, policy, host) => {
70
75
  "Perform no host filesystem writes and expose no host or external network",
71
76
  ...(input.reproducer_export === undefined
72
77
  ? []
73
- : ["Write one separately approved reproducer after sandbox cleanup"]),
78
+ : ["Write one reproducer after sandbox cleanup"]),
74
79
  ],
75
80
  reproducer_export: input.reproducer_export === undefined
76
81
  ? null
77
82
  : {
78
83
  path: input.reproducer_export.path,
79
84
  include_sources: input.reproducer_export.include_sources,
80
- authority: "evidence_write",
81
85
  },
82
86
  };
83
87
  const publicPlan = {
@@ -105,6 +109,8 @@ const prepareSide = async (side, maximumBytes, host) => {
105
109
  if (remaining <= 0)
106
110
  throw new RangeError("Replay module bytes exceed the aggregate limit");
107
111
  const source = await host.readSource(module.path, remaining);
112
+ if (source.bytes.byteLength > remaining)
113
+ throw new RangeError("Replay module bytes exceed the aggregate limit");
108
114
  totalBytes += source.bytes.byteLength;
109
115
  loaded.push({ module, source });
110
116
  }
@@ -1,7 +1,8 @@
1
+ import { projectPermissionFailure } from "./PermissionFailure.js";
1
2
  import { z } from "zod";
2
3
  import writeFileAtomic from "write-file-atomic";
3
4
  import { controlledReplayInputSchema, replayExecutionResultSchema, controlledReplayOutputSchema, replayEvidenceSchema, } from "../domain/javascriptReplay.js";
4
- import { AnalysisCapabilityUnavailableError, AnalysisCancelledError, AnalysisInputError, AnalysisProtocolError, PermissionRequiredError, ReplayPlanStaleError, } from "../domain/errors.js";
5
+ import { AnalysisCapabilityUnavailableError, AnalysisCancelledError, AnalysisInputError, AnalysisProtocolError, ReplayPlanStaleError, } from "../domain/errors.js";
5
6
  import { createEvidence } from "../domain/evidence.js";
6
7
  import { projectInputIssues } from "../domain/inputIssueProjection.js";
7
8
  import { jsonValueSchema } from "../domain/jsonValue.js";
@@ -19,10 +20,10 @@ export const runControlledReplay = async (dependencies, rawInput, options = {})
19
20
  };
20
21
  /** Plan or execute replay input already parsed by a trusted adapter. */
21
22
  export const runControlledReplayValidated = async (dependencies, input, options = {}) => {
22
- const authorized = await authorizeReplay(dependencies, input, options.signal);
23
+ const authorized = await authorizeReplay(dependencies, dependencies.policy(), input, options.signal);
23
24
  if (!authorized.ok)
24
25
  return authorized;
25
- const prepared = await prepareValidatedReplay(dependencies, input, options.signal);
26
+ const prepared = await prepareValidatedReplay(dependencies, authorized.value, input, options.signal);
26
27
  if (!prepared.ok)
27
28
  return prepared;
28
29
  if (isAborted(options.signal))
@@ -35,11 +36,17 @@ export const runControlledReplayValidated = async (dependencies, input, options
35
36
  evidence: null,
36
37
  }));
37
38
  if (input.plan_digest !== prepared.value.publicPlan.plan_digest)
38
- return err(new ReplayPlanStaleError(input.plan_digest ?? "", prepared.value.publicPlan.plan_digest));
39
- const exportContext = await authorizeReproducerExport(dependencies.authority, input, prepared.value);
39
+ return err(new ReplayPlanStaleError(input.plan_digest, prepared.value.publicPlan.plan_digest));
40
+ const exportContext = await authorizeReproducerExport(input);
40
41
  if (!exportContext.ok)
41
42
  return exportContext;
42
- const executed = await executeValidatedReplay(dependencies, prepared.value, exportContext.value, options);
43
+ const executed = await executeValidatedReplay({
44
+ runner: dependencies.runner,
45
+ policy: authorized.value,
46
+ prepared: prepared.value,
47
+ exportContext: exportContext.value,
48
+ options,
49
+ });
43
50
  if (!executed.ok)
44
51
  return executed;
45
52
  try {
@@ -51,68 +58,41 @@ export const runControlledReplayValidated = async (dependencies, input, options
51
58
  : "Controlled replay could not establish or clean up its sandbox", { cause }));
52
59
  }
53
60
  };
54
- const authorizeReplay = async (dependencies, input, signal) => {
55
- if (!dependencies.policy.enabled)
61
+ const authorizeReplay = async (dependencies, policy, input, signal) => {
62
+ if (policy.status === "disabled")
56
63
  return err(new AnalysisCapabilityUnavailableError("rea-javascript-replay", OPERATION, "controlled replay is disabled; configure exact roots and executables before enabling it"));
57
64
  if (dependencies.authority === undefined)
58
65
  return err(new AnalysisCapabilityUnavailableError("rea-javascript-replay", OPERATION, "JavaScript replay permission policy is not configured"));
59
66
  if (isAborted(signal))
60
67
  return err(new AnalysisCancelledError(OPERATION));
61
- const request = replayPermissionRequest(input, dependencies.policy);
68
+ const request = replayPermissionRequest(input, policy);
62
69
  const authorized = input.mode === "plan"
63
70
  ? await dependencies.authority.explain(request, "read")
64
71
  : await dependencies.authority.authorize(request, "read");
65
72
  if (!authorized.ok)
66
- return err(authorized.error instanceof PermissionRequiredError
67
- ? authorized.error
68
- : new AnalysisProtocolError(authorized.error.message, {
69
- cause: authorized.error,
70
- }));
71
- return ok(true);
73
+ return err(projectPermissionFailure(authorized.error));
74
+ return ok(policy);
72
75
  };
73
- const prepareValidatedReplay = async (dependencies, input, signal) => {
76
+ const prepareValidatedReplay = async (dependencies, policy, input, signal) => {
74
77
  if (isAborted(signal))
75
78
  return err(new AnalysisCancelledError(OPERATION));
76
79
  try {
77
- return ok(await prepareReplayPlan(input, dependencies.policy, dependencies.host));
80
+ return ok(await prepareReplayPlan(input, policy, dependencies.host));
78
81
  }
79
82
  catch (cause) {
80
83
  return err(new AnalysisCapabilityUnavailableError("rea-javascript-replay", OPERATION, cause instanceof Error ? cause.message : "replay planning failed"));
81
84
  }
82
85
  };
83
- const authorizeReproducerExport = async (authority, input, prepared) => {
86
+ const authorizeReproducerExport = (input) => {
84
87
  if (input.reproducer_export === undefined)
85
88
  return ok(undefined);
86
- if (input.reproducer_export.approved !== true)
87
- return err(new AnalysisInputError(`${OPERATION}:reproducer_export`));
88
- if (authority === undefined)
89
- return err(new AnalysisCapabilityUnavailableError("rea-javascript-replay", OPERATION, "JavaScript replay permission policy is not configured"));
90
- const exportAuthorized = await authority.authorize({
91
- capability: "evidence_write",
92
- roots: [input.reproducer_export.path],
93
- executables: [],
94
- environment_names: [],
95
- network: "none",
96
- mount: false,
97
- operation_identity: `${OPERATION}:reproducer:${prepared.publicPlan.plan_digest}`,
98
- }, "write");
99
- if (!exportAuthorized.ok)
100
- return err(exportAuthorized.error instanceof PermissionRequiredError
101
- ? exportAuthorized.error
102
- : new AnalysisProtocolError(exportAuthorized.error.message, {
103
- cause: exportAuthorized.error,
104
- }));
105
- const canonicalExportPath = exportAuthorized.value.request.roots[0];
106
- if (canonicalExportPath !== input.reproducer_export.path)
107
- return err(new AnalysisInputError(`${OPERATION}:reproducer_export:path`, {
108
- cause: new TypeError(`Use the canonical reproducer path: ${canonicalExportPath ?? "unavailable"}`),
109
- }));
110
89
  return ok({
111
- path: canonicalExportPath,
90
+ path: input.reproducer_export.path,
112
91
  includeSources: input.reproducer_export.include_sources === true,
113
92
  });
114
93
  };
115
- const executeValidatedReplay = async (dependencies, prepared, exportContext, options) => {
94
+ const executeValidatedReplay = async (context) => {
95
+ const { runner, policy, prepared, exportContext, options } = context;
116
96
  await options.progress?.report({
117
97
  phase: OPERATION,
118
98
  completed: 0,
@@ -122,7 +102,7 @@ const executeValidatedReplay = async (dependencies, prepared, exportContext, opt
122
102
  if (isAborted(options.signal))
123
103
  return err(new AnalysisCancelledError(OPERATION));
124
104
  try {
125
- let executed = replayExecutionResultSchema.parse(await dependencies.runner.execute(prepared, dependencies.policy, options.signal));
105
+ let executed = replayExecutionResultSchema.parse(await runner.execute(prepared, policy, options.signal));
126
106
  await options.progress?.report({
127
107
  phase: OPERATION,
128
108
  completed: 1,
@@ -146,7 +126,6 @@ const applyReproducerExport = async (executed, exportContext, prepared) => {
146
126
  if (exportContext === undefined || executed.cleanup.state !== "complete")
147
127
  return executed;
148
128
  const manifest = {
149
- schema_version: 1,
150
129
  plan: prepared.publicPlan,
151
130
  result: executed,
152
131
  sources: exportContext.includeSources
@@ -289,4 +268,7 @@ const createReplayEvidence = (prepared, executed, side, outcomes) => {
289
268
  })),
290
269
  });
291
270
  };
292
- const asJson = (value) => jsonValueSchema.parse(JSON.parse(JSON.stringify(controlledReplayOutputSchema.parse(value))));
271
+ const asJson = (value) => {
272
+ const serialized = JSON.parse(JSON.stringify(controlledReplayOutputSchema.parse(value)));
273
+ return jsonValueSchema.parse(serialized);
274
+ };