Skip to content

fix(channels): surface missing external plugin repairs#78876

Merged
vincentkoc merged 3 commits into
mainfrom
fix-external-channel-upgrade-diagnostic
May 7, 2026
Merged

fix(channels): surface missing external plugin repairs#78876
vincentkoc merged 3 commits into
mainfrom
fix-external-channel-upgrade-diagnostic

Conversation

@vincentkoc

@vincentkoc vincentkoc commented May 7, 2026

Copy link
Copy Markdown
Member

Summary

  • Add catalog-backed repair hints for official external channel plugins.
  • Show configured Feishu/WhatsApp-style external channels as missing-plugin warning rows in openclaw status, and show the same repair hints in config-only openclaw channels status output.
  • Add actionable outbound channel errors when a configured official external channel has no resolved owner after a raw package-manager upgrade.
  • Keep installed-but-unconfigured, disabled, allowlist-denied, or untrusted plugins on their existing activation/configuration error paths instead of showing reinstall guidance.

Fixes #78702
Fixes #78593

Verification

  • Crabbox Blacksmith Testbox tbx_01kr112b2mxwz9mypqf77wx23p: env CI=1 NODE_OPTIONS=--max-old-space-size=4096 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=900000 pnpm test:serial src/plugins/official-external-plugin-repair-hints.test.ts src/infra/outbound/channel-selection.test.ts src/commands/status-all/channels.test.ts src/commands/channels.status.command-flow.test.ts
  • Crabbox Blacksmith Testbox tbx_01kr114tktk68h7wwtcvsej7j7: env CI=1 NODE_OPTIONS=--max-old-space-size=4096 OPENCLAW_TEST_PROJECTS_PARALLEL=6 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=900000 pnpm check:changed
  • git diff --check origin/main...HEAD

@vincentkoc vincentkoc self-assigned this May 7, 2026
@openclaw-barnacle openclaw-barnacle Bot added commands Command implementations size: M maintainer Maintainer-authored PR labels May 7, 2026
@clawsweeper

clawsweeper Bot commented May 7, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs maintainer review before merge.

Summary
The branch adds catalog-backed missing official external channel plugin repair hints to status output, config-only channel status, outbound channel selection errors, regression tests, and the changelog.

Reproducibility: yes. from source inspection rather than a live run: current main can throw generic unavailable/no-configured-channel output and omit missing-plugin status rows when configured Feishu or WhatsApp has no installed owner. The linked reports at #78702 and #78593 provide real upgrade symptoms.

Real behavior proof
Not applicable: This is a maintainer-authored MEMBER PR, so the external contributor real-behavior-proof gate does not apply.

Next step before merge
Protected maintainer PR with no narrow repair finding and failing broad check runs; the next action is maintainer review plus check triage, not an automated repair PR.

Security
Cleared: The diff adds local catalog lookups, diagnostic text, tests, and changelog copy without new dependency sources, secret handling, downloaded artifacts, or code-execution paths.

Review details

Best possible solution:

Land the focused diagnostic fix once the current-head checks are understood or green and maintainer review is satisfied.

Do we have a high-confidence way to reproduce the issue?

Yes, from source inspection rather than a live run: current main can throw generic unavailable/no-configured-channel output and omit missing-plugin status rows when configured Feishu or WhatsApp has no installed owner. The linked reports at #78702 and #78593 provide real upgrade symptoms.

Is this the best way to solve the issue?

Yes; the PR uses the existing official external catalog and configured-channel presence policy to add repair hints only for no-owner cases while preserving blocked, disabled, untrusted, and installed-but-unconfigured paths.

What I checked:

  • Live PR metadata: The GitHub API shows this PR is open, not draft, unmerged, authored by a MEMBER, labeled maintainer, and currently at head 424f8bbaf4cb489f0d6a0396bd4094f6b0981ab4. (424f8bbaf4cb)
  • Current main outbound error is generic: Current main throws Channel is unavailable: <channel> when an explicit known channel has no resolved outbound plugin, with no install or doctor repair hint. (src/infra/outbound/channel-selection.ts:176, 6ef7fa08afd6)
  • Current main status omits missing plugin rows: Current main builds the channel table by iterating resolved read-only channel plugins, so a configured external channel with no owner is not rendered as its own repair row. (src/commands/status-all/channels.ts:275, 6ef7fa08afd6)
  • Repair hints are gated to no-owner cases: The PR helper resolves official external install hints but returns them only when configured-channel presence policy reports exactly no-channel-owner, avoiding allowlist, disabled, untrusted, or active owner paths. (src/plugins/official-external-plugin-repair-hints.ts:53, 424f8bbaf4cb)
  • Status output gains repair rows: The PR appends missing official external plugin warning rows after resolved channel rows, using configured channel ids and the new no-owner repair hint helper. (src/commands/status-all/channels.ts:487, 424f8bbaf4cb)
  • Outbound selection gains repair errors: The PR augments explicit unavailable-channel and no-available-channel errors with the official external plugin repair hint when the configured channel has no owner. (src/infra/outbound/channel-selection.ts:225, 424f8bbaf4cb)

Likely related people:

  • vincentkoc: Merged history shows prior ownership of the official external plugin catalog and official channel package discovery paths that this PR extends. (role: recent feature owner; confidence: high; commits: d4268b1b2b74, 4781b46056e8, b5affa64b3bb; files: src/plugins/official-external-plugin-catalog.ts, scripts/lib/official-external-channel-catalog.json, src/channels/plugins/read-only.ts)
  • shakkernerd: Recent merged metadata discovery work shapes the read-only plugin resolution and outbound channel selection path used by the PR. (role: recent maintainer; confidence: medium; commits: a7cc9e8a56fe; files: src/infra/outbound/channel-selection.ts, src/channels/plugins/read-only.ts)
  • steipete: Recent history includes outbound channel error simplification and plugin metadata snapshot refactors adjacent to the changed surfaces. (role: adjacent owner; confidence: medium; commits: 4c0f6f8ce154, 2f44ffc8a75f; files: src/infra/outbound/channel-selection.ts, src/channels/plugins/read-only.ts, src/commands/status-all/channels.ts)
  • gumadeiras: Recent channel presence gating work affects the configured-channel policy helper that the PR now uses to decide whether reinstall hints are appropriate. (role: adjacent owner; confidence: medium; commits: f4478a142a41; files: src/plugins/channel-presence-policy.ts, src/plugins/channel-plugin-ids.ts)

Remaining risk / open question:

  • Exact-head GitHub check runs include failures in broader CI lanes, so maintainers should triage or rerun those before merge.
  • This was a read-only review; I did not run the PR branch tests locally or perform a live upgrade scenario.

Codex review notes: model gpt-5.5, reasoning high; reviewed against 6ef7fa08afd6.

@vincentkoc
vincentkoc force-pushed the fix-external-channel-upgrade-diagnostic branch from da7d60a to 424f8bb Compare May 7, 2026 10:57
@vincentkoc
vincentkoc marked this pull request as ready for review May 7, 2026 10:58
@vincentkoc
vincentkoc merged commit f482e4d into main May 7, 2026
156 of 162 checks passed
@vincentkoc
vincentkoc deleted the fix-external-channel-upgrade-diagnostic branch May 7, 2026 19:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

commands Command implementations maintainer Maintainer-authored PR size: M

Projects

None yet

1 participant