[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-96693":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":12,"openIssues":13,"contributorsCount":14,"subscribersCount":14,"size":14,"stars1d":14,"stars7d":14,"stars30d":14,"stars90d":14,"forks30d":14,"starsTrendScore":14,"compositeScore":15,"rankGlobal":9,"rankLanguage":9,"license":16,"archived":17,"fork":17,"defaultBranch":18,"hasWiki":19,"hasPages":17,"topics":20,"createdAt":9,"pushedAt":9,"updatedAt":24,"readmeContent":25,"aiSummary":9,"trendingCount":14,"starSnapshotCount":14,"syncStatus":26,"lastSyncTime":27,"discoverSource":28},96693,"dsh-echocat-skill-panel","VDERR\u002Fdsh-echocat-skill-panel","VDERR","DSH 技能调用审计 + 应用内 skill 管理器",null,"JavaScript",201,6,1,0,42.54,"MIT License",false,"main",true,[21,22,23],"cordis","deepseek-harness","dsh-plugin","2026-09-25 04:01:33","# dsh-echocat-skill-panel\n\n> 5.1.3 修复：新会话横栏被压成细线，以及窄窗口统计项只剩数字。详见 [5.1.3 更新说明](RELEASE_NOTES_5.1.3.md)。\n\n**v5.1.3** · DSH Desktop Beta 的 cordis 插件：统计每轮对话用到了哪些 skill，并让你**在应用里直接装卸、更新它们**。\n\n判定不依赖模型自觉 —— 插件从会话事件流推导本轮调了哪些 skill（模型自动、你手动 `\u002Fname`、或一个都没用），模型忘了说也照样报。\n\n![面板](docs\u002Fpanel.png)\n\n三个界面共用一份数据：\n\n| 位置 | 说明 |\n| --- | --- |\n| **输入框正上方横栏** | 一行结论 + 四个计数，点开就地展开完整报告。**唯一能一键引用 skill 的界面** |\n| **左栏图标** | 常驻入口，点它在中间打开面板 |\n| **中栏面板** | 完整报告 + skill 目录 |\n\n输入框上方这一条是折叠态，四个计数常驻；点它展开成完整报告，报告**单独悬浮**，不和横栏合成一个盒子：\n\n![横栏](docs\u002Fstrip.png)\n\n## 一键安装\n\n把作者给的地址**整个粘进来**就行：\n\n```\nhttps:\u002F\u002Fgithub.com\u002Fowner\u002Frepo\u002Ftree\u002Fmain\u002Fskills\u002Fmy-skill\n```\n\n仓库主页、仓库里的文件夹链接、`SKILL.md` 链接、zip 直链、`owner\u002Frepo`、SSH 地址都认 —— host 自己判断该克隆还是该下载，分支与子目录从地址里解析，不用你填三个框。也可以上传 `.md`\u002F`.zip`，或直接粘贴整篇 `SKILL.md`。\n\n同名不会静默覆盖：先备份再替换。装错了能删，**删掉的进备份目录，永不硬删**。\n\n![安装面板](docs\u002Finstall-sheet.png)\n\n## 背景自定义（4.4）\n\n面板可以有背景。横栏和报告右上角的「背景自定义」打开一张设置面板，**左侧是实时预览**，改一下看一眼，不满意随时取消 —— **预览、取消、恢复默认是三件不同的事**，不会\"改了就算数\"。\n\n![背景自定义](docs\u002Fbackground-settings.png)\n\n- **四类样式**：液态、柔和渐变、纯色、本地图片；**六套低饱和预设**（柔柔银蓝、珍珠白、紫棠、暖砂灰、深色金属、青瓷）直接挑一个开始。\n- **每个滑块都真的作用于背景**：主色 \u002F 辅助色 \u002F 高光色，明暗、亮度、饱和度、对比、金属高光、柔化、遮罩、速度、形变、指针反馈 —— 而**不适用的选项会隐藏**，不是摆在那里让你调了没反应。\n- **图片在本机处理**：接受 JPG\u002FPNG\u002FWebP（上限 8 MB），**在本机缩到长边 1920 以内**，支持铺满裁切 \u002F 完整显示 \u002F 拉伸与位置。图片和设置**单独存在客户端数据库里，不上传、不改动 skill 数据、不碰宿主配置**。\n- **只影响当前客户端**：设置跨本插件的各个表面共享、刷新后保留，但**不宣称跨设备同步** —— 因为它确实不跨。\n- 静态模式下背景**不持续渲染**；隐藏、卸载和系统\"减少动态\"仍然照常生效。\n\n## 装了之后能更新（4.0）\n\n**问题**：3.0 把地址用一次就丢了（git 克隆还会被删掉）。作者发了修复，你无从判断新旧，只能删了重装 —— 而删除是移动到备份。\n\n**做法**：安装时把来源写进该 skill 自己的 `.echocat.json`：地址、分支、子目录、**安装时的 commit**、以及一份**内容指纹**。于是：\n\n- 卡片上多一行来源。远端有新 commit 时标成「**可更新**」，点两下即替换，**旧版本先进备份**。\n- 判断只跑一次 `git ls-remote`，**不重新下载内容**；来源固定在某 commit 上时不会被误报成\"有新版\"。\n- **你手改过这个 skill 的文件**时，确认文案会明说\"更新会覆盖它们\" —— 这是唯一会丢改动的场景。\n- 手工装的、或 2.x\u002F3.0 装的 skill 没有这条记录，卡片上给一个「标记来源」，填一次地址即纳入更新。\n- 中文显示名不受影响：更新沿用你为该 skill 设的 `display-name-zh`。\n\n## 界面\n\n- **宽度跟着界面缩放**：横栏与面板的宽度由宿主自己的输入框宽度推导（`--dsh-composer-card-max-width` 减 16px），**永远比输入框窄**，并且和输入框共享同一条中轴 —— 宽窗口、窄窗口、嵌入式布局都对。\n- **一套完整的设计语言**：四个表面台阶（画布 \u002F 卡片 \u002F 抬升 \u002F 下沉）、一个强调色（靛蓝，只用于主操作、选中和\"有东西可做\"）、五级字阶（10.5 → 26px，字号越大字距越紧）、三级投影（每级两层低透明度叠加），发丝线用 `color-mix` 从墨色推导。\n- **485 条具名调整**：215 项行为打磨（[polish.js](src\u002Fclient\u002Fpolish.js)）+ 270 项设计重做（[design.js](src\u002Fclient\u002Fdesign.js)），全部是带名字和理由的数据记录，样式表由它们生成，测试逐条核对真的生效。\n- **插件自己也能检查更新**：面板头部与横栏各有一组按钮 —— 「检查更新」问 npm 与 GitHub 谁更新（10 分钟缓存，只有点击才联网），旁边是 GitHub 发布页跳转。查到新版本时按钮带强调色和一个小圆点，头部还会直接写出「可更新 x.y.z」；\"查不到\"和\"已是最新\"是两句不同的话。\n- **skill 名字一行显示全**：卡片是三行结构（名字行 \u002F 说明 \u002F 按钮行）。名字独占整行并且**会换行、不会被省略号截断** —— 之前它和六个按钮抢一行，长名字只剩几个字符加省略号。\n- **四个计数器就在横栏那一行里**：展开横栏后，回合 \u002F 用到 skill \u002F 未用 \u002F 调用次数 与结论、回合数同在一条线上，不再另起一行，也不再藏在展开的报告里。\n- **每个 skill 一个开关**：停用会把目录**移出 DSH 监视的 skills 目录** —— 模型真的加载不到它，而文件一个不少，随时一键启用回来。已启用与已停用分两组列出，停用的卡片仍可改名、查来源、更新、删除。\n- **深浅两套都验过**：深色盘同时挂在系统偏好与**应用内主题**两条信号上；所有文字色都按 WCAG 算过对比度（正文 18.2:1、次级 6.4:1、元数据 5.3:1）。\n- `prefers-reduced-motion`、`prefers-reduced-transparency`、窄屏布局各自有覆盖。\n- 改界面的做法：`node tools\u002Fpreview.mjs` 渲染真实面板并截图，加 `--measure` 打印计算样式 —— **先看见，再改**。\n\n## 一键调用\n\n输入框正上方常驻一条横栏，点开后在 skill 卡片上按「**引用**」，`\u002F名字 ` 就追加进草稿 —— 回车即按手动手势调用它。装完 skill 的成功提示里有同一个按钮，装完即用。\n\n## 中文显示\n\n中文名写进该 skill 自己的 `meta.yaml`（`display-name-zh`），面板就按中文显示。安装时能填，装完在卡片上随时能改，留空则清除。\n\n`\u002F名字` 手势仍然走 ASCII 代号，两者互不干扰。\n\n## 安装\n\n**GitHub 源码**（推荐，拿到的是完整包）：\n\n```powershell\ngit clone https:\u002F\u002Fgithub.com\u002FVDERR\u002Fdsh-echocat-skill-panel.git\ncd dsh-echocat-skill-panel\n& \".\\安装-3.0.ps1\"      # 备份清单 → 镜像 → 清旧包名 → 建联接 → 改 manifest → pnpm install\n```\n\n**npm**（已发布到 npm，包名相同）：\n\n```powershell\ndsh plugin --profile web add dsh-echocat-skill-panel     # 走 dsh 的插件安装\nnpm install dsh-echocat-skill-panel                      # 或直接装进 profile 目录\n```\n\n> 两个 `peerDependencies`（`@deepseek-ai\u002Fdsh-llm`、`@deepseek-ai\u002Fschemastery`）标了 `optional`：由 DSH 运行时提供，npm 不会自己去下载一份来顶替宿主的那份。\n\n> **装完必须重启 DSH Desktop Beta。** host 半侧在 boot 时快照进内存，而客户端 bundle 每次开页面会重新拉取 —— 所以只改客户端刷新页面就够，**改了 host 必须重启**。\n\n脚本动手前会备份 profile 清单，`-Rollback` 一键回退。手动四步、卸载回滚，以及**五条会让应用起不来的硬性约束**都在 [安装说明.md](安装说明.md)。\n\n## 更多\n\n每轮结束弹一次系统原生通知；给没中文的 skill 自动翻译并缓存；深色主题；宿主不允许写入时自动变只读并说明原因；全部配置项 —— 见 [安装说明.md](安装说明.md)。\n\n架构与实现要点、安装引擎的四条安全规矩、**宽度为什么用百分比而不是像素**、**停用为什么是\"移出目录\"而不是改名**、**485 条调整为什么是生成的**、**设计重做是怎么\"先看见再改\"的**、**来源记录为什么放在 skill 目录里**、**版本比较为什么不能拿字符串比**、**为什么\"声明进了样式表\"不等于\"规则能命中元素\"**（4.0.1 整页空白 bug 的教训）、**踩过的坑**（宿主语义令牌不能当视觉令牌用、逗号选择器不能共享组合符、`min-height:0` 会架空粘底页脚、CSS 注释里的反引号会截断样式表……），以及 1364 项断言 \u002F 十二个门的测试明细 —— 见 [docs\u002F设计要点.md](docs\u002F设计要点.md)。\n\n## 开发\n\n```powershell\nnode tools\u002Fbuild-client.mjs        # 生成 lib\u002Fclient.js（改了 src\u002Fclient\u002F 就必须跑）\nnpm test                           # 九个套件\nnode tools\u002Fpreview.mjs             # 渲染真实面板并截图（浅色 + 深色）\nnode tools\u002Fpreview.mjs --measure   # 打印关键元素的计算样式\nnode tools\u002Fcheck-width-live.mjs    # 真 Chrome 量宽度（改了宽度规则就跑）\n```\n\n> `lib\u002Fclient.js` 是**入库的构建产物**（目标机器没有工具链，`lib\u002F` 必须一起提交）。**改了 `src\u002Fclient\u002F` 就要在同一个 commit 里重建它** —— `verify-install.mjs` 会核对 bundle 与包是否一致，漏了会在门里失败。\n\n运行时没有任何依赖；`@deepseek-ai\u002Fdsh-llm` 与 `@deepseek-ai\u002Fschemastery` 是 host 提供的 peer。\n\n## 许可\n\nMIT，见 [LICENSE](LICENSE)。\n",2,"2026-09-24 02:30:03","CREATED_QUERY"]