# DeepSeek Harness Core(DHC → mcore)演进史(v1 → v62) 动态 Cordis 插件迭代记录。项目最早定名 **DeepSeek Harness Core(DHC / DHCore)**,v0.56.0 起插件名统一为 **mcore**(API 路由 `/api/dhc` 保持稳定)。插件 ID 经历多次生命周期(DSH 重启会清空动态插件,记忆文件持久):`perso-1`(v1-v11)→ `perso-2`(v12-v16)→ `dhcore-3`(v17)→ `dhcore-1`(v21,动态插件存档)。 ## DHC 常驻安装(当前)· agent preset `dhc` | 版本 | 内容 | | --- | --- | | v82 | **v0.74.0:完全开源 —— 许可改回 MIT,第三方署名补齐**:① **MIT 复归**(v0.59.0–v0.73.0 期间曾为「源码可见·专有」):自有代码全部以 MIT 发布,可自由使用/修改/分发/商用,唯一条件是保留版权与许可声明;`package.json` 的 `license` 同步为 `MIT`,README 的开头声明、目录项、许可章节一并改写。② **第三方署名补齐(法律合规,不是客套)**——vendor 进来的 `dsh/pet/dsh-pet-full/` 此前**没有保留原作者的许可文本**,违反 MIT「必须包含版权声明与许可声明」条款;现补 `dsh/pet/dsh-pet-full/LICENSE`(**dsh-pet / 作者 PC2005-cloud / MIT**),新增 `docs/THIRD_PARTY_NOTICES.md`(dsh-pet + 嵌套 23 个 npm 包 MIT 20·ISC 2·Apache-2.0 1 + Hermes/Hindsight/cordis/DSH 的借鉴说明),并把该文件加进 `package.json` 的 `files` 白名单 —— **许可声明必须随包分发,不能只躺在仓库里**。③ **门禁加固**:`release-check` REQUIRED_IN_PACK 新增 `LICENSE` / `docs/THIRD_PARTY_NOTICES.md` / `dsh/pet/dsh-pet-full/LICENSE`,将来谁删了直接拦。④ **开源前隐私复核**:189 个 commit 的 `git log -p` 全文搜机器码 **0 命中**;历史中从未提交过真实 `persona-core.json`(早期 `persona-core/` 目录只有代码与空壳模板);仓库内无任何运行态数据。⑤ README 新增「🙏 致谢」章节,逐项列出借鉴来源(**开源的是代码,不是数据** —— 人格数据仍只走夺舍导出/恢复导入)。 | | v81 | **v0.74.0:记忆价值驱动 + 情绪驱动宠物**:① **记忆模块升级为「价值驱动」**(`dsh/memory-dedup.mjs`)—— 写入时本地规则打 priority(0-100,**不调 LLM**,同步路径零延迟);中文 bigram Jaccard ≥0.86 判精确重复直接跳过并给已有条目 hit+1 提级,0.62~0.86 疑似同主题先写入、后台 debounce 25s 交给 LLM 做四动作判定(merge/skip/keep);淘汰从按时间 `slice(-200)` 硬砍改成按 pri(`long` 且 `pri≥80` 强保护);加载时自愈去重,**被删/被合并的全部先进 archive 可捞回**(三道保险:归档留底、合并结果比原文短一半直接拒、同轮同条只处理一次)。实测线上 149 条 → 74 条,精确重复归零,`/api/dhc/state` 记到 `异步合并:merge 1 · skip 1 · 归档 2`。② **宠物「🎮 互动」按钮全部下线**,换成只读的「🎭 情绪驱动」卡片(`dsh/pet-emotion-map.mjs`)—— 主人说话 → 场景识别(水/吃/睡/代码/钱/玩/成功/烦躁/节日/亲昵 10 类)× **当前真实 PAD 情绪档位** → 从 106 个真实素材动作里选一个演出。同一句「游泳」:兴奋演蓝鲸现世、平静演鲸鱼尾巴拍地、低落直接躺下;学习表按 `(场景|情绪)` 记命中/失手自行迭代,第二次起 `from:learned`;90 秒同场景冷却,换话题随时可演。③ **宠物面板按钮全清**(79 行绑定,15 个 id 零残留),名字改为 `applyLoaded` 自动跟随(实测「mcore机器核心」→「小助理」即时同步)。④ **门禁**:`dsh/memory-digest.mjs` / `dsh/memory-dedup.mjs` / `dsh/pet-emotion-map.mjs` 全进必需清单。**全量回归 41+26=67 条单测全绿**,release-check 六闸全绿(1007 文件 / 69.0 MB / 素材 106 动画 / 泄漏 0 命中)。 | | v80 | **宠物宿主真正自持 + 网页渲染器内联(v0.73.0,2026-11-03 通宵修)**:主人卸载 dsh-pet 后要求 mcore 完全自带其功能,本轮把最后两块补齐。① **宿主默认自持**:MCORE_PET_HOST 默认 1(上一版默认 0 把宿主甩给独立 dsh-pet,主人一卸载,/dsh-pet-7340/* 全线 404,mcore 的可见形态全部消失——后端 /api/dhc/* 其实一直 200,看着却像插件没了);全量宿主 dsh/pet/dsh-pet-full 能 import 就用全量的,缺 @electron/get 时自动降级 dsh/pet-host.mjs。② **简化版 config 结构对齐全量**:/config 现在补 pets[](id/name/display/size/position/开关),否则桌面 helper 读完 config 拿不到宠物列表会**静默退出**(进程没了、窗口不出来、stderr 一个字不报,实测踩过)。③ **网页渲染器改为打包内联**:client-entry.mjs 直接 import ./pet/vendor-client.js,不再运行时 createElement(script).src=/api/dhc/pet/client.js——桌面窗口页面是 dsh-app://app/ 自定义协议,以斜杠开头的相对路径会被协议处理器吃掉、**根本不发 HTTP**(文件探针实测:node 直接请求有命中,浏览器刷新 0 命中),渲染器永远加载不上。④ **client inject 补 locale**:渲染器要 ctx.locale,只声明 slots 会抛 cannot get property locale without inject(被 try/catch 吞掉,面板正常而宠物不画)。⑤ **删掉清单里不存在的 @deepseek-ai/dsh-client-runtime**:DSH 0.2.1-rc.5 的 69 个 dsh-client-* 里没有这个包,inject 条目只是激活排序,但名字错了会误导排障。⑥ **桌宠窗口落位**:position.corner 由 top-right 改 top-left(窗口宽 924px、屏幕宽 1707px,右上角定位会让窗口右边界超出 453px,宠物画在窗口右下角正好出界——宠物不见了其实是画在屏幕外)。⑦ 排障基建:/api/dhc/pet/client.js 加文件探针(~/.dsh/mc-pet-probe.log,带 UA/referer),mcPetAttach 失败改用页面 HUD 显示错误(document.title 会被 DSH 覆盖,不可靠)。**实测**:release-check 六闸全绿(1003 文件 / 68.9 MB / 素材 106 动画 / client 产物 272965 B / 版本三维一致),/dsh-pet-7340/{state,config,models,thumb,pic,font} 全 200,桌宠窗口 visible=True 且画面正常(气泡「正在处理任务呢」);dsh-pet 卸载状态下 bundles/deps/node_modules 三处均无残留。 || v79 | **v0.72.1:走 npm 分发,别人不用 GitHub 权限也能装**:① 版本 0.72.1(`package.json` / `dsh/index.mjs` 的 `PLUGIN_VERSION` / README 封面 alt·徽章·安装示例、以及 CHANGELOG 之外的历史引用不动)——`release-check` 的「版本三方一致」用 tag 卡住;② **npm 分发**:包名 `@muvuula/mcore`(registry 上未被占用),发布后一条命令装 `dsh plugin --profile

