Summary
OpenClaw 2026.4.25 fails to boot the embedded agent and most plugins due to a chokidar v5 default-import incompatibility in the bundled dist/*.js files. This causes Teams (and presumably Discord/Slack/etc.) to silently drop replies to inbound DMs, heartbeat lanes fail every cron tick, and only 3 of the normal 8+ plugins load.
Rolling back to 2026.4.24 fully restores the system.
Environment
- OpenClaw:
2026.4.25 (installed via npm install -g openclaw)
- Node: v22.22.1
- macOS: Darwin 25.4.0 (arm64)
- Install path:
/opt/homebrew/lib/node_modules/openclaw/
Symptoms
After upgrading to 2026.4.25:
-
Plugin set shrinks from 8 to 3. Gateway boot log shows:
[gateway] ready (3 plugins: acpx, memory-core, msteams; 4.6s)
Where 2026.4.24 loaded:
[gateway] ready (8 plugins: acpx, bonjour, browser, device-pair, memory-core, msteams, phone-control, talk-voice; 2.0s)
-
Heartbeat / agent lane fails on every tick with:
[agent/embedded] embedded run agent end: ... isError=true
error=LLM request rejected: messages: at least one message is required
rawError=400 {"type":"error","error":{"type":"invalid_request_error","message":"messages: at least one message is required"}}
-
Inbound Teams DMs are received but never get a reply. The msteams provider logs the inbound message reaching the agent lane, but the agent fails before producing a response (same "messages: at least one message is required" error).
-
Persistent stderr noise:
[memory] qmd memory unavailable; falling back to builtin: Cannot find package 'chokidar' imported from /Users/.../plugin-runtime-deps/openclaw-2026.4.25-.../dist/qmd-manager-FuXCtSYP.js
Did you mean to import "chokidar/index.js"?
[gateway] qmd memory startup initialization failed for agent "main": Cannot find package 'chokidar' imported from .../dist/manager-C6O7HXGc.js
Root cause
package.json declares:
But the bundled dist files use a default import:
// dist/qmd-manager-FuXCtSYP.js (and 4 other dist files)
import chokidar from "chokidar";
// ...
this.watcher = chokidar.watch(Array.from(watchPaths), { ... });
[email protected] is "type": "module" and its exports field exposes only:
"exports": {
".": { "default": "./index.js" },
"./handler.js": { "default": "./handler.js" }
}
The named watch export and FSWatcher are exposed, but the default export changed in v5 — import chokidar from "chokidar" no longer yields an object with a .watch() method via the dist/ ESM bundle's resolution path. Result: chokidar resolves but is not the expected shape, and Node emits Cannot find package 'chokidar' / Did you mean to import "chokidar/index.js"? warnings before the import fails.
This breaks 5 dist files:
dist/server-plugin-bootstrap-CqofqB0r.js
dist/refresh-CFfbjczz.js
dist/server.impl-C1dgKTkE.js
dist/manager-C6O7HXGc.js
dist/qmd-manager-FuXCtSYP.js
The qmd-manager failure cascades into the embedded agent's context assembly, which then sends an empty messages array to the LLM provider — explaining the "messages: at least one message is required" 400 from Anthropic on every heartbeat and every inbound Teams message.
Reproduction
- Have a healthy 2026.4.24 install with 8 plugins loading.
npm install -g [email protected]
openclaw gateway restart
- Observe
[gateway] ready (3 plugins: ...) and stderr qmd memory unavailable.
- Send a DM through any messaging plugin (msteams in our case) — bot receives it, agent never replies.
Workarounds attempted (not sufficient)
- Pinning [email protected] in plugin-runtime-deps
package.json — gateway's bundled-deps stager re-installs [email protected] per the OpenClaw package.json spec on next boot, reverting the pin.
- Patching all 5 dist files with
import * as chokidar from "chokidar" — reduced chokidar resolution errors but did not restore the missing 5 plugins or fix the "messages empty" downstream agent-context failure. Patches are also clobbered on next npm install -g openclaw.
Working fix
Rollback to 2026.4.24:
npm install -g [email protected]
openclaw gateway restart
- Plugin set restored to 8.
- Embedded agent / heartbeat lane recovered.
- Teams DMs reply normally again.
Suggested upstream fix
Either:
- Pin
chokidar to ^3.6.0 in package.json (chokidar@3 still has the default export shape the bundle expects), or
- Update the bundle to use named imports (
import { watch, FSWatcher } from "chokidar") compatible with chokidar@5+.
Option 2 is the more durable fix.
Severity
High. Any user upgrading to 2026.4.25 loses messaging-channel functionality silently (DMs are received but get no reply), most plugins fail to load, and heartbeat-driven cron work breaks. Rollback is straightforward but the failure mode is not obvious from the surface symptom (Teams "doesn't work").
Sidenote
The failure mode also masks API key exposure risk: while debugging, it's tempting to inspect ~/.openclaw/agents/<agent>/agent/auth-profiles.json which contains provider API keys in cleartext. Worth considering adding a redaction layer or pointer to a secrets manager when the agent's auth path is read for diagnostic purposes.
Summary
OpenClaw 2026.4.25 fails to boot the embedded agent and most plugins due to a chokidar v5 default-import incompatibility in the bundled
dist/*.jsfiles. This causes Teams (and presumably Discord/Slack/etc.) to silently drop replies to inbound DMs, heartbeat lanes fail every cron tick, and only 3 of the normal 8+ plugins load.Rolling back to 2026.4.24 fully restores the system.
Environment
2026.4.25(installed vianpm install -g openclaw)/opt/homebrew/lib/node_modules/openclaw/Symptoms
After upgrading to 2026.4.25:
Plugin set shrinks from 8 to 3. Gateway boot log shows:
Where 2026.4.24 loaded:
Heartbeat / agent lane fails on every tick with:
Inbound Teams DMs are received but never get a reply. The msteams provider logs the inbound message reaching the agent lane, but the agent fails before producing a response (same "messages: at least one message is required" error).
Persistent stderr noise:
Root cause
package.jsondeclares:But the bundled dist files use a default import:
[email protected]is"type": "module"and itsexportsfield exposes only:The named
watchexport andFSWatcherare exposed, but the default export changed in v5 —import chokidar from "chokidar"no longer yields an object with a.watch()method via thedist/ESM bundle's resolution path. Result:chokidarresolves but is not the expected shape, and Node emitsCannot find package 'chokidar'/Did you mean to import "chokidar/index.js"?warnings before the import fails.This breaks 5 dist files:
The qmd-manager failure cascades into the embedded agent's context assembly, which then sends an empty
messagesarray to the LLM provider — explaining the "messages: at least one message is required" 400 from Anthropic on every heartbeat and every inbound Teams message.Reproduction
npm install -g [email protected]openclaw gateway restart[gateway] ready (3 plugins: ...)and stderrqmd memory unavailable.Workarounds attempted (not sufficient)
package.json— gateway's bundled-deps stager re-installs[email protected]per the OpenClawpackage.jsonspec on next boot, reverting the pin.import * as chokidar from "chokidar"— reduced chokidar resolution errors but did not restore the missing 5 plugins or fix the "messages empty" downstream agent-context failure. Patches are also clobbered on nextnpm install -g openclaw.Working fix
Rollback to 2026.4.24:
Suggested upstream fix
Either:
chokidarto^3.6.0inpackage.json(chokidar@3 still has the default export shape the bundle expects), orimport { watch, FSWatcher } from "chokidar") compatible with chokidar@5+.Option 2 is the more durable fix.
Severity
High. Any user upgrading to 2026.4.25 loses messaging-channel functionality silently (DMs are received but get no reply), most plugins fail to load, and heartbeat-driven cron work breaks. Rollback is straightforward but the failure mode is not obvious from the surface symptom (Teams "doesn't work").
Sidenote
The failure mode also masks API key exposure risk: while debugging, it's tempting to inspect
~/.openclaw/agents/<agent>/agent/auth-profiles.jsonwhich contains provider API keys in cleartext. Worth considering adding a redaction layer or pointer to a secrets manager when the agent's auth path is read for diagnostic purposes.