研心 (YanXin) — 开发副本
小研的 harness:基于 DeepSeek Harness(DSH)的插件 bundle,一个 bot 实例、两套运行模式(agent / world)、同一人格基底。
这里是开发副本(含真实 persona/、tasks/、23 篇 ADR),不公开。
但真实标识哪个仓都不写:她的 QQ 号、主人的 QQ 号、真实群号在这里也一律占位,
真值只在 $DSH_HOME(规矩与守卫见 docs/development-notes.md §9 与 tests/unit/source-hygiene.spec.ts)。
公开包在 E:/project/yanxin,同步规则见 docs/development-notes.md 第 9 节。
规格只有一个来源:docs/spec.md。改代码前先读 docs/development-notes.md
(分层规矩、六个坑、已知未修清单)。本文件只留本机怎么跑起来。
本机运行
pnpm install && pnpm build # DSH 加载 lib/,改了 src/ 不 build 等于没改
pnpm exec lefthook install # 提交门(pre-commit 跑 typecheck + lint + test),只需一次
# **必须在 Git Bash 里启动**(否则 bash 不在 PATH 上,dsh-bash-local 起不来)
DSH_TELEMETRY_MODE=DISABLED dsh --profile yanxin
- 2026-10-04 起本机的基线是发布版 CLI(
npm i -g @deepseek-ai/dsh@0.1.5-rc.3),
和镜像同一棵树 —— 以前是拿 E:/project/cc/deepseek-harness 那个检出来跑的,
两棵树不一致已经咬到过四次(差异与四道闸记在 docs/development-notes.md §8 的 0d)。
检出仍然留着,但只作只读取证用。
- 首次装 / 换 profile 名走
node scripts/install.mjs --self-id <QQ号>(它会顺手把
base 不带的 logger-console 装进 profile,版本钉 1.0.2,理由在那脚本的 2b 步注释里)。
- profile 与部署配置在
$DSH_HOME/profiles/yanxin/(cordis.patch.yml 装着 OneBot 端口、access token、
账号注册表、cwd、世界群号)。那一层不入库。
- 密钥在
$DSH_HOME/.credentials.yaml。dsh --dump-config 会明文打印内联进 YAML 的值——别贴出去。
- 控制台 http://127.0.0.1:3080/yanxin/;写操作与实时日志流要
YANXIN_CONSOLE_TOKEN。
容器形态(本轮新增)
2026-10-04 端到端验收跑过了(WSL 里的 docker.io 引擎):容器 healthy、ReMe 在同容器起来并
写成 provider: reme、写一条记忆再检索得到、控制台从容器外可达、写人格→回填 preset、
插件树全激活、没有 shell 服务重名。还没验的是拿真网关的对话回路与 NapCat 实连
(这轮用的是假网关,只验装配)。判据与未修项见 docs/development-notes.md §8。
cp .env.example .env # 填网关三件套 + 她的 QQ 号 + OneBot token
docker compose up -d --build # 单镜像:dsh + ReMe(同容器、只绑回环)
docker compose logs -f yanxin # OneBot token 若没给,随机生成的那个只在这里打印一次
然后开 http://127.0.0.1:3080/yanxin/:先人格页写三段,再跑初始化向导(顺序反了不要紧,
向导会把空模板判为”没写过”并把你指回人格页)。NapCat / SnowLuma 留在宿主机,
反向 WS 连 ws://<这台机>:8080/onebot/v11。
⚠️ 这一版把控制台放成了远程可达(YANXIN_CONSOLE_ALLOW_REMOTE=1),唯一的门是
YANXIN_CONSOLE_TOKEN;而管理员私聊带未沙箱化的 shell。所以:拿到 token ≈ 拿到这个容器。
会话凭据(一次性码 + 自定义密码)是下一轮要补的,现在不要把实例直接挂到公网。
⚠️ 两个卷是她本人:yanxin-dsh(会话 / 世界 / 审计 / 人格 / preset)与 yanxin-reme(记忆)。
docker compose down -v 等于把她抹掉。
镜像里的 ReMe 来自 third_party/reme/(Apache-2.0 的 vendored 源,来源与升级步骤见该目录
UPSTREAM.md)。记忆线是否真的在工作,判据是控制台记忆页检索得到东西,不是容器 healthy ——
provider 没写成 reme 时她召回恒空且不报错。
记忆后端(可选)
~/.dsh/yanxin/reme/start-reme.cmd # 必须经它启动:cwd 决定 .env 能否加载
curl http://127.0.0.1:2333/health_check
三个坑与”看起来像记性差”的症状写在 docs/development-notes.md 第 7 节。
不想接记忆:settings.yaml 里 yanxin-memory.provider: none,其余功能照常。
常用命令
pnpm typecheck && pnpm lint && pnpm test # 门的顺序就这个,typecheck 拦得最多
pnpm build # → lib/
pnpm presets # 改了 persona/ 之后重新生成三个 preset
测试里两处依赖本机环境:shell-tier1.spec.ts 要 bash 在 PATH 上;
patch-semantics.spec.ts 要 YANXIN_DSH_MONOREPO 指到 DSH 检出,没设就整组 skip。
一分钟了解结构
src/ onebot / world / memory / console / setup / admin / audit / net / window / preset
tests/ 71 个 spec(unit + integration + support + fixtures)
presets/ 三个 preset —— 生成产物,改 persona/ 之后跑 pnpm presets
persona/ 人格源文件(本仓是真实的,公开包里是空模板)
docker/ Dockerfile .env.example 单镜像形态:一个容器里 dsh + ReMe(记忆后端源树在 third_party/reme/)
docs/ spec.md(规格)· development-notes.md(注意事项)· decisions/(ADR)
tasks/ plan.md · todo.md · handoff.md(当前现场)
cordis.patch.yml 装配 patch:结构与行级开关,不放密钥与本机路径
提交前
lefthook 会跑三项。别为了让 CI 变绿删失败的测试;紧急跳过用 LEFTHOOK=0 git commit。
许可
PolyForm Noncommercial 1.0.0。本副本与公开包的许可一致。
研心 (YanXin) — 开发副本
小研的 harness:基于 DeepSeek Harness(DSH)的插件 bundle,一个 bot 实例、两套运行模式(agent / world)、同一人格基底。
本机运行
npm i -g @deepseek-ai/dsh@0.1.5-rc.3), 和镜像同一棵树 —— 以前是拿E:/project/cc/deepseek-harness那个检出来跑的, 两棵树不一致已经咬到过四次(差异与四道闸记在docs/development-notes.md§8 的 0d)。 检出仍然留着,但只作只读取证用。node scripts/install.mjs --self-id <QQ号>(它会顺手把 base 不带的logger-console装进 profile,版本钉 1.0.2,理由在那脚本的 2b 步注释里)。$DSH_HOME/profiles/yanxin/(cordis.patch.yml装着 OneBot 端口、access token、 账号注册表、cwd、世界群号)。那一层不入库。$DSH_HOME/.credentials.yaml。dsh --dump-config会明文打印内联进 YAML 的值——别贴出去。YANXIN_CONSOLE_TOKEN。容器形态(本轮新增)
然后开 http://127.0.0.1:3080/yanxin/:先人格页写三段,再跑初始化向导(顺序反了不要紧, 向导会把空模板判为”没写过”并把你指回人格页)。NapCat / SnowLuma 留在宿主机, 反向 WS 连
ws://<这台机>:8080/onebot/v11。⚠️ 这一版把控制台放成了远程可达(
YANXIN_CONSOLE_ALLOW_REMOTE=1),唯一的门是YANXIN_CONSOLE_TOKEN;而管理员私聊带未沙箱化的 shell。所以:拿到 token ≈ 拿到这个容器。 会话凭据(一次性码 + 自定义密码)是下一轮要补的,现在不要把实例直接挂到公网。⚠️ 两个卷是她本人:
yanxin-dsh(会话 / 世界 / 审计 / 人格 / preset)与yanxin-reme(记忆)。docker compose down -v等于把她抹掉。镜像里的 ReMe 来自
third_party/reme/(Apache-2.0 的 vendored 源,来源与升级步骤见该目录UPSTREAM.md)。记忆线是否真的在工作,判据是控制台记忆页检索得到东西,不是容器 healthy ——provider没写成reme时她召回恒空且不报错。记忆后端(可选)
三个坑与”看起来像记性差”的症状写在
docs/development-notes.md第 7 节。 不想接记忆:settings.yaml里yanxin-memory.provider: none,其余功能照常。常用命令
测试里两处依赖本机环境:
shell-tier1.spec.ts要bash在 PATH 上;patch-semantics.spec.ts要YANXIN_DSH_MONOREPO指到 DSH 检出,没设就整组 skip。一分钟了解结构
提交前
lefthook 会跑三项。别为了让 CI 变绿删失败的测试;紧急跳过用
LEFTHOOK=0 git commit。许可
PolyForm Noncommercial 1.0.0。本副本与公开包的许可一致。