squidclaw 3.0.24 → 3.0.26

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 (329) hide show
  1. package/dist/{accounts-BH9Qo1sQ.js → accounts-BK8I0Svb.js} +7 -7
  2. package/dist/{accounts-Cuwg9Tan.js → accounts-DeqNOvBo.js} +1 -1
  3. package/dist/{accounts-B1RxFghM.js → accounts-KzgPbLHP.js} +1 -1
  4. package/dist/{acp-cli-Ch55Vzud.js → acp-cli-BwG98FYT.js} +8 -8
  5. package/dist/{agent-scope-nEVgVklg.js → agent-scope-Cq4vDGrK.js} +17 -17
  6. package/dist/{agents-B-ig6ydU.js → agents-DXKtU4Il.js} +14 -14
  7. package/dist/{agents.config-w_Z6Fb4-.js → agents.config-BM-2SLCh.js} +2 -2
  8. package/dist/{api-key-rotation-JPmjv-c0.js → api-key-rotation-6i41mEc9.js} +1 -1
  9. package/dist/{audio-preflight-lT9iRnYi.js → audio-preflight-Bzo_zN4j.js} +4 -4
  10. package/dist/{audio-preflight-CZ--cSZh.js → audio-preflight-C-JCwUKe.js} +34 -34
  11. package/dist/{audio-transcription-runner-YiR1ym3a.js → audio-transcription-runner-Cp_lkLCv.js} +1 -1
  12. package/dist/{audio-transcription-runner-D-uxpkbd.js → audio-transcription-runner-DvQksGUE.js} +23 -23
  13. package/dist/{audit-JLT1FqTt.js → audit-DLTgNDFw.js} +29 -29
  14. package/dist/{auth-BlP9BwaD.js → auth-CuObxnC4.js} +1 -1
  15. package/dist/{auth-choice-Czu7271G.js → auth-choice-BVQQneHM.js} +13 -13
  16. package/dist/{auth-choice-ORZHjbsv.js → auth-choice-CXepQc7c.js} +11 -11
  17. package/dist/{auth-choice.apply-helpers-CdoXMtxm.js → auth-choice.apply-helpers-p1y_DmDT.js} +1 -1
  18. package/dist/{auth-profiles-9T4j6jMy.js → auth-profiles-CX4YYu7Z.js} +16 -16
  19. package/dist/{auth-token-BFc70pes.js → auth-token-Dlk7MMsC.js} +1 -1
  20. package/dist/{banner-CwNmI5G-.js → banner-DMfuBV69.js} +2 -2
  21. package/dist/{bonjour-discovery-eqJcK09r.js → bonjour-discovery-BHz2I6_W.js} +1 -1
  22. package/dist/{browser-cli-DCDPC5sg.js → browser-cli-Dvwk4zAD.js} +12 -12
  23. package/dist/build-info.json +3 -3
  24. package/dist/bundled/session-memory/handler.js +127 -12
  25. package/dist/{call-D7jOWSFr.js → call-BlWEBz99.js} +10 -10
  26. package/dist/{channel-account-context-DJ3rHgVO.js → channel-account-context-CQ6rCiGI.js} +5 -5
  27. package/dist/{channel-activity-wuB3-cfR.js → channel-activity-BZKeZQH-.js} +1 -1
  28. package/dist/{channel-options-BS7BSU_5.js → channel-options-CQ-gER0J.js} +3 -3
  29. package/dist/{channel-selection-CFWQq1nS.js → channel-selection-BqwS1Rlq.js} +1 -1
  30. package/dist/{channel-web-C1qYz-HK.js → channel-web-LLzBxZrT.js} +17 -17
  31. package/dist/{channels-cli-CVNqp5q7.js → channels-cli-D4xUEYYC.js} +93 -93
  32. package/dist/{channels-status-issues-Erzzhl2e.js → channels-status-issues-Dz1_R7Ah.js} +1 -1
  33. package/dist/{chrome-CuBHInKC.js → chrome-CZQnp4VH.js} +8 -8
  34. package/dist/{chrome-DiktJpMU.js → chrome-CoRiYsNu.js} +4 -4
  35. package/dist/{clawbot-cli-C3bt-FEP.js → clawbot-cli-2Zlim_pH.js} +11 -11
  36. package/dist/cli/daemon-cli.js +1 -1
  37. package/dist/{cli-Jyqv2jm8.js → cli-CAID9zkL.js} +73 -73
  38. package/dist/{client-COy24r9W.js → client-G9E5HGM2.js} +2 -2
  39. package/dist/{command-registry-DCojicSG.js → command-registry-AHS8_9da.js} +11 -11
  40. package/dist/{command-secret-targets-CZjP-Bm5.js → command-secret-targets-DAu5nw-j.js} +4 -4
  41. package/dist/{commands-DDHiW-As.js → commands-CnX9I_l4.js} +1 -1
  42. package/dist/{commands-registry--ITOJ-cM.js → commands-registry-_r_JONI4.js} +3 -3
  43. package/dist/{completion-cli-DCTv7Ejv.js → completion-cli-BR1r9_h4.js} +13 -13
  44. package/dist/{config-cli-CSPSSP_R.js → config-cli-D0A8Awoo.js} +7 -7
  45. package/dist/{config-guard-CFauJm79.js → config-guard-BHy2f0hU.js} +3 -3
  46. package/dist/{config-validation-Bt3LfFJ0.js → config-validation-BkvDORAk.js} +3 -3
  47. package/dist/{configure-DAol2gT6.js → configure-XmOqwwy9.js} +17 -17
  48. package/dist/{control-ui-assets-d6VtDSeo.js → control-ui-assets-BYEy341x.js} +1 -1
  49. package/dist/{cron-cli-yS1ww1k2.js → cron-cli-QwZcnjJc.js} +11 -11
  50. package/dist/{daemon-cli-B-yZvTqZ.js → daemon-cli-kJfDhzr8.js} +15 -15
  51. package/dist/{daemon-install-CbPLNiIP.js → daemon-install-Chxlu9Kv.js} +4 -4
  52. package/dist/{daemon-install-helpers-CZDVO_MU.js → daemon-install-helpers-CJtiW2RE.js} +11 -11
  53. package/dist/{deliver-6zfT7daI.js → deliver-B4WWPQvt.js} +1 -1
  54. package/dist/{deliver-D-IQEJ52.js → deliver-CL2RW5UB.js} +7 -7
  55. package/dist/deliver-runtime-C08pF1_3.js +61 -0
  56. package/dist/{deliver-runtime-MBexxUuG.js → deliver-runtime-CeE1X9si.js} +3 -3
  57. package/dist/deps-send-discord.runtime-r80y9aXF.js +36 -0
  58. package/dist/deps-send-imessage.runtime-BmocBgPM.js +35 -0
  59. package/dist/deps-send-signal.runtime-ByJt6qz-.js +34 -0
  60. package/dist/deps-send-slack.runtime-C3UUEG9J.js +32 -0
  61. package/dist/{deps-send-telegram.runtime-Irv0ky5l.js → deps-send-telegram.runtime-BHaZAs2h.js} +16 -16
  62. package/dist/{deps-send-whatsapp.runtime-CrxkfP31.js → deps-send-whatsapp.runtime-COv_qoD2.js} +7 -7
  63. package/dist/deps-send-whatsapp.runtime-__ogpmJj.js +119 -0
  64. package/dist/{devices-cli-CPgutgUT.js → devices-cli-DlQGTogF.js} +8 -8
  65. package/dist/{diagnostic-B4w80e4D.js → diagnostic-CLEtu0MC.js} +1 -1
  66. package/dist/{diagnostics-m7hHHbuE.js → diagnostics--O6mo6KH.js} +5 -5
  67. package/dist/{directory-cli-DqObADBL.js → directory-cli-K9qIwxYa.js} +7 -7
  68. package/dist/{dns-cli-CKbwsWBv.js → dns-cli-qtX-WNMF.js} +5 -5
  69. package/dist/{dock-W3cGg46W.js → dock-DJJAj46v.js} +4 -4
  70. package/dist/{docs-cli-BpZtes_j.js → docs-cli--gGxz79Z.js} +4 -4
  71. package/dist/{doctor-completion--7PR_Vqz.js → doctor-completion-CZoEdMS-.js} +2 -2
  72. package/dist/{doctor-config-flow-BDF7TR6O.js → doctor-config-flow-C-h3yV4z.js} +15 -15
  73. package/dist/{enable--Q7yLTZm.js → enable-C8FNY18p.js} +1 -1
  74. package/dist/entry.js +2 -2
  75. package/dist/{exec-approvals-allowlist-B9bcJkGP.js → exec-approvals-allowlist-CtSREgYh.js} +1 -1
  76. package/dist/{exec-approvals-cli-homtziYt.js → exec-approvals-cli-BmM4RpVn.js} +16 -16
  77. package/dist/{exec-safe-bin-runtime-policy-DECo77U6.js → exec-safe-bin-runtime-policy-CfQeDABF.js} +2 -2
  78. package/dist/extensionAPI.js +6 -6
  79. package/dist/{fetch-lq0SDLLE.js → fetch-CtoC2wgs.js} +3 -3
  80. package/dist/{fetch-guard-CbtWqa1E.js → fetch-guard-Dvzi3MjK.js} +1 -1
  81. package/dist/{plugin-sdk/fs-safe-Dqmpk-Fr.js → fs-safe-DPYj7h8A.js} +6 -6
  82. package/dist/{gateway-cli-B3oqskb4.js → gateway-cli-BJHBChfI.js} +153 -153
  83. package/dist/{gateway-rpc-BBBN9ZJk.js → gateway-rpc-D0AmaBzR.js} +1 -1
  84. package/dist/{health-CjXrJkCb.js → health-XFKFZ7ZJ.js} +11 -11
  85. package/dist/{hooks-cli--aKmd8c9.js → hooks-cli-CXsZK8H9.js} +81 -81
  86. package/dist/{hooks-status-BlgSVDvN.js → hooks-status-DMFBAUq8.js} +1 -1
  87. package/dist/{image-VgwN31FZ.js → image-DKkuLtZ4.js} +1 -1
  88. package/dist/{image-BcYt63Jx.js → image-DSWTfuxv.js} +5 -5
  89. package/dist/{image-ops-LFsSCTyI.js → image-ops-B2uuLIGD.js} +10 -10
  90. package/dist/{image-runtime-CwMuTYvd.js → image-runtime-BMavqm9n.js} +3 -3
  91. package/dist/image-runtime-cza2NTiZ.js +55 -0
  92. package/dist/{inspect-CzsXBsew.js → inspect-4c1uL0x5.js} +4 -4
  93. package/dist/{install-safe-path-DqI19VEv.js → install-safe-path-3muwy3fu.js} +25 -25
  94. package/dist/{installs-P-pYAJm1.js → installs-BiQDtPF0.js} +9 -9
  95. package/dist/{ipv4-B95173MB.js → ipv4-sHllwvAI.js} +1 -1
  96. package/dist/{ir-C7He5vmn.js → ir-BukzlgSp.js} +8 -8
  97. package/dist/{issue-format-CbTfB8Hy.js → issue-format-DCcINW-9.js} +1 -1
  98. package/dist/{json-files-rR19q30D.js → json-files-CuJjdF_0.js} +8 -8
  99. package/dist/{lifecycle-core-ChKClWdw.js → lifecycle-core-CqFEhwHn.js} +5 -5
  100. package/dist/{login-qr-CX0rs3A6.js → login-qr-B8P_EAd-.js} +6 -6
  101. package/dist/{login-CjzRATwO.js → login-zoeewfBu.js} +3 -3
  102. package/dist/{logs-cli-DvHsw1WZ.js → logs-cli-D30BUN6y.js} +9 -9
  103. package/dist/{manager-BVfTfggO.js → manager-5OzUkYLf.js} +14 -14
  104. package/dist/{manager-runtime-BXJJSlzC.js → manager-runtime-BxXpVt3x.js} +9 -9
  105. package/dist/{manifest-registry-1ACGW3OR.js → manifest-registry-7kwtbCH-.js} +1 -1
  106. package/dist/{memory-cli-u8eyO3Ec.js → memory-cli-Dj8tyFtt.js} +12 -12
  107. package/dist/{model-D7hZpWTB.js → model-B8p-EsdJ.js} +2 -2
  108. package/dist/{model-catalog-Drh9Rois.js → model-catalog-BWuvEv1x.js} +3 -3
  109. package/dist/{model-picker-DK_vvKCV.js → model-picker-CLhaaagi.js} +4 -4
  110. package/dist/{models-CFXLX9IF.js → models-5VXwJBU2.js} +17 -17
  111. package/dist/{models-cli-PHQyKESa.js → models-cli-Br56IHfy.js} +78 -78
  112. package/dist/{models-config-DAastTau.js → models-config-poV-4Xlx.js} +6 -6
  113. package/dist/{net-CIh5ellr.js → net-CCnbGop3.js} +2 -2
  114. package/dist/{node-cli-o9qcU9GJ.js → node-cli-C8hvYquX.js} +33 -33
  115. package/dist/{node-command-policy-BeTSnoyk.js → node-command-policy-B_D5ucTj.js} +1 -1
  116. package/dist/{node-service-OVe0_CIs.js → node-service-Z0JprJda.js} +1 -1
  117. package/dist/{nodes-cli-kGx_Qa3c.js → nodes-cli-IIc8fTKT.js} +16 -16
  118. package/dist/{nodes-screen-BrMJzhot.js → nodes-screen-DFFmbaXE.js} +7 -7
  119. package/dist/{npm-pack-install-Dn3FiWXB.js → npm-pack-install-B887us7R.js} +18 -18
  120. package/dist/{npm-resolution-ky_uAlXE.js → npm-resolution-CKtyq4FH.js} +4 -4
  121. package/dist/{onboard-channels-oJCC_sJX.js → onboard-channels-_kVo3Apf.js} +21 -21
  122. package/dist/{onboard-custom-CRpsaM3g.js → onboard-custom-CZtjqrY7.js} +4 -4
  123. package/dist/{onboard-helpers-DwEZeaoe.js → onboard-helpers-BP429__H.js} +10 -10
  124. package/dist/{onboard-hooks-DyxckB2C.js → onboard-hooks-CTbjgLDl.js} +4 -4
  125. package/dist/{onboard-D1Qy64JK.js → onboard-lFwpCpC3.js} +6 -6
  126. package/dist/{onboard-remote-ZgpWNq9Z.js → onboard-remote-BlZB0AE9.js} +4 -4
  127. package/dist/{onboard-skills-DEijVfCg.js → onboard-skills-BT2YOXeP.js} +4 -4
  128. package/dist/{onboarding-Mxqy4O1E.js → onboarding-EEd_g8Zg.js} +14 -14
  129. package/dist/{onboarding.finalize-DiOMx6A5.js → onboarding.finalize-Cs1ukjFN.js} +90 -90
  130. package/dist/{onboarding.gateway-config-9wkBCzzO.js → onboarding.gateway-config-C6N8r5Is.js} +18 -18
  131. package/dist/{onboarding.secret-input-DRnoQSlI.js → onboarding.secret-input-BTK1IG-J.js} +1 -1
  132. package/dist/{openai-model-default-DqE4bNtd.js → openai-model-default-COzeuAI4.js} +2 -2
  133. package/dist/{outbound-CwzUo-rx.js → outbound-B7m9Vcd2.js} +3 -3
  134. package/dist/{outbound-attachment-Bedqixj2.js → outbound-attachment-fdEhzyl9.js} +2 -2
  135. package/dist/{pairing-cli-CsYP0at7.js → pairing-cli-NhoRKes6.js} +8 -8
  136. package/dist/{pairing-labels-CX4CtqRa.js → pairing-labels-CnTvFrUT.js} +1 -1
  137. package/dist/{pairing-store-BC4mnG9S.js → pairing-store-D0eOXyby.js} +3 -3
  138. package/dist/{plugin-sdk/path-alias-guards-gBhrAn14.js → path-alias-guards-vfYYQFIg.js} +1 -1
  139. package/dist/{path-safety-D7CjFQvf.js → path-safety-C95DzArw.js} +1 -1
  140. package/dist/{paths-D6mnO6Ni.js → paths-DfuVHiHu.js} +9 -9
  141. package/dist/{pi-embedded-BN8fghaF.js → pi-embedded-BR5y0dLa.js} +24 -24
  142. package/dist/{pi-embedded-helpers-A9VYPVCH.js → pi-embedded-helpers-CEHpGDRs.js} +3 -3
  143. package/dist/{pi-embedded-helpers-DtCOZSv-.js → pi-embedded-helpers-qCAK_a65.js} +6 -6
  144. package/dist/{pi-model-discovery-Cr1q2cJt.js → pi-model-discovery-CKUePiDc.js} +1 -1
  145. package/dist/{pi-model-discovery-runtime-BHmdAKBK.js → pi-model-discovery-runtime-CNLKih0w.js} +5 -5
  146. package/dist/{pi-tools.before-tool-call.runtime-duKHqrMc.js → pi-tools.before-tool-call.runtime-Bba7rXQq.js} +5 -5
  147. package/dist/{pi-tools.policy-D3RA94WF.js → pi-tools.policy-BwWnFLLV.js} +5 -5
  148. package/dist/{plugin-auto-enable-a3TK3OPT.js → plugin-auto-enable-DJkHW_LG.js} +3 -3
  149. package/dist/{plugin-registry-CFqqDqQV.js → plugin-registry-D3PnPE1D.js} +3 -3
  150. package/dist/plugin-sdk/discord.js +6 -6
  151. package/dist/plugin-sdk/index.js +50 -50
  152. package/dist/plugin-sdk/mattermost.js +3 -3
  153. package/dist/plugin-sdk/signal.js +2 -2
  154. package/dist/{plugins-Bc7YM9X-.js → plugins-BDTkSIi7.js} +2 -2
  155. package/dist/{plugins-cli-vQi8tFye.js → plugins-cli-BA_2daJe.js} +83 -83
  156. package/dist/{ports-DMeUt80n.js → ports-0jLyYbvQ.js} +2 -2
  157. package/dist/{ports-BzfeaNjw.js → ports-Be82TlEg.js} +1 -1
  158. package/dist/{program-Nott_VTb.js → program-D_xdLzmM.js} +81 -81
  159. package/dist/{prompt-select-styled-7mnlZgrQ.js → prompt-select-styled-BsheNEnh.js} +40 -40
  160. package/dist/{provider-auth-helpers-_77rN3Zc.js → provider-auth-helpers-B5kD4Lt6.js} +5 -5
  161. package/dist/{proxy-env-BiKHVg2h.js → proxy-env-CQTuxZoS.js} +1 -1
  162. package/dist/{push-apns-Ce1zzNYB.js → push-apns-BbenjEX4.js} +5 -5
  163. package/dist/{pw-ai-CM87tQwG.js → pw-ai-Du22SYoO.js} +1 -1
  164. package/dist/{pw-ai-CAhTwexx.js → pw-ai-wo5t_KO_.js} +18 -18
  165. package/dist/{plugin-sdk/qmd-manager-6bozlfFg.js → qmd-manager-BkSWV1Q1.js} +17 -11
  166. package/dist/{qr-cli-DzjBpGix.js → qr-cli-DSMYIp-D.js} +2 -2
  167. package/dist/{query-expansion-C0HUJbRn.js → query-expansion-DI9INxTg.js} +12 -12
  168. package/dist/{redact-snapshot-C0McNGqh.js → redact-snapshot-B2YFI3cO.js} +1 -1
  169. package/dist/{register.agent-DtjNdvUh.js → register.agent-Dk_5V5oA.js} +94 -94
  170. package/dist/register.configure-C8OFfGln.js +165 -0
  171. package/dist/{register.maintenance-DERKsSgi.js → register.maintenance-CluQOq8b.js} +95 -95
  172. package/dist/{register.message-DkYxt6gZ.js → register.message-BCTXT5yK.js} +74 -74
  173. package/dist/{register.onboard-BtfW83M0.js → register.onboard-C64oXnvq.js} +18 -18
  174. package/dist/{register.setup-Ba9gMkRk.js → register.setup-Dl3nk2Ui.js} +21 -21
  175. package/dist/{register.status-health-sessions-BILdpWJV.js → register.status-health-sessions-BHtbPeCO.js} +88 -88
  176. package/dist/{register.subclis-Dfm_Zu31.js → register.subclis-CDMFyaKR.js} +31 -31
  177. package/dist/{rpc-mau2U4RG.js → rpc-DA9IhLVG.js} +1 -1
  178. package/dist/{run-main-BF7ybLIy.js → run-main-BcA22Ipv.js} +93 -93
  179. package/dist/{runtime-Bcmv4Epp.js → runtime-BnbzNRr6.js} +3 -3
  180. package/dist/{runtime-config-collectors-Bsjz4isf.js → runtime-config-collectors-CXJdhHRo.js} +1 -1
  181. package/dist/{runtime-whatsapp-login.runtime-COUEKxmy.js → runtime-whatsapp-login.runtime-DRoK8G8H.js} +7 -7
  182. package/dist/{runtime-whatsapp-outbound.runtime-BaWH6-ns.js → runtime-whatsapp-outbound.runtime-C9OiwkWh.js} +15 -15
  183. package/dist/{sandbox-ixDhkfHu.js → sandbox-C3TbYIHd.js} +18 -18
  184. package/dist/{sandbox-cli-DOxm7fjR.js → sandbox-cli-BwK2slfh.js} +25 -25
  185. package/dist/{secrets-cli-DvXznMUb.js → secrets-cli-Beu2lcrf.js} +11 -11
  186. package/dist/{security-cli-3WOXvJR-.js → security-cli-CcpKH_lC.js} +42 -42
  187. package/dist/{send-BuBTLRMz.js → send-CLI3CiQv.js} +6 -6
  188. package/dist/{send-Do2preUU.js → send-DEs83M9V.js} +11 -11
  189. package/dist/{send-BPgrWmUX.js → send-EVcbFVqn.js} +5 -5
  190. package/dist/{send-BVyLW1cn.js → send-RDqyJwZx.js} +8 -8
  191. package/dist/{send-BpkluEZ5.js → send-z-sMjqvX.js} +4 -4
  192. package/dist/{server-DMAPnkgM.js → server-Bm-IxvZZ.js} +20 -20
  193. package/dist/{server-context-Dd8UynDU.js → server-context-Dw_4lGoI.js} +12 -12
  194. package/dist/{server-lifecycle-BEZ2jsQ6.js → server-lifecycle-DYgHYif9.js} +2 -2
  195. package/dist/{server-middleware-B_LyQkOL.js → server-middleware-BVAEuQs7.js} +1 -1
  196. package/dist/{server-node-events-dr5CaM3M.js → server-node-events-Q0cT2ifj.js} +74 -74
  197. package/dist/{service-B5T42CWZ.js → service-DSqxS6_D.js} +15 -15
  198. package/dist/{session-eXSdl5mb.js → session-D0jodcgT.js} +1 -1
  199. package/dist/{session-utils-D12gSo5W.js → session-utils-XY6JwRhT.js} +6 -6
  200. package/dist/{sessions-DgnXAQCc.js → sessions-BWptzMw0.js} +15 -15
  201. package/dist/{sessions-C16G7L5c.js → sessions-CMqv9JEu.js} +4 -4
  202. package/dist/{shared-BYny1RCF.js → shared-BbVxcRzb.js} +3 -3
  203. package/dist/{shared-By6_qr_R.js → shared-D5DTxBPH.js} +1 -1
  204. package/dist/{skill-commands-BcigmiOW.js → skill-commands-fU-Mejn9.js} +5 -5
  205. package/dist/{skill-scanner--QKHR8U0.js → skill-scanner-CvS725eQ.js} +6 -6
  206. package/dist/{skills-EwyaIyKC.js → skills-C85azDXm.js} +3 -3
  207. package/dist/{skills-cli-CqEjN0Yj.js → skills-cli-ZXx6BNar.js} +5 -5
  208. package/dist/{skills-install-CXVKvhIE.js → skills-install-KD6dzNoZ.js} +6 -6
  209. package/dist/{skills-status-Bv8Xt7Lc.js → skills-status-DkO7rxE8.js} +1 -1
  210. package/dist/{slash-commands.runtime-Bi99B_EP.js → slash-commands.runtime-CPlXJtuM.js} +11 -11
  211. package/dist/slash-dispatch.runtime-BOMEVFk0.js +114 -0
  212. package/dist/{slash-dispatch.runtime-sXaUYn4v.js → slash-dispatch.runtime-BcecLKcJ.js} +6 -6
  213. package/dist/{slash-skill-commands.runtime-DOXmvOtU.js → slash-skill-commands.runtime-Cnfq_5LN.js} +15 -15
  214. package/dist/{squidclaw-root-JXyRbQLJ.js → squidclaw-root-BQfLymzj.js} +8 -8
  215. package/dist/{status-Dnl-Um1D.js → status-cU9cJReo.js} +27 -27
  216. package/dist/{status.update-BGIm6we4.js → status.update-CiLU9RPF.js} +2 -2
  217. package/dist/{store-BTkIx401.js → store-BEIcnlgx.js} +5 -5
  218. package/dist/{subagent-registry-CQA6P2FO.js → subagent-registry-CIgFD2oi.js} +149 -149
  219. package/dist/{subagent-registry-runtime-232sNNT6.js → subagent-registry-runtime-Cq9I6PwW.js} +6 -6
  220. package/dist/subagent-registry-runtime-DGTjU9Lb.js +114 -0
  221. package/dist/{system-cli-CJAQxYHv.js → system-cli-i1FWZDjn.js} +9 -9
  222. package/dist/{system-run-command-BaSqmSwR.js → system-run-command-COqCNIBg.js} +1 -1
  223. package/dist/{systemd-B86VePXs.js → systemd-Cj2cX_ZP.js} +9 -9
  224. package/dist/{systemd-hints-BmFWZu_j.js → systemd-hints-46PqJfaq.js} +6 -6
  225. package/dist/{systemd-linger-w7fvBU-1.js → systemd-linger-6Jd9K5p2.js} +1 -1
  226. package/dist/{tables-CGh4CW_h.js → tables-CIpKClDV.js} +1 -1
  227. package/dist/{tailnet-DJq7Mi1o.js → tailnet-CZANZjq6.js} +1 -1
  228. package/dist/{plugin-sdk/target-errors-jlLHihbX.js → target-errors-CRQlPF1u.js} +2 -2
  229. package/dist/{tool-images-D6mmxuWS.js → tool-images-CyzWvDUu.js} +1 -1
  230. package/dist/{tui-BbcmzKaA.js → tui-CC_AbfZr.js} +6 -6
  231. package/dist/{tui-cli-Dv3jSm3x.js → tui-cli-DiJ7zKUD.js} +32 -32
  232. package/dist/{update-BhRrb6BI.js → update-1JhjCqjy.js} +3 -3
  233. package/dist/{update-cli-Oe0fP8x9.js → update-cli-DM_dUip_.js} +104 -104
  234. package/dist/{update-runner-DdA6xBa9.js → update-runner-BBJZmfZ4.js} +16 -16
  235. package/dist/{web-Chw1dtKA.js → web-CWxO_flK.js} +6 -6
  236. package/dist/web-CZhZC1EA.js +118 -0
  237. package/dist/{webhooks-cli-CJLug1QH.js → webhooks-cli-CzDd8ikc.js} +6 -6
  238. package/dist/{whatsapp-actions-_ca5OtHq.js → whatsapp-actions-MR_bBjXO.js} +17 -17
  239. package/dist/{with-timeout-CFfRudNc.js → with-timeout-BZ_Teugb.js} +3 -3
  240. package/dist/{workspace-BbO-M3Jv.js → workspace-D5vNjk5G.js} +1 -1
  241. package/dist/{workspace-dirs-D8D-Ghcl.js → workspace-dirs-CjMIsQti.js} +1 -1
  242. package/dist/{wsl-CsGe5QCP.js → wsl-CvQfS6aU.js} +2 -2
  243. package/package.json +1 -1
  244. package/dist/deliver-runtime-zICm26tE.js +0 -61
  245. package/dist/deps-send-discord.runtime-C_9HZQko.js +0 -36
  246. package/dist/deps-send-imessage.runtime-BMhGsWds.js +0 -35
  247. package/dist/deps-send-signal.runtime-BGhjYiu6.js +0 -34
  248. package/dist/deps-send-slack.runtime-DjBCu-RX.js +0 -32
  249. package/dist/deps-send-whatsapp.runtime-CU257URT.js +0 -119
  250. package/dist/fs-safe-BPQ-per2.js +0 -352
  251. package/dist/image-runtime-Cxoxcx04.js +0 -55
  252. package/dist/path-alias-guards-DeOVetT7.js +0 -43
  253. package/dist/plugin-sdk/accounts-CUEuUR3C.js +0 -46
  254. package/dist/plugin-sdk/accounts-D0W2pELU.js +0 -288
  255. package/dist/plugin-sdk/accounts-ucj0odJq.js +0 -35
  256. package/dist/plugin-sdk/active-listener-BO7eBEG_.js +0 -50
  257. package/dist/plugin-sdk/api-key-rotation-C4C_mDsg.js +0 -181
  258. package/dist/plugin-sdk/audio-preflight-Cqdo0JKm.js +0 -69
  259. package/dist/plugin-sdk/audio-transcription-runner-DnEooIyE.js +0 -2176
  260. package/dist/plugin-sdk/audit-membership-runtime-B9b-zRwg.js +0 -58
  261. package/dist/plugin-sdk/channel-activity-BMWLw4o2.js +0 -94
  262. package/dist/plugin-sdk/channel-web-B8bj7MB9.js +0 -2256
  263. package/dist/plugin-sdk/chrome-CV-q0Lmc.js +0 -2415
  264. package/dist/plugin-sdk/commands-registry-e7YoqrbP.js +0 -1125
  265. package/dist/plugin-sdk/config-B2B64aX0.js +0 -17911
  266. package/dist/plugin-sdk/deliver-BkyBtcLR.js +0 -1694
  267. package/dist/plugin-sdk/deliver-runtime-O4lwAWMw.js +0 -32
  268. package/dist/plugin-sdk/deps-send-discord.runtime-BAeeBldY.js +0 -23
  269. package/dist/plugin-sdk/deps-send-imessage.runtime-EL-CfikZ.js +0 -22
  270. package/dist/plugin-sdk/deps-send-signal.runtime-BeemHeUu.js +0 -21
  271. package/dist/plugin-sdk/deps-send-slack.runtime-DTttkC0N.js +0 -19
  272. package/dist/plugin-sdk/deps-send-telegram.runtime-Dsf9Cnka.js +0 -24
  273. package/dist/plugin-sdk/deps-send-whatsapp.runtime-DvdFo6lj.js +0 -57
  274. package/dist/plugin-sdk/diagnostic-DPRVoKTk.js +0 -319
  275. package/dist/plugin-sdk/errors-B8oJXuCF.js +0 -54
  276. package/dist/plugin-sdk/fetch-guard-F0Fnqisy.js +0 -156
  277. package/dist/plugin-sdk/image-cBW8L8pp.js +0 -2310
  278. package/dist/plugin-sdk/image-ops-BP8ix1GC.js +0 -584
  279. package/dist/plugin-sdk/image-runtime-9xkgSlNz.js +0 -25
  280. package/dist/plugin-sdk/ir-DWEc6zOp.js +0 -1296
  281. package/dist/plugin-sdk/local-roots-BIPT8uAO.js +0 -186
  282. package/dist/plugin-sdk/logger-DDdrdbDu.js +0 -1163
  283. package/dist/plugin-sdk/login-BMTiGutN.js +0 -57
  284. package/dist/plugin-sdk/login-qr-BFxqYUkc.js +0 -320
  285. package/dist/plugin-sdk/manager-BD-aYaZ8.js +0 -3917
  286. package/dist/plugin-sdk/manager-runtime-C5bRwUlz.js +0 -15
  287. package/dist/plugin-sdk/outbound-Bm07xvO6.js +0 -212
  288. package/dist/plugin-sdk/outbound-attachment-DLsaxDsc.js +0 -19
  289. package/dist/plugin-sdk/paths-C6W4VHoa.js +0 -166
  290. package/dist/plugin-sdk/pi-embedded-helpers-BExwPvTh.js +0 -9627
  291. package/dist/plugin-sdk/pi-model-discovery-DdctvBeX.js +0 -134
  292. package/dist/plugin-sdk/pi-model-discovery-runtime-DrtpLJjk.js +0 -8
  293. package/dist/plugin-sdk/pi-tools.before-tool-call.runtime-rgTz3FBl.js +0 -354
  294. package/dist/plugin-sdk/plugins-BN64HHZA.js +0 -864
  295. package/dist/plugin-sdk/proxy-fetch-ZPEvp58f.js +0 -38
  296. package/dist/plugin-sdk/pw-ai-DBm3RdBK.js +0 -1938
  297. package/dist/plugin-sdk/query-expansion-eeVz_aEm.js +0 -1011
  298. package/dist/plugin-sdk/redact-BoNEjbpF.js +0 -319
  299. package/dist/plugin-sdk/reply-Bp49JV3f.js +0 -98828
  300. package/dist/plugin-sdk/resolve-outbound-target-DXfjGlZQ.js +0 -40
  301. package/dist/plugin-sdk/run-with-concurrency-5DMu9szx.js +0 -1994
  302. package/dist/plugin-sdk/runtime-whatsapp-login.runtime-D2hkJBa-.js +0 -10
  303. package/dist/plugin-sdk/runtime-whatsapp-outbound.runtime-C06I4adi.js +0 -19
  304. package/dist/plugin-sdk/send-B9xnwtQ-.js +0 -540
  305. package/dist/plugin-sdk/send-BxySs-Cu.js +0 -2587
  306. package/dist/plugin-sdk/send-D9THKp_J.js +0 -414
  307. package/dist/plugin-sdk/send-DCuaaP2w.js +0 -503
  308. package/dist/plugin-sdk/send-Dm_-_xje.js +0 -3135
  309. package/dist/plugin-sdk/session-DDzIZHxt.js +0 -169
  310. package/dist/plugin-sdk/skill-commands-DRvqtuFC.js +0 -342
  311. package/dist/plugin-sdk/skills-BWwlfbVj.js +0 -1428
  312. package/dist/plugin-sdk/slash-commands.runtime-BzYsaTST.js +0 -13
  313. package/dist/plugin-sdk/slash-dispatch.runtime-Cty8EAD9.js +0 -52
  314. package/dist/plugin-sdk/slash-skill-commands.runtime-sg98L8BK.js +0 -16
  315. package/dist/plugin-sdk/ssrf-DOBwjFow.js +0 -202
  316. package/dist/plugin-sdk/store-BKDR_-Qk.js +0 -81
  317. package/dist/plugin-sdk/subagent-registry-runtime-Dz50ieim.js +0 -52
  318. package/dist/plugin-sdk/tables-GIj79us5.js +0 -55
  319. package/dist/plugin-sdk/thinking-BgdUnMZ2.js +0 -1206
  320. package/dist/plugin-sdk/tokens-CTIYTLWu.js +0 -52
  321. package/dist/plugin-sdk/tool-images-GSlvf6RP.js +0 -274
  322. package/dist/plugin-sdk/web-BK9mCTAc.js +0 -56
  323. package/dist/plugin-sdk/whatsapp-actions-DQpK_5Ds.js +0 -80
  324. package/dist/qmd-manager-BsL_hcOB.js +0 -1454
  325. package/dist/register.configure-BkwbM-hb.js +0 -165
  326. package/dist/slash-dispatch.runtime-reuPLnse.js +0 -114
  327. package/dist/subagent-registry-runtime-CqgIWcSl.js +0 -114
  328. package/dist/target-errors-C_rnMuJ2.js +0 -195
  329. package/dist/web-w04Gvwqi.js +0 -118
