Skip to content

openclaw plugin 0.6.x uninstallable: workspace:* dependency on unpublished @memini/namespace-resolver (npm EUNSUPPORTEDPROTOCOL) #34

Description

@joryirving

Symptom

Installing any 0.6.x openclaw plugin release fails at the dependency step:

$ node dist/index.js plugins install "clawhub:@eleboucher/memini@0.6.4" --pin --force
Resolving clawhub:@eleboucher/memini@0.6.4…
Downloading plugin @eleboucher/memini@0.6.4 from ClawHub…
Extracting …/eleboucher-memini-0.6.4.tgz…
Installing to ~/.openclaw/extensions/memini…
Installing plugin dependencies…
npm install failed: npm error code EUNSUPPORTEDPROTOCOL
npm error Unsupported URL Type "workspace:": workspace:*

In a gateway boot script this fails soft ("starting with whatever is present"), so deployments silently keep running 0.5.12 — the last installable release — while pinned to 0.6.x. Fixes that shipped in 0.6.x (e.g. the per-agent tool namespace resolution from #30) are unreachable.

Cause

Since v0.6.0 (the pnpm workspace migration), the published clawpack's package.json ships:

"dependencies": {
  "@memini/namespace-resolver": "workspace:*",
  "typebox": "^1.1.38"
}

Two problems compound:

  1. workspace:* is a pnpm-only protocol; OpenClaw's plugin installer runs plain npm install, which rejects it (EUNSUPPORTEDPROTOCOL). pnpm pack/pnpm publish normally rewrite workspace:* to a concrete semver at pack time — the literal workspace:* surviving into the tarball suggests the clawpack is built with npm pack/tar instead.
  2. Even with the protocol rewritten, @memini/namespace-resolver is not published to npm (404), so the dependency can't resolve.

The plugin builds with plain tsc (no bundler), so dist/index.js contains a real runtime import "@memini/namespace-resolver" — the dependency can't simply be dropped from package.json.

Affected

Every plugin release ≥ 0.6.0. @eleboucher/memini@0.5.12 installs fine (deps: typebox only).

Possible fixes

  • Bundle @memini/namespace-resolver into dist/ (tsup/esbuild with the workspace package marked noExternal) and remove it from dependencies — keeps the clawpack self-contained and npm-agnostic; or
  • Publish @memini/namespace-resolver to npm and pack with pnpm pack so workspace:* is rewritten to a real version; or
  • Vendor the resolver source into the plugin at release time.

The bundling option seems most robust for a clawpack, since installs happen under whatever package manager the host runtime uses.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions