dsh-dock 0.1.0 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE CHANGED
@@ -2,20 +2,17 @@ MIT License
2
2
 
3
3
  Copyright (c) 2026 wycto
4
4
 
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
6
+ associated documentation files (the "Software"), to deal in the Software without restriction, including
7
+ without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the
9
+ following conditions:
11
10
 
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
11
+ The above copyright notice and this permission notice shall be included in all copies or substantial
12
+ portions of the Software.
14
13
 
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
15
+ LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO
16
+ EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
17
+ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
18
+ USE OR OTHER DEALINGS IN THE SOFTWARE.
package/README.md CHANGED
@@ -1,107 +1,98 @@
1
- # dsh-dock
1
+ # dsh-dock · 功能坞
2
2
 
3
3
  [![npm version](https://img.shields.io/npm/v/dsh-dock)](https://www.npmjs.com/package/dsh-dock)
4
4
  [![license](https://img.shields.io/npm/l/dsh-dock)](LICENSE)
5
5
 
6
- **DeepSeek Harness 功能中枢插件**:用一张管理面板,统一注册、开关所有小功能。
6
+ **DeepSeek Harness 功能坞插件**:用一张管理面板,统一注册、开关所有小功能。
7
7
 
8
- 模型余额、Token 用量记录、任务动画……这些散落的小功能,全部收进一个面板:
9
- 每个功能是独立模块,有注册表、有开关、有错误隔离。新功能按注册表模式追加,老功能互不牵连。
8
+ 模型余额、用量记录、模型设置、图片理解代理……这些散落的小功能,全部收进一个「功能坞」:
9
+ 每个功能是独立模块,有注册表、有开关、有错误隔离。新功能按模块追加,老功能互不牵连。
10
10
 
11
- > 前身:本地原型 `feature-hub`(已安装验证),本包为其正式发布的 npm 版本。
12
- > 相关功能包:`@wycto/dsh-balance-panel`、`@wycto/dsh-token-usage`、`@wycto/dsh-task-pulse`
13
- > (后续按路线图吸收为中枢内的功能模块,或保持独立包并注册进中枢)。
11
+ ![功能坞首页总揽](screenshots/dock-home.png)
14
12
 
15
13
  ---
16
14
 
17
- ## 当前状态(v0.1.0 · 基础框架)
15
+ ## 功能一览
18
16
 
19
- - ✅ 设置页新增一整页「功能中枢」面板(侧栏底部 → 设置 → 功能中枢)
20
- - ✅ 功能注册表:`FEATURES` 一处登记,面板自动渲染
21
- - ✅ 每功能独立开关 + 错误隔离:单个功能出错只降级自己
22
- - ✅ 示例功能:心跳监视、主题信息(纯 Client,开箱可用)
23
- - 🚧 示例功能的开关为浏览器内存态,刷新重置(持久化在 0.5.0)
24
- - 🚧 三个真实功能已登记为**规划占位**,面板可见但显示"规划中"
17
+ | 功能 | 说明 |
18
+ |---|---|
19
+ | **用量记录** | 记录全部 LLM API 调用:秒级时间筛选、Token/费用统计(峰谷计价 + 官网价目自动同步)、分组汇总、明细检索与 CSV 导出 |
20
+ | **模型设置** | 编辑各 Provider 模型目录:输入类型(文本/图片 + 标注)与思考强度档位;写回官方配置热生效 |
21
+ | **模型余额** | 展示所有模型 Provider 账户余额(5 分钟自动刷新) |
22
+ | **图片理解代理** | 图片识别等(visionproxy) |
23
+ | **心跳监视 / 主题信息** | 示例功能(纯 Client) |
25
24
 
26
- ## 面板入口
25
+ **会话区随身小控件**:启用后,在会话输入区工具行(模型选择器左侧)显示——
27
26
 
28
- ```
29
- 设置(侧栏底部)→ 功能中枢
30
- ```
27
+ - **模型余额**:当前选中 Provider 的账户余额(跟随模型切换实时更新),点击打开功能坞并定位到该 Provider 的余额详情;
28
+ - **用量记录**:当前会话的总 Token 与估算花费(10 秒静默刷新),点击打开功能坞并跳转到该会话的用量记录。
31
29
 
32
- ## 目录结构
30
+ ![会话区余额/用量小控件](screenshots/dock-chips.png)
33
31
 
34
- ```
35
- dsh-dock/
36
- ├── index.js # Host 半部:功能注册表 + 每功能生命周期(setup/dispose)+ 错误隔离
37
- ├── client.js # Client 半部:中枢面板(settings.section),浏览器 bundle,无需构建器
38
- ├── cordis.patch.yml # 组合层:insert 一行 dsh-dock
39
- ├── package.json # 双面程序包清单(dsh.bundle.patch + dsh.client)
40
- └── scripts/publish.sh # 一键发布(登录检查 + 预览 + publish)
41
- ```
32
+ 勾选「启用」即显示,点芯片跳转;每个功能可在面板页脚或设置页单独设置「会话页显示/隐藏」。
42
33
 
43
- ## 路线图(后面要干嘛)
34
+ ## 界面
44
35
 
45
- | 版本 | 内容 | 动哪里 |
46
- | --- | --- | --- |
47
- | **0.2.0** | 接入**模型余额**:拉取所有模型 Provider 账户余额并展示 | `index.js` 的 `hostSetups.balance` 实现拉取;打通 Client↔Host 联通(typert);`client.js` 的 balance 占位改为真实视图 |
48
- | **0.3.0** | 接入 **Token 用量记录**:记录全部 LLM API 调用,支持时间范围/维度筛选与统计 | `hostSetups.tokenlog` 监听事件记账;面板加统计视图 |
49
- | **0.4.0** | 接入**任务动画**:任务进度动画、完成/卡住通知 | 纯 Client 功能模块;如需挂对话区,在模块内注册对应 slot(如 `conversation.composer.dock`) |
50
- | **0.5.0** | 开关状态**持久化**、Host↔Client 双侧注册表打通 | 状态写入持久化服务;可选依赖注册(面板不在,功能照跑) |
36
+ 点击侧栏底部「功能坞」按钮,弹出功能面板:左侧导航 = 首页总揽 + 各功能模块,右侧内容区。
51
37
 
52
- 后续新增功能遵循同一模式:**注册表加一条 + 视图加一个**,即插即用。
38
+ ![用量记录页](screenshots/dock-tokenlog.png)
53
39
 
54
- ## 新增一个功能(三步)
40
+ 面板支持最大化 / 最小化 / 还原、标题栏拖动、右下角缩放。
55
41
 
56
- 1. `client.js` 的 `FEATURES` 加一条 `{ id, name, description, defaultEnabled }`;
57
- 2. `featureViews` 加同名组件(`react.createElement` 写法,可用 `ctx.get(...)` 取 Client 服务);
58
- 3. 需要 Host 侧逻辑的,在 `index.js` 的 `hostSetups` 加一个返回 disposer 的函数。
42
+ ---
59
43
 
60
44
  ## 安装
61
45
 
62
- 开发期(link 模式):
46
+ dsh-dock 是 DeepSeek Harness(dsh)的插件,通过 dsh 的插件市场安装:
63
47
 
64
- ```sh
65
- dsh plugin --profile web add dsh-dock # npm 版安装
66
- # 或本地路径:dsh plugin --profile web add /path/to/dsh-dock
48
+ ```bash
49
+ # 在 dsh 配置中启用插件(或通过 dsh 插件命令)
50
+ npx @deepseek-ai/dsh plugin add dsh-dock
67
51
  ```
68
52
 
69
- 查看/卸载:
53
+ 或手动在 dsh 的 `cordis.patch.yml` 中声明后重启。
70
54
 
71
- ```sh
72
- dsh web --dump-config # 查看合成层(含 dsh-dock)
73
- dsh plugin --profile web remove dsh-dock # 卸载
74
- ```
75
-
76
- ### 从 feature-hub 迁移
55
+ 要求:DeepSeek Harness 环境(dsh),Node.js 18+。
77
56
 
78
- 本包是 feature-hub 原型的正式发布版,面板与功能几乎一致:
57
+ ## 使用方法
79
58
 
80
- ```sh
81
- dsh plugin --profile web remove dsh-feature-hub
82
- dsh plugin --profile web add dsh-dock
83
- ```
59
+ 1. 启动 dsh:`npx @deepseek-ai/dsh web`
60
+ 2. 打开左侧边栏底部的 **功能坞** 按钮
61
+ 3. 在 **设置 → 功能坞** 面板中启用/停用各功能模块
62
+ 4. 每个功能页内可进行具体操作(余额查询、用量统计、模型目录编辑等)
84
63
 
85
- (两个插件共存亦可,只是面板重复;建议迁移后移除旧版。)
64
+ > 功能开关为浏览器内存态,刷新页面后重置(持久化在规划中)。
86
65
 
87
- ## 开发与发布
66
+ ## 开发:新增一个功能模块
88
67
 
89
- - **开发提交**:Gitea 仓库(`wycto/dsh-dock`)
90
- - **发版**:GitHub 仓库(`github.com/wycto/dsh-dock`)打 tag 发 Release
91
- - **npm 发布**(无作用域名先到先得,已占用后归本账号所有):
68
+ 每个功能是一个 `features/<id>/` 目录,由两部分组成:
92
69
 
93
- ```sh
94
- cd dsh-dock
95
- npm login # 首次:登录你的 npm 账号(wycto)
96
- scripts/publish.sh # 预览 → 登录检查 → 发布
70
+ ```
71
+ features/<id>/
72
+ host.js # 宿主半部:注册 RPC 路由 / 定时任务(纯 ESM,零构建)
73
+ view.js(x) # 客户端视图:渲染面板内容(自带样式,CSS 类名带前缀隔离)
97
74
  ```
98
75
 
99
- > 若发布时报 `EPERM`(npm 缓存目录里有 root 属主文件的历史 bug):
100
- > 修复一次 `sudo chown -R 501:20 ~/.npm`,或临时绕过
101
- > `CACHE_DIR=/tmp/dsh-dock-npm-cache ./scripts/publish.sh`。
76
+ 在视图模块导出功能描述符:
77
+
78
+ ```js
79
+ export const feature = {
80
+ id: "my-feature",
81
+ name: "我的功能",
82
+ order: 160, // 菜单排序(首页固定第一,数值越大越靠后)
83
+ accent: "#22c55e", // 品牌色
84
+ description: "…",
85
+ css: "…",
86
+ View: MyView, // 面板内容组件,收到 { ctx, feature, params }
87
+ HomeStat: MyStat, // 可选:首页总揽卡片统计
88
+ Chip: MyChip, // 可选:会话输入区小控件
89
+ };
90
+ ```
102
91
 
103
- > 注:`package.json` 中仓库链接请在 Gitea/GitHub 建仓后按实际地址更新。
92
+ 外壳只做组装:宿主半部在 `index.js` 注册,客户端在外壳 `src/client.jsx` 装配。
93
+ 每个模块可整体拎出单独打包发布(`scripts/extract-feature.mjs` 生成独立包骨架,
94
+ 独立包装回后经 **dockBridge** 注册回功能坞菜单)。
104
95
 
105
- ## License
96
+ ## 许可
106
97
 
107
- MIT
98
+ [MIT](LICENSE)