目录
amp; / $1, token 里带一个 $ 就能把占位符本身插进值里 - 测试把错的形态钉回对的:sample token 换成纯数字 '123456'(修复前这条就是红的), selfId 断言从 String(...) 收紧成必须是 string,并加源码守卫盯 selfId: "${esc(selfId)}" - 顺带:新增 deploy/compose.server.yml(建木 hub 拉取的服务器形态,控制台公网、 两个 token 必填);改掉 .env.example 与 entrypoint 里两处会误导人的注释 ("token 留空会随机生成"只在绑回环时成立;世界群号 0 不是世界线的开关) " href="/aoye666/yanxin/commits/f30f1e06c2">修复:profile patch 的裸插值把纯数字 token/QQ 号定成 number,整个 profile 挂不上2天前
  • docs真实 QQ 号与真实群号从跟踪文件里清出去(52 个文件 279 处),并加机械守卫2天前
  • persona群聊 name 触发 + 现形缓存 + world-model 告警认得出 429(1093 测试)5天前
  • presets会话句柄没收干净导致的 already exists 集体静默:修掉,并把分段发送补齐测试2天前
  • scripts会话句柄没收干净导致的 already exists 集体静默:修掉,并把分段发送补齐测试2天前
  • src把"排空"做成可观察的判据:测试的 settle 不再猜宏任务;向导测试改用包根夹具1天前
  • tasks真实 QQ 号与真实群号从跟踪文件里清出去(52 个文件 279 处),并加机械守卫2天前
  • tests把"排空"做成可观察的判据:测试的 settle 不再猜宏任务;向导测试改用包根夹具1天前
  • third_party容器形态打通:单镜像 + 基线迁到发布版 0.1.5-rc.3(1244 测试)2天前
  • .dockerignore容器形态打通:单镜像 + 基线迁到发布版 0.1.5-rc.3(1244 测试)2天前
  • .env.example
  • amp; / $1, token 里带一个 $ 就能把占位符本身插进值里 - 测试把错的形态钉回对的:sample token 换成纯数字 '123456'(修复前这条就是红的), selfId 断言从 String(...) 收紧成必须是 string,并加源码守卫盯 selfId: "${esc(selfId)}" - 顺带:新增 deploy/compose.server.yml(建木 hub 拉取的服务器形态,控制台公网、 两个 token 必填);改掉 .env.example 与 entrypoint 里两处会误导人的注释 ("token 留空会随机生成"只在绑回环时成立;世界群号 0 不是世界线的开关) " href="/aoye666/yanxin/commits/f30f1e06c2">修复:profile patch 的裸插值把纯数字 token/QQ 号定成 number,整个 profile 挂不上2天前
  • .gitignore工程:lefthook 预提交门控 + .qoder 忽略9天前
  • .npmrcPhase 0–3 完成:地基、bridge、溯源、能力隔离与记忆接入10天前
  • .oxlintrc.json工程:lefthook 预提交门控 + .qoder 忽略9天前
  • .zcodeignorePhase 0–3 完成:地基、bridge、溯源、能力隔离与记忆接入10天前
  • AGENTS.md开发副本的说明跟上今天的形态:数字不再是 22/61,并补上这轮学到的四条纪律1天前
  • Dockerfile容器形态打通:单镜像 + 基线迁到发布版 0.1.5-rc.3(1244 测试)2天前
  • LICENSE文档:README 瘦回"本机怎么跑",注意事项与未修清单挪进 docs/development-notes.md4天前
  • README.md开发副本的说明跟上今天的形态:数字不再是 22/61,并补上这轮学到的四条纪律1天前
  • cordis.patch.yml容器形态打通:单镜像 + 基线迁到发布版 0.1.5-rc.3(1244 测试)2天前
  • docker-compose.yml容器形态打通:单镜像 + 基线迁到发布版 0.1.5-rc.3(1244 测试)2天前
  • lefthook.yml工程:lefthook 预提交门控 + .qoder 忽略9天前
  • package.json容器形态打通:单镜像 + 基线迁到发布版 0.1.5-rc.3(1244 测试)2天前
  • pnpm-lock.yaml容器形态打通:单镜像 + 基线迁到发布版 0.1.5-rc.3(1244 测试)2天前
  • pnpm-workspace.yaml工程:lefthook 预提交门控 + .qoder 忽略9天前
  • tsconfig.build.jsonPhase 0–3 完成:地基、bridge、溯源、能力隔离与记忆接入10天前
  • tsconfig.jsonPhase 0–3 完成:地基、bridge、溯源、能力隔离与记忆接入10天前
  • vitest.config.tsT41/T42:修记忆写回误报 —— 超时分档 + 落盘攒批(每 10 轮一次)10天前
  • 研心 (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。本副本与公开包的许可一致。

    关于

    小研harness

    2.2 MB
    邀请码
      Gitlink(确实开源)
    • 加入我们
    • 官网邮箱:gitlink@ccf.org.cn
    • QQ群
    • QQ群
    • 公众号
    • 公众号

    版权所有:中国计算机学会技术支持:开源发展技术委员会
    京ICP备13000930号-9 京公网安备 11010802047560号