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
@@ -2,7 +2,7 @@ import { createHash } from "node:crypto";
2
2
  import { posix } from "node:path";
3
3
  import { fileURLToPath } from "node:url";
4
4
  import * as t from "@babel/types";
5
- import { semanticStaticPropertyName } from "./javascriptAstValues.js";
5
+ import { readExactJavaScriptLiteral, semanticStaticPropertyName, } from "./javascriptAstValues.js";
6
6
  import { compareCodePoints } from "../canonicalOrdering.js";
7
7
  export { propertyName, semanticStaticPropertyName, } from "./javascriptAstValues.js";
8
8
  /** Explicit result for source text that Babel cannot parse. */
@@ -118,10 +118,8 @@ export const staticPathResolutionContext = (node) => isFilesystemPathExpression(
118
118
  const staticPathAt = (node) => {
119
119
  if (t.isStringLiteral(node))
120
120
  return node.value;
121
- if (t.isTemplateLiteral(node) && node.expressions.length === 0) {
122
- const value = node.quasis[0]?.value.cooked ?? node.quasis[0]?.value.raw;
123
- return value;
124
- }
121
+ if (t.isTemplateLiteral(node) && node.expressions.length === 0)
122
+ return stringValue(node);
125
123
  if (t.isBinaryExpression(node, { operator: "+" })) {
126
124
  const left = staticPathAt(node.left);
127
125
  const right = staticPathAt(node.right);
@@ -347,23 +345,34 @@ const BROWSING_CONTEXT_KEYWORDS = new Set([
347
345
  * methods' case; extension methods such as WebDAV `PROPFIND` are
348
346
  * conventionally uppercase tokens.
349
347
  */
350
- const xhrOpenUrl = (name, methodNode, urlNode) => {
348
+ const xhrOpenUrl = (name, methodNode, urlNode, receiverFact) => {
351
349
  const url = stringValue(urlNode);
352
350
  if (url === undefined)
353
351
  return undefined;
352
+ // A lexical fact is stronger than the receiver's spelling. In particular,
353
+ // browser Window and Document globals overload `open` with URL/content APIs.
354
+ if (receiverFact === "window")
355
+ return undefined;
354
356
  const method = stringValue(methodNode);
355
357
  // IndexedDB and Cache Storage `open` take a name and a version, so a
356
358
  // receiver spelled as storage needs a standard HTTP method literal.
357
- const storage = storageKind(name) !== undefined;
359
+ const storage = receiverFact === "local-indexed-db" ||
360
+ receiverFact === "local-cache-storage" ||
361
+ receiverFact === "indexed-db" ||
362
+ receiverFact === "cache-storage" ||
363
+ storageKind(name) !== undefined;
358
364
  if (method === undefined)
359
365
  return storage ||
360
- WINDOW_OPEN_CALL.test(name) ||
366
+ (receiverFact === undefined && WINDOW_OPEN_CALL.test(name)) ||
361
367
  FS_OPEN_FLAGS.has(url) ||
362
368
  BROWSING_CONTEXT_KEYWORDS.has(url.toLowerCase())
363
369
  ? undefined
364
370
  : url;
365
371
  return XHR_METHODS.has(method.toUpperCase()) ||
366
- (!storage && /^[A-Z][A-Z-]*$/u.test(method))
372
+ ((!storage ||
373
+ receiverFact === "local-indexed-db" ||
374
+ receiverFact === "local-cache-storage") &&
375
+ /^[A-Z][A-Z-]*$/u.test(method))
367
376
  ? url
368
377
  : undefined;
369
378
  };
@@ -396,11 +405,13 @@ const isKeyedCollectionReceiver = (callee) => {
396
405
  return property === "headers" || property === "searchParams";
397
406
  };
398
407
  /** Select the literal URL argument for recognized network callees. */
399
- export const endpointArgument = (name, args, callee) => {
408
+ export const endpointArgument = (name, args, callee, receiverFact) => {
409
+ if (receiverFact === "window")
410
+ return undefined;
400
411
  if (name === "fetch" || name.endsWith(".fetch") || name === "WebSocket")
401
412
  return stringValue(args[0]);
402
413
  if (name.endsWith(".open"))
403
- return xhrOpenUrl(name, args[0], args[1]);
414
+ return xhrOpenUrl(name, args[0], args[1], receiverFact);
404
415
  const method = ["get", "post", "put", "patch", "delete", "request"].find((candidate) => name === candidate || name.endsWith(`.${candidate}`));
405
416
  if (method !== undefined) {
406
417
  const value = stringValue(args[0]);
@@ -462,11 +473,12 @@ const memberPropertyName = (node) => node.computed &&
462
473
  * literal without substitutions denotes the same exact string.
463
474
  */
464
475
  export const stringValue = (node) => {
465
- if (t.isStringLiteral(node))
466
- return node.value;
467
- if (t.isTemplateLiteral(node) && node.expressions.length === 0)
468
- return node.quasis[0]?.value.cooked ?? undefined;
469
- return undefined;
476
+ if (node === null || node === undefined)
477
+ return undefined;
478
+ const literal = readExactJavaScriptLiteral(node);
479
+ return literal.found && typeof literal.value === "string"
480
+ ? literal.value
481
+ : undefined;
470
482
  };
471
483
  /** Return a string or numeric argument literal. */
472
484
  export const argumentValue = (node) => t.isNumericLiteral(node) ? String(node.value) : stringValue(node);
@@ -1,5 +1,6 @@
1
+ import { JavaScriptModuleRangeIndex } from "./javascriptStaticAnalysisFindings.js";
1
2
  /** Create isolated mutable state for one source analysis. */
2
- export const createJavaScriptAnalysisAccumulator = () => ({
3
+ export const createJavaScriptAnalysisAccumulator = (sourceLength) => ({
3
4
  references: [],
4
5
  endpoints: [],
5
6
  storage: [],
@@ -12,7 +13,7 @@ export const createJavaScriptAnalysisAccumulator = () => ({
12
13
  senderValidations: [],
13
14
  utilityProcesses: [],
14
15
  nativeAddonBindings: [],
15
- modules: [],
16
+ moduleRangeIndex: new JavaScriptModuleRangeIndex(sourceLength),
16
17
  seen: new Set(),
17
18
  visitedNodes: 0,
18
19
  unknownFindings: 0,
@@ -0,0 +1,109 @@
1
+ /** Encode ordinary JSON as bounded string parts without a document-sized allocation. */
2
+ export function* jsonParts(value, pretty = false) {
3
+ yield* encodeValue(value, pretty, 0, new Set(), false);
4
+ }
5
+ /** Encode validated JSON with canonical key ordering without allocating the whole document. */
6
+ export function* canonicalJsonParts(value) {
7
+ yield* encodeValue(value, false, 0, new Set(), true);
8
+ }
9
+ /** Buffer JSON parts while preserving complete UTF-16 surrogate pairs. */
10
+ export function* bufferedJsonParts(parts) {
11
+ let buffer = "";
12
+ for (const part of parts) {
13
+ if (buffer.length + part.length > 64 * 1024 && buffer !== "") {
14
+ yield buffer;
15
+ buffer = "";
16
+ }
17
+ buffer += part;
18
+ }
19
+ if (buffer !== "")
20
+ yield buffer;
21
+ }
22
+ function* encodeString(value) {
23
+ if (value.length <= 8192) {
24
+ yield JSON.stringify(value);
25
+ return;
26
+ }
27
+ yield '"';
28
+ for (let start = 0; start < value.length;) {
29
+ let end = Math.min(start + 8192, value.length);
30
+ const last = value.charCodeAt(end - 1);
31
+ const next = value.charCodeAt(end);
32
+ // Keep a surrogate pair in the same JSON.stringify and UTF-8 write.
33
+ if (end < value.length &&
34
+ last >= 0xd800 &&
35
+ last <= 0xdbff &&
36
+ next >= 0xdc00 &&
37
+ next <= 0xdfff)
38
+ end -= 1;
39
+ yield JSON.stringify(value.slice(start, end)).slice(1, -1);
40
+ start = end;
41
+ }
42
+ yield '"';
43
+ }
44
+ function* encodeValue(value, pretty, depth, ancestors, canonical) {
45
+ if (typeof value === "string") {
46
+ yield* encodeString(value);
47
+ return;
48
+ }
49
+ if (value === null || typeof value === "boolean") {
50
+ yield value === null ? "null" : String(value);
51
+ return;
52
+ }
53
+ if (typeof value === "number" && Number.isFinite(value)) {
54
+ yield String(value);
55
+ return;
56
+ }
57
+ if (typeof value !== "object" || value === null)
58
+ throw new TypeError("JSON output requires ordinary JSON values");
59
+ if (ancestors.has(value))
60
+ throw new TypeError("JSON output contains a circular reference");
61
+ if (!Array.isArray(value) &&
62
+ Object.prototype.toString.call(value) !== "[object Object]")
63
+ throw new TypeError("JSON output requires ordinary JSON objects");
64
+ ancestors.add(value);
65
+ try {
66
+ const array = Array.isArray(value);
67
+ const keys = array ? undefined : Object.keys(value);
68
+ if (canonical)
69
+ keys?.sort();
70
+ const count = array ? value.length : (keys?.length ?? 0);
71
+ let written = 0;
72
+ yield array ? "[" : "{";
73
+ for (let index = 0; index < count; index += 1) {
74
+ let item;
75
+ let key;
76
+ if (array) {
77
+ item = value[index];
78
+ }
79
+ else {
80
+ key = keys?.[index];
81
+ if (key === undefined)
82
+ throw new TypeError("JSON object changed during serialization");
83
+ item = Reflect.get(value, key);
84
+ // Incur's filter can select inherited methods. Match native JSON's
85
+ // omission without eagerly reading the rest of a bounded result.
86
+ if (item === undefined ||
87
+ typeof item === "function" ||
88
+ typeof item === "symbol")
89
+ continue;
90
+ }
91
+ if (written > 0)
92
+ yield ",";
93
+ if (pretty)
94
+ yield `\n${" ".repeat(depth + 1)}`;
95
+ if (key !== undefined) {
96
+ yield* encodeString(key);
97
+ yield pretty ? ": " : ":";
98
+ }
99
+ yield* encodeValue(item, pretty, depth + 1, ancestors, canonical);
100
+ written += 1;
101
+ }
102
+ if (pretty && written > 0)
103
+ yield `\n${" ".repeat(depth)}`;
104
+ yield array ? "]" : "}";
105
+ }
106
+ finally {
107
+ ancestors.delete(value);
108
+ }
109
+ }
@@ -1,5 +1,93 @@
1
1
  import { z } from "zod";
2
- /** JSON-safe value shared by domain, application, and adapter boundaries. */
3
- export const jsonValueSchema = z.json();
2
+ import { isImmutableJsonSnapshot } from "./immutableJson.js";
3
+ /** Maximum JSON nesting accepted before recursive result cloning. */
4
+ export const MAX_JSON_DEPTH = 1000;
5
+ const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
6
+ const recordShape = z.record(z.string(), z.unknown());
7
+ const immutableValidation = new WeakMap();
8
+ /** Validate JSON meaning and nesting without cloning a trusted immutable value. */
9
+ export const jsonValueValidationIssue = (root) => {
10
+ const steps = jsonValueValidationSteps(root);
11
+ for (;;) {
12
+ const step = steps.next();
13
+ if (step.done)
14
+ return step.value;
15
+ }
16
+ };
17
+ /** Validate JSON in bounded steps; cache only authenticated immutable roots. */
18
+ export function* jsonValueValidationSteps(root) {
19
+ const immutable = typeof root === "object" && root !== null && isImmutableJsonSnapshot(root)
20
+ ? root
21
+ : undefined;
22
+ if (immutable !== undefined && immutableValidation.has(immutable))
23
+ return immutableValidation.get(immutable);
24
+ const finish = (issue) => {
25
+ if (immutable !== undefined)
26
+ immutableValidation.set(immutable, issue);
27
+ return issue;
28
+ };
29
+ const pending = [
30
+ { value: root, depth: 0 },
31
+ ];
32
+ let examined = 0;
33
+ while (pending.length > 0) {
34
+ if (examined++ === 4096) {
35
+ examined = 0;
36
+ yield;
37
+ }
38
+ const item = pending.pop();
39
+ if (item === undefined)
40
+ break;
41
+ if (item.depth > MAX_JSON_DEPTH)
42
+ return finish(`JSON value exceeds maximum nesting depth of ${MAX_JSON_DEPTH}`);
43
+ const value = item.value;
44
+ if (value === null ||
45
+ typeof value === "string" ||
46
+ typeof value === "boolean")
47
+ continue;
48
+ if (typeof value === "number") {
49
+ if (!Number.isFinite(value))
50
+ return finish("JSON numbers must be finite");
51
+ }
52
+ else if (Array.isArray(value)) {
53
+ for (const child of value)
54
+ pending.push({ value: child, depth: item.depth + 1 });
55
+ }
56
+ else if (isRecord(value) && recordShape.safeParse(value).success) {
57
+ // Inspect every own member, including keys Zod's record parser skips.
58
+ for (const child of Object.values(value))
59
+ pending.push({ value: child, depth: item.depth + 1 });
60
+ }
61
+ else
62
+ return finish("Invalid JSON value");
63
+ }
64
+ return finish(undefined);
65
+ }
66
+ const preserveJsonValue = (value) => {
67
+ if (Array.isArray(value))
68
+ return value.map(preserveJsonValue);
69
+ if (value !== null && typeof value === "object")
70
+ return Object.fromEntries(Object.entries(value).map(([key, child]) => [
71
+ key,
72
+ preserveJsonValue(child),
73
+ ]));
74
+ return value;
75
+ };
76
+ const validatedJsonValue = z.custom((value) => jsonValueValidationIssue(value) === undefined, {
77
+ error: (issue) => jsonValueValidationIssue(issue.input) ?? "Invalid JSON value",
78
+ });
79
+ // Keep both stages nonrecursive in public and Standard Schema projections.
80
+ validatedJsonValue._zod.toJSONSchema = () => ({});
81
+ /** Parse bounded JSON and retain all own data members without prototype setters. */
82
+ export const jsonValueSchema = z
83
+ .unknown()
84
+ .nonoptional()
85
+ .pipe(validatedJsonValue)
86
+ .transform(preserveJsonValue);
87
+ jsonValueSchema._zod.toJSONSchema = () => ({});
88
+ const objectValidation = z.custom(isRecord, "Expected JSON object");
89
+ const objectProjection = () => ({ type: "object", additionalProperties: {} });
90
+ objectValidation._zod.toJSONSchema = objectProjection;
4
91
  /** JSON object boundary for caller-visible parameter maps. */
5
- export const jsonObjectSchema = z.record(z.string(), jsonValueSchema);
92
+ export const jsonObjectSchema = jsonValueSchema.pipe(objectValidation);
93
+ jsonObjectSchema._zod.toJSONSchema = objectProjection;
@@ -1,4 +1,12 @@
1
1
  import { isAbsolute, relative, sep } from "node:path";
2
+ import { z } from "zod";
3
+ /** Preserve selected filesystem names while rejecting OS-invalid NUL bytes. */
4
+ export const localPathStringSchema = z
5
+ .string()
6
+ .min(1)
7
+ .regex(/^[^\0]*$/u, "Local filesystem paths cannot contain NUL");
8
+ /** True when the value is an absolute filesystem path on the host platform. */
9
+ export const isAbsoluteLocalPath = (value) => isAbsolute(value);
2
10
  /** Test lexical containment on the host platform; callers must resolve symlinks first. */
3
11
  export const isPathWithinRoot = (root, path) => {
4
12
  const value = relative(root, path);
@@ -1,13 +1,14 @@
1
1
  import { createHash } from "node:crypto";
2
2
  import canonicalize from "canonicalize";
3
3
  import { z } from "zod";
4
- import { evidenceSchema, parseEvidence } from "../evidence.js";
4
+ import { evidenceSchema } from "../evidence.js";
5
5
  import { createJavaScriptApplicationGraph, javascriptApplicationGraphSchema, } from "../javascript/javascriptApplicationGraph.js";
6
6
  import { managedArtifactInspectionSchema, managedMemberInspectionSchema, managedNativeBoundaryInspectionSchema, } from "./managedArtifact.js";
7
7
  import { assessManagedGraphOmissions, managedGraphEvidenceCoverage, managedGraphResultCoverage, } from "./managedApplicationGraphCoverage.js";
8
8
  import { addArtifactNode, addArtifactIdentityNodes, addBoundaryNodes, addMemberNodes, } from "./managedApplicationGraphNodes.js";
9
9
  import { digestSchema } from "../digests.js";
10
10
  import { prefixedDigestSchema } from "../digests.js";
11
+ import { parseManagedInspectionEvidence } from "./managedInspectionEvidence.js";
11
12
  const evidenceIdSchema = prefixedDigestSchema("ev");
12
13
  const textSchema = z.string().min(1);
13
14
  /** Authenticated managed Evidence records projected into the application graph. */
@@ -121,20 +122,14 @@ export const projectManagedApplicationGraph = (input) => {
121
122
  const parseManagedInputs = (input) => ({
122
123
  artifact: input.managed_artifact === undefined
123
124
  ? null
124
- : parseManagedEvidence(input.managed_artifact, "inspect_managed_artifact", managedArtifactInspectionSchema),
125
+ : parseManagedInspectionEvidence(input.managed_artifact, "inspect_managed_artifact", managedArtifactInspectionSchema),
125
126
  members: input.managed_members === undefined
126
127
  ? null
127
- : parseManagedEvidence(input.managed_members, "inspect_managed_members", managedMemberInspectionSchema),
128
+ : parseManagedInspectionEvidence(input.managed_members, "inspect_managed_members", managedMemberInspectionSchema),
128
129
  boundaries: input.managed_native_boundaries === undefined
129
130
  ? null
130
- : parseManagedEvidence(input.managed_native_boundaries, "inspect_managed_native_boundaries", managedNativeBoundaryInspectionSchema),
131
+ : parseManagedInspectionEvidence(input.managed_native_boundaries, "inspect_managed_native_boundaries", managedNativeBoundaryInspectionSchema),
131
132
  });
132
- const parseManagedEvidence = (rawEvidence, operation, schema) => {
133
- const evidence = parseEvidence(rawEvidence);
134
- if (evidence.operation !== operation)
135
- throw new TypeError(`Evidence operation is not ${operation}`);
136
- return { evidence, result: schema.parse(evidence.normalized_result) };
137
- };
138
133
  const chooseArtifact = (parsed) => {
139
134
  const result = parsed.artifact?.result ??
140
135
  parsed.members?.result ??
@@ -164,6 +159,11 @@ const projectionLimitations = (parsed, omissions) => [
164
159
  "Managed member Evidence was not supplied; type, method, and field nodes are absent.",
165
160
  ]
166
161
  : []),
162
+ ...(parsed.artifact === null
163
+ ? [
164
+ "Managed artifact Evidence was not supplied; assembly identity observations are absent.",
165
+ ]
166
+ : []),
167
167
  ...(parsed.boundaries === null
168
168
  ? [
169
169
  "Managed native-boundary Evidence was not supplied; P/Invoke and native-implementation nodes are absent.",
@@ -0,0 +1,16 @@
1
+ import { parseEvidence } from "../evidence.js";
2
+ /**
3
+ * Parse managed inspection Evidence and bind its artifact to any available subject.
4
+ * A null subject remains valid and means there is no digest to cross-check.
5
+ */
6
+ export const parseManagedInspectionEvidence = (rawEvidence, operation, schema) => {
7
+ const evidence = parseEvidence(rawEvidence);
8
+ if (evidence.operation !== operation)
9
+ throw new TypeError(`Evidence operation is not ${operation}`);
10
+ const result = schema.parse(evidence.normalized_result);
11
+ const artifactSha256 = result.artifact.sha256;
12
+ const subjectSha256 = evidence.subject?.digest.sha256;
13
+ if (subjectSha256 !== undefined && artifactSha256 !== subjectSha256)
14
+ throw new TypeError(`Managed Evidence ${operation} (${evidence.evidence_id}) subject SHA-256 ${subjectSha256} does not match normalized artifact SHA-256 ${artifactSha256}`);
15
+ return { evidence, result };
16
+ };
@@ -1,7 +1,7 @@
1
1
  import { createHash } from "node:crypto";
2
2
  import canonicalize from "canonicalize";
3
- import { parseEvidence } from "../evidence.js";
4
3
  import { managedMemberInspectionSchema, } from "./managedArtifact.js";
4
+ import { parseManagedInspectionEvidence } from "./managedInspectionEvidence.js";
5
5
  export const sha256 = (value) => {
6
6
  const serialized = canonicalize(value);
7
7
  if (serialized === undefined)
@@ -10,9 +10,7 @@ export const sha256 = (value) => {
10
10
  };
11
11
  const keyMethod = (item) => ({
12
12
  item,
13
- exactKey: item.signature.parse_status === "decoded" &&
14
- item.body.status === "present" &&
15
- item.body.normalized_il_sha256 !== null
13
+ exactKey: item.body.status === "present" && item.body.normalized_il_sha256 !== null
16
14
  ? stableKey([
17
15
  "method-exact",
18
16
  item.signature.raw_sha256,
@@ -173,11 +171,9 @@ export const keyMembers = (left, right) => ({
173
171
  fieldMatches: matchFields(left.result.fields.map(keyField), right.result.fields.map(keyField)),
174
172
  });
175
173
  export const parseManagedMemberEvidence = (evidence) => {
176
- const parsed = parseEvidence(evidence);
177
- if (parsed.operation !== "inspect_managed_members")
178
- throw new TypeError("Evidence operation is not inspect_managed_members");
174
+ const parsed = parseManagedInspectionEvidence(evidence, "inspect_managed_members", managedMemberInspectionSchema);
179
175
  return {
180
- evidenceId: parsed.evidence_id,
181
- result: managedMemberInspectionSchema.parse(parsed.normalized_result),
176
+ evidenceId: parsed.evidence.evidence_id,
177
+ result: parsed.result,
182
178
  };
183
179
  };
@@ -1,7 +1,7 @@
1
1
  import { createHash } from "node:crypto";
2
2
  import canonicalize from "canonicalize";
3
- import { parseEvidence } from "../evidence.js";
4
3
  import { managedNativeBoundaryInspectionSchema, } from "./managedArtifact.js";
4
+ import { parseManagedInspectionEvidence } from "./managedInspectionEvidence.js";
5
5
  import { managedNativeVerificationResultSchema, } from "./managedNativeVerificationSchemas.js";
6
6
  import { buildVerificationResult, collectNativeSymbols, verifyPinvoke, } from "./managedNativeVerificationMatch.js";
7
7
  export { managedNativeVerificationInputSchema, } from "./managedNativeVerificationSchemas.js";
@@ -12,16 +12,10 @@ const sha256 = (value) => {
12
12
  throw new TypeError("Managed/native verification canonicalization failed");
13
13
  return createHash("sha256").update(serialized).digest("hex");
14
14
  };
15
- const managedBoundaryFromInput = (input) => {
16
- const managedEvidence = parseEvidence(input.managed_boundaries);
17
- if (managedEvidence.operation !== "inspect_managed_native_boundaries")
18
- throw new TypeError("Evidence operation is not inspect_managed_native_boundaries");
19
- return managedNativeBoundaryInspectionSchema.parse(managedEvidence.normalized_result);
20
- };
15
+ const parseManagedBoundary = (input) => parseManagedInspectionEvidence(input.managed_boundaries, "inspect_managed_native_boundaries", managedNativeBoundaryInspectionSchema);
21
16
  /** Verify managed P/Invoke declarations against authenticated native Evidence. */
22
17
  export const verifyManagedNativeBoundaries = (input) => {
23
- const managed = managedBoundaryFromInput(input);
24
- const managedEvidence = parseEvidence(input.managed_boundaries);
18
+ const { evidence: managedEvidence, result: managed } = parseManagedBoundary(input);
25
19
  const native = collectNativeSymbols(input.native_observations);
26
20
  const verifiedPinvokes = managed.pinvoke_imports.map((item) => verifyPinvoke({
27
21
  item,