dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
Codex-style left session manager for DSH — a reversible left-workspace UI overlay with a pinned section, project-session grouping and status dots.
English: README_EN.md
A local DSH plugin that gives the left sidebar a Codex-style session list, durable
session ordering, and a layered status indicator.
它在官方 sidebar.workspaces slot 上占位渲染左侧会话区,不修改 DSH/Harness 源码,不接管右侧 sidebar。
本插件不会成为 DSH 会话数据的第二真相源:会话、工作区归属、置顶、归档、当前选择、会话顺序等状态始终由 DSH 宿主服务读写,插件只做投影与宿主服务调用。禁用或卸载后,slot 注册随插件生命周期消失,官方会话区自动恢复。详见 PLUGIN-CONTRACT.md。
draggable 继承并触发 pointercancel,把手势打断)、Alt+↑/↓、或行菜单「上移 / 下移」,统一调用宿主
workspaces.insertSessionBefore,顺序写入宿主耐久顺序(不是浏览器本地表)。StateDot 词表(等待 / 执行中 / 已完成未读 / 空闲),每行恒定一个;
子会话、后台任务等构成不额外画标记,而是拼进主点的悬停说明与读屏文案。
不显示失败态:客户端 SessionStatus 没有失败位,两个可用代理(后台任务 roster、
subagentTiming.lastTurnCompleted)在真实使用中都会误报,详见「状态取舍」。pin 是前插、没有 move API),
插件按“改动的最小后缀”把它重写成目标顺序,拖动过程中置顶区直接显示目标顺序。workspaces.insertBefore。--dsw-alias-state-business-primary)——P1 实心 + 反色文字、P2 45% 底色、P3 22% 底色、
P4 灰字 + 10% 灰底。状态色(红 / 琥珀 / 绿 / 中性)只属于状态点,优先级规则里不出现。
状态经官方 dsh-client-store 持久化(键 dsh-session-manager.priority),
0.1.7 早期按颜色存的值会自动映射到等级。pinnedSessionIds 顺序,与工作区分组去重)
→「项目会话」标题带 → 各工作区分组(文件夹图标 + 展开/折叠)。dsh-client-ui-primitives 图标集(搜索 / 筛选 / 添加工作区 / 文件夹 /
折叠箭头 / 更多),不使用文字符号,避免字重与基线跟外壳其余部分不一致。sessions.search),
结果按最近活跃排序并显示匹配片段,命中上限超过时提示细化查询。DSH 客户端对"会话失败"没有权威信号:SessionStatus 只有 running / pendingInteraction /
completionUnread。0.1.x 与 0.1.7 早期版本用两个代理近似它,实测都会误报,因此 0.1.7 不再显示失败态:
| 代理 | 为什么不可靠 |
|---|---|
jobs.state.rows[sessionId][*].status === 'failed' | roster 会保留已结算的任务用于查看;一个几天前失败的任务会让会话一直变红,而会话内容本身已正常结束 |
subagentTiming.lastTurnCompleted === false | 对被打断或仍在等待输入的子会话同样为 false,与"失败"不等价 |
这两个事实仍然在 statusOf(...).facts 里可用(jobsFailed / abnormalTurns),
供能精确归因的界面使用。真正的失败位需要宿主提供(见 §上游建议)。
针对 DSH desktop 的 web client 开发与测试,目标版本 dsh-v0.2.1-alpha.5(client-ui-slots /
client-ui-sidebar / client-ui-workspace / client-ui-session 的 0.2.1-alpha.5 契约)。
其它 DSH 版本可能因客户端服务/slot 契约变化而需适配。
sidebar.workspaces 是排他的单占位 cell:占位期间由本插件渲染整个会话区,官方
WorkspaceBrowser 不再渲染。它的 5 个子槽由官方注册项声明,遮蔽者无法重新声明,因此启用期间
以下贡献不会出现:
| 子槽 | 缺失的内容 |
|---|---|
sidebar.workspaces.session.menu.item | 官方 5 条菜单(本插件自实现等价菜单)+ 第三方注册的菜单项 |
sidebar.workspaces.session.row.action | 官方行内悬停按钮 + 第三方的 |
sidebar.session.row.leading / .hover | 官方 ui-schedule 的定时任务标记与列表(暂无等价实现) |
sidebar.workspaces.directoryFlow | 官方内嵌目录选择流;本插件改用宿主 uiWorkspace.pickDirectory 提供等价的「添加工作区」入口 |
停用或卸载插件后这些贡献立即恢复。
npm run verify:align)需要一个 DSH 源码 checkout(默认 ~/deepseek-harness);
未提供 DSH_SOURCE 时该 lane 自跳过,不会伪装成通过。sidebar.workspaces slot;不接管右侧 sidebar,不改 DSH/Harness 源码或 ASAR。ui-schedule 的定时任务标记与悬停节(该槽由官方注册,遮蔽者无法重新声明)、
官方 5 个子槽里第三方注册的菜单项 / 行内按钮(原因见上一节)。docs/DEPLOY.md。从 npm 安装:dsh plugin --profile <profile> add @pianner/dsh-session-manager,并在 dsh.profile.bundles 中加入 @pianner/dsh-session-manager,重启 DSH。也可 clone 本仓库(或使用 .tgz)做本地开发安装。完整步骤见 docs/DEPLOY.md。
npm 上是 0.1.7(本仓库当前版本)。发布清单见
docs/DEPLOY.md,验收记录见 docs/ACCEPTANCE-0.1.7.md。
npm run build # 由 src/client/{core,body}.js 生成 client/client.js(单文件 client 入口)
npm test # 112 条 lane:core + 契约 + 产物静态断言 + a11y(对齐 lane 无源码时自跳过)
npm run verify # build + node --check + npm test + 插件契约检查
DSH_SOURCE=~/deepseek-harness npm run verify:align # 对着宿主源码校验 slot / Menu / StateDot / 图标 / API
真浏览器交互验收由维护者在本地台架(真 React + 真 DOM + 真鼠标)完成,台架不随仓库分发;
逐项结果与未验收项见 docs/ACCEPTANCE-0.1.7.md。
client/client.js 是生成物但入库(npm 包无需消费者构建):改动 src/client/* 后必须重新
npm run build,test/plugin.test.js 会守住产物与源码的一致性。
仓库的 CI(.github/workflows/ci.yml 的 leak-scan)会在 push/PR 时扫描本机路径与密钥,防止敏感内容进入仓库。本地可另装一个 pre-commit 防护(放在 .git/hooks/pre-commit,不随仓库分发)作为提交前的第一道闸。
docs/USAGE.md — 使用说明docs/DEPLOY.md — 安装 / 部署 / 卸载 / 发布docs/ACCEPTANCE-0.1.7.md — 验收记录与验证缺口docs/DESIGN-0.1.7.md — 0.1.7 设计与调研PLUGIN-CONTRACT.md — 本地 DSH 插件契约本插件只操作 [data-slot="sidebar.workspaces"] 左侧会话区;不修改或接管右侧功能区。
MIT — 见 LICENSE。