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
@@ -6,9 +6,10 @@ import { CdpBrowserProvider } from "../browser/CdpBrowserProvider.js";
6
6
  import { logCliCommand } from "../cliLogging.js";
7
7
  import { AnalysisInputError, } from "../domain/analysisErrorCore.js";
8
8
  import { browserCaptureComparisonInputSchema } from "../domain/browserCaptureComparison.js";
9
+ import { projectInputIssues } from "../domain/inputIssueProjection.js";
9
10
  import { discoverWebMcpToolsInputSchema } from "../domain/webMcpDiscovery.js";
10
11
  import { captureWebScreenshotInputSchema, compareWebScreenshotsInputSchema, } from "../domain/webScreenshot.js";
11
- import { safeParseJson } from "../domain/safeJson.js";
12
+ import { parseCliJsonInput } from "../cliJsonInput.js";
12
13
  import { CLI_COMMANDS } from "../cliCommandNames.js";
13
14
  /** Register WebMCP, capture-diff, and screenshot CLI equivalents. */
14
15
  export const registerAdvancedBrowserCommands = (cli, logger) => {
@@ -52,42 +53,36 @@ const registerCaptureDiff = (cli, logger) => {
52
53
  cli.command(CLI_COMMANDS.compareWebCaptures, {
53
54
  description: "Compare two normalized passive captures or recorded browser scenarios",
54
55
  args: z.object({
55
- beforeJson: z.string().describe("Earlier normalized web capture JSON"),
56
- afterJson: z.string().describe("Later normalized web capture JSON"),
56
+ beforeJson: z
57
+ .string()
58
+ .describe("Earlier normalized web capture JSON or JSON file path"),
59
+ afterJson: z
60
+ .string()
61
+ .describe("Later normalized web capture JSON or JSON file path"),
57
62
  }),
58
63
  options: z.object({
59
64
  normalizationJson: z
60
65
  .string()
61
66
  .default('{"rules":[]}')
62
- .describe("Recorded literal normalization policy for browser scenarios"),
67
+ .describe("Recorded literal normalization policy JSON or JSON file path for browser scenarios"),
63
68
  }),
64
69
  run: ({ args, options }) => logCliCommand(logger, "compare-web-captures", async () => {
65
- const before = safeParseJson(args.beforeJson);
66
- const after = safeParseJson(args.afterJson);
67
- const normalization = safeParseJson(options.normalizationJson);
68
- if (!before.ok)
69
- return inputError("compare_web_captures", [
70
- invalidJsonIssue("before"),
71
- ]);
72
- if (!after.ok)
73
- return inputError("compare_web_captures", [
74
- invalidJsonIssue("after"),
75
- ]);
76
- if (!normalization.ok)
77
- return inputError("compare_web_captures", [
78
- invalidJsonIssue("normalization"),
79
- ]);
70
+ const inputs = await parseJsonArguments("compare_web_captures", {
71
+ before: args.beforeJson,
72
+ after: args.afterJson,
73
+ normalization: options.normalizationJson,
74
+ });
75
+ if (!inputs.ok)
76
+ return inputs.error;
77
+ const { before, after, normalization } = inputs.value;
80
78
  const scenarioComparison = browserCaptureComparisonInputSchema.safeParse({
81
- before_scenario: before.value,
82
- after_scenario: after.value,
83
- normalization: normalization.value,
79
+ before_scenario: before,
80
+ after_scenario: after,
81
+ normalization,
84
82
  });
85
83
  const parsed = scenarioComparison.success
86
84
  ? scenarioComparison
87
- : browserCaptureComparisonInputSchema.safeParse({
88
- before: before.value,
89
- after: after.value,
90
- });
85
+ : browserCaptureComparisonInputSchema.safeParse({ before, after });
91
86
  if (!parsed.success)
92
87
  return inputError("compare_web_captures");
93
88
  const result = await compareWebCaptureEvidence(new CdpBrowserProvider(), parsed.data);
@@ -123,8 +118,12 @@ const registerScreenshotDiff = (cli, logger) => {
123
118
  cli.command(CLI_COMMANDS.compareWebScreenshots, {
124
119
  description: "Compare two self-verifying PNG artifact JSON values",
125
120
  args: z.object({
126
- beforeJson: z.string().describe("Earlier screenshot artifact JSON"),
127
- afterJson: z.string().describe("Later screenshot artifact JSON"),
121
+ beforeJson: z
122
+ .string()
123
+ .describe("Earlier screenshot artifact JSON or JSON file path"),
124
+ afterJson: z
125
+ .string()
126
+ .describe("Later screenshot artifact JSON or JSON file path"),
128
127
  }),
129
128
  options: z.object({
130
129
  channelThreshold: z
@@ -136,22 +135,52 @@ const registerScreenshotDiff = (cli, logger) => {
136
135
  .describe("Per-channel difference threshold for changed pixels"),
137
136
  }),
138
137
  run: ({ args, options }) => logCliCommand(logger, "compare-web-screenshots", async () => {
139
- const parsed = compareWebScreenshotsInputSchema.safeParse({
140
- before: parseJson(args.beforeJson),
141
- after: parseJson(args.afterJson),
142
- channel_threshold: options.channelThreshold,
138
+ const operation = "compare_web_screenshots";
139
+ const inputs = await parseJsonArguments(operation, {
140
+ before: args.beforeJson,
141
+ after: args.afterJson,
143
142
  });
143
+ if (!inputs.ok)
144
+ return inputs.error;
145
+ const { before, after } = inputs.value;
146
+ const input = {
147
+ before,
148
+ after,
149
+ channel_threshold: options.channelThreshold,
150
+ };
151
+ const parsed = compareWebScreenshotsInputSchema.safeParse(input);
144
152
  if (!parsed.success)
145
- return inputError("compare_web_screenshots");
153
+ return browserCliError(new AnalysisInputError(operation, { cause: parsed.error }, projectInputIssues(parsed.error.issues, input)));
146
154
  const result = await compareWebScreenshotEvidence(new CdpBrowserProvider(), parsed.data);
147
155
  return result.ok ? result.value : browserCliError(result.error);
148
156
  }),
149
157
  });
150
158
  };
151
- const parseJson = (value) => {
152
- const parsed = safeParseJson(value);
153
- return parsed.ok ? parsed.value : undefined;
159
+ /**
160
+ * Parse each named inline JSON argument or local JSON file, like other
161
+ * JSON-input commands. Screenshot artifacts and scenario captures embed PNG
162
+ * bytes that can exceed the host's command-line length limit.
163
+ */
164
+ const parseJsonArguments = async (operation, fields) => {
165
+ const values = {};
166
+ for (const [field, value] of Object.entries(fields)) {
167
+ const parsed = await parseCliJsonInput(value, operation);
168
+ if (!parsed.ok)
169
+ return isFileInputFailure(parsed.error)
170
+ ? parsed
171
+ : {
172
+ ok: false,
173
+ error: inputError(operation, [invalidJsonIssue(field)]),
174
+ };
175
+ values[field] = parsed.value;
176
+ }
177
+ return { ok: true, value: values };
154
178
  };
179
+ /** File read and decode failures name the selected path; inline JSON does not. */
180
+ const isFileInputFailure = (error) => typeof error === "object" &&
181
+ error !== null &&
182
+ !Array.isArray(error) &&
183
+ "input_path" in error;
155
184
  const invalidJsonIssue = (field) => ({
156
185
  path: [field],
157
186
  reason: "invalid_format",
@@ -1,7 +1,7 @@
1
1
  import { registerCoreBinaryCommands } from "./coreBinaryCommands.js";
2
2
  import { registerCoreNativeCommands } from "./coreNativeCommands.js";
3
3
  /** Register core binary and native deep-analysis CLI commands. */
4
- export const registerCoreAnalysisCommands = (cli, logger, runDirectAnalysis, resultOutput) => {
5
- registerCoreBinaryCommands(cli, logger, runDirectAnalysis, resultOutput);
4
+ export const registerCoreAnalysisCommands = (cli, logger, runDirectAnalysis) => {
5
+ registerCoreBinaryCommands(cli, logger, runDirectAnalysis);
6
6
  registerCoreNativeCommands(cli, logger, runDirectAnalysis);
7
7
  };
@@ -7,9 +7,10 @@ import { logCliCommand } from "../cliLogging.js";
7
7
  import { directAnalysisOptions, formatSelectionOption, providerSelectionOption, } from "./options.js";
8
8
  import { runCliJavaScriptApplicationAnalysis } from "./javascriptApplicationAnalysis.js";
9
9
  import { withCommandCancellation } from "./commandCancellation.js";
10
+ import { javascriptApplicationOptions } from "../cliObservationOptions.js";
10
11
  /** Register provider-neutral binary overview and procedure CLI commands. */
11
- export const registerCoreBinaryCommands = (cli, logger, runDirectAnalysis, resultOutput) => {
12
- registerOverviewCommands(cli, logger, runDirectAnalysis, resultOutput);
12
+ export const registerCoreBinaryCommands = (cli, logger, runDirectAnalysis) => {
13
+ registerOverviewCommands(cli, logger, runDirectAnalysis);
13
14
  registerDecompileCommand(cli, logger, runDirectAnalysis);
14
15
  registerFunctionCommand(cli, logger, runDirectAnalysis);
15
16
  registerInstructionsCommand(cli, logger, runDirectAnalysis);
@@ -17,7 +18,7 @@ export const registerCoreBinaryCommands = (cli, logger, runDirectAnalysis, resul
17
18
  registerXrefsCommand(cli, logger, runDirectAnalysis);
18
19
  registerTraceCommand(cli, logger, runDirectAnalysis);
19
20
  };
20
- const registerOverviewCommands = (cli, logger, runDirectAnalysis, resultOutput) => {
21
+ const registerOverviewCommands = (cli, logger, runDirectAnalysis) => {
21
22
  const overviewOptions = z.object({
22
23
  snapshot: z
23
24
  .string()
@@ -32,16 +33,18 @@ const registerOverviewCommands = (cli, logger, runDirectAnalysis, resultOutput)
32
33
  args: z.object({
33
34
  path: z.string().describe("App, program, or analysis database path"),
34
35
  }),
35
- options: overviewOptions,
36
- run: async ({ args, options, format }) => {
37
- const output = resultOutput === undefined
38
- ? undefined
39
- : { output: resultOutput, command: CLI_COMMANDS.analyze, format };
36
+ options: overviewOptions.extend({
37
+ integrityPolicy: javascriptApplicationOptions.shape.integrityPolicy,
38
+ }),
39
+ run: async ({ args, options }) => {
40
40
  // Route JavaScript targets exactly like analyze-javascript-application,
41
41
  // including typed cancellation; cancellation wraps logging so its exit
42
42
  // code is not replaced by the logged failure status.
43
43
  if (await routesToJavaScriptAnalysis(args.path, options))
44
- return withCommandCancellation((signal) => logCliCommand(logger, "analyze", () => runCliJavaScriptApplicationAnalysis({ input_path: resolve(args.path) }, output, signal)));
44
+ return withCommandCancellation((signal) => logCliCommand(logger, "analyze", () => runCliJavaScriptApplicationAnalysis({
45
+ input_path: resolve(args.path),
46
+ integrity_policy: options.integrityPolicy,
47
+ }, signal)));
45
48
  return logCliCommand(logger, "analyze", () => runDirectAnalysis(args.path, "binary_overview", {}, directAnalysisOptions(logger, options.snapshot, options.provider, options["target-format"])));
46
49
  },
47
50
  });
@@ -156,9 +159,6 @@ const registerTraceCommand = (cli, logger, runDirectAnalysis) => {
156
159
  "target-format": formatSelectionOption,
157
160
  provider: providerSelectionOption,
158
161
  }),
159
- alias: {
160
- caseSensitive: "case-sensitive",
161
- },
162
162
  run: ({ args, options }) => logCliCommand(logger, "trace", () => runDirectAnalysis(args.path, "trace_feature", {
163
163
  query: resolveCliAnalysisSelector(args.query, options.query, "query", "trace_feature"),
164
164
  case_sensitive: options.caseSensitive,
@@ -262,7 +262,6 @@ const registerSearchCommand = (cli, logger, runDirectAnalysis) => {
262
262
  "target-format": formatSelectionOption,
263
263
  provider: providerSelectionOption,
264
264
  }),
265
- alias: { caseSensitive: "case-sensitive" },
266
265
  run: ({ args, options }) => logCliCommand(logger, "search", () => runDirectAnalysis(args.path, options.kind === "strings" ? "search_strings" : "search_procedures", {
267
266
  pattern: resolveCliAnalysisSelector(args.pattern, options.pattern, "pattern", options.kind === "strings"
268
267
  ? "search_strings"
@@ -104,13 +104,6 @@ export const registerCoreNativeCommands = (cli, logger, runDirectAnalysis) => {
104
104
  "target-format": formatSelectionOption,
105
105
  provider: providerSelectionOption,
106
106
  }),
107
- alias: {
108
- maxDepth: "max-depth",
109
- maxFunctions: "max-functions",
110
- maxCallSites: "max-call-sites",
111
- maxNodes: "max-nodes",
112
- maxEdges: "max-edges",
113
- },
114
107
  run: ({ args, options }) => logCliCommand(logger, CLI_COMMANDS.traceNativeValues, () => runDirectAnalysis(args.path, "trace_native_values", {
115
108
  procedure: args.procedure,
116
109
  max_depth: options.maxDepth,
@@ -129,7 +122,7 @@ export const registerCoreNativeCommands = (cli, logger, runDirectAnalysis) => {
129
122
  }),
130
123
  options: z.object({
131
124
  type: z.string().optional().describe("Exact database type category path"),
132
- address: z.string().describe("Exact native address").optional(),
125
+ address: z.string().optional().describe("Exact native address"),
133
126
  "target-format": formatSelectionOption,
134
127
  provider: providerSelectionOption,
135
128
  }),
@@ -185,7 +178,6 @@ const registerNativeDispatchMetadataCommand = (cli, logger, runDirectAnalysis) =
185
178
  "target-format": formatSelectionOption,
186
179
  provider: providerSelectionOption,
187
180
  }),
188
- alias: { maxRecords: "max-records" },
189
181
  run: async ({ args, options }) => logCliCommand(logger, "inspect-native-dispatch-metadata", () => runDirectAnalysis(args.path, "inspect_native_dispatch_metadata", { max_records: options.maxRecords }, directAnalysisOptions(logger, options.snapshot, options.provider, options["target-format"]))),
190
182
  });
191
183
  };
@@ -224,11 +216,6 @@ const registerNativeUiActionCommand = (cli, logger, runDirectAnalysis) => {
224
216
  "target-format": formatSelectionOption,
225
217
  provider: providerSelectionOption,
226
218
  }),
227
- alias: {
228
- maxDepth: "max-depth",
229
- maxNodes: "max-nodes",
230
- maxEdges: "max-edges",
231
- },
232
219
  run: async ({ args, options }) => logCliCommand(logger, "trace-native-ui-action", () => runDirectAnalysis(args.path, "trace_native_ui_action", {
233
220
  action: args.action,
234
221
  max_depth: options.maxDepth,
@@ -14,10 +14,10 @@ import { electronPageInspectionOptions, javascriptApplicationOptions, } from "..
14
14
  import { runCliJavaScriptApplicationAnalysis } from "./javascriptApplicationAnalysis.js";
15
15
  import { withCommandCancellation } from "./commandCancellation.js";
16
16
  /** Register CLI equivalents of the Electron MCP tools. */
17
- export const registerElectronCommands = (cli, logger, environment, resultOutput) => {
17
+ export const registerElectronCommands = (cli, logger, environment) => {
18
18
  registerElectronObservationCommands(cli, logger);
19
19
  registerElectronActiveCommand(cli, logger, environment);
20
- registerJavaScriptApplicationCommand(cli, logger, resultOutput);
20
+ registerJavaScriptApplicationCommand(cli, logger);
21
21
  registerJavaScriptRuntimeReconciliationCommand(cli, logger);
22
22
  };
23
23
  const registerElectronActiveCommand = (cli, logger, environment) => {
@@ -107,20 +107,24 @@ const registerElectronPageInspection = (cli, logger) => {
107
107
  }),
108
108
  });
109
109
  };
110
- const registerJavaScriptApplicationCommand = (cli, logger, resultOutput) => {
110
+ const registerJavaScriptApplicationCommand = (cli, logger) => {
111
111
  cli.command(CLI_COMMANDS.analyzeJavaScriptApplication, {
112
112
  description: "Statically reconstruct a local JavaScript/Electron application",
113
113
  args: z.object({
114
114
  path: z.string().describe("ASAR or extracted application path"),
115
115
  }),
116
116
  options: javascriptApplicationOptions,
117
- run: ({ args, options, format }) => withCommandCancellation((signal) => logCliCommand(logger, CLI_COMMANDS.analyzeJavaScriptApplication, () => runCliJavaScriptApplicationAnalysis({ input_path: args.path, format: options.artifactFormat }, resultOutput === undefined
118
- ? undefined
119
- : {
120
- output: resultOutput,
121
- command: CLI_COMMANDS.analyzeJavaScriptApplication,
122
- format,
123
- }, signal))),
117
+ run: ({ args, options }) => withCommandCancellation((signal) => logCliCommand(logger, CLI_COMMANDS.analyzeJavaScriptApplication, () => runCliJavaScriptApplicationAnalysis({
118
+ input_path: args.path,
119
+ format: options.artifactFormat,
120
+ integrity_policy: options.integrityPolicy,
121
+ ...(options.maxHeapMb === undefined
122
+ ? {}
123
+ : { max_heap_mb: options.maxHeapMb }),
124
+ ...(options.analysisTimeoutMs === undefined
125
+ ? {}
126
+ : { analysis_timeout_ms: options.analysisTimeoutMs }),
127
+ }, signal))),
124
128
  });
125
129
  };
126
130
  const electronObservationContext = async () => {
@@ -16,9 +16,18 @@ export const registerEvmCommands = (cli, logger, environment) => {
16
16
  .enum(["raw", "hex"])
17
17
  .describe("Selected carrier representation"),
18
18
  }),
19
- run: ({ args }) => withCommandCancellation((signal) => logCliCommand(logger, CLI_COMMANDS.inspectEvmInterface, async () => {
20
- const result = await service.inspect({ path: resolve(args.path), encoding: args.encoding }, { signal });
21
- return result.ok ? result.value : projectAnalysisError(result.error);
22
- })),
19
+ run: ({ args }) => withCommandCancellation(async (signal) => {
20
+ try {
21
+ return await logCliCommand(logger, CLI_COMMANDS.inspectEvmInterface, async () => {
22
+ const result = await service.inspect({ path: resolve(args.path), encoding: args.encoding }, { signal });
23
+ return result.ok
24
+ ? result.value
25
+ : projectAnalysisError(result.error);
26
+ });
27
+ }
28
+ finally {
29
+ await service.close();
30
+ }
31
+ }),
23
32
  });
24
33
  };
@@ -10,8 +10,13 @@ import { withCommandCancellation } from "./commandCancellation.js";
10
10
  export const registerFirmwareCommands = (cli, logger, environment) => {
11
11
  const service = new FirmwareAnalysisService(createFirmwareAnalysisProvider(environment));
12
12
  const execute = (name, operation, input) => withCommandCancellation((signal) => logCliCommand(logger, name, async () => {
13
- const result = await service.execute(operation, input, { signal });
14
- return result.ok ? result.value : projectAnalysisError(result.error);
13
+ try {
14
+ const result = await service.execute(operation, input, { signal });
15
+ return result.ok ? result.value : projectAnalysisError(result.error);
16
+ }
17
+ finally {
18
+ await service.close();
19
+ }
15
20
  }));
16
21
  const path = z.string().describe("Local firmware path; never executed");
17
22
  cli.command(CLI_COMMANDS.inspectFirmwareRegions, {
@@ -1,26 +1,32 @@
1
1
  import { analyzeJavaScriptApplication } from "../application/javascript/JavaScriptApplicationService.js";
2
+ import { JAVASCRIPT_APPLICATION_PROVIDER } from "../application/InvestigationProviders.js";
2
3
  import { createProgressReporter } from "../application/ProgressReporter.js";
4
+ import { ArtifactReaderFailure } from "../artifacts/ArtifactReader.js";
5
+ import { ArtifactResourceScope } from "../artifacts/ArtifactResourceScope.js";
6
+ import { analysisErrorWithCleanupFailure } from "../domain/analysisErrorCleanup.js";
3
7
  import { projectAnalysisError } from "../domain/analysisErrorProjection.js";
8
+ import { ProviderCleanupError } from "../domain/providerCleanupError.js";
4
9
  /** Execute the shared one-shot CLI boundary for static JavaScript analysis. */
5
- export const runCliJavaScriptApplicationAnalysis = async (input, output, signal) => {
6
- const started = performance.now();
10
+ export const runCliJavaScriptApplicationAnalysis = async (input, signal) => {
7
11
  const progress = createProgressReporter(async (update) => {
8
12
  process.stderr.write(`${JSON.stringify({ rea_progress: update })}\n`);
9
13
  }, { minimumIntervalMs: 0 });
10
- const result = await analyzeJavaScriptApplication(input, {
14
+ const resources = new ArtifactResourceScope();
15
+ const result = await analyzeJavaScriptApplication(input, resources, {
11
16
  progress,
12
17
  ...(signal === undefined ? {} : { signal }),
13
18
  });
14
- const value = result.ok ? result.value : cliError(result.error);
15
- if (output !== undefined &&
16
- (await output.output.write(value, {
17
- command: output.command,
18
- format: output.format,
19
- duration: `${Math.round(performance.now() - started)}ms`,
20
- })))
21
- // Keep failures visible to command logging after the stream has handled stdout.
22
- return result.ok ? undefined : value;
23
- return value;
19
+ try {
20
+ await resources.close();
21
+ }
22
+ catch (cause) {
23
+ const cleanup = ArtifactReaderFailure.cleanupObservation(cause, "JavaScript application resources");
24
+ const failure = new ProviderCleanupError(JAVASCRIPT_APPLICATION_PROVIDER.id, cleanup.resources, { reason: cleanup.reason }, { cause, operation: "analyze_javascript_application" });
25
+ return cliError(result.ok
26
+ ? failure
27
+ : analysisErrorWithCleanupFailure(result.error, failure, "analyze_javascript_application"));
28
+ }
29
+ return result.ok ? result.value : cliError(result.error);
24
30
  };
25
31
  const cliError = (error) => ({
26
32
  error: "JavaScript application analysis failed",
@@ -26,20 +26,27 @@ export const registerJavaScriptRecoveryCommands = (cli, logger, environment) =>
26
26
  .optional()
27
27
  .describe("Upstream syntax recovery level; runtime equivalence remains unknown"),
28
28
  }),
29
- run: ({ args, options }) => withCommandCancellation((signal) => logCliCommand(logger, CLI_COMMANDS.recoverJavaScriptSources, async () => {
30
- const result = await service.recover({
31
- path: args.path,
32
- output_directory: args.outputDirectory,
33
- ...(options.extractionMode === undefined
34
- ? {}
35
- : { extraction_mode: options.extractionMode }),
36
- ...(options.rewriteLevel === undefined
37
- ? {}
38
- : { rewrite_level: options.rewriteLevel }),
39
- }, { signal });
40
- return result.ok
41
- ? result.value
42
- : projectAnalysisError(result.error);
43
- })),
29
+ run: ({ args, options }) => withCommandCancellation(async (signal) => {
30
+ try {
31
+ return await logCliCommand(logger, CLI_COMMANDS.recoverJavaScriptSources, async () => {
32
+ const result = await service.recover({
33
+ path: args.path,
34
+ output_directory: args.outputDirectory,
35
+ ...(options.extractionMode === undefined
36
+ ? {}
37
+ : { extraction_mode: options.extractionMode }),
38
+ ...(options.rewriteLevel === undefined
39
+ ? {}
40
+ : { rewrite_level: options.rewriteLevel }),
41
+ }, { signal });
42
+ return result.ok
43
+ ? result.value
44
+ : projectAnalysisError(result.error);
45
+ });
46
+ }
47
+ finally {
48
+ await service.close();
49
+ }
50
+ }),
44
51
  });
45
52
  };
@@ -0,0 +1,99 @@
1
+ import { z } from "incur";
2
+ import { AnalysisError } from "../domain/analysisErrorBase.js";
3
+ import { JebAnalysisService } from "../application/jeb/JebAnalysisService.js";
4
+ import { createJebAnalysisProvider } from "../composition/jeb.js";
5
+ import { CLI_COMMANDS } from "../cliCommandNames.js";
6
+ import { logCliCommand } from "../cliLogging.js";
7
+ import { projectAnalysisError } from "../domain/analysisErrorProjection.js";
8
+ import { withCommandCancellation } from "./commandCancellation.js";
9
+ /** Expose the same explicit JEB requests through one-shot CLI commands. */
10
+ export const registerJebCommands = (cli, logger, environment, provider = createJebAnalysisProvider(environment)) => {
11
+ const service = new JebAnalysisService(provider);
12
+ const execute = (name, operation, input) => withCommandCancellation((signal) => logCliCommand(logger, name, async () => {
13
+ const result = await service.execute(operation, input, { signal });
14
+ try {
15
+ await provider.close();
16
+ }
17
+ catch (cause) {
18
+ if (cause instanceof AnalysisError)
19
+ return projectAnalysisError(cause);
20
+ throw cause;
21
+ }
22
+ return result.ok ? result.value : projectAnalysisError(result.error);
23
+ }));
24
+ cli.command(CLI_COMMANDS.inspectJebClient, {
25
+ description: "Inspect the running JEB MCP client without opening a target",
26
+ args: z.object({}),
27
+ run: () => execute(CLI_COMMANDS.inspectJebClient, "inspect_jeb_client", {}),
28
+ });
29
+ cli.command(CLI_COMMANDS.openJebProject, {
30
+ description: "Open or create a JEB project from an artifact or .jdb2 database",
31
+ args: z.object({
32
+ path: z
33
+ .string()
34
+ .describe("Artifact or .jdb2 path resolved by the JEB engine host"),
35
+ }),
36
+ run: ({ args }) => execute(CLI_COMMANDS.openJebProject, "open_jeb_project", args),
37
+ });
38
+ cli.command(CLI_COMMANDS.listJebUnits, {
39
+ description: "List JEB project units by path and type with optional filter",
40
+ args: z.object({}),
41
+ options: z.object({
42
+ filter: z
43
+ .string()
44
+ .optional()
45
+ .describe("Wildcard filter matched against unit paths"),
46
+ "parent-unit-path": z
47
+ .string()
48
+ .optional()
49
+ .describe("Restrict results to descendants of this unit path"),
50
+ index: z
51
+ .number()
52
+ .int()
53
+ .nonnegative()
54
+ .default(0)
55
+ .describe("Zero-based index of the first result to return"),
56
+ count: z
57
+ .number()
58
+ .int()
59
+ .min(1)
60
+ .max(100)
61
+ .default(100)
62
+ .describe("Maximum results; the engine caps unit pages at 100"),
63
+ }),
64
+ run: ({ options }) => execute(CLI_COMMANDS.listJebUnits, "list_jeb_units", {
65
+ index: options.index,
66
+ count: options.count,
67
+ ...(options.filter === undefined ? {} : { filter: options.filter }),
68
+ ...(options["parent-unit-path"] === undefined
69
+ ? {}
70
+ : { parent_unit_path: options["parent-unit-path"] }),
71
+ }),
72
+ });
73
+ cli.command(CLI_COMMANDS.decompileJebItem, {
74
+ description: "Decompile one JEB type or method to engine pseudo-code",
75
+ args: z.object({
76
+ "item-address": z
77
+ .string()
78
+ .min(1)
79
+ .describe("Type or method address within the unit"),
80
+ "item-kind": z
81
+ .enum(["type", "method"])
82
+ .describe("Kind of item to decompile"),
83
+ }),
84
+ options: z.object({
85
+ "unit-path": z
86
+ .string()
87
+ .min(1)
88
+ .optional()
89
+ .describe("Target code unit; the engine's first code unit when omitted"),
90
+ }),
91
+ run: ({ args, options }) => execute(CLI_COMMANDS.decompileJebItem, "decompile_jeb_item", {
92
+ item_address: args["item-address"],
93
+ item_kind: args["item-kind"],
94
+ ...(options["unit-path"] === undefined
95
+ ? {}
96
+ : { unit_path: options["unit-path"] }),
97
+ }),
98
+ });
99
+ };
@@ -1,9 +1,16 @@
1
1
  import { bufferedJsonParts, jsonParts } from "../domain/jsonSerialization.js";
2
- /** Write ordinary JSON without constructing a document-sized string. */
2
+ /**
3
+ * Write ordinary JSON without constructing a document-sized string.
4
+ *
5
+ * `json` is indented for a terminal reader. Piped or redirected output, which
6
+ * agents and scripts consume, is compact: indentation adds no information and
7
+ * measured 16-45% more model tokens on real results. The value is identical.
8
+ */
3
9
  export const writeJsonOutput = async (value, destination, format = "json") => {
4
- for (const part of bufferedJsonParts(documentParts(value, format)))
10
+ for (const part of bufferedJsonParts(jsonOutputParts(value, format, isTerminal(destination))))
5
11
  await writePart(destination, part);
6
12
  };
13
+ const isTerminal = (destination) => "isTTY" in destination && destination.isTTY === true;
7
14
  const writePart = (destination, part) => new Promise((resolve, reject) => {
8
15
  const onError = (cause) => reject(cause);
9
16
  destination.once("error", onError);
@@ -25,7 +32,8 @@ const writePart = (destination, part) => new Promise((resolve, reject) => {
25
32
  reject(cause);
26
33
  }
27
34
  });
28
- function* documentParts(value, format) {
35
+ /** The exact formatted document, including its final newline. */
36
+ export function* jsonOutputParts(value, format, pretty = true) {
29
37
  if (format === "jsonl" && Array.isArray(value)) {
30
38
  for (const item of value) {
31
39
  yield* jsonParts(item);
@@ -33,6 +41,6 @@ function* documentParts(value, format) {
33
41
  }
34
42
  return;
35
43
  }
36
- yield* jsonParts(value, format === "json");
44
+ yield* jsonParts(value, pretty && format === "json");
37
45
  yield "\n";
38
46
  }
@@ -9,6 +9,13 @@ const referenceSourceImportFailureSchema = z.strictObject({
9
9
  "execution_failure",
10
10
  ]),
11
11
  message: z.string().min(1),
12
+ cleanup: z
13
+ .strictObject({
14
+ reason: z.string().min(1),
15
+ resources: z.array(z.string().min(1)),
16
+ })
17
+ .optional(),
18
+ partial: z.unknown().optional(),
12
19
  });
13
20
  /** Identify the historical-source import command's failed operation outputs. */
14
21
  export const isReferenceSourceImportCliFailure = (value) => referenceSourceImportFailureSchema.safeParse(value).success ||