Repository navigation
Releases: EIGHTfs/dsh-skill-scoreboard
Release list
v1.1.1
dsh-skill-scoreboard v1.1.1
DSH skill 使用记分板:同时记录「按会话去重」与「每次加载」两种次数,设置页三选项卡(Skill 排行 / 会话榜 / 管理)。
本版内容
分片文件去序号(按 dsh-clientjs-split-build 规则「分片命名禁止用序号」)
lib/client.js 由 lib/client-parts/** 分片经 PART_ORDER 拼接生成。原分片名带数字前缀/后缀,与实际拼接顺序无关(顺序只由 PART_ORDER 决定),且插入新片需重排全部序号、产生纯 rename 的 diff 噪音。现改为语义名:
| 旧名 | 新名 |
|---|---|
00-entry.js |
entry.js |
01-apply.js |
apply.js |
02-i18n.js |
i18n.js |
04-utils.js |
utils.js |
05-page-1.js |
page-sort.js |
05-page-2.js |
page-view.js |
05-page-3.js |
page.js |
06-loader-2.js |
io.js |
07-export.js |
export.js |
9 片改名(git mv 保留历史),PART_ORDER 与脚本入口引用同步更新。
验证:改名前后构建产物 md5 完全一致 —— 7f1e9e619d6c0c9f40306501a12f65ae(1071 行),证明改名对产物零影响;build-client --check 幂等门禁通过;仓库内零残留序号引用。
附件
dsh-skill-scoreboard-1.1.1-source.zip—— 完整源码(57 项,含 19 个分片)dsh-skill-scoreboard-1.1.1.tgz—— npm 安装包(32 项,version 1.1.1)
安装
pnpm add dsh-skill-scoreboard
零运行时依赖(@deepseek-ai/dsh-llm、@deepseek-ai/schemastery 由宿主提供)。
v1.0.4
dsh-skill-scoreboard v1.0.4
DSH skill 使用记分板:同时记录「按会话去重」与「每次加载」两种次数,设置页三选项卡(Skill 排行 / 会话榜 / 管理)。
本版修复
修复「设置里有入口、点进去一片空白」
dictListeners / subscribeDict / loadDict 三个外置 i18n 助手此前被定义在 createModule factory 内部,而消费它们的 ScoreboardPage 是顶层函数。组件在 useEffect 里调用 subscribeDict 时抛:
ReferenceError: subscribeDict is not defined
React 随即卸载整棵树 —— 表现为设置面板点进去空白。宿主日志、接口、bundle 构建全部正常,属静默失败,排查时极易误判为宿主或版本问题。三个助手已移回顶层作用域(与 L / NS 同级)。
附加修复:client.js 整体包 IIFE(消除「Failed to load plugins」隐患)
机制:手写插件的 client.js 自带自注册 window.__ModuleLoader__.load 调用时,client-modules 聚合会原样拼接整个文件,顶层 let/const/function 因此全部落进聚合文件的同一个顶层作用域。本文件顶层原有 55 个声明,与同聚合的 dsh-session-migrate 有 10 个重名:
createModule / tr / ensureCss / cssText / dictListeners / subscribeDict /
localeCtx / activeLocaleId / FETCH_TIMEOUT_MS / SETTINGS_SECTION_ORDER
顶层 let 重名是解析期 SyntaxError(不是运行时覆盖),会让整个聚合脚本失效 —— 浏览器表现为整个插件列表加载不出来,而报错串里只有 @deepseek-ai/dsh-* 官方插件名(它们只是被连坐,真凶是手写插件)。
为何此前未暴露:dsh-session-migrate 已单方面包了 IIFE 把冲突挡掉,本插件是唯一还没隔离的裸插件。一旦出现第三个手写插件、或对方去掉 IIFE,聚合立刻全废。
修复:整体包 IIFE(首行 (() => {、末尾 })();),顶层声明归零,与官方 factory 闭包效果一致,零改名。
验证:
vm作用域实测 11 个关键声明零泄漏到全局- 与
dsh-session-migrate拼接后node --check与new Function双双通过 - 反证:去掉对方 IIFE 即复现
SyntaxError: Identifier 'SETTINGS_SECTION_ORDER' has already been declared - 真实 React 环境下四步全过:模块注册 / factory / apply / 组件渲染
其它改动
- 预览页改用真实宿主渲染语义:
assets/preview-gen.mjs的slots垫片此前把register第二参当「渲染函数」直接调用(__PAGE_RENDER__()),而真实宿主把它当 React 组件交给 reconciler —— 语义不同,这正是旧预览页长期「看起来正常」、掩盖了本次缺陷的原因。现按真实语义渲染,并外套类错误边界(getDerivedStateFromError/componentDidCatch)+ mount 后空容器检测,抛错时打印堆栈而非留白;三选项卡、分页、会话展开、导入导出等交互保持可点。 - 预览页 i18n 字典请求修复:垫片假
fetch的分支顺序有误 ——/api/skill-scoreboard/i18n同样以/api/skill-scoreboard为前缀,被排在后面的通用快照分支先命中,字典请求拿到的是记分快照而非字典,于是L只剩导航兜底的两个 key,预览页到处显示settings.totalBadge这类原始 key 而非译文。已把 i18n 分支提到最前。 - 生成器去本机私有路径:原先写死一个开发者本机绝对路径,他人 clone 后无法运行。改为自动定位(
DSH_ROOT→DSH_HOME同级/上级 → 逐级上溯),支持REACT_UMD_DIR/REACT_DOM_UMD_DIR覆盖。 - 合并预览页:移除
assets/repro-host.{mjs,html}(能力已并入preview-gen,避免两份语义不一致的预览页)。
附件
dsh-skill-scoreboard-1.0.4-source.zip—— 完整源码(33 项,含assets/、test/)dsh-skill-scoreboard-1.0.4.tgz—— npm 安装包(按files白名单,13 个文件)
安装
pnpm add dsh-skill-scoreboard
零运行时依赖(@deepseek-ai/dsh-llm、@deepseek-ai/schemastery 由宿主提供)。
验证:30 断言全过;宿主线上 bundle 作用域检查通过,原崩溃点无 ReferenceError;预览页 /api/skill-scoreboard/i18n 返回 zh(51 key)/en 完整字典。