@symerian/symi 2.7.8 → 2.7.9

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 (204) hide show
  1. package/dist/{acp-cli-DV6gYjcL.js → acp-cli-DwKj-AqM.js} +1 -1
  2. package/dist/{acp-cli-6peVIuMz.js → acp-cli-lkOF8AeX.js} +1 -1
  3. package/dist/{agents-DhWccW-I.js → agents-Qr0BDw_h.js} +5 -5
  4. package/dist/{agents.config-DwibJO90.js → agents.config-D0ih9tP3.js} +1 -1
  5. package/dist/{agents.config-ByNtHnqX.js → agents.config-DIjsIDbS.js} +1 -1
  6. package/dist/{audio-preflight-DIXDvyz5.js → audio-preflight-D0nJ1LEt.js} +4 -4
  7. package/dist/{audio-preflight-lr-WPpc9.js → audio-preflight-D_g9Duqw.js} +4 -4
  8. package/dist/{audit-BZU2PNKl.js → audit-DVUHZrf4.js} +1 -1
  9. package/dist/{audit-CaFXenfE.js → audit-DgAM_dWL.js} +1 -1
  10. package/dist/{auth-choice-Divyczym.js → auth-choice-DhI8MW-5.js} +2 -2
  11. package/dist/{auth-choice-DOQ4Xf6i.js → auth-choice-PdYn-qiM.js} +2 -2
  12. package/dist/{banner-Cyi2LLe-.js → banner-BQhYK_Ag.js} +1 -1
  13. package/dist/{browser-cli-DUcEYbmP.js → browser-cli-CQKRSqbb.js} +2 -2
  14. package/dist/{browser-cli-DM3GvpUm.js → browser-cli-ClxJjz9C.js} +2 -2
  15. package/dist/build-info.json +3 -3
  16. package/dist/bundled/boot-md/handler.js +6 -6
  17. package/dist/bundled/session-memory/handler.js +6 -6
  18. package/dist/{call-CJl0moIs.js → call-BrRWr7Lj.js} +1 -0
  19. package/dist/{call-BHn18ubR.js → call-CVqBgwrx.js} +1 -0
  20. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  21. package/dist/{channel-options-C1sGPky6.js → channel-options-CFwo8sFR.js} +1 -1
  22. package/dist/{channel-options-Bk4m4-d5.js → channel-options-ZHpChVVk.js} +1 -1
  23. package/dist/{channel-web-BKbzqQ7x.js → channel-web-UmRhDGhI.js} +1 -1
  24. package/dist/{channels-cli-CAz8gCcs.js → channels-cli-CRDgQtex.js} +6 -6
  25. package/dist/{channels-cli-CGOOVbGf.js → channels-cli-rzQvsXSw.js} +6 -6
  26. package/dist/{chrome-B14NNyfm.js → chrome-BUT--ob3.js} +7 -7
  27. package/dist/{chrome-ROtrXlNs.js → chrome-C08Z0XAa.js} +7 -7
  28. package/dist/cli/daemon-cli.js +1 -1
  29. package/dist/{cli-7JBNvH2_.js → cli-CC9jaj6w.js} +3 -3
  30. package/dist/{cli-C0zcu-AX.js → cli-DN6fX0Xu.js} +3 -3
  31. package/dist/{command-registry-BGMCr778.js → command-registry-qqb2gJ4P.js} +10 -10
  32. package/dist/{completion-cli-EO1xz8q6.js → completion-cli-BX_yaiom.js} +1 -1
  33. package/dist/{completion-cli-B1wj8Q43.js → completion-cli-g-Vdnude.js} +2 -2
  34. package/dist/{config-cli-B9RnWD0Y.js → config-cli-CnFTSv-1.js} +1 -1
  35. package/dist/{config-cli-QugXKbsV.js → config-cli-CsCvDCZV.js} +1 -1
  36. package/dist/{configure-C_BD9gNf.js → configure-BYd07Mo5.js} +6 -6
  37. package/dist/{configure-DOfxxuzV.js → configure-CAuW3YmR.js} +6 -6
  38. package/dist/control-ui/css/style.css +213 -6
  39. package/dist/control-ui/index.html +24 -2
  40. package/dist/control-ui/js/connections.js +113 -5
  41. package/dist/{cron-cli-CH0XOOxj.js → cron-cli--z6DSGhk.js} +2 -2
  42. package/dist/{cron-cli-DBt3Lxhm.js → cron-cli-DZJZ_EvY.js} +2 -2
  43. package/dist/{daemon-cli-BRMcpQb7.js → daemon-cli-B9yneKpO.js} +2 -2
  44. package/dist/{daemon-cli-DZeTm_F2.js → daemon-cli-bwFAShzf.js} +2 -2
  45. package/dist/daemon-cli.js +1 -0
  46. package/dist/{deliver-DrC7tG6s.js → deliver-B36OzmeP.js} +1 -1
  47. package/dist/{deliver-BC3liFsT.js → deliver-CLZGlRZt.js} +1 -1
  48. package/dist/{devices-cli-DwCYjYyV.js → devices-cli-fVRpoa9z.js} +1 -1
  49. package/dist/{devices-cli-C7aaQeFG.js → devices-cli-oqibXYae.js} +1 -1
  50. package/dist/{doctor-completion-Dm4QxJdc.js → doctor-completion-Cqce5h2X.js} +1 -1
  51. package/dist/{doctor-completion-DL-ojJGb.js → doctor-completion-Dqfl4aR1.js} +1 -1
  52. package/dist/entry.js +1 -1
  53. package/dist/{exec-approvals-cli-BcwVEh83.js → exec-approvals-cli-BpOqYXNL.js} +3 -3
  54. package/dist/{exec-approvals-cli-CWpi7F1X.js → exec-approvals-cli-DjGZKQbZ.js} +3 -3
  55. package/dist/extensionAPI.js +6 -6
  56. package/dist/{gateway-cli-DyFOMcg2.js → gateway-cli-BUqL_Yh6.js} +14 -13
  57. package/dist/{gateway-cli-DcrPLnL3.js → gateway-cli-DA1fRZ5w.js} +14 -13
  58. package/dist/{gateway-rpc-BzkjTxlD.js → gateway-rpc-Bp0KNJtL.js} +1 -1
  59. package/dist/{gateway-rpc-CJPoGX_W.js → gateway-rpc-XT8cFwtz.js} +1 -1
  60. package/dist/{glass-ui-ws-nxFknxgE.js → glass-ui-ws-BzBtCYP7.js} +10 -10
  61. package/dist/{glass-ui-ws-Czh-1YjO.js → glass-ui-ws-Cm-WtdFI.js} +10 -10
  62. package/dist/{health-CFd-Q1SH.js → health-Bx8UUqFA.js} +2 -2
  63. package/dist/{health-1ZDwurPU.js → health-C7HtwYDj.js} +2 -2
  64. package/dist/{hooks-cli-C4tUO222.js → hooks-cli-5G9JN39f.js} +4 -4
  65. package/dist/{hooks-cli-nKBiWE2v.js → hooks-cli-DtVT3wM_.js} +4 -4
  66. package/dist/{image-CKeN0xJL.js → image-BHhzdmbq.js} +1 -1
  67. package/dist/{image-C6v6m8Id.js → image-BnO8X_hj.js} +1 -1
  68. package/dist/index.js +8 -8
  69. package/dist/llm-slug-generator.js +6 -6
  70. package/dist/{logs-cli-DWqkAMwy.js → logs-cli-gU7p7zX0.js} +2 -2
  71. package/dist/{logs-cli-q93Kur4b.js → logs-cli-tJPD_Dps.js} +2 -2
  72. package/dist/{models-Cd9pFy1G.js → models-DQthIpnz.js} +3 -3
  73. package/dist/{models-cli-Cxo55E0S.js → models-cli-D8zc0jSg.js} +5 -5
  74. package/dist/{models-cli-CSqy5xI0.js → models-cli-UaHeUaJq.js} +4 -4
  75. package/dist/{nodes-cli-BHVOxukb.js → nodes-cli-6vHqlpLI.js} +2 -2
  76. package/dist/{nodes-cli-seBKfjdd.js → nodes-cli-DxHMNlWq.js} +2 -2
  77. package/dist/{onboard-SceHniST.js → onboard-C1GtzpAc.js} +3 -3
  78. package/dist/{onboard-channels-BI-59zLH.js → onboard-channels-CUUTFx1F.js} +1 -1
  79. package/dist/{onboard-channels-KGMbYFcP.js → onboard-channels-HyGv2y5c.js} +1 -1
  80. package/dist/{onboard-helpers-BV3zKTt_.js → onboard-helpers-7H_XiJt-.js} +1 -1
  81. package/dist/{onboard-helpers-BFyI1sla.js → onboard-helpers-CPSKXD5k.js} +1 -1
  82. package/dist/{onboard-remote-C-EvSvV9.js → onboard-remote-BlCdyTsP.js} +1 -1
  83. package/dist/{onboard-remote-CvtBwhma.js → onboard-remote-DFavRxQ6.js} +1 -1
  84. package/dist/{onboard-skills-C1jrqA-P.js → onboard-skills-CssuFDjw.js} +1 -1
  85. package/dist/{onboard-skills-CWaMGMQi.js → onboard-skills-DVtfVPsB.js} +1 -1
  86. package/dist/{onboard-CVKCZHVL.js → onboard-sl1Xputw.js} +3 -3
  87. package/dist/{onboarding-Bs3JhONv.js → onboarding-B4qg0ZYp.js} +7 -7
  88. package/dist/{onboarding-BPjquWC3.js → onboarding-C89rTOOy.js} +7 -7
  89. package/dist/{onboarding.finalize-Dbx89qG2.js → onboarding.finalize-CGk4vov2.js} +9 -9
  90. package/dist/{onboarding.finalize-lAwIuZFE.js → onboarding.finalize-ClJ1HBVt.js} +8 -8
  91. package/dist/{onboarding.gateway-config-Btb5PaGv.js → onboarding.gateway-config-TM8ERKyn.js} +2 -2
  92. package/dist/{onboarding.gateway-config-gMhAsXgO.js → onboarding.gateway-config-vGTQDqA6.js} +2 -2
  93. package/dist/{pi-embedded-CG4P3hy3.js → pi-embedded-BaNpG0Aq.js} +17 -16
  94. package/dist/{pi-embedded-helpers-D8YgtMdl.js → pi-embedded-helpers-BET359cH.js} +4 -4
  95. package/dist/{pi-embedded-helpers-BUNbSNWw.js → pi-embedded-helpers-DcN8GHTt.js} +4 -4
  96. package/dist/{plugin-registry-DSrgdZKM.js → plugin-registry-7MeuYUTG.js} +1 -1
  97. package/dist/{plugin-registry-C4aoDdOB.js → plugin-registry-Dx8MaVaX.js} +1 -1
  98. package/dist/plugin-sdk/{channel-web-CsZ6epLT.js → channel-web-C6_r-2VI.js} +1 -1
  99. package/dist/plugin-sdk/index.js +2 -2
  100. package/dist/plugin-sdk/{reply-Rv3jE0Rs.js → reply-CIDYJYie.js} +3 -2
  101. package/dist/plugin-sdk/{web-D6R4__wu.js → web-CHKraWl6.js} +2 -2
  102. package/dist/{plugins-cli-DJM_xxIg.js → plugins-cli-bblxpPhT.js} +4 -4
  103. package/dist/{plugins-cli-CSwcV2M6.js → plugins-cli-oatWFlGr.js} +4 -4
  104. package/dist/{program-CtX7o1VN.js → program-B4MbPh6k.js} +9 -9
  105. package/dist/{program-context-B2HPYMcn.js → program-context-BfdA1JM9.js} +28 -28
  106. package/dist/{prompt-select-styled-Cs79EjHm.js → prompt-select-styled-DNhjvdZL.js} +6 -6
  107. package/dist/{prompt-select-styled-5a7_K1sn.js → prompt-select-styled-bMJTZkj7.js} +6 -6
  108. package/dist/{provider-auth-helpers-DOa1Rc3D.js → provider-auth-helpers-CezJXPrZ.js} +1 -1
  109. package/dist/{provider-auth-helpers-fWAoFIwZ.js → provider-auth-helpers-D9BOiQMP.js} +1 -1
  110. package/dist/{push-apns-HnaGVJwW.js → push-apns-CL2MBhWP.js} +1 -1
  111. package/dist/{push-apns-Dnd_jTU-.js → push-apns-DUWtWoB-.js} +1 -1
  112. package/dist/{pw-ai-BLrC_W1X.js → pw-ai-B476LzSK.js} +1 -1
  113. package/dist/{pw-ai-DTmHAKPA.js → pw-ai-DE8wmtet.js} +1 -1
  114. package/dist/{register.agent-CaputGWT.js → register.agent-B-v1ixge.js} +8 -8
  115. package/dist/{register.agent-lqb5eXZs.js → register.agent-Dms0oymW.js} +7 -7
  116. package/dist/{register.configure-C0KBR4e6.js → register.configure-CVct6y53.js} +10 -10
  117. package/dist/{register.configure-C3AQZaAa.js → register.configure-MY0P8ucP.js} +10 -10
  118. package/dist/{register.maintenance-DLY3bZTm.js → register.maintenance-Ciblsa6H.js} +9 -9
  119. package/dist/{register.maintenance-c8Ig4nYO.js → register.maintenance-DpSSW9tp.js} +10 -10
  120. package/dist/{register.message-CUclEFp5.js → register.message-Csn-WBH0.js} +4 -4
  121. package/dist/{register.message-Bexo7F0u.js → register.message-FsBEsQeD.js} +4 -4
  122. package/dist/{register.onboard-CVmFRJ__.js → register.onboard-BQ-ciW9l.js} +6 -6
  123. package/dist/{register.onboard-DpeqS3GT.js → register.onboard-MIhaldvp.js} +6 -6
  124. package/dist/{register.setup-NiDBVZE2.js → register.setup-DCTamI7u.js} +6 -6
  125. package/dist/{register.setup-DogqYYN7.js → register.setup-M0O0Tp-n.js} +6 -6
  126. package/dist/{register.status-health-sessions-CTErhiR9.js → register.status-health-sessions-Drc5WQGq.js} +6 -6
  127. package/dist/{register.status-health-sessions-C5noW7M3.js → register.status-health-sessions-DzKtjfA-.js} +6 -6
  128. package/dist/{register.subclis-E_1XOkdf.js → register.subclis-Btg8-Nnf.js} +19 -19
  129. package/dist/{reply-DAMo5JhO.js → reply-B0azB7WR.js} +4 -4
  130. package/dist/{rpc-IXmOgc1l.js → rpc-CHb_JvbM.js} +1 -1
  131. package/dist/{rpc-k8pnK8TE.js → rpc-Cog-Z1rx.js} +1 -1
  132. package/dist/{run-main-Cv91hLSK.js → run-main-DfxDXt2d.js} +16 -16
  133. package/dist/{runner-COpebDew.js → runner-BVgCl6yZ.js} +1 -1
  134. package/dist/{runner-QX0Z6K1w.js → runner-D5nFF9E6.js} +1 -1
  135. package/dist/{security-cli-Cxmb5Rpv.js → security-cli-B5s73Le2.js} +2 -2
  136. package/dist/{security-cli-BsStEfWU.js → security-cli-CzWHkrqD.js} +2 -2
  137. package/dist/{server-methods-C_rhjm5p.js → server-methods-BcBroG6v.js} +68 -10
  138. package/dist/{server-methods-CXL1Nrbp.js → server-methods-OJbQNjOJ.js} +68 -10
  139. package/dist/{server-node-events-B_UZBZn_.js → server-node-events-AVxH5dXs.js} +4 -4
  140. package/dist/{server-node-events-CdUVoXvg.js → server-node-events-Ba9K9DB9.js} +4 -4
  141. package/dist/{status-Ds4oB9tJ.js → status-CpWkGj5h.js} +1 -1
  142. package/dist/{status-Drn5xFtL.js → status-DNxAYvxM.js} +1 -1
  143. package/dist/{status-CzI_lZth.js → status-RlJA2XzQ.js} +5 -5
  144. package/dist/{status-DQQ-w3eF.js → status-Ut-dfDT0.js} +5 -5
  145. package/dist/{subagent-registry-CfoRc8ng.js → subagent-registry-CsYeP8wc.js} +4 -4
  146. package/dist/{system-cli-DnlgTnqh.js → system-cli-D3CVv1ab.js} +2 -2
  147. package/dist/{system-cli-CQNazJoF.js → system-cli-rpyy5jcw.js} +2 -2
  148. package/dist/{tui-CXTwJqpz.js → tui-DfPeXwah.js} +1 -1
  149. package/dist/{tui-DTW81r9y.js → tui-LZPdrFmK.js} +1 -1
  150. package/dist/{tui-cli-KiaTeKr0.js → tui-cli-Bm3TJgXf.js} +2 -2
  151. package/dist/{tui-cli-DGmt1Xs0.js → tui-cli-DFXZ7r1F.js} +2 -2
  152. package/dist/{unified-runner-DweFv8Vx.js → unified-runner-BojeuKIk.js} +17 -16
  153. package/dist/{update-cli-Ba4La00X.js → update-cli-Cb12PjyN.js} +10 -10
  154. package/dist/{update-cli-BkJZPKh8.js → update-cli-Cm4ftHhu.js} +11 -11
  155. package/dist/{update-runner-w3GO-spo.js → update-runner-BE6kDMsw.js} +1 -1
  156. package/dist/{update-runner-CqWSrJXt.js → update-runner-Cv6hDgKV.js} +1 -1
  157. package/dist/{web-0cG6_ynp.js → web-BOv3xM7W.js} +4 -4
  158. package/dist/{web-DHAEIalz.js → web-CYf5I3aU.js} +3 -3
  159. package/dist/{web-9rrJ5lZr.js → web-Dxkxcp7P.js} +6 -6
  160. package/dist/{web-Cx3SfQiX.js → web-f1xT-H2y.js} +6 -6
  161. package/docs/connections/email.md +143 -0
  162. package/docs/connections/msteams.md +80 -0
  163. package/docs/connections/slack.md +91 -0
  164. package/extensions/bluebubbles/package.json +1 -1
  165. package/extensions/copilot-proxy/package.json +1 -1
  166. package/extensions/diagnostics-otel/package.json +1 -1
  167. package/extensions/discord/package.json +1 -1
  168. package/extensions/feishu/package.json +1 -1
  169. package/extensions/google-antigravity-auth/package.json +1 -1
  170. package/extensions/google-gemini-cli-auth/package.json +1 -1
  171. package/extensions/googlechat/package.json +1 -1
  172. package/extensions/imessage/package.json +1 -1
  173. package/extensions/irc/package.json +1 -1
  174. package/extensions/learning-loop/package.json +1 -1
  175. package/extensions/line/package.json +1 -1
  176. package/extensions/llm-task/package.json +1 -1
  177. package/extensions/matrix/CHANGELOG.md +6 -0
  178. package/extensions/matrix/package.json +1 -1
  179. package/extensions/mattermost/package.json +1 -1
  180. package/extensions/memory-core/package.json +1 -1
  181. package/extensions/memory-lancedb/package.json +1 -1
  182. package/extensions/minimax-portal-auth/package.json +1 -1
  183. package/extensions/msteams/CHANGELOG.md +6 -0
  184. package/extensions/msteams/package.json +1 -1
  185. package/extensions/nextcloud-talk/package.json +1 -1
  186. package/extensions/nostr/CHANGELOG.md +6 -0
  187. package/extensions/nostr/package.json +1 -1
  188. package/extensions/open-prose/package.json +1 -1
  189. package/extensions/outlook/package.json +1 -1
  190. package/extensions/pipeline/package.json +1 -1
  191. package/extensions/signal/package.json +1 -1
  192. package/extensions/slack/package.json +1 -1
  193. package/extensions/telegram/package.json +1 -1
  194. package/extensions/tlon/package.json +1 -1
  195. package/extensions/twitch/CHANGELOG.md +6 -0
  196. package/extensions/twitch/package.json +1 -1
  197. package/extensions/voice-call/CHANGELOG.md +6 -0
  198. package/extensions/voice-call/package.json +1 -1
  199. package/extensions/whatsapp/package.json +1 -1
  200. package/extensions/zalo/CHANGELOG.md +6 -0
  201. package/extensions/zalo/package.json +1 -1
  202. package/extensions/zalouser/CHANGELOG.md +6 -0
  203. package/extensions/zalouser/package.json +1 -1
  204. package/package.json +1 -1
@@ -1,7 +1,7 @@
1
1
  import { g as resolveStateDir } from "./paths-Cqn-zk3M.js";
2
2
  import { B as theme, h as pathExists } from "./utils-B-0b9bGM.js";
3
3
  import "./thinking-EAliFiVK.js";
4
- import { V as trimLogTail } from "./reply-DAMo5JhO.js";
4
+ import { V as trimLogTail } from "./reply-B0azB7WR.js";
5
5
  import { t as resolveSymiPackageRoot } from "./symi-root-CrGJbkzf.js";
6
6
  import "./registry-Cja8eT7G.js";
7
7
  import { f as defaultRuntime } from "./subsystem-D9vIQve0.js";
@@ -74,7 +74,7 @@ import "./render-CXDO_kgw.js";
74
74
  import "./commands-BNLCWX6e.js";
75
75
  import "./commands-registry-B6cf3Cmq.js";
76
76
  import "./client-B8xmq-Pw.js";
77
- import "./call-BHn18ubR.js";
77
+ import "./call-CVqBgwrx.js";
78
78
  import "./pairing-token-CX3NN_qj.js";
79
79
  import "./channel-activity-BOiuJS3t.js";
80
80
  import "./fetch-DTNGXEzX.js";
@@ -96,7 +96,7 @@ import "./session-cost-usage-BXAI7CNH.js";
96
96
  import "./outbound-attachment-Bw-c5Cdp.js";
