@openclaw/msteams 2026.11.1 → 2026.11.2

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 (37) hide show
  1. package/dist/.setup/{adapter.runtime-BMvpm7sS.cjs → adapter.runtime-B-6Q3nMI.cjs} +5 -3
  2. package/dist/.setup/{approval-card-Bo8kHYbj.cjs → approval-card-DWPDItvq.cjs} +4 -2
  3. package/dist/.setup/{approval-handler.runtime-BS3avHFu.cjs → approval-handler.runtime-CJtz8aNI.cjs} +6 -5
  4. package/dist/.setup/{bot-framework-service-url-CgVuKiIR.cjs → bot-framework-service-url-B3FWn2SV.cjs} +4 -2
  5. package/dist/.setup/{channel-CdCSk3Rg.cjs → channel-DMWQSTtQ.cjs} +75 -38
  6. package/dist/.setup/{channel.runtime--ZjTYgkY.cjs → channel.runtime-CthqKb5j.cjs} +26 -17
  7. package/dist/.setup/{channel.setup-nSTtK77J.cjs → channel.setup-BN3uhq3r.cjs} +17 -11
  8. package/dist/.setup/{config-schema-Bm15lF-j.cjs → config-schema-CkKdphSp.cjs} +8 -5
  9. package/dist/.setup/{conversation-store-state-NJU9osd-.cjs → conversation-store-state-B-4g4uq5.cjs} +40 -23
  10. package/dist/.setup/{delegated-state-CbMd3rIh.cjs → delegated-state-Bv5cWuec.cjs} +6 -4
  11. package/dist/.setup/{monitor-BxLDs5fk.cjs → monitor-CNa939Lg.cjs} +101 -49
  12. package/dist/.setup/{oauth-B-Y5pNM4.cjs → oauth-BBUQCwmq.cjs} +5 -3
  13. package/dist/.setup/{reaction-types-BaL1EVBS.cjs → reaction-types-CwP5RVQB.cjs} +5 -3
  14. package/dist/.setup/{resolve-allowlist-CqNzS9bZ.cjs → resolve-allowlist-gI34MnpE.cjs} +34 -19
  15. package/dist/.setup/{rolldown-runtime-CiKaZLfC.cjs → rolldown-runtime-BloeesfJ.cjs} +2 -1
  16. package/dist/.setup/{runtime-CbKazLGv.cjs → runtime-gZTAuFux.cjs} +2 -1
  17. package/dist/.setup/{secret-contract-api-5aH1Fl_c.cjs → secret-contract-api-YY3v6MP8.cjs} +1 -1
  18. package/dist/.setup/{secret-contract-api-BOzdWSn9.cjs → secret-contract-api-wAyY5UHv.cjs} +2 -1
  19. package/dist/.setup/{send-BXjI3ufq.cjs → send-D48Qmug3.cjs} +11 -9
  20. package/dist/.setup/{setup-plugin-api-lPpin6Gg.cjs → setup-plugin-api-B-NYBLkF.cjs} +1 -1
  21. package/dist/.setup/{thread-session-DZMoCsSR.cjs → thread-session-BWVCoYza.cjs} +5 -3
  22. package/dist/.setup/{token-config-DTZ00Ibq.cjs → token-config-bEpua_Q7.cjs} +2 -1
  23. package/dist/api.cjs +2 -2
  24. package/dist/channel-config-api.cjs +1 -1
  25. package/dist/channel-plugin-api.cjs +1 -1
  26. package/dist/configured-state.cjs +2 -1
  27. package/dist/directory-contract-api.cjs +2 -1
  28. package/dist/doctor-backup-resources.cjs +3 -2
  29. package/dist/doctor-contract-api.cjs +15 -9
  30. package/dist/index.cjs +2 -1
  31. package/dist/qa-runner-api.cjs +5 -3
  32. package/dist/runtime-api.cjs +1 -1
  33. package/dist/secret-contract-api.cjs +1 -1
  34. package/dist/setup-entry.cjs +4 -3
  35. package/dist/setup-plugin-api.cjs +1 -1
  36. package/package.json +4 -4
  37. package/dist/.source-module-urls/7e43ee3ae4faab430a47269c8217f8d99ec60ecd85233f40e81d03efeb543068.json +0 -1
@@ -1,7 +1,7 @@
1
- const require_resolve_allowlist = require("./resolve-allowlist-CqNzS9bZ.cjs");
1
+ const require_resolve_allowlist = require("./resolve-allowlist-gI34MnpE.cjs");
2
2
  let openclaw_plugin_sdk_provider_auth = require("openclaw/plugin-sdk/provider-auth");
3
3
  let openclaw_plugin_sdk_provider_auth_runtime = require("openclaw/plugin-sdk/provider-auth-runtime");
4
- // extensions/msteams/src/oauth.flow.ts
4
+ //#region extensions/msteams/src/oauth.flow.ts
5
5
  function buildMSTeamsAuthUrl(params) {
6
6
  const scopes = params.scopes ?? require_resolve_allowlist.MSTEAMS_DEFAULT_DELEGATED_SCOPES;
7
7
  return `${require_resolve_allowlist.buildMSTeamsAuthEndpoint(params.tenantId)}?${new URLSearchParams({
@@ -15,7 +15,8 @@ function buildMSTeamsAuthUrl(params) {
15
15
  prompt: "consent"
16
16
  }).toString()}`;
17
17
  }
18
- // extensions/msteams/src/oauth.ts
18
+ //#endregion
19
+ //#region extensions/msteams/src/oauth.ts
19
20
  async function loginMSTeamsDelegated(ctx, params) {
20
21
  await ctx.note([
21
22
  "You are running in a remote/VPS environment.",
@@ -50,4 +51,5 @@ async function loginMSTeamsDelegated(ctx, params) {
50
51
  verifier
51
52
  });
52
53
  }
54
+ //#endregion
53
55
  exports.loginMSTeamsDelegated = loginMSTeamsDelegated;
@@ -1,5 +1,5 @@
1
- const require_resolve_allowlist = require("./resolve-allowlist-CqNzS9bZ.cjs");
2
- // extensions/msteams/src/graph-thread.ts
1
+ const require_resolve_allowlist = require("./resolve-allowlist-gI34MnpE.cjs");
2
+ //#region extensions/msteams/src/graph-thread.ts
3
3
  /** Keep inbound thread enrichment bounded while still reaching recent replies. */
4
4
  const MAX_REPLY_PAGES = 50;
5
5
  function compareThreadMessagesChronologically(a, b) {
@@ -88,7 +88,8 @@ function buildThreadContext(messages, currentMessageId) {
88
88
  }
89
89
  return context;
90
90
  }
91
- // extensions/msteams/src/reaction-types.ts
91
+ //#endregion
92
+ //#region extensions/msteams/src/reaction-types.ts
92
93
  const TEAMS_REACTION_EMOJI = {
93
94
  like: "👍",
94
95
  heart: "❤️",
@@ -107,6 +108,7 @@ function resolveMSTeamsReactionEmoji(raw) {
107
108
  if (!normalized) throw new Error(`Reaction type is required. Common types: ${TEAMS_REACTION_TYPES.join(", ")}`);
108
109
  return getMSTeamsReactionEmoji(normalized) ?? normalized;
109
110
  }
111
+ //#endregion
110
112
  Object.defineProperty(exports, "buildThreadContext", {
111
113
  enumerable: true,
112
114
  get: function() {
@@ -1,8 +1,8 @@
1
- const require_bot_framework_service_url = require("./bot-framework-service-url-CgVuKiIR.cjs");
2
- const require_token_config = require("./token-config-DTZ00Ibq.cjs");
3
- const require_runtime = require("./runtime-CbKazLGv.cjs");
1
+ const require_bot_framework_service_url = require("./bot-framework-service-url-B3FWn2SV.cjs");
2
+ const require_token_config = require("./token-config-bEpua_Q7.cjs");
3
+ const require_runtime = require("./runtime-gZTAuFux.cjs");
4
4
  require("../runtime-api.cjs");
5
- const require_delegated_state = require("./delegated-state-CbMd3rIh.cjs");
5
+ const require_delegated_state = require("./delegated-state-Bv5cWuec.cjs");
6
6
  let openclaw_plugin_sdk_lazy_runtime = require("openclaw/plugin-sdk/lazy-runtime");
7
7
  let openclaw_plugin_sdk_string_coerce_runtime = require("openclaw/plugin-sdk/string-coerce-runtime");
8
8
  let openclaw_plugin_sdk_account_helpers = require("openclaw/plugin-sdk/account-helpers");
@@ -22,7 +22,7 @@ let openclaw_plugin_sdk_secret_file = require("openclaw/plugin-sdk/secret-file")
22
22
  let openclaw_plugin_sdk_error_runtime = require("openclaw/plugin-sdk/error-runtime");
23
23
  let node_module = require("node:module");
24
24
  let openclaw_plugin_sdk_html_entity_runtime = require("openclaw/plugin-sdk/html-entity-runtime");
25
- // extensions/msteams/src/accounts.ts
25
+ //#region extensions/msteams/src/accounts.ts
26
26
  const { listAccountIds, resolveDefaultAccountId } = (0, openclaw_plugin_sdk_account_helpers.createAccountListHelpers)("msteams", {
27
27
  normalizeAccountId: openclaw_plugin_sdk_account_id.normalizeAccountId,
28
28
  hasImplicitDefaultAccount: (cfg) => require_token_config.hasConfiguredMSTeamsCredentials(cfg.channels?.msteams)
@@ -169,7 +169,8 @@ function inspectMSTeamsAccount(params) {
169
169
  path: account.config.webhook?.path ?? "/api/messages"
170
170
  };
171
171
  }
172
- // extensions/msteams/src/request-timeout.ts
172
+ //#endregion
173
+ //#region extensions/msteams/src/request-timeout.ts
173
174
  const MSTEAMS_REQUEST_TIMEOUT_MS = 3e4;
174
175
  const MSTEAMS_SHAREPOINT_UPLOAD_BASE_TIMEOUT_MS = 3e5;
175
176
  const MSTEAMS_SHAREPOINT_UPLOAD_MIN_BYTES_PER_SECOND = 262144;
@@ -219,7 +220,8 @@ async function withMSTeamsAbortableRequestTimeout(params) {
219
220
  throw error;
220
221
  }
221
222
  }
222
- // extensions/msteams/src/attachments/shared.ts
223
+ //#endregion
224
+ //#region extensions/msteams/src/attachments/shared.ts
223
225
  const IMAGE_EXT_RE = /\.(avif|bmp|gif|heic|heif|jpe?g|png|tiff?|webp)$/i;
224
226
  /**
225
227
  * Values of `attr` on each `<tag ...>` in document order, matching the captures of
@@ -501,7 +503,8 @@ async function safeFetchWithPolicy(params) {
501
503
  });
502
504
  return (0, openclaw_plugin_sdk_fetch_runtime.responseWithRelease)(guarded.response, guarded.release);
503
505
  }
504
- // extensions/msteams/src/cloud.ts
506
+ //#endregion
507
+ //#region extensions/msteams/src/cloud.ts
505
508
  const DEFAULT_MSTEAMS_CLOUD = "Public";
506
509
  const PUBLIC_MSTEAMS_SERVICE_HOST = "smba.trafficmanager.net";
507
510
  const CHINA_BOT_FRAMEWORK_SERVICE_HOST = "botframework.azure.cn";
@@ -547,7 +550,8 @@ function validateMSTeamsProactiveServiceUrlBoundary(params) {
547
550
  if (isChinaBotFrameworkServiceHost(stored.host)) throw new Error(`msteams proactive send blocked for ${params.conversationId}: stored conversation serviceUrl (${stored.value}) requires channels.msteams.cloud=China.`);
548
551
  if (stored.host !== PUBLIC_MSTEAMS_SERVICE_HOST) throw new Error(`msteams proactive send blocked for ${params.conversationId}: stored conversation serviceUrl (${stored.value}) is not a Microsoft Teams public-cloud Bot Connector endpoint. Set channels.msteams.cloud and channels.msteams.serviceUrl for the supported Teams cloud that owns this conversation.`);
549
552
  }
550
- // extensions/msteams/src/send-handoff.ts
553
+ //#endregion
554
+ //#region extensions/msteams/src/send-handoff.ts
551
555
  const connectorHandoff = new node_async_hooks.AsyncLocalStorage();
552
556
  function notDispatched(error) {
553
557
  return error instanceof openclaw_plugin_sdk_error_runtime.PlatformMessageNotDispatchedError ? error : new openclaw_plugin_sdk_error_runtime.PlatformMessageNotDispatchedError(error instanceof Error ? error.message : "Teams delivery authority closed", {
@@ -595,7 +599,8 @@ const msteamsConnectorHandoffInterceptor = { request: async ({ config }) => {
595
599
  };
596
600
  return config;
597
601
  } };
598
- // extensions/msteams/src/qa/private-runtime.ts
602
+ //#endregion
603
+ //#region extensions/msteams/src/qa/private-runtime.ts
599
604
  const PRIVATE_QA_BUILD_ENV = "OPENCLAW_BUILD_PRIVATE_QA";
600
605
  const PRIVATE_QA_NONCE_HEADER = "x-openclaw-msteams-qa-nonce";
601
606
  const PRIVATE_QA_RUNTIME_SYMBOL = Symbol.for("openclaw.msteams.privateQaRuntime");
@@ -655,7 +660,8 @@ function resolveMSTeamsPrivateQaRuntime(env = process.env, bootstrap = globalThi
655
660
  token: async () => botToken
656
661
  };
657
662
  }
658
- // extensions/msteams/src/user-agent.ts
663
+ //#endregion
664
+ //#region extensions/msteams/src/user-agent.ts
659
665
  let cachedUserAgent;
660
666
  function resolveTeamsSdkVersion() {
661
667
  try {
@@ -702,7 +708,8 @@ function ensureUserAgentHeader(headers) {
702
708
  if (!nextHeaders.has("User-Agent")) nextHeaders.set("User-Agent", buildUserAgent());
703
709
  return nextHeaders;
704
710
  }
705
- // extensions/msteams/src/sdk.ts
711
+ //#endregion
712
+ //#region extensions/msteams/src/sdk.ts
706
713
  const AZURE_IDENTITY_MODULE = "@azure/identity";
707
714
  const loadAzureIdentity = (0, openclaw_plugin_sdk_lazy_runtime.createLazyRuntimeModule)(() => import(AZURE_IDENTITY_MODULE));
708
715
  const loadSdkModules = (0, openclaw_plugin_sdk_lazy_runtime.createLazyRuntimeModule)(() => Promise.all([import("@microsoft/teams.apps"), import("@microsoft/teams.api")]).then(([apps, api]) => ({
@@ -771,7 +778,8 @@ function createMSTeamsTokenProvider(app) {
771
778
  return (await app.tokenProvider.getAppToken(app.cloud?.botScope ?? "https://api.botframework.com/.default"))?.toString() ?? "";
772
779
  } };
773
780
  }
774
- // extensions/msteams/src/oauth.shared.ts
781
+ //#endregion
782
+ //#region extensions/msteams/src/oauth.shared.ts
775
783
  const MSTEAMS_OAUTH_REDIRECT_URI = "http://localhost:8086/oauth2callback";
776
784
  const MSTEAMS_DEFAULT_TOKEN_FETCH_TIMEOUT_MS = 1e4;
777
785
  const MSTEAMS_DEFAULT_DELEGATED_SCOPES = [
@@ -786,7 +794,8 @@ function buildMSTeamsAuthEndpoint(tenantId) {
786
794
  function buildMSTeamsTokenEndpoint(tenantId) {
787
795
  return `https://login.microsoftonline.com/${encodeURIComponent(tenantId)}/oauth2/v2.0/token`;
788
796
  }
789
- // extensions/msteams/src/oauth.token.ts
797
+ //#endregion
798
+ //#region extensions/msteams/src/oauth.token.ts
790
799
  /** Five-minute buffer subtracted from token expiry to avoid edge-case clock drift. */
791
800
  const EXPIRY_BUFFER_MS = 3e5;
792
801
  function parseMSTeamsTokenResponse(data, failureLabel) {
@@ -876,7 +885,8 @@ async function refreshMSTeamsDelegatedTokens(params) {
876
885
  resolveRefreshToken: (data) => data.refresh_token ?? params.refreshToken
877
886
  });
878
887
  }
879
- // extensions/msteams/src/token.ts
888
+ //#endregion
889
+ //#region extensions/msteams/src/token.ts
880
890
  async function resolveDelegatedAccessToken(params) {
881
891
  const tokens = await require_delegated_state.loadMSTeamsDelegatedTokens(params.accountId);
882
892
  if (!tokens) return;
@@ -895,7 +905,8 @@ async function resolveDelegatedAccessToken(params) {
895
905
  return;
896
906
  }
897
907
  }
898
- // extensions/msteams/src/graph.ts
908
+ //#endregion
909
+ //#region extensions/msteams/src/graph.ts
899
910
  const GRAPH_BETA = "https://graph.microsoft.com/beta";
900
911
  const graphRequestCurrentness = new node_async_hooks.AsyncLocalStorage();
901
912
  function runWithMSTeamsGraphRequestCurrentness(assertCurrent, work) {
@@ -1080,7 +1091,8 @@ async function listChannelsForTeamWithPageInfo(token, teamId) {
1080
1091
  path: `/teams/${encodeURIComponent(teamId)}/channels?$select=id,displayName`
1081
1092
  });
1082
1093
  }
1083
- // extensions/msteams/src/graph-users.ts
1094
+ //#endregion
1095
+ //#region extensions/msteams/src/graph-users.ts
1084
1096
  async function searchGraphUsers(params) {
1085
1097
  const query = params.query.trim();
1086
1098
  if (!query) return [];
@@ -1115,7 +1127,8 @@ async function findGraphUsersByExactIdentity(params) {
1115
1127
  path
1116
1128
  });
1117
1129
  }
1118
- // extensions/msteams/src/inbound.ts
1130
+ //#endregion
1131
+ //#region extensions/msteams/src/inbound.ts
1119
1132
  function htmlToPlainText(html) {
1120
1133
  return (0, openclaw_plugin_sdk_html_entity_runtime.decodeHtmlEntities)(html.replace(/<[^>]*>/g, " ")).replaceAll("\xA0", " ").replace(/\s+/g, " ").trim();
1121
1134
  }
@@ -1195,7 +1208,8 @@ function wasMSTeamsBotMentioned(activity) {
1195
1208
  if (!botId) return false;
1196
1209
  return (activity.entities ?? []).some((e) => e.type === "mention" && e.mentioned?.id === botId);
1197
1210
  }
1198
- // extensions/msteams/src/resolve-allowlist.ts
1211
+ //#endregion
1212
+ //#region extensions/msteams/src/resolve-allowlist.ts
1199
1213
  const MSTEAMS_GROUP_CONVERSATION_ID = /^19:.+@thread\.(?:tacv2|skype|v2)$/i;
1200
1214
  const MSTEAMS_UNMATCHABLE_THREAD_ID = "19:openclaw-unresolved-allowlist@thread.unresolved";
1201
1215
  /** Keeps a configured but fully unresolvable sender allowlist configured and matching nothing. */
@@ -1650,6 +1664,7 @@ async function resolveMSTeamsUserAllowlist(params) {
1650
1664
  }
1651
1665
  });
