rea-agents 6.2.0 → 6.4.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 (636) hide show
  1. package/README.md +24 -23
  2. package/bridge/ghidra/ReaGhidraApplySeeds.java +151 -0
  3. package/bridge/ghidra/ReaGhidraBridge.java +597 -209
  4. package/bridge/ghidra/ReaGhidraNoReturnFix.java +123 -0
  5. package/bridge/hopper_bridge.py +2 -0
  6. package/dist/adb/AdbConfiguration.js +88 -0
  7. package/dist/adb/AdbDeviceOutput.js +186 -0
  8. package/dist/adb/AdbProvider.js +1190 -0
  9. package/dist/adb/AdbShellOutput.js +309 -0
  10. package/dist/android/AndroidTargetSnapshot.js +104 -22
  11. package/dist/android/JadxConfiguration.js +44 -24
  12. package/dist/android/JadxProvider.js +59 -21
  13. package/dist/android/JadxSession.js +51 -9
  14. package/dist/apktool/ApktoolConfiguration.js +84 -0
  15. package/dist/apktool/ApktoolDecodeOutput.js +59 -0
  16. package/dist/apktool/ApktoolProvider.js +506 -0
  17. package/dist/application/AnalysisProvider.js +8 -2
  18. package/dist/application/AppBundleExecutable.js +27 -22
  19. package/dist/application/BinaryTargetResolver.js +85 -19
  20. package/dist/application/BrowserScenarioEvidence.js +2 -2
  21. package/dist/application/CapabilityInventory.js +11 -1
  22. package/dist/application/ClientConfigurationDocument.js +98 -0
  23. package/dist/application/ClientConfigurationFiles.js +91 -0
  24. package/dist/application/ClientRegistrationEnvironment.js +35 -0
  25. package/dist/application/ClientRegistrationStatus.js +75 -27
  26. package/dist/application/DirectAnalysis.js +14 -8
  27. package/dist/application/DirectAnalysisCleanup.js +1 -2
  28. package/dist/application/DirectAnalysisStatus.js +3 -6
  29. package/dist/application/Doctor.js +27 -34
  30. package/dist/application/DoctorDiagnostics.js +1 -1
  31. package/dist/application/EvidenceBundleCommands.js +6 -12
  32. package/dist/application/EvidenceBundleFiles.js +1 -1
  33. package/dist/application/GeminiClientSettings.js +139 -0
  34. package/dist/application/HermesClientHome.js +115 -0
  35. package/dist/application/HopperDownload.js +39 -0
  36. package/dist/application/InvestigationProviders.js +10 -4
  37. package/dist/application/JsonFiles.js +16 -15
  38. package/dist/application/JsonInputFile.js +252 -0
  39. package/dist/application/LinuxHopper.js +6 -13
  40. package/dist/application/MacHopper.js +172 -149
  41. package/dist/application/MipsElfAbiFlags.js +140 -0
  42. package/dist/application/ProviderOperationExecution.js +31 -0
  43. package/dist/application/ReconstructionObligationCandidates.js +16 -3
  44. package/dist/application/ReconstructionObligationLedgerProjection.js +3 -1
  45. package/dist/application/ReferenceSourceImport.js +76 -29
  46. package/dist/application/ReferenceSourceImportEntries.js +18 -9
  47. package/dist/application/ReferenceSourceImportPolicy.js +99 -23
  48. package/dist/application/ReferenceSourceImportTypes.js +30 -22
  49. package/dist/application/ReferenceSourceVcsAdapter.js +145 -30
  50. package/dist/application/RegularFileRead.js +103 -0
  51. package/dist/application/Setup.js +69 -10
  52. package/dist/application/SetupClientConfiguration.js +134 -23
  53. package/dist/application/SetupHost.js +102 -22
  54. package/dist/application/SetupPlan.js +18 -17
  55. package/dist/application/SetupSkill.js +81 -13
  56. package/dist/application/SupportedClients.js +305 -37
  57. package/dist/application/Uninstall.js +172 -8
  58. package/dist/application/UpdateMaintenance.js +23 -23
  59. package/dist/application/Utf8JsonInput.js +71 -0
  60. package/dist/application/WebScriptExportService.js +130 -57
  61. package/dist/application/WebSourceLocationService.js +3 -0
  62. package/dist/application/adb/AdbDeviceAnalysisPort.js +1 -0
  63. package/dist/application/adb/AdbDeviceAnalysisService.js +13 -0
  64. package/dist/application/analysisView/AnalysisViewService.js +40 -2
  65. package/dist/application/android/AndroidAnalysisService.js +1 -1
  66. package/dist/application/apktool/ApktoolResourceAnalysisPort.js +1 -0
  67. package/dist/application/apktool/ApktoolResourceAnalysisService.js +13 -0
  68. package/dist/application/binary/AnalysisClientCleanup.js +0 -24
  69. package/dist/application/binary/AnalysisSnapshotCache.js +5 -4
  70. package/dist/application/binary/BinarySession.js +18 -1
  71. package/dist/application/binary/BinarySessionOpen.js +9 -1
  72. package/dist/application/binaryDiagnostics/BinaryLayoutService.js +2 -1
  73. package/dist/application/binaryDiagnostics/PeResourcesPort.js +1 -0
  74. package/dist/application/binaryDiagnostics/PeResourcesService.js +111 -0
  75. package/dist/application/binaryDiagnostics/RecordedCrashService.js +2 -1
  76. package/dist/application/evm/EvmInterfaceService.js +3 -0
  77. package/dist/application/firmware/FirmwareAnalysisService.js +3 -0
  78. package/dist/application/investigation/InspectEvidenceBundle.js +18 -0
  79. package/dist/application/javascript/ElectronActiveEvidence.js +2 -2
  80. package/dist/application/javascript/ElectronBoundaryAnalysis.js +2 -2
  81. package/dist/application/javascript/ElectronBoundaryGraphContext.js +3 -2
  82. package/dist/application/javascript/ElectronBoundaryGraphIpc.js +2 -2
  83. package/dist/application/javascript/ElectronBoundaryGraphNative.js +20 -3
  84. package/dist/application/javascript/ElectronBoundaryGraphWindows.js +3 -3
  85. package/dist/application/javascript/JavaScriptApplicationEvidence.js +1 -0
  86. package/dist/application/javascript/JavaScriptApplicationEvidenceGraph.js +107 -46
  87. package/dist/application/javascript/JavaScriptApplicationService.js +23 -11
  88. package/dist/application/javascript/JavaScriptApplicationWorkflowEvidence.js +5 -6
  89. package/dist/application/javascript/JavaScriptApplicationWorkflowService.js +59 -45
  90. package/dist/application/javascript/JavaScriptArtifactAnalysis.js +171 -36
  91. package/dist/application/javascript/JavaScriptArtifactGraphAccumulator.js +14 -16
  92. package/dist/application/javascript/JavaScriptArtifactGraphBuilder.js +74 -36
  93. package/dist/application/javascript/JavaScriptArtifactGraphBundlers.js +4 -3
  94. package/dist/application/javascript/JavaScriptArtifactGraphContext.js +11 -5
  95. package/dist/application/javascript/JavaScriptArtifactGraphFindings.js +53 -42
  96. package/dist/application/javascript/JavaScriptArtifactGraphStructure.js +92 -10
  97. package/dist/application/javascript/JavaScriptArtifactPathResolution.js +293 -238
  98. package/dist/application/javascript/JavaScriptArtifactReconstruction.js +120 -28
  99. package/dist/application/javascript/JavaScriptArtifactReconstructionInput.js +4 -0
  100. package/dist/application/javascript/JavaScriptJsonModules.js +2 -2
  101. package/dist/application/javascript/JavaScriptModuleRelationships.js +10 -20
  102. package/dist/application/javascript/JavaScriptRecoveryService.js +3 -0
  103. package/dist/application/javascript/JavaScriptRuntimeReconciliationService.js +11 -27
  104. package/dist/application/javascript/JavaScriptSemanticGraphAsyncProjection.js +11 -5
  105. package/dist/application/javascript/JavaScriptSemanticGraphBuilder.js +206 -66
  106. package/dist/application/javascript/JavaScriptSemanticGraphChildProcessProjection.js +1 -1
  107. package/dist/application/javascript/JavaScriptSemanticGraphConstruction.js +18 -23
  108. package/dist/application/javascript/JavaScriptSemanticGraphDataProjection.js +5 -2
  109. package/dist/application/javascript/JavaScriptSemanticGraphEvidence.js +1 -1
  110. package/dist/application/javascript/JavaScriptSemanticGraphFingerprintProjection.js +2 -2
  111. package/dist/application/javascript/JavaScriptSemanticGraphFlowProjection.js +7 -5
  112. package/dist/application/javascript/JavaScriptSemanticGraphObjectProjection.js +6 -4
  113. package/dist/application/javascript/JavaScriptSemanticGraphProjection.js +4 -4
  114. package/dist/application/javascript/JavaScriptSemanticGraphResourceProjection.js +1 -1
  115. package/dist/application/javascript/JavaScriptSemanticGraphValueProjection.js +29 -15
  116. package/dist/application/javascript/JavaScriptSemanticTraceService.js +15 -10
  117. package/dist/application/jeb/JebAnalysisPort.js +1 -0
  118. package/dist/application/jeb/JebAnalysisService.js +13 -0
  119. package/dist/application/managed/ManagedApplicationGraphService.js +1 -1
  120. package/dist/application/native/NativeCallRoutes.js +2 -4
  121. package/dist/application/native/NativeUiActionTrace.js +16 -8
  122. package/dist/application/native/NativeValueTrace.js +23 -6
  123. package/dist/application/process/ProcessCli.js +25 -20
  124. package/dist/artifacts/ArtifactPaths.js +129 -8
  125. package/dist/artifacts/ArtifactProvider.js +34 -31
  126. package/dist/artifacts/ArtifactProviderMetadata.js +1 -4
  127. package/dist/artifacts/ArtifactReader.js +23 -0
  128. package/dist/artifacts/ArtifactResourceScope.js +100 -0
  129. package/dist/artifacts/AsarArtifactReader.js +218 -80
  130. package/dist/artifacts/AsarHeader.js +24 -0
  131. package/dist/artifacts/DirectoryArtifactReader.js +168 -65
  132. package/dist/artifacts/MachOSliceArtifactReader.js +116 -39
  133. package/dist/artifacts/NativeDmgArtifactReader.js +179 -87
  134. package/dist/artifacts/NativeDmgOwnership.js +109 -0
  135. package/dist/artifacts/SafeOutputTree.js +245 -70
  136. package/dist/artifacts/SafeOutputTreeCleanup.js +45 -0
  137. package/dist/artifacts/SafeOutputTreeCreationFailure.js +20 -0
  138. package/dist/artifacts/SafeOutputTreeIdentity.js +42 -0
  139. package/dist/artifacts/SafeOutputTreeReadback.js +33 -0
  140. package/dist/artifacts/ZipArtifactReader.js +77 -27
  141. package/dist/artifacts/apple/InterfaceBuilderAnalysis.js +58 -18
  142. package/dist/artifacts/apple/InterfaceBuilderDecodeBudget.js +62 -24
  143. package/dist/artifacts/apple/KeyedArchiveReader.js +76 -49
  144. package/dist/artifacts/apple/MachoLoadCommandReader.js +36 -6
  145. package/dist/artifacts/extraction/ArtifactExtraction.js +134 -92
  146. package/dist/artifacts/inventory/ArtifactGraphConstruction.js +116 -50
  147. package/dist/artifacts/inventory/ArtifactInventory.js +5 -4
  148. package/dist/artifacts/inventory/classify.js +87 -25
  149. package/dist/artifacts/inventory/hashStableRootArtifact.js +70 -0
  150. package/dist/artifacts/inventory/reader.js +13 -5
  151. package/dist/artifacts/inventory/scanCanonical.js +73 -30
  152. package/dist/artifacts/inventory/scanReader.js +43 -20
  153. package/dist/artifacts/javascript/JavaScriptArtifactFiles.js +72 -28
  154. package/dist/artifacts/javascript/JavaScriptSourceAnalysis.js +3 -0
  155. package/dist/browser/BrowserScenarioPartialObservation.js +8 -2
  156. package/dist/browser/BrowserScenarioSecrets.js +52 -37
  157. package/dist/browser/CdpBrowserProvider.js +9 -3
  158. package/dist/browser/CdpCaptureDocuments.js +40 -6
  159. package/dist/browser/CdpCaptureDomSvg.js +210 -0
  160. package/dist/browser/CdpCaptureEventBodyShapes.js +4 -8
  161. package/dist/browser/CdpCaptureEventHandlers.js +26 -9
  162. package/dist/browser/CdpCaptureEvents.js +4 -9
  163. package/dist/browser/CdpCaptureStorageFingerprints.js +3 -3
  164. package/dist/browser/CdpConnection.js +22 -5
  165. package/dist/browser/CdpElectronInspection.js +2 -2
  166. package/dist/browser/CdpElectronProvider.js +4 -3
  167. package/dist/browser/CdpElectronScripts.js +2 -2
  168. package/dist/browser/CdpPageCapture.js +1 -1
  169. package/dist/browser/CdpTargetSession.js +30 -34
  170. package/dist/browser/CdpWebMcpDiscovery.js +48 -23
  171. package/dist/browser/ElectronFileScope.js +99 -9
  172. package/dist/browser/PlaywrightBrowserScenarioProvider.js +63 -7
  173. package/dist/browser/PlaywrightElectronActiveProvider.js +11 -6
  174. package/dist/browser/PlaywrightScenarioArtifacts.js +5 -5
  175. package/dist/browser/PlaywrightScenarioBrowser.js +208 -43
  176. package/dist/browser/PlaywrightScenarioSession.js +130 -65
  177. package/dist/browser/PlaywrightScenarioStorage.js +507 -0
  178. package/dist/browser/PngVisualDiff.js +198 -29
  179. package/dist/browser/WebSourceMapFetcher.js +35 -9
  180. package/dist/browser/assets/LocalWebScriptArtifacts.js +3 -1
  181. package/dist/browser/assets/PublishWebScripts.js +75 -20
  182. package/dist/browser/assets/ScenarioScriptCapture.js +8 -12
  183. package/dist/browser/assets/WebArtifactReads.js +23 -1
  184. package/dist/browser/assets/WebSourceLocationArtifacts.js +1 -0
  185. package/dist/browser/execution/CdpExecutionCapture.js +3 -3
  186. package/dist/browser/execution/CdpPreciseCoverage.js +5 -8
  187. package/dist/browser/history/HarCapture.js +14 -0
  188. package/dist/browser/history/HarCaptureProcess.js +2 -10
  189. package/dist/browser/history/MitmproxyCaptureAdapter.js +3 -1
  190. package/dist/browser/modules/WebModuleArtifacts.js +1 -0
  191. package/dist/cli/adbCommands.js +337 -0
  192. package/dist/cli/analysisViewCommands.js +39 -1
  193. package/dist/cli/apktoolCommands.js +53 -0
  194. package/dist/cli/artifactCommands.js +8 -11
  195. package/dist/cli/binaryDiagnosticsCommands.js +19 -1
  196. package/dist/cli/browserAdvancedCommands.js +65 -36
  197. package/dist/cli/coreAnalysisCommands.js +2 -2
  198. package/dist/cli/coreBinaryCommands.js +12 -13
  199. package/dist/cli/coreNativeCommands.js +1 -14
  200. package/dist/cli/electronCommands.js +14 -10
  201. package/dist/cli/evmCommands.js +13 -4
  202. package/dist/cli/firmwareCommands.js +7 -2
  203. package/dist/cli/javascriptApplicationAnalysis.js +19 -13
  204. package/dist/cli/javascriptRecoveryCommands.js +22 -15
  205. package/dist/cli/jebCommands.js +99 -0
  206. package/dist/cli/jsonOutput.js +12 -4
  207. package/dist/cli/referenceSourceImportStatus.js +7 -0
  208. package/dist/cli/setupCommands.js +15 -3
  209. package/dist/cli/streamedJsonOutput.js +83 -4
  210. package/dist/cli/utilityCommands.js +68 -22
  211. package/dist/cli/webScriptCommands.js +20 -1
  212. package/dist/cli/webSourceLocationCommands.js +21 -9
  213. package/dist/cli.js +11 -2
  214. package/dist/cliBrowserScenarioCommands.js +2 -1
  215. package/dist/cliCommandNames.js +32 -0
  216. package/dist/cliJsonInput.js +47 -34
  217. package/dist/cliObservationOptions.js +7 -0
  218. package/dist/composition/adb.js +3 -0
  219. package/dist/composition/apktool.js +3 -0
  220. package/dist/composition/auxiliaryAnalysisProviders.js +5 -4
  221. package/dist/composition/binaryDiagnostics.js +4 -0
  222. package/dist/composition/browserScenario.js +2 -2
  223. package/dist/composition/directAnalysis.js +14 -7
  224. package/dist/composition/javascriptAnalysisWorkerProcess.js +48 -0
  225. package/dist/composition/jeb.js +6 -0
  226. package/dist/config/environment.js +10 -0
  227. package/dist/config/ghidraLanguageOverride.js +9 -0
  228. package/dist/config/mcpInputSchemaProfile.js +27 -0
  229. package/dist/config/parseConfig.js +28 -1
  230. package/dist/contracts/adb/adbToolContracts.js +353 -0
  231. package/dist/contracts/advertisedInputExamples.js +48 -0
  232. package/dist/contracts/analysisDetail.js +10 -0
  233. package/dist/contracts/analysisViewToolContracts.js +17 -2
  234. package/dist/contracts/apktool/apktoolToolContracts.js +33 -0
  235. package/dist/contracts/artifactComparisonExample.js +5 -5
  236. package/dist/contracts/artifactToolContracts.js +8 -5
  237. package/dist/contracts/browserToolContracts.js +1 -1
  238. package/dist/contracts/compactInputSchema.js +256 -0
  239. package/dist/contracts/errorSchemas.js +3 -1
  240. package/dist/contracts/functionComparisonExample.js +8 -0
  241. package/dist/contracts/functionWorkflowToolContracts.js +1 -1
  242. package/dist/contracts/inputSchemaPresentation.js +104 -13
  243. package/dist/contracts/javascript/electronToolContracts.js +16 -3
  244. package/dist/contracts/javascript/javascriptApplicationWorkflowExamples.js +3 -2
  245. package/dist/contracts/javascript/javascriptExportShapeComparisonExample.js +6 -3
  246. package/dist/contracts/javascript/javascriptRecoveryToolContracts.js +1 -1
  247. package/dist/contracts/javascript/javascriptRuntimeReconciliationExample.js +8 -7
  248. package/dist/contracts/jeb/jebToolContracts.js +64 -0
  249. package/dist/contracts/managed/managedToolContracts.js +3 -2
  250. package/dist/contracts/mobileApplicationGraphExamples.js +5 -5
  251. package/dist/contracts/native/binaryDiagnosticsToolContracts.js +25 -3
  252. package/dist/contracts/native/nativeToolContracts.js +1 -1
  253. package/dist/contracts/officialToolContracts.js +5 -5
  254. package/dist/contracts/sessionLifecycleInputs.js +4 -3
  255. package/dist/contracts/sessionStatusContract.js +3 -2
  256. package/dist/contracts/sessionToolContracts.js +5 -4
  257. package/dist/contracts/sessionToolSchemas.js +9 -4
  258. package/dist/contracts/toolContractExamples.js +6 -0
  259. package/dist/contracts/toolContractTypes.js +3 -0
  260. package/dist/contracts/toolContracts.js +6 -0
  261. package/dist/contracts/toolEffects.js +167 -0
  262. package/dist/contracts/toolOutputSchemaGroups.js +7 -5
  263. package/dist/contracts/toolOutputSchemaPrimitives.js +2 -5
  264. package/dist/contracts/toolSchemaMetadata.js +82 -7
  265. package/dist/domain/adb/adbDeviceAnalysis.js +583 -0
  266. package/dist/domain/analysisErrorBase.js +5 -0
  267. package/dist/domain/analysisErrorCleanup.js +29 -0
  268. package/dist/domain/analysisErrorPresentation.js +18 -4
  269. package/dist/domain/analysisErrorProjection.js +4 -1
  270. package/dist/domain/analysisSnapshot.js +5 -2
  271. package/dist/domain/analysisView/analysisView.js +53 -5
  272. package/dist/domain/analysisView/binaryLayoutView.js +2 -0
  273. package/dist/domain/analysisView/javascriptApplicationView.js +2 -0
  274. package/dist/domain/analysisView/nativeFunctionView.js +155 -0
  275. package/dist/domain/android/androidApplication.js +25 -20
  276. package/dist/domain/android/androidPartialObservation.js +36 -0
  277. package/dist/domain/apktool/apktoolResourceAnalysis.js +77 -0
  278. package/dist/domain/apple/appleApplication.js +40 -23
  279. package/dist/domain/apple/appleBundleAnatomy.js +95 -28
  280. package/dist/domain/apple/dyldPaths.js +9 -1
  281. package/dist/domain/apple/dylibResolution.js +3 -3
  282. package/dist/domain/apple/interfaceBuilderGraph.js +22 -19
  283. package/dist/domain/apple/interfaceBuilderKeyedArchive.js +10 -1
  284. package/dist/domain/artifactComparison.js +39 -11
  285. package/dist/domain/artifactGraph.js +6 -4
  286. package/dist/domain/artifactIdentity.js +37 -9
  287. package/dist/domain/artifactInspection.js +10 -50
  288. package/dist/domain/artifactIntegrityPolicy.js +10 -0
  289. package/dist/domain/artifactInventoryEvidence.js +16 -17
  290. package/dist/domain/artifactPathSyntax.js +1 -1
  291. package/dist/domain/binaryTarget.js +16 -0
  292. package/dist/domain/binaryTargetTypes.js +8 -1
  293. package/dist/domain/browserCompleteness.js +3 -2
  294. package/dist/domain/browserObservationSchemas.js +8 -4
  295. package/dist/domain/browserScenarioCaptureValues.js +2 -2
  296. package/dist/domain/browserScenarioNormalization.js +3 -3
  297. package/dist/domain/browserScenarioValues.js +3 -2
  298. package/dist/domain/callPath.js +8 -10
  299. package/dist/domain/canonicalDigest.js +7 -1
  300. package/dist/domain/canonicalJsonDigestSteps.js +34 -12
  301. package/dist/domain/canonicalOrdering.js +1 -13
  302. package/dist/domain/changedBehavior.js +2 -3
  303. package/dist/domain/compactStringIdentity.js +9 -0
  304. package/dist/domain/comparisonSemantics.js +0 -5
  305. package/dist/domain/digests.js +0 -3
  306. package/dist/domain/evidence.js +12 -6
  307. package/dist/domain/evidenceBundle.js +51 -33
  308. package/dist/domain/evidenceRecordSummary.js +144 -0
  309. package/dist/domain/firmware/firmwareAnalysis.js +4 -3
  310. package/dist/domain/functionComparison.js +2 -1
  311. package/dist/domain/functionComparisonNormalization.js +4 -3
  312. package/dist/domain/functionComparisonResults.js +2 -2
  313. package/dist/domain/functionDossierEvidence.js +2 -1
  314. package/dist/domain/hopperValues.js +11 -15
  315. package/dist/domain/inputIssueProjection.js +16 -1
  316. package/dist/domain/javascript/electronActiveObservation.js +4 -3
  317. package/dist/domain/javascript/electronStaticAnalysisBrowser.js +14 -15
  318. package/dist/domain/javascript/electronStaticAnalysisIpc.js +20 -21
  319. package/dist/domain/javascript/electronStaticAnalysisNative.js +73 -41
  320. package/dist/domain/javascript/electronStaticAnalysisValues.js +24 -4
  321. package/dist/domain/javascript/javascriptAnalysisResourceControls.js +45 -0
  322. package/dist/domain/javascript/javascriptApplicationAnalysis.js +6 -1
  323. package/dist/domain/javascript/javascriptApplicationChangeGraph.js +18 -14
  324. package/dist/domain/javascript/javascriptApplicationEvidenceSchemas.js +4 -0
  325. package/dist/domain/javascript/javascriptApplicationGraph.js +91 -28
  326. package/dist/domain/javascript/javascriptApplicationProjectionResources.js +35 -0
  327. package/dist/domain/javascript/javascriptApplicationVersionComparison.js +4 -4
  328. package/dist/domain/javascript/javascriptApplicationVersionComparisonSchemas.js +37 -22
  329. package/dist/domain/javascript/javascriptApplicationVersionItems.js +72 -45
  330. package/dist/domain/javascript/javascriptApplicationVersionKeys.js +16 -8
  331. package/dist/domain/javascript/javascriptAstFingerprint.js +60 -33
  332. package/dist/domain/javascript/javascriptAstValues.js +54 -0
  333. package/dist/domain/javascript/javascriptElectronMemberWrites.js +50 -0
  334. package/dist/domain/javascript/javascriptExportShapeComparison.js +3 -2
  335. package/dist/domain/javascript/javascriptExportShapeComparisonSchemas.js +31 -23
  336. package/dist/domain/javascript/javascriptExportShapeSelection.js +2 -2
  337. package/dist/domain/javascript/javascriptExportShapeVariants.js +3 -2
  338. package/dist/domain/javascript/javascriptFeatureSeed.js +5 -3
  339. package/dist/domain/javascript/javascriptFeatureTrace.js +7 -6
  340. package/dist/domain/javascript/javascriptFeatureTraceSchemas.js +17 -9
  341. package/dist/domain/javascript/javascriptFeatureTraversal.js +4 -4
  342. package/dist/domain/javascript/javascriptModuleSemanticIr.js +15 -0
  343. package/dist/domain/javascript/javascriptNativeHandoff.js +12 -7
  344. package/dist/domain/javascript/javascriptRpcEndpoints.js +253 -0
  345. package/dist/domain/javascript/javascriptRuntimeLoadState.js +1 -3
  346. package/dist/domain/javascript/javascriptRuntimeObservation.js +8 -5
  347. package/dist/domain/javascript/javascriptRuntimeReconciliation.js +12 -6
  348. package/dist/domain/javascript/javascriptRuntimeReconciliationActive.js +9 -8
  349. package/dist/domain/javascript/javascriptRuntimeReconciliationCaptureParsing.js +212 -0
  350. package/dist/domain/javascript/javascriptRuntimeReconciliationGraph.js +12 -6
  351. package/dist/domain/javascript/javascriptRuntimeReconciliationInputValidation.js +28 -0
  352. package/dist/domain/javascript/javascriptRuntimeReconciliationMatching.js +5 -5
  353. package/dist/domain/javascript/javascriptRuntimeReconciliationParsing.js +12 -223
  354. package/dist/domain/javascript/javascriptRuntimeReconciliationResult.js +2 -2
  355. package/dist/domain/javascript/javascriptRuntimeReconciliationRuntime.js +15 -4
  356. package/dist/domain/javascript/javascriptRuntimeReconciliationSchemas.js +2 -2
  357. package/dist/domain/javascript/javascriptRuntimeStaticCandidates.js +15 -17
  358. package/dist/domain/javascript/javascriptSemanticAnalysis.js +379 -30
  359. package/dist/domain/javascript/javascriptSemanticCallResolution.js +9 -7
  360. package/dist/domain/javascript/javascriptSemanticCallableResults.js +42 -0
  361. package/dist/domain/javascript/javascriptSemanticCalls.js +8 -1
  362. package/dist/domain/javascript/javascriptSemanticChildProcesses.js +2 -2
  363. package/dist/domain/javascript/javascriptSemanticCoverage.js +20 -0
  364. package/dist/domain/javascript/javascriptSemanticDataEffectHelpers.js +7 -9
  365. package/dist/domain/javascript/javascriptSemanticDataEffects.js +4 -11
  366. package/dist/domain/javascript/javascriptSemanticDerivedAnalysis.js +15 -4
  367. package/dist/domain/javascript/javascriptSemanticFileProjection.js +1 -0
  368. package/dist/domain/javascript/javascriptSemanticFingerprints.js +43 -42
  369. package/dist/domain/javascript/javascriptSemanticGraph.js +205 -52
  370. package/dist/domain/javascript/javascriptSemanticGraphSchemas.js +21 -11
  371. package/dist/domain/javascript/javascriptSemanticIr.js +0 -4
  372. package/dist/domain/javascript/javascriptSemanticIterationSources.js +139 -0
  373. package/dist/domain/javascript/javascriptSemanticMemberMutations.js +774 -136
  374. package/dist/domain/javascript/javascriptSemanticMutationInitializers.js +190 -0
  375. package/dist/domain/javascript/javascriptSemanticMutationValues.js +98 -41
  376. package/dist/domain/javascript/javascriptSemanticObjectReferences.js +381 -0
  377. package/dist/domain/javascript/javascriptSemanticObjects.js +9 -7
  378. package/dist/domain/javascript/javascriptSemanticPrimitives.js +7 -2
  379. package/dist/domain/javascript/javascriptSemanticProjection.js +72 -28
  380. package/dist/domain/javascript/javascriptSemanticPromises.js +15 -21
  381. package/dist/domain/javascript/javascriptSemanticPropertyPaths.js +100 -0
  382. package/dist/domain/javascript/javascriptSemanticProvenance.js +3 -3
  383. package/dist/domain/javascript/javascriptSemanticQuery.js +33 -29
  384. package/dist/domain/javascript/javascriptSemanticQueryIdentity.js +4 -5
  385. package/dist/domain/javascript/javascriptSemanticQuerySchemas.js +8 -9
  386. package/dist/domain/javascript/javascriptSemanticRequireOrigin.js +16 -10
  387. package/dist/domain/javascript/javascriptSemanticReturnedReferences.js +219 -0
  388. package/dist/domain/javascript/javascriptSemanticReturns.js +34 -48
  389. package/dist/domain/javascript/javascriptSemanticState.js +22 -2
  390. package/dist/domain/javascript/javascriptSemanticTraversal.js +25 -2
  391. package/dist/domain/javascript/javascriptSemanticValues.js +169 -30
  392. package/dist/domain/javascript/javascriptSourceAnalysis.js +1 -0
  393. package/dist/domain/javascript/javascriptSourceMapPaths.js +11 -1
  394. package/dist/domain/javascript/javascriptSourceParser.js +34 -9
  395. package/dist/domain/javascript/javascriptStaticAnalysis.js +29 -17
  396. package/dist/domain/javascript/javascriptStaticAnalysisBundler.js +13 -12
  397. package/dist/domain/javascript/javascriptStaticAnalysisCalls.js +49 -5
  398. package/dist/domain/javascript/javascriptStaticAnalysisFindings.js +8 -4
  399. package/dist/domain/javascript/javascriptStaticAnalysisHelpers.js +26 -15
  400. package/dist/domain/javascript/javascriptStaticAnalysisState.js +1 -0
  401. package/dist/domain/javascript/sourceToBundleComparison.js +7 -5
  402. package/dist/domain/javascript/sourceToBundleSignals.js +7 -7
  403. package/dist/domain/jeb/jebAnalysis.js +114 -0
  404. package/dist/domain/jsonSerialization.js +109 -55
  405. package/dist/domain/jsonShape.js +69 -31
  406. package/dist/domain/jsonValue.js +3 -0
  407. package/dist/domain/localPath.js +10 -4
  408. package/dist/domain/managed/managedApplicationGraph.js +47 -6
  409. package/dist/domain/managed/managedApplicationGraphCoverage.js +8 -2
  410. package/dist/domain/managed/managedApplicationGraphNodes.js +94 -59
  411. package/dist/domain/managed/managedArtifact.js +1 -0
  412. package/dist/domain/managed/managedInspectionEvidence.js +13 -0
  413. package/dist/domain/managed/managedMemberComparisonMatch.js +6 -7
  414. package/dist/domain/native/nativeAotPe.js +1408 -0
  415. package/dist/domain/native/nativeCallObservation.js +2 -4
  416. package/dist/domain/native/nativeInstruction.js +21 -0
  417. package/dist/domain/native/nativeMetadataRecovery.js +79 -6
  418. package/dist/domain/native/nativeValueFlow.js +5 -11
  419. package/dist/domain/native/objcSwiftMetadata.js +15 -17
  420. package/dist/domain/native/peResources.js +94 -0
  421. package/dist/domain/nativeConvention.js +33 -0
  422. package/dist/domain/process/processCapture.js +102 -11
  423. package/dist/domain/process/processCaptureCoverage.js +8 -5
  424. package/dist/domain/process/processCaptureExample.js +67 -0
  425. package/dist/domain/process/processCaptureValidation.js +83 -3
  426. package/dist/domain/process/processComparison.js +0 -23
  427. package/dist/domain/process/processScenario.js +62 -10
  428. package/dist/domain/process/processTraceEvaluation.js +4 -4
  429. package/dist/domain/process/processTraceSpecification.js +1 -3
  430. package/dist/domain/propertyListKeys.js +3 -1
  431. package/dist/domain/providerCleanupError.js +6 -2
  432. package/dist/domain/reconstructionCoverage.js +2 -1
  433. package/dist/domain/reconstructionUnknowns.js +4 -3
  434. package/dist/domain/reconstructionVerification.js +3 -2
  435. package/dist/domain/referenceSourceGraph.js +32 -23
  436. package/dist/domain/referenceSourceImportParsing.js +40 -48
  437. package/dist/domain/referenceSourcePathIdentity.js +22 -0
  438. package/dist/domain/referenceSourceRequireBindings.js +137 -0
  439. package/dist/domain/residualUnknown.js +3 -2
  440. package/dist/domain/staticRuntimeCorrelation.js +2 -1
  441. package/dist/domain/swiftSymbolClassification.js +6 -1
  442. package/dist/domain/symbolAnalysis.js +17 -2
  443. package/dist/domain/unicodeCodePointOrder.js +6 -0
  444. package/dist/domain/webBundleAnalyzerInspection.js +23 -3
  445. package/dist/domain/webCaptureDiff.js +170 -30
  446. package/dist/domain/webCaptureDiffSchemas.js +2 -8
  447. package/dist/domain/webInventory.js +3 -2
  448. package/dist/domain/webMcpDiscovery.js +4 -3
  449. package/dist/domain/webScriptExport.js +1 -1
  450. package/dist/domain/webScriptExportError.js +10 -4
  451. package/dist/domain/webScriptExportPlan.js +7 -13
  452. package/dist/domain/zipPackageFormat.js +4 -1
  453. package/dist/domain/zodCollectionSteps.js +24 -0
  454. package/dist/dotnet/ManagedArtifactInspector.js +55 -43
  455. package/dist/dotnet/ManagedDecodeBudget.js +80 -0
  456. package/dist/dotnet/ManagedMemberInspector.js +13 -6
  457. package/dist/dotnet/ManagedMemberInspectorCore.js +2 -2
  458. package/dist/dotnet/ManagedMemberInstructionDecoder.js +5 -4
  459. package/dist/dotnet/ManagedMemberRows.js +9 -4
  460. package/dist/dotnet/ManagedMetadataHeaps.js +15 -5
  461. package/dist/dotnet/ManagedMetadataInventoryRows.js +20 -11
  462. package/dist/dotnet/ManagedMetadataLayout.js +10 -4
  463. package/dist/dotnet/ManagedMethodBodyReader.js +8 -3
  464. package/dist/dotnet/ManagedNativeBoundaryHelpers.js +3 -2
  465. package/dist/dotnet/ManagedNativeBoundaryInspector.js +49 -34
  466. package/dist/dotnet/ManagedPeReader.js +41 -25
  467. package/dist/dotnet/ManagedReaderFailure.js +2 -1
  468. package/dist/dotnet/ManagedStaticProvider.js +65 -31
  469. package/dist/dotnet/ManagedStaticProviderMetadata.js +1 -4
  470. package/dist/evaluation/AgentEvaluationReport.js +9 -5
  471. package/dist/evaluation/CodexAgentEval.js +43 -13
  472. package/dist/evm/EvmoleFailures.js +0 -2
  473. package/dist/evm/EvmoleInterfaceProvider.js +67 -2
  474. package/dist/filesystem/OwnedDirectoryHandle.js +29 -0
  475. package/dist/filesystem/OwnedFileHandle.js +36 -0
  476. package/dist/filesystem/RegularFile.js +73 -0
  477. package/dist/filesystem/StableFileHash.js +46 -0
  478. package/dist/filesystem/readFileHandleChunks.js +26 -0
  479. package/dist/firmware/FirmwareCommand.js +25 -3
  480. package/dist/firmware/FirmwareFiles.js +23 -8
  481. package/dist/firmware/FirmwareProvider.js +156 -32
  482. package/dist/firmware/FirmwarePublication.js +24 -3
  483. package/dist/firmware/FirmwareRelease.js +1 -0
  484. package/dist/generatedPackageMetadata.js +2 -2
  485. package/dist/ghidra/GhidraAnalysisProfile.js +55 -4
  486. package/dist/ghidra/GhidraAnalysisSeeds.js +211 -0
  487. package/dist/ghidra/GhidraClient.js +90 -8
  488. package/dist/ghidra/GhidraDiagnostics.js +11 -8
  489. package/dist/ghidra/GhidraFunctionValues.js +26 -2
  490. package/dist/ghidra/GhidraInstallation.js +111 -10
  491. package/dist/ghidra/GhidraInventoryValues.js +23 -1
  492. package/dist/ghidra/GhidraLanguageCatalog.js +99 -0
  493. package/dist/ghidra/GhidraLauncher.js +123 -58
  494. package/dist/ghidra/GhidraLoadImageAttest.js +49 -2
  495. package/dist/ghidra/GhidraMipsProfile.js +79 -0
  496. package/dist/ghidra/GhidraProvider.js +57 -9
  497. package/dist/ghidra/GhidraProviderCapabilities.js +18 -8
  498. package/dist/ghidra/GhidraProviderClient.js +282 -21
  499. package/dist/ghidra/GhidraSessionValues.js +9 -2
  500. package/dist/hopper/HopperAnalysisProfile.js +2 -0
  501. package/dist/hopper/HopperCleanup.js +1 -1
  502. package/dist/hopper/HopperClient.js +15 -6
  503. package/dist/hopper/HopperMachOImage.js +2 -0
  504. package/dist/hopper/HopperProvider.js +13 -2
  505. package/dist/ida/IdaOperationRunner.js +10 -2
  506. package/dist/ida/IdaProvider.js +7 -0
  507. package/dist/ida/IdaSessionClient.js +7 -3
  508. package/dist/ida/IdaWorkspace.js +4 -2
  509. package/dist/inspector/JavaScriptRuntimeScope.js +9 -5
  510. package/dist/inspector/V8InspectorCaptureProjection.js +46 -13
  511. package/dist/inspector/V8InspectorProvider.js +60 -8
  512. package/dist/javascript/analysis/JavaScriptAnalysisTransfer.js +326 -0
  513. package/dist/javascript/analysis/JavaScriptAnalysisWorker.js +520 -0
  514. package/dist/javascript/analysis/JavaScriptAnalysisWorkerProtocol.js +63 -0
  515. package/dist/javascript/analysis/JavaScriptAnalysisWorkerSchemas.js +521 -0
  516. package/dist/javascript/analysis/JavaScriptAnalysisWorkerServer.js +116 -0
  517. package/dist/javascript/recovery/RecoveryFiles.js +18 -7
  518. package/dist/javascript/recovery/WakaruCommand.js +22 -9
  519. package/dist/javascript/recovery/WakaruExecution.js +11 -7
  520. package/dist/javascript/recovery/WakaruProvider.js +139 -16
  521. package/dist/javascript/recovery/WakaruPublication.js +14 -4
  522. package/dist/javascript/recovery/WakaruRelease.js +10 -3
  523. package/dist/javascript/recovery/WakaruReport.js +12 -7
  524. package/dist/javascript/recovery/WakaruVersion.js +24 -0
  525. package/dist/javascript/sourceMaps/SourceMapCommand.js +16 -3
  526. package/dist/javascript/sourceMaps/SourceMapDecoder.js +63 -7
  527. package/dist/javascript/sourceMaps/SourceMapFormat.js +15 -4
  528. package/dist/jeb/JebMcpConnection.js +179 -0
  529. package/dist/jeb/JebMcpEndpoint.js +40 -0
  530. package/dist/jeb/JebProvider.js +299 -0
  531. package/dist/main/shutdown.js +76 -32
  532. package/dist/main/transport.js +1 -1
  533. package/dist/mcpDoctor.js +15 -6
  534. package/dist/native/AppleDispatchCoverage.js +25 -12
  535. package/dist/native/AppleDispatchMetadata.js +14 -7
  536. package/dist/native/AppleMachoFixups.js +71 -15
  537. package/dist/native/AppleMachoSelection.js +23 -3
  538. package/dist/native/AppleObjcDispatchFacets.js +3 -3
  539. package/dist/native/AppleObjcProperties.js +17 -7
  540. package/dist/native/LldbCallTracer.js +241 -75
  541. package/dist/native/NativeMacOSProvider.js +100 -20
  542. package/dist/native/NativeMacOSProviderMetadata.js +1 -2
  543. package/dist/native/NativeMachoInspection.js +11 -7
  544. package/dist/native/NativeUiHelperRuntime.js +6 -1
  545. package/dist/native/NativeUiObservation.js +4 -3
  546. package/dist/native/pe/PeResourceLayout.js +120 -0
  547. package/dist/native/pe/PeResourceParser.js +286 -0
  548. package/dist/native/pe/PeResourcesProvider.js +63 -0
  549. package/dist/process/BoundedFileBytes.js +30 -7
  550. package/dist/process/DarwinProcessRunTokenReader.js +8 -3
  551. package/dist/process/OwnedCommand.js +4 -3
  552. package/dist/process/ProcessOwnership.js +104 -112
  553. package/dist/process/ProcessOwnershipObservation.js +104 -51
  554. package/dist/process/ProcessOwnershipProcessTree.js +4 -4
  555. package/dist/process/ProcessRunTokenObservations.js +48 -0
  556. package/dist/process/ProviderDiagnosticRedaction.js +17 -0
  557. package/dist/process/ProviderProcess.js +4 -3
  558. package/dist/process/capture/FilesystemSnapshot.js +116 -22
  559. package/dist/process/capture/ProcessCaptureLifecycle.js +363 -86
  560. package/dist/process/capture/ProcessCaptureProgress.js +62 -0
  561. package/dist/process/capture/ProcessFilesystemEffects.js +19 -4
  562. package/dist/process/capture/ProcessHarness.js +202 -47
  563. package/dist/process/capture/ProcessNormalization.js +3 -1
  564. package/dist/process/capture/ProcessScenarioRuntimeValidation.js +5 -2
  565. package/dist/process/capture/TerminalRenderer.js +24 -7
  566. package/dist/reference/ReferenceSourceReader.js +22 -5
  567. package/dist/reference/ReferenceSourceReaderEntries.js +114 -51
  568. package/dist/reference/ReferenceSourceReaderErrors.js +12 -0
  569. package/dist/reference/ReferenceSourceReaderFile.js +50 -10
  570. package/dist/reference/ReferenceSourceReaderValidate.js +4 -4
  571. package/dist/server/EvidenceMcpServer.js +36 -1
  572. package/dist/server/admittedToolOperation.js +9 -0
  573. package/dist/server/analysisAdmission.js +8 -0
  574. package/dist/server/contractToolHandler.js +21 -0
  575. package/dist/server/createServer.js +118 -47
  576. package/dist/server/registerAdbTools.js +36 -0
  577. package/dist/server/registerAnalysisViewTool.js +4 -9
  578. package/dist/server/registerAndroidTools.js +3 -12
  579. package/dist/server/registerApktoolTools.js +14 -0
  580. package/dist/server/registerApplicationTools/compareExportShapes.js +6 -7
  581. package/dist/server/registerApplicationTools/compareSourceToBundle.js +4 -5
  582. package/dist/server/registerApplicationTools/compareVersions.js +3 -2
  583. package/dist/server/registerApplicationTools/coverage.js +3 -2
  584. package/dist/server/registerApplicationTools/helpers.js +3 -2
  585. package/dist/server/registerApplicationTools/obligationLedger.js +3 -2
  586. package/dist/server/registerApplicationTools/projectMobileApplicationGraph.js +3 -2
  587. package/dist/server/registerApplicationTools/traceFeature.js +3 -2
  588. package/dist/server/registerApplicationTools/traceSemantics.js +4 -5
  589. package/dist/server/registerArtifactComparisonTool.js +5 -2
  590. package/dist/server/registerArtifactTools.js +2 -2
  591. package/dist/server/registerBinaryDiagnosticsTools.js +16 -4
  592. package/dist/server/registerBrowserScenarioTool.js +10 -7
  593. package/dist/server/registerBrowserTools.js +12 -9
  594. package/dist/server/registerBundleComparisonTool.js +16 -2
  595. package/dist/server/registerCloseLifecycleTool.js +36 -5
  596. package/dist/server/registerElectronTools.js +28 -10
  597. package/dist/server/registerEnhancedTools.js +78 -73
  598. package/dist/server/registerEvidenceTools.js +54 -46
  599. package/dist/server/registerEvmTools.js +4 -9
  600. package/dist/server/registerFirmwareTools.js +3 -11
  601. package/dist/server/registerFunctionComparisonTool.js +5 -2
  602. package/dist/server/registerJavaScriptRecoveryTool.js +4 -9
  603. package/dist/server/registerJavaScriptRuntimeObservationTools.js +9 -6
  604. package/dist/server/registerJebTools.js +16 -0
  605. package/dist/server/registerManagedTools.js +7 -4
  606. package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +4 -6
  607. package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +3 -2
  608. package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +3 -2
  609. package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +3 -2
  610. package/dist/server/registerOfficialTools.js +31 -25
  611. package/dist/server/registerPeResourcesTool.js +9 -0
  612. package/dist/server/registerProcessComparisonTool.js +5 -2
  613. package/dist/server/registerRecordedCrashTools.js +4 -9
  614. package/dist/server/registerSessionRecordTools.js +2 -1
  615. package/dist/server/registerSessionTools.js +58 -21
  616. package/dist/server/registerWebModuleTool.js +4 -9
  617. package/dist/server/registerWebNetworkCaptureTool.js +4 -9
  618. package/dist/server/registerWebRuntimeTools.js +6 -5
  619. package/dist/server/registerWebScriptTool.js +6 -3
  620. package/dist/server/registerWebSourceLocationTool.js +4 -9
  621. package/dist/server/toolResult.js +21 -2
  622. package/dist/windows/WindowsPrivateRuntime.js +12 -5
  623. package/install.sh +7 -4
  624. package/licenses/nativeaot-parser-MIT.txt +28 -0
  625. package/native/windows/build/manifest.json +2 -2
  626. package/native/windows/build/rea-windows-x64.node +0 -0
  627. package/package.json +38 -7
  628. package/scripts/rea.mjs +16 -1
  629. package/skills/reverse-engineer-anything/SKILL.md +52 -51
  630. package/skills/reverse-engineer-anything/references/connection-and-recovery.md +127 -0
  631. package/skills/reverse-engineer-anything/references/evidence-workflows.md +8 -0
  632. package/skills/reverse-engineer-anything/references/javascript-applications.md +92 -13
  633. package/skills/reverse-engineer-anything/references/native-and-artifacts.md +31 -1
  634. package/dist/artifacts/inventory/policy.js +0 -2
  635. package/dist/domain/managed/managedApplicationGraphNodeCoverage.js +0 -6
  636. package/dist/server/registerNativeTools.js +0 -6
