插件目录 / Developer / dsh-survival
dsh-survival
已验证 · 实测可装 XDzzzzzZyq
✓ 持续维护 2 位贡献者
1Stars
0Forks
0未关闭 issue
JavaScript语言
2026-08-15最近推送
跨平台平台
功能简介
DeepSeek Harness生存模式
我们的评价
可用 — 实测通过,早期项目
可用 — 实测通过,早期项目
DeepSeek Harness生存模式 实测能干净安装、正常启动。早期项目,但功能可用。
「已验证」表示我们的自动化 CI 在干净 profile 里实际执行了 dsh plugin add 并启动成功——仅此而已。功能描述与版本兼容性均为作者声明。这不是安全审计,也不代表对第三方代码的背书。
README
DSH 生存模式
> 🍗 **MC原版生存,今天吃什么?** 在 https://github.com/deepseek-ai/deepseek-harness 中体验**MC原版生存**:MC 原版生存机制 + MC 风格 UI。这是什么
把一次会话变成一场方块世界生存(**agent 角色与标准模式完全一致**,仅追加一段系统提示,告诉 agent 何时请示吃饭/睡觉): - **新机制**(宿主端引擎survival-engine,按 MC 规则结算):
- ❤️ 生命值 0-20:工具失败 / 步骤错误掉血;**饱食度 ≥18 且饱和度 >0** 时每回合自动回 1 HP(消耗 6.0 疲劳)。
- 🍗 饱食度 0-20 与 ✨ 饱和度 0-20(上限=饱食度):**token 消耗产生疲劳,每满 4.0 疲劳先扣 1 饱和度,饱和度耗尽才扣饱食度**;进食先补饱和度再补饱食度。
- ⛏️ 昼夜循环:一天 24000 tick = 20 真实分钟(白天 10min / 黄昏 1.5min / 夜晚 7min / 黎明 1.5min),时间实时流逝,UI 随相位换色。
- 🎒 物品栏与 MC 食物表;**死亡掉落物品**,重生补给出生点物资。
- 😴 **吃饭 / 睡觉都由代理请示用户**(ask_user_question):饿了问"可以吃饭吗",夜晚问"可以睡觉吗";睡觉睡到清晨 1000t 并**打断当前任务**(concludeTurn)。
- 📝 **角色保持标准**:预设不定义 persona,agent 就是标准编码 Agent;只有 survival-prompt 追加一段系统提示(饱食度低时请示吃饭、夜晚请示睡觉)。
- **UI 风格**(ui/survival-hud.js,动态插件,真实 MC 素材):
- **输入框上方**常驻状态条(conversation.input.dock):**10 颗红心**(官方 HUD 贴图,满/半/空、低血闪烁)+ **10 个鸡腿**(饱食度)——只显示生命与饱食度。
- 图标为 minecraft.wiki 官方 9×9 贴图(survival/assets/*.png),base64 内嵌、像素化放大,离线可用。
- **昼夜主题循环**:按 MC 相位切换四套全局配色(白天/黄昏/夜晚/黎明)。
- survival 工具专属卡片(聊天流内)与 /survival、/mc 命令(状态卡 + give 补给)。
> **素材署名**:survival/assets/*.png(红心/鸡腿 HUD 图标)来自 https://minecraft.wiki,采用 https://creativecommons.org/licenses/by-nc-sa/3.0/ 许可,版权归 Mojang 与 Minecraft Wiki 贡献者所有。
架构
``
DSH-survival/
├── survival/ # ★ 可安装的 agent 预设(复制到任意部署的 .agent-presets/)
│ ├── preset.yml # 模式元数据(名称/描述,出现在会话模式选择器)
│ ├── agent.cordis.yml # Cordis 组成:标准工具集 + 生存域(不定义人格,角色与标准一致)
│ ├── plugins/
│ │ ├── survival-engine.mjs # MC 引擎:provide 'survival' 服务,事件钩子 + settings 持久化
│ │ ├── survival-tool.mjs # survival 模型工具(status / eat / sleep / inventory / respawn)
│ │ ├── survival-command.mjs # /survival 与 /mc 命令(状态卡 / eat / sleep / give / respawn)
│ │ └── survival-prompt.mjs # 系统提示段:饱食度低请示吃饭、夜晚请示睡觉(角色不改变)
│ ├── assets/ # 官方 MC HUD 图标源文件(红心/鸡腿 9×9 PNG,minecraft.wiki)
│ └── skills/
│ └── survival-playbook/ # 随预设分发的 MC 法则技能(何时请示吃饭/睡觉)
├── ui/
│ └── survival-hud.js # 动态 Cordis 插件:MC 风格 HUD + 昼夜主题(参考实现)
└── engine-smoke.mjs # 引擎功能冒烟测试(34 项断言,零依赖)
`
关键设计决策
| 问题 | 决策 | 原因 |
| --- | --- | --- |
| agent 角色 | 不定义 persona,追加 systemPrompt.section() 提示段 | 与标准模式角色完全一致;生存行为只靠一段系统提示驱动(吃饭/睡觉请示),机制由引擎自动结算 |
| 预设如何携带新代码 | agent.cordis.yml 用相对路径引用 ./plugins/*.mjs | 预设树的 loader 支持相对导入("a preset's own files travel with it"),整个模式自包含 |
| 引擎服务的作用域 | 放在 isolate: { survival: true } 的 realm 里 | 预设行发布服务必须进 isolate realm,否则第二个会话挂载同一预设会冲突 |
| 状态持久化 | settings 服务($DSH_HOME/settings.yaml),survival 命名空间按会话 id 键控 | 会话日志不允许仓库外事件类型(恢复时会拒绝整个日志);settings 是宿主的持久化 KV,且 schema 可以用普通函数代替 |
| token 消耗 → 饱食度 | 回合结算时 tokenMeter.measure(session).surfaceTokens 的增量换算疲劳 | 忠诚"随 token 消耗减少";meter 缺失时用 stepFallbackTokens 兜底 |
| 时间系统 | 状态存 absTicks + lastTickAt,20 tick/秒 按真实时间流逝 | MC 时间实时走;休眠/离线期间时间照常推进(与游戏一致) |
| 浏览器实时 UI | 动态 Cordis 插件(ui/survival-hud.js) | **平台限制**:preset 无法携带 browser bundle(client 模块图在启动时静态构建),浏览器端扩展目前只能走动态插件管线;本仓库把该插件作为参考实现与文档 |
| 工具/命令如何读状态 | 注入 survival 服务 | 同一 realm 内的兄弟行通过 inject 解析 |
| 同进程热重载 | 引擎在 settings 命名空间已注册时复用现有注册 | 旧 standing 代仍存活时避免 already registered 冲突;但插件文件有 ESM 缓存,**改机制后需重启 DSH 生效** |
安装(给别人装)
1. 把 survival/ 目录复制到目标部署的预设根目录:
`bash
cp -R survival "$DSH_HOME/.agent-presets/survival" # $DSH_HOME 默认 ~/.dsh
`
或使用 DSH 的 preset 复制 API(agentPresets.copy('standard', 'survival', ...) 后替换文件)。
2. 重启 / 刷新 DSH(预设由 roster 在会话启动时发现)。
3. 新建会话时,在模式选择器里选 **生存模式**。
4. (可选)安装浏览器 HUD——当前需要通过动态插件管线加载:
`bash
# 在任意 cordis 会话里执行 cordis_define + cordis_run,代码见 ui/survival-hud.js;
# 或用下方"本机开发"的脚本方式。
`
本机开发
`bash
安装(当前部署)
cp -R survival ~/.dsh/.agent-presets/survival
校验预设能否挂载(见编辑 Cordis 组成技能:mount-validate)
改动 survival/ 下的文件后重新校验即可;预设每次会话启动时重新读取
引擎功能冒烟测试(零依赖,直接跑)
node engine-smoke.mjs
`
机制参数(可调)
survival/agent.cordis.yml 里 survival-engine 行的 config 是全部规则(默认值与游戏一致):
| 参数 | 默认 | 含义 |
| --- | --- | --- |
| maxHp / maxHunger | 20 / 20 | MC 生命与饱食度上限 |
| startSaturation | 5 | 出生饱和度(MC:5.0) |
| startInventory | bread×3, apple×2, cooked_beef×1, carrot×2 | 初始食物 |
| tokensPerExhaustion | 150 | 每 150 token → 1 点疲劳(4 点疲劳扣 1 食物值) |
| stepFallbackTokens | 400 | tokenMeter 不可用时的每回合兜底 |
| failHpBase / failHpByPrefix | 1 / bash,pwsh 3; edit,write 2 | 工具失败伤害 |
| stepErrorHp | 4 | 步骤级错误伤害 |
| healThresholdHunger / healExhaustion / healHpPerTurn | 18 / 6 / 1 | 自然回血条件与消耗(MC:≥18 且 sat>0,回 1 HP 耗 6 疲劳) |
| scorePerCleanTurn / scoreDeathPenalty | 1 / 5 | 生存分 |
| respawnHp / respawnHunger / respawnSaturation | 20 / 20 / 5 | 重生值(MC) |
| dayTicks / ticksPerSecond | 24000 / 20 | 一天 tick 数 / 时间流速(20 min/天) |
| sleepStartTick / morningTick | 12542 / 1000 | 可睡窗口(MC:time>12541)/ 睡醒时间 |
| keepInventoryOnDeath | false | 死亡掉落物品(MC 默认掉落;true 保留) |
| starvationHpPerTurn | 1 | hunger=0 时每回合饥饿伤害 |
| historyCap | 30 | 事件历史环形上限 |
食物表(MC 数值)
| 食物 | 饱食度 | 饱和度 | | 食物 | 饱食度 | 饱和度 |
| --- | --- | --- | --- | --- | --- | --- |
| cooked_beef | +8 | +12.8 | | bread | +5 | +6.0 |
| cooked_porkchop | +8 | +12.8 | | baked_potato | +5 | +6.0 |
| cooked_chicken | +6 | +7.2 | | carrot | +3 | +3.6 |
| golden_carrot | +6 | +14.4 | | apple | +4 | +2.4 |
| melon_slice | +2 | +1.2 | | cookie | +2 | +0.4 |
| sweet_berries | +2 | +0.4 | | | | |
进食先补饱和度(上限=当前饱食度)再补饱食度(上限 20)。用户可用 /mc give <食物> [数量] 补给。
已知限制 / 路线图
- **进程运行期间修改预设组成会导致生存会话暂时无法创建(跳回标准模式)**:旧 standing 代占用的 survival settings 命名空间与新版冲突,挂载回滚。**重启 DSH 即可恢复**;引擎已内置"命名空间已注册则复用"的容错,重启后不再复发。
- 机制/UI 代码更新后需**重启 DSH**(预设插件文件有 ESM 缓存,同进程不重新加载;动态 HUD 插件也随进程重启消失,需重新 cordis_run,已授权过则免批)
- 死亡时用 tools.guard` 阻止继续行动(当前死亡冻结状态,但工具仍可调用)
- 把 HUD 变成随预设分发的正式 UI(需要上游支持 preset 携带 client bundle / 主题层)
- 更多 MC 机制:护甲值、饥饿时减速、疾跑消耗、药水/附魔等
安装
🧩 让 Agent 自动装(推荐)
装一次目录插件,之后本站所有插件都能让 DeepSeek Harness 自动找、自动装:
dsh plugin add dshbase-catalog 然后对 agent 说「帮我装 dsh-survival」,它会在目录里找到并自动安装。文档:dshbase-catalog · 已验证场景包。
该插件是 GitHub 源码(未发 npm)——直接从仓库装:
Web profile:
dsh plugin --profile web add github:XDzzzzzZyq/dsh-survival Headless(CLI)profile:
dsh plugin --profile headless add github:XDzzzzzZyq/dsh-survival 实测报告
验证通过:从 GitHub 源码完成 L1 安装 + L2 加载 + L3 运行(dsh 0.1.0-rc.6)。
使用场景
扩展 agent 的编码能力面——给它一个新工具、工作流或集成,让它接手以前做不了的开发任务。
适合谁
想让 dsh 在真实代码库上像队友一样干活的开发者——能改、能跑、能验证,而不只是回答问题。
二次开发建议
工具/命令面就是缝:暴露更多 SDK 能力、加更聪明的上下文接线,或收紧改代码与验证之间的循环。