hyperclaw 5.2.0 → 5.2.2
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.
- package/README.md +227 -3
- package/dist/a2ui-protocol-A2xow5Ch.js +75 -0
- package/dist/a2ui-protocol-dTomAnFE.js +75 -0
- package/dist/agents-routing-95_s2yea.js +6 -0
- package/dist/agents-routing-Bz3SstlK.js +398 -0
- package/dist/agents-routing-DHDK2axt.js +6 -0
- package/dist/agents-routing-DRMS8Ol-.js +6 -0
- package/dist/agents-routing-biXULPch.js +398 -0
- package/dist/agents-routing-iQmIOe3k.js +398 -0
- package/dist/api-key-validation-BeQ2MZAT.js +64 -0
- package/dist/api-key-validation-C2WQk1oM.js +64 -0
- package/dist/api-keys-guide-2cD5Rf-K.js +149 -0
- package/dist/api-keys-guide-BdT2lfX6.js +149 -0
- package/dist/api-keys-guide-BwCIj8qd.js +149 -0
- package/dist/audit-1Anq45mH.js +441 -0
- package/dist/audit-BAVTInWP.js +441 -0
- package/dist/audit-CV0gLGaL.js +444 -0
- package/dist/audit-Dnt0XgZD.js +441 -0
- package/dist/audit-DqNGdIKU.js +441 -0
- package/dist/bounty-tools-Cx7BXUfz.js +211 -0
- package/dist/bounty-tools-DWvW3yc-.js +211 -0
- package/dist/bounty-tools-FI7DHmsS.js +211 -0
- package/dist/bounty-tools-cjmA3Hgk.js +211 -0
- package/dist/browser-tools-BGPBCApQ.js +5 -0
- package/dist/browser-tools-Btu_vB2d.js +179 -0
- package/dist/browser-tools-DF2nQ1hi.js +5 -0
- package/dist/browser-tools-DYx4p13A.js +179 -0
- package/dist/chat-4ZistSKP.js +310 -0
- package/dist/chat-BqiMMQc4.js +324 -0
- package/dist/chat-BxxYzPaz.js +324 -0
- package/dist/chat-C0W8lwhh.js +324 -0
- package/dist/chat-CKBxDWAQ.js +324 -0
- package/dist/chat-CkCcCkVG.js +324 -0
- package/dist/chat-DCOKsydK.js +310 -0
- package/dist/chat-DZcZ1Uli.js +310 -0
- package/dist/chat-DiIra4_i.js +324 -0
- package/dist/chat-R_NuOa1v.js +324 -0
- package/dist/claw-tasks-CIkuuhga.js +80 -0
- package/dist/claw-tasks-CquRilLP.js +80 -0
- package/dist/claw-tasks-xXtZpeY0.js +80 -0
- package/dist/config-BEz4yNRx.js +261 -0
- package/dist/config-Br73VMLb.js +261 -0
- package/dist/config-CXqmvq_H.js +7 -0
- package/dist/config-D5vF0kvV.js +261 -0
- package/dist/config-D_6MxFk3.js +7 -0
- package/dist/config-b2HmFrBr.js +7 -0
- package/dist/connector-1H0OW1h8.js +419 -0
- package/dist/connector-1qpQ5L-T.js +173 -0
- package/dist/connector-2OVpYt0c.js +213 -0
- package/dist/connector-8cFkE3X4.js +552 -0
- package/dist/connector-B2bZD1id.js +181 -0
- package/dist/connector-B3W7quzD.js +568 -0
- package/dist/connector-B4FWhOzd.js +189 -0
- package/dist/connector-B5fqvoZL.js +239 -0
- package/dist/connector-BA8ZbhPt.js +162 -0
- package/dist/connector-BFl0XIwB.js +182 -0
- package/dist/connector-BIGRhSuN.js +419 -0
- package/dist/connector-BK0qVbvh.js +498 -0
- package/dist/connector-BMtA4KSF.js +194 -0
- package/dist/connector-BPIrifW-.js +218 -0
- package/dist/connector-BRNU-rJ4.js +225 -0
- package/dist/connector-BS7lvyLd.js +213 -0
- package/dist/connector-BZ_-UPUL.js +305 -0
- package/dist/connector-Bd0NZ5bT.js +189 -0
- package/dist/connector-BjsPwu-Y.js +531 -0
- package/dist/connector-BnSsjz1D.js +167 -0
- package/dist/connector-BrogAqVQ.js +239 -0
- package/dist/connector-BsVTG3U3.js +181 -0
- package/dist/connector-By9pLJgR.js +340 -0
- package/dist/connector-C7c1ASzT.js +192 -0
- package/dist/connector-CIj28thK.js +182 -0
- package/dist/connector-CJkuYNd1.js +280 -0
- package/dist/connector-CPcUmIHz.js +552 -0
- package/dist/connector-CUlP4He3.js +194 -0
- package/dist/connector-CZg2I8Tn.js +350 -0
- package/dist/connector-C_NtpthL.js +498 -0
- package/dist/connector-CddDB9IK.js +192 -0
- package/dist/connector-ChQMspky.js +167 -0
- package/dist/connector-ClHFpI56.js +425 -0
- package/dist/connector-CmhUVhMT.js +531 -0
- package/dist/connector-CnX7lwCt.js +425 -0
- package/dist/connector-D36oGwnK.js +162 -0
- package/dist/connector-DDJ7Nxkq.js +286 -0
- package/dist/connector-DDn2QDuf.js +167 -0
- package/dist/connector-DO_bzgJn.js +167 -0
- package/dist/connector-DVcRo21Y.js +568 -0
- package/dist/connector-DhWs2anT.js +189 -0
- package/dist/connector-DsY1IXMz.js +508 -0
- package/dist/connector-DwRF3CQg.js +218 -0
- package/dist/connector-HG61cV9h.js +340 -0
- package/dist/connector-HR28FwA5.js +181 -0
- package/dist/connector-K0QGRYh5.js +85 -0
- package/dist/connector-NliR7NZZ.js +508 -0
- package/dist/connector-VolY_hP4.js +350 -0
- package/dist/connector-Wjx9ih70.js +286 -0
- package/dist/connector-dfqk7NYD.js +181 -0
- package/dist/connector-e0W4Mpmq.js +189 -0
- package/dist/connector-eK6_phVW.js +280 -0
- package/dist/connector-l7UmCYaL.js +225 -0
- package/dist/connector-n2YnOJYZ.js +305 -0
- package/dist/connector-orobFcqE.js +531 -0
- package/dist/connector-r1SRYSqX.js +173 -0
- package/dist/connector-tZgn5_Fk.js +85 -0
- package/dist/connector-wm4Oe1DK.js +181 -0
- package/dist/cost-tracker-DHTv6zpR.js +103 -0
- package/dist/cost-tracker-DJ1tiKcx.js +103 -0
- package/dist/cost-tracker-jbK_AoIV.js +103 -0
- package/dist/credentials-store-C0R-pQM7.js +5 -0
- package/dist/credentials-store-C9HwQSY2.js +5 -0
- package/dist/credentials-store-D5Xw3F75.js +89 -0
- package/dist/credentials-store-DIPxVk51.js +86 -0
- package/dist/credentials-store-DU2cVTiY.js +7 -0
- package/dist/credentials-store-Djqi3oXC.js +5 -0
- package/dist/credentials-store-HwLJ3GS2.js +87 -0
- package/dist/credentials-store-z16XvFZ2.js +86 -0
- package/dist/cron-tasks-4my0PJce.js +85 -0
- package/dist/cron-tasks-CJkI0lo3.js +82 -0
- package/dist/cron-tasks-DN1YjYhK.js +82 -0
- package/dist/cron-tasks-DuNdK89e.js +82 -0
- package/dist/daemon-3xj3FVuw.js +5 -0
- package/dist/daemon-3zd_nupj.js +333 -0
- package/dist/daemon-B9-h7ryw.js +7 -0
- package/dist/daemon-BLC4AL9L.js +401 -0
- package/dist/daemon-BR1uU7jH.js +333 -0
- package/dist/daemon-BRdtCOoC.js +7 -0
- package/dist/daemon-BnmNBHY5.js +384 -0
- package/dist/daemon-BwspQtiu.js +7 -0
- package/dist/daemon-Bx5HTGjk.js +404 -0
- package/dist/daemon-CCxpXxSb.js +7 -0
- package/dist/daemon-CEUxN3SQ.js +7 -0
- package/dist/daemon-CHk9_ezz.js +403 -0
- package/dist/daemon-CgrsZ0d9.js +320 -0
- package/dist/daemon-Cy7iD9au.js +7 -0
- package/dist/daemon-DCm9RCEz.js +401 -0
- package/dist/daemon-DNzuDyu8.js +7 -0
- package/dist/daemon-DWFWCLvh.js +7 -0
- package/dist/daemon-DgBZaFyi.js +355 -0
- package/dist/daemon-Dsyjad7g.js +7 -0
- package/dist/daemon-DwxPYrb6.js +404 -0
- package/dist/daemon-DxoPIGQG.js +333 -0
- package/dist/daemon-MXsEPeVa.js +7 -0
- package/dist/daemon-rpJ-J0bv.js +403 -0
- package/dist/daemon-sZVjFUoX.js +7 -0
- package/dist/delivery-8fo4GZ-j.js +95 -0
- package/dist/delivery-CkxNZIsF.js +95 -0
- package/dist/delivery-CtbHkJbB.js +95 -0
- package/dist/delivery-D1z3f3KW.js +4 -0
- package/dist/delivery-DKGpk5M4.js +4 -0
- package/dist/delivery-DReKOHyM.js +95 -0
- package/dist/delivery-Ddn-VajP.js +4 -0
- package/dist/delivery-DsoxcD2z.js +4 -0
- package/dist/destructive-gate-CEn4BsTd.js +101 -0
- package/dist/destructive-gate-CgCqfKuT.js +101 -0
- package/dist/destructive-gate-DcEpMEqP.js +101 -0
- package/dist/developer-keys-7rQ8M4Qo.js +127 -0
- package/dist/developer-keys-BeUpyenR.js +8 -0
- package/dist/developer-keys-CSmzA-dl.js +127 -0
- package/dist/developer-keys-KFGbGuZj.js +8 -0
- package/dist/device-auth-store-BDhzxuPc.js +5 -0
- package/dist/device-auth-store-Cjyn2XeY.js +86 -0
- package/dist/device-auth-store-DgSabRGa.js +7 -0
- package/dist/device-auth-store-LKgpU74c.js +88 -0
- package/dist/device-auth-store-UlkrF-9_.js +5 -0
- package/dist/device-auth-store-yvGLuYAl.js +86 -0
- package/dist/doctor-BcfmNAGV.js +233 -0
- package/dist/doctor-CEP3UQjn.js +227 -0
- package/dist/doctor-CmJh0JLr.js +6 -0
- package/dist/doctor-CtDvddSn.js +231 -0
- package/dist/doctor-DPoCaXsd.js +227 -0
- package/dist/doctor-DPvY68XB.js +6 -0
- package/dist/doctor-G6EMPukm.js +6 -0
- package/dist/doctor-tL9TXt9y.js +6 -0
- package/dist/engine-1fLMFUn2.js +7 -0
- package/dist/engine-7lSiOc0W.js +323 -0
- package/dist/engine-B83pxJM4.js +318 -0
- package/dist/engine-B8hxtYpN.js +323 -0
- package/dist/engine-BXqijc79.js +7 -0
- package/dist/engine-BfQ-vNqE.js +321 -0
- package/dist/engine-BlpKw8D4.js +7 -0
- package/dist/engine-BmN7L0jl.js +7 -0
- package/dist/engine-CRagwas6.js +321 -0
- package/dist/engine-CppTnNbG.js +7 -0
- package/dist/engine-CwAfDQbD.js +7 -0
- package/dist/engine-D5kY4hMJ.js +7 -0
- package/dist/engine-DJSfl_Hc.js +323 -0
- package/dist/engine-DQcMDIbU.js +305 -0
- package/dist/engine-W1I8kkgV.js +305 -0
- package/dist/engine-mVrq_pfQ.js +7 -0
- package/dist/env-resolve-BeamD7l5.js +10 -0
- package/dist/env-resolve-C0otwkgN.js +10 -0
- package/dist/env-resolve-CC_po9t5.js +10 -0
- package/dist/env-resolve-COjiKYD8.js +147 -0
- package/dist/env-resolve-CYiFHLAi.js +145 -0
- package/dist/env-resolve-ClZcv5-B.js +145 -0
- package/dist/env-resolve-DS92g2fk.js +151 -0
- package/dist/env-resolve-DkBUmcI3.js +10 -0
- package/dist/extraction-tools-6PREYSAK.js +5 -0
- package/dist/extraction-tools-B8F3nsLR.js +5 -0
- package/dist/extraction-tools-BX5HGgko.js +91 -0
- package/dist/extraction-tools-Co11UJdZ.js +91 -0
- package/dist/form_data-DDfyO9B0.js +8657 -0
- package/dist/form_data-DgWnyuDn.js +8657 -0
- package/dist/gateway-BfHcLG6d.js +194 -0
- package/dist/gateway-CzI8dnlS.js +196 -0
- package/dist/gateway-DNv10FFg.js +194 -0
- package/dist/gateway-DRh5v1KI.js +4 -0
- package/dist/gateway-DroPtqyM.js +6 -0
- package/dist/gateway-DyWwV0Nu.js +4 -0
- package/dist/gmail-watch-setup-BV4r_lgb.js +40 -0
- package/dist/gmail-watch-setup-CW_5D9g-.js +40 -0
- package/dist/gmail-watch-setup-xG9GkPwr.js +42 -0
- package/dist/health-CBy1PfzC.js +152 -0
- package/dist/health-Cq_yE5Ln.js +6 -0
- package/dist/heartbeat-engine-7I0dZeea.js +83 -0
- package/dist/heartbeat-engine-BZUNOanp.js +84 -0
- package/dist/heartbeat-engine-DNm8ggAs.js +83 -0
- package/dist/heartbeat-engine-tgK7xXmt.js +83 -0
- package/dist/hub-CI4qcd1b.js +515 -0
- package/dist/hub-CNQaC4JI.js +515 -0
- package/dist/hub-Co1SbxLs.js +6 -0
- package/dist/hub-eUh89obm.js +6 -0
- package/dist/hyperclawbot-Bkncybig.js +508 -0
- package/dist/hyperclawbot-C37Unss3.js +505 -0
- package/dist/hyperclawbot-CFHXZr12.js +505 -0
- package/dist/hyperclawbot-DGou0MZ6.js +508 -0
- package/dist/hyperclawbot-DnPIyjox.js +508 -0
- package/dist/hyperclawbot-GYFaTEgC.js +505 -0
- package/dist/hyperclawbot-mcLnyJyM.js +505 -0
- package/dist/hyperclawbot-xcastgTV.js +508 -0
- package/dist/hyperclawbot-y0i_joQK.js +505 -0
- package/dist/inference-BvmMO9dq.js +8 -0
- package/dist/inference-C2HOfRf8.js +2848 -0
- package/dist/inference-CKvR5Ik5.js +2841 -0
- package/dist/inference-DVVmhQn5.js +2841 -0
- package/dist/inference-DoM_iai-.js +2848 -0
- package/dist/inference-DwgXrvBb.js +6 -0
- package/dist/inference-Go1G6tnF.js +8 -0
- package/dist/inference-_ptQe0oG.js +2841 -0
- package/dist/inference-gK62s15E.js +6 -0
- package/dist/inference-lLDvSTR9.js +6 -0
- package/dist/knowledge-graph-4SxFnwEm.js +131 -0
- package/dist/knowledge-graph-BsH-HoUJ.js +131 -0
- package/dist/knowledge-graph-BxrAiV2B.js +134 -0
- package/dist/knowledge-graph-DCa91Nz5.js +131 -0
- package/dist/loader-7fz2fb92.js +400 -0
- package/dist/loader-B2jZXMBu.js +6 -0
- package/dist/loader-CbS0tIrR.js +4 -0
- package/dist/loader-Ckvv7vHF.js +410 -0
- package/dist/loader-CwOXDhFQ.js +400 -0
- package/dist/loader-DpEOgWXZ.js +4 -0
- package/dist/loader-DpYgmaul.js +4 -0
- package/dist/loader-DtyQP7wL.js +400 -0
- package/dist/logger-B3AqfQWG.js +84 -0
- package/dist/logger-B_q8yqmA.js +84 -0
- package/dist/logger-BxJklsDv.js +84 -0
- package/dist/logger-ry2oCfdf.js +86 -0
- package/dist/manager-9zwhTeQ5.js +233 -0
- package/dist/manager-B1RbCW6C.js +31 -0
- package/dist/manager-B90HEHxe.js +6 -0
- package/dist/manager-B94UWcTs.js +233 -0
- package/dist/manager-BDvL_oPs.js +4 -0
- package/dist/manager-BEatAtIB.js +31 -0
- package/dist/manager-BQf9drst.js +120 -0
- package/dist/manager-Bau1mIqb.js +6 -0
- package/dist/manager-BkqHak_e.js +247 -0
- package/dist/manager-BoFdZm-l.js +233 -0
- package/dist/manager-C2bq0AXc.js +233 -0
- package/dist/manager-CBe3W3eG.js +117 -0
- package/dist/manager-CoHr8_eJ.js +117 -0
- package/dist/manager-CuS13QUO.js +6 -0
- package/dist/manager-DO0pK2OI.js +117 -0
- package/dist/manager-DVetfBCH.js +6 -0
- package/dist/manager-Jd0qSzVe.js +35 -0
- package/dist/manager-TxFgaHT9.js +31 -0
- package/dist/manager-Yo6ZAofG.js +250 -0
- package/dist/mcp-B_WJiTZz.js +139 -0
- package/dist/mcp-DVhPLprc.js +139 -0
- package/dist/mcp-GWnLTVi-.js +142 -0
- package/dist/mcp-loader-B6xz7ftt.js +94 -0
- package/dist/mcp-loader-BLanJREp.js +94 -0
- package/dist/mcp-loader-Bx7FFxAU.js +94 -0
- package/dist/mcp-loader-CecsT-3O.js +93 -0
- package/dist/mcp-loader-Cr0LRQHE.js +93 -0
- package/dist/mcp-loader-D0rbtV3G.js +93 -0
- package/dist/memory-B47nvgOq.js +271 -0
- package/dist/memory-D-Py-cz5.js +273 -0
- package/dist/memory-D991eoj7.js +6 -0
- package/dist/memory-DoQoaHjo.js +4 -0
- package/dist/memory-auto-5aBZQJQY.js +5 -0
- package/dist/memory-auto-BTeOoLsb.js +306 -0
- package/dist/memory-auto-BvjfaflZ.js +5 -0
- package/dist/memory-auto-CSUt3aas.js +306 -0
- package/dist/memory-auto-CfpACu6s.js +306 -0
- package/dist/memory-auto-DI9Xpd-x.js +306 -0
- package/dist/memory-auto-D_mPVYqI.js +5 -0
- package/dist/memory-auto-PmKetZuo.js +5 -0
- package/dist/memory-auto-_Jv-Diw_.js +306 -0
- package/dist/memory-auto-rLBheyC0.js +5 -0
- package/dist/memory-integration-UFc6CdRA.js +91 -0
- package/dist/memory-integration-_NOy60Fj.js +91 -0
- package/dist/memory-integration-nbQ8esDu.js +91 -0
- package/dist/moltbook-B4znBD46.js +81 -0
- package/dist/moltbook-CGtA7Lb3.js +81 -0
- package/dist/moltbook-EZOfIwcN.js +81 -0
- package/dist/node-BvA5_2f_.js +222 -0
- package/dist/node-CRaZw_av.js +225 -0
- package/dist/node-CSOPY84m.js +222 -0
- package/dist/node-FPkFXYdU.js +225 -0
- package/dist/nodes-registry--DkZbn41.js +52 -0
- package/dist/nodes-registry-DYEH1aWn.js +52 -0
- package/dist/nodes-registry-jK7T0THg.js +52 -0
- package/dist/oauth-flow-B3S4T_SJ.js +147 -0
- package/dist/oauth-flow-CuQHP_RD.js +150 -0
- package/dist/oauth-flow-D_iqT6nr.js +150 -0
- package/dist/oauth-flow-Du2N6B2V.js +150 -0
- package/dist/oauth-provider-B2RBpiXg.js +111 -0
- package/dist/oauth-provider-C1qk9SI-.js +110 -0
- package/dist/oauth-provider-CDOMIZgF.js +110 -0
- package/dist/observability-4CyDqBWi.js +89 -0
- package/dist/observability-BfhV3r9r.js +89 -0
- package/dist/observability-DAnU8Ung.js +89 -0
- package/dist/onboard-3SoScSbC.js +11 -0
- package/dist/onboard-BAhuTUMO.js +4240 -0
- package/dist/onboard-BHKBzytX.js +13 -0
- package/dist/onboard-BVYo6E_l.js +3865 -0
- package/dist/onboard-Bf3ht6ct.js +11 -0
- package/dist/onboard-Bmpa_pxc.js +3865 -0
- package/dist/onboard-BwFFnEDj.js +13 -0
- package/dist/onboard-C-0A7RKN.js +4211 -0
- package/dist/onboard-CCuETEUr.js +3865 -0
- package/dist/onboard-CDi3B996.js +13 -0
- package/dist/onboard-CcXqOCHa.js +3862 -0
- package/dist/onboard-Cw85LmyN.js +13 -0
- package/dist/onboard-DU3acWAq.js +13 -0
- package/dist/onboard-DVEFIFRj.js +11 -0
- package/dist/onboard-DW8b3EUP.js +4250 -0
- package/dist/onboard-DfYWM7yN.js +13 -0
- package/dist/onboard-DiDTuD7m.js +13 -0
- package/dist/onboard-DqamkA0I.js +11 -0
- package/dist/onboard-DtDFU4lV.js +3865 -0
- package/dist/onboard-IdhgSexF.js +11 -0
- package/dist/onboard-Qh-qibLR.js +3861 -0
- package/dist/onboard-T54jLovz.js +13 -0
- package/dist/onboard-nQerZcpc.js +3862 -0
- package/dist/onboard-qXuXl5An.js +4250 -0
- package/dist/onboard-r2hLYfsL.js +3865 -0
- package/dist/onboard-xsSdyO6Y.js +3865 -0
- package/dist/onboard-yACJiQ6A.js +4215 -0
- package/dist/onboard-z1K8FTgh.js +13 -0
- package/dist/orchestrator-BIKrbOtx.js +6 -0
- package/dist/orchestrator-C71UI_0E.js +189 -0
- package/dist/orchestrator-C9I6EVhh.js +189 -0
- package/dist/orchestrator-CC6vuL6m.js +6 -0
- package/dist/orchestrator-CExmcac2.js +189 -0
- package/dist/orchestrator-CQm9v71d.js +6 -0
- package/dist/orchestrator-CSZnojZo.js +189 -0
- package/dist/orchestrator-Cc-gXExz.js +189 -0
- package/dist/orchestrator-CxySH0n5.js +6 -0
- package/dist/orchestrator-Cybvh-J0.js +189 -0
- package/dist/orchestrator-D-9pExNB.js +189 -0
- package/dist/orchestrator-DG-RjZIu.js +6 -0
- package/dist/orchestrator-DvEjhiJR.js +6 -0
- package/dist/orchestrator-FFpXJwSV.js +189 -0
- package/dist/orchestrator-f6IjivCr.js +6 -0
- package/dist/orchestrator-mPfwBFvX.js +6 -0
- package/dist/osint-BIGH02i8.js +277 -0
- package/dist/osint-Cc2Ju-o4.js +277 -0
- package/dist/osint-Cg3-CYHx.js +278 -0
- package/dist/pairing-BRPzVXzQ.js +198 -0
- package/dist/pairing-Cm78Tsdx.js +4 -0
- package/dist/pairing-D4sA3-Ha.js +6 -0
- package/dist/pairing-ouc_v-OX.js +196 -0
- package/dist/pc-access-BZvlAXYN.js +819 -0
- package/dist/pc-access-CziyndiO.js +8 -0
- package/dist/pc-access-D5k6dAfU.js +819 -0
- package/dist/pc-access-DoPSPiAK.js +8 -0
- package/dist/pending-approval-BaKZ0b_s.js +22 -0
- package/dist/pending-approval-CBVZcFJn.js +22 -0
- package/dist/pending-approval-DiZ96D8v.js +22 -0
- package/dist/providers-CFQC39vg.js +5 -0
- package/dist/providers-DP8T0QCR.js +1089 -0
- package/dist/reminders-store-BSIw5Y5z.js +58 -0
- package/dist/reminders-store-Bus52SjO.js +58 -0
- package/dist/renderer-CmMjrkqN.js +225 -0
- package/dist/renderer-_Y9mEqMM.js +225 -0
- package/dist/renderer-h3ar94cf.js +228 -0
- package/dist/rules-D3GcY_lt.js +103 -0
- package/dist/rules-DFoset7W.js +103 -0
- package/dist/rules-eJw9i4RF.js +106 -0
- package/dist/run-main.js +461 -333
- package/dist/runner-C-syOqBr.js +1273 -0
- package/dist/runner-C73am--A.js +1273 -0
- package/dist/runner-DKLq9jhv.js +1273 -0
- package/dist/runner-Im-aCXhh.js +1273 -0
- package/dist/runner-NvAzKXbv.js +1273 -0
- package/dist/security-2DPBzs5F.js +4 -0
- package/dist/security-BhhX8wJx.js +73 -0
- package/dist/server-7tmTtdPU.js +4 -0
- package/dist/server-A38RPbRE.js +1291 -0
- package/dist/server-B0k_pCt5.js +4 -0
- package/dist/server-BErPWJZ5.js +4 -0
- package/dist/server-BKo-zifC.js +4 -0
- package/dist/server-Bav63Eqx.js +4 -0
- package/dist/server-BbWQWOH4.js +4 -0
- package/dist/server-BfHtA0Y2.js +1278 -0
- package/dist/server-BiYaxlFV.js +1287 -0
- package/dist/server-C6htB4FI.js +4 -0
- package/dist/server-CB7cjcj4.js +1278 -0
- package/dist/server-CNiOi5dN.js +1285 -0
- package/dist/server-CSC4npaT.js +1285 -0
- package/dist/server-CZfP2Poz.js +1278 -0
- package/dist/server-C_YVts3e.js +4 -0
- package/dist/server-CbQl0M21.js +1278 -0
- package/dist/server-Cj45rxn-.js +1292 -0
- package/dist/server-Ct7Fl3SE.js +1285 -0
- package/dist/server-D9q-3mLF.js +1292 -0
- package/dist/server-DRc26z9e.js +4 -0
- package/dist/server-DT7JjjVD.js +4 -0
- package/dist/server-DacRJyZn.js +4 -0
- package/dist/server-PCtHMXe2.js +1292 -0
- package/dist/server-wXCH_TCU.js +4 -0
- package/dist/session-store-7ZPOoB81.js +5 -0
- package/dist/session-store-BOa2y_EQ.js +5 -0
- package/dist/session-store-BYEr8j52.js +139 -0
- package/dist/session-store-Bx7lBD_a.js +141 -0
- package/dist/session-store-C13h7I2r.js +136 -0
- package/dist/session-store-CUHgJ0Xr.js +5 -0
- package/dist/session-store-cbtK6hx9.js +136 -0
- package/dist/session-store-eecMioKI.js +5 -0
- package/dist/sessions-tools-B5_ow-s7.js +5 -0
- package/dist/sessions-tools-CG2mvJo6.js +95 -0
- package/dist/sessions-tools-DVSejkNU.js +95 -0
- package/dist/sessions-tools-fOL1N3Zu.js +5 -0
- package/dist/skill-loader-99egKAGN.js +160 -0
- package/dist/skill-loader-Bl6pYxNN.js +160 -0
- package/dist/skill-loader-D4D5kfDu.js +7 -0
- package/dist/skill-loader-DwbmjEDa.js +7 -0
- package/dist/skill-runtime-1CrUOOGv.js +5 -0
- package/dist/skill-runtime-B-2O7Vgb.js +102 -0
- package/dist/skill-runtime-B7PutgyZ.js +5 -0
- package/dist/skill-runtime-BGNtPD_L.js +102 -0
- package/dist/skill-runtime-BUhMkMzO.js +5 -0
- package/dist/skill-runtime-Bv7fCCx8.js +102 -0
- package/dist/skill-runtime-Bx2HHcta.js +102 -0
- package/dist/skill-runtime-C6HVvnmN.js +5 -0
- package/dist/skill-runtime-CtSykP3r.js +102 -0
- package/dist/skill-runtime-DUAt8JM_.js +5 -0
- package/dist/skill-runtime-DZ6uJXGW.js +102 -0
- package/dist/skill-runtime-DaLnq_Jm.js +5 -0
- package/dist/skill-runtime-DpDbjL7y.js +102 -0
- package/dist/skill-runtime-acmnZSq7.js +102 -0
- package/dist/skill-runtime-dzuLMVSw.js +5 -0
- package/dist/skill-runtime-wiVnzSoJ.js +5 -0
- package/dist/src-B5lCcPXX.js +63 -0
- package/dist/src-B7Kxqi35.js +20 -0
- package/dist/src-B8DEmVd6.js +458 -0
- package/dist/src-BqbwzQQj.js +63 -0
- package/dist/src-C63ECu1t.js +63 -0
- package/dist/src-C65-5rOW.js +458 -0
- package/dist/src-CbTAVbeI.js +20 -0
- package/dist/src-Cmnclt47.js +63 -0
- package/dist/src-D0kptBSa.js +458 -0
- package/dist/src-DZtpIvWJ.js +63 -0
- package/dist/src-DjzS20TD.js +63 -0
- package/dist/src-DmPjS2Z4.js +458 -0
- package/dist/src-DmbIgW0O.js +63 -0
- package/dist/src-DsaXFru7.js +63 -0
- package/dist/src-Dt0TXI8r.js +458 -0
- package/dist/src-PPagVWuK.js +63 -0
- package/dist/src-rktqvEBJ.js +458 -0
- package/dist/src-tI8EOp6-.js +458 -0
- package/dist/src-zUHOCQgl.js +458 -0
- package/dist/src-zWhGmJSN.js +458 -0
- package/dist/sub-agent-tools-9k60L5mn.js +39 -0
- package/dist/sub-agent-tools-BBJf8oPD.js +39 -0
- package/dist/sub-agent-tools-BVCARpnF.js +39 -0
- package/dist/sub-agent-tools-Cx5BB5IO.js +39 -0
- package/dist/sub-agent-tools-DMT7jjBc.js +39 -0
- package/dist/sub-agent-tools-F-04gxf8.js +39 -0
- package/dist/sub-agent-tools-iBQiRKg6.js +39 -0
- package/dist/sub-agent-tools-kr921YOA.js +39 -0
- package/dist/theme-CLXvI6Hr.js +183 -0
- package/dist/theme-DdZT-Bq4.js +10 -0
- package/dist/theme-GEpjn_0G.js +180 -0
- package/dist/theme-hOlG-hDL.js +8 -0
- package/dist/tool-policy-D1zWYBKm.js +189 -0
- package/dist/tool-policy-TmXx_fpp.js +189 -0
- package/dist/tool-policy-YgysHf5s.js +189 -0
- package/dist/tts-elevenlabs-BT4WrEwy.js +61 -0
- package/dist/tts-elevenlabs-C62Wnnrg.js +61 -0
- package/dist/tts-elevenlabs-DmEFFeR8.js +61 -0
- package/dist/update-check-BeAPt4-f.js +98 -0
- package/dist/update-check-CaHNCDqe.js +6 -0
- package/dist/vision-B5DQ5hYa.js +121 -0
- package/dist/vision-XOSSQe4m.js +121 -0
- package/dist/vision-sIO3kwFy.js +121 -0
- package/dist/vision-tools-BHogJPuK.js +5 -0
- package/dist/vision-tools-BZhV8wg3.js +51 -0
- package/dist/vision-tools-BiDKd0UA.js +5 -0
- package/dist/vision-tools-CdRxilYR.js +5 -0
- package/dist/vision-tools-DnUjpQhI.js +51 -0
- package/dist/vision-tools-gtUq6d-x.js +51 -0
- package/dist/voice-transcription-5_iQE-0C.js +138 -0
- package/dist/voice-transcription-C3SuzK96.js +138 -0
- package/dist/voice-transcription-CYFj4Iv3.js +138 -0
- package/dist/voice-transcription-ygmlOkky.js +138 -0
- package/dist/website-watch-tools-BF-wR0UI.js +5 -0
- package/dist/website-watch-tools-CVh7RA5-.js +139 -0
- package/dist/website-watch-tools-CthBrGPP.js +5 -0
- package/dist/website-watch-tools-Oxf8Mv4j.js +139 -0
- package/package.json +1 -1
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
const require_chunk = require('./chunk-jS-bbMI5.js');
|
|
2
|
+
const require_paths = require('./paths-AIyBxIzm.js');
|
|
3
|
+
const require_paths$1 = require('./paths-DPovhojT.js');
|
|
4
|
+
const chalk = require_chunk.__toESM(require("chalk"));
|
|
5
|
+
const ora = require_chunk.__toESM(require("ora"));
|
|
6
|
+
const fs_extra = require_chunk.__toESM(require("fs-extra"));
|
|
7
|
+
const path = require_chunk.__toESM(require("path"));
|
|
8
|
+
const net = require_chunk.__toESM(require("net"));
|
|
9
|
+
|
|
10
|
+
//#region src/commands/doctor.ts
|
|
11
|
+
require_paths$1.init_paths();
|
|
12
|
+
async function isPortOpen(port) {
|
|
13
|
+
return new Promise((resolve) => {
|
|
14
|
+
const s = new net.default.Socket();
|
|
15
|
+
s.setTimeout(500);
|
|
16
|
+
s.on("connect", () => {
|
|
17
|
+
s.destroy();
|
|
18
|
+
resolve(true);
|
|
19
|
+
});
|
|
20
|
+
s.on("error", () => resolve(false));
|
|
21
|
+
s.on("timeout", () => resolve(false));
|
|
22
|
+
try {
|
|
23
|
+
s.connect(port, "127.0.0.1");
|
|
24
|
+
} catch {
|
|
25
|
+
resolve(false);
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
async function runDoctor(fix = false, opts = {}) {
|
|
30
|
+
const doFix = fix || opts.repair || opts.fix || false;
|
|
31
|
+
const force = opts.force || false;
|
|
32
|
+
const nonInteractive = opts.nonInteractive || opts.yes || false;
|
|
33
|
+
const deep = opts.deep || false;
|
|
34
|
+
const spinner = (0, ora.default)("Running health checks...").start();
|
|
35
|
+
await new Promise((r) => setTimeout(r, 400));
|
|
36
|
+
spinner.stop();
|
|
37
|
+
const configDir = require_paths.getHyperClawDir();
|
|
38
|
+
const configFile = require_paths.getConfigPath();
|
|
39
|
+
const agentsFile = path.default.join(configDir, "AGENTS.md");
|
|
40
|
+
const authFile = path.default.join(configDir, "auth.json");
|
|
41
|
+
const credentialsDir = path.default.join(configDir, "credentials");
|
|
42
|
+
const pairingFile = path.default.join(credentialsDir, "discord-pairing.json");
|
|
43
|
+
let cfg = null;
|
|
44
|
+
try {
|
|
45
|
+
cfg = await fs_extra.default.readJson(configFile);
|
|
46
|
+
} catch {}
|
|
47
|
+
const issues = [];
|
|
48
|
+
if (!cfg) issues.push({
|
|
49
|
+
id: "no-config",
|
|
50
|
+
severity: "error",
|
|
51
|
+
title: "No configuration found",
|
|
52
|
+
detail: "Run: hyperclaw init",
|
|
53
|
+
fixable: false
|
|
54
|
+
});
|
|
55
|
+
else {
|
|
56
|
+
const hasToken = !!cfg.gateway?.authToken;
|
|
57
|
+
issues.push({
|
|
58
|
+
id: "gateway-token",
|
|
59
|
+
severity: hasToken ? "ok" : "warn",
|
|
60
|
+
title: hasToken ? "Gateway auth token set" : "Gateway auth token missing",
|
|
61
|
+
detail: hasToken ? "Token is configured" : "Set a strong token in gateway config",
|
|
62
|
+
fixable: !hasToken,
|
|
63
|
+
fix: async () => {
|
|
64
|
+
const crypto = await import("crypto");
|
|
65
|
+
cfg.gateway = cfg.gateway || {};
|
|
66
|
+
cfg.gateway.authToken = crypto.randomBytes(32).toString("hex");
|
|
67
|
+
fs_extra.default.writeJsonSync(configFile, cfg, { spaces: 2 });
|
|
68
|
+
console.log(chalk.default.green(" ✔ Generated and saved gateway auth token"));
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
const channels = cfg.gateway?.enabledChannels || cfg.channels || [];
|
|
72
|
+
const channelConfigs = cfg.channelConfigs || cfg.channels || {};
|
|
73
|
+
const chList = Array.isArray(channels) ? channels : Object.keys(channelConfigs);
|
|
74
|
+
for (const ch of chList) {
|
|
75
|
+
const chCfg = typeof channelConfigs === "object" && !Array.isArray(channelConfigs) ? channelConfigs[ch] : null;
|
|
76
|
+
const dmPolicy = chCfg?.dmPolicy?.policy ?? (typeof chCfg?.dmPolicy === "string" ? chCfg.dmPolicy : null);
|
|
77
|
+
if (dmPolicy === "open") issues.push({
|
|
78
|
+
id: `dm-open-${ch}`,
|
|
79
|
+
severity: "warn",
|
|
80
|
+
title: `DM policy is "open" on ${ch}`,
|
|
81
|
+
detail: `Anyone can DM your agent on ${ch}. Consider using "pairing" or "allowlist".`,
|
|
82
|
+
fixable: false
|
|
83
|
+
});
|
|
84
|
+
if (dmPolicy === "allowlist") {
|
|
85
|
+
const allowFrom = chCfg?.dmPolicy?.allowFrom ?? chCfg?.allowFrom ?? [];
|
|
86
|
+
const arr = Array.isArray(allowFrom) ? allowFrom : [];
|
|
87
|
+
if (arr.length === 0) issues.push({
|
|
88
|
+
id: `dm-empty-allowlist-${ch}`,
|
|
89
|
+
severity: "error",
|
|
90
|
+
title: `Empty allowlist on ${ch} — DMs will be silently dropped`,
|
|
91
|
+
detail: `channel.${ch}.allowFrom or dmPolicy.allowFrom is empty. Add users or change policy.`,
|
|
92
|
+
fixable: true,
|
|
93
|
+
fix: async () => {
|
|
94
|
+
try {
|
|
95
|
+
const allowFromPath = path.default.join(credentialsDir, `${ch}-allowFrom.json`);
|
|
96
|
+
if (await fs_extra.default.pathExists(allowFromPath)) {
|
|
97
|
+
const af = await fs_extra.default.readJson(allowFromPath);
|
|
98
|
+
const ids = af.senderIds;
|
|
99
|
+
if (ids?.length) {
|
|
100
|
+
cfg.channelConfigs = cfg.channelConfigs || {};
|
|
101
|
+
const existing = cfg.channelConfigs[ch] || {};
|
|
102
|
+
const merged = {
|
|
103
|
+
...existing,
|
|
104
|
+
allowFrom: ids
|
|
105
|
+
};
|
|
106
|
+
if (typeof existing.dmPolicy === "object") merged.dmPolicy = {
|
|
107
|
+
...existing.dmPolicy,
|
|
108
|
+
allowFrom: ids
|
|
109
|
+
};
|
|
110
|
+
cfg.channelConfigs[ch] = merged;
|
|
111
|
+
await fs_extra.default.writeJson(configFile, cfg, { spaces: 2 });
|
|
112
|
+
console.log(chalk.default.green(` ✔ Restored ${ids.length} user(s) from allowFrom store`));
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
} catch {}
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
const hasApiKey = !!cfg.provider?.apiKey;
|
|
121
|
+
const isLocal = cfg.provider?.providerId === "local";
|
|
122
|
+
if (!hasApiKey && !isLocal) issues.push({
|
|
123
|
+
id: "no-api-key",
|
|
124
|
+
severity: "error",
|
|
125
|
+
title: "No AI provider API key configured",
|
|
126
|
+
detail: "Run: hyperclaw config set-key",
|
|
127
|
+
fixable: false
|
|
128
|
+
});
|
|
129
|
+
else issues.push({
|
|
130
|
+
id: "api-key",
|
|
131
|
+
severity: "ok",
|
|
132
|
+
title: "AI provider key configured",
|
|
133
|
+
detail: `Provider: ${cfg.provider?.providerId}`,
|
|
134
|
+
fixable: false
|
|
135
|
+
});
|
|
136
|
+
issues.push({
|
|
137
|
+
id: "agents-md",
|
|
138
|
+
severity: await fs_extra.default.pathExists(agentsFile) ? "ok" : "warn",
|
|
139
|
+
title: await fs_extra.default.pathExists(agentsFile) ? "AGENTS.md exists" : "AGENTS.md missing",
|
|
140
|
+
detail: await fs_extra.default.pathExists(agentsFile) ? agentsFile : "Run: hyperclaw memory init to generate",
|
|
141
|
+
fixable: false
|
|
142
|
+
});
|
|
143
|
+
const port = cfg.gateway?.port || 18789;
|
|
144
|
+
const running = await isPortOpen(port);
|
|
145
|
+
issues.push({
|
|
146
|
+
id: "gateway-running",
|
|
147
|
+
severity: running ? "ok" : "warn",
|
|
148
|
+
title: running ? `Gateway running on port ${port}` : `Gateway not running on port ${port}`,
|
|
149
|
+
detail: running ? `ws://127.0.0.1:${port}` : "Run: hyperclaw daemon start",
|
|
150
|
+
fixable: false
|
|
151
|
+
});
|
|
152
|
+
if (await fs_extra.default.pathExists(configFile)) {
|
|
153
|
+
const stat = await fs_extra.default.stat(configFile);
|
|
154
|
+
const unsafe = (stat.mode & 63) !== 0;
|
|
155
|
+
if (unsafe) issues.push({
|
|
156
|
+
id: "config-permissions",
|
|
157
|
+
severity: "warn",
|
|
158
|
+
title: "Config file has unsafe permissions",
|
|
159
|
+
detail: `chmod 600 ${configFile}`,
|
|
160
|
+
fixable: true,
|
|
161
|
+
fix: async () => {
|
|
162
|
+
await fs_extra.default.chmod(configFile, 384);
|
|
163
|
+
console.log(chalk.default.green(` ✔ Fixed permissions on ${configFile}`));
|
|
164
|
+
}
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
const stateWritable = await fs_extra.default.pathExists(configDir) && (await fs_extra.default.stat(configDir).catch(() => null))?.isDirectory?.();
|
|
168
|
+
issues.push({
|
|
169
|
+
id: "state-dir",
|
|
170
|
+
severity: stateWritable ? "ok" : "error",
|
|
171
|
+
title: stateWritable ? "State directory OK" : "State directory missing or not writable",
|
|
172
|
+
detail: stateWritable ? configDir : `Ensure ${configDir} exists and is writable`,
|
|
173
|
+
fixable: !stateWritable,
|
|
174
|
+
fix: async () => {
|
|
175
|
+
await fs_extra.default.ensureDir(configDir);
|
|
176
|
+
console.log(chalk.default.green(` ✔ Created state directory: ${configDir}`));
|
|
177
|
+
}
|
|
178
|
+
});
|
|
179
|
+
if (await fs_extra.default.pathExists(authFile)) {
|
|
180
|
+
const stat = await fs_extra.default.stat(authFile);
|
|
181
|
+
const unsafe = (stat.mode & 63) !== 0;
|
|
182
|
+
issues.push({
|
|
183
|
+
id: "auth-permissions",
|
|
184
|
+
severity: unsafe ? "warn" : "ok",
|
|
185
|
+
title: unsafe ? "Auth store has unsafe permissions" : "Auth store permissions OK",
|
|
186
|
+
detail: unsafe ? `chmod 600 ${authFile}` : `Mode: 600`,
|
|
187
|
+
fixable: unsafe,
|
|
188
|
+
fix: async () => {
|
|
189
|
+
await fs_extra.default.chmod(authFile, 384);
|
|
190
|
+
console.log(chalk.default.green(` ✔ Fixed permissions on ${authFile}`));
|
|
191
|
+
}
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
console.log(chalk.default.bold.cyan("\n 🩺 HYPERCLAW DOCTOR\n"));
|
|
196
|
+
let errorCount = 0, warnCount = 0;
|
|
197
|
+
for (const issue of issues) {
|
|
198
|
+
const icon = {
|
|
199
|
+
error: chalk.default.red("✖"),
|
|
200
|
+
warn: chalk.default.yellow("⚠"),
|
|
201
|
+
ok: chalk.default.green("✔")
|
|
202
|
+
}[issue.severity];
|
|
203
|
+
console.log(` ${icon} ${chalk.default.white(issue.title)}`);
|
|
204
|
+
console.log(` ${chalk.default.gray(issue.detail)}`);
|
|
205
|
+
if (issue.fixable && doFix && issue.fix) await issue.fix();
|
|
206
|
+
else if (issue.fixable && !fix) console.log(chalk.default.gray(" Run with --fix to auto-repair"));
|
|
207
|
+
if (issue.severity === "error") errorCount++;
|
|
208
|
+
if (issue.severity === "warn") warnCount++;
|
|
209
|
+
console.log();
|
|
210
|
+
}
|
|
211
|
+
const total = issues.length;
|
|
212
|
+
const okCount = total - errorCount - warnCount;
|
|
213
|
+
console.log(` ${chalk.default.bold("Summary:")} ${chalk.default.green(`${okCount} ok`)} ${chalk.default.yellow(`${warnCount} warnings`)} ${chalk.default.red(`${errorCount} errors`)}`);
|
|
214
|
+
if (errorCount > 0 || warnCount > 0) {
|
|
215
|
+
console.log(chalk.default.gray("\n Run: hyperclaw doctor --fix to auto-repair fixable issues"));
|
|
216
|
+
if (deep) console.log(chalk.default.gray(" Use --deep to scan for extra gateway services (launchd/systemd/schtasks)\n"));
|
|
217
|
+
else console.log();
|
|
218
|
+
} else console.log(chalk.default.green("\n ✔ All checks passed!\n"));
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
//#endregion
|
|
222
|
+
Object.defineProperty(exports, 'runDoctor', {
|
|
223
|
+
enumerable: true,
|
|
224
|
+
get: function () {
|
|
225
|
+
return runDoctor;
|
|
226
|
+
}
|
|
227
|
+
});
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
const require_chunk = require('./chunk-jS-bbMI5.js');
|
|
2
|
+
const require_paths = require('./paths-AIyBxIzm.js');
|
|
3
|
+
const require_paths$1 = require('./paths-DPovhojT.js');
|
|
4
|
+
const chalk = require_chunk.__toESM(require("chalk"));
|
|
5
|
+
const ora = require_chunk.__toESM(require("ora"));
|
|
6
|
+
const fs_extra = require_chunk.__toESM(require("fs-extra"));
|
|
7
|
+
const path = require_chunk.__toESM(require("path"));
|
|
8
|
+
const net = require_chunk.__toESM(require("net"));
|
|
9
|
+
|
|
10
|
+
//#region src/commands/doctor.ts
|
|
11
|
+
require_paths$1.init_paths();
|
|
12
|
+
async function isPortOpen(port) {
|
|
13
|
+
return new Promise((resolve) => {
|
|
14
|
+
const s = new net.default.Socket();
|
|
15
|
+
s.setTimeout(500);
|
|
16
|
+
s.on("connect", () => {
|
|
17
|
+
s.destroy();
|
|
18
|
+
resolve(true);
|
|
19
|
+
});
|
|
20
|
+
s.on("error", () => resolve(false));
|
|
21
|
+
s.on("timeout", () => resolve(false));
|
|
22
|
+
try {
|
|
23
|
+
s.connect(port, "127.0.0.1");
|
|
24
|
+
} catch {
|
|
25
|
+
resolve(false);
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
async function runDoctor(fix = false, opts = {}) {
|
|
30
|
+
const doFix = fix || opts.repair || opts.fix || false;
|
|
31
|
+
const force = opts.force || false;
|
|
32
|
+
const nonInteractive = opts.nonInteractive || opts.yes || false;
|
|
33
|
+
const deep = opts.deep || false;
|
|
34
|
+
const spinner = (0, ora.default)("Running health checks...").start();
|
|
35
|
+
await new Promise((r) => setTimeout(r, 400));
|
|
36
|
+
spinner.stop();
|
|
37
|
+
const configDir = require_paths.getHyperClawDir();
|
|
38
|
+
const configFile = require_paths.getConfigPath();
|
|
39
|
+
const agentsFile = path.default.join(configDir, "AGENTS.md");
|
|
40
|
+
const authFile = path.default.join(configDir, "auth.json");
|
|
41
|
+
const credentialsDir = path.default.join(configDir, "credentials");
|
|
42
|
+
const pairingFile = path.default.join(credentialsDir, "discord-pairing.json");
|
|
43
|
+
let cfg = null;
|
|
44
|
+
try {
|
|
45
|
+
cfg = await fs_extra.default.readJson(configFile);
|
|
46
|
+
} catch {}
|
|
47
|
+
const issues = [];
|
|
48
|
+
if (!cfg) issues.push({
|
|
49
|
+
id: "no-config",
|
|
50
|
+
severity: "error",
|
|
51
|
+
title: "No configuration found",
|
|
52
|
+
detail: "Run: hyperclaw init",
|
|
53
|
+
fixable: false
|
|
54
|
+
});
|
|
55
|
+
else {
|
|
56
|
+
const hasToken = !!cfg.gateway?.authToken;
|
|
57
|
+
issues.push({
|
|
58
|
+
id: "gateway-token",
|
|
59
|
+
severity: hasToken ? "ok" : "warn",
|
|
60
|
+
title: hasToken ? "Gateway auth token set" : "Gateway auth token missing",
|
|
61
|
+
detail: hasToken ? "Token is configured" : "Set a strong token in gateway config",
|
|
62
|
+
fixable: !hasToken,
|
|
63
|
+
fix: async () => {
|
|
64
|
+
const crypto = await import("crypto");
|
|
65
|
+
cfg.gateway = cfg.gateway || {};
|
|
66
|
+
cfg.gateway.authToken = crypto.randomBytes(32).toString("hex");
|
|
67
|
+
const tmp = configFile + ".tmp";
|
|
68
|
+
fs_extra.default.writeJsonSync(tmp, cfg, { spaces: 2 });
|
|
69
|
+
fs_extra.default.renameSync(tmp, configFile);
|
|
70
|
+
console.log(chalk.default.green(" ✔ Generated and saved gateway auth token"));
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
const channels = cfg.gateway?.enabledChannels || cfg.channels || [];
|
|
74
|
+
const channelConfigs = typeof cfg.channelConfigs === "object" && !Array.isArray(cfg.channelConfigs) ? cfg.channelConfigs : {};
|
|
75
|
+
const chList = Array.isArray(channels) ? channels : Object.keys(channelConfigs);
|
|
76
|
+
for (const ch of chList) {
|
|
77
|
+
const chCfg = typeof channelConfigs === "object" && !Array.isArray(channelConfigs) ? channelConfigs[ch] : null;
|
|
78
|
+
const dmPolicy = chCfg?.dmPolicy?.policy ?? (typeof chCfg?.dmPolicy === "string" ? chCfg.dmPolicy : null);
|
|
79
|
+
if (dmPolicy === "open") issues.push({
|
|
80
|
+
id: `dm-open-${ch}`,
|
|
81
|
+
severity: "warn",
|
|
82
|
+
title: `DM policy is "open" on ${ch}`,
|
|
83
|
+
detail: `Anyone can DM your agent on ${ch}. Consider using "pairing" or "allowlist".`,
|
|
84
|
+
fixable: false
|
|
85
|
+
});
|
|
86
|
+
if (dmPolicy === "allowlist") {
|
|
87
|
+
const allowFrom = chCfg?.dmPolicy?.allowFrom ?? chCfg?.allowFrom ?? [];
|
|
88
|
+
const arr = Array.isArray(allowFrom) ? allowFrom : [];
|
|
89
|
+
if (arr.length === 0) issues.push({
|
|
90
|
+
id: `dm-empty-allowlist-${ch}`,
|
|
91
|
+
severity: "error",
|
|
92
|
+
title: `Empty allowlist on ${ch} — DMs will be silently dropped`,
|
|
93
|
+
detail: `channel.${ch}.allowFrom or dmPolicy.allowFrom is empty. Add users or change policy.`,
|
|
94
|
+
fixable: true,
|
|
95
|
+
fix: async () => {
|
|
96
|
+
try {
|
|
97
|
+
const allowFromPath = path.default.join(credentialsDir, `${ch}-allowFrom.json`);
|
|
98
|
+
if (await fs_extra.default.pathExists(allowFromPath)) {
|
|
99
|
+
const af = await fs_extra.default.readJson(allowFromPath);
|
|
100
|
+
const ids = af.senderIds;
|
|
101
|
+
if (ids?.length) {
|
|
102
|
+
cfg.channelConfigs = cfg.channelConfigs || {};
|
|
103
|
+
const existing = cfg.channelConfigs[ch] || {};
|
|
104
|
+
const merged = {
|
|
105
|
+
...existing,
|
|
106
|
+
allowFrom: ids
|
|
107
|
+
};
|
|
108
|
+
if (typeof existing.dmPolicy === "object") merged.dmPolicy = {
|
|
109
|
+
...existing.dmPolicy,
|
|
110
|
+
allowFrom: ids
|
|
111
|
+
};
|
|
112
|
+
cfg.channelConfigs[ch] = merged;
|
|
113
|
+
const tmp = configFile + ".tmp";
|
|
114
|
+
await fs_extra.default.writeJson(tmp, cfg, { spaces: 2 });
|
|
115
|
+
await fs_extra.default.rename(tmp, configFile);
|
|
116
|
+
console.log(chalk.default.green(` ✔ Restored ${ids.length} user(s) from allowFrom store`));
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
} catch {}
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
const hasApiKey = !!cfg.provider?.apiKey;
|
|
125
|
+
const isLocal = cfg.provider?.providerId === "local";
|
|
126
|
+
if (!hasApiKey && !isLocal) issues.push({
|
|
127
|
+
id: "no-api-key",
|
|
128
|
+
severity: "error",
|
|
129
|
+
title: "No AI provider API key configured",
|
|
130
|
+
detail: "Run: hyperclaw config set-key",
|
|
131
|
+
fixable: false
|
|
132
|
+
});
|
|
133
|
+
else issues.push({
|
|
134
|
+
id: "api-key",
|
|
135
|
+
severity: "ok",
|
|
136
|
+
title: "AI provider key configured",
|
|
137
|
+
detail: `Provider: ${cfg.provider?.providerId}`,
|
|
138
|
+
fixable: false
|
|
139
|
+
});
|
|
140
|
+
issues.push({
|
|
141
|
+
id: "agents-md",
|
|
142
|
+
severity: await fs_extra.default.pathExists(agentsFile) ? "ok" : "warn",
|
|
143
|
+
title: await fs_extra.default.pathExists(agentsFile) ? "AGENTS.md exists" : "AGENTS.md missing",
|
|
144
|
+
detail: await fs_extra.default.pathExists(agentsFile) ? agentsFile : "Run: hyperclaw memory init to generate",
|
|
145
|
+
fixable: false
|
|
146
|
+
});
|
|
147
|
+
const port = cfg.gateway?.port || 18789;
|
|
148
|
+
const running = await isPortOpen(port);
|
|
149
|
+
issues.push({
|
|
150
|
+
id: "gateway-running",
|
|
151
|
+
severity: running ? "ok" : "warn",
|
|
152
|
+
title: running ? `Gateway running on port ${port}` : `Gateway not running on port ${port}`,
|
|
153
|
+
detail: running ? `ws://127.0.0.1:${port}` : "Run: hyperclaw daemon start",
|
|
154
|
+
fixable: false
|
|
155
|
+
});
|
|
156
|
+
if (await fs_extra.default.pathExists(configFile)) {
|
|
157
|
+
const stat = await fs_extra.default.stat(configFile);
|
|
158
|
+
const unsafe = (stat.mode & 63) !== 0;
|
|
159
|
+
if (unsafe) issues.push({
|
|
160
|
+
id: "config-permissions",
|
|
161
|
+
severity: "warn",
|
|
162
|
+
title: "Config file has unsafe permissions",
|
|
163
|
+
detail: `chmod 600 ${configFile}`,
|
|
164
|
+
fixable: true,
|
|
165
|
+
fix: async () => {
|
|
166
|
+
await fs_extra.default.chmod(configFile, 384);
|
|
167
|
+
console.log(chalk.default.green(` ✔ Fixed permissions on ${configFile}`));
|
|
168
|
+
}
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
const stateWritable = await fs_extra.default.pathExists(configDir) && (await fs_extra.default.stat(configDir).catch(() => null))?.isDirectory?.();
|
|
172
|
+
issues.push({
|
|
173
|
+
id: "state-dir",
|
|
174
|
+
severity: stateWritable ? "ok" : "error",
|
|
175
|
+
title: stateWritable ? "State directory OK" : "State directory missing or not writable",
|
|
176
|
+
detail: stateWritable ? configDir : `Ensure ${configDir} exists and is writable`,
|
|
177
|
+
fixable: !stateWritable,
|
|
178
|
+
fix: async () => {
|
|
179
|
+
await fs_extra.default.ensureDir(configDir);
|
|
180
|
+
console.log(chalk.default.green(` ✔ Created state directory: ${configDir}`));
|
|
181
|
+
}
|
|
182
|
+
});
|
|
183
|
+
if (await fs_extra.default.pathExists(authFile)) {
|
|
184
|
+
const stat = await fs_extra.default.stat(authFile);
|
|
185
|
+
const unsafe = (stat.mode & 63) !== 0;
|
|
186
|
+
issues.push({
|
|
187
|
+
id: "auth-permissions",
|
|
188
|
+
severity: unsafe ? "warn" : "ok",
|
|
189
|
+
title: unsafe ? "Auth store has unsafe permissions" : "Auth store permissions OK",
|
|
190
|
+
detail: unsafe ? `chmod 600 ${authFile}` : `Mode: 600`,
|
|
191
|
+
fixable: unsafe,
|
|
192
|
+
fix: async () => {
|
|
193
|
+
await fs_extra.default.chmod(authFile, 384);
|
|
194
|
+
console.log(chalk.default.green(` ✔ Fixed permissions on ${authFile}`));
|
|
195
|
+
}
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
console.log(chalk.default.bold.cyan("\n 🩺 HYPERCLAW DOCTOR\n"));
|
|
200
|
+
let errorCount = 0, warnCount = 0;
|
|
201
|
+
for (const issue of issues) {
|
|
202
|
+
const icon = {
|
|
203
|
+
error: chalk.default.red("✖"),
|
|
204
|
+
warn: chalk.default.yellow("⚠"),
|
|
205
|
+
ok: chalk.default.green("✔")
|
|
206
|
+
}[issue.severity];
|
|
207
|
+
console.log(` ${icon} ${chalk.default.white(issue.title)}`);
|
|
208
|
+
console.log(` ${chalk.default.gray(issue.detail)}`);
|
|
209
|
+
if (issue.fixable && doFix && issue.fix) await issue.fix();
|
|
210
|
+
else if (issue.fixable && !fix) console.log(chalk.default.gray(" Run with --fix to auto-repair"));
|
|
211
|
+
if (issue.severity === "error") errorCount++;
|
|
212
|
+
if (issue.severity === "warn") warnCount++;
|
|
213
|
+
console.log();
|
|
214
|
+
}
|
|
215
|
+
const total = issues.length;
|
|
216
|
+
const okCount = total - errorCount - warnCount;
|
|
217
|
+
console.log(` ${chalk.default.bold("Summary:")} ${chalk.default.green(`${okCount} ok`)} ${chalk.default.yellow(`${warnCount} warnings`)} ${chalk.default.red(`${errorCount} errors`)}`);
|
|
218
|
+
if (errorCount > 0 || warnCount > 0) {
|
|
219
|
+
console.log(chalk.default.gray("\n Run: hyperclaw doctor --fix to auto-repair fixable issues"));
|
|
220
|
+
if (deep) console.log(chalk.default.gray(" Use --deep to scan for extra gateway services (launchd/systemd/schtasks)\n"));
|
|
221
|
+
else console.log();
|
|
222
|
+
} else console.log(chalk.default.green("\n ✔ All checks passed!\n"));
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
//#endregion
|
|
226
|
+
Object.defineProperty(exports, 'runDoctor', {
|
|
227
|
+
enumerable: true,
|
|
228
|
+
get: function () {
|
|
229
|
+
return runDoctor;
|
|
230
|
+
}
|
|
231
|
+
});
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
const require_chunk = require('./chunk-jS-bbMI5.js');
|
|
2
|
+
const require_paths = require('./paths-AIyBxIzm.js');
|
|
3
|
+
const require_paths$1 = require('./paths-DPovhojT.js');
|
|
4
|
+
const chalk = require_chunk.__toESM(require("chalk"));
|
|
5
|
+
const ora = require_chunk.__toESM(require("ora"));
|
|
6
|
+
const fs_extra = require_chunk.__toESM(require("fs-extra"));
|
|
7
|
+
const path = require_chunk.__toESM(require("path"));
|
|
8
|
+
const net = require_chunk.__toESM(require("net"));
|
|
9
|
+
|
|
10
|
+
//#region src/commands/doctor.ts
|
|
11
|
+
require_paths$1.init_paths();
|
|
12
|
+
async function isPortOpen(port) {
|
|
13
|
+
return new Promise((resolve) => {
|
|
14
|
+
const s = new net.default.Socket();
|
|
15
|
+
s.setTimeout(500);
|
|
16
|
+
s.on("connect", () => {
|
|
17
|
+
s.destroy();
|
|
18
|
+
resolve(true);
|
|
19
|
+
});
|
|
20
|
+
s.on("error", () => resolve(false));
|
|
21
|
+
s.on("timeout", () => resolve(false));
|
|
22
|
+
try {
|
|
23
|
+
s.connect(port, "127.0.0.1");
|
|
24
|
+
} catch {
|
|
25
|
+
resolve(false);
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
async function runDoctor(fix = false, opts = {}) {
|
|
30
|
+
const doFix = fix || opts.repair || opts.fix || false;
|
|
31
|
+
const force = opts.force || false;
|
|
32
|
+
const nonInteractive = opts.nonInteractive || opts.yes || false;
|
|
33
|
+
const deep = opts.deep || false;
|
|
34
|
+
const spinner = (0, ora.default)("Running health checks...").start();
|
|
35
|
+
await new Promise((r) => setTimeout(r, 400));
|
|
36
|
+
spinner.stop();
|
|
37
|
+
const configDir = require_paths.getHyperClawDir();
|
|
38
|
+
const configFile = require_paths.getConfigPath();
|
|
39
|
+
const agentsFile = path.default.join(configDir, "AGENTS.md");
|
|
40
|
+
const authFile = path.default.join(configDir, "auth.json");
|
|
41
|
+
const credentialsDir = path.default.join(configDir, "credentials");
|
|
42
|
+
const pairingFile = path.default.join(credentialsDir, "discord-pairing.json");
|
|
43
|
+
let cfg = null;
|
|
44
|
+
try {
|
|
45
|
+
cfg = await fs_extra.default.readJson(configFile);
|
|
46
|
+
} catch {}
|
|
47
|
+
const issues = [];
|
|
48
|
+
if (!cfg) issues.push({
|
|
49
|
+
id: "no-config",
|
|
50
|
+
severity: "error",
|
|
51
|
+
title: "No configuration found",
|
|
52
|
+
detail: "Run: hyperclaw init",
|
|
53
|
+
fixable: false
|
|
54
|
+
});
|
|
55
|
+
else {
|
|
56
|
+
const hasToken = !!cfg.gateway?.authToken;
|
|
57
|
+
issues.push({
|
|
58
|
+
id: "gateway-token",
|
|
59
|
+
severity: hasToken ? "ok" : "warn",
|
|
60
|
+
title: hasToken ? "Gateway auth token set" : "Gateway auth token missing",
|
|
61
|
+
detail: hasToken ? "Token is configured" : "Set a strong token in gateway config",
|
|
62
|
+
fixable: !hasToken,
|
|
63
|
+
fix: async () => {
|
|
64
|
+
const crypto = await import("crypto");
|
|
65
|
+
cfg.gateway = cfg.gateway || {};
|
|
66
|
+
cfg.gateway.authToken = crypto.randomBytes(32).toString("hex");
|
|
67
|
+
fs_extra.default.writeJsonSync(configFile, cfg, { spaces: 2 });
|
|
68
|
+
console.log(chalk.default.green(" ✔ Generated and saved gateway auth token"));
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
const channels = cfg.gateway?.enabledChannels || cfg.channels || [];
|
|
72
|
+
const channelConfigs = cfg.channelConfigs || cfg.channels || {};
|
|
73
|
+
const chList = Array.isArray(channels) ? channels : Object.keys(channelConfigs);
|
|
74
|
+
for (const ch of chList) {
|
|
75
|
+
const chCfg = typeof channelConfigs === "object" && !Array.isArray(channelConfigs) ? channelConfigs[ch] : null;
|
|
76
|
+
const dmPolicy = chCfg?.dmPolicy?.policy ?? (typeof chCfg?.dmPolicy === "string" ? chCfg.dmPolicy : null);
|
|
77
|
+
if (dmPolicy === "open") issues.push({
|
|
78
|
+
id: `dm-open-${ch}`,
|
|
79
|
+
severity: "warn",
|
|
80
|
+
title: `DM policy is "open" on ${ch}`,
|
|
81
|
+
detail: `Anyone can DM your agent on ${ch}. Consider using "pairing" or "allowlist".`,
|
|
82
|
+
fixable: false
|
|
83
|
+
});
|
|
84
|
+
if (dmPolicy === "allowlist") {
|
|
85
|
+
const allowFrom = chCfg?.dmPolicy?.allowFrom ?? chCfg?.allowFrom ?? [];
|
|
86
|
+
const arr = Array.isArray(allowFrom) ? allowFrom : [];
|
|
87
|
+
if (arr.length === 0) issues.push({
|
|
88
|
+
id: `dm-empty-allowlist-${ch}`,
|
|
89
|
+
severity: "error",
|
|
90
|
+
title: `Empty allowlist on ${ch} — DMs will be silently dropped`,
|
|
91
|
+
detail: `channel.${ch}.allowFrom or dmPolicy.allowFrom is empty. Add users or change policy.`,
|
|
92
|
+
fixable: true,
|
|
93
|
+
fix: async () => {
|
|
94
|
+
try {
|
|
95
|
+
const allowFromPath = path.default.join(credentialsDir, `${ch}-allowFrom.json`);
|
|
96
|
+
if (await fs_extra.default.pathExists(allowFromPath)) {
|
|
97
|
+
const af = await fs_extra.default.readJson(allowFromPath);
|
|
98
|
+
const ids = af.senderIds;
|
|
99
|
+
if (ids?.length) {
|
|
100
|
+
cfg.channelConfigs = cfg.channelConfigs || {};
|
|
101
|
+
const existing = cfg.channelConfigs[ch] || {};
|
|
102
|
+
const merged = {
|
|
103
|
+
...existing,
|
|
104
|
+
allowFrom: ids
|
|
105
|
+
};
|
|
106
|
+
if (typeof existing.dmPolicy === "object") merged.dmPolicy = {
|
|
107
|
+
...existing.dmPolicy,
|
|
108
|
+
allowFrom: ids
|
|
109
|
+
};
|
|
110
|
+
cfg.channelConfigs[ch] = merged;
|
|
111
|
+
await fs_extra.default.writeJson(configFile, cfg, { spaces: 2 });
|
|
112
|
+
console.log(chalk.default.green(` ✔ Restored ${ids.length} user(s) from allowFrom store`));
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
} catch {}
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
const hasApiKey = !!cfg.provider?.apiKey;
|
|
121
|
+
const isLocal = cfg.provider?.providerId === "local";
|
|
122
|
+
if (!hasApiKey && !isLocal) issues.push({
|
|
123
|
+
id: "no-api-key",
|
|
124
|
+
severity: "error",
|
|
125
|
+
title: "No AI provider API key configured",
|
|
126
|
+
detail: "Run: hyperclaw config set-key",
|
|
127
|
+
fixable: false
|
|
128
|
+
});
|
|
129
|
+
else issues.push({
|
|
130
|
+
id: "api-key",
|
|
131
|
+
severity: "ok",
|
|
132
|
+
title: "AI provider key configured",
|
|
133
|
+
detail: `Provider: ${cfg.provider?.providerId}`,
|
|
134
|
+
fixable: false
|
|
135
|
+
});
|
|
136
|
+
issues.push({
|
|
137
|
+
id: "agents-md",
|
|
138
|
+
severity: await fs_extra.default.pathExists(agentsFile) ? "ok" : "warn",
|
|
139
|
+
title: await fs_extra.default.pathExists(agentsFile) ? "AGENTS.md exists" : "AGENTS.md missing",
|
|
140
|
+
detail: await fs_extra.default.pathExists(agentsFile) ? agentsFile : "Run: hyperclaw memory init to generate",
|
|
141
|
+
fixable: false
|
|
142
|
+
});
|
|
143
|
+
const port = cfg.gateway?.port || 18789;
|
|
144
|
+
const running = await isPortOpen(port);
|
|
145
|
+
issues.push({
|
|
146
|
+
id: "gateway-running",
|
|
147
|
+
severity: running ? "ok" : "warn",
|
|
148
|
+
title: running ? `Gateway running on port ${port}` : `Gateway not running on port ${port}`,
|
|
149
|
+
detail: running ? `ws://127.0.0.1:${port}` : "Run: hyperclaw daemon start",
|
|
150
|
+
fixable: false
|
|
151
|
+
});
|
|
152
|
+
if (await fs_extra.default.pathExists(configFile)) {
|
|
153
|
+
const stat = await fs_extra.default.stat(configFile);
|
|
154
|
+
const unsafe = (stat.mode & 63) !== 0;
|
|
155
|
+
if (unsafe) issues.push({
|
|
156
|
+
id: "config-permissions",
|
|
157
|
+
severity: "warn",
|
|
158
|
+
title: "Config file has unsafe permissions",
|
|
159
|
+
detail: `chmod 600 ${configFile}`,
|
|
160
|
+
fixable: true,
|
|
161
|
+
fix: async () => {
|
|
162
|
+
await fs_extra.default.chmod(configFile, 384);
|
|
163
|
+
console.log(chalk.default.green(` ✔ Fixed permissions on ${configFile}`));
|
|
164
|
+
}
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
const stateWritable = await fs_extra.default.pathExists(configDir) && (await fs_extra.default.stat(configDir).catch(() => null))?.isDirectory?.();
|
|
168
|
+
issues.push({
|
|
169
|
+
id: "state-dir",
|
|
170
|
+
severity: stateWritable ? "ok" : "error",
|
|
171
|
+
title: stateWritable ? "State directory OK" : "State directory missing or not writable",
|
|
172
|
+
detail: stateWritable ? configDir : `Ensure ${configDir} exists and is writable`,
|
|
173
|
+
fixable: !stateWritable,
|
|
174
|
+
fix: async () => {
|
|
175
|
+
await fs_extra.default.ensureDir(configDir);
|
|
176
|
+
console.log(chalk.default.green(` ✔ Created state directory: ${configDir}`));
|
|
177
|
+
}
|
|
178
|
+
});
|
|
179
|
+
if (await fs_extra.default.pathExists(authFile)) {
|
|
180
|
+
const stat = await fs_extra.default.stat(authFile);
|
|
181
|
+
const unsafe = (stat.mode & 63) !== 0;
|
|
182
|
+
issues.push({
|
|
183
|
+
id: "auth-permissions",
|
|
184
|
+
severity: unsafe ? "warn" : "ok",
|
|
185
|
+
title: unsafe ? "Auth store has unsafe permissions" : "Auth store permissions OK",
|
|
186
|
+
detail: unsafe ? `chmod 600 ${authFile}` : `Mode: 600`,
|
|
187
|
+
fixable: unsafe,
|
|
188
|
+
fix: async () => {
|
|
189
|
+
await fs_extra.default.chmod(authFile, 384);
|
|
190
|
+
console.log(chalk.default.green(` ✔ Fixed permissions on ${authFile}`));
|
|
191
|
+
}
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
console.log(chalk.default.bold.cyan("\n 🩺 HYPERCLAW DOCTOR\n"));
|
|
196
|
+
let errorCount = 0, warnCount = 0;
|
|
197
|
+
for (const issue of issues) {
|
|
198
|
+
const icon = {
|
|
199
|
+
error: chalk.default.red("✖"),
|
|
200
|
+
warn: chalk.default.yellow("⚠"),
|
|
201
|
+
ok: chalk.default.green("✔")
|
|
202
|
+
}[issue.severity];
|
|
203
|
+
console.log(` ${icon} ${chalk.default.white(issue.title)}`);
|
|
204
|
+
console.log(` ${chalk.default.gray(issue.detail)}`);
|
|
205
|
+
if (issue.fixable && doFix && issue.fix) await issue.fix();
|
|
206
|
+
else if (issue.fixable && !fix) console.log(chalk.default.gray(" Run with --fix to auto-repair"));
|
|
207
|
+
if (issue.severity === "error") errorCount++;
|
|
208
|
+
if (issue.severity === "warn") warnCount++;
|
|
209
|
+
console.log();
|
|
210
|
+
}
|
|
211
|
+
const total = issues.length;
|
|
212
|
+
const okCount = total - errorCount - warnCount;
|
|
213
|
+
console.log(` ${chalk.default.bold("Summary:")} ${chalk.default.green(`${okCount} ok`)} ${chalk.default.yellow(`${warnCount} warnings`)} ${chalk.default.red(`${errorCount} errors`)}`);
|
|
214
|
+
if (errorCount > 0 || warnCount > 0) {
|
|
215
|
+
console.log(chalk.default.gray("\n Run: hyperclaw doctor --fix to auto-repair fixable issues"));
|
|
216
|
+
if (deep) console.log(chalk.default.gray(" Use --deep to scan for extra gateway services (launchd/systemd/schtasks)\n"));
|
|
217
|
+
else console.log();
|
|
218
|
+
} else console.log(chalk.default.green("\n ✔ All checks passed!\n"));
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
//#endregion
|
|
222
|
+
Object.defineProperty(exports, 'runDoctor', {
|
|
223
|
+
enumerable: true,
|
|
224
|
+
get: function () {
|
|
225
|
+
return runDoctor;
|
|
226
|
+
}
|
|
227
|
+
});
|