@michengai/dsh-codex-ui 0.2.112 → 0.2.113
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 +23 -0
- package/CHANGELOG.zh-CN.md +23 -0
- package/README.md +65 -71
- package/README.zh-CN.md +64 -73
- package/lib/client.js +25 -8
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,29 @@ This changelog records recent releases of DSH Codex UI and its one-click install
|
|
|
6
6
|
|
|
7
7
|
## Unreleased
|
|
8
8
|
|
|
9
|
+
## 0.2.113 - 2026-09-08
|
|
10
|
+
|
|
11
|
+
### Fixed
|
|
12
|
+
|
|
13
|
+
- Fixed Chinese text wrapping into vertical columns and misaligned menu and footer text while collapsing the sidebar.
|
|
14
|
+
- Restored sidebar expand and collapse transitions when used alongside `dsh-better-sidebar`, while preserving right-panel animations.
|
|
15
|
+
- Synchronized sidebar width and content fades, removed redundant width updates, and kept rapid toggling and dragging responsive.
|
|
16
|
+
|
|
17
|
+
## suite-installer-v0.1.30 - 2026-09-08
|
|
18
|
+
|
|
19
|
+
Resolved and pinned the following member versions from the official npm registry:
|
|
20
|
+
|
|
21
|
+
- `@michengai/dsh-archive-manager@0.1.32`
|
|
22
|
+
- `@michengai/dsh-codex-ui@0.2.112`
|
|
23
|
+
- `@michengai/dsh-skills-manager@0.1.43`
|
|
24
|
+
- `@michengai/dsh-agency-agents@0.1.34`
|
|
25
|
+
- `@michengai/dsh-im-connect@0.1.38`
|
|
26
|
+
- `@michengai/dsh-automation@0.1.34`
|
|
27
|
+
- `@michengai/dsh-btw@0.1.4`
|
|
28
|
+
- `@michengai/dsh-simplify@0.1.2`
|
|
29
|
+
|
|
30
|
+
The installer uses these exact versions for reproducible installation.
|
|
31
|
+
|
|
9
32
|
## 0.2.112 - 2026-09-08
|
|
10
33
|
|
|
11
34
|
### Release automation
|
package/CHANGELOG.zh-CN.md
CHANGED
|
@@ -6,6 +6,29 @@
|
|
|
6
6
|
|
|
7
7
|
## 未发布
|
|
8
8
|
|
|
9
|
+
## 0.2.113 - 2026-09-08
|
|
10
|
+
|
|
11
|
+
### 修复
|
|
12
|
+
|
|
13
|
+
- 修复侧栏收缩时中文被挤成竖排、菜单与页脚文字错位的问题。
|
|
14
|
+
- 修复与 `dsh-better-sidebar` 同时使用时,侧栏展开和收起缺少过渡动画的问题,并保留右侧面板动画。
|
|
15
|
+
- 同步侧栏宽度与内容淡入淡出的节奏,消除重复宽度更新造成的额外开销;快速切换和拖拽保持正常响应。
|
|
16
|
+
|
|
17
|
+
## suite-installer-v0.1.30 - 2026-09-08
|
|
18
|
+
|
|
19
|
+
从官方 npm 解析并锁定以下成员版本:
|
|
20
|
+
|
|
21
|
+
- `@michengai/dsh-archive-manager@0.1.32`
|
|
22
|
+
- `@michengai/dsh-codex-ui@0.2.112`
|
|
23
|
+
- `@michengai/dsh-skills-manager@0.1.43`
|
|
24
|
+
- `@michengai/dsh-agency-agents@0.1.34`
|
|
25
|
+
- `@michengai/dsh-im-connect@0.1.38`
|
|
26
|
+
- `@michengai/dsh-automation@0.1.34`
|
|
27
|
+
- `@michengai/dsh-btw@0.1.4`
|
|
28
|
+
- `@michengai/dsh-simplify@0.1.2`
|
|
29
|
+
|
|
30
|
+
安装器使用这些精确版本执行安装,确保可复现。
|
|
31
|
+
|
|
9
32
|
## 0.2.112 - 2026-09-08
|
|
10
33
|
|
|
11
34
|
### 发布流程
|
package/README.md
CHANGED
|
@@ -6,9 +6,9 @@
|
|
|
6
6
|
|
|
7
7
|
# DSH Codex UI
|
|
8
8
|
|
|
9
|
-
**
|
|
9
|
+
**Organize projects, find conversations, and revisit long chats more easily in DSH Web**
|
|
10
10
|
|
|
11
|
-
[简体中文](README.zh-CN.md) · [
|
|
11
|
+
[简体中文](README.zh-CN.md) · [Changelog](CHANGELOG.md) · [Apache-2.0](LICENSE)
|
|
12
12
|
|
|
13
13
|
[](LICENSE)
|
|
14
14
|
[](https://www.npmjs.com/package/@michengai/dsh-codex-ui)
|
|
@@ -18,18 +18,18 @@
|
|
|
18
18
|
|
|
19
19
|
</div>
|
|
20
20
|
|
|
21
|
-
> DSH Codex UI is a community-maintained DeepSeek Harness (DSH)
|
|
21
|
+
> DSH Codex UI is a community-maintained interface plugin for DeepSeek Harness (DSH), not an official DeepSeek AI product.
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
Working across several projects and conversations in DSH Web? DSH Codex UI helps you organize the sidebar, find tasks quickly, and jump back to earlier questions in long chats. It offers a Codex-style interface with light and dark themes.
|
|
24
24
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
-
|
|
28
|
-
-
|
|
29
|
-
-
|
|
30
|
-
-
|
|
31
|
-
-
|
|
32
|
-
-
|
|
25
|
+
## What you can do
|
|
26
|
+
|
|
27
|
+
- **Organize projects and conversations**: expand or collapse projects, drag to reorder, pin frequently used projects, and see unread and running indicators.
|
|
28
|
+
- **Find things quickly**: search for conversations, settings, and quick actions from the header.
|
|
29
|
+
- **Manage everyday tasks**: rename, archive, or fork conversations, and open project folders from their menus.
|
|
30
|
+
- **Revisit long chats**: select a turn marker to jump directly to the corresponding question.
|
|
31
|
+
- **Reuse earlier input**: press Up/Down in an empty composer to recall text submitted in the current workspace.
|
|
32
|
+
- **Add features as needed**: check companion plugins in **Settings → About** and install or update the ones you need.
|
|
33
33
|
|
|
34
34
|
## Screenshots
|
|
35
35
|
|
|
@@ -37,7 +37,7 @@ Light theme: Codex-style sidebar, workspace tree, and conversation column.
|
|
|
37
37
|
|
|
38
38
|

|
|
39
39
|
|
|
40
|
-
Dark theme:
|
|
40
|
+
Dark theme: for users who prefer a darker interface.
|
|
41
41
|
|
|
42
42
|

|
|
43
43
|
|
|
@@ -53,37 +53,36 @@ Conversation menu: rename, pin, unread, archive, fork, copy, and delete.
|
|
|
53
53
|
|
|
54
54
|
- A working DeepSeek Harness Web installation with `dsh` available in PowerShell.
|
|
55
55
|
- Examples use the `web` profile; replace it with the target profile.
|
|
56
|
-
-
|
|
56
|
+
- Node.js must satisfy `^22.19.0 || >=24.0.0`. Installing from source also requires pnpm.
|
|
57
57
|
|
|
58
58
|
## DSH product ecosystem
|
|
59
59
|
|
|
60
|
-
|
|
60
|
+
For a ready-to-use workbench, download [DSH Codex Desktop](https://github.com/MichengAI/dsh-codex-desktop/releases). If you already use [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness), install any of these eight plugins individually. The desktop app includes all eight.
|
|
61
61
|
|
|
62
|
-
|
|
|
62
|
+
| Plugin | What you can do |
|
|
63
63
|
| --- | --- |
|
|
64
|
-
| [
|
|
65
|
-
| [
|
|
66
|
-
|
|
|
64
|
+
| [Codex UI](https://github.com/MichengAI/dsh-codex-ui) | Organize projects and conversations, search tasks, and navigate chat turns |
|
|
65
|
+
| [IM Connect](https://github.com/MichengAI/dsh-im-connect) | Send tasks and receive replies through your usual messenger |
|
|
66
|
+
| [Automation](https://github.com/MichengAI/dsh-automation) | Schedule tasks and review each run |
|
|
67
|
+
| [Skills Manager](https://github.com/MichengAI/dsh-skills-manager) | Find, enable, create, and import local skills |
|
|
68
|
+
| [Archive Manager](https://github.com/MichengAI/dsh-archive-manager) | Search, restore, or clean up archived conversations |
|
|
69
|
+
| [Agency Agents](https://github.com/MichengAI/dsh-agency-agents) | Choose and summon specialists for your task |
|
|
70
|
+
| [BTW](https://github.com/MichengAI/dsh-btw) | Ask side questions without interrupting the main task |
|
|
71
|
+
| [Simplify](https://github.com/MichengAI/dsh-simplify) | Use /simplify to improve code within your Git changes |
|
|
67
72
|
|
|
68
73
|
## Installation
|
|
69
74
|
|
|
70
|
-
|
|
75
|
+
Choose agent-assisted or manual installation below. Both use the same command, requesting the latest version from the official npm registry.
|
|
71
76
|
|
|
72
|
-
### Ask
|
|
77
|
+
### Ask an agent to install it (recommended)
|
|
73
78
|
|
|
74
|
-
|
|
79
|
+
Send the prompt below to any agent that can run terminal commands on your computer. Replace `web` with your actual profile. Once installed, use the plugin in DSH.
|
|
75
80
|
|
|
76
81
|
```text
|
|
77
|
-
Install the
|
|
82
|
+
Install the DSH plugin @michengai/dsh-codex-ui into my local web profile by running: dsh plugin --profile web add @michengai/dsh-codex-ui@latest --registry=https://registry.npmjs.org/. Then run dsh --profile web --dump-config, confirm the configuration includes codex-ui, and explain how to reload DSH and start using the plugin.
|
|
78
83
|
```
|
|
79
84
|
|
|
80
|
-
|
|
81
|
-
| --- | --- |
|
|
82
|
-
| DSH | Send the sentence above to the current session. |
|
|
83
|
-
| Codex | Send the sentence above to Codex and let it install locally. |
|
|
84
|
-
| WorkBuddy | Send the sentence above to WorkBuddy. |
|
|
85
|
-
|
|
86
|
-
### Install Codex UI only
|
|
85
|
+
### Install manually
|
|
87
86
|
|
|
88
87
|
```powershell
|
|
89
88
|
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
|
|
@@ -92,25 +91,7 @@ dsh plugin --profile web add @michengai/dsh-codex-ui@latest --registry=https://r
|
|
|
92
91
|
dsh --profile web --dump-config
|
|
93
92
|
```
|
|
94
93
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
### Install from source
|
|
98
|
-
|
|
99
|
-
Use this for debugging or unpublished changes. The cloned directory becomes the plugin source path:
|
|
100
|
-
|
|
101
|
-
```powershell
|
|
102
|
-
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
|
|
103
|
-
$OutputEncoding = [System.Text.Encoding]::UTF8
|
|
104
|
-
Set-Location D:\Repository\deepseek-harness-plugin
|
|
105
|
-
git clone https://github.com/MichengAI/dsh-codex-ui.git
|
|
106
|
-
Set-Location .\dsh-codex-ui
|
|
107
|
-
pnpm install --frozen-lockfile
|
|
108
|
-
pnpm build
|
|
109
|
-
dsh plugin --profile web add .
|
|
110
|
-
dsh --profile web --dump-config
|
|
111
|
-
```
|
|
112
|
-
|
|
113
|
-
Restart DSH Web and hard-refresh the browser. Do not copy `lib` manually; local installation reads both package metadata and `cordis.patch.yml`.
|
|
94
|
+
Restart DSH Web and hard-refresh the browser (usually `Ctrl+Shift+R`). Once the new sidebar appears, you are ready to use it. Uninstalling the plugin restores the default sidebar.
|
|
114
95
|
|
|
115
96
|
## Usage
|
|
116
97
|
|
|
@@ -123,54 +104,67 @@ Open DSH Web. The left navigation is rendered by this plugin.
|
|
|
123
104
|
| Collapse the sidebar | Use the header panel button. The expand control stays on the collapsed rail. |
|
|
124
105
|
| Pin a workspace | Drag it into **Pinned**, or use **Pin project** in the project menu. |
|
|
125
106
|
| Manage a conversation | Open the conversation menu to rename, pin, mark unread, archive, fork, copy, or delete. |
|
|
107
|
+
| Reuse input | Press Up/Down in an empty composer to recall text submitted in the current workspace. |
|
|
126
108
|
| Jump between turns | Use the turn marks on the left of the current conversation. |
|
|
127
109
|
| Inspect connectors | Open **Settings → Connectors**. Addresses, commands, and credentials are never shown. |
|
|
128
110
|
| Check companion plugins | Open **Settings → About** to install or update individual companion plugins. |
|
|
129
111
|
|
|
130
|
-
|
|
112
|
+
## FAQ
|
|
131
113
|
|
|
132
|
-
|
|
114
|
+
### Do pinned projects and unread markers persist?
|
|
133
115
|
|
|
134
|
-
|
|
135
|
-
| --- | --- | --- |
|
|
136
|
-
| Pinned workspaces | Host profile file with a `localStorage` cache | Survives DSH restarts and Desktop tray reloads |
|
|
137
|
-
| Unread conversations | `localStorage` key `dsh.session-unread.v1` | Current browser only |
|
|
138
|
-
| Conversation records | DSH host services | Unchanged by this plugin |
|
|
116
|
+
Pinned projects are saved in your DSH configuration and survive restarts. Unread markers are stored only in the current browser and do not sync across browsers.
|
|
139
117
|
|
|
140
|
-
|
|
141
|
-
- It does not modify host source code or the conversation data model.
|
|
142
|
-
- Permanent deletion of archived conversations is provided by `@michengai/dsh-archive-manager`.
|
|
143
|
-
- The Connectors directory never exposes addresses, commands, or credentials.
|
|
118
|
+
### Why is my earlier input missing?
|
|
144
119
|
|
|
145
|
-
|
|
120
|
+
Input history is stored in the current browser, separately for each workspace, with up to 200 entries per workspace. It records new input while the feature is active and does not import existing conversations. When browser storage is unavailable, history is kept temporarily in memory. The BTW plugin is not required.
|
|
146
121
|
|
|
147
|
-
|
|
148
|
-
- [src\client\index.ts](src/client/index.ts): client entry for sidebar, workspace tree, turn navigation, and Settings sections.
|
|
149
|
-
- [src\client\CodexSidebar.tsx](src/client/CodexSidebar.tsx): sidebar shell, search panel, and visual styles.
|
|
150
|
-
- [src\client\CodexWorkspaceBrowser.tsx](src/client/CodexWorkspaceBrowser.tsx): workspace and conversation interactions.
|
|
151
|
-
- `tests\*.assert.ts` and `tests\*.spec.ts`: interaction, visual, and runtime integration checks.
|
|
122
|
+
### Does removing a project delete local files?
|
|
152
123
|
|
|
153
|
-
|
|
124
|
+
Removing a workspace registration does not delete its folder or conversation records. Permanent deletion of archived conversations is provided by the companion Archive Manager plugin.
|
|
125
|
+
|
|
126
|
+
### What if nothing changes after installation?
|
|
127
|
+
|
|
128
|
+
Check that the installation profile matches the one running DSH Web, then restart DSH Web and hard-refresh the browser. Run `dsh --profile web --dump-config` to check that `codex-ui` is mounted.
|
|
129
|
+
|
|
130
|
+
## Development and contributing
|
|
131
|
+
|
|
132
|
+
### Install from source
|
|
133
|
+
|
|
134
|
+
Use this for debugging or unpublished changes. The cloned directory becomes the plugin source path:
|
|
154
135
|
|
|
155
136
|
```powershell
|
|
156
137
|
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
|
|
157
138
|
$OutputEncoding = [System.Text.Encoding]::UTF8
|
|
139
|
+
Set-Location D:\Repository\deepseek-harness-plugin
|
|
140
|
+
git clone https://github.com/MichengAI/dsh-codex-ui.git
|
|
141
|
+
Set-Location .\dsh-codex-ui
|
|
142
|
+
pnpm install --frozen-lockfile
|
|
158
143
|
pnpm build
|
|
159
|
-
pnpm test
|
|
160
144
|
dsh plugin --profile web add .
|
|
145
|
+
dsh --profile web --dump-config
|
|
161
146
|
```
|
|
162
147
|
|
|
163
|
-
|
|
148
|
+
Restart DSH Web and hard-refresh the browser. Do not copy `lib` manually; local installation reads both package metadata and `cordis.patch.yml`.
|
|
164
149
|
|
|
165
|
-
|
|
150
|
+
- [src\index.ts](src/index.ts): host entry and the non-sensitive Connectors directory endpoint.
|
|
151
|
+
- [src\client\index.ts](src/client/index.ts): client entry for sidebar, workspace tree, turn navigation, and Settings sections.
|
|
152
|
+
- [src\client\CodexSidebar.tsx](src/client/CodexSidebar.tsx): sidebar shell, search panel, and visual styles.
|
|
153
|
+
- [src\client\CodexWorkspaceBrowser.tsx](src/client/CodexWorkspaceBrowser.tsx): workspace and conversation interactions.
|
|
154
|
+
- `tests\*.assert.ts` and `tests\*.spec.ts`: interaction, visual, and runtime integration checks.
|
|
155
|
+
|
|
156
|
+
After changing `src`, rebuild, test, and install from the local directory:
|
|
166
157
|
|
|
167
158
|
```powershell
|
|
168
159
|
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
|
|
169
160
|
$OutputEncoding = [System.Text.Encoding]::UTF8
|
|
170
161
|
pnpm build
|
|
171
162
|
pnpm test
|
|
163
|
+
dsh plugin --profile web add .
|
|
172
164
|
```
|
|
173
165
|
|
|
166
|
+
New features should reuse existing DSH slots and public services. Do not depend on private host DOM or write conversation records.
|
|
167
|
+
|
|
174
168
|
## License
|
|
175
169
|
|
|
176
|
-
This project is licensed under [Apache License 2.0](LICENSE).
|
|
170
|
+
This project is licensed under [Apache License 2.0](LICENSE).
|
package/README.zh-CN.md
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
# DSH Codex UI
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
**让 DSH Web 中的项目更好整理、会话更快找到、长对话更易回看**
|
|
10
10
|
|
|
11
11
|
[English](README.md) · [更新日志](CHANGELOG.zh-CN.md) · [Apache-2.0](LICENSE)
|
|
12
12
|
|
|
@@ -18,29 +18,26 @@
|
|
|
18
18
|
|
|
19
19
|
</div>
|
|
20
20
|
|
|
21
|
-
> DSH Codex UI 是社区维护的 DeepSeek Harness(DSH
|
|
21
|
+
> DSH Codex UI 是社区维护的 DeepSeek Harness(DSH)界面增强插件,并非 DeepSeek AI 官方产品。
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
在 DSH Web 中同时处理多个项目和会话时,DSH Codex UI 帮你整理左侧导航、快速找到任务,并在长对话中跳回之前的提问。它提供 Codex 风格的界面,支持浅色和深色主题。
|
|
24
24
|
|
|
25
|
-
|
|
26
|
-
- 提供 Codex 风格顶栏:品牌标识、侧栏折叠和全局搜索。
|
|
27
|
-
- 工作区与会话支持展开折叠、拖拽排序、项目置顶、未读圆点和运行状态。
|
|
28
|
-
- 项目和会话菜单支持重命名、置顶、未读、归档、派生、打开目录、复制和删除。
|
|
29
|
-
- 调整会话列与输入卡片视觉,并为当前会话提供紧凑轮次导航。
|
|
30
|
-
- 空输入框按上下键召回已提交文本,按工作区隔离并保护草稿、输入法和候选菜单;无需安装 BTW。
|
|
31
|
-
- 在「设置 → 关于」展示配套插件状态,并可从 npm 安装缺失项。
|
|
25
|
+
## 你可以用它做什么
|
|
32
26
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
27
|
+
- **整理项目与会话**:展开或折叠项目、拖拽调整顺序、置顶常用项目,查看未读提醒和运行状态。
|
|
28
|
+
- **快速找到内容**:通过顶部搜索查找会话、设置和快捷操作。
|
|
29
|
+
- **管理日常任务**:在项目或会话菜单中重命名、归档、派生会话,或打开项目目录。
|
|
30
|
+
- **回看长对话**:点击轮次导航,直接跳到对应提问。
|
|
31
|
+
- **复用之前的输入**:输入框为空时,按上下方向键找回当前工作区中已提交的文本。
|
|
32
|
+
- **按需扩展功能**:在「设置 → 关于」查看配套插件,安装或更新需要的功能。
|
|
36
33
|
|
|
37
|
-
|
|
34
|
+
## 界面预览
|
|
38
35
|
|
|
39
36
|
浅色主题:Codex 风格侧栏、工作区会话树和会话列。
|
|
40
37
|
|
|
41
38
|

|
|
42
39
|
|
|
43
|
-
|
|
40
|
+
深色主题:适合偏好暗色界面的用户。
|
|
44
41
|
|
|
45
42
|

|
|
46
43
|
|
|
@@ -56,37 +53,36 @@
|
|
|
56
53
|
|
|
57
54
|
- 已可正常运行 DeepSeek Harness Web,且可在 PowerShell 中使用 `dsh`。
|
|
58
55
|
- 以下示例使用 `web` profile;请替换为实际目标 profile。
|
|
59
|
-
-
|
|
56
|
+
- 运行环境需满足 Node.js `^22.19.0 || >=24.0.0`;从源码安装还需要 pnpm。
|
|
60
57
|
|
|
61
58
|
## DSH 产品生态
|
|
62
59
|
|
|
63
|
-
Codex
|
|
60
|
+
想直接使用完整工作台,可下载 [DSH Codex Desktop](https://github.com/MichengAI/dsh-codex-desktop/releases);已有 [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) 环境,可按需独立安装以下 8 个自研插件。桌面端已随附这些插件。
|
|
64
61
|
|
|
65
|
-
|
|
|
62
|
+
| 插件 | 你可以用它做什么 |
|
|
66
63
|
| --- | --- |
|
|
67
|
-
| [
|
|
68
|
-
| [
|
|
69
|
-
|
|
|
64
|
+
| [Codex UI](https://github.com/MichengAI/dsh-codex-ui) | 整理项目与会话、搜索任务、跳转对话轮次 |
|
|
65
|
+
| [IM Connect](https://github.com/MichengAI/dsh-im-connect) | 从微信、飞书、钉钉等消息平台下任务、收回复 |
|
|
66
|
+
| [Automation](https://github.com/MichengAI/dsh-automation) | 按计划执行任务,查看每次运行的结果 |
|
|
67
|
+
| [Skills Manager](https://github.com/MichengAI/dsh-skills-manager) | 统一查找、启停、创建和导入本机技能 |
|
|
68
|
+
| [Archive Manager](https://github.com/MichengAI/dsh-archive-manager) | 搜索、恢复或清理已归档会话 |
|
|
69
|
+
| [Agency Agents](https://github.com/MichengAI/dsh-agency-agents) | 按任务选择并召唤专业角色 |
|
|
70
|
+
| [BTW](https://github.com/MichengAI/dsh-btw) | 在当前上下文中临时旁问,不打断主任务 |
|
|
71
|
+
| [Simplify](https://github.com/MichengAI/dsh-simplify) | 用 /simplify 整理 Git 改动范围内的代码 |
|
|
70
72
|
|
|
71
73
|
## 安装
|
|
72
74
|
|
|
73
|
-
|
|
75
|
+
下面提供 Agent 代装和手动安装两种方式,使用同一条安装命令。示例指定最新版和官方 npm 源。
|
|
74
76
|
|
|
75
|
-
###
|
|
77
|
+
### 让 Agent 帮你安装(推荐)
|
|
76
78
|
|
|
77
|
-
|
|
79
|
+
把下面这段话发给任意能够执行本机终端命令的 Agent。将 `web` 替换为实际使用的 profile;安装完成后,在 DSH 中使用本插件。
|
|
78
80
|
|
|
79
81
|
```text
|
|
80
|
-
|
|
82
|
+
请将 DSH 插件 @michengai/dsh-codex-ui 安装到本机 web profile,执行:dsh plugin --profile web add @michengai/dsh-codex-ui@latest --registry=https://registry.npmjs.org/。安装后执行 dsh --profile web --dump-config,确认配置包含 codex-ui,并告诉我如何重新加载 DSH 和开始使用。
|
|
81
83
|
```
|
|
82
84
|
|
|
83
|
-
|
|
84
|
-
| --- | --- |
|
|
85
|
-
| DSH | 把上面这句话发给当前会话。 |
|
|
86
|
-
| Codex | 把上面这句话发给 Codex,让它在本机执行安装。 |
|
|
87
|
-
| WorkBuddy | 把上面这句话发给 WorkBuddy。 |
|
|
88
|
-
|
|
89
|
-
### 只安装 Codex UI
|
|
85
|
+
### 手动安装
|
|
90
86
|
|
|
91
87
|
```powershell
|
|
92
88
|
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
|
|
@@ -95,25 +91,7 @@ dsh plugin --profile web add @michengai/dsh-codex-ui@latest --registry=https://r
|
|
|
95
91
|
dsh --profile web --dump-config
|
|
96
92
|
```
|
|
97
93
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
### 从源码安装
|
|
101
|
-
|
|
102
|
-
适用于调试或使用未发布改动。克隆后的目录会直接作为插件安装路径:
|
|
103
|
-
|
|
104
|
-
```powershell
|
|
105
|
-
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
|
|
106
|
-
$OutputEncoding = [System.Text.Encoding]::UTF8
|
|
107
|
-
Set-Location D:\Repository\deepseek-harness-plugin
|
|
108
|
-
git clone https://github.com/MichengAI/dsh-codex-ui.git
|
|
109
|
-
Set-Location .\dsh-codex-ui
|
|
110
|
-
pnpm install --frozen-lockfile
|
|
111
|
-
pnpm build
|
|
112
|
-
dsh plugin --profile web add .
|
|
113
|
-
dsh --profile web --dump-config
|
|
114
|
-
```
|
|
115
|
-
|
|
116
|
-
完成后重启 DSH Web 并硬刷新浏览器。不要手工复制 `lib`;本地目录安装会同时读取包信息和 `cordis.patch.yml`。
|
|
94
|
+
安装后重启 DSH Web,并硬刷新浏览器(通常为 `Ctrl+Shift+R`)。看到新的侧栏后即可开始使用;卸载插件会恢复默认侧栏。
|
|
117
95
|
|
|
118
96
|
## 使用
|
|
119
97
|
|
|
@@ -126,54 +104,67 @@ dsh --profile web --dump-config
|
|
|
126
104
|
| 折叠侧栏 | 使用顶栏面板按钮。折叠后展开入口保留在窄轨顶部。 |
|
|
127
105
|
| 置顶项目 | 拖到「置顶」区域,或在项目菜单中选择「置顶项目」。 |
|
|
128
106
|
| 管理会话 | 打开会话菜单,进行重命名、置顶、未读、归档、派生、复制或删除。 |
|
|
107
|
+
| 复用输入 | 输入框为空时按上下方向键,召回当前工作区中之前提交的文本。 |
|
|
129
108
|
| 跳转轮次 | 使用当前会话左侧的轮次刻度跳转到对应提问。 |
|
|
130
109
|
| 查看连接器 | 打开「设置 → 连接器」。不会展示地址、命令或凭证。 |
|
|
131
110
|
| 查看配套插件 | 打开「设置 → 关于」,安装或更新各个配套插件。 |
|
|
132
111
|
|
|
133
|
-
|
|
112
|
+
## 常见问题
|
|
134
113
|
|
|
135
|
-
|
|
114
|
+
### 置顶和未读状态会保留吗?
|
|
136
115
|
|
|
137
|
-
|
|
138
|
-
| --- | --- | --- |
|
|
139
|
-
| 置顶项目 | Host Profile 文件,并使用 `localStorage` 缓存 | DSH 重启及 Desktop 托盘重新加载后仍保留 |
|
|
140
|
-
| 未读会话 | `localStorage` 键 `dsh.session-unread.v1` | 仅当前浏览器 |
|
|
141
|
-
| 会话记录 | DSH 宿主服务 | 本插件不改写 |
|
|
116
|
+
置顶项目保存在 DSH 配置中,重启后仍保留。未读标记仅保存在当前浏览器,不会跨浏览器同步。
|
|
142
117
|
|
|
143
|
-
|
|
144
|
-
- 不修改宿主源码或会话数据模型。
|
|
145
|
-
- 归档会话的永久删除由 `@michengai/dsh-archive-manager` 提供。
|
|
146
|
-
- 连接器目录不会展示地址、命令或凭证。
|
|
118
|
+
### 为什么找不到以前的输入?
|
|
147
119
|
|
|
148
|
-
|
|
120
|
+
输入历史按工作区分别保存在当前浏览器,每个工作区最多保留 200 条。它从功能启用后的新输入开始记录,不会从已有会话补录;浏览器存储不可用时,仅在内存中临时保留。无需额外安装 BTW 插件。
|
|
149
121
|
|
|
150
|
-
|
|
151
|
-
- [src\client\index.ts](src/client/index.ts):客户端入口,注册侧栏、工作区树、轮次导航和设置分区。
|
|
152
|
-
- [src\client\CodexSidebar.tsx](src/client/CodexSidebar.tsx):侧栏壳、搜索面板和视觉样式。
|
|
153
|
-
- [src\client\CodexWorkspaceBrowser.tsx](src/client/CodexWorkspaceBrowser.tsx):工作区和会话交互。
|
|
154
|
-
- `tests\*.assert.ts` 与 `tests\*.spec.ts`:交互、样式和运行时集成验证。
|
|
122
|
+
### 移除项目会删除本地文件吗?
|
|
155
123
|
|
|
156
|
-
|
|
124
|
+
删除项目注册不会删除项目目录或会话记录。归档会话的永久删除功能由配套的 Archive Manager 插件提供。
|
|
125
|
+
|
|
126
|
+
### 安装后没有看到变化怎么办?
|
|
127
|
+
|
|
128
|
+
确认安装命令中的 profile 与正在运行的 DSH Web 一致,再重启 DSH Web 并硬刷新浏览器。可运行 `dsh --profile web --dump-config` 检查是否已挂载 `codex-ui`。
|
|
129
|
+
|
|
130
|
+
## 开发与贡献
|
|
131
|
+
|
|
132
|
+
### 从源码安装
|
|
133
|
+
|
|
134
|
+
适用于调试或使用未发布改动。克隆后的目录会直接作为插件安装路径:
|
|
157
135
|
|
|
158
136
|
```powershell
|
|
159
137
|
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
|
|
160
138
|
$OutputEncoding = [System.Text.Encoding]::UTF8
|
|
139
|
+
Set-Location D:\Repository\deepseek-harness-plugin
|
|
140
|
+
git clone https://github.com/MichengAI/dsh-codex-ui.git
|
|
141
|
+
Set-Location .\dsh-codex-ui
|
|
142
|
+
pnpm install --frozen-lockfile
|
|
161
143
|
pnpm build
|
|
162
|
-
pnpm test
|
|
163
144
|
dsh plugin --profile web add .
|
|
145
|
+
dsh --profile web --dump-config
|
|
164
146
|
```
|
|
165
147
|
|
|
166
|
-
|
|
148
|
+
完成后重启 DSH Web 并硬刷新浏览器。不要手工复制 `lib`;本地目录安装会同时读取包信息和 `cordis.patch.yml`。
|
|
167
149
|
|
|
168
|
-
|
|
150
|
+
- [src\index.ts](src/index.ts):Host 入口,以及不含敏感信息的连接器目录接口。
|
|
151
|
+
- [src\client\index.ts](src/client/index.ts):客户端入口,注册侧栏、工作区树、轮次导航和设置分区。
|
|
152
|
+
- [src\client\CodexSidebar.tsx](src/client/CodexSidebar.tsx):侧栏壳、搜索面板和视觉样式。
|
|
153
|
+
- [src\client\CodexWorkspaceBrowser.tsx](src/client/CodexWorkspaceBrowser.tsx):工作区和会话交互。
|
|
154
|
+
- `tests\*.assert.ts` 与 `tests\*.spec.ts`:交互、样式和运行时集成验证。
|
|
155
|
+
|
|
156
|
+
修改 `src` 后重新构建、测试,并以本地目录安装验证:
|
|
169
157
|
|
|
170
158
|
```powershell
|
|
171
159
|
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
|
|
172
160
|
$OutputEncoding = [System.Text.Encoding]::UTF8
|
|
173
161
|
pnpm build
|
|
174
162
|
pnpm test
|
|
163
|
+
dsh plugin --profile web add .
|
|
175
164
|
```
|
|
176
165
|
|
|
166
|
+
新增功能应复用已有 DSH 插槽和公开服务;不要依赖宿主私有 DOM 或写入会话数据。
|
|
167
|
+
|
|
177
168
|
## 许可证
|
|
178
169
|
|
|
179
|
-
本项目采用 [Apache License 2.0](LICENSE)
|
|
170
|
+
本项目采用 [Apache License 2.0](LICENSE)。
|
package/lib/client.js
CHANGED
|
@@ -5257,15 +5257,18 @@ header [data-dcu-title-folder] svg,header [data-dcu-title-more] svg{display:bloc
|
|
|
5257
5257
|
const next = `${width}px ${tracks.middle} ${tracks.details}px`;
|
|
5258
5258
|
const changed = frame.style.gridTemplateColumns !== next;
|
|
5259
5259
|
if (changed) frame.style.gridTemplateColumns = next;
|
|
5260
|
+
const contentWidth = `${width}px`;
|
|
5261
|
+
if (frame.style.getPropertyValue("--dcu-sidebar-expanded-width") !== contentWidth) frame.style.setProperty("--dcu-sidebar-expanded-width", contentWidth);
|
|
5260
5262
|
const handle = frame.querySelector("[data-side=\"sidebar\"]");
|
|
5261
|
-
if (handle !== null) handle.style.left =
|
|
5263
|
+
if (handle !== null && handle.style.left !== contentWidth) handle.style.left = contentWidth;
|
|
5262
5264
|
return changed;
|
|
5263
5265
|
}
|
|
5264
5266
|
function applySlimSidebar(frame) {
|
|
5265
5267
|
if (frame.hasAttribute("data-dragging")) return false;
|
|
5266
5268
|
if (parseSidebarGrid(frame.style.gridTemplateColumns) === void 0 || frame.hasAttribute("data-sidebar-collapsed")) return false;
|
|
5267
|
-
const
|
|
5268
|
-
frame.
|
|
5269
|
+
const initialized = frame.hasAttribute("data-dcu-codex-sidebar-initialized");
|
|
5270
|
+
const changed = applySidebarWidth(frame, initialized ? visibleSidebarWidths.get(frame) ?? 240 : 240);
|
|
5271
|
+
if (!initialized) frame.setAttribute("data-dcu-codex-sidebar-initialized", "");
|
|
5269
5272
|
return changed;
|
|
5270
5273
|
}
|
|
5271
5274
|
/** 仅在首帧覆盖宿主默认宽度时关闭过渡,避免刷新出现收缩动画。 */
|
|
@@ -5291,7 +5294,7 @@ header [data-dcu-title-folder] svg,header [data-dcu-title-more] svg{display:bloc
|
|
|
5291
5294
|
frameObserver?.disconnect();
|
|
5292
5295
|
frame = next;
|
|
5293
5296
|
if (frame === void 0) return;
|
|
5294
|
-
frameObserver = new MutationObserver(
|
|
5297
|
+
frameObserver = new MutationObserver(apply);
|
|
5295
5298
|
frameObserver.observe(frame, {
|
|
5296
5299
|
attributes: true,
|
|
5297
5300
|
attributeFilter: [
|
|
@@ -5391,7 +5394,7 @@ header [data-dcu-title-folder] svg,header [data-dcu-title-more] svg{display:bloc
|
|
|
5391
5394
|
//#region src/client/CodexSidebar.tsx
|
|
5392
5395
|
const subscribeEmptyCompanionTabs = () => () => {};
|
|
5393
5396
|
const getEmptyCompanionTabs = () => EMPTY_COMPANION_TABS;
|
|
5394
|
-
const SIDEBAR_COLLAPSE_SETTLE_MS =
|
|
5397
|
+
const SIDEBAR_COLLAPSE_SETTLE_MS = 500;
|
|
5395
5398
|
const SIDEBAR_EXPANSION_STORAGE_KEY = "dsh-codex-ui.sidebar-expansion.v1";
|
|
5396
5399
|
const EXTENSIONS_EXPANSION_KEY = "extensions";
|
|
5397
5400
|
function readExtensionsOpen() {
|
|
@@ -5410,14 +5413,14 @@ header [data-dcu-title-folder] svg,header [data-dcu-title-more] svg{display:bloc
|
|
|
5410
5413
|
/* 滤镜只作用于背景,避免为设置和搜索等 fixed 后代创建侧栏包含块。 */
|
|
5411
5414
|
body[data-we-sidebar-glass] .dcu-root{position:relative;background:transparent}body[data-we-sidebar-glass] .dcu-root::before{content:"";position:absolute;inset:0;z-index:0;pointer-events:none;background-color:color-mix(in srgb,var(--we-sidebar-color,#fff) calc(var(--we-sidebar-alpha,.15)*.66*100%),transparent);background-image:linear-gradient(180deg,rgba(255,255,255,calc(var(--we-sidebar-sheen,1)*.14)),rgba(255,255,255,calc(var(--we-sidebar-sheen,1)*.04)) 38%,rgba(255,255,255,calc(var(--we-sidebar-sheen,1)*.01)));-webkit-backdrop-filter:blur(var(--we-sidebar-blur,16px)) saturate(var(--we-sidebar-saturate,1.8)) brightness(var(--we-glass-brightness,1.04)) contrast(1.01);backdrop-filter:blur(var(--we-sidebar-blur,16px)) saturate(var(--we-sidebar-saturate,1.8)) brightness(var(--we-glass-brightness,1.04)) contrast(1.01);box-shadow:inset 0 1px 0 rgba(255,255,255,calc(var(--we-sidebar-sheen,1)*.32)),inset 0 -1px 0 rgba(255,255,255,calc(var(--we-sidebar-sheen,1)*.08)),inset 0 0 0 .5px rgba(255,255,255,calc(var(--we-sidebar-sheen,1)*.06))}body[data-ds-dark-theme][data-we-sidebar-glass] .dcu-root::before{background-color:color-mix(in srgb,var(--we-sidebar-color,#fff) calc(var(--we-sidebar-alpha,.15)*.33*100%),transparent)}body[data-we-appwindow][data-we-sidebar-glass] .dcu-root::before{-webkit-backdrop-filter:none;backdrop-filter:none}@supports not ((backdrop-filter:blur(1px)) or (-webkit-backdrop-filter:blur(1px))){body[data-we-sidebar-glass] .dcu-root{background:#eef7f5}body[data-ds-dark-theme][data-we-sidebar-glass] .dcu-root{background:#1d2120}body[data-we-sidebar-glass] .dcu-root::before{display:none}}
|
|
5412
5415
|
body[data-we-sidebar-glass] .dcu-expanded-shell,body[data-we-sidebar-glass] .dcu-compact-shell,body[data-we-sidebar-glass] .dcu-foot{position:relative}
|
|
5413
|
-
.dcu-expanded-shell{display:flex;width:100%;min-height:0;flex:1 1 0;overflow:hidden;flex-direction:column;transform-origin:left center;transition:opacity
|
|
5416
|
+
.dcu-expanded-shell{display:flex;width:100%;min-height:0;flex:1 1 0;overflow:hidden;flex-direction:column;transform-origin:left center;transition:opacity 500ms cubic-bezier(.16,1,.3,1),transform 500ms cubic-bezier(.16,1,.3,1);animation:dcu-sidebar-expanded-in 500ms cubic-bezier(.16,1,.3,1)}.dcu-compact-shell{display:none;width:56px}.dcu-root.dcu-collapsing .dcu-expanded-shell{opacity:0;transform:translateX(-6px);pointer-events:none}.dcu-root.dcu-compact .dcu-expanded-shell{display:none}.dcu-root.dcu-compact .dcu-compact-shell{display:flex;min-height:0;flex:1;flex-direction:column;align-items:center;animation:dcu-sidebar-compact-in 140ms ease-out}@keyframes dcu-sidebar-expanded-in{from{opacity:0;transform:translateX(-6px)}to{opacity:1;transform:none}}@keyframes dcu-sidebar-compact-in{from{opacity:0;transform:translateX(-4px)}to{opacity:1;transform:none}}
|
|
5414
5417
|
.dcu-root *{box-sizing:border-box}.dcu-head{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;column-gap:8px;height:60px;padding:8px 8px 8px 12px}.dcu-brand{border:0;background:transparent;color:inherit;padding:0;display:flex;align-items:center;min-width:0;overflow:hidden}.dcu-brand svg{display:block;width:auto;max-width:100%;height:24px;min-width:0}.dcu-head-actions{display:grid;grid-auto-flow:column;grid-auto-columns:28px;align-items:center;column-gap:8px;height:28px}
|
|
5415
5418
|
.dcu-icon,.dcu-menu button,.dcu-footer-link{appearance:none;border:0;background:transparent;color:inherit;font:inherit;cursor:pointer}.dcu-icon{display:grid;place-items:center;width:36px;height:36px;border-radius:8px;color:var(--dcu-sidebar-icon)}.dcu-head .dcu-icon{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;margin:0;padding:0;border-radius:50%;line-height:0}.dcu-head .dcu-icon svg{display:block;width:16px;height:16px}
|
|
5416
5419
|
.dcu-icon:hover,.dcu-menu button:hover:not(:disabled),.dcu-footer-link:hover{background:var(--dcu-sidebar-hover);color:var(--dcu-sidebar-primary)}
|
|
5417
5420
|
.dcu-menu{padding:0 6px 8px;display:grid;gap:2px}.dcu-menu button,.dcu-footer-link{display:grid;grid-template-columns:20px minmax(0,1fr);column-gap:8px;align-items:center;width:100%;min-height:36px;padding:0 4px;border-radius:8px;color:var(--dcu-sidebar-navigation);font-size:14px;line-height:20px;text-align:left;font-weight:400}
|
|
5418
5421
|
.dcu-menu-icon{display:grid;place-items:center start;width:20px;height:20px}.dcu-menu-icon svg,.dcu-footer-link svg{display:block;width:16px;height:16px;color:var(--dcu-sidebar-icon)}.dcu-menu button:disabled{color:var(--dcu-sidebar-secondary);cursor:default;opacity:1}.dcu-menu button:disabled svg{color:var(--dcu-sidebar-secondary)}
|
|
5419
5422
|
.dcu-extensions-group{display:grid}.dcu-extension-leading{position:relative;display:block;width:16px;height:16px}.dcu-extension-leading svg{position:absolute;inset:0;transition:opacity 140ms ease-out,transform 220ms cubic-bezier(.16,1,.3,1)}.dcu-extension-default-icon{opacity:1}.dcu-extension-state-arrow{opacity:0;transform:rotate(0)}.dcu-extensions-group:hover .dcu-extension-default-icon,.dcu-extensions-toggle:focus-visible .dcu-extension-default-icon{opacity:0}.dcu-extensions-group:hover .dcu-extension-state-arrow,.dcu-extensions-toggle:focus-visible .dcu-extension-state-arrow{opacity:1}.dcu-extensions-toggle[aria-expanded=true] .dcu-extension-state-arrow{transform:rotate(90deg)}.dcu-extension-panel{display:grid;grid-template-rows:1fr;opacity:1;transition:grid-template-rows 220ms cubic-bezier(.16,1,.3,1),opacity 160ms ease-out}.dcu-extension-panel[data-open=false]{grid-template-rows:0fr;opacity:0;pointer-events:none}.dcu-extension-panel-inner{position:relative;min-height:0;overflow:hidden}.dcu-extension-items{position:relative;display:grid;gap:1px;margin:1px 0 4px 28px}.dcu-extension-items::before{content:"";position:absolute;left:-16px;top:0;bottom:4px;width:1px;background:var(--dcu-sidebar-border)}.dcu-extension-items button{grid-template-columns:minmax(0,1fr);min-height:32px;color:var(--dcu-sidebar-secondary);font-size:13px;font-weight:400}.dcu-extension-items .dcu-menu-icon{display:none}
|
|
5420
|
-
.dcu-workspaces{display:flex;min-height:0;flex:1;flex-direction:column;margin-top:2px;padding-top:8px;border-top:1px solid var(--dcu-sidebar-border)}.dcu-workspaces.dcu-workspaces-tabs{padding-top:0;border-top:0}.dcu-im-tabs{display:flex;gap:16px;margin:0 8px 12px;padding:0;border-bottom:1px solid var(--dcu-sidebar-border)}.dcu-im-tab{appearance:none;border:0;background:transparent;color:var(--dcu-sidebar-secondary);padding:8px 0 7px;font:14px/22px var(--dcu-font);font-weight:500;cursor:pointer}.dcu-im-tab[data-on=true]{color:var(--dcu-sidebar-primary);font-weight:600;box-shadow:inset 0 -2px 0 currentColor}.dcu-native-workspaces{display:flex;min-height:0;flex:1}.dcu-native-workspaces>*{min-width:0;flex:1}.dcu-native-workspaces .ima-tabs,.dcu-native-workspaces [role=tablist]{display:none!important}.dcu-schedule-browser{display:flex;min-height:0;flex:1;flex-direction:column}.dcu-native-workspaces .dcu-schedule-views{display:flex!important;flex:none;min-height:30px;margin:0 8px 8px;padding:2px;border:1px solid var(--dcu-sidebar-border);border-radius:8px;background:rgba(255,255,255,.025)}.dcu-schedule-views button{appearance:none;flex:1;min-width:0;height:24px;border:0;border-radius:6px;background:transparent;color:var(--dcu-sidebar-secondary);font:600 12px/18px var(--dcu-font);cursor:pointer}.dcu-schedule-views button[aria-selected=true]{background:var(--dcu-sidebar-hover);color:var(--dcu-sidebar-primary);box-shadow:inset 0 0 0 1px var(--dcu-sidebar-border)}.dcu-schedule-pane{display:flex;min-height:0;flex:1}.dcu-schedule-pane>*{min-width:0;flex:1}.dcu-schedule-pane>[data-slot="sidebar.schedule"]{display:flex!important;width:100%;min-width:0;flex:1}.dcu-schedule-pane>[data-slot="sidebar.schedule"]>.dsh-st-rail{width:100%;min-width:0;padding-right:8px;scrollbar-gutter:auto}.dcu-schedule-pane .dsh-st-overview{padding-right:8px}.dcu-foot{display:grid;width:100%;gap:4px;padding:8px 6px 12px;border-top:1px solid var(--dcu-sidebar-border);transition:opacity
|
|
5423
|
+
.dcu-workspaces{display:flex;min-height:0;flex:1;flex-direction:column;margin-top:2px;padding-top:8px;border-top:1px solid var(--dcu-sidebar-border)}.dcu-workspaces.dcu-workspaces-tabs{padding-top:0;border-top:0}.dcu-im-tabs{display:flex;gap:16px;margin:0 8px 12px;padding:0;border-bottom:1px solid var(--dcu-sidebar-border)}.dcu-im-tab{appearance:none;border:0;background:transparent;color:var(--dcu-sidebar-secondary);padding:8px 0 7px;font:14px/22px var(--dcu-font);font-weight:500;cursor:pointer}.dcu-im-tab[data-on=true]{color:var(--dcu-sidebar-primary);font-weight:600;box-shadow:inset 0 -2px 0 currentColor}.dcu-native-workspaces{display:flex;min-height:0;flex:1}.dcu-native-workspaces>*{min-width:0;flex:1}.dcu-native-workspaces .ima-tabs,.dcu-native-workspaces [role=tablist]{display:none!important}.dcu-schedule-browser{display:flex;min-height:0;flex:1;flex-direction:column}.dcu-native-workspaces .dcu-schedule-views{display:flex!important;flex:none;min-height:30px;margin:0 8px 8px;padding:2px;border:1px solid var(--dcu-sidebar-border);border-radius:8px;background:rgba(255,255,255,.025)}.dcu-schedule-views button{appearance:none;flex:1;min-width:0;height:24px;border:0;border-radius:6px;background:transparent;color:var(--dcu-sidebar-secondary);font:600 12px/18px var(--dcu-font);cursor:pointer}.dcu-schedule-views button[aria-selected=true]{background:var(--dcu-sidebar-hover);color:var(--dcu-sidebar-primary);box-shadow:inset 0 0 0 1px var(--dcu-sidebar-border)}.dcu-schedule-pane{display:flex;min-height:0;flex:1}.dcu-schedule-pane>*{min-width:0;flex:1}.dcu-schedule-pane>[data-slot="sidebar.schedule"]{display:flex!important;width:100%;min-width:0;flex:1}.dcu-schedule-pane>[data-slot="sidebar.schedule"]>.dsh-st-rail{width:100%;min-width:0;padding-right:8px;scrollbar-gutter:auto}.dcu-schedule-pane .dsh-st-overview{padding-right:8px}.dcu-foot{display:grid;width:100%;gap:4px;padding:8px 6px 12px;border-top:1px solid var(--dcu-sidebar-border);transition:opacity 500ms cubic-bezier(.16,1,.3,1),transform 500ms cubic-bezier(.16,1,.3,1)}.dcu-root.dcu-collapsing>.dcu-foot{opacity:0;transform:translateX(-4px);pointer-events:none}.dcu-footer-actions:empty,.dcu-settings-seat:empty{display:none}.dcu-settings-seat>button{width:100%;min-height:36px;padding-left:4px!important;color:var(--dcu-sidebar-navigation);font:14px/20px var(--dcu-font);font-weight:400}.dcu-compact{width:100%;align-items:flex-start;overflow:hidden;padding:10px 0 8px}.dcu-compact-nav{display:flex;flex:1;min-height:0;flex-direction:column;align-items:center;gap:2px;overflow:auto;padding:6px 0}.dcu-compact .dcu-icon{width:36px;height:36px;flex:none}.dcu-compact .dcu-foot{width:36px;margin-top:auto;margin-left:10px;padding:8px 0;border-top:0}.dcu-compact .dcu-settings-seat{width:36px;overflow:hidden}.dcu-compact .dcu-settings-seat>button{display:grid;place-items:center;width:36px;min-height:36px;padding:0!important;font-size:0!important;line-height:0}.dcu-compact .dcu-settings-seat>button svg{width:16px;height:16px}.dcu-compact .dcu-footer-link{display:flex;justify-content:center;width:36px;padding:0;font-size:0}.dcu-compact .dcu-footer-link svg{width:16px;height:16px}
|
|
5421
5424
|
/* 仅适配费用插件入口;通过标记及入口结构定位,保留原生统计、浮层和容器查询。 */
|
|
5422
5425
|
.dcu-footer-actions [data-testid="billing-trigger"]{box-sizing:border-box;width:100%;min-width:0;min-height:52px;padding:8px 6px;gap:8px;border:0;border-radius:6px;background:transparent;color:var(--dcu-sidebar-primary);font-family:var(--dcu-font);box-shadow:none;transform:none;transition:background-color 120ms ease-out,color 120ms ease-out}
|
|
5423
5426
|
.dcu-footer-actions :is([data-testid="billing-trigger"],[data-testid="billing-rail-button"]):hover{border-color:transparent;background:var(--dcu-sidebar-hover);box-shadow:none;transform:none}
|
|
@@ -5437,7 +5440,21 @@ body[data-we-sidebar-glass] .dcu-expanded-shell,body[data-we-sidebar-glass] .dcu
|
|
|
5437
5440
|
.dcu-settings-seat [data-slot="settings.trigger"]>svg{color:var(--dcu-sidebar-icon)}
|
|
5438
5441
|
.dcu-root:not(.dcu-compact) .dcu-settings-seat [data-slot="settings.trigger"]>span{margin-left:4px}
|
|
5439
5442
|
@media (prefers-reduced-motion:reduce){.dcu-footer-actions :is([data-testid="billing-trigger"],[data-testid="billing-rail-button"]){transition:none}}
|
|
5440
|
-
|
|
5443
|
+
/* 宿主列负责缩放,宽态内容保持展开宽度,避免中文竖排与工作区逐帧重排。 */
|
|
5444
|
+
.dcu-expanded-shell,.dcu-root:not(.dcu-compact)>.dcu-foot{width:var(--dcu-sidebar-expanded-width,240px);flex-shrink:0}
|
|
5445
|
+
/* 对齐 Codex 的半秒布局节奏;显式声明避免依赖宿主主题的动画 token。 */
|
|
5446
|
+
.dcu-root{position:relative}
|
|
5447
|
+
.dcu-root.dcu-collapsing .dcu-compact-shell{position:absolute;left:0;top:10px;bottom:8px;display:flex;flex-direction:column;align-items:center;animation:dcu-sidebar-compact-in 500ms cubic-bezier(.16,1,.3,1)}
|
|
5448
|
+
.dcu-root.dcu-collapsing .dcu-compact-shell .dcu-icon{width:36px;height:36px;flex:none}
|
|
5449
|
+
/* 收尾仅移除宽态层,窄轨不重复淡入,否则会在半秒处闪烁。 */
|
|
5450
|
+
.dcu-root.dcu-compact .dcu-compact-shell{animation:none}
|
|
5451
|
+
[data-dcu-codex-sidebar-initialized]{transition:grid-template-columns 500ms cubic-bezier(.16,1,.3,1)}
|
|
5452
|
+
/* dsh-better-sidebar 的 #root 布局规则会覆盖 transition 简写;合并两侧过渡而非只争抢左栏。 */
|
|
5453
|
+
#root [data-dcu-codex-sidebar-initialized]:not([data-dragging]){transition:grid-template-columns 500ms cubic-bezier(.16,1,.3,1),padding-right var(--ds-transition-duration-slow,.3s) var(--ds-ease-in-out,cubic-bezier(.4,0,.2,1))}
|
|
5454
|
+
#root [data-dcu-codex-sidebar-initialized][data-dragging]{transition:none}
|
|
5455
|
+
[data-dcu-codex-sidebar-initialized] [data-side="sidebar"]{transition:left 500ms cubic-bezier(.16,1,.3,1)}
|
|
5456
|
+
[data-dcu-codex-sidebar-initialized][data-dragging],[data-dcu-codex-sidebar-initialized][data-dragging] [data-side="sidebar"]{transition:none}
|
|
5457
|
+
@media (prefers-reduced-motion:reduce){[data-dcu-codex-sidebar-initialized],[data-dcu-codex-sidebar-initialized] [data-side="sidebar"],#root [data-dcu-codex-sidebar-initialized]:not([data-dragging]){transition:none}.dcu-root.dcu-collapsing .dcu-compact-shell{animation:none}}
|
|
5441
5458
|
.dcu-native-workspaces{flex-direction:column}.dcu-native-workspaces>[data-mcp-connector-top-mount=true]{flex:none}.dcu-root .mcpConnectorLauncher,.dcu-root [data-mcp-connector-top-mount=true]{display:none!important}
|
|
5442
5459
|
.dcu-dependency-notice{margin:0 10px 8px;border:1px solid var(--dcu-sidebar-border);border-radius:8px;padding:8px;color:var(--dcu-sidebar-secondary);font-size:12px;line-height:18px}
|
|
5443
5460
|
[role="dialog"][aria-labelledby]{width:min(1000px,calc(100vw - 48px));max-width:calc(100vw - 48px);height:min(800px,calc(100vh - 48px))}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@michengai/dsh-codex-ui",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.113",
|
|
4
4
|
"description": "以 Codex 风格重构 DSH Web 侧栏的独立客户端插件",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"publishConfig": {
|
|
@@ -63,7 +63,7 @@
|
|
|
63
63
|
"build": "tsc --noEmit && tsdown",
|
|
64
64
|
"typecheck": "tsc --noEmit",
|
|
65
65
|
"test": "pnpm run typecheck && vitest run && tsdown && node tests/run-assertions.mjs && pnpm run test:layout",
|
|
66
|
-
"test:layout": "node scripts/verify-workspace-drop-layout.mjs --run"
|
|
66
|
+
"test:layout": "node scripts/verify-workspace-drop-layout.mjs --run && node scripts/verify-sidebar-transition.mjs"
|
|
67
67
|
},
|
|
68
68
|
"peerDependencies": {
|
|
69
69
|
"@deepseek-ai/cordis": ">=4.0.2 <5.0.0",
|