@openclaw/msteams 2026.10.1 → 2026.10.5-beta.1

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 (26) hide show
  1. package/dist/.setup/{adapter.runtime-D0HYByze.cjs → adapter.runtime-JoPydWqP.cjs} +1 -1
  2. package/dist/.setup/{approval-handler.runtime-C-RJ3wXc.cjs → approval-handler.runtime-bUN9icMr.cjs} +3 -3
  3. package/dist/.setup/{bot-framework-service-url-BUhTe8F3.cjs → bot-framework-service-url-CPp4d-Q6.cjs} +1 -5
  4. package/dist/.setup/{channel-BFhXodl2.cjs → channel-Cifn9fsv.cjs} +230 -430
  5. package/dist/.setup/{channel.runtime-D9jrw2SN.cjs → channel.runtime-DWRAolil.cjs} +70 -44
  6. package/dist/.setup/{channel.setup-ss0TO-ap.cjs → channel.setup-BjbHugkL.cjs} +5 -7
  7. package/dist/.setup/{config-schema-0KoBzb0t.cjs → config-schema-Dk0mRIam.cjs} +1 -1
  8. package/dist/.setup/{conversation-store-state-f7V8CVNy.cjs → conversation-store-state-DprmOfl7.cjs} +103 -236
  9. package/dist/.setup/{monitor-DfSPCRkk.cjs → monitor-C9x_CJhY.cjs} +173 -322
  10. package/dist/.setup/oauth-CWJ85AMw.cjs +55 -0
  11. package/dist/.setup/{reaction-types-B-GEv57k.cjs → reaction-types-Ig9sQJuR.cjs} +3 -3
  12. package/dist/.setup/{resolve-allowlist-Ct9yxQUw.cjs → resolve-allowlist-DdDBVCzl.cjs} +77 -174
  13. package/dist/.setup/{send-7VV1iCai.cjs → send-rJpcVtRp.cjs} +8 -9
  14. package/dist/.setup/{setup-plugin-api-B0OFG32J.cjs → setup-plugin-api-DfoVOqMJ.cjs} +1 -1
  15. package/dist/.setup/{thread-session-ClI-lSyG.cjs → thread-session-B74FC1Id.cjs} +1 -1
  16. package/dist/.setup/{token-config-DOt3XwVa.cjs → token-config-CqIh8z7Q.cjs} +6 -7
  17. package/dist/api.cjs +2 -2
  18. package/dist/channel-config-api.cjs +1 -1
  19. package/dist/channel-plugin-api.cjs +1 -1
  20. package/dist/directory-contract-api.cjs +2 -2
  21. package/dist/doctor-contract-api.cjs +1 -1
  22. package/dist/qa-runner-api.cjs +9 -10
  23. package/dist/setup-entry.cjs +1 -1
  24. package/dist/setup-plugin-api.cjs +1 -1
  25. package/package.json +4 -4
  26. package/dist/.setup/oauth-CYxMYIOQ.cjs +0 -102
@@ -1,15 +1,16 @@
1
1
  require("../runtime-api.cjs");
