fix: keep bundled OpenClaw plugins image-owned#86754
Conversation
|
Codex review: needs maintainer review before merge. Reviewed May 26, 2026, 1:19 AM ET / 05:19 UTC. Summary PR surface: Source +24, Tests +82, Docs +12. Total +118 across 6 files. Reproducibility: yes. from source inspection: current main returns null for scoped specs before bundled planning, then the install command proceeds to npm resolution. I did not run the CLI in this read-only review, but the PR body includes after-fix terminal output for the intended path-install result. Review metrics: 1 noteworthy metric.
Merge readiness Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch. Rank-up moves:
Risk before merge
Maintainer options:
Next step before merge Security Review detailsBest possible solution: Land the bundled-first routing only if maintainers accept raw scoped bundled OpenClaw packages becoming image-owned by default, with Do we have a high-confidence way to reproduce the issue? Yes from source inspection: current main returns null for scoped specs before bundled planning, then the install command proceeds to npm resolution. I did not run the CLI in this read-only review, but the PR body includes after-fix terminal output for the intended path-install result. Is this the best way to solve the issue? Yes, if maintainers accept the compatibility policy. The code change is narrow, the tests cover helper and CLI behavior, docs now describe the AGENTS.md: found and applied where relevant. Codex review notes: model gpt-5.5, reasoning high; reviewed against 505aca9ef7a4. Label changesLabel changes:
Label justifications:
Evidence reviewedPR surface: Source +24, Tests +82, Docs +12. Total +118 across 6 files. View PR surface stats
What I checked:
Likely related people:
What the crustacean ranks mean
Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics. How this review workflow works
|
|
ClawSweeper PR egg ✨ Hatched: 🥚 common Sunspot Proofling Hatch commandComment Hatchability rules:
Rarity: 🥚 common. What is this egg doing here?
|
0fd6e19 to
8dd1521
Compare
8dd1521 to
89aa839
Compare
89aa839 to
40fa750
Compare
|
Landed via fast-forward of the rebased PR head onto main.
Thanks @fuller-stack-dev! |
Summary
@openclaw/[email protected].npm:<spec>escape hatch.Anonymized Source Evidence
A Docker-managed setup installed a pinned bundled channel package into mounted OpenClaw state, where it shadowed the bundled plugin from newer images.
channels add --channel discord --use-env.plugins install @openclaw/[email protected] --pin --force.installRecords.discord.source = npm,spec = @openclaw/[email protected], andinstallPath = <state>/npm/node_modules/@openclaw/discord.<state>/npm/node_modules/@openclaw/discord,origin = global,packageVersion = 2026.5.20.@openclaw/discordto2026.5.20.Real behavior proof
Behavior addressed: Raw npm specs matching bundled OpenClaw plugin packages now resolve to the bundled image copy before npm fallback, so setup cannot pin a stale managed npm override unless the operator explicitly uses
npm:<spec>.Real environment tested: Local OpenClaw CLI from this PR branch, using a clean temporary state directory and a built
dist/tree.Exact steps or command run after this patch:
Evidence after fix: Redacted terminal output from the clean-state CLI smoke:
Observed result after fix: The install completed as
source: pathwithsourcePathandinstallPathpointing at the bundled Discord plugin under<repo>/dist/extensions/discord; it did not create a managed npm override for@openclaw/[email protected].What was not tested: Already-persisted stale npm install records were not migrated; this PR only changes future install routing. Existing-state cleanup should be handled separately through doctor/update repair if maintainers want that behavior.
Tests
node scripts/run-tsgo.mjs -p test/tsconfig/tsconfig.core.test.json --incremental --tsBuildInfoFile .artifacts/tsgo-cache/core-test.tsbuildinfonode scripts/run-vitest.mjs src/cli/plugin-install-plan.test.ts src/cli/plugins-cli.install.test.ts-> 2 files passed, 100 tests passedpnpm exec oxlint src/cli/plugin-install-plan.ts src/cli/plugin-install-plan.test.ts src/cli/plugins-cli.install.test.tspnpm docs:check-mdxpnpm docs:check-links -- docs/cli/plugins.md docs/tools/plugin.mdgit diff --check