deepseek-harness-fullstack: Break down full-stack development experience into four callable tools.

前言

在 DSH 里做全栈开发,常见的做法是把整套规范写进常驻提示词,或者装几个各自独立的专家包。前者占用 context,后者每次要切包、拼上下文。redkiller79/deepseek-harness-fullstack 换一个思路:把原本分散在专家包里的三份技能(全栈开发、前端设计工程、浏览器自动化)注册成四个工具,模型需要哪段知识才调用哪段,技能正文不常驻提示词。

这个插件名为「全栈高级开发工程师 · 栈工(Stacker)」,插件标识 dsh-fullstack-engineer,由 redkiller79 维护,在目录站上归入「工作流」分类。包内 package.json 声明版本 1.0.0。

这是什么

一句话定位:一个面向 DeepSeek Harness 的全栈工程师人设插件,把架构、前端、浏览器操作三块经验打包成按需注入的工具。

它解决的问题是:全栈知识面很宽,常驻提示词塞不下也消耗 token;改成工具调用后,只有被调用的技能正文进入上下文,其余内容留在包内,由 focus 参数做子主题索引。

要求 Node.js ≥ 22.14.0,DSH 0.2.x,支持 Windows / macOS / Linux。@deepseek-ai/dsh-tools 由 DSH 宿主提供,包内不重复声明依赖。

核心功能

四个工具,各自覆盖一个面:

工具 覆盖内容
fullstack_guide 架构模式、REST API 设计、认证流程、数据库建模、错误处理、测试策略、上线检查
frontend_studio 设计规则与禁止模式、动效选型(Framer Motion / GSAP / Three.js)、MiniMax 媒体生成脚本、文案框架、性能约束
browser_automation 网页导航、表单填写、截图、数据提取、多会话、CDP 控制
read_skill_asset 读取包内任意文本资产(脚本、HTML 模板、字体清单)

技能正文只在工具被调用时注入上下文,不占常驻提示词。focus 参数可直达子主题,例如 fullstack_guide(focus="auth") 会连同 auth-flow.md 一并返回。对应的包内结构是:

deepseek-harness-fullstack/
├── package.json          # dsh.bundle.patch 指向 patch 层
├── cordis.patch.yml      # 插入 id=dsh-fullstack-engineer 一行,装载 ./index.js
├── index.js              # apply(ctx) → ctx.tools.register(...)
├── agents/
│   └── fullstack-engineer.md   # 人设:全栈高级开发工程师 Stacker
├── skills/
│   ├── fullstack-dev/    # SKILL.md + 9 篇 references
│   ├── frontend-dev/     # SKILL.md + 11 篇 references + 4 个生成脚本 + 模板 + 字体
│   └── browser-use/      # SKILL.md + 2 篇 references
├── avatars/expert.png
└── test/smoke.mjs        # 离线冒烟:mock 掉 dsh-tools 后跑 4 个工具

安装与启用

从仓库安装(README 推荐的方式):

dsh plugin --profile web add github:redkiller79/deepseek-harness-fullstack

本地目录方式,便于先审阅源码再装载:

dsh plugin --profile web add ./deepseek-harness-fullstack

验证是否已写入 profile:

dsh --dump-config

卸载把 add 换成 remove。装完需要重启 profile 才生效。

典型用法

从 README 的能力表可以直接推断出调用方式:需要架构或认证相关的建议时调 fullstack_guide,需要做前端设计选型时调 frontend_studio,需要操作网页时调 browser_automation,需要取包内脚本或模板时调 read_skill_asset。

带子主题的调用最典型:

fullstack_guide(focus="auth")

这条调用会把 auth-flow.md 一起返回,而不是整份全栈规范。同理,frontend_studio 的动效选型会在需要确定动画方案时注入对应内容。

浏览器自动化这边要注意:browser_automation 只注入操作指南,真实浏览器操作由用户本机的 CLI 执行,插件本身不发起网络请求。

离线验证

包内自带冒烟测试,先 mock 掉 @deepseek-ai/dsh-tools,再真实调用 apply(ctx) 与全部工具:

node test/smoke.mjs

断言内容包括:返回内容包含技能正文、focus 能命中参考文档、路径穿越被拒绝。想改包内内容或换 DSH 版本时,先跑这一条能省不少排查时间。

自定义

改名字:改 package.json 的 dsh.displayName / dsh.profession,并同步 agents/*.md 开头的 name。

改标识需要三处一致:package.json 的 dsh.id、cordis.patch.yml 的 id、index.js 导出的 name。对齐版本则看 dsh.verifiedAgainst(package.json 里目前写 0.2.1-rc.5,README 兼容性表写的是 0.2.x),按你实际的 dsh --version 改。加技能的流程是先在 skills/ 下新建目录,再在 index.js 里加一个 defineTool 并在 bundle() 调用处登记。

适用场景与注意

适合两类人:一是想让模型按统一规范做全栈开发、又不想把整套规范常驻在提示词里的 DSH 用户;二是想先审阅源码再决定是否装载的插件开发者。

权限方面要避免误解:插件以当前 DSH 进程的权限运行,第三方插件能读写文件、能联网,收录不等于安全审计。就本插件自身而言,README 声明它不发起任何请求、不执行 shell、不注册 lifecycle 脚本、不读取或存储 token 与 API Key,文件访问限定在包内 skills/,../ 越界被拒,单文件上限 256KB。装之前请自行审阅 index.js(README 标注约 170 行)。许可证是 MIT,技能内容继承自原专家包,字体文件各自遵循其 OFL 授权(见 skills/frontend-dev/canvas-fonts/*-OFL.txt)。

最后提醒一句版本状态:README 明确写了 DSH 0.2.x 处于开发预览期,跨版本可能需要调整,装上之前先看自己的宿主版本是否落在这个区间。

小结

它的价值在于把全栈、前端、浏览器三块经验收敛成四个按需调用的工具,上下文由调用决定,不由常驻提示词决定。如果你已经在用 DSH 做全栈开发,可以先审 index.js 与包内 skills,再用本地目录方式装上跑一次冒烟测试。

目录页:https://www.skillhub.cn/plugins/redkiller79/deepseek-harness-fullstack

仓库:https://github.com/redkiller79/deepseek-harness-fullstack

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye