rea-agents 6.1.0 → 6.3.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 (573) hide show
  1. package/README.md +24 -24
  2. package/bridge/ghidra/ReaGhidraBridge.java +32 -4
  3. package/bridge/hopper_bridge.py +8 -1
  4. package/dist/android/JadxConfiguration.js +87 -7
  5. package/dist/android/JadxMcpTransport.js +14 -2
  6. package/dist/android/JadxProvider.js +64 -36
  7. package/dist/android/JadxSession.js +51 -9
  8. package/dist/application/BinaryTargetResolver.js +68 -20
  9. package/dist/application/BrowserEvidence.js +3 -8
  10. package/dist/application/BrowserScenarioEvidence.js +4 -20
  11. package/dist/application/CapabilityInventory.js +43 -9
  12. package/dist/application/ClientConfigurationDocument.js +97 -25
  13. package/dist/application/ClientRegistrationStatus.js +19 -6
  14. package/dist/application/DirectAnalysis.js +41 -20
  15. package/dist/application/DirectAnalysisCleanup.js +71 -0
  16. package/dist/application/DirectAnalysisStatus.js +3 -7
  17. package/dist/application/Doctor.js +40 -53
  18. package/dist/application/DoctorDiagnostics.js +2 -3
  19. package/dist/application/EnhancedTools.js +51 -6
  20. package/dist/application/EvidenceBundleFiles.js +8 -3
  21. package/dist/application/InvestigationProviders.js +13 -5
  22. package/dist/application/JsonFiles.js +56 -23
  23. package/dist/application/LinuxHopper.js +11 -7
  24. package/dist/application/MacHopper.js +15 -18
  25. package/dist/application/RealHopperAssertions.js +0 -11
  26. package/dist/application/ReconstructionObligationCandidates.js +10 -3
  27. package/dist/application/ReconstructionObligationLedgerProjection.js +3 -1
  28. package/dist/application/ReferenceSourceImportEntries.js +1 -1
  29. package/dist/application/RegularFileRead.js +17 -0
  30. package/dist/application/Setup.js +26 -23
  31. package/dist/application/SetupClientConfiguration.js +18 -7
  32. package/dist/application/SetupHost.js +20 -29
  33. package/dist/application/SetupPlan.js +24 -20
  34. package/dist/application/SetupSkill.js +57 -8
  35. package/dist/application/SupportedClients.js +43 -0
  36. package/dist/application/Uninstall.js +98 -30
  37. package/dist/application/UpdateMaintenance.js +13 -7
  38. package/dist/application/UpdateRuntime.js +12 -12
  39. package/dist/application/Utf8JsonInput.js +64 -0
  40. package/dist/application/WebScriptExportService.js +38 -5
  41. package/dist/application/WorkflowEvidence.js +25 -2
  42. package/dist/application/XrefsAddressResolution.js +45 -0
  43. package/dist/application/analysisView/AnalysisViewService.js +76 -0
  44. package/dist/application/android/AndroidAnalysisService.js +1 -1
  45. package/dist/application/binary/AnalysisClientCleanup.js +30 -5
  46. package/dist/application/binary/AnalysisProviderEvaluation.js +1 -2
  47. package/dist/application/binary/AnalysisProviderRegistry.js +2 -6
  48. package/dist/application/binary/AnalysisSnapshotCache.js +13 -10
  49. package/dist/application/binary/BinarySession.js +86 -29
  50. package/dist/application/binary/BinarySessionComposition.js +1 -3
  51. package/dist/application/binary/BinarySessionExecution.js +3 -5
  52. package/dist/application/binary/BinarySessionOpen.js +10 -2
  53. package/dist/application/binary/BinarySessionRecords.js +1 -1
  54. package/dist/application/binary/BinarySessionStatus.js +1 -6
  55. package/dist/application/binary/CompositeProvider.js +4 -18
  56. package/dist/application/binary/LazyAnalysisProvider.js +5 -5
  57. package/dist/application/binary/SessionProviderRouter.js +27 -135
  58. package/dist/application/homebrew.js +48 -0
  59. package/dist/application/javascript/ElectronActiveEvidence.js +10 -14
  60. package/dist/application/javascript/ElectronBoundaryAnalysis.js +2 -2
  61. package/dist/application/javascript/ElectronBoundaryGraphNative.js +5 -1
  62. package/dist/application/javascript/JavaScriptApplicationEvidence.js +3 -6
  63. package/dist/application/javascript/JavaScriptApplicationEvidenceGraph.js +107 -46
  64. package/dist/application/javascript/JavaScriptApplicationService.js +7 -1
  65. package/dist/application/javascript/JavaScriptApplicationWorkflowService.js +59 -45
  66. package/dist/application/javascript/JavaScriptArtifactAnalysis.js +5 -9
  67. package/dist/application/javascript/JavaScriptArtifactGraphBuilder.js +19 -27
  68. package/dist/application/javascript/JavaScriptArtifactGraphBundlers.js +11 -3
  69. package/dist/application/javascript/JavaScriptArtifactGraphContext.js +9 -0
  70. package/dist/application/javascript/JavaScriptArtifactGraphDocuments.js +8 -5
  71. package/dist/application/javascript/JavaScriptArtifactGraphFindings.js +46 -29
  72. package/dist/application/javascript/JavaScriptArtifactGraphStructure.js +0 -1
  73. package/dist/application/javascript/JavaScriptArtifactPathResolution.js +86 -27
  74. package/dist/application/javascript/JavaScriptArtifactReconstruction.js +52 -9
  75. package/dist/application/javascript/JavaScriptArtifactReconstructionInput.js +1 -0
  76. package/dist/application/javascript/JavaScriptJsonModules.js +2 -2
  77. package/dist/application/javascript/JavaScriptModuleRelationships.js +6 -18
  78. package/dist/application/javascript/JavaScriptRuntimeObservationService.js +3 -3
  79. package/dist/application/javascript/JavaScriptRuntimeReconciliationService.js +11 -27
  80. package/dist/application/javascript/JavaScriptSemanticGraphAsyncProjection.js +4 -5
  81. package/dist/application/javascript/JavaScriptSemanticGraphBuilder.js +8 -6
  82. package/dist/application/javascript/JavaScriptSemanticGraphChildProcessProjection.js +2 -3
  83. package/dist/application/javascript/JavaScriptSemanticGraphConstruction.js +7 -5
  84. package/dist/application/javascript/JavaScriptSemanticGraphDataProjection.js +3 -4
  85. package/dist/application/javascript/JavaScriptSemanticGraphEvidence.js +1 -1
  86. package/dist/application/javascript/JavaScriptSemanticGraphFingerprintProjection.js +2 -2
  87. package/dist/application/javascript/JavaScriptSemanticGraphFlowProjection.js +3 -7
  88. package/dist/application/javascript/JavaScriptSemanticGraphObjectProjection.js +76 -47
  89. package/dist/application/javascript/JavaScriptSemanticGraphProjection.js +4 -4
  90. package/dist/application/javascript/JavaScriptSemanticGraphResourceProjection.js +3 -4
  91. package/dist/application/javascript/JavaScriptSemanticGraphValueProjection.js +51 -25
  92. package/dist/application/javascript/JavaScriptSemanticTraceService.js +15 -10
  93. package/dist/application/managed/ManagedMemberComparisonService.js +2 -1
  94. package/dist/application/managed/ManagedNativeVerificationService.js +2 -1
  95. package/dist/application/native/NativeCallRoutes.js +2 -4
  96. package/dist/application/process/ProcessCli.js +11 -11
  97. package/dist/application/process/ProcessEvidence.js +0 -1
  98. package/dist/artifacts/ArtifactProvider.js +53 -30
  99. package/dist/artifacts/ArtifactProviderMetadata.js +1 -4
  100. package/dist/artifacts/ArtifactReader.js +31 -0
  101. package/dist/artifacts/AsarArtifactReader.js +81 -17
  102. package/dist/artifacts/DirectoryArtifactReader.js +2 -1
  103. package/dist/artifacts/MachOSliceArtifactReader.js +9 -2
  104. package/dist/artifacts/NativeDmgArtifactReader.js +207 -77
  105. package/dist/artifacts/NativeDmgOwnership.js +109 -0
  106. package/dist/artifacts/SafeOutputTree.js +16 -2
  107. package/dist/artifacts/ZipArtifactReader.js +11 -4
  108. package/dist/artifacts/apple/AppleAssetCatalogAnalysis.js +4 -2
  109. package/dist/artifacts/apple/DylibResolutionReader.js +17 -7
  110. package/dist/artifacts/apple/KeyedArchiveReader.js +68 -42
  111. package/dist/artifacts/apple/MachoLoadCommandReader.js +36 -6
  112. package/dist/artifacts/extraction/ArtifactExtraction.js +104 -29
  113. package/dist/artifacts/inventory/ArtifactGraphConstruction.js +71 -66
  114. package/dist/artifacts/inventory/ArtifactInventory.js +0 -1
  115. package/dist/artifacts/inventory/classify.js +33 -14
  116. package/dist/artifacts/inventory/hashStableRootArtifact.js +37 -0
  117. package/dist/artifacts/inventory/reader.js +3 -3
  118. package/dist/artifacts/inventory/scanCanonical.js +64 -34
  119. package/dist/artifacts/inventory/scanReader.js +12 -20
  120. package/dist/artifacts/javascript/JavaScriptArtifactFiles.js +65 -27
  121. package/dist/browser/BrowserScenarioPartialObservation.js +106 -0
  122. package/dist/browser/CdpBrowserProvider.js +6 -6
  123. package/dist/browser/CdpCaptureEventHandlers.js +2 -4
  124. package/dist/browser/CdpCaptureEvents.js +0 -1
  125. package/dist/browser/CdpCaptureStorageFingerprints.js +3 -3
  126. package/dist/browser/CdpCaptureValues.js +20 -0
  127. package/dist/browser/CdpElectronInspection.js +2 -2
  128. package/dist/browser/CdpElectronProvider.js +4 -5
  129. package/dist/browser/CdpElectronScriptEvents.js +2 -8
  130. package/dist/browser/CdpElectronScripts.js +4 -5
  131. package/dist/browser/CdpPageCaptureScripts.js +2 -3
  132. package/dist/browser/CdpSafeMetadata.js +10 -10
  133. package/dist/browser/CdpWebMcpDiscovery.js +16 -13
  134. package/dist/browser/PlaywrightBrowserScenarioProvider.js +64 -49
  135. package/dist/browser/PlaywrightElectronActiveActions.js +2 -56
  136. package/dist/browser/PlaywrightElectronActiveProvider.js +10 -6
  137. package/dist/browser/PlaywrightScenarioArtifacts.js +1 -1
  138. package/dist/browser/PlaywrightScenarioBrowser.js +269 -66
  139. package/dist/browser/PlaywrightScenarioEvents.js +1 -1
  140. package/dist/browser/PlaywrightScenarioSession.js +41 -32
  141. package/dist/browser/WebSourceMapFetcher.js +32 -6
  142. package/dist/browser/assets/ScenarioScriptCapture.js +8 -12
  143. package/dist/browser/assets/ScriptCaptureAdapters.js +1 -1
  144. package/dist/browser/history/CaptureFailures.js +6 -2
  145. package/dist/browser/history/MitmproxyCaptureAdapter.js +4 -2
  146. package/dist/catalogIdentity.js +0 -1
  147. package/dist/cli/analysisViewCommands.js +36 -0
  148. package/dist/cli/artifactCommands.js +11 -12
  149. package/dist/cli/coreAnalysisCommands.js +3 -3
  150. package/dist/cli/coreBinaryCommands.js +37 -28
  151. package/dist/cli/coreNativeCommands.js +9 -10
  152. package/dist/cli/electronCommands.js +12 -13
  153. package/dist/cli/interactiveSetup.js +6 -6
  154. package/dist/cli/javascriptApplicationAnalysis.js +2 -12
  155. package/dist/cli/jsonOutput.js +3 -2
  156. package/dist/cli/managedCommands.js +7 -8
  157. package/dist/cli/nativeCallCommands.js +1 -2
  158. package/dist/cli/omittableDefaults.js +50 -0
  159. package/dist/cli/processCommands.js +3 -2
  160. package/dist/cli/setupCommands.js +16 -15
  161. package/dist/cli/streamedJsonOutput.js +83 -4
  162. package/dist/cli/utilityCommands.js +10 -12
  163. package/dist/cli.js +19 -8
  164. package/dist/cliBrowserScenarioCommands.js +2 -2
  165. package/dist/cliCommandNames.js +1 -0
  166. package/dist/cliJsonFile.js +179 -0
  167. package/dist/cliJsonInput.js +60 -33
  168. package/dist/cliObservationOptions.js +4 -0
  169. package/dist/cliOutput.js +0 -38
  170. package/dist/composition/auxiliaryAnalysisProviders.js +30 -25
  171. package/dist/composition/binary.js +9 -9
  172. package/dist/composition/browserScenario.js +2 -1
  173. package/dist/composition/directAnalysis.js +20 -14
  174. package/dist/composition/electronScenario.js +1 -1
  175. package/dist/composition/optionalObservationProviders.js +12 -7
  176. package/dist/config/environment.js +6 -0
  177. package/dist/config/ghidraStartupTimeout.js +4 -9
  178. package/dist/config/homeDirectory.js +12 -0
  179. package/dist/config/mcpResponseBudget.js +9 -1
  180. package/dist/config/parseConfig.js +7 -3
  181. package/dist/config/parsers.js +19 -22
  182. package/dist/contracts/analysisViewToolContracts.js +56 -0
  183. package/dist/contracts/applicationToolContracts.js +5 -4
  184. package/dist/contracts/artifactComparisonExample.js +7 -7
  185. package/dist/contracts/artifactToolContracts.js +1 -1
  186. package/dist/contracts/browserScenarioToolContracts.js +1 -1
  187. package/dist/contracts/browserToolContracts.js +19 -15
  188. package/dist/contracts/enhancedInputs.js +2 -2
  189. package/dist/contracts/enhancedToolContracts.js +4 -3
  190. package/dist/contracts/errorSchemas.js +3 -1
  191. package/dist/contracts/evm/evmToolContracts.js +1 -1
  192. package/dist/contracts/functionComparisonExample.js +8 -0
  193. package/dist/contracts/functionWorkflowToolContracts.js +1 -1
  194. package/dist/contracts/inputSchemaPresentation.js +181 -0
  195. package/dist/contracts/investigationExamples.js +4 -3
  196. package/dist/contracts/javascript/electronToolContracts.js +3 -2
  197. package/dist/contracts/javascript/javascriptApplicationWorkflowExamples.js +3 -22
  198. package/dist/contracts/javascript/javascriptExportShapeComparisonExample.js +248 -0
  199. package/dist/contracts/javascript/javascriptRuntimeObservationToolContracts.js +1 -1
  200. package/dist/contracts/javascript/javascriptRuntimeReconciliationExample.js +8 -7
  201. package/dist/contracts/managed/managedToolContracts.js +8 -12
  202. package/dist/contracts/managed/managedWorkflowToolContracts.js +1 -1
  203. package/dist/contracts/mobileApplicationGraphExamples.js +8 -8
  204. package/dist/contracts/native/binaryDiagnosticsToolContracts.js +1 -1
  205. package/dist/contracts/native/nativeToolContracts.js +2 -2
  206. package/dist/contracts/officialToolContracts.js +2 -1
  207. package/dist/contracts/promptContracts.js +2 -2
  208. package/dist/contracts/providerSelection.js +1 -1
  209. package/dist/contracts/sessionLifecycleInputs.js +4 -3
  210. package/dist/contracts/sessionStatusContract.js +3 -2
  211. package/dist/contracts/sessionToolContracts.js +17 -4
  212. package/dist/contracts/sessionToolSchemas.js +4 -16
  213. package/dist/contracts/toolContracts.js +2 -0
  214. package/dist/contracts/toolEffects.js +1 -0
  215. package/dist/contracts/toolOutputSchemaGroups.js +138 -94
  216. package/dist/contracts/toolOutputSchemaPrimitives.js +13 -26
  217. package/dist/contracts/toolSchemaMetadata.js +18 -69
  218. package/dist/contracts/webNetworkCaptureToolContracts.js +1 -1
  219. package/dist/contracts/webRuntimeToolContracts.js +1 -1
  220. package/dist/contracts/webScriptToolContracts.js +1 -1
  221. package/dist/doctorRuntime.js +7 -5
  222. package/dist/domain/analysisErrorBase.js +5 -0
  223. package/dist/domain/analysisErrorCore.js +3 -0
  224. package/dist/domain/analysisErrorPresentation.js +22 -5
  225. package/dist/domain/analysisErrorProjection.js +24 -5
  226. package/dist/domain/analysisSnapshot.js +31 -31
  227. package/dist/domain/analysisView/analysisView.js +241 -0
  228. package/dist/domain/analysisView/analysisViewCoverage.js +19 -0
  229. package/dist/domain/analysisView/binaryLayoutView.js +159 -0
  230. package/dist/domain/analysisView/javascriptApplicationView.js +238 -0
  231. package/dist/domain/android/androidApplication.js +1 -1
  232. package/dist/domain/android/androidPartialObservation.js +36 -0
  233. package/dist/domain/apple/appleApplication.js +1 -1
  234. package/dist/domain/apple/dylibResolution.js +10 -3
  235. package/dist/domain/apple/interfaceBuilderGraph.js +0 -1
  236. package/dist/domain/apple/keyedArchive.js +26 -2
  237. package/dist/domain/artifactComparison.js +15 -6
  238. package/dist/domain/artifactGraph.js +17 -4
  239. package/dist/domain/artifactIdentity.js +8 -8
  240. package/dist/domain/artifactInspection.js +8 -8
  241. package/dist/domain/artifactInventoryEvidence.js +9 -16
  242. package/dist/domain/artifactOperationError.js +3 -3
  243. package/dist/domain/artifactPartialObservation.js +1 -0
  244. package/dist/domain/artifactPathSyntax.js +49 -0
  245. package/dist/domain/binaryTarget.js +39 -13
  246. package/dist/domain/browserCaptureComparison.js +13 -49
  247. package/dist/domain/browserCompleteness.js +3 -2
  248. package/dist/domain/browserNetworkEvidence.js +10 -4
  249. package/dist/domain/browserObservation.js +0 -1
  250. package/dist/domain/browserObservationSchemas.js +14 -3
  251. package/dist/domain/browserScenario.js +0 -1
  252. package/dist/domain/browserScenarioCapture.js +1 -2
  253. package/dist/domain/browserScenarioCaptureValues.js +2 -2
  254. package/dist/domain/browserScenarioDiff.js +0 -2
  255. package/dist/domain/browserScenarioDiffEvidence.js +0 -12
  256. package/dist/domain/browserScenarioDiffValues.js +2 -2
  257. package/dist/domain/browserScenarioNormalization.js +3 -3
  258. package/dist/domain/browserScenarioValues.js +6 -6
  259. package/dist/domain/callPath.js +15 -18
  260. package/dist/domain/callPathSchemas.js +2 -2
  261. package/dist/domain/canonicalDigest.js +7 -1
  262. package/dist/domain/canonicalOrdering.js +1 -13
  263. package/dist/domain/changedBehavior.js +5 -6
  264. package/dist/domain/comparisonSemantics.js +0 -5
  265. package/dist/domain/completionLedgerGeneration.js +2 -1
  266. package/dist/domain/configurationErrors.js +12 -0
  267. package/dist/domain/conformancePackage.js +4 -3
  268. package/dist/domain/digests.js +0 -3
  269. package/dist/domain/evidence.js +19 -40
  270. package/dist/domain/evidenceBundle.js +58 -42
  271. package/dist/domain/evidenceCompletionLedger.js +2 -1
  272. package/dist/domain/firmware/firmwareAnalysis.js +4 -3
  273. package/dist/domain/functionComparison.js +6 -6
  274. package/dist/domain/functionComparisonDimensions.js +120 -87
  275. package/dist/domain/functionComparisonNormalization.js +26 -36
  276. package/dist/domain/functionComparisonResults.js +3 -6
  277. package/dist/domain/functionComparisonSchemas.js +2 -8
  278. package/dist/domain/functionDossierEvidence.js +4 -38
  279. package/dist/domain/hopperValues.js +11 -15
  280. package/dist/domain/javascript/electronActiveObservation.js +29 -71
  281. package/dist/domain/javascript/electronObservation.js +14 -3
  282. package/dist/domain/javascript/electronStaticAnalysisBrowser.js +12 -11
  283. package/dist/domain/javascript/electronStaticAnalysisIpc.js +11 -2
  284. package/dist/domain/javascript/electronStaticAnalysisNative.js +7 -4
  285. package/dist/domain/javascript/electronStaticAnalysisValues.js +8 -4
  286. package/dist/domain/javascript/javascriptApplicationAnalysis.js +3 -1
  287. package/dist/domain/javascript/javascriptApplicationChangeGraph.js +12 -8
  288. package/dist/domain/javascript/javascriptApplicationEvidenceSchemas.js +6 -0
  289. package/dist/domain/javascript/javascriptApplicationGraph.js +41 -16
  290. package/dist/domain/javascript/javascriptApplicationGraphSchemas.js +9 -2
  291. package/dist/domain/javascript/javascriptApplicationVersionComparison.js +4 -4
  292. package/dist/domain/javascript/javascriptApplicationVersionComparisonSchemas.js +37 -22
  293. package/dist/domain/javascript/javascriptApplicationVersionItems.js +50 -36
  294. package/dist/domain/javascript/javascriptApplicationVersionKeys.js +9 -8
  295. package/dist/domain/javascript/javascriptAstFingerprint.js +2 -2
  296. package/dist/domain/javascript/javascriptAstValues.js +22 -0
  297. package/dist/{application/javascript/JavaScriptReturnShapeProjection.js → domain/javascript/javascriptExportReturnShapeProjection.js} +4 -4
  298. package/dist/domain/javascript/javascriptExportShapeComparison.js +10 -3
  299. package/dist/domain/javascript/javascriptExportShapeComparisonIdentity.js +6 -1
  300. package/dist/domain/javascript/javascriptExportShapeComparisonSchemas.js +58 -22
  301. package/dist/domain/javascript/javascriptExportShapeSelection.js +7 -7
  302. package/dist/domain/javascript/javascriptExportShapeVariants.js +70 -16
  303. package/dist/domain/javascript/javascriptFeatureSeed.js +25 -3
  304. package/dist/domain/javascript/javascriptFeatureTrace.js +7 -6
  305. package/dist/domain/javascript/javascriptFeatureTraceSchemas.js +17 -9
  306. package/dist/domain/javascript/javascriptFeatureTraversal.js +4 -5
  307. package/dist/domain/javascript/javascriptNativeHandoff.js +7 -7
  308. package/dist/domain/javascript/javascriptRuntimeLoadState.js +0 -1
  309. package/dist/domain/javascript/javascriptRuntimeObservation.js +18 -7
  310. package/dist/domain/javascript/javascriptRuntimeReconciliation.js +12 -6
  311. package/dist/domain/javascript/javascriptRuntimeReconciliationActive.js +9 -8
  312. package/dist/domain/javascript/javascriptRuntimeReconciliationCaptureParsing.js +212 -0
  313. package/dist/domain/javascript/javascriptRuntimeReconciliationGraph.js +5 -4
  314. package/dist/domain/javascript/javascriptRuntimeReconciliationInputValidation.js +28 -0
  315. package/dist/domain/javascript/javascriptRuntimeReconciliationMatching.js +6 -6
  316. package/dist/domain/javascript/javascriptRuntimeReconciliationParsing.js +12 -222
  317. package/dist/domain/javascript/javascriptRuntimeReconciliationResult.js +2 -2
  318. package/dist/domain/javascript/javascriptRuntimeReconciliationRuntime.js +15 -4
  319. package/dist/domain/javascript/javascriptRuntimeReconciliationSchemas.js +2 -2
  320. package/dist/domain/javascript/javascriptRuntimeStaticCandidates.js +7 -7
  321. package/dist/domain/javascript/javascriptSemanticAnalysis.js +209 -11
  322. package/dist/domain/javascript/javascriptSemanticAsyncEffects.js +2 -1
  323. package/dist/domain/javascript/javascriptSemanticCallResolution.js +9 -7
  324. package/dist/domain/javascript/javascriptSemanticCalls.js +2 -1
  325. package/dist/domain/javascript/javascriptSemanticChildProcesses.js +4 -3
  326. package/dist/domain/javascript/javascriptSemanticCoverage.js +20 -0
  327. package/dist/domain/javascript/javascriptSemanticDataEffectHelpers.js +7 -9
  328. package/dist/domain/javascript/javascriptSemanticDataEffects.js +4 -11
  329. package/dist/domain/javascript/javascriptSemanticFingerprints.js +2 -2
  330. package/dist/domain/javascript/javascriptSemanticGraph.js +220 -71
  331. package/dist/domain/javascript/javascriptSemanticGraphSchemas.js +19 -1
  332. package/dist/domain/javascript/javascriptSemanticIr.js +0 -4
  333. package/dist/domain/javascript/javascriptSemanticIterationSources.js +106 -0
  334. package/dist/domain/javascript/javascriptSemanticMemberMutations.js +515 -74
  335. package/dist/domain/javascript/javascriptSemanticMutationInitializers.js +190 -0
  336. package/dist/domain/javascript/javascriptSemanticMutationValues.js +44 -36
  337. package/dist/domain/javascript/javascriptSemanticObjects.js +79 -42
  338. package/dist/domain/javascript/javascriptSemanticPrimitives.js +8 -14
  339. package/dist/domain/javascript/javascriptSemanticProjection.js +21 -16
  340. package/dist/domain/javascript/javascriptSemanticPromises.js +16 -21
  341. package/dist/domain/javascript/javascriptSemanticPropertyPaths.js +23 -0
  342. package/dist/domain/javascript/javascriptSemanticProvenance.js +3 -3
  343. package/dist/domain/javascript/javascriptSemanticQuery.js +8 -2
  344. package/dist/domain/javascript/javascriptSemanticQueryIdentity.js +3 -2
  345. package/dist/domain/javascript/javascriptSemanticQuerySchemas.js +8 -9
  346. package/dist/domain/javascript/javascriptSemanticRequireOrigin.js +16 -10
  347. package/dist/domain/javascript/javascriptSemanticResourceLimits.js +1 -1
  348. package/dist/domain/javascript/javascriptSemanticResources.js +1 -1
  349. package/dist/domain/javascript/javascriptSemanticReturns.js +55 -44
  350. package/dist/domain/javascript/javascriptSemanticSlots.js +72 -0
  351. package/dist/domain/javascript/javascriptSemanticTraversal.js +6 -1
  352. package/dist/domain/javascript/javascriptSemanticValues.js +180 -76
  353. package/dist/domain/javascript/javascriptSourceMapPaths.js +114 -0
  354. package/dist/domain/javascript/javascriptSourceParser.js +34 -9
  355. package/dist/domain/javascript/javascriptStaticAnalysisBundler.js +5 -6
  356. package/dist/domain/javascript/javascriptStaticAnalysisCalls.js +2 -1
  357. package/dist/domain/javascript/javascriptStaticAnalysisHelpers.js +26 -16
  358. package/dist/domain/javascript/sourceToBundleComparison.js +19 -8
  359. package/dist/domain/javascript/sourceToBundleSignals.js +53 -25
  360. package/dist/domain/jsonSerialization.js +109 -55
  361. package/dist/domain/jsonShape.js +46 -19
  362. package/dist/domain/localPath.js +10 -4
  363. package/dist/domain/managed/managedApplicationGraph.js +10 -6
  364. package/dist/domain/managed/managedApplicationGraphNodes.js +82 -57
  365. package/dist/domain/managed/managedArtifact.js +6 -4
  366. package/dist/domain/managed/managedMemberComparison.js +2 -9
  367. package/dist/domain/managed/managedMemberComparisonMatch.js +6 -7
  368. package/dist/domain/managed/managedNativeVerification.js +0 -2
  369. package/dist/domain/managed/managedNativeVerificationMatch.js +9 -3
  370. package/dist/domain/native/binaryLayout.js +2 -3
  371. package/dist/domain/native/nativeApiBoundary.js +1 -1
  372. package/dist/domain/native/nativeCallObservation.js +3 -3
  373. package/dist/domain/native/nativeInstruction.js +7 -0
  374. package/dist/domain/native/nativeValueFlow.js +5 -11
  375. package/dist/domain/native/objcSwiftMetadata.js +15 -17
  376. package/dist/domain/native/recordedCrash.js +2 -3
  377. package/dist/domain/offsetDateTime.js +17 -0
  378. package/dist/domain/process/processCapture.js +22 -20
  379. package/dist/domain/process/processCaptureCoverage.js +70 -0
  380. package/dist/domain/process/processCaptureExample.js +45 -1
  381. package/dist/domain/process/processCaptureParsing.js +1 -34
  382. package/dist/domain/process/processCaptureValidation.js +82 -13
  383. package/dist/domain/process/processComparison.js +39 -43
  384. package/dist/domain/process/processObservation.js +10 -2
  385. package/dist/domain/process/processScenario.js +24 -2
  386. package/dist/domain/process/processTraceComparison.js +0 -2
  387. package/dist/domain/process/processTraceDimensionProjection.js +1 -1
  388. package/dist/domain/process/processTraceEvaluation.js +19 -15
  389. package/dist/domain/process/processTraceSpecification.js +4 -7
  390. package/dist/domain/providerAdapterError.js +2 -0
  391. package/dist/domain/providerCleanupError.js +6 -2
  392. package/dist/domain/reconstructionCoverage.js +7 -3
  393. package/dist/domain/reconstructionObligationLedgerSchemas.js +2 -1
  394. package/dist/domain/reconstructionReadinessSchemas.js +2 -1
  395. package/dist/domain/reconstructionUnknowns.js +4 -3
  396. package/dist/domain/reconstructionVerification.js +6 -5
  397. package/dist/domain/reconstructionVerificationSchemas.js +2 -1
  398. package/dist/domain/referenceSourceGraph.js +27 -28
  399. package/dist/domain/referenceSourceImportParsing.js +34 -45
  400. package/dist/domain/residualUnknown.js +3 -2
  401. package/dist/domain/staticRuntimeCorrelation.js +4 -3
  402. package/dist/domain/stringPatterns.js +6 -0
  403. package/dist/domain/swiftSymbolClassification.js +66 -0
  404. package/dist/domain/symbolAnalysis.js +83 -20
  405. package/dist/domain/unicodeCodePointOrder.js +6 -0
  406. package/dist/domain/webBundleAnalyzerInspection.js +9 -1
  407. package/dist/domain/webCaptureDiff.js +71 -30
  408. package/dist/domain/webCaptureDiffSchemas.js +8 -11
  409. package/dist/domain/webEventListeners.js +3 -2
  410. package/dist/domain/webExecution.js +3 -2
  411. package/dist/domain/webInventory.js +3 -2
  412. package/dist/domain/webMcpDiscovery.js +4 -3
  413. package/dist/domain/webRuntime.js +0 -2
  414. package/dist/domain/webScriptExport.js +2 -2
  415. package/dist/dotnet/ManagedArtifactInspector.js +2 -19
  416. package/dist/dotnet/ManagedMemberInspector.js +12 -18
  417. package/dist/dotnet/ManagedMemberInspectorCore.js +47 -44
  418. package/dist/dotnet/ManagedMemberInstructionDecoder.js +1 -2
  419. package/dist/dotnet/ManagedMemberRows.js +75 -62
  420. package/dist/dotnet/ManagedMetadataInventory.js +16 -22
  421. package/dist/dotnet/ManagedMethodBodyReader.js +4 -0
  422. package/dist/dotnet/ManagedNativeBoundaryHelpers.js +109 -94
  423. package/dist/dotnet/ManagedNativeBoundaryInspector.js +12 -21
  424. package/dist/dotnet/ManagedReaderFailure.js +16 -0
  425. package/dist/dotnet/ManagedStaticProvider.js +13 -12
  426. package/dist/dotnet/ManagedStaticProviderMetadata.js +1 -4
  427. package/dist/evaluation/AgentEvaluationFixtures.js +250 -0
  428. package/dist/evaluation/AgentEvaluationReport.js +28 -0
  429. package/dist/evaluation/CodexAgentEval.js +12 -8
  430. package/dist/evaluation/KnownAnswerEvaluation.js +281 -0
  431. package/dist/evm/EvmoleInterfaceProvider.js +2 -1
  432. package/dist/filesystem/RegularFile.js +41 -0
  433. package/dist/firmware/FirmwareCommand.js +9 -5
  434. package/dist/firmware/FirmwareProvider.js +4 -4
  435. package/dist/generatedPackageMetadata.js +2 -2
  436. package/dist/ghidra/GhidraAnalysisProfile.js +3 -6
  437. package/dist/ghidra/GhidraClient.js +105 -36
  438. package/dist/ghidra/GhidraClientStartup.js +0 -2
  439. package/dist/ghidra/GhidraDoctor.js +6 -5
  440. package/dist/ghidra/GhidraFunctionValues.js +3 -5
  441. package/dist/ghidra/GhidraInstallation.js +151 -22
  442. package/dist/ghidra/GhidraJavaLaunch.js +6 -2
  443. package/dist/ghidra/GhidraLauncher.js +58 -26
  444. package/dist/ghidra/GhidraProvider.js +6 -2
  445. package/dist/ghidra/GhidraProviderCapabilities.js +6 -0
  446. package/dist/ghidra/GhidraProviderClient.js +13 -3
  447. package/dist/ghidra/GhidraSessionError.js +2 -0
  448. package/dist/ghidra/GhidraSessionRoot.js +39 -0
  449. package/dist/ghidra/extensions/GhidraExtensions.js +17 -10
  450. package/dist/ghidra/extensions/nativeaot/NativeAotAdapter.js +8 -2
  451. package/dist/hopper/BridgeLauncher.js +34 -45
  452. package/dist/hopper/HopperAnalysisProfile.js +3 -8
  453. package/dist/hopper/HopperCleanup.js +56 -27
  454. package/dist/hopper/HopperClient.js +86 -65
  455. package/dist/hopper/HopperMachOImage.js +3 -2
  456. package/dist/hopper/HopperProvider.js +16 -18
  457. package/dist/hopper/HopperRegexSearch.js +3 -6
  458. package/dist/hopper/HopperTargetLease.js +132 -49
  459. package/dist/hopper/LinuxPrivateDisplayProbe.js +6 -0
  460. package/dist/ida/IdaConfiguration.js +8 -3
  461. package/dist/ida/IdaInput.js +1 -7
  462. package/dist/ida/IdaMcpConnection.js +8 -4
  463. package/dist/ida/IdaOperationRunner.js +5 -3
  464. package/dist/ida/IdaProvider.js +8 -12
  465. package/dist/ida/IdaSessionClient.js +24 -20
  466. package/dist/ida/IdaWorkspace.js +12 -13
  467. package/dist/inspector/JavaScriptRuntimeScope.js +9 -5
  468. package/dist/inspector/V8InspectorCaptureProjection.js +47 -14
  469. package/dist/inspector/V8InspectorProvider.js +97 -35
  470. package/dist/javascript/recovery/WakaruCommand.js +7 -2
  471. package/dist/javascript/recovery/WakaruExecution.js +5 -2
  472. package/dist/main/shutdown.js +81 -29
  473. package/dist/main/startup.js +9 -2
  474. package/dist/main/transport.js +23 -3
  475. package/dist/main.js +11 -18
  476. package/dist/native/AppleMachoSelection.js +16 -6
  477. package/dist/native/AppleObjcDispatchFacets.js +3 -3
  478. package/dist/native/AppleObjcProperties.js +17 -7
  479. package/dist/native/CommandRunner.js +9 -7
  480. package/dist/native/LldbCallTracer.js +249 -77
  481. package/dist/native/NativeMacOSProvider.js +32 -17
  482. package/dist/native/NativeMacOSProviderMetadata.js +1 -2
  483. package/dist/native/NativeUiHelperRuntime.js +11 -2
  484. package/dist/native/NativeUiObservation.js +2 -2
  485. package/dist/native/pwntools/PwntoolsDecoder.js +2 -1
  486. package/dist/process/DarwinProcessRunTokenReader.js +16 -2
  487. package/dist/process/ExecFileOutput.js +88 -6
  488. package/dist/process/PrivateRuntimeRoot.js +10 -5
  489. package/dist/process/ProcessOwnership.js +1 -4
  490. package/dist/process/ProcessOwnershipObservation.js +18 -16
  491. package/dist/process/ProviderProcess.js +1 -3
  492. package/dist/process/capture/FilesystemSnapshot.js +131 -24
  493. package/dist/process/capture/ProcessCaptureError.js +13 -0
  494. package/dist/process/capture/ProcessCaptureLifecycle.js +148 -74
  495. package/dist/process/capture/ProcessFilesystemEffects.js +51 -6
  496. package/dist/process/capture/ProcessHarness.js +16 -33
  497. package/dist/process/capture/ProcessNormalization.js +20 -2
  498. package/dist/process/capture/ProcessSampling.js +25 -2
  499. package/dist/process/capture/TerminalRenderer.js +14 -0
  500. package/dist/process/snapshotEnvironment.js +14 -0
  501. package/dist/server/EvidenceMcpServer.js +25 -14
  502. package/dist/server/analysisAdmission.js +8 -0
  503. package/dist/server/createServer.js +71 -59
  504. package/dist/server/mcpClientMetadata.js +12 -5
  505. package/dist/server/promptCompletion.js +3 -8
  506. package/dist/server/registerAnalysisViewTool.js +15 -0
  507. package/dist/server/registerAndroidTools.js +2 -3
  508. package/dist/server/registerApplicationTools/compareExportShapes.js +6 -6
  509. package/dist/server/registerApplicationTools/compareSourceToBundle.js +4 -5
  510. package/dist/server/registerApplicationTools/compareVersions.js +4 -5
  511. package/dist/server/registerApplicationTools/coverage.js +1 -2
  512. package/dist/server/registerApplicationTools/helpers.js +4 -4
  513. package/dist/server/registerApplicationTools/obligationLedger.js +4 -5
  514. package/dist/server/registerApplicationTools/projectMobileApplicationGraph.js +3 -4
  515. package/dist/server/registerApplicationTools/traceFeature.js +4 -5
  516. package/dist/server/registerApplicationTools/traceSemantics.js +4 -5
  517. package/dist/server/registerArtifactComparisonTool.js +4 -5
  518. package/dist/server/registerArtifactTools.js +2 -2
  519. package/dist/server/registerBinaryDiagnosticsTools.js +2 -3
  520. package/dist/server/registerBrowserScenarioTool.js +3 -4
  521. package/dist/server/registerBrowserTools.js +13 -16
  522. package/dist/server/registerBundleComparisonTool.js +5 -6
  523. package/dist/server/registerCloseLifecycleTool.js +8 -7
  524. package/dist/server/registerElectronTools.js +10 -13
  525. package/dist/server/registerEnhancedTools.js +82 -77
  526. package/dist/server/registerEvidenceTools.js +54 -47
  527. package/dist/server/registerEvmTools.js +2 -3
  528. package/dist/server/registerFirmwareTools.js +2 -3
  529. package/dist/server/registerFunctionComparisonTool.js +7 -8
  530. package/dist/server/registerInvestigationTools.js +14 -15
  531. package/dist/server/registerJavaScriptRecoveryTool.js +2 -3
  532. package/dist/server/registerJavaScriptRuntimeObservationTools.js +6 -6
  533. package/dist/server/registerManagedTools.js +7 -4
  534. package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +5 -6
  535. package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +4 -5
  536. package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +6 -7
  537. package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +6 -7
  538. package/dist/server/registerOfficialTools.js +32 -41
  539. package/dist/server/registerProcessComparisonTool.js +8 -8
  540. package/dist/server/registerRecordedCrashTools.js +2 -3
  541. package/dist/server/registerSessionRecordTools.js +15 -19
  542. package/dist/server/registerSessionStatusTool.js +3 -4
  543. package/dist/server/registerSessionTools.js +19 -19
  544. package/dist/server/registerWebModuleTool.js +2 -3
  545. package/dist/server/registerWebNetworkCaptureTool.js +2 -3
  546. package/dist/server/registerWebRuntimeTools.js +4 -5
  547. package/dist/server/registerWebScriptTool.js +2 -3
  548. package/dist/server/registerWebSourceLocationTool.js +2 -3
  549. package/dist/server/toolResult.js +66 -94
  550. package/dist/server/toolResultEncoding.js +11 -10
  551. package/dist/windows/WindowsNativeLoader.js +1 -0
  552. package/dist/windows/WindowsOwnedProcess.js +60 -15
  553. package/dist/windows/WindowsPrivateRuntime.js +7 -8
  554. package/native/windows/README.md +3 -1
  555. package/native/windows/build/manifest.json +2 -2
  556. package/native/windows/build/rea-windows-x64.node +0 -0
  557. package/package.json +42 -30
  558. package/scripts/rea.mjs +3 -6
  559. package/skills/reverse-engineer-anything/SKILL.md +14 -13
  560. package/skills/reverse-engineer-anything/references/android-applications.md +6 -3
  561. package/skills/reverse-engineer-anything/references/evidence-workflows.md +8 -4
  562. package/skills/reverse-engineer-anything/references/javascript-applications.md +16 -6
  563. package/skills/reverse-engineer-anything/references/native-and-artifacts.md +18 -0
  564. package/dist/artifacts/inventory/policy.js +0 -2
  565. package/dist/config.js +0 -1
  566. package/dist/contracts/browserCaptureToolInputSchema.js +0 -43
  567. package/dist/contracts/process/processCaptureExample.js +0 -2
  568. package/dist/contracts/toolOutputSchemas.js +0 -2
  569. package/dist/domain/managed/managedApplicationGraphNodeCoverage.js +0 -6
  570. package/dist/main/reload.js +0 -12
  571. package/dist/main/state.js +0 -3
  572. package/dist/server/registerNativeTools.js +0 -6
  573. package/dist/server/sessionToolPolicies.js +0 -2
