Bundle
dsh-life-workbench
DSH 个人工作台:总览 / 看板 / 资料三视图,玻璃拟态视觉,Host 权威持久化。Personal workbench plugin for DSH Web.
- Source
- meihaoyidian
- License
- MIT
- Updated
- Updated 8 hours ago
Readme
# dsh-life-workbench
DSH Web GUI 的**个人工作台**插件 —— 把「工作 / 生活 / 每日事项」收进一个玻璃拟态面板,一页完成全部日常交互。
- **总览**:统计 + 执行 + 记录,所有操作就地完成,不用跳页
- **看板**:多列看板,可自定义增删看板与事项,事项可挂附件
- **资料**:上传文件与图片的总库,标注归属,可预览放大
- **每日事项**:跨天自动归档当天明细(保留 90 天)再重置,可回顾
## 安装
```bash
dsh plugin --profile web add dsh-life-workbench
```
装完 **重启 dsh host** 并刷新浏览器,侧边栏出现「工作台」图标。
## 功能细节
### 总览
| 区段 | 内容 |
|---|---|
| 开头 | 问候 + 5 个 KPI 读数(今日完成 / 今日待办 / 累计完成 / 近七天 / 资料) |
| 统计 | 完成趋势(**点击任意柱子**回顾当天逐条明细)、看板进度 |
| 今日 | 今日执行、最近完成 |
| 记录 | 随手记、资料缩略图与上传 |
**今日执行是一个统一列表**:填了时间就是日程,不填就落进所选看板 —— 不用先想"我该用哪个入口"。日程按天归属,跨天自然不再出现。
### 看板
- 事项:双击改名、勾选完成、删除
- 事项附件:点回形针 → 上传即归属该事项
- 删除事项时,它的附件**退回总库**而不是跟着消失
### 每日事项
跨天时先把当天**逐条明细**(标题 + 完成状态)归档进 history,再重置勾选。所以能回答"上周三做了什么",而不是只剩一个计数。
## 数据
存放在 `$DSH_HOME/life-workbench/`(`DSH_HOME` 未设时即 `~/.dsh/life-workbench/`):
```
state.json 工作台状态(看板 / 事项 / 便签 / 日程 / 归档)
blob-<id>.b64 上传的文件与图片
```
- 单次上传上限 **8 MB**
- 写入采用「临时文件 + rename」的原子替换,避免半截文件覆盖好数据
- 从资料库移除条目**不会删除磁盘文件**(没有删除 API 语义时保留原件)
## 开发
**零构建** —— 纯 ESM JavaScript,改完 `lib/*.js` 重启 dsh host 即生效(不需要 TypeScript 或打包器)。
```
package.json 包清单(dsh.bundle.patch + dsh.client 声明)
cordis.patch.yml 插件行插入声明
lib/index.js Host 半边:数据权威 + HTTP 端点
lib/client.js 浏览器半边:__ModuleLoader__ 协议 + React UI
```
### 半边职责
- **Host**:结构归一、每日事项跨天归档、原子落盘、暴露 4 个端点。只依赖 `webServer` 服务。
- **Client**:通过 `window.__ModuleLoader__.load({ id, factory })` 装载,用 `require('react')` 取 React,注册到 `sidebar.panellist` + `main` 两个 slot。
### Host ↔ Client 通信
正式插件没有动态插件的 `host.call`,因此走同源 HTTP:
| 端点 | 作用 |
|---|---|
| `POST /life-workbench/load` | 读取状态(含每日归档与跨天重置) |
| `POST /life-workbench/save` | 写入状态(history 以磁盘为准合并) |
| `POST /life-workbench/upload` | 落盘一个 base64 文件 |
| `POST /life-workbench/readFile` | 读回某个文件的 base64 |
### 两个已知的实现约束
1. **Client 的 factory 必须 `return module.exports`** —— 漏掉会让浏览器启动页报 `invalid plugin ... received undefined`。
2. **`link:` 安装时包自带的 bundle patch 不会被 dsh 收集**(roster 里没有该 bundle 的 section)。这只影响本地 link 开发,此时改用 profile 用户层:
```yaml
# ~/.dsh/profiles/web/cordis.patch.yml
- insert:
- id: ui-life-workbench
name: 'dsh-life-workbench'
```
用 `dsh --profile web --dump-config | grep -A2 life-workbench` 验证是否进入 roster。
**从 npm 安装没有这个问题** —— 已实测:roster 中会出现 `# == dsh-life-workbench` 段,装完即可用,不需要任何额外步骤。
## 许可
MIT
Install
dsh plugin --profile web add github:meihaoyidian/life-workbench#23d29a884f0e2542c9737a7c22999b1bfc599a75
Profile: web
With the hub plugin installed, ask your agent to install it by name — it resolves the same plan shown here.
dsh plugin --profile web add github:stvlynn/dsh.fish#path:packages/dsh-plugin-hub
install dsh-life-workbench from the hub