# Changelog All notable changes to dsh-plugin-hub. ## v0.3.31 — 自定义源全链路:索引源 / Git 源 / 合并模式 / 内网闭环(2026-09-08) > 主题:四类「源」全部可自定义——内网、公网、混合都能配。 - **索引源可配置**:`indexSources` 主→备依次尝试;拉取失败回退落盘缓存(响应带 `offline` / `cachedAt`);成功时返回 `sourceName`;索引源配置变更立即失效内存缓存(原先要等 10 分钟); - **索引合并模式**:所有索引源结果并发拉取、去重合并(公共索引 + 公司内网私有索引同屏可见),各源独立 8 秒超时,慢源不拖垮整体; - **Git 源可配置**:`{owner}/{repo}` 地址模板,支持 Gitee / GitLab / 自建 Gitea / 任意镜像代理 / `file://` 本地裸仓库(完全离线);5 处 git 调用统一走 `gitCloneUrls` 主备回退; - **AI 赋能走 Git 源**:规划前用 Git 源把目标仓库预克隆到临时目录,子代理直接读本地 README / package.json / docs(内网 / 离线环境同样可调研,30 分钟后自动清理); - **无 package.json 的仓库**:含 SKILL.md → 自动转技能安装;否则失败并返回 `hint=repo-land`,前端一键「仓库落地」; - **软件源弹窗**:加宽 420→760px、限高 + 内置滚动条、五分区折叠(软件源默认展开)、操作按钮悬停说明; - **仓库落地**:接受任意平台仓库链接(GitHub / Gitee / GitLab / 内网 Gitea / 镜像代理前缀,循环剥离域名);提示文案动态显示当前主 Git 源; - **修复**: - `repo-clone` 未禁用 git 交互 → 克隆不存在/私有仓库会弹 Windows 凭据窗(统一 `GIT_TERMINAL_PROMPT=0` + `GCM_INTERACTIVE=never` + `ASKPASS=echo`); - `market-index` 被客户端以 GET 调用落入 405 且错误被静默吞掉 → 静态索引长期未生效(客户端改 POST + 服务端 GET 兼容白名单); - 私网 http 索引源报 `Protocol "http:" not supported` → 跳过 node https 兜底,暴露 curl 真实错误; - `styles.srcUrl` 未定义(源地址无样式)→ 补等宽字体 + 超长省略; - **工程**:新增 `.github/workflows/test.yml`(语法检查 + 4 个硬门禁套件,环境依赖自动 SKIP);测试可移植化(系统 tmpdir → 仓库内 `.testdir`);修复 2 个既有失败测试;新增 `docs/roadmap.zh.md` 记录演进方向; - 验证:端到端 29/29 PASS,7 个测试套件 ALL PASS;内网闭环实测(Verdaccio registry / 本地搜索服务 / `file://` 裸仓库)。 ## v0.3.30 — 修复桌面端/框架类误装崩溃 + AI 步骤提示键泄漏(2026-09-06) > 事故:室友把「dsh 桌面端」(独立客户端,非插件)在控制台点「添加到本地」→ 按 bundle 规则注册其组合补丁, > 其中引用 `@deepseek-ai/dsh-root` 等**框架级行**(包在 npx 缓存/框架树,profile node_modules 不存在)→ > 下次 `dsh web` 启动 `ERR_MODULE_NOT_FOUND` → **整服务打不开**。 - **通用防线(register 前校验)**:注册任何 bundle 插件前,校验其 `cordis.patch.yml` 引用行的模块**全部能在 profile 解析**(**含 `@deepseek-ai/*` —— 正是事故中的框架级包**);缺失 → **拒绝注册**并列出缺失清单 + 说明(该包不能作为插件安装);正常全家桶(web-all 引用全部可解析)放行,已离线仿真验证; - **框架本体仓库拦截**:`deepseek-ai/deepseek-harness` 走安装/添加到本地 → 直接拒绝并提示「请用框架升级」(框架升级流程独立,不受影响); - **AI 步骤提示翻译键修复**:`aiNeedSteps` → `aiEmpowerNeedSteps`(未勾选步骤点「同意并部署」不再显示键名 "AIneedstep",而是正常中文提示); - 验证:`node --check` ✅、`test-compat-gate` 15/15 ✅、`test-issue15-resolve` ✅、`test-bundle-guard` ✅(dsh-root 缺失去拦截/全家桶放行)。 ## v0.3.29 — 聚合子包更新安全 + 全家桶交互完善(2026-09-06) > 事故背景:更新 `@linxin666/dsh-i18n`(全家桶子包,自身又声明 `dsh.bundle.patch`)时,按"bundle 安装规则"被额外注册为独立 bundle,与全家桶内的 `web-ui-i18n` 行重复(两个 i18n);全家桶分组按"同根行数≥2"又把这两个重复行聚成假"全家桶"卡。另:全家族升级到 0.3.16 时,完整性检查在更新瞬时态(极个别包替换窗口/失败)把 16 行误判"缺失"并自动禁用。 - **防重复注册(`alreadyServed`)**:安装/更新时若包已被现有行提供(moduleName 已在组合中)→ 只更新包本身,**不再追加 bundles/注册新行**(bundle 与非 bundle 两条路径都防护); - **全家桶分组收紧**:改为按**不同子包名**聚合——同包的重复行不再凑成"全家桶"卡; - **完整性检查瞬时态加固(`transientAllow`)**:聚合更新时,本次作业刚同步过版本的包处于原子替换窗口,缺失≠真缺失 → 跳过"补装+自动禁用"判定(记入 pending 简报),下次校验再查;不传参时行为与旧版完全一致; - **全家桶「更新」按钮**:批量检测出最新版且 ≠ 已装版本时,卡片出现「更新 vX」→ 点击开始整包更新(装聚合包+子包版本对齐+完整性+适配校验);「一键启用已适配」在无待适配行时改为友好提示(不再报"操作失败"); - **右上悬浮工具栏与官方设置头叠印修复(issue #16)**:浮层按钮全部实底不透明(消除半透明透底叠字);新增窄屏(≤1160px)媒体查询——整体下移,避开官方「打开配置文件」按钮区(宽屏保持原有右上位置不变); - **「功能包」长按拖动**:长按 ~0.45s 进入拖动,位置夹在视口内,**持久化 localStorage**(`pc-toolbar-pos`),下次打开沿用上次位置;抽屉按钮组跟随主按钮;短按开关抽屉行为不变; - 验证:`node --check` ✅、`test-compat-gate` 15/15 ✅、`test-issue15-resolve` ✅。 ## v0.3.28 — 修复第三方插件详情/版本全空(issue #15,npm 全局安装 dsh 下) > 现象:npm 全局安装 dsh 0.1.2-rc.1 时,`ctx.baseUrl` 落在框架安装树而非 profile node_modules。 > `resolvePackageJson` 以框架树为基准:官方 `@deepseek-ai/*` 恰好可见,**第三方插件全部解析失败** > (被 `catch {}` 静默吞掉)→ 详情面板空白、版本/仓库/安装日期全 null,官方模块不受影响。 - **修复**:`resolvePackageJson(pkgName, baseDir, fallbackBase)` 新增 **profile 目录回退**—— 基准解析失败后改用 `~/.dsh/profiles/` 再试一次(createRequire + 物理路径双通道); `entryPkgMeta` / `readPluginDetails` 及 5 个调用点统一传入 `profileDirOf(ctx)`(由 `findPatchPath(ctx)` 推导,失败返回 null 不回落); - **验证**:`test-issue15-resolve.mjs` 场景模拟通过(dsh-better-sidebar / 控制台自身 / web-all 子路径在框架树 base 下解析为 null,回退后全部解出;`@deepseek-ai/dsh-settings` 行为不变);`node --check` ✅、`test-compat-gate.mjs` 15/15 ✅。 ## v0.3.27 — 全家桶分组卡片 + 永不崩机制 + 适配门强化 + 子包删除安全(2026-09-04) > 本次修复两起真实事故:① 记忆插件被自愈机制误禁用(`require.resolve('pkg/package.json')` 对 exports 受限包抛错);② 删除`@linxin666/dsh-web-all`全家桶的单个子包(plugin-manager)时,旧逻辑把整个 bundle 移出清单,pnpm 卸载失败后重启导致**全家桶整体消失**。 - **全家桶分组卡片**:同根包子路径导出(模块名 = `pkg/sub`,web-all 0.3.14 式)自动聚合为一张全家桶卡(列表**底部**);收起/展开、批量检测更新、**一键启用已适配**(adapt-unlock-all,仅解锁源码扫描通过的子包)、已知校验预览;子卡标题剥离 `web-all/` 前缀; - **永不崩安全**:`probePluginImport` 启用前子进程动态 import 冒烟(捕获 loader 将遇到的解析/语法/导出错误);`healPatchSafety` 补丁自愈(核心行误禁用自动恢复 + 启用态 insert 行模块缺失自动禁用,`CORE_PATCH_ROW_IDS` 保护);`resolvePackageJson` exports 回退(物理路径直查 node_modules)——修复 `@openviking/dsh-memory-plugin` 被误禁用事故; - **适配门强化**:源码扫描硬判据(v0.3.26 已入);**迁移检测**(本地包声明 `dsh.migrate.to` → 查目标包 registry 最新版与兼容,提供「迁移并适配」);deps-strict 软化(仅有声明/依赖范围、无 pkgDir 源码时不再误判 fail);「待适配 v」徽标与顶部横幅移除(提示移入详情面板); - **子包删除安全**(事故修复):bundle 行的「删除」= 仅写 `disabled: true` 停用该行,**不再移除 bundle 清单、不再 pnpm 卸载**(整体卸载走包管理器);返回 `removed:'row'` + 说明文案,前端同步展示; - **其他**:`packageNameOf` / `baseDirOf` 子路径归一;移除「强制启用(风险自担)」绕过(仅保留记忆插件 bug 修复)。 ## v0.3.26 — 适配门源码扫描硬判据 + ★ 筛选补标强化(2026-09-04) > 教训:v0.3.25 的适配门被 `@linxin666/dsh-web-ui-all@0.3.6` 的静态声明/依赖检查**假通过**——0.3.6 全家仍引用 `settingsNamespace` / `installSettingsSection`(0.1.2-rc.1 已删除),解锁后 loader 单行 import 失败导致**整个服务启动崩溃**。静态检查 ≠ 真实兼容,只有模块 import 的那一刻才是真相。 - **适配门硬判据**:框架 ≥ 0.1.2 时对已装包做**源码扫描**(`settingsNamespace` / `installSettingsSection`),命中即判 fail,绝不自动解锁(scanSettingsApiUsage,限深 3 层、上限 120 文件、单文件 400KB); - 解锁前提收紧为:**版本变化 + 声明/依赖通过 + 源码扫描干净** 三合一; - **★ 只看官方**:静态索引加载后一次性补标(浏览器直连失败不覆盖服务端判定,合并保留);`/enrich` 并发限流 12 + **24h 结果缓存**(`~/.dsh/plugin-console/enrich-cache.json`)+ 失败回退缓存——网络黑洞期 ★ 不再坍缩成 0/1 条; - deepseek-ai 官方仓库(框架本体等)直接亮「官方」标; - 验证:`test-compat-gate.mjs` 15/15;`dsh-pet@0.3.6` 扫描实测命中两个已删除符号。 ## v0.3.25 — 框架升级适配门 + AI 赋能适配检测(2026-09-04) > 起因:0.1.1-rc.2 → 0.1.2-rc.1 升级事故(新版 @linxin666/dsh-web-ui-all 与框架不兼容致服务无法拉起)。本版把"升级后旧插件强制禁用 → 更新并通过兼容校验后才可启用"固化为控制台机制。 - **框架升级适配门**:读取 `~/.dsh/plugin-console/compat-pending.json`(升级时生成的强制禁用清单),已禁用插件行显示「待适配 <框架版本>」徽标;启用按钮锁定,服务端 `/toggle` 对兼容门内行返回 409(不能绕过); - **更新并适配(一键解锁)**:兼容门内的插件走「更新并适配」→ 安装/更新完成后自动校验(扫描最新版 package.json 的 `dsh.engines.framework` / `engines.dsh` 显式声明 + `@deepseek-ai/*` 依赖范围);版本已变化且校验未失败 → 自动移除 `cordis.patch.yml` 的 `disabled` 块、标记清单 `adopted` 解锁启用;聚合包更新会连带校验其同步的子包; - **内置 semver 判定器**(零依赖):支持 `^ ~ >= <= > < =`、AND/`||`、npm prerelease 规则(依赖判定严格、显式声明判定宽松); - **AI 赋能附带适配检测**:发起 AI 赋能(含禁用插件行旁的按钮)时,服务端预检 registry 最新版声明 + 兼容门命中情况,结果注入子代理提示词(要求计划中向用户解释适配结论),并在计划面板展示「框架适配检测」说明(不兼容标红); - **顶部横幅**:存在待适配插件时在「已安装插件」区提示数量与升级路径(旧版 → 新版); - **升级安全三件套(事故根因修复)**:① 框架安装根识别——修复 `require.resolve` 返回 `.pnpm` 内部 realpath 导致「重链跳过 / 依赖修复 0 个」、pnpm 在错误 cwd 把新 CLI 原位覆盖进旧 `.pnpm` 目录的根 bug(未定位到框架根时拒绝升级);② 升级前框架全树 checkpoint(镜像 `.pnpm` 全部 `@deepseek-ai` 版本自包 + 顶层 scope + lock.yaml),升级失败自动全树回滚;③ 「拉起失败自动回滚并重试」不再只留「请手动运行」提示;安装失败回滚后跳过重链/依赖修复(避免对已恢复旧树二次破坏); - **一键回滚**:升级后框架卡片出现「回滚到上一版」按钮(/framework-rollback + framework-rollback.json),停服→全树恢复→自动拉起→健康检测,全程状态可见; - 验证:`test-compat-gate.mjs` 15 项断言全过(semver 语义、声明/依赖判定、prerelease 宽松规则)。 ## v0.3.24 — AI 赋能一键部署(正式版,2026-08-31) - **AI 赋能**:输入 npm 包名 / GitHub 仓库,本地 AI 读取文档自动生成部署计划(纯插件 / 服务器组件 / 仅配置),计划-执行分离(面板逐步骤勾选确认),安全执行器(命令/路径白名单、破坏性命令拦截、日志脱敏),服务器类组件自动注册并生成控制卡片; - **组件控制卡片**:页面左侧固定、与主面板顶边动态对齐;【打开】按钮直达服务器 Web UI;多服务器时下拉展开;查看插件/市场详情时自动隐藏;可折叠(状态本地记忆); - **内置 OpenViking 模板**:125ms 秒出计划(pip 安装/模型下载/ov.conf 写入/启动/健康检查 5 步,幂等可重跑); - **模型配置跟随 DSH**(settings.yaml + .credentials.yaml),支持 `~/.dsh/plugin-console/ai-empower.json` 独立区块覆盖; - **更新检测**:semver + beta/next tag 识别(本地已是测试版最新时不再误提示); - **已安装技能区** 展示插件自带技能(如 openviking-memory,只读); - **修复**:issue #14 自定义端口 Host 校验 403(`webPort` 优先运行时真实端口);ov.conf 路径转义(非法 JSON 曾致服务挂掉);package.json BOM 清除 + 发布前自动校验;自定义端口下 AI 赋能执行器保留 @tag 版本号; - 验证:test-harness.mjs / test-framework-upgrade.mjs 全部通过;beta.1/beta.2 经真实环境测试(OpenViking 全链路部署闭环、自升级、组件控制)。 ## v0.3.23 — 修复自定义端口 Host 校验 403(issue #14) - **修复**:`webPort(ctx)` 优先读取运行时真实监听端口(`ctx.webServer.port`),不再仅依赖 loader 配置并回退到写死的 3080; - 场景:DSH 以 `--port 3082` 或系统分配端口启动时,`/plugin-console/*` 接口此前误报 403「Host 校验失败」,控制台读不出已安装插件/市场数据; - 验证:`test-harness.mjs`、`test-framework-upgrade.mjs` 全部通过。 ## v0.3.24 — AI 赋能:文档驱动的一键组件部署(未发布,待合并) - **新增「AI 赋能」按钮**(AI 兜底按钮下方):输入 npm 包名 / GitHub 仓库,本地 AI 读取文档自动生成部署计划; - **计划-执行分离**:生成的结构化计划(纯插件 / 服务器组件 / 仅配置)在面板弹窗逐步骤勾选确认后执行,实时回显日志、可中断; - **安全护栏**:命令白名单(curl/git/node/python/gh/npm/ov)、写入路径白名单(profile、~/.dsh、~/.openviking、~/.cache/openviking、D:/OpenVikingData)、破坏性命令拦截、日志密钥脱敏; - **服务器组件自动控制**:识别为 service 类型的组件注册到组件清单,面板自动出现「启动/停止/状态」按钮(`~/.dsh/plugin-console/components.json`); - **内置预案**:OpenViking 等已知组件的部署事实(国内镜像、hf-mirror、中文路径 Unicode 坑、DeepSeek 凭据复用)随计划提示固化,避免 AI 重复踩坑; - 新增接口:`/plugin-console/ai-empower/plan|status|run|cancel`、`/plugin-console/components`、`/plugin-console/component/start|stop|status`。 ## v0.3.22 — 安全加固(PR #13) - **URL 路径分段编码**:`fetchRawText` 对 `repo / branch / file` 做 `encodeURIComponent` 分段编码,防止用户可控参数导致 URL 注入/篡改; - **frontmatter 正则白名单**:`summarizeSkillFrontmatter` 改用固定 `KEY_PATTERNS`,避免动态拼接正则引入注入; - 合并自 PR #13(automated security fix),测试全部通过。 ## v0.3.21 — 清理残余备份/旧子包 - **新增清理按钮**:插件面板最左下角增加「🧹 清理残余备份」悬浮按钮; - **新增接口**:`POST /plugin-console/clean-residuals`,自动删除: - `.old-*` 残余备份目录; - 聚合包未声明的旧 `@linxin666` 子包; - 实测已清理: - `dsh-web-ui-all.old-20260826-190144` - `@linxin666/dsh-client-ui-session-id` - `@linxin666/dsh-skins` - 清理后无残余,服务正常。 ## v0.3.20 — 聚合包更新修复 + 子包自动补齐/禁用 - **更新不再被“已安装跳过”拦截**:更新按钮带 `update: true`,服务端对更新任务不执行已有包快速跳过; - **聚合包子包自动补装**:更新后读取新版聚合包 `dependencies`,缺失子包按声明版本自动安装,版本落后的自动更新; - **解除 bundle 引用缺失阻断**:`verifyPackageBox` 不再因为新版聚合包引用了尚未安装的子包而拒绝更新,安装后由完整性检查补齐/禁用; - **自动禁用兜底**:仍缺失/有问题的子包会在用户补丁层自动禁用,保证 DSH 能正常启动; - 实测:`@linxin666/dsh-web-ui-all` 更新到 0.3.4 后自动补装 `@linxin666/dsh-client-ui-market`,并恢复启用,服务正常。 ## v0.3.19 — Hub 自更新按钮 + monorepo 子包增强 + 安装并行竞速 - **Hub 自更新按钮**:检测到远程 npm 有新版本时,在 GitHub 登录标识左侧显示「下载更新」按钮,点击跳转对应 Release;无更新时自动隐藏; - **monorepo 子包识别**:`packages/examples/plugins/skills/apps/src/lib` 等目录下的子包都会出现在仓库详情,并显示子包路径; - **子包搜索增强**:`/search` 增加 GitHub code search 兜底,可直接搜到 `volcengine/OpenViking` 这类仓库的 `examples/dsh-memory-plugin` 子包; - **安装通道并行竞速**:pnpm / curl 同时尝试,先成功者生效; - **已有包检测**:目标包已在 `node_modules` 且包名匹配时,直接进入启用流程,避免重复下载/EPERM 卡死; - 测试:核心测试 ALL PASS,OpenViking dsh-memory-plugin 实测跳过重复下载并成功启用。 ## v0.3.18 — 安全加固(issue #9) - **写路由跨站防护**:所有非 GET/HEAD 请求校验 `Origin` / `Sec-Fetch-Site`,防止恶意网页跨站驱动安装、重启、升级; - **Host 校验**:防 DNS rebinding,只允许 `127.0.0.1:` / `localhost:` / `[::1]:`; - **恢复完整 TLS 校验**:移除 `rejectUnauthorized: false` 与 `curl --insecure`,代码分发路径不再被 MITM 绕过; - **敏感凭据拆分存储**:自定义搜索源 `Authorization` 头、Gitee clientSecret/token 改存 `plugin-console-sources.secrets.json`(0600),主配置不再明文落盘; - 新增跨站/非法 Host 测试,核心测试 ALL PASS。 ## v0.3.17 — 框架升级 pnpm 超时提升至 15 分钟 - **框架升级脚本超时策略调整**:`Install-Framework` 的 pnpm 总时长硬上限从 **10 分钟提升到 15 分钟**, 避免弱网/大依赖树环境下子进程下载未完成就误判超时; - 同步更新升级脚本日志文案与 README 说明。 ## v0.3.16 — 升级框架版本比较加固 & npm 发布 - **升级目标版本改用数值比较**:服务端 `/framework-upgrade` 不再用字符串不等判断是否有更新, 避免当前为稳定版 `0.1.1` 时被 `next=0.1.1-rc.3` 反向降级;与客户端 `verNum` 逻辑保持一致; - **依赖树修复网络加固**:升级脚本里的框架配套包修复优先走 `npmmirror`,失败回退 `registry.npmjs.org`, 并统一加 `--insecure`,避免本机证书链问题导致依赖修复静默失败; - **自报名一致性校验补全**:`Verify-SelfNameConsistency` 现在真正计算部署目录完整包名(含 `@scope/name`), 旧目录误装新代码时能正确告警,不再只比对代码内字符串; - **测试修复**:`test-framework-upgrade.mjs` / `test-harness.mjs` / `test-skill-toggle.mjs` / `test-suite-install.mjs` 改为直接引用仓库源码,不再依赖已丢失的旧安装路径;三个核心测试 ALL PASS。 ## v0.3.15 — 升级脚本自报名一致性校验(防错装崩溃) - **升级后自报名一致性校验**(`Verify-SelfNameConsistency`):校验面板自身 `export const name` / client.js 注册 id 与部署目录名三者一致,不一致则日志告警 (事故教训:把 @noob-stupid 代码装进 @deepseek-ai 目录 → `loaded without registering` 崩溃); - 端到端验证:旧名部署检查旧名 OK / 检查新名正确判定不匹配(PS5.1 + BOM 兼容)。 ## v0.3.14 — 修复注册 ID 与包名不一致(issue #8) - **client.js**:`__ModuleLoader__.load({ id })` / CSS `tagId` / `dataset.plugin` 3 处旧名 `@deepseek-ai/dsh-plugin-console` → `@noob-stupid/dsh-plugin-console`; DSH 0.1.1-rc.2 严格校验 bundle 必须用真实包名注册(0.3.8 迁移 npm 包名时遗漏), 旧名导致 `loaded without registering` 报错、插件加载失败; - **index.js**:`export const name` 对齐新包名(一致性); - 端到端验证:全新 DSH_HOME + 0 插件原生 profile 安装修复版,6/6 通过。 ## v0.3.13 — 框架一键升级(重大增强) - **升级后自动重链框架配套包**:pnpm 升级只重建 `.pnpm`,顶层 `@deepseek-ai/*` 不自动切换 (旧版 0.1.0-rc.7)→ 框架混版本(如 dsh-llm-deepseek 旧版无 vision 模型)。 升级成功后自动扫描并重建顶层 Junction 指向 `.pnpm` 最新版(旧版备份 `.bak-<版本>`); - **版本数值比较**:修复字符串比较 bug(`0.1.10` 曾被判 < `0.1.9`),位数变化/大版本升级正确; - **PS 5.1 兼容**:升级脚本改用 PS 5.1 兼容语法(原 `? :` 三元运算符在 powershell.exe 解析失败会崩); - 已随框架升级到 0.1.1-rc.2 实测:56 个包重链、0 误处理、服务健康。 ## v0.3.12 — 框架 0.1.x 系列兼容 - **兼容性检测**:DSH 框架升级到 0.1.1-rc.2 后,`SUPPORTED_WEB_APP_PATTERN=/^0\.1\.0-/` 不匹配, 面板误报"不受支持"警告;改为 `/^0\.1\.\d+/` 支持 0.1.x 系列(0.1.0/0.1.1 均 supported, 0.2/1.0 等破坏性大版本仍正确标记不支持)。 ## v0.3.11 — 全面测试修复(8 个 bug) - **严重修复:补装逻辑污染框架**——peerDependencies 误当缺失依赖 + `@deepseek-ai/*` 无版本补装 (npm dist-tags.latest 是远古版如 0.0.1-rc.1)覆盖框架正确版本 → webServer 起不来、服务崩溃; 现在 missingDeps 只统计 dependencies,补装跳过 @deepseek-ai 框架内部包; - **/repo 提速**:rawTextWithFallback 404 确定性快返(.gitmodules/SKILL.md 探测),14s → ~3s; - **/sources 凭据脱敏**:Gitee clientSecret/token 绝不回传、clientId 打码、自定义源 headers 打码; - **保护名单补全**:dsh-attachment 系(attachment-local / client-ui-attachment)禁止开关, 停用附件存储曾致服务崩溃; - 依赖补装误判修复(curl 成功安装却报缺失)。 ## v0.3.10 — README 安装说明同步 npm 发布版 - README 中英:安装命令改为 `dsh plugin add @noob-stupid/dsh-plugin-console`(npm 路径), GitHub 源码安装保留为备选; - marketplace/index.json:自身条目加 `name: @noob-stupid/dsh-plugin-console` 字段; - 社区索引 PR:恢复 zhu1090093659/dsh-web-ui community 索引中的 dsh-plugin-hub 条目(#931)。 ## v0.3.9 — npm 发布 + 框架升级检测修复 - **npm 发布**:包名 `@noob-stupid/dsh-plugin-console`(官方 scope `@deepseek-ai` 无权发布,注册自有 scope); `dsh plugin --profile web add @noob-stupid/dsh-plugin-console` 官方路径安装; - **框架升级检测修复**:客户端版本比较写死 `0.1.0-rc.N`,官方发布 `0.1.1-rc.2` 后解析为 -1 恒不显示升级—— 改为通用 semver 比较(maj/min/pat + rc 数字,正式版视为 rc.∞),支持跨 minor 升级; - **GitHub release 检测与安装通道**:npm 上不存在的包(如面板自身旧名)从 GitHub release 检测/下载安装; - **盒子实验验证**:安装前静态验证(包名/入口/bundle 引用),失败保留旧版本。 ## v0.3.7 — 框架一键升级(pnpm 通道 + 黑框实时进度 + 在线安装) - **框架一键升级**:deepseek-harness 卡片显示「框架升级 → vX」(latest 优先、相同时取 next 渠道), 一键完成:备份配置与框架本体(回滚点)→ 在线安装(服务保持运行、页面不断)→ 版本校验 → 自动重启生效; - **实时进度**:升级弹出 `DSH-Upgrade` 窗口实时显示 pnpm 下载进度;面板进度卡片同步显示等待时长; - **升级保护**:失败自动回滚(robocopy + 升级前校验回滚点)、版本校验防假成功、10 分钟硬超时、 卡死检测(debug 日志无更新自动换 registry)、全局 trap 兜底、15 分钟残留状态清理、 升级卡片终态关闭永久化; - **pnpm 通道**:npm-cli.js 在 schtasks 任务环境启动即卡死(0 字节日志、网络请求都发不出)—— 升级改用 `corepack pnpm`(秒启动)+ 国内源 npmmirror + `dangerouslyAllowAllBuilds` (node-pty/koffi 原生模块正常编译); - **schtasks 环境适配**:cmd /c 原生重定向(PowerShell 重定向全失效)、start 独立窗口显示进度、 运行时解析 bin.js(pnpm Junction 布局)、compat 检测插件目录兜底、客户端升级目标版本比较; - 升级脚本:无引号 /tr、BOM、防桌面端误杀改名、重启任务自删、状态文件残留清理等累计 16+ 修复。 ## v0.3.2 — 套装 bundle 安全策略(紧急修复) - **bundle 自动装配默认跳过**:套装安装不再自动把 bundle 型插件写入 `dsh.profile.bundles`——第三方 bundle 需与当前 DSH 严格兼容(peer 依赖 / client inject / patch 语义),自动装配曾导致启动崩溃(`@dsh-external/dsh-super-injector` 案例);现在跳过并给出官方装配指引(详情面板官方命令 / install.ps1); - **入口校验修复**:`packageEntryExists` 排除 `.d.ts` 与 `package.json` 自身(exports 的 `./package.json` 是合法导出但非运行时入口,曾导致校验恒过); - 预设 / 技能 / 普通插件装配不受影响;测试更新为「injector 安全跳过 + 双预设成功」ALL PASS。 ## v0.3.1 — Suite install + official-install command - **套装安装通道**:submodule 聚合仓库(如 `yjh051108/dsh-routing-suite`)一键装配——clone 套装 → 镜像逐个拉子模块 → 按类型装配:bundle 插件(构建产物缺失时自动拉 Release 预构建 tgz)/ 技能 / **agent 预设**(复制到 `~/.dsh/.agent-presets/`,预设优先于同名 npm 包)/ 普通插件;组件报告逐项展示; - **安装链自动识别套装**:普通安装请求发现根 `.gitmodules` 自动转套装安装(不依赖前端标记); - **详情面板官方安装方式**:套装仓库显示纯命令(`git -c http.sslVerify=false clone --recurse-submodules` + `powershell -File install.ps1`,CMD/PowerShell 通用)+ 一键复制;浏览器直连查看时本地即时拼装; - 「添加到本地」直接启动安装任务(服务端解析包名,黑洞期不再 40s 无反馈);卡片/详情「套装」标签; - `/repo` 元数据 3 秒超时降级(Promise.any 不再等最慢分支 41.5s);SKILL.md 探测加 jsDelivr 快速通道;Release 下载支持 gh 绝对路径候选; - 测试:`test-suite-install.mjs` 端到端(普通请求→自动转套装→injector bundle+双预设 ALL PASS)。 ## v0.3 — Auto-collection CI + Skills support - **自动收录 CI**:`.github/workflows/registry.yml` 每 6 小时重跑 `build-index`(也支持手动触发), 自动提交刷新后的 `marketplace/index.json`——作者打上 `dsh-plugin` / `agent-skills` / `claude-skills` / `dsh-skill` 标签后无需申请即可被收录; - **Skills 支持**: - 索引新增技能段:`build-index.cjs --skills` 合并收录 `agent-skills` ∪ `claude-skills` ∪ `dsh-skill`(最多 300); - 市场搜索框旁「插件 / 技能」双 tab 浏览技能库; - 技能一键安装:`git clone` → 复制 SKILL.md 及资源到 `~/.dsh/skills//`(frontmatter name 优先, SKILL.md 位于根或第一层子目录均可识别),不碰 npm、不写补丁、无需重启; - 类型识别新增「技能」徽标:搜索结果 / 详情 / 索引条目均自动检测 SKILL.md(raw 双通道竞速); - `GET /plugin-console/skills-installed`:已安装技能清单,技能卡片显示「已装」; - `build-index.cjs` 分页改为手动循环(`gh api --paginate` 对 search 单对象响应拼接后非法,CI/本地均可靠)。 ## v0.2 — Static index market - **静态插件索引**:嗅探 `dsh-plugin` topic 仓库生成 `marketplace/index.json`(按 star 500+ 个, jsDelivr CDN 分发)——终端市场浏览**零 GitHub API 调用、零限流**; - **市场秒开**:`/market-index` 路由(CDN + 10 分钟宿主缓存);GitHub 源空查询直接展示全量索引, 分页浏览(每批 50 条); - **自动版本比对**:市场中已安装条目后台自动查 npm `dist-tags.latest`,卡片显示「更新 → vX」一键升级。 ## v0.1 — Marketplace & plugin console foundation - 插件管理面板:一键启用/停用(写用户补丁层,HMR 生效)、第三方插件列表、详情面板、基础设施保护; - 多搜索源市场:GitHub 浏览器直连 + 服务端兜底、Gitee 仓库直装模式、自定义搜索源 (URL 模板 + 请求头认证 + 私网 http)、多源汇总搜索(⊞); - ★ 官方筛选:可 `dsh plugin add` 直装(根包 `dsh.bundle` 官方 / 聚合仓库子包带 bundle); - 软件源管理:多 registry 主→备安装链、私有/内网源、删除保护;Gitee 登录(可选,仅提高限额); - 安装链:配置源 → curl 手动安装(node 网络黑洞兜底)→ git 通道 → EPERM 清理重试 → 子包自动展开(聚合优先)→ 本地 AI 兜底(费用授权弹窗 + 不再提醒 + AI 兜底总开关); - 检测更新:curl 读 npm dist-tags + 子包配套检查(depsOutdated,防版本混搭冲突); - 框架层补丁:`cordis.patch.yml` 解析容错(issue #5,幂等脚本); - 安全:环回限定、自定义源白名单、AI 兜底零费用默认保障。