# dsh-digipet · 数码搭子 **在 DeepSeek Harness 里孵一只数码兽 —— 它吃你的真实工作长大,数码宝贝式分支进化。** 你写代码,它变成龙;你翻文档,它成为贤者;你天天报错……它会变成一条在一千万个进程里同时存在的东西。 [![license](https://img.shields.io/badge/license-MIT-green)](LICENSE) ![dsh-plugin](https://img.shields.io/badge/dsh-plugin-1f6feb) ![deps](https://img.shields.io/badge/依赖-0-lightgrey) ![tokens](https://img.shields.io/badge/token%20开销-0-orange) ![tests](https://img.shields.io/badge/tests-42%20✓-brightgreen) 中文 | [English](README.en.md)
``` 蛋壳裂开了 —— ▗▄▚▚▄▖ ▐ ◉ ◉ ▌ ▝▚▄▄▞▘ 。o ✨ 数码蛋 进化为 比特泡 Bitpop(幼年期Ⅰ) 「一颗刚立了 flag 的比特,还不知道自己要变成什么。」 ``` ![进化仪式](docs/ceremony.png) ## 30 秒上手 ```sh dsh plugin --profile web add github:swaylq/dsh-digipet # 重启 dsh,然后在任意会话里: /pet hatch ``` 然后**正常干活就行**。每个完成的回合 +5 XP、你每条消息 +2、每次工具调用 +3、连报错都 +4。`/pet` 随时看它,`/pet evolve` 见证进化仪式。 ## 它会变成什么,取决于你怎么干活 生命周期完整对齐初代育成机的正统结构:**数码蛋 → 幼年期Ⅰ → 幼年期Ⅱ → 成长期 → 成熟期 → 完全体 → 究极体**。从成长期起,每次进化都重新读一遍「这一阶段你实际怎么干活」来选系谱: | 系谱 | 喂出它的方式 | 究极体 | |---|---|---| | 🐉 龙之系谱 | 写文件、跑命令 | 战铠龙皇 Wardrake Sovereign | | 📜 贤者系谱 | 读代码、查资料 | 天书贤神 Codex Deva | | 🕊️ 圣翼系谱 | 一句一句聊天 | 炽天使皇 Seraph Prime | | 👾 病毒系谱 | 在报错和事故里泡大 | 末日蛛皇 Doomweaver —— `kill -9` 只会让它分裂 | 3 个共通幼年形态 + 4 条系谱 × 4 阶段 + **3 个隐藏形态** = 22 格图鉴。系谱不锁死 —— 上一阶段是龙、这一阶段疯狂报错,它就转职病毒系谱。你的宠物最终长成什么样,就是你这段时间工作方式的镜子。 至于那三个隐藏形态,图鉴里只有一句谣传: > 「谣传:吃撑的时候进化,会出事。」 初代玩家都知道这句话什么意思。有的错误能被爱救赎,有的错误会层层堆叠、越滚越高,最终成为某种**祖传的存在**(立绘的最后一行是 `// 别动。`)。 ![图鉴](docs/dex.png) ## 命令 | 命令 | 作用 | |---|---| | `/pet` | 状态卡:立绘、XP、饱食度、心情、四维属性、累计吞食 | | `/pet hatch` | 孵蛋(每个 DSH home 一只;蛋可进化时也可当仪式触发器) | | `/pet evolve` | 进化仪式 | | `/pet name <名字>` | 起名(16 字以内) | | `/pet dex` | 图鉴(未见过的形态显示 ???,隐藏形态只给谣传) | | `/pet story` | 一生的大事记 | | `/pet about` | 机制说明与信任立场 | **从 0.1.x 升级**:旧存档(海洋生物图鉴)会在下次启动时自动无损迁移 —— 阶段、经验、四维、图鉴、大事记全部保留,历史形态一并映射到新图鉴。 ## 为什么做这个 DSH 生态已经有二十多个桌宠插件([whale-girl](https://github.com/vlln/whale-girl)、各家鲸鱼、Clippy、Live2D……),它们几乎都是**状态镜像**:agent 在思考,宠物做思考动作;任务完成,宠物欢呼。做得最深的 whale-girl 有资历等级和称号,但形象不会变,而且只活在 Web GUI 里。 没有一个是**养成**:没有孵化、没有阶段进化、没有「你的工作方式决定它长成什么」。dsh-digipet 补的是这一格 —— 初代育成机式的成长循环,宿主是你的 harness,饲料是你的真实工作。 吃撑了会犯困(饱食度 > 90% 时经验收益降到 15%),睡一会儿消化掉再继续吃 —— 这是天然的防刷机制。**但老玩家都知道:撑着肚子的时候,千万别按进化。** ## 原理 整个插件是**四个事件监听 + 一个斜杠命令**: | 挂载点 | 喂的是 | |---|---| | `agent/turn-stopping` | 每个完成的回合 +5 XP | | `agent/inbox/claimed` | 你的每条消息 +2 XP(喂「羁绊」) | | `tools/result` | 每次工具调用 +3 XP,按工具名分类喂「锻造」或「学识」;失败喂「皮实」 | | `agent/error` | 每次报错 +4 XP(喂「皮实」) | 进化门槛 30 / 120 / 500 / 1800 / 6000 / 16000 XP。进化时取这一阶段窗口内的最高属性定系谱,窗口随进化清零。存档在 `$DSH_HOME/digipet/state.json`,写盘走「临时文件 + fsync + 原子 rename」(与官方 JSON 存储后端同款),事件再密集也只按 1.5 秒节流落盘一次。 **关键不变量:模型可见即已记录 —— 而这个插件干脆什么都不让模型看见。** 不注册工具(工具 schema 是每轮固定 token 税)、不 `agent.inject()`、不写会话事件。宠物只活在命令结果卡里,对每一次模型请求的贡献是零字节。 ## 信任立场 - **读**:只读它自己的存档文件。不读你的代码、不读会话内容 —— 事件监听里只用到「发生了什么类型的事」,消息与工具的具体内容从不落存档。 - **写**:只写 `$DSH_HOME/digipet/state.json`。 - **网络**:无。 - **模型可见面**:无。零 token 开销,KV cache 不受任何影响。 - **故障半径**:所有监听器包在 try/catch 里,命令处理器有自己的错误兜底 —— 宠物摔了一跤不会波及你的工作。挂载的事件全是通知型(`emit`/`serial`),本插件从不否决、不改写、不延迟任何真实流程。 ## 已知限制 - 一个 DSH home 一只宠物,同机的所有 profile、会话、子 agent 共享它、一起喂它(这是特性也是限制)。 - 多个 dsh 进程同时跑时,存档是「后写者胜」—— 与官方 JSON 后端同样的单进程立场。 - 工具分类靠名字的正则启发(`write`/`edit`/`shell` → 锻造;`read`/`grep`/`search` → 学识),第三方工具起了奇怪的名字就会被当成中性饲料。 - 会话流里的折叠行会把立绘拍平成一行 —— 点开卡片看完整版(DSH 的工具行同款交互)。 - 进化门槛与食谱不可配置:改了数字,图鉴和存档就没有共同语言了。 ## 验证记录 在 dsh `0.1.0-rc.6`(macOS,web profile)上真机验证: 1. `dsh plugin --profile web add <本仓库>` 安装,`--dump-config` 出现 digipet 层; 2. `dsh web` 启动无异常; 3. 真浏览器里 `/pet hatch` → 蛋卡渲染(等宽、换行保留)→ 真实事件喂到 30 XP → `/pet evolve` 破壳出比特泡; 4. 无 API key 时发普通消息,模型请求失败但事件是真的 —— 存档数字与食谱逐项吻合; 5. 造一份 0.1.x 旧存档(故障系成长期)重启加载:自动迁移为新图鉴对应形态,名字、四维、大事记全部保留; 6. 42 个单元 / 集成测试(`node --test`),覆盖纯逻辑层、假 ctx 集成、迷途进化三连与迁移。 ## 致敬与边界 形态设计致敬初代 V-pet 与经典养成游戏的进化线传统(骨盔恐龙、机械改造、圣翼、网络病毒、照顾失误的那只泥)。「数码宝贝 / Digimon」是万代南梦宫的商标,本项目与其无任何关联;全部命名、立绘、文案均为原创,不包含任何官方素材。 ## 许可 MIT