dshx-project:让标题栏「Open In」打开会话的真实项目目录

前言

在 DeepSeek Harness(DSH)里开对话时,会话的当前工作目录(cwd)在创建时就固定了,Harness 没有提供修改它的 API。如果你习惯从工作区根目录新建会话,标题栏自带的「Open In」只会打开根目录,而不是你这一轮对话里实际在改的那个子项目或 outputs 目录。

社区插件 dshx-project(维护者 callaumyan-design,目录分类为「记忆」)不改会话 cwd,而是在本地维护「会话 → 真实项目路径」的映射,并接管标题栏自带的「Open In」请求:点资源管理器、VS Code 等入口时,打开的是对话真正在做的项目文件夹。插件未加载时行为与原来一致;本文事实以 GitHub README 为准。

这是什么

dshx-project 是 DSH 的 Cordis 插件(当前版本 2.1.0,MIT 许可证)。它不额外增加可见按钮,而是拦截会话标题栏已有「Open In」发出的 open-in-app/open 请求:仅当请求路径等于该会话的 cwd 时,替换为识别出的真实项目路径;查询失败或识别不出则原样放行。

同时提供 set_project 工具 与 HTTP 路由,让模型或外部流程把项目路径写入插件自己的持久化存储(~/.dsh/dshx-project/projects.json,串行化原子写),并在系统提示中附带一套文件放置规则,减少产出散落在工作区根目录的情况。

核心功能

接管「Open In」,不加新控件

前端在标题栏用隐藏标记记下会话 id,拦截自带按钮的请求。用户侧体验不变:仍是点原来的图标,但打开路径指向「真实项目」而非会话 cwd(在能解析成功的前提下)。

项目路径如何确定(优先级从高到低)

来源 说明
手选 POST /dshx-project/set(README 注明目前无界面)
AI 记录 系统提示要求模型在确定项目后调用 set_project
自动识别 读会话日志中工具调用涉及的路径,按项目目录打分(写入权重高、路径越近权重越高)
兜底 会话 cwd(尚未识别出项目时)

README 中的补充说明(作者本机统计,非普遍保证):

  • 历史会话:打开即可尝试自动识别;作者实测 343 个会话里约 73% 能识别出项目,其余多为未调用工具的纯聊天。
  • 新对话:起初仍对应根目录;模型开始改动某项目文件或调用 set_project 后,下次点「Open In」会指向该项目。
  • 项目目录搬迁:老日志中的 <root>\my-app 可按目录名对齐到现路径如 <root>\projects\my-app。
  • 手选路径始终优先,模型不能覆盖。

识别与范围规则

  • 只认可工作区(~/.dsh/storages/workspace.json)内的目录。
  • 「容器目录」不算项目本身,向下取一层:projects、outputs、docs、dsh、dsh/dshx-plugins、dsh/skills、dsh/tools(可在 infer.js 的 CONTAINERS 修改)。
  • 忽略 archive、.tmp、tmp、node_modules、.dsh、.agents 等(NOISE)以及以点开头的目录。
  • 证据不足(总分小于 2)时不判定项目。
  • 日志只读、增量解码(仅解新增 zstd 帧),每个会话缓存偏移量。

文件放置规则(随系统提示下发)

规则全文在 index.js 的 PROMPT_RULE,可按需修改。要点如下:

  1. 模型不在工作区根目录直接写文件。
  2. 改动已有项目时,文件放进该项目目录。
  3. 其他产出:先建 outputs\<YYYY-MM-DD>-<英文短名>\,本对话相关文件放入其中,并用 set_project 登记,使标题栏打开该文件夹。
  4. 临时文件放在 .tmp\,用完删除。

服务端路由与实现要点

文件 职责
index.js 路由 /dshx-project/{state,set,clear,open}、set_project 工具、系统提示规则
infer.js 会话日志解析与项目打分
client.js 接管自带 Open In 请求(无可见 UI)

仓库内含 host 测试与 client 测试:node test.mjs、node client-test.mjs(README 称分别为 19 项与 8 项)。

安装与启用

插件支持 web 与 desktop profile,安装后需重启 DSH(package.json 中 requiresRestart: true)。

# Web profile
dsh plugin --profile web add github:callaumyan-design/dshx-project
# Desktop(使用 DSH Desktop 自带的 dsh 命令,先从托盘完全退出 Desktop)
dsh plugin --profile desktop add github:callaumyan-design/dshx-project

卸载:

dsh plugin --profile <profile> remove dshx-project

兼容性:README 写明在 DeepSeek Harness 0.2.0-rc.2(desktop / web profile)上开发和使用;纯 JavaScript,无构建步骤,无安装脚本。

典型用法

日常开发:依赖自动识别与模型登记

  1. 安装并重启 DSH 后,在已有工具调用历史的会话中点击标题栏「Open In」,插件会尝试从日志推断项目目录。
  2. 新会话中,让模型在项目内读写文件;模型在系统提示约束下可在确定路径后调用 set_project,之后「Open In」指向该目录。
  3. 若需固定路径且不走模型,可向 POST /dshx-project/set 提交映射(当前无图形界面,需自行按插件路由约定调用)。

查询与清理(HTTP)

README 列出路由前缀 /dshx-project/,包含 state、set、clear、open 等,用于读写映射或按插件逻辑打开路径;具体请求体以实现为准,使用前可在本地阅读 index.js。

适用场景与注意

适合谁:工作区根目录下有多项目或固定 outputs 布局、经常从标题栏用外部编辑器/资源管理器打开「当前对话实际目录」的 DSH 用户;希望模型通过 set_project 与放置规则减少根目录杂文件的团队或个人。

权限与安全:插件以当前 DSH 进程权限运行,会读取会话日志与工作区配置、写入 ~/.dsh/dshx-project/projects.json。安装前建议阅读源码与 MIT 许可证,确认路由与日志解析行为符合你的环境策略。

局限:会话 cwd 仍不可变;识别失败时「Open In」行为与未装插件时相同。自动识别比例来自作者自述数据,你的会话分布不同结果会不同。

链接与版本沿革

更新日志(README):

  • 2.1.0 — 接管标题栏自带「Open In」;会话日志自动识别(含搬家重定位);文件放置规则提示。
  • 1.0.0 — 标题栏「项目」控件与 set_project 工具的首个公开版本。

DSH 生态强调「一切皆插件」;SkillHub 等社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系。若你主要痛点是「Open In 总开根目录」,dshx-project 用本地映射和日志推断把标题栏入口对齐到真实项目,且在不改 Harness 会话 cwd 的前提下完成这一点。

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

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

Xiaoye