Files
dsh-worktable/README.zh.md
T

187 lines
13 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# dsh-worktable 🖥️
<p align="center"><a href="README.md"><b>English</b></a> · 简体中文</p>
**DeepSeek Harness 的 agent 项目工作台**——侧边栏「应用抽屉」把每个项目变成可停靠的窗口,再加一个实时监控所有项目的内置「控制室」。
> 当前源码版本 **0.5.1**:精确增加 DSH **0.2.1-rc.5** 兼容,中性显示本轮结束状态与助手答复摘要,修复测试版版本比较和旧缓存造成的降级更新误报。公开发布状态以 [GitHub Releases](https://github.com/Aisland-SJL/dsh-worktable/releases) 为准。保留既有安全隔离与鉴权,不包含旧会话 HTTP 400 的宿主修复。
> 兼容声明仅覆盖 Windows 下已测的 **DSH 0.2.0-rc.2 / 0.2.1-rc.3 / 0.2.1-rc.5**,各环境的验证范围不同。用户已确认安装 0.5.1-dev.3 后降级更新误报消失、页面看起来正常;这与前轮候选 GUI 检查均不能外推为正式包全功能桌面验收。0.1.x 不在本版支持范围。0.5.1 保留 0.5.0 引入的接口身份校验、网页隔离、预览读取限制和布局修复。浏览器存储、登录、WebGL 贴图及标注自动取字可能受隔离影响,证据与边界见 [兼容与安全说明](docs/compatibility-and-security.md)。
## 📸 截图
| | |
|---|---|
| <img src="docs/assets/shot-2-console.png" alt="控制室主界面" width="1080"> | **🖥️ 控制室主界面** —— 内置默认项目:实时卡片网格监控每个项目(工作中 / 待你决定 / 本轮已结束),蓝图网格上的玻璃拟态卡片 |
| <img src="docs/assets/shot-1-sidebar.png" alt="工作台侧边栏" width="1080"> | **🧩 工作台侧边栏** —— 应用抽屉:项目、快捷方式与固定首位的控制室入口 |
| <img src="docs/assets/shot-3-workspace.png" alt="我们的项目" width="1080"> | **🪟 我们的项目** —— 每个项目打开为可停靠的分栏工作区(含旅行 Atlas 等入驻应用) |
---
## ✨ 功能导览
### 🧩 侧边栏应用抽屉
- 收纳你的自建项目(以及 dsh-travelatlas 等入驻插件项目)
- 项目支持改名 / 图标 / 排序 / 隐藏;每个项目有专属文件夹;**项目 ↔ 对话绑定**——打开项目时右侧对话窗自动切到其绑定对话
- 收起侧边栏后,每个项目变成可点击的方形小贴片(只留 emoji)
### 🪟 可停靠的分栏工作区
- 声明式布局预设(左栏 / 顶行 / 主网格 + 右侧对话窗)
- 可拖拽分割线、窗格标签页、按布局持久化的宽度记忆
- 内置窗格:**文件资源管理器、终端、浏览器、动画站点、自定义窗口**
- 自定义窗口:把需求发给新建或已有对话,agent 完成后产物自动挂载进对应窗口(锁死)
### 🖥️ 控制室(内置默认项目)
- 固定在首位的不可删除项目——首次打开绑定一条管理对话即可
- 可调列数的卡片网格镜像可见项目的状态:工作中 / 待你决定 / 本轮已结束,附带可用的运行时长与最近可读的助手答复;结束状态不代表任务成功
- 宿主会话快照的事件订阅镜像;状态监控不调用模型
- 玻璃拟态卡片、深色/白色/跟随系统主题、霓虹状态光效与工作中卡片的旋转彗星光点
---
## 一览
| | |
|---|------|
| 🧩 插件类型 | Cordis 插件——服务端路由 + Web 客户端,纯增量(不替换任何官方插件) |
| 🪟 工作区引擎 | 自研分栏引擎,渲染进宿主的 shell overlay 座位 |
| 💬 对话窗 | 复用宿主对话,导航接宿主新版或旧版会话接口 |
| 📡 状态数据 | 宿主会话运行时快照的镜像(订阅驱动) |
| 💾 状态存储 | 项目/布局/绑定存 localStorage,媒体存 IndexedDB;文件窗访问已配置项目目录 |
| 🎨 界面 | TypeScript + React(宿主 external)+ 原生 CSS,暗色优先 + 浅色主题 |
---
## 快速开始(v0.5.1)
当前兼容声明仅列 **DSH 0.2.0-rc.2 / 0.2.1-rc.3 / 0.2.1-rc.5**,不支持旧 0.1.x。Windows 网页端与桌面端的具体证据分别见[兼容说明](docs/compatibility-and-security.md)。升级前备份重要数据并核对其他插件;目标版本是否已发布,以 GitHub Releases 为准。
1. **安装**(二选一):
**A · 一行命令(推荐)** —— 直接安装 GitHub Release 的安装包,无需 Git:
```bash
dsh plugin --profile web add "https://github.com/Aisland-SJL/dsh-worktable/releases/latest/download/dsh-worktable.tgz"
```
**B · 本地克隆(想改源码用)** —— `link:` 只接受本地绝对路径(路径不要带空格):
```bash
git clone https://github.com/Aisland-SJL/dsh-worktable.git
dsh plugin --profile web add "link:<克隆出来的 dsh-worktable 仓库目录的绝对路径>/01_content"
# 例:克隆到 D:\tools 后 → dsh plugin --profile web add "link:D:/tools/dsh-worktable/01_content"
```
两种方式 `add` 都会把 `dsh-worktable` 注册进 profile 的 bundle 列表(写入 `~/.dsh`,可能需要授权确认);若提示找不到 `dsh` 命令,用 `npx @deepseek-ai/dsh` 代替。
2. **重启** DSH web 进程并刷新界面
3. **打开控制室**:点击固定首位的 🖥️ 控制室卡片 → 绑定一条对话(加入现有或新建)→ 得到实时卡片网格
4. **创建项目**:侧边栏 + → 选布局预设、填项目文件夹
### Windows 官方桌面端
先保存任务,从应用菜单/托盘完整退出(只关窗口不够);将安装目录占位符替换为实际位置,在 PowerShell 执行,再手动重新打开:
```powershell
& "<桌面端安装目录>\resources\runtime\cli\bin\dsh.cmd" plugin --profile desktop add "https://github.com/Aisland-SJL/dsh-worktable/releases/download/v0.5.1/dsh-worktable-0.5.1.tgz"
```
必须使用桌面端自带 CLI 与 `desktop` profile,不用不固定版本的 npx 或网页 CLI 代替。保留实际 DSH_HOME;即便共用会话数据目录,网页与桌面来源的项目/布局/媒体也不会自动同步。
自定义窗口明确选「未分组」时不再偷偷加入宿主分组。控制室新建的是**空对话**:已测 DSH 0.2 的未分组空对话不能使用原生输入框,因此插件提示并禁用这一创建,请自行选分组或加入可用的现有对话;不自动改组、不发送激活消息。现有分组未选具体项时也不退回默认分组,旧宿主未分组创建行为保持。
### v0.4.0 兼容历史
**v0.4.0** 在下述已测范围内增加 Windows 官方桌面端支持。网页端兼容声明仅列 **DSH 0.1.1-rc.2 / 0.1.2-rc.1 / 0.2.0-rc.2**;桌面已测范围为 **Windows 官方桌面端 + 0.2.0-rc.2**。桌面页面点测与定向回归不等于最终包完整桌面端业务验收;旧版沿用此前页面验收并补代码回归,未重跑整套旧版 GUI。升级前备份重要数据并核对其他插件,公开发布状态以 GitHub Release 为准。
---
## 架构
一个包同时包含**宿主 Cordis 插件**与 **Web 客户端**:
- **宿主**:`/api/worktable/*` 路由——健康检查、文件系统、git、文件读写、站点托管、mkdir、工作区、原生皮肤模板;WebSocket `/api/worktable/term` 提供终端窗格(Windows 下为 PowerShell)
- **客户端**:经 slot 协议注入侧边栏与 shell overlay;分栏引擎、标签模型、拖拽与持久化均为自研
- **控制室**:读取宿主会话列表快照(运行中/待决/结束标记、后台任务、子代理目录)——事件驱动镜像,模型不参与
- **窗口任务**:「自定义」任务登记项目/窗格/绑定身份,agent 在 `.dsh-worktable/project-<项目 ID>/` 下写专属结果;新项目不因共用文件夹而继承其他项目的窗口内容
---
## 开发与测试
```bash
cd 01_content
npm install
npm run build # lib/index.js + lib/client.js
node --check lib/index.js
```
- **构建必须在 01_content 内执行**——在仓库根构建会把 lib 写到错误位置,宿主仍加载旧 bundle
- 客户端 bundle 保持 `window.__ModuleLoader__.load` 握手;react 与 @deepseek-ai/* 全部 external
- 历史诊断 `04_test/functional-diag.cjs` 与专项探针有本机路径/端口假设,运行前先核对,限定隔离 profile;
发布流水线内嵌:分栏锚点 DOM 回归 `04_test/anchor-dom.test.mjs`(14 场景,含小数几何)与
数据目录解析回归 `04_test/server-home.test.mjs`(3 组场景,无循环/路径展开/官方分支夹具)
- 发布打包唯一入口为 `npm run pack`,含 139 项源码回归、独立安装与客户端工厂门禁;安装产物另跑侧栏弹窗、14 项锚点、5 项真实 Chromium 与数据目录回归。`npm run test:sidebar` 可单跑弹窗;`npm run test:widget` 为 26 项归属/会话隔离/补挂回归。批准发布后,用 `npm run verify:remote -- --expect-sha <最终 SHA> <发布 tag>` 核对,并另查 latest。
---
## 常见问题
**Q:DeepSeek Harness 更新后,工作台打不开 / 服务启动失败?**
项目、绑定和布局存在浏览器 localStorage,媒体存在 IndexedDB,项目文件保存在自己的项目目录。更改安装前先备份重要数据;需要保留工作台状态时,应保持原浏览器来源,不主动清空浏览器存储。
**情况 A:Harness 正常,只是工作台需要更新**
- 打开工作台「设置」→ 点「立即检查」;侧栏「工作台」旁出现琥珀色更新徽标时,点它选择「复制 AI 提示词」,把那段话发给你的 AI 助手执行即可;
- 网页端可重跑安装命令(安装最新已发布版本),装完重启 dsh web 并刷新;桌面用户须用上方桌面安装步骤:
```bash
dsh plugin --profile web add "https://github.com/Aisland-SJL/dsh-worktable/releases/latest/download/dsh-worktable.tgz"
```
**情况 B:Harness 本身挂了**(服务起不来 / 报 Failed to load plugins)
- 记录实际 DSH 版本、插件版本、profile/数据目录位置和第一条完整错误;完整退出重启后再判断。
- 缺少导出、模块导入失败时,要核对报错所指插件与宿主版本。新版宿主可能改变接口,盲目全部升级不能代替定位原因。
- 上级 `node_modules` 目录链接曾用于某个旧版 `link:` 加载问题,不是通用修法。不要直接创建;已有链接应在确认插件无依赖后再移除,只删链接并保留目标目录。
- 模型请求返回 HTTP 400 属于独立的请求问题,本工作台发布包不包含宿主层面的对应修复。
## 指哪打哪标注 📌
每个窗口标题栏折叠键旁边有一个小**标注按钮**(对话框+加号)。点击后鼠标变成蓝色小冒泡——在任意窗口里点一下想指的位置,会弹出输入框,写下你要的改动(如"把这里的文字放大一点"),点 **✓**。这条消息会打包好(窗口编号 + 坐标 + 被点的元素 + 你的要求),填入聊天输入框**但不发送**——你按回车发出后,AI 会按标注协议处理(能看截图/打开窗口就先核实,不能看就只问一条关键问题确认位置,而不是瞎猜)。
- 指一下 + 说一句话,不用口头描述位置。
- 载荷自带说明:任何会话、任何 AI 收到都能按协议配合。
- 窗口级标注可用;隔离网页内部文字/DOM 读取受限,缺失时应描述目标或提供截图。
- 同批打磨:控制台新增第 5 键「更新公告」(版本说明/检查更新/复制升级命令);自定义背景媒体库开箱自带两张默认预设图(极光渐变 + 海岸风景)。
## 已知限制
- 网页隔离可能影响存储、登录及 WebGL/Cesium 贴图。StarMap 月球纹理已在独立项目中修复,不包含在工作台包中;新项目成功不能证明所有旧网页都兼容。
- **平台**:本版范围见页首与[兼容说明](docs/compatibility-and-security.md)。前轮候选的桌面检查与用户对 0.5.1-dev.3 的确认只覆盖已记录交互,不能外推正式包全部业务;macOS 尚未真机验证。
- 状态在浏览器本地(localStorage 与 IndexedDB)——项目、绑定、视图与媒体不跨设备同步
- 终端窗格在 Windows 上是朴素的 PowerShell 宿主(与原生终端应用无 PTY 对等)
- 自动挂载要求已登记「自定义」任务且写出身份匹配的 v2 结果文件。旧已保存窗口保留,根目录旧 `widget-result.json` 不再导入;旧对话可从目标窗口「自定义 → 发送到会话」发一次任务建立新关联,随后在同一对话直接继续修改。手动关闭/替换内容会撤销关联,此前误挂的标签需关闭一次。同目录项目若主动写同一个实际文件,文件内容仍可能互相影响。
- 控制室只监控**已绑定对话**的项目;未绑定的项目显示为空闲
---
## 隐私
插件没有新增分析统计服务。更新检查对 GitHub Releases API 做只读请求,可在设置中关闭;插件还使用宿主 API/WebSocket、加载用户选择的网页,并提供可读写文件和联网的交互式终端。偏好与媒体使用浏览器存储。文件访问、终端继承环境变量等具体边界见[权限与外部服务披露](01_content/README.md#权限与外部服务如实披露)。
---
## License
MIT
## 相关项目
- [dsh-reminder](https://github.com/Aisland-SJL/dsh-reminder) — 跨窗口的任务完成与审批提醒
- [dsh-usage](https://github.com/Aisland-SJL/dsh-usage) — 常驻的余额/用量面板