rea-agents 5.0.0 → 6.1.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 (507) hide show
  1. package/README.md +168 -655
  2. package/bridge/android/ReaJadxBridge.java +14 -5
  3. package/bridge/ghidra/ReaGhidraBridge.java +173 -47
  4. package/bridge/hopper_bridge.py +310 -128
  5. package/bridge/mitmproxy/capture.py +208 -0
  6. package/bridge/native/rea_lldb_tracer.py +839 -0
  7. package/bridge/process/ProcessRunTokenReader.swift +297 -0
  8. package/bridge/process/ProcessRunTokenReaderMain.swift +35 -0
  9. package/bridge/pwndbg/core_context.py +101 -0
  10. package/bridge/pwndbg/launch.py +39 -0
  11. package/bridge/pwndbg/launch_impl.py +34 -0
  12. package/bridge/pwntools/decoder_runtime.py +59 -0
  13. package/bridge/pwntools/layout.py +39 -0
  14. package/bridge/pwntools/layout_impl.py +309 -0
  15. package/bridge/pwntools/recorded_crash.py +39 -0
  16. package/bridge/pwntools/recorded_crash_impl.py +147 -0
  17. package/dist/android/JadxConfiguration.js +196 -33
  18. package/dist/android/JadxMcpTransport.js +4 -0
  19. package/dist/android/JadxProtocol.js +6 -0
  20. package/dist/android/JadxProvider.js +20 -2
  21. package/dist/android/JadxSession.js +23 -4
  22. package/dist/application/AnalysisContextQueries.js +8 -35
  23. package/dist/application/AnalysisDocument.js +32 -0
  24. package/dist/application/AppBundleExecutable.js +67 -21
  25. package/dist/application/CallPathTracing.js +19 -3
  26. package/dist/application/CapabilityInventory.js +27 -3
  27. package/dist/application/ClientConfigurationDocument.js +871 -6
  28. package/dist/application/ClientRegistrationIdentity.js +26 -5
  29. package/dist/application/ClientRegistrationStatus.js +29 -14
  30. package/dist/application/DirectAnalysis.js +97 -33
  31. package/dist/application/Doctor.js +4 -2
  32. package/dist/application/DoctorScope.js +25 -13
  33. package/dist/application/EnhancedLiteralTracing.js +22 -25
  34. package/dist/application/EnhancedTools.js +13 -11
  35. package/dist/application/EvidenceBundleFiles.js +24 -12
  36. package/dist/application/FunctionAnalysisEvidence.js +2 -3
  37. package/dist/application/InventoryProjectionEvidence.js +4 -3
  38. package/dist/application/InvestigationProviders.js +3 -2
  39. package/dist/application/JsonFiles.js +50 -28
  40. package/dist/application/ProcedureAddressResolution.js +11 -0
  41. package/dist/application/ReconstructionCoverageService.js +7 -4
  42. package/dist/application/ReconstructionObligationCandidates.js +5 -1
  43. package/dist/application/ReconstructionObligationLedgerService.js +4 -3
  44. package/dist/application/Setup.js +13 -1
  45. package/dist/application/SetupClientConfiguration.js +10 -15
  46. package/dist/application/SetupHost.js +5 -2
  47. package/dist/application/SetupPlan.js +5 -3
  48. package/dist/application/SupportedClients.js +34 -1
  49. package/dist/application/Uninstall.js +4 -3
  50. package/dist/application/Update.js +18 -3
  51. package/dist/application/UpdateRuntime.js +46 -25
  52. package/dist/application/WebModuleTraceService.js +4 -2
  53. package/dist/application/WebNetworkCapturePort.js +1 -0
  54. package/dist/application/WebNetworkCaptureService.js +134 -0
  55. package/dist/application/WebRuntimeService.js +5 -3
  56. package/dist/application/WebScriptExportService.js +2 -2
  57. package/dist/application/WebSourceLocationService.js +4 -2
  58. package/dist/application/WindowsCapabilities.js +1 -1
  59. package/dist/application/WorkflowEvidence.js +82 -0
  60. package/dist/application/binary/AnalysisProviderEvaluation.js +21 -5
  61. package/dist/application/binary/AnalysisProviderRegistry.js +2 -0
  62. package/dist/application/binary/AnalysisSnapshotCache.js +52 -12
  63. package/dist/application/binary/BinarySession.js +131 -76
  64. package/dist/application/binary/BinarySessionOpen.js +19 -6
  65. package/dist/application/binary/BinarySessionRecords.js +45 -3
  66. package/dist/application/binary/BinarySessionStatus.js +17 -1
  67. package/dist/application/binary/CompositeProvider.js +13 -0
  68. package/dist/application/binary/LazyAnalysisProvider.js +3 -0
  69. package/dist/application/binaryDiagnostics/BinaryLayoutPort.js +1 -0
  70. package/dist/application/binaryDiagnostics/BinaryLayoutService.js +59 -0
  71. package/dist/application/binaryDiagnostics/RecordedCrashPort.js +1 -0
  72. package/dist/application/binaryDiagnostics/RecordedCrashService.js +62 -0
  73. package/dist/application/evm/EvmInterfacePort.js +1 -0
  74. package/dist/application/evm/EvmInterfaceService.js +64 -0
  75. package/dist/application/investigation/EvidenceLedger.js +21 -7
  76. package/dist/application/investigation/InvestigationRecords.js +8 -0
  77. package/dist/application/javascript/JavaScriptAnalysisControl.js +34 -0
  78. package/dist/application/javascript/JavaScriptApplicationEvidence.js +25 -5
  79. package/dist/application/javascript/JavaScriptApplicationEvidenceGraph.js +19 -2
  80. package/dist/application/javascript/JavaScriptApplicationService.js +34 -14
  81. package/dist/application/javascript/JavaScriptApplicationWorkflowService.js +5 -5
  82. package/dist/application/javascript/JavaScriptArtifactAnalysis.js +47 -27
  83. package/dist/application/javascript/JavaScriptArtifactGraphBuilder.js +39 -7
  84. package/dist/application/javascript/JavaScriptArtifactGraphDocuments.js +26 -2
  85. package/dist/application/javascript/JavaScriptArtifactPathResolution.js +80 -27
  86. package/dist/application/javascript/JavaScriptArtifactReconstruction.js +33 -12
  87. package/dist/application/javascript/JavaScriptModuleRelationships.js +37 -8
  88. package/dist/application/javascript/JavaScriptRecoveryService.js +4 -2
  89. package/dist/application/javascript/JavaScriptRuntimeObservationService.js +3 -1
  90. package/dist/application/javascript/JavaScriptRuntimeReconciliationService.js +3 -3
  91. package/dist/application/javascript/JavaScriptSemanticGraphAsyncProjection.js +7 -7
  92. package/dist/application/javascript/JavaScriptSemanticGraphBuilder.js +149 -72
  93. package/dist/application/javascript/JavaScriptSemanticGraphChildProcessProjection.js +14 -15
  94. package/dist/application/javascript/JavaScriptSemanticGraphConstruction.js +41 -1
  95. package/dist/application/javascript/JavaScriptSemanticGraphDataProjection.js +7 -7
  96. package/dist/application/javascript/JavaScriptSemanticGraphFlowProjection.js +5 -9
  97. package/dist/application/javascript/JavaScriptSemanticGraphObjectProjection.js +3 -3
  98. package/dist/application/javascript/JavaScriptSemanticGraphProjection.js +118 -12
  99. package/dist/application/javascript/JavaScriptSemanticGraphResourceProjection.js +3 -3
  100. package/dist/application/javascript/JavaScriptSemanticGraphValueProjection.js +27 -5
  101. package/dist/application/managed/ManagedApplicationGraphService.js +4 -3
  102. package/dist/application/managed/ManagedMemberComparisonService.js +7 -4
  103. package/dist/application/managed/ManagedNativeVerificationService.js +4 -3
  104. package/dist/application/managed/ManagedReconstructionService.js +4 -3
  105. package/dist/application/{ProcessCli.js → process/ProcessCli.js} +23 -15
  106. package/dist/application/{ProcessEvidence.js → process/ProcessEvidence.js} +8 -7
  107. package/dist/application/workflowInputError.js +18 -0
  108. package/dist/artifacts/ArtifactProvider.js +42 -5
  109. package/dist/artifacts/ArtifactProviderMetadata.js +2 -1
  110. package/dist/artifacts/MachOSliceArtifactReader.js +98 -14
  111. package/dist/artifacts/NativeDmgArtifactReader.js +13 -6
  112. package/dist/artifacts/ZipArtifactReader.js +3 -0
  113. package/dist/artifacts/apple/AppleAssetCatalogAnalysis.js +22 -3
  114. package/dist/artifacts/apple/DylibResolutionReader.js +259 -0
  115. package/dist/artifacts/apple/InterfaceBuilderAnalysis.js +176 -56
  116. package/dist/artifacts/apple/InterfaceBuilderDecodeBudget.js +195 -0
  117. package/dist/artifacts/apple/KeyedArchiveReader.js +36 -22
  118. package/dist/artifacts/apple/MachoLoadCommandReader.js +355 -0
  119. package/dist/artifacts/apple/NibArchive.js +81 -14
  120. package/dist/artifacts/apple/NibViewHierarchy.js +10 -3
  121. package/dist/artifacts/apple/PlistNumberLiterals.js +164 -0
  122. package/dist/{application → artifacts/extraction}/ArtifactExtraction.js +10 -10
  123. package/dist/{application → artifacts/inventory}/ArtifactGraphConstruction.js +16 -11
  124. package/dist/{application → artifacts/inventory}/ArtifactInventory.js +4 -4
  125. package/dist/{application/ArtifactInventory → artifacts/inventory}/classify.js +2 -2
  126. package/dist/{application/ArtifactInventory → artifacts/inventory}/reader.js +5 -5
  127. package/dist/{application/ArtifactInventory → artifacts/inventory}/scanCanonical.js +14 -17
  128. package/dist/{application/ArtifactInventory → artifacts/inventory}/scanReader.js +5 -5
  129. package/dist/artifacts/javascript/JavaScriptArtifactFiles.js +6 -2
  130. package/dist/artifacts/readStableArtifact.js +20 -4
  131. package/dist/browser/CdpCaptureCompleteness.js +2 -0
  132. package/dist/browser/CdpCaptureEventHandlers.js +165 -12
  133. package/dist/browser/CdpCaptureEventTypes.js +5 -1
  134. package/dist/browser/CdpCaptureEvents.js +34 -0
  135. package/dist/browser/CdpConnection.js +30 -11
  136. package/dist/browser/CdpOptionalCommand.js +2 -3
  137. package/dist/browser/CdpPageCapture.js +23 -1
  138. package/dist/browser/PlaywrightElectronActiveActions.js +32 -23
  139. package/dist/browser/PlaywrightElectronActiveProjection.js +141 -0
  140. package/dist/browser/PlaywrightElectronActiveProvider.js +130 -122
  141. package/dist/browser/WebSourceMapFetcher.js +426 -72
  142. package/dist/browser/assets/LocalWebScriptArtifacts.js +2 -2
  143. package/dist/browser/history/CaptureFailures.js +137 -0
  144. package/dist/browser/history/CaptureFormatError.js +10 -0
  145. package/dist/browser/history/CaptureRedaction.js +65 -0
  146. package/dist/browser/history/CaptureRelease.js +17 -0
  147. package/dist/browser/history/HarCapture.js +165 -0
  148. package/dist/browser/history/HarCaptureAdapter.js +20 -0
  149. package/dist/browser/history/HarCaptureProcess.js +57 -0
  150. package/dist/browser/history/HarJson.js +92 -0
  151. package/dist/browser/history/HarSchema.js +72 -0
  152. package/dist/browser/history/HistoricalCaptureDecoder.js +188 -0
  153. package/dist/browser/history/HistoricalCaptureFormatAdapter.js +1 -0
  154. package/dist/browser/history/MitmproxyCaptureAdapter.js +42 -0
  155. package/dist/cli/analysisSelector.js +23 -0
  156. package/dist/cli/applicationCommands.js +2 -3
  157. package/dist/cli/artifactCommands.js +26 -1
  158. package/dist/cli/binaryDiagnosticsCommands.js +39 -0
  159. package/dist/cli/coreAnalysisCommands.js +2 -2
  160. package/dist/cli/coreBinaryCommands.js +78 -20
  161. package/dist/cli/electronCommands.js +21 -13
  162. package/dist/cli/evmCommands.js +24 -0
  163. package/dist/cli/firmwareCommands.js +6 -3
  164. package/dist/cli/javascriptApplicationAnalysis.js +20 -3
  165. package/dist/cli/jsonOutput.js +38 -0
  166. package/dist/cli/nativeCallCommands.js +34 -0
  167. package/dist/cli/processCommands.js +1 -1
  168. package/dist/cli/streamedJsonOutput.js +56 -0
  169. package/dist/cli/utilityCommands.js +2 -0
  170. package/dist/cli/webNetworkCaptureCommands.js +40 -0
  171. package/dist/cli/webRuntimeCommands.js +8 -8
  172. package/dist/cli.js +11 -4
  173. package/dist/cliBrowserScenarioCommands.js +2 -2
  174. package/dist/cliCommandNames.js +6 -1
  175. package/dist/cliJsonInput.js +35 -1
  176. package/dist/cliOutput.js +21 -6
  177. package/dist/composition/binaryDiagnostics.js +8 -0
  178. package/dist/composition/evm.js +4 -0
  179. package/dist/composition/webNetworkCaptures.js +6 -0
  180. package/dist/config/environment.js +4 -0
  181. package/dist/config/ghidraStartupTimeout.js +17 -0
  182. package/dist/config/mcpResponseBudget.js +22 -0
  183. package/dist/config/parseConfig.js +2 -1
  184. package/dist/contracts/artifactToolContracts.js +6 -0
  185. package/dist/contracts/browserCaptureToolInputSchema.js +43 -0
  186. package/dist/contracts/browserToolContracts.js +4 -3
  187. package/dist/contracts/enhancedInputs.js +5 -3
  188. package/dist/contracts/enhancedToolContracts.js +3 -3
  189. package/dist/contracts/errorSchemas.js +8 -1
  190. package/dist/contracts/evm/evmToolContracts.js +20 -0
  191. package/dist/contracts/hopperMemoryContracts.js +2 -5
  192. package/dist/contracts/investigationExamples.js +2 -2
  193. package/dist/contracts/javascript/electronToolContracts.js +1 -1
  194. package/dist/contracts/managed/managedToolContracts.js +8 -6
  195. package/dist/contracts/native/binaryDiagnosticsToolContracts.js +42 -0
  196. package/dist/contracts/native/nativeToolContracts.js +21 -3
  197. package/dist/contracts/officialToolContracts.js +26 -24
  198. package/dist/contracts/process/processCaptureExample.js +2 -0
  199. package/dist/contracts/promptContracts.js +3 -3
  200. package/dist/contracts/sessionLifecycleInputs.js +18 -5
  201. package/dist/contracts/sessionStatusContract.js +8 -2
  202. package/dist/contracts/sessionToolContracts.js +8 -3
  203. package/dist/contracts/sessionToolSchemas.js +8 -4
  204. package/dist/contracts/toolContractExamples.js +1 -2
  205. package/dist/contracts/toolContractHelpers.js +4 -1
  206. package/dist/contracts/toolContracts.js +6 -0
  207. package/dist/contracts/toolEffects.js +30 -1
  208. package/dist/contracts/toolOutputSchemaGroups.js +33 -28
  209. package/dist/contracts/toolOutputSchemaPrimitives.js +19 -1
  210. package/dist/contracts/toolSchemaMetadata.js +69 -10
  211. package/dist/contracts/webNetworkCaptureToolContracts.js +24 -0
  212. package/dist/domain/analysisErrorBase.js +22 -2
  213. package/dist/domain/analysisErrorCore.js +61 -5
  214. package/dist/domain/analysisErrorPresentation.js +95 -12
  215. package/dist/domain/analysisErrorProjection.js +148 -19
  216. package/dist/domain/analysisSnapshot.js +166 -2
  217. package/dist/domain/android/androidAnalysis.js +2 -4
  218. package/dist/domain/android/androidApplication.js +17 -9
  219. package/dist/domain/apple/appleApplication.js +41 -14
  220. package/dist/domain/apple/dyldEnvironment.js +73 -0
  221. package/dist/domain/apple/dyldPaths.js +81 -0
  222. package/dist/domain/apple/dylibResolution.js +478 -0
  223. package/dist/domain/apple/dylibResolutionFindings.js +77 -0
  224. package/dist/domain/apple/interfaceBuilderGraph.js +25 -13
  225. package/dist/domain/apple/interfaceBuilderKeyedArchive.js +13 -3
  226. package/dist/domain/apple/keyedArchive.js +9 -1
  227. package/dist/domain/apple/machoContainer.js +54 -0
  228. package/dist/domain/apple/plistNumbers.js +76 -0
  229. package/dist/domain/artifactIdentity.js +29 -0
  230. package/dist/domain/artifactInventoryEvidence.js +19 -24
  231. package/dist/domain/artifactPathSyntax.js +1 -1
  232. package/dist/domain/bridgeCandidateProjection.js +71 -0
  233. package/dist/domain/browserCompleteness.js +1 -0
  234. package/dist/domain/browserObservation.js +1 -1
  235. package/dist/domain/browserObservationError.js +24 -5
  236. package/dist/domain/browserObservationSchemas.js +13 -0
  237. package/dist/domain/browserScenarioValues.js +5 -2
  238. package/dist/domain/bundleComparison.js +3 -2
  239. package/dist/domain/callPathSchemas.js +1 -1
  240. package/dist/domain/canonicalDigest.js +13 -1
  241. package/dist/domain/canonicalJsonDigestSteps.js +133 -0
  242. package/dist/domain/canonicalOrdering.js +9 -5
  243. package/dist/domain/changedBehavior.js +9 -9
  244. package/dist/domain/comparisonSourceEvidence.js +40 -0
  245. package/dist/domain/comparisonStatus.js +2 -30
  246. package/dist/domain/configurationErrors.js +1 -1
  247. package/dist/domain/conformanceTrustGate.js +0 -16
  248. package/dist/domain/evidence.js +78 -11
  249. package/dist/domain/evidenceBundle.js +42 -1
  250. package/dist/domain/evidenceErrors.js +12 -1
  251. package/dist/domain/evm/evmInterface.js +63 -0
  252. package/dist/domain/explicitSensitiveFailure.js +108 -0
  253. package/dist/domain/explicitSensitiveValues.js +10 -0
  254. package/dist/domain/firmware/firmwareAnalysis.js +10 -4
  255. package/dist/domain/hopperErrors.js +23 -2
  256. package/dist/domain/hopperValues.js +51 -8
  257. package/dist/domain/immutableJson.js +114 -0
  258. package/dist/domain/inputIssueProjection.js +3 -0
  259. package/dist/domain/javascript/electronActiveObservation.js +37 -6
  260. package/dist/domain/javascript/electronStaticAnalysisValues.js +6 -12
  261. package/dist/domain/javascript/htmlArtifactReferences.js +40 -0
  262. package/dist/domain/javascript/javascriptApplicationAnalysis.js +71 -23
  263. package/dist/domain/javascript/javascriptApplicationGraph.js +13 -0
  264. package/dist/domain/javascript/javascriptAstValues.js +20 -0
  265. package/dist/domain/javascript/javascriptExportShapeComparison.js +21 -5
  266. package/dist/domain/javascript/javascriptExportShapeVariants.js +0 -10
  267. package/dist/domain/javascript/javascriptRecovery.js +3 -8
  268. package/dist/domain/javascript/javascriptSemanticAnalysis.js +97 -2
  269. package/dist/domain/javascript/javascriptSemanticCoverage.js +6 -5
  270. package/dist/domain/javascript/javascriptSemanticDataEffectHelpers.js +9 -17
  271. package/dist/domain/javascript/javascriptSemanticDataEffects.js +22 -5
  272. package/dist/domain/javascript/javascriptSemanticGraph.js +34 -5
  273. package/dist/domain/javascript/javascriptSemanticGraphSchemas.js +1 -0
  274. package/dist/domain/javascript/javascriptSemanticPrimitives.js +25 -17
  275. package/dist/domain/javascript/javascriptSemanticQuerySchemas.js +8 -4
  276. package/dist/domain/javascript/javascriptSemanticResourceLimits.js +77 -0
  277. package/dist/domain/javascript/javascriptSemanticValues.js +83 -11
  278. package/dist/domain/javascript/javascriptSourceParser.js +6 -2
  279. package/dist/domain/javascript/javascriptStaticAnalysis.js +22 -17
  280. package/dist/domain/javascript/javascriptStaticAnalysisBundler.js +5 -3
  281. package/dist/domain/javascript/javascriptStaticAnalysisCalls.js +14 -4
  282. package/dist/domain/javascript/javascriptStaticAnalysisFindings.js +66 -7
  283. package/dist/domain/javascript/javascriptStaticAnalysisHelpers.js +28 -16
  284. package/dist/domain/javascript/javascriptStaticAnalysisState.js +3 -2
  285. package/dist/domain/jsonSerialization.js +109 -0
  286. package/dist/domain/jsonValue.js +91 -3
  287. package/dist/domain/localPath.js +8 -0
  288. package/dist/domain/managed/managedApplicationGraph.js +10 -10
  289. package/dist/domain/managed/managedInspectionEvidence.js +16 -0
  290. package/dist/domain/managed/managedMemberComparisonMatch.js +5 -9
  291. package/dist/domain/managed/managedNativeVerification.js +3 -9
  292. package/dist/domain/native/binaryLayout.js +357 -0
  293. package/dist/domain/native/fileOffsetPartialObservation.js +1 -0
  294. package/dist/domain/native/nativeCallObservation.js +186 -0
  295. package/dist/domain/native/nativeCallPartialObservation.js +33 -0
  296. package/dist/domain/native/objcSwiftMetadata.js +0 -39
  297. package/dist/domain/native/recordedCrash.js +266 -0
  298. package/dist/domain/native/recordedCrashNoteCoverage.js +73 -0
  299. package/dist/domain/{processCapture.js → process/processCapture.js} +143 -2
  300. package/dist/domain/{processCaptureExample.js → process/processCaptureExample.js} +5 -0
  301. package/dist/domain/process/processCaptureParsing.js +54 -0
  302. package/dist/domain/{processCaptureValidation.js → process/processCaptureValidation.js} +18 -2
  303. package/dist/domain/{processComparison.js → process/processComparison.js} +39 -5
  304. package/dist/domain/{processObservation.js → process/processObservation.js} +1 -1
  305. package/dist/domain/{processScenario.js → process/processScenario.js} +11 -10
  306. package/dist/domain/{processTraceSpecification.js → process/processTraceSpecification.js} +1 -1
  307. package/dist/domain/propertyListKeys.js +1 -1
  308. package/dist/domain/propertyListXmlText.js +19 -0
  309. package/dist/domain/providerAdapterError.js +1 -1
  310. package/dist/domain/providerOperationHealth.js +54 -0
  311. package/dist/domain/providerSelectionError.js +4 -2
  312. package/dist/domain/reconstructionVerification.js +9 -46
  313. package/dist/domain/reconstructionVerificationSchemas.js +3 -3
  314. package/dist/domain/residualUnknown.js +3 -2
  315. package/dist/domain/staticRuntimeCorrelation.js +9 -46
  316. package/dist/domain/webBundleAnalysis.js +20 -8
  317. package/dist/domain/webBundleAnalyzerInspection.js +13 -8
  318. package/dist/domain/webBundleAnalyzerResult.js +41 -2
  319. package/dist/domain/webCaptureDiff.js +1 -0
  320. package/dist/domain/webNetworkCapture.js +118 -0
  321. package/dist/domain/webNetworkCaptureCoordinates.js +58 -0
  322. package/dist/domain/webRuntime.js +19 -5
  323. package/dist/domain/webSourceLocation.js +1 -0
  324. package/dist/dotnet/ManagedExceptionRegionValidation.js +41 -0
  325. package/dist/dotnet/ManagedMemberInspector.js +4 -2
  326. package/dist/dotnet/ManagedMemberInspectorCore.js +38 -32
  327. package/dist/dotnet/ManagedMemberInstructionDecoder.js +23 -7
  328. package/dist/dotnet/ManagedMemberRows.js +14 -3
  329. package/dist/dotnet/ManagedMetadataHeaps.js +20 -2
  330. package/dist/dotnet/ManagedMetadataInventory.js +38 -28
  331. package/dist/dotnet/ManagedMetadataInventoryRows.js +24 -10
  332. package/dist/dotnet/ManagedMethodBodyReader.js +7 -1
  333. package/dist/dotnet/ManagedNativeBoundaryHelpers.js +15 -3
  334. package/dist/dotnet/ManagedNativeBoundaryInspector.js +3 -1
  335. package/dist/dotnet/ManagedPeReader.js +11 -0
  336. package/dist/evm/EvmBytecodeCarrier.js +21 -0
  337. package/dist/evm/EvmWorkerLimits.js +40 -0
  338. package/dist/evm/EvmoleFailures.js +126 -0
  339. package/dist/evm/EvmoleInterfaceAdapter.js +53 -0
  340. package/dist/evm/EvmoleInterfaceProvider.js +273 -0
  341. package/dist/evm/EvmoleInterfaceWorker.js +87 -0
  342. package/dist/evm/EvmoleRelease.js +16 -0
  343. package/dist/firmware/FirmwareCommand.js +1 -0
  344. package/dist/firmware/FirmwareFiles.js +1 -1
  345. package/dist/generatedPackageMetadata.js +2 -2
  346. package/dist/ghidra/GhidraAnalysisProfile.js +5 -0
  347. package/dist/ghidra/GhidraClient.js +47 -14
  348. package/dist/ghidra/GhidraDiagnostics.js +7 -7
  349. package/dist/ghidra/GhidraFunctionValues.js +10 -7
  350. package/dist/ghidra/GhidraInstallation.js +18 -21
  351. package/dist/ghidra/GhidraInventoryValues.js +14 -4
  352. package/dist/ghidra/GhidraJavaLaunch.js +62 -0
  353. package/dist/ghidra/GhidraLauncher.js +34 -16
  354. package/dist/ghidra/GhidraProvider.js +2 -2
  355. package/dist/ghidra/GhidraProviderCapabilities.js +15 -3
  356. package/dist/ghidra/GhidraProviderClient.js +23 -12
  357. package/dist/ghidra/GhidraSessionError.js +11 -7
  358. package/dist/ghidra/GhidraTargetSnapshot.js +47 -12
  359. package/dist/ghidra/GhidraTransport.js +20 -0
  360. package/dist/hopper/BridgeLauncher.js +33 -11
  361. package/dist/hopper/HopperAnalysisProfile.js +62 -4
  362. package/dist/hopper/HopperCleanup.js +15 -3
  363. package/dist/hopper/HopperClient.js +222 -14
  364. package/dist/hopper/HopperFileOffset.js +237 -0
  365. package/dist/hopper/HopperMachOImage.js +196 -0
  366. package/dist/hopper/HopperOperationStage.js +6 -0
  367. package/dist/hopper/HopperProvider.js +63 -9
  368. package/dist/hopper/HopperProviderCapabilities.js +19 -1
  369. package/dist/hopper/HopperRegexSearch.js +137 -0
  370. package/dist/hopper/HopperRegexWorker.js +27 -0
  371. package/dist/hopper/HopperRequestQueue.js +68 -19
  372. package/dist/hopper/HopperTargetLease.js +3 -2
  373. package/dist/hopper/LinuxPrivateDisplayProbe.js +4 -2
  374. package/dist/inspector/JavaScriptRuntimeScope.js +9 -1
  375. package/dist/inspector/V8InspectorCaptureProjection.js +8 -3
  376. package/dist/inspector/V8InspectorProvider.js +47 -11
  377. package/dist/javascript/recovery/WakaruCommand.js +3 -0
  378. package/dist/javascript/sourceMaps/DecodedSourceMap.js +47 -0
  379. package/dist/javascript/sourceMaps/SourceMapCommand.js +17 -0
  380. package/dist/javascript/sourceMaps/SourceMapFormat.js +79 -31
  381. package/dist/javascript/sourceMaps/TraceSourceMap.js +14 -28
  382. package/dist/mcpDoctor.js +62 -2
  383. package/dist/native/AppleDispatchCoverage.js +47 -6
  384. package/dist/native/AppleDispatchDecodeFacts.js +6 -0
  385. package/dist/native/AppleDispatchMetadata.js +6 -3
  386. package/dist/native/AppleMachoFixups.js +48 -24
  387. package/dist/native/AppleMachoSelection.js +32 -16
  388. package/dist/native/AppleObjcCategories.js +6 -2
  389. package/dist/native/AppleObjcDispatchFacets.js +5 -2
  390. package/dist/native/AppleObjcProperties.js +2 -1
  391. package/dist/native/AppleSwiftDispatchFacets.js +27 -21
  392. package/dist/native/AppleSwiftVtables.js +21 -15
  393. package/dist/native/CommandRunner.js +82 -84
  394. package/dist/native/LldbCallTracer.js +541 -0
  395. package/dist/native/LldbRetainedObservations.js +178 -0
  396. package/dist/native/NativeCallObservation.js +194 -0
  397. package/dist/native/NativeMacOSProvider.js +117 -20
  398. package/dist/native/NativeMacOSProviderMetadata.js +8 -3
  399. package/dist/native/SignatureTargetBinding.js +155 -0
  400. package/dist/native/parsers/lipo.js +71 -1
  401. package/dist/native/pwndbg/PwndbgCoreContext.js +180 -0
  402. package/dist/native/pwntools/PwntoolsDecoder.js +203 -0
  403. package/dist/native/pwntools/PwntoolsFailures.js +180 -0
  404. package/dist/native/pwntools/PwntoolsLayoutProvider.js +36 -0
  405. package/dist/native/pwntools/PwntoolsRecordedCrashProvider.js +75 -0
  406. package/dist/native/pwntools/PwntoolsRelease.js +19 -0
  407. package/dist/native/pwntools/PwntoolsResourceLimits.js +76 -0
  408. package/dist/native/pwntools/RecordedCrashSourceBindings.js +46 -0
  409. package/dist/native/pwntools/RecordedCrashStructureBindings.js +103 -0
  410. package/dist/process/DarwinProcessRunTokenReader.js +293 -0
  411. package/dist/process/ExecFileOutput.js +20 -0
  412. package/dist/process/OwnedCommand.js +118 -0
  413. package/dist/process/ProcessOwnership.js +431 -51
  414. package/dist/process/ProcessOwnershipObservation.js +209 -27
  415. package/dist/process/ProviderProcess.js +68 -10
  416. package/dist/{application → process/capture}/ProcessCaptureCapability.js +15 -0
  417. package/dist/{application → process/capture}/ProcessCaptureError.js +18 -2
  418. package/dist/process/capture/ProcessCaptureLifecycle.js +681 -0
  419. package/dist/{application → process/capture}/ProcessHarness.js +195 -29
  420. package/dist/{application → process/capture}/ProcessSampling.js +2 -2
  421. package/dist/server/EvidenceMcpServer.js +146 -0
  422. package/dist/server/createServer.js +37 -8
  423. package/dist/server/promptCompletion.js +10 -3
  424. package/dist/server/registerAndroidTools.js +2 -4
  425. package/dist/server/registerApplicationTools/helpers.js +2 -4
  426. package/dist/server/registerArtifactComparisonTool.js +11 -7
  427. package/dist/server/registerBinaryDiagnosticsTools.js +15 -0
  428. package/dist/server/registerBrowserScenarioTool.js +2 -4
  429. package/dist/server/registerBrowserTools.js +2 -4
  430. package/dist/server/registerBundleComparisonTool.js +2 -3
  431. package/dist/server/registerCloseLifecycleTool.js +8 -18
  432. package/dist/server/registerElectronTools.js +2 -4
  433. package/dist/server/registerEnhancedTools.js +18 -59
  434. package/dist/server/registerEvidenceTools.js +3 -5
  435. package/dist/server/registerEvmTools.js +15 -0
  436. package/dist/server/registerFirmwareTools.js +2 -4
  437. package/dist/server/registerFunctionComparisonTool.js +10 -6
  438. package/dist/server/registerInvestigationTools.js +7 -7
  439. package/dist/server/registerJavaScriptRecoveryTool.js +2 -4
  440. package/dist/server/registerJavaScriptRuntimeObservationTools.js +2 -4
  441. package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +2 -4
  442. package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +2 -4
  443. package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +2 -4
  444. package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +2 -4
  445. package/dist/server/registerOfficialTools.js +2 -4
  446. package/dist/server/registerProcessComparisonTool.js +72 -46
  447. package/dist/server/registerRecordedCrashTools.js +15 -0
  448. package/dist/server/registerSessionRecordTools.js +5 -6
  449. package/dist/server/registerSessionStatusTool.js +17 -3
  450. package/dist/server/registerSessionTools.js +13 -5
  451. package/dist/server/registerWebModuleTool.js +2 -4
  452. package/dist/server/registerWebNetworkCaptureTool.js +26 -0
  453. package/dist/server/registerWebRuntimeTools.js +3 -7
  454. package/dist/server/registerWebScriptTool.js +2 -4
  455. package/dist/server/registerWebSourceLocationTool.js +2 -4
  456. package/dist/server/runDerivedOperation.js +15 -3
  457. package/dist/server/sessionAvailabilityPolicy.js +3 -1
  458. package/dist/server/sessionToolPolicies.js +1 -1
  459. package/dist/server/toolRegistrationOptions.js +2 -2
  460. package/dist/server/toolResult.js +63 -11
  461. package/dist/server/toolResultEncoding.js +33 -0
  462. package/install.sh +1 -1
  463. package/native/windows/build/manifest.json +2 -2
  464. package/native/windows/build/rea-windows-x64.node +0 -0
  465. package/package.json +42 -9
  466. package/scripts/electron-active-hook-boundaries.cjs +18 -20
  467. package/scripts/electron-active-hook.cjs +241 -37
  468. package/scripts/rea.mjs +11 -3
  469. package/skills/reverse-engineer-anything/SKILL.md +32 -4
  470. package/skills/reverse-engineer-anything/references/javascript-applications.md +8 -1
  471. package/skills/reverse-engineer-anything/references/native-and-artifacts.md +29 -0
  472. package/third_party/README.md +60 -0
  473. package/third_party/evmole/LICENSE +21 -0
  474. package/third_party/evmole/README.md +22 -0
  475. package/third_party/pwndbg/LICENSE.md +21 -0
  476. package/third_party/pwndbg/README.md +23 -0
  477. package/third_party/pwntools/README.md +40 -0
  478. package/dist/application/AuthorizedArtifactInventory.js +0 -7
  479. package/dist/application/ProcessCaptureLifecycle.js +0 -299
  480. package/dist/application/StoreFileLock.js +0 -124
  481. package/dist/contracts/processCaptureExample.js +0 -2
  482. package/dist/domain/bytecodeProvider.js +0 -178
  483. package/dist/domain/customProtocolCapture.js +0 -137
  484. package/dist/domain/eventProcessTree.js +0 -225
  485. package/dist/domain/mobileApplicationInvestigation.js +0 -159
  486. package/dist/domain/packageAnalysis.js +0 -123
  487. package/dist/domain/peInspection.js +0 -197
  488. package/dist/domain/processCaptureParsing.js +0 -21
  489. package/dist/domain/protocolCapture.js +0 -217
  490. package/dist/domain/runtimeIdentification.js +0 -212
  491. package/dist/generatedMcpToolCatalog.js +0 -37
  492. package/dist/ghidra/GhidraDefaults.js +0 -2
  493. /package/dist/application/{ArtifactExtractionDestination.js → artifacts/ArtifactExtractionDestination.js} +0 -0
  494. /package/dist/{application/ArtifactInventory → artifacts/inventory}/policy.js +0 -0
  495. /package/dist/{application/ArtifactInventory → artifacts/inventory}/types.js +0 -0
  496. /package/dist/domain/{processEvidenceProvider.js → process/processEvidenceProvider.js} +0 -0
  497. /package/dist/domain/{processTraceComparison.js → process/processTraceComparison.js} +0 -0
  498. /package/dist/domain/{processTraceDimensionProjection.js → process/processTraceDimensionProjection.js} +0 -0
  499. /package/dist/domain/{processTraceEvaluation.js → process/processTraceEvaluation.js} +0 -0
  500. /package/dist/{application → process/capture}/FilesystemSnapshot.js +0 -0
  501. /package/dist/{application → process/capture}/ProcessCaptureEnvironment.js +0 -0
  502. /package/dist/{application → process/capture}/ProcessCaptureJournal.js +0 -0
  503. /package/dist/{application → process/capture}/ProcessFilesystemEffects.js +0 -0
  504. /package/dist/{application → process/capture}/ProcessNormalization.js +0 -0
  505. /package/dist/{application → process/capture}/ProcessScenarioRuntimeValidation.js +0 -0
  506. /package/dist/{application → process/capture}/ProcessTimer.js +0 -0
  507. /package/dist/{application → process/capture}/TerminalRenderer.js +0 -0
@@ -0,0 +1,293 @@
1
+ import { mkdtemp, rm } from "node:fs/promises";
2
+ import { rmSync } from "node:fs";
3
+ import { tmpdir } from "node:os";
4
+ import { join } from "node:path";
5
+ import { fileURLToPath } from "node:url";
6
+ import { z } from "zod";
7
+ import { safeParseJson } from "../domain/safeJson.js";
8
+ import { execFileOutput } from "./ExecFileOutput.js";
9
+ const responseSchema = z.strictObject({
10
+ results: z.array(z.discriminatedUnion("state", [
11
+ z.strictObject({
12
+ pid: z.number().int().positive(),
13
+ state: z.literal("readable"),
14
+ run_id: z.string().optional(),
15
+ reason: z.null().optional(),
16
+ }),
17
+ z.strictObject({
18
+ pid: z.number().int().positive(),
19
+ state: z.literal("unavailable"),
20
+ run_id: z.union([z.string(), z.null()]).optional(),
21
+ reason: z.string().min(1),
22
+ }),
23
+ ])),
24
+ });
25
+ const identityResponseSchema = z.strictObject({
26
+ results: z.array(z.discriminatedUnion("state", [
27
+ z.strictObject({
28
+ pid: z.number().int().positive(),
29
+ state: z.literal("readable"),
30
+ identity: z.string().min(1),
31
+ reason: z.null().optional(),
32
+ }),
33
+ z.strictObject({
34
+ pid: z.number().int().positive(),
35
+ state: z.literal("unavailable"),
36
+ identity: z.null().optional(),
37
+ reason: z.string().min(1),
38
+ }),
39
+ ])),
40
+ });
41
+ const sourceFiles = [
42
+ fileURLToPath(new URL("../../bridge/process/ProcessRunTokenReader.swift", import.meta.url)),
43
+ fileURLToPath(new URL("../../bridge/process/ProcessRunTokenReaderMain.swift", import.meta.url)),
44
+ ];
45
+ /** The native Darwin process-ownership reader could not be prepared. */
46
+ export class DarwinProcessOwnershipInspectionError extends Error {
47
+ constructor(message, options) {
48
+ super(message, options);
49
+ this.name = "DarwinProcessOwnershipInspectionError";
50
+ }
51
+ }
52
+ const abortReason = (signal) => {
53
+ if (signal.reason !== undefined)
54
+ return signal.reason;
55
+ const error = new Error("The operation was aborted");
56
+ error.name = "AbortError";
57
+ return error;
58
+ };
59
+ const isExpectedAbort = (cause, signal) => signal.aborted &&
60
+ (cause === signal.reason ||
61
+ (cause instanceof Error && cause.name === "AbortError"));
62
+ const waitForCompilation = async (promise, signal) => {
63
+ if (signal === undefined)
64
+ return promise;
65
+ if (signal.aborted)
66
+ throw abortReason(signal);
67
+ return new Promise((resolve, reject) => {
68
+ let completed = false;
69
+ const finish = (callback) => {
70
+ if (completed)
71
+ return;
72
+ completed = true;
73
+ signal.removeEventListener("abort", onAbort);
74
+ callback();
75
+ };
76
+ const onAbort = () => finish(() => reject(abortReason(signal)));
77
+ signal.addEventListener("abort", onAbort, { once: true });
78
+ promise.then((value) => finish(() => resolve(value)), (cause) => finish(() => reject(cause)));
79
+ if (signal.aborted)
80
+ onAbort();
81
+ });
82
+ };
83
+ /** Compile and retain the narrow Darwin sysctl reader for this REA process. */
84
+ export const createDarwinProcessRunTokenReader = (options = {}) => {
85
+ let root;
86
+ let executable;
87
+ let compilation;
88
+ let closePromise;
89
+ let closed = false;
90
+ let exitCleanupInstalled = false;
91
+ const cleanupAtExit = () => {
92
+ if (root !== undefined)
93
+ rmSync(root, { recursive: true, force: true });
94
+ };
95
+ const cleanupRoot = async (target = root) => {
96
+ if (target === undefined)
97
+ return;
98
+ await rm(target, { recursive: true, force: true });
99
+ if (root !== target)
100
+ return;
101
+ root = undefined;
102
+ executable = undefined;
103
+ if (exitCleanupInstalled)
104
+ process.removeListener("exit", cleanupAtExit);
105
+ exitCleanupInstalled = false;
106
+ };
107
+ const runCompilation = async (signal) => {
108
+ let operationRoot;
109
+ try {
110
+ operationRoot = await mkdtemp(join(tmpdir(), "rea-process-token-"));
111
+ root = operationRoot;
112
+ process.once("exit", cleanupAtExit);
113
+ exitCleanupInstalled = true;
114
+ if (signal.aborted || closed)
115
+ throw abortReason(signal);
116
+ const output = join(operationRoot, "reader");
117
+ const compilerEnvironment = { ...process.env };
118
+ // Use Swift's reusable default cache for REA's internal helper compilation.
119
+ delete compilerEnvironment.CLANG_MODULE_CACHE_PATH;
120
+ try {
121
+ await execFileOutput(options.xcrun ?? "/usr/bin/xcrun", ["swiftc", ...sourceFiles, "-o", output], {
122
+ timeout: 60_000,
123
+ maxBuffer: 1024 * 1024,
124
+ signal,
125
+ env: compilerEnvironment,
126
+ });
127
+ }
128
+ catch (cause) {
129
+ if (isExpectedAbort(cause, signal))
130
+ throw cause;
131
+ const code = cause instanceof Error && "code" in cause
132
+ ? String(cause.code)
133
+ : "unknown";
134
+ throw new DarwinProcessOwnershipInspectionError(code === "ENOENT"
135
+ ? `macOS process ownership inspection requires the Apple Swift compiler via xcrun (compiler result: ${code})`
136
+ : `macOS process ownership helper compilation failed via xcrun (compiler result: ${code}): ${cause instanceof Error ? cause.message : String(cause)}`, { cause });
137
+ }
138
+ if (signal.aborted || closed)
139
+ throw abortReason(signal);
140
+ executable = output;
141
+ return output;
142
+ }
143
+ catch (cause) {
144
+ const ownsRoot = operationRoot !== undefined && root === operationRoot;
145
+ if (operationRoot !== undefined) {
146
+ if (ownsRoot)
147
+ await cleanupRoot(operationRoot);
148
+ else
149
+ await rm(operationRoot, { recursive: true, force: true });
150
+ }
151
+ throw cause;
152
+ }
153
+ };
154
+ const beginCompilation = () => {
155
+ const controller = new AbortController();
156
+ const operation = {
157
+ controller,
158
+ promise: runCompilation(controller.signal).finally(() => {
159
+ operation.settled = true;
160
+ if (compilation === operation)
161
+ compilation = undefined;
162
+ }),
163
+ waiters: 0,
164
+ aborting: false,
165
+ settled: false,
166
+ };
167
+ compilation = operation;
168
+ return operation;
169
+ };
170
+ const compile = async (signal) => {
171
+ if (closed)
172
+ throw new Error("Darwin process token reader is closed");
173
+ signal?.throwIfAborted();
174
+ while (true) {
175
+ if (closed)
176
+ throw new Error("Darwin process token reader is closed");
177
+ signal?.throwIfAborted();
178
+ if (executable !== undefined)
179
+ return executable;
180
+ if (compilation === undefined && root !== undefined) {
181
+ await cleanupRoot();
182
+ continue;
183
+ }
184
+ let operation = compilation;
185
+ if (operation?.aborting === true) {
186
+ try {
187
+ await waitForCompilation(operation.promise, signal);
188
+ }
189
+ catch (cause) {
190
+ if (signal !== undefined && isExpectedAbort(cause, signal))
191
+ throw cause;
192
+ }
193
+ continue;
194
+ }
195
+ operation ??= beginCompilation();
196
+ operation.waiters += 1;
197
+ try {
198
+ return await waitForCompilation(operation.promise, signal);
199
+ }
200
+ finally {
201
+ operation.waiters -= 1;
202
+ if (operation.waiters === 0 &&
203
+ !operation.settled &&
204
+ !operation.aborting) {
205
+ operation.aborting = true;
206
+ operation.controller.abort();
207
+ await operation.promise.catch(() => undefined);
208
+ }
209
+ }
210
+ }
211
+ };
212
+ const read = async (processes) => {
213
+ if (processes.length === 0)
214
+ return new Map();
215
+ const binary = await compile();
216
+ const pids = processes.map(({ pid }) => String(pid));
217
+ const { stdout } = await execFileOutput(binary, pids, { timeout: 15_000 });
218
+ const decoded = safeParseJson(stdout);
219
+ if (!decoded.ok)
220
+ throw new Error(`macOS process token helper returned invalid JSON: ${decoded.error}`, { cause: decoded.cause });
221
+ const parsed = responseSchema.safeParse(decoded.value);
222
+ if (!parsed.success)
223
+ throw new Error("macOS process token helper returned an invalid response", {
224
+ cause: parsed.error,
225
+ });
226
+ const requested = new Set(processes.map(({ pid }) => pid));
227
+ const observations = new Map();
228
+ for (const result of parsed.data.results) {
229
+ if (!requested.has(result.pid) || observations.has(result.pid))
230
+ throw new Error("macOS process token helper returned an unexpected PID set");
231
+ observations.set(result.pid, result.state === "readable"
232
+ ? { state: "readable", runId: result.run_id }
233
+ : {
234
+ state: "unavailable",
235
+ reason: result.reason ?? "process token observation is unavailable",
236
+ });
237
+ }
238
+ if (observations.size !== requested.size)
239
+ throw new Error("macOS process token helper returned an incomplete PID set");
240
+ return observations;
241
+ };
242
+ const identities = async (processes, signal) => {
243
+ if (processes.length === 0)
244
+ return new Map();
245
+ const binary = await compile(signal);
246
+ const pids = processes.map(({ pid }) => String(pid));
247
+ const { stdout } = await execFileOutput(binary, ["--identities", ...pids], {
248
+ timeout: 15_000,
249
+ ...(signal === undefined ? {} : { signal }),
250
+ });
251
+ const decoded = safeParseJson(stdout);
252
+ if (!decoded.ok)
253
+ throw new Error(`macOS process identity helper returned invalid JSON: ${decoded.error}`, { cause: decoded.cause });
254
+ const parsed = identityResponseSchema.safeParse(decoded.value);
255
+ if (!parsed.success)
256
+ throw new Error("macOS process identity helper returned an invalid response", {
257
+ cause: parsed.error,
258
+ });
259
+ const requested = new Set(processes.map(({ pid }) => pid));
260
+ const observations = new Map();
261
+ for (const result of parsed.data.results) {
262
+ if (!requested.has(result.pid) || observations.has(result.pid))
263
+ throw new Error("macOS process identity helper returned an unexpected PID set");
264
+ observations.set(result.pid, result.state === "readable"
265
+ ? { state: "readable", identity: result.identity }
266
+ : { state: "unavailable", reason: result.reason });
267
+ }
268
+ if (observations.size !== requested.size)
269
+ throw new Error("macOS process identity helper returned an incomplete PID set");
270
+ return observations;
271
+ };
272
+ const close = () => {
273
+ if (closePromise !== undefined)
274
+ return closePromise;
275
+ closed = true;
276
+ const pendingClose = (async () => {
277
+ const operation = compilation;
278
+ if (operation !== undefined && !operation.settled) {
279
+ operation.aborting = true;
280
+ operation.controller.abort();
281
+ await operation.promise.catch(() => undefined);
282
+ }
283
+ await cleanupRoot();
284
+ })().catch((cause) => {
285
+ if (closePromise === pendingClose)
286
+ closePromise = undefined;
287
+ throw cause;
288
+ });
289
+ closePromise = pendingClose;
290
+ return closePromise;
291
+ };
292
+ return { read, identities, prepare: compile, close };
293
+ };
@@ -1,4 +1,24 @@
1
1
  import { execFile, } from "node:child_process";
