@openclaw/msteams 2026.10.10-beta.3 → 2026.10.10-beta.5

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.
@@ -1,7 +1,7 @@
1
- const require_resolve_allowlist = require("./resolve-allowlist-tYgAHx0t.cjs");
2
- const require_channel = require("./channel-B7Gy3QUW.cjs");
1
+ const require_resolve_allowlist = require("./resolve-allowlist-gI34MnpE.cjs");
2
+ const require_channel = require("./channel-Du4L0JEh.cjs");
3
3
  const require_approval_card = require("./approval-card-DWPDItvq.cjs");
4
- const require_send = require("./send-Bgm8RYUa.cjs");
4
+ const require_send = require("./send-ZvscULyk.cjs");
5
5
  let openclaw_plugin_sdk_account_id = require("openclaw/plugin-sdk/account-id");
6
6
  let openclaw_plugin_sdk_approval_native_runtime = require("openclaw/plugin-sdk/approval-native-runtime");
7
7
  let openclaw_plugin_sdk_approval_handler_runtime = require("openclaw/plugin-sdk/approval-handler-runtime");
@@ -1,9 +1,9 @@
1
1
  const require_rolldown_runtime = require("./rolldown-runtime-BloeesfJ.cjs");
2
- const require_resolve_allowlist = require("./resolve-allowlist-tYgAHx0t.cjs");
2
+ const require_resolve_allowlist = require("./resolve-allowlist-gI34MnpE.cjs");
3
3
  require("../runtime-api.cjs");
4
4
  const require_directory_contract_api = require("../directory-contract-api.cjs");
5
- const require_thread_session = require("./thread-session-C7KTMwLU.cjs");
6
- const require_channel_setup = require("./channel.setup-B5ClEcNI.cjs");
5
+ const require_thread_session = require("./thread-session-BWVCoYza.cjs");
6
+ const require_channel_setup = require("./channel.setup-BN3uhq3r.cjs");
7
7
  let openclaw_plugin_sdk_approval_handler_adapter_runtime = require("openclaw/plugin-sdk/approval-handler-adapter-runtime");
8
8
  let openclaw_plugin_sdk_channel_actions = require("openclaw/plugin-sdk/channel-actions");
9
9
  let openclaw_plugin_sdk_channel_core = require("openclaw/plugin-sdk/channel-core");
@@ -302,7 +302,7 @@ const msTeamsLazyApprovalNativeRuntime = (0, openclaw_plugin_sdk_approval_handle
302
302
  request
303
303
  }),
304
304
  load: async () => {
305
- const { msTeamsApprovalNativeRuntime } = await Promise.resolve().then(() => require("./approval-handler.runtime-DccVf5AY.cjs"));
305
+ const { msTeamsApprovalNativeRuntime } = await Promise.resolve().then(() => require("./approval-handler.runtime-CGIr9ItR.cjs"));
306
306
  return msTeamsApprovalNativeRuntime;
307
307
  }
308
308
  });
@@ -1005,7 +1005,7 @@ const collectMSTeamsSecurityFindings = openclaw_plugin_sdk_channel_policy.create
1005
1005
  severity: "warn",
1006
1006
  title: "MS Teams security warning"
1007
1007
  });
1008
- const loadMSTeamsChannelRuntime = (0, openclaw_plugin_sdk_lazy_runtime.createLazyRuntimeNamedExport)(() => Promise.resolve().then(() => require("./channel.runtime-DzKeQAqd.cjs")), "msTeamsChannelRuntime");
1008
+ const loadMSTeamsChannelRuntime = (0, openclaw_plugin_sdk_lazy_runtime.createLazyRuntimeNamedExport)(() => Promise.resolve().then(() => require("./channel.runtime-3-5Ty0Vy.cjs")), "msTeamsChannelRuntime");
1009
1009
  const MSTEAMS_REACTION_TYPES = [
1010
1010
  "like",
1011
1011
  "heart",
@@ -1514,7 +1514,7 @@ const msteamsPlugin = (0, openclaw_plugin_sdk_channel_core.createChatChannelPlug
1514
1514
  })
1515
1515
  }),