@@ -1,10 +0,0 @@
1
- import "./run-with-concurrency-5DMu9szx.js";
2
- import "./accounts-D0W2pELU.js";
3
- import "./paths-8xF5kDne.js";
4
- import "./github-copilot-token-Dy-0-Kh3.js";
5
- import "./config-B2B64aX0.js";
6
- import "./logger-DDdrdbDu.js";
7
- import "./session-DDzIZHxt.js";
8
- import { t as loginWeb } from "./login-BMTiGutN.js";
9
-
10
- export { loginWeb };
@@ -1,19 +0,0 @@
1
- import "./run-with-concurrency-5DMu9szx.js";
2
- import "./accounts-D0W2pELU.js";
3
- import "./paths-8xF5kDne.js";
4
- import "./github-copilot-token-Dy-0-Kh3.js";
5
- import "./config-B2B64aX0.js";
6
- import "./logger-DDdrdbDu.js";
7
- import "./image-ops-BP8ix1GC.js";
8
- import "./plugins-BN64HHZA.js";
9
- import "./path-alias-guards-gBhrAn14.js";
10
- import "./fs-safe-Dqmpk-Fr.js";
11
- import "./ssrf-DOBwjFow.js";
12
- import "./fetch-guard-F0Fnqisy.js";
13
- import "./local-roots-BIPT8uAO.js";
14
- import "./ir-DWEc6zOp.js";
15
- import "./render-HmipMDlP.js";
16
- import "./tables-GIj79us5.js";
17
- import { n as sendPollWhatsApp, t as sendMessageWhatsApp } from "./outbound-Bm07xvO6.js";
18
-
19
- export { sendMessageWhatsApp, sendPollWhatsApp };
@@ -1,540 +0,0 @@
1
- import { n as loadConfig } from "./config-B2B64aX0.js";
2
- import { m as kindFromMime } from "./image-ops-BP8ix1GC.js";
3
- import { i as resolveSignalAccount } from "./accounts-CUEuUR3C.js";
4
- import { n as fetchWithTimeout } from "./fetch-timeout-D455O27U.js";
5
- import { t as resolveFetch } from "./fetch-B_RcOnt9.js";
6
- import { i as resolveMarkdownTableMode, n as markdownToIR, t as chunkMarkdownIR } from "./ir-DWEc6zOp.js";
7
- import { n as generateSecureUuid } from "./secure-random-IkuYAMEf.js";
8
- import { t as resolveOutboundAttachmentFromUrl } from "./outbound-attachment-DLsaxDsc.js";
9
-
10
- //#region src/signal/format.ts
11
- function normalizeUrlForComparison(url) {
12
- let normalized = url.toLowerCase();
13
- normalized = normalized.replace(/^https?:\/\//, "");
14
- normalized = normalized.replace(/^www\./, "");
15
- normalized = normalized.replace(/\/+$/, "");
16
- return normalized;
17
- }
18
- function mapStyle(style) {
19
- switch (style) {
20
- case "bold": return "BOLD";
21
- case "italic": return "ITALIC";
22
- case "strikethrough": return "STRIKETHROUGH";
23
- case "code":
24
- case "code_block": return "MONOSPACE";
25
- case "spoiler": return "SPOILER";
26
- default: return null;
27
- }
28
- }
29
- function mergeStyles(styles) {
30
- const sorted = [...styles].toSorted((a, b) => {
31
- if (a.start !== b.start) return a.start - b.start;
32
- if (a.length !== b.length) return a.length - b.length;
33
- return a.style.localeCompare(b.style);
34
- });
35
- const merged = [];
36
- for (const style of sorted) {
37
- const prev = merged[merged.length - 1];
38
- if (prev && prev.style === style.style && style.start <= prev.start + prev.length) {
39
- const prevEnd = prev.start + prev.length;
40
- prev.length = Math.max(prevEnd, style.start + style.length) - prev.start;
41
- continue;
42
- }
43
- merged.push({ ...style });
44
- }
45
- return merged;
46
- }
47
- function clampStyles(styles, maxLength) {
48
- const clamped = [];
49
- for (const style of styles) {
50
- const start = Math.max(0, Math.min(style.start, maxLength));
51
- const length = Math.min(style.start + style.length, maxLength) - start;
52
- if (length > 0) clamped.push({
53
- start,
54
- length,
55
- style: style.style
56
- });
57
- }
58
- return clamped;
59
- }
60
- function applyInsertionsToStyles(spans, insertions) {
61
- if (insertions.length === 0) return spans;
62
- const sortedInsertions = [...insertions].toSorted((a, b) => a.pos - b.pos);
63
- let updated = spans;
64
- let cumulativeShift = 0;
65
- for (const insertion of sortedInsertions) {
66
- const insertionPos = insertion.pos + cumulativeShift;
67
- const next = [];
68
- for (const span of updated) {
69
- if (span.end <= insertionPos) {
70
- next.push(span);
71
- continue;
72
- }
73
- if (span.start >= insertionPos) {
74
- next.push({
75
- start: span.start + insertion.length,
76
- end: span.end + insertion.length,
77
- style: span.style
78
- });
79
- continue;
80
- }
81
- if (span.start < insertionPos && span.end > insertionPos) {
82
- if (insertionPos > span.start) next.push({
83
- start: span.start,
84
- end: insertionPos,
85
- style: span.style
86
- });
87
- const shiftedStart = insertionPos + insertion.length;
88
- const shiftedEnd = span.end + insertion.length;
89
- if (shiftedEnd > shiftedStart) next.push({
90
- start: shiftedStart,
91
- end: shiftedEnd,
92
- style: span.style
93
- });
94
- }
95
- }
96
- updated = next;
97
- cumulativeShift += insertion.length;
98
- }
99
- return updated;
100
- }
101
- function renderSignalText(ir) {
102
- const text = ir.text ?? "";
103
- if (!text) return {
104
- text: "",
105
- styles: []
106
- };
107
- const sortedLinks = [...ir.links].toSorted((a, b) => a.start - b.start);
108
- let out = "";
109
- let cursor = 0;
110
- const insertions = [];
111
- for (const link of sortedLinks) {
112
- if (link.start < cursor) continue;
113
- out += text.slice(cursor, link.end);
114
- const href = link.href.trim();
115
- const trimmedLabel = text.slice(link.start, link.end).trim();
116
- if (href) if (!trimmedLabel) {
117
- out += href;
118
- insertions.push({
119
- pos: link.end,
120
- length: href.length
121
- });
122
- } else {
123
- const normalizedLabel = normalizeUrlForComparison(trimmedLabel);
124
- let comparableHref = href;
125
- if (href.startsWith("mailto:")) comparableHref = href.slice(7);
126
- if (normalizedLabel !== normalizeUrlForComparison(comparableHref)) {
127
- const addition = ` (${href})`;
128
- out += addition;
129
- insertions.push({
130
- pos: link.end,
131
- length: addition.length
132
- });
133
- }
134
- }
135
- cursor = link.end;
136
- }
137
- out += text.slice(cursor);
138
- const adjusted = applyInsertionsToStyles(ir.styles.map((span) => {
139
- const mapped = mapStyle(span.style);
140
- if (!mapped) return null;
141
- return {
142
- start: span.start,
143
- end: span.end,
144
- style: mapped
145
- };
146
- }).filter((span) => span !== null), insertions);
147
- const trimmedText = out.trimEnd();
148
- const trimmedLength = trimmedText.length;
149
- return {
150
- text: trimmedText,
151
- styles: mergeStyles(clampStyles(adjusted.map((span) => ({
152
- start: span.start,
153
- length: span.end - span.start,
154
- style: span.style
155
- })), trimmedLength))
156
- };
157
- }
158
- function markdownToSignalText(markdown, options = {}) {
159
- return renderSignalText(markdownToIR(markdown ?? "", {
160
- linkify: true,
161
- enableSpoilers: true,
162
- headingStyle: "bold",
163
- blockquotePrefix: "> ",
164
- tableMode: options.tableMode
165
- }));
166
- }
167
- function sliceSignalStyles(styles, start, end) {
168
- const sliced = [];
169
- for (const style of styles) {
170
- const styleEnd = style.start + style.length;
171
- const sliceStart = Math.max(style.start, start);
172
- const sliceEnd = Math.min(styleEnd, end);
173
- if (sliceEnd > sliceStart) sliced.push({
174
- start: sliceStart - start,
175
- length: sliceEnd - sliceStart,
176
- style: style.style
177
- });
178
- }
179
- return sliced;
180
- }
181
- /**
182
- * Split Signal formatted text into chunks under the limit while preserving styles.
183
- *
184
- * This implementation deterministically tracks cursor position without using indexOf,
185
- * which is fragile when chunks are trimmed or when duplicate substrings exist.
186
- * Styles spanning chunk boundaries are split into separate ranges for each chunk.
187
- */
188
- function splitSignalFormattedText(formatted, limit) {
189
- const { text, styles } = formatted;
190
- if (text.length <= limit) return [formatted];
191
- const results = [];
192
- let remaining = text;
193
- let offset = 0;
194
- while (remaining.length > 0) {
195
- if (remaining.length <= limit) {
196
- const trimmed = remaining.trimEnd();
197
- if (trimmed.length > 0) results.push({
198
- text: trimmed,
199
- styles: mergeStyles(sliceSignalStyles(styles, offset, offset + trimmed.length))
200
- });
201
- break;
202
- }
203
- let breakIdx = findBreakIndex(remaining.slice(0, limit));
204
- if (breakIdx <= 0) breakIdx = limit;
205
- const chunk = remaining.slice(0, breakIdx).trimEnd();
206
- if (chunk.length > 0) results.push({
207
- text: chunk,
208
- styles: mergeStyles(sliceSignalStyles(styles, offset, offset + chunk.length))
209
- });
210
- const brokeOnWhitespace = breakIdx < remaining.length && /\s/.test(remaining[breakIdx]);
211
- const nextStart = Math.min(remaining.length, breakIdx + (brokeOnWhitespace ? 1 : 0));
212
- remaining = remaining.slice(nextStart).trimStart();
213
- offset = text.length - remaining.length;
214
- }
215
- return results;
216
- }
217
- /**
218
- * Find the best break index within a text window.
219
- * Prefers newlines over whitespace, avoids breaking inside parentheses.
220
- */
221
- function findBreakIndex(window) {
222
- let lastNewline = -1;
223
- let lastWhitespace = -1;
224
- let parenDepth = 0;
225
- for (let i = 0; i < window.length; i++) {
226
- const char = window[i];
227
- if (char === "(") {
228
- parenDepth++;
229
- continue;
230
- }
231
- if (char === ")" && parenDepth > 0) {
232
- parenDepth--;
233
- continue;
234
- }
235
- if (parenDepth === 0) {
236
- if (char === "\n") lastNewline = i;
237
- else if (/\s/.test(char)) lastWhitespace = i;
238
- }
239
- }
240
- return lastNewline > 0 ? lastNewline : lastWhitespace;
241
- }
242
- function markdownToSignalTextChunks(markdown, limit, options = {}) {
243
- const chunks = chunkMarkdownIR(markdownToIR(markdown ?? "", {
244
- linkify: true,
245
- enableSpoilers: true,
246
- headingStyle: "bold",
247
- blockquotePrefix: "> ",
248
- tableMode: options.tableMode
249
- }), limit);
250
- const results = [];
251
- for (const chunk of chunks) {
252
- const rendered = renderSignalText(chunk);
253
- if (rendered.text.length > limit) results.push(...splitSignalFormattedText(rendered, limit));
254
- else results.push(rendered);
255
- }
256
- return results;
257
- }
258
-
259
- //#endregion
260
- //#region src/signal/client.ts
261
- const DEFAULT_TIMEOUT_MS = 1e4;
262
- function normalizeBaseUrl(url) {
263
- const trimmed = url.trim();
264
- if (!trimmed) throw new Error("Signal base URL is required");
265
- if (/^https?:\/\//i.test(trimmed)) return trimmed.replace(/\/+$/, "");
266
- return `http://${trimmed}`.replace(/\/+$/, "");
267
- }
268
- function getRequiredFetch() {
269
- const fetchImpl = resolveFetch();
270
- if (!fetchImpl) throw new Error("fetch is not available");
271
- return fetchImpl;
272
- }
273
- function parseSignalRpcResponse(text, status) {
274
- let parsed;
275
- try {
276
- parsed = JSON.parse(text);
277
- } catch (err) {
278
- throw new Error(`Signal RPC returned malformed JSON (status ${status})`, { cause: err });
279
- }
280
- if (!parsed || typeof parsed !== "object") throw new Error(`Signal RPC returned invalid response envelope (status ${status})`);
281
- const rpc = parsed;
282
- const hasResult = Object.hasOwn(rpc, "result");
283
- if (!rpc.error && !hasResult) throw new Error(`Signal RPC returned invalid response envelope (status ${status})`);
284
- return rpc;
285
- }
286
- async function signalRpcRequest(method, params, opts) {
287
- const baseUrl = normalizeBaseUrl(opts.baseUrl);
288
- const id = generateSecureUuid();
289
- const body = JSON.stringify({
290
- jsonrpc: "2.0",
291
- method,
292
- params,
293
- id
294
- });
295
- const res = await fetchWithTimeout(`${baseUrl}/api/v1/rpc`, {
296
- method: "POST",
297
- headers: { "Content-Type": "application/json" },
298
- body
299
- }, opts.timeoutMs ?? DEFAULT_TIMEOUT_MS, getRequiredFetch());
300
- if (res.status === 201) return;
301
- const text = await res.text();
302
- if (!text) throw new Error(`Signal RPC empty response (status ${res.status})`);
303
- const parsed = parseSignalRpcResponse(text, res.status);
304
- if (parsed.error) {
305
- const code = parsed.error.code ?? "unknown";
306
- const msg = parsed.error.message ?? "Signal RPC error";
307
- throw new Error(`Signal RPC ${code}: ${msg}`);
308
- }
309
- return parsed.result;
310
- }
311
- async function signalCheck(baseUrl, timeoutMs = DEFAULT_TIMEOUT_MS) {
312
- const normalized = normalizeBaseUrl(baseUrl);
313
- try {
314
- const res = await fetchWithTimeout(`${normalized}/api/v1/check`, { method: "GET" }, timeoutMs, getRequiredFetch());
315
- if (!res.ok) return {
316
- ok: false,
317
- status: res.status,
318
- error: `HTTP ${res.status}`
319
- };
320
- return {
321
- ok: true,
322
- status: res.status,
323
- error: null
324
- };
325
- } catch (err) {
326
- return {
327
- ok: false,
328
- status: null,
329
- error: err instanceof Error ? err.message : String(err)
330
- };
331
- }
332
- }
333
- async function streamSignalEvents(params) {
334
- const baseUrl = normalizeBaseUrl(params.baseUrl);
335
- const url = new URL(`${baseUrl}/api/v1/events`);
336
- if (params.account) url.searchParams.set("account", params.account);
337
- const fetchImpl = resolveFetch();
338
- if (!fetchImpl) throw new Error("fetch is not available");
339
- const res = await fetchImpl(url, {
340
- method: "GET",
341
- headers: { Accept: "text/event-stream" },
342
- signal: params.abortSignal
343
- });
344
- if (!res.ok || !res.body) throw new Error(`Signal SSE failed (${res.status} ${res.statusText || "error"})`);
345
- const reader = res.body.getReader();
346
- const decoder = new TextDecoder();
347
- let buffer = "";
348
- let currentEvent = {};
349
- const flushEvent = () => {
350
- if (!currentEvent.data && !currentEvent.event && !currentEvent.id) return;
351
- params.onEvent({
352
- event: currentEvent.event,
353
- data: currentEvent.data,
354
- id: currentEvent.id
355
- });
356
- currentEvent = {};
357
- };
358
- while (true) {
359
- const { value, done } = await reader.read();
360
- if (done) break;
361
- buffer += decoder.decode(value, { stream: true });
362
- let lineEnd = buffer.indexOf("\n");
363
- while (lineEnd !== -1) {
364
- let line = buffer.slice(0, lineEnd);
365
- buffer = buffer.slice(lineEnd + 1);
366
- if (line.endsWith("\r")) line = line.slice(0, -1);
367
- if (line === "") {
368
- flushEvent();
369
- lineEnd = buffer.indexOf("\n");
370
- continue;
371
- }
372
- if (line.startsWith(":")) {
373
- lineEnd = buffer.indexOf("\n");
374
- continue;
375
- }
376
- const [rawField, ...rest] = line.split(":");
377
- const field = rawField.trim();
378
- const rawValue = rest.join(":");
379
- const value = rawValue.startsWith(" ") ? rawValue.slice(1) : rawValue;
380
- if (field === "event") currentEvent.event = value;
381
- else if (field === "data") currentEvent.data = currentEvent.data ? `${currentEvent.data}\n${value}` : value;
382
- else if (field === "id") currentEvent.id = value;
383
- lineEnd = buffer.indexOf("\n");
384
- }
385
- }
386
- flushEvent();
387
- }
388
-
389
- //#endregion
390
- //#region src/signal/rpc-context.ts
391
- function resolveSignalRpcContext(opts, accountInfo) {
392
- const hasBaseUrl = Boolean(opts.baseUrl?.trim());
393
- const hasAccount = Boolean(opts.account?.trim());
394
- const resolvedAccount = accountInfo || (!hasBaseUrl || !hasAccount ? resolveSignalAccount({
395
- cfg: loadConfig(),
396
- accountId: opts.accountId
397
- }) : void 0);
398
- const baseUrl = opts.baseUrl?.trim() || resolvedAccount?.baseUrl;
399
- if (!baseUrl) throw new Error("Signal base URL is required");
400
- return {
401
- baseUrl,
402
- account: opts.account?.trim() || resolvedAccount?.config.account?.trim()
403
- };
404
- }
405
-
406
- //#endregion
407
- //#region src/signal/send.ts
408
- function parseTarget(raw) {
409
- let value = raw.trim();
410
- if (!value) throw new Error("Signal recipient is required");
411
- if (value.toLowerCase().startsWith("signal:")) value = value.slice(7).trim();
412
- const normalized = value.toLowerCase();
413
- if (normalized.startsWith("group:")) return {
414
- type: "group",
415
- groupId: value.slice(6).trim()
416
- };
417
- if (normalized.startsWith("username:")) return {
418
- type: "username",
419
- username: value.slice(9).trim()
420
- };
421
- if (normalized.startsWith("u:")) return {
422
- type: "username",
423
- username: value.trim()
424
- };
425
- return {
426
- type: "recipient",
427
- recipient: value
428
- };
429
- }
430
- function buildTargetParams(target, allow) {
431
- if (target.type === "recipient") {
432
- if (!allow.recipient) return null;
433
- return { recipient: [target.recipient] };
434
- }
435
- if (target.type === "group") {
436
- if (!allow.group) return null;
437
- return { groupId: target.groupId };
438
- }
439
- if (target.type === "username") {
440
- if (!allow.username) return null;
441
- return { username: [target.username] };
442
- }
443
- return null;
444
- }
445
- async function sendMessageSignal(to, text, opts = {}) {
446
- const cfg = opts.cfg ?? loadConfig();
447
- const accountInfo = resolveSignalAccount({
448
- cfg,
449
- accountId: opts.accountId
450
- });
451
- const { baseUrl, account } = resolveSignalRpcContext(opts, accountInfo);
452
- const target = parseTarget(to);
453
- let message = text ?? "";
454
- let messageFromPlaceholder = false;
455
- let textStyles = [];
456
- const textMode = opts.textMode ?? "markdown";
457
- const maxBytes = (() => {
458
- if (typeof opts.maxBytes === "number") return opts.maxBytes;
459
- if (typeof accountInfo.config.mediaMaxMb === "number") return accountInfo.config.mediaMaxMb * 1024 * 1024;
460
- if (typeof cfg.agents?.defaults?.mediaMaxMb === "number") return cfg.agents.defaults.mediaMaxMb * 1024 * 1024;
461
- return 8 * 1024 * 1024;
462
- })();
463
- let attachments;
464
- if (opts.mediaUrl?.trim()) {
465
- const resolved = await resolveOutboundAttachmentFromUrl(opts.mediaUrl.trim(), maxBytes, { localRoots: opts.mediaLocalRoots });
466
- attachments = [resolved.path];
467
- const kind = kindFromMime(resolved.contentType ?? void 0);
468
- if (!message && kind) {
469
- message = kind === "image" ? "<media:image>" : `<media:${kind}>`;
470
- messageFromPlaceholder = true;
471
- }
472
- }
473
- if (message.trim() && !messageFromPlaceholder) if (textMode === "plain") textStyles = opts.textStyles ?? [];
474
- else {
475
- const tableMode = resolveMarkdownTableMode({
476
- cfg,
477
- channel: "signal",
478
- accountId: accountInfo.accountId
479
- });
480
- const formatted = markdownToSignalText(message, { tableMode });
481
- message = formatted.text;
482
- textStyles = formatted.styles;
483
- }
484
- if (!message.trim() && (!attachments || attachments.length === 0)) throw new Error("Signal send requires text or media");
485
- const params = { message };
486
- if (textStyles.length > 0) params["text-style"] = textStyles.map((style) => `${style.start}:${style.length}:${style.style}`);
487
- if (account) params.account = account;
488
- if (attachments && attachments.length > 0) params.attachments = attachments;
489
- const targetParams = buildTargetParams(target, {
490
- recipient: true,
491
- group: true,
492
- username: true
493
- });
494
- if (!targetParams) throw new Error("Signal recipient is required");
495
- Object.assign(params, targetParams);
496
- const timestamp = (await signalRpcRequest("send", params, {
497
- baseUrl,
498
- timeoutMs: opts.timeoutMs
499
- }))?.timestamp;
500
- return {
501
- messageId: timestamp ? String(timestamp) : "unknown",
502
- timestamp
503
- };
504
- }
505
- async function sendTypingSignal(to, opts = {}) {
506
- const { baseUrl, account } = resolveSignalRpcContext(opts);
507
- const targetParams = buildTargetParams(parseTarget(to), {
508
- recipient: true,
509
- group: true
510
- });
511
- if (!targetParams) return false;
512
- const params = { ...targetParams };
513
- if (account) params.account = account;
514
- if (opts.stop) params.stop = true;
515
- await signalRpcRequest("sendTyping", params, {
516
- baseUrl,
517
- timeoutMs: opts.timeoutMs
518
- });
519
- return true;
520
- }
521
- async function sendReadReceiptSignal(to, targetTimestamp, opts = {}) {
522
- if (!Number.isFinite(targetTimestamp) || targetTimestamp <= 0) return false;
523
- const { baseUrl, account } = resolveSignalRpcContext(opts);
524
- const targetParams = buildTargetParams(parseTarget(to), { recipient: true });
525
- if (!targetParams) return false;
526
- const params = {
527
- ...targetParams,
528
- targetTimestamp,
529
- type: opts.type ?? "read"
530
- };
531
- if (account) params.account = account;
532
- await signalRpcRequest("sendReceipt", params, {
533
- baseUrl,
534
- timeoutMs: opts.timeoutMs
535
- });
536
- return true;
537
- }
538
-
539
- //#endregion
540
- export { signalCheck as a, markdownToSignalTextChunks as c, resolveSignalRpcContext as i, sendReadReceiptSignal as n, signalRpcRequest as o, sendTypingSignal as r, streamSignalEvents as s, sendMessageSignal as t };