rea-agents 3.0.0 → 3.2.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 (628) hide show
  1. package/README.md +83 -108
  2. package/bridge/ghidra/ReaGhidraBridge.java +609 -841
  3. package/bridge/hopper_bridge.py +99 -344
  4. package/dist/application/AbortablePromise.js +6 -3
  5. package/dist/application/AnalysisContextQueries.js +21 -9
  6. package/dist/application/AnalysisSnapshotCache.js +0 -1
  7. package/dist/application/AnalysisSnapshotFiles.js +7 -7
  8. package/dist/application/AndroidApplicationService.js +1 -1
  9. package/dist/application/AppleApplicationService.js +1 -1
  10. package/dist/application/ArtifactExtraction.js +35 -54
  11. package/dist/application/ArtifactExtractionDestination.js +17 -0
  12. package/dist/application/ArtifactGraphConstruction.js +2 -17
  13. package/dist/application/ArtifactInventory/classify.js +2 -6
  14. package/dist/application/ArtifactInventory/hash.js +2 -20
  15. package/dist/application/ArtifactInventory/policy.js +17 -0
  16. package/dist/application/ArtifactInventory/reader.js +1 -4
  17. package/dist/application/ArtifactInventory/scanCanonical.js +8 -15
  18. package/dist/application/ArtifactInventory/scanReader.js +76 -58
  19. package/dist/application/ArtifactInventory/types.js +1 -5
  20. package/dist/application/ArtifactInventory.js +6 -14
  21. package/dist/application/AuthorizedArtifactInventory.js +3 -13
  22. package/dist/application/BinarySession.js +54 -28
  23. package/dist/application/BinarySessionComposition.js +0 -11
  24. package/dist/application/BinarySessionOpen.js +2 -1
  25. package/dist/application/BinarySessionRecords.js +24 -86
  26. package/dist/application/BinarySessionStatus.js +16 -21
  27. package/dist/application/BinaryTargetResolver.js +216 -0
  28. package/dist/application/BrowserEvidence.js +39 -57
  29. package/dist/application/BrowserObservationService.js +3 -6
  30. package/dist/application/BrowserScenarioCaptureService.js +3 -6
  31. package/dist/application/BrowserScenarioEvidence.js +3 -3
  32. package/dist/application/CallPathTracing.js +2 -36
  33. package/dist/application/CapabilityClientRequirements.js +26 -0
  34. package/dist/application/CapabilityInventory.js +143 -77
  35. package/dist/application/ClientConfigurationDocument.js +27 -0
  36. package/dist/application/ClientRegistrationStatus.js +16 -13
  37. package/dist/application/CommandShimReplay.js +14 -1
  38. package/dist/application/DirectAnalysis.js +22 -46
  39. package/dist/application/DirectAnalysisStatus.js +5 -61
  40. package/dist/application/Doctor.js +11 -32
  41. package/dist/application/DoctorDiagnostics.js +1 -2
  42. package/dist/application/DoctorScope.js +1 -1
  43. package/dist/application/ElectronActiveEvidence.js +50 -0
  44. package/dist/application/ElectronActiveObservationPort.js +1 -0
  45. package/dist/application/ElectronActiveObservationService.js +78 -0
  46. package/dist/application/ElectronBoundaryAnalysis.js +7 -8
  47. package/dist/application/ElectronBoundaryGraphContext.js +1 -1
  48. package/dist/application/ElectronBoundaryGraphIpc.js +3 -3
  49. package/dist/application/ElectronBoundaryGraphNative.js +1 -2
  50. package/dist/application/ElectronBoundaryGraphWindows.js +6 -8
  51. package/dist/application/ElectronEvidence.js +4 -7
  52. package/dist/application/ElectronObservationService.js +5 -9
  53. package/dist/application/EnhancedLiteralTracing.js +42 -65
  54. package/dist/application/EnhancedTools.js +98 -64
  55. package/dist/application/EvidenceBundleCommands.js +16 -12
  56. package/dist/application/EvidenceBundleFiles.js +9 -15
  57. package/dist/application/EvidenceLedger.js +14 -42
  58. package/dist/application/FilesystemSnapshot.js +2 -3
  59. package/dist/application/InterfaceBuilderAnalysis.js +266 -0
  60. package/dist/application/InventoryProjectionEvidence.js +4 -2
  61. package/dist/application/InvestigationProviders.js +1 -1
  62. package/dist/application/JavaScriptApplicationEvidence.js +2 -5
  63. package/dist/application/JavaScriptApplicationEvidenceGraph.js +6 -10
  64. package/dist/application/JavaScriptApplicationService.js +6 -29
  65. package/dist/application/JavaScriptApplicationWorkflowEvidence.js +5 -5
  66. package/dist/application/JavaScriptApplicationWorkflowService.js +0 -8
  67. package/dist/application/JavaScriptArtifactAnalysis.js +38 -127
  68. package/dist/application/JavaScriptArtifactFiles.js +67 -107
  69. package/dist/application/JavaScriptArtifactGraphAccumulator.js +0 -7
  70. package/dist/application/JavaScriptArtifactGraphBuilder.js +7 -58
  71. package/dist/application/JavaScriptArtifactGraphBundlers.js +1 -6
  72. package/dist/application/JavaScriptArtifactGraphContext.js +12 -39
  73. package/dist/application/JavaScriptArtifactGraphDocuments.js +4 -11
  74. package/dist/application/JavaScriptArtifactGraphEvidence.js +0 -14
  75. package/dist/application/JavaScriptArtifactGraphFindings.js +3 -3
  76. package/dist/application/JavaScriptArtifactGraphStructure.js +16 -17
  77. package/dist/application/JavaScriptArtifactPathResolution.js +61 -49
  78. package/dist/application/JavaScriptArtifactReconstruction.js +5 -10
  79. package/dist/application/JavaScriptArtifactReconstructionInput.js +2 -14
  80. package/dist/application/JavaScriptJsonModules.js +2 -2
  81. package/dist/application/JavaScriptModuleRelationships.js +22 -27
  82. package/dist/application/JavaScriptReplayPermission.js +1 -1
  83. package/dist/application/JavaScriptReplayPlanning.js +9 -3
  84. package/dist/application/JavaScriptReplayService.js +29 -47
  85. package/dist/application/JavaScriptReturnShapeProjection.js +12 -42
  86. package/dist/application/JavaScriptRuntimeObservationEvidence.js +7 -8
  87. package/dist/application/JavaScriptRuntimeObservationService.js +4 -8
  88. package/dist/application/JavaScriptRuntimeReconciliationEvidence.js +2 -3
  89. package/dist/application/JavaScriptSemanticGraphBuilder.js +11 -41
  90. package/dist/application/JavaScriptSemanticGraphConstruction.js +5 -29
  91. package/dist/application/JavaScriptSemanticGraphEvidence.js +1 -1
  92. package/dist/application/JavaScriptSemanticGraphFingerprintProjection.js +1 -1
  93. package/dist/application/JavaScriptSemanticGraphFlowProjection.js +0 -13
  94. package/dist/application/JavaScriptSemanticGraphProjection.js +1 -3
  95. package/dist/application/JavaScriptSemanticTraceService.js +1 -10
  96. package/dist/application/JsonFiles.js +79 -0
  97. package/dist/application/LinuxHopper.js +11 -9
  98. package/dist/application/LoopbackReplay.js +26 -23
  99. package/dist/application/LoopbackReplayRecorder.js +29 -1
  100. package/dist/application/ManagedApplicationGraphService.js +1 -2
  101. package/dist/application/ManagedMemberComparisonService.js +11 -41
  102. package/dist/application/ManagedNativeVerificationService.js +1 -2
  103. package/dist/application/ManagedReconstructionService.js +1 -1
  104. package/dist/application/ManagedRuntimeCorrelationService.js +14 -13
  105. package/dist/application/NativeApiInspection.js +2 -7
  106. package/dist/application/NativeUiActionTrace.js +394 -0
  107. package/dist/application/NodeRuntimeCharacterizationService.js +11 -16
  108. package/dist/application/PermissionAuthority.js +15 -7
  109. package/dist/application/PermissionFailure.js +5 -0
  110. package/dist/application/ProcessCaptureAuthority.js +5 -7
  111. package/dist/application/ProcessCaptureJournal.js +3 -2
  112. package/dist/application/ProcessCaptureLifecycle.js +10 -12
  113. package/dist/application/ProcessCheckpoints.js +29 -11
  114. package/dist/application/ProcessCli.js +8 -17
  115. package/dist/application/ProcessEvidence.js +5 -7
  116. package/dist/application/ProcessHarness.js +60 -20
  117. package/dist/application/ProcessNormalization.js +2 -1
  118. package/dist/application/ProcessReactiveCoordinator.js +2 -4
  119. package/dist/application/ProcessReactiveEffects.js +9 -3
  120. package/dist/application/ProcessReactiveHarness.js +13 -7
  121. package/dist/application/ProcessSampling.js +2 -4
  122. package/dist/application/ProcessTimer.js +39 -0
  123. package/dist/application/ProjectPermissionStore.js +39 -95
  124. package/dist/application/RealHopperAssertions.js +20 -66
  125. package/dist/application/ReconstructionCoverageService.js +12 -58
  126. package/dist/application/ReconstructionObligationAuthority.js +2 -2
  127. package/dist/application/ReconstructionObligationCandidates.js +4 -4
  128. package/dist/application/ReconstructionObligationLedgerEvaluation.js +8 -15
  129. package/dist/application/ReconstructionObligationLedgerProjection.js +3 -7
  130. package/dist/application/ReconstructionObligationLedgerService.js +19 -38
  131. package/dist/application/ReferenceSourceImport.js +21 -47
  132. package/dist/application/ReferenceSourceImportEntries.js +2 -4
  133. package/dist/application/ReferenceSourceImportPolicy.js +5 -32
  134. package/dist/application/ReferenceSourceImportTypes.js +0 -16
  135. package/dist/application/RuntimeExecutableDiagnostics.js +55 -29
  136. package/dist/application/SessionProviderRouter.js +2 -2
  137. package/dist/application/Setup.js +1 -3
  138. package/dist/application/SetupClientConfiguration.js +22 -88
  139. package/dist/application/SetupRegistrationEnvironment.js +0 -7
  140. package/dist/application/StoreFileLock.js +119 -0
  141. package/dist/application/TerminalRenderer.js +2 -3
  142. package/dist/application/Uninstall.js +9 -14
  143. package/dist/application/UnknownEvidence.js +1 -1
  144. package/dist/application/WindowsCapabilities.js +5 -4
  145. package/dist/artifacts/ArtifactPaths.js +2 -5
  146. package/dist/artifacts/ArtifactProvider.js +43 -67
  147. package/dist/artifacts/DirectoryArtifactReader.js +13 -8
  148. package/dist/artifacts/MachOSliceArtifactReader.js +1 -5
  149. package/dist/artifacts/NativeDmgArtifactReader.js +11 -11
  150. package/dist/artifacts/NibArchive.js +269 -0
  151. package/dist/artifacts/SafeOutputTree.js +21 -31
  152. package/dist/browser/BrowserProcessStartup.js +1 -2
  153. package/dist/browser/CdpAuthorizedMainFrame.js +16 -0
  154. package/dist/browser/CdpBrowserProvider.js +3 -13
  155. package/dist/browser/CdpCanonicalJsonDigest.js +9 -0
  156. package/dist/browser/CdpCaptureDocuments.js +28 -76
  157. package/dist/browser/CdpCaptureEventBodyShapes.js +13 -33
  158. package/dist/browser/CdpCaptureEventHandlers.js +22 -87
  159. package/dist/browser/CdpCaptureEvents.js +2 -8
  160. package/dist/browser/CdpCaptureStorage.js +9 -20
  161. package/dist/browser/CdpCaptureStorageFingerprints.js +85 -95
  162. package/dist/browser/CdpCaptureValues.js +21 -21
  163. package/dist/browser/CdpConnection.js +10 -25
  164. package/dist/browser/CdpElectronInspection.js +29 -51
  165. package/dist/browser/CdpElectronProvider.js +10 -35
  166. package/dist/browser/CdpElectronScriptEvents.js +8 -16
  167. package/dist/browser/CdpElectronScripts.js +6 -35
  168. package/dist/browser/CdpElectronWorkers.js +6 -10
  169. package/dist/browser/CdpEndpoint.js +25 -41
  170. package/dist/browser/CdpObservationSession.js +14 -26
  171. package/dist/browser/CdpPageCapture.js +34 -48
  172. package/dist/browser/CdpPageCaptureScripts.js +1 -19
  173. package/dist/browser/CdpPageCaptureWorkers.js +6 -10
  174. package/dist/browser/CdpSafeMetadata.js +19 -22
  175. package/dist/browser/CdpScreenshot.js +3 -5
  176. package/dist/browser/CdpTargetSession.js +1 -2
  177. package/dist/browser/CdpWebMcpDiscovery.js +13 -22
  178. package/dist/browser/ElectronFileScope.js +8 -19
  179. package/dist/browser/JavaScriptRuntimeScope.js +10 -10
  180. package/dist/browser/PlaywrightBrowserScenarioProvider.js +31 -64
  181. package/dist/browser/PlaywrightElectronActiveActions.js +309 -0
  182. package/dist/browser/PlaywrightElectronActiveProvider.js +274 -0
  183. package/dist/browser/PlaywrightExecutionBoundary.js +16 -5
  184. package/dist/browser/PlaywrightScenarioActions.js +3 -7
  185. package/dist/browser/PlaywrightScenarioArtifacts.js +23 -92
  186. package/dist/browser/PlaywrightScenarioBrowser.js +7 -9
  187. package/dist/browser/PlaywrightScenarioEvents.js +45 -94
  188. package/dist/browser/PlaywrightScenarioSession.js +18 -34
  189. package/dist/browser/PngVisualDiff.js +22 -14
  190. package/dist/browser/SensitiveTextCapture.js +1 -18
  191. package/dist/browser/V8InspectorCaptureProjection.js +7 -7
  192. package/dist/browser/V8InspectorEndpoint.js +12 -14
  193. package/dist/browser/V8InspectorProvider.js +20 -61
  194. package/dist/browser/WebSourceMapFetcher.js +56 -176
  195. package/dist/catalogIdentity.js +12 -60
  196. package/dist/cli/artifactCommands.js +49 -77
  197. package/dist/cli/coreAnalysisCommands.js +83 -133
  198. package/dist/cli/javascriptApplicationAnalysis.js +1 -9
  199. package/dist/cli/managedCommands.js +6 -271
  200. package/dist/cli/setupCommands.js +3 -12
  201. package/dist/cli/utilityCommands.js +7 -41
  202. package/dist/cli.js +0 -2
  203. package/dist/cliApplicationCommands.js +44 -114
  204. package/dist/cliBrowserAdvancedCommands.js +12 -102
  205. package/dist/cliBrowserCommands.js +19 -124
  206. package/dist/cliBrowserContext.js +30 -0
  207. package/dist/cliCommandNames.js +5 -5
  208. package/dist/cliElectronCommands.js +49 -71
  209. package/dist/cliEvidenceCommands.js +8 -77
  210. package/dist/cliJavaScriptRuntimeCommands.js +18 -92
  211. package/dist/cliJsonInput.js +4 -14
  212. package/dist/cliObservationOptions.js +11 -92
  213. package/dist/cliPolicyCommands.js +2 -16
  214. package/dist/cliProcessCommands.js +3 -3
  215. package/dist/cliSetup.js +0 -13
  216. package/dist/config/browserScenario.js +77 -0
  217. package/dist/config/electronAutomation.js +35 -0
  218. package/dist/config/environment.js +6 -9
  219. package/dist/config/javascriptReplay.js +41 -0
  220. package/dist/config/managedRuntime.js +25 -0
  221. package/dist/config/parseConfig.js +56 -232
  222. package/dist/config/parsers.js +16 -28
  223. package/dist/config/passiveObservation.js +87 -0
  224. package/dist/config/permissions.js +0 -7
  225. package/dist/config/processCapture.js +47 -0
  226. package/dist/contracts/analysisSearchContract.js +2 -5
  227. package/dist/contracts/applicationToolContracts.js +58 -114
  228. package/dist/contracts/applicationWorkflowInputContracts.js +29 -114
  229. package/dist/contracts/artifactComparisonExample.js +58 -60
  230. package/dist/contracts/artifactToolContracts.js +37 -91
  231. package/dist/contracts/browserScenarioToolContracts.js +6 -51
  232. package/dist/contracts/browserToolContracts.js +10 -75
  233. package/dist/contracts/electronToolContracts.js +27 -98
  234. package/dist/contracts/enhancedInputs.js +31 -78
  235. package/dist/contracts/errorSchemas.js +0 -1
  236. package/dist/contracts/functionComparisonExample.js +10 -24
  237. package/dist/contracts/functionInstructionContract.js +1 -3
  238. package/dist/contracts/functionWorkflowToolContracts.js +4 -5
  239. package/dist/contracts/hopperMemoryContracts.js +3 -3
  240. package/dist/contracts/investigationExamples.js +14 -11
  241. package/dist/contracts/javascriptApplicationWorkflowExamples.js +12 -19
  242. package/dist/contracts/javascriptRuntimeObservationToolContracts.js +2 -20
  243. package/dist/contracts/javascriptRuntimeReconciliationExample.js +45 -12
  244. package/dist/contracts/managedToolContracts.js +10 -104
  245. package/dist/contracts/managedWorkflowExamples.js +77 -125
  246. package/dist/contracts/managedWorkflowToolContracts.js +51 -74
  247. package/dist/contracts/nativeToolContracts.js +9 -14
  248. package/dist/contracts/processCaptureExample.js +2 -69
  249. package/dist/contracts/promptContracts.js +49 -67
  250. package/dist/contracts/providerSelection.js +0 -1
  251. package/dist/contracts/reconstructionReadinessExample.js +1 -6
  252. package/dist/contracts/sessionStatusContract.js +1 -17
  253. package/dist/contracts/sessionToolSchemas.js +52 -0
  254. package/dist/contracts/toolContractExamples.js +11 -10
  255. package/dist/contracts/toolContractHelpers.js +19 -0
  256. package/dist/contracts/toolContracts.js +60 -143
  257. package/dist/contracts/toolEffects.js +16 -9
  258. package/dist/contracts/toolOutputSchemaGroups.js +47 -86
  259. package/dist/contracts/toolOutputSchemaPrimitives.js +72 -62
  260. package/dist/contracts/toolSchemaMetadata.js +117 -0
  261. package/dist/contracts/unknownContractExamples.js +0 -2
  262. package/dist/doctorRuntime.js +1 -1
  263. package/dist/domain/analysisErrorPresentation.js +46 -54
  264. package/dist/domain/analysisErrorProjection.js +28 -37
  265. package/dist/domain/analysisProfile.js +3 -31
  266. package/dist/domain/analysisSnapshot.js +3 -12
  267. package/dist/domain/androidApplication.js +15 -52
  268. package/dist/domain/appleApplication.js +24 -65
  269. package/dist/domain/artifactComparison.js +11 -29
  270. package/dist/domain/artifactGraph.js +14 -44
  271. package/dist/domain/artifactInspection.js +38 -69
  272. package/dist/domain/artifactInventoryEvidence.js +27 -21
  273. package/dist/domain/binaryTarget.js +2 -219
  274. package/dist/domain/binaryTargetTypes.js +1 -0
  275. package/dist/domain/browserCaptureComparison.js +35 -60
  276. package/dist/domain/browserObservation.js +45 -197
  277. package/dist/domain/browserObservationSchemas.js +5 -23
  278. package/dist/domain/browserScenario.js +11 -14
  279. package/dist/domain/browserScenarioCapture.js +11 -12
  280. package/dist/domain/browserScenarioCaptureValues.js +146 -84
  281. package/dist/domain/browserScenarioDiff.js +2 -59
  282. package/dist/domain/browserScenarioDiffEvidence.js +51 -0
  283. package/dist/domain/browserScenarioDiffValues.js +21 -38
  284. package/dist/domain/browserScenarioValues.js +80 -109
  285. package/dist/domain/browserSession.js +4 -7
  286. package/dist/domain/bundleComparison.js +6 -32
  287. package/dist/domain/bytecodeProvider.js +53 -54
  288. package/dist/domain/callPath.js +50 -169
  289. package/dist/domain/callPathSchemas.js +79 -0
  290. package/dist/domain/changedBehavior.js +34 -60
  291. package/dist/domain/completionLedgerGeneration.js +8 -14
  292. package/dist/domain/conformancePackage.js +126 -97
  293. package/dist/domain/conformanceReplay.js +39 -11
  294. package/dist/domain/conformanceTrustGate.js +174 -30
  295. package/dist/domain/customProtocolCapture.js +4 -4
  296. package/dist/domain/electronActiveObservation.js +244 -0
  297. package/dist/domain/electronObservation.js +21 -83
  298. package/dist/domain/electronStaticAnalysisBrowser.js +36 -46
  299. package/dist/domain/electronStaticAnalysisIpc.js +38 -14
  300. package/dist/domain/electronStaticAnalysisNative.js +1 -8
  301. package/dist/domain/electronStaticAnalysisValues.js +14 -18
  302. package/dist/domain/errors.js +33 -54
  303. package/dist/domain/eventProcessTree.js +101 -90
  304. package/dist/domain/evidence.js +2 -10
  305. package/dist/domain/evidenceBundle.js +3 -5
  306. package/dist/domain/evidenceCompletionLedger.js +6 -8
  307. package/dist/domain/functionComparison.js +4 -14
  308. package/dist/domain/functionComparisonNormalization.js +8 -8
  309. package/dist/domain/functionComparisonResults.js +25 -15
  310. package/dist/domain/functionComparisonSchemas.js +49 -33
  311. package/dist/domain/functionDossierEvidence.js +31 -151
  312. package/dist/domain/hopperStartupFailure.js +1 -1
  313. package/dist/domain/hopperValues.js +17 -141
  314. package/dist/domain/inputIssueProjection.js +4 -1
  315. package/dist/domain/interfaceBuilderGraph.js +654 -0
  316. package/dist/domain/javascriptApplicationAnalysis.js +8 -112
  317. package/dist/domain/javascriptApplicationChangeGraph.js +22 -82
  318. package/dist/domain/javascriptApplicationEvidenceSchemas.js +59 -47
  319. package/dist/domain/javascriptApplicationGraph.js +3 -13
  320. package/dist/domain/javascriptApplicationGraphSchemas.js +12 -34
  321. package/dist/domain/javascriptApplicationVersionComparison.js +26 -30
  322. package/dist/domain/javascriptApplicationVersionComparisonSchemas.js +123 -68
  323. package/dist/domain/javascriptApplicationVersionItems.js +120 -53
  324. package/dist/domain/javascriptApplicationVersionKeys.js +24 -11
  325. package/dist/domain/javascriptAstFingerprint.js +25 -58
  326. package/dist/domain/javascriptAstValues.js +9 -0
  327. package/dist/domain/javascriptExportInstrumentation.js +2 -4
  328. package/dist/domain/javascriptExportShapeComparison.js +6 -7
  329. package/dist/domain/javascriptExportShapeComparisonSchemas.js +70 -77
  330. package/dist/domain/javascriptExportShapeSelection.js +17 -19
  331. package/dist/domain/javascriptFeatureSeed.js +20 -12
  332. package/dist/domain/javascriptFeatureTrace.js +13 -67
  333. package/dist/domain/javascriptFeatureTraceSchemas.js +24 -52
  334. package/dist/domain/javascriptFeatureTraversal.js +1 -44
  335. package/dist/domain/javascriptNativeHandoff.js +1 -1
  336. package/dist/domain/javascriptReplay.js +100 -101
  337. package/dist/domain/javascriptRuntimeLoadState.js +3 -8
  338. package/dist/domain/javascriptRuntimeObservation.js +43 -103
  339. package/dist/domain/javascriptRuntimeReconciliation.js +1 -3
  340. package/dist/domain/javascriptRuntimeReconciliationActive.js +80 -0
  341. package/dist/domain/javascriptRuntimeReconciliationGraph.js +21 -33
  342. package/dist/domain/javascriptRuntimeReconciliationMatching.js +75 -61
  343. package/dist/domain/javascriptRuntimeReconciliationParsing.js +21 -46
  344. package/dist/domain/javascriptRuntimeReconciliationResult.js +25 -19
  345. package/dist/domain/javascriptRuntimeReconciliationRuntime.js +8 -12
  346. package/dist/domain/javascriptRuntimeReconciliationSchemas.js +34 -49
  347. package/dist/domain/javascriptRuntimeStaticCandidates.js +3 -3
  348. package/dist/domain/javascriptSemanticAnalysis.js +12 -45
  349. package/dist/domain/javascriptSemanticAsyncEffects.js +1 -9
  350. package/dist/domain/javascriptSemanticCallResolution.js +6 -16
  351. package/dist/domain/javascriptSemanticCalls.js +5 -32
  352. package/dist/domain/javascriptSemanticChildProcesses.js +1 -11
  353. package/dist/domain/javascriptSemanticCoverage.js +11 -0
  354. package/dist/domain/javascriptSemanticDataEffectHelpers.js +1 -8
  355. package/dist/domain/javascriptSemanticDataEffects.js +1 -11
  356. package/dist/domain/javascriptSemanticFingerprints.js +3 -5
  357. package/dist/domain/javascriptSemanticGraphSchemas.js +25 -51
  358. package/dist/domain/javascriptSemanticGraphSerialization.js +2 -13
  359. package/dist/domain/javascriptSemanticIr.js +1 -29
  360. package/dist/domain/javascriptSemanticObjects.js +1 -5
  361. package/dist/domain/javascriptSemanticPrimitives.js +2 -9
  362. package/dist/domain/javascriptSemanticProjection.js +0 -18
  363. package/dist/domain/javascriptSemanticPromises.js +9 -16
  364. package/dist/domain/javascriptSemanticProvenance.js +16 -19
  365. package/dist/domain/javascriptSemanticQuery.js +17 -139
  366. package/dist/domain/javascriptSemanticQueryAssessment.js +9 -37
  367. package/dist/domain/javascriptSemanticQueryIdentity.js +2 -23
  368. package/dist/domain/javascriptSemanticQuerySchemas.js +14 -107
  369. package/dist/domain/javascriptSemanticResources.js +1 -6
  370. package/dist/domain/javascriptSemanticReturns.js +10 -27
  371. package/dist/domain/javascriptSemanticValueTypes.js +1 -0
  372. package/dist/domain/javascriptSemanticValues.js +44 -62
  373. package/dist/domain/javascriptStaticAnalysis.js +21 -43
  374. package/dist/domain/javascriptStaticAnalysisBundler.js +34 -93
  375. package/dist/domain/javascriptStaticAnalysisCalls.js +17 -16
  376. package/dist/domain/javascriptStaticAnalysisFindings.js +3 -19
  377. package/dist/domain/javascriptStaticAnalysisHelpers.js +47 -88
  378. package/dist/domain/javascriptStaticAnalysisState.js +1 -5
  379. package/dist/domain/javascriptStaticAnalysisTypes.js +1 -0
  380. package/dist/domain/jsonShape.js +7 -33
  381. package/dist/domain/localPath.js +7 -0
  382. package/dist/domain/managedApplicationGraph.js +9 -41
  383. package/dist/domain/managedApplicationGraphCoverage.js +24 -156
  384. package/dist/domain/managedApplicationGraphNodes.js +10 -13
  385. package/dist/domain/managedArtifact.js +14 -27
  386. package/dist/domain/managedMemberComparison.js +90 -92
  387. package/dist/domain/managedMemberComparisonCoverage.js +11 -33
  388. package/dist/domain/managedMemberComparisonItems.js +221 -0
  389. package/dist/domain/managedMemberComparisonMatch.js +8 -208
  390. package/dist/domain/managedNativeVerification.js +3 -6
  391. package/dist/domain/managedNativeVerificationMatch.js +55 -59
  392. package/dist/domain/managedNativeVerificationSchemas.js +83 -47
  393. package/dist/domain/managedReconstruction.js +19 -23
  394. package/dist/domain/managedRuntimeCorrelation.js +6 -9
  395. package/dist/domain/nativeApiBoundary.js +17 -14
  396. package/dist/domain/nativeInspection.js +0 -2
  397. package/dist/domain/nativeInvestigationGraph.js +351 -0
  398. package/dist/domain/nativeValueFlow.js +61 -0
  399. package/dist/domain/nodeRuntimeCharacterization.js +15 -18
  400. package/dist/domain/objcSwiftMetadata.js +254 -0
  401. package/dist/domain/peInspection.js +1 -1
  402. package/dist/domain/permissionPolicy.js +13 -0
  403. package/dist/domain/processCapture.js +76 -113
  404. package/dist/domain/processCaptureExample.js +68 -0
  405. package/dist/domain/processCaptureParsing.js +21 -0
  406. package/dist/domain/processCaptureReactiveSchema.js +68 -0
  407. package/dist/domain/processCaptureReactiveValidation.js +8 -3
  408. package/dist/domain/processCaptureValidation.js +8 -10
  409. package/dist/domain/processComparison.js +12 -16
  410. package/dist/domain/processObservation.js +5 -6
  411. package/dist/domain/processReactiveMatching.js +32 -46
  412. package/dist/domain/processReactiveRuntime.js +4 -8
  413. package/dist/domain/processReactiveScenario.js +28 -94
  414. package/dist/domain/processReactiveScenarioPreflight.js +5 -30
  415. package/dist/domain/processReactiveTransition.js +42 -21
  416. package/dist/domain/processScenario.js +62 -93
  417. package/dist/domain/processTraceComparison.js +0 -7
  418. package/dist/domain/processTraceEvaluation.js +14 -4
  419. package/dist/domain/processTraceSpecification.js +11 -17
  420. package/dist/domain/protocolCapture.js +11 -9
  421. package/dist/domain/reconstructionCoverage.js +62 -129
  422. package/dist/domain/reconstructionCoverageEvaluation.js +17 -17
  423. package/dist/domain/reconstructionObligationLedgerSchemas.js +45 -72
  424. package/dist/domain/reconstructionReadiness.js +1 -2
  425. package/dist/domain/reconstructionReadinessSchemas.js +66 -40
  426. package/dist/domain/reconstructionUnknowns.js +3 -3
  427. package/dist/domain/reconstructionVerification.js +13 -47
  428. package/dist/domain/reconstructionVerificationSchemas.js +50 -38
  429. package/dist/domain/referenceSourceGraph.js +53 -61
  430. package/dist/domain/referenceSourceImportParsing.js +3 -7
  431. package/dist/domain/replayMachine.js +19 -31
  432. package/dist/domain/replayMachineRun.js +15 -63
  433. package/dist/domain/replayMachineRuntime.js +46 -44
  434. package/dist/domain/replayMachineValues.js +84 -0
  435. package/dist/domain/residualUnknown.js +25 -30
  436. package/dist/domain/runtimeCharacterization.js +15 -16
  437. package/dist/domain/runtimeIdentification.js +48 -47
  438. package/dist/domain/sourceToBundleComparison.js +11 -87
  439. package/dist/domain/sourceToBundleComparisonSchemas.js +25 -50
  440. package/dist/domain/sourceToBundleSignals.js +11 -16
  441. package/dist/domain/staticRuntimeCorrelation.js +44 -54
  442. package/dist/domain/symbolAnalysis.js +10 -19
  443. package/dist/domain/unicodeCodePointOrder.js +12 -0
  444. package/dist/domain/webBundleAnalysis.js +70 -99
  445. package/dist/domain/webBundleAnalyzer.js +2 -4
  446. package/dist/domain/webBundleAnalyzerAst.js +0 -13
  447. package/dist/domain/webBundleAnalyzerInspection.js +26 -52
  448. package/dist/domain/webBundleAnalyzerResult.js +7 -24
  449. package/dist/domain/webCaptureDiff.js +48 -85
  450. package/dist/domain/webCaptureDiffSchemas.js +86 -0
  451. package/dist/domain/webContentArtifact.js +1 -10
  452. package/dist/domain/webMcpDiscovery.js +3 -14
  453. package/dist/domain/webScreenshot.js +58 -34
  454. package/dist/domain/zipPackageFormat.js +7 -0
  455. package/dist/dotnet/ManagedArtifactInspector.js +17 -50
  456. package/dist/dotnet/ManagedMemberInspector.js +27 -58
  457. package/dist/dotnet/ManagedMemberInspectorCore.js +14 -51
  458. package/dist/dotnet/ManagedMemberInstructionDecoder.js +2 -2
  459. package/dist/dotnet/ManagedMemberRows.js +16 -16
  460. package/dist/dotnet/ManagedMetadataHeaps.js +26 -8
  461. package/dist/dotnet/ManagedMetadataInventory.js +21 -30
  462. package/dist/dotnet/ManagedMetadataInventoryRows.js +57 -63
  463. package/dist/dotnet/ManagedMetadataLayout.js +3 -5
  464. package/dist/dotnet/ManagedMethodBodyReader.js +5 -30
  465. package/dist/dotnet/ManagedNativeBoundaryHelpers.js +19 -49
  466. package/dist/dotnet/ManagedNativeBoundaryInspector.js +13 -42
  467. package/dist/dotnet/ManagedPeReader.js +2 -2
  468. package/dist/dotnet/ManagedStaticProvider.js +13 -71
  469. package/dist/generatedMcpToolCatalog.js +1 -1
  470. package/dist/generatedPackageMetadata.js +1 -1
  471. package/dist/ghidra/GhidraAnalysisProfile.js +3 -8
  472. package/dist/ghidra/GhidraClient.js +5 -13
  473. package/dist/ghidra/GhidraClientStartup.js +1 -1
  474. package/dist/ghidra/GhidraClientWire.js +9 -5
  475. package/dist/ghidra/GhidraDefaults.js +0 -18
  476. package/dist/ghidra/GhidraDiagnostics.js +0 -2
  477. package/dist/ghidra/GhidraDoctor.js +16 -12
  478. package/dist/ghidra/GhidraFunctionValues.js +67 -108
  479. package/dist/ghidra/GhidraInstallation.js +98 -42
  480. package/dist/ghidra/GhidraInventoryValues.js +18 -77
  481. package/dist/ghidra/GhidraLauncher.js +0 -8
  482. package/dist/ghidra/GhidraProvider.js +32 -31
  483. package/dist/ghidra/GhidraProviderCapabilities.js +11 -48
  484. package/dist/ghidra/GhidraRequestQueue.js +6 -30
  485. package/dist/ghidra/GhidraResponseBuffer.js +1 -7
  486. package/dist/ghidra/GhidraSessionValues.js +0 -2
  487. package/dist/ghidra/GhidraSocketConnection.js +1 -1
  488. package/dist/ghidra/GhidraTransport.js +4 -7
  489. package/dist/ghidra/protocol.js +19 -42
  490. package/dist/hopper/BridgeLauncher.js +115 -37
  491. package/dist/hopper/HopperAnalysisProfile.js +3 -5
  492. package/dist/hopper/HopperCleanup.js +11 -9
  493. package/dist/hopper/HopperClient.js +5 -8
  494. package/dist/hopper/HopperProcessDiagnostic.js +2 -2
  495. package/dist/hopper/HopperProvider.js +0 -30
  496. package/dist/hopper/HopperRequestQueue.js +21 -40
  497. package/dist/hopper/HopperResponseStream.js +1 -9
  498. package/dist/hopper/HopperSessionValues.js +3 -2
  499. package/dist/hopper/HopperTargetLease.js +119 -0
  500. package/dist/hopper/LinuxPrivateDisplayDiagnostic.js +24 -31
  501. package/dist/hopper/LinuxPrivateDisplayProbe.js +21 -26
  502. package/dist/hopper/protocol.js +6 -4
  503. package/dist/main/reload.js +1 -9
  504. package/dist/main/shutdown.js +1 -1
  505. package/dist/main/state.js +0 -23
  506. package/dist/main/transport.js +27 -39
  507. package/dist/main.js +17 -15
  508. package/dist/mcpDoctor.js +27 -69
  509. package/dist/native/CommandRunner.js +18 -25
  510. package/dist/native/NativeMacOSProvider.js +13 -38
  511. package/dist/native/NativeMachoInspection.js +1 -1
  512. package/dist/process/BoundedFileBytes.js +17 -0
  513. package/dist/process/ExecFileOutput.js +11 -0
  514. package/dist/process/PendingOperations.js +8 -6
  515. package/dist/process/PrivateRuntimeRoot.js +17 -0
  516. package/dist/process/ProcessOwnership.js +67 -130
  517. package/dist/process/ProcessOwnershipIdentity.js +13 -0
  518. package/dist/process/ProcessOwnershipObservation.js +87 -0
  519. package/dist/process/ProcessOwnershipProcessTree.js +22 -0
  520. package/dist/process/ProviderDeadline.js +8 -12
  521. package/dist/process/ProviderProcess.js +7 -28
  522. package/dist/process/WindowsAuthority.js +32 -0
  523. package/dist/reference/ReferenceSourceReader.js +8 -24
  524. package/dist/reference/ReferenceSourceReaderEntries.js +11 -39
  525. package/dist/reference/ReferenceSourceReaderFile.js +13 -31
  526. package/dist/reference/ReferenceSourceReaderPaths.js +3 -18
  527. package/dist/reference/ReferenceSourceReaderValidate.js +3 -6
  528. package/dist/replay/JavaScriptReplayWorker.js +95 -13
  529. package/dist/replay/JavaScriptReplayWorkerTypes.js +1 -0
  530. package/dist/replay/LinuxJavaScriptReplayRunner.js +42 -43
  531. package/dist/replay/LinuxJavaScriptReplaySandbox.js +0 -19
  532. package/dist/replay/LinuxRuntimeClosure.js +1 -3
  533. package/dist/replay/ReplayOutcome.js +27 -18
  534. package/dist/replay/ReplayProcessLifecycle.js +32 -7
  535. package/dist/replay/ReplaySeccompFile.js +29 -0
  536. package/dist/replay/ReplayWorkerProtocol.js +33 -30
  537. package/dist/replay/SystemJavaScriptReplayHost.js +45 -74
  538. package/dist/server/ProcessCaptureElicitation.js +4 -8
  539. package/dist/server/createServer.js +145 -119
  540. package/dist/server/mcpClientMetadata.js +32 -0
  541. package/dist/server/promptCompletion.js +37 -61
  542. package/dist/server/recordDerivedEvidence.js +1 -1
  543. package/dist/server/registerApplicationTools/characterization.js +10 -21
  544. package/dist/server/registerApplicationTools/compareExportShapes.js +6 -16
  545. package/dist/server/registerApplicationTools/compareSourceToBundle.js +6 -15
  546. package/dist/server/registerApplicationTools/compareVersions.js +6 -16
  547. package/dist/server/registerApplicationTools/controlledReplay.js +8 -15
  548. package/dist/server/registerApplicationTools/coverage.js +7 -78
  549. package/dist/server/registerApplicationTools/helpers.js +1 -13
  550. package/dist/server/registerApplicationTools/obligationLedger.js +4 -8
  551. package/dist/server/registerApplicationTools/traceFeature.js +6 -15
  552. package/dist/server/registerApplicationTools/traceSemantics.js +5 -13
  553. package/dist/server/registerApplicationTools.js +0 -2
  554. package/dist/server/registerArtifactComparisonTool.js +27 -35
  555. package/dist/server/registerBrowserScenarioTool.js +3 -8
  556. package/dist/server/registerBrowserTools.js +36 -81
  557. package/dist/server/registerBundleComparisonTool.js +10 -16
  558. package/dist/server/registerCloseLifecycleTool.js +5 -27
  559. package/dist/server/registerElectronTools.js +29 -65
  560. package/dist/server/registerEnhancedTools.js +118 -127
  561. package/dist/server/registerEvidenceTools.js +19 -30
  562. package/dist/server/registerFunctionComparisonTool.js +35 -34
  563. package/dist/server/registerInvestigationTools/helpers.js +3 -32
  564. package/dist/server/registerInvestigationTools.js +36 -148
  565. package/dist/server/registerJavaScriptRuntimeObservationTools.js +15 -27
  566. package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +16 -23
  567. package/dist/server/registerManagedWorkflowTools/contract.js +2 -3
  568. package/dist/server/registerManagedWorkflowTools/evidence.js +19 -35
  569. package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +4 -14
  570. package/dist/server/registerManagedWorkflowTools/planManagedRuntimeCorrelation.js +4 -14
  571. package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +11 -20
  572. package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +10 -21
  573. package/dist/server/registerOfficialTools.js +8 -51
  574. package/dist/server/registerProcessComparisonTool.js +43 -38
  575. package/dist/server/registerPrompts.js +19 -17
  576. package/dist/server/registerReplayMachineTool.js +4 -10
  577. package/dist/server/registerSessionRecordTools.js +36 -153
  578. package/dist/server/registerSessionStatusTool.js +18 -96
  579. package/dist/server/registerSessionTools.js +34 -91
  580. package/dist/server/sessionAvailabilityPolicy.js +2 -3
  581. package/dist/server/sessionEvidence.js +9 -15
  582. package/dist/server/sessionToolPolicies.js +1 -13
  583. package/dist/server/toolRegistrationOptions.js +4 -192
  584. package/dist/server/toolResult.js +15 -67
  585. package/dist/serverIdentity.js +0 -20
  586. package/install.sh +1 -1
  587. package/package.json +27 -15
  588. package/scripts/electron-active-hook-boundaries.cjs +394 -0
  589. package/scripts/electron-active-hook.cjs +469 -0
  590. package/scripts/hopper-demo-x11.py +13 -32
  591. package/scripts/rea.mjs +1 -11
  592. package/skills/reverse-engineer-anything/SKILL.md +46 -11
  593. package/skills/reverse-engineer-anything/references/evidence-workflows.md +6 -4
  594. package/skills/reverse-engineer-anything/references/javascript-applications.md +13 -13
  595. package/skills/reverse-engineer-anything/references/native-and-artifacts.md +12 -8
  596. package/dist/application/ApplicationWorkflowEvidenceResolver.js +0 -180
  597. package/dist/application/BoundedJsonFiles.js +0 -86
  598. package/dist/application/CrossVersionInventory.js +0 -128
  599. package/dist/application/CrossVersionInvestigation.js +0 -301
  600. package/dist/application/CrossVersionInvestigationCollections.js +0 -23
  601. package/dist/application/CrossVersionInvestigationEvidence.js +0 -64
  602. package/dist/application/CrossVersionInvestigationReplay.js +0 -170
  603. package/dist/application/DeferredFileAuthorization.js +0 -61
  604. package/dist/application/DoctorProjection.js +0 -43
  605. package/dist/application/EnhancedToolPagination.js +0 -22
  606. package/dist/application/EvidenceReferenceResolver.js +0 -26
  607. package/dist/application/InvestigationWorkspaceStore.js +0 -204
  608. package/dist/application/ProcessPairedExperiment.js +0 -72
  609. package/dist/application/ReconstructionCoverageWorkspaceStore.js +0 -31
  610. package/dist/application/ReconstructionReadinessService.js +0 -48
  611. package/dist/cliInvestigationCommands.js +0 -173
  612. package/dist/domain/boundedCartesianProjection.js +0 -15
  613. package/dist/domain/investigationWorkspace.js +0 -346
  614. package/dist/domain/jsonLimits.js +0 -26
  615. package/dist/domain/knownPageCoverage.js +0 -21
  616. package/dist/domain/processPairedExperiment.js +0 -128
  617. package/dist/server/DynamicToolAvailability.js +0 -70
  618. package/dist/server/LazyToolCatalog.js +0 -134
  619. package/dist/server/hydrateServerTools.js +0 -191
  620. package/dist/server/javascriptApplicationResult.js +0 -106
  621. package/dist/server/permissionFailure.js +0 -12
  622. package/dist/server/registerApplicationTools/readiness.js +0 -55
  623. package/dist/server/registerEvidenceResources.js +0 -315
  624. package/dist/server/registerJavaScriptApplicationGraphResource.js +0 -65
  625. package/dist/server/registerReconstructionObligationLedgerResource.js +0 -32
  626. package/dist/server/registerReconstructionReadinessResource.js +0 -32
  627. package/dist/server/toolInputValidation.js +0 -77
  628. package/scripts/package-runner-bootstrap.mjs +0 -72
