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,9 +1,8 @@
1
+ import { isPathWithinRoot } from "../domain/localPath.js";
1
2
  import { createHash } from "node:crypto";
2
3
  import { constants as fsConstants } from "node:fs";
3
4
  import { lstat, open, readdir, readlink } from "node:fs/promises";
4
5
  import { dirname, join, relative, resolve } from "node:path";
5
- const isWithin = (candidate, root) => candidate === root ||
6
- candidate.startsWith(`${root.endsWith("/") ? root.slice(0, -1) : root}/`);
7
6
  const hasSameIdentity = (before, after, expected) => before.dev === after.dev &&
8
7
  before.ino === after.ino &&
9
8
  (expected === "directory" ? after.isDirectory() : after.isSymbolicLink());
@@ -66,7 +65,7 @@ export const snapshotRoots = async (scenario, signal) => {
66
65
  truncated = true;
67
66
  return;
68
67
  }
69
- const safeTarget = isWithin(target, root)
68
+ const safeTarget = isPathWithinRoot(root, target)
70
69
  ? relative(root, target) || "."
71
70
  : "<outside-declared-root>";
72
71
  if (safeTarget === "<outside-declared-root>")
@@ -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) {