deepseek-harness
deepseek-ai
DeepSeek Harness: Everything is a Plugin.
PROJECT TOPICS
INSTALL REFERENCE
dsh plugin --profile web add github:Socialist-Sister/dsh-survival-mode
该命令指向仓库当前默认分支;尚无绑定当前 commit 的完整验证结果。
PROJECT README
DeepSeek Harness 生存模式
Minecraft 生存规则 × 真实编码工作——规则硬结算、死亡真实发生的娱乐性 Agent 预设。
engine tool-survival hud agent-preset
你在 DeepSeek Harness 里照常写代码、查资料、做交付——同时活在一个 Minecraft 生存世界里:每写一个文件掉 1 饥饿,深夜干活会刷怪,没有铁镐连
subagent都调用不了。饿了得吃,夜了得防,死了背包全掉、经验减半,工作区文件回退到你的重生点——每个会话都是独立存档。
所有规则由引擎硬结算(不是人设演戏),所有游戏概念对齐原版 Minecraft 生存模式,所有插件机制遵循官方插件规范(与 dsh-collaboration 套件同构)。
套件版本 0.2.0:engine 0.19.0 · tool-survival 0.6.3 · hud 0.1.3 · 安装指南 · GitHub Releases
核心特性
tools/pre-execute 实时结算,不是人设演戏survival_status 查看完整状态与配方书;完成任务会掉落材料,survival_craft 合成,survival_eat 吃东西,survival_sleep 睡觉(并更新文件重生点)。一句话玩法:工作即挖矿,挖矿得材料,材料合成物品,物品解锁能力与防御;饿了吃、夜了防、够了合成;死了文件回退到重生点,新会话重新开始。
你是玩家,agent 是你的化身与执行者。 生存决策由你拍板:
引擎只在状态变化瞬间推送一条消息(不刷屏,恢复后重新武装):
| 事件 | 播报内容 | 送达 |
|---|---|---|
| 🌙 入夜 | 夜幕降临提醒 + 火把/床的应对建议 | 插队(立即) |
| ☀️ 黎明战报 | 昨夜遭遇次数与击退/格挡/受伤明细(剑盾耐久消耗的账本);平安夜也有通报 | 排队 |
| 🍖 饥饿 ≤ 4 | 低饥饿警告 + 吃面包指引 | 插队(立即) |
| ❤️ 生命 ≤ 4 | 血量告急警告 + 回血条件 | 插队(立即) |
| ⛏️🔭🔴 合成解锁 | 合成铁镐/望远镜/红石中继器时宣布解锁的能力 | —(合成返回消息内) |
| ☠️ 死亡 | 死亡信息 + 掉落清单 + 文件回退说明 | 插队(立即) |
| 📁 出生点/重生点备份 | 备份完成(文件数 + 对话摘要) | 插队(立即) |
播报是插件来源消息,不推进游戏时间(只有真实用户消息算对话回合)。插队消息(steer)在 agent 的下一个执行边界立即送达,不会中断正在进行的工具调用;普通播报排队送达。
| 数值 | 上限 | 显示 |
|---|---|---|
| 生命 ❤️ | 20(10 颗心) | 一颗满心 = 2 血,半颗心 = 1 血 |
| 饥饿 🍗 | 20(10 根鸡腿) | 一根满鸡腿 = 2 饥饿,半根 = 1 |
read / glob / grep / read_image / ask_user / todo_write / create_goal / get_goal / skill / job_list / job_output / job_kill / list_agents。survival_sleep)跳过夜晚;之后每个回合/动作恢复刷怪判定。| 怪物 | 效果 |
|---|---|
| 僵尸 | −2 血 |
| 骷髅 | −2 血,且打断本次工具调用(远程射箭) |
| 苦力怕 | −6 血(高伤害,盾牌可挡) |
| 蜘蛛 | −2 血 |
防御手段见 物品:火把压制刷怪(概率 ×0.8,不是免疫)、剑自动反击(石 40% / 铁 60% / 钻石 90%,品质优先)、盾牌格挡、床睡觉跳过夜晚。
| 工具 | 作用 |
|---|---|
survival_status |
查看完整状态:生命/饥饿/经验、天数与昼夜、背包材料、物品栏、工具门禁状态、进度、最近事件、完整配方书。状态不明时先看这里。 |
survival_craft |
按配方合成。参数 recipe 填配方 id(如 bread、iron-pickaxe、bed),见 配方大全。失败会告诉你缺什么。 |
survival_eat |
吃东西回复饥饿。目前只有面包(food 参数默认 bread),吃一个回复 8 饥饿。 |
survival_sleep |
用床设置/更新重生点:夜晚睡觉(跳过夜晚进入下一天、达成就「甜甜的梦」);白天休息(不跳夜)。两种都会把工作区文件 + 对话摘要备份为重生点(死亡时文件回退到最近一次备份)。 |
survival_difficulty |
查看/修改本会话难度(peaceful/easy/normal/hard/hardcore),仅本会话生效,不影响其他会话与全局 settings。 |
挖矿 = 完成任务。引擎监听真实的任务信号,成功即掉落(经验同时入账):
| 触发 | 掉落 | 经验 |
|---|---|---|
写文件成功(write/edit,70% 概率) |
圆石×1 + 木头/小麦/煤中随机 2 个(小麦权重最高);10% 铁矿石×1 | +2 |
计划退出(exit_plan_mode,每日限一次) |
煤×2 + 铁矿石×1;30% 铜矿石×1 | +10 |
目标完成(update_goal action=complete) |
铁矿石×2 + 红石粉×2;25% 钻石×1;25% 铜矿石×1;15% 紫水晶碎片×1 | +15 |
子代理成功(subagent/subagent_fork 完成) |
铁矿石×1 + 红石粉×1;15% 钻石×1;15% 紫水晶碎片×1 | +12 |
铁矿石/铜矿石需要熔炉熔炼成锭才能用于合成;红石粉、钻石、紫水晶直接可用。
| 项目 | 规则 |
|---|---|
| 获得 | 挖矿掉落附带(见上表);剑击退怪物 +2/+3/+5(石/铁/钻石) |
| 消耗 | 铁砧修复:repair-pickaxe / repair-stone-sword / repair-sword / repair-diamond-sword / repair-shield,经验 + 材料(见 铁砧与修复) |
| 惩罚 | 死亡时经验减半(掉落) |
| 持久化 | 经验随会话存在——每个会话独立存档,新会话从 0 经验开始 |
附魔系统暂未实装(避免功能过多);铁砧修复是当前经验的唯一消耗途径——攒着修工具,别随便死。
| 材料 | 来源 |
|---|---|
| 木头 / 圆石 / 煤 / 小麦 | 小任务(写文件)掉落 |
| 羊毛 | 白天偶尔遇到羊(每次 1–2 个) |
| 铁矿石 / 铜矿石 | 中小任务掉落,需熔炼 |
| 红石粉 | 大任务(目标完成/子代理)掉落 |
| 钻石 / 紫水晶碎片 | 深挖稀有掉落 |
survival_craft 的 recipe 参数)基础
| 配方 id | 产物 | 材料 | 说明 |
|---|---|---|---|
planks |
木板×4 | 木头×1 | 基础建材 |
stick |
木棍×4 | 木板×2 | 工具手柄 |
torch |
火把×1 | 煤×1 + 木棍×1 | 照明压制刷怪:持有后夜晚刷怪概率 ×0.8(原版光照概念,不是免疫) |
furnace |
熔炉×1 | 圆石×8 | 解锁熔炼配方 |
熔炼(需先有熔炉)
| 配方 id | 产物 | 材料 |
|---|---|---|
smelt-iron |
铁锭×1 | 铁矿石×1 + 煤×1 |
smelt-copper |
铜锭×1 | 铜矿石×1 + 煤×1 |
smelt-stone |
石头×1 | 圆石×1 + 煤×1 |
食物与工具
| 配方 id | 产物 | 材料 | 效果 |
|---|---|---|---|
bread |
面包×1 | 小麦×3 | 吃一个回复 8 饥饿 |
iron-pickaxe |
铁镐 | 铁锭×3 + 木棍×2 | 解锁 subagent/subagent_fork,每用一次耐久 −1(耐久 120,可叠加) |
stone-sword |
石剑 | 圆石×2 + 木棍×1 | 入门剑:夜间 40% 概率击退(+2 经验,耐久 50;每次遇怪出手即 −1,无论命中) |
iron-sword |
铁剑 | 铁锭×2 + 木棍×1 | 夜间 60% 概率击退(+3 经验,耐久 100;出手即耗) |
diamond-sword |
钻石剑 | 钻石×2 + 木棍×1 | 更锋利:击退率 90%(+5 经验,耐久 200;出手即耗);与低档剑并存时优先使用 |
shield |
盾牌 | 木板×6 + 铁锭×1 | 50% 概率格挡怪物伤害(耐久 120;每次举盾即 −1,无论格挡成败;骷髅的打断箭挡不了) |
bed |
床 | 羊毛×3 + 木板×3 | survival_sleep 夜晚睡觉(跳过夜晚)/ 白天休息(不跳夜),都设置重生点(备份文件+对话;床不掉落) |
spyglass |
望远镜 | 紫水晶碎片×1 + 铜锭×2 | 解锁 web_search(永久,原版无耐久) |
红石电路
| 配方 id | 产物 | 材料 | 效果 |
|---|---|---|---|
redstone-torch |
红石火把×1 | 红石粉×1 + 木棍×1 | 电路组件(是材料,不是物品) |
redstone-repeater |
红石中继器×1 | 红石粉×1 + 红石火把×2 + 石头×3 | 解锁 workflow(永久) |
铁砧与修复(经验的用途)
| 配方 id | 产物 | 材料 | 效果 |
|---|---|---|---|
anvil |
铁砧×1 | 铁锭×12 | 解锁铁砧修复(原版需 31 锭,为节奏简化) |
repair-pickaxe |
— | 铁锭×1 + 10 经验(需铁砧) | 铁镐耐久 +60(上限的一半) |
repair-stone-sword |
— | 圆石×1 + 5 经验(需铁砧) | 石剑耐久 +25 |
repair-sword |
— | 铁锭×1 + 10 经验(需铁砧) | 铁剑耐久 +50 |
repair-diamond-sword |
— | 钻石×1 + 10 经验(需铁砧) | 钻石剑耐久 +100 |
repair-shield |
— | 木板×1 + 10 经验(需铁砧) | 盾牌耐久 +60 |
修复要求目标工具存在且有损伤(耐久低于上限);修复不能超过上限。耐久数值在
settings.yaml可调,修复量随之上限的一半联动。
survival_eat 自动消耗;饥饿归零前记得吃。subagent/subagent_fork 时自动消耗 1 耐久;耗尽即失效,需重新合成(可多次合成叠加耐久)。survival_sleep 睡觉;白天不能睡。生存模式里,高级能力需要先合成对应物品——就像没有镐子挖不了钻石。引擎在 tools/pre-execute 真实拦截(不是人设演戏):
| 工具 | 需要 | 消耗 |
|---|---|---|
subagent / subagent_fork |
铁镐 | 每次调用耐久 −1 |
web_search |
望远镜 | 永久解锁 |
workflow |
红石中继器 | 永久解锁 |
没有对应物品时调用会被拒绝,并提示所需配方。tool-ralph 不存在于本预设——命令方块是创造模式专属,生存模式不可合成(原版设定)。
普通难度(peaceful/easy/normal/hard)死亡 = 软回退,会话继续:
respawn.json)——重生点之后获得的经验与物品丢失(播报里列出);成就保留(原版:成就属于账号,不因死亡丢失)。极限模式(hardcore)死亡 = 删档,会话终结:
血量归零 → 原版死亡信息 → 掉落全部背包与半数经验 → 文件回退 → 本会话随即终结:除生存工具外的所有工具调用被拒绝,状态栏显示 ☠️——写下遗言,然后结束会话。
新会话是全新世界:从第 1 天、0 经验、空背包重新开始。
文件重生点:会话开始时引擎自动把工作区 + 对话摘要 + 世界状态备份到 ${DSH_HOME}/survival-respawns/<会话id>/(出生点);survival_sleep 在夜晚睡觉(跳过夜晚)或白天休息(不跳夜)都会把备份更新为当前状态(新重生点)。备份排除生成物目录(node_modules / .git / dist 等,可在 settings 配置),排除目录不备份也不回退——回退后如需一致产物,重新 install/build 即可。子代理(subagent)的死亡不影响文件。
开局即问:新建会话时会弹出难度选择框(也可随时用 survival_difficulty 修改,仅本会话生效,随 world.json 落盘)——可以同时开一个普通会话和一个极限会话互不影响。全局默认在 settings.yaml 的 dsh-survival.difficulty 选择:
| 难度 | 效果 |
|---|---|
peaceful 和平 |
不刷怪;饥饿不掉血;无条件回血 |
easy 简单 |
刷怪概率 ×0.5;怪物伤害减半(最低 1) |
normal 普通 |
默认概率与伤害 |
hard 困难 |
刷怪概率 ×1.5;怪物伤害 ×2 |
hardcore 极限 |
同困难 + 死亡即删档(会话终结,遗言收场;新会话是全新世界) |
注意:与原版一致,难度不影响工具门禁——和平难度下依然需要铁镐才能用 subagent。
原版成就名,随存档永久保留:
| 成就 | 达成条件 |
|---|---|
| 钻石! | 挖到第一颗钻石 |
| 铁器时代 | 熔炼出第一块铁锭 |
| 甜甜的梦 | 在床上睡第一觉 |
| 怪猎手 | 用剑第一次击退怪物 |
${DSH_HOME}/settings.yaml 的 dsh-survival 段(Windows 下 ${DSH_HOME} 为 %USERPROFILE%\.dsh,Linux/WSL/macOS 下为 ~/.dsh;不写则全部用默认值):
dsh-survival:
difficulty: normal # peaceful | easy | normal | hard | hardcore
dayLengthTurns: 8 # 一天包含的对话回合数(用户消息),白天与夜晚各半
mobChance: 0.3 # 夜晚每个回合/工具调用的刷怪基础概率(0–1)
torchMobFactor: 0.8 # 持有火把时刷怪概率的倍率(光照压制;0=免疫)
hungerPerAction: 1 # 普通工具调用的饥饿消耗
heavyHunger: 1 # 重型工具(web/subagent/workflow)的饥饿消耗
breadHunger: 8 # 面包回复的饥饿值(食物链净收益转正)
pickaxeDurability: 120 # 铁镐耐久(subagent 可用次数池,修复量为其一半)
swordDurability: 100 # 铁剑耐久(反击次数池)
stoneSwordDurability: 50 # 石剑耐久(入门反击池)
diamondSwordDurability: 200 # 钻石剑耐久(反击次数池)
shieldDurability: 120 # 盾牌耐久(格挡次数池)
smallLootChance: 0.7 # 写文件触发小矿的概率(0–1)
respawnExcludes: # 文件快照排除的目录名(任意深度按 basename 匹配;空数组=全量备份)
- node_modules
- .git
- .pnpm-store
- dist
- test-dist
- __pycache__
| 字段 | 含义 | 默认 |
|---|---|---|
difficulty |
难度档,见上表 | normal |
dayLengthTurns |
一天的对话回合数;夜晚 = floor(值/2) 回合(与白天各半) |
8 |
mobChance |
夜晚每个动作(回合或工具调用)的刷怪基础概率 | 0.3 |
torchMobFactor |
持有火把时刷怪概率的倍率(光照压制;0 = 免疫) | 0.8 |
hungerPerAction |
普通工具调用的饥饿消耗 | 1 |
heavyHunger |
重型工具的饥饿消耗 | 1 |
breadHunger |
面包回复饥饿 | 8 |
pickaxeDurability |
铁镐耐久(subagent 可用次数池;修复量为其一半) | 120 |
swordDurability |
铁剑耐久(反击次数池) | 100 |
stoneSwordDurability |
石剑耐久(入门反击池) | 50 |
diamondSwordDurability |
钻石剑耐久(反击次数池) | 200 |
shieldDurability |
盾牌耐久(格挡次数池) | 120 |
smallLootChance |
写文件成功触发小矿的概率 | 0.7 |
respawnExcludes |
文件快照排除的目录名(任意深度按 basename 匹配;空数组 = 全量备份) | node_modules .git .pnpm-store dist test-dist __pycache__ |
每个会话是独立存档:世界状态随会话落盘(world.json),同一会话重启后完整恢复进度;不跨会话——新会话从第 1 天、0 经验、空背包重新开始:
| 数据 | 生命周期 |
|---|---|
| 世界天数、经验、死亡数、成就、重生点(床)、背包、生命与饥饿 | 随会话落盘(world.json,与文件重生点同目录):每次结算/挖矿/合成/进食/睡觉都会写入;同一会话(对话还在的那个)重启后完整恢复;新会话从第 1 天、0 经验、空背包开始 |
| 文件重生点(工作区快照 + 对话摘要 + 世界状态 + 重生点状态) | 会话开始时自动备份(出生点),夜晚睡觉或白天休息都更新(重生点);存于 ${DSH_HOME}/survival-respawns/<会话id>/(含 conversation.md、world.json、respawn.json),会话结束清理 |
| 死亡回退 | 普通难度:文件回退到最近备份 + 状态回退到重生点时刻(respawn.json:生命/饱食/时间/经验/背包),成就保留,会话继续;hardcore:文件回退 + 掉落 + 会话终结 |
| 死亡信息(死因与掉落清单) | 随 world.json 落盘——重启后死亡会话仍保持死亡状态(不会"复活"),新会话另行开始 |
输入框上方的整行状态栏,只在「生存模式」会话显示,其他模式完全不可见(由 capability 门禁保证):
图标来自 OpenMoji(CC BY-SA 4.0),同一图标家族、尺寸风格严格一致。
web_search。| 症状 | 处理 |
|---|---|
| 预设挂载报「Cannot find package」 | 包未装进 profile workspace:确认 file: 依赖与 pnpm install |
| 工具调用没被拦截 | 确认会话确实挂在「生存模式」预设上(其他预设不受影响) |
| 状态栏不显示 | 确认 survival-hud 宿主行已插入 cordis.patch.yml 且已重启;状态栏只在生存模式会话显示 |
| 昼夜不推进 | 昼夜由用户消息(对话回合)推进,纯聊天也过天;修改过设定请确认 dayLengthTurns 合理 |
| 重启后进度归零 | v0.16 起世界状态随会话落盘(world.json);若仍归零,确认 ${DSH_HOME}/survival-respawns/<会话id>/world.json 存在——旧版本(v0.15 及以前)的存档不迁移 |
| 文件没有回退 | 确认会话有工作目录且可读;快照在 ${DSH_HOME}/survival-respawns/(会话结束会清理);排除目录(respawnExcludes)不备份也不回退 |
| 组件 | 平面 | 说明 |
|---|---|---|
@dsh-survival/engine |
Agent 预设(isolate realm) | 规则引擎:硬结算(tools/pre-execute 门禁/饥饿/昼夜/怪物)、挖矿结算(tools/result)、文件重生点(工作区快照/回退)、settings 命名空间 dsh-survival |
@dsh-survival/tool-survival |
Agent 预设(同 realm) | survival_status / survival_craft / survival_eat / survival_sleep + 系统提示 HUD 文本 |
@dsh-survival/hud |
宿主(cordis.patch.yml) | 浏览器状态栏桥:宿主侧 typert Remote 经 agentPresets.serviceFor 读预设引擎,capability 门禁只对生存会话生效 |
config/agent-presets/survival |
Agent 预设 | 显示名「生存模式」;从 standard 拷贝,去掉 ralph(命令方块是创造模式专属) |
引擎发布 survivalEngine 服务,消费者全在预设内部。世界状态是会话内存态(独立存档);文件重生点由引擎用 node:fs 把工作区快照到 ${DSH_HOME}/survival-respawns/,死亡时回退——只对顶层会话生效,子代理的死亡不碰文件。唯一的宿主行是 @dsh-survival/hud(预设 realm 对宿主不可见,浏览器 RPC 需要宿主侧 Remote——api-proxy 读 goals/skills 的同一官方通路)。
状态栏图标来自 OpenMoji(CC BY-SA 4.0,署名-相同方式共享),同一 72×72 图标家族,见 packages/hud/assets/ATTRIBUTION.md。不包含任何 Minecraft 版权素材。
pnpm install
pnpm run build # tsup 构建 lib/(hud 含 client 包)
pnpm run typecheck # 先 build 再 typecheck(工具包依赖引擎的 d.ts)
pnpm run test # 引擎规则层单元测试(node:test,34 用例)
pnpm run pack # 打包 tgz 到 dist/
支持 Windows / Linux / WSL / macOS(脚本均为跨平台写法)。安装到 DeepSeek Harness 见 docs/installation.md——含三端命令对照与开发模式(符号链接直指仓库,改代码 build 后重启即生效)。
单元测试:packages/engine/test/game.test.ts 覆盖引擎规则层(配置基线/昼夜/门禁/结算/挖矿/合成/铁砧修复/进食/睡眠/死亡掉落/成就/完整周期),Node 内置 node:test,零额外依赖。运行 pnpm test(先 build,工具包依赖引擎的 d.ts)。
Docker 全闭环:Dockerfile 在容器内完成 build → typecheck → test → pack 全流程,并校验每个 tgz 含 package.json 与 lib/index.js。本地验证:
docker build -t dsh-survival-test .
docker run --rm dsh-survival-test # 列出 dist/ 三个 tgz(构建时已全量验证)
多 Node 版本矩阵(如 node:20 / node:22 / node:24)只需改 Dockerfile 首行 FROM node:XX 分别构建。注意 pnpm 10+ 需要 node:sqlite(Node ≥22.5),Node 20 镜像必须用 pnpm 9.x(Dockerfile 已固定 pnpm@9.15.0)。
本项目是娱乐向的独立作品,仍有许多不足与未实现的构想,期待开发者提 Issue 与 PR 共同改进:
欢迎 fork 本仓库并提交 PR——修复 bug、补充测试、调整平衡性、新增玩法模块皆受欢迎。提交前请了解架构约定:引擎与工具属于预设 isolate realm(服务不发布进 root realm),宿主侧仅 @dsh-survival/hud 状态栏桥一行;世界状态是会话内存态(独立存档),文件重生点由引擎直接操作工作区快照。
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: 无有效分类标签。