@@ -1,12 +1,18 @@
1
1
  import { isAbsolute, relative, sep } from "node:path";
2
2
  import { z } from "zod";
3
- /** Preserve selected filesystem names while rejecting OS-invalid NUL bytes. */
3
+ /**
4
+ * Preserve selected filesystem names while rejecting OS-invalid NUL bytes.
5
+ *
6
+ * The pattern spells NUL as `\x00` rather than `\u0000`. Both accept exactly the
7
+ * same strings. The hex form also avoids the short `\0` spelling rejected by
8
+ * strict schema consumers. A client can reject its entire tool request when
9
+ * one advertised pattern cannot compile. See `offsetDateTimeSchema` for the
10
+ * same hex-escape convention.
11
+ */
4
12
  export const localPathStringSchema = z
5
13
  .string()
6
14
  .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);
15
+ .regex(/^[^\x00]*$/u, "Local filesystem paths cannot contain NUL");
10
16
  /** Test lexical containment on the host platform; callers must resolve symlinks first. */
11
17
  export const isPathWithinRoot = (root, path) => {
12
18
  const value = relative(root, path);
@@ -82,8 +82,8 @@ export const projectManagedApplicationGraph = (input) => {
82
82
  };
83
83
  const artifactNode = addArtifactNode(state);
84
84
  addArtifactIdentityNodes(state, artifactNode, parsed);
85
- const memberCounts = addMemberNodes(state, artifactNode, parsed);
86
- const boundaryCounts = addBoundaryNodes(state, artifactNode, parsed);
85
+ addMemberNodes(state, artifactNode, parsed);
86
+ addBoundaryNodes(state, artifactNode, parsed);
87
87
  const omissions = omittedCounts(parsed);
88
88
  const limitations = projectionLimitations(parsed, omissions);
89
89
  const graph = createJavaScriptApplicationGraph({
@@ -104,10 +104,13 @@ export const projectManagedApplicationGraph = (input) => {
104
104
  summary: {
105
105
  graph_nodes: graph.nodes.length,
106
106
  graph_edges: graph.edges.length,
107
- assemblies: parsed.artifact?.result.assembly === null ? 0 : 1,
108
- modules: parsed.artifact?.result.module === null ? 0 : 1,
109
- ...memberCounts,
110
- ...boundaryCounts,
107
+ assemblies: countNodes(graph.nodes, "managed-assembly"),
108
+ modules: countNodes(graph.nodes, "managed-module"),
109
+ types: countNodes(graph.nodes, "managed-type"),
110
+ methods: countNodes(graph.nodes, "managed-method"),
111
+ fields: countNodes(graph.nodes, "managed-field"),
112
+ pinvoke_imports: countNodes(graph.nodes, "managed-pinvoke-import"),
113
+ native_implementations: countNodes(graph.nodes, "managed-native-implementation"),
111
114
  },
112
115
  graph,
113
116
  coverage: managedGraphResultCoverage(omissions),
@@ -119,6 +122,7 @@ export const projectManagedApplicationGraph = (input) => {
119
122
  projection_id: `magp_${sha256(withoutId)}`,
120
123
  });
121
124
  };
125
+ const countNodes = (nodes, kind) => nodes.filter((node) => node.kind === kind).length;
122
126
  const parseManagedInputs = (input) => ({
123
127
  artifact: input.managed_artifact === undefined
124
128
  ? null
@@ -2,7 +2,6 @@ import { basename } from "node:path";
2
2
  import { createJavaScriptApplicationEdge, createJavaScriptApplicationNode, } from "../javascript/javascriptApplicationGraph.js";
3
3
  import { managedSourceCoverage } from "./managedApplicationGraphCoverage.js";
4
4
  import {} from "./managedArtifact.js";
5
- import { moduleCoverageState } from "./managedApplicationGraphNodeCoverage.js";
6
5
  /** Add the root managed artifact node to the graph state. */
7
6
  export const addArtifactNode = (state) => {
8
7
  const node = createJavaScriptApplicationNode({
@@ -19,7 +18,7 @@ export const addArtifactNode = (state) => {
19
18
  format: "pe",
20
19
  source: "managed-application-graph",
21
20
  },
22
- evidence: managedEvidence(state, "project-managed-artifact"),
21
+ evidence: projectedManagedEvidence(state, "project-managed-artifact"),
23
22
  },
24
23
  ],
25
24
  });
@@ -28,36 +27,36 @@ export const addArtifactNode = (state) => {
28
27
  };
29
28
  /** Add managed assembly and module identity nodes for the artifact. */
30
29
  export const addArtifactIdentityNodes = (state, artifactNode, parsed) => {
31
- const artifact = parsed.artifact?.result;
32
- const artifactCoverage = managedSourceCoverage(parsed.artifact?.result.coverage.state ?? "complete");
33
- if (artifact?.assembly !== undefined && artifact.assembly !== null) {
30
+ const artifactInput = parsed.artifact;
31
+ if (artifactInput !== null && artifactInput.result.assembly !== null) {
32
+ const assemblyFacts = artifactInput.result.assembly;
33
+ const artifactEvidence = sourceManagedEvidence(state, artifactInput.evidence, artifactInput.result.coverage.state);
34
34
  const assembly = createJavaScriptApplicationNode({
35
35
  kind: "managed-assembly",
36
- identity: artifactLocalIdentity(state.artifactSha256, "managed-assembly", artifact.assembly.token),
36
+ identity: artifactLocalIdentity(state.artifactSha256, "managed-assembly", assemblyFacts.token),
37
37
  observations: [
38
38
  {
39
- label: artifact.assembly.name,
39
+ label: assemblyFacts.name,
40
40
  properties: {
41
- name: artifact.assembly.name,
42
- version: artifact.assembly.version,
43
- culture: artifact.assembly.culture,
44
- public_key_kind: artifact.assembly.public_key.kind,
41
+ name: assemblyFacts.name,
42
+ version: assemblyFacts.version,
43
+ culture: assemblyFacts.culture,
44
+ public_key_kind: assemblyFacts.public_key.kind,
45
45
  },
46
- evidence: managedEvidence(state, "inspect_managed_artifact", artifactCoverage),
46
+ evidence: artifactEvidence,
47
47
  },
48
48
  ],
49
49
  });
50
50
  state.nodes.push(assembly);
51
51
  addContainsEdge(state, artifactNode, assembly, {
52
52
  kind: "declares-managed-assembly",
53
- coverage: artifactCoverage,
53
+ coverage: artifactEvidence.coverage,
54
54
  });
55
55
  }
56
- const module = artifact?.module ??
57
- parsed.members?.result.module ??
58
- parsed.boundaries?.result.module;
59
- if (module !== undefined && module !== null) {
60
- const moduleCoverage = managedSourceCoverage(moduleCoverageState(parsed));
56
+ const moduleSource = selectModuleSource(parsed);
57
+ if (moduleSource !== null) {
58
+ const { module } = moduleSource;
59
+ const moduleEvidence = sourceManagedEvidence(state, moduleSource.evidence, moduleSource.coverageState);
61
60
  const moduleNode = createJavaScriptApplicationNode({
62
61
  kind: "managed-module",
63
62
  identity: artifactLocalIdentity(state.artifactSha256, "managed-module", module.mvid ?? module.token),
@@ -70,28 +69,51 @@ export const addArtifactIdentityNodes = (state, artifactNode, parsed) => {
70
69
  generation: module.generation,
71
70
  token: module.token,
72
71
  },
73
- evidence: managedEvidence(state, "inspect_managed_artifact", moduleCoverage),
72
+ evidence: moduleEvidence,
74
73
  },
75
74
  ],
76
75
  });
77
76
  state.nodes.push(moduleNode);
78
77
  addContainsEdge(state, artifactNode, moduleNode, {
79
78
  kind: "declares-managed-module",
80
- coverage: moduleCoverage,
79
+ coverage: moduleEvidence.coverage,
81
80
  });
82
81
  }
83
82
  };
83
+ const selectModuleSource = (parsed) => {
84
+ if (parsed.artifact?.result.module != null)
85
+ return {
86
+ module: parsed.artifact.result.module,
87
+ evidence: parsed.artifact.evidence,
88
+ coverageState: parsed.artifact.result.coverage.state,
89
+ };
90
+ if (parsed.members?.result.module != null)
91
+ return {
92
+ module: parsed.members.result.module,
93
+ evidence: parsed.members.evidence,
94
+ coverageState: parsed.members.result.coverage.state,
95
+ };
96
+ if (parsed.boundaries?.result.module != null)
97
+ return {
98
+ module: parsed.boundaries.result.module,
99
+ evidence: parsed.boundaries.evidence,
100
+ coverageState: parsed.boundaries.result.coverage.state,
101
+ };
102
+ return null;
103
+ };
84
104
  /** Add managed type, method, and field nodes from member evidence. */
85
105
  export const addMemberNodes = (state, artifactNode, parsed) => {
86
- const members = parsed.members?.result;
87
- if (members === undefined)
88
- return { types: 0, methods: 0, fields: 0 };
106
+ const memberInput = parsed.members;
107
+ if (memberInput === null)
108
+ return;
109
+ const members = memberInput.result;
89
110
  const { types, methods, fields } = members;
90
111
  const typeCoverage = managedSourceCoverage(members.coverage.state);
91
112
  const methodCoverage = managedSourceCoverage(members.coverage.state);
92
113
  const fieldCoverage = managedSourceCoverage(members.coverage.state);
114
+ const sourceEvidence = sourceManagedEvidence(state, memberInput.evidence, members.coverage.state);
93
115
  for (const type of types) {
94
- const node = typeNode(state, type, typeCoverage);
116
+ const node = typeNode(state, type, sourceEvidence);
95
117
  state.nodes.push(node);
96
118
  state.typeNodes.set(type.token, node);
97
119
  addContainsEdge(state, artifactNode, node, {
@@ -100,7 +122,7 @@ export const addMemberNodes = (state, artifactNode, parsed) => {
100
122
  });
101
123
  }
102
124
  for (const method of methods) {
103
- const node = methodNode(state, method, methodCoverage);
125
+ const node = methodNode(state, method, sourceEvidence);
104
126
  state.nodes.push(node);
105
127
  state.methodNodes.set(method.token, node);
106
128
  const owner = method.declaring_type_token === null
@@ -112,7 +134,7 @@ export const addMemberNodes = (state, artifactNode, parsed) => {
112
134
  });
113
135
  }
114
136
  for (const field of fields) {
115
- const node = fieldNode(state, field, fieldCoverage);
137
+ const node = fieldNode(state, field, sourceEvidence);
116
138
  state.nodes.push(node);
117
139
  state.fieldNodes.set(field.token, node);
118
140
  const owner = field.declaring_type_token === null
@@ -123,14 +145,9 @@ export const addMemberNodes = (state, artifactNode, parsed) => {
123
145
  coverage: fieldCoverage,
124
146
  });
125
147
  }
126
- return {
127
- types: types.length,
128
- methods: methods.length,
129
- fields: fields.length,
130
- };
131
148
  };
132
149
  /** Build a managed type application node. */
133
- const typeNode = (state, type, coverage) => createJavaScriptApplicationNode({
150
+ const typeNode = (state, type, evidence) => createJavaScriptApplicationNode({
134
151
  kind: "managed-type",
135
152
  identity: artifactLocalIdentity(state.artifactSha256, "managed-type-token", type.token),
136
153
  observations: [
@@ -144,12 +161,12 @@ const typeNode = (state, type, coverage) => createJavaScriptApplicationNode({
144
161
  flags: type.flags,
145
162
  extends_token: type.extends_token,
146
163
  },
147
- evidence: managedEvidence(state, "inspect_managed_members", coverage),
164
+ evidence,
148
165
  },
149
166
  ],
150
167
  });
151
168
  /** Build a managed method application node. */
152
- const methodNode = (state, method, coverage) => createJavaScriptApplicationNode({
169
+ const methodNode = (state, method, evidence) => createJavaScriptApplicationNode({
153
170
  kind: "managed-method",
154
171
  identity: artifactLocalIdentity(state.artifactSha256, "managed-method-token", method.token),
155
172
  observations: [
@@ -169,12 +186,12 @@ const methodNode = (state, method, coverage) => createJavaScriptApplicationNode(
169
186
  normalized_il_sha256: method.body.normalized_il_sha256,
170
187
  il_size: method.body.il_size,
171
188
  },
172
- evidence: managedEvidence(state, "inspect_managed_members", coverage),
189
+ evidence,
173
190
  },
174
191
  ],
175
192
  });
176
193
  /** Build a managed field application node. */
177
- const fieldNode = (state, field, coverage) => createJavaScriptApplicationNode({
194
+ const fieldNode = (state, field, evidence) => createJavaScriptApplicationNode({
178
195
  kind: "managed-field",
179
196
  identity: artifactLocalIdentity(state.artifactSha256, "managed-field-token", field.token),
180
197
  observations: [
@@ -191,24 +208,30 @@ const fieldNode = (state, field, coverage) => createJavaScriptApplicationNode({
191
208
  signature_sha256: field.signature.raw_sha256,
192
209
  signature_status: field.signature.parse_status,
193
210
  },
194
- evidence: managedEvidence(state, "inspect_managed_members", coverage),
211
+ evidence,
195
212
  },
196
213
  ],
197
214
  });
198
215
  /** Add P/Invoke import and native implementation boundary nodes. */
199
216
  export const addBoundaryNodes = (state, artifactNode, parsed) => {
200
- const boundaries = parsed.boundaries?.result;
201
- if (boundaries === undefined)
202
- return { pinvoke_imports: 0, native_implementations: 0 };
217
+ const boundaryInput = parsed.boundaries;
218
+ if (boundaryInput === null)
219
+ return;
220
+ const boundaries = boundaryInput.result;
203
221
  const { pinvoke_imports: pinvokes, native_implementations: implementations } = boundaries;
204
222
  const pinvokeCoverage = managedSourceCoverage(boundaries.coverage.state);
205
223
  const implementationCoverage = managedSourceCoverage(boundaries.coverage.state);
224
+ const sourceEvidence = sourceManagedEvidence(state, boundaryInput.evidence, boundaries.coverage.state);
206
225
  for (const pinvoke of pinvokes) {
207
- const node = pinvokeNode(state, pinvoke, pinvokeCoverage);
226
+ const node = pinvokeNode(state, pinvoke, sourceEvidence);
208
227
  state.nodes.push(node);
209
- const owner = pinvoke.member_token === null
210
- ? artifactNode
211
- : (state.methodNodes.get(pinvoke.member_token) ?? artifactNode);
228
+ const method = pinvoke.member_token === null
229
+ ? undefined
230
+ : state.methodNodes.get(pinvoke.member_token);
231
+ const memberEvidence = method === undefined || parsed.members === null
232
+ ? undefined
233
+ : parsed.members.evidence;
234
+ const owner = method ?? artifactNode;
212
235
  state.edges.push(createJavaScriptApplicationEdge({
213
236
  source_node_id: owner.node_id,
214
237
  target_node_id: node.node_id,
@@ -218,11 +241,11 @@ export const addBoundaryNodes = (state, artifactNode, parsed) => {
218
241
  import_name: pinvoke.import_name,
219
242
  import_scope_name: pinvoke.import_scope_name,
220
243
  },
221
- evidence: managedEvidence(state, "inspect_managed_native_boundaries", pinvokeCoverage),
244
+ evidence: pinvokeAssociationEvidence(state, boundaryInput.evidence, pinvokeCoverage, memberEvidence),
222
245
  }));
223
246
  }
224
247
  for (const implementation of implementations) {
225
- const node = nativeImplementationNode(state, implementation, implementationCoverage);
248
+ const node = nativeImplementationNode(state, implementation, sourceEvidence);
226
249
  state.nodes.push(node);
227
250
  const owner = state.methodNodes.get(implementation.token) ?? artifactNode;
228
251
  addContainsEdge(state, owner, node, {
@@ -230,13 +253,9 @@ export const addBoundaryNodes = (state, artifactNode, parsed) => {
230
253
  coverage: implementationCoverage,
231
254
  });
232
255
  }
233
- return {
234
- pinvoke_imports: pinvokes.length,
235
- native_implementations: implementations.length,
236
- };
237
256
  };
238
257
  /** Build a managed P/Invoke import application node. */
239
- const pinvokeNode = (state, pinvoke, coverage) => createJavaScriptApplicationNode({
258
+ const pinvokeNode = (state, pinvoke, evidence) => createJavaScriptApplicationNode({
240
259
  kind: "managed-pinvoke-import",
241
260
  identity: artifactLocalIdentity(state.artifactSha256, "managed-pinvoke-token", pinvoke.token),
242
261
  observations: [
@@ -252,12 +271,12 @@ const pinvokeNode = (state, pinvoke, coverage) => createJavaScriptApplicationNod
252
271
  call_convention: pinvoke.call_convention,
253
272
  verification: pinvoke.verification,
254
273
  },
255
- evidence: managedEvidence(state, "inspect_managed_native_boundaries", coverage),
274
+ evidence,
256
275
  },
257
276
  ],
258
277
  });
259
278
  /** Build a managed native implementation application node. */
260
- const nativeImplementationNode = (state, implementation, coverage) => createJavaScriptApplicationNode({
279
+ const nativeImplementationNode = (state, implementation, evidence) => createJavaScriptApplicationNode({
261
280
  kind: "managed-native-implementation",
262
281
  identity: artifactLocalIdentity(state.artifactSha256, "managed-native-implementation-token", implementation.token),
263
282
  observations: [
@@ -273,7 +292,7 @@ const nativeImplementationNode = (state, implementation, coverage) => createJava
273
292
  boundary_kind: implementation.boundary_kind,
274
293
  body_interpretation: implementation.body_interpretation,
275
294
  },
276
- evidence: managedEvidence(state, "inspect_managed_native_boundaries", coverage),
295
+ evidence,
277
296
  },
278
297
  ],
279
298
  });
@@ -284,7 +303,7 @@ const addContainsEdge = (state, source, target, options) => {
284
303
  target_node_id: target.node_id,
285
304
  relation: "contains",
286
305
  properties: { kind: options.kind },
287
- evidence: managedEvidence(state, "project-managed-contains", options.coverage),
306
+ evidence: projectedManagedEvidence(state, "project-managed-contains", options.coverage),
288
307
  }));
289
308
  };
290
309
  /** Build an artifact-local key identity for a managed graph entity. */
@@ -296,7 +315,13 @@ const artifactLocalIdentity = (artifactSha256, namespace, key) => ({
296
315
  key,
297
316
  });
298
317
  /** Build managed static-analysis evidence for a graph observation. */
299
- const managedEvidence = (state, operation, coverage = managedSourceCoverage("complete")) => ({
318
+ const sourceManagedEvidence = (state, source, coverageState) => createManagedEvidence(state, source.operation, managedSourceCoverage(coverageState), [source.evidence_id]);
319
+ const projectedManagedEvidence = (state, operation, coverage = managedSourceCoverage("complete")) => createManagedEvidence(state, operation, coverage, state.evidenceLinks);
320
+ const pinvokeAssociationEvidence = (state, boundaryEvidence, coverage, memberEvidence) => createManagedEvidence(state, boundaryEvidence.operation, coverage, [
321
+ boundaryEvidence.evidence_id,
322
+ ...(memberEvidence === undefined ? [] : [memberEvidence.evidence_id]),
323
+ ]);
324
+ const createManagedEvidence = (state, operation, coverage, evidenceIds) => ({
300
325
  authority: "managed-static-analysis",
301
326
  state: "observed",
302
327
  confidence: "exact",
@@ -324,7 +349,7 @@ const managedEvidence = (state, operation, coverage = managedSourceCoverage("com
324
349
  : [
325
350
  "The source managed Evidence slice is incomplete; unreturned or unavailable items remain unobserved.",
326
351
  ],
327
- evidence_ids: state.evidenceLinks,
352
+ evidence_ids: [...evidenceIds],
328
353
  });
329
354
  /** Sanitize an artifact path into a managed graph location. */
330
355
  const graphArtifactPath = (path) => {
@@ -413,7 +413,8 @@ export const managedNativeBoundaryInspectionSchema = z.object({
413
413
  requires_artifact_sha256: digestSchema,
414
414
  requires_mvid: cliMetadataGuidSchema.nullable(),
415
415
  }),
416
- cli_native: z.object({
416
+ cli_native: z
417
+ .object({
417
418
  il_only: z.boolean(),
418
419
  requires_32bit: z.boolean(),
419
420
  strong_name_signed: z.boolean(),
@@ -421,7 +422,8 @@ export const managedNativeBoundaryInspectionSchema = z.object({
421
422
  ready_to_run_signature: z.boolean(),
422
423
  managed_native_header_rva: z.number().int().min(0).max(0xffff_ffff),
423
424
  managed_native_header_size: z.number().int().min(0).max(0xffff_ffff),
424
- }),
425
+ })
426
+ .nullable(),
425
427
  module_refs: z.array(managedModuleReferenceSchema),
426
428
  pinvoke_imports: z.array(managedNativeImportSchema),
427
429
  native_implementations: z.array(managedNativeImplementationSchema),
@@ -429,8 +431,8 @@ export const managedNativeBoundaryInspectionSchema = z.object({
429
431
  module_ref_count: z.number().int().min(0),
430
432
  pinvoke_import_count: z.number().int().min(0),
431
433
  native_implementation_count: z.number().int().min(0),
432
- ready_to_run: z.boolean(),
433
- mixed_mode_or_native_header: z.boolean(),
434
+ ready_to_run: z.boolean().nullable(),
435
+ mixed_mode_or_native_header: z.boolean().nullable(),
434
436
  }),
435
437
  coverage: z.object({
436
438
  state: z.enum(["complete", "partial", "unavailable"]),
@@ -165,18 +165,12 @@ export const managedMemberComparisonResultSchema = z.strictObject({
165
165
  });
166
166
  /** Compare managed members with constrained exact and structural identities. */
167
167
  export const compareManagedMembers = (left, right) => {
168
- const leftCoverage = {
169
- sourceComplete: left.result.coverage.state === "complete",
170
- };
171
- const rightCoverage = {
172
- sourceComplete: right.result.coverage.state === "complete",
173
- };
174
168
  const { methodMatches, fieldMatches } = keyMembers(left, right);
175
169
  const itemContext = {
176
170
  leftEvidenceId: left.evidenceId,
177
171
  rightEvidenceId: right.evidenceId,
178
- leftComplete: leftCoverage.sourceComplete,
179
- rightComplete: rightCoverage.sourceComplete,
172
+ leftComplete: left.result.metadata.status === "complete",
173
+ rightComplete: right.result.metadata.status === "complete",
180
174
  };
181
175
  const methodItems = buildMethodItems(methodMatches, itemContext);
182
176
  const fieldItems = buildFieldItems(fieldMatches, itemContext);
@@ -212,4 +206,3 @@ export const compareManagedMembers = (left, right) => {
212
206
  };
213
207
  return managedMemberComparisonResultSchema.parse(result);
214
208
  };
215
- export { parseManagedMemberEvidence } from "./managedMemberComparisonMatch.js";
@@ -11,21 +11,21 @@ export const sha256 = (value) => {
11
11
  const keyMethod = (item) => ({
12
12
  item,
13
13
  exactKey: item.body.status === "present" && item.body.normalized_il_sha256 !== null
14
- ? stableKey([
14
+ ? sha256([
15
15
  "method-exact",
16
16
  item.signature.raw_sha256,
17
17
  item.body.normalized_il_sha256,
18
18
  ])
19
19
  : null,
20
20
  // The raw blob is the exact signature; decoding only feeds shape keys.
21
- signatureKey: stableKey([
21
+ signatureKey: sha256([
22
22
  "method-signature",
23
23
  item.declaring_type,
24
24
  item.name,
25
25
  item.signature.raw_sha256,
26
26
  ]),
27
27
  structuralKey: item.signature.parse_status === "decoded" && item.body.status === "present"
28
- ? stableKey([
28
+ ? sha256([
29
29
  "method-structural",
30
30
  item.signature.kind,
31
31
  item.signature.calling_convention,
@@ -56,24 +56,23 @@ const keyMethod = (item) => ({
56
56
  const keyField = (item) => ({
57
57
  item,
58
58
  exactKey: item.signature.parse_status === "decoded"
59
- ? stableKey(["field-exact", item.signature.raw_sha256])
59
+ ? sha256(["field-exact", item.signature.raw_sha256])
60
60
  : null,
61
61
  // Only an undecoded field reaches this round: a decoded field with the
62
62
  // same raw signature already met its counterpart in the exact round.
63
- signatureKey: stableKey([
63
+ signatureKey: sha256([
64
64
  "field-signature",
65
65
  item.declaring_type,
66
66
  item.name,
67
67
  item.signature.raw_sha256,
68
68
  ]),
69
- structuralKey: stableKey([
69
+ structuralKey: sha256([
70
70
  "field-structural",
71
71
  item.signature.kind,
72
72
  item.signature.field_type,
73
73
  item.flags,
74
74
  ]),
75
75
  });
76
- const stableKey = (value) => sha256(value);
77
76
  const matchMethods = (left, right) => matchByKeys({
78
77
  left,
79
78
  right,
@@ -4,8 +4,6 @@ import { managedNativeBoundaryInspectionSchema, } from "./managedArtifact.js";
4
4
  import { parseManagedInspectionEvidence } from "./managedInspectionEvidence.js";
5
5
  import { managedNativeVerificationResultSchema, } from "./managedNativeVerificationSchemas.js";
6
6
  import { buildVerificationResult, collectNativeSymbols, verifyPinvoke, } from "./managedNativeVerificationMatch.js";
7
- export { managedNativeVerificationInputSchema, } from "./managedNativeVerificationSchemas.js";
8
- export { managedNativeVerificationResultSchema };
9
7
  const sha256 = (value) => {
10
8
  const serialized = canonicalize(value);
11
9
  if (serialized === undefined)
@@ -71,16 +71,22 @@ const sameSymbolName = (expected, native) => expected ===
71
71
  : native.name);
72
72
  const normalizeModule = (value) => basename(value)
73
73
  .toLowerCase()
74
- .replace(/^lib/u, "")
75
74
  .replace(/\.(dll|dylib|so|node|exe)$/u, "");
75
+ const nativeModuleIdentities = (value) => {
76
+ const filename = basename(value).toLowerCase();
77
+ const stem = normalizeModule(filename);
78
+ const identities = new Set([stem]);
79
+ if (/\.(dylib|so)$/u.test(filename) && stem.startsWith("lib"))
80
+ identities.add(stem.slice("lib".length));
81
+ return identities;
82
+ };
76
83
  const moduleCompatible = (scope, symbol) => {
77
84
  if (scope === null)
78
85
  return true;
79
86
  const expected = normalizeModule(scope);
80
87
  return [symbol.module_name, symbol.module_path]
81
88
  .filter((value) => value !== null)
82
- .map(normalizeModule)
83
- .some((value) => value === expected);
89
+ .some((value) => nativeModuleIdentities(value).has(expected));
84
90
  };
85
91
  const candidateNames = (managed) => {
86
92
  const names = new Set([managed.import_name]);
@@ -1,11 +1,10 @@
1
1
  import { z } from "zod";
2
+ import { CANONICAL_BASE64_PATTERN } from "../stringPatterns.js";
2
3
  const unsignedHex = z.string().regex(/^0x(?:0|[1-9a-f][0-9a-f]{0,15})$/);
3
4
  const index = z.number().int().nonnegative();
4
5
  const scalar = z.union([z.string(), z.number().int()]);
5
6
  const range = z.strictObject({ offset: unsignedHex, bytes: unsignedHex });
6
- const canonicalBase64 = z
7
- .string()
8
- .regex(/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/][AQgw]==|[A-Za-z0-9+/]{2}[AEIMQUYcgkosw048]=)?$/);
7
+ const canonicalBase64 = z.string().regex(CANONICAL_BASE64_PATTERN);
9
8
  const name = z.strictObject({
10
9
  display: z.string(),
11
10
  bytes_base64: canonicalBase64.nullable(),
@@ -71,7 +71,7 @@ const inferredJumpTableSchema = z
71
71
  dispatch_address: z.string().min(1),
72
72
  data_sources: z.array(jumpTableDataSourceSchema),
73
73
  mappings: z.array(jumpTableMappingSchema),
74
- default_targets: z.array(jumpTableDefaultTargetSchema).default([]),
74
+ default_targets: z.array(jumpTableDefaultTargetSchema),
75
75
  limitations: z.array(z.string()),
76
76
  })
77
77
  .strict();
@@ -3,11 +3,11 @@ import { localPathStringSchema } from "../localPath.js";
3
3
  const hexSchema = z.string().regex(/^0x[0-9a-f]+$/u);
4
4
  const nativeString = z
5
5
  .string()
6
- .regex(/^[^\0]*$/u, "Native launch and breakpoint strings cannot contain NUL");
6
+ .regex(/^[^\x00]*$/u, "Native launch and breakpoint strings cannot contain NUL");
7
7
  /** Objective-C class names and selectors never contain spaces or brackets. */
8
8
  const objcName = nativeString
9
9
  .min(1)
10
- .regex(/^[^\s[\]]+$/u, "Use the bare name without spaces or brackets");
10
+ .regex(/^[^\s\x5b\x5d]+$/u, "Use the bare name without spaces or brackets");
11
11
  const functionBreakpoint = {
12
12
  kind: z.literal("function"),
13
13
  name: nativeString
@@ -46,7 +46,7 @@ export const nativeCallObservationInputSchema = z.strictObject({
46
46
  .record(z
47
47
  .string()
48
48
  .min(1)
49
- .regex(/^[^=\0]+$/u, "Environment names cannot contain '=' or NUL"), z.string().regex(/^[^\0]*$/u, "Environment values cannot contain NUL"))
49
+ .regex(/^[^=\x00]+$/u, "Environment names cannot contain '=' or NUL"), z.string().regex(/^[^\x00]*$/u, "Environment values cannot contain NUL"))
50
50
  .default({})
51
51
  .describe("Overrides on top of the environment REA runs with."),
52
52
  working_directory: localPathStringSchema.optional(),
@@ -54,6 +54,13 @@ export const nativeInstructionSchema = z.strictObject({
54
54
  conditional: z.boolean(),
55
55
  computed: z.boolean(),
56
56
  direct_destinations: z.array(z.string()),
57
+ classification_evidence: z
58
+ .array(z.strictObject({
59
+ source: z.string().min(1),
60
+ value: z.string().min(1),
61
+ }))
62
+ .optional()
63
+ .describe("Observed provider facts used to classify flow; older captures or other providers may omit them."),
57
64
  }),
58
65
  references: z.array(reference),
59
66
  limitations: z.array(z.string()),
@@ -16,9 +16,7 @@ export const nativePcodeOperationSchema = z.strictObject({
16
16
  sequence: z.number().int().nonnegative(),
17
17
  opcode: z.string().min(1),
18
18
  is_dead: z.boolean(),
19
- block_membership: z
20
- .enum(["member", "detached", "unavailable"])
21
- .default("unavailable"),
19
+ block_membership: z.enum(["member", "detached", "unavailable"]),
22
20
  inputs: z.array(nativeVarnodeSchema),
23
21
  output: nativeVarnodeSchema.nullable(),
24
22
  });
@@ -50,20 +48,16 @@ export const nativeValueFlowSchema = z.discriminatedUnion("available", [
50
48
  operations: z.array(nativePcodeOperationSchema),
51
49
  def_use: z.array(nativePcodeDefUseSchema),
52
50
  effects: z.array(nativePcodeEffectSchema),
53
- parameters: z
54
- .array(z.strictObject({
51
+ parameters: z.array(z.strictObject({
55
52
  ordinal: z.number().int().nonnegative(),
56
53
  name: z.string(),
57
54
  data_type: z.string(),
58
- }))
59
- .default([]),
60
- parameter_uses: z
61
- .array(z.strictObject({
55
+ })),
56
+ parameter_uses: z.array(z.strictObject({
62
57
  ordinal: z.number().int().nonnegative(),
63
58
  use: z.string(),
64
59
  input_index: z.number().int().nonnegative(),
65
- }))
66
- .default([]),
60
+ })),
67
61
  truncated: z.boolean(),
68
62
  omitted_operations_lower_bound: z.number().int().nonnegative(),
69
63
  known_omitted_inputs: z.number().int().nonnegative(),