rea-agents 6.4.0 → 6.7.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 (1420) hide show
  1. package/DISCLAIMER.md +136 -0
  2. package/README.md +76 -16
  3. package/THIRD_PARTY_NOTICES.md +135 -0
  4. package/bridge/android/ReaJadxBridge.java +281 -25
  5. package/bridge/cutter/rea_bridge.py +825 -0
  6. package/bridge/ghidra/ReaGhidraAnalysisOptions.java +38 -0
  7. package/bridge/ghidra/ReaGhidraBridge.java +1232 -142
  8. package/bridge/ghidra/ReaGhidraBundleActivator.java +14 -0
  9. package/bridge/ghidra/ReaGhidraMipsSoftFloat.java +176 -0
  10. package/bridge/ghidra/ReaGhidraPrepareRaw.java +49 -0
  11. package/bridge/hopper_bridge.py +111 -69
  12. package/bridge/mitmproxy/capture.py +189 -13
  13. package/bridge/native/rea_lldb_tracer.py +88 -10
  14. package/bridge/process/ProcessRunTokenReader.swift +76 -34
  15. package/bridge/pwndbg/core_context.py +15 -2
  16. package/bridge/pwntools/layout_impl.py +5 -0
  17. package/bridge/pwntools/recorded_crash_impl.py +31 -10
  18. package/dist/adb/AdbCommand.js +148 -0
  19. package/dist/adb/AdbConfiguration.js +41 -7
  20. package/dist/adb/AdbDeviceOutput.js +59 -37
  21. package/dist/adb/AdbDirectoryListing.js +80 -0
  22. package/dist/adb/AdbHostFileName.js +34 -0
  23. package/dist/adb/AdbInputSnapshot.js +126 -0
  24. package/dist/adb/AdbProvider.js +1106 -346
  25. package/dist/adb/AdbShellOutput.js +146 -77
  26. package/dist/android/AndroidTargetSnapshot.js +7 -7
  27. package/dist/android/JadxAnalysis.js +53 -33
  28. package/dist/android/JadxConfiguration.js +283 -145
  29. package/dist/android/JadxDoctor.js +123 -0
  30. package/dist/android/JadxFailure.js +154 -0
  31. package/dist/android/JadxInterruption.js +13 -0
  32. package/dist/android/JadxJavaProbe.js +246 -0
  33. package/dist/android/JadxMcpTransport.js +53 -18
  34. package/dist/android/JadxProtocol.js +43 -2
  35. package/dist/android/JadxProvider.js +183 -102
  36. package/dist/android/JadxRelease.js +17 -2
  37. package/dist/android/JadxSession.js +35 -14
  38. package/dist/android/JadxWorkspaceRoot.js +157 -0
  39. package/dist/apktool/ApktoolCommandCleanup.js +134 -0
  40. package/dist/apktool/ApktoolCommandOutput.js +22 -0
  41. package/dist/apktool/ApktoolConfiguration.js +306 -45
  42. package/dist/apktool/ApktoolDecodeOutput.js +131 -42
  43. package/dist/apktool/ApktoolDecodedInventory.js +52 -0
  44. package/dist/apktool/ApktoolProvider.js +296 -340
  45. package/dist/apktool/ApktoolStringTables.js +178 -0
  46. package/dist/apktool/ApktoolWorkspace.js +162 -0
  47. package/dist/application/AnalysisContextQueries.js +5 -8
  48. package/dist/application/AnalysisDocument.js +19 -4
  49. package/dist/application/AnalysisProvider.js +36 -18
  50. package/dist/application/AppBundleExecutable.js +16 -9
  51. package/dist/application/BinaryTargetResolver.js +204 -40
  52. package/dist/application/BrowserEvidence.js +1 -1
  53. package/dist/application/BrowserObservationService.js +54 -9
  54. package/dist/application/BrowserScenarioCaptureService.js +26 -7
  55. package/dist/application/CallPathTracing.js +52 -13
  56. package/dist/application/CapabilityInventory.js +182 -36
  57. package/dist/application/ClaudeDesktopConfigLocation.js +152 -0
  58. package/dist/application/ClientConfigurationCleanup.js +73 -0
  59. package/dist/application/ClientConfigurationDocument.js +270 -151
  60. package/dist/application/ClientConfigurationFiles.js +51 -14
  61. package/dist/application/ClientConfigurationPublication.js +167 -0
  62. package/dist/application/ClientRegistrationEnvironment.js +40 -4
  63. package/dist/application/ClientRegistrationIdentity.js +112 -32
  64. package/dist/application/ClientRegistrationStatus.js +280 -84
  65. package/dist/application/DirectAnalysis.js +98 -30
  66. package/dist/application/DirectAnalysisCleanup.js +5 -1
  67. package/dist/application/DirectAnalysisStatus.js +13 -1
  68. package/dist/application/Doctor.js +192 -37
  69. package/dist/application/DoctorDiagnostics.js +59 -16
  70. package/dist/application/DoctorProviderIds.js +8 -0
  71. package/dist/application/DoctorScope.js +11 -2
  72. package/dist/application/DshCordisPatch.js +355 -0
  73. package/dist/application/DshCordisYaml.js +155 -0
  74. package/dist/application/EnhancedLiteralTracing.js +30 -16
  75. package/dist/application/EnhancedToolTypes.js +0 -1
  76. package/dist/application/EnhancedTools.js +154 -56
  77. package/dist/application/EvidenceBundleCommands.js +30 -7
  78. package/dist/application/EvidenceBundleFiles.js +29 -7
  79. package/dist/application/FunctionAnalysisEvidence.js +3 -0
  80. package/dist/application/GeminiClientSettings.js +25 -13
  81. package/dist/application/HermesClientHome.js +20 -0
  82. package/dist/application/HermesConfigurationYaml.js +312 -0
  83. package/dist/application/HopperDownload.js +11 -3
  84. package/dist/application/HopperReleaseFeed.js +71 -0
  85. package/dist/application/InventoryProjectionEvidence.js +0 -1
  86. package/dist/application/InvestigationProviders.js +14 -3
  87. package/dist/application/JsonFiles.js +110 -20
  88. package/dist/application/JsonInputFile.js +220 -62
  89. package/dist/application/LinuxHopper.js +218 -115
  90. package/dist/application/LinuxHopperPublisher.js +656 -0
  91. package/dist/application/MacHopper.js +203 -83
  92. package/dist/application/MacHopperPaths.js +40 -0
  93. package/dist/application/{MipsElfAbiFlags.js → MipsElfMetadata.js} +71 -10
  94. package/dist/application/MipsElfSharedLoad.js +164 -0
  95. package/dist/application/MipsGnuAttributes.js +90 -0
  96. package/dist/application/MsixPackageStorage.js +140 -0
  97. package/dist/application/ProgressReporter.js +1 -1
  98. package/dist/application/ProviderOperationExecution.js +15 -14
  99. package/dist/application/ReconstructionCoverageService.js +0 -1
  100. package/dist/application/ReconstructionObligationCandidates.js +20 -4
  101. package/dist/application/ReconstructionObligationLedgerDiagnostics.js +2 -2
  102. package/dist/application/ReconstructionObligationLedgerEvaluation.js +19 -33
  103. package/dist/application/ReconstructionObligationLedgerProjection.js +3 -72
  104. package/dist/application/ReconstructionObligationLedgerService.js +6 -2
  105. package/dist/application/ReconstructionObligationOriginalCases.js +10 -1
  106. package/dist/application/ReferenceSourceImport.js +24 -8
  107. package/dist/application/ReferenceSourceImportEntries.js +180 -37
  108. package/dist/application/ReferenceSourceImportPolicy.js +5 -3
  109. package/dist/application/ReferenceSourceImportTypes.js +0 -1
  110. package/dist/application/ReferenceSourceVcsAdapter.js +36 -17
  111. package/dist/application/RegularFileRead.js +117 -70
  112. package/dist/application/Setup.js +59 -21
  113. package/dist/application/SetupClientConfiguration.js +301 -66
  114. package/dist/application/SetupClients.js +25 -10
  115. package/dist/application/SetupHost.js +149 -51
  116. package/dist/application/SetupInstallFailure.js +58 -3
  117. package/dist/application/SetupPlan.js +94 -55
  118. package/dist/application/SetupRecoveryBackup.js +93 -0
  119. package/dist/application/SetupRegistrationEnvironment.js +14 -1
  120. package/dist/application/SetupSkill.js +303 -76
  121. package/dist/application/SourceLimitations.js +35 -0
  122. package/dist/application/SupportedClients.js +166 -32
  123. package/dist/application/TypeScriptEmittedSourceCandidates.js +26 -0
  124. package/dist/application/Uninstall.js +356 -110
  125. package/dist/application/UninstallFailure.js +14 -0
  126. package/dist/application/Update.js +54 -25
  127. package/dist/application/UpdateCommandProgress.js +66 -0
  128. package/dist/application/UpdateFailure.js +17 -0
  129. package/dist/application/UpdateMaintenance.js +18 -31
  130. package/dist/application/UpdateRuntime.js +198 -54
  131. package/dist/application/WebModuleTraceService.js +42 -22
  132. package/dist/application/WebNetworkCaptureService.js +24 -12
  133. package/dist/application/WebRuntimeService.js +41 -8
  134. package/dist/application/WebScriptExportService.js +6 -4
  135. package/dist/application/WebSourceLocationService.js +23 -8
  136. package/dist/application/WindowsCapabilities.js +18 -15
  137. package/dist/application/WorkflowEvidence.js +31 -1
  138. package/dist/application/analysisView/AnalysisViewService.js +46 -11
  139. package/dist/application/android/AndroidAnalysisService.js +5 -4
  140. package/dist/application/android/AndroidPackageInspection.js +25 -0
  141. package/dist/application/android/AndroidSearchEvidenceSummary.js +98 -0
  142. package/dist/application/artifacts/ArtifactComparisonEvidence.js +32 -0
  143. package/dist/application/binary/AnalysisProviderEvaluation.js +14 -11
  144. package/dist/application/binary/AnalysisProviderRegistry.js +365 -60
  145. package/dist/application/binary/AnalysisSnapshotCache.js +41 -20
  146. package/dist/application/binary/AnalysisSnapshotFiles.js +75 -9
  147. package/dist/application/binary/BinarySession.js +308 -117
  148. package/dist/application/binary/BinarySessionExecution.js +5 -4
  149. package/dist/application/binary/BinarySessionOpen.js +13 -6
  150. package/dist/application/binary/BinarySessionRecords.js +36 -7
  151. package/dist/application/binary/BinarySessionStatus.js +96 -27
  152. package/dist/application/binary/BinaryTargetSummary.js +9 -0
  153. package/dist/application/binary/CompositeProvider.js +116 -28
  154. package/dist/application/binary/LazyAnalysisProvider.js +6 -66
  155. package/dist/application/binary/SessionProviderRouter.js +16 -4
  156. package/dist/application/binaryDiagnostics/BinaryLayoutService.js +14 -5
  157. package/dist/application/binaryDiagnostics/PeResourcesService.js +25 -5
  158. package/dist/application/binaryDiagnostics/RecordedCrashService.js +17 -7
  159. package/dist/application/captures/PacketCaptureService.js +84 -0
  160. package/dist/application/closeOwnedWebResources.js +37 -0
  161. package/dist/application/electron/ElectronFusePort.js +1 -0
  162. package/dist/application/electron/ElectronFuseService.js +45 -0
  163. package/dist/application/evm/EvmInterfaceEvidence.js +11 -0
  164. package/dist/application/evm/EvmInterfaceService.js +5 -15
  165. package/dist/application/firmware/FirmwareAnalysisService.js +4 -3
  166. package/dist/application/flutter/DartAotInspection.js +26 -0
  167. package/dist/application/flutter/FlutterBuildAnalysisPort.js +1 -0
  168. package/dist/application/flutter/FlutterBuildAnalysisService.js +13 -0
  169. package/dist/application/frida/FridaInstrumentationPort.js +8 -0
  170. package/dist/application/frida/FridaInstrumentationService.js +310 -0
  171. package/dist/application/frida/fridaInputErrors.js +17 -0
  172. package/dist/application/go/GoBinaryPort.js +1 -0
  173. package/dist/application/go/GoBinaryService.js +79 -0
  174. package/dist/application/harmony/HarmonyApplicationService.js +17 -0
  175. package/dist/application/investigation/EvidenceLedger.js +43 -18
  176. package/dist/application/investigation/InvestigationRecords.js +12 -21
  177. package/dist/application/investigation/UnknownEvidence.js +22 -18
  178. package/dist/application/javascript/ElectronActiveObservationService.js +55 -25
  179. package/dist/application/javascript/ElectronBoundaryAnalysis.js +17 -3
  180. package/dist/application/javascript/ElectronBoundaryGraph.js +2 -0
  181. package/dist/application/javascript/ElectronBoundaryGraphCallPaths.js +144 -0
  182. package/dist/application/javascript/ElectronBoundaryGraphIpc.js +26 -7
  183. package/dist/application/javascript/ElectronBoundaryGraphNative.js +1 -1
  184. package/dist/application/javascript/ElectronBoundaryGraphWindows.js +61 -11
  185. package/dist/application/javascript/ElectronEvidence.js +1 -2
  186. package/dist/application/javascript/ElectronObservationService.js +41 -8
  187. package/dist/application/javascript/JavaScriptApplicationEvidence.js +21 -0
  188. package/dist/application/javascript/JavaScriptApplicationService.js +29 -14
  189. package/dist/application/javascript/JavaScriptApplicationWorkflowService.js +0 -1
  190. package/dist/application/javascript/JavaScriptArtifactAnalysis.js +119 -49
  191. package/dist/application/javascript/JavaScriptArtifactAnalysisTypes.js +30 -1
  192. package/dist/application/javascript/JavaScriptArtifactGraphAccumulator.js +51 -21
  193. package/dist/application/javascript/JavaScriptArtifactGraphBuilder.js +31 -7
  194. package/dist/application/javascript/JavaScriptArtifactGraphContext.js +28 -6
  195. package/dist/application/javascript/JavaScriptArtifactGraphDocuments.js +25 -14
  196. package/dist/application/javascript/JavaScriptArtifactGraphEvidence.js +3 -3
  197. package/dist/application/javascript/JavaScriptArtifactGraphFindings.js +186 -50
  198. package/dist/application/javascript/JavaScriptArtifactGraphStructure.js +173 -14
  199. package/dist/application/javascript/JavaScriptArtifactPathResolution.js +959 -188
  200. package/dist/application/javascript/JavaScriptArtifactReconstruction.js +57 -32
  201. package/dist/application/javascript/JavaScriptArtifactReconstructionInput.js +2 -0
  202. package/dist/application/javascript/JavaScriptModuleRelationships.js +34 -12
  203. package/dist/application/javascript/JavaScriptRecoveryService.js +29 -9
  204. package/dist/application/javascript/JavaScriptRuntimeObservationEvidence.js +1 -2
  205. package/dist/application/javascript/JavaScriptRuntimeObservationService.js +33 -9
  206. package/dist/application/javascript/JavaScriptRuntimeReconciliationService.js +0 -1
  207. package/dist/application/javascript/JavaScriptSemanticGraphAsyncProjection.js +4 -5
  208. package/dist/application/javascript/JavaScriptSemanticGraphBuilder.js +138 -43
  209. package/dist/application/javascript/JavaScriptSemanticGraphChildProcessProjection.js +13 -4
  210. package/dist/application/javascript/JavaScriptSemanticGraphConstruction.js +23 -3
  211. package/dist/application/javascript/JavaScriptSemanticGraphDataProjection.js +18 -5
  212. package/dist/application/javascript/JavaScriptSemanticGraphElectronProjection.js +67 -0
  213. package/dist/application/javascript/JavaScriptSemanticGraphFlowProjection.js +4 -6
  214. package/dist/application/javascript/JavaScriptSemanticGraphObjectProjection.js +2 -3
  215. package/dist/application/javascript/JavaScriptSemanticGraphResourceProjection.js +2 -3
  216. package/dist/application/javascript/JavaScriptSemanticGraphValueProjection.js +5 -8
  217. package/dist/application/javascript/JavaScriptSemanticTraceService.js +0 -1
  218. package/dist/application/managed/ManagedApplicationGraphService.js +0 -1
  219. package/dist/application/managed/ManagedMemberComparisonService.js +72 -54
  220. package/dist/application/managed/ManagedNativeVerificationService.js +0 -1
  221. package/dist/application/managed/ManagedReconstructionService.js +0 -1
  222. package/dist/application/native/NativeCallRoutes.js +78 -41
  223. package/dist/application/native/NativeDispatchMetadataInspection.js +6 -2
  224. package/dist/application/native/NativeUiActionTrace.js +43 -22
  225. package/dist/application/native/NativeValueTrace.js +65 -23
  226. package/dist/application/pcap/PcapAnalysisPort.js +1 -0
  227. package/dist/application/pcap/PcapAnalysisService.js +24 -0
  228. package/dist/application/process/ProcessCli.js +33 -13
  229. package/dist/application/reverse/ReverseEngineeringCommandPort.js +1 -0
  230. package/dist/application/reverse/ReverseEngineeringService.js +688 -0
  231. package/dist/application/rust/RustBinaryPort.js +1 -0
  232. package/dist/application/rust/RustBinaryService.js +82 -0
  233. package/dist/application/signals/SignalRecordingService.js +84 -0
  234. package/dist/application/sqlite/SqliteDatabaseCapability.js +30 -0
  235. package/dist/application/sqlite/SqliteDatabasePort.js +1 -0
  236. package/dist/application/sqlite/SqliteDatabaseService.js +76 -0
  237. package/dist/application/wasm/WasmArtifactPort.js +1 -0
  238. package/dist/application/wasm/WasmArtifactService.js +76 -0
  239. package/dist/application/wasm/WasmInterfaceComparisonService.js +188 -0
  240. package/dist/artifacts/AnalysisCleanupLease.js +119 -0
  241. package/dist/artifacts/ArtifactFileOperation.js +150 -0
  242. package/dist/artifacts/ArtifactHash.js +15 -3
  243. package/dist/artifacts/ArtifactPaths.js +4 -7
  244. package/dist/artifacts/ArtifactProvider.js +24 -9
  245. package/dist/artifacts/ArtifactReader.js +63 -5
  246. package/dist/artifacts/ArtifactResourceScope.js +92 -9
  247. package/dist/artifacts/AsarArtifactReader.js +186 -120
  248. package/dist/artifacts/AsarEntryStream.js +49 -17
  249. package/dist/artifacts/AsarListing.js +78 -0
  250. package/dist/artifacts/DirectoryArtifactReader.js +119 -28
  251. package/dist/artifacts/MachOSliceArtifactReader.js +153 -23
  252. package/dist/artifacts/NativeDmgArtifactReader.js +264 -62
  253. package/dist/artifacts/OrderedReads.js +57 -0
  254. package/dist/artifacts/SafeOutputTree.js +24 -7
  255. package/dist/artifacts/SafeOutputTreeCreationFailure.js +1 -0
  256. package/dist/artifacts/SafeOutputTreeReadback.js +10 -16
  257. package/dist/artifacts/ZipArtifactReader.js +150 -25
  258. package/dist/artifacts/apple/AppleAssetCatalogAnalysis.js +79 -68
  259. package/dist/artifacts/apple/DylibFileAccess.js +106 -0
  260. package/dist/artifacts/apple/DylibResolutionReader.js +72 -157
  261. package/dist/artifacts/apple/InterfaceBuilderAnalysis.js +108 -29
  262. package/dist/artifacts/apple/InterfaceBuilderDecodeBudget.js +81 -28
  263. package/dist/artifacts/apple/KeyedArchiveReader.js +23 -13
  264. package/dist/artifacts/apple/MachoLoadCommandReader.js +77 -61
  265. package/dist/artifacts/apple/NibArchive.js +11 -4
  266. package/dist/artifacts/apple/PlistNumberLiterals.js +106 -118
  267. package/dist/artifacts/extraction/ArtifactExtraction.js +21 -19
  268. package/dist/artifacts/hostExecutableMarking.js +16 -0
  269. package/dist/artifacts/inventory/ArtifactGraphConstruction.js +139 -41
  270. package/dist/artifacts/inventory/classify.js +36 -17
  271. package/dist/artifacts/inventory/hashStableRootArtifact.js +14 -7
  272. package/dist/artifacts/inventory/reader.js +36 -21
  273. package/dist/artifacts/inventory/scanCanonical.js +27 -21
  274. package/dist/artifacts/inventory/scanReader.js +36 -10
  275. package/dist/artifacts/javascript/JavaScriptArtifactFiles.js +166 -8
  276. package/dist/artifacts/readArtifactFileChunks.js +9 -0
  277. package/dist/artifacts/readStableArtifact.js +13 -11
  278. package/dist/browser/BrowserProcessStartup.js +20 -9
  279. package/dist/browser/BrowserScenarioPartialObservation.js +74 -92
  280. package/dist/browser/BrowserScenarioSecrets.js +176 -46
  281. package/dist/browser/CdpBrowserProvider.js +124 -102
  282. package/dist/browser/CdpCaptureDocuments.js +232 -102
  283. package/dist/browser/CdpCaptureDomSvg.js +80 -76
  284. package/dist/browser/CdpCaptureEventBodyShapes.js +9 -5
  285. package/dist/browser/CdpCaptureEventHandlers.js +23 -12
  286. package/dist/browser/CdpCaptureEvents.js +49 -10
  287. package/dist/browser/CdpCaptureStorage.js +22 -5
  288. package/dist/browser/CdpCaptureStorageFingerprints.js +54 -11
  289. package/dist/browser/CdpCaptureValues.js +12 -1
  290. package/dist/browser/CdpConnection.js +135 -30
  291. package/dist/browser/CdpElectronInspection.js +74 -64
  292. package/dist/browser/CdpElectronProvider.js +63 -6
  293. package/dist/browser/CdpElectronScriptEvents.js +4 -1
  294. package/dist/browser/CdpElectronScripts.js +4 -6
  295. package/dist/browser/CdpElectronWorkers.js +20 -4
  296. package/dist/browser/CdpEndpoint.js +143 -17
  297. package/dist/browser/CdpObservationSession.js +24 -8
  298. package/dist/browser/CdpPageCapture.js +68 -17
  299. package/dist/browser/CdpPageCaptureScripts.js +18 -13
  300. package/dist/browser/CdpPageCaptureWorkers.js +46 -11
  301. package/dist/browser/CdpSafeMetadata.js +32 -24
  302. package/dist/browser/CdpScreenshot.js +5 -14
  303. package/dist/browser/CdpSnapshotNodes.js +103 -0
  304. package/dist/browser/CdpSnapshotStrings.js +15 -0
  305. package/dist/browser/CdpTargetSession.js +76 -7
  306. package/dist/browser/CdpTargetSessionOwner.js +198 -0
  307. package/dist/browser/CdpWebMcpDiscovery.js +23 -6
  308. package/dist/browser/ElectronCaptureCleanup.js +82 -0
  309. package/dist/browser/ElectronProcessCleanup.js +91 -0
  310. package/dist/browser/PlaywrightBrowserScenarioProvider.js +75 -20
  311. package/dist/browser/PlaywrightElectronActiveActions.js +57 -9
  312. package/dist/browser/PlaywrightElectronActiveFuses.js +86 -0
  313. package/dist/browser/PlaywrightElectronActiveProjection.js +21 -4
  314. package/dist/browser/PlaywrightElectronActiveProvider.js +237 -175
  315. package/dist/browser/PlaywrightExecutionBoundary.js +6 -4
  316. package/dist/browser/PlaywrightScenarioBrowser.js +240 -91
  317. package/dist/browser/PlaywrightScenarioEvents.js +287 -38
  318. package/dist/browser/PlaywrightScenarioServiceWorkers.js +336 -0
  319. package/dist/browser/PlaywrightScenarioSession.js +151 -46
  320. package/dist/browser/PlaywrightScenarioStorage.js +15 -7
  321. package/dist/browser/StructuredFieldToken.js +53 -0
  322. package/dist/browser/WebArtifactCleanup.js +53 -0
  323. package/dist/browser/WebSourceMapFetcher.js +181 -89
  324. package/dist/browser/assets/LocalWebScriptArtifacts.js +24 -3
  325. package/dist/browser/assets/PublishWebScripts.js +13 -2
  326. package/dist/browser/assets/ScenarioScriptCapture.js +2 -1
  327. package/dist/browser/assets/WebArtifactReads.js +15 -3
  328. package/dist/browser/assets/WebSourceLocationArtifacts.js +47 -3
  329. package/dist/browser/execution/CdpRuntimeSession.js +36 -7
  330. package/dist/browser/execution/CdpWebRuntimeProvider.js +22 -4
  331. package/dist/browser/history/CaptureFailures.js +29 -10
  332. package/dist/browser/history/CaptureFormatError.js +2 -2
  333. package/dist/browser/history/{HarJson.js → CaptureJson.js} +14 -4
  334. package/dist/browser/history/CaptureRedaction.js +16 -3
  335. package/dist/browser/history/CaptureRelease.js +20 -2
  336. package/dist/browser/history/HarCapture.js +54 -30
  337. package/dist/browser/history/HarSchema.js +36 -36
  338. package/dist/browser/history/HistoricalCaptureDecoder.js +93 -25
  339. package/dist/browser/history/NodeCaptureAdapter.js +48 -0
  340. package/dist/browser/history/{HarCaptureProcess.js → NodeCaptureProcess.js} +18 -9
  341. package/dist/browser/history/QlogCapture.js +385 -0
  342. package/dist/browser/history/SazCapture.js +130 -0
  343. package/dist/browser/history/SazHttp.js +61 -0
  344. package/dist/browser/history/SazMetadata.js +55 -0
  345. package/dist/browser/history/SazProjection.js +90 -0
  346. package/dist/browser/modules/NativeModuleResolver.js +248 -131
  347. package/dist/browser/modules/WebModuleArtifacts.js +49 -3
  348. package/dist/browser/network/PlaywrightNetworkContent.js +67 -9
  349. package/dist/browser/network/PlaywrightScenarioNetwork.js +249 -26
  350. package/dist/captures/TsharkCaptureProvider.js +377 -0
  351. package/dist/captures/parseFieldDiscovery.js +66 -0
  352. package/dist/captures/parsePacketOutput.js +21 -0
  353. package/dist/catalogIdentity.js +58 -42
  354. package/dist/cli/adbCommands.js +20 -21
  355. package/dist/cli/analysisViewCommands.js +1 -1
  356. package/dist/cli/androidCommands.js +13 -16
  357. package/dist/cli/apktoolCommands.js +14 -25
  358. package/dist/cli/applicationCommands.js +44 -17
  359. package/dist/cli/artifactCommands.js +1 -1
  360. package/dist/cli/binaryDiagnosticsCommands.js +17 -13
  361. package/dist/cli/browserAdvancedCommands.js +46 -26
  362. package/dist/cli/browserCommands.js +59 -33
  363. package/dist/cli/captureCommands.js +72 -0
  364. package/dist/cli/cliResultOutput.js +274 -0
  365. package/dist/cli/coreBinaryCommands.js +77 -30
  366. package/dist/cli/coreNativeCommands.js +53 -31
  367. package/dist/cli/cutterCommands.js +88 -0
  368. package/dist/cli/electronCommands.js +76 -13
  369. package/dist/cli/evmCommands.js +9 -19
  370. package/dist/cli/finishAnalysisCommand.js +52 -0
  371. package/dist/cli/firmwareCommands.js +20 -50
  372. package/dist/cli/flutterCommands.js +53 -0
  373. package/dist/cli/fridaCommands.js +219 -0
  374. package/dist/cli/goCommands.js +20 -0
  375. package/dist/cli/interactiveSetup.js +11 -1
  376. package/dist/cli/javascriptApplicationAnalysis.js +1 -1
  377. package/dist/cli/javascriptRecoveryCommands.js +18 -23
  378. package/dist/cli/jebCommands.js +2 -14
  379. package/dist/cli/jsonOutput.js +2 -2
  380. package/dist/cli/managedCommands.js +31 -3
  381. package/dist/cli/options.js +26 -2
  382. package/dist/cli/pcapCommands.js +29 -0
  383. package/dist/cli/processCommands.js +1 -1
  384. package/dist/cli/reverseEngineeringCommands.js +268 -0
  385. package/dist/cli/rustCommands.js +20 -0
  386. package/dist/cli/setupCommands.js +41 -12
  387. package/dist/cli/signalCommands.js +72 -0
  388. package/dist/cli/sqliteCommands.js +52 -0
  389. package/dist/cli/utilityCommands.js +116 -74
  390. package/dist/cli/wasmCommands.js +50 -0
  391. package/dist/cli/webModuleCommands.js +27 -38
  392. package/dist/cli/webNetworkCaptureCommands.js +10 -9
  393. package/dist/cli/webRuntimeCommands.js +15 -6
  394. package/dist/cli/webSourceLocationCommands.js +14 -33
  395. package/dist/cli-runtime/AnalysisCleanupLease-CWfTGYKd.js +103 -0
  396. package/dist/cli-runtime/AnalysisProvider-BGrYaMVo.js +38 -0
  397. package/dist/cli-runtime/AnalysisSnapshotCache-BjRlXeUS.js +711 -0
  398. package/dist/cli-runtime/ArtifactFileOperation-Dg4BcoEM.js +122 -0
  399. package/dist/cli-runtime/ArtifactReader-DMwm42bk.js +78 -0
  400. package/dist/cli-runtime/ArtifactResourceScope-CokZGcII.js +175 -0
  401. package/dist/cli-runtime/AsarHeader-BxwU17DJ.js +31 -0
  402. package/dist/cli-runtime/BinarySessionStatus-DRhjr7Vb.js +212 -0
  403. package/dist/cli-runtime/BinaryTargetResolver-tuCTjBlQ.js +1238 -0
  404. package/dist/cli-runtime/BoundedFileBytes-DRtiQNAQ.js +43 -0
  405. package/dist/cli-runtime/CdpTargetSession-CQ08KHbh.js +925 -0
  406. package/dist/cli-runtime/ClientConfigPath-Dn-V_GUf.js +255 -0
  407. package/dist/cli-runtime/ClientConfigurationDocument-C9T8MNGc.js +2021 -0
  408. package/dist/cli-runtime/ClientRegistrationStatus-PnD29RTX.js +585 -0
  409. package/dist/cli-runtime/CurrentEntrypointPath-m7QCIVN0.js +14 -0
  410. package/dist/cli-runtime/DirectAnalysis-C5NyUryV.js +581 -0
  411. package/dist/cli-runtime/DirectoryArtifactReader-CokAJ8vo.js +448 -0
  412. package/dist/cli-runtime/Doctor-DrkWsav4.js +668 -0
  413. package/dist/cli-runtime/ElectronFileScope-AP7VoVr7.js +1109 -0
  414. package/dist/cli-runtime/ElectronFuseFailures-DsjXR7Xp.js +609 -0
  415. package/dist/cli-runtime/ExecFileOutput-D6KLYTve.js +119 -0
  416. package/dist/cli-runtime/InterfaceBuilderDecodeBudget-CW1IO3dG.js +298 -0
  417. package/dist/cli-runtime/InventoryProjectionEvidence-DTH5QAqL.js +49 -0
  418. package/dist/cli-runtime/InvestigationProviders-CFh4a64d.js +118 -0
  419. package/dist/cli-runtime/JavaScriptApplicationEvidenceGraph-gOmPB2L6.js +160 -0
  420. package/dist/cli-runtime/JavaScriptApplicationWorkflowEvidence-WZgtK_Ok.js +75 -0
  421. package/dist/cli-runtime/JavaScriptWorkerMemoryLimit-B1bwMM1a.js +86 -0
  422. package/dist/cli-runtime/JebMcpEndpoint-BEalGZh9.js +710 -0
  423. package/dist/cli-runtime/JsonFiles-uvd6ZyQi.js +600 -0
  424. package/dist/cli-runtime/KunaInstallation-P0j3x851.js +1781 -0
  425. package/dist/cli-runtime/MacCodeSignature-MgYbRK_H.js +24 -0
  426. package/dist/cli-runtime/MacHopperPaths-bGzqjF1Z.js +34 -0
  427. package/dist/cli-runtime/MachoLoadCommandReader-CZm6N5vF.js +330 -0
  428. package/dist/cli-runtime/ManagedSnapshot-CPE9C3OD.js +4481 -0
  429. package/dist/cli-runtime/OwnedCommandCleanup-BN_V6Erc.js +187 -0
  430. package/dist/cli-runtime/OwnedRegularFile-D1f5nUCx.js +256 -0
  431. package/dist/cli-runtime/OwnedStagedOutput-D31dOozz.js +126 -0
  432. package/dist/cli-runtime/PrivateRuntimeRoot-Cd23u6jd.js +296 -0
  433. package/dist/cli-runtime/ProcessOwnership-CtrNr6ee.js +545 -0
  434. package/dist/cli-runtime/ProcessOwnershipObservation-C006iCtZ.js +920 -0
  435. package/dist/cli-runtime/ProviderDeadline-rSuH4Pm8.js +148 -0
  436. package/dist/cli-runtime/ProviderOperationExecution-CmU-XrQr.js +38 -0
  437. package/dist/cli-runtime/ProviderProcess-D87A7ctp.js +770 -0
  438. package/dist/cli-runtime/RegularFileRead-mbgGYtxe.js +125 -0
  439. package/dist/cli-runtime/SafeOutputTree-i904hd_2.js +525 -0
  440. package/dist/cli-runtime/SetupHost-CMPmPraB.js +1268 -0
  441. package/dist/cli-runtime/SharedStartupAttempt-BxKyf3Uv.js +1424 -0
  442. package/dist/cli-runtime/StableFileHash-Ame_h3lY.js +61 -0
  443. package/dist/cli-runtime/SupportedClients-DMafjitv.js +1066 -0
  444. package/dist/cli-runtime/UninstallFailure-1blyKXHE.js +22 -0
  445. package/dist/cli-runtime/Update-DAsASWlE.js +143 -0
  446. package/dist/cli-runtime/UpdateFailure-BcFNxEZZ.js +24 -0
  447. package/dist/cli-runtime/WindowsBatchCommand-Cx9kaVNf.js +97 -0
  448. package/dist/cli-runtime/WindowsNativeLoader-BqyZO0ZD.js +142 -0
  449. package/dist/cli-runtime/ZipArtifactReader-Jed69LEL.js +252 -0
  450. package/dist/cli-runtime/analysisErrorCleanup-COdAmDsb.js +33 -0
  451. package/dist/cli-runtime/appleArchiveFormat-Bb3G5CCI.js +269 -0
  452. package/dist/cli-runtime/application__DirectAnalysisStatus-F74bu9oy.js +150 -0
  453. package/dist/cli-runtime/application__EnhancedTools-Bg51b0Yp.js +1820 -0
  454. package/dist/cli-runtime/application__FunctionAnalysisEvidence-DBWIaYCh.js +41 -0
  455. package/dist/cli-runtime/application__ReconstructionCoverageService-AEPNpZqJ.js +32 -0
  456. package/dist/cli-runtime/application__ReconstructionObligationLedgerService-Cl9cPEZf.js +828 -0
  457. package/dist/cli-runtime/application__Setup-DwQzEewK.js +526 -0
  458. package/dist/cli-runtime/application__Uninstall-BOf9oyvQ.js +468 -0
  459. package/dist/cli-runtime/application__UpdateRuntime-CzWkRJHa.js +435 -0
  460. package/dist/cli-runtime/application__android__AndroidApplicationService-shW_aKlj.js +31 -0
  461. package/dist/cli-runtime/application__apple__AppleApplicationService-DIv6d3wB.js +31 -0
  462. package/dist/cli-runtime/application__harmony__HarmonyApplicationService-OIUFVQFV.js +31 -0
  463. package/dist/cli-runtime/application__javascript__ElectronActiveObservationService-wvCh72hK.js +118 -0
  464. package/dist/cli-runtime/application__javascript__ElectronObservationService-SydXPCwM.js +88 -0
  465. package/dist/cli-runtime/application__javascript__JavaScriptApplicationService-o0uEsjEc.js +12254 -0
  466. package/dist/cli-runtime/application__javascript__JavaScriptApplicationWorkflowService-BAheG_71.js +2336 -0
  467. package/dist/cli-runtime/application__javascript__JavaScriptRuntimeReconciliationService-Cnn4GP8q.js +88 -0
  468. package/dist/cli-runtime/application__javascript__JavaScriptSemanticTraceService-CmvLfV1A.js +299 -0
  469. package/dist/cli-runtime/artifacts__ArtifactProvider-wx2K0F2I.js +2205 -0
  470. package/dist/cli-runtime/binary-CWVNJhAC.js +19608 -0
  471. package/dist/cli-runtime/catalogIdentity-DAEEsOdX.js +1112 -0
  472. package/dist/cli-runtime/cli.js +44469 -0
  473. package/dist/cli-runtime/cliOutput-CgSuw782.js +163 -0
  474. package/dist/cli-runtime/cliOutput.js +5 -0
  475. package/dist/cli-runtime/cliResultOutput-10sd6xGx.js +1453 -0
  476. package/dist/cli-runtime/cliResultOutput.js +6 -0
  477. package/dist/cli-runtime/composition__browserScenario-BtPb1c1y.js +3414 -0
  478. package/dist/cli-runtime/composition__electronObservation-Bk8R6DJo.js +614 -0
  479. package/dist/cli-runtime/composition__electronScenario-BVF0qStH.js +916 -0
  480. package/dist/cli-runtime/cutterToolContracts-BQtG_Nzo.js +5267 -0
  481. package/dist/cli-runtime/doctorRuntime-B__SIpm-.js +478 -0
  482. package/dist/cli-runtime/dotnet__ManagedStaticProvider-DO5Yzcp4.js +5 -0
  483. package/dist/cli-runtime/errorSchemas-Ixz_q7qt.js +655 -0
  484. package/dist/cli-runtime/homeDirectory-DC_DeJIg.js +18 -0
  485. package/dist/cli-runtime/javascriptApplicationAnalysis-Dk6yBV8g.js +2088 -0
  486. package/dist/cli-runtime/javascriptExportReturnShapeProjection-CObOIiQ6.js +78 -0
  487. package/dist/cli-runtime/javascriptExportShapeComparisonSchemas-DpwuBenh.js +1244 -0
  488. package/dist/cli-runtime/javascriptRuntimeReconciliation-C6ZgWMys.js +1509 -0
  489. package/dist/cli-runtime/javascriptRuntimeReconciliationSchemas-D6tZKUQs.js +247 -0
  490. package/dist/cli-runtime/javascriptSemanticTraceSchemas-C7m0b6_w.js +126 -0
  491. package/dist/cli-runtime/lipo-DPQ6qurH.js +394 -0
  492. package/dist/cli-runtime/logger-BuDJ9xxO.js +48 -0
  493. package/dist/cli-runtime/machoContainer-Cy98bkFm.js +352 -0
  494. package/dist/cli-runtime/managedApplicationGraph-BazVqpJv.js +1136 -0
  495. package/dist/cli-runtime/managedToolContracts-BuFkMBH5.js +99 -0
  496. package/dist/cli-runtime/mcpDoctor.js +361 -0
  497. package/dist/cli-runtime/mcpStartupPolicy-imCbM3qo.js +28 -0
  498. package/dist/cli-runtime/native__NativeMacOSProvider-DTcRhuGA.js +5502 -0
  499. package/dist/cli-runtime/officialToolContracts-CzzVLx8I.js +1522 -0
  500. package/dist/cli-runtime/peMachine-B9ggfSJJ.js +95 -0
  501. package/dist/cli-runtime/propertyListKeys-D5dSASEy.js +355 -0
  502. package/dist/cli-runtime/providerCleanupError-BhsJyAhk.js +25 -0
  503. package/dist/cli-runtime/providerIdentities-Ao1XTvwx.js +31 -0
  504. package/dist/cli-runtime/providerStartupTimeout-B2tF2LtZ.js +17 -0
  505. package/dist/cli-runtime/readArtifactFileChunks-BbTL_PtB.js +129 -0
  506. package/dist/cli-runtime/reconstructionObligationLedgerSchemas-Bi6sect1.js +22156 -0
  507. package/dist/cli-runtime/rolldown-runtime-DXoylpqc.js +121 -0
  508. package/dist/cli-runtime/runtimeVersion-CMGd0bDu.js +23 -0
  509. package/dist/cli-runtime/safeJson-DKKACtdy.js +25 -0
  510. package/dist/cli-runtime/scanCanonical-CcDFUr-w.js +2594 -0
  511. package/dist/cli-runtime/snapshotEnvironment-Yvx5qwsl.js +196 -0
  512. package/dist/cli-runtime/toolContracts-CJzEyZ38.js +3795 -0
  513. package/dist/cli-runtime/toolOutputSchemaGroups-BqdSzySu.js +12249 -0
  514. package/dist/cli-runtime/workflowInputError-BP8z9Wxl.js +26 -0
  515. package/dist/cli.js +48 -5
  516. package/dist/cliBrowserScenarioCommands.js +41 -7
  517. package/dist/cliCommandNames.js +48 -0
  518. package/dist/cliEvidenceCommands.js +0 -1
  519. package/dist/cliJavaScriptRuntimeCommands.js +16 -14
  520. package/dist/cliJsonInput.js +12 -4
  521. package/dist/cliLogging.js +66 -15
  522. package/dist/cliObservationOptions.js +9 -0
  523. package/dist/cliOutput.js +105 -7
  524. package/dist/composition/binary.js +19 -2
  525. package/dist/composition/captures.js +3 -0
  526. package/dist/composition/directAnalysis.js +36 -11
  527. package/dist/composition/electronFuses.js +4 -0
  528. package/dist/composition/evm.js +12 -0
  529. package/dist/composition/flutter.js +3 -0
  530. package/dist/composition/go.js +4 -0
  531. package/dist/composition/javascriptAnalysisWorkerProcess.js +8 -8
  532. package/dist/composition/jeb.js +45 -5
  533. package/dist/composition/pcap.js +3 -0
  534. package/dist/composition/resolveWindowsProviderExecutable.js +61 -0
  535. package/dist/composition/reverseEngineering.js +29 -0
  536. package/dist/composition/rust.js +4 -0
  537. package/dist/composition/signals.js +3 -0
  538. package/dist/composition/sqlite.js +4 -0
  539. package/dist/composition/wasm.js +22 -0
  540. package/dist/composition/webNetworkCaptures.js +7 -2
  541. package/dist/config/environment.js +79 -4
  542. package/dist/config/ghidraDisabledAnalyzers.js +25 -0
  543. package/dist/config/homeDirectory.js +9 -6
  544. package/dist/config/mcpInputSchemaProfile.js +5 -1
  545. package/dist/config/mcpOutputSchemaProfile.js +22 -0
  546. package/dist/config/parseConfig.js +28 -34
  547. package/dist/config/parsers.js +4 -3
  548. package/dist/config/{ghidraStartupTimeout.js → providerStartupTimeout.js} +7 -3
  549. package/dist/contracts/adb/adbToolContracts.js +8 -8
  550. package/dist/contracts/analysisDetail.js +6 -3
  551. package/dist/contracts/analysisViewApiSurfaceExample.js +68 -0
  552. package/dist/contracts/analysisViewToolContracts.js +65 -3
  553. package/dist/contracts/android/androidToolContracts.js +17 -8
  554. package/dist/contracts/apktool/apktoolToolContracts.js +5 -1
  555. package/dist/contracts/applicationToolContracts.js +17 -2
  556. package/dist/contracts/artifactComparisonExample.js +18 -14
  557. package/dist/contracts/artifactToolContracts.js +16 -3
  558. package/dist/contracts/browserScenarioToolContracts.js +1 -1
  559. package/dist/contracts/browserToolContracts.js +13 -1
  560. package/dist/contracts/captures/captureToolContracts.js +42 -0
  561. package/dist/contracts/compactInputSchema.js +39 -12
  562. package/dist/contracts/cutterToolContracts.js +84 -0
  563. package/dist/contracts/enhancedToolContracts.js +2 -2
  564. package/dist/contracts/evm/evmToolContracts.js +30 -15
  565. package/dist/contracts/firmware/firmwareToolContracts.js +1 -1
  566. package/dist/contracts/flutter/flutterToolContracts.js +47 -0
  567. package/dist/contracts/fridaRemoteAddress.js +23 -0
  568. package/dist/contracts/fridaToolContracts.js +274 -0
  569. package/dist/contracts/functionComparisonExample.js +12 -1
  570. package/dist/contracts/gdbToolContracts.js +102 -0
  571. package/dist/contracts/go/goToolContracts.js +20 -0
  572. package/dist/contracts/hopperMemoryContracts.js +15 -0
  573. package/dist/contracts/inputSchemaPresentation.js +199 -38
  574. package/dist/contracts/investigationExamples.js +1 -0
  575. package/dist/contracts/javascript/electronToolContracts.js +27 -2
  576. package/dist/contracts/javascript/javascriptExportShapeComparisonExample.js +1 -0
  577. package/dist/contracts/javascript/javascriptRecoveryToolContracts.js +13 -1
  578. package/dist/contracts/javascript/javascriptRuntimeReconciliationExample.js +1 -0
  579. package/dist/contracts/jsonSchemaKeywords.js +29 -0
  580. package/dist/contracts/managed/managedToolContracts.js +43 -4
  581. package/dist/contracts/managed/managedWorkflowExamples.js +10 -1
  582. package/dist/contracts/managed/managedWorkflowToolContracts.js +4 -30
  583. package/dist/contracts/mobileApplicationGraphExamples.js +27 -12
  584. package/dist/contracts/native/binaryDiagnosticsToolContracts.js +3 -2
  585. package/dist/contracts/native/nativeToolContracts.js +10 -6
  586. package/dist/contracts/officialToolContracts.js +7 -7
  587. package/dist/contracts/pcap/pcapToolContracts.js +33 -0
  588. package/dist/contracts/providerSelection.js +1 -0
  589. package/dist/contracts/reconstructionReadinessExample.js +126 -119
  590. package/dist/contracts/reverseEngineeringToolContracts.js +52 -0
  591. package/dist/contracts/rizinDebugToolContracts.js +97 -0
  592. package/dist/contracts/rust/rustToolContracts.js +20 -0
  593. package/dist/contracts/sessionLifecycleInputs.js +34 -2
  594. package/dist/contracts/sessionToolContracts.js +4 -4
  595. package/dist/contracts/sessionToolSchemas.js +14 -0
  596. package/dist/contracts/signals/signalToolContracts.js +40 -0
  597. package/dist/contracts/sqlite/sqliteToolContracts.js +36 -0
  598. package/dist/contracts/toolContractExamples.js +29 -0
  599. package/dist/contracts/toolContractTypes.js +2 -0
  600. package/dist/contracts/toolContracts.js +26 -0
  601. package/dist/contracts/toolEffects.js +252 -9
  602. package/dist/contracts/toolOutputSchemaGroups.js +78 -32
  603. package/dist/contracts/toolOutputSchemaPrimitives.js +118 -10
  604. package/dist/contracts/toolSchemaMetadata.js +102 -16
  605. package/dist/contracts/unknownContractExamples.js +1 -1
  606. package/dist/contracts/wasm/wasmComparisonContracts.js +52 -0
  607. package/dist/contracts/wasm/wasmToolContracts.js +33 -0
  608. package/dist/contracts/webNetworkCaptureToolContracts.js +15 -4
  609. package/dist/cutter/CutterBridgeClient.js +760 -0
  610. package/dist/cutter/CutterBridgeService.js +187 -0
  611. package/dist/doctorRuntime.js +41 -8
  612. package/dist/domain/adb/adbDeviceAnalysis.js +45 -5
  613. package/dist/domain/analysisErrorBase.js +79 -2
  614. package/dist/domain/analysisErrorCleanup.js +4 -2
  615. package/dist/domain/analysisErrorCore.js +32 -0
  616. package/dist/domain/analysisErrorPresentation.js +80 -20
  617. package/dist/domain/analysisErrorProjection.js +72 -37
  618. package/dist/domain/analysisProfile.js +7 -3
  619. package/dist/domain/analysisSearch.js +26 -0
  620. package/dist/domain/analysisSnapshot.js +312 -185
  621. package/dist/domain/analysisView/WebNetworkApiSurfaceAccumulator.js +353 -0
  622. package/dist/domain/analysisView/analysisView.js +391 -44
  623. package/dist/domain/analysisView/analysisViewCoverage.js +32 -0
  624. package/dist/domain/analysisView/analysisViewDataAdmission.js +86 -0
  625. package/dist/domain/analysisView/analysisViewErrors.js +4 -0
  626. package/dist/domain/analysisView/analysisViewParent.js +12 -0
  627. package/dist/domain/analysisView/analysisViewText.js +29 -0
  628. package/dist/domain/analysisView/androidPackageView.js +102 -0
  629. package/dist/domain/analysisView/artifactInventoryView.js +126 -0
  630. package/dist/domain/analysisView/binaryLayoutView.js +11 -4
  631. package/dist/domain/analysisView/dartAotView.js +93 -0
  632. package/dist/domain/analysisView/evmInterfaceView.js +105 -0
  633. package/dist/domain/analysisView/interfaceBuilderView.js +182 -0
  634. package/dist/domain/analysisView/javascriptApplicationCoverage.js +27 -0
  635. package/dist/domain/analysisView/javascriptApplicationView.js +123 -49
  636. package/dist/domain/analysisView/javascriptFactsView.js +92 -0
  637. package/dist/domain/analysisView/javascriptModuleReferences.js +37 -0
  638. package/dist/domain/analysisView/machoView.js +186 -0
  639. package/dist/domain/analysisView/managedArtifactView.js +108 -0
  640. package/dist/domain/analysisView/managedMemberView.js +215 -0
  641. package/dist/domain/analysisView/nativeFunctionView.js +20 -25
  642. package/dist/domain/analysisView/pcapCaptureView.js +264 -0
  643. package/dist/domain/analysisView/qlogCaptureView.js +198 -0
  644. package/dist/domain/analysisView/wasmArtifactView.js +162 -0
  645. package/dist/domain/analysisView/webNetworkApiSurfaceView.js +123 -0
  646. package/dist/domain/analysisView/webNetworkCaptureView.js +388 -0
  647. package/dist/domain/android/androidAnalysis.js +36 -2
  648. package/dist/domain/android/androidApplication.js +37 -64
  649. package/dist/domain/apktool/apktoolResourceAnalysis.js +70 -8
  650. package/dist/domain/apple/appleApplication.js +70 -87
  651. package/dist/domain/apple/appleArchiveFormat.js +184 -0
  652. package/dist/domain/apple/appleAssetCatalog.js +15 -0
  653. package/dist/domain/apple/appleBundleAnatomy.js +57 -69
  654. package/dist/domain/apple/dyldPaths.js +9 -2
  655. package/dist/domain/apple/dylibResolution.js +24 -10
  656. package/dist/domain/apple/dylibResolutionFindings.js +8 -9
  657. package/dist/domain/apple/interfaceBuilderGraph.js +78 -33
  658. package/dist/domain/apple/interfaceBuilderKeyedArchive.js +39 -12
  659. package/dist/domain/apple/jvmClassFile.js +226 -0
  660. package/dist/domain/apple/keyedArchive.js +39 -17
  661. package/dist/domain/apple/machoContainer.js +123 -8
  662. package/dist/domain/apple/machoCpuIdentity.js +4 -0
  663. package/dist/domain/apple/plistNumbers.js +67 -5
  664. package/dist/domain/apple/plistValue.js +95 -19
  665. package/dist/domain/artifactComparison.js +116 -37
  666. package/dist/domain/artifactDecompressionBudget.js +26 -0
  667. package/dist/domain/artifactGraph.js +18 -9
  668. package/dist/domain/artifactIdentity.js +4 -1
  669. package/dist/domain/artifactInspection.js +34 -3
  670. package/dist/domain/artifactInventoryEvidence.js +146 -40
  671. package/dist/domain/binaryTarget.js +251 -109
  672. package/dist/domain/binaryTargetTypes.js +24 -1
  673. package/dist/domain/browserNetworkEvidence.js +24 -3
  674. package/dist/domain/browserObservation.js +92 -56
  675. package/dist/domain/browserObservationError.js +4 -4
  676. package/dist/domain/browserObservationSchemas.js +4 -1
  677. package/dist/domain/browserScenarioCapture.js +11 -1
  678. package/dist/domain/browserScenarioCaptureLimits.js +34 -0
  679. package/dist/domain/browserScenarioCaptureValues.js +76 -2
  680. package/dist/domain/browserScenarioDiff.js +120 -11
  681. package/dist/domain/browserScenarioDiffEvidence.js +44 -13
  682. package/dist/domain/browserScenarioDiffValues.js +10 -3
  683. package/dist/domain/browserScenarioNetworkComparison.js +158 -0
  684. package/dist/domain/browserScenarioNormalization.js +10 -13
  685. package/dist/domain/browserScenarioValues.js +7 -13
  686. package/dist/domain/browserSession.js +2 -2
  687. package/dist/domain/bundleComparison.js +1 -5
  688. package/dist/domain/callPath.js +40 -3
  689. package/dist/domain/captures/packetCapture.js +139 -0
  690. package/dist/domain/captures/packetFields.js +81 -0
  691. package/dist/domain/changedBehavior.js +43 -41
  692. package/dist/domain/comparisonSourceEvidence.js +6 -0
  693. package/dist/domain/dosCom.js +2 -2
  694. package/dist/domain/dosMz.js +66 -19
  695. package/dist/domain/electron/electronFuseEvidence.js +42 -0
  696. package/dist/domain/electron/electronFuses.js +360 -0
  697. package/dist/domain/elfFixedHeader.js +66 -0
  698. package/dist/domain/evidence.js +105 -39
  699. package/dist/domain/evidenceBundle.js +67 -22
  700. package/dist/domain/evidenceErrors.js +5 -0
  701. package/dist/domain/evm/evmInterface.js +18 -4
  702. package/dist/domain/evm/solidityMetadata.js +70 -0
  703. package/dist/domain/explicitSensitiveFailure.js +44 -23
  704. package/dist/domain/fileSnapshotObservation.js +25 -0
  705. package/dist/domain/firmware/firmwareAnalysis.js +29 -0
  706. package/dist/domain/fixedTupleSchema.js +9 -0
  707. package/dist/domain/flutter/flutterBuildAnalysis.js +141 -0
  708. package/dist/domain/functionCallCoverage.js +60 -0
  709. package/dist/domain/functionComparisonDimensions.js +136 -18
  710. package/dist/domain/functionComparisonNormalization.js +83 -19
  711. package/dist/domain/functionComparisonResults.js +7 -6
  712. package/dist/domain/functionComparisonSchemas.js +14 -3
  713. package/dist/domain/functionDossierEvidence.js +4 -0
  714. package/dist/domain/go/goBinary.js +96 -0
  715. package/dist/domain/harmony/harmonyApplication.js +156 -0
  716. package/dist/domain/hopperErrors.js +19 -18
  717. package/dist/domain/hopperPublisher.js +12 -0
  718. package/dist/domain/hopperValues.js +135 -34
  719. package/dist/domain/javascript/electronActiveObservation.js +1 -0
  720. package/dist/domain/javascript/electronObservation.js +4 -1
  721. package/dist/domain/javascript/electronStaticAnalysisBrowser.js +94 -33
  722. package/dist/domain/javascript/electronStaticAnalysisIpc.js +3 -1
  723. package/dist/domain/javascript/electronStaticAnalysisNative.js +19 -5
  724. package/dist/domain/javascript/electronStaticAnalysisValues.js +14 -28
  725. package/dist/domain/javascript/electronStaticOptionObjects.js +45 -0
  726. package/dist/domain/javascript/electronWrappedCallPaths.js +551 -0
  727. package/dist/domain/javascript/htmlArtifactReferences.js +94 -4
  728. package/dist/domain/javascript/javascriptAnalysisResourceControls.js +37 -1
  729. package/dist/domain/javascript/javascriptApplicationAnalysis.js +7 -0
  730. package/dist/domain/javascript/javascriptApplicationChangeGraph.js +10 -2
  731. package/dist/domain/javascript/javascriptApplicationEvidenceSchemas.js +1 -1
  732. package/dist/domain/javascript/javascriptApplicationGraph.js +17 -1
  733. package/dist/domain/javascript/javascriptApplicationGraphSchemas.js +1 -0
  734. package/dist/domain/javascript/javascriptApplicationProjectionResources.js +8 -0
  735. package/dist/domain/javascript/javascriptApplicationVersionComparisonSchemas.js +3 -1
  736. package/dist/domain/javascript/javascriptApplicationVersionItems.js +49 -21
  737. package/dist/domain/javascript/javascriptApplicationVersionKeys.js +31 -18
  738. package/dist/domain/javascript/javascriptArtifactFiles.js +2 -1
  739. package/dist/domain/javascript/javascriptAstFingerprint.js +89 -24
  740. package/dist/domain/javascript/javascriptAstValues.js +132 -5
  741. package/dist/domain/javascript/javascriptBootstrap.js +94 -0
  742. package/dist/domain/javascript/javascriptBootstrapIntegrity.js +372 -0
  743. package/dist/domain/javascript/javascriptBuiltinResourceMethods.js +8 -0
  744. package/dist/domain/javascript/javascriptBundledRequireOrigin.js +278 -0
  745. package/dist/domain/javascript/javascriptCommonJsExportReceivers.js +231 -0
  746. package/dist/domain/javascript/javascriptContextBridgeExposure.js +23 -0
  747. package/dist/domain/javascript/javascriptElectronMemberWrites.js +96 -22
  748. package/dist/domain/javascript/javascriptExportShapeComparisonSchemas.js +6 -5
  749. package/dist/domain/javascript/javascriptExportShapeVariants.js +1 -1
  750. package/dist/domain/javascript/javascriptFeatureSeed.js +34 -17
  751. package/dist/domain/javascript/javascriptFeatureTrace.js +9 -3
  752. package/dist/domain/javascript/javascriptFeatureTraceSchemas.js +42 -11
  753. package/dist/domain/javascript/javascriptGraphqlOperations.js +382 -0
  754. package/dist/domain/javascript/javascriptIntrinsicInvocation.js +132 -0
  755. package/dist/domain/javascript/javascriptModuleDeclaration.js +48 -0
  756. package/dist/domain/javascript/javascriptModuleInterop.js +618 -0
  757. package/dist/domain/javascript/javascriptModuleResolutionMode.js +18 -0
  758. package/dist/domain/javascript/javascriptModuleSpecifier.js +5 -0
  759. package/dist/domain/javascript/javascriptNativeHandoff.js +7 -12
  760. package/dist/domain/javascript/javascriptPackageImportAliases.js +58 -0
  761. package/dist/domain/javascript/javascriptRecovery.js +12 -5
  762. package/dist/domain/javascript/javascriptRpcEndpoints.js +7 -93
  763. package/dist/domain/javascript/javascriptRuntimeLoadState.js +16 -0
  764. package/dist/domain/javascript/javascriptRuntimeObservation.js +4 -1
  765. package/dist/domain/javascript/javascriptRuntimeReconciliationCaptureParsing.js +45 -16
  766. package/dist/domain/javascript/javascriptRuntimeReconciliationMatching.js +65 -47
  767. package/dist/domain/javascript/javascriptRuntimeReconciliationResult.js +0 -1
  768. package/dist/domain/javascript/javascriptRuntimeReconciliationSchemas.js +5 -4
  769. package/dist/domain/javascript/javascriptRuntimeStaticCandidates.js +113 -11
  770. package/dist/domain/javascript/javascriptSemanticAmbientWrites.js +511 -0
  771. package/dist/domain/javascript/javascriptSemanticAnalysis.js +706 -204
  772. package/dist/domain/javascript/javascriptSemanticAsyncEffects.js +54 -54
  773. package/dist/domain/javascript/javascriptSemanticCallResolution.js +59 -30
  774. package/dist/domain/javascript/javascriptSemanticCallableStack.js +52 -0
  775. package/dist/domain/javascript/javascriptSemanticCalls.js +10 -15
  776. package/dist/domain/javascript/javascriptSemanticChildProcesses.js +163 -92
  777. package/dist/domain/javascript/javascriptSemanticCoverage.js +5 -1
  778. package/dist/domain/javascript/javascriptSemanticDataEffectHelpers.js +435 -45
  779. package/dist/domain/javascript/javascriptSemanticDataEffects.js +46 -29
  780. package/dist/domain/javascript/javascriptSemanticDependencies.js +69 -0
  781. package/dist/domain/javascript/javascriptSemanticDerivedAnalysis.js +1 -1
  782. package/dist/domain/javascript/javascriptSemanticEvaluationOrder.js +126 -0
  783. package/dist/domain/javascript/javascriptSemanticExpressionShapes.js +111 -0
  784. package/dist/domain/javascript/javascriptSemanticFingerprints.js +11 -14
  785. package/dist/domain/javascript/javascriptSemanticGetterQueries.js +147 -0
  786. package/dist/domain/javascript/javascriptSemanticGetterResults.js +264 -0
  787. package/dist/domain/javascript/javascriptSemanticGraph.js +22 -1
  788. package/dist/domain/javascript/javascriptSemanticGraphSchemas.js +13 -1
  789. package/dist/domain/javascript/javascriptSemanticIterationSources.js +5 -4
  790. package/dist/domain/javascript/javascriptSemanticMapOperations.js +51 -0
  791. package/dist/domain/javascript/javascriptSemanticMemberMutations.js +421 -154
  792. package/dist/domain/javascript/javascriptSemanticMutationInitializers.js +500 -27
  793. package/dist/domain/javascript/javascriptSemanticObjectReferences.js +377 -174
  794. package/dist/domain/javascript/javascriptSemanticObjects.js +53 -43
  795. package/dist/domain/javascript/javascriptSemanticOpaqueEffects.js +163 -0
  796. package/dist/domain/javascript/javascriptSemanticPrimitives.js +11 -1
  797. package/dist/domain/javascript/javascriptSemanticProjection.js +180 -95
  798. package/dist/domain/javascript/javascriptSemanticPromises.js +6 -9
  799. package/dist/domain/javascript/javascriptSemanticProvenance.js +5 -1
  800. package/dist/domain/javascript/javascriptSemanticQuery.js +7 -2
  801. package/dist/domain/javascript/javascriptSemanticQueryIdentity.js +2 -1
  802. package/dist/domain/javascript/javascriptSemanticQuerySchemas.js +1 -1
  803. package/dist/domain/javascript/javascriptSemanticReferenceSources.js +25 -0
  804. package/dist/domain/javascript/javascriptSemanticRequireOrigin.js +369 -8
  805. package/dist/domain/javascript/javascriptSemanticResourceLimits.js +3 -19
  806. package/dist/domain/javascript/javascriptSemanticResources.js +33 -44
  807. package/dist/domain/javascript/javascriptSemanticReturnedReferences.js +81 -26
  808. package/dist/domain/javascript/javascriptSemanticReturns.js +37 -30
  809. package/dist/domain/javascript/javascriptSemanticState.js +225 -39
  810. package/dist/domain/javascript/javascriptSemanticTraversal.js +6 -4
  811. package/dist/domain/javascript/javascriptSemanticValues.js +379 -56
  812. package/dist/domain/javascript/javascriptSourceMapPaths.js +44 -17
  813. package/dist/domain/javascript/javascriptSourceParser.js +121 -7
  814. package/dist/domain/javascript/javascriptSourceSelection.js +11 -0
  815. package/dist/domain/javascript/javascriptStaticAnalysis.js +69 -24
  816. package/dist/domain/javascript/javascriptStaticAnalysisBundler.js +97 -23
  817. package/dist/domain/javascript/javascriptStaticAnalysisCalls.js +488 -48
  818. package/dist/domain/javascript/javascriptStaticAnalysisHelpers.js +196 -78
  819. package/dist/domain/javascript/javascriptStaticAnalysisState.js +4 -0
  820. package/dist/domain/javascript/javascriptStaticAnalysisTypes.js +2 -1
  821. package/dist/domain/javascript/javascriptSymbolicBindings.js +1118 -0
  822. package/dist/domain/javascript/javascriptSymbolicControlFlow.js +44 -0
  823. package/dist/domain/javascript/javascriptSymbolicValues.js +45 -0
  824. package/dist/domain/javascript/sourceToBundleComparison.js +3 -1
  825. package/dist/domain/javascript/sourceToBundleComparisonSchemas.js +2 -0
  826. package/dist/domain/javascript/sourceToBundleSignals.js +50 -13
  827. package/dist/domain/jsonValue.js +37 -12
  828. package/dist/domain/localPath.js +6 -3
  829. package/dist/domain/managed/managedApplicationGraph.js +5 -0
  830. package/dist/domain/managed/managedApplicationGraphCoverage.js +6 -2
  831. package/dist/domain/managed/managedApplicationGraphNodes.js +14 -10
  832. package/dist/domain/managed/managedArtifact.js +77 -1
  833. package/dist/domain/managed/managedInspectionEvidence.js +5 -6
  834. package/dist/domain/managed/managedMemberComparison.js +6 -0
  835. package/dist/domain/managed/managedMemberComparisonCoverage.js +36 -3
  836. package/dist/domain/managed/managedMemberComparisonItems.js +135 -59
  837. package/dist/domain/managed/managedMemberComparisonMatch.js +237 -42
  838. package/dist/domain/managed/managedMemberSignatureIdentity.js +40 -0
  839. package/dist/domain/managed/managedNativeVerificationMatch.js +54 -31
  840. package/dist/domain/managed/managedNativeVerificationSchemas.js +15 -4
  841. package/dist/domain/managed/managedReconstruction.js +5 -8
  842. package/dist/domain/mobileApplicationGraphProjection.js +95 -0
  843. package/dist/domain/native/addressCoordinate.js +11 -0
  844. package/dist/domain/native/binaryLayout.js +2 -4
  845. package/dist/domain/native/bytePattern.js +121 -0
  846. package/dist/domain/native/nativeAotPe.js +31 -4
  847. package/dist/domain/native/nativeAotSnapshotObservation.js +18 -0
  848. package/dist/domain/native/nativeCallPartialObservation.js +14 -12
  849. package/dist/domain/native/nativeInspection.js +38 -4
  850. package/dist/domain/native/nativeInstruction.js +17 -2
  851. package/dist/domain/native/nativeInvestigationGraph.js +9 -5
  852. package/dist/domain/native/nativeLoadImage.js +32 -1
  853. package/dist/domain/native/nativeUiObservation.js +5 -6
  854. package/dist/domain/native/objcSwiftMetadata.js +19 -9
  855. package/dist/domain/native/peResources.js +14 -4
  856. package/dist/domain/native/recordedCrash.js +79 -10
  857. package/dist/domain/offsetDateTime.js +60 -0
  858. package/dist/domain/pcap/pcapAnalysis.js +91 -0
  859. package/dist/domain/pcap/pcapEvidence.js +15 -0
  860. package/dist/domain/peMachine.js +38 -0
  861. package/dist/domain/pngHeader.js +18 -0
  862. package/dist/domain/process/processCaptureCoverage.js +26 -3
  863. package/dist/domain/process/processCaptureExample.js +2 -0
  864. package/dist/domain/process/processCaptureValidation.js +33 -8
  865. package/dist/domain/process/processComparison.js +41 -13
  866. package/dist/domain/process/processScenario.js +7 -0
  867. package/dist/domain/process/processTraceDimensionProjection.js +1 -1
  868. package/dist/domain/process/processTraceEvaluation.js +119 -74
  869. package/dist/domain/process/processTraceSpecification.js +243 -89
  870. package/dist/domain/propertyListKeys.js +238 -23
  871. package/dist/domain/propertyListXml.js +149 -0
  872. package/dist/domain/propertyListXmlText.js +20 -4
  873. package/dist/domain/providerAdapterError.js +2 -5
  874. package/dist/domain/providerCleanupError.js +2 -4
  875. package/dist/domain/providerConfigurationRefusal.js +12 -0
  876. package/dist/domain/providerSelectionError.js +2 -1
  877. package/dist/domain/qlogCapture.js +62 -0
  878. package/dist/domain/rawBinary.js +105 -0
  879. package/dist/domain/reconstructionCoverage.js +40 -24
  880. package/dist/domain/reconstructionCoverageEvaluation.js +50 -47
  881. package/dist/domain/reconstructionCoverageEvidence.js +26 -0
  882. package/dist/domain/reconstructionCoverageVerifierResults.js +35 -0
  883. package/dist/domain/reconstructionObligationLedgerIntegrity.js +114 -0
  884. package/dist/domain/reconstructionObligationLedgerSchemas.js +104 -1
  885. package/dist/domain/reconstructionReadiness.js +4 -8
  886. package/dist/domain/reconstructionReadinessJourneyFindings.js +4 -1
  887. package/dist/domain/reconstructionUnknowns.js +9 -1
  888. package/dist/domain/reconstructionVerification.js +86 -43
  889. package/dist/domain/recordedTransportUrl.js +59 -0
  890. package/dist/domain/referenceSourceClassification.js +27 -23
  891. package/dist/domain/referenceSourceGraph.js +51 -13
  892. package/dist/domain/referenceSourceImportParsing.js +27 -13
  893. package/dist/domain/referenceSourcePathIdentity.js +13 -1
  894. package/dist/domain/referenceSourceRequireBindings.js +40 -108
  895. package/dist/domain/referenceSourceSummary.js +92 -0
  896. package/dist/domain/relationshipCoverage.js +43 -0
  897. package/dist/domain/residualUnknown.js +93 -26
  898. package/dist/domain/reverseEngineering.js +31 -0
  899. package/dist/domain/runtimeVersion.js +8 -0
  900. package/dist/domain/rust/rustBinary.js +200 -0
  901. package/dist/domain/signals/annotationTextWindow.js +31 -0
  902. package/dist/domain/signals/signalDecoders.js +69 -0
  903. package/dist/domain/signals/signalRecording.js +115 -0
  904. package/dist/domain/sourceMapContents.js +10 -3
  905. package/dist/domain/sourceMapEnvelope.js +17 -11
  906. package/dist/domain/sqlite/sqliteDatabase.js +189 -0
  907. package/dist/domain/staticRuntimeCorrelation.js +7 -9
  908. package/dist/domain/swiftSymbolClassification.js +17 -0
  909. package/dist/domain/symbolAnalysis.js +20 -7
  910. package/dist/domain/urlComponents.js +6 -0
  911. package/dist/domain/wasm/wasmArtifact.js +119 -0
  912. package/dist/domain/wasm/wasmInterface.js +89 -0
  913. package/dist/domain/webBundleAnalysis.js +14 -3
  914. package/dist/domain/webBundleAnalyzerAst.js +7 -2
  915. package/dist/domain/webBundleAnalyzerInspection.js +113 -57
  916. package/dist/domain/webBundleAnalyzerResult.js +18 -6
  917. package/dist/domain/webCaptureDiff.js +235 -51
  918. package/dist/domain/webCaptureFrameComparison.js +49 -0
  919. package/dist/domain/webInventory.js +28 -14
  920. package/dist/domain/webMcpDiscovery.js +5 -2
  921. package/dist/domain/webModuleImports.js +22 -27
  922. package/dist/domain/webModuleTrace.js +25 -8
  923. package/dist/domain/webNetworkCapture.js +101 -39
  924. package/dist/domain/webNetworkCaptureCoordinates.js +21 -0
  925. package/dist/domain/webRuntime.js +0 -1
  926. package/dist/domain/webScreenshot.js +2 -2
  927. package/dist/domain/webScriptArtifacts.js +2 -4
  928. package/dist/domain/webScriptExport.js +6 -8
  929. package/dist/domain/webScriptExportError.js +2 -3
  930. package/dist/domain/webScriptExportPlan.js +2 -2
  931. package/dist/domain/webSourceLocation.js +20 -9
  932. package/dist/domain/xmlDocument.js +41 -0
  933. package/dist/domain/zipPackageFormat.js +25 -3
  934. package/dist/dotnet/ManagedArtifactInspector.js +25 -12
  935. package/dist/dotnet/ManagedDecodeBudget.js +87 -9
  936. package/dist/dotnet/ManagedMemberInspector.js +127 -22
  937. package/dist/dotnet/ManagedMemberInspectorCore.js +408 -141
  938. package/dist/dotnet/ManagedMemberInstructionDecoder.js +109 -37
  939. package/dist/dotnet/ManagedMemberOwnership.js +65 -0
  940. package/dist/dotnet/ManagedMemberPointers.js +69 -0
  941. package/dist/dotnet/ManagedMemberRows.js +181 -48
  942. package/dist/dotnet/ManagedMetadataHeaps.js +110 -25
  943. package/dist/dotnet/ManagedMetadataInventory.js +5 -5
  944. package/dist/dotnet/ManagedMetadataInventoryRows.js +36 -52
  945. package/dist/dotnet/ManagedMetadataLayout.js +26 -16
  946. package/dist/dotnet/ManagedMetadataRowSizes.js +1 -1
  947. package/dist/dotnet/ManagedMethodBodyReader.js +29 -11
  948. package/dist/dotnet/ManagedMethodSpecs.js +78 -0
  949. package/dist/dotnet/ManagedNativeBoundaryHelpers.js +20 -19
  950. package/dist/dotnet/ManagedNativeBoundaryInspector.js +13 -21
  951. package/dist/dotnet/ManagedPeReader.js +60 -27
  952. package/dist/dotnet/ManagedReaderFailure.js +9 -0
  953. package/dist/dotnet/ManagedSnapshot.js +93 -0
  954. package/dist/dotnet/ManagedStaticProvider.js +55 -64
  955. package/dist/dotnet/ManagedTypeMemberLists.js +105 -0
  956. package/dist/dotnet/ManagedTypeNameDigests.js +177 -0
  957. package/dist/dotnet/ManagedTypeNames.js +58 -0
  958. package/dist/dotnet/ManagedTypeNesting.js +25 -0
  959. package/dist/dotnet/ManagedTypeReferences.js +94 -0
  960. package/dist/dotnet/ManagedUserStrings.js +75 -0
  961. package/dist/electron/ElectronFuseFailures.js +105 -0
  962. package/dist/electron/ElectronFusePath.js +248 -0
  963. package/dist/electron/ElectronFuseProvider.js +88 -0
  964. package/dist/electron/ElectronFuseReader.js +333 -0
  965. package/dist/evaluation/AgentEvaluationFixtures.js +194 -11
  966. package/dist/evaluation/CodexAgentEval.js +19 -40
  967. package/dist/evaluation/KnownAnswerEvaluation.js +126 -57
  968. package/dist/evm/EvmoleFailures.js +20 -14
  969. package/dist/evm/EvmoleInterfaceAdapter.js +5 -1
  970. package/dist/evm/EvmoleInterfaceProvider.js +142 -35
  971. package/dist/evm/EvmoleInterfaceWorker.js +2 -0
  972. package/dist/evm/SolidityMetadata.js +139 -0
  973. package/dist/filesystem/OwnedRegularFile.js +116 -0
  974. package/dist/filesystem/OwnedStagedOutput.js +155 -0
  975. package/dist/filesystem/RegularFile.js +65 -9
  976. package/dist/filesystem/StableFileHash.js +56 -38
  977. package/dist/filesystem/callerPath.js +26 -0
  978. package/dist/filesystem/readFileHandleChunks.js +72 -13
  979. package/dist/filesystem/readStableFileBytes.js +85 -0
  980. package/dist/firmware/FirmwareCommand.js +15 -9
  981. package/dist/firmware/FirmwareFailures.js +56 -0
  982. package/dist/firmware/FirmwareFiles.js +136 -110
  983. package/dist/firmware/FirmwareProvider.js +122 -65
  984. package/dist/firmware/FirmwarePublication.js +244 -12
  985. package/dist/firmware/FirmwareReports.js +202 -12
  986. package/dist/flutter/DartElf.js +445 -0
  987. package/dist/flutter/ElfBuildId.js +137 -0
  988. package/dist/flutter/ElfLoadMap.js +91 -0
  989. package/dist/flutter/FlutterBuildProvider.js +866 -0
  990. package/dist/flutter/FlutterPayloadScan.js +180 -0
  991. package/dist/frida/FridaInstrumentationManager.js +1104 -0
  992. package/dist/gdb/GdbSessionManager.js +1639 -0
  993. package/dist/generatedPackageMetadata.js +2 -2
  994. package/dist/ghidra/GhidraAnalysisProfile.js +146 -14
  995. package/dist/ghidra/GhidraAnalysisSeeds.js +39 -55
  996. package/dist/ghidra/GhidraBridgeSources.js +12 -0
  997. package/dist/ghidra/GhidraClient.js +501 -180
  998. package/dist/ghidra/GhidraClientStartup.js +5 -3
  999. package/dist/ghidra/GhidraClientWire.js +5 -2
  1000. package/dist/ghidra/GhidraDiagnostics.js +23 -5
  1001. package/dist/ghidra/GhidraDoctor.js +60 -26
  1002. package/dist/ghidra/GhidraDosSnapshot.js +83 -0
  1003. package/dist/ghidra/GhidraExecutableHeader.js +54 -0
  1004. package/dist/ghidra/GhidraFileArtifacts.js +93 -0
  1005. package/dist/ghidra/GhidraFunctionValues.js +50 -2
  1006. package/dist/ghidra/GhidraInstallation.js +305 -108
  1007. package/dist/ghidra/GhidraInstallationPolicy.js +94 -103
  1008. package/dist/ghidra/GhidraInstallationProperties.js +57 -0
  1009. package/dist/ghidra/GhidraInventoryValues.js +52 -6
  1010. package/dist/ghidra/GhidraJavaLaunch.js +99 -11
  1011. package/dist/ghidra/GhidraJavaProbe.js +267 -0
  1012. package/dist/ghidra/GhidraJavaProperties.js +119 -0
  1013. package/dist/ghidra/GhidraLanguageCatalog.js +83 -8
  1014. package/dist/ghidra/GhidraLauncher.js +325 -85
  1015. package/dist/ghidra/GhidraLoadImageAttest.js +82 -65
  1016. package/dist/ghidra/GhidraLoadImageValues.js +109 -27
  1017. package/dist/ghidra/GhidraMipsProfile.js +258 -14
  1018. package/dist/ghidra/GhidraNativeAotSnapshotOwner.js +221 -0
  1019. package/dist/ghidra/GhidraPeProfile.js +91 -0
  1020. package/dist/ghidra/GhidraPowerPcProfile.js +51 -0
  1021. package/dist/ghidra/GhidraProvider.js +267 -42
  1022. package/dist/ghidra/GhidraProviderCapabilities.js +29 -15
  1023. package/dist/ghidra/GhidraProviderClient.js +439 -276
  1024. package/dist/ghidra/GhidraPspExtension.js +210 -0
  1025. package/dist/ghidra/GhidraPspProfile.js +62 -0
  1026. package/dist/ghidra/GhidraRawBinaryLanguage.js +49 -0
  1027. package/dist/ghidra/GhidraReleasePolicy.js +93 -0
  1028. package/dist/ghidra/GhidraRequestQueue.js +64 -40
  1029. package/dist/ghidra/GhidraRiscvProfile.js +100 -0
  1030. package/dist/ghidra/GhidraSessionError.js +301 -24
  1031. package/dist/ghidra/GhidraSessionValues.js +76 -0
  1032. package/dist/ghidra/GhidraSocketConnection.js +25 -11
  1033. package/dist/ghidra/GhidraTargetSnapshot.js +67 -50
  1034. package/dist/ghidra/GhidraTransport.js +86 -62
  1035. package/dist/ghidra/extensions/GhidraExtensions.js +30 -45
  1036. package/dist/go/GoBinaryContainer.js +140 -0
  1037. package/dist/go/GoBinaryImage.js +210 -0
  1038. package/dist/go/GoBinaryProvider.js +180 -0
  1039. package/dist/go/GoElfImage.js +211 -0
  1040. package/dist/go/GoMachoImage.js +164 -0
  1041. package/dist/go/GoModuleText.js +217 -0
  1042. package/dist/go/GoPeImage.js +124 -0
  1043. package/dist/hopper/BridgeLauncher.js +78 -6
  1044. package/dist/hopper/HopperAnalysisProfile.js +23 -11
  1045. package/dist/hopper/HopperCleanup.js +29 -4
  1046. package/dist/hopper/HopperClient.js +317 -93
  1047. package/dist/hopper/HopperMacPublisher.js +29 -0
  1048. package/dist/hopper/HopperMachOImage.js +61 -29
  1049. package/dist/hopper/HopperProcessDiagnostic.js +27 -0
  1050. package/dist/hopper/HopperProvider.js +57 -29
  1051. package/dist/hopper/HopperProviderCapabilities.js +9 -4
  1052. package/dist/hopper/HopperRegexSearch.js +21 -60
  1053. package/dist/hopper/HopperRequestQueue.js +17 -5
  1054. package/dist/hopper/HopperSessionValues.js +10 -1
  1055. package/dist/ida/IdaBusyHealth.js +78 -0
  1056. package/dist/ida/IdaCallGraph.js +134 -0
  1057. package/dist/ida/IdaConfiguration.js +7 -2
  1058. package/dist/ida/IdaDiagnosticRedactor.js +199 -0
  1059. package/dist/ida/IdaDiagnosticWriter.js +62 -0
  1060. package/dist/ida/IdaDoctor.js +7 -5
  1061. package/dist/ida/IdaJsonDiagnostic.js +138 -0
  1062. package/dist/ida/IdaMcpConnection.js +308 -32
  1063. package/dist/ida/IdaNativeProtocol.js +85 -0
  1064. package/dist/ida/IdaOperationRunner.js +246 -61
  1065. package/dist/ida/IdaProtocolValues.js +88 -5
  1066. package/dist/ida/IdaProvider.js +45 -10
  1067. package/dist/ida/IdaProviderCapabilities.js +37 -8
  1068. package/dist/ida/IdaSessionClient.js +379 -60
  1069. package/dist/ida/IdaWorkspace.js +54 -6
  1070. package/dist/inspector/V8InspectorCaptureProjection.js +14 -2
  1071. package/dist/inspector/V8InspectorEndpoint.js +15 -13
  1072. package/dist/inspector/V8InspectorProvider.js +43 -7
  1073. package/dist/javascript/analysis/JavaScriptAnalysisTransfer.js +44 -12
  1074. package/dist/javascript/analysis/JavaScriptAnalysisWorker.js +107 -32
  1075. package/dist/javascript/analysis/JavaScriptAnalysisWorkerProtocol.js +7 -4
  1076. package/dist/javascript/analysis/JavaScriptAnalysisWorkerSchemas.js +85 -10
  1077. package/dist/javascript/analysis/JavaScriptAnalysisWorkerServer.js +16 -6
  1078. package/dist/javascript/recovery/RecoveryFiles.js +107 -13
  1079. package/dist/javascript/recovery/WakaruExecution.js +19 -11
  1080. package/dist/javascript/recovery/WakaruProvider.js +12 -9
  1081. package/dist/javascript/recovery/WakaruPublication.js +24 -10
  1082. package/dist/javascript/recovery/WakaruRelease.js +1 -1
  1083. package/dist/javascript/recovery/WakaruReport.js +3 -2
  1084. package/dist/javascript/sourceMaps/DecodedSourceMap.js +2 -16
  1085. package/dist/javascript/sourceMaps/SourceMapCommand.js +22 -4
  1086. package/dist/javascript/sourceMaps/SourceMapDecoder.js +22 -4
  1087. package/dist/javascript/sourceMaps/SourceMapFormat.js +25 -38
  1088. package/dist/javascript/sourceMaps/TraceSourceMap.js +34 -6
  1089. package/dist/jeb/JebMcpConnection.js +148 -82
  1090. package/dist/jeb/JebMcpConnectionOwner.js +116 -0
  1091. package/dist/jeb/JebMcpDeadline.js +46 -0
  1092. package/dist/jeb/JebMcpEndpoint.js +6 -1
  1093. package/dist/jeb/JebProvider.js +82 -58
  1094. package/dist/kuna/KunaAddress.js +11 -0
  1095. package/dist/kuna/KunaCommand.js +217 -0
  1096. package/dist/kuna/KunaConfiguration.js +90 -0
  1097. package/dist/kuna/KunaDoctor.js +198 -0
  1098. package/dist/kuna/KunaInstallation.js +137 -0
  1099. package/dist/kuna/KunaJson.js +23 -0
  1100. package/dist/kuna/KunaJsonStream.js +433 -0
  1101. package/dist/kuna/KunaLimits.js +5 -0
  1102. package/dist/kuna/KunaProjectCache.js +804 -0
  1103. package/dist/kuna/KunaProjectExport.js +202 -0
  1104. package/dist/kuna/KunaProjectFiles.js +191 -0
  1105. package/dist/kuna/KunaProjectReader.js +115 -0
  1106. package/dist/kuna/KunaProvider.js +217 -0
  1107. package/dist/kuna/KunaProviderCapabilities.js +102 -0
  1108. package/dist/kuna/KunaQueryErrors.js +12 -0
  1109. package/dist/kuna/KunaQueryWork.js +113 -0
  1110. package/dist/kuna/KunaReferenceFiles.js +258 -0
  1111. package/dist/kuna/KunaReferenceQueries.js +211 -0
  1112. package/dist/kuna/KunaRelease.js +10 -0
  1113. package/dist/kuna/KunaRunSlots.js +56 -0
  1114. package/dist/kuna/KunaSessionClient.js +1162 -0
  1115. package/dist/kuna/KunaStringInventory.js +145 -0
  1116. package/dist/kuna/KunaStringQueries.js +133 -0
  1117. package/dist/kuna/KunaTargetCommands.js +205 -0
  1118. package/dist/kuna/KunaUnavailable.js +11 -0
  1119. package/dist/logger.js +14 -1
  1120. package/dist/main/processShutdown.js +17 -0
  1121. package/dist/main/shutdown.js +3 -0
  1122. package/dist/main/transport.js +68 -4
  1123. package/dist/main.js +16 -15
  1124. package/dist/mcp/AnalysisProvider-BABWbLoM.js +38 -0
  1125. package/dist/mcp/AnalysisSnapshotFiles-BXz0c37-.js +1423 -0
  1126. package/dist/mcp/ArtifactFileOperation-64cQKI7B.js +1704 -0
  1127. package/dist/mcp/ArtifactProvider-Dx6pmil1.js +2200 -0
  1128. package/dist/mcp/ArtifactProviderMetadata-UCJr2oZW.js +167 -0
  1129. package/dist/mcp/ArtifactReader-BrnwNaKY.js +78 -0
  1130. package/dist/mcp/ArtifactResourceScope-zi3Dkqzy.js +175 -0
  1131. package/dist/mcp/AsarHeader-B_IbppTz.js +31 -0
  1132. package/dist/mcp/BinarySessionStatus-CZ9nnXMt.js +213 -0
  1133. package/dist/mcp/BinaryTargetResolver-BUncASDP.js +1358 -0
  1134. package/dist/mcp/BoundedFileBytes-DYt5q9G2.js +43 -0
  1135. package/dist/mcp/CdpCaptureDocuments-Y2uFcBpl.js +795 -0
  1136. package/dist/mcp/CdpCaptureValues-tNIg-gQK.js +97 -0
  1137. package/dist/mcp/CdpEndpoint-BrhMhpSi.js +641 -0
  1138. package/dist/mcp/CdpOptionalCommand-PZZhlqxv.js +120 -0
  1139. package/dist/mcp/CdpTargetSession-BmmDC3XO.js +290 -0
  1140. package/dist/mcp/DirectAnalysis-B9KuCHTG.js +417 -0
  1141. package/dist/mcp/DirectAnalysisStatus-BgzopkIt.js +44 -0
  1142. package/dist/mcp/ElectronFileScope-FXtK0d6I.js +110 -0
  1143. package/dist/mcp/ElectronFuseFailures-uZ_wOV6T.js +610 -0
  1144. package/dist/mcp/MachoLoadCommandReader-C2VGgHA3.js +330 -0
  1145. package/dist/mcp/ManagedStaticProvider-CZuoPme2.js +5326 -0
  1146. package/dist/mcp/NativeMacOSProvider-CMguKrvN.js +5495 -0
  1147. package/dist/mcp/NativeMacOSProviderMetadata-B_RH4KXF.js +397 -0
  1148. package/dist/mcp/OwnedCommand-BW1jBSt9.js +1241 -0
  1149. package/dist/mcp/ProcedureAddressResolution-H6Qwpb_Y.js +59 -0
  1150. package/dist/mcp/WorkflowEvidence-CO4C7ALz.js +118 -0
  1151. package/dist/mcp/analysisErrorCleanup-Q344SnTO.js +34 -0
  1152. package/dist/mcp/analysisErrorCore-BIEP7tvF.js +509 -0
  1153. package/dist/mcp/analysisErrorProjection-B8teQwwD.js +942 -0
  1154. package/dist/mcp/artifactToolContracts-C9dRDo-D.js +74 -0
  1155. package/dist/mcp/browserObservation-DUraZs62.js +4633 -0
  1156. package/dist/mcp/browserObservationError-C5okJ5el.js +63 -0
  1157. package/dist/mcp/browserObservationSchemas-DwGGxBpu.js +573 -0
  1158. package/dist/mcp/browserScenario-BRUz7yN0.js +3415 -0
  1159. package/dist/mcp/browserScenarioCapture-CiMAsMx8.js +595 -0
  1160. package/dist/mcp/callerPath-CpPnMZyN.js +678 -0
  1161. package/dist/mcp/canonicalDigest-Bi_0_zGi.js +71 -0
  1162. package/dist/mcp/electronActiveObservation-DV0Ffy9X.js +227 -0
  1163. package/dist/mcp/electronFuses-D5SS7XXw.js +367 -0
  1164. package/dist/mcp/electronObservation-DsN-NqY1.js +621 -0
  1165. package/dist/mcp/electronObservation-wOYWwqgF.js +112 -0
  1166. package/dist/mcp/electronScenario-CYrt2zBK.js +913 -0
  1167. package/dist/mcp/emptyArraySchema-C0o2Sxwp.js +140 -0
  1168. package/dist/mcp/enhancedInputs-6CCgB3VB.js +56 -0
  1169. package/dist/mcp/javascriptRuntimeObservation-BVbhkO2-.js +693 -0
  1170. package/dist/mcp/javascriptRuntimeObservation-Cu0Yedqq.js +121 -0
  1171. package/dist/mcp/jsonSerialization-V-wWiFRE.js +152 -0
  1172. package/dist/mcp/lipo-DSTgUqL1.js +395 -0
  1173. package/dist/mcp/localPath-AxvW9aPe.js +19 -0
  1174. package/dist/mcp/logger-BGdGHadX.js +48 -0
  1175. package/dist/mcp/machoContainer-CMSxUBlK.js +605 -0
  1176. package/dist/mcp/main-Cx-Z7m_n.js +80276 -0
  1177. package/dist/mcp/main.js +6 -0
  1178. package/dist/mcp/managedToolContracts-CSlbKJP-.js +101 -0
  1179. package/dist/mcp/nativeValueTrace-BEZbDieM.js +3601 -0
  1180. package/dist/mcp/officialToolContracts-CauCcSsc.js +1432 -0
  1181. package/dist/mcp/peMachine-aP1iYnHq.js +95 -0
  1182. package/dist/mcp/pngHeader-DQ-ObyY2.js +147 -0
  1183. package/dist/mcp/propertyListKeys-BfCo0k4w.js +356 -0
  1184. package/dist/mcp/providerCleanupError-DIRHxzWo.js +125 -0
  1185. package/dist/mcp/providerIdentities--ptAh481.js +31 -0
  1186. package/dist/mcp/providerIdentity-BCQ5n5tw.js +16 -0
  1187. package/dist/mcp/providerOperationHealth-9DRSGM8N.js +71 -0
  1188. package/dist/mcp/rolldown-runtime-BjeaiXFo.js +121 -0
  1189. package/dist/mcp/safeJson-NeGfpkrI.js +25 -0
  1190. package/dist/mcp/scanCanonical-CF3ATd1V.js +3788 -0
  1191. package/dist/mcp/serverIdentity-BK0Ejd_Y.js +1507 -0
  1192. package/dist/mcp/sourceMapEnvelope-DAaRUIGj.js +94 -0
  1193. package/dist/mcp/toolContracts-BPoHQdlC.js +12414 -0
  1194. package/dist/mcp/toolOutputSchemaGroups-MJ_f-PMK.js +17730 -0
  1195. package/dist/mcp/webContentArtifact-DfGkgDcI.js +269 -0
  1196. package/dist/mcp/webRuntime-ccyhkRru.js +74 -0
  1197. package/dist/mcp/webSourceLocation-DKIum0vJ.js +13167 -0
  1198. package/dist/mcpDoctor.js +95 -70
  1199. package/dist/mcpStartupPolicy.js +20 -2
  1200. package/dist/native/AppleDispatchCoverage.js +57 -17
  1201. package/dist/native/AppleDispatchMetadata.js +82 -29
  1202. package/dist/native/AppleMachoFixups.js +208 -35
  1203. package/dist/native/AppleMachoSelection.js +30 -23
  1204. package/dist/native/AppleObjcCategories.js +13 -3
  1205. package/dist/native/AppleObjcDispatchFacets.js +95 -17
  1206. package/dist/native/AppleObjcProperties.js +61 -17
  1207. package/dist/native/AppleObjcProtocols.js +25 -7
  1208. package/dist/native/AppleSwiftVtables.js +2 -0
  1209. package/dist/native/CommandRunner.js +146 -32
  1210. package/dist/native/LldbCallTracer.js +235 -179
  1211. package/dist/native/LldbReadbackFiles.js +70 -0
  1212. package/dist/native/LldbRetainedObservations.js +28 -56
  1213. package/dist/native/MachoArchitectureSelection.js +50 -0
  1214. package/dist/native/NativeCallObservation.js +55 -53
  1215. package/dist/native/NativeCallTarget.js +95 -0
  1216. package/dist/native/NativeMacOSProvider.js +318 -188
  1217. package/dist/native/NativeMachoInspection.js +155 -81
  1218. package/dist/native/NativePlistSource.js +179 -0
  1219. package/dist/native/NativeUiCleanupError.js +30 -0
  1220. package/dist/native/NativeUiHelperRuntime.js +48 -35
  1221. package/dist/native/NativeUiObservation.js +69 -47
  1222. package/dist/native/SignatureTargetBinding.js +147 -65
  1223. package/dist/native/parsers/codesign.js +27 -10
  1224. package/dist/native/parsers/demangle.js +22 -12
  1225. package/dist/native/parsers/dyldInfo.js +73 -4
  1226. package/dist/native/parsers/lipo.js +53 -19
  1227. package/dist/native/parsers/machoUuid.js +150 -0
  1228. package/dist/native/parsers/otool.js +275 -32
  1229. package/dist/native/parsers/plist.js +40 -25
  1230. package/dist/native/pe/PeResourceLayout.js +22 -7
  1231. package/dist/native/pe/PeResourceParser.js +10 -9
  1232. package/dist/native/pe/PeResourcesProvider.js +76 -15
  1233. package/dist/native/pwndbg/CoreFileMappingAuthority.js +51 -0
  1234. package/dist/native/pwndbg/PwndbgCoreContext.js +39 -28
  1235. package/dist/native/pwntools/PwntoolsDecoder.js +339 -52
  1236. package/dist/native/pwntools/PwntoolsFailures.js +19 -4
  1237. package/dist/native/pwntools/PwntoolsInputLimit.js +27 -0
  1238. package/dist/native/pwntools/PwntoolsRecordedCrashProvider.js +38 -16
  1239. package/dist/native/pwntools/PwntoolsResourceLimits.js +3 -3
  1240. package/dist/native/pwntools/RecordedCrashSourceBindings.js +12 -8
  1241. package/dist/native/pwntools/RecordedCrashStructureBindings.js +3 -1
  1242. package/dist/objdump/ObjdumpCommand.js +24 -0
  1243. package/dist/pcap/PcapCommand.js +146 -0
  1244. package/dist/pcap/PcapConfiguration.js +93 -0
  1245. package/dist/pcap/PcapNativeBound.js +58 -0
  1246. package/dist/pcap/PcapOutput.js +276 -0
  1247. package/dist/pcap/PcapProvider.js +454 -0
  1248. package/dist/pcap/PcapSnapshot.js +191 -0
  1249. package/dist/process/ArtifactAnalysisResources.js +306 -0
  1250. package/dist/process/BoundedFileBytes.js +8 -3
  1251. package/dist/process/CurrentEntrypointPath.js +8 -0
  1252. package/dist/process/DarwinProcessRunTokenReader.js +276 -61
  1253. package/dist/process/DetachedPgpSignature.js +57 -0
  1254. package/dist/process/ExecFileBoundedOutput.js +44 -0
  1255. package/dist/process/ExecFileOutput.js +44 -17
  1256. package/dist/{hopper/HopperTargetLease.js → process/HopperLease.js} +76 -19
  1257. package/dist/process/JavaScriptWorkerMemoryLimit.js +25 -0
  1258. package/dist/process/LinuxResourceLimits.js +60 -0
  1259. package/dist/process/MacCodeSignature.js +3 -0
  1260. package/dist/process/OwnedCommand.js +144 -25
  1261. package/dist/process/PrivateRuntimeRoot.js +9 -19
  1262. package/dist/process/PrivateRuntimeRootUnavailableError.js +10 -0
  1263. package/dist/process/ProcessOwnership.js +70 -17
  1264. package/dist/process/ProcessOwnershipObservation.js +35 -4
  1265. package/dist/process/ProviderDeadline.js +58 -12
  1266. package/dist/process/ProviderProcess.js +233 -17
  1267. package/dist/process/RegexMatcher.js +96 -0
  1268. package/dist/process/SharedStartupAttempt.js +59 -0
  1269. package/dist/process/WindowsAuthority.js +48 -39
  1270. package/dist/process/WindowsBatchCommand.js +46 -0
  1271. package/dist/process/boundedUtf8Text.js +13 -0
  1272. package/dist/process/capture/FilesystemSnapshot.js +63 -11
  1273. package/dist/process/capture/ProcessCaptureClock.js +2 -0
  1274. package/dist/process/capture/ProcessCaptureError.js +64 -7
  1275. package/dist/process/capture/ProcessCaptureJournal.js +2 -1
  1276. package/dist/process/capture/ProcessCaptureLifecycle.js +104 -56
  1277. package/dist/process/capture/ProcessCaptureProgress.js +7 -4
  1278. package/dist/process/capture/ProcessHarness.js +34 -17
  1279. package/dist/process/capture/ProcessNormalization.js +278 -36
  1280. package/dist/process/capture/ProcessSampling.js +3 -2
  1281. package/dist/process/capture/ProcessScenarioRuntimeValidation.js +13 -13
  1282. package/dist/process/capture/TerminalRenderer.js +31 -10
  1283. package/dist/process/ownedDebuggerSession.js +203 -0
  1284. package/dist/process/snapshotEnvironment.js +8 -8
  1285. package/dist/{application/binary → providers}/AnalysisClientCleanup.js +3 -3
  1286. package/dist/providers/AnalysisClientCreation.js +193 -0
  1287. package/dist/providers/AnalysisClientFailure.js +191 -0
  1288. package/dist/providers/DeferredAnalysisClient.js +48 -0
  1289. package/dist/providers/OwnedCommandCleanup.js +65 -0
  1290. package/dist/providers/ProviderInspectionScope.js +10 -0
  1291. package/dist/recordedCatalogDigests.js +2 -0
  1292. package/dist/reference/ReferenceSourceReader.js +64 -1
  1293. package/dist/reference/ReferenceSourceReaderEntries.js +79 -56
  1294. package/dist/reference/ReferenceSourceReaderErrors.js +5 -1
  1295. package/dist/reference/ReferenceSourceReaderFile.js +2 -2
  1296. package/dist/reference/ReferenceSourceReaderTypes.js +1 -2
  1297. package/dist/reference/ReferenceSourceReaderValidate.js +0 -1
  1298. package/dist/rizin/RizinCommand.js +14 -0
  1299. package/dist/rizin/RizinDebugSessionManager.js +1111 -0
  1300. package/dist/rust/RustAuditableReader.js +309 -0
  1301. package/dist/rust/RustBinaryImage.js +116 -0
  1302. package/dist/rust/RustBinaryProvider.js +194 -0
  1303. package/dist/server/EvidenceMcpServer.js +160 -37
  1304. package/dist/server/admittedToolOperation.js +7 -2
  1305. package/dist/server/contractToolHandler.js +17 -4
  1306. package/dist/server/createServer.js +179 -30
  1307. package/dist/server/externalMutationAdmission.js +50 -0
  1308. package/dist/server/mcpProgress.js +4 -2
  1309. package/dist/server/promptCompletion.js +43 -28
  1310. package/dist/server/providerEnvironment.js +3 -0
  1311. package/dist/server/registerAnalysisViewTool.js +6 -2
  1312. package/dist/server/registerAndroidTools.js +22 -4
  1313. package/dist/server/registerApplicationTools/projectMobileApplicationGraph.js +8 -1
  1314. package/dist/server/registerArtifactComparisonTool.js +13 -2
  1315. package/dist/server/registerArtifactTools.js +21 -1
  1316. package/dist/server/registerBrowserScenarioTool.js +7 -5
  1317. package/dist/server/registerBrowserTools.js +4 -8
  1318. package/dist/server/registerBundleComparisonTool.js +4 -4
  1319. package/dist/server/registerCaptureTools.js +12 -0
  1320. package/dist/server/registerCutterTools.js +32 -0
  1321. package/dist/server/registerElectronTools.js +13 -21
  1322. package/dist/server/registerEnhancedTools.js +7 -6
  1323. package/dist/server/registerEvidenceTools.js +14 -10
  1324. package/dist/server/registerEvmTools.js +22 -4
  1325. package/dist/server/registerFlutterTools.js +17 -0
  1326. package/dist/server/registerFridaTools.js +201 -0
  1327. package/dist/server/registerFunctionComparisonTool.js +29 -9
  1328. package/dist/server/registerGdbTools.js +64 -0
  1329. package/dist/server/registerGoTools.js +9 -0
  1330. package/dist/server/registerInvestigationTools/helpers.js +2 -2
  1331. package/dist/server/registerInvestigationTools.js +31 -27
  1332. package/dist/server/registerJavaScriptRuntimeObservationTools.js +3 -9
  1333. package/dist/server/registerManagedTools.js +11 -1
  1334. package/dist/server/registerManagedWorkflowTools/evidence.js +14 -7
  1335. package/dist/server/registerNativeTools.js +14 -0
  1336. package/dist/server/registerOfficialTools.js +5 -0
  1337. package/dist/server/registerPcapTools.js +35 -0
  1338. package/dist/server/registerProcessComparisonTool.js +12 -2
  1339. package/dist/server/registerReverseEngineeringTools.js +86 -0
  1340. package/dist/server/registerRizinDebugTools.js +53 -0
  1341. package/dist/server/registerRustTools.js +9 -0
  1342. package/dist/server/registerSessionRecordTools.js +19 -13
  1343. package/dist/server/registerSessionStatusTool.js +33 -8
  1344. package/dist/server/registerSessionTools.js +31 -31
  1345. package/dist/server/registerSignalTools.js +12 -0
  1346. package/dist/server/registerSqliteTools.js +9 -0
  1347. package/dist/server/registerWasmTools.js +46 -0
  1348. package/dist/server/registerWebNetworkCaptureTool.js +24 -10
  1349. package/dist/server/retainedSummaryDelivery.js +28 -0
  1350. package/dist/server/runDerivedOperation.js +2 -0
  1351. package/dist/server/sessionAvailabilityPolicy.js +3 -0
  1352. package/dist/server/toolRegistrationOptions.js +8 -0
  1353. package/dist/server/toolResult.js +52 -19
  1354. package/dist/server/toolResultEncoding.js +36 -3
  1355. package/dist/serverIdentity.js +17 -8
  1356. package/dist/signals/SigrokRecordingProvider.js +346 -0
  1357. package/dist/signals/parseDecoderDiscovery.js +65 -0
  1358. package/dist/sqlite/SqliteDatabaseFailures.js +147 -0
  1359. package/dist/sqlite/SqliteDatabaseInspection.js +436 -0
  1360. package/dist/sqlite/SqliteDatabaseLimits.js +16 -0
  1361. package/dist/sqlite/SqliteDatabaseProvider.js +295 -0
  1362. package/dist/sqlite/SqliteDatabaseSnapshot.js +182 -0
  1363. package/dist/sqlite/SqliteDatabaseWorker.js +46 -0
  1364. package/dist/sqlite/SqliteDatabaseWorkerExecution.js +127 -0
  1365. package/dist/wasm/WabtArtifactProvider.js +358 -0
  1366. package/dist/wasm/WabtFailures.js +119 -0
  1367. package/dist/wasm/WabtInterface.js +309 -0
  1368. package/dist/wasm/WabtOutput.js +60 -0
  1369. package/dist/wasm/WabtRelease.js +12 -0
  1370. package/dist/wasm/WabtRuntime.js +58 -0
  1371. package/dist/wasm/WabtString.js +48 -0
  1372. package/dist/wasm/WabtWat.js +147 -0
  1373. package/dist/wasm/WasmGlueAdapter.js +66 -0
  1374. package/dist/wasm/WasmInterfaceBudget.js +11 -0
  1375. package/dist/windows/WindowsNativeLoader.js +53 -9
  1376. package/dist/windows/WindowsOwnedProcess.js +150 -17
  1377. package/dist/windows/WindowsPrivateRuntime.js +66 -2
  1378. package/install.sh +157 -98
  1379. package/licenses/Apache-2.0.txt +202 -0
  1380. package/licenses/GCC-Runtime-Library-Exception-3.1.txt +73 -0
  1381. package/licenses/GPL-3.0.txt +674 -0
  1382. package/licenses/LGPL-2.0.txt +480 -0
  1383. package/licenses/MIT-template.txt +18 -0
  1384. package/licenses/MinGW-w64-runtime.txt +240 -0
  1385. package/licenses/Node-22.19.0-LICENSE.txt +2666 -0
  1386. package/licenses/README.md +68 -0
  1387. package/licenses/cfworker-MIT.txt +21 -0
  1388. package/licenses/dotnet-runtime-MIT.txt +23 -0
  1389. package/licenses/frida-17.23.2-COPYING.txt +50 -0
  1390. package/licenses/ghidra-12.1.4-DISCLAIMER.txt +13 -0
  1391. package/licenses/ghidra-12.1.4-LICENSE.txt +201 -0
  1392. package/licenses/ghidra-12.1.4-NOTICE.txt +49 -0
  1393. package/licenses/npm-dependencies.txt +3757 -0
  1394. package/licenses/npm-runtime-notices.txt +8722 -0
  1395. package/licenses/upstream-sources.json +72 -0
  1396. package/licenses/xterm-MIT.txt +21 -0
  1397. package/native/windows/README.md +130 -12
  1398. package/native/windows/build/manifest.json +2 -2
  1399. package/native/windows/build/rea-windows-x64.node +0 -0
  1400. package/package.json +97 -22
  1401. package/scripts/electron-active-hook-boundaries.cjs +15 -2
  1402. package/scripts/electron-active-hook.cjs +412 -47
  1403. package/scripts/hopper-demo-x11.py +65 -13
  1404. package/scripts/prepack.mjs +5 -0
  1405. package/scripts/rea-android-workspace-guardian.mjs +46 -0
  1406. package/scripts/rea.mjs +89 -26
  1407. package/scripts/verify-windows-native-artifact.mjs +2 -2
  1408. package/skills/reverse-engineer-anything/SKILL.md +146 -11
  1409. package/skills/reverse-engineer-anything/references/android-applications.md +3 -1
  1410. package/skills/reverse-engineer-anything/references/connection-and-recovery.md +10 -10
  1411. package/skills/reverse-engineer-anything/references/evidence-workflows.md +23 -0
  1412. package/skills/reverse-engineer-anything/references/javascript-applications.md +72 -3
  1413. package/skills/reverse-engineer-anything/references/native-and-artifacts.md +149 -19
  1414. package/skills/reverse-engineer-anything/references/runtime-observation.md +57 -7
  1415. package/third_party/README.md +1 -1
  1416. package/third_party/wabt/README.md +24 -0
  1417. package/dist/browser/history/HarCaptureAdapter.js +0 -20
  1418. package/dist/cli/streamedJsonOutput.js +0 -135
  1419. package/dist/hopper/HopperRegexWorker.js +0 -27
  1420. /package/dist/{application/binary → process}/AbortablePromise.js +0 -0
@@ -2,6 +2,12 @@ import { isBuiltin } from "node:module";
2
2
  import { posix } from "node:path";
3
3
  import { normalizeJoinedLogicalPath, logicalPathEscapesRoot, } from "../../domain/artifactIdentity.js";
4
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 };
5
11
  const EXTENSIONS = [
6
12
  ".js",
7
13
  ".cjs",
@@ -12,76 +18,332 @@ const EXTENSIONS = [
12
18
  ".html",
13
19
  ".node",
14
20
  ];
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
+ };
15
64
  /** Resolve one declaration while preserving its original input identity. */
16
65
  export const resolveArtifactPathByContext = (input) => {
17
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
+ };
18
78
  return resolution.status === "resolved"
19
79
  ? {
20
- declared_path: input.declaredPath,
21
- resolution_context: input.context,
80
+ ...facts,
22
81
  resolved_path: resolution.resolvedPath,
23
82
  resolution_status: resolution.status,
24
- limitations: resolution.limitations,
25
83
  }
26
- : {
27
- declared_path: input.declaredPath,
28
- resolution_context: input.context,
29
- resolved_path: null,
30
- resolution_status: resolution.status,
31
- limitations: resolution.limitations,
32
- };
84
+ : { ...facts, resolved_path: null, resolution_status: resolution.status };
33
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
+ });
34
114
  const resolvePath = (input) => {
35
- const rejected = rejectDeclaration(input.declaredPath);
36
- if (rejected !== null)
37
- return rejected;
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);
38
157
  const candidate = contextualCandidate(input);
39
158
  if (typeof candidate !== "string")
40
159
  return candidate;
41
160
  const confined = confineCandidate(candidate);
42
161
  if (typeof confined !== "string")
43
162
  return confined;
44
- if (input.context === "html-reference")
163
+ if (input.context === "html-reference" || input.context === "url-reference")
45
164
  return (resolveFileCandidates(input, [confined]) ??
46
165
  unresolvedCandidate("not-found", [
47
- `The exact HTML resource ${confined} was not found among the selected application files.`,
166
+ `The exact ${input.context === "html-reference" ? "HTML" : "URL"} resource ${confined} was not found among the selected application files.`,
48
167
  ]));
49
- return resolveCandidate(input, confined, new Set());
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.",
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
+ });
50
204
  };
51
- const rejectDeclaration = (declared) => {
52
- if (declared.length === 0)
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)
53
275
  return unresolvedCandidate("rejected", ["The declared path is empty."]);
54
276
  if (declared.includes("\0") || declared.includes("\\"))
55
277
  return unresolvedCandidate("rejected", [
56
278
  "NUL and backslash path syntax are not admitted for canonical artifact paths.",
57
279
  ]);
58
- if (!admitsCanonicalPathSyntax(declared))
280
+ if (!literalPercent && !admitsCanonicalPathSyntax(declared))
59
281
  return unresolvedCandidate("rejected", [
60
282
  "Encoded dot or separator bytes are rejected before artifact path resolution.",
61
283
  ]);
