Skip to content

Releases: EIGHTfs/dsh-skill-scoreboard

Release list

v1.1.1

Choose a tag to compare

@EIGHTfs EIGHTfs released this 17 Oct 07:27

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

Choose a tag to compare

@EIGHTfs EIGHTfs released this 18 Sep 10:30

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 完整字典。