2
+ /** Read captured output metadata from a failed execFileOutput invocation. */
3
+ export const execFileOutputFailure = (cause) => {
4
+ if (!(cause instanceof Error))
5
+ return undefined;
6
+ const stdout = Reflect.get(cause, "stdout");
7
+ const stderr = Reflect.get(cause, "stderr");
8
+ const code = Reflect.get(cause, "code");
9
+ const signal = Reflect.get(cause, "signal");
10
+ const killed = Reflect.get(cause, "killed");
11
+ if (typeof stdout !== "string" || typeof stderr !== "string")
12
+ return undefined;
13
+ return {
14
+ stdout,
15
+ stderr,
16
+ code: typeof code === "string" || typeof code === "number" ? code : null,
17
+ signal: typeof signal === "string" ? signal : null,
18
+ killed: killed === true,
19
+ outputTruncated: code === "ERR_CHILD_PROCESS_STDIO_MAXBUFFER",
20
+ };
21
+ };
2
22
  /** Run a shell-free command while capturing its complete UTF-8 output. */
3
23
  export const execFileOutput = (command, arguments_, options = {}) => new Promise((resolve, reject) => {
4
24
  execFile(command, [...arguments_], {
@@ -0,0 +1,118 @@
1
+ import { ProviderProcessSupervisor, spawnOwnedProviderProcess, } from "./ProviderProcess.js";
2
+ import { cleanupOwnedProcessGroup } from "./ProcessOwnership.js";
3
+ import { ProviderStartupDeadline, waitForAbortableDelay, } from "./ProviderDeadline.js";
4
+ /** A short-lived command failed its lifecycle or complete-output contract. */
5
+ export class OwnedCommandFailure extends Error {
6
+ reason;
7
+ snapshot;
8
+ cleanupFailure;
9
+ resources;
10
+ constructor(reason, message, snapshot = null, cleanupFailure = null, options, resources = []) {
11
+ super(message, options);
12
+ this.reason = reason;
13
+ this.snapshot = snapshot;
14
+ this.cleanupFailure = cleanupFailure;
15
+ this.resources = resources;
16
+ }
17
+ }
18
+ /** Execute a single owned process with independent cleanup and bounded diagnostic retention. */
19
+ export const runOwnedCommand = async (spawn, limits, options = {}) => {
20
+ const callerSignal = options.signal ?? spawn.signal;
21
+ if (callerSignal?.aborted)
22
+ throw new OwnedCommandFailure("cancelled", "Command cancelled before launch.");
23
+ const deadline = new ProviderStartupDeadline(limits.timeoutMs, callerSignal);
24
+ try {
25
+ return await collectOwnedCommand(spawn, limits, options.launcher ?? spawnOwnedProviderProcess, deadline, callerSignal);
26
+ }
27
+ finally {
28
+ deadline.dispose();
29
+ }
30
+ };
31
+ const collectOwnedCommand = async (spawn, limits, launcher, deadline, callerSignal) => {
32
+ const signal = deadline.signal;
33
+ let launched;
34
+ try {
35
+ launched = await launcher({
36
+ ...spawn,
37
+ signal,
38
+ });
39
+ }
40
+ catch (cause) {
41
+ const interruption = deadline.interruption;
42
+ if (interruption !== undefined)
43
+ throw new OwnedCommandFailure(interruption, interruption === "cancelled"
44
+ ? "Command cancelled during ownership preparation."
45
+ : "Command deadline elapsed during ownership preparation.", null, null, { cause });
46
+ throw cause;
47
+ }
48
+ let exceeded = false;
49
+ let processFailure;
50
+ const supervisor = new ProviderProcessSupervisor({
51
+ ...launched,
52
+ ownsProcessLifetime: true,
53
+ cleanup: launched.cleanup ??
54
+ (() => cleanupOwnedProcessGroup(launched.ownership)),
55
+ }, {
56
+ maxDiagnosticBytes: limits.diagnosticBytes,
57
+ onDiagnostic: (event) => {
58
+ if (event.type === "output" && event.truncated === true)
59
+ exceeded = true;
60
+ if (event.type === "error")
61
+ processFailure = event.message;
62
+ },
63
+ });
64
+ let failure;
65
+ try {
66
+ while (!(await supervisor.waitForOutputClose(10))) {
67
+ const interruption = deadline.interruption;
68
+ if (interruption !== undefined)
69
+ throw new OwnedCommandFailure(interruption, interruption === "cancelled"
70
+ ? "Command cancelled."
71
+ : "Command deadline elapsed.");
72
+ if (exceeded)
73
+ throw new OwnedCommandFailure("output-limit", "Command diagnostic output exceeded its complete-output budget.");
74
+ if (processFailure !== undefined)
75
+ throw new OwnedCommandFailure("process", processFailure);
76
+ await waitForAbortableDelay(25, signal);
77
+ }
78
+ const snapshot = supervisor.snapshot();
79
+ const interruption = deadline.interruption;
80
+ if (interruption !== undefined)
81
+ throw new OwnedCommandFailure(interruption, interruption === "cancelled"
82
+ ? "Command cancelled."
83
+ : "Command deadline elapsed.", snapshot);
84
+ if (exceeded)
85
+ throw new OwnedCommandFailure("output-limit", "Command diagnostic output exceeded its complete-output budget.", snapshot);
86
+ const acceptedNonzeroExit = limits.acceptNonZeroExit === true &&
87
+ snapshot.exitCode !== null &&
88
+ snapshot.exitCode !== undefined &&
89
+ snapshot.exitCode !== 0 &&
90
+ snapshot.signal === null;
91
+ if (processFailure !== undefined ||
92
+ ((snapshot.exitCode !== 0 || snapshot.signal !== null) &&
93
+ !acceptedNonzeroExit))
94
+ throw new OwnedCommandFailure("process", processFailure ??
95
+ "Command failed; inspect its exit status and diagnostics.", snapshot);
96
+ }
97
+ catch (cause) {
98
+ failure =
99
+ cause instanceof OwnedCommandFailure
100
+ ? cause
101
+ : new OwnedCommandFailure("process", "Command collection failed.", null, null, { cause });
102
+ }
103
+ const stopped = await supervisor.stop();
104
+ const snapshot = supervisor.snapshot();
105
+ supervisor.dispose();
106
+ if (stopped.status === "incomplete")
107
+ throw new OwnedCommandFailure(failure?.reason ?? "process", failure?.message ?? "Command cleanup failed.", snapshot, stopped.reason, failure === undefined ? undefined : { cause: failure }, [
108
+ spawn.runId,
109
+ ...(spawn.cwd === undefined ? [] : [spawn.cwd]),
110
+ `pid:${launched.ownership.leaderPid}`,
111
+ `process-group:${launched.ownership.processGroupId}`,
112
+ ]);
113
+ if (failure !== undefined)
114
+ throw new OwnedCommandFailure(failure.reason, failure.message, snapshot, failure.cleanupFailure, { cause: failure }, failure.resources);
115
+ if (callerSignal?.aborted)
116
+ throw new OwnedCommandFailure("cancelled", "Command cancelled.", snapshot);
117
+ return snapshot;
118
+ };