62
284
  return null;
63
285
  };
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");
64
294
  const contextualCandidate = (input) => {
65
295
  const { context } = input;
66
- let declared = context === "html-reference" ||
67
- context === "url-reference" ||
68
- (context === "module-specifier" && input.moduleKind !== "require")
69
- ? stripQueryAndFragment(input.declaredPath)
70
- : input.declaredPath;
71
296
  if (context === "html-reference")
72
297
  return htmlCandidate(input);
73
- 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)) {
74
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
+ ]);
75
317
  if (fileUrl !== undefined)
76
- 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") {
77
334
  if (hasScheme(declared))
78
335
  return unresolvedCandidate("external", [
79
336
  "URL and Node builtin schemes are outside static artifact module resolution.",
80
337
  ]);
81
- if (!declared.startsWith(".") && !declared.startsWith("/"))
82
- return bareModuleCandidate(input, declared);
338
+ if (!isRelativeJavaScriptModuleSpecifier(declared) &&
339
+ !declared.startsWith("/"))
340
+ return bareModuleCandidate(input);
83
341
  if (input.moduleKind !== "require") {
84
- const decoded = decodeModuleUrlPath(declared);
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));
85
347
  if (typeof decoded !== "string")
86
348
  return decoded;
87
349
  declared = decoded;
@@ -91,6 +353,40 @@ const contextualCandidate = (input) => {
91
353
  return unresolvedCandidate("external", [
92
354
  "URL schemes and protocol-relative URLs are outside this local artifact path context.",
93
355
  ]);
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.",
369
+ ]);
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
+ const candidate = urlRelativeCandidate(posix.dirname(input.sourcePath), decoded);
380
+ return typeof candidate === "string"
381
+ ? exactUrlPathCandidate(decoded, candidate, "URL")
382
+ : candidate;
383
+ }
384
+ if (context === "module-specifier" && input.moduleKind === "import") {
385
+ const candidate = urlRelativeCandidate(posix.dirname(input.sourcePath), declared);
386
+ return typeof candidate === "string"
387
+ ? exactUrlPathCandidate(declared, candidate, "module URL")
388
+ : candidate;
389
+ }
94
390
  return relativeCandidate(input.sourcePath, declared);
95
391
  };
96
392
  const decodeModuleUrlPath = (declared) => {
@@ -113,51 +409,299 @@ const decodeModuleUrlPath = (declared) => {
113
409
  const relativeCandidate = (sourcePath, declared) => declared.startsWith("/")
114
410
  ? declared.slice(1)
115
411
  : posix.join(posix.dirname(sourcePath), declared);
116
- const bareModuleCandidate = (input, declared) => {
117
- const packageName = barePackageName(declared);
118
- if (packageName === null || isBuiltin(declared) || declared.startsWith("#"))
412
+ const urlDirectoryState = (directory) => ({
413
+ escapes: 0,
414
+ segments: directory === "" || directory === "." ? [] : directory.split("/"),
415
+ });
416
+ /**
417
+ * Apply URL dot segments: `..` removes the previous segment even when it is
418
+ * empty, so `assets//../app.js` names `assets/app.js`. A final `.` or `..`
419
+ * leaves directory form, as the URL parser does.
420
+ */
421
+ const applyUrlReference = (base, reference) => {
422
+ const absolute = reference.startsWith("/");
423
+ const segments = absolute ? [] : [...base.segments];
424
+ let escapes = absolute ? 0 : base.escapes;
425
+ const parts = (absolute ? reference.slice(1) : reference).split("/");
426
+ for (const [index, part] of parts.entries()) {
427
+ if (part !== "." && part !== "..") {
428
+ segments.push(part);
429
+ continue;
430
+ }
431
+ if (part === "..")
432
+ if (segments.length > 0)
433
+ segments.pop();
434
+ else
435
+ escapes += 1;
436
+ if (index === parts.length - 1)
437
+ segments.push("");
438
+ }
439
+ return { escapes, segments };
440
+ };
441
+ /** A relative reference replaces the base URL's final path segment. */
442
+ const urlBaseDirectory = (base) => ({
443
+ escapes: base.escapes,
444
+ segments: base.segments.slice(0, -1),
445
+ });
446
+ /**
447
+ * Form the artifact candidate. A remaining empty segment cannot name a
448
+ * canonical artifact file; a trailing one is directory form. Confinement
449
+ * rejects a candidate that keeps an above-root marker.
450
+ */
451
+ const urlPathCandidate = (path) => {
452
+ const segments = path.segments.at(-1) === "" ? path.segments.slice(0, -1) : path.segments;
453
+ if (segments.includes(""))
454
+ return unresolvedCandidate("unavailable", [
455
+ "Repeated URL path separators cannot be mapped to an exact canonical artifact file.",
456
+ ]);
457
+ return [
458
+ ...Array.from({ length: path.escapes }, () => ".."),
459
+ ...segments,
460
+ ].join("/");
461
+ };
462
+ /** Resolve a URL path reference against a canonical directory. */
463
+ const urlRelativeCandidate = (directory, reference) => urlPathCandidate(applyUrlReference(urlDirectoryState(directory), reference));
464
+ const bareModuleCandidate = (input) => {
465
+ const request = parseBarePackageRequest(input.declaredPath, input.moduleKind);
466
+ if (request === null || isBuiltin(input.declaredPath))
119
467
  return unresolvedCandidate("external", [
120
- "The bare specifier is a Node builtin, package import map, or invalid package name.",
468
+ "The bare specifier is a Node builtin or invalid package name.",
469
+ ]);
470
+ if (input.moduleKind === "import" &&
471
+ (request.packageName.startsWith(".") || request.packageName.includes("%")))
472
+ return unresolvedCandidate("rejected", [
473
+ "ES module package names cannot start with a dot or contain percent signs.",
121
474
  ]);
122
- const subpath = declared === packageName ? "." : `.${declared.slice(packageName.length)}`;
475
+ const self = packageSelfCandidate(input, request);
476
+ if (self !== null)
477
+ return self;
478
+ // ESM constructs a package.json URL; its parsed identity is not a literal
479
+ // dependency directory. Self resolution above still uses the exact name.
480
+ let dependencyDirectory = posix.join("node_modules", request.packageName);
481
+ if (input.moduleKind === "import") {
482
+ const metadataUrl = new URL(`./node_modules/${request.packageName}/package.json`, PACKAGE_ARTIFACT_ROOT_URL);
483
+ if (!metadataUrl.pathname.endsWith("/package.json"))
484
+ return unresolvedCandidate("external", [
485
+ `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.`,
486
+ ]);
487
+ const decoded = decodeModuleUrlPath(metadataUrl.pathname.slice(PACKAGE_ARTIFACT_ROOT_URL.pathname.length));
488
+ if (typeof decoded !== "string")
489
+ return decoded;
490
+ const confined = confineCandidate(decoded);
491
+ if (typeof confined !== "string")
492
+ return confined;
493
+ dependencyDirectory = posix.dirname(confined);
494
+ }
123
495
  const source = input.files.get(input.sourcePath);
496
+ let nearestNotFound = null;
497
+ for (const directory of packageLookupDirectories(input)) {
498
+ const candidate = posix.join(directory, dependencyDirectory);
499
+ const metadata = readPackageMetadata(input, candidate);
500
+ const continueCommonJsLookup = input.moduleKind === "require" &&
501
+ (metadata.kind === "absent" ||
502
+ (metadata.kind === "available" &&
503
+ (!request.dependencyExportsEligible ||
504
+ metadata.exports === undefined)));
505
+ const packageResolution = metadata.kind !== "absent" ||
506
+ hasContainerDirectory(input.files, candidate, source?.container_sha256, input.directoryPaths, input.unanalyzedFiles)
507
+ ? resolvePackageDependency(input, candidate, request, metadata)
508
+ : request.packageSubpath === "." && input.moduleKind !== "import"
509
+ ? resolveFileCandidates(input, fileCandidates(candidate, input.moduleKind))
510
+ : null;
511
+ if (packageResolution !== null) {
512
+ if (continueCommonJsLookup &&
513
+ packageResolution.status === "not-found" &&
514
+ packageResolution.stopsAncestorLookup !== true) {
515
+ nearestNotFound ??= packageResolution;
516
+ }
517
+ else
518
+ return packageResolution;
519
+ }
520
+ }
521
+ if (nearestNotFound !== null)
522
+ return nearestNotFound;
523
+ return unresolvedCandidate("external", [
524
+ "No matching bare package was inventoried in an enclosing node_modules directory.",
525
+ ]);
526
+ };
527
+ function* packageLookupDirectories(input) {
124
528
  let directory = posix.dirname(input.sourcePath);
125
529
  while (true) {
126
- const candidate = posix.join(directory, "node_modules", packageName);
127
- if (subpath === ".") {
128
- const direct = resolveFileCandidates(input, fileCandidates(candidate));
129
- if (direct !== null)
130
- return direct;
131
- }
132
- if (hasContainerDirectory(input.files, candidate, source?.container_sha256))
133
- return resolvePackageSpecifier(input, candidate, subpath);
530
+ if (input.moduleKind !== "require" ||
531
+ posix.basename(directory) !== "node_modules")
532
+ yield directory;
533
+ if (directory === "." || directory === "")
534
+ return;
535
+ directory = posix.dirname(directory);
536
+ }
537
+ }
538
+ /**
539
+ * Nearest same-container package.json, stopping at a `node_modules` directory
540
+ * so a nested package cannot inherit an ancestor's map.
541
+ */
542
+ const enclosingPackageMetadata = (input) => {
543
+ let directory = posix.dirname(input.sourcePath);
544
+ while (posix.basename(directory) !== "node_modules") {
545
+ const metadata = readPackageMetadata(input, directory);
546
+ if (metadata.kind !== "absent")
547
+ return metadata;
134
548
  if (directory === "." || directory === "")
135
549
  break;
136
550
  directory = posix.dirname(directory);
137
551
  }
138
- return unresolvedCandidate("external", [
139
- "No matching bare package was inventoried in an enclosing node_modules directory.",
140
- ]);
552
+ return { kind: "none" };
553
+ };
554
+ /**
555
+ * Resolve an exact `#alias` against the importer's enclosing `imports` map.
556
+ * Selected relative targets are exact files; patterns, recursive aliases, and
557
+ * external-package targets stay unresolved without falling through.
558
+ */
559
+ const resolvePackageImportAlias = (input, specifier) => {
560
+ const classified = classifyPackageImportSpecifier(specifier);
561
+ if (classified.kind === "invalid")
562
+ return unresolvedCandidate("rejected", [
563
+ `The package import specifier ${JSON.stringify(specifier)} is invalid; "#" and specifiers that end with "/" are not valid import aliases.`,
564
+ ]);
565
+ if (classified.kind === "pattern")
566
+ return unresolvedCandidate("external", [
567
+ `Wildcard and directory package import aliases remain unresolved; ${JSON.stringify(specifier)} is not an exact imports key.`,
568
+ ]);
569
+ const metadata = enclosingPackageMetadata(input);
570
+ if (metadata.kind === "none")
571
+ return unresolvedCandidate("external", [
572
+ `No enclosing package.json defines package import alias ${specifier}; package import maps do not cross package scopes.`,
573
+ ]);
574
+ if (metadata.kind === "unavailable")
575
+ return unresolvedCandidate("unavailable", [metadata.limitation]);
576
+ const lookup = lookupExactPackageImport(metadata.imports, specifier);
577
+ if (lookup.kind === "undefined-map")
578
+ return unresolvedCandidate("external", [
579
+ `Package metadata ${metadata.path} does not define package import alias ${specifier}.`,
580
+ ]);
581
+ if (lookup.kind === "missing-key")
582
+ return unresolvedCandidate("external", [
583
+ `Package metadata ${metadata.path} does not define package import alias ${specifier}; it declares ${lookup.declared.join(", ") || "no imports keys"}.`,
584
+ ]);
585
+ if (lookup.kind === "pattern-unresolved")
586
+ return unresolvedCandidate("external", [
587
+ `Wildcard package import aliases remain unresolved; package metadata ${metadata.path} has no exact imports key ${specifier}.`,
588
+ ]);
589
+ const selected = selectExportTarget(lookup.target, packageExportConditions(input.moduleKind), metadata.path, "imports");
590
+ if (selected.kind === "invalid" || selected.kind === "invalid-config")
591
+ return unresolvedCandidate("rejected", [
592
+ `Package metadata ${metadata.path}: ${selected.limitation}`,
593
+ ]);
594
+ if (selected.kind === "unmatched")
595
+ return unresolvedCandidate("external", [
596
+ `Package metadata ${metadata.path} declares no imports target for alias ${specifier} under the active conditions; it declares ${selected.declared.join(", ") || "no conditions"}.`,
597
+ ]);
598
+ if (selected.kind === "blocked")
599
+ return unresolvedCandidate("external", [
600
+ `Package metadata ${metadata.path} blocks import alias ${specifier} with ${selected.cause === "null" ? "an explicit null imports target" : "an empty imports target array"}.`,
601
+ ]);
602
+ if (selected.kind === "non-relative") {
603
+ const target = classifyPackageImportTargetString(selected.value);
604
+ return unresolvedCandidate("external", [
605
+ target.kind === "recursive"
606
+ ? `Recursive package import aliases remain unresolved; package metadata ${metadata.path} maps ${specifier} to ${JSON.stringify(target.target)}.`
607
+ : `External-package import targets remain unresolved; package metadata ${metadata.path} maps ${specifier} to ${JSON.stringify(target.target)}.`,
608
+ ]);
609
+ }
610
+ return resolveExportTarget(input, metadata.path, selected, "imports");
141
611
  };
142
- /** Package roots and exact subpaths share metadata and exports selection. */
143
- const resolvePackageSpecifier = (input, directory, subpath) => {
144
- const metadata = readPackageMetadata(input, directory);
612
+ /** Self references use the nearest package scope before dependency lookup. */
613
+ const packageSelfCandidate = (input, request) => {
614
+ if (input.moduleKind === undefined || !input.files.has(input.sourcePath))
615
+ return null;
616
+ const metadata = enclosingPackageMetadata(input);
617
+ if (metadata.kind === "none")
618
+ return null;
145
619
  if (metadata.kind === "unavailable")
146
620
  return unresolvedCandidate("unavailable", [metadata.limitation]);
147
- const rawExports = metadata.kind === "available"
148
- ? Reflect.get(metadata.value, "exports")
621
+ if (metadata.name === undefined || metadata.exports === undefined)
622
+ return null;
623
+ let subpath;
624
+ if (input.moduleKind === "import") {
625
+ if (metadata.name !== request.packageName)
626
+ return null;
627
+ subpath = request.packageSubpath;
628
+ }
629
+ else if (input.declaredPath === metadata.name) {
630
+ subpath = ".";
631
+ }
632
+ else if (input.declaredPath.startsWith(`${metadata.name}/`)) {
633
+ subpath = `.${input.declaredPath.slice(metadata.name.length)}`;
634
+ }
635
+ else
636
+ return null;
637
+ // Self resolution does not apply the CommonJS dependency-name matcher.
638
+ return resolvePackageExports(input, metadata.path, subpath, metadata.exports);
639
+ };
640
+ /** Resolve an installed dependency using one parsed request and its metadata. */
641
+ const resolvePackageDependency = (input, directory, request, metadata) => {
642
+ const subpath = request.packageSubpath;
643
+ if (request.dependencyExportsEligible && metadata.kind === "unavailable")
644
+ return unresolvedCandidate("unavailable", [metadata.limitation]);
645
+ const rawExports = request.dependencyExportsEligible && metadata.kind === "available"
646
+ ? metadata.exports
149
647
  : undefined;
150
- if (rawExports === undefined || rawExports === null) {
648
+ if (rawExports === undefined) {
151
649
  if (subpath === ".")
152
- return resolveDirectory(input, directory, metadata, new Set());
153
- // Preserve the trailing slash for a package directory request.
650
+ return ((input.moduleKind === "import"
651
+ ? null
652
+ : resolveFileCandidates(input, fileCandidates(directory, input.moduleKind))) ?? resolveDirectory(input, directory, metadata, new Set()));
653
+ if (input.moduleKind === "import")
654
+ return resolveLegacyEsmSubpath(input, directory, subpath);
154
655
  const candidate = confineCandidate(`${directory}/${subpath.slice(2)}`);
155
656
  return typeof candidate === "string"
156
657
  ? resolveCandidate(input, candidate, new Set())
157
658
  : candidate;
158
659
  }
159
- const exported = selectPackageExport(rawExports, subpath, input.moduleKind);
160
- const packagePath = posix.join(directory, "package.json");
660
+ return resolvePackageExports(input, posix.join(directory, "package.json"), subpath, rawExports);
661
+ };
662
+ /** Legacy ESM package subpaths are exact URLs, never extension or directory lookups. */
663
+ const resolveLegacyEsmSubpath = (input, directory, subpath) => {
664
+ const declarationRejection = rejectDeclaration(stripQueryAndFragment(htmlUrlText(subpath)));
665
+ if (declarationRejection !== null)
666
+ return declarationRejection;
667
+ const metadataUrl = packageMetadataUrl(posix.join(directory, "package.json"), subpath);
668
+ const url = new URL(subpath, metadataUrl.ok ? metadataUrl.value : metadataUrl.error.structuralUrl);
669
+ if (!url.pathname.startsWith(PACKAGE_ARTIFACT_ROOT_URL.pathname))
670
+ return unresolvedCandidate("rejected", [
671
+ "The resolved candidate escapes the canonical artifact root.",
672
+ ]);
673
+ const encodedPath = url.pathname.slice(PACKAGE_ARTIFACT_ROOT_URL.pathname.length);
674
+ const rejected = rejectDeclaration(encodedPath);
675
+ if (rejected !== null)
676
+ return rejected;
677
+ const decoded = decodeModuleUrlPath(encodedPath);
678
+ if (typeof decoded !== "string")
679
+ return decoded;
680
+ const candidate = confineCandidate(decoded);
681
+ if (typeof candidate !== "string")
682
+ return candidate;
683
+ if (urlPathIsDirectory(url.pathname))
684
+ return unresolvedCandidate("rejected", [
685
+ `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.`,
686
+ ]);
687
+ const unrepresentableBase = metadataUrl.ok ? undefined : metadataUrl.error;
688
+ if (unrepresentableBase !== undefined &&
689
+ url.pathname
690
+ .split("/")
691
+ .some((segment) => unrepresentableBase.structuralSegments.has(segment)))
692
+ return unresolvedCandidate("unavailable", [unrepresentableBase.limitation]);
693
+ const file = resolveFileCandidates(input, [candidate]);
694
+ if (file !== null)
695
+ return file;
696
+ const source = input.files.get(input.sourcePath);
697
+ if (hasContainerDirectory(input.files, candidate, source?.container_sha256, input.directoryPaths, input.unanalyzedFiles))
698
+ return unresolvedCandidate("rejected", [
699
+ `ESM package subpath ${candidate} names a directory; directory imports are unsupported and package main or index lookup was not attempted.`,
700
+ ]);
701
+ return exactPackageTargetNotFound(candidate, "ESM subpath");
702
+ };
703
+ const resolvePackageExports = (input, packagePath, subpath, rawExports) => {
704
+ const exported = selectPackageExport(rawExports, subpath, input.moduleKind, packagePath);
161
705
  if (exported.status === "rejected")
162
706
  return unresolvedCandidate("rejected", [
163
707
  `Package metadata ${packagePath}: ${exported.limitation}`,
@@ -168,33 +712,68 @@ const resolvePackageSpecifier = (input, directory, subpath) => {
168
712
  ]);
169
713
  if (exported.status === "blocked")
170
714
  return unresolvedCandidate("external", [
171
- `Directory package metadata ${packagePath} blocks subpath ${subpath} with an explicit null exports target.`,
715
+ `Directory package metadata ${packagePath} blocks subpath ${subpath} with ${exported.cause === "null" ? "an explicit null exports target" : "an empty exports target array"}.`,
172
716
  ]);
173
- return resolveExportTarget(input, packagePath, exported.value);
717
+ return resolveExportTarget(input, packagePath, exported);
174
718
  };
175
- /** An exports target is a URL naming one exact file for both Node loaders. */
176
- const resolveExportTarget = (input, packagePath, target) => {
177
- const rejected = rejectDeclaration(target);
719
+ /** An exports or import target is a URL naming one exact file for both Node loaders. */
720
+ const resolveExportTarget = (input, packagePath, target, mapKind = "exports") => {
721
+ const withTargetSource = (outcome) => ({
722
+ ...outcome,
723
+ limitations: outcome.limitations.map((reason) => `Package metadata ${packagePath}, ${mapKind} target ${JSON.stringify(target.value)}: ${reason}`),
724
+ });
725
+ // Node's CommonJS finalizer checks the serialized URL, including suffixes;
726
+ // its ESM finalizer checks only the pathname. Neither error retries arrays.
727
+ if (input.moduleKind === "require" && /%(?:2f|5c)/iu.test(target.url.href))
728
+ return withTargetSource(unresolvedCandidate("rejected", [
729
+ "The selected package URL contains encoded separator bytes.",
730
+ ]));
731
+ const encodedPath = target.url.pathname.slice(PACKAGE_ARTIFACT_ROOT_URL.pathname.length);
732
+ // Package targets are URLs for both loaders, so their percent bytes encode.
733
+ const rejected = rejectDeclaration(encodedPath, false);
178
734
  if (rejected !== null)
179
- return rejected;
180
- const decoded = decodeModuleUrlPath(stripQueryAndFragment(target));
735
+ return withTargetSource(rejected);
736
+ const decoded = decodeModuleUrlPath(encodedPath);
181
737
  if (typeof decoded !== "string")
182
- return decoded;
183
- const candidate = confineCandidate(relativeCandidate(packagePath, decoded));
738
+ return withTargetSource(decoded);
739
+ const candidate = confineCandidate(decoded);
184
740
  if (typeof candidate !== "string")
185
- return candidate;
741
+ return withTargetSource(candidate);
742
+ if (target.lookupLimitation !== undefined)
743
+ return unresolvedCandidate("unavailable", [target.lookupLimitation]);
186
744
  return (resolveFileCandidates(input, [candidate]) ??
187
- exactExportsTargetNotFound(candidate));
745
+ withTargetSource(exactPackageTargetNotFound(candidate, mapKind)));
188
746
  };
189
- const barePackageName = (specifier) => {
747
+ const parseBarePackageRequest = (specifier, moduleKind) => {
190
748
  const segments = specifier.split("/");
191
- if (specifier.startsWith("@"))
192
- return segments.length >= 2 && segments[0] !== "" && segments[1] !== ""
193
- ? `${segments[0]}/${segments[1]}`
194
- : null;
195
- return segments[0] === "" ? null : (segments[0] ?? null);
749
+ let packageName = segments[0] ?? "";
750
+ if (packageName === "" || packageName === "@")
751
+ return null;
752
+ if (specifier.startsWith("@")) {
753
+ const packageSegment = segments[1];
754
+ if (packageSegment !== undefined && packageSegment !== "") {
755
+ packageName = `${packageName}/${packageSegment}`;
756
+ }
757
+ else if (moduleKind !== "require") {
758
+ if (packageSegment === undefined)
759
+ return null;
760
+ packageName = `${packageName}/`;
761
+ }
762
+ }
763
+ // Node's CommonJS exports matcher excludes percent-containing package names.
764
+ // Compare the captured name so a scoped name cannot fall back to its scope.
765
+ const dependencyExportsEligible = moduleKind !== "require" ||
766
+ /^((?:@[^/\\%]+\/)?[^./\\%][^/\\%]*)(\/.*)?$/.exec(specifier)?.[1] ===
767
+ packageName;
768
+ return {
769
+ packageName,
770
+ packageSubpath: `.${specifier.slice(packageName.length)}`,
771
+ dependencyExportsEligible,
772
+ };
196
773
  };
197
- const hasContainerDirectory = (files, candidate, containerSha256) => {
774
+ const hasContainerDirectory = (files, candidate, containerSha256, directoryPaths, unanalyzedFiles) => {
775
+ if (directoryPaths?.has(candidate) === true)
776
+ return true;
198
777
  if ([...indexCandidates(candidate), posix.join(candidate, "package.json")].some((path) => {
199
778
  const file = files.get(path);
200
779
  return (file !== undefined &&
@@ -210,10 +789,16 @@ const hasContainerDirectory = (files, candidate, containerSha256) => {
210
789
  (containerSha256 === undefined ||
211
790
  file.container_sha256 === containerSha256))
212
791
  return true;
213
- return false;
792
+ return unanalyzedFiles?.hasDirectory(candidate, containerSha256) ?? false;
214
793
  };
215
794
  const htmlCandidate = (input) => {
216
795
  const declared = stripQueryAndFragment(htmlUrlText(input.declaredPath));
796
+ // HTML owns URL-text normalization and pathname admission. A nonempty URL
797
+ // reference may have no pathname; suffix bytes remain declaration evidence.
798
+ // HTML references are URL text, so percent bytes still encode.
799
+ const rejected = rejectDeclaration(declared, false, input.declaredPath !== "");
800
+ if (rejected !== null)
801
+ return rejected;
217
802
  if (looksExternal(declared))
218
803
  return unresolvedCandidate("external", [
219
804
  "External HTML references are not mapped to local artifact assets.",
@@ -226,23 +811,17 @@ const htmlCandidate = (input) => {
226
811
  return unresolvedCandidate("external", [
227
812
  "The document base href is external, so its script reference is not a local artifact path.",
228
813
  ]);
229
- // Removing URL tabs and newlines can join an encoded dot or separator that
230
- // the raw declaration split, so admit the parsed URL text again.
231
- if (!admitsCanonicalPathSyntax(declared))
232
- return unresolvedCandidate("rejected", [
233
- "Encoded dot or separator bytes are rejected before artifact path resolution.",
234
- ]);
235
814
  const declaredPath = percentDecodeUrlPath(declared);
236
815
  if (declaredPath === null)
237
816
  return unresolvedCandidate("rejected", [
238
817
  "The HTML reference path percent-decodes to NUL or to bytes that are not UTF-8.",
239
818
  ]);
240
819
  if (declaredPath.startsWith("/"))
241
- return declaredPath.slice(1);
820
+ return urlRelativeCandidate("", declaredPath);
242
821
  if (base === undefined || base === null || base === "")
243
822
  return declaredPath === ""
244
823
  ? input.sourcePath
245
- : posix.join(posix.dirname(input.sourcePath), declaredPath);
824
+ : urlRelativeCandidate(posix.dirname(input.sourcePath), declaredPath);
246
825
  // A local base href is a second untrusted path input; apply the same
247
826
  // admission rules a declared path gets so it cannot smuggle traversal or
248
827
  // separator syntax past canonicalization.
@@ -255,35 +834,33 @@ const htmlCandidate = (input) => {
255
834
  return unresolvedCandidate("rejected", [
256
835
  "The document base href path percent-decodes to NUL or to bytes that are not UTF-8.",
257
836
  ]);
258
- const basePath = decodedBase.startsWith("/")
259
- ? decodedBase.slice(1)
260
- : posix.join(posix.dirname(input.sourcePath), decodedBase);
261
- if (declaredPath === "")
262
- return emptyHtmlReference(decodedBase, basePath);
263
- return posix.join(htmlBaseDirectory(decodedBase, basePath), declaredPath);
264
- };
265
- const emptyHtmlReference = (base, basePath) => {
266
- if (!htmlBaseIsDirectory(base))
267
- return basePath;
268
- const confined = confineCandidate(basePath);
837
+ // Keep the base's empty segments and escapes until the reference is
838
+ // applied; only the final path must name a canonical artifact file.
839
+ const baseState = applyUrlReference(urlDirectoryState(posix.dirname(input.sourcePath)), decodedBase);
840
+ if (declaredPath === "") {
841
+ const basePath = urlPathCandidate(baseState);
842
+ return typeof basePath === "string"
843
+ ? exactUrlPathCandidate(decodedBase, basePath, "HTML")
844
+ : basePath;
845
+ }
846
+ return urlPathCandidate(applyUrlReference(urlBaseDirectory(baseState), declaredPath));
847
+ };
848
+ const exactUrlPathCandidate = (declared, candidate, kind) => {
849
+ if (!urlPathIsDirectory(declared))
850
+ return candidate;
851
+ const confined = confineCandidate(candidate);
269
852
  if (typeof confined !== "string")
270
853
  return confined;
271
854
  return unresolvedCandidate("not-found", [
272
- `The HTML reference resolves to directory ${confined || "."}, not an exact selected application file.`,
855
+ `The ${kind} reference resolves to directory ${confined || "."}, not an exact selected application file.`,
273
856
  ]);
274
857
  };
275
- /**
276
- * The directory a relative HTML reference resolves against. A base path
277
- * ending in "/" or in a "." or ".." segment is already a directory, because a
278
- * relative reference resolves against the base URL's directory and those
279
- * segments are dropped rather than stepped through.
280
- */
281
- const htmlBaseIsDirectory = (base) => base.endsWith("/") ||
282
- base.endsWith("/.") ||
283
- base.endsWith("/..") ||
284
- base === "." ||
285
- base === "..";
286
- const htmlBaseDirectory = (base, basePath) => htmlBaseIsDirectory(base) ? basePath : posix.dirname(basePath);
858
+ /** Whether a URL path retains directory form after dot-segment normalization. */
859
+ const urlPathIsDirectory = (path) => path.endsWith("/") ||
860
+ path.endsWith("/.") ||
861
+ path.endsWith("/..") ||
862
+ path === "." ||
863
+ path === "..";
287
864
  const confineCandidate = (candidate) => {
288
865
  const normalized = normalizeJoinedLogicalPath(candidate);
289
866
  if (logicalPathEscapesRoot(normalized))
@@ -296,8 +873,18 @@ const readPackageMetadata = (input, directory) => {
296
873
  const path = posix.join(directory, "package.json");
297
874
  const file = input.files.get(path);
298
875
  const source = input.files.get(input.sourcePath);
299
- if (file === undefined ||
300
- (source !== undefined && file.container_sha256 !== source.container_sha256))
876
+ if (file === undefined) {
877
+ const unavailable = input.unanalyzedFiles?.get(path);
878
+ if (source !== undefined &&
879
+ unavailable?.container_sha256 === source.container_sha256)
880
+ return {
881
+ kind: "unavailable",
882
+ limitation: unavailable.limitations?.[0] ??
883
+ `Directory package metadata ${path} was inventoried but its bytes are unavailable.`,
884
+ };
885
+ return { kind: "absent" };
886
+ }
887
+ if (source !== undefined && file.container_sha256 !== source.container_sha256)
301
888
  return { kind: "absent" };
302
889
  if (!file.text.included)
303
890
  return {
@@ -315,36 +902,67 @@ const readPackageMetadata = (input, directory) => {
315
902
  limitation: `Directory package metadata ${path} is not valid package JSON.`,
316
903
  };
317
904
  }
318
- return typeof value === "object" && value !== null
319
- ? { kind: "available", path, value }
320
- : {
905
+ if (typeof value !== "object" || value === null)
906
+ return {
321
907
  kind: "unavailable",
322
908
  limitation: `Directory package metadata ${path} is not valid package JSON.`,
323
909
  };
910
+ const name = Reflect.get(value, "name");
911
+ const exports = Reflect.get(value, "exports");
912
+ const imports = Reflect.get(value, "imports");
913
+ const main = Reflect.get(value, "main");
914
+ return {
915
+ kind: "available",
916
+ path,
917
+ name: typeof name === "string" ? name : undefined,
918
+ // Node's package reader ignores scalar root exports other than strings.
919
+ // Nested targets retain their raw values for exports validation.
920
+ exports: typeof exports === "string" ||
921
+ (typeof exports === "object" && exports !== null)
922
+ ? exports
923
+ : undefined,
924
+ // Import maps must be non-array objects; other shapes are not a map.
925
+ imports: typeof imports === "object" && imports !== null && !Array.isArray(imports)
926
+ ? imports
927
+ : undefined,
928
+ main: input.moduleKind !== undefined && typeof main !== "string"
929
+ ? undefined
930
+ : main,
931
+ module: Reflect.get(value, "module"),
932
+ };
324
933
  };
325
934
  /** File and directory lookup never interprets a nested directory's exports. */
326
- const resolveCandidate = (input, candidate, packageChain) => resolveFileCandidates(input, fileCandidates(candidate)) ??
327
- resolveDirectory(input, candidate, readPackageMetadata(input, candidate), packageChain);
935
+ const resolveCandidate = (input, candidate, packageChain, emittedSourceCandidates = []) => {
936
+ if (!commonJsDirectoryRequest(input)) {
937
+ const file = resolveFileCandidates(input, fileCandidates(candidate, input.moduleKind)) ??
938
+ resolveRuntimeSourceCandidates(input, candidate, emittedSourceCandidates);
939
+ if (file !== null)
940
+ return file;
941
+ }
942
+ return resolveDirectory(input, candidate, readPackageMetadata(input, candidate), packageChain);
943
+ };
944
+ const commonJsDirectoryRequest = (input) => input.context === "module-specifier" &&
945
+ input.moduleKind === "require" &&
946
+ (input.declaredPath.endsWith("/") ||
947
+ /(?:^|\/)\.{1,2}$/u.test(input.declaredPath));
328
948
  const resolveDirectory = (input, directory, metadata, packageChain) => {
329
949
  if (metadata.kind === "absent")
330
- return (resolveFileCandidates(input, indexCandidates(directory)) ??
331
- notFoundCandidate());
950
+ return (resolveFileCandidates(input, indexCandidates(directory, input.moduleKind)) ?? notFoundCandidate());
332
951
  if (metadata.kind === "unavailable")
333
952
  return unresolvedCandidate("unavailable", [metadata.limitation]);
334
953
  if (packageChain.has(metadata.path))
335
954
  return unresolvedCandidate("unavailable", [
336
955
  `Directory package entrypoint cycle includes ${metadata.path}.`,
337
956
  ]);
338
- const preferred = [
339
- Reflect.get(metadata.value, "main"),
340
- ...(input.moduleKind === undefined
341
- ? [Reflect.get(metadata.value, "module")]
342
- : []),
343
- ];
344
- const entry = preferred.find((value) => value !== undefined);
957
+ const entry = metadata.main === ""
958
+ ? undefined
959
+ : metadata.main !== undefined
960
+ ? metadata.main
961
+ : input.moduleKind === undefined
962
+ ? metadata.module
963
+ : undefined;
345
964
  if (entry === undefined)
346
- return (resolveFileCandidates(input, indexCandidates(directory)) ??
347
- notFoundCandidate());
965
+ return (resolveFileCandidates(input, indexCandidates(directory, input.moduleKind)) ?? notFoundCandidate());
348
966
  if (typeof entry !== "string" || entry.length === 0)
349
967
  return unresolvedCandidate("unavailable", [
350
968
  `Directory package metadata ${metadata.path} is not valid package JSON.`,
@@ -354,43 +972,133 @@ const resolveDirectory = (input, directory, metadata, packageChain) => {
354
972
  sourcePath: metadata.path,
355
973
  context: "package-entrypoint",
356
974
  files: input.files,
975
+ ...(input.directoryPaths === undefined
976
+ ? {}
977
+ : { directoryPaths: input.directoryPaths }),
978
+ ...(input.unanalyzedFiles === undefined
979
+ ? {}
980
+ : { unanalyzedFiles: input.unanalyzedFiles }),
357
981
  ...(input.moduleKind === undefined ? {} : { moduleKind: input.moduleKind }),
358
982
  };
359
- const rejected = rejectDeclaration(entryInput.declaredPath);
360
- if (rejected !== null)
361
- return rejected;
362
983
  const candidate = contextualCandidate(entryInput);
363
984
  if (typeof candidate !== "string")
364
985
  return candidate;
365
986
  const confined = confineCandidate(candidate);
366
987
  if (typeof confined !== "string")
367
988
  return confined;
989
+ if (input.moduleKind !== undefined)
990
+ return resolveNodePackageMain(entryInput, directory, confined);
368
991
  const selected = resolveFileCandidates(entryInput, [
369
- ...fileCandidates(confined),
370
- ...indexCandidates(confined),
371
- ]) ?? resolveFileCandidates(input, indexCandidates(directory));
992
+ ...fileCandidates(confined, entryInput.moduleKind),
993
+ ...indexCandidates(confined, entryInput.moduleKind),
994
+ ]) ??
995
+ resolveFileCandidates(input, indexCandidates(directory, input.moduleKind));
372
996
  if (selected !== null)
373
997
  return selected;
374
998
  return resolveCandidate(entryInput, confined, new Set([...packageChain, metadata.path]));
375
999
  };
1000
+ const resolveNodePackageMain = (input, directory, mainPath) => {
1001
+ const normalizedMain = mainPath.replace(/\/$/u, "");
1002
+ for (const suffix of NODE_PACKAGE_MAIN_SUFFIXES) {
1003
+ const isDirectoryIndex = suffix.startsWith("/");
1004
+ if (normalizedMain === "" && !isDirectoryIndex)
1005
+ continue;
1006
+ const selected = resolveFileCandidates(input, [
1007
+ isDirectoryIndex
1008
+ ? posix.join(normalizedMain, suffix.slice(1))
1009
+ : posix.normalize(`${normalizedMain}${suffix}`),
1010
+ ]);
1011
+ if (selected === null)
1012
+ continue;
1013
+ if (input.moduleKind === "require")
1014
+ return selected;
1015
+ // ESM probes the normalized main, then appends the selected suffix to
1016
+ // the original declaration before finalizing the resulting file path.
1017
+ const finalized = confineCandidate(relativeCandidate(input.sourcePath, `${input.declaredPath}${suffix}`));
1018
+ if (typeof finalized !== "string")
1019
+ return finalized;
1020
+ const finalizedFile = resolveFileCandidates(input, [
1021
+ finalized.replace(/\/$/u, ""),
1022
+ ]);
1023
+ if (finalizedFile !== null)
1024
+ return finalizedFile;
1025
+ const source = input.files.get(input.sourcePath);
1026
+ if (hasContainerDirectory(input.files, finalized, source?.container_sha256, input.directoryPaths, input.unanalyzedFiles))
1027
+ return {
1028
+ ...unresolvedCandidate("rejected", [
1029
+ `The selected legacy ESM package main finalizes to directory ${finalized}; directory imports are unsupported and no later main or index candidate was tried.`,
1030
+ ]),
1031
+ candidatePath: finalized,
1032
+ };
1033
+ return unresolvedCandidate("not-found", [
1034
+ `The selected legacy ESM package main finalizes to ${finalized}, which is not an inventoried file; no later main or index candidate was tried.`,
1035
+ ]);
1036
+ }
1037
+ const fallback = resolveFileCandidates(input, indexCandidates(directory, input.moduleKind));
1038
+ if (fallback !== null)
1039
+ return fallback;
1040
+ return input.moduleKind === "require"
1041
+ ? { ...notFoundCandidate(), stopsAncestorLookup: true }
1042
+ : notFoundCandidate();
1043
+ };
376
1044
  const resolveFileCandidates = (input, candidates) => {
377
- const source = input.files.get(input.sourcePath);
378
1045
  for (const path of candidates) {
379
- const target = input.files.get(path);
380
- if (target !== undefined &&
381
- (source === undefined ||
382
- target.container_sha256 === source.container_sha256))
383
- return { resolvedPath: path, status: "resolved", limitations: [] };
1046
+ const selected = findFileCandidate(input, path);
1047
+ if (selected === null)
1048
+ continue;
1049
+ return selected.status === "resolved" &&
1050
+ isRuntimeDeclarationPath(input, path)
1051
+ ? {
1052
+ resolvedPath: null,
1053
+ status: "unavailable",
1054
+ candidatePath: path,
1055
+ limitations: [
1056
+ `The TypeScript declaration ${path} is compile-time evidence and cannot identify a runtime module implementation.`,
1057
+ ],
1058
+ }
1059
+ : selected;
384
1060
  }
385
1061
  return null;
386
1062
  };
387
- const fileCandidates = (candidate) => [
1063
+ /** Own candidate presence and container identity independently of loader policy. */
1064
+ const findFileCandidate = (input, path) => {
1065
+ const source = input.files.get(input.sourcePath);
1066
+ const target = input.files.get(path);
1067
+ if (target !== undefined &&
1068
+ (source === undefined ||
1069
+ target.container_sha256 === source.container_sha256))
1070
+ return { resolvedPath: path, status: "resolved", limitations: [] };
1071
+ const unanalyzed = input.unanalyzedFiles?.get(path);
1072
+ if (unanalyzed !== undefined &&
1073
+ (source === undefined ||
1074
+ unanalyzed.container_sha256 === source.container_sha256))
1075
+ return {
1076
+ resolvedPath: null,
1077
+ status: "unavailable",
1078
+ candidatePath: path,
1079
+ limitations: [
1080
+ ...(unanalyzed.limitations ?? []),
1081
+ unanalyzed.kind === undefined
1082
+ ? `${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.`
1083
+ : `${path} is an inventoried ${unanalyzed.kind} file, but its bytes are unavailable (hash status ${unanalyzed.hash_status ?? "unknown"}); resolution cannot be confirmed.`,
1084
+ ],
1085
+ };
1086
+ return null;
1087
+ };
1088
+ const isRuntimeDeclarationPath = (input, path) => input.moduleKind !== undefined && /\.d\.(?:ts|mts|cts)$/iu.test(path);
1089
+ const NODE_MODULE_EXTENSIONS = [".js", ".json", ".node"];
1090
+ const NODE_PACKAGE_MAIN_SUFFIXES = [
1091
+ "",
1092
+ ...NODE_MODULE_EXTENSIONS,
1093
+ ...NODE_MODULE_EXTENSIONS.map((extension) => `/index${extension}`),
1094
+ ];
1095
+ const fileCandidates = (candidate, moduleKind) => [
388
1096
  candidate,
389
- ...EXTENSIONS.map((extension) => `${candidate}${extension}`),
1097
+ ...(moduleKind === undefined ? EXTENSIONS : NODE_MODULE_EXTENSIONS).map((extension) => `${candidate}${extension}`),
390
1098
  ];
391
- const indexCandidates = (candidate) => EXTENSIONS.map((extension) => posix.join(candidate, `index${extension}`));
1099
+ const indexCandidates = (candidate, moduleKind) => (moduleKind === undefined ? EXTENSIONS : NODE_MODULE_EXTENSIONS).map((extension) => posix.join(candidate, `index${extension}`));
392
1100
  /** Only exact non-directory keys participate; wildcard expansion is unsupported. */
393
- const selectPackageExport = (value, subpath, moduleKind) => {
1101
+ const selectPackageExport = (value, subpath, moduleKind, packagePath) => {
394
1102
  let target = value;
395
1103
  let declared = [];
396
1104
  if (typeof value === "object" && value !== null && !Array.isArray(value)) {
@@ -414,23 +1122,35 @@ const selectPackageExport = (value, subpath, moduleKind) => {
414
1122
  }
415
1123
  else if (subpath !== ".")
416
1124
  return { status: "unmatched", declared };
417
- const selected = selectExportTarget(target, packageExportConditions(moduleKind));
1125
+ const selected = selectExportTarget(target, packageExportConditions(moduleKind), packagePath);
418
1126
  if (selected.kind === "invalid" || selected.kind === "invalid-config")
419
1127
  return { status: "rejected", limitation: selected.limitation };
420
1128
  if (selected.kind === "unmatched")
421
1129
  return {
422
1130
  status: "unmatched",
423
- declared: typeof target === "object" && target !== null
424
- ? Object.keys(target)
425
- : declared,
1131
+ declared: selected.declared,
426
1132
  };
427
- return selected.kind === "blocked"
428
- ? { status: "blocked" }
429
- : { status: "value", value: selected.value };
1133
+ if (selected.kind === "blocked")
1134
+ return { status: "blocked", cause: selected.cause };
1135
+ if (selected.kind === "non-relative")
1136
+ return {
1137
+ status: "rejected",
1138
+ limitation: `The package exports target ${JSON.stringify(selected.value)} must start with "./".`,
1139
+ };
1140
+ return {
1141
+ status: "value",
1142
+ value: selected.value,
1143
+ url: selected.url,
1144
+ ...(selected.lookupLimitation === undefined
1145
+ ? {}
1146
+ : {
1147
+ lookupLimitation: selected.lookupLimitation,
1148
+ }),
1149
+ };
430
1150
  };
431
- const invalidExportTarget = (value, reason) => ({
1151
+ const invalidExportTarget = (value, reason, mapKind = "exports") => ({
432
1152
  kind: "invalid",
433
- limitation: `The package exports target ${JSON.stringify(value) ?? String(value)} ${reason}.`,
1153
+ limitation: `The package ${mapKind === "imports" ? "import" : "exports"} target ${JSON.stringify(value) ?? String(value)} ${reason}.`,
434
1154
  });
435
1155
  // Node checks raw target segments before URL normalization. Compare encoded
436
1156
  // segment names here; full URL decoding follows array target selection.
@@ -443,46 +1163,79 @@ const forbiddenExportSegment = (value) => value
443
1163
  segment === ".." ||
444
1164
  segment.toLowerCase() === "node_modules");
445
1165
  });
1166
+ const selectStringPackageTarget = (value, packagePath, mapKind) => {
1167
+ if (mapKind === "imports") {
1168
+ const target = classifyPackageImportTargetString(value);
1169
+ if (target.kind === "invalid")
1170
+ return invalidExportTarget(value, "cannot be parent-relative, absolute, or a URL", mapKind);
1171
+ if (target.kind !== "relative")
1172
+ return { kind: "non-relative", value };
1173
+ }
1174
+ else if (!value.startsWith("./"))
1175
+ return invalidExportTarget(value, 'must start with "./"', mapKind);
1176
+ const forbidden = forbiddenExportSegment(value);
1177
+ if (forbidden !== undefined)
1178
+ return invalidExportTarget(value, `contains forbidden path segment ${JSON.stringify(forbidden)} before URL normalization`, mapKind);
1179
+ const metadataUrl = packageMetadataUrl(packagePath, value);
1180
+ const packageUrl = metadataUrl.ok
1181
+ ? metadataUrl.value
1182
+ : metadataUrl.error.structuralUrl;
1183
+ // Node constructs the URL before deciding whether this array entry is an
1184
+ // invalid package target. Tabs/newlines and dot segments normalize here;
1185
+ // percent decoding and existence checks belong after target selection.
1186
+ const url = new URL(value, packageUrl);
1187
+ if (!url.pathname.startsWith(new URL(".", packageUrl).pathname))
1188
+ return invalidExportTarget(value, "escapes the package root after URL normalization", mapKind);
1189
+ return {
1190
+ kind: "value",
1191
+ value,
1192
+ url,
1193
+ ...(metadataUrl.ok
1194
+ ? {}
1195
+ : {
1196
+ lookupLimitation: metadataUrl.error.limitation,
1197
+ }),
1198
+ };
1199
+ };
1200
+ const selectArrayPackageTarget = (value, conditions, packagePath, mapKind) => {
1201
+ if (value.length === 0)
1202
+ return { kind: "blocked", cause: "empty-array" };
1203
+ let lastRefusal;
1204
+ const declared = new Set();
1205
+ for (const entry of value) {
1206
+ const nested = selectExportTarget(entry, conditions, packagePath, mapKind);
1207
+ // Node's array fallback catches invalid targets, not invalid configuration.
1208
+ if (nested.kind === "invalid-config")
1209
+ return nested;
1210
+ if (nested.kind === "unmatched") {
1211
+ for (const condition of nested.declared)
1212
+ declared.add(condition);
1213
+ continue;
1214
+ }
1215
+ if (nested.kind === "invalid" || nested.kind === "blocked") {
1216
+ lastRefusal = nested;
1217
+ continue;
1218
+ }
1219
+ return nested;
1220
+ }
1221
+ return lastRefusal ?? { kind: "unmatched", declared: [...declared] };
1222
+ };
446
1223
  /**
447
1224
  * Resolve a target in Node's declared order. Explicit null blocks an active
448
1225
  * condition, whereas an unmatched nested object permits the next condition.
449
1226
  * An array skips unmatched and invalid entries, stops at its first string, and
450
- * preserves the final invalid-versus-null refusal if no string is selected.
1227
+ * preserves the last invalid/null outcome if no string is selected. A nonempty
1228
+ * array of unmatched conditions stays unmatched; an empty array blocks.
451
1229
  */
452
- const selectExportTarget = (value, conditions) => {
453
- if (typeof value === "string") {
454
- if (!value.startsWith("./"))
455
- return invalidExportTarget(value, 'must start with "./"');
456
- const forbidden = forbiddenExportSegment(value);
457
- return forbidden === undefined
458
- ? { kind: "value", value }
459
- : invalidExportTarget(value, `contains forbidden path segment ${JSON.stringify(forbidden)} before URL normalization`);
460
- }
1230
+ const selectExportTarget = (value, conditions, packagePath, mapKind = "exports") => {
1231
+ if (typeof value === "string")
1232
+ return selectStringPackageTarget(value, packagePath, mapKind);
461
1233
  if (value === null)
462
- return { kind: "blocked" };
463
- if (Array.isArray(value)) {
464
- let invalid = null;
465
- for (const entry of value) {
466
- const nested = selectExportTarget(entry, conditions);
467
- // Node's array fallback catches invalid targets, not invalid configuration.
468
- if (nested.kind === "invalid-config")
469
- return nested;
470
- if (nested.kind === "invalid") {
471
- invalid = nested.limitation;
472
- continue;
473
- }
474
- if (nested.kind === "unmatched")
475
- continue;
476
- invalid = null;
477
- if (nested.kind === "value")
478
- return nested;
479
- }
480
- return invalid === null
481
- ? { kind: "blocked" }
482
- : { kind: "invalid", limitation: invalid };
483
- }
1234
+ return { kind: "blocked", cause: "null" };
1235
+ if (Array.isArray(value))
1236
+ return selectArrayPackageTarget(value, conditions, packagePath, mapKind);
484
1237
  if (typeof value !== "object")
485
- return invalidExportTarget(value, "must be a relative string, object, array, or null");
1238
+ return invalidExportTarget(value, "must be a relative string, object, array, or null", mapKind);
486
1239
  for (const key of Object.keys(value)) {
487
1240
  const numeric = Number(key);
488
1241
  if (String(numeric) === key && numeric >= 0 && numeric < 0xffff_ffff)
@@ -491,14 +1244,18 @@ const selectExportTarget = (value, conditions) => {
491
1244
  limitation: `The package exports configuration contains numeric condition key ${JSON.stringify(key)}.`,
492
1245
  };
493
1246
  }
1247
+ const declared = new Set();
494
1248
  for (const [condition, target] of Object.entries(value)) {
1249
+ declared.add(condition);
495
1250
  if (!conditions.has(condition))
496
1251
  continue;
497
- const nested = selectExportTarget(target, conditions);
1252
+ const nested = selectExportTarget(target, conditions, packagePath, mapKind);
498
1253
  if (nested.kind !== "unmatched")
499
1254
  return nested;
1255
+ for (const name of nested.declared)
1256
+ declared.add(name);
500
1257
  }
501
- return { kind: "unmatched" };
1258
+ return { kind: "unmatched", declared: [...declared] };
502
1259
  };
503
1260
  /**
504
1261
  * Node selects an exports target by walking the declared keys in order and
@@ -521,21 +1278,35 @@ const notFoundCandidate = () => ({
521
1278
  "No extension, directory package, or index candidate exists in the inventoried artifact container.",
522
1279
  ],
523
1280
  });
524
- const exactExportsTargetNotFound = (path) => ({
1281
+ const exactPackageTargetNotFound = (path, targetKind) => ({
525
1282
  resolvedPath: null,
526
1283
  status: "not-found",
527
1284
  limitations: [
528
- `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.`,
1285
+ `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.`,
529
1286
  ],
530
1287
  });
531
1288
  const fileUrlPath = (value) => {
532
- if (!value.startsWith("file://"))
1289
+ if (!/^file:\/\//iu.test(value))
533
1290
  return undefined;
1291
+ // URL parsing removes tabs and newlines and normalizes encoded dot segments.
1292
+ // Check the raw path first, excluding URL identity suffixes, then check the
1293
+ // parsed pathname so parser normalization cannot introduce a separator.
1294
+ const rawPath = stripQueryAndFragment(value);
1295
+ if (value.includes("\0") ||
1296
+ value.includes("\\") ||
1297
+ /[\t\n\r]/u.test(rawPath) ||
1298
+ !admitsCanonicalPathSyntax(rawPath))
1299
+ return null;
534
1300
  try {
535
1301
  const url = new URL(value);
536
1302
  if (url.protocol !== "file:" || url.hostname !== "")
537
1303
  return undefined;
538
- return decodeURIComponent(url.pathname).replace(/^\/+/, "");
1304
+ if (!admitsCanonicalPathSyntax(url.pathname))
1305
+ return null;
1306
+ const decoded = decodeURIComponent(url.pathname);
1307
+ if (decoded.includes("\0"))
1308
+ return null;
1309
+ return decoded.replace(/^\/+/, "");
539
1310
  }
540
1311
  catch (cause) {
541
1312
  // Unparseable file URLs have no path to resolve.