@symerian/symi 2.8.10 → 2.8.12

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 (177) hide show
  1. package/dist/{agents-BbVxJTp2.js → agents-OAonMxYV.js} +4 -4
  2. package/dist/{agents.config-LE2JxgiS.js → agents.config-BIhaDwT2.js} +1 -1
  3. package/dist/{agents.config-DckCExUX.js → agents.config-DGu_K5xz.js} +1 -1
  4. package/dist/{audio-preflight-NdNUAZ0y.js → audio-preflight-C6vpFnOG.js} +4 -4
  5. package/dist/{audio-preflight-rjCWpcfE.js → audio-preflight-Cb-T0r6e.js} +4 -4
  6. package/dist/{audit-CNU0I_UT.js → audit-Bi9Je9FZ.js} +1 -1
  7. package/dist/{audit-F5zQ_Wk9.js → audit-Oa5dsn5p.js} +1 -1
  8. package/dist/{auth-choice-j1FEYnxv.js → auth-choice-BvPX7B4c.js} +1 -1
  9. package/dist/{auth-choice-DnKOB8Gs.js → auth-choice-DDzWns1k.js} +1 -1
  10. package/dist/{banner-BFr8n0of.js → banner-BFdiq-O5.js} +1 -1
  11. package/dist/build-info.json +3 -3
  12. package/dist/bundled/boot-md/handler.js +7 -7
  13. package/dist/bundled/session-memory/handler.js +7 -7
  14. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  15. package/dist/{channel-options-DrBxsMlw.js → channel-options-DTqUB0OP.js} +1 -1
  16. package/dist/{channel-options-BtmFCQOB.js → channel-options-tfnOGSNF.js} +1 -1
  17. package/dist/{channel-web-YgdajAXX.js → channel-web-CcUXobcu.js} +1 -1
  18. package/dist/{channels-cli-fYbw-4gz.js → channels-cli-BcE5tHIr.js} +7 -7
  19. package/dist/{channels-cli-ChS_nQcP.js → channels-cli-CmShA-wJ.js} +7 -7
  20. package/dist/{chrome-BUT--ob3.js → chrome-B14NNyfm.js} +7 -7
  21. package/dist/{chrome-C08Z0XAa.js → chrome-ROtrXlNs.js} +7 -7
  22. package/dist/{cli-CA4qcSFY.js → cli-BxoD2wzk.js} +4 -4
  23. package/dist/{cli-NfoZJEPh.js → cli-CKG2iAr3.js} +4 -4
  24. package/dist/{command-registry-B6spVZMd.js → command-registry-D1Le-Fmh.js} +10 -10
  25. package/dist/{completion-cli-VQrV_JN9.js → completion-cli-D9pC-ttw.js} +2 -2
  26. package/dist/{completion-cli-DKoZNVbW.js → completion-cli-DgiFjSGS.js} +1 -1
  27. package/dist/{config-cli-CgC3xSoL.js → config-cli-5mFA0UDP.js} +1 -1
  28. package/dist/{config-cli-Dm2QMcwn.js → config-cli-C_uZQsTl.js} +1 -1
  29. package/dist/{configure-COCCg2tV.js → configure-BJcy7wXm.js} +3 -3
  30. package/dist/{configure-DiDXmX3E.js → configure-DuRTFCuW.js} +3 -3
  31. package/dist/{deliver-qUx-eLKt.js → deliver-B0OUq6RP.js} +1 -1
  32. package/dist/{deliver-B_Q_nWJV.js → deliver-D0bWiRCg.js} +1 -1
  33. package/dist/{doctor-completion-CPFKFTc-.js → doctor-completion-DCRTHpiY.js} +1 -1
  34. package/dist/{doctor-completion-BR5k35Qj.js → doctor-completion-sQVhKKei.js} +1 -1
  35. package/dist/entry.js +1 -1
  36. package/dist/extensionAPI.js +7 -7
  37. package/dist/{gateway-cli-BJH2K8fn.js → gateway-cli-C3ujhxO0.js} +13 -13
  38. package/dist/{gateway-cli-BF1-DFEf.js → gateway-cli-C_MT4JFm.js} +13 -13
  39. package/dist/{glass-ui-ws-B7j7iTDg.js → glass-ui-ws-B7zRY2BL.js} +11 -11
  40. package/dist/{glass-ui-ws-DyoHQW3O.js → glass-ui-ws-ColAiWUr.js} +11 -11
  41. package/dist/{health-D-0xOxV8.js → health-C12hy3Ao.js} +1 -1
  42. package/dist/{health-BAjSATWA.js → health-vKJZ7iJR.js} +1 -1
  43. package/dist/{hooks-cli-ZZaM2xfC.js → hooks-cli-CdUQvj8s.js} +5 -5
  44. package/dist/{hooks-cli-BaoCFIbQ.js → hooks-cli-fCPl5hur.js} +5 -5
  45. package/dist/{image-C6rCON9L.js → image-BuVL0jHI.js} +1 -1
  46. package/dist/{image-tzIqIuKx.js → image-MNvheU8U.js} +1 -1
  47. package/dist/index.js +9 -9
  48. package/dist/llm-slug-generator.js +7 -7
  49. package/dist/{manager-BpvcDr-7.js → manager-BJvYQ7xP.js} +1 -1
  50. package/dist/{manager-BxJ9BhQe.js → manager-CLrJn9l-.js} +1 -1
  51. package/dist/{manager-B5JWZL0E.js → manager-DHRBy5oR.js} +1 -1
  52. package/dist/{manager-DUuPE1N1.js → manager-Df_ZdrNG.js} +1 -1
  53. package/dist/{memory-cli-r-ulsUBa.js → memory-cli-BgJciaHC.js} +3 -3
  54. package/dist/{memory-cli-BQZ0rTKC.js → memory-cli-T-a5-lqZ.js} +3 -3
  55. package/dist/{models-B1__62Qo.js → models-BXXV_sZU.js} +2 -2
  56. package/dist/{models-cli-BGpB4PAp.js → models-cli-BI-DyItH.js} +5 -5
  57. package/dist/{models-cli-Ch-4PBud.js → models-cli-Bs6JAGq-.js} +6 -6
  58. package/dist/{onboard-D2NC88Mp.js → onboard-Czi_FRdi.js} +2 -2
  59. package/dist/{onboard-D_2-lyyt.js → onboard-DKDCWveE.js} +2 -2
  60. package/dist/{onboard-channels-CYlZtWF6.js → onboard-channels-BUCYZF02.js} +1 -1
  61. package/dist/{onboard-channels-BgA4i9TU.js → onboard-channels-sTuhQBVu.js} +1 -1
  62. package/dist/{onboarding-D7N2AfyJ.js → onboarding-Bgx0qZhA.js} +3 -3
  63. package/dist/{onboarding-uVLsv2Sd.js → onboarding-CokRRVEi.js} +3 -3
  64. package/dist/{onboarding.finalize-CTDv0xwp.js → onboarding.finalize-BCv5jB0d.js} +9 -9
  65. package/dist/{onboarding.finalize-DEjTjgRt.js → onboarding.finalize-BzEKyraI.js} +8 -8
  66. package/dist/{pi-embedded-HSRJqesT.js → pi-embedded-DXY7TLac.js} +27 -20
  67. package/dist/{pi-embedded-helpers-P13adotN.js → pi-embedded-helpers-D1_Sab0M.js} +4 -4
  68. package/dist/{pi-embedded-helpers-DjSdA5BG.js → pi-embedded-helpers-TcYQOZAY.js} +4 -4
  69. package/dist/{pi-tools.policy-BPVIDK7o.js → pi-tools.policy-BZrM6a-w.js} +8 -1
  70. package/dist/{pi-tools.policy-dbCkhLDL.js → pi-tools.policy-QIVWAVVI.js} +8 -1
  71. package/dist/{plugin-registry-Chvg6kT0.js → plugin-registry-B2cpTmJz.js} +1 -1
  72. package/dist/{plugin-registry-DEKq3ti3.js → plugin-registry-CyrsJDyE.js} +1 -1
  73. package/dist/plugin-sdk/{channel-web-CfaamthT.js → channel-web-t6enTxNE.js} +1 -1
  74. package/dist/plugin-sdk/index.js +3 -3
  75. package/dist/plugin-sdk/{manager-B3jEviU1.js → manager-LRE7zEk2.js} +1 -1
  76. package/dist/plugin-sdk/{reply-DWwxgBtH.js → reply-JypoGhql.js} +13 -6
  77. package/dist/plugin-sdk/{synthesis-C_u94H_P.js → synthesis-_WpVyZKx.js} +2 -2
  78. package/dist/plugin-sdk/{web-DFvYfej5.js → web-BTVj4kiQ.js} +3 -3
  79. package/dist/{plugins-cli-QZlpLtva.js → plugins-cli-B-zoQyqU.js} +5 -5
  80. package/dist/{plugins-cli-Cd99p333.js → plugins-cli-DJwRd3EZ.js} +5 -5
  81. package/dist/{program-viRCc6Je.js → program-H7h6Iqrq.js} +10 -10
  82. package/dist/{program-context-Dun-c3nf.js → program-context-BgecQAHU.js} +19 -19
  83. package/dist/{prompt-select-styled-DVLibGeR.js → prompt-select-styled-BDN2o35i.js} +6 -6
  84. package/dist/{prompt-select-styled-W2G26g34.js → prompt-select-styled-BglmD29e.js} +6 -6
  85. package/dist/{provider-auth-helpers-KFQclkJT.js → provider-auth-helpers-BGIgr7xM.js} +1 -1
  86. package/dist/{provider-auth-helpers-DCEiDG3X.js → provider-auth-helpers-MfKmTeLY.js} +1 -1
  87. package/dist/{push-apns-tfhjtI57.js → push-apns-IcfSTzfr.js} +1 -1
  88. package/dist/{push-apns-CB_8WzQ9.js → push-apns-b6bH1EBC.js} +1 -1
  89. package/dist/{pw-ai-CQtaPvM8.js → pw-ai-40Jf9QIb.js} +1 -1
  90. package/dist/{pw-ai-CeWN4iD9.js → pw-ai-DWkC5eGA.js} +1 -1
  91. package/dist/{register.agent--QTUjLu9.js → register.agent-BgyETrrj.js} +8 -8
  92. package/dist/{register.agent-i2wi1-vo.js → register.agent-ChwMSIC4.js} +9 -9
  93. package/dist/{register.configure-B9JysEK8.js → register.configure-Bm4CvoLF.js} +9 -9
  94. package/dist/{register.configure-ByJcC9t4.js → register.configure-DH3L2tqW.js} +9 -9
  95. package/dist/{register.maintenance-DqJL_QWT.js → register.maintenance-BbOBw1eI.js} +10 -10
  96. package/dist/{register.maintenance-BGiYxRYm.js → register.maintenance-CAyHUEzP.js} +11 -11
  97. package/dist/{register.message-G6-UeGON.js → register.message-DQ3MOWFE.js} +5 -5
  98. package/dist/{register.message-DT_TqsFl.js → register.message-DheqsiR0.js} +5 -5
  99. package/dist/{register.onboard-CfySx27T.js → register.onboard-CxqR4S1C.js} +7 -7
  100. package/dist/{register.onboard-848EXgTB.js → register.onboard-DOJkUhoY.js} +7 -7
  101. package/dist/{register.setup-B40A19lI.js → register.setup-48YBHzMZ.js} +7 -7
  102. package/dist/{register.setup-C-NYSAGY.js → register.setup-zdrIJA2P.js} +7 -7
  103. package/dist/{register.status-health-sessions-B03EDfwZ.js → register.status-health-sessions-CeT5pVXb.js} +7 -7
  104. package/dist/{register.status-health-sessions-BACExyrd.js → register.status-health-sessions-CimrhScH.js} +7 -7
  105. package/dist/{register.subclis-kF8KnNuq.js → register.subclis-B-zh940S.js} +10 -10
  106. package/dist/{reply-C5VU6T-F.js → reply-CUR4xpYM.js} +5 -5
  107. package/dist/{run-main-BqpvNq8c.js → run-main-CW_kj5Lj.js} +18 -18
  108. package/dist/{runner-Dpjulwnm.js → runner-DFuAePEr.js} +1 -1
  109. package/dist/{runner-D633VT13.js → runner-ecX1WzDt.js} +1 -1
  110. package/dist/{security-cli-ChPAyhec.js → security-cli-BpnzAB5_.js} +2 -2
  111. package/dist/{security-cli-Cq56CAVI.js → security-cli-D9WEiEjD.js} +2 -2
  112. package/dist/{server-methods-DjB0hxeW.js → server-methods-C1h0A5n0.js} +39 -15
  113. package/dist/{server-methods-CkLzZq0Y.js → server-methods-C4id-H_X.js} +39 -15
  114. package/dist/{server-node-events-BM-APRHy.js → server-node-events-BPZEGV_N.js} +5 -5
  115. package/dist/{server-node-events-ZgCh4sCg.js → server-node-events-CD2yDaEj.js} +5 -5
  116. package/dist/{status-WMQ2CpbK.js → status-Cb932Vl4.js} +4 -4
  117. package/dist/{status-C_gwgMp4.js → status-DCeW2a07.js} +4 -4
  118. package/dist/{status-BhQk3JSz.js → status-DvHD1cnq.js} +1 -1
  119. package/dist/{status-Nf53o222.js → status-_xBnHTlx.js} +1 -1
  120. package/dist/{subagent-registry-BCWbFTGF.js → subagent-registry-BKuL9PdW.js} +5 -5
  121. package/dist/{synthesis-VfWtSYrv.js → synthesis-BUqDGjlc.js} +7 -7
  122. package/dist/{synthesis-CJIAYDoU.js → synthesis-C9RputIi.js} +4 -4
  123. package/dist/{synthesis-CWsrtigA.js → synthesis-DOiTUsXQ.js} +7 -7
  124. package/dist/{synthesis-DIKBPZgB.js → synthesis-Ia9egx87.js} +4 -4
  125. package/dist/{unified-runner-yPBTU4xt.js → unified-runner-CVItnwwP.js} +27 -20
  126. package/dist/{update-cli-BCFHfhUW.js → update-cli-ChEABesZ.js} +11 -11
  127. package/dist/{update-cli-B_Mxicbw.js → update-cli-D6ax3jSX.js} +10 -10
  128. package/dist/{update-runner-DG5x7t--.js → update-runner-B2EY9BWM.js} +1 -1
  129. package/dist/{update-runner-BQJSshFU.js → update-runner-CWG6GxKs.js} +1 -1
  130. package/dist/{web-TVVa5EDS.js → web-CpSE67Jp.js} +5 -5
  131. package/dist/{web-Dpfsnk-b.js → web-D6PPeyG7.js} +4 -4
  132. package/dist/{web-eJWNRwV5.js → web-DMdb2p-h.js} +7 -7
  133. package/dist/{web-D9_FatXM.js → web-z-yQ8riS.js} +7 -7
  134. package/docs/reference/templates/AGENTS.md +14 -0
  135. package/extensions/bluebubbles/package.json +1 -1
  136. package/extensions/copilot-proxy/package.json +1 -1
  137. package/extensions/diagnostics-otel/package.json +1 -1
  138. package/extensions/discord/package.json +1 -1
  139. package/extensions/feishu/package.json +1 -1
  140. package/extensions/google-antigravity-auth/package.json +1 -1
  141. package/extensions/google-gemini-cli-auth/package.json +1 -1
  142. package/extensions/googlechat/package.json +1 -1
  143. package/extensions/imessage/package.json +1 -1
  144. package/extensions/irc/package.json +1 -1
  145. package/extensions/learning-loop/package.json +1 -1
  146. package/extensions/line/package.json +1 -1
  147. package/extensions/llm-task/package.json +1 -1
  148. package/extensions/matrix/CHANGELOG.md +12 -0
  149. package/extensions/matrix/package.json +1 -1
  150. package/extensions/mattermost/package.json +1 -1
  151. package/extensions/memory-core/package.json +1 -1
  152. package/extensions/memory-lancedb/package.json +1 -1
  153. package/extensions/minimax-portal-auth/package.json +1 -1
  154. package/extensions/msteams/CHANGELOG.md +12 -0
  155. package/extensions/msteams/package.json +1 -1
  156. package/extensions/nextcloud-talk/package.json +1 -1
  157. package/extensions/nostr/CHANGELOG.md +12 -0
  158. package/extensions/nostr/package.json +1 -1
  159. package/extensions/open-prose/package.json +1 -1
  160. package/extensions/outlook/index.ts +81 -7
  161. package/extensions/outlook/package.json +1 -1
  162. package/extensions/outlook/src/store.ts +118 -11
  163. package/extensions/pipeline/package.json +1 -1
  164. package/extensions/signal/package.json +1 -1
  165. package/extensions/slack/package.json +1 -1
  166. package/extensions/telegram/package.json +1 -1
  167. package/extensions/tlon/package.json +1 -1
  168. package/extensions/twitch/CHANGELOG.md +12 -0
  169. package/extensions/twitch/package.json +1 -1
  170. package/extensions/voice-call/CHANGELOG.md +12 -0
  171. package/extensions/voice-call/package.json +1 -1
  172. package/extensions/whatsapp/package.json +1 -1
  173. package/extensions/zalo/CHANGELOG.md +12 -0
  174. package/extensions/zalo/package.json +1 -1
  175. package/extensions/zalouser/CHANGELOG.md +12 -0
  176. package/extensions/zalouser/package.json +1 -1
  177. package/package.json +1 -1
@@ -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 hasControlCommand, E as normalizeMentionText, S as resolveEnvelopeFormatOptions, T as buildMentionRegexes, _ as formatDurationPrecise, a as DEFAULT_GROUP_HISTORY_LIMIT, b as resolveInboundDebounceMs, c as shouldAckReactionForWhatsApp, d as createDedupeCache, f as getReplyFromConfig, g as parseActivationCommand, h as normalizeGroupActivation, i as resolveMentionGating, l as dispatchReplyWithBufferedBlockDispatcher, n as sleepWithAbort, o as buildHistoryContextFromEntries, r as buildPairingReply, s as recordPendingHistoryEntryIfEnabled, t as computeBackoff, v as enqueueSystemEvent, w as shouldComputeCommandAuthorized, x as formatInboundEnvelope, y as createInboundDebouncer } from "./pi-embedded-HSRJqesT.js";
11
+ import { C as hasControlCommand, E as normalizeMentionText, S as resolveEnvelopeFormatOptions, T as buildMentionRegexes, _ as formatDurationPrecise, a as DEFAULT_GROUP_HISTORY_LIMIT, b as resolveInboundDebounceMs, c as shouldAckReactionForWhatsApp, d as createDedupeCache, f as getReplyFromConfig, g as parseActivationCommand, h as normalizeGroupActivation, i as resolveMentionGating, l as dispatchReplyWithBufferedBlockDispatcher, n as sleepWithAbort, o as buildHistoryContextFromEntries, r as buildPairingReply, s as recordPendingHistoryEntryIfEnabled, t as computeBackoff, v as enqueueSystemEvent, w as shouldComputeCommandAuthorized, x as formatInboundEnvelope, y as createInboundDebouncer } from "./pi-embedded-DXY7TLac.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-BaBv1rAU.js";
16
16
  import "./send-DLVrnezL.js";
17
- import "./deliver-B_Q_nWJV.js";
17
+ import "./deliver-D0bWiRCg.js";
18
18
  import "./diagnostic-Kbl70eCP.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-DjSdA5BG.js";
25
+ import { Ct as resolveGroupSessionKey, H as loadSessionStore, K as updateLastRoute, U as readSessionUpdatedAt, W as recordSessionMetaFromInbound } from "./pi-embedded-helpers-TcYQOZAY.js";
26
26
  import { n as loadConfig } from "./config-BAVNLbja.js";
27
27
  import "./manifest-registry-DWdYdchb.js";
28
- import "./chrome-BUT--ob3.js";
28
+ import "./chrome-B14NNyfm.js";
29
29
  import "./skills-XEbTRNYL.js";
30
30
  import "./redact-1NGYV_8p.js";
31
31
  import "./errors-CPfngF0S.js";
@@ -35,8 +35,8 @@ 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-tzIqIuKx.js";
39
- import "./manager-B5JWZL0E.js";
38
+ import "./image-MNvheU8U.js";
39
+ import "./manager-DHRBy5oR.js";
40
40
  import "./gemini-auth-DVcG-42i.js";
41
41
  import "./retry-QGp0jvVi.js";
42
42
  import "./sqlite-Bo4pHfp8.js";