97
97
  import "./delivery-queue-CAxX6nGq.js";
98
98
  import "./send-CBcCKe5w.js";
99
- import "./onboard-helpers-BFyI1sla.js";
99
+ import "./onboard-helpers-CPSKXD5k.js";
100
100
  import { n as stylePromptMessage } from "./prompt-style-CnkMpSXt.js";
101
101
  import "./pairing-labels-BScqzHEx.js";
102
102
  import "./exec-approvals-DXM2pQYL.js";
@@ -107,7 +107,7 @@ import "./stagger-CvFURHzt.js";
107
107
  import { c as resolveGatewayLaunchAgentLabel, d as resolveGatewaySystemdServiceName, f as resolveGatewayWindowsTaskName } from "./constants-CafH8-8D.js";
108
108
  import "./channel-selection-V2xDgw16.js";
109
109
  import { r as parseSemver } from "./runtime-guard-Dik20CVM.js";
110
- import "./program-context-B2HPYMcn.js";
110
+ import "./program-context-BfdA1JM9.js";
111
111
  import "./catalog-DX1l43Ru.js";
112
112
  import "./skills-status-CKmK1hOo.js";
113
113
  import { n as inheritOptionFromParent } from "./command-options-BkTXKWlb.js";
@@ -118,28 +118,28 @@ import "./npm-registry-spec-C0CPT3vr.js";
118
118
  import "./skill-scanner-hMtQbWPV.js";
119
119
  import "./installs-DQcRVF1U.js";
120
120
  import "./channels-status-issues-CJ0Vb_9z.js";
121
- import { r as installCompletion } from "./completion-cli-EO1xz8q6.js";
121
+ import { r as installCompletion } from "./completion-cli-BX_yaiom.js";
122
122
  import "./daemon-runtime-BT1zC2PU.js";
123
123
  import "./systemd-DT6SbCim.js";
124
124
  import { t as resolveGatewayService } from "./service-osK70kTZ.js";
125
125
  import "./lifecycle-core-JD8GNX_f.js";
126
126
  import "./systemd-hints-G9M4s_fF.js";
127
- import { i as runDaemonInstall, r as runDaemonRestart } from "./daemon-cli-DZeTm_F2.js";
127
+ import { i as runDaemonInstall, r as runDaemonRestart } from "./daemon-cli-bwFAShzf.js";
128
128
  import "./diagnostics-BRwihzJG.js";
129
129
  import { t as renderTable } from "./table-BKlH0YlA.js";
130
- import "./health-CFd-Q1SH.js";
130
+ import "./health-Bx8UUqFA.js";
131
131
  import "./control-ui-assets-B7moDVHX.js";
132
132
  import { a as resolveNpmChannelTag, c as DEFAULT_PACKAGE_CHANNEL, d as formatUpdateChannelLabel, g as resolveUpdateChannelDisplay, h as resolveEffectiveUpdateChannel, m as normalizeUpdateChannel, n as compareSemverStrings, r as fetchNpmTagVersion, s as DEFAULT_GIT_CHANNEL, t as checkUpdateStatus, u as channelToNpmTag } from "./update-check-7EzEjSzb.js";
133
133
  import "./dm-policy-shared-DwFEXR-I.js";
134
134
  import { i as resolveUpdateAvailability, n as formatUpdateOneLiner, t as formatUpdateAvailableHint } from "./status.update-C1I_7XIo.js";
