@symerian/symi 2.1.4 → 2.1.6

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 (74) hide show
  1. package/dist/build-info.json +3 -3
  2. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  3. package/dist/plugin-sdk/{accounts-BToL3HlP.js → accounts-BtaOa4z_.js} +1 -1
  4. package/dist/plugin-sdk/{accounts-D9zGZU5t.js → accounts-Ddm33hQm.js} +3 -3
  5. package/dist/plugin-sdk/{accounts-Dtszw3Zn.js → accounts-s-AdhXVR.js} +1 -1
  6. package/dist/plugin-sdk/{active-listener-bEk__wbB.js → active-listener-BXYeALs0.js} +1 -1
  7. package/dist/plugin-sdk/{agent-scope-C3gMMKCU.js → agent-scope-CYYpcO9W.js} +2 -2
  8. package/dist/plugin-sdk/{api-key-rotation-B7wX2cS9.js → api-key-rotation-BNN7DLRF.js} +1 -1
  9. package/dist/plugin-sdk/{audio-preflight-ni0fpVp8.js → audio-preflight-Cx5FPiJc.js} +24 -24
  10. package/dist/plugin-sdk/{bindings-BbwoUGPx.js → bindings-C7hRtgYW.js} +2 -2
  11. package/dist/plugin-sdk/{channel-activity-Ji7f0gqq.js → channel-activity-DoC1xtDu.js} +1 -1
  12. package/dist/plugin-sdk/{channel-web-DLpcsfAm.js → channel-web-Bz7z_PrR.js} +22 -22
  13. package/dist/plugin-sdk/{chrome-B3sE4bXC.js → chrome-BMG9BEuT.js} +3 -3
  14. package/dist/plugin-sdk/{chunk-jvk9axTQ.js → chunk-Dw2XBYXv.js} +1 -1
  15. package/dist/plugin-sdk/{command-format-DSdvQ_M5.js → command-format-GKSevep4.js} +1 -1
  16. package/dist/plugin-sdk/{commands-registry-DFVoW5Za.js → commands-registry-B6QKgH1z.js} +4 -4
  17. package/dist/plugin-sdk/{config-C8bdNl-t.js → config-ChoJh2v6.js} +9 -9
  18. package/dist/plugin-sdk/{deliver-DupqKEgT.js → deliver-PHupXW27.js} +10 -10
  19. package/dist/plugin-sdk/{diagnostic-mFf4i4G9.js → diagnostic-05pm5Rxi.js} +1 -1
  20. package/dist/plugin-sdk/{image-t0--fcO_.js → image-CZeY-Q2T.js} +4 -4
  21. package/dist/plugin-sdk/{image-ops-Bnp6LXEx.js → image-ops-BlQR__MN.js} +1 -1
  22. package/dist/plugin-sdk/index.js +53 -53
  23. package/dist/plugin-sdk/{ir-Fb3qpcis.js → ir-BJ6BHE5b.js} +4 -4
  24. package/dist/plugin-sdk/{local-roots-Ckk1QfzI.js → local-roots-BHLNSI8U.js} +3 -3
  25. package/dist/plugin-sdk/{login-YiSLGJpw.js → login-WrHy4q1W.js} +7 -7
  26. package/dist/plugin-sdk/{login-qr-Ct3iRCTA.js → login-qr-D30S2gk7.js} +9 -9
  27. package/dist/plugin-sdk/{manager-PXN_BUWT.js → manager-Cn2S7u-y.js} +8 -8
  28. package/dist/plugin-sdk/{manifest-registry-B3ugY9-f.js → manifest-registry-CPnHl_K3.js} +1 -1
  29. package/dist/plugin-sdk/{markdown-tables-Dfaqilz6.js → markdown-tables-BoYFajMu.js} +1 -1
  30. package/dist/plugin-sdk/{message-channel-BdI5Ra9S.js → message-channel-COTAJzHd.js} +1 -1
  31. package/dist/plugin-sdk/{model-selection-UQwTqGSw.js → model-selection-CPEL3Uc_.js} +4 -4
  32. package/dist/plugin-sdk/{outbound-attachment-DnVQfTG2.js → outbound-attachment-CnslKL38.js} +2 -2
  33. package/dist/plugin-sdk/{outbound-BaAisH4u.js → outbound-ps5sAOfw.js} +7 -7
  34. package/dist/plugin-sdk/{pi-auth-json-DAttpBPg.js → pi-auth-json-D4gyc_V3.js} +5 -5
  35. package/dist/plugin-sdk/{pi-embedded-helpers-CHlXbJGj.js → pi-embedded-helpers-CU4D77Op.js} +17 -17
  36. package/dist/plugin-sdk/{plugins-BbAvhC25.js → plugins-BNByVCIH.js} +4 -4
  37. package/dist/plugin-sdk/{pw-ai-JO8xac-v.js → pw-ai-81tOC-Ch.js} +8 -8
  38. package/dist/plugin-sdk/{qmd-manager-mjKcdwVr.js → qmd-manager-CH0XbIHf.js} +4 -4
  39. package/dist/plugin-sdk/{registry--_pGht6S.js → registry-D0xTnUWt.js} +2 -2
  40. package/dist/plugin-sdk/{replies-CVSgwFjl.js → replies-zmY9bbot.js} +3 -3
  41. package/dist/plugin-sdk/{reply-GcVMmckw.js → reply-BSikbH6_.js} +78 -78
  42. package/dist/plugin-sdk/{reply-prefix-BHuV5t70.js → reply-prefix-uxfMZW4p.js} +1 -1
  43. package/dist/plugin-sdk/{resolve-outbound-target-BkCUbYGV.js → resolve-outbound-target-BiyAyTWz.js} +2 -2
  44. package/dist/plugin-sdk/{resolve-route-D3JH_D2N.js → resolve-route-B3CCBumQ.js} +3 -3
  45. package/dist/plugin-sdk/{retry-ilSJqnz9.js → retry-CwQ_iIj8.js} +1 -1
  46. package/dist/plugin-sdk/{runner-Dm_yIGe6.js → runner-Co_eR7xp.js} +9 -9
  47. package/dist/plugin-sdk/{send-C9rT2n2M.js → send-6DwkdgEF.js} +7 -7
  48. package/dist/plugin-sdk/{send-BEeCC5ku.js → send-BNZVvZHE.js} +6 -6
  49. package/dist/plugin-sdk/{send-DNkOLgrC.js → send-D6BxZPP0.js} +6 -6
  50. package/dist/plugin-sdk/{send-DWr9Drgp.js → send-D8vgGF3T.js} +10 -10
  51. package/dist/plugin-sdk/{send-mQr5eXnb.js → send-Dw4gTEN6.js} +10 -10
  52. package/dist/plugin-sdk/{session-CQ5dJOsX.js → session-BTN5wyhB.js} +4 -4
  53. package/dist/plugin-sdk/{skill-commands-27tIhSRP.js → skill-commands-BUVE0jBL.js} +5 -5
  54. package/dist/plugin-sdk/{skills-B1GeRYlu.js → skills-_yTP47Cd.js} +7 -7
  55. package/dist/plugin-sdk/{sqlite-Cq_7Cg4E.js → sqlite-CxAR5ttJ.js} +1 -1
  56. package/dist/plugin-sdk/{store-Do3t33-c.js → store-BdrNabcU.js} +2 -2
  57. package/dist/plugin-sdk/{subsystem-Coz2AgU8.js → subsystem-B2uDN3TV.js} +1 -1
  58. package/dist/plugin-sdk/{tables-DR0NmBeH.js → tables-DNwXwNFa.js} +1 -1
  59. package/dist/plugin-sdk/{target-errors-B7YyMnIi.js → target-errors-Paro1BjP.js} +2 -2
  60. package/dist/plugin-sdk/{thinking-DCNUIAHY.js → thinking-CXqf7WTe.js} +5 -5
  61. package/dist/plugin-sdk/{tokens-CWMflosr.js → tokens-bC3UVmVH.js} +1 -1
  62. package/dist/plugin-sdk/{tool-images-D7Lno-TE.js → tool-images-HJ2sfZDV.js} +2 -2
  63. package/dist/plugin-sdk/{tool-loop-detection-edmW8ZiF.js → tool-loop-detection-BVA6fax-.js} +2 -2
  64. package/dist/plugin-sdk/web-eAue9zIL.js +65 -0
  65. package/dist/plugin-sdk/{whatsapp-actions-ZlyPpuJN.js → whatsapp-actions-DU3CTVCg.js} +21 -21
  66. package/extensions/outlook/index.ts +208 -0
  67. package/extensions/outlook/package.json +15 -0
  68. package/extensions/outlook/src/auth.ts +369 -0
  69. package/extensions/outlook/src/graph-mail.ts +150 -0
  70. package/extensions/outlook/src/store.ts +72 -0
  71. package/extensions/outlook/src/tools.ts +256 -0
  72. package/extensions/outlook/symi.plugin.json +11 -0
  73. package/package.json +1 -1
  74. package/dist/plugin-sdk/web-CJWupzDH.js +0 -65
