Skip to content

Cherry-pick batch: MS Teams adapter (34 commits)#1968

Merged
alexey-pelykh merged 32 commits intomainfrom
staging/cherry-pick-1878
Mar 24, 2026
Merged

Cherry-pick batch: MS Teams adapter (34 commits)#1968
alexey-pelykh merged 32 commits intomainfrom
staging/cherry-pick-1878

Conversation

@alexey-pelykh
Copy link
Copy Markdown

Cherry-pick batch from upstream

Issue: #1878
Commits: 34 evaluated, 32 on branch (27 picked, 5 resolved with fork adaptations, 7 skipped as empty/inapplicable)

What's included

  • MS Teams adapter improvements: DM file uploads, Graph API chat ID resolution, sender allowlist security fix, batch reply dispatcher, lazy-load runtime paths
  • Test coverage: graph upload helpers, directory helpers, poll/file-card helpers, probe env isolation, policy route fixtures, attachment helpers, consent auth fixtures
  • Type improvements: adapter doubles aligned with interfaces, tightened regression assertions
  • Refactors: shared drive upload flow, dual text command gating, directory runtime helpers

Skipped/empty commits

  • 0c9428a865 — setup adapter helpers (fork uses onboarding.ts pattern)
  • ad5e3f0cd5 — chat plugin builder (fork doesn't have upstream infrastructure)
  • da948a8073 — message tool discovery consolidation (missing upstream exports)
  • df284fec27 — message tool card schema (missing upstream exports)
  • 0b58829364 — env-sensitive assertions (fork lacks self() tests + synology-chat)
  • 2ebc7e3ded — dedupe revoked thread context (already applied)
  • 23a119c6ea — clear rebase conflict hunk (already applied)

Fork adaptations

  • Renamed OpenClaw*RemoteClaw* in all cherry-picked files
  • Fixed import paths (runtime-api.jsremoteclaw/plugin-sdk, test helper paths)
  • Restored resolveGraphChatId function after upstream refactor overwrote it
  • Reverted cross-cutting changes to zalo and imessage (outside scope)
  • Added missing adapter properties (updateActivity, deleteActivity, onReactionsAdded, onReactionsRemoved)
  • Fixed resolveDualTextControlCommandGateresolveControlCommandGate (fork API)

Closes #1878

🤖 Generated with Claude Code

sudie-codes and others added 30 commits March 24, 2026 10:59
…#49585)

Fixes openclaw#35822 — Bot Framework conversation.id format is incompatible with
Graph API /chats/{chatId}. Added resolveGraphChatId() to look up the
Graph-native chat ID via GET /me/chats, cached in the conversation store.

Co-authored-by: Claude Opus 4.6 (1M context) <[email protected]>
(cherry picked from commit 06845a1)
(cherry picked from commit 0f43dc4)
(cherry picked from commit 1ea2593)
* build: mirror uuid for msteams

Add uuid to both the msteams bundled extension and the root package so the workspace build can resolve @microsoft/agents-hosting during tsdown while standalone extension installs also have the runtime dependency available.

Regeneration-Prompt: |
  pnpm build failed because @microsoft/agents-hosting 1.3.1 requires uuid in its published JS but does not declare it in its package manifest. The msteams extension dynamically imports that package, and the workspace build resolves it from the root dependency graph. Mirror uuid into the root package for workspace builds and keep it in extensions/msteams/package.json so standalone plugin installs also resolve it. Update the lockfile to match the manifest changes.

* build: prune stale plugin dist symlinks

Remove stale dist and dist-runtime plugin node_modules symlinks before tsdown runs. These links point back into extension installs, and tsdown's clean step can traverse them on rebuilds and hollow out the active pnpm dependency tree before plugin-sdk declaration generation runs.

Regeneration-Prompt: |
  pnpm build was intermittently failing in the plugin-sdk:dts phase after earlier build steps had already run. The symptom looked like missing root packages such as zod, ajv, commander, and undici even though a fresh install briefly fixed the problem. Investigate the build pipeline step by step rather than patching TypeScript errors. Confirm whether rebuilds mutate node_modules, identify the first step that does it, and preserve existing runtime-postbuild behavior.
  The key constraint is that dist and dist-runtime plugin node_modules links are intentional for runtime packaging, so do not remove that feature globally. Instead, make rebuilds safe by deleting only stale symlinks left in generated output before invoking tsdown, so tsdown cleanup cannot recurse back into the live pnpm install tree. Verify with repeated pnpm build runs.
(cherry picked from commit 505d140)
…ement self() (openclaw#49929)

- Add updateActivity/deleteActivity to MSTeamsAdapter
- Add onReactionsAdded/onReactionsRemoved to MSTeamsActivityHandler
- Implement directory self() to return bot identity from appId credential
- Add tests for self() in channel.directory.test.ts

(cherry picked from commit 7c3af37)
…ed (GHSA-g7cr-9h7q-4qxq) (openclaw#49582)

When a route-level (teams/channel) allowlist was configured but the sender
allowlist (allowFrom/groupAllowFrom) was empty, resolveSenderScopedGroupPolicy
would downgrade the effective group policy from "allowlist" to "open", allowing
any Teams user to interact with the bot.

The fix: when channelGate.allowlistConfigured is true and effectiveGroupAllowFrom
is empty, preserve the configured groupPolicy ("allowlist") rather than letting
it be downgraded to "open". This ensures an empty sender allowlist with an active
route allowlist means deny-all rather than allow-all.

Co-authored-by: Claude Opus 4.6 (1M context) <[email protected]>
(cherry picked from commit 897cda7)
…ion call (openclaw#29379) (openclaw#49587)

Teams silently drops blocks 2+ when each deliver() opens its own
continueConversation() call. Accumulate rendered messages across all
deliver() calls and flush them together in markDispatchIdle().

On batch failure, retry each message individually so trailing blocks
are not silently lost. Log a warning when any individual messages fail
so flush failures are visible in logs.

(cherry picked from commit 8b5eeba)
@alexey-pelykh alexey-pelykh enabled auto-merge (squash) March 24, 2026 10:31
@alexey-pelykh alexey-pelykh merged commit 79e42e2 into main Mar 24, 2026
7 checks passed
@alexey-pelykh alexey-pelykh deleted the staging/cherry-pick-1878 branch March 24, 2026 10:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Cherry-pick: MS Teams adapter (34 commits)

6 participants