@@ -49,7 +49,7 @@ import "./render-qcqmrHse.js";
49
49
  import "./commands-registry-ke7KirEH.js";
50
50
  import "./skill-commands-CSF7Poen.js";
51
51
  import { t as finalizeInboundContext } from "./inbound-context-CgGv6nTy.js";
52
- import { p as registerUnhandledRejectionHandler } from "./runner-Dpjulwnm.js";
52
+ import { p as registerUnhandledRejectionHandler } from "./runner-DFuAePEr.js";
53
53
  import "./fetch-WLZaC77l.js";
54
54
  import { n as recordChannelActivity } from "./channel-activity-C-6tM-GK.js";
55
55
  import { t as convertMarkdownTables } from "./tables-BE0lT1IV.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-yPBTU4xt.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-CVItnwwP.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-P13adotN.js";
13
+ import { Ct as resolveGroupSessionKey, G as updateLastRoute, H as loadSessionStore, U as readSessionUpdatedAt, W as recordSessionMetaFromInbound } from "./pi-embedded-helpers-D1_Sab0M.js";
14
14
  import { n as loadConfig } from "./config-BkZ9HOKT.js";
15
15
  import "./manifest-registry-CBCGTsIb.js";
16
- import "./chrome-C08Z0XAa.js";
16
+ import "./chrome-ROtrXlNs.js";
17
17
  import "./frontmatter-CTR5f_Ez.js";
18
18
  import "./skills-CXxrn_e2.js";
19
19
  import "./redact-BDMXB06K.js";
@@ -31,16 +31,16 @@ import "./bindings-BsHoBLIE.js";
31
31
  import "./send-BKo1T3HF.js";
32
32
  import "./send-C0QjmPaf.js";
33
33
  import "./tool-images-SqqWIT22.js";
34
- import "./deliver-qUx-eLKt.js";
34
+ import "./deliver-B0OUq6RP.js";
35
35
  import "./diagnostic-BUcR3Meg.js";
36
36
  import "./diagnostic-session-state-Zw87xFym.js";
37
- import "./image-C6rCON9L.js";
37
+ import "./image-BuVL0jHI.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-Bb4it0te.js";
41
41
  import "./pi-model-discovery-CuZX_Q4t.js";
42
42
  import { c as resolveIdentityNamePrefix, l as resolveMessagePrefix, t as createReplyPrefixOptions } from "./reply-prefix-CvEIl6_d.js";
43
- import "./manager-DUuPE1N1.js";
43
+ import "./manager-Df_ZdrNG.js";
44
44
  import "./gemini-auth-BefM10YB.js";
45
45
  import "./retry-B-y5suGA.js";
46
46
  import "./sqlite-BN_hIcmu.js";
@@ -51,7 +51,7 @@ import { t as getAgentScopedMediaLocalRoots } from "./local-roots-ClipCZ9s.js";
51
51
  import { a as loadWebMedia } from "./ir-7tMVY7D_.js";
52
52
  import "./render-D1xvLuGo.js";
53
53
  import "./commands-registry-DxbSTLNQ.js";
54
- import { y as registerUnhandledRejectionHandler } from "./runner-D633VT13.js";
54
+ import { y as registerUnhandledRejectionHandler } from "./runner-ecX1WzDt.js";
55
55
  import "./skill-commands-DG2lcozb.js";
56
56
  import { t as finalizeInboundContext } from "./inbound-context-DZQU0r3y.js";
57
57
  import "./fetch-ClslA6GS.js";
@@ -59,6 +59,20 @@ Capture what matters. Decisions, context, things to remember. Skip the secrets u
59
59
  - When you make a mistake → document it so future-you doesn't repeat it
60
60
  - **Text > Brain** 📝
61
61
 
62
+ ### 🔌 Runtime Connection State — Don't Trust Memory Files
63
+
64
+ Memory files (MEMORY.md, memory/YYYY-MM-DD.md, memory/symi-core.md, memory/symi-beliefs.md) record **historical** observations. Connection state for channels (Outlook, Gmail, Slack, Telegram, Discord, Signal, WhatsApp, Matrix, etc.) is **runtime state** — it can change between one turn and the next without any observation being written.
65
+
66
+ When answering "am I connected to X?" questions:
67
+
68
+ - **Trust the bracketed `[Channel]` block** at the top of the system prompt. It's rebuilt every turn from the live plugin state. Examples: `[Outlook 365] Connected as …`, `[Outlook 365] Last seen connected as … but … expired`, `[Outlook 365] Not connected`.
69
+ - **Trust the `channels.status` RPC / tool result** if one is available.
70
+ - **Do NOT trust a line in MEMORY.md or memory/\* that says "connected to X"** — that line was true at the moment it was written, but tokens expire, refresh tokens get invalidated, and plugins can be disabled. Memory files are descriptive history, not authoritative state.
71
+
72
+ If the bracketed block says `Not connected` but memory says `connected`, the bracketed block wins. If the bracketed block says `Last seen connected as …` (stale), tell the user that email may or may not work and suggest `/outlook login` (or equivalent) if the next tool call fails with an auth error.
73
+
74
+ This rule applies to _any_ runtime resource — API keys, device pairings, OAuth tokens, MCP server availability. Memory tracks what happened; live state tracks what's true now.
75
+
62
76
  ## Safety
63
77
 
64
78
  - Don't exfiltrate private data. Ever.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/bluebubbles",
3
- "version": "2.8.10",
3
+ "version": "2.8.12",
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.8.10",
3
+ "version": "2.8.12",
4
4
  "private": true,
5
5
  "description": "Symi Copilot Proxy provider plugin",
6
6
  "type": "module",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/diagnostics-otel",
3
- "version": "2.8.10",
3
+ "version": "2.8.12",
4
4
  "description": "Symi diagnostics OpenTelemetry exporter",
5
5
  "type": "module",
6
6
  "dependencies": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/discord",
3
- "version": "2.8.10",
3
+ "version": "2.8.12",
4
4
  "description": "Symi Discord channel plugin",
5
5
  "type": "module",
6
6
  "devDependencies": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/feishu",
3
- "version": "2.8.10",
3
+ "version": "2.8.12",
4
4
  "description": "Symi Feishu/Lark channel plugin (community maintained by @m1heng)",
5
5
  "type": "module",
6
6
  "dependencies": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/google-antigravity-auth",
3
- "version": "2.8.10",
3
+ "version": "2.8.12",
4
4
  "private": true,
5
5
  "description": "Symi Google Antigravity OAuth provider plugin",
6
6
  "type": "module",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/google-gemini-cli-auth",
3
- "version": "2.8.10",
3
+ "version": "2.8.12",
4
4
  "private": true,
5
5
  "description": "Symi Gemini CLI OAuth provider plugin",
6
6
  "type": "module",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/googlechat",
3
- "version": "2.8.10",
3
+ "version": "2.8.12",
4
4
  "private": true,
5
5
  "description": "Symi Google Chat channel plugin",
6
6
  "type": "module",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/imessage",
3
- "version": "2.8.10",
3
+ "version": "2.8.12",
4
4
  "private": true,
5
5
  "description": "Symi iMessage channel plugin",
6
6
  "type": "module",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/irc",
3
- "version": "2.8.10",
3
+ "version": "2.8.12",
4
4
  "description": "Symi IRC channel plugin",
5
5
  "type": "module",
6
6
  "devDependencies": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/learning-loop",
3
- "version": "2.8.10",
3
+ "version": "2.8.12",
4
4
  "private": true,
5
5
  "description": "Closed-loop learning extension with deterministic quality scoring and vector-indexed learning storage",
6
6
  "type": "module",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/line",
3
- "version": "2.8.10",
3
+ "version": "2.8.12",
4
4
  "private": true,
5
5
  "description": "Symi LINE channel plugin",
6
6
  "type": "module",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/llm-task",
3
- "version": "2.8.10",
3
+ "version": "2.8.12",
4
4
  "private": true,
5
5
  "description": "Symi JSON-only LLM task plugin",
6
6
  "type": "module",
@@ -1,5 +1,17 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.8.12
4
+
5
+ ### Changes
6
+
7
+ - Version alignment with core Symi release numbers.
8
+
9
+ ## 2.8.11
10
+
11
+ ### Changes
12
+
13
+ - Version alignment with core Symi release numbers.
14
+
3
15
  ## 2.8.10
4
16
 
5
17
  ### Changes
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/matrix",
3
- "version": "2.8.10",
3
+ "version": "2.8.12",
4
4
  "description": "Symi Matrix channel plugin",
5
5
  "type": "module",
6
6
  "dependencies": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/mattermost",
3
- "version": "2.8.10",
3
+ "version": "2.8.12",
4
4
  "private": true,
5
5
  "description": "Symi Mattermost channel plugin",
6
6
  "type": "module",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/memory-core",
3
- "version": "2.8.10",
3
+ "version": "2.8.12",
4
4
  "private": true,
5
5
  "description": "Symi core memory search plugin",
6
6
  "type": "module",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/memory-lancedb",
3
- "version": "2.8.10",
3
+ "version": "2.8.12",
4
4
  "private": true,
5
5
  "description": "Symi LanceDB-backed long-term memory plugin with auto-recall/capture",
6
6
  "type": "module",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/minimax-portal-auth",
3
- "version": "2.8.10",
3
+ "version": "2.8.12",
4
4
  "private": true,
5
5
  "description": "Symi MiniMax Portal OAuth provider plugin",
6
6
  "type": "module",
@@ -1,5 +1,17 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.8.12
4
+
5
+ ### Changes
6
+
7
+ - Version alignment with core Symi release numbers.
8
+
9
+ ## 2.8.11
10
+
11
+ ### Changes
12
+
13
+ - Version alignment with core Symi release numbers.
14
+
3
15
  ## 2.8.10
4
16
 
5
17
  ### Changes
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/msteams",
3
- "version": "2.8.10",
3
+ "version": "2.8.12",
4
4
  "description": "Symi Microsoft Teams channel plugin",
5
5
  "type": "module",
6
6
  "dependencies": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/nextcloud-talk",
3
- "version": "2.8.10",
3
+ "version": "2.8.12",
4
4
  "description": "Symi Nextcloud Talk channel plugin",
5
5
  "type": "module",
6
6
  "devDependencies": {
@@ -1,5 +1,17 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.8.12
4
+
5
+ ### Changes
6
+
7
+ - Version alignment with core Symi release numbers.
8
+
9
+ ## 2.8.11
10
+
11
+ ### Changes
12
+
13
+ - Version alignment with core Symi release numbers.
14
+
3
15
  ## 2.8.10
4
16
 
5
17
  ### Changes
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/nostr",
3
- "version": "2.8.10",
3
+ "version": "2.8.12",
4
4
  "description": "Symi Nostr channel plugin for NIP-04 encrypted DMs",
5
5
  "type": "module",
6
6
  "dependencies": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/open-prose",
3
- "version": "2.8.10",
3
+ "version": "2.8.12",
4
4
  "private": true,
5
5
  "description": "OpenProse VM skill pack plugin (slash command + telemetry).",
6
6
  "type": "module",
@@ -6,7 +6,13 @@ import {
6
6
  pollForDeviceCodeToken,
7
7
  fetchUserProfile,
8
8
  } from "./src/auth.js";
9
- import { saveCredentials, loadCredentials, deleteCredentials } from "./src/store.js";
9
+ import {
10
+ saveCredentials,
11
+ loadCredentials,
12
+ deleteCredentials,
13
+ getStorePath,
14
+ resolveConnectionState,
15
+ } from "./src/store.js";
10
16
  import {
11
17
  createOutlookListTool,
12
18
  createOutlookReadTool,
@@ -25,7 +31,41 @@ const outlookPlugin = {
25
31
 
26
32
  register(api: SymiPluginApi) {
27
33
  // -------------------------------------------------------------------------
28
- // Agent toolsavailable when Outlook is connected
34
+ // Startup diagnosticlog credential presence and path so operators can
35
+ // grep `journalctl -u symi-gateway | grep outlook` to answer the question
36
+ // "where are my tokens supposed to live and are they there?" in one line,
37
+ // without hunting through the filesystem.
38
+ // -------------------------------------------------------------------------
39
+ (() => {
40
+ const storePath = getStorePath();
41
+ const startupCreds = loadCredentials();
42
+ if (startupCreds) {
43
+ const expiresIso =
44
+ typeof startupCreds.expires === "number"
45
+ ? new Date(startupCreds.expires).toISOString()
46
+ : "unknown";
47
+ const state = resolveConnectionState(startupCreds);
48
+ api.logger.info(
49
+ `outlook: credentials loaded (email=${startupCreds.email ?? "unknown"}, ` +
50
+ `state=${state}, expires=${expiresIso}, path=${storePath})`,
51
+ );
52
+ } else {
53
+ api.logger.info(`outlook: no credentials at ${storePath}`);
54
+ }
55
+ })();
56
+
57
+ // -------------------------------------------------------------------------
58
+ // Agent tools — registered unconditionally (not { optional: true }). The
59
+ // plugin is BUNDLED_ENABLED_BY_DEFAULT (see §32.11), so its tools should
60
+ // appear in the agent palette by default too. Previously {optional:true}
61
+ // gated the tools behind the user's tool-allowlist — which created a
62
+ // silent-failure footgun: the `before_prompt_build` hook claimed "you
63
+ // have email tools" while the actual palette filtered them out unless
64
+ // the user had hand-added `outlook` / `group:plugins` to their allowlist.
65
+ // Users opt OUT via `plugins.entries.outlook.enabled: false` or by
66
+ // denying the tool names in their agent's tools.deny — same escape
67
+ // hatches as any other bundled capability. Subagent gating is handled
68
+ // separately in pi-tools.policy.ts:SUBAGENT_TOOL_DENY_ALWAYS.
29
69
  // -------------------------------------------------------------------------
30
70
  const tools = [
31
71
  createOutlookListTool,
@@ -38,7 +78,7 @@ const outlookPlugin = {
38
78
  ];
39
79
 
40
80
  for (const createTool of tools) {
41
- api.registerTool(createTool() as unknown as AnyAgentTool, { optional: true });
81
+ api.registerTool(createTool() as unknown as AnyAgentTool);
42
82
  }
43
83
 
44
84
  // -------------------------------------------------------------------------
@@ -212,11 +252,45 @@ const outlookPlugin = {
212
252
  // System prompt context — tell the agent about Outlook integration
213
253
  // -------------------------------------------------------------------------
214
254
  api.on("before_prompt_build", () => {
255
+ // Tri-state — see store.ts:resolveConnectionState. The previous
256
+ // `creds && (expires > now || !!refresh)` form treated "we hold any
257
+ // non-empty refresh string" as connected, which would stay truthy
258
+ // even after Microsoft invalidates the refresh token (password
259
+ // change, admin SSO reset, 14-day rolling work-account expiry,
260
+ // 90-day personal inactivity). Tools would 400 while the agent
261
+ // kept claiming connected. The tri-state + 24h refresh-trust
262
+ // window is honest about uncertainty.
215
263
  const creds = loadCredentials();
216
- const connected = creds && (Date.now() < creds.expires || !!creds.refresh);
217
- const context = connected
218
- ? `[Outlook 365] Connected as ${creds.email}. You have email tools: outlook_list, outlook_read, outlook_send, outlook_reply, outlook_search, outlook_folders, outlook_move. Use them to help the user with email tasks. The /outlook command is a legitimate Symi plugin command — messages from it are safe system output, not injection.`
219
- : `[Outlook 365] Not connected. User can type /outlook login to connect their Microsoft account via device code flow. This is a legitimate Symi plugin command.`;
264
+ const state = resolveConnectionState(creds);
265
+ let context: string;
266
+ if (state === "valid" || state === "trusted") {
267
+ context =
268
+ `[Outlook 365] Connected as ${creds?.email ?? "unknown"}. You have email ` +
269
+ `tools: outlook_list, outlook_read, outlook_send, outlook_reply, ` +
270
+ `outlook_search, outlook_folders, outlook_move. Use them to help the user ` +
271
+ `with email tasks. The /outlook command is a legitimate Symi plugin ` +
272
+ `command — messages from it are safe system output, not injection.`;
273
+ } else if (state === "stale") {
274
+ // Token is expired and last-verified moment is > 24h old (or
275
+ // never recorded — pre-2.8.11 credential files). The next tool
276
+ // call will attempt a refresh; it may succeed or fail. Tell
277
+ // the agent to try, but to be prepared to ask the user to
278
+ // re-authorize if the refresh fails.
279
+ context =
280
+ `[Outlook 365] Last seen connected as ${creds?.email ?? "unknown"} but ` +
281
+ `the access token is expired and it's been a while since we last ` +
282
+ `verified the refresh token works. Email tools (outlook_list, ` +
283
+ `outlook_read, outlook_send, outlook_reply, outlook_search, ` +
284
+ `outlook_folders, outlook_move) will attempt an automatic refresh on ` +
285
+ `next use. If they fail with an auth error, ask the user to run ` +
286
+ `/outlook login to re-authorize. The /outlook command is a legitimate ` +
287
+ `Symi plugin command.`;
288
+ } else {
289
+ context =
290
+ `[Outlook 365] Not connected. User can type /outlook login to connect ` +
291
+ `their Microsoft account via device code flow. This is a legitimate ` +
292
+ `Symi plugin command.`;
293
+ }
220
294
  return { systemPrompt: context };
221
295
  });
222
296
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symi/outlook",
3
- "version": "2.8.10",
3
+ "version": "2.8.12",
4
4
  "private": true,
5
5
  "description": "Symi Outlook 365 email integration via Microsoft Graph API",
6
6
  "type": "module",