@@ -1,6 +1,7 @@
1
1
  import * as t from "@babel/types";
2
- import { addBoundedFinding, addLocatedFinding, moduleAtOffset, } from "./javascriptStaticAnalysisFindings.js";
3
- import { STATIC_ROUTE_CALL_NAMES, argumentValue, calleeName, endpointArgument as endpointArgumentHelper, prefixedArgument, propertyName, range, rangeForOffsets, sanitizeCandidate, sourceSlice, staticPath, staticPathResolutionContext, storageKind, stringValue, } from "./javascriptStaticAnalysisHelpers.js";
2
+ import { sanitizeEndpointCandidate } from "./browserObservation.js";
3
+ import { addFindingOnce, addLocatedFinding, moduleAtOffset, } from "./javascriptStaticAnalysisFindings.js";
4
+ import { STATIC_ROUTE_CALL_NAMES, argumentValue, calleeName, endpointArgument as endpointArgumentHelper, prefixedArgument, propertyName, range, rangeForOffsets, sourceSlice, staticPath, staticPathResolutionContext, storageKind, stringValue, } from "./javascriptStaticAnalysisHelpers.js";
4
5
  /** Inspect one call or new expression for references, endpoints, storage, and roles. */
5
6
  export const inspectCall = (source, node, context) => {
6
7
  const { accumulator } = context;
@@ -91,9 +92,7 @@ const vitePreloadDependencyTable = (source) => {
91
92
  return [];
92
93
  return [
93
94
  ...body.matchAll(/"([^"\\]*(?:\\.[^"\\]*)*)"|'([^'\\]*(?:\\.[^'\\]*)*)'/gu),
94
- ]
95
- .map((literal) => (literal[1] ?? literal[2] ?? "").slice(0, 4_096))
96
- .slice(0, 256);
95
+ ].map((literal) => literal[1] ?? literal[2] ?? "");
97
96
  };
98
97
  const inspectEndpointCall = (node, name, first, context) => {
99
98
  const route = STATIC_ROUTE_CALL_NAMES.some((candidate) => name === candidate || name.endsWith(`.${candidate}`));
@@ -161,18 +160,20 @@ const inspectStorageCall = (node, name, first, context) => {
161
160
  });
162
161
  };
163
162
  export const addReference = (context, input) => {
164
- const boundedSpecifier = input.specifier?.slice(0, 4_096) ?? null;
165
- const expression = boundedSpecifier === null
166
- ? sourceSlice(context.source, input.node).slice(0, 4_096)
167
- : null;
163
+ const specifier = input.specifier ?? null;
164
+ const reference = specifier === null
165
+ ? {
166
+ specifier: null,
167
+ expression: sourceSlice(context.source, input.node),
168
+ }
169
+ : { specifier, expression: null };
168
170
  addLocatedFinding(context, {
169
171
  collection: context.accumulator.references,
170
- key: `reference\0${input.kind}\0${boundedSpecifier ?? expression}`,
172
+ key: `reference\0${input.kind}\0${reference.specifier ?? reference.expression}`,
171
173
  node: input.node,
172
174
  value: {
173
175
  kind: input.kind,
174
- specifier: boundedSpecifier,
175
- expression,
176
+ ...reference,
176
177
  module_key: null,
177
178
  location: range(input.node),
178
179
  },
@@ -184,19 +185,19 @@ const addEndpoint = (context, input) => addLocatedFinding(context, {
184
185
  node: input.node,
185
186
  value: {
186
187
  kind: input.kind,
187
- value: sanitizeCandidate(input.value),
188
+ value: sanitizeEndpointCandidate(input.value),
188
189
  mechanism: input.mechanism,
189
190
  module_key: null,
190
191
  location: range(input.node),
191
192
  },
192
193
  });
193
- export const addSourceMapDirectives = (source, accumulator, maximum) => {
194
+ export const addSourceMapDirectives = (source, accumulator) => {
194
195
  for (const match of source.matchAll(/\/\/[#@]\s*sourceMappingURL\s*=\s*([^\s]+)/gu)) {
195
- const declared = match[1]?.slice(0, 4_096);
196
+ const declared = match[1];
196
197
  if (declared === undefined)
197
198
  continue;
198
199
  const start = match.index;
199
200
  const location = rangeForOffsets(source, start, start + match[0].length);
200
- addBoundedFinding(accumulator, `source-map\0${declared}`, maximum, () => accumulator.sourceMaps.push({ declared_url: declared, location }));
201
+ addFindingOnce(accumulator, `source-map\0${declared}`, () => accumulator.sourceMaps.push({ declared_url: declared, location }));
201
202
  }
202
203
  };
@@ -1,16 +1,12 @@
1
- /** Add one module-attributable finding under the shared global finding bound. */
2
- export const addLocatedFinding = (context, input) => addBoundedFinding(context.accumulator, `${input.key}\0${String(input.node.start)}`, context.maximum, () => input.collection.push({
1
+ /** Add one module-attributable finding once per source location. */
2
+ export const addLocatedFinding = (context, input) => addFindingOnce(context.accumulator, `${input.key}\0${String(input.node.start)}`, () => input.collection.push({
3
3
  offset: input.node.start ?? -1,
4
4
  value: input.value,
5
5
  }));
6
6
  /** Reserve one deterministic finding key before mutating an accumulator. */
7
- export const addBoundedFinding = (accumulator, key, maximum, add) => {
7
+ export const addFindingOnce = (accumulator, key, add) => {
8
8
  if (accumulator.seen.has(key))
9
9
  return;
10
- if (accumulatedFindingCount(accumulator) >= maximum) {
11
- accumulator.droppedFindings += 1;
12
- return;
13
- }
14
10
  accumulator.seen.add(key);
15
11
  add();
16
12
  };
@@ -25,15 +21,3 @@ export const moduleAtOffset = (offset, modules) => {
25
21
  return undefined;
26
22
  return modules.find(({ start, end }) => offset >= start && offset <= end);
27
23
  };
28
- const accumulatedFindingCount = (accumulator) => accumulator.references.length +
29
- accumulator.endpoints.length +
30
- accumulator.storage.length +
31
- accumulator.roles.length +
32
- accumulator.sourceMaps.length +
33
- accumulator.registrations.length +
34
- accumulator.browserWindows.length +
35
- accumulator.contextBridgeApis.length +
36
- accumulator.ipc.length +
37
- accumulator.senderValidations.length +
38
- accumulator.utilityProcesses.length +
39
- accumulator.nativeAddonBindings.length;
@@ -1,13 +1,13 @@
1
1
  import { createHash } from "node:crypto";
2
2
  import { posix } from "node:path";
3
3
  import * as t from "@babel/types";
4
- import { sanitizeBrowserUrl } from "./browserObservation.js";
4
+ import { propertyName } from "./javascriptAstValues.js";
5
+ export { propertyName } from "./javascriptAstValues.js";
5
6
  /** Explicit result for source text that Babel cannot parse. */
6
7
  export const failedJavaScriptStaticAnalysis = () => ({
7
8
  parse_status: "failed",
8
9
  parse_error_count: 1,
9
10
  visited_ast_nodes: 0,
10
- dropped_findings: 0,
11
11
  references: [],
12
12
  endpoints: [],
13
13
  storage: [],
@@ -30,36 +30,30 @@ export const failedJavaScriptStaticAnalysis = () => ({
30
30
  });
31
31
  /** Normalize one Babel call/new argument into the inert node shared by inspectors. */
32
32
  export const argumentNode = (argument) => argument !== null && t.isNode(argument) ? argument : undefined;
33
- /** Recognize the bounded runtime name for a Webpack/Rspack push call. */
33
+ /** Recognize the runtime name for a Webpack/Rspack push call. */
34
34
  export const chunkRuntime = (call) => {
35
35
  if (!t.isMemberExpression(call.callee) &&
36
36
  !t.isOptionalMemberExpression(call.callee))
37
37
  return undefined;
38
38
  if (propertyName(call.callee.property) !== "push")
39
39
  return undefined;
40
- return findChunkRuntime(call.callee.object, 0);
40
+ return findChunkRuntime(call.callee.object);
41
41
  };
42
- const findChunkRuntime = (node, depth) => {
43
- if (depth >= 128)
44
- return undefined;
42
+ const findChunkRuntime = (node) => {
45
43
  if (t.isIdentifier(node) && /(?:webpack|rspack)Chunk/iu.test(node.name))
46
- return node.name.slice(0, 4_096);
44
+ return node.name;
47
45
  if (t.isMemberExpression(node) || t.isOptionalMemberExpression(node)) {
48
46
  const property = propertyName(node.property);
49
47
  if (/(?:webpack|rspack)Chunk/iu.test(property))
50
- return property.slice(0, 4_096);
51
- return t.isNode(node.object)
52
- ? findChunkRuntime(node.object, depth + 1)
53
- : undefined;
48
+ return property;
49
+ return t.isNode(node.object) ? findChunkRuntime(node.object) : undefined;
54
50
  }
55
51
  if (t.isAssignmentExpression(node))
56
- return (findChunkRuntime(node.left, depth + 1) ??
57
- findChunkRuntime(node.right, depth + 1));
52
+ return findChunkRuntime(node.left) ?? findChunkRuntime(node.right);
58
53
  if (t.isLogicalExpression(node) || t.isBinaryExpression(node))
59
- return (findChunkRuntime(node.left, depth + 1) ??
60
- findChunkRuntime(node.right, depth + 1));
54
+ return findChunkRuntime(node.left) ?? findChunkRuntime(node.right);
61
55
  if (t.isParenthesizedExpression(node) || t.isTSAsExpression(node))
62
- return findChunkRuntime(node.expression, depth + 1);
56
+ return findChunkRuntime(node.expression);
63
57
  return undefined;
64
58
  };
65
59
  /** Return a literal function factory from one module-table property. */
@@ -72,60 +66,57 @@ export const moduleFactory = (property) => {
72
66
  return property.value;
73
67
  return undefined;
74
68
  };
75
- /** Derive a bounded literal or explicitly computed module key. */
69
+ /** Derive a literal or explicitly computed module key. */
76
70
  export const modulePropertyName = (property) => t.isObjectMethod(property) || t.isObjectProperty(property)
77
71
  ? property.computed &&
78
72
  !t.isStringLiteral(property.key) &&
79
73
  !t.isNumericLiteral(property.key)
80
74
  ? `[computed@${String(property.start ?? -1)}]`
81
- : propertyName(property.key).slice(0, 4_096) ||
75
+ : propertyName(property.key) ||
82
76
  `[unknown@${String(property.start ?? -1)}]`
83
77
  : `[unknown@${String(property.start ?? -1)}]`;
84
78
  /** Read the factory-local bundler require parameter when declared. */
85
79
  export const factoryRequireName = (factory) => {
86
80
  const parameter = factory.params[2];
87
- return t.isIdentifier(parameter) ? parameter.name.slice(0, 4_096) : null;
81
+ return t.isIdentifier(parameter) ? parameter.name : null;
88
82
  };
89
- /** Collect bounded unique literal values and explicit omissions from an array. */
90
- export const staticArrayValues = (array, maximum) => {
83
+ /** Collect all unique static literal values from an array. */
84
+ export const staticArrayValues = (array) => {
91
85
  const staticValues = array.elements.flatMap((element) => {
92
86
  const value = argumentValue(element);
93
- return value === undefined ? [] : [value.slice(0, 4_096)];
87
+ return value === undefined ? [] : [value];
94
88
  });
95
89
  const values = [...new Set(staticValues)].sort(compareCodePoints);
96
90
  return {
97
- values: values.slice(0, maximum),
98
- omitted: Math.max(0, values.length - maximum),
91
+ values,
99
92
  unknown: array.elements.length - staticValues.length,
100
93
  };
101
94
  };
102
- /** Resolve a bounded path composed only from inert literal syntax. */
103
- export const staticPath = (node) => staticPathAt(node, 0);
95
+ /** Resolve a path composed only from inert literal syntax. */
96
+ export const staticPath = (node) => staticPathAt(node);
104
97
  /** Classify whether inert path syntax is a module specifier or file expression. */
105
- export const staticPathResolutionContext = (node) => isFilesystemPathExpression(node, 0)
98
+ export const staticPathResolutionContext = (node) => isFilesystemPathExpression(node)
106
99
  ? "filesystem-expression"
107
100
  : "module-specifier";
108
- const staticPathAt = (node, depth) => {
109
- if (depth >= 128)
110
- return undefined;
101
+ const staticPathAt = (node) => {
111
102
  if (t.isStringLiteral(node))
112
- return node.value.slice(0, 4_096);
103
+ return node.value;
113
104
  if (t.isTemplateLiteral(node) && node.expressions.length === 0) {
114
105
  const value = node.quasis[0]?.value.cooked ?? node.quasis[0]?.value.raw;
115
- return value?.slice(0, 4_096);
106
+ return value;
116
107
  }
117
108
  if (t.isBinaryExpression(node, { operator: "+" })) {
118
- const left = staticPathAt(node.left, depth + 1);
119
- const right = staticPathAt(node.right, depth + 1);
109
+ const left = staticPathAt(node.left);
110
+ const right = staticPathAt(node.right);
120
111
  return left === undefined || right === undefined
121
112
  ? undefined
122
- : `${left}${right}`.slice(0, 4_096);
113
+ : `${left}${right}`;
123
114
  }
124
115
  if (t.isCallExpression(node) || t.isNewExpression(node))
125
- return staticCallPath(node, depth);
116
+ return staticCallPath(node);
126
117
  return undefined;
127
118
  };
128
- const staticCallPath = (node, depth) => {
119
+ const staticCallPath = (node) => {
129
120
  const name = calleeName(node.callee);
130
121
  if (name === "URL" || name.endsWith(".URL"))
131
122
  return isFileIdentity(argumentNode(node.arguments[1]))
@@ -133,9 +124,7 @@ const staticCallPath = (node, depth) => {
133
124
  : undefined;
134
125
  if (name === "fileURLToPath" || name.endsWith(".fileURLToPath")) {
135
126
  const argument = argumentNode(node.arguments[0]);
136
- return argument === undefined
137
- ? undefined
138
- : staticPathAt(argument, depth + 1);
127
+ return argument === undefined ? undefined : staticPathAt(argument);
139
128
  }
140
129
  if ((name === "dirname" || name.endsWith(".dirname")) &&
141
130
  isFileIdentity(argumentNode(node.arguments[0])))
@@ -146,25 +135,21 @@ const staticCallPath = (node, depth) => {
146
135
  for (const argument of node.arguments) {
147
136
  if (isDirectoryIdentity(argumentNode(argument)))
148
137
  continue;
149
- const value = t.isNode(argument)
150
- ? staticPathAt(argument, depth + 1)
151
- : undefined;
138
+ const value = t.isNode(argument) ? staticPathAt(argument) : undefined;
152
139
  if (value === undefined)
153
140
  return undefined;
154
141
  parts.push(value);
155
142
  }
156
- return parts.length === 0 ? undefined : posix.join(...parts).slice(0, 4_096);
143
+ return parts.length === 0 ? undefined : posix.join(...parts);
157
144
  };
158
- const isFilesystemPathExpression = (node, depth) => {
159
- if (depth >= 128)
160
- return false;
145
+ const isFilesystemPathExpression = (node) => {
161
146
  if (t.isStringLiteral(node))
162
147
  return node.value.startsWith("/");
163
148
  if (isFileIdentity(node) || isDirectoryIdentity(node))
164
149
  return true;
165
150
  if (t.isBinaryExpression(node, { operator: "+" }))
166
- return (isFilesystemPathExpression(node.left, depth + 1) ||
167
- isFilesystemPathExpression(node.right, depth + 1));
151
+ return (isFilesystemPathExpression(node.left) ||
152
+ isFilesystemPathExpression(node.right));
168
153
  if (t.isCallExpression(node) || t.isNewExpression(node)) {
169
154
  const name = calleeName(node.callee);
170
155
  if (name === "URL" || name.endsWith(".URL"))
@@ -172,11 +157,11 @@ const isFilesystemPathExpression = (node, depth) => {
172
157
  if (name === "fileURLToPath" || name.endsWith(".fileURLToPath"))
173
158
  return node.arguments.some((argument) => {
174
159
  const value = argumentNode(argument);
175
- return (value !== undefined && isFilesystemPathExpression(value, depth + 1));
160
+ return value !== undefined && isFilesystemPathExpression(value);
176
161
  });
177
162
  return node.arguments.some((argument) => {
178
163
  const value = argumentNode(argument);
179
- return (value !== undefined && isFilesystemPathExpression(value, depth + 1));
164
+ return value !== undefined && isFilesystemPathExpression(value);
180
165
  });
181
166
  }
182
167
  return false;
@@ -235,38 +220,26 @@ export const storageKind = (name) => {
235
220
  return "sqlite";
236
221
  return undefined;
237
222
  };
238
- /** Produce a dotted bounded callee name from member syntax. */
239
- export const calleeName = (node) => calleeNameAt(node, 0);
240
- const calleeNameAt = (node, depth) => {
241
- if (depth >= 128)
242
- return "[deep]";
223
+ /** Produce a dotted callee name from member syntax. */
224
+ export const calleeName = (node) => calleeNameAt(node);
225
+ const calleeNameAt = (node) => {
243
226
  if (t.isIdentifier(node))
244
- return node.name.slice(0, 4_096);
227
+ return node.name;
245
228
  if (t.isImport(node))
246
229
  return "import";
247
230
  if (t.isMemberExpression(node) || t.isOptionalMemberExpression(node)) {
248
- const object = t.isNode(node.object)
249
- ? calleeNameAt(node.object, depth + 1)
250
- : "";
231
+ const object = t.isNode(node.object) ? calleeNameAt(node.object) : "";
251
232
  const property = propertyName(node.property);
252
- return (object === "" ? property : `${object}.${property}`).slice(0, 4_096);
233
+ return object === "" ? property : `${object}.${property}`;
253
234
  }
254
235
  return "";
255
236
  };
256
- /** Read a literal property name without evaluating computed syntax. */
257
- export const propertyName = (node) => {
258
- if (t.isIdentifier(node))
259
- return node.name.slice(0, 4_096);
260
- if (t.isStringLiteral(node) || t.isNumericLiteral(node))
261
- return String(node.value).slice(0, 4_096);
262
- return "";
263
- };
264
237
  /** Return a string literal value without evaluating an expression. */
265
- export const stringValue = (node) => t.isStringLiteral(node) ? node.value.slice(0, 4_096) : undefined;
238
+ export const stringValue = (node) => (t.isStringLiteral(node) ? node.value : undefined);
266
239
  /** Return a string or numeric argument literal. */
267
240
  export const argumentValue = (node) => {
268
241
  if (t.isStringLiteral(node) || t.isNumericLiteral(node))
269
- return String(node.value).slice(0, 4_096);
242
+ return String(node.value);
270
243
  return undefined;
271
244
  };
272
245
  /** Prefix a static argument value when one is available. */
@@ -274,7 +247,7 @@ export const prefixedArgument = (prefix, node) => {
274
247
  const value = argumentValue(node);
275
248
  return value === undefined ? undefined : `${prefix}${value}`;
276
249
  };
277
- /** Retain the exact bounded source span represented by an AST node. */
250
+ /** Retain the exact source span represented by an AST node. */
278
251
  export const sourceSlice = (source, node) => typeof node.start !== "number" || typeof node.end !== "number"
279
252
  ? ""
280
253
  : source.slice(node.start, node.end);
@@ -307,22 +280,8 @@ const pointForOffset = (source, offset) => {
307
280
  };
308
281
  /** Observe known bundler/framework marker strings without claiming dependency use. */
309
282
  export const detectVendors = (source) => vendorPatterns.flatMap(({ name, patterns }) => patterns.some((pattern) => source.includes(pattern)) ? [name] : []);
310
- /** Remove credentials, fragments, and query values from endpoint candidates. */
311
- export const sanitizeCandidate = (value) => {
312
- const bounded = value.slice(0, 4_096);
313
- try {
314
- const parsed = new URL(bounded, "https://rea.invalid");
315
- const sanitized = sanitizeBrowserUrl(parsed.href).url;
316
- return parsed.origin === "https://rea.invalid"
317
- ? sanitized.replace("https://rea.invalid", "")
318
- : sanitized;
319
- }
320
- catch {
321
- return bounded.split("#", 1)[0]?.split("?", 1)[0] ?? "";
322
- }
323
- };
324
283
  /** Commit the static semantic content used to deduplicate registrations. */
325
- export const registrationKey = (registration) => `${registration.runtime}\0${registration.chunk_keys.join("\0")}\0${String(registration.omitted_chunk_keys)}\0${String(registration.unknown_chunk_keys)}\0${registration.modules.map(({ module_key: key, source_sha256: digest }) => `${key}:${digest}`).join("\0")}`;
284
+ export const registrationKey = (registration) => `${registration.runtime}\0${registration.chunk_keys.join("\0")}\0${String(registration.unknown_chunk_keys)}\0${registration.modules.map(({ module_key: key, source_sha256: digest }) => `${key}:${digest}`).join("\0")}`;
326
285
  /** Sort values by a deterministic unique semantic key. */
327
286
  export const sortedUnique = (values, key) => [...new Map(values.map((value) => [key(value), value])).values()].sort((left, right) => compareCodePoints(key(left), key(right)));
328
287
  /** Hash exact UTF-8 source text. */
@@ -1,4 +1,4 @@
1
- /** Create isolated mutable state for one bounded source analysis. */
1
+ /** Create isolated mutable state for one source analysis. */
2
2
  export const createJavaScriptAnalysisAccumulator = () => ({
3
3
  references: [],
4
4
  endpoints: [],
@@ -15,9 +15,5 @@ export const createJavaScriptAnalysisAccumulator = () => ({
15
15
  modules: [],
16
16
  seen: new Set(),
17
17
  visitedNodes: 0,
18
- droppedFindings: 0,
19
- moduleCount: 0,
20
18
  unknownFindings: 0,
21
- structuralTruncation: false,
22
- truncated: false,
23
19
  });
@@ -1 +1,2 @@
1
1
  export {};
2
+ /** Hard bounds applied to one AST-only JavaScript analysis. */
@@ -17,12 +17,9 @@ export const jsonShapeSchema = z.object({
17
17
  types: z.array(jsonValueTypeSchema).min(1),
18
18
  observations: z.number().int().min(1),
19
19
  })),
20
- truncated: z.boolean(),
21
20
  });
22
21
  /** Parse approved JSON and immediately discard values after iterative shape inference. */
23
- export const inferJsonShape = (text, limits) => {
24
- if (Buffer.byteLength(text) > limits.maximumBytes)
25
- return null;
22
+ export const inferJsonShape = (text) => {
26
23
  let root;
27
24
  try {
28
25
  root = JSON.parse(text);
@@ -34,28 +31,14 @@ export const inferJsonShape = (text, limits) => {
34
31
  const pending = [{ value: root, path: "", depth: 0 }];
35
32
  let nodeCount = 0;
36
33
  let maxDepthObserved = 0;
37
- let truncated = false;
38
34
  while (pending.length > 0) {
39
35
  const current = pending.pop();
40
36
  if (current === undefined)
41
37
  break;
42
- if (nodeCount >= limits.maximumNodes) {
43
- truncated = true;
44
- break;
45
- }
46
38
  nodeCount += 1;
47
39
  maxDepthObserved = Math.max(maxDepthObserved, current.depth);
48
- if (current.depth >= limits.maximumDepth) {
49
- if (hasChildren(current.value))
50
- truncated = true;
51
- continue;
52
- }
53
40
  if (Array.isArray(current.value)) {
54
- const capacity = Math.max(0, limits.maximumNodes - nodeCount - pending.length);
55
- const retained = Math.min(current.value.length, capacity);
56
- if (retained < current.value.length)
57
- truncated = true;
58
- for (let index = retained - 1; index >= 0; index -= 1)
41
+ for (let index = current.value.length - 1; index >= 0; index -= 1)
59
42
  pending.push({
60
43
  value: current.value[index],
61
44
  path: `${current.path}/*`,
@@ -66,16 +49,12 @@ export const inferJsonShape = (text, limits) => {
66
49
  if (!isRecord(current.value))
67
50
  continue;
68
51
  const allEntries = Object.entries(current.value);
69
- const capacity = Math.max(0, limits.maximumNodes - nodeCount - pending.length);
70
- const entries = allEntries.slice(0, capacity);
71
- if (entries.length < allEntries.length)
72
- truncated = true;
73
- for (let index = entries.length - 1; index >= 0; index -= 1) {
74
- const entry = entries[index];
52
+ for (let index = allEntries.length - 1; index >= 0; index -= 1) {
53
+ const entry = allEntries[index];
75
54
  if (entry === undefined)
76
55
  continue;
77
56
  const [name, value] = entry;
78
- const path = `${current.path}/${pointerName(name)}`.slice(0, 2_048);
57
+ const path = `${current.path}/${pointerName(name)}`;
79
58
  const type = jsonValueType(value);
80
59
  const existing = properties.get(path);
81
60
  if (existing === undefined)
@@ -97,9 +76,7 @@ export const inferJsonShape = (text, limits) => {
97
76
  types: [...value.types].sort(),
98
77
  observations: value.observations,
99
78
  }))
100
- .sort((left, right) => left.path.localeCompare(right.path))
101
- .slice(0, limits.maximumNodes),
102
- truncated,
79
+ .sort((left, right) => left.path.localeCompare(right.path)),
103
80
  });
104
81
  };
105
82
  const jsonValueType = (value) => {
@@ -118,8 +95,5 @@ const jsonValueType = (value) => {
118
95
  return "object";
119
96
  }
120
97
  };
121
- const hasChildren = (value) => Array.isArray(value)
122
- ? value.length > 0
123
- : isRecord(value) && Object.keys(value).length > 0;
124
98
  const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
125
- const pointerName = (value) => value.slice(0, 256).replaceAll("~", "~0").replaceAll("/", "~1");
99
+ const pointerName = (value) => value.replaceAll("~", "~0").replaceAll("/", "~1");
@@ -0,0 +1,7 @@
1
+ import { isAbsolute, relative, sep } from "node:path";
2
+ /** Test lexical containment on the host platform; callers must resolve symlinks first. */
3
+ export const isPathWithinRoot = (root, path) => {
4
+ const value = relative(root, path);
5
+ return (value === "" ||
6
+ (value !== ".." && !value.startsWith(`..${sep}`) && !isAbsolute(value)));
7
+ };
@@ -4,36 +4,17 @@ import { z } from "zod";
4
4
  import { evidenceSchema, parseEvidence } from "./evidence.js";
5
5
  import { createJavaScriptApplicationGraph, javascriptApplicationGraphSchema, } from "./javascriptApplicationGraph.js";
6
6
  import { managedArtifactInspectionSchema, managedMemberInspectionSchema, managedNativeBoundaryInspectionSchema, } from "./managedArtifact.js";
7
- import { assessManagedGraphOmissions, managedGraphEvidenceCoverage, managedGraphResultCoverage, totalManagedGraphOmitted, } from "./managedApplicationGraphCoverage.js";
7
+ import { assessManagedGraphOmissions, managedGraphEvidenceCoverage, managedGraphResultCoverage, } from "./managedApplicationGraphCoverage.js";
8
8
  import { addArtifactNode, addArtifactIdentityNodes, addBoundaryNodes, addMemberNodes, } from "./managedApplicationGraphNodes.js";
9
9
  const digestSchema = z.string().regex(/^[a-f0-9]{64}$/u);
10
10
  const evidenceIdSchema = z.string().regex(/^ev_[a-f0-9]{64}$/u);
11
- const boundedTextSchema = z.string().min(1).max(4_096);
12
- const managedApplicationGraphLimitsSchema = z.strictObject({
13
- max_types: z.number().int().min(0).max(100_000).default(5_000),
14
- max_methods: z.number().int().min(0).max(100_000).default(10_000),
15
- max_fields: z.number().int().min(0).max(100_000).default(5_000),
16
- max_pinvoke_imports: z.number().int().min(0).max(100_000).default(5_000),
17
- max_native_implementations: z
18
- .number()
19
- .int()
20
- .min(0)
21
- .max(100_000)
22
- .default(5_000),
23
- });
11
+ const textSchema = z.string().min(1);
24
12
  /** Authenticated managed Evidence records projected into the application graph. */
25
13
  export const projectManagedApplicationGraphInputSchema = z
26
14
  .strictObject({
27
15
  managed_artifact: evidenceSchema.optional(),
28
16
  managed_members: evidenceSchema.optional(),
29
17
  managed_native_boundaries: evidenceSchema.optional(),
30
- limits: managedApplicationGraphLimitsSchema.default({
31
- max_types: 5_000,
32
- max_methods: 10_000,
33
- max_fields: 5_000,
34
- max_pinvoke_imports: 5_000,
35
- max_native_implementations: 5_000,
36
- }),
37
18
  })
38
19
  .superRefine((input, context) => {
39
20
  if (input.managed_artifact === undefined &&
@@ -46,7 +27,6 @@ export const projectManagedApplicationGraphInputSchema = z
46
27
  });
47
28
  /** Managed-code projection result containing a validated application graph. */
48
29
  export const managedApplicationGraphResultSchema = z.strictObject({
49
- schema_version: z.literal(1),
50
30
  projection_id: z.string().regex(/^magp_[a-f0-9]{64}$/u),
51
31
  root_artifact_sha256: digestSchema,
52
32
  source_evidence: z.strictObject({
@@ -67,15 +47,10 @@ export const managedApplicationGraphResultSchema = z.strictObject({
67
47
  }),
68
48
  graph: javascriptApplicationGraphSchema,
69
49
  coverage: z.strictObject({
70
- status: z.enum(["complete-within-inputs", "partial", "truncated"]),
71
- omitted_types: z.number().int().min(0),
72
- omitted_methods: z.number().int().min(0),
73
- omitted_fields: z.number().int().min(0),
74
- omitted_pinvoke_imports: z.number().int().min(0),
75
- omitted_native_implementations: z.number().int().min(0),
50
+ status: z.enum(["complete-within-inputs", "partial"]),
76
51
  }),
77
52
  evidence_links: z.array(evidenceIdSchema).min(1).max(3),
78
- limitations: z.array(boundedTextSchema).max(1_000),
53
+ limitations: z.array(textSchema),
79
54
  });
80
55
  const sha256 = (value) => {
81
56
  const serialized = canonicalize(value);
@@ -105,13 +80,12 @@ export const projectManagedApplicationGraph = (input) => {
105
80
  };
106
81
  const artifactNode = addArtifactNode(state);
107
82
  addArtifactIdentityNodes(state, artifactNode, parsed);
108
- const memberCounts = addMemberNodes(state, artifactNode, parsed, input.limits);
109
- const boundaryCounts = addBoundaryNodes(state, artifactNode, parsed, input.limits);
110
- const omissions = omittedCounts(parsed, input.limits);
83
+ const memberCounts = addMemberNodes(state, artifactNode, parsed);
84
+ const boundaryCounts = addBoundaryNodes(state, artifactNode, parsed);
85
+ const omissions = omittedCounts(parsed);
111
86
  const limitations = projectionLimitations(parsed, omissions);
112
87
  const graph = createJavaScriptApplicationGraph({
113
88
  schema: "JavaScriptApplicationGraph",
114
- schema_version: 1,
115
89
  root_node_ids: [artifactNode.node_id],
116
90
  nodes: state.nodes,
117
91
  edges: state.edges,
@@ -119,7 +93,6 @@ export const projectManagedApplicationGraph = (input) => {
119
93
  limitations,
120
94
  });
121
95
  const withoutId = {
122
- schema_version: 1,
123
96
  root_artifact_sha256: state.artifactSha256,
124
97
  source_evidence: {
125
98
  managed_artifact_evidence_id: parsed.artifact?.evidence.evidence_id ?? null,
@@ -178,11 +151,11 @@ const assertSameArtifact = (parsed, sha256Value) => {
178
151
  if (result !== undefined && result.artifact.sha256 !== sha256Value)
179
152
  throw new TypeError("Managed graph projection inputs must describe the same artifact SHA-256");
180
153
  };
181
- const omittedCounts = (parsed, limits) => assessManagedGraphOmissions({
154
+ const omittedCounts = (parsed) => assessManagedGraphOmissions({
182
155
  artifact: parsed.artifact?.result ?? null,
183
156
  members: parsed.members?.result ?? null,
184
157
  boundaries: parsed.boundaries?.result ?? null,
185
- }, limits);
158
+ });
186
159
  const projectionLimitations = (parsed, omissions) => [
187
160
  "Managed graph projection preserves static metadata observations only; it does not execute managed code, load assemblies, or map managed tokens to native addresses.",
188
161
  ...(parsed.members === null
@@ -198,9 +171,4 @@ const projectionLimitations = (parsed, omissions) => [
198
171
  ...(omissions.partialInput
199
172
  ? ["At least one supplied managed Evidence record has partial coverage."]
200
173
  : []),
201
- ...(totalManagedGraphOmitted(omissions) > 0
202
- ? [
203
- "Projection output omits managed entities because of source pagination or managed application graph limits.",
204
- ]
205
- : []),
206
174
  ];