Skip to content

feat(icons): 四个第一方插件自报标签页图标 - #31

Merged
joesdu merged 2 commits into
mainfrom
dev
Sep 11, 2026
Merged

joesdu merged 2 commits into
mainfrom
dev

Conversation

@joesdu

@joesdu joesdu commented Sep 11, 2026

Copy link
Copy Markdown
Collaborator

把 SDK 2.0.4 的标签页图标契约(PluginIcon)用起来:Redis / 串口 / Telnet / S3 各自把图标交给宿主,不再共用那个通用插头。宿主一行都不用动(见宿主 plan.md §69、feature-plan.md 插件生态那一节)。

各插件用了什么

插件 图标 为什么
Redis 品牌标(实心、视框 1030) lucide 里没有 Redis,拿「数据库」之类的近似字形凑,换来的是一排标签里认不出哪个是它
串口 lucide usb-c-port 认的是「插的是哪一种口」
Telnet lucide ethernet-port 刻意不用终端字形:宿主的 SSH 标签画的就是 square-terminal,而标签上只有 12–16px,两个终端框并排等于没分。与串口的 USB-C 口成对
S3 lucide cloud 不用存储那一类字形:宿主给 SFTP / FTP 画的正是 hard-drive,而三者并排躺在同一条标签条上。S3 的两扇工具窗(桶管理器 / 对象检视器)也用同一个实例

16px 深色底渲染核过:Serial / Telnet / S3 / Redis / SSH / SFTP 六种标签两两分得开。

几处取舍

  • Redis 的路径是原始 SVG 三段 path 的顺序拼接,前两段末尾导出工具留下的空指令 m0 0 去掉了(画不出东西,却让解析器多收一个空图形)。三段绕向相反,顶面那几处镂空在 evenodd 与 nonzero 下画出来一模一样(两种规则各渲染一遍比过),所以不必在路径上声明 F0 / F1
  • 两千多字符的路径单独放 RedisIcon.cs,不塞进 RedisPlugin(同 AI 插件的 AiIcon):横在注册与探测逻辑中间,读代码的人要翻很久。S3 的 S3Icon 是因为三处共用同一个实例。
  • 暂不声明 minSdkVersion: "2.0.4":发布出来的 SDK 2.0.4 里 VelaPluginApi.SdkVersion 仍是 "2.0.2"(2.0.3 / 2.0.4 两次发版都没抬那个常量),而宿主的兼容闸门比的正是它 —— 声明了会把四个插件全部标成 Incompatible。等 SDK 那边把常量抬上去再补,届时才拦得住"带图标的插件装到 2.0.2 宿主上"那条运行期 MissingMethod 的路。

测试

四个插件各钉住自己那份图标(路径、描边/实心、视框);RedisIconTests 另在 headless 会话里把那 2 KB 路径真解析一遍并核边界 —— 宿主那边解析失败是静默退回通用插头,不报错也不抛,没有这一层守卫,路径里打错一个字符谁也不会发现。Telnet 与 S3 此前没有激活测试,这次一并补上描述符那几条。

⚠️ headless 宿主的 FillContains 结果不可信(整行报 true,视框外的点也报),所以"镂空还是不是洞"验不了,这一条写在测试注释里,免得下一个人再试一遍。

验收

  • dotnet build VelaShell.Plugins.slnx -c Debug -warnaserror —— 0 警告 0 错误
  • dotnet test VelaShell.Plugins.slnx -c Debug —— Telnet 26 / 串口 77 / S3 104 / Redis 155 通过,Redis 另有 84 条因本机没有 127.0.0.1:6379 跳过(既有口径)
  • dotnet build plugins/VelaShell.Plugin.Redis -t:PackVpx —— 出包正常

🤖 Generated with Claude Code

https://claude.ai/code/session_01GXH7SxQFdYtgMWgfjY5TkS

joesdu and others added 2 commits September 11, 2026 17:17
SDK 2.0.4 带的是标签页图标那一面(PluginIcon:ProtocolDescriptor.Icon /
WorkspaceDescriptor.Icon / PanelOptions.Icon 三处共用一个类型),下一个提交要用它。

顺手把文件末尾缺的那个换行补回来(.editorconfig 的 insert_final_newline)。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GXH7SxQFdYtgMWgfjY5TkS
宿主不维护「插件 id → 图标」的对照表(那张表第三方插件永远进不去),图标由插件经
描述符自报;不报就是所有插件共用的那个通用插头 —— 同时开着 Redis、S3、串口三种会话时,
三条标签顶着同一个插头,图标那一格等于白占。

- Redis:品牌标(RedisIcon.cs,实心、视框 1030)。lucide 里没有 Redis,拿「数据库」
  之类的近似字形凑,换来的是一排标签里认不出哪个是它。路径是原始 SVG 三段 path 的顺序
  拼接,前两段末尾导出工具留下的空指令 m0 0 去掉了。三段绕向相反,顶面那几处镂空在
  evenodd 与 nonzero 下画出来一模一样,因此不必声明 F0 / F1。
- 串口:lucide usb-c-port。
- Telnet:lucide ethernet-port。刻意不用终端字形 —— 宿主的 SSH 标签画的就是
  square-terminal,而标签上只有 12–16px,两个终端框并排等于没分。以太网口与串口的
  USB-C 口成对:一个网口一个串口,一眼分得开。
- S3:lucide cloud,会话标签页与桶管理器 / 对象检视器两扇工具窗共用(宿主现在也给
  窗口标题栏画这个图标)。不用存储那一类字形:宿主给 SFTP / FTP 画的正是 hard-drive,
  而三者并排躺在同一条标签条上。

测试:四个插件各钉住自己那份图标(路径、描边/实心、视框);RedisIconTests 另在 headless
会话里把那 2 KB 路径真解析一遍并核边界 —— 宿主那边解析失败是**静默**退回通用插头,
不报错也不抛,没有这一层守卫,路径里打错一个字符谁也不会发现。Telnet 与 S3 之前没有激活
测试,这次一并补上描述符那几条。

注:暂不在 plugin.json 声明 minSdkVersion "2.0.4" —— 发布出来的 SDK 2.0.4 里
VelaPluginApi.SdkVersion 仍是 "2.0.2"(2.0.3 / 2.0.4 两次发版没抬那个常量),而宿主的
兼容闸门比的正是它,声明了会把四个插件全部标成 Incompatible。等 SDK 那边把常量抬上去再补。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GXH7SxQFdYtgMWgfjY5TkS
@joesdu
joesdu merged commit 75bace8 into main Sep 11, 2026
1 check passed
joesdu added a commit that referenced this pull request Sep 11, 2026
main 上的 #31 / #32 都是 squash 合并,新造的提交与 dev 这边的原提交没有共同历史 ——
于是 Docker 面板那几个文件在合并基线看来是**两边各自新增**的(add/add),内容不同的
两个(PluginMain.cs / README.md)就成了冲突。两边逐字节比过:main 的那两份与 dev 上
「我改之前」的那两份完全一致,因此冲突取 dev 这一侧 = 保留本分支新加的图标改动。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GXH7SxQFdYtgMWgfjY5TkS
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant