rea-agents 6.2.0 → 6.4.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 (636) hide show
  1. package/README.md +24 -23
  2. package/bridge/ghidra/ReaGhidraApplySeeds.java +151 -0
  3. package/bridge/ghidra/ReaGhidraBridge.java +597 -209
  4. package/bridge/ghidra/ReaGhidraNoReturnFix.java +123 -0
  5. package/bridge/hopper_bridge.py +2 -0
  6. package/dist/adb/AdbConfiguration.js +88 -0
  7. package/dist/adb/AdbDeviceOutput.js +186 -0
  8. package/dist/adb/AdbProvider.js +1190 -0
  9. package/dist/adb/AdbShellOutput.js +309 -0
  10. package/dist/android/AndroidTargetSnapshot.js +104 -22
  11. package/dist/android/JadxConfiguration.js +44 -24
  12. package/dist/android/JadxProvider.js +59 -21
  13. package/dist/android/JadxSession.js +51 -9
  14. package/dist/apktool/ApktoolConfiguration.js +84 -0
  15. package/dist/apktool/ApktoolDecodeOutput.js +59 -0
  16. package/dist/apktool/ApktoolProvider.js +506 -0
  17. package/dist/application/AnalysisProvider.js +8 -2
  18. package/dist/application/AppBundleExecutable.js +27 -22
  19. package/dist/application/BinaryTargetResolver.js +85 -19
  20. package/dist/application/BrowserScenarioEvidence.js +2 -2
  21. package/dist/application/CapabilityInventory.js +11 -1
  22. package/dist/application/ClientConfigurationDocument.js +98 -0
  23. package/dist/application/ClientConfigurationFiles.js +91 -0
  24. package/dist/application/ClientRegistrationEnvironment.js +35 -0
  25. package/dist/application/ClientRegistrationStatus.js +75 -27
  26. package/dist/application/DirectAnalysis.js +14 -8
  27. package/dist/application/DirectAnalysisCleanup.js +1 -2
  28. package/dist/application/DirectAnalysisStatus.js +3 -6
  29. package/dist/application/Doctor.js +27 -34
  30. package/dist/application/DoctorDiagnostics.js +1 -1
  31. package/dist/application/EvidenceBundleCommands.js +6 -12
  32. package/dist/application/EvidenceBundleFiles.js +1 -1
  33. package/dist/application/GeminiClientSettings.js +139 -0
  34. package/dist/application/HermesClientHome.js +115 -0
  35. package/dist/application/HopperDownload.js +39 -0
  36. package/dist/application/InvestigationProviders.js +10 -4
  37. package/dist/application/JsonFiles.js +16 -15
  38. package/dist/application/JsonInputFile.js +252 -0
  39. package/dist/application/LinuxHopper.js +6 -13
  40. package/dist/application/MacHopper.js +172 -149
  41. package/dist/application/MipsElfAbiFlags.js +140 -0
  42. package/dist/application/ProviderOperationExecution.js +31 -0
  43. package/dist/application/ReconstructionObligationCandidates.js +16 -3
  44. package/dist/application/ReconstructionObligationLedgerProjection.js +3 -1
  45. package/dist/application/ReferenceSourceImport.js +76 -29
  46. package/dist/application/ReferenceSourceImportEntries.js +18 -9
  47. package/dist/application/ReferenceSourceImportPolicy.js +99 -23
  48. package/dist/application/ReferenceSourceImportTypes.js +30 -22
  49. package/dist/application/ReferenceSourceVcsAdapter.js +145 -30
  50. package/dist/application/RegularFileRead.js +103 -0
  51. package/dist/application/Setup.js +69 -10
  52. package/dist/application/SetupClientConfiguration.js +134 -23
  53. package/dist/application/SetupHost.js +102 -22
  54. package/dist/application/SetupPlan.js +18 -17
  55. package/dist/application/SetupSkill.js +81 -13
  56. package/dist/application/SupportedClients.js +305 -37
  57. package/dist/application/Uninstall.js +172 -8
  58. package/dist/application/UpdateMaintenance.js +23 -23
  59. package/dist/application/Utf8JsonInput.js +71 -0
  60. package/dist/application/WebScriptExportService.js +130 -57
  61. package/dist/application/WebSourceLocationService.js +3 -0
  62. package/dist/application/adb/AdbDeviceAnalysisPort.js +1 -0
  63. package/dist/application/adb/AdbDeviceAnalysisService.js +13 -0
  64. package/dist/application/analysisView/AnalysisViewService.js +40 -2
  65. package/dist/application/android/AndroidAnalysisService.js +1 -1
  66. package/dist/application/apktool/ApktoolResourceAnalysisPort.js +1 -0
  67. package/dist/application/apktool/ApktoolResourceAnalysisService.js +13 -0
  68. package/dist/application/binary/AnalysisClientCleanup.js +0 -24
  69. package/dist/application/binary/AnalysisSnapshotCache.js +5 -4
  70. package/dist/application/binary/BinarySession.js +18 -1
  71. package/dist/application/binary/BinarySessionOpen.js +9 -1
  72. package/dist/application/binaryDiagnostics/BinaryLayoutService.js +2 -1
  73. package/dist/application/binaryDiagnostics/PeResourcesPort.js +1 -0
  74. package/dist/application/binaryDiagnostics/PeResourcesService.js +111 -0
  75. package/dist/application/binaryDiagnostics/RecordedCrashService.js +2 -1
  76. package/dist/application/evm/EvmInterfaceService.js +3 -0
  77. package/dist/application/firmware/FirmwareAnalysisService.js +3 -0
  78. package/dist/application/investigation/InspectEvidenceBundle.js +18 -0
  79. package/dist/application/javascript/ElectronActiveEvidence.js +2 -2
  80. package/dist/application/javascript/ElectronBoundaryAnalysis.js +2 -2
  81. package/dist/application/javascript/ElectronBoundaryGraphContext.js +3 -2
  82. package/dist/application/javascript/ElectronBoundaryGraphIpc.js +2 -2
  83. package/dist/application/javascript/ElectronBoundaryGraphNative.js +20 -3
  84. package/dist/application/javascript/ElectronBoundaryGraphWindows.js +3 -3
  85. package/dist/application/javascript/JavaScriptApplicationEvidence.js +1 -0
  86. package/dist/application/javascript/JavaScriptApplicationEvidenceGraph.js +107 -46
  87. package/dist/application/javascript/JavaScriptApplicationService.js +23 -11
  88. package/dist/application/javascript/JavaScriptApplicationWorkflowEvidence.js +5 -6
  89. package/dist/application/javascript/JavaScriptApplicationWorkflowService.js +59 -45
  90. package/dist/application/javascript/JavaScriptArtifactAnalysis.js +171 -36
  91. package/dist/application/javascript/JavaScriptArtifactGraphAccumulator.js +14 -16
  92. package/dist/application/javascript/JavaScriptArtifactGraphBuilder.js +74 -36
  93. package/dist/application/javascript/JavaScriptArtifactGraphBundlers.js +4 -3
  94. package/dist/application/javascript/JavaScriptArtifactGraphContext.js +11 -5
  95. package/dist/application/javascript/JavaScriptArtifactGraphFindings.js +53 -42
  96. package/dist/application/javascript/JavaScriptArtifactGraphStructure.js +92 -10
  97. package/dist/application/javascript/JavaScriptArtifactPathResolution.js +293 -238
  98. package/dist/application/javascript/JavaScriptArtifactReconstruction.js +120 -28
  99. package/dist/application/javascript/JavaScriptArtifactReconstructionInput.js +4 -0
  100. package/dist/application/javascript/JavaScriptJsonModules.js +2 -2
  101. package/dist/application/javascript/JavaScriptModuleRelationships.js +10 -20
  102. package/dist/application/javascript/JavaScriptRecoveryService.js +3 -0
  103. package/dist/application/javascript/JavaScriptRuntimeReconciliationService.js +11 -27
  104. package/dist/application/javascript/JavaScriptSemanticGraphAsyncProjection.js +11 -5
  105. package/dist/application/javascript/JavaScriptSemanticGraphBuilder.js +206 -66
  106. package/dist/application/javascript/JavaScriptSemanticGraphChildProcessProjection.js +1 -1
  107. package/dist/application/javascript/JavaScriptSemanticGraphConstruction.js +18 -23
  108. package/dist/application/javascript/JavaScriptSemanticGraphDataProjection.js +5 -2
  109. package/dist/application/javascript/JavaScriptSemanticGraphEvidence.js +1 -1
  110. package/dist/application/javascript/JavaScriptSemanticGraphFingerprintProjection.js +2 -2
  111. package/dist/application/javascript/JavaScriptSemanticGraphFlowProjection.js +7 -5
  112. package/dist/application/javascript/JavaScriptSemanticGraphObjectProjection.js +6 -4
  113. package/dist/application/javascript/JavaScriptSemanticGraphProjection.js +4 -4
  114. package/dist/application/javascript/JavaScriptSemanticGraphResourceProjection.js +1 -1
  115. package/dist/application/javascript/JavaScriptSemanticGraphValueProjection.js +29 -15
  116. package/dist/application/javascript/JavaScriptSemanticTraceService.js +15 -10
  117. package/dist/application/jeb/JebAnalysisPort.js +1 -0
  118. package/dist/application/jeb/JebAnalysisService.js +13 -0
  119. package/dist/application/managed/ManagedApplicationGraphService.js +1 -1
  120. package/dist/application/native/NativeCallRoutes.js +2 -4
  121. package/dist/application/native/NativeUiActionTrace.js +16 -8
  122. package/dist/application/native/NativeValueTrace.js +23 -6
  123. package/dist/application/process/ProcessCli.js +25 -20
  124. package/dist/artifacts/ArtifactPaths.js +129 -8
  125. package/dist/artifacts/ArtifactProvider.js +34 -31
  126. package/dist/artifacts/ArtifactProviderMetadata.js +1 -4
  127. package/dist/artifacts/ArtifactReader.js +23 -0
  128. package/dist/artifacts/ArtifactResourceScope.js +100 -0
  129. package/dist/artifacts/AsarArtifactReader.js +218 -80
  130. package/dist/artifacts/AsarHeader.js +24 -0
  131. package/dist/artifacts/DirectoryArtifactReader.js +168 -65
  132. package/dist/artifacts/MachOSliceArtifactReader.js +116 -39
  133. package/dist/artifacts/NativeDmgArtifactReader.js +179 -87
  134. package/dist/artifacts/NativeDmgOwnership.js +109 -0
  135. package/dist/artifacts/SafeOutputTree.js +245 -70
  136. package/dist/artifacts/SafeOutputTreeCleanup.js +45 -0
  137. package/dist/artifacts/SafeOutputTreeCreationFailure.js +20 -0
  138. package/dist/artifacts/SafeOutputTreeIdentity.js +42 -0
  139. package/dist/artifacts/SafeOutputTreeReadback.js +33 -0
  140. package/dist/artifacts/ZipArtifactReader.js +77 -27
  141. package/dist/artifacts/apple/InterfaceBuilderAnalysis.js +58 -18
  142. package/dist/artifacts/apple/InterfaceBuilderDecodeBudget.js +62 -24
  143. package/dist/artifacts/apple/KeyedArchiveReader.js +76 -49
  144. package/dist/artifacts/apple/MachoLoadCommandReader.js +36 -6
  145. package/dist/artifacts/extraction/ArtifactExtraction.js +134 -92
  146. package/dist/artifacts/inventory/ArtifactGraphConstruction.js +116 -50
  147. package/dist/artifacts/inventory/ArtifactInventory.js +5 -4
  148. package/dist/artifacts/inventory/classify.js +87 -25
  149. package/dist/artifacts/inventory/hashStableRootArtifact.js +70 -0
  150. package/dist/artifacts/inventory/reader.js +13 -5
  151. package/dist/artifacts/inventory/scanCanonical.js +73 -30
  152. package/dist/artifacts/inventory/scanReader.js +43 -20
  153. package/dist/artifacts/javascript/JavaScriptArtifactFiles.js +72 -28
  154. package/dist/artifacts/javascript/JavaScriptSourceAnalysis.js +3 -0
  155. package/dist/browser/BrowserScenarioPartialObservation.js +8 -2
  156. package/dist/browser/BrowserScenarioSecrets.js +52 -37
  157. package/dist/browser/CdpBrowserProvider.js +9 -3
  158. package/dist/browser/CdpCaptureDocuments.js +40 -6
  159. package/dist/browser/CdpCaptureDomSvg.js +210 -0
  160. package/dist/browser/CdpCaptureEventBodyShapes.js +4 -8
  161. package/dist/browser/CdpCaptureEventHandlers.js +26 -9
  162. package/dist/browser/CdpCaptureEvents.js +4 -9
  163. package/dist/browser/CdpCaptureStorageFingerprints.js +3 -3
  164. package/dist/browser/CdpConnection.js +22 -5
  165. package/dist/browser/CdpElectronInspection.js +2 -2
  166. package/dist/browser/CdpElectronProvider.js +4 -3
  167. package/dist/browser/CdpElectronScripts.js +2 -2
  168. package/dist/browser/CdpPageCapture.js +1 -1
  169. package/dist/browser/CdpTargetSession.js +30 -34
  170. package/dist/browser/CdpWebMcpDiscovery.js +48 -23
  171. package/dist/browser/ElectronFileScope.js +99 -9
  172. package/dist/browser/PlaywrightBrowserScenarioProvider.js +63 -7
  173. package/dist/browser/PlaywrightElectronActiveProvider.js +11 -6
  174. package/dist/browser/PlaywrightScenarioArtifacts.js +5 -5
  175. package/dist/browser/PlaywrightScenarioBrowser.js +208 -43
  176. package/dist/browser/PlaywrightScenarioSession.js +130 -65
  177. package/dist/browser/PlaywrightScenarioStorage.js +507 -0
  178. package/dist/browser/PngVisualDiff.js +198 -29
  179. package/dist/browser/WebSourceMapFetcher.js +35 -9
  180. package/dist/browser/assets/LocalWebScriptArtifacts.js +3 -1
  181. package/dist/browser/assets/PublishWebScripts.js +75 -20
  182. package/dist/browser/assets/ScenarioScriptCapture.js +8 -12
  183. package/dist/browser/assets/WebArtifactReads.js +23 -1
  184. package/dist/browser/assets/WebSourceLocationArtifacts.js +1 -0
  185. package/dist/browser/execution/CdpExecutionCapture.js +3 -3
  186. package/dist/browser/execution/CdpPreciseCoverage.js +5 -8
  187. package/dist/browser/history/HarCapture.js +14 -0
  188. package/dist/browser/history/HarCaptureProcess.js +2 -10
  189. package/dist/browser/history/MitmproxyCaptureAdapter.js +3 -1
  190. package/dist/browser/modules/WebModuleArtifacts.js +1 -0
  191. package/dist/cli/adbCommands.js +337 -0
  192. package/dist/cli/analysisViewCommands.js +39 -1
  193. package/dist/cli/apktoolCommands.js +53 -0
  194. package/dist/cli/artifactCommands.js +8 -11
  195. package/dist/cli/binaryDiagnosticsCommands.js +19 -1
  196. package/dist/cli/browserAdvancedCommands.js +65 -36
  197. package/dist/cli/coreAnalysisCommands.js +2 -2
  198. package/dist/cli/coreBinaryCommands.js +12 -13
  199. package/dist/cli/coreNativeCommands.js +1 -14
  200. package/dist/cli/electronCommands.js +14 -10
  201. package/dist/cli/evmCommands.js +13 -4
  202. package/dist/cli/firmwareCommands.js +7 -2
  203. package/dist/cli/javascriptApplicationAnalysis.js +19 -13
  204. package/dist/cli/javascriptRecoveryCommands.js +22 -15
  205. package/dist/cli/jebCommands.js +99 -0
  206. package/dist/cli/jsonOutput.js +12 -4
  207. package/dist/cli/referenceSourceImportStatus.js +7 -0
  208. package/dist/cli/setupCommands.js +15 -3
  209. package/dist/cli/streamedJsonOutput.js +83 -4
  210. package/dist/cli/utilityCommands.js +68 -22
  211. package/dist/cli/webScriptCommands.js +20 -1
  212. package/dist/cli/webSourceLocationCommands.js +21 -9
  213. package/dist/cli.js +11 -2
  214. package/dist/cliBrowserScenarioCommands.js +2 -1
  215. package/dist/cliCommandNames.js +32 -0
  216. package/dist/cliJsonInput.js +47 -34
  217. package/dist/cliObservationOptions.js +7 -0
  218. package/dist/composition/adb.js +3 -0
  219. package/dist/composition/apktool.js +3 -0
  220. package/dist/composition/auxiliaryAnalysisProviders.js +5 -4
  221. package/dist/composition/binaryDiagnostics.js +4 -0
  222. package/dist/composition/browserScenario.js +2 -2
  223. package/dist/composition/directAnalysis.js +14 -7
  224. package/dist/composition/javascriptAnalysisWorkerProcess.js +48 -0
  225. package/dist/composition/jeb.js +6 -0
  226. package/dist/config/environment.js +10 -0
  227. package/dist/config/ghidraLanguageOverride.js +9 -0
  228. package/dist/config/mcpInputSchemaProfile.js +27 -0
  229. package/dist/config/parseConfig.js +28 -1
  230. package/dist/contracts/adb/adbToolContracts.js +353 -0
  231. package/dist/contracts/advertisedInputExamples.js +48 -0
  232. package/dist/contracts/analysisDetail.js +10 -0
  233. package/dist/contracts/analysisViewToolContracts.js +17 -2
  234. package/dist/contracts/apktool/apktoolToolContracts.js +33 -0
  235. package/dist/contracts/artifactComparisonExample.js +5 -5
  236. package/dist/contracts/artifactToolContracts.js +8 -5
  237. package/dist/contracts/browserToolContracts.js +1 -1
  238. package/dist/contracts/compactInputSchema.js +256 -0
  239. package/dist/contracts/errorSchemas.js +3 -1
  240. package/dist/contracts/functionComparisonExample.js +8 -0
  241. package/dist/contracts/functionWorkflowToolContracts.js +1 -1
  242. package/dist/contracts/inputSchemaPresentation.js +104 -13
  243. package/dist/contracts/javascript/electronToolContracts.js +16 -3
  244. package/dist/contracts/javascript/javascriptApplicationWorkflowExamples.js +3 -2
  245. package/dist/contracts/javascript/javascriptExportShapeComparisonExample.js +6 -3
  246. package/dist/contracts/javascript/javascriptRecoveryToolContracts.js +1 -1
  247. package/dist/contracts/javascript/javascriptRuntimeReconciliationExample.js +8 -7
  248. package/dist/contracts/jeb/jebToolContracts.js +64 -0
  249. package/dist/contracts/managed/managedToolContracts.js +3 -2
  250. package/dist/contracts/mobileApplicationGraphExamples.js +5 -5
  251. package/dist/contracts/native/binaryDiagnosticsToolContracts.js +25 -3
  252. package/dist/contracts/native/nativeToolContracts.js +1 -1
  253. package/dist/contracts/officialToolContracts.js +5 -5
  254. package/dist/contracts/sessionLifecycleInputs.js +4 -3
  255. package/dist/contracts/sessionStatusContract.js +3 -2
  256. package/dist/contracts/sessionToolContracts.js +5 -4
  257. package/dist/contracts/sessionToolSchemas.js +9 -4
  258. package/dist/contracts/toolContractExamples.js +6 -0
  259. package/dist/contracts/toolContractTypes.js +3 -0
  260. package/dist/contracts/toolContracts.js +6 -0
  261. package/dist/contracts/toolEffects.js +167 -0
  262. package/dist/contracts/toolOutputSchemaGroups.js +7 -5
  263. package/dist/contracts/toolOutputSchemaPrimitives.js +2 -5
  264. package/dist/contracts/toolSchemaMetadata.js +82 -7
  265. package/dist/domain/adb/adbDeviceAnalysis.js +583 -0
  266. package/dist/domain/analysisErrorBase.js +5 -0
  267. package/dist/domain/analysisErrorCleanup.js +29 -0
  268. package/dist/domain/analysisErrorPresentation.js +18 -4
  269. package/dist/domain/analysisErrorProjection.js +4 -1
  270. package/dist/domain/analysisSnapshot.js +5 -2
  271. package/dist/domain/analysisView/analysisView.js +53 -5
  272. package/dist/domain/analysisView/binaryLayoutView.js +2 -0
  273. package/dist/domain/analysisView/javascriptApplicationView.js +2 -0
  274. package/dist/domain/analysisView/nativeFunctionView.js +155 -0
  275. package/dist/domain/android/androidApplication.js +25 -20
  276. package/dist/domain/android/androidPartialObservation.js +36 -0
  277. package/dist/domain/apktool/apktoolResourceAnalysis.js +77 -0
  278. package/dist/domain/apple/appleApplication.js +40 -23
  279. package/dist/domain/apple/appleBundleAnatomy.js +95 -28
  280. package/dist/domain/apple/dyldPaths.js +9 -1
  281. package/dist/domain/apple/dylibResolution.js +3 -3
  282. package/dist/domain/apple/interfaceBuilderGraph.js +22 -19
  283. package/dist/domain/apple/interfaceBuilderKeyedArchive.js +10 -1
  284. package/dist/domain/artifactComparison.js +39 -11
  285. package/dist/domain/artifactGraph.js +6 -4
  286. package/dist/domain/artifactIdentity.js +37 -9
  287. package/dist/domain/artifactInspection.js +10 -50
  288. package/dist/domain/artifactIntegrityPolicy.js +10 -0
  289. package/dist/domain/artifactInventoryEvidence.js +16 -17
  290. package/dist/domain/artifactPathSyntax.js +1 -1
  291. package/dist/domain/binaryTarget.js +16 -0
  292. package/dist/domain/binaryTargetTypes.js +8 -1
  293. package/dist/domain/browserCompleteness.js +3 -2
  294. package/dist/domain/browserObservationSchemas.js +8 -4
  295. package/dist/domain/browserScenarioCaptureValues.js +2 -2
  296. package/dist/domain/browserScenarioNormalization.js +3 -3
  297. package/dist/domain/browserScenarioValues.js +3 -2
  298. package/dist/domain/callPath.js +8 -10
  299. package/dist/domain/canonicalDigest.js +7 -1
  300. package/dist/domain/canonicalJsonDigestSteps.js +34 -12
  301. package/dist/domain/canonicalOrdering.js +1 -13
  302. package/dist/domain/changedBehavior.js +2 -3
  303. package/dist/domain/compactStringIdentity.js +9 -0
  304. package/dist/domain/comparisonSemantics.js +0 -5
  305. package/dist/domain/digests.js +0 -3
  306. package/dist/domain/evidence.js +12 -6
  307. package/dist/domain/evidenceBundle.js +51 -33
  308. package/dist/domain/evidenceRecordSummary.js +144 -0
  309. package/dist/domain/firmware/firmwareAnalysis.js +4 -3
  310. package/dist/domain/functionComparison.js +2 -1
  311. package/dist/domain/functionComparisonNormalization.js +4 -3
  312. package/dist/domain/functionComparisonResults.js +2 -2
  313. package/dist/domain/functionDossierEvidence.js +2 -1
  314. package/dist/domain/hopperValues.js +11 -15
  315. package/dist/domain/inputIssueProjection.js +16 -1
  316. package/dist/domain/javascript/electronActiveObservation.js +4 -3
  317. package/dist/domain/javascript/electronStaticAnalysisBrowser.js +14 -15
  318. package/dist/domain/javascript/electronStaticAnalysisIpc.js +20 -21
  319. package/dist/domain/javascript/electronStaticAnalysisNative.js +73 -41
  320. package/dist/domain/javascript/electronStaticAnalysisValues.js +24 -4
  321. package/dist/domain/javascript/javascriptAnalysisResourceControls.js +45 -0
  322. package/dist/domain/javascript/javascriptApplicationAnalysis.js +6 -1
  323. package/dist/domain/javascript/javascriptApplicationChangeGraph.js +18 -14
  324. package/dist/domain/javascript/javascriptApplicationEvidenceSchemas.js +4 -0
  325. package/dist/domain/javascript/javascriptApplicationGraph.js +91 -28
  326. package/dist/domain/javascript/javascriptApplicationProjectionResources.js +35 -0
  327. package/dist/domain/javascript/javascriptApplicationVersionComparison.js +4 -4
  328. package/dist/domain/javascript/javascriptApplicationVersionComparisonSchemas.js +37 -22
  329. package/dist/domain/javascript/javascriptApplicationVersionItems.js +72 -45
  330. package/dist/domain/javascript/javascriptApplicationVersionKeys.js +16 -8
  331. package/dist/domain/javascript/javascriptAstFingerprint.js +60 -33
  332. package/dist/domain/javascript/javascriptAstValues.js +54 -0
  333. package/dist/domain/javascript/javascriptElectronMemberWrites.js +50 -0
  334. package/dist/domain/javascript/javascriptExportShapeComparison.js +3 -2
  335. package/dist/domain/javascript/javascriptExportShapeComparisonSchemas.js +31 -23
  336. package/dist/domain/javascript/javascriptExportShapeSelection.js +2 -2
  337. package/dist/domain/javascript/javascriptExportShapeVariants.js +3 -2
  338. package/dist/domain/javascript/javascriptFeatureSeed.js +5 -3
  339. package/dist/domain/javascript/javascriptFeatureTrace.js +7 -6
  340. package/dist/domain/javascript/javascriptFeatureTraceSchemas.js +17 -9
  341. package/dist/domain/javascript/javascriptFeatureTraversal.js +4 -4
  342. package/dist/domain/javascript/javascriptModuleSemanticIr.js +15 -0
  343. package/dist/domain/javascript/javascriptNativeHandoff.js +12 -7
  344. package/dist/domain/javascript/javascriptRpcEndpoints.js +253 -0
  345. package/dist/domain/javascript/javascriptRuntimeLoadState.js +1 -3
  346. package/dist/domain/javascript/javascriptRuntimeObservation.js +8 -5
  347. package/dist/domain/javascript/javascriptRuntimeReconciliation.js +12 -6
  348. package/dist/domain/javascript/javascriptRuntimeReconciliationActive.js +9 -8
  349. package/dist/domain/javascript/javascriptRuntimeReconciliationCaptureParsing.js +212 -0
  350. package/dist/domain/javascript/javascriptRuntimeReconciliationGraph.js +12 -6
  351. package/dist/domain/javascript/javascriptRuntimeReconciliationInputValidation.js +28 -0
  352. package/dist/domain/javascript/javascriptRuntimeReconciliationMatching.js +5 -5
  353. package/dist/domain/javascript/javascriptRuntimeReconciliationParsing.js +12 -223
  354. package/dist/domain/javascript/javascriptRuntimeReconciliationResult.js +2 -2
  355. package/dist/domain/javascript/javascriptRuntimeReconciliationRuntime.js +15 -4
  356. package/dist/domain/javascript/javascriptRuntimeReconciliationSchemas.js +2 -2
  357. package/dist/domain/javascript/javascriptRuntimeStaticCandidates.js +15 -17
  358. package/dist/domain/javascript/javascriptSemanticAnalysis.js +379 -30
  359. package/dist/domain/javascript/javascriptSemanticCallResolution.js +9 -7
  360. package/dist/domain/javascript/javascriptSemanticCallableResults.js +42 -0
  361. package/dist/domain/javascript/javascriptSemanticCalls.js +8 -1
  362. package/dist/domain/javascript/javascriptSemanticChildProcesses.js +2 -2
  363. package/dist/domain/javascript/javascriptSemanticCoverage.js +20 -0
  364. package/dist/domain/javascript/javascriptSemanticDataEffectHelpers.js +7 -9
  365. package/dist/domain/javascript/javascriptSemanticDataEffects.js +4 -11
  366. package/dist/domain/javascript/javascriptSemanticDerivedAnalysis.js +15 -4
  367. package/dist/domain/javascript/javascriptSemanticFileProjection.js +1 -0
  368. package/dist/domain/javascript/javascriptSemanticFingerprints.js +43 -42
  369. package/dist/domain/javascript/javascriptSemanticGraph.js +205 -52
  370. package/dist/domain/javascript/javascriptSemanticGraphSchemas.js +21 -11
  371. package/dist/domain/javascript/javascriptSemanticIr.js +0 -4
  372. package/dist/domain/javascript/javascriptSemanticIterationSources.js +139 -0
  373. package/dist/domain/javascript/javascriptSemanticMemberMutations.js +774 -136
  374. package/dist/domain/javascript/javascriptSemanticMutationInitializers.js +190 -0
  375. package/dist/domain/javascript/javascriptSemanticMutationValues.js +98 -41
  376. package/dist/domain/javascript/javascriptSemanticObjectReferences.js +381 -0
  377. package/dist/domain/javascript/javascriptSemanticObjects.js +9 -7
  378. package/dist/domain/javascript/javascriptSemanticPrimitives.js +7 -2
  379. package/dist/domain/javascript/javascriptSemanticProjection.js +72 -28
  380. package/dist/domain/javascript/javascriptSemanticPromises.js +15 -21
  381. package/dist/domain/javascript/javascriptSemanticPropertyPaths.js +100 -0
  382. package/dist/domain/javascript/javascriptSemanticProvenance.js +3 -3
  383. package/dist/domain/javascript/javascriptSemanticQuery.js +33 -29
  384. package/dist/domain/javascript/javascriptSemanticQueryIdentity.js +4 -5
  385. package/dist/domain/javascript/javascriptSemanticQuerySchemas.js +8 -9
  386. package/dist/domain/javascript/javascriptSemanticRequireOrigin.js +16 -10
  387. package/dist/domain/javascript/javascriptSemanticReturnedReferences.js +219 -0
  388. package/dist/domain/javascript/javascriptSemanticReturns.js +34 -48
  389. package/dist/domain/javascript/javascriptSemanticState.js +22 -2
  390. package/dist/domain/javascript/javascriptSemanticTraversal.js +25 -2
  391. package/dist/domain/javascript/javascriptSemanticValues.js +169 -30
  392. package/dist/domain/javascript/javascriptSourceAnalysis.js +1 -0
  393. package/dist/domain/javascript/javascriptSourceMapPaths.js +11 -1
  394. package/dist/domain/javascript/javascriptSourceParser.js +34 -9
  395. package/dist/domain/javascript/javascriptStaticAnalysis.js +29 -17
  396. package/dist/domain/javascript/javascriptStaticAnalysisBundler.js +13 -12
  397. package/dist/domain/javascript/javascriptStaticAnalysisCalls.js +49 -5
  398. package/dist/domain/javascript/javascriptStaticAnalysisFindings.js +8 -4
  399. package/dist/domain/javascript/javascriptStaticAnalysisHelpers.js +26 -15
  400. package/dist/domain/javascript/javascriptStaticAnalysisState.js +1 -0
  401. package/dist/domain/javascript/sourceToBundleComparison.js +7 -5
  402. package/dist/domain/javascript/sourceToBundleSignals.js +7 -7
  403. package/dist/domain/jeb/jebAnalysis.js +114 -0
  404. package/dist/domain/jsonSerialization.js +109 -55
  405. package/dist/domain/jsonShape.js +69 -31
  406. package/dist/domain/jsonValue.js +3 -0
  407. package/dist/domain/localPath.js +10 -4
  408. package/dist/domain/managed/managedApplicationGraph.js +47 -6
  409. package/dist/domain/managed/managedApplicationGraphCoverage.js +8 -2
  410. package/dist/domain/managed/managedApplicationGraphNodes.js +94 -59
  411. package/dist/domain/managed/managedArtifact.js +1 -0
  412. package/dist/domain/managed/managedInspectionEvidence.js +13 -0
  413. package/dist/domain/managed/managedMemberComparisonMatch.js +6 -7
  414. package/dist/domain/native/nativeAotPe.js +1408 -0
  415. package/dist/domain/native/nativeCallObservation.js +2 -4
  416. package/dist/domain/native/nativeInstruction.js +21 -0
  417. package/dist/domain/native/nativeMetadataRecovery.js +79 -6
  418. package/dist/domain/native/nativeValueFlow.js +5 -11
  419. package/dist/domain/native/objcSwiftMetadata.js +15 -17
  420. package/dist/domain/native/peResources.js +94 -0
  421. package/dist/domain/nativeConvention.js +33 -0
  422. package/dist/domain/process/processCapture.js +102 -11
  423. package/dist/domain/process/processCaptureCoverage.js +8 -5
  424. package/dist/domain/process/processCaptureExample.js +67 -0
  425. package/dist/domain/process/processCaptureValidation.js +83 -3
  426. package/dist/domain/process/processComparison.js +0 -23
  427. package/dist/domain/process/processScenario.js +62 -10
  428. package/dist/domain/process/processTraceEvaluation.js +4 -4
  429. package/dist/domain/process/processTraceSpecification.js +1 -3
  430. package/dist/domain/propertyListKeys.js +3 -1
  431. package/dist/domain/providerCleanupError.js +6 -2
  432. package/dist/domain/reconstructionCoverage.js +2 -1
  433. package/dist/domain/reconstructionUnknowns.js +4 -3
  434. package/dist/domain/reconstructionVerification.js +3 -2
  435. package/dist/domain/referenceSourceGraph.js +32 -23
  436. package/dist/domain/referenceSourceImportParsing.js +40 -48
  437. package/dist/domain/referenceSourcePathIdentity.js +22 -0
  438. package/dist/domain/referenceSourceRequireBindings.js +137 -0
  439. package/dist/domain/residualUnknown.js +3 -2
  440. package/dist/domain/staticRuntimeCorrelation.js +2 -1
  441. package/dist/domain/swiftSymbolClassification.js +6 -1
  442. package/dist/domain/symbolAnalysis.js +17 -2
  443. package/dist/domain/unicodeCodePointOrder.js +6 -0
  444. package/dist/domain/webBundleAnalyzerInspection.js +23 -3
  445. package/dist/domain/webCaptureDiff.js +170 -30
  446. package/dist/domain/webCaptureDiffSchemas.js +2 -8
  447. package/dist/domain/webInventory.js +3 -2
  448. package/dist/domain/webMcpDiscovery.js +4 -3
  449. package/dist/domain/webScriptExport.js +1 -1
  450. package/dist/domain/webScriptExportError.js +10 -4
  451. package/dist/domain/webScriptExportPlan.js +7 -13
  452. package/dist/domain/zipPackageFormat.js +4 -1
  453. package/dist/domain/zodCollectionSteps.js +24 -0
  454. package/dist/dotnet/ManagedArtifactInspector.js +55 -43
  455. package/dist/dotnet/ManagedDecodeBudget.js +80 -0
  456. package/dist/dotnet/ManagedMemberInspector.js +13 -6
  457. package/dist/dotnet/ManagedMemberInspectorCore.js +2 -2
  458. package/dist/dotnet/ManagedMemberInstructionDecoder.js +5 -4
  459. package/dist/dotnet/ManagedMemberRows.js +9 -4
  460. package/dist/dotnet/ManagedMetadataHeaps.js +15 -5
  461. package/dist/dotnet/ManagedMetadataInventoryRows.js +20 -11
  462. package/dist/dotnet/ManagedMetadataLayout.js +10 -4
  463. package/dist/dotnet/ManagedMethodBodyReader.js +8 -3
  464. package/dist/dotnet/ManagedNativeBoundaryHelpers.js +3 -2
  465. package/dist/dotnet/ManagedNativeBoundaryInspector.js +49 -34
  466. package/dist/dotnet/ManagedPeReader.js +41 -25
  467. package/dist/dotnet/ManagedReaderFailure.js +2 -1
  468. package/dist/dotnet/ManagedStaticProvider.js +65 -31
  469. package/dist/dotnet/ManagedStaticProviderMetadata.js +1 -4
  470. package/dist/evaluation/AgentEvaluationReport.js +9 -5
  471. package/dist/evaluation/CodexAgentEval.js +43 -13
  472. package/dist/evm/EvmoleFailures.js +0 -2
  473. package/dist/evm/EvmoleInterfaceProvider.js +67 -2
  474. package/dist/filesystem/OwnedDirectoryHandle.js +29 -0
  475. package/dist/filesystem/OwnedFileHandle.js +36 -0
  476. package/dist/filesystem/RegularFile.js +73 -0
  477. package/dist/filesystem/StableFileHash.js +46 -0
  478. package/dist/filesystem/readFileHandleChunks.js +26 -0
  479. package/dist/firmware/FirmwareCommand.js +25 -3
  480. package/dist/firmware/FirmwareFiles.js +23 -8
  481. package/dist/firmware/FirmwareProvider.js +156 -32
  482. package/dist/firmware/FirmwarePublication.js +24 -3
  483. package/dist/firmware/FirmwareRelease.js +1 -0
  484. package/dist/generatedPackageMetadata.js +2 -2
  485. package/dist/ghidra/GhidraAnalysisProfile.js +55 -4
  486. package/dist/ghidra/GhidraAnalysisSeeds.js +211 -0
  487. package/dist/ghidra/GhidraClient.js +90 -8
  488. package/dist/ghidra/GhidraDiagnostics.js +11 -8
  489. package/dist/ghidra/GhidraFunctionValues.js +26 -2
  490. package/dist/ghidra/GhidraInstallation.js +111 -10
  491. package/dist/ghidra/GhidraInventoryValues.js +23 -1
  492. package/dist/ghidra/GhidraLanguageCatalog.js +99 -0
  493. package/dist/ghidra/GhidraLauncher.js +123 -58
  494. package/dist/ghidra/GhidraLoadImageAttest.js +49 -2
  495. package/dist/ghidra/GhidraMipsProfile.js +79 -0
  496. package/dist/ghidra/GhidraProvider.js +57 -9
  497. package/dist/ghidra/GhidraProviderCapabilities.js +18 -8
  498. package/dist/ghidra/GhidraProviderClient.js +282 -21
  499. package/dist/ghidra/GhidraSessionValues.js +9 -2
  500. package/dist/hopper/HopperAnalysisProfile.js +2 -0
  501. package/dist/hopper/HopperCleanup.js +1 -1
  502. package/dist/hopper/HopperClient.js +15 -6
  503. package/dist/hopper/HopperMachOImage.js +2 -0
  504. package/dist/hopper/HopperProvider.js +13 -2
  505. package/dist/ida/IdaOperationRunner.js +10 -2
  506. package/dist/ida/IdaProvider.js +7 -0
  507. package/dist/ida/IdaSessionClient.js +7 -3
  508. package/dist/ida/IdaWorkspace.js +4 -2
  509. package/dist/inspector/JavaScriptRuntimeScope.js +9 -5
  510. package/dist/inspector/V8InspectorCaptureProjection.js +46 -13
  511. package/dist/inspector/V8InspectorProvider.js +60 -8
  512. package/dist/javascript/analysis/JavaScriptAnalysisTransfer.js +326 -0
  513. package/dist/javascript/analysis/JavaScriptAnalysisWorker.js +520 -0
  514. package/dist/javascript/analysis/JavaScriptAnalysisWorkerProtocol.js +63 -0
  515. package/dist/javascript/analysis/JavaScriptAnalysisWorkerSchemas.js +521 -0
  516. package/dist/javascript/analysis/JavaScriptAnalysisWorkerServer.js +116 -0
  517. package/dist/javascript/recovery/RecoveryFiles.js +18 -7
  518. package/dist/javascript/recovery/WakaruCommand.js +22 -9
  519. package/dist/javascript/recovery/WakaruExecution.js +11 -7
  520. package/dist/javascript/recovery/WakaruProvider.js +139 -16
  521. package/dist/javascript/recovery/WakaruPublication.js +14 -4
  522. package/dist/javascript/recovery/WakaruRelease.js +10 -3
  523. package/dist/javascript/recovery/WakaruReport.js +12 -7
  524. package/dist/javascript/recovery/WakaruVersion.js +24 -0
  525. package/dist/javascript/sourceMaps/SourceMapCommand.js +16 -3
  526. package/dist/javascript/sourceMaps/SourceMapDecoder.js +63 -7
  527. package/dist/javascript/sourceMaps/SourceMapFormat.js +15 -4
  528. package/dist/jeb/JebMcpConnection.js +179 -0
  529. package/dist/jeb/JebMcpEndpoint.js +40 -0
  530. package/dist/jeb/JebProvider.js +299 -0
  531. package/dist/main/shutdown.js +76 -32
  532. package/dist/main/transport.js +1 -1
  533. package/dist/mcpDoctor.js +15 -6
  534. package/dist/native/AppleDispatchCoverage.js +25 -12
  535. package/dist/native/AppleDispatchMetadata.js +14 -7
  536. package/dist/native/AppleMachoFixups.js +71 -15
  537. package/dist/native/AppleMachoSelection.js +23 -3
  538. package/dist/native/AppleObjcDispatchFacets.js +3 -3
  539. package/dist/native/AppleObjcProperties.js +17 -7
  540. package/dist/native/LldbCallTracer.js +241 -75
  541. package/dist/native/NativeMacOSProvider.js +100 -20
  542. package/dist/native/NativeMacOSProviderMetadata.js +1 -2
  543. package/dist/native/NativeMachoInspection.js +11 -7
  544. package/dist/native/NativeUiHelperRuntime.js +6 -1
  545. package/dist/native/NativeUiObservation.js +4 -3
  546. package/dist/native/pe/PeResourceLayout.js +120 -0
  547. package/dist/native/pe/PeResourceParser.js +286 -0
  548. package/dist/native/pe/PeResourcesProvider.js +63 -0
  549. package/dist/process/BoundedFileBytes.js +30 -7
  550. package/dist/process/DarwinProcessRunTokenReader.js +8 -3
  551. package/dist/process/OwnedCommand.js +4 -3
  552. package/dist/process/ProcessOwnership.js +104 -112
  553. package/dist/process/ProcessOwnershipObservation.js +104 -51
  554. package/dist/process/ProcessOwnershipProcessTree.js +4 -4
  555. package/dist/process/ProcessRunTokenObservations.js +48 -0
  556. package/dist/process/ProviderDiagnosticRedaction.js +17 -0
  557. package/dist/process/ProviderProcess.js +4 -3
  558. package/dist/process/capture/FilesystemSnapshot.js +116 -22
  559. package/dist/process/capture/ProcessCaptureLifecycle.js +363 -86
  560. package/dist/process/capture/ProcessCaptureProgress.js +62 -0
  561. package/dist/process/capture/ProcessFilesystemEffects.js +19 -4
  562. package/dist/process/capture/ProcessHarness.js +202 -47
  563. package/dist/process/capture/ProcessNormalization.js +3 -1
  564. package/dist/process/capture/ProcessScenarioRuntimeValidation.js +5 -2
  565. package/dist/process/capture/TerminalRenderer.js +24 -7
  566. package/dist/reference/ReferenceSourceReader.js +22 -5
  567. package/dist/reference/ReferenceSourceReaderEntries.js +114 -51
  568. package/dist/reference/ReferenceSourceReaderErrors.js +12 -0
  569. package/dist/reference/ReferenceSourceReaderFile.js +50 -10
  570. package/dist/reference/ReferenceSourceReaderValidate.js +4 -4
  571. package/dist/server/EvidenceMcpServer.js +36 -1
  572. package/dist/server/admittedToolOperation.js +9 -0
  573. package/dist/server/analysisAdmission.js +8 -0
  574. package/dist/server/contractToolHandler.js +21 -0
  575. package/dist/server/createServer.js +118 -47
  576. package/dist/server/registerAdbTools.js +36 -0
  577. package/dist/server/registerAnalysisViewTool.js +4 -9
  578. package/dist/server/registerAndroidTools.js +3 -12
  579. package/dist/server/registerApktoolTools.js +14 -0
  580. package/dist/server/registerApplicationTools/compareExportShapes.js +6 -7
  581. package/dist/server/registerApplicationTools/compareSourceToBundle.js +4 -5
  582. package/dist/server/registerApplicationTools/compareVersions.js +3 -2
  583. package/dist/server/registerApplicationTools/coverage.js +3 -2
  584. package/dist/server/registerApplicationTools/helpers.js +3 -2
  585. package/dist/server/registerApplicationTools/obligationLedger.js +3 -2
  586. package/dist/server/registerApplicationTools/projectMobileApplicationGraph.js +3 -2
  587. package/dist/server/registerApplicationTools/traceFeature.js +3 -2
  588. package/dist/server/registerApplicationTools/traceSemantics.js +4 -5
  589. package/dist/server/registerArtifactComparisonTool.js +5 -2
  590. package/dist/server/registerArtifactTools.js +2 -2
  591. package/dist/server/registerBinaryDiagnosticsTools.js +16 -4
  592. package/dist/server/registerBrowserScenarioTool.js +10 -7
  593. package/dist/server/registerBrowserTools.js +12 -9
  594. package/dist/server/registerBundleComparisonTool.js +16 -2
  595. package/dist/server/registerCloseLifecycleTool.js +36 -5
  596. package/dist/server/registerElectronTools.js +28 -10
  597. package/dist/server/registerEnhancedTools.js +78 -73
  598. package/dist/server/registerEvidenceTools.js +54 -46
  599. package/dist/server/registerEvmTools.js +4 -9
  600. package/dist/server/registerFirmwareTools.js +3 -11
  601. package/dist/server/registerFunctionComparisonTool.js +5 -2
  602. package/dist/server/registerJavaScriptRecoveryTool.js +4 -9
  603. package/dist/server/registerJavaScriptRuntimeObservationTools.js +9 -6
  604. package/dist/server/registerJebTools.js +16 -0
  605. package/dist/server/registerManagedTools.js +7 -4
  606. package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +4 -6
  607. package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +3 -2
  608. package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +3 -2
  609. package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +3 -2
  610. package/dist/server/registerOfficialTools.js +31 -25
  611. package/dist/server/registerPeResourcesTool.js +9 -0
  612. package/dist/server/registerProcessComparisonTool.js +5 -2
  613. package/dist/server/registerRecordedCrashTools.js +4 -9
  614. package/dist/server/registerSessionRecordTools.js +2 -1
  615. package/dist/server/registerSessionTools.js +58 -21
  616. package/dist/server/registerWebModuleTool.js +4 -9
  617. package/dist/server/registerWebNetworkCaptureTool.js +4 -9
  618. package/dist/server/registerWebRuntimeTools.js +6 -5
  619. package/dist/server/registerWebScriptTool.js +6 -3
  620. package/dist/server/registerWebSourceLocationTool.js +4 -9
  621. package/dist/server/toolResult.js +21 -2
  622. package/dist/windows/WindowsPrivateRuntime.js +12 -5
  623. package/install.sh +7 -4
  624. package/licenses/nativeaot-parser-MIT.txt +28 -0
  625. package/native/windows/build/manifest.json +2 -2
  626. package/native/windows/build/rea-windows-x64.node +0 -0
  627. package/package.json +38 -7
  628. package/scripts/rea.mjs +16 -1
  629. package/skills/reverse-engineer-anything/SKILL.md +52 -51
  630. package/skills/reverse-engineer-anything/references/connection-and-recovery.md +127 -0
  631. package/skills/reverse-engineer-anything/references/evidence-workflows.md +8 -0
  632. package/skills/reverse-engineer-anything/references/javascript-applications.md +92 -13
  633. package/skills/reverse-engineer-anything/references/native-and-artifacts.md +31 -1
  634. package/dist/artifacts/inventory/policy.js +0 -2
  635. package/dist/domain/managed/managedApplicationGraphNodeCoverage.js +0 -6
  636. package/dist/server/registerNativeTools.js +0 -6
@@ -1,4 +1,5 @@
1
1
  import { jsonValueSchema } from "./jsonValue.js";
2
+ import { isImmutableJsonSnapshot } from "./immutableJson.js";
2
3
  import { analysisErrorCategory, analysisErrorRemediationAction, analysisErrorUserMessage, assertKnownAnalysisErrorTag, } from "./analysisErrorPresentation.js";
3
4
  import { AnalysisAccessDeniedError, AnalysisArtifactChangedError, AnalysisCancelledError, AnalysisCapabilityUnavailableError, AnalysisUnsupportedTargetError, AnalysisInputError, AnalysisOutputError, AnalysisTimeoutError, AnalysisResourceConstraintError, } from "./analysisErrorCore.js";
4
5
  import { ArtifactOperationError } from "./artifactOperationError.js";
@@ -35,7 +36,9 @@ export const projectAnalysisError = (error) => {
35
36
  ...(error.partialObservation === undefined
36
37
  ? {}
37
38
  : {
38
- partial_observation: jsonValueSchema.parse(error.partialObservation),
39
+ partial_observation: isImmutableJsonSnapshot(error.partialObservation)
40
+ ? error.partialObservation
41
+ : jsonValueSchema.parse(error.partialObservation),
39
42
  }),
40
43
  };
41
44
  return {
@@ -1,13 +1,15 @@
1
1
  import { createHash } from "node:crypto";
2
2
  import canonicalize from "canonicalize";
3
3
  import { z } from "zod";
4
+ import { compareUnicodeCodePoints } from "./unicodeCodePointOrder.js";
4
5
  import { analysisProfileSchema, analysisProfilesEqual, committedProviderSchema, } from "./analysisProfile.js";
6
+ import { BINARY_ARCHITECTURES, } from "./binaryTargetTypes.js";
5
7
  import { evidenceBundleForTarget, evidenceBundleSchema, parseEvidenceBundle, } from "./evidenceBundle.js";
6
8
  import { evidenceLocationSchema, } from "./evidence.js";
7
9
  import { jsonObjectSchema, jsonValueSchema, } from "./jsonValue.js";
8
10
  import { digestSchema } from "./../domain/digests.js";
9
11
  import { prefixedDigestSchema } from "./../domain/digests.js";
10
- const architectureSchema = z.enum(["x86", "x86_64", "arm", "arm64"]);
12
+ const architectureSchema = z.enum(BINARY_ARCHITECTURES);
11
13
  const formatSchema = z.enum([
12
14
  "analysis-database",
13
15
  "mach-o",
@@ -288,7 +290,8 @@ export const parseAnalysisSnapshot = (input) => {
288
290
  const hasCanonicalQueryOrder = (entries) => {
289
291
  let previous;
290
292
  for (const { query_id: queryId } of entries) {
291
- if (previous !== undefined && previous.localeCompare(queryId) > 0)
293
+ if (previous !== undefined &&
294
+ compareUnicodeCodePoints(previous, queryId) > 0)
292
295
  return false;
293
296
  previous = queryId;
294
297
  }
@@ -6,10 +6,12 @@ import { evidenceSchema } from "../evidence.js";
6
6
  import { jsonObjectSchema, jsonValueSchema } from "../jsonValue.js";
7
7
  import { err, ok } from "../result.js";
8
8
  import { binaryLayoutSchema } from "../native/binaryLayout.js";
9
+ import { functionDossierSchema } from "../hopperValues.js";
9
10
  import { parseOwnedJavaScriptApplicationAnalysisSteps, } from "../javascript/javascriptApplicationAnalysis.js";
10
11
  import { analysisInputErrorFromIssues } from "../inputIssueProjection.js";
11
12
  import { projectBinaryLayoutView } from "./binaryLayoutView.js";
12
13
  import { projectJavaScriptApplicationView } from "./javascriptApplicationView.js";
14
+ import { projectNativeFunctionView } from "./nativeFunctionView.js";
13
15
  /** Public name of the selected-view workflow. */
14
16
  export const INSPECT_ANALYSIS_VIEW_OPERATION = "inspect_analysis_view";
15
17
  const summaryViewSchema = z.strictObject({ kind: z.literal("summary") });
@@ -57,12 +59,40 @@ const pageViewSchema = z.strictObject({
57
59
  offset: z.number().int().nonnegative(),
58
60
  limit: z.number().int().positive(),
59
61
  });
62
+ /** Bounded native function facets of already authenticated analyze_function Evidence. */
63
+ const nativeViewSchema = z.strictObject({
64
+ kind: z.literal("native"),
65
+ facet: z.enum([
66
+ "procedure",
67
+ "pseudocode",
68
+ "assembly",
69
+ "basic_blocks",
70
+ "comments",
71
+ "callers",
72
+ "callees",
73
+ "incoming_references",
74
+ "outgoing_references",
75
+ "unresolved_calls",
76
+ "referenced_strings",
77
+ "referenced_names",
78
+ "native_api",
79
+ "value_flow_summary",
80
+ "value_flow_operations",
81
+ "value_flow_def_use",
82
+ "value_flow_effects",
83
+ "value_flow_parameters",
84
+ "value_flow_parameter_uses",
85
+ ]),
86
+ offset: z.number().int().nonnegative().default(0),
87
+ limit: z.number().int().positive().default(64),
88
+ });
60
89
  /** Caller-selected projection of already completed analysis Evidence. */
61
90
  export const analysisViewRequestSchema = z.discriminatedUnion("kind", [
62
91
  summaryViewSchema,
63
92
  facetViewSchema,
64
93
  itemViewSchema,
65
94
  pageViewSchema,
95
+ nativeViewSchema,
66
96
  ]);
67
97
  /** Inline Evidence or an exact same-session retained reference. */
68
98
  export const analysisViewSourceSchema = z.discriminatedUnion("kind", [
@@ -88,7 +118,9 @@ const coverageSchema = z.strictObject({
88
118
  exhausted: z.boolean(),
89
119
  });
90
120
  const artifactSchema = z.strictObject({
91
- path: z.string().min(1),
121
+ path: z
122
+ .string()
123
+ .describe("Exact recorded artifact path, including an empty string."),
92
124
  sha256: digestSchema,
93
125
  });
94
126
  const layoutSummarySchema = z.strictObject({
@@ -127,6 +159,7 @@ const viewResultBase = {
127
159
  parent_operation: z.enum([
128
160
  "inspect_binary_layout",
129
161
  "analyze_javascript_application",
162
+ "analyze_function",
130
163
  ]),
131
164
  parent_digest: digestSchema,
132
165
  view_digest: digestSchema,
@@ -161,15 +194,20 @@ export const analysisViewResultSchema = z.discriminatedUnion("kind", [
161
194
  items: z.array(jsonValueSchema),
162
195
  ...viewResultBase,
163
196
  }),
197
+ z.strictObject({
198
+ kind: z.literal("native"),
199
+ view: nativeViewSchema,
200
+ procedure_address: z.string().nullable(),
201
+ item: jsonValueSchema,
202
+ ...viewResultBase,
203
+ }),
164
204
  ]);
165
205
  /** Construct a typed input failure for one selected-view constraint. */
166
206
  export const analysisViewInputError = (issues) => new AnalysisInputError(INSPECT_ANALYSIS_VIEW_OPERATION, undefined, issues);
167
- /** SHA-256 of the canonical projected JSON, excluding this digest field. */
168
- export const analysisViewDigest = (projection) => digestCanonicalValue(projection, "Analysis view");
169
207
  /** Attach the content digest that must change when projected bytes change. */
170
208
  export const sealAnalysisView = (projection) => analysisViewResultSchema.parse({
171
209
  ...projection,
172
- view_digest: analysisViewDigest(projection),
210
+ view_digest: digestCanonicalValue(projection, "Analysis view"),
173
211
  });
174
212
  const parentDigest = (evidenceId) => evidenceId.slice(3);
175
213
  const parseJavaScriptParent = (input) => {
@@ -191,7 +229,7 @@ const parseJavaScriptParent = (input) => {
191
229
  })), { source: { normalized_result: input } }, { cause }));
192
230
  }
193
231
  };
194
- const unsupportedParent = (parent) => new AnalysisUnsupportedTargetError(INSPECT_ANALYSIS_VIEW_OPERATION, parentArtifactPath(parent), `Parent Evidence operation ${JSON.stringify(parent.operation)} is not inspect_binary_layout or analyze_javascript_application.`);
232
+ const unsupportedParent = (parent) => new AnalysisUnsupportedTargetError(INSPECT_ANALYSIS_VIEW_OPERATION, parentArtifactPath(parent), `Parent Evidence operation ${JSON.stringify(parent.operation)} is not inspect_binary_layout, analyze_javascript_application or analyze_function.`);
195
233
  const parentArtifactPath = (parent) => {
196
234
  if (typeof parent.normalizedResult === "object" &&
197
235
  parent.normalizedResult !== null &&
@@ -239,5 +277,15 @@ export const projectAnalysisView = (parent, view) => {
239
277
  const projected = projectJavaScriptApplicationView(parent, analysis.value, view);
240
278
  return projected.ok ? ok(sealAnalysisView(projected.value)) : projected;
241
279
  }
280
+ if (parent.operation === "analyze_function") {
281
+ const native = functionDossierSchema.safeParse(parent.normalizedResult);
282
+ if (!native.success)
283
+ return err(analysisInputErrorFromIssues(INSPECT_ANALYSIS_VIEW_OPERATION, native.error.issues.map((issue) => ({
284
+ ...issue,
285
+ path: ["source", "normalized_result", ...issue.path],
286
+ })), { source: { normalized_result: parent.normalizedResult } }, { cause: native.error }));
287
+ const projected = projectNativeFunctionView(parent, native.data, view);
288
+ return projected.ok ? ok(sealAnalysisView(projected.value)) : projected;
289
+ }
242
290
  return err(unsupportedParent(parent));
243
291
  };
@@ -96,6 +96,8 @@ const layoutSummary = (layout) => ({
96
96
  /** Project one layout view without re-running the decoder. */
97
97
  export const projectBinaryLayoutView = (parent, layout, view) => {
98
98
  const shared = parentFields(parent, layout);
99
+ if (view.kind === "native")
100
+ return err(layoutIncompatible("Native views require analyze_function Evidence."));
99
101
  if (view.kind === "summary")
100
102
  return ok({
101
103
  kind: "summary",
@@ -176,6 +176,8 @@ const selectModule = (modules, selector) => {
176
176
  export const projectJavaScriptApplicationView = (parent, analysis, view) => {
177
177
  const shared = parentFields(parent, analysis);
178
178
  const modules = moduleEntries(analysis.graph.nodes);
179
+ if (view.kind === "native")
180
+ return err(jsIncompatible("Native views require analyze_function Evidence."));
179
181
  if (view.kind === "summary")
180
182
  return ok({
181
183
  kind: "summary",
@@ -0,0 +1,155 @@
1
+ import { uniqueSorted } from "../canonicalOrdering.js";
2
+ import { jsonValueSchema } from "../jsonValue.js";
3
+ import { err, ok } from "../result.js";
4
+ import { analysisViewInputError, } from "./analysisView.js";
5
+ import { completeWithinViewCoverage, pageViewCoverage, } from "./analysisViewCoverage.js";
6
+ const viewError = (message) => analysisViewInputError([
7
+ { path: ["view"], reason: "invalid_value", message },
8
+ ]);
9
+ const parentFields = (parent, dossier, artifact) => {
10
+ const flow = dossier.native_value_flow;
11
+ const api = dossier.native_api;
12
+ const unknowns = [];
13
+ if (flow === null)
14
+ unknowns.push("native_value_flow was not recorded");
15
+ else if (!flow.available)
16
+ unknowns.push("native_value_flow unavailable: " + flow.reason);
17
+ else if (flow.truncated)
18
+ unknowns.push("native_value_flow is truncated; omitted observations remain unknown");
19
+ if (api === null)
20
+ unknowns.push("native_api was not recorded");
21
+ else if (!api.available)
22
+ unknowns.push("native_api unavailable: " + api.reason, ...api.residual_unknowns);
23
+ return {
24
+ parent_evidence_id: parent.evidenceId,
25
+ parent_operation: "analyze_function",
26
+ parent_digest: parent.evidenceId.slice(3),
27
+ procedure_address: dossier.procedure.address,
28
+ artifact,
29
+ limitations: uniqueSorted([
30
+ ...parent.limitations,
31
+ ...dossier.limitations,
32
+ ...(flow?.limitations ?? []),
33
+ ...(api?.available ? api.limitations : []),
34
+ ]),
35
+ unknowns: uniqueSorted(unknowns),
36
+ };
37
+ };
38
+ const pseudocodePage = (body, offset, limit) => {
39
+ const start = Math.min(offset, body.length);
40
+ const high = (n) => n >= 0xd800 && n <= 0xdbff;
41
+ const low = (n) => n >= 0xdc00 && n <= 0xdfff;
42
+ if (start > 0 &&
43
+ start < body.length &&
44
+ high(body.charCodeAt(start - 1)) &&
45
+ low(body.charCodeAt(start)))
46
+ return err(viewError("Pseudocode offset splits a UTF-16 surrogate pair."));
47
+ let end = Math.min(start + limit, body.length);
48
+ if (end > start &&
49
+ end < body.length &&
50
+ high(body.charCodeAt(end - 1)) &&
51
+ low(body.charCodeAt(end)))
52
+ end--;
53
+ if (end === start && start < body.length)
54
+ return err(viewError("Increase pseudocode limit to include the next complete Unicode character."));
55
+ return ok({
56
+ item: { text: body.slice(start, end), unit: "utf16-code-units" },
57
+ coverage: pageViewCoverage(start, end - start, body.length),
58
+ });
59
+ };
60
+ const nativeRows = (dossier, facet) => {
61
+ const sourceFlow = dossier.native_value_flow;
62
+ const flow = sourceFlow?.available ? sourceFlow : undefined;
63
+ return {
64
+ assembly: dossier.assembly,
65
+ basic_blocks: dossier.basic_blocks,
66
+ comments: dossier.comments,
67
+ callers: dossier.callers,
68
+ callees: dossier.callees,
69
+ incoming_references: dossier.incoming_references,
70
+ outgoing_references: dossier.outgoing_references,
71
+ unresolved_calls: dossier.unresolved_calls,
72
+ referenced_strings: dossier.referenced_strings,
73
+ referenced_names: dossier.referenced_names,
74
+ value_flow_operations: flow?.operations,
75
+ value_flow_def_use: flow?.def_use,
76
+ value_flow_effects: flow?.effects,
77
+ value_flow_parameters: flow?.parameters,
78
+ value_flow_parameter_uses: flow?.parameter_uses,
79
+ }[facet];
80
+ };
81
+ /** Project bounded native function facets from complete retained Evidence without reanalysis. */
82
+ export const projectNativeFunctionView = (parent, dossier, view) => {
83
+ if (view.kind !== "native")
84
+ return err(viewError("analyze_function Evidence requires a native view."));
85
+ const artifact = parent.artifact;
86
+ if (!artifact)
87
+ return err(analysisViewInputError([
88
+ {
89
+ path: ["source", "subject"],
90
+ reason: "invalid_value",
91
+ message: "Native function Evidence requires an artifact-bound subject.",
92
+ },
93
+ ]));
94
+ const common = parentFields(parent, dossier, artifact);
95
+ const singleton = (item) => ({
96
+ kind: "native",
97
+ view,
98
+ item: jsonValueSchema.parse(item),
99
+ coverage: completeWithinViewCoverage(1, 1),
100
+ ...common,
101
+ });
102
+ const flow = dossier.native_value_flow;
103
+ if (view.facet === "procedure" ||
104
+ view.facet === "native_api" ||
105
+ view.facet === "value_flow_summary") {
106
+ if (view.offset !== 0)
107
+ return err(viewError("Singleton native facets require offset 0."));
108
+ if (view.facet === "procedure")
109
+ return ok(singleton(dossier.procedure));
110
+ if (view.facet === "native_api")
111
+ return ok(singleton(dossier.native_api ?? { available: false, reason: "not recorded" }));
112
+ const status = flow === null
113
+ ? { available: false, reason: "not recorded" }
114
+ : !flow.available
115
+ ? { available: false, reason: flow.reason }
116
+ : {
117
+ available: true,
118
+ provenance: flow.provenance,
119
+ truncated: flow.truncated,
120
+ omitted_operations_lower_bound: flow.omitted_operations_lower_bound,
121
+ known_omitted_inputs: flow.known_omitted_inputs,
122
+ known_omitted_edges: flow.known_omitted_edges,
123
+ operations: flow.operations.length,
124
+ def_use: flow.def_use.length,
125
+ effects: flow.effects.length,
126
+ parameters: flow.parameters.length,
127
+ parameter_uses: flow.parameter_uses.length,
128
+ };
129
+ return ok(singleton(status));
130
+ }
131
+ if (view.facet === "pseudocode") {
132
+ const page = pseudocodePage(dossier.pseudocode, view.offset, view.limit);
133
+ return page.ok
134
+ ? ok({ kind: "native", view, ...page.value, ...common })
135
+ : page;
136
+ }
137
+ const rows = nativeRows(dossier, view.facet);
138
+ if (rows === undefined)
139
+ return ok(singleton({
140
+ available: false,
141
+ // Only value-flow facets inherit the value-flow failure reason; an
142
+ // older dossier simply has no unresolved_calls record.
143
+ reason: view.facet.startsWith("value_flow_") && flow?.available === false
144
+ ? flow.reason
145
+ : "not recorded",
146
+ }));
147
+ const items = rows.slice(view.offset, view.offset + view.limit);
148
+ return ok({
149
+ kind: "native",
150
+ view,
151
+ item: jsonValueSchema.parse(items),
152
+ coverage: pageViewCoverage(view.offset, items.length, rows.length),
153
+ ...common,
154
+ });
155
+ };
@@ -6,6 +6,7 @@ import { evidenceSchema } from "../evidence.js";
6
6
  import { digestSchema } from "../digests.js";
7
7
  import { prefixedDigestSchema } from "../digests.js";
8
8
  import { bridgeCandidateCoverageSchema, projectCartesianCandidates, } from "../bridgeCandidateProjection.js";
9
+ import { nativeRuntimeConvention } from "../nativeConvention.js";
9
10
  const evidenceIdSchema = prefixedDigestSchema("ev");
10
11
  const pathSchema = z.string().min(1);
11
12
  const componentSchema = z.strictObject({
@@ -65,7 +66,7 @@ export const projectAndroidApplication = (input) => {
65
66
  const parsed = androidApplicationProjectionInputSchema.parse(input);
66
67
  const { evidence, inventory } = parseArtifactInventoryEvidence(parsed.inventory_evidence);
67
68
  if (inventory.manifest.root_format !== "apk")
68
- throw new TypeError("Android application projection requires APK Evidence");
69
+ throw new TypeError(`Android application projection requires APK inventory Evidence; the inventory root format is ${inventory.manifest.root_format}. APK is chosen for a ZIP archive whose name ends in .apk.`);
69
70
  const nodes = new Map(inventory.nodes.map((node) => [node.artifact_id, node]));
70
71
  const all = inventory.occurrences
71
72
  .filter((occurrence) => occurrence.artifact_id !== null && occurrence.logical_path !== ".")
@@ -90,6 +91,13 @@ export const projectAndroidApplication = (input) => {
90
91
  "Manifest, resource, signing, and bytecode semantics require a dedicated Android provider; this projection reports exact inventory paths and hashes only.",
91
92
  "Runtime families are inferred from inventory formats and paths; filename suffixes do not establish valid DEX or JVM class bytes.",
92
93
  "Bridge candidates are path-based hypotheses, not decoded JNI declarations or observed runtime calls.",
94
+ "A bridge basis is inferred from the native path and is repeated for every managed component.",
95
+ "ZIP inventory cannot see the APK Signing Block, so an empty signing array does not mean the APK is unsigned.",
96
+ ...(all.some(({ path }) => path === "AndroidManifest.xml")
97
+ ? []
98
+ : [
99
+ "No root AndroidManifest.xml occurrence was observed. The APK family comes from the .apk suffix of a ZIP archive, so these bytes may not be an APK.",
100
+ ]),
93
101
  ...(bridgeProjection.coverage.status === "partial"
94
102
  ? [
95
103
  `Bridge candidate pairs exceeded the projection safety budget; ${bridgeProjection.coverage.omitted_candidates} hypotheses are omitted. Component arrays still include every component from the supplied inventory pages.`,
@@ -120,32 +128,29 @@ export const projectAndroidApplication = (input) => {
120
128
  });
121
129
  };
122
130
  const classify = (all) => ({
123
- manifests: all.filter(({ path, format }) => format === "android-manifest" ||
124
- /(?:^|\/)AndroidManifest\.xml$/u.test(path)),
125
- resources: all.filter(({ path, format }) => format === "android-resources" || /(?:^|\/)resources\.arsc$/u.test(path)),
126
- dex: all.filter(({ path, format }) => format === "dex" || /(?:^|\/)[^/]+\.dex$/iu.test(path)),
127
- jvm_classes: all.filter(({ path, format }) => format === "jvm-class" || /(?:^|\/)[^/]+\.class$/iu.test(path)),
131
+ manifests: all.filter(({ path }) => /(?:^|\/)AndroidManifest\.xml$/u.test(path)),
132
+ resources: all.filter(({ path }) => /(?:^|\/)resources\.arsc$/u.test(path)),
133
+ dex: all.filter(({ path }) => /(?:^|\/)[^/]+\.dex$/iu.test(path)),
134
+ jvm_classes: all.filter(({ path }) => /(?:^|\/)[^/]+\.class$/iu.test(path)),
128
135
  native_libraries: all.filter(({ path, format }) => format === "elf" || /(?:^|\/)lib\/[^/]+\/[^/]+\.so$/iu.test(path)),
129
136
  javascript: all.filter(({ format }) => format === "javascript-bundle"),
130
137
  signing: all.filter(({ path }) => /^META-INF\/[^/]+\.(?:MF|RSA|DSA|EC|SF)$/iu.test(path)),
131
138
  });
132
139
  const runtimeFamilies = (all) => {
133
- const paths = all.map(({ path }) => path.toLowerCase());
134
140
  const families = new Set();
135
- if (all.some(({ path, format }) => format === "dex" || path.toLowerCase().endsWith(".dex")))
141
+ if (all.some(({ path }) => path.toLowerCase().endsWith(".dex")))
136
142
  families.add("dalvik-art");
137
- if (all.some(({ path, format }) => format === "jvm-class" || path.toLowerCase().endsWith(".class")))
143
+ if (all.some(({ path }) => path.toLowerCase().endsWith(".class")))
138
144
  families.add("java-kotlin");
139
145
  if (all.some(({ format }) => format === "elf"))
140
146
  families.add("native");
141
147
  if (all.some(({ format }) => format === "javascript-bundle"))
142
148
  families.add("javascript");
143
- if (paths.some((path) => path.includes("reactnative") || path.includes("hermes")))
144
- families.add("react-native");
145
- if (paths.some((path) => path.includes("libflutter.so")))
146
- families.add("flutter");
147
- if (paths.some((path) => path.includes("libunity.so")))
148
- families.add("unity");
149
+ for (const { path } of all) {
150
+ const convention = nativeRuntimeConvention(path);
151
+ if (convention !== null)
152
+ families.add(convention);
153
+ }
149
154
  return [...families].sort(compare);
150
155
  };
151
156
  const bridgeCandidates = (managed, native) => {
@@ -159,14 +164,14 @@ const bridgeCandidates = (managed, native) => {
159
164
  });
160
165
  };
161
166
  const bridgeBasis = (path) => {
162
- const lower = path.toLowerCase();
163
- if (lower.includes("react") || lower.includes("hermes"))
167
+ const convention = nativeRuntimeConvention(path);
168
+ if (convention === "react-native")
164
169
  return "react-native-convention";
165
- if (lower.includes("flutter"))
170
+ if (convention === "flutter")
166
171
  return "flutter-convention";
167
- if (lower.includes("unity"))
172
+ if (convention === "unity")
168
173
  return "unity-convention";
169
- if (/lib\/[^/]+\/lib[^/]+\.so$/u.test(lower))
174
+ if (/(?:^|\/)lib\/[^/]+\/lib[^/]+\.so$/iu.test(path))
170
175
  return "jni-library-convention";
171
176
  return "managed-and-native-content";
172
177
  };
@@ -0,0 +1,36 @@
1
+ import { z } from "zod";
2
+ import { digestSchema } from "../digests.js";
3
+ import { jsonObjectSchema, jsonValueSchema } from "../jsonValue.js";
4
+ import { localPathStringSchema } from "../localPath.js";
5
+ const operationSchema = z.enum([
6
+ "inspect_android_package",
7
+ "search_android_classes",
8
+ "inspect_android_class",
9
+ "inspect_android_method",
10
+ "trace_android_references",
11
+ ]);
12
+ /** JSON-safe Android provider facts collected before an analysis failure. */
13
+ export const androidPartialObservationSchema = z.strictObject({
14
+ provider_id: z.literal("jadx"),
15
+ operation: operationSchema,
16
+ target: z.strictObject({
17
+ selected_path: localPathStringSchema,
18
+ path: localPathStringSchema,
19
+ sha256: digestSchema,
20
+ format: z.literal("apk"),
21
+ }),
22
+ provider_facts: z.strictObject({
23
+ jar_sha256: digestSchema.nullable(),
24
+ bridge_sha256: digestSchema.nullable(),
25
+ bridge_name: z.string().min(1),
26
+ bridge_version: z.string().min(1),
27
+ server_name: z.string().nullable(),
28
+ server_version: z.string().nullable(),
29
+ engine_version: z.string().min(1).nullable(),
30
+ }),
31
+ calls: z.array(z.strictObject({
32
+ operation: z.string().min(1),
33
+ input: jsonObjectSchema,
34
+ response: jsonValueSchema,
35
+ })),
36
+ });
@@ -0,0 +1,77 @@
1
+ import { z } from "zod";
2
+ import { localPathStringSchema } from "../localPath.js";
3
+ import { digestSchema } from "../digests.js";
4
+ /** Upper bound for one decoded resource projection in one response. */
5
+ const MAX_MANIFEST_BYTES = 512 * 1024;
6
+ const MAX_STRINGS = 2_000;
7
+ /**
8
+ * Caller intent for Apktool-backed resource decoding. Apktool is
9
+ * bring-your-own: REA never installs it, and decoding happens in a
10
+ * provider-owned workspace that is removed after the facts are projected.
11
+ */
12
+ export const apktoolInputSchemas = {
13
+ inspect_apktool_client: z.strictObject({}),
14
+ decode_android_resources: z.strictObject({
15
+ path: localPathStringSchema.describe("Local APK file to decode"),
16
+ include_strings: z
17
+ .boolean()
18
+ .default(true)
19
+ .describe(`Project res/values/strings.xml entries (bounded to ${String(MAX_STRINGS)} entries)`),
20
+ locale: z
21
+ .string()
22
+ .min(2)
23
+ .max(16)
24
+ .regex(/^(?:[a-z]{2,3}(?:-(?:r?[A-Z]{2}|r?[0-9]{3}))?|b\+[a-z]{2,3}(?:\+[A-Za-z0-9]{2,8})*)$/u, "Locale must look like de, pt-BR, pt-rBR, or b+zh+Hans+CN")
25
+ .optional()
26
+ .describe("Project strings from res/values-<locale>/strings.xml instead of the default table"),
27
+ }),
28
+ };
29
+ /** Validate operation and input together so their types remain correlated. */
30
+ export const apktoolRequestSchema = z.discriminatedUnion("operation", [
31
+ z.strictObject({
32
+ operation: z.literal("inspect_apktool_client"),
33
+ input: apktoolInputSchemas.inspect_apktool_client,
34
+ }),
35
+ z.strictObject({
36
+ operation: z.literal("decode_android_resources"),
37
+ input: apktoolInputSchemas.decode_android_resources,
38
+ }),
39
+ ]);
40
+ const client = z.strictObject({
41
+ command: z.string().min(1),
42
+ command_source: z.enum(["environment", "path"]),
43
+ apktool_version: z.string().min(1).nullable(),
44
+ });
45
+ /** Portable Apktool observations with explicit coverage limitations. */
46
+ export const apktoolResultSchemas = {
47
+ inspect_apktool_client: z.strictObject({
48
+ client,
49
+ }),
50
+ decode_android_resources: z.strictObject({
51
+ client,
52
+ target: z.strictObject({
53
+ path: localPathStringSchema,
54
+ bytes: z.number().int().nonnegative(),
55
+ sha256: digestSchema,
56
+ }),
57
+ metadata: z.strictObject({
58
+ version_name: z.string().nullable(),
59
+ version_code: z
60
+ .string()
61
+ .nullable()
62
+ .describe("Version code exactly as apktool.yml prints it, e.g. '45' or '45.1'"),
63
+ min_sdk_version: z.string().nullable(),
64
+ target_sdk_version: z.string().nullable(),
65
+ package_name: z.string().nullable(),
66
+ }),
67
+ manifest: z.string().nullable(),
68
+ strings: z.array(z.strictObject({
69
+ name: z.string().min(1),
70
+ value: z.string(),
71
+ })),
72
+ locale: z.string().nullable(),
73
+ locales: z.array(z.string().min(1)),
74
+ decoded_file_count: z.number().int().nonnegative(),
75
+ coverage: z.enum(["complete", "partial"]),
76
+ }),
77
+ };