Custom marketplace drops plugin icons and exposes Ghost skill names inconsistently
- Dominant language
- TypeScript
- Stars
- 2.7k
- Forks
- 395
- Avg merge
- 21h 48m
- Merged PRs (30d)
- 776
Description
**提交人**: Yop
**客户端版本**: 0.1.26
---
## 现象
通过自定义 Git marketplace 安装带图标和 Skill 的插件时,Cindy 对相同插件元数据存在两处不一致:
1. marketplace 卡片不显示插件声明的图标;
2. 同一个 Ghost Skill 在 Codex 与 Claude/非 Codex 路径下显示不同的斜杠命令名。
该问题以 claw-kit 插件复现,但检查表明仓库包与安装产物均完整,问题位于 Cindy Host/UI 的投影层。
## 复现步骤
### 自定义市场图标
1. 在自定义 Git marketplace 中提供一个插件。
2. 在插件 `ghost.json` 中声明 `"icon": "assets/icon.png"`,并确保文件存在。
3. 从该 marketplace 安装插件。
4. 打开 marketplace 列表或插件详情。
已确认仓库与安装目录中的 PNG 均存在且内容一致,但自定义市场卡片没有图标。当前实现的自定义市场 item 投影在 `customToItem(...)` 中对 git-market/local-market 返回 `icon: null`。
### Ghost Skill 名称
1. 在同一插件的 `ghost.json` 中声明 `skill.items`,其中包含 `name: "update"`,并提供 `skills/update/SKILL.md`。
2. 安装并启用插件。
3. 确认 Host 已创建插件 Skill junction(示例:`claw-kit--update`)。
4. 分别在 Codex 和 Claude/非 Codex 会话打开斜杠命令面板。
Codex app-server 的 `skills/list(forceReload=true)` 会根据 Skill 元数据返回 `name: "update"`,因此显示 `/update`。Claude/非 Codex 的 `scanClaudeSkillDirs` 使用 junction 目录名,因此显示 `/claw-kit--update`。同一份插件清单在不同 Agent 下产生不同的用户可见命令名。
## 期望行为
- 自定义 marketplace 应安全解析并显示插件 manifest 声明的本地 icon。
- Ghost Skill 在 Codex 与 Claude/非 Codex 下应使用一致的用户可见名称。
- 建议优先使用 manifest/SKILL frontmatter 声明的短名;发生真实命名冲突时,再使用明确且跨 Agent 一致的命名空间回退策略。
- 安装确认框、插件详情、slash palette 和 Agent 实际可调用名称应保持一致。
## 实际行为
- 自定义市场投影丢弃 icon,导致合法资源永远无法展示。
- Host 已安装并挂载 Skill,但不同 Agent 使用不同名称来源,造成 `/update` 与 `/claw-kit--update` 分裂,用户容易误判为 Skill 未随插件安装。
本 issue 仅描述问题和建议方案,不附带或请求直接合并的 PR。
---
**版本区域**: CN
**OS**: win32 x64 (10.0.26200)
**界面语言**: zh-CN
Contributor guide
Research direction
Start with the customToItem(...) projection and the scanClaudeSkillDirs path, then compare them with Codex app-server skills/list(forceReload=true) and the plugin's ghost.json and SKILL.md metadata. Trace how icon and skill names flow into marketplace cards, installation confirmation, plugin details, and the slash palette. Done means local icons are displayed safely and the same declared skill name is used consistently across Codex and Claude/non-Codex sessions, including a defined collision fallback.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript
- Domain
- developer-experience, frontend
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100