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
@@ -0,0 +1,266 @@
1
+ import { createHash } from "node:crypto";
2
+ import { parse, parseBinary } from "plist";
3
+ import { DirectoryArtifactReader } from "../artifacts/DirectoryArtifactReader.js";
4
+ import { decodeNibArchive, } from "../artifacts/NibArchive.js";
5
+ import { buildInterfaceBuilderAnalysis, interfaceBuilderLimitsSchema, } from "../domain/interfaceBuilderGraph.js";
6
+ import { jsonValueSchema } from "../domain/jsonValue.js";
7
+ const MAX_DOCUMENT_BYTES = 64 * 1024 * 1024;
8
+ /** Decode compiled Interface Builder archives from a local app bundle. */
9
+ export const analyzeInterfaceBuilderBundle = async (input) => {
10
+ const limits = interfaceBuilderLimitsSchema.parse(input.limits ?? {});
11
+ const reader = new DirectoryArtifactReader(input.bundlePath);
12
+ const documents = [];
13
+ const invalid = [];
14
+ let omitted = 0;
15
+ let attempted = 0;
16
+ try {
17
+ for await (const entry of reader.entries(input.signal)) {
18
+ if (entry.kind !== "file" || !isInterfaceBuilderArchive(entry.path))
19
+ continue;
20
+ if (attempted >= limits.max_documents) {
21
+ omitted += 1;
22
+ continue;
23
+ }
24
+ attempted += 1;
25
+ try {
26
+ const bytes = await readEntry(reader, entry, input.signal);
27
+ const raw = bytes.subarray(0, 10).toString("ascii") === "NIBArchive"
28
+ ? projectNibArchive(decodeNibArchive(bytes))
29
+ : decodePlist(bytes);
30
+ const documentHash = createHash("sha256").update(bytes).digest("hex");
31
+ documents.push({
32
+ relativePath: entry.path,
33
+ archiveSha256: documentHash,
34
+ documentKind: entry.path.includes(".storyboardc/")
35
+ ? "storyboard_scene"
36
+ : "nib",
37
+ raw,
38
+ });
39
+ }
40
+ catch (cause) {
41
+ if (input.signal?.aborted === true)
42
+ throw cause;
43
+ invalid.push(`${entry.path}: ${cause instanceof Error ? cause.message : "archive decode failed"}`);
44
+ }
45
+ }
46
+ }
47
+ finally {
48
+ await reader.close();
49
+ }
50
+ const result = buildInterfaceBuilderAnalysis({
51
+ targetSha256: input.targetSha256,
52
+ toolVersion: "rea-interface-builder/1",
53
+ documents,
54
+ limits,
55
+ });
56
+ return {
57
+ ...result,
58
+ graph: {
59
+ ...result.graph,
60
+ coverage: [
61
+ ...result.graph.coverage,
62
+ {
63
+ facet: "archive_decode",
64
+ status: invalid.length > 0 ? "partial" : "complete",
65
+ reason: invalid.length > 0 ? "one_or_more_archives_invalid" : null,
66
+ examined: attempted,
67
+ omitted,
68
+ },
69
+ ],
70
+ truncated: result.graph.truncated || omitted > 0 || invalid.length > 0,
71
+ },
72
+ limitations: [
73
+ ...result.limitations,
74
+ "Compiled Interface Builder archives are private serialized object graphs. The decoder reports only recognized keyed-archive objects and connections; unrecognized object classes and fields remain unknown.",
75
+ ...(invalid.length === 0
76
+ ? []
77
+ : [
78
+ `Some Interface Builder archives could not be decoded: ${invalid.slice(0, 16).join("; ")}`,
79
+ ]),
80
+ ],
81
+ };
82
+ };
83
+ /** Project decoded NIB records into the same bounded graph input as ibtool. */
84
+ const projectNibArchive = (archive) => {
85
+ const byId = new Map(archive.objects.map((object) => [object.id, object]));
86
+ const dereference = (value) => {
87
+ if (typeof value !== "object" || value === null || Array.isArray(value))
88
+ return value;
89
+ const ref = value.$nib_object_ref;
90
+ if (typeof ref !== "number")
91
+ return value;
92
+ const target = byId.get(ref);
93
+ if (target === undefined)
94
+ return undefined;
95
+ if (target.class_name.replace(/\0+$/u, "") === "NSString") {
96
+ const data = target.values["NS.bytes"];
97
+ if (typeof data === "object" && data !== null && !Array.isArray(data)) {
98
+ const encoded = data.$nib_data_base64;
99
+ if (typeof encoded === "string")
100
+ return Buffer.from(encoded, "base64").toString("utf8");
101
+ }
102
+ }
103
+ return { objectID: String(ref) };
104
+ };
105
+ const referencedString = (value) => {
106
+ if (typeof value !== "object" || value === null || Array.isArray(value))
107
+ return null;
108
+ const ref = value.$nib_object_ref;
109
+ if (typeof ref !== "number")
110
+ return null;
111
+ const target = byId.get(ref);
112
+ const data = target?.values["NS.bytes"];
113
+ if (target?.class_name.replace(/\0+$/u, "") !== "NSString")
114
+ return null;
115
+ if (typeof data !== "object" || data === null || Array.isArray(data))
116
+ return null;
117
+ const encoded = data.$nib_data_base64;
118
+ return typeof encoded === "string"
119
+ ? Buffer.from(encoded, "base64").toString("utf8")
120
+ : null;
121
+ };
122
+ const runtimeClass = (objectId) => {
123
+ const object = byId.get(objectId);
124
+ if (object === undefined)
125
+ return null;
126
+ const storedClass = object.class_name.replace(/\0+$/u, "");
127
+ return storedClass === "NSClassSwapper"
128
+ ? (referencedString(object.values.NSClassName) ?? storedClass)
129
+ : storedClass;
130
+ };
131
+ const objects = Object.fromEntries(archive.objects
132
+ .filter((object) => {
133
+ const name = runtimeClass(object.id) ?? "";
134
+ return !/^(?:NSObject|NSIBObjectData|NSString|NSMutableString|NSNumber|NSArray|NSMutableArray|NSSet|NSMutableSet|NSDictionary|NSMutableDictionary|NSApplication|NSNib.*Connector)$/u.test(name);
135
+ })
136
+ .map((object) => {
137
+ const className = runtimeClass(object.id) ?? object.class_name.replace(/\0+$/u, "");
138
+ const strings = Object.entries(object.values).flatMap(([key, value]) => {
139
+ const resolved = dereference(value);
140
+ return typeof resolved === "string" ? [[key, resolved]] : [];
141
+ });
142
+ const name = strings.find(([key]) => /(?:title|label|identifier|accessibility|name|contents)/iu.test(key ?? ""))?.[1] ?? className;
143
+ return [
144
+ String(object.id),
145
+ {
146
+ customClass: className,
147
+ label: name,
148
+ objectID: String(object.id),
149
+ nibValues: Object.fromEntries(Object.entries(object.values).map(([key, value]) => [
150
+ key,
151
+ dereference(value) ?? null,
152
+ ])),
153
+ },
154
+ ];
155
+ }));
156
+ const connections = {};
157
+ const hierarchy = [];
158
+ const reference = (value) => {
159
+ if (typeof value !== "object" || value === null || Array.isArray(value))
160
+ return null;
161
+ return typeof value.$nib_object_ref === "number"
162
+ ? value.$nib_object_ref
163
+ : null;
164
+ };
165
+ for (const object of archive.objects) {
166
+ const className = object.class_name.replace(/\0+$/u, "");
167
+ const source = reference(object.values.NSSource);
168
+ const destination = reference(object.values.NSDestination);
169
+ if (className.includes("Connector") && source !== null) {
170
+ const label = referencedString(object.values.NSLabel);
171
+ const type = className.includes("Outlet")
172
+ ? "outlet"
173
+ : className.includes("Control")
174
+ ? "action"
175
+ : className;
176
+ const controlAction = className.includes("Control");
177
+ const connectionSource = controlAction ? destination : source;
178
+ const connectionDestination = controlAction ? source : destination;
179
+ if (connectionSource === null)
180
+ continue;
181
+ (connections[String(connectionSource)] ??= []).push({
182
+ type,
183
+ "destination-id": connectionDestination === null ? null : String(connectionDestination),
184
+ label,
185
+ source_id: String(connectionSource),
186
+ archive_object_id: String(object.id),
187
+ });
188
+ }
189
+ }
190
+ const hierarchyFor = (objectId, seen, depth) => {
191
+ if (depth > 32 || seen.has(objectId))
192
+ return null;
193
+ const object = byId.get(objectId);
194
+ if (object === undefined)
195
+ return null;
196
+ const nextSeen = new Set(seen).add(objectId);
197
+ const children = [];
198
+ for (const [key, value] of Object.entries(object.values)) {
199
+ if (!/(?:subviews|contentview|childviewcontrollers|view)$/iu.test(key))
200
+ continue;
201
+ const direct = reference(value);
202
+ if (direct === null)
203
+ continue;
204
+ const target = byId.get(direct);
205
+ if (target === undefined)
206
+ continue;
207
+ if (/array|set/iu.test(target.class_name)) {
208
+ for (const candidate of Object.values(target.values)) {
209
+ const child = reference(candidate);
210
+ const nested = child === null ? null : hierarchyFor(child, nextSeen, depth + 1);
211
+ if (nested !== null)
212
+ children.push(nested);
213
+ }
214
+ }
215
+ else {
216
+ const nested = hierarchyFor(direct, nextSeen, depth + 1);
217
+ if (nested !== null)
218
+ children.push(nested);
219
+ }
220
+ }
221
+ return { objectID: String(objectId), children };
222
+ };
223
+ const ibData = archive.objects.find(({ class_name }) => class_name.replace(/\0+$/u, "") === "NSIBObjectData");
224
+ const rootId = reference(ibData?.values.NSRoot);
225
+ const hierarchyRoots = rootId === null ? [] : [rootId];
226
+ for (const hierarchyRoot of hierarchyRoots) {
227
+ const root = hierarchyFor(hierarchyRoot, new Set(), 0);
228
+ if (root !== null)
229
+ hierarchy.push(root);
230
+ }
231
+ return jsonValueSchema.parse({
232
+ "com.apple.ibtool.document.objects": objects,
233
+ "com.apple.ibtool.document.connections": connections,
234
+ "com.apple.ibtool.document.hierarchy": hierarchy,
235
+ "com.apple.ibtool.document.classes": Object.fromEntries(archive.classes.map((name) => [name.replace(/\0+$/u, ""), {}])),
236
+ });
237
+ };
238
+ const isInterfaceBuilderArchive = (path) => {
239
+ const lower = path.toLowerCase();
240
+ return lower.endsWith(".nib") || lower.endsWith("/objects.nib");
241
+ };
242
+ const readEntry = async (reader, entry, signal) => {
243
+ if (entry.declaredSize !== null && entry.declaredSize > MAX_DOCUMENT_BYTES)
244
+ throw new RangeError("archive exceeds the 64 MiB per-document decode limit");
245
+ const stream = await reader.open(entry, signal);
246
+ const chunks = [];
247
+ let length = 0;
248
+ for await (const chunk of stream) {
249
+ const bytes = Buffer.isBuffer(chunk)
250
+ ? chunk
251
+ : Buffer.from(chunk);
252
+ length += bytes.length;
253
+ if (length > MAX_DOCUMENT_BYTES) {
254
+ stream.destroy();
255
+ throw new RangeError("archive exceeded the 64 MiB per-document decode limit");
256
+ }
257
+ chunks.push(bytes);
258
+ }
259
+ return Buffer.concat(chunks, length);
260
+ };
261
+ const decodePlist = (bytes) => {
262
+ const parsed = bytes.subarray(0, 8).toString("ascii") === "bplist00"
263
+ ? parseBinary(bytes)
264
+ : parse(bytes.toString("utf8"));
265
+ return jsonValueSchema.parse(parsed);
266
+ };
@@ -3,7 +3,7 @@ import { AnalysisInputError, AnalysisProtocolError, } from "../domain/errors.js"
3
3
  import { createEvidence, } from "../domain/evidence.js";
