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,10 +1,7 @@
1
1
  import { z } from "zod";
2
2
  import { artifactInventoryResultSchema } from "../domain/artifactGraph.js";
3
- import { parseAddressedPage } from "../domain/hopperValues.js";
4
- import { processCaptureSchema, validateProcessCapture, } from "../domain/processCapture.js";
5
- const COMPLETION_SCAN_LIMIT = 10_000;
6
- const PROCEDURE_PAGE_SIZE = 500;
7
- const MAX_COMPLETION_VALUE_LENGTH = 4_096;
3
+ import { artifactInspectionResultSchema } from "../domain/artifactInspection.js";
4
+ import { processCaptureSchema } from "../domain/processCapture.js";
8
5
  const documentListSchema = z.array(z.string().min(1));
9
6
  const providerStatusSchema = z.object({
10
7
  providers: z.array(z.object({ id: z.string().min(1) })),
@@ -12,16 +9,12 @@ const providerStatusSchema = z.object({
12
9
  .array(z.object({ provider: z.object({ id: z.string().min(1) }) }))
13
10
  .optional(),
14
11
  });
15
- /** Build bounded live completion over the active provider and session ledger. */
12
+ /** Build live completion over the active provider and session ledger. */
16
13
  export const createPromptCompletionSource = (analysis, session) => ({
17
14
  async complete(kind, value, context) {
18
- if (value.length > MAX_COMPLETION_VALUE_LENGTH)
19
- return [];
20
15
  const candidates = await completionCandidates(kind, analysis, session, context);
21
16
  const prefix = normalize(value);
22
- return uniqueSorted(candidates)
23
- .filter((candidate) => normalize(candidate).startsWith(prefix))
24
- .slice(0, COMPLETION_SCAN_LIMIT);
17
+ return uniqueSorted(candidates).filter((candidate) => normalize(candidate).startsWith(prefix));
25
18
  },
26
19
  });
27
20
  const completionCandidates = async (kind, analysis, session, context) => {
@@ -46,39 +39,20 @@ const documentCandidates = async (analysis) => {
46
39
  if (!result.ok)
47
40
  return [];
48
41
  const parsed = documentListSchema.safeParse(result.value.result);
49
- return parsed.success ? parsed.data.slice(0, COMPLETION_SCAN_LIMIT) : [];
42
+ return parsed.success ? parsed.data : [];
50
43
  };
51
44
  const procedureCandidates = async (analysis, document) => {
52
- if (document !== undefined && document.length > MAX_COMPLETION_VALUE_LENGTH)
53
- return [];
54
45
  const byAddress = new Map();
55
- let offset = 0;
56
- let exhaustive = false;
57
- while (byAddress.size < COMPLETION_SCAN_LIMIT / 2) {
58
- const result = await analysis.execute("list_procedures", {
59
- offset,
60
- limit: PROCEDURE_PAGE_SIZE,
61
- ...(document === undefined || document.length === 0 ? {} : { document }),
62
- });
63
- if (!result.ok)
64
- break;
65
- const parsed = parseAddressedPage(result.value.result);
66
- if (!parsed.ok)
67
- break;
68
- for (const item of parsed.value.items) {
69
- if (byAddress.size >= COMPLETION_SCAN_LIMIT / 2)
70
- break;
71
- if (!byAddress.has(item.address))
72
- byAddress.set(item.address, item.name);
73
- }
74
- const nextOffset = parsed.value.nextOffset;
75
- if (!parsed.value.hasMore) {
76
- exhaustive = true;
77
- break;
78
- }
79
- if (nextOffset === null || nextOffset <= offset)
80
- break;
81
- offset = nextOffset;
46
+ const input = document === undefined || document.length === 0 ? {} : { document };
47
+ const result = await analysis.execute("list_procedures", input);
48
+ if (result.ok) {
49
+ const parsed = z
50
+ .array(z.object({ address: z.string(), value: z.string() }))
51
+ .safeParse(result.value.result);
52
+ if (parsed.success)
53
+ for (const item of parsed.data)
54
+ if (!byAddress.has(item.address))
55
+ byAddress.set(item.address, item.value);
82
56
  }
83
57
  const addressesByName = new Map();
84
58
  for (const [address, name] of byAddress) {
@@ -87,10 +61,9 @@ const procedureCandidates = async (analysis, document) => {
87
61
  addressesByName.set(name, addresses);
88
62
  }
89
63
  const candidates = [...byAddress.keys()];
90
- if (exhaustive)
91
- for (const [name, addresses] of addressesByName)
92
- if (addresses.size === 1 && name.length > 0)
93
- candidates.push(name);
64
+ for (const [name, addresses] of addressesByName)
65
+ if (addresses.size === 1 && name.length > 0)
66
+ candidates.push(name);
94
67
  return candidates;
95
68
  };
96
69
  const providerCandidates = (session) => {
@@ -102,18 +75,14 @@ const providerCandidates = (session) => {
102
75
  const candidates = (parsed.data.analysis_provider_candidates?.length ?? 0) > 0
103
76
  ? (parsed.data.analysis_provider_candidates?.map(({ provider }) => provider.id) ?? [])
104
77
  : parsed.data.providers.map(({ id }) => id);
105
- return ["auto", ...candidates].slice(0, COMPLETION_SCAN_LIMIT);
78
+ return ["auto", ...candidates];
106
79
  };
107
80
  const evidenceCandidates = (kind, session) => {
108
81
  if (session === undefined)
109
82
  return [];
110
83
  const candidates = [];
111
- for (const evidence of session.exportEvidenceBundle().records) {
112
- const remaining = COMPLETION_SCAN_LIMIT - candidates.length;
113
- candidates.push(...evidenceValues(kind, evidence).slice(0, remaining));
114
- if (candidates.length >= COMPLETION_SCAN_LIMIT)
115
- break;
116
- }
84
+ for (const evidence of session.exportEvidenceBundle().records)
85
+ candidates.push(...evidenceValues(kind, evidence));
117
86
  return candidates;
118
87
  };
119
88
  const evidenceValues = (kind, evidence) => {
@@ -121,30 +90,37 @@ const evidenceValues = (kind, evidence) => {
121
90
  return [evidence.evidence_id];
122
91
  if (kind === "capture")
123
92
  return isProcessCaptureEvidence(evidence) ? [evidence.evidence_id] : [];
124
- if (evidence.operation !== "inventory_artifact")
93
+ const inventoryResult = evidence.operation === "inventory_artifact"
94
+ ? evidence.normalized_result
95
+ : evidence.operation === "inspect_artifact"
96
+ ? (() => {
97
+ const inspection = artifactInspectionResultSchema.safeParse(evidence.normalized_result);
98
+ return inspection.success
99
+ ? inspection.data.substeps[0]?.evidence.normalized_result
100
+ : undefined;
101
+ })()
102
+ : undefined;
103
+ if (inventoryResult === undefined)
125
104
  return [];
126
- const inventory = artifactInventoryResultSchema.safeParse(evidence.normalized_result);
105
+ const inventory = artifactInventoryResultSchema.safeParse(inventoryResult);
127
106
  if (!inventory.success)
128
107
  return [];
129
108
  if (kind === "manifest")
130
109
  return [inventory.data.manifest.manifest_id];
131
- return inventory.data.occurrences.items.map(({ occurrence_id: id }) => id);
110
+ return inventory.data.occurrences.map(({ occurrence_id: id }) => id);
132
111
  };
133
112
  const isProcessCaptureEvidence = (evidence) => {
134
113
  if (evidence.operation !== "capture_process_scenario")
135
114
  return false;
136
115
  const capture = processCaptureSchema.safeParse(evidence.normalized_result);
137
- return capture.success && validateProcessCapture(capture.data).length === 0;
116
+ return capture.success;
138
117
  };
139
118
  const unknownCandidates = (session) => session === undefined
140
119
  ? []
141
120
  : session
142
121
  .listUnknowns()
143
122
  .filter(({ status }) => status !== "resolved")
144
- .map(({ unknown_id: id }) => id)
145
- .slice(0, COMPLETION_SCAN_LIMIT);
146
- const uniqueSorted = (values) => [
147
- ...new Set(values.filter((value) => value.length > 0 && value.length <= MAX_COMPLETION_VALUE_LENGTH)),
148
- ].sort(compareText);
123
+ .map(({ unknown_id: id }) => id);
124
+ const uniqueSorted = (values) => [...new Set(values.filter((value) => value.length > 0))].sort(compareText);
149
125
  const compareText = (left, right) => left < right ? -1 : left > right ? 1 : 0;
150
126
  const normalize = (value) => value.normalize("NFKC").toLowerCase();
@@ -1,5 +1,5 @@
1
1
  import { ok } from "../domain/result.js";
2
- /** Atomically record derived Evidence with an optional approved unknown. */
2
+ /** Atomically record derived Evidence with an optional supported unknown. */
3
3
  export const recordDerivedEvidence = (session, evidence, unknown) => {
4
4
  if (unknown !== undefined) {
5
5
  const recorded = session.recordEvidenceWithUnknown(evidence, unknown);
@@ -1,22 +1,18 @@
1
+ import { recordSessionEvidenceSources } from "../sessionEvidence.js";
1
2
  import { executeNodeCharacterization, prepareNodeCharacterization, } from "../../application/NodeRuntimeCharacterizationService.js";
2
3
  import { applicationToolContract } from "../../contracts/applicationToolContracts.js";
3
- import { nodeCharacterizationExecutionInputSchema, nodeCharacterizationExecutionOutputSchema, nodeCharacterizationPreparationInputSchema, nodeCharacterizationPreparationOutputSchema, } from "../../domain/nodeRuntimeCharacterization.js";
4
4
  import { parseEvidence } from "../../domain/evidence.js";
5
+ import { nodeCharacterizationExecutionOutputSchema, nodeCharacterizationPreparationOutputSchema, } from "../../domain/nodeRuntimeCharacterization.js";
6
+ import { mcpProgressReporter } from "../mcpProgress.js";
5
7
  import { logToolExecution } from "../toolLogging.js";
6
- import { toCallToolResult } from "../toolResult.js";
7
8
  import { toolRegistrationOptions } from "../toolRegistrationOptions.js";
8
- import { safeParseToolInput } from "../toolInputValidation.js";
9
- import { mcpProgressReporter } from "../mcpProgress.js";
10
- import { recordSources } from "./helpers.js";
9
+ import { toCallToolResult } from "../toolResult.js";
11
10
  const prepareContract = applicationToolContract("prepare_node_characterization");
12
11
  const executeContract = applicationToolContract("execute_node_characterization");
13
12
  /** Register node runtime characterization prepare and execute tools. */
14
13
  export const registerCharacterizationTools = (server, options) => {
15
14
  server.registerTool(prepareContract.name, toolRegistrationOptions(prepareContract), async (input, context) => {
16
- const parsed = safeParseToolInput(nodeCharacterizationPreparationInputSchema, input, prepareContract.name);
17
- if (!parsed.ok)
18
- return toCallToolResult(parsed, prepareContract);
19
- const result = await logToolExecution(options.logger, prepareContract.name, () => prepareNodeCharacterization(options.replay, parsed.value, {
15
+ const result = await logToolExecution(options.logger, prepareContract.name, () => prepareNodeCharacterization(options.replay, input, {
20
16
  signal: context.mcpReq.signal,
21
17
  progress: mcpProgressReporter(context),
22
18
  }));
@@ -26,15 +22,10 @@ export const registerCharacterizationTools = (server, options) => {
26
22
  const recorded = options.recordEvidence?.(parseEvidence(output.transformation_evidence));
27
23
  if (recorded !== undefined && !recorded.ok)
28
24
  return toCallToolResult(recorded, prepareContract);
29
- return toCallToolResult(result, prepareContract, {
30
- evidenceResourcesAvailable: options.recordEvidence !== undefined,
31
- });
25
+ return toCallToolResult(result, prepareContract);
32
26
  });
33
27
  server.registerTool(executeContract.name, toolRegistrationOptions(executeContract), async (input, context) => {
34
- const parsed = safeParseToolInput(nodeCharacterizationExecutionInputSchema, input, executeContract.name);
35
- if (!parsed.ok)
36
- return toCallToolResult(parsed, executeContract);
37
- const result = await logToolExecution(options.logger, executeContract.name, () => executeNodeCharacterization(options.replay, parsed.value, {
28
+ const result = await logToolExecution(options.logger, executeContract.name, () => executeNodeCharacterization(options.replay, input, {
38
29
  signal: context.mcpReq.signal,
39
30
  progress: mcpProgressReporter(context),
40
31
  }));
@@ -44,14 +35,12 @@ export const registerCharacterizationTools = (server, options) => {
44
35
  const sources = [
45
36
  output.transformation_evidence,
46
37
  ...output.replay.source_evidence,
47
- ...(output.replay.evidence === null ? [] : [output.replay.evidence]),
38
+ output.replay.evidence,
48
39
  output.evidence,
49
40
  ].map((item) => parseEvidence(item));
50
- const recorded = recordSources(options.recordEvidence, sources);
41
+ const recorded = recordSessionEvidenceSources(options.recordEvidence, sources);
51
42
  if (!recorded.ok)
52
43
  return toCallToolResult(recorded, executeContract);
53
- return toCallToolResult(result, executeContract, {
54
- evidenceResourcesAvailable: options.recordEvidence !== undefined,
55
- });
44
+ return toCallToolResult(result, executeContract);
56
45
  });
57
46
  };
@@ -1,28 +1,20 @@
1
- import { resolveCompareJavaScriptExportShapesRequestValidated } from "../../application/ApplicationWorkflowEvidenceResolver.js";
1
+ import { recordSessionEvidenceSources } from "../sessionEvidence.js";
2
2
  import { compareJavaScriptExportShapesEvidenceValidated } from "../../application/JavaScriptApplicationWorkflowService.js";
3
3
  import { applicationToolContract } from "../../contracts/applicationToolContracts.js";
4
- import { compareJavaScriptExportShapesRequestSchema } from "../../contracts/applicationWorkflowInputContracts.js";
5
4
  import { javaScriptExportShapeComparisonResultSchema } from "../../domain/javascriptExportShapeComparisonSchemas.js";
6
- import { safeParseToolInput } from "../toolInputValidation.js";
7
5
  import { logToolExecution } from "../toolLogging.js";
8
- import { toCallToolResult } from "../toolResult.js";
9
6
  import { toolRegistrationOptions } from "../toolRegistrationOptions.js";
10
- import { recordResult, recordSources } from "./helpers.js";
7
+ import { toCallToolResult } from "../toolResult.js";
8
+ import { recordResult } from "./helpers.js";
11
9
  const contract = applicationToolContract("compare_javascript_export_shapes");
12
10
  /** Register the execution-free exact JavaScript export-shape comparison. */
13
11
  export const registerCompareJavaScriptExportShapesTool = (server, options) => {
14
12
  server.registerTool(contract.name, toolRegistrationOptions(contract), async (input) => {
15
- const parsedInput = safeParseToolInput(compareJavaScriptExportShapesRequestSchema, input, contract.name);
16
- if (!parsedInput.ok)
17
- return toCallToolResult(parsedInput, contract);
18
- const resolved = resolveCompareJavaScriptExportShapesRequestValidated(parsedInput.value, options.evidenceLookup);
19
- if (!resolved.ok)
20
- return toCallToolResult(resolved, contract);
21
- const parsed = resolved.value;
13
+ const parsed = input;
22
14
  const result = await logToolExecution(options.logger, contract.name, () => Promise.resolve(compareJavaScriptExportShapesEvidenceValidated(parsed)));
23
15
  if (!result.ok)
24
16
  return toCallToolResult(result, contract);
25
- const recorded = recordSources(options.recordEvidence, [
17
+ const recorded = recordSessionEvidenceSources(options.recordEvidence, [
26
18
  parsed.left,
27
19
  parsed.right,
28
20
  ]);
@@ -30,8 +22,6 @@ export const registerCompareJavaScriptExportShapesTool = (server, options) => {
30
22
  return toCallToolResult(recorded, contract);
31
23
  const comparison = javaScriptExportShapeComparisonResultSchema.parse(result.value.normalized_result);
32
24
  const unknown = comparison.summary.unknown > 0;
33
- return recordResult(options, contract, result.value, parsed.unknown_registry_approved === true && unknown
34
- ? "javascript-export-shape"
35
- : undefined);
25
+ return recordResult(options, contract, result.value, unknown ? "javascript-export-shape" : undefined);
36
26
  });
37
27
  };
@@ -1,34 +1,25 @@
1
+ import { recordSessionEvidenceSources } from "../sessionEvidence.js";
1
2
  import { compareSourceToBundleEvidenceValidated } from "../../application/JavaScriptApplicationWorkflowService.js";
2
- import { resolveCompareSourceToBundleRequestValidated } from "../../application/ApplicationWorkflowEvidenceResolver.js";
3
3
  import { applicationToolContract } from "../../contracts/applicationToolContracts.js";
4
- import { compareSourceToBundleRequestSchema } from "../../contracts/applicationWorkflowInputContracts.js";
5
4
  import { sourceToBundleComparisonResultSchema } from "../../domain/sourceToBundleComparisonSchemas.js";
6
5
  import { logToolExecution } from "../toolLogging.js";
7
- import { safeParseToolInput } from "../toolInputValidation.js";
8
6
  import { toolRegistrationOptions } from "../toolRegistrationOptions.js";
9
7
  import { toCallToolResult } from "../toolResult.js";
10
- import { recordResult, recordSources } from "./helpers.js";
8
+ import { recordResult } from "./helpers.js";
11
9
  const contract = applicationToolContract("compare_source_to_bundle");
12
10
  /** Register conservative historical-source to bundle comparison. */
13
11
  export const registerCompareSourceToBundleTool = (server, options) => {
14
12
  server.registerTool(contract.name, toolRegistrationOptions(contract), async (input) => {
15
- const parsedInput = safeParseToolInput(compareSourceToBundleRequestSchema, input, contract.name);
16
- if (!parsedInput.ok)
17
- return toCallToolResult(parsedInput, contract);
18
- const resolved = resolveCompareSourceToBundleRequestValidated(parsedInput.value, options.evidenceLookup);
19
- if (!resolved.ok)
20
- return toCallToolResult(resolved, contract);
21
- const result = await logToolExecution(options.logger, contract.name, () => Promise.resolve(compareSourceToBundleEvidenceValidated(resolved.value)));
13
+ const result = await logToolExecution(options.logger, contract.name, () => Promise.resolve(compareSourceToBundleEvidenceValidated(input)));
22
14
  if (!result.ok)
23
15
  return toCallToolResult(result, contract);
24
- const recorded = recordSources(options.recordEvidence, [
25
- resolved.value.application,
16
+ const recorded = recordSessionEvidenceSources(options.recordEvidence, [
17
+ input.application,
26
18
  ]);
27
19
  if (!recorded.ok)
28
20
  return toCallToolResult(recorded, contract);
29
21
  const comparison = sourceToBundleComparisonResultSchema.parse(result.value.normalized_result);
30
- return recordResult(options, contract, result.value, resolved.value.unknown_registry_approved === true &&
31
- comparison.summary.unknown > 0
22
+ return recordResult(options, contract, result.value, comparison.summary.unknown > 0
32
23
  ? "source-to-bundle-comparison"
33
24
  : undefined);
34
25
  });
@@ -1,24 +1,16 @@
1
+ import { recordSessionEvidenceSources } from "../sessionEvidence.js";
1
2
  import { compareApplicationVersionsEvidenceValidated } from "../../application/JavaScriptApplicationWorkflowService.js";
2
- import { resolveCompareApplicationVersionsRequestValidated } from "../../application/ApplicationWorkflowEvidenceResolver.js";
3
3
  import { applicationToolContract } from "../../contracts/applicationToolContracts.js";
4
- import { compareApplicationVersionsRequestSchema } from "../../contracts/applicationWorkflowInputContracts.js";
5
4
  import { applicationVersionComparisonResultSchema } from "../../domain/javascriptApplicationVersionComparisonSchemas.js";
6
5
  import { logToolExecution } from "../toolLogging.js";
7
- import { toCallToolResult } from "../toolResult.js";
8
6
  import { toolRegistrationOptions } from "../toolRegistrationOptions.js";
9
- import { safeParseToolInput } from "../toolInputValidation.js";
10
- import { recordResult, recordSources } from "./helpers.js";
7
+ import { toCallToolResult } from "../toolResult.js";
8
+ import { recordResult } from "./helpers.js";
11
9
  const compareContract = applicationToolContract("compare_application_versions");
12
10
  /** Register the provider-neutral JavaScript version comparison tool. */
13
11
  export const registerCompareApplicationVersionsTool = (server, options) => {
14
12
  server.registerTool(compareContract.name, toolRegistrationOptions(compareContract), async (input) => {
15
- const parsedInput = safeParseToolInput(compareApplicationVersionsRequestSchema, input, compareContract.name);
16
- if (!parsedInput.ok)
17
- return toCallToolResult(parsedInput, compareContract);
18
- const resolved = resolveCompareApplicationVersionsRequestValidated(parsedInput.value, options.evidenceLookup);
19
- if (!resolved.ok)
20
- return toCallToolResult(resolved, compareContract);
21
- const parsed = resolved.value;
13
+ const parsed = input;
22
14
  const result = await logToolExecution(options.logger, compareContract.name, () => Promise.resolve(compareApplicationVersionsEvidenceValidated(parsed)));
23
15
  if (!result.ok)
24
16
  return toCallToolResult(result, compareContract);
@@ -28,13 +20,11 @@ export const registerCompareApplicationVersionsTool = (server, options) => {
28
20
  ...parsed.left_native_observations,
29
21
  ...parsed.right_native_observations,
30
22
  ];
31
- const recorded = recordSources(options.recordEvidence, sources);
23
+ const recorded = recordSessionEvidenceSources(options.recordEvidence, sources);
32
24
  if (!recorded.ok)
33
25
  return toCallToolResult(recorded, compareContract);
34
26
  const comparison = applicationVersionComparisonResultSchema.parse(result.value.normalized_result);
35
27
  const unknown = comparison.summary.unknown > 0;
36
- return recordResult(options, compareContract, result.value, parsed.unknown_registry_approved === true && unknown
37
- ? "application-version-comparison"
38
- : undefined);
28
+ return recordResult(options, compareContract, result.value, unknown ? "application-version-comparison" : undefined);
39
29
  });
40
30
  };
@@ -1,38 +1,31 @@
1
+ import { recordSessionEvidenceSources } from "../sessionEvidence.js";
1
2
  import { runControlledReplayValidated } from "../../application/JavaScriptReplayService.js";
2
3
  import { applicationToolContract } from "../../contracts/applicationToolContracts.js";
3
- import { controlledReplayInputSchema, controlledReplayOutputSchema, } from "../../domain/javascriptReplay.js";
4
4
  import { parseEvidence } from "../../domain/evidence.js";
5
+ import { controlledReplayOutputSchema } from "../../domain/javascriptReplay.js";
6
+ import { mcpProgressReporter } from "../mcpProgress.js";
5
7
  import { logToolExecution } from "../toolLogging.js";
6
- import { toCallToolResult } from "../toolResult.js";
7
8
  import { toolRegistrationOptions } from "../toolRegistrationOptions.js";
8
- import { safeParseToolInput } from "../toolInputValidation.js";
9
- import { mcpProgressReporter } from "../mcpProgress.js";
10
- import { recordSources } from "./helpers.js";
9
+ import { toCallToolResult } from "../toolResult.js";
11
10
  const replayContract = applicationToolContract("run_controlled_replay");
12
11
  /** Register the controlled JavaScript replay tool. */
13
12
  export const registerControlledReplayTool = (server, options) => {
14
13
  server.registerTool(replayContract.name, toolRegistrationOptions(replayContract), async (input, context) => {
15
- const parsedInput = safeParseToolInput(controlledReplayInputSchema, input, replayContract.name);
16
- if (!parsedInput.ok)
17
- return toCallToolResult(parsedInput, replayContract);
18
- const parsed = parsedInput.value;
19
- const result = await logToolExecution(options.logger, replayContract.name, () => runControlledReplayValidated(options.replay, parsed, {
14
+ const result = await logToolExecution(options.logger, replayContract.name, () => runControlledReplayValidated(options.replay, input, {
20
15
  signal: context.mcpReq.signal,
21
16
  progress: mcpProgressReporter(context),
22
17
  }));
23
18
  if (!result.ok)
24
19
  return toCallToolResult(result, replayContract);
25
20
  const output = controlledReplayOutputSchema.parse(result.value);
26
- if (output.evidence !== null) {
27
- const sourcesRecorded = recordSources(options.recordEvidence, output.source_evidence.map((item) => parseEvidence(item)));
21
+ if (output.phase === "execute") {
22
+ const sourcesRecorded = recordSessionEvidenceSources(options.recordEvidence, output.source_evidence.map((item) => parseEvidence(item)));
28
23
  if (!sourcesRecorded.ok)
29
24
  return toCallToolResult(sourcesRecorded, replayContract);
30
25
  const recorded = options.recordEvidence?.(parseEvidence(output.evidence));
31
26
  if (recorded !== undefined && !recorded.ok)
32
27
  return toCallToolResult(recorded, replayContract);
33
28
  }
34
- return toCallToolResult(result, replayContract, {
35
- evidenceResourcesAvailable: output.evidence !== null && options.recordEvidence !== undefined,
36
- });
29
+ return toCallToolResult(result, replayContract);
37
30
  });
38
31
  };
@@ -1,84 +1,13 @@
1
- import { commitReconstructionCoverage, queryReconstructionCoverage, } from "../../application/ReconstructionCoverageService.js";
2
- import { readReconstructionCoverageWorkspace } from "../../application/ReconstructionCoverageWorkspaceStore.js";
3
- import { authorizeFileReadWithDeferredWrite, authorizeRootPermission, } from "../../application/DeferredFileAuthorization.js";
1
+ import { evaluateReconstructionCoverage } from "../../application/ReconstructionCoverageService.js";
4
2
  import { applicationToolContract } from "../../contracts/applicationToolContracts.js";
5
- import { reconstructionCoverageCommitInputSchema, reconstructionCoverageQueryInputSchema, } from "../../application/ReconstructionCoverageService.js";
6
- import { reconstructionClosureResultSchema } from "../../domain/reconstructionCoverage.js";
7
- import { AnalysisCapabilityUnavailableError, EvidenceIntegrityError, } from "../../domain/errors.js";
8
- import { err } from "../../domain/result.js";
9
3
  import { logToolExecution } from "../toolLogging.js";
10
- import { toCallToolResult } from "../toolResult.js";
11
4
  import { toolRegistrationOptions } from "../toolRegistrationOptions.js";
12
- import { safeParseToolInput } from "../toolInputValidation.js";
13
- import { coverageWorkspaceUri } from "./helpers.js";
14
- const commitContract = applicationToolContract("commit_reconstruction_coverage");
15
- const queryContract = applicationToolContract("query_reconstruction_coverage");
16
- /** Register reconstruction coverage commit and query tools. */
5
+ import { toCallToolResult } from "../toolResult.js";
6
+ const contract = applicationToolContract("evaluate_reconstruction_coverage");
7
+ /** Register the inline fail-closed reconstruction coverage evaluator. */
17
8
  export const registerCoverageTools = (server, options) => {
18
- registerCommitTool(server, options);
19
- registerQueryTool(server, options);
20
- };
21
- const registerCommitTool = (server, options) => {
22
- server.registerTool(commitContract.name, toolRegistrationOptions(commitContract), async (input, context) => {
23
- const parsed = safeParseToolInput(reconstructionCoverageCommitInputSchema, input, commitContract.name);
24
- if (!parsed.ok)
25
- return toCallToolResult(parsed, commitContract);
26
- if (options.permissionAuthority === undefined)
27
- return toCallToolResult(err(new AnalysisCapabilityUnavailableError("rea-reconstruction-coverage", commitContract.name, "workspace permission policy is not configured")), commitContract);
28
- const authorization = await authorizeFileReadWithDeferredWrite(options.permissionAuthority, {
29
- path: parsed.value.workspace_path,
30
- readCapability: "investigation_workspace_read",
31
- writeCapability: "investigation_workspace_write",
32
- operation: commitContract.name,
33
- });
34
- if (!authorization.ok)
35
- return toCallToolResult(authorization, commitContract);
36
- const write = await authorization.value.authorizeWrite();
37
- if (!write.ok)
38
- return toCallToolResult(write, commitContract);
39
- const result = await logToolExecution(options.logger, commitContract.name, () => commitReconstructionCoverage(parsed.value, options.evidenceFilePolicy, { signal: context.mcpReq.signal }));
40
- if (!result.ok)
41
- return toCallToolResult(result, commitContract);
42
- options.retainCoverageWorkspace?.(parsed.value.workspace);
43
- return toCallToolResult(result, commitContract, {
44
- resourceLinks: options.retainCoverageWorkspace === undefined
45
- ? []
46
- : [
47
- {
48
- uri: coverageWorkspaceUri(parsed.value.workspace),
49
- name: parsed.value.workspace.workspace_id,
50
- description: "Session-retained reconstruction coverage workspace revision",
51
- },
52
- ],
53
- });
54
- });
55
- };
56
- const registerQueryTool = (server, options) => {
57
- server.registerTool(queryContract.name, toolRegistrationOptions(queryContract), async (input, context) => {
58
- const parsed = safeParseToolInput(reconstructionCoverageQueryInputSchema, input, queryContract.name);
59
- if (!parsed.ok)
60
- return toCallToolResult(parsed, queryContract);
61
- if (options.permissionAuthority === undefined)
62
- return toCallToolResult(err(new AnalysisCapabilityUnavailableError("rea-reconstruction-coverage", queryContract.name, "workspace permission policy is not configured")), queryContract);
63
- const authorized = await authorizeRootPermission(options.permissionAuthority, {
64
- capability: "investigation_workspace_read",
65
- roots: [parsed.value.workspace_path],
66
- access: "read",
67
- operation: queryContract.name,
68
- });
69
- if (!authorized.ok)
70
- return toCallToolResult(authorized, queryContract);
71
- const result = await logToolExecution(options.logger, queryContract.name, () => queryReconstructionCoverage(parsed.value, options.evidenceFilePolicy, Date.now(), { signal: context.mcpReq.signal }));
72
- if (result.ok && options.retainCoverageWorkspace !== undefined) {
73
- const closure = reconstructionClosureResultSchema.parse(result.value);
74
- const loaded = await readReconstructionCoverageWorkspace(parsed.value.workspace_path, options.evidenceFilePolicy);
75
- if (!loaded.ok)
76
- return toCallToolResult(loaded, queryContract);
77
- if (loaded.value === null ||
78
- loaded.value.revision_sha256 !== closure.workspace_revision_sha256)
79
- return toCallToolResult(err(new EvidenceIntegrityError("workspace changed while its closure was being retained")), queryContract);
80
- options.retainCoverageWorkspace(loaded.value);
81
- }
82
- return toCallToolResult(result, queryContract);
9
+ server.registerTool(contract.name, toolRegistrationOptions(contract), async (input) => {
10
+ const result = await logToolExecution(options.logger, contract.name, () => Promise.resolve(evaluateReconstructionCoverage(input)));
11
+ return toCallToolResult(result, contract);
83
12
  });
84
13
  };
@@ -1,26 +1,14 @@
1
1
  import { APPLICATION_TOOL_CONTRACTS } from "../../contracts/applicationToolContracts.js";
2
2
  import { toCallToolResult } from "../toolResult.js";
3
- export const coverageWorkspaceUri = (workspace) => `rea://reconstruction-coverage/${workspace.workspace_id}/revision/${String(workspace.revision)}`;
4
- export const recordSources = (recordEvidence, sources) => {
5
- for (const source of sources) {
6
- const recorded = recordEvidence?.(source);
7
- if (recorded !== undefined && !recorded.ok)
8
- return recorded;
9
- }
10
- return { ok: true, value: null };
11
- };
12
3
  export const recordResult = (options, contract, evidence, unknownKind) => {
13
4
  const recorded = unknownKind === undefined
14
5
  ? options.recordEvidence?.(evidence)
15
6
  : options.recordEvidenceWithUnknown?.(evidence, unknownRegistration(evidence, unknownKind));
16
7
  if (recorded !== undefined && !recorded.ok)
17
8
  return toCallToolResult(recorded, contract);
18
- return toCallToolResult({ ok: true, value: evidence }, contract, {
19
- evidenceResourcesAvailable: recorded !== undefined,
20
- });
9
+ return toCallToolResult({ ok: true, value: evidence }, contract);
21
10
  };
22
11
  const unknownRegistration = (evidence, kind) => ({
23
- approved: true,
24
12
  question: kind === "application-version-comparison"
25
13
  ? "Which application entities remain unmatched or ambiguous across these versions?"
26
14
  : kind === "source-to-bundle-comparison"
@@ -1,25 +1,21 @@
1
+ import { recordSessionEvidenceSources } from "../sessionEvidence.js";
1
2
  import { buildReconstructionObligationLedgerEvidenceValidated, resolveReconstructionObligationLedgerRequest, } from "../../application/ReconstructionObligationLedgerService.js";
2
3
  import { applicationToolContract } from "../../contracts/applicationToolContracts.js";
3
- import { reconstructionObligationLedgerInputSchema } from "../../domain/reconstructionObligationLedgerSchemas.js";
4
4
  import { logToolExecution } from "../toolLogging.js";
5
- import { safeParseToolInput } from "../toolInputValidation.js";
6
5
  import { toolRegistrationOptions } from "../toolRegistrationOptions.js";
7
6
  import { toCallToolResult } from "../toolResult.js";
8
- import { recordResult, recordSources } from "./helpers.js";
7
+ import { recordResult } from "./helpers.js";
9
8
  const contract = applicationToolContract("build_reconstruction_obligation_ledger");
10
9
  /** Register conservative reconstruction-obligation generation and closure. */
11
10
  export const registerReconstructionObligationLedgerTool = (server, options) => {
12
11
  server.registerTool(contract.name, toolRegistrationOptions(contract), async (input) => {
13
- const parsed = safeParseToolInput(reconstructionObligationLedgerInputSchema, input, contract.name);
14
- if (!parsed.ok)
15
- return toCallToolResult(parsed, contract);
16
- const resolved = resolveReconstructionObligationLedgerRequest(parsed.value);
12
+ const resolved = resolveReconstructionObligationLedgerRequest(input);
17
13
  if (!resolved.ok)
18
14
  return toCallToolResult(resolved, contract);
19
15
  const result = await logToolExecution(options.logger, contract.name, () => Promise.resolve(buildReconstructionObligationLedgerEvidenceValidated(resolved.value)));
20
16
  if (!result.ok)
21
17
  return toCallToolResult(result, contract);
22
- const recorded = recordSources(options.recordEvidence, resolved.value.evidence_bundle.records);
18
+ const recorded = recordSessionEvidenceSources(options.recordEvidence, resolved.value.evidence_bundle.records);
23
19
  if (!recorded.ok)
24
20
  return toCallToolResult(recorded, contract);
25
21
  return recordResult(options, contract, result.value);
@@ -1,28 +1,19 @@
1
+ import { recordSessionEvidenceSources } from "../sessionEvidence.js";
1
2
  import { traceApplicationFeatureEvidenceValidated } from "../../application/JavaScriptApplicationWorkflowService.js";
2
- import { resolveTraceApplicationFeatureRequestValidated } from "../../application/ApplicationWorkflowEvidenceResolver.js";
3
3
  import { applicationToolContract } from "../../contracts/applicationToolContracts.js";
4
- import { traceApplicationFeatureRequestSchema } from "../../contracts/applicationWorkflowInputContracts.js";
5
4
  import { logToolExecution } from "../toolLogging.js";
6
- import { toCallToolResult } from "../toolResult.js";
7
5
  import { toolRegistrationOptions } from "../toolRegistrationOptions.js";
8
- import { safeParseToolInput } from "../toolInputValidation.js";
9
- import { recordResult, recordSources } from "./helpers.js";
6
+ import { toCallToolResult } from "../toolResult.js";
7
+ import { recordResult } from "./helpers.js";
10
8
  const traceContract = applicationToolContract("trace_application_feature");
11
9
  /** Register the provider-neutral JavaScript feature trace tool. */
12
10
  export const registerTraceFeatureTool = (server, options) => {
13
11
  server.registerTool(traceContract.name, toolRegistrationOptions(traceContract), async (input) => {
14
- const parsedInput = safeParseToolInput(traceApplicationFeatureRequestSchema, input, traceContract.name);
15
- if (!parsedInput.ok)
16
- return toCallToolResult(parsedInput, traceContract);
17
- const resolved = resolveTraceApplicationFeatureRequestValidated(parsedInput.value, options.evidenceLookup);
18
- if (!resolved.ok)
19
- return toCallToolResult(resolved, traceContract);
20
- const parsed = resolved.value;
21
- const result = await logToolExecution(options.logger, traceContract.name, () => Promise.resolve(traceApplicationFeatureEvidenceValidated(parsed)));
12
+ const result = await logToolExecution(options.logger, traceContract.name, () => Promise.resolve(traceApplicationFeatureEvidenceValidated(input)));
22
13
  if (!result.ok)
23
14
  return toCallToolResult(result, traceContract);
24
- const sources = [parsed.application, ...parsed.native_observations];
25
- const recorded = recordSources(options.recordEvidence, sources);
15
+ const sources = [input.application, ...input.native_observations];
16
+ const recorded = recordSessionEvidenceSources(options.recordEvidence, sources);
26
17
  if (!recorded.ok)
27
18
  return toCallToolResult(recorded, traceContract);
28
19
  return recordResult(options, traceContract, result.value);