dsh-tab 0.0.0-stage → 0.2.0

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/CHANGELOG.md ADDED
@@ -0,0 +1,18 @@
1
+ # Changelog
2
+
3
+ ## 0.2.0 — 2026-11-01
4
+
5
+ - npm 包名:`dsh-tab`,首次发布。
6
+ - 新增书页式会话标签栏:一个会话一个标签,点击切换会话不刷新页面。
7
+ - 新增工作区角标:每个标签左上角显示所属工作区(颜色由工作区 ID 哈希得到,悬停看全名)。
8
+ - 新增拖拽排序:同组内拖动标签调整顺序,松手即写入 `localStorage`。
9
+ - 新增固定 / 取消固定:固定标签排在最左、只显示图标。
10
+ - 新增右键菜单:关闭 / 关闭右侧 / 关闭其他 / 关闭全部 / 固定 / 归档会话。
11
+ - 新增状态点、`←` / `→` 键盘切换、中键关闭。
12
+ - 切换标签改为先跑 140ms 标签动画,再在 150ms 后切换会话内容,避免官方整页重渲染打断动画。
13
+ - 右栏全屏时标签栏隐藏并把帧首行归零,消除顶部 44px 空白。
14
+ - 关闭全部 / 关闭最后一个空白标签时保留当前空白页,避免标签栏空着或旧标签被异步加回。
15
+
16
+ ## 0.1.0 — 2026-10
17
+
18
+ - 首个可用版本:标签栏、新建标签、关闭标签、归档会话、会话状态点、localStorage 持久化。
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 imchangchang
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:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
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.
package/README.md CHANGED
@@ -1,3 +1,159 @@
1
- # Temporary Holding Version
1
+ # dsh-tab
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ 给 [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness)(DSH)会话区加一排书页式会话标签页:一个会话一个标签,切换不刷新页面,可以固定、关闭、归档、拖拽排序,每个标签还会显示它所属的工作区。
4
+
5
+ Browser-style conversation tabs for DeepSeek Harness (DSH): one tab per conversation, workspace badges, drag reorder, pin / close / archive. Built on official DSH slots, services and theme tokens.
6
+
7
+ [![npm](https://img.shields.io/npm/v/dsh-tab.svg?color=cb3837)](https://www.npmjs.com/package/dsh-tab)
8
+ [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/imchangchang/dsh-tab/blob/main/LICENSE)
9
+ [![DSH](https://img.shields.io/badge/DSH-0.2.1--rc.5-4d93f8.svg)](#兼容性)
10
+ [![Platform](https://img.shields.io/badge/platform-web%20%7C%20desktop-6b7280.svg)](#兼容性)
11
+
12
+ npm 包名:**`dsh-tab`**。
13
+
14
+ ![标签栏特写](https://raw.githubusercontent.com/imchangchang/dsh-tab/main/docs/images/bar-closeup.png)
15
+
16
+ ## 功能
17
+
18
+ - **一个会话一个标签页**:打开、恢复、新建会话时自动入签;点击标签走官方 `uiWorkspace.openSession`,不刷新页面。当前会话的标签和下面的会话页连成一张纸,形成「书页」效果。
19
+ - **工作区角标**:每个标签左上角显示所属工作区(颜色由工作区 ID 哈希得到,文字是工作区名,悬停看全名);固定标签只显示图标时用更小字号。
20
+ - **新建会话**:`+` 在最后一个标签右侧;标签多到放不下时标签条自己横向滚动,`+` 始终可见。
21
+ - **固定 / 取消固定**:固定的标签排在最左、只显示图标(40px 宽)并带状态点,和普通标签之间有分隔线。
22
+ - **拖拽排序**:按住标签左右拖动即可换位,落点画一条强调色竖线;固定标签和普通标签各自在自己的分组内排序,顺序存 `localStorage`,刷新保持。`Esc` 或窗口失焦取消本次拖拽。
23
+ - **右键菜单**:关闭标签页 / 关闭右侧 / 关闭其他 / 关闭全部 / 固定(取消固定)/ 归档会话。归档走官方 `uiWorkspace.archiveSession`,会话正在运行或等待回复时先确认「停止并归档」。
24
+ - **状态点**:蓝色呼吸点 = 正在运行,黄色 = 等你回复,绿色 = 有新的完成内容。
25
+ - **键盘**:标签获得焦点时 `←` / `→` 切换相邻标签并激活;右键菜单里 `Esc` 关闭。
26
+ - **过渡**:切换标签时先跑 140ms 的宽度 / 高度过渡,动画结束后再切会话内容——官方切会话会同步重渲染整个会话页(实测一次 60–75ms 长任务),两段并行会把标签动画顶卡。代价是内容切换比点击晚约 150ms。
27
+ - **浅色 / 深色**:全部颜色走 `--dsw-alias-*` token,自动跟随主题。
28
+
29
+ ## 截图
30
+
31
+ 下面三张截图全部用模拟数据生成(左侧栏、工作区、会话标题都是虚构的),原始页面在 [`docs/mock/demo.html`](https://github.com/imchangchang/dsh-tab/blob/main/docs/mock/demo.html),可以本地打开或跑 `npm run docs:mock` 重新生成。
32
+
33
+ 浅色主题:
34
+
35
+ ![浅色主题](https://raw.githubusercontent.com/imchangchang/dsh-tab/main/docs/images/tabs-light.png)
36
+
37
+ 深色主题:
38
+
39
+ ![深色主题](https://raw.githubusercontent.com/imchangchang/dsh-tab/main/docs/images/tabs-dark.png)
40
+
41
+ 右键菜单(固定标签、关闭、归档):
42
+
43
+ ![右键菜单](https://raw.githubusercontent.com/imchangchang/dsh-tab/main/docs/images/context-menu.png)
44
+
45
+ ## 安装
46
+
47
+ 要求:DSH 桌面版或 Web GUI,0.2.1-rc.5 附近版本(用法见「兼容性」)。
48
+
49
+ **从 npm 安装(推荐)**:让 Agent 执行
50
+
51
+ ```
52
+ plugin_manager install_bundle target=dsh-tab
53
+ ```
54
+
55
+ 或先本地下载包再安装:
56
+
57
+ ```bash
58
+ npm pack dsh-tab # 或在 npmjs.com/package/dsh-tab 下载 tgz
59
+ ```
60
+
61
+ 安装后刷新窗口(macOS 上 `Cmd+R`)生效。
62
+
63
+ **从源码安装**:
64
+
65
+ ```bash
66
+ git clone https://github.com/imchangchang/dsh-tab.git
67
+ ```
68
+
69
+ 然后在 DSH 里把仓库目录作为本地插件安装:设置 → 插件 → 添加插件,选择 `dsh-tab` 目录;或让 Agent 执行 `plugin_manager install_bundle target=<dsh-tab 的绝对路径>`。
70
+
71
+ 插件没有构建步骤,`client.js` 由 DSH 直接加载;安装/升级后在设置里确认依赖版本是刚发布的版本。
72
+
73
+ ## 使用
74
+
75
+ | 操作 | 方式 |
76
+ | --- | --- |
77
+ | 切换会话 | 左键点击标签页 |
78
+ | 关闭标签页 | 标签页上的 `×` / 鼠标中键 / 右键菜单 |
79
+ | 新建会话 | 最后一个标签右侧的 `+` |
80
+ | 调整顺序 | 按住标签左右拖拽(同组内) |
81
+ | 固定 / 取消固定 | 右键菜单 → 固定标签页 / 取消固定标签页 |
82
+ | 关闭一批 | 右键菜单 → 关闭右侧 / 关闭其他 / 关闭全部 |
83
+ | 归档会话 | 右键菜单 → 归档会话(运行中会先确认是否停止) |
84
+ | 键盘切换 | 标签聚焦时 `←` / `→` |
85
+
86
+ ## 工作原理
87
+
88
+ 插件分两半:
89
+
90
+ | 部分 | 文件 | 说明 |
91
+ | --- | --- | --- |
92
+ | 宿主半 | `index.js` | 空 `apply()`,只负责让 DSH 认识这个包 |
93
+ | 浏览器半 | `client.js` | 标签栏、右键菜单、拖拽、帧布局样式、`localStorage` 持久化 |
94
+
95
+ 浏览器半用到的官方扩展点:
96
+
97
+ | 扩展点 | 用途 |
98
+ | --- | --- |
99
+ | `shell.overlay` 座位 | 标签栏放在会话列顶部,绝对定位、横跨「会话列 + 右侧产物栏」 |
100
+ | 帧布局样式 | 把三栏 frame 改成三行:第 1 行 44px 给标签栏,第 2 行会话内容,第 3 行官方 `shell.bottom`。只依赖官方既有标记 `data-shell-bottom` / `data-shell-overlay` / `data-side` |
101
+ | `ctx.uiWorkspace.openSession / startSession / archiveSession` | 切换、新建、归档会话 |
102
+ | `ctx.sessions.list` | 读当前会话(`retainedBy.mainView > 0`)与会话状态 |
103
+ | `useWorkspaces` | 取工作区标题与会话归属,生成角标 |
104
+ | `ctx.slots.inject('shell.overlay', …)` | 注册 React 组件,标准 props 直接可用 |
105
+ | `ctx.locale.register / bind` | 中英文文案 |
106
+ | 主题 token | `--dsw-alias-*`,浅色 / 深色自动跟随 |
107
+
108
+ 标签顺序和固定状态存在浏览器 `localStorage` 的 `dsh.tab.view.v2` 里(`{ tabs: string[], pinned: string[] }`),旧键 `dsh.tab.openSessions.v1` 会自动迁移。
109
+
110
+ ## 兼容性
111
+
112
+ - 开发和验证环境:DSH 桌面版 **0.2.1-rc.5**(macOS),Web GUI 同版本。
113
+ - 帧布局是唯一与官方 DOM 强耦合的部分:如果官方改了 frame 的三行 / 标记结构,标签栏会回退到三栏下方(不会崩溃),需要按新 DOM 更新 `FRAME_CSS`。
114
+ - 插件 API 只使用官方文档列出的座位、服务与 token;不读官方 store,不写官方 DOM 内容。
115
+
116
+ ## 数据与隐私
117
+
118
+ - 标签顺序、固定状态只存在浏览器 `localStorage`,不上传,不发网络请求。
119
+ - 不收集会话内容;工作区角标只读官方工作区标题。
120
+ - 关闭标签页不等于删除会话;归档会话走官方归档接口,可在官方归档列表中恢复。
121
+
122
+ ## 开发
123
+
124
+ 不需要构建:
125
+
126
+ ```bash
127
+ npm run check # node --check 语法检查
128
+ npm run docs:mock # 从 client.js 的 CSS 生成 docs/mock/demo.html(模拟数据截图页)
129
+ npm pack --dry-run # 查看要发布到 npm 的文件
130
+ ```
131
+
132
+ 本地开发时把仓库目录 link 到 DSH profile 的依赖里(或直接用「安装」里的步骤),改 `client.js` 后 HMR 会应用浏览器半,刷新窗口生效。
133
+
134
+ 目录:
135
+
136
+ ```
137
+ client.js 浏览器半:标签栏 / 菜单 / 拖拽 / 帧布局样式 / 持久化
138
+ index.js 宿主半(空 apply)
139
+ cordis.patch.yml bundle patch:插入一个 loader 行
140
+ locale/zh.json 插件元数据(中文)
141
+ locale/en.json 插件元数据(英文)
142
+ icon.svg 插件图标
143
+ docs/mock/demo.html 模拟数据演示页(截图用)
144
+ docs/images/ README 截图
145
+ scripts/make-demo.mjs 生成演示页
146
+ ```
147
+
148
+ ## 已知边界
149
+
150
+ - 标签宽度跟着标题文字自适应:普通标签最多 180px,激活标签最多 270px(普通标签的 1.5 倍),标题短就正好显示全部文字、不预留空白。
151
+ - 工作区角标最多占标签宽度的 1/2,长工作区名会截断(悬停看全名);固定标签只有 40px 宽,角标固定 38px。
152
+ - 拖拽只在同一分组内生效,不能把固定标签拖成普通标签;拖到另一端时不会自动滚标签条。
153
+ - 切换标签会先跑标签动画、再切会话内容,内容比点击晚约 150ms;可以用 `client.js` 顶部的 `SELECT_COMMIT_DELAY` 调整或关闭这个延迟。
154
+ - 未实现全局快捷键(`⌘T` / `⌘W` 等);右键菜单不支持方向键导航(标签本身支持 `←` / `→`)。
155
+ - 只在 macOS 的 DSH 桌面版和 Chrome 系 Web GUI 上验证过,其他平台尚未测试。
156
+
157
+ ## License
158
+
159
+ [MIT](https://github.com/imchangchang/dsh-tab/blob/main/LICENSE)