deepseek-harness
deepseek-ai
DeepSeek Harness: Everything is a Plugin.
PROJECT TOPICS
PROJECT README
DeepSeek Harness (DSH) 自定义工具插件:怀旧农具专辑「农忙打工人」+ 新农具表情制作流水线。
内置两个工具:
16 张农具主题原创表情(锄头摸鱼、镰刀割韭菜、水桶跑路……),240×240 透明底投稿成品打包进插件。
本工具的 16 张成品即为 craft_sticker 制作新农具表情的风格模板参考——制作新农具前可先用本工具查看已有成品的风格与排版。
id(tool_01~16)/ keyword(摸鱼、割韭菜、压力大、退退退、上进、捞一把、缓一缓、带上我、好运来、跑路、打气、稳住、勿扰、果断、暴击、解气)/ 农具名选取caption 自定义底部梗文字(与投稿管线同款楷体红字白描边,基于逐像素一致的无文字素材重绘)animated: true → 透明底 GIF 动图(bounce / wiggle / shake / blink)generate_sticker(
id?: 'tool_01'~'tool_16',
keyword?: '摸鱼'|'割韭菜'|'压力大'|'退退退'|'上进'|'捞一把'|'缓一缓'|'带上我'|'好运来'|'跑路'|'打气'|'稳住'|'勿扰'|'果断'|'暴击'|'解气',
caption?: 自定义梗文字(默认保留专辑原文字),
animated?: true → 透明底 GIF,
motion?: 'bounce'|'wiggle'|'shake'|'blink',
size?: 默认 240
)
输入任意农具名,走「农忙打工人」同款搪瓷缸怀旧风流水线,产出 240×240 透明底投稿规格成品。两阶段调用(图片生成由 harness 的 Agent 用自身图片能力完成,插件负责其余全部确定性步骤):
阶段一(备料):
craft_sticker(tool: '背篓', text: '背着KPI')
→ { refPath: 结构参考图, styleAnchorPath: 风格锚点, imagePrompt: 图生图提示词, specPath: 制作单 }
Agent 用图片生成工具按图生图生成白底农具图(参考图依次为 refPath、styleAnchorPath,提示词用 imagePrompt)
阶段二(成品):
craft_sticker(imagePath: '生成图路径', specPath: '阶段一返回的 specPath')
→ { path: 240×240 透明底 PNG, report: 投稿规格自检 }
structure 结构描述即可text 梗文字(≤10 字)、meaning 含义词(≤4 字,微信投稿要求)自动兜底sticker-album/scripts/process.mjs 同款几何:flood-fill 抠图 → 168px 贴底定位 → 楷体红字白描边 → 240×240 透明底 + 规格自检(尺寸/透明/≤500KB/红字渲染)以下演示用户输入新农具「石碾」时的完整流程,Agent 依次调用两个工具:
制作新农具前,先选取 1~2 张专辑成品作为风格参考,确认搪瓷缸怀旧风的视觉调性与排版位置。
generate_sticker(keyword: '摸鱼') → 锄头·摸鱼(tool_01)
generate_sticker(keyword: '退退退') → 簸箕·退退退(tool_04)
产出:240×240 透明底 PNG,供 Agent 理解「农具居中偏上、底部楷体红字白描边、搪瓷缸质感」的风格标准。
传入新农具名与梗文字。目录内 24 件自动出结构参考图;目录外农具需额外传 structure。
目录内农具(如背篓、箩筐、风谷车……):
craft_sticker(tool: '背篓', text: '背着KPI')
→ refPath: 结构参考图 512×512(SVG 栅格化,白底线稿标注部件)
styleAnchorPath: 风格锚点图(锄头定版原图,搪瓷缸质感锚定)
imagePrompt: 图生图提示词(含风格关键词 + 农具名 + 结构描述)
specPath: 制作单 spec.json(阶段二回传)
目录外农具(如石碾):
craft_sticker(
tool: '石碾',
structure: '石制圆盘碾轮,中心立轴,上装木推架,用于碾谷去壳',
text: '慢慢碾'
)
→ 同上四件产出;imagePrompt 会包含用户提供的结构描述
Agent 使用自身的图片生成能力,按图生图方式生成一张白底农具图:
refPath(结构参考图 — 保证农具结构正确)styleAnchorPath(风格锚点 — 保证搪瓷缸质感一致)imagePrompt(阶段一返回)将生成图保存到本地,拿到路径。
传入生成图路径与阶段一的 specPath,插件自动完成全部后期:
craft_sticker(
imagePath: '/path/to/生成图.jpg',
specPath: '/path/to/spec.json' // 阶段一返回,自动带出农具名/梗字/含义词
)
→ path: 240×240 透明底 PNG(投稿规格成品)
report: ['PASS 尺寸 240×240', 'PASS 透明底', 'PASS ≤500KB', 'PASS 楷体红字已渲染']
后期管线自动执行:flood-fill 白底抠图 → 168px 贴底居中定位 → 楷体红字白描边渲染 → 240×240 透明底导出 → 规格自检。同名输入得到几何一致的可投稿成品。
用户:「帮我做一张石碾表情,配"慢慢碾"」
│
├─ ① generate_sticker(keyword: '摸鱼') ← 查看风格模板
│ → 锄头·摸鱼 240×240 透明底 PNG
│
├─ ② craft_sticker(tool: '石碾', structure: '...', text: '慢慢碾') ← 阶段一备料
│ → refPath + styleAnchorPath + imagePrompt + specPath
│
├─ ③ Agent 图生图(refPath + styleAnchorPath + imagePrompt) ← 生成白底图
│ → /workspace/memes/gen_石碾.jpg
│
└─ ④ craft_sticker(imagePath: '...', specPath: '...') ← 阶段二成品
→ 240×240 透明底 PNG + 自检全 PASS
# 1. 安装(pnpm 转发)
dsh plugin --profile web add /path/to/dsh-plugin-office-farmer
# 2. 在 $DSH_HOME/profiles/web/cordis.patch.yml 注册
# - insert:
# - id: dsh-plugin-office-farmer
# name: 'dsh-plugin-office-farmer'
# 3. 重启
dsh web
| 依赖 | 版本 |
|---|---|
| Node.js | >= 18(sharp 依赖要求) |
| @deepseek-ai/cordis | ^4.0.1 |
| @deepseek-ai/dsh-tools | ^0.1.0-rc.6 |
| 插件版本 | 0.2.0 |
npm install # sharp + gifenc(如遇 ~/.npm 权限问题:--cache ./.npm-cache)
node test.mjs # 冒烟测试(专辑/craft 流水线,44 项)
node scripts/build-cutouts.mjs # 从 sticker-album/raw 重建无文字素材并验证逐像素一致
node scripts/build-style-anchor.mjs # 从 sticker-album/raw/hoe_c1.jpg 重建风格锚点
lib/
index.js 插件入口:注册两个工具
album.js generate_sticker 专辑引擎(成品/换字/GIF)
craft.js craft_sticker 制作流水线(参考图/提示词/抠图/成品/自检)
catalog.js 24 件农具目录(结构 SVG + 结构描述 + 示例梗)
assets/
album/ 16 张投稿成品 + 无文字素材 cutouts/
style-anchor/ 图生图风格锚点(锄头定版原图)
apply(ctx) 导出)+ ctx.tools.register(defineTool({...})),需声明规范化 output { schema, render }sticker-album/scripts/process.mjs 设计约束),无文字素材与投稿成品逐像素一致CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: 无有效分类标签。