hyperclaw 5.1.9 → 5.2.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 (526) hide show
  1. package/README.md +3 -3
  2. package/dist/a2ui-protocol-A2xow5Ch.js +75 -0
  3. package/dist/a2ui-protocol-dTomAnFE.js +75 -0
  4. package/dist/agents-routing-95_s2yea.js +6 -0
  5. package/dist/agents-routing-Bz3SstlK.js +398 -0
  6. package/dist/agents-routing-DHDK2axt.js +6 -0
  7. package/dist/agents-routing-DRMS8Ol-.js +6 -0
  8. package/dist/agents-routing-biXULPch.js +398 -0
  9. package/dist/agents-routing-iQmIOe3k.js +398 -0
  10. package/dist/api-key-validation-BeQ2MZAT.js +64 -0
  11. package/dist/api-key-validation-C2WQk1oM.js +64 -0
  12. package/dist/api-keys-guide-2cD5Rf-K.js +149 -0
  13. package/dist/api-keys-guide-BdT2lfX6.js +149 -0
  14. package/dist/api-keys-guide-BwCIj8qd.js +149 -0
  15. package/dist/audit-1Anq45mH.js +441 -0
  16. package/dist/audit-BAVTInWP.js +441 -0
  17. package/dist/audit-CV0gLGaL.js +444 -0
  18. package/dist/audit-Dnt0XgZD.js +441 -0
  19. package/dist/audit-DqNGdIKU.js +441 -0
  20. package/dist/bounty-tools-Cx7BXUfz.js +211 -0
  21. package/dist/bounty-tools-DWvW3yc-.js +211 -0
  22. package/dist/bounty-tools-FI7DHmsS.js +211 -0
  23. package/dist/bounty-tools-cjmA3Hgk.js +211 -0
  24. package/dist/browser-tools-BGPBCApQ.js +5 -0
  25. package/dist/browser-tools-Btu_vB2d.js +179 -0
  26. package/dist/browser-tools-DF2nQ1hi.js +5 -0
  27. package/dist/browser-tools-DYx4p13A.js +179 -0
  28. package/dist/chat-4ZistSKP.js +310 -0
  29. package/dist/chat-BQMPVq39.js +310 -0
  30. package/dist/chat-BqiMMQc4.js +324 -0
  31. package/dist/chat-BxxYzPaz.js +324 -0
  32. package/dist/chat-C0W8lwhh.js +324 -0
  33. package/dist/chat-CKBxDWAQ.js +324 -0
  34. package/dist/chat-CkCcCkVG.js +324 -0
  35. package/dist/chat-DCOKsydK.js +310 -0
  36. package/dist/chat-DGUj_NDO.js +310 -0
  37. package/dist/chat-DZcZ1Uli.js +310 -0
  38. package/dist/chat-DiIra4_i.js +324 -0
  39. package/dist/claw-tasks-CIkuuhga.js +80 -0
  40. package/dist/claw-tasks-CquRilLP.js +80 -0
  41. package/dist/claw-tasks-xXtZpeY0.js +80 -0
  42. package/dist/config-BEz4yNRx.js +261 -0
  43. package/dist/config-Br73VMLb.js +261 -0
  44. package/dist/config-CXqmvq_H.js +7 -0
  45. package/dist/config-D5vF0kvV.js +261 -0
  46. package/dist/config-D_6MxFk3.js +7 -0
  47. package/dist/config-b2HmFrBr.js +7 -0
  48. package/dist/connector-1H0OW1h8.js +419 -0
  49. package/dist/connector-1qpQ5L-T.js +173 -0
  50. package/dist/connector-2OVpYt0c.js +213 -0
  51. package/dist/connector-8cFkE3X4.js +552 -0
  52. package/dist/connector-B2bZD1id.js +181 -0
  53. package/dist/connector-B3W7quzD.js +568 -0
  54. package/dist/connector-B4FWhOzd.js +189 -0
  55. package/dist/connector-B5fqvoZL.js +239 -0
  56. package/dist/connector-BA8ZbhPt.js +162 -0
  57. package/dist/connector-BFl0XIwB.js +182 -0
  58. package/dist/connector-BIGRhSuN.js +419 -0
  59. package/dist/connector-BK0qVbvh.js +498 -0
  60. package/dist/connector-BMtA4KSF.js +194 -0
  61. package/dist/connector-BPIrifW-.js +218 -0
  62. package/dist/connector-BRNU-rJ4.js +225 -0
  63. package/dist/connector-BS7lvyLd.js +213 -0
  64. package/dist/connector-BZ_-UPUL.js +305 -0
  65. package/dist/connector-Bd0NZ5bT.js +189 -0
  66. package/dist/connector-BjsPwu-Y.js +531 -0
  67. package/dist/connector-BnSsjz1D.js +167 -0
  68. package/dist/connector-BrogAqVQ.js +239 -0
  69. package/dist/connector-BsVTG3U3.js +181 -0
  70. package/dist/connector-By9pLJgR.js +340 -0
  71. package/dist/connector-C7c1ASzT.js +192 -0
  72. package/dist/connector-CIj28thK.js +182 -0
  73. package/dist/connector-CJkuYNd1.js +280 -0
  74. package/dist/connector-CPcUmIHz.js +552 -0
  75. package/dist/connector-CUlP4He3.js +194 -0
  76. package/dist/connector-CZg2I8Tn.js +350 -0
  77. package/dist/connector-C_NtpthL.js +498 -0
  78. package/dist/connector-CddDB9IK.js +192 -0
  79. package/dist/connector-ChQMspky.js +167 -0
  80. package/dist/connector-ClHFpI56.js +425 -0
  81. package/dist/connector-CmhUVhMT.js +531 -0
  82. package/dist/connector-CnX7lwCt.js +425 -0
  83. package/dist/connector-D36oGwnK.js +162 -0
  84. package/dist/connector-DDJ7Nxkq.js +286 -0
  85. package/dist/connector-DDn2QDuf.js +167 -0
  86. package/dist/connector-DO_bzgJn.js +167 -0
  87. package/dist/connector-DVcRo21Y.js +568 -0
  88. package/dist/connector-DhWs2anT.js +189 -0
  89. package/dist/connector-DsY1IXMz.js +508 -0
  90. package/dist/connector-DwRF3CQg.js +218 -0
  91. package/dist/connector-HG61cV9h.js +340 -0
  92. package/dist/connector-HR28FwA5.js +181 -0
  93. package/dist/connector-K0QGRYh5.js +85 -0
  94. package/dist/connector-NliR7NZZ.js +508 -0
  95. package/dist/connector-VolY_hP4.js +350 -0
  96. package/dist/connector-Wjx9ih70.js +286 -0
  97. package/dist/connector-dfqk7NYD.js +181 -0
  98. package/dist/connector-e0W4Mpmq.js +189 -0
  99. package/dist/connector-eK6_phVW.js +280 -0
  100. package/dist/connector-l7UmCYaL.js +225 -0
  101. package/dist/connector-n2YnOJYZ.js +305 -0
  102. package/dist/connector-orobFcqE.js +531 -0
  103. package/dist/connector-r1SRYSqX.js +173 -0
  104. package/dist/connector-tZgn5_Fk.js +85 -0
  105. package/dist/connector-wm4Oe1DK.js +181 -0
  106. package/dist/cost-tracker-DHTv6zpR.js +103 -0
  107. package/dist/cost-tracker-DJ1tiKcx.js +103 -0
  108. package/dist/cost-tracker-jbK_AoIV.js +103 -0
  109. package/dist/credentials-store-C0R-pQM7.js +5 -0
  110. package/dist/credentials-store-C9HwQSY2.js +5 -0
  111. package/dist/credentials-store-D5Xw3F75.js +89 -0
  112. package/dist/credentials-store-DIPxVk51.js +86 -0
  113. package/dist/credentials-store-DU2cVTiY.js +7 -0
  114. package/dist/credentials-store-Djqi3oXC.js +5 -0
  115. package/dist/credentials-store-HwLJ3GS2.js +87 -0
  116. package/dist/credentials-store-z16XvFZ2.js +86 -0
  117. package/dist/cron-tasks-4my0PJce.js +85 -0
  118. package/dist/cron-tasks-CJkI0lo3.js +82 -0
  119. package/dist/cron-tasks-DN1YjYhK.js +82 -0
  120. package/dist/cron-tasks-DuNdK89e.js +82 -0
  121. package/dist/daemon-3xj3FVuw.js +5 -0
  122. package/dist/daemon-3zd_nupj.js +333 -0
  123. package/dist/daemon-B9-h7ryw.js +7 -0
  124. package/dist/daemon-BLC4AL9L.js +401 -0
  125. package/dist/daemon-BR1uU7jH.js +333 -0
  126. package/dist/daemon-BRdtCOoC.js +7 -0
  127. package/dist/daemon-BnmNBHY5.js +384 -0
  128. package/dist/daemon-CCxpXxSb.js +7 -0
  129. package/dist/daemon-CEUxN3SQ.js +7 -0
  130. package/dist/daemon-CHk9_ezz.js +403 -0
  131. package/dist/daemon-CgrsZ0d9.js +320 -0
  132. package/dist/daemon-DCm9RCEz.js +401 -0
  133. package/dist/daemon-DNzuDyu8.js +7 -0
  134. package/dist/daemon-DWFWCLvh.js +7 -0
  135. package/dist/daemon-DbWcGYXq.js +5 -0
  136. package/dist/daemon-DgBZaFyi.js +355 -0
  137. package/dist/daemon-DkdMP-kQ.js +316 -0
  138. package/dist/daemon-Dsyjad7g.js +7 -0
  139. package/dist/daemon-DxoPIGQG.js +333 -0
  140. package/dist/daemon-MXsEPeVa.js +7 -0
  141. package/dist/daemon-RoGBr7z8.js +316 -0
  142. package/dist/daemon-XtFu-VzD.js +5 -0
  143. package/dist/daemon-rpJ-J0bv.js +403 -0
  144. package/dist/daemon-sZVjFUoX.js +7 -0
  145. package/dist/delivery-8fo4GZ-j.js +95 -0
  146. package/dist/delivery-CkxNZIsF.js +95 -0
  147. package/dist/delivery-CtbHkJbB.js +95 -0
  148. package/dist/delivery-D1z3f3KW.js +4 -0
  149. package/dist/delivery-DKGpk5M4.js +4 -0
  150. package/dist/delivery-DReKOHyM.js +95 -0
  151. package/dist/delivery-Ddn-VajP.js +4 -0
  152. package/dist/delivery-DsoxcD2z.js +4 -0
  153. package/dist/destructive-gate-CEn4BsTd.js +101 -0
  154. package/dist/destructive-gate-CgCqfKuT.js +101 -0
  155. package/dist/destructive-gate-DcEpMEqP.js +101 -0
  156. package/dist/developer-keys-7rQ8M4Qo.js +127 -0
  157. package/dist/developer-keys-BeUpyenR.js +8 -0
  158. package/dist/developer-keys-CSmzA-dl.js +127 -0
  159. package/dist/developer-keys-KFGbGuZj.js +8 -0
  160. package/dist/device-auth-store-BDhzxuPc.js +5 -0
  161. package/dist/device-auth-store-Cjyn2XeY.js +86 -0
  162. package/dist/device-auth-store-DgSabRGa.js +7 -0
  163. package/dist/device-auth-store-LKgpU74c.js +88 -0
  164. package/dist/device-auth-store-UlkrF-9_.js +5 -0
  165. package/dist/device-auth-store-yvGLuYAl.js +86 -0
  166. package/dist/doctor-BcfmNAGV.js +233 -0
  167. package/dist/doctor-CEP3UQjn.js +227 -0
  168. package/dist/doctor-CmJh0JLr.js +6 -0
  169. package/dist/doctor-CtDvddSn.js +231 -0
  170. package/dist/doctor-DPoCaXsd.js +227 -0
  171. package/dist/doctor-DPvY68XB.js +6 -0
  172. package/dist/doctor-G6EMPukm.js +6 -0
  173. package/dist/doctor-tL9TXt9y.js +6 -0
  174. package/dist/engine-1fLMFUn2.js +7 -0
  175. package/dist/engine-7lSiOc0W.js +323 -0
  176. package/dist/engine-B83pxJM4.js +318 -0
  177. package/dist/engine-B8hxtYpN.js +323 -0
  178. package/dist/engine-BY0XLiQ1.js +7 -0
  179. package/dist/engine-BfQ-vNqE.js +321 -0
  180. package/dist/engine-BlpKw8D4.js +7 -0
  181. package/dist/engine-BmN7L0jl.js +7 -0
  182. package/dist/engine-CRagwas6.js +321 -0
  183. package/dist/engine-CaG7uwkg.js +305 -0
  184. package/dist/engine-Ccmpd_MH.js +305 -0
  185. package/dist/engine-CppTnNbG.js +7 -0
  186. package/dist/engine-CwAfDQbD.js +7 -0
  187. package/dist/engine-D5kY4hMJ.js +7 -0
  188. package/dist/engine-DQcMDIbU.js +305 -0
  189. package/dist/engine-DeQdDkFO.js +7 -0
  190. package/dist/engine-W1I8kkgV.js +305 -0
  191. package/dist/engine-mVrq_pfQ.js +7 -0
  192. package/dist/env-resolve-BeamD7l5.js +10 -0
  193. package/dist/env-resolve-C0otwkgN.js +10 -0
  194. package/dist/env-resolve-CC_po9t5.js +10 -0
  195. package/dist/env-resolve-COjiKYD8.js +147 -0
  196. package/dist/env-resolve-CYiFHLAi.js +145 -0
  197. package/dist/env-resolve-ClZcv5-B.js +145 -0
  198. package/dist/env-resolve-DS92g2fk.js +151 -0
  199. package/dist/env-resolve-DkBUmcI3.js +10 -0
  200. package/dist/extraction-tools-6PREYSAK.js +5 -0
  201. package/dist/extraction-tools-B8F3nsLR.js +5 -0
  202. package/dist/extraction-tools-BX5HGgko.js +91 -0
  203. package/dist/extraction-tools-Co11UJdZ.js +91 -0
  204. package/dist/form_data-DDfyO9B0.js +8657 -0
  205. package/dist/form_data-DgWnyuDn.js +8657 -0
  206. package/dist/gateway-BfHcLG6d.js +194 -0
  207. package/dist/gateway-CzI8dnlS.js +196 -0
  208. package/dist/gateway-DNv10FFg.js +194 -0
  209. package/dist/gateway-DRh5v1KI.js +4 -0
  210. package/dist/gateway-DroPtqyM.js +6 -0
  211. package/dist/gateway-DyWwV0Nu.js +4 -0
  212. package/dist/gmail-watch-setup-BV4r_lgb.js +40 -0
  213. package/dist/gmail-watch-setup-CW_5D9g-.js +40 -0
  214. package/dist/gmail-watch-setup-xG9GkPwr.js +42 -0
  215. package/dist/health-CBy1PfzC.js +152 -0
  216. package/dist/health-Cq_yE5Ln.js +6 -0
  217. package/dist/heartbeat-engine-7I0dZeea.js +83 -0
  218. package/dist/heartbeat-engine-BZUNOanp.js +84 -0
  219. package/dist/heartbeat-engine-DNm8ggAs.js +83 -0
  220. package/dist/heartbeat-engine-tgK7xXmt.js +83 -0
  221. package/dist/hub-CI4qcd1b.js +515 -0
  222. package/dist/hub-CNQaC4JI.js +515 -0
  223. package/dist/hub-Co1SbxLs.js +6 -0
  224. package/dist/hub-eUh89obm.js +6 -0
  225. package/dist/hyperclawbot-BD5gNWO8.js +505 -0
  226. package/dist/hyperclawbot-Bkncybig.js +508 -0
  227. package/dist/hyperclawbot-C37Unss3.js +505 -0
  228. package/dist/hyperclawbot-CFHXZr12.js +505 -0
  229. package/dist/hyperclawbot-D6cmZ6Bg.js +505 -0
  230. package/dist/hyperclawbot-DGou0MZ6.js +508 -0
  231. package/dist/hyperclawbot-DnPIyjox.js +508 -0
  232. package/dist/hyperclawbot-GYFaTEgC.js +505 -0
  233. package/dist/hyperclawbot-mcLnyJyM.js +505 -0
  234. package/dist/hyperclawbot-y0i_joQK.js +505 -0
  235. package/dist/inference-BvmMO9dq.js +8 -0
  236. package/dist/inference-C2HOfRf8.js +2848 -0
  237. package/dist/inference-CKvR5Ik5.js +2841 -0
  238. package/dist/inference-DVVmhQn5.js +2841 -0
  239. package/dist/inference-DoM_iai-.js +2848 -0
  240. package/dist/inference-DwgXrvBb.js +6 -0
  241. package/dist/inference-Go1G6tnF.js +8 -0
  242. package/dist/inference-_ptQe0oG.js +2841 -0
  243. package/dist/inference-gK62s15E.js +6 -0
  244. package/dist/inference-lLDvSTR9.js +6 -0
  245. package/dist/knowledge-graph-4SxFnwEm.js +131 -0
  246. package/dist/knowledge-graph-BsH-HoUJ.js +131 -0
  247. package/dist/knowledge-graph-BxrAiV2B.js +134 -0
  248. package/dist/knowledge-graph-DCa91Nz5.js +131 -0
  249. package/dist/loader-7fz2fb92.js +400 -0
  250. package/dist/loader-B2jZXMBu.js +6 -0
  251. package/dist/loader-CbS0tIrR.js +4 -0
  252. package/dist/loader-Ckvv7vHF.js +410 -0
  253. package/dist/loader-CwOXDhFQ.js +400 -0
  254. package/dist/loader-DpEOgWXZ.js +4 -0
  255. package/dist/loader-DpYgmaul.js +4 -0
  256. package/dist/loader-DtyQP7wL.js +400 -0
  257. package/dist/logger-B3AqfQWG.js +84 -0
  258. package/dist/logger-B_q8yqmA.js +84 -0
  259. package/dist/logger-BxJklsDv.js +84 -0
  260. package/dist/logger-ry2oCfdf.js +86 -0
  261. package/dist/manager-9zwhTeQ5.js +233 -0
  262. package/dist/manager-B1RbCW6C.js +31 -0
  263. package/dist/manager-B90HEHxe.js +6 -0
  264. package/dist/manager-B94UWcTs.js +233 -0
  265. package/dist/manager-BDvL_oPs.js +4 -0
  266. package/dist/manager-BEatAtIB.js +31 -0
  267. package/dist/manager-BQf9drst.js +120 -0
  268. package/dist/manager-Bau1mIqb.js +6 -0
  269. package/dist/manager-BkqHak_e.js +247 -0
  270. package/dist/manager-BoFdZm-l.js +233 -0
  271. package/dist/manager-C2bq0AXc.js +233 -0
  272. package/dist/manager-CBe3W3eG.js +117 -0
  273. package/dist/manager-CoHr8_eJ.js +117 -0
  274. package/dist/manager-CuS13QUO.js +6 -0
  275. package/dist/manager-DO0pK2OI.js +117 -0
  276. package/dist/manager-DVetfBCH.js +6 -0
  277. package/dist/manager-Jd0qSzVe.js +35 -0
  278. package/dist/manager-TxFgaHT9.js +31 -0
  279. package/dist/manager-Yo6ZAofG.js +250 -0
  280. package/dist/mcp-B_WJiTZz.js +139 -0
  281. package/dist/mcp-DVhPLprc.js +139 -0
  282. package/dist/mcp-GWnLTVi-.js +142 -0
  283. package/dist/mcp-loader-B6xz7ftt.js +94 -0
  284. package/dist/mcp-loader-BLanJREp.js +94 -0
  285. package/dist/mcp-loader-Bx7FFxAU.js +94 -0
  286. package/dist/mcp-loader-CbcyUzpM.js +94 -0
  287. package/dist/mcp-loader-Cr0LRQHE.js +93 -0
  288. package/dist/mcp-loader-D0rbtV3G.js +93 -0
  289. package/dist/memory-B47nvgOq.js +271 -0
  290. package/dist/memory-D-Py-cz5.js +273 -0
  291. package/dist/memory-D991eoj7.js +6 -0
  292. package/dist/memory-DoQoaHjo.js +4 -0
  293. package/dist/memory-auto-5aBZQJQY.js +5 -0
  294. package/dist/memory-auto-BTeOoLsb.js +306 -0
  295. package/dist/memory-auto-BvjfaflZ.js +5 -0
  296. package/dist/memory-auto-CSUt3aas.js +306 -0
  297. package/dist/memory-auto-CfpACu6s.js +306 -0
  298. package/dist/memory-auto-DI9Xpd-x.js +306 -0
  299. package/dist/memory-auto-D_mPVYqI.js +5 -0
  300. package/dist/memory-auto-PmKetZuo.js +5 -0
  301. package/dist/memory-auto-_Jv-Diw_.js +306 -0
  302. package/dist/memory-auto-rLBheyC0.js +5 -0
  303. package/dist/memory-integration-UFc6CdRA.js +91 -0
  304. package/dist/memory-integration-_NOy60Fj.js +91 -0
  305. package/dist/memory-integration-nbQ8esDu.js +91 -0
  306. package/dist/moltbook-B4znBD46.js +81 -0
  307. package/dist/moltbook-CGtA7Lb3.js +81 -0
  308. package/dist/moltbook-EZOfIwcN.js +81 -0
  309. package/dist/node-BvA5_2f_.js +222 -0
  310. package/dist/node-CRaZw_av.js +225 -0
  311. package/dist/node-CSOPY84m.js +222 -0
  312. package/dist/node-FPkFXYdU.js +225 -0
  313. package/dist/nodes-registry--DkZbn41.js +52 -0
  314. package/dist/nodes-registry-DYEH1aWn.js +52 -0
  315. package/dist/nodes-registry-jK7T0THg.js +52 -0
  316. package/dist/oauth-flow-B3S4T_SJ.js +147 -0
  317. package/dist/oauth-flow-CuQHP_RD.js +150 -0
  318. package/dist/oauth-flow-D_iqT6nr.js +150 -0
  319. package/dist/oauth-flow-Du2N6B2V.js +150 -0
  320. package/dist/oauth-provider-B2RBpiXg.js +111 -0
  321. package/dist/oauth-provider-C1qk9SI-.js +110 -0
  322. package/dist/oauth-provider-CDOMIZgF.js +110 -0
  323. package/dist/observability-4CyDqBWi.js +89 -0
  324. package/dist/observability-BfhV3r9r.js +89 -0
  325. package/dist/observability-DAnU8Ung.js +89 -0
  326. package/dist/onboard-0RpraIyZ.js +11 -0
  327. package/dist/onboard-3SoScSbC.js +11 -0
  328. package/dist/onboard-B8zjN52U.js +4149 -0
  329. package/dist/onboard-BAhuTUMO.js +4240 -0
  330. package/dist/onboard-BHKBzytX.js +13 -0
  331. package/dist/onboard-Bf3ht6ct.js +11 -0
  332. package/dist/onboard-Bmpa_pxc.js +3865 -0
  333. package/dist/onboard-BwFFnEDj.js +13 -0
  334. package/dist/onboard-C-0A7RKN.js +4211 -0
  335. package/dist/onboard-CCuETEUr.js +3865 -0
  336. package/dist/onboard-CDi3B996.js +13 -0
  337. package/dist/onboard-CGGZRH3J.js +4149 -0
  338. package/dist/onboard-CcXqOCHa.js +3862 -0
  339. package/dist/onboard-DU3acWAq.js +13 -0
  340. package/dist/onboard-DVEFIFRj.js +11 -0
  341. package/dist/onboard-DW8b3EUP.js +4250 -0
  342. package/dist/onboard-DiDTuD7m.js +13 -0
  343. package/dist/onboard-DqamkA0I.js +11 -0
  344. package/dist/onboard-DtDFU4lV.js +3865 -0
  345. package/dist/onboard-IdhgSexF.js +11 -0
  346. package/dist/onboard-Qh-qibLR.js +3861 -0
  347. package/dist/onboard-T54jLovz.js +13 -0
  348. package/dist/onboard-nQerZcpc.js +3862 -0
  349. package/dist/onboard-qXuXl5An.js +4250 -0
  350. package/dist/onboard-xgJmy17T.js +11 -0
  351. package/dist/onboard-xsSdyO6Y.js +3865 -0
  352. package/dist/onboard-yACJiQ6A.js +4215 -0
  353. package/dist/onboard-z1K8FTgh.js +13 -0
  354. package/dist/orchestrator-BIKrbOtx.js +6 -0
  355. package/dist/orchestrator-BeK8XyJY.js +6 -0
  356. package/dist/orchestrator-C71UI_0E.js +189 -0
  357. package/dist/orchestrator-CC6vuL6m.js +6 -0
  358. package/dist/orchestrator-CExmcac2.js +189 -0
  359. package/dist/orchestrator-CQm9v71d.js +6 -0
  360. package/dist/orchestrator-CSZnojZo.js +189 -0
  361. package/dist/orchestrator-Cc-gXExz.js +189 -0
  362. package/dist/orchestrator-Cj5XWVVe.js +189 -0
  363. package/dist/orchestrator-CxySH0n5.js +6 -0
  364. package/dist/orchestrator-Cybvh-J0.js +189 -0
  365. package/dist/orchestrator-D-9pExNB.js +189 -0
  366. package/dist/orchestrator-DG-RjZIu.js +6 -0
  367. package/dist/orchestrator-DvEjhiJR.js +6 -0
  368. package/dist/orchestrator-FFpXJwSV.js +189 -0
  369. package/dist/orchestrator-TsNkrbVG.js +6 -0
  370. package/dist/orchestrator-mPfwBFvX.js +6 -0
  371. package/dist/orchestrator-zS6Manjk.js +189 -0
  372. package/dist/osint-BIGH02i8.js +277 -0
  373. package/dist/osint-Cc2Ju-o4.js +277 -0
  374. package/dist/osint-Cg3-CYHx.js +278 -0
  375. package/dist/pairing-BRPzVXzQ.js +198 -0
  376. package/dist/pairing-Cm78Tsdx.js +4 -0
  377. package/dist/pairing-D4sA3-Ha.js +6 -0
  378. package/dist/pairing-ouc_v-OX.js +196 -0
  379. package/dist/pc-access-BZvlAXYN.js +819 -0
  380. package/dist/pc-access-CziyndiO.js +8 -0
  381. package/dist/pc-access-D5k6dAfU.js +819 -0
  382. package/dist/pc-access-DoPSPiAK.js +8 -0
  383. package/dist/pending-approval-BaKZ0b_s.js +22 -0
  384. package/dist/pending-approval-CBVZcFJn.js +22 -0
  385. package/dist/pending-approval-DiZ96D8v.js +22 -0
  386. package/dist/providers-Bk6Y_v9m.js +681 -0
  387. package/dist/providers-BvScOYvt.js +5 -0
  388. package/dist/providers-CFQC39vg.js +5 -0
  389. package/dist/providers-DEJ8Jtml.js +1089 -0
  390. package/dist/providers-DP8T0QCR.js +1089 -0
  391. package/dist/providers-EyJsZ-sr.js +5 -0
  392. package/dist/reminders-store-BSIw5Y5z.js +58 -0
  393. package/dist/reminders-store-Bus52SjO.js +58 -0
  394. package/dist/renderer-CmMjrkqN.js +225 -0
  395. package/dist/renderer-_Y9mEqMM.js +225 -0
  396. package/dist/renderer-h3ar94cf.js +228 -0
  397. package/dist/rules-D3GcY_lt.js +103 -0
  398. package/dist/rules-DFoset7W.js +103 -0
  399. package/dist/rules-eJw9i4RF.js +106 -0
  400. package/dist/run-main.js +460 -332
  401. package/dist/runner-C-syOqBr.js +1273 -0
  402. package/dist/runner-C73am--A.js +1273 -0
  403. package/dist/runner-DKLq9jhv.js +1273 -0
  404. package/dist/runner-Im-aCXhh.js +1273 -0
  405. package/dist/runner-NvAzKXbv.js +1273 -0
  406. package/dist/security-2DPBzs5F.js +4 -0
  407. package/dist/security-BhhX8wJx.js +73 -0
  408. package/dist/server-7tmTtdPU.js +4 -0
  409. package/dist/server-A38RPbRE.js +1291 -0
  410. package/dist/server-BErPWJZ5.js +4 -0
  411. package/dist/server-BKo-zifC.js +4 -0
  412. package/dist/server-Bav63Eqx.js +4 -0
  413. package/dist/server-BbWQWOH4.js +4 -0
  414. package/dist/server-BfHtA0Y2.js +1278 -0
  415. package/dist/server-BiYaxlFV.js +1287 -0
  416. package/dist/server-C6htB4FI.js +4 -0
  417. package/dist/server-CB7cjcj4.js +1278 -0
  418. package/dist/server-CNiOi5dN.js +1285 -0
  419. package/dist/server-CSC4npaT.js +1285 -0
  420. package/dist/server-CZfP2Poz.js +1278 -0
  421. package/dist/server-C_YVts3e.js +4 -0
  422. package/dist/server-CbQl0M21.js +1278 -0
  423. package/dist/server-CeZNKjAL.js +4 -0
  424. package/dist/server-Ct7Fl3SE.js +1285 -0
  425. package/dist/server-DBUnNWZY.js +1255 -0
  426. package/dist/server-DRc26z9e.js +4 -0
  427. package/dist/server-DT7JjjVD.js +4 -0
  428. package/dist/server-DUVnyXaR.js +1255 -0
  429. package/dist/server-DacRJyZn.js +4 -0
  430. package/dist/server-Dy7Q-YLx.js +4 -0
  431. package/dist/server-PCtHMXe2.js +1292 -0
  432. package/dist/session-store-7ZPOoB81.js +5 -0
  433. package/dist/session-store-BOa2y_EQ.js +5 -0
  434. package/dist/session-store-BYEr8j52.js +139 -0
  435. package/dist/session-store-Bx7lBD_a.js +141 -0
  436. package/dist/session-store-C13h7I2r.js +136 -0
  437. package/dist/session-store-CUHgJ0Xr.js +5 -0
  438. package/dist/session-store-cbtK6hx9.js +136 -0
  439. package/dist/session-store-eecMioKI.js +5 -0
  440. package/dist/sessions-tools-B5_ow-s7.js +5 -0
  441. package/dist/sessions-tools-CG2mvJo6.js +95 -0
  442. package/dist/sessions-tools-DVSejkNU.js +95 -0
  443. package/dist/sessions-tools-fOL1N3Zu.js +5 -0
  444. package/dist/skill-loader-99egKAGN.js +160 -0
  445. package/dist/skill-loader-Bl6pYxNN.js +160 -0
  446. package/dist/skill-loader-D4D5kfDu.js +7 -0
  447. package/dist/skill-loader-DwbmjEDa.js +7 -0
  448. package/dist/skill-runtime-1CrUOOGv.js +5 -0
  449. package/dist/skill-runtime-B-2O7Vgb.js +102 -0
  450. package/dist/skill-runtime-B7PutgyZ.js +5 -0
  451. package/dist/skill-runtime-BUhMkMzO.js +5 -0
  452. package/dist/skill-runtime-Bsf3CXxL.js +102 -0
  453. package/dist/skill-runtime-Bv7fCCx8.js +102 -0
  454. package/dist/skill-runtime-Bx2HHcta.js +102 -0
  455. package/dist/skill-runtime-C6HVvnmN.js +5 -0
  456. package/dist/skill-runtime-C_54rn66.js +5 -0
  457. package/dist/skill-runtime-CtSykP3r.js +102 -0
  458. package/dist/skill-runtime-DZ6uJXGW.js +102 -0
  459. package/dist/skill-runtime-DaLnq_Jm.js +5 -0
  460. package/dist/skill-runtime-Do7NLtoa.js +5 -0
  461. package/dist/skill-runtime-DpDbjL7y.js +102 -0
  462. package/dist/skill-runtime-acmnZSq7.js +102 -0
  463. package/dist/skill-runtime-dzuLMVSw.js +5 -0
  464. package/dist/skill-runtime-fDLfk3m3.js +102 -0
  465. package/dist/skill-runtime-wiVnzSoJ.js +5 -0
  466. package/dist/src-B5lCcPXX.js +63 -0
  467. package/dist/src-B7Kxqi35.js +20 -0
  468. package/dist/src-B8DEmVd6.js +458 -0
  469. package/dist/src-BqbwzQQj.js +63 -0
  470. package/dist/src-C63ECu1t.js +63 -0
  471. package/dist/src-C65-5rOW.js +458 -0
  472. package/dist/src-CQOQRIzS.js +458 -0
  473. package/dist/src-CbTAVbeI.js +20 -0
  474. package/dist/src-Cmnclt47.js +63 -0
  475. package/dist/src-D0kptBSa.js +458 -0
  476. package/dist/src-DQ9Q89FM.js +458 -0
  477. package/dist/src-DXaT-nxD.js +63 -0
  478. package/dist/src-DZtpIvWJ.js +63 -0
  479. package/dist/src-DjzS20TD.js +63 -0
  480. package/dist/src-DmPjS2Z4.js +458 -0
  481. package/dist/src-DmbIgW0O.js +63 -0
  482. package/dist/src-DrDuFPKq.js +63 -0
  483. package/dist/src-DsaXFru7.js +63 -0
  484. package/dist/src-Dt0TXI8r.js +458 -0
  485. package/dist/src-rktqvEBJ.js +458 -0
  486. package/dist/src-tI8EOp6-.js +458 -0
  487. package/dist/src-zWhGmJSN.js +458 -0
  488. package/dist/sub-agent-tools-9k60L5mn.js +39 -0
  489. package/dist/sub-agent-tools-BBJf8oPD.js +39 -0
  490. package/dist/sub-agent-tools-BVCARpnF.js +39 -0
  491. package/dist/sub-agent-tools-Bfk5uqJo.js +39 -0
  492. package/dist/sub-agent-tools-Cx5BB5IO.js +39 -0
  493. package/dist/sub-agent-tools-DMT7jjBc.js +39 -0
  494. package/dist/sub-agent-tools-XeiuvDg5.js +39 -0
  495. package/dist/sub-agent-tools-iBQiRKg6.js +39 -0
  496. package/dist/sub-agent-tools-kr921YOA.js +39 -0
  497. package/dist/theme-CLXvI6Hr.js +183 -0
  498. package/dist/theme-DdZT-Bq4.js +10 -0
  499. package/dist/theme-GEpjn_0G.js +180 -0
  500. package/dist/theme-hOlG-hDL.js +8 -0
  501. package/dist/tool-policy-D1zWYBKm.js +189 -0
  502. package/dist/tool-policy-TmXx_fpp.js +189 -0
  503. package/dist/tool-policy-YgysHf5s.js +189 -0
  504. package/dist/tts-elevenlabs-BT4WrEwy.js +61 -0
  505. package/dist/tts-elevenlabs-C62Wnnrg.js +61 -0
  506. package/dist/tts-elevenlabs-DmEFFeR8.js +61 -0
  507. package/dist/update-check-BeAPt4-f.js +98 -0
  508. package/dist/update-check-CaHNCDqe.js +6 -0
  509. package/dist/vision-B5DQ5hYa.js +121 -0
  510. package/dist/vision-XOSSQe4m.js +121 -0
  511. package/dist/vision-sIO3kwFy.js +121 -0
  512. package/dist/vision-tools-BHogJPuK.js +5 -0
  513. package/dist/vision-tools-BZhV8wg3.js +51 -0
  514. package/dist/vision-tools-BiDKd0UA.js +5 -0
  515. package/dist/vision-tools-CdRxilYR.js +5 -0
  516. package/dist/vision-tools-DnUjpQhI.js +51 -0
  517. package/dist/vision-tools-gtUq6d-x.js +51 -0
  518. package/dist/voice-transcription-5_iQE-0C.js +138 -0
  519. package/dist/voice-transcription-C3SuzK96.js +138 -0
  520. package/dist/voice-transcription-CYFj4Iv3.js +138 -0
  521. package/dist/voice-transcription-ygmlOkky.js +138 -0
  522. package/dist/website-watch-tools-BF-wR0UI.js +5 -0
  523. package/dist/website-watch-tools-CVh7RA5-.js +139 -0
  524. package/dist/website-watch-tools-CthBrGPP.js +5 -0
  525. package/dist/website-watch-tools-Oxf8Mv4j.js +139 -0
  526. package/package.json +1 -1
