# mcore机器核心 插件开发文档 > 仓库:`muvuula/DeepSeek-Harness-Core` | 插件名:`mcore` | 运行时:`~/.dsh/profiles/web/node_modules/mcore/` > 品牌规范见 `docs/BRAND.md`(改 UI 前必读) --- ## 一、目录结构 ``` mcore/ # 本地工作区(clone 到哪都行,例:~/work/mcore) ├── logo/ # 品牌 LOGO 素材(豆包生成候选图) ├── dsh/ # 插件核心源码(修改主战场) │ ├── index.mjs # 主模块:API 路由 / 面板 HTML / 记忆 / 进化逻辑(8800+ 行) │ ├── stock.mjs # 股票/行情相关模块 │ ├── brain.mjs # 大脑(知识图谱) │ ├── chrono.mjs # 时间轴 │ ├── cache.mjs # 缓存 │ ├── broker-everbright.mjs │ ├── freewill.mjs # 自由意志 │ ├── selection-model.mjs # 选择模型 │ ├── trading-model.mjs # 交易模型 │ ├── vision.mjs # 视觉 │ ├── client-dhc.mjs # 客户端源码(esbuild 源) │ ├── client-entry.mjs # 客户端入口(只含 dhcClient) │ ├── client.js # 构建产物(esbuild + 包壳,harness 实际加载) ├── docs/ # 文档 │ ├── BRAND.md # 品牌设计方案(权威) │ ├── DEVELOPMENT.md # 本文档 │ ├── integration/ # 五器官集成文档(modlens/at-file/genui/automation/sidebar) │ ├── screenshots/ # 截图 │ └── poster-copy.md # 宣传文案(0.46 时代,已归档待更新) ├── archive/ # 归档(不删,可回溯) ├── build-client.mjs # client.js 构建脚本 ├── release-check.mjs # 发布检查 ├── CHANGELOG.md # 版本日志 ├── persona-core.template.json # 人格模板 └── package.json ``` ## 二、开发环境 | 项 | 值 | |---|---| | dev 源码(git) | 你的 clone 目录,例:`~/work/DeepSeek-Harness-Core` | | 运行时副本 | `~/.dsh/profiles/web/node_modules/mcore/`(⛔ 位置永不改动,开发只 cp 同步内容过去) | | 状态文件 | `~/.dsh/persona-core.json`(workspaceRoot 统一在此) | | 服务端口 | `http://127.0.0.1:3080` | | 面板 API | `GET /api/dhc/panel`(完整 HTML)· `GET /api/dhc/state`(JSON 状态) | | 启动方式 | 桌面「DeepSeek Harness」按钮 / `node /lib/bin.js web` | **⚠️ 路径铁律**:Windows 上 node 只认 `C:/...` 风格路径,MSYS 的 `/c/...` 会 `MODULE_NOT_FOUND`(实测踩坑)。 ## 三、改造纪律(⛔ 最高优先级,2026-08-21 主人批评"不崩乱改"后立) 1. **绝不动 `persona-core.json` 的 identity**(persona/speaking/interests/gender)——那是使用者的人格设定,程序不该自作主张覆盖。改任何配置前先备份(`~/.dsh/backups/`),使用者点名要改才动。 2. **小步验证**:每改一处 → `node --check` → 同步 → 重启 → API 验证。禁止一次大改(曾一次大改留下两处孤立 `}` 导致面板 JS 崩溃)。 3. **不发布"顺手"版本**:要的功能做完、验证通过再 bump 版本;改动大时先本地跑稳再发布。 4. 改动前把删除前文件备份到 `~/.dsh/backups/`(可回滚)。 ## 四、标准工作流(每次改代码) ```bash # 1. 改 dev 源码 dsh/index.mjs(或 stock.mjs / client-dhc.mjs / client-entry.mjs) # 2. 语法检查 node --check dsh/index.mjs && node --check dsh/stock.mjs # 3. 同步到运行时副本(注意:混合 hardlink/副本!见坑1)+ md5 必须一致 cp dsh/index.mjs ~/.dsh/profiles/web/node_modules/mcore/dsh/index.mjs md5sum dsh/index.mjs ~/.dsh/profiles/web/node_modules/mcore/dsh/index.mjs # 4. 重启(杀 3080 + 拉起,本机无 dsh-restart-now.ps1,用:) powershell -NoProfile -Command "Get-NetTCPConnection -LocalPort 3080 -State Listen -ErrorAction SilentlyContinue | ForEach-Object { Stop-Process -Id \$_.OwningProcess -Force }" cd ~/.dsh && node "/lib/bin.js" web # 后台跑(Windows 上 用 C:/... 风格) # 5. 等端口 + 验证 for i in $(seq 1 45); do netstat -ano 2>/dev/null | grep -q ":3080.*LISTENING" && break; sleep 2; done curl -s http://127.0.0.1:3080/api/dhc/state curl -s http://127.0.0.1:3080/api/dhc/panel | grep -o "你要验证的元素" | sort | uniq -c ``` ## 五、关键坑(全部实测踩过) 1. **profile 副本 = hardlink 与副本混合**:`client.js`/`client-entry.mjs` 是 hardlink(改 dev 自动同步);`index.mjs`/`stock.mjs`/`client-dhc.mjs`/`package.json` 是独立副本(必须 cp 同步 + md5 验证,否则改不生效——曾连续 3 次重启"没反应")。 2. **client.js 重建必须 esbuild + 包壳**:改 client-dhc.mjs 后要重建:esbuild alias/路径必须 Windows 格式 `C:/...`(MSYS `/c/...` 会 `Could not resolve`);包壳 `node build-client.mjs`(读 client.raw.js → 包 `__ModuleLoader__.load` → client.js)。 3. **模板字符串内的 JS 不受 `node --check` 检查**:面板 HTML 模板(`panelPageHtml`/`stockPageHtml`)里的 `