@@ -1,16 +1,16 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-Cbj13DAv.js";
2
- import { B as parseTargetPrefixes, F as resolveDiscordAccount, I as normalizeDiscordToken, L as buildMessagingTarget, R as ensureTargetId, V as requireTargetKind, z as parseTargetMention } from "./plugins-BbAvhC25.js";
2
+ import { B as parseTargetPrefixes, F as resolveDiscordAccount, I as normalizeDiscordToken, L as buildMessagingTarget, R as ensureTargetId, V as requireTargetKind, z as parseTargetMention } from "./plugins-BNByVCIH.js";
3
3
  import { t as resolveFetch } from "./fetch-CUNoPTKm.js";
4
- import { ut as resolvePreferredSymiTmpDir } from "./registry--_pGht6S.js";
5
- import { n as retryAsync, t as resolveRetryConfig } from "./retry-ilSJqnz9.js";
6
- import { n as loadConfig } from "./config-C8bdNl-t.js";
7
- import { n as recordChannelActivity, r as createDiscordRetryRunner } from "./channel-activity-Ji7f0gqq.js";
4
+ import { ut as resolvePreferredSymiTmpDir } from "./registry-D0xTnUWt.js";
5
+ import { n as retryAsync, t as resolveRetryConfig } from "./retry-CwQ_iIj8.js";
6
+ import { n as loadConfig } from "./config-ChoJh2v6.js";
7
+ import { n as recordChannelActivity, r as createDiscordRetryRunner } from "./channel-activity-DoC1xtDu.js";
8
8
  import { n as normalizePollInput, t as normalizePollDurationHours } from "./polls-3WJMd-G-.js";