package/dist/run-main.js CHANGED
@@ -1,24 +1,26 @@
1
1
  const require_chunk = require('./chunk-jS-bbMI5.js');
2
- require('./paths-AIyBxIzm.js');
3
- require('./paths-DPovhojT.js');
4
- require('./env-resolve-BlL4Ms_Y.js');
5
- const require_onboard = require('./onboard-ksEah5jB.js');
6
- require('./server-C9pnVfya.js');
7
- const require_daemon = require('./daemon-Dce6nj8w.js');
8
- require('./providers-Bp3UtxNo.js');
9
- require('./theme-DajRRZbA.js');
10
- const require_hub = require('./hub-w6lf1rzL.js');
11
- const require_update_check = require('./update-check-DUlpE6K7.js');
12
- const require_manager = require('./manager-BW8j3A-T.js');
13
- const require_manager$1 = require('./manager-CB6kN42s.js');
14
- const require_memory = require('./memory-BCah47GI.js');
15
- const require_loader = require('./loader-C50vgPxa.js');
16
- const require_agents_routing = require('./agents-routing-BDmct155.js');
17
- const require_pairing = require('./pairing-CDuvGL1C.js');
18
- const require_doctor = require('./doctor-BxIwrb3C.js');
19
- const require_health = require('./health-B4RokvcJ.js');
20
- const require_security = require('./security-Bry3rac5.js');
21
- const require_developer_keys = require('./developer-keys-BnV6ZoXG.js');
2
+ const require_paths = require('./paths-AIyBxIzm.js');
3
+ const require_paths$1 = require('./paths-DPovhojT.js');
4
+ require('./env-resolve-DS92g2fk.js');
5
+ const require_config = require('./config-Br73VMLb.js');
6
+ require('./server-PCtHMXe2.js');
7
+ const require_daemon = require('./daemon-rpJ-J0bv.js');
8
+ const require_gateway = require('./gateway-CzI8dnlS.js');
9
+ require('./providers-DP8T0QCR.js');
10
+ const require_onboard = require('./onboard-CCuETEUr.js');
11
+ require('./theme-CLXvI6Hr.js');
12
+ const require_hub = require('./hub-CI4qcd1b.js');
13
+ const require_update_check = require('./update-check-BeAPt4-f.js');
14
+ const require_manager = require('./manager-Jd0qSzVe.js');
15
+ const require_memory = require('./memory-D-Py-cz5.js');
16
+ const require_loader = require('./loader-Ckvv7vHF.js');
17
+ const require_agents_routing = require('./agents-routing-Bz3SstlK.js');
18
+ const require_pairing = require('./pairing-BRPzVXzQ.js');
19
+ const require_doctor = require('./doctor-BcfmNAGV.js');
20
+ const require_health = require('./health-CBy1PfzC.js');
21
+ const require_security = require('./security-BhhX8wJx.js');
22
+ const require_device_auth_store = require('./device-auth-store-LKgpU74c.js');
23
+ const require_developer_keys = require('./developer-keys-CSmzA-dl.js');
22
24
  const commander = require_chunk.__toESM(require("commander"));
