dsh-milieu:把工作区协议写进文件,让 AI 跨会话认识同一套环境

前言

在 DeepSeek Harness(DSH)里,每个会话都是「没有记忆」的智能体。新开一条对话,模型不会自动知道你工作区里认知库、工具库怎么命名、哪些目录能改。常见做法是每次在提示词里重复规则,或者指望某条「主会话」——但用户自己建的会话插件注入不进去,规则容易变成两个版本。

dsh-milieu 把「环境 = 信息 + 工具」这套约定写进工作区文件,并在需要时用状态与变更摘要提醒重读。下面介绍它解决什么问题、装好后会改哪些路径,以及预加载会话和重读提示怎么开。

这是什么

dsh-milieu 是维护者 sxwpskd 发布的 DSH 工作流类插件(npm 包名 dsh-milieu,当前版本 0.1.0,MIT 许可证)。仓库简介是「dsh-milieu 插件开发仓库」;核心价值用 README 里的一句话概括:让工作区成为新的单位——把协议装进工作区,让 AI 按同一套结构管理工作区,而不是每个会话从零发明目录和流程。

插件以当前 DSH 进程权限读写工作区;安装前建议在 GitHub 上查看源码与 LICENSE,确认符合你的使用场景。

它解决什么问题

资料里列出的痛点与对应能力如下:

  1. 新会话从零开始:提供预加载会话(preloadSession),在工作区维护一条「已经读过工作区」的会话;默认关闭,因为会真跑一次 agent,消耗 token 并改动会话列表。
  2. 认知会过期:会话重读机制——工作区变更达到阈值时,客户端按五关判据决定是否弹出「要不要重读」;只提示,不自动重发,改代码、跑脚本不会被打断。
  3. AI 工作区杂乱无章:情景协议规范三个库(认知 review/、工具 tools/、外部 external/),并在 AGENTS.md 托管段与 .dsh-milieu/ 三份文档里固定定义。

核心功能

会话开场:补库、写协议、状态与状态页

每次会话开场,宿主侧大致做四件事(见 README「它做什么」):

  1. 补全三个库目录:缺则创建 review/、tools/、external/,只建目录,不铺内容。
  2. 把协议写进工作区:在 AGENTS.md 中仅维护 <!-- dsh-milieu:begin … --> 到 <!-- dsh-milieu:end --> 之间的托管段,段外不动;同时写入 .dsh-milieu/ 下的定义、建议、原因三份文件。
  3. 生成状态文件:扫描工作区,记录变更事件流,供客户端判断是否需要提醒重读。
  4. 注入状态页:在认知库写入或刷新 review/STATE.md(路径可由 statePath 配置,默认 STATE.md);首装无页时先建带判断段标记的骨架。

为什么写文件而不是只注入提示词? 用户可能自己建会话,插件管不到那条会话,但读同一工作区的 AI 仍能看到 AGENTS.md 与库目录,避免「两个版本的协议」。

预加载会话与重读提示

  • 预加载:开启 preloadSession 后,若没有「已读过」的受管会话则创建并让 agent 真读一次;空白会话补读;已被使用的旧会话转为 active 后再建干净的新预加载会话。
  • 重读提醒:客户端依次判断会话是否受管、是否已弹过、工作区是否变化、变化是否够大、距最后活动是否超过 promptThresholdMs(默认 5 分钟)等,全部通过才弹卡片。
  • 重读请求带变更摘要:30 天内使用过的会话可附带「文件名 + 旧→新大小」;超过 30 天则主要提供文件名与索引(认知库最多 20 条等,见 criteria.staleDays / staleMaxReview)。

协议要点(跨会话共用)

协议核心:环境 = 信息 + 工具。信息分为认知库与外部库;工具库规范工作流程。完整定义在仓库的 DEFINITION.md,建议与原因见 SUGGESTIONS.md、RATIONALE.md。README 说明:不装插件也可以采用这套协议约定。

运行脉络(30 秒版)

安装 → 打开工作区
  ├─ 会话开场:补三库 → 写协议 → 生成状态文件 → 注入状态页
  ├─ 切进会话:读状态文件 → 五关判据 → (工作区变了就)弹卡片
  └─ 点「重读」:发一条带变更摘要的请求 → 该会话的 AI 重新认识工作区

