← Back to home@7bder

dsh-plugin-orchd

Read-only orchd panel for the DSH right sidebar: task board, dependency graph, ideas and review timeline for the session's project. · DSH 右侧栏的 orchd 只读面板。

Stars
0
Language
JavaScript
Created
Oct 16, 2026
Updated
Oct 16, 2026

Introduction

dsh-plugin-orchd

Read-only orchd panel for the DeepSeek Harness (DSH) right sidebar: open a project session and see that project's task board, dependency graph, ideas and review timeline next to the conversation. No project configuration — the plugin derives the project from the session.

把 orchd 的项目状态带进 DSH 右侧栏的只读面板:

点开一个项目会话,面板自动检测这个项目有没有用 orchd。 装了 → 同屏显示任务看板、依赖图、想法与审查时间线;没装 → 给一个接入入口。

面板没有任何写操作:claim / done / review / merge / amend 一律不出现在 UI 里。


面板内容

视图内容
四态检测未安装 / 未初始化 / 就绪 / 异常,每种状态各自点名原因,不是一句「出错了」
看板状态分布、待办 / 在途 / 终态,状态条即筛选器;关键词、筛选、排序;800+ 任务虚拟滚动
任务详情目标、验收标准、验证命令、写范围、上游依赖与下游引用(可点跳转)、审查事件时间线
依赖图DAG:聚焦闭包 / 活跃子图 / 含终态全图;环、自依赖与悬空上游显式标注,不静默少画
想法(IDEAS)只读想法看板:状态分组、归档任务对照、可复制的推进命令
接入入口未安装的项目给两条路:复制命令自己跑,或让当前会话的 agent 去装(注入前先给你看文本)

安装

# 推荐:npm 包
dsh plugin --profile web add dsh-plugin-orchd

# DSH Desktop:用应用自带的终端(欢迎页里那个),**不要**加 --profile
dsh plugin add dsh-plugin-orchd

没有 npm 也能从源码装(被市场收录前的等价路径):

dsh plugin --profile web add github:7bder/dsh-plugin-orchd

Desktop 的 desktop profile 由应用托管:普通 dsh plugin --profile desktop ... 会被 CLI 直接拒( profile "desktop" is managed exclusively by the Electron application),应用自带终端里不带 --profile 的命令才改得到它。装好后重启 DSH——宿主侧模块不热替换:会话 header 角落出现开关,右侧栏出现「orchd 任务」页。

被插件市场收录后可以在设置里搜索一键安装。Release 页另有 tarball 资产,但那条路依赖 github.com/release-assets(在部分网络不稳),且 pnpm 11 对「URL tarball」的 lockfile 完整性要求更严 (可能报 ERR_PNPM_MISSING_TARBALL_INTEGRITY),所以只作归档与手动备用。

前置条件

  • DSH 提供右侧栏面板席位(sidebarRightTabs + sidebar.right.pane.tab,session 作用域)。
  • 项目侧装了 orchd(项目根或容器主工作树下有 .orchd/)。没装的话面板会给出接入入口,不会静默失败。
  • Python 3 在 PATH 上(python / py -3 / python3 依次探测,也可在配置里写死 pythonPath)—— 面板跑的是项目自带的引擎入口 python <项目>/.orchd/__main__.py,插件不自带、不安装引擎。

只读保证

这是硬约束,不是口号:

  • 命令白名单 fail-closed:不在白名单里的子进程调用根本不 spawn,被拒时记一行结构化日志。
  • 子进程环境剥掉会话身份,读命令不会带出任何会被引擎当成「有人在动这个任务」的变量。
  • 不直读账本、不碰锁、不写项目文件;面板不做文件导出(诊断信息只复制到剪贴板)。
  • 开发期在真引擎、真账本、真 git 仓库上跑只读冒烟:比对工作区文件哈希、账本事件数、git status,要求零变更。

配置

配置写进 profile 的 cordis.patch.yml(- id: orchd-tasks 那一行的 config: 下),全部有默认值:

键默认说明
pythonPathnullnull = 自动探测
requestTimeoutMs20000单次引擎调用超时(超时与「引擎报错」在 UI 上是两种状态)
cacheTtlMs / pollTtlMs / detectTtlMs5000 / 30000 / 10000看板 / 轮询 / 四态检测的缓存 TTL
maxProjectContexts8每会话项目上下文的 LRU 上限
orchdCoreReponull接入入口里展示的引擎仓库地址
allowRoots[]调试用白名单;空 = 不额外收敛

HTTP API

面板的数据全部来自插件自己注册的 8 条同源路由(会话绑定,前端只传 sessionId,不传路径):

GET  /orchd/api/context         四态 + 项目身份 + 诊断
GET  /orchd/api/board           状态条 + 任务列表
GET  /orchd/api/task            单任务详情(+ 审查时间线,按需)
GET  /orchd/api/graph           依赖图(节点 / 边 / 环 / 悬空)
GET  /orchd/api/history         审查事件时间线
GET  /orchd/api/ideas           想法看板
POST /orchd/api/install-entry   返回将要注入的文本(本身不注入)
POST /orchd/api/install-inject  执行注入(需显式确认)

前缀外的路径一律 404(fail-closed)。

卸载

dsh plugin --profile web remove dsh-plugin-orchd

已知残留:remove 之后 profile 的 node_modules/ 里可能留一个空目录(包管理器行为),手工删掉即可, 不影响启动。

边界

面板只跟当前会话的项目,不做跨项目聚合、不做项目切换器(DSH 的 Workspace 分组已经是项目导航); 不做实时推送(引擎没有常驻进程,用缓存 + 手动刷新);不注册面向模型的工具。

许可

MIT。引擎本体见 7bder/orchd-core。