2
- const require_resolve_allowlist = require("./resolve-allowlist-Ct9yxQUw.cjs");
3
- const require_token_config = require("./token-config-DOt3XwVa.cjs");
4
- const require_channel = require("./channel-BFhXodl2.cjs");
5
- const require_channel_setup = require("./channel.setup-ss0TO-ap.cjs");
6
- const require_conversation_store_state = require("./conversation-store-state-f7V8CVNy.cjs");
7
- const require_send = require("./send-7VV1iCai.cjs");
8
- const require_reaction_types = require("./reaction-types-B-GEv57k.cjs");
2
+ const require_resolve_allowlist = require("./resolve-allowlist-DdDBVCzl.cjs");
3
+ const require_token_config = require("./token-config-CqIh8z7Q.cjs");
4
+ const require_channel = require("./channel-Cifn9fsv.cjs");
5
+ const require_channel_setup = require("./channel.setup-BjbHugkL.cjs");
6
+ const require_conversation_store_state = require("./conversation-store-state-DprmOfl7.cjs");
7
+ const require_send = require("./send-rJpcVtRp.cjs");
8
+ const require_reaction_types = require("./reaction-types-Ig9sQJuR.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_reply_payload = require("openclaw/plugin-sdk/reply-payload");
12
12
  let openclaw_plugin_sdk_number_runtime = require("openclaw/plugin-sdk/number-runtime");
13
+ let openclaw_plugin_sdk_channel_inbound = require("openclaw/plugin-sdk/channel-inbound");
13
14
  let openclaw_plugin_sdk_channel_send_result = require("openclaw/plugin-sdk/channel-send-result");
14
15
  let openclaw_plugin_sdk_string_normalization_runtime = require("openclaw/plugin-sdk/string-normalization-runtime");
15
16
  let openclaw_plugin_sdk_text_chunking = require("openclaw/plugin-sdk/text-chunking");
@@ -43,6 +44,7 @@ async function listMSTeamsDirectoryGroupsLive(params) {
43
44
  const token = await require_resolve_allowlist.resolveGraphToken(params.cfg);
44
45
  const limit = typeof params.limit === "number" && params.limit > 0 ? params.limit : 20;
45
46
  const [teamQuery, channelQuery] = rawQuery.includes("/") ? (0, openclaw_plugin_sdk_string_coerce_runtime.normalizeStringEntries)(rawQuery.split("/", 2)) : [rawQuery, null];
47
+ const normalizedChannelQuery = (0, openclaw_plugin_sdk_string_coerce_runtime.normalizeLowercaseStringOrEmpty)(channelQuery);
46
48
  const teams = await require_resolve_allowlist.listTeamsByName(token, teamQuery);
47
49
  const results = [];
48
50
  for (const team of teams) {
@@ -64,7 +66,7 @@ async function listMSTeamsDirectoryGroupsLive(params) {
64
66
  for (const channel of channels) {
65
67
  const name = channel.displayName?.trim();
66
68
  if (!name) continue;
67
- if (!(0, openclaw_plugin_sdk_string_coerce_runtime.normalizeLowercaseStringOrEmpty)(name).includes((0, openclaw_plugin_sdk_string_coerce_runtime.normalizeLowercaseStringOrEmpty)(channelQuery))) continue;
69
+ if (!(0, openclaw_plugin_sdk_string_coerce_runtime.normalizeLowercaseStringOrEmpty)(name).includes(normalizedChannelQuery)) continue;
68
70
  results.push({
69
71
  kind: "group",
70
72
  id: `conversation:${channel.id}`,
@@ -117,9 +119,22 @@ function resolveConversationPath(to) {
117
119
  chatId: cleaned
118
120
  };
119
121
  }
122
+ async function resolveGraphMessageContext(params, options) {
123
+ const token = await require_resolve_allowlist.resolveGraphToken(params.cfg, options);
124
+ const conversationId = await resolveGraphConversationId(params.to);
125
+ return {
126
+ token,
127
+ conversationId,
128
+ ...resolveConversationPath(conversationId)
129
+ };
130
+ }
131
+ async function resolveGraphPinContext(params, operation) {
132
+ const context = await resolveGraphMessageContext(params);
133
+ if (context.kind === "channel") throw new Error((operation === "list" ? "Listing pinned messages is not supported for channels on Graph v1.0. " : "Pin/unpin is not supported for channel messages on Graph v1.0. ") + "Only chat conversations support pinned messages.");
134
+ return context;
135
+ }
120
136
  async function getMessageMSTeams(params) {
121
- const token = await require_resolve_allowlist.resolveGraphToken(params.cfg);
122
- const { basePath } = resolveConversationPath(await resolveGraphConversationId(params.to));
137
+ const { token, basePath } = await resolveGraphMessageContext(params);
123
138
  const path = `${basePath}/messages/${encodeURIComponent(params.messageId)}`;
124
139
  const msg = await require_resolve_allowlist.fetchGraphJson({
125
140
  token,
@@ -133,26 +148,21 @@ async function getMessageMSTeams(params) {
133
148
  };
134
149
  }
135
150
  async function pinMessageMSTeams(params) {
136
- const token = await require_resolve_allowlist.resolveGraphToken(params.cfg);
137
- const conversationId = await resolveGraphConversationId(params.to);
138
- const conv = resolveConversationPath(conversationId);
139
- if (conv.kind === "channel") throw new Error("Pin/unpin is not supported for channel messages on Graph v1.0. Only chat conversations support pinned messages.");
151
+ const { token, conversationId, basePath } = await resolveGraphPinContext(params, "modify");
140
152
  const body = { "message@odata.bind": `https://graph.microsoft.com/v1.0/chats/${encodeURIComponent(conversationId)}/messages/${encodeURIComponent(params.messageId)}` };
141
153
  return {
142
154
  ok: true,
143
155
  pinnedMessageId: (await require_resolve_allowlist.mutateGraphJson({
144
156
  token,
145
- path: `${conv.basePath}/pinnedMessages`,
157
+ path: `${basePath}/pinnedMessages`,
146
158
  method: "POST",
147
159
  body
148
160
  })).id
149
161
  };
150
162
  }
151
163
  async function unpinMessageMSTeams(params) {
152
- const token = await require_resolve_allowlist.resolveGraphToken(params.cfg);
153
- const conv = resolveConversationPath(await resolveGraphConversationId(params.to));
154
- if (conv.kind === "channel") throw new Error("Pin/unpin is not supported for channel messages on Graph v1.0. Only chat conversations support pinned messages.");
155
- const path = `${conv.basePath}/pinnedMessages/${encodeURIComponent(params.pinnedMessageId)}`;
164
+ const { token, basePath } = await resolveGraphPinContext(params, "modify");
165
+ const path = `${basePath}/pinnedMessages/${encodeURIComponent(params.pinnedMessageId)}`;
156
166
  await require_resolve_allowlist.deleteGraphRequest({
157
167
  token,
158
168
  path
@@ -161,10 +171,8 @@ async function unpinMessageMSTeams(params) {
161
171
  }
162
172
  const LIST_PINS_MAX_PAGES = 10;
163
173
  async function listPinsMSTeams(params) {
164
- const token = await require_resolve_allowlist.resolveGraphToken(params.cfg);
165
- const conv = resolveConversationPath(await resolveGraphConversationId(params.to));
166
- if (conv.kind === "channel") throw new Error("Listing pinned messages is not supported for channels on Graph v1.0. Only chat conversations support pinned messages.");
167
- const path = `${conv.basePath}/pinnedMessages?$expand=message`;
174
+ const { token, basePath } = await resolveGraphPinContext(params, "list");
175
+ const path = `${basePath}/pinnedMessages?$expand=message`;
168
176
  const allPins = [];
169
177
  let res = await require_resolve_allowlist.fetchGraphJson({
170
178
  token,
@@ -190,8 +198,7 @@ async function listPinsMSTeams(params) {
190
198
  }
191
199
  async function mutateMessageReaction(params, operation) {
192
200
  const reactionType = require_reaction_types.resolveMSTeamsReactionEmoji(params.reactionType);
193
- const token = await require_resolve_allowlist.resolveGraphToken(params.cfg, { preferDelegated: true });
194
- const { basePath } = resolveConversationPath(await resolveGraphConversationId(params.to));
201
+ const { token, basePath } = await resolveGraphMessageContext(params, { preferDelegated: true });
195
202
  await require_resolve_allowlist.mutateGraphJson({
196
203
  token,
197
204
  path: `${basePath}/messages/${encodeURIComponent(params.messageId)}/${operation}`,
@@ -212,8 +219,7 @@ function unreactMessageMSTeams(params) {
212
219
  * Uses Graph v1.0 (reactions are included in the message resource).
213
220
  */
214
221
  async function listReactionsMSTeams(params) {
215
- const token = await require_resolve_allowlist.resolveGraphToken(params.cfg);
216
- const { basePath } = resolveConversationPath(await resolveGraphConversationId(params.to));
222
+ const { token, basePath } = await resolveGraphMessageContext(params);
217
223
  const path = `${basePath}/messages/${encodeURIComponent(params.messageId)}`;
218
224
  const msg = await require_resolve_allowlist.fetchGraphJson({
219
225
  token,
@@ -261,8 +267,7 @@ function matchesSearchSender(message, from) {
261
267
  * locally without widening the read to the account's global message index.
262
268
  */
263
269
  async function searchMessagesMSTeams(params) {
264
- const token = await require_resolve_allowlist.resolveGraphToken(params.cfg);
265
- const { basePath } = resolveConversationPath(await resolveGraphConversationId(params.to));
270
+ const { token, basePath } = await resolveGraphMessageContext(params);
266
271
  const rawLimit = params.limit ?? SEARCH_DEFAULT_LIMIT;
267
272
  const top = Number.isFinite(rawLimit) ? Math.min(Math.max(Math.floor(rawLimit), 1), SEARCH_MAX_LIMIT) : SEARCH_DEFAULT_LIMIT;
268
273
  const query = params.query.trim().toLowerCase();
@@ -489,15 +494,35 @@ function toMSTeamsOutboundResult(result) {
489
494
  }
490
495
  };
491
496
  }
492
- async function sendWithDeliveryResults(send, onDeliveryResult) {
493
- if (!onDeliveryResult) return send(void 0);
494
- let childReported = false;
495
- const result = await send(async (delivery) => {
496
- childReported = true;
497
- await onDeliveryResult((0, openclaw_plugin_sdk_channel_send_result.attachChannelToResult)("msteams", toMSTeamsOutboundResult(delivery)));
498
- });
499
- if (!childReported) await onDeliveryResult((0, openclaw_plugin_sdk_channel_send_result.attachChannelToResult)("msteams", toMSTeamsOutboundResult(result)));
500
- return result;
497
+ async function sendWithDeliveryResults(send, onDeliveryResult, acceptedResults = []) {
498
+ const acceptedBeforeSend = acceptedResults.length;
499
+ try {
500
+ let childReported = false;
501
+ const result = await send(onDeliveryResult ? async (delivery) => {
502
+ childReported = true;
503
+ acceptedResults.push(delivery);
504
+ await onDeliveryResult((0, openclaw_plugin_sdk_channel_send_result.attachChannelToResult)("msteams", toMSTeamsOutboundResult(delivery)));
505
+ } : void 0);
506
+ if (!childReported) {
507
+ acceptedResults.push(result);
508
+ if (onDeliveryResult) await onDeliveryResult((0, openclaw_plugin_sdk_channel_send_result.attachChannelToResult)("msteams", toMSTeamsOutboundResult(result)));
509
+ }
510
+ return result;
511
+ } catch (error) {
512
+ const partial = (0, openclaw_plugin_sdk_channel_inbound.isChannelPartialDeliveryError)(error) ? error : void 0;
513
+ const earlierResults = partial ? acceptedResults.slice(0, acceptedBeforeSend) : acceptedResults;
514
+ if (earlierResults.length === 0) throw error;
515
+ const receipt = (0, openclaw_plugin_sdk_channel_outbound.createMessageReceiptFromOutboundResults)({ results: [...earlierResults.map((result) => (0, openclaw_plugin_sdk_channel_send_result.attachChannelToResult)("msteams", result)), ...partial?.deliveryResult.receipt ? [{ receipt: partial.deliveryResult.receipt }] : (partial?.deliveryResult.messageIds ?? []).map((messageId) => ({
516
+ channel: "msteams",
517
+ messageId
518
+ }))] });
519
+ throw (0, openclaw_plugin_sdk_channel_inbound.createChannelPartialDeliveryError)(partial?.cause ?? error, {
520
+ ...partial?.deliveryResult,
521
+ messageIds: receipt.platformMessageIds,
522
+ receipt,
523
+ visibleReplySent: true
524
+ });
525
+ }
501
526
  }
502
527
  function resolveMSTeamsThreadTarget(to, threadId) {
503
528
  const normalizedThreadId = threadId == null ? "" : String(threadId).trim();
@@ -553,6 +578,7 @@ const msteamsOutbound = {
553
578
  assertDirectAdapterHandoff,
554
579
  onPlatformSendDispatch
555
580
  };
581
+ const acceptedResults = [];
556
582
  const deliveryTarget = resolveMSTeamsThreadTarget(to, threadId);
557
583
  const msteamsData = (0, openclaw_plugin_sdk_string_coerce_runtime.asOptionalRecord)(payload.channelData?.msteams);
558
584
  const presentationCard = (0, openclaw_plugin_sdk_string_coerce_runtime.asOptionalRecord)(msteamsData?.presentationCard);
@@ -563,7 +589,7 @@ const msteamsOutbound = {
563
589
  card: presentationCard,
564
590
  ...handoff,
565
591
  onDeliveryResult: report
566
- }), onDeliveryResult);
592
+ }), onDeliveryResult, acceptedResults);
567
593
  return (0, openclaw_plugin_sdk_channel_send_result.attachChannelToResult)("msteams", toMSTeamsOutboundResult(result));
568
594
  }
569
595
  const mediaUrls = (0, openclaw_plugin_sdk_string_normalization_runtime.normalizeStringEntries)((0, openclaw_plugin_sdk_reply_payload.resolvePayloadMediaUrls)({
@@ -578,14 +604,14 @@ const msteamsOutbound = {
578
604
  const result = await (0, openclaw_plugin_sdk_reply_payload.sendPayloadMediaSequence)({
579
605
  text,
580
606
  mediaUrls,
581
- send: async ({ text: textLocal, mediaUrl: mediaUrlLocal }) => await sendWithDeliveryResults((report) => send(deliveryTarget, textLocal, {
607
+ send: ({ text: textLocal, mediaUrl: mediaUrlLocal }) => sendWithDeliveryResults((report) => send(deliveryTarget, textLocal, {
582
608
  mediaUrl: mediaUrlLocal,
583
609
  mediaAccess,
584
610
  mediaLocalRoots,
585
611
  mediaReadFile,
586
612
  ...handoff,
587
613
  onDeliveryResult: report
588
- }), onDeliveryResult)
614
+ }), onDeliveryResult, acceptedResults)
589
615
  });
590
616
  if (result) return (0, openclaw_plugin_sdk_channel_send_result.attachChannelToResult)("msteams", toMSTeamsOutboundResult(result));
591
617
  }
@@ -599,7 +625,7 @@ const msteamsOutbound = {
599
625
  for (const chunk of chunks) result = await sendWithDeliveryResults((report) => send(deliveryTarget, chunk, {
600
626
  ...handoff,
601
627
  onDeliveryResult: report
602
- }), onDeliveryResult);
628
+ }), onDeliveryResult, acceptedResults);
603
629
  return (0, openclaw_plugin_sdk_channel_send_result.attachChannelToResult)("msteams", toMSTeamsOutboundResult(result));
604
630
  }
605
631
  throw new Error("MS Teams payload send requires text, media, or a presentation card.");
@@ -666,13 +692,13 @@ async function probeMSTeams(cfg) {
666
692
  const { app } = await require_resolve_allowlist.loadMSTeamsSdkWithAuth(creds, require_resolve_allowlist.resolveMSTeamsSdkCloudOptions(cfg));
667
693
  const tokenProvider = require_resolve_allowlist.createMSTeamsTokenProvider(app);
668
694
  if (!await require_resolve_allowlist.withMSTeamsRequestDeadline({
669
- label: "MS Teams Bot Framework probe token",
695
+ label: "MS Teams Bot Framework token check",
670
696
  work: () => tokenProvider.getAccessToken("https://api.botframework.com")
671
697
  })) throw new Error("Failed to acquire bot token");
672
698
  let graph;
673
699
  try {
674
700
  const accessToken = await require_resolve_allowlist.withMSTeamsRequestDeadline({
675
- label: "MS Teams Graph probe token",
701
+ label: "MS Teams Graph token check",
676
702
  work: () => tokenProvider.getAccessToken("https://graph.microsoft.com")
677
703
  });
678
704
  const payload = accessToken ? decodeJwtPayload(accessToken) : null;
@@ -1,6 +1,6 @@
1
- const require_resolve_allowlist = require("./resolve-allowlist-Ct9yxQUw.cjs");
2
- const require_token_config = require("./token-config-DOt3XwVa.cjs");
3
- const require_config_schema = require("./config-schema-0KoBzb0t.cjs");
1
+ const require_resolve_allowlist = require("./resolve-allowlist-DdDBVCzl.cjs");
2
+ const require_token_config = require("./token-config-CqIh8z7Q.cjs");
3
+ const require_config_schema = require("./config-schema-Dk0mRIam.cjs");
4
4
  let openclaw_plugin_sdk_string_coerce_runtime = require("openclaw/plugin-sdk/string-coerce-runtime");
5
5
  let openclaw_plugin_sdk_allow_from = require("openclaw/plugin-sdk/allow-from");
6
6
  let openclaw_plugin_sdk_account_id = require("openclaw/plugin-sdk/account-id");
@@ -431,7 +431,7 @@ const msteamsGroupAccess = {
431
431
  currentEntries: ({ cfg }) => listMSTeamsGroupEntries(cfg),
432
432
  updatePrompt: ({ cfg }) => Boolean(cfg.channels?.msteams?.teams),
433
433
  setPolicy: ({ cfg, policy }) => setMSTeamsGroupPolicy(cfg, policy),
434
- resolveAllowlist: async ({ cfg, entries, prompter }) => await resolveMSTeamsGroupAllowlist({
434
+ resolveAllowlist: ({ cfg, entries, prompter }) => resolveMSTeamsGroupAllowlist({
435
435
  cfg,
436
436
  entries,
437
437
  prompter
@@ -469,7 +469,7 @@ const msteamsSetupWizard = {
469
469
  };
470
470
  let oauthModule;
471
471
  try {
472
- oauthModule = await Promise.resolve().then(() => require("./oauth-CYxMYIOQ.cjs"));
472
+ oauthModule = await Promise.resolve().then(() => require("./oauth-CWJ85AMw.cjs"));
473
473
  } catch (err) {
474
474
  await noteDelegatedAuthFailure(err);
475
475
  return {
@@ -482,8 +482,6 @@ const msteamsSetupWizard = {
482
482
  let tokens;
483
483
  try {
484
484
  tokens = await oauthModule.loginMSTeamsDelegated({
485
- isRemote: true,
486
- openUrl: openDelegatedOAuthUrl,
487
485
  log: (msg) => {
488
486
  params.prompter.note(msg);
489
487
  },
@@ -1,4 +1,4 @@
1
- const require_bot_framework_service_url = require("./bot-framework-service-url-BUhTe8F3.cjs");
1
+ const require_bot_framework_service_url = require("./bot-framework-service-url-CPp4d-Q6.cjs");
2
2
  let openclaw_plugin_sdk_channel_core = require("openclaw/plugin-sdk/channel-core");
3
3
  let openclaw_plugin_sdk_ssrf_policy = require("openclaw/plugin-sdk/ssrf-policy");
4
4
  let openclaw_plugin_sdk_secret_input = require("openclaw/plugin-sdk/secret-input");