@openclaw/msteams 2026.9.3 → 2026.9.4

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.
@@ -54,7 +54,7 @@ async function startMSTeamsQaBotFrameworkServer(options) {
54
54
  conversationId: route.conversationId,
55
55
  ...route.threadId ? { threadId: route.threadId } : {}
56
56
  });
57
- const acceptedButTimedOut = typeof activity.text === "string" && activity.text.includes(AMBIGUOUS_GATEWAY_TIMEOUT_MARKER);
57
+ const acceptedButTimedOut = activity.type === "message" && typeof activity.text === "string" && activity.text.includes(AMBIGUOUS_GATEWAY_TIMEOUT_MARKER);
58
58
  sendJson(response, acceptedButTimedOut ? 504 : 200, acceptedButTimedOut ? { error: "gateway timeout after acceptance" } : { id: activityId });
59
59
  })().catch((error) => {
60
60
  sendJson(response, 500, { error: (0, openclaw_plugin_sdk_error_runtime.coerceErrorMessage)(error) });
package/dist/api.cjs CHANGED
@@ -1,6 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_channel = require("./channel-Cdm6-HsU.cjs");
3
- const require_channel_setup = require("./channel.setup-ChwkwdLk.cjs");
2
+ const require_channel = require("./channel-B9LIyYeu.cjs");
3
+ const require_channel_setup = require("./channel.setup-BhxokviI.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,7 +1,7 @@
1
- const require_resolve_allowlist = require("./resolve-allowlist-CoKmLXYe.cjs");
2
- const require_channel = require("./channel-Cdm6-HsU.cjs");
1
+ const require_resolve_allowlist = require("./resolve-allowlist-DmUTQxEz.cjs");
2
+ const require_channel = require("./channel-B9LIyYeu.cjs");
3
3
  const require_approval_card = require("./approval-card-CPNH_q3P.cjs");
4
- const require_send = require("./send-Bw4W8RO7.cjs");
4
+ const require_send = require("./send-CU61PSDN.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,8 +1,8 @@
1
1
  require("./runtime-api.cjs");
2
- const require_resolve_allowlist = require("./resolve-allowlist-CoKmLXYe.cjs");
2
+ const require_resolve_allowlist = require("./resolve-allowlist-DmUTQxEz.cjs");
3
3
  const require_directory_contract_api = require("./directory-contract-api.cjs");
4
- const require_thread_session = require("./thread-session-p8FNgohv.cjs");
5
- const require_channel_setup = require("./channel.setup-ChwkwdLk.cjs");
4
+ const require_thread_session = require("./thread-session-NmA7_njI.cjs");
5
+ const require_channel_setup = require("./channel.setup-BhxokviI.cjs");
6
6
  let openclaw_plugin_sdk_approval_handler_adapter_runtime = require("openclaw/plugin-sdk/approval-handler-adapter-runtime");
7
7
  let openclaw_plugin_sdk_channel_core = require("openclaw/plugin-sdk/channel-core");
8
8
  let openclaw_plugin_sdk_channel_outbound = require("openclaw/plugin-sdk/channel-outbound");
@@ -314,6 +314,7 @@ const resolveMSTeamsOriginTarget = (0, openclaw_plugin_sdk_approval_native_runti
314
314
  normalizeTarget: msTeamsApprovalTargetResolvers.normalizeTarget
315
315
  });
316
316
  const msTeamsLazyApprovalNativeRuntime = (0, openclaw_plugin_sdk_approval_handler_adapter_runtime.createLazyChannelApprovalNativeRuntimeAdapter)({
317
+ capabilityBoundary: true,
317
318
  eventKinds: [
318
319
  "exec",
319
320
  "plugin",
@@ -330,7 +331,7 @@ const msTeamsLazyApprovalNativeRuntime = (0, openclaw_plugin_sdk_approval_handle
330
331
  request
331
332
  }),
332
333
  load: async () => {
333
- const { msTeamsApprovalNativeRuntime } = await Promise.resolve().then(() => require("./approval-handler.runtime-CoTQG4FS.cjs"));
334
+ const { msTeamsApprovalNativeRuntime } = await Promise.resolve().then(() => require("./approval-handler.runtime-DRhFNeJS.cjs"));
334
335
  return msTeamsApprovalNativeRuntime;
335
336
  }
336
337
  });
@@ -781,7 +782,7 @@ const collectMSTeamsSecurityFindings = openclaw_plugin_sdk_channel_policy.create
781
782
  severity: "critical",
782
783
  title: "MS Teams security warning"
783
784
  });
784
- const loadMSTeamsChannelRuntime = (0, openclaw_plugin_sdk_lazy_runtime.createLazyRuntimeNamedExport)(() => Promise.resolve().then(() => require("./channel.runtime-__5ZQlfG.cjs")), "msTeamsChannelRuntime");
785
+ const loadMSTeamsChannelRuntime = (0, openclaw_plugin_sdk_lazy_runtime.createLazyRuntimeNamedExport)(() => Promise.resolve().then(() => require("./channel.runtime-BergqMHg.cjs")), "msTeamsChannelRuntime");
785
786
  function jsonActionResult(data) {
786
787
  return {
787
788
  content: [{
@@ -1524,7 +1525,7 @@ const msteamsPlugin = (0, openclaw_plugin_sdk_channel_core.createChatChannelPlug
1524
1525
  })
1525
1526
  }),
1526
1527
  gateway: { startAccount: async (ctx) => {
1527
- const { monitorMSTeamsProvider } = await Promise.resolve().then(() => require("./src-B--Qc6lj.cjs"));
1528
+ const { monitorMSTeamsProvider } = await Promise.resolve().then(() => require("./src-D7Do7sM5.cjs"));
1528
1529
  const port = ctx.cfg.channels?.msteams?.webhook?.port ?? 3978;
1529
1530
  const statusSink = (0, openclaw_plugin_sdk_channel_outbound.createAccountStatusSink)({
1530
1531
  accountId: ctx.accountId,
@@ -1,3 +1,3 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_channel = require("./channel-Cdm6-HsU.cjs");
2
+ const require_channel = require("./channel-B9LIyYeu.cjs");
3
3
  exports.msteamsPlugin = require_channel.msteamsPlugin;
@@ -1,10 +1,10 @@
1
1
  require("./runtime-api.cjs");
2
- const require_resolve_allowlist = require("./resolve-allowlist-CoKmLXYe.cjs");
3
- const require_channel = require("./channel-Cdm6-HsU.cjs");
4
- const require_channel_setup = require("./channel.setup-ChwkwdLk.cjs");
2
+ const require_resolve_allowlist = require("./resolve-allowlist-DmUTQxEz.cjs");
3
+ const require_channel = require("./channel-B9LIyYeu.cjs");
4
+ const require_channel_setup = require("./channel.setup-BhxokviI.cjs");
5
5
  const require_polls = require("./polls-BBdZPx_R.cjs");
6
- const require_send = require("./send-Bw4W8RO7.cjs");
7
- const require_reaction_types = require("./reaction-types-zP91Ncwk.cjs");
6
+ const require_send = require("./send-CU61PSDN.cjs");
7
+ const require_reaction_types = require("./reaction-types-BbBBdnQ5.cjs");
8
8
  let openclaw_plugin_sdk_channel_outbound = require("openclaw/plugin-sdk/channel-outbound");
9
9
  let openclaw_plugin_sdk_string_coerce_runtime = require("openclaw/plugin-sdk/string-coerce-runtime");
10
10
  let openclaw_plugin_sdk_reply_payload = require("openclaw/plugin-sdk/reply-payload");
@@ -1,4 +1,4 @@
1
- const require_resolve_allowlist = require("./resolve-allowlist-CoKmLXYe.cjs");
1
+ const require_resolve_allowlist = require("./resolve-allowlist-DmUTQxEz.cjs");
2
2
  require("./secret-input-C65t6kjM.cjs");
3
3
  const require_config_schema = require("./config-schema-D22Lr1Qk.cjs");
4
4
  let openclaw_plugin_sdk_string_coerce_runtime = require("openclaw/plugin-sdk/string-coerce-runtime");
@@ -118,19 +118,16 @@ function createMSTeamsSetupWizardBase() {
118
118
  });
119
119
  else ({appId, appPassword, tenantId} = await promptMSTeamsCredentials(prompter));
120
120
  } else ({appId, appPassword, tenantId} = await promptMSTeamsCredentials(prompter));
121
- if (appId && appPassword && tenantId) next = {
122
- ...next,
123
- channels: {
124
- ...next.channels,
125
- msteams: {
126
- ...next.channels?.msteams,
127
- enabled: true,
128
- appId,
129
- appPassword,
130
- tenantId
131
- }
121
+ if (appId && appPassword && tenantId) next = (0, openclaw_plugin_sdk_setup.patchTopLevelChannelConfigSection)({
122
+ cfg: next,
123
+ channel: channel$1,
124
+ enabled: true,
125
+ patch: {
126
+ appId,
127
+ appPassword,
128
+ tenantId
132
129
  }
133
- };
130
+ });
134
131
  return {
135
132
  cfg: next,
136
133
  accountId: openclaw_plugin_sdk_setup.DEFAULT_ACCOUNT_ID
@@ -468,22 +465,17 @@ const msteamsSetupWizard = {
468
465
  message: t("wizard.msteams.delegatedAuthPrompt"),
469
466
  initialValue: false
470
467
  })) {
471
- next = {
472
- ...next,
473
- channels: {
474
- ...next.channels,
475
- msteams: {
476
- ...next.channels?.msteams,
477
- delegatedAuth: { enabled: true }
478
- }
479
- }
480
- };
468
+ next = (0, openclaw_plugin_sdk_setup.patchTopLevelChannelConfigSection)({
469
+ cfg: next,
470
+ channel,
471
+ patch: { delegatedAuth: { enabled: true } }
472
+ });
481
473
  const noteDelegatedAuthFailure = async (err) => {
482
474
  await params.prompter.note(`Delegated auth setup failed: ${formatUnknownError(err)}\n` + t("wizard.msteams.delegatedAuthRetry"), t("wizard.msteams.delegatedAuthTitle"));
483
475
  };
484
476
  let oauthModule;
485
477
  try {
486
- oauthModule = await Promise.resolve().then(() => require("./oauth-BeROaYf0.cjs"));
478
+ oauthModule = await Promise.resolve().then(() => require("./oauth-DUtLTz2u.cjs"));
487
479
  } catch (err) {
488
480
  await noteDelegatedAuthFailure(err);
489
481
  return {
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_resolve_allowlist = require("./resolve-allowlist-CoKmLXYe.cjs");
2
+ const require_resolve_allowlist = require("./resolve-allowlist-DmUTQxEz.cjs");
3
3
  let openclaw_plugin_sdk_directory_runtime = require("openclaw/plugin-sdk/directory-runtime");
4
4
  const msteamsDirectoryContractPlugin = {
5
5
  id: "msteams",
@@ -1,8 +1,8 @@
1
1
  const require_rolldown_runtime = require("./rolldown-runtime-VH7oDXx4.cjs");
2
2
  const require_runtime = require("./runtime-gZTAuFux.cjs");
3
3
  require("./runtime-api.cjs");
4
- const require_resolve_allowlist = require("./resolve-allowlist-CoKmLXYe.cjs");
5
- const require_channel_setup = require("./channel.setup-ChwkwdLk.cjs");
4
+ const require_resolve_allowlist = require("./resolve-allowlist-DmUTQxEz.cjs");
5
+ const require_channel_setup = require("./channel.setup-BhxokviI.cjs");
6
6
  const require_polls = require("./polls-BBdZPx_R.cjs");
7
7
  let openclaw_plugin_sdk_lazy_runtime = require("openclaw/plugin-sdk/lazy-runtime");
8
8
  let openclaw_plugin_sdk_string_coerce_runtime = require("openclaw/plugin-sdk/string-coerce-runtime");
@@ -1,4 +1,4 @@
1
- const require_resolve_allowlist = require("./resolve-allowlist-CoKmLXYe.cjs");
1
+ const require_resolve_allowlist = require("./resolve-allowlist-DmUTQxEz.cjs");
2
2
  let openclaw_plugin_sdk_runtime_env = require("openclaw/plugin-sdk/runtime-env");
3
3
  let openclaw_plugin_sdk_provider_auth = require("openclaw/plugin-sdk/provider-auth");
4
4
  let openclaw_plugin_sdk_provider_auth_runtime = require("openclaw/plugin-sdk/provider-auth-runtime");
@@ -2,7 +2,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  let openclaw_plugin_sdk_qa_runner_runtime = require("openclaw/plugin-sdk/qa-runner-runtime");
3
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("./adapter.runtime-DDuc7sKJ.cjs")));
5
+ const loadMSTeamsQaAdapterRuntime = (0, openclaw_plugin_sdk_qa_runner_runtime.createLazyCliRuntimeLoader)(() => Promise.resolve().then(() => require("./adapter.runtime-BzR3RK2J.cjs")));
6
6
  async function runQaMSTeams(options) {
7
7
  await (0, openclaw_plugin_sdk_qa_runner_runtime.runLiveTransportQaSuiteCommand)({
8
8
  channelId: "msteams",
@@ -1,4 +1,4 @@
1
- const require_resolve_allowlist = require("./resolve-allowlist-CoKmLXYe.cjs");
1
+ const require_resolve_allowlist = require("./resolve-allowlist-DmUTQxEz.cjs");
2
2
  let openclaw_plugin_sdk_html_entity_runtime = require("openclaw/plugin-sdk/html-entity-runtime");
3
3
  //#region extensions/msteams/src/graph-thread.ts
4
4
  /**
@@ -1946,6 +1946,12 @@ Object.defineProperty(exports, "hasConfiguredMSTeamsCredentials", {
1946
1946
  return hasConfiguredMSTeamsCredentials;
1947
1947
  }
1948
1948
  });
1949
+ Object.defineProperty(exports, "htmlToPlainText", {
1950
+ enumerable: true,
1951
+ get: function() {
1952
+ return htmlToPlainText;
1953
+ }
1954
+ });
1949
1955
  Object.defineProperty(exports, "isAdvertisedFileAttachment", {
1950
1956
  enumerable: true,
1951
1957
  get: function() {
@@ -1,10 +1,10 @@
1
1
  const require_runtime = require("./runtime-gZTAuFux.cjs");
2
2
  require("./runtime-api.cjs");
3
- const require_resolve_allowlist = require("./resolve-allowlist-CoKmLXYe.cjs");
4
- const require_channel = require("./channel-Cdm6-HsU.cjs");
5
- const require_channel_setup = require("./channel.setup-ChwkwdLk.cjs");
3
+ const require_resolve_allowlist = require("./resolve-allowlist-DmUTQxEz.cjs");
4
+ const require_channel = require("./channel-B9LIyYeu.cjs");
5
+ const require_channel_setup = require("./channel.setup-BhxokviI.cjs");
6
6
  const require_polls = require("./polls-BBdZPx_R.cjs");
7
- const require_messenger = require("./messenger-DbWgzI01.cjs");
7
+ const require_messenger = require("./messenger-TLdZf9Ar.cjs");
8
8
  let openclaw_plugin_sdk_channel_outbound = require("openclaw/plugin-sdk/channel-outbound");
9
9
  let openclaw_plugin_sdk_string_coerce_runtime = require("openclaw/plugin-sdk/string-coerce-runtime");
10
10
  let openclaw_plugin_sdk_markdown_table_runtime = require("openclaw/plugin-sdk/markdown-table-runtime");
@@ -1,3 +1,3 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_channel_setup = require("./channel.setup-ChwkwdLk.cjs");
2
+ const require_channel_setup = require("./channel.setup-BhxokviI.cjs");
3
3
  exports.msteamsSetupPlugin = require_channel_setup.msteamsSetupPlugin;
@@ -1,15 +1,15 @@
1
1
  const require_rolldown_runtime = require("./rolldown-runtime-VH7oDXx4.cjs");
2
2
  const require_runtime = require("./runtime-gZTAuFux.cjs");
3
3
  require("./runtime-api.cjs");
4
- const require_resolve_allowlist = require("./resolve-allowlist-CoKmLXYe.cjs");
5
- const require_channel = require("./channel-Cdm6-HsU.cjs");
6
- const require_thread_session = require("./thread-session-p8FNgohv.cjs");
7
- const require_channel_setup = require("./channel.setup-ChwkwdLk.cjs");
4
+ const require_resolve_allowlist = require("./resolve-allowlist-DmUTQxEz.cjs");
5
+ const require_channel = require("./channel-B9LIyYeu.cjs");
6
+ const require_thread_session = require("./thread-session-NmA7_njI.cjs");
7
+ const require_channel_setup = require("./channel.setup-BhxokviI.cjs");
8
8
  const require_polls = require("./polls-BBdZPx_R.cjs");
9
9
  const require_sso_token_store = require("./sso-token-store-DTeYxubp.cjs");
10
10
  const require_approval_card = require("./approval-card-CPNH_q3P.cjs");
11
- const require_messenger = require("./messenger-DbWgzI01.cjs");
12
- const require_reaction_types = require("./reaction-types-zP91Ncwk.cjs");
11
+ const require_messenger = require("./messenger-TLdZf9Ar.cjs");
12
+ const require_reaction_types = require("./reaction-types-BbBBdnQ5.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_allow_from = require("openclaw/plugin-sdk/allow-from");
@@ -2786,7 +2786,7 @@ function extractTextFromHtmlAttachments(attachments) {
2786
2786
  for (const attachment of attachments) {
2787
2787
  const raw = require_resolve_allowlist.extractHtmlFromAttachment(attachment);
2788
2788
  if (!raw) continue;
2789
- const text = raw.replace(/<at[^>]*>.*?<\/at>/gis, " ").replace(/<a\b[^>]*href=["']([^"']+)["'][^>]*>(.*?)<\/a>/gis, "$2 $1").replace(/<br\s*\/?>/gi, "\n").replace(/<\/p>/gi, "\n").replace(/<[^>]+>/g, " ").replace(/&nbsp;/gi, " ").replace(/&amp;/gi, "&").replace(/\s+/g, " ").trim();
2789
+ const text = require_resolve_allowlist.htmlToPlainText(raw.replace(/<at[^>]*>.*?<\/at>/gis, " ").replace(/<a\b[^>]*href=["']([^"']+)["'][^>]*>(.*?)<\/a>/gis, "$2 $1"));
2790
2790
  if (text) return text;
2791
2791
  }
2792
2792
  return "";
@@ -2795,9 +2795,7 @@ async function prepareMSTeamsDebounceEntry(params) {
2795
2795
  const activity = params.context.activity;
2796
2796
  const attachments = Array.isArray(activity.attachments) ? activity.attachments : [];
2797
2797
  const rawText = activity.text?.trim() ?? "";
2798
- const htmlText = extractTextFromHtmlAttachments(attachments);
2799
- const valueText = rawText || htmlText ? "" : serializeMSTeamsAdaptiveCardActionValue(activity.value);
2800
- const text = require_resolve_allowlist.stripMSTeamsMentionTags(rawText || htmlText || valueText || "");
2798
+ const text = rawText ? require_resolve_allowlist.stripMSTeamsMentionTags(rawText) : extractTextFromHtmlAttachments(attachments) || require_resolve_allowlist.stripMSTeamsMentionTags(serializeMSTeamsAdaptiveCardActionValue(activity.value) || "");
2801
2799
  const conversationId = require_resolve_allowlist.normalizeMSTeamsConversationId(activity.conversation?.id ?? "");
2802
2800
  const replyToId = activity.replyToId ?? void 0;
2803
2801
  const implicitMentionKinds = conversationId && replyToId && await wasMSTeamsMessageSentWithPersistence({
@@ -1,4 +1,4 @@
1
- const require_resolve_allowlist = require("./resolve-allowlist-CoKmLXYe.cjs");
1
+ const require_resolve_allowlist = require("./resolve-allowlist-DmUTQxEz.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");
@@ -1,5 +1,8 @@
1
1
  {
2
2
  "id": "msteams",
3
+ "categories": [
4
+ "channels"
5
+ ],
3
6
  "doctorContract": {
4
7
  "configRepair": true,
5
8
  "stateMigrations": [
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openclaw/msteams",
3
- "version": "2026.9.3",
3
+ "version": "2026.9.4",
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.9.3"
25
+ "openclaw": ">=2026.9.4"
26
26
  },
27
27
  "peerDependenciesMeta": {
28
28
  "openclaw": {
@@ -72,10 +72,10 @@
72
72
  "minHostVersion": ">=2026.4.10"
73
73
  },
74
74
  "compat": {
75
- "pluginApi": ">=2026.9.3"
75
+ "pluginApi": ">=2026.9.4"
76
76
  },
77
77
  "build": {
78
- "openclawVersion": "2026.9.3",
78
+ "openclawVersion": "2026.9.4",
79
79
  "runtimeFormat": "cjs"
80
80
  },
81
81
  "release": {