rea-agents 3.1.0 → 3.2.1

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 (590) hide show
  1. package/README.md +72 -95
  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/AnalysisSnapshotCache.js +0 -1
  6. package/dist/application/AnalysisSnapshotFiles.js +7 -7
  7. package/dist/application/AndroidApplicationService.js +1 -1
  8. package/dist/application/AppleApplicationService.js +1 -1
  9. package/dist/application/ArtifactExtraction.js +35 -54
  10. package/dist/application/ArtifactExtractionDestination.js +17 -0
  11. package/dist/application/ArtifactGraphConstruction.js +2 -17
  12. package/dist/application/ArtifactInventory/classify.js +2 -6
  13. package/dist/application/ArtifactInventory/hash.js +2 -20
  14. package/dist/application/ArtifactInventory/scanCanonical.js +8 -12
  15. package/dist/application/ArtifactInventory/scanReader.js +69 -51
  16. package/dist/application/ArtifactInventory.js +6 -14
  17. package/dist/application/AuthorizedArtifactInventory.js +3 -13
  18. package/dist/application/BinarySession.js +41 -13
  19. package/dist/application/BinarySessionComposition.js +0 -11
  20. package/dist/application/BinarySessionOpen.js +2 -1
  21. package/dist/application/BinarySessionRecords.js +5 -93
  22. package/dist/application/BinarySessionStatus.js +5 -16
  23. package/dist/application/BinaryTargetResolver.js +216 -0
  24. package/dist/application/BrowserEvidence.js +42 -58
  25. package/dist/application/BrowserObservationService.js +3 -6
  26. package/dist/application/BrowserScenarioCaptureService.js +3 -6
  27. package/dist/application/BrowserScenarioEvidence.js +3 -3
  28. package/dist/application/CallPathTracing.js +2 -36
  29. package/dist/application/CapabilityInventory.js +10 -15
  30. package/dist/application/ClientConfigurationDocument.js +27 -0
  31. package/dist/application/ClientRegistrationStatus.js +16 -13
  32. package/dist/application/CommandShimReplay.js +14 -1
  33. package/dist/application/DirectAnalysis.js +22 -46
  34. package/dist/application/DirectAnalysisStatus.js +5 -61
  35. package/dist/application/Doctor.js +11 -32
  36. package/dist/application/DoctorDiagnostics.js +1 -2
  37. package/dist/application/DoctorScope.js +1 -1
  38. package/dist/application/ElectronActiveEvidence.js +3 -8
  39. package/dist/application/ElectronActiveObservationService.js +3 -6
  40. package/dist/application/ElectronBoundaryAnalysis.js +7 -8
  41. package/dist/application/ElectronBoundaryGraphContext.js +1 -1
  42. package/dist/application/ElectronBoundaryGraphIpc.js +3 -3
  43. package/dist/application/ElectronBoundaryGraphNative.js +1 -2
  44. package/dist/application/ElectronBoundaryGraphWindows.js +6 -8
  45. package/dist/application/ElectronEvidence.js +4 -7
  46. package/dist/application/ElectronObservationService.js +5 -9
  47. package/dist/application/EnhancedLiteralTracing.js +42 -65
  48. package/dist/application/EnhancedTools.js +76 -44
  49. package/dist/application/EvidenceBundleCommands.js +11 -11
  50. package/dist/application/EvidenceBundleFiles.js +9 -15
  51. package/dist/application/EvidenceLedger.js +6 -41
  52. package/dist/application/FilesystemSnapshot.js +2 -3
  53. package/dist/application/InterfaceBuilderAnalysis.js +266 -0
  54. package/dist/application/InventoryProjectionEvidence.js +4 -2
  55. package/dist/application/InvestigationProviders.js +1 -1
  56. package/dist/application/JavaScriptApplicationEvidence.js +2 -5
  57. package/dist/application/JavaScriptApplicationEvidenceGraph.js +6 -10
  58. package/dist/application/JavaScriptApplicationService.js +6 -29
  59. package/dist/application/JavaScriptApplicationWorkflowEvidence.js +5 -5
  60. package/dist/application/JavaScriptApplicationWorkflowService.js +0 -8
  61. package/dist/application/JavaScriptArtifactAnalysis.js +38 -127
  62. package/dist/application/JavaScriptArtifactFiles.js +67 -107
  63. package/dist/application/JavaScriptArtifactGraphAccumulator.js +0 -7
  64. package/dist/application/JavaScriptArtifactGraphBuilder.js +7 -58
  65. package/dist/application/JavaScriptArtifactGraphBundlers.js +1 -6
  66. package/dist/application/JavaScriptArtifactGraphContext.js +12 -39
  67. package/dist/application/JavaScriptArtifactGraphDocuments.js +4 -11
  68. package/dist/application/JavaScriptArtifactGraphEvidence.js +0 -14
  69. package/dist/application/JavaScriptArtifactGraphFindings.js +3 -3
  70. package/dist/application/JavaScriptArtifactGraphStructure.js +16 -17
  71. package/dist/application/JavaScriptArtifactPathResolution.js +61 -49
  72. package/dist/application/JavaScriptArtifactReconstruction.js +5 -10
  73. package/dist/application/JavaScriptArtifactReconstructionInput.js +2 -14
  74. package/dist/application/JavaScriptJsonModules.js +2 -2
  75. package/dist/application/JavaScriptModuleRelationships.js +22 -27
  76. package/dist/application/JavaScriptReplayPlanning.js +9 -3
  77. package/dist/application/JavaScriptReplayService.js +6 -32
  78. package/dist/application/JavaScriptReturnShapeProjection.js +12 -42
  79. package/dist/application/JavaScriptRuntimeObservationEvidence.js +7 -8
  80. package/dist/application/JavaScriptRuntimeObservationService.js +4 -8
  81. package/dist/application/JavaScriptRuntimeReconciliationEvidence.js +2 -3
  82. package/dist/application/JavaScriptSemanticGraphBuilder.js +11 -41
  83. package/dist/application/JavaScriptSemanticGraphConstruction.js +5 -29
  84. package/dist/application/JavaScriptSemanticGraphEvidence.js +1 -1
  85. package/dist/application/JavaScriptSemanticGraphFingerprintProjection.js +1 -1
  86. package/dist/application/JavaScriptSemanticGraphFlowProjection.js +0 -13
  87. package/dist/application/JavaScriptSemanticGraphProjection.js +1 -3
  88. package/dist/application/JavaScriptSemanticTraceService.js +1 -10
  89. package/dist/application/JsonFiles.js +79 -0
  90. package/dist/application/LinuxHopper.js +11 -9
  91. package/dist/application/LoopbackReplay.js +26 -23
  92. package/dist/application/LoopbackReplayRecorder.js +29 -1
  93. package/dist/application/ManagedApplicationGraphService.js +1 -2
  94. package/dist/application/ManagedMemberComparisonService.js +11 -41
  95. package/dist/application/ManagedNativeVerificationService.js +1 -2
  96. package/dist/application/ManagedReconstructionService.js +1 -1
  97. package/dist/application/ManagedRuntimeCorrelationService.js +5 -8
  98. package/dist/application/NativeApiInspection.js +2 -7
  99. package/dist/application/NativeUiActionTrace.js +394 -0
  100. package/dist/application/NodeRuntimeCharacterizationService.js +3 -7
  101. package/dist/application/PermissionAuthority.js +15 -7
  102. package/dist/application/PermissionFailure.js +5 -0
  103. package/dist/application/ProcessCaptureAuthority.js +5 -7
  104. package/dist/application/ProcessCaptureJournal.js +3 -2
  105. package/dist/application/ProcessCaptureLifecycle.js +5 -12
  106. package/dist/application/ProcessCheckpoints.js +29 -11
  107. package/dist/application/ProcessCli.js +6 -16
  108. package/dist/application/ProcessEvidence.js +5 -7
  109. package/dist/application/ProcessHarness.js +52 -17
  110. package/dist/application/ProcessReactiveCoordinator.js +2 -4
  111. package/dist/application/ProcessReactiveEffects.js +9 -3
  112. package/dist/application/ProcessReactiveHarness.js +13 -7
  113. package/dist/application/ProcessSampling.js +2 -4
  114. package/dist/application/ProcessTimer.js +39 -0
  115. package/dist/application/ProjectPermissionStore.js +39 -96
  116. package/dist/application/RealHopperAssertions.js +20 -66
  117. package/dist/application/ReconstructionCoverageService.js +12 -58
  118. package/dist/application/ReconstructionObligationAuthority.js +2 -2
  119. package/dist/application/ReconstructionObligationCandidates.js +4 -4
  120. package/dist/application/ReconstructionObligationLedgerEvaluation.js +8 -15
  121. package/dist/application/ReconstructionObligationLedgerProjection.js +3 -7
  122. package/dist/application/ReconstructionObligationLedgerService.js +19 -38
  123. package/dist/application/ReferenceSourceImport.js +19 -45
  124. package/dist/application/ReferenceSourceImportEntries.js +2 -4
  125. package/dist/application/ReferenceSourceImportPolicy.js +5 -32
  126. package/dist/application/ReferenceSourceImportTypes.js +0 -16
  127. package/dist/application/RuntimeExecutableDiagnostics.js +55 -29
  128. package/dist/application/SessionProviderRouter.js +2 -2
  129. package/dist/application/Setup.js +1 -3
  130. package/dist/application/SetupClientConfiguration.js +22 -93
  131. package/dist/application/SetupRegistrationEnvironment.js +0 -7
  132. package/dist/application/StoreFileLock.js +119 -0
  133. package/dist/application/TerminalRenderer.js +2 -3
  134. package/dist/application/Uninstall.js +9 -14
  135. package/dist/application/UnknownEvidence.js +1 -1
  136. package/dist/artifacts/ArtifactPaths.js +2 -5
  137. package/dist/artifacts/ArtifactProvider.js +36 -58
  138. package/dist/artifacts/DirectoryArtifactReader.js +13 -8
  139. package/dist/artifacts/MachOSliceArtifactReader.js +1 -5
  140. package/dist/artifacts/NativeDmgArtifactReader.js +11 -11
  141. package/dist/artifacts/NibArchive.js +269 -0
  142. package/dist/artifacts/SafeOutputTree.js +15 -24
  143. package/dist/browser/BrowserProcessStartup.js +1 -2
  144. package/dist/browser/CdpAuthorizedMainFrame.js +16 -0
  145. package/dist/browser/CdpBrowserProvider.js +3 -13
  146. package/dist/browser/CdpCanonicalJsonDigest.js +9 -0
  147. package/dist/browser/CdpCaptureDocuments.js +28 -76
  148. package/dist/browser/CdpCaptureEventBodyShapes.js +13 -33
  149. package/dist/browser/CdpCaptureEventHandlers.js +22 -87
  150. package/dist/browser/CdpCaptureEvents.js +2 -8
  151. package/dist/browser/CdpCaptureStorage.js +9 -20
  152. package/dist/browser/CdpCaptureStorageFingerprints.js +85 -98
  153. package/dist/browser/CdpCaptureValues.js +21 -21
  154. package/dist/browser/CdpConnection.js +10 -25
  155. package/dist/browser/CdpElectronInspection.js +26 -50
  156. package/dist/browser/CdpElectronProvider.js +10 -35
  157. package/dist/browser/CdpElectronScriptEvents.js +8 -16
  158. package/dist/browser/CdpElectronScripts.js +6 -35
  159. package/dist/browser/CdpElectronWorkers.js +6 -10
  160. package/dist/browser/CdpEndpoint.js +25 -41
  161. package/dist/browser/CdpObservationSession.js +14 -26
  162. package/dist/browser/CdpPageCapture.js +34 -48
  163. package/dist/browser/CdpPageCaptureScripts.js +1 -19
  164. package/dist/browser/CdpPageCaptureWorkers.js +6 -10
  165. package/dist/browser/CdpSafeMetadata.js +19 -22
  166. package/dist/browser/CdpScreenshot.js +3 -5
  167. package/dist/browser/CdpTargetSession.js +1 -2
  168. package/dist/browser/CdpWebMcpDiscovery.js +13 -22
  169. package/dist/browser/ElectronFileScope.js +8 -19
  170. package/dist/browser/JavaScriptRuntimeScope.js +9 -14
  171. package/dist/browser/PlaywrightBrowserScenarioProvider.js +31 -64
  172. package/dist/browser/PlaywrightElectronActiveActions.js +54 -69
  173. package/dist/browser/PlaywrightElectronActiveProvider.js +14 -34
  174. package/dist/browser/PlaywrightExecutionBoundary.js +16 -5
  175. package/dist/browser/PlaywrightScenarioActions.js +3 -7
  176. package/dist/browser/PlaywrightScenarioArtifacts.js +23 -92
  177. package/dist/browser/PlaywrightScenarioBrowser.js +3 -5
  178. package/dist/browser/PlaywrightScenarioEvents.js +45 -94
  179. package/dist/browser/PlaywrightScenarioSession.js +14 -30
  180. package/dist/browser/PngVisualDiff.js +22 -14
  181. package/dist/browser/SensitiveTextCapture.js +0 -17
  182. package/dist/browser/V8InspectorCaptureProjection.js +7 -8
  183. package/dist/browser/V8InspectorEndpoint.js +12 -14
  184. package/dist/browser/V8InspectorProvider.js +20 -61
  185. package/dist/browser/WebSourceMapFetcher.js +56 -176
  186. package/dist/catalogIdentity.js +0 -54
  187. package/dist/cli/artifactCommands.js +49 -77
  188. package/dist/cli/coreAnalysisCommands.js +83 -133
  189. package/dist/cli/javascriptApplicationAnalysis.js +1 -9
  190. package/dist/cli/managedCommands.js +5 -270
  191. package/dist/cli/setupCommands.js +3 -12
  192. package/dist/cli/utilityCommands.js +7 -41
  193. package/dist/cli.js +0 -2
  194. package/dist/cliApplicationCommands.js +42 -112
  195. package/dist/cliBrowserAdvancedCommands.js +10 -106
  196. package/dist/cliBrowserCommands.js +15 -127
  197. package/dist/cliBrowserContext.js +30 -0
  198. package/dist/cliCommandNames.js +4 -5
  199. package/dist/cliElectronCommands.js +8 -72
  200. package/dist/cliEvidenceCommands.js +8 -77
  201. package/dist/cliJavaScriptRuntimeCommands.js +9 -91
  202. package/dist/cliJsonInput.js +4 -14
  203. package/dist/cliObservationOptions.js +11 -96
  204. package/dist/cliPolicyCommands.js +2 -17
  205. package/dist/cliProcessCommands.js +3 -3
  206. package/dist/cliSetup.js +0 -13
  207. package/dist/config/browserScenario.js +2 -2
  208. package/dist/config/environment.js +0 -9
  209. package/dist/config/parseConfig.js +1 -33
  210. package/dist/config/parsers.js +6 -27
  211. package/dist/config/passiveObservation.js +7 -77
  212. package/dist/config/permissions.js +0 -7
  213. package/dist/contracts/analysisSearchContract.js +2 -5
  214. package/dist/contracts/applicationToolContracts.js +56 -109
  215. package/dist/contracts/applicationWorkflowInputContracts.js +27 -102
  216. package/dist/contracts/artifactComparisonExample.js +58 -60
  217. package/dist/contracts/artifactToolContracts.js +20 -67
  218. package/dist/contracts/browserScenarioToolContracts.js +6 -51
  219. package/dist/contracts/browserToolContracts.js +8 -73
  220. package/dist/contracts/electronToolContracts.js +8 -108
  221. package/dist/contracts/enhancedInputs.js +23 -54
  222. package/dist/contracts/errorSchemas.js +0 -1
  223. package/dist/contracts/functionComparisonExample.js +10 -24
  224. package/dist/contracts/functionInstructionContract.js +1 -3
  225. package/dist/contracts/functionWorkflowToolContracts.js +2 -2
  226. package/dist/contracts/hopperMemoryContracts.js +3 -3
  227. package/dist/contracts/investigationExamples.js +14 -11
  228. package/dist/contracts/javascriptApplicationWorkflowExamples.js +12 -19
  229. package/dist/contracts/javascriptRuntimeObservationToolContracts.js +2 -20
  230. package/dist/contracts/javascriptRuntimeReconciliationExample.js +45 -12
  231. package/dist/contracts/managedToolContracts.js +6 -95
  232. package/dist/contracts/managedWorkflowExamples.js +77 -128
  233. package/dist/contracts/managedWorkflowToolContracts.js +51 -77
  234. package/dist/contracts/nativeToolContracts.js +7 -11
  235. package/dist/contracts/processCaptureExample.js +2 -69
  236. package/dist/contracts/promptContracts.js +49 -67
  237. package/dist/contracts/providerSelection.js +0 -1
  238. package/dist/contracts/reconstructionReadinessExample.js +1 -6
  239. package/dist/contracts/sessionStatusContract.js +1 -17
  240. package/dist/contracts/sessionToolSchemas.js +6 -15
  241. package/dist/contracts/toolContractExamples.js +11 -11
  242. package/dist/contracts/toolContractHelpers.js +0 -4
  243. package/dist/contracts/toolContracts.js +60 -71
  244. package/dist/contracts/toolEffects.js +5 -13
  245. package/dist/contracts/toolOutputSchemaGroups.js +37 -91
  246. package/dist/contracts/toolOutputSchemaPrimitives.js +16 -56
  247. package/dist/contracts/toolSchemaMetadata.js +8 -19
  248. package/dist/contracts/unknownContractExamples.js +0 -2
  249. package/dist/domain/analysisErrorPresentation.js +46 -54
  250. package/dist/domain/analysisErrorProjection.js +28 -37
  251. package/dist/domain/analysisProfile.js +3 -31
  252. package/dist/domain/analysisSnapshot.js +3 -12
  253. package/dist/domain/androidApplication.js +15 -54
  254. package/dist/domain/appleApplication.js +24 -67
  255. package/dist/domain/artifactComparison.js +11 -29
  256. package/dist/domain/artifactGraph.js +14 -44
  257. package/dist/domain/artifactInspection.js +38 -69
  258. package/dist/domain/artifactInventoryEvidence.js +27 -21
  259. package/dist/domain/binaryTarget.js +2 -221
  260. package/dist/domain/browserCaptureComparison.js +47 -24
  261. package/dist/domain/browserObservation.js +28 -193
  262. package/dist/domain/browserObservationSchemas.js +5 -23
  263. package/dist/domain/browserScenario.js +11 -14
  264. package/dist/domain/browserScenarioCapture.js +11 -12
  265. package/dist/domain/browserScenarioCaptureValues.js +146 -84
  266. package/dist/domain/browserScenarioDiff.js +2 -59
  267. package/dist/domain/browserScenarioDiffEvidence.js +51 -0
  268. package/dist/domain/browserScenarioDiffValues.js +21 -38
  269. package/dist/domain/browserScenarioValues.js +80 -109
  270. package/dist/domain/browserSession.js +4 -7
  271. package/dist/domain/bundleComparison.js +6 -32
  272. package/dist/domain/bytecodeProvider.js +20 -19
  273. package/dist/domain/callPath.js +47 -167
  274. package/dist/domain/callPathSchemas.js +79 -0
  275. package/dist/domain/changedBehavior.js +34 -60
  276. package/dist/domain/completionLedgerGeneration.js +8 -14
  277. package/dist/domain/conformancePackage.js +126 -97
  278. package/dist/domain/conformanceReplay.js +36 -8
  279. package/dist/domain/conformanceTrustGate.js +23 -14
  280. package/dist/domain/customProtocolCapture.js +1 -1
  281. package/dist/domain/electronActiveObservation.js +70 -103
  282. package/dist/domain/electronObservation.js +14 -80
  283. package/dist/domain/electronStaticAnalysisBrowser.js +36 -46
  284. package/dist/domain/electronStaticAnalysisIpc.js +38 -14
  285. package/dist/domain/electronStaticAnalysisNative.js +1 -8
  286. package/dist/domain/electronStaticAnalysisValues.js +10 -17
  287. package/dist/domain/errors.js +33 -54
  288. package/dist/domain/eventProcessTree.js +20 -12
  289. package/dist/domain/evidence.js +2 -10
  290. package/dist/domain/evidenceBundle.js +3 -5
  291. package/dist/domain/evidenceCompletionLedger.js +6 -8
  292. package/dist/domain/functionComparison.js +4 -14
  293. package/dist/domain/functionComparisonNormalization.js +4 -11
  294. package/dist/domain/functionComparisonResults.js +25 -15
  295. package/dist/domain/functionComparisonSchemas.js +49 -33
  296. package/dist/domain/functionDossierEvidence.js +31 -156
  297. package/dist/domain/hopperStartupFailure.js +1 -1
  298. package/dist/domain/hopperValues.js +15 -136
  299. package/dist/domain/interfaceBuilderGraph.js +654 -0
  300. package/dist/domain/javascriptApplicationAnalysis.js +8 -112
  301. package/dist/domain/javascriptApplicationChangeGraph.js +22 -82
  302. package/dist/domain/javascriptApplicationEvidenceSchemas.js +59 -47
  303. package/dist/domain/javascriptApplicationGraph.js +3 -13
  304. package/dist/domain/javascriptApplicationGraphSchemas.js +12 -34
  305. package/dist/domain/javascriptApplicationVersionComparison.js +26 -30
  306. package/dist/domain/javascriptApplicationVersionComparisonSchemas.js +123 -68
  307. package/dist/domain/javascriptApplicationVersionItems.js +120 -53
  308. package/dist/domain/javascriptApplicationVersionKeys.js +24 -11
  309. package/dist/domain/javascriptAstFingerprint.js +25 -58
  310. package/dist/domain/javascriptAstValues.js +9 -0
  311. package/dist/domain/javascriptExportInstrumentation.js +2 -4
  312. package/dist/domain/javascriptExportShapeComparison.js +6 -7
  313. package/dist/domain/javascriptExportShapeComparisonSchemas.js +68 -75
  314. package/dist/domain/javascriptExportShapeSelection.js +17 -19
  315. package/dist/domain/javascriptFeatureSeed.js +20 -12
  316. package/dist/domain/javascriptFeatureTrace.js +13 -67
  317. package/dist/domain/javascriptFeatureTraceSchemas.js +24 -52
  318. package/dist/domain/javascriptFeatureTraversal.js +1 -44
  319. package/dist/domain/javascriptNativeHandoff.js +1 -1
  320. package/dist/domain/javascriptReplay.js +24 -41
  321. package/dist/domain/javascriptRuntimeLoadState.js +3 -8
  322. package/dist/domain/javascriptRuntimeObservation.js +42 -103
  323. package/dist/domain/javascriptRuntimeReconciliation.js +1 -3
  324. package/dist/domain/javascriptRuntimeReconciliationActive.js +8 -17
  325. package/dist/domain/javascriptRuntimeReconciliationGraph.js +10 -23
  326. package/dist/domain/javascriptRuntimeReconciliationMatching.js +18 -12
  327. package/dist/domain/javascriptRuntimeReconciliationParsing.js +16 -45
  328. package/dist/domain/javascriptRuntimeReconciliationResult.js +4 -5
  329. package/dist/domain/javascriptRuntimeReconciliationRuntime.js +8 -12
  330. package/dist/domain/javascriptRuntimeReconciliationSchemas.js +33 -48
  331. package/dist/domain/javascriptRuntimeStaticCandidates.js +3 -3
  332. package/dist/domain/javascriptSemanticAnalysis.js +12 -45
  333. package/dist/domain/javascriptSemanticAsyncEffects.js +1 -9
  334. package/dist/domain/javascriptSemanticCallResolution.js +6 -16
  335. package/dist/domain/javascriptSemanticCalls.js +5 -32
  336. package/dist/domain/javascriptSemanticChildProcesses.js +1 -11
  337. package/dist/domain/javascriptSemanticCoverage.js +11 -0
  338. package/dist/domain/javascriptSemanticDataEffectHelpers.js +1 -8
  339. package/dist/domain/javascriptSemanticDataEffects.js +1 -11
  340. package/dist/domain/javascriptSemanticFingerprints.js +3 -5
  341. package/dist/domain/javascriptSemanticGraphSchemas.js +25 -51
  342. package/dist/domain/javascriptSemanticGraphSerialization.js +2 -13
  343. package/dist/domain/javascriptSemanticIr.js +1 -29
  344. package/dist/domain/javascriptSemanticObjects.js +1 -5
  345. package/dist/domain/javascriptSemanticPrimitives.js +2 -9
  346. package/dist/domain/javascriptSemanticProjection.js +0 -18
  347. package/dist/domain/javascriptSemanticPromises.js +9 -16
  348. package/dist/domain/javascriptSemanticProvenance.js +16 -19
  349. package/dist/domain/javascriptSemanticQuery.js +17 -139
  350. package/dist/domain/javascriptSemanticQueryAssessment.js +9 -37
  351. package/dist/domain/javascriptSemanticQueryIdentity.js +2 -23
  352. package/dist/domain/javascriptSemanticQuerySchemas.js +14 -107
  353. package/dist/domain/javascriptSemanticResources.js +1 -6
  354. package/dist/domain/javascriptSemanticReturns.js +10 -27
  355. package/dist/domain/javascriptSemanticValueTypes.js +1 -0
  356. package/dist/domain/javascriptSemanticValues.js +44 -62
  357. package/dist/domain/javascriptStaticAnalysis.js +21 -43
  358. package/dist/domain/javascriptStaticAnalysisBundler.js +34 -93
  359. package/dist/domain/javascriptStaticAnalysisCalls.js +17 -16
  360. package/dist/domain/javascriptStaticAnalysisFindings.js +3 -19
  361. package/dist/domain/javascriptStaticAnalysisHelpers.js +47 -88
  362. package/dist/domain/javascriptStaticAnalysisState.js +1 -5
  363. package/dist/domain/javascriptStaticAnalysisTypes.js +1 -0
  364. package/dist/domain/jsonShape.js +7 -33
  365. package/dist/domain/localPath.js +7 -0
  366. package/dist/domain/managedApplicationGraph.js +9 -41
  367. package/dist/domain/managedApplicationGraphCoverage.js +24 -156
  368. package/dist/domain/managedApplicationGraphNodes.js +10 -13
  369. package/dist/domain/managedArtifact.js +14 -27
  370. package/dist/domain/managedMemberComparison.js +90 -92
  371. package/dist/domain/managedMemberComparisonCoverage.js +11 -33
  372. package/dist/domain/managedMemberComparisonItems.js +221 -0
  373. package/dist/domain/managedMemberComparisonMatch.js +8 -208
  374. package/dist/domain/managedNativeVerification.js +3 -6
  375. package/dist/domain/managedNativeVerificationMatch.js +55 -59
  376. package/dist/domain/managedNativeVerificationSchemas.js +83 -47
  377. package/dist/domain/managedReconstruction.js +19 -23
  378. package/dist/domain/managedRuntimeCorrelation.js +6 -9
  379. package/dist/domain/nativeApiBoundary.js +2 -7
  380. package/dist/domain/nativeInspection.js +0 -2
  381. package/dist/domain/nativeInvestigationGraph.js +351 -0
  382. package/dist/domain/nativeValueFlow.js +61 -0
  383. package/dist/domain/nodeRuntimeCharacterization.js +1 -5
  384. package/dist/domain/objcSwiftMetadata.js +254 -0
  385. package/dist/domain/peInspection.js +1 -1
  386. package/dist/domain/permissionPolicy.js +13 -0
  387. package/dist/domain/processCapture.js +76 -113
  388. package/dist/domain/processCaptureExample.js +68 -0
  389. package/dist/domain/processCaptureParsing.js +21 -0
  390. package/dist/domain/processCaptureReactiveSchema.js +68 -0
  391. package/dist/domain/processCaptureValidation.js +1 -7
  392. package/dist/domain/processComparison.js +3 -12
  393. package/dist/domain/processReactiveMatching.js +29 -50
  394. package/dist/domain/processReactiveRuntime.js +4 -8
  395. package/dist/domain/processReactiveScenario.js +28 -94
  396. package/dist/domain/processReactiveScenarioPreflight.js +5 -30
  397. package/dist/domain/processReactiveTransition.js +33 -18
  398. package/dist/domain/processScenario.js +56 -90
  399. package/dist/domain/processTraceComparison.js +0 -8
  400. package/dist/domain/processTraceEvaluation.js +14 -4
  401. package/dist/domain/processTraceSpecification.js +11 -17
  402. package/dist/domain/protocolCapture.js +3 -3
  403. package/dist/domain/reconstructionCoverage.js +62 -129
  404. package/dist/domain/reconstructionCoverageEvaluation.js +17 -17
  405. package/dist/domain/reconstructionObligationLedgerSchemas.js +45 -72
  406. package/dist/domain/reconstructionReadiness.js +1 -2
  407. package/dist/domain/reconstructionReadinessSchemas.js +36 -38
  408. package/dist/domain/reconstructionUnknowns.js +3 -3
  409. package/dist/domain/reconstructionVerification.js +13 -47
  410. package/dist/domain/reconstructionVerificationSchemas.js +50 -38
  411. package/dist/domain/referenceSourceGraph.js +53 -61
  412. package/dist/domain/referenceSourceImportParsing.js +1 -5
  413. package/dist/domain/replayMachine.js +19 -31
  414. package/dist/domain/replayMachineRun.js +15 -63
  415. package/dist/domain/replayMachineRuntime.js +41 -41
  416. package/dist/domain/replayMachineValues.js +84 -0
  417. package/dist/domain/residualUnknown.js +25 -30
  418. package/dist/domain/runtimeCharacterization.js +15 -16
  419. package/dist/domain/runtimeIdentification.js +48 -47
  420. package/dist/domain/sourceToBundleComparison.js +9 -85
  421. package/dist/domain/sourceToBundleComparisonSchemas.js +17 -42
  422. package/dist/domain/sourceToBundleSignals.js +4 -15
  423. package/dist/domain/staticRuntimeCorrelation.js +37 -49
  424. package/dist/domain/symbolAnalysis.js +10 -19
  425. package/dist/domain/unicodeCodePointOrder.js +12 -0
  426. package/dist/domain/webBundleAnalysis.js +70 -99
  427. package/dist/domain/webBundleAnalyzer.js +2 -4
  428. package/dist/domain/webBundleAnalyzerAst.js +0 -13
  429. package/dist/domain/webBundleAnalyzerInspection.js +26 -52
  430. package/dist/domain/webBundleAnalyzerResult.js +7 -24
  431. package/dist/domain/webCaptureDiff.js +33 -73
  432. package/dist/domain/webCaptureDiffSchemas.js +86 -0
  433. package/dist/domain/webContentArtifact.js +1 -10
  434. package/dist/domain/webMcpDiscovery.js +3 -14
  435. package/dist/domain/webScreenshot.js +58 -34
  436. package/dist/domain/zipPackageFormat.js +7 -0
  437. package/dist/dotnet/ManagedArtifactInspector.js +17 -50
  438. package/dist/dotnet/ManagedMemberInspector.js +27 -58
  439. package/dist/dotnet/ManagedMemberInspectorCore.js +14 -51
  440. package/dist/dotnet/ManagedMemberInstructionDecoder.js +2 -2
  441. package/dist/dotnet/ManagedMemberRows.js +16 -16
  442. package/dist/dotnet/ManagedMetadataHeaps.js +26 -8
  443. package/dist/dotnet/ManagedMetadataInventory.js +21 -30
  444. package/dist/dotnet/ManagedMetadataInventoryRows.js +57 -63
  445. package/dist/dotnet/ManagedMetadataLayout.js +3 -5
  446. package/dist/dotnet/ManagedMethodBodyReader.js +5 -30
  447. package/dist/dotnet/ManagedNativeBoundaryHelpers.js +19 -49
  448. package/dist/dotnet/ManagedNativeBoundaryInspector.js +13 -41
  449. package/dist/dotnet/ManagedPeReader.js +2 -2
  450. package/dist/dotnet/ManagedStaticProvider.js +13 -71
  451. package/dist/generatedMcpToolCatalog.js +1 -1
  452. package/dist/generatedPackageMetadata.js +1 -1
  453. package/dist/ghidra/GhidraAnalysisProfile.js +3 -8
  454. package/dist/ghidra/GhidraClient.js +4 -12
  455. package/dist/ghidra/GhidraClientWire.js +9 -5
  456. package/dist/ghidra/GhidraDefaults.js +0 -18
  457. package/dist/ghidra/GhidraDiagnostics.js +0 -2
  458. package/dist/ghidra/GhidraDoctor.js +16 -12
  459. package/dist/ghidra/GhidraFunctionValues.js +65 -108
  460. package/dist/ghidra/GhidraInstallation.js +98 -42
  461. package/dist/ghidra/GhidraInventoryValues.js +16 -85
  462. package/dist/ghidra/GhidraLauncher.js +0 -8
  463. package/dist/ghidra/GhidraProvider.js +15 -22
  464. package/dist/ghidra/GhidraProviderCapabilities.js +6 -47
  465. package/dist/ghidra/GhidraRequestQueue.js +6 -30
  466. package/dist/ghidra/GhidraResponseBuffer.js +1 -7
  467. package/dist/ghidra/GhidraSessionValues.js +0 -2
  468. package/dist/ghidra/GhidraTransport.js +4 -7
  469. package/dist/ghidra/protocol.js +2 -2
  470. package/dist/hopper/BridgeLauncher.js +112 -36
  471. package/dist/hopper/HopperAnalysisProfile.js +1 -1
  472. package/dist/hopper/HopperCleanup.js +6 -3
  473. package/dist/hopper/HopperClient.js +4 -7
  474. package/dist/hopper/HopperProcessDiagnostic.js +2 -2
  475. package/dist/hopper/HopperProvider.js +0 -16
  476. package/dist/hopper/HopperRequestQueue.js +21 -40
  477. package/dist/hopper/HopperResponseStream.js +1 -9
  478. package/dist/hopper/HopperSessionValues.js +3 -2
  479. package/dist/hopper/HopperTargetLease.js +119 -0
  480. package/dist/hopper/LinuxPrivateDisplayDiagnostic.js +24 -31
  481. package/dist/hopper/LinuxPrivateDisplayProbe.js +5 -16
  482. package/dist/hopper/protocol.js +6 -4
  483. package/dist/main/reload.js +0 -3
  484. package/dist/main/shutdown.js +1 -1
  485. package/dist/main/state.js +0 -9
  486. package/dist/main/transport.js +0 -5
  487. package/dist/mcpDoctor.js +25 -45
  488. package/dist/native/CommandRunner.js +18 -25
  489. package/dist/native/NativeMacOSProvider.js +13 -38
  490. package/dist/native/NativeMachoInspection.js +1 -1
  491. package/dist/process/BoundedFileBytes.js +17 -0
  492. package/dist/process/ExecFileOutput.js +11 -0
  493. package/dist/process/PendingOperations.js +8 -6
  494. package/dist/process/ProcessOwnership.js +3 -2
  495. package/dist/process/ProcessOwnershipObservation.js +0 -1
  496. package/dist/process/ProviderProcess.js +7 -28
  497. package/dist/reference/ReferenceSourceReader.js +8 -24
  498. package/dist/reference/ReferenceSourceReaderEntries.js +11 -39
  499. package/dist/reference/ReferenceSourceReaderFile.js +13 -31
  500. package/dist/reference/ReferenceSourceReaderPaths.js +3 -18
  501. package/dist/reference/ReferenceSourceReaderValidate.js +3 -6
  502. package/dist/replay/JavaScriptReplayWorker.js +3 -5
  503. package/dist/replay/LinuxJavaScriptReplayRunner.js +33 -29
  504. package/dist/replay/LinuxJavaScriptReplaySandbox.js +0 -19
  505. package/dist/replay/LinuxRuntimeClosure.js +1 -3
  506. package/dist/replay/ReplayOutcome.js +1 -3
  507. package/dist/replay/ReplayProcessLifecycle.js +32 -7
  508. package/dist/replay/ReplaySeccompFile.js +29 -0
  509. package/dist/replay/ReplayWorkerProtocol.js +0 -2
  510. package/dist/replay/SystemJavaScriptReplayHost.js +45 -74
  511. package/dist/server/ProcessCaptureElicitation.js +4 -8
  512. package/dist/server/createServer.js +6 -44
  513. package/dist/server/promptCompletion.js +37 -61
  514. package/dist/server/recordDerivedEvidence.js +1 -1
  515. package/dist/server/registerApplicationTools/characterization.js +4 -8
  516. package/dist/server/registerApplicationTools/compareExportShapes.js +5 -10
  517. package/dist/server/registerApplicationTools/compareSourceToBundle.js +6 -10
  518. package/dist/server/registerApplicationTools/compareVersions.js +5 -10
  519. package/dist/server/registerApplicationTools/controlledReplay.js +3 -5
  520. package/dist/server/registerApplicationTools/coverage.js +6 -71
  521. package/dist/server/registerApplicationTools/helpers.js +1 -13
  522. package/dist/server/registerApplicationTools/obligationLedger.js +3 -2
  523. package/dist/server/registerApplicationTools/traceFeature.js +5 -9
  524. package/dist/server/registerApplicationTools/traceSemantics.js +5 -8
  525. package/dist/server/registerApplicationTools.js +0 -2
  526. package/dist/server/registerArtifactComparisonTool.js +23 -27
  527. package/dist/server/registerBrowserScenarioTool.js +4 -4
  528. package/dist/server/registerBrowserTools.js +5 -8
  529. package/dist/server/registerBundleComparisonTool.js +5 -7
  530. package/dist/server/registerCloseLifecycleTool.js +2 -16
  531. package/dist/server/registerElectronTools.js +10 -29
  532. package/dist/server/registerEnhancedTools.js +10 -11
  533. package/dist/server/registerEvidenceTools.js +15 -22
  534. package/dist/server/registerFunctionComparisonTool.js +30 -25
  535. package/dist/server/registerInvestigationTools/helpers.js +3 -32
  536. package/dist/server/registerInvestigationTools.js +20 -116
  537. package/dist/server/registerJavaScriptRuntimeObservationTools.js +6 -4
  538. package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +15 -17
  539. package/dist/server/registerManagedWorkflowTools/evidence.js +19 -35
  540. package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +3 -8
  541. package/dist/server/registerManagedWorkflowTools/planManagedRuntimeCorrelation.js +3 -8
  542. package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +10 -14
  543. package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +9 -15
  544. package/dist/server/registerOfficialTools.js +1 -43
  545. package/dist/server/registerProcessComparisonTool.js +33 -23
  546. package/dist/server/registerPrompts.js +19 -17
  547. package/dist/server/registerSessionRecordTools.js +10 -156
  548. package/dist/server/registerSessionStatusTool.js +6 -69
  549. package/dist/server/registerSessionTools.js +10 -51
  550. package/dist/server/sessionAvailabilityPolicy.js +0 -2
  551. package/dist/server/sessionEvidence.js +9 -15
  552. package/dist/server/sessionToolPolicies.js +0 -8
  553. package/dist/server/toolResult.js +14 -50
  554. package/dist/serverIdentity.js +0 -20
  555. package/install.sh +1 -1
  556. package/package.json +11 -7
  557. package/scripts/electron-active-hook.cjs +23 -55
  558. package/scripts/hopper-demo-x11.py +13 -32
  559. package/skills/reverse-engineer-anything/SKILL.md +47 -12
  560. package/skills/reverse-engineer-anything/references/evidence-workflows.md +6 -4
  561. package/skills/reverse-engineer-anything/references/javascript-applications.md +13 -13
  562. package/skills/reverse-engineer-anything/references/native-and-artifacts.md +12 -8
  563. package/dist/application/ApplicationWorkflowEvidenceResolver.js +0 -188
  564. package/dist/application/BoundedJsonFiles.js +0 -86
  565. package/dist/application/CrossVersionInventory.js +0 -129
  566. package/dist/application/CrossVersionInvestigation.js +0 -301
  567. package/dist/application/CrossVersionInvestigationCollections.js +0 -23
  568. package/dist/application/CrossVersionInvestigationEvidence.js +0 -64
  569. package/dist/application/CrossVersionInvestigationReplay.js +0 -170
  570. package/dist/application/DeferredFileAuthorization.js +0 -61
  571. package/dist/application/DoctorProjection.js +0 -43
  572. package/dist/application/EnhancedToolPagination.js +0 -22
  573. package/dist/application/EvidenceReferenceResolver.js +0 -26
  574. package/dist/application/InvestigationWorkspaceStore.js +0 -204
  575. package/dist/application/ProcessPairedExperiment.js +0 -72
  576. package/dist/application/ReconstructionCoverageWorkspaceStore.js +0 -31
  577. package/dist/application/ReconstructionReadinessService.js +0 -48
  578. package/dist/cliInvestigationCommands.js +0 -173
  579. package/dist/domain/boundedCartesianProjection.js +0 -15
  580. package/dist/domain/investigationWorkspace.js +0 -347
  581. package/dist/domain/jsonLimits.js +0 -26
  582. package/dist/domain/knownPageCoverage.js +0 -29
  583. package/dist/domain/processPairedExperiment.js +0 -128
  584. package/dist/server/javascriptApplicationResult.js +0 -106
  585. package/dist/server/permissionFailure.js +0 -12
  586. package/dist/server/registerApplicationTools/readiness.js +0 -50
  587. package/dist/server/registerEvidenceResources.js +0 -315
  588. package/dist/server/registerJavaScriptApplicationGraphResource.js +0 -65
  589. package/dist/server/registerReconstructionObligationLedgerResource.js +0 -32
  590. package/dist/server/registerReconstructionReadinessResource.js +0 -32
@@ -1,105 +1,65 @@
1
1
  import { AnyMap, eachMapping } from "@jridgewell/trace-mapping";
2
2
  import { sanitizeBrowserUrl } from "../domain/browserObservation.js";
3
+ import { webSourceMapsSchema } from "../domain/webBundleAnalysis.js";
3
4
  import { createWebTextArtifact } from "../domain/webContentArtifact.js";
4
5
  /** Fetch and validate approved source maps without browser credentials. */
5
6
  export const fetchWebSourceMaps = async (requests, input, signal, host = { fetch: globalThis.fetch }) => {
6
7
  const items = [];
7
- let remainingBytes = input.analysis_limits.max_total_source_map_bytes;
8
- for (const request of requests.slice(0, input.analysis_limits.max_source_maps)) {
8
+ for (const request of requests) {
9
9
  if (signal?.aborted === true)
10
10
  throw signal.reason;
11
- if (remainingBytes === 0)
12
- break;
13
- const fetched = await fetchOne(request, {
14
- input,
15
- maximumBytes: Math.min(input.analysis_limits.max_source_map_bytes, remainingBytes),
16
- signal,
17
- host,
18
- });
19
- items.push(fetched.item);
20
- remainingBytes = Math.max(0, remainingBytes - fetched.bytesRead);
11
+ items.push(await fetchOne(request, input, signal, host));
21
12
  }
22
13
  const included = items.filter(({ status }) => status === "included").length;
23
- const dropped = requests.length - items.length;
24
- const truncated = dropped > 0 || items.some(({ status }) => status === "truncated");
25
- return {
26
- status: truncated
27
- ? "truncated"
28
- : items.length === 0
29
- ? "unavailable"
30
- : included === items.length
31
- ? "included"
32
- : included > 0
33
- ? "partial"
34
- : "unavailable",
14
+ return webSourceMapsSchema.parse({
15
+ status: items.length === 0
16
+ ? "unavailable"
17
+ : included === items.length
18
+ ? "included"
19
+ : included > 0
20
+ ? "partial"
21
+ : "unavailable",
35
22
  requested: requests.length,
36
23
  processed: items.length,
37
- dropped,
38
- dropped_script_keys: requests
39
- .slice(items.length)
40
- .map(({ scriptKey }) => scriptKey),
41
24
  items,
42
- };
25
+ });
43
26
  };
44
- const fetchOne = async (request, context) => {
45
- const { input, maximumBytes, signal, host } = context;
46
- const base = emptyItem(request);
27
+ const fetchOne = async (request, input, signal, host) => {
47
28
  if (!approvedUrl(request.fetchUrl, input.allowed_origins))
48
- return {
49
- item: {
50
- ...base,
51
- status: "policy_filtered",
52
- limitation: "Declared source-map URL is outside the approved exact origins.",
53
- },
54
- bytesRead: 0,
55
- };
29
+ return emptySourceMapItem(request, "policy_filtered", "Declared source-map URL is outside the approved exact origins.");
56
30
  try {
57
31
  const response = await fetchFollowingApprovedRedirects(request.fetchUrl, input.allowed_origins, signal, host);
58
32
  if (response === undefined)
59
- return {
60
- item: {
61
- ...base,
62
- status: "policy_filtered",
63
- limitation: "A source-map redirect left the approved exact origins.",
64
- },
65
- bytesRead: 0,
66
- };
33
+ return emptySourceMapItem(request, "policy_filtered", "A source-map redirect left the approved exact origins.");
67
34
  if (!response.ok)
68
- return {
69
- item: {
70
- ...base,
71
- status: "fetch_failed",
72
- limitation: `Source-map server returned HTTP ${String(response.status)}.`,
73
- },
74
- bytesRead: 0,
75
- };
76
- const body = await boundedResponseText(response, maximumBytes);
77
- return {
78
- item: normalizeSourceMap(request, body.text, input),
79
- bytesRead: body.bytes,
80
- };
35
+ return emptySourceMapItem(request, "fetch_failed", `Source-map server returned HTTP ${String(response.status)}.`);
36
+ return normalizeSourceMap(request, await response.text());
81
37
  }
82
38
  catch (cause) {
83
39
  if (signal?.aborted === true)
84
40
  throw cause;
85
- return {
86
- item: {
87
- ...base,
88
- status: isLimitError(cause) ? "truncated" : "fetch_failed",
89
- limitation: isLimitError(cause)
90
- ? "Source-map response exceeded the remaining approved byte budget."
91
- : "Source-map fetch or validation failed.",
92
- },
93
- bytesRead: cause instanceof SourceMapByteLimitError ? cause.bytesRead : 0,
94
- };
41
+ return emptySourceMapItem(request, "fetch_failed", "Source-map fetch or validation failed.");
95
42
  }
96
43
  };
97
44
  const fetchFollowingApprovedRedirects = async (initialUrl, allowedOrigins, signal, host) => {
98
45
  let current = initialUrl;
99
- for (let redirect = 0; redirect <= 5; redirect += 1) {
46
+ const visited = new Set();
47
+ for (;;) {
100
48
  if (!approvedUrl(current, allowedOrigins))
101
49
  return undefined;
102
- const response = await timedFetch(current, signal, host);
50
+ if (visited.has(current))
51
+ throw new Error("source_map_redirect_loop");
52
+ visited.add(current);
53
+ const response = await host.fetch(current, {
54
+ method: "GET",
55
+ headers: {
56
+ Accept: "application/json, application/source-map+json;q=0.9",
57
+ },
58
+ redirect: "manual",
59
+ credentials: "omit",
60
+ referrerPolicy: "no-referrer",
61
+ ...(signal === undefined ? {} : { signal }),
62
+ });
103
63
  if (response.status < 300 || response.status >= 400)
104
64
  return response;
105
65
  const location = response.headers.get("location");
@@ -107,66 +67,12 @@ const fetchFollowingApprovedRedirects = async (initialUrl, allowedOrigins, signa
107
67
  return response;
108
68
  current = new URL(location, current).href;
109
69
  }
110
- throw new Error("source_map_redirect_limit");
111
70
  };
112
- const timedFetch = async (url, signal, host) => {
113
- const timeout = AbortSignal.timeout(5_000);
114
- return await host.fetch(url, {
115
- method: "GET",
116
- headers: { Accept: "application/json, application/source-map+json;q=0.9" },
117
- redirect: "manual",
118
- credentials: "omit",
119
- referrerPolicy: "no-referrer",
120
- signal: signal === undefined ? timeout : AbortSignal.any([signal, timeout]),
121
- });
122
- };
123
- const boundedResponseText = async (response, maximumBytes) => {
124
- const declared = Number(response.headers.get("content-length"));
125
- if (Number.isFinite(declared) && declared > maximumBytes)
126
- throw new SourceMapByteLimitError(0);
127
- if (response.body === null)
128
- return { text: "", bytes: 0 };
129
- const reader = response.body.getReader();
130
- const decoder = new TextDecoder("utf-8", { fatal: true });
131
- let bytes = 0;
132
- let text = "";
133
- for (;;) {
134
- const chunk = await reader.read();
135
- if (chunk.done)
136
- break;
137
- bytes += chunk.value.byteLength;
138
- if (bytes > maximumBytes) {
139
- await reader.cancel();
140
- throw new SourceMapByteLimitError(bytes);
141
- }
142
- text += decoder.decode(chunk.value, { stream: true });
143
- }
144
- text += decoder.decode();
145
- return { text, bytes };
146
- };
147
- class SourceMapByteLimitError extends RangeError {
148
- bytesRead;
149
- constructor(bytesRead) {
150
- super("source_map_bytes");
151
- this.bytesRead = bytesRead;
152
- }
153
- }
154
- const normalizeSourceMap = (request, text, input) => {
155
- const base = emptyItem(request);
71
+ const normalizeSourceMap = (request, text) => {
156
72
  if (!validSourceMapEnvelope(text))
157
- return {
158
- ...base,
159
- status: "invalid",
160
- limitation: "Source-map JSON is not a bounded version 3 map.",
161
- };
73
+ return emptySourceMapItem(request, "invalid", "Source-map JSON is not a version 3 map.");
162
74
  try {
163
75
  const map = new AnyMap(text, request.fetchUrl);
164
- if (map.sources.length > input.analysis_limits.max_original_sources)
165
- return {
166
- ...base,
167
- status: "truncated",
168
- limitation: "Source map exceeds the original-source inventory limit.",
169
- };
170
76
  const resolvedBySource = new Map();
171
77
  const originalSources = map.sources.map((source, index) => {
172
78
  const content = map.sourcesContent?.[index];
@@ -181,57 +87,35 @@ const normalizeSourceMap = (request, text, input) => {
181
87
  };
182
88
  });
183
89
  const mappings = [];
184
- let totalMappings = 0;
185
90
  eachMapping(map, (mapping) => {
186
91
  if (mapping.source === null ||
187
92
  mapping.originalLine === null ||
188
93
  mapping.originalColumn === null)
189
94
  return;
190
- totalMappings += 1;
191
- if (mappings.length >= input.analysis_limits.max_source_map_mappings)
192
- return;
193
95
  mappings.push({
194
96
  generated_line: mapping.generatedLine,
195
97
  generated_column: mapping.generatedColumn,
196
98
  source: sanitizeSource(resolvedBySource.get(mapping.source) ?? mapping.source),
197
99
  original_line: mapping.originalLine,
198
100
  original_column: mapping.originalColumn,
199
- name: mapping.name?.slice(0, 1_024) ?? null,
101
+ name: mapping.name ?? null,
200
102
  });
201
103
  });
202
- const modules = originalModuleEdges(originalSources, input.analysis_limits.max_findings);
203
- const mappingTruncated = totalMappings > mappings.length;
204
- const limitations = [
205
- ...(mappingTruncated
206
- ? [
207
- `Mappings were truncated from ${String(totalMappings)} to ${String(mappings.length)}.`,
208
- ]
209
- : []),
210
- ...(modules.truncated
211
- ? [
212
- `Original module edges were truncated to ${String(modules.edges.length)}.`,
213
- ]
214
- : []),
215
- ];
216
- return {
217
- ...base,
218
- status: mappingTruncated || modules.truncated ? "truncated" : "included",
104
+ const modules = originalModuleEdges(originalSources);
105
+ const parsed = {
106
+ ...sourceMapContext(request),
219
107
  artifact: createWebTextArtifact(text, "application/source-map+json"),
220
108
  original_sources: originalSources,
221
- original_module_edges: modules.edges,
109
+ original_module_edges: modules,
222
110
  mappings,
223
- limitation: limitations.length === 0 ? null : limitations.join(" "),
224
111
  };
112
+ return { ...parsed, status: "included", limitation: null };
225
113
  }
226
114
  catch {
227
- return {
228
- ...base,
229
- status: "invalid",
230
- limitation: "Source-map mappings could not be decoded safely.",
231
- };
115
+ return emptySourceMapItem(request, "invalid", "Source-map mappings could not be decoded safely.");
232
116
  }
233
117
  };
234
- const originalModuleEdges = (sources, maximum) => {
118
+ const originalModuleEdges = (sources) => {
235
119
  const edges = [];
236
120
  const seen = new Set();
237
121
  for (const source of sources) {
@@ -239,15 +123,13 @@ const originalModuleEdges = (sources, maximum) => {
239
123
  continue;
240
124
  for (const detector of originalImportDetectors) {
241
125
  for (const match of source.artifact.text.matchAll(detector.pattern)) {
242
- const specifier = match[1]?.slice(0, 4_096);
126
+ const specifier = match[1];
243
127
  if (specifier === undefined)
244
128
  continue;
245
129
  const key = `${source.source}\0${detector.kind}\0${specifier}`;
246
130
  if (seen.has(key))
247
131
  continue;
248
132
  seen.add(key);
249
- if (edges.length >= maximum)
250
- return { edges, truncated: true };
251
133
  edges.push({
252
134
  from_source: source.source,
253
135
  kind: detector.kind,
@@ -257,7 +139,7 @@ const originalModuleEdges = (sources, maximum) => {
257
139
  }
258
140
  }
259
141
  }
260
- return { edges, truncated: false };
142
+ return edges;
261
143
  };
262
144
  const validSourceMapEnvelope = (text) => {
263
145
  let parsed;
@@ -271,22 +153,19 @@ const validSourceMapEnvelope = (text) => {
271
153
  return false;
272
154
  if (typeof parsed.mappings === "string")
273
155
  return Array.isArray(parsed.sources) && Array.isArray(parsed.names);
274
- if (!Array.isArray(parsed.sections) || parsed.sections.length > 10_000)
156
+ if (!Array.isArray(parsed.sections))
275
157
  return false;
276
158
  const pending = [...parsed.sections];
277
- let visited = 0;
278
159
  while (pending.length > 0) {
279
160
  const section = pending.pop();
280
161
  if (!isRecord(section) || !isRecord(section.offset) || !("map" in section))
281
162
  return false;
282
- visited += 1;
283
- if (visited > 10_000)
284
- return false;
285
163
  const map = section.map;
286
164
  if (!isRecord(map) || map.version !== 3)
287
165
  return false;
288
166
  if (Array.isArray(map.sections))
289
- pending.push(...map.sections);
167
+ for (const child of map.sections)
168
+ pending.push(child);
290
169
  else if (typeof map.mappings !== "string" ||
291
170
  !Array.isArray(map.sources) ||
292
171
  !Array.isArray(map.names))
@@ -306,26 +185,28 @@ const approvedUrl = (value, allowedOrigins) => {
306
185
  return false;
307
186
  }
308
187
  };
309
- const emptyItem = (request) => ({
188
+ const sourceMapContext = (request) => ({
310
189
  script_key: request.scriptKey,
311
190
  declared_url: request.declaredUrl,
312
- status: "fetch_failed",
191
+ });
192
+ const emptySourceMapItem = (request, status, limitation) => ({
193
+ ...sourceMapContext(request),
194
+ status,
313
195
  artifact: null,
314
196
  original_sources: [],
315
197
  original_module_edges: [],
316
198
  mappings: [],
317
- limitation: null,
199
+ limitation,
318
200
  });
319
201
  const sanitizeSource = (value) => {
320
- const bounded = value.slice(0, 4_096);
321
202
  try {
322
- const parsed = new URL(bounded);
203
+ const parsed = new URL(value);
323
204
  return parsed.protocol === "http:" || parsed.protocol === "https:"
324
205
  ? sanitizeBrowserUrl(parsed.href).url
325
206
  : `${parsed.protocol}//${parsed.host}${parsed.pathname}`;
326
207
  }
327
208
  catch {
328
- return bounded.split("#", 1)[0]?.split("?", 1)[0] ?? "";
209
+ return value.split("#", 1)[0]?.split("?", 1)[0] ?? "";
329
210
  }
330
211
  };
331
212
  const resolveOriginalSource = (specifier, base) => {
@@ -340,7 +221,6 @@ const sourceMediaType = (source) => source?.endsWith(".ts") || source?.endsWith(
340
221
  ? "text/typescript"
341
222
  : "text/javascript";
342
223
  const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
343
- const isLimitError = (value) => value instanceof RangeError;
344
224
  const originalImportDetectors = [
345
225
  {
346
226
  kind: "static_import",
@@ -32,52 +32,6 @@ const promptCatalog = PROMPT_CONTRACTS.map((contract) => ({
32
32
  arguments: contract.arguments,
33
33
  steps: contract.steps,
34
34
  })).sort((left, right) => left.name.localeCompare(right.name));
35
- /** Canonical fixed resources exposed by every target-free MCP session. */
36
- export const MCP_RESOURCE_CATALOG = [
37
- { name: "server-identity", uri: "rea://server/identity" },
38
- { name: "analysis-snapshot", uri: "rea://snapshot/current" },
39
- ];
40
- /** Canonical resource templates exposed by every target-free MCP session. */
41
- export const MCP_RESOURCE_TEMPLATE_CATALOG = [
42
- { name: "session-evidence", uri_template: "rea://evidence/{evidenceId}" },
43
- {
44
- name: "evidence-section",
45
- uri_template: "rea://evidence/{evidenceId}/section/{section}",
46
- },
47
- { name: "residual-unknown", uri_template: "rea://unknown/{unknownId}" },
48
- {
49
- name: "evidence-bundle",
50
- uri_template: "rea://evidence-bundle/{bundleDigest}",
51
- },
52
- {
53
- name: "artifact-page",
54
- uri_template: "rea://artifact/{manifestId}/{collection}",
55
- },
56
- {
57
- name: "function-dossier",
58
- uri_template: "rea://function/{targetSha256}/{address}",
59
- },
60
- {
61
- name: "investigation-workspace-revision",
62
- uri_template: "rea://workspace/{workspaceId}/revision/{revision}",
63
- },
64
- {
65
- name: "reconstruction-coverage-revision",
66
- uri_template: "rea://reconstruction-coverage/{workspaceId}/revision/{revision}",
67
- },
68
- {
69
- name: "reconstruction-obligation-ledger-page",
70
- uri_template: "rea://evidence/{evidenceId}/reconstruction-obligation-ledger",
71
- },
72
- {
73
- name: "reconstruction-readiness-report",
74
- uri_template: "rea://evidence/{evidenceId}/reconstruction-readiness-report",
75
- },
76
- {
77
- name: "javascript-application-graph-page",
78
- uri_template: "rea://evidence/{evidenceId}/application-graph/{collection}/offset/{offset}/limit/{limit}",
79
- },
80
- ];
81
35
  const digest = (value) => {
82
36
  const encoded = canonicalize(value);
83
37
  if (encoded === undefined)
@@ -90,22 +44,14 @@ export const CATALOG_IDENTITY = {
90
44
  cli_commands: CLI_COMMAND_NAMES.length,
91
45
  mcp_tools: toolCatalog.length,
92
46
  mcp_prompts: promptCatalog.length,
93
- mcp_resources: MCP_RESOURCE_CATALOG.length,
94
- mcp_resource_templates: MCP_RESOURCE_TEMPLATE_CATALOG.length,
95
47
  },
96
48
  digests: {
97
49
  tools_sha256: digest(toolCatalog),
98
50
  prompts_sha256: digest(promptCatalog),
99
- resources_sha256: digest({
100
- resourceCatalog: MCP_RESOURCE_CATALOG,
101
- resourceTemplateCatalog: MCP_RESOURCE_TEMPLATE_CATALOG,
102
- }),
103
51
  combined_sha256: digest({
104
52
  cli: CLI_COMMAND_NAMES,
105
53
  tools: toolCatalog,
106
54
  prompts: promptCatalog,
107
- resources: MCP_RESOURCE_CATALOG,
108
- resource_templates: MCP_RESOURCE_TEMPLATE_CATALOG,
109
55
  }),
110
56
  },
111
57
  tools: toolCatalog.map(({ name, surface, effects, annotations }) => ({
@@ -1,123 +1,95 @@
1
1
  import { z } from "incur";
2
2
  import { runProviderAnalysis } from "../application/DirectAnalysis.js";
3
+ import { createArtifactExtractionDestination } from "../application/ArtifactExtractionDestination.js";
3
4
  import { logCliCommand } from "../cliLogging.js";
4
5
  import { CLI_COMMANDS } from "../cliCommandNames.js";
5
6
  export const registerArtifactCommands = (cli, logger) => {
6
- registerInventoryCommand(cli, logger);
7
7
  registerInspectionCommand(cli, logger);
8
8
  registerExtractionCommand(cli, logger);
9
+ registerInterfaceBuilderCommand(cli, logger);
9
10
  };
10
- const registerInventoryCommand = (cli, logger) => {
11
- cli.command(CLI_COMMANDS.inventoryArtifact, {
12
- description: "Build a bounded deterministic artifact graph",
11
+ const registerInterfaceBuilderCommand = (cli, logger) => {
12
+ cli.command(CLI_COMMANDS.decodeInterfaceBuilder, {
13
+ description: "Decode compiled storyboard and nib archives from an app bundle",
13
14
  args: z.object({
14
- path: z.string().describe("Application or package path"),
15
+ path: z.string().describe("Apple .app bundle path"),
15
16
  }),
16
17
  options: z.object({
17
- offset: z
18
+ maxDocuments: z
18
19
  .number()
19
20
  .int()
20
- .min(0)
21
- .default(0)
22
- .describe("Zero-based offset for graph nodes, occurrences, and edges"),
23
- limit: z
21
+ .min(1)
22
+ .max(64)
23
+ .default(64)
24
+ .describe("Maximum archives to decode"),
25
+ maxObjects: z
24
26
  .number()
25
27
  .int()
26
28
  .min(1)
27
- .max(500)
28
- .default(100)
29
- .describe("Maximum nodes, occurrences, and edges per result section"),
30
- integrityPolicy: z
31
- .enum(["fail", "record-and-continue"])
32
- .default("fail")
33
- .describe("Behavior when declared artifact integrity does not match"),
34
- integrityContinueApproved: z
35
- .boolean()
36
- .default(false)
37
- .describe("Approve continuing after recorded integrity mismatches"),
38
- maxIntegrityMismatches: z
29
+ .max(20_000)
30
+ .default(20_000)
31
+ .describe("Maximum graph objects"),
32
+ maxConnections: z
39
33
  .number()
40
34
  .int()
41
35
  .min(1)
42
- .max(100)
43
- .default(10)
44
- .describe("Maximum integrity mismatches to record before stopping"),
45
- nativeMountApproved: z
46
- .boolean()
47
- .default(false)
48
- .describe("Approve read-only native mounting when required"),
36
+ .max(40_000)
37
+ .default(40_000)
38
+ .describe("Maximum decoded connections"),
49
39
  }),
50
40
  alias: {
51
- integrityPolicy: "integrity-policy",
52
- integrityContinueApproved: "integrity-continue-approved",
53
- maxIntegrityMismatches: "max-integrity-mismatches",
54
- nativeMountApproved: "native-mount-approved",
41
+ maxDocuments: "max-documents",
42
+ maxObjects: "max-objects",
43
+ maxConnections: "max-connections",
55
44
  },
56
- run: ({ args, options }) => logCliCommand(logger, "inventory-artifact", () => runProviderAnalysis(args.path, "inventory_artifact", {
57
- node_offset: options.offset,
58
- node_limit: options.limit,
59
- occurrence_offset: options.offset,
60
- occurrence_limit: options.limit,
61
- edge_offset: options.offset,
62
- edge_limit: options.limit,
63
- integrity_policy: options.integrityPolicy,
64
- integrity_continue_approved: options.integrityContinueApproved,
65
- max_integrity_mismatches: options.maxIntegrityMismatches,
66
- native_mount_approved: options.nativeMountApproved,
45
+ run: ({ args, options }) => logCliCommand(logger, "decode-interface-builder", () => runProviderAnalysis(args.path, "decode_interface_builder", {
46
+ max_documents: options.maxDocuments,
47
+ max_objects: options.maxObjects,
48
+ max_connections: options.maxConnections,
67
49
  }, logger)),
68
50
  });
69
51
  };
70
52
  const registerExtractionCommand = (cli, logger) => {
71
53
  cli.command(CLI_COMMANDS.extractArtifact, {
72
- description: "Extract explicitly selected artifact occurrences safely",
54
+ description: "Extract all regular artifact contents safely",
73
55
  args: z.object({
74
56
  path: z.string().describe("Application or package path"),
75
- outputRoot: z.string().describe("Absent absolute output root"),
76
- }),
77
- options: z.object({
78
- occurrenceIds: z
79
- .array(z.string().regex(/^occ_[a-f0-9]{64}$/u))
80
- .min(1)
81
- .max(500)
82
- .describe("Exact artifact occurrence IDs selected for extraction"),
83
57
  }),
84
- alias: { occurrenceIds: "occurrence-ids" },
85
- run: ({ args, options }) => logCliCommand(logger, "extract-artifact", () => runProviderAnalysis(args.path, "extract_artifact", {
86
- approved: true,
87
- output_root: args.outputRoot,
88
- occurrence_ids: options.occurrenceIds,
58
+ options: z.object({}),
59
+ run: ({ args }) => logCliCommand(logger, "extract-artifact", () => runProviderAnalysis(args.path, "extract_artifact", {
60
+ output_root: createArtifactExtractionDestination(),
89
61
  }, logger)),
90
62
  });
91
63
  };
92
64
  const registerInspectionCommand = (cli, logger) => {
93
65
  cli.command(CLI_COMMANDS.inspectArtifact, {
94
- description: "Inspect one artifact with bounded observations and explicit next probes",
66
+ description: "Inspect one artifact and return all available observations and next probes",
95
67
  args: z.object({
96
68
  path: z.string().describe("Application or package path"),
97
69
  }),
98
70
  options: z.object({
99
- maxObservations: z
100
- .number()
101
- .int()
102
- .min(1)
103
- .max(500)
104
- .default(100)
105
- .describe("Maximum retained observations"),
106
- maxRelationships: z
107
- .number()
108
- .int()
109
- .min(1)
110
- .max(500)
111
- .default(100)
112
- .describe("Maximum retained derived relationships"),
71
+ integrityPolicy: z
72
+ .enum(["fail", "record-and-continue"])
73
+ .default("fail")
74
+ .describe("Behavior when declared artifact integrity does not match"),
75
+ integrityContinueApproved: z
76
+ .boolean()
77
+ .default(false)
78
+ .describe("Approve continuing after recorded integrity mismatches"),
79
+ nativeMountApproved: z
80
+ .boolean()
81
+ .default(false)
82
+ .describe("Approve read-only native mounting when required"),
113
83
  }),
114
84
  alias: {
115
- maxObservations: "max-observations",
116
- maxRelationships: "max-relationships",
85
+ integrityPolicy: "integrity-policy",
86
+ integrityContinueApproved: "integrity-continue-approved",
87
+ nativeMountApproved: "native-mount-approved",
117
88
  },
118
89
  run: ({ args, options }) => logCliCommand(logger, "inspect-artifact", () => runProviderAnalysis(args.path, "inspect_artifact", {
119
- max_observations: options.maxObservations,
120
- max_relationships: options.maxRelationships,
90
+ integrity_policy: options.integrityPolicy,
91
+ integrity_continue_approved: options.integrityContinueApproved,
92
+ native_mount_approved: options.nativeMountApproved,
121
93
  }, logger)),
122
94
  });
123
95
  };