hyperclaw 5.4.0 → 5.4.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 +1 -0
- package/dist/a2ui-protocol-CUqdJGh7.js +75 -0
- package/dist/a2ui-protocol-CibzbTxL.js +75 -0
- package/dist/a2ui-protocol-Dtb8zlog.js +75 -0
- package/dist/a2ui-protocol-ORP2Etw0.js +75 -0
- package/dist/a2ui-protocol-whRZHdBk.js +75 -0
- package/dist/abort-controller-B55O1IgK.js +47995 -0
- package/dist/agents-routing-Ai2BQVpU.js +7 -0
- package/dist/agents-routing-B0D0vcp5.js +424 -0
- package/dist/agents-routing-B0RBl1B8.js +424 -0
- package/dist/agents-routing-BC6GndVe.js +7 -0
- package/dist/agents-routing-BSUaOpce.js +7 -0
- package/dist/agents-routing-C4PVN8G6.js +7 -0
- package/dist/agents-routing-CyFBHvyk.js +424 -0
- package/dist/agents-routing-Dcr29-JV.js +424 -0
- package/dist/agents-routing-DdpszaMx.js +7 -0
- package/dist/agents-routing-EwzORQQv.js +424 -0
- package/dist/agents-routing-Fd-uQ4R_.js +7 -0
- package/dist/agents-routing-eLjVYBAk.js +424 -0
- package/dist/api-key-validation-BANgbsfO.js +66 -0
- package/dist/api-key-validation-Bnz-0MMK.js +66 -0
- package/dist/api-key-validation-D_fMCaO5.js +66 -0
- package/dist/api-key-validation-Db7rG3JU.js +66 -0
- package/dist/api-key-validation-DrMrLEa0.js +66 -0
- package/dist/api-keys-guide-B6AJ1V5D.js +149 -0
- package/dist/api-keys-guide-C75JQOdH.js +149 -0
- package/dist/api-keys-guide-CFJPrgsL.js +149 -0
- package/dist/api-keys-guide-DDz08BJQ.js +149 -0
- package/dist/api-keys-guide-DmKF7tB-.js +149 -0
- package/dist/audit-BLMB8qp7.js +445 -0
- package/dist/audit-Cb2TvqYZ.js +445 -0
- package/dist/audit-D7koAKvj.js +445 -0
- package/dist/audit-Q-Uy5nem.js +445 -0
- package/dist/audit-xP_175jB.js +445 -0
- package/dist/backup-7l3iovkX.js +86 -0
- package/dist/backup-BKLTHh62.js +86 -0
- package/dist/backup-CspxXk78.js +86 -0
- package/dist/backup-CtHJEqGr.js +86 -0
- package/dist/backup-D8dFYDXV.js +86 -0
- package/dist/banner-CZ2BfvQq.js +143 -0
- package/dist/banner-CjTRWmks.js +7 -0
- package/dist/banner-DYzQ8cCb.js +143 -0
- package/dist/banner-Dpygks0H.js +143 -0
- package/dist/banner-ZX1WLr44.js +7 -0
- package/dist/banner-jW84OrYg.js +7 -0
- package/dist/bounty-tools-CCwY61YO.js +211 -0
- package/dist/bounty-tools-Cq-oC9gk.js +211 -0
- package/dist/bounty-tools-DZ-WtRdE.js +211 -0
- package/dist/bounty-tools-DhpmjF5Y.js +211 -0
- package/dist/bounty-tools-NGuBWI55.js +211 -0
- package/dist/browser-tools-5Fl1hP_2.js +5 -0
- package/dist/browser-tools-Ay-wU_a4.js +5 -0
- package/dist/browser-tools-BMgBB2fK.js +179 -0
- package/dist/browser-tools-kcViDwk5.js +179 -0
- package/dist/chat-BUa1oGqj.js +528 -0
- package/dist/chat-CJa0ph8c.js +528 -0
- package/dist/chat-CKnfxa1-.js +528 -0
- package/dist/chat-CQKCIrIY.js +528 -0
- package/dist/chat-CiuT-GTs.js +528 -0
- package/dist/chat-DfI8uOzF.js +528 -0
- package/dist/chat-Dz5rmUSs.js +528 -0
- package/dist/chat-RTmX1F16.js +528 -0
- package/dist/chat-npW_ZOmo.js +528 -0
- package/dist/claw-tasks-Cio1Q7eA.js +80 -0
- package/dist/claw-tasks-Dq38PrL5.js +80 -0
- package/dist/claw-tasks-DzxNWVcz.js +80 -0
- package/dist/claw-tasks-L7vQSGlt.js +80 -0
- package/dist/claw-tasks-dndWneZW.js +80 -0
- package/dist/config-B-W-Mz4X.js +7 -0
- package/dist/config-BAwkTUJC.js +261 -0
- package/dist/config-BzK_Xl4Y.js +261 -0
- package/dist/config-CYPw2v4l.js +261 -0
- package/dist/config-ClsdlpXc.js +261 -0
- package/dist/config-DN9fdLL3.js +261 -0
- package/dist/config-Dm394B6X.js +7 -0
- package/dist/config-FejpHHTz.js +261 -0
- package/dist/config-SiLqEezw.js +7 -0
- package/dist/config-Tq_GJHf7.js +7 -0
- package/dist/config-n4qy5jIy.js +7 -0
- package/dist/config-qJUYRMzx.js +7 -0
- package/dist/connector-BYPxgmsD.js +312 -0
- package/dist/connector-CwT7KZm2.js +309 -0
- package/dist/connector-DX4k-lGd.js +442 -0
- package/dist/cost-tracker-C2q5zKic.js +103 -0
- package/dist/cost-tracker-CsRQAOEr.js +103 -0
- package/dist/cost-tracker-DAXWN5YT.js +103 -0
- package/dist/cost-tracker-bySvehH6.js +103 -0
- package/dist/cost-tracker-x9E8VKtk.js +103 -0
- package/dist/credentials-store-BAW87r6f.js +7 -0
- package/dist/credentials-store-BHtk7_H_.js +7 -0
- package/dist/credentials-store-CESgFvFU.js +89 -0
- package/dist/credentials-store-CR4WSDGl.js +7 -0
- package/dist/credentials-store-CXq4kZub.js +89 -0
- package/dist/credentials-store-DUp8dtaS.js +89 -0
- package/dist/credentials-store-Ddhgmbpz.js +7 -0
- package/dist/credentials-store-hiSga8qn.js +89 -0
- package/dist/credentials-store-kLdrmqSt.js +7 -0
- package/dist/credentials-store-onL1tYct.js +89 -0
- package/dist/cron-tasks-BFsaCKxE.js +89 -0
- package/dist/cron-tasks-BelA2aUW.js +89 -0
- package/dist/cron-tasks-CF4MJoIU.js +89 -0
- package/dist/cron-tasks-D1T9fWAb.js +89 -0
- package/dist/cron-tasks-f_ieXSG2.js +89 -0
- package/dist/daemon-ApB1nMs2.js +421 -0
- package/dist/daemon-B2ghXB-I.js +7 -0
- package/dist/daemon-BTYhQvD_.js +7 -0
- package/dist/daemon-BldYSrDj.js +421 -0
- package/dist/daemon-BoaFnmdF.js +421 -0
- package/dist/daemon-BqTcxMZe.js +7 -0
- package/dist/daemon-BrHxr4ut.js +421 -0
- package/dist/daemon-BzdeLgON.js +421 -0
- package/dist/daemon-BzqWIC4v.js +7 -0
- package/dist/daemon-C3OczPR1.js +7 -0
- package/dist/daemon-CivMFYkD.js +7 -0
- package/dist/daemon-D57KIIA3.js +421 -0
- package/dist/daemon-D8uyH9et.js +7 -0
- package/dist/daemon-DBTtYx6E.js +421 -0
- package/dist/daemon-DBXFUMue.js +421 -0
- package/dist/daemon-srcdhzUG.js +7 -0
- package/dist/delivery-BURWi8wu.js +4 -0
- package/dist/delivery-Bt0xW6L9.js +4 -0
- package/dist/delivery-C2sAERN7.js +4 -0
- package/dist/delivery-CF2Q4hb1.js +95 -0
- package/dist/delivery-CfMljOwk.js +95 -0
- package/dist/delivery-DP0d4_A4.js +95 -0
- package/dist/delivery-DXYt4aMO.js +4 -0
- package/dist/delivery-DXxP2UL4.js +4 -0
- package/dist/delivery-jT2UIDlU.js +95 -0
- package/dist/delivery-kZ2mVkU5.js +95 -0
- package/dist/destructive-gate-5LYh6brt.js +116 -0
- package/dist/destructive-gate-B_hNKtu6.js +116 -0
- package/dist/destructive-gate-C1ny9ek2.js +116 -0
- package/dist/destructive-gate-DvxPSDMR.js +116 -0
- package/dist/destructive-gate-Qd2y7x1B.js +116 -0
- package/dist/dist-B1qvBUax.js +30541 -0
- package/dist/engine-B-JvIt_Y.js +7 -0
- package/dist/engine-BBJlKpMP.js +7 -0
- package/dist/engine-BGZnBZ4m.js +7 -0
- package/dist/engine-BNygJfCo.js +335 -0
- package/dist/engine-BTSXJNba.js +346 -0
- package/dist/engine-C7LyH310.js +353 -0
- package/dist/engine-C_nC_Ioe.js +351 -0
- package/dist/engine-DB4MBzki.js +7 -0
- package/dist/engine-DCtJSbKU.js +7 -0
- package/dist/engine-DPi9fhMl.js +332 -0
- package/dist/engine-DeaqDcaT.js +7 -0
- package/dist/engine-DuvXJrUP.js +335 -0
- package/dist/engine-HkyTC_xl.js +332 -0
- package/dist/engine-JysunhPR.js +7 -0
- package/dist/engine-MzEUw7qb.js +7 -0
- package/dist/engine-j9Yaqt_-.js +332 -0
- package/dist/env-resolve--MaE2kFF.js +167 -0
- package/dist/env-resolve-BYWG94tK.js +11 -0
- package/dist/env-resolve-Bop7KbNq.js +167 -0
- package/dist/env-resolve-Buos635Y.js +167 -0
- package/dist/env-resolve-C0R8R7pb.js +167 -0
- package/dist/env-resolve-D3dP1-Xt.js +11 -0
- package/dist/env-resolve-Dr-KfTtw.js +11 -0
- package/dist/env-resolve-DvsbhPKl.js +11 -0
- package/dist/env-resolve-NNM3F6Eo.js +167 -0
- package/dist/env-resolve-dTjn-g8X.js +11 -0
- package/dist/extraction-tools-Bh5F0ENP.js +91 -0
- package/dist/extraction-tools-BjzXD9LW.js +5 -0
- package/dist/extraction-tools-D1lrDYhe.js +5 -0
- package/dist/extraction-tools-FBwtT2Bx.js +91 -0
- package/dist/fileFromPath-CodL6KXh.js +85 -0
- package/dist/gmail-watch-setup--eQ8raeb.js +42 -0
- package/dist/gmail-watch-setup-9t14gy1B.js +42 -0
- package/dist/gmail-watch-setup-B9fx_OLg.js +42 -0
- package/dist/gmail-watch-setup-BzbG0ICM.js +42 -0
- package/dist/gmail-watch-setup-DP3kDRx1.js +42 -0
- package/dist/heartbeat-engine-5iOlL7Dj.js +89 -0
- package/dist/heartbeat-engine-B9bhAHNi.js +89 -0
- package/dist/heartbeat-engine-Bu4q18GH.js +89 -0
- package/dist/heartbeat-engine-CF_JjNJ4.js +89 -0
- package/dist/heartbeat-engine-CLADYZxE.js +89 -0
- package/dist/hub-CZeGrS20.js +6 -0
- package/dist/hub-DAkEVTEy.js +545 -0
- package/dist/hyperclawbot-BEm8_87h.js +516 -0
- package/dist/hyperclawbot-CNVUtvYC.js +516 -0
- package/dist/hyperclawbot-D5ofLNgm.js +516 -0
- package/dist/hyperclawbot-D61zVMyQ.js +516 -0
- package/dist/hyperclawbot-DR6BgI_d.js +516 -0
- package/dist/hyperclawbot-DwScttSx.js +516 -0
- package/dist/hyperclawbot-hZv4pde0.js +516 -0
- package/dist/hyperclawbot-v65eL2U0.js +516 -0
- package/dist/inference-BEvs7s3c.js +2854 -0
- package/dist/inference-C4b9YqXk.js +8 -0
- package/dist/inference-C874-2MI.js +8 -0
- package/dist/inference-CRF6HyyH.js +2854 -0
- package/dist/inference-CfhTACI8.js +2854 -0
- package/dist/inference-DCSz6Sb1.js +2880 -0
- package/dist/inference-DGsy36Ru.js +8 -0
- package/dist/inference-Da7Hw4J3.js +8 -0
- package/dist/inference-DhJ-SHZn.js +8 -0
- package/dist/inference-K7Jrnzre.js +2854 -0
- package/dist/isFile-CSxoSB8X.js +2274 -0
- package/dist/knowledge-graph-BdsJ5KEL.js +134 -0
- package/dist/knowledge-graph-BiIvoxPt.js +134 -0
- package/dist/knowledge-graph-CFRBepzr.js +134 -0
- package/dist/knowledge-graph-CeDeahui.js +134 -0
- package/dist/knowledge-graph-DoYFZnUr.js +134 -0
- package/dist/loader-C2qtNbtF.js +6 -0
- package/dist/loader-D6yjBYo4.js +410 -0
- package/dist/loader-DBO6yRNh.js +6 -0
- package/dist/loader-DMMb9emn.js +410 -0
- package/dist/loader-DUhmG3V9.js +410 -0
- package/dist/loader-Dl8LNycw.js +6 -0
- package/dist/loader-JktrmJOG.js +6 -0
- package/dist/loader-UpOYxgZv.js +6 -0
- package/dist/loader-hXv2mZjK.js +410 -0
- package/dist/loader-nDBcv3Tm.js +410 -0
- package/dist/logger-BD316YbA.js +86 -0
- package/dist/logger-BnXZkfsp.js +86 -0
- package/dist/logger-CmphFNmW.js +86 -0
- package/dist/logger-DkHzhh56.js +86 -0
- package/dist/logger-Oty9sC13.js +86 -0
- package/dist/manager-3-q8zuAW.js +250 -0
- package/dist/manager-BIc6zzZV.js +250 -0
- package/dist/manager-BkMzc-EJ.js +250 -0
- package/dist/manager-Bq5LApdR.js +6 -0
- package/dist/manager-BwobWy0l.js +120 -0
- package/dist/manager-CNgdJunf.js +250 -0
- package/dist/manager-CozyZSDG.js +250 -0
- package/dist/manager-D4mDWXph.js +120 -0
- package/dist/manager-DuS-WQhZ.js +120 -0
- package/dist/manager-Dz2eKYqo.js +116 -0
- package/dist/manager-R0TlRMZy.js +120 -0
- package/dist/manager-aJfY7rt6.js +120 -0
- package/dist/mcp-BH7HtOQ8.js +142 -0
- package/dist/mcp-CAJSA_ee.js +142 -0
- package/dist/mcp-CD-iIQa2.js +142 -0
- package/dist/mcp-CI2F3m8G.js +142 -0
- package/dist/mcp-DGo37Ifb.js +142 -0
- package/dist/mcp-loader-C-21ynRH.js +93 -0
- package/dist/mcp-loader-Ct1NQKnX.js +93 -0
- package/dist/mcp-loader-D1T6UX73.js +93 -0
- package/dist/mcp-loader-DJk6MEof.js +93 -0
- package/dist/mcp-loader-DdXvU63s.js +93 -0
- package/dist/mcp-loader-Di7n__ta.js +93 -0
- package/dist/mcp-loader-gMliiJ7R.js +93 -0
- package/dist/memory-CyonlkTy.js +6 -0
- package/dist/memory-DPSWQBc0.js +276 -0
- package/dist/memory-auto-B0QOqaUD.js +306 -0
- package/dist/memory-auto-BSxYJugl.js +5 -0
- package/dist/memory-auto-BVCJeTwd.js +306 -0
- package/dist/memory-auto-CcFRxMj-.js +306 -0
- package/dist/memory-auto-CifT5aj_.js +5 -0
- package/dist/memory-auto-Cp2Jwx3Y.js +306 -0
- package/dist/memory-auto-DXKe2ayf.js +5 -0
- package/dist/memory-auto-DjK_D8CA.js +306 -0
- package/dist/memory-auto-N57dp4Do.js +5 -0
- package/dist/memory-auto-n0kOcU7F.js +5 -0
- package/dist/memory-integration-D2RvZ-MB.js +91 -0
- package/dist/memory-integration-D8shLJwp.js +91 -0
- package/dist/memory-integration-DLmzJ62L.js +91 -0
- package/dist/memory-integration-DMXDbMIL.js +91 -0
- package/dist/memory-integration-Dgr-mjue.js +91 -0
- package/dist/moltbook-CIeOshK6.js +81 -0
- package/dist/moltbook-CX5XWn06.js +81 -0
- package/dist/moltbook-DUfiE4NY.js +81 -0
- package/dist/moltbook-DvV6GFFL.js +81 -0
- package/dist/moltbook-YEiNI8Cm.js +81 -0
- package/dist/multi-agent-tools-jzfvT4zP.js +87 -0
- package/dist/multimodal-zZdwqISl.js +77 -0
- package/dist/node-BYrxELx2.js +251 -0
- package/dist/node-CLWgPlAk.js +251 -0
- package/dist/node-Czz8Y85D.js +251 -0
- package/dist/node-DFKhz7Zn.js +251 -0
- package/dist/node-Du2H2Ddi.js +226 -0
- package/dist/node-domexception-v89b0Nwz.js +21 -0
- package/dist/node-pending-queue-CIMXPU6K.js +32 -0
- package/dist/node-pending-queue-DUXCbYkp.js +32 -0
- package/dist/node-pending-queue-DZp7cdfo.js +32 -0
- package/dist/node-pending-queue-iYpoWqxe.js +32 -0
- package/dist/nodes-registry-BTy7Sc7D.js +52 -0
- package/dist/nodes-registry-BYjmmJBU.js +52 -0
- package/dist/nodes-registry-BeiEjd9U.js +52 -0
- package/dist/nodes-registry-C8GeEGq0.js +52 -0
- package/dist/nodes-registry-Du6Klz0l.js +52 -0
- package/dist/oauth-flow-BA0yMrHx.js +148 -0
- package/dist/oauth-flow-C4QSMsbl.js +148 -0
- package/dist/oauth-flow-CIuDBDsp.js +148 -0
- package/dist/oauth-flow-CZOsvU1v.js +148 -0
- package/dist/oauth-flow-CniM4jlJ.js +148 -0
- package/dist/oauth-provider-BA4GVFKg.js +111 -0
- package/dist/oauth-provider-Bnul5A_Z.js +111 -0
- package/dist/oauth-provider-Dk-6BmGL.js +111 -0
- package/dist/oauth-provider-DqPXPiiC.js +111 -0
- package/dist/oauth-provider-MEgHjij2.js +111 -0
- package/dist/observability-0spm7MPz.js +89 -0
- package/dist/observability-B3dDQSdI.js +89 -0
- package/dist/observability-BOMYgHUh.js +89 -0
- package/dist/observability-CDqHr-_o.js +89 -0
- package/dist/observability-ah2a7sh1.js +89 -0
- package/dist/onboard-BJ78s3NT.js +3854 -0
- package/dist/onboard-BnyHie0K.js +14 -0
- package/dist/onboard-C55YXd_e.js +14 -0
- package/dist/onboard-CNnm4yYp.js +3841 -0
- package/dist/onboard-CXSVPnP7.js +3854 -0
- package/dist/onboard-CwvXXOR1.js +14 -0
- package/dist/onboard-CxlIsNhX.js +3854 -0
- package/dist/onboard-D-5gWzH0.js +3854 -0
- package/dist/onboard-D9pjgaVR.js +3854 -0
- package/dist/onboard-DPmufMqX.js +14 -0
- package/dist/onboard-F9lKA2ie.js +14 -0
- package/dist/onboard-UTQXzlPD.js +3854 -0
- package/dist/onboard-UhWVcTap.js +14 -0
- package/dist/onboard-W5DsxVf2.js +3854 -0
- package/dist/onboard-YszvVNgS.js +14 -0
- package/dist/onboard-hK098kjl.js +14 -0
- package/dist/onboard-pLDBUBpO.js +14 -0
- package/dist/onboard-zISipu-l.js +3854 -0
- package/dist/openai-CrdtuLxw.js +6292 -0
- package/dist/orchestrator-5M-6MB7r.js +6 -0
- package/dist/orchestrator-B3BjP1dy.js +6 -0
- package/dist/orchestrator-BZS62iDS.js +6 -0
- package/dist/orchestrator-C0t11xj7.js +189 -0
- package/dist/orchestrator-CA4eKeGn.js +189 -0
- package/dist/orchestrator-CNxTIlOK.js +189 -0
- package/dist/orchestrator-CTMbjgH_.js +6 -0
- package/dist/orchestrator-Cg1vgEHb.js +6 -0
- package/dist/orchestrator-Crn4fgbI.js +189 -0
- package/dist/orchestrator-Cs6s-QmS.js +189 -0
- package/dist/orchestrator-DGqwsLmO.js +189 -0
- package/dist/orchestrator-DV5t6wQ0.js +6 -0
- package/dist/orchestrator-UUHsFKiH.js +6 -0
- package/dist/orchestrator-eT0ZL4yl.js +6 -0
- package/dist/orchestrator-oa7HbCnF.js +189 -0
- package/dist/orchestrator-tUKag7pG.js +189 -0
- package/dist/osint-47yIek6w.js +283 -0
- package/dist/osint-BJvOCmVk.js +283 -0
- package/dist/osint-CK9xVUUm.js +283 -0
- package/dist/osint-D6vQXCWh.js +283 -0
- package/dist/osint-DLYZsp1k.js +283 -0
- package/dist/osint-c-xDjLb-.js +283 -0
- package/dist/osint-cAAdO-cx.js +283 -0
- package/dist/osint-chat-B0lc0Y6r.js +789 -0
- package/dist/osint-chat-BJgnkFDm.js +789 -0
- package/dist/osint-chat-BUhiSpf9.js +789 -0
- package/dist/osint-chat-C-9FVAkU.js +789 -0
- package/dist/osint-chat-C09BvbGy.js +789 -0
- package/dist/osint-chat-CWET8Fno.js +789 -0
- package/dist/osint-chat-Cgdzg3lh.js +789 -0
- package/dist/osint-chat-zdeaaw7a.js +789 -0
- package/dist/osint-e6oBrtlj.js +283 -0
- package/dist/pc-access-BCaF5mRs.js +858 -0
- package/dist/pc-access-BOcXappE.js +858 -0
- package/dist/pc-access-BgZNmAdB.js +8 -0
- package/dist/pc-access-CAoM6WN4.js +8 -0
- package/dist/pc-access-D2HdoziZ.js +8 -0
- package/dist/pc-access-D4g0fjQb.js +858 -0
- package/dist/pending-approval-CEu_-DGQ.js +22 -0
- package/dist/pending-approval-CJPyt8U5.js +22 -0
- package/dist/pending-approval-CzMNCTfZ.js +22 -0
- package/dist/pending-approval-DaXi7otO.js +22 -0
- package/dist/pending-approval-KcyeiifE.js +22 -0
- package/dist/providers-BfW-fgpw.js +5 -0
- package/dist/providers-Cs1h_TJA.js +1137 -0
- package/dist/providers-DrZP0NeR.js +5 -0
- package/dist/providers-dHhpJo9j.js +1120 -0
- package/dist/reminders-store-B58LldEG.js +58 -0
- package/dist/reminders-store-C4gWckLa.js +58 -0
- package/dist/reminders-store-DT0o6a60.js +58 -0
- package/dist/renderer-B8c22rbg.js +228 -0
- package/dist/renderer-BS0ETL20.js +228 -0
- package/dist/renderer-B_ew6jRs.js +228 -0
- package/dist/renderer-Cg3c41A5.js +228 -0
- package/dist/renderer-UoPcgaAd.js +228 -0
- package/dist/rules-BAYXiKiJ.js +106 -0
- package/dist/rules-D0v5nuSE.js +106 -0
- package/dist/rules-DCKPgwLb.js +106 -0
- package/dist/rules-Zn9j4PnO.js +106 -0
- package/dist/rules-oAgOSPHC.js +106 -0
- package/dist/run-main.js +492 -131
- package/dist/runner-B5uo6C5q.js +1310 -0
- package/dist/runner-BaZ2V27T.js +1307 -0
- package/dist/runner-Bgl7UTbV.js +1307 -0
- package/dist/runner-DOKp3-v5.js +1307 -0
- package/dist/runner-voYdfM_f.js +1307 -0
- package/dist/search-tools-BBwMa8VX.js +107 -0
- package/dist/search-tools-CEUOO9Jf.js +107 -0
- package/dist/search-tools-DXVuVXW_.js +107 -0
- package/dist/search-tools-VHP3xVyC.js +107 -0
- package/dist/search-tools-w_zT7-dr.js +107 -0
- package/dist/server-BAdJwMM9.js +4 -0
- package/dist/server-BD9FLc7S.js +1384 -0
- package/dist/server-BJkDIs8Z.js +1467 -0
- package/dist/server-BlqWBbS7.js +4 -0
- package/dist/server-BzwPvTbD.js +1447 -0
- package/dist/server-CBvSfG4w.js +4 -0
- package/dist/server-CbNBcB41.js +4 -0
- package/dist/server-CtFoXM88.js +4 -0
- package/dist/server-DPTXaJJF.js +4 -0
- package/dist/server-DVxVLu_G.js +1467 -0
- package/dist/server-DZj6Nobr.js +1467 -0
- package/dist/server-Diu80smx.js +4 -0
- package/dist/server-DszV63tu.js +4 -0
- package/dist/server-Dv2zHHy-.js +1447 -0
- package/dist/server-MDmdWHob.js +1447 -0
- package/dist/server-N9LnLQCS.js +1447 -0
- package/dist/session-store-C6Otslf9.js +5 -0
- package/dist/session-store-Cmfnvuw9.js +141 -0
- package/dist/session-store-CuR9DgRf.js +5 -0
- package/dist/session-store-Cx1RMBhS.js +5 -0
- package/dist/session-store-DPPHkJBn.js +5 -0
- package/dist/session-store-DWLCWQFS.js +141 -0
- package/dist/session-store-qGufR_m5.js +141 -0
- package/dist/session-store-sUpA509O.js +141 -0
- package/dist/sessions-tools-9Z8TtdmP.js +5 -0
- package/dist/sessions-tools-BAZnoQLp.js +95 -0
- package/dist/sessions-tools-Bb_zF947.js +95 -0
- package/dist/sessions-tools-ClrKqLII.js +131 -0
- package/dist/sessions-tools-DFe23ZDD.js +5 -0
- package/dist/sessions-tools-JHSZ6Bns.js +5 -0
- package/dist/sessions-tools-TsRdeFb7.js +95 -0
- package/dist/sessions-tools-nYP3Agfs.js +5 -0
- package/dist/skill-loader-9jg876RH.js +160 -0
- package/dist/skill-loader-CM4KWQ7_.js +160 -0
- package/dist/skill-loader-CS3OP4Lr.js +160 -0
- package/dist/skill-loader-CnJDLNbY.js +7 -0
- package/dist/skill-loader-DRLgt5V2.js +160 -0
- package/dist/skill-loader-DVpEgYV2.js +7 -0
- package/dist/skill-loader-Df5T_UFl.js +7 -0
- package/dist/skill-loader-DxE-gZkT.js +7 -0
- package/dist/skill-runtime-8Xh5874w.js +104 -0
- package/dist/skill-runtime-B3aUdWKh.js +104 -0
- package/dist/skill-runtime-BKyhYvpW.js +5 -0
- package/dist/skill-runtime-BLkXA1mO.js +104 -0
- package/dist/skill-runtime-BMk-h6Dl.js +5 -0
- package/dist/skill-runtime-BP0kZfmM.js +5 -0
- package/dist/skill-runtime-BaTX-RGy.js +5 -0
- package/dist/skill-runtime-CB9tnc-P.js +104 -0
- package/dist/skill-runtime-CLK5HTVE.js +5 -0
- package/dist/skill-runtime-COyc3Bci.js +104 -0
- package/dist/skill-runtime-CvDXX7wN.js +5 -0
- package/dist/skill-runtime-D4REZnhY.js +104 -0
- package/dist/skill-runtime-D6-rGzX1.js +104 -0
- package/dist/skill-runtime-DQRi9sIf.js +5 -0
- package/dist/skill-runtime-DRd56NWK.js +104 -0
- package/dist/skill-runtime-Dej1Yr5V.js +5 -0
- package/dist/src-6dmkVQGq.js +63 -0
- package/dist/src-7yBXPAs6.js +315 -0
- package/dist/src-9GyYED0T.js +63 -0
- package/dist/src-B9L6qb-Z.js +462 -0
- package/dist/src-BEjIVOmq.js +63 -0
- package/dist/src-BOnuFlI4.js +23 -0
- package/dist/src-BY3On_zO.js +462 -0
- package/dist/src-BdgKAlMQ.js +20 -0
- package/dist/src-BkEtHLLy.js +462 -0
- package/dist/src-C52A3OwC.js +301 -0
- package/dist/src-C8cbfjat.js +173 -0
- package/dist/src-CDeWGebw.js +315 -0
- package/dist/src-CNAVUFC6.js +462 -0
- package/dist/src-CQ2lZvdF.js +462 -0
- package/dist/src-Cdwn9xpG.js +462 -0
- package/dist/src-CyCLoqIP.js +63 -0
- package/dist/src-D-OND_62.js +301 -0
- package/dist/src-DB6dPsbY.js +63 -0
- package/dist/src-DE4mH0BB.js +63 -0
- package/dist/src-DFo8lVfV.js +300 -0
- package/dist/src-DJbpP4Gs.js +462 -0
- package/dist/src-DPfnArdr.js +300 -0
- package/dist/src-DTft7Qvt.js +63 -0
- package/dist/src-DgvFah8g.js +153 -0
- package/dist/src-TYvV_oFO.js +63 -0
- package/dist/src-krHV0uVj.js +315 -0
- package/dist/src-lltU5gkh.js +20 -0
- package/dist/src-tF0sBtr3.js +462 -0
- package/dist/sub-agent-tools-BwOxHu6f.js +39 -0
- package/dist/sub-agent-tools-CE8pVUdb.js +39 -0
- package/dist/sub-agent-tools-CJVEIF1F.js +39 -0
- package/dist/sub-agent-tools-CQWNfYn_.js +39 -0
- package/dist/sub-agent-tools-CViiqebO.js +39 -0
- package/dist/sub-agent-tools-DgT4jUHC.js +39 -0
- package/dist/sub-agent-tools-Lbin_4S3.js +39 -0
- package/dist/sub-agent-tools-f4X1M-li.js +39 -0
- package/dist/tool-policy-1EBdJkSG.js +190 -0
- package/dist/tool-policy-B1bL0X-E.js +189 -0
- package/dist/tool-policy-CfWEnRxy.js +190 -0
- package/dist/tool-policy-NLbucl5-.js +189 -0
- package/dist/tool-policy-yNVTLNDY.js +189 -0
- package/dist/tts-elevenlabs-Bk24wQ2V.js +64 -0
- package/dist/tts-elevenlabs-CCeOqqrh.js +64 -0
- package/dist/tts-elevenlabs-CHrJZuNW.js +64 -0
- package/dist/tts-elevenlabs-DHqQsqMz.js +64 -0
- package/dist/tts-elevenlabs-TUKPkSV2.js +64 -0
- package/dist/vision-BMRKyu3c.js +167 -0
- package/dist/vision-CW1YCKed.js +167 -0
- package/dist/vision-DPLmrwUA.js +167 -0
- package/dist/vision-Q4EOcBS6.js +167 -0
- package/dist/vision-XyAGO5La.js +167 -0
- package/dist/vision-tools-B5DNR28M.js +5 -0
- package/dist/vision-tools-CC9HSuvN.js +51 -0
- package/dist/vision-tools-Ca3OhtdX.js +51 -0
- package/dist/vision-tools-CpU2fSRv.js +51 -0
- package/dist/vision-tools-Ct52djW8.js +51 -0
- package/dist/vision-tools-DF7N2DDI.js +5 -0
- package/dist/vision-tools-DVYx9-Jw.js +5 -0
- package/dist/vision-tools-DyP6lRA5.js +5 -0
- package/dist/vision-tools-RIVKEUeY.js +5 -0
- package/dist/vision-tools-kYb3effk.js +51 -0
- package/dist/voice-transcription-B1D1rpca.js +170 -0
- package/dist/voice-transcription-Bz2y0nPK.js +170 -0
- package/dist/voice-transcription-CVFcHpPF.js +170 -0
- package/dist/voice-transcription-CvQuWPYK.js +170 -0
- package/dist/voice-transcription-YqndiLA7.js +170 -0
- package/dist/website-watch-tools-B036Y8OQ.js +176 -0
- package/dist/website-watch-tools-B8CHie8v.js +5 -0
- package/dist/website-watch-tools-Brk5oIEv.js +176 -0
- package/dist/website-watch-tools-CJqRj_GB.js +5 -0
- package/dist/website-watch-tools-CSSEu3Qy.js +5 -0
- package/dist/website-watch-tools-D92dkYZa.js +176 -0
- package/dist/website-watch-tools-Du_a8lXq.js +176 -0
- package/dist/website-watch-tools-UdTBGgRk.js +5 -0
- package/package.json +5 -3
- package/static/chat.html +18 -4
- package/static/web/assets/index-D2ekZ-uM.js +75 -0
- package/static/web/assets/index-D_9lvvup.css +1 -0
- package/static/web/index.html +2 -2
- package/static/web/assets/index-B5N1LHGR.css +0 -1
- package/static/web/assets/index-Bf8pf7Wg.js +0 -75
|
@@ -0,0 +1,86 @@
|
|
|
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 fs_extra = require_chunk.__toESM(require("fs-extra"));
|
|
6
|
+
const path = require_chunk.__toESM(require("path"));
|
|
7
|
+
|
|
8
|
+
//#region src/logging/logger.ts
|
|
9
|
+
require_paths$1.init_paths();
|
|
10
|
+
const LEVEL_COLOR = {
|
|
11
|
+
debug: chalk.default.gray,
|
|
12
|
+
info: chalk.default.cyan,
|
|
13
|
+
warn: chalk.default.yellow,
|
|
14
|
+
error: chalk.default.red,
|
|
15
|
+
silent: chalk.default.gray
|
|
16
|
+
};
|
|
17
|
+
const getLogDir = () => path.default.join(require_paths.getHyperClawDir(), "logs");
|
|
18
|
+
const getLogFile = () => path.default.join(getLogDir(), "hyperclaw.log");
|
|
19
|
+
const MAX_LOG_BYTES = 5 * 1024 * 1024;
|
|
20
|
+
function formatConsole(entry) {
|
|
21
|
+
const ts = chalk.default.gray(entry.ts.slice(11, 23));
|
|
22
|
+
const level = LEVEL_COLOR[entry.level](entry.level.toUpperCase().padEnd(5));
|
|
23
|
+
const mod = chalk.default.blue(`[${entry.module}]`);
|
|
24
|
+
const data = entry.data ? chalk.default.gray(" " + JSON.stringify(entry.data)) : "";
|
|
25
|
+
return ` ${ts} ${level} ${mod} ${entry.message}${data}`;
|
|
26
|
+
}
|
|
27
|
+
async function tailLog(lines = 50) {
|
|
28
|
+
if (!await fs_extra.default.pathExists(getLogFile())) {
|
|
29
|
+
console.log(chalk.default.gray("\n No log file yet. Start the daemon first.\n"));
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
const content = await fs_extra.default.readFile(getLogFile(), "utf8");
|
|
33
|
+
const all = content.trim().split("\n").filter(Boolean);
|
|
34
|
+
const tail = all.slice(-lines);
|
|
35
|
+
console.log(chalk.default.bold.cyan(`\n 📋 LAST ${tail.length} LOG ENTRIES\n`));
|
|
36
|
+
for (const line of tail) try {
|
|
37
|
+
const entry = JSON.parse(line);
|
|
38
|
+
console.log(formatConsole(entry));
|
|
39
|
+
} catch {
|
|
40
|
+
console.log(chalk.default.gray(" " + line));
|
|
41
|
+
}
|
|
42
|
+
console.log();
|
|
43
|
+
}
|
|
44
|
+
async function streamLog() {
|
|
45
|
+
console.log(chalk.default.bold.cyan("\n 📡 STREAMING LOGS (Ctrl+C to stop)\n"));
|
|
46
|
+
await fs_extra.default.ensureDir(getLogDir());
|
|
47
|
+
await fs_extra.default.ensureFile(getLogFile());
|
|
48
|
+
const { createReadStream } = await import("fs");
|
|
49
|
+
const { Tail } = await import("tail").catch(() => ({ Tail: null }));
|
|
50
|
+
if (Tail) {
|
|
51
|
+
const tail = new Tail(getLogFile());
|
|
52
|
+
tail.on("line", (line) => {
|
|
53
|
+
try {
|
|
54
|
+
const entry = JSON.parse(line);
|
|
55
|
+
console.log(formatConsole(entry));
|
|
56
|
+
} catch {
|
|
57
|
+
console.log(chalk.default.gray(" " + line));
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
await new Promise(() => {});
|
|
61
|
+
} else {
|
|
62
|
+
const { spawn } = await import("child_process");
|
|
63
|
+
const proc = spawn("tail", ["-f", getLogFile()], { stdio: [
|
|
64
|
+
"ignore",
|
|
65
|
+
"pipe",
|
|
66
|
+
"ignore"
|
|
67
|
+
] });
|
|
68
|
+
proc.stdout?.on("data", (chunk) => {
|
|
69
|
+
const lines = chunk.toString().split("\n");
|
|
70
|
+
for (const line of lines) {
|
|
71
|
+
if (!line.trim()) continue;
|
|
72
|
+
try {
|
|
73
|
+
const entry = JSON.parse(line);
|
|
74
|
+
console.log(formatConsole(entry));
|
|
75
|
+
} catch {
|
|
76
|
+
console.log(chalk.default.gray(" " + line));
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
await new Promise(() => {});
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
//#endregion
|
|
85
|
+
exports.streamLog = streamLog;
|
|
86
|
+
exports.tailLog = tailLog;
|
|
@@ -0,0 +1,86 @@
|
|
|
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 fs_extra = require_chunk.__toESM(require("fs-extra"));
|
|
6
|
+
const path = require_chunk.__toESM(require("path"));
|
|
7
|
+
|
|
8
|
+
//#region src/logging/logger.ts
|
|
9
|
+
require_paths$1.init_paths();
|
|
10
|
+
const LEVEL_COLOR = {
|
|
11
|
+
debug: chalk.default.gray,
|
|
12
|
+
info: chalk.default.cyan,
|
|
13
|
+
warn: chalk.default.yellow,
|
|
14
|
+
error: chalk.default.red,
|
|
15
|
+
silent: chalk.default.gray
|
|
16
|
+
};
|
|
17
|
+
const getLogDir = () => path.default.join(require_paths.getHyperClawDir(), "logs");
|
|
18
|
+
const getLogFile = () => path.default.join(getLogDir(), "hyperclaw.log");
|
|
19
|
+
const MAX_LOG_BYTES = 5 * 1024 * 1024;
|
|
20
|
+
function formatConsole(entry) {
|
|
21
|
+
const ts = chalk.default.gray(entry.ts.slice(11, 23));
|
|
22
|
+
const level = LEVEL_COLOR[entry.level](entry.level.toUpperCase().padEnd(5));
|
|
23
|
+
const mod = chalk.default.blue(`[${entry.module}]`);
|
|
24
|
+
const data = entry.data ? chalk.default.gray(" " + JSON.stringify(entry.data)) : "";
|
|
25
|
+
return ` ${ts} ${level} ${mod} ${entry.message}${data}`;
|
|
26
|
+
}
|
|
27
|
+
async function tailLog(lines = 50) {
|
|
28
|
+
if (!await fs_extra.default.pathExists(getLogFile())) {
|
|
29
|
+
console.log(chalk.default.gray("\n No log file yet. Start the daemon first.\n"));
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
const content = await fs_extra.default.readFile(getLogFile(), "utf8");
|
|
33
|
+
const all = content.trim().split("\n").filter(Boolean);
|
|
34
|
+
const tail = all.slice(-lines);
|
|
35
|
+
console.log(chalk.default.bold.cyan(`\n 📋 LAST ${tail.length} LOG ENTRIES\n`));
|
|
36
|
+
for (const line of tail) try {
|
|
37
|
+
const entry = JSON.parse(line);
|
|
38
|
+
console.log(formatConsole(entry));
|
|
39
|
+
} catch {
|
|
40
|
+
console.log(chalk.default.gray(" " + line));
|
|
41
|
+
}
|
|
42
|
+
console.log();
|
|
43
|
+
}
|
|
44
|
+
async function streamLog() {
|
|
45
|
+
console.log(chalk.default.bold.cyan("\n 📡 STREAMING LOGS (Ctrl+C to stop)\n"));
|
|
46
|
+
await fs_extra.default.ensureDir(getLogDir());
|
|
47
|
+
await fs_extra.default.ensureFile(getLogFile());
|
|
48
|
+
const { createReadStream } = await import("fs");
|
|
49
|
+
const { Tail } = await import("tail").catch(() => ({ Tail: null }));
|
|
50
|
+
if (Tail) {
|
|
51
|
+
const tail = new Tail(getLogFile());
|
|
52
|
+
tail.on("line", (line) => {
|
|
53
|
+
try {
|
|
54
|
+
const entry = JSON.parse(line);
|
|
55
|
+
console.log(formatConsole(entry));
|
|
56
|
+
} catch {
|
|
57
|
+
console.log(chalk.default.gray(" " + line));
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
await new Promise(() => {});
|
|
61
|
+
} else {
|
|
62
|
+
const { spawn } = await import("child_process");
|
|
63
|
+
const proc = spawn("tail", ["-f", getLogFile()], { stdio: [
|
|
64
|
+
"ignore",
|
|
65
|
+
"pipe",
|
|
66
|
+
"ignore"
|
|
67
|
+
] });
|
|
68
|
+
proc.stdout?.on("data", (chunk) => {
|
|
69
|
+
const lines = chunk.toString().split("\n");
|
|
70
|
+
for (const line of lines) {
|
|
71
|
+
if (!line.trim()) continue;
|
|
72
|
+
try {
|
|
73
|
+
const entry = JSON.parse(line);
|
|
74
|
+
console.log(formatConsole(entry));
|
|
75
|
+
} catch {
|
|
76
|
+
console.log(chalk.default.gray(" " + line));
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
await new Promise(() => {});
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
//#endregion
|
|
85
|
+
exports.streamLog = streamLog;
|
|
86
|
+
exports.tailLog = tailLog;
|
|
@@ -0,0 +1,250 @@
|
|
|
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 require_credentials_store = require('./credentials-store-CXq4kZub.js');
|
|
5
|
+
const chalk = require_chunk.__toESM(require("chalk"));
|
|
6
|
+
const ora = require_chunk.__toESM(require("ora"));
|
|
7
|
+
const fs_extra = require_chunk.__toESM(require("fs-extra"));
|
|
8
|
+
const path = require_chunk.__toESM(require("path"));
|
|
9
|
+
const os = require_chunk.__toESM(require("os"));
|
|
10
|
+
|
|
11
|
+
//#region src/secrets/manager.ts
|
|
12
|
+
require_credentials_store.init_credentials_store();
|
|
13
|
+
require_paths$1.init_paths();
|
|
14
|
+
const KNOWN_SECRETS = [
|
|
15
|
+
{
|
|
16
|
+
key: "TAVILY_API_KEY",
|
|
17
|
+
description: "Tavily web search API key",
|
|
18
|
+
requiredBy: ["web-search"]
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
key: "DEEPL_API_KEY",
|
|
22
|
+
description: "DeepL translation API key",
|
|
23
|
+
requiredBy: ["translator"]
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
key: "GITHUB_TOKEN",
|
|
27
|
+
description: "GitHub personal access token",
|
|
28
|
+
requiredBy: ["github"]
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
key: "OPENWEATHER_API_KEY",
|
|
32
|
+
description: "OpenWeatherMap API key",
|
|
33
|
+
requiredBy: ["weather"]
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
key: "GOOGLE_CALENDAR_CREDS",
|
|
37
|
+
description: "Google Calendar OAuth credentials",
|
|
38
|
+
requiredBy: ["calendar"]
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
key: "DATABASE_URL",
|
|
42
|
+
description: "Database connection URL",
|
|
43
|
+
requiredBy: ["db-reader"]
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
key: "HA_URL",
|
|
47
|
+
description: "Home Assistant URL",
|
|
48
|
+
requiredBy: ["home-assistant"]
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
key: "HA_TOKEN",
|
|
52
|
+
description: "Home Assistant long-lived token",
|
|
53
|
+
requiredBy: ["home-assistant"]
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
key: "ANTHROPIC_API_KEY",
|
|
57
|
+
description: "Anthropic API key",
|
|
58
|
+
requiredBy: ["provider:anthropic"]
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
key: "OPENAI_API_KEY",
|
|
62
|
+
description: "OpenAI API key",
|
|
63
|
+
requiredBy: ["provider:openai"]
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
key: "OPENROUTER_API_KEY",
|
|
67
|
+
description: "OpenRouter API key",
|
|
68
|
+
requiredBy: ["provider:openrouter"]
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
key: "XAI_API_KEY",
|
|
72
|
+
description: "xAI (Grok) API key",
|
|
73
|
+
requiredBy: ["provider:xai"]
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
key: "GOOGLE_AI_API_KEY",
|
|
77
|
+
description: "Google AI Studio API key",
|
|
78
|
+
requiredBy: ["provider:google"]
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
key: "HYPERCLAW_GATEWAY_TOKEN",
|
|
82
|
+
description: "Gateway shared auth token",
|
|
83
|
+
requiredBy: ["gateway"]
|
|
84
|
+
}
|
|
85
|
+
];
|
|
86
|
+
function mask(val) {
|
|
87
|
+
if (val.length <= 8) return "***";
|
|
88
|
+
return val.slice(0, 4) + "***" + val.slice(-3);
|
|
89
|
+
}
|
|
90
|
+
function escapeRegex(s) {
|
|
91
|
+
return s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
92
|
+
}
|
|
93
|
+
var SecretsManager = class {
|
|
94
|
+
envFile;
|
|
95
|
+
shellRcFiles;
|
|
96
|
+
creds;
|
|
97
|
+
constructor() {
|
|
98
|
+
const hcDir = require_paths.getHyperClawDir();
|
|
99
|
+
this.envFile = require_paths.getEnvFilePath();
|
|
100
|
+
const home = os.default.homedir();
|
|
101
|
+
const isWin = process.platform === "win32";
|
|
102
|
+
this.shellRcFiles = isWin ? [path.default.join(home, "Documents", "WindowsPowerShell", "Microsoft.PowerShell_profile.ps1"), path.default.join(home, ".powershell_profile.ps1")] : [
|
|
103
|
+
path.default.join(home, ".bashrc"),
|
|
104
|
+
path.default.join(home, ".zshrc"),
|
|
105
|
+
path.default.join(home, ".profile")
|
|
106
|
+
];
|
|
107
|
+
this.creds = new require_credentials_store.CredentialsStore(hcDir);
|
|
108
|
+
}
|
|
109
|
+
resolveSecret(key) {
|
|
110
|
+
if (process.env[key]) return {
|
|
111
|
+
source: "env",
|
|
112
|
+
masked: mask(process.env[key]),
|
|
113
|
+
valid: true
|
|
114
|
+
};
|
|
115
|
+
if (fs_extra.default.pathExistsSync(this.envFile)) {
|
|
116
|
+
const envContent = fs_extra.default.readFileSync(this.envFile, "utf8");
|
|
117
|
+
const match = envContent.match(new RegExp(`^${key}=(.+)$`, "m"));
|
|
118
|
+
if (match) return {
|
|
119
|
+
source: "file",
|
|
120
|
+
masked: mask(match[1].trim()),
|
|
121
|
+
valid: true
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
return {
|
|
125
|
+
source: "missing",
|
|
126
|
+
valid: false
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
async audit(requiredBy) {
|
|
130
|
+
console.log(chalk.default.bold.cyan("\n 🔍 SECRETS AUDIT\n"));
|
|
131
|
+
const secrets = KNOWN_SECRETS.filter((s) => !requiredBy || s.requiredBy.some((r) => requiredBy.includes(r))).map((s) => ({
|
|
132
|
+
...s,
|
|
133
|
+
...this.resolveSecret(s.key)
|
|
134
|
+
}));
|
|
135
|
+
let missingCount = 0;
|
|
136
|
+
let presentCount = 0;
|
|
137
|
+
for (const secret of secrets) {
|
|
138
|
+
const icon = secret.valid ? chalk.default.green("✔") : chalk.default.red("✖");
|
|
139
|
+
const sourceLabel = {
|
|
140
|
+
env: chalk.default.cyan("[env]"),
|
|
141
|
+
file: chalk.default.yellow("[.env file]"),
|
|
142
|
+
"credentials-store": chalk.default.blue("[creds store]"),
|
|
143
|
+
missing: chalk.default.red("[missing]")
|
|
144
|
+
}[secret.source];
|
|
145
|
+
console.log(` ${icon} ${chalk.default.white(secret.key.padEnd(28))} ${sourceLabel}`);
|
|
146
|
+
if (secret.masked) console.log(` ${chalk.default.gray(`value: ${secret.masked}`)}`);
|
|
147
|
+
console.log(` ${chalk.default.gray(`required by: ${secret.requiredBy.join(", ")}`)}`);
|
|
148
|
+
console.log();
|
|
149
|
+
if (secret.valid) presentCount++;
|
|
150
|
+
else missingCount++;
|
|
151
|
+
}
|
|
152
|
+
console.log(` ${chalk.default.bold("Summary:")} ${chalk.default.green(`${presentCount} present`)} ${chalk.default.red(`${missingCount} missing`)}`);
|
|
153
|
+
if (missingCount > 0) {
|
|
154
|
+
console.log(chalk.default.gray("\n To add a secret:"));
|
|
155
|
+
console.log(chalk.default.gray(" hyperclaw secrets set TAVILY_API_KEY=tvly-..."));
|
|
156
|
+
console.log(chalk.default.gray(" hyperclaw secrets apply # write to shell config"));
|
|
157
|
+
console.log(chalk.default.gray(" hyperclaw secrets reload # reload into running gateway\n"));
|
|
158
|
+
} else console.log(chalk.default.green("\n ✔ All required secrets are present!\n"));
|
|
159
|
+
}
|
|
160
|
+
async set(keyValue) {
|
|
161
|
+
const eqIdx = keyValue.indexOf("=");
|
|
162
|
+
if (eqIdx === -1) {
|
|
163
|
+
console.log(chalk.default.red(" ✖ Format: hyperclaw secrets set KEY=value"));
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
const key = keyValue.slice(0, eqIdx).trim();
|
|
167
|
+
const value = keyValue.slice(eqIdx + 1).trim();
|
|
168
|
+
await fs_extra.default.ensureDir(path.default.dirname(this.envFile));
|
|
169
|
+
let content = await fs_extra.default.pathExists(this.envFile) ? await fs_extra.default.readFile(this.envFile, "utf8") : "";
|
|
170
|
+
const lineRe = new RegExp(`^${escapeRegex(key)}=.*$`, "m");
|
|
171
|
+
if (lineRe.test(content)) content = content.replace(lineRe, `${key}=${value}`);
|
|
172
|
+
else content = content.endsWith("\n") || content === "" ? content + `${key}=${value}\n` : content + `\n${key}=${value}\n`;
|
|
173
|
+
await fs_extra.default.writeFile(this.envFile, content, "utf8");
|
|
174
|
+
await fs_extra.default.chmod(this.envFile, 384);
|
|
175
|
+
console.log(chalk.default.green(`\n ✔ Secret set: ${key}=${mask(value)}`));
|
|
176
|
+
console.log(chalk.default.gray(` Stored in: ${this.envFile}`));
|
|
177
|
+
console.log(chalk.default.gray(" Run: hyperclaw secrets apply to write to shell config"));
|
|
178
|
+
console.log(chalk.default.gray(" Restart gateway to use: hyperclaw daemon restart\n"));
|
|
179
|
+
}
|
|
180
|
+
async apply() {
|
|
181
|
+
const spinner = (0, ora.default)("Applying secrets to shell configuration...").start();
|
|
182
|
+
if (!await fs_extra.default.pathExists(this.envFile)) {
|
|
183
|
+
spinner.fail("No .env file found. Run: hyperclaw secrets set KEY=value first");
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
const envContent = await fs_extra.default.readFile(this.envFile, "utf8");
|
|
187
|
+
const lines = envContent.split("\n").filter((l) => l.includes("=") && !l.startsWith("#"));
|
|
188
|
+
for (const rcFile of this.shellRcFiles) {
|
|
189
|
+
await fs_extra.default.ensureDir(path.default.dirname(rcFile));
|
|
190
|
+
const exists = await fs_extra.default.pathExists(rcFile);
|
|
191
|
+
if (exists || rcFile.endsWith(".ps1")) {
|
|
192
|
+
if (exists) {
|
|
193
|
+
const backup = rcFile + ".hyperclaw.bak";
|
|
194
|
+
await fs_extra.default.copy(rcFile, backup, { overwrite: true });
|
|
195
|
+
}
|
|
196
|
+
let rc = exists ? await fs_extra.default.readFile(rcFile, "utf8") : "";
|
|
197
|
+
const marker = "# === HyperClaw secrets — auto-managed, do not edit manually ===";
|
|
198
|
+
const markerEnd = "# === end HyperClaw secrets ===";
|
|
199
|
+
const blockRe = new RegExp(`${escapeRegex(marker)}[\\s\\S]*?${escapeRegex(markerEnd)}\n?`, "g");
|
|
200
|
+
rc = rc.replace(blockRe, "");
|
|
201
|
+
const isWin = process.platform === "win32" && rcFile.endsWith(".ps1");
|
|
202
|
+
const exportLines = isWin ? lines.map((l) => {
|
|
203
|
+
const eq = l.indexOf("=");
|
|
204
|
+
if (eq <= 0) return "";
|
|
205
|
+
const k = l.slice(0, eq).trim();
|
|
206
|
+
let v = l.slice(eq + 1).trim();
|
|
207
|
+
if (v.includes("\n") || v.includes("\r")) console.log(chalk.default.yellow(` ⚠ Secret ${k} contains newlines — may need manual edit in ${path.default.basename(rcFile)}`));
|
|
208
|
+
v = v.replace(/\\/g, "\\\\").replace(/"/g, "`\"").replace(/\$/g, "`$");
|
|
209
|
+
return `$env:${k} = "${v}"`;
|
|
210
|
+
}).join("\n") : lines.map((l) => `export ${l}`).join("\n");
|
|
211
|
+
const block = `\n${marker}\n${exportLines}\n${markerEnd}\n`;
|
|
212
|
+
rc = rc + block;
|
|
213
|
+
await fs_extra.default.writeFile(rcFile, rc, "utf8");
|
|
214
|
+
spinner.text = `Applied to ${path.default.basename(rcFile)}`;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
spinner.succeed(`Secrets applied to shell config (${lines.length} variables)`);
|
|
218
|
+
const reloadHint = process.platform === "win32" ? chalk.default.gray(" Open a new PowerShell window to load the profile.\n") : chalk.default.gray(" Reload your shell or run: source ~/.bashrc\n");
|
|
219
|
+
console.log(reloadHint);
|
|
220
|
+
}
|
|
221
|
+
async reload() {
|
|
222
|
+
const spinner = (0, ora.default)("Reloading secrets into running gateway...").start();
|
|
223
|
+
await new Promise((r) => setTimeout(r, 1200));
|
|
224
|
+
if (await fs_extra.default.pathExists(this.envFile)) {
|
|
225
|
+
const lines = (await fs_extra.default.readFile(this.envFile, "utf8")).split("\n").filter((l) => l.includes("=") && !l.startsWith("#"));
|
|
226
|
+
let injected = 0;
|
|
227
|
+
for (const line of lines) {
|
|
228
|
+
const [k, ...rest] = line.split("=");
|
|
229
|
+
const key = k.trim();
|
|
230
|
+
if (key && !(key in process.env)) {
|
|
231
|
+
process.env[key] = rest.join("=").trim();
|
|
232
|
+
injected++;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
spinner.succeed(`Reloaded ${injected} secrets into this CLI process (${lines.length - injected} skipped — already set)`);
|
|
236
|
+
console.log(chalk.default.gray(" Restart the gateway to pick up changes: hyperclaw daemon restart\n"));
|
|
237
|
+
} else spinner.warn("No .env file found — nothing to reload");
|
|
238
|
+
}
|
|
239
|
+
async remove(key) {
|
|
240
|
+
if (await fs_extra.default.pathExists(this.envFile)) {
|
|
241
|
+
let content = await fs_extra.default.readFile(this.envFile, "utf8");
|
|
242
|
+
content = content.replace(new RegExp(`^${escapeRegex(key)}=.*\n?`, "gm"), "");
|
|
243
|
+
await fs_extra.default.writeFile(this.envFile, content, "utf8");
|
|
244
|
+
}
|
|
245
|
+
console.log(chalk.default.green(`\n ✔ Secret removed: ${key}\n`));
|
|
246
|
+
}
|
|
247
|
+
};
|
|
248
|
+
|
|
249
|
+
//#endregion
|
|
250
|
+
exports.SecretsManager = SecretsManager;
|
|
@@ -0,0 +1,250 @@
|
|
|
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 require_credentials_store = require('./credentials-store-onL1tYct.js');
|
|
5
|
+
const chalk = require_chunk.__toESM(require("chalk"));
|
|
6
|
+
const ora = require_chunk.__toESM(require("ora"));
|
|
7
|
+
const fs_extra = require_chunk.__toESM(require("fs-extra"));
|
|
8
|
+
const path = require_chunk.__toESM(require("path"));
|
|
9
|
+
const os = require_chunk.__toESM(require("os"));
|
|
10
|
+
|
|
11
|
+
//#region src/secrets/manager.ts
|
|
12
|
+
require_credentials_store.init_credentials_store();
|
|
13
|
+
require_paths$1.init_paths();
|
|
14
|
+
const KNOWN_SECRETS = [
|
|
15
|
+
{
|
|
16
|
+
key: "TAVILY_API_KEY",
|
|
17
|
+
description: "Tavily web search API key",
|
|
18
|
+
requiredBy: ["web-search"]
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
key: "DEEPL_API_KEY",
|
|
22
|
+
description: "DeepL translation API key",
|
|
23
|
+
requiredBy: ["translator"]
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
key: "GITHUB_TOKEN",
|
|
27
|
+
description: "GitHub personal access token",
|
|
28
|
+
requiredBy: ["github"]
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
key: "OPENWEATHER_API_KEY",
|
|
32
|
+
description: "OpenWeatherMap API key",
|
|
33
|
+
requiredBy: ["weather"]
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
key: "GOOGLE_CALENDAR_CREDS",
|
|
37
|
+
description: "Google Calendar OAuth credentials",
|
|
38
|
+
requiredBy: ["calendar"]
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
key: "DATABASE_URL",
|
|
42
|
+
description: "Database connection URL",
|
|
43
|
+
requiredBy: ["db-reader"]
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
key: "HA_URL",
|
|
47
|
+
description: "Home Assistant URL",
|
|
48
|
+
requiredBy: ["home-assistant"]
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
key: "HA_TOKEN",
|
|
52
|
+
description: "Home Assistant long-lived token",
|
|
53
|
+
requiredBy: ["home-assistant"]
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
key: "ANTHROPIC_API_KEY",
|
|
57
|
+
description: "Anthropic API key",
|
|
58
|
+
requiredBy: ["provider:anthropic"]
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
key: "OPENAI_API_KEY",
|
|
62
|
+
description: "OpenAI API key",
|
|
63
|
+
requiredBy: ["provider:openai"]
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
key: "OPENROUTER_API_KEY",
|
|
67
|
+
description: "OpenRouter API key",
|
|
68
|
+
requiredBy: ["provider:openrouter"]
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
key: "XAI_API_KEY",
|
|
72
|
+
description: "xAI (Grok) API key",
|
|
73
|
+
requiredBy: ["provider:xai"]
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
key: "GOOGLE_AI_API_KEY",
|
|
77
|
+
description: "Google AI Studio API key",
|
|
78
|
+
requiredBy: ["provider:google"]
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
key: "HYPERCLAW_GATEWAY_TOKEN",
|
|
82
|
+
description: "Gateway shared auth token",
|
|
83
|
+
requiredBy: ["gateway"]
|
|
84
|
+
}
|
|
85
|
+
];
|
|
86
|
+
function mask(val) {
|
|
87
|
+
if (val.length <= 8) return "***";
|
|
88
|
+
return val.slice(0, 4) + "***" + val.slice(-3);
|
|
89
|
+
}
|
|
90
|
+
function escapeRegex(s) {
|
|
91
|
+
return s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
92
|
+
}
|
|
93
|
+
var SecretsManager = class {
|
|
94
|
+
envFile;
|
|
95
|
+
shellRcFiles;
|
|
96
|
+
creds;
|
|
97
|
+
constructor() {
|
|
98
|
+
const hcDir = require_paths.getHyperClawDir();
|
|
99
|
+
this.envFile = require_paths.getEnvFilePath();
|
|
100
|
+
const home = os.default.homedir();
|
|
101
|
+
const isWin = process.platform === "win32";
|
|
102
|
+
this.shellRcFiles = isWin ? [path.default.join(home, "Documents", "WindowsPowerShell", "Microsoft.PowerShell_profile.ps1"), path.default.join(home, ".powershell_profile.ps1")] : [
|
|
103
|
+
path.default.join(home, ".bashrc"),
|
|
104
|
+
path.default.join(home, ".zshrc"),
|
|
105
|
+
path.default.join(home, ".profile")
|
|
106
|
+
];
|
|
107
|
+
this.creds = new require_credentials_store.CredentialsStore(hcDir);
|
|
108
|
+
}
|
|
109
|
+
resolveSecret(key) {
|
|
110
|
+
if (process.env[key]) return {
|
|
111
|
+
source: "env",
|
|
112
|
+
masked: mask(process.env[key]),
|
|
113
|
+
valid: true
|
|
114
|
+
};
|
|
115
|
+
if (fs_extra.default.pathExistsSync(this.envFile)) {
|
|
116
|
+
const envContent = fs_extra.default.readFileSync(this.envFile, "utf8");
|
|
117
|
+
const match = envContent.match(new RegExp(`^${key}=(.+)$`, "m"));
|
|
118
|
+
if (match) return {
|
|
119
|
+
source: "file",
|
|
120
|
+
masked: mask(match[1].trim()),
|
|
121
|
+
valid: true
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
return {
|
|
125
|
+
source: "missing",
|
|
126
|
+
valid: false
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
async audit(requiredBy) {
|
|
130
|
+
console.log(chalk.default.bold.cyan("\n 🔍 SECRETS AUDIT\n"));
|
|
131
|
+
const secrets = KNOWN_SECRETS.filter((s) => !requiredBy || s.requiredBy.some((r) => requiredBy.includes(r))).map((s) => ({
|
|
132
|
+
...s,
|
|
133
|
+
...this.resolveSecret(s.key)
|
|
134
|
+
}));
|
|
135
|
+
let missingCount = 0;
|
|
136
|
+
let presentCount = 0;
|
|
137
|
+
for (const secret of secrets) {
|
|
138
|
+
const icon = secret.valid ? chalk.default.green("✔") : chalk.default.red("✖");
|
|
139
|
+
const sourceLabel = {
|
|
140
|
+
env: chalk.default.cyan("[env]"),
|
|
141
|
+
file: chalk.default.yellow("[.env file]"),
|
|
142
|
+
"credentials-store": chalk.default.blue("[creds store]"),
|
|
143
|
+
missing: chalk.default.red("[missing]")
|
|
144
|
+
}[secret.source];
|
|
145
|
+
console.log(` ${icon} ${chalk.default.white(secret.key.padEnd(28))} ${sourceLabel}`);
|
|
146
|
+
if (secret.masked) console.log(` ${chalk.default.gray(`value: ${secret.masked}`)}`);
|
|
147
|
+
console.log(` ${chalk.default.gray(`required by: ${secret.requiredBy.join(", ")}`)}`);
|
|
148
|
+
console.log();
|
|
149
|
+
if (secret.valid) presentCount++;
|
|
150
|
+
else missingCount++;
|
|
151
|
+
}
|
|
152
|
+
console.log(` ${chalk.default.bold("Summary:")} ${chalk.default.green(`${presentCount} present`)} ${chalk.default.red(`${missingCount} missing`)}`);
|
|
153
|
+
if (missingCount > 0) {
|
|
154
|
+
console.log(chalk.default.gray("\n To add a secret:"));
|
|
155
|
+
console.log(chalk.default.gray(" hyperclaw secrets set TAVILY_API_KEY=tvly-..."));
|
|
156
|
+
console.log(chalk.default.gray(" hyperclaw secrets apply # write to shell config"));
|
|
157
|
+
console.log(chalk.default.gray(" hyperclaw secrets reload # reload into running gateway\n"));
|
|
158
|
+
} else console.log(chalk.default.green("\n ✔ All required secrets are present!\n"));
|
|
159
|
+
}
|
|
160
|
+
async set(keyValue) {
|
|
161
|
+
const eqIdx = keyValue.indexOf("=");
|
|
162
|
+
if (eqIdx === -1) {
|
|
163
|
+
console.log(chalk.default.red(" ✖ Format: hyperclaw secrets set KEY=value"));
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
const key = keyValue.slice(0, eqIdx).trim();
|
|
167
|
+
const value = keyValue.slice(eqIdx + 1).trim();
|
|
168
|
+
await fs_extra.default.ensureDir(path.default.dirname(this.envFile));
|
|
169
|
+
let content = await fs_extra.default.pathExists(this.envFile) ? await fs_extra.default.readFile(this.envFile, "utf8") : "";
|
|
170
|
+
const lineRe = new RegExp(`^${escapeRegex(key)}=.*$`, "m");
|
|
171
|
+
if (lineRe.test(content)) content = content.replace(lineRe, `${key}=${value}`);
|
|
172
|
+
else content = content.endsWith("\n") || content === "" ? content + `${key}=${value}\n` : content + `\n${key}=${value}\n`;
|
|
173
|
+
await fs_extra.default.writeFile(this.envFile, content, "utf8");
|
|
174
|
+
await fs_extra.default.chmod(this.envFile, 384);
|
|
175
|
+
console.log(chalk.default.green(`\n ✔ Secret set: ${key}=${mask(value)}`));
|
|
176
|
+
console.log(chalk.default.gray(` Stored in: ${this.envFile}`));
|
|
177
|
+
console.log(chalk.default.gray(" Run: hyperclaw secrets apply to write to shell config"));
|
|
178
|
+
console.log(chalk.default.gray(" Restart gateway to use: hyperclaw daemon restart\n"));
|
|
179
|
+
}
|
|
180
|
+
async apply() {
|
|
181
|
+
const spinner = (0, ora.default)("Applying secrets to shell configuration...").start();
|
|
182
|
+
if (!await fs_extra.default.pathExists(this.envFile)) {
|
|
183
|
+
spinner.fail("No .env file found. Run: hyperclaw secrets set KEY=value first");
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
const envContent = await fs_extra.default.readFile(this.envFile, "utf8");
|
|
187
|
+
const lines = envContent.split("\n").filter((l) => l.includes("=") && !l.startsWith("#"));
|
|
188
|
+
for (const rcFile of this.shellRcFiles) {
|
|
189
|
+
await fs_extra.default.ensureDir(path.default.dirname(rcFile));
|
|
190
|
+
const exists = await fs_extra.default.pathExists(rcFile);
|
|
191
|
+
if (exists || rcFile.endsWith(".ps1")) {
|
|
192
|
+
if (exists) {
|
|
193
|
+
const backup = rcFile + ".hyperclaw.bak";
|
|
194
|
+
await fs_extra.default.copy(rcFile, backup, { overwrite: true });
|
|
195
|
+
}
|
|
196
|
+
let rc = exists ? await fs_extra.default.readFile(rcFile, "utf8") : "";
|
|
197
|
+
const marker = "# === HyperClaw secrets — auto-managed, do not edit manually ===";
|
|
198
|
+
const markerEnd = "# === end HyperClaw secrets ===";
|
|
199
|
+
const blockRe = new RegExp(`${escapeRegex(marker)}[\\s\\S]*?${escapeRegex(markerEnd)}\n?`, "g");
|
|
200
|
+
rc = rc.replace(blockRe, "");
|
|
201
|
+
const isWin = process.platform === "win32" && rcFile.endsWith(".ps1");
|
|
202
|
+
const exportLines = isWin ? lines.map((l) => {
|
|
203
|
+
const eq = l.indexOf("=");
|
|
204
|
+
if (eq <= 0) return "";
|
|
205
|
+
const k = l.slice(0, eq).trim();
|
|
206
|
+
let v = l.slice(eq + 1).trim();
|
|
207
|
+
if (v.includes("\n") || v.includes("\r")) console.log(chalk.default.yellow(` ⚠ Secret ${k} contains newlines — may need manual edit in ${path.default.basename(rcFile)}`));
|
|
208
|
+
v = v.replace(/\\/g, "\\\\").replace(/"/g, "`\"").replace(/\$/g, "`$");
|
|
209
|
+
return `$env:${k} = "${v}"`;
|
|
210
|
+
}).join("\n") : lines.map((l) => `export ${l}`).join("\n");
|
|
211
|
+
const block = `\n${marker}\n${exportLines}\n${markerEnd}\n`;
|
|
212
|
+
rc = rc + block;
|
|
213
|
+
await fs_extra.default.writeFile(rcFile, rc, "utf8");
|
|
214
|
+
spinner.text = `Applied to ${path.default.basename(rcFile)}`;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
spinner.succeed(`Secrets applied to shell config (${lines.length} variables)`);
|
|
218
|
+
const reloadHint = process.platform === "win32" ? chalk.default.gray(" Open a new PowerShell window to load the profile.\n") : chalk.default.gray(" Reload your shell or run: source ~/.bashrc\n");
|
|
219
|
+
console.log(reloadHint);
|
|
220
|
+
}
|
|
221
|
+
async reload() {
|
|
222
|
+
const spinner = (0, ora.default)("Reloading secrets into running gateway...").start();
|
|
223
|
+
await new Promise((r) => setTimeout(r, 1200));
|
|
224
|
+
if (await fs_extra.default.pathExists(this.envFile)) {
|
|
225
|
+
const lines = (await fs_extra.default.readFile(this.envFile, "utf8")).split("\n").filter((l) => l.includes("=") && !l.startsWith("#"));
|
|
226
|
+
let injected = 0;
|
|
227
|
+
for (const line of lines) {
|
|
228
|
+
const [k, ...rest] = line.split("=");
|
|
229
|
+
const key = k.trim();
|
|
230
|
+
if (key && !(key in process.env)) {
|
|
231
|
+
process.env[key] = rest.join("=").trim();
|
|
232
|
+
injected++;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
spinner.succeed(`Reloaded ${injected} secrets into this CLI process (${lines.length - injected} skipped — already set)`);
|
|
236
|
+
console.log(chalk.default.gray(" Restart the gateway to pick up changes: hyperclaw daemon restart\n"));
|
|
237
|
+
} else spinner.warn("No .env file found — nothing to reload");
|
|
238
|
+
}
|
|
239
|
+
async remove(key) {
|
|
240
|
+
if (await fs_extra.default.pathExists(this.envFile)) {
|
|
241
|
+
let content = await fs_extra.default.readFile(this.envFile, "utf8");
|
|
242
|
+
content = content.replace(new RegExp(`^${escapeRegex(key)}=.*\n?`, "gm"), "");
|
|
243
|
+
await fs_extra.default.writeFile(this.envFile, content, "utf8");
|
|
244
|
+
}
|
|
245
|
+
console.log(chalk.default.green(`\n ✔ Secret removed: ${key}\n`));
|
|
246
|
+
}
|
|
247
|
+
};
|
|
248
|
+
|
|
249
|
+
//#endregion
|
|
250
|
+
exports.SecretsManager = SecretsManager;
|