9
- import { _ as maxBytesForKind, l as extensionForMime } from "./image-ops-Bnp6LXEx.js";
10
- import { a as loadWebMedia, o as loadWebMediaRaw } from "./ir-Fb3qpcis.js";
11
- import { c as resolveChunkMode, i as chunkMarkdownTextWithMode } from "./chunk-jvk9axTQ.js";
12
- import { n as resolveMarkdownTableMode } from "./markdown-tables-Dfaqilz6.js";
13
- import { t as convertMarkdownTables } from "./tables-DR0NmBeH.js";
9
+ import { _ as maxBytesForKind, l as extensionForMime } from "./image-ops-BlQR__MN.js";
10
+ import { a as loadWebMedia, o as loadWebMediaRaw } from "./ir-BJ6BHE5b.js";
11
+ import { c as resolveChunkMode, i as chunkMarkdownTextWithMode } from "./chunk-Dw2XBYXv.js";
12
+ import { n as resolveMarkdownTableMode } from "./markdown-tables-BoYFajMu.js";
13
+ import { t as convertMarkdownTables } from "./tables-DNwXwNFa.js";
14
14
  import path from "node:path";
15
15
  import { ButtonStyle, ChannelType, MessageFlags, PermissionFlagsBits, Routes, TextInputStyle } from "discord-api-types/v10";
16
16
  import { Button, ChannelSelectMenu, CheckboxGroup, Container, Embed, File, Label, LinkButton, MediaGallery, MentionableSelectMenu, Modal, RadioGroup, RequestClient, RoleSelectMenu, Row, Section, Separator, StringSelectMenu, TextDisplay, TextInput, Thumbnail, UserSelectMenu, parseCustomId, serializePayload } from "@buape/carbon";
@@ -1,7 +1,7 @@
1
- import { d as readCredsJsonRaw, h as resolveWebCredsPath, l as maybeRestoreCredsFromBackup, m as resolveWebCredsBackupPath, p as resolveDefaultWebAuthDir } from "./accounts-D9zGZU5t.js";
2
- import { P as resolveUserPath, U as danger, X as success, at as toPinoLikeLogger, tt as getChildLogger, w as ensureDir } from "./registry--_pGht6S.js";
3
- import { Z as VERSION } from "./config-C8bdNl-t.js";
4
- import { t as formatCliCommand } from "./command-format-DSdvQ_M5.js";
1
+ import { d as readCredsJsonRaw, h as resolveWebCredsPath, l as maybeRestoreCredsFromBackup, m as resolveWebCredsBackupPath, p as resolveDefaultWebAuthDir } from "./accounts-Ddm33hQm.js";
2
+ import { P as resolveUserPath, U as danger, X as success, at as toPinoLikeLogger, tt as getChildLogger, w as ensureDir } from "./registry-D0xTnUWt.js";
3
+ import { Z as VERSION } from "./config-ChoJh2v6.js";
4
+ import { t as formatCliCommand } from "./command-format-GKSevep4.js";
5
5
  import fs from "node:fs";
6
6
  import { randomUUID } from "node:crypto";
7
7
  import { DisconnectReason, fetchLatestBaileysVersion, makeCacheableSignalKeyStore, makeWASocket, useMultiFileAuthState } from "@whiskeysockets/baileys";
@@ -1,10 +1,10 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-Cbj13DAv.js";
2
2
  import { s as resolveStateDir } from "./paths-DR2yt_mP.js";
3
- import { P as resolveUserPath, b as CONFIG_DIR } from "./registry--_pGht6S.js";
4
- import { t as createSubsystemLogger } from "./subsystem-Coz2AgU8.js";
5
- import { s as resolveAgentWorkspaceDir, t as listAgentIds } from "./agent-scope-C3gMMKCU.js";
6
- import { o as resolvePluginSkillDirs, t as buildWorkspaceSkillCommandSpecs } from "./skills-B1GeRYlu.js";
7
- import { i as listChatCommands } from "./commands-registry-DFVoW5Za.js";
3
+ import { P as resolveUserPath, b as CONFIG_DIR } from "./registry-D0xTnUWt.js";
4
+ import { t as createSubsystemLogger } from "./subsystem-B2uDN3TV.js";
5
+ import { s as resolveAgentWorkspaceDir, t as listAgentIds } from "./agent-scope-CYYpcO9W.js";
6
+ import { o as resolvePluginSkillDirs, t as buildWorkspaceSkillCommandSpecs } from "./skills-_yTP47Cd.js";
7
+ import { i as listChatCommands } from "./commands-registry-B6QKgH1z.js";
8
8
  import fs from "node:fs";