@@ -1,11 +1,11 @@
1
- import { readFile } from "node:fs/promises";
2
- import { join } from "node:path";
3
1
  import { z } from "zod";
4
2
  import { PRODUCT_IDENTITY } from "../identity.js";
5
3
  import { isOwnedClientRegistrationCommand } from "./ClientRegistrationIdentity.js";
6
4
  import { readClientRegistrationStatuses } from "./ClientRegistrationStatus.js";
7
- import { effectiveClientServer, parseClientConfiguration, } from "./ClientConfigurationDocument.js";
5
+ import { clientServerForcedEnabled, clientServerListedDisabled, effectiveClientServer, parseClientConfiguration, } from "./ClientConfigurationDocument.js";
8
6
  import { supportedClients } from "./SupportedClients.js";
7
+ import { existingSkillDestinations } from "./SetupSkill.js";
8
+ import { readRegularFileText } from "./RegularFileRead.js";
9
9
  const setupPlanSchema = z.object({
10
10
  status: z.literal("planned"),
11
11
  plannedActions: z.array(z.object({
@@ -20,7 +20,7 @@ const setupPlanSchema = z.object({
20
20
  commands: z.array(z.string()).optional(),
21
21
  })),
22
22
  });
23
- /** Discover owned registrations and an existing REA skill without writes. */
23
+ /** Discover owned registrations and REA skills without writes. */
24
24
  export const existingMaintenanceScope = async (home, entryPoint, environment) => {
25
25
  const registrations = await readClientRegistrationStatuses(home, entryPoint, {
26
26
  environment,
@@ -34,33 +34,32 @@ export const existingMaintenanceScope = async (home, entryPoint, environment) =>
34
34
  const client = supported.find(({ name }) => name === registration.client);
35
35
  if (client === undefined)
36
36
  continue;
37
- const parsed = parseClientConfiguration(await readFile(client.configPath, "utf8"), client.format);
37
+ const parsed = parseClientConfiguration(await readRegularFileText(client.configPath), client.format);
38
38
  const enabled = z
39
39
  .object({
40
40
  enabled: z.boolean().optional(),
41
41
  disabled: z.boolean().optional(),
42
42
  })
43
43
  .parse(effectiveClientServer(parsed, PRODUCT_IDENTITY.mcpServerKey));
44
- if (enabled.enabled !== false && enabled.disabled !== true)
44
+ // Root disable lists override enabled entries and OMP's force-on allowlist.
45
+ if ((enabled.enabled !== false ||
46
+ clientServerForcedEnabled(parsed, PRODUCT_IDENTITY.mcpServerKey)) &&
47
+ enabled.disabled !== true &&
48
+ !clientServerListedDisabled(parsed, PRODUCT_IDENTITY.mcpServerKey))
45
49
  clients.push(client.name);
46
50
  }
47
- let skill = false;
48
- try {
49
- const content = await readFile(join(home, ".agents", "skills", PRODUCT_IDENTITY.skillName, "SKILL.md"), "utf8");
50
- skill =
51
- content.startsWith(`---\nname: ${PRODUCT_IDENTITY.skillName}\n`) ||
52
- content.startsWith(`---\r\nname: ${PRODUCT_IDENTITY.skillName}\r\n`);
53
- }
54
- catch (cause) {
55
- if (!(cause instanceof Error && "code" in cause && cause.code === "ENOENT"))
56
- throw cause;
57
- }
58
- return { clients, skill };
51
+ const skillDestinations = await existingSkillDestinations(home, environment);
52
+ return {
53
+ clients,
54
+ skill: skillDestinations.length > 0,
55
+ skillDestinations,
56
+ };
59
57
  };
60
58
  /** Ask the verified new executable to plan only existing REA integrations. */
61
59
  export const planIntegrationMaintenance = async (home, entryPoint, environment, execute) => {
62
60
  try {
63
61
  const scope = await existingMaintenanceScope(home, entryPoint, environment);
62
+ const skillDestinations = scope.skillDestinations ?? [];
64
63
  if (scope.clients.length === 0 && !scope.skill)
65
64
  return { status: "current", plannedActions: [] };
66
65
  const command = [
@@ -68,6 +67,7 @@ export const planIntegrationMaintenance = async (home, entryPoint, environment,
68
67
  entryPoint,
69
68
  "setup",
70
69
  ...scope.clients.flatMap((client) => ["--client", client]),
70
+ ...skillDestinations.flatMap(({ client }) => ["--skill-client", client]),
71
71
  `--skill=${String(scope.skill)}`,
72
72
  ];
73
73
  const execution = await execute([...command, "--dry-run", "--json"]);
@@ -81,11 +81,11 @@ export const planIntegrationMaintenance = async (home, entryPoint, environment,
81
81
  };
82
82
  if (plan.data.plannedActions.length === 0)
83
83
  return { status: "current", plannedActions: [] };
84
- const allowedIds = new Set([
85
- ...scope.clients.map((client) => `configure_client:${client}`),
86
- ...(scope.skill ? ["install_skill"] : []),
87
- ]);
88
- if (plan.data.plannedActions.some(({ id }) => !allowedIds.has(id)))
84
+ const allowedIds = new Set(scope.clients.map((client) => `configure_client:${client}`));
85
+ const skillTargets = new Set(skillDestinations.map(({ path }) => path));
86
+ if (plan.data.plannedActions.some((action) => action.kind === "install_skill"
87
+ ? !skillTargets.has(action.target)
88
+ : !allowedIds.has(action.id)))
89
89
  return {
90
90
  status: "unavailable",
91
91
  remediation: "The updated setup plan included an integration outside the existing REA maintenance scope.",
@@ -0,0 +1,71 @@
1
+ import { constants } from "node:buffer";
2
+ import { AnalysisResourceConstraintError } from "../domain/analysisErrorCore.js";
3
+ import { safeParseJson } from "../domain/safeJson.js";
4
+ /** Recovery that preserves complete, authenticated Evidence workflow inputs. */
5
+ export const JSON_INPUT_RESOURCE_REMEDIATION = "Provide a smaller valid JSON value. For Evidence workflows, re-analyze a smaller selection of the original target and use its complete Evidence; splitting JSON text or trimming Evidence fields does not produce valid workflow input.";
6
+ /**
7
+ * Strict JSON input keeps rejecting a leading byte-order mark, but names it:
8
+ * the parser's own message quotes the invisible U+FEFF as the bad token.
9
+ */
10
+ export const JSON_BYTE_ORDER_MARK_MESSAGE = "JSON input begins with a UTF-8 byte-order mark (EF BB BF), which strict JSON input does not accept. Save the file as UTF-8 without a byte-order mark.";
11
+ /** Decode JSON bytes without confusing a runtime string limit with malformed input. */
12
+ export const parseUtf8Json = (bytes, operation, path, boundary = "json-input") => {
13
+ const stringLimitFailure = (cause, decodedUnits) => new AnalysisResourceConstraintError(operation, "memory", "JSON input exceeds the runtime's maximum decoded string length", {
14
+ boundary,
15
+ input_path: path,
16
+ input_bytes: bytes.byteLength,
17
+ max_string_code_units: constants.MAX_STRING_LENGTH,
18
+ ...(decodedUnits === undefined
19
+ ? {}
20
+ : { decoded_string_code_units_at_least: decodedUnits }),
21
+ }, {
22
+ ...(cause === undefined ? {} : { cause }),
23
+ remediationAction: JSON_INPUT_RESOURCE_REMEDIATION,
24
+ });
25
+ let text;
26
+ try {
27
+ const decoder = new TextDecoder("utf-8", { fatal: true, ignoreBOM: true });
28
+ if (bytes.byteLength <= constants.MAX_STRING_LENGTH) {
29
+ text = decoder.decode(bytes);
30
+ }
31
+ else {
32
+ // Node 22's UTF-8 fast path bounds encoded bytes before decoding. Decode
33
+ // large inputs in chunks so valid multibyte text is bounded by its actual
34
+ // UTF-16 length. Streaming also preserves characters spanning chunks.
35
+ const parts = [];
36
+ let decodedUnits = 0;
37
+ const append = (part) => {
38
+ decodedUnits += part.length;
39
+ if (decodedUnits > constants.MAX_STRING_LENGTH)
40
+ throw stringLimitFailure(undefined, decodedUnits);
41
+ parts.push(part);
42
+ };
43
+ const chunkBytes = 1024 * 1024;
44
+ for (let offset = 0; offset < bytes.byteLength; offset += chunkBytes)
45
+ append(decoder.decode(bytes.subarray(offset, offset + chunkBytes), {
46
+ stream: true,
47
+ }));
48
+ append(decoder.decode());
49
+ text = parts.join("");
50
+ }
51
+ }
52
+ catch (cause) {
53
+ if (cause instanceof AnalysisResourceConstraintError)
54
+ throw cause;
55
+ const code = typeof cause === "object" && cause !== null && "code" in cause
56
+ ? cause.code
57
+ : undefined;
58
+ if (code === "ERR_STRING_TOO_LONG")
59
+ throw stringLimitFailure(cause);
60
+ if (code !== "ERR_ENCODING_INVALID_ENCODED_DATA")
61
+ throw cause;
62
+ return {
63
+ ok: false,
64
+ error: "JSON input is not valid UTF-8",
65
+ cause,
66
+ };
67
+ }
68
+ if (text.startsWith("\uFEFF"))
69
+ return { ok: false, error: JSON_BYTE_ORDER_MARK_MESSAGE, cause: undefined };
70
+ return safeParseJson(text);
71
+ };
@@ -1,5 +1,4 @@
1
1
  import { createHash } from "node:crypto";
2
- import { readFile } from "node:fs/promises";
3
2
  import { isAbsolute } from "node:path";
4
3
  import { z } from "zod";
5
4
  import { ArtifactReaderFailure } from "../artifacts/ArtifactReader.js";
@@ -7,24 +6,28 @@ import { publishWebScripts } from "../browser/assets/PublishWebScripts.js";
7
6
  import { selectScriptCapture } from "../browser/assets/ScriptCaptureAdapters.js";
8
7
  import { AnalysisAccessDeniedError, AnalysisCancelledError, AnalysisInputError, AnalysisOutputError, } from "../domain/analysisErrorCore.js";
9
8
  import { createEvidence } from "../domain/evidence.js";
9
+ import { analysisErrorWithCleanupFailure } from "../domain/analysisErrorCleanup.js";
10
10
  import { analysisInputErrorFromIssues } from "../domain/inputIssueProjection.js";
11
11
  import { jsonValueSchema } from "../domain/jsonValue.js";
12
12
  import { ProviderAdapterError } from "../domain/providerAdapterError.js";
13
+ import { ProviderCleanupError } from "../domain/providerCleanupError.js";
13
14
  import { err, ok } from "../domain/result.js";
14
15
  import { safeParseJson } from "../domain/safeJson.js";
15
16
  import { exportWebScriptsInputSchema, } from "../domain/webScriptExport.js";
16
17
  import { WebScriptExportError } from "../domain/webScriptExportError.js";
17
18
  import { WEB_SCRIPT_EXPORT_PROVIDER as PROVIDER } from "./InvestigationProviders.js";
19
+ import { readRegularFile, RegularFileCleanupFailure, retryRegularFileCleanup, } from "./RegularFileRead.js";
20
+ import { NonRegularFileReadError, RegularFileChangedError, } from "../filesystem/RegularFile.js";
18
21
  const OPERATION = "export_web_scripts";
19
22
  /** Export one local capture through the shared CLI/MCP application workflow. */
20
- export const exportWebScripts = async (rawInput, options = {}) => {
23
+ export const exportWebScripts = async (rawInput, resources, options = {}) => {
21
24
  const input = exportWebScriptsInputSchema.safeParse(rawInput);
22
25
  return input.success
23
- ? exportWebScriptsValidated(input.data, options)
26
+ ? exportWebScriptsValidated(input.data, resources, options)
24
27
  : err(analysisInputErrorFromIssues(OPERATION, input.error.issues, rawInput));
25
28
  };
26
29
  /** Publish input already parsed by a named adapter contract. */
27
- export const exportWebScriptsValidated = async (input, options = {}) => {
30
+ export const exportWebScriptsValidated = async (input, resources, options = {}) => {
28
31
  if (!isAbsolute(input.capture_path) || !isAbsolute(input.output_directory))
29
32
  return err(new AnalysisInputError(OPERATION, undefined, [
30
33
  {
@@ -35,16 +38,16 @@ export const exportWebScriptsValidated = async (input, options = {}) => {
35
38
  ]));
36
39
  try {
37
40
  options.signal?.throwIfAborted();
38
- const read = await readCapture(input.capture_path, options.signal);
39
- if (!read.ok)
40
- return read;
41
- const bytes = read.value;
42
- const loaded = parseCapture(bytes);
43
- if (!loaded.ok)
44
- return loaded;
41
+ const prepared = await prepareCapture(input.capture_path, resources, options.signal);
42
+ if (!prepared.ok)
43
+ return prepared;
44
+ const { bytes, loaded } = prepared.value;
45
45
  options.signal?.throwIfAborted();
46
46
  const sha256 = createHash("sha256").update(bytes).digest("hex");
47
- const result = await publishWebScripts(input, loaded.value, sha256, options.signal);
47
+ const result = await publishWebScripts(input, loaded, sha256, {
48
+ resources,
49
+ ...(options.signal === undefined ? {} : { signal: options.signal }),
50
+ });
48
51
  return ok(createEvidence({ path: input.capture_path, sha256, format: "file" }, PROVIDER, {
49
52
  predicateType: "rea.web-script-export",
50
53
  operation: OPERATION,
@@ -58,65 +61,132 @@ export const exportWebScriptsValidated = async (input, options = {}) => {
58
61
  authority: "historical-reference",
59
62
  limitations: result.limitations,
60
63
  locations: [{ kind: "artifact-path", path: result.manifest.path }],
61
- evidenceLinks: loaded.value.sourceEvidenceId === null
62
- ? []
63
- : [loaded.value.sourceEvidenceId],
64
+ evidenceLinks: loaded.sourceEvidenceId === null ? [] : [loaded.sourceEvidenceId],
64
65
  }));
65
66
  }
66
67
  catch (cause) {
67
- if (cause instanceof WebScriptExportError)
68
- return err(cause);
69
- if (options.signal?.aborted === true)
70
- return err(new AnalysisCancelledError(OPERATION));
71
- if (cause instanceof ArtifactReaderFailure)
72
- return err(new WebScriptExportError(cause.reason, input.output_directory, cause.message));
73
- if (cause instanceof z.ZodError)
74
- return err(new AnalysisOutputError(OPERATION, cause.message, { cause }));
75
- if (cause instanceof Error &&
76
- "code" in cause &&
77
- typeof cause.code === "string")
78
- return err(new WebScriptExportError("io", `${input.capture_path} → ${input.output_directory}`, cause.message));
79
- return err(new ProviderAdapterError(PROVIDER.id, OPERATION, {
80
- cause,
81
- diagnostics: {
82
- capture_path: input.capture_path,
83
- output_directory: input.output_directory,
84
- error_name: cause instanceof Error ? cause.name : "UnknownError",
85
- error_message: cause instanceof Error
86
- ? cause.message
87
- : typeof cause === "string"
88
- ? cause
89
- : "Unknown script export failure",
90
- },
91
- }));
68
+ return err(mapExportFailure(cause, input, options.signal));
69
+ }
70
+ };
71
+ const prepareCapture = async (path, resources, signal) => {
72
+ const read = await resources.run(() => readCapture(path, resources, signal));
73
+ if (!read.ok)
74
+ return read;
75
+ const cleanup = read.value.cleanup;
76
+ const loaded = parseCapture(read.value.bytes, cleanup === undefined || cleanup.incomplete
77
+ ? undefined
78
+ : { cause: cleanup.cause });
79
+ if (!loaded.ok)
80
+ return err(cleanup?.incomplete === true
81
+ ? incompleteCaptureCleanup(loaded.error, path, cleanup)
82
+ : loaded.error);
83
+ if (cleanup !== undefined) {
84
+ const primary = new WebScriptExportError("io", path, `Capture handle close failed: ${cleanup.reason}`, { cause: cleanup.cause });
85
+ return err(cleanup.incomplete
86
+ ? incompleteCaptureCleanup(primary, path, cleanup)
87
+ : primary);
92
88
  }
89
+ return ok({ bytes: read.value.bytes, loaded: loaded.value });
90
+ };
91
+ const mapExportFailure = (cause, input, signal) => {
92
+ if (cause instanceof WebScriptExportError)
93
+ return cause;
94
+ if (cause instanceof ArtifactReaderFailure && cause.cleanup !== undefined)
95
+ return analysisErrorWithCleanupFailure(new WebScriptExportError(cause.reason, input.output_directory, cause.message, { cause }), new ProviderCleanupError(PROVIDER.id, cause.cleanup.resources, { reason: cause.cleanup.reason }, { cause, operation: OPERATION }), OPERATION);
96
+ if (signal?.aborted === true)
97
+ return new AnalysisCancelledError(OPERATION, { cause });
98
+ if (cause instanceof ArtifactReaderFailure)
99
+ return new WebScriptExportError(cause.reason, input.output_directory, cause.message, { cause });
100
+ if (cause instanceof z.ZodError)
101
+ return new AnalysisOutputError(OPERATION, cause.message, { cause });
102
+ if (cause instanceof Error &&
103
+ "code" in cause &&
104
+ typeof cause.code === "string")
105
+ return new WebScriptExportError("io", `${input.capture_path} → ${input.output_directory}`, cause.message, { cause });
106
+ return new ProviderAdapterError(PROVIDER.id, OPERATION, {
107
+ cause,
108
+ diagnostics: {
109
+ capture_path: input.capture_path,
110
+ output_directory: input.output_directory,
111
+ error_name: cause instanceof Error ? cause.name : "UnknownError",
112
+ error_message: cause instanceof Error
113
+ ? cause.message
114
+ : typeof cause === "string"
115
+ ? cause
116
+ : "Unknown script export failure",
117
+ },
118
+ });
93
119
  };
94
120
  /**
95
121
  * Read the caller-selected capture. A missing, non-file or unreadable
96
122
  * selection is a caller or host-permission failure, not an export failure.
97
123
  */
98
- const readCapture = async (path, signal) => {
124
+ const readCapture = async (path, resources, signal) => {
99
125
  try {
100
- return ok(await readFile(path, { signal }));
126
+ return ok({ bytes: await readRegularFile(path, { signal }) });
101
127
  }
102
128
  catch (cause) {
103
- const code = cause instanceof Error && "code" in cause ? String(cause.code) : "";
104
- if (code === "EACCES" || code === "EPERM")
105
- return err(new AnalysisAccessDeniedError(OPERATION, path, code, { cause }));
106
- if (code === "ENOENT" || code === "ENOTDIR" || code === "EISDIR")
107
- return err(new AnalysisInputError(OPERATION, { cause }, [
108
- {
109
- path: ["capture_path"],
110
- reason: "invalid_value",
111
- message: code === "EISDIR"
129
+ if (cause instanceof RegularFileCleanupFailure) {
130
+ const retry = await retryRegularFileCleanup(cause, resources);
131
+ const cleanup = {
132
+ reason: retry.cleanup?.reason ?? errorMessage(cause.cleanupCause),
133
+ incomplete: retry.cleanup !== undefined,
134
+ cause: cause.cleanupCause,
135
+ };
136
+ if (cause.outcome.kind === "completed")
137
+ return ok({ bytes: cause.outcome.value, cleanup });
138
+ const primary = captureReadFailure(path, cause.outcome.cause, signal, retry.cleanup === undefined ? { cause: cause.cleanupCause } : undefined);
139
+ return err(retry.cleanup === undefined
140
+ ? primary
141
+ : incompleteCaptureCleanup(primary, path, cleanup));
142
+ }
143
+ return err(captureReadFailure(path, cause, signal));
144
+ }
145
+ };
146
+ const captureReadFailure = (path, cause, signal, closeFailure) => {
147
+ const causeWithClose = closeFailure === undefined
148
+ ? cause
149
+ : new AggregateError([cause, closeFailure.cause], "Capture read and file-handle close both failed", { cause });
150
+ if (signal?.aborted === true)
151
+ return new AnalysisCancelledError(OPERATION, { cause: causeWithClose });
152
+ const code = cause instanceof Error && "code" in cause ? String(cause.code) : "";
153
+ if (code === "EACCES" || code === "EPERM")
154
+ return new AnalysisAccessDeniedError(OPERATION, path, code, {
155
+ cause: causeWithClose,
156
+ });
157
+ if (cause instanceof NonRegularFileReadError ||
158
+ cause instanceof RegularFileChangedError ||
159
+ code === "ENOENT" ||
160
+ code === "ENOTDIR" ||
161
+ code === "EISDIR" ||
162
+ code === "ENXIO")
163
+ return new AnalysisInputError(OPERATION, { cause: causeWithClose }, [
164
+ {
165
+ path: ["capture_path"],
166
+ reason: "invalid_value",
167
+ message: cause instanceof NonRegularFileReadError && code !== "EISDIR"
168
+ ? cause.message
169
+ : code === "EISDIR"
112
170
  ? `Selected capture is a directory, not a file: ${path}`
113
171
  : `Selected capture could not be read (${code}): ${path}`,
114
- },
115
- ]));
116
- throw cause;
117
- }
172
+ },
173
+ ]);
174
+ if (code !== "")
175
+ return new WebScriptExportError("io", path, errorMessage(cause), {
176
+ cause: causeWithClose,
177
+ });
178
+ return new ProviderAdapterError(PROVIDER.id, OPERATION, {
179
+ cause: causeWithClose,
180
+ diagnostics: {
181
+ capture_path: path,
182
+ error_name: cause instanceof Error ? cause.name : "UnknownError",
183
+ error_message: cause instanceof Error ? cause.message : String(cause),
184
+ },
185
+ });
118
186
  };
119
- const parseCapture = (bytes) => {
187
+ const incompleteCaptureCleanup = (primary, path, cleanup) => analysisErrorWithCleanupFailure(primary, new ProviderCleanupError(PROVIDER.id, [path], { reason: cleanup.reason }, { cause: cleanup.cause, operation: OPERATION }), OPERATION);
188
+ const errorMessage = (cause) => cause instanceof Error ? cause.message : String(cause);
189
+ const parseCapture = (bytes, closeFailure) => {
120
190
  try {
121
191
  const text = new TextDecoder("utf-8", {
122
192
  fatal: true,
@@ -128,7 +198,10 @@ const parseCapture = (bytes) => {
128
198
  return ok(selectScriptCapture(json.value));
129
199
  }
130
200
  catch (cause) {
131
- return err(new AnalysisInputError(OPERATION, { cause }, [
201
+ const causeWithClose = closeFailure === undefined
202
+ ? cause
203
+ : new AggregateError([cause, closeFailure.cause], "Capture parse and file-handle close both failed", { cause });
204
+ return err(new AnalysisInputError(OPERATION, { cause: causeWithClose }, [
132
205
  {
133
206
  path: ["capture_path"],
134
207
  reason: "invalid_format",
@@ -35,6 +35,9 @@ export class WebSourceLocationService {
35
35
  this.artifacts = artifacts;
36
36
  this.decoder = decoder;
37
37
  }
38
+ close() {
39
+ return this.decoder.close?.() ?? Promise.resolve();
40
+ }
38
41
  /** Shared CLI/MCP workflow preserves raw declarations and every equal-position match. */
39
42
  async trace(rawInput, options) {
40
43
  if (options?.signal?.aborted)
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,13 @@
1
+ import { adbRequestSchema, } from "../../domain/adb/adbDeviceAnalysis.js";
2
+ import { executeProviderOperation } from "../ProviderOperationExecution.js";
3
+ /** Shared CLI/MCP admission, execution, and Evidence composition for ADB. */
4
+ export class AdbDeviceAnalysisService {
5
+ provider;
6
+ constructor(provider) {
7
+ this.provider = provider;
8
+ }
9
+ /** Run one caller-selected ADB request and retain device provenance inline. */
10
+ async execute(operation, input, options) {
11
+ return executeProviderOperation(operation, input, options, adbRequestSchema, this.provider, "observed");
12
+ }
13
+ }
@@ -1,6 +1,7 @@
1
1
  import { z } from "zod";
2
2
  import { ANALYSIS_VIEW_PROVIDER } from "../InvestigationProviders.js";
3
3
  import { resolveEvidenceInput } from "../EvidenceInputResolver.js";
4
+ import { AnalysisCapabilityUnavailableError } from "../../domain/analysisErrorCore.js";
4
5
  import { analysisInputErrorFromIssues } from "../../domain/inputIssueProjection.js";
5
6
  import { EvidenceIntegrityError } from "../../domain/evidenceErrors.js";
6
7
  import { createEvidence, parseEvidence, } from "../../domain/evidence.js";
@@ -25,6 +26,12 @@ export const inspectAnalysisViewValidated = (input, lookup) => {
25
26
  operation: parent.operation,
26
27
  normalizedResult: parent.normalized_result,
27
28
  limitations: parent.limitations,
29
+ artifact: parent.subject === null
30
+ ? null
31
+ : {
32
+ path: parent.subject.local_path,
33
+ sha256: parent.subject.digest.sha256,
34
+ },
28
35
  }, input.view);
29
36
  if (!projected.ok)
30
37
  return projected;
@@ -33,6 +40,25 @@ export const inspectAnalysisViewValidated = (input, lookup) => {
33
40
  return err(new EvidenceIntegrityError(`Parent subject SHA-256 ${parent.subject.digest.sha256} differs from analysis artifact SHA-256 ${projected.value.artifact.sha256}.`));
34
41
  return ok(createAnalysisViewEvidence(input, parent, projected.value));
35
42
  };
43
+ /**
44
+ * Retain complete analysis Evidence in the session, then project its summary
45
+ * view from the retained record. Callers page or select the rest through
46
+ * inspect_analysis_view with the view's parent Evidence ID.
47
+ */
48
+ export const summarizeRetainedAnalysis = (evidence, retention) => {
49
+ if (retention.recordEvidence === undefined ||
50
+ retention.evidenceById === undefined)
51
+ return err(new AnalysisCapabilityUnavailableError(ANALYSIS_VIEW_PROVIDER.id, evidence.operation, "summary detail requires a server session that retains Evidence for later views", {
52
+ userMessage: "This server does not retain Evidence. Select detail complete to receive the complete analysis inline.",
53
+ }));
54
+ const recorded = retention.recordEvidence(evidence);
55
+ if (!recorded.ok)
56
+ return recorded;
57
+ return inspectAnalysisViewValidated({
58
+ source: { kind: "retained-evidence", evidence_id: evidence.evidence_id },
59
+ view: { kind: "summary" },
60
+ }, retention.evidenceById);
61
+ };
36
62
  const resolveAnalysisViewSource = (source, lookup) => {
37
63
  if (source.kind === "retained-evidence")
38
64
  return resolveEvidenceInput(source, lookup);
@@ -41,7 +67,10 @@ const resolveAnalysisViewSource = (source, lookup) => {
41
67
  }
42
68
  catch (cause) {
43
69
  if (cause instanceof z.ZodError)
44
- return err(analysisInputErrorFromIssues(INSPECT_ANALYSIS_VIEW_OPERATION, cause.issues, source.evidence, { cause }));
70
+ return err(analysisInputErrorFromIssues(INSPECT_ANALYSIS_VIEW_OPERATION, cause.issues.map((issue) => ({
71
+ ...issue,
72
+ path: ["source", "evidence", ...issue.path],
73
+ })), { source }, { cause }));
45
74
  if (cause instanceof TypeError)
46
75
  return err(new EvidenceIntegrityError(cause.message, cause.message.length > 0 ? { userMessage: cause.message } : undefined));
47
76
  throw cause;
@@ -70,7 +99,16 @@ const createAnalysisViewEvidence = (input, parent, result) => {
70
99
  confidence: "derived",
71
100
  authority: parent.authority,
72
101
  limitations: result.limitations,
73
- locations: [{ kind: "artifact-path", path: result.artifact.path }],
102
+ locations: [
103
+ ...(result.artifact.path.length > 0
104
+ ? [{ kind: "artifact-path", path: result.artifact.path }]
105
+ : []),
106
+ ...(result.kind === "native" &&
107
+ result.procedure_address !== null &&
108
+ result.procedure_address.length > 0
109
+ ? [{ kind: "address", address: result.procedure_address }]
110
+ : []),
111
+ ],
74
112
  evidenceLinks: [parent.evidence_id],
75
113
  });
76
114
  };
@@ -17,7 +17,7 @@ export class AndroidAnalysisService {
17
17
  const request = androidRequestSchema.safeParse({ operation, input });
18
18
  if (!request.success)
19
19
  return err(new AnalysisInputError(operation, { cause: request.error }));
20
- const target = await parseBinaryTarget(request.data.input.path);
20
+ const target = await parseBinaryTarget(request.data.input.path, options?.signal === undefined ? {} : { signal: options.signal });
21
21
  if (!target.ok)
22
22
  return target;
23
23
  const executed = await this.provider.execute(target.value, request.data, options);
@@ -0,0 +1,13 @@
1
+ import { apktoolRequestSchema, } from "../../domain/apktool/apktoolResourceAnalysis.js";
2
+ import { executeProviderOperation } from "../ProviderOperationExecution.js";
3
+ /** Shared CLI/MCP admission, execution, and Evidence composition for Apktool. */
4
+ export class ApktoolResourceAnalysisService {
5
+ provider;
6
+ constructor(provider) {
7
+ this.provider = provider;
8
+ }
9
+ /** Run one caller-selected Apktool request and retain target identity inline. */
10
+ async execute(operation, input, options) {
11
+ return executeProviderOperation(operation, input, options, apktoolRequestSchema, this.provider, "observed");
12
+ }
13
+ }
@@ -1,6 +1,4 @@
1
1
  import { ProviderCleanupError } from "../../domain/providerCleanupError.js";
2
- import { ProviderAdapterError } from "../../domain/providerAdapterError.js";
3
- import { projectAnalysisError } from "../../domain/analysisErrorProjection.js";
4
2
  import { err } from "../../domain/result.js";
5
3
  import { AnalysisError } from "../../domain/analysisErrorBase.js";
6
4
  /** Close one provider client and normalize unexpected adapter rejection. */
@@ -15,25 +13,3 @@ export const closeAnalysisClient = async (client, providerId, options = {}) => {
15
13
  return err(new ProviderCleanupError(providerId, ["provider-client"], { reason: "provider client close rejected unexpectedly" }, { cause }));
16
14
  }
17
15
  };
18
- /** Preserve the original lifecycle failure alongside incomplete cleanup. */
19
- export const analysisErrorWithCleanupFailure = (primary, cleanup, operation = "close_binary") => {
20
- const projected = projectAnalysisError(cleanup);
21
- return new ProviderAdapterError(cleanup instanceof ProviderAdapterError ? cleanup.providerId : "rea", operation, {
22
- cause: primary,
23
- userMessage: projectAnalysisError(primary).message,
24
- ...(primary.capturedOutput === undefined
25
- ? {}
26
- : { capturedOutput: primary.capturedOutput }),
27
- ...(primary.partialObservation === undefined
28
- ? {}
29
- : { partialObservation: primary.partialObservation }),
30
- cleanup: {
31
- reason: projected.message,
32
- resources: cleanup.cleanupResources,
33
- },
34
- diagnostics: {
35
- primary_error: projectAnalysisError(primary),
36
- cleanup_error: projected,
37
- },
38
- });
39
- };
@@ -4,6 +4,7 @@ import {} from "../../domain/analysisErrorBase.js";
4
4
  import { err, ok } from "../../domain/result.js";
5
5
  import { analysisQueryId, createAnalysisSnapshotEntry, createAnalysisSnapshotWorkflowEntry, snapshotBinding, snapshotMatchesProfile, snapshotMatchesTarget, snapshotTarget, parseAnalysisSnapshot, } from "../../domain/analysisSnapshot.js";
6
6
  import { OFFICIAL_TOOL_CONTRACTS } from "../../contracts/officialToolContracts.js";
7
+ import { compareUnicodeCodePoints } from "../../domain/unicodeCodePointOrder.js";
7
8
  const STATEFUL_OPERATIONS = new Set([
8
9
  "health",
9
10
  "current_address",
@@ -87,8 +88,8 @@ export class AnalysisSnapshotCache {
87
88
  try {
88
89
  const snapshotTargetIdentity = snapshotTarget(target);
89
90
  const binding = snapshotBinding(profile);
90
- const entries = [...this.#entries.values()].sort((left, right) => left.query_id.localeCompare(right.query_id));
91
- const workflows = [...this.#workflowEntries.values()].sort((left, right) => left.query_id.localeCompare(right.query_id));
91
+ const entries = [...this.#entries.values()].sort((left, right) => compareUnicodeCodePoints(left.query_id, right.query_id));
92
+ const workflows = [...this.#workflowEntries.values()].sort((left, right) => compareUnicodeCodePoints(left.query_id, right.query_id));
92
93
  // Parsing owns the returned JSON and metadata; pre-cloning the same
93
94
  // payloads here only adds another full materialization.
94
95
  return ok(parseAnalysisSnapshot({
@@ -126,13 +127,13 @@ export class AnalysisSnapshotCache {
126
127
  /** Return canonical entries for persistence. */
127
128
  entries() {
128
129
  return [...this.#entries.values()]
129
- .sort((left, right) => left.query_id.localeCompare(right.query_id))
130
+ .sort((left, right) => compareUnicodeCodePoints(left.query_id, right.query_id))
130
131
  .map((entry) => structuredClone(entry));
131
132
  }
132
133
  /** Return canonical composed-workflow entries for persistence. */
133
134
  workflowEntries() {
134
135
  return [...this.#workflowEntries.values()]
135
- .sort((left, right) => left.query_id.localeCompare(right.query_id))
136
+ .sort((left, right) => compareUnicodeCodePoints(left.query_id, right.query_id))
136
137
  .map((entry) => structuredClone(entry));
137
138
  }
138
139
  /** Record one exact derived workflow result unless the shared cache is full. */