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.
Files changed (522) hide show
  1. package/README.md +1 -0
  2. package/dist/a2ui-protocol-CUqdJGh7.js +75 -0
  3. package/dist/a2ui-protocol-CibzbTxL.js +75 -0
  4. package/dist/a2ui-protocol-Dtb8zlog.js +75 -0
  5. package/dist/a2ui-protocol-ORP2Etw0.js +75 -0
  6. package/dist/a2ui-protocol-whRZHdBk.js +75 -0
  7. package/dist/abort-controller-B55O1IgK.js +47995 -0
  8. package/dist/agents-routing-Ai2BQVpU.js +7 -0
  9. package/dist/agents-routing-B0D0vcp5.js +424 -0
  10. package/dist/agents-routing-B0RBl1B8.js +424 -0
  11. package/dist/agents-routing-BC6GndVe.js +7 -0
  12. package/dist/agents-routing-BSUaOpce.js +7 -0
  13. package/dist/agents-routing-C4PVN8G6.js +7 -0
  14. package/dist/agents-routing-CyFBHvyk.js +424 -0
  15. package/dist/agents-routing-Dcr29-JV.js +424 -0
  16. package/dist/agents-routing-DdpszaMx.js +7 -0
  17. package/dist/agents-routing-EwzORQQv.js +424 -0
  18. package/dist/agents-routing-Fd-uQ4R_.js +7 -0
  19. package/dist/agents-routing-eLjVYBAk.js +424 -0
  20. package/dist/api-key-validation-BANgbsfO.js +66 -0
  21. package/dist/api-key-validation-Bnz-0MMK.js +66 -0
  22. package/dist/api-key-validation-D_fMCaO5.js +66 -0
  23. package/dist/api-key-validation-Db7rG3JU.js +66 -0
  24. package/dist/api-key-validation-DrMrLEa0.js +66 -0
  25. package/dist/api-keys-guide-B6AJ1V5D.js +149 -0
  26. package/dist/api-keys-guide-C75JQOdH.js +149 -0
  27. package/dist/api-keys-guide-CFJPrgsL.js +149 -0
  28. package/dist/api-keys-guide-DDz08BJQ.js +149 -0
  29. package/dist/api-keys-guide-DmKF7tB-.js +149 -0
  30. package/dist/audit-BLMB8qp7.js +445 -0
  31. package/dist/audit-Cb2TvqYZ.js +445 -0
  32. package/dist/audit-D7koAKvj.js +445 -0
  33. package/dist/audit-Q-Uy5nem.js +445 -0
  34. package/dist/audit-xP_175jB.js +445 -0
  35. package/dist/backup-7l3iovkX.js +86 -0
  36. package/dist/backup-BKLTHh62.js +86 -0
  37. package/dist/backup-CspxXk78.js +86 -0
  38. package/dist/backup-CtHJEqGr.js +86 -0
  39. package/dist/backup-D8dFYDXV.js +86 -0
  40. package/dist/banner-CZ2BfvQq.js +143 -0
  41. package/dist/banner-CjTRWmks.js +7 -0
  42. package/dist/banner-DYzQ8cCb.js +143 -0
  43. package/dist/banner-Dpygks0H.js +143 -0
  44. package/dist/banner-ZX1WLr44.js +7 -0
  45. package/dist/banner-jW84OrYg.js +7 -0
  46. package/dist/bounty-tools-CCwY61YO.js +211 -0
  47. package/dist/bounty-tools-Cq-oC9gk.js +211 -0
  48. package/dist/bounty-tools-DZ-WtRdE.js +211 -0
  49. package/dist/bounty-tools-DhpmjF5Y.js +211 -0
  50. package/dist/bounty-tools-NGuBWI55.js +211 -0
  51. package/dist/browser-tools-5Fl1hP_2.js +5 -0
  52. package/dist/browser-tools-Ay-wU_a4.js +5 -0
  53. package/dist/browser-tools-BMgBB2fK.js +179 -0
  54. package/dist/browser-tools-kcViDwk5.js +179 -0
  55. package/dist/chat-BUa1oGqj.js +528 -0
  56. package/dist/chat-CJa0ph8c.js +528 -0
  57. package/dist/chat-CKnfxa1-.js +528 -0
  58. package/dist/chat-CQKCIrIY.js +528 -0
  59. package/dist/chat-CiuT-GTs.js +528 -0
  60. package/dist/chat-DfI8uOzF.js +528 -0
  61. package/dist/chat-Dz5rmUSs.js +528 -0
  62. package/dist/chat-RTmX1F16.js +528 -0
  63. package/dist/chat-npW_ZOmo.js +528 -0
  64. package/dist/claw-tasks-Cio1Q7eA.js +80 -0
  65. package/dist/claw-tasks-Dq38PrL5.js +80 -0
  66. package/dist/claw-tasks-DzxNWVcz.js +80 -0
  67. package/dist/claw-tasks-L7vQSGlt.js +80 -0
  68. package/dist/claw-tasks-dndWneZW.js +80 -0
  69. package/dist/config-B-W-Mz4X.js +7 -0
  70. package/dist/config-BAwkTUJC.js +261 -0
  71. package/dist/config-BzK_Xl4Y.js +261 -0
  72. package/dist/config-CYPw2v4l.js +261 -0
  73. package/dist/config-ClsdlpXc.js +261 -0
  74. package/dist/config-DN9fdLL3.js +261 -0
  75. package/dist/config-Dm394B6X.js +7 -0
  76. package/dist/config-FejpHHTz.js +261 -0
  77. package/dist/config-SiLqEezw.js +7 -0
  78. package/dist/config-Tq_GJHf7.js +7 -0
  79. package/dist/config-n4qy5jIy.js +7 -0
  80. package/dist/config-qJUYRMzx.js +7 -0
  81. package/dist/connector-BYPxgmsD.js +312 -0
  82. package/dist/connector-CwT7KZm2.js +309 -0
  83. package/dist/connector-DX4k-lGd.js +442 -0
  84. package/dist/cost-tracker-C2q5zKic.js +103 -0
  85. package/dist/cost-tracker-CsRQAOEr.js +103 -0
  86. package/dist/cost-tracker-DAXWN5YT.js +103 -0
  87. package/dist/cost-tracker-bySvehH6.js +103 -0
  88. package/dist/cost-tracker-x9E8VKtk.js +103 -0
  89. package/dist/credentials-store-BAW87r6f.js +7 -0
  90. package/dist/credentials-store-BHtk7_H_.js +7 -0
  91. package/dist/credentials-store-CESgFvFU.js +89 -0
  92. package/dist/credentials-store-CR4WSDGl.js +7 -0
  93. package/dist/credentials-store-CXq4kZub.js +89 -0
  94. package/dist/credentials-store-DUp8dtaS.js +89 -0
  95. package/dist/credentials-store-Ddhgmbpz.js +7 -0
  96. package/dist/credentials-store-hiSga8qn.js +89 -0
  97. package/dist/credentials-store-kLdrmqSt.js +7 -0
  98. package/dist/credentials-store-onL1tYct.js +89 -0
  99. package/dist/cron-tasks-BFsaCKxE.js +89 -0
  100. package/dist/cron-tasks-BelA2aUW.js +89 -0
  101. package/dist/cron-tasks-CF4MJoIU.js +89 -0
  102. package/dist/cron-tasks-D1T9fWAb.js +89 -0
  103. package/dist/cron-tasks-f_ieXSG2.js +89 -0
  104. package/dist/daemon-ApB1nMs2.js +421 -0
  105. package/dist/daemon-B2ghXB-I.js +7 -0
  106. package/dist/daemon-BTYhQvD_.js +7 -0
  107. package/dist/daemon-BldYSrDj.js +421 -0
  108. package/dist/daemon-BoaFnmdF.js +421 -0
  109. package/dist/daemon-BqTcxMZe.js +7 -0
  110. package/dist/daemon-BrHxr4ut.js +421 -0
  111. package/dist/daemon-BzdeLgON.js +421 -0
  112. package/dist/daemon-BzqWIC4v.js +7 -0
  113. package/dist/daemon-C3OczPR1.js +7 -0
  114. package/dist/daemon-CivMFYkD.js +7 -0
  115. package/dist/daemon-D57KIIA3.js +421 -0
  116. package/dist/daemon-D8uyH9et.js +7 -0
  117. package/dist/daemon-DBTtYx6E.js +421 -0
  118. package/dist/daemon-DBXFUMue.js +421 -0
  119. package/dist/daemon-srcdhzUG.js +7 -0
  120. package/dist/delivery-BURWi8wu.js +4 -0
  121. package/dist/delivery-Bt0xW6L9.js +4 -0
  122. package/dist/delivery-C2sAERN7.js +4 -0
  123. package/dist/delivery-CF2Q4hb1.js +95 -0
  124. package/dist/delivery-CfMljOwk.js +95 -0
  125. package/dist/delivery-DP0d4_A4.js +95 -0
  126. package/dist/delivery-DXYt4aMO.js +4 -0
  127. package/dist/delivery-DXxP2UL4.js +4 -0
  128. package/dist/delivery-jT2UIDlU.js +95 -0
  129. package/dist/delivery-kZ2mVkU5.js +95 -0
  130. package/dist/destructive-gate-5LYh6brt.js +116 -0
  131. package/dist/destructive-gate-B_hNKtu6.js +116 -0
  132. package/dist/destructive-gate-C1ny9ek2.js +116 -0
  133. package/dist/destructive-gate-DvxPSDMR.js +116 -0
  134. package/dist/destructive-gate-Qd2y7x1B.js +116 -0
  135. package/dist/dist-B1qvBUax.js +30541 -0
  136. package/dist/engine-B-JvIt_Y.js +7 -0
  137. package/dist/engine-BBJlKpMP.js +7 -0
  138. package/dist/engine-BGZnBZ4m.js +7 -0
  139. package/dist/engine-BNygJfCo.js +335 -0
  140. package/dist/engine-BTSXJNba.js +346 -0
  141. package/dist/engine-C7LyH310.js +353 -0
  142. package/dist/engine-C_nC_Ioe.js +351 -0
  143. package/dist/engine-DB4MBzki.js +7 -0
  144. package/dist/engine-DCtJSbKU.js +7 -0
  145. package/dist/engine-DPi9fhMl.js +332 -0
  146. package/dist/engine-DeaqDcaT.js +7 -0
  147. package/dist/engine-DuvXJrUP.js +335 -0
  148. package/dist/engine-HkyTC_xl.js +332 -0
  149. package/dist/engine-JysunhPR.js +7 -0
  150. package/dist/engine-MzEUw7qb.js +7 -0
  151. package/dist/engine-j9Yaqt_-.js +332 -0
  152. package/dist/env-resolve--MaE2kFF.js +167 -0
  153. package/dist/env-resolve-BYWG94tK.js +11 -0
  154. package/dist/env-resolve-Bop7KbNq.js +167 -0
  155. package/dist/env-resolve-Buos635Y.js +167 -0
  156. package/dist/env-resolve-C0R8R7pb.js +167 -0
  157. package/dist/env-resolve-D3dP1-Xt.js +11 -0
  158. package/dist/env-resolve-Dr-KfTtw.js +11 -0
  159. package/dist/env-resolve-DvsbhPKl.js +11 -0
  160. package/dist/env-resolve-NNM3F6Eo.js +167 -0
  161. package/dist/env-resolve-dTjn-g8X.js +11 -0
  162. package/dist/extraction-tools-Bh5F0ENP.js +91 -0
  163. package/dist/extraction-tools-BjzXD9LW.js +5 -0
  164. package/dist/extraction-tools-D1lrDYhe.js +5 -0
  165. package/dist/extraction-tools-FBwtT2Bx.js +91 -0
  166. package/dist/fileFromPath-CodL6KXh.js +85 -0
  167. package/dist/gmail-watch-setup--eQ8raeb.js +42 -0
  168. package/dist/gmail-watch-setup-9t14gy1B.js +42 -0
  169. package/dist/gmail-watch-setup-B9fx_OLg.js +42 -0
  170. package/dist/gmail-watch-setup-BzbG0ICM.js +42 -0
  171. package/dist/gmail-watch-setup-DP3kDRx1.js +42 -0
  172. package/dist/heartbeat-engine-5iOlL7Dj.js +89 -0
  173. package/dist/heartbeat-engine-B9bhAHNi.js +89 -0
  174. package/dist/heartbeat-engine-Bu4q18GH.js +89 -0
  175. package/dist/heartbeat-engine-CF_JjNJ4.js +89 -0
  176. package/dist/heartbeat-engine-CLADYZxE.js +89 -0
  177. package/dist/hub-CZeGrS20.js +6 -0
  178. package/dist/hub-DAkEVTEy.js +545 -0
  179. package/dist/hyperclawbot-BEm8_87h.js +516 -0
  180. package/dist/hyperclawbot-CNVUtvYC.js +516 -0
  181. package/dist/hyperclawbot-D5ofLNgm.js +516 -0
  182. package/dist/hyperclawbot-D61zVMyQ.js +516 -0
  183. package/dist/hyperclawbot-DR6BgI_d.js +516 -0
  184. package/dist/hyperclawbot-DwScttSx.js +516 -0
  185. package/dist/hyperclawbot-hZv4pde0.js +516 -0
  186. package/dist/hyperclawbot-v65eL2U0.js +516 -0
  187. package/dist/inference-BEvs7s3c.js +2854 -0
  188. package/dist/inference-C4b9YqXk.js +8 -0
  189. package/dist/inference-C874-2MI.js +8 -0
  190. package/dist/inference-CRF6HyyH.js +2854 -0
  191. package/dist/inference-CfhTACI8.js +2854 -0
  192. package/dist/inference-DCSz6Sb1.js +2880 -0
  193. package/dist/inference-DGsy36Ru.js +8 -0
  194. package/dist/inference-Da7Hw4J3.js +8 -0
  195. package/dist/inference-DhJ-SHZn.js +8 -0
  196. package/dist/inference-K7Jrnzre.js +2854 -0
  197. package/dist/isFile-CSxoSB8X.js +2274 -0
  198. package/dist/knowledge-graph-BdsJ5KEL.js +134 -0
  199. package/dist/knowledge-graph-BiIvoxPt.js +134 -0
  200. package/dist/knowledge-graph-CFRBepzr.js +134 -0
  201. package/dist/knowledge-graph-CeDeahui.js +134 -0
  202. package/dist/knowledge-graph-DoYFZnUr.js +134 -0
  203. package/dist/loader-C2qtNbtF.js +6 -0
  204. package/dist/loader-D6yjBYo4.js +410 -0
  205. package/dist/loader-DBO6yRNh.js +6 -0
  206. package/dist/loader-DMMb9emn.js +410 -0
  207. package/dist/loader-DUhmG3V9.js +410 -0
  208. package/dist/loader-Dl8LNycw.js +6 -0
  209. package/dist/loader-JktrmJOG.js +6 -0
  210. package/dist/loader-UpOYxgZv.js +6 -0
  211. package/dist/loader-hXv2mZjK.js +410 -0
  212. package/dist/loader-nDBcv3Tm.js +410 -0
  213. package/dist/logger-BD316YbA.js +86 -0
  214. package/dist/logger-BnXZkfsp.js +86 -0
  215. package/dist/logger-CmphFNmW.js +86 -0
  216. package/dist/logger-DkHzhh56.js +86 -0
  217. package/dist/logger-Oty9sC13.js +86 -0
  218. package/dist/manager-3-q8zuAW.js +250 -0
  219. package/dist/manager-BIc6zzZV.js +250 -0
  220. package/dist/manager-BkMzc-EJ.js +250 -0
  221. package/dist/manager-Bq5LApdR.js +6 -0
  222. package/dist/manager-BwobWy0l.js +120 -0
  223. package/dist/manager-CNgdJunf.js +250 -0
  224. package/dist/manager-CozyZSDG.js +250 -0
  225. package/dist/manager-D4mDWXph.js +120 -0
  226. package/dist/manager-DuS-WQhZ.js +120 -0
  227. package/dist/manager-Dz2eKYqo.js +116 -0
  228. package/dist/manager-R0TlRMZy.js +120 -0
  229. package/dist/manager-aJfY7rt6.js +120 -0
  230. package/dist/mcp-BH7HtOQ8.js +142 -0
  231. package/dist/mcp-CAJSA_ee.js +142 -0
  232. package/dist/mcp-CD-iIQa2.js +142 -0
  233. package/dist/mcp-CI2F3m8G.js +142 -0
  234. package/dist/mcp-DGo37Ifb.js +142 -0
  235. package/dist/mcp-loader-C-21ynRH.js +93 -0
  236. package/dist/mcp-loader-Ct1NQKnX.js +93 -0
  237. package/dist/mcp-loader-D1T6UX73.js +93 -0
  238. package/dist/mcp-loader-DJk6MEof.js +93 -0
  239. package/dist/mcp-loader-DdXvU63s.js +93 -0
  240. package/dist/mcp-loader-Di7n__ta.js +93 -0
  241. package/dist/mcp-loader-gMliiJ7R.js +93 -0
  242. package/dist/memory-CyonlkTy.js +6 -0
  243. package/dist/memory-DPSWQBc0.js +276 -0
  244. package/dist/memory-auto-B0QOqaUD.js +306 -0
  245. package/dist/memory-auto-BSxYJugl.js +5 -0
  246. package/dist/memory-auto-BVCJeTwd.js +306 -0
  247. package/dist/memory-auto-CcFRxMj-.js +306 -0
  248. package/dist/memory-auto-CifT5aj_.js +5 -0
  249. package/dist/memory-auto-Cp2Jwx3Y.js +306 -0
  250. package/dist/memory-auto-DXKe2ayf.js +5 -0
  251. package/dist/memory-auto-DjK_D8CA.js +306 -0
  252. package/dist/memory-auto-N57dp4Do.js +5 -0
  253. package/dist/memory-auto-n0kOcU7F.js +5 -0
  254. package/dist/memory-integration-D2RvZ-MB.js +91 -0
  255. package/dist/memory-integration-D8shLJwp.js +91 -0
  256. package/dist/memory-integration-DLmzJ62L.js +91 -0
  257. package/dist/memory-integration-DMXDbMIL.js +91 -0
  258. package/dist/memory-integration-Dgr-mjue.js +91 -0
  259. package/dist/moltbook-CIeOshK6.js +81 -0
  260. package/dist/moltbook-CX5XWn06.js +81 -0
  261. package/dist/moltbook-DUfiE4NY.js +81 -0
  262. package/dist/moltbook-DvV6GFFL.js +81 -0
  263. package/dist/moltbook-YEiNI8Cm.js +81 -0
  264. package/dist/multi-agent-tools-jzfvT4zP.js +87 -0
  265. package/dist/multimodal-zZdwqISl.js +77 -0
  266. package/dist/node-BYrxELx2.js +251 -0
  267. package/dist/node-CLWgPlAk.js +251 -0
  268. package/dist/node-Czz8Y85D.js +251 -0
  269. package/dist/node-DFKhz7Zn.js +251 -0
  270. package/dist/node-Du2H2Ddi.js +226 -0
  271. package/dist/node-domexception-v89b0Nwz.js +21 -0
  272. package/dist/node-pending-queue-CIMXPU6K.js +32 -0
  273. package/dist/node-pending-queue-DUXCbYkp.js +32 -0
  274. package/dist/node-pending-queue-DZp7cdfo.js +32 -0
  275. package/dist/node-pending-queue-iYpoWqxe.js +32 -0
  276. package/dist/nodes-registry-BTy7Sc7D.js +52 -0
  277. package/dist/nodes-registry-BYjmmJBU.js +52 -0
  278. package/dist/nodes-registry-BeiEjd9U.js +52 -0
  279. package/dist/nodes-registry-C8GeEGq0.js +52 -0
  280. package/dist/nodes-registry-Du6Klz0l.js +52 -0
  281. package/dist/oauth-flow-BA0yMrHx.js +148 -0
  282. package/dist/oauth-flow-C4QSMsbl.js +148 -0
  283. package/dist/oauth-flow-CIuDBDsp.js +148 -0
  284. package/dist/oauth-flow-CZOsvU1v.js +148 -0
  285. package/dist/oauth-flow-CniM4jlJ.js +148 -0
  286. package/dist/oauth-provider-BA4GVFKg.js +111 -0
  287. package/dist/oauth-provider-Bnul5A_Z.js +111 -0
  288. package/dist/oauth-provider-Dk-6BmGL.js +111 -0
  289. package/dist/oauth-provider-DqPXPiiC.js +111 -0
  290. package/dist/oauth-provider-MEgHjij2.js +111 -0
  291. package/dist/observability-0spm7MPz.js +89 -0
  292. package/dist/observability-B3dDQSdI.js +89 -0
  293. package/dist/observability-BOMYgHUh.js +89 -0
  294. package/dist/observability-CDqHr-_o.js +89 -0
  295. package/dist/observability-ah2a7sh1.js +89 -0
  296. package/dist/onboard-BJ78s3NT.js +3854 -0
  297. package/dist/onboard-BnyHie0K.js +14 -0
  298. package/dist/onboard-C55YXd_e.js +14 -0
  299. package/dist/onboard-CNnm4yYp.js +3841 -0
  300. package/dist/onboard-CXSVPnP7.js +3854 -0
  301. package/dist/onboard-CwvXXOR1.js +14 -0
  302. package/dist/onboard-CxlIsNhX.js +3854 -0
  303. package/dist/onboard-D-5gWzH0.js +3854 -0
  304. package/dist/onboard-D9pjgaVR.js +3854 -0
  305. package/dist/onboard-DPmufMqX.js +14 -0
  306. package/dist/onboard-F9lKA2ie.js +14 -0
  307. package/dist/onboard-UTQXzlPD.js +3854 -0
  308. package/dist/onboard-UhWVcTap.js +14 -0
  309. package/dist/onboard-W5DsxVf2.js +3854 -0
  310. package/dist/onboard-YszvVNgS.js +14 -0
  311. package/dist/onboard-hK098kjl.js +14 -0
  312. package/dist/onboard-pLDBUBpO.js +14 -0
  313. package/dist/onboard-zISipu-l.js +3854 -0
  314. package/dist/openai-CrdtuLxw.js +6292 -0
  315. package/dist/orchestrator-5M-6MB7r.js +6 -0
  316. package/dist/orchestrator-B3BjP1dy.js +6 -0
  317. package/dist/orchestrator-BZS62iDS.js +6 -0
  318. package/dist/orchestrator-C0t11xj7.js +189 -0
  319. package/dist/orchestrator-CA4eKeGn.js +189 -0
  320. package/dist/orchestrator-CNxTIlOK.js +189 -0
  321. package/dist/orchestrator-CTMbjgH_.js +6 -0
  322. package/dist/orchestrator-Cg1vgEHb.js +6 -0
  323. package/dist/orchestrator-Crn4fgbI.js +189 -0
  324. package/dist/orchestrator-Cs6s-QmS.js +189 -0
  325. package/dist/orchestrator-DGqwsLmO.js +189 -0
  326. package/dist/orchestrator-DV5t6wQ0.js +6 -0
  327. package/dist/orchestrator-UUHsFKiH.js +6 -0
  328. package/dist/orchestrator-eT0ZL4yl.js +6 -0
  329. package/dist/orchestrator-oa7HbCnF.js +189 -0
  330. package/dist/orchestrator-tUKag7pG.js +189 -0
  331. package/dist/osint-47yIek6w.js +283 -0
  332. package/dist/osint-BJvOCmVk.js +283 -0
  333. package/dist/osint-CK9xVUUm.js +283 -0
  334. package/dist/osint-D6vQXCWh.js +283 -0
  335. package/dist/osint-DLYZsp1k.js +283 -0
  336. package/dist/osint-c-xDjLb-.js +283 -0
  337. package/dist/osint-cAAdO-cx.js +283 -0
  338. package/dist/osint-chat-B0lc0Y6r.js +789 -0
  339. package/dist/osint-chat-BJgnkFDm.js +789 -0
  340. package/dist/osint-chat-BUhiSpf9.js +789 -0
  341. package/dist/osint-chat-C-9FVAkU.js +789 -0
  342. package/dist/osint-chat-C09BvbGy.js +789 -0
  343. package/dist/osint-chat-CWET8Fno.js +789 -0
  344. package/dist/osint-chat-Cgdzg3lh.js +789 -0
  345. package/dist/osint-chat-zdeaaw7a.js +789 -0
  346. package/dist/osint-e6oBrtlj.js +283 -0
  347. package/dist/pc-access-BCaF5mRs.js +858 -0
  348. package/dist/pc-access-BOcXappE.js +858 -0
  349. package/dist/pc-access-BgZNmAdB.js +8 -0
  350. package/dist/pc-access-CAoM6WN4.js +8 -0
  351. package/dist/pc-access-D2HdoziZ.js +8 -0
  352. package/dist/pc-access-D4g0fjQb.js +858 -0
  353. package/dist/pending-approval-CEu_-DGQ.js +22 -0
  354. package/dist/pending-approval-CJPyt8U5.js +22 -0
  355. package/dist/pending-approval-CzMNCTfZ.js +22 -0
  356. package/dist/pending-approval-DaXi7otO.js +22 -0
  357. package/dist/pending-approval-KcyeiifE.js +22 -0
  358. package/dist/providers-BfW-fgpw.js +5 -0
  359. package/dist/providers-Cs1h_TJA.js +1137 -0
  360. package/dist/providers-DrZP0NeR.js +5 -0
  361. package/dist/providers-dHhpJo9j.js +1120 -0
  362. package/dist/reminders-store-B58LldEG.js +58 -0
  363. package/dist/reminders-store-C4gWckLa.js +58 -0
  364. package/dist/reminders-store-DT0o6a60.js +58 -0
  365. package/dist/renderer-B8c22rbg.js +228 -0
  366. package/dist/renderer-BS0ETL20.js +228 -0
  367. package/dist/renderer-B_ew6jRs.js +228 -0
  368. package/dist/renderer-Cg3c41A5.js +228 -0
  369. package/dist/renderer-UoPcgaAd.js +228 -0
  370. package/dist/rules-BAYXiKiJ.js +106 -0
  371. package/dist/rules-D0v5nuSE.js +106 -0
  372. package/dist/rules-DCKPgwLb.js +106 -0
  373. package/dist/rules-Zn9j4PnO.js +106 -0
  374. package/dist/rules-oAgOSPHC.js +106 -0
  375. package/dist/run-main.js +492 -131
  376. package/dist/runner-B5uo6C5q.js +1310 -0
  377. package/dist/runner-BaZ2V27T.js +1307 -0
  378. package/dist/runner-Bgl7UTbV.js +1307 -0
  379. package/dist/runner-DOKp3-v5.js +1307 -0
  380. package/dist/runner-voYdfM_f.js +1307 -0
  381. package/dist/search-tools-BBwMa8VX.js +107 -0
  382. package/dist/search-tools-CEUOO9Jf.js +107 -0
  383. package/dist/search-tools-DXVuVXW_.js +107 -0
  384. package/dist/search-tools-VHP3xVyC.js +107 -0
  385. package/dist/search-tools-w_zT7-dr.js +107 -0
  386. package/dist/server-BAdJwMM9.js +4 -0
  387. package/dist/server-BD9FLc7S.js +1384 -0
  388. package/dist/server-BJkDIs8Z.js +1467 -0
  389. package/dist/server-BlqWBbS7.js +4 -0
  390. package/dist/server-BzwPvTbD.js +1447 -0
  391. package/dist/server-CBvSfG4w.js +4 -0
  392. package/dist/server-CbNBcB41.js +4 -0
  393. package/dist/server-CtFoXM88.js +4 -0
  394. package/dist/server-DPTXaJJF.js +4 -0
  395. package/dist/server-DVxVLu_G.js +1467 -0
  396. package/dist/server-DZj6Nobr.js +1467 -0
  397. package/dist/server-Diu80smx.js +4 -0
  398. package/dist/server-DszV63tu.js +4 -0
  399. package/dist/server-Dv2zHHy-.js +1447 -0
  400. package/dist/server-MDmdWHob.js +1447 -0
  401. package/dist/server-N9LnLQCS.js +1447 -0
  402. package/dist/session-store-C6Otslf9.js +5 -0
  403. package/dist/session-store-Cmfnvuw9.js +141 -0
  404. package/dist/session-store-CuR9DgRf.js +5 -0
  405. package/dist/session-store-Cx1RMBhS.js +5 -0
  406. package/dist/session-store-DPPHkJBn.js +5 -0
  407. package/dist/session-store-DWLCWQFS.js +141 -0
  408. package/dist/session-store-qGufR_m5.js +141 -0
  409. package/dist/session-store-sUpA509O.js +141 -0
  410. package/dist/sessions-tools-9Z8TtdmP.js +5 -0
  411. package/dist/sessions-tools-BAZnoQLp.js +95 -0
  412. package/dist/sessions-tools-Bb_zF947.js +95 -0
  413. package/dist/sessions-tools-ClrKqLII.js +131 -0
  414. package/dist/sessions-tools-DFe23ZDD.js +5 -0
  415. package/dist/sessions-tools-JHSZ6Bns.js +5 -0
  416. package/dist/sessions-tools-TsRdeFb7.js +95 -0
  417. package/dist/sessions-tools-nYP3Agfs.js +5 -0
  418. package/dist/skill-loader-9jg876RH.js +160 -0
  419. package/dist/skill-loader-CM4KWQ7_.js +160 -0
  420. package/dist/skill-loader-CS3OP4Lr.js +160 -0
  421. package/dist/skill-loader-CnJDLNbY.js +7 -0
  422. package/dist/skill-loader-DRLgt5V2.js +160 -0
  423. package/dist/skill-loader-DVpEgYV2.js +7 -0
  424. package/dist/skill-loader-Df5T_UFl.js +7 -0
  425. package/dist/skill-loader-DxE-gZkT.js +7 -0
  426. package/dist/skill-runtime-8Xh5874w.js +104 -0
  427. package/dist/skill-runtime-B3aUdWKh.js +104 -0
  428. package/dist/skill-runtime-BKyhYvpW.js +5 -0
  429. package/dist/skill-runtime-BLkXA1mO.js +104 -0
  430. package/dist/skill-runtime-BMk-h6Dl.js +5 -0
  431. package/dist/skill-runtime-BP0kZfmM.js +5 -0
  432. package/dist/skill-runtime-BaTX-RGy.js +5 -0
  433. package/dist/skill-runtime-CB9tnc-P.js +104 -0
  434. package/dist/skill-runtime-CLK5HTVE.js +5 -0
  435. package/dist/skill-runtime-COyc3Bci.js +104 -0
  436. package/dist/skill-runtime-CvDXX7wN.js +5 -0
  437. package/dist/skill-runtime-D4REZnhY.js +104 -0
  438. package/dist/skill-runtime-D6-rGzX1.js +104 -0
  439. package/dist/skill-runtime-DQRi9sIf.js +5 -0
  440. package/dist/skill-runtime-DRd56NWK.js +104 -0
  441. package/dist/skill-runtime-Dej1Yr5V.js +5 -0
  442. package/dist/src-6dmkVQGq.js +63 -0
  443. package/dist/src-7yBXPAs6.js +315 -0
  444. package/dist/src-9GyYED0T.js +63 -0
  445. package/dist/src-B9L6qb-Z.js +462 -0
  446. package/dist/src-BEjIVOmq.js +63 -0
  447. package/dist/src-BOnuFlI4.js +23 -0
  448. package/dist/src-BY3On_zO.js +462 -0
  449. package/dist/src-BdgKAlMQ.js +20 -0
  450. package/dist/src-BkEtHLLy.js +462 -0
  451. package/dist/src-C52A3OwC.js +301 -0
  452. package/dist/src-C8cbfjat.js +173 -0
  453. package/dist/src-CDeWGebw.js +315 -0
  454. package/dist/src-CNAVUFC6.js +462 -0
  455. package/dist/src-CQ2lZvdF.js +462 -0
  456. package/dist/src-Cdwn9xpG.js +462 -0
  457. package/dist/src-CyCLoqIP.js +63 -0
  458. package/dist/src-D-OND_62.js +301 -0
  459. package/dist/src-DB6dPsbY.js +63 -0
  460. package/dist/src-DE4mH0BB.js +63 -0
  461. package/dist/src-DFo8lVfV.js +300 -0
  462. package/dist/src-DJbpP4Gs.js +462 -0
  463. package/dist/src-DPfnArdr.js +300 -0
  464. package/dist/src-DTft7Qvt.js +63 -0
  465. package/dist/src-DgvFah8g.js +153 -0
  466. package/dist/src-TYvV_oFO.js +63 -0
  467. package/dist/src-krHV0uVj.js +315 -0
  468. package/dist/src-lltU5gkh.js +20 -0
  469. package/dist/src-tF0sBtr3.js +462 -0
  470. package/dist/sub-agent-tools-BwOxHu6f.js +39 -0
  471. package/dist/sub-agent-tools-CE8pVUdb.js +39 -0
  472. package/dist/sub-agent-tools-CJVEIF1F.js +39 -0
  473. package/dist/sub-agent-tools-CQWNfYn_.js +39 -0
  474. package/dist/sub-agent-tools-CViiqebO.js +39 -0
  475. package/dist/sub-agent-tools-DgT4jUHC.js +39 -0
  476. package/dist/sub-agent-tools-Lbin_4S3.js +39 -0
  477. package/dist/sub-agent-tools-f4X1M-li.js +39 -0
  478. package/dist/tool-policy-1EBdJkSG.js +190 -0
  479. package/dist/tool-policy-B1bL0X-E.js +189 -0
  480. package/dist/tool-policy-CfWEnRxy.js +190 -0
  481. package/dist/tool-policy-NLbucl5-.js +189 -0
  482. package/dist/tool-policy-yNVTLNDY.js +189 -0
  483. package/dist/tts-elevenlabs-Bk24wQ2V.js +64 -0
  484. package/dist/tts-elevenlabs-CCeOqqrh.js +64 -0
  485. package/dist/tts-elevenlabs-CHrJZuNW.js +64 -0
  486. package/dist/tts-elevenlabs-DHqQsqMz.js +64 -0
  487. package/dist/tts-elevenlabs-TUKPkSV2.js +64 -0
  488. package/dist/vision-BMRKyu3c.js +167 -0
  489. package/dist/vision-CW1YCKed.js +167 -0
  490. package/dist/vision-DPLmrwUA.js +167 -0
  491. package/dist/vision-Q4EOcBS6.js +167 -0
  492. package/dist/vision-XyAGO5La.js +167 -0
  493. package/dist/vision-tools-B5DNR28M.js +5 -0
  494. package/dist/vision-tools-CC9HSuvN.js +51 -0
  495. package/dist/vision-tools-Ca3OhtdX.js +51 -0
  496. package/dist/vision-tools-CpU2fSRv.js +51 -0
  497. package/dist/vision-tools-Ct52djW8.js +51 -0
  498. package/dist/vision-tools-DF7N2DDI.js +5 -0
  499. package/dist/vision-tools-DVYx9-Jw.js +5 -0
  500. package/dist/vision-tools-DyP6lRA5.js +5 -0
  501. package/dist/vision-tools-RIVKEUeY.js +5 -0
  502. package/dist/vision-tools-kYb3effk.js +51 -0
  503. package/dist/voice-transcription-B1D1rpca.js +170 -0
  504. package/dist/voice-transcription-Bz2y0nPK.js +170 -0
  505. package/dist/voice-transcription-CVFcHpPF.js +170 -0
  506. package/dist/voice-transcription-CvQuWPYK.js +170 -0
  507. package/dist/voice-transcription-YqndiLA7.js +170 -0
  508. package/dist/website-watch-tools-B036Y8OQ.js +176 -0
  509. package/dist/website-watch-tools-B8CHie8v.js +5 -0
  510. package/dist/website-watch-tools-Brk5oIEv.js +176 -0
  511. package/dist/website-watch-tools-CJqRj_GB.js +5 -0
  512. package/dist/website-watch-tools-CSSEu3Qy.js +5 -0
  513. package/dist/website-watch-tools-D92dkYZa.js +176 -0
  514. package/dist/website-watch-tools-Du_a8lXq.js +176 -0
  515. package/dist/website-watch-tools-UdTBGgRk.js +5 -0
  516. package/package.json +5 -3
  517. package/static/chat.html +18 -4
  518. package/static/web/assets/index-D2ekZ-uM.js +75 -0
  519. package/static/web/assets/index-D_9lvvup.css +1 -0
  520. package/static/web/index.html +2 -2
  521. package/static/web/assets/index-B5N1LHGR.css +0 -1
  522. package/static/web/assets/index-Bf8pf7Wg.js +0 -75