1652
1666
  }
1667
+ //#endregion
1653
1668
  Object.defineProperty(exports, "GRAPH_ROOT", {
1654
1669
  enumerable: true,
1655
1670
  get: function() {
@@ -1,4 +1,4 @@
1
- // \0rolldown/runtime.js
1
+ //#region \0rolldown/runtime.js
2
2
  var __create = Object.create;
3
3
  var __defProp = Object.defineProperty;
4
4
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
@@ -29,6 +29,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
29
29
  value: mod,
30
30
  enumerable: true
31
31
  }) : target, mod));
32
+ //#endregion
32
33
  Object.defineProperty(exports, "__exportAll", {
33
34
  enumerable: true,
34
35
  get: function() {
@@ -1,8 +1,9 @@
1
- // extensions/msteams/src/runtime.ts
1
+ //#region extensions/msteams/src/runtime.ts
2
2
  const { setRuntime: setMSTeamsRuntime, getRuntime: getMSTeamsRuntime, tryGetRuntime: getOptionalMSTeamsRuntime } = (0, require("openclaw/plugin-sdk/runtime-store").createPluginRuntimeStore)({
3
3
  pluginId: "msteams",
4
4
  errorMessage: "MSTeams runtime not initialized"
5
5
  });
6
+ //#endregion
6
7
  Object.defineProperty(exports, "getMSTeamsRuntime", {
7
8
  enumerable: true,
8
9
  get: function() {
@@ -1,4 +1,4 @@
1
- const require_secret_contract_api = require("./secret-contract-api-BOzdWSn9.cjs");
1
+ const require_secret_contract_api = require("./secret-contract-api-wAyY5UHv.cjs");
2
2
  exports.channelSecrets = require_secret_contract_api.channelSecrets;
3
3
  exports.collectRuntimeConfigAssignments = require_secret_contract_api.collectRuntimeConfigAssignments;
4
4
  exports.secretTargetRegistryEntries = require_secret_contract_api.secretTargetRegistryEntries;
@@ -1,6 +1,6 @@
1
1
  let openclaw_plugin_sdk_setup = require("openclaw/plugin-sdk/setup");
2
2
  let openclaw_plugin_sdk_channel_secret_basic_runtime = require("openclaw/plugin-sdk/channel-secret-basic-runtime");
3
- // extensions/msteams/src/secret-contract.ts
3
+ //#region extensions/msteams/src/secret-contract.ts
4
4
  const secretTargetRegistryEntries = (0, openclaw_plugin_sdk_channel_secret_basic_runtime.createChannelSecretTargetRegistryEntries)({
5
5
  channelKey: "msteams",
6
6
  account: ["appPassword"],
@@ -64,6 +64,7 @@ const channelSecrets = {
64
64
  secretTargetRegistryEntries,
65
65
  collectRuntimeConfigAssignments
66
66
  };
67
+ //#endregion
67
68
  Object.defineProperty(exports, "channelSecrets", {
68
69
  enumerable: true,
69
70
  get: function() {
@@ -1,11 +1,11 @@
1
- const require_bot_framework_service_url = require("./bot-framework-service-url-CgVuKiIR.cjs");
2
- const require_token_config = require("./token-config-DTZ00Ibq.cjs");
3
- const require_resolve_allowlist = require("./resolve-allowlist-CqNzS9bZ.cjs");
4
- const require_runtime = require("./runtime-CbKazLGv.cjs");
1
+ const require_bot_framework_service_url = require("./bot-framework-service-url-B3FWn2SV.cjs");
2
+ const require_token_config = require("./token-config-bEpua_Q7.cjs");
3
+ const require_resolve_allowlist = require("./resolve-allowlist-gI34MnpE.cjs");
4
+ const require_runtime = require("./runtime-gZTAuFux.cjs");
5
5
  require("../runtime-api.cjs");
6
- const require_channel = require("./channel-CdCSk3Rg.cjs");
7
- const require_channel_setup = require("./channel.setup-nSTtK77J.cjs");
8
- const require_conversation_store_state = require("./conversation-store-state-NJU9osd-.cjs");
6
+ const require_channel = require("./channel-DMWQSTtQ.cjs");
7
+ const require_channel_setup = require("./channel.setup-BN3uhq3r.cjs");
8
+ const require_conversation_store_state = require("./conversation-store-state-B-4g4uq5.cjs");
9
9
  let openclaw_plugin_sdk_channel_outbound = require("openclaw/plugin-sdk/channel-outbound");
10
10
  let openclaw_plugin_sdk_string_coerce_runtime = require("openclaw/plugin-sdk/string-coerce-runtime");
11
11
  let openclaw_plugin_sdk_account_id = require("openclaw/plugin-sdk/account-id");
@@ -14,7 +14,7 @@ let openclaw_plugin_sdk_channel_inbound = require("openclaw/plugin-sdk/channel-i
14
14
  let openclaw_plugin_sdk_markdown_table_runtime = require("openclaw/plugin-sdk/markdown-table-runtime");
15
15
  let openclaw_plugin_sdk_account_helpers = require("openclaw/plugin-sdk/account-helpers");
16
16
  let openclaw_plugin_sdk_outbound_media = require("openclaw/plugin-sdk/outbound-media");
17
- // extensions/msteams/src/send-context.ts
17
+ //#region extensions/msteams/src/send-context.ts
18
18
  function resolveMSTeamsProactiveReplyTarget(params) {
19
19
  const threadRootId = params.ref.threadId ?? params.ref.activityId;
20
20
  if (params.conversationType !== "channel" || !threadRootId) return { replyStyle: "top-level" };
@@ -168,7 +168,8 @@ async function resolveMSTeamsSendContext(params) {
168
168
  mediaMaxBytes
169
169
  };
170
170
  }
171
- // extensions/msteams/src/send.ts
171
+ //#endregion
172
+ //#region extensions/msteams/src/send.ts
172
173
  function createMSTeamsSendError(errorPrefix, error) {
173
174
  if (error instanceof Error && (error instanceof openclaw_plugin_sdk_error_runtime.PlatformMessageNotDispatchedError || (0, openclaw_plugin_sdk_channel_inbound.isChannelPartialDeliveryError)(error))) return error;
174
175
  const classification = require_channel_setup.classifyMSTeamsSendError(error);
@@ -578,6 +579,7 @@ async function mutateMSTeamsMessageActivity(params) {
578
579
  });
579
580
  return { conversationId };
580
581
  }
582
+ //#endregion
581
583
  Object.defineProperty(exports, "deleteMessageMSTeams", {
582
584
  enumerable: true,
583
585
  get: function() {
@@ -1,3 +1,3 @@
1
- const require_channel_setup = require("./channel.setup-nSTtK77J.cjs");
1
+ const require_channel_setup = require("./channel.setup-BN3uhq3r.cjs");
2
2
  require("../setup-plugin-api.cjs");
3
3
  exports.msteamsSetupPlugin = require_channel_setup.msteamsSetupPlugin;
@@ -1,8 +1,8 @@
1
- const require_resolve_allowlist = require("./resolve-allowlist-CqNzS9bZ.cjs");
1
+ const require_resolve_allowlist = require("./resolve-allowlist-gI34MnpE.cjs");
2
2
  let openclaw_plugin_sdk_string_coerce_runtime = require("openclaw/plugin-sdk/string-coerce-runtime");
3
3
  let openclaw_plugin_sdk_approval_auth_runtime = require("openclaw/plugin-sdk/approval-auth-runtime");
4
4
  let openclaw_plugin_sdk_routing = require("openclaw/plugin-sdk/routing");
5
- // extensions/msteams/src/approval-auth.ts
5
+ //#region extensions/msteams/src/approval-auth.ts
6
6
  const MSTEAMS_ID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
7
7
  function normalizeMSTeamsApproverId(value) {
8
8
  const normalized = require_resolve_allowlist.normalizeMSTeamsMessagingTarget(String(value));
@@ -34,7 +34,8 @@ const msTeamsApprovalAuth = { authorizeActorAction(params) {
34
34
  };
35
35
  return msTeamsApproval.approvalAuth.authorizeActorAction(params);
36
36
  } };
37
- // extensions/msteams/src/monitor-handler/thread-session.ts
37
+ //#endregion
38
+ //#region extensions/msteams/src/monitor-handler/thread-session.ts
38
39
  const TRAILING_THREAD_SUFFIX = /(?::thread:[^:]+)+$/;
39
40
  function resolveMSTeamsRouteSessionKey(params) {
40
41
  const channelThreadId = params.isChannel ? params.conversationMessageId ?? params.replyToId ?? void 0 : void 0;
@@ -45,6 +46,7 @@ function resolveMSTeamsRouteSessionKey(params) {
45
46
  parentSessionKey: channelThreadId ? cleanBase : void 0
46
47
  }).sessionKey;
47
48
  }
49
+ //#endregion
48
50
  Object.defineProperty(exports, "getMSTeamsApprovalApprovers", {
49
51
  enumerable: true,
50
52
  get: function() {
@@ -1,6 +1,6 @@
1
1
  let openclaw_plugin_sdk_string_coerce_runtime = require("openclaw/plugin-sdk/string-coerce-runtime");
2
2
  let openclaw_plugin_sdk_secret_input = require("openclaw/plugin-sdk/secret-input");
3
- // extensions/msteams/src/token-config.ts
3
+ //#region extensions/msteams/src/token-config.ts
4
4
  function resolveAuthType(cfg, options) {
5
5
  const fromCfg = cfg?.authType;
6
6
  if (fromCfg === "secret" || fromCfg === "federated") return fromCfg;
@@ -72,6 +72,7 @@ function inspectMSTeamsCredentials(cfg, options) {
72
72
  if ((0, openclaw_plugin_sdk_secret_input.hasConfiguredSecretInput)(cfg?.appPassword)) return { status: "configured_unavailable" };
73
73
  return (allowEnvFallback ? (0, openclaw_plugin_sdk_secret_input.normalizeSecretInputString)(process.env.MSTEAMS_APP_PASSWORD) : void 0) ? { status: "available" } : { status: "missing" };
74
74
  }
75
+ //#endregion
75
76
  Object.defineProperty(exports, "hasConfiguredMSTeamsCredentials", {
76
77
  enumerable: true,
77
78
  get: function() {
package/dist/api.cjs CHANGED
@@ -1,6 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_channel = require("./.setup/channel-CdCSk3Rg.cjs");
3
- const require_channel_setup = require("./.setup/channel.setup-nSTtK77J.cjs");
2
+ const require_channel = require("./.setup/channel-DMWQSTtQ.cjs");
3
+ const require_channel_setup = require("./.setup/channel.setup-BN3uhq3r.cjs");
4
4
  exports.createMSTeamsSetupWizardBase = require_channel_setup.createMSTeamsSetupWizardBase;
5
5
  exports.msteamsPlugin = require_channel.msteamsPlugin;
6
6
  exports.msteamsSetupAdapter = require_channel_setup.msteamsSetupAdapter;
@@ -1,3 +1,3 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_config_schema = require("./.setup/config-schema-Bm15lF-j.cjs");
2
+ const require_config_schema = require("./.setup/config-schema-CkKdphSp.cjs");
3
3
  exports.MSTeamsChannelConfigSchema = require_config_schema.MSTeamsChannelConfigSchema;
@@ -1,3 +1,3 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_channel = require("./.setup/channel-CdCSk3Rg.cjs");
2
+ const require_channel = require("./.setup/channel-DMWQSTtQ.cjs");
3
3
  exports.msteamsPlugin = require_channel.msteamsPlugin;
@@ -1,6 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  let openclaw_plugin_sdk_secret_input = require("openclaw/plugin-sdk/secret-input");
3
- // extensions/msteams/configured-state.ts
3
+ //#region extensions/msteams/configured-state.ts
4
4
  /** Mirror Teams auth-mode requirements without loading the Azure SDK or full channel. */
5
5
  function hasConfiguredMSTeamsChannelState(params) {
6
6
  const config = params.cfg.channels?.msteams;
@@ -15,4 +15,5 @@ function hasConfiguredMSTeamsChannelState(params) {
15
15
  }
16
16
  return config && Object.hasOwn(config, "appPassword") ? (0, openclaw_plugin_sdk_secret_input.hasConfiguredSecretInput)(config.appPassword) : Boolean((0, openclaw_plugin_sdk_secret_input.normalizeSecretInputString)(env.MSTEAMS_APP_PASSWORD));
17
17
  }
18
+ //#endregion
18
19
  exports.hasConfiguredMSTeamsChannelState = hasConfiguredMSTeamsChannelState;
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_resolve_allowlist = require("./.setup/resolve-allowlist-CqNzS9bZ.cjs");
2
+ const require_resolve_allowlist = require("./.setup/resolve-allowlist-gI34MnpE.cjs");
3
3
  let openclaw_plugin_sdk_directory_runtime = require("openclaw/plugin-sdk/directory-runtime");
4
4
  const msteamsDirectoryContractPlugin = {
5
5
  id: "msteams",
@@ -41,4 +41,5 @@ const msteamsDirectoryContractPlugin = {
41
41
  }
42
42
  }
43
43
  };
44
+ //#endregion
44
45
  exports.msteamsDirectoryContractPlugin = msteamsDirectoryContractPlugin;
@@ -1,8 +1,8 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_rolldown_runtime = require("./.setup/rolldown-runtime-CiKaZLfC.cjs");
2
+ const require_rolldown_runtime = require("./.setup/rolldown-runtime-BloeesfJ.cjs");
3
3
  let node_path = require("node:path");
4
4
  node_path = require_rolldown_runtime.__toESM(node_path, 1);
5
- // extensions/msteams/doctor-backup-resources.ts
5
+ //#region extensions/msteams/doctor-backup-resources.ts
6
6
  function stateFileArchiveDirectory(filePath) {
7
7
  return `${filePath}.archives`;
8
8
  }
@@ -16,5 +16,6 @@ function stateFileBackupResources(stateDir, filename) {
16
16
  kind: "directory"
17
17
  }];
18
18
  }
19
+ //#endregion
19
20
  exports.stateFileArchiveDirectory = stateFileArchiveDirectory;
20
21
  exports.stateFileBackupResources = stateFileBackupResources;
@@ -1,7 +1,7 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_rolldown_runtime = require("./.setup/rolldown-runtime-CiKaZLfC.cjs");
3
- const require_token_config = require("./.setup/token-config-DTZ00Ibq.cjs");
4
- const require_delegated_state = require("./.setup/delegated-state-CbMd3rIh.cjs");
2
+ const require_rolldown_runtime = require("./.setup/rolldown-runtime-BloeesfJ.cjs");
3
+ const require_token_config = require("./.setup/token-config-bEpua_Q7.cjs");
4
+ const require_delegated_state = require("./.setup/delegated-state-Bv5cWuec.cjs");
5
5
  const require_doctor_backup_resources = require("./doctor-backup-resources.cjs");
6
6
  let openclaw_plugin_sdk_string_coerce_runtime = require("openclaw/plugin-sdk/string-coerce-runtime");
7
7
  let openclaw_plugin_sdk_error_runtime = require("openclaw/plugin-sdk/error-runtime");
@@ -10,7 +10,7 @@ node_path = require_rolldown_runtime.__toESM(node_path, 1);
10
10
  let node_fs_promises = require("node:fs/promises");
11
11
  node_fs_promises = require_rolldown_runtime.__toESM(node_fs_promises, 1);
12
12
  let openclaw_plugin_sdk_session_store_paths = require("openclaw/plugin-sdk/session-store-paths");
13
- // packages/normalization-core/src/record-coerce.ts
13
+ //#region packages/normalization-core/src/record-coerce.ts
14
14
  /** Type guard for non-array object records at browser-safe boundaries. */
15
15
  function isRecord$1(value) {
16
16
  return value !== null && typeof value === "object" && !Array.isArray(value);
@@ -19,7 +19,8 @@ function isRecord$1(value) {
19
19
  function asNullableRecord(value) {
20
20
  return isRecord$1(value) ? value : null;
21
21
  }
22
- // src/config/channel-config-normalization.ts
22
+ //#endregion
23
+ //#region src/config/channel-config-normalization.ts
23
24
  /** Applies one channel-specific doctor migration to every object-shaped account. */
24
25
  function normalizeChannelAccounts(params) {
25
26
  const rawAccounts = asNullableRecord(params.entry.accounts);
@@ -95,7 +96,8 @@ function normalizeChannelConfigEntries(params) {
95
96
  changes
96
97
  };
97
98
  }
98
- // src/plugin-sdk/legacy-webhook-listener-migration.ts
99
+ //#endregion
100
+ //#region src/plugin-sdk/legacy-webhook-listener-migration.ts
99
101
  /** Preserve explicitly configured webhook listeners while moving ingress onto Gateway routes. */
100
102
  function createLegacyWebhookListenerDoctorContract(params) {
101
103
  const portKey = params.portKey ?? "webhookPort";
@@ -165,10 +167,12 @@ function createLegacyWebhookListenerDoctorContract(params) {
165
167
  }
166
168
  };
167
169
  }
168
- // \0openclaw:bundled-sdk:openclaw/plugin-sdk/runtime-doctor-migrations
170
+ //#endregion
171
+ //#region \0openclaw:bundled-sdk:openclaw/plugin-sdk/runtime-doctor-migrations
169
172
  var runtime_doctor_migrations_exports = /* @__PURE__ */ require_rolldown_runtime.__exportAll({ createLegacyWebhookListenerDoctorContract: () => createLegacyWebhookListenerDoctorContract });
170
173
  require_rolldown_runtime.__reExport(runtime_doctor_migrations_exports, require("openclaw/plugin-sdk/runtime-doctor-migrations"));
171
- // extensions/msteams/config-doctor-api.ts
174
+ //#endregion
175
+ //#region extensions/msteams/config-doctor-api.ts
172
176
  const webhookMigration = createLegacyWebhookListenerDoctorContract({
173
177
  channelKey: "msteams",
174
178
  defaultPort: 3978,
@@ -199,7 +203,8 @@ function normalizeCompatibilityConfig({ cfg }) {
199
203
  historicalWebhookAccountIds: webhook.historicalWebhookAccountIds
200
204
  };
201
205
  }
202
- // extensions/msteams/doctor-contract-api.ts
206
+ //#endregion
207
+ //#region extensions/msteams/doctor-contract-api.ts
203
208
  const MSTEAMS_PLUGIN_ID = "Microsoft Teams";
204
209
  function listAgentIds(config) {
205
210
  const ids = /* @__PURE__ */ new Set(["main"]);
@@ -341,6 +346,7 @@ const stateMigrations = [
341
346
  },
342
347
  retiredJsonMigration("feedback-learnings", "feedback learnings", hasRetiredLearnings)
343
348
  ];
349
+ //#endregion
344
350
  exports.historicalWebhookListener = historicalWebhookListener;
345
351
  exports.legacyConfigRules = legacyConfigRules;
346
352
  exports.normalizeCompatibilityConfig = normalizeCompatibilityConfig;
package/dist/index.cjs CHANGED
@@ -1,4 +1,4 @@
1
- // extensions/msteams/index.ts
1
+ //#region extensions/msteams/index.ts
2
2
  var msteams_default = (0, require("openclaw/plugin-sdk/channel-entry-contract").defineBundledChannelEntry)({
3
3
  id: "msteams",
4
4
  name: "Microsoft Teams",
@@ -17,4 +17,5 @@ var msteams_default = (0, require("openclaw/plugin-sdk/channel-entry-contract").
17
17
  exportName: "setMSTeamsRuntime"
18
18
  }
19
19
  });
20
+ //#endregion
20
21
  module.exports = msteams_default;
@@ -1,9 +1,10 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  let openclaw_plugin_sdk_qa_runner_runtime = require("openclaw/plugin-sdk/qa-runner-runtime");
3
- // extensions/msteams/src/qa/cli.ts
3
+ //#region extensions/msteams/src/qa/cli.ts
4
4
  const DEFAULT_MSTEAMS_QA_SCENARIOS = ["channel-canary"];
5
- const loadMSTeamsQaAdapterRuntime = (0, openclaw_plugin_sdk_qa_runner_runtime.createLazyCliRuntimeLoader)(() => Promise.resolve().then(() => require("./.setup/adapter.runtime-BMvpm7sS.cjs")));
6
- // extensions/msteams/qa-runner-api.ts
5
+ const loadMSTeamsQaAdapterRuntime = (0, openclaw_plugin_sdk_qa_runner_runtime.createLazyCliRuntimeLoader)(() => Promise.resolve().then(() => require("./.setup/adapter.runtime-B-6Q3nMI.cjs")));
6
+ //#endregion
7
+ //#region extensions/msteams/qa-runner-api.ts
7
8
  const qaRunnerCliRegistrations = [(0, openclaw_plugin_sdk_qa_runner_runtime.createLiveTransportQaCliRegistration)({
8
9
  commandName: "msteams",
9
10
  adapterFactory: {
@@ -30,4 +31,5 @@ const qaRunnerCliRegistrations = [(0, openclaw_plugin_sdk_qa_runner_runtime.crea
30
31
  });
31
32
  }
32
33
  })];
34
+ //#endregion
33
35
  exports.qaRunnerCliRegistrations = qaRunnerCliRegistrations;
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_runtime = require("./.setup/runtime-CbKazLGv.cjs");
2
+ const require_runtime = require("./.setup/runtime-gZTAuFux.cjs");
3
3
  let openclaw_plugin_sdk_channel_outbound = require("openclaw/plugin-sdk/channel-outbound");
4
4
  let openclaw_plugin_sdk_channel_pairing = require("openclaw/plugin-sdk/channel-pairing");
5
5
  let openclaw_plugin_sdk_account_helpers = require("openclaw/plugin-sdk/account-helpers");
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_secret_contract_api = require("./.setup/secret-contract-api-BOzdWSn9.cjs");
2
+ const require_secret_contract_api = require("./.setup/secret-contract-api-wAyY5UHv.cjs");
3
3
  exports.channelSecrets = require_secret_contract_api.channelSecrets;
4
4
  exports.collectRuntimeConfigAssignments = require_secret_contract_api.collectRuntimeConfigAssignments;
5
5
  exports.secretTargetRegistryEntries = require_secret_contract_api.secretTargetRegistryEntries;
@@ -1,15 +1,16 @@
1
1
  let openclaw_plugin_sdk_channel_entry_contract = require("openclaw/plugin-sdk/channel-entry-contract");
2
2
  let node_url = require("node:url");
3
- // extensions/msteams/setup-entry.ts
3
+ //#region extensions/msteams/setup-entry.ts
4
4
  var setup_entry_default = (0, openclaw_plugin_sdk_channel_entry_contract.defineBundledChannelSetupEntry)({
5
5
  importMetaUrl: require("url").pathToFileURL(__filename).href,
6
6
  plugin: {
7
- specifier: (0, node_url.fileURLToPath)(new URL(".setup/setup-plugin-api-lPpin6Gg.cjs", require("url").pathToFileURL(__filename).href).href),
7
+ specifier: (0, node_url.fileURLToPath)(new URL(".setup/setup-plugin-api-B-NYBLkF.cjs", require("url").pathToFileURL(__filename).href).href),
8
8
  exportName: "msteamsSetupPlugin"
9
9
  },
10
10
  secrets: {
11
- specifier: (0, node_url.fileURLToPath)(new URL(".setup/secret-contract-api-5aH1Fl_c.cjs", require("url").pathToFileURL(__filename).href).href),
11
+ specifier: (0, node_url.fileURLToPath)(new URL(".setup/secret-contract-api-YY3v6MP8.cjs", require("url").pathToFileURL(__filename).href).href),
12
12
  exportName: "channelSecrets"
13
13
  }
14
14
  });
15
+ //#endregion
15
16
  module.exports = setup_entry_default;
@@ -1,3 +1,3 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_channel_setup = require("./.setup/channel.setup-nSTtK77J.cjs");
2
+ const require_channel_setup = require("./.setup/channel.setup-BN3uhq3r.cjs");
3
3
  exports.msteamsSetupPlugin = require_channel_setup.msteamsSetupPlugin;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openclaw/msteams",
3
- "version": "2026.11.1",
3
+ "version": "2026.11.2",
4
4
  "description": "OpenClaw Microsoft Teams channel plugin for bot conversations.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -22,7 +22,7 @@
22
22
  "openclaw": "workspace:*"
23
23
  },
24
24
  "peerDependencies": {
25
- "openclaw": ">=2026.11.1"
25
+ "openclaw": ">=2026.11.2"
26
26
  },
27
27
  "peerDependenciesMeta": {
28
28
  "openclaw": {
@@ -124,10 +124,10 @@
124
124
  "minHostVersion": ">=2026.4.10"
125
125
  },
126
126
  "compat": {
127
- "pluginApi": ">=2026.11.1"
127
+ "pluginApi": ">=2026.11.2"
128
128
  },
129
129
  "build": {
130
- "openclawVersion": "2026.11.1",
130
+ "openclawVersion": "2026.11.2",
131
131
  "runtimeFormat": "cjs"
132
132
  },
133
133
  "release": {