🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

插件锻造炉 oneinitAI/dsh-thunderforge

DeepSeek Harness
oneinitAI70 天前有提交已提供中文文档扫描:含敏感能力

一站式完成插件创建、调试、验证与发布

28.4/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/9/18 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add oneinitAI/dsh-thunderforge
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · dev
装得上吗
本站已真实安装成功
非静态推断
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 70 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件
查看扫描证据(共 49 处,展示前 43 条)
  • 读取本地文件
    src/capture/index.js:92
    if (existsSync(legacyDir)) {
  • 读取本地文件
    src/skills/index.js:68
    const { name, description, body } = splitFrontmatter(readFileSync(join(root, 'SKILL.md'), 'utf8'))
  • 读取本地文件
    src/scaffold/index.js:27
    await readdir(path)
  • 写入本地文件
    src/scaffold/index.js:37
    await mkdir(dirname(target), { recursive: true })
  • 写入本地文件
    src/scaffold/index.js:38
    await writeFile(target, body, 'utf8')
  • 执行外部命令来自配置/变量
    src/scaffold/index.js:47
    const child = spawn(process.execPath, ['--test'], {
  • 读取本地文件
    src/scaffold/index.js:168
    rootStat = await stat(root)
  • 读取本地文件
    src/scaffold/index.js:178
    const manifest = JSON.parse(await readFile(join(root, 'thunderforge.debug.json'), 'utf8'))
  • 读取本地文件
    src/scaffold/index.js:191
    const pkg = JSON.parse(await readFile(join(root, 'package.json'), 'utf8'))
  • 读取本地文件
    src/scaffold/index.js:207
    await stat(join(root, relative))
  • 读取本地文件
    src/scaffold/index.js:215
    const manifest = JSON.parse(await readFile(join(root, 'thunderforge.debug.json'), 'utf8'))
  • 读取本地文件
    src/debugger/index.js:26
    for (const workspace of await readdir(root, { withFileTypes: true })) {
  • 读取本地文件
    src/debugger/index.js:29
    for (const session of await readdir(workspaceDir, { withFileTypes: true })) {
  • 读取本地文件
    src/debugger/index.js:33
    const info = await stat(file)
  • 读取本地文件
    src/debugger/index.js:57
    return JSON.parse(await readFile(join(captureDir, file), 'utf8'))
  • 执行外部命令固定命令
    src/profile/index.js:39
    ? spawn('cmd.exe', ['/d', '/s', '/c', command, ...args], { cwd, stdio: ['ignore', 'pipe', 'pipe'] })
  • 执行外部命令来自配置/变量
    src/profile/index.js:40
    : spawn(command, args, { cwd, stdio: ['ignore', 'pipe', 'pipe'] })
  • 读取本地文件
    src/release/index.js:40
    pkg = JSON.parse(await readFile(join(root, 'package.json'), 'utf8'))
  • 读取本地文件
    src/release/index.js:54
    entries = await readdir(dir, { withFileTypes: true })
  • 读取本地文件
    src/release/index.js:65
    text = await readFile(path, 'utf8')
  • 读取本地文件
    src/release/index.js:83
    pkg = JSON.parse(await readFile(join(root, 'package.json'), 'utf8'))
  • 读取本地文件
    src/release/index.js:89
    const changelog = await readFile(join(root, 'CHANGELOG.md'), 'utf8')
  • 读取本地文件
    src/release/index.js:131
    rootStat = await stat(root)
  • 写入本地文件
    src/capture/core.js:165
    this.dirReady ??= mkdir(this.config.dir, { recursive: true }).catch((err) => {
  • 写入本地文件
    src/capture/core.js:201
    await writeFile(join(this.config.dir, file), body, 'utf8')
  • 写入本地文件
    src/capture/core.js:202
    await appendFile(
  • 删除本地文件
    src/capture/core.js:246
    await Promise.allSettled(drop.map((item) => rm(join(this.config.dir, item.file), { force: true })))
  • 读取本地文件
    src/debugger/align.js:13
    const text = await readFile(join(captureDir, 'index.jsonl'), 'utf8')
  • 读取本地文件
    src/debugger/session-log.js:110
    const buffer = Buffer.isBuffer(file) ? file : readFileSync(file)
  • 读取本地文件
    src/profile/store.js:69
    if (!existsSync(dir)) return []
  • 读取本地文件
    src/profile/store.js:70
    return readdirSync(dir, { withFileTypes: true })
  • 读取本地文件
    src/profile/store.js:73
    .filter((name) => existsSync(join(dir, name, 'package.json')))
  • 读取本地文件
    src/profile/store.js:78
    return existsSync(join(profileDir(name), 'package.json'))
  • 读取本地文件
    src/profile/store.js:93
    if (!existsSync(pkgPath)) {
  • 读取本地文件
    src/profile/store.js:96
    const pkg = JSON.parse(readFileSync(pkgPath, 'utf8'))
  • 写入本地文件
    src/profile/store.js:113
    mkdirSync(dir, { recursive: true })
  • 写入本地文件
    src/profile/store.js:120
    writeFileSync(join(dir, 'package.json'), `${JSON.stringify(pkg, null, 2)}\n`)
  • 写入本地文件
    src/profile/store.js:121
    writeFileSync(join(dir, 'cordis.yml'), CORDIS_YML)
  • 写入本地文件
    src/profile/store.js:122
    writeFileSync(join(dir, 'pnpm-workspace.yaml'), PNPM_WORKSPACE)
  • 写入本地文件
    src/profile/store.js:124
    writeFileSync(join(dir, 'cordis.patch.yml'), profile.patch)
  • 写入本地文件
    src/profile/store.js:145
    writeFileSync(pkgPath, `${JSON.stringify(pkg, null, 2)}\n`)
  • 删除本地文件递归
    src/profile/store.js:151
    rmSync(profileDir(name), { recursive: true, force: true })
  • 读取本地文件
    skills/pitfalls/index.js:46
    const { description, body } = splitFrontmatter(readFileSync(skillPath, 'utf8'))
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/dsh-tools@deepseek-ai/schemastery
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 插件创建
  • 插件调试
  • 插件验证与发布

README

由 DeepSeek 最新模型翻译生成
⚡ ThunderForge · 宇宙无敌雷霆霹雳炫光 励志做 0 元以内最 nb 的 DSH 插件\* 注*:「0 元以内最 nb 的 DSH 插件」为产品目标,非质量承诺,亦不暗示"已 nb""正在 nb"或"即将 nb"。"0 元以内"指本插件定价区间,不代表 0.01 元档位存在竞品。解释权归雷雨天气。 一站式 DeepSeek Harness (DSH) 插件开发套件 · 单一 Bundle 中文 · English CI Tests License: MIT Node dsh npm 创建 → 开发 → 调试 → 环境验证 → 发布,dsh plugin add 一次,锻造炉全开 ⚡ 梦想还是要有的,万一雷霆劈中你了呢 🔥 五大锻造引擎 | 引擎 | 形态 | 一句话 | | ⚡ thunderforge-capture | 插件 | LLM 载荷捕获:透明代理 + 密钥掩码 + 轮转 + index.jsonl 索引流(清洁室自研) | | 🧠 thunderforge-skills | 技能 ×4 | 四层知识库:入口索引 + 架构标准 + 坑点手册 + 画像自适应表达(实时评估用户水平,动态匹配回答深度) | | 🔨 thunderforge-scaffold | 模型工具 | 对话式脚手架:三类零依赖模板,生成即冒烟 |
展开完整文档(README 剩余 1 节)
⚡ ThunderForge · 宇宙无敌雷霆霹雳炫光

励志做

0 元以内最 nb 的 DSH 插件\*

注*:「0 元以内最 nb 的 DSH 插件」为产品目标,非质量承诺,亦不暗示"已 nb""正在 nb"或"即将 nb"。"0 元以内"指本插件定价区间,不代表 0.01 元档位存在竞品。解释权归雷雨天气。

一站式 DeepSeek Harness (DSH) 插件开发套件 · 单一 Bundle

中文 · English

CI
Tests
License: MIT
Node
dsh
npm

创建 → 开发 → 调试 → 环境验证 → 发布,dsh plugin add 一次,锻造炉全开 ⚡

梦想还是要有的,万一雷霆劈中你了呢

🔥 五大锻造引擎

| 引擎 | 形态 | 一句话 |
| ⚡ thunderforge-capture | 插件 | LLM 载荷捕获:透明代理 + 密钥掩码 + 轮转 + index.jsonl 索引流(清洁室自研) |
| 🧠 thunderforge-skills | 技能 ×4 | 四层知识库:入口索引 + 架构标准 + 坑点手册 + 画像自适应表达(实时评估用户水平,动态匹配回答深度) |
| 🔨 thunderforge-scaffold | 模型工具 | 对话式脚手架:三类零依赖模板,生成即冒烟 |
| 🔍 thunderforge-debugger | 模型工具 | 双数据源轨迹瀑布:会话日志 × capture 载荷按毫秒对齐 |
| 🧰 thunderforge-profile | 模型工具 | profile 管理 + 一键 dev preset(只新建、绝不碰既有环境) |

🗣️ dsh-buddy 画像自适应表达(独立项目 oneinitAI/dsh-buddy):agent 从对话中被动观察,实时构建用户画像——熟练度、偏好、领域差异(十年后端也可能是 DSH 一年级)、当前状态——并按画像现场生成合适深度的回答;画像每轮更新,用户开始说术语就立刻升级表达。没有预设话术、没有术语对照表;拿不准时宁可略高估。轻梗每会话至多一句(first day to vibecoding: who is JSON?)。

🚀 安装

从 npm(推荐)
dsh plugin --profile add dsh-thunderforge
或从 GitHub
dsh plugin --profile add github:oneinitAI/dsh-thunderforge
或本地目录(开发者)
dsh plugin --profile add /path/to/dsh-thunderforge

装完重启对应应用(profile 在启动时组合;web 即重启 dsh web),然后验证:

dsh --profile --dump-config # 应出现 "# == dsh-thunderforge" 层

移除随时可逆:dsh plugin --profile remove dsh-thunderforge

⚠️ 层序提示(capture 生效的关键):装进已有 profile 后,请把 dsh-thunderforge 挪到该 profile package.json 的 dsh.profile.bundles 数组最前(先于 @deepseek-ai/dsh-base)——capture 靠包装适配器注册工作,晚于 base 内适配器行应用就会静默落空。经 thunderforge_profile 生成的 dev preset 已自动排好。

装好之后,对你的 agent 说:

帮我建一个带 webui 的 DSH 插件 —— 它会调用 thunderforge_scaffold,骨架自带调试埋点与冒烟测试,生成即验证。

一键干净开发环境(被测插件装进隔离 profile):

你: 帮我生成一个 dev preset,短名 demo
AI: (thunderforge_profile) → tf-dev-demo 已就绪
dsh plugin --profile tf-dev-demo add && dsh --profile tf-dev-demo

🛠️ 锻造之旅

创建 ────► 开发 ────► 调试 ───────► 环境验证 ────► 发布脚手架 技能 捕获 + 开发预设 CI 模板随生成即 三层知识 调试器 干净 profile 骨架产出冒烟 ✅ 按需加载 双源瀑布 ⚡ 只新建不动旧 ✅

- 每步产物是下一步的输入:骨架的 thunderforge.debug.json 埋点声明 capture 索引流与事件前缀,debugger 直接消费
- 真机验收:dsh 0.1.1-rc.2 CLI plugin add + --dump-config 五行全部加载 ✅(含一个被真机抓住并修复的 patch 格式 bug)
- 上手示例:examples/ 内含真实由 scaffold 生成的最小插件骨架

📦 状态

- ✅ node --test 31/31(含真机契约测试);三模板生成即冒烟
- ✅ 真机验收:dsh plugin add + --dump-config 全行加载(含对真实 boot 报错的修复,见 CHANGELOG)
- 🙋 live 端到端(对话 → 工具调用 → capture 落盘 → 瀑布对齐)欢迎你亲手试:dsh --profile "调用 thunderforge_scaffold ..."

📚 文档索引

| 文档 | 内容 |
| HANDOFF | 交接文档:项目全貌、架构约束、发布流程、遗留任务(接手人先读) |
| DEVELOPMENT | 开发文档:架构决策 + 代码地图 + 测试哲学 + 技能写作规范(贡献者深度阅读) |
| ROADMAP | 开发路线图:改进与拓展候选(P0 真机坑 / P1 闭环缺口 / P2 拓展) |
| PRD | 分阶段产品计划与验收记录 |
| RELEASE | 发布清单与一键发布 |
| NETWORK-NOTES | 网络问题手册(443 重置/TLS/大包/peer 警告) |
| CONFIGURATION | 配置指南:六引擎与 buddy 的全部配置键、覆盖方法、常见场景 |
| CHANGELOG | 版本变更记录(含真 bug 因果) |

🙏 致谢与上游协议(必读)

ThunderForge 站在社区巨人的肩膀上,尊重并严格遵守每一个上游仓库的开源协议:

| 上游项目 | 协议 | 在 ThunderForge 中的角色 |
| deepseek-harness | MIT | 运行底座与官方规范依据 |
| dsh-plugin-dev-skills | MIT | 原样 vendor → skills/arch-standard/(含其协议原文) |
| dsh-plugin-guide | Apache-2.0 | 原样 vendor → skills/pitfalls/(协议与 NOTICE 原文保留) |
| dsh-replay | MIT | 原样 vendor → src/debugger/session-log.js(文件头标注来源) |
| dshp | MIT | 已吸收并入 → src/profile/store.js 等自有模块(MIT 归属保留于文件头与台账) |
| dsh-trajectory-debug | MIT | 概念参考(未 vendor 代码),台账已记 |

- 全部 vendor 文件未修改实现,仅前置来源声明头;各上游许可证原文随包分发(见 LICENSES/)
- Apache-2.0 组件按其协议要求文件级保留原协议与 NOTICE
- 生态中存在一个无许可证的同类捕获组件,ThunderForge 明确不予引入,其功能为清洁室自研——未使用、未参考其任何代码

📄 许可证

MIT © 2026 ThunderForge Contributors

本项目按"原样"提供;对上游组件的权利主张始终以各上游协议原文为准。完整台账见 LICENSES/README.md。
预览分享卡片长什么样 ↓oneinitAI/dsh-thunderforge
分享 · DeepSeek Harness Hub
oneinitAI/dsh-thunderforge

一站式完成插件创建、调试、验证与发布

这是你的仓库?认领条目

回到顶部