hyperclaw 5.3.45 → 5.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (438) hide show
  1. package/README.md +1 -0
  2. package/dist/a2ui-protocol-CibzbTxL.js +75 -0
  3. package/dist/a2ui-protocol-Dtb8zlog.js +75 -0
  4. package/dist/a2ui-protocol-ORP2Etw0.js +75 -0
  5. package/dist/a2ui-protocol-whRZHdBk.js +75 -0
  6. package/dist/abort-controller-B55O1IgK.js +47995 -0
  7. package/dist/agents-routing-Ai2BQVpU.js +7 -0
  8. package/dist/agents-routing-B0RBl1B8.js +424 -0
  9. package/dist/agents-routing-BSUaOpce.js +7 -0
  10. package/dist/agents-routing-C4PVN8G6.js +7 -0
  11. package/dist/agents-routing-Dcr29-JV.js +424 -0
  12. package/dist/agents-routing-EwzORQQv.js +424 -0
  13. package/dist/agents-routing-Fd-uQ4R_.js +7 -0
  14. package/dist/agents-routing-eLjVYBAk.js +424 -0
  15. package/dist/api-key-validation-BANgbsfO.js +66 -0
  16. package/dist/api-key-validation-Bnz-0MMK.js +66 -0
  17. package/dist/api-key-validation-D_fMCaO5.js +66 -0
  18. package/dist/api-key-validation-Db7rG3JU.js +66 -0
  19. package/dist/api-keys-guide-B6AJ1V5D.js +149 -0
  20. package/dist/api-keys-guide-C75JQOdH.js +149 -0
  21. package/dist/api-keys-guide-CFJPrgsL.js +149 -0
  22. package/dist/api-keys-guide-DDz08BJQ.js +149 -0
  23. package/dist/audit-BLMB8qp7.js +445 -0
  24. package/dist/audit-Cb2TvqYZ.js +445 -0
  25. package/dist/audit-D7koAKvj.js +445 -0
  26. package/dist/audit-xP_175jB.js +445 -0
  27. package/dist/backup-7l3iovkX.js +86 -0
  28. package/dist/backup-BKLTHh62.js +86 -0
  29. package/dist/backup-CspxXk78.js +86 -0
  30. package/dist/backup-D8dFYDXV.js +86 -0
  31. package/dist/banner-B2Qo91lq.js +143 -0
  32. package/dist/banner-CZ2BfvQq.js +143 -0
  33. package/dist/banner-CjTRWmks.js +7 -0
  34. package/dist/banner-CmNA9NKE.js +7 -0
  35. package/dist/banner-D3-Ik5d2.js +143 -0
  36. package/dist/banner-D3X8tQ-0.js +7 -0
  37. package/dist/banner-Dpygks0H.js +143 -0
  38. package/dist/banner-ZX1WLr44.js +7 -0
  39. package/dist/bounty-tools-Cq-oC9gk.js +211 -0
  40. package/dist/bounty-tools-DZ-WtRdE.js +211 -0
  41. package/dist/bounty-tools-DhpmjF5Y.js +211 -0
  42. package/dist/bounty-tools-NGuBWI55.js +211 -0
  43. package/dist/browser-tools-5Fl1hP_2.js +5 -0
  44. package/dist/browser-tools-Ay-wU_a4.js +5 -0
  45. package/dist/browser-tools-BMgBB2fK.js +179 -0
  46. package/dist/browser-tools-kcViDwk5.js +179 -0
  47. package/dist/chat-BGD9AWhr.js +523 -0
  48. package/dist/chat-BUa1oGqj.js +528 -0
  49. package/dist/chat-CiuT-GTs.js +528 -0
  50. package/dist/chat-D8wFNN4z.js +523 -0
  51. package/dist/chat-DfI8uOzF.js +528 -0
  52. package/dist/chat-Dz5rmUSs.js +528 -0
  53. package/dist/chat-RTmX1F16.js +528 -0
  54. package/dist/claw-tasks-Cio1Q7eA.js +80 -0
  55. package/dist/claw-tasks-DzxNWVcz.js +80 -0
  56. package/dist/claw-tasks-L7vQSGlt.js +80 -0
  57. package/dist/claw-tasks-dndWneZW.js +80 -0
  58. package/dist/config-B-W-Mz4X.js +7 -0
  59. package/dist/config-BAwkTUJC.js +261 -0
  60. package/dist/config-CYPw2v4l.js +261 -0
  61. package/dist/config-DN9fdLL3.js +261 -0
  62. package/dist/config-FejpHHTz.js +261 -0
  63. package/dist/config-Tq_GJHf7.js +7 -0
  64. package/dist/config-n4qy5jIy.js +7 -0
  65. package/dist/config-qJUYRMzx.js +7 -0
  66. package/dist/connector-CwT7KZm2.js +309 -0
  67. package/dist/connector-DX4k-lGd.js +442 -0
  68. package/dist/cost-tracker-C2q5zKic.js +103 -0
  69. package/dist/cost-tracker-CsRQAOEr.js +103 -0
  70. package/dist/cost-tracker-DAXWN5YT.js +103 -0
  71. package/dist/cost-tracker-bySvehH6.js +103 -0
  72. package/dist/credentials-store-BAW87r6f.js +7 -0
  73. package/dist/credentials-store-BHtk7_H_.js +7 -0
  74. package/dist/credentials-store-CESgFvFU.js +89 -0
  75. package/dist/credentials-store-CR4WSDGl.js +7 -0
  76. package/dist/credentials-store-CXq4kZub.js +89 -0
  77. package/dist/credentials-store-DUp8dtaS.js +89 -0
  78. package/dist/credentials-store-hiSga8qn.js +89 -0
  79. package/dist/credentials-store-kLdrmqSt.js +7 -0
  80. package/dist/cron-tasks-BFsaCKxE.js +89 -0
  81. package/dist/cron-tasks-BelA2aUW.js +89 -0
  82. package/dist/cron-tasks-D1T9fWAb.js +89 -0
  83. package/dist/cron-tasks-f_ieXSG2.js +89 -0
  84. package/dist/daemon-BTYhQvD_.js +7 -0
  85. package/dist/daemon-BoaFnmdF.js +421 -0
  86. package/dist/daemon-BrHxr4ut.js +421 -0
  87. package/dist/daemon-BzdeLgON.js +421 -0
  88. package/dist/daemon-BzqWIC4v.js +7 -0
  89. package/dist/daemon-C3OczPR1.js +7 -0
  90. package/dist/daemon-D-klsy3i.js +7 -0
  91. package/dist/daemon-D57KIIA3.js +421 -0
  92. package/dist/daemon-D8uyH9et.js +7 -0
  93. package/dist/daemon-DBTtYx6E.js +421 -0
  94. package/dist/daemon-D_bYfHgn.js +421 -0
  95. package/dist/daemon-DcE6vcjH.js +421 -0
  96. package/dist/daemon-NFwpuo3L.js +7 -0
  97. package/dist/daemon-srcdhzUG.js +7 -0
  98. package/dist/delivery-Bt0xW6L9.js +4 -0
  99. package/dist/delivery-C2sAERN7.js +4 -0
  100. package/dist/delivery-CF2Q4hb1.js +95 -0
  101. package/dist/delivery-CfMljOwk.js +95 -0
  102. package/dist/delivery-DP0d4_A4.js +95 -0
  103. package/dist/delivery-DXYt4aMO.js +4 -0
  104. package/dist/delivery-DXxP2UL4.js +4 -0
  105. package/dist/delivery-jT2UIDlU.js +95 -0
  106. package/dist/destructive-gate-5LYh6brt.js +116 -0
  107. package/dist/destructive-gate-B_hNKtu6.js +116 -0
  108. package/dist/destructive-gate-DvxPSDMR.js +116 -0
  109. package/dist/destructive-gate-Qd2y7x1B.js +116 -0
  110. package/dist/dist-B1qvBUax.js +30541 -0
  111. package/dist/engine-B7Q4Vx-C.js +7 -0
  112. package/dist/engine-BBJlKpMP.js +7 -0
  113. package/dist/engine-BNygJfCo.js +335 -0
  114. package/dist/engine-C-G3G-U7.js +7 -0
  115. package/dist/engine-DB4MBzki.js +7 -0
  116. package/dist/engine-DPi9fhMl.js +332 -0
  117. package/dist/engine-DRpy9Y5O.js +327 -0
  118. package/dist/engine-DeaqDcaT.js +7 -0
  119. package/dist/engine-DetHi9LP.js +327 -0
  120. package/dist/engine-DuvXJrUP.js +335 -0
  121. package/dist/engine-HkyTC_xl.js +332 -0
  122. package/dist/engine-JysunhPR.js +7 -0
  123. package/dist/engine-MzEUw7qb.js +7 -0
  124. package/dist/engine-j9Yaqt_-.js +332 -0
  125. package/dist/env-resolve--MaE2kFF.js +167 -0
  126. package/dist/env-resolve-BYWG94tK.js +11 -0
  127. package/dist/env-resolve-Bop7KbNq.js +167 -0
  128. package/dist/env-resolve-Buos635Y.js +167 -0
  129. package/dist/env-resolve-D3dP1-Xt.js +11 -0
  130. package/dist/env-resolve-DvsbhPKl.js +11 -0
  131. package/dist/env-resolve-NNM3F6Eo.js +167 -0
  132. package/dist/env-resolve-dTjn-g8X.js +11 -0
  133. package/dist/extraction-tools-Bh5F0ENP.js +91 -0
  134. package/dist/extraction-tools-BjzXD9LW.js +5 -0
  135. package/dist/extraction-tools-D1lrDYhe.js +5 -0
  136. package/dist/extraction-tools-FBwtT2Bx.js +91 -0
  137. package/dist/fileFromPath-CodL6KXh.js +85 -0
  138. package/dist/gmail-watch-setup--eQ8raeb.js +42 -0
  139. package/dist/gmail-watch-setup-9t14gy1B.js +42 -0
  140. package/dist/gmail-watch-setup-B9fx_OLg.js +42 -0
  141. package/dist/gmail-watch-setup-DP3kDRx1.js +42 -0
  142. package/dist/heartbeat-engine-5iOlL7Dj.js +89 -0
  143. package/dist/heartbeat-engine-Bu4q18GH.js +89 -0
  144. package/dist/heartbeat-engine-CF_JjNJ4.js +89 -0
  145. package/dist/heartbeat-engine-CLADYZxE.js +89 -0
  146. package/dist/hub-CZeGrS20.js +6 -0
  147. package/dist/hub-DAkEVTEy.js +545 -0
  148. package/dist/hyperclawbot-BqyZr2GM.js +516 -0
  149. package/dist/hyperclawbot-CNVUtvYC.js +516 -0
  150. package/dist/hyperclawbot-D5ofLNgm.js +516 -0
  151. package/dist/hyperclawbot-D61zVMyQ.js +516 -0
  152. package/dist/hyperclawbot-DTzP20Up.js +516 -0
  153. package/dist/hyperclawbot-DwScttSx.js +516 -0
  154. package/dist/hyperclawbot-v65eL2U0.js +516 -0
  155. package/dist/inference-BEvs7s3c.js +2854 -0
  156. package/dist/inference-C4b9YqXk.js +8 -0
  157. package/dist/inference-CRF6HyyH.js +2854 -0
  158. package/dist/inference-CfhTACI8.js +2854 -0
  159. package/dist/inference-DGsy36Ru.js +8 -0
  160. package/dist/inference-Da7Hw4J3.js +8 -0
  161. package/dist/inference-DhJ-SHZn.js +8 -0
  162. package/dist/inference-K7Jrnzre.js +2854 -0
  163. package/dist/isFile-CSxoSB8X.js +2274 -0
  164. package/dist/knowledge-graph-BdsJ5KEL.js +134 -0
  165. package/dist/knowledge-graph-CFRBepzr.js +134 -0
  166. package/dist/knowledge-graph-CeDeahui.js +134 -0
  167. package/dist/knowledge-graph-DoYFZnUr.js +134 -0
  168. package/dist/loader-C2qtNbtF.js +6 -0
  169. package/dist/loader-D6yjBYo4.js +410 -0
  170. package/dist/loader-DBO6yRNh.js +6 -0
  171. package/dist/loader-DUhmG3V9.js +410 -0
  172. package/dist/loader-Dl8LNycw.js +6 -0
  173. package/dist/loader-UpOYxgZv.js +6 -0
  174. package/dist/loader-hXv2mZjK.js +410 -0
  175. package/dist/loader-nDBcv3Tm.js +410 -0
  176. package/dist/logger-BD316YbA.js +86 -0
  177. package/dist/logger-BnXZkfsp.js +86 -0
  178. package/dist/logger-CmphFNmW.js +86 -0
  179. package/dist/logger-DkHzhh56.js +86 -0
  180. package/dist/manager-3-q8zuAW.js +250 -0
  181. package/dist/manager-BkMzc-EJ.js +250 -0
  182. package/dist/manager-Bq5LApdR.js +6 -0
  183. package/dist/manager-CNgdJunf.js +250 -0
  184. package/dist/manager-CozyZSDG.js +250 -0
  185. package/dist/manager-D4mDWXph.js +120 -0
  186. package/dist/manager-DuS-WQhZ.js +120 -0
  187. package/dist/manager-Dz2eKYqo.js +116 -0
  188. package/dist/manager-R0TlRMZy.js +120 -0
  189. package/dist/manager-aJfY7rt6.js +120 -0
  190. package/dist/mcp-BH7HtOQ8.js +142 -0
  191. package/dist/mcp-CAJSA_ee.js +142 -0
  192. package/dist/mcp-CD-iIQa2.js +142 -0
  193. package/dist/mcp-DGo37Ifb.js +142 -0
  194. package/dist/mcp-loader-BAGRKfJz.js +93 -0
  195. package/dist/mcp-loader-Ct1NQKnX.js +93 -0
  196. package/dist/mcp-loader-D1T6UX73.js +93 -0
  197. package/dist/mcp-loader-DJk6MEof.js +93 -0
  198. package/dist/mcp-loader-DdXvU63s.js +93 -0
  199. package/dist/mcp-loader-Dt64EewT.js +93 -0
  200. package/dist/mcp-loader-gMliiJ7R.js +93 -0
  201. package/dist/memory-CyonlkTy.js +6 -0
  202. package/dist/memory-DPSWQBc0.js +276 -0
  203. package/dist/memory-auto-B0QOqaUD.js +306 -0
  204. package/dist/memory-auto-BSxYJugl.js +5 -0
  205. package/dist/memory-auto-CcFRxMj-.js +306 -0
  206. package/dist/memory-auto-CifT5aj_.js +5 -0
  207. package/dist/memory-auto-Cp2Jwx3Y.js +306 -0
  208. package/dist/memory-auto-DjK_D8CA.js +306 -0
  209. package/dist/memory-auto-N57dp4Do.js +5 -0
  210. package/dist/memory-auto-n0kOcU7F.js +5 -0
  211. package/dist/memory-integration-D8shLJwp.js +91 -0
  212. package/dist/memory-integration-DLmzJ62L.js +91 -0
  213. package/dist/memory-integration-DMXDbMIL.js +91 -0
  214. package/dist/memory-integration-Dgr-mjue.js +91 -0
  215. package/dist/moltbook-CIeOshK6.js +81 -0
  216. package/dist/moltbook-CX5XWn06.js +81 -0
  217. package/dist/moltbook-DUfiE4NY.js +81 -0
  218. package/dist/moltbook-YEiNI8Cm.js +81 -0
  219. package/dist/multi-agent-tools-jzfvT4zP.js +87 -0
  220. package/dist/multimodal-zZdwqISl.js +77 -0
  221. package/dist/node-BYrxELx2.js +251 -0
  222. package/dist/node-CLWgPlAk.js +251 -0
  223. package/dist/node-Czz8Y85D.js +251 -0
  224. package/dist/node-Du2H2Ddi.js +226 -0
  225. package/dist/node-domexception-v89b0Nwz.js +21 -0
  226. package/dist/node-pending-queue-DUXCbYkp.js +32 -0
  227. package/dist/node-pending-queue-DZp7cdfo.js +32 -0
  228. package/dist/node-pending-queue-iYpoWqxe.js +32 -0
  229. package/dist/nodes-registry-BTy7Sc7D.js +52 -0
  230. package/dist/nodes-registry-BYjmmJBU.js +52 -0
  231. package/dist/nodes-registry-C8GeEGq0.js +52 -0
  232. package/dist/nodes-registry-Du6Klz0l.js +52 -0
  233. package/dist/oauth-flow-BA0yMrHx.js +148 -0
  234. package/dist/oauth-flow-C4QSMsbl.js +148 -0
  235. package/dist/oauth-flow-CIuDBDsp.js +148 -0
  236. package/dist/oauth-flow-CniM4jlJ.js +148 -0
  237. package/dist/oauth-provider-BA4GVFKg.js +111 -0
  238. package/dist/oauth-provider-Bnul5A_Z.js +111 -0
  239. package/dist/oauth-provider-DqPXPiiC.js +111 -0
  240. package/dist/oauth-provider-MEgHjij2.js +111 -0
  241. package/dist/observability-0spm7MPz.js +89 -0
  242. package/dist/observability-BOMYgHUh.js +89 -0
  243. package/dist/observability-CDqHr-_o.js +89 -0
  244. package/dist/observability-ah2a7sh1.js +89 -0
  245. package/dist/onboard-32d2Gsuy.js +14 -0
  246. package/dist/onboard-BJ78s3NT.js +3854 -0
  247. package/dist/onboard-C55YXd_e.js +14 -0
  248. package/dist/onboard-CNnm4yYp.js +3841 -0
  249. package/dist/onboard-CXSVPnP7.js +3854 -0
  250. package/dist/onboard-Cgj_CIrq.js +3812 -0
  251. package/dist/onboard-ChnsqU5z.js +14 -0
  252. package/dist/onboard-CjzqTYq3.js +3812 -0
  253. package/dist/onboard-CwvXXOR1.js +14 -0
  254. package/dist/onboard-CxlIsNhX.js +3854 -0
  255. package/dist/onboard-DPmufMqX.js +14 -0
  256. package/dist/onboard-F9lKA2ie.js +14 -0
  257. package/dist/onboard-UTQXzlPD.js +3854 -0
  258. package/dist/onboard-hK098kjl.js +14 -0
  259. package/dist/openai-CrdtuLxw.js +6292 -0
  260. package/dist/orchestrator-5M-6MB7r.js +6 -0
  261. package/dist/orchestrator-B3BjP1dy.js +6 -0
  262. package/dist/orchestrator-BZS62iDS.js +6 -0
  263. package/dist/orchestrator-Bcj7uc1F.js +189 -0
  264. package/dist/orchestrator-C7oLWNFW.js +6 -0
  265. package/dist/orchestrator-CTMbjgH_.js +6 -0
  266. package/dist/orchestrator-Crn4fgbI.js +189 -0
  267. package/dist/orchestrator-Cs6s-QmS.js +189 -0
  268. package/dist/orchestrator-Cuyqncql.js +189 -0
  269. package/dist/orchestrator-CxlEm5li.js +6 -0
  270. package/dist/orchestrator-DGqwsLmO.js +189 -0
  271. package/dist/orchestrator-UUHsFKiH.js +6 -0
  272. package/dist/orchestrator-oa7HbCnF.js +189 -0
  273. package/dist/orchestrator-tUKag7pG.js +189 -0
  274. package/dist/osint-ADgw_Gkd.js +283 -0
  275. package/dist/osint-B5j3IuJK.js +283 -0
  276. package/dist/osint-BJvOCmVk.js +283 -0
  277. package/dist/osint-CK9xVUUm.js +283 -0
  278. package/dist/osint-D6vQXCWh.js +283 -0
  279. package/dist/osint-DLYZsp1k.js +283 -0
  280. package/dist/osint-cAAdO-cx.js +283 -0
  281. package/dist/osint-chat-B0lc0Y6r.js +789 -0
  282. package/dist/osint-chat-BUhiSpf9.js +789 -0
  283. package/dist/osint-chat-BbH6eW8z.js +789 -0
  284. package/dist/osint-chat-C-9FVAkU.js +789 -0
  285. package/dist/osint-chat-CWET8Fno.js +789 -0
  286. package/dist/osint-chat-Cgdzg3lh.js +789 -0
  287. package/dist/osint-chat-xRP672b-.js +789 -0
  288. package/dist/pc-access-BCaF5mRs.js +858 -0
  289. package/dist/pc-access-BOcXappE.js +858 -0
  290. package/dist/pc-access-BgZNmAdB.js +8 -0
  291. package/dist/pc-access-CAoM6WN4.js +8 -0
  292. package/dist/pc-access-D2HdoziZ.js +8 -0
  293. package/dist/pc-access-D4g0fjQb.js +858 -0
  294. package/dist/pending-approval-CJPyt8U5.js +22 -0
  295. package/dist/pending-approval-CzMNCTfZ.js +22 -0
  296. package/dist/pending-approval-DaXi7otO.js +22 -0
  297. package/dist/pending-approval-KcyeiifE.js +22 -0
  298. package/dist/providers-DrZP0NeR.js +5 -0
  299. package/dist/providers-dHhpJo9j.js +1120 -0
  300. package/dist/reminders-store-B58LldEG.js +58 -0
  301. package/dist/reminders-store-C4gWckLa.js +58 -0
  302. package/dist/reminders-store-DT0o6a60.js +58 -0
  303. package/dist/renderer-B8c22rbg.js +228 -0
  304. package/dist/renderer-BS0ETL20.js +228 -0
  305. package/dist/renderer-Cg3c41A5.js +228 -0
  306. package/dist/renderer-UoPcgaAd.js +228 -0
  307. package/dist/rules-D0v5nuSE.js +106 -0
  308. package/dist/rules-DCKPgwLb.js +106 -0
  309. package/dist/rules-Zn9j4PnO.js +106 -0
  310. package/dist/rules-oAgOSPHC.js +106 -0
  311. package/dist/run-main.js +457 -131
  312. package/dist/runner-BaZ2V27T.js +1307 -0
  313. package/dist/runner-Bgl7UTbV.js +1307 -0
  314. package/dist/runner-DOKp3-v5.js +1307 -0
  315. package/dist/runner-voYdfM_f.js +1307 -0
  316. package/dist/search-tools-BBwMa8VX.js +107 -0
  317. package/dist/search-tools-CEUOO9Jf.js +107 -0
  318. package/dist/search-tools-VHP3xVyC.js +107 -0
  319. package/dist/search-tools-w_zT7-dr.js +107 -0
  320. package/dist/server-6TIyu0mb.js +4 -0
  321. package/dist/server-BAdJwMM9.js +4 -0
  322. package/dist/server-BD9FLc7S.js +1384 -0
  323. package/dist/server-BlqWBbS7.js +4 -0
  324. package/dist/server-BzwPvTbD.js +1447 -0
  325. package/dist/server-CBvSfG4w.js +4 -0
  326. package/dist/server-CbNBcB41.js +4 -0
  327. package/dist/server-DPTXaJJF.js +4 -0
  328. package/dist/server-Da_jSrfS.js +4 -0
  329. package/dist/server-Dv2zHHy-.js +1447 -0
  330. package/dist/server-MDmdWHob.js +1447 -0
  331. package/dist/server-N9LnLQCS.js +1447 -0
  332. package/dist/server-gai_RW1u.js +1356 -0
  333. package/dist/server-vbYKep6r.js +1356 -0
  334. package/dist/session-store-C6Otslf9.js +5 -0
  335. package/dist/session-store-Cmfnvuw9.js +141 -0
  336. package/dist/session-store-CuR9DgRf.js +5 -0
  337. package/dist/session-store-Cx1RMBhS.js +5 -0
  338. package/dist/session-store-DPPHkJBn.js +5 -0
  339. package/dist/session-store-DWLCWQFS.js +141 -0
  340. package/dist/session-store-qGufR_m5.js +141 -0
  341. package/dist/session-store-sUpA509O.js +141 -0
  342. package/dist/sessions-tools-9Z8TtdmP.js +5 -0
  343. package/dist/sessions-tools-BAZnoQLp.js +95 -0
  344. package/dist/sessions-tools-Bb_zF947.js +95 -0
  345. package/dist/sessions-tools-ClrKqLII.js +131 -0
  346. package/dist/sessions-tools-DFe23ZDD.js +5 -0
  347. package/dist/sessions-tools-JHSZ6Bns.js +5 -0
  348. package/dist/sessions-tools-TsRdeFb7.js +95 -0
  349. package/dist/sessions-tools-nYP3Agfs.js +5 -0
  350. package/dist/skill-loader-9jg876RH.js +160 -0
  351. package/dist/skill-loader-CM4KWQ7_.js +160 -0
  352. package/dist/skill-loader-CS3OP4Lr.js +160 -0
  353. package/dist/skill-loader-CnJDLNbY.js +7 -0
  354. package/dist/skill-loader-DRLgt5V2.js +160 -0
  355. package/dist/skill-loader-DVpEgYV2.js +7 -0
  356. package/dist/skill-loader-Df5T_UFl.js +7 -0
  357. package/dist/skill-loader-DxE-gZkT.js +7 -0
  358. package/dist/skill-runtime-8Xh5874w.js +104 -0
  359. package/dist/skill-runtime-B3aUdWKh.js +104 -0
  360. package/dist/skill-runtime-BKyhYvpW.js +5 -0
  361. package/dist/skill-runtime-BP0kZfmM.js +5 -0
  362. package/dist/skill-runtime-CHQT7c1k.js +5 -0
  363. package/dist/skill-runtime-CLK5HTVE.js +5 -0
  364. package/dist/skill-runtime-COyc3Bci.js +104 -0
  365. package/dist/skill-runtime-Cfd0OLkP.js +104 -0
  366. package/dist/skill-runtime-CvDXX7wN.js +5 -0
  367. package/dist/skill-runtime-D4REZnhY.js +104 -0
  368. package/dist/skill-runtime-DQRi9sIf.js +5 -0
  369. package/dist/skill-runtime-DRd56NWK.js +104 -0
  370. package/dist/skill-runtime-Dr0fimDf.js +5 -0
  371. package/dist/skill-runtime-DtO4i9vK.js +104 -0
  372. package/dist/src-9GyYED0T.js +63 -0
  373. package/dist/src-B9L6qb-Z.js +462 -0
  374. package/dist/src-BEjIVOmq.js +63 -0
  375. package/dist/src-BY3On_zO.js +462 -0
  376. package/dist/src-BdgKAlMQ.js +20 -0
  377. package/dist/src-C52A3OwC.js +301 -0
  378. package/dist/src-C8cbfjat.js +173 -0
  379. package/dist/src-CDLnbsLp.js +458 -0
  380. package/dist/src-CQ2lZvdF.js +462 -0
  381. package/dist/src-Cdwn9xpG.js +462 -0
  382. package/dist/src-CyCLoqIP.js +63 -0
  383. package/dist/src-D-OND_62.js +301 -0
  384. package/dist/src-D4VRanxB.js +458 -0
  385. package/dist/src-DFo8lVfV.js +300 -0
  386. package/dist/src-DJbpP4Gs.js +462 -0
  387. package/dist/src-DK-ayUx7.js +63 -0
  388. package/dist/src-DPfnArdr.js +300 -0
  389. package/dist/src-DTft7Qvt.js +63 -0
  390. package/dist/src-DgvFah8g.js +153 -0
  391. package/dist/src-H1I7JC2E.js +63 -0
  392. package/dist/src-TYvV_oFO.js +63 -0
  393. package/dist/src-lltU5gkh.js +20 -0
  394. package/dist/sub-agent-tools-BoMCZ6jz.js +39 -0
  395. package/dist/sub-agent-tools-CE8pVUdb.js +39 -0
  396. package/dist/sub-agent-tools-CQWNfYn_.js +39 -0
  397. package/dist/sub-agent-tools-CViiqebO.js +39 -0
  398. package/dist/sub-agent-tools-DgT4jUHC.js +39 -0
  399. package/dist/sub-agent-tools-Dla3ZB5N.js +39 -0
  400. package/dist/sub-agent-tools-Lbin_4S3.js +39 -0
  401. package/dist/tool-policy-1EBdJkSG.js +190 -0
  402. package/dist/tool-policy-B1bL0X-E.js +189 -0
  403. package/dist/tool-policy-NLbucl5-.js +189 -0
  404. package/dist/tool-policy-yNVTLNDY.js +189 -0
  405. package/dist/tts-elevenlabs-Bk24wQ2V.js +64 -0
  406. package/dist/tts-elevenlabs-CHrJZuNW.js +64 -0
  407. package/dist/tts-elevenlabs-DHqQsqMz.js +64 -0
  408. package/dist/tts-elevenlabs-TUKPkSV2.js +64 -0
  409. package/dist/vision-CW1YCKed.js +167 -0
  410. package/dist/vision-DPLmrwUA.js +167 -0
  411. package/dist/vision-Q4EOcBS6.js +167 -0
  412. package/dist/vision-XyAGO5La.js +167 -0
  413. package/dist/vision-tools-B5DNR28M.js +5 -0
  414. package/dist/vision-tools-CC9HSuvN.js +51 -0
  415. package/dist/vision-tools-Ca3OhtdX.js +51 -0
  416. package/dist/vision-tools-CpU2fSRv.js +51 -0
  417. package/dist/vision-tools-Ct52djW8.js +51 -0
  418. package/dist/vision-tools-DF7N2DDI.js +5 -0
  419. package/dist/vision-tools-DyP6lRA5.js +5 -0
  420. package/dist/vision-tools-RIVKEUeY.js +5 -0
  421. package/dist/voice-transcription-Bz2y0nPK.js +170 -0
  422. package/dist/voice-transcription-CVFcHpPF.js +170 -0
  423. package/dist/voice-transcription-CvQuWPYK.js +170 -0
  424. package/dist/voice-transcription-YqndiLA7.js +170 -0
  425. package/dist/website-watch-tools-B036Y8OQ.js +176 -0
  426. package/dist/website-watch-tools-B8CHie8v.js +5 -0
  427. package/dist/website-watch-tools-Brk5oIEv.js +176 -0
  428. package/dist/website-watch-tools-CJqRj_GB.js +5 -0
  429. package/dist/website-watch-tools-CSSEu3Qy.js +5 -0
  430. package/dist/website-watch-tools-D92dkYZa.js +176 -0
  431. package/dist/website-watch-tools-Du_a8lXq.js +176 -0
  432. package/dist/website-watch-tools-UdTBGgRk.js +5 -0
  433. package/package.json +147 -143
  434. package/scripts/fix-mojibake.mjs +166 -0
  435. package/static/web/assets/{index-BeAuHLb2.js → index-8bDizzaq.js} +2 -2
  436. package/static/web/assets/index-B5N1LHGR.css +1 -0
  437. package/static/web/index.html +2 -2
  438. package/static/web/assets/index-D2RfO0dG.css +0 -1
@@ -0,0 +1,424 @@
1
+ const require_chunk = require('./chunk-jS-bbMI5.js');
2
+ const require_paths = require('./paths-AIyBxIzm.js');
3
+ const require_paths$1 = require('./paths-DPovhojT.js');
4
+ const chalk = require_chunk.__toESM(require("chalk"));
5
+ const inquirer = require_chunk.__toESM(require("inquirer"));
6
+ const fs_extra = require_chunk.__toESM(require("fs-extra"));
7
+ const path = require_chunk.__toESM(require("path"));
8
+
9
+ //#region src/routing/session-key.ts
10
+ /**
11
+
12
+ * Compute the canonical session key for an inbound message context.
13
+
14
+ */
15
+ function computeSessionKey(ctx) {
16
+ const { agentId, channel, peerKind, peerId, threadId, topicId, dmScope } = ctx;
17
+ if (peerKind === "dm") {
18
+ if (dmScope === "main" || dmScope === void 0) return `agent:${agentId}:main`;
19
+ return `agent:${agentId}:${channel}:dm:${peerId}`;
20
+ }
21
+ if (peerKind === "group") {
22
+ let key$1 = `agent:${agentId}:${channel}:group:${peerId}`;
23
+ if (topicId) key$1 += `:topic:${topicId}`;
24
+ if (threadId) key$1 += `:thread:${threadId}`;
25
+ return key$1;
26
+ }
27
+ let key = `agent:${agentId}:${channel}:channel:${peerId}`;
28
+ if (threadId) key += `:thread:${threadId}`;
29
+ return key;
30
+ }
31
+
32
+ //#endregion
33
+ //#region src/routing/agents-routing.ts
34
+ require_paths$1.init_paths();
35
+ function defaultAgent() {
36
+ const hcDir = require_paths.getHyperClawDir();
37
+ return {
38
+ id: "main",
39
+ name: "main",
40
+ workspace: path.default.join(hcDir, "workspace"),
41
+ default: true
42
+ };
43
+ }
44
+ var AgentRouter = class {
45
+ config;
46
+ constructor(config) {
47
+ this.config = config ?? this._loadConfig();
48
+ }
49
+ _loadConfig() {
50
+ const cfgPath = require_paths.getConfigPath();
51
+ const hcDir = require_paths.getHyperClawDir();
52
+ const routingFile = path.default.join(hcDir, "routing.json");
53
+ const legacyBindingsFile = path.default.join(hcDir, "agent-bindings.json");
54
+ let fromMain = false;
55
+ try {
56
+ const mainCfg = fs_extra.default.readJsonSync(cfgPath);
57
+ const bindings = mainCfg?.bindings;
58
+ const agentsList = mainCfg?.agents?.list;
59
+ if (Array.isArray(bindings) || Array.isArray(agentsList)) {
60
+ fromMain = true;
61
+ return {
62
+ agents: { list: agentsList && agentsList.length > 0 ? agentsList : [defaultAgent()] },
63
+ bindings: Array.isArray(bindings) ? bindings : [],
64
+ session: mainCfg?.session || { dmScope: "main" },
65
+ broadcast: mainCfg?.broadcast,
66
+ channels: mainCfg?.channels
67
+ };
68
+ }
69
+ } catch {}
70
+ try {
71
+ const legacy = fs_extra.default.readJsonSync(routingFile);
72
+ if (legacy?.bindings?.length || legacy?.agents?.list?.length) return this._migrateToMain(legacy, cfgPath);
73
+ } catch {}
74
+ try {
75
+ const arr = fs_extra.default.readJsonSync(legacyBindingsFile);
76
+ if (Array.isArray(arr) && arr.length > 0) {
77
+ const bindings = arr.map((b) => ({
78
+ match: { channel: b.channelId },
79
+ agentId: b.agentName,
80
+ createdAt: (/* @__PURE__ */ new Date()).toISOString()
81
+ }));
82
+ const migrated = {
83
+ agents: { list: [defaultAgent()] },
84
+ bindings,
85
+ session: { dmScope: "main" }
86
+ };
87
+ return this._migrateToMain(migrated, cfgPath);
88
+ }
89
+ } catch {}
90
+ return {
91
+ agents: { list: [defaultAgent()] },
92
+ bindings: [],
93
+ session: { dmScope: "main" }
94
+ };
95
+ }
96
+ _migrateToMain(legacy, cfgPath) {
97
+ try {
98
+ let current = {};
99
+ if (fs_extra.default.existsSync(cfgPath)) current = fs_extra.default.readJsonSync(cfgPath);
100
+ const next = {
101
+ ...current,
102
+ bindings: legacy.bindings ?? [],
103
+ agents: {
104
+ ...current?.agents,
105
+ list: legacy.agents?.list ?? [defaultAgent()]
106
+ },
107
+ ...legacy.broadcast ? { broadcast: legacy.broadcast } : {},
108
+ ...legacy.session ? { session: legacy.session } : {}
109
+ };
110
+ fs_extra.default.ensureDirSync(path.default.dirname(cfgPath));
111
+ fs_extra.default.writeJsonSync(cfgPath, next, { spaces: 2 });
112
+ } catch (e) {
113
+ console.warn("[agents-routing] Migration write failed:", e.message);
114
+ }
115
+ return legacy;
116
+ }
117
+ async _saveConfig() {
118
+ const { ConfigStore } = await Promise.resolve().then(() => require("./config-qJUYRMzx.js"));
119
+ const store = new ConfigStore();
120
+ const current = await store.load();
121
+ await store.patch({
122
+ bindings: this.config.bindings ?? [],
123
+ agents: {
124
+ ...current?.agents,
125
+ list: this.config.agents?.list ?? [defaultAgent()]
126
+ },
127
+ ...this.config.broadcast ? { broadcast: this.config.broadcast } : {},
128
+ ...this.config.session ? { session: this.config.session } : {}
129
+ });
130
+ }
131
+ route(msg) {
132
+ const agents = this.config.agents?.list ?? [defaultAgent()];
133
+ const bindings = this.config.bindings ?? [];
134
+ const broadcastAgents = this._resolveBroadcast(msg);
135
+ const matched = this._matchBinding(msg, bindings, agents);
136
+ const agentDef = matched.agentDef;
137
+ const sessionKey = this._computeKey(msg, agentDef.id);
138
+ const skipLastRoute = msg.isDM ? this._shouldSkipLastRoute(msg) : false;
139
+ return {
140
+ agentId: agentDef.id,
141
+ agentDef,
142
+ sessionKey,
143
+ matchedBy: matched.matchedBy,
144
+ ...broadcastAgents.length > 1 ? { broadcast: broadcastAgents } : {},
145
+ ...skipLastRoute ? { skipLastRoute: true } : {}
146
+ };
147
+ }
148
+ _matchBinding(msg, bindings, agents) {
149
+ const find = (id) => agents.find((a) => a.id === id) ?? defaultAgent();
150
+ for (const b of bindings) {
151
+ if (!this._matchesFilter(msg, b.match)) continue;
152
+ return {
153
+ agentDef: find(b.agentId),
154
+ matchedBy: this._describeMatch(b.match)
155
+ };
156
+ }
157
+ const def = agents.find((a) => a.default) ?? agents[0] ?? defaultAgent();
158
+ return {
159
+ agentDef: def,
160
+ matchedBy: "default"
161
+ };
162
+ }
163
+ _matchesFilter(msg, match) {
164
+ if (match.channel && match.channel !== msg.channel) return false;
165
+ if (match.accountId && match.accountId !== "*" && match.accountId !== msg.accountId) return false;
166
+ if (match.peer) {
167
+ if (match.peer.kind !== msg.peer.kind) return false;
168
+ if (match.peer.id !== msg.peer.id) return false;
169
+ }
170
+ if (match.guildId && match.guildId !== msg.guildId) return false;
171
+ if (match.roles?.length) {
172
+ const senderRoles = msg.roles ?? [];
173
+ if (!match.roles.every((r) => senderRoles.includes(r))) return false;
174
+ }
175
+ if (match.teamId && match.teamId !== msg.teamId) return false;
176
+ return true;
177
+ }
178
+ _describeMatch(m) {
179
+ const parts = [];
180
+ if (m.channel) parts.push(`channel=${m.channel}`);
181
+ if (m.peer) parts.push(`peer=${m.peer.kind}:${m.peer.id}`);
182
+ if (m.guildId) parts.push(`guild=${m.guildId}`);
183
+ if (m.teamId) parts.push(`team=${m.teamId}`);
184
+ if (m.accountId) parts.push(`account=${m.accountId}`);
185
+ return parts.join(" ") || "channel-match";
186
+ }
187
+ _computeKey(msg, agentId) {
188
+ const dmScope = this.config.session?.dmScope ?? "main";
189
+ const ctx = {
190
+ agentId,
191
+ channel: msg.channel,
192
+ peerKind: msg.isDM ? "dm" : msg.peer.kind,
193
+ peerId: msg.peer.id,
194
+ threadId: msg.threadId,
195
+ topicId: msg.topicId,
196
+ dmScope: msg.isDM ? dmScope : void 0
197
+ };
198
+ return computeSessionKey(ctx);
199
+ }
200
+ _resolveBroadcast(msg) {
201
+ const bc = this.config.broadcast;
202
+ if (!bc) return [];
203
+ const agentIds = bc[msg.peer.id] ?? bc[msg.senderId];
204
+ if (Array.isArray(agentIds)) return agentIds;
205
+ return [];
206
+ }
207
+ /**
208
+ * Returns true when the inbound DM sender is not the pinned owner.
209
+ * Pinned owner = the single non-wildcard allowFrom entry for this channel.
210
+ */
211
+ _shouldSkipLastRoute(msg) {
212
+ const chanCfg = this.config.channels?.[msg.channel];
213
+ if (!chanCfg?.allowFrom) return false;
214
+ const nonWild = chanCfg.allowFrom.filter((id) => id !== "*" && id !== "**");
215
+ if (nonWild.length !== 1) return false;
216
+ const pinnedOwner = nonWild[0];
217
+ return msg.senderId !== pinnedOwner;
218
+ }
219
+ resolveDefaultAccount(channelId) {
220
+ return this.config.channels?.[channelId]?.defaultAccount;
221
+ }
222
+ listBindings() {
223
+ const agents = this.config.agents?.list ?? [];
224
+ const bindings = this.config.bindings ?? [];
225
+ console.log(chalk.default.bold.cyan("\n 🦅 AGENT BINDINGS\n"));
226
+ if (agents.length === 0) {
227
+ console.log(chalk.default.gray(" No agents configured.\n"));
228
+ return;
229
+ }
230
+ for (const a of agents) {
231
+ const def = a.default ? chalk.default.green(" [default]") : "";
232
+ const model = a.model ? chalk.default.gray(` model:${a.model}`) : "";
233
+ console.log(` ${chalk.default.bold(a.id)}${def} ${chalk.default.gray(a.workspace)}${model}`);
234
+ }
235
+ console.log();
236
+ if (bindings.length === 0) {
237
+ console.log(chalk.default.gray(" No explicit bindings — all traffic → default agent.\n"));
238
+ return;
239
+ }
240
+ console.log(chalk.default.bold(" Bindings:\n"));
241
+ for (const b of bindings) {
242
+ const m = b.match;
243
+ const parts = [];
244
+ if (m.channel) parts.push(chalk.default.cyan(m.channel));
245
+ if (m.peer) parts.push(`peer:${m.peer.kind}/${chalk.default.white(m.peer.id)}`);
246
+ if (m.guildId) parts.push(`guild:${chalk.default.white(m.guildId)}`);
247
+ if (m.teamId) parts.push(`team:${chalk.default.white(m.teamId)}`);
248
+ if (m.roles?.length) parts.push(`roles:[${m.roles.join(",")}]`);
249
+ if (m.accountId) parts.push(`account:${m.accountId}`);
250
+ console.log(` ${parts.join(" ")} ${chalk.default.gray("→")} ${chalk.default.bold(b.agentId)}`);
251
+ }
252
+ const bc = this.config.broadcast;
253
+ if (bc) {
254
+ console.log(chalk.default.bold("\n Broadcast groups:\n"));
255
+ const strat = bc.strategy ?? "parallel";
256
+ for (const [peerId, agents$1] of Object.entries(bc)) {
257
+ if (peerId === "strategy") continue;
258
+ if (Array.isArray(agents$1)) console.log(` ${chalk.default.white(peerId)} ${chalk.default.gray(`→ [${agents$1.join(", ")}]`)} ${chalk.default.gray(`(${strat})`)}`);
259
+ }
260
+ }
261
+ console.log();
262
+ }
263
+ async bind() {
264
+ console.log(chalk.default.cyan("\n Bind a channel/peer to an agent\n"));
265
+ const { channel, matchType } = await inquirer.default.prompt([{
266
+ type: "input",
267
+ name: "channel",
268
+ message: "Channel ID (e.g. telegram, discord, slack, whatsapp):",
269
+ validate: (v) => v.trim().length > 0 || "Required"
270
+ }, {
271
+ type: "list",
272
+ name: "matchType",
273
+ message: "Match by:",
274
+ choices: [
275
+ {
276
+ name: "Any message on this channel",
277
+ value: "channel"
278
+ },
279
+ {
280
+ name: "Specific peer (group ID, user ID, channel ID)",
281
+ value: "peer"
282
+ },
283
+ {
284
+ name: "Discord guild",
285
+ value: "guild"
286
+ },
287
+ {
288
+ name: "Slack team",
289
+ value: "team"
290
+ },
291
+ {
292
+ name: "Account ID",
293
+ value: "account"
294
+ }
295
+ ]
296
+ }]);
297
+ const match = { channel };
298
+ if (matchType === "peer") {
299
+ const { kind, peerId } = await inquirer.default.prompt([{
300
+ type: "list",
301
+ name: "kind",
302
+ message: "Peer type:",
303
+ choices: [
304
+ "group",
305
+ "channel",
306
+ "dm",
307
+ "room"
308
+ ]
309
+ }, {
310
+ type: "input",
311
+ name: "peerId",
312
+ message: "Peer ID:",
313
+ validate: (v) => v.trim().length > 0 || "Required"
314
+ }]);
315
+ match.peer = {
316
+ kind,
317
+ id: peerId
318
+ };
319
+ } else if (matchType === "guild") {
320
+ const { guildId } = await inquirer.default.prompt([{
321
+ type: "input",
322
+ name: "guildId",
323
+ message: "Discord guild ID:",
324
+ validate: (v) => v.trim().length > 0 || "Required"
325
+ }]);
326
+ match.guildId = guildId;
327
+ } else if (matchType === "team") {
328
+ const { teamId } = await inquirer.default.prompt([{
329
+ type: "input",
330
+ name: "teamId",
331
+ message: "Slack team ID:",
332
+ validate: (v) => v.trim().length > 0 || "Required"
333
+ }]);
334
+ match.teamId = teamId;
335
+ } else if (matchType === "account") {
336
+ const { accountId } = await inquirer.default.prompt([{
337
+ type: "input",
338
+ name: "accountId",
339
+ message: "Account ID:",
340
+ validate: (v) => v.trim().length > 0 || "Required"
341
+ }]);
342
+ match.accountId = accountId;
343
+ }
344
+ const agentIds = (this.config.agents?.list ?? []).map((a) => a.id);
345
+ const { agentId } = await inquirer.default.prompt([{
346
+ type: agentIds.length > 1 ? "list" : "input",
347
+ name: "agentId",
348
+ message: "Route to agent ID:",
349
+ choices: agentIds.length > 1 ? agentIds : void 0,
350
+ default: agentIds[0] ?? "main"
351
+ }]);
352
+ if (!this.config.bindings) this.config.bindings = [];
353
+ this.config.bindings.unshift({
354
+ match,
355
+ agentId,
356
+ createdAt: (/* @__PURE__ */ new Date()).toISOString()
357
+ });
358
+ await this._saveConfig();
359
+ console.log(chalk.default.green(`\n ✔ Binding added: ${channel}/${matchType} → ${agentId}\n`));
360
+ }
361
+ async unbind() {
362
+ const bindings = this.config.bindings ?? [];
363
+ if (bindings.length === 0) {
364
+ console.log(chalk.default.gray("\n No bindings to remove.\n"));
365
+ return;
366
+ }
367
+ const { toRemove } = await inquirer.default.prompt([{
368
+ type: "checkbox",
369
+ name: "toRemove",
370
+ message: "Select bindings to remove:",
371
+ choices: bindings.map((b, i) => ({
372
+ name: `${this._describeMatch(b.match)} → ${b.agentId}`,
373
+ value: i
374
+ }))
375
+ }]);
376
+ for (const idx of toRemove.sort((a, b) => b - a)) bindings.splice(idx, 1);
377
+ this.config.bindings = bindings;
378
+ await this._saveConfig();
379
+ console.log(chalk.default.green(`\n ✔ Removed ${toRemove.length} binding(s)\n`));
380
+ }
381
+ getConfig() {
382
+ return this.config;
383
+ }
384
+ getAgents() {
385
+ return this.config.agents?.list ?? [defaultAgent()];
386
+ }
387
+ getBindings() {
388
+ return this.config.bindings ?? [];
389
+ }
390
+ };
391
+ /** Infer agent from workspace (TUI agent inference). Best match = longest workspace prefix. */
392
+ function inferAgentFromWorkspace(cwd, cfg) {
393
+ const list = cfg?.agents?.list;
394
+ if (!Array.isArray(list) || list.length === 0) return null;
395
+ const resolvedCwd = path.default.resolve(cwd);
396
+ let best = null;
397
+ let bestLen = 0;
398
+ for (const a of list) {
399
+ const ws = a.workspace;
400
+ if (!ws || typeof ws !== "string") continue;
401
+ const resolvedWs = path.default.resolve(ws);
402
+ if (resolvedCwd === resolvedWs || resolvedCwd.startsWith(resolvedWs + path.default.sep)) {
403
+ if (resolvedWs.length > bestLen) {
404
+ bestLen = resolvedWs.length;
405
+ best = a;
406
+ }
407
+ }
408
+ }
409
+ return best;
410
+ }
411
+
412
+ //#endregion
413
+ Object.defineProperty(exports, 'AgentRouter', {
414
+ enumerable: true,
415
+ get: function () {
416
+ return AgentRouter;
417
+ }
418
+ });
419
+ Object.defineProperty(exports, 'inferAgentFromWorkspace', {
420
+ enumerable: true,
421
+ get: function () {
422
+ return inferAgentFromWorkspace;
423
+ }
424
+ });
@@ -0,0 +1,66 @@
1
+ const require_chunk = require('./chunk-jS-bbMI5.js');
2
+
3
+ //#region src/infra/api-key-validation.ts
4
+ /**
5
+
6
+ * src/infra/api-key-validation.ts
7
+
8
+ * M-5: API key format/prefix validation for known providers.
9
+
10
+ * Returns an error message if invalid, null if valid or unknown provider.
11
+
12
+ */
13
+ /** Prefix patterns for known providers (loose format check) */
14
+ const PROVIDER_PREFIXES = {
15
+ anthropic: "sk-ant-",
16
+ "anthropic-setup-token": "sk-ant-setup-",
17
+ openai: "sk-",
18
+ openrouter: "sk-or-",
19
+ google: "AIza",
20
+ xai: "xai-",
21
+ tavily: "tvly-",
22
+ "opencode-zen": "oc-",
23
+ "opencode-go": "oc-",
24
+ "vercel-ai": "vercel_",
25
+ groq: "gsk_",
26
+ perplexity: "pplx-"
27
+ };
28
+ /** Minimum length per provider (provider may allow shorter, this is a sanity check) */
29
+ const MIN_LENGTH = {
30
+ anthropic: 20,
31
+ "anthropic-setup-token": 20,
32
+ openai: 20,
33
+ openrouter: 20,
34
+ google: 20,
35
+ xai: 20,
36
+ tavily: 20,
37
+ "opencode-zen": 10,
38
+ "opencode-go": 10,
39
+ "vercel-ai": 20,
40
+ groq: 20
41
+ };
42
+ /**
43
+
44
+ * Validate API key format for a known provider.
45
+
46
+ * @param providerId - Provider ID (e.g. anthropic, openrouter)
47
+
48
+ * @param key - The API key to validate
49
+
50
+ * @returns Error message if invalid, null if valid
51
+
52
+ */
53
+ function validateApiKeyFormat(providerId, key) {
54
+ const k = (key || "").trim();
55
+ if (k.length < 8) return "API key is too short";
56
+ const pid = providerId.toLowerCase().replace(/[^a-z0-9-]/g, "");
57
+ const prefix = PROVIDER_PREFIXES[pid];
58
+ if (!prefix) return null;
59
+ if (!k.startsWith(prefix)) return `Expected key to start with "${prefix}" for ${providerId}. Double-check you copied the full key.`;
60
+ const min = MIN_LENGTH[pid];
61
+ if (min && k.length < min) return `API key seems too short for ${providerId}`;
62
+ return null;
63
+ }
64
+
65
+ //#endregion
66
+ exports.validateApiKeyFormat = validateApiKeyFormat;
@@ -0,0 +1,66 @@
1
+ const require_chunk = require('./chunk-jS-bbMI5.js');
2
+
3
+ //#region src/infra/api-key-validation.ts
4
+ /**
5
+
6
+ * src/infra/api-key-validation.ts
7
+
8
+ * M-5: API key format/prefix validation for known providers.
9
+
10
+ * Returns an error message if invalid, null if valid or unknown provider.
11
+
12
+ */
13
+ /** Prefix patterns for known providers (loose format check) */
14
+ const PROVIDER_PREFIXES = {
15
+ anthropic: "sk-ant-",
16
+ "anthropic-setup-token": "sk-ant-setup-",
17
+ openai: "sk-",
18
+ openrouter: "sk-or-",
19
+ google: "AIza",
20
+ xai: "xai-",
21
+ tavily: "tvly-",
22
+ "opencode-zen": "oc-",
23
+ "opencode-go": "oc-",
24
+ "vercel-ai": "vercel_",
25
+ groq: "gsk_",
26
+ perplexity: "pplx-"
27
+ };
28
+ /** Minimum length per provider (provider may allow shorter, this is a sanity check) */
29
+ const MIN_LENGTH = {
30
+ anthropic: 20,
31
+ "anthropic-setup-token": 20,
32
+ openai: 20,
33
+ openrouter: 20,
34
+ google: 20,
35
+ xai: 20,
36
+ tavily: 20,
37
+ "opencode-zen": 10,
38
+ "opencode-go": 10,
39
+ "vercel-ai": 20,
40
+ groq: 20
41
+ };
42
+ /**
43
+
44
+ * Validate API key format for a known provider.
45
+
46
+ * @param providerId - Provider ID (e.g. anthropic, openrouter)
47
+
48
+ * @param key - The API key to validate
49
+
50
+ * @returns Error message if invalid, null if valid
51
+
52
+ */
53
+ function validateApiKeyFormat(providerId, key) {
54
+ const k = (key || "").trim();
55
+ if (k.length < 8) return "API key is too short";
56
+ const pid = providerId.toLowerCase().replace(/[^a-z0-9-]/g, "");
57
+ const prefix = PROVIDER_PREFIXES[pid];
58
+ if (!prefix) return null;
59
+ if (!k.startsWith(prefix)) return `Expected key to start with "${prefix}" for ${providerId}. Double-check you copied the full key.`;
60
+ const min = MIN_LENGTH[pid];
61
+ if (min && k.length < min) return `API key seems too short for ${providerId}`;
62
+ return null;
63
+ }
64
+
65
+ //#endregion
66
+ exports.validateApiKeyFormat = validateApiKeyFormat;
@@ -0,0 +1,66 @@
1
+ const require_chunk = require('./chunk-jS-bbMI5.js');
2
+
3
+ //#region src/infra/api-key-validation.ts
4
+ /**
5
+
6
+ * src/infra/api-key-validation.ts
7
+
8
+ * M-5: API key format/prefix validation for known providers.
9
+
10
+ * Returns an error message if invalid, null if valid or unknown provider.
11
+
12
+ */
13
+ /** Prefix patterns for known providers (loose format check) */
14
+ const PROVIDER_PREFIXES = {
15
+ anthropic: "sk-ant-",
16
+ "anthropic-setup-token": "sk-ant-setup-",
17
+ openai: "sk-",
18
+ openrouter: "sk-or-",
19
+ google: "AIza",
20
+ xai: "xai-",
21
+ tavily: "tvly-",
22
+ "opencode-zen": "oc-",
23
+ "opencode-go": "oc-",
24
+ "vercel-ai": "vercel_",
25
+ groq: "gsk_",
26
+ perplexity: "pplx-"
27
+ };
28
+ /** Minimum length per provider (provider may allow shorter, this is a sanity check) */
29
+ const MIN_LENGTH = {
30
+ anthropic: 20,
31
+ "anthropic-setup-token": 20,
32
+ openai: 20,
33
+ openrouter: 20,
34
+ google: 20,
35
+ xai: 20,
36
+ tavily: 20,
37
+ "opencode-zen": 10,
38
+ "opencode-go": 10,
39
+ "vercel-ai": 20,
40
+ groq: 20
41
+ };
42
+ /**
43
+
44
+ * Validate API key format for a known provider.
45
+
46
+ * @param providerId - Provider ID (e.g. anthropic, openrouter)
47
+
48
+ * @param key - The API key to validate
49
+
50
+ * @returns Error message if invalid, null if valid
51
+
52
+ */
53
+ function validateApiKeyFormat(providerId, key) {
54
+ const k = (key || "").trim();
55
+ if (k.length < 8) return "API key is too short";
56
+ const pid = providerId.toLowerCase().replace(/[^a-z0-9-]/g, "");
57
+ const prefix = PROVIDER_PREFIXES[pid];
58
+ if (!prefix) return null;
59
+ if (!k.startsWith(prefix)) return `Expected key to start with "${prefix}" for ${providerId}. Double-check you copied the full key.`;
60
+ const min = MIN_LENGTH[pid];
61
+ if (min && k.length < min) return `API key seems too short for ${providerId}`;
62
+ return null;
63
+ }
64
+
65
+ //#endregion
66
+ exports.validateApiKeyFormat = validateApiKeyFormat;
@@ -0,0 +1,66 @@
1
+ const require_chunk = require('./chunk-jS-bbMI5.js');
2
+
3
+ //#region src/infra/api-key-validation.ts
4
+ /**
5
+
6
+ * src/infra/api-key-validation.ts
7
+
8
+ * M-5: API key format/prefix validation for known providers.
9
+
10
+ * Returns an error message if invalid, null if valid or unknown provider.
11
+
12
+ */
13
+ /** Prefix patterns for known providers (loose format check) */
14
+ const PROVIDER_PREFIXES = {
15
+ anthropic: "sk-ant-",
16
+ "anthropic-setup-token": "sk-ant-setup-",
17
+ openai: "sk-",
18
+ openrouter: "sk-or-",
19
+ google: "AIza",
20
+ xai: "xai-",
21
+ tavily: "tvly-",
22
+ "opencode-zen": "oc-",
23
+ "opencode-go": "oc-",
24
+ "vercel-ai": "vercel_",
25
+ groq: "gsk_",
26
+ perplexity: "pplx-"
27
+ };
28
+ /** Minimum length per provider (provider may allow shorter, this is a sanity check) */
29
+ const MIN_LENGTH = {
30
+ anthropic: 20,
31
+ "anthropic-setup-token": 20,
32
+ openai: 20,
33
+ openrouter: 20,
34
+ google: 20,
35
+ xai: 20,
36
+ tavily: 20,
37
+ "opencode-zen": 10,
38
+ "opencode-go": 10,
39
+ "vercel-ai": 20,
40
+ groq: 20
41
+ };
42
+ /**
43
+
44
+ * Validate API key format for a known provider.
45
+
46
+ * @param providerId - Provider ID (e.g. anthropic, openrouter)
47
+
48
+ * @param key - The API key to validate
49
+
50
+ * @returns Error message if invalid, null if valid
51
+
52
+ */
53
+ function validateApiKeyFormat(providerId, key) {
54
+ const k = (key || "").trim();
55
+ if (k.length < 8) return "API key is too short";
56
+ const pid = providerId.toLowerCase().replace(/[^a-z0-9-]/g, "");
57
+ const prefix = PROVIDER_PREFIXES[pid];
58
+ if (!prefix) return null;
59
+ if (!k.startsWith(prefix)) return `Expected key to start with "${prefix}" for ${providerId}. Double-check you copied the full key.`;
60
+ const min = MIN_LENGTH[pid];
61
+ if (min && k.length < min) return `API key seems too short for ${providerId}`;
62
+ return null;
63
+ }
64
+
65
+ //#endregion
66
+ exports.validateApiKeyFormat = validateApiKeyFormat;