You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Behavior bug (incorrect output/state without crash)
Summary
openclaw plugins install @openclaw/msteams (npm flow) created the plugin project directory with package.json + package-lock.json but an empty/incomplete dependency tree — @microsoft/teams.apps, @microsoft/teams.api, express, and @azure/identity were all unresolvable from the installed plugin. The plugin's npm install step apparently never completed (or was interrupted) and nothing surfaced this: no install-time error was persisted, plugins list showed the plugin as present, and the gateway attempted to load it every startup.
Steps to reproduce
Install the msteams channel plugin via the npm flow (host 2026.6.11, macOS, node 24).
Either the install fails loudly (non-zero exit, plugins list marks it broken), or a load-time check reports the unresolvable imports. Ideally openclaw doctor verifies that a plugin's declared bundledDependencies actually resolve from its install root.
Actual behavior
Silent failure at the worst layer: Microsoft's webhook deliveries failed (Bot Framework test pane showed "There was an error sending this message to your bot") while the local install looked healthy. Nothing in the file log tied the failure to missing plugin dependencies. Manually running npm ci --ignore-scripts inside the plugin project directory restored the dependency tree and the provider started cleanly on the next gateway restart.
OpenClaw version
2026.6.11 (plugin @openclaw/msteams 2026.6.11)
Operating system
macOS 15 (Darwin 25.5.0), node 24.14.0, npm global install
Additional information
The plugin declares its deps as bundledDependencies, so a normal registry install should have shipped them inside the tarball — worth checking whether the __openclaw-generation__ project flow re-installs from package-lock.json and can end up half-done if interrupted.
Suggested cheap guard: after plugin install (and/or in doctor), require.resolve each direct dependency from the plugin root and fail/flag on a miss.
Bug type
Behavior bug (incorrect output/state without crash)
Summary
openclaw plugins install @openclaw/msteams(npm flow) created the plugin project directory withpackage.json+package-lock.jsonbut an empty/incomplete dependency tree —@microsoft/teams.apps,@microsoft/teams.api,express, and@azure/identitywere all unresolvable from the installed plugin. The plugin's npm install step apparently never completed (or was interrupted) and nothing surfaced this: no install-time error was persisted,plugins listshowed the plugin as present, and the gateway attempted to load it every startup.Steps to reproduce
2026.6.11, macOS, node 24).~/.openclaw/npm/projects/openclaw-msteams-<hash>__openclaw-generation__…/node_modules/@openclaw/msteams/node_modules/— bundled deps missing.channels.msteams.Expected behavior
Either the install fails loudly (non-zero exit,
plugins listmarks it broken), or a load-time check reports the unresolvable imports. Ideallyopenclaw doctorverifies that a plugin's declaredbundledDependenciesactually resolve from its install root.Actual behavior
Silent failure at the worst layer: Microsoft's webhook deliveries failed (Bot Framework test pane showed "There was an error sending this message to your bot") while the local install looked healthy. Nothing in the file log tied the failure to missing plugin dependencies. Manually running
npm ci --ignore-scriptsinside the plugin project directory restored the dependency tree and the provider started cleanly on the next gateway restart.OpenClaw version
2026.6.11 (plugin @openclaw/msteams 2026.6.11)
Operating system
macOS 15 (Darwin 25.5.0), node 24.14.0, npm global install
Additional information
bundledDependencies, so a normal registry install should have shipped them inside the tarball — worth checking whether the__openclaw-generation__project flow re-installs frompackage-lock.jsonand can end up half-done if interrupted.require.resolveeach direct dependency from the plugin root and fail/flag on a miss.