claude-code-zanii 2.8.4

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 (669) hide show
  1. package/README.md +146 -0
  2. package/dist/chunks/AddWorkspaceDirectory-y_rd6sRl.js +1 -0
  3. package/dist/chunks/App-DgWSavG1.js +1 -0
  4. package/dist/chunks/ApproveApiKey-CJKWha-a.js +1 -0
  5. package/dist/chunks/ApproveApiKey-DTs2ExZH.js +1 -0
  6. package/dist/chunks/AssistantSessionChooser-BAhVk4id.js +1 -0
  7. package/dist/chunks/BackgroundTasksDialog-XU_JPh7R.js +2 -0
  8. package/dist/chunks/BypassPermissionsModeDialog-DV0Pi7ys.js +1 -0
  9. package/dist/chunks/ClaudeInChromeOnboarding-6erm_8Fn.js +1 -0
  10. package/dist/chunks/ClaudeMdExternalIncludesDialog-CjBvzB5s.js +1 -0
  11. package/dist/chunks/ClaudeMdExternalIncludesDialog-ts0XnWwl.js +1 -0
  12. package/dist/chunks/ConsoleOAuthFlow-DySPdSqQ.js +1 -0
  13. package/dist/chunks/CustomSelect-DqZxzBZP.js +1 -0
  14. package/dist/chunks/DesktopHandoff-5c90JK88.js +1 -0
  15. package/dist/chunks/DevChannelsDialog-DCMderzu.js +1 -0
  16. package/dist/chunks/Dialog-Dgg8bqcG.js +1 -0
  17. package/dist/chunks/DiffDialog-BU765aqh.js +6 -0
  18. package/dist/chunks/Doctor-B73iDB-d.js +3 -0
  19. package/dist/chunks/Doctor-CLZDdNRo.js +1 -0
  20. package/dist/chunks/ExitFlow-DBqn2mUf.js +2 -0
  21. package/dist/chunks/Feedback-D-JHabwi.js +2 -0
  22. package/dist/chunks/Grove-D-uQNMMo.js +11 -0
  23. package/dist/chunks/HybridTransport-B-G4QJcy.js +4 -0
  24. package/dist/chunks/ITermBackend-KP1vKsRN.js +1 -0
  25. package/dist/chunks/InProcessTransport-ByBEKxrQ.js +1 -0
  26. package/dist/chunks/InvalidConfigDialog-CMqiZ5nG.js +1 -0
  27. package/dist/chunks/InvalidSettingsDialog-CjPCKzVZ.js +1 -0
  28. package/dist/chunks/ListItem-B6MyhHvM.js +1 -0
  29. package/dist/chunks/MCPConnectionManager-BJ8PcYPe.js +1 -0
  30. package/dist/chunks/Message-DNxJ_tMS.js +1 -0
  31. package/dist/chunks/MessageSelector-D79Ug71B.js +3 -0
  32. package/dist/chunks/Messages-CtIbkB2M.js +11 -0
  33. package/dist/chunks/Onboarding-DVrgKrI9.js +1 -0
  34. package/dist/chunks/OverageCreditUpsell-D_td1ss4.js +1 -0
  35. package/dist/chunks/PermissionDialog-BCS22yEO.js +1 -0
  36. package/dist/chunks/PermissionDialog-C5O1fL53.js +1 -0
  37. package/dist/chunks/PermissionRequestTitle-CtlbBU9t.js +1 -0
  38. package/dist/chunks/PluginSettings-OPrg-_3N.js +17 -0
  39. package/dist/chunks/PressEnterToContinue-DmzxIgbZ.js +1 -0
  40. package/dist/chunks/PromptInputFooterSuggestions-CcsKj5DK.js +1 -0
  41. package/dist/chunks/PromptInputHelpMenu-JedFdsxU.js +1 -0
  42. package/dist/chunks/REPL-ByhyIRnf.js +1 -0
  43. package/dist/chunks/REPL-Clve-8zC.js +157 -0
  44. package/dist/chunks/RemoteCallout-BZcabEKb.js +1 -0
  45. package/dist/chunks/RemoteSessionManager-C2PIFDHt.js +1 -0
  46. package/dist/chunks/ResumeConversation-D3ZRTFcF.js +1 -0
  47. package/dist/chunks/SSETransport-DmZWnH0k.js +4 -0
  48. package/dist/chunks/SearchBox-DQg2Ph0V.js +1 -0
  49. package/dist/chunks/SearchExtraToolsTool-CLO4nt6N.js +1 -0
  50. package/dist/chunks/SentryErrorBoundary-BVfBaOOU.js +2 -0
  51. package/dist/chunks/SentryErrorBoundary-DIaVFad-.js +1 -0
  52. package/dist/chunks/Settings-rOCxQdS8.js +2 -0
  53. package/dist/chunks/TeleportProgress-CP8IY6bz.js +1 -0
  54. package/dist/chunks/TeleportRepoMismatchDialog-DMmHgBqo.js +1 -0
  55. package/dist/chunks/TeleportResumeWrapper-D5wEAW1-.js +1 -0
  56. package/dist/chunks/ThemePicker-Bgr7yOQB.js +1 -0
  57. package/dist/chunks/TmuxBackend-BzbtUtP1.js +9 -0
  58. package/dist/chunks/TrustDialog-BI5U3BQ0.js +1 -0
  59. package/dist/chunks/TungstenTool-CiQclNwj.js +1 -0
  60. package/dist/chunks/TungstenTool-kMqy-ifa.js +1 -0
  61. package/dist/chunks/ValidationErrorsList-DprGtB2w.js +2 -0
  62. package/dist/chunks/WelcomeV2-C4vfBnIy.js +1 -0
  63. package/dist/chunks/WindowsTerminalBackend-BSoezOCE.js +2 -0
  64. package/dist/chunks/add-dir-DpOmv6kv.js +1 -0
  65. package/dist/chunks/agentDisplay-DuYEwOwO.js +1 -0
  66. package/dist/chunks/agents-BlurXZrF.js +2 -0
  67. package/dist/chunks/agents-DhZf7ftU.js +103 -0
  68. package/dist/chunks/ajv-CDrSAj3O.js +8 -0
  69. package/dist/chunks/analytics-i6X1et4O.js +1 -0
  70. package/dist/chunks/ant-D9hd_iYy.js +1 -0
  71. package/dist/chunks/api-CoaOHwDQ.js +4 -0
  72. package/dist/chunks/api-DvyGR-L7.js +1 -0
  73. package/dist/chunks/api-YHYC4Zdk.js +1 -0
  74. package/dist/chunks/artifacts-BMAYdaqh.js +1 -0
  75. package/dist/chunks/asciicast-DpHRoebc.js +1 -0
  76. package/dist/chunks/asciicast-HG1EoAQe.js +4 -0
  77. package/dist/chunks/assistant-D4-qcNT1.js +1 -0
  78. package/dist/chunks/assistant-DO2ZmZn1.js +1 -0
  79. package/dist/chunks/assistant-Dd86NmJM.js +1 -0
  80. package/dist/chunks/attributionHooks-BUmHrLhB.js +1 -0
  81. package/dist/chunks/attributionTrailer-r2Pbpu2N.js +1 -0
  82. package/dist/chunks/auth-CF3BGNYT.js +1 -0
  83. package/dist/chunks/auth-DwWwG43F.js +1 -0
  84. package/dist/chunks/auth-V_Xk2iea.js +1 -0
  85. package/dist/chunks/autoMode-DUksX5_i.js +45 -0
  86. package/dist/chunks/autoModeDenials-0CPO-Jbu.js +1 -0
  87. package/dist/chunks/autonomy-C5mNhAdz.js +21 -0
  88. package/dist/chunks/autonomy-CLt1dWaC.js +1 -0
  89. package/dist/chunks/autonomyPanel-rioFnrQO.js +1 -0
  90. package/dist/chunks/axios-DPuSPBlH.js +1 -0
  91. package/dist/chunks/axios-Zh7qGPze.js +12 -0
  92. package/dist/chunks/backgroundHousekeeping-BGtfqu-J.js +1 -0
  93. package/dist/chunks/backgroundHousekeeping-BqKZEvy0.js +17 -0
  94. package/dist/chunks/banner-BGLr3KYQ.js +2 -0
  95. package/dist/chunks/base64-js-B1tFNiG0.js +1 -0
  96. package/dist/chunks/bedrockClient-BFzWuhQK.js +15 -0
  97. package/dist/chunks/bg-B-YgGwLj.js +9 -0
  98. package/dist/chunks/bg-IU4gG3jc.js +1 -0
  99. package/dist/chunks/branch-BWY5W7hf.js +3 -0
  100. package/dist/chunks/break-cache-CY-O23fJ.js +8 -0
  101. package/dist/chunks/bridge-CqWd70vK.js +2 -0
  102. package/dist/chunks/bridgeConfig-CWO8AmCY.js +1 -0
  103. package/dist/chunks/bridgeConfig-D38y9eXn.js +1 -0
  104. package/dist/chunks/bridgeConfig-EwUq__ct.js +1 -0
  105. package/dist/chunks/bridgeConfig-GYR-LUiu.js +1 -0
  106. package/dist/chunks/bridgeEnabled-DKqmLnKO.js +1 -0
  107. package/dist/chunks/bridgeEnabled-DZIGDtfY.js +1 -0
  108. package/dist/chunks/bridgeMain-CXVks2ND.js +1 -0
  109. package/dist/chunks/bridgeMain-D4nsECwJ.js +68 -0
  110. package/dist/chunks/bridgeMessaging-BUOZU_ba.js +1 -0
  111. package/dist/chunks/bridgePointer-BpzIEsD_.js +1 -0
  112. package/dist/chunks/browser-D1vC3BNd.js +1 -0
  113. package/dist/chunks/btw-CVXJwoXo.js +1 -0
  114. package/dist/chunks/buddy-BLcvL8lP.js +3 -0
  115. package/dist/chunks/bundledMode-DQNSSQbt.js +1 -0
  116. package/dist/chunks/caches-BrfvzKn5.js +1 -0
  117. package/dist/chunks/caches-CkSv3MfC.js +3 -0
  118. package/dist/chunks/capacityWake-BWCSatN6.js +1 -0
  119. package/dist/chunks/changeDetector-DEZU6tum.js +1 -0
  120. package/dist/chunks/changeDetector-Df7c6U3d.js +1 -0
  121. package/dist/chunks/channelAllowlist-BApjAS0V.js +1 -0
  122. package/dist/chunks/channelNotification-BjWwF85R.js +1 -0
  123. package/dist/chunks/channelNotification-D01YVwNj.js +1 -0
  124. package/dist/chunks/chokidar-DPwMBcWI.js +1 -0
  125. package/dist/chunks/chokidar-DkDXNCTz.js +1 -0
  126. package/dist/chunks/chrome-D7coxEOI.js +1 -0
  127. package/dist/chunks/chromeNativeHost-CPj9M_4-.js +1 -0
  128. package/dist/chunks/chunk-DR8-3Aex.js +1 -0
  129. package/dist/chunks/classPrivateFieldSet2-DZkxcFPS.js +1 -0
  130. package/dist/chunks/claudeAiLimitsHook-ATshVrOH.js +1 -0
  131. package/dist/chunks/claudeDesktop-PVa9tWsM.js +1 -0
  132. package/dist/chunks/cleanup-C-PGmKpV.js +1 -0
  133. package/dist/chunks/clear-CxGE9Ntr.js +1 -0
  134. package/dist/chunks/cliLaunch-CMXoY_LO.js +1 -0
  135. package/dist/chunks/client-BWED8Tbu.js +35 -0
  136. package/dist/chunks/client-CinDjeSq.js +7 -0
  137. package/dist/chunks/client-CpXGg9e0.js +1 -0
  138. package/dist/chunks/color-B3w_VQTn.js +1 -0
  139. package/dist/chunks/color-convert-BQZnVz_5.js +1 -0
  140. package/dist/chunks/commands-DFp48zwy.js +1 -0
  141. package/dist/chunks/commitAttribution-B0cXmbvv.js +2 -0
  142. package/dist/chunks/commitAttribution-DRSKRoH6.js +1 -0
  143. package/dist/chunks/common-BX7bn3hg.js +1 -0
  144. package/dist/chunks/common-Ce3LanTX.js +1 -0
  145. package/dist/chunks/common-DdLQuE2_.js +1 -0
  146. package/dist/chunks/common-HfKcqOYK.js +1 -0
  147. package/dist/chunks/compact-C8ljGMdo.js +3 -0
  148. package/dist/chunks/companion-mD1jw6xX.js +1 -0
  149. package/dist/chunks/completionCache-BqQXVTa9.js +1 -0
  150. package/dist/chunks/completionCache-BtP4vfAi.js +4 -0
  151. package/dist/chunks/computerUseLock-ADE_PhIK.js +1 -0
  152. package/dist/chunks/config-CmyaIIOY.js +1 -0
  153. package/dist/chunks/config-Rl1Y_Dtq.js +1 -0
  154. package/dist/chunks/connectHeadless-MFABhXpz.js +1 -0
  155. package/dist/chunks/constants-BM62Vf_X.js +1 -0
  156. package/dist/chunks/constants-BfXy-5cI.js +1 -0
  157. package/dist/chunks/context-BeiZkUNq.js +1 -0
  158. package/dist/chunks/context-noninteractive-CRdF3iv8.js +54 -0
  159. package/dist/chunks/controlMessageCompat-591iGHUK.js +1 -0
  160. package/dist/chunks/conversation-BoguXZEI.js +1 -0
  161. package/dist/chunks/conversation-yhs7tT-g.js +1 -0
  162. package/dist/chunks/copy-BpeUcqku.js +7 -0
  163. package/dist/chunks/createSSHSession-B3JOB4TE.js +6 -0
  164. package/dist/chunks/createSession-BJSnFBGt.js +1 -0
  165. package/dist/chunks/createSession-CnRHI3RU.js +1 -0
  166. package/dist/chunks/cron-iqTFGIos.js +1 -0
  167. package/dist/chunks/cronScheduler-zRXhgEEU.js +6 -0
  168. package/dist/chunks/cronTasks-CMJldfoP.js +2 -0
  169. package/dist/chunks/crossProjectResume-DxO6TX30.js +40 -0
  170. package/dist/chunks/cwd-B2guYBbl.js +1 -0
  171. package/dist/chunks/cwd-B5bbyUwz.js +1 -0
  172. package/dist/chunks/cwd-BXiaJzLh.js +1 -0
  173. package/dist/chunks/daemon-B3v4OoOu.js +2 -0
  174. package/dist/chunks/dangerousBackend-OmCzoW35.js +1 -0
  175. package/dist/chunks/datadog-3-Vvz0yz.js +1 -0
  176. package/dist/chunks/datadog-BQlp3bTs.js +1 -0
  177. package/dist/chunks/debug-BDBIipC1.js +2 -0
  178. package/dist/chunks/debug-C7tW7DFW.js +1 -0
  179. package/dist/chunks/debug-CjIaNjpK.js +5 -0
  180. package/dist/chunks/debugUtils-Dsg-UHeg.js +1 -0
  181. package/dist/chunks/defineProperty-CaCI0a5T.js +1 -0
  182. package/dist/chunks/desktop-C_SS0068.js +1 -0
  183. package/dist/chunks/detached-B7RNZeyl.js +5 -0
  184. package/dist/chunks/detect-libc-DFFGDzPC.js +1 -0
  185. package/dist/chunks/detectRepository-BnTCJAXR.js +1 -0
  186. package/dist/chunks/detectRepository-Gobn9eFt.js +1 -0
  187. package/dist/chunks/detection-CN_uLGU2.js +1 -0
  188. package/dist/chunks/detection-DW6grIlc.js +1 -0
  189. package/dist/chunks/diff-B8YmRG5T.js +1 -0
  190. package/dist/chunks/directoryCompletion-J560aATd.js +1 -0
  191. package/dist/chunks/dist-B1wOprSs.js +29 -0
  192. package/dist/chunks/dist-DZQOarNX.js +5 -0
  193. package/dist/chunks/dist-HZfkKiUF.js +20 -0
  194. package/dist/chunks/dist-es-4xyrZoNc2.js +1 -0
  195. package/dist/chunks/dist-es-6kjvVbJd.js +1 -0
  196. package/dist/chunks/dist-es-BJldFHbt.js +3 -0
  197. package/dist/chunks/dist-es-BM013UFT.js +1 -0
  198. package/dist/chunks/dist-es-BPPewn1A.js +1 -0
  199. package/dist/chunks/dist-es-BZGG3Hnm.js +1 -0
  200. package/dist/chunks/dist-es-BZjJL64k2.js +1 -0
  201. package/dist/chunks/dist-es-BctcPxLN.js +1 -0
  202. package/dist/chunks/dist-es-Bf2jR30y.js +1 -0
  203. package/dist/chunks/dist-es-BgLoR-hQ.js +1 -0
  204. package/dist/chunks/dist-es-BismPcTW.js +1 -0
  205. package/dist/chunks/dist-es-BrPzXmSP.js +1 -0
  206. package/dist/chunks/dist-es-Bu21Wvhs.js +1 -0
  207. package/dist/chunks/dist-es-BuWNNAXW.js +1 -0
  208. package/dist/chunks/dist-es-Bz11sFiK2.js +1 -0
  209. package/dist/chunks/dist-es-C5VplyPL2.js +5 -0
  210. package/dist/chunks/dist-es-C66BuLgn.js +1 -0
  211. package/dist/chunks/dist-es-CCIzgNln2.js +1 -0
  212. package/dist/chunks/dist-es-CLyx7Kge2.js +1 -0
  213. package/dist/chunks/dist-es-CUbatGdn.js +1 -0
  214. package/dist/chunks/dist-es-CYe_-TbD.js +1 -0
  215. package/dist/chunks/dist-es-C_IHUdzL.js +1 -0
  216. package/dist/chunks/dist-es-Ci_rKlMr.js +1 -0
  217. package/dist/chunks/dist-es-ClDZBAj7.js +1 -0
  218. package/dist/chunks/dist-es-Cp--qjOi.js +1 -0
  219. package/dist/chunks/dist-es-CzE4kW1L.js +9 -0
  220. package/dist/chunks/dist-es-DUg5w7-v.js +1 -0
  221. package/dist/chunks/dist-es-Dl0ZRczY.js +1 -0
  222. package/dist/chunks/dist-es-Do_155z5.js +1 -0
  223. package/dist/chunks/dist-es-DxIM0jd82.js +1 -0
  224. package/dist/chunks/dist-es-Fav2oBDs.js +1 -0
  225. package/dist/chunks/dist-es-TZjwPaGn.js +1 -0
  226. package/dist/chunks/dist-es-W22ud2el2.js +1 -0
  227. package/dist/chunks/dist-es-aU8-02YH.js +1 -0
  228. package/dist/chunks/dist-es-b3yZSGx82.js +1 -0
  229. package/dist/chunks/dist-es-dIP5JtXz.js +5 -0
  230. package/dist/chunks/dist-es-mQ4HvnYs2.js +1 -0
  231. package/dist/chunks/distRoot-CJaacAHy.js +1 -0
  232. package/dist/chunks/doctor-DLZPF4iY.js +1 -0
  233. package/dist/chunks/earlyInput-BTI1CSNt.js +2 -0
  234. package/dist/chunks/earlyInput-BwGtzhhP.js +1 -0
  235. package/dist/chunks/effort-BaHvpBWr.js +9 -0
  236. package/dist/chunks/entry-_e-lyRwv.js +14 -0
  237. package/dist/chunks/env-CesrOJJq.js +1 -0
  238. package/dist/chunks/envLessBridgeConfig-4oys0_9A.js +1 -0
  239. package/dist/chunks/envLessBridgeConfig-DJ1Sts3F.js +1 -0
  240. package/dist/chunks/envUtils-CFG7IQID.js +1 -0
  241. package/dist/chunks/errorLogSink-Ti4Suoz6.js +2 -0
  242. package/dist/chunks/escHotkey-CVn_80xM.js +259 -0
  243. package/dist/chunks/esm-BFnjHW38.js +1 -0
  244. package/dist/chunks/esm-BQg_LX3V.js +1 -0
  245. package/dist/chunks/esm-BtC6CMmM.js +1 -0
  246. package/dist/chunks/esm-BwzC0MQp.js +1 -0
  247. package/dist/chunks/esm-CFybeQ_Q.js +1 -0
  248. package/dist/chunks/esm-CK-5CT5X.js +1 -0
  249. package/dist/chunks/esm-CL1OwlZB.js +1 -0
  250. package/dist/chunks/esm-CMzgSTAl.js +1 -0
  251. package/dist/chunks/esm-CPE_H2Lx.js +1 -0
  252. package/dist/chunks/esm-CcWquv5a.js +10 -0
  253. package/dist/chunks/esm-CeNEpRZt.js +1 -0
  254. package/dist/chunks/esm-D7hykoRB.js +1 -0
  255. package/dist/chunks/esm-DUtcefEV.js +1 -0
  256. package/dist/chunks/esm-DhrUwJBp.js +1 -0
  257. package/dist/chunks/esm-Duu1fRQ8.js +1 -0
  258. package/dist/chunks/esm-Ght2BaU2.js +1 -0
  259. package/dist/chunks/esm-Q6Yz2GMx.js +56 -0
  260. package/dist/chunks/esm-WONEiurY.js +13 -0
  261. package/dist/chunks/event-streams-BumpU1aB.js +1 -0
  262. package/dist/chunks/eventLoopStallDetector-DxyFdg1h.js +1 -0
  263. package/dist/chunks/execAsync-ChKxDZ8C.js +1 -0
  264. package/dist/chunks/execFileNoThrow-DdmR1mBS.js +1 -0
  265. package/dist/chunks/execSyncWrapper-Ch4TNj8u.js +1 -0
  266. package/dist/chunks/execa-BMaINL7N.js +34 -0
  267. package/dist/chunks/executor-C7INr19-.js +1 -0
  268. package/dist/chunks/executor-Dnf3YYma.js +1604 -0
  269. package/dist/chunks/exit-BakzsOD0.js +1 -0
  270. package/dist/chunks/exit-CiDn2tN9.js +2 -0
  271. package/dist/chunks/export-b-6pqMqz.js +2 -0
  272. package/dist/chunks/exportRenderer-RxtEIyTm.js +1 -0
  273. package/dist/chunks/extra-usage-7EPJNjNW.js +1 -0
  274. package/dist/chunks/extra-usage-ChvuewCq.js +1 -0
  275. package/dist/chunks/extra-usage-core-BVhLtoDF.js +1 -0
  276. package/dist/chunks/extra-usage-noninteractive-_Njh6q-q.js +1 -0
  277. package/dist/chunks/extraUsage-qOBMQB6g.js +1 -0
  278. package/dist/chunks/extractMemories-CRBVNiG1.js +1 -0
  279. package/dist/chunks/fast-C4uw_g7o.js +1 -0
  280. package/dist/chunks/fast-CEaIzaPl.js +1 -0
  281. package/dist/chunks/featureCheck-B1GSTyhh.js +1 -0
  282. package/dist/chunks/featureCheck-DKigAPal.js +1 -0
  283. package/dist/chunks/feedback-Bf3TjjuD.js +1 -0
  284. package/dist/chunks/figures-fES5sASd.js +1 -0
  285. package/dist/chunks/fileStateCache-DAsLEZau.js +1 -0
  286. package/dist/chunks/files-B-m_4X8b.js +2 -0
  287. package/dist/chunks/findExecutable-D8vJrFnO.js +1 -0
  288. package/dist/chunks/firstPartyEventLogger-BtrGagNa.js +1 -0
  289. package/dist/chunks/flushGate-2zqab-Pp.js +1 -0
  290. package/dist/chunks/foundry-sdk-CtX8C0x3.js +1 -0
  291. package/dist/chunks/fpsMetrics-ts_jaF3g.js +1 -0
  292. package/dist/chunks/fuse-ivQ_eRwF.js +1 -0
  293. package/dist/chunks/gates-CmKoQ0O-.js +1 -0
  294. package/dist/chunks/gates-_wbPDQ3M.js +1 -0
  295. package/dist/chunks/gemini-DRx495gn.js +3 -0
  296. package/dist/chunks/generateRecap-Cv8gd_QF.js +1 -0
  297. package/dist/chunks/generateSessionName-Dpjg-u_x.js +1 -0
  298. package/dist/chunks/genericProcessUtils-BFJMxLqn.js +23 -0
  299. package/dist/chunks/getMachineId-bsd-C9pL9Ajr.js +1 -0
  300. package/dist/chunks/getMachineId-darwin-Ma4F9rJg.js +2 -0
  301. package/dist/chunks/getMachineId-linux-C0lXMqsj.js +1 -0
  302. package/dist/chunks/getMachineId-unsupported-ByHQTXat.js +1 -0
  303. package/dist/chunks/getMachineId-win-DZsXZmTz.js +1 -0
  304. package/dist/chunks/git-Bj8Ow4pJ.js +6 -0
  305. package/dist/chunks/git-Q_b4oZ17.js +1 -0
  306. package/dist/chunks/githubRepoPathMapping-DGivBX9h.js +1 -0
  307. package/dist/chunks/goal-BrHEJv8o.js +3 -0
  308. package/dist/chunks/goalStorage-CsuPOQbk.js +1 -0
  309. package/dist/chunks/graceful-fs-BuPWC-vB.js +2 -0
  310. package/dist/chunks/grok-CDkDDaY_.js +1 -0
  311. package/dist/chunks/growthbook-D3_Cr9n-.js +1 -0
  312. package/dist/chunks/growthbook-p4aJ_UMv.js +32 -0
  313. package/dist/chunks/hash-KW-tVnPp.js +1 -0
  314. package/dist/chunks/heapdump-CloylIZ9.js +5 -0
  315. package/dist/chunks/help-DpSJlHIc.js +1 -0
  316. package/dist/chunks/hooks-2pogt8nv.js +79 -0
  317. package/dist/chunks/hooks-BBODdwnE.js +1 -0
  318. package/dist/chunks/hostAdapter-B5KTUqhv.js +1 -0
  319. package/dist/chunks/hostGuard-DyWr2TwE.js +1 -0
  320. package/dist/chunks/httpAuthSchemes-CgPbtGos.js +13 -0
  321. package/dist/chunks/ide-CJEcfBZq.js +2 -0
  322. package/dist/chunks/inboundAttachments-RNpYpRTO.js +1 -0
  323. package/dist/chunks/index.min-DCDiLq-j.js +1 -0
  324. package/dist/chunks/initReplBridge-D2E6IM2B.js +1 -0
  325. package/dist/chunks/initReplBridge-p2uwDBPx.js +1 -0
  326. package/dist/chunks/insights-DnpZScKs.js +822 -0
  327. package/dist/chunks/install-D_vTxUlG.js +1 -0
  328. package/dist/chunks/install-github-app-BK8A7g3i.js +147 -0
  329. package/dist/chunks/install-slack-app-C47R9VoI.js +1 -0
  330. package/dist/chunks/instinctParser-DxKdI3JC.js +1 -0
  331. package/dist/chunks/instrumentation-DkdAJFrZ.js +12 -0
  332. package/dist/chunks/intl-Pse97ORk.js +1 -0
  333. package/dist/chunks/isObject-DaxDnPKm.js +1 -0
  334. package/dist/chunks/isSymbol-D7QeUnS5.js +1 -0
  335. package/dist/chunks/job-opl00C4l.js +2 -0
  336. package/dist/chunks/json-bigint-BRRVs1dv.js +8 -0
  337. package/dist/chunks/jsx-runtime-BTgGEFjL.js +1 -0
  338. package/dist/chunks/jws-B_ieuaZg.js +3 -0
  339. package/dist/chunks/jwtUtils-D-tJzoJY.js +1 -0
  340. package/dist/chunks/keybindings-mRf9VSe8.js +2 -0
  341. package/dist/chunks/lang-eH4EJErj.js +1 -0
  342. package/dist/chunks/language-DD9ar6RA.js +1 -0
  343. package/dist/chunks/language-EZLNdETg.js +1 -0
  344. package/dist/chunks/launchAgentsPlatform-Cq0_7-IM.js +1 -0
  345. package/dist/chunks/launchAutofixPr-Bw7aUHUs.js +18 -0
  346. package/dist/chunks/launchCommand-Bk1Fn-qZ.js +1 -0
  347. package/dist/chunks/launchLocalMemory-CLBCUgwd.js +3 -0
  348. package/dist/chunks/launchLocalVault-BfWJWrBg.js +3 -0
  349. package/dist/chunks/launchMemoryStores-DdnSVSDZ.js +1 -0
  350. package/dist/chunks/launchOnboarding-ziCEX3GI.js +8 -0
  351. package/dist/chunks/launchSchedule-G_c7sgmy.js +1 -0
  352. package/dist/chunks/launchSkillStore-Z1Kd7nCg.js +1 -0
  353. package/dist/chunks/launchTeleport-Dp9AFbPx.js +3 -0
  354. package/dist/chunks/launchVault-hwK-Ljek.js +1 -0
  355. package/dist/chunks/lazySchema-2sOku3cX.js +1 -0
  356. package/dist/chunks/lib-BHRYgENJ.js +8 -0
  357. package/dist/chunks/lib-DRyNc7xD.js +2 -0
  358. package/dist/chunks/lib-Ddq71jM5.js +14 -0
  359. package/dist/chunks/loadAgentsDir-Bz0FfcVt.js +5620 -0
  360. package/dist/chunks/loadAgentsDir-CLM0ws7u.js +1 -0
  361. package/dist/chunks/loadPluginHooks-B5SIS2uo.js +1 -0
  362. package/dist/chunks/loadSso-RY87rrJO.js +1 -0
  363. package/dist/chunks/localSearch-BLF6PSv2.js +1 -0
  364. package/dist/chunks/localSearch-CTycGe3E.js +1 -0
  365. package/dist/chunks/localSearch-inDahM8I.js +1 -0
  366. package/dist/chunks/lockfile--gk1HDM6.js +1 -0
  367. package/dist/chunks/log-B-Nj3Yed.js +1 -0
  368. package/dist/chunks/log-DVv8YiNo.js +1 -0
  369. package/dist/chunks/login-BeLvLowc.js +1 -0
  370. package/dist/chunks/login-DUUOeNoz.js +1 -0
  371. package/dist/chunks/logoV2Utils-D5SpeZ3C.js +1 -0
  372. package/dist/chunks/logout-C2QuTBdS.js +1 -0
  373. package/dist/chunks/magicDocs-CUXKi-Wv.js +57 -0
  374. package/dist/chunks/main-CFhpWtpC.js +1420 -0
  375. package/dist/chunks/main-sboa5RKc.js +31 -0
  376. package/dist/chunks/mappers-DLkk0PZz.js +1 -0
  377. package/dist/chunks/mcp-C2f6IgAp.js +2 -0
  378. package/dist/chunks/mcp-Djui9m3_.js +6 -0
  379. package/dist/chunks/mcp-DvTSxrJ4.js +1 -0
  380. package/dist/chunks/mcpServer-DMA0bdFC.js +1 -0
  381. package/dist/chunks/mcpServer-DxEHfW2v.js +1 -0
  382. package/dist/chunks/memoize-Bg2dXTzV.js +1 -0
  383. package/dist/chunks/memoize-DNnuA2aU.js +1 -0
  384. package/dist/chunks/memory-B9io9Zcv.js +1 -0
  385. package/dist/chunks/mobile-CPnnvkQV.js +2 -0
  386. package/dist/chunks/modalContext-B1b0Gsro.js +1 -0
  387. package/dist/chunks/mode-BDgwh_Xb.js +2 -0
  388. package/dist/chunks/model-B6cpEh-s.js +1 -0
  389. package/dist/chunks/model-BcunOCC9.js +1 -0
  390. package/dist/chunks/modelOptions-CHUHQ9WG.js +1 -0
  391. package/dist/chunks/normalization-cjPqid31.js +1 -0
  392. package/dist/chunks/oauth-CnBLewrU.js +1 -0
  393. package/dist/chunks/oauth-DMPGYAoZ.js +1 -0
  394. package/dist/chunks/observationStore-DVBxrSdI.js +4 -0
  395. package/dist/chunks/onChangeAppState-M61XDN6V.js +1 -0
  396. package/dist/chunks/open-CsUNPSNx.js +1 -0
  397. package/dist/chunks/openai-BHvlYW3m.js +2 -0
  398. package/dist/chunks/output-style-BtKuBrs4.js +1 -0
  399. package/dist/chunks/outputStyles-hHuIBkRB.js +84 -0
  400. package/dist/chunks/overageCreditGrant-BLFT-rF3.js +1 -0
  401. package/dist/chunks/p-map-C-WNcN6g.js +1 -0
  402. package/dist/chunks/p-map-CQ2NythB.js +1 -0
  403. package/dist/chunks/package-9IAs5Qf0.js +1 -0
  404. package/dist/chunks/panel-27xLZI7c.js +1 -0
  405. package/dist/chunks/panel-NoDfShEZ.js +1 -0
  406. package/dist/chunks/panelCall-CEOWVNCM.js +1 -0
  407. package/dist/chunks/parseConnectUrl-CxU4IX9o.js +1 -0
  408. package/dist/chunks/parser-DGlAnaNj.js +1 -0
  409. package/dist/chunks/parser-DGoLe2RS.js +1 -0
  410. package/dist/chunks/passes-CExcqu66.js +1 -0
  411. package/dist/chunks/path-uaxlnhva.js +1 -0
  412. package/dist/chunks/permissions-B3PceQul.js +1 -0
  413. package/dist/chunks/permissions-DezIL2xF.js +3 -0
  414. package/dist/chunks/permissions-DnpI8Whh.js +1 -0
  415. package/dist/chunks/pipeTransport-CB_Wq_Kx.js +1 -0
  416. package/dist/chunks/plan-cfZBclh9.js +1 -0
  417. package/dist/chunks/platform-BXz_rgpy.js +2 -0
  418. package/dist/chunks/plist-DLGDWBD6.js +6 -0
  419. package/dist/chunks/plugin-CuhENLRs.js +1 -0
  420. package/dist/chunks/pluginAutoupdate-wTeOXfQe.js +1 -0
  421. package/dist/chunks/pluginBlocklist-D6pkKfXr.js +1 -0
  422. package/dist/chunks/pluginCliCommands-DqxdCwsq.js +1 -0
  423. package/dist/chunks/pluginFlagging-CjH48f-K.js +1 -0
  424. package/dist/chunks/pluginOperations-DMFYB3pK.js +2 -0
  425. package/dist/chunks/pluginStartupCheck-BW3_KfZz.js +1 -0
  426. package/dist/chunks/pluginStartupCheck-Cj2BMjVw.js +1 -0
  427. package/dist/chunks/plugins-CarsG2v8.js +4 -0
  428. package/dist/chunks/policyLimits-DFn1vHkN.js +1 -0
  429. package/dist/chunks/pollConfig-C8nODJY1.js +1 -0
  430. package/dist/chunks/poller-DXZJ-dUP.js +1 -0
  431. package/dist/chunks/poor-C7GQ4a5X.js +1 -0
  432. package/dist/chunks/poorMode-CBe0rfxB.js +1 -0
  433. package/dist/chunks/poorMode-CbZTudtw.js +1 -0
  434. package/dist/chunks/postCommitAttribution--vvAWIqD.js +1 -0
  435. package/dist/chunks/print-CwwtGSbK.js +114 -0
  436. package/dist/chunks/privacy-settings-Bz8cAVp5.js +11 -0
  437. package/dist/chunks/privacyLevel-CRCHhztk.js +1 -0
  438. package/dist/chunks/process-CnhUplBr.js +1 -0
  439. package/dist/chunks/process-X4vCP9x0.js +1 -0
  440. package/dist/chunks/processBashCommand-NL0YEUqW.js +3 -0
  441. package/dist/chunks/processSlashCommand-FPMWElsI.js +6 -0
  442. package/dist/chunks/processSlashCommand-_oJs6_w8.js +6 -0
  443. package/dist/chunks/processUserInput-QAJK0XSn.js +1 -0
  444. package/dist/chunks/projectContext-B21hXj9q.js +1 -0
  445. package/dist/chunks/projectContext-DbTQHQS3.js +1 -0
  446. package/dist/chunks/prompt-C6eleu4x.js +1 -0
  447. package/dist/chunks/prompt-CUdoQXyN.js +1 -0
  448. package/dist/chunks/prompt-CsBCtw4l.js +228 -0
  449. package/dist/chunks/prompt-hnIDYhP4.js +54 -0
  450. package/dist/chunks/promptEditor-CrlVcc17.js +4 -0
  451. package/dist/chunks/protectedNamespace-Cn4901XG.js +1 -0
  452. package/dist/chunks/protocolHandler-DM_w7sJ5.js +13 -0
  453. package/dist/chunks/protocols-CpoQzjyI.js +7 -0
  454. package/dist/chunks/proxy-9WvtUy8E.js +99 -0
  455. package/dist/chunks/rate-limit-options-BehQ3MoX.js +1 -0
  456. package/dist/chunks/rcDebugLog-BbHlIxCm.js +11 -0
  457. package/dist/chunks/referral-BfAZEIZL.js +1 -0
  458. package/dist/chunks/refresh-Bl3Miver.js +1 -0
  459. package/dist/chunks/registerProtocol-BHZ3vZED.js +36 -0
  460. package/dist/chunks/registerSkillHooks-BR7v5qDA.js +1 -0
  461. package/dist/chunks/registry-C2igpRd-.js +1 -0
  462. package/dist/chunks/release-notes-C_Cou6ye.js +4 -0
  463. package/dist/chunks/releaseNotes-DveQShyB.js +2 -0
  464. package/dist/chunks/reload-plugins-D-pAUoB5.js +1 -0
  465. package/dist/chunks/remote-env-C_dBgbgo.js +1 -0
  466. package/dist/chunks/remoteBridgeCore-BxWhTy1u.js +1 -0
  467. package/dist/chunks/remoteControlServer-D3OjUlB-.js +3 -0
  468. package/dist/chunks/rename-f3m0ETSt.js +1 -0
  469. package/dist/chunks/renderOptions-QZLxGnh_.js +1 -0
  470. package/dist/chunks/replBridge-qeVmCJOb.js +1 -0
  471. package/dist/chunks/resume-CM_8p9Iu.js +2 -0
  472. package/dist/chunks/rewind-0cB7o6fx.js +1 -0
  473. package/dist/chunks/ripgrep-BEWqxrpl.js +5 -0
  474. package/dist/chunks/ripgrep-G82m12Ng.js +1 -0
  475. package/dist/chunks/rollback-CVo2gqgR.js +11 -0
  476. package/dist/chunks/runtimeObserver-1EdvvoYw.js +1 -0
  477. package/dist/chunks/runtimeObserver-CX6vepq9.js +10 -0
  478. package/dist/chunks/sandbox-adapter-DzHfW2tH.js +1 -0
  479. package/dist/chunks/sandbox-toggle-N6KgmH2T.js +1 -0
  480. package/dist/chunks/sanitization-CIBpY9KT.js +1 -0
  481. package/dist/chunks/satisfies-B7ZvBUQP.js +1 -0
  482. package/dist/chunks/schemas-Bwt-7U5W.js +40 -0
  483. package/dist/chunks/sdk-Drp69kIx.js +1 -0
  484. package/dist/chunks/sdkHeapDumpMonitor-B9GVkISU.js +1 -0
  485. package/dist/chunks/searchExtraTools-BphNJsl8.js +1 -0
  486. package/dist/chunks/semver-BsItM2Z4.js +1 -0
  487. package/dist/chunks/semver-D3lOjiBN.js +1 -0
  488. package/dist/chunks/sentry-ySzRCXGd.js +1 -0
  489. package/dist/chunks/server-C8nMDji6.js +1 -0
  490. package/dist/chunks/server-XZG51Slr.js +1 -0
  491. package/dist/chunks/serverBanner-D68EBGzH.js +1 -0
  492. package/dist/chunks/serverLog-hv2hc5US.js +1 -0
  493. package/dist/chunks/session-CVoGFb8a.js +2 -0
  494. package/dist/chunks/sessionDataUploader-BaD1Q7v3.js +1 -0
  495. package/dist/chunks/sessionDiscovery-D7g66TX6.js +1 -0
  496. package/dist/chunks/sessionFileAccessHooks-9lPjspRX.js +1 -0
  497. package/dist/chunks/sessionManager-BhOjMNAP.js +1 -0
  498. package/dist/chunks/sessionMemory-BA6cdxqP.js +1 -0
  499. package/dist/chunks/sessionMemory-CtEhIRGF.js +1 -0
  500. package/dist/chunks/sessionMemoryUtils-D_B92ypa.js +1 -0
  501. package/dist/chunks/sessionObserver-CESI-uVZ.js +1 -0
  502. package/dist/chunks/sessionObserver-SpE_eglb.js +20 -0
  503. package/dist/chunks/sessionRestore-DqsqYK4K.js +1 -0
  504. package/dist/chunks/sessionState-Dgky34M4.js +1 -0
  505. package/dist/chunks/sessionStorage-DJb5HKhQ.js +1 -0
  506. package/dist/chunks/sessionStorage-DSMfHTcg.js +1 -0
  507. package/dist/chunks/sessionStoragePortable-DyM_hZnp.js +3 -0
  508. package/dist/chunks/sessionTitle-Bzxk_EW9.js +14 -0
  509. package/dist/chunks/sessionTracing-DR8O0686.js +12 -0
  510. package/dist/chunks/setup-BHNS9sBS.js +9 -0
  511. package/dist/chunks/setup-BafJxZ0F.js +4 -0
  512. package/dist/chunks/setup-MLNNYLi6.js +1 -0
  513. package/dist/chunks/shadowedRuleDetection-Ch9gTxfD.js +1 -0
  514. package/dist/chunks/shellQuote-3s6tV-hK.js +1 -0
  515. package/dist/chunks/sideQuestion-BBn6XIOD.js +20 -0
  516. package/dist/chunks/signal-BTxmab6r.js +1 -0
  517. package/dist/chunks/signin-ChbUAEGq.js +1 -0
  518. package/dist/chunks/sink-B1qICbRh.js +1 -0
  519. package/dist/chunks/sink-yBIcxQf1.js +1 -0
  520. package/dist/chunks/sinks-C7weduDR.js +1 -0
  521. package/dist/chunks/skill-learning-08nEdOJ2.js +5 -0
  522. package/dist/chunks/skillGapStore-CuvWGqFb.js +5 -0
  523. package/dist/chunks/skillGapStore-DmMuDXKO.js +1 -0
  524. package/dist/chunks/skillGenerator-mEMjcmmm.js +8 -0
  525. package/dist/chunks/skillLearning-B3a-8Ys3.js +1 -0
  526. package/dist/chunks/skillLearning-q5T6o0mH.js +1 -0
  527. package/dist/chunks/skillPanel-BuUMhONI.js +28 -0
  528. package/dist/chunks/skillSearchPanel-BUEv7Sm9.js +21 -0
  529. package/dist/chunks/skillUsageTracking-BBTiWOKB.js +1 -0
  530. package/dist/chunks/skills-DvQuQfDW.js +1 -0
  531. package/dist/chunks/slashCommandParsing-BkTC3GRb.js +1 -0
  532. package/dist/chunks/sleep-CC8jykQd.js +1 -0
  533. package/dist/chunks/slowOperations-niPqC54V.js +1 -0
  534. package/dist/chunks/sprites-C5X62Vyh.js +1 -0
  535. package/dist/chunks/src-58uAJYF_.js +6 -0
  536. package/dist/chunks/src-7Y8fx6gl.js +2 -0
  537. package/dist/chunks/src-BuserDTl.js +1 -0
  538. package/dist/chunks/src-CMY4XoRy.js +1 -0
  539. package/dist/chunks/src-CfeAM1FB.js +1 -0
  540. package/dist/chunks/src-CxT2FDXy.js +1 -0
  541. package/dist/chunks/src-CyQf7rVu.js +26 -0
  542. package/dist/chunks/src-DJLbU8sT.js +1 -0
  543. package/dist/chunks/src-DJQlyVK6.js +5 -0
  544. package/dist/chunks/src-DNHWYkls.js +53 -0
  545. package/dist/chunks/src-DU_g0n_Q.js +1 -0
  546. package/dist/chunks/src-DhqzQjMg.js +19 -0
  547. package/dist/chunks/src-Duzv1Znh.js +1 -0
  548. package/dist/chunks/src-OBx6GAig.js +1 -0
  549. package/dist/chunks/src-WjnK2Dbo.js +1 -0
  550. package/dist/chunks/src-hjAMxWFj.js +7 -0
  551. package/dist/chunks/src-lLwoqdC0.js +9 -0
  552. package/dist/chunks/src-yRsWbJp_.js +2 -0
  553. package/dist/chunks/sso-oidc-yfC-A2A2.js +1 -0
  554. package/dist/chunks/startupProfiler-4P7GdVw6.js +3 -0
  555. package/dist/chunks/startupProfiler-CipS0otN.js +1 -0
  556. package/dist/chunks/state-9wSimHaL.js +1 -0
  557. package/dist/chunks/state-BQkyHx88.js +1 -0
  558. package/dist/chunks/state-CEAUTY3A.js +1 -0
  559. package/dist/chunks/state-CUZTq6r0.js +1 -0
  560. package/dist/chunks/state-U0HNbTx8.js +1 -0
  561. package/dist/chunks/staticRender-BB3CisKd.js +1 -0
  562. package/dist/chunks/stats-Dyi2U_mq.js +1 -0
  563. package/dist/chunks/status-CSL-GMou.js +1 -0
  564. package/dist/chunks/statusNoticeHelpers-BaXE951d.js +1 -0
  565. package/dist/chunks/stdio-BuUJYJFs.js +3 -0
  566. package/dist/chunks/stdio-iX0TTmbp.js +1 -0
  567. package/dist/chunks/stickers-2CRSckfH.js +1 -0
  568. package/dist/chunks/store-DdfsZvtr.js +1 -0
  569. package/dist/chunks/stringUtils-U7kMYMJq.js +4 -0
  570. package/dist/chunks/sts-CJmdeT7s.js +1 -0
  571. package/dist/chunks/subprocessEnv-DKTILev5.js +1 -0
  572. package/dist/chunks/subprocessEnv-WjRguKWf.js +1 -0
  573. package/dist/chunks/supports-color-DaytqqjM.js +1 -0
  574. package/dist/chunks/systemPromptSections-BnrxBWdc.js +1 -0
  575. package/dist/chunks/systemPromptSections-Dk6azdAb.js +1 -0
  576. package/dist/chunks/systemTheme-C1GNqIfy.js +1 -0
  577. package/dist/chunks/tag-C4cH016L.js +11 -0
  578. package/dist/chunks/tasks-CEdUW3RQ.js +1 -0
  579. package/dist/chunks/teamHelpers-CTA_CtTT.js +1 -0
  580. package/dist/chunks/teamHelpers-D65qZInv.js +1 -0
  581. package/dist/chunks/teammate-C-FiRloZ.js +1 -0
  582. package/dist/chunks/teammateModeSnapshot-DWRG5-Us.js +1 -0
  583. package/dist/chunks/teammateModeSnapshot-DtgsNj1G.js +1 -0
  584. package/dist/chunks/teleport-C_UgMy0V.js +1 -0
  585. package/dist/chunks/templateJobs-CMbS0tuk.js +12 -0
  586. package/dist/chunks/terminalSetup--jwGVap8.js +33 -0
  587. package/dist/chunks/terminalSetup-zID-wokH.js +1 -0
  588. package/dist/chunks/theme-C6XwTpVy.js +1 -0
  589. package/dist/chunks/thinkback-CVLnmLAT.js +1 -0
  590. package/dist/chunks/thinkback-MeOOO7gf.js +1 -0
  591. package/dist/chunks/thinkback-play-D7G260F4.js +1 -0
  592. package/dist/chunks/tmux-DtYJuTWh.js +1 -0
  593. package/dist/chunks/toolEventObserver-BtC9xDYY.js +1 -0
  594. package/dist/chunks/toolEventObserver-MfsHAt8h.js +1 -0
  595. package/dist/chunks/toolPool-CEi_2xIH.js +1 -0
  596. package/dist/chunks/toolPool-CdYJcCnc.js +1 -0
  597. package/dist/chunks/trustedDevice-CjQTGAa4.js +1 -0
  598. package/dist/chunks/trustedDevice-DADcxAAs.js +1 -0
  599. package/dist/chunks/tui-B8Ijq4Pk.js +6 -0
  600. package/dist/chunks/turndown.es-T-Xe93nc.js +69 -0
  601. package/dist/chunks/types-BVelRhgb.js +17 -0
  602. package/dist/chunks/types-Bqp3meR4.js +1 -0
  603. package/dist/chunks/types-CNmINIu3.js +1 -0
  604. package/dist/chunks/types-DgzOOCDl.js +3 -0
  605. package/dist/chunks/udsClient-ClY_0CKr.js +1 -0
  606. package/dist/chunks/ultrareviewCommand-CqvHj9Io.js +3 -0
  607. package/dist/chunks/undercover-CVCVOSrs.js +1 -0
  608. package/dist/chunks/undercover-CbxiJO2b.js +31 -0
  609. package/dist/chunks/up-CBJhVVbd.js +12 -0
  610. package/dist/chunks/updateCCB-DPPpquAw.js +11 -0
  611. package/dist/chunks/upgrade-DaaHOvft.js +1 -0
  612. package/dist/chunks/upgrade-k7ZvAWZ0.js +1 -0
  613. package/dist/chunks/upload-CEDxwMa1.js +1 -0
  614. package/dist/chunks/upstreamproxy-BtGJ2LRi.js +11 -0
  615. package/dist/chunks/usage-CsUSu4fb.js +1 -0
  616. package/dist/chunks/usage-oABvixCs.js +1 -0
  617. package/dist/chunks/useExitOnCtrlCDWithKeybindings-CBce_-hb.js +1 -0
  618. package/dist/chunks/useExitOnCtrlCDWithKeybindings-CLYjTZXb.js +1 -0
  619. package/dist/chunks/useKeybinding-DAQL_dB_.js +1 -0
  620. package/dist/chunks/useMainLoopModel-QC_H3esG.js +1 -0
  621. package/dist/chunks/useManageMCPConnections-bf-VfJGD.js +1 -0
  622. package/dist/chunks/useManagePlugins-CXdYUpit.js +1 -0
  623. package/dist/chunks/useMergedTools-DERzhQOJ.js +1 -0
  624. package/dist/chunks/useSearchInput-nqhdILI2.js +1 -0
  625. package/dist/chunks/useTerminalSize-DzV4aaTi.js +1 -0
  626. package/dist/chunks/useVoice-CO69xtWC.js +1 -0
  627. package/dist/chunks/util-C8wqPqv0.js +1 -0
  628. package/dist/chunks/utils-CDFsSXHr.js +1 -0
  629. package/dist/chunks/utils-ZO5TryVH.js +1 -0
  630. package/dist/chunks/v4-DLhvDPkt.js +1 -0
  631. package/dist/chunks/validatePlugin-C4cd71Yz.js +1 -0
  632. package/dist/chunks/vertex-sdk-CC3U26o7.js +9 -0
  633. package/dist/chunks/vim-BNiQx5Vf.js +1 -0
  634. package/dist/chunks/voice-BCbnJzYL.js +8 -0
  635. package/dist/chunks/voice-BJyz9KZO.js +8 -0
  636. package/dist/chunks/voice-CP2ULpju.js +2 -0
  637. package/dist/chunks/voiceModeEnabled-C-pa8B3Q.js +1 -0
  638. package/dist/chunks/voiceModeEnabled-CMtRN2pa.js +1 -0
  639. package/dist/chunks/voiceStreamSTT-31b2u0rj.js +1 -0
  640. package/dist/chunks/voiceStreamSTT-Fkhm6Ftg.js +1 -0
  641. package/dist/chunks/voiceStreamSTT-sI-hg-aP.js +1 -0
  642. package/dist/chunks/web-tools-CLmlPgLk.js +1 -0
  643. package/dist/chunks/which-C0ex-06E.js +1 -0
  644. package/dist/chunks/windowsPaths-C5TNvKYu.js +1 -0
  645. package/dist/chunks/windowsPaths-Kue_7s52.js +1 -0
  646. package/dist/chunks/workSecret-Dh5Ayceu.js +1 -0
  647. package/dist/chunks/workerRegistry-B5iWYqpK.js +1 -0
  648. package/dist/chunks/worktree-BypJA0GB.js +1 -0
  649. package/dist/chunks/worktreeModeEnabled-DPTdK3JV.js +1 -0
  650. package/dist/chunks/worktreeModeEnabled-Dtrcn7eD.js +1 -0
  651. package/dist/chunks/wrapper-BDPb4PTV.js +6 -0
  652. package/dist/chunks/wrapper-DRTs77RK.js +1 -0
  653. package/dist/chunks/xdg-BaVL-FHd.js +1 -0
  654. package/dist/chunks/xml-E8VMPwdJ.js +1 -0
  655. package/dist/chunks/zod-B_P2Eo_D.js +1 -0
  656. package/dist/cli-bun.js +2 -0
  657. package/dist/cli-node.js +2 -0
  658. package/dist/cli.js +2 -0
  659. package/dist/vendor/audio-capture/arm64-darwin/audio-capture.node +0 -0
  660. package/dist/vendor/audio-capture/arm64-linux/audio-capture.node +0 -0
  661. package/dist/vendor/audio-capture/arm64-win32/audio-capture.node +0 -0
  662. package/dist/vendor/audio-capture/x64-darwin/audio-capture.node +0 -0
  663. package/dist/vendor/audio-capture/x64-linux/audio-capture.node +0 -0
  664. package/dist/vendor/audio-capture/x64-win32/audio-capture.node +0 -0
  665. package/dist/vendor/ripgrep/x64-win32/rg.exe +0 -0
  666. package/package.json +233 -0
  667. package/scripts/postinstall.cjs +389 -0
  668. package/scripts/run-parallel.mjs +10 -0
  669. package/scripts/setup-chrome-mcp.mjs +70 -0
@@ -0,0 +1,5 @@
1
+ import{n as e}from"./chunk-DR8-3Aex.js";import{n as t,s as n}from"./envUtils-CFG7IQID.js";import{c as r,d as i,f as a}from"./skillGenerator-mEMjcmmm.js";import{d as o,g as s,h as c,l,m as u,p as d,x as f}from"./runtimeObserver-CX6vepq9.js";import{o as p,r as m}from"./observationStore-DVBxrSdI.js";import{o as h,s as g}from"./projectContext-B21hXj9q.js";import{t as _}from"./sessionObserver-SpE_eglb.js";import{i as v,r as y}from"./skillGapStore-CuvWGqFb.js";import{t as b}from"./skillLearning-B3a-8Ys3.js";import{join as x}from"node:path";function S(e,t){let n=e.find(e=>e.startsWith(`${t}=`));if(n)return n.slice(t.length+1)||void 0;let r=e.indexOf(t);if(r>=0&&e[r+1]&&!e[r+1].startsWith(`--`))return e[r+1]}function C(e,t,n){let r=S(e,t);if(r===void 0)return n;let i=Number(r);return Number.isFinite(i)?i:n}var w;e((()=>{n(),b(),w=async e=>{let n=e.trim().split(/\s+/).filter(Boolean),b=n[0]??`status`,w=g(process.cwd()),T=process.env.CLAUDE_SKILL_LEARNING_HOME,E={project:w,rootDir:T};switch(b){case`status`:{let[e,t]=await Promise.all([p(E),d(E)]);return{type:`text`,value:[`Skill Learning status for ${w.projectName} (${w.projectId})`,`Observations: ${e.length}`,`Instincts: ${t.length}`].join(`
2
+ `)}}case`ingest`:{let e=n[1];if(!e)return{type:`text`,value:`Usage: /skill-learning ingest <transcript.jsonl> [--min-session-length=<n>]`};let t=C(n,`--min-session-length`,10),r=await m(e,E);if(r.length<t)return{type:`text`,value:`Session too short for learning (${r.length} < min=${t}). Skipping instinct extraction.`};let i=_(r),a=[];for(let e of i)a.push(await s(e,E));return{type:`text`,value:`Ingested ${r.length} observations and saved ${a.length} instincts.`}}case`evolve`:{let e=n.includes(`--generate`),o=f(await d(E),{cwd:process.cwd()}),s=[];if(e)for(let e of o){let n=a(e,await i(e,[x(process.cwd(),`.claude`,`skills`),x(t(),`skills`)])),o=await r(n);s.push(`${n.type}: ${o.activePath??o.archivedPath??o.deletedPath??`no active write`}`)}return{type:`text`,value:e?`Generated ${s.length} learned skill(s):\n${s.join(`
3
+ `)}`:`Found ${o.length} skill candidate(s). Use --generate to write them.`}}case`export`:{let e=n[1]??`skill-learning-instincts.json`,t=S(n,`--scope`),r=C(n,`--min-conf`,void 0),i=S(n,`--domain`),a=e=>e.filter(e=>!(t&&e.scope!==t||r!==void 0&&e.confidence<r||i&&e.domain!==i)),s=await d(E),c=a(s);if(c.length!==s.length){await o(e,E);let{writeFile:t}=await import(`node:fs/promises`);await t(e,`${JSON.stringify(c,null,2)}\n`)}else await o(e,E);let l=[`Exported ${c.length} instincts to ${e}`];if(t||r!==void 0||i){let e=[];t&&e.push(`scope=${t}`),r!==void 0&&e.push(`min-conf=${r}`),i&&e.push(`domain=${i}`),l.push(`(filters: ${e.join(`, `)})`)}return{type:`text`,value:l.join(` `)}}case`import`:{let e=n[1];if(!e)return{type:`text`,value:`Usage: /skill-learning import <instincts.json> [--scope=<scope>] [--min-conf=<n>] [--domain=<d>] [--dry-run]`};let t=S(n,`--scope`),r=C(n,`--min-conf`,void 0),i=S(n,`--domain`),a=n.includes(`--dry-run`),{readFile:o}=await import(`node:fs/promises`),c=JSON.parse(await o(e,`utf8`)),l=c.filter(e=>!(t&&e.scope!==t||r!==void 0&&e.confidence<r||i&&e.domain!==i));if(a)return{type:`text`,value:`Dry run: would import ${l.length}/${c.length} instincts.`};for(let e of l)await s(e,E);return{type:`text`,value:`Imported ${l.length}/${c.length} instincts.`}}case`prune`:{let e=n.indexOf(`--max-age`);return{type:`text`,value:`Pruned ${(await u(e>=0&&n[e+1]?Number(n[e+1]):30,E)).length} pending instincts.`}}case`promote`:{let e=n[1];if(!e){let e=await v(w,T),t=l(await d(E));return{type:`text`,value:[`Promotion candidates for ${w.projectName} (${w.projectId}):`,`Pending gaps: ${e.filter(e=>e.status===`pending`).length}`,`Global-eligible instincts (>=2 projects, avg confidence >=0.8): ${t.length}`,``,`Usage:`,` /skill-learning promote gap <gap-key> # pending gap -> draft`,` /skill-learning promote instinct <instinct-id> # project instinct -> global`].join(`
4
+ `)}}if(e===`gap`){let e=n[2];if(!e)return{type:`text`,value:`Usage: /skill-learning promote gap <gap-key>`};let t=await y(e,w,T);return t?{type:`text`,value:`Promoted gap ${e} to status=${t.status} (draft=${t.draft?.skillPath??`none`}).`}:{type:`text`,value:`No gap found for key "${e}".`}}if(e===`instinct`){let e=n[2];if(!e)return{type:`text`,value:`Usage: /skill-learning promote instinct <instinct-id>`};let t=(await d(E)).find(t=>t.id===e);return t?t.scope===`global`?{type:`text`,value:`Instinct ${e} is already global.`}:(await c({...t,scope:`global`},{scope:`global`,rootDir:T}),{type:`text`,value:`Promoted instinct ${e} to global scope.`}):{type:`text`,value:`No project-scoped instinct found for id "${e}".`}}return{type:`text`,value:`Usage: /skill-learning promote [gap <gap-key>|instinct <instinct-id>]`}}case`projects`:{let e=h();if(e.length===0)return{type:`text`,value:`No known project scopes yet.`};let t=[`Known project scopes:`];for(let n of e){let e={project:n,rootDir:T},[r,i]=await Promise.all([d(e),p(e)]);t.push(`- ${n.projectName} (${n.projectId}) — instincts: ${r.length}, observations: ${i.length}, lastSeen: ${n.lastSeenAt}`)}return{type:`text`,value:t.join(`
5
+ `)}}default:return{type:`text`,value:`Usage: /skill-learning [status|ingest|evolve|export|import|prune|promote|projects]`}}}}))();export{w as call};
@@ -0,0 +1,5 @@
1
+ import{n as e}from"./chunk-DR8-3Aex.js";import{i as t,r as n}from"./instinctParser-DxKdI3JC.js";import{i as r,o as i,s as a}from"./skillGenerator-mEMjcmmm.js";import{a as o,n as s,s as c}from"./projectContext-B21hXj9q.js";import{dirname as l,join as u}from"node:path";import{existsSync as d}from"node:fs";import{createHash as f}from"node:crypto";import{mkdir as p,readFile as m,rename as h,writeFile as g}from"node:fs/promises";async function _(e){let t=e.prompt.trim();if(!t)throw Error(`Cannot record an empty skill gap`);let n=e.project??c(e.cwd),r=await A(n,e.rootDir),i=F(t),a=new Date().toISOString(),o=r.gaps[i],s={key:i,prompt:t,count:(o?.count??0)+1,draftHits:o?.draftHits??0,draftHitSessions:o?.draftHitSessions??[],status:o?.status??`pending`,sessionId:e.sessionId??`unknown-session`,cwd:e.cwd??n.cwd,projectId:n.projectId,projectName:n.projectName,recommendations:(e.recommendations??[]).slice(0,5).map(e=>({name:e.name,description:e.description,score:e.score})),createdAt:o?.createdAt??a,updatedAt:a,draft:o?.draft,active:o?.active};return s.status===`rejected`?(r.gaps[i]=s,await N(n,r,e.rootDir),s):(!s.draft&&C(s)&&(s.draft=await T(s,n),s.status=`draft`,await z()),s.draft&&!s.active&&w(s)&&(s.active=await E(s,n),s.status=`active`,await z()),r.gaps[i]=s,await N(n,r,e.rootDir),s)}async function v(e=c(),t){let n=await A(e,t);return Object.values(n.gaps).sort((e,t)=>e.key.localeCompare(t.key))}async function y(e,t=c(),n){let r=await A(t,n);for(let t of Object.values(r.gaps))if(t.draft?.skillPath===e)return t.key}async function b(e,t=c(),n,r=`unknown-session`){let i=await A(t,n),a=i.gaps[e];if(!a||!a.draft||a.active)return a;let o=a.draftHitSessions??[];if(o.includes(r))return a;let s=new Date().toISOString(),l={...a,draftHits:a.draftHits+1,draftHitSessions:[...o,r],updatedAt:s};return w(l)&&(l.active=await E(l,t),l.status=`active`,await z()),i.gaps[e]=l,await N(t,i,n),l}async function x(e,t=c(),n){let r=await A(t,n),i=r.gaps[e];if(!i)return;if(i.status===`rejected`||i.draft)return i;let a={...i,draft:await T(i,t),status:`draft`,updatedAt:new Date().toISOString()};return r.gaps[e]=a,await N(t,r,n),await z(),a}async function S(e,t=c(),n){let r=await A(t,n),i=r.gaps[e];if(!i)return;let a={...i,status:`rejected`,updatedAt:new Date().toISOString()};return r.gaps[e]=a,await N(t,r,n),a}function C(e){return e.count>=B}function w(e){return e.draft?e.count>=V||e.draftHits>=H:!1}async function T(e,t){let n=D(e,`pending`),i=u(t.projectRoot??t.cwd,`.claude`,`skills`,`.drafts`),o=r([n],{cwd:t.projectRoot??t.cwd,outputRoot:i,scope:`project`,name:`draft-${I(e.prompt)}`,description:`Draft learned skill candidate. Promote after repeated evidence or explicit user correction.`}),s=u(o.outputPath,`SKILL.md`);return d(s)||await a({...o,content:o.content+`
2
+ ## Promotion Rule
3
+
4
+ Do not move this draft into active skills until the same gap repeats or the user explicitly confirms this should become reusable.
5
+ `}),{type:`draft`,name:o.name,skillPath:s}}async function E(e,t){let n=r([D(e,`active`)],{cwd:t.projectRoot??t.cwd,scope:`project`,name:I(e.prompt),description:O(e.prompt)}),i=u(n.outputPath,`SKILL.md`);return d(i)||await a(n),{type:`active`,name:n.name,skillPath:i}}function D(e,t){return n({trigger:`When the user asks for ${L(e.prompt,120)}`,action:O(e.prompt),confidence:t===`active`?.82:.55,domain:k(e.prompt),source:`session-observation`,scope:`project`,projectId:e.projectId,projectName:e.projectName,evidence:[`Skill gap prompt: ${L(e.prompt,180)}`,`No high-confidence active skill was auto-loaded.`,`Observed ${e.count} time(s).`],status:t})}function O(e){return/feature\s*\(|feature flag|flag_name|stub|no-op|noop|最小实现/i.test(e)?`Audit feature flags by scanning feature() call sites, excluding generated/dependency noise, classifying each candidate as stub, shell, MVP, or thin-toggle, and writing an evidence-backed document.`:/skill|技能|学习|进化|evolve|learning/i.test(e)?`Run skill discovery first; auto-load only high-confidence matching skills; record a skill gap when none match; promote repeated or corrected gaps into learned skills.`:/test|测试|stub|调用链|参数/i.test(e)?`Infer tests from existing files, parameters, exports, and call chains before simplifying mocks or inventing behavior.`:`Reuse the workflow learned from this prompt: ${L(e,180)}.`}function k(e){let t=e.toLowerCase();return/test|测试|stub|fixture|断言/.test(t)?`testing`:/error|bug|fix|失败|错误|修复|debug/.test(t)?`debugging`:/security|安全|漏洞|secret|token/.test(t)?`security`:/git|commit|branch|pr\b/.test(t)?`git`:/style|lint|format|命名|规范/.test(t)?`code-style`:`workflow`}async function A(e,t){let n=P(e,t),r;try{r=await m(n,`utf8`)}catch(e){if(e.code===`ENOENT`)return{version:1,gaps:{}};throw e}try{return j(JSON.parse(r))}catch{let e=`${n}.corrupt-${Date.now()}`;try{await g(e,r,`utf8`)}catch{}return{version:1,gaps:{}}}}function j(e){let t={};for(let[n,r]of Object.entries(e.gaps??{})){let e=r,i=typeof e.draftHits==`number`&&Number.isFinite(e.draftHits)?e.draftHits:0,a=typeof e.count==`number`?e.count:1,o=M(e.status),s=!!e.draft,c=!!e.active,l=o;l===`draft`&&a<B&&!s&&(l=`pending`),l===`active`&&!c&&(l=s?`draft`:`pending`);let u=Array.isArray(e.draftHitSessions)?e.draftHitSessions.filter(e=>typeof e==`string`):[];t[n]={...r,count:a,draftHits:i,draftHitSessions:u,status:l}}return{version:1,gaps:t}}function M(e){return e===`pending`||e===`draft`||e===`active`||e===`rejected`?e:`pending`}async function N(e,t,n){let r=P(e,n);await p(l(r),{recursive:!0});let i=`${r}.tmp-${process.pid}-${Date.now()}`;await g(i,`${JSON.stringify(t,null,2)}\n`,`utf8`),await h(i,r)}function P(e,t){return u(t?e.projectId===`global`?u(t,`global`):u(t,`projects`,e.projectId):s(e.projectId),`skill-gaps.json`)}function F(e){return`${I(e)}-${R(e).slice(0,8)}`}function I(e){let t=e.replaceAll(`技能`,` skill `).replaceAll(`学习`,` learning `).replaceAll(`进化`,` evolution `).replaceAll(`测试`,` testing `).replaceAll(`最小实现`,` minimal implementation `).toLowerCase(),n=new Set([`the`,`and`,`for`,`with`,`this`,`that`,`user`,`about`,`feature`,`flag`,`name`]);return((t.match(/[a-z0-9][a-z0-9_-]{2,}/g)??[]).filter(e=>!n.has(e)).slice(0,5).join(`-`)||`learned-gap`).slice(0,54).replace(/-+$/g,``)}function L(e,t){return e.replace(/\s+/g,` `).trim().slice(0,t)}function R(e){return f(`sha1`).update(e).digest(`hex`)}async function z(){try{let{clearCommandsCache:e}=await import(`./commands-DFp48zwy.js`);e()}catch{}}var B,V,H,U=e((()=>{t(),o(),i(),B=2,V=4,H=2}));export{b as a,w as c,v as i,C as l,U as n,_ as o,x as r,S as s,y as t};
@@ -0,0 +1 @@
1
+ import{a as e,c as t,i as n,l as r,n as i,o as a,r as o,s,t as c}from"./skillGapStore-CuvWGqFb.js";i();export{c as findGapKeyByDraftPath,o as promoteGapToDraft,n as readSkillGaps,e as recordDraftHit,a as recordSkillGap,s as rejectSkillGap,t as shouldPromoteToActive,r as shouldPromoteToDraft};
@@ -0,0 +1,8 @@
1
+ import{n as e}from"./chunk-DR8-3Aex.js";import{n as t,s as n}from"./envUtils-CFG7IQID.js";import{o as r,t as i}from"./localSearch-inDahM8I.js";import{l as a,u as o}from"./instinctParser-DxKdI3JC.js";import{basename as s,dirname as c,join as l}from"node:path";import{existsSync as u}from"node:fs";import{mkdir as d,readFile as f,readdir as p,rename as ee,rm as m,writeFile as h}from"node:fs/promises";function g(e){return e.length===0?!1:e.reduce((e,t)=>e+t.confidence,0)/e.length>=a().minConfidence}function _(e){let t=b[e[0]?.domain??`project`],n=new Set;for(let t of e){for(let e of`${t.trigger} ${t.action}`.toLowerCase().split(/[^a-z0-9]+/))if(te(e)&&n.add(e),n.size>=5)break;if(n.size>=5)break}let r=v([t,...n].join(`-`));return y(r)?`${t}-learned-pattern`:r}function v(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-|-$/g,``).slice(0,64).replace(/-$/g,``)||`learned-skill`}function y(e){return x.has(e)}function te(e){return e.length>2&&![`when`,`with`,`this`,`that`,`user`,`project`,`prefer`,`avoid`,`use`,`using`,`the`,`and`,`for`].includes(e)}var b,x,S=e((()=>{o(),b={workflow:`workflow`,testing:`testing`,debugging:`debugging`,"code-style":`style`,security:`security`,git:`git`,project:`project`},x=new Set([`learned-skill`,`better-skill`,`new-skill`,`project-skill`,`workflow-skill`])}));async function C(e,t,n){let r=n.length>0&&typeof n[0]==`string`?await w(e,n):n,i=L(`${t.name} ${t.description} ${t.content}`);return r.map(e=>({skill:e,score:R(i,L(`${e.name} ${e.description} ${e.content}`))})).filter(e=>e.score>=.18).sort((e,t)=>t.score-e.score).map(e=>e.skill)}async function ne(e,t){return C(`skill`,e,t)}async function w(e,t){if(e===`skill`)return D(t);let n=[];for(let e of t)u(e)&&await P(e,n);return n}function T(e,t,n={}){let r=t.find(e=>j(e));if(n.allowHardDelete&&r)return{type:`delete`,targetSkill:r,reason:`Existing skill is low quality, unreferenced, and safe to delete.`,confirmed:!0};let i=t[0];if(!i)return{type:`create`,draft:e,reason:`No overlapping active skill found.`};let a=R(L(`${e.name} ${e.description} ${e.content}`),L(`${i.name} ${i.description} ${i.content}`));return a>=.72&&e.confidence>=.75&&ae(e,i)?{type:`replace`,targetSkill:i,draft:e,reason:`New learned skill has high overlap (${a.toFixed(2)}) and higher confidence.`}:a>=.35?{type:`merge`,targetSkill:i,patch:ie(e),reason:`Existing skill overlaps with the learned pattern (${a.toFixed(2)}).`}:{type:`create`,draft:e,reason:`Overlap is too low to merge.`}}async function E(e,t={}){switch(e.type){case`create`:return{activePath:await W(e.draft)};case`merge`:return I(e.targetSkill)?{activePath:await re(e.targetSkill,e.patch)}:(process.stderr.write(`[skill-learning] skip user-authored skill: ${e.targetSkill.path}\n`),{});case`replace`:{if(!I(e.targetSkill))return process.stderr.write(`[skill-learning] skip user-authored skill: ${e.targetSkill.path}\n`),{};let n=e.draft.outputPath;if(e.hardDelete){let{deletedPath:r,manifestPath:i,tombstonePath:a}=await k(e.targetSkill,e.reason,{newSkill:e.draft.name,newPath:n},{...t,allowHardDelete:!0});return{activePath:await W(e.draft),deletedPath:r,manifestPath:i,tombstonePath:a}}let{archivedPath:r,manifestPath:i}=await O(e.targetSkill,e.reason,{newSkill:e.draft.name,newPath:n},t);return{activePath:await W(e.draft),archivedPath:r,manifestPath:i}}case`archive`:return await O(e.targetSkill,e.reason,void 0,t);case`delete`:return await k(e.targetSkill,e.reason,void 0,{...t,allowHardDelete:t.allowHardDelete&&e.confirmed!==!1})}}async function D(e){let t=[];for(let n of e)u(n)&&await N(n,t);return t}async function O(e,t,n,r={}){let a=c(e.path),o=r.archiveRoot??l(c(a),`.archive`),u=l(o,`${s(a)}-${M(r.now)}`);await d(o,{recursive:!0}),await ee(a,u);let f=await A(r.manifestRoot??u,{oldSkill:e.name,oldPath:e.path,newSkill:n?.newSkill,newPath:n?.newPath,action:`archive`,reason:t,replacedAt:(r.now??new Date).toISOString(),recoverable:!0});return i(),{archivedPath:u,manifestPath:f}}async function k(e,t,n,r={}){if(!r.allowHardDelete)throw Error(`Hard delete requires allowHardDelete=true`);let a=c(e.path),o=u(e.path)?await f(e.path,`utf8`):``,s=r.manifestRoot??l(c(a),`.tombstones`),d=await A(s,{oldSkill:e.name,oldPath:e.path,newSkill:n?.newSkill,newPath:n?.newPath,action:`delete`,reason:t,replacedAt:(r.now??new Date).toISOString(),recoverable:!1}),p=l(s,`${e.name}-${M(r.now)}.tombstone.json`);return await h(p,`${JSON.stringify({deletedSkill:e.name,oldPath:e.path,content:o},null,2)}\n`,`utf8`),await m(a,{recursive:!0,force:!0}),i(),{deletedPath:e.path,manifestPath:d,tombstonePath:p}}async function A(e,t){await d(e,{recursive:!0});let n=l(e,`replacement-manifest.json`);return await h(n,`${JSON.stringify(t,null,2)}\n`,`utf8`),n}async function re(e,t){let n=l(c(e.path),`learned-skill.patch.md`);return await h(n,t,`utf8`),i(),n}function ie(e){return[`# Learned Skill Merge Patch`,``,`Target learned skill: ${e.name}`,`Confidence: ${e.confidence}`,``,`## Suggested additions`,``,e.content].join(`
2
+ `)}function ae(e,t){if(t.status===`superseded`||t.status===`archived`)return!0;let n=e.confidence-(t.confidence??.5),r=e.content.length-t.content.length;return n>=.15||r>160}function j(e){return e.safeToDelete===!0&&(e.referencedBy?.length??0)===0&&e.quality===`low`}function M(e=new Date){return e.toISOString().replace(/[:.]/g,`-`)}async function N(e,t){let n=await p(e,{withFileTypes:!0});for(let r of n){let n=l(e,r.name);if(r.isDirectory()){if(r.name===`.archive`)continue;await N(n,t);continue}if(r.isFile()&&r.name===`SKILL.md`){let e=await f(n,`utf8`);t.push({name:F(e,`name`)??s(c(n)),description:F(e,`description`)??``,path:n,content:e})}}}async function P(e,t){let n=await p(e,{withFileTypes:!0});for(let r of n){let n=l(e,r.name);if(r.isDirectory()){if(r.name===`.archive`)continue;await P(n,t);continue}if(r.isFile()&&r.name.endsWith(`.md`)){let e=await f(n,`utf8`);t.push({name:F(e,`name`)??r.name.replace(/\.md$/,``),description:F(e,`description`)??``,path:n,content:e})}}}function F(e,t){let n=e.match(/^---\r?\n([\s\S]*?)\r?\n---/);if(n)return n[1].match(RegExp(`^${t}:\\s*"?([^"\\n]+)"?`,`m`))?.[1]?.trim()}function I(e){return F(e.content,`origin`)===`skill-learning`}function L(e){return new Set(e.toLowerCase().split(/[^a-z0-9]+/).filter(e=>e.length>2))}function R(e,t){if(e.size===0||t.size===0)return 0;let n=0;for(let r of e)t.has(r)&&n++;return n/Math.min(e.size,t.size)}function z(e,t){return R(L(`${e.name} ${e.description} ${e.content}`),L(`${t.name} ${t.description} ${t.content}`))}var B=e((()=>{r(),$()}));function V(e,t){if(e.length===0)throw Error(`Cannot generate a skill draft without instincts`);let n=t?.scope??e[0]?.scope??`project`,r=t?.name?v(t.name):K(e),i=e.reduce((e,t)=>e+t.confidence,0)/e.length,a=t?.description??q(e),o=G(r,n,t),s=J({name:r,description:a,confidence:i,instincts:e});return{name:r,description:a,scope:n,sourceInstinctIds:e.map(e=>e.id),confidence:Number(i.toFixed(2)),content:s,outputPath:o}}async function H(e,t,n){let r=V(e,t),i=await C(`skill`,r,n);for(let t of i){let n=z(r,t);if(n>=.8)return{action:`append-evidence`,target:t,overlap:n,appendedPath:await U(t,e)}}return{action:`create`,draft:r}}async function U(e,t){let n=await f(e.path,`utf8`).catch(()=>e.content);if(Buffer.byteLength(n,`utf8`)>=Q)return e.path;let r=t.flatMap(e=>e.evidence.map(e=>`- ${e}`)),a=r.slice(0,X);a.length<r.length&&a.push(`- [... ${r.length-a.length} more evidence entries omitted]`);let o=[``,`## Learned evidence (${new Date().toISOString()})`,``,...a,``].join(`
3
+ `),s=n.endsWith(`
4
+ `)?n+o:`${n}\n${o}`,c=Buffer.byteLength(s,`utf8`)>Q?s.slice(0,Q):s;return await h(e.path,c,`utf8`),i(),e.path}async function W(e){await d(e.outputPath,{recursive:!0});let t=l(e.outputPath,`SKILL.md`);await h(t,e.content,`utf8`),i();try{let{clearCommandsCache:e}=await import(`./commands-DFp48zwy.js`);e()}catch{}return t}function G(e,n,r){return r?.outputRoot?l(r.outputRoot,e):n===`project`?l(r?.cwd??process.cwd(),`.claude`,`skills`,e):l(r?.globalSkillsDir??l(t(),`skills`),e)}function K(e){return _(e)}function q(e){let t=(e[0]?.action??`Apply a learned project pattern`).replace(/\s+/g,` `).slice(0,120);return t.length>0?t:`Apply learned project patterns`}function J(e){let{name:t,description:n,confidence:r,instincts:i}=e;return[`---`,`name: ${t}`,`description: ${JSON.stringify(n)}`,`origin: skill-learning`,`confidence: ${Number(r.toFixed(2))}`,`evolved_from: [${i.map(e=>JSON.stringify(e.id)).join(`, `)}]`,`---`,``,`# ${oe(t)}`,``,`## Trigger`,``,i.map(e=>`- ${e.trigger}`).join(`
5
+ `),``,`## Action`,``,i.map(e=>`- ${e.action}`).join(`
6
+ `),``,`## Evidence`,``,i.flatMap(e=>e.evidence.map(e=>`- ${e}`)).slice(0,Z).join(`
7
+ `),``].join(`
8
+ `)}function oe(e){return e.split(`-`).filter(Boolean).map(e=>e[0]?.toUpperCase()+e.slice(1)).join(` `)}var Y,X,Z,Q,$=e((()=>{n(),r(),S(),B(),Y=.8,X=20,Z=20,Q=5e4}));export{g as C,v as S,z as _,G as a,S as b,E as c,ne as d,T as f,D as g,w as h,V as i,O as l,B as m,U as n,$ as o,k as p,H as r,W as s,Y as t,C as u,A as v,y as x,_ as y};
@@ -0,0 +1 @@
1
+ import{n as e}from"./chunk-DR8-3Aex.js";import{t}from"./featureCheck-DKigAPal.js";import{b as n,m as r,o as i}from"./skillGenerator-mEMjcmmm.js";import{S as a,T as o,f as s,i as c,k as l,u}from"./runtimeObserver-CX6vepq9.js";import{i as d}from"./observationStore-DVBxrSdI.js";import{a as f}from"./projectContext-B21hXj9q.js";import{a as p,c as m,d as h,i as g}from"./sessionObserver-SpE_eglb.js";import{n as _}from"./toolEventObserver-BtC9xDYY.js";import{n as v}from"./skillGapStore-CuvWGqFb.js";var y=e((()=>{t(),a(),n(),s(),d(),u(),f(),c(),h(),p(),l(),o(),_(),g(),v(),i(),r(),m()}));export{y as t};
@@ -0,0 +1 @@
1
+ import"./featureCheck-DKigAPal.js";import"./instinctParser-DxKdI3JC.js";import"./skillGenerator-mEMjcmmm.js";import{p as e}from"./runtimeObserver-CX6vepq9.js";import{o as t}from"./observationStore-DVBxrSdI.js";import{s as n}from"./projectContext-B21hXj9q.js";import"./sessionObserver-SpE_eglb.js";import"./toolEventObserver-BtC9xDYY.js";import"./skillGapStore-CuvWGqFb.js";import{t as r}from"./skillLearning-B3a-8Ys3.js";r();export{e as loadInstincts,t as readObservations,n as resolveProjectContext};
@@ -0,0 +1,28 @@
1
+ import{n as e,o as t}from"./chunk-DR8-3Aex.js";import{Rn as n,b as r,f as i,t as a,x as o,xt as s}from"./src-DNHWYkls.js";import{t as c}from"./jsx-runtime-BTgGEFjL.js";import{BT as l,UT as u}from"./loadAgentsDir-Bz0FfcVt.js";import{r as d,t as f}from"./featureCheck-DKigAPal.js";async function p(){let{readObservations:e,loadInstincts:t,resolveProjectContext:n}=await import(`./skillLearning-q5T6o0mH.js`),r=n(process.cwd()),[i,a]=await Promise.all([e({project:r}),t({project:r})]);return[`Skill Learning status for ${r.projectName} (${r.projectId})`,`Observations: ${i.length}`,`Instincts: ${a.length}`,``,`Skill Learning: ${d()?`enabled`:`disabled`}`].join(`
2
+ `)}async function m(){let e=[];d()?e.push(`Skill Learning: already enabled`):(process.env.SKILL_LEARNING_ENABLED=`1`,e.push(`Skill Learning: enabled (SKILL_LEARNING_ENABLED=1)`));try{let{initSkillLearning:t}=await import(`./runtimeObserver-1EdvvoYw.js`);t(),e.push(`Runtime observer: initialized`)}catch{e.push(`Runtime observer: init skipped (not available)`)}return e.join(`
3
+ `)}async function h(){let e=[];return d()?(process.env.SKILL_LEARNING_ENABLED=`0`,process.env.CLAUDE_SKILL_LEARNING_DISABLE=`1`,e.push(`Skill Learning: disabled (SKILL_LEARNING_ENABLED=0)`)):e.push(`Skill Learning: already disabled`),e.join(`
4
+ `)}function g({onDone:e}){u(`skill-panel`);let[t,n]=(0,v.useState)(0),a=(0,v.useMemo)(()=>[{label:`Status`,description:`Show skill learning status for current project`,run:p},{label:`Start`,description:`Enable skill learning for this session`,run:m},{label:`Stop`,description:`Disable skill learning for this session`,run:h},{label:`About`,description:`Detailed description of skill learning features`,run:()=>Promise.resolve(x)}],[]),c=()=>{let n=a[t];n&&n.run().then(t=>{e(t,{display:`system`})})};return s((e,t)=>{if(t.upArrow){n(e=>Math.max(0,e-1));return}if(t.downArrow){n(e=>Math.min(a.length-1,e+1));return}t.return&&c()}),(0,y.jsx)(i,{title:`Skill Learning`,subtitle:`${a.length} actions`,onCancel:()=>e(`Skill panel dismissed`,{display:`system`}),color:`background`,hideInputGuide:!0,children:(0,y.jsxs)(o,{flexDirection:`column`,children:[a.map((e,n)=>(0,y.jsxs)(o,{flexDirection:`row`,children:[(0,y.jsx)(r,{children:`${n===t?`›`:` `} ${e.label}`.padEnd(b)}),(0,y.jsx)(r,{dimColor:!0,children:e.description})]},e.label)),(0,y.jsx)(o,{marginTop:1,children:(0,y.jsx)(r,{dimColor:!0,children:`↑/↓ select · Enter run · Esc close`})})]})})}async function _(e,t,n){let r=n?.trim()??``;if(r===`start`)return e(await m(),{display:`system`}),null;if(r===`stop`)return e(await h(),{display:`system`}),null;if(r===`about`)return e(x,{display:`system`}),null;if(r===`status`)return e(await p(),{display:`system`}),null;if(r){let{call:t}=await import(`./skill-learning-08nEdOJ2.js`),n=await t(r,{});return n&&typeof n==`object`&&`value`in n&&e(n.value,{display:`system`}),null}return(0,y.jsx)(g,{onDone:e})}var v,y,b,x;e((()=>{v=t(n(),1),a(),l(),f(),y=c(),b=28,x=`# Skill Learning (自动学习)
5
+
6
+ Skill Learning 是一个闭环学习系统,通过观察用户的操作模式自动提取直觉(instinct),
7
+ 并在达到阈值后生成可复用的 skill 文件、agent 和 command。
8
+
9
+ ## 工作流程
10
+ 1. **Observe** — 记录每轮对话中的工具调用、用户纠正、错误解决模式
11
+ 2. **Analyze** — 使用启发式或 LLM 后端分析观察数据,提取 instinct candidate
12
+ 3. **Evolve** — 将高置信度 instinct 聚类,生成 skill/agent/command 候选
13
+ 4. **Lifecycle** — 对生成的 skill 进行去重、版本比较、归档或替换
14
+
15
+ ## 子命令
16
+ - /skill-learning status — 查看当前项目的观察和直觉数量
17
+ - /skill-learning ingest — 从 transcript 导入观察数据
18
+ - /skill-learning evolve — 生成 skill 候选 (--generate 写入磁盘)
19
+ - /skill-learning export — 导出 instinct 为 JSON
20
+ - /skill-learning import — 导入 instinct JSON
21
+ - /skill-learning prune — 清理过期的 pending instinct
22
+ - /skill-learning promote — 将 instinct/gap 提升为全局范围
23
+ - /skill-learning projects — 列出所有已知的项目范围
24
+
25
+ ## 启用方式
26
+ - SKILL_LEARNING_ENABLED=1 或 FEATURE_SKILL_LEARNING=1
27
+ - 状态: ${d()?`已启用`:`未启用`}
28
+ `}))();export{_ as call};
@@ -0,0 +1,21 @@
1
+ import{n as e,o as t}from"./chunk-DR8-3Aex.js";import{Rn as n,b as r,f as i,t as a,x as o,xt as s}from"./src-DNHWYkls.js";import{t as c}from"./jsx-runtime-BTgGEFjL.js";import{BT as l,IS as u,LS as d,UT as f}from"./loadAgentsDir-Bz0FfcVt.js";function p(){return[`Skill Search (自动技能匹配)`,`Status: ${d()?`enabled`:`disabled`}`,``,`When enabled, relevant skills are automatically matched and`,`injected into conversation context each turn.`].join(`
2
+ `)}async function m(){if(d()&&process.env.SKILL_SEARCH_ENABLED!==`0`)return`Skill Search: already enabled`;process.env.SKILL_SEARCH_ENABLED=`1`;let e=[`Skill Search: enabled (SKILL_SEARCH_ENABLED=1)`];try{let{clearSkillIndexCache:t}=await import(`./localSearch-CTycGe3E.js`);t(),e.push(`Skill index cache: cleared (will rebuild on next search)`)}catch{e.push(`Skill index cache: clear skipped`)}return e.join(`
3
+ `)}async function h(){return d()?(process.env.SKILL_SEARCH_ENABLED=`0`,`Skill Search: disabled (SKILL_SEARCH_ENABLED=0)`):`Skill Search: already disabled`}function g({onDone:e}){f(`skill-search-panel`);let[t,n]=(0,v.useState)(0),a=(0,v.useMemo)(()=>[{label:`Status`,description:`Show whether automatic skill matching is active`,run:()=>Promise.resolve(p())},{label:`Start`,description:`Enable automatic skill matching for this session`,run:m},{label:`Stop`,description:`Disable automatic skill matching for this session`,run:h},{label:`About`,description:`How automatic skill matching works`,run:()=>Promise.resolve(x)}],[]),c=()=>{let n=a[t];n&&n.run().then(t=>{e(t,{display:`system`})})};return s((e,t)=>{if(t.upArrow){n(e=>Math.max(0,e-1));return}if(t.downArrow){n(e=>Math.min(a.length-1,e+1));return}t.return&&c()}),(0,y.jsx)(i,{title:`Skill Search`,subtitle:`${a.length} actions`,onCancel:()=>e(`Skill search panel dismissed`,{display:`system`}),color:`background`,hideInputGuide:!0,children:(0,y.jsxs)(o,{flexDirection:`column`,children:[a.map((e,n)=>(0,y.jsxs)(o,{flexDirection:`row`,children:[(0,y.jsx)(r,{children:`${n===t?`›`:` `} ${e.label}`.padEnd(b)}),(0,y.jsx)(r,{dimColor:!0,children:e.description})]},e.label)),(0,y.jsx)(o,{marginTop:1,children:(0,y.jsx)(r,{dimColor:!0,children:`↑/↓ select · Enter run · Esc close`})})]})})}async function _(e,t,n){let r=n?.trim()??``;return r===`start`?(e(await m(),{display:`system`}),null):r===`stop`?(e(await h(),{display:`system`}),null):r===`about`?(e(x,{display:`system`}),null):r===`status`?(e(p(),{display:`system`}),null):(0,y.jsx)(g,{onDone:e})}var v,y,b,x;e((()=>{v=t(n(),1),a(),l(),u(),y=c(),b=28,x=`# Skill Search (自动技能匹配)
4
+
5
+ Skill Search 控制对话中的自动技能匹配功能。
6
+
7
+ 启用后,Claude Code 会在每轮对话中自动搜索并加载与当前任务最相关的 skill 文件,
8
+ 无需手动指定。搜索基于 TF-IDF 向量余弦相似度,支持英文词干化和 CJK bi-gram 分词。
9
+
10
+ ## 工作原理
11
+ 1. 对话开始时,自动索引 .claude/skills/ 和 ~/.claude/skills/ 下的 Markdown 文件
12
+ 2. 每轮对话根据上下文自动匹配最相关的 skill
13
+ 3. 匹配到的 skill 内容会作为上下文注入,指导 Claude Code 的行为
14
+
15
+ ## 控制方式
16
+ - /skill-search start — 启用自动匹配
17
+ - /skill-search stop — 禁用自动匹配
18
+ - /skill-search status — 查看当前状态
19
+
20
+ 当前状态: ${d()?`已启用`:`未启用`}
21
+ `}))();export{_ as call};
@@ -0,0 +1 @@
1
+ import{n as e}from"./chunk-DR8-3Aex.js";import{_s as t,ls as n,xs as r}from"./growthbook-p4aJ_UMv.js";function i(e){let t=Date.now(),n=s.get(e);n!==void 0&&t-n<o||(s.set(e,t),r(n=>{let r=n.skillUsage?.[e];return{...n,skillUsage:{...n.skillUsage,[e]:{usageCount:(r?.usageCount??0)+1,lastUsedAt:t}}}}))}function a(e){let t=n().skillUsage?.[e];if(!t)return 0;let r=.5**((Date.now()-t.lastUsedAt)/(1e3*60*60*24)/7);return t.usageCount*Math.max(r,.1)}var o,s,c=e((()=>{t(),o=6e4,s=new Map}));export{c as n,i as r,a as t};
@@ -0,0 +1 @@
1
+ import{n as e,o as t}from"./chunk-DR8-3Aex.js";import{Rn as n,b as r,f as i,t as a,u as o,x as s}from"./src-DNHWYkls.js";import{t as c}from"./jsx-runtime-BTgGEFjL.js";import{Bl as l,Hl as u}from"./growthbook-p4aJ_UMv.js";import{a as d,c as f}from"./stringUtils-U7kMYMJq.js";import{v as p,y as m}from"./startupProfiler-4P7GdVw6.js";import{gd as h,lD as g,md as _,uD as v,ys as y,zi as b}from"./loadAgentsDir-Bz0FfcVt.js";function x(e,t){let n=t.trim();if(n===``)return e.slice();let r=n.toLowerCase().split(/\s+/);return e.filter(e=>{let t=`${e.name} ${e.description}`.toLowerCase();return r.every(e=>t.includes(e))})}var S=e((()=>{}));function C(e){return e===`plugin`?`plugin`:e===`mcp`?`mcp`:l(e)}function w({onExit:e,commands:t}){let[n,a]=(0,T.useState)(``),c=(0,T.useMemo)(()=>t.filter(e=>e.type===`prompt`&&(e.loadedFrom===`skills`||e.loadedFrom===`commands_DEPRECATED`||e.loadedFrom===`plugin`||e.loadedFrom===`mcp`)),[t]),l=(0,T.useMemo)(()=>x(c.map(e=>({...e,name:y(e),description:e.description??``})),n),[c,n]),u=(0,T.useMemo)(()=>{let e={policySettings:[],userSettings:[],projectSettings:[],localSettings:[],flagSettings:[],plugin:[],mcp:[]};for(let t of l){let n=t.source;n in e&&e[n].push(t)}for(let t of Object.values(e))t.sort((e,t)=>y(e).localeCompare(y(t)));return e},[l]),d=()=>{e(`Skills dialog dismissed`,{display:`system`})};if(c.length===0)return(0,E.jsxs)(i,{title:`Skills`,subtitle:`No skills found`,onCancel:d,hideInputGuide:!0,children:[(0,E.jsx)(r,{dimColor:!0,children:`Create skills in .claude/skills/ or ~/.claude/skills/`}),(0,E.jsx)(r,{dimColor:!0,italic:!0,children:(0,E.jsx)(g,{action:`confirm:no`,context:`Confirmation`,fallback:`Esc`,description:`close`})})]});let m=e=>{switch(e){case`projectSettings`:case`localSettings`:return{label:`local`,color:`yellow`};case`userSettings`:return{label:`global`,color:`cyan`};case`policySettings`:return{label:`managed`,color:`magenta`};default:return}},h=(e,t)=>{let n=`~${p(_(e))}`,i=e.source===`plugin`?e.pluginInfo?.pluginManifest.name:void 0,a=m(e.source);return(0,E.jsxs)(s,{children:[(0,E.jsx)(r,{color:t?`suggestion`:void 0,children:y(e)}),a&&(0,E.jsxs)(r,{color:a.color,children:[` [`,a.label,`]`]}),(0,E.jsxs)(r,{dimColor:!0,children:[i?` · ${i}`:``,` · `,C(e.source),` · `,n,` tokens`]})]})};return(0,E.jsx)(o,{title:`Skills`,placeholder:`Type to filter skills…`,items:(0,T.useMemo)(()=>D.flatMap(e=>u[e]),[u]),getKey:e=>`${e.name}-${e.source}`,visibleCount:12,direction:`down`,onQueryChange:a,onSelect:t=>{e(`/${y(t)}`,{display:`user`})},onCancel:d,emptyMessage:e=>e.trim()?`No skills matching "${e.trim()}"`:`No skills found`,matchLabel:n.trim()===``?`${c.length} ${f(c.length,`skill`)}`:`${l.length}/${c.length} ${f(c.length,`skill`)}`,selectAction:`invoke skill`,renderItem:(e,t)=>h(e,t)})}var T,E,D,O=e((()=>{n(),T=t(n(),1),b(),a(),h(),m(),u(),d(),v(),S(),E=c(),D=[`projectSettings`,`localSettings`,`userSettings`,`flagSettings`,`policySettings`,`plugin`,`mcp`]}));async function k(e,t){return(0,A.jsx)(w,{onExit:e,commands:t.options.commands})}var A;e((()=>{n(),O(),A=c()}))();export{k as call};
@@ -0,0 +1 @@
1
+ import{n as e}from"./chunk-DR8-3Aex.js";function t(e){let t=e.trim();if(!t.startsWith(`/`))return null;let n=t.slice(1).split(` `);if(!n[0])return null;let r=n[0],i=!1,a=1;n.length>1&&n[1]===`(MCP)`&&(r+=` (MCP)`,i=!0,a=2);let o=n.slice(a).join(` `);return{commandName:r,args:o,isMcp:i}}var n=e((()=>{}));export{t as n,n as t};
@@ -0,0 +1 @@
1
+ import{n as e}from"./chunk-DR8-3Aex.js";function t(e,t,n){return new Promise((r,i)=>{if(t?.aborted){n?.throwOnAbort||n?.abortError?i(n.abortError?.()??Error(`aborted`)):r();return}let a=setTimeout((e,t,n)=>{e?.removeEventListener(`abort`,t),n()},e,t,o,r);function o(){clearTimeout(a),n?.throwOnAbort||n?.abortError?i(n.abortError?.()??Error(`aborted`)):r()}t?.addEventListener(`abort`,o,{once:!0}),n?.unref&&a.unref()})}var n=e((()=>{}));export{t as n,n as t};
@@ -0,0 +1 @@
1
+ import{n as e}from"./chunk-DR8-3Aex.js";import{Ht as t}from"./state-CUZTq6r0.js";import{l as n}from"./debug-CjIaNjpK.js";import"fs";function r(e){let t;return()=>t??(t=e())}var i=e((()=>{}));function a(){return s}function o(e,t,n){return c`JSON.stringify(${e})`,JSON.stringify(e,t,n)}var s,c,l,u=e((()=>{t(),n(),(()=>{let e=process.env.CLAUDE_CODE_SLOW_OPERATION_THRESHOLD_MS;if(e!==void 0){let t=Number(e);if(!Number.isNaN(t)&&t>=0)return t}return process.env.USER_TYPE===`ant`?300:1/0})(),s={[Symbol.dispose](){}},c=a,l=(e,t)=>(c`JSON.parse(${e})`,t===void 0?JSON.parse(e):JSON.parse(e,t))}));export{r as a,i,l as n,o as r,u as t};
@@ -0,0 +1 @@
1
+ import{n as e}from"./chunk-DR8-3Aex.js";import{C as t,E as n,S as r,T as i,_ as a,b as o,c as s,d as c,f as l,g as u,h as d,l as f,m as p,p as m,u as h,v as g,w as _,x as v,y}from"./companion-mD1jw6xX.js";function b(e,t=0){let n=C[e.species],r=[...n[t%n.length].map(t=>t.replaceAll(`{E}`,e.eye))];return e.hat!==`none`&&!r[0].trim()&&(r[0]=w[e.hat]),!r[0].trim()&&n.every(e=>!e[0].trim())&&r.shift(),r}function x(e){return C[e].length}function S(e){let g=e.eye;switch(e.species){case d:case a:return`(${g}>`;case f:return`(${g}${g})`;case l:return`=${g}ω${g}=`;case p:return`<${g}~${g}>`;case o:return`~(${g}${g})~`;case v:return`(${g})(${g})`;case r:return`(${g}>)`;case n:return`[${g}_${g}]`;case i:return`${g}(@)`;case u:return`/${g}${g}\\`;case s:return`}${g}.${g}{`;case c:return`(${g}oo${g})`;case h:return`|${g} ${g}|`;case _:return`[${g}${g}]`;case t:return`(${g}..${g})`;case y:return`|${g} ${g}|`;case m:return`(${g}.${g})`}}var C,w,T=e((()=>{g(),C={[d]:[[` `,` __ `,` <({E} )___ `,` ( ._> `," `--´ "],[` `,` __ `,` <({E} )___ `,` ( ._> `," `--´~ "],[` `,` __ `,` <({E} )___ `,` ( .__> `," `--´ "]],[a]:[[` `,` ({E}> `,` || `,` _(__)_ `,` ^^^^ `],[` `,` ({E}> `,` || `,` _(__)_ `,` ^^^^ `],[` `,` ({E}>> `,` || `,` _(__)_ `,` ^^^^ `]],[f]:[[` `,` .----. `,` ( {E} {E} ) `,` ( ) `," `----´ "],[` `,` .------. `,` ( {E} {E} ) `,` ( ) `," `------´ "],[` `,` .--. `,` ({E} {E}) `,` ( ) `," `--´ "]],[l]:[[` `,` /\\_/\\ `,` ( {E} {E}) `,` ( ω ) `,` (")_(") `],[` `,` /\\_/\\ `,` ( {E} {E}) `,` ( ω ) `,` (")_(")~ `],[` `,` /\\-/\\ `,` ( {E} {E}) `,` ( ω ) `,` (")_(") `]],[p]:[[` `,` /^\\ /^\\ `,` < {E} {E} > `,` ( ~~ ) `," `-vvvv-´ "],[` `,` /^\\ /^\\ `,` < {E} {E} > `,` ( ) `," `-vvvv-´ "],[` ~ ~ `,` /^\\ /^\\ `,` < {E} {E} > `,` ( ~~ ) `," `-vvvv-´ "]],[o]:[[` `,` .----. `,` ( {E} {E} ) `,` (______) `,` /\\/\\/\\/\\ `],[` `,` .----. `,` ( {E} {E} ) `,` (______) `,` \\/\\/\\/\\/ `],[` o `,` .----. `,` ( {E} {E} ) `,` (______) `,` /\\/\\/\\/\\ `]],[v]:[[` `,` /\\ /\\ `,` (({E})({E})) `,` ( >< ) `," `----´ "],[` `,` /\\ /\\ `,` (({E})({E})) `,` ( >< ) `,` .----. `],[` `,` /\\ /\\ `,` (({E})(-)) `,` ( >< ) `," `----´ "]],[r]:[[` `,` .---. `,` ({E}>{E}) `,` /( )\\ `," `---´ "],[` `,` .---. `,` ({E}>{E}) `,` |( )| `," `---´ "],[` .---. `,` ({E}>{E}) `,` /( )\\ `," `---´ ",` ~ ~ `]],[n]:[[` `,` _,--._ `,` ( {E} {E} ) `,` /[______]\\ `," `` `` "],[` `,` _,--._ `,` ( {E} {E} ) `,` /[______]\\ `," `` `` "],[` `,` _,--._ `,` ( {E} {E} ) `,` /[======]\\ `," `` `` "]],[i]:[[` `,` {E} .--. `,` \\ ( @ ) `," \\_`--´ ",` ~~~~~~~ `],[` `,` {E} .--. `,` | ( @ ) `," \\_`--´ ",` ~~~~~~~ `],[` `,` {E} .--. `,` \\ ( @ ) `," \\_`--´ ",` ~~~~~~ `]],[u]:[[` `,` .----. `,` / {E} {E} \\ `,` | | `," ~`~``~`~ "],[` `,` .----. `,` / {E} {E} \\ `,` | | `," `~`~~`~` "],[` ~ ~ `,` .----. `,` / {E} {E} \\ `,` | | `," ~~`~~`~~ "]],[s]:[[` `,`}~(______)~{`,`}~({E} .. {E})~{`,` ( .--. ) `,` (_/ \\_) `],[` `,`~}(______){~`,`~}({E} .. {E}){~`,` ( .--. ) `,` (_/ \\_) `],[` `,`}~(______)~{`,`}~({E} .. {E})~{`,` ( -- ) `,` ~_/ \\_~ `]],[c]:[[` `,` n______n `,` ( {E} {E} ) `,` ( oo ) `," `------´ "],[` `,` n______n `,` ( {E} {E} ) `,` ( Oo ) `," `------´ "],[` ~ ~ `,` u______n `,` ( {E} {E} ) `,` ( oo ) `," `------´ "]],[h]:[[` `,` n ____ n `,` | |{E} {E}| | `,` |_| |_| `,` | | `],[` `,` ____ `,` n |{E} {E}| n `,` |_| |_| `,` | | `],[` n n `,` | ____ | `,` | |{E} {E}| | `,` |_| |_| `,` | | `]],[_]:[[` `,` .[||]. `,` [ {E} {E} ] `,` [ ==== ] `," `------´ "],[` `,` .[||]. `,` [ {E} {E} ] `,` [ -==- ] `," `------´ "],[` * `,` .[||]. `,` [ {E} {E} ] `,` [ ==== ] `," `------´ "]],[t]:[[` `,` (\\__/) `,` ( {E} {E} ) `,` =( .. )= `,` (")__(") `],[` `,` (|__/) `,` ( {E} {E} ) `,` =( .. )= `,` (")__(") `],[` `,` (\\__/) `,` ( {E} {E} ) `,` =( . . )= `,` (")__(") `]],[y]:[[` `,` .-o-OO-o-. `,`(__________)`,` |{E} {E}| `,` |____| `],[` `,` .-O-oo-O-. `,`(__________)`,` |{E} {E}| `,` |____| `],[` . o . `,` .-o-OO-o-. `,`(__________)`,` |{E} {E}| `,` |____| `]],[m]:[[` `,` /\\ /\\ `,` ( {E} {E} ) `,` ( .. ) `," `------´ "],[` `,` /\\ /| `,` ( {E} {E} ) `,` ( .. ) `," `------´ "],[` `,` /\\ /\\ `,` ( {E} {E} ) `,` ( .. ) `," `------´~ "]]},w={none:``,crown:` \\^^^/ `,tophat:` [___] `,propeller:` -+- `,halo:` ( ) `,wizard:` /^\\ `,beanie:` (___) `,tinyduck:` ,> `}}));export{x as i,S as n,b as r,T as t};
@@ -0,0 +1,6 @@
1
+ import{n as e}from"./chunk-DR8-3Aex.js";import{n as t,t as n}from"./defineProperty-CaCI0a5T.js";import{n as r,r as i}from"./wrapper-BDPb4PTV.js";import{B as a,M as o,d as s,n as c,t as l}from"./server-XZG51Slr.js";import{platform as u}from"os";import{dirname as d}from"path";import{promises as f}from"fs";import{createConnection as p}from"net";function m(e){return e instanceof Error?e:void 0}function h(){return process.platform===`darwin`?`macOS`:process.platform===`win32`?`Windows`:`Linux`}var g=e((()=>{}));function _(e){return`result`in e||`error`in e}function v(e){return`method`in e&&typeof e.method==`string`}function y(e){return new x(e)}var b,x,S=e((()=>{g(),t(),b=class extends Error{constructor(e){super(e),this.name=`SocketConnectionError`}},x=class{constructor(e){n(this,`socket`,null),n(this,`connected`,!1),n(this,`connecting`,!1),n(this,`responseCallback`,null),n(this,`notificationHandler`,null),n(this,`responseBuffer`,Buffer.alloc(0)),n(this,`reconnectAttempts`,0),n(this,`maxReconnectAttempts`,10),n(this,`reconnectDelay`,1e3),n(this,`reconnectTimer`,null),n(this,`context`,void 0),n(this,`disableAutoReconnect`,!1),this.context=e}async connect(){let{serverName:e,logger:t}=this.context;if(this.connecting){t.info(`[${e}] Already connecting, skipping duplicate attempt`);return}this.closeSocket(),this.connecting=!0;let n=this.context.getSocketPath?.()??this.context.socketPath;t.info(`[${e}] Attempting to connect to: ${n}`);try{await this.validateSocketSecurity(n)}catch(n){this.connecting=!1,t.info(`[${e}] Security validation failed:`,m(n));return}this.socket=p(n);let r=setTimeout(()=>{this.connected||(t.info(`[${e}] Connection attempt timed out after 5000ms`),this.closeSocket(),this.scheduleReconnect())},5e3);this.socket.on(`connect`,()=>{clearTimeout(r),this.connected=!0,this.connecting=!1,this.reconnectAttempts=0,t.info(`[${e}] Successfully connected to bridge server`)}),this.socket.on(`data`,n=>{for(this.responseBuffer=Buffer.concat([this.responseBuffer,n]);this.responseBuffer.length>=4;){let n=this.responseBuffer.readUInt32LE(0);if(this.responseBuffer.length<4+n)break;let r=this.responseBuffer.slice(4,4+n);this.responseBuffer=this.responseBuffer.slice(4+n);try{let n=JSON.parse(r.toString(`utf-8`));v(n)?(t.info(`[${e}] Received notification: ${n.method}`),this.notificationHandler&&this.notificationHandler(n)):_(n)?(t.info(`[${e}] Received tool response: ${n}`),this.handleResponse(n)):t.info(`[${e}] Received unknown message: ${n}`)}catch(n){t.info(`[${e}] Failed to parse message:`,m(n))}}}),this.socket.on(`error`,n=>{clearTimeout(r),t.info(`[${e}] Socket error (code: ${n.code}):`,m(n)),this.connected=!1,this.connecting=!1,n.code&&[`ECONNREFUSED`,`ECONNRESET`,`EPIPE`,`ENOENT`,`EOPNOTSUPP`,`ECONNABORTED`].includes(n.code)&&this.scheduleReconnect()}),this.socket.on(`close`,()=>{clearTimeout(r),this.connected=!1,this.connecting=!1,this.scheduleReconnect()})}scheduleReconnect(){let{serverName:e,logger:t}=this.context;if(this.disableAutoReconnect)return;if(this.reconnectTimer){t.info(`[${e}] Reconnect already scheduled, skipping`);return}if(this.reconnectAttempts++,this.reconnectAttempts>100){t.info(`[${e}] Giving up after 100 attempts. Will retry on next tool call.`),this.reconnectAttempts=0;return}let n=Math.min(this.reconnectDelay*1.5**(this.reconnectAttempts-1),3e4);this.reconnectAttempts<=this.maxReconnectAttempts?t.info(`[${e}] Reconnecting in ${Math.round(n)}ms (attempt ${this.reconnectAttempts})`):this.reconnectAttempts%10==0&&t.info(`[${e}] Still polling for native host (attempt ${this.reconnectAttempts})`),this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=null,this.connect()},n)}handleResponse(e){if(this.responseCallback){let t=this.responseCallback;this.responseCallback=null,t(e)}}setNotificationHandler(e){this.notificationHandler=e}async ensureConnected(){let{serverName:e}=this.context;return this.connected&&this.socket?!0:(!this.socket&&!this.connecting&&await this.connect(),new Promise((t,n)=>{let r=null,i=setTimeout(()=>{r&&clearTimeout(r),n(new b(`[${e}] Connection attempt timed out after 5000ms`))},5e3),a=()=>{this.connected?(clearTimeout(i),t(!0)):r=setTimeout(a,500)};a()}))}async sendRequest(e,t=3e4){let{serverName:n}=this.context;if(!this.socket)throw new b(`[${n}] Cannot send request: not connected`);let r=this.socket;return new Promise((i,a)=>{let o=setTimeout(()=>{this.responseCallback=null,a(new b(`[${n}] Tool request timed out after ${t}ms`))},t);this.responseCallback=e=>{clearTimeout(o),i(e)};let s=JSON.stringify(e),c=Buffer.from(s,`utf-8`),l=Buffer.allocUnsafe(4);l.writeUInt32LE(c.length,0);let u=Buffer.concat([l,c]);r.write(u)})}async callTool(e,t,n){let r={method:`execute_tool`,params:{client_id:this.context.clientTypeId,tool:e,args:t}};return this.sendRequestWithRetry(r)}async sendRequestWithRetry(e){let{serverName:t,logger:n}=this.context;try{return await this.sendRequest(e)}catch(r){if(!(r instanceof b))throw r;return n.info(`[${t}] Connection error, forcing reconnect and retrying: ${r.message}`),this.closeSocket(),await this.ensureConnected(),await this.sendRequest(e)}}async setPermissionMode(e,t){}isConnected(){return this.connected}closeSocket(){this.socket&&(this.socket.removeAllListeners(),this.socket.end(),this.socket.destroy(),this.socket=null),this.connected=!1,this.connecting=!1}cleanup(){this.reconnectTimer&&(clearTimeout(this.reconnectTimer),this.reconnectTimer=null),this.closeSocket(),this.reconnectAttempts=0,this.responseBuffer=Buffer.alloc(0),this.responseCallback=null}disconnect(){this.cleanup()}async validateSocketSecurity(e){let{serverName:t,logger:n}=this.context;if(u()!==`win32`)try{let r=d(e);if((r.split(`/`).pop()||``).startsWith(`claude-mcp-browser-bridge-`))try{let e=await f.stat(r);if(e.isDirectory()){let n=e.mode&511;if(n!==448)throw Error(`[${t}] Insecure socket directory permissions: ${n.toString(8)} (expected 0700). Directory may have been tampered with.`);let r=process.getuid?.();if(r!==void 0&&e.uid!==r)throw Error(`Socket directory not owned by current user (uid: ${r}, dir uid: ${e.uid}). Potential security risk.`)}}catch(e){if(e.code!==`ENOENT`)throw e}let i=await f.stat(e);if(!i.isSocket())throw Error(`[${t}] Path exists but it's not a socket: ${e}`);let a=i.mode&511;if(a!==384)throw Error(`[${t}] Insecure socket permissions: ${a.toString(8)} (expected 0600). Socket may have been tampered with.`);let o=process.getuid?.();if(o!==void 0&&i.uid!==o)throw Error(`Socket not owned by current user (uid: ${o}, socket uid: ${i.uid}). Potential security risk.`);n.info(`[${t}] Socket security validation passed`)}catch(e){if(e.code===`ENOENT`){n.info(`[${t}] Socket not found, will be created by server`);return}throw e}}}}));function C(e){return new E(e)}var w,T,E,D=e((()=>{r(),S(),g(),t(),w=5e3,T=1e4,E=class{constructor(e){n(this,`ws`,null),n(this,`connected`,!1),n(this,`authenticated`,!1),n(this,`connecting`,!1),n(this,`reconnectTimer`,null),n(this,`reconnectAttempts`,0),n(this,`pendingCalls`,new Map),n(this,`notificationHandler`,null),n(this,`context`,void 0),n(this,`permissionMode`,`ask`),n(this,`allowedDomains`,void 0),n(this,`tabsContextCollectionTimeoutMs`,2e3),n(this,`toolCallTimeoutMs`,12e4),n(this,`connectionStartTime`,null),n(this,`connectionEstablishedTime`,null),n(this,`selectedDeviceId`,void 0),n(this,`discoveryComplete`,!1),n(this,`discoveryPromise`,null),n(this,`pendingDiscovery`,null),n(this,`previousSelectedDeviceId`,void 0),n(this,`peerConnectedWaiters`,[]),n(this,`pendingPairingRequestId`,void 0),n(this,`pairingInProgress`,!1),n(this,`persistedDeviceId`,void 0),n(this,`pendingSwitchResolve`,null),this.context=e,e.initialPermissionMode&&(this.permissionMode=e.initialPermissionMode)}async ensureConnected(){let{logger:e,serverName:t}=this.context;return e.info(`[${t}] ensureConnected called, connected=${this.connected}, authenticated=${this.authenticated}, wsState=${this.ws?.readyState}`),this.connected&&this.authenticated&&this.ws?.readyState===i.OPEN?(e.info(`[${t}] Already connected and authenticated`),!0):(this.connecting?e.info(`[${t}] Already connecting, waiting...`):(e.info(`[${t}] Not connecting, starting connection...`),await this.connect()),new Promise(n=>{let r=setTimeout(()=>{e.info(`[${t}] Connection timeout, connected=${this.connected}, authenticated=${this.authenticated}`),n(!1)},1e4),i=()=>{this.connected&&this.authenticated?(e.info(`[${t}] Connection successful`),clearTimeout(r),n(!0)):this.connecting?setTimeout(i,200):(e.info(`[${t}] No longer connecting, giving up`),clearTimeout(r),n(!1))};i()}))}async callTool(e,t,n){let{logger:r,serverName:a,trackEvent:o}=this.context;if(!this.ws||this.ws.readyState!==i.OPEN)throw new b(`[${a}] Bridge not connected`);!this.selectedDeviceId&&!this.discoveryComplete&&(this.discoveryPromise??(this.discoveryPromise=this.discoverAndSelectExtension().finally(()=>{this.discoveryPromise=null})),await this.discoveryPromise);let s=crypto.randomUUID(),c=e===`tabs_context_mcp`,l=Date.now(),u=c?this.tabsContextCollectionTimeoutMs:this.toolCallTimeoutMs;o?.(`chrome_bridge_tool_call_started`,{tool_name:e,tool_use_id:s});let d=n?.permissionMode??this.permissionMode,f=n?.allowedDomains??this.allowedDomains;return new Promise((i,p)=>{let m=setTimeout(()=>{let t=this.pendingCalls.get(s);if(t){this.pendingCalls.delete(s);let n=Date.now()-t.startTime;c&&t.results.length>0?(o?.(`chrome_bridge_tool_call_completed`,{tool_name:e,tool_use_id:s,duration_ms:n}),i(this.mergeTabsResults(t.results))):(r.warn(`[${a}] Tool call timeout: ${e} (${s.slice(0,8)}) after ${n}ms, pending calls: ${this.pendingCalls.size}`),o?.(`chrome_bridge_tool_call_timeout`,{tool_name:e,tool_use_id:s,duration_ms:n,timeout_ms:u}),p(new b(`[${a}] Tool call timed out: ${e}`)))}},u);this.pendingCalls.set(s,{resolve:i,reject:p,timer:m,results:[],isTabsContext:c,onPermissionRequest:n?.onPermissionRequest,startTime:l,toolName:e});let h={type:`tool_call`,tool_use_id:s,client_type:this.context.clientTypeId,tool:e,args:t};this.selectedDeviceId&&(h.target_device_id=this.selectedDeviceId),d&&(h.permission_mode=d),f?.length&&(h.allowed_domains=f),n?.onPermissionRequest&&(h.handle_permission_prompts=!0),r.debug(`[${a}] Sending tool_call: ${e} (${s.slice(0,8)})`),this.ws.send(JSON.stringify(h))})}isConnected(){return this.connected&&this.authenticated&&this.ws?.readyState===i.OPEN}disconnect(){this.cleanup()}setNotificationHandler(e){this.notificationHandler=e}async setPermissionMode(e,t){this.permissionMode=e,this.allowedDomains=t}async discoverAndSelectExtension(){let{logger:e,serverName:t}=this.context;this.persistedDeviceId??(this.persistedDeviceId=this.context.getPersistedDeviceId?.());let n=await this.queryBridgeExtensions();if(n.length===0&&(e.info(`[${t}] No extensions connected, waiting up to ${T}ms for peer_connected`),await this.waitForPeerConnected(T)&&(n=await this.queryBridgeExtensions())),this.discoveryComplete=!0,n.length===0){e.info(`[${t}] No extensions found after waiting`);return}if(n.length===1){let e=n[0];this.isLocalExtension(e)||this.context.onRemoteExtensionWarning?.(e),this.selectExtension(e.deviceId);return}if(this.persistedDeviceId){let r=n.find(e=>e.deviceId===this.persistedDeviceId);if(r){e.info(`[${t}] Auto-connecting to persisted extension: ${r.name||r.deviceId.slice(0,8)}`),this.selectExtension(r.deviceId);return}}this.broadcastPairingRequest(),this.pairingInProgress=!0}async queryBridgeExtensions(){let e=await new Promise(e=>{this.pendingDiscovery={resolve:e,timeout:setTimeout(()=>{this.pendingDiscovery=null,e([])},w)},this.ws?.send(JSON.stringify({type:`list_extensions`}))}),t=new Map;for(let n of e){let e=t.get(n.deviceId);(!e||n.connectedAt>e.connectedAt)&&t.set(n.deviceId,n)}return[...t.values()]}selectExtension(e){let{logger:t,serverName:n}=this.context;this.selectedDeviceId=e,this.previousSelectedDeviceId=void 0,t.info(`[${n}] Selected Chrome extension: ${e.slice(0,8)}...`)}isLocalExtension(e){return e.osPlatform?e.osPlatform===h():!1}waitForPeerConnected(e){return new Promise(t=>{let n=setTimeout(()=>{this.peerConnectedWaiters=this.peerConnectedWaiters.filter(e=>e!==r),t(!1)},e),r=e=>{clearTimeout(n),t(e)};this.peerConnectedWaiters.push(r)})}broadcastPairingRequest(){let e=crypto.randomUUID();this.pendingPairingRequestId=e,this.ws?.send(JSON.stringify({type:`pairing_request`,request_id:e,client_type:this.context.clientTypeId}))}async switchBrowser(){let e=await this.queryBridgeExtensions(),t=this.selectedDeviceId??this.previousSelectedDeviceId;if(e.length===0||e.length===1&&(!t||e[0].deviceId===t))return`no_other_browsers`;this.previousSelectedDeviceId=this.selectedDeviceId,this.selectedDeviceId=void 0,this.discoveryComplete=!1,this.pairingInProgress=!1;let n=crypto.randomUUID();return this.pendingPairingRequestId=n,this.ws?.readyState===i.OPEN?(this.ws.send(JSON.stringify({type:`pairing_request`,request_id:n,client_type:this.context.clientTypeId})),this.pendingSwitchResolve&&this.pendingSwitchResolve(null),new Promise(e=>{let t=setTimeout(()=>{this.pendingPairingRequestId===n&&(this.pendingPairingRequestId=void 0),this.pendingSwitchResolve=null,e(null)},12e4);this.pendingSwitchResolve=n=>{clearTimeout(t),this.pendingSwitchResolve=null,e(n)}})):null}async connect(){let{logger:e,serverName:t,bridgeConfig:n,trackEvent:r}=this.context;if(!n){e.error(`[${t}] No bridge config provided`);return}if(this.connecting)return;this.connecting=!0,this.authenticated=!1,this.connectionStartTime=Date.now(),this.closeSocket();let a,o;if(n.devUserId)a=n.devUserId,e.debug(`[${t}] Using dev user ID for bridge connection`);else{e.debug(`[${t}] Fetching user ID for bridge connection`);let i=await n.getUserId();if(!i){let n=Date.now()-this.connectionStartTime;e.error(`[${t}] No user ID available after ${n}ms`),r?.(`chrome_bridge_connection_failed`,{duration_ms:n,error_type:`no_user_id`,reconnect_attempt:this.reconnectAttempts}),this.connecting=!1,this.context.onAuthenticationError?.();return}if(a=i,e.debug(`[${t}] Fetching OAuth token for bridge connection`),o=await n.getOAuthToken(),!o){let n=Date.now()-this.connectionStartTime;e.error(`[${t}] No OAuth token available after ${n}ms`),r?.(`chrome_bridge_connection_failed`,{duration_ms:n,error_type:`no_oauth_token`,reconnect_attempt:this.reconnectAttempts}),this.connecting=!1,this.context.onAuthenticationError?.();return}}let s=`${n.url}/chrome/${a}`;e.info(`[${t}] Connecting to bridge: ${s}`),r?.(`chrome_bridge_connection_started`,{bridge_url:s});try{this.ws=new i(s)}catch(n){let i=Date.now()-this.connectionStartTime;e.error(`[${t}] Failed to create WebSocket after ${i}ms:`,m(n)),r?.(`chrome_bridge_connection_failed`,{duration_ms:i,error_type:`websocket_error`,reconnect_attempt:this.reconnectAttempts}),this.connecting=!1,this.scheduleReconnect();return}this.ws.on(`open`,()=>{e.info(`[${t}] WebSocket connected, sending connect message`);let r={type:`connect`,client_type:this.context.clientTypeId};n.devUserId?r.dev_user_id=n.devUserId:r.oauth_token=o,this.ws?.send(JSON.stringify(r))}),this.ws.on(`message`,n=>{try{let r=JSON.parse(n.toString());e.debug(`[${t}] Bridge received: ${JSON.stringify(r)}`),this.handleMessage(r)}catch(n){e.error(`[${t}] Failed to parse bridge message:`,m(n))}}),this.ws.on(`close`,n=>{let i=this.connectionEstablishedTime?Date.now()-this.connectionEstablishedTime:0;e.info(`[${t}] Bridge connection closed (code: ${n}, duration: ${i}ms)`),r?.(`chrome_bridge_disconnected`,{close_code:n,duration_since_connect_ms:i,reconnect_attempt:this.reconnectAttempts+1}),this.connected=!1,this.authenticated=!1,this.connecting=!1,this.connectionEstablishedTime=null,this.scheduleReconnect()}),this.ws.on(`error`,n=>{let i=this.connectionStartTime?Date.now()-this.connectionStartTime:0;e.error(`[${t}] Bridge WebSocket error after ${i}ms: ${n.message}`),r?.(`chrome_bridge_connection_failed`,{duration_ms:i,error_type:`websocket_error`,reconnect_attempt:this.reconnectAttempts}),this.connected=!1,this.authenticated=!1,this.connecting=!1})}handleMessage(e){let{logger:t,serverName:n,trackEvent:r}=this.context;switch(e.type){case`paired`:{let e=this.connectionStartTime?Date.now()-this.connectionStartTime:0;t.info(`[${n}] Paired with Chrome extension (duration: ${e}ms)`),this.connected=!0,this.authenticated=!0,this.connecting=!1,this.reconnectAttempts=0,this.connectionEstablishedTime=Date.now(),r?.(`chrome_bridge_connection_succeeded`,{duration_ms:e,status:`paired`});break}case`waiting`:{let e=this.connectionStartTime?Date.now()-this.connectionStartTime:0;t.info(`[${n}] Waiting for Chrome extension to connect (duration: ${e}ms)`),this.connected=!0,this.authenticated=!0,this.connecting=!1,this.reconnectAttempts=0,this.connectionEstablishedTime=Date.now(),r?.(`chrome_bridge_connection_succeeded`,{duration_ms:e,status:`waiting`});break}case`peer_connected`:if(t.info(`[${n}] Chrome extension connected to bridge`),r?.(`chrome_bridge_peer_connected`,null),this.selectedDeviceId||(this.discoveryComplete=!1),this.previousSelectedDeviceId&&e.deviceId===this.previousSelectedDeviceId&&!this.pendingSwitchResolve&&(t.info(`[${n}] Previously selected extension reconnected, auto-reselecting`),this.selectExtension(this.previousSelectedDeviceId),this.previousSelectedDeviceId=void 0),this.peerConnectedWaiters.length>0){let e=this.peerConnectedWaiters;this.peerConnectedWaiters=[];for(let t of e)t(!0)}break;case`peer_disconnected`:t.info(`[${n}] Chrome extension disconnected from bridge`),r?.(`chrome_bridge_peer_disconnected`,null),e.deviceId&&e.deviceId===this.selectedDeviceId&&(t.info(`[${n}] Selected extension disconnected, clearing selection`),this.previousSelectedDeviceId=this.selectedDeviceId,this.selectedDeviceId=void 0,this.discoveryComplete=!1);break;case`extensions_list`:this.pendingDiscovery&&(clearTimeout(this.pendingDiscovery.timeout),this.pendingDiscovery.resolve(e.extensions??[]),this.pendingDiscovery=null);break;case`pairing_response`:{let r=e.request_id,i=e.device_id,a=e.name;this.pendingPairingRequestId===r&&i&&a&&(this.pendingPairingRequestId=void 0,this.pairingInProgress=!1,this.selectExtension(i),this.context.onExtensionPaired?.(i,a),t.info(`[${n}] Paired with "${a}" (${i.slice(0,8)})`),this.pendingSwitchResolve&&(this.pendingSwitchResolve({deviceId:i,name:a}),this.pendingSwitchResolve=null));break}case`ping`:this.ws?.send(JSON.stringify({type:`pong`}));break;case`pong`:break;case`tool_result`:this.handleToolResult(e);break;case`permission_request`:this.handlePermissionRequest(e);break;case`notification`:this.notificationHandler&&this.notificationHandler({method:e.method,params:e.params});break;case`error`:t.warn(`[${n}] Bridge error: ${e.error}`),this.selectedDeviceId&&(this.selectedDeviceId=void 0,this.discoveryComplete=!1);break;default:t.warn(`[${n}] Unrecognized bridge message type: ${e.type}`)}}async handlePermissionRequest(e){let{logger:t,serverName:n}=this.context,r=e.tool_use_id,i=e.request_id;if(!r||!i){t.warn(`[${n}] permission_request missing tool_use_id or request_id`);return}let a=this.pendingCalls.get(r);if(!a?.onPermissionRequest){t.debug(`[${n}] Ignoring permission_request for unknown tool_use_id ${r.slice(0,8)} (not our call)`);return}let o={toolUseId:r,requestId:i,toolType:e.tool_type??`unknown`,url:e.url??``,actionData:e.action_data};try{let e=await a.onPermissionRequest(o);this.sendPermissionResponse(i,e)}catch(e){t.error(`[${n}] Error handling permission request:`,m(e)),this.sendPermissionResponse(i,!1)}}sendPermissionResponse(e,t){if(this.ws?.readyState===i.OPEN){let n={type:`permission_response`,request_id:e,allowed:t};this.selectedDeviceId&&(n.target_device_id=this.selectedDeviceId),this.ws.send(JSON.stringify(n))}}handleToolResult(e){let{logger:t,serverName:n,trackEvent:r}=this.context,i=e.tool_use_id;if(!i){t.warn(`[${n}] Received tool_result without tool_use_id`);return}let a=this.pendingCalls.get(i);if(!a){t.debug(`[${n}] Received tool_result for unknown call: ${i.slice(0,8)}`);return}let o=Date.now()-a.startTime,s=this.normalizeBridgeResponse(e),c=!!e.is_error||`error`in s;if(a.isTabsContext&&!this.selectedDeviceId)a.results.push(s);else{if(clearTimeout(a.timer),this.pendingCalls.delete(i),c){let e=s.error?.content,c=`Unknown error`;if(Array.isArray(e)){let t=e.find(e=>typeof e==`object`&&!!e&&`text`in e);t?.text&&(c=t.text.slice(0,200))}t.warn(`[${n}] Tool call error: ${a.toolName} (${i.slice(0,8)}) after ${o}ms`),r?.(`chrome_bridge_tool_call_error`,{tool_name:a.toolName,tool_use_id:i,duration_ms:o,error_message:c})}else t.debug(`[${n}] Tool call completed: ${a.toolName} (${i.slice(0,8)}) in ${o}ms`),r?.(`chrome_bridge_tool_call_completed`,{tool_name:a.toolName,tool_use_id:i,duration_ms:o});a.resolve(s)}}normalizeBridgeResponse(e){return e.result||e.error?e:e.content?e.is_error?{error:{content:e.content}}:{result:{content:e.content}}:e}mergeTabsResults(e){let t=[];for(let n of e){let e=n.result?.content;if(!(!e||!Array.isArray(e))){for(let n of e)if(n.type===`text`&&n.text)try{let e=JSON.parse(n.text);Array.isArray(e)?t.push(...e):e?.availableTabs&&Array.isArray(e.availableTabs)&&t.push(...e.availableTabs)}catch{}}}if(t.length>0){let e=t.map(e=>{let t=e;return` \u2022 tabId ${t.tabId}: "${t.title}" (${t.url})`}).join(`
2
+ `);return{result:{content:[{type:`text`,text:JSON.stringify({availableTabs:t})},{type:`text`,text:`\n\nTab Context:\n- Available tabs:\n${e}`}]}}}return e[0]}scheduleReconnect(){let{logger:e,serverName:t,trackEvent:n}=this.context;if(this.reconnectTimer)return;if(this.reconnectAttempts++,this.reconnectAttempts>100){e.warn(`[${t}] Giving up bridge reconnection after 100 attempts`),n?.(`chrome_bridge_reconnect_exhausted`,{total_attempts:100}),this.reconnectAttempts=0;return}let r=Math.min(2e3*1.5**(this.reconnectAttempts-1),3e4);(this.reconnectAttempts<=10||this.reconnectAttempts%10==0)&&e.info(`[${t}] Bridge reconnecting in ${Math.round(r)}ms (attempt ${this.reconnectAttempts})`),this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=null,this.connect()},r)}closeSocket(){if(this.ws&&(this.ws.removeAllListeners(),this.ws.close(),this.ws=null),this.connected=!1,this.authenticated=!1,this.selectedDeviceId=void 0,this.discoveryComplete=!1,this.pendingPairingRequestId=void 0,this.pairingInProgress=!1,this.pendingSwitchResolve&&(this.pendingSwitchResolve(null),this.pendingSwitchResolve=null),this.pendingDiscovery&&(clearTimeout(this.pendingDiscovery.timeout),this.pendingDiscovery.resolve([]),this.pendingDiscovery=null),this.peerConnectedWaiters.length>0){let e=this.peerConnectedWaiters;this.peerConnectedWaiters=[];for(let t of e)t(!1)}}cleanup(){this.reconnectTimer&&(clearTimeout(this.reconnectTimer),this.reconnectTimer=null);for(let[e,t]of this.pendingCalls)clearTimeout(t.timer),t.reject(new b(`Bridge client disconnected`)),this.pendingCalls.delete(e);this.closeSocket(),this.reconnectAttempts=0}}})),O,k=e((()=>{O=[{name:`javascript_tool`,description:`Execute JavaScript code in the context of the current page. The code runs in the page's context and can interact with the DOM, window object, and page variables. Returns the result of the last expression or any thrown errors. If you don't have a valid tab ID, use tabs_context_mcp first to get available tabs.`,inputSchema:{type:`object`,properties:{action:{type:`string`,description:`Must be set to 'javascript_exec'`},text:{type:`string`,description:`The JavaScript code to execute. The code will be evaluated in the page context. The result of the last expression will be returned automatically. Do NOT use 'return' statements - just write the expression you want to evaluate (e.g., 'window.myData.value' not 'return window.myData.value'). You can access and modify the DOM, call page functions, and interact with page variables.`},tabId:{type:`number`,description:`Tab ID to execute the code in. Must be a tab in the current group. Use tabs_context_mcp first if you don't have a valid tab ID.`}},required:[`action`,`text`,`tabId`]}},{name:`read_page`,description:`Get an accessibility tree representation of elements on the page. By default returns all elements including non-visible ones. Output is limited to 50000 characters by default. If the output exceeds this limit, you will receive an error asking you to specify a smaller depth or focus on a specific element using ref_id. Optionally filter for only interactive elements. If you don't have a valid tab ID, use tabs_context_mcp first to get available tabs.`,inputSchema:{type:`object`,properties:{filter:{type:`string`,enum:[`interactive`,`all`],description:`Filter elements: "interactive" for buttons/links/inputs only, "all" for all elements including non-visible ones (default: all elements)`},tabId:{type:`number`,description:`Tab ID to read from. Must be a tab in the current group. Use tabs_context_mcp first if you don't have a valid tab ID.`},depth:{type:`number`,description:`Maximum depth of the tree to traverse (default: 15). Use a smaller depth if output is too large.`},ref_id:{type:`string`,description:`Reference ID of a parent element to read. Will return the specified element and all its children. Use this to focus on a specific part of the page when output is too large.`},max_chars:{type:`number`,description:`Maximum characters for output (default: 50000). Set to a higher value if your client can handle large outputs.`}},required:[`tabId`]}},{name:`find`,description:`Find elements on the page using natural language. Can search for elements by their purpose (e.g., "search bar", "login button") or by text content (e.g., "organic mango product"). Returns up to 20 matching elements with references that can be used with other tools. If more than 20 matches exist, you'll be notified to use a more specific query. If you don't have a valid tab ID, use tabs_context_mcp first to get available tabs.`,inputSchema:{type:`object`,properties:{query:{type:`string`,description:`Natural language description of what to find (e.g., "search bar", "add to cart button", "product title containing organic")`},tabId:{type:`number`,description:`Tab ID to search in. Must be a tab in the current group. Use tabs_context_mcp first if you don't have a valid tab ID.`}},required:[`query`,`tabId`]}},{name:`form_input`,description:`Set values in form elements using element reference ID from the read_page tool. If you don't have a valid tab ID, use tabs_context_mcp first to get available tabs.`,inputSchema:{type:`object`,properties:{ref:{type:`string`,description:`Element reference ID from the read_page tool (e.g., "ref_1", "ref_2")`},value:{type:[`string`,`boolean`,`number`],description:`The value to set. For checkboxes use boolean, for selects use option value or text, for other inputs use appropriate string/number`},tabId:{type:`number`,description:`Tab ID to set form value in. Must be a tab in the current group. Use tabs_context_mcp first if you don't have a valid tab ID.`}},required:[`ref`,`value`,`tabId`]}},{name:`computer`,description:`Use a mouse and keyboard to interact with a web browser, and take screenshots. If you don't have a valid tab ID, use tabs_context_mcp first to get available tabs.
3
+ * Whenever you intend to click on an element like an icon, you should consult a screenshot to determine the coordinates of the element before moving the cursor.
4
+ * If you tried clicking on a program or link but it failed to load, even after waiting, try adjusting your click location so that the tip of the cursor visually falls on the element that you want to click.
5
+ * Make sure to click any buttons, links, icons, etc with the cursor tip in the center of the element. Don't click boxes on their edges unless asked.`,inputSchema:{type:`object`,properties:{action:{type:`string`,enum:[`left_click`,`right_click`,`type`,`screenshot`,`wait`,`scroll`,`key`,`left_click_drag`,`double_click`,`triple_click`,`zoom`,`scroll_to`,`hover`],description:"The action to perform:\n* `left_click`: Click the left mouse button at the specified coordinates.\n* `right_click`: Click the right mouse button at the specified coordinates to open context menus.\n* `double_click`: Double-click the left mouse button at the specified coordinates.\n* `triple_click`: Triple-click the left mouse button at the specified coordinates.\n* `type`: Type a string of text.\n* `screenshot`: Take a screenshot of the screen.\n* `wait`: Wait for a specified number of seconds.\n* `scroll`: Scroll up, down, left, or right at the specified coordinates.\n* `key`: Press a specific keyboard key.\n* `left_click_drag`: Drag from start_coordinate to coordinate.\n* `zoom`: Take a screenshot of a specific region for closer inspection.\n* `scroll_to`: Scroll an element into view using its element reference ID from read_page or find tools.\n* `hover`: Move the mouse cursor to the specified coordinates or element without clicking. Useful for revealing tooltips, dropdown menus, or triggering hover states."},coordinate:{type:`array`,items:{type:`number`},minItems:2,maxItems:2,description:"(x, y): The x (pixels from the left edge) and y (pixels from the top edge) coordinates. Required for `left_click`, `right_click`, `double_click`, `triple_click`, and `scroll`. For `left_click_drag`, this is the end position."},text:{type:`string`,description:'The text to type (for `type` action) or the key(s) to press (for `key` action). For `key` action: Provide space-separated keys (e.g., "Backspace Backspace Delete"). Supports keyboard shortcuts using the platform\'s modifier key (use "cmd" on Mac, "ctrl" on Windows/Linux, e.g., "cmd+a" or "ctrl+a" for select all).'},duration:{type:`number`,minimum:0,maximum:30,description:"The number of seconds to wait. Required for `wait`. Maximum 30 seconds."},scroll_direction:{type:`string`,enum:[`up`,`down`,`left`,`right`],description:"The direction to scroll. Required for `scroll`."},scroll_amount:{type:`number`,minimum:1,maximum:10,description:"The number of scroll wheel ticks. Optional for `scroll`, defaults to 3."},start_coordinate:{type:`array`,items:{type:`number`},minItems:2,maxItems:2,description:"(x, y): The starting coordinates for `left_click_drag`."},region:{type:`array`,items:{type:`number`},minItems:4,maxItems:4,description:"(x0, y0, x1, y1): The rectangular region to capture for `zoom`. Coordinates define a rectangle from top-left (x0, y0) to bottom-right (x1, y1) in pixels from the viewport origin. Required for `zoom` action. Useful for inspecting small UI elements like icons, buttons, or text."},repeat:{type:`number`,minimum:1,maximum:100,description:"Number of times to repeat the key sequence. Only applicable for `key` action. Must be a positive integer between 1 and 100. Default is 1. Useful for navigation tasks like pressing arrow keys multiple times."},ref:{type:`string`,description:'Element reference ID from read_page or find tools (e.g., "ref_1", "ref_2"). Required for `scroll_to` action. Can be used as alternative to `coordinate` for click actions.'},modifiers:{type:`string`,description:`Modifier keys for click actions. Supports: "ctrl", "shift", "alt", "cmd" (or "meta"), "win" (or "windows"). Can be combined with "+" (e.g., "ctrl+shift", "cmd+alt"). Optional.`},tabId:{type:`number`,description:`Tab ID to execute the action on. Must be a tab in the current group. Use tabs_context_mcp first if you don't have a valid tab ID.`}},required:[`action`,`tabId`]}},{name:`navigate`,description:`Navigate to a URL, or go forward/back in browser history. If you don't have a valid tab ID, use tabs_context_mcp first to get available tabs.`,inputSchema:{type:`object`,properties:{url:{type:`string`,description:`The URL to navigate to. Can be provided with or without protocol (defaults to https://). Use "forward" to go forward in history or "back" to go back in history.`},tabId:{type:`number`,description:`Tab ID to navigate. Must be a tab in the current group. Use tabs_context_mcp first if you don't have a valid tab ID.`}},required:[`url`,`tabId`]}},{name:`resize_window`,description:`Resize the current browser window to specified dimensions. Useful for testing responsive designs or setting up specific screen sizes. If you don't have a valid tab ID, use tabs_context_mcp first to get available tabs.`,inputSchema:{type:`object`,properties:{width:{type:`number`,description:`Target window width in pixels`},height:{type:`number`,description:`Target window height in pixels`},tabId:{type:`number`,description:`Tab ID to get the window for. Must be a tab in the current group. Use tabs_context_mcp first if you don't have a valid tab ID.`}},required:[`width`,`height`,`tabId`]}},{name:`gif_creator`,description:`Manage GIF recording and export for browser automation sessions. Control when to start/stop recording browser actions (clicks, scrolls, navigation), then export as an animated GIF with visual overlays (click indicators, action labels, progress bar, watermark). All operations are scoped to the tab's group. When starting recording, take a screenshot immediately after to capture the initial state as the first frame. When stopping recording, take a screenshot immediately before to capture the final state as the last frame. For export, either provide 'coordinate' to drag/drop upload to a page element, or set 'download: true' to download the GIF.`,inputSchema:{type:`object`,properties:{action:{type:`string`,enum:[`start_recording`,`stop_recording`,`export`,`clear`],description:`Action to perform: 'start_recording' (begin capturing), 'stop_recording' (stop capturing but keep frames), 'export' (generate and export GIF), 'clear' (discard frames)`},tabId:{type:`number`,description:`Tab ID to identify which tab group this operation applies to`},download:{type:`boolean`,description:`Always set this to true for the 'export' action only. This causes the gif to be downloaded in the browser.`},filename:{type:`string`,description:`Optional filename for exported GIF (default: 'recording-[timestamp].gif'). For 'export' action only.`},options:{type:`object`,description:`Optional GIF enhancement options for 'export' action. Properties: showClickIndicators (bool), showDragPaths (bool), showActionLabels (bool), showProgressBar (bool), showWatermark (bool), quality (number 1-30). All default to true except quality (default: 10).`,properties:{showClickIndicators:{type:`boolean`,description:`Show orange circles at click locations (default: true)`},showDragPaths:{type:`boolean`,description:`Show red arrows for drag actions (default: true)`},showActionLabels:{type:`boolean`,description:`Show black labels describing actions (default: true)`},showProgressBar:{type:`boolean`,description:`Show orange progress bar at bottom (default: true)`},showWatermark:{type:`boolean`,description:`Show Claude logo watermark (default: true)`},quality:{type:`number`,description:`GIF compression quality, 1-30 (lower = better quality, slower encoding). Default: 10`}}}},required:[`action`,`tabId`]}},{name:`upload_image`,description:`Upload a previously captured screenshot or user-uploaded image to a file input or drag & drop target. Supports two approaches: (1) ref - for targeting specific elements, especially hidden file inputs, (2) coordinate - for drag & drop to visible locations like Google Docs. Provide either ref or coordinate, not both.`,inputSchema:{type:`object`,properties:{imageId:{type:`string`,description:`ID of a previously captured screenshot (from the computer tool's screenshot action) or a user-uploaded image`},ref:{type:`string`,description:`Element reference ID from read_page or find tools (e.g., "ref_1", "ref_2"). Use this for file inputs (especially hidden ones) or specific elements. Provide either ref or coordinate, not both.`},coordinate:{type:`array`,items:{type:`number`},description:`Viewport coordinates [x, y] for drag & drop to a visible location. Use this for drag & drop targets like Google Docs. Provide either ref or coordinate, not both.`},tabId:{type:`number`,description:`Tab ID where the target element is located. This is where the image will be uploaded to.`},filename:{type:`string`,description:`Optional filename for the uploaded file (default: "image.png")`}},required:[`imageId`,`tabId`]}},{name:`get_page_text`,description:`Extract raw text content from the page, prioritizing article content. Ideal for reading articles, blog posts, or other text-heavy pages. Returns plain text without HTML formatting. If you don't have a valid tab ID, use tabs_context_mcp first to get available tabs.`,inputSchema:{type:`object`,properties:{tabId:{type:`number`,description:`Tab ID to extract text from. Must be a tab in the current group. Use tabs_context_mcp first if you don't have a valid tab ID.`}},required:[`tabId`]}},{name:`tabs_context_mcp`,title:`Tabs Context`,description:`Get context information about the current MCP tab group. Returns all tab IDs inside the group if it exists. CRITICAL: You must get the context at least once before using other browser automation tools so you know what tabs exist. Each new conversation should create its own new tab (using tabs_create_mcp) rather than reusing existing tabs, unless the user explicitly asks to use an existing tab.`,inputSchema:{type:`object`,properties:{createIfEmpty:{type:`boolean`,description:`Creates a new MCP tab group if none exists, creates a new Window with a new tab group containing an empty tab (which can be used for this conversation). If a MCP tab group already exists, this parameter has no effect.`}},required:[]}},{name:`tabs_create_mcp`,title:`Tabs Create`,description:`Creates a new empty tab in the MCP tab group. CRITICAL: You must get the context using tabs_context_mcp at least once before using other browser automation tools so you know what tabs exist.`,inputSchema:{type:`object`,properties:{},required:[]}},{name:`update_plan`,description:`Present a plan to the user for approval before taking actions. The user will see the domains you intend to visit and your approach. Once approved, you can proceed with actions on the approved domains without additional permission prompts.`,inputSchema:{type:`object`,properties:{domains:{type:`array`,items:{type:`string`},description:`List of domains you will visit (e.g., ['github.com', 'stackoverflow.com']). These domains will be approved for the session when the user accepts the plan.`},approach:{type:`array`,items:{type:`string`},description:`High-level description of what you will do. Focus on outcomes and key actions, not implementation details. Be concise - aim for 3-7 items.`}},required:[`domains`,`approach`]}},{name:`read_console_messages`,description:`Read browser console messages (console.log, console.error, console.warn, etc.) from a specific tab. Useful for debugging JavaScript errors, viewing application logs, or understanding what's happening in the browser console. Returns console messages from the current domain only. If you don't have a valid tab ID, use tabs_context_mcp first to get available tabs. IMPORTANT: Always provide a pattern to filter messages - without a pattern, you may get too many irrelevant messages.`,inputSchema:{type:`object`,properties:{tabId:{type:`number`,description:`Tab ID to read console messages from. Must be a tab in the current group. Use tabs_context_mcp first if you don't have a valid tab ID.`},onlyErrors:{type:`boolean`,description:`If true, only return error and exception messages. Default is false (return all message types).`},clear:{type:`boolean`,description:`If true, clear the console messages after reading to avoid duplicates on subsequent calls. Default is false.`},pattern:{type:`string`,description:`Regex pattern to filter console messages. Only messages matching this pattern will be returned (e.g., 'error|warning' to find errors and warnings, 'MyApp' to filter app-specific logs). You should always provide a pattern to avoid getting too many irrelevant messages.`},limit:{type:`number`,description:`Maximum number of messages to return. Defaults to 100. Increase only if you need more results.`}},required:[`tabId`]}},{name:`read_network_requests`,description:`Read HTTP network requests (XHR, Fetch, documents, images, etc.) from a specific tab. Useful for debugging API calls, monitoring network activity, or understanding what requests a page is making. Returns all network requests made by the current page, including cross-origin requests. Requests are automatically cleared when the page navigates to a different domain. If you don't have a valid tab ID, use tabs_context_mcp first to get available tabs.`,inputSchema:{type:`object`,properties:{tabId:{type:`number`,description:`Tab ID to read network requests from. Must be a tab in the current group. Use tabs_context_mcp first if you don't have a valid tab ID.`},urlPattern:{type:`string`,description:`Optional URL pattern to filter requests. Only requests whose URL contains this string will be returned (e.g., '/api/' to filter API calls, 'example.com' to filter by domain).`},clear:{type:`boolean`,description:`If true, clear the network requests after reading to avoid duplicates on subsequent calls. Default is false.`},limit:{type:`number`,description:`Maximum number of requests to return. Defaults to 100. Increase only if you need more results.`}},required:[`tabId`]}},{name:`shortcuts_list`,description:`List all available shortcuts and workflows (shortcuts and workflows are interchangeable). Returns shortcuts with their commands, descriptions, and whether they are workflows. Use shortcuts_execute to run a shortcut or workflow.`,inputSchema:{type:`object`,properties:{tabId:{type:`number`,description:`Tab ID to list shortcuts from. Must be a tab in the current group. Use tabs_context_mcp first if you don't have a valid tab ID.`}},required:[`tabId`]}},{name:`shortcuts_execute`,description:`Execute a shortcut or workflow by running it in a new sidepanel window using the current tab (shortcuts and workflows are interchangeable). Use shortcuts_list first to see available shortcuts. This starts the execution and returns immediately - it does not wait for completion.`,inputSchema:{type:`object`,properties:{tabId:{type:`number`,description:`Tab ID to execute the shortcut on. Must be a tab in the current group. Use tabs_context_mcp first if you don't have a valid tab ID.`},shortcutId:{type:`string`,description:`The ID of the shortcut to execute`},command:{type:`string`,description:`The command name of the shortcut to execute (e.g., 'debug', 'summarize'). Do not include the leading slash.`}},required:[`tabId`]}},{name:`switch_browser`,description:`Switch which Chrome browser is used for browser automation. Call this when the user wants to connect to a different Chrome browser. Broadcasts a connection request to all Chrome browsers with the extension installed — the user clicks 'Connect' in the desired browser.`,inputSchema:{type:`object`,properties:{},required:[]}}]}));function A(e){return new j(e)}var j,M=e((()=>{S(),t(),j=class{constructor(e){n(this,`clients`,new Map),n(this,`tabRoutes`,new Map),n(this,`context`,void 0),n(this,`notificationHandler`,null),this.context=e}setNotificationHandler(e){this.notificationHandler=e;for(let t of this.clients.values())t.setNotificationHandler(e)}async ensureConnected(){let{logger:e,serverName:t}=this.context;this.refreshClients();let n=[];for(let e of this.clients.values())e.isConnected()||n.push(e.ensureConnected().catch(()=>!1));n.length>0&&await Promise.all(n);let r=this.getConnectedClients().length;return r===0?(e.info(`[${t}] No connected sockets in pool`),!1):(e.info(`[${t}] Socket pool: ${r} connected`),!0)}async callTool(e,t,n){if(e===`tabs_context_mcp`)return this.callTabsContext(t);let r=t.tabId;if(r!==void 0){let n=this.tabRoutes.get(r);if(n){let r=this.clients.get(n);if(r?.isConnected())return r.callTool(e,t)}}let i=this.getConnectedClients();if(i.length===0)throw new b(`[${this.context.serverName}] No connected sockets available`);return i[0].callTool(e,t)}async setPermissionMode(e,t){let n=this.getConnectedClients();await Promise.all(n.map(n=>n.setPermissionMode(e,t)))}isConnected(){return this.getConnectedClients().length>0}disconnect(){for(let e of this.clients.values())e.disconnect();this.clients.clear(),this.tabRoutes.clear()}getConnectedClients(){return[...this.clients.values()].filter(e=>e.isConnected())}async callTabsContext(e){let{logger:t,serverName:n}=this.context,r=this.getConnectedClients();if(r.length===0)throw new b(`[${n}] No connected sockets available`);if(r.length===1){let t=await r[0].callTool(`tabs_context_mcp`,e);return this.updateTabRoutes(t,this.getSocketPathForClient(r[0])),t}let i=await Promise.allSettled(r.map(async t=>({result:await t.callTool(`tabs_context_mcp`,e),socketPath:this.getSocketPathForClient(t)}))),a=[];this.tabRoutes.clear();for(let e of i){if(e.status!==`fulfilled`){t.info(`[${n}] tabs_context_mcp failed on one socket: ${e.reason}`);continue}let{result:r,socketPath:i}=e.value;this.updateTabRoutes(r,i);let o=this.extractTabs(r);o&&a.push(...o)}if(a.length>0){let e=a.map(e=>{let t=e;return` • tabId ${t.tabId}: "${t.title}" (${t.url})`}).join(`
6
+ `);return{result:{content:[{type:`text`,text:JSON.stringify({availableTabs:a})},{type:`text`,text:`\n\nTab Context:\n- Available tabs:\n${e}`}]}}}for(let e of i)if(e.status===`fulfilled`)return e.value.result;throw new b(`[${n}] All sockets failed for tabs_context_mcp`)}updateTabRoutes(e,t){let n=this.extractTabs(e);if(n){for(let e of n)if(typeof e==`object`&&e&&`tabId`in e){let n=e.tabId;this.tabRoutes.set(n,t)}}}extractTabs(e){if(!e||typeof e!=`object`)return null;let t=e.result?.content;if(!t||!Array.isArray(t))return null;for(let e of t)if(e.type===`text`&&e.text)try{let t=JSON.parse(e.text);if(Array.isArray(t))return t;if(t&&Array.isArray(t.availableTabs))return t.availableTabs}catch{}return null}getSocketPathForClient(e){for(let[t,n]of this.clients.entries())if(n===e)return t;return``}refreshClients(){let e=this.getAvailableSocketPaths(),{logger:t,serverName:n}=this.context;for(let r of e)if(!this.clients.has(r)){t.info(`[${n}] Adding socket to pool: ${r}`);let e=y({...this.context,socketPath:r,getSocketPath:void 0,getSocketPaths:void 0});e.disableAutoReconnect=!0,this.notificationHandler&&e.setNotificationHandler(this.notificationHandler),this.clients.set(r,e)}for(let[r,i]of this.clients.entries())if(!e.includes(r)){t.info(`[${n}] Removing stale socket from pool: ${r}`),i.disconnect(),this.clients.delete(r);for(let[e,t]of this.tabRoutes.entries())t===r&&this.tabRoutes.delete(e)}}getAvailableSocketPaths(){return this.context.getSocketPaths?.()??[]}}}));async function N(e,t,n,r,i){let a=await t.callTool(n,r,i);if(e.logger.silly(`[${e.serverName}] Received result from socket bridge: ${JSON.stringify(a)}`),a==null)return{content:[{type:`text`,text:`Tool execution completed`}]};let{result:o,error:s}=a,c=s||o,l=!!s;if(!c)return{content:[{type:`text`,text:`Tool execution completed`}]};l&&L(c.content)&&e.onAuthenticationError();let{content:u}=c;return u&&Array.isArray(u)?l?{content:u.map(e=>typeof e==`object`&&e&&`type`in e?e:{type:`text`,text:String(e)}),isError:!0}:{content:u.map(e=>{if(typeof e==`object`&&e&&`type`in e&&`source`in e){let t=e;if(t.type===`image`&&typeof t.source==`object`&&t.source!==null&&`data`in t.source)return{type:`image`,data:t.source.data,mimeType:`media_type`in t.source&&t.source.media_type||`image/png`}}return typeof e==`object`&&e&&`type`in e?e:{type:`text`,text:String(e)}}),isError:l}:typeof u==`string`?{content:[{type:`text`,text:u}],isError:l}:(e.logger.warn(`[${e.serverName}] Unexpected result format from socket bridge: ${JSON.stringify(a)}`),{content:[{type:`text`,text:JSON.stringify(a)}],isError:l})}function P(e){return{content:[{type:`text`,text:e.onToolCallDisconnected()}]}}async function F(e,t){let n=[`ask`,`skip_all_permission_checks`,`follow_a_plan`],r=t.mode,i=r&&n.includes(r)?r:`ask`;return e.setPermissionMode&&await e.setPermissionMode(i,t.allowed_domains),{content:[{type:`text`,text:`Permission mode set to: ${i}`}]}}async function I(e,t){if(!e.bridgeConfig)return{content:[{type:`text`,text:`Browser switching is only available with bridge connections.`}],isError:!0};if(!await t.ensureConnected())return P(e);let n=await t.switchBrowser?.()??null;return n===`no_other_browsers`?{content:[{type:`text`,text:`No other browsers available to switch to. Open Chrome with the Claude extension in another browser to switch.`}],isError:!0}:n?{content:[{type:`text`,text:`Connected to browser "${n.name}".`}]}:{content:[{type:`text`,text:`No browser responded within the timeout. Make sure Chrome is open with the Claude extension installed, then try again.`}],isError:!0}}function L(e){return(Array.isArray(e)?e.map(e=>typeof e==`string`?e:typeof e==`object`&&e&&`text`in e&&typeof e.text==`string`?e.text:``).join(` `):String(e)).toLowerCase().includes(`re-authenticated`)}var R,z=e((()=>{S(),g(),R=async(e,t,n,r,i)=>{if(n===`set_permission_mode`)return F(t,r);if(n===`switch_browser`)return I(e,t);try{let a=await t.ensureConnected();return e.logger.silly(`[${e.serverName}] Server is connected: ${a}. Received tool call: ${n} with args: ${JSON.stringify(r)}.`),a?await N(e,t,n,r,i):P(e)}catch(t){return e.logger.info(`[${e.serverName}] Error calling tool:`,m(t)),t instanceof b?P(e):{content:[{type:`text`,text:`Error calling tool, please try again. : ${t instanceof Error?t.message:String(t)}`}],isError:!0}}}}));function B(e){return e.bridgeConfig?C(e):e.getSocketPaths?A(e):y(e)}function V(e,t){let{serverName:n,logger:r}=e,i=t??B(e),a=new l({name:n,version:`1.0.0`},{capabilities:{tools:{},logging:{}}});return a.setRequestHandler(o,async()=>e.isDisabled?.()?{tools:[]}:{tools:e.bridgeConfig?O:O.filter(e=>e.name!==`switch_browser`)}),a.setRequestHandler(s,async t=>(r.info(`[${n}] Executing tool: ${t.params.name}`),R(e,i,t.params.name,t.params.arguments||{}))),i.setNotificationHandler(e=>{r.info(`[${n}] Forwarding MCP notification: ${e.method}`),a.notification({method:e.method,params:e.params}).catch(e=>{r.info(`[${n}] Failed to forward MCP notification: ${e.message}`)})}),a}var H=e((()=>{c(),a(),D(),k(),S(),M(),z()})),U=e((()=>{D(),k(),H(),g()}));export{E as a,m as c,O as i,B as n,C as o,V as r,h as s,U as t};
@@ -0,0 +1,2 @@
1
+ import{a as e,i as t,n,o as r,r as i,t as a}from"./chunk-DR8-3Aex.js";import{i as o,s,t as c}from"./satisfies-B7ZvBUQP.js";import{n as l,t as u}from"./color-convert-BQZnVz_5.js";import{t as d}from"./detect-libc-DFFGDzPC.js";import"node:fs";var f=a(((e,t)=>{var n=function(e){return e!=null};t.exports={defined:n,object:function(e){return typeof e==`object`},plainObject:function(e){return Object.prototype.toString.call(e)===`[object Object]`},fn:function(e){return typeof e==`function`},bool:function(e){return typeof e==`boolean`},buffer:function(e){return e instanceof Buffer},typedArray:function(e){if(n(e))switch(e.constructor){case Uint8Array:case Uint8ClampedArray:case Int8Array:case Uint16Array:case Int16Array:case Uint32Array:case Int32Array:case Float32Array:case Float64Array:return!0}return!1},arrayBuffer:function(e){return e instanceof ArrayBuffer},string:function(e){return typeof e==`string`&&e.length>0},number:function(e){return typeof e==`number`&&!Number.isNaN(e)},integer:function(e){return Number.isInteger(e)},inRange:function(e,t,n){return e>=t&&e<=n},inArray:function(e,t){return t.includes(e)},invalidParameterError:function(e,t,n){return Error(`Expected ${t} for ${e} but received ${n} of type ${typeof n}`)},nativeError:function(e,t){return t.message=e.message,t}}})),p=i({author:()=>_,binary:()=>P,cc:()=>I,config:()=>M,contributors:()=>y,default:()=>z,dependencies:()=>D,description:()=>h,devDependencies:()=>k,engines:()=>j,files:()=>w,funding:()=>N,homepage:()=>v,keywords:()=>E,license:()=>A,main:()=>S,name:()=>m,nyc:()=>L,optionalDependencies:()=>O,repository:()=>T,scripts:()=>b,semistandard:()=>F,tsd:()=>R,type:()=>x,types:()=>C,version:()=>g}),m,h,g,_,v,y,b,x,S,C,w,T,E,D,O,k,A,j,M,N,P,F,I,L,R,z,B=n((()=>{m=`sharp`,h=`High performance Node.js image processing, the fastest module to resize JPEG, PNG, WebP, GIF, AVIF and TIFF images`,g=`0.33.5`,_=`Lovell Fuller <npm@lovell.info>`,v=`https://sharp.pixelplumbing.com`,y=`Pierre Inglebert <pierre.inglebert@gmail.com>,Jonathan Ong <jonathanrichardong@gmail.com>,Chanon Sajjamanochai <chanon.s@gmail.com>,Juliano Julio <julianojulio@gmail.com>,Daniel Gasienica <daniel@gasienica.ch>,Julian Walker <julian@fiftythree.com>,Amit Pitaru <pitaru.amit@gmail.com>,Brandon Aaron <hello.brandon@aaron.sh>,Andreas Lind <andreas@one.com>,Maurus Cuelenaere <mcuelenaere@gmail.com>,Linus Unnebäck <linus@folkdatorn.se>,Victor Mateevitsi <mvictoras@gmail.com>,Alaric Holloway <alaric.holloway@gmail.com>,Bernhard K. Weisshuhn <bkw@codingforce.com>,Chris Riley <criley@primedia.com>,David Carley <dacarley@gmail.com>,John Tobin <john@limelightmobileinc.com>,Kenton Gray <kentongray@gmail.com>,Felix Bünemann <Felix.Buenemann@gmail.com>,Samy Al Zahrani <samyalzahrany@gmail.com>,Chintan Thakkar <lemnisk8@gmail.com>,F. Orlando Galashan <frulo@gmx.de>,Kleis Auke Wolthuizen <info@kleisauke.nl>,Matt Hirsch <mhirsch@media.mit.edu>,Matthias Thoemmes <thoemmes@gmail.com>,Patrick Paskaris <patrick@paskaris.gr>,Jérémy Lal <kapouer@melix.org>,Rahul Nanwani <r.nanwani@gmail.com>,Alice Monday <alice0meta@gmail.com>,Kristo Jorgenson <kristo.jorgenson@gmail.com>,YvesBos <yves_bos@outlook.com>,Guy Maliar <guy@tailorbrands.com>,Nicolas Coden <nicolas@ncoden.fr>,Matt Parrish <matt.r.parrish@gmail.com>,Marcel Bretschneider <marcel.bretschneider@gmail.com>,Matthew McEachen <matthew+github@mceachen.org>,Jarda Kotěšovec <jarda.kotesovec@gmail.com>,Kenric D'Souza <kenric.dsouza@gmail.com>,Oleh Aleinyk <oleg.aleynik@gmail.com>,Marcel Bretschneider <marcel.bretschneider@gmail.com>,Andrea Bianco <andrea.bianco@unibas.ch>,Rik Heywood <rik@rik.org>,Thomas Parisot <hi@oncletom.io>,Nathan Graves <nathanrgraves+github@gmail.com>,Tom Lokhorst <tom@lokhorst.eu>,Espen Hovlandsdal <espen@hovlandsdal.com>,Sylvain Dumont <sylvain.dumont35@gmail.com>,Alun Davies <alun.owain.davies@googlemail.com>,Aidan Hoolachan <ajhoolachan21@gmail.com>,Axel Eirola <axel.eirola@iki.fi>,Freezy <freezy@xbmc.org>,Daiz <taneli.vatanen@gmail.com>,Julian Aubourg <j@ubourg.net>,Keith Belovay <keith@picthrive.com>,Michael B. Klein <mbklein@gmail.com>,Jordan Prudhomme <jordan@raboland.fr>,Ilya Ovdin <iovdin@gmail.com>,Andargor <andargor@yahoo.com>,Paul Neave <paul.neave@gmail.com>,Brendan Kennedy <brenwken@gmail.com>,Brychan Bennett-Odlum <git@brychan.io>,Edward Silverton <e.silverton@gmail.com>,Roman Malieiev <aromaleev@gmail.com>,Tomas Szabo <tomas.szabo@deftomat.com>,Robert O'Rourke <robert@o-rourke.org>,Guillermo Alfonso Varela Chouciño <guillevch@gmail.com>,Christian Flintrup <chr@gigahost.dk>,Manan Jadhav <manan@motionden.com>,Leon Radley <leon@radley.se>,alza54 <alza54@thiocod.in>,Jacob Smith <jacob@frende.me>,Michael Nutt <michael@nutt.im>,Brad Parham <baparham@gmail.com>,Taneli Vatanen <taneli.vatanen@gmail.com>,Joris Dugué <zaruike10@gmail.com>,Chris Banks <christopher.bradley.banks@gmail.com>,Ompal Singh <ompal.hitm09@gmail.com>,Brodan <christopher.hranj@gmail.com>,Ankur Parihar <ankur.github@gmail.com>,Brahim Ait elhaj <brahima@gmail.com>,Mart Jansink <m.jansink@gmail.com>,Lachlan Newman <lachnewman007@gmail.com>,Dennis Beatty <dennis@dcbeatty.com>,Ingvar Stepanyan <me@rreverser.com>,Don Denton <don@happycollision.com>`.split(`,`),b={install:`node install/check`,clean:`rm -rf src/build/ .nyc_output/ coverage/ test/fixtures/output.*`,test:`npm run test-lint && npm run test-unit && npm run test-licensing && npm run test-types`,"test-lint":`semistandard && cpplint`,"test-unit":`nyc --reporter=lcov --reporter=text --check-coverage --branches=100 mocha`,"test-licensing":`license-checker --production --summary --onlyAllow="Apache-2.0;BSD;ISC;LGPL-3.0-or-later;MIT"`,"test-leak":`./test/leak/leak.sh`,"test-types":`tsd`,"package-from-local-build":`node npm/from-local-build`,"package-from-github-release":`node npm/from-github-release`,"docs-build":`node docs/build && node docs/search-index/build`,"docs-serve":`cd docs && npx serve`,"docs-publish":`cd docs && npx firebase-tools deploy --project pixelplumbing --only hosting:pixelplumbing-sharp`},x=`commonjs`,S=`lib/index.js`,C=`lib/index.d.ts`,w=[`install`,`lib`,`src/*.{cc,h,gyp}`],T={type:`git`,url:`git://github.com/lovell/sharp.git`},E=[`jpeg`,`png`,`webp`,`avif`,`tiff`,`gif`,`svg`,`jp2`,`dzi`,`image`,`resize`,`thumbnail`,`crop`,`embed`,`libvips`,`vips`],D={color:`^4.2.3`,"detect-libc":`^2.0.3`,semver:`^7.6.3`},O={"@img/sharp-darwin-arm64":`0.33.5`,"@img/sharp-darwin-x64":`0.33.5`,"@img/sharp-libvips-darwin-arm64":`1.0.4`,"@img/sharp-libvips-darwin-x64":`1.0.4`,"@img/sharp-libvips-linux-arm":`1.0.5`,"@img/sharp-libvips-linux-arm64":`1.0.4`,"@img/sharp-libvips-linux-s390x":`1.0.4`,"@img/sharp-libvips-linux-x64":`1.0.4`,"@img/sharp-libvips-linuxmusl-arm64":`1.0.4`,"@img/sharp-libvips-linuxmusl-x64":`1.0.4`,"@img/sharp-linux-arm":`0.33.5`,"@img/sharp-linux-arm64":`0.33.5`,"@img/sharp-linux-s390x":`0.33.5`,"@img/sharp-linux-x64":`0.33.5`,"@img/sharp-linuxmusl-arm64":`0.33.5`,"@img/sharp-linuxmusl-x64":`0.33.5`,"@img/sharp-wasm32":`0.33.5`,"@img/sharp-win32-ia32":`0.33.5`,"@img/sharp-win32-x64":`0.33.5`},k={"@emnapi/runtime":`^1.2.0`,"@img/sharp-libvips-dev":`1.0.4`,"@img/sharp-libvips-dev-wasm32":`1.0.5`,"@img/sharp-libvips-win32-ia32":`1.0.4`,"@img/sharp-libvips-win32-x64":`1.0.4`,"@types/node":`*`,async:`^3.2.5`,cc:`^3.0.1`,emnapi:`^1.2.0`,"exif-reader":`^2.0.1`,"extract-zip":`^2.0.1`,icc:`^3.0.0`,"jsdoc-to-markdown":`^8.0.3`,"license-checker":`^25.0.1`,mocha:`^10.7.3`,"node-addon-api":`^8.1.0`,nyc:`^17.0.0`,prebuild:`^13.0.1`,semistandard:`^17.0.0`,"tar-fs":`^3.0.6`,tsd:`^0.31.1`},A=`Apache-2.0`,j={node:`^18.17.0 || ^20.3.0 || >=21.0.0`},M={libvips:`>=8.15.3`},N={url:`https://opencollective.com/libvips`},P={napi_versions:[9]},F={env:[`mocha`]},I={linelength:`120`,filter:[`build/include`]},L={include:[`lib`]},R={directory:`test/types/`},z={name:m,description:h,version:g,author:_,homepage:v,contributors:y,scripts:b,type:x,main:S,types:C,files:w,repository:T,keywords:E,dependencies:D,optionalDependencies:O,devDependencies:k,license:A,engines:j,config:M,funding:N,binary:P,semistandard:F,cc:I,nyc:L,tsd:R}})),V=a(((n,r)=>{var{spawnSync:i}=t(`node:child_process`),{createHash:a}=t(`node:crypto`),l=o(),u=s(),f=c(),m=d(),{config:h,engines:g,optionalDependencies:_}=(B(),e(p).default),v=l(process.env.npm_package_config_libvips||h.libvips).version,y=[`darwin-arm64`,`darwin-x64`,`linux-arm`,`linux-arm64`,`linux-s390x`,`linux-x64`,`linuxmusl-arm64`,`linuxmusl-x64`,`win32-ia32`,`win32-x64`],b={encoding:`utf8`,shell:!0},x=e=>{e instanceof Error?console.error(`sharp: Installation error: ${e.message}`):console.log(`sharp: ${e}`)},S=()=>m.isNonGlibcLinuxSync()?m.familySync():``,C=()=>`${process.platform}${S()}-${process.arch}`,w=()=>{if(k())return`wasm32`;let{npm_config_arch:e,npm_config_platform:t,npm_config_libc:n}=process.env,r=typeof n==`string`?n:S();return`${t||process.platform}${r}-${e||process.arch}`},T=()=>{try{return t(`@img/sharp-libvips-dev-${w()}/include`)}catch{try{return t(`@img/sharp-libvips-dev/include`)}catch{}}return``},E=()=>{try{return t(`@img/sharp-libvips-dev/cplusplus`)}catch{}return``},D=()=>{try{return t(`@img/sharp-libvips-dev-${w()}/lib`)}catch{try{return t(`@img/sharp-libvips-${w()}/lib`)}catch{}}return``},O=()=>{if(process.release?.name===`node`&&process.versions&&!f(process.versions.node,g.node))return{found:process.versions.node,expected:g.node}},k=()=>{let{CC:e}=process.env;return!!(e&&e.endsWith(`/emcc`))},A=()=>process.platform===`darwin`&&process.arch===`x64`?(i(`sysctl sysctl.proc_translated`,b).stdout||``).trim()===`sysctl.proc_translated: 1`:!1,j=e=>a(`sha512`).update(e).digest(`hex`),M=()=>{try{let e=j(`imgsharp-libvips-${w()}`),t=l(_[`@img/sharp-libvips-${w()}`]).version;return j(`${e}npm:${t}`).slice(0,10)}catch{}return``},N=()=>i(`node-gyp rebuild --directory=src ${k()?`--nodedir=emscripten`:``}`,{...b,stdio:`inherit`}).status,P=()=>process.platform===`win32`?``:(i(`pkg-config --modversion vips-cpp`,{...b,env:{...process.env,PKG_CONFIG_PATH:F()}}).stdout||``).trim(),F=()=>process.platform===`win32`?``:[(i(`which brew >/dev/null 2>&1 && brew environment --plain | grep PKG_CONFIG_LIBDIR | cut -d" " -f2`,b).stdout||``).trim(),process.env.PKG_CONFIG_PATH,`/usr/local/lib/pkgconfig`,`/usr/lib/pkgconfig`,`/usr/local/libdata/pkgconfig`,`/usr/libdata/pkgconfig`].filter(Boolean).join(`:`),I=(e,t,n)=>(n&&n(`Detected ${t}, skipping search for globally-installed libvips`),e);r.exports={minimumLibvipsVersion:v,prebuiltPlatforms:y,buildPlatformArch:w,buildSharpLibvipsIncludeDir:T,buildSharpLibvipsCPlusPlusDir:E,buildSharpLibvipsLibDir:D,isUnsupportedNodeRuntime:O,runtimePlatformArch:C,log:x,yarnLocator:M,spawnRebuild:N,globalLibvipsVersion:P,pkgConfigPath:F,useGlobalLibvips:e=>{if(process.env.SHARP_IGNORE_GLOBAL_LIBVIPS)return I(!1,`SHARP_IGNORE_GLOBAL_LIBVIPS`,e);if(process.env.SHARP_FORCE_GLOBAL_LIBVIPS)return I(!0,`SHARP_FORCE_GLOBAL_LIBVIPS`,e);if(A())return I(!1,`Rosetta`,e);let t=P();return!!t&&u(t,v)}}})),H=a(((e,n)=>{var{familySync:r,versionSync:i}=d(),{runtimePlatformArch:a,isUnsupportedNodeRuntime:o,prebuiltPlatforms:s,minimumLibvipsVersion:c}=V(),l=a(),u=[`../src/build/Release/sharp-${l}.node`,`../src/build/Release/sharp-wasm32.node`,`@img/sharp-${l}/sharp.node`,`@img/sharp-wasm32/sharp.node`],f,p=[];for(let e of u)try{f=t(e);break}catch(e){p.push(e)}if(f)n.exports=f;else{let[e,n,a]=[`linux`,`darwin`,`win32`].map(e=>l.startsWith(e)),u=[`Could not load the "sharp" module using the ${l} runtime`];p.forEach(e=>{e.code!==`MODULE_NOT_FOUND`&&u.push(`${e.code}: ${e.message}`)});let d=p.map(e=>e.message).join(` `);if(u.push(`Possible solutions:`),o()){let{found:e,expected:t}=o();u.push(`- Please upgrade Node.js:`,` Found ${e}`,` Requires ${t}`)}else if(s.includes(l)){let[e,t]=l.split(`-`),n=e.endsWith(`musl`)?` --libc=musl`:``;u.push(`- Ensure optional dependencies can be installed:`,` npm install --include=optional sharp`,`- Ensure your package manager supports multi-platform installation:`,` See https://sharp.pixelplumbing.com/install#cross-platform`,`- Add platform-specific dependencies:`,` npm install --os=${e.replace(`musl`,``)}${n} --cpu=${t} sharp`)}else u.push(`- Manually install libvips >= ${c}`,`- Add experimental WebAssembly-based dependencies:`,` npm install --cpu=wasm32 sharp`,` npm install @img/sharp-wasm32`);if(e&&/(symbol not found|CXXABI_)/i.test(d))try{let{config:e}=t(`@img/sharp-libvips-${l}/package`),n=`${r()} ${i()}`,a=`${e.musl?`musl`:`glibc`} ${e.musl||e.glibc}`;u.push(`- Update your OS:`,` Found ${n}`,` Requires ${a}`)}catch{}throw e&&/\/snap\/core[0-9]{2}/.test(d)&&u.push(`- Remove the Node.js Snap, which does not support native modules`,` snap remove node`),n&&/Incompatible library version/.test(d)&&u.push(`- Update Homebrew:`,` brew update && brew upgrade vips`),p.some(e=>e.code===`ERR_DLOPEN_DISABLED`)&&u.push(`- Run Node.js without using the --no-addons flag`),a&&/The specified procedure could not be found/.test(d)&&u.push(`- Using the canvas package on Windows?`,` See https://sharp.pixelplumbing.com/install#canvas-and-windows`,`- Check for outdated versions of sharp in the dependency tree:`,` npm ls sharp`),u.push(`- Consult the installation documentation:`,` See https://sharp.pixelplumbing.com/install`),Error(u.join(`
2
+ `))}})),U=a(((e,n)=>{var r=t(`node:util`),i=t(`node:stream`),a=f();H();var o=r.debuglog(`sharp`),s=function(e,t){if(arguments.length===1&&!a.defined(e))throw Error(`Invalid input`);return this instanceof s?(i.Duplex.call(this),this.options={topOffsetPre:-1,leftOffsetPre:-1,widthPre:-1,heightPre:-1,topOffsetPost:-1,leftOffsetPost:-1,widthPost:-1,heightPost:-1,width:-1,height:-1,canvas:`crop`,position:0,resizeBackground:[0,0,0,255],useExifOrientation:!1,angle:0,rotationAngle:0,rotationBackground:[0,0,0,255],rotateBeforePreExtract:!1,flip:!1,flop:!1,extendTop:0,extendBottom:0,extendLeft:0,extendRight:0,extendBackground:[0,0,0,255],extendWith:`background`,withoutEnlargement:!1,withoutReduction:!1,affineMatrix:[],affineBackground:[0,0,0,255],affineIdx:0,affineIdy:0,affineOdx:0,affineOdy:0,affineInterpolator:this.constructor.interpolators.bilinear,kernel:`lanczos3`,fastShrinkOnLoad:!0,tint:[-1,0,0,0],flatten:!1,flattenBackground:[0,0,0],unflatten:!1,negate:!1,negateAlpha:!0,medianSize:0,blurSigma:0,precision:`integer`,minAmpl:.2,sharpenSigma:0,sharpenM1:1,sharpenM2:2,sharpenX1:2,sharpenY2:10,sharpenY3:20,threshold:0,thresholdGrayscale:!0,trimBackground:[],trimThreshold:-1,trimLineArt:!1,gamma:0,gammaOut:0,greyscale:!1,normalise:!1,normaliseLower:1,normaliseUpper:99,claheWidth:0,claheHeight:0,claheMaxSlope:3,brightness:1,saturation:1,hue:0,lightness:0,booleanBufferIn:null,booleanFileIn:``,joinChannelIn:[],extractChannel:-1,removeAlpha:!1,ensureAlpha:-1,colourspace:`srgb`,colourspacePipeline:`last`,composite:[],fileOut:``,formatOut:`input`,streamOut:!1,keepMetadata:0,withMetadataOrientation:-1,withMetadataDensity:0,withIccProfile:``,withExif:{},withExifMerge:!0,resolveWithObject:!1,jpegQuality:80,jpegProgressive:!1,jpegChromaSubsampling:`4:2:0`,jpegTrellisQuantisation:!1,jpegOvershootDeringing:!1,jpegOptimiseScans:!1,jpegOptimiseCoding:!0,jpegQuantisationTable:0,pngProgressive:!1,pngCompressionLevel:6,pngAdaptiveFiltering:!1,pngPalette:!1,pngQuality:100,pngEffort:7,pngBitdepth:8,pngDither:1,jp2Quality:80,jp2TileHeight:512,jp2TileWidth:512,jp2Lossless:!1,jp2ChromaSubsampling:`4:4:4`,webpQuality:80,webpAlphaQuality:100,webpLossless:!1,webpNearLossless:!1,webpSmartSubsample:!1,webpPreset:`default`,webpEffort:4,webpMinSize:!1,webpMixed:!1,gifBitdepth:8,gifEffort:7,gifDither:1,gifInterFrameMaxError:0,gifInterPaletteMaxError:3,gifReuse:!0,gifProgressive:!1,tiffQuality:80,tiffCompression:`jpeg`,tiffPredictor:`horizontal`,tiffPyramid:!1,tiffMiniswhite:!1,tiffBitdepth:8,tiffTile:!1,tiffTileHeight:256,tiffTileWidth:256,tiffXres:1,tiffYres:1,tiffResolutionUnit:`inch`,heifQuality:50,heifLossless:!1,heifCompression:`av1`,heifEffort:4,heifChromaSubsampling:`4:4:4`,heifBitdepth:8,jxlDistance:1,jxlDecodingTier:0,jxlEffort:7,jxlLossless:!1,rawDepth:`uchar`,tileSize:256,tileOverlap:0,tileContainer:`fs`,tileLayout:`dz`,tileFormat:`last`,tileDepth:`last`,tileAngle:0,tileSkipBlanks:-1,tileBackground:[255,255,255,255],tileCentre:!1,tileId:`https://example.com/iiif`,tileBasename:``,timeoutSeconds:0,linearA:[],linearB:[],debuglog:e=>{this.emit(`warning`,e),o(e)},queueListener:function(e){s.queue.emit(`change`,e)}},this.options.input=this._createInputDescriptor(e,t,{allowStream:!0}),this):new s(e,t)};Object.setPrototypeOf(s.prototype,i.Duplex.prototype),Object.setPrototypeOf(s,i.Duplex);function c(){let e=this.constructor.call(),{debuglog:t,queueListener:n,...r}=this.options;return e.options=structuredClone(r),e.options.debuglog=t,e.options.queueListener=n,this._isStreamInput()&&this.on(`finish`,()=>{this._flattenBufferIn(),e.options.input.buffer=this.options.input.buffer,e.emit(`finish`)}),e}Object.assign(s.prototype,{clone:c}),n.exports=s})),W=a(((e,t)=>{t.exports=function(e){return!e||typeof e==`string`?!1:e instanceof Array||Array.isArray(e)||e.length>=0&&(e.splice instanceof Function||Object.getOwnPropertyDescriptor(e,e.length-1)&&e.constructor.name!==`String`)}})),G=a(((e,t)=>{var n=W(),r=Array.prototype.concat,i=Array.prototype.slice,a=t.exports=function(e){for(var t=[],a=0,o=e.length;a<o;a++){var s=e[a];n(s)?t=r.call(t,i.call(s)):t.push(s)}return t};a.wrap=function(e){return function(){return e(a(arguments))}}})),K=a(((e,t)=>{var n=l(),r=G(),i=Object.hasOwnProperty,a=Object.create(null);for(var o in n)i.call(n,o)&&(a[n[o]]=o);var s=t.exports={to:{},get:{}};s.get=function(e){var t=e.substring(0,3).toLowerCase(),n,r;switch(t){case`hsl`:n=s.get.hsl(e),r=`hsl`;break;case`hwb`:n=s.get.hwb(e),r=`hwb`;break;default:n=s.get.rgb(e),r=`rgb`;break}return n?{model:r,value:n}:null},s.get.rgb=function(e){if(!e)return null;var t=/^#([a-f0-9]{3,4})$/i,r=/^#([a-f0-9]{6})([a-f0-9]{2})?$/i,a=/^rgba?\(\s*([+-]?\d+)(?=[\s,])\s*(?:,\s*)?([+-]?\d+)(?=[\s,])\s*(?:,\s*)?([+-]?\d+)\s*(?:[,|\/]\s*([+-]?[\d\.]+)(%?)\s*)?\)$/,o=/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,?\s*([+-]?[\d\.]+)\%\s*,?\s*([+-]?[\d\.]+)\%\s*(?:[,|\/]\s*([+-]?[\d\.]+)(%?)\s*)?\)$/,s=/^(\w+)$/,l=[0,0,0,1],u,d,f;if(u=e.match(r)){for(f=u[2],u=u[1],d=0;d<3;d++){var p=d*2;l[d]=parseInt(u.slice(p,p+2),16)}f&&(l[3]=parseInt(f,16)/255)}else if(u=e.match(t)){for(u=u[1],f=u[3],d=0;d<3;d++)l[d]=parseInt(u[d]+u[d],16);f&&(l[3]=parseInt(f+f,16)/255)}else if(u=e.match(a)){for(d=0;d<3;d++)l[d]=parseInt(u[d+1],0);u[4]&&(u[5]?l[3]=parseFloat(u[4])*.01:l[3]=parseFloat(u[4]))}else if(u=e.match(o)){for(d=0;d<3;d++)l[d]=Math.round(parseFloat(u[d+1])*2.55);u[4]&&(u[5]?l[3]=parseFloat(u[4])*.01:l[3]=parseFloat(u[4]))}else if(u=e.match(s))return u[1]===`transparent`?[0,0,0,0]:i.call(n,u[1])?(l=n[u[1]],l[3]=1,l):null;else return null;for(d=0;d<3;d++)l[d]=c(l[d],0,255);return l[3]=c(l[3],0,1),l},s.get.hsl=function(e){if(!e)return null;var t=e.match(/^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,?\s*([+-]?[\d\.]+)%\s*,?\s*([+-]?[\d\.]+)%\s*(?:[,|\/]\s*([+-]?(?=\.\d|\d)(?:0|[1-9]\d*)?(?:\.\d*)?(?:[eE][+-]?\d+)?)\s*)?\)$/);if(t){var n=parseFloat(t[4]);return[(parseFloat(t[1])%360+360)%360,c(parseFloat(t[2]),0,100),c(parseFloat(t[3]),0,100),c(isNaN(n)?1:n,0,1)]}return null},s.get.hwb=function(e){if(!e)return null;var t=e.match(/^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?(?=\.\d|\d)(?:0|[1-9]\d*)?(?:\.\d*)?(?:[eE][+-]?\d+)?)\s*)?\)$/);if(t){var n=parseFloat(t[4]);return[(parseFloat(t[1])%360+360)%360,c(parseFloat(t[2]),0,100),c(parseFloat(t[3]),0,100),c(isNaN(n)?1:n,0,1)]}return null},s.to.hex=function(){var e=r(arguments);return`#`+u(e[0])+u(e[1])+u(e[2])+(e[3]<1?u(Math.round(e[3]*255)):``)},s.to.rgb=function(){var e=r(arguments);return e.length<4||e[3]===1?`rgb(`+Math.round(e[0])+`, `+Math.round(e[1])+`, `+Math.round(e[2])+`)`:`rgba(`+Math.round(e[0])+`, `+Math.round(e[1])+`, `+Math.round(e[2])+`, `+e[3]+`)`},s.to.rgb.percent=function(){var e=r(arguments),t=Math.round(e[0]/255*100),n=Math.round(e[1]/255*100),i=Math.round(e[2]/255*100);return e.length<4||e[3]===1?`rgb(`+t+`%, `+n+`%, `+i+`%)`:`rgba(`+t+`%, `+n+`%, `+i+`%, `+e[3]+`)`},s.to.hsl=function(){var e=r(arguments);return e.length<4||e[3]===1?`hsl(`+e[0]+`, `+e[1]+`%, `+e[2]+`%)`:`hsla(`+e[0]+`, `+e[1]+`%, `+e[2]+`%, `+e[3]+`)`},s.to.hwb=function(){var e=r(arguments),t=``;return e.length>=4&&e[3]!==1&&(t=`, `+e[3]),`hwb(`+e[0]+`, `+e[1]+`%, `+e[2]+`%`+t+`)`},s.to.keyword=function(e){return a[e.slice(0,3)]};function c(e,t,n){return Math.min(Math.max(t,e),n)}function u(e){var t=Math.round(e).toString(16).toUpperCase();return t.length<2?`0`+t:t}})),q=a(((e,t)=>{var n=K(),r=u(),i=[`keyword`,`gray`,`hex`],a={};for(let e of Object.keys(r))a[[...r[e].labels].sort().join(``)]=e;var o={};function s(e,t){if(!(this instanceof s))return new s(e,t);if(t&&t in i&&(t=null),t&&!(t in r))throw Error(`Unknown model: `+t);let c,l;if(e==null)this.model=`rgb`,this.color=[0,0,0],this.valpha=1;else if(e instanceof s)this.model=e.model,this.color=[...e.color],this.valpha=e.valpha;else if(typeof e==`string`){let t=n.get(e);if(t===null)throw Error(`Unable to parse color from string: `+e);this.model=t.model,l=r[this.model].channels,this.color=t.value.slice(0,l),this.valpha=typeof t.value[l]==`number`?t.value[l]:1}else if(e.length>0)this.model=t||`rgb`,l=r[this.model].channels,this.color=m(Array.prototype.slice.call(e,0,l),l),this.valpha=typeof e[l]==`number`?e[l]:1;else if(typeof e==`number`)this.model=`rgb`,this.color=[e>>16&255,e>>8&255,e&255],this.valpha=1;else{this.valpha=1;let t=Object.keys(e);`alpha`in e&&(t.splice(t.indexOf(`alpha`),1),this.valpha=typeof e.alpha==`number`?e.alpha:0);let n=t.sort().join(``);if(!(n in a))throw Error(`Unable to parse color from object: `+JSON.stringify(e));this.model=a[n];let{labels:i}=r[this.model],o=[];for(c=0;c<i.length;c++)o.push(e[i[c]]);this.color=m(o)}if(o[this.model])for(l=r[this.model].channels,c=0;c<l;c++){let e=o[this.model][c];e&&(this.color[c]=e(this.color[c]))}this.valpha=Math.max(0,Math.min(1,this.valpha)),Object.freeze&&Object.freeze(this)}s.prototype={toString(){return this.string()},toJSON(){return this[this.model]()},string(e){let t=this.model in n.to?this:this.rgb();t=t.round(typeof e==`number`?e:1);let r=t.valpha===1?t.color:[...t.color,this.valpha];return n.to[t.model](r)},percentString(e){let t=this.rgb().round(typeof e==`number`?e:1),r=t.valpha===1?t.color:[...t.color,this.valpha];return n.to.rgb.percent(r)},array(){return this.valpha===1?[...this.color]:[...this.color,this.valpha]},object(){let e={},{channels:t}=r[this.model],{labels:n}=r[this.model];for(let r=0;r<t;r++)e[n[r]]=this.color[r];return this.valpha!==1&&(e.alpha=this.valpha),e},unitArray(){let e=this.rgb().color;return e[0]/=255,e[1]/=255,e[2]/=255,this.valpha!==1&&e.push(this.valpha),e},unitObject(){let e=this.rgb().object();return e.r/=255,e.g/=255,e.b/=255,this.valpha!==1&&(e.alpha=this.valpha),e},round(e){return e=Math.max(e||0,0),new s([...this.color.map(l(e)),this.valpha],this.model)},alpha(e){return e===void 0?this.valpha:new s([...this.color,Math.max(0,Math.min(1,e))],this.model)},red:d(`rgb`,0,f(255)),green:d(`rgb`,1,f(255)),blue:d(`rgb`,2,f(255)),hue:d([`hsl`,`hsv`,`hsl`,`hwb`,`hcg`],0,e=>(e%360+360)%360),saturationl:d(`hsl`,1,f(100)),lightness:d(`hsl`,2,f(100)),saturationv:d(`hsv`,1,f(100)),value:d(`hsv`,2,f(100)),chroma:d(`hcg`,1,f(100)),gray:d(`hcg`,2,f(100)),white:d(`hwb`,1,f(100)),wblack:d(`hwb`,2,f(100)),cyan:d(`cmyk`,0,f(100)),magenta:d(`cmyk`,1,f(100)),yellow:d(`cmyk`,2,f(100)),black:d(`cmyk`,3,f(100)),x:d(`xyz`,0,f(95.047)),y:d(`xyz`,1,f(100)),z:d(`xyz`,2,f(108.833)),l:d(`lab`,0,f(100)),a:d(`lab`,1),b:d(`lab`,2),keyword(e){return e===void 0?r[this.model].keyword(this.color):new s(e)},hex(e){return e===void 0?n.to.hex(this.rgb().round().color):new s(e)},hexa(e){if(e!==void 0)return new s(e);let t=this.rgb().round().color,r=Math.round(this.valpha*255).toString(16).toUpperCase();return r.length===1&&(r=`0`+r),n.to.hex(t)+r},rgbNumber(){let e=this.rgb().color;return(e[0]&255)<<16|(e[1]&255)<<8|e[2]&255},luminosity(){let e=this.rgb().color,t=[];for(let[n,r]of e.entries()){let e=r/255;t[n]=e<=.04045?e/12.92:((e+.055)/1.055)**2.4}return .2126*t[0]+.7152*t[1]+.0722*t[2]},contrast(e){let t=this.luminosity(),n=e.luminosity();return t>n?(t+.05)/(n+.05):(n+.05)/(t+.05)},level(e){let t=this.contrast(e);return t>=7?`AAA`:t>=4.5?`AA`:``},isDark(){let e=this.rgb().color;return(e[0]*2126+e[1]*7152+e[2]*722)/1e4<128},isLight(){return!this.isDark()},negate(){let e=this.rgb();for(let t=0;t<3;t++)e.color[t]=255-e.color[t];return e},lighten(e){let t=this.hsl();return t.color[2]+=t.color[2]*e,t},darken(e){let t=this.hsl();return t.color[2]-=t.color[2]*e,t},saturate(e){let t=this.hsl();return t.color[1]+=t.color[1]*e,t},desaturate(e){let t=this.hsl();return t.color[1]-=t.color[1]*e,t},whiten(e){let t=this.hwb();return t.color[1]+=t.color[1]*e,t},blacken(e){let t=this.hwb();return t.color[2]+=t.color[2]*e,t},grayscale(){let e=this.rgb().color,t=e[0]*.3+e[1]*.59+e[2]*.11;return s.rgb(t,t,t)},fade(e){return this.alpha(this.valpha-this.valpha*e)},opaquer(e){return this.alpha(this.valpha+this.valpha*e)},rotate(e){let t=this.hsl(),n=t.color[0];return n=(n+e)%360,n=n<0?360+n:n,t.color[0]=n,t},mix(e,t){if(!e||!e.rgb)throw Error(`Argument to "mix" was not a Color instance, but rather an instance of `+typeof e);let n=e.rgb(),r=this.rgb(),i=t===void 0?.5:t,a=2*i-1,o=n.alpha()-r.alpha(),c=((a*o===-1?a:(a+o)/(1+a*o))+1)/2,l=1-c;return s.rgb(c*n.red()+l*r.red(),c*n.green()+l*r.green(),c*n.blue()+l*r.blue(),n.alpha()*i+r.alpha()*(1-i))}};for(let e of Object.keys(r)){if(i.includes(e))continue;let{channels:t}=r[e];s.prototype[e]=function(...t){return this.model===e?new s(this):t.length>0?new s(t,e):new s([...p(r[this.model][e].raw(this.color)),this.valpha],e)},s[e]=function(...n){let r=n[0];return typeof r==`number`&&(r=m(n,t)),new s(r,e)}}function c(e,t){return Number(e.toFixed(t))}function l(e){return function(t){return c(t,e)}}function d(e,t,n){e=Array.isArray(e)?e:[e];for(let r of e)(o[r]||(o[r]=[]))[t]=n;return e=e[0],function(r){let i;return r===void 0?(i=this[e]().color[t],n&&(i=n(i)),i):(n&&(r=n(r)),i=this[e](),i.color[t]=r,i)}}function f(e){return function(t){return Math.max(0,Math.min(e,t))}}function p(e){return Array.isArray(e)?e:[e]}function m(e,t){for(let n=0;n<t;n++)typeof e[n]!=`number`&&(e[n]=0);return e}t.exports=s})),J=a(((e,t)=>{var n=q(),r=f(),i=H(),a={left:`low`,center:`centre`,centre:`centre`,right:`high`};function o(e){let{raw:t,density:n,limitInputPixels:i,ignoreIcc:a,unlimited:o,sequentialRead:s,failOn:c,failOnError:l,animated:u,page:d,pages:f,subifd:p}=e;return[t,n,i,a,o,s,c,l,u,d,f,p].some(r.defined)?{raw:t,density:n,limitInputPixels:i,ignoreIcc:a,unlimited:o,sequentialRead:s,failOn:c,failOnError:l,animated:u,page:d,pages:f,subifd:p}:void 0}function s(e,t,i){let a={failOn:`warning`,limitInputPixels:16383**2,ignoreIcc:!1,unlimited:!1,sequentialRead:!0};if(r.string(e))a.file=e;else if(r.buffer(e)){if(e.length===0)throw Error(`Input Buffer is empty`);a.buffer=e}else if(r.arrayBuffer(e)){if(e.byteLength===0)throw Error(`Input bit Array is empty`);a.buffer=Buffer.from(e,0,e.byteLength)}else if(r.typedArray(e)){if(e.length===0)throw Error(`Input Bit Array is empty`);a.buffer=Buffer.from(e.buffer,e.byteOffset,e.byteLength)}else if(r.plainObject(e)&&!r.defined(t))t=e,o(t)&&(a.buffer=[]);else if(!r.defined(e)&&!r.defined(t)&&r.object(i)&&i.allowStream)a.buffer=[];else throw Error(`Unsupported input '${e}' of type ${typeof e}${r.defined(t)?` when also providing options of type ${typeof t}`:``}`);if(r.object(t)){if(r.defined(t.failOnError))if(r.bool(t.failOnError))a.failOn=t.failOnError?`warning`:`none`;else throw r.invalidParameterError(`failOnError`,`boolean`,t.failOnError);if(r.defined(t.failOn))if(r.string(t.failOn)&&r.inArray(t.failOn,[`none`,`truncated`,`error`,`warning`]))a.failOn=t.failOn;else throw r.invalidParameterError(`failOn`,`one of: none, truncated, error, warning`,t.failOn);if(r.defined(t.density))if(r.inRange(t.density,1,1e5))a.density=t.density;else throw r.invalidParameterError(`density`,`number between 1 and 100000`,t.density);if(r.defined(t.ignoreIcc))if(r.bool(t.ignoreIcc))a.ignoreIcc=t.ignoreIcc;else throw r.invalidParameterError(`ignoreIcc`,`boolean`,t.ignoreIcc);if(r.defined(t.limitInputPixels))if(r.bool(t.limitInputPixels))a.limitInputPixels=t.limitInputPixels?16383**2:0;else if(r.integer(t.limitInputPixels)&&r.inRange(t.limitInputPixels,0,2**53-1))a.limitInputPixels=t.limitInputPixels;else throw r.invalidParameterError(`limitInputPixels`,`positive integer`,t.limitInputPixels);if(r.defined(t.unlimited))if(r.bool(t.unlimited))a.unlimited=t.unlimited;else throw r.invalidParameterError(`unlimited`,`boolean`,t.unlimited);if(r.defined(t.sequentialRead))if(r.bool(t.sequentialRead))a.sequentialRead=t.sequentialRead;else throw r.invalidParameterError(`sequentialRead`,`boolean`,t.sequentialRead);if(r.defined(t.raw))if(r.object(t.raw)&&r.integer(t.raw.width)&&t.raw.width>0&&r.integer(t.raw.height)&&t.raw.height>0&&r.integer(t.raw.channels)&&r.inRange(t.raw.channels,1,4))switch(a.rawWidth=t.raw.width,a.rawHeight=t.raw.height,a.rawChannels=t.raw.channels,a.rawPremultiplied=!!t.raw.premultiplied,e.constructor){case Uint8Array:case Uint8ClampedArray:a.rawDepth=`uchar`;break;case Int8Array:a.rawDepth=`char`;break;case Uint16Array:a.rawDepth=`ushort`;break;case Int16Array:a.rawDepth=`short`;break;case Uint32Array:a.rawDepth=`uint`;break;case Int32Array:a.rawDepth=`int`;break;case Float32Array:a.rawDepth=`float`;break;case Float64Array:a.rawDepth=`double`;break;default:a.rawDepth=`uchar`;break}else throw Error(`Expected width, height and channels for raw pixel input`);if(r.defined(t.animated))if(r.bool(t.animated))a.pages=t.animated?-1:1;else throw r.invalidParameterError(`animated`,`boolean`,t.animated);if(r.defined(t.pages))if(r.integer(t.pages)&&r.inRange(t.pages,-1,1e5))a.pages=t.pages;else throw r.invalidParameterError(`pages`,`integer between -1 and 100000`,t.pages);if(r.defined(t.page))if(r.integer(t.page)&&r.inRange(t.page,0,1e5))a.page=t.page;else throw r.invalidParameterError(`page`,`integer between 0 and 100000`,t.page);if(r.defined(t.level))if(r.integer(t.level)&&r.inRange(t.level,0,256))a.level=t.level;else throw r.invalidParameterError(`level`,`integer between 0 and 256`,t.level);if(r.defined(t.subifd))if(r.integer(t.subifd)&&r.inRange(t.subifd,-1,1e5))a.subifd=t.subifd;else throw r.invalidParameterError(`subifd`,`integer between -1 and 100000`,t.subifd);if(r.defined(t.create))if(r.object(t.create)&&r.integer(t.create.width)&&t.create.width>0&&r.integer(t.create.height)&&t.create.height>0&&r.integer(t.create.channels)){if(a.createWidth=t.create.width,a.createHeight=t.create.height,a.createChannels=t.create.channels,r.defined(t.create.noise)){if(!r.object(t.create.noise))throw Error(`Expected noise to be an object`);if(!r.inArray(t.create.noise.type,[`gaussian`]))throw Error(`Only gaussian noise is supported at the moment`);if(!r.inRange(t.create.channels,1,4))throw r.invalidParameterError(`create.channels`,`number between 1 and 4`,t.create.channels);if(a.createNoiseType=t.create.noise.type,r.number(t.create.noise.mean)&&r.inRange(t.create.noise.mean,0,1e4))a.createNoiseMean=t.create.noise.mean;else throw r.invalidParameterError(`create.noise.mean`,`number between 0 and 10000`,t.create.noise.mean);if(r.number(t.create.noise.sigma)&&r.inRange(t.create.noise.sigma,0,1e4))a.createNoiseSigma=t.create.noise.sigma;else throw r.invalidParameterError(`create.noise.sigma`,`number between 0 and 10000`,t.create.noise.sigma)}else if(r.defined(t.create.background)){if(!r.inRange(t.create.channels,3,4))throw r.invalidParameterError(`create.channels`,`number between 3 and 4`,t.create.channels);let e=n(t.create.background);a.createBackground=[e.red(),e.green(),e.blue(),Math.round(e.alpha()*255)]}else throw Error(`Expected valid noise or background to create a new input image`);delete a.buffer}else throw Error(`Expected valid width, height and channels to create a new input image`);if(r.defined(t.text))if(r.object(t.text)&&r.string(t.text.text)){if(a.textValue=t.text.text,r.defined(t.text.height)&&r.defined(t.text.dpi))throw Error(`Expected only one of dpi or height`);if(r.defined(t.text.font))if(r.string(t.text.font))a.textFont=t.text.font;else throw r.invalidParameterError(`text.font`,`string`,t.text.font);if(r.defined(t.text.fontfile))if(r.string(t.text.fontfile))a.textFontfile=t.text.fontfile;else throw r.invalidParameterError(`text.fontfile`,`string`,t.text.fontfile);if(r.defined(t.text.width))if(r.integer(t.text.width)&&t.text.width>0)a.textWidth=t.text.width;else throw r.invalidParameterError(`text.width`,`positive integer`,t.text.width);if(r.defined(t.text.height))if(r.integer(t.text.height)&&t.text.height>0)a.textHeight=t.text.height;else throw r.invalidParameterError(`text.height`,`positive integer`,t.text.height);if(r.defined(t.text.align))if(r.string(t.text.align)&&r.string(this.constructor.align[t.text.align]))a.textAlign=this.constructor.align[t.text.align];else throw r.invalidParameterError(`text.align`,`valid alignment`,t.text.align);if(r.defined(t.text.justify))if(r.bool(t.text.justify))a.textJustify=t.text.justify;else throw r.invalidParameterError(`text.justify`,`boolean`,t.text.justify);if(r.defined(t.text.dpi))if(r.integer(t.text.dpi)&&r.inRange(t.text.dpi,1,1e6))a.textDpi=t.text.dpi;else throw r.invalidParameterError(`text.dpi`,`integer between 1 and 1000000`,t.text.dpi);if(r.defined(t.text.rgba))if(r.bool(t.text.rgba))a.textRgba=t.text.rgba;else throw r.invalidParameterError(`text.rgba`,`bool`,t.text.rgba);if(r.defined(t.text.spacing))if(r.integer(t.text.spacing)&&r.inRange(t.text.spacing,-1e6,1e6))a.textSpacing=t.text.spacing;else throw r.invalidParameterError(`text.spacing`,`integer between -1000000 and 1000000`,t.text.spacing);if(r.defined(t.text.wrap))if(r.string(t.text.wrap)&&r.inArray(t.text.wrap,[`word`,`char`,`word-char`,`none`]))a.textWrap=t.text.wrap;else throw r.invalidParameterError(`text.wrap`,`one of: word, char, word-char, none`,t.text.wrap);delete a.buffer}else throw Error(`Expected a valid string to create an image with text.`)}else if(r.defined(t))throw Error(`Invalid input options `+t);return a}function c(e,t,n){Array.isArray(this.options.input.buffer)?r.buffer(e)?(this.options.input.buffer.length===0&&this.on(`finish`,()=>{this.streamInFinished=!0}),this.options.input.buffer.push(e),n()):n(Error(`Non-Buffer data on Writable Stream`)):n(Error(`Unexpected data on Writable Stream`))}function l(){this._isStreamInput()&&(this.options.input.buffer=Buffer.concat(this.options.input.buffer))}function u(){return Array.isArray(this.options.input.buffer)}function d(e){let t=Error();return r.fn(e)?(this._isStreamInput()?this.on(`finish`,()=>{this._flattenBufferIn(),i.metadata(this.options,(n,i)=>{n?e(r.nativeError(n,t)):e(null,i)})}):i.metadata(this.options,(n,i)=>{n?e(r.nativeError(n,t)):e(null,i)}),this):this._isStreamInput()?new Promise((e,n)=>{let a=()=>{this._flattenBufferIn(),i.metadata(this.options,(i,a)=>{i?n(r.nativeError(i,t)):e(a)})};this.writableFinished?a():this.once(`finish`,a)}):new Promise((e,n)=>{i.metadata(this.options,(i,a)=>{i?n(r.nativeError(i,t)):e(a)})})}function p(e){let t=Error();return r.fn(e)?(this._isStreamInput()?this.on(`finish`,()=>{this._flattenBufferIn(),i.stats(this.options,(n,i)=>{n?e(r.nativeError(n,t)):e(null,i)})}):i.stats(this.options,(n,i)=>{n?e(r.nativeError(n,t)):e(null,i)}),this):this._isStreamInput()?new Promise((e,n)=>{this.on(`finish`,function(){this._flattenBufferIn(),i.stats(this.options,(i,a)=>{i?n(r.nativeError(i,t)):e(a)})})}):new Promise((e,n)=>{i.stats(this.options,(i,a)=>{i?n(r.nativeError(i,t)):e(a)})})}t.exports=function(e){Object.assign(e.prototype,{_inputOptionsFromObject:o,_createInputDescriptor:s,_write:c,_flattenBufferIn:l,_isStreamInput:u,metadata:d,stats:p}),e.align=a}})),Y=a(((e,t)=>{var n=f(),r={center:0,centre:0,north:1,east:2,south:3,west:4,northeast:5,southeast:6,southwest:7,northwest:8},i={top:1,right:2,bottom:3,left:4,"right top":5,"right bottom":6,"left bottom":7,"left top":8},a={background:`background`,copy:`copy`,repeat:`repeat`,mirror:`mirror`},o={entropy:16,attention:17},s={nearest:`nearest`,linear:`linear`,cubic:`cubic`,mitchell:`mitchell`,lanczos2:`lanczos2`,lanczos3:`lanczos3`},c={contain:`contain`,cover:`cover`,fill:`fill`,inside:`inside`,outside:`outside`},l={contain:`embed`,cover:`crop`,fill:`ignore_aspect`,inside:`max`,outside:`min`};function u(e){return e.angle%360!=0||e.useExifOrientation===!0||e.rotationAngle!==0}function d(e){return e.width!==-1||e.height!==-1}function p(e,t,a){if(d(this.options)&&this.options.debuglog(`ignoring previous resize options`),this.options.widthPost!==-1&&this.options.debuglog(`operation order will be: extract, resize, extract`),n.defined(e))if(n.object(e)&&!n.defined(a))a=e;else if(n.integer(e)&&e>0)this.options.width=e;else throw n.invalidParameterError(`width`,`positive integer`,e);else this.options.width=-1;if(n.defined(t))if(n.integer(t)&&t>0)this.options.height=t;else throw n.invalidParameterError(`height`,`positive integer`,t);else this.options.height=-1;if(n.object(a)){if(n.defined(a.width))if(n.integer(a.width)&&a.width>0)this.options.width=a.width;else throw n.invalidParameterError(`width`,`positive integer`,a.width);if(n.defined(a.height))if(n.integer(a.height)&&a.height>0)this.options.height=a.height;else throw n.invalidParameterError(`height`,`positive integer`,a.height);if(n.defined(a.fit)){let e=l[a.fit];if(n.string(e))this.options.canvas=e;else throw n.invalidParameterError(`fit`,`valid fit`,a.fit)}if(n.defined(a.position)){let e=n.integer(a.position)?a.position:o[a.position]||i[a.position]||r[a.position];if(n.integer(e)&&(n.inRange(e,0,8)||n.inRange(e,16,17)))this.options.position=e;else throw n.invalidParameterError(`position`,`valid position/gravity/strategy`,a.position)}if(this._setBackgroundColourOption(`resizeBackground`,a.background),n.defined(a.kernel))if(n.string(s[a.kernel]))this.options.kernel=s[a.kernel];else throw n.invalidParameterError(`kernel`,`valid kernel name`,a.kernel);n.defined(a.withoutEnlargement)&&this._setBooleanOption(`withoutEnlargement`,a.withoutEnlargement),n.defined(a.withoutReduction)&&this._setBooleanOption(`withoutReduction`,a.withoutReduction),n.defined(a.fastShrinkOnLoad)&&this._setBooleanOption(`fastShrinkOnLoad`,a.fastShrinkOnLoad)}return u(this.options)&&d(this.options)&&(this.options.rotateBeforePreExtract=!0),this}function m(e){if(n.integer(e)&&e>0)this.options.extendTop=e,this.options.extendBottom=e,this.options.extendLeft=e,this.options.extendRight=e;else if(n.object(e)){if(n.defined(e.top))if(n.integer(e.top)&&e.top>=0)this.options.extendTop=e.top;else throw n.invalidParameterError(`top`,`positive integer`,e.top);if(n.defined(e.bottom))if(n.integer(e.bottom)&&e.bottom>=0)this.options.extendBottom=e.bottom;else throw n.invalidParameterError(`bottom`,`positive integer`,e.bottom);if(n.defined(e.left))if(n.integer(e.left)&&e.left>=0)this.options.extendLeft=e.left;else throw n.invalidParameterError(`left`,`positive integer`,e.left);if(n.defined(e.right))if(n.integer(e.right)&&e.right>=0)this.options.extendRight=e.right;else throw n.invalidParameterError(`right`,`positive integer`,e.right);if(this._setBackgroundColourOption(`extendBackground`,e.background),n.defined(e.extendWith))if(n.string(a[e.extendWith]))this.options.extendWith=a[e.extendWith];else throw n.invalidParameterError(`extendWith`,`one of: background, copy, repeat, mirror`,e.extendWith)}else throw n.invalidParameterError(`extend`,`integer or object`,e);return this}function h(e){let t=d(this.options)||this.options.widthPre!==-1?`Post`:`Pre`;return this.options[`width${t}`]!==-1&&this.options.debuglog(`ignoring previous extract options`),[`left`,`top`,`width`,`height`].forEach(function(r){let i=e[r];if(n.integer(i)&&i>=0)this.options[r+(r===`left`||r===`top`?`Offset`:``)+t]=i;else throw n.invalidParameterError(r,`integer`,i)},this),u(this.options)&&!d(this.options)&&(this.options.widthPre===-1||this.options.widthPost===-1)&&(this.options.rotateBeforePreExtract=!0),this}function g(e){if(this.options.trimThreshold=10,n.defined(e))if(n.object(e)){if(n.defined(e.background)&&this._setBackgroundColourOption(`trimBackground`,e.background),n.defined(e.threshold))if(n.number(e.threshold)&&e.threshold>=0)this.options.trimThreshold=e.threshold;else throw n.invalidParameterError(`threshold`,`positive number`,e.threshold);n.defined(e.lineArt)&&this._setBooleanOption(`trimLineArt`,e.lineArt)}else throw n.invalidParameterError(`trim`,`object`,e);return u(this.options)&&(this.options.rotateBeforePreExtract=!0),this}t.exports=function(e){Object.assign(e.prototype,{resize:p,extend:m,extract:h,trim:g}),e.gravity=r,e.strategy=o,e.kernel=s,e.fit=c,e.position=i}})),X=a(((e,t)=>{var n=f(),r={clear:`clear`,source:`source`,over:`over`,in:`in`,out:`out`,atop:`atop`,dest:`dest`,"dest-over":`dest-over`,"dest-in":`dest-in`,"dest-out":`dest-out`,"dest-atop":`dest-atop`,xor:`xor`,add:`add`,saturate:`saturate`,multiply:`multiply`,screen:`screen`,overlay:`overlay`,darken:`darken`,lighten:`lighten`,"colour-dodge":`colour-dodge`,"color-dodge":`colour-dodge`,"colour-burn":`colour-burn`,"color-burn":`colour-burn`,"hard-light":`hard-light`,"soft-light":`soft-light`,difference:`difference`,exclusion:`exclusion`};function i(e){if(!Array.isArray(e))throw n.invalidParameterError(`images to composite`,`array`,e);return this.options.composite=e.map(e=>{if(!n.object(e))throw n.invalidParameterError(`image to composite`,`object`,e);let t=this._inputOptionsFromObject(e),i={input:this._createInputDescriptor(e.input,t,{allowStream:!1}),blend:`over`,tile:!1,left:0,top:0,hasOffset:!1,gravity:0,premultiplied:!1};if(n.defined(e.blend))if(n.string(r[e.blend]))i.blend=r[e.blend];else throw n.invalidParameterError(`blend`,`valid blend name`,e.blend);if(n.defined(e.tile))if(n.bool(e.tile))i.tile=e.tile;else throw n.invalidParameterError(`tile`,`boolean`,e.tile);if(n.defined(e.left))if(n.integer(e.left))i.left=e.left;else throw n.invalidParameterError(`left`,`integer`,e.left);if(n.defined(e.top))if(n.integer(e.top))i.top=e.top;else throw n.invalidParameterError(`top`,`integer`,e.top);if(n.defined(e.top)!==n.defined(e.left))throw Error(`Expected both left and top to be set`);if(i.hasOffset=n.integer(e.top)&&n.integer(e.left),n.defined(e.gravity))if(n.integer(e.gravity)&&n.inRange(e.gravity,0,8))i.gravity=e.gravity;else if(n.string(e.gravity)&&n.integer(this.constructor.gravity[e.gravity]))i.gravity=this.constructor.gravity[e.gravity];else throw n.invalidParameterError(`gravity`,`valid gravity`,e.gravity);if(n.defined(e.premultiplied))if(n.bool(e.premultiplied))i.premultiplied=e.premultiplied;else throw n.invalidParameterError(`premultiplied`,`boolean`,e.premultiplied);return i}),this}t.exports=function(e){e.prototype.composite=i,e.blend=r}})),Z=a(((e,t)=>{var n=q(),r=f(),i={integer:`integer`,float:`float`,approximate:`approximate`};function a(e,t){if((this.options.useExifOrientation||this.options.angle||this.options.rotationAngle)&&this.options.debuglog(`ignoring previous rotate options`),!r.defined(e))this.options.useExifOrientation=!0;else if(r.integer(e)&&!(e%90))this.options.angle=e;else if(r.number(e)){if(this.options.rotationAngle=e,r.object(t)&&t.background){let e=n(t.background);this.options.rotationBackground=[e.red(),e.green(),e.blue(),Math.round(e.alpha()*255)]}}else throw r.invalidParameterError(`angle`,`numeric`,e);return this}function o(e){return this.options.flip=r.bool(e)?e:!0,this}function s(e){return this.options.flop=r.bool(e)?e:!0,this}function c(e,t){let n=[].concat(...e);if(n.length===4&&n.every(r.number))this.options.affineMatrix=n;else throw r.invalidParameterError(`matrix`,`1x4 or 2x2 array`,e);if(r.defined(t))if(r.object(t)){if(this._setBackgroundColourOption(`affineBackground`,t.background),r.defined(t.idx))if(r.number(t.idx))this.options.affineIdx=t.idx;else throw r.invalidParameterError(`options.idx`,`number`,t.idx);if(r.defined(t.idy))if(r.number(t.idy))this.options.affineIdy=t.idy;else throw r.invalidParameterError(`options.idy`,`number`,t.idy);if(r.defined(t.odx))if(r.number(t.odx))this.options.affineOdx=t.odx;else throw r.invalidParameterError(`options.odx`,`number`,t.odx);if(r.defined(t.ody))if(r.number(t.ody))this.options.affineOdy=t.ody;else throw r.invalidParameterError(`options.ody`,`number`,t.ody);if(r.defined(t.interpolator))if(r.inArray(t.interpolator,Object.values(this.constructor.interpolators)))this.options.affineInterpolator=t.interpolator;else throw r.invalidParameterError(`options.interpolator`,`valid interpolator name`,t.interpolator)}else throw r.invalidParameterError(`options`,`object`,t);return this}function l(e,t,n){if(!r.defined(e))this.options.sharpenSigma=-1;else if(r.bool(e))this.options.sharpenSigma=e?-1:0;else if(r.number(e)&&r.inRange(e,.01,1e4)){if(this.options.sharpenSigma=e,r.defined(t))if(r.number(t)&&r.inRange(t,0,1e4))this.options.sharpenM1=t;else throw r.invalidParameterError(`flat`,`number between 0 and 10000`,t);if(r.defined(n))if(r.number(n)&&r.inRange(n,0,1e4))this.options.sharpenM2=n;else throw r.invalidParameterError(`jagged`,`number between 0 and 10000`,n)}else if(r.plainObject(e)){if(r.number(e.sigma)&&r.inRange(e.sigma,1e-6,10))this.options.sharpenSigma=e.sigma;else throw r.invalidParameterError(`options.sigma`,`number between 0.000001 and 10`,e.sigma);if(r.defined(e.m1))if(r.number(e.m1)&&r.inRange(e.m1,0,1e6))this.options.sharpenM1=e.m1;else throw r.invalidParameterError(`options.m1`,`number between 0 and 1000000`,e.m1);if(r.defined(e.m2))if(r.number(e.m2)&&r.inRange(e.m2,0,1e6))this.options.sharpenM2=e.m2;else throw r.invalidParameterError(`options.m2`,`number between 0 and 1000000`,e.m2);if(r.defined(e.x1))if(r.number(e.x1)&&r.inRange(e.x1,0,1e6))this.options.sharpenX1=e.x1;else throw r.invalidParameterError(`options.x1`,`number between 0 and 1000000`,e.x1);if(r.defined(e.y2))if(r.number(e.y2)&&r.inRange(e.y2,0,1e6))this.options.sharpenY2=e.y2;else throw r.invalidParameterError(`options.y2`,`number between 0 and 1000000`,e.y2);if(r.defined(e.y3))if(r.number(e.y3)&&r.inRange(e.y3,0,1e6))this.options.sharpenY3=e.y3;else throw r.invalidParameterError(`options.y3`,`number between 0 and 1000000`,e.y3)}else throw r.invalidParameterError(`sigma`,`number between 0.01 and 10000`,e);return this}function u(e){if(!r.defined(e))this.options.medianSize=3;else if(r.integer(e)&&r.inRange(e,1,1e3))this.options.medianSize=e;else throw r.invalidParameterError(`size`,`integer between 1 and 1000`,e);return this}function d(e){let t;if(r.number(e))t=e;else if(r.plainObject(e)){if(!r.number(e.sigma))throw r.invalidParameterError(`options.sigma`,`number between 0.3 and 1000`,t);if(t=e.sigma,`precision`in e)if(r.string(i[e.precision]))this.options.precision=i[e.precision];else throw r.invalidParameterError(`precision`,`one of: integer, float, approximate`,e.precision);if(`minAmplitude`in e)if(r.number(e.minAmplitude)&&r.inRange(e.minAmplitude,.001,1))this.options.minAmpl=e.minAmplitude;else throw r.invalidParameterError(`minAmplitude`,`number between 0.001 and 1`,e.minAmplitude)}if(!r.defined(e))this.options.blurSigma=-1;else if(r.bool(e))this.options.blurSigma=e?-1:0;else if(r.number(t)&&r.inRange(t,.3,1e3))this.options.blurSigma=t;else throw r.invalidParameterError(`sigma`,`number between 0.3 and 1000`,t);return this}function p(e){return this.options.flatten=r.bool(e)?e:!0,r.object(e)&&this._setBackgroundColourOption(`flattenBackground`,e.background),this}function m(){return this.options.unflatten=!0,this}function h(e,t){if(!r.defined(e))this.options.gamma=2.2;else if(r.number(e)&&r.inRange(e,1,3))this.options.gamma=e;else throw r.invalidParameterError(`gamma`,`number between 1.0 and 3.0`,e);if(!r.defined(t))this.options.gammaOut=this.options.gamma;else if(r.number(t)&&r.inRange(t,1,3))this.options.gammaOut=t;else throw r.invalidParameterError(`gammaOut`,`number between 1.0 and 3.0`,t);return this}function g(e){if(this.options.negate=r.bool(e)?e:!0,r.plainObject(e)&&`alpha`in e)if(r.bool(e.alpha))this.options.negateAlpha=e.alpha;else throw r.invalidParameterError(`alpha`,`should be boolean value`,e.alpha);return this}function _(e){if(r.plainObject(e)){if(r.defined(e.lower))if(r.number(e.lower)&&r.inRange(e.lower,0,99))this.options.normaliseLower=e.lower;else throw r.invalidParameterError(`lower`,`number between 0 and 99`,e.lower);if(r.defined(e.upper))if(r.number(e.upper)&&r.inRange(e.upper,1,100))this.options.normaliseUpper=e.upper;else throw r.invalidParameterError(`upper`,`number between 1 and 100`,e.upper)}if(this.options.normaliseLower>=this.options.normaliseUpper)throw r.invalidParameterError(`range`,`lower to be less than upper`,`${this.options.normaliseLower} >= ${this.options.normaliseUpper}`);return this.options.normalise=!0,this}function v(e){return this.normalise(e)}function y(e){if(r.plainObject(e)){if(r.integer(e.width)&&e.width>0)this.options.claheWidth=e.width;else throw r.invalidParameterError(`width`,`integer greater than zero`,e.width);if(r.integer(e.height)&&e.height>0)this.options.claheHeight=e.height;else throw r.invalidParameterError(`height`,`integer greater than zero`,e.height);if(r.defined(e.maxSlope))if(r.integer(e.maxSlope)&&r.inRange(e.maxSlope,0,100))this.options.claheMaxSlope=e.maxSlope;else throw r.invalidParameterError(`maxSlope`,`integer between 0 and 100`,e.maxSlope)}else throw r.invalidParameterError(`options`,`plain object`,e);return this}function b(e){if(!r.object(e)||!Array.isArray(e.kernel)||!r.integer(e.width)||!r.integer(e.height)||!r.inRange(e.width,3,1001)||!r.inRange(e.height,3,1001)||e.height*e.width!==e.kernel.length)throw Error(`Invalid convolution kernel`);return r.integer(e.scale)||(e.scale=e.kernel.reduce(function(e,t){return e+t},0)),e.scale<1&&(e.scale=1),r.integer(e.offset)||(e.offset=0),this.options.convKernel=e,this}function x(e,t){if(!r.defined(e))this.options.threshold=128;else if(r.bool(e))this.options.threshold=e?128:0;else if(r.integer(e)&&r.inRange(e,0,255))this.options.threshold=e;else throw r.invalidParameterError(`threshold`,`integer between 0 and 255`,e);return!r.object(t)||t.greyscale===!0||t.grayscale===!0?this.options.thresholdGrayscale=!0:this.options.thresholdGrayscale=!1,this}function S(e,t,n){if(this.options.boolean=this._createInputDescriptor(e,n),r.string(t)&&r.inArray(t,[`and`,`or`,`eor`]))this.options.booleanOp=t;else throw r.invalidParameterError(`operator`,`one of: and, or, eor`,t);return this}function C(e,t){if(!r.defined(e)&&r.number(t)?e=1:r.number(e)&&!r.defined(t)&&(t=0),!r.defined(e))this.options.linearA=[];else if(r.number(e))this.options.linearA=[e];else if(Array.isArray(e)&&e.length&&e.every(r.number))this.options.linearA=e;else throw r.invalidParameterError(`a`,`number or array of numbers`,e);if(!r.defined(t))this.options.linearB=[];else if(r.number(t))this.options.linearB=[t];else if(Array.isArray(t)&&t.length&&t.every(r.number))this.options.linearB=t;else throw r.invalidParameterError(`b`,`number or array of numbers`,t);if(this.options.linearA.length!==this.options.linearB.length)throw Error(`Expected a and b to be arrays of the same length`);return this}function w(e){if(!Array.isArray(e))throw r.invalidParameterError(`inputMatrix`,`array`,e);if(e.length!==3&&e.length!==4)throw r.invalidParameterError(`inputMatrix`,`3x3 or 4x4 array`,e.length);let t=e.flat().map(Number);if(t.length!==9&&t.length!==16)throw r.invalidParameterError(`inputMatrix`,`cardinality of 9 or 16`,t.length);return this.options.recombMatrix=t,this}function T(e){if(!r.plainObject(e))throw r.invalidParameterError(`options`,`plain object`,e);if(`brightness`in e)if(r.number(e.brightness)&&e.brightness>=0)this.options.brightness=e.brightness;else throw r.invalidParameterError(`brightness`,`number above zero`,e.brightness);if(`saturation`in e)if(r.number(e.saturation)&&e.saturation>=0)this.options.saturation=e.saturation;else throw r.invalidParameterError(`saturation`,`number above zero`,e.saturation);if(`hue`in e)if(r.integer(e.hue))this.options.hue=e.hue%360;else throw r.invalidParameterError(`hue`,`number`,e.hue);if(`lightness`in e)if(r.number(e.lightness))this.options.lightness=e.lightness;else throw r.invalidParameterError(`lightness`,`number`,e.lightness);return this}t.exports=function(e){Object.assign(e.prototype,{rotate:a,flip:o,flop:s,affine:c,sharpen:l,median:u,blur:d,flatten:p,unflatten:m,gamma:h,negate:g,normalise:_,normalize:v,clahe:y,convolve:b,threshold:x,boolean:S,linear:C,recomb:w,modulate:T})}})),ee=a(((e,t)=>{var n=q(),r=f(),i={multiband:`multiband`,"b-w":`b-w`,bw:`b-w`,cmyk:`cmyk`,srgb:`srgb`};function a(e){return this._setBackgroundColourOption(`tint`,e),this}function o(e){return this.options.greyscale=r.bool(e)?e:!0,this}function s(e){return this.greyscale(e)}function c(e){if(!r.string(e))throw r.invalidParameterError(`colourspace`,`string`,e);return this.options.colourspacePipeline=e,this}function l(e){return this.pipelineColourspace(e)}function u(e){if(!r.string(e))throw r.invalidParameterError(`colourspace`,`string`,e);return this.options.colourspace=e,this}function d(e){return this.toColourspace(e)}function p(e,t){if(r.defined(t))if(r.object(t)||r.string(t)){let r=n(t);this.options[e]=[r.red(),r.green(),r.blue(),Math.round(r.alpha()*255)]}else throw r.invalidParameterError(`background`,`object or string`,t)}t.exports=function(e){Object.assign(e.prototype,{tint:a,greyscale:o,grayscale:s,pipelineColourspace:c,pipelineColorspace:l,toColourspace:u,toColorspace:d,_setBackgroundColourOption:p}),e.colourspace=i,e.colorspace=i}})),te=a(((e,t)=>{var n=f(),r={and:`and`,or:`or`,eor:`eor`};function i(){return this.options.removeAlpha=!0,this}function a(e){if(n.defined(e))if(n.number(e)&&n.inRange(e,0,1))this.options.ensureAlpha=e;else throw n.invalidParameterError(`alpha`,`number between 0 and 1`,e);else this.options.ensureAlpha=1;return this}function o(e){let t={red:0,green:1,blue:2,alpha:3};if(Object.keys(t).includes(e)&&(e=t[e]),n.integer(e)&&n.inRange(e,0,4))this.options.extractChannel=e;else throw n.invalidParameterError(`channel`,`integer or one of: red, green, blue, alpha`,e);return this}function s(e,t){return Array.isArray(e)?e.forEach(function(e){this.options.joinChannelIn.push(this._createInputDescriptor(e,t))},this):this.options.joinChannelIn.push(this._createInputDescriptor(e,t)),this}function c(e){if(n.string(e)&&n.inArray(e,[`and`,`or`,`eor`]))this.options.bandBoolOp=e;else throw n.invalidParameterError(`boolOp`,`one of: and, or, eor`,e);return this}t.exports=function(e){Object.assign(e.prototype,{removeAlpha:i,ensureAlpha:a,extractChannel:o,joinChannel:s,bandbool:c}),e.bool=r}})),ne=a(((e,n)=>{var r=t(`node:path`),i=f(),a=H(),o=new Map([[`heic`,`heif`],[`heif`,`heif`],[`avif`,`avif`],[`jpeg`,`jpeg`],[`jpg`,`jpeg`],[`jpe`,`jpeg`],[`tile`,`tile`],[`dz`,`tile`],[`png`,`png`],[`raw`,`raw`],[`tiff`,`tiff`],[`tif`,`tiff`],[`webp`,`webp`],[`gif`,`gif`],[`jp2`,`jp2`],[`jpx`,`jp2`],[`j2k`,`jp2`],[`j2c`,`jp2`],[`jxl`,`jxl`]]),s=/\.(jp[2x]|j2[kc])$/i,c=()=>Error(`JP2 output requires libvips with support for OpenJPEG`),l=e=>1<<31-Math.clz32(Math.ceil(Math.log2(e)));function u(e,t){let n;if(i.string(e)?i.string(this.options.input.file)&&r.resolve(this.options.input.file)===r.resolve(e)?n=Error(`Cannot use same file for input and output`):s.test(r.extname(e))&&!this.constructor.format.jp2k.output.file&&(n=c()):n=Error(`Missing output file path`),n)if(i.fn(t))t(n);else return Promise.reject(n);else{this.options.fileOut=e;let n=Error();return this._pipeline(t,n)}return this}function d(e,t){i.object(e)?this._setBooleanOption(`resolveWithObject`,e.resolveWithObject):this.options.resolveWithObject&&(this.options.resolveWithObject=!1),this.options.fileOut=``;let n=Error();return this._pipeline(i.fn(e)?e:t,n)}function p(){return this.options.keepMetadata|=1,this}function m(e){if(i.object(e))for(let[t,n]of Object.entries(e))if(i.object(n))for(let[e,r]of Object.entries(n))if(i.string(r))this.options.withExif[`exif-${t.toLowerCase()}-${e}`]=r;else throw i.invalidParameterError(`${t}.${e}`,`string`,r);else throw i.invalidParameterError(t,`object`,n);else throw i.invalidParameterError(`exif`,`object`,e);return this.options.withExifMerge=!1,this.keepExif()}function h(e){return this.withExif(e),this.options.withExifMerge=!0,this}function g(){return this.options.keepMetadata|=8,this}function _(e,t){if(i.string(e))this.options.withIccProfile=e;else throw i.invalidParameterError(`icc`,`string`,e);if(this.keepIccProfile(),i.object(t)&&i.defined(t.attach))if(i.bool(t.attach))t.attach||(this.options.keepMetadata&=-9);else throw i.invalidParameterError(`attach`,`boolean`,t.attach);return this}function v(){return this.options.keepMetadata=31,this}function y(e){if(this.keepMetadata(),this.withIccProfile(`srgb`),i.object(e)){if(i.defined(e.orientation))if(i.integer(e.orientation)&&i.inRange(e.orientation,1,8))this.options.withMetadataOrientation=e.orientation;else throw i.invalidParameterError(`orientation`,`integer between 1 and 8`,e.orientation);if(i.defined(e.density))if(i.number(e.density)&&e.density>0)this.options.withMetadataDensity=e.density;else throw i.invalidParameterError(`density`,`positive number`,e.density);i.defined(e.icc)&&this.withIccProfile(e.icc),i.defined(e.exif)&&this.withExifMerge(e.exif)}return this}function b(e,t){let n=o.get((i.object(e)&&i.string(e.id)?e.id:e).toLowerCase());if(!n)throw i.invalidParameterError(`format`,`one of: ${[...o.keys()].join(`, `)}`,e);return this[n](t)}function x(e){if(i.object(e)){if(i.defined(e.quality))if(i.integer(e.quality)&&i.inRange(e.quality,1,100))this.options.jpegQuality=e.quality;else throw i.invalidParameterError(`quality`,`integer between 1 and 100`,e.quality);if(i.defined(e.progressive)&&this._setBooleanOption(`jpegProgressive`,e.progressive),i.defined(e.chromaSubsampling))if(i.string(e.chromaSubsampling)&&i.inArray(e.chromaSubsampling,[`4:2:0`,`4:4:4`]))this.options.jpegChromaSubsampling=e.chromaSubsampling;else throw i.invalidParameterError(`chromaSubsampling`,`one of: 4:2:0, 4:4:4`,e.chromaSubsampling);let t=i.bool(e.optimizeCoding)?e.optimizeCoding:e.optimiseCoding;if(i.defined(t)&&this._setBooleanOption(`jpegOptimiseCoding`,t),i.defined(e.mozjpeg))if(i.bool(e.mozjpeg))e.mozjpeg&&(this.options.jpegTrellisQuantisation=!0,this.options.jpegOvershootDeringing=!0,this.options.jpegOptimiseScans=!0,this.options.jpegProgressive=!0,this.options.jpegQuantisationTable=3);else throw i.invalidParameterError(`mozjpeg`,`boolean`,e.mozjpeg);let n=i.bool(e.trellisQuantization)?e.trellisQuantization:e.trellisQuantisation;i.defined(n)&&this._setBooleanOption(`jpegTrellisQuantisation`,n),i.defined(e.overshootDeringing)&&this._setBooleanOption(`jpegOvershootDeringing`,e.overshootDeringing);let r=i.bool(e.optimizeScans)?e.optimizeScans:e.optimiseScans;i.defined(r)&&(this._setBooleanOption(`jpegOptimiseScans`,r),r&&(this.options.jpegProgressive=!0));let a=i.number(e.quantizationTable)?e.quantizationTable:e.quantisationTable;if(i.defined(a))if(i.integer(a)&&i.inRange(a,0,8))this.options.jpegQuantisationTable=a;else throw i.invalidParameterError(`quantisationTable`,`integer between 0 and 8`,a)}return this._updateFormatOut(`jpeg`,e)}function S(e){if(i.object(e)){if(i.defined(e.progressive)&&this._setBooleanOption(`pngProgressive`,e.progressive),i.defined(e.compressionLevel))if(i.integer(e.compressionLevel)&&i.inRange(e.compressionLevel,0,9))this.options.pngCompressionLevel=e.compressionLevel;else throw i.invalidParameterError(`compressionLevel`,`integer between 0 and 9`,e.compressionLevel);i.defined(e.adaptiveFiltering)&&this._setBooleanOption(`pngAdaptiveFiltering`,e.adaptiveFiltering);let t=e.colours||e.colors;if(i.defined(t))if(i.integer(t)&&i.inRange(t,2,256))this.options.pngBitdepth=l(t);else throw i.invalidParameterError(`colours`,`integer between 2 and 256`,t);if(i.defined(e.palette)?this._setBooleanOption(`pngPalette`,e.palette):[e.quality,e.effort,e.colours,e.colors,e.dither].some(i.defined)&&this._setBooleanOption(`pngPalette`,!0),this.options.pngPalette){if(i.defined(e.quality))if(i.integer(e.quality)&&i.inRange(e.quality,0,100))this.options.pngQuality=e.quality;else throw i.invalidParameterError(`quality`,`integer between 0 and 100`,e.quality);if(i.defined(e.effort))if(i.integer(e.effort)&&i.inRange(e.effort,1,10))this.options.pngEffort=e.effort;else throw i.invalidParameterError(`effort`,`integer between 1 and 10`,e.effort);if(i.defined(e.dither))if(i.number(e.dither)&&i.inRange(e.dither,0,1))this.options.pngDither=e.dither;else throw i.invalidParameterError(`dither`,`number between 0.0 and 1.0`,e.dither)}}return this._updateFormatOut(`png`,e)}function C(e){if(i.object(e)){if(i.defined(e.quality))if(i.integer(e.quality)&&i.inRange(e.quality,1,100))this.options.webpQuality=e.quality;else throw i.invalidParameterError(`quality`,`integer between 1 and 100`,e.quality);if(i.defined(e.alphaQuality))if(i.integer(e.alphaQuality)&&i.inRange(e.alphaQuality,0,100))this.options.webpAlphaQuality=e.alphaQuality;else throw i.invalidParameterError(`alphaQuality`,`integer between 0 and 100`,e.alphaQuality);if(i.defined(e.lossless)&&this._setBooleanOption(`webpLossless`,e.lossless),i.defined(e.nearLossless)&&this._setBooleanOption(`webpNearLossless`,e.nearLossless),i.defined(e.smartSubsample)&&this._setBooleanOption(`webpSmartSubsample`,e.smartSubsample),i.defined(e.preset))if(i.string(e.preset)&&i.inArray(e.preset,[`default`,`photo`,`picture`,`drawing`,`icon`,`text`]))this.options.webpPreset=e.preset;else throw i.invalidParameterError(`preset`,`one of: default, photo, picture, drawing, icon, text`,e.preset);if(i.defined(e.effort))if(i.integer(e.effort)&&i.inRange(e.effort,0,6))this.options.webpEffort=e.effort;else throw i.invalidParameterError(`effort`,`integer between 0 and 6`,e.effort);i.defined(e.minSize)&&this._setBooleanOption(`webpMinSize`,e.minSize),i.defined(e.mixed)&&this._setBooleanOption(`webpMixed`,e.mixed)}return E(e,this.options),this._updateFormatOut(`webp`,e)}function w(e){if(i.object(e)){i.defined(e.reuse)&&this._setBooleanOption(`gifReuse`,e.reuse),i.defined(e.progressive)&&this._setBooleanOption(`gifProgressive`,e.progressive);let t=e.colours||e.colors;if(i.defined(t))if(i.integer(t)&&i.inRange(t,2,256))this.options.gifBitdepth=l(t);else throw i.invalidParameterError(`colours`,`integer between 2 and 256`,t);if(i.defined(e.effort))if(i.number(e.effort)&&i.inRange(e.effort,1,10))this.options.gifEffort=e.effort;else throw i.invalidParameterError(`effort`,`integer between 1 and 10`,e.effort);if(i.defined(e.dither))if(i.number(e.dither)&&i.inRange(e.dither,0,1))this.options.gifDither=e.dither;else throw i.invalidParameterError(`dither`,`number between 0.0 and 1.0`,e.dither);if(i.defined(e.interFrameMaxError))if(i.number(e.interFrameMaxError)&&i.inRange(e.interFrameMaxError,0,32))this.options.gifInterFrameMaxError=e.interFrameMaxError;else throw i.invalidParameterError(`interFrameMaxError`,`number between 0.0 and 32.0`,e.interFrameMaxError);if(i.defined(e.interPaletteMaxError))if(i.number(e.interPaletteMaxError)&&i.inRange(e.interPaletteMaxError,0,256))this.options.gifInterPaletteMaxError=e.interPaletteMaxError;else throw i.invalidParameterError(`interPaletteMaxError`,`number between 0.0 and 256.0`,e.interPaletteMaxError)}return E(e,this.options),this._updateFormatOut(`gif`,e)}function T(e){if(!this.constructor.format.jp2k.output.buffer)throw c();if(i.object(e)){if(i.defined(e.quality))if(i.integer(e.quality)&&i.inRange(e.quality,1,100))this.options.jp2Quality=e.quality;else throw i.invalidParameterError(`quality`,`integer between 1 and 100`,e.quality);if(i.defined(e.lossless))if(i.bool(e.lossless))this.options.jp2Lossless=e.lossless;else throw i.invalidParameterError(`lossless`,`boolean`,e.lossless);if(i.defined(e.tileWidth))if(i.integer(e.tileWidth)&&i.inRange(e.tileWidth,1,32768))this.options.jp2TileWidth=e.tileWidth;else throw i.invalidParameterError(`tileWidth`,`integer between 1 and 32768`,e.tileWidth);if(i.defined(e.tileHeight))if(i.integer(e.tileHeight)&&i.inRange(e.tileHeight,1,32768))this.options.jp2TileHeight=e.tileHeight;else throw i.invalidParameterError(`tileHeight`,`integer between 1 and 32768`,e.tileHeight);if(i.defined(e.chromaSubsampling))if(i.string(e.chromaSubsampling)&&i.inArray(e.chromaSubsampling,[`4:2:0`,`4:4:4`]))this.options.jp2ChromaSubsampling=e.chromaSubsampling;else throw i.invalidParameterError(`chromaSubsampling`,`one of: 4:2:0, 4:4:4`,e.chromaSubsampling)}return this._updateFormatOut(`jp2`,e)}function E(e,t){if(i.object(e)&&i.defined(e.loop))if(i.integer(e.loop)&&i.inRange(e.loop,0,65535))t.loop=e.loop;else throw i.invalidParameterError(`loop`,`integer between 0 and 65535`,e.loop);if(i.object(e)&&i.defined(e.delay))if(i.integer(e.delay)&&i.inRange(e.delay,0,65535))t.delay=[e.delay];else if(Array.isArray(e.delay)&&e.delay.every(i.integer)&&e.delay.every(e=>i.inRange(e,0,65535)))t.delay=e.delay;else throw i.invalidParameterError(`delay`,`integer or an array of integers between 0 and 65535`,e.delay)}function D(e){if(i.object(e)){if(i.defined(e.quality))if(i.integer(e.quality)&&i.inRange(e.quality,1,100))this.options.tiffQuality=e.quality;else throw i.invalidParameterError(`quality`,`integer between 1 and 100`,e.quality);if(i.defined(e.bitdepth))if(i.integer(e.bitdepth)&&i.inArray(e.bitdepth,[1,2,4,8]))this.options.tiffBitdepth=e.bitdepth;else throw i.invalidParameterError(`bitdepth`,`1, 2, 4 or 8`,e.bitdepth);if(i.defined(e.tile)&&this._setBooleanOption(`tiffTile`,e.tile),i.defined(e.tileWidth))if(i.integer(e.tileWidth)&&e.tileWidth>0)this.options.tiffTileWidth=e.tileWidth;else throw i.invalidParameterError(`tileWidth`,`integer greater than zero`,e.tileWidth);if(i.defined(e.tileHeight))if(i.integer(e.tileHeight)&&e.tileHeight>0)this.options.tiffTileHeight=e.tileHeight;else throw i.invalidParameterError(`tileHeight`,`integer greater than zero`,e.tileHeight);if(i.defined(e.miniswhite)&&this._setBooleanOption(`tiffMiniswhite`,e.miniswhite),i.defined(e.pyramid)&&this._setBooleanOption(`tiffPyramid`,e.pyramid),i.defined(e.xres))if(i.number(e.xres)&&e.xres>0)this.options.tiffXres=e.xres;else throw i.invalidParameterError(`xres`,`number greater than zero`,e.xres);if(i.defined(e.yres))if(i.number(e.yres)&&e.yres>0)this.options.tiffYres=e.yres;else throw i.invalidParameterError(`yres`,`number greater than zero`,e.yres);if(i.defined(e.compression))if(i.string(e.compression)&&i.inArray(e.compression,[`none`,`jpeg`,`deflate`,`packbits`,`ccittfax4`,`lzw`,`webp`,`zstd`,`jp2k`]))this.options.tiffCompression=e.compression;else throw i.invalidParameterError(`compression`,`one of: none, jpeg, deflate, packbits, ccittfax4, lzw, webp, zstd, jp2k`,e.compression);if(i.defined(e.predictor))if(i.string(e.predictor)&&i.inArray(e.predictor,[`none`,`horizontal`,`float`]))this.options.tiffPredictor=e.predictor;else throw i.invalidParameterError(`predictor`,`one of: none, horizontal, float`,e.predictor);if(i.defined(e.resolutionUnit))if(i.string(e.resolutionUnit)&&i.inArray(e.resolutionUnit,[`inch`,`cm`]))this.options.tiffResolutionUnit=e.resolutionUnit;else throw i.invalidParameterError(`resolutionUnit`,`one of: inch, cm`,e.resolutionUnit)}return this._updateFormatOut(`tiff`,e)}function O(e){return this.heif({...e,compression:`av1`})}function k(e){if(i.object(e)){if(i.string(e.compression)&&i.inArray(e.compression,[`av1`,`hevc`]))this.options.heifCompression=e.compression;else throw i.invalidParameterError(`compression`,`one of: av1, hevc`,e.compression);if(i.defined(e.quality))if(i.integer(e.quality)&&i.inRange(e.quality,1,100))this.options.heifQuality=e.quality;else throw i.invalidParameterError(`quality`,`integer between 1 and 100`,e.quality);if(i.defined(e.lossless))if(i.bool(e.lossless))this.options.heifLossless=e.lossless;else throw i.invalidParameterError(`lossless`,`boolean`,e.lossless);if(i.defined(e.effort))if(i.integer(e.effort)&&i.inRange(e.effort,0,9))this.options.heifEffort=e.effort;else throw i.invalidParameterError(`effort`,`integer between 0 and 9`,e.effort);if(i.defined(e.chromaSubsampling))if(i.string(e.chromaSubsampling)&&i.inArray(e.chromaSubsampling,[`4:2:0`,`4:4:4`]))this.options.heifChromaSubsampling=e.chromaSubsampling;else throw i.invalidParameterError(`chromaSubsampling`,`one of: 4:2:0, 4:4:4`,e.chromaSubsampling);if(i.defined(e.bitdepth))if(i.integer(e.bitdepth)&&i.inArray(e.bitdepth,[8,10,12])){if(e.bitdepth!==8&&this.constructor.versions.heif)throw i.invalidParameterError(`bitdepth when using prebuilt binaries`,8,e.bitdepth);this.options.heifBitdepth=e.bitdepth}else throw i.invalidParameterError(`bitdepth`,`8, 10 or 12`,e.bitdepth)}else throw i.invalidParameterError(`options`,`Object`,e);return this._updateFormatOut(`heif`,e)}function A(e){if(i.object(e)){if(i.defined(e.quality))if(i.integer(e.quality)&&i.inRange(e.quality,1,100))this.options.jxlDistance=e.quality>=30?.1+(100-e.quality)*.09:53/3e3*e.quality*e.quality-23/20*e.quality+25;else throw i.invalidParameterError(`quality`,`integer between 1 and 100`,e.quality);else if(i.defined(e.distance))if(i.number(e.distance)&&i.inRange(e.distance,0,15))this.options.jxlDistance=e.distance;else throw i.invalidParameterError(`distance`,`number between 0.0 and 15.0`,e.distance);if(i.defined(e.decodingTier))if(i.integer(e.decodingTier)&&i.inRange(e.decodingTier,0,4))this.options.jxlDecodingTier=e.decodingTier;else throw i.invalidParameterError(`decodingTier`,`integer between 0 and 4`,e.decodingTier);if(i.defined(e.lossless))if(i.bool(e.lossless))this.options.jxlLossless=e.lossless;else throw i.invalidParameterError(`lossless`,`boolean`,e.lossless);if(i.defined(e.effort))if(i.integer(e.effort)&&i.inRange(e.effort,3,9))this.options.jxlEffort=e.effort;else throw i.invalidParameterError(`effort`,`integer between 3 and 9`,e.effort)}return this._updateFormatOut(`jxl`,e)}function j(e){if(i.object(e)&&i.defined(e.depth))if(i.string(e.depth)&&i.inArray(e.depth,[`char`,`uchar`,`short`,`ushort`,`int`,`uint`,`float`,`complex`,`double`,`dpcomplex`]))this.options.rawDepth=e.depth;else throw i.invalidParameterError(`depth`,`one of: char, uchar, short, ushort, int, uint, float, complex, double, dpcomplex`,e.depth);return this._updateFormatOut(`raw`)}function M(e){if(i.object(e)){if(i.defined(e.size))if(i.integer(e.size)&&i.inRange(e.size,1,8192))this.options.tileSize=e.size;else throw i.invalidParameterError(`size`,`integer between 1 and 8192`,e.size);if(i.defined(e.overlap))if(i.integer(e.overlap)&&i.inRange(e.overlap,0,8192)){if(e.overlap>this.options.tileSize)throw i.invalidParameterError(`overlap`,`<= size (${this.options.tileSize})`,e.overlap);this.options.tileOverlap=e.overlap}else throw i.invalidParameterError(`overlap`,`integer between 0 and 8192`,e.overlap);if(i.defined(e.container))if(i.string(e.container)&&i.inArray(e.container,[`fs`,`zip`]))this.options.tileContainer=e.container;else throw i.invalidParameterError(`container`,`one of: fs, zip`,e.container);if(i.defined(e.layout))if(i.string(e.layout)&&i.inArray(e.layout,[`dz`,`google`,`iiif`,`iiif3`,`zoomify`]))this.options.tileLayout=e.layout;else throw i.invalidParameterError(`layout`,`one of: dz, google, iiif, iiif3, zoomify`,e.layout);if(i.defined(e.angle))if(i.integer(e.angle)&&!(e.angle%90))this.options.tileAngle=e.angle;else throw i.invalidParameterError(`angle`,`positive/negative multiple of 90`,e.angle);if(this._setBackgroundColourOption(`tileBackground`,e.background),i.defined(e.depth))if(i.string(e.depth)&&i.inArray(e.depth,[`onepixel`,`onetile`,`one`]))this.options.tileDepth=e.depth;else throw i.invalidParameterError(`depth`,`one of: onepixel, onetile, one`,e.depth);if(i.defined(e.skipBlanks))if(i.integer(e.skipBlanks)&&i.inRange(e.skipBlanks,-1,65535))this.options.tileSkipBlanks=e.skipBlanks;else throw i.invalidParameterError(`skipBlanks`,`integer between -1 and 255/65535`,e.skipBlanks);else i.defined(e.layout)&&e.layout===`google`&&(this.options.tileSkipBlanks=5);let t=i.bool(e.center)?e.center:e.centre;if(i.defined(t)&&this._setBooleanOption(`tileCentre`,t),i.defined(e.id))if(i.string(e.id))this.options.tileId=e.id;else throw i.invalidParameterError(`id`,`string`,e.id);if(i.defined(e.basename))if(i.string(e.basename))this.options.tileBasename=e.basename;else throw i.invalidParameterError(`basename`,`string`,e.basename)}if(i.inArray(this.options.formatOut,[`jpeg`,`png`,`webp`]))this.options.tileFormat=this.options.formatOut;else if(this.options.formatOut!==`input`)throw i.invalidParameterError(`format`,`one of: jpeg, png, webp`,this.options.formatOut);return this._updateFormatOut(`dz`)}function N(e){if(!i.plainObject(e))throw i.invalidParameterError(`options`,`object`,e);if(i.integer(e.seconds)&&i.inRange(e.seconds,0,3600))this.options.timeoutSeconds=e.seconds;else throw i.invalidParameterError(`seconds`,`integer between 0 and 3600`,e.seconds);return this}function P(e,t){return i.object(t)&&t.force===!1||(this.options.formatOut=e),this}function F(e,t){if(i.bool(t))this.options[e]=t;else throw i.invalidParameterError(e,`boolean`,t)}function I(){if(!this.options.streamOut){this.options.streamOut=!0;let e=Error();this._pipeline(void 0,e)}}function L(e,t){return typeof e==`function`?(this._isStreamInput()?this.on(`finish`,()=>{this._flattenBufferIn(),a.pipeline(this.options,(n,r,a)=>{n?e(i.nativeError(n,t)):e(null,r,a)})}):a.pipeline(this.options,(n,r,a)=>{n?e(i.nativeError(n,t)):e(null,r,a)}),this):this.options.streamOut?(this._isStreamInput()?(this.once(`finish`,()=>{this._flattenBufferIn(),a.pipeline(this.options,(e,n,r)=>{e?this.emit(`error`,i.nativeError(e,t)):(this.emit(`info`,r),this.push(n)),this.push(null),this.on(`end`,()=>this.emit(`close`))})}),this.streamInFinished&&this.emit(`finish`)):a.pipeline(this.options,(e,n,r)=>{e?this.emit(`error`,i.nativeError(e,t)):(this.emit(`info`,r),this.push(n)),this.push(null),this.on(`end`,()=>this.emit(`close`))}),this):this._isStreamInput()?new Promise((e,n)=>{this.once(`finish`,()=>{this._flattenBufferIn(),a.pipeline(this.options,(r,a,o)=>{r?n(i.nativeError(r,t)):this.options.resolveWithObject?e({data:a,info:o}):e(a)})})}):new Promise((e,n)=>{a.pipeline(this.options,(r,a,o)=>{r?n(i.nativeError(r,t)):this.options.resolveWithObject?e({data:a,info:o}):e(a)})})}n.exports=function(e){Object.assign(e.prototype,{toFile:u,toBuffer:d,keepExif:p,withExif:m,withExifMerge:h,keepIccProfile:g,withIccProfile:_,keepMetadata:v,withMetadata:y,toFormat:b,jpeg:x,jp2:T,png:S,webp:C,tiff:D,avif:O,heif:k,jxl:A,gif:w,raw:j,tile:M,timeout:N,_updateFormatOut:P,_setBooleanOption:F,_read:I,_pipeline:L})}})),re=a(((n,r)=>{var i=t(`node:events`),a=d(),o=f(),{runtimePlatformArch:s}=V(),c=H(),l=s(),u=c.libvipsVersion(),m=c.format();m.heif.output.alias=[`avif`,`heic`],m.jpeg.output.alias=[`jpe`,`jpg`],m.tiff.output.alias=[`tif`],m.jp2k.output.alias=[`j2c`,`j2k`,`jp2`,`jpx`];var h={nearest:`nearest`,bilinear:`bilinear`,bicubic:`bicubic`,locallyBoundedBicubic:`lbb`,nohalo:`nohalo`,vertexSplitQuadraticBasisSpline:`vsqbs`},g={vips:u.semver};if(!u.isGlobal)if(u.isWasm)try{g=t(`@img/sharp-wasm32/versions`)}catch{}else try{g=t(`@img/sharp-${l}/versions`)}catch{try{g=t(`@img/sharp-libvips-${l}/versions`)}catch{}}g.sharp=(B(),e(p).default).version,g.heif&&m.heif&&(m.heif.input.fileSuffix=[`.avif`],m.heif.output.alias=[`avif`]);function _(e){return o.bool(e)?e?c.cache(50,20,100):c.cache(0,0,0):o.object(e)?c.cache(e.memory,e.files,e.items):c.cache()}_(!0);function v(e){return c.concurrency(o.integer(e)?e:null)}a.familySync()===a.GLIBC&&!c._isUsingJemalloc()?c.concurrency(1):a.familySync()===a.MUSL&&c.concurrency()===1024&&c.concurrency(t(`node:os`).availableParallelism());var y=new i.EventEmitter;function b(){return c.counters()}function x(e){return c.simd(o.bool(e)?e:null)}function S(e){if(o.object(e))if(Array.isArray(e.operation)&&e.operation.every(o.string))c.block(e.operation,!0);else throw o.invalidParameterError(`operation`,`Array<string>`,e.operation);else throw o.invalidParameterError(`options`,`object`,e)}function C(e){if(o.object(e))if(Array.isArray(e.operation)&&e.operation.every(o.string))c.block(e.operation,!1);else throw o.invalidParameterError(`operation`,`Array<string>`,e.operation);else throw o.invalidParameterError(`options`,`object`,e)}r.exports=function(e){e.cache=_,e.concurrency=v,e.counters=b,e.simd=x,e.format=m,e.interpolators=h,e.versions=g,e.queue=y,e.block=S,e.unblock=C}})),ie=a(((e,t)=>{var n=U();J()(n),Y()(n),X()(n),Z()(n),ee()(n),te()(n),ne()(n),re()(n),t.exports=n})),Q,$;n((()=>{Q=r(ie(),1),$=Q.default}))();export{$ as default,$ as sharp};
@@ -0,0 +1 @@
1
+ import{a as e,t}from"./chunk-DR8-3Aex.js";import{b as n,n as r,t as i,x as a}from"./esm-CL1OwlZB.js";import{t as o}from"./src-DhqzQjMg.js";var s=t((t=>{Object.defineProperty(t,`__esModule`,{value:!0}),t.OTLPLogExporter=void 0;var s=o(),c=(r(),e(i)),l=(a(),e(n));t.OTLPLogExporter=class extends l.OTLPExporterBase{constructor(e={}){super((0,s.createOtlpGrpcExportDelegate)((0,s.convertLegacyOtlpGrpcOptions)(e,`LOGS`),c.ProtobufLogsSerializer,`LogsExportService`,`/opentelemetry.proto.collector.logs.v1.LogsService/Export`))}}})),c=t((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.OTLPLogExporter=void 0;var t=s();Object.defineProperty(e,`OTLPLogExporter`,{enumerable:!0,get:function(){return t.OTLPLogExporter}})}));export default c();export{};
@@ -0,0 +1 @@
1
+ var e=2048;async function t(e){return n()}function n(){for(let e of[`CLAUDE_CODE_URL_EVENT`,`CLAUDE_CODE_DEEP_LINK_URL`,`CLAUDE_CODE_URL`]){let t=process.env[e];if(r(t))return t}return process.argv.find(r)??null}function r(t){return typeof t==`string`&&t.length<=e&&(t.startsWith(`claude-cli://`)||t.startsWith(`claude://`))}export{t as waitForUrlEvent};
@@ -0,0 +1 @@
1
+ import{n as e,r as t}from"./chunk-DR8-3Aex.js";var n=t({isModifierPressed:()=>a,prewarm:()=>i});async function r(){if(!(l||process.platform!==`darwin`)){l=!0;try{let e=await import(`bun:ffi`),t=e.dlopen(`/System/Library/Frameworks/Carbon.framework/Carbon`,{CGEventSourceFlagsState:{args:[e.FFIType.i32],returns:e.FFIType.u64}});c=e=>Number(t.symbols.CGEventSourceFlagsState(e))}catch{c=null}}}async function i(){await r()}function a(e){if(process.platform!==`darwin`||c===null)return!1;let t=o[e];return t===void 0?!1:(c(s)&t)!==0}var o,s,c,l,u=e((()=>{o={shift:131072,control:262144,option:524288,command:1048576},s=0,c=null,l=!1}));export{n as i,a as n,i as r,u as t};
@@ -0,0 +1 @@
1
+ import{r as e,t}from"./src-CfeAM1FB.js";t();export{e as prewarm};
@@ -0,0 +1,26 @@
1
+ import{B as e,M as t,d as n,n as r,t as i}from"./server-XZG51Slr.js";import{t as a}from"./lib-Ddq71jM5.js";import{n as o,t as s}from"./stdio-iX0TTmbp.js";import{basename as c,extname as l,join as u}from"node:path";import{chmodSync as d,existsSync as f,mkdirSync as p,readFileSync as m,unlinkSync as ee,writeFileSync as h}from"node:fs";import{homedir as g,tmpdir as te}from"node:os";import{createCipheriv as ne,createDecipheriv as re,createHash as ie,randomBytes as _,randomUUID as v}from"node:crypto";var y={NONE:0,USER:1,BOT:2},b={NONE:0,TEXT:1,IMAGE:2,VOICE:3,FILE:4,VIDEO:5},x={NEW:0,GENERATING:1,FINISH:2},S={IMAGE:1,VIDEO:2,FILE:3,VOICE:4},ae={TYPING:1,CANCEL:2},oe=`0.1.0`;function C(){return{channel_version:oe}}function w(){return _(4).toString(`base64`)}function T(e){let t={"Content-Type":`application/json`,"X-WECHAT-UIN":w()};return e&&(t.AuthorizationType=`ilink_bot_token`,t.Authorization=`Bearer ${e}`),t}async function E(e,t,n,r,i=4e4,a){let o=new AbortController,s=setTimeout(()=>o.abort(),i);a&&a.addEventListener(`abort`,()=>o.abort(),{once:!0});try{let i=await fetch(`${e}${t}`,{method:`POST`,headers:T(r),body:JSON.stringify(n),signal:o.signal});if(!i.ok)throw Error(`HTTP ${i.status}: ${i.statusText}`);return await i.json()}finally{clearTimeout(s)}}async function se(e,t,n,r){let i={get_updates_buf:n,base_info:C()};try{return await E(e,`/ilink/bot/getupdates`,i,t,4e4,r)}catch(e){if(e instanceof Error&&e.name===`AbortError`)return{ret:0,msgs:[],get_updates_buf:n};throw e}}async function D(e,t,n){await E(e,`/ilink/bot/sendmessage`,{msg:n,base_info:C()},t)}async function O(e,t,n){return E(e,`/ilink/bot/getuploadurl`,{...n,base_info:C()},t)}async function k(e,t,n,r){return E(e,`/ilink/bot/getconfig`,{ilink_user_id:n,context_token:r,base_info:C()},t)}async function A(e,t,n){return E(e,`/ilink/bot/sendtyping`,{...n,base_info:C()},t)}var j=`https://ilinkai.weixin.qq.com`,M=`https://novac2c.cdn.weixin.qq.com/c2c`;function N(){let e=process.env.WEIXIN_STATE_DIR||u(g(),`.zaniicode`,`channels`,`weixin`);return f(e)||p(e,{recursive:!0}),e}function P(){return u(N(),`account.json`)}function F(){let e=P();if(!f(e))return null;try{return JSON.parse(m(e,`utf-8`))}catch{return null}}function ce(e){let t=P();h(t,JSON.stringify(e,null,2),`utf-8`),d(t,384)}function le(){let e=P();f(e)&&ee(e)}var ue=a();async function I(e){let t=await(0,ue.toString)(e,{type:`terminal`,errorCorrectionLevel:`L`,small:!0});process.stderr.write(`${t}\n`)}async function L(e){let t=await fetch(`${e}/ilink/bot/get_bot_qrcode?bot_type=3`);if(!t.ok)throw Error(`Failed to get QR code: HTTP ${t.status}`);let n=await t.json();if(!n.qrcode)throw Error(`No qrcode in response`);let r=n.qrcode_img_content||``;return r&&await I(r),{qrcodeUrl:r,qrcodeId:n.qrcode,message:`Scan the QR code with WeChat to connect.`}}async function R(e){let{qrcodeId:t,apiBaseUrl:n,timeoutMs:r=48e4,maxRetries:i=3}=e,a=Date.now()+r,o=t,s=0;for(;Date.now()<a;){try{let e=new AbortController,t=setTimeout(()=>e.abort(),6e4),r=await fetch(`${n}/ilink/bot/get_qrcode_status?qrcode=${encodeURIComponent(o)}`,{headers:{"iLink-App-ClientVersion":`1`},signal:e.signal});if(clearTimeout(t),!r.ok)throw Error(`HTTP ${r.status}`);let a=await r.json();switch(a.status){case`confirmed`:return{connected:!0,token:a.bot_token,accountId:a.ilink_bot_id,baseUrl:a.baseurl,userId:a.ilink_user_id,message:`Connected to WeChat successfully!`};case`scaned`:process.stderr.write(`QR code scanned, waiting for confirmation...
2
+ `);break;case`expired`:if(s+=1,s>=i)return{connected:!1,message:`QR code expired after maximum retries.`};process.stderr.write(`QR code expired, refreshing...
3
+ `),o=(await L(n)).qrcodeId;break;default:break}}catch(e){if(e instanceof Error&&e.name===`AbortError`)continue;throw e}await new Promise(e=>setTimeout(e,1e3))}return{connected:!1,message:`Login timed out.`}}function z(){return u(N(),`access.json`)}function B(){return u(N(),`pending-pairings.json`)}function V(){let e=B();if(!f(e))return{};try{return JSON.parse(m(e,`utf-8`))}catch{return{}}}function H(e){h(B(),JSON.stringify(e,null,2),`utf-8`)}function U(){let e=z();if(!f(e))return{policy:`pairing`,allowFrom:[]};try{return JSON.parse(m(e,`utf-8`))}catch{return{policy:`pairing`,allowFrom:[]}}}function de(e){h(z(),JSON.stringify(e,null,2),`utf-8`)}function fe(e){let t=U();return t.policy===`disabled`?!0:t.allowFrom.includes(e)}function pe(e){let t=V(),n=Date.now();for(let e of Object.keys(t))t[e].expiresAt<n&&delete t[e];for(let[n,r]of Object.entries(t))if(r.userId===e)return H(t),n;let r=String(Math.floor(1e5+Math.random()*9e5));return t[r]={userId:e,expiresAt:n+600*1e3},H(t),r}function me(e){let t=V(),n=t[e];if(!n||n.expiresAt<Date.now())return delete t[e],H(t),null;delete t[e],H(t);let r=U();return r.allowFrom.includes(n.userId)||(r.allowFrom.push(n.userId),de(r)),n.userId}function he(e,t){let n=ne(`aes-128-ecb`,t,null);return Buffer.concat([n.update(e),n.final()])}function ge(e,t){let n=re(`aes-128-ecb`,t,null);return Buffer.concat([n.update(e),n.final()])}function _e(e,t){return`${t}/download?encrypted_query_param=${encodeURIComponent(e)}`}function ve(e,t,n){return`${e}/upload?encrypted_query_param=${encodeURIComponent(t)}&filekey=${encodeURIComponent(n)}`}function ye(e){let t=Buffer.from(e,`base64`);if(t.length===16)return t;if(t.length===32&&/^[0-9a-fA-F]{32}$/.test(t.toString(`ascii`)))return Buffer.from(t.toString(`ascii`),`hex`);throw Error(`Invalid aes_key: expected 16 raw bytes or 32 hex chars, got ${t.length} bytes`)}async function be(e){let t=_e(e.encryptQueryParam,e.cdnBaseUrl),n=await fetch(t);if(!n.ok)throw Error(`CDN download failed: HTTP ${n.status}`);return ge(Buffer.from(await n.arrayBuffer()),ye(e.aesKey))}async function W(e){let t=m(e.filePath),n=t.length,r=ie(`md5`).update(t).digest(`hex`),i=_(16),a=_(16).toString(`hex`),o=he(t,i),s=o.length,l=await O(e.apiBaseUrl,e.token,{filekey:a,media_type:e.mediaType,to_user_id:e.toUserId,rawsize:n,rawfilemd5:r,filesize:s,no_need_thumb:!0,aeskey:i.toString(`hex`)});if(!l.upload_param)throw Error(`No upload_param in response`);let u=ve(e.cdnBaseUrl,l.upload_param,a),d=await fetch(u,{method:`POST`,headers:{"Content-Type":`application/octet-stream`},body:new Uint8Array(o)});if(!d.ok)throw Error(`CDN upload failed: HTTP ${d.status}`);return{encryptQueryParam:d.headers.get(`x-encrypted-param`)||``,aesKey:Buffer.from(i.toString(`hex`)).toString(`base64`),fileSize:s,rawSize:n,fileName:c(e.filePath)}}function xe(e){let t=l(e).toLowerCase();return[`.jpg`,`.jpeg`,`.png`,`.gif`,`.bmp`,`.webp`,`.heic`].includes(t)?S.IMAGE:[`.mp4`,`.mov`,`.avi`,`.mkv`,`.webm`].includes(t)?S.VIDEO:S.FILE}function Se(e){let t=``,n=0;for(;n<e.length;)if(e.startsWith("```",n)){let r=n+3;for(;r<e.length&&e[r]!==`
4
+ `;)r++;r<e.length&&r++;let i=r;for(;r<e.length;){if(e.startsWith("```",r)){for(t+=e.slice(i,r),r+=3;r<e.length&&e[r]!==`
5
+ `;)r++;r<e.length&&r++;break}r++}r>=e.length&&!e.startsWith("```",r-3)&&(t+=e.slice(n)),n=r}else t+=e[n],n++;return t}function G(e){return Se(e).replace(/`([^`]+)`/g,`$1`).replace(/\*\*\*(.+?)\*\*\*/g,`$1`).replace(/\*\*(.+?)\*\*/g,`$1`).replace(/\*(.+?)\*/g,`$1`).replace(/___(.+?)___/g,`$1`).replace(/__(.+?)__/g,`$1`).replace(/_(.+?)_/g,`$1`).replace(/~~(.+?)~~/g,`$1`).replace(/^#{1,6}\s+/gm,``).replace(/\[([^\]]+)\]\(([^)]+)\)/g,`$1 ($2)`).replace(/!\[([^\]]*)\]\([^)]+\)/g,`[$1]`).replace(/^>\s+/gm,``).replace(/^[-*_]{3,}$/gm,`---`).replace(/^[\s]*[-*+]\s+/gm,`- `).replace(/^[\s]*(\d+)\.\s+/gm,`$1. `).replace(/\n{3,}/g,`
6
+
7
+ `).trim()}async function K(e){let t=v();return await D(e.baseUrl,e.token,{to_user_id:e.to,from_user_id:``,client_id:t,message_type:y.BOT,message_state:x.FINISH,context_token:e.contextToken,item_list:[{type:b.TEXT,text_item:{text:G(e.text)}}]}),{messageId:t}}async function Ce(e){let t=``;for(let n of e.items)t=v(),await D(e.baseUrl,e.token,{to_user_id:e.to,from_user_id:``,client_id:t,message_type:y.BOT,message_state:x.FINISH,context_token:e.contextToken,item_list:[n]});return t}async function we(e){let t=xe(e.filePath),n=await W({filePath:e.filePath,toUserId:e.to,mediaType:t,apiBaseUrl:e.baseUrl,token:e.token,cdnBaseUrl:e.cdnBaseUrl}),r={encrypt_query_param:n.encryptQueryParam,aes_key:n.aesKey,encrypt_type:1},i=[];switch(e.text&&i.push({type:b.TEXT,text_item:{text:G(e.text)}}),t){case 1:i.push({type:b.IMAGE,image_item:{media:r,mid_size:n.fileSize}});break;case 2:i.push({type:b.VIDEO,video_item:{media:r,video_size:n.fileSize}});break;default:i.push({type:b.FILE,file_item:{media:r,file_name:n.fileName,len:String(n.rawSize)}});break}return{messageId:await Ce({items:i,to:e.to,baseUrl:e.baseUrl,token:e.token,contextToken:e.contextToken})}}var Te=900*1e3,q=new Map,J=null;function Y(e=Date.now()){for(let[t,n]of q.entries())n.expiresAt<=e&&q.delete(t)}function Ee(e,t){J={chatId:e,contextToken:t,updatedAt:Date.now()}}function De(){return J}function Oe(e,t,n){Y();let r={...e,chatId:t,contextToken:n,createdAt:Date.now(),expiresAt:Date.now()+Te};return q.set(e.request_id.toLowerCase(),r),r}function ke(e,t){Y();let n=e.toLowerCase(),r=q.get(n);return!r||r.chatId!==t?null:(q.delete(n),r)}var Ae=/^\s*(y|yes|n|no)\s+([a-km-z]{5})\s*$/i,X=new Map;function Z(e){return X.get(e)}function Q(){return u(N(),`cursor.txt`)}function je(){let e=Q();return f(e)?m(e,`utf-8`).trim():``}function Me(e){h(Q(),e,`utf-8`)}async function Ne(e,t){let n,r,i=``,a=``;switch(e.type){case b.IMAGE:n=e.image_item?.media?.encrypt_query_param,r=e.image_item?.aeskey?Buffer.from(e.image_item.aeskey,`hex`).toString(`base64`):e.image_item?.media?.aes_key,i=`.jpg`,a=`image`;break;case b.VOICE:n=e.voice_item?.media?.encrypt_query_param,r=e.voice_item?.media?.aes_key,i=`.silk`,a=`voice`;break;case b.FILE:n=e.file_item?.media?.encrypt_query_param,r=e.file_item?.media?.aes_key,i=e.file_item?.file_name?`.${e.file_item.file_name.split(`.`).pop()}`:``,a=`file`;break;case b.VIDEO:n=e.video_item?.media?.encrypt_query_param,r=e.video_item?.media?.aes_key,i=`.mp4`,a=`video`;break;default:return null}if(!n||!r)return null;try{let o=await be({encryptQueryParam:n,aesKey:r,cdnBaseUrl:t}),s=u(te(),`weixin-media`);f(s)||p(s,{recursive:!0});let l=u(s,c(e.file_item?.file_name||`${Date.now()}${i}`));return h(l,o),{path:l,type:a}}catch(e){return process.stderr.write(`[weixin] Failed to download media: ${e}\n`),null}}function Pe(e){let t=e.match(Ae);if(!t)return null;let n=t[1]?.toLowerCase().startsWith(`y`)?`allow`:`deny`,r=t[2]?.toLowerCase();return r?{requestId:r,behavior:n}:null}async function Fe(e){let{baseUrl:t,cdnBaseUrl:n,token:r,onMessage:i,onPermissionResponse:a,abortSignal:o}=e,s=je(),c=0;for(process.stderr.write(`[weixin] Starting message poll loop...
8
+ `);!o.aborted;)try{let e=await se(t,r,s,o);if(e.errcode===-14){process.stderr.write(`[weixin] Session expired (errcode -14). Pausing for 30s...
9
+ `),await new Promise(e=>setTimeout(e,3e4));continue}if(e.ret!==0&&e.ret!==void 0)throw Error(`getUpdates error: ret=${e.ret} errcode=${e.errcode} ${e.errmsg}`);if(c=0,e.get_updates_buf&&(s=e.get_updates_buf,Me(s)),e.msgs&&e.msgs.length>0)for(let o of e.msgs)await Ie(o,{baseUrl:t,cdnBaseUrl:n,token:r,onMessage:i,onPermissionResponse:a})}catch(e){if(o.aborted)break;c+=1,process.stderr.write(`[weixin] Poll error (${c}): ${e instanceof Error?e.message:String(e)}\n`),c>=3?(process.stderr.write(`[weixin] Too many consecutive errors, backing off 30s...
10
+ `),await new Promise(e=>setTimeout(e,3e4)),c=0):await new Promise(e=>setTimeout(e,2e3))}process.stderr.write(`[weixin] Poll loop stopped.
11
+ `)}async function Ie(e,t){if(e.message_type!==y.USER)return;let n=e.from_user_id;if(!n)return;if(e.context_token&&X.set(n,e.context_token),!fe(n)){let r=pe(n);try{await K({to:n,text:`Your pairing code is: ${r}\n\nAsk the operator to confirm:\nccb weixin access pair ${r}`,baseUrl:t.baseUrl,token:t.token,contextToken:e.context_token||``})}catch(e){process.stderr.write(`[weixin] Failed to send pairing code: ${e}\n`)}return}Ee(n,e.context_token);let r=``,i,a;if(e.item_list){for(let n of e.item_list)if(n.type===b.TEXT&&n.text_item?.text)r+=`${r?`
12
+ `:``}${n.text_item.text}`;else if(n.type===b.IMAGE||n.type===b.VOICE||n.type===b.FILE||n.type===b.VIDEO){let e=await Ne(n,t.cdnBaseUrl);e&&(i=e.path,a=e.type),n.type===b.VOICE&&n.voice_item?.text&&(r+=`${r?`
13
+ `:``}[Voice transcription]: ${n.voice_item.text}`)}}if(!(!r&&!i)){if(r&&t.onPermissionResponse){let e=Pe(r);if(e){let r=ke(e.requestId,n);if(r){await t.onPermissionResponse({requestId:r.request_id,behavior:e.behavior,fromUserId:n});return}}}await t.onMessage({fromUserId:n,messageId:String(e.message_id||``),text:r||`(media attachment)`,attachmentPath:i,attachmentType:a})}}r(),o(),e();function Le(e){return[`Claude Code needs your approval.`,``,`Tool: ${e.tool_name}`,`Reason: ${e.description}`,`Input: ${e.input_preview}`,``,`Reply with: yes ${e.request_id}`,`Or deny with: no ${e.request_id}`].join(`
14
+ `)}function Re(e){let r=new i({name:`weixin`,version:e},{capabilities:{experimental:{"claude/channel":{},"claude/channel/permission":{}},tools:{}},instructions:`Messages from WeChat arrive as <channel source="plugin:weixin:weixin" chat_id="..." sender_id="...">. Reply using the reply tool with the chat_id from the channel tag. Use absolute paths for file attachments.`});return r.setRequestHandler(t,async()=>({tools:[{name:`reply`,description:`Reply to a WeChat message. Pass the chat_id from the channel tag.`,inputSchema:{type:`object`,properties:{chat_id:{type:`string`,description:`The chat_id from the channel notification`},text:{type:`string`,description:`The reply text`},files:{type:`array`,items:{type:`string`},description:`Optional absolute file paths to attach`}},required:[`chat_id`,`text`]}},{name:`send_typing`,description:`Send a typing indicator to a WeChat user.`,inputSchema:{type:`object`,properties:{chat_id:{type:`string`,description:`The chat_id (user ID)`}},required:[`chat_id`]}}]})),r.setRequestHandler(n,async e=>{let{name:t,arguments:n}=e.params,r=F();if(!r)return{content:[{type:`text`,text:"WeChat not connected. Run `ccb weixin login` first."}],isError:!0};let i=r.baseUrl||`https://ilinkai.weixin.qq.com`,a=M;switch(t){case`reply`:{let e=typeof n?.chat_id==`string`?n.chat_id:``,t=typeof n?.text==`string`?n.text:``,o=Array.isArray(n?.files)?n.files.filter(e=>typeof e==`string`):void 0;if(!e||!t)return{content:[{type:`text`,text:`Missing chat_id or text parameter.`}],isError:!0};let s=Z(e)||``;try{if(o&&o.length>0){for(let[n,c]of o.entries()){if(!f(c))return{content:[{type:`text`,text:`File not found: ${c}`}],isError:!0};await we({filePath:c,to:e,text:n===0?t:``,baseUrl:i,token:r.token,contextToken:s,cdnBaseUrl:a})}return{content:[{type:`text`,text:`Message sent with attachments.`}]}}return await K({to:e,text:t,baseUrl:i,token:r.token,contextToken:s}),{content:[{type:`text`,text:`Message sent.`}]}}catch(e){return{content:[{type:`text`,text:`Failed to send: ${e}`}],isError:!0}}}case`send_typing`:{let e=typeof n?.chat_id==`string`?n.chat_id:``;if(!e)return{content:[{type:`text`,text:`Missing chat_id parameter.`}],isError:!0};try{let t=Z(e),n=await k(i,r.token,e,t);return n.typing_ticket&&await A(i,r.token,{ilink_user_id:e,typing_ticket:n.typing_ticket,status:ae.TYPING}),{content:[{type:`text`,text:`Typing indicator sent.`}]}}catch(e){return{content:[{type:`text`,text:`Failed to send typing: ${e}`}],isError:!0}}}default:return{content:[{type:`text`,text:`Unknown tool: ${t}`}],isError:!0}}}),r}async function ze(e,t){t.enableConfigs(),t.initializeAnalyticsSink();let n=F();n||(process.stderr.write("[weixin] No account configured. Run `ccb weixin login` to connect your WeChat account.\n"),await Promise.all([t.shutdown1PEventLogging(),t.shutdownDatadog()]),process.exit(1));let r=Re(e),i=new s;t.registerPermissionHandler(r,async e=>{let r=e.channel_context?.chat_id,i=r?{chatId:r,contextToken:Z(r)}:De();if(!i){t.logForDebugging(`[Weixin MCP] No active chat available for permission request ${e.request_id}`);return}try{Oe(e,i.chatId,i.contextToken),await K({to:i.chatId,text:Le(e),baseUrl:a,token:n.token,contextToken:i.contextToken||``})}catch(t){process.stderr.write(`[weixin] Failed to relay permission request ${e.request_id}: ${t}\n`)}}),await r.connect(i);let a=n.baseUrl||`https://ilinkai.weixin.qq.com`,o=new AbortController,c=!1,l=async()=>{c||(c=!0,o.signal.aborted||o.abort(),await Promise.all([t.shutdown1PEventLogging(),t.shutdownDatadog()]),process.exit(0))};process.stdin.on(`end`,()=>void l()),process.stdin.on(`error`,()=>void l()),process.on(`SIGINT`,()=>void l()),process.on(`SIGTERM`,()=>void l()),process.on(`SIGHUP`,()=>void l());let u=process.ppid,d=setInterval(()=>{try{process.kill(u,0)}catch{process.stderr.write(`[weixin] Parent process exited, shutting down...
15
+ `),clearInterval(d),l()}},5e3);t.logForDebugging(`[Weixin MCP] Starting poll loop`),await Fe({baseUrl:a,cdnBaseUrl:M,token:n.token,onMessage:async e=>{await r.notification({method:`notifications/claude/channel`,params:{content:e.text,meta:{chat_id:e.fromUserId,sender_id:e.fromUserId,message_id:e.messageId,...e.attachmentPath&&{attachment_path:e.attachmentPath},...e.attachmentType&&{attachment_type:e.attachmentType}}}})},onPermissionResponse:async e=>{await r.notification({method:`notifications/claude/channel/permission`,params:{request_id:e.requestId,behavior:e.behavior}})},abortSignal:o.signal}),clearInterval(d),await l()}function $(){process.stdout.write([`Usage:`,` ccb weixin serve`,` ccb weixin login`,` ccb weixin login clear`,` ccb weixin access pair <code>`,``,`Session enablement:`,` ccb --channels plugin:weixin@builtin`].join(`
16
+ `)+`
17
+ `)}async function Be(e=!1){if(e){le(),process.stdout.write(`WeChat account cleared.
18
+ `);return}let t=F();if(t){process.stdout.write([`Already connected:`,` User ID: ${t.userId||`unknown`}`,` Connected since: ${t.savedAt}`,``,"Run `ccb weixin login clear` to disconnect.",`Restart Claude Code with:`,` ccb --channels plugin:weixin@builtin`].join(`
19
+ `)+`
20
+ `);return}process.stdout.write(`Starting WeChat QR login...
21
+
22
+ `);let n=await L(j);process.stdout.write(`\nScan the QR code above with WeChat, or open this URL:\n${n.qrcodeUrl||``}\n\n`);let r=await R({qrcodeId:n.qrcodeId,apiBaseUrl:j});(!r.connected||!r.token)&&(process.stderr.write(`Login failed: ${r.message}\n`),process.exit(1)),ce({token:r.token,baseUrl:r.baseUrl||`https://ilinkai.weixin.qq.com`,userId:r.userId,savedAt:new Date().toISOString()}),process.stdout.write([`Connected successfully!`,` User ID: ${r.userId||`unknown`}`,` Base URL: ${r.baseUrl||`https://ilinkai.weixin.qq.com`}`,``,`Restart Claude Code with:`,` ccb --channels plugin:weixin@builtin`].join(`
23
+ `)+`
24
+ `)}function Ve(e){(e[0]!==`pair`||!e[1])&&($(),process.exit(1));let t=me(e[1]);t||(process.stderr.write(`Invalid or expired pairing code.
25
+ `),process.exit(1)),process.stdout.write(`Paired successfully: ${t}\n`)}async function He(e,t,n){let[r,...i]=e;switch(r){case`serve`:t||(process.stderr.write(`[weixin] serve handler not available in this context.
26
+ `),process.exit(1)),await ze(n??`0.0.0`,t);return;case`login`:await Be(i[0]===`clear`);return;case`access`:Ve(i);return;default:$()}}export{He as handleWeixinCli};