fix(messaging): inject Teams mention hints at runtime#5956
Conversation
Signed-off-by: San Dang <sdang@nvidia.com>
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughA new preload patches ChangesTeams OpenClaw Mention Hint Patch
Estimated code review effort🎯 4 (Complex) | ⏱️ ~45 minutes Suggested labels
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
Code Coverage OverviewLanguages: TypeScript TypeScript / code-coverage/pluginThe overall coverage in the branch is 96%. Coverage data for the branch is not yet available. Show a code coverage summary of the most covered files.
TypeScript / code-coverage/cliThe overall coverage in the branch is 68%. Coverage data for the branch is not yet available. Show a code coverage summary of the most covered files.
Updated |
|
🌿 Preview your docs: https://nvidia-preview-pr-5956.docs.buildwithfern.com/nemoclaw |
PR Review Advisor (Nemotron Ultra) — BlockedMerge posture: Do not merge until addressed Action checklist
Findings index
🚨 Required before mergeAddress these before merging unless a maintainer explicitly overrides the advisor with rationale.
|
E2E Advisor RecommendationRequired E2E: Dispatch hint: Full advisor summaryE2E Recommendation AdvisorBase: Required E2E
Optional E2E
New E2E recommendations
Dispatch hint
|
Vitest E2E Scenario RecommendationRequired Vitest E2E scenarios: None Full Vitest E2E advisor summaryVitest E2E Scenario AdvisorBase: Required Vitest E2E scenarios
Optional Vitest E2E scenarios
Relevant changed files
|
PR Review Advisor — Changes requestedMerge posture: Do not merge yet Action checklist
Findings index
🚨 Required before mergeAddress these before merging unless a maintainer explicitly overrides the advisor with rationale.
|
Signed-off-by: San Dang <sdang@nvidia.com>
There was a problem hiding this comment.
🧹 Nitpick comments (2)
src/lib/messaging/compiler/manifest-compiler.test.ts (1)
310-318: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winAdd an applier/build-time check for the new preload path.
This only proves the plan shape. A regression in the layer that copies
msteams-message-hints.jsor wires the preload into the sandbox would still leave Teams setup broken while this stays green. As per coding guidelines, "Cover behavior changes with manifest/compiler tests plus applier/onboard/channel CLI tests when host effects change," and path instructions, "Testing: cover the changed surface with the narrowest relevant vitest sets ... and applier/build-time tests when runtime preload/build application changes."🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/lib/messaging/compiler/manifest-compiler.test.ts` around lines 310 - 318, The manifest-compiler test only checks the runtime plan shape, so add a build-time/applier assertion for the new Teams preload path as well. Update the relevant compiler/applier test coverage around manifest compilation and preload application (for example the manifest compiler flow that produces nodePreloads and the build-time copy/wiring path for msteams-message-hints) to verify the file is actually copied and wired into the sandbox, not just present in the plan.Sources: Coding guidelines, Path instructions
test/openclaw-msteams-message-hints-patch.test.ts (1)
105-106: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winAssert the mention contract, not the exact prompt copy.
These checks are brittle against harmless wording edits. Prefer asserting that exactly one hint contains the Teams native mention syntax and that it lands before the targeting hint. As per path instructions, "Prefer observable outcomes through the public boundary over source-text ... assertions."
Possible test shape
- expect(hints).toEqual([ADAPTIVE_CARD_HINT, MSTEAMS_MENTION_HINT, TARGETING_HINT]); + const mentionHints = hints.filter((hint) => hint.includes("@[Display Name](")); + const mentionIndex = hints.findIndex((hint) => hint.includes("@[Display Name](")); + const targetingIndex = hints.findIndex((hint) => hint.startsWith("- MSTeams targeting:")); + expect(mentionHints).toHaveLength(1); + expect(mentionIndex).toBeGreaterThanOrEqual(0); + expect(targetingIndex).toBeGreaterThan(mentionIndex);Also applies to: 118-119, 131-131
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@test/openclaw-msteams-message-hints-patch.test.ts` around lines 105 - 106, The tests in the hint patch suite are asserting exact prompt text instead of the mention contract, which makes them brittle to harmless wording changes. Update the relevant assertions in the hint-related test cases to verify observable behavior through the public boundary: ensure exactly one hint uses the Teams native mention syntax and that it appears before the targeting hint, using the existing hint identifiers like ADAPTIVE_CARD_HINT, MSTEAMS_MENTION_HINT, and TARGETING_HINT to keep the checks stable.Source: Path instructions
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Nitpick comments:
In `@src/lib/messaging/compiler/manifest-compiler.test.ts`:
- Around line 310-318: The manifest-compiler test only checks the runtime plan
shape, so add a build-time/applier assertion for the new Teams preload path as
well. Update the relevant compiler/applier test coverage around manifest
compilation and preload application (for example the manifest compiler flow that
produces nodePreloads and the build-time copy/wiring path for
msteams-message-hints) to verify the file is actually copied and wired into the
sandbox, not just present in the plan.
In `@test/openclaw-msteams-message-hints-patch.test.ts`:
- Around line 105-106: The tests in the hint patch suite are asserting exact
prompt text instead of the mention contract, which makes them brittle to
harmless wording changes. Update the relevant assertions in the hint-related
test cases to verify observable behavior through the public boundary: ensure
exactly one hint uses the Teams native mention syntax and that it appears before
the targeting hint, using the existing hint identifiers like ADAPTIVE_CARD_HINT,
MSTEAMS_MENTION_HINT, and TARGETING_HINT to keep the checks stable.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: b9c355a1-2afe-45e2-997d-372444662669
📒 Files selected for processing (6)
docs/manage-sandboxes/messaging-channels.mdxsrc/lib/messaging/channels/manifests.test.tssrc/lib/messaging/channels/teams/manifest.tssrc/lib/messaging/channels/teams/runtime/msteams-message-hints.tssrc/lib/messaging/compiler/manifest-compiler.test.tstest/openclaw-msteams-message-hints-patch.test.ts
✅ Files skipped from review due to trivial changes (2)
- docs/manage-sandboxes/messaging-channels.mdx
- src/lib/messaging/channels/teams/manifest.ts
|
Advisor response for head CI is green on the current head, including CodeQL, static checks, build/typecheck, CLI shards, sandbox image builds, CodeRabbit, and both PR Review Advisor jobs. I reviewed the refreshed Nemotron comment as advisory feedback against the current PR diff. Scope reminder: this PR adds a localized OpenClaw Teams prompt-hint compatibility preload. It does not change Teams auth, message routing, the native send formatter, dependency versions, or user-facing docs. The runtime effect is limited to appending one static mention-format hint to Fixed in
Required items that I am justifying rather than changing in this PR
Resolve/justify items
Improvements and suggestions
Conclusion: no further code is required for this PR. The remaining advisor items are either addressed, outside added lines, intentionally fail-open for availability, or better suited to follow-up hardening rather than blocking this localized compatibility fix. |
|
Ready for review @cv |
Signed-off-by: Carlos Villela <cvillela@nvidia.com>
Signed-off-by: Carlos Villela <cvillela@nvidia.com>
E2E Target RecommendationRequired E2E targets: None Full E2E target advisor summaryE2E Target AdvisorBase: Required E2E targets
Optional E2E targets
Relevant changed files
|
|
Maintainer disposition for the production-boundary advisor item: this PR intentionally does not claim a real Teams delivery test. The pinned third-party sender/parser is unchanged; the NemoClaw-owned boundary is the |
|
@coderabbitai review |
✅ Action performedReview finished.
|
Signed-off-by: Carlos Villela <cvillela@nvidia.com>
Vitest E2E Target Results — ✅ All selected jobs passedRun: 28425986489
|
Vitest E2E Target Results — ✅ All selected jobs passedRun: 28425570138
|
Signed-off-by: Carlos Villela <cvillela@nvidia.com>
|
@coderabbitai review |
✅ Action performedReview finished.
|
Signed-off-by: Carlos Villela <cvillela@nvidia.com>
|
@coderabbitai review |
✅ Action performedReview finished.
|
Vitest E2E Target Results — ✅ All requested jobs passedRun: 28427324151
|
|
Maintainer acceptance for head I reviewed the implementation, the exact pinned package/load boundary, the regression tests, and the automated advisor findings. This is the trusted maintainer decision requested by GPT findings Accepted residual gap
Evidence and finding resolution
Override scope This acceptance is limited to the live Teams delivery/provenance evidence gap and the advisor claims rebutted above. It does not waive failing CI, exact-head E2E, DCO/signature requirements, or any future OpenClaw pin re-review. |
Vitest E2E Target Results — ✅ All requested jobs passedRun: 28428153446
|
cv
left a comment
There was a problem hiding this comment.
Maintainer acceptance for exact head e120c86d7 (v0.0.71)
I reviewed the implementation, exact pinned package/load boundary, tests, and automated findings. This formal review records the maintainer decision requested by GPT PRA-2, PRA-1, and PRA-3.
- I accept the residual live-delivery evidence gap: without a provisioned Teams tenant, app, and webhook, repository tests cannot prove the final UI mention chip or notification. This PR adds prompt guidance only and does not modify the Bot Framework sender/parser. If raw IDs persist, the source fix belongs upstream and this shim should be reworked or reverted.
- The published
@openclaw/msteams@2026.5.27artifact and OpenClaw loader seam were manually inspected. Recorded integrity and SHA-256 values are reproducibility notes, not automated remote-provenance claims. - Hermetic coverage binds the reviewed shape to
nemoclaw/package.json, fails on a pin bump, modelsruntimeExtensions-> OpenClawcreateRequire-> ESMchannel-plugin-api.js, executes the compiled preload, and asserts hint order plus hook restoration. optional: falserequires the packaged asset at setup time. Runtime shape mismatch intentionally preserves Teams and emits one boundedNEMOCLAW_MSTEAMS_HINT_PATCH_SKIPPEDwarning.- The load hook restores in
finallyafter the first exact entry attempt on success or failure. Negative coverage includes immutable plugin failure, unrelated and child modules, non-gateway processes, launcher gating, and ESM linking. - Package matching only controls a prompt-function mutation after Node selected code to execute; it adds no execution, authentication, routing, or credential authority. A malicious same-name or symlinked file under the installed package already implies a compromised
node_modulestree. - Exact-head mandatory CI and CodeRabbit are green. Exact-head advisor-required
channels-stop-startrun 28428153446 passed for both OpenClaw and Hermes. - PR #5595 changes the OpenClaw pin and overlaps the Teams manifest. Whichever lands second must revalidate the seam; the pin-bound contract enforces that sequencing.
This acceptance is limited to the delivery/provenance evidence gap and the stale advisor claims rebutted above. It does not waive CI, E2E, DCO/signature requirements, or future pin re-review. This is a COMMENTED review, not merge approval.
<!-- markdownlint-disable MD041 --> ## Summary Refreshes the public documentation for NemoClaw v0.0.71 after scanning commits since v0.0.70. Adds release notes and fills the remaining doc gaps for Windows bootstrap diagnostics, OpenClaw agent auto-relock warnings, auto-pair cadence tuning, and plugin-install recovery hints. ## Changes - `docs/about/release-notes.mdx`: adds the v0.0.71 release-note section, grouped by gateway recovery, OpenShell auth, policy provenance, day-two maintenance, messaging/inference, and Windows setup. - `docs/get-started/windows-preparation.mdx`: documents sanitized WSL install output and reboot gating in the Windows bootstrap. - `docs/reference/commands.mdx`: documents the host `agent` wrapper's shields auto-relock warning and OpenClaw auto-pair watcher tuning variables. - `docs/reference/troubleshooting.mdx`: adds plugin-install network failure recovery guidance and updates Windows WSL troubleshooting for sanitized install logs and reboot-required handling. Source summary: - #6065 -> `docs/about/release-notes.mdx`: Notes explicit model override preservation and gateway-log guard-chain recovery diagnostics. - #5874 -> `docs/about/release-notes.mdx`: Summarizes host-mediated `recover` and `gateway restart`, linking to lifecycle, command, troubleshooting, and trusted-boundary docs already added by the source PR. - #5596 -> `docs/about/release-notes.mdx`: Summarizes OpenShell 0.0.71 gateway auth, loopback binding, and compatibility-container docs already added by the source PR. - #5797 and #5798 -> `docs/about/release-notes.mdx`: Summarizes `policy-list` provenance, Restricted tier suppression, and Balanced tier weather behavior already reflected in policy docs. - #5784 -> `docs/about/release-notes.mdx`: Summarizes `--destroy-user-data` and the safe `--yes` uninstall behavior already documented in lifecycle and command docs. - #6034 -> `docs/about/release-notes.mdx`: Summarizes custom Dockerfile warm-build cache behavior already documented in the command reference. - #5951 -> `docs/reference/commands.mdx`: Documents the stderr-only host `agent` wrapper warning after recent shields auto-relock. - #5387 -> `docs/reference/commands.mdx`: Documents OpenClaw auto-pair watcher cadence and fast-reentry tuning variables. - #5835 -> `docs/reference/troubleshooting.mdx`: Adds recovery guidance for OpenClaw plugin-install network failures. - #5995 and #5956 -> `docs/about/release-notes.mdx`: Summarizes Microsoft Teams final-message delivery and runtime mention hints already covered by messaging docs. - #5716 -> `docs/about/release-notes.mdx`: Summarizes non-interactive Ollama loopback safety already covered by local inference docs. - #5505, #5527, and #5528 -> `docs/about/release-notes.mdx`: Summarizes compatible local endpoint, model task-fit, and model capability audit docs. - #6009 -> `docs/get-started/windows-preparation.mdx`, `docs/reference/troubleshooting.mdx`: Documents sanitized Windows bootstrap WSL output and reboot-required gating. - #6055 -> no additional source doc page change needed beyond the already-merged quickstart update; release notes did not duplicate routine quickstart cleanup. No matching v0.0.71 GitHub announcement discussion was found in the latest 20 discussions, so this refresh is based on the commit scan and existing source PR docs. ## Type of Change - [ ] Code change (feature, bug fix, or refactor) - [ ] Code change with doc updates - [ ] Doc only (prose changes, no code sample modifications) - [x] Doc only (includes code sample changes) ## Quality Gates <!-- Check all that apply. For any "covered by existing tests", "not applicable", or waiver entry, add a brief justification on the same line or in the Changes section. --> - [ ] Tests added or updated for changed behavior - [ ] Existing tests cover changed behavior — justification: - [x] Tests not applicable — justification: docs-only refresh with no runtime behavior changes. - [x] Docs updated for user-facing behavior changes - [ ] Docs not applicable — justification: - [ ] Sensitive paths changed (security, policy, credentials, preflight, onboarding, inference, runner, sandbox, or messaging) - [ ] Sensitive-path review completed or maintainer-approved waiver recorded — reviewer/approval link/justification: - [ ] Non-success, skipped, or missing CI check accepted by maintainer — check name, approval link, and follow-up issue: ## Verification <!-- Check each item you ran and confirmed. Leave unchecked items you skipped. Doc-only changes do not require npm test unless you ran it. --> - [x] PR description includes the DCO sign-off declaration and every commit appears as `Verified` in GitHub - [x] Git hooks passed during commit and push, or `npx prek run --from-ref main --to-ref HEAD` passes - [ ] Targeted tests pass for changed behavior - [ ] Full `npm test` passes (broad runtime changes only) - [x] Quality Gates section completed with required justifications or waivers - [x] No secrets, API keys, or credentials committed - [ ] `npm run docs` builds without warnings (doc changes only) — ran `npm run docs`; Fern reported 0 errors and 2 existing warnings. - [x] Doc pages follow the [style guide](https://github.com/NVIDIA/NemoClaw/blob/main/docs/CONTRIBUTING.md) (doc changes only) - [ ] New doc pages include SPDX header and frontmatter (new pages only) --- <!-- DCO sign-off is required in this PR description, and every commit must appear as Verified in GitHub. Run: git config user.name && git config user.email --> Signed-off-by: Julie Yaunches <jyaunches@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Documentation** * Added a new release-notes entry covering gateway recovery, authentication, network policy/provenance output, uninstall safety, Windows bootstrap diagnostics, messaging defaults, and inference setup guidance. * Clarified Windows preparation steps around reboot behavior and redacting troubleshooting transcripts. * Expanded command reference details for OpenClaw wrapper behavior and new auto-pair tuning options. * Improved troubleshooting guidance for plugin installation issues, WSL repair/reboot cases, and install timing problems. <!-- end of auto-generated comment: release notes by coderabbit.ai --> Signed-off-by: Julie Yaunches <jyaunches@nvidia.com> Co-authored-by: Prekshi Vyas <34834085+prekshivyas@users.noreply.github.com>
<!-- markdownlint-disable MD041 --> ## Summary This PR installs a Microsoft Teams-specific OpenClaw runtime preload that keeps native Teams mention syntax next to OpenClaw's `message` tool hints. The preload patches the pinned `@openclaw/msteams` prompt export at its exact package entry while preserving Teams startup if the upstream export changes or is immutable. This supersedes NVIDIA#5864 because the issue is not a parser-spacing variant in NemoClaw. OpenClaw's Teams send path already parses the supported syntax into Teams mention entities; NemoClaw's failure mode is that the bot was often not prompted to use that syntax. ## Related Issue Replaces NVIDIA#5864. Fixes NVIDIA#5852 ## Changes - Add a Teams OpenClaw `msteams-message-hints` runtime preload installed for `boot` and `connect` through the messaging runtime-preload machinery. - Restrict the CommonJS hook to the reviewed `@openclaw/msteams/dist/channel-plugin-api.js` boundary; plugin-shaped child dependencies and unrelated `msteams` paths remain untouched. - Restore the global load hook in `finally` after the exact entry attempt, whether patching succeeds, fails, or the module throws. - Fail open with one bounded static warning when the plugin export cannot be patched; never include upstream error text or make prompt guidance take Teams down. - Recognize the pinned `openclaw.mjs gateway` launcher shape without activating for arbitrary Node children whose third argument is `gateway`. - Cover CommonJS and native `require(esm)` entry loads, the real `dist/index.js` to `channel-plugin-api.js` flow, child-module isolation, idempotency, immutable exports, warning behavior, hook restoration, launcher gating, and unrelated ESM linking. - Remove the local regex reimplementation that previously overstated production Teams sender coverage. - Add a compiled package-contract regression that models the reviewed 2026.5.27 `runtimeExtensions` → OpenClaw `createRequire` → ESM `channel-plugin-api.js` load seam, binds it to the repository OpenClaw pin, records the manually reviewed package-load shape, and asserts the mention contract/order plus hook restoration without vendoring the upstream parser. ## Source Boundary The pinned OpenClaw 2026.5.27 package loads its Teams plugin through `dist/channel-plugin-api.js`, where `msteamsPlugin.agentPrompt.messageToolHints` is exported. NemoClaw changes only that prompt function. It does not fork or modify the Bot Framework sender or mention parser. The manifest keeps the preload asset `optional: false`: a missing or mispackaged compiled file is a NemoClaw build/setup failure. After that asset loads, an upstream export-shape mismatch or immutable plugin is intentionally fail-open so Teams preserves upstream behavior, emits one bounded static warning, and starts without the additional prompt hint. A repository test cannot honestly claim real Teams delivery or Bot Framework mention conversion without a provisioned Teams app, tenant, webhook, and live message. Vendoring third-party package code as a fixture would also create false production proof. The focused tests therefore lock the reviewed package export/lifecycle boundary, while live `channels-stop-start` and `messaging-providers` runs validate adjacent runtime installation and lifecycle. Actual mention conversion remains the pinned upstream package's contract; revalidate this preload whenever the OpenClaw pin changes, and remove it once upstream ships equivalent prompt guidance. Sequencing note: NVIDIA#5595 upgrades the OpenClaw pin and overlaps the Teams manifest/compiler surface. If NVIDIA#5595 lands first or this PR is rebased across it, revalidate this package boundary and keep or remove the shim based on the new pinned package; do not assume the 2026.5.27 contract remains unchanged. ## Release Decision For v0.0.71, this PR is release-deferred. Both required exact-head advisor verdicts remain blocking (`merge_after_fixes` and `needs_rework`), and live Teams Bot Framework delivery proof is unavailable. Maintainers are not overriding either gate; do not merge this PR for v0.0.71. The residual evidence gap is that repository tests cannot prove a Teams UI mention chip or user notification without a provisioned Teams tenant, app, and webhook. This PR changes only always-visible prompt guidance; it does not modify or claim automated proof of the Bot Framework sender/parser. The pinned 2026.5.27 npm package and OpenClaw loader seam were manually reviewed. Hermetic CI enforces the repository pin, reviewed package-load shape, hint contract, and loader restoration, but that evidence does not satisfy the required delivery-proof gate. If production mentions still render raw IDs, the source fix belongs in the upstream Teams send path. ## Type of Change - [x] Code change (feature, bug fix, or refactor) - [ ] Code change with doc updates - [ ] Doc only (prose changes, no code sample modifications) - [ ] Doc only (includes code sample changes) ## Quality Gates <!-- Check all that apply. For any "covered by existing tests", "not applicable", or waiver entry, add a brief justification on the same line or in the Changes section. --> - [x] Tests added or updated for changed behavior - [ ] Existing tests cover changed behavior — justification: - [ ] Tests not applicable — justification: - [ ] Docs updated for user-facing behavior changes - [x] Docs not applicable — justification: this restores expected Teams-native mention prompting automatically and adds no user action, command, configuration, environment variable, or support boundary. - [x] Sensitive paths changed (security, policy, credentials, preflight, onboarding, inference, runner, sandbox, or messaging) - [x] Sensitive-path review completed or maintainer-approved waiver recorded — reviewer/approval link/justification: exact entry scoping, fail-open warning, lifecycle restoration, child-module isolation, and launcher gating were manually audited and regression-tested. - [ ] Non-success, skipped, or missing CI check accepted by maintainer — check name, approval link, and follow-up issue: ## Verification <!-- Check each item you ran and confirmed. Leave unchecked items you skipped. Doc-only changes do not require npm test unless you ran it. --> - [x] PR description includes the DCO sign-off declaration and every commit appears as `Verified` in GitHub - [x] Git hooks passed during commit and push - [x] Targeted tests pass for changed behavior — 47/47 across compiled package-contract, preload, channel-manifest, and compiler tests - [ ] Full `npm test` passes (broad runtime changes only) - [x] Quality Gates section completed with required justifications or waivers - [x] No secrets, API keys, or credentials committed - [ ] `npm run docs` builds without warnings (doc changes only) - [ ] Doc pages follow the style guide (doc changes only) - [ ] New doc pages include SPDX header and frontmatter (new pages only) Exact-head live evidence (head `e120c86d`): - `channels-stop-start` (OpenClaw + Hermes): https://github.com/NVIDIA/NemoClaw/actions/runs/28428153446 — passed Pre-follow-up live evidence (head `8149bce`): - `channels-stop-start`: https://github.com/NVIDIA/NemoClaw/actions/runs/28425570138 - `messaging-providers`: https://github.com/NVIDIA/NemoClaw/actions/runs/28425986489 --- <!-- DCO sign-off is required in this PR description, and every commit must appear as Verified in GitHub. --> Signed-off-by: San Dang <sdang@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Improved Microsoft Teams message tool hints to consistently include native mention guidance. * Added automatic preloading of the Teams hint patch for both initial startup and reconnect phases. * **Bug Fixes** * Ensures the mention hint is injected only once and positioned before the first targeting-related hint. * Applies best-effort patching that won’t break unrelated module loading. * **Tests** * Expanded unit/contract coverage to verify CommonJS/ESM compatibility, idempotency, correct hint ordering, and safe loader behavior. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Signed-off-by: San Dang <sdang@nvidia.com> Signed-off-by: Carlos Villela <cvillela@nvidia.com> Co-authored-by: Carlos Villela <cvillela@nvidia.com>
<!-- markdownlint-disable MD041 --> ## Summary Refreshes the public documentation for NemoClaw v0.0.71 after scanning commits since v0.0.70. Adds release notes and fills the remaining doc gaps for Windows bootstrap diagnostics, OpenClaw agent auto-relock warnings, auto-pair cadence tuning, and plugin-install recovery hints. ## Changes - `docs/about/release-notes.mdx`: adds the v0.0.71 release-note section, grouped by gateway recovery, OpenShell auth, policy provenance, day-two maintenance, messaging/inference, and Windows setup. - `docs/get-started/windows-preparation.mdx`: documents sanitized WSL install output and reboot gating in the Windows bootstrap. - `docs/reference/commands.mdx`: documents the host `agent` wrapper's shields auto-relock warning and OpenClaw auto-pair watcher tuning variables. - `docs/reference/troubleshooting.mdx`: adds plugin-install network failure recovery guidance and updates Windows WSL troubleshooting for sanitized install logs and reboot-required handling. Source summary: - NVIDIA#6065 -> `docs/about/release-notes.mdx`: Notes explicit model override preservation and gateway-log guard-chain recovery diagnostics. - NVIDIA#5874 -> `docs/about/release-notes.mdx`: Summarizes host-mediated `recover` and `gateway restart`, linking to lifecycle, command, troubleshooting, and trusted-boundary docs already added by the source PR. - NVIDIA#5596 -> `docs/about/release-notes.mdx`: Summarizes OpenShell 0.0.71 gateway auth, loopback binding, and compatibility-container docs already added by the source PR. - NVIDIA#5797 and NVIDIA#5798 -> `docs/about/release-notes.mdx`: Summarizes `policy-list` provenance, Restricted tier suppression, and Balanced tier weather behavior already reflected in policy docs. - NVIDIA#5784 -> `docs/about/release-notes.mdx`: Summarizes `--destroy-user-data` and the safe `--yes` uninstall behavior already documented in lifecycle and command docs. - NVIDIA#6034 -> `docs/about/release-notes.mdx`: Summarizes custom Dockerfile warm-build cache behavior already documented in the command reference. - NVIDIA#5951 -> `docs/reference/commands.mdx`: Documents the stderr-only host `agent` wrapper warning after recent shields auto-relock. - NVIDIA#5387 -> `docs/reference/commands.mdx`: Documents OpenClaw auto-pair watcher cadence and fast-reentry tuning variables. - NVIDIA#5835 -> `docs/reference/troubleshooting.mdx`: Adds recovery guidance for OpenClaw plugin-install network failures. - NVIDIA#5995 and NVIDIA#5956 -> `docs/about/release-notes.mdx`: Summarizes Microsoft Teams final-message delivery and runtime mention hints already covered by messaging docs. - NVIDIA#5716 -> `docs/about/release-notes.mdx`: Summarizes non-interactive Ollama loopback safety already covered by local inference docs. - NVIDIA#5505, NVIDIA#5527, and NVIDIA#5528 -> `docs/about/release-notes.mdx`: Summarizes compatible local endpoint, model task-fit, and model capability audit docs. - NVIDIA#6009 -> `docs/get-started/windows-preparation.mdx`, `docs/reference/troubleshooting.mdx`: Documents sanitized Windows bootstrap WSL output and reboot-required gating. - NVIDIA#6055 -> no additional source doc page change needed beyond the already-merged quickstart update; release notes did not duplicate routine quickstart cleanup. No matching v0.0.71 GitHub announcement discussion was found in the latest 20 discussions, so this refresh is based on the commit scan and existing source PR docs. ## Type of Change - [ ] Code change (feature, bug fix, or refactor) - [ ] Code change with doc updates - [ ] Doc only (prose changes, no code sample modifications) - [x] Doc only (includes code sample changes) ## Quality Gates <!-- Check all that apply. For any "covered by existing tests", "not applicable", or waiver entry, add a brief justification on the same line or in the Changes section. --> - [ ] Tests added or updated for changed behavior - [ ] Existing tests cover changed behavior — justification: - [x] Tests not applicable — justification: docs-only refresh with no runtime behavior changes. - [x] Docs updated for user-facing behavior changes - [ ] Docs not applicable — justification: - [ ] Sensitive paths changed (security, policy, credentials, preflight, onboarding, inference, runner, sandbox, or messaging) - [ ] Sensitive-path review completed or maintainer-approved waiver recorded — reviewer/approval link/justification: - [ ] Non-success, skipped, or missing CI check accepted by maintainer — check name, approval link, and follow-up issue: ## Verification <!-- Check each item you ran and confirmed. Leave unchecked items you skipped. Doc-only changes do not require npm test unless you ran it. --> - [x] PR description includes the DCO sign-off declaration and every commit appears as `Verified` in GitHub - [x] Git hooks passed during commit and push, or `npx prek run --from-ref main --to-ref HEAD` passes - [ ] Targeted tests pass for changed behavior - [ ] Full `npm test` passes (broad runtime changes only) - [x] Quality Gates section completed with required justifications or waivers - [x] No secrets, API keys, or credentials committed - [ ] `npm run docs` builds without warnings (doc changes only) — ran `npm run docs`; Fern reported 0 errors and 2 existing warnings. - [x] Doc pages follow the [style guide](https://github.com/NVIDIA/NemoClaw/blob/main/docs/CONTRIBUTING.md) (doc changes only) - [ ] New doc pages include SPDX header and frontmatter (new pages only) --- <!-- DCO sign-off is required in this PR description, and every commit must appear as Verified in GitHub. Run: git config user.name && git config user.email --> Signed-off-by: Julie Yaunches <jyaunches@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Documentation** * Added a new release-notes entry covering gateway recovery, authentication, network policy/provenance output, uninstall safety, Windows bootstrap diagnostics, messaging defaults, and inference setup guidance. * Clarified Windows preparation steps around reboot behavior and redacting troubleshooting transcripts. * Expanded command reference details for OpenClaw wrapper behavior and new auto-pair tuning options. * Improved troubleshooting guidance for plugin installation issues, WSL repair/reboot cases, and install timing problems. <!-- end of auto-generated comment: release notes by coderabbit.ai --> Signed-off-by: Julie Yaunches <jyaunches@nvidia.com> Co-authored-by: Prekshi Vyas <34834085+prekshivyas@users.noreply.github.com>
Summary
This PR installs a Microsoft Teams-specific OpenClaw runtime preload that keeps native Teams mention syntax next to OpenClaw's
messagetool hints. The preload patches the pinned@openclaw/msteamsprompt export at its exact package entry while preserving Teams startup if the upstream export changes or is immutable.This supersedes #5864 because the issue is not a parser-spacing variant in NemoClaw. OpenClaw's Teams send path already parses the supported syntax into Teams mention entities; NemoClaw's failure mode is that the bot was often not prompted to use that syntax.
Related Issue
Replaces #5864.
Fixes #5852
Changes
msteams-message-hintsruntime preload installed forbootandconnectthrough the messaging runtime-preload machinery.@openclaw/msteams/dist/channel-plugin-api.jsboundary; plugin-shaped child dependencies and unrelatedmsteamspaths remain untouched.finallyafter the exact entry attempt, whether patching succeeds, fails, or the module throws.openclaw.mjs gatewaylauncher shape without activating for arbitrary Node children whose third argument isgateway.require(esm)entry loads, the realdist/index.jstochannel-plugin-api.jsflow, child-module isolation, idempotency, immutable exports, warning behavior, hook restoration, launcher gating, and unrelated ESM linking.runtimeExtensions→ OpenClawcreateRequire→ ESMchannel-plugin-api.jsload seam, binds it to the repository OpenClaw pin, records the manually reviewed package-load shape, and asserts the mention contract/order plus hook restoration without vendoring the upstream parser.Source Boundary
The pinned OpenClaw 2026.5.27 package loads its Teams plugin through
dist/channel-plugin-api.js, wheremsteamsPlugin.agentPrompt.messageToolHintsis exported. NemoClaw changes only that prompt function. It does not fork or modify the Bot Framework sender or mention parser.The manifest keeps the preload asset
optional: false: a missing or mispackaged compiled file is a NemoClaw build/setup failure. After that asset loads, an upstream export-shape mismatch or immutable plugin is intentionally fail-open so Teams preserves upstream behavior, emits one bounded static warning, and starts without the additional prompt hint.A repository test cannot honestly claim real Teams delivery or Bot Framework mention conversion without a provisioned Teams app, tenant, webhook, and live message. Vendoring third-party package code as a fixture would also create false production proof. The focused tests therefore lock the reviewed package export/lifecycle boundary, while live
channels-stop-startandmessaging-providersruns validate adjacent runtime installation and lifecycle. Actual mention conversion remains the pinned upstream package's contract; revalidate this preload whenever the OpenClaw pin changes, and remove it once upstream ships equivalent prompt guidance.Sequencing note: #5595 upgrades the OpenClaw pin and overlaps the Teams manifest/compiler surface. If #5595 lands first or this PR is rebased across it, revalidate this package boundary and keep or remove the shim based on the new pinned package; do not assume the 2026.5.27 contract remains unchanged.
Release Decision
For v0.0.71, this PR is release-deferred. Both required exact-head advisor verdicts remain blocking (
merge_after_fixesandneeds_rework), and live Teams Bot Framework delivery proof is unavailable. Maintainers are not overriding either gate; do not merge this PR for v0.0.71.The residual evidence gap is that repository tests cannot prove a Teams UI mention chip or user notification without a provisioned Teams tenant, app, and webhook. This PR changes only always-visible prompt guidance; it does not modify or claim automated proof of the Bot Framework sender/parser.
The pinned 2026.5.27 npm package and OpenClaw loader seam were manually reviewed. Hermetic CI enforces the repository pin, reviewed package-load shape, hint contract, and loader restoration, but that evidence does not satisfy the required delivery-proof gate. If production mentions still render raw IDs, the source fix belongs in the upstream Teams send path.
Type of Change
Quality Gates
Verification
Verifiedin GitHubnpm testpasses (broad runtime changes only)npm run docsbuilds without warnings (doc changes only)Exact-head live evidence (head
e120c86d):channels-stop-start(OpenClaw + Hermes): https://github.com/NVIDIA/NemoClaw/actions/runs/28428153446 — passedPre-follow-up live evidence (head
8149bce):channels-stop-start: https://github.com/NVIDIA/NemoClaw/actions/runs/28425570138messaging-providers: https://github.com/NVIDIA/NemoClaw/actions/runs/28425986489Signed-off-by: San Dang sdang@nvidia.com
Summary by CodeRabbit
New Features
Bug Fixes
Tests