jonnycafong
dsh-plugin-office-farmer
No description
- Stars
- 1
- Language
- JavaScript
- Created
- Aug 16, 2026
- Updated
- Aug 17, 2026
Introduction
办公室农民微信表情插件(dsh-plugin-office-farmer)
DeepSeek Harness (DSH) 自定义工具插件:怀旧农具专辑「农忙打工人」+ 新农具表情制作流水线。
内置两个工具:
generate_sticker — 微信表情专辑「农忙打工人」(风格模板)
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
)
craft_sticker — 新农具表情制作流水线
输入任意农具名,走「农忙打工人」同款搪瓷缸怀旧风流水线,产出 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: 投稿规格自检 }
- 农具目录 24 件(16 专辑件 + 背篓/箩筐/风谷车/碌碡/耧车/辘轳/竹筛/水车),目录内自动出结构参考图;目录外农具传
structure结构描述即可 text梗文字(≤10 字)、meaning含义词(≤4 字,微信投稿要求)自动兜底- 后期与投稿管线
sticker-album/scripts/process.mjs同款几何:flood-fill 抠图 → 168px 贴底定位 → 楷体红字白描边 → 240×240 透明底 + 规格自检(尺寸/透明/≤500KB/红字渲染)
使用步骤:用模板制作新农具表情
以下演示用户输入新农具「石碾」时的完整流程,Agent 依次调用两个工具:
第 1 步:用 generate_sticker 查看风格模板
制作新农具前,先选取 1~2 张专辑成品作为风格参考,确认搪瓷缸怀旧风的视觉调性与排版位置。
generate_sticker(keyword: '摸鱼') → 锄头·摸鱼(tool_01)
generate_sticker(keyword: '退退退') → 簸箕·退退退(tool_04)
产出:240×240 透明底 PNG,供 Agent 理解「农具居中偏上、底部楷体红字白描边、搪瓷缸质感」的风格标准。
第 2 步:craft_sticker 阶段一 — 备料
传入新农具名与梗文字。目录内 24 件自动出结构参考图;目录外农具需额外传 structure。
目录内农具(如背篓、箩筐、风谷车……):
craft_sticker(tool: '背篓', text: '背着KPI')
→ refPath: 结构参考图 512×512(SVG 栅格化,白底线稿标注部件)
styleAnchorPath: 风格锚点图(锄头定版原图,搪瓷缸质感锚定)
imagePrompt: 图生图提示词(含风格关键词 + 农具名 + 结构描述)
specPath: 制作单 spec.json(阶段二回传)
目录外农具(如石碾):
craft_sticker(
tool: '石碾',
structure: '石制圆盘碾轮,中心立轴,上装木推架,用于碾谷去壳',
text: '慢慢碾'
)
→ 同上四件产出;imagePrompt 会包含用户提供的结构描述
第 3 步:Agent 图生图生成白底农具图
Agent 使用自身的图片生成能力,按图生图方式生成一张白底农具图:
- 参考图 1:
refPath(结构参考图 — 保证农具结构正确) - 参考图 2:
styleAnchorPath(风格锚点 — 保证搪瓷缸质感一致) - 提示词:
imagePrompt(阶段一返回) - 要求:白底、农具居中、正面视角、无文字
将生成图保存到本地,拿到路径。
第 4 步:craft_sticker 阶段二 — 成品化
传入生成图路径与阶段一的 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
安装到 DSH profile
# 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/ 图生图风格锚点(锄头定版原图)
技术要点
- 插件 = Cordis 插件(
apply(ctx)导出)+ctx.tools.register(defineTool({...})),需声明规范化output { schema, render } - 渲染管线:SVG 帧 → sharp 栅格化 → gifenc 编码 GIF(透明底:调色板索引 0 保留为透明色)
- 文字替换几何:工具内容与文字区严格分离(
sticker-album/scripts/process.mjs设计约束),无文字素材与投稿成品逐像素一致 - craft 两阶段设计:图片生成为非确定性步骤、由 Agent 执行;参考图渲染/抠图/排版/自检全部确定性、由插件执行——同名输入得到几何一致的可投稿成品