#11454: fix(plugins): remove workspace:* from extension dependencies
channel: msteams
channel: nostr
channel: zalo
channel: zalouser
stale
#### Summary
Fixes #10941, Fixes #11245
Four extensions had `"openclaw": "workspace:*"` in `dependencies` (not just `devDependencies`). When plugins are installed outside the pnpm workspace (e.g., `openclaw plugins install ./extensions/feishu`), npm cannot resolve the `workspace:` protocol and fails with `EUNSUPPORTEDPROTOCOL`.
lobster-biscuit
#### Repro Steps
1. `openclaw plugins install ./extensions/zalo` (or nostr, msteams, zalouser)
2. Plugin is copied to `~/.openclaw/extensions/`
3. `npm install --omit=dev` runs in the plugin dir
4. Fails: `Error: Unsupported URL Type "workspace:": workspace:*`
#### Root Cause
These 4 extensions had `"openclaw": "workspace:*"` in `dependencies`:
- `extensions/zalo/package.json`
- `extensions/zalouser/package.json`
- `extensions/nostr/package.json`
- `extensions/msteams/package.json`
The `workspace:*` protocol is a pnpm workspace feature. When the plugin is copied outside the workspace for installation, npm doesn't understand `workspace:*` and errors out. Per CLAUDE.md: _"Avoid `workspace:*` in `dependencies` (npm install breaks); put `openclaw` in `devDependencies` or `peerDependencies` instead (runtime resolves `openclaw/plugin-sdk` via jiti alias)."_
Most other extensions (telegram, discord, slack, matrix, etc.) already follow this pattern correctly — only these 4 had the bug.
#### Behavior Changes
- Removed `"openclaw": "workspace:*"` from `dependencies` in 4 extensions
- The `devDependencies` entry remains (for workspace-local development)
- Runtime plugin-sdk resolution is unaffected (uses jiti alias)
- No functional changes to plugin behavior
#### Codebase and GitHub Search
- Searched `workspace:*` across all `extensions/*/package.json` — found 4 with it in `dependencies`
- Verified `extensions/memory-core` uses the correct pattern (`devDependencies` + `peerDependencies`)
- Verified CLAUDE.md explicitly prohibits `workspace:*` in `dependencies`
- Confirmed #10941 (feishu/zalo) and #11245 (matrix) describe the same root cause
#### Tests
- `pnpm build` ✓
- `pnpm check` ✓
- No runtime test changes needed (this is a packaging/metadata fix)
**Sign-Off**
- AI-assisted: Yes (Cursor + Claude). All changes reviewed and understood.
- Degree of testing: Build + lint verified; packaging fix (no runtime logic changed)
- Models used: Claude claude-4.6-opus
- Submitter effort: Issue triage, codebase-wide search, pattern verification
Made with [Cursor](https://cursor.com)
<!-- greptile_comment -->
<h2>Greptile Overview</h2>
<h3>Greptile Summary</h3>
This PR updates four extension `package.json` files (`msteams`, `nostr`, `zalo`, `zalouser`) to remove `"openclaw": "workspace:*"` from `dependencies` while keeping it in `devDependencies`.
This aligns these extensions with the existing plugin packaging pattern in the repo: extensions are installed outside the pnpm workspace (via `openclaw plugins install ...`) and therefore must not rely on the pnpm-only `workspace:` protocol at runtime install time. Keeping `openclaw` only as a dev dependency preserves local workspace development while allowing `npm install --omit=dev` to succeed when extensions are copied to `~/.openclaw/extensions/`.
<h3>Confidence Score: 5/5</h3>
- This PR is safe to merge with minimal risk.
- Changes are limited to removing a pnpm-only `workspace:*` dependency specifier from runtime `dependencies` in four extensions; this directly fixes `npm install --omit=dev` outside the workspace and does not affect runtime code paths. The remaining `devDependencies` entry preserves local development behavior.
- No files require special attention
<!-- greptile_other_comments_section -->
<sub>(4/5) You can add custom instructions or style guidelines for the agent [here](https://app.greptile.com/review/github)!</sub>
**Context used:**
- Context from `dashboard` - CLAUDE.md ([source](https://app.greptile.com/review/custom-context?memory=fd949e91-5c3a-4ab5-90a1-cbe184fd6ce8))
- Context from `dashboard` - AGENTS.md ([source](https://app.greptile.com/review/custom-context?memory=0d0c8278-ef8e-4d6c-ab21-f5527e322f13))
<!-- /greptile_comment -->
Most Similar PRs
#19941: fix(nostr): move openclaw from devDependencies to peerDependencies
by AustinEral · 2026-02-18
88.5%
#8500: fix: Remove workspace:* from devDependencies in voice-call plugin
by ImBIOS · 2026-02-04
86.8%
#20055: fix(plugins): strip workspace:* dev-deps before npm install
by openperf · 2026-02-18
86.1%
#16140: fix: convert installable extension deps from workspace:* to peerDep...
by battman21 · 2026-02-14
84.4%
#20360: fix(feishu): remove workspace protocol from published package metadata
by tanujbhaud · 2026-02-18
84.1%
#2556: fix(plugin-install): handle existing plugins and filter workspace deps
by longmaba · 2026-01-27
79.7%
#13176: fix: resolve llm-task module import for global installs
by striking · 2026-02-10
79.1%
#20424: Fix plugin extension path traversal in discovery/install
by markmusson · 2026-02-18
79.1%
#22692: fix(memory-lancedb): [P1] add missing runtime deps — plugin broken ...
by mahsumaktas · 2026-02-21
78.8%
#20278: Fix/matrix missing bot sdk dependency
by saurav470 · 2026-02-18
78.3%