9
9
  import path from "node:path";
10
10
  import os from "node:os";
@@ -1,12 +1,12 @@
1
- import { P as resolveUserPath, b as CONFIG_DIR } from "./registry--_pGht6S.js";
2
- import { t as createSubsystemLogger } from "./subsystem-Coz2AgU8.js";
3
- import { i as parseBooleanValue } from "./command-format-DSdvQ_M5.js";
4
- import { M as normalizeSkillFilter, w as resolveSymiPackageRootSync } from "./agent-scope-C3gMMKCU.js";
5
- import { a as LEGACY_MANIFEST_KEYS, c as normalizePluginsConfig, l as resolveEnableState, o as MANIFEST_KEY, p as isDangerousHostEnvVarName, t as loadPluginManifestRegistry, u as resolveMemorySlotDecision } from "./manifest-registry-B3ugY9-f.js";
1
+ import { P as resolveUserPath, b as CONFIG_DIR } from "./registry-D0xTnUWt.js";
2
+ import { t as createSubsystemLogger } from "./subsystem-B2uDN3TV.js";
3
+ import { i as parseBooleanValue } from "./command-format-GKSevep4.js";
4
+ import { M as normalizeSkillFilter, w as resolveSymiPackageRootSync } from "./agent-scope-CYYpcO9W.js";
5
+ import { a as LEGACY_MANIFEST_KEYS, c as normalizePluginsConfig, l as resolveEnableState, o as MANIFEST_KEY, p as isDangerousHostEnvVarName, t as loadPluginManifestRegistry, u as resolveMemorySlotDecision } from "./manifest-registry-CPnHl_K3.js";
6
6
  import fs from "node:fs";
7
7
  import path from "node:path";
8
8
  import os from "node:os";
9
- import json5 from "json5";
9
+ import JSON5 from "json5";
10
10
  import { createHash, timingSafeEqual } from "node:crypto";
11
11
  import fs$1 from "node:fs/promises";
12
12
  import { fileURLToPath } from "node:url";
@@ -226,7 +226,7 @@ function resolveSymiManifestBlock(params) {
226
226
  const raw = getFrontmatterString(params.frontmatter, params.key ?? "metadata");
227
227
  if (!raw) return;
228
228
  try {
229
- const parsed = json5.parse(raw);
229
+ const parsed = JSON5.parse(raw);
230
230
  if (!parsed || typeof parsed !== "object") return;
231
231
  const manifestKeys = [MANIFEST_KEY, ...LEGACY_MANIFEST_KEYS];
232
232
  for (const key of manifestKeys) {
@@ -1,4 +1,4 @@
1
- import { t as createSubsystemLogger } from "./subsystem-Coz2AgU8.js";
1
+ import { t as createSubsystemLogger } from "./subsystem-B2uDN3TV.js";
2
2
  import { t as redactSensitiveText } from "./redact-DPnDWsnT.js";
3
3
  import { o as resolveSessionTranscriptsDirForAgent } from "./paths-A0xdf3yk.js";
4
4
  import { createRequire } from "node:module";
@@ -1,5 +1,5 @@
1
- import { M as resolveConfigDir } from "./registry--_pGht6S.js";
2
- import { c as detectMime, l as extensionForMime } from "./image-ops-Bnp6LXEx.js";
1
+ import { M as resolveConfigDir } from "./registry-D0xTnUWt.js";
2
+ import { c as detectMime, l as extensionForMime } from "./image-ops-BlQR__MN.js";
3
3
  import { createWriteStream } from "node:fs";
4
4
  import path from "node:path";
5
5
  import crypto from "node:crypto";
@@ -1,4 +1,4 @@
1
- import { G as isVerbose, ct as normalizeLogLevel, lt as readLoggingConfig, n as CHAT_CHANNEL_ORDER, ot as loggingState, rt as isFileLogLevelEnabled, st as levelToMinLevel, tt as getChildLogger } from "./registry--_pGht6S.js";
1
+ import { G as isVerbose, ct as normalizeLogLevel, lt as readLoggingConfig, n as CHAT_CHANNEL_ORDER, ot as loggingState, rt as isFileLogLevelEnabled, st as levelToMinLevel, tt as getChildLogger } from "./registry-D0xTnUWt.js";
2
2
  import { Chalk } from "chalk";
3
3
 
4
4
  //#region src/terminal/progress-line.ts
@@ -1,4 +1,4 @@
1
- import { r as markdownToIRWithMeta } from "./ir-Fb3qpcis.js";
1
+ import { r as markdownToIRWithMeta } from "./ir-BJ6BHE5b.js";
2
2
  import { t as renderMarkdownWithMarkers } from "./render-BiJZ5W4Z.js";
3
3
 
4
4
  //#region src/markdown/tables.ts
@@ -1,5 +1,5 @@
1
- import { c as detectMime } from "./image-ops-Bnp6LXEx.js";
2
- import { r as sanitizeToolResultImages } from "./tool-images-D7Lno-TE.js";
1
+ import { c as detectMime } from "./image-ops-BlQR__MN.js";
2
+ import { r as sanitizeToolResultImages } from "./tool-images-HJ2sfZDV.js";
3
3
  import fs from "node:fs/promises";
4
4
 
5
5
  //#region src/agents/tools/common.ts
@@ -1,9 +1,9 @@
1
1
  import { p as normalizeAccountId } from "./session-key-C_0eELjb.js";
2
- import { r as resolveWhatsAppAccount } from "./accounts-D9zGZU5t.js";
3
- import { D as resolveSlackAccount, F as resolveDiscordAccount, O as resolveSlackReplyToMode, S as resolveTelegramAccount, _ as normalizeWhatsAppTarget } from "./plugins-BbAvhC25.js";
4
- import { A as normalizeE164, T as escapeRegExp, i as getChatChannelMeta, l as requireActivePluginRegistry, n as CHAT_CHANNEL_ORDER } from "./registry--_pGht6S.js";
5
- import { r as resolveIMessageAccount } from "./accounts-Dtszw3Zn.js";
6
- import { i as resolveSignalAccount } from "./accounts-BToL3HlP.js";
2
+ import { r as resolveWhatsAppAccount } from "./accounts-Ddm33hQm.js";
3
+ import { D as resolveSlackAccount, F as resolveDiscordAccount, O as resolveSlackReplyToMode, S as resolveTelegramAccount, _ as normalizeWhatsAppTarget } from "./plugins-BNByVCIH.js";
4
+ import { A as normalizeE164, T as escapeRegExp, i as getChatChannelMeta, l as requireActivePluginRegistry, n as CHAT_CHANNEL_ORDER } from "./registry-D0xTnUWt.js";
5
+ import { r as resolveIMessageAccount } from "./accounts-s-AdhXVR.js";
6
+ import { i as resolveSignalAccount } from "./accounts-BtaOa4z_.js";
7
7
 
8
8
  //#region src/config/group-policy.ts
9
9
  function resolveChannelGroupConfig(groups, groupId, caseInsensitive = false) {
@@ -1,4 +1,4 @@
1
- import { T as escapeRegExp } from "./registry--_pGht6S.js";
1
+ import { T as escapeRegExp } from "./registry-D0xTnUWt.js";
2
2
 
3
3
  //#region src/auto-reply/tokens.ts
4
4
  const SYMIPULSE_TOKEN = "SYMIPULSE_OK";
@@ -1,5 +1,5 @@
1
- import { t as createSubsystemLogger } from "./subsystem-Coz2AgU8.js";
2
- import { i as getImageMetadata, n as buildImageResizeSideGrid, s as resizeToJpeg, t as IMAGE_REDUCE_QUALITY_STEPS } from "./image-ops-Bnp6LXEx.js";
1
+ import { t as createSubsystemLogger } from "./subsystem-B2uDN3TV.js";
2
+ import { i as getImageMetadata, n as buildImageResizeSideGrid, s as resizeToJpeg, t as IMAGE_REDUCE_QUALITY_STEPS } from "./image-ops-BlQR__MN.js";
3
3
 
4
4
  //#region src/agents/image-sanitization.ts
5
5
  const DEFAULT_IMAGE_MAX_DIMENSION_PX = 1200;
@@ -1,6 +1,6 @@
1
1
  import "./paths-DR2yt_mP.js";
2
- import { H as isPlainObject } from "./registry--_pGht6S.js";
3
- import { t as createSubsystemLogger } from "./subsystem-Coz2AgU8.js";
2
+ import { H as isPlainObject } from "./registry-D0xTnUWt.js";
3
+ import { t as createSubsystemLogger } from "./subsystem-B2uDN3TV.js";
4
4
  import { createHash } from "node:crypto";
5
5
 
6
6
  //#region src/agents/tool-loop-detection.ts
@@ -0,0 +1,65 @@
1
+ import { a as WA_WEB_AUTH_DIR, g as webAuthExists, s as logWebSelfId, u as pickWebChannel } from "./accounts-Ddm33hQm.js";
2
+ import "./reply-BSikbH6_.js";
3
+ import "./paths-DR2yt_mP.js";
4
+ import "./github-copilot-token-D9X2phUj.js";
5
+ import "./plugins-BNByVCIH.js";
6
+ import "./fetch-CUNoPTKm.js";
7
+ import "./registry-D0xTnUWt.js";
8
+ import "./retry-CwQ_iIj8.js";
9
+ import "./send-Dw4gTEN6.js";
10
+ import "./config-ChoJh2v6.js";
11
+ import "./subsystem-B2uDN3TV.js";
12
+ import "./command-format-GKSevep4.js";
13
+ import "./model-selection-CPEL3Uc_.js";
14
+ import "./agent-scope-CYYpcO9W.js";
15
+ import "./manifest-registry-CPnHl_K3.js";
16
+ import "./redact-DPnDWsnT.js";
17
+ import "./errors-Bv8oZiTO.js";
18
+ import "./channel-activity-DoC1xtDu.js";
19
+ import "./image-ops-BlQR__MN.js";
20
+ import "./ssrf-DKZ8eBrk.js";
21
+ import "./local-roots-BHLNSI8U.js";
22
+ import "./ir-BJ6BHE5b.js";
23
+ import "./chunk-Dw2XBYXv.js";
24
+ import "./message-channel-COTAJzHd.js";
25
+ import "./bindings-C7hRtgYW.js";
26
+ import "./markdown-tables-BoYFajMu.js";
27
+ import "./render-BiJZ5W4Z.js";
28
+ import "./tables-DNwXwNFa.js";
29
+ import "./send-6DwkdgEF.js";
30
+ import "./tool-images-HJ2sfZDV.js";
31
+ import "./target-errors-Paro1BjP.js";
32
+ import "./send-BNZVvZHE.js";
33
+ import "./send-D8vgGF3T.js";
34
+ import "./runner-Co_eR7xp.js";
35
+ import "./reply-prefix-uxfMZW4p.js";
36
+ import "./tokens-bC3UVmVH.js";
37
+ import "./skill-commands-BUVE0jBL.js";
38
+ import "./skills-_yTP47Cd.js";
39
+ import "./chrome-BMG9BEuT.js";
40
+ import "./thinking-CXqf7WTe.js";
41
+ import "./accounts-s-AdhXVR.js";
42
+ import "./accounts-BtaOa4z_.js";
43
+ import "./deliver-PHupXW27.js";
44
+ import "./pi-embedded-helpers-CU4D77Op.js";
45
+ import "./paths-A0xdf3yk.js";
46
+ import "./diagnostic-05pm5Rxi.js";
47
+ import "./store-BdrNabcU.js";
48
+ import { n as monitorWebInbox, t as monitorWebChannel } from "./channel-web-Bz7z_PrR.js";
49
+ import "./image-CZeY-Q2T.js";
50
+ import "./pi-model-discovery-LbcEa65a.js";
51
+ import "./api-key-rotation-BNN7DLRF.js";
52
+ import "./sqlite-CxAR5ttJ.js";
53
+ import "./diagnostic-session-state-Wd5tNeQG.js";
54
+ import "./manager-Cn2S7u-y.js";
55
+ import "./commands-registry-B6QKgH1z.js";
56
+ import "./send-D6BxZPP0.js";
57
+ import "./proxy-MquBDehr.js";
58
+ import "./resolve-route-B3CCBumQ.js";
59
+ import "./replies-zmY9bbot.js";
60
+ import "./outbound-attachment-CnslKL38.js";
61
+ import { n as sendMessageWhatsApp } from "./outbound-ps5sAOfw.js";
62
+ import { i as waitForWaConnection, t as createWaSocket } from "./session-BTN5wyhB.js";
63
+ import { t as loginWeb } from "./login-WrHy4q1W.js";
64
+
65
+ export { WA_WEB_AUTH_DIR, createWaSocket, logWebSelfId, loginWeb, monitorWebChannel, monitorWebInbox, pickWebChannel, sendMessageWhatsApp, waitForWaConnection, webAuthExists };
@@ -1,28 +1,28 @@
1
- import { r as resolveWhatsAppAccount } from "./accounts-D9zGZU5t.js";
1
+ import { r as resolveWhatsAppAccount } from "./accounts-Ddm33hQm.js";
2
2
  import "./paths-DR2yt_mP.js";
3
3
  import "./github-copilot-token-D9X2phUj.js";
4
- import "./plugins-BbAvhC25.js";
5
- import "./registry--_pGht6S.js";
6
- import "./config-C8bdNl-t.js";
7
- import "./subsystem-Coz2AgU8.js";
8
- import "./command-format-DSdvQ_M5.js";
9
- import "./model-selection-UQwTqGSw.js";
10
- import "./agent-scope-C3gMMKCU.js";
11
- import "./manifest-registry-B3ugY9-f.js";
12
- import "./image-ops-Bnp6LXEx.js";
4
+ import "./plugins-BNByVCIH.js";
5
+ import "./registry-D0xTnUWt.js";
6
+ import "./config-ChoJh2v6.js";
7
+ import "./subsystem-B2uDN3TV.js";
8
+ import "./command-format-GKSevep4.js";
9
+ import "./model-selection-CPEL3Uc_.js";
10
+ import "./agent-scope-CYYpcO9W.js";
11
+ import "./manifest-registry-CPnHl_K3.js";
12
+ import "./image-ops-BlQR__MN.js";
13
13
  import "./ssrf-DKZ8eBrk.js";
14
- import "./local-roots-Ckk1QfzI.js";
15
- import "./ir-Fb3qpcis.js";
16
- import "./chunk-jvk9axTQ.js";
17
- import "./message-channel-BdI5Ra9S.js";
18
- import "./bindings-BbwoUGPx.js";
19
- import "./markdown-tables-Dfaqilz6.js";
14
+ import "./local-roots-BHLNSI8U.js";
15
+ import "./ir-BJ6BHE5b.js";
16
+ import "./chunk-Dw2XBYXv.js";
17
+ import "./message-channel-COTAJzHd.js";
18
+ import "./bindings-C7hRtgYW.js";
19
+ import "./markdown-tables-BoYFajMu.js";
20
20
  import "./render-BiJZ5W4Z.js";
21
- import "./tables-DR0NmBeH.js";
22
- import "./tool-images-D7Lno-TE.js";
23
- import { a as createActionGate, c as jsonResult, d as readReactionParams, i as ToolAuthorizationError, m as readStringParam } from "./target-errors-B7YyMnIi.js";
24
- import { t as resolveWhatsAppOutboundTarget } from "./resolve-outbound-target-BkCUbYGV.js";
25
- import { r as sendReactionWhatsApp } from "./outbound-BaAisH4u.js";
21
+ import "./tables-DNwXwNFa.js";
22
+ import "./tool-images-HJ2sfZDV.js";
23
+ import { a as createActionGate, c as jsonResult, d as readReactionParams, i as ToolAuthorizationError, m as readStringParam } from "./target-errors-Paro1BjP.js";
24
+ import { t as resolveWhatsAppOutboundTarget } from "./resolve-outbound-target-BiyAyTWz.js";
25
+ import { r as sendReactionWhatsApp } from "./outbound-ps5sAOfw.js";
26
26
 
27
27
  //#region src/agents/tools/whatsapp-target-auth.ts
28
28
  function resolveAuthorizedWhatsAppOutboundTarget(params) {
@@ -0,0 +1,208 @@
1
+ import { buildOauthProviderAuthResult, emptyPluginConfigSchema } from "symi/plugin-sdk";
2
+ import type { AnyAgentTool, SymiPluginApi, ProviderAuthContext } from "../../src/plugins/types.js";
3
+ import { loginOutlook } from "./src/auth.js";
4
+ import { saveCredentials, loadCredentials, deleteCredentials } from "./src/store.js";
5
+ import {
6
+ createOutlookListTool,
7
+ createOutlookReadTool,
8
+ createOutlookSendTool,
9
+ createOutlookReplyTool,
10
+ createOutlookSearchTool,
11
+ createOutlookFoldersTool,
12
+ createOutlookMoveTool,
13
+ } from "./src/tools.js";
14
+
15
+ const outlookPlugin = {
16
+ id: "outlook",
17
+ name: "Outlook 365",
18
+ description: "Outlook 365 email integration via Microsoft Graph API with OAuth2 PKCE",
19
+ configSchema: emptyPluginConfigSchema(),
20
+
21
+ register(api: SymiPluginApi) {
22
+ // -------------------------------------------------------------------------
23
+ // Agent tools — available when Outlook is connected
24
+ // -------------------------------------------------------------------------
25
+ const tools = [
26
+ createOutlookListTool,
27
+ createOutlookReadTool,
28
+ createOutlookSendTool,
29
+ createOutlookReplyTool,
30
+ createOutlookSearchTool,
31
+ createOutlookFoldersTool,
32
+ createOutlookMoveTool,
33
+ ];
34
+
35
+ for (const createTool of tools) {
36
+ api.registerTool(createTool() as unknown as AnyAgentTool, { optional: true });
37
+ }
38
+
39
+ // -------------------------------------------------------------------------
40
+ // Provider — enables `symi models add --provider outlook --auth oauth`
41
+ // and stores credentials in the standard auth profile store.
42
+ // -------------------------------------------------------------------------
43
+ api.registerProvider({
44
+ id: "outlook-mail",
45
+ label: "Outlook 365 Mail",
46
+ docsPath: "/integrations/outlook",
47
+ aliases: ["outlook"],
48
+ auth: [
49
+ {
50
+ id: "oauth",
51
+ label: "Microsoft OAuth (sign in with your account)",
52
+ hint: "PKCE + localhost callback — uses your normal Microsoft credentials",
53
+ kind: "oauth",
54
+ run: async (ctx: ProviderAuthContext) => {
55
+ const spin = ctx.prompter.progress("Starting Outlook OAuth...");
56
+ try {
57
+ const result = await loginOutlook({
58
+ isRemote: ctx.isRemote,
59
+ openUrl: ctx.openUrl,
60
+ prompt: async (message) => String(await ctx.prompter.text({ message })),
61
+ note: ctx.prompter.note,
62
+ log: (message) => ctx.runtime.log(message),
63
+ progress: spin,
64
+ });
65
+
66
+ // Persist to local credential store for the tools
67
+ saveCredentials({
68
+ access: result.access,
69
+ refresh: result.refresh,
70
+ expires: result.expires,
71
+ email: result.email,
72
+ displayName: result.displayName,
73
+ });
74
+
75
+ return buildOauthProviderAuthResult({
76
+ providerId: "outlook-mail",
77
+ defaultModel: "", // not an LLM provider
78
+ access: result.access,
79
+ refresh: result.refresh,
80
+ expires: result.expires,
81
+ email: result.email,
82
+ notes: [
83
+ result.email
84
+ ? `Connected as ${result.displayName ?? result.email}`
85
+ : "Outlook connected.",
86
+ "Email tools (outlook_list, outlook_send, outlook_search, etc.) are now available.",
87
+ "Credentials stored in ~/.symi/credentials/outlook.json",
88
+ ],
89
+ });
90
+ } catch (err) {
91
+ spin.stop("Outlook OAuth failed");
92
+ throw err;
93
+ }
94
+ },
95
+ },
96
+ ],
97
+ });
98
+
99
+ // -------------------------------------------------------------------------
100
+ // CLI — `symi outlook login`, `symi outlook logout`, `symi outlook status`
101
+ // -------------------------------------------------------------------------
102
+ api.registerCli(
103
+ ({ program }) => {
104
+ const outlook = program.command("outlook").description("Outlook 365 email integration");
105
+
106
+ outlook
107
+ .command("login")
108
+ .description("Sign in with your Microsoft account")
109
+ .action(async () => {
110
+ const { loginOutlook: login } = await import("./src/auth.js");
111
+
112
+ const isHeadless =
113
+ process.platform === "linux" && !process.env.DISPLAY && !process.env.WAYLAND_DISPLAY;
114
+
115
+ const result = await login({
116
+ isRemote: isHeadless,
117
+ openUrl: async (url) => {
118
+ if (isHeadless) {
119
+ console.log("\nOpen this URL in your browser:\n");
120
+ console.log(url);
121
+ console.log("");
122
+ return;
123
+ }
124
+ const { execSync } = await import("node:child_process");
125
+ const cmd =
126
+ process.platform === "darwin"
127
+ ? `open "${url}"`
128
+ : process.platform === "win32"
129
+ ? `start "" "${url}"`
130
+ : `xdg-open "${url}" 2>/dev/null`;
131
+ try {
132
+ execSync(cmd, { stdio: "ignore" });
133
+ } catch {
134
+ console.log(`\nOpen this URL in your browser:\n${url}\n`);
135
+ }
136
+ },
137
+ prompt: async (message) => {
138
+ const readline = await import("node:readline");
139
+ const rl = readline.createInterface({
140
+ input: process.stdin,
141
+ output: process.stdout,
142
+ });
143
+ return new Promise((resolve) => {
144
+ rl.question(message, (answer) => {
145
+ rl.close();
146
+ resolve(answer);
147
+ });
148
+ });
149
+ },
150
+ note: async (message) => {
151
+ console.log(message);
152
+ },
153
+ log: (message) => console.log(message),
154
+ progress: {
155
+ update: (msg) => process.stderr.write(`\r${msg}`),
156
+ stop: (msg) => {
157
+ if (msg) process.stderr.write(`\r${msg}\n`);
158
+ },
159
+ },
160
+ });
161
+
162
+ saveCredentials({
163
+ access: result.access,
164
+ refresh: result.refresh,
165
+ expires: result.expires,
166
+ email: result.email,
167
+ displayName: result.displayName,
168
+ });
169
+
170
+ console.log("");
171
+ console.log(
172
+ result.email
173
+ ? `Connected as ${result.displayName ?? result.email}`
174
+ : "Outlook connected.",
175
+ );
176
+ console.log("Email tools are now available to your agent.");
177
+ });
178
+
179
+ outlook
180
+ .command("logout")
181
+ .description("Disconnect Outlook and remove stored credentials")
182
+ .action(() => {
183
+ const removed = deleteCredentials();
184
+ console.log(removed ? "Outlook credentials removed." : "No credentials found.");
185
+ });
186
+
187
+ outlook
188
+ .command("status")
189
+ .description("Show Outlook connection status")
190
+ .action(() => {
191
+ const creds = loadCredentials();
192
+ if (!creds) {
193
+ console.log("Not connected. Run `symi outlook login` to sign in.");
194
+ return;
195
+ }
196
+ const expired = Date.now() >= creds.expires;
197
+ console.log(`Account: ${creds.email ?? "unknown"}`);
198
+ console.log(`Name: ${creds.displayName ?? "unknown"}`);
199
+ console.log(`Token: ${expired ? "expired (will auto-refresh)" : "valid"}`);
200
+ console.log(`Updated: ${creds.updatedAt ?? "unknown"}`);
201
+ });
202
+ },
203
+ { commands: ["outlook"] },
204
+ );
205
+ },
206
+ };
207
+
208
+ export default outlookPlugin;
@@ -0,0 +1,15 @@
1
+ {
2
+ "name": "@symi/outlook",
3
+ "version": "1.0.0",
4
+ "private": true,
5
+ "description": "Symi Outlook 365 email integration via Microsoft Graph API",
6
+ "type": "module",
7
+ "devDependencies": {
8
+ "@symerian/symi": "workspace:*"
9
+ },
10
+ "symi": {
11
+ "extensions": [
12
+ "./index.ts"
13
+ ]
14
+ }
15
+ }