Add DSH Plugin Support - #4
Conversation
- rewrite GitHub install section: warn users about 3-step pnpm flow upfront - show actual error output so users know what to expect - clarify pnpm-workspace.yaml already has base content, append only - add cleanup guidance: failed install leaves no residue, remove is not needed - fix update section: plugin update fails on SHA change, use add flow instead - add Windows file:// URL and @types/node to troubleshooting - add overlay.yml as separate file from cordis.patch.yml - update install scripts to two-phase: capture pnpm error, extract allowBuilds key, retry
- delete install-dsh.sh and install-dsh.bat - remove install script section from README - add single-quote requirement for allowBuilds key in pnpm-workspace.yaml - add warning not to copy pnpm error comment lines into yaml
Review 意见结论:实现质量很高,我实际跑通了,改掉下面两点就可以合。 感谢这个贡献 —— 尤其是中途自己发现安装脚本没用又主动删掉,这种事很少见。 我实际跑过了不是只看代码,是把你的分支拉下来真跑了一遍:
需要修改1. 这个 PR 带进来一整套 npm 工具链,但 2. 编译产物会悄悄和源码脱节 现在 顺带说个能让你在「已知限制」里列的那堆 pnpm 麻烦直接消失的做法:pnpm 之所以要你做 代价是编译不再自动发生,所以要加一道 CI 兜底: - name: Check lib/ is in sync with src/
run: |
npm ci
npx tsc -p tsconfig.json
git diff --exit-code lib/这两步建议一起做。如果你更想保留 建议改进(不阻塞)
两件不用你操心的事协议:你在 CI 红灯:这三个红叉和你无关,main 分支从 7 月 9 号起就一直是红的,是脚手架生成的配置通不过自己的校验器。修复见 #6,合了之后你 rebase 一下就绿。别为这个动任何代码。 |
- add node_modules/ to .gitignore - remove prepare script from package.json (eliminates pnpm allowBuilds hassle) - add check-lib-sync CI job to catch stale lib/ output - auto-extract description from SKILL.md frontmatter in get() - add DSH section to main README - add CHANGELOG entry - remove unused publishConfig - rebuild lib/ to match src/
上一版把完整描述挪进 get(),list() 只留占位符。但 list() 返回的 candidate 才是模型路由用的目录(dsh-skill 的 snapshot() 走 toSummary(entry.candidate)), get() 要等模型选中之后才调用 —— 结果全部触发关键词都不再进入路由。 同时 parseFrontmatter 的块标量分支带了 (?=\n\w|\n---) 前瞻,要求 description 后面还有内容;而本 skill 的 description 正是最后一个字段,闭合 --- 又已被外层 正则消费,该分支永不匹配,回落到 (.+) 只抓到 ">" 一个字符。 - list() 改为 async 并读取 frontmatter,描述与 get() 同源 - 块标量分支改为按缩进行收集,支持 > 和 |,不依赖后续字段 - list() 读不到 SKILL.md 时降级为兜底描述,避免整个 skill 目录塌掉; get() 仍然抛错,因为加载一个没有正文的 skill 应当失败 - 重新编译 lib/ 验证:list() 与 get() 返回的描述均与 SKILL.md 原文逐字一致(225 字符)。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
你这一轮改得很到位 —— 我列的两条阻塞项加四条不阻塞的建议全办了, 不过「skill 描述只维护一份」那条改岔了,而且这个锅在我:我当时说「顺手把 frontmatter 里的描述也解析出来」,没说清它必须留在 问题 1:描述不能挪进
|
新用户此前卡在第一步——原文只说「把仓库目录交给你的 AI Agent」, 没有一条可复制的命令;PR Gridea-Pro#4 之后根目录多了一层 TS 构建产物, 只用 Skill 的人也无从判断哪些文件可以忽略。 - 「怎么用」第 1 步给出 git clone 命令,并说明无需编译和预装依赖 - 补充生成的主题往哪放(站点目录 themes/,附 customConfig 需重启才生效的提醒) - 目录结构标注 Skill 本体 vs DSH 插件封装,后者明确标为可忽略 - DSH 一句话扩成一节,讲清谁需要、谁可以跳过 - 开发环境说明 jinja2 只有 render_test 需要,且会自动安装 - SKILL.md 描述去掉会过时的「5 步 + 16 条」(实为 6 步,规则按引擎分组) - 散文标点对齐仓库全角惯例(prompt 示例代码块内保持原样) Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
变更说明
将 theme-builder-skill 作为 DeepSeek Harness 插件运行,无需改动原有 Skill 内容,通过薄包装层注册 skill provider。
新增文件
package.jsondsh.bundle、peer 依赖、prepare构建脚本cordis.patch.ymldsh plugin add时引用tsconfig.jsonoverlay.yml--patch模式用src/index.tsgridea-theme-builderskill provider,设置 resourceBase 指向 bundle 目录src/README.md实现原理
src/index.ts基于 DSH 官方skill-badge插件模式:ctx.skills.registerProvider()注册静态 skill providerresourceBase设为 bundle 根目录,模型通过<skill_resources>获取路径后可解析scripts/、references/、assets/的相对路径get()运行时读取 SKILL.md,stripFrontmatter()去掉 YAML 头部两种使用方式
--patch):开发调试用,tsx 直接跑 .ts,改代码即生效plugin add):分发用,pnpm 自动拉取编译,需处理allowBuilds构建授权不改动的部分
SKILL.md、references/、scripts/、assets/、requirements.txt、主README.md全部不变,原有 Claude Skill 用法不受影响。已知限制
allowBuilds授权(pnpm ≥10 安全策略)allowBuildskey 含 commit SHA,每次推送后需更新