rea-agents 6.3.0 → 6.5.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 (1332) hide show
  1. package/DISCLAIMER.md +136 -0
  2. package/README.md +72 -18
  3. package/THIRD_PARTY_NOTICES.md +134 -0
  4. package/bridge/android/ReaJadxBridge.java +123 -11
  5. package/bridge/cutter/rea_bridge.py +816 -0
  6. package/bridge/ghidra/ReaGhidraAnalysisOptions.java +38 -0
  7. package/bridge/ghidra/ReaGhidraApplySeeds.java +151 -0
  8. package/bridge/ghidra/ReaGhidraBridge.java +1729 -283
  9. package/bridge/ghidra/ReaGhidraBundleActivator.java +14 -0
  10. package/bridge/ghidra/ReaGhidraMipsSoftFloat.java +176 -0
  11. package/bridge/ghidra/ReaGhidraNoReturnFix.java +123 -0
  12. package/bridge/ghidra/ReaGhidraPrepareRaw.java +49 -0
  13. package/bridge/hopper_bridge.py +103 -69
  14. package/bridge/mitmproxy/capture.py +189 -13
  15. package/bridge/native/rea_lldb_tracer.py +40 -6
  16. package/bridge/process/ProcessRunTokenReader.swift +76 -34
  17. package/bridge/pwntools/layout_impl.py +5 -0
  18. package/bridge/pwntools/recorded_crash_impl.py +31 -10
  19. package/dist/adb/AdbConfiguration.js +100 -0
  20. package/dist/adb/AdbDeviceOutput.js +208 -0
  21. package/dist/adb/AdbDirectoryListing.js +80 -0
  22. package/dist/adb/AdbHostFileName.js +34 -0
  23. package/dist/adb/AdbProvider.js +1433 -0
  24. package/dist/adb/AdbShellOutput.js +307 -0
  25. package/dist/android/AndroidTargetSnapshot.js +104 -22
  26. package/dist/android/JadxAnalysis.js +32 -7
  27. package/dist/android/JadxConfiguration.js +163 -53
  28. package/dist/android/JadxDoctor.js +115 -0
  29. package/dist/android/JadxMcpTransport.js +5 -3
  30. package/dist/android/JadxProtocol.js +14 -0
  31. package/dist/android/JadxProvider.js +63 -25
  32. package/dist/android/JadxRelease.js +12 -1
  33. package/dist/android/JadxWorkspaceRoot.js +157 -0
  34. package/dist/apktool/ApktoolConfiguration.js +227 -0
  35. package/dist/apktool/ApktoolDecodeOutput.js +142 -0
  36. package/dist/apktool/ApktoolProvider.js +543 -0
  37. package/dist/application/AnalysisContextQueries.js +5 -8
  38. package/dist/application/AnalysisProvider.js +24 -14
  39. package/dist/application/AppBundleExecutable.js +30 -25
  40. package/dist/application/BinaryTargetResolver.js +210 -33
  41. package/dist/application/BrowserEvidence.js +1 -1
  42. package/dist/application/BrowserObservationService.js +13 -2
  43. package/dist/application/BrowserScenarioCaptureService.js +0 -1
  44. package/dist/application/CallPathTracing.js +52 -13
  45. package/dist/application/CapabilityInventory.js +179 -29
  46. package/dist/application/ClaudeDesktopConfigLocation.js +152 -0
  47. package/dist/application/ClientConfigurationDocument.js +154 -7
  48. package/dist/application/ClientConfigurationFiles.js +128 -0
  49. package/dist/application/ClientRegistrationEnvironment.js +41 -0
  50. package/dist/application/ClientRegistrationIdentity.js +94 -29
  51. package/dist/application/ClientRegistrationStatus.js +223 -67
  52. package/dist/application/DirectAnalysis.js +86 -31
  53. package/dist/application/DirectAnalysisCleanup.js +1 -1
  54. package/dist/application/DirectAnalysisStatus.js +14 -2
  55. package/dist/application/Doctor.js +117 -34
  56. package/dist/application/DoctorDiagnostics.js +34 -12
  57. package/dist/application/DoctorProviderIds.js +2 -0
  58. package/dist/application/DoctorScope.js +11 -2
  59. package/dist/application/DshCordisPatch.js +355 -0
  60. package/dist/application/DshCordisYaml.js +155 -0
  61. package/dist/application/EnhancedLiteralTracing.js +30 -16
  62. package/dist/application/EnhancedToolTypes.js +0 -1
  63. package/dist/application/EnhancedTools.js +164 -54
  64. package/dist/application/EvidenceBundleCommands.js +36 -19
  65. package/dist/application/EvidenceBundleFiles.js +29 -7
  66. package/dist/application/FunctionAnalysisEvidence.js +3 -0
  67. package/dist/application/GeminiClientSettings.js +151 -0
  68. package/dist/application/HermesClientHome.js +115 -0
  69. package/dist/application/HermesConfigurationYaml.js +272 -0
  70. package/dist/application/HopperDownload.js +39 -0
  71. package/dist/application/InventoryProjectionEvidence.js +0 -1
  72. package/dist/application/InvestigationProviders.js +19 -3
  73. package/dist/application/JsonFiles.js +114 -23
  74. package/dist/application/JsonInputFile.js +410 -0
  75. package/dist/application/LinuxHopper.js +130 -60
  76. package/dist/application/MacHopper.js +177 -150
  77. package/dist/application/MacHopperPaths.js +40 -0
  78. package/dist/application/MipsElfMetadata.js +201 -0
  79. package/dist/application/MipsElfSharedLoad.js +164 -0
  80. package/dist/application/MipsGnuAttributes.js +90 -0
  81. package/dist/application/MsixPackageStorage.js +133 -0
  82. package/dist/application/ProgressReporter.js +1 -1
  83. package/dist/application/ProviderOperationExecution.js +39 -0
  84. package/dist/application/ReconstructionCoverageService.js +0 -1
  85. package/dist/application/ReconstructionObligationCandidates.js +12 -5
  86. package/dist/application/ReconstructionObligationLedgerDiagnostics.js +2 -2
  87. package/dist/application/ReconstructionObligationLedgerEvaluation.js +15 -33
  88. package/dist/application/ReconstructionObligationLedgerProjection.js +3 -72
  89. package/dist/application/ReconstructionObligationLedgerService.js +3 -1
  90. package/dist/application/ReconstructionObligationOriginalCases.js +2 -1
  91. package/dist/application/ReferenceSourceImport.js +94 -31
  92. package/dist/application/ReferenceSourceImportEntries.js +40 -30
  93. package/dist/application/ReferenceSourceImportPolicy.js +99 -23
  94. package/dist/application/ReferenceSourceImportTypes.js +30 -23
  95. package/dist/application/ReferenceSourceVcsAdapter.js +163 -31
  96. package/dist/application/RegularFileRead.js +121 -7
  97. package/dist/application/Setup.js +88 -14
  98. package/dist/application/SetupClientConfiguration.js +307 -38
  99. package/dist/application/SetupClients.js +12 -6
  100. package/dist/application/SetupHost.js +158 -38
  101. package/dist/application/SetupInstallFailure.js +42 -2
  102. package/dist/application/SetupPlan.js +83 -57
  103. package/dist/application/SetupRecoveryBackup.js +66 -0
  104. package/dist/application/SetupRegistrationEnvironment.js +2 -1
  105. package/dist/application/SetupSkill.js +354 -88
  106. package/dist/application/SupportedClients.js +429 -70
  107. package/dist/application/TypeScriptEmittedSourceCandidates.js +26 -0
  108. package/dist/application/Uninstall.js +412 -73
  109. package/dist/application/UninstallFailure.js +14 -0
  110. package/dist/application/Update.js +54 -25
  111. package/dist/application/UpdateFailure.js +17 -0
  112. package/dist/application/UpdateMaintenance.js +25 -47
  113. package/dist/application/UpdateRuntime.js +141 -27
  114. package/dist/application/Utf8JsonInput.js +7 -0
  115. package/dist/application/WebModuleTraceService.js +7 -0
  116. package/dist/application/WebNetworkCaptureService.js +16 -7
  117. package/dist/application/WebScriptExportService.js +131 -65
  118. package/dist/application/WebSourceLocationService.js +22 -3
  119. package/dist/application/WindowsCapabilities.js +18 -15
  120. package/dist/application/WorkflowEvidence.js +24 -1
  121. package/dist/application/adb/AdbDeviceAnalysisPort.js +1 -0
  122. package/dist/application/adb/AdbDeviceAnalysisService.js +13 -0
  123. package/dist/application/analysisView/AnalysisViewService.js +122 -6
  124. package/dist/application/android/AndroidPackageInspection.js +25 -0
  125. package/dist/application/android/AndroidSearchEvidenceSummary.js +100 -0
  126. package/dist/application/apktool/ApktoolResourceAnalysisPort.js +1 -0
  127. package/dist/application/apktool/ApktoolResourceAnalysisService.js +13 -0
  128. package/dist/application/binary/AnalysisClientCleanup.js +0 -24
  129. package/dist/application/binary/AnalysisProviderEvaluation.js +1 -1
  130. package/dist/application/binary/AnalysisProviderRegistry.js +36 -21
  131. package/dist/application/binary/AnalysisSnapshotCache.js +41 -20
  132. package/dist/application/binary/AnalysisSnapshotFiles.js +75 -9
  133. package/dist/application/binary/BinarySession.js +250 -97
  134. package/dist/application/binary/BinarySessionExecution.js +5 -4
  135. package/dist/application/binary/BinarySessionOpen.js +13 -6
  136. package/dist/application/binary/BinarySessionRecords.js +33 -7
  137. package/dist/application/binary/BinarySessionStatus.js +93 -23
  138. package/dist/application/binary/BinaryTargetSummary.js +9 -0
  139. package/dist/application/binary/CompositeProvider.js +71 -28
  140. package/dist/application/binary/LazyAnalysisProvider.js +3 -1
  141. package/dist/application/binary/SessionProviderRouter.js +5 -2
  142. package/dist/application/binaryDiagnostics/BinaryLayoutService.js +13 -2
  143. package/dist/application/binaryDiagnostics/PeResourcesPort.js +1 -0
  144. package/dist/application/binaryDiagnostics/PeResourcesService.js +114 -0
  145. package/dist/application/binaryDiagnostics/RecordedCrashService.js +16 -4
  146. package/dist/application/captures/PacketCaptureService.js +83 -0
  147. package/dist/application/closeOwnedWebResources.js +7 -0
  148. package/dist/application/electron/ElectronFusePort.js +1 -0
  149. package/dist/application/electron/ElectronFuseService.js +80 -0
  150. package/dist/application/evm/EvmInterfaceService.js +4 -0
  151. package/dist/application/firmware/FirmwareAnalysisService.js +3 -0
  152. package/dist/application/flutter/DartAotInspection.js +26 -0
  153. package/dist/application/flutter/FlutterBuildAnalysisPort.js +1 -0
  154. package/dist/application/flutter/FlutterBuildAnalysisService.js +13 -0
  155. package/dist/application/frida/FridaInstrumentationPort.js +8 -0
  156. package/dist/application/frida/FridaInstrumentationService.js +310 -0
  157. package/dist/application/frida/fridaInputErrors.js +17 -0
  158. package/dist/application/go/GoBinaryPort.js +1 -0
  159. package/dist/application/go/GoBinaryService.js +80 -0
  160. package/dist/application/harmony/HarmonyApplicationService.js +17 -0
  161. package/dist/application/investigation/EvidenceLedger.js +40 -14
  162. package/dist/application/investigation/InspectEvidenceBundle.js +18 -0
  163. package/dist/application/investigation/InvestigationRecords.js +12 -21
  164. package/dist/application/investigation/UnknownEvidence.js +22 -18
  165. package/dist/application/javascript/ElectronActiveObservationService.js +55 -25
  166. package/dist/application/javascript/ElectronBoundaryAnalysis.js +17 -3
  167. package/dist/application/javascript/ElectronBoundaryGraph.js +2 -0
  168. package/dist/application/javascript/ElectronBoundaryGraphCallPaths.js +144 -0
  169. package/dist/application/javascript/ElectronBoundaryGraphContext.js +3 -2
  170. package/dist/application/javascript/ElectronBoundaryGraphIpc.js +28 -9
  171. package/dist/application/javascript/ElectronBoundaryGraphNative.js +20 -7
  172. package/dist/application/javascript/ElectronBoundaryGraphWindows.js +50 -12
  173. package/dist/application/javascript/ElectronObservationService.js +0 -1
  174. package/dist/application/javascript/JavaScriptApplicationEvidence.js +15 -0
  175. package/dist/application/javascript/JavaScriptApplicationService.js +44 -18
  176. package/dist/application/javascript/JavaScriptApplicationWorkflowEvidence.js +5 -6
  177. package/dist/application/javascript/JavaScriptApplicationWorkflowService.js +0 -1
  178. package/dist/application/javascript/JavaScriptArtifactAnalysis.js +253 -60
  179. package/dist/application/javascript/JavaScriptArtifactGraphAccumulator.js +51 -23
  180. package/dist/application/javascript/JavaScriptArtifactGraphBuilder.js +93 -21
  181. package/dist/application/javascript/JavaScriptArtifactGraphBundlers.js +4 -3
  182. package/dist/application/javascript/JavaScriptArtifactGraphContext.js +35 -8
  183. package/dist/application/javascript/JavaScriptArtifactGraphDocuments.js +25 -14
  184. package/dist/application/javascript/JavaScriptArtifactGraphFindings.js +163 -54
  185. package/dist/application/javascript/JavaScriptArtifactGraphStructure.js +246 -15
  186. package/dist/application/javascript/JavaScriptArtifactPathResolution.js +1057 -323
  187. package/dist/application/javascript/JavaScriptArtifactReconstruction.js +134 -32
  188. package/dist/application/javascript/JavaScriptArtifactReconstructionInput.js +6 -1
  189. package/dist/application/javascript/JavaScriptModuleRelationships.js +39 -15
  190. package/dist/application/javascript/JavaScriptRecoveryService.js +32 -9
  191. package/dist/application/javascript/JavaScriptRuntimeObservationService.js +2 -1
  192. package/dist/application/javascript/JavaScriptRuntimeReconciliationService.js +0 -1
  193. package/dist/application/javascript/JavaScriptSemanticGraphAsyncProjection.js +9 -3
  194. package/dist/application/javascript/JavaScriptSemanticGraphBuilder.js +228 -74
  195. package/dist/application/javascript/JavaScriptSemanticGraphConstruction.js +12 -19
  196. package/dist/application/javascript/JavaScriptSemanticGraphDataProjection.js +4 -1
  197. package/dist/application/javascript/JavaScriptSemanticGraphElectronProjection.js +67 -0
  198. package/dist/application/javascript/JavaScriptSemanticGraphFlowProjection.js +5 -3
  199. package/dist/application/javascript/JavaScriptSemanticGraphObjectProjection.js +5 -3
  200. package/dist/application/javascript/JavaScriptSemanticGraphValueProjection.js +19 -8
  201. package/dist/application/javascript/JavaScriptSemanticTraceService.js +0 -1
  202. package/dist/application/jeb/JebAnalysisPort.js +1 -0
  203. package/dist/application/jeb/JebAnalysisService.js +13 -0
  204. package/dist/application/managed/ManagedApplicationGraphService.js +1 -2
  205. package/dist/application/managed/ManagedMemberComparisonService.js +72 -54
  206. package/dist/application/managed/ManagedNativeVerificationService.js +0 -1
  207. package/dist/application/managed/ManagedReconstructionService.js +0 -1
  208. package/dist/application/native/NativeCallRoutes.js +54 -34
  209. package/dist/application/native/NativeDispatchMetadataInspection.js +6 -2
  210. package/dist/application/native/NativeUiActionTrace.js +51 -30
  211. package/dist/application/native/NativeValueTrace.js +75 -24
  212. package/dist/application/pcap/PcapAnalysisPort.js +1 -0
  213. package/dist/application/pcap/PcapAnalysisService.js +24 -0
  214. package/dist/application/process/ProcessCli.js +57 -32
  215. package/dist/application/reverse/ReverseEngineeringCommandPort.js +1 -0
  216. package/dist/application/reverse/ReverseEngineeringService.js +688 -0
  217. package/dist/application/rust/RustBinaryPort.js +1 -0
  218. package/dist/application/rust/RustBinaryService.js +80 -0
  219. package/dist/application/signals/SignalRecordingService.js +83 -0
  220. package/dist/application/sqlite/SqliteDatabaseCapability.js +30 -0
  221. package/dist/application/sqlite/SqliteDatabasePort.js +1 -0
  222. package/dist/application/sqlite/SqliteDatabaseService.js +76 -0
  223. package/dist/application/wasm/WasmArtifactPort.js +1 -0
  224. package/dist/application/wasm/WasmArtifactService.js +77 -0
  225. package/dist/application/wasm/WasmInterfaceComparisonService.js +188 -0
  226. package/dist/artifacts/ArtifactHash.js +13 -2
  227. package/dist/artifacts/ArtifactPaths.js +133 -15
  228. package/dist/artifacts/ArtifactProvider.js +28 -19
  229. package/dist/artifacts/ArtifactReader.js +35 -0
  230. package/dist/artifacts/ArtifactResourceScope.js +109 -0
  231. package/dist/artifacts/AsarArtifactReader.js +295 -156
  232. package/dist/artifacts/AsarHeader.js +24 -0
  233. package/dist/artifacts/AsarListing.js +78 -0
  234. package/dist/artifacts/DirectoryArtifactReader.js +247 -74
  235. package/dist/artifacts/MachOSliceArtifactReader.js +198 -48
  236. package/dist/artifacts/NativeDmgArtifactReader.js +188 -78
  237. package/dist/artifacts/OrderedReads.js +57 -0
  238. package/dist/artifacts/SafeOutputTree.js +261 -71
  239. package/dist/artifacts/SafeOutputTreeCleanup.js +45 -0
  240. package/dist/artifacts/SafeOutputTreeCreationFailure.js +20 -0
  241. package/dist/artifacts/SafeOutputTreeIdentity.js +42 -0
  242. package/dist/artifacts/SafeOutputTreeReadback.js +33 -0
  243. package/dist/artifacts/ZipArtifactReader.js +186 -31
  244. package/dist/artifacts/apple/AppleAssetCatalogAnalysis.js +77 -68
  245. package/dist/artifacts/apple/DylibResolutionReader.js +11 -5
  246. package/dist/artifacts/apple/InterfaceBuilderAnalysis.js +114 -38
  247. package/dist/artifacts/apple/InterfaceBuilderDecodeBudget.js +125 -35
  248. package/dist/artifacts/apple/KeyedArchiveReader.js +35 -15
  249. package/dist/artifacts/apple/MachoLoadCommandReader.js +62 -61
  250. package/dist/artifacts/apple/NibArchive.js +11 -4
  251. package/dist/artifacts/apple/PlistNumberLiterals.js +2 -2
  252. package/dist/artifacts/extraction/ArtifactExtraction.js +115 -92
  253. package/dist/artifacts/hostExecutableMarking.js +16 -0
  254. package/dist/artifacts/inventory/ArtifactGraphConstruction.js +236 -69
  255. package/dist/artifacts/inventory/ArtifactInventory.js +7 -6
  256. package/dist/artifacts/inventory/classify.js +95 -35
  257. package/dist/artifacts/inventory/hashStableRootArtifact.js +48 -15
  258. package/dist/artifacts/inventory/reader.js +40 -17
  259. package/dist/artifacts/inventory/scanCanonical.js +84 -40
  260. package/dist/artifacts/inventory/scanReader.js +72 -19
  261. package/dist/artifacts/javascript/JavaScriptArtifactFiles.js +177 -15
  262. package/dist/artifacts/javascript/JavaScriptSourceAnalysis.js +3 -0
  263. package/dist/artifacts/readStableArtifact.js +28 -4
  264. package/dist/browser/BrowserProcessStartup.js +20 -9
  265. package/dist/browser/BrowserScenarioPartialObservation.js +60 -38
  266. package/dist/browser/BrowserScenarioSecrets.js +193 -48
  267. package/dist/browser/CdpBrowserProvider.js +74 -98
  268. package/dist/browser/CdpCaptureDocuments.js +261 -65
  269. package/dist/browser/CdpCaptureDomSvg.js +243 -0
  270. package/dist/browser/CdpCaptureEventBodyShapes.js +12 -12
  271. package/dist/browser/CdpCaptureEventHandlers.js +49 -21
  272. package/dist/browser/CdpCaptureEvents.js +53 -19
  273. package/dist/browser/CdpCaptureStorage.js +22 -5
  274. package/dist/browser/CdpCaptureStorageFingerprints.js +54 -11
  275. package/dist/browser/CdpCaptureValues.js +0 -1
  276. package/dist/browser/CdpConnection.js +25 -9
  277. package/dist/browser/CdpElectronInspection.js +14 -4
  278. package/dist/browser/CdpElectronProvider.js +7 -2
  279. package/dist/browser/CdpElectronScripts.js +2 -1
  280. package/dist/browser/CdpElectronWorkers.js +7 -2
  281. package/dist/browser/CdpEndpoint.js +143 -17
  282. package/dist/browser/CdpObservationSession.js +24 -8
  283. package/dist/browser/CdpPageCapture.js +67 -17
  284. package/dist/browser/CdpPageCaptureScripts.js +4 -3
  285. package/dist/browser/CdpPageCaptureWorkers.js +5 -1
  286. package/dist/browser/CdpSafeMetadata.js +9 -5
  287. package/dist/browser/CdpScreenshot.js +5 -14
  288. package/dist/browser/CdpSnapshotStrings.js +21 -0
  289. package/dist/browser/CdpTargetSession.js +59 -36
  290. package/dist/browser/CdpWebMcpDiscovery.js +55 -16
  291. package/dist/browser/ElectronFileScope.js +99 -9
  292. package/dist/browser/PlaywrightBrowserScenarioProvider.js +64 -8
  293. package/dist/browser/PlaywrightElectronActiveActions.js +4 -4
  294. package/dist/browser/PlaywrightElectronActiveProjection.js +16 -4
  295. package/dist/browser/PlaywrightElectronActiveProvider.js +114 -36
  296. package/dist/browser/PlaywrightExecutionBoundary.js +2 -2
  297. package/dist/browser/PlaywrightScenarioArtifacts.js +5 -5
  298. package/dist/browser/PlaywrightScenarioBrowser.js +78 -13
  299. package/dist/browser/PlaywrightScenarioEvents.js +198 -36
  300. package/dist/browser/PlaywrightScenarioServiceWorkers.js +249 -0
  301. package/dist/browser/PlaywrightScenarioSession.js +180 -75
  302. package/dist/browser/PlaywrightScenarioStorage.js +507 -0
  303. package/dist/browser/PngVisualDiff.js +198 -29
  304. package/dist/browser/WebSourceMapFetcher.js +164 -81
  305. package/dist/browser/assets/LocalWebScriptArtifacts.js +27 -4
  306. package/dist/browser/assets/PublishWebScripts.js +88 -22
  307. package/dist/browser/assets/ScenarioScriptCapture.js +2 -1
  308. package/dist/browser/assets/WebArtifactReads.js +34 -4
  309. package/dist/browser/assets/WebSourceLocationArtifacts.js +39 -3
  310. package/dist/browser/execution/CdpExecutionCapture.js +3 -3
  311. package/dist/browser/execution/CdpPreciseCoverage.js +5 -8
  312. package/dist/browser/history/CaptureFailures.js +22 -8
  313. package/dist/browser/history/CaptureFormatError.js +2 -2
  314. package/dist/browser/history/{HarJson.js → CaptureJson.js} +14 -4
  315. package/dist/browser/history/CaptureRedaction.js +16 -3
  316. package/dist/browser/history/CaptureRelease.js +20 -2
  317. package/dist/browser/history/HarCapture.js +16 -9
  318. package/dist/browser/history/HarSchema.js +36 -36
  319. package/dist/browser/history/HistoricalCaptureDecoder.js +93 -25
  320. package/dist/browser/history/MitmproxyCaptureAdapter.js +3 -1
  321. package/dist/browser/history/NodeCaptureAdapter.js +48 -0
  322. package/dist/browser/history/{HarCaptureProcess.js → NodeCaptureProcess.js} +16 -15
  323. package/dist/browser/history/QlogCapture.js +385 -0
  324. package/dist/browser/history/SazCapture.js +130 -0
  325. package/dist/browser/history/SazHttp.js +61 -0
  326. package/dist/browser/history/SazMetadata.js +92 -0
  327. package/dist/browser/history/SazProjection.js +90 -0
  328. package/dist/browser/modules/NativeModuleResolver.js +177 -110
  329. package/dist/browser/modules/WebModuleArtifacts.js +41 -3
  330. package/dist/browser/network/PlaywrightNetworkContent.js +40 -5
  331. package/dist/browser/network/PlaywrightScenarioNetwork.js +125 -11
  332. package/dist/captures/TsharkCaptureProvider.js +370 -0
  333. package/dist/captures/parseFieldDiscovery.js +66 -0
  334. package/dist/captures/parsePacketOutput.js +21 -0
  335. package/dist/catalogIdentity.js +46 -35
  336. package/dist/cli/adbCommands.js +337 -0
  337. package/dist/cli/analysisViewCommands.js +39 -1
  338. package/dist/cli/androidCommands.js +11 -2
  339. package/dist/cli/apktoolCommands.js +52 -0
  340. package/dist/cli/applicationCommands.js +44 -17
  341. package/dist/cli/artifactCommands.js +9 -12
  342. package/dist/cli/binaryDiagnosticsCommands.js +27 -5
  343. package/dist/cli/browserAdvancedCommands.js +97 -55
  344. package/dist/cli/browserCommands.js +46 -29
  345. package/dist/cli/captureCommands.js +72 -0
  346. package/dist/cli/cliResultOutput.js +188 -0
  347. package/dist/cli/coreBinaryCommands.js +73 -32
  348. package/dist/cli/coreNativeCommands.js +54 -45
  349. package/dist/cli/cutterCommands.js +50 -0
  350. package/dist/cli/electronCommands.js +51 -4
  351. package/dist/cli/evmCommands.js +16 -8
  352. package/dist/cli/finishAnalysisCommand.js +44 -0
  353. package/dist/cli/firmwareCommands.js +21 -38
  354. package/dist/cli/flutterCommands.js +69 -0
  355. package/dist/cli/fridaCommands.js +211 -0
  356. package/dist/cli/goCommands.js +20 -0
  357. package/dist/cli/interactiveSetup.js +11 -1
  358. package/dist/cli/javascriptApplicationAnalysis.js +18 -2
  359. package/dist/cli/javascriptRecoveryCommands.js +29 -15
  360. package/dist/cli/jebCommands.js +99 -0
  361. package/dist/cli/jsonOutput.js +13 -6
  362. package/dist/cli/managedCommands.js +31 -3
  363. package/dist/cli/options.js +20 -2
  364. package/dist/cli/pcapCommands.js +47 -0
  365. package/dist/cli/processCommands.js +1 -1
  366. package/dist/cli/referenceSourceImportStatus.js +7 -0
  367. package/dist/cli/reverseEngineeringCommands.js +268 -0
  368. package/dist/cli/rustCommands.js +21 -0
  369. package/dist/cli/setupCommands.js +55 -15
  370. package/dist/cli/signalCommands.js +72 -0
  371. package/dist/cli/sqliteCommands.js +79 -0
  372. package/dist/cli/utilityCommands.js +179 -89
  373. package/dist/cli/wasmCommands.js +61 -0
  374. package/dist/cli/webModuleCommands.js +36 -32
  375. package/dist/cli/webNetworkCaptureCommands.js +8 -8
  376. package/dist/cli/webScriptCommands.js +20 -1
  377. package/dist/cli/webSourceLocationCommands.js +21 -9
  378. package/dist/cli-runtime/AbortablePromise-BVBemxbD.js +123 -0
  379. package/dist/cli-runtime/AnalysisProvider-D0Us2OTk.js +27 -0
  380. package/dist/cli-runtime/AnalysisSnapshotCache-BXS0wRd2.js +710 -0
  381. package/dist/cli-runtime/ArtifactReader-BXkffc1D.js +55 -0
  382. package/dist/cli-runtime/ArtifactResourceScope-DQWTcUwE.js +114 -0
  383. package/dist/cli-runtime/AsarHeader-CnzOzYEH.js +31 -0
  384. package/dist/cli-runtime/BinarySessionStatus-DnMxMk-r.js +211 -0
  385. package/dist/cli-runtime/BinaryTargetResolver-CVIJ_s1A.js +1308 -0
  386. package/dist/cli-runtime/BoundedFileBytes-BU30odTm.js +39 -0
  387. package/dist/cli-runtime/CdpTargetSession-DGX5pV9w.js +650 -0
  388. package/dist/cli-runtime/ClientConfigPath-c6jr6INc.js +36 -0
  389. package/dist/cli-runtime/ClientConfigurationDocument-ffQ9X0Se.js +1957 -0
  390. package/dist/cli-runtime/ClientRegistrationStatus-DszCyPEU.js +509 -0
  391. package/dist/cli-runtime/CurrentEntrypointPath-D5FRNdkq.js +14 -0
  392. package/dist/cli-runtime/DirectAnalysis-BgvAtpN3.js +528 -0
  393. package/dist/cli-runtime/Doctor-DIpf_I7N.js +588 -0
  394. package/dist/cli-runtime/ElectronFileScope-dpHm2nrS.js +1054 -0
  395. package/dist/cli-runtime/ExecFileOutput-BEQs-lDD.js +117 -0
  396. package/dist/cli-runtime/IdaConfiguration-CtGP7EKo.js +1094 -0
  397. package/dist/cli-runtime/InterfaceBuilderDecodeBudget-D4omRUe4.js +279 -0
  398. package/dist/cli-runtime/InventoryProjectionEvidence-DIsI4DJ6.js +49 -0
  399. package/dist/cli-runtime/InvestigationProviders-DoQRIHii.js +117 -0
  400. package/dist/cli-runtime/JavaScriptApplicationEvidenceGraph-D5aI_FSJ.js +160 -0
  401. package/dist/cli-runtime/JavaScriptApplicationWorkflowEvidence-Bz4-V0Ct.js +75 -0
  402. package/dist/cli-runtime/JavaScriptWorkerMemoryLimit-B1bwMM1a.js +86 -0
  403. package/dist/cli-runtime/JebMcpEndpoint-DUytrn5G.js +428 -0
  404. package/dist/cli-runtime/JsonFiles-DQa1PRKy.js +708 -0
  405. package/dist/cli-runtime/MacCodeSignature-MgYbRK_H.js +24 -0
  406. package/dist/cli-runtime/MacHopperPaths-CwL5lYPX.js +434 -0
  407. package/dist/cli-runtime/MachoLoadCommandReader-C7e074Ze.js +510 -0
  408. package/dist/cli-runtime/ManagedSnapshot-rqyBHcdL.js +4185 -0
  409. package/dist/cli-runtime/OwnedCommand-Cj9GhmPR.js +112 -0
  410. package/dist/cli-runtime/PrivateRuntimeRoot-DAy0PiBM.js +263 -0
  411. package/dist/cli-runtime/ProcessOwnership-DXC5-UWt.js +1378 -0
  412. package/dist/cli-runtime/ProviderDeadline-8m2pFRDc.js +122 -0
  413. package/dist/cli-runtime/RegularFile-B_6KPCNQ.js +139 -0
  414. package/dist/cli-runtime/RegularFileRead-DVlC5faM.js +125 -0
  415. package/dist/cli-runtime/SafeOutputTree-D6U15GXd.js +524 -0
  416. package/dist/cli-runtime/SetupHost-FkYWswsq.js +1098 -0
  417. package/dist/cli-runtime/SupportedClients-DaX6Lt2d.js +1049 -0
  418. package/dist/cli-runtime/UninstallFailure-1blyKXHE.js +22 -0
  419. package/dist/cli-runtime/Update-CbTC_eg1.js +143 -0
  420. package/dist/cli-runtime/UpdateFailure-BcFNxEZZ.js +24 -0
  421. package/dist/cli-runtime/ZipArtifactReader-B8ZgNe4D.js +248 -0
  422. package/dist/cli-runtime/analysisErrorCleanup-Do6YeeoD.js +32 -0
  423. package/dist/cli-runtime/analysisErrorPresentation-DGt7TdsH.js +497 -0
  424. package/dist/cli-runtime/appleArchiveFormat-tVoI2ykA.js +263 -0
  425. package/dist/cli-runtime/application__DirectAnalysisStatus-DpOejOf0.js +150 -0
  426. package/dist/cli-runtime/application__EnhancedTools-oFE2bOjs.js +1787 -0
  427. package/dist/cli-runtime/application__FunctionAnalysisEvidence-B6osuhvW.js +41 -0
  428. package/dist/cli-runtime/application__ReconstructionCoverageService-DN3wTFQj.js +32 -0
  429. package/dist/cli-runtime/application__ReconstructionObligationLedgerService-CKcTppX9.js +815 -0
  430. package/dist/cli-runtime/application__Setup-XpMaRNjy.js +514 -0
  431. package/dist/cli-runtime/application__Uninstall-_23pU2yB.js +427 -0
  432. package/dist/cli-runtime/application__UpdateRuntime-DPvY8ohd.js +345 -0
  433. package/dist/cli-runtime/application__android__AndroidApplicationService-CFgIFPM4.js +31 -0
  434. package/dist/cli-runtime/application__apple__AppleApplicationService-Db6QCsun.js +31 -0
  435. package/dist/cli-runtime/application__harmony__HarmonyApplicationService-CFjocHoK.js +31 -0
  436. package/dist/cli-runtime/application__javascript__ElectronActiveObservationService-CmVDUI_Z.js +118 -0
  437. package/dist/cli-runtime/application__javascript__ElectronObservationService-DEsR8KDN.js +63 -0
  438. package/dist/cli-runtime/application__javascript__JavaScriptApplicationService-CCkp8KBh.js +11450 -0
  439. package/dist/cli-runtime/application__javascript__JavaScriptApplicationWorkflowService-lPy0tzr3.js +2329 -0
  440. package/dist/cli-runtime/application__javascript__JavaScriptRuntimeReconciliationService-DWleA8K9.js +88 -0
  441. package/dist/cli-runtime/application__javascript__JavaScriptSemanticTraceService-DkALH4rL.js +299 -0
  442. package/dist/cli-runtime/artifactOperationError-B7n03FbD.js +27 -0
  443. package/dist/cli-runtime/artifacts__ArtifactProvider-zXI0QjSL.js +2187 -0
  444. package/dist/cli-runtime/binary-BVOr2mgE.js +14206 -0
  445. package/dist/cli-runtime/browserObservationError-Dx6xRTjb.js +40 -0
  446. package/dist/cli-runtime/catalogIdentity-DLoXgfIR.js +933 -0
  447. package/dist/cli-runtime/cli.js +41848 -0
  448. package/dist/cli-runtime/cliOutput-BC1BdAcB.js +122 -0
  449. package/dist/cli-runtime/cliOutput.js +5 -0
  450. package/dist/cli-runtime/cliResultOutput-DsRMI8CJ.js +780 -0
  451. package/dist/cli-runtime/cliResultOutput.js +5 -0
  452. package/dist/cli-runtime/composition__browserScenario-DHXC1a8n.js +2927 -0
  453. package/dist/cli-runtime/composition__electronObservation-GecK2EID.js +555 -0
  454. package/dist/cli-runtime/composition__electronScenario-CEZnVrAL.js +653 -0
  455. package/dist/cli-runtime/cutterToolContracts-TZH9EHr5.js +5134 -0
  456. package/dist/cli-runtime/doctorRuntime-BE5ZX8it.js +258 -0
  457. package/dist/cli-runtime/dotnet__ManagedStaticProvider-C8_yZCDc.js +5 -0
  458. package/dist/cli-runtime/errorSchemas-CTRmvMl3.js +601 -0
  459. package/dist/cli-runtime/javascriptApplicationAnalysis-HgMzVMQw.js +2068 -0
  460. package/dist/cli-runtime/javascriptExportReturnShapeProjection-Dg00g35t.js +78 -0
  461. package/dist/cli-runtime/javascriptExportShapeComparisonSchemas-BYnoIqIk.js +1242 -0
  462. package/dist/cli-runtime/javascriptRuntimeReconciliation-DNjDoL3S.js +1507 -0
  463. package/dist/cli-runtime/javascriptRuntimeReconciliationSchemas-BWpGWNcI.js +247 -0
  464. package/dist/cli-runtime/javascriptSemanticTraceSchemas-BTCNcvbc.js +126 -0
  465. package/dist/cli-runtime/lipo-DSWP6fv-.js +396 -0
  466. package/dist/cli-runtime/logger-CQQCI4a2.js +48 -0
  467. package/dist/cli-runtime/machoContainer-C8BIkkq3.js +172 -0
  468. package/dist/cli-runtime/managedApplicationGraph-B08jb3jq.js +1130 -0
  469. package/dist/cli-runtime/managedToolContracts-D60QmIYj.js +99 -0
  470. package/dist/cli-runtime/mcpDoctor.js +359 -0
  471. package/dist/cli-runtime/mcpStartupPolicy-CVVSOmRc.js +21 -0
  472. package/dist/cli-runtime/native__NativeMacOSProvider-YBTvUeJO.js +4875 -0
  473. package/dist/cli-runtime/officialToolContracts-CCFF0an9.js +1501 -0
  474. package/dist/cli-runtime/propertyListKeys-G8e74YWb.js +248 -0
  475. package/dist/cli-runtime/providerAdapterError-DAjhICdr.js +25 -0
  476. package/dist/cli-runtime/providerCleanupError-Ceq8f0wK.js +27 -0
  477. package/dist/cli-runtime/providerIdentities-Ao1XTvwx.js +31 -0
  478. package/dist/cli-runtime/providerStartupTimeout-B2tF2LtZ.js +17 -0
  479. package/dist/cli-runtime/readFileHandleChunks-dp60iZ6v.js +38 -0
  480. package/dist/cli-runtime/reconstructionObligationLedgerSchemas-Bao0xMr-.js +19478 -0
  481. package/dist/cli-runtime/rolldown-runtime-DXoylpqc.js +121 -0
  482. package/dist/cli-runtime/runtimeVersion-CMGd0bDu.js +23 -0
  483. package/dist/cli-runtime/safeJson-DKKACtdy.js +25 -0
  484. package/dist/cli-runtime/scanCanonical-KP4T9jSl.js +2724 -0
  485. package/dist/cli-runtime/snapshotEnvironment-D_tWyOub.js +813 -0
  486. package/dist/cli-runtime/toolContracts-D2FOG_Nb.js +3721 -0
  487. package/dist/cli-runtime/toolOutputSchemaGroups-DRiYs1je.js +12070 -0
  488. package/dist/cli-runtime/workflowInputError-n8Oo-bLA.js +26 -0
  489. package/dist/cli.js +44 -5
  490. package/dist/cliBrowserScenarioCommands.js +41 -5
  491. package/dist/cliCommandNames.js +80 -0
  492. package/dist/cliEvidenceCommands.js +0 -1
  493. package/dist/cliJavaScriptRuntimeCommands.js +16 -14
  494. package/dist/cliJsonInput.js +14 -6
  495. package/dist/cliLogging.js +50 -14
  496. package/dist/cliObservationOptions.js +9 -0
  497. package/dist/cliOutput.js +38 -5
  498. package/dist/composition/adb.js +3 -0
  499. package/dist/composition/apktool.js +3 -0
  500. package/dist/composition/binary.js +4 -0
  501. package/dist/composition/binaryDiagnostics.js +4 -0
  502. package/dist/composition/captures.js +3 -0
  503. package/dist/composition/directAnalysis.js +36 -11
  504. package/dist/composition/electronFuses.js +4 -0
  505. package/dist/composition/evm.js +12 -0
  506. package/dist/composition/flutter.js +3 -0
  507. package/dist/composition/go.js +4 -0
  508. package/dist/composition/javascriptAnalysisWorkerProcess.js +49 -0
  509. package/dist/composition/jeb.js +35 -0
  510. package/dist/composition/pcap.js +3 -0
  511. package/dist/composition/resolveWindowsProviderExecutable.js +61 -0
  512. package/dist/composition/reverseEngineering.js +29 -0
  513. package/dist/composition/rust.js +4 -0
  514. package/dist/composition/signals.js +3 -0
  515. package/dist/composition/sqlite.js +4 -0
  516. package/dist/composition/wasm.js +22 -0
  517. package/dist/composition/webNetworkCaptures.js +7 -2
  518. package/dist/config/environment.js +55 -4
  519. package/dist/config/ghidraDisabledAnalyzers.js +25 -0
  520. package/dist/config/ghidraLanguageOverride.js +9 -0
  521. package/dist/config/homeDirectory.js +9 -6
  522. package/dist/config/mcpInputSchemaProfile.js +31 -0
  523. package/dist/config/mcpOutputSchemaProfile.js +22 -0
  524. package/dist/config/parseConfig.js +36 -19
  525. package/dist/config/parsers.js +4 -3
  526. package/dist/config/{ghidraStartupTimeout.js → providerStartupTimeout.js} +7 -3
  527. package/dist/contracts/adb/adbToolContracts.js +353 -0
  528. package/dist/contracts/advertisedInputExamples.js +48 -0
  529. package/dist/contracts/analysisDetail.js +13 -0
  530. package/dist/contracts/analysisViewApiSurfaceExample.js +68 -0
  531. package/dist/contracts/analysisViewToolContracts.js +39 -3
  532. package/dist/contracts/android/androidToolContracts.js +17 -8
  533. package/dist/contracts/apktool/apktoolToolContracts.js +33 -0
  534. package/dist/contracts/applicationToolContracts.js +17 -2
  535. package/dist/contracts/artifactToolContracts.js +21 -6
  536. package/dist/contracts/browserToolContracts.js +2 -1
  537. package/dist/contracts/captures/captureToolContracts.js +42 -0
  538. package/dist/contracts/compactInputSchema.js +276 -0
  539. package/dist/contracts/cutterToolContracts.js +84 -0
  540. package/dist/contracts/enhancedToolContracts.js +2 -2
  541. package/dist/contracts/evm/evmToolContracts.js +30 -15
  542. package/dist/contracts/firmware/firmwareToolContracts.js +1 -1
  543. package/dist/contracts/flutter/flutterToolContracts.js +47 -0
  544. package/dist/contracts/fridaRemoteAddress.js +23 -0
  545. package/dist/contracts/fridaToolContracts.js +273 -0
  546. package/dist/contracts/functionComparisonExample.js +12 -1
  547. package/dist/contracts/functionWorkflowToolContracts.js +1 -1
  548. package/dist/contracts/gdbToolContracts.js +103 -0
  549. package/dist/contracts/go/goToolContracts.js +20 -0
  550. package/dist/contracts/hopperMemoryContracts.js +15 -0
  551. package/dist/contracts/inputSchemaPresentation.js +91 -24
  552. package/dist/contracts/investigationExamples.js +1 -0
  553. package/dist/contracts/javascript/electronToolContracts.js +40 -3
  554. package/dist/contracts/javascript/javascriptRecoveryToolContracts.js +13 -1
  555. package/dist/contracts/jeb/jebToolContracts.js +64 -0
  556. package/dist/contracts/managed/managedToolContracts.js +43 -4
  557. package/dist/contracts/managed/managedWorkflowExamples.js +7 -1
  558. package/dist/contracts/managed/managedWorkflowToolContracts.js +4 -30
  559. package/dist/contracts/mobileApplicationGraphExamples.js +12 -0
  560. package/dist/contracts/native/binaryDiagnosticsToolContracts.js +27 -4
  561. package/dist/contracts/native/nativeToolContracts.js +10 -6
  562. package/dist/contracts/officialToolContracts.js +9 -9
  563. package/dist/contracts/pcap/pcapToolContracts.js +33 -0
  564. package/dist/contracts/providerSelection.js +1 -0
  565. package/dist/contracts/reconstructionReadinessExample.js +126 -119
  566. package/dist/contracts/reverseEngineeringToolContracts.js +52 -0
  567. package/dist/contracts/rizinDebugToolContracts.js +96 -0
  568. package/dist/contracts/rust/rustToolContracts.js +20 -0
  569. package/dist/contracts/sessionLifecycleInputs.js +34 -2
  570. package/dist/contracts/sessionToolContracts.js +4 -4
  571. package/dist/contracts/sessionToolSchemas.js +20 -2
  572. package/dist/contracts/signals/signalToolContracts.js +40 -0
  573. package/dist/contracts/sqlite/sqliteToolContracts.js +36 -0
  574. package/dist/contracts/toolContractExamples.js +35 -0
  575. package/dist/contracts/toolContractTypes.js +5 -0
  576. package/dist/contracts/toolContracts.js +32 -0
  577. package/dist/contracts/toolEffects.js +414 -8
  578. package/dist/contracts/toolOutputSchemaGroups.js +78 -33
  579. package/dist/contracts/toolOutputSchemaPrimitives.js +111 -10
  580. package/dist/contracts/toolSchemaMetadata.js +98 -9
  581. package/dist/contracts/unknownContractExamples.js +1 -1
  582. package/dist/contracts/wasm/wasmComparisonContracts.js +52 -0
  583. package/dist/contracts/wasm/wasmToolContracts.js +33 -0
  584. package/dist/contracts/webNetworkCaptureToolContracts.js +15 -4
  585. package/dist/cutter/CutterBridgeClient.js +621 -0
  586. package/dist/cutter/CutterBridgeService.js +139 -0
  587. package/dist/doctorRuntime.js +20 -8
  588. package/dist/domain/adb/adbDeviceAnalysis.js +605 -0
  589. package/dist/domain/analysisErrorBase.js +20 -0
  590. package/dist/domain/analysisErrorCleanup.js +29 -0
  591. package/dist/domain/analysisErrorCore.js +19 -0
  592. package/dist/domain/analysisErrorPresentation.js +75 -22
  593. package/dist/domain/analysisErrorProjection.js +35 -13
  594. package/dist/domain/analysisProfile.js +7 -3
  595. package/dist/domain/analysisSnapshot.js +313 -185
  596. package/dist/domain/analysisView/WebNetworkApiSurfaceAccumulator.js +414 -0
  597. package/dist/domain/analysisView/analysisView.js +417 -45
  598. package/dist/domain/analysisView/analysisViewCoverage.js +32 -0
  599. package/dist/domain/analysisView/analysisViewErrors.js +4 -0
  600. package/dist/domain/analysisView/analysisViewParent.js +12 -0
  601. package/dist/domain/analysisView/analysisViewText.js +29 -0
  602. package/dist/domain/analysisView/androidPackageView.js +102 -0
  603. package/dist/domain/analysisView/artifactInventoryView.js +140 -0
  604. package/dist/domain/analysisView/binaryLayoutView.js +13 -4
  605. package/dist/domain/analysisView/dartAotView.js +93 -0
  606. package/dist/domain/analysisView/evmInterfaceView.js +105 -0
  607. package/dist/domain/analysisView/interfaceBuilderView.js +182 -0
  608. package/dist/domain/analysisView/javascriptApplicationView.js +29 -26
  609. package/dist/domain/analysisView/machoView.js +186 -0
  610. package/dist/domain/analysisView/managedArtifactView.js +108 -0
  611. package/dist/domain/analysisView/managedMemberView.js +209 -0
  612. package/dist/domain/analysisView/nativeFunctionView.js +150 -0
  613. package/dist/domain/analysisView/pcapCaptureView.js +264 -0
  614. package/dist/domain/analysisView/qlogCaptureView.js +198 -0
  615. package/dist/domain/analysisView/wasmArtifactView.js +162 -0
  616. package/dist/domain/analysisView/webNetworkApiSurfaceView.js +123 -0
  617. package/dist/domain/analysisView/webNetworkCaptureView.js +388 -0
  618. package/dist/domain/android/androidAnalysis.js +36 -2
  619. package/dist/domain/android/androidApplication.js +57 -80
  620. package/dist/domain/apktool/apktoolResourceAnalysis.js +89 -0
  621. package/dist/domain/apple/appleApplication.js +71 -52
  622. package/dist/domain/apple/appleArchiveFormat.js +184 -0
  623. package/dist/domain/apple/appleAssetCatalog.js +15 -0
  624. package/dist/domain/apple/appleBundleAnatomy.js +96 -29
  625. package/dist/domain/apple/dyldPaths.js +18 -3
  626. package/dist/domain/apple/dylibResolution.js +21 -11
  627. package/dist/domain/apple/dylibResolutionFindings.js +8 -9
  628. package/dist/domain/apple/interfaceBuilderGraph.js +72 -45
  629. package/dist/domain/apple/interfaceBuilderKeyedArchive.js +38 -9
  630. package/dist/domain/apple/machoContainer.js +120 -8
  631. package/dist/domain/apple/machoCpuIdentity.js +4 -0
  632. package/dist/domain/apple/plistValue.js +6 -1
  633. package/dist/domain/artifactComparison.js +130 -25
  634. package/dist/domain/artifactDecompressionBudget.js +26 -0
  635. package/dist/domain/artifactGraph.js +28 -9
  636. package/dist/domain/artifactIdentity.js +33 -2
  637. package/dist/domain/artifactInspection.js +47 -45
  638. package/dist/domain/artifactIntegrityPolicy.js +10 -0
  639. package/dist/domain/artifactInventoryEvidence.js +148 -51
  640. package/dist/domain/artifactPathSyntax.js +1 -1
  641. package/dist/domain/binaryTarget.js +253 -80
  642. package/dist/domain/binaryTargetTypes.js +21 -1
  643. package/dist/domain/browserNetworkEvidence.js +4 -0
  644. package/dist/domain/browserObservation.js +88 -29
  645. package/dist/domain/browserObservationSchemas.js +12 -5
  646. package/dist/domain/browserScenarioCapture.js +2 -1
  647. package/dist/domain/browserScenarioCaptureValues.js +26 -2
  648. package/dist/domain/browserScenarioDiff.js +120 -11
  649. package/dist/domain/browserScenarioDiffEvidence.js +46 -13
  650. package/dist/domain/browserScenarioDiffValues.js +10 -3
  651. package/dist/domain/browserScenarioNetworkComparison.js +158 -0
  652. package/dist/domain/browserScenarioNormalization.js +10 -13
  653. package/dist/domain/browserScenarioValues.js +2 -12
  654. package/dist/domain/browserSession.js +2 -2
  655. package/dist/domain/bundleComparison.js +1 -5
  656. package/dist/domain/callPath.js +40 -3
  657. package/dist/domain/canonicalJsonDigestSteps.js +34 -12
  658. package/dist/domain/captures/packetCapture.js +138 -0
  659. package/dist/domain/captures/packetFields.js +81 -0
  660. package/dist/domain/changedBehavior.js +43 -41
  661. package/dist/domain/compactStringIdentity.js +9 -0
  662. package/dist/domain/comparisonSourceEvidence.js +6 -0
  663. package/dist/domain/dosCom.js +2 -2
  664. package/dist/domain/dosMz.js +52 -14
  665. package/dist/domain/electron/electronFuses.js +360 -0
  666. package/dist/domain/elfFixedHeader.js +42 -0
  667. package/dist/domain/evidence.js +104 -38
  668. package/dist/domain/evidenceBundle.js +58 -20
  669. package/dist/domain/evidenceErrors.js +5 -0
  670. package/dist/domain/evidenceRecordSummary.js +144 -0
  671. package/dist/domain/evm/evmInterface.js +18 -4
  672. package/dist/domain/evm/solidityMetadata.js +70 -0
  673. package/dist/domain/explicitSensitiveFailure.js +42 -24
  674. package/dist/domain/firmware/firmwareAnalysis.js +29 -0
  675. package/dist/domain/flutter/flutterBuildAnalysis.js +141 -0
  676. package/dist/domain/functionCallCoverage.js +60 -0
  677. package/dist/domain/functionComparisonDimensions.js +101 -10
  678. package/dist/domain/functionComparisonNormalization.js +66 -10
  679. package/dist/domain/functionComparisonResults.js +7 -6
  680. package/dist/domain/functionComparisonSchemas.js +14 -3
  681. package/dist/domain/functionDossierEvidence.js +3 -0
  682. package/dist/domain/go/goBinary.js +96 -0
  683. package/dist/domain/harmony/harmonyApplication.js +156 -0
  684. package/dist/domain/hopperErrors.js +15 -16
  685. package/dist/domain/hopperPublisher.js +12 -0
  686. package/dist/domain/hopperValues.js +112 -34
  687. package/dist/domain/inputIssueProjection.js +16 -1
  688. package/dist/domain/javascript/electronObservation.js +4 -1
  689. package/dist/domain/javascript/electronStaticAnalysisBrowser.js +24 -24
  690. package/dist/domain/javascript/electronStaticAnalysisIpc.js +13 -20
  691. package/dist/domain/javascript/electronStaticAnalysisNative.js +85 -41
  692. package/dist/domain/javascript/electronStaticAnalysisValues.js +30 -8
  693. package/dist/domain/javascript/electronWrappedCallPaths.js +498 -0
  694. package/dist/domain/javascript/htmlArtifactReferences.js +94 -4
  695. package/dist/domain/javascript/javascriptAnalysisResourceControls.js +65 -0
  696. package/dist/domain/javascript/javascriptApplicationAnalysis.js +7 -1
  697. package/dist/domain/javascript/javascriptApplicationChangeGraph.js +13 -8
  698. package/dist/domain/javascript/javascriptApplicationEvidenceSchemas.js +1 -1
  699. package/dist/domain/javascript/javascriptApplicationGraph.js +96 -19
  700. package/dist/domain/javascript/javascriptApplicationGraphSchemas.js +1 -0
  701. package/dist/domain/javascript/javascriptApplicationProjectionResources.js +43 -0
  702. package/dist/domain/javascript/javascriptApplicationVersionItems.js +28 -12
  703. package/dist/domain/javascript/javascriptApplicationVersionKeys.js +40 -19
  704. package/dist/domain/javascript/javascriptArtifactFiles.js +2 -1
  705. package/dist/domain/javascript/javascriptAstFingerprint.js +100 -39
  706. package/dist/domain/javascript/javascriptAstValues.js +81 -0
  707. package/dist/domain/javascript/javascriptBootstrap.js +94 -0
  708. package/dist/domain/javascript/javascriptBootstrapIntegrity.js +372 -0
  709. package/dist/domain/javascript/javascriptBuiltinResourceMethods.js +8 -0
  710. package/dist/domain/javascript/javascriptBundledRequireOrigin.js +291 -0
  711. package/dist/domain/javascript/javascriptContextBridgeExposure.js +23 -0
  712. package/dist/domain/javascript/javascriptElectronMemberWrites.js +114 -0
  713. package/dist/domain/javascript/javascriptExportShapeComparisonSchemas.js +6 -5
  714. package/dist/domain/javascript/javascriptExportShapeVariants.js +1 -1
  715. package/dist/domain/javascript/javascriptFeatureSeed.js +33 -16
  716. package/dist/domain/javascript/javascriptFeatureTrace.js +9 -3
  717. package/dist/domain/javascript/javascriptFeatureTraceSchemas.js +42 -11
  718. package/dist/domain/javascript/javascriptIntrinsicInvocation.js +132 -0
  719. package/dist/domain/javascript/javascriptModuleDeclaration.js +28 -0
  720. package/dist/domain/javascript/javascriptModuleInterop.js +618 -0
  721. package/dist/domain/javascript/javascriptModuleResolutionMode.js +18 -0
  722. package/dist/domain/javascript/javascriptModuleSemanticIr.js +15 -0
  723. package/dist/domain/javascript/javascriptModuleSpecifier.js +5 -0
  724. package/dist/domain/javascript/javascriptNativeHandoff.js +6 -2
  725. package/dist/domain/javascript/javascriptPackageImportAliases.js +58 -0
  726. package/dist/domain/javascript/javascriptRecovery.js +12 -5
  727. package/dist/domain/javascript/javascriptRpcEndpoints.js +331 -0
  728. package/dist/domain/javascript/javascriptRuntimeLoadState.js +12 -3
  729. package/dist/domain/javascript/javascriptRuntimeObservation.js +4 -1
  730. package/dist/domain/javascript/javascriptRuntimeReconciliationCaptureParsing.js +10 -4
  731. package/dist/domain/javascript/javascriptRuntimeReconciliationGraph.js +7 -2
  732. package/dist/domain/javascript/javascriptRuntimeReconciliationMatching.js +15 -2
  733. package/dist/domain/javascript/javascriptRuntimeReconciliationResult.js +0 -1
  734. package/dist/domain/javascript/javascriptRuntimeReconciliationSchemas.js +5 -4
  735. package/dist/domain/javascript/javascriptRuntimeStaticCandidates.js +121 -22
  736. package/dist/domain/javascript/javascriptSemanticAmbientWrites.js +251 -0
  737. package/dist/domain/javascript/javascriptSemanticAnalysis.js +493 -104
  738. package/dist/domain/javascript/javascriptSemanticAsyncEffects.js +17 -34
  739. package/dist/domain/javascript/javascriptSemanticCallResolution.js +4 -3
  740. package/dist/domain/javascript/javascriptSemanticCallableResults.js +42 -0
  741. package/dist/domain/javascript/javascriptSemanticCallableStack.js +52 -0
  742. package/dist/domain/javascript/javascriptSemanticCalls.js +14 -12
  743. package/dist/domain/javascript/javascriptSemanticChildProcesses.js +42 -55
  744. package/dist/domain/javascript/javascriptSemanticDataEffectHelpers.js +428 -32
  745. package/dist/domain/javascript/javascriptSemanticDataEffects.js +14 -20
  746. package/dist/domain/javascript/javascriptSemanticDependencies.js +69 -0
  747. package/dist/domain/javascript/javascriptSemanticDerivedAnalysis.js +15 -4
  748. package/dist/domain/javascript/javascriptSemanticFileProjection.js +1 -0
  749. package/dist/domain/javascript/javascriptSemanticFingerprints.js +51 -53
  750. package/dist/domain/javascript/javascriptSemanticGraph.js +74 -24
  751. package/dist/domain/javascript/javascriptSemanticGraphSchemas.js +2 -11
  752. package/dist/domain/javascript/javascriptSemanticIterationSources.js +41 -8
  753. package/dist/domain/javascript/javascriptSemanticMemberMutations.js +538 -151
  754. package/dist/domain/javascript/javascriptSemanticMutationInitializers.js +199 -3
  755. package/dist/domain/javascript/javascriptSemanticMutationValues.js +78 -35
  756. package/dist/domain/javascript/javascriptSemanticObjectReferences.js +671 -0
  757. package/dist/domain/javascript/javascriptSemanticObjects.js +27 -17
  758. package/dist/domain/javascript/javascriptSemanticProjection.js +202 -56
  759. package/dist/domain/javascript/javascriptSemanticPromises.js +6 -9
  760. package/dist/domain/javascript/javascriptSemanticPropertyPaths.js +77 -0
  761. package/dist/domain/javascript/javascriptSemanticProvenance.js +5 -1
  762. package/dist/domain/javascript/javascriptSemanticQuery.js +34 -31
  763. package/dist/domain/javascript/javascriptSemanticQueryIdentity.js +1 -3
  764. package/dist/domain/javascript/javascriptSemanticReferenceSources.js +25 -0
  765. package/dist/domain/javascript/javascriptSemanticRequireOrigin.js +331 -8
  766. package/dist/domain/javascript/javascriptSemanticResources.js +6 -40
  767. package/dist/domain/javascript/javascriptSemanticReturnedReferences.js +233 -0
  768. package/dist/domain/javascript/javascriptSemanticReturns.js +49 -52
  769. package/dist/domain/javascript/javascriptSemanticState.js +61 -4
  770. package/dist/domain/javascript/javascriptSemanticTraversal.js +25 -5
  771. package/dist/domain/javascript/javascriptSemanticValues.js +260 -35
  772. package/dist/domain/javascript/javascriptSourceAnalysis.js +1 -0
  773. package/dist/domain/javascript/javascriptSourceMapPaths.js +44 -17
  774. package/dist/domain/javascript/javascriptSourceParser.js +72 -3
  775. package/dist/domain/javascript/javascriptSourceSelection.js +11 -0
  776. package/dist/domain/javascript/javascriptStaticAnalysis.js +72 -26
  777. package/dist/domain/javascript/javascriptStaticAnalysisBundler.js +100 -24
  778. package/dist/domain/javascript/javascriptStaticAnalysisCalls.js +271 -47
  779. package/dist/domain/javascript/javascriptStaticAnalysisFindings.js +8 -4
  780. package/dist/domain/javascript/javascriptStaticAnalysisHelpers.js +166 -56
  781. package/dist/domain/javascript/javascriptStaticAnalysisState.js +2 -0
  782. package/dist/domain/javascript/javascriptStaticAnalysisTypes.js +2 -1
  783. package/dist/domain/javascript/javascriptSymbolicBindings.js +836 -0
  784. package/dist/domain/javascript/javascriptSymbolicControlFlow.js +40 -0
  785. package/dist/domain/javascript/javascriptSymbolicValues.js +34 -0
  786. package/dist/domain/javascript/sourceToBundleComparison.js +3 -1
  787. package/dist/domain/javascript/sourceToBundleComparisonSchemas.js +2 -0
  788. package/dist/domain/javascript/sourceToBundleSignals.js +47 -13
  789. package/dist/domain/jeb/jebAnalysis.js +114 -0
  790. package/dist/domain/jsonShape.js +63 -52
  791. package/dist/domain/jsonValue.js +40 -12
  792. package/dist/domain/localPath.js +6 -3
  793. package/dist/domain/managed/managedApplicationGraph.js +42 -0
  794. package/dist/domain/managed/managedApplicationGraphCoverage.js +12 -2
  795. package/dist/domain/managed/managedApplicationGraphNodes.js +32 -23
  796. package/dist/domain/managed/managedArtifact.js +52 -1
  797. package/dist/domain/managed/managedInspectionEvidence.js +12 -0
  798. package/dist/domain/managed/managedMemberComparison.js +3 -0
  799. package/dist/domain/managed/managedMemberComparisonCoverage.js +23 -3
  800. package/dist/domain/managed/managedMemberComparisonItems.js +23 -19
  801. package/dist/domain/managed/managedMemberComparisonMatch.js +209 -18
  802. package/dist/domain/managed/managedNativeVerificationMatch.js +49 -26
  803. package/dist/domain/managed/managedNativeVerificationSchemas.js +13 -2
  804. package/dist/domain/managed/managedReconstruction.js +5 -8
  805. package/dist/domain/mobileApplicationGraphProjection.js +80 -0
  806. package/dist/domain/native/addressCoordinate.js +11 -0
  807. package/dist/domain/native/binaryLayout.js +2 -4
  808. package/dist/domain/native/bytePattern.js +100 -0
  809. package/dist/domain/native/nativeAotPe.js +1408 -0
  810. package/dist/domain/native/nativeInspection.js +38 -4
  811. package/dist/domain/native/nativeInstruction.js +38 -2
  812. package/dist/domain/native/nativeInvestigationGraph.js +9 -5
  813. package/dist/domain/native/nativeLoadImage.js +19 -1
  814. package/dist/domain/native/nativeMetadataRecovery.js +79 -6
  815. package/dist/domain/native/nativeUiObservation.js +5 -6
  816. package/dist/domain/native/objcSwiftMetadata.js +4 -1
  817. package/dist/domain/native/peResources.js +100 -0
  818. package/dist/domain/native/recordedCrash.js +79 -10
  819. package/dist/domain/nativeConvention.js +33 -0
  820. package/dist/domain/offsetDateTime.js +60 -0
  821. package/dist/domain/pcap/pcapAnalysis.js +91 -0
  822. package/dist/domain/pcap/pcapEvidence.js +15 -0
  823. package/dist/domain/peMachine.js +36 -0
  824. package/dist/domain/pngHeader.js +18 -0
  825. package/dist/domain/process/processCapture.js +91 -1
  826. package/dist/domain/process/processCaptureCoverage.js +26 -3
  827. package/dist/domain/process/processCaptureExample.js +26 -0
  828. package/dist/domain/process/processCaptureValidation.js +112 -8
  829. package/dist/domain/process/processComparison.js +41 -13
  830. package/dist/domain/process/processScenario.js +66 -7
  831. package/dist/domain/process/processTraceEvaluation.js +54 -50
  832. package/dist/domain/process/processTraceSpecification.js +243 -89
  833. package/dist/domain/propertyListKeys.js +214 -12
  834. package/dist/domain/propertyListXmlText.js +20 -4
  835. package/dist/domain/providerAdapterError.js +0 -5
  836. package/dist/domain/providerConfigurationRefusal.js +12 -0
  837. package/dist/domain/providerSelectionError.js +2 -1
  838. package/dist/domain/qlogCapture.js +62 -0
  839. package/dist/domain/rawBinary.js +96 -0
  840. package/dist/domain/reconstructionCoverage.js +5 -1
  841. package/dist/domain/reconstructionCoverageEvaluation.js +18 -15
  842. package/dist/domain/reconstructionCoverageVerifierResults.js +35 -0
  843. package/dist/domain/reconstructionObligationLedgerIntegrity.js +114 -0
  844. package/dist/domain/reconstructionObligationLedgerSchemas.js +104 -1
  845. package/dist/domain/reconstructionReadiness.js +4 -8
  846. package/dist/domain/reconstructionReadinessJourneyFindings.js +4 -1
  847. package/dist/domain/reconstructionUnknowns.js +9 -1
  848. package/dist/domain/reconstructionVerification.js +54 -25
  849. package/dist/domain/recordedTransportUrl.js +59 -0
  850. package/dist/domain/referenceSourceClassification.js +27 -23
  851. package/dist/domain/referenceSourceGraph.js +70 -23
  852. package/dist/domain/referenceSourceImportParsing.js +29 -16
  853. package/dist/domain/referenceSourcePathIdentity.js +32 -0
  854. package/dist/domain/referenceSourceRequireBindings.js +130 -0
  855. package/dist/domain/referenceSourceSummary.js +92 -0
  856. package/dist/domain/relationshipCoverage.js +44 -0
  857. package/dist/domain/residualUnknown.js +93 -26
  858. package/dist/domain/reverseEngineering.js +31 -0
  859. package/dist/domain/runtimeVersion.js +8 -0
  860. package/dist/domain/rust/rustBinary.js +200 -0
  861. package/dist/domain/signals/annotationTextWindow.js +31 -0
  862. package/dist/domain/signals/signalDecoders.js +69 -0
  863. package/dist/domain/signals/signalRecording.js +115 -0
  864. package/dist/domain/sourceMapContents.js +10 -3
  865. package/dist/domain/sourceMapEnvelope.js +17 -11
  866. package/dist/domain/sqlite/sqliteDatabase.js +188 -0
  867. package/dist/domain/staticRuntimeCorrelation.js +7 -9
  868. package/dist/domain/swiftSymbolClassification.js +17 -0
  869. package/dist/domain/symbolAnalysis.js +16 -4
  870. package/dist/domain/urlComponents.js +6 -0
  871. package/dist/domain/wasm/wasmArtifact.js +119 -0
  872. package/dist/domain/wasm/wasmInterface.js +89 -0
  873. package/dist/domain/webBundleAnalysis.js +14 -3
  874. package/dist/domain/webBundleAnalyzerAst.js +7 -2
  875. package/dist/domain/webBundleAnalyzerInspection.js +68 -40
  876. package/dist/domain/webBundleAnalyzerResult.js +18 -6
  877. package/dist/domain/webCaptureDiff.js +233 -34
  878. package/dist/domain/webCaptureFrameComparison.js +49 -0
  879. package/dist/domain/webMcpDiscovery.js +5 -2
  880. package/dist/domain/webModuleImports.js +22 -27
  881. package/dist/domain/webModuleTrace.js +3 -8
  882. package/dist/domain/webNetworkCapture.js +101 -39
  883. package/dist/domain/webNetworkCaptureCoordinates.js +21 -0
  884. package/dist/domain/webRuntime.js +0 -1
  885. package/dist/domain/webScreenshot.js +2 -2
  886. package/dist/domain/webScriptArtifacts.js +2 -4
  887. package/dist/domain/webScriptExport.js +6 -8
  888. package/dist/domain/webScriptExportError.js +10 -4
  889. package/dist/domain/webScriptExportPlan.js +9 -15
  890. package/dist/domain/webSourceLocation.js +20 -9
  891. package/dist/domain/zipPackageFormat.js +31 -2
  892. package/dist/domain/zodCollectionSteps.js +24 -0
  893. package/dist/dotnet/ManagedArtifactInspector.js +81 -54
  894. package/dist/dotnet/ManagedDecodeBudget.js +138 -0
  895. package/dist/dotnet/ManagedMemberInspector.js +113 -26
  896. package/dist/dotnet/ManagedMemberInspectorCore.js +356 -140
  897. package/dist/dotnet/ManagedMemberInstructionDecoder.js +112 -38
  898. package/dist/dotnet/ManagedMemberOwnership.js +65 -0
  899. package/dist/dotnet/ManagedMemberPointers.js +69 -0
  900. package/dist/dotnet/ManagedMemberRows.js +182 -44
  901. package/dist/dotnet/ManagedMetadataHeaps.js +123 -27
  902. package/dist/dotnet/ManagedMetadataInventory.js +5 -5
  903. package/dist/dotnet/ManagedMetadataInventoryRows.js +56 -63
  904. package/dist/dotnet/ManagedMetadataLayout.js +19 -5
  905. package/dist/dotnet/ManagedMetadataRowSizes.js +1 -1
  906. package/dist/dotnet/ManagedMethodBodyReader.js +34 -11
  907. package/dist/dotnet/ManagedMethodSpecs.js +78 -0
  908. package/dist/dotnet/ManagedNativeBoundaryHelpers.js +5 -4
  909. package/dist/dotnet/ManagedNativeBoundaryInspector.js +52 -44
  910. package/dist/dotnet/ManagedPeReader.js +96 -52
  911. package/dist/dotnet/ManagedReaderFailure.js +11 -1
  912. package/dist/dotnet/ManagedSnapshot.js +88 -0
  913. package/dist/dotnet/ManagedStaticProvider.js +57 -35
  914. package/dist/dotnet/ManagedTypeMemberLists.js +105 -0
  915. package/dist/dotnet/ManagedTypeNames.js +98 -0
  916. package/dist/dotnet/ManagedUserStrings.js +75 -0
  917. package/dist/electron/ElectronFusePath.js +247 -0
  918. package/dist/electron/ElectronFuseProvider.js +113 -0
  919. package/dist/electron/ElectronFuseReader.js +317 -0
  920. package/dist/evaluation/AgentEvaluationFixtures.js +194 -11
  921. package/dist/evaluation/AgentEvaluationReport.js +9 -5
  922. package/dist/evaluation/CodexAgentEval.js +58 -49
  923. package/dist/evaluation/KnownAnswerEvaluation.js +126 -57
  924. package/dist/evm/EvmoleFailures.js +19 -16
  925. package/dist/evm/EvmoleInterfaceAdapter.js +5 -1
  926. package/dist/evm/EvmoleInterfaceProvider.js +198 -23
  927. package/dist/evm/EvmoleInterfaceWorker.js +2 -0
  928. package/dist/evm/SolidityMetadata.js +139 -0
  929. package/dist/filesystem/OwnedDirectoryHandle.js +29 -0
  930. package/dist/filesystem/OwnedFileHandle.js +36 -0
  931. package/dist/filesystem/OwnedStagedOutput.js +138 -0
  932. package/dist/filesystem/RegularFile.js +81 -5
  933. package/dist/filesystem/StableFileHash.js +46 -0
  934. package/dist/filesystem/readFileHandleChunks.js +35 -0
  935. package/dist/firmware/FirmwareCommand.js +27 -5
  936. package/dist/firmware/FirmwareFiles.js +18 -7
  937. package/dist/firmware/FirmwareProvider.js +158 -32
  938. package/dist/firmware/FirmwarePublication.js +242 -4
  939. package/dist/firmware/FirmwareRelease.js +1 -0
  940. package/dist/firmware/FirmwareReports.js +202 -12
  941. package/dist/flutter/DartElf.js +418 -0
  942. package/dist/flutter/ElfBuildId.js +137 -0
  943. package/dist/flutter/ElfLoadMap.js +91 -0
  944. package/dist/flutter/FlutterBuildProvider.js +826 -0
  945. package/dist/flutter/FlutterPayloadScan.js +180 -0
  946. package/dist/frida/FridaInstrumentationManager.js +1104 -0
  947. package/dist/gdb/GdbSessionManager.js +1451 -0
  948. package/dist/generatedPackageMetadata.js +2 -2
  949. package/dist/ghidra/GhidraAnalysisProfile.js +175 -6
  950. package/dist/ghidra/GhidraAnalysisSeeds.js +211 -0
  951. package/dist/ghidra/GhidraClient.js +208 -29
  952. package/dist/ghidra/GhidraDiagnostics.js +18 -8
  953. package/dist/ghidra/GhidraDoctor.js +15 -12
  954. package/dist/ghidra/GhidraFunctionValues.js +73 -2
  955. package/dist/ghidra/GhidraInstallation.js +216 -20
  956. package/dist/ghidra/GhidraInstallationPolicy.js +79 -29
  957. package/dist/ghidra/GhidraInventoryValues.js +53 -1
  958. package/dist/ghidra/GhidraJavaLaunch.js +91 -10
  959. package/dist/ghidra/GhidraJavaProperties.js +117 -0
  960. package/dist/ghidra/GhidraLanguageCatalog.js +169 -0
  961. package/dist/ghidra/GhidraLauncher.js +306 -88
  962. package/dist/ghidra/GhidraLoadImageAttest.js +74 -7
  963. package/dist/ghidra/GhidraLoadImageValues.js +72 -0
  964. package/dist/ghidra/GhidraMipsProfile.js +315 -0
  965. package/dist/ghidra/GhidraPeProfile.js +21 -0
  966. package/dist/ghidra/GhidraPowerPcProfile.js +51 -0
  967. package/dist/ghidra/GhidraProvider.js +106 -20
  968. package/dist/ghidra/GhidraProviderCapabilities.js +30 -19
  969. package/dist/ghidra/GhidraProviderClient.js +520 -56
  970. package/dist/ghidra/GhidraPspExtension.js +140 -0
  971. package/dist/ghidra/GhidraPspProfile.js +59 -0
  972. package/dist/ghidra/GhidraRawBinaryLanguage.js +40 -0
  973. package/dist/ghidra/GhidraRiscvProfile.js +100 -0
  974. package/dist/ghidra/GhidraSessionError.js +155 -11
  975. package/dist/ghidra/GhidraSessionValues.js +75 -2
  976. package/dist/ghidra/GhidraTransport.js +2 -1
  977. package/dist/go/GoBinaryContainer.js +140 -0
  978. package/dist/go/GoBinaryImage.js +210 -0
  979. package/dist/go/GoBinaryProvider.js +151 -0
  980. package/dist/go/GoElfImage.js +211 -0
  981. package/dist/go/GoMachoImage.js +164 -0
  982. package/dist/go/GoModuleText.js +217 -0
  983. package/dist/go/GoPeImage.js +124 -0
  984. package/dist/hopper/BridgeLauncher.js +35 -2
  985. package/dist/hopper/HopperAnalysisProfile.js +21 -9
  986. package/dist/hopper/HopperCleanup.js +15 -3
  987. package/dist/hopper/HopperClient.js +203 -42
  988. package/dist/hopper/HopperMacPublisher.js +29 -0
  989. package/dist/hopper/HopperMachOImage.js +61 -27
  990. package/dist/hopper/HopperProcessDiagnostic.js +27 -0
  991. package/dist/hopper/HopperProvider.js +68 -26
  992. package/dist/hopper/HopperProviderCapabilities.js +7 -3
  993. package/dist/hopper/HopperRequestQueue.js +17 -5
  994. package/dist/hopper/HopperSessionValues.js +10 -1
  995. package/dist/hopper/HopperTargetLease.js +66 -19
  996. package/dist/ida/IdaBusyHealth.js +44 -0
  997. package/dist/ida/IdaCallGraph.js +134 -0
  998. package/dist/ida/IdaConfiguration.js +7 -2
  999. package/dist/ida/IdaDiagnosticRedactor.js +199 -0
  1000. package/dist/ida/IdaDiagnosticWriter.js +62 -0
  1001. package/dist/ida/IdaDoctor.js +7 -5
  1002. package/dist/ida/IdaJsonDiagnostic.js +138 -0
  1003. package/dist/ida/IdaMcpConnection.js +297 -27
  1004. package/dist/ida/IdaNativeProtocol.js +93 -0
  1005. package/dist/ida/IdaOperationRunner.js +249 -40
  1006. package/dist/ida/IdaProtocolValues.js +86 -4
  1007. package/dist/ida/IdaProvider.js +34 -8
  1008. package/dist/ida/IdaProviderCapabilities.js +37 -8
  1009. package/dist/ida/IdaSessionClient.js +332 -53
  1010. package/dist/ida/IdaWorkspace.js +57 -7
  1011. package/dist/inspector/V8InspectorCaptureProjection.js +7 -2
  1012. package/dist/inspector/V8InspectorEndpoint.js +15 -13
  1013. package/dist/inspector/V8InspectorProvider.js +41 -7
  1014. package/dist/javascript/analysis/JavaScriptAnalysisTransfer.js +337 -0
  1015. package/dist/javascript/analysis/JavaScriptAnalysisWorker.js +594 -0
  1016. package/dist/javascript/analysis/JavaScriptAnalysisWorkerProtocol.js +65 -0
  1017. package/dist/javascript/analysis/JavaScriptAnalysisWorkerSchemas.js +590 -0
  1018. package/dist/javascript/analysis/JavaScriptAnalysisWorkerServer.js +126 -0
  1019. package/dist/javascript/recovery/RecoveryFiles.js +68 -12
  1020. package/dist/javascript/recovery/WakaruCommand.js +22 -9
  1021. package/dist/javascript/recovery/WakaruExecution.js +30 -18
  1022. package/dist/javascript/recovery/WakaruProvider.js +150 -24
  1023. package/dist/javascript/recovery/WakaruPublication.js +38 -14
  1024. package/dist/javascript/recovery/WakaruRelease.js +11 -4
  1025. package/dist/javascript/recovery/WakaruReport.js +15 -9
  1026. package/dist/javascript/recovery/WakaruVersion.js +24 -0
  1027. package/dist/javascript/sourceMaps/DecodedSourceMap.js +2 -16
  1028. package/dist/javascript/sourceMaps/SourceMapCommand.js +38 -7
  1029. package/dist/javascript/sourceMaps/SourceMapDecoder.js +84 -10
  1030. package/dist/javascript/sourceMaps/SourceMapFormat.js +26 -28
  1031. package/dist/javascript/sourceMaps/TraceSourceMap.js +34 -6
  1032. package/dist/jeb/JebMcpConnection.js +186 -0
  1033. package/dist/jeb/JebMcpEndpoint.js +45 -0
  1034. package/dist/jeb/JebProvider.js +297 -0
  1035. package/dist/logger.js +14 -1
  1036. package/dist/main/shutdown.js +3 -0
  1037. package/dist/main/transport.js +48 -4
  1038. package/dist/main.js +14 -3
  1039. package/dist/mcp/AnalysisSnapshotFiles-BAbiJQOc.js +1412 -0
  1040. package/dist/mcp/ArtifactProvider-DViCU_rn.js +2183 -0
  1041. package/dist/mcp/ArtifactProviderMetadata-b7pOK5_t.js +76 -0
  1042. package/dist/mcp/ArtifactReader-OyM03Gjn.js +55 -0
  1043. package/dist/mcp/ArtifactResourceScope-P3tq5z8Z.js +162 -0
  1044. package/dist/mcp/AsarHeader-WsPgoooH.js +31 -0
  1045. package/dist/mcp/BinarySessionStatus-B4P9gf-S.js +212 -0
  1046. package/dist/mcp/BinaryTargetResolver-BMaE_0H1.js +1427 -0
  1047. package/dist/mcp/BoundedFileBytes-DuczXiQZ.js +68 -0
  1048. package/dist/mcp/CdpCaptureDocuments-HDiF2O7k.js +746 -0
  1049. package/dist/mcp/CdpCaptureValues-M-j6CIh1.js +90 -0
  1050. package/dist/mcp/CdpConnection-BpDfz4MK.js +570 -0
  1051. package/dist/mcp/CdpOptionalCommand-BPjRD9Kz.js +120 -0
  1052. package/dist/mcp/CdpTargetSession-BsPoKhEU.js +86 -0
  1053. package/dist/mcp/DirectAnalysis-DrafbXke.js +409 -0
  1054. package/dist/mcp/DirectAnalysisStatus-CjjeDLzW.js +44 -0
  1055. package/dist/mcp/ElectronFileScope-BPG_YoyU.js +110 -0
  1056. package/dist/mcp/InterfaceBuilderDecodeBudget-5F2AkxJT.js +652 -0
  1057. package/dist/mcp/ManagedStaticProvider-BthZbKyZ.js +5028 -0
  1058. package/dist/mcp/NativeMacOSProvider-Bh79k8dI.js +4867 -0
  1059. package/dist/mcp/NativeMacOSProviderMetadata-N1lPOaY_.js +307 -0
  1060. package/dist/mcp/ProcedureAddressResolution-CQpuwm1h.js +19 -0
  1061. package/dist/mcp/ProcessOwnership-Bl_3ejLe.js +1502 -0
  1062. package/dist/mcp/ProviderDeadline-DskQ94YD.js +932 -0
  1063. package/dist/mcp/WorkflowEvidence-umWrB_wm.js +111 -0
  1064. package/dist/mcp/analysisErrorCore-DXRTvF_m.js +235 -0
  1065. package/dist/mcp/analysisErrorProjection-BN0EPM-3.js +892 -0
  1066. package/dist/mcp/artifactOperationError-CkHMMaf7.js +27 -0
  1067. package/dist/mcp/artifactToolContracts-Di4qZlEt.js +72 -0
  1068. package/dist/mcp/browserObservation-C0s4i8UI.js +4468 -0
  1069. package/dist/mcp/browserObservationError-CyLugqX4.js +40 -0
  1070. package/dist/mcp/browserObservationSchemas-tgqjH7aA.js +573 -0
  1071. package/dist/mcp/browserScenario-CAQ8Fns9.js +2929 -0
  1072. package/dist/mcp/browserScenarioCapture-CTNFN-FI.js +479 -0
  1073. package/dist/mcp/canonicalDigest-Bi_0_zGi.js +71 -0
  1074. package/dist/mcp/digests-BFoWUT_-.js +223 -0
  1075. package/dist/mcp/electronActiveObservation-lDvQTMR0.js +226 -0
  1076. package/dist/mcp/electronObservation-DFOFEood.js +112 -0
  1077. package/dist/mcp/electronObservation-i7LcILQ-.js +562 -0
  1078. package/dist/mcp/electronScenario-nCzE6IfJ.js +653 -0
  1079. package/dist/mcp/emptyArraySchema-tL6Qymyd.js +140 -0
  1080. package/dist/mcp/enhancedInputs-DgdEnzHy.js +56 -0
  1081. package/dist/mcp/javascriptRuntimeObservation-61NhCf7H.js +690 -0
  1082. package/dist/mcp/javascriptRuntimeObservation-PIUoLfX6.js +121 -0
  1083. package/dist/mcp/jsonSerialization-V-wWiFRE.js +152 -0
  1084. package/dist/mcp/lipo-Bnkoq_6W.js +502 -0
  1085. package/dist/mcp/localPath-AxvW9aPe.js +19 -0
  1086. package/dist/mcp/logger-BQY5ulYv.js +48 -0
  1087. package/dist/mcp/main-kBXHZ8S5.js +69390 -0
  1088. package/dist/mcp/main.js +6 -0
  1089. package/dist/mcp/managedToolContracts-CK--I_s7.js +101 -0
  1090. package/dist/mcp/nativeValueTrace-DR9UE62L.js +3439 -0
  1091. package/dist/mcp/officialToolContracts-B67NJ2tC.js +1413 -0
  1092. package/dist/mcp/pngHeader-DQ-ObyY2.js +147 -0
  1093. package/dist/mcp/propertyListKeys-DD25WsjI.js +553 -0
  1094. package/dist/mcp/providerAdapterError-sDxToNal.js +25 -0
  1095. package/dist/mcp/providerIdentities--ptAh481.js +31 -0
  1096. package/dist/mcp/providerIdentity-BCQ5n5tw.js +16 -0
  1097. package/dist/mcp/providerOperationHealth-CTYa3iLf.js +48 -0
  1098. package/dist/mcp/rolldown-runtime-BjeaiXFo.js +121 -0
  1099. package/dist/mcp/safeJson-NeGfpkrI.js +25 -0
  1100. package/dist/mcp/scanCanonical-CRXSpule.js +3982 -0
  1101. package/dist/mcp/serverIdentity-Cio4iFV3.js +1328 -0
  1102. package/dist/mcp/sourceMapEnvelope-C0uJlrOh.js +94 -0
  1103. package/dist/mcp/toolContracts-BW05wpcr.js +12200 -0
  1104. package/dist/mcp/toolOutputSchemaGroups-ColvNZ1r.js +17533 -0
  1105. package/dist/mcp/unicodeCodePointOrder-BezCbTpg.js +26 -0
  1106. package/dist/mcp/webContentArtifact-Dzjc1z-R.js +284 -0
  1107. package/dist/mcp/webRuntime-K__NYzXm.js +74 -0
  1108. package/dist/mcp/webSourceLocation-DbMAT2J9.js +11130 -0
  1109. package/dist/mcpDoctor.js +108 -76
  1110. package/dist/mcpStartupPolicy.js +3 -0
  1111. package/dist/native/AppleDispatchCoverage.js +81 -28
  1112. package/dist/native/AppleDispatchMetadata.js +20 -9
  1113. package/dist/native/AppleMachoFixups.js +253 -34
  1114. package/dist/native/AppleMachoSelection.js +44 -17
  1115. package/dist/native/AppleObjcCategories.js +1 -2
  1116. package/dist/native/AppleObjcDispatchFacets.js +76 -7
  1117. package/dist/native/CommandRunner.js +142 -32
  1118. package/dist/native/LldbCallTracer.js +5 -3
  1119. package/dist/native/MachoArchitectureSelection.js +50 -0
  1120. package/dist/native/NativeCallObservation.js +2 -1
  1121. package/dist/native/NativeMacOSProvider.js +173 -37
  1122. package/dist/native/NativeMachoInspection.js +142 -78
  1123. package/dist/native/NativeUiHelperRuntime.js +6 -1
  1124. package/dist/native/NativeUiObservation.js +6 -5
  1125. package/dist/native/SignatureTargetBinding.js +118 -55
  1126. package/dist/native/parsers/codesign.js +27 -10
  1127. package/dist/native/parsers/demangle.js +7 -1
  1128. package/dist/native/parsers/dyldInfo.js +73 -4
  1129. package/dist/native/parsers/lipo.js +53 -19
  1130. package/dist/native/parsers/machoUuid.js +150 -0
  1131. package/dist/native/parsers/otool.js +232 -29
  1132. package/dist/native/pe/PeResourceLayout.js +120 -0
  1133. package/dist/native/pe/PeResourceParser.js +286 -0
  1134. package/dist/native/pe/PeResourcesProvider.js +77 -0
  1135. package/dist/native/pwndbg/PwndbgCoreContext.js +20 -20
  1136. package/dist/native/pwntools/PwntoolsDecoder.js +264 -40
  1137. package/dist/native/pwntools/PwntoolsFailures.js +2 -1
  1138. package/dist/native/pwntools/PwntoolsInputLimit.js +27 -0
  1139. package/dist/native/pwntools/PwntoolsRecordedCrashProvider.js +27 -15
  1140. package/dist/native/pwntools/PwntoolsResourceLimits.js +3 -3
  1141. package/dist/native/pwntools/RecordedCrashSourceBindings.js +12 -8
  1142. package/dist/native/pwntools/RecordedCrashStructureBindings.js +3 -1
  1143. package/dist/objdump/ObjdumpCommand.js +21 -0
  1144. package/dist/pcap/PcapCommand.js +146 -0
  1145. package/dist/pcap/PcapConfiguration.js +93 -0
  1146. package/dist/pcap/PcapNativeBound.js +58 -0
  1147. package/dist/pcap/PcapOutput.js +240 -0
  1148. package/dist/pcap/PcapProvider.js +424 -0
  1149. package/dist/pcap/PcapSnapshot.js +171 -0
  1150. package/dist/process/ArtifactAnalysisResources.js +213 -0
  1151. package/dist/process/BoundedFileBytes.js +30 -7
  1152. package/dist/process/CurrentEntrypointPath.js +6 -0
  1153. package/dist/process/DarwinProcessRunTokenReader.js +125 -16
  1154. package/dist/process/ExecFileBoundedOutput.js +44 -0
  1155. package/dist/process/ExecFileOutput.js +30 -6
  1156. package/dist/process/JavaScriptWorkerMemoryLimit.js +25 -0
  1157. package/dist/process/LinuxResourceLimits.js +80 -0
  1158. package/dist/process/MacCodeSignature.js +3 -0
  1159. package/dist/process/OwnedCommand.js +40 -15
  1160. package/dist/process/PrivateRuntimeRoot.js +9 -19
  1161. package/dist/process/PrivateRuntimeRootUnavailableError.js +10 -0
  1162. package/dist/process/ProcessOwnership.js +173 -128
  1163. package/dist/process/ProcessOwnershipObservation.js +131 -43
  1164. package/dist/process/ProcessOwnershipProcessTree.js +4 -4
  1165. package/dist/process/ProcessRunTokenObservations.js +48 -0
  1166. package/dist/process/ProviderDeadline.js +58 -12
  1167. package/dist/process/ProviderDiagnosticRedaction.js +17 -0
  1168. package/dist/process/ProviderProcess.js +112 -14
  1169. package/dist/process/WindowsAuthority.js +48 -39
  1170. package/dist/process/WindowsBatchCommand.js +46 -0
  1171. package/dist/process/boundedUtf8Text.js +13 -0
  1172. package/dist/process/capture/FilesystemSnapshot.js +87 -12
  1173. package/dist/process/capture/ProcessCaptureClock.js +2 -0
  1174. package/dist/process/capture/ProcessCaptureError.js +22 -3
  1175. package/dist/process/capture/ProcessCaptureJournal.js +2 -1
  1176. package/dist/process/capture/ProcessCaptureLifecycle.js +433 -91
  1177. package/dist/process/capture/ProcessCaptureProgress.js +63 -0
  1178. package/dist/process/capture/ProcessHarness.js +209 -38
  1179. package/dist/process/capture/ProcessNormalization.js +278 -34
  1180. package/dist/process/capture/ProcessSampling.js +3 -2
  1181. package/dist/process/capture/ProcessScenarioRuntimeValidation.js +18 -15
  1182. package/dist/process/capture/TerminalRenderer.js +52 -14
  1183. package/dist/process/ownedDebuggerSession.js +203 -0
  1184. package/dist/reference/ReferenceSourceReader.js +22 -6
  1185. package/dist/reference/ReferenceSourceReaderEntries.js +182 -105
  1186. package/dist/reference/ReferenceSourceReaderErrors.js +17 -1
  1187. package/dist/reference/ReferenceSourceReaderFile.js +50 -11
  1188. package/dist/reference/ReferenceSourceReaderTypes.js +1 -2
  1189. package/dist/reference/ReferenceSourceReaderValidate.js +4 -5
  1190. package/dist/rizin/RizinCommand.js +14 -0
  1191. package/dist/rizin/RizinDebugSessionManager.js +1072 -0
  1192. package/dist/rust/RustAuditableReader.js +309 -0
  1193. package/dist/rust/RustBinaryImage.js +116 -0
  1194. package/dist/rust/RustBinaryProvider.js +162 -0
  1195. package/dist/server/EvidenceMcpServer.js +185 -27
  1196. package/dist/server/admittedToolOperation.js +14 -0
  1197. package/dist/server/contractToolHandler.js +28 -0
  1198. package/dist/server/createServer.js +238 -36
  1199. package/dist/server/externalMutationAdmission.js +50 -0
  1200. package/dist/server/mcpProgress.js +4 -2
  1201. package/dist/server/promptCompletion.js +19 -6
  1202. package/dist/server/providerEnvironment.js +3 -0
  1203. package/dist/server/registerAdbTools.js +36 -0
  1204. package/dist/server/registerAnalysisViewTool.js +9 -10
  1205. package/dist/server/registerAndroidTools.js +22 -13
  1206. package/dist/server/registerApktoolTools.js +14 -0
  1207. package/dist/server/registerApplicationTools/compareExportShapes.js +4 -6
  1208. package/dist/server/registerApplicationTools/compareSourceToBundle.js +4 -5
  1209. package/dist/server/registerApplicationTools/compareVersions.js +3 -2
  1210. package/dist/server/registerApplicationTools/coverage.js +3 -2
  1211. package/dist/server/registerApplicationTools/obligationLedger.js +3 -2
  1212. package/dist/server/registerApplicationTools/projectMobileApplicationGraph.js +11 -3
  1213. package/dist/server/registerApplicationTools/traceFeature.js +3 -2
  1214. package/dist/server/registerApplicationTools/traceSemantics.js +4 -5
  1215. package/dist/server/registerArtifactComparisonTool.js +5 -2
  1216. package/dist/server/registerArtifactTools.js +21 -1
  1217. package/dist/server/registerBinaryDiagnosticsTools.js +16 -4
  1218. package/dist/server/registerBrowserScenarioTool.js +10 -7
  1219. package/dist/server/registerBrowserTools.js +14 -13
  1220. package/dist/server/registerBundleComparisonTool.js +20 -6
  1221. package/dist/server/registerCaptureTools.js +12 -0
  1222. package/dist/server/registerCloseLifecycleTool.js +32 -3
  1223. package/dist/server/registerCutterTools.js +33 -0
  1224. package/dist/server/registerElectronTools.js +38 -17
  1225. package/dist/server/registerEnhancedTools.js +7 -6
  1226. package/dist/server/registerEvidenceTools.js +14 -10
  1227. package/dist/server/registerEvmTools.js +24 -11
  1228. package/dist/server/registerFirmwareTools.js +3 -11
  1229. package/dist/server/registerFlutterTools.js +17 -0
  1230. package/dist/server/registerFridaTools.js +205 -0
  1231. package/dist/server/registerFunctionComparisonTool.js +34 -11
  1232. package/dist/server/registerGdbTools.js +64 -0
  1233. package/dist/server/registerGoTools.js +9 -0
  1234. package/dist/server/registerInvestigationTools/helpers.js +2 -2
  1235. package/dist/server/registerInvestigationTools.js +12 -8
  1236. package/dist/server/registerJavaScriptRecoveryTool.js +4 -9
  1237. package/dist/server/registerJavaScriptRuntimeObservationTools.js +10 -11
  1238. package/dist/server/registerJebTools.js +16 -0
  1239. package/dist/server/registerManagedTools.js +11 -1
  1240. package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +4 -6
  1241. package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +3 -2
  1242. package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +3 -2
  1243. package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +3 -2
  1244. package/dist/server/registerNativeTools.js +14 -0
  1245. package/dist/server/registerOfficialTools.js +5 -0
  1246. package/dist/server/registerPcapTools.js +35 -0
  1247. package/dist/server/registerPeResourcesTool.js +9 -0
  1248. package/dist/server/registerProcessComparisonTool.js +14 -4
  1249. package/dist/server/registerRecordedCrashTools.js +4 -9
  1250. package/dist/server/registerReverseEngineeringTools.js +86 -0
  1251. package/dist/server/registerRizinDebugTools.js +53 -0
  1252. package/dist/server/registerRustTools.js +9 -0
  1253. package/dist/server/registerSessionRecordTools.js +21 -14
  1254. package/dist/server/registerSessionStatusTool.js +22 -4
  1255. package/dist/server/registerSessionTools.js +78 -34
  1256. package/dist/server/registerSignalTools.js +12 -0
  1257. package/dist/server/registerSqliteTools.js +9 -0
  1258. package/dist/server/registerWasmTools.js +46 -0
  1259. package/dist/server/registerWebModuleTool.js +4 -9
  1260. package/dist/server/registerWebNetworkCaptureTool.js +26 -17
  1261. package/dist/server/registerWebRuntimeTools.js +6 -5
  1262. package/dist/server/registerWebScriptTool.js +6 -3
  1263. package/dist/server/registerWebSourceLocationTool.js +4 -9
  1264. package/dist/server/retainedSummaryDelivery.js +28 -0
  1265. package/dist/server/sessionAvailabilityPolicy.js +3 -0
  1266. package/dist/server/toolRegistrationOptions.js +8 -0
  1267. package/dist/server/toolResult.js +68 -16
  1268. package/dist/server/toolResultEncoding.js +36 -3
  1269. package/dist/serverIdentity.js +17 -8
  1270. package/dist/signals/SigrokRecordingProvider.js +339 -0
  1271. package/dist/signals/parseDecoderDiscovery.js +65 -0
  1272. package/dist/sqlite/SqliteDatabaseFailures.js +134 -0
  1273. package/dist/sqlite/SqliteDatabaseInspection.js +421 -0
  1274. package/dist/sqlite/SqliteDatabaseLimits.js +16 -0
  1275. package/dist/sqlite/SqliteDatabaseProvider.js +295 -0
  1276. package/dist/sqlite/SqliteDatabaseSnapshot.js +156 -0
  1277. package/dist/sqlite/SqliteDatabaseWorker.js +46 -0
  1278. package/dist/sqlite/SqliteDatabaseWorkerExecution.js +112 -0
  1279. package/dist/wasm/WabtArtifactProvider.js +336 -0
  1280. package/dist/wasm/WabtFailures.js +101 -0
  1281. package/dist/wasm/WabtInterface.js +309 -0
  1282. package/dist/wasm/WabtOutput.js +60 -0
  1283. package/dist/wasm/WabtRelease.js +12 -0
  1284. package/dist/wasm/WabtString.js +48 -0
  1285. package/dist/wasm/WabtWat.js +147 -0
  1286. package/dist/wasm/WasmGlueAdapter.js +53 -0
  1287. package/dist/wasm/WasmInterfaceBudget.js +11 -0
  1288. package/dist/windows/WindowsNativeLoader.js +37 -7
  1289. package/dist/windows/WindowsOwnedProcess.js +150 -17
  1290. package/dist/windows/WindowsPrivateRuntime.js +34 -6
  1291. package/install.sh +157 -95
  1292. package/licenses/Apache-2.0.txt +202 -0
  1293. package/licenses/GCC-Runtime-Library-Exception-3.1.txt +73 -0
  1294. package/licenses/GPL-3.0.txt +674 -0
  1295. package/licenses/LGPL-2.0.txt +480 -0
  1296. package/licenses/MIT-template.txt +18 -0
  1297. package/licenses/MinGW-w64-runtime.txt +240 -0
  1298. package/licenses/Node-22.19.0-LICENSE.txt +2666 -0
  1299. package/licenses/README.md +68 -0
  1300. package/licenses/cfworker-MIT.txt +21 -0
  1301. package/licenses/dotnet-runtime-MIT.txt +23 -0
  1302. package/licenses/frida-17.23.2-COPYING.txt +50 -0
  1303. package/licenses/ghidra-12.1.4-DISCLAIMER.txt +13 -0
  1304. package/licenses/ghidra-12.1.4-LICENSE.txt +201 -0
  1305. package/licenses/ghidra-12.1.4-NOTICE.txt +49 -0
  1306. package/licenses/nativeaot-parser-MIT.txt +28 -0
  1307. package/licenses/npm-dependencies.txt +3612 -0
  1308. package/licenses/npm-runtime-notices.txt +8548 -0
  1309. package/licenses/upstream-sources.json +72 -0
  1310. package/licenses/xterm-MIT.txt +21 -0
  1311. package/native/windows/README.md +92 -11
  1312. package/native/windows/build/manifest.json +2 -2
  1313. package/native/windows/build/rea-windows-x64.node +0 -0
  1314. package/package.json +117 -22
  1315. package/scripts/electron-active-hook.cjs +4 -1
  1316. package/scripts/hopper-demo-x11.py +53 -3
  1317. package/scripts/prepack.mjs +5 -0
  1318. package/scripts/rea-android-workspace-guardian.mjs +46 -0
  1319. package/scripts/rea.mjs +44 -13
  1320. package/scripts/verify-windows-native-artifact.mjs +2 -2
  1321. package/skills/reverse-engineer-anything/SKILL.md +142 -20
  1322. package/skills/reverse-engineer-anything/references/connection-and-recovery.md +127 -0
  1323. package/skills/reverse-engineer-anything/references/evidence-workflows.md +31 -0
  1324. package/skills/reverse-engineer-anything/references/javascript-applications.md +118 -13
  1325. package/skills/reverse-engineer-anything/references/native-and-artifacts.md +147 -16
  1326. package/skills/reverse-engineer-anything/references/runtime-observation.md +57 -7
  1327. package/third_party/README.md +1 -1
  1328. package/third_party/wabt/README.md +24 -0
  1329. package/dist/browser/history/HarCaptureAdapter.js +0 -20
  1330. package/dist/cli/streamedJsonOutput.js +0 -135
  1331. package/dist/cliJsonFile.js +0 -179
  1332. /package/dist/{application/binary → process}/AbortablePromise.js +0 -0
@@ -1,6 +1,13 @@
1
1
  import { isBuiltin } from "node:module";
2
2
  import { posix } from "node:path";
3
+ import { normalizeJoinedLogicalPath, logicalPathEscapesRoot, } from "../../domain/artifactIdentity.js";
3
4
  import { admitsCanonicalPathSyntax, hasScheme, htmlUrlText, looksExternal, percentDecodeUrlPath, stripQueryAndFragment, } from "../../domain/artifactPathSyntax.js";
5
+ import { classifyPackageImportSpecifier, classifyPackageImportTargetString, lookupExactPackageImport, } from "../../domain/javascript/javascriptPackageImportAliases.js";
6
+ import { typescriptEmittedSourceCandidates, } from "../TypeScriptEmittedSourceCandidates.js";
7
+ import { isRelativeJavaScriptModuleSpecifier } from "../../domain/javascript/javascriptModuleSpecifier.js";
8
+ import { err, ok } from "../../domain/result.js";
9
+ /** Preserve an explicitly retained loader mode on graph relationships. */
10
+ export const moduleResolutionModeProperties = (mode) => mode === undefined ? {} : { resolution_mode: mode };
4
11
  const EXTENSIONS = [
5
12
  ".js",
6
13
  ".cjs",
@@ -11,147 +18,732 @@ const EXTENSIONS = [
11
18
  ".html",
12
19
  ".node",
13
20
  ];
14
- /** Resolve one declaration under its exact syntax/metadata context. */
15
- export const resolveArtifactPathByContext = (input) => resolvePackagePath(input, new Set());
16
- const resolvePackagePath = (input, packageChain, mode = "full", exportsTargetUrl = false) => {
17
- const rejected = rejectDeclaration(input);
18
- if (rejected !== null)
19
- return rejected;
20
- const candidate = contextualCandidate(input, exportsTargetUrl);
21
+ // A private URL namespace for logical artifact paths, including root packages.
22
+ // Encode inventory segments so filename punctuation remains literal in the base.
23
+ const PACKAGE_ARTIFACT_ROOT_URL = new URL("file:///rea-artifact/");
24
+ const encodePackageMetadataUrl = (path) => new URL(path.split("/").map(encodeURIComponent).join("/"), PACKAGE_ARTIFACT_ROOT_URL);
25
+ // URL identity cannot represent lone UTF-16 surrogates. Use request-local
26
+ // opaque segments only for structural admission, never inventory lookup. A
27
+ // target cannot spell these identities after URL's tab/newline preprocessing.
28
+ const packageMetadataUrl = (path, relativeTarget) => {
29
+ try {
30
+ return ok(encodePackageMetadataUrl(path));
31
+ }
32
+ catch (cause) {
33
+ if (!(cause instanceof URIError))
34
+ throw cause;
35
+ const reserved = new Set(`${path}\n${relativeTarget.replace(/[\t\n\r]/gu, "")}`.match(/rea-opaque-\d+/gu) ?? []);
36
+ const structuralSegments = new Set();
37
+ let nextIdentity = 0;
38
+ const structuralPath = path
39
+ .split("/")
40
+ .map((segment) => {
41
+ try {
42
+ return encodeURIComponent(segment);
43
+ }
44
+ catch (segmentCause) {
45
+ if (!(segmentCause instanceof URIError))
46
+ throw segmentCause;
47
+ let identity;
48
+ do
49
+ identity = `rea-opaque-${nextIdentity++}`;
50
+ while (reserved.has(identity));
51
+ reserved.add(identity);
52
+ structuralSegments.add(identity);
53
+ return identity;
54
+ }
55
+ })
56
+ .join("/");
57
+ return err({
58
+ structuralUrl: new URL(structuralPath, PACKAGE_ARTIFACT_ROOT_URL),
59
+ structuralSegments,
60
+ limitation: `Package metadata path ${JSON.stringify(path)} contains an unpaired UTF-16 surrogate and cannot be represented as a URL.`,
61
+ });
62
+ }
63
+ };
64
+ /** Resolve one declaration while preserving its original input identity. */
65
+ export const resolveArtifactPathByContext = (input) => {
66
+ const resolution = resolvePath(input);
67
+ const facts = {
68
+ declared_path: input.declaredPath,
69
+ resolution_context: input.context,
70
+ limitations: resolution.limitations,
71
+ ...(resolution.candidatePath === undefined
72
+ ? {}
73
+ : { candidate_path: resolution.candidatePath }),
74
+ ...(resolution.conditionalResolutions === undefined
75
+ ? {}
76
+ : { conditional_resolutions: resolution.conditionalResolutions }),
77
+ };
78
+ return resolution.status === "resolved"
79
+ ? {
80
+ ...facts,
81
+ resolved_path: resolution.resolvedPath,
82
+ resolution_status: resolution.status,
83
+ }
84
+ : { ...facts, resolved_path: null, resolution_status: resolution.status };
85
+ };
86
+ /** Project retained conditional identities without flattening them into display text. */
87
+ export const artifactPathResolutionProperties = (resolution) => ({
88
+ ...(resolution?.candidate_path === undefined
89
+ ? {}
90
+ : { candidate_path: resolution.candidate_path }),
91
+ ...(resolution?.conditional_resolutions === undefined
92
+ ? {}
93
+ : {
94
+ conditional_resolutions: resolution.conditional_resolutions.map((branch) => ({
95
+ mode: branch.mode,
96
+ resolution_status: branch.resolution_status,
97
+ resolved_path: branch.resolved_path,
98
+ limitations: [...branch.limitations],
99
+ ...(branch.candidate_path === undefined
100
+ ? {}
101
+ : { candidate_path: branch.candidate_path }),
102
+ })),
103
+ }),
104
+ });
105
+ const conditionalResolution = (mode, result) => ({
106
+ mode,
107
+ resolution_status: result.status,
108
+ resolved_path: result.resolvedPath,
109
+ limitations: result.limitations,
110
+ ...(result.candidatePath === undefined
111
+ ? {}
112
+ : { candidate_path: result.candidatePath }),
113
+ });
114
+ const resolvePath = (input) => {
115
+ if (input.runtimePathKind === "node-entrypoint")
116
+ return resolveNodeRuntimeEntrypoint(input);
117
+ if (input.moduleKind === "compiler-dependent") {
118
+ const imported = resolvePath({ ...input, moduleKind: "import" });
119
+ const required = resolvePath({ ...input, moduleKind: "require" });
120
+ const sameOutcome = imported.status === required.status &&
121
+ imported.resolvedPath === required.resolvedPath &&
122
+ imported.candidatePath === required.candidatePath;
123
+ const limitation = "Static TypeScript loader mode is compiler-dependent without retained compiler options. " +
124
+ (sameOutcome
125
+ ? "Node import and require resolution agree on this outcome."
126
+ : "Node import and require resolution disagree; neither branch is an established target.");
127
+ return sameOutcome
128
+ ? {
129
+ ...imported,
130
+ limitations: [
131
+ ...new Set([
132
+ ...imported.limitations,
133
+ ...required.limitations,
134
+ limitation,
135
+ ]),
136
+ ],
137
+ }
138
+ : {
139
+ resolvedPath: null,
140
+ status: "unavailable",
141
+ limitations: [limitation],
142
+ conditionalResolutions: [
143
+ conditionalResolution("import", imported),
144
+ conditionalResolution("require", required),
145
+ ],
146
+ };
147
+ }
148
+ if (input.runtimePathKind === "url-resource")
149
+ return resolveExactUrlResource(input);
150
+ if (input.runtimePathKind === "exact-file" && isRuntimePathDeclaration(input))
151
+ return resolveRuntimeEntrypoint(input);
152
+ // Package import keys are literal lookup identities, not artifact paths.
153
+ // The selected target is admitted separately by resolveExportTarget.
154
+ if (input.context === "module-specifier" &&
155
+ input.declaredPath.startsWith("#"))
156
+ return resolvePackageImportAlias(input, input.declaredPath);
157
+ const candidate = contextualCandidate(input);
21
158
  if (typeof candidate !== "string")
22
159
  return candidate;
23
- const confined = confineCandidate(input, candidate);
160
+ const confined = confineCandidate(candidate);
24
161
  if (typeof confined !== "string")
25
162
  return confined;
26
- if (input.context === "html-reference")
27
- return outcome(input, resolveFileCandidates(input, [confined]) ?? {
28
- resolvedPath: null,
29
- status: "not-found",
30
- limitations: [
31
- `The exact HTML resource ${confined} was not found among the selected application files.`,
32
- ],
33
- });
34
- // An exports target names one exact file; Node tries no extension or index.
35
- const resolved = exportsTargetUrl
36
- ? (resolveFileCandidates(input, [confined]) ??
37
- exactExportsTargetNotFound(confined))
38
- : mode === "files-and-index"
39
- ? (resolveFileCandidates(input, [
40
- ...fileCandidates(confined),
41
- ...indexCandidates(confined),
42
- ]) ?? notFoundCandidate())
43
- : resolveCandidate(input, confined, packageChain);
44
- return outcome(input, resolved);
45
- };
46
- const rejectDeclaration = (input) => {
47
- const declared = input.declaredPath;
48
- if (declared.length === 0)
49
- return unresolvedOutcome(input, "rejected", [
50
- "The declared path is empty.",
163
+ if (input.context === "html-reference" || input.context === "url-reference")
164
+ return (resolveFileCandidates(input, [confined]) ??
165
+ unresolvedCandidate("not-found", [
166
+ `The exact ${input.context === "html-reference" ? "HTML" : "URL"} resource ${confined} was not found among the selected application files.`,
167
+ ]));
168
+ const isModuleUrlPath = input.context === "module-specifier" &&
169
+ (isRelativeJavaScriptModuleSpecifier(input.declaredPath) ||
170
+ input.declaredPath.startsWith("/") ||
171
+ fileUrlPath(input.declaredPath) !== undefined);
172
+ const emittedSourceCandidates = isModuleUrlPath && input.moduleKind !== undefined
173
+ ? typescriptEmittedSourceCandidates(input.sourcePath, confined)
174
+ : [];
175
+ if (isModuleUrlPath && input.moduleKind === "import")
176
+ return (resolveRuntimeSourceCandidates(input, confined, emittedSourceCandidates) ?? notFoundCandidate());
177
+ return resolveCandidate(input, confined, new Set(), emittedSourceCandidates);
178
+ };
179
+ const resolveExactUrlResource = (input) => {
180
+ // Electron loadURL requires a protocol. A scheme-less string is not relative
181
+ // to the calling script; filesystem paths belong to loadFile.
182
+ if (!hasScheme(input.declaredPath))
183
+ return unresolvedCandidate("unavailable", [
184
+ "Electron loadURL requires a URL protocol; relative filesystem paths belong to loadFile.",
185
+ ]);
186
+ if (!/^file:/iu.test(input.declaredPath))
187
+ return unresolvedCandidate("external", [
188
+ "Only file URLs can be mapped to selected local application artifacts.",
51
189
  ]);
190
+ const urlContextCandidate = contextualCandidate(input);
191
+ if (typeof urlContextCandidate !== "string")
192
+ return urlContextCandidate;
193
+ const confined = confineCandidate(urlContextCandidate);
194
+ if (typeof confined !== "string")
195
+ return confined;
196
+ return (resolveFileCandidates(input, [confined]) ?? {
197
+ resolvedPath: null,
198
+ status: "not-found",
199
+ candidatePath: confined,
200
+ limitations: [
201
+ `The exact URL resource ${confined} was not found among the selected application files.`,
202
+ ],
203
+ });
204
+ };
205
+ const isRuntimePathDeclaration = (input) => input.context === "filesystem-expression" ||
206
+ (input.context === "module-specifier" &&
207
+ (isRelativeJavaScriptModuleSpecifier(input.declaredPath) ||
208
+ input.declaredPath.startsWith("/") ||
209
+ fileUrlPath(input.declaredPath) !== undefined));
210
+ const resolveNodeRuntimeEntrypoint = (input) => {
211
+ const { runtimePathKind: _runtimePathKind, ...sourceInput } = input;
212
+ const runtimeInput = { ...sourceInput, moduleKind: "require" };
213
+ if (!isRuntimePathDeclaration(runtimeInput))
214
+ return resolvePath(runtimeInput);
215
+ const candidate = contextualCandidate(runtimeInput);
216
+ if (typeof candidate !== "string")
217
+ return candidate;
218
+ const confined = confineCandidate(candidate);
219
+ if (typeof confined !== "string")
220
+ return confined;
221
+ // Node entrypoints use runtime file/directory probes. They do not originate
222
+ // in emitted TypeScript import syntax and cannot select a source substitute.
223
+ const resolution = resolveCandidate(runtimeInput, confined, new Set());
224
+ // Runtime entrypoint analysis has no extension or directory fallback, but
225
+ // retain the normalized loader path when that exact target is absent.
226
+ return resolution.status === "not-found" &&
227
+ resolution.candidatePath === undefined
228
+ ? { ...resolution, candidatePath: confined }
229
+ : resolution;
230
+ };
231
+ const resolveRuntimeEntrypoint = (input) => {
232
+ const rejected = rejectDeclaration(input.declaredPath);
233
+ if (rejected !== null)
234
+ return rejected;
235
+ if (hasScheme(input.declaredPath) || looksExternal(input.declaredPath))
236
+ return unresolvedCandidate("external", [
237
+ "Electron runtime entrypoints must identify local paths, not external URLs.",
238
+ ]);
239
+ const candidate = confineCandidate(relativeCandidate(input.sourcePath, input.declaredPath));
240
+ if (typeof candidate !== "string")
241
+ return candidate;
242
+ return (resolveFileCandidates(input, [candidate]) ?? {
243
+ resolvedPath: null,
244
+ status: "not-found",
245
+ candidatePath: candidate,
246
+ limitations: [
247
+ `The declared Electron runtime entrypoint ${candidate} was not found as an exact file among the selected application files; extension and directory fallback were not attempted.`,
248
+ ],
249
+ });
250
+ };
251
+ const resolveRuntimeSourceCandidates = (input, exactPath, sourceCandidates) => {
252
+ const exactCandidate = {
253
+ path: exactPath,
254
+ kind: "implementation",
255
+ };
256
+ for (const candidate of [exactCandidate, ...sourceCandidates]) {
257
+ const selected = findFileCandidate(input, candidate.path);
258
+ if (selected === null)
259
+ continue;
260
+ return candidate.kind === "declaration"
261
+ ? {
262
+ resolvedPath: null,
263
+ status: "unavailable",
264
+ candidatePath: candidate.path,
265
+ limitations: [
266
+ "Only a TypeScript declaration fallback was found; it does not establish the requested runtime module.",
267
+ ],
268
+ }
269
+ : selected;
270
+ }
271
+ return null;
272
+ };
273
+ const rejectDeclaration = (declared, literalPercent = false, allowEmptyPath = false) => {
274
+ if (declared.length === 0 && !allowEmptyPath)
275
+ return unresolvedCandidate("rejected", ["The declared path is empty."]);
52
276
  if (declared.includes("\0") || declared.includes("\\"))
53
- return unresolvedOutcome(input, "rejected", [
277
+ return unresolvedCandidate("rejected", [
54
278
  "NUL and backslash path syntax are not admitted for canonical artifact paths.",
55
279
  ]);
56
- if (!admitsCanonicalPathSyntax(declared))
57
- return unresolvedOutcome(input, "rejected", [
280
+ if (!literalPercent && !admitsCanonicalPathSyntax(declared))
281
+ return unresolvedCandidate("rejected", [
58
282
  "Encoded dot or separator bytes are rejected before artifact path resolution.",
59
283
  ]);
60
284
  return null;
61
285
  };
62
- const contextualCandidate = (input, exportsTargetUrl) => {
286
+ /**
287
+ * Node's CommonJS loader never percent-decodes a request or a legacy package
288
+ * main, so `%2e` and `%2f` there are literal filename bytes, not encoded dots
289
+ * or separators. Root confinement still applies to the joined candidate.
290
+ */
291
+ const declaresLiteralPercent = (input) => input.moduleKind === "require" &&
292
+ (input.context === "module-specifier" ||
293
+ input.context === "package-entrypoint");
294
+ const contextualCandidate = (input) => {
63
295
  const { context } = input;
64
- let declared = context === "html-reference" ||
65
- context === "url-reference" ||
66
- exportsTargetUrl ||
67
- (context === "module-specifier" && input.moduleKind !== "require")
68
- ? stripQueryAndFragment(input.declaredPath)
69
- : input.declaredPath;
70
296
  if (context === "html-reference")
71
297
  return htmlCandidate(input);
72
- if (context === "module-specifier") {
298
+ // URL suffixes are evidence, not pathname bytes. Admit only the path while
299
+ // retaining the complete declaration on the resolution result.
300
+ let declared = context === "url-reference"
301
+ ? stripQueryAndFragment(input.declaredPath)
302
+ : input.declaredPath;
303
+ if (context === "url-reference" && declared.length === 0)
304
+ return input.runtimePathKind === "url-resource"
305
+ ? unresolvedCandidate("unavailable", [
306
+ "A suffix-only runtime URL requires the window's current document URL; the calling script does not establish that base.",
307
+ ])
308
+ : unresolvedCandidate("rejected", [
309
+ "The URL reference contains no pathname, and its base document is not established by this analysis.",
310
+ ]);
311
+ if (context === "module-specifier" && /^file:/iu.test(declared)) {
73
312
  const fileUrl = fileUrlPath(declared);
313
+ if (fileUrl === null)
314
+ return unresolvedCandidate("rejected", [
315
+ "The file URL path contains syntax that cannot identify a canonical artifact path.",
316
+ ]);
74
317
  if (fileUrl !== undefined)
75
- return fileUrl;
318
+ return input.moduleKind === "require"
319
+ ? unresolvedCandidate("external", [
320
+ "Node CommonJS require specifiers do not resolve file URLs as local artifacts.",
321
+ ])
322
+ : fileUrl;
323
+ return unresolvedCandidate("external", [
324
+ "File URL authorities or invalid file URL forms cannot be mapped to artifact-local paths.",
325
+ ]);
326
+ }
327
+ const hasUrlPathSemantics = context === "module-specifier" && input.moduleKind === "import";
328
+ if (hasUrlPathSemantics)
329
+ declared = htmlUrlText(declared);
330
+ const rejected = rejectDeclaration(declared, declaresLiteralPercent(input) || hasUrlPathSemantics);
331
+ if (rejected !== null)
332
+ return rejected;
333
+ if (context === "module-specifier") {
76
334
  if (hasScheme(declared))
77
- return unresolvedOutcome(input, "external", [
335
+ return unresolvedCandidate("external", [
78
336
  "URL and Node builtin schemes are outside static artifact module resolution.",
79
337
  ]);
80
- if (!declared.startsWith(".") && !declared.startsWith("/"))
81
- return bareModuleCandidate(input, declared);
338
+ if (!isRelativeJavaScriptModuleSpecifier(declared) &&
339
+ !declared.startsWith("/"))
340
+ return bareModuleCandidate(input);
341
+ if (input.moduleKind !== "require") {
342
+ if (/%(?:2f|5c)/iu.test(stripQueryAndFragment(declared)))
343
+ return unresolvedCandidate("rejected", [
344
+ "ES module URL paths cannot contain percent-encoded slash or backslash bytes.",
345
+ ]);
346
+ const decoded = decodeModuleUrlPath(stripQueryAndFragment(declared));
347
+ if (typeof decoded !== "string")
348
+ return decoded;
349
+ declared = decoded;
350
+ }
82
351
  }
83
352
  else if (looksExternal(declared))
84
- return unresolvedOutcome(input, "external", [
353
+ return unresolvedCandidate("external", [
85
354
  "URL schemes and protocol-relative URLs are outside this local artifact path context.",
86
355
  ]);
87
- // Exports targets use URL paths for both loaders; legacy main fields remain literal.
88
- if (exportsTargetUrl ||
89
- (context === "module-specifier" && input.moduleKind !== "require")) {
90
- try {
91
- declared = decodeURIComponent(declared);
92
- }
93
- catch (cause) {
94
- void cause;
95
- return unresolvedOutcome(input, "rejected", [
96
- "The module URL path contains malformed percent encoding.",
356
+ if (context === "url-reference") {
357
+ // A file base gives raw drive-letter segments special meaning, including
358
+ // after dot segments reach the root. Parse before percent decoding so an
359
+ // encoded drive-like filename stays literal. The synthetic base establishes
360
+ // only this ambiguity; it does not establish the source's runtime scheme.
361
+ const sourceUrlPath = input.sourcePath
362
+ .split("/")
363
+ .map(encodeURIComponent)
364
+ .join("/");
365
+ const fileReference = URL.parse(declared, `file:///${sourceUrlPath}`);
366
+ if (fileReference === null)
367
+ return unresolvedCandidate("rejected", [
368
+ "The URL reference cannot be parsed as a URL.",
97
369
  ]);
98
- }
99
- if (declared.includes("\0"))
100
- return unresolvedOutcome(input, "rejected", [
101
- "The decoded module URL path contains NUL.",
370
+ if (/^\/[A-Za-z]:(?:\/|$)/u.test(fileReference.pathname))
371
+ return unresolvedCandidate("unavailable", [
372
+ "Drive-letter URL paths cannot be mapped without the source URL scheme and filesystem root.",
373
+ ]);
374
+ const decoded = percentDecodeUrlPath(declared);
375
+ if (decoded === null)
376
+ return unresolvedCandidate("rejected", [
377
+ "The URL reference path percent-decodes to NUL or to bytes that are not UTF-8.",
378
+ ]);
379
+ // Empty URL segments are significant; canonical filesystem paths cannot
380
+ // preserve them, including their interaction with following dot segments.
381
+ if (decoded.includes("//"))
382
+ return unresolvedCandidate("unavailable", [
383
+ "Repeated URL path separators cannot be mapped to an exact canonical artifact file.",
102
384
  ]);
385
+ return exactUrlPathCandidate(decoded, relativeCandidate(input.sourcePath, decoded), "URL");
386
+ }
387
+ const candidate = relativeCandidate(input.sourcePath, declared);
388
+ return context === "module-specifier" && input.moduleKind === "import"
389
+ ? exactUrlPathCandidate(declared, candidate, "module URL")
390
+ : candidate;
391
+ };
392
+ const decodeModuleUrlPath = (declared) => {
393
+ let decoded;
394
+ try {
395
+ decoded = decodeURIComponent(declared);
396
+ }
397
+ catch (cause) {
398
+ void cause;
399
+ return unresolvedCandidate("rejected", [
400
+ "The module URL path contains malformed percent encoding.",
401
+ ]);
103
402
  }
104
- const relative = declared.startsWith("/") ? declared.slice(1) : declared;
105
- return declared.startsWith("/")
106
- ? relative
107
- : posix.join(posix.dirname(input.sourcePath), relative);
403
+ return decoded.includes("\0")
404
+ ? unresolvedCandidate("rejected", [
405
+ "The decoded module URL path contains NUL.",
406
+ ])
407
+ : decoded;
108
408
  };
109
- const bareModuleCandidate = (input, declared) => {
110
- const packageName = barePackageName(declared);
111
- if (packageName === null || isBuiltin(declared) || declared.startsWith("#"))
112
- return unresolvedOutcome(input, "external", [
113
- "The bare specifier is a Node builtin, package import map, or invalid package name.",
409
+ const relativeCandidate = (sourcePath, declared) => declared.startsWith("/")
410
+ ? declared.slice(1)
411
+ : posix.join(posix.dirname(sourcePath), declared);
412
+ const bareModuleCandidate = (input) => {
413
+ const request = parseBarePackageRequest(input.declaredPath, input.moduleKind);
414
+ if (request === null || isBuiltin(input.declaredPath))
415
+ return unresolvedCandidate("external", [
416
+ "The bare specifier is a Node builtin or invalid package name.",
114
417
  ]);
115
- if (declared !== packageName)
116
- return unresolvedOutcome(input, "external", [
117
- "Bare package subpaths remain unresolved unless an exact package-exports subpath model is available.",
418
+ if (input.moduleKind === "import" &&
419
+ (request.packageName.startsWith(".") || request.packageName.includes("%")))
420
+ return unresolvedCandidate("rejected", [
421
+ "ES module package names cannot start with a dot or contain percent signs.",
118
422
  ]);
423
+ const self = packageSelfCandidate(input, request);
424
+ if (self !== null)
425
+ return self;
426
+ // ESM constructs a package.json URL; its parsed identity is not a literal
427
+ // dependency directory. Self resolution above still uses the exact name.
428
+ let dependencyDirectory = posix.join("node_modules", request.packageName);
429
+ if (input.moduleKind === "import") {
430
+ const metadataUrl = new URL(`./node_modules/${request.packageName}/package.json`, PACKAGE_ARTIFACT_ROOT_URL);
431
+ if (!metadataUrl.pathname.endsWith("/package.json"))
432
+ return unresolvedCandidate("external", [
433
+ `ESM package name ${JSON.stringify(request.packageName)} produces a dependency URL whose pathname does not name package.json; no literal or suffix-stripped package directory was searched.`,
434
+ ]);
435
+ const decoded = decodeModuleUrlPath(metadataUrl.pathname.slice(PACKAGE_ARTIFACT_ROOT_URL.pathname.length));
436
+ if (typeof decoded !== "string")
437
+ return decoded;
438
+ const confined = confineCandidate(decoded);
439
+ if (typeof confined !== "string")
440
+ return confined;
441
+ dependencyDirectory = posix.dirname(confined);
442
+ }
119
443
  const source = input.files.get(input.sourcePath);
444
+ let nearestNotFound = null;
445
+ for (const directory of packageLookupDirectories(input)) {
446
+ const candidate = posix.join(directory, dependencyDirectory);
447
+ const metadata = readPackageMetadata(input, candidate);
448
+ const continueCommonJsLookup = input.moduleKind === "require" &&
449
+ (metadata.kind === "absent" ||
450
+ (metadata.kind === "available" &&
451
+ (!request.dependencyExportsEligible ||
452
+ metadata.exports === undefined)));
453
+ const packageResolution = metadata.kind !== "absent" ||
454
+ hasContainerDirectory(input.files, candidate, source?.container_sha256, input.directoryPaths, input.unanalyzedFiles)
455
+ ? resolvePackageDependency(input, candidate, request, metadata)
456
+ : request.packageSubpath === "." && input.moduleKind !== "import"
457
+ ? resolveFileCandidates(input, fileCandidates(candidate, input.moduleKind))
458
+ : null;
459
+ if (packageResolution !== null) {
460
+ if (continueCommonJsLookup &&
461
+ packageResolution.status === "not-found" &&
462
+ packageResolution.stopsAncestorLookup !== true) {
463
+ nearestNotFound ??= packageResolution;
464
+ }
465
+ else
466
+ return packageResolution;
467
+ }
468
+ }
469
+ if (nearestNotFound !== null)
470
+ return nearestNotFound;
471
+ return unresolvedCandidate("external", [
472
+ "No matching bare package was inventoried in an enclosing node_modules directory.",
473
+ ]);
474
+ };
475
+ function* packageLookupDirectories(input) {
120
476
  let directory = posix.dirname(input.sourcePath);
121
477
  while (true) {
122
- const candidate = posix.join(directory, "node_modules", declared);
123
- if (hasContainerCandidate(input.files, candidate, source?.container_sha256))
124
- return candidate;
478
+ if (input.moduleKind !== "require" ||
479
+ posix.basename(directory) !== "node_modules")
480
+ yield directory;
481
+ if (directory === "." || directory === "")
482
+ return;
483
+ directory = posix.dirname(directory);
484
+ }
485
+ }
486
+ /**
487
+ * Nearest same-container package.json, stopping at a `node_modules` directory
488
+ * so a nested package cannot inherit an ancestor's map.
489
+ */
490
+ const enclosingPackageMetadata = (input) => {
491
+ let directory = posix.dirname(input.sourcePath);
492
+ while (posix.basename(directory) !== "node_modules") {
493
+ const metadata = readPackageMetadata(input, directory);
494
+ if (metadata.kind !== "absent")
495
+ return metadata;
125
496
  if (directory === "." || directory === "")
126
497
  break;
127
498
  directory = posix.dirname(directory);
128
499
  }
129
- return unresolvedOutcome(input, "external", [
130
- "No matching bare package was inventoried in an enclosing node_modules directory.",
131
- ]);
500
+ return { kind: "none" };
501
+ };
502
+ /**
503
+ * Resolve an exact `#alias` against the importer's enclosing `imports` map.
504
+ * Selected relative targets are exact files; patterns, recursive aliases, and
505
+ * external-package targets stay unresolved without falling through.
506
+ */
507
+ const resolvePackageImportAlias = (input, specifier) => {
508
+ const classified = classifyPackageImportSpecifier(specifier);
509
+ if (classified.kind === "invalid")
510
+ return unresolvedCandidate("rejected", [
511
+ `The package import specifier ${JSON.stringify(specifier)} is invalid; "#" and specifiers that end with "/" are not valid import aliases.`,
512
+ ]);
513
+ if (classified.kind === "pattern")
514
+ return unresolvedCandidate("external", [
515
+ `Wildcard and directory package import aliases remain unresolved; ${JSON.stringify(specifier)} is not an exact imports key.`,
516
+ ]);
517
+ const metadata = enclosingPackageMetadata(input);
518
+ if (metadata.kind === "none")
519
+ return unresolvedCandidate("external", [
520
+ `No enclosing package.json defines package import alias ${specifier}; package import maps do not cross package scopes.`,
521
+ ]);
522
+ if (metadata.kind === "unavailable")
523
+ return unresolvedCandidate("unavailable", [metadata.limitation]);
524
+ const lookup = lookupExactPackageImport(metadata.imports, specifier);
525
+ if (lookup.kind === "undefined-map")
526
+ return unresolvedCandidate("external", [
527
+ `Package metadata ${metadata.path} does not define package import alias ${specifier}.`,
528
+ ]);
529
+ if (lookup.kind === "missing-key")
530
+ return unresolvedCandidate("external", [
531
+ `Package metadata ${metadata.path} does not define package import alias ${specifier}; it declares ${lookup.declared.join(", ") || "no imports keys"}.`,
532
+ ]);
533
+ if (lookup.kind === "pattern-unresolved")
534
+ return unresolvedCandidate("external", [
535
+ `Wildcard package import aliases remain unresolved; package metadata ${metadata.path} has no exact imports key ${specifier}.`,
536
+ ]);
537
+ const selected = selectExportTarget(lookup.target, packageExportConditions(input.moduleKind), metadata.path, "imports");
538
+ if (selected.kind === "invalid" || selected.kind === "invalid-config")
539
+ return unresolvedCandidate("rejected", [
540
+ `Package metadata ${metadata.path}: ${selected.limitation}`,
541
+ ]);
542
+ if (selected.kind === "unmatched")
543
+ return unresolvedCandidate("external", [
544
+ `Package metadata ${metadata.path} declares no imports target for alias ${specifier} under the active conditions; it declares ${selected.declared.join(", ") || "no conditions"}.`,
545
+ ]);
546
+ if (selected.kind === "blocked")
547
+ return unresolvedCandidate("external", [
548
+ `Package metadata ${metadata.path} blocks import alias ${specifier} with ${selected.cause === "null" ? "an explicit null imports target" : "an empty imports target array"}.`,
549
+ ]);
550
+ if (selected.kind === "non-relative") {
551
+ const target = classifyPackageImportTargetString(selected.value);
552
+ return unresolvedCandidate("external", [
553
+ target.kind === "recursive"
554
+ ? `Recursive package import aliases remain unresolved; package metadata ${metadata.path} maps ${specifier} to ${JSON.stringify(target.target)}.`
555
+ : `External-package import targets remain unresolved; package metadata ${metadata.path} maps ${specifier} to ${JSON.stringify(target.target)}.`,
556
+ ]);
557
+ }
558
+ return resolveExportTarget(input, metadata.path, selected, "imports");
559
+ };
560
+ /** Self references use the nearest package scope before dependency lookup. */
561
+ const packageSelfCandidate = (input, request) => {
562
+ if (input.moduleKind === undefined || !input.files.has(input.sourcePath))
563
+ return null;
564
+ const metadata = enclosingPackageMetadata(input);
565
+ if (metadata.kind === "none")
566
+ return null;
567
+ if (metadata.kind === "unavailable")
568
+ return unresolvedCandidate("unavailable", [metadata.limitation]);
569
+ if (metadata.name === undefined || metadata.exports === undefined)
570
+ return null;
571
+ let subpath;
572
+ if (input.moduleKind === "import") {
573
+ if (metadata.name !== request.packageName)
574
+ return null;
575
+ subpath = request.packageSubpath;
576
+ }
577
+ else if (input.declaredPath === metadata.name) {
578
+ subpath = ".";
579
+ }
580
+ else if (input.declaredPath.startsWith(`${metadata.name}/`)) {
581
+ subpath = `.${input.declaredPath.slice(metadata.name.length)}`;
582
+ }
583
+ else
584
+ return null;
585
+ // Self resolution does not apply the CommonJS dependency-name matcher.
586
+ return resolvePackageExports(input, metadata.path, subpath, metadata.exports);
587
+ };
588
+ /** Resolve an installed dependency using one parsed request and its metadata. */
589
+ const resolvePackageDependency = (input, directory, request, metadata) => {
590
+ const subpath = request.packageSubpath;
591
+ if (request.dependencyExportsEligible && metadata.kind === "unavailable")
592
+ return unresolvedCandidate("unavailable", [metadata.limitation]);
593
+ const rawExports = request.dependencyExportsEligible && metadata.kind === "available"
594
+ ? metadata.exports
595
+ : undefined;
596
+ if (rawExports === undefined) {
597
+ if (subpath === ".")
598
+ return ((input.moduleKind === "import"
599
+ ? null
600
+ : resolveFileCandidates(input, fileCandidates(directory, input.moduleKind))) ?? resolveDirectory(input, directory, metadata, new Set()));
601
+ if (input.moduleKind === "import")
602
+ return resolveLegacyEsmSubpath(input, directory, subpath);
603
+ const candidate = confineCandidate(`${directory}/${subpath.slice(2)}`);
604
+ return typeof candidate === "string"
605
+ ? resolveCandidate(input, candidate, new Set())
606
+ : candidate;
607
+ }
608
+ return resolvePackageExports(input, posix.join(directory, "package.json"), subpath, rawExports);
609
+ };
610
+ /** Legacy ESM package subpaths are exact URLs, never extension or directory lookups. */
611
+ const resolveLegacyEsmSubpath = (input, directory, subpath) => {
612
+ const declarationRejection = rejectDeclaration(stripQueryAndFragment(htmlUrlText(subpath)));
613
+ if (declarationRejection !== null)
614
+ return declarationRejection;
615
+ const metadataUrl = packageMetadataUrl(posix.join(directory, "package.json"), subpath);
616
+ const url = new URL(subpath, metadataUrl.ok ? metadataUrl.value : metadataUrl.error.structuralUrl);
617
+ if (!url.pathname.startsWith(PACKAGE_ARTIFACT_ROOT_URL.pathname))
618
+ return unresolvedCandidate("rejected", [
619
+ "The resolved candidate escapes the canonical artifact root.",
620
+ ]);
621
+ const encodedPath = url.pathname.slice(PACKAGE_ARTIFACT_ROOT_URL.pathname.length);
622
+ const rejected = rejectDeclaration(encodedPath);
623
+ if (rejected !== null)
624
+ return rejected;
625
+ const decoded = decodeModuleUrlPath(encodedPath);
626
+ if (typeof decoded !== "string")
627
+ return decoded;
628
+ const candidate = confineCandidate(decoded);
629
+ if (typeof candidate !== "string")
630
+ return candidate;
631
+ if (urlPathIsDirectory(url.pathname))
632
+ return unresolvedCandidate("rejected", [
633
+ `ESM package subpath ${JSON.stringify(input.declaredPath)} has URL directory form; directory imports are unsupported and no exact-file, package main or index lookup was attempted.`,
634
+ ]);
635
+ const unrepresentableBase = metadataUrl.ok ? undefined : metadataUrl.error;
636
+ if (unrepresentableBase !== undefined &&
637
+ url.pathname
638
+ .split("/")
639
+ .some((segment) => unrepresentableBase.structuralSegments.has(segment)))
640
+ return unresolvedCandidate("unavailable", [unrepresentableBase.limitation]);
641
+ const file = resolveFileCandidates(input, [candidate]);
642
+ if (file !== null)
643
+ return file;
644
+ const source = input.files.get(input.sourcePath);
645
+ if (hasContainerDirectory(input.files, candidate, source?.container_sha256, input.directoryPaths, input.unanalyzedFiles))
646
+ return unresolvedCandidate("rejected", [
647
+ `ESM package subpath ${candidate} names a directory; directory imports are unsupported and package main or index lookup was not attempted.`,
648
+ ]);
649
+ return exactPackageTargetNotFound(candidate, "ESM subpath");
650
+ };
651
+ const resolvePackageExports = (input, packagePath, subpath, rawExports) => {
652
+ const exported = selectPackageExport(rawExports, subpath, input.moduleKind, packagePath);
653
+ if (exported.status === "rejected")
654
+ return unresolvedCandidate("rejected", [
655
+ `Package metadata ${packagePath}: ${exported.limitation}`,
656
+ ]);
657
+ if (exported.status === "unmatched")
658
+ return unresolvedCandidate("external", [
659
+ `Directory package metadata ${packagePath} declares no exports target ${subpath === "." ? "for the active conditions" : `for subpath ${subpath}`}; exports encapsulation permits no file or index lookup. It declares ${exported.declared.join(", ") || "a root target only"}.`,
660
+ ]);
661
+ if (exported.status === "blocked")
662
+ return unresolvedCandidate("external", [
663
+ `Directory package metadata ${packagePath} blocks subpath ${subpath} with ${exported.cause === "null" ? "an explicit null exports target" : "an empty exports target array"}.`,
664
+ ]);
665
+ return resolveExportTarget(input, packagePath, exported);
666
+ };
667
+ /** An exports or import target is a URL naming one exact file for both Node loaders. */
668
+ const resolveExportTarget = (input, packagePath, target, mapKind = "exports") => {
669
+ const withTargetSource = (outcome) => ({
670
+ ...outcome,
671
+ limitations: outcome.limitations.map((reason) => `Package metadata ${packagePath}, ${mapKind} target ${JSON.stringify(target.value)}: ${reason}`),
672
+ });
673
+ // Node's CommonJS finalizer checks the serialized URL, including suffixes;
674
+ // its ESM finalizer checks only the pathname. Neither error retries arrays.
675
+ if (input.moduleKind === "require" && /%(?:2f|5c)/iu.test(target.url.href))
676
+ return withTargetSource(unresolvedCandidate("rejected", [
677
+ "The selected package URL contains encoded separator bytes.",
678
+ ]));
679
+ const encodedPath = target.url.pathname.slice(PACKAGE_ARTIFACT_ROOT_URL.pathname.length);
680
+ // Package targets are URLs for both loaders, so their percent bytes encode.
681
+ const rejected = rejectDeclaration(encodedPath, false);
682
+ if (rejected !== null)
683
+ return withTargetSource(rejected);
684
+ const decoded = decodeModuleUrlPath(encodedPath);
685
+ if (typeof decoded !== "string")
686
+ return withTargetSource(decoded);
687
+ const candidate = confineCandidate(decoded);
688
+ if (typeof candidate !== "string")
689
+ return withTargetSource(candidate);
690
+ if (target.lookupLimitation !== undefined)
691
+ return unresolvedCandidate("unavailable", [target.lookupLimitation]);
692
+ return (resolveFileCandidates(input, [candidate]) ??
693
+ withTargetSource(exactPackageTargetNotFound(candidate, mapKind)));
132
694
  };
133
- const barePackageName = (specifier) => {
695
+ const parseBarePackageRequest = (specifier, moduleKind) => {
134
696
  const segments = specifier.split("/");
135
- if (specifier.startsWith("@"))
136
- return segments.length >= 2 && segments[0] !== "" && segments[1] !== ""
137
- ? `${segments[0]}/${segments[1]}`
138
- : null;
139
- return segments[0] === "" ? null : (segments[0] ?? null);
140
- };
141
- const hasContainerCandidate = (files, candidate, containerSha256) => [
142
- ...fileCandidates(candidate),
143
- ...indexCandidates(candidate),
144
- posix.join(candidate, "package.json"),
145
- ].some((path) => {
146
- const file = files.get(path);
147
- return (file !== undefined &&
148
- (containerSha256 === undefined ||
149
- file.container_sha256 === containerSha256));
150
- });
697
+ let packageName = segments[0] ?? "";
698
+ if (packageName === "")
699
+ return null;
700
+ if (specifier.startsWith("@")) {
701
+ const packageSegment = segments[1];
702
+ if (packageSegment === undefined || packageSegment === "")
703
+ return null;
704
+ packageName = `${packageName}/${packageSegment}`;
705
+ }
706
+ // Node's CommonJS exports matcher excludes percent-containing package names.
707
+ // Compare the captured name so a scoped name cannot fall back to its scope.
708
+ const dependencyExportsEligible = moduleKind !== "require" ||
709
+ /^((?:@[^/\\%]+\/)?[^./\\%][^/\\%]*)(\/.*)?$/.exec(specifier)?.[1] ===
710
+ packageName;
711
+ return {
712
+ packageName,
713
+ packageSubpath: `.${specifier.slice(packageName.length)}`,
714
+ dependencyExportsEligible,
715
+ };
716
+ };
717
+ const hasContainerDirectory = (files, candidate, containerSha256, directoryPaths, unanalyzedFiles) => {
718
+ if (directoryPaths?.has(candidate) === true)
719
+ return true;
720
+ if ([...indexCandidates(candidate), posix.join(candidate, "package.json")].some((path) => {
721
+ const file = files.get(path);
722
+ return (file !== undefined &&
723
+ (containerSha256 === undefined ||
724
+ file.container_sha256 === containerSha256));
725
+ }))
726
+ return true;
727
+ // Inventory has files rather than directory entries. Any same-container
728
+ // descendant establishes a package directory even without package.json.
729
+ const prefix = `${candidate}/`;
730
+ for (const [path, file] of files)
731
+ if (path.startsWith(prefix) &&
732
+ (containerSha256 === undefined ||
733
+ file.container_sha256 === containerSha256))
734
+ return true;
735
+ return unanalyzedFiles?.hasDirectory(candidate, containerSha256) ?? false;
736
+ };
151
737
  const htmlCandidate = (input) => {
152
738
  const declared = stripQueryAndFragment(htmlUrlText(input.declaredPath));
739
+ // HTML owns URL-text normalization and pathname admission. A nonempty URL
740
+ // reference may have no pathname; suffix bytes remain declaration evidence.
741
+ // HTML references are URL text, so percent bytes still encode.
742
+ const rejected = rejectDeclaration(declared, false, input.declaredPath !== "");
743
+ if (rejected !== null)
744
+ return rejected;
153
745
  if (looksExternal(declared))
154
- return unresolvedOutcome(input, "external", [
746
+ return unresolvedCandidate("external", [
155
747
  "External HTML references are not mapped to local artifact assets.",
156
748
  ]);
157
749
  const rawBase = input.htmlBaseHref;
@@ -159,18 +751,12 @@ const htmlCandidate = (input) => {
159
751
  ? rawBase
160
752
  : stripQueryAndFragment(htmlUrlText(rawBase));
161
753
  if (base !== undefined && base !== null && looksExternal(base))
162
- return unresolvedOutcome(input, "external", [
754
+ return unresolvedCandidate("external", [
163
755
  "The document base href is external, so its script reference is not a local artifact path.",
164
756
  ]);
165
- // Removing URL tabs and newlines can join an encoded dot or separator that
166
- // the raw declaration split, so admit the parsed URL text again.
167
- if (!admitsCanonicalPathSyntax(declared))
168
- return unresolvedOutcome(input, "rejected", [
169
- "Encoded dot or separator bytes are rejected before artifact path resolution.",
170
- ]);
171
757
  const declaredPath = percentDecodeUrlPath(declared);
172
758
  if (declaredPath === null)
173
- return unresolvedOutcome(input, "rejected", [
759
+ return unresolvedCandidate("rejected", [
174
760
  "The HTML reference path percent-decodes to NUL or to bytes that are not UTF-8.",
175
761
  ]);
176
762
  if (declaredPath.startsWith("/"))
@@ -183,213 +769,328 @@ const htmlCandidate = (input) => {
183
769
  // admission rules a declared path gets so it cannot smuggle traversal or
184
770
  // separator syntax past canonicalization.
185
771
  if (!admitsCanonicalPathSyntax(base))
186
- return unresolvedOutcome(input, "rejected", [
772
+ return unresolvedCandidate("rejected", [
187
773
  "The document base href uses NUL, backslash, or encoded dot and separator bytes that are not admitted for canonical artifact paths.",
188
774
  ]);
189
775
  const decodedBase = percentDecodeUrlPath(base);
190
776
  if (decodedBase === null)
191
- return unresolvedOutcome(input, "rejected", [
777
+ return unresolvedCandidate("rejected", [
192
778
  "The document base href path percent-decodes to NUL or to bytes that are not UTF-8.",
193
779
  ]);
194
780
  const basePath = decodedBase.startsWith("/")
195
781
  ? decodedBase.slice(1)
196
782
  : posix.join(posix.dirname(input.sourcePath), decodedBase);
197
783
  if (declaredPath === "")
198
- return emptyHtmlReference(input, decodedBase, basePath);
784
+ return exactUrlPathCandidate(decodedBase, basePath, "HTML");
199
785
  return posix.join(htmlBaseDirectory(decodedBase, basePath), declaredPath);
200
786
  };
201
- const emptyHtmlReference = (input, base, basePath) => {
202
- if (!htmlBaseIsDirectory(base))
203
- return basePath;
204
- const confined = confineCandidate(input, basePath);
787
+ const exactUrlPathCandidate = (declared, candidate, kind) => {
788
+ if (!urlPathIsDirectory(declared))
789
+ return candidate;
790
+ const confined = confineCandidate(candidate);
205
791
  if (typeof confined !== "string")
206
792
  return confined;
207
- return unresolvedOutcome(input, "not-found", [
208
- `The HTML reference resolves to directory ${confined || "."}, not an exact selected application file.`,
793
+ return unresolvedCandidate("not-found", [
794
+ `The ${kind} reference resolves to directory ${confined || "."}, not an exact selected application file.`,
209
795
  ]);
210
796
  };
211
- /**
212
- * The directory a relative HTML reference resolves against. A base path
213
- * ending in "/" or in a "." or ".." segment is already a directory, because a
214
- * relative reference resolves against the base URL's directory and those
215
- * segments are dropped rather than stepped through.
216
- */
217
- const htmlBaseIsDirectory = (base) => base.endsWith("/") ||
218
- base.endsWith("/.") ||
219
- base.endsWith("/..") ||
220
- base === "." ||
221
- base === "..";
222
- const htmlBaseDirectory = (base, basePath) => htmlBaseIsDirectory(base) ? basePath : posix.dirname(basePath);
223
- const confineCandidate = (input, candidate) => {
224
- const normalized = posix.normalize(candidate);
225
- if (normalized === ".." ||
226
- normalized.startsWith("../") ||
227
- normalized.startsWith("/"))
228
- return unresolvedOutcome(input, "rejected", [
797
+ /** Whether a URL path retains directory form after dot-segment normalization. */
798
+ const urlPathIsDirectory = (path) => path.endsWith("/") ||
799
+ path.endsWith("/.") ||
800
+ path.endsWith("/..") ||
801
+ path === "." ||
802
+ path === "..";
803
+ const htmlBaseDirectory = (base, basePath) => urlPathIsDirectory(base) ? basePath : posix.dirname(basePath);
804
+ const confineCandidate = (candidate) => {
805
+ const normalized = normalizeJoinedLogicalPath(candidate);
806
+ if (logicalPathEscapesRoot(normalized))
807
+ return unresolvedCandidate("rejected", [
229
808
  "The resolved candidate escapes the canonical artifact root.",
230
809
  ]);
231
810
  return normalized === "." ? "" : normalized;
232
811
  };
233
- const resolveCandidate = (input, candidate, packageChain) => {
234
- const direct = resolveFileCandidates(input, fileCandidates(candidate));
235
- if (direct !== null)
236
- return direct;
812
+ const readPackageMetadata = (input, directory) => {
813
+ const path = posix.join(directory, "package.json");
814
+ const file = input.files.get(path);
237
815
  const source = input.files.get(input.sourcePath);
238
- const packagePath = posix.join(candidate, "package.json");
239
- const packageFile = input.files.get(packagePath);
240
- if (packageFile === undefined ||
241
- (source !== undefined &&
242
- packageFile.container_sha256 !== source.container_sha256))
243
- return (resolveFileCandidates(input, indexCandidates(candidate)) ??
244
- notFoundCandidate());
245
- if (!packageFile.text.included)
246
- return {
247
- resolvedPath: null,
248
- status: "unavailable",
249
- limitations: [
250
- `Directory package metadata ${packagePath} was inventoried but its text is unavailable: ${packageFile.text.reason}.`,
251
- ],
252
- };
253
- const main = packageEntry(packageFile.text.value, input.moduleKind, input.context === "module-specifier" &&
254
- !input.declaredPath.startsWith(".") &&
255
- !input.declaredPath.startsWith("/") &&
256
- !hasScheme(input.declaredPath));
257
- if (main.status === "invalid")
258
- return {
259
- resolvedPath: null,
260
- status: "unavailable",
261
- limitations: [
262
- `Directory package metadata ${packagePath} is not valid package JSON.`,
263
- ],
264
- };
265
- if (main.status === "rejected")
816
+ if (file === undefined) {
817
+ const unavailable = input.unanalyzedFiles?.get(path);
818
+ if (source !== undefined &&
819
+ unavailable?.container_sha256 === source.container_sha256)
820
+ return {
821
+ kind: "unavailable",
822
+ limitation: unavailable.limitations?.[0] ??
823
+ `Directory package metadata ${path} was inventoried but its bytes are unavailable.`,
824
+ };
825
+ return { kind: "absent" };
826
+ }
827
+ if (source !== undefined && file.container_sha256 !== source.container_sha256)
828
+ return { kind: "absent" };
829
+ if (!file.text.included)
266
830
  return {
267
- resolvedPath: null,
268
- status: "rejected",
269
- limitations: [`Package metadata ${packagePath}: ${main.limitation}`],
831
+ kind: "unavailable",
832
+ limitation: `Directory package metadata ${path} was inventoried but its text is unavailable: ${file.text.reason}.`,
270
833
  };
271
- if (main.status === "unmatched")
834
+ let value;
835
+ try {
836
+ value = JSON.parse(file.text.value);
837
+ }
838
+ catch (cause) {
839
+ void cause;
272
840
  return {
273
- resolvedPath: null,
274
- status: "external",
275
- limitations: [
276
- `Directory package metadata ${packagePath} declares no exports target for the active conditions; it declares ${main.declared.join(", ")}.`,
277
- ],
841
+ kind: "unavailable",
842
+ limitation: `Directory package metadata ${path} is not valid package JSON.`,
278
843
  };
279
- if (packageChain.has(packagePath)) {
844
+ }
845
+ if (typeof value !== "object" || value === null)
280
846
  return {
281
- resolvedPath: null,
282
- status: "unavailable",
283
- limitations: [
284
- `Directory package entrypoint cycle includes ${packagePath}.`,
285
- ],
847
+ kind: "unavailable",
848
+ limitation: `Directory package metadata ${path} is not valid package JSON.`,
286
849
  };
850
+ const name = Reflect.get(value, "name");
851
+ const exports = Reflect.get(value, "exports");
852
+ const imports = Reflect.get(value, "imports");
853
+ const main = Reflect.get(value, "main");
854
+ return {
855
+ kind: "available",
856
+ path,
857
+ name: typeof name === "string" ? name : undefined,
858
+ // Node's package reader ignores scalar root exports other than strings.
859
+ // Nested targets retain their raw values for exports validation.
860
+ exports: typeof exports === "string" ||
861
+ (typeof exports === "object" && exports !== null)
862
+ ? exports
863
+ : undefined,
864
+ // Import maps must be non-array objects; other shapes are not a map.
865
+ imports: typeof imports === "object" && imports !== null && !Array.isArray(imports)
866
+ ? imports
867
+ : undefined,
868
+ main: input.moduleKind !== undefined && typeof main !== "string"
869
+ ? undefined
870
+ : main,
871
+ module: Reflect.get(value, "module"),
872
+ };
873
+ };
874
+ /** File and directory lookup never interprets a nested directory's exports. */
875
+ const resolveCandidate = (input, candidate, packageChain, emittedSourceCandidates = []) => {
876
+ if (!commonJsDirectoryRequest(input)) {
877
+ const file = resolveFileCandidates(input, fileCandidates(candidate, input.moduleKind)) ??
878
+ resolveRuntimeSourceCandidates(input, candidate, emittedSourceCandidates);
879
+ if (file !== null)
880
+ return file;
287
881
  }
288
- if (main.status === "missing")
289
- return (resolveFileCandidates(input, indexCandidates(candidate)) ??
290
- notFoundCandidate());
882
+ return resolveDirectory(input, candidate, readPackageMetadata(input, candidate), packageChain);
883
+ };
884
+ const commonJsDirectoryRequest = (input) => input.context === "module-specifier" &&
885
+ input.moduleKind === "require" &&
886
+ (input.declaredPath.endsWith("/") ||
887
+ /(?:^|\/)\.{1,2}$/u.test(input.declaredPath));
888
+ const resolveDirectory = (input, directory, metadata, packageChain) => {
889
+ if (metadata.kind === "absent")
890
+ return (resolveFileCandidates(input, indexCandidates(directory, input.moduleKind)) ?? notFoundCandidate());
891
+ if (metadata.kind === "unavailable")
892
+ return unresolvedCandidate("unavailable", [metadata.limitation]);
893
+ if (packageChain.has(metadata.path))
894
+ return unresolvedCandidate("unavailable", [
895
+ `Directory package entrypoint cycle includes ${metadata.path}.`,
896
+ ]);
897
+ const entry = metadata.main === ""
898
+ ? undefined
899
+ : metadata.main !== undefined
900
+ ? metadata.main
901
+ : input.moduleKind === undefined
902
+ ? metadata.module
903
+ : undefined;
904
+ if (entry === undefined)
905
+ return (resolveFileCandidates(input, indexCandidates(directory, input.moduleKind)) ?? notFoundCandidate());
906
+ if (typeof entry !== "string" || entry.length === 0)
907
+ return unresolvedCandidate("unavailable", [
908
+ `Directory package metadata ${metadata.path} is not valid package JSON.`,
909
+ ]);
291
910
  const entryInput = {
292
- declaredPath: main.value,
293
- sourcePath: packagePath,
911
+ declaredPath: entry,
912
+ sourcePath: metadata.path,
294
913
  context: "package-entrypoint",
295
914
  files: input.files,
915
+ ...(input.directoryPaths === undefined
916
+ ? {}
917
+ : { directoryPaths: input.directoryPaths }),
918
+ ...(input.unanalyzedFiles === undefined
919
+ ? {}
920
+ : { unanalyzedFiles: input.unanalyzedFiles }),
921
+ ...(input.moduleKind === undefined ? {} : { moduleKind: input.moduleKind }),
296
922
  };
297
- const chain = new Set([...packageChain, packagePath]);
298
- if (main.source === "legacy") {
299
- const entry = resolvePackagePath(entryInput, chain, "files-and-index");
300
- if (entry.resolution_status !== "not-found")
301
- return candidateOutcome(entry);
302
- const index = resolveFileCandidates(input, indexCandidates(candidate));
303
- if (index !== null)
304
- return index;
305
- }
306
- // Preserve recursive artifact package lookup only after legacy file/index fallbacks.
307
- return candidateOutcome(resolvePackagePath(entryInput, chain, "full", main.source === "exports"));
308
- };
309
- const candidateOutcome = (nested) => nested.resolution_status === "resolved"
310
- ? {
311
- resolvedPath: nested.resolved_path,
312
- status: nested.resolution_status,
313
- limitations: nested.limitations,
314
- }
315
- : {
316
- resolvedPath: null,
317
- status: nested.resolution_status,
318
- limitations: nested.limitations,
319
- };
923
+ const candidate = contextualCandidate(entryInput);
924
+ if (typeof candidate !== "string")
925
+ return candidate;
926
+ const confined = confineCandidate(candidate);
927
+ if (typeof confined !== "string")
928
+ return confined;
929
+ if (input.moduleKind !== undefined)
930
+ return resolveNodePackageMain(entryInput, directory, confined);
931
+ const selected = resolveFileCandidates(entryInput, [
932
+ ...fileCandidates(confined, entryInput.moduleKind),
933
+ ...indexCandidates(confined, entryInput.moduleKind),
934
+ ]) ??
935
+ resolveFileCandidates(input, indexCandidates(directory, input.moduleKind));
936
+ if (selected !== null)
937
+ return selected;
938
+ return resolveCandidate(entryInput, confined, new Set([...packageChain, metadata.path]));
939
+ };
940
+ const resolveNodePackageMain = (input, directory, mainPath) => {
941
+ const normalizedMain = mainPath.replace(/\/$/u, "");
942
+ for (const suffix of NODE_PACKAGE_MAIN_SUFFIXES) {
943
+ const isDirectoryIndex = suffix.startsWith("/");
944
+ if (normalizedMain === "" && !isDirectoryIndex)
945
+ continue;
946
+ const selected = resolveFileCandidates(input, [
947
+ isDirectoryIndex
948
+ ? posix.join(normalizedMain, suffix.slice(1))
949
+ : posix.normalize(`${normalizedMain}${suffix}`),
950
+ ]);
951
+ if (selected === null)
952
+ continue;
953
+ if (input.moduleKind === "require")
954
+ return selected;
955
+ // ESM probes the normalized main, then appends the selected suffix to
956
+ // the original declaration before finalizing the resulting file path.
957
+ const finalized = confineCandidate(relativeCandidate(input.sourcePath, `${input.declaredPath}${suffix}`));
958
+ if (typeof finalized !== "string")
959
+ return finalized;
960
+ const finalizedFile = resolveFileCandidates(input, [
961
+ finalized.replace(/\/$/u, ""),
962
+ ]);
963
+ if (finalizedFile !== null)
964
+ return finalizedFile;
965
+ const source = input.files.get(input.sourcePath);
966
+ if (hasContainerDirectory(input.files, finalized, source?.container_sha256, input.directoryPaths, input.unanalyzedFiles))
967
+ return {
968
+ ...unresolvedCandidate("rejected", [
969
+ `The selected legacy ESM package main finalizes to directory ${finalized}; directory imports are unsupported and no later main or index candidate was tried.`,
970
+ ]),
971
+ candidatePath: finalized,
972
+ };
973
+ return unresolvedCandidate("not-found", [
974
+ `The selected legacy ESM package main finalizes to ${finalized}, which is not an inventoried file; no later main or index candidate was tried.`,
975
+ ]);
976
+ }
977
+ const fallback = resolveFileCandidates(input, indexCandidates(directory, input.moduleKind));
978
+ if (fallback !== null)
979
+ return fallback;
980
+ return input.moduleKind === "require"
981
+ ? { ...notFoundCandidate(), stopsAncestorLookup: true }
982
+ : notFoundCandidate();
983
+ };
320
984
  const resolveFileCandidates = (input, candidates) => {
321
- const source = input.files.get(input.sourcePath);
322
985
  for (const path of candidates) {
323
- const target = input.files.get(path);
324
- if (target !== undefined &&
325
- (source === undefined ||
326
- target.container_sha256 === source.container_sha256))
327
- return { resolvedPath: path, status: "resolved", limitations: [] };
986
+ const selected = findFileCandidate(input, path);
987
+ if (selected === null)
988
+ continue;
989
+ return selected.status === "resolved" &&
990
+ isRuntimeDeclarationPath(input, path)
991
+ ? {
992
+ resolvedPath: null,
993
+ status: "unavailable",
994
+ candidatePath: path,
995
+ limitations: [
996
+ `The TypeScript declaration ${path} is compile-time evidence and cannot identify a runtime module implementation.`,
997
+ ],
998
+ }
999
+ : selected;
328
1000
  }
329
1001
  return null;
330
1002
  };
331
- const fileCandidates = (candidate) => [
1003
+ /** Own candidate presence and container identity independently of loader policy. */
1004
+ const findFileCandidate = (input, path) => {
1005
+ const source = input.files.get(input.sourcePath);
1006
+ const target = input.files.get(path);
1007
+ if (target !== undefined &&
1008
+ (source === undefined ||
1009
+ target.container_sha256 === source.container_sha256))
1010
+ return { resolvedPath: path, status: "resolved", limitations: [] };
1011
+ const unanalyzed = input.unanalyzedFiles?.get(path);
1012
+ if (unanalyzed !== undefined &&
1013
+ (source === undefined ||
1014
+ unanalyzed.container_sha256 === source.container_sha256))
1015
+ return {
1016
+ resolvedPath: null,
1017
+ status: "unavailable",
1018
+ candidatePath: path,
1019
+ limitations: [
1020
+ ...(unanalyzed.limitations ?? []),
1021
+ unanalyzed.kind === undefined
1022
+ ? `${path} exists in the inventoried artifact container (sha256 ${unanalyzed.sha256 ?? "unknown"}, ${unanalyzed.bytes === null ? "unknown size" : `${String(unanalyzed.bytes)} bytes`}) but is not a JavaScript, JSON, HTML, source map, or native add-on file; its contents were not analyzed.`
1023
+ : `${path} is an inventoried ${unanalyzed.kind} file, but its bytes are unavailable (hash status ${unanalyzed.hash_status ?? "unknown"}); resolution cannot be confirmed.`,
1024
+ ],
1025
+ };
1026
+ return null;
1027
+ };
1028
+ const isRuntimeDeclarationPath = (input, path) => input.moduleKind !== undefined && /\.d\.(?:ts|mts|cts)$/iu.test(path);
1029
+ const NODE_MODULE_EXTENSIONS = [".js", ".json", ".node"];
1030
+ const NODE_PACKAGE_MAIN_SUFFIXES = [
1031
+ "",
1032
+ ...NODE_MODULE_EXTENSIONS,
1033
+ ...NODE_MODULE_EXTENSIONS.map((extension) => `/index${extension}`),
1034
+ ];
1035
+ const fileCandidates = (candidate, moduleKind) => [
332
1036
  candidate,
333
- ...EXTENSIONS.map((extension) => `${candidate}${extension}`),
1037
+ ...(moduleKind === undefined ? EXTENSIONS : NODE_MODULE_EXTENSIONS).map((extension) => `${candidate}${extension}`),
334
1038
  ];
335
- const indexCandidates = (candidate) => EXTENSIONS.map((extension) => posix.join(candidate, `index${extension}`));
336
- const packageEntry = (text, moduleKind, useExports) => {
337
- try {
338
- const value = JSON.parse(text);
339
- if (typeof value !== "object" || value === null)
340
- return { status: "invalid" };
341
- const rawExports = Reflect.get(value, "exports");
342
- if (useExports && rawExports !== undefined && rawExports !== null) {
343
- const exported = packageExport(rawExports, moduleKind);
344
- return exported.status === "value"
345
- ? { ...exported, source: "exports" }
346
- : exported;
347
- }
348
- // Node imports and requires ignore the bundler-only module field. Keep
349
- // that fallback for callers without an explicit module-loading kind.
350
- const preferred = [
351
- Reflect.get(value, "main"),
352
- ...(moduleKind === undefined ? [Reflect.get(value, "module")] : []),
353
- ];
354
- const entry = preferred.find((candidate) => candidate !== undefined);
355
- if (entry === undefined)
356
- return { status: "missing" };
357
- const legacy = packagePathValue(entry);
358
- return legacy.status === "value" ? { ...legacy, source: "legacy" } : legacy;
359
- }
360
- catch (cause) {
361
- // Reflect-based manifest reads fail closed as invalid.
362
- void cause;
363
- return { status: "invalid" };
364
- }
365
- };
366
- const packageExport = (value, moduleKind) => {
1039
+ const indexCandidates = (candidate, moduleKind) => (moduleKind === undefined ? EXTENSIONS : NODE_MODULE_EXTENSIONS).map((extension) => posix.join(candidate, `index${extension}`));
1040
+ /** Only exact non-directory keys participate; wildcard expansion is unsupported. */
1041
+ const selectPackageExport = (value, subpath, moduleKind, packagePath) => {
1042
+ let target = value;
1043
+ let declared = [];
367
1044
  if (typeof value === "object" && value !== null && !Array.isArray(value)) {
368
1045
  const keys = Object.keys(value);
369
- if (keys.some((key) => key.startsWith(".")) &&
370
- keys.some((key) => !key.startsWith(".")))
1046
+ const hasSubpaths = keys.some((key) => key.startsWith("."));
1047
+ if (hasSubpaths && keys.some((key) => !key.startsWith(".")))
371
1048
  return {
372
1049
  status: "rejected",
373
1050
  limitation: "The package exports configuration mixes subpath keys and condition keys.",
374
1051
  };
1052
+ declared = keys;
1053
+ if (hasSubpaths) {
1054
+ if (subpath.endsWith("/") ||
1055
+ subpath.includes("*") ||
1056
+ !Object.hasOwn(value, subpath))
1057
+ return { status: "unmatched", declared };
1058
+ target = Reflect.get(value, subpath);
1059
+ }
1060
+ else if (subpath !== ".")
1061
+ return { status: "unmatched", declared };
375
1062
  }
376
- const root = typeof value === "object" && value !== null && Object.hasOwn(value, ".")
377
- ? Reflect.get(value, ".")
378
- : value;
379
- const flattened = exportTargets(root, packageExportConditions(moduleKind));
380
- if (flattened.kind === "invalid" || flattened.kind === "invalid-config")
381
- return { status: "rejected", limitation: flattened.limitation };
382
- const first = flattened.kind === "unmatched" ? undefined : flattened.values[0];
383
- return first === undefined
384
- ? {
1063
+ else if (subpath !== ".")
1064
+ return { status: "unmatched", declared };
1065
+ const selected = selectExportTarget(target, packageExportConditions(moduleKind), packagePath);
1066
+ if (selected.kind === "invalid" || selected.kind === "invalid-config")
1067
+ return { status: "rejected", limitation: selected.limitation };
1068
+ if (selected.kind === "unmatched")
1069
+ return {
385
1070
  status: "unmatched",
386
- declared: typeof root === "object" && root !== null ? Object.keys(root) : [],
387
- }
388
- : { status: "value", value: first };
1071
+ declared: selected.declared,
1072
+ };
1073
+ if (selected.kind === "blocked")
1074
+ return { status: "blocked", cause: selected.cause };
1075
+ if (selected.kind === "non-relative")
1076
+ return {
1077
+ status: "rejected",
1078
+ limitation: `The package exports target ${JSON.stringify(selected.value)} must start with "./".`,
1079
+ };
1080
+ return {
1081
+ status: "value",
1082
+ value: selected.value,
1083
+ url: selected.url,
1084
+ ...(selected.lookupLimitation === undefined
1085
+ ? {}
1086
+ : {
1087
+ lookupLimitation: selected.lookupLimitation,
1088
+ }),
1089
+ };
389
1090
  };
390
- const invalidExportTarget = (value, reason) => ({
1091
+ const invalidExportTarget = (value, reason, mapKind = "exports") => ({
391
1092
  kind: "invalid",
392
- limitation: `The package exports target ${JSON.stringify(value) ?? String(value)} ${reason}.`,
1093
+ limitation: `The package ${mapKind === "imports" ? "import" : "exports"} target ${JSON.stringify(value) ?? String(value)} ${reason}.`,
393
1094
  });
394
1095
  // Node checks raw target segments before URL normalization. Compare encoded
395
1096
  // segment names here; full URL decoding follows array target selection.
@@ -402,46 +1103,79 @@ const forbiddenExportSegment = (value) => value
402
1103
  segment === ".." ||
403
1104
  segment.toLowerCase() === "node_modules");
404
1105
  });
1106
+ const selectStringPackageTarget = (value, packagePath, mapKind) => {
1107
+ if (mapKind === "imports") {
1108
+ const target = classifyPackageImportTargetString(value);
1109
+ if (target.kind === "invalid")
1110
+ return invalidExportTarget(value, "cannot be parent-relative, absolute, or a URL", mapKind);
1111
+ if (target.kind !== "relative")
1112
+ return { kind: "non-relative", value };
1113
+ }
1114
+ else if (!value.startsWith("./"))
1115
+ return invalidExportTarget(value, 'must start with "./"', mapKind);
1116
+ const forbidden = forbiddenExportSegment(value);
1117
+ if (forbidden !== undefined)
1118
+ return invalidExportTarget(value, `contains forbidden path segment ${JSON.stringify(forbidden)} before URL normalization`, mapKind);
1119
+ const metadataUrl = packageMetadataUrl(packagePath, value);
1120
+ const packageUrl = metadataUrl.ok
1121
+ ? metadataUrl.value
1122
+ : metadataUrl.error.structuralUrl;
1123
+ // Node constructs the URL before deciding whether this array entry is an
1124
+ // invalid package target. Tabs/newlines and dot segments normalize here;
1125
+ // percent decoding and existence checks belong after target selection.
1126
+ const url = new URL(value, packageUrl);
1127
+ if (!url.pathname.startsWith(new URL(".", packageUrl).pathname))
1128
+ return invalidExportTarget(value, "escapes the package root after URL normalization", mapKind);
1129
+ return {
1130
+ kind: "value",
1131
+ value,
1132
+ url,
1133
+ ...(metadataUrl.ok
1134
+ ? {}
1135
+ : {
1136
+ lookupLimitation: metadataUrl.error.limitation,
1137
+ }),
1138
+ };
1139
+ };
1140
+ const selectArrayPackageTarget = (value, conditions, packagePath, mapKind) => {
1141
+ if (value.length === 0)
1142
+ return { kind: "blocked", cause: "empty-array" };
1143
+ let lastRefusal;
1144
+ const declared = new Set();
1145
+ for (const entry of value) {
1146
+ const nested = selectExportTarget(entry, conditions, packagePath, mapKind);
1147
+ // Node's array fallback catches invalid targets, not invalid configuration.
1148
+ if (nested.kind === "invalid-config")
1149
+ return nested;
1150
+ if (nested.kind === "unmatched") {
1151
+ for (const condition of nested.declared)
1152
+ declared.add(condition);
1153
+ continue;
1154
+ }
1155
+ if (nested.kind === "invalid" || nested.kind === "blocked") {
1156
+ lastRefusal = nested;
1157
+ continue;
1158
+ }
1159
+ return nested;
1160
+ }
1161
+ return lastRefusal ?? { kind: "unmatched", declared: [...declared] };
1162
+ };
405
1163
  /**
406
1164
  * Resolve a target in Node's declared order. Explicit null blocks an active
407
1165
  * condition, whereas an unmatched nested object permits the next condition.
408
1166
  * An array skips unmatched and invalid entries, stops at its first string, and
409
- * preserves the final invalid-versus-null refusal if no string is selected.
1167
+ * preserves the last invalid/null outcome if no string is selected. A nonempty
1168
+ * array of unmatched conditions stays unmatched; an empty array blocks.
410
1169
  */
411
- const exportTargets = (value, conditions) => {
412
- if (typeof value === "string") {
413
- if (!value.startsWith("./"))
414
- return invalidExportTarget(value, 'must start with "./"');
415
- const forbidden = forbiddenExportSegment(value);
416
- return forbidden === undefined
417
- ? { kind: "targets", values: [value] }
418
- : invalidExportTarget(value, `contains forbidden path segment ${JSON.stringify(forbidden)} before URL normalization`);
419
- }
1170
+ const selectExportTarget = (value, conditions, packagePath, mapKind = "exports") => {
1171
+ if (typeof value === "string")
1172
+ return selectStringPackageTarget(value, packagePath, mapKind);
420
1173
  if (value === null)
421
- return { kind: "targets", values: [] };
422
- if (Array.isArray(value)) {
423
- let invalid = null;
424
- for (const entry of value) {
425
- const nested = exportTargets(entry, conditions);
426
- // Node's array fallback catches invalid targets, not invalid configuration.
427
- if (nested.kind === "invalid-config")
428
- return nested;
429
- if (nested.kind === "invalid") {
430
- invalid = nested.limitation;
431
- continue;
432
- }
433
- if (nested.kind === "unmatched")
434
- continue;
435
- invalid = null;
436
- if (nested.values.length > 0)
437
- return nested;
438
- }
439
- return invalid === null
440
- ? { kind: "targets", values: [] }
441
- : { kind: "invalid", limitation: invalid };
442
- }
1174
+ return { kind: "blocked", cause: "null" };
1175
+ if (Array.isArray(value))
1176
+ return selectArrayPackageTarget(value, conditions, packagePath, mapKind);
443
1177
  if (typeof value !== "object")
444
- return invalidExportTarget(value, "must be a relative string, object, array, or null");
1178
+ return invalidExportTarget(value, "must be a relative string, object, array, or null", mapKind);
445
1179
  for (const key of Object.keys(value)) {
446
1180
  const numeric = Number(key);
447
1181
  if (String(numeric) === key && numeric >= 0 && numeric < 0xffff_ffff)
@@ -450,14 +1184,18 @@ const exportTargets = (value, conditions) => {
450
1184
  limitation: `The package exports configuration contains numeric condition key ${JSON.stringify(key)}.`,
451
1185
  };
452
1186
  }
1187
+ const declared = new Set();
453
1188
  for (const [condition, target] of Object.entries(value)) {
1189
+ declared.add(condition);
454
1190
  if (!conditions.has(condition))
455
1191
  continue;
456
- const nested = exportTargets(target, conditions);
1192
+ const nested = selectExportTarget(target, conditions, packagePath, mapKind);
457
1193
  if (nested.kind !== "unmatched")
458
1194
  return nested;
1195
+ for (const name of nested.declared)
1196
+ declared.add(name);
459
1197
  }
460
- return { kind: "unmatched" };
1198
+ return { kind: "unmatched", declared: [...declared] };
461
1199
  };
462
1200
  /**
463
1201
  * Node selects an exports target by walking the declared keys in order and
@@ -473,9 +1211,6 @@ const packageExportConditions = (moduleKind) => new Set([
473
1211
  ...(moduleKind === undefined ? [] : [moduleKind]),
474
1212
  "default",
475
1213
  ]);
476
- const packagePathValue = (value) => typeof value === "string" && value.length > 0
477
- ? { status: "value", value }
478
- : { status: "invalid" };
479
1214
  const notFoundCandidate = () => ({
480
1215
  resolvedPath: null,
481
1216
  status: "not-found",
@@ -483,21 +1218,35 @@ const notFoundCandidate = () => ({
483
1218
  "No extension, directory package, or index candidate exists in the inventoried artifact container.",
484
1219
  ],
485
1220
  });
486
- const exactExportsTargetNotFound = (path) => ({
1221
+ const exactPackageTargetNotFound = (path, targetKind) => ({
487
1222
  resolvedPath: null,
488
1223
  status: "not-found",
489
1224
  limitations: [
490
- `The selected package exports target ${path} does not exist in the inventoried artifact container; exports targets are exact files, so no extension or directory index was tried.`,
1225
+ `The selected package ${targetKind === "imports" ? "import" : targetKind} target ${path} does not exist in the inventoried artifact container; ${targetKind === "imports" ? "import" : targetKind} targets are exact files, so no extension or directory index was tried.`,
491
1226
  ],
492
1227
  });
493
1228
  const fileUrlPath = (value) => {
494
- if (!value.startsWith("file://"))
1229
+ if (!/^file:\/\//iu.test(value))
495
1230
  return undefined;
1231
+ // URL parsing removes tabs and newlines and normalizes encoded dot segments.
1232
+ // Check the raw path first, excluding URL identity suffixes, then check the
1233
+ // parsed pathname so parser normalization cannot introduce a separator.
1234
+ const rawPath = stripQueryAndFragment(value);
1235
+ if (value.includes("\0") ||
1236
+ value.includes("\\") ||
1237
+ /[\t\n\r]/u.test(rawPath) ||
1238
+ !admitsCanonicalPathSyntax(rawPath))
1239
+ return null;
496
1240
  try {
497
1241
  const url = new URL(value);
498
1242
  if (url.protocol !== "file:" || url.hostname !== "")
499
1243
  return undefined;
500
- return decodeURIComponent(url.pathname).replace(/^\/+/, "");
1244
+ if (!admitsCanonicalPathSyntax(url.pathname))
1245
+ return null;
1246
+ const decoded = decodeURIComponent(url.pathname);
1247
+ if (decoded.includes("\0"))
1248
+ return null;
1249
+ return decoded.replace(/^\/+/, "");
501
1250
  }
502
1251
  catch (cause) {
503
1252
  // Unparseable file URLs have no path to resolve.
@@ -505,19 +1254,4 @@ const fileUrlPath = (value) => {
505
1254
  return undefined;
506
1255
  }
507
1256
  };
508
- const outcome = (input, resolution) => resolution.status === "resolved"
509
- ? {
510
- declared_path: input.declaredPath,
511
- resolution_context: input.context,
512
- resolved_path: resolution.resolvedPath,
513
- resolution_status: resolution.status,
514
- limitations: resolution.limitations,
515
- }
516
- : {
517
- declared_path: input.declaredPath,
518
- resolution_context: input.context,
519
- resolved_path: null,
520
- resolution_status: resolution.status,
521
- limitations: resolution.limitations,
522
- };
523
- const unresolvedOutcome = (input, status, limitations) => outcome(input, { resolvedPath: null, status, limitations });
1257
+ const unresolvedCandidate = (status, limitations) => ({ resolvedPath: null, status, limitations });