Cherry-pick batch: MS Teams adapter (34 commits)#1968
Merged
alexey-pelykh merged 32 commits intomainfrom Mar 24, 2026
Merged
Conversation
…#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 14074d3)
(cherry picked from commit 5b7ae24)
(cherry picked from commit c8a36c6)
(cherry picked from commit 017c0dc)
(cherry picked from commit 028f3c4)
(cherry picked from commit 1ea2593)
(cherry picked from commit 23c8af3)
(cherry picked from commit 38b0986)
* 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)
(cherry picked from commit 55e0c63)
(cherry picked from commit 653d69e)
(cherry picked from commit 689a734)
(cherry picked from commit 6b04ab1)
(cherry picked from commit 774a206)
…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)
(cherry picked from commit 7d11f6c)
…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)
(cherry picked from commit 8ff277d)
(cherry picked from commit a9d8518)
(cherry picked from commit b61bc49)
(cherry picked from commit d4d0091)
(cherry picked from commit da4f825)
(cherry picked from commit e9078b3)
(cherry picked from commit f2300f4)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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
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
OpenClaw*→RemoteClaw*in all cherry-picked filesruntime-api.js→remoteclaw/plugin-sdk, test helper paths)resolveGraphChatIdfunction after upstream refactor overwrote itupdateActivity,deleteActivity,onReactionsAdded,onReactionsRemoved)resolveDualTextControlCommandGate→resolveControlCommandGate(fork API)Closes #1878
🤖 Generated with Claude Code