187 lines
13 KiB
Markdown
187 lines
13 KiB
Markdown
# 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) — 常驻的余额/用量面板
|