add @muvuula/mcore@0.72.1`,不需要私有仓库授权;包内自带 1001 文件 / 68.7MB(含 106 个宠物动画),装完即用,**不走 postinstall 下载**;③ 发布前发现 `npm whoami` 报 `ENEEDAUTH`、`@muvuula` 作用域在 npm 上不存在(`Scope not found`)——**这两步只能由账号主做**(`npm login` + 建 org),本机不存密码;④ 泄漏扫描**跳过随包发的第三方 `node_modules`**(`dsh/pet/dsh-pet-full/node_modules/env-paths` 的 readme 带上游作者的示例用户目录,误报 4 处;顺带把自己注释里写的示例路径也改掉,差点被自己的规则拦住);⑤ 升级检查第三级源补 `gh auth token` 兜底(环境变量没设也能查私有仓库 Releases)、并已补发 GitHub Release `v0.72.0`(此前 Releases 停在 v0.58)。**实测**:`release-check` 6 闸全绿(1001 文件 / 68.7 MB / 泄漏 0 命中),`npm pack` → 干净目录安装 → `import('@muvuula/mcore')` 成功。 | | v78 | **插件升级按钮修好(v0.72.x)**:① 弹「GitHub 仓库暂无 release(HTTP 404)」**不是仓库没发布 Release,而是仓库是私有的**——`api.github.com` 匿名访问对私有仓库的 repo / releases / tags 一律 404;而且 Releases 停在 v0.58.0(tag 已到 v0.72.0),就算带 token 查 `/releases/latest` 也永远只会得出「最新 = 0.58」。② 改成**三级版本源**:`detectLocalSource()` 读 profile 依赖里的 `file:` 规格 → 源码 `package.json` 版本(本机开发态零网络,37ms 返回);`gitLatestTag()` 走 `git ls-remote --tags`(私有仓库靠本机 git 凭据,宿主 shell 起不来时用 `execFileSync` 兜底,与 `readMachineGuid` 同款);最后才落 GitHub Releases(可选 `GITHUB_TOKEN`/`GH_TOKEN`)。第一个报「有更新」的源直接返回,其余只兜底,返回体带 `source` 标明来源。③ **升级动作按装法分流**:`file:` 安装 → `plugin add file:<源码目录>`(不把开发态切成 git 副本),git 安装 → `plugin add github:…#v`;命令行写进 changelog。④ 面板反馈:已是最新时按钮短暂变「✅ 已是最新」+ tooltip 带版本与来源(原来只改 tooltip,看不出点了有反应)。⑤ **实测**:`POST /api/dhc/chrono/upgrade-check` → `{source:'local',current:'0.72.0',latest:'0.72.0',needsUpgrade:false}`,`upgradeStatus.remoteChecked=true`(2.3s,含 git ls-remote);`release-check` 6 项全绿。⑥ **GitHub 侧补发正式 Release `v0.72.0`**(此前 Releases 停在 v0.58):第三级源现在能拿到真版本号,token 依次取 `GITHUB_TOKEN`/`GH_TOKEN` → 本机 `gh auth token`(实测 200 + `tag_name=v0.72.0`);匿名访问仍是 404(仓库私有),这是预期而不是故障。 | | v77 | **夺舍 / 重生 / 新生:换电脑换设备整套人格可迁移(v0.72.x)**:① **数据口径一分为二**——「夺舍」= 备份(导出迁移包),「重生」= 恢复(导入,`merge` 并集去重 / `replace` 全量接管),**面板上只有这两个按钮**——没有备份文件时插件本来就空白启动、自己长记忆,不额外做第三个入口;纯逻辑全在新增的 `dsh/soul-migrate.mjs`(不碰 DSH 上下文,可脱离 harness 单测),`dsh/index.mjs` 只负责取运行态、落盘、记账。② **修掉一个换机必踩的洞**——启动绑定原本 `const sameDevice = id.machineId === core.heart.machineId` 算完就丢,直接覆盖 `machineId`:换机等于把传承抹掉。现在 `heart` 增 `origin`(出土地)/ `soulOrigin` / `rebornCount` / `migrations[]`(换机流水),`migrateHeart()` 统一收口,启动检测到机器码变化记 `rebind` 里程碑。③ **合并必须两边都不丢**——笔记按 `at`+文本指纹去重(**不能用 id**:applyLoaded 落盘只留 text/at/tier/cat,带 id 的包跟本机永远对不上,每合并一次翻一倍,实测复现过),技能按 name 去重 + uses 取大 + steps/pitfalls 并集,知识库按 title 取新,情感关系取大不回退,身体/大脑/成长取大,里程碑/情报/图谱节点与边并集(悬空边过滤掉)。④ **校验**——迁移包带 sha256(`stableStringify` 归一化,key 顺序无关),内容改一个字直接拒收,确认无误可 `allowChecksumMismatch` 强制导入;结构校验把 `notes:null` / `skills:"garbage"` 这类脏输入全部吞掉不抛错(applyLoaded 仍是唯一权威校验入口)。⑤ **接口 + 面板**——新增 `GET/POST /api/dhc/soul/export`、`GET /api/dhc/soul/heart`、`POST /api/dhc/soul/import`(dryRun 预览 / merge / replace)、`POST /api/dhc/soul/newborn`(必须 `confirm:true`);面板「夺舍」卡片加一行 **📦 导出迁移包 / ⬆ 导入合并 / 🆕 新生** + 心脏档案行(身体|出土地|换机次数),导入先弹预览再确认。⑥ **发布门禁**——`.gitignore` 加 `mcore-soul-pack-*.json`/`mcore-soul-*.json`;`release-check` 的必需清单加 `dsh/soul-migrate.mjs`,禁入清单加「迁移包/快照/人格运行态」两条;`npm run test:soul`。⑦ **实测**——`soul-migrate.test.mjs` A1-A8 + B1-B9 全过(打包/校验拒绝篡改/合并并集/幂等/脏数据/心脏迁移/预览/上限裁剪/真 HTTP merge+replace+newborn+落盘核对),`release-check` 6 项全绿(664 文件 / 66.6 MB),安装副本冒烟 84 条路由含全部 4 条新路由 | | v76 | **v0.72.0 发布收尾:干净 clone 验证 + 源码指纹归一化**:① **干净 clone 上自检原本必红**——`git clone` 到临时目录跑 `release-check`,实测报 `产物指纹 a64a09b9 ≠ 当前源码 0e7bf622`。根因不是产物过期,而是仓库历史文件是 **CRLF**、`.gitattributes` 声明 `eol=lf` 让 clone 出来的工作区变 LF —— 同一份源码在两台机器上行尾不同 → **源码指纹不可复现**。修法:`sourceFingerprint()` 在 hash 前把 `\r\n` 归一成 `\n`(指纹只该表达「源码语义有没有变」,不该表达行尾)。② **实测验证**:干净 clone 跑 `release-check`(**不带 `--allow-untagged`**,tag 必须真对齐)6 项全绿 `exit=0`、`v0.72.0` 三方一致;4 套测试 bridge/fusion/kb/chat-contract 全过。③ 测试徽章改用真实断言数(**4 suites · 74 asserts** = bridge 22 + fusion 8 + kb 21 + chat-contract 23),原写 "23 cases" 只是单个文件的数。④ **tag 与 master 对齐**并强推:此前 tag 指向 `c88080f`、落后 master 一个 commit,发布物缺 `.gitattributes`;现 tag → `7640091` = master HEAD。 | | v75 | **仓库整理与美化(v0.72.0 收口)**:① **删重复**——`dsh/pet/runtime/` 与 `dsh/pet/dsh-pet-full/runtime/` **逐字节相同(15/15)且全仓零引用**,删掉前者;`archive/dynamic-plugin/{client,host}-v21.js` 与同目录标准名同 hash,删掉重复的两份。② **修掉一个会让干净 clone 自检必红的回归**——`.gitignore` 里原本忽略 `dsh/client.raw.js`,而 release-check 第 5 道闸要用它重算产物;实测删掉 raw 后 `❌ 缺 dsh/client.raw.js(无法校验产物来源)`。现改为**入库**(~29KB,不是素材量级),并顺带重排 `.gitignore` 分组(依赖/本机状态/私密/杂物/构建产物/素材)、补 `*.tgz`。③ **目录规范**——一次性设计稿 `docs/superpowers/specs/2026-08-14-*.md` → `archive/design-notes/`(它不是活的文档);`logo/豆包 (1..3).png` → `logo/mcore-logo-{a,b,c}.png`(无任何精确文件名引用,安全改名)。④ **README 美化**——版本徽章/封面 alt/安装示例/tag 全部对齐 v0.72.0,新增「自检 5 道闸」「4 套测试」两枚徽章;目录树重写(**删掉了根本不存在的 `cache.mjs`**,补齐 `client-wrap.mjs` / `client.raw.js` / `dispatch/` / `dsh-pet-full/` / `docs/` 新布局);新增 **「🧹 仓库约定」** 一节,把踩过的坑固化成 5 条硬规矩(产物不许手改 / 同一份不存两份 / 可选依赖只动态 import / 搬目录必须全仓 grep / archive 只放死东西)+ 发布前两条命令。**实测**:`release-check` 全过(662 文件 / 66.5 MB / 素材 106 动画 / client 产物指纹一致 / 版本 0.72.0 三方一致) | | v74 | **v0.72.0 全面审计:加载健壮性 + 素材搬迁收尾 + 宠物对话修好**:① **P0 静态 import 会让整插件加载失败**——`dsh/index.mjs` 顶层 `import * as petFullPkg from './pet/dsh-pet-full/lib/index.js'`,而那个文件 import `@electron/get` 与 `@deepseek-ai/dsh-{home-paths,credentials,llm}`;这些既不在 `dependencies`,干净目录里也解析不到。静态 import 失败是**模块级**的:mcore 整个人格核心 / 面板 / 68 条 API 一起加载不起来,连「降级到简化版 pet-host」的 catch 都执行不到。实测 `node dsh/pet/fusion.test.mjs` 直接 `ERR_MODULE_NOT_FOUND: @electron/get`。改成**顶层 await + try/catch 动态 import**:解析失败只降级 pet-host,其余功能照常;② **素材搬迁只搬了一半**——dsh-pet 整包搬进 `dsh/pet/dsh-pet-full/` 后,`resolvePetDir`(pet/index.mjs)与 `pet-host.mjs` 已改,但 `dsh/index.mjs` 的 `/pet/assets` 路由与 `readDefaultPetCfg` 仍指着旧 `dsh/pet/assets/` → `/api/dhc/pet/assets` 长期回 `webm:0 / memes:0 / fonts:0`(面板身体页、动作池、表情包全空),**接口还回 200 看不出错**。改为「新位置优先、旧位置兜底」;`release-check.mjs` 的必需清单与素材计数、`.github/workflows/ci.yml`、`scripts/import-pet-assets.mjs` 同步到新路径;③ **宠物对话不回(主人长期反馈)**——`/api/pet/chat` 调宿主 LLM 的契约全写错:`system` 当成 messages 里一条(真契约是 `stream()` 顶层参数)、`content` 传裸字符串(必须 `[{type:'text',text}]`)、没有 `id`/`source`、流块只认 `{text}`(真实是 `{type:'text-delta',text}`);再叠加 `resolveModel()` 兜底到本机**不存在**的 `deepseek-chat` → 流永远为空 → 一律 502 `empty reply`。现改为:新增 `resolveRealModel()`(只认宿主 `agentDefaultModel` 或遍历 provider 拿到的第一个**真模型**,拿不到就明确报 `provider-missing`,不再猜模型);新增 `petChatLlm()` 按正确契约调用;mcore 通过 `applyPetBridge({llmCall})` 把生成统一收到自己这边(**单一入口**,桥自带的 `defaultLlmCall` 只在「没装 mcore、单开宠物桥」时兜底),并返回可排障的 `code`(`provider-missing` / `llm-threw` / `empty-reply`);④ **同步脚本不再留残余**——`sync-mcore.ps1` 由 `/E /XO`(只增量、不删)改 `/MIR`(源删目标也删),并加「源 `index.mjs` 不存在就不动」的防呆:此前删掉的功能在加载副本里永远留着,「删干净」根本做不到;⑤ 版本 0.72.0。**实测**:`release-check` 全过(675 文件 / 60.6 MB / 素材 106 个动画 / 版本一致),fusion(75 条 `/api/dhc` + 5 条 `/api/pet`、`state` 200)全过、bridge 6/6、kb 7 项全过,`/api/dhc/pet/assets` 从 `counts 全 0` 变为 `webm:106 memes:27 fonts:1 pics:8`;⑥ **模型思考过程泄漏进宠物回复**——`petChatLlm` 的流解析带一句 `else if (typeof chunk.text === 'string') out += chunk.text` 兜底,把 `reasoning-delta`(模型内心独白:英文「The user asks…」/ 中文「用户问在吗…我该保持简短」)也拼进了正文,主人看到一大段自我分析。现在按 chunk 类型明确丢弃 reason/think,并对「类型不分、思考混在正文」的老 provider 加内容启发式 `stripLeadingReasoning()`(英文思考按首段中文起点切;中文思考按元话语密度 + 「正文首句必须是短对话句」切,正常中英文回复与代码块不会被误伤),回归用例见 `chat-contract.test.mjs` 5a/5b/5c/6/7;⑦ **静默失败治理**——新增 `noteSoftFail()` + `diag.softFails`,把 18 处「try 有副作用(写缓存 / persist / mkdir / 读配置)+ catch 空」改成记录(探测式空 catch 原样保留),`/api/dhc/state` 可直接看到;`readJsonBody` 加 2 MB 上限(原来超大 body 双份进内存);⑧ **构建链 fail-fast + 产物门禁**——包装逻辑抽成 `dsh/client-wrap.mjs`(build 与校验共用一份),`dsh/client.raw.js` 按产物回填对齐,`build-client.mjs` 新增 `--verify`、esbuild 失败即删半成品并退出、无 esbuild 时自动降级为自校验;`release-check.mjs` 新增第 5 道闸:产物必须带源码指纹且与重算结果逐字节一致(**手改 client.js 直接拦下**,已用两条负向测试验证) | | v73 | **分发复用 harness 聊天框(v0.63.2)**:主人要求「这个框能不能和 harness 的聊天框用同一个分发按钮,只是选择切换」。① **删掉面板里那个独立任务输入框**,面板只剩目标选择(智能分配 / 具体 agent),点选即生效、再点取消;② 任务内容 = **harness 聊天框里的文字**,不另存;③ 分发模式开着时 **Enter 派发**(`keydown` capture 阶段 `preventDefault` + `stopImmediatePropagation`,Shift+Enter 仍换行,`isComposing` 跳过中文输入法选词,未开模式时 Enter 行为完全不变);④ 结果改小浮层回显(30 秒自动收),派发后清空聊天框;⑤ 按钮文案随目标变(`分发` / `分发 · 豆包` / `分发 · 智能分配`),开启态金点 `#B8860B`;⑥ 聊天框容器读写做了兜底:`textarea` 走原生 value setter + `input` 事件,`contenteditable` 走选区 + `execCommand('delete')`。**实测心跳 `uiPings: 1` 证明新包在浏览器真的加载了** | | v72 | **分发按钮并入输入框底排(v0.63.1)**:使用者要求「放到模型选择器左边、配色一致」。改为内联药丸而非右下角浮层——运行时按可见文本找模型选择器(`DeepSeek-*` 等),把按钮 `insertBefore` 到它左边同一行,并确保父节点是 flex;配色取该区域体系:藏青 `#1B3A5C` 文字 + 浅灰蓝底 `#EEF2F9` + 细边,开启态加深底色并用金点 `#B8860B` 呼应右侧「· Max」金色。面板改浅色主题、按按钮 `getBoundingClientRect` 向上展开。React 重渲染会冲掉按钮 → `MutationObserver` + 2.5s 兜底 interval 重新挂载;找不到锚点(不同版本/不同模型名)则退到右下角固定位(`data-fixed=1`),不静默消失 | | v71 | **分发模块(v0.63.0):把任务派给本机其他 agent**。三层能力如实分级,不糊弄:① `cli`=hermes/qwen/opencode,真调用拿返回文本;② `cdp`=豆包(`--remote-debugging-port` 启动后),后台注入文字+回车+读回复,**不抢焦点**;③ `open`=Ekko/WorkBuddy(Electron fuses 禁调试参数,实测带参数启动即退出/进程数 0),只能打开+任务进剪贴板,返回 `degraded:true` 明确标注。接口:`GET /api/dhc/agents`(实时探测 7 个 agent 可用性)、`POST /api/dhc/dispatch {task,target?}`(target 缺省=按 tags 智能分配 + 权重学习)、`GET /api/dhc/dispatch/status`。UI:`dsh/dispatch/client-inject.js` 注入 client.js——输入框右下固定「📤 分发」按钮 + 弹出 agent 面板(智能/手动选)、开启时对话框容器加淡色底+描边、结果回显、降级时自动把任务放剪贴板;带 `?ui=1` 启动心跳便于验证包是否生效。豆包回复抓取用稳定选择器 `[data-testid="message_text_content"]` 按节点增量取,实测 12×12→`144` 5.4 秒(旧版 diff 页面文本法抓到「成」且慢 45 秒)。关掉:`MCORE_DISPATCH=0` | | v70 | **面板标题简化为 mcore(v0.62.3)**:使用者要求把「mcore机器核心 · mcore控制面板」改成「mcore」。① `dsh/client-dhc.mjs` 标题改为 `mcore`;② 构建产物 `dsh/client.js` 同步手改(esbuild 转义串 `mcore\u673A\u5668\u6838\u5FC3 \xB7 mcore\u63A7\u5236\u9762\u677F` → `mcore`,因 esbuild spawn EPERM 无法重构建);③ `dsh/index.mjs` 面板 i18n 的 zh/en 两处 `title` 一并改为 `mcore`(`` 服务端渲染已验证为 `mcore`);④ **badge 徽章仍保留「mcore机器核心」**,需要一起改说一声 | | v69 | **控制面板去掉三个冗余入口(v0.62.2)**:使用者要求删掉设置页「mcore机器核心 · mcore控制面板」右侧的三个链接(新窗口打开 / 个股盯盘 / 导出备份)——面板本身在下方 iframe 里就是同一份内容,三个入口重复占位。改动:① `dsh/client-dhc.mjs` 里删掉三条 `createElement('a')`,只留标题;② **构建产物 `dsh/client.js` 同步手改**(esbuild 在受限环境 spawn 返回 EPERM,无法重新构建,遂按 `createElement("a", { href: "/api/dhc/{panel,stock,backup}" …)` 精确摘除,`node --check` 通过);③ 三个页面仍可直接访问:`/api/dhc/panel`、`/api/dhc/stock`、`/api/dhc/backup`;④ 想整块去掉设置页签:给 `cordis.patch.yml` 的 `dhc-core` 行加 `disabled: true`(连带人格核心一起停) | | v68 | **v0.62.1 宠物真正显示出来(三处全链路阻塞逐一击破)**:① **`/broadcast` 也要求 `surface`**:只给 `/anim` 加过,气泡一直 `bad-request` —— 补 `surface=any`(显示在哪个界面由 dsh-pet 配置决定,桥不替它选);② **profile 覆盖层按 id 禁用优先级最高**:`~/.dsh/profiles/desktop/cordis.patch.yml` 里有一条 `- id: dsh-pet / disabled: true`(用户早前在插件市场关过留下的),**压过 mcore patch 里的 insert**,导致「装了也不出现」;改为 `disabled: false` 后热重载即生效(已备份原文件);③ **桌面窗口跑到屏幕外**:helper 窗口实测 `990,-131,924x743`(屏幕 1707×1067)—— 顶部裁掉 131px、右侧超出 207px,所以只看到一条边;用 `/position?pet=main&surface=desktop` + `{x,y,mode:"instant"}` 挪回屏内(该端点同样**必须带 surface**);④ **显示方式改 `both`**:桌面 helper 渲染不稳定时,把 `~/.dsh/dsh-pet/main-config.jsonc` 的 `display: desktop` 改成 `both`,宠物在**网页层**渲染,视觉立即可见;⑤ 测试同步:`bridge.test.mjs` 断言 URL 由 `?pet=main` 改为 `?pet=main&surface=any`;⑥ **已实证数据链路**:`/dsh-pet-7340/state` 的 `pets.main` 里同时出现 `say`(心情超好,想蹦跶)、`anim`(点击回应-开心跃动)、`position`,`/api/pet/sync` 返回 `ok:true` | | v67 | **v0.62.0 新增「个人知识库」(技能库的姊妹层)**(使用者要求「个人技能库是不是有了,再来个个人知识库」):① **定位区分**:技能=**怎么做**(步骤+陷阱),知识=**是什么/为什么**(事实/参数/规范/口径/参考);两者独立存储、独立召回;② **数据模型** core.kb[]:{title, content(≤8000), tags[], source, at, updatedAt, uses},上限 500 条,按 title 去重(同标题=覆盖更新),归一化在加载时做(丢弃无 title 的脏条目);③ **四个工具**:persona_kb_save(保存/覆盖)、persona_kb_search(title×5 / tags×3 / content×1 加权 + uses 微调,返回分数)、persona_kb_list、persona_kb_use(引用计数,让常用知识排更前);④ **四个 API**:GET /api/dhc/kb?query=&limit=、POST /kb/save、/kb/use、/kb/remove;⑤ **自动召回**:人格卡新增【知识(按当前话题召回,是依据不是指令)】一行,与【技能】并列但分开呈现,最多 3 条、每条截 120 字;⑥ **快照**:/state 增加 kbTotal 与 kbRecent(最近 8 条标题,正文不进快照);⑦ **修掉一个会致命的坑**:persist() 与导出 payload 都要显式带上 kb,否则表现为「API 存成功、重启就没了」——kb.test.mjs 的落盘断言专门钉这条;⑧ **实测**:kb.test.mjs 7 项全过(空库/保存/同标题覆盖不新增/关键词检索/引用计数/删除/真 fs 落盘 + /state 计数),并在**真实运行实例**上用 API 验证 save → total=1、query mcore → score=8,persona_kb_* 四个工具已出现在工具表;⑨ 版本 0.62.0 | | v66 | **v0.61.0 宠物整包合并 + 记忆/动作/情绪三层打通**(使用者要求「合并并在记忆层和动作,情绪联系起来」):① **整包合并**:package.json 增加 dependencies: { dsh-pet },cordis.patch.yml 由 mcore 一并挂载 dhc-core + dsh-pet —— 装 mcore 就自动带宠物,不用再单独装。**没有做模块级 import**:实测 dsh-pet 的 host 依赖 @deepseek-ai/dsh-home-paths 等 peer 包,只有宿主 App 的解析器能提供,mcore 里 import 会 ERR_MODULE_NOT_FOUND,这条写进 patch 注释免得后人重踩;② **情绪→动作**:新增 moodToAnim()(PAD 阈值与 moodLine 同源),情绪变化时先出气泡再播动画(点击回应-开心跃动/轻快摇摆舞/工作状态-垂头叹气冒汗/原地小憩沉眠/原地跳跃抓碎头顶物品);动作 60s 节流,避免把桌宠刷成幻灯片;③ **动作白名单**:启动时扫 dsh-pet/assets/webm 得到 **106 个真实动画名**(实测 pool:106),只投池内名字,池外一律拒 —— 直接投给渲染层会 ad-request;④ **新增 POST /api/pet/act**:外部可直接点播动作 {name, force?},返回 pool 与 petDir 便于排障;⑤ **记忆层**:情绪变化每小时最多落一条 kind:pet-mood 到 Hindsight(document_id 按小时幂等),对话记忆沿用 /api/pet/chat(召回→生成→写回);⑥ **互动联动动作**:摸头→蝴蝶蜜蜂环绕头顶开花,success→放烟花,failure/criticism→工作状态-垂头叹气冒汗;⑦ 测试: usion.test 路由断言 4→5,bridge/integration 同步更新;实测 fusion/bridge/integration/chat-e2e 全过, elease-check 版本一致 0.61.0 | | v65 | **v0.60.2 宠物真正融合进单插件 + 装进本机 desktop profile**(使用者要求「做成插件啊,融合 pet 的插件」):① **架构收敛**:v63 把宠物拆成第二条 cordis 行(`dhc-pet`),使用者要的是**一个插件**——现改为 `dsh/index.mjs` 顶部 `import { applyPetBridge }`,在自身 `apply()` 里直接调用,`cordis.patch.yml` **回到只有一行 `dhc-core`**;`dsh/pet/index.mjs` 重构为 `export function applyPetBridge(ctx, opts)`(可被 mcore 内联调用)+ 保留默认导出的插件对象(`mcore/pet`,供只想单开宠物桥的场合);② **可关闭**:环境变量 `MCORE_PET=0` 只关宠物桥(人格核心照常),`disabled: true` 关整个插件;③ **修掉 `/api/dhc/state` 500**:`snapshot()` 里 `s.steps.length` / `s.pitfalls.length` 在**从 hermes 劫持导入的技能**上会抛 `Cannot read properties of undefined (reading 'length')`(实测该 state 的 5 条技能只有 name/description/trigger/uses/source/at,没有 steps/pitfalls),已改 `(s.steps || []).length` / `(s.pitfalls || []).length` / `uses: s.uses || 0`,并用真实 `persona-core.json` 复现旧写法崩溃、新写法正常;④ **新增 `fusion.test.mjs`**(`npm run test:pet:fusion`):**只 apply mcore 一个插件**,断言同时注册 64 条 `/api/dhc` + 4 条 `/api/pet`、`/api/pet/status` 200、`/api/dhc/state` 200——这是「融合成功」的直接证据;⑤ **本机落装**:`desktop` profile 由 Electron 独占(`dsh plugin --profile desktop add` 报 `managed exclusively by the Electron application`),改为按 profile 结构手工登记——依赖写 `"mcore": "file:C:/dsh/DeepSeek-Harness-Core"`、`dsh.profile.bundles` 追加 `mcore`,运行时文件同步到 `profiles/desktop/node_modules/mcore`(24 文件 / 0.82MB),改前已备份原 `package.json`/`cordis.patch.yml`/`cordis.yml`;⑥ **依赖瘦身(让安装不再依赖 GitHub)**:把 5 个五官插件从 `dependencies` 移到元数据 `_organPlugins`——mcore 本体**根本不 import 它们**(只有 brain/chrono 的关键词表里出现 modlens 字样),留着会让安装被迫去 `git+https://github.com/...` 拉包,而本机 `github.com:443` 不通导致整包装不上;⑦ 实测:`node --check` 全过、fusion 5 项断言全过、bridge 6/6、integration 真 mcore 双向联动、chat e2e 真 daemon 记忆闭环、`release-check` 版本一致 0.60.2 | | v64 | **v0.60.0 收口为私有专有发布:许可证变更 + 仓库美化**:① **许可证 MIT → 专有(source-available)**(使用者要求「别人可以使用但不开源」):`LICENSE` 重写为中文为准 + 英文对照的 `mcore Proprietary License`——**允许**在自己机器上安装/运行/自用、为自用本地修改、私人场合向不超过 5 人演示;**禁止**复制/发布/镜像/转售/再分发(含源码与打包产物)、任何商业用途、移除版权声明、以作者名义发版、用源码训练模型;违约立即终止许可。**明确写明 v0.58.1 及更早版本发布时为 MIT,历史版本权利不受影响,自 v0.59.0 起适用新许可**;② `package.json` `license: "SEE LICENSE IN LICENSE"`(npm 认得的自定义许可写法,不再伪装成 MIT);③ **README 门面清理**:删掉私有仓库对外必然失效的 shields 徽章(Stars / GitHub Actions CI)——私有仓库外部访问这些徽章只会显示 not found;换成版本/Node/平台/all-local/宠物五枚静态徽章;新增「私有源码,请勿再分发」的顶部声明;④ **新增目录 TOC**(10 项锚点),别人要能自己找路;⑤ 安装章节更新到 0.60.0,并补 `dsh-pet` 渲染层的单独安装命令与「不想要宠物怎么零成本关掉」;⑥ **许可证章节重写**:变成「可以 / 不可以」两列表格,比一段法律话好读;⑦ 顺手修掉 v63 留下的文档缺陷——插入宠物章节时误删了 `## 🧬 学习进化` 标题,导致 6 条进化内容挂在宠物章节下(已补回标题并验证 6 条归位);⑧ `SECURITY.md` 支持版本改为 `v0.60.x`;`archive/poster-0.46-era/poster-copy.md` 的 `· MIT ·` 改为 `· Source-Available ·`;⑨ **可用性实测**:`npm pack --dry-run` 24 文件 / 269.5 kB,`dsh/pet/*` 已包含;`release-check` 语法 15 文件 / 模板平衡 / 泄漏扫描 54 文本 0 命中 / 版本一致 0.60.0 全过,并注明历史 tag 打完后即消除那条 untagged 警告;⑩ **修掉一个会误导别人的真坑**:`mcore` 这个包名在 npm registry 上**已被他人占用**(`mz121star` 的 `a powerful nodejs module`),原 README 写的 `dsh plugin --profile web add mcore@0.60.0` 会让别人装到一个完全无关的包——现已改为**三条真实可用的安装路径**(本地 tarball 分发 / 私有仓库直装 / 维护者本地目录),并在安装段落顶部加醒目警告「不要 `add mcore`」;同时说明「npm 包内含 798KB 源码,公开发布等于变相开源」这一矛盾,供后续决定是否改用 scoped 包名(`@muvuula/mcore`,实测未被占用) | | v63 | **宠物回归:改为独立插件 + 外部渲染 + 长期记忆(v0.59.0,使用者要求「宠物功能全部替换为 dsh-pet,功能都链接上,这个插件和 daemon 融合升级」)**:① **定位反转**:v51 删掉的自研形象引擎不再重建——**渲染归 dsh-pet(独立发布包),人格/情绪/关系/记忆归 mcore**;② **新增独立插件 `dsh/pet/`**:`index.mjs`(宿主桥,inject 只有 `timer`+`webServer`,不依赖 mcore 任何内部服务)、`hindsight.mjs`(本机 Hindsight daemon 客户端,零依赖)、`smoke.mjs`(真实打 daemon 的冒烟测试)、`README.md`(接线图 + 环境变量表 + 接口契约 + 已知边界);③ **双向联动**:mcore → 桌宠 走 `POST /dsh-pet-7340/broadcast?pet=<id>`(情绪变化出气泡,按文案去重防刷屏);桌宠 → mcore 走 `POST /api/dhc/emotion`(摸头/戳/表扬等十个触发器,**不自造词表**,情绪唯一持有者仍是 mcore);④ **记忆融合(核心)**:新增 `POST /api/pet/chat`——Hindsight 召回 → 拼 system(明确标注「是过去的记录可能过时,不要当当前事实复述」)→ `ctx.llm` 生成 → 写回 Hindsight(`document_id` 按天固定,幂等覆盖)→ 投喂 dsh-pet 显示;**替代 dsh-pet 自带的本地 5 轮记忆**,daemon 离线时自动降级为无记忆对话不阻断;⑤ **新增诊断口** `GET /api/pet/status`(三层各自在线状态 + 路由表 + 桥接错误计数);⑥ **残留清理**:`brain.mjs`/`chrono.mjs` 分类「桌面宠物」→「形象交互」(关键词改为 dsh-pet/桌宠/摸头/气泡),`cordis.patch.yml` 增挂 `dhc-pet` 行(可 `disabled: true` 关掉),package.json 增 `./pet` 导出;⑦ **设计约束**:不改 dsh-pet 源码(独立发布包,改它会被升级覆盖),本仓库不打包它的 60MB 素材;⑧ **实测**:`node --check` 五文件全过、`smoke.mjs` 打本机 daemon 健康检查 OK / 召回 4 条 / 写入 3327 tokens / 写后立即可召回;`bridge.test.mjs` 6 项接线测试全过(status/sync/event/非法 type 400/无 llm 时 503/方法错 405);`chat.e2e.test.mjs` 真 daemon 对话闭环通过(预置记忆召回 3 条 → chat recalled=6 retained=true → system 带「是过去的记录,可能已过时」标注 → 写回后再召回 5 条 → dsh-pet 收到广播);⑨ **收尾**:README 补宠物章节/端点表/目录结构、新增 `archive/README.md` 说明旧实现仅存档、`petLang` 补注释说明只剩读取兼容;⑩ **双向联动真机验证**:新增 `integration.test.mjs`——把**真 mcore 本体** apply 起来(注册 64 条 `/api/dhc` 路由)与 dhc-pet 挂在同一 webServer,经真 HTTP 验证「mcore 情绪→桌宠气泡」(`心情超好,想蹦跶`)、`?force=0` 去重(`skipped:unchanged`)、「桌宠摸头→mcore 情绪变化」、非法 type 400 且不污染情绪、三层诊断口全绿;⑪ `/api/pet/sync` 新增 `?force=0`(默认强制投喂,去重路径供定时任务/巡检用) | | v62 | **v0.58.1 公开发布硬化(开源首发)**:① **补齐开源门面**:`LICENSE`(MIT)、`SECURITY.md`(威胁模型/上报口径/加固建议)、`CONTRIBUTING.md`(运行时副本纪律/面板模板坑/发版流程)、`.github/` 的 issue 表单(bug/feature/config)+ PR 模板;② **CI 门禁**:`.github/workflows/ci.yml`(Node 20/22/24 × `node --check` × release-check × 模板平衡);③ **release-check 重做**:私人 deny-list 外置到**不入库**的 `release-check.local.json`(公开仓库因此不含任何真实标识),扫描范围从 npm 包清单扩到 `git ls-files` 全量文本(docs 也算),新增 `--allow-untagged` 供 CI 用;④ **新增模板平衡自检** `.github/scripts/template-balance.mjs`:抽出模板字符串(跳过注释/字符串/正则/嵌套插值)→ HTML 标签开闭 + 内嵌 `<script>` 的 `{} () []` 深度——专治 `node --check` 看不见的面板 JS 崩溃;⑤ **隐私文档** `docs/PRIVACY.md`:落盘位置表 + 全部外联清单(行情/搜索/GitHub/skillhub/视觉端点)+ 导出与清除命令;⑥ **README 重写**:前置条件、装后自检命令、隐私与安全、免责声明(交易模块默认 dry-run、不构成投资建议)、贡献与许可证;⑦ **文档脱敏**:`DEVELOPMENT.md` / `CHANGELOG` 中本机绝对路径、历史账号、私人昵称全部泛化;⑧ **automerge workflow 收敛**:去掉 `pull_request_target` 与自动 approve(公开仓库的提权面),改为排除 fork + 纯 API 开 auto-merge;⑨ package.json:`engines.node>=20`、`check` / `check:template` scripts、keywords 扩到 12 个 | | v61 | **v0.58.0 大版本:Studio 布局 + Journey 复刻 + 元核心劫持 + 全局改名 mcore机器核心**:① 面板整体改造 Hermes Studio 布局(左侧导航 7 模块 + 主区切换,米白 #f7f7f4 + 品牌青);② 学习轨迹卡片复刻 Studio Journey 页面(双列布局/12 色板/拖拽缩放/播放动画,hermes journey CLI 同源);③ 元核心知识劫持(Hermes/harness 高信号情报 → 技能/笔记/里程碑/情感/画像全管道,去重幂等)+ 结构化备份 mcore-backup.json 12 分区 + 夺舍/重生双机制;④ 输入源劫持分发路由(统一输入 → 关键词+权重路由到 hermes/claude/codex/mcore,评分自动进化);⑤ 核心档案自动提取/进化(高置信句式识别 → identity 追加式写入,LLM 轨 + 规则兜底双轨);⑥ 大脑卡 ECharts 力导向图(node weight 三重编码 + 点击溯源);⑦ 反斜杠全量 replaceAll(String.fromCharCode(92)) 修复;⑧ 全局改名 mcore机器核心(使用者要求):面板标题/badge/tab/框架名 framework.name/DEFAULT_NAME/soul/签名/README 显示层全改,标识符层(包名 mcore/client id/环境变量/API 路由)保留 | | v60 | **v0.57.0 双线合并:脑图改造 + 品牌落地**:**A. 脑图改 Hermes 式学习轨迹(使用者要求"hermes的学习轨迹替代几个脑图")**:① 两个脑图全换:🧠 大脑·记忆神经网络(力导向图)→ 关键词标签云(点击看关联笔记)、🧬 学习轨迹·记忆知识图谱 → 技能库+最近笔记+里程碑时间线(Hermes 式);② 图谱重建停用(scheduleBrainRebuild 不再 rebuildBrain/llmRefineCategories——图谱重建是启动风暴/CPU 元凶);③ 启动重活延迟错峰(画像分析 30s、体检 20s、首次抓取 5 分钟,启动响应 2-4 分钟 → 8 秒);④ 前端轮询降频 3s→10s;⑤ memory-graph API 改轻量结构。**B. 品牌落地 + 面板增强**:① 面板新增「🌐 这个网站」按钮(重启按钮旁,跳转 mcore.fit,zh/en 双语);② 新 LOGO(豆包生成图:面板顶部 logo + favicon,data URI 内嵌零依赖);③ 品牌文档:docs/BRAND.md(完整品牌设计方案:定位/LOGO/VI 深空蓝#102040+拟合青#22D0C0/字体/话术/避坑)+ docs/DEVELOPMENT.md(开发文档:纪律/工作流/踩坑/发布);④ README 品牌化(标题 MCore·mcore.fit、删除已移除形象功能残留);⑤ 归档 0.46 时代鲸系文案与形象截图;⑥ dev 工作区迁移:仓库根 → 独立本地工作区(harness 插件位置不动,只同步内容);⑦ 修 PLUGIN_VERSION 遗留 0.48.0→0.57.0(面板升级状态显示错误);⑧ 隐私清理:硬编码用户路径(OCR 脚本/Hermes scripts 目录/search_files 默认值)→ 环境变量动态化 | | v59b | **面板标题去重(v0.56.1,使用者要求"MCore-Core(核心)改成MCore(核心)")**:面板标题/badge 去掉重复 -Core——「MCore(核心) · mcore控制面板」(zh/en 同步,client.js 重建) | | v59 | **全局改名 mcore(v0.56.0,使用者要求"全局修改dshcore为mcore")**:源码/配置/脚本/文档全量 dshcore→mcore、DSHC→MCore——package.json(name mcore)、PLUGIN_NAME、ModuleLoader client id(build-client.mjs)、面板标题「MCore-Core(核心) · mcore控制面板」、profile 依赖与 bundles(node_modules/mcore,旧 dshcore 目录删除)、cordis.patch.yml(loader id mcore)、品牌补丁脚本改名 mcore-brand-patch.ps1(dsh-start.bat/restart*.ps1 引用同步)、persona-core framework.name→mcore;API 路由 /api/dhc 保留(接口稳定);CHANGELOG 历史行保留原名;备份 ~/.dsh/backups/mcore-rename-20260821/ | | v58 | **Token 节省 + CPU 卡顿修复(v0.55.0,使用者问"为什么 Hermes 省 token、harness 费")**:① **personaCard 精简 50%+**(每轮注入 ~4000→~1800 token):合并冗长行(核心档案/心脏/四件套/体检→2行)、器官绑定 6 行→1 行、进化模式 6 层详述→2 行、事件总线架构删除、行为准则 13 条→10 条精简;笔记注入 8→3 条、记忆召回 10→5 条(每条 150→80 字);② **ingest 快速节流修复 CPU**:harness 高频 session 事件风暴导致 ingestConversation 持续执行(dialogSimilar/分词)→ 持续 100% CPU;加 5 秒事件级快速节流(风暴时直接跳过),实测稳定期 CPU 从 100%→0%、API 从 2s+→3ms;③ 对话沉淀笔记精简(原文 220→120 字 + 关键词 6 个);④ 启动风暴说明:DSH 重启后 2-4 分钟初始化(图谱重建/画像/抓取)CPU 100% 属正常,稳定后空闲 | | v57c | **个股盯盘按钮挂载修复(v0.54.2,使用者反馈"个股盯盘不显示")**:mountStockUnderWorkspace 原依赖 querySelectorAll 找"工作区"文本(DSH Web UI 内容在可访问性树/shadow 结构,主文档找不到)→ 按钮静默失败。修复:① **deepFindText 穿透 shadow DOM** 递归查找;② **备选:直接挂到主侧边栏容器**(.pI_x6G_sidebarCol / [class*="sidebarCol"] / [class*="_rail"],收起/展开都在容器内)——实测按钮挂入侧边栏容器、可见、文本"📈 个股盯盘";③ 顺手修右侧 tab 双📈(title 去掉重复图标);④ 实测:client.js 重建(12KB)、按钮在侧边栏底部可见、右侧盯盘 tab 单📈 正常 | | v57b | **workspaceRoot 优先级修复 + 名字澄清(v0.54.1)**:① workspaceRoot 探测优先级改为 DSHCORE_WORKSPACE > DSH_HOME > 插件配置 > **~/.dsh 探测 > 沙箱工作区** > cwd——wsCandidate 会跟随启动 cwd(从旧工作区启动就指向旧工作区)导致状态分裂,~/.dsh(DSH 权威 home)必须优先;② **名字语义澄清**:`core.name` 是使用者自定义的插件内名称、`framework.name` 是框架名,两者互不覆盖;③ 清理旧工作区里的 persona-core.json 分裂副本;实测 statePath=`~/.dsh/persona-core.json`、心跳正常 | | v57 | **个股盯盘刷新提速(v0.54.0,使用者反馈"刷新有点慢")**:① **fetchViaCurl fastFail**:新增 singleAttempt 参数——股票行情只跑 curl 单 attempt(跳过 powershell 备选,超时减半:东财挂时 12s→6s/源);② **行情内存短缓存**:analyze 加 stockMemCache——quote 5s / 逐笔 8s TTL(盯盘刷新秒回);③ 实测:冷启动 analyze **18.3s → 4.3s**(东财全挂时),涨停池 8.6s;④ 侧边栏「📈 个股盯盘」按钮按使用者要求**保留**(未删除) | | v56 | **统一命名 dshcore(v0.53.0,统一命名:历史旧称不再对外出现)**:persona-core.json 递归替换全部历史旧称 →「dshcore」(name/framework.name/soul/profile/notes/archive/eventLog/learnBuffer 全量),index.mjs ID_STOP + 重启命令正则、dsh-restart-now.ps1 注释、owner-profile.md 同步;备份 .pre-dshcore-rename-20260821;实测 name=dshcore、面板无旧称残留、心跳正常 | | v55 | **记忆成长「越用越聪明」对齐 Hermes(v0.52.0,对标成熟 agent 的记忆成长机制)**:① **对话高信号检测**:ingestConversation 增加偏好/纠正/身份检测(我喜欢/我爱用 → 偏好;不对/错了/应该/别这样/以后都/永远 → 纠正;我叫/我是做/我在…工作 → 身份事实)——命中即 **addProfile 画像 + ⭐ long 长期记忆**,不再一律 short 淹没在自动抓取里(对比前 87% short 全是对话+抓取混存);② **技能迭代闭环**:persona_skill_use 增加 feedback 参数(用后感/踩坑自动追加技能 pitfalls,技能越用越完善——仿 Hermes「使用中发现问题→patch 技能」);③ 记忆防稀释:自动抓取记 short 14 天归档、对话 long 永留(原有 tier 机制保留);④ 实测:工具 20、技能库持久化、心跳正常 | | v54 | **记忆/学习/画像/技能/情感/轨迹 六模块优化对齐 Hermes(v0.51.0,使用者要求"记忆学习能力画像技能情感记忆学习轨迹优化和你一样")**:① **技能库(核心新增)**:core.skills 结构化技能(name/description/trigger/steps/pitfalls/at/uses,仿 SKILL.md),3 新工具 persona_skill_save(任务成功沉淀技能)/persona_skill_list(检索)/persona_skill_use(使用计数),加载去重校验 + persist 持久化 + state 展示(skills/skillsTotal),personaCard 按当前话题召回技能注入(trigger 关键词匹配,越用越熟);② **情感记忆进召回池**:recall() 加入 emotionMemory + emotion.nodes(情感节点参与话题语义召回,回复带出相关情绪记忆);③ **记忆/画像/轨迹**:三层记忆 + 六维画像 + milestones 已具备(召回池含 note/archive/profile/soul/milestone),本次补齐技能与情感两路召回;④ 预置示例技能(涨停复盘/个股盯盘分析)演示。实测:工具 20 个、技能加载持久化成功、心跳正常 | | v53 | **读取工具 + 回复风格对齐(v0.50.0)**:① **新增 4 个读取工具**(工具 13→17):`read_file`(读本地文件,fs 服务 + 行分页 offset/limit)、`search_files`(找文件 find -iname / 内容搜索 grep -rl)、`web_search`(网页搜索,**cn.bing.com 国内直连**——DDG 国内网络不可用已弃用,正则解析 h2>a 标题+链接)、`web_extract`(网页正文提取,curl + 去 script/style/nav/footer + 标签清洗);② **回复风格可配置**:`identity.persona` / `identity.speaking` 支持使用者自定义语气(先给结论、能上列表就不写长段落),profile 追加回复风格规范(改前自动备份);③ 实测:工具注册 17 个含 4 读取工具、Bing 搜索 10 结果解析成功、find/grep 命令可用 | | v52 | **五器官独立化(v0.49.0,使用者要求"让这个插件调用其他插件")**:dshcore 不再内联/嵌套挂载五器官,改为**独立插件模式**——① **根因**:modlens 被 dsh 启动 reconcile 自动加进 bundle 栈(profile deps 有 @liustack/modlens),而 dshcore 的 client.js 又 esbuild 内联了它 → duplicate factory registration(bundle 执行两次),harness 页面打不开;② **改造**:5 器官全部 dsh plugin add 进 profile deps+bundles,dshcore 移除 5 器官 import + mountOrgan 嵌套挂载(host),client-entry.mjs 去掉器官 client import,esbuild 去 alias → client.js 1.27MB→10KB(ModuleLoader.load 只注册 dshcore 1 次);③ **调用其他插件=独立插件模式**:器官各自 apply 注册工具(read_image/at-file/genui/automation/sidebar),经 harness 全局工具系统可用;④ 实测:页面正常无 duplicate、设置出现器官 UI(文件提及/侧边卡片/视觉引擎ModLens)、插件列表 167 全挂载、dshcore API 全 200、股票 analyze 正常 | | v51 | **形象/桌宠功能整体移除(v0.48.0,使用者决定:删除形象,v2rayN 代理正常用)**:① **全部删除**:dsh/avatar-app/ 引擎目录(emotion/actions/anim-engine/bone-engine/behavior/renderer/style.css,13MB)、assets/pose1-8.png + character.png 立绘、桌面形象连接(electron 探测/启动/停止/事件)、/api/dhc/avatar* 与 /pet* 全部路由、/avatar-page /pet-page /assets/pose* /avatar-app/* 资产路由、面板形象区(🐋 开关按钮/iframe/雷达图下方形象框/相关 CSS/文案/JS)、client-dhc.mjs 宠物开关、启动自动拉起、工具标签、API 卡片形象条目、state.avatar 字段;② **保留**:面板中英语言切换(/avatar/lang 改名 **/panel/lang**,avatarLang 字段与 petLang 迁移兼容保留)、五器官(ModLens/at-file/genui/automation/sidebar——genui 自带 avatar 首字母头像组件与桌宠无关)、面板背景改纯色 #0a0c14(原 character.png 背景图随形象删除);③ **备份**:avatar-app + 立绘 + 删除前 index.mjs 存 ~/.dsh/backups/dshcore-avatar-removed-20260821/(24MB,可回滚);④ 清理 <旧工作区> 从 26MB→3.1MB;⑤ 实测:形象路由全 404、面板/股票/语言切换全 200、client.js 重建无 avatar 引用(esbuild 路径须用 Windows 格式 C:/,MSYS /c/ 会 resolve 失败)、面板 HTML div 平衡校验通过 | | v51b | **面板崩溃修复(v0.48.1,8/21 使用者反馈「配置文件信息全没了」)**:删形象时误删/残留导致面板 JS 崩溃——① **i18n 键误删**:删除含 avatarFrameTip 的行时整行删掉,连带误删 `upCard`/`upAuto` 键(zh+en)→ 面板标题变「upCardupAuto」;已从备份恢复;② **两处孤立 `}` 残留**(refresh() 里 avatarRunning 块 + pw 块的闭合):JS 提前闭合/语法错 → 笔记/四件套版本/档案/画像全部渲染中断(显示 0/空);已删并做**面板模板括号平衡校验**(提取模板 `<script>` 段数 `{}` 深度,必须为 0)。**实测**:面板画像/铁律/档案/笔记165/四件套全恢复、stock 页面 200 无残留 | | v50b | **盯盘实时性修复(v0.47.1,8/21 使用者反馈「分时/日K对应不上、刷新不实时」)**:① **analyze 并行化**:quote/日K/分时/逐笔 4 源 `Promise.allSettled` 同时拉取(此前串行,东财挂时 32-60s 卡死)——实测东财全挂时 **32.5s → 5.0s**;② **fetchViaCurl 可配超时**:新增第 4 参 timeoutSec(股票数据 6-8s 快速失败→备源降级,网页抓取默认 15s;此前 curl 写死 30s 且双 attempt 串行);③ **当日K线合成**:历史日K源不含今天,用实时 quote 合成今日蜡烛(open/high/low/close/量/额/换手,`intraday:true`)——日K图最后一根不再停在昨天,与分时完全对应(实测 600272 今日 16.5 一字跌停 -9.98%);④ **分时 preClose 增强**:腾讯 minute 的昨收从 block 层 qt 取([4] 昨收价),前端基准线用 quote.prevClose 兜底;⑤ **前端刷新防堆积**:`__CUR_ANALYZING` 标志,60s 定时器在 analyze 进行中跳过本轮,状态栏显示 `已加载 HH:MM:SS · 120K 121分`。**实测**:analyze 5.0s、当日K线✅、全部路由 200 | | v50 | **workspaceRoot 统一修复(状态分裂根治)+ 股票缓存体系 + 新浪K线备源**(v0.47.0):① **状态分裂 bug 修复**:workspaceRoot 解析优先级改为 `DSHCORE_WORKSPACE > DSH_HOME > 插件配置 > 沙箱工作区 > ~/.dsh 探测兜底 > cwd`——Hermes 桌面 runtime 启动 DSH 时 sandboxPolicy.workspaceRoot 指向 Hermes workspace,曾导致 persona-core.json/股票缓存/学习缓冲整体分裂成两份(8/21 实测:~/.dsh 主状态 144 条笔记 vs Hermes workspace 分裂份 33 条,且交替启动互不读写);现统一到 DSH home(~/.dsh),分裂份 33 条独有笔记已并入主状态,启动脚本(dsh-start.bat / dsh-restart*.ps1)+ setx DSHCORE_WORKSPACE 三保险;② **股票缓存体系**:日K线缓存(60s TTL,analyze 流程写)、公告缓存(1h TTL)、涨停池逐日缓存(当日 60s / 历史 7 天永久)、情报缓存(5min)、搜索联想 localStorage;③ **新浪日K备源**(腾讯 WAF 拦截/东财不稳时兜底,实测 600272 新浪源 120 条);④ 分时量柱增量 volDiff(腾讯分钟接口是累计量,量柱改增量);⑤ 涨停池默认自然日今天 + 返回 tradeDate(不再做 9:25 前回退昨日);⑥ 前端统一 60s 自动刷新(合并 4 个 setInterval)+ 搜索联想本地缓存 + 高度板英雄榜点击修复;⑦ 身份提炼规则增强(姓名/职业/地点强模式 + 历史笔记扫描 + ID_STOP 过滤词)。**实测**:workspaceRoot=~/.dsh、kline/announce 缓存落盘 ~/.dsh/stockdata/_cache、涨停池 43 家、全部 API 200 | | v48 | **形象化升级(全链路「宠物→形象」)+ 桌面形象完整版并入**:按桌面项目 `DeepSeek桌面宠物`(完整版)升级 DSHC 形象体系。① **dsh/pet-app → dsh/avatar-app**(目录彻底改名):并入完整版引擎——**emotion.js v2**(8 姿势立绘 + 像素级情绪换色 + 姿势交叉渐变)、**actions.js**(139 个动作库)、**anim-engine.js**(连续动作混合引擎)、**bone-engine.js**(骨骼变形,简化 Live2D)、**behavior.js**(行为 AI:鼠标感知/深夜犯困/自由漫步/跟随)、**api-server.js**(本地 HTTP API 17860 + SSE)、完整 style.css(488 行动画库)、**pose1-8.png 8 张姿势立绘**;保留 DHC 双向连接(状态同步/台词领取/动作回写/中英联动)。② **index.mjs 全面改名**:`pet→avatar`(变量/函数/路由/日志),面板文案「宠物→形象」,新路由 `/api/dhc/avatar*`(旧 `/pet*` 保留兼容别名);**avatar-page 网页形象升级**(8 姿势切换 + 12 常用动作 CSS 动画 + 情绪标签,embed 模式沿用);`/assets/pose1-8.png` 资产路由新增。③ **client-dhc.mjs + client.js 重建**(面板按钮「桌面形象」)。④ **persona-core.json 全量迁移**(480 处「宠物→形象」:画像标签「AI 宠物家长→AI 形象家长」/铁律/历史笔记/学习轨迹,备份 `.pre-avatar-rename`;`petLang→avatarLang` 加载时自动迁移)。⑤ **实测**:重启后 `/api/dhc/avatar` 200、avatar-page 200(含 pose 路由)、`/avatar/start` 拉起 electron 形象成功(行为 AI 工作:curious/sleepy 状态、本地 API 17860 动作触发 200、139 动作全量) | | v47 | **神经网络升级标准力导向(Force-Directed Graph)+ 历史"乱飘"修复**:面板 `renderNeural` 布局改为 **D3 force 风格标准力导向**:① alpha 冷却仿真(alpha 1→0.0015 自然衰减,电荷斥力 3000/d² + 弹簧引力(理想距离按共现次数收紧 90-20·s)+ 中心弱约束(forceX/forceY,核心词更贴中心)+ velocityDecay 0.4),布局自动收敛后冻结,无固定帧数硬切;② 坐标按 id 缓存(刷新时旧词原地不动、只给新词随机初始位,同数据刷新布局基准零变化);③ 收敛后**待机呼吸**(±1.3px 正弦漂浮 + 半径脉动);④ 单一动画循环,重新渲染先 `cancelAnimationFrame`;⑤ **弹性整体拖拽**(40%/帧追赶 + 按下时锁定位移边界外扩 120px + 软墙力封顶 ±4/帧 + 松手惯性 35% 封顶 ±6/帧 → alpha 重置重新收敛);⑥ 悬停高亮、点击查看关联笔记与邻域扩展、拖拽位移>3px 抑制误触 click。同步修复 `renderGraph` 历史"乱飘"(同款:坐标缓存 + 单一循环 + 弹性拖拽 + 软墙,见本行下方 v47b)。冒烟测试全过(alpha 冷却收敛 400 帧/质心居中/网络展开 277px/同数据零位移/呼吸/弹性拖拽/极端拖动封顶 670/松手重收敛/点击抑制),`node --check` 语法通过 | | v47b | **神经网络/图谱"乱飘"修复 + 待机呼吸 + 整体拖拽(平滑版)**:面板 `renderNeural`(2D 时代)与 `renderGraph` 每 3 秒刷新会把全部节点坐标 `Math.random()` 重排 + 每次刷新叠加永不停止的 requestAnimationFrame 循环(旧循环不取消)。修复:① 节点坐标按 id 缓存(刷新时旧节点原地不动、只给新词随机初始位);② 单一动画循环,重新渲染先 `cancelAnimationFrame`;③ 收敛后转**待机呼吸**(±2.4px 正弦漂浮 + 半径脉动);④ 图谱数据签名不变则不重跑仿真;⑤ 整体拖拽平滑版(弹性追赶 40%/帧 + 按下时锁定位移边界外扩 120px + 软墙力封顶 ±4/帧 + 松手惯性 35% 封顶 ±6/帧)。冒烟测试 6 场景全过,`node --check` 通过(renderGraph 保留 2D 平滑拖拽) | | v22 | **安装进 harness 本体**:DHC 从会话内动态插件升级为常驻 agent preset(`${DSH_HOME}/.agent-presets/dhc/`,行 `name: ./dhc-core.mjs` 随 preset 目录走),DSH 重启不再丢失;`settings.yaml` 设 `agent-presets.default: dhc` 为新会话默认。适配要点:preset 行插件须**对象导出**(函数导出会被当 apply 本体调用,返回对象被丢弃);工具直接构造 registry-ready ToolDefinition(parameters 编译为真 JSON Schema、`output.schema: {}`,动态 DSL 简写 `type:'json'` 在原生注册不可用);`harness.defineTool/registerTool/handle` 全部移除(client RPC 无对应端,HTTP API 接管全部控制面);状态文件定位改 `${DSH_HOME}/persona-core.json`(与旧动态插件同一份,无缝迁移)。`tool-cordis` 行禁用(其 inspect provider 进程级全局注册,同进程只允许一个 cordis 能力预设)。**实测**:standingKeyFor 挂载通过、9 个 host 服务全可见、/api/dhc 路由零错误、HTTP API + 桌面宠物 200、核心状态热加载并真升级 v0.16→v0.17 | | v23 | **五器官整合**:5 个 GitHub 项目经官方 profile 通道装入 harness(`dsh plugin --profile web add ...`,注册为 bundles):眼睛=ModLens `@liustack/modlens@3.16.1`(read_image 视觉桥);左手=dsh-at-file@v0.4.1(@文件引用);右手=dsh-genui(render_ui + 30+ 组件);双脚=dsh-automation#v0.1.5(调度任务);口+工作台=dsh-better-sidebar@0.11.0。配套修复:pnpm-workspace 放行 node-pty/protobufjs 构建 + release-age 门禁排除;at-file 的 codeload TLS 失败改用 git+ 形式安装。**桌面宠物换鲸系少女**:本地 Electron 宠物交互模型(拖拽/戳/三连摸头/右键菜单/气泡/闲置说话/爱心粒子)移植进 /api/dhc/pet-page,2MB 立绘经 /api/dhc/assets/character.png 路由(node:fs 直读缓存),心情 PAD 驱动表情(mood<30 灰化、≥80 高兴弹跳),最新进化里程碑自动气泡播报。人格卡新增【器官绑定】段与进化铁律更新(read_image→眼睛等)。**注意**:宠物页与 5 插件均在 DSH 重启后完整生效(ESM 缓存 + profile bundle 载入时机) | | v24 | **接入 dsh 官方插件通道**:仓库根打包为 bundle 包(package.json 声明 `dsh.bundle.patch: ./cordis.patch.yml`,单行 insert;入口 `dsh/index.mjs` 对象导出,立绘随包走 `dsh/assets/`)。安装即 `dsh plugin --profile web add github:muvuula/DeepSeek-Harness-Core#v0.23.0`。**形态升级**:从"手写 agent preset 目录"升级为 profile bundle(host 组合层)——DHC 全局生效、不挑 preset;`--dump-config` 实测合成树含行,入口模块 import 验证通过。**迁移**:删除 preset 目录并回退 settings 默认(避免重启后双挂载) | | v25 | **插件命名 dshcore**(v0.24.0):包名 `dsh-dhc-core` → `dshcore`(npm 名已确认空闲),bundle 行同步 `name: dshcore`;profile 依赖与 bundle 栈干净切换(remove 旧名 → add `github:...#v0.24.0`),`--dump-config` 与入口 import 复验通过 | | v26 | **备份体系**(v0.25.0):① 专用备份目录 `${DSH_HOME}/backups/dshcore/` 与状态文件分离,每日全量 bundle(状态 + 插件名/版本 + profile 部署配置 package.json/pnpm-workspace/cordis.patch/settings.yaml),14 份滚动保留(node:fs 直写,不占沙箱策略);② 一键全量备份/恢复 API:`GET /api/dhc/backup`(一文件全包导出)、`POST /api/dhc/backup`(恢复,`restoreProfile:true` 可连 profile 配置一起还原)、`GET /api/dhc/backup/list`(备份清单);③ 挂载回滚链升级:主状态损坏 → 同目录 7 份 → 专用目录 14 份 bundle(自动解 .backup.config);④ snapshot 暴露 plugin 版本与 backup 统计 | | v27 | **profile 通道服务竞态修复**(v0.26.0):重启实测发现 bundle 行 apply 与 provider 激活并发——dshcore 几乎无 inject 依赖、apply 跑得太早,`ctx.get('shell'/'fs'/'webServer'/'sandboxPolicy'/'tools')` 全扑空(diag 自证:仅 systemPrompt/web/llm 可见,路由/工具/持久化全部静默失效)。修复:inject 声明全部硬依赖 `['timer','systemPrompt','shell','fs','webServer','sandboxPolicy','llm','tools']`,loader 等到服务就绪才 apply。**重启后实测全绿**:9 服务全可见、7 persona 工具进全局工具表、/api/dhc 全端点 200、状态热加载(DSHC v0.17,笔记 14)、自动消化跑通、每日备份 bundle 落盘。教训:官方通道插件必须 inject 硬依赖,ctx.get 探针在 host 组合层会因时序拿到 undefined | | v28 | **桌面宠物回归电脑桌面**(Electron 版接入 DHC):本地鲸系少女 Electron 应用改造为 DHC 桌面宠物——主进程 `ipcMain.handle('dhc-fetch')` 直连 `/api/dhc/pet`(主进程 fetch 无 CORS,harness/插件零改动);渲染进程每 3 秒同步 DHC 状态(名字/核心版本/心情/绑定),状态胶囊常驻显示,**最新进化里程碑自动气泡播报**;右键菜单新增「🔍 播报状态」;单实例锁防重复开窗;开机自启(Startup 目录 bat)。插件本体仍在 harness 中(官方通道),桌面宠物只是它的脸 | | v29 | **dshcore 元插件化**(v0.27.0):五器官收编为 dshcore 的 dependencies,单一 cordis.patch.yml 声明全部 6 行;profile 只留 dshcore 一个直接依赖(reconciler 只扫直接依赖故无重复注册)。踩坑:pnpm 11 默认 `blockExoticSubdeps` 禁止 git 子依赖 → pnpm-workspace 加 `blockExoticSubdeps: false` | | v30 | **整体编译单插件**(v0.28.0):五器官 host 半区在 dsh/index.mjs 内以 `ctx.plugin` 嵌套挂载(单行 dhc-core);client 半区经 esbuild 合并为单文件 dsh/client.js(1185KB,externals=@deepseek-ai/*+react,器官自带资产路由硬编码包名故嵌套后照常工作);package.json 声明 dsh.client(六项 inject 并集 + immediately)。插件列表只剩一行:`dhc-core / dshcore` | | v31 | **插件宠物双向连接**(v0.29.0):harness 启动自动拉起桌面宠物(apply 时检测 electron 进程,缺则 `cmd /c start` 拉启动器);新接口 `POST /pet/say`(插件推台词,宠物轮询领取)、`POST /pet/event`(动作回写:戳→唤醒+4、三连摸头→愉悦+5、说话→愉悦+1,惯性平滑+持久化)、`POST /pet/start`;`GET /pet` 增加 say 队列与 petProcess。宠物侧主进程 fetch 支持 method/body。修复 `exports` 缺 `./package.json`(client-modules 的 require.resolve 被 exports 门禁挡 → 合并 client 404)。**实测**:/plugins/dshcore/client.js 200、say/event 往返通过(摸头→愉悦 59→62)、genui 嵌套资产路由 200 | | v32 | **启动故障修复**(v0.30.0):v0.29.0 的 inject `config` 服务导致整个 harness 起不来(rc.6 内核不提供可注入的 config——对应的是 settings,行等待永远不满足 → 加载树卡死)。移除 config 注入,配置改环境变量 `DSHCORE_PET_LAUNCHER` / `DSHCORE_PET_AUTOSTART`。同批修复 package.json 被 PowerShell 写入 UTF-8 BOM 导致 pnpm JSON.parse 失败(写工具重写 + tag v0.30.0 强制回移)。**教训:inject 只声明内核真实提供的服务** | | v33 | **仓库整理**:`plugin/`(动态插件时代产物)→ `archive/dynamic-plugin/`;一次性脚本与调试文件删除(build-v23/extract-pet/pet-inline/dump-config);`pet-desktop/` → `pet/`(宠物归位);五器官调研 README → `docs/integration/`;README 目录树重写 | | v34 | **宠物整体编译进 dshcore**(v0.31.0):鲸系少女 Electron 应用迁入包内 `dsh/pet-app/`(代码 + 2.4MB 立绘随包走),electron 声明为依赖,启动时 `createRequire('electron')` 解析 exe、从包内目录拉起(`DSHCORE_PET_LAUNCHER` 可覆盖)。同步吸收使用者升级的**canvas 情绪引擎**(emotion.js:头发/皮肤/蝴蝶结/衣服像素级换色,10 种情绪)+ 情绪切换菜单,DHC 双向重新织入:PAD 心情→情绪自动映射(手动切换后 60 秒不打扰)、戳/摸头/说话回写情感 | | v35 | **client.js 注册格式修复**(v0.32.0):harness 用普通 `<script>` 加载 client bundle,ESM `export {}` 语法导致整个 bundle 解析失败、dshcore 从未注册(使用者实测报障)。改为官方契约格式:`window.__ModuleLoader__.load({ id, factory: (require) => {...; return module.exports} })`(esbuild --format=cjs + 包壳);构建脚本拆两步(沙箱禁止 Node 派生 npx.cmd,esbuild 走 pwsh、包壳走 node)。**实测线上 head/tail 均为注册格式** | | v36 | **electron 依赖止损移除**(v0.33.0):本机环境双重阻挠(GitHub 下载 TLS 拦截 + node_modules\electron rename EPERM——先疑孤儿 pnpm 进程、再疑 harness 句柄,停服重装仍复现)。改为本机探测:require 兜底 → 桌面项目 → 豆包 pet-app → `Doubao/chats/*/*/pet-app` 递归扫描;宠物代码与立绘仍随包,exe 复用本机已有。**教训:环境跟原生二进制包不对付时,探测优于依赖** | | v46 | **夺舍 / 复活(全量灵魂快照备份恢复)**(v0.43.0):备份体系升级为「夺舍(备份)」「复活(恢复)」。**夺舍**:全量灵魂快照 `dshcore-soul-YYYYMMDD-HHmmss.json`(14 份滚动)打包**一切**——记忆(笔记+归档+画像+灵魂)、情感(EmotionNode 事件流+性格特质+关系)、技能(成长值+里程碑进化史)、身体七要素、大脑、视觉记忆、**学习缓冲(未消化的抓取素材)**、部署配置(package.json/pnpm-workspace/cordis.patch/settings.yaml);夺舍包带**统计清单**(每份列出记忆/情感/技能/身体/大脑/视觉/学习缓冲数量,面板与清单可直接预览)。**复活**:`POST /api/dhc/soul/restore` 从**任意指定夺舍包**完整还原(可带 restoreProfile 连部署配置一起复活),返回**复活回执**(恢复了记忆 N 条/情感节点 N 个/特质 N 条/身体/大脑/技能/视觉/学习缓冲,含前后增量 delta);无参数时复活最新夺舍包;`POST /api/dhc/soul` 立即手动夺舍,`GET /api/dhc/soul` 查看当前灵魂资产统计,`GET /api/dhc/soul/list` 夺舍清单。面板备份卡改为夺舍/复活交互卡(灵魂资产统计 + 一键夺舍 + 复活清单按钮 + 回执提示);启动回滚链兼容新旧 `dshcore-*` 前缀 | | v45 | **情感模块 v3:事件溯源(Event Sourcing)**(v0.42.0):情感从"状态机累加衰减"重构为 **EmotionNode 事件流**——每次情感事件只追加一个节点(append-only,永不覆盖):`{id, timestamp, valence/arousal/dominance(PAD), label, trigger{type,source,sessionId}, intensity, halfLife(半衰期), category, note}`。**当前情绪 = 投影**:`getCurrentEmotion()` 对未衰减节点做强度×衰减加权叠加 + 心境基线(`0.5^(age/halfLife)` 半衰期衰减,剧烈情绪半衰期更长),不存状态只算投影。**六分类条**:正向人际/成就满足/委屈顺从/焦虑挫败/平静日常/兴奋好奇(带颜色,轨迹图着色同源)。**情感轨迹图**(`GET /api/dhc/emotion-graph` + 面板新卡片):X=时间、Y=愉悦度、节点大小=强度、颜色=分类,低谷云团(负情绪时段淡红底)/高峰标注,悬停显示 时间/标签/来源/PAD,底部统计"情感节点 N / 关系 N / 当前 V A D"。**5 种关系边**:causal(因果,批评→表扬/成功) / time(时序<30min) / semantic(同分类) / recovery(修复,负→正) / resonance(高强度共振)。**情感→性格**:规则表提炼特质(抗挫力=纠错后快速回升、吃软不吃硬、会示弱、忠诚、夜间易emo)低频自动写回灵魂人格核心。触发源规范化(user:praise/user:criticize/tool:success/tool:fail/memory:written 等),宠物戳/摸头/说话也走节点流。v2 状态机数据与 legacy 0-100 自动迁移为种子节点。表达层(人格卡情绪行/宠物心情)全部切到投影视图 | | v44 | **情感模块 v2**(v0.41.0):PAD 三维(-1..1)+ 心境基线 + 关系值(信任/亲近/敬畏);10 种事件触发器(表扬/批评/成功/失败/分享/要求/戳/摸头/说话)增量累加;指数衰减回基线(剧烈情绪衰减更慢);重要情感事件回写笔记;宠物情绪映射(mood→表情);persona 卡注入情绪状态行与回复风格指引 | | v43 | **记忆知识图谱**(v0.40.0):学习轨迹升级为事件溯源记忆图谱——记忆节点自动分类(9 类规则)、关键词 tokenize、语义/主题/相邻三种关系边、力导向 canvas 可视化 + 分类条 + 悬停详情,记忆→技能升华(高频同类提炼技能候选),`GET /api/dhc/memory-graph` | ## DHC · dhcore-1(动态插件存档) | 版本 | 内容 | | --- | --- | | v19 | 上下文压缩(persona_compact + 零token自动压缩 + 记忆使用率监控,Hermes 记忆瘦身模式);合并路线图第一批:跨平台设备指纹、配置原子写入+按天备份+损坏回滚、任务单例锁+重试、PAD 三维情绪+自然衰减+过渡惯性、成长值体系(质量/类别/优先级)、三层记忆+遗忘归档、语义打分检索、内容去重+质量过滤+注入防护、分级日志、SemVer、标准能力接口(GET /parts)、POST /compact | | v20 | 插件出网:shell 调用按 sandboxPolicy.resolve({session}) 解析会话级 danger-full-access 策略传给执行器(curl 解除沙箱限制);自主消化:抓取后插件直接调 llm 服务把内容提炼成要点写入笔记(全自动闭环雏形) | | v21 | 修复自主消化:Message 按 harness 类型构造(content=ContentBlock[]、必填 id 与 source,字符串格式会被模型拒绝);模型选择回退链(agentDefaultModel 当前选择 → listProviders/listModels → 兜底);finish reason 诊断。**实测闭环跑通**:抓取→llm 提炼→笔记入库→里程碑,全程无需主对话参与 | ## DHC · dhcore-3(已删除,仅存档) | 版本 | 内容 | | --- | --- | | v17 | DHC 品牌化重建:插件名 DeepSeek Harness Core(DHC)、插件 ID dhcore-3、HTTP 接口改 `/api/dhc/*`、配置 schema=dhc;功能与 v16 一致 | ## perso-2(已删除,仅存档) | 版本 | 内容 | | --- | --- | | v12 | 重建:核心配置文件唯一事实源(HTTP 导出/导入)、版本推送接口、部位级接口、桌面宠物页、面板分区进化日志 | | v14 | 整合 Hermes 四层次进化模式:四件套分模块版本(+0.01/模块)、30 分钟心跳体检、进化顺序铁律、回复签名尾巴 | | v15 | 路由合并修复:webServer 按 (kind,path) 去重不分方法,GET/POST /config 合并为单路由按 method 分流 | | v16 | 导入守卫修复(configImport 自动解包 + emotion/brain 字段守卫,部分导入不再清零);自动抓取增加 web.search 兜底 | ## perso-1(已删除,仅存档) | 版本 | 内容 | | --- | --- | | v1 | 初始实现:人格 section 注入、工具 output.schema 写法错误(值 schema DSL)→ 失败 | | v2 | output.schema 改 `{ type: 'json' }` → 运行成功 | | v3 | 加入运行诊断(服务可用性/机器码尝试/落盘错误/变更日志) | | v4 | 身体六要素明确为能力隐喻(视觉/操控/行动/语音/共情),人格卡加能力进化规则 | | v5 | 名字自定义;心跳改为核心版本(0 开始,进化 +0.01) | | v6 | 自动学习:15 分钟抓 skillhub.cn + persona_learn 工具;使用者推送升级按钮 | | v7 | 机器码正则修复(输出无花括号);抓取改 curl+临时文件 | | v8 | AI 自主进化:情感/身体/大脑面板只读、灵魂 soulAdd 自主进化、进化史注入人格卡 | | v9 | 整合宠物卡 + 学习轨迹(进化里程碑,可检索) | | v10 | 抓取修复:stderr 诊断 + PowerShell IWR 兜底 + 时间戳临时文件 | | v11 | 抓取诊断探针 | ## 关键里程碑(插件内学习轨迹节选) - v0.07 心脏绑定机器码 `xxxxxxxx-…`(MachineGuid,实际值存于本机 persona-core.json,不入库) - v0.09 完成 v9:心脏/能力进化/自动学习/宠物与学习轨迹整合 - v0.14 修复导入守卫 bug 后恢复受损状态;v16 起部分配置导入不再清零