1516
1516
  gateway: { startAccount: async (ctx) => {
1517
- const { monitorMSTeamsProvider } = await Promise.resolve().then(() => require("./monitor-CzRI-Hsc.cjs"));
1517
+ const { monitorMSTeamsProvider } = await Promise.resolve().then(() => require("./monitor-DK0bsDpk.cjs"));
1518
1518
  const account = require_resolve_allowlist.resolveMSTeamsAccount({
1519
1519
  cfg: ctx.cfg,
1520
1520
  accountId: ctx.accountId
@@ -1,12 +1,12 @@
1
1
  const require_token_config = require("./token-config-bEpua_Q7.cjs");
2
- const require_resolve_allowlist = require("./resolve-allowlist-tYgAHx0t.cjs");
2
+ const require_resolve_allowlist = require("./resolve-allowlist-gI34MnpE.cjs");
3
3
  require("../runtime-api.cjs");
4
4
  const require_delegated_state = require("./delegated-state-Bv5cWuec.cjs");
5
- const require_channel = require("./channel-B7Gy3QUW.cjs");
6
- const require_channel_setup = require("./channel.setup-B5ClEcNI.cjs");
7
- const require_conversation_store_state = require("./conversation-store-state-C3__T9mK.cjs");
8
- const require_send = require("./send-Bgm8RYUa.cjs");
9
- const require_reaction_types = require("./reaction-types-DSQWVA4Z.cjs");
5
+ const require_channel = require("./channel-Du4L0JEh.cjs");
6
+ const require_channel_setup = require("./channel.setup-BN3uhq3r.cjs");
7
+ const require_conversation_store_state = require("./conversation-store-state-B-4g4uq5.cjs");
8
+ const require_send = require("./send-ZvscULyk.cjs");
9
+ const require_reaction_types = require("./reaction-types-CwP5RVQB.cjs");
10
10
  let openclaw_plugin_sdk_channel_outbound = require("openclaw/plugin-sdk/channel-outbound");
11
11
  let openclaw_plugin_sdk_string_coerce_runtime = require("openclaw/plugin-sdk/string-coerce-runtime");
12
12
  let openclaw_plugin_sdk_account_id = require("openclaw/plugin-sdk/account-id");
@@ -1,5 +1,5 @@
1
1
  const require_token_config = require("./token-config-bEpua_Q7.cjs");
2
- const require_resolve_allowlist = require("./resolve-allowlist-tYgAHx0t.cjs");
2
+ const require_resolve_allowlist = require("./resolve-allowlist-gI34MnpE.cjs");
3
3
  require("../runtime-api.cjs");
4
4
  const require_delegated_state = require("./delegated-state-Bv5cWuec.cjs");
5
5
  const require_config_schema = require("./config-schema-CkKdphSp.cjs");
@@ -827,7 +827,7 @@ const msteamsSetupWizard = {
827
827
  };
828
828
  let oauthModule;
829
829
  try {
830
- oauthModule = await Promise.resolve().then(() => require("./oauth-D9u8sPCD.cjs"));
830
+ oauthModule = await Promise.resolve().then(() => require("./oauth-BBUQCwmq.cjs"));
831
831
  } catch (err) {
832
832
  await noteDelegatedAuthFailure(err);
833
833
  return {
@@ -1,10 +1,10 @@
1
1
  const require_rolldown_runtime = require("./rolldown-runtime-BloeesfJ.cjs");
2
2
  const require_bot_framework_service_url = require("./bot-framework-service-url-B3FWn2SV.cjs");
3
- const require_resolve_allowlist = require("./resolve-allowlist-tYgAHx0t.cjs");
3
+ const require_resolve_allowlist = require("./resolve-allowlist-gI34MnpE.cjs");
4
4
  const require_runtime = require("./runtime-gZTAuFux.cjs");
5
5
  require("../runtime-api.cjs");
6
6
  const require_delegated_state = require("./delegated-state-Bv5cWuec.cjs");
7
- const require_channel_setup = require("./channel.setup-B5ClEcNI.cjs");
7
+ const require_channel_setup = require("./channel.setup-BN3uhq3r.cjs");
8
8
  let openclaw_plugin_sdk_lazy_runtime = require("openclaw/plugin-sdk/lazy-runtime");
9
9
  let openclaw_plugin_sdk_string_coerce_runtime = require("openclaw/plugin-sdk/string-coerce-runtime");
10
10
  let openclaw_plugin_sdk_account_id = require("openclaw/plugin-sdk/account-id");
@@ -610,7 +610,8 @@ function protectMSTeamsCode(ir, tokenPrefix, code, protectedValues) {
610
610
  }
611
611
  const rendered = renderMSTeamsCode(codeStyle, source);
612
612
  let quoted = quoteDepth > 0 ? `${"> ".repeat(quoteDepth)}${rendered.replaceAll("\n", `\n${"> ".repeat(quoteDepth)}`)}` : rendered;
613
- if (hasTrailingQuotedText && !quoted.endsWith("\n")) quoted += "\n";
613
+ const followedByText = codeStyle === "code_block" && span.end < ir.text.length && ir.text[span.end] !== "\n";
614
+ if ((hasTrailingQuotedText || followedByText) && !quoted.endsWith("\n")) quoted += "\n";
614
615
  const index = code.push(quoted) - 1;
615
616
  return {
616
617
  start: span.start,
@@ -1,15 +1,15 @@
1
1
  const require_rolldown_runtime = require("./rolldown-runtime-BloeesfJ.cjs");
2
2
  const require_bot_framework_service_url = require("./bot-framework-service-url-B3FWn2SV.cjs");
3
- const require_resolve_allowlist = require("./resolve-allowlist-tYgAHx0t.cjs");
3
+ const require_resolve_allowlist = require("./resolve-allowlist-gI34MnpE.cjs");
4
4
  const require_runtime = require("./runtime-gZTAuFux.cjs");
5
5
  require("../runtime-api.cjs");
6
6
  const require_delegated_state = require("./delegated-state-Bv5cWuec.cjs");
7
- const require_channel = require("./channel-B7Gy3QUW.cjs");
8
- const require_thread_session = require("./thread-session-C7KTMwLU.cjs");
9
- const require_channel_setup = require("./channel.setup-B5ClEcNI.cjs");
7
+ const require_channel = require("./channel-Du4L0JEh.cjs");
8
+ const require_thread_session = require("./thread-session-BWVCoYza.cjs");
9
+ const require_channel_setup = require("./channel.setup-BN3uhq3r.cjs");
10
10
  const require_approval_card = require("./approval-card-DWPDItvq.cjs");
11
- const require_conversation_store_state = require("./conversation-store-state-C3__T9mK.cjs");
12
- const require_reaction_types = require("./reaction-types-DSQWVA4Z.cjs");
11
+ const require_conversation_store_state = require("./conversation-store-state-B-4g4uq5.cjs");
12
+ const require_reaction_types = require("./reaction-types-CwP5RVQB.cjs");
13
13
  let openclaw_plugin_sdk_channel_outbound = require("openclaw/plugin-sdk/channel-outbound");
14
14
  let openclaw_plugin_sdk_string_coerce_runtime = require("openclaw/plugin-sdk/string-coerce-runtime");
15
15
  let openclaw_plugin_sdk_account_id = require("openclaw/plugin-sdk/account-id");
@@ -760,9 +760,8 @@ function extractMSTeamsHtmlAttachmentIds(attachments) {
760
760
  for (const att of list) {
761
761
  const html = require_resolve_allowlist.extractHtmlFromAttachment(att);
762
762
  if (!html) continue;
763
- require_resolve_allowlist.ATTACHMENT_TAG_RE.lastIndex = 0;
764
- for (const match of html.matchAll(require_resolve_allowlist.ATTACHMENT_TAG_RE)) {
765
- const id = match[1]?.trim();
763
+ for (const value of require_resolve_allowlist.htmlTagAttributeValues(html, "attachment", "id")) {
764
+ const id = value.trim();
766
765
  if (id) ids.add(id);
767
766
  }
768
767
  }
@@ -782,20 +781,18 @@ function summarizeMSTeamsHtmlAttachments(attachments) {
782
781
  const html = require_resolve_allowlist.extractHtmlFromAttachment(att);
783
782
  if (!html) continue;
784
783
  htmlAttachments += 1;
785
- require_resolve_allowlist.IMG_SRC_RE.lastIndex = 0;
786
- for (const match of html.matchAll(require_resolve_allowlist.IMG_SRC_RE)) {
784
+ for (const value of require_resolve_allowlist.htmlTagAttributeValues(html, "img", "src")) {
787
785
  imgTags += 1;
788
- const src = match[1]?.trim();
786
+ const src = value.trim();
789
787
  if (src) {
790
788
  if (src.startsWith("data:")) dataImages += 1;
791
789
  else if (src.startsWith("cid:")) cidImages += 1;
792
790
  else srcHosts.add(require_resolve_allowlist.safeHostForUrl(src));
793
791
  }
794
792
  }
795
- require_resolve_allowlist.ATTACHMENT_TAG_RE.lastIndex = 0;
796
- for (const attachmentMatch of html.matchAll(require_resolve_allowlist.ATTACHMENT_TAG_RE)) {
793
+ for (const value of require_resolve_allowlist.htmlTagAttributeValues(html, "attachment", "id")) {
797
794
  attachmentTags += 1;
798
- const id = attachmentMatch[1]?.trim();
795
+ const id = value.trim();
799
796
  if (id) attachmentIds.add(id);
800
797
  }
801
798
  }
@@ -3900,6 +3897,7 @@ async function monitorMSTeamsProvider(opts) {
3900
3897
  } catch (err) {
3901
3898
  runtime.error?.(`msteams resolve failed; mutable allowlist entries are disabled. ${require_channel_setup.formatUnknownError(err)}`);
3902
3899
  }
3900
+ if (Array.isArray(configuredGroupAllowFrom)) groupAllowFrom = require_resolve_allowlist.keepConfiguredMSTeamsAllowlistActive(configuredGroupAllowFrom, groupAllowFrom);
3903
3901
  if (configuredGroupAllowFrom == null && groupAllowFrom) groupAllowFrom = (0, openclaw_plugin_sdk_allow_from.mergeAllowlist)({
3904
3902
  existing: groupAllowFrom,
3905
3903
  additions: allowFrom ?? []
@@ -1,4 +1,4 @@
1
- const require_resolve_allowlist = require("./resolve-allowlist-tYgAHx0t.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
4
  //#region extensions/msteams/src/oauth.flow.ts
@@ -1,4 +1,4 @@
1
- const require_resolve_allowlist = require("./resolve-allowlist-tYgAHx0t.cjs");
1
+ const require_resolve_allowlist = require("./resolve-allowlist-gI34MnpE.cjs");
2
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;
@@ -223,8 +223,48 @@ async function withMSTeamsAbortableRequestTimeout(params) {
223
223
  //#endregion
224
224
  //#region extensions/msteams/src/attachments/shared.ts
225
225
  const IMAGE_EXT_RE = /\.(avif|bmp|gif|heic|heif|jpe?g|png|tiff?|webp)$/i;
226
- const IMG_SRC_RE = /<img[^>]+src=["']([^"']+)["'][^>]*>/gi;
227
- const ATTACHMENT_TAG_RE = /<attachment[^>]+id=["']([^"']+)["'][^>]*>/gi;
226
+ /**
227
+ * Values of `attr` on each `<tag ...>` in document order, matching the captures of
228
+ * `/<tag[^>]+attr=["']([^"']+)["'][^>]*>/gi`: the last attribute spelling inside the
229
+ * tag wins, and a quoted value may contain `>`. Each `<tag` start is resolved from
230
+ * precomputed next-`>` and next-quote positions in one forward pass.
231
+ */
232
+ function htmlTagAttributeValues(html, tag, attr) {
233
+ const length = html.length;
234
+ const nextGt = new Int32Array(length + 1).fill(length);
235
+ const nextQuote = new Int32Array(length + 1).fill(length);
236
+ for (let index = length - 1; index >= 0; index -= 1) {
237
+ const char = html[index];
238
+ nextGt[index] = char === ">" ? index : nextGt[index + 1];
239
+ nextQuote[index] = char === "\"" || char === "'" ? index : nextQuote[index + 1];
240
+ }
241
+ const candidates = [];
242
+ for (const match of html.matchAll(new RegExp(`${attr}=["']`, "gi"))) {
243
+ const valueStart = match.index + match[0].length;
244
+ const valueEnd = nextQuote[valueStart];
245
+ if (valueEnd > valueStart && valueEnd < length && nextGt[valueEnd + 1] < length) candidates.push({
246
+ start: match.index,
247
+ valueStart,
248
+ valueEnd,
249
+ end: nextGt[valueEnd + 1] + 1
250
+ });
251
+ }
252
+ const values = [];
253
+ let resumeAt = 0;
254
+ let pastWindow = 0;
255
+ for (const open of html.matchAll(new RegExp(`<${tag}`, "gi"))) {
256
+ if (open.index < resumeAt) continue;
257
+ const nameEnd = open.index + open[0].length;
258
+ const lastStart = nextGt[nameEnd];
259
+ while (pastWindow < candidates.length && candidates[pastWindow].start <= lastStart) pastWindow += 1;
260
+ const candidate = candidates[pastWindow - 1];
261
+ if (candidate && candidate.start > nameEnd) {
262
+ values.push(html.slice(candidate.valueStart, candidate.valueEnd));
263
+ resumeAt = candidate.end;
264
+ }
265
+ }
266
+ return values;
267
+ }
228
268
  const GRAPH_HOSTED_CONTENT_SRC_RE = /\/hostedContents\/([^/?#]+)/i;
229
269
  function resolveInlineImageSourceId(src) {
230
270
  const hostedContentId = GRAPH_HOSTED_CONTENT_SRC_RE.exec(src)?.[1];
@@ -363,9 +403,8 @@ function extractInlineImageReferences(attachments) {
363
403
  for (const att of attachments) {
364
404
  const html = extractHtmlFromAttachment(att);
365
405
  if (!html) continue;
366
- IMG_SRC_RE.lastIndex = 0;
367
- for (const match of html.matchAll(IMG_SRC_RE)) {
368
- const src = match[1]?.trim();
406
+ for (const value of htmlTagAttributeValues(html, "img", "src")) {
407
+ const src = value.trim();
369
408
  if (src) {
370
409
  if (src.startsWith("data:")) out.push({
371
410
  kind: "data",
@@ -1094,6 +1133,34 @@ function htmlToPlainText(html) {
1094
1133
  return (0, openclaw_plugin_sdk_html_entity_runtime.decodeHtmlEntities)(html.replace(/<[^>]*>/g, " ")).replaceAll("\xA0", " ").replace(/\s+/g, " ").trim();
1095
1134
  }
1096
1135
  /**
1136
+ * Content of the first `<p ...>` whose opening tag contains `attribute`, up to the next
1137
+ * `</p>`, matching `/<p[^>]*ATTRIBUTE[^>]*>(.*?)<\/p>/is`. Opening tags, attribute
1138
+ * matches and `>` positions are all visited in one forward pass.
1139
+ */
1140
+ function findParagraphContent(html, attribute) {
1141
+ const attributes = Array.from(html.matchAll(attribute), (match) => ({
1142
+ start: match.index,
1143
+ end: match.index + match[0].length
1144
+ }));
1145
+ let nextAttribute = 0;
1146
+ let tagEnd = -1;
1147
+ for (const open of html.matchAll(/<p/gi)) {
1148
+ const afterOpen = open.index + open[0].length;
1149
+ if (tagEnd < afterOpen) {
1150
+ tagEnd = html.indexOf(">", afterOpen);
1151
+ if (tagEnd < 0) return;
1152
+ }
1153
+ while (nextAttribute < attributes.length && attributes[nextAttribute].start < afterOpen) nextAttribute += 1;
1154
+ const match = attributes[nextAttribute];
1155
+ if (match && match.end <= tagEnd) {
1156
+ const close = /<\/p>/gi;
1157
+ close.lastIndex = tagEnd + 1;
1158
+ const closeMatch = close.exec(html);
1159
+ return closeMatch ? html.slice(tagEnd + 1, closeMatch.index) : void 0;
1160
+ }
1161
+ }
1162
+ }
1163
+ /**
1097
1164
  * Extract quote info from MS Teams HTML reply attachments.
1098
1165
  * Teams wraps quoted content in a blockquote with itemtype="http://schema.skype.com/Reply".
1099
1166
  */
@@ -1109,8 +1176,8 @@ function extractMSTeamsQuoteInfo(attachments) {
1109
1176
  if (!content.includes("http://schema.skype.com/Reply")) continue;
1110
1177
  const senderMatch = /<strong[^>]*itemprop=["']mri["'][^>]*>(.*?)<\/strong>/i.exec(content);
1111
1178
  const sender = senderMatch?.[1] ? htmlToPlainText(senderMatch[1]) : void 0;
1112
- const bodyMatch = /<p[^>]*itemprop=["']copy["'][^>]*>(.*?)<\/p>/is.exec(content) ?? /<p[^>]*itemprop=["']preview["'][^>]*>(.*?)<\/p>/is.exec(content);
1113
- const body = bodyMatch?.[1] ? htmlToPlainText(bodyMatch[1]) : void 0;
1179
+ const bodyHtml = findParagraphContent(content, /itemprop=["']copy["']/gi) ?? findParagraphContent(content, /itemprop=["']preview["']/gi);
1180
+ const body = bodyHtml ? htmlToPlainText(bodyHtml) : void 0;
1114
1181
  const id = /<blockquote[^>]*\bitemid=["']([^"']+)["'][^>]*>/is.exec(content)?.[1]?.trim() || void 0;
1115
1182
  if (body) return {
1116
1183
  sender: sender ?? "unknown",
@@ -1144,6 +1211,12 @@ function wasMSTeamsBotMentioned(activity) {
1144
1211
  //#endregion
1145
1212
  //#region extensions/msteams/src/resolve-allowlist.ts
1146
1213
  const MSTEAMS_GROUP_CONVERSATION_ID = /^19:.+@thread\.(?:tacv2|skype|v2)$/i;
1214
+ const MSTEAMS_UNMATCHABLE_THREAD_ID = "19:openclaw-unresolved-allowlist@thread.unresolved";
1215
+ /** Keeps a configured but fully unresolvable sender allowlist configured and matching nothing. */
1216
+ function keepConfiguredMSTeamsAllowlistActive(configured, projected) {
1217
+ if (!Array.isArray(configured) || configured.every((entry) => !entry?.trim())) return projected;
1218
+ return projected && projected.length > 0 ? projected : [MSTEAMS_UNMATCHABLE_THREAD_ID];
1219
+ }
1147
1220
  function uniqueItemsById(items) {
1148
1221
  const byId = /* @__PURE__ */ new Map();
1149
1222
  for (const item of items) {
@@ -1252,7 +1325,7 @@ function looksLikeMSTeamsThreadConversationId(raw) {
1252
1325
  function isStableMSTeamsTeamKey(raw) {
1253
1326
  return /^[0-9a-fA-F-]{16,}$/.test(raw.trim()) || looksLikeMSTeamsThreadConversationId(raw);
1254
1327
  }
1255
- function projectStableMSTeamsChannels(channels) {
1328
+ function projectStableMSTeamsChannels(channels, options = {}) {
1256
1329
  const projected = {};
1257
1330
  for (const [channelKey, channelConfig] of Object.entries(channels ?? {})) {
1258
1331
  if (channelKey === "*") {
@@ -1261,21 +1334,45 @@ function projectStableMSTeamsChannels(channels) {
1261
1334
  }
1262
1335
  if (looksLikeMSTeamsThreadConversationId(channelKey)) projected[normalizeMSTeamsConversationTargetId(channelKey)] = channelConfig;
1263
1336
  }
1337
+ if (options.keepConfigured && Object.keys(channels ?? {}).length > 0 && Object.keys(projected).length === 0) projected[MSTEAMS_UNMATCHABLE_THREAD_ID] = {};
1264
1338
  return projected;
1265
1339
  }
1266
- function projectStableMSTeamsTeamsConfig(teams) {
1267
- if (!teams) return;
1340
+ /** Drops the unmatchable placeholders once a real entry exists beside them. */
1341
+ function dropRedundantUnmatchablePlaceholders(teams) {
1342
+ const realTeamKeys = Object.keys(teams).filter((key) => key !== MSTEAMS_UNMATCHABLE_THREAD_ID);
1343
+ const cleaned = {};
1344
+ for (const [teamKey, teamConfig] of Object.entries(teams)) {
1345
+ if (teamKey === MSTEAMS_UNMATCHABLE_THREAD_ID && realTeamKeys.length > 0) continue;
1346
+ const channels = { ...teamConfig.channels };
1347
+ if (Object.keys(channels).length > 1) delete channels[MSTEAMS_UNMATCHABLE_THREAD_ID];
1348
+ cleaned[teamKey] = {
1349
+ ...teamConfig,
1350
+ channels
1351
+ };
1352
+ }
1353
+ return cleaned;
1354
+ }
1355
+ function projectStableMSTeamsTeams(teams) {
1268
1356
  const projected = {};
1269
1357
  for (const [teamKey, teamConfig] of Object.entries(teams)) {
1270
1358
  if (teamKey !== "*" && !isStableMSTeamsTeamKey(teamKey)) continue;
1271
1359
  const stableKey = teamKey === "*" ? teamKey : normalizeMSTeamsConversationTargetId(teamKey);
1272
1360
  projected[stableKey] = {
1273
1361
  ...teamConfig,
1274
- channels: projectStableMSTeamsChannels(teamConfig.channels)
1362
+ channels: projectStableMSTeamsChannels(teamConfig.channels, { keepConfigured: true })
1275
1363
  };
1276
1364
  }
1277
1365
  return projected;
1278
1366
  }
1367
+ /** Keeps a configured but fully unresolvable teams allowlist configured and matching nothing. */
1368
+ function keepConfiguredMSTeamsTeamsActive(configured, teams) {
1369
+ if (Object.keys(configured).length === 0 || Object.keys(teams).length > 0) return teams;
1370
+ return { [MSTEAMS_UNMATCHABLE_THREAD_ID]: {} };
1371
+ }
1372
+ function projectStableMSTeamsTeamsConfig(teams) {
1373
+ if (!teams) return;
1374
+ return keepConfiguredMSTeamsTeamsActive(teams, projectStableMSTeamsTeams(teams));
1375
+ }
1279
1376
  function parseMSTeamsTeamChannelInput(raw) {
1280
1377
  const trimmed = stripProviderPrefix(raw).trim();
1281
1378
  if (!trimmed) return {};
@@ -1471,7 +1568,7 @@ async function resolveMSTeamsTeamsConfig(params) {
1471
1568
  teamIdMode: params.teamIdMode
1472
1569
  });
1473
1570
  const mapping = [];
1474
- const teams = projectStableMSTeamsTeamsConfig(params.teams) ?? {};
1571
+ const teams = projectStableMSTeamsTeams(params.teams);
1475
1572
  resolved.forEach((entry, index) => {
1476
1573
  const source = entries[index];
1477
1574
  if (!source) return;
@@ -1509,7 +1606,7 @@ async function resolveMSTeamsTeamsConfig(params) {
1509
1606
  }
1510
1607
  });
1511
1608
  return {
1512
- teams,
1609
+ teams: keepConfiguredMSTeamsTeamsActive(params.teams, dropRedundantUnmatchablePlaceholders(teams)),
1513
1610
  mapping,
1514
1611
  unresolved
1515
1612
  };
@@ -1568,24 +1665,12 @@ async function resolveMSTeamsUserAllowlist(params) {
1568
1665
  });
1569
1666
  }
1570
1667
  //#endregion
1571
- Object.defineProperty(exports, "ATTACHMENT_TAG_RE", {
1572
- enumerable: true,
1573
- get: function() {
1574
- return ATTACHMENT_TAG_RE;
1575
- }
1576
- });
1577
1668
  Object.defineProperty(exports, "GRAPH_ROOT", {
1578
1669
  enumerable: true,
1579
1670
  get: function() {
1580
1671
  return GRAPH_ROOT;
1581
1672
  }
1582
1673
  });
1583
- Object.defineProperty(exports, "IMG_SRC_RE", {
1584
- enumerable: true,
1585
- get: function() {
1586
- return IMG_SRC_RE;
1587
- }
1588
- });
1589
1674
  Object.defineProperty(exports, "MSTEAMS_DEFAULT_DELEGATED_SCOPES", {
1590
1675
  enumerable: true,
1591
1676
  get: function() {
@@ -1724,6 +1809,12 @@ Object.defineProperty(exports, "fetchGraphJson", {
1724
1809
  return fetchGraphJson;
1725
1810
  }
1726
1811
  });
1812
+ Object.defineProperty(exports, "htmlTagAttributeValues", {
1813
+ enumerable: true,
1814
+ get: function() {
1815
+ return htmlTagAttributeValues;
1816
+ }
1817
+ });
1727
1818
  Object.defineProperty(exports, "htmlToPlainText", {
1728
1819
  enumerable: true,
1729
1820
  get: function() {
@@ -1760,6 +1851,12 @@ Object.defineProperty(exports, "isRedirectStatus", {
1760
1851
  return isRedirectStatus;
1761
1852
  }
1762
1853
  });
1854
+ Object.defineProperty(exports, "keepConfiguredMSTeamsAllowlistActive", {
1855
+ enumerable: true,
1856
+ get: function() {
1857
+ return keepConfiguredMSTeamsAllowlistActive;
1858
+ }
1859
+ });
1763
1860
  Object.defineProperty(exports, "listChannelsForTeam", {
1764
1861
  enumerable: true,
1765
1862
  get: function() {
@@ -1,11 +1,11 @@
1
1
  const require_bot_framework_service_url = require("./bot-framework-service-url-B3FWn2SV.cjs");
2
2
  const require_token_config = require("./token-config-bEpua_Q7.cjs");
3
- const require_resolve_allowlist = require("./resolve-allowlist-tYgAHx0t.cjs");
3
+ const require_resolve_allowlist = require("./resolve-allowlist-gI34MnpE.cjs");
4
4
  const require_runtime = require("./runtime-gZTAuFux.cjs");
5
5
  require("../runtime-api.cjs");
6
- const require_channel = require("./channel-B7Gy3QUW.cjs");
7
- const require_channel_setup = require("./channel.setup-B5ClEcNI.cjs");
8
- const require_conversation_store_state = require("./conversation-store-state-C3__T9mK.cjs");
6
+ const require_channel = require("./channel-Du4L0JEh.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");
@@ -1,3 +1,3 @@
1
- const require_channel_setup = require("./channel.setup-B5ClEcNI.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,4 +1,4 @@
1
- const require_resolve_allowlist = require("./resolve-allowlist-tYgAHx0t.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");
@@ -0,0 +1 @@
1
+ {"version":3,"entries":[{"output":"api.cjs","source":"extensions/msteams/api.ts"},{"output":"channel-config-api.cjs","source":"extensions/msteams/channel-config-api.ts"},{"output":"channel-plugin-api.cjs","source":"extensions/msteams/channel-plugin-api.ts"},{"output":"configured-state.cjs","source":"extensions/msteams/configured-state.ts"},{"output":"directory-contract-api.cjs","source":"extensions/msteams/directory-contract-api.ts"},{"output":"doctor-backup-resources.cjs","source":"extensions/msteams/doctor-backup-resources.ts"},{"output":"doctor-contract-api.cjs","source":"extensions/msteams/doctor-contract-api.ts"},{"output":"index.cjs","source":"extensions/msteams/index.ts"},{"output":"qa-runner-api.cjs","source":"extensions/msteams/qa-runner-api.ts"},{"output":"runtime-api.cjs","source":"extensions/msteams/runtime-api.ts"},{"output":"secret-contract-api.cjs","source":"extensions/msteams/secret-contract-api.ts"},{"output":"setup-entry.cjs","source":"extensions/msteams/setup-entry.ts"},{"output":"setup-plugin-api.cjs","source":"extensions/msteams/setup-plugin-api.ts"}],"chunks":[{"output":".setup/adapter.runtime-B-6Q3nMI.cjs","sha256":"828e4fc9bf8fe9b84b0c7953f3cba02d7908f46a0b25a471ac62e129c00c38c3","facadeSource":"extensions/msteams/src/qa/adapter.runtime.ts","sources":["extensions/msteams/src/qa/adapter.runtime.ts","extensions/msteams/src/qa/bot-framework-server.ts"]},{"output":".setup/approval-card-DWPDItvq.cjs","sha256":"7f9ec8b926c94dc0d2f9bfd7c50a0a3308a8689a1038acbdaef3c283d71663b5","facadeSource":null,"sources":["extensions/msteams/src/approval-card-actions.ts","extensions/msteams/src/approval-card.ts"]},{"output":".setup/approval-handler.runtime-CGIr9ItR.cjs","sha256":"c18cdc646d400d56768660f74ca89c473da33e6facfd3a03de75fe6ef258c948","facadeSource":"extensions/msteams/src/approval-handler.runtime.ts","sources":["extensions/msteams/src/approval-handler.runtime.ts"]},{"output":".setup/bot-framework-service-url-B3FWn2SV.cjs","sha256":"2a92ed67c439b99f6c15c3504d88736eecb0716cec90ce8ed6301cba64490431","facadeSource":null,"sources":["extensions/msteams/src/accounts-webhook.ts","extensions/msteams/src/bot-framework-service-url.ts"]},{"output":".setup/channel-Du4L0JEh.cjs","sha256":"ba5ce089825d34a661ad8663649dec92e43db21a7449a4864407a213011a8f75","facadeSource":null,"sources":["extensions/msteams/src/action-params.ts","extensions/msteams/src/action-results.ts","extensions/msteams/src/action-threading.ts","extensions/msteams/src/approval-native.ts","extensions/msteams/src/channel-message-tool.ts","extensions/msteams/src/channel.ts","extensions/msteams/src/doctor.ts","extensions/msteams/src/graph-action-context.ts","extensions/msteams/src/outbound-config.ts","extensions/msteams/src/policy.ts","extensions/msteams/src/presentation.ts","extensions/msteams/src/read-policy.ts","extensions/msteams/src/session-route.ts","extensions/msteams/src/webhook-route.ts","packages/normalization-core/src/string-coerce.ts","src/gateway/gateway-http-route-contracts.ts","src/gateway/security-path.ts","src/gateway/server/plugins-http/path-context.ts","src/plugins/http-path-prefix.ts"]},{"output":".setup/channel.runtime-3-5Ty0Vy.cjs","sha256":"c4a65e6aec3d2394c57cc35e1ec7cfddf076613f38187a7009e188d4eecbc763","facadeSource":"extensions/msteams/src/channel.runtime.ts","sources":["extensions/msteams/src/channel.runtime.ts","extensions/msteams/src/directory-live.ts","extensions/msteams/src/graph-conversation-members.ts","extensions/msteams/src/graph-group-management.ts","extensions/msteams/src/graph-members.ts","extensions/msteams/src/graph-messages.ts","extensions/msteams/src/graph-teams.ts","extensions/msteams/src/outbound.ts","extensions/msteams/src/probe.ts"]},{"output":".setup/channel.setup-BN3uhq3r.cjs","sha256":"d8d12653da7efea84874773a809f2af934171521f6ccbd2138d4cb1492bf21f5","facadeSource":null,"sources":["extensions/msteams/src/accounts-mutations.ts","extensions/msteams/src/channel-config.ts","extensions/msteams/src/channel.setup.ts","extensions/msteams/src/errors.ts","extensions/msteams/src/setup-core.ts","extensions/msteams/src/setup-surface.ts"]},{"output":".setup/config-schema-CkKdphSp.cjs","sha256":"b995ad95f7593e5c0dd993867aabe773272b9c1d9a41c7a0340c8d34a5484946","facadeSource":null,"sources":["extensions/msteams/src/config-schema-refinement.ts","extensions/msteams/src/config-schema.ts","extensions/msteams/src/config-ui-hints.ts"]},{"output":".setup/conversation-store-state-B-4g4uq5.cjs","sha256":"2bd817a147b443b7816e413727c35b9843a3610b582c135e99aae38da39b45d1","facadeSource":null,"sources":["extensions/msteams/src/conversation-store-helpers.ts","extensions/msteams/src/conversation-store-state.ts","extensions/msteams/src/file-consent-helpers.ts","extensions/msteams/src/file-consent.ts","extensions/msteams/src/format.ts","extensions/msteams/src/graph-chat.ts","extensions/msteams/src/graph-upload.ts","extensions/msteams/src/media-helpers.ts","extensions/msteams/src/mentions.ts","extensions/msteams/src/message-activity.ts","extensions/msteams/src/messenger.ts","extensions/msteams/src/pending-uploads-fs.ts","extensions/msteams/src/pending-uploads.ts","extensions/msteams/src/polls.ts","extensions/msteams/src/revoked-context.ts","extensions/msteams/src/sdk-proactive.ts","extensions/msteams/src/sent-message-cache.ts"]},{"output":".setup/delegated-state-Bv5cWuec.cjs","sha256":"f93b893483ae203f574381125628e4b51c5e6364277d3dc7952c0b3232fedf65","facadeSource":null,"sources":["extensions/msteams/src/delegated-state.ts","extensions/msteams/src/sqlite-state.ts"]},{"output":".setup/monitor-DK0bsDpk.cjs","sha256":"714323ff9f35249c45979c01f02ac1252e7971d26b3082624e06e42075012538","facadeSource":"extensions/msteams/src/monitor.ts","sources":["extensions/msteams/src/adaptive-card-submit.ts","extensions/msteams/src/approval-card-submit.ts","extensions/msteams/src/attachments/bot-framework.ts","extensions/msteams/src/attachments/download.ts","extensions/msteams/src/attachments/graph.ts","extensions/msteams/src/attachments/html.ts","extensions/msteams/src/attachments/remote-media.ts","extensions/msteams/src/feedback-invoke.ts","extensions/msteams/src/feedback-reflection-store.ts","extensions/msteams/src/feedback-reflection.ts","extensions/msteams/src/file-consent-invoke.ts","extensions/msteams/src/informative-status.ts","extensions/msteams/src/monitor-account-stores.ts","extensions/msteams/src/monitor-handler.ts","extensions/msteams/src/monitor-handler/access.ts","extensions/msteams/src/monitor-handler/config.ts","extensions/msteams/src/monitor-handler/inbound-content.ts","extensions/msteams/src/monitor-handler/inbound-dispatch.ts","extensions/msteams/src/monitor-handler/inbound-facts.ts","extensions/msteams/src/monitor-handler/inbound-media.ts","extensions/msteams/src/monitor-handler/message-handler.ts","extensions/msteams/src/monitor-handler/reaction-handler.ts","extensions/msteams/src/monitor-handler/thread-context.ts","extensions/msteams/src/monitor-status.ts","extensions/msteams/src/monitor.ts","extensions/msteams/src/msteams-ingress.ts","extensions/msteams/src/replay-context.ts","extensions/msteams/src/reply-dispatcher.ts","extensions/msteams/src/reply-stream-controller.ts","extensions/msteams/src/sso-token-store.ts","extensions/msteams/src/team-identity.ts","extensions/msteams/src/thread-parent-context.ts","extensions/msteams/src/webhook-handler.ts","extensions/msteams/src/welcome-card.ts","src/channels/mention-gating.ts"]},{"output":".setup/oauth-BBUQCwmq.cjs","sha256":"99b011472408a9d86211bdc7b9fc03393127e9f9895b9ba2175e60e7c23e89f1","facadeSource":"extensions/msteams/src/oauth.ts","sources":["extensions/msteams/src/oauth.flow.ts","extensions/msteams/src/oauth.ts"]},{"output":".setup/reaction-types-CwP5RVQB.cjs","sha256":"6cbc1957e51609e69b18c55780e0d33992b1266469abb3759376876ad0c9919a","facadeSource":null,"sources":["extensions/msteams/src/graph-thread.ts","extensions/msteams/src/reaction-types.ts"]},{"output":".setup/resolve-allowlist-gI34MnpE.cjs","sha256":"37845f57dd81e3c8de41d67c9c83c9caac1e58bb131fbe6ea1cc8896764414b7","facadeSource":null,"sources":["extensions/msteams/src/accounts.ts","extensions/msteams/src/attachments/shared.ts","extensions/msteams/src/cloud.ts","extensions/msteams/src/graph-users.ts","extensions/msteams/src/graph.ts","extensions/msteams/src/inbound.ts","extensions/msteams/src/oauth.shared.ts","extensions/msteams/src/oauth.token.ts","extensions/msteams/src/qa/private-runtime.ts","extensions/msteams/src/request-timeout.ts","extensions/msteams/src/resolve-allowlist.ts","extensions/msteams/src/sdk.ts","extensions/msteams/src/send-handoff.ts","extensions/msteams/src/token.ts","extensions/msteams/src/user-agent.ts"]},{"output":".setup/rolldown-runtime-BloeesfJ.cjs","sha256":"f6d735fe8d12fdafd7b0aba5388ce3cd75a782df76da5377cba1663718459d5b","facadeSource":null,"sources":[]},{"output":".setup/runtime-gZTAuFux.cjs","sha256":"f16d4b7c9c8ed1bc3088aca3fcbaf0d0226b766db964e97b13893d505cabfc34","facadeSource":null,"sources":["extensions/msteams/src/runtime.ts"]},{"output":".setup/secret-contract-api-wAyY5UHv.cjs","sha256":"9be31044e70d8b1e5a3088baec86f5bb2189793e44438167180027cf377bda6e","facadeSource":null,"sources":["extensions/msteams/src/secret-contract.ts"]},{"output":".setup/secret-contract-api-YY3v6MP8.cjs","sha256":"ff5d358e675e1a7d953203cca66e2d046a9326856d12b6928ad822f762f1c2b7","facadeSource":"extensions/msteams/secret-contract-api.ts","sources":[]},{"output":".setup/send-ZvscULyk.cjs","sha256":"55a21eb66c6f5d8d3723bde00d3e512d0bb63b2b05d7aa85cebe156c43c3b94c","facadeSource":null,"sources":["extensions/msteams/src/send-context.ts","extensions/msteams/src/send.ts"]},{"output":".setup/setup-plugin-api-B-NYBLkF.cjs","sha256":"79b1509dea613a5d1bcb6c018d11736f6512ba43a4600d8fc99e1b99bcb80ee5","facadeSource":"extensions/msteams/setup-plugin-api.ts","sources":[]},{"output":".setup/thread-session-BWVCoYza.cjs","sha256":"2838d4eb7b3ecfba8aa530428e2a2ab52c98c5b682ea490e301e2d01ae0afc08","facadeSource":null,"sources":["extensions/msteams/src/approval-auth.ts","extensions/msteams/src/monitor-handler/thread-session.ts"]},{"output":".setup/token-config-bEpua_Q7.cjs","sha256":"7224f62e3864812a249f5bd7e4abeea97752489596c444777ca04b05075ef8ad","facadeSource":null,"sources":["extensions/msteams/src/token-config.ts"]},{"output":"api.cjs","sha256":"6a4e25b0ece36b39f188c3e48a6a46457e4ff38f670ec15f7c761a7589802d6e","facadeSource":"extensions/msteams/api.ts","sources":[]},{"output":"channel-config-api.cjs","sha256":"4f8a4482793aa6957bbbbaa01fc968482998f941ded751b7d2b6490699120295","facadeSource":"extensions/msteams/channel-config-api.ts","sources":[]},{"output":"channel-plugin-api.cjs","sha256":"43dd5fc56e1b0041b6c7663e1e89881054dea4c7b1a89b63c00c85aa20f4cc5e","facadeSource":"extensions/msteams/channel-plugin-api.ts","sources":[]},{"output":"configured-state.cjs","sha256":"f2a39ca958245449c4fef25a376f6ed3b4b84be4e9edb9d623572a1becb2d9b7","facadeSource":"extensions/msteams/configured-state.ts","sources":["extensions/msteams/configured-state.ts"]},{"output":"directory-contract-api.cjs","sha256":"b321ed77274295b23009640dc4cd5a42eb413a74bed12a24deacd708e2a152f8","facadeSource":"extensions/msteams/directory-contract-api.ts","sources":["extensions/msteams/directory-contract-api.ts"]},{"output":"doctor-backup-resources.cjs","sha256":"dd07e5b9d0b9bca67b1282809c75c5913f6e3b44a280003b527cc97bb7a51ebc","facadeSource":"extensions/msteams/doctor-backup-resources.ts","sources":["extensions/msteams/doctor-backup-resources.ts"]},{"output":"doctor-contract-api.cjs","sha256":"7027082725ca18e625b227092f37e4e7fc4900d097441c435b3902c935dc791c","facadeSource":"extensions/msteams/doctor-contract-api.ts","sources":["extensions/msteams/config-doctor-api.ts","extensions/msteams/doctor-contract-api.ts","packages/normalization-core/src/record-coerce.ts","src/config/channel-config-normalization.ts","src/plugin-sdk/legacy-webhook-listener-migration.ts"]},{"output":"index.cjs","sha256":"7b5ba63fb0abc15c606c95b165e50e09bb31c37036489781cfcca685ae1d79dd","facadeSource":"extensions/msteams/index.ts","sources":["extensions/msteams/index.ts"]},{"output":"qa-runner-api.cjs","sha256":"c1b65fbad1da825e70c07e8c75a9d63bfd1958cefc240452327d61a71103caf9","facadeSource":"extensions/msteams/qa-runner-api.ts","sources":["extensions/msteams/qa-runner-api.ts","extensions/msteams/src/qa/cli.ts"]},{"output":"runtime-api.cjs","sha256":"7991b0a99bc6251fcbed45d38e1992bb211f1899e1580cc32bea80835a82a8c5","facadeSource":"extensions/msteams/runtime-api.ts","sources":[]},{"output":"secret-contract-api.cjs","sha256":"c3e70eff08e038ae97094b0136358cc903713e43f26957434d592eb76361cc18","facadeSource":"extensions/msteams/secret-contract-api.ts","sources":[]},{"output":"setup-entry.cjs","sha256":"f122b22ec71d2faaac87ffc46035d9bd189c4282430d0b3c84ff3dea455a430a","facadeSource":"extensions/msteams/setup-entry.ts","sources":["extensions/msteams/setup-entry.ts"]},{"output":"setup-plugin-api.cjs","sha256":"568d825834986f0fce26f1e10c7a191f962aae52821b6162a3038bc6a2670029","facadeSource":"extensions/msteams/setup-plugin-api.ts","sources":[]}],"unrenderedSources":["extensions/msteams/api.ts","extensions/msteams/channel-config-api.ts","extensions/msteams/channel-plugin-api.ts","extensions/msteams/runtime-api.ts","extensions/msteams/secret-contract-api.ts","extensions/msteams/setup-plugin-api.ts","extensions/msteams/src/attachments.ts"]}
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-B7Gy3QUW.cjs");
3
- const require_channel_setup = require("./.setup/channel.setup-B5ClEcNI.cjs");
2
+ const require_channel = require("./.setup/channel-Du4L0JEh.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_channel = require("./.setup/channel-B7Gy3QUW.cjs");
2
+ const require_channel = require("./.setup/channel-Du4L0JEh.cjs");
3
3
  exports.msteamsPlugin = require_channel.msteamsPlugin;
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_resolve_allowlist = require("./.setup/resolve-allowlist-tYgAHx0t.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",
@@ -4,7 +4,7 @@ let node_url = require("node:url");
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-BACfeF7_.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: {
@@ -1,3 +1,3 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_channel_setup = require("./.setup/channel.setup-B5ClEcNI.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.10.10-beta.3",
3
+ "version": "2026.10.10-beta.5",
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.10.10-beta.3"
25
+ "openclaw": ">=2026.10.10-beta.5"
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.10.10-beta.3"
127
+ "pluginApi": ">=2026.10.10-beta.5"
128
128
  },
129
129
  "build": {
130
- "openclawVersion": "2026.10.10-beta.3",
130
+ "openclawVersion": "2026.10.10-beta.5",
131
131
  "runtimeFormat": "cjs"
132
132
  },
133
133
  "release": {