@@ -0,0 +1,170 @@
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 fs_extra = require_chunk.__toESM(require("fs-extra"));
5
+ const path = require_chunk.__toESM(require("path"));
6
+ const https = require_chunk.__toESM(require("https"));
7
+
8
+ //#region src/services/voice-transcription.ts
9
+ require_paths$1.init_paths();
10
+ const MAX_AUDIO_BYTES = 25 * 1024 * 1024;
11
+ const ALLOWED_AUDIO_EXTENSIONS = new Set([
12
+ ".ogg",
13
+ ".oga",
14
+ ".mp3",
15
+ ".wav",
16
+ ".m4a",
17
+ ".mp4",
18
+ ".mpeg",
19
+ ".webm"
20
+ ]);
21
+ function sanitizeForError(value) {
22
+ return String(value ?? "").replace(/[\r\n\t]+/g, " ").slice(0, 160);
23
+ }
24
+ async function loadAudioInput(audioPathOrBuffer) {
25
+ if (Buffer.isBuffer(audioPathOrBuffer)) {
26
+ if (audioPathOrBuffer.length === 0) throw new Error("Audio input is empty");
27
+ if (audioPathOrBuffer.length > MAX_AUDIO_BYTES) throw new Error(`Audio input exceeds ${MAX_AUDIO_BYTES} bytes`);
28
+ return audioPathOrBuffer;
29
+ }
30
+ const resolvedPath = path.default.resolve(audioPathOrBuffer);
31
+ const ext = path.default.extname(resolvedPath).toLowerCase();
32
+ if (!ALLOWED_AUDIO_EXTENSIONS.has(ext)) throw new Error(`Unsupported audio file type: ${ext || "unknown"}`);
33
+ const buf = await fs_extra.default.readFile(resolvedPath);
34
+ if (buf.length === 0) throw new Error("Audio input is empty");
35
+ if (buf.length > MAX_AUDIO_BYTES) throw new Error(`Audio input exceeds ${MAX_AUDIO_BYTES} bytes`);
36
+ return buf;
37
+ }
38
+ async function getConfig() {
39
+ try {
40
+ const cfg = await fs_extra.default.readJson(require_paths.getConfigPath());
41
+ const providerId = cfg?.provider?.providerId;
42
+ const apiKey = cfg?.provider?.apiKey;
43
+ return {
44
+ providerId,
45
+ apiKey
46
+ };
47
+ } catch {
48
+ return {};
49
+ }
50
+ }
51
+ async function transcribeWithWhisper(buffer, apiKey) {
52
+ return new Promise((resolve, reject) => {
53
+ const boundary = "----HyperClaw" + Date.now();
54
+ const header = [
55
+ `--${boundary}`,
56
+ "Content-Disposition: form-data; name=\"file\"; filename=\"audio.ogg\"",
57
+ "Content-Type: application/octet-stream",
58
+ "",
59
+ ""
60
+ ].join("\r\n");
61
+ const footer = `\r\n--${boundary}\r\nContent-Disposition: form-data; name="model"\r\n\r\nwhisper-1\r\n--${boundary}--\r\n`;
62
+ const body = Buffer.concat([
63
+ Buffer.from(header, "utf8"),
64
+ buffer,
65
+ Buffer.from(footer, "utf8")
66
+ ]);
67
+ const req = https.default.request({
68
+ hostname: "api.openai.com",
69
+ port: 443,
70
+ path: "/v1/audio/transcriptions",
71
+ method: "POST",
72
+ headers: {
73
+ "Authorization": `Bearer ${apiKey}`,
74
+ "Content-Type": `multipart/form-data; boundary=${boundary}`,
75
+ "Content-Length": body.length
76
+ }
77
+ }, (res) => {
78
+ let data = "";
79
+ res.on("data", (c) => data += c);
80
+ res.on("end", () => {
81
+ try {
82
+ const j = JSON.parse(data);
83
+ resolve(j.text?.trim() || "[No transcription]");
84
+ } catch {
85
+ resolve(`[Transcription error: ${data.slice(0, 100)}]`);
86
+ }
87
+ });
88
+ });
89
+ req.on("error", reject);
90
+ req.write(body);
91
+ req.end();
92
+ });
93
+ }
94
+ async function transcribeWithGemini(buffer, apiKey) {
95
+ const base64 = buffer.toString("base64");
96
+ const payload = JSON.stringify({
97
+ contents: [{ parts: [{ text: "Transcribe this audio to text. Output only the transcription, no other text." }, { inlineData: {
98
+ mimeType: "audio/ogg",
99
+ data: base64
100
+ } }] }],
101
+ generationConfig: { maxOutputTokens: 1024 }
102
+ });
103
+ return new Promise((resolve, reject) => {
104
+ const req = https.default.request({
105
+ hostname: "generativelanguage.googleapis.com",
106
+ port: 443,
107
+ path: "/v1beta/models/gemini-2.0-flash:generateContent?key=" + encodeURIComponent(apiKey),
108
+ method: "POST",
109
+ headers: {
110
+ "Content-Type": "application/json",
111
+ "Content-Length": Buffer.byteLength(payload)
112
+ }
113
+ }, (res) => {
114
+ let data = "";
115
+ res.on("data", (c) => data += c);
116
+ res.on("end", () => {
117
+ try {
118
+ const j = JSON.parse(data);
119
+ const text = j.candidates?.[0]?.content?.parts?.[0]?.text?.trim();
120
+ resolve(text || "[No transcription]");
121
+ } catch {
122
+ resolve(`[Transcription error: ${data.slice(0, 100)}]`);
123
+ }
124
+ });
125
+ });
126
+ req.on("error", reject);
127
+ req.write(payload);
128
+ req.end();
129
+ });
130
+ }
131
+ /**
132
+
133
+ * Transcribe audio using configured provider or fallbacks.
134
+
135
+ * Providers: OpenAI (Whisper), Google (Gemini), OpenRouter.
136
+
137
+ * Env: OPENAI_API_KEY, WHISPER_API_KEY, GOOGLE_AI_API_KEY.
138
+
139
+ */
140
+ async function transcribeVoiceNote(audioPathOrBuffer, apiKey) {
141
+ let buffer;
142
+ try {
143
+ buffer = await loadAudioInput(audioPathOrBuffer);
144
+ } catch (e) {
145
+ return `[Transcription failed: ${sanitizeForError(e?.message)}]`;
146
+ }
147
+ const cfg = await getConfig();
148
+ const openaiKey = apiKey || process.env.OPENAI_API_KEY || process.env.WHISPER_API_KEY || (cfg.providerId === "openai" || cfg.providerId === "openrouter" ? cfg.apiKey : "");
149
+ const googleKey = process.env.GOOGLE_AI_API_KEY || (cfg.providerId === "google" ? cfg.apiKey : "");
150
+ if (cfg.providerId === "google" && googleKey) try {
151
+ return await transcribeWithGemini(buffer, googleKey);
152
+ } catch {}
153
+ if ((cfg.providerId === "openrouter" || cfg.providerId === "openai") && openaiKey) try {
154
+ return await transcribeWithWhisper(buffer, openaiKey);
155
+ } catch {}
156
+ if (openaiKey) try {
157
+ return await transcribeWithWhisper(buffer, openaiKey);
158
+ } catch (e) {
159
+ return `[Transcription failed: ${sanitizeForError(e?.message)}]`;
160
+ }
161
+ if (googleKey) try {
162
+ return await transcribeWithGemini(buffer, googleKey);
163
+ } catch (e) {
164
+ return `[Transcription failed: ${sanitizeForError(e?.message)}]`;
165
+ }
166
+ return "[Voice note — add OPENAI_API_KEY or GOOGLE_AI_API_KEY (or select OpenAI/Google provider in the wizard) for transcription]";
167
+ }
168
+
169
+ //#endregion
170
+ exports.transcribeVoiceNote = transcribeVoiceNote;
@@ -0,0 +1,170 @@
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 fs_extra = require_chunk.__toESM(require("fs-extra"));
5
+ const path = require_chunk.__toESM(require("path"));
6
+ const https = require_chunk.__toESM(require("https"));
7
+
8
+ //#region src/services/voice-transcription.ts
9
+ require_paths$1.init_paths();
10
+ const MAX_AUDIO_BYTES = 25 * 1024 * 1024;
11
+ const ALLOWED_AUDIO_EXTENSIONS = new Set([
12
+ ".ogg",
13
+ ".oga",
14
+ ".mp3",
15
+ ".wav",
16
+ ".m4a",
17
+ ".mp4",
18
+ ".mpeg",
19
+ ".webm"
20
+ ]);
21
+ function sanitizeForError(value) {
22
+ return String(value ?? "").replace(/[\r\n\t]+/g, " ").slice(0, 160);
23
+ }
24
+ async function loadAudioInput(audioPathOrBuffer) {
25
+ if (Buffer.isBuffer(audioPathOrBuffer)) {
26
+ if (audioPathOrBuffer.length === 0) throw new Error("Audio input is empty");
27
+ if (audioPathOrBuffer.length > MAX_AUDIO_BYTES) throw new Error(`Audio input exceeds ${MAX_AUDIO_BYTES} bytes`);
28
+ return audioPathOrBuffer;
29
+ }
30
+ const resolvedPath = path.default.resolve(audioPathOrBuffer);
31
+ const ext = path.default.extname(resolvedPath).toLowerCase();
32
+ if (!ALLOWED_AUDIO_EXTENSIONS.has(ext)) throw new Error(`Unsupported audio file type: ${ext || "unknown"}`);
33
+ const buf = await fs_extra.default.readFile(resolvedPath);
34
+ if (buf.length === 0) throw new Error("Audio input is empty");
35
+ if (buf.length > MAX_AUDIO_BYTES) throw new Error(`Audio input exceeds ${MAX_AUDIO_BYTES} bytes`);
36
+ return buf;
37
+ }
38
+ async function getConfig() {
39
+ try {
40
+ const cfg = await fs_extra.default.readJson(require_paths.getConfigPath());
41
+ const providerId = cfg?.provider?.providerId;
42
+ const apiKey = cfg?.provider?.apiKey;
43
+ return {
44
+ providerId,
45
+ apiKey
46
+ };
47
+ } catch {
48
+ return {};
49
+ }
50
+ }
51
+ async function transcribeWithWhisper(buffer, apiKey) {
52
+ return new Promise((resolve, reject) => {
53
+ const boundary = "----HyperClaw" + Date.now();
54
+ const header = [
55
+ `--${boundary}`,
56
+ "Content-Disposition: form-data; name=\"file\"; filename=\"audio.ogg\"",
57
+ "Content-Type: application/octet-stream",
58
+ "",
59
+ ""
60
+ ].join("\r\n");
61
+ const footer = `\r\n--${boundary}\r\nContent-Disposition: form-data; name="model"\r\n\r\nwhisper-1\r\n--${boundary}--\r\n`;
62
+ const body = Buffer.concat([
63
+ Buffer.from(header, "utf8"),
64
+ buffer,
65
+ Buffer.from(footer, "utf8")
66
+ ]);
67
+ const req = https.default.request({
68
+ hostname: "api.openai.com",
69
+ port: 443,
70
+ path: "/v1/audio/transcriptions",
71
+ method: "POST",
72
+ headers: {
73
+ "Authorization": `Bearer ${apiKey}`,
74
+ "Content-Type": `multipart/form-data; boundary=${boundary}`,
75
+ "Content-Length": body.length
76
+ }
77
+ }, (res) => {
78
+ let data = "";
79
+ res.on("data", (c) => data += c);
80
+ res.on("end", () => {
81
+ try {
82
+ const j = JSON.parse(data);
83
+ resolve(j.text?.trim() || "[No transcription]");
84
+ } catch {
85
+ resolve(`[Transcription error: ${data.slice(0, 100)}]`);
86
+ }
87
+ });
88
+ });
89
+ req.on("error", reject);
90
+ req.write(body);
91
+ req.end();
92
+ });
93
+ }
94
+ async function transcribeWithGemini(buffer, apiKey) {
95
+ const base64 = buffer.toString("base64");
96
+ const payload = JSON.stringify({
97
+ contents: [{ parts: [{ text: "Transcribe this audio to text. Output only the transcription, no other text." }, { inlineData: {
98
+ mimeType: "audio/ogg",
99
+ data: base64
100
+ } }] }],
101
+ generationConfig: { maxOutputTokens: 1024 }
102
+ });
103
+ return new Promise((resolve, reject) => {
104
+ const req = https.default.request({
105
+ hostname: "generativelanguage.googleapis.com",
106
+ port: 443,
107
+ path: "/v1beta/models/gemini-2.0-flash:generateContent?key=" + encodeURIComponent(apiKey),
108
+ method: "POST",
109
+ headers: {
110
+ "Content-Type": "application/json",
111
+ "Content-Length": Buffer.byteLength(payload)
112
+ }
113
+ }, (res) => {
114
+ let data = "";
115
+ res.on("data", (c) => data += c);
116
+ res.on("end", () => {
117
+ try {
118
+ const j = JSON.parse(data);
119
+ const text = j.candidates?.[0]?.content?.parts?.[0]?.text?.trim();
120
+ resolve(text || "[No transcription]");
121
+ } catch {
122
+ resolve(`[Transcription error: ${data.slice(0, 100)}]`);
123
+ }
124
+ });
125
+ });
126
+ req.on("error", reject);
127
+ req.write(payload);
128
+ req.end();
129
+ });
130
+ }
131
+ /**
132
+
133
+ * Transcribe audio using configured provider or fallbacks.
134
+
135
+ * Providers: OpenAI (Whisper), Google (Gemini), OpenRouter.
136
+
137
+ * Env: OPENAI_API_KEY, WHISPER_API_KEY, GOOGLE_AI_API_KEY.
138
+
139
+ */
140
+ async function transcribeVoiceNote(audioPathOrBuffer, apiKey) {
141
+ let buffer;
142
+ try {
143
+ buffer = await loadAudioInput(audioPathOrBuffer);
144
+ } catch (e) {
145
+ return `[Transcription failed: ${sanitizeForError(e?.message)}]`;
146
+ }
147
+ const cfg = await getConfig();
148
+ const openaiKey = apiKey || process.env.OPENAI_API_KEY || process.env.WHISPER_API_KEY || (cfg.providerId === "openai" || cfg.providerId === "openrouter" ? cfg.apiKey : "");
149
+ const googleKey = process.env.GOOGLE_AI_API_KEY || (cfg.providerId === "google" ? cfg.apiKey : "");
150
+ if (cfg.providerId === "google" && googleKey) try {
151
+ return await transcribeWithGemini(buffer, googleKey);
152
+ } catch {}
153
+ if ((cfg.providerId === "openrouter" || cfg.providerId === "openai") && openaiKey) try {
154
+ return await transcribeWithWhisper(buffer, openaiKey);
155
+ } catch {}
156
+ if (openaiKey) try {
157
+ return await transcribeWithWhisper(buffer, openaiKey);
158
+ } catch (e) {
159
+ return `[Transcription failed: ${sanitizeForError(e?.message)}]`;
160
+ }
161
+ if (googleKey) try {
162
+ return await transcribeWithGemini(buffer, googleKey);
163
+ } catch (e) {
164
+ return `[Transcription failed: ${sanitizeForError(e?.message)}]`;
165
+ }
166
+ return "[Voice note — add OPENAI_API_KEY or GOOGLE_AI_API_KEY (or select OpenAI/Google provider in the wizard) for transcription]";
167
+ }
168
+
169
+ //#endregion
170
+ exports.transcribeVoiceNote = transcribeVoiceNote;
@@ -0,0 +1,170 @@
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 fs_extra = require_chunk.__toESM(require("fs-extra"));
5
+ const path = require_chunk.__toESM(require("path"));
6
+ const https = require_chunk.__toESM(require("https"));
7
+
8
+ //#region src/services/voice-transcription.ts
9
+ require_paths$1.init_paths();
10
+ const MAX_AUDIO_BYTES = 25 * 1024 * 1024;
11
+ const ALLOWED_AUDIO_EXTENSIONS = new Set([
12
+ ".ogg",
13
+ ".oga",
14
+ ".mp3",
15
+ ".wav",
16
+ ".m4a",
17
+ ".mp4",
18
+ ".mpeg",
19
+ ".webm"
20
+ ]);
21
+ function sanitizeForError(value) {
22
+ return String(value ?? "").replace(/[\r\n\t]+/g, " ").slice(0, 160);
23
+ }
24
+ async function loadAudioInput(audioPathOrBuffer) {
25
+ if (Buffer.isBuffer(audioPathOrBuffer)) {
26
+ if (audioPathOrBuffer.length === 0) throw new Error("Audio input is empty");
27
+ if (audioPathOrBuffer.length > MAX_AUDIO_BYTES) throw new Error(`Audio input exceeds ${MAX_AUDIO_BYTES} bytes`);
28
+ return audioPathOrBuffer;
29
+ }
30
+ const resolvedPath = path.default.resolve(audioPathOrBuffer);
31
+ const ext = path.default.extname(resolvedPath).toLowerCase();
32
+ if (!ALLOWED_AUDIO_EXTENSIONS.has(ext)) throw new Error(`Unsupported audio file type: ${ext || "unknown"}`);
33
+ const buf = await fs_extra.default.readFile(resolvedPath);
34
+ if (buf.length === 0) throw new Error("Audio input is empty");
35
+ if (buf.length > MAX_AUDIO_BYTES) throw new Error(`Audio input exceeds ${MAX_AUDIO_BYTES} bytes`);
36
+ return buf;
37
+ }
38
+ async function getConfig() {
39
+ try {
40
+ const cfg = await fs_extra.default.readJson(require_paths.getConfigPath());
41
+ const providerId = cfg?.provider?.providerId;
42
+ const apiKey = cfg?.provider?.apiKey;
43
+ return {
44
+ providerId,
45
+ apiKey
46
+ };
47
+ } catch {
48
+ return {};
49
+ }
50
+ }
51
+ async function transcribeWithWhisper(buffer, apiKey) {
52
+ return new Promise((resolve, reject) => {
53
+ const boundary = "----HyperClaw" + Date.now();
54
+ const header = [
55
+ `--${boundary}`,
56
+ "Content-Disposition: form-data; name=\"file\"; filename=\"audio.ogg\"",
57
+ "Content-Type: application/octet-stream",
58
+ "",
59
+ ""
60
+ ].join("\r\n");
61
+ const footer = `\r\n--${boundary}\r\nContent-Disposition: form-data; name="model"\r\n\r\nwhisper-1\r\n--${boundary}--\r\n`;
62
+ const body = Buffer.concat([
63
+ Buffer.from(header, "utf8"),
64
+ buffer,
65
+ Buffer.from(footer, "utf8")
66
+ ]);
67
+ const req = https.default.request({
68
+ hostname: "api.openai.com",
69
+ port: 443,
70
+ path: "/v1/audio/transcriptions",
71
+ method: "POST",
72
+ headers: {
73
+ "Authorization": `Bearer ${apiKey}`,
74
+ "Content-Type": `multipart/form-data; boundary=${boundary}`,
75
+ "Content-Length": body.length
76
+ }
77
+ }, (res) => {
78
+ let data = "";
79
+ res.on("data", (c) => data += c);
80
+ res.on("end", () => {
81
+ try {
82
+ const j = JSON.parse(data);
83
+ resolve(j.text?.trim() || "[No transcription]");
84
+ } catch {
85
+ resolve(`[Transcription error: ${data.slice(0, 100)}]`);
86
+ }
87
+ });
88
+ });
89
+ req.on("error", reject);
90
+ req.write(body);
91
+ req.end();
92
+ });
93
+ }
94
+ async function transcribeWithGemini(buffer, apiKey) {
95
+ const base64 = buffer.toString("base64");
96
+ const payload = JSON.stringify({
97
+ contents: [{ parts: [{ text: "Transcribe this audio to text. Output only the transcription, no other text." }, { inlineData: {
98
+ mimeType: "audio/ogg",
99
+ data: base64
100
+ } }] }],
101
+ generationConfig: { maxOutputTokens: 1024 }
102
+ });
103
+ return new Promise((resolve, reject) => {
104
+ const req = https.default.request({
105
+ hostname: "generativelanguage.googleapis.com",
106
+ port: 443,
107
+ path: "/v1beta/models/gemini-2.0-flash:generateContent?key=" + encodeURIComponent(apiKey),
108
+ method: "POST",
109
+ headers: {
110
+ "Content-Type": "application/json",
111
+ "Content-Length": Buffer.byteLength(payload)
112
+ }
113
+ }, (res) => {
114
+ let data = "";
115
+ res.on("data", (c) => data += c);
116
+ res.on("end", () => {
117
+ try {
118
+ const j = JSON.parse(data);
119
+ const text = j.candidates?.[0]?.content?.parts?.[0]?.text?.trim();
120
+ resolve(text || "[No transcription]");
121
+ } catch {
122
+ resolve(`[Transcription error: ${data.slice(0, 100)}]`);
123
+ }
124
+ });
125
+ });
126
+ req.on("error", reject);
127
+ req.write(payload);
128
+ req.end();
129
+ });
130
+ }
131
+ /**
132
+
133
+ * Transcribe audio using configured provider or fallbacks.
134
+
135
+ * Providers: OpenAI (Whisper), Google (Gemini), OpenRouter.
136
+
137
+ * Env: OPENAI_API_KEY, WHISPER_API_KEY, GOOGLE_AI_API_KEY.
138
+
139
+ */
140
+ async function transcribeVoiceNote(audioPathOrBuffer, apiKey) {
141
+ let buffer;
142
+ try {
143
+ buffer = await loadAudioInput(audioPathOrBuffer);
144
+ } catch (e) {
145
+ return `[Transcription failed: ${sanitizeForError(e?.message)}]`;
146
+ }
147
+ const cfg = await getConfig();
148
+ const openaiKey = apiKey || process.env.OPENAI_API_KEY || process.env.WHISPER_API_KEY || (cfg.providerId === "openai" || cfg.providerId === "openrouter" ? cfg.apiKey : "");
149
+ const googleKey = process.env.GOOGLE_AI_API_KEY || (cfg.providerId === "google" ? cfg.apiKey : "");
150
+ if (cfg.providerId === "google" && googleKey) try {
151
+ return await transcribeWithGemini(buffer, googleKey);
152
+ } catch {}
153
+ if ((cfg.providerId === "openrouter" || cfg.providerId === "openai") && openaiKey) try {
154
+ return await transcribeWithWhisper(buffer, openaiKey);
155
+ } catch {}
156
+ if (openaiKey) try {
157
+ return await transcribeWithWhisper(buffer, openaiKey);
158
+ } catch (e) {
159
+ return `[Transcription failed: ${sanitizeForError(e?.message)}]`;
160
+ }
161
+ if (googleKey) try {
162
+ return await transcribeWithGemini(buffer, googleKey);
163
+ } catch (e) {
164
+ return `[Transcription failed: ${sanitizeForError(e?.message)}]`;
165
+ }
166
+ return "[Voice note — add OPENAI_API_KEY or GOOGLE_AI_API_KEY (or select OpenAI/Google provider in the wizard) for transcription]";
167
+ }
168
+
169
+ //#endregion
170
+ exports.transcribeVoiceNote = transcribeVoiceNote;
@@ -0,0 +1,170 @@
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 fs_extra = require_chunk.__toESM(require("fs-extra"));
5
+ const path = require_chunk.__toESM(require("path"));
6
+ const https = require_chunk.__toESM(require("https"));
7
+
8
+ //#region src/services/voice-transcription.ts
9
+ require_paths$1.init_paths();
10
+ const MAX_AUDIO_BYTES = 25 * 1024 * 1024;
11
+ const ALLOWED_AUDIO_EXTENSIONS = new Set([
12
+ ".ogg",
13
+ ".oga",
14
+ ".mp3",
15
+ ".wav",
16
+ ".m4a",
17
+ ".mp4",
18
+ ".mpeg",
19
+ ".webm"
20
+ ]);
21
+ function sanitizeForError(value) {
22
+ return String(value ?? "").replace(/[\r\n\t]+/g, " ").slice(0, 160);
23
+ }
24
+ async function loadAudioInput(audioPathOrBuffer) {
25
+ if (Buffer.isBuffer(audioPathOrBuffer)) {
26
+ if (audioPathOrBuffer.length === 0) throw new Error("Audio input is empty");
27
+ if (audioPathOrBuffer.length > MAX_AUDIO_BYTES) throw new Error(`Audio input exceeds ${MAX_AUDIO_BYTES} bytes`);
28
+ return audioPathOrBuffer;
29
+ }
30
+ const resolvedPath = path.default.resolve(audioPathOrBuffer);
31
+ const ext = path.default.extname(resolvedPath).toLowerCase();
32
+ if (!ALLOWED_AUDIO_EXTENSIONS.has(ext)) throw new Error(`Unsupported audio file type: ${ext || "unknown"}`);
33
+ const buf = await fs_extra.default.readFile(resolvedPath);
34
+ if (buf.length === 0) throw new Error("Audio input is empty");
35
+ if (buf.length > MAX_AUDIO_BYTES) throw new Error(`Audio input exceeds ${MAX_AUDIO_BYTES} bytes`);
36
+ return buf;
37
+ }
38
+ async function getConfig() {
39
+ try {
40
+ const cfg = await fs_extra.default.readJson(require_paths.getConfigPath());
41
+ const providerId = cfg?.provider?.providerId;
42
+ const apiKey = cfg?.provider?.apiKey;
43
+ return {
44
+ providerId,
45
+ apiKey
46
+ };
47
+ } catch {
48
+ return {};
49
+ }
50
+ }
51
+ async function transcribeWithWhisper(buffer, apiKey) {
52
+ return new Promise((resolve, reject) => {
53
+ const boundary = "----HyperClaw" + Date.now();
54
+ const header = [
55
+ `--${boundary}`,
56
+ "Content-Disposition: form-data; name=\"file\"; filename=\"audio.ogg\"",
57
+ "Content-Type: application/octet-stream",
58
+ "",
59
+ ""
60
+ ].join("\r\n");
61
+ const footer = `\r\n--${boundary}\r\nContent-Disposition: form-data; name="model"\r\n\r\nwhisper-1\r\n--${boundary}--\r\n`;
62
+ const body = Buffer.concat([
63
+ Buffer.from(header, "utf8"),
64
+ buffer,
65
+ Buffer.from(footer, "utf8")
66
+ ]);
67
+ const req = https.default.request({
68
+ hostname: "api.openai.com",
69
+ port: 443,
70
+ path: "/v1/audio/transcriptions",
71
+ method: "POST",
72
+ headers: {
73
+ "Authorization": `Bearer ${apiKey}`,
74
+ "Content-Type": `multipart/form-data; boundary=${boundary}`,
75
+ "Content-Length": body.length
76
+ }
77
+ }, (res) => {
78
+ let data = "";
79
+ res.on("data", (c) => data += c);
80
+ res.on("end", () => {
81
+ try {
82
+ const j = JSON.parse(data);
83
+ resolve(j.text?.trim() || "[No transcription]");
84
+ } catch {
85
+ resolve(`[Transcription error: ${data.slice(0, 100)}]`);
86
+ }
87
+ });
88
+ });
89
+ req.on("error", reject);
90
+ req.write(body);
91
+ req.end();
92
+ });
93
+ }
94
+ async function transcribeWithGemini(buffer, apiKey) {
95
+ const base64 = buffer.toString("base64");
96
+ const payload = JSON.stringify({
97
+ contents: [{ parts: [{ text: "Transcribe this audio to text. Output only the transcription, no other text." }, { inlineData: {
98
+ mimeType: "audio/ogg",
99
+ data: base64
100
+ } }] }],
101
+ generationConfig: { maxOutputTokens: 1024 }
102
+ });
103
+ return new Promise((resolve, reject) => {
104
+ const req = https.default.request({
105
+ hostname: "generativelanguage.googleapis.com",
106
+ port: 443,
107
+ path: "/v1beta/models/gemini-2.0-flash:generateContent?key=" + encodeURIComponent(apiKey),
108
+ method: "POST",
109
+ headers: {
110
+ "Content-Type": "application/json",
111
+ "Content-Length": Buffer.byteLength(payload)
112
+ }
113
+ }, (res) => {
114
+ let data = "";
115
+ res.on("data", (c) => data += c);
116
+ res.on("end", () => {
117
+ try {
118
+ const j = JSON.parse(data);
119
+ const text = j.candidates?.[0]?.content?.parts?.[0]?.text?.trim();
120
+ resolve(text || "[No transcription]");
121
+ } catch {
122
+ resolve(`[Transcription error: ${data.slice(0, 100)}]`);
123
+ }
124
+ });
125
+ });
126
+ req.on("error", reject);
127
+ req.write(payload);
128
+ req.end();
129
+ });
130
+ }
131
+ /**
132
+
133
+ * Transcribe audio using configured provider or fallbacks.
134
+
135
+ * Providers: OpenAI (Whisper), Google (Gemini), OpenRouter.
136
+
137
+ * Env: OPENAI_API_KEY, WHISPER_API_KEY, GOOGLE_AI_API_KEY.
138
+
139
+ */
140
+ async function transcribeVoiceNote(audioPathOrBuffer, apiKey) {
141
+ let buffer;
142
+ try {
143
+ buffer = await loadAudioInput(audioPathOrBuffer);
144
+ } catch (e) {
145
+ return `[Transcription failed: ${sanitizeForError(e?.message)}]`;
146
+ }
147
+ const cfg = await getConfig();
148
+ const openaiKey = apiKey || process.env.OPENAI_API_KEY || process.env.WHISPER_API_KEY || (cfg.providerId === "openai" || cfg.providerId === "openrouter" ? cfg.apiKey : "");
149
+ const googleKey = process.env.GOOGLE_AI_API_KEY || (cfg.providerId === "google" ? cfg.apiKey : "");
150
+ if (cfg.providerId === "google" && googleKey) try {
151
+ return await transcribeWithGemini(buffer, googleKey);
152
+ } catch {}
153
+ if ((cfg.providerId === "openrouter" || cfg.providerId === "openai") && openaiKey) try {
154
+ return await transcribeWithWhisper(buffer, openaiKey);
155
+ } catch {}
156
+ if (openaiKey) try {
157
+ return await transcribeWithWhisper(buffer, openaiKey);
158
+ } catch (e) {
159
+ return `[Transcription failed: ${sanitizeForError(e?.message)}]`;
160
+ }
161
+ if (googleKey) try {
162
+ return await transcribeWithGemini(buffer, googleKey);
163
+ } catch (e) {
164
+ return `[Transcription failed: ${sanitizeForError(e?.message)}]`;
165
+ }
166
+ return "[Voice note — add OPENAI_API_KEY or GOOGLE_AI_API_KEY (or select OpenAI/Google provider in the wizard) for transcription]";
167
+ }
168
+
169
+ //#endregion
170
+ exports.transcribeVoiceNote = transcribeVoiceNote;