@noxsoft/anima 2.0.2 → 2.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1260 -28
- package/dist/accounts-Bth3PpPD.js +260 -0
- package/dist/accounts-D8CPKNkN.js +259 -0
- package/dist/acp-cli-ByK6lS6c.js +1081 -0
- package/dist/acp-cli-CaQCjIw4.js +1084 -0
- package/dist/agent-BgIkqd3F.js +725 -0
- package/dist/agent-N5BDcge4.js +725 -0
- package/dist/agent-events-COH7NDW2.js +182 -0
- package/dist/agent-scope-CPphqq-U.js +452 -0
- package/dist/agent-scope-DZgptr9J.js +452 -0
- package/dist/agent-scope-cj2QCT6R.js +112 -0
- package/dist/agents-NEudYMdg.js +774 -0
- package/dist/agents.config-Bujs-NIy.js +182 -0
- package/dist/agents.config-jp7OLssr.js +182 -0
- package/dist/argv-BMZMiW7v.js +73 -0
- package/dist/audit-C-UJhfdv.js +2401 -0
- package/dist/audit-CeCO7SK5.js +2401 -0
- package/dist/auth-BNZsOHGF.js +648 -0
- package/dist/auth-DMPZWzEa.js +639 -0
- package/dist/auth-choice-5VnaGMD-.js +2681 -0
- package/dist/auth-choice-DA2k4vs8.js +2681 -0
- package/dist/auth-health-B7FqA26_.js +149 -0
- package/dist/auth-health-VO_MPqVX.js +149 -0
- package/dist/auth-profiles-BDrNYX_n.js +1564 -0
- package/dist/auth-profiles-CxSHydjn.js +2689 -0
- package/dist/banner-BtDZPRzi.js +294 -0
- package/dist/browser-cli-8yQMpxb8.js +1679 -0
- package/dist/browser-cli-Czg3JtDH.js +1676 -0
- package/dist/build-info.json +3 -3
- package/dist/bundled/boot-md/handler.js +16 -16
- package/dist/bundled/bootstrap-extra-files/handler.js +4 -4
- package/dist/bundled/command-logger/handler.js +1 -1
- package/dist/bundled/session-memory/handler.js +5 -5
- package/dist/call-BIzCaKZb.js +282 -0
- package/dist/call-BYDpTVCZ.js +282 -0
- package/dist/canvas-host/a2ui/.bundle.hash +1 -1
- package/dist/catalog-CqKiUgu6.js +185 -0
- package/dist/catalog-DMfEg-oK.js +185 -0
- package/dist/channel-options-BrtCtyrT.js +32 -0
- package/dist/channel-options-CO21Gl8p.js +33 -0
- package/dist/channel-selection-Bbm1lq3P.js +51 -0
- package/dist/channel-selection-CqcX7Ocw.js +51 -0
- package/dist/channel-web-DrsT6OAE.js +2162 -0
- package/dist/channels-cli-Juyh1S6n.js +1304 -0
- package/dist/channels-cli-zNvi1m5c.js +1306 -0
- package/dist/channels-status-issues-CqzqshW4.js +18 -0
- package/dist/channels-status-issues-DdJdO866.js +18 -0
- package/dist/chrome-C4dOMO8z.js +1601 -0
- package/dist/chrome-DdcDzAtH.js +1629 -0
- package/dist/chrome-U3DRzjJD.js +1601 -0
- package/dist/chunk-D2nLsrEW.js +348 -0
- package/dist/clack-prompter-BI3RDW5w.js +92 -0
- package/dist/clack-prompter-Dwr1m_IZ.js +92 -0
- package/dist/cli/daemon-cli.js +1 -1
- package/dist/cli-C3cpDaz8.js +99 -0
- package/dist/cli-CjWUGdGC.js +101 -0
- package/dist/cli-session-BVjY_XrW.js +5463 -0
- package/dist/cli-session-gtuYN2Iq.js +5408 -0
- package/dist/client-Dswwze5_.js +1692 -0
- package/dist/client-LRKFjo4A.js +1692 -0
- package/dist/clipboard-BZKS9O1u.js +31 -0
- package/dist/clipboard-DES8b1AM.js +31 -0
- package/dist/command-format-CP1YTNCl.js +52 -0
- package/dist/command-format-CVL4K5cj.js +52 -0
- package/dist/command-format-G6N2zghg.js +38 -0
- package/dist/command-registry-BBvNvysr.js +248 -0
- package/dist/commands-AZ3n8Y2c.js +726 -0
- package/dist/commands-BMnD_QRY.js +726 -0
- package/dist/commands-registry-cFqZ6Ib4.js +766 -0
- package/dist/commands-registry-q13H7ng5.js +766 -0
- package/dist/common-CX5458fH.js +287 -0
- package/dist/common-DJbnT8ws.js +287 -0
- package/dist/completion-cli-BADRBcIl.js +432 -0
- package/dist/completion-cli-DMQgiObF.js +431 -0
- package/dist/config-CU-Axg8P.js +5704 -0
- package/dist/config-DaqbUdkI.js +5705 -0
- package/dist/config-cli-BPlbwiuA.js +244 -0
- package/dist/config-cli-DXgZJkPU.js +247 -0
- package/dist/config-guard-Ba49JNds.js +76 -0
- package/dist/config-guard-Cu0qMKZJ.js +93 -0
- package/dist/config-kVVm5EYV.js +6523 -0
- package/dist/config-sync-CzLnLTXt.js +91 -0
- package/dist/config-sync-DuydxPWx.js +91 -0
- package/dist/configure-CHgacLyi.js +960 -0
- package/dist/configure-DfHXDa1L.js +959 -0
- package/dist/context-DzgXOckU.js +60 -0
- package/dist/control-service-8_wKHwBa.js +72 -0
- package/dist/control-service-BtL1Jto_.js +72 -0
- package/dist/cron-cli-BCzSR2c0.js +448 -0
- package/dist/cron-cli-CCWNkykU.js +451 -0
- package/dist/daemon-cli-Bjkbu9Vy.js +565 -0
- package/dist/daemon-cli-CmlHcC1J.js +566 -0
- package/dist/daemon-cli.js +16 -16
- package/dist/daemon-runtime-C0tz7VAC.js +460 -0
- package/dist/daemon-runtime-rUTqCVwJ.js +460 -0
- package/dist/deliver-BBggsviM.js +1097 -0
- package/dist/deliver-CePITOl8.js +1162 -0
- package/dist/deliver-DFnVaetP.js +1097 -0
- package/dist/delivery-queue-BJQK3oh5.js +220 -0
- package/dist/deps-CeEKhrp7.js +42 -0
- package/dist/devices-cli-DQrDMrZH.js +198 -0
- package/dist/devices-cli-Oe-A1Dv0.js +195 -0
- package/dist/diagnostics-DxMFrBLO.js +35 -0
- package/dist/diagnostics-m79ZlMmZ.js +35 -0
- package/dist/directory-cli-BL6h8cGF.js +246 -0
- package/dist/directory-cli-Cjgmi_sj.js +243 -0
- package/dist/dispatcher-DAFbQM-c.js +100 -0
- package/dist/dispatcher-DNd40gUn.js +100 -0
- package/dist/dist-CqDI82ei.js +929 -0
- package/dist/dist-DnHRxR5U.js +929 -0
- package/dist/dns-cli-CFtV3BXK.js +200 -0
- package/dist/dns-cli-NyIHvQ5S.js +197 -0
- package/dist/dock-BdXLb5oY.js +753 -0
- package/dist/dock-jYICmNcI.js +753 -0
- package/dist/docs-cli-CrOaIK_H.js +161 -0
- package/dist/docs-cli-D_cmJDSr.js +159 -0
- package/dist/doctor-BpGxKrBl.js +1815 -0
- package/dist/doctor-D12wNQPU.js +1813 -0
- package/dist/doctor-completion-DeOfofek.js +92 -0
- package/dist/doctor-completion-DwjqdEcK.js +92 -0
- package/dist/doctor-config-flow-BI3mpkbd.js +1232 -0
- package/dist/doctor-config-flow-wMHheFkC.js +1232 -0
- package/dist/engine-BCtL-AMw.js +563 -0
- package/dist/engine-Bk_UT413.js +563 -0
- package/dist/entry.js +5 -5
- package/dist/env-v6411I8h.js +32 -0
- package/dist/exec-B7sUS164.js +1167 -0
- package/dist/exec-approvals-CroGJRUg.js +1221 -0
- package/dist/exec-approvals-cli-BTxF_RsH.js +371 -0
- package/dist/exec-approvals-cli-n1gyGwH2.js +368 -0
- package/dist/exec-mhSykkaa.js +255 -0
- package/dist/extensionAPI.js +3 -3
- package/dist/frontmatter-BmHq0vRD.js +204 -0
- package/dist/gateway-cli-DDBadlrS.js +19971 -0
- package/dist/gateway-cli-IZNkOMBe.js +19972 -0
- package/dist/gateway-rpc-Dtx8HN-n.js +28 -0
- package/dist/gateway-rpc-L2PVSqGj.js +28 -0
- package/dist/github-copilot-auth-DKyqDaGU.js +1418 -0
- package/dist/github-copilot-auth-DXpOMSd3.js +1418 -0
- package/dist/gmail-setup-utils-BKNczIJ9.js +428 -0
- package/dist/gmail-setup-utils-co0ppccC.js +428 -0
- package/dist/health-Bm8ZTvC3.js +1253 -0
- package/dist/health-DUf1gt4E.js +1258 -0
- package/dist/health-format-BksT6F68.js +208 -0
- package/dist/health-format-uzh1xYLD.js +208 -0
- package/dist/heartbeat-visibility-1TJb1Zao.js +98 -0
- package/dist/heartbeat-visibility-CwodtdcX.js +98 -0
- package/dist/help-format-C6cv_aZp.js +17 -0
- package/dist/helpers-N-uSFKOn.js +10 -0
- package/dist/hooks-cli-1POsXqOl.js +993 -0
- package/dist/hooks-cli-BGjILbze.js +991 -0
- package/dist/hooks-status-DE07n5RC.js +356 -0
- package/dist/hooks-status-Du-d1jde.js +356 -0
- package/dist/image-ops-B_AYV3tp.js +541 -0
- package/dist/image-ops-Bp0C6Mvr.js +541 -0
- package/dist/index.js +82 -82
- package/dist/init-9A0s7bWG.js +122 -0
- package/dist/init-DoyCHJDC.js +122 -0
- package/dist/installs-D1C9wHAq.js +383 -0
- package/dist/installs-Dh4dHayM.js +383 -0
- package/dist/ipv4-DCItfaJo.js +1964 -0
- package/dist/ipv4-DSOUVx0i.js +1964 -0
- package/dist/lanes-BvSnHq2h.js +232 -0
- package/dist/lifecycle-core-BY4WIf9g.js +388 -0
- package/dist/lifecycle-core-TQKyXO-6.js +387 -0
- package/dist/links-CNu_8RZl.js +15 -0
- package/dist/links-D2tt2ouh.js +15 -0
- package/dist/llm-slug-generator.js +4 -4
- package/dist/logging-BIeRw0WR.js +15 -0
- package/dist/logging-C7lb3Vjc.js +15 -0
- package/dist/login-DXWKewA2.js +59 -0
- package/dist/login-Fhh4uWmf.js +61 -0
- package/dist/login-pPs3UO38.js +61 -0
- package/dist/login-qr-CevLD8cV.js +326 -0
- package/dist/login-qr-GF2JMIy-.js +323 -0
- package/dist/login-qr-ZYYKD6Yt.js +321 -0
- package/dist/logs-cli-CzXbX8HZ.js +242 -0
- package/dist/logs-cli-D9ngH9PF.js +245 -0
- package/dist/manager-BD5rA3w0.js +3244 -0
- package/dist/manager-BDPgBQSH.js +3246 -0
- package/dist/manager-DRWMWM--.js +3244 -0
- package/dist/manifest-registry-DbvPaBXY.js +748 -0
- package/dist/manifest-registry-kHX_MFa1.js +748 -0
- package/dist/markdown-tables-CqwihY2m.js +347 -0
- package/dist/markdown-tables-DJV7eAJZ.js +348 -0
- package/dist/media-lUqN-0O9.js +1342 -0
- package/dist/memory-cli-BLXSpgnN.js +868 -0
- package/dist/memory-cli-BcGVkkRJ.js +869 -0
- package/dist/message-channel-D_jIO87f.js +110 -0
- package/dist/migrate-BpVOar4L.js +157 -0
- package/dist/migrate-CkgGDkWy.js +157 -0
- package/dist/model-selection-Cqt6aJ0G.js +2691 -0
- package/dist/models-CExsNQPH.js +2510 -0
- package/dist/models-cli-Ba3Jmwev.js +2739 -0
- package/dist/models-cli-iDAlsbL2.js +258 -0
- package/dist/net-0A_zcaQD.js +218 -0
- package/dist/node-cli-ATmwCXIk.js +1319 -0
- package/dist/node-cli-DYFR_V25.js +1322 -0
- package/dist/node-service-CN4LqR1A.js +67 -0
- package/dist/node-service-CWt3MdSC.js +67 -0
- package/dist/nodes-cli-BeVmhTz3.js +1197 -0
- package/dist/nodes-cli-QeJIfa18.js +1200 -0
- package/dist/nodes-screen-DHyWAlla.js +234 -0
- package/dist/nodes-screen-qs3jRBPk.js +234 -0
- package/dist/note-CSlg2BnB.js +73 -0
- package/dist/note-Ctvglhp1.js +73 -0
- package/dist/npm-registry-spec-DQd4M22q.js +351 -0
- package/dist/npm-registry-spec-PxisIMts.js +351 -0
- package/dist/onboard-DeruD10m.js +1166 -0
- package/dist/onboard-SAcu5N6N.js +1165 -0
- package/dist/onboard-channels-C4iSfFXR.js +672 -0
- package/dist/onboard-channels-oVTVgoyg.js +672 -0
- package/dist/onboard-helpers-B8roRwLP.js +365 -0
- package/dist/onboard-helpers-Dgh26hgP.js +365 -0
- package/dist/onboarding-Bi-ac8we.js +911 -0
- package/dist/onboarding-C2gjB2u8.js +910 -0
- package/dist/orchestrator-DlbAYMQP.js +357 -0
- package/dist/orchestrator-DlwVRVDA.js +357 -0
- package/dist/outbound-CkKgc6iR.js +2062 -0
- package/dist/outbound-Vfm5yDh3.js +214 -0
- package/dist/outbound-bs_VK51X.js +214 -0
- package/dist/outbound-send-deps-DDjiMfEL.js +55 -0
- package/dist/pairing-cli-CJYeuEik.js +118 -0
- package/dist/pairing-cli-mqopHI8s.js +121 -0
- package/dist/pairing-store-BsXzUDPv.js +388 -0
- package/dist/pairing-store-DoNj00-X.js +388 -0
- package/dist/path-env-C_xpiG8l.js +89 -0
- package/dist/path-env-DSSMHu5A.js +89 -0
- package/dist/paths-B1vRVCad.js +126 -0
- package/dist/paths-BMuHNFxg.js +238 -0
- package/dist/paths-BXQQzXGQ.js +129 -0
- package/dist/paths-Buw_geoe.js +54 -0
- package/dist/paths-DA9WYabg.js +222 -0
- package/dist/paths-DfQGx0_k.js +129 -0
- package/dist/pi-auth-json-DOPW3e4X.js +78 -0
- package/dist/pi-auth-json-MruLmI_X.js +82 -0
- package/dist/pi-auth-json-lae_wwwo.js +80 -0
- package/dist/pi-model-discovery-7q0GxMrp.js +3 -0
- package/dist/pi-tools.policy-Csmla32P.js +200 -0
- package/dist/pi-tools.policy-xYdDLEv9.js +200 -0
- package/dist/plugin-auto-enable-CViVVWgg.js +282 -0
- package/dist/plugin-auto-enable-CjZ238UI.js +282 -0
- package/dist/plugin-registry-B4Aw2hzq.js +32 -0
- package/dist/plugin-registry-DW81arxW.js +32 -0
- package/dist/plugin-sdk/cli/cli-name.d.ts +1 -1
- package/dist/plugin-sdk/config/paths.d.ts +2 -2
- package/dist/plugin-sdk/index.js +7 -7
- package/dist/plugins-DhcGAPDB.js +38 -0
- package/dist/plugins-DtghNRtM.js +168 -0
- package/dist/plugins-cli-4vWTmOAb.js +736 -0
- package/dist/plugins-cli-CdTMbP0X.js +734 -0
- package/dist/polls-D6eCdatA.js +1343 -0
- package/dist/ports-BtZx-JKD.js +96 -0
- package/dist/ports-C8bKN8s0.js +96 -0
- package/dist/ports-DHiKnPRX.js +344 -0
- package/dist/ports-vd93M_Pt.js +317 -0
- package/dist/program-CX3aUVeb.js +176 -0
- package/dist/program-context-BPos0ivo.js +496 -0
- package/dist/progress-oiAjiiNi.js +133 -0
- package/dist/prompt-style-Cm4wOtKm.js +9 -0
- package/dist/pw-ai-4QbK5YFe.js +1865 -0
- package/dist/pw-ai-BWz3Cxt7.js +1868 -0
- package/dist/pw-ai-C83HBue2.js +1867 -0
- package/dist/qmd-manager-BcMeZiGD.js +938 -0
- package/dist/qmd-manager-CPypGJ0P.js +935 -0
- package/dist/qmd-manager-CRrSkfia.js +937 -0
- package/dist/register.agent-DDY8KJhn.js +265 -0
- package/dist/register.agent-DKawm-9d.js +1003 -0
- package/dist/register.anima-CEWUo29k.js +193 -0
- package/dist/register.anima-DBWz2rk_.js +193 -0
- package/dist/register.configure-BX67qV8k.js +103 -0
- package/dist/register.configure-CWsySuiq.js +101 -0
- package/dist/register.maintenance-0k-ZNhDg.js +543 -0
- package/dist/register.maintenance-BIwx1fzX.js +543 -0
- package/dist/register.message-CXPsoakA.js +657 -0
- package/dist/register.message-DA3jvfgI.js +660 -0
- package/dist/register.onboard-C4HG7Hqv.js +170 -0
- package/dist/register.onboard-GOpdif-j.js +170 -0
- package/dist/register.setup-B17vZT7C.js +175 -0
- package/dist/register.setup-GJyUDCqh.js +175 -0
- package/dist/register.status-health-sessions-D5876dGx.js +313 -0
- package/dist/register.status-health-sessions-lOewVIZR.js +142 -0
- package/dist/register.subclis-Dwnujj5C.js +255 -0
- package/dist/reply-CR5T_oQJ.js +32212 -0
- package/dist/reply-prefix-BcrS4Umd.js +100 -0
- package/dist/reply-prefix-Btb5o2NH.js +100 -0
- package/dist/reply-r089HuRA.js +32212 -0
- package/dist/routes-B4czFzIb.js +1820 -0
- package/dist/routes-ucJWAk5O.js +1820 -0
- package/dist/rpc-BnKxnQ0v.js +70 -0
- package/dist/rpc-DgE-xnyx.js +70 -0
- package/dist/run-main-B74kv84C.js +371 -0
- package/dist/runtime-guard-CKFdts2L.js +60 -0
- package/dist/sandbox-CJTS3er6.js +858 -0
- package/dist/sandbox-DBSiVHt_.js +859 -0
- package/dist/sandbox-cli-CrkjyU5M.js +461 -0
- package/dist/sandbox-cli-D1r5y6Sz.js +458 -0
- package/dist/security-cli-BZUdnkhn.js +462 -0
- package/dist/security-cli-DS09ebvA.js +465 -0
- package/dist/server-context-C0xZbYhg.js +824 -0
- package/dist/server-context-DVh2z7om.js +824 -0
- package/dist/server-node-events-bu9lpkMH.js +233 -0
- package/dist/server-node-events-i1Rrww31.js +231 -0
- package/dist/service-CJJwLEor.js +642 -0
- package/dist/service-DxLxBhaU.js +642 -0
- package/dist/service-audit-DB4Y3Ekp.js +488 -0
- package/dist/service-audit-M8y4TXVb.js +488 -0
- package/dist/session-CGxOLFs2.js +179 -0
- package/dist/session-DTTbdKb0.js +181 -0
- package/dist/session-cost-usage-FcdJl9c3.js +600 -0
- package/dist/session-cost-usage-qdfsGU2a.js +600 -0
- package/dist/session-yOhWcsD2.js +181 -0
- package/dist/sessions-B-Cu7JZq.js +1296 -0
- package/dist/sessions-BgLN4KFr.js +180 -0
- package/dist/sessions-CnRjwdVr.js +1296 -0
- package/dist/sessions-wRKla1Qh.js +2038 -0
- package/dist/shared-DS3UaJSP.js +66 -0
- package/dist/shared-DxNHzky3.js +77 -0
- package/dist/shared-Qpt4hUDi.js +66 -0
- package/dist/shared-kzrojZ1B.js +77 -0
- package/dist/skill-scanner-DLJji5Ye.js +263 -0
- package/dist/skills-BWFIEp4j.js +807 -0
- package/dist/skills-DV4zKdCx.js +808 -0
- package/dist/skills-cli-BY53ILm2.js +289 -0
- package/dist/skills-cli-CO3gxl8A.js +286 -0
- package/dist/skills-status-DX5pcqY3.js +166 -0
- package/dist/skills-status-zhcKzGkp.js +166 -0
- package/dist/sqlite-B6MojU1I.js +321 -0
- package/dist/sqlite-CuprTGR7.js +453 -0
- package/dist/sqlite-dzD-jMjs.js +368 -0
- package/dist/start-Cu3aLoSf.js +297 -0
- package/dist/start-Dz7tMAl8.js +296 -0
- package/dist/status-CaSxhxfV.js +2132 -0
- package/dist/status-D2C0JCX3.js +2137 -0
- package/dist/status-DlFMsQzh.js +27 -0
- package/dist/status-G0CITnKR.js +27 -0
- package/dist/status.update-CHjhVxJY.js +79 -0
- package/dist/status.update-DVFelehi.js +79 -0
- package/dist/subagent-registry-3Xb4el-8.js +14 -0
- package/dist/subagent-registry-CdSjz14I.js +2760 -0
- package/dist/subagent-registry-DNDhbHWi.js +2759 -0
- package/dist/subsystem-DfKstnEK.js +860 -0
- package/dist/system-cli-B5mt0FWa.js +82 -0
- package/dist/system-cli-Dg3UQ3Zz.js +79 -0
- package/dist/systemd-B43AvOGx.js +452 -0
- package/dist/systemd-RpPE0XGg.js +452 -0
- package/dist/systemd-hints-DMJT-Bbc.js +36 -0
- package/dist/systemd-hints-vRInKcz9.js +36 -0
- package/dist/systemd-linger-Dzyxqsod.js +75 -0
- package/dist/systemd-linger-EujbmI5A.js +75 -0
- package/dist/table-DhXHfRX2.js +279 -0
- package/dist/table-bWCLW-3P.js +279 -0
- package/dist/timeout-Ddn-5kAO.js +232 -0
- package/dist/tokens-3psI_Qk2.js +14 -0
- package/dist/tokens-BaM53PEx.js +14 -0
- package/dist/trash-Bmxs1Rnm.js +23 -0
- package/dist/trash-C39a6hKA.js +23 -0
- package/dist/tui-BHgBWhHE.js +3894 -0
- package/dist/tui-cli-B9Sq5-cC.js +50 -0
- package/dist/tui-cli-Dw7v4JoJ.js +47 -0
- package/dist/tui-mUwDwqvd.js +3894 -0
- package/dist/update-DF0GHG0j.js +317 -0
- package/dist/update-DoZLVjva.js +317 -0
- package/dist/update-check-Bt1dVPVN.js +400 -0
- package/dist/update-check-D5qAKes7.js +400 -0
- package/dist/update-cli-BNu2Oi7H.js +1105 -0
- package/dist/update-cli-D36AmALA.js +1105 -0
- package/dist/update-runner-CNQQaTwA.js +894 -0
- package/dist/update-runner-CvxZmbu-.js +894 -0
- package/dist/usage-BGCwNnjk.js +4516 -0
- package/dist/utils-DZ8pnOD5.js +243 -0
- package/dist/web-B5QG839O.js +46842 -0
- package/dist/web-Cmnvk9v0.js +2203 -0
- package/dist/web-Cv2KnTnL.js +63 -0
- package/dist/webhooks-cli-B6y89Pj_.js +319 -0
- package/dist/webhooks-cli-BDzHON4w.js +316 -0
- package/dist/whatsapp-actions-C_5MwVxM.js +45 -0
- package/dist/whatsapp-actions-hgYA12To.js +53 -0
- package/dist/whatsapp-actions-zTiVOoOV.js +49 -0
- package/dist/widearea-dns-BeIdnISJ.js +127 -0
- package/dist/widearea-dns-CF1gxpJ-.js +127 -0
- package/dist/workspace-DLna1IxR.js +649 -0
- package/dist/ws-log-Q4wO1Ztb.js +267 -0
- package/dist/ws-log-xF0kxDzp.js +267 -0
- package/package.json +1 -2
- package/dist/accounts-Cc5E4IDO.js +0 -260
- package/dist/accounts-CcVrwKqv.js +0 -259
- package/dist/acp-cli-DvphOKuh.js +0 -1081
- package/dist/acp-cli-p28pQ65a.js +0 -1084
- package/dist/agent-Cj7uDJaZ.js +0 -725
- package/dist/agent-Cuj9-2sT.js +0 -725
- package/dist/agent-events-BEBQsyE5.js +0 -182
- package/dist/agent-scope-BVf4aSwY.js +0 -112
- package/dist/agent-scope-OZi7lb8S.js +0 -452
- package/dist/agent-scope-V1bi9OYL.js +0 -452
- package/dist/agents-BUWqn_Ui.js +0 -774
- package/dist/agents.config-Dvo2ULxs.js +0 -182
- package/dist/agents.config-d6H0_3oj.js +0 -182
- package/dist/argv-DqUHKf0o.js +0 -73
- package/dist/audit-C6okOOSh.js +0 -2401
- package/dist/audit-VWjIdwC7.js +0 -2401
- package/dist/auth-91o2YM96.js +0 -648
- package/dist/auth-choice-CAmACV13.js +0 -2681
- package/dist/auth-choice-p3SeHPj2.js +0 -2681
- package/dist/auth-health-B_jXrWe6.js +0 -149
- package/dist/auth-health-DCicUKYR.js +0 -149
- package/dist/auth-lZ26wsbN.js +0 -639
- package/dist/auth-profiles-CCDD56dU.js +0 -1564
- package/dist/auth-profiles-DxI8L7bs.js +0 -2689
- package/dist/banner-Cohn04J6.js +0 -294
- package/dist/browser-cli-DANzjztE.js +0 -1676
- package/dist/browser-cli-WjsVH741.js +0 -1679
- package/dist/call-BAHvlu2G.js +0 -282
- package/dist/call-Ct7EGP_L.js +0 -282
- package/dist/catalog-BAayBt1L.js +0 -185
- package/dist/catalog-BNsf97BM.js +0 -185
- package/dist/channel-options-Dx9nPlX8.js +0 -33
- package/dist/channel-options-ZdvXrTGs.js +0 -32
- package/dist/channel-selection-CujyiWGM.js +0 -51
- package/dist/channel-selection-DfGpCyh2.js +0 -51
- package/dist/channel-web-CC0hkgkR.js +0 -2162
- package/dist/channels-cli-D7lNBpIb.js +0 -1304
- package/dist/channels-cli-DUPG8WDv.js +0 -1306
- package/dist/channels-status-issues-DBc1pU_R.js +0 -18
- package/dist/channels-status-issues-DjO9MHIG.js +0 -18
- package/dist/chrome-Bi6iZ5sG.js +0 -1601
- package/dist/chrome-DNSv7Cpy.js +0 -1629
- package/dist/chrome-DScZx4Lk.js +0 -1601
- package/dist/chunk-mxPVo000.js +0 -348
- package/dist/clack-prompter-B0kl7shw.js +0 -92
- package/dist/clack-prompter-B1YxZdRy.js +0 -92
- package/dist/cli-CfHUkOD0.js +0 -101
- package/dist/cli-ClMrIh6l.js +0 -99
- package/dist/cli-session-BkPTd9Pk.js +0 -5463
- package/dist/cli-session-Dd8DKb5a.js +0 -5408
- package/dist/client-C1avc0vD.js +0 -1692
- package/dist/client-CC94YZrT.js +0 -1692
- package/dist/clipboard-B2fBy8tG.js +0 -31
- package/dist/clipboard-BbGnZskJ.js +0 -31
- package/dist/command-format-Clp46jkj.js +0 -38
- package/dist/command-format-DELazozB.js +0 -52
- package/dist/command-format-SkzzRqR1.js +0 -52
- package/dist/command-registry-DZ4hkmA0.js +0 -248
- package/dist/commands-DtYZJSPn.js +0 -568
- package/dist/commands-Dujk1JmY.js +0 -568
- package/dist/commands-registry-Bd0xbvwG.js +0 -766
- package/dist/commands-registry-DYfRSVF3.js +0 -766
- package/dist/common-D6bu0zHC.js +0 -287
- package/dist/common-zW9Y2P1B.js +0 -287
- package/dist/completion-cli-tSe7Pmqm.js +0 -431
- package/dist/completion-cli-vn4IScs5.js +0 -432
- package/dist/config-C8rUDJXY.js +0 -5704
- package/dist/config-CLZ_XGVw.js +0 -6523
- package/dist/config-SY8M0kM_.js +0 -5705
- package/dist/config-cli-1V7D2Wsw.js +0 -247
- package/dist/config-cli-CjWEC81L.js +0 -244
- package/dist/config-guard-BW2gpKj_.js +0 -93
- package/dist/config-guard-BvxuzHpo.js +0 -76
- package/dist/config-sync-CoIIbEOe.js +0 -91
- package/dist/config-sync-DvAttep0.js +0 -91
- package/dist/configure-Bf0oupCE.js +0 -959
- package/dist/configure-DRM-7zFf.js +0 -960
- package/dist/context-D5iEFzv9.js +0 -60
- package/dist/control-service-C8m8F9pr.js +0 -72
- package/dist/control-service-DKotCWCg.js +0 -72
- package/dist/cron-cli-DB_FLYHD.js +0 -448
- package/dist/cron-cli-bxm5lrrO.js +0 -451
- package/dist/daemon-cli-1LsOnICv.js +0 -566
- package/dist/daemon-cli-CC2NrJ7a.js +0 -565
- package/dist/daemon-runtime-BXZhtBL9.js +0 -460
- package/dist/daemon-runtime-DW4USC7r.js +0 -460
- package/dist/deliver-B4HuPwJA.js +0 -1162
- package/dist/deliver-LiY5oL52.js +0 -1097
- package/dist/deliver-xrmk7xjh.js +0 -1097
- package/dist/delivery-queue-TnQykYsg.js +0 -220
- package/dist/deps-CMMOiOsF.js +0 -42
- package/dist/devices-cli-Be5he2SA.js +0 -195
- package/dist/devices-cli-z6ecoFe9.js +0 -198
- package/dist/diagnostics-Dj75aEHN.js +0 -35
- package/dist/diagnostics-DlIw6fqD.js +0 -35
- package/dist/directory-cli-CEy-0nxj.js +0 -243
- package/dist/directory-cli-DpzKcigr.js +0 -246
- package/dist/dispatcher-10Shiuz3.js +0 -100
- package/dist/dispatcher-3Jae6AiW.js +0 -100
- package/dist/dns-cli-Bat1pkc-.js +0 -200
- package/dist/dns-cli-NohNyEo0.js +0 -197
- package/dist/dock-DbxBBv30.js +0 -753
- package/dist/dock-cPBY4qGl.js +0 -753
- package/dist/docs-cli-BWp6p-Tq.js +0 -161
- package/dist/docs-cli-x22FnZfL.js +0 -159
- package/dist/doctor-BrT5m_on.js +0 -1815
- package/dist/doctor-Pp2HVnjM.js +0 -1813
- package/dist/doctor-completion-DNTimX9o.js +0 -92
- package/dist/doctor-completion-ylN9QAJ6.js +0 -92
- package/dist/doctor-config-flow-D1w3700T.js +0 -1232
- package/dist/doctor-config-flow-Dq50iE1R.js +0 -1232
- package/dist/engine-B9avUJL5.js +0 -563
- package/dist/engine-BiUQ25D4.js +0 -563
- package/dist/env-0lJfCPsw.js +0 -32
- package/dist/exec-BenD3A5l.js +0 -1167
- package/dist/exec-Bv3pyjeM.js +0 -255
- package/dist/exec-approvals-CdLmKX2R.js +0 -1221
- package/dist/exec-approvals-cli-DXfV6G8H.js +0 -368
- package/dist/exec-approvals-cli-J2cZs10o.js +0 -371
- package/dist/frontmatter-YijVi0FQ.js +0 -204
- package/dist/gateway-cli-DOAbA0pc.js +0 -19972
- package/dist/gateway-cli-QpWtBhQy.js +0 -19971
- package/dist/gateway-rpc-DJKBil9s.js +0 -28
- package/dist/gateway-rpc-DVterpLP.js +0 -28
- package/dist/github-copilot-auth-4IUFp669.js +0 -1418
- package/dist/github-copilot-auth-C9E0IROs.js +0 -1418
- package/dist/gmail-setup-utils-BPo_LkKI.js +0 -428
- package/dist/gmail-setup-utils-D3Yqgor7.js +0 -428
- package/dist/health-BeZnqp6m.js +0 -1258
- package/dist/health-Cn2OoVWZ.js +0 -1253
- package/dist/health-format-CdP99j3Y.js +0 -208
- package/dist/health-format-JEChH08S.js +0 -208
- package/dist/heartbeat-visibility-BL3WAchI.js +0 -98
- package/dist/heartbeat-visibility-CQ9QimI7.js +0 -98
- package/dist/help-format-Dl4bsrLI.js +0 -17
- package/dist/helpers-ZKNRexvX.js +0 -10
- package/dist/hooks-cli-D99hXt7K.js +0 -991
- package/dist/hooks-cli-DMB8RiEO.js +0 -993
- package/dist/hooks-status-B-e96dZj.js +0 -356
- package/dist/hooks-status-C_9sE0ox.js +0 -356
- package/dist/image-ops-Dlt3T7th.js +0 -541
- package/dist/image-ops-omlvdfah.js +0 -541
- package/dist/init-Bm04RagW.js +0 -122
- package/dist/init-CaJBf4p1.js +0 -122
- package/dist/installs-C2iMRBVz.js +0 -383
- package/dist/installs-D-cPGdCw.js +0 -383
- package/dist/ipv4-Bf7NS3QU.js +0 -1964
- package/dist/ipv4-wWNs8IH_.js +0 -1964
- package/dist/lanes-CNxj3tit.js +0 -232
- package/dist/lifecycle-core-B_7XRcvF.js +0 -388
- package/dist/lifecycle-core-By83PVAK.js +0 -387
- package/dist/links-BfjHVTB_.js +0 -15
- package/dist/links-DPGe0OHw.js +0 -15
- package/dist/logging-DB6BQmhi.js +0 -15
- package/dist/logging-mcb66J0p.js +0 -15
- package/dist/login-BDCg6D0N.js +0 -61
- package/dist/login-BDfnbjnZ.js +0 -59
- package/dist/login-BqH1itcg.js +0 -61
- package/dist/login-qr-CyOw3R4r.js +0 -321
- package/dist/login-qr-D8ECtb72.js +0 -323
- package/dist/login-qr-RnR7e4Bw.js +0 -326
- package/dist/logs-cli--j89L74J.js +0 -245
- package/dist/logs-cli-DpEMg_Gq.js +0 -242
- package/dist/manager-B4OyvcxT.js +0 -3244
- package/dist/manager-Cqc1CeH7.js +0 -3246
- package/dist/manager-DUyQPFvj.js +0 -3244
- package/dist/manifest-registry-CW1zCyRF.js +0 -748
- package/dist/manifest-registry-D4lM2RdV.js +0 -748
- package/dist/markdown-tables-BT1X6jqH.js +0 -347
- package/dist/markdown-tables-DHgOK2vI.js +0 -348
- package/dist/media-THyainiE.js +0 -1342
- package/dist/memory-cli-BKocCWXM.js +0 -868
- package/dist/memory-cli-Jmma-xI_.js +0 -869
- package/dist/message-channel-dSTVVCyX.js +0 -110
- package/dist/migrate-BR6iAIjO.js +0 -157
- package/dist/migrate-D0EcMs0f.js +0 -157
- package/dist/model-selection-YcSr9CgC.js +0 -2691
- package/dist/models-1vUQBVfw.js +0 -2510
- package/dist/models-cli-BK3BwUhL.js +0 -2739
- package/dist/models-cli-DECrM8oA.js +0 -258
- package/dist/net-B5lXhYLV.js +0 -218
- package/dist/node-cli-cLHUNpPD.js +0 -1319
- package/dist/node-cli-fO7Y132S.js +0 -1322
- package/dist/node-service-BFxHJsno.js +0 -67
- package/dist/node-service-DUnan4uK.js +0 -67
- package/dist/nodes-cli-BCq35E6N.js +0 -1200
- package/dist/nodes-cli-vD7MwAKP.js +0 -1197
- package/dist/nodes-screen-1YiLkqr5.js +0 -234
- package/dist/nodes-screen-DZeD8hE5.js +0 -234
- package/dist/note-Bi8Wb8DV.js +0 -73
- package/dist/note-uiuPxhyX.js +0 -73
- package/dist/npm-registry-spec-B-XIShkB.js +0 -351
- package/dist/npm-registry-spec-za3itb5Y.js +0 -351
- package/dist/onboard-Ds6w_sWo.js +0 -1165
- package/dist/onboard-SAVx3bp4.js +0 -1166
- package/dist/onboard-channels-Cg_EkBa4.js +0 -672
- package/dist/onboard-channels-D7NbA55V.js +0 -672
- package/dist/onboard-helpers-DO_hgZb9.js +0 -365
- package/dist/onboard-helpers-_XgJgeqh.js +0 -365
- package/dist/onboarding-3hLmDd0r.js +0 -911
- package/dist/onboarding-B4LKLsbU.js +0 -910
- package/dist/orchestrator-BKzmyBWy.js +0 -357
- package/dist/orchestrator-BN3QCz2s.js +0 -357
- package/dist/outbound-BgA9hNlP.js +0 -2062
- package/dist/outbound-CjdvVhUI.js +0 -214
- package/dist/outbound-DOGe6qb2.js +0 -214
- package/dist/outbound-send-deps-Du5aBpd7.js +0 -55
- package/dist/pairing-cli-2vnyg_Nd.js +0 -118
- package/dist/pairing-cli-BH1KQtNV.js +0 -121
- package/dist/pairing-store-DJz_9Gv0.js +0 -388
- package/dist/pairing-store-DmOzxcuk.js +0 -388
- package/dist/path-env-Bu6k0jDQ.js +0 -89
- package/dist/path-env-C0zQSjw8.js +0 -89
- package/dist/paths-BTc4nk-6.js +0 -126
- package/dist/paths-BgUi2Z2G.js +0 -54
- package/dist/paths-C6VCWKo3.js +0 -238
- package/dist/paths-CCxa0o9c.js +0 -222
- package/dist/paths-CxRf2rBG.js +0 -129
- package/dist/paths-hcX1Gqg5.js +0 -129
- package/dist/pi-auth-json-B68R7q7_.js +0 -82
- package/dist/pi-auth-json-CR0jXAgq.js +0 -78
- package/dist/pi-auth-json-ZYzi3nxs.js +0 -80
- package/dist/pi-model-discovery-Cxs4pvC2.js +0 -3
- package/dist/pi-tools.policy-D81U5xy0.js +0 -200
- package/dist/pi-tools.policy-DSHkkb5b.js +0 -200
- package/dist/plugin-auto-enable-CxF4bpDN.js +0 -282
- package/dist/plugin-auto-enable-jNaAeyEh.js +0 -282
- package/dist/plugin-registry-C7XWotZG.js +0 -32
- package/dist/plugin-registry-DcUCbGax.js +0 -32
- package/dist/plugins-B362e77G.js +0 -168
- package/dist/plugins-CmSUIUNi.js +0 -38
- package/dist/plugins-cli-BsCEnoQ7.js +0 -734
- package/dist/plugins-cli-QSIsMUG7.js +0 -736
- package/dist/polls-CItfB1H8.js +0 -1343
- package/dist/ports-BVLMN1Sr.js +0 -96
- package/dist/ports-CqLSlU6Z.js +0 -317
- package/dist/ports-D94CwCrv.js +0 -344
- package/dist/ports-D_NHthOz.js +0 -96
- package/dist/program-DkJHjI0R.js +0 -176
- package/dist/program-context-DnyGM2SC.js +0 -496
- package/dist/progress-Bek_GyWS.js +0 -133
- package/dist/prompt-style-lu0clOOE.js +0 -9
- package/dist/pw-ai-BLVMuSLv.js +0 -1867
- package/dist/pw-ai-DZJWEF_f.js +0 -1865
- package/dist/pw-ai-dzf-ptcn.js +0 -1868
- package/dist/qmd-manager-Cur_Ekn0.js +0 -937
- package/dist/qmd-manager-DNAUuwjK.js +0 -938
- package/dist/qmd-manager-DepEoASu.js +0 -935
- package/dist/register.agent-CSWvzOkR.js +0 -265
- package/dist/register.agent-UeH2NXmH.js +0 -1003
- package/dist/register.anima-DOdee0dh.js +0 -193
- package/dist/register.anima-HHDWsz6r.js +0 -193
- package/dist/register.configure-CSJFxdz9.js +0 -103
- package/dist/register.configure-D84Fvcz4.js +0 -101
- package/dist/register.maintenance-B3pvNbZb.js +0 -543
- package/dist/register.maintenance-BKVOwkw6.js +0 -543
- package/dist/register.message-BAO6CPl2.js +0 -657
- package/dist/register.message-OXoOKE_6.js +0 -660
- package/dist/register.onboard-BK_ixVmD.js +0 -170
- package/dist/register.onboard-cfCaPx6j.js +0 -170
- package/dist/register.setup-BGfDnzph.js +0 -175
- package/dist/register.setup-Y-Q74M-0.js +0 -175
- package/dist/register.status-health-sessions-CT14eitH.js +0 -142
- package/dist/register.status-health-sessions-TfZMzAUn.js +0 -313
- package/dist/register.subclis-BZwdlNHC.js +0 -255
- package/dist/reply-mlsExaZm.js +0 -32212
- package/dist/reply-prefix-B0CfR4bM.js +0 -100
- package/dist/reply-prefix-w4a39ybC.js +0 -100
- package/dist/reply-qalRISe_.js +0 -32212
- package/dist/routes-CENsHJyg.js +0 -1820
- package/dist/routes-DO0HqW2e.js +0 -1820
- package/dist/rpc-C0pjNhBi.js +0 -70
- package/dist/rpc-DZ44PIXE.js +0 -70
- package/dist/run-main-BMpKw8Mp.js +0 -371
- package/dist/runtime-guard-BSUFiAQV.js +0 -60
- package/dist/sandbox-BIGfMYEI.js +0 -858
- package/dist/sandbox-DxP3IpUP.js +0 -859
- package/dist/sandbox-cli-DtLGH8sL.js +0 -461
- package/dist/sandbox-cli-_Tg7lfJ_.js +0 -458
- package/dist/security-cli-BRwgbedo.js +0 -462
- package/dist/security-cli-D3bSuyZt.js +0 -465
- package/dist/server-context-49XFFxFg.js +0 -824
- package/dist/server-context-LrlgrZzS.js +0 -824
- package/dist/server-node-events-Dm52i7NW.js +0 -231
- package/dist/server-node-events-QX523UyF.js +0 -233
- package/dist/service-BNVpYcQe.js +0 -642
- package/dist/service-D56aMXUB.js +0 -642
- package/dist/service-audit-D0X_XAB2.js +0 -488
- package/dist/service-audit-qmf6XMmP.js +0 -488
- package/dist/session-CrQQLLhx.js +0 -179
- package/dist/session-LocsOOWJ.js +0 -181
- package/dist/session-Vlce2BAT.js +0 -181
- package/dist/session-cost-usage-BwiTZuKl.js +0 -600
- package/dist/session-cost-usage-DT9YNXTJ.js +0 -600
- package/dist/sessions-BfV53TbG.js +0 -1296
- package/dist/sessions-BimpX_km.js +0 -180
- package/dist/sessions-DcXpzig0.js +0 -1296
- package/dist/sessions-Wd18dukK.js +0 -2038
- package/dist/shared-Bsr69u_7.js +0 -77
- package/dist/shared-Cgly1vPb.js +0 -66
- package/dist/shared-JOo05hST.js +0 -66
- package/dist/shared-f7dvQsi7.js +0 -77
- package/dist/skill-scanner-CkaVLABv.js +0 -263
- package/dist/skills-B-G7UHOa.js +0 -808
- package/dist/skills-B5LQx4lT.js +0 -807
- package/dist/skills-cli-DUGe2ZWW.js +0 -286
- package/dist/skills-cli-DtOk0bvK.js +0 -289
- package/dist/skills-status-Clq9ZnYu.js +0 -166
- package/dist/skills-status-JQluhU-P.js +0 -166
- package/dist/sqlite-BukcjdJa.js +0 -321
- package/dist/sqlite-CGcOZZ0C.js +0 -368
- package/dist/sqlite-Ck6f9KWc.js +0 -453
- package/dist/start--xmSFepB.js +0 -372
- package/dist/start-BdlZbqrr.js +0 -371
- package/dist/status-BgoeFm6g.js +0 -2137
- package/dist/status-BjjDrUq7.js +0 -27
- package/dist/status-Ct0DgOZ-.js +0 -2132
- package/dist/status-RA_uNmK0.js +0 -27
- package/dist/status.update-BjOH3GlS.js +0 -79
- package/dist/status.update-DLU1qBf0.js +0 -79
- package/dist/subagent-registry-9RLdKxES.js +0 -2760
- package/dist/subagent-registry-Byuex3zp.js +0 -2759
- package/dist/subagent-registry-DOBunBYS.js +0 -14
- package/dist/subsystem-Dowf8fSU.js +0 -860
- package/dist/system-cli-C5oBpzni.js +0 -79
- package/dist/system-cli-DXNKD_Id.js +0 -82
- package/dist/systemd-BSrHDyeU.js +0 -452
- package/dist/systemd-By5xdSB4.js +0 -452
- package/dist/systemd-hints-BtjL_5Rh.js +0 -36
- package/dist/systemd-hints-sJmr6cjb.js +0 -36
- package/dist/systemd-linger-CTmV2Gci.js +0 -75
- package/dist/systemd-linger-CmyqQkeC.js +0 -75
- package/dist/table-BL0lJzsm.js +0 -279
- package/dist/table-DoiRPsn0.js +0 -279
- package/dist/timeout-CswI_K-U.js +0 -232
- package/dist/tokens-C-X7wDKj.js +0 -14
- package/dist/tokens-DkvqA72p.js +0 -14
- package/dist/trash-BJLK1vMn.js +0 -23
- package/dist/trash-_x5UZ94k.js +0 -23
- package/dist/tui-BHjxDFZC.js +0 -3894
- package/dist/tui-CgOocwN8.js +0 -3894
- package/dist/tui-cli-5ANH8dE5.js +0 -47
- package/dist/tui-cli-BQ4P-JW_.js +0 -50
- package/dist/update-LFgxHHPd.js +0 -317
- package/dist/update-TxptCqk7.js +0 -317
- package/dist/update-check-CWc7YXmc.js +0 -400
- package/dist/update-check-IhlWaui6.js +0 -400
- package/dist/update-cli-PtXU62w7.js +0 -1105
- package/dist/update-cli-Va0EtETG.js +0 -1105
- package/dist/update-runner-BLeKFkiB.js +0 -894
- package/dist/update-runner-Iuzpc-_y.js +0 -894
- package/dist/usage-ApGvBLVg.js +0 -4516
- package/dist/utils-Bsw__U-F.js +0 -243
- package/dist/web-B6_Ky60G.js +0 -63
- package/dist/web-EZLQEWXY.js +0 -46842
- package/dist/web-pec8YJUX.js +0 -2203
- package/dist/webhooks-cli-BYQKTHTp.js +0 -319
- package/dist/webhooks-cli-C2_xtsUQ.js +0 -316
- package/dist/whatsapp-actions-C72VCq8f.js +0 -49
- package/dist/whatsapp-actions-Ck9Uv0Nw.js +0 -45
- package/dist/whatsapp-actions-D0reTj2k.js +0 -53
- package/dist/widearea-dns-B6ocX23x.js +0 -127
- package/dist/widearea-dns-NsEUNYwz.js +0 -127
- package/dist/workspace-Dcfoy5JJ.js +0 -649
- package/dist/ws-log-N8R5MvGE.js +0 -267
- package/dist/ws-log-gwFxPxj5.js +0 -267
- /package/dist/{auto-update-CUeF99gI.js → auto-update-CpF0fycd.js} +0 -0
- /package/dist/{auto-update-cgkp9ZTJ.js → auto-update-DNWdO7uF.js} +0 -0
- /package/dist/{brew-CVZkr0GU.js → brew-nqf_MiE4.js} +0 -0
- /package/dist/{budget-DxYQSekw.js → budget-CPedI-qW.js} +0 -0
- /package/dist/{budget-BWBp8Res.js → budget-CRpvqDRX.js} +0 -0
- /package/dist/{cli-utils-DtAxdCte.js → cli-utils-C1YHVD4o.js} +0 -0
- /package/dist/{command-options-CSbuuqHr.js → command-options-BbponVnw.js} +0 -0
- /package/dist/{command-options-Cp1tf96a.js → command-options-s0gnvXnS.js} +0 -0
- /package/dist/{constants-O8yBqCBv.js → constants-Dhb6zSIV.js} +0 -0
- /package/dist/{dangerous-tools-5ObDWy1N.js → dangerous-tools-DGTtJ_JR.js} +0 -0
- /package/dist/{dangerous-tools-Jwr7jqNw.js → dangerous-tools-DxrfTOfT.js} +0 -0
- /package/dist/{delivery-queue-B6IHz4Ry.js → delivery-queue-Bxm0nzw7.js} +0 -0
- /package/dist/{display-BDOsXu8F.js → display-Jy3UdGzA.js} +0 -0
- /package/dist/{errors-CHow2wtt.js → errors-CKaCqKga.js} +0 -0
- /package/dist/{exec-BizYYQgP.js → exec-DDmuVVNq.js} +0 -0
- /package/dist/{format-Mq6iU0_5.js → format-ByEjgyTF.js} +0 -0
- /package/dist/{format-duration-DhWzz_5b.js → format-duration-Aaj5tjJd.js} +0 -0
- /package/dist/{format-relative-C6kUHuOj.js → format-relative-79_Y1n2Y.js} +0 -0
- /package/dist/{help-format-DUBI91Ti.js → help-format-BMKzarov.js} +0 -0
- /package/dist/{helpers-eJFa4K6r.js → helpers-DpEB9Mh0.js} +0 -0
- /package/dist/{helpers-DLgbkcEn.js → helpers-FMld9sBT.js} +0 -0
- /package/dist/{input-provenance-DJBdpeKk.js → input-provenance-Cy_KnBlP.js} +0 -0
- /package/dist/{is-main-Dt9DTcH1.js → is-main-yjaVwMtJ.js} +0 -0
- /package/dist/{loader-l2OBdJ8x.js → loader-Br7Vr0zn.js} +0 -0
- /package/dist/{loader-BoYxRfcW.js → loader-CkmOrXcC.js} +0 -0
- /package/dist/{logging-BdnOSVPD.js → logging-CY-Q5cwf.js} +0 -0
- /package/dist/{message-channel-w4F2b2F6.js → message-channel-dua8OOGJ.js} +0 -0
- /package/dist/{mime-B1ZoR53M.js → mime-CBg4KybI.js} +0 -0
- /package/dist/{model-param-b-DPwyNGn8.js → model-param-b-DW9f0NN8.js} +0 -0
- /package/dist/{node-match-8XZnaid6.js → node-match-BV8bTBd4.js} +0 -0
- /package/dist/{normalize-GDK8JTNW.js → normalize-_lmlBOW9.js} +0 -0
- /package/dist/{openclaw-root-C85WMnVV.js → openclaw-root-JPvmPTf7.js} +0 -0
- /package/dist/{outbound-send-deps-ANnAhImn.js → outbound-send-deps-BfUvuWGa.js} +0 -0
- /package/dist/{parse-6-2MDhdT.js → parse-CZRwKocn.js} +0 -0
- /package/dist/{parse-log-line-Bqh1SSzC.js → parse-log-line-CvrZEK6A.js} +0 -0
- /package/dist/{parse-log-line-DUZCjXbl.js → parse-log-line-mLdat0AH.js} +0 -0
- /package/dist/{parse-port-BKB9Exlg.js → parse-port-BSOOdo7I.js} +0 -0
- /package/dist/{parse-port-DrfvwwiL.js → parse-port-Y0NK62x1.js} +0 -0
- /package/dist/{parse-timeout-Di_tcEmi.js → parse-timeout-DVPQ3n9j.js} +0 -0
- /package/dist/{paths-DcVEkYX5.js → paths-DHjlJ6cn.js} +0 -0
- /package/dist/{pi-model-discovery-DsRqYJLy.js → pi-model-discovery-DzEIEgHL.js} +0 -0
- /package/dist/{plugins-CDJw924T.js → plugins-D6PBOdkn.js} +0 -0
- /package/dist/{program-context-Bvn8046-.js → program-context-Q1hkT73c.js} +0 -0
- /package/dist/{progress-CbZ2D53A.js → progress-C9Ha1NJh.js} +0 -0
- /package/dist/{prompt-style-DKy6qQxR.js → prompt-style-DQi8j03a.js} +0 -0
- /package/dist/{prompts-BI__va99.js → prompts-BEHxUC3w.js} +0 -0
- /package/dist/{prompts-_dDWkCAz.js → prompts-CSOhuiqe.js} +0 -0
- /package/dist/{queue-D_u34pbL.js → queue-BJGo7kAB.js} +0 -0
- /package/dist/{queue-PG591iID.js → queue-DYgUbdoq.js} +0 -0
- /package/dist/{redact-ClVwO7Nn.js → redact-CyKvdFrg.js} +0 -0
- /package/dist/{registry-Bs_DJK9E.js → registry-C5MAYD4V.js} +0 -0
- /package/dist/{registry-D_zlP1U-.js → registry-CRrXXVs0.js} +0 -0
- /package/dist/{requirements-BzZxj2Wu.js → requirements-CGkxTCu4.js} +0 -0
- /package/dist/{requirements-DIW1svgA.js → requirements-CIDaOcbO.js} +0 -0
- /package/dist/{runtime-guard-DeOXA_86.js → runtime-guard-nL3Lp8T-.js} +0 -0
- /package/dist/{secret-equal-Dghy3xsA.js → secret-equal-DJpmLXlG.js} +0 -0
- /package/dist/{send-BhAfdGII.js → send-CTcxgDDU.js} +0 -0
- /package/dist/{send-ga9udK1_.js → send-DPezUR3-.js} +0 -0
- /package/dist/{send-C2t9xpXI.js → send-DZQTaG7-.js} +0 -0
- /package/dist/{send-DigO-i9j.js → send-VDff2gra.js} +0 -0
- /package/dist/{send-Dz2BDHll.js → send-bgQNV8d1.js} +0 -0
- /package/dist/{session-key-BGiG_JcT.js → session-key-CQT-NR6w.js} +0 -0
- /package/dist/{shell-argv-CAq1mLa2.js → shell-argv-n9IueeJQ.js} +0 -0
- /package/dist/{skill-scanner-Coo4QoCd.js → skill-scanner-o6NgVMD9.js} +0 -0
- /package/dist/{status-CMnlcBVc.js → status-C53kTIXF.js} +0 -0
- /package/dist/{status-tDZPwewW.js → status-CZDDA_Sy.js} +0 -0
- /package/dist/{system-run-command-X9lDJIy0.js → system-run-command-BCjUffN9.js} +0 -0
- /package/dist/{system-run-command-DGk7dwQP.js → system-run-command-CqAqKL9K.js} +0 -0
- /package/dist/{tailnet-CuiNECdL.js → tailnet-Ciwjv243.js} +0 -0
- /package/dist/{templates-CeYJjVzw.js → templates-37RKpACb.js} +0 -0
- /package/dist/{templates-I3Z0xplD.js → templates-DPalk30o.js} +0 -0
- /package/dist/{thinking-BXEswx1X.js → thinking-2hxwmvTl.js} +0 -0
- /package/dist/{transcript-events-C1hdue6u.js → transcript-events-Bp7fGnwv.js} +0 -0
- /package/dist/{transcript-tools-DuyYOkUq.js → transcript-tools-D4Lbxlka.js} +0 -0
- /package/dist/{usage-format-BAirWUSO.js → usage-format-6Uar63S0.js} +0 -0
- /package/dist/{utils-C9sj30YY.js → utils-DT8uXjFS.js} +0 -0
- /package/dist/{wsl-CqyuRvtM.js → wsl-CrPvx2kZ.js} +0 -0
- /package/dist/{wsl-ymJYvc9Q.js → wsl-UvJ5dHah.js} +0 -0
|
@@ -0,0 +1,1162 @@
|
|
|
1
|
+
import { t as __exportAll } from "./rolldown-runtime-Cbj13DAv.js";
|
|
2
|
+
import { s as resolveStateDir } from "./paths-DA9WYabg.js";
|
|
3
|
+
import { C as normalizeAccountId$1 } from "./workspace-DLna1IxR.js";
|
|
4
|
+
import { l as createSubsystemLogger, x as getActivePluginRegistry } from "./exec-B7sUS164.js";
|
|
5
|
+
import { H as isSilentReplyText, V as SILENT_REPLY_TOKEN, k as getChannelDock, n as appendAssistantMessageToSessionTranscript, r as resolveMirroredTranscriptText } from "./sessions-wRKla1Qh.js";
|
|
6
|
+
import { r as normalizeChannelId, t as getChannelPlugin } from "./plugins-DtghNRtM.js";
|
|
7
|
+
import { a as chunkMarkdownTextWithMode, c as resolveChunkMode, l as resolveTextChunkLimit, r as chunkByParagraph, t as resolveMarkdownTableMode, u as parseFenceSpans } from "./markdown-tables-CqwihY2m.js";
|
|
8
|
+
import { t as sendMessageSignal } from "./send-BTA6qupx.js";
|
|
9
|
+
import path from "node:path";
|
|
10
|
+
import fsSync from "node:fs";
|
|
11
|
+
import crypto from "node:crypto";
|
|
12
|
+
|
|
13
|
+
//#region src/channels/plugins/media-limits.ts
|
|
14
|
+
const MB = 1024 * 1024;
|
|
15
|
+
function resolveChannelMediaMaxBytes(params) {
|
|
16
|
+
const accountId = normalizeAccountId$1(params.accountId);
|
|
17
|
+
const channelLimit = params.resolveChannelLimitMb({
|
|
18
|
+
cfg: params.cfg,
|
|
19
|
+
accountId
|
|
20
|
+
});
|
|
21
|
+
if (channelLimit) return channelLimit * MB;
|
|
22
|
+
if (params.cfg.agents?.defaults?.mediaMaxMb) return params.cfg.agents.defaults.mediaMaxMb * MB;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
//#endregion
|
|
26
|
+
//#region src/channels/plugins/outbound/load.ts
|
|
27
|
+
const cache = /* @__PURE__ */ new Map();
|
|
28
|
+
let lastRegistry = null;
|
|
29
|
+
function ensureCacheForRegistry(registry) {
|
|
30
|
+
if (registry === lastRegistry) return;
|
|
31
|
+
cache.clear();
|
|
32
|
+
lastRegistry = registry;
|
|
33
|
+
}
|
|
34
|
+
async function loadChannelOutboundAdapter(id) {
|
|
35
|
+
const registry = getActivePluginRegistry();
|
|
36
|
+
ensureCacheForRegistry(registry);
|
|
37
|
+
const cached = cache.get(id);
|
|
38
|
+
if (cached) return cached;
|
|
39
|
+
const outbound = (registry?.channels.find((entry) => entry.plugin.id === id))?.plugin.outbound;
|
|
40
|
+
if (outbound) {
|
|
41
|
+
cache.set(id, outbound);
|
|
42
|
+
return outbound;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
//#endregion
|
|
47
|
+
//#region src/plugins/hooks.ts
|
|
48
|
+
/**
|
|
49
|
+
* Get hooks for a specific hook name, sorted by priority (higher first).
|
|
50
|
+
*/
|
|
51
|
+
function getHooksForName(registry, hookName) {
|
|
52
|
+
return registry.typedHooks.filter((h) => h.hookName === hookName).toSorted((a, b) => (b.priority ?? 0) - (a.priority ?? 0));
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Create a hook runner for a specific registry.
|
|
56
|
+
*/
|
|
57
|
+
function createHookRunner(registry, options = {}) {
|
|
58
|
+
const logger = options.logger;
|
|
59
|
+
const catchErrors = options.catchErrors ?? true;
|
|
60
|
+
/**
|
|
61
|
+
* Run a hook that doesn't return a value (fire-and-forget style).
|
|
62
|
+
* All handlers are executed in parallel for performance.
|
|
63
|
+
*/
|
|
64
|
+
async function runVoidHook(hookName, event, ctx) {
|
|
65
|
+
const hooks = getHooksForName(registry, hookName);
|
|
66
|
+
if (hooks.length === 0) return;
|
|
67
|
+
logger?.debug?.(`[hooks] running ${hookName} (${hooks.length} handlers)`);
|
|
68
|
+
const promises = hooks.map(async (hook) => {
|
|
69
|
+
try {
|
|
70
|
+
await hook.handler(event, ctx);
|
|
71
|
+
} catch (err) {
|
|
72
|
+
const msg = `[hooks] ${hookName} handler from ${hook.pluginId} failed: ${String(err)}`;
|
|
73
|
+
if (catchErrors) logger?.error(msg);
|
|
74
|
+
else throw new Error(msg, { cause: err });
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
await Promise.all(promises);
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Run a hook that can return a modifying result.
|
|
81
|
+
* Handlers are executed sequentially in priority order, and results are merged.
|
|
82
|
+
*/
|
|
83
|
+
async function runModifyingHook(hookName, event, ctx, mergeResults) {
|
|
84
|
+
const hooks = getHooksForName(registry, hookName);
|
|
85
|
+
if (hooks.length === 0) return;
|
|
86
|
+
logger?.debug?.(`[hooks] running ${hookName} (${hooks.length} handlers, sequential)`);
|
|
87
|
+
let result;
|
|
88
|
+
for (const hook of hooks) try {
|
|
89
|
+
const handlerResult = await hook.handler(event, ctx);
|
|
90
|
+
if (handlerResult !== void 0 && handlerResult !== null) if (mergeResults && result !== void 0) result = mergeResults(result, handlerResult);
|
|
91
|
+
else result = handlerResult;
|
|
92
|
+
} catch (err) {
|
|
93
|
+
const msg = `[hooks] ${hookName} handler from ${hook.pluginId} failed: ${String(err)}`;
|
|
94
|
+
if (catchErrors) logger?.error(msg);
|
|
95
|
+
else throw new Error(msg, { cause: err });
|
|
96
|
+
}
|
|
97
|
+
return result;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Run before_agent_start hook.
|
|
101
|
+
* Allows plugins to inject context into the system prompt.
|
|
102
|
+
* Runs sequentially, merging systemPrompt and prependContext from all handlers.
|
|
103
|
+
*/
|
|
104
|
+
async function runBeforeAgentStart(event, ctx) {
|
|
105
|
+
return runModifyingHook("before_agent_start", event, ctx, (acc, next) => ({
|
|
106
|
+
systemPrompt: next.systemPrompt ?? acc?.systemPrompt,
|
|
107
|
+
prependContext: acc?.prependContext && next.prependContext ? `${acc.prependContext}\n\n${next.prependContext}` : next.prependContext ?? acc?.prependContext
|
|
108
|
+
}));
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Run agent_end hook.
|
|
112
|
+
* Allows plugins to analyze completed conversations.
|
|
113
|
+
* Runs in parallel (fire-and-forget).
|
|
114
|
+
*/
|
|
115
|
+
async function runAgentEnd(event, ctx) {
|
|
116
|
+
return runVoidHook("agent_end", event, ctx);
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Run before_compaction hook.
|
|
120
|
+
*/
|
|
121
|
+
async function runBeforeCompaction(event, ctx) {
|
|
122
|
+
return runVoidHook("before_compaction", event, ctx);
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Run after_compaction hook.
|
|
126
|
+
*/
|
|
127
|
+
async function runAfterCompaction(event, ctx) {
|
|
128
|
+
return runVoidHook("after_compaction", event, ctx);
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Run before_reset hook.
|
|
132
|
+
* Fired when /new or /reset clears a session, before messages are lost.
|
|
133
|
+
* Runs in parallel (fire-and-forget).
|
|
134
|
+
*/
|
|
135
|
+
async function runBeforeReset(event, ctx) {
|
|
136
|
+
return runVoidHook("before_reset", event, ctx);
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Run message_received hook.
|
|
140
|
+
* Runs in parallel (fire-and-forget).
|
|
141
|
+
*/
|
|
142
|
+
async function runMessageReceived(event, ctx) {
|
|
143
|
+
return runVoidHook("message_received", event, ctx);
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Run message_sending hook.
|
|
147
|
+
* Allows plugins to modify or cancel outgoing messages.
|
|
148
|
+
* Runs sequentially.
|
|
149
|
+
*/
|
|
150
|
+
async function runMessageSending(event, ctx) {
|
|
151
|
+
return runModifyingHook("message_sending", event, ctx, (acc, next) => ({
|
|
152
|
+
content: next.content ?? acc?.content,
|
|
153
|
+
cancel: next.cancel ?? acc?.cancel
|
|
154
|
+
}));
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Run message_sent hook.
|
|
158
|
+
* Runs in parallel (fire-and-forget).
|
|
159
|
+
*/
|
|
160
|
+
async function runMessageSent(event, ctx) {
|
|
161
|
+
return runVoidHook("message_sent", event, ctx);
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Run before_tool_call hook.
|
|
165
|
+
* Allows plugins to modify or block tool calls.
|
|
166
|
+
* Runs sequentially.
|
|
167
|
+
*/
|
|
168
|
+
async function runBeforeToolCall(event, ctx) {
|
|
169
|
+
return runModifyingHook("before_tool_call", event, ctx, (acc, next) => ({
|
|
170
|
+
params: next.params ?? acc?.params,
|
|
171
|
+
block: next.block ?? acc?.block,
|
|
172
|
+
blockReason: next.blockReason ?? acc?.blockReason
|
|
173
|
+
}));
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Run after_tool_call hook.
|
|
177
|
+
* Runs in parallel (fire-and-forget).
|
|
178
|
+
*/
|
|
179
|
+
async function runAfterToolCall(event, ctx) {
|
|
180
|
+
return runVoidHook("after_tool_call", event, ctx);
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Run tool_result_persist hook.
|
|
184
|
+
*
|
|
185
|
+
* This hook is intentionally synchronous: it runs in hot paths where session
|
|
186
|
+
* transcripts are appended synchronously.
|
|
187
|
+
*
|
|
188
|
+
* Handlers are executed sequentially in priority order (higher first). Each
|
|
189
|
+
* handler may return `{ message }` to replace the message passed to the next
|
|
190
|
+
* handler.
|
|
191
|
+
*/
|
|
192
|
+
function runToolResultPersist(event, ctx) {
|
|
193
|
+
const hooks = getHooksForName(registry, "tool_result_persist");
|
|
194
|
+
if (hooks.length === 0) return;
|
|
195
|
+
let current = event.message;
|
|
196
|
+
for (const hook of hooks) try {
|
|
197
|
+
const out = hook.handler({
|
|
198
|
+
...event,
|
|
199
|
+
message: current
|
|
200
|
+
}, ctx);
|
|
201
|
+
if (out && typeof out.then === "function") {
|
|
202
|
+
const msg = `[hooks] tool_result_persist handler from ${hook.pluginId} returned a Promise; this hook is synchronous and the result was ignored.`;
|
|
203
|
+
if (catchErrors) {
|
|
204
|
+
logger?.warn?.(msg);
|
|
205
|
+
continue;
|
|
206
|
+
}
|
|
207
|
+
throw new Error(msg);
|
|
208
|
+
}
|
|
209
|
+
const next = out?.message;
|
|
210
|
+
if (next) current = next;
|
|
211
|
+
} catch (err) {
|
|
212
|
+
const msg = `[hooks] tool_result_persist handler from ${hook.pluginId} failed: ${String(err)}`;
|
|
213
|
+
if (catchErrors) logger?.error(msg);
|
|
214
|
+
else throw new Error(msg, { cause: err });
|
|
215
|
+
}
|
|
216
|
+
return { message: current };
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Run session_start hook.
|
|
220
|
+
* Runs in parallel (fire-and-forget).
|
|
221
|
+
*/
|
|
222
|
+
async function runSessionStart(event, ctx) {
|
|
223
|
+
return runVoidHook("session_start", event, ctx);
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Run session_end hook.
|
|
227
|
+
* Runs in parallel (fire-and-forget).
|
|
228
|
+
*/
|
|
229
|
+
async function runSessionEnd(event, ctx) {
|
|
230
|
+
return runVoidHook("session_end", event, ctx);
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Run gateway_start hook.
|
|
234
|
+
* Runs in parallel (fire-and-forget).
|
|
235
|
+
*/
|
|
236
|
+
async function runGatewayStart(event, ctx) {
|
|
237
|
+
return runVoidHook("gateway_start", event, ctx);
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Run gateway_stop hook.
|
|
241
|
+
* Runs in parallel (fire-and-forget).
|
|
242
|
+
*/
|
|
243
|
+
async function runGatewayStop(event, ctx) {
|
|
244
|
+
return runVoidHook("gateway_stop", event, ctx);
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Check if any hooks are registered for a given hook name.
|
|
248
|
+
*/
|
|
249
|
+
function hasHooks(hookName) {
|
|
250
|
+
return registry.typedHooks.some((h) => h.hookName === hookName);
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Get count of registered hooks for a given hook name.
|
|
254
|
+
*/
|
|
255
|
+
function getHookCount(hookName) {
|
|
256
|
+
return registry.typedHooks.filter((h) => h.hookName === hookName).length;
|
|
257
|
+
}
|
|
258
|
+
return {
|
|
259
|
+
runBeforeAgentStart,
|
|
260
|
+
runAgentEnd,
|
|
261
|
+
runBeforeCompaction,
|
|
262
|
+
runAfterCompaction,
|
|
263
|
+
runBeforeReset,
|
|
264
|
+
runMessageReceived,
|
|
265
|
+
runMessageSending,
|
|
266
|
+
runMessageSent,
|
|
267
|
+
runBeforeToolCall,
|
|
268
|
+
runAfterToolCall,
|
|
269
|
+
runToolResultPersist,
|
|
270
|
+
runSessionStart,
|
|
271
|
+
runSessionEnd,
|
|
272
|
+
runGatewayStart,
|
|
273
|
+
runGatewayStop,
|
|
274
|
+
hasHooks,
|
|
275
|
+
getHookCount
|
|
276
|
+
};
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
//#endregion
|
|
280
|
+
//#region src/plugins/hook-runner-global.ts
|
|
281
|
+
const log = createSubsystemLogger("plugins");
|
|
282
|
+
let globalHookRunner = null;
|
|
283
|
+
let globalRegistry = null;
|
|
284
|
+
/**
|
|
285
|
+
* Initialize the global hook runner with a plugin registry.
|
|
286
|
+
* Called once when plugins are loaded during gateway startup.
|
|
287
|
+
*/
|
|
288
|
+
function initializeGlobalHookRunner(registry) {
|
|
289
|
+
globalRegistry = registry;
|
|
290
|
+
globalHookRunner = createHookRunner(registry, {
|
|
291
|
+
logger: {
|
|
292
|
+
debug: (msg) => log.debug(msg),
|
|
293
|
+
warn: (msg) => log.warn(msg),
|
|
294
|
+
error: (msg) => log.error(msg)
|
|
295
|
+
},
|
|
296
|
+
catchErrors: true
|
|
297
|
+
});
|
|
298
|
+
const hookCount = registry.hooks.length;
|
|
299
|
+
if (hookCount > 0) log.info(`hook runner initialized with ${hookCount} registered hooks`);
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* Get the global hook runner.
|
|
303
|
+
* Returns null if plugins haven't been loaded yet.
|
|
304
|
+
*/
|
|
305
|
+
function getGlobalHookRunner() {
|
|
306
|
+
return globalHookRunner;
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
//#endregion
|
|
310
|
+
//#region src/signal/format.ts
|
|
311
|
+
function markdownToSignalTextChunks(text, _limit, _opts) {
|
|
312
|
+
return [{
|
|
313
|
+
text,
|
|
314
|
+
styles: []
|
|
315
|
+
}];
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
//#endregion
|
|
319
|
+
//#region src/infra/outbound/abort.ts
|
|
320
|
+
/**
|
|
321
|
+
* Utility for checking AbortSignal state and throwing a standard AbortError.
|
|
322
|
+
*/
|
|
323
|
+
/**
|
|
324
|
+
* Throws an AbortError if the given signal has been aborted.
|
|
325
|
+
* Use at async checkpoints to support cancellation.
|
|
326
|
+
*/
|
|
327
|
+
function throwIfAborted(abortSignal) {
|
|
328
|
+
if (abortSignal?.aborted) {
|
|
329
|
+
const err = /* @__PURE__ */ new Error("Operation aborted");
|
|
330
|
+
err.name = "AbortError";
|
|
331
|
+
throw err;
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
//#endregion
|
|
336
|
+
//#region src/infra/outbound/delivery-queue.ts
|
|
337
|
+
const QUEUE_DIRNAME = "delivery-queue";
|
|
338
|
+
const FAILED_DIRNAME = "failed";
|
|
339
|
+
function resolveQueueDir(stateDir) {
|
|
340
|
+
const base = stateDir ?? resolveStateDir();
|
|
341
|
+
return path.join(base, QUEUE_DIRNAME);
|
|
342
|
+
}
|
|
343
|
+
function resolveFailedDir(stateDir) {
|
|
344
|
+
return path.join(resolveQueueDir(stateDir), FAILED_DIRNAME);
|
|
345
|
+
}
|
|
346
|
+
/** Ensure the queue directory (and failed/ subdirectory) exist. */
|
|
347
|
+
async function ensureQueueDir(stateDir) {
|
|
348
|
+
const queueDir = resolveQueueDir(stateDir);
|
|
349
|
+
await fsSync.promises.mkdir(queueDir, {
|
|
350
|
+
recursive: true,
|
|
351
|
+
mode: 448
|
|
352
|
+
});
|
|
353
|
+
await fsSync.promises.mkdir(resolveFailedDir(stateDir), {
|
|
354
|
+
recursive: true,
|
|
355
|
+
mode: 448
|
|
356
|
+
});
|
|
357
|
+
return queueDir;
|
|
358
|
+
}
|
|
359
|
+
/** Persist a delivery entry to disk before attempting send. Returns the entry ID. */
|
|
360
|
+
async function enqueueDelivery(params, stateDir) {
|
|
361
|
+
const queueDir = await ensureQueueDir(stateDir);
|
|
362
|
+
const id = crypto.randomUUID();
|
|
363
|
+
const entry = {
|
|
364
|
+
id,
|
|
365
|
+
enqueuedAt: Date.now(),
|
|
366
|
+
channel: params.channel,
|
|
367
|
+
to: params.to,
|
|
368
|
+
accountId: params.accountId,
|
|
369
|
+
payloads: params.payloads,
|
|
370
|
+
threadId: params.threadId,
|
|
371
|
+
replyToId: params.replyToId,
|
|
372
|
+
bestEffort: params.bestEffort,
|
|
373
|
+
gifPlayback: params.gifPlayback,
|
|
374
|
+
silent: params.silent,
|
|
375
|
+
mirror: params.mirror,
|
|
376
|
+
retryCount: 0
|
|
377
|
+
};
|
|
378
|
+
const filePath = path.join(queueDir, `${id}.json`);
|
|
379
|
+
const tmp = `${filePath}.${process.pid}.tmp`;
|
|
380
|
+
const json = JSON.stringify(entry, null, 2);
|
|
381
|
+
await fsSync.promises.writeFile(tmp, json, {
|
|
382
|
+
encoding: "utf-8",
|
|
383
|
+
mode: 384
|
|
384
|
+
});
|
|
385
|
+
await fsSync.promises.rename(tmp, filePath);
|
|
386
|
+
return id;
|
|
387
|
+
}
|
|
388
|
+
/** Remove a successfully delivered entry from the queue. */
|
|
389
|
+
async function ackDelivery(id, stateDir) {
|
|
390
|
+
const filePath = path.join(resolveQueueDir(stateDir), `${id}.json`);
|
|
391
|
+
try {
|
|
392
|
+
await fsSync.promises.unlink(filePath);
|
|
393
|
+
} catch (err) {
|
|
394
|
+
if ((err && typeof err === "object" && "code" in err ? String(err.code) : null) !== "ENOENT") throw err;
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
/** Update a queue entry after a failed delivery attempt. */
|
|
398
|
+
async function failDelivery(id, error, stateDir) {
|
|
399
|
+
const filePath = path.join(resolveQueueDir(stateDir), `${id}.json`);
|
|
400
|
+
const raw = await fsSync.promises.readFile(filePath, "utf-8");
|
|
401
|
+
const entry = JSON.parse(raw);
|
|
402
|
+
entry.retryCount += 1;
|
|
403
|
+
entry.lastError = error;
|
|
404
|
+
const tmp = `${filePath}.${process.pid}.tmp`;
|
|
405
|
+
await fsSync.promises.writeFile(tmp, JSON.stringify(entry, null, 2), {
|
|
406
|
+
encoding: "utf-8",
|
|
407
|
+
mode: 384
|
|
408
|
+
});
|
|
409
|
+
await fsSync.promises.rename(tmp, filePath);
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
//#endregion
|
|
413
|
+
//#region src/utils/directive-tags.ts
|
|
414
|
+
const AUDIO_TAG_RE = /\[\[\s*audio_as_voice\s*\]\]/gi;
|
|
415
|
+
const REPLY_TAG_RE = /\[\[\s*(?:reply_to_current|reply_to\s*:\s*([^\]\n]+))\s*\]\]/gi;
|
|
416
|
+
function normalizeDirectiveWhitespace(text) {
|
|
417
|
+
return text.replace(/[ \t]+/g, " ").replace(/[ \t]*\n[ \t]*/g, "\n").trim();
|
|
418
|
+
}
|
|
419
|
+
function parseInlineDirectives(text, options = {}) {
|
|
420
|
+
const { currentMessageId, stripAudioTag = true, stripReplyTags = true } = options;
|
|
421
|
+
if (!text) return {
|
|
422
|
+
text: "",
|
|
423
|
+
audioAsVoice: false,
|
|
424
|
+
replyToCurrent: false,
|
|
425
|
+
hasAudioTag: false,
|
|
426
|
+
hasReplyTag: false
|
|
427
|
+
};
|
|
428
|
+
let cleaned = text;
|
|
429
|
+
let audioAsVoice = false;
|
|
430
|
+
let hasAudioTag = false;
|
|
431
|
+
let hasReplyTag = false;
|
|
432
|
+
let sawCurrent = false;
|
|
433
|
+
let lastExplicitId;
|
|
434
|
+
cleaned = cleaned.replace(AUDIO_TAG_RE, (match) => {
|
|
435
|
+
audioAsVoice = true;
|
|
436
|
+
hasAudioTag = true;
|
|
437
|
+
return stripAudioTag ? " " : match;
|
|
438
|
+
});
|
|
439
|
+
cleaned = cleaned.replace(REPLY_TAG_RE, (match, idRaw) => {
|
|
440
|
+
hasReplyTag = true;
|
|
441
|
+
if (idRaw === void 0) sawCurrent = true;
|
|
442
|
+
else {
|
|
443
|
+
const id = idRaw.trim();
|
|
444
|
+
if (id) lastExplicitId = id;
|
|
445
|
+
}
|
|
446
|
+
return stripReplyTags ? " " : match;
|
|
447
|
+
});
|
|
448
|
+
cleaned = normalizeDirectiveWhitespace(cleaned);
|
|
449
|
+
const replyToId = lastExplicitId ?? (sawCurrent ? currentMessageId?.trim() || void 0 : void 0);
|
|
450
|
+
return {
|
|
451
|
+
text: cleaned,
|
|
452
|
+
audioAsVoice,
|
|
453
|
+
replyToId,
|
|
454
|
+
replyToExplicitId: lastExplicitId,
|
|
455
|
+
replyToCurrent: sawCurrent,
|
|
456
|
+
hasAudioTag,
|
|
457
|
+
hasReplyTag
|
|
458
|
+
};
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
//#endregion
|
|
462
|
+
//#region src/media/audio-tags.ts
|
|
463
|
+
/**
|
|
464
|
+
* Extract audio mode tag from text.
|
|
465
|
+
* Supports [[audio_as_voice]] to send audio as voice bubble instead of file.
|
|
466
|
+
* Default is file (preserves backward compatibility).
|
|
467
|
+
*/
|
|
468
|
+
function parseAudioTag(text) {
|
|
469
|
+
const result = parseInlineDirectives(text, { stripReplyTags: false });
|
|
470
|
+
return {
|
|
471
|
+
text: result.text,
|
|
472
|
+
audioAsVoice: result.audioAsVoice,
|
|
473
|
+
hadTag: result.hasAudioTag
|
|
474
|
+
};
|
|
475
|
+
}
|
|
476
|
+
|
|
477
|
+
//#endregion
|
|
478
|
+
//#region src/media/parse.ts
|
|
479
|
+
const MEDIA_TOKEN_RE = /\bMEDIA:\s*`?([^\n]+)`?/gi;
|
|
480
|
+
function normalizeMediaSource(src) {
|
|
481
|
+
return src.startsWith("file://") ? src.replace("file://", "") : src;
|
|
482
|
+
}
|
|
483
|
+
function cleanCandidate(raw) {
|
|
484
|
+
return raw.replace(/^[`"'[{(]+/, "").replace(/[`"'\\})\],]+$/, "");
|
|
485
|
+
}
|
|
486
|
+
const WINDOWS_DRIVE_RE = /^[a-zA-Z]:[\\/]/;
|
|
487
|
+
const SCHEME_RE = /^[a-zA-Z][a-zA-Z0-9+.-]*:/;
|
|
488
|
+
const HAS_FILE_EXT = /\.\w{1,10}$/;
|
|
489
|
+
function isLikelyLocalPath(candidate) {
|
|
490
|
+
return candidate.startsWith("/") || candidate.startsWith("./") || candidate.startsWith("../") || candidate.startsWith("~") || WINDOWS_DRIVE_RE.test(candidate) || candidate.startsWith("\\\\") || !SCHEME_RE.test(candidate) && (candidate.includes("/") || candidate.includes("\\"));
|
|
491
|
+
}
|
|
492
|
+
function isValidMedia(candidate, opts) {
|
|
493
|
+
if (!candidate) return false;
|
|
494
|
+
if (candidate.length > 4096) return false;
|
|
495
|
+
if (!opts?.allowSpaces && /\s/.test(candidate)) return false;
|
|
496
|
+
if (/^https?:\/\//i.test(candidate)) return true;
|
|
497
|
+
if (isLikelyLocalPath(candidate)) return true;
|
|
498
|
+
if (opts?.allowBareFilename && !SCHEME_RE.test(candidate) && HAS_FILE_EXT.test(candidate)) return true;
|
|
499
|
+
return false;
|
|
500
|
+
}
|
|
501
|
+
function unwrapQuoted(value) {
|
|
502
|
+
const trimmed = value.trim();
|
|
503
|
+
if (trimmed.length < 2) return;
|
|
504
|
+
const first = trimmed[0];
|
|
505
|
+
if (first !== trimmed[trimmed.length - 1]) return;
|
|
506
|
+
if (first !== `"` && first !== "'" && first !== "`") return;
|
|
507
|
+
return trimmed.slice(1, -1).trim();
|
|
508
|
+
}
|
|
509
|
+
function isInsideFence(fenceSpans, offset) {
|
|
510
|
+
return fenceSpans.some((span) => offset >= span.start && offset < span.end);
|
|
511
|
+
}
|
|
512
|
+
function splitMediaFromOutput(raw) {
|
|
513
|
+
const trimmedRaw = raw.trimEnd();
|
|
514
|
+
if (!trimmedRaw.trim()) return { text: "" };
|
|
515
|
+
const media = [];
|
|
516
|
+
let foundMediaToken = false;
|
|
517
|
+
const fenceSpans = parseFenceSpans(trimmedRaw);
|
|
518
|
+
const lines = trimmedRaw.split("\n");
|
|
519
|
+
const keptLines = [];
|
|
520
|
+
let lineOffset = 0;
|
|
521
|
+
for (const line of lines) {
|
|
522
|
+
if (isInsideFence(fenceSpans, lineOffset)) {
|
|
523
|
+
keptLines.push(line);
|
|
524
|
+
lineOffset += line.length + 1;
|
|
525
|
+
continue;
|
|
526
|
+
}
|
|
527
|
+
if (!line.trimStart().startsWith("MEDIA:")) {
|
|
528
|
+
keptLines.push(line);
|
|
529
|
+
lineOffset += line.length + 1;
|
|
530
|
+
continue;
|
|
531
|
+
}
|
|
532
|
+
const matches = Array.from(line.matchAll(MEDIA_TOKEN_RE));
|
|
533
|
+
if (matches.length === 0) {
|
|
534
|
+
keptLines.push(line);
|
|
535
|
+
lineOffset += line.length + 1;
|
|
536
|
+
continue;
|
|
537
|
+
}
|
|
538
|
+
const pieces = [];
|
|
539
|
+
let cursor = 0;
|
|
540
|
+
for (const match of matches) {
|
|
541
|
+
const start = match.index ?? 0;
|
|
542
|
+
pieces.push(line.slice(cursor, start));
|
|
543
|
+
const payload = match[1];
|
|
544
|
+
const unwrapped = unwrapQuoted(payload);
|
|
545
|
+
const payloadValue = unwrapped ?? payload;
|
|
546
|
+
const parts = unwrapped ? [unwrapped] : payload.split(/\s+/).filter(Boolean);
|
|
547
|
+
const mediaStartIndex = media.length;
|
|
548
|
+
let validCount = 0;
|
|
549
|
+
const invalidParts = [];
|
|
550
|
+
let hasValidMedia = false;
|
|
551
|
+
for (const part of parts) {
|
|
552
|
+
const candidate = normalizeMediaSource(cleanCandidate(part));
|
|
553
|
+
if (isValidMedia(candidate, unwrapped ? { allowSpaces: true } : void 0)) {
|
|
554
|
+
media.push(candidate);
|
|
555
|
+
hasValidMedia = true;
|
|
556
|
+
foundMediaToken = true;
|
|
557
|
+
validCount += 1;
|
|
558
|
+
} else invalidParts.push(part);
|
|
559
|
+
}
|
|
560
|
+
const trimmedPayload = payloadValue.trim();
|
|
561
|
+
const looksLikeLocalPath = isLikelyLocalPath(trimmedPayload) || trimmedPayload.startsWith("file://");
|
|
562
|
+
if (!unwrapped && validCount === 1 && invalidParts.length > 0 && /\s/.test(payloadValue) && looksLikeLocalPath) {
|
|
563
|
+
const fallback = normalizeMediaSource(cleanCandidate(payloadValue));
|
|
564
|
+
if (isValidMedia(fallback, { allowSpaces: true })) {
|
|
565
|
+
media.splice(mediaStartIndex, media.length - mediaStartIndex, fallback);
|
|
566
|
+
hasValidMedia = true;
|
|
567
|
+
foundMediaToken = true;
|
|
568
|
+
validCount = 1;
|
|
569
|
+
invalidParts.length = 0;
|
|
570
|
+
}
|
|
571
|
+
}
|
|
572
|
+
if (!hasValidMedia) {
|
|
573
|
+
const fallback = normalizeMediaSource(cleanCandidate(payloadValue));
|
|
574
|
+
if (isValidMedia(fallback, {
|
|
575
|
+
allowSpaces: true,
|
|
576
|
+
allowBareFilename: true
|
|
577
|
+
})) {
|
|
578
|
+
media.push(fallback);
|
|
579
|
+
hasValidMedia = true;
|
|
580
|
+
foundMediaToken = true;
|
|
581
|
+
invalidParts.length = 0;
|
|
582
|
+
}
|
|
583
|
+
}
|
|
584
|
+
if (hasValidMedia) {
|
|
585
|
+
if (invalidParts.length > 0) pieces.push(invalidParts.join(" "));
|
|
586
|
+
} else if (looksLikeLocalPath) foundMediaToken = true;
|
|
587
|
+
else pieces.push(match[0]);
|
|
588
|
+
cursor = start + match[0].length;
|
|
589
|
+
}
|
|
590
|
+
pieces.push(line.slice(cursor));
|
|
591
|
+
const cleanedLine = pieces.join("").replace(/[ \t]{2,}/g, " ").trim();
|
|
592
|
+
if (cleanedLine) keptLines.push(cleanedLine);
|
|
593
|
+
lineOffset += line.length + 1;
|
|
594
|
+
}
|
|
595
|
+
let cleanedText = keptLines.join("\n").replace(/[ \t]+\n/g, "\n").replace(/[ \t]{2,}/g, " ").replace(/\n{2,}/g, "\n").trim();
|
|
596
|
+
const audioTagResult = parseAudioTag(cleanedText);
|
|
597
|
+
const hasAudioAsVoice = audioTagResult.audioAsVoice;
|
|
598
|
+
if (audioTagResult.hadTag) cleanedText = audioTagResult.text.replace(/\n{2,}/g, "\n").trim();
|
|
599
|
+
if (media.length === 0) {
|
|
600
|
+
const result = { text: foundMediaToken || hasAudioAsVoice ? cleanedText : trimmedRaw };
|
|
601
|
+
if (hasAudioAsVoice) result.audioAsVoice = true;
|
|
602
|
+
return result;
|
|
603
|
+
}
|
|
604
|
+
return {
|
|
605
|
+
text: cleanedText,
|
|
606
|
+
mediaUrls: media,
|
|
607
|
+
mediaUrl: media[0],
|
|
608
|
+
...hasAudioAsVoice ? { audioAsVoice: true } : {}
|
|
609
|
+
};
|
|
610
|
+
}
|
|
611
|
+
|
|
612
|
+
//#endregion
|
|
613
|
+
//#region src/auto-reply/reply/reply-directives.ts
|
|
614
|
+
function parseReplyDirectives(raw, options = {}) {
|
|
615
|
+
const split = splitMediaFromOutput(raw);
|
|
616
|
+
let text = split.text ?? "";
|
|
617
|
+
const replyParsed = parseInlineDirectives(text, {
|
|
618
|
+
currentMessageId: options.currentMessageId,
|
|
619
|
+
stripAudioTag: false,
|
|
620
|
+
stripReplyTags: true
|
|
621
|
+
});
|
|
622
|
+
if (replyParsed.hasReplyTag) text = replyParsed.text;
|
|
623
|
+
const silentToken = options.silentToken ?? SILENT_REPLY_TOKEN;
|
|
624
|
+
const isSilent = isSilentReplyText(text, silentToken);
|
|
625
|
+
if (isSilent) text = "";
|
|
626
|
+
return {
|
|
627
|
+
text,
|
|
628
|
+
mediaUrls: split.mediaUrls,
|
|
629
|
+
mediaUrl: split.mediaUrl,
|
|
630
|
+
replyToId: replyParsed.replyToId,
|
|
631
|
+
replyToCurrent: replyParsed.replyToCurrent,
|
|
632
|
+
replyToTag: replyParsed.hasReplyTag,
|
|
633
|
+
audioAsVoice: split.audioAsVoice,
|
|
634
|
+
isSilent
|
|
635
|
+
};
|
|
636
|
+
}
|
|
637
|
+
|
|
638
|
+
//#endregion
|
|
639
|
+
//#region src/infra/outbound/target-normalization.ts
|
|
640
|
+
function normalizeChannelTargetInput(raw) {
|
|
641
|
+
return raw.trim();
|
|
642
|
+
}
|
|
643
|
+
function normalizeTargetForProvider(provider, raw) {
|
|
644
|
+
if (!raw) return;
|
|
645
|
+
const providerId = normalizeChannelId(provider);
|
|
646
|
+
return ((providerId ? getChannelPlugin(providerId) : void 0)?.messaging?.normalizeTarget?.(raw) ?? (raw.trim() || void 0)) || void 0;
|
|
647
|
+
}
|
|
648
|
+
function buildTargetResolverSignature(channel) {
|
|
649
|
+
const resolver = getChannelPlugin(channel)?.messaging?.targetResolver;
|
|
650
|
+
const hint = resolver?.hint ?? "";
|
|
651
|
+
const looksLike = resolver?.looksLikeId;
|
|
652
|
+
return hashSignature(`${hint}|${looksLike ? looksLike.toString() : ""}`);
|
|
653
|
+
}
|
|
654
|
+
function hashSignature(value) {
|
|
655
|
+
let hash = 5381;
|
|
656
|
+
for (let i = 0; i < value.length; i += 1) hash = (hash << 5) + hash ^ value.charCodeAt(i);
|
|
657
|
+
return (hash >>> 0).toString(36);
|
|
658
|
+
}
|
|
659
|
+
|
|
660
|
+
//#endregion
|
|
661
|
+
//#region src/auto-reply/reply/reply-tags.ts
|
|
662
|
+
function extractReplyToTag(text, currentMessageId) {
|
|
663
|
+
const result = parseInlineDirectives(text, {
|
|
664
|
+
currentMessageId,
|
|
665
|
+
stripAudioTag: false
|
|
666
|
+
});
|
|
667
|
+
return {
|
|
668
|
+
cleaned: result.text,
|
|
669
|
+
replyToId: result.replyToId,
|
|
670
|
+
replyToCurrent: result.replyToCurrent,
|
|
671
|
+
hasTag: result.hasReplyTag
|
|
672
|
+
};
|
|
673
|
+
}
|
|
674
|
+
|
|
675
|
+
//#endregion
|
|
676
|
+
//#region src/auto-reply/reply/reply-threading.ts
|
|
677
|
+
function resolveReplyToMode(cfg, channel, accountId, chatType) {
|
|
678
|
+
const provider = normalizeChannelId(channel);
|
|
679
|
+
if (!provider) return "all";
|
|
680
|
+
return getChannelDock(provider)?.threading?.resolveReplyToMode?.({
|
|
681
|
+
cfg,
|
|
682
|
+
accountId,
|
|
683
|
+
chatType
|
|
684
|
+
}) ?? "all";
|
|
685
|
+
}
|
|
686
|
+
function createReplyToModeFilter(mode, opts = {}) {
|
|
687
|
+
let hasThreaded = false;
|
|
688
|
+
return (payload) => {
|
|
689
|
+
if (!payload.replyToId) return payload;
|
|
690
|
+
if (mode === "off") {
|
|
691
|
+
const isExplicit = Boolean(payload.replyToTag) || Boolean(payload.replyToCurrent);
|
|
692
|
+
if (opts.allowExplicitReplyTagsWhenOff && isExplicit) return payload;
|
|
693
|
+
return {
|
|
694
|
+
...payload,
|
|
695
|
+
replyToId: void 0
|
|
696
|
+
};
|
|
697
|
+
}
|
|
698
|
+
if (mode === "all") return payload;
|
|
699
|
+
if (hasThreaded) return {
|
|
700
|
+
...payload,
|
|
701
|
+
replyToId: void 0
|
|
702
|
+
};
|
|
703
|
+
hasThreaded = true;
|
|
704
|
+
return payload;
|
|
705
|
+
};
|
|
706
|
+
}
|
|
707
|
+
function createReplyToModeFilterForChannel(mode, channel) {
|
|
708
|
+
const provider = normalizeChannelId(channel);
|
|
709
|
+
const isWebchat = (typeof channel === "string" ? channel.trim().toLowerCase() : void 0) === "webchat";
|
|
710
|
+
const dock = provider ? getChannelDock(provider) : void 0;
|
|
711
|
+
return createReplyToModeFilter(mode, { allowExplicitReplyTagsWhenOff: provider ? dock?.threading?.allowExplicitReplyTagsWhenOff ?? dock?.threading?.allowTagsWhenOff ?? true : isWebchat });
|
|
712
|
+
}
|
|
713
|
+
|
|
714
|
+
//#endregion
|
|
715
|
+
//#region src/auto-reply/reply/reply-payloads.ts
|
|
716
|
+
function resolveReplyThreadingForPayload(params) {
|
|
717
|
+
const implicitReplyToId = params.implicitReplyToId?.trim() || void 0;
|
|
718
|
+
const currentMessageId = params.currentMessageId?.trim() || void 0;
|
|
719
|
+
let resolved = params.payload.replyToId || params.payload.replyToCurrent === false || !implicitReplyToId ? params.payload : {
|
|
720
|
+
...params.payload,
|
|
721
|
+
replyToId: implicitReplyToId
|
|
722
|
+
};
|
|
723
|
+
if (typeof resolved.text === "string" && resolved.text.includes("[[")) {
|
|
724
|
+
const { cleaned, replyToId, replyToCurrent, hasTag } = extractReplyToTag(resolved.text, currentMessageId);
|
|
725
|
+
resolved = {
|
|
726
|
+
...resolved,
|
|
727
|
+
text: cleaned ? cleaned : void 0,
|
|
728
|
+
replyToId: replyToId ?? resolved.replyToId,
|
|
729
|
+
replyToTag: hasTag || resolved.replyToTag,
|
|
730
|
+
replyToCurrent: replyToCurrent || resolved.replyToCurrent
|
|
731
|
+
};
|
|
732
|
+
}
|
|
733
|
+
if (resolved.replyToCurrent && !resolved.replyToId && currentMessageId) resolved = {
|
|
734
|
+
...resolved,
|
|
735
|
+
replyToId: currentMessageId
|
|
736
|
+
};
|
|
737
|
+
return resolved;
|
|
738
|
+
}
|
|
739
|
+
function applyReplyTagsToPayload(payload, currentMessageId) {
|
|
740
|
+
return resolveReplyThreadingForPayload({
|
|
741
|
+
payload,
|
|
742
|
+
currentMessageId
|
|
743
|
+
});
|
|
744
|
+
}
|
|
745
|
+
function isRenderablePayload(payload) {
|
|
746
|
+
return Boolean(payload.text || payload.mediaUrl || payload.mediaUrls && payload.mediaUrls.length > 0 || payload.audioAsVoice || payload.channelData);
|
|
747
|
+
}
|
|
748
|
+
function applyReplyThreading(params) {
|
|
749
|
+
const { payloads, replyToMode, replyToChannel, currentMessageId } = params;
|
|
750
|
+
const applyReplyToMode = createReplyToModeFilterForChannel(replyToMode, replyToChannel);
|
|
751
|
+
const implicitReplyToId = currentMessageId?.trim() || void 0;
|
|
752
|
+
return payloads.map((payload) => resolveReplyThreadingForPayload({
|
|
753
|
+
payload,
|
|
754
|
+
implicitReplyToId,
|
|
755
|
+
currentMessageId
|
|
756
|
+
})).filter(isRenderablePayload).map(applyReplyToMode);
|
|
757
|
+
}
|
|
758
|
+
function filterMessagingToolDuplicates(params) {
|
|
759
|
+
const { payloads, sentTexts } = params;
|
|
760
|
+
if (sentTexts.length === 0) return payloads;
|
|
761
|
+
return payloads.filter((payload) => !isMessagingToolDuplicate(payload.text ?? "", sentTexts));
|
|
762
|
+
}
|
|
763
|
+
function normalizeAccountId(value) {
|
|
764
|
+
const trimmed = value?.trim();
|
|
765
|
+
return trimmed ? trimmed.toLowerCase() : void 0;
|
|
766
|
+
}
|
|
767
|
+
function shouldSuppressMessagingToolReplies(params) {
|
|
768
|
+
const provider = params.messageProvider?.trim().toLowerCase();
|
|
769
|
+
if (!provider) return false;
|
|
770
|
+
const originTarget = normalizeTargetForProvider(provider, params.originatingTo);
|
|
771
|
+
if (!originTarget) return false;
|
|
772
|
+
const originAccount = normalizeAccountId(params.accountId);
|
|
773
|
+
const sentTargets = params.messagingToolSentTargets ?? [];
|
|
774
|
+
if (sentTargets.length === 0) return false;
|
|
775
|
+
return sentTargets.some((target) => {
|
|
776
|
+
if (!target?.provider) return false;
|
|
777
|
+
if (target.provider.trim().toLowerCase() !== provider) return false;
|
|
778
|
+
const targetKey = normalizeTargetForProvider(provider, target.to);
|
|
779
|
+
if (!targetKey) return false;
|
|
780
|
+
const targetAccount = normalizeAccountId(target.accountId);
|
|
781
|
+
if (originAccount && targetAccount && originAccount !== targetAccount) return false;
|
|
782
|
+
return targetKey === originTarget;
|
|
783
|
+
});
|
|
784
|
+
}
|
|
785
|
+
|
|
786
|
+
//#endregion
|
|
787
|
+
//#region src/infra/outbound/payloads.ts
|
|
788
|
+
function mergeMediaUrls(...lists) {
|
|
789
|
+
const seen = /* @__PURE__ */ new Set();
|
|
790
|
+
const merged = [];
|
|
791
|
+
for (const list of lists) {
|
|
792
|
+
if (!list) continue;
|
|
793
|
+
for (const entry of list) {
|
|
794
|
+
const trimmed = entry?.trim();
|
|
795
|
+
if (!trimmed) continue;
|
|
796
|
+
if (seen.has(trimmed)) continue;
|
|
797
|
+
seen.add(trimmed);
|
|
798
|
+
merged.push(trimmed);
|
|
799
|
+
}
|
|
800
|
+
}
|
|
801
|
+
return merged;
|
|
802
|
+
}
|
|
803
|
+
function normalizeReplyPayloadsForDelivery(payloads) {
|
|
804
|
+
return payloads.flatMap((payload) => {
|
|
805
|
+
const parsed = parseReplyDirectives(payload.text ?? "");
|
|
806
|
+
const explicitMediaUrls = payload.mediaUrls ?? parsed.mediaUrls;
|
|
807
|
+
const explicitMediaUrl = payload.mediaUrl ?? parsed.mediaUrl;
|
|
808
|
+
const mergedMedia = mergeMediaUrls(explicitMediaUrls, explicitMediaUrl ? [explicitMediaUrl] : void 0);
|
|
809
|
+
const resolvedMediaUrl = (explicitMediaUrls?.length ?? 0) > 1 ? void 0 : explicitMediaUrl;
|
|
810
|
+
const next = {
|
|
811
|
+
...payload,
|
|
812
|
+
text: parsed.text ?? "",
|
|
813
|
+
mediaUrls: mergedMedia.length ? mergedMedia : void 0,
|
|
814
|
+
mediaUrl: resolvedMediaUrl,
|
|
815
|
+
replyToId: payload.replyToId ?? parsed.replyToId,
|
|
816
|
+
replyToTag: payload.replyToTag || parsed.replyToTag,
|
|
817
|
+
replyToCurrent: payload.replyToCurrent || parsed.replyToCurrent,
|
|
818
|
+
audioAsVoice: Boolean(payload.audioAsVoice || parsed.audioAsVoice)
|
|
819
|
+
};
|
|
820
|
+
if (parsed.isSilent && mergedMedia.length === 0) return [];
|
|
821
|
+
if (!isRenderablePayload(next)) return [];
|
|
822
|
+
return [next];
|
|
823
|
+
});
|
|
824
|
+
}
|
|
825
|
+
function normalizeOutboundPayloads(payloads) {
|
|
826
|
+
return normalizeReplyPayloadsForDelivery(payloads).map((payload) => {
|
|
827
|
+
const channelData = payload.channelData;
|
|
828
|
+
const normalized = {
|
|
829
|
+
text: payload.text ?? "",
|
|
830
|
+
mediaUrls: payload.mediaUrls ?? (payload.mediaUrl ? [payload.mediaUrl] : [])
|
|
831
|
+
};
|
|
832
|
+
if (channelData && Object.keys(channelData).length > 0) normalized.channelData = channelData;
|
|
833
|
+
return normalized;
|
|
834
|
+
}).filter((payload) => payload.text || payload.mediaUrls.length > 0 || Boolean(payload.channelData && Object.keys(payload.channelData).length > 0));
|
|
835
|
+
}
|
|
836
|
+
function normalizeOutboundPayloadsForJson(payloads) {
|
|
837
|
+
return normalizeReplyPayloadsForDelivery(payloads).map((payload) => ({
|
|
838
|
+
text: payload.text ?? "",
|
|
839
|
+
mediaUrl: payload.mediaUrl ?? null,
|
|
840
|
+
mediaUrls: payload.mediaUrls ?? (payload.mediaUrl ? [payload.mediaUrl] : void 0),
|
|
841
|
+
channelData: payload.channelData
|
|
842
|
+
}));
|
|
843
|
+
}
|
|
844
|
+
function formatOutboundPayloadLog(payload) {
|
|
845
|
+
const lines = [];
|
|
846
|
+
if (payload.text) lines.push(payload.text.trimEnd());
|
|
847
|
+
for (const url of payload.mediaUrls) lines.push(`MEDIA:${url}`);
|
|
848
|
+
return lines.join("\n");
|
|
849
|
+
}
|
|
850
|
+
|
|
851
|
+
//#endregion
|
|
852
|
+
//#region src/infra/outbound/deliver.ts
|
|
853
|
+
var deliver_exports = /* @__PURE__ */ __exportAll({ deliverOutboundPayloads: () => deliverOutboundPayloads });
|
|
854
|
+
async function createChannelHandler(params) {
|
|
855
|
+
const outbound = await loadChannelOutboundAdapter(params.channel);
|
|
856
|
+
if (!outbound?.sendText || !outbound?.sendMedia) throw new Error(`Outbound not configured for channel: ${params.channel}`);
|
|
857
|
+
const handler = createPluginHandler({
|
|
858
|
+
outbound,
|
|
859
|
+
cfg: params.cfg,
|
|
860
|
+
channel: params.channel,
|
|
861
|
+
to: params.to,
|
|
862
|
+
accountId: params.accountId,
|
|
863
|
+
replyToId: params.replyToId,
|
|
864
|
+
threadId: params.threadId,
|
|
865
|
+
identity: params.identity,
|
|
866
|
+
deps: params.deps,
|
|
867
|
+
gifPlayback: params.gifPlayback,
|
|
868
|
+
silent: params.silent
|
|
869
|
+
});
|
|
870
|
+
if (!handler) throw new Error(`Outbound not configured for channel: ${params.channel}`);
|
|
871
|
+
return handler;
|
|
872
|
+
}
|
|
873
|
+
function createPluginHandler(params) {
|
|
874
|
+
const outbound = params.outbound;
|
|
875
|
+
if (!outbound?.sendText || !outbound?.sendMedia) return null;
|
|
876
|
+
const sendText = outbound.sendText;
|
|
877
|
+
const sendMedia = outbound.sendMedia;
|
|
878
|
+
return {
|
|
879
|
+
chunker: outbound.chunker ?? null,
|
|
880
|
+
chunkerMode: outbound.chunkerMode,
|
|
881
|
+
textChunkLimit: outbound.textChunkLimit,
|
|
882
|
+
sendPayload: outbound.sendPayload ? async (payload) => outbound.sendPayload({
|
|
883
|
+
cfg: params.cfg,
|
|
884
|
+
to: params.to,
|
|
885
|
+
text: payload.text ?? "",
|
|
886
|
+
mediaUrl: payload.mediaUrl,
|
|
887
|
+
accountId: params.accountId,
|
|
888
|
+
replyToId: params.replyToId,
|
|
889
|
+
threadId: params.threadId,
|
|
890
|
+
identity: params.identity,
|
|
891
|
+
gifPlayback: params.gifPlayback,
|
|
892
|
+
deps: params.deps,
|
|
893
|
+
silent: params.silent,
|
|
894
|
+
payload
|
|
895
|
+
}) : void 0,
|
|
896
|
+
sendText: async (text) => sendText({
|
|
897
|
+
cfg: params.cfg,
|
|
898
|
+
to: params.to,
|
|
899
|
+
text,
|
|
900
|
+
accountId: params.accountId,
|
|
901
|
+
replyToId: params.replyToId,
|
|
902
|
+
threadId: params.threadId,
|
|
903
|
+
identity: params.identity,
|
|
904
|
+
gifPlayback: params.gifPlayback,
|
|
905
|
+
deps: params.deps,
|
|
906
|
+
silent: params.silent
|
|
907
|
+
}),
|
|
908
|
+
sendMedia: async (caption, mediaUrl) => sendMedia({
|
|
909
|
+
cfg: params.cfg,
|
|
910
|
+
to: params.to,
|
|
911
|
+
text: caption,
|
|
912
|
+
mediaUrl,
|
|
913
|
+
accountId: params.accountId,
|
|
914
|
+
replyToId: params.replyToId,
|
|
915
|
+
threadId: params.threadId,
|
|
916
|
+
identity: params.identity,
|
|
917
|
+
gifPlayback: params.gifPlayback,
|
|
918
|
+
deps: params.deps,
|
|
919
|
+
silent: params.silent
|
|
920
|
+
})
|
|
921
|
+
};
|
|
922
|
+
}
|
|
923
|
+
const isAbortError = (err) => err instanceof Error && err.name === "AbortError";
|
|
924
|
+
async function deliverOutboundPayloads(params) {
|
|
925
|
+
const { channel, to, payloads } = params;
|
|
926
|
+
const queueId = params.skipQueue ? null : await enqueueDelivery({
|
|
927
|
+
channel,
|
|
928
|
+
to,
|
|
929
|
+
accountId: params.accountId,
|
|
930
|
+
payloads,
|
|
931
|
+
threadId: params.threadId,
|
|
932
|
+
replyToId: params.replyToId,
|
|
933
|
+
bestEffort: params.bestEffort,
|
|
934
|
+
gifPlayback: params.gifPlayback,
|
|
935
|
+
silent: params.silent,
|
|
936
|
+
mirror: params.mirror
|
|
937
|
+
}).catch(() => null);
|
|
938
|
+
let hadPartialFailure = false;
|
|
939
|
+
const wrappedParams = params.onError ? {
|
|
940
|
+
...params,
|
|
941
|
+
onError: (err, payload) => {
|
|
942
|
+
hadPartialFailure = true;
|
|
943
|
+
params.onError(err, payload);
|
|
944
|
+
}
|
|
945
|
+
} : params;
|
|
946
|
+
try {
|
|
947
|
+
const results = await deliverOutboundPayloadsCore(wrappedParams);
|
|
948
|
+
if (queueId) if (hadPartialFailure) await failDelivery(queueId, "partial delivery failure (bestEffort)").catch(() => {});
|
|
949
|
+
else await ackDelivery(queueId).catch(() => {});
|
|
950
|
+
return results;
|
|
951
|
+
} catch (err) {
|
|
952
|
+
if (queueId) if (isAbortError(err)) await ackDelivery(queueId).catch(() => {});
|
|
953
|
+
else await failDelivery(queueId, err instanceof Error ? err.message : String(err)).catch(() => {});
|
|
954
|
+
throw err;
|
|
955
|
+
}
|
|
956
|
+
}
|
|
957
|
+
/** Core delivery logic (extracted for queue wrapper). */
|
|
958
|
+
async function deliverOutboundPayloadsCore(params) {
|
|
959
|
+
const { cfg, channel, to, payloads } = params;
|
|
960
|
+
const accountId = params.accountId;
|
|
961
|
+
const deps = params.deps;
|
|
962
|
+
const abortSignal = params.abortSignal;
|
|
963
|
+
const sendSignal = params.deps?.sendSignal ?? sendMessageSignal;
|
|
964
|
+
const results = [];
|
|
965
|
+
const handler = await createChannelHandler({
|
|
966
|
+
cfg,
|
|
967
|
+
channel,
|
|
968
|
+
to,
|
|
969
|
+
deps,
|
|
970
|
+
accountId,
|
|
971
|
+
replyToId: params.replyToId,
|
|
972
|
+
threadId: params.threadId,
|
|
973
|
+
identity: params.identity,
|
|
974
|
+
gifPlayback: params.gifPlayback,
|
|
975
|
+
silent: params.silent
|
|
976
|
+
});
|
|
977
|
+
const textLimit = handler.chunker ? resolveTextChunkLimit(cfg, channel, accountId, { fallbackLimit: handler.textChunkLimit }) : void 0;
|
|
978
|
+
const chunkMode = handler.chunker ? resolveChunkMode(cfg, channel, accountId) : "length";
|
|
979
|
+
const isSignalChannel = channel === "signal";
|
|
980
|
+
const signalTableMode = isSignalChannel ? resolveMarkdownTableMode({
|
|
981
|
+
cfg,
|
|
982
|
+
channel: "signal",
|
|
983
|
+
accountId
|
|
984
|
+
}) : "code";
|
|
985
|
+
const signalMaxBytes = isSignalChannel ? resolveChannelMediaMaxBytes({
|
|
986
|
+
cfg,
|
|
987
|
+
resolveChannelLimitMb: ({ cfg, accountId }) => cfg.channels?.signal?.accounts?.[accountId]?.mediaMaxMb ?? cfg.channels?.signal?.mediaMaxMb,
|
|
988
|
+
accountId
|
|
989
|
+
}) : void 0;
|
|
990
|
+
const sendTextChunks = async (text) => {
|
|
991
|
+
throwIfAborted(abortSignal);
|
|
992
|
+
if (!handler.chunker || textLimit === void 0) {
|
|
993
|
+
results.push(await handler.sendText(text));
|
|
994
|
+
return;
|
|
995
|
+
}
|
|
996
|
+
if (chunkMode === "newline") {
|
|
997
|
+
const blockChunks = (handler.chunkerMode ?? "text") === "markdown" ? chunkMarkdownTextWithMode(text, textLimit, "newline") : chunkByParagraph(text, textLimit);
|
|
998
|
+
if (!blockChunks.length && text) blockChunks.push(text);
|
|
999
|
+
for (const blockChunk of blockChunks) {
|
|
1000
|
+
const chunks = handler.chunker(blockChunk, textLimit);
|
|
1001
|
+
if (!chunks.length && blockChunk) chunks.push(blockChunk);
|
|
1002
|
+
for (const chunk of chunks) {
|
|
1003
|
+
throwIfAborted(abortSignal);
|
|
1004
|
+
results.push(await handler.sendText(chunk));
|
|
1005
|
+
}
|
|
1006
|
+
}
|
|
1007
|
+
return;
|
|
1008
|
+
}
|
|
1009
|
+
const chunks = handler.chunker(text, textLimit);
|
|
1010
|
+
for (const chunk of chunks) {
|
|
1011
|
+
throwIfAborted(abortSignal);
|
|
1012
|
+
results.push(await handler.sendText(chunk));
|
|
1013
|
+
}
|
|
1014
|
+
};
|
|
1015
|
+
const sendSignalText = async (text, styles) => {
|
|
1016
|
+
throwIfAborted(abortSignal);
|
|
1017
|
+
return {
|
|
1018
|
+
channel: "signal",
|
|
1019
|
+
...await sendSignal(to, text, {
|
|
1020
|
+
maxBytes: signalMaxBytes,
|
|
1021
|
+
accountId: accountId ?? void 0,
|
|
1022
|
+
textMode: "plain",
|
|
1023
|
+
textStyles: styles
|
|
1024
|
+
})
|
|
1025
|
+
};
|
|
1026
|
+
};
|
|
1027
|
+
const sendSignalTextChunks = async (text) => {
|
|
1028
|
+
throwIfAborted(abortSignal);
|
|
1029
|
+
let signalChunks = textLimit === void 0 ? markdownToSignalTextChunks(text, Number.POSITIVE_INFINITY, { tableMode: signalTableMode }) : markdownToSignalTextChunks(text, textLimit, { tableMode: signalTableMode });
|
|
1030
|
+
if (signalChunks.length === 0 && text) signalChunks = [{
|
|
1031
|
+
text,
|
|
1032
|
+
styles: []
|
|
1033
|
+
}];
|
|
1034
|
+
for (const chunk of signalChunks) {
|
|
1035
|
+
throwIfAborted(abortSignal);
|
|
1036
|
+
results.push(await sendSignalText(chunk.text, chunk.styles));
|
|
1037
|
+
}
|
|
1038
|
+
};
|
|
1039
|
+
const sendSignalMedia = async (caption, mediaUrl) => {
|
|
1040
|
+
throwIfAborted(abortSignal);
|
|
1041
|
+
const formatted = markdownToSignalTextChunks(caption, Number.POSITIVE_INFINITY, { tableMode: signalTableMode })[0] ?? {
|
|
1042
|
+
text: caption,
|
|
1043
|
+
styles: []
|
|
1044
|
+
};
|
|
1045
|
+
return {
|
|
1046
|
+
channel: "signal",
|
|
1047
|
+
...await sendSignal(to, formatted.text, {
|
|
1048
|
+
mediaUrl,
|
|
1049
|
+
maxBytes: signalMaxBytes,
|
|
1050
|
+
accountId: accountId ?? void 0,
|
|
1051
|
+
textMode: "plain",
|
|
1052
|
+
textStyles: formatted.styles
|
|
1053
|
+
})
|
|
1054
|
+
};
|
|
1055
|
+
};
|
|
1056
|
+
const normalizeWhatsAppPayload = (payload) => {
|
|
1057
|
+
const hasMedia = Boolean(payload.mediaUrl) || (payload.mediaUrls?.length ?? 0) > 0;
|
|
1058
|
+
const normalizedText = (typeof payload.text === "string" ? payload.text : "").replace(/^(?:[ \t]*\r?\n)+/, "");
|
|
1059
|
+
if (!normalizedText.trim()) {
|
|
1060
|
+
if (!hasMedia) return null;
|
|
1061
|
+
return {
|
|
1062
|
+
...payload,
|
|
1063
|
+
text: ""
|
|
1064
|
+
};
|
|
1065
|
+
}
|
|
1066
|
+
return {
|
|
1067
|
+
...payload,
|
|
1068
|
+
text: normalizedText
|
|
1069
|
+
};
|
|
1070
|
+
};
|
|
1071
|
+
const normalizedPayloads = normalizeReplyPayloadsForDelivery(payloads).flatMap((payload) => {
|
|
1072
|
+
if (channel !== "whatsapp") return [payload];
|
|
1073
|
+
const normalized = normalizeWhatsAppPayload(payload);
|
|
1074
|
+
return normalized ? [normalized] : [];
|
|
1075
|
+
});
|
|
1076
|
+
const hookRunner = getGlobalHookRunner();
|
|
1077
|
+
for (const payload of normalizedPayloads) {
|
|
1078
|
+
const payloadSummary = {
|
|
1079
|
+
text: payload.text ?? "",
|
|
1080
|
+
mediaUrls: payload.mediaUrls ?? (payload.mediaUrl ? [payload.mediaUrl] : []),
|
|
1081
|
+
channelData: payload.channelData
|
|
1082
|
+
};
|
|
1083
|
+
const emitMessageSent = (success, error) => {
|
|
1084
|
+
if (!hookRunner?.hasHooks("message_sent")) return;
|
|
1085
|
+
hookRunner.runMessageSent({
|
|
1086
|
+
to,
|
|
1087
|
+
content: payloadSummary.text,
|
|
1088
|
+
success,
|
|
1089
|
+
...error ? { error } : {}
|
|
1090
|
+
}, {
|
|
1091
|
+
channelId: channel,
|
|
1092
|
+
accountId: accountId ?? void 0
|
|
1093
|
+
}).catch(() => {});
|
|
1094
|
+
};
|
|
1095
|
+
try {
|
|
1096
|
+
throwIfAborted(abortSignal);
|
|
1097
|
+
let effectivePayload = payload;
|
|
1098
|
+
if (hookRunner?.hasHooks("message_sending")) try {
|
|
1099
|
+
const sendingResult = await hookRunner.runMessageSending({
|
|
1100
|
+
to,
|
|
1101
|
+
content: payloadSummary.text,
|
|
1102
|
+
metadata: {
|
|
1103
|
+
channel,
|
|
1104
|
+
accountId,
|
|
1105
|
+
mediaUrls: payloadSummary.mediaUrls
|
|
1106
|
+
}
|
|
1107
|
+
}, {
|
|
1108
|
+
channelId: channel,
|
|
1109
|
+
accountId: accountId ?? void 0
|
|
1110
|
+
});
|
|
1111
|
+
if (sendingResult?.cancel) continue;
|
|
1112
|
+
if (sendingResult?.content != null) {
|
|
1113
|
+
effectivePayload = {
|
|
1114
|
+
...payload,
|
|
1115
|
+
text: sendingResult.content
|
|
1116
|
+
};
|
|
1117
|
+
payloadSummary.text = sendingResult.content;
|
|
1118
|
+
}
|
|
1119
|
+
} catch {}
|
|
1120
|
+
params.onPayload?.(payloadSummary);
|
|
1121
|
+
if (handler.sendPayload && effectivePayload.channelData) {
|
|
1122
|
+
results.push(await handler.sendPayload(effectivePayload));
|
|
1123
|
+
emitMessageSent(true);
|
|
1124
|
+
continue;
|
|
1125
|
+
}
|
|
1126
|
+
if (payloadSummary.mediaUrls.length === 0) {
|
|
1127
|
+
if (isSignalChannel) await sendSignalTextChunks(payloadSummary.text);
|
|
1128
|
+
else await sendTextChunks(payloadSummary.text);
|
|
1129
|
+
emitMessageSent(true);
|
|
1130
|
+
continue;
|
|
1131
|
+
}
|
|
1132
|
+
let first = true;
|
|
1133
|
+
for (const url of payloadSummary.mediaUrls) {
|
|
1134
|
+
throwIfAborted(abortSignal);
|
|
1135
|
+
const caption = first ? payloadSummary.text : "";
|
|
1136
|
+
first = false;
|
|
1137
|
+
if (isSignalChannel) results.push(await sendSignalMedia(caption, url));
|
|
1138
|
+
else results.push(await handler.sendMedia(caption, url));
|
|
1139
|
+
}
|
|
1140
|
+
emitMessageSent(true);
|
|
1141
|
+
} catch (err) {
|
|
1142
|
+
emitMessageSent(false, err instanceof Error ? err.message : String(err));
|
|
1143
|
+
if (!params.bestEffort) throw err;
|
|
1144
|
+
params.onError?.(err, payloadSummary);
|
|
1145
|
+
}
|
|
1146
|
+
}
|
|
1147
|
+
if (params.mirror && results.length > 0) {
|
|
1148
|
+
const mirrorText = resolveMirroredTranscriptText({
|
|
1149
|
+
text: params.mirror.text,
|
|
1150
|
+
mediaUrls: params.mirror.mediaUrls
|
|
1151
|
+
});
|
|
1152
|
+
if (mirrorText) await appendAssistantMessageToSessionTranscript({
|
|
1153
|
+
agentId: params.mirror.agentId,
|
|
1154
|
+
sessionKey: params.mirror.sessionKey,
|
|
1155
|
+
text: mirrorText
|
|
1156
|
+
});
|
|
1157
|
+
}
|
|
1158
|
+
return results;
|
|
1159
|
+
}
|
|
1160
|
+
|
|
1161
|
+
//#endregion
|
|
1162
|
+
export { parseReplyDirectives as _, normalizeOutboundPayloadsForJson as a, initializeGlobalHookRunner as b, applyReplyThreading as c, shouldSuppressMessagingToolReplies as d, createReplyToModeFilterForChannel as f, normalizeTargetForProvider as g, normalizeChannelTargetInput as h, normalizeOutboundPayloads as i, filterMessagingToolDuplicates as l, buildTargetResolverSignature as m, deliver_exports as n, normalizeReplyPayloadsForDelivery as o, resolveReplyToMode as p, formatOutboundPayloadLog as r, applyReplyTagsToPayload as s, deliverOutboundPayloads as t, isRenderablePayload as u, throwIfAborted as v, getGlobalHookRunner as y };
|