135
- import { a as globalInstallArgs, c as readPackageVersion, i as detectGlobalInstallManagerForRoot, n as cleanupGlobalRenameDirs, o as resolveGlobalPackageRoot, r as detectGlobalInstallManagerByPresence, s as readPackageName, t as runGatewayUpdate } from "./update-runner-CqWSrJXt.js";
135
+ import { a as globalInstallArgs, c as readPackageVersion, i as detectGlobalInstallManagerForRoot, n as cleanupGlobalRenameDirs, o as resolveGlobalPackageRoot, r as detectGlobalInstallManagerByPresence, s as readPackageName, t as runGatewayUpdate } from "./update-runner-Cv6hDgKV.js";
136
136
  import "./logging-KpicI3yD.js";
137
137
  import { n as updateNpmInstalledPlugins, t as syncPluginsForUpdateChannel } from "./update-DdQCEAVD.js";
138
138
  import "./doctor-config-flow-CN8seKLA.js";
139
139
  import "./systemd-linger-DCskIKcx.js";
140
140
  import "./health-format-DRCaak6L.js";
141
- import { n as doctorCommand, t as selectStyled } from "./prompt-select-styled-5a7_K1sn.js";
142
- import { r as ensureCompletionCacheExists, t as checkShellCompletionStatus } from "./doctor-completion-DL-ojJGb.js";
141
+ import { n as doctorCommand, t as selectStyled } from "./prompt-select-styled-bMJTZkj7.js";
142
+ import { r as ensureCompletionCacheExists, t as checkShellCompletionStatus } from "./doctor-completion-Dqfl4aR1.js";
143
143
  import os from "node:os";
144
144
  import path from "node:path";
145
145
  import fs from "node:fs/promises";
@@ -14,10 +14,10 @@ import "./manifest-registry-D5bnO5uA.js";
14
14
  import "./skills-status-DODCG6UU.js";
15
15
  import { l as writeConfigFile, o as readConfigFileSnapshot } from "./config-DXt3pc08.js";
16
16
  import "./client-qUlxXXVJ.js";
17
- import "./call-CJl0moIs.js";
17
+ import "./call-BrRWr7Lj.js";
18
18
  import "./message-channel-C9dERklz.js";
19
19
  import "./pairing-token-Byh6drgn.js";
20
- import { Ct as trimLogTail } from "./subagent-registry-CfoRc8ng.js";
20
+ import { Ct as trimLogTail } from "./subagent-registry-CsYeP8wc.js";
21
21
  import "./sessions-BPD85pWA.js";
22
22
  import "./tokens-Csntmwwn.js";
23
23
  import "./plugins-CwSlLxM8.js";
@@ -99,7 +99,7 @@ import "./cli-utils-CCaEbxAz.js";
99
99
  import { t as formatHelpExamples } from "./help-format-B0pWGnZs.js";
100
100
  import "./progress-BAHiAaDW.js";
101
101
  import "./replies-CsUBFXf6.js";
102
- import "./onboard-helpers-BV3zKTt_.js";
102
+ import "./onboard-helpers-7H_XiJt-.js";
103
103
  import { n as stylePromptMessage } from "./prompt-style-DwCXob2h.js";
104
104
  import "./pairing-labels-DwceB1dG.js";
105
105
  import "./pi-tools.policy-DOVQ8dDx.js";
@@ -112,32 +112,32 @@ import "./npm-registry-spec-DkaZNHAW.js";
112
112
  import "./skill-scanner-BGWOBqLY.js";
113
113
  import "./installs-CgQpVncj.js";
114
114
  import "./channels-status-issues-c7qZbYG5.js";
115
- import "./register.subclis-E_1XOkdf.js";
116
- import "./command-registry-BGMCr778.js";
115
+ import "./register.subclis-Btg8-Nnf.js";
116
+ import "./command-registry-qqb2gJ4P.js";
117
117
  import "./program-context-CqzR_m-7.js";
118
- import { r as installCompletion } from "./completion-cli-B1wj8Q43.js";
118
+ import { r as installCompletion } from "./completion-cli-g-Vdnude.js";
119
119
  import "./daemon-runtime-BV78EN62.js";
120
120
  import { r as parseSemver } from "./runtime-guard-D7waq_Ho.js";
121
121
  import "./systemd-DlMdyFDY.js";
122
122
  import { t as resolveGatewayService } from "./service-Cm9j9WzQ.js";
123
123
  import "./lifecycle-core-B9EgW7Tg.js";
124
124
  import "./systemd-hints-BWjICrbb.js";
125
- import { i as runDaemonInstall, r as runDaemonRestart } from "./daemon-cli-BRMcpQb7.js";
125
+ import { i as runDaemonInstall, r as runDaemonRestart } from "./daemon-cli-B9yneKpO.js";
126
126
  import "./diagnostics-CS1ov_hH.js";
127
127
  import { t as renderTable } from "./table-D01d2GuY.js";
128
- import "./health-1ZDwurPU.js";
128
+ import "./health-C7HtwYDj.js";
129
129
  import "./control-ui-assets-BseSWee1.js";
130
130
  import { a as resolveNpmChannelTag, c as DEFAULT_PACKAGE_CHANNEL, d as formatUpdateChannelLabel, g as resolveUpdateChannelDisplay, h as resolveEffectiveUpdateChannel, m as normalizeUpdateChannel, n as compareSemverStrings, r as fetchNpmTagVersion, s as DEFAULT_GIT_CHANNEL, t as checkUpdateStatus, u as channelToNpmTag } from "./update-check-ZdimP1aU.js";
131
131
  import "./dm-policy-shared-DF2uLfXk.js";
132
132
  import { i as resolveUpdateAvailability, n as formatUpdateOneLiner, t as formatUpdateAvailableHint } from "./status.update-BGSQrlxW.js";
133
- import { a as globalInstallArgs, c as readPackageVersion, i as detectGlobalInstallManagerForRoot, n as cleanupGlobalRenameDirs, o as resolveGlobalPackageRoot, r as detectGlobalInstallManagerByPresence, s as readPackageName, t as runGatewayUpdate } from "./update-runner-w3GO-spo.js";
133
+ import { a as globalInstallArgs, c as readPackageVersion, i as detectGlobalInstallManagerForRoot, n as cleanupGlobalRenameDirs, o as resolveGlobalPackageRoot, r as detectGlobalInstallManagerByPresence, s as readPackageName, t as runGatewayUpdate } from "./update-runner-BE6kDMsw.js";
134
134
  import "./logging-BGewRZy0.js";
135
135
  import { n as updateNpmInstalledPlugins, t as syncPluginsForUpdateChannel } from "./update-BWwyHVQj.js";
136
136
  import "./doctor-config-flow-C81j0-sE.js";
137
137
  import "./systemd-linger-DA_LW52P.js";
138
138
  import "./health-format-CzgUHmmX.js";
139
- import { n as doctorCommand, t as selectStyled } from "./prompt-select-styled-Cs79EjHm.js";
140
- import { r as ensureCompletionCacheExists, t as checkShellCompletionStatus } from "./doctor-completion-Dm4QxJdc.js";
139
+ import { n as doctorCommand, t as selectStyled } from "./prompt-select-styled-DNhjvdZL.js";
140
+ import { r as ensureCompletionCacheExists, t as checkShellCompletionStatus } from "./doctor-completion-Cqce5h2X.js";
141
141
  import { spawn, spawnSync } from "node:child_process";
142
142
  import os from "node:os";
143
143
  import path from "node:path";
@@ -1,6 +1,6 @@
1
1
  import { nt as pathExists } from "./entry.js";
2
2
  import { t as runCommandWithTimeout } from "./exec-CBKBIMpA.js";
3
- import { Ct as trimLogTail } from "./subagent-registry-CfoRc8ng.js";
3
+ import { Ct as trimLogTail } from "./subagent-registry-CsYeP8wc.js";
4
4
  import { n as resolveControlUiDistIndexHealth, r as resolveControlUiDistIndexPathForRoot } from "./control-ui-assets-BseSWee1.js";
5
5
  import { c as DEFAULT_PACKAGE_CHANNEL, f as isBetaTag, l as DEV_BRANCH, n as compareSemverStrings, o as detectPackageManager$1, p as isStableTag, u as channelToNpmTag } from "./update-check-ZdimP1aU.js";
6
6
  import os from "node:os";
@@ -1,5 +1,5 @@
1
1
  import { h as pathExists } from "./utils-B-0b9bGM.js";
2
- import { V as trimLogTail } from "./reply-DAMo5JhO.js";
2
+ import { V as trimLogTail } from "./reply-B0azB7WR.js";
3
3
  import { t as runCommandWithTimeout } from "./exec-CWkblSrI.js";