安装与启用

需要 DSH 0.2.x(含 0.2.1 预发布);本包零依赖。装完后完全退出 DSH 再打开。

从 npm(推荐)

dsh plugin --profile desktop add dsh-milieu

Web 版把 desktop 换成 web。也可在 DSH 插件管理器 → 安装 → 填写 dsh-milieu。

从 GitHub

github:sxwpskd/dsh-milieu

钉版本可在 commit 页复制 SHA,写成 github:sxwpskd/dsh-milieu#<sha>。

装好后的建议(README 原文):让 AI 读一下插件说明,调整配置,整理工作区。预加载会话与重读机制依赖阈值配置,一般需要改配置才会按预期启动;preloadSession 默认为 false。

典型用法与配置入口

  1. 安装并重启 DSH 后打开目标工作区,确认 AGENTS.md 出现 milieu 托管段、.dsh-milieu/ 与三库目录(若原先不存在)。
  2. 在插件配置或补丁层 cordis.patch.yml 中按需覆盖 DEFAULT_CONFIG(顶层在 index.js);判据默认值在 criteria.js。常用项包括:
    - preloadSession:是否维护预加载会话(默认关)。
    - libs.review / libs.tools / libs.external:三库目录名(默认 review、tools、external)。
    - injectState / injectBudgetKiB:是否注入状态页及预算(默认 true / 128 KiB),超预算则跳过、不截断。
    - criteria.structuralThreshold、contentThreshold、promptThresholdMs 等:控制何时弹重读卡片(例如默认新增/消失 1 个文件、内容改动 5 个文件、最后活动超过 5 分钟等)。
  3. 工作区可选 .dsh-milieu.json:可覆盖 libs、inventory.excludePaths、changes、criteria 等(详见 README 表格)。
  4. 若启用预加载:认知库需满足 readiness(默认至少 10 个文件且 ≥ 10 KB);全新空工作区会被拦住,避免在尚未建立认知时自动跑 agent。
  5. 工作区变更后,在界面根据卡片选择「重读」,请求中会带上变更视图摘要。

排查预加载失败时可查看 .dsh-milieu/preload.json;客户端调试可将 criteria.debug 设为 true 在聊天里看一行自报状态。

它会写工作区的哪些地方

只维护以下范围(卸载插件不会自动删除,需手动撤销):

位置 行为
AGENTS.md 仅托管段
.dsh-milieu/ 协议三份 + preload.json 等
review/、tools/、external/ 缺则建目录
认知库内 STATE.md 材料段;只重写 <!-- judgement --> 以下部分

另有状态相关写入如 milieu-state.json(见 README「设计纪律」写入面说明)。

适用场景与注意

适合谁

  • 长期在单一 DSH 工作区里做 agent 开发,希望认知库、工具库、外部材料目录稳定,且任意会话(含用户自建)都能读到同一协议。
  • 需要「工作区变了再提醒 AI 重读」,而不是每次改文件就自动打断当前对话。
  • 愿意接受插件在工作区落盘协议文件,并可能手动维护 review/ 等内容。

边界与限制(README「边界与已知限制」)

  • preloadSession 默认关;预加载受认知库 readiness 限制。
  • 多工作区:workspaceRoot 为空时,仅一个工作区则直接用,多个时取平台顺序第一个;「每个工作区各管各的」尚未完成。
  • 无持久日志(规划中);失败只报告、不假装成功,也不拖垮宿主。
  • 不做定期整理,只做协议、状态、预加载、重读提示四件事。

DSH 社区插件目录位于独立站点 SkillHub 上的 dsh-milieu 页,与 DeepSeek / 幻方无官方从属关系;生态理念是「一切皆插件」,本文介绍的是社区维护的 dsh-milieu,不是官方内置功能。

结尾

dsh-milieu 把「环境 = 信息 + 工具」写进工作区,用状态文件与可选的预加载会话缓解「每条对话从零认知」的问题,并在变更够大时用卡片提示重读。若你要试装,从 npm 或 GitHub 按上文命令安装,读 README 调 preloadSession 与 criteria,再整理三库与认知库规模。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