23
25
  const chalk = require_chunk.__toESM(require("chalk"));
24
26
  const inquirer = require_chunk.__toESM(require("inquirer"));
@@ -36,17 +38,54 @@ const net = require_chunk.__toESM(require("net"));
36
38
 
37
39
  //#region src/cli/dashboard.ts
38
40
  var Dashboard = class {
41
+ liveInterval = null;
39
42
  async launch(live) {
40
43
  console.clear();
41
44
  await this.drawDashboard();
42
45
  if (live) {
43
- console.log(chalk.default.hex("#06b6d4")("?? LIVE MODE Ctrl+C to exit\n"));
46
+ console.log(chalk.default.hex("#06b6d4")(" LIVE MODE Ctrl+C to exit\n"));
44
47
  this.startLiveUpdates();
45
48
  }
49
+ if (process.stdin.isTTY) {
50
+ process.stdin.setRawMode?.(true);
51
+ process.stdin.resume();
52
+ process.stdin.setEncoding("utf8");
53
+ process.stdin.on("data", (key) => this.handleKey(key));
54
+ }
55
+ }
56
+ handleKey(key) {
57
+ const k = key.toLowerCase();
58
+ if (k === "q" || k === "") {
59
+ this.cleanup();
60
+ process.exit(0);
61
+ }
62
+ if (k === "d") this.runCommand(["daemon", "status"]);
63
+ else if (k === "h") this.runCommand(["hub"]);
64
+ else if (k === "g") this.runCommand(["gateway", "status"]);
65
+ else if (k === "m") this.runCommand(["memory", "show"]);
66
+ }
67
+ runCommand(args) {
68
+ const entryDir = typeof require !== "undefined" && require.main?.filename ? path.default.dirname(require.main.filename) : __dirname;
69
+ const entry = path.default.join(entryDir, "run-main.js");
70
+ const child = (0, child_process.spawn)(process.execPath, [entry, ...args], {
71
+ stdio: "inherit",
72
+ env: process.env,
73
+ cwd: process.cwd()
74
+ });
75
+ child.on("exit", () => {
76
+ console.log(chalk.default.gray("\n Press a key: [d] daemon [h] hub [g] gateway [m] memory [q] quit\n"));
77
+ });
78
+ }
79
+ cleanup() {
80
+ if (this.liveInterval) {
81
+ clearInterval(this.liveInterval);
82
+ this.liveInterval = null;
83
+ }
84
+ if (process.stdin.isTTY && process.stdin.setRawMode) process.stdin.setRawMode(false);
46
85
  }
47
86
  async drawDashboard() {
48
- const cfg = await new require_onboard.ConfigStore().load();
49
- const gm = new require_onboard.GatewayManager();
87
+ const cfg = await new require_config.ConfigStore().load();
88
+ const gm = new require_gateway.GatewayManager();
50
89
  const hub = new require_hub.SkillHub();
51
90
  const installed = await hub.getInstalled();
52
91
  let updateNotice = null;
@@ -57,66 +96,64 @@ var Dashboard = class {
57
96
  const upd = await Promise.race([require_update_check.checkForUpdates(current), new Promise((r) => setTimeout(() => r(null), 2500))]);
58
97
  if (upd?.available) updateNotice = chalk.default.yellow(`⬆ Update available: ${upd.latest}`) + chalk.default.gray(` → npm i -g hyperclaw`);
59
98
  } catch {}
60
- const port = cfg?.gateway?.port || 1515;
99
+ const port = cfg?.gateway?.port ?? 18789;
61
100
  const agent = cfg?.identity?.agentName || "Hyper";
62
101
  const user = cfg?.identity?.userName || "Boss";
63
102
  const model = cfg?.provider?.modelId || "openrouter/auto";
64
103
  const channels = (cfg?.channels ?? cfg?.gateway?.enabledChannels ?? ["cli"]).join(", ");
65
104
  const isRunning = await gm.isRunning(port);
66
- const statusDot = isRunning ? chalk.default.hex("#06b6d4")("?") : chalk.default.gray("0");
67
- const statusText = isRunning ? chalk.default.hex("#06b6d4")("ONLINE") : chalk.default.gray("OFFLINE");
105
+ const statusDot = isRunning ? chalk.default.hex("#06b6d4")("") : chalk.default.gray("");
106
+ const statusText = isRunning ? chalk.default.hex("#06b6d4")("Running") : chalk.default.gray("Stopped");
68
107
  const w = 72;
69
108
  const line = "=".repeat(w);
70
109
  const c = chalk.default.hex("#06b6d4");
71
110
  const row = (content) => {
72
111
  const stripped = content.replace(/\x1b\[[0-9;]*m/g, "");
73
112
  const pad = Math.max(0, w - stripped.length - 1);
74
- return c(`� `) + content + " ".repeat(pad) + c(`�`);
113
+ return c("│ ") + content + " ".repeat(pad) + c("│");
75
114
  };
76
- console.log(c(`-${line}�`));
77
- console.log(c(`�`) + chalk.default.bold.hex("#06b6d4")(`${"?? HYPERCLAW v5.1.0 GATEWAY DASHBOARD".padStart(45).padEnd(w)}`) + c(`�`));
78
- console.log(c(`�${line}�`));
79
- console.log(row(`${statusDot} Gateway ${statusText} ${chalk.default.gray("")} ws://localhost:${port} ${chalk.default.gray("")} Agent: ${c(agent)}`));
80
- console.log(row(`${c("?")} Model ${chalk.default.gray(model.slice(0, 30))} ${chalk.default.gray("")} User: ${c(user)}`));
81
- console.log(c(`�${"-".repeat(w)}�`));
82
- console.log(row(chalk.default.bold("ACTIVE CHANNELS")));
115
+ const logRow = (content) => console.log(row(content));
116
+ console.log(c("" + line + "┤"));
117
+ console.log(c("│") + chalk.default.bold.hex("#06b6d4")(`${"🦅 HYPERCLAW v5.2.1 — GATEWAY DASHBOARD".padStart(45).padEnd(w)}`) + c("│"));
118
+ console.log(c("" + line + ""));
119
+ logRow(`${statusDot} Gateway ${statusText} ${chalk.default.gray("│")} ws://localhost:${port} ${chalk.default.gray("")} Agent: ${c(agent)}`);
120
+ logRow(`${c("")} Model ${chalk.default.gray(model.slice(0, 30))} ${chalk.default.gray("│")} User: ${c(user)}`);
121
+ console.log(c("├" + "-".repeat(w) + "┤"));
122
+ logRow(chalk.default.bold("ACTIVE CHANNELS"));
83
123
  const chList = (channels || "cli").split(", ");
84
124
  for (let i = 0; i < chList.length; i += 3) {
85
- const group = chList.slice(i, i + 3).map((ch) => ` ${c("?")} ${ch.padEnd(12)}`).join("");
86
- console.log(row(group));
125
+ const group = chList.slice(i, i + 3).map((ch) => ` ${c("")} ${ch.padEnd(12)}`).join("");
126
+ logRow(group);
87
127
  }
88
- console.log(c(`�${"-".repeat(w)}�`));
89
- console.log(row(chalk.default.bold("INSTALLED SKILLS")));
90
- if (installed.length === 0) console.log(row(chalk.default.gray(" No skills installed. Run: hyperclaw hub")));
128
+ console.log(c("├" + "-".repeat(w) + "┤"));
129
+ logRow(chalk.default.bold("INSTALLED SKILLS"));
130
+ if (installed.length === 0) logRow(chalk.default.gray(" No skills installed. Run: hyperclaw hub"));
91
131
  else for (let i = 0; i < installed.length; i += 3) {
92
- const group = installed.slice(i, i + 3).map((s) => ` ${c("?")} ${s.name.slice(0, 14).padEnd(14)}`).join("");
93
- console.log(row(group));
132
+ const group = installed.slice(i, i + 3).map((s) => ` ${c("")} ${s.name.slice(0, 14).padEnd(14)}`).join("");
133
+ logRow(group);
94
134
  }
95
- console.log(c(`�${"-".repeat(w)}�`));
96
- console.log(row(chalk.default.bold("RECENT ACTIVITY")));
135
+ console.log(c("├" + "-".repeat(w) + "┤"));
136
+ logRow(chalk.default.bold("STATUS"));
97
137
  const now = (/* @__PURE__ */ new Date()).toLocaleTimeString();
98
- console.log(row(` [${now}] Gateway heartbeat: ${c("OK")}`));
99
- console.log(row(` [${now}] AGENTS.md loaded rules active`));
100
- console.log(row(` [${now}] Channels monitoring...`));
101
- console.log(c(`�${"-".repeat(w)}�`));
102
- if (updateNotice) console.log(row(` ${updateNotice}`));
103
- console.log(row(chalk.default.gray("Commands: [d] ") + chalk.default.red("?? daemon") + chalk.default.gray(" [h] hub [g] gateway [m] memory [q] quit")));
104
- console.log(c(`L${line}-\n`));
138
+ logRow(` [${now}] Gateway: ${isRunning ? c("online") : chalk.default.gray("offline")} Port: ${port}`);
139
+ logRow(` [${now}] Channels: ${channels || "cli"}`);
140
+ console.log(c("├" + "-".repeat(w) + "┤"));
141
+ if (updateNotice) logRow(` ${updateNotice}`);
142
+ logRow(chalk.default.gray("Commands: [d] ") + chalk.default.red("daemon") + chalk.default.gray(" [h] hub [g] gateway [m] memory [q] quit"));
143
+ console.log(c("" + line + "┘\n"));
105
144
  }
106
145
  startLiveUpdates() {
146
+ const defaultPort = 18789;
107
147
  let tick = 0;
108
- setInterval(() => {
148
+ this.liveInterval = setInterval(async () => {
109
149
  tick++;
110
- readline.default.cursorTo(process.stdout, 0, 20);
111
150
  const t = (/* @__PURE__ */ new Date()).toLocaleTimeString();
112
- const states = [
113
- "OK",
114
- "Processing",
115
- "OK",
116
- "OK",
117
- "Fetching"
118
- ];
119
- console.log(chalk.default.gray(` [${t}] Heartbeat #${tick}: ${chalk.default.hex("#06b6d4")(states[tick % states.length])}`));
151
+ const gm = new require_gateway.GatewayManager();
152
+ const cfg = await new require_config.ConfigStore().load().catch(() => null);
153
+ const p = cfg?.gateway?.port ?? defaultPort;
154
+ const isRunning = await gm.isRunning(p);
155
+ const status = isRunning ? chalk.default.hex("#06b6d4")("Running") : chalk.default.gray("Stopped");
156
+ process.stdout.write(chalk.default.gray(` [${t}] Heartbeat #${tick}: Gateway ${status}\n`));
120
157
  }, 3e3);
121
158
  }
122
159
  };
@@ -156,7 +193,7 @@ async function recordAudio(outFile, seconds) {
156
193
  async function transcribeWhisper(filePath, lang) {
157
194
  const apiKey = process.env.OPENAI_API_KEY || process.env.ANTHROPIC_API_KEY;
158
195
  if (!apiKey) throw new Error("No OPENAI_API_KEY set");
159
- const FormData = (await Promise.resolve().then(() => require_chunk.__toDynamicImportESM()(require("./form_data-B6YTzOmu.js"))).catch(() => null))?.default;
196
+ const FormData = (await Promise.resolve().then(() => require_chunk.__toDynamicImportESM()(require("./form_data-DgWnyuDn.js"))).catch(() => null))?.default;
160
197
  if (!FormData) throw new Error("form-data not installed");
161
198
  const form = new FormData();
162
199
  form.append("file", fs.createReadStream(filePath), {
@@ -300,39 +337,132 @@ var VoiceEngine = class {
300
337
  }
301
338
  };
302
339
 
340
+ //#endregion
341
+ //#region packages/gateway/src/manager.ts
342
+ const execAsync$1 = (0, util.promisify)(child_process.exec);
343
+ var GatewayManager$1 = class {
344
+ generateToken() {
345
+ return crypto.default.randomBytes(32).toString("hex");
346
+ }
347
+ async isRunning(port) {
348
+ return new Promise((resolve) => {
349
+ const socket = new net.default.Socket();
350
+ socket.setTimeout(500);
351
+ socket.on("connect", () => {
352
+ socket.destroy();
353
+ resolve(true);
354
+ });
355
+ socket.on("error", () => resolve(false));
356
+ socket.on("timeout", () => resolve(false));
357
+ try {
358
+ socket.connect(port, "127.0.0.1");
359
+ } catch {
360
+ resolve(false);
361
+ }
362
+ });
363
+ }
364
+ async detectTailscale() {
365
+ try {
366
+ const { stdout } = await execAsync$1("tailscale ip -4 2>/dev/null");
367
+ return stdout.trim() || null;
368
+ } catch {
369
+ return null;
370
+ }
371
+ }
372
+ async detectRuntime() {
373
+ for (const runtime of [
374
+ "bun",
375
+ "deno",
376
+ "node"
377
+ ]) try {
378
+ await execAsync$1(`which ${runtime}`);
379
+ return runtime;
380
+ } catch {}
381
+ return "node";
382
+ }
383
+ bindLabel(bind, custom) {
384
+ const map = {
385
+ "127.0.0.1": "Loopback only (this machine)",
386
+ "0.0.0.0": "All interfaces (LAN accessible)",
387
+ "tailscale": "Tailscale IP (VPN peers only)",
388
+ "custom": `Custom: ${custom || "?"}`
389
+ };
390
+ return map[bind];
391
+ }
392
+ exposureLabel(e) {
393
+ const map = {
394
+ "off": "Off — no Tailscale exposure",
395
+ "serve": "Serve — accessible to your Tailscale devices",
396
+ "funnel": "Funnel — publicly accessible via Tailscale URL"
397
+ };
398
+ return map[e];
399
+ }
400
+ async applyTailscaleExposure(exposure, port) {
401
+ if (exposure === "off") return;
402
+ try {
403
+ if (exposure === "serve") await execAsync$1(`tailscale serve ${port}`);
404
+ else if (exposure === "funnel") await execAsync$1(`tailscale funnel ${port}`);
405
+ } catch {
406
+ console.log(chalk.default.yellow("⚠️ Tailscale exposure failed — check tailscale is running"));
407
+ }
408
+ }
409
+ getWsUrl(config) {
410
+ const host = config.bind === "127.0.0.1" ? "127.0.0.1" : config.bind === "custom" ? config.customBind || "localhost" : "localhost";
411
+ return `ws://${host}:${config.port}`;
412
+ }
413
+ getHttpUrl(config) {
414
+ return `http://localhost:${config.port}`;
415
+ }
416
+ async showStatus(config) {
417
+ const running = await this.isRunning(config.port);
418
+ const statusIcon = running ? chalk.default.green("● RUNNING") : chalk.default.red("○ STOPPED");
419
+ const ws = this.getWsUrl(config);
420
+ console.log(chalk.default.cyan("\n╔══════════════════════════════════════╗"));
421
+ console.log(chalk.default.cyan("║ 🌐 GATEWAY STATUS ║"));
422
+ console.log(chalk.default.cyan("╠══════════════════════════════════════╣"));
423
+ console.log(chalk.default.cyan(`║ Status: ${statusIcon.padEnd(29)}║`));
424
+ console.log(chalk.default.cyan(`║ Address: ${chalk.default.white(ws).padEnd(29)}║`));
425
+ console.log(chalk.default.cyan(`║ Auth: ${chalk.default.yellow("token (masked)").padEnd(29)}║`));
426
+ console.log(chalk.default.cyan(`║ Bind: ${chalk.default.gray(config.bind).padEnd(29)}║`));
427
+ console.log(chalk.default.cyan(`║ Tailscale: ${chalk.default.gray(config.tailscaleExposure).padEnd(27)}║`));
428
+ console.log(chalk.default.cyan("╚══════════════════════════════════════╝\n"));
429
+ }
430
+ };
431
+
303
432
  //#endregion
304
433
  //#region src/infra/device-pairing.ts
305
- const DEVICES_DIR = path.default.join(os.default.homedir(), ".hyperclaw", "devices");
306
- const PENDING_FILE = path.default.join(DEVICES_DIR, "pending.json");
307
- const PAIRED_FILE = path.default.join(DEVICES_DIR, "paired.json");
434
+ require_paths$1.init_paths();
435
+ const getDevicesDir = () => path.default.join(require_paths.getHyperClawDir(), "devices");
436
+ const getPendingFile = () => path.default.join(getDevicesDir(), "pending.json");
437
+ const getPairedFile = () => path.default.join(getDevicesDir(), "paired.json");
308
438
  const PENDING_EXPIRY_MS = 10 * 60 * 1e3;
309
439
  const TOKEN_BYTES = 16;
310
440
  async function readPending() {
311
441
  try {
312
- const data = await fs_extra.default.readJson(PENDING_FILE);
442
+ const data = await fs_extra.default.readJson(getPendingFile());
313
443
  return Array.isArray(data) ? data : [];
314
444
  } catch {
315
445
  return [];
316
446
  }
317
447
  }
318
448
  async function writePending(entries) {
319
- await fs_extra.default.ensureDir(DEVICES_DIR);
320
- await fs_extra.default.writeJson(PENDING_FILE, entries, {
449
+ await fs_extra.default.ensureDir(getDevicesDir());
450
+ await fs_extra.default.writeJson(getPendingFile(), entries, {
321
451
  spaces: 2,
322
452
  mode: 384
323
453
  });
324
454
  }
325
455
  async function readPaired() {
326
456
  try {
327
- const data = await fs_extra.default.readJson(PAIRED_FILE);
457
+ const data = await fs_extra.default.readJson(getPairedFile());
328
458
  return Array.isArray(data) ? data : [];
329
459
  } catch {
330
460
  return [];
331
461
  }
332
462
  }
333
463
  async function writePaired(devices) {
334
- await fs_extra.default.ensureDir(DEVICES_DIR);
335
- await fs_extra.default.writeJson(PAIRED_FILE, devices, {
464
+ await fs_extra.default.ensureDir(getDevicesDir());
465
+ await fs_extra.default.writeJson(getPairedFile(), devices, {
336
466
  spaces: 2,
337
467
  mode: 384
338
468
  });
@@ -481,8 +611,9 @@ var DevicePairingStore = class {
481
611
 
482
612
  //#endregion
483
613
  //#region src/commands/message-send.ts
614
+ require_paths$1.init_paths();
484
615
  async function sendMessage(opts) {
485
- const configFile = path.default.join(os.default.homedir(), ".hyperclaw", "config.json");
616
+ const configFile = require_paths.getConfigPath();
486
617
  let cfg = null;
487
618
  try {
488
619
  cfg = fs_extra.default.readJsonSync(configFile);
@@ -490,7 +621,7 @@ async function sendMessage(opts) {
490
621
  console.log(chalk.default.red(" ✖ No configuration found. Run: hyperclaw init"));
491
622
  return;
492
623
  }
493
- const channels = cfg.channels || [];
624
+ const channels = cfg.gateway?.enabledChannels || cfg.channels || [];
494
625
  const targetChannel = opts.channel || guessChannel(opts.target, channels);
495
626
  if (!targetChannel) {
496
627
  console.log(chalk.default.red(` ✖ Could not determine channel for target: ${opts.target}`));
@@ -1826,6 +1957,7 @@ CHANNELS.push(ZALO_PERSONAL);
1826
1957
 
1827
1958
  //#endregion
1828
1959
  //#region src/commands/channels/add.ts
1960
+ require_paths$1.init_paths();
1829
1961
  async function channelsAdd(channelId) {
1830
1962
  console.log(chalk.default.bold.cyan("\n 📱 Add Channel\n"));
1831
1963
  let id = channelId;
@@ -1889,15 +2021,23 @@ async function channelsAdd(channelId) {
1889
2021
  dmPolicy = dmResult.policy;
1890
2022
  allowFrom = dmResult.allowFrom ?? [];
1891
2023
  }
1892
- const spinner = (0, ora.default)(`Testing ${ch.name} connection...`).start();
1893
- await new Promise((r) => setTimeout(r, 1200));
1894
- spinner.succeed(`${ch.emoji} ${ch.name} connected`);
1895
- const configFile = path.default.join(os.default.homedir(), ".hyperclaw", "config.json");
2024
+ const spinner = (0, ora.default)(`Saving ${ch.name} configuration...`).start();
2025
+ const configFile = require_paths.getConfigPath();
1896
2026
  let cfg = {};
1897
2027
  try {
1898
2028
  cfg = fs_extra.default.readJsonSync(configFile);
1899
2029
  } catch {}
1900
- cfg.channels = [...new Set([...cfg.channels || [], id])];
2030
+ cfg.gateway = cfg.gateway || {
2031
+ port: 18789,
2032
+ bind: "127.0.0.1",
2033
+ authToken: "",
2034
+ runtime: "node",
2035
+ enabledChannels: [],
2036
+ hooks: true
2037
+ };
2038
+ const channels = cfg.gateway.enabledChannels || [];
2039
+ if (!channels.includes(id)) channels.push(id);
2040
+ cfg.gateway.enabledChannels = channels;
1901
2041
  cfg.channelConfigs = cfg.channelConfigs || {};
1902
2042
  cfg.channelConfigs[id] = {
1903
2043
  token,
@@ -1905,8 +2045,9 @@ async function channelsAdd(channelId) {
1905
2045
  dmPolicy,
1906
2046
  allowFrom
1907
2047
  };
1908
- fs_extra.default.ensureDirSync(path.default.dirname(configFile));
2048
+ fs_extra.default.ensureDirSync(require_paths.getHyperClawDir());
1909
2049
  fs_extra.default.writeJsonSync(configFile, cfg, { spaces: 2 });
2050
+ spinner.succeed(`${ch.emoji} ${ch.name} saved`);
1910
2051
  console.log(chalk.default.green(`\n ✔ ${ch.name} added successfully!`));
1911
2052
  if (ch.requiresGateway) {
1912
2053
  console.log(chalk.default.gray(" ℹ This channel requires the gateway to be running"));
@@ -1916,7 +2057,7 @@ async function channelsAdd(channelId) {
1916
2057
  }
1917
2058
  async function channelsList() {
1918
2059
  const configured = await getConfiguredChannels();
1919
- const configFile = path.default.join(os.default.homedir(), ".hyperclaw", "config.json");
2060
+ const configFile = require_paths.getConfigPath();
1920
2061
  let cfg = {};
1921
2062
  try {
1922
2063
  cfg = fs_extra.default.readJsonSync(configFile);
@@ -1934,20 +2075,28 @@ async function channelsList() {
1934
2075
  console.log(chalk.default.gray(" Remove a channel: hyperclaw channels remove <id>\n"));
1935
2076
  }
1936
2077
  async function channelsRemove(channelId) {
1937
- const configFile = path.default.join(os.default.homedir(), ".hyperclaw", "config.json");
2078
+ const configFile = require_paths.getConfigPath();
1938
2079
  let cfg = {};
1939
2080
  try {
1940
2081
  cfg = fs_extra.default.readJsonSync(configFile);
1941
2082
  } catch {}
1942
- cfg.channels = (cfg.channels || []).filter((c) => c !== channelId);
2083
+ cfg.gateway = cfg.gateway || {
2084
+ port: 18789,
2085
+ bind: "127.0.0.1",
2086
+ authToken: "",
2087
+ runtime: "node",
2088
+ enabledChannels: [],
2089
+ hooks: true
2090
+ };
2091
+ cfg.gateway.enabledChannels = (cfg.gateway.enabledChannels || []).filter((c) => c !== channelId);
1943
2092
  delete (cfg.channelConfigs || {})[channelId];
1944
2093
  fs_extra.default.writeJsonSync(configFile, cfg, { spaces: 2 });
1945
2094
  console.log(chalk.default.green(`\n ✔ Channel removed: ${channelId}\n`));
1946
2095
  }
1947
2096
  async function getConfiguredChannels() {
1948
2097
  try {
1949
- const cfg = fs_extra.default.readJsonSync(path.default.join(os.default.homedir(), ".hyperclaw", "config.json"));
1950
- return cfg.channels || [];
2098
+ const cfg = fs_extra.default.readJsonSync(require_paths.getConfigPath());
2099
+ return cfg.gateway?.enabledChannels || cfg.channels || [];
1951
2100
  } catch {
1952
2101
  return [];
1953
2102
  }
@@ -2071,12 +2220,12 @@ async function probeChannel(channelId, channelCfg) {
2071
2220
  * --probe attempts a real connectivity check for each.
2072
2221
  */
2073
2222
  async function channelsStatus(opts = {}) {
2074
- const configFile = path.default.join(os.default.homedir(), ".hyperclaw", "config.json");
2223
+ const configFile = require_paths.getConfigPath();
2075
2224
  let cfg = {};
2076
2225
  try {
2077
2226
  cfg = fs_extra.default.readJsonSync(configFile);
2078
2227
  } catch {}
2079
- const configured = cfg.channels || [];
2228
+ const configured = cfg.gateway?.enabledChannels || cfg.channels || [];
2080
2229
  console.log(chalk.default.bold.cyan("\n 📡 CHANNEL STATUS\n"));
2081
2230
  if (configured.length === 0) {
2082
2231
  console.log(chalk.default.gray(" No channels configured.\n"));
@@ -2208,13 +2357,15 @@ async function performUpdate(channel, installKind) {
2208
2357
  console.log(chalk.default.gray(` npm install -g hyperclaw${tag}`));
2209
2358
  console.log(chalk.default.yellow("\n ⚠ Run the above command to update"));
2210
2359
  }
2211
- const storedPath = path.default.join(os.default.homedir(), ".hyperclaw", "update-channel");
2360
+ const { getHyperClawDir: getHyperClawDir$1 } = await Promise.resolve().then(() => require("./paths-D-QecARF.js"));
2361
+ const storedPath = path.default.join(getHyperClawDir$1(), "update-channel");
2212
2362
  await fs_extra.default.ensureDir(path.default.dirname(storedPath));
2213
2363
  await fs_extra.default.writeFile(storedPath, channel);
2214
2364
  console.log(chalk.default.green(`\n ✔ Preferred channel saved: ${channel}`));
2215
2365
  }
2216
2366
  async function getStoredChannel() {
2217
- const storedPath = path.default.join(os.default.homedir(), ".hyperclaw", "update-channel");
2367
+ const { getHyperClawDir: getHyperClawDir$1 } = await Promise.resolve().then(() => require("./paths-D-QecARF.js"));
2368
+ const storedPath = path.default.join(getHyperClawDir$1(), "update-channel");
2218
2369
  try {
2219
2370
  const ch = (await fs_extra.default.readFile(storedPath, "utf8")).trim();
2220
2371
  if ([
@@ -2226,71 +2377,6 @@ async function getStoredChannel() {
2226
2377
  return void 0;
2227
2378
  }
2228
2379
 
2229
- //#endregion
2230
- //#region src/infra/device-auth-store.ts
2231
- var AuthStore = class {
2232
- storePath;
2233
- constructor(storeDir) {
2234
- const dir = storeDir || path.default.join(os.default.homedir(), ".hyperclaw");
2235
- this.storePath = path.default.join(dir, "auth.json");
2236
- }
2237
- readStore() {
2238
- try {
2239
- const stat = fs_extra.default.statSync(this.storePath);
2240
- if ((stat.mode & 63) !== 0) {
2241
- console.log(chalk.default.yellow(" ⚠ Auth store has unsafe permissions — fixing..."));
2242
- fs_extra.default.chmodSync(this.storePath, 384);
2243
- }
2244
- return fs_extra.default.readJsonSync(this.storePath);
2245
- } catch {
2246
- return null;
2247
- }
2248
- }
2249
- writeStore(store) {
2250
- fs_extra.default.ensureDirSync(path.default.dirname(this.storePath));
2251
- fs_extra.default.writeFileSync(this.storePath, `${JSON.stringify(store, null, 2)}\n`, { mode: 384 });
2252
- }
2253
- getGatewayToken() {
2254
- return this.readStore()?.gatewayToken;
2255
- }
2256
- setGatewayToken(token) {
2257
- const store = this.readStore() || this.emptyStore();
2258
- store.gatewayToken = token;
2259
- store.updatedAt = (/* @__PURE__ */ new Date()).toISOString();
2260
- this.writeStore(store);
2261
- }
2262
- setProviderKey(providerId, apiKey) {
2263
- const store = this.readStore() || this.emptyStore();
2264
- store.providers[providerId] = { apiKey };
2265
- store.updatedAt = (/* @__PURE__ */ new Date()).toISOString();
2266
- this.writeStore(store);
2267
- }
2268
- getProviderKey(providerId) {
2269
- return this.readStore()?.providers[providerId]?.apiKey;
2270
- }
2271
- listProviders() {
2272
- return Object.keys(this.readStore()?.providers || {});
2273
- }
2274
- scrubSensitive() {
2275
- const store = this.readStore();
2276
- if (!store) return null;
2277
- const scrubbed = JSON.parse(JSON.stringify(store));
2278
- if (scrubbed.gatewayToken) scrubbed.gatewayToken = "***";
2279
- for (const p of Object.keys(scrubbed.providers || {})) {
2280
- if (scrubbed.providers[p].apiKey) scrubbed.providers[p].apiKey = "***";
2281
- if (scrubbed.providers[p].refreshToken) scrubbed.providers[p].refreshToken = "***";
2282
- }
2283
- return scrubbed;
2284
- }
2285
- emptyStore() {
2286
- return {
2287
- providers: {},
2288
- createdAt: (/* @__PURE__ */ new Date()).toISOString(),
2289
- updatedAt: (/* @__PURE__ */ new Date()).toISOString()
2290
- };
2291
- }
2292
- };
2293
-
2294
2380
  //#endregion
2295
2381
  //#region src/delivery/queue.ts
2296
2382
  var queue_exports = {};
@@ -2304,6 +2390,7 @@ function randomId() {
2304
2390
  }
2305
2391
  var BACKOFF_SECONDS, DeliveryQueue;
2306
2392
  var init_queue = require_chunk.__esm({ "src/delivery/queue.ts"() {
2393
+ require_paths$1.init_paths();
2307
2394
  BACKOFF_SECONDS = [
2308
2395
  5,
2309
2396
  30,
@@ -2316,7 +2403,7 @@ var init_queue = require_chunk.__esm({ "src/delivery/queue.ts"() {
2316
2403
  items = [];
2317
2404
  processing = false;
2318
2405
  constructor() {
2319
- this.queueFile = path.default.join(os.default.homedir(), ".hyperclaw", "delivery-queue.json");
2406
+ this.queueFile = path.default.join(require_paths.getHyperClawDir(), "delivery-queue.json");
2320
2407
  this.load();
2321
2408
  }
2322
2409
  load() {
@@ -2436,15 +2523,24 @@ var init_queue = require_chunk.__esm({ "src/delivery/queue.ts"() {
2436
2523
 
2437
2524
  //#endregion
2438
2525
  //#region src/cli/run-main.ts
2526
+ require_device_auth_store.init_device_auth_store();
2527
+ process.on("unhandledRejection", (reason) => {
2528
+ console.error("[hyperclaw] Unhandled rejection:", reason);
2529
+ process.exit(1);
2530
+ });
2531
+ process.on("uncaughtException", (err) => {
2532
+ console.error("[hyperclaw] Uncaught exception:", err?.message ?? String(err));
2533
+ process.exit(1);
2534
+ });
2439
2535
  const program = new commander.Command();
2440
- program.name("hyperclaw").description("⚡ HyperClaw — AI Gateway Platform. The Lobster Evolution 🦅").version("5.1.0").option("--profile <name>", "Use an isolated gateway profile. Auto-scopes HYPERCLAW_STATE_DIR and HYPERCLAW_CONFIG_PATH. Required for multi-gateway setups (rescue bot, staging, etc.). Example: hyperclaw --profile rescue gateway --port 19001").hook("preAction", (thisCommand) => {
2536
+ program.name("hyperclaw").description("⚡ HyperClaw — AI Gateway Platform. The Lobster Evolution 🦅").version("5.2.1").option("--profile <name>", "Use an isolated gateway profile. Auto-scopes HYPERCLAW_STATE_DIR and HYPERCLAW_CONFIG_PATH. Required for multi-gateway setups (rescue bot, staging, etc.). Example: hyperclaw --profile rescue gateway --port 19001").hook("preAction", (thisCommand) => {
2441
2537
  const profile = thisCommand.opts().profile;
2442
2538
  if (profile) {
2443
- const os$8 = require("os");
2444
- const path$8 = require("path");
2445
- const home = os$8.homedir();
2446
- if (!process.env.HYPERCLAW_STATE_DIR) process.env.HYPERCLAW_STATE_DIR = path$8.join(home, `.hyperclaw-${profile}`);
2447
- if (!process.env.HYPERCLAW_CONFIG_PATH) process.env.HYPERCLAW_CONFIG_PATH = path$8.join(process.env.HYPERCLAW_STATE_DIR, "hyperclaw.json");
2539
+ const os$2 = require("os");
2540
+ const path$5 = require("path");
2541
+ const home = os$2.homedir();
2542
+ if (!process.env.HYPERCLAW_STATE_DIR) process.env.HYPERCLAW_STATE_DIR = path$5.join(home, `.hyperclaw-${profile}`);
2543
+ if (!process.env.HYPERCLAW_CONFIG_PATH) process.env.HYPERCLAW_CONFIG_PATH = path$5.join(process.env.HYPERCLAW_STATE_DIR, "hyperclaw.json");
2448
2544
  }
2449
2545
  });
2450
2546
  program.command("init").description("Initialize HyperClaw with interactive wizard").option("-a, --auto-config", "Auto-configure with defaults").option("-d, --daemon", "Install as system daemon").option("-s, --start-now", "Start gateway after setup").action(async (opts) => {
@@ -2455,17 +2551,17 @@ program.command("init").description("Initialize HyperClaw with interactive wizar
2455
2551
  program.command("onboard").description("Full onboarding wizard — preferred setup path").option("--install-daemon", "Auto-install system daemon (starts on boot, grants full PC access)").option("--quick", "Use QuickStart mode (skip advanced options)").option("--reset", "Reset config before running wizard (sends to trash, not deleted)").option("--reset-scope <scope>", "What to reset: config | config+creds | full", "config").option("--non-interactive", "Run in non-interactive mode (use flags for all options)").option("--json", "Output result as JSON (use with --non-interactive)").option("--anthropic-api-key <key>", "Anthropic API key (non-interactive)").option("--openai-api-key <key>", "OpenAI API key (non-interactive)").option("--gateway-port <port>", "Gateway port (non-interactive)", "18789").option("--gateway-bind <bind>", "Gateway bind: loopback | all (non-interactive)", "loopback").option("--daemon-runtime <runtime>", "Daemon runtime: node | bun (non-interactive)", "node").option("--skip-skills", "Skip skills setup (non-interactive)").option("--skip-search", "Skip web search setup (non-interactive)").action(async (opts) => {
2456
2552
  await new require_onboard.Banner().showNeonBanner(false);
2457
2553
  if (opts.reset) {
2458
- const fs$8 = require("fs-extra");
2459
- const path$8 = require("path");
2460
- const os$8 = require("os");
2461
- const hcDir = path$8.join(os$8.homedir(), ".hyperclaw");
2554
+ const fs$7 = require("fs-extra");
2555
+ const path$5 = require("path");
2462
2556
  const scope = opts.resetScope ?? "config";
2463
- const filesToRemove = [path$8.join(hcDir, "hyperclaw.json")];
2557
+ const { getHyperClawDir: getHyperClawDir$1, getConfigPath: getConfigPath$1 } = await Promise.resolve().then(() => require("./paths-D-QecARF.js"));
2558
+ const hcDirResolved = getHyperClawDir$1();
2559
+ const filesToRemove = [getConfigPath$1()];
2464
2560
  if (scope === "config+creds" || scope === "full") {
2465
- filesToRemove.push(path$8.join(hcDir, "credentials"));
2466
- filesToRemove.push(path$8.join(hcDir, "sessions"));
2561
+ filesToRemove.push(path$5.join(hcDirResolved, "credentials"));
2562
+ filesToRemove.push(path$5.join(hcDirResolved, "sessions"));
2467
2563
  }
2468
- if (scope === "full") filesToRemove.push(path$8.join(hcDir, "workspace"));
2564
+ if (scope === "full") filesToRemove.push(path$5.join(hcDirResolved, "workspace"));
2469
2565
  const chalk$11 = require("chalk");
2470
2566
  console.log(chalk$11.yellow(`\n ⚠ Reset scope: ${chalk$11.bold(scope)}\n`));
2471
2567
  console.log(chalk$11.gray(" Files to remove:"));
@@ -2478,12 +2574,12 @@ program.command("onboard").description("Full onboarding wizard — preferred set
2478
2574
  default: false
2479
2575
  }]);
2480
2576
  if (confirmReset) {
2481
- const backupDir = path$8.join(hcDir, `backup-${Date.now()}`);
2482
- await fs$8.ensureDir(backupDir);
2483
- for (const f of filesToRemove) if (await fs$8.pathExists(f)) {
2484
- const dest = path$8.join(backupDir, path$8.basename(f));
2485
- await fs$8.move(f, dest);
2486
- console.log(chalk$11.gray(` ✓ Moved ${path$8.basename(f)} → backup/`));
2577
+ const backupDir = path$5.join(hcDirResolved, `backup-${Date.now()}`);
2578
+ await fs$7.ensureDir(backupDir);
2579
+ for (const f of filesToRemove) if (await fs$7.pathExists(f)) {
2580
+ const dest = path$5.join(backupDir, path$5.basename(f));
2581
+ await fs$7.move(f, dest);
2582
+ console.log(chalk$11.gray(` ✓ Moved ${path$5.basename(f)} → backup/`));
2487
2583
  }
2488
2584
  console.log(chalk$11.green("\n ✔ Reset complete. Starting fresh...\n"));
2489
2585
  } else {
@@ -2532,9 +2628,9 @@ program.command("quickstart").description("Zero-config quick start").option("-c,
2532
2628
  await new require_onboard.HyperClawWizard().quickstart(opts);
2533
2629
  process.exit(0);
2534
2630
  });
2535
- const gatewayCmd = program.command("gateway").description("Gateway control plane");
2631
+ const gatewayCmd = program.command("gateway").description("Gateway control (start/stop = runs in this terminal; use daemon for background)");
2536
2632
  gatewayCmd.command("status").description("Show gateway status").action(async () => {
2537
- const gm = new require_manager$1.GatewayManager();
2633
+ const gm = new GatewayManager$1();
2538
2634
  const cfg = await new require_manager.ConfigManager().load();
2539
2635
  await gm.showStatus(cfg?.gateway || {
2540
2636
  port: 18789,
@@ -2558,7 +2654,7 @@ gatewayCmd.command("restart").description("Restart the gateway service").action(
2558
2654
  const dm = new require_daemon.DaemonManager();
2559
2655
  await dm.restart();
2560
2656
  });
2561
- program.command("daemon").description("Manage HyperClaw system service (alias: gateway)").argument("<action>", "start|stop|restart|status|logs|install|uninstall").action(async (action) => {
2657
+ program.command("daemon").description("Manage gateway: start/stop (foreground) or install (auto-start on boot). Same process as gateway start.").argument("<action>", "start|stop|restart|status|logs|install|uninstall").action(async (action) => {
2562
2658
  const dm = new require_daemon.DaemonManager();
2563
2659
  if (action === "start") await new require_onboard.Banner().showNeonBanner(true);
2564
2660
  await dm.handle(action);
@@ -2568,19 +2664,21 @@ program.command("daemon").description("Manage HyperClaw system service (alias: g
2568
2664
  const sandboxCmd = program.command("sandbox").description("Debug sandbox and tool policy");
2569
2665
  sandboxCmd.command("explain").description("Show effective sandbox mode, tool policy, and allowed tools").option("--json", "Output as JSON").action(async (opts) => {
2570
2666
  const chalk$11 = require("chalk");
2571
- const fs$8 = require("fs-extra");
2572
- const path$8 = require("path");
2573
- const os$8 = require("os");
2574
- const { getConfigPath } = await Promise.resolve().then(() => require("./paths-D-QecARF.js"));
2575
- const cfgPath = getConfigPath();
2667
+ const fs$7 = require("fs-extra");
2668
+ const path$5 = require("path");
2669
+ const os$2 = require("os");
2670
+ const { getConfigPath: getConfigPath$1 } = await Promise.resolve().then(() => require("./paths-D-QecARF.js"));
2671
+ const cfgPath = getConfigPath$1();
2576
2672
  let cfg = {};
2577
2673
  try {
2578
- cfg = await fs$8.readJson(cfgPath);
2579
- } catch {}
2674
+ cfg = await fs$7.readJson(cfgPath);
2675
+ } catch (e) {
2676
+ if (process.env.DEBUG) console.error("[run-main] sandbox config read:", e?.message);
2677
+ }
2580
2678
  const sandboxMode = cfg?.agents?.defaults?.sandbox?.mode ?? "non-main";
2581
2679
  const toolsCfg = cfg?.tools ?? {};
2582
- const { describeToolPolicy, applyToolPolicy } = await Promise.resolve().then(() => require("./tool-policy-DeMsATEC.js"));
2583
- const { getBuiltinTools, getSessionsTools, getPCAccessTools, getBrowserTools, getExtractionTools, getWebsiteWatchTools, getVisionTools } = await Promise.resolve().then(() => require("./src-CbNutLsJ.js"));
2680
+ const { describeToolPolicy, applyToolPolicy } = await Promise.resolve().then(() => require("./tool-policy-TmXx_fpp.js"));
2681
+ const { getBuiltinTools, getSessionsTools, getPCAccessTools, getBrowserTools, getExtractionTools, getWebsiteWatchTools, getVisionTools } = await Promise.resolve().then(() => require("./src-DZtpIvWJ.js"));
2584
2682
  const allTools = [
2585
2683
  ...getBuiltinTools(),
2586
2684
  ...getSessionsTools(() => null),
@@ -2800,18 +2898,18 @@ skillCmd.command("install <id>").description("Install skill from ClawHub (or bun
2800
2898
  process.exit(0);
2801
2899
  });
2802
2900
  program.command("menu-bar").description("Launch macOS menu bar companion (Electron tray app)").action(async () => {
2803
- const path$8 = await import("path");
2804
- const { spawn } = await import("child_process");
2805
- const fs$8 = await import("fs-extra");
2806
- const root = path$8.join(process.cwd(), "apps", "macos");
2807
- const altRoot = path$8.join(__dirname, "..", "..", "apps", "macos");
2808
- const macosDir = await fs$8.pathExists(root) ? root : await fs$8.pathExists(altRoot) ? altRoot : null;
2809
- if (!macosDir || !await fs$8.pathExists(path$8.join(macosDir, "package.json"))) {
2901
+ const path$5 = await import("path");
2902
+ const { spawn: spawn$1 } = await import("child_process");
2903
+ const fs$7 = await import("fs-extra");
2904
+ const root = path$5.join(process.cwd(), "apps", "macos");
2905
+ const altRoot = path$5.join(__dirname, "..", "..", "apps", "macos");
2906
+ const macosDir = await fs$7.pathExists(root) ? root : await fs$7.pathExists(altRoot) ? altRoot : null;
2907
+ if (!macosDir || !await fs$7.pathExists(path$5.join(macosDir, "package.json"))) {
2810
2908
  console.log(chalk.default.gray("\n macOS menu bar app not found."));
2811
2909
  console.log(chalk.default.gray(" Run from HyperClaw repo root, or: cd apps/macos && npm start\n"));
2812
2910
  process.exit(1);
2813
2911
  }
2814
- const child = spawn("npm", ["start"], {
2912
+ const child = spawn$1("npm", ["start"], {
2815
2913
  cwd: macosDir,
2816
2914
  stdio: "inherit",
2817
2915
  shell: true
@@ -2906,6 +3004,26 @@ cfgCmd.command("set-key <KEY=value>").description("Set provider API key or confi
2906
3004
  const config = new require_manager.ConfigManager();
2907
3005
  const cfg = await config.load();
2908
3006
  if (PROVIDER_KEY_NAMES.has(key) || key === cfg?.provider?.providerId) {
3007
+ const keyToProvider = {
3008
+ GOOGLE_AI_API_KEY: "google",
3009
+ ANTHROPIC_API_KEY: "anthropic",
3010
+ OPENROUTER_API_KEY: "openrouter",
3011
+ OPENAI_API_KEY: "openai",
3012
+ XAI_API_KEY: "xai",
3013
+ google: "google",
3014
+ anthropic: "anthropic",
3015
+ openrouter: "openrouter",
3016
+ openai: "openai",
3017
+ xai: "xai"
3018
+ };
3019
+ const pid = keyToProvider[key] ?? keyToProvider[key.toLowerCase()] ?? cfg?.provider?.providerId ?? key.toLowerCase();
3020
+ const { validateApiKeyFormat } = await Promise.resolve().then(() => require("./api-key-validation-BeQ2MZAT.js"));
3021
+ const formatErr = validateApiKeyFormat(pid, value);
3022
+ if (formatErr) {
3023
+ console.log(chalk.default.yellow(`\n ⚠ ${formatErr}\n`));
3024
+ console.log(chalk.default.gray(" For custom providers use: hyperclaw auth add <service_id>\n"));
3025
+ process.exit(1);
3026
+ }
2909
3027
  const next = {
2910
3028
  ...cfg,
2911
3029
  provider: {
@@ -2917,8 +3035,9 @@ cfgCmd.command("set-key <KEY=value>").description("Set provider API key or confi
2917
3035
  console.log(chalk.default.hex("#06b6d4")(`\n ✔ Provider API key saved to config.\n`));
2918
3036
  console.log(chalk.default.gray(" Run: hyperclaw chat — to use the updated key.\n"));
2919
3037
  } else {
2920
- const store = new AuthStore();
2921
- store.setProviderKey(key, value);
3038
+ const { getHyperClawDir: getHyperClawDir$1 } = await Promise.resolve().then(() => require("./paths-D-QecARF.js"));
3039
+ const store = new require_device_auth_store.AuthStore(getHyperClawDir$1());
3040
+ await store.setProviderKey(key, value);
2922
3041
  console.log(chalk.default.hex("#06b6d4")(`\n ✔ Set ${key}\n`));
2923
3042
  }
2924
3043
  process.exit(0);
@@ -2958,9 +3077,9 @@ cfgCmd.command("set-service-key <serviceId> [apiKey]").description("Set API key
2958
3077
  process.exit(0);
2959
3078
  });
2960
3079
  cfgCmd.command("schema").description("Show configuration schema").action(() => {
2961
- console.log(chalk.default.bold.hex("#06b6d4")("\n Config schema: ~/.hyperclaw/config.json\n"));
3080
+ console.log(chalk.default.bold.hex("#06b6d4")("\n Config schema: ~/.hyperclaw/hyperclaw.json\n"));
2962
3081
  const schema = {
2963
- version: "string (e.g. \"5.1.0\")",
3082
+ version: "string (e.g. \"5.2.1\")",
2964
3083
  workspaceName: "string",
2965
3084
  provider: {
2966
3085
  providerId: "string",
@@ -3052,13 +3171,13 @@ program.command("deploy").description("Deploy gateway to cloud (Fly.io or Render
3052
3171
  });
3053
3172
  program.command("voice-call").description("Start voice call session — terminal mode, talks to gateway").option("-u, --gateway-url <url>", "Gateway URL", "http://localhost:18789").action(async (opts) => {
3054
3173
  const axios = (await import("axios")).default;
3055
- const readline$2 = await import("readline");
3174
+ const readline$1 = await import("readline");
3056
3175
  const chalk$11 = require("chalk");
3057
3176
  const url = opts.gatewayUrl || "http://localhost:18789";
3058
3177
  console.log(chalk$11.bold.cyan("\n 🎙️ HYPERCLAW VOICE CALL\n"));
3059
3178
  console.log(chalk$11.gray(` Gateway: ${url}`));
3060
3179
  console.log(chalk$11.gray(" Type a message and press Enter. Ctrl+C to exit.\n"));
3061
- const rl = readline$2.createInterface({
3180
+ const rl = readline$1.createInterface({
3062
3181
  input: process.stdin,
3063
3182
  output: process.stdout
3064
3183
  });
@@ -3105,13 +3224,13 @@ program.command("dashboard").description("Launch live terminal dashboard").optio
3105
3224
  program.command("status").description("System overview").option("--all", "Full local diagnosis (read-only)").option("--deep", "Also probe the running gateway").action(async (opts) => {
3106
3225
  await new require_onboard.Banner().showStatus();
3107
3226
  if (opts.all || opts.deep) {
3108
- const fs$8 = await import("fs-extra");
3109
- const { getConfigPath } = await Promise.resolve().then(() => require("./paths-D-QecARF.js"));
3110
- const t = (await Promise.resolve().then(() => require("./theme-D0smfC_l.js"))).getTheme(false);
3111
- const configPath = getConfigPath();
3227
+ const fs$7 = await import("fs-extra");
3228
+ const { getConfigPath: getConfigPath$1 } = await Promise.resolve().then(() => require("./paths-D-QecARF.js"));
3229
+ const t = (await Promise.resolve().then(() => require("./theme-DdZT-Bq4.js"))).getTheme(false);
3230
+ const configPath = getConfigPath$1();
3112
3231
  console.log(t.bold("\n ─── Deep status ───\n"));
3113
3232
  try {
3114
- const cfg = await fs$8.readJson(configPath);
3233
+ const cfg = await fs$7.readJson(configPath);
3115
3234
  console.log(t.muted(" Config: ") + (cfg ? t.success("loaded") : t.error("missing")));
3116
3235
  console.log(t.muted(" Channels: ") + JSON.stringify(cfg?.gateway?.enabledChannels || cfg?.channels || []));
3117
3236
  } catch {
@@ -3119,7 +3238,7 @@ program.command("status").description("System overview").option("--all", "Full l
3119
3238
  }
3120
3239
  if (opts.deep) {
3121
3240
  const http$2 = await import("http");
3122
- const { resolveGatewayUrl } = await Promise.resolve().then(() => require("./health-DPoG-f_Q.js"));
3241
+ const { resolveGatewayUrl } = await Promise.resolve().then(() => require("./health-Cq_yE5Ln.js"));
3123
3242
  const cfg = await new require_manager.ConfigManager().load();
3124
3243
  const { gatewayUrl } = resolveGatewayUrl(cfg);
3125
3244
  const u = new URL(gatewayUrl);
@@ -3197,7 +3316,7 @@ program.command("health").description("Quick gateway health probe (Runtime, RPC
3197
3316
  });
3198
3317
  const themeCmd = program.command("theme").description("Switch CLI color theme");
3199
3318
  themeCmd.command("list").description("List available themes").action(async () => {
3200
- const { allThemes, getThemeName } = await Promise.resolve().then(() => require("./theme-D0smfC_l.js"));
3319
+ const { allThemes, getThemeName } = await Promise.resolve().then(() => require("./theme-DdZT-Bq4.js"));
3201
3320
  const current = getThemeName();
3202
3321
  console.log(chalk.default.bold.hex("#06b6d4")("\n 🎨 AVAILABLE THEMES\n"));
3203
3322
  for (const { name, label } of allThemes()) {
@@ -3209,7 +3328,7 @@ themeCmd.command("list").description("List available themes").action(async () =>
3209
3328
  process.exit(0);
3210
3329
  });
3211
3330
  themeCmd.command("set <theme>").description("Set theme: dark | grey | white").action(async (name) => {
3212
- const { setThemeName, allThemes } = await Promise.resolve().then(() => require("./theme-D0smfC_l.js"));
3331
+ const { setThemeName, allThemes } = await Promise.resolve().then(() => require("./theme-DdZT-Bq4.js"));
3213
3332
  const valid = allThemes().map((t) => t.name);
3214
3333
  if (!valid.includes(name)) {
3215
3334
  console.log(chalk.default.red(`\n ✖ Unknown theme: "${name}". Use: ${valid.join(" | ")}\n`));
@@ -3221,7 +3340,7 @@ themeCmd.command("set <theme>").description("Set theme: dark | grey | white").ac
3221
3340
  process.exit(0);
3222
3341
  });
3223
3342
  themeCmd.command("preview").description("Preview all themes side-by-side").action(async () => {
3224
- const { allThemes, getTheme, setThemeName, getThemeName } = await Promise.resolve().then(() => require("./theme-D0smfC_l.js"));
3343
+ const { allThemes, getTheme, setThemeName, getThemeName } = await Promise.resolve().then(() => require("./theme-DdZT-Bq4.js"));
3225
3344
  const current = getThemeName();
3226
3345
  console.log(chalk.default.bold("\n 🎨 THEME PREVIEW\n"));
3227
3346
  for (const { name, label } of allThemes()) {
@@ -3238,39 +3357,40 @@ themeCmd.command("preview").description("Preview all themes side-by-side").actio
3238
3357
  });
3239
3358
  const secretsCmd = program.command("secrets").description("External secrets management");
3240
3359
  secretsCmd.command("audit").description("Audit all required secrets").option("--required-by <ids>", "Filter by skill/provider IDs (comma-separated)").action(async (opts) => {
3241
- const { SecretsManager } = await Promise.resolve().then(() => require("./manager-TLk8tgyV.js"));
3360
+ const { SecretsManager } = await Promise.resolve().then(() => require("./manager-Yo6ZAofG.js"));
3242
3361
  const filter = opts.requiredBy?.split(",");
3243
3362
  await new SecretsManager().audit(filter);
3244
3363
  process.exit(0);
3245
3364
  });
3246
3365
  secretsCmd.command("set <KEY=value>").description("Set a secret in .env file").action(async (kv) => {
3247
- const { SecretsManager } = await Promise.resolve().then(() => require("./manager-TLk8tgyV.js"));
3366
+ const { SecretsManager } = await Promise.resolve().then(() => require("./manager-Yo6ZAofG.js"));
3248
3367
  await new SecretsManager().set(kv);
3249
3368
  process.exit(0);
3250
3369
  });
3251
3370
  secretsCmd.command("apply").description("Write secrets from .env to shell config (~/.bashrc, ~/.zshrc)").action(async () => {
3252
- const { SecretsManager } = await Promise.resolve().then(() => require("./manager-TLk8tgyV.js"));
3371
+ const { SecretsManager } = await Promise.resolve().then(() => require("./manager-Yo6ZAofG.js"));
3253
3372
  await new SecretsManager().apply();
3254
3373
  process.exit(0);
3255
3374
  });
3256
3375
  secretsCmd.command("reload").description("Reload secrets into running gateway").action(async () => {
3257
- const { SecretsManager } = await Promise.resolve().then(() => require("./manager-TLk8tgyV.js"));
3376
+ const { SecretsManager } = await Promise.resolve().then(() => require("./manager-Yo6ZAofG.js"));
3258
3377
  await new SecretsManager().reload();
3259
3378
  process.exit(0);
3260
3379
  });
3261
3380
  secretsCmd.command("remove <key>").description("Remove a secret from .env").action(async (key) => {
3262
- const { SecretsManager } = await Promise.resolve().then(() => require("./manager-TLk8tgyV.js"));
3381
+ const { SecretsManager } = await Promise.resolve().then(() => require("./manager-Yo6ZAofG.js"));
3263
3382
  await new SecretsManager().remove(key);
3264
3383
  process.exit(0);
3265
3384
  });
3266
3385
  secretsCmd.command("credentials").description("List provider credential files (credentials/*.json)").action(async () => {
3267
- const { CredentialsStore } = await Promise.resolve().then(() => require("./credentials-store-DT53GLWN.js"));
3268
- await new CredentialsStore().showList();
3386
+ const { CredentialsStore } = await Promise.resolve().then(() => require("./credentials-store-DU2cVTiY.js"));
3387
+ const { getHyperClawDir: getHyperClawDir$1 } = await Promise.resolve().then(() => require("./paths-D-QecARF.js"));
3388
+ await new CredentialsStore(getHyperClawDir$1()).showList();
3269
3389
  process.exit(0);
3270
3390
  });
3271
3391
  const securityCmd = program.command("security").description("Security tools");
3272
3392
  securityCmd.command("audit").description("Security audit — file permissions, DM policies, embedded secrets").option("--deep", "Full deep scan including token entropy and installed skill risks").option("--fix", "Auto-fix safe findings (file permissions etc.)").option("--json", "Machine-readable JSON output").action(async (opts) => {
3273
- const { runSecurityAudit } = await Promise.resolve().then(() => require("./audit-4VKpxUg9.js"));
3393
+ const { runSecurityAudit } = await Promise.resolve().then(() => require("./audit-CV0gLGaL.js"));
3274
3394
  await runSecurityAudit({
3275
3395
  deep: opts.deep,
3276
3396
  fix: opts.fix,
@@ -3279,7 +3399,7 @@ securityCmd.command("audit").description("Security audit — file permissions, D
3279
3399
  process.exit(0);
3280
3400
  });
3281
3401
  program.command("osint").description("OSINT / Ethical Hacking mode — configure HyperClaw for security research").argument("[workflow]", "Workflow preset: recon | bugbounty | pentest | footprint | custom").option("--show", "Show current OSINT profile").option("--reset", "Clear OSINT profile and disable OSINT mode").action(async (workflow, opts) => {
3282
- const { osintSetup, osintQuickStart } = await Promise.resolve().then(() => require("./osint-DBDMKOVf.js"));
3402
+ const { osintSetup, osintQuickStart } = await Promise.resolve().then(() => require("./osint-Cg3-CYHx.js"));
3283
3403
  if (opts.show || opts.reset) await osintSetup({
3284
3404
  show: opts.show,
3285
3405
  reset: opts.reset
@@ -3289,7 +3409,7 @@ program.command("osint").description("OSINT / Ethical Hacking mode — configure
3289
3409
  process.exit(0);
3290
3410
  });
3291
3411
  program.command("chat").description("Interactive terminal chat with the agent").option("--session <id>", "Resume a named session").option("--model <model>", "Override model").option("--thinking <level>", "Thinking level: high|medium|low|none", "none").option("--workspace <dir>", "Override workspace directory").action(async (opts) => {
3292
- const { runChat } = await Promise.resolve().then(() => require("./chat-B85Qnmv1.js"));
3412
+ const { runChat } = await Promise.resolve().then(() => require("./chat-CKBxDWAQ.js"));
3293
3413
  await runChat({
3294
3414
  sessionId: opts.session,
3295
3415
  model: opts.model,
@@ -3299,7 +3419,7 @@ program.command("chat").description("Interactive terminal chat with the agent").
3299
3419
  });
3300
3420
  const agentRunCmd = program.command("agent").description("Run agent with thinking control");
3301
3421
  agentRunCmd.requiredOption("-m, --message <text>", "Message to send to the agent").option("--thinking <level>", "Thinking level: high|medium|low|none", "none").option("--model <model>", "Override model").option("--session <id>", "Session/thread ID").option("--multi-step", "Decompose into steps and run each (sequential)").option("--parallel", "Run sub-agents in parallel for independent subtasks").option("--verbose", "Show thinking blocks and request details").option("--workspace <dir>", "Override workspace directory").action(async (opts) => {
3302
- const { runAgent } = await Promise.resolve().then(() => require("./src-CbNutLsJ.js"));
3422
+ const { runAgent } = await Promise.resolve().then(() => require("./src-DZtpIvWJ.js"));
3303
3423
  await runAgent({
3304
3424
  message: opts.message,
3305
3425
  thinking: opts.thinking,
@@ -3315,7 +3435,7 @@ agentRunCmd.requiredOption("-m, --message <text>", "Message to send to the agent
3315
3435
  });
3316
3436
  const threadsCmd = program.command("threads").description("ACP thread-bound agent sessions");
3317
3437
  threadsCmd.command("list").description("List agent threads").option("--channel <id>", "Filter by channel").option("--active", "Show only active threads").action(async (opts) => {
3318
- const { ACPThreadManager } = await Promise.resolve().then(() => require("./src-CbNutLsJ.js"));
3438
+ const { ACPThreadManager } = await Promise.resolve().then(() => require("./src-DZtpIvWJ.js"));
3319
3439
  const mgr = new ACPThreadManager();
3320
3440
  const threads = await mgr.list({
3321
3441
  channelId: opts.channel,
@@ -3325,33 +3445,34 @@ threadsCmd.command("list").description("List agent threads").option("--channel <
3325
3445
  process.exit(0);
3326
3446
  });
3327
3447
  threadsCmd.command("terminate <id>").description("Terminate a thread").action(async (id) => {
3328
- const { ACPThreadManager } = await Promise.resolve().then(() => require("./src-CbNutLsJ.js"));
3448
+ const { ACPThreadManager } = await Promise.resolve().then(() => require("./src-DZtpIvWJ.js"));
3329
3449
  await new ACPThreadManager().terminate(id);
3330
3450
  console.log(require("chalk").green(`\n ✔ Thread terminated: ${id}\n`));
3331
3451
  process.exit(0);
3332
3452
  });
3333
3453
  const canvasCmd = program.command("canvas").description("Live AI-driven UI canvas");
3334
3454
  canvasCmd.command("show").description("Show current canvas components").action(async () => {
3335
- const { CanvasRenderer } = await Promise.resolve().then(() => require("./renderer-D_yO05wK.js"));
3455
+ const { CanvasRenderer } = await Promise.resolve().then(() => require("./renderer-h3ar94cf.js"));
3336
3456
  await new CanvasRenderer().show();
3337
3457
  process.exit(0);
3338
3458
  });
3339
3459
  canvasCmd.command("add <type> <title>").description("Add a canvas component (type: chart|table|form|markdown|image|custom)").action(async (type, title) => {
3340
- const { CanvasRenderer } = await Promise.resolve().then(() => require("./renderer-D_yO05wK.js"));
3460
+ const { CanvasRenderer } = await Promise.resolve().then(() => require("./renderer-h3ar94cf.js"));
3341
3461
  await new CanvasRenderer().addComponent(type, title);
3342
3462
  process.exit(0);
3343
3463
  });
3344
3464
  canvasCmd.command("clear").description("Clear all canvas components").action(async () => {
3345
- const { CanvasRenderer } = await Promise.resolve().then(() => require("./renderer-D_yO05wK.js"));
3465
+ const { CanvasRenderer } = await Promise.resolve().then(() => require("./renderer-h3ar94cf.js"));
3346
3466
  await new CanvasRenderer().clear();
3347
3467
  process.exit(0);
3348
3468
  });
3349
3469
  canvasCmd.command("export").description("Export canvas as HTML file").action(async () => {
3350
- const { CanvasRenderer } = await Promise.resolve().then(() => require("./renderer-D_yO05wK.js"));
3351
- const fs$8 = require("fs-extra");
3470
+ const { CanvasRenderer } = await Promise.resolve().then(() => require("./renderer-h3ar94cf.js"));
3471
+ const fs$7 = require("fs-extra");
3352
3472
  const html = await new CanvasRenderer().exportHtml();
3353
- const outFile = require("path").join(require("os").homedir(), ".hyperclaw", "canvas", "export.html");
3354
- await fs$8.writeFile(outFile, html);
3473
+ const { getHyperClawDir: getHyperClawDir$1 } = await Promise.resolve().then(() => require("./paths-D-QecARF.js"));
3474
+ const outFile = require("path").join(getHyperClawDir$1(), "canvas", "export.html");
3475
+ await fs$7.writeFile(outFile, html);
3355
3476
  console.log(require("chalk").green(`\n ✔ Canvas exported to ${outFile}\n`));
3356
3477
  process.exit(0);
3357
3478
  });
@@ -3367,63 +3488,63 @@ deliveryCmd.command("retry <id>").description("Retry a dead-lettered delivery it
3367
3488
  process.exit(0);
3368
3489
  });
3369
3490
  const mcpCmd = program.command("mcp").description("MCP (Model Context Protocol) server management");
3370
- mcpCmd.command("list").action(async () => {
3371
- const { mcpList } = await Promise.resolve().then(() => require("./mcp-BYa3p8wQ.js"));
3491
+ mcpCmd.command("list").description("List configured MCP servers").action(async () => {
3492
+ const { mcpList } = await Promise.resolve().then(() => require("./mcp-GWnLTVi-.js"));
3372
3493
  await mcpList();
3373
3494
  process.exit(0);
3374
3495
  });
3375
- mcpCmd.command("add").action(async () => {
3376
- const { mcpAdd } = await Promise.resolve().then(() => require("./mcp-BYa3p8wQ.js"));
3496
+ mcpCmd.command("add").description("Add MCP server").action(async () => {
3497
+ const { mcpAdd } = await Promise.resolve().then(() => require("./mcp-GWnLTVi-.js"));
3377
3498
  await mcpAdd();
3378
3499
  process.exit(0);
3379
3500
  });
3380
- mcpCmd.command("remove <id>").action(async (id) => {
3381
- const { mcpRemove } = await Promise.resolve().then(() => require("./mcp-BYa3p8wQ.js"));
3501
+ mcpCmd.command("remove <id>").description("Remove MCP server").action(async (id) => {
3502
+ const { mcpRemove } = await Promise.resolve().then(() => require("./mcp-GWnLTVi-.js"));
3382
3503
  await mcpRemove(id);
3383
3504
  process.exit(0);
3384
3505
  });
3385
- mcpCmd.command("probe [id]").action(async (id) => {
3386
- const { mcpProbe } = await Promise.resolve().then(() => require("./mcp-BYa3p8wQ.js"));
3506
+ mcpCmd.command("probe [id]").description("Test MCP server connection").action(async (id) => {
3507
+ const { mcpProbe } = await Promise.resolve().then(() => require("./mcp-GWnLTVi-.js"));
3387
3508
  await mcpProbe(id);
3388
3509
  process.exit(0);
3389
3510
  });
3390
3511
  const nodeCmd = program.command("node").description("HyperClaw node management (local, remote, android)");
3391
- nodeCmd.command("list").action(async () => {
3392
- const { nodeList } = await Promise.resolve().then(() => require("./node-D6tw7AVZ.js"));
3512
+ nodeCmd.command("list").description("List paired nodes").action(async () => {
3513
+ const { nodeList } = await Promise.resolve().then(() => require("./node-CRaZw_av.js"));
3393
3514
  await nodeList();
3394
3515
  process.exit(0);
3395
3516
  });
3396
- nodeCmd.command("add").action(async () => {
3397
- const { nodeAdd } = await Promise.resolve().then(() => require("./node-D6tw7AVZ.js"));
3517
+ nodeCmd.command("add").description("Add or pair a node").action(async () => {
3518
+ const { nodeAdd } = await Promise.resolve().then(() => require("./node-CRaZw_av.js"));
3398
3519
  await nodeAdd();
3399
3520
  process.exit(0);
3400
3521
  });
3401
- nodeCmd.command("probe [id]").action(async (id) => {
3402
- const { nodeProbe } = await Promise.resolve().then(() => require("./node-D6tw7AVZ.js"));
3522
+ nodeCmd.command("probe [id]").description("Probe node connection").action(async (id) => {
3523
+ const { nodeProbe } = await Promise.resolve().then(() => require("./node-CRaZw_av.js"));
3403
3524
  await nodeProbe(id);
3404
3525
  process.exit(0);
3405
3526
  });
3406
- nodeCmd.command("remove <id>").action(async (id) => {
3407
- const { nodeRemove } = await Promise.resolve().then(() => require("./node-D6tw7AVZ.js"));
3527
+ nodeCmd.command("remove <id>").description("Remove paired node").action(async (id) => {
3528
+ const { nodeRemove } = await Promise.resolve().then(() => require("./node-CRaZw_av.js"));
3408
3529
  await nodeRemove(id);
3409
3530
  process.exit(0);
3410
3531
  });
3411
3532
  const arCmd = program.command("auto-reply").description("Auto-reply rule engine");
3412
3533
  arCmd.command("list").action(async () => {
3413
- const { AutoReplyEngine } = await Promise.resolve().then(() => require("./rules-5KxGRmry.js"));
3534
+ const { AutoReplyEngine } = await Promise.resolve().then(() => require("./rules-eJw9i4RF.js"));
3414
3535
  const e = new AutoReplyEngine();
3415
3536
  await e.load();
3416
3537
  e.showList();
3417
3538
  process.exit(0);
3418
3539
  });
3419
3540
  arCmd.command("toggle <id>").action(async (id) => {
3420
- const { AutoReplyEngine } = await Promise.resolve().then(() => require("./rules-5KxGRmry.js"));
3541
+ const { AutoReplyEngine } = await Promise.resolve().then(() => require("./rules-eJw9i4RF.js"));
3421
3542
  const e = new AutoReplyEngine();
3422
3543
  await e.toggle(id);
3423
3544
  process.exit(0);
3424
3545
  });
3425
3546
  arCmd.command("remove <id>").action(async (id) => {
3426
- const { AutoReplyEngine } = await Promise.resolve().then(() => require("./rules-5KxGRmry.js"));
3547
+ const { AutoReplyEngine } = await Promise.resolve().then(() => require("./rules-eJw9i4RF.js"));
3427
3548
  const e = new AutoReplyEngine();
3428
3549
  await e.remove(id);
3429
3550
  process.exit(0);
@@ -3432,7 +3553,7 @@ const gmailCmd = program.command("gmail").description("Gmail Pub/Sub real-time n
3432
3553
  gmailCmd.command("watch-setup").description("Register Gmail watch for push notifications. Requires: hyperclaw auth oauth google-gmail").requiredOption("-t, --topic <name>", "Pub/Sub topic (e.g. projects/myproject/topics/gmail-push)").option("-l, --labels <ids>", "Label IDs to watch (comma-separated)", "INBOX").action(async (opts) => {
3433
3554
  const chalk$11 = require("chalk");
3434
3555
  try {
3435
- const { setupGmailWatch } = await Promise.resolve().then(() => require("./gmail-watch-setup-DR7YR_NT.js"));
3556
+ const { setupGmailWatch } = await Promise.resolve().then(() => require("./gmail-watch-setup-xG9GkPwr.js"));
3436
3557
  const labelIds = opts.labels.split(",").map((s) => s.trim()).filter(Boolean);
3437
3558
  const result = await setupGmailWatch({
3438
3559
  topicName: opts.topic,
@@ -3452,7 +3573,7 @@ gmailCmd.command("watch-setup").description("Register Gmail watch for push notif
3452
3573
  const cronCmd = program.command("cron").description("Scheduled tasks (cron → agent prompt)");
3453
3574
  cronCmd.command("list").action(async () => {
3454
3575
  const chalk$11 = require("chalk");
3455
- const { loadCronTasks } = await Promise.resolve().then(() => require("./cron-tasks-Dq-jkNOz.js"));
3576
+ const { loadCronTasks } = await Promise.resolve().then(() => require("./cron-tasks-4my0PJce.js"));
3456
3577
  const tasks = await loadCronTasks();
3457
3578
  console.log(chalk$11.bold.cyan("\n ⏰ CRON TASKS\n"));
3458
3579
  if (tasks.length === 0) {
@@ -3472,7 +3593,7 @@ cronCmd.command("list").action(async () => {
3472
3593
  });
3473
3594
  cronCmd.command("add").arguments("<schedule> <prompt>").option("-n, --name <name>", "Task name").action(async (schedule, prompt, opts) => {
3474
3595
  const chalk$11 = require("chalk");
3475
- const { loadCronTasks, addCronTask, saveCronTasks } = await Promise.resolve().then(() => require("./cron-tasks-Dq-jkNOz.js"));
3596
+ const { loadCronTasks, addCronTask, saveCronTasks } = await Promise.resolve().then(() => require("./cron-tasks-4my0PJce.js"));
3476
3597
  await loadCronTasks();
3477
3598
  addCronTask(schedule, prompt, opts.name);
3478
3599
  await saveCronTasks();
@@ -3482,7 +3603,7 @@ cronCmd.command("add").arguments("<schedule> <prompt>").option("-n, --name <name
3482
3603
  });
3483
3604
  cronCmd.command("remove <id>").action(async (id) => {
3484
3605
  const chalk$11 = require("chalk");
3485
- const { loadCronTasks, removeCronTask, saveCronTasks } = await Promise.resolve().then(() => require("./cron-tasks-Dq-jkNOz.js"));
3606
+ const { loadCronTasks, removeCronTask, saveCronTasks } = await Promise.resolve().then(() => require("./cron-tasks-4my0PJce.js"));
3486
3607
  await loadCronTasks();
3487
3608
  if (removeCronTask(id)) {
3488
3609
  await saveCronTasks();
@@ -3493,14 +3614,14 @@ cronCmd.command("remove <id>").action(async (id) => {
3493
3614
  program.command("nodes").description("List connected mobile nodes (iOS/Android Connect tab)").action(async () => {
3494
3615
  const chalk$11 = require("chalk");
3495
3616
  const http$2 = await import("http");
3496
- const fs$8 = await import("fs-extra");
3497
- const path$8 = await import("path");
3498
- const os$8 = await import("os");
3617
+ const fs$7 = await import("fs-extra");
3618
+ const { getConfigPath: getConfigPath$1 } = await Promise.resolve().then(() => require("./paths-D-QecARF.js"));
3499
3619
  let port = 18789;
3500
3620
  try {
3501
- const cfg = await fs$8.readJson(path$8.join(os$8.homedir(), ".hyperclaw", "hyperclaw.json"));
3621
+ const cfg = await fs$7.readJson(getConfigPath$1());
3502
3622
  port = cfg?.gateway?.port ?? 18789;
3503
3623
  } catch {}
3624
+ let exitCode = 0;
3504
3625
  return new Promise((resolve, reject) => {
3505
3626
  const req = http$2.get(`http://127.0.0.1:${port}/api/nodes`, (res) => {
3506
3627
  let data = "";
@@ -3523,36 +3644,39 @@ program.command("nodes").description("List connected mobile nodes (iOS/Android C
3523
3644
  }
3524
3645
  } catch {
3525
3646
  console.log(chalk$11.red(" Could not reach gateway. Start with: hyperclaw daemon start\n"));
3647
+ exitCode = 1;
3526
3648
  }
3527
3649
  resolve();
3528
3650
  });
3529
3651
  });
3530
3652
  req.on("error", () => {
3531
3653
  console.log(chalk$11.red(" Gateway offline. Start with: hyperclaw daemon start\n"));
3654
+ exitCode = 1;
3532
3655
  resolve();
3533
3656
  });
3534
3657
  req.setTimeout(3e3, () => {
3535
3658
  req.destroy();
3659
+ exitCode = 1;
3536
3660
  resolve();
3537
3661
  });
3538
- }).then(() => process.exit(0));
3662
+ }).then(() => process.exit(exitCode));
3539
3663
  });
3540
3664
  const whCmd = program.command("webhooks").description("Webhook endpoint management");
3541
3665
  whCmd.command("list").action(async () => {
3542
- const { WebhookManager } = await Promise.resolve().then(() => require("./manager-SfouqcxX.js"));
3666
+ const { WebhookManager } = await Promise.resolve().then(() => require("./manager-BQf9drst.js"));
3543
3667
  const m = new WebhookManager();
3544
3668
  await m.load();
3545
3669
  m.showList();
3546
3670
  process.exit(0);
3547
3671
  });
3548
3672
  whCmd.command("remove <id>").action(async (id) => {
3549
- const { WebhookManager } = await Promise.resolve().then(() => require("./manager-SfouqcxX.js"));
3673
+ const { WebhookManager } = await Promise.resolve().then(() => require("./manager-BQf9drst.js"));
3550
3674
  const m = new WebhookManager();
3551
3675
  await m.remove(id);
3552
3676
  process.exit(0);
3553
3677
  });
3554
3678
  whCmd.command("toggle <id>").action(async (id) => {
3555
- const { WebhookManager } = await Promise.resolve().then(() => require("./manager-SfouqcxX.js"));
3679
+ const { WebhookManager } = await Promise.resolve().then(() => require("./manager-BQf9drst.js"));
3556
3680
  const m = new WebhookManager();
3557
3681
  await m.toggle(id);
3558
3682
  process.exit(0);
@@ -3561,7 +3685,7 @@ const logsCmd = program.command("logs").description("View gateway logs");
3561
3685
  logsCmd.option("-n, --lines <n>", "Number of lines to show", "50");
3562
3686
  logsCmd.option("-f, --follow", "Stream logs in real time");
3563
3687
  logsCmd.action(async (opts) => {
3564
- const { tailLog, streamLog } = await Promise.resolve().then(() => require("./logger-D2nl9nkX.js"));
3688
+ const { tailLog, streamLog } = await Promise.resolve().then(() => require("./logger-ry2oCfdf.js"));
3565
3689
  if (opts.follow) await streamLog();
3566
3690
  else {
3567
3691
  await tailLog(parseInt(opts.lines));
@@ -3569,7 +3693,7 @@ logsCmd.action(async (opts) => {
3569
3693
  }
3570
3694
  });
3571
3695
  program.command("gateway:serve").description("Start the gateway server in the foreground (used by daemon)").action(async () => {
3572
- const { startGateway } = await Promise.resolve().then(() => require("./server-o0BLRkXZ.js"));
3696
+ const { startGateway } = await Promise.resolve().then(() => require("./server-Bav63Eqx.js"));
3573
3697
  await startGateway();
3574
3698
  process.on("SIGINT", () => process.exit(0));
3575
3699
  process.on("SIGTERM", () => process.exit(0));
@@ -3578,15 +3702,17 @@ program.command("gateway:serve").description("Start the gateway server in the fo
3578
3702
  const gatewayCfgCmd = gatewayCmd.command("config").description("Configure gateway settings");
3579
3703
  gatewayCfgCmd.option("--set-token <token>", "Set gateway auth token").option("--regenerate-token", "Generate a new random token").option("--set-port <port>", "Set gateway port").option("--set-bind <addr>", "Set gateway bind address").action(async (opts) => {
3580
3704
  const chalk$11 = require("chalk");
3581
- const fs$8 = require("fs-extra");
3582
- const path$8 = require("path");
3583
- const os$8 = require("os");
3584
- const crypto$2 = require("crypto");
3585
- const cfgFile = path$8.join(os$8.homedir(), ".hyperclaw", "hyperclaw.json");
3705
+ const fs$7 = require("fs-extra");
3706
+ const path$5 = require("path");
3707
+ const { getConfigPath: getConfigPath$1 } = await Promise.resolve().then(() => require("./paths-D-QecARF.js"));
3708
+ const crypto$3 = require("crypto");
3709
+ const cfgFile = getConfigPath$1();
3586
3710
  let cfg = {};
3587
3711
  try {
3588
- cfg = await fs$8.readJson(cfgFile);
3589
- } catch {}
3712
+ cfg = await fs$7.readJson(cfgFile);
3713
+ } catch (e) {
3714
+ if (process.env.DEBUG) console.error("[run-main] gateway config read:", e?.message);
3715
+ }
3590
3716
  if (!cfg.gateway) cfg.gateway = {
3591
3717
  port: 18789,
3592
3718
  bind: "127.0.0.1",
@@ -3596,7 +3722,7 @@ gatewayCfgCmd.option("--set-token <token>", "Set gateway auth token").option("--
3596
3722
  hooks: true
3597
3723
  };
3598
3724
  if (opts.regenerateToken) {
3599
- cfg.gateway.authToken = crypto$2.randomBytes(32).toString("hex");
3725
+ cfg.gateway.authToken = crypto$3.randomBytes(32).toString("hex");
3600
3726
  console.log(chalk$11.hex("#06b6d4")("\n ✔ New gateway token generated"));
3601
3727
  console.log(chalk$11.gray(` Token: ${cfg.gateway.authToken}`));
3602
3728
  }
@@ -3612,9 +3738,11 @@ gatewayCfgCmd.option("--set-token <token>", "Set gateway auth token").option("--
3612
3738
  cfg.gateway.bind = opts.setBind;
3613
3739
  console.log(chalk$11.hex("#06b6d4")(`\n ✔ Bind set to ${cfg.gateway.bind}`));
3614
3740
  }
3615
- await fs$8.ensureDir(path$8.dirname(cfgFile));
3616
- await fs$8.writeJson(cfgFile, cfg, { spaces: 2 });
3617
- await fs$8.chmod(cfgFile, 384);
3741
+ await fs$7.ensureDir(path$5.dirname(cfgFile));
3742
+ const tmp = cfgFile + ".tmp";
3743
+ await fs$7.writeJson(tmp, cfg, { spaces: 2 });
3744
+ await fs$7.chmod(tmp, 384);
3745
+ await fs$7.rename(tmp, cfgFile);
3618
3746
  console.log(chalk$11.gray(` Saved to ${cfgFile}\n`));
3619
3747
  process.exit(0);
3620
3748
  });
@@ -3622,11 +3750,11 @@ const authCmd = program.command("auth").description("OAuth and provider credenti
3622
3750
  authCmd.command("add <service_id>").description("Add API key for a service (any provider we do not ship). Stored in credentials/ and .env.").option("--key <api_key>", "API key (prompts if omitted)").option("--base-url <url>", "Base URL (optional, e.g. https://api.example.com)").option("--env-var <name>", "Env var name (default: <SERVICE_ID>_API_KEY)").action(async (serviceId, opts) => {
3623
3751
  const chalk$11 = require("chalk");
3624
3752
  const inquirer$2 = require("inquirer");
3625
- const { CredentialsStore } = await Promise.resolve().then(() => require("./credentials-store-DT53GLWN.js"));
3626
- const { getHyperClawDir, getEnvFilePath } = await Promise.resolve().then(() => require("./paths-D-QecARF.js"));
3627
- const { getApiKeyGuide, GENERIC_API_KEY_STEPS } = await Promise.resolve().then(() => require("./api-keys-guide-CMncOxUR.js"));
3628
- const fs$8 = await import("fs-extra");
3629
- const path$8 = await import("path");
3753
+ const { CredentialsStore } = await Promise.resolve().then(() => require("./credentials-store-DU2cVTiY.js"));
3754
+ const { getHyperClawDir: getHyperClawDir$1, getEnvFilePath } = await Promise.resolve().then(() => require("./paths-D-QecARF.js"));
3755
+ const { getApiKeyGuide, GENERIC_API_KEY_STEPS } = await Promise.resolve().then(() => require("./api-keys-guide-BdT2lfX6.js"));
3756
+ const fs$7 = await import("fs-extra");
3757
+ const path$5 = await import("path");
3630
3758
  const guide = getApiKeyGuide(serviceId);
3631
3759
  const steps = guide?.setupSteps ?? GENERIC_API_KEY_STEPS;
3632
3760
  console.log(chalk$11.bold.hex("#06b6d4")(`\n 🔑 Add API key: ${guide?.name ?? serviceId}\n`));
@@ -3651,7 +3779,7 @@ authCmd.command("add <service_id>").description("Add API key for a service (any
3651
3779
  }]);
3652
3780
  apiKey = key.trim();
3653
3781
  }
3654
- const creds = new CredentialsStore(getHyperClawDir());
3782
+ const creds = new CredentialsStore(getHyperClawDir$1());
3655
3783
  await creds.set(safeId, {
3656
3784
  apiKey,
3657
3785
  ...opts.baseUrl ? { baseUrl: opts.baseUrl } : {},
@@ -3659,14 +3787,14 @@ authCmd.command("add <service_id>").description("Add API key for a service (any
3659
3787
  });
3660
3788
  const envVar = opts.envVar || `${safeId.toUpperCase().replace(/-/g, "_")}_API_KEY`;
3661
3789
  const envPath = getEnvFilePath();
3662
- await fs$8.ensureDir(path$8.dirname(envPath));
3790
+ await fs$7.ensureDir(path$5.dirname(envPath));
3663
3791
  let envContent = "";
3664
- if (await fs$8.pathExists(envPath)) envContent = await fs$8.readFile(envPath, "utf8");
3792
+ if (await fs$7.pathExists(envPath)) envContent = await fs$7.readFile(envPath, "utf8");
3665
3793
  const envLine = `${envVar}=${apiKey}`;
3666
3794
  const re = new RegExp(`^${envVar}=.*$`, "m");
3667
3795
  if (re.test(envContent)) envContent = envContent.replace(re, envLine);
3668
3796
  else envContent = envContent.trimEnd() + (envContent ? "\n" : "") + envLine + "\n";
3669
- await fs$8.writeFile(envPath, envContent, { mode: 384 });
3797
+ await fs$7.writeFile(envPath, envContent, { mode: 384 });
3670
3798
  console.log(chalk$11.hex("#06b6d4")(`\n ✔ Added: ${safeId}`));
3671
3799
  console.log(chalk$11.gray(` Credentials: ~/.hyperclaw/credentials/${safeId}.json`));
3672
3800
  console.log(chalk$11.gray(` Env: ${envVar} (in .env — use in skills via process.env.${envVar.replace(/-/g, "_")})`));
@@ -3676,18 +3804,18 @@ authCmd.command("add <service_id>").description("Add API key for a service (any
3676
3804
  });
3677
3805
  authCmd.command("remove <service_id>").description("Remove API key for a service from credentials and .env").action(async (serviceId) => {
3678
3806
  const chalk$11 = require("chalk");
3679
- const { CredentialsStore } = await Promise.resolve().then(() => require("./credentials-store-DT53GLWN.js"));
3680
- const { getHyperClawDir, getEnvFilePath } = await Promise.resolve().then(() => require("./paths-D-QecARF.js"));
3681
- const fs$8 = await import("fs-extra");
3807
+ const { CredentialsStore } = await Promise.resolve().then(() => require("./credentials-store-DU2cVTiY.js"));
3808
+ const { getHyperClawDir: getHyperClawDir$1, getEnvFilePath } = await Promise.resolve().then(() => require("./paths-D-QecARF.js"));
3809
+ const fs$7 = await import("fs-extra");
3682
3810
  const safeId = serviceId.replace(/[^a-zA-Z0-9_-]/g, "_").toLowerCase();
3683
- const creds = new CredentialsStore(getHyperClawDir());
3811
+ const creds = new CredentialsStore(getHyperClawDir$1());
3684
3812
  await creds.remove(safeId);
3685
3813
  const envVar = `${safeId.toUpperCase().replace(/-/g, "_")}_API_KEY`;
3686
3814
  const envPath = getEnvFilePath();
3687
- if (await fs$8.pathExists(envPath)) {
3688
- let c = await fs$8.readFile(envPath, "utf8");
3815
+ if (await fs$7.pathExists(envPath)) {
3816
+ let c = await fs$7.readFile(envPath, "utf8");
3689
3817
  c = c.replace(new RegExp(`^${envVar}=.*\n?`, "gm"), "");
3690
- await fs$8.writeFile(envPath, c);
3818
+ await fs$7.writeFile(envPath, c);
3691
3819
  }
3692
3820
  console.log(chalk$11.hex("#06b6d4")(`\n ✔ Removed: ${safeId}\n`));
3693
3821
  process.exit(0);
@@ -3696,7 +3824,7 @@ authCmd.command("oauth <provider>").description("Run full OAuth flow. Providers:
3696
3824
  const chalk$11 = require("chalk");
3697
3825
  const ora$4 = (await import("ora")).default;
3698
3826
  try {
3699
- const { runOAuthFlow } = await Promise.resolve().then(() => require("./oauth-flow-Bsv_lnIc.js"));
3827
+ const { runOAuthFlow } = await Promise.resolve().then(() => require("./oauth-flow-B3S4T_SJ.js"));
3700
3828
  const spinner = ora$4("Starting OAuth flow...").start();
3701
3829
  spinner.text = "Opening browser — complete the consent and return here.";
3702
3830
  const tokens = await runOAuthFlow(provider, {
@@ -3704,7 +3832,7 @@ authCmd.command("oauth <provider>").description("Run full OAuth flow. Providers:
3704
3832
  clientSecret: opts.clientSecret
3705
3833
  });
3706
3834
  spinner.stop();
3707
- const { writeOAuthToken } = await Promise.resolve().then(() => require("./oauth-provider-C99w78bS.js"));
3835
+ const { writeOAuthToken } = await Promise.resolve().then(() => require("./oauth-provider-B2RBpiXg.js"));
3708
3836
  const now = Math.floor(Date.now() / 1e3);
3709
3837
  const expires_at = tokens.expires_in ? now + tokens.expires_in : void 0;
3710
3838
  const tokenUrl = provider === "google" || provider === "google-gmail" ? "https://oauth2.googleapis.com/token" : provider === "microsoft" ? "https://login.microsoftonline.com/common/oauth2/v2.0/token" : void 0;
@@ -3739,7 +3867,7 @@ authCmd.command("setup-token <provider>").description("Save setup token (Anthrop
3739
3867
  console.log(chalk$11.red("\n ✖ No token provided.\n"));
3740
3868
  process.exit(1);
3741
3869
  }
3742
- const { writeOAuthToken } = await Promise.resolve().then(() => require("./oauth-provider-C99w78bS.js"));
3870
+ const { writeOAuthToken } = await Promise.resolve().then(() => require("./oauth-provider-B2RBpiXg.js"));
3743
3871
  await writeOAuthToken("anthropic-setup", {
3744
3872
  access_token: token.trim(),
3745
3873
  token_url: "https://api.anthropic.com"
@@ -3750,7 +3878,7 @@ authCmd.command("setup-token <provider>").description("Save setup token (Anthrop
3750
3878
  });
3751
3879
  authCmd.command("oauth-set <provider>").description("Save OAuth tokens manually (access_token, refresh_token, etc.) to ~/.hyperclaw/oauth-<provider>.json").option("--token <access_token>", "Access token").option("--refresh <refresh_token>", "Refresh token (optional)").option("--expires-in <seconds>", "Token lifetime in seconds (optional)").option("--token-url <url>", "Refresh endpoint URL (optional)").action(async (provider, opts) => {
3752
3880
  const chalk$11 = require("chalk");
3753
- const { writeOAuthToken } = await Promise.resolve().then(() => require("./oauth-provider-C99w78bS.js"));
3881
+ const { writeOAuthToken } = await Promise.resolve().then(() => require("./oauth-provider-B2RBpiXg.js"));
3754
3882
  const access_token = opts.token || process.env.OAUTH_ACCESS_TOKEN;
3755
3883
  if (!access_token) {
3756
3884
  console.log(chalk$11.red("\n ✖ Provide --token <access_token> or set OAUTH_ACCESS_TOKEN\n"));
@@ -3770,15 +3898,15 @@ authCmd.command("oauth-set <provider>").description("Save OAuth tokens manually
3770
3898
  const workspaceCmd = program.command("workspace").description("Manage agent workspace files");
3771
3899
  workspaceCmd.command("init [dir]").description("Initialize workspace files (SOUL.md, USER.md, TOOLS.md, HEARTBEAT.md, BOOTSTRAP.md) in a directory").action(async (dir) => {
3772
3900
  const chalk$11 = require("chalk");
3773
- const fs$8 = require("fs-extra");
3774
- const path$8 = require("path");
3775
- const os$8 = require("os");
3776
- const targetDir = dir || path$8.join(os$8.homedir(), ".hyperclaw");
3901
+ const fs$7 = require("fs-extra");
3902
+ const path$5 = require("path");
3903
+ const { getHyperClawDir: getHyperClawDir$1, getConfigPath: getConfigPath$1 } = await Promise.resolve().then(() => require("./paths-D-QecARF.js"));
3904
+ const targetDir = dir || getHyperClawDir$1();
3777
3905
  let cfg = {};
3778
3906
  try {
3779
- cfg = await fs$8.readJson(path$8.join(os$8.homedir(), ".hyperclaw", "hyperclaw.json"));
3907
+ cfg = await fs$7.readJson(getConfigPath$1());
3780
3908
  } catch {}
3781
- const { initWorkspaceFiles } = await Promise.resolve().then(() => require("./memory-Bv_eg-tQ.js"));
3909
+ const { initWorkspaceFiles } = await Promise.resolve().then(() => require("./memory-D991eoj7.js"));
3782
3910
  await initWorkspaceFiles({
3783
3911
  agentName: cfg.identity?.agentName || "Hyper",
3784
3912
  personality: cfg.identity?.personality || "helpful and concise",
@@ -3792,10 +3920,10 @@ workspaceCmd.command("init [dir]").description("Initialize workspace files (SOUL
3792
3920
  });
3793
3921
  workspaceCmd.command("show [dir]").description("Show workspace files summary").action(async (dir) => {
3794
3922
  const chalk$11 = require("chalk");
3795
- const fs$8 = require("fs-extra");
3796
- const path$8 = require("path");
3797
- const os$8 = require("os");
3798
- const targetDir = dir || path$8.join(os$8.homedir(), ".hyperclaw");
3923
+ const fs$7 = require("fs-extra");
3924
+ const path$5 = require("path");
3925
+ const { getHyperClawDir: getHyperClawDir$1 } = await Promise.resolve().then(() => require("./paths-D-QecARF.js"));
3926
+ const targetDir = dir || getHyperClawDir$1();
3799
3927
  console.log(chalk$11.bold.hex("#06b6d4")("\n 📁 WORKSPACE\n"));
3800
3928
  for (const fname of [
3801
3929
  "SOUL.md",
@@ -3806,9 +3934,9 @@ workspaceCmd.command("show [dir]").description("Show workspace files summary").a
3806
3934
  "AGENTS.md",
3807
3935
  "MEMORY.md"
3808
3936
  ]) {
3809
- const fpath = path$8.join(targetDir, fname);
3810
- const exists = await fs$8.pathExists(fpath);
3811
- const size = exists ? (await fs$8.stat(fpath)).size : 0;
3937
+ const fpath = path$5.join(targetDir, fname);
3938
+ const exists = await fs$7.pathExists(fpath);
3939
+ const size = exists ? (await fs$7.stat(fpath)).size : 0;
3812
3940
  const dot = exists ? chalk$11.hex("#06b6d4")("✔") : chalk$11.gray("○");
3813
3941
  console.log(` ${dot} ${fname.padEnd(14)} ${exists ? chalk$11.gray(`${size} bytes`) : chalk$11.gray("(missing)")}`);
3814
3942
  }
@@ -3817,13 +3945,13 @@ workspaceCmd.command("show [dir]").description("Show workspace files summary").a
3817
3945
  });
3818
3946
  const botCmd = program.command("bot").description("HyperClaw Bot — companion bot for remote gateway control");
3819
3947
  botCmd.command("status").action(async () => {
3820
- const { showBotStatus } = await Promise.resolve().then(() => require("./hyperclawbot-FGyzdLtO.js"));
3948
+ const { showBotStatus } = await Promise.resolve().then(() => require("./hyperclawbot-DnPIyjox.js"));
3821
3949
  await showBotStatus();
3822
3950
  process.exit(0);
3823
3951
  });
3824
3952
  botCmd.command("setup").description("Configure HyperClaw Bot (Telegram token, allowed users)").action(async () => {
3825
3953
  const inquirer$2 = require("inquirer");
3826
- const { saveBotConfig } = await Promise.resolve().then(() => require("./hyperclawbot-FGyzdLtO.js"));
3954
+ const { saveBotConfig } = await Promise.resolve().then(() => require("./hyperclawbot-DnPIyjox.js"));
3827
3955
  const chalk$11 = require("chalk");
3828
3956
  console.log(chalk$11.bold.hex("#06b6d4")("\n 🦅 HYPERCLAW BOT SETUP\n"));
3829
3957
  console.log(chalk$11.gray(" Create a bot at t.me/BotFather, then paste the token below.\n"));
@@ -3870,11 +3998,11 @@ botCmd.command("setup").description("Configure HyperClaw Bot (Telegram token, al
3870
3998
  process.exit(0);
3871
3999
  });
3872
4000
  botCmd.command("start").description("Start HyperClaw Bot (foreground or background)").option("--background", "Run bot in background (use hyperclaw bot stop to stop)").action(async (opts) => {
3873
- const { spawn } = await import("child_process");
3874
- const path$8 = await import("path");
4001
+ const { spawn: spawn$1 } = await import("child_process");
4002
+ const path$5 = await import("path");
3875
4003
  if (opts?.background) {
3876
- const entry = process.argv[1] || path$8.join(__dirname, "run-main.js");
3877
- const child = spawn(process.execPath, [
4004
+ const entry = process.argv[1] || path$5.join(__dirname, "run-main.js");
4005
+ const child = spawn$1(process.execPath, [
3878
4006
  entry,
3879
4007
  "bot",
3880
4008
  "start"
@@ -3885,14 +4013,14 @@ botCmd.command("start").description("Start HyperClaw Bot (foreground or backgrou
3885
4013
  cwd: process.cwd()
3886
4014
  });
3887
4015
  child.unref();
3888
- const { writeBotPid } = await Promise.resolve().then(() => require("./hyperclawbot-FGyzdLtO.js"));
4016
+ const { writeBotPid } = await Promise.resolve().then(() => require("./hyperclawbot-DnPIyjox.js"));
3889
4017
  await writeBotPid(child.pid);
3890
4018
  console.log(require("chalk").green(`\n ✔ HyperClaw Bot started in background (PID ${child.pid})`));
3891
4019
  console.log(require("chalk").gray(" Stop with: hyperclaw bot stop\n"));
3892
4020
  process.exit(0);
3893
4021
  return;
3894
4022
  }
3895
- const { loadBotConfig, TelegramHyperClawBot, DiscordHyperClawBot } = await Promise.resolve().then(() => require("./hyperclawbot-FGyzdLtO.js"));
4023
+ const { loadBotConfig, TelegramHyperClawBot, DiscordHyperClawBot } = await Promise.resolve().then(() => require("./hyperclawbot-DnPIyjox.js"));
3896
4024
  const cfg = await loadBotConfig();
3897
4025
  if (!cfg) {
3898
4026
  console.log(require("chalk").red("\n ✖ HyperClaw Bot not configured. Run: hyperclaw bot setup\n"));
@@ -3919,41 +4047,41 @@ botCmd.command("start").description("Start HyperClaw Bot (foreground or backgrou
3919
4047
  });
3920
4048
  botCmd.command("stop").description("Stop HyperClaw Bot (when running in background)").action(async () => {
3921
4049
  const chalk$11 = require("chalk");
3922
- const { stopBotProcess } = await Promise.resolve().then(() => require("./hyperclawbot-FGyzdLtO.js"));
4050
+ const { stopBotProcess } = await Promise.resolve().then(() => require("./hyperclawbot-DnPIyjox.js"));
3923
4051
  const stopped = await stopBotProcess();
3924
4052
  if (stopped) console.log(chalk$11.green("\n ✔ HyperClaw Bot stopped\n"));
3925
4053
  else console.log(chalk$11.gray("\n Bot not running in background (no PID file). Use Ctrl+C to stop foreground bot.\n"));
3926
4054
  process.exit(stopped ? 0 : 1);
3927
4055
  });
3928
4056
  memCmd.command("search <query>").description("Search MEMORY.md").action(async (query) => {
3929
- const { searchMemory } = await Promise.resolve().then(() => require("./src-CbNutLsJ.js"));
4057
+ const { searchMemory } = await Promise.resolve().then(() => require("./src-DZtpIvWJ.js"));
3930
4058
  await searchMemory(query);
3931
4059
  process.exit(0);
3932
4060
  });
3933
4061
  memCmd.command("auto-show").description("Show auto-extracted memories from MEMORY.md").action(async () => {
3934
- const { showMemory } = await Promise.resolve().then(() => require("./src-CbNutLsJ.js"));
4062
+ const { showMemory } = await Promise.resolve().then(() => require("./src-DZtpIvWJ.js"));
3935
4063
  await showMemory();
3936
4064
  process.exit(0);
3937
4065
  });
3938
4066
  memCmd.command("clear").description("Clear all auto-extracted memories").action(async () => {
3939
- const { clearMemory } = await Promise.resolve().then(() => require("./src-CbNutLsJ.js"));
4067
+ const { clearMemory } = await Promise.resolve().then(() => require("./src-DZtpIvWJ.js"));
3940
4068
  await clearMemory();
3941
4069
  process.exit(0);
3942
4070
  });
3943
4071
  memCmd.command("save <text>").description("Manually save a fact to MEMORY.md").action(async (text) => {
3944
- const { saveMemoryDirect } = await Promise.resolve().then(() => require("./src-CbNutLsJ.js"));
4072
+ const { saveMemoryDirect } = await Promise.resolve().then(() => require("./src-DZtpIvWJ.js"));
3945
4073
  await saveMemoryDirect(text);
3946
4074
  console.log(chalk.default.hex("#06b6d4")(` ✅ Saved: ${text}\n`));
3947
4075
  process.exit(0);
3948
4076
  });
3949
4077
  const pcCmd = program.command("pc").description("PC access — give the AI access to your computer");
3950
4078
  pcCmd.command("status").description("Show PC access status and config").action(async () => {
3951
- const { showPCAccessStatus } = await Promise.resolve().then(() => require("./src-CbNutLsJ.js"));
4079
+ const { showPCAccessStatus } = await Promise.resolve().then(() => require("./src-DZtpIvWJ.js"));
3952
4080
  await showPCAccessStatus();
3953
4081
  process.exit(0);
3954
4082
  });
3955
4083
  pcCmd.command("enable").description("Enable PC access for the AI").option("--level <level>", "Access level: read-only | sandboxed | full", "full").option("--paths <paths>", "Comma-separated allowed paths (sandboxed mode)").action(async (opts) => {
3956
- const { savePCAccessConfig } = await Promise.resolve().then(() => require("./src-CbNutLsJ.js"));
4084
+ const { savePCAccessConfig } = await Promise.resolve().then(() => require("./src-DZtpIvWJ.js"));
3957
4085
  const level = opts.level;
3958
4086
  const allowed = [
3959
4087
  "read-only",
@@ -3980,13 +4108,14 @@ pcCmd.command("enable").description("Enable PC access for the AI").option("--lev
3980
4108
  process.exit(0);
3981
4109
  });
3982
4110
  pcCmd.command("disable").description("Disable PC access").action(async () => {
3983
- const { savePCAccessConfig } = await Promise.resolve().then(() => require("./src-CbNutLsJ.js"));
4111
+ const { savePCAccessConfig } = await Promise.resolve().then(() => require("./src-DZtpIvWJ.js"));
3984
4112
  await savePCAccessConfig({ enabled: false });
3985
4113
  console.log(chalk.default.hex("#06b6d4")("\n ✅ PC access disabled\n"));
3986
4114
  process.exit(0);
3987
4115
  });
3988
4116
  pcCmd.command("log").description("Show PC access audit log").option("-n, --lines <n>", "Number of lines", "50").action(async (opts) => {
3989
- const logFile = require("path").join(require("os").homedir(), ".hyperclaw", "pc-access.log");
4117
+ const { getHyperClawDir: getHyperClawDir$1 } = await Promise.resolve().then(() => require("./paths-D-QecARF.js"));
4118
+ const logFile = require("path").join(getHyperClawDir$1(), "pc-access.log");
3990
4119
  const fs2 = require("fs-extra");
3991
4120
  if (!await fs2.pathExists(logFile)) {
3992
4121
  console.log(chalk.default.gray("\n No PC access log yet\n"));
@@ -4004,7 +4133,7 @@ pcCmd.command("log").description("Show PC access audit log").option("-n, --lines
4004
4133
  process.exit(0);
4005
4134
  });
4006
4135
  pcCmd.command("run <command>").description("Run a shell command via PC access (must be enabled)").action(async (command) => {
4007
- const { loadPCAccessConfig, getPCAccessTools } = await Promise.resolve().then(() => require("./src-CbNutLsJ.js"));
4136
+ const { loadPCAccessConfig, getPCAccessTools } = await Promise.resolve().then(() => require("./src-DZtpIvWJ.js"));
4008
4137
  const cfg = await loadPCAccessConfig();
4009
4138
  if (!cfg.enabled) {
4010
4139
  console.log(chalk.default.red("\n ✖ PC access disabled. Run: hyperclaw pc enable\n"));
@@ -4035,35 +4164,34 @@ program.command("setup").description("Setup wizard — alias for `hyperclaw onbo
4035
4164
  });
4036
4165
  async function runUpdateCheck() {
4037
4166
  try {
4038
- const { checkForUpdates: checkForUpdates$1, notifyUpdateAvailable } = await Promise.resolve().then(() => require("./update-check-DSazWOCY.js"));
4039
- const path$8 = require("path");
4167
+ const { checkForUpdates: checkForUpdates$1, notifyUpdateAvailable } = await Promise.resolve().then(() => require("./update-check-CaHNCDqe.js"));
4168
+ const path$5 = require("path");
4040
4169
  const { readFileSync } = require("fs");
4041
- const pkgPath = path$8.resolve(__dirname, "../package.json");
4170
+ const pkgPath = path$5.resolve(__dirname, "../package.json");
4042
4171
  const current = JSON.parse(readFileSync(pkgPath, "utf8")).version;
4043
4172
  const result = await checkForUpdates$1(current);
4044
4173
  if (result?.available) notifyUpdateAvailable(current, result.latest);
4045
4174
  } catch {}
4046
4175
  }
4047
4176
  if (process.argv.length === 2) (async () => {
4048
- const { ConfigManager: ConfigManager$1 } = await Promise.resolve().then(() => require("./manager-e1-NZQbZ.js"));
4177
+ const { ConfigManager: ConfigManager$1 } = await Promise.resolve().then(() => require("./manager-B90HEHxe.js"));
4049
4178
  const cfg = await new ConfigManager$1().load().catch(() => null);
4050
4179
  if (cfg?.provider?.apiKey || cfg?.provider?.providerId) {
4051
4180
  await new require_onboard.Banner().showNeonBanner(false);
4052
- const { getTheme } = await Promise.resolve().then(() => require("./theme-D0smfC_l.js"));
4181
+ const { getTheme } = await Promise.resolve().then(() => require("./theme-DdZT-Bq4.js"));
4053
4182
  const t = getTheme(false);
4054
4183
  const chalk$11 = require("chalk");
4055
4184
  console.log(t.bold(" Quick actions:\n"));
4185
+ console.log(` ${t.c("hyperclaw chat")} — chat with agent (terminal)`);
4056
4186
  console.log(` ${t.c("hyperclaw onboard")} — re-run setup wizard`);
4057
- console.log(` ${t.c("hyperclaw onboard --install-daemon")} — wizard + daemon (full PC access)`);
4058
4187
  console.log(` ${t.c("hyperclaw daemon start")} — start background service`);
4059
- console.log(` ${t.c("hyperclaw daemon stop")} — stop background service`);
4060
4188
  console.log(` ${t.c("hyperclaw daemon status")} — service status`);
4061
- console.log(` ${t.c("hyperclaw gateway start")} — start gateway (foreground)`);
4062
4189
  console.log(` ${t.c("hyperclaw status")} — system overview`);
4190
+ console.log(` ${t.c("hyperclaw doctor")} — health check & fix issues`);
4063
4191
  console.log(` ${t.c("hyperclaw --help")} — all commands\n`);
4064
4192
  } else {
4065
4193
  await new require_onboard.Banner().showNeonBanner(false);
4066
- const { HyperClawWizard: HyperClawWizard$1 } = await Promise.resolve().then(() => require("./onboard-UOJHCkZj.js"));
4194
+ const { HyperClawWizard: HyperClawWizard$1 } = await Promise.resolve().then(() => require("./onboard-BHKBzytX.js"));
4067
4195
  await new HyperClawWizard$1().run({ wizard: true });
4068
4196
  }
4069
4197
  await runUpdateCheck();