fix(ui): correct Claude Code skills install command and settings.json snippet - #33515
devin-ai-integration[bot] wants to merge 1 commit into
Conversation
🤖 Devin AI EngineerI'll be helping with this pull request! Here's what you should know: ✅ I will automatically:
Note: I can only respond to comments from users who have write access to this repository. ⚙️ Control Options:
|
|
|
Greptile SummaryThis PR fixes the Claude Code skill setup UI by correcting two errors in the generated instructions: the install command now uses
Confidence Score: 5/5Frontend-only change correcting two hard-coded strings; no backend logic, auth, or data persistence is touched. The fix is narrow and well-contained. The backend already returns No files require special attention.
|
| Filename | Overview |
|---|---|
| ui/litellm-dashboard/src/components/claude_code_plugins/helpers.ts | Replaces the broken /plugin marketplace add <source> command generator with the correct /plugin install <name>@litellm format; adds MARKETPLACE_NAME/MARKETPLACE_MANIFEST_PATH constants and buildMarketplaceSettings helper that produces the properly-nested source object Claude Code requires. |
| ui/litellm-dashboard/src/components/claude_code_plugins/helpers.test.ts | Old tests for incorrect install-command behavior replaced with tests for the fixed command format and the new buildMarketplaceSettings helper; assertions verify the marketplace key is "litellm" (not "my-org") and source is a nested object (not a flat string). |
| ui/litellm-dashboard/src/components/claude_code_plugins/skill_detail.tsx | Removes duplicate inline JSON.stringify blocks for the settings snippet; both the rendered <pre> block and the Copy button now consume the same settingsSnippet variable built via buildMarketplaceSettings, eliminating the previous drift risk. |
Reviews (1): Last reviewed commit: "fix(ui): correct Claude Code skills inst..." | Re-trigger Greptile
Relevant issues
Fixes #33512
Linear ticket
Pre-Submission checklist
@greptileaito re-request a review after pushing changes)Screenshots / Proof of Fix
The skill detail page (Admin UI -> Skills -> pick a skill) produced setup instructions that Claude Code rejects. All three come from the frontend only; the backend already serves the marketplace under
"name": "litellm"inlitellm/proxy/anthropic_endpoints/claude_code_endpoints/claude_code_marketplace.py"How to Use" tab, install command
before
after
"One-time setup" tab,
~/.claude/settings.jsonsnippetbefore (source is a flat string, and the key is
my-org, so Claude Code errors withextraKnownMarketplaces.my-org.source: Expected object, but received string){ "extraKnownMarketplaces": { "my-org": { "source": "url", "url": "https://<proxy>/claude-code/marketplace.json" } } }after (source is a nested object, and the key matches the name the proxy returns)
{ "extraKnownMarketplaces": { "litellm": { "source": { "source": "url", "url": "https://<proxy>/claude-code/marketplace.json" } } } }How to verify by hand against a live proxy
/plugin install <name>@litellmand Copy yields the same~/.claude/settings.json; confirm Claude Code accepts the file (noExpected object, but received string) and that/plugin install <name>@litellmthen resolves against thelitellmmarketplaceType
🐛 Bug Fix
Changes
The marketplace name and manifest path now live as
MARKETPLACE_NAMEandMARKETPLACE_MANIFEST_PATHconstants inhelpers.ts, so the UI keys off the same"litellm"value the proxy publishes instead of a hard-coded"my-org"formatInstallCommandno longer derives a/plugin marketplace add <source>string from the plugin source; it returns/plugin install <name>@litellm, which is what actually installs a plugin in Claude CodeA new
buildMarketplaceSettings(marketplaceUrl)helper builds the settings object withsourceas a nested{ source: "url", url }object keyed underlitellm, andskill_detail.tsxuses it for both the rendered snippet and the Copy button so the two can never driftTests in
helpers.test.tsare rewritten for the new install command and the new settings builder, asserting the source is a nested object (not a flat string) and the key islitellm(notmy-org), so this specific regression cannot recur without failingFinal Attestation
Link to Devin session: https://app.devin.ai/sessions/04608ae1344043d5b33a4c8a0c0809dc