@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.
- package/dist/{agents-BbVxJTp2.js → agents-OAonMxYV.js} +4 -4
- package/dist/{agents.config-LE2JxgiS.js → agents.config-BIhaDwT2.js} +1 -1
- package/dist/{agents.config-DckCExUX.js → agents.config-DGu_K5xz.js} +1 -1
- package/dist/{audio-preflight-NdNUAZ0y.js → audio-preflight-C6vpFnOG.js} +4 -4
- package/dist/{audio-preflight-rjCWpcfE.js → audio-preflight-Cb-T0r6e.js} +4 -4
- package/dist/{audit-CNU0I_UT.js → audit-Bi9Je9FZ.js} +1 -1
- package/dist/{audit-F5zQ_Wk9.js → audit-Oa5dsn5p.js} +1 -1
- package/dist/{auth-choice-j1FEYnxv.js → auth-choice-BvPX7B4c.js} +1 -1
- package/dist/{auth-choice-DnKOB8Gs.js → auth-choice-DDzWns1k.js} +1 -1
- package/dist/{banner-BFr8n0of.js → banner-BFdiq-O5.js} +1 -1
- package/dist/build-info.json +3 -3
- package/dist/bundled/boot-md/handler.js +7 -7
- package/dist/bundled/session-memory/handler.js +7 -7
- package/dist/canvas-host/a2ui/.bundle.hash +1 -1
- package/dist/{channel-options-DrBxsMlw.js → channel-options-DTqUB0OP.js} +1 -1
- package/dist/{channel-options-BtmFCQOB.js → channel-options-tfnOGSNF.js} +1 -1
- package/dist/{channel-web-YgdajAXX.js → channel-web-CcUXobcu.js} +1 -1
- package/dist/{channels-cli-fYbw-4gz.js → channels-cli-BcE5tHIr.js} +7 -7
- package/dist/{channels-cli-ChS_nQcP.js → channels-cli-CmShA-wJ.js} +7 -7
- package/dist/{chrome-BUT--ob3.js → chrome-B14NNyfm.js} +7 -7
- package/dist/{chrome-C08Z0XAa.js → chrome-ROtrXlNs.js} +7 -7
- package/dist/{cli-CA4qcSFY.js → cli-BxoD2wzk.js} +4 -4
- package/dist/{cli-NfoZJEPh.js → cli-CKG2iAr3.js} +4 -4
- package/dist/{command-registry-B6spVZMd.js → command-registry-D1Le-Fmh.js} +10 -10
- package/dist/{completion-cli-VQrV_JN9.js → completion-cli-D9pC-ttw.js} +2 -2
- package/dist/{completion-cli-DKoZNVbW.js → completion-cli-DgiFjSGS.js} +1 -1
- package/dist/{config-cli-CgC3xSoL.js → config-cli-5mFA0UDP.js} +1 -1
- package/dist/{config-cli-Dm2QMcwn.js → config-cli-C_uZQsTl.js} +1 -1
- package/dist/{configure-COCCg2tV.js → configure-BJcy7wXm.js} +3 -3
- package/dist/{configure-DiDXmX3E.js → configure-DuRTFCuW.js} +3 -3
- package/dist/{deliver-qUx-eLKt.js → deliver-B0OUq6RP.js} +1 -1
- package/dist/{deliver-B_Q_nWJV.js → deliver-D0bWiRCg.js} +1 -1
- package/dist/{doctor-completion-CPFKFTc-.js → doctor-completion-DCRTHpiY.js} +1 -1
- package/dist/{doctor-completion-BR5k35Qj.js → doctor-completion-sQVhKKei.js} +1 -1
- package/dist/entry.js +1 -1
- package/dist/extensionAPI.js +7 -7
- package/dist/{gateway-cli-BJH2K8fn.js → gateway-cli-C3ujhxO0.js} +13 -13
- package/dist/{gateway-cli-BF1-DFEf.js → gateway-cli-C_MT4JFm.js} +13 -13
- package/dist/{glass-ui-ws-B7j7iTDg.js → glass-ui-ws-B7zRY2BL.js} +11 -11
- package/dist/{glass-ui-ws-DyoHQW3O.js → glass-ui-ws-ColAiWUr.js} +11 -11
- package/dist/{health-D-0xOxV8.js → health-C12hy3Ao.js} +1 -1
- package/dist/{health-BAjSATWA.js → health-vKJZ7iJR.js} +1 -1
- package/dist/{hooks-cli-ZZaM2xfC.js → hooks-cli-CdUQvj8s.js} +5 -5
- package/dist/{hooks-cli-BaoCFIbQ.js → hooks-cli-fCPl5hur.js} +5 -5
- package/dist/{image-C6rCON9L.js → image-BuVL0jHI.js} +1 -1
- package/dist/{image-tzIqIuKx.js → image-MNvheU8U.js} +1 -1
- package/dist/index.js +9 -9
- package/dist/llm-slug-generator.js +7 -7
- package/dist/{manager-BpvcDr-7.js → manager-BJvYQ7xP.js} +1 -1
- package/dist/{manager-BxJ9BhQe.js → manager-CLrJn9l-.js} +1 -1
- package/dist/{manager-B5JWZL0E.js → manager-DHRBy5oR.js} +1 -1
- package/dist/{manager-DUuPE1N1.js → manager-Df_ZdrNG.js} +1 -1
- package/dist/{memory-cli-r-ulsUBa.js → memory-cli-BgJciaHC.js} +3 -3
- package/dist/{memory-cli-BQZ0rTKC.js → memory-cli-T-a5-lqZ.js} +3 -3
- package/dist/{models-B1__62Qo.js → models-BXXV_sZU.js} +2 -2
- package/dist/{models-cli-BGpB4PAp.js → models-cli-BI-DyItH.js} +5 -5
- package/dist/{models-cli-Ch-4PBud.js → models-cli-Bs6JAGq-.js} +6 -6
- package/dist/{onboard-D2NC88Mp.js → onboard-Czi_FRdi.js} +2 -2
- package/dist/{onboard-D_2-lyyt.js → onboard-DKDCWveE.js} +2 -2
- package/dist/{onboard-channels-CYlZtWF6.js → onboard-channels-BUCYZF02.js} +1 -1
- package/dist/{onboard-channels-BgA4i9TU.js → onboard-channels-sTuhQBVu.js} +1 -1
- package/dist/{onboarding-D7N2AfyJ.js → onboarding-Bgx0qZhA.js} +3 -3
- package/dist/{onboarding-uVLsv2Sd.js → onboarding-CokRRVEi.js} +3 -3
- package/dist/{onboarding.finalize-CTDv0xwp.js → onboarding.finalize-BCv5jB0d.js} +9 -9
- package/dist/{onboarding.finalize-DEjTjgRt.js → onboarding.finalize-BzEKyraI.js} +8 -8
- package/dist/{pi-embedded-HSRJqesT.js → pi-embedded-DXY7TLac.js} +27 -20
- package/dist/{pi-embedded-helpers-P13adotN.js → pi-embedded-helpers-D1_Sab0M.js} +4 -4
- package/dist/{pi-embedded-helpers-DjSdA5BG.js → pi-embedded-helpers-TcYQOZAY.js} +4 -4
- package/dist/{pi-tools.policy-BPVIDK7o.js → pi-tools.policy-BZrM6a-w.js} +8 -1
- package/dist/{pi-tools.policy-dbCkhLDL.js → pi-tools.policy-QIVWAVVI.js} +8 -1
- package/dist/{plugin-registry-Chvg6kT0.js → plugin-registry-B2cpTmJz.js} +1 -1
- package/dist/{plugin-registry-DEKq3ti3.js → plugin-registry-CyrsJDyE.js} +1 -1
- package/dist/plugin-sdk/{channel-web-CfaamthT.js → channel-web-t6enTxNE.js} +1 -1
- package/dist/plugin-sdk/index.js +3 -3
- package/dist/plugin-sdk/{manager-B3jEviU1.js → manager-LRE7zEk2.js} +1 -1
- package/dist/plugin-sdk/{reply-DWwxgBtH.js → reply-JypoGhql.js} +13 -6
- package/dist/plugin-sdk/{synthesis-C_u94H_P.js → synthesis-_WpVyZKx.js} +2 -2
- package/dist/plugin-sdk/{web-DFvYfej5.js → web-BTVj4kiQ.js} +3 -3
- package/dist/{plugins-cli-QZlpLtva.js → plugins-cli-B-zoQyqU.js} +5 -5
- package/dist/{plugins-cli-Cd99p333.js → plugins-cli-DJwRd3EZ.js} +5 -5
- package/dist/{program-viRCc6Je.js → program-H7h6Iqrq.js} +10 -10
- package/dist/{program-context-Dun-c3nf.js → program-context-BgecQAHU.js} +19 -19
- package/dist/{prompt-select-styled-DVLibGeR.js → prompt-select-styled-BDN2o35i.js} +6 -6
- package/dist/{prompt-select-styled-W2G26g34.js → prompt-select-styled-BglmD29e.js} +6 -6
- package/dist/{provider-auth-helpers-KFQclkJT.js → provider-auth-helpers-BGIgr7xM.js} +1 -1
- package/dist/{provider-auth-helpers-DCEiDG3X.js → provider-auth-helpers-MfKmTeLY.js} +1 -1
- package/dist/{push-apns-tfhjtI57.js → push-apns-IcfSTzfr.js} +1 -1
- package/dist/{push-apns-CB_8WzQ9.js → push-apns-b6bH1EBC.js} +1 -1
- package/dist/{pw-ai-CQtaPvM8.js → pw-ai-40Jf9QIb.js} +1 -1
- package/dist/{pw-ai-CeWN4iD9.js → pw-ai-DWkC5eGA.js} +1 -1
- package/dist/{register.agent--QTUjLu9.js → register.agent-BgyETrrj.js} +8 -8
- package/dist/{register.agent-i2wi1-vo.js → register.agent-ChwMSIC4.js} +9 -9
- package/dist/{register.configure-B9JysEK8.js → register.configure-Bm4CvoLF.js} +9 -9
- package/dist/{register.configure-ByJcC9t4.js → register.configure-DH3L2tqW.js} +9 -9
- package/dist/{register.maintenance-DqJL_QWT.js → register.maintenance-BbOBw1eI.js} +10 -10
- package/dist/{register.maintenance-BGiYxRYm.js → register.maintenance-CAyHUEzP.js} +11 -11
- package/dist/{register.message-G6-UeGON.js → register.message-DQ3MOWFE.js} +5 -5
- package/dist/{register.message-DT_TqsFl.js → register.message-DheqsiR0.js} +5 -5
- package/dist/{register.onboard-CfySx27T.js → register.onboard-CxqR4S1C.js} +7 -7
- package/dist/{register.onboard-848EXgTB.js → register.onboard-DOJkUhoY.js} +7 -7
- package/dist/{register.setup-B40A19lI.js → register.setup-48YBHzMZ.js} +7 -7
- package/dist/{register.setup-C-NYSAGY.js → register.setup-zdrIJA2P.js} +7 -7
- package/dist/{register.status-health-sessions-B03EDfwZ.js → register.status-health-sessions-CeT5pVXb.js} +7 -7
- package/dist/{register.status-health-sessions-BACExyrd.js → register.status-health-sessions-CimrhScH.js} +7 -7
- package/dist/{register.subclis-kF8KnNuq.js → register.subclis-B-zh940S.js} +10 -10
- package/dist/{reply-C5VU6T-F.js → reply-CUR4xpYM.js} +5 -5
- package/dist/{run-main-BqpvNq8c.js → run-main-CW_kj5Lj.js} +18 -18
- package/dist/{runner-Dpjulwnm.js → runner-DFuAePEr.js} +1 -1
- package/dist/{runner-D633VT13.js → runner-ecX1WzDt.js} +1 -1
- package/dist/{security-cli-ChPAyhec.js → security-cli-BpnzAB5_.js} +2 -2
- package/dist/{security-cli-Cq56CAVI.js → security-cli-D9WEiEjD.js} +2 -2
- package/dist/{server-methods-DjB0hxeW.js → server-methods-C1h0A5n0.js} +39 -15
- package/dist/{server-methods-CkLzZq0Y.js → server-methods-C4id-H_X.js} +39 -15
- package/dist/{server-node-events-BM-APRHy.js → server-node-events-BPZEGV_N.js} +5 -5
- package/dist/{server-node-events-ZgCh4sCg.js → server-node-events-CD2yDaEj.js} +5 -5
- package/dist/{status-WMQ2CpbK.js → status-Cb932Vl4.js} +4 -4
- package/dist/{status-C_gwgMp4.js → status-DCeW2a07.js} +4 -4
- package/dist/{status-BhQk3JSz.js → status-DvHD1cnq.js} +1 -1
- package/dist/{status-Nf53o222.js → status-_xBnHTlx.js} +1 -1
- package/dist/{subagent-registry-BCWbFTGF.js → subagent-registry-BKuL9PdW.js} +5 -5
- package/dist/{synthesis-VfWtSYrv.js → synthesis-BUqDGjlc.js} +7 -7
- package/dist/{synthesis-CJIAYDoU.js → synthesis-C9RputIi.js} +4 -4
- package/dist/{synthesis-CWsrtigA.js → synthesis-DOiTUsXQ.js} +7 -7
- package/dist/{synthesis-DIKBPZgB.js → synthesis-Ia9egx87.js} +4 -4
- package/dist/{unified-runner-yPBTU4xt.js → unified-runner-CVItnwwP.js} +27 -20
- package/dist/{update-cli-BCFHfhUW.js → update-cli-ChEABesZ.js} +11 -11
- package/dist/{update-cli-B_Mxicbw.js → update-cli-D6ax3jSX.js} +10 -10
- package/dist/{update-runner-DG5x7t--.js → update-runner-B2EY9BWM.js} +1 -1
- package/dist/{update-runner-BQJSshFU.js → update-runner-CWG6GxKs.js} +1 -1
- package/dist/{web-TVVa5EDS.js → web-CpSE67Jp.js} +5 -5
- package/dist/{web-Dpfsnk-b.js → web-D6PPeyG7.js} +4 -4
- package/dist/{web-eJWNRwV5.js → web-DMdb2p-h.js} +7 -7
- package/dist/{web-D9_FatXM.js → web-z-yQ8riS.js} +7 -7
- package/docs/reference/templates/AGENTS.md +14 -0
- package/extensions/bluebubbles/package.json +1 -1
- package/extensions/copilot-proxy/package.json +1 -1
- package/extensions/diagnostics-otel/package.json +1 -1
- package/extensions/discord/package.json +1 -1
- package/extensions/feishu/package.json +1 -1
- package/extensions/google-antigravity-auth/package.json +1 -1
- package/extensions/google-gemini-cli-auth/package.json +1 -1
- package/extensions/googlechat/package.json +1 -1
- package/extensions/imessage/package.json +1 -1
- package/extensions/irc/package.json +1 -1
- package/extensions/learning-loop/package.json +1 -1
- package/extensions/line/package.json +1 -1
- package/extensions/llm-task/package.json +1 -1
- package/extensions/matrix/CHANGELOG.md +12 -0
- package/extensions/matrix/package.json +1 -1
- package/extensions/mattermost/package.json +1 -1
- package/extensions/memory-core/package.json +1 -1
- package/extensions/memory-lancedb/package.json +1 -1
- package/extensions/minimax-portal-auth/package.json +1 -1
- package/extensions/msteams/CHANGELOG.md +12 -0
- package/extensions/msteams/package.json +1 -1
- package/extensions/nextcloud-talk/package.json +1 -1
- package/extensions/nostr/CHANGELOG.md +12 -0
- package/extensions/nostr/package.json +1 -1
- package/extensions/open-prose/package.json +1 -1
- package/extensions/outlook/index.ts +81 -7
- package/extensions/outlook/package.json +1 -1
- package/extensions/outlook/src/store.ts +118 -11
- package/extensions/pipeline/package.json +1 -1
- package/extensions/signal/package.json +1 -1
- package/extensions/slack/package.json +1 -1
- package/extensions/telegram/package.json +1 -1
- package/extensions/tlon/package.json +1 -1
- package/extensions/twitch/CHANGELOG.md +12 -0
- package/extensions/twitch/package.json +1 -1
- package/extensions/voice-call/CHANGELOG.md +12 -0
- package/extensions/voice-call/package.json +1 -1
- package/extensions/whatsapp/package.json +1 -1
- package/extensions/zalo/CHANGELOG.md +12 -0
- package/extensions/zalo/package.json +1 -1
- package/extensions/zalouser/CHANGELOG.md +12 -0
- package/extensions/zalouser/package.json +1 -1
- 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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
39
|
-
import "./manager-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
34
|
+
import "./deliver-B0OUq6RP.js";
|
|
35
35
|
import "./diagnostic-BUcR3Meg.js";
|
|
36
36
|
import "./diagnostic-session-state-Zw87xFym.js";
|
|
37
|
-
import "./image-
|
|
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-
|
|
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-
|
|
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.
|
|
@@ -6,7 +6,13 @@ import {
|
|
|
6
6
|
pollForDeviceCodeToken,
|
|
7
7
|
fetchUserProfile,
|
|
8
8
|
} from "./src/auth.js";
|
|
9
|
-
import {
|
|
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
|
-
//
|
|
34
|
+
// Startup diagnostic — log 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
|
|
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
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
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
|
|