一站式完成插件创建、调试、验证与发布
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
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 70 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
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。
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
oneinitAI/dsh-thunderforge
一站式完成插件创建、调试、验证与发布
相关插件 · 开发 / 工程
隐私简历生成器reactive-resume/reactive-resume
Reactive Resume 已迁至 GitHub 上的…
★ 45,210已汉化MCP
71.7
长时任务执行闭环AMAP-ML/LongHorizon-Harness
面向 Computer-Use Agent 的 Loop Engineering
★ 1,764已汉化DSH
70.5
多代理编排运行时Enderfga/claw-orchestrator
面向编程智能体的运行时。把 Claude Code、Codex、Antigravity、Grok…
★ 586已汉化MCP
69.4
记忆进化插件csyangwen/dsh-memory-evolve
dsh-memory-evolve 使用场景指南
★ 461已汉化DSH
67.9
原生编程智能体paean-ai/deeptide
由 DeepSeek 打造,为 DeepSeek 而生。
★ 1,107已汉化DSH
67.7
多引擎接力台emo-xiaoyu/harness-mix
macOS/Linux 已加入源码构建与启动适配;目标系统的完整桌面验收仍需在对应机器执行。安装方式、Linux…
★ 419已汉化DSH
66.8
这是你的仓库?认领条目