4
4
  import { n as resolveControlUiDistIndexHealth, r as resolveControlUiDistIndexPathForRoot } from "./control-ui-assets-B7moDVHX.js";
5
5
  import { c as DEFAULT_PACKAGE_CHANNEL, f as isBetaTag, l as DEV_BRANCH, n as compareSemverStrings, o as detectPackageManager$1, p as isStableTag, u as channelToNpmTag } from "./update-check-7EzEjSzb.js";
@@ -1,7 +1,7 @@
1
1
  import "./paths-Cqn-zk3M.js";
2
2
  import "./utils-B-0b9bGM.js";
3
3
  import "./thinking-EAliFiVK.js";
4
- import "./reply-DAMo5JhO.js";
4
+ import "./reply-B0azB7WR.js";
5
5
  import "./registry-Cja8eT7G.js";
6
6
  import "./subsystem-D9vIQve0.js";
7
7
  import "./exec-CWkblSrI.js";
@@ -72,7 +72,7 @@ import "./render-CXDO_kgw.js";
72
72
  import "./commands-BNLCWX6e.js";
73
73
  import "./commands-registry-B6cf3Cmq.js";
74
74
  import "./client-B8xmq-Pw.js";
75
- import "./call-BHn18ubR.js";
75
+ import "./call-CVqBgwrx.js";
76
76
  import "./pairing-token-CX3NN_qj.js";
77
77
  import "./channel-activity-BOiuJS3t.js";
78
78
  import "./fetch-DTNGXEzX.js";
@@ -93,7 +93,7 @@ import "./session-cost-usage-BXAI7CNH.js";
93
93
  import "./outbound-attachment-Bw-c5Cdp.js";
94
94
  import "./delivery-queue-CAxX6nGq.js";
95
95
  import "./send-CBcCKe5w.js";
96
- import "./onboard-helpers-BFyI1sla.js";
96
+ import "./onboard-helpers-CPSKXD5k.js";
97
97
  import "./prompt-style-CnkMpSXt.js";
98
98
  import "./pairing-labels-BScqzHEx.js";
99
99
  import "./exec-approvals-DXM2pQYL.js";
@@ -102,7 +102,7 @@ import "./pi-tools.policy-BpN-v9bT.js";
102
102
  import "./control-service-D0IdaeI8.js";
103
103
  import "./stagger-CvFURHzt.js";
104
104
  import "./channel-selection-V2xDgw16.js";
105
- import { n as monitorWebInbox, t as monitorWebChannel } from "./channel-web-BKbzqQ7x.js";
105
+ import { n as monitorWebInbox, t as monitorWebChannel } from "./channel-web-UmRhDGhI.js";
106
106
  import { n as sendMessageWhatsApp } from "./outbound-XakUc977.js";
107
107
  import { i as waitForWaConnection, t as createWaSocket } from "./session-BuAvI2u-.js";
108
108
  import { t as loginWeb } from "./login-DiorUpLk.js";
@@ -13,10 +13,10 @@ import "./skills-D_oCiaQn.js";
13
13
  import "./manifest-registry-D5bnO5uA.js";
14
14
  import { i as loadConfig } from "./config-DXt3pc08.js";
15
15
  import "./client-qUlxXXVJ.js";
16
- import "./call-CJl0moIs.js";
16
+ import "./call-BrRWr7Lj.js";
17
17
  import "./message-channel-C9dERklz.js";
18
18
  import "./pairing-token-Byh6drgn.js";
19
- import { Bn as resolveEnvelopeFormatOptions, Cn as enqueueSystemEvent, F as buildHistoryContextFromEntries, Hn as hasControlCommand, I as recordPendingHistoryEntryIfEnabled, Kn as buildMentionRegexes, L as shouldAckReactionForWhatsApp, Ln as createInboundDebouncer, M as buildPairingReply, N as resolveMentionGating, P as DEFAULT_GROUP_HISTORY_LIMIT, R as dispatchReplyWithBufferedBlockDispatcher, Rn as resolveInboundDebounceMs, U as createDedupeCache, Un as shouldComputeCommandAuthorized, W as getReplyFromConfig, b as sleepWithAbort, nn as parseActivationCommand, qn as normalizeMentionText, tn as normalizeGroupActivation, y as computeBackoff, zn as formatInboundEnvelope } from "./subagent-registry-CfoRc8ng.js";
19
+ import { Bn as resolveEnvelopeFormatOptions, Cn as enqueueSystemEvent, F as buildHistoryContextFromEntries, Hn as hasControlCommand, I as recordPendingHistoryEntryIfEnabled, Kn as buildMentionRegexes, L as shouldAckReactionForWhatsApp, Ln as createInboundDebouncer, M as buildPairingReply, N as resolveMentionGating, P as DEFAULT_GROUP_HISTORY_LIMIT, R as dispatchReplyWithBufferedBlockDispatcher, Rn as resolveInboundDebounceMs, U as createDedupeCache, Un as shouldComputeCommandAuthorized, W as getReplyFromConfig, b as sleepWithAbort, nn as parseActivationCommand, qn as normalizeMentionText, tn as normalizeGroupActivation, y as computeBackoff, zn as formatInboundEnvelope } from "./subagent-registry-CsYeP8wc.js";
20
20
  import { B as resolveGroupSessionKey, c as recordSessionMetaFromInbound, o as loadSessionStore, s as readSessionUpdatedAt, u as updateLastRoute } from "./sessions-BPD85pWA.js";
21
21
  import "./tokens-Csntmwwn.js";
22
22
  import "./plugins-CwSlLxM8.js";
@@ -98,7 +98,7 @@ import "./cli-utils-CCaEbxAz.js";
98
98
  import "./help-format-B0pWGnZs.js";
99
99
  import "./progress-BAHiAaDW.js";
100
100
  import "./replies-CsUBFXf6.js";
101
- import "./onboard-helpers-BV3zKTt_.js";
101
+ import "./onboard-helpers-7H_XiJt-.js";
102
102
  import "./prompt-style-DwCXob2h.js";
103
103
  import "./pairing-labels-DwceB1dG.js";
104
104
  import { r as setActiveWebListener } from "./active-listener-De1JhR4W.js";
@@ -4,16 +4,16 @@ import { A as isSelfChatMode, B as sleep, C as clamp, F as resolveJidToE164, H a
4
4
  import "./agent-scope-CpEJ0B88.js";
5
5
  import { r as defaultRuntime, t as createSubsystemLogger } from "./subsystem-BjyjJF-d.js";
6
6
  import "./workspace-DscDraUb.js";
7
- import { C as resolveEnvelopeFormatOptions, D as normalizeMentionText, E as buildMentionRegexes, S as formatInboundEnvelope, T as shouldComputeCommandAuthorized, _ as parseActivationCommand, b as createInboundDebouncer, c as DEFAULT_GROUP_HISTORY_LIMIT, d as shouldAckReactionForWhatsApp, f as dispatchReplyWithBufferedBlockDispatcher, g as normalizeGroupActivation, h as getReplyFromConfig, l as buildHistoryContextFromEntries, m as createDedupeCache, n as computeBackoff, o as buildPairingReply, r as sleepWithAbort, s as resolveMentionGating, u as recordPendingHistoryEntryIfEnabled, v as formatDurationPrecise, w as hasControlCommand, x as resolveInboundDebounceMs, y as enqueueSystemEvent } from "./unified-runner-DweFv8Vx.js";
7
+ import { C as resolveEnvelopeFormatOptions, D as normalizeMentionText, E as buildMentionRegexes, S as formatInboundEnvelope, T as shouldComputeCommandAuthorized, _ as parseActivationCommand, b as createInboundDebouncer, c as DEFAULT_GROUP_HISTORY_LIMIT, d as shouldAckReactionForWhatsApp, f as dispatchReplyWithBufferedBlockDispatcher, g as normalizeGroupActivation, h as getReplyFromConfig, l as buildHistoryContextFromEntries, m as createDedupeCache, n as computeBackoff, o as buildPairingReply, r as sleepWithAbort, s as resolveMentionGating, u as recordPendingHistoryEntryIfEnabled, v as formatDurationPrecise, w as hasControlCommand, x as resolveInboundDebounceMs, y as enqueueSystemEvent } from "./unified-runner-BojeuKIk.js";
8
8
  import { s as resolveStorePath } from "./paths-CbQV9WEg.js";
9
9
  import "./auth-profiles-C2vj6htZ.js";
10
10
  import { n as formatCliCommand } from "./env-BDXYbTKj.js";
11
11
  import "./github-copilot-token-cCYzSU9h.js";
12
12
  import "./boolean-CE7i9tBR.js";
13
- import { Ct as resolveGroupSessionKey, G as updateLastRoute, H as loadSessionStore, U as readSessionUpdatedAt, W as recordSessionMetaFromInbound } from "./pi-embedded-helpers-BUNbSNWw.js";
13
+ import { Ct as resolveGroupSessionKey, G as updateLastRoute, H as loadSessionStore, U as readSessionUpdatedAt, W as recordSessionMetaFromInbound } from "./pi-embedded-helpers-DcN8GHTt.js";
14
14
  import { n as loadConfig } from "./config-BkZ9HOKT.js";
15
15
  import "./manifest-registry-CBCGTsIb.js";
16
- import "./chrome-ROtrXlNs.js";
16
+ import "./chrome-C08Z0XAa.js";
17
17
  import "./frontmatter-CTR5f_Ez.js";
18
18
  import "./skills-CXxrn_e2.js";
19
19
  import "./redact-BDMXB06K.js";
@@ -31,10 +31,10 @@ import "./bindings-BsHoBLIE.js";
31
31
  import "./send-B7aHpAco.js";
32
32
  import "./send-Yzy50T1h.js";
33
33
  import "./tool-images-SqqWIT22.js";
34
- import "./deliver-BC3liFsT.js";
34
+ import "./deliver-CLZGlRZt.js";
35
35
  import "./diagnostic-CQiU0O8b.js";
36
36
  import "./diagnostic-session-state-Zw87xFym.js";
37
- import "./image-C6v6m8Id.js";
37
+ import "./image-BnO8X_hj.js";
38
38
  import "./pi-auth-json-RXOlh8ar.js";
39
39
  import "./tokens-W0JzCJJM.js";
40
40
  import { G as formatLocationText, J as readChannelAllowFromStore, K as toLocationContext, X as upsertChannelPairingRequest } from "./send-xTfsDEE2.js";
@@ -51,7 +51,7 @@ import { t as getAgentScopedMediaLocalRoots } from "./local-roots-Se92wAN5.js";
51
51
  import { a as loadWebMedia } from "./ir-JAy_3A3B.js";
52
52
  import "./render-DwEu-aCr.js";
53
53
  import "./commands-registry-CfoYlMQB.js";
54
- import { y as registerUnhandledRejectionHandler } from "./runner-QX0Z6K1w.js";
54
+ import { y as registerUnhandledRejectionHandler } from "./runner-D5nFF9E6.js";
55
55
  import "./skill-commands-D1hG6Ikz.js";
56
56
  import { t as finalizeInboundContext } from "./inbound-context-Dvqh1Tgb.js";
57
57
  import "./fetch-Dnti0cFs.js";
@@ -8,13 +8,13 @@ import { c as resolveIdentityNamePrefix, l as resolveMessagePrefix, t as createR
8
8
  import "./github-copilot-token-BbsJ0Qbo.js";
9
9
  import { r as formatCliCommand } from "./env-CQ_DQOwT.js";
10
10
  import "./tokens-Cn6drXx2.js";
11
- import { C as shouldComputeCommandAuthorized, S as hasControlCommand, T as normalizeMentionText, _ as enqueueSystemEvent, a as DEFAULT_GROUP_HISTORY_LIMIT, b as formatInboundEnvelope, c as shouldAckReactionForWhatsApp, d as createDedupeCache, f as getReplyFromConfig, g as formatDurationPrecise, h as parseActivationCommand, i as resolveMentionGating, l as dispatchReplyWithBufferedBlockDispatcher, m as normalizeGroupActivation, n as sleepWithAbort, o as buildHistoryContextFromEntries, r as buildPairingReply, s as recordPendingHistoryEntryIfEnabled, t as computeBackoff, v as createInboundDebouncer, w as buildMentionRegexes, x as resolveEnvelopeFormatOptions, y as resolveInboundDebounceMs } from "./pi-embedded-CG4P3hy3.js";
11
+ import { C as shouldComputeCommandAuthorized, S as hasControlCommand, T as normalizeMentionText, _ as enqueueSystemEvent, a as DEFAULT_GROUP_HISTORY_LIMIT, b as formatInboundEnvelope, c as shouldAckReactionForWhatsApp, d as createDedupeCache, f as getReplyFromConfig, g as formatDurationPrecise, h as parseActivationCommand, i as resolveMentionGating, l as dispatchReplyWithBufferedBlockDispatcher, m as normalizeGroupActivation, n as sleepWithAbort, o as buildHistoryContextFromEntries, r as buildPairingReply, s as recordPendingHistoryEntryIfEnabled, t as computeBackoff, v as createInboundDebouncer, w as buildMentionRegexes, x as resolveEnvelopeFormatOptions, y as resolveInboundDebounceMs } from "./pi-embedded-BaNpG0Aq.js";
12
12
  import "./plugins-71oIavrF.js";
13
13
  import { i as logWebSelfId, l as readWebSelfId, n as WA_WEB_AUTH_DIR, p as webAuthExists, r as getWebAuthAgeMs, s as pickWebChannel, t as resolveWhatsAppAccount } from "./accounts-DDEyGwby.js";
14
14
  import "./bindings-DYVakimr.js";
15
15
  import "./send-BuJyyJe7.js";
16
16
  import "./send-D8AIYNR_.js";
17
- import "./deliver-DrC7tG6s.js";
17
+ import "./deliver-B36OzmeP.js";
18
18
  import "./diagnostic-D0xmLpej.js";
19
19
  import "./diagnostic-session-state-C1vRJs5w.js";
20
20
  import "./accounts-8zZqL37v.js";
@@ -22,10 +22,10 @@ import { G as formatLocationText, J as readChannelAllowFromStore, K as toLocatio
22
22
  import "./image-ops-ByaQt43P.js";
23
23
  import "./pi-model-discovery-j5tVLINv.js";
24
24
  import "./message-channel-BQINJQIT.js";
25
- import { Ct as resolveGroupSessionKey, H as loadSessionStore, K as updateLastRoute, U as readSessionUpdatedAt, W as recordSessionMetaFromInbound } from "./pi-embedded-helpers-D8YgtMdl.js";
25
+ import { Ct as resolveGroupSessionKey, H as loadSessionStore, K as updateLastRoute, U as readSessionUpdatedAt, W as recordSessionMetaFromInbound } from "./pi-embedded-helpers-BET359cH.js";
26
26
  import { n as loadConfig } from "./config-BAVNLbja.js";
27
27
  import "./manifest-registry-DWdYdchb.js";
28
- import "./chrome-B14NNyfm.js";
28
+ import "./chrome-BUT--ob3.js";
29
29
  import "./skills-XEbTRNYL.js";
30
30
  import "./redact-1NGYV_8p.js";
31
31
  import "./errors-CPfngF0S.js";
@@ -35,7 +35,7 @@ import { h as resolveChannelGroupRequireMention, m as resolveChannelGroupPolicy
35
35
  import "./accounts-DImOt9jX.js";
36
36
  import { s as resolveStorePath } from "./paths-DkMamAQ-.js";
37
37
  import "./tool-images-ChC2CXaN.js";
38
- import "./image-CKeN0xJL.js";
38
+ import "./image-BHhzdmbq.js";
39
39
  import "./manager-B0BFUVEs.js";
40
40
  import "./gemini-auth-DVcG-42i.js";
41
41
  import "./sqlite-BNh23mUR.js";
@@ -49,7 +49,7 @@ import "./render-B1VqYyvo.js";
49
49
  import "./commands-registry-D9ZzWaEz.js";
50
50
  import "./skill-commands-CkqZdod4.js";
51
51
  import { t as finalizeInboundContext } from "./inbound-context-QOi5vzUt.js";
52
- import { p as registerUnhandledRejectionHandler } from "./runner-COpebDew.js";
52
+ import { p as registerUnhandledRejectionHandler } from "./runner-BVgCl6yZ.js";
53
53
  import "./fetch-DtLn7YU3.js";
54
54
  import { n as recordChannelActivity } from "./channel-activity-D9q-fIPB.js";
55
55
  import { t as convertMarkdownTables } from "./tables-COnZ169v.js";
@@ -0,0 +1,143 @@
1
+ # Email
2
+
3
+ Symi connects to email through two integrations. Pick based on which account you have and what you want to do with it.
4
+
5
+ | Integration | Best for | Setup effort |
6
+ | --------------- | ----------------------------------------------------------------------------------------- | ------------------------------------------ |
7
+ | **Outlook 365** | Microsoft 365 work/school accounts, `outlook.com`, `hotmail.com`, `live.com` | Two minutes — one chat command |
8
+ | **Gmail** | Google Workspace, personal Gmail, and you want incoming mail to auto-create Symi sessions | 15–30 minutes — Google Cloud Pub/Sub setup |
9
+
10
+ ## Outlook 365
11
+
12
+ Ships bundled and auto-enabled. To connect:
13
+
14
+ 1. Open any chat surface (Glass UI, Telegram, WhatsApp, etc.).
15
+ 2. Type `/outlook login`.
16
+ 3. Symi replies with a device-code URL and an 8-character code.
17
+ 4. Open the URL in a browser, sign in with your Microsoft account, paste the code, approve access.
18
+ 5. Credentials are stored at `~/.symi/credentials/outlook.json` (mode 0600) and the tools below are live immediately.
19
+
20
+ ### Tools the agent gains
21
+
22
+ - `outlook_list` — list messages in a folder (`inbox`, `sentitems`, `drafts`, `archive`, `junkemail`). Optional unread filter.
23
+ - `outlook_read` — fetch the full body of a message by id (auto-marks read).
24
+ - `outlook_send` — new message with To, CC, subject, body.
25
+ - `outlook_reply` — reply or reply-all to an existing message id.
26
+ - `outlook_search` — keyword search across subject, body, sender.
27
+ - `outlook_folders` — list folders with unread and total counts.
28
+ - `outlook_move` — move a message to another folder.
29
+
30
+ ### Commands
31
+
32
+ - `/outlook login` — connect (device-code flow).
33
+ - `/outlook status` — show current account, token state, last update timestamp.
34
+ - `/outlook logout` — disconnect and delete stored credentials.
35
+
36
+ ### Limitations
37
+
38
+ - Plain-text body only. No HTML formatting, no attachments.
39
+ - **Pull-only.** Outlook does not create Symi sessions for incoming mail. You have to ask Symi ("any new mail?") and it calls `outlook_list` / `outlook_search`. If you want inbound-triggered sessions, use Gmail instead.
40
+ - No automatic retry on transient Graph 5xx errors — re-running a tool usually succeeds.
41
+
42
+ ## Gmail
43
+
44
+ Gmail inbound uses Google Cloud Pub/Sub so new email triggers a webhook into Symi and creates a `hook:gmail:<id>` session.
45
+
46
+ ### Prerequisites
47
+
48
+ - Access to a **Google Cloud project** — free at [console.cloud.google.com](https://console.cloud.google.com).
49
+ - `gcloud` CLI installed.
50
+ - macOS: `brew install --cask google-cloud-sdk`
51
+ - Linux: see [Google's install guide](https://cloud.google.com/sdk/docs/install).
52
+ - OAuth credentials for the Gmail API, managed via `gogcli`. See the `gog` skill for setup.
53
+ - Symi's webhook endpoint reachable by Google's push service — either a publicly reachable host or a Tailscale serve/funnel.
54
+
55
+ ### Setup
56
+
57
+ 1. **Authenticate gcloud**
58
+
59
+ ```bash
60
+ gcloud auth login
61
+ gcloud config set project <project-id>
62
+ ```
63
+
64
+ 2. **Set up gogcli OAuth**
65
+
66
+ ```bash
67
+ gog auth credentials /path/to/client_secret.json
68
+ gog auth add <your-email> --services gmail
69
+ ```
70
+
71
+ 3. **Create the Pub/Sub topic**
72
+
73
+ ```bash
74
+ gcloud pubsub topics create symi-gmail
75
+ ```
76
+
77
+ 4. **Grant Gmail permission to publish to the topic**
78
+
79
+ ```bash
80
+ gcloud pubsub topics add-iam-policy-binding symi-gmail \
81
+ --member=serviceAccount:gmail-api-push@system.gserviceaccount.com \
82
+ --role=roles/pubsub.publisher
83
+ ```
84
+
85
+ 5. **Create the push subscription** (points at Symi's webhook)
86
+
87
+ ```bash
88
+ gcloud pubsub subscriptions create symi-gmail-sub \
89
+ --topic=symi-gmail \
90
+ --push-endpoint=<SYMI_WEBHOOK_URL>/gmail-pubsub
91
+ ```
92
+
93
+ 6. **Register the Gmail watch** on the inbox label. The helpers in `src/hooks/gmail-setup-utils.ts` can do this from the gateway, or call the Gmail API's `users.watch` method directly with `curl`.
94
+
95
+ 7. **Add `hooks.gmail` to `~/.symi/symi.json`**:
96
+
97
+ ```json
98
+ {
99
+ "hooks": {
100
+ "gmail": {
101
+ "account": "user@example.com",
102
+ "label": "INBOX",
103
+ "topic": "projects/<project-id>/topics/symi-gmail",
104
+ "subscription": "projects/<project-id>/subscriptions/symi-gmail-sub",
105
+ "pushToken": "<random-shared-secret>",
106
+ "hookUrl": "http://127.0.0.1:8788/gmail-pubsub",
107
+ "includeBody": true,
108
+ "maxBytes": 20480,
109
+ "renewEveryMinutes": 720,
110
+ "serve": { "bind": "127.0.0.1", "port": 8788, "path": "/gmail-pubsub" },
111
+ "tailscale": { "mode": "off" }
112
+ }
113
+ }
114
+ }
115
+ ```
116
+
117
+ 8. **Restart the gateway** to pick up the new hook config. `hooks.gmail` is not hot-reloaded.
118
+
119
+ 9. **Verify** — send a test email. Google publishes to the topic → Pub/Sub pushes to Symi's endpoint → a `hook:gmail:<id>` session appears in the Glass UI feed.
120
+
121
+ ### Config field reference
122
+
123
+ - `account` — the Gmail address being watched.
124
+ - `label` — Gmail label/folder to watch. Default `INBOX`.
125
+ - `topic` / `subscription` — fully-qualified Pub/Sub resource names.
126
+ - `pushToken` — shared secret Symi verifies on incoming push requests.
127
+ - `hookUrl` — URL the push subscription posts to. Must match `serve.bind` + `serve.port` + `serve.path` (or a Tailscale serve/funnel exposing them).
128
+ - `includeBody` — include the email body in the prompt. `maxBytes` truncates oversized emails.
129
+ - `renewEveryMinutes` — Gmail `watch` expires after ~7 days. Default 720 (12 hours) re-registers well ahead.
130
+ - `tailscale.mode` — `"off"` if Symi is publicly reachable, `"serve"` for a private tailnet webhook, `"funnel"` for a Tailscale-exposed public endpoint.
131
+ - `allowUnsafeExternalContent` — leave unset. Setting `true` disables the external-content safety wrapper on email content.
132
+
133
+ ### Limitations
134
+
135
+ - Inbound only works while the Gmail watch is live. If `renewEveryMinutes` lapses, the Pub/Sub subscription fails, or the IAM binding is removed, mail stops arriving.
136
+ - Outgoing mail goes through the reply path of whichever session handles the inbound — there is no native Gmail send tool. For outgoing from scratch, Outlook is simpler.
137
+ - Very large messages are truncated at `maxBytes` so the prompt stays usable.
138
+
139
+ ## Which one should you pick?
140
+
141
+ - **Send and read on demand from a Microsoft account** — Outlook.
142
+ - **Incoming mail auto-creates sessions** — Gmail (only option today).
143
+ - **You want both send and auto-receive in Outlook** — not available yet; push for Outlook is not implemented.
@@ -0,0 +1,80 @@
1
+ # Microsoft Teams
2
+
3
+ Symi connects to Microsoft Teams via the **Bot Framework** — you register a bot in Azure, configure a messaging endpoint, and the Symi gateway receives activities over HTTPS.
4
+
5
+ ## Prerequisites
6
+
7
+ - An Azure account with permission to create an Azure Bot resource (free tier works for development).
8
+ - An Entra ID (Azure AD) tenant. Can be your work tenant or a personal "Microsoft 365 Developer Program" tenant.
9
+ - A publicly reachable HTTPS endpoint for Symi. During development you can use a Tailscale funnel or ngrok; for production, any TLS-terminated host works.
10
+ - Teams admin approval to sideload or publish the bot in your org (the sideload path is simplest for personal/dev use).
11
+
12
+ ## Setup
13
+
14
+ 1. **Create the Azure Bot**
15
+ In the Azure Portal: _Create a resource_ → search _Azure Bot_ → Create. Choose:
16
+ - Bot handle (e.g., `symi-bot`)
17
+ - Subscription + resource group
18
+ - Pricing tier (F0 Free is fine)
19
+ - Microsoft App ID type: _Multi Tenant_ (easiest) or _Single Tenant_
20
+ - Creation type: _Create new Microsoft App ID_
21
+
22
+ 2. **Grab credentials**
23
+ After creation → _Configuration_ tab. Note:
24
+ - _Microsoft App ID_ (`appId`)
25
+ - _Tenant ID_ (`tenantId`) — shown if Single Tenant
26
+ _Manage Password_ → generate a client secret. Copy the secret value **immediately** — Azure only shows it once. That's your `appPassword`.
27
+
28
+ 3. **Set the messaging endpoint**
29
+ Same _Configuration_ tab → _Messaging endpoint_ → enter `https://<your-symi-host>/msteams/messages`. Save.
30
+
31
+ 4. **Enable the Teams channel**
32
+ Left sidebar → _Channels_ → _Microsoft Teams_ → _Apply_. Accept the terms.
33
+
34
+ 5. **Add to `~/.symi/symi.json`**
35
+
36
+ ```json
37
+ {
38
+ "channels": {
39
+ "msteams": {
40
+ "appId": "...",
41
+ "appPassword": "...",
42
+ "tenantId": "..."
43
+ }
44
+ }
45
+ }
46
+ ```
47
+
48
+ Omit `tenantId` if the bot is multi-tenant.
49
+
50
+ 6. **Restart the gateway** to load the new config.
51
+
52
+ ## Install the bot in Teams
53
+
54
+ Azure's bot registration isn't automatically visible inside Teams — you need an app package.
55
+
56
+ 1. Go to [Teams Developer Portal](https://dev.teams.microsoft.com/) → _Apps_ → _New app_.
57
+ 2. Under _Basic information_ fill in the app name, descriptions, etc.
58
+ 3. Under _App features_ → _Bot_ → select _Enter a bot ID_ and paste your `appId` from step 2.
59
+ 4. Scope: _Personal_, _Team_, and/or _Group Chat_ depending on where you want to use it.
60
+ 5. _Preview in Teams_ → install to yourself or your team.
61
+
62
+ For organization-wide rollout, submit the app via the Teams admin center's custom app catalog.
63
+
64
+ ## Pairing
65
+
66
+ Like Slack, Teams DMs default to pairing mode — first-time users receive a pairing prompt so unauthorized people can't invoke the agent. Configure in `channels.msteams.pairing` (see full channel docs).
67
+
68
+ ## Troubleshooting
69
+
70
+ - **Bot responds in Azure test but not in Teams** — Teams channel is not enabled yet (step 4), or the app package wasn't installed to Teams (above).
71
+ - **401 Unauthorized on incoming activities** — `appId` / `appPassword` mismatch, or `tenantId` set but the bot is actually multi-tenant (remove it).
72
+ - **Bot installed but silent** — check that the messaging endpoint is publicly reachable over HTTPS. Azure must be able to POST to it. Test with `curl -X POST https://<your-host>/msteams/messages` — you should see a 401 or 400 from Symi (meaning the route exists), not a connection failure.
73
+ - **Secret expired** — client secrets in Entra ID expire (default 2 years). Generate a new one in _Manage Password_ and update `appPassword`.
74
+
75
+ ## Limitations
76
+
77
+ - Adaptive Cards beyond simple text are experimental.
78
+ - File attachments and inline images are not fully supported in all flows.
79
+ - Meeting and call actions (join, transcribe, etc.) are out of scope — Teams voice is handled separately.
80
+ - Each bot is tied to a specific Azure tenant's App ID — you can't share one bot registration across disconnected tenants without using multi-tenant mode.
@@ -0,0 +1,91 @@
1
+ # Slack
2
+
3
+ Symi connects to Slack through a Slack App you create in your workspace. Default mode is **Socket Mode** (no public webhook required); HTTP Events API mode is also supported.
4
+
5
+ ## Prerequisites
6
+
7
+ - A Slack workspace where you can create and install an app. Workspace admin approval may be required depending on org policy.
8
+ - The Symi gateway running locally or on a reachable host. Socket Mode does not require the gateway to be publicly reachable.
9
+
10
+ ## Socket Mode setup (recommended)
11
+
12
+ 1. **Create the Slack app**
13
+ Go to [api.slack.com/apps](https://api.slack.com/apps) → _Create New App_ → _From scratch_. Name it (e.g., "Symi"), pick your workspace.
14
+
15
+ 2. **Enable Socket Mode**
16
+ Left sidebar → _Socket Mode_ → toggle on. Generate an app-level token with the `connections:write` scope — this is your `appToken` (starts with `xapp-`).
17
+
18
+ 3. **Add bot scopes**
19
+ Left sidebar → _OAuth & Permissions_ → _Bot Token Scopes_. Add at minimum:
20
+ - `chat:write` — send messages
21
+ - `im:history` — read DMs
22
+ - `im:read` — list DMs
23
+ - `users:read` — look up user info
24
+ - `app_mentions:read` — respond to @mentions in channels
25
+ - `channels:history` — read channel messages (for channel integrations)
26
+
27
+ 4. **Subscribe to events**
28
+ Left sidebar → _Event Subscriptions_ → toggle on. Under _Subscribe to bot events_ add:
29
+ - `message.im` — direct messages
30
+ - `app_mention` — @mentions in channels
31
+ - `message.channels` (optional) — messages in public channels the bot is in
32
+
33
+ 5. **Install to workspace**
34
+ Left sidebar → _Install App_ → _Install to Workspace_. Approve the scopes. Copy the bot token that appears (starts with `xoxb-`) — this is your `botToken`.
35
+
36
+ 6. **Add to `~/.symi/symi.json`**
37
+
38
+ ```json
39
+ {
40
+ "channels": {
41
+ "slack": {
42
+ "botToken": "xoxb-...",
43
+ "appToken": "xapp-...",
44
+ "mode": "socket"
45
+ }
46
+ }
47
+ }
48
+ ```
49
+
50
+ 7. **Restart the gateway** to pick up the config. You should see `channel=slack socket connected` in the logs.
51
+
52
+ ## HTTP Events API mode
53
+
54
+ Use this when your Symi host is publicly reachable (or via a Tailscale funnel) and you'd rather not hold a WebSocket open.
55
+
56
+ 1. Complete steps 1, 3, and 4 above.
57
+ 2. _Event Subscriptions_ → _Request URL_ → enter `https://<your-symi-host>/slack/events`. Slack will verify.
58
+ 3. `~/.symi/symi.json`:
59
+ ```json
60
+ {
61
+ "channels": {
62
+ "slack": {
63
+ "botToken": "xoxb-...",
64
+ "signingSecret": "<from-Basic-Information>",
65
+ "mode": "http"
66
+ }
67
+ }
68
+ }
69
+ ```
70
+ 4. Restart the gateway.
71
+
72
+ ## Pairing (DMs)
73
+
74
+ By default, Slack DMs require pairing. The first time a user DMs the bot, they'll receive a pairing code prompt. This prevents unauthorized users from invoking your agent. Configure pairing behaviour in `channels.slack.pairing` (see full channel docs for the exact schema).
75
+
76
+ ## Slash commands
77
+
78
+ Symi exposes a catalog of slash commands in Slack (`/symi`, `/new`, `/outlook login`, etc.) once the bot is installed. The exact command set depends on which plugins are enabled in your config.
79
+
80
+ ## Troubleshooting
81
+
82
+ - **"not_in_channel" when sending** — invite the bot to the channel first: `/invite @Symi`.
83
+ - **No events arriving in Socket Mode** — verify `appToken` has `connections:write`, and that the app is installed (not just created).
84
+ - **HTTP 401 on events** — signing secret mismatch. Re-copy from _Basic Information_ → _Signing Secret_.
85
+ - **DMs silently ignored** — check pairing status. New users must complete pairing before DMs flow to the agent.
86
+
87
+ ## Limitations
88
+
89
+ - File uploads/attachments are not yet fully handled in all flows — text messages are the primary supported shape.
90
+ - Reaction-based commands depend on the workspace's reaction configuration and Slack plan tier.
91
+ - Threaded messages are supported but require the bot to be in the channel where the thread lives.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/bluebubbles",
3
- "version": "2.7.8",
3
+ "version": "2.7.9",
4
4
  "description": "Symi BlueBubbles channel plugin",
5
5
  "type": "module",
6
6
  "devDependencies": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/copilot-proxy",
3
- "version": "2.7.8",
3
+ "version": "2.7.9",
4
4
  "private": true,
5
5
  "description": "Symi Copilot Proxy provider plugin",
6
6
  "type": "module",