4
4
  import { jsonValueSchema } from "../domain/jsonValue.js";
5
5
  import { err, ok } from "../domain/result.js";
6
- /** Parse one inventory projection and wrap its deterministic result in Evidence v2. */
6
+ /** Parse one inventory projection and wrap its deterministic result in Evidence. */
7
7
  export const projectInventoryEvidence = (options) => {
8
8
  const parsed = options.schema.safeParse(options.rawInput);
9
9
  if (!parsed.success)
@@ -22,7 +22,9 @@ export const projectInventoryEvidence = (options) => {
22
22
  operation: options.operation,
23
23
  parameters: {
24
24
  inventory_evidence_ids: [...result.source_evidence_ids],
25
- limits: jsonValueSchema.parse(parsed.data.limits),
25
+ ...("limits" in parsed.data && parsed.data.limits !== undefined
26
+ ? { limits: jsonValueSchema.parse(parsed.data.limits) }
27
+ : {}),
26
28
  },
27
29
  result: jsonValueSchema.parse(result),
28
30
  rawResult: null,
@@ -6,7 +6,7 @@ export const REA_WORKFLOW_PROVIDER = {
6
6
  version: "1",
7
7
  };
8
8
  /** Commit a workflow result to the exact upstream deep-analysis profile. */
9
- export const workflowAnalysisProfile = (upstream) => createAnalysisProfile(REA_WORKFLOW_PROVIDER, 1, {
9
+ export const workflowAnalysisProfile = (upstream) => createAnalysisProfile(REA_WORKFLOW_PROVIDER, {
10
10
  upstream_analysis_profile: upstream,
11
11
  });
12
12
  /** Provider identity for deterministic artifact inventories. */
@@ -1,13 +1,13 @@
1
1
  import { createEvidence, } from "../domain/evidence.js";
2
2
  import { jsonValueSchema } from "../domain/jsonValue.js";
3
3
  import { JAVASCRIPT_APPLICATION_PROVIDER } from "./InvestigationProviders.js";
4
- /** Create Evidence v2 for one deterministic local JavaScript application graph. */
4
+ /** Create Evidence for one deterministic local JavaScript application graph. */
5
5
  export const createJavaScriptApplicationEvidence = (input, result) => createEvidence({
6
6
  path: result.input_path,
7
7
  sha256: result.root_artifact_sha256,
8
8
  format: result.format,
9
9
  }, JAVASCRIPT_APPLICATION_PROVIDER, {
10
- predicateType: `rea.javascript-application-analysis/v${String(result.schema_version)}`,
10
+ predicateType: "rea.javascript-application-analysis",
11
11
  operation: "analyze_javascript_application",
12
12
  parameters: parameters(input),
13
13
  result: jsonValueSchema.parse(result),
@@ -20,7 +20,4 @@ export const createJavaScriptApplicationEvidence = (input, result) => createEvid
20
20
  });
21
21
  const parameters = (input) => ({
22
22
  format: input.format,
23
- approved: input.approved,
24
- source_map_read_approved: input.source_map_read_approved,
25
- limits: input.limits,
26
23
  });
@@ -7,18 +7,15 @@ import { managedApplicationGraphResultSchema } from "../domain/managedApplicatio
7
7
  export const parseApplicationGraphEvidence = (input) => {
8
8
  const evidence = parseEvidence(input);
9
9
  if (evidence.operation === "analyze_javascript_application" &&
10
- [
11
- "rea.javascript-application-analysis/v1",
12
- "rea.javascript-application-analysis/v2",
13
- ].includes(evidence.predicate_type) &&
10
+ evidence.predicate_type === "rea.javascript-application-analysis" &&
14
11
  providerMatches(evidence, JAVASCRIPT_APPLICATION_PROVIDER))
15
12
  return staticApplicationSource(evidence);
16
13
  if (evidence.operation === "reconcile_javascript_runtime" &&
17
- evidence.predicate_type === "rea.javascript-runtime-reconciliation/v1" &&
14
+ evidence.predicate_type === "rea.javascript-runtime-reconciliation" &&
18
15
  providerMatches(evidence, JAVASCRIPT_RUNTIME_RECONCILIATION_PROVIDER))
19
16
  return staticRuntimeSource(evidence);
20
17
  if (evidence.operation === "project_managed_application_graph" &&
21
- evidence.predicate_type === "rea.managed-application-graph/v1" &&
18
+ evidence.predicate_type === "rea.managed-application-graph" &&
22
19
  providerMatches(evidence, MANAGED_WORKFLOW_PROVIDER))
23
20
  return managedApplicationSource(evidence);
24
21
  throw new TypeError("Application workflow requires authenticated analyze_javascript_application, reconcile_javascript_runtime, or project_managed_application_graph Evidence");
@@ -28,9 +25,8 @@ const staticApplicationSource = (evidence) => {
28
25
  evidence.confidence !== "derived")
29
26
  throw new TypeError("JavaScript application Evidence authority or confidence is invalid");
30
27
  const result = javascriptApplicationAnalysisResultSchema.parse(evidence.normalized_result);
31
- if (evidence.predicate_type !==
32
- `rea.javascript-application-analysis/v${String(result.schema_version)}`)
33
- throw new TypeError("JavaScript application Evidence predicate does not match its result schema version");
28
+ if (evidence.predicate_type !== "rea.javascript-application-analysis")
29
+ throw new TypeError("JavaScript application Evidence predicate does not match its result shape");
34
30
  analyzeJavaScriptApplicationInputSchema.parse({
35
31
  input_path: result.input_path,
36
32
  ...evidence.parameters,
@@ -41,7 +37,7 @@ const staticApplicationSource = (evidence) => {
41
37
  graph: result.graph,
42
38
  kind: "static-application",
43
39
  rootArtifactSha256: result.root_artifact_sha256,
44
- semanticGraph: result.schema_version === 2 ? result.semantic_graph : null,
40
+ semanticGraph: result.semantic_graph,
45
41
  };
46
42
  };
47
43
  const staticRuntimeSource = (evidence) => {
@@ -1,57 +1,34 @@
1
1
  import { z } from "zod";
2
2
  import { ArtifactReaderFailure } from "../artifacts/ArtifactReader.js";
3
3
  import { analyzeJavaScriptApplicationInputSchema, javascriptApplicationAnalysisResultSchema, } from "../domain/javascriptApplicationAnalysis.js";
4
- import { AnalysisCapabilityUnavailableError, AnalysisInputError, AnalysisProtocolError, ArtifactOperationError, PermissionRequiredError, } from "../domain/errors.js";
4
+ import { AnalysisInputError, AnalysisProtocolError, ArtifactOperationError, } from "../domain/errors.js";
5
5
  import { projectInputIssues } from "../domain/inputIssueProjection.js";
6
6
  import { err, ok } from "../domain/result.js";
7
7
  import { createJavaScriptApplicationEvidence } from "./JavaScriptApplicationEvidence.js";
8
8
  import { reconstructJavaScriptArtifact } from "./JavaScriptArtifactReconstruction.js";
9
9
  const OPERATION = "analyze_javascript_application";
10
- /** Authorize and statically analyze one local JavaScript/Electron application. */
11
- export const analyzeJavaScriptApplication = async (authority, rawInput, options = {}) => {
10
+ /** Statically analyze one local JavaScript/Electron application. */
11
+ export const analyzeJavaScriptApplication = async (rawInput, options = {}) => {
12
12
  const parsed = analyzeJavaScriptApplicationInputSchema.safeParse(rawInput);
13
13
  if (!parsed.success)
14
14
  return err(new AnalysisInputError(OPERATION, undefined, projectInputIssues(parsed.error.issues, rawInput)));
15
- return analyzeJavaScriptApplicationValidated(authority, parsed.data, options);
15
+ return analyzeJavaScriptApplicationValidated(parsed.data, options);
16
16
  };
17
17
  /** Analyze input already parsed by a trusted adapter boundary. */
18
- export const analyzeJavaScriptApplicationValidated = async (authority, input, options = {}) => {
19
- if (authority === undefined)
20
- return err(new AnalysisCapabilityUnavailableError("rea-javascript-application", OPERATION, "JavaScript application permission policy is not configured"));
21
- const authorized = await authority.authorize({
22
- capability: "investigation_input",
23
- roots: [input.input_path],
24
- executables: [],
25
- environment_names: [],
26
- network: "none",
27
- mount: false,
28
- operation_identity: `${OPERATION}:${input.input_path}`,
29
- }, "read");
30
- if (!authorized.ok)
31
- return err(authorized.error instanceof PermissionRequiredError
32
- ? authorized.error
33
- : new ArtifactOperationError(OPERATION, "path", {
34
- logicalPath: input.input_path,
35
- declaredSha256: null,
36
- calculatedSha256: null,
37
- unpacked: false,
38
- }));
18
+ export const analyzeJavaScriptApplicationValidated = async (input, options = {}) => {
39
19
  await options.progress?.report({
40
20
  phase: "analyze_javascript_application",
41
21
  completed: 0,
42
22
  total: 1,
43
- message: "Inventorying and parsing approved application artifacts",
23
+ message: "Inventorying and parsing application artifacts",
44
24
  });
45
25
  try {
46
26
  const reconstructed = await reconstructJavaScriptArtifact({
47
27
  input_path: input.input_path,
48
28
  format: input.format,
49
- source_map_read_approved: input.source_map_read_approved,
50
- limits: input.limits,
51
29
  }, options.signal);
52
30
  const { electron_summary: summary, ...application } = reconstructed;
53
31
  const result = javascriptApplicationAnalysisResultSchema.parse({
54
- schema_version: 2,
55
32
  ...application,
56
33
  summary,
57
34
  limitations: reconstructed.graph.limitations,
@@ -3,7 +3,7 @@ import { jsonValueSchema } from "../domain/jsonValue.js";
3
3
  import { JAVASCRIPT_APPLICATION_WORKFLOW_PROVIDER } from "./InvestigationProviders.js";
4
4
  /** Create derived Evidence for one bounded application-graph feature trace. */
5
5
  export const createApplicationFeatureTraceEvidence = (parameters, result) => createEvidence(undefined, JAVASCRIPT_APPLICATION_WORKFLOW_PROVIDER, {
6
- predicateType: "rea.application-feature-trace/v1",
6
+ predicateType: "rea.application-feature-trace",
7
7
  operation: "trace_application_feature",
8
8
  parameters,
9
9
  result: jsonValueSchema.parse(result),
@@ -16,7 +16,7 @@ export const createApplicationFeatureTraceEvidence = (parameters, result) => cre
16
16
  });
17
17
  /** Create derived Evidence for one bounded JavaScript semantic trace. */
18
18
  export const createJavaScriptSemanticTraceEvidence = (parameters, result) => createEvidence(undefined, JAVASCRIPT_APPLICATION_WORKFLOW_PROVIDER, {
19
- predicateType: "rea.javascript-semantic-trace/v1",
19
+ predicateType: "rea.javascript-semantic-trace",
20
20
  operation: "trace_javascript_semantics",
21
21
  parameters,
22
22
  result: jsonValueSchema.parse(result),
@@ -29,7 +29,7 @@ export const createJavaScriptSemanticTraceEvidence = (parameters, result) => cre
29
29
  });
30
30
  /** Create derived Evidence for one tiered application version comparison. */
31
31
  export const createApplicationVersionComparisonEvidence = (parameters, result) => createEvidence(undefined, JAVASCRIPT_APPLICATION_WORKFLOW_PROVIDER, {
32
- predicateType: "rea.application-version-comparison/v1",
32
+ predicateType: "rea.application-version-comparison",
33
33
  operation: "compare_application_versions",
34
34
  parameters,
35
35
  result: jsonValueSchema.parse(result),
@@ -42,7 +42,7 @@ export const createApplicationVersionComparisonEvidence = (parameters, result) =
42
42
  });
43
43
  /** Create derived Evidence for one historical-source to bundle comparison. */
44
44
  export const createSourceToBundleComparisonEvidence = (parameters, result) => createEvidence(undefined, JAVASCRIPT_APPLICATION_WORKFLOW_PROVIDER, {
45
- predicateType: "rea.source-to-bundle-comparison/v1",
45
+ predicateType: "rea.source-to-bundle-comparison",
46
46
  operation: "compare_source_to_bundle",
47
47
  parameters,
48
48
  result: jsonValueSchema.parse(result),
@@ -55,7 +55,7 @@ export const createSourceToBundleComparisonEvidence = (parameters, result) => cr
55
55
  });
56
56
  /** Create derived Evidence for one bounded static export-shape comparison. */
57
57
  export const createJavaScriptExportShapeComparisonEvidence = (parameters, result) => createEvidence(undefined, JAVASCRIPT_APPLICATION_WORKFLOW_PROVIDER, {
58
- predicateType: "rea.javascript-export-shape-comparison/v1",
58
+ predicateType: "rea.javascript-export-shape-comparison",
59
59
  operation: "compare_javascript_export_shapes",
60
60
  parameters,
61
61
  result: jsonValueSchema.parse(result),
@@ -32,14 +32,12 @@ export const traceApplicationFeatureEvidenceValidated = (input) => {
32
32
  nativeEvidence,
33
33
  seed: input.seed,
34
34
  direction: input.direction,
35
- limits: input.limits,
36
35
  });
37
36
  return ok(createApplicationFeatureTraceEvidence({
38
37
  application_evidence_id: source.evidence.evidence_id,
39
38
  native_evidence_ids: nativeEvidence.map(({ evidence_id: id }) => id),
40
39
  seed: input.seed,
41
40
  direction: input.direction,
42
- limits: input.limits,
43
41
  }, result));
44
42
  }
45
43
  catch (cause) {
@@ -75,14 +73,12 @@ export const compareApplicationVersionsEvidenceValidated = (input) => {
75
73
  },
76
74
  leftNativeEvidence: leftNative,
77
75
  rightNativeEvidence: rightNative,
78
- limits: input.limits,
79
76
  });
80
77
  return ok(createApplicationVersionComparisonEvidence({
81
78
  left_evidence_id: left.evidence.evidence_id,
82
79
  right_evidence_id: right.evidence.evidence_id,
83
80
  left_native_evidence_ids: leftNative.map(({ evidence_id: id }) => id),
84
81
  right_native_evidence_ids: rightNative.map(({ evidence_id: id }) => id),
85
- limits: input.limits,
86
82
  }, result));
87
83
  }
88
84
  catch (cause) {
@@ -101,12 +97,10 @@ export const compareSourceToBundleEvidenceValidated = (input) => {
101
97
  rootArtifactSha256: application.rootArtifactSha256,
102
98
  graph: application.graph,
103
99
  },
104
- limits: input.limits,
105
100
  });
106
101
  return ok(createSourceToBundleComparisonEvidence({
107
102
  reference_root_sha256: input.reference.root_sha256,
108
103
  application_evidence_id: application.evidence.evidence_id,
109
- limits: input.limits,
110
104
  }, result));
111
105
  }
112
106
  catch (cause) {
@@ -143,7 +137,6 @@ export const compareJavaScriptExportShapesEvidenceValidated = (input) => {
143
137
  modulePath: input.right_module_path,
144
138
  exportName: input.right_export_name,
145
139
  },
146
- limits: input.limits,
147
140
  });
148
141
  return ok(createJavaScriptExportShapeComparisonEvidence({
149
142
  left_evidence_id: left.evidence.evidence_id,
@@ -152,7 +145,6 @@ export const compareJavaScriptExportShapesEvidenceValidated = (input) => {
152
145
  left_export_name: input.left_export_name,
153
146
  right_module_path: input.right_module_path,
154
147
  right_export_name: input.right_export_name,
155
- limits: input.limits,
156
148
  }, result));
157
149
  }
158
150
  catch (cause) {