@michengai/dsh-codex-ui 0.2.55 → 0.2.57

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/README.md CHANGED
@@ -1,38 +1,50 @@
1
1
  <p align="center">
2
- <img src="assets/icon.png" alt="DSH Codex UI" width="96">
2
+ <img src="assets/branding/dsh-banner.png" alt="DSH Codex UI" width="100%">
3
3
  </p>
4
4
 
5
- <h1 align="center">DSH Codex UI</h1>
5
+ <div align="center">
6
6
 
7
- <p align="center">
8
- <strong>A DeepSeek Harness Web plugin that rebuilds the sidebar, workspace tree, search, and turn navigation in a Codex-style layout.</strong>
9
- </p>
7
+ # DSH Codex UI
10
8
 
11
- <p align="center">
12
- <a href="https://github.com/MichengAI/dsh-codex-ui/issues">Report an issue</a>
13
- · <a href="https://www.npmjs.com/package/@michengai/dsh-codex-ui">View on npm</a>
14
- · <a href="README.zh-CN.md">简体中文</a>
15
- </p>
9
+ **Rebuild the DeepSeek Harness Web sidebar, workspace tree, search, and turn navigation in a Codex-style layout**
16
10
 
17
- <p align="center">
18
- <a href="LICENSE"><img src="https://img.shields.io/badge/license-Apache--2.0-blue.svg" alt="Apache License 2.0"></a>
19
- <a href="https://www.npmjs.com/package/@michengai/dsh-codex-ui"><img src="https://img.shields.io/npm/v/%40michengai/dsh-codex-ui?label=npm" alt="npm package"></a>
20
- <img src="https://img.shields.io/badge/DSH-Web%20Plugin-10b981" alt="DSH Web Plugin">
21
- <img src="https://img.shields.io/badge/Node.js-%E2%89%A522-339933?logo=nodedotjs&logoColor=white" alt="Node.js 22 or later">
22
- </p>
11
+ [简体中文](README.zh-CN.md) · [Apache-2.0](LICENSE)
12
+
13
+ [![License: Apache-2.0](https://img.shields.io/badge/License-Apache--2.0-blue.svg)](LICENSE)
14
+ [![npm package](https://img.shields.io/npm/v/%40michengai%2Fdsh-codex-ui.svg?label=npm%20package)](https://www.npmjs.com/package/@michengai/dsh-codex-ui)
15
+ [![DSH Web Plugin](https://img.shields.io/badge/DSH%20Web-Plugin-0f766e.svg)](https://github.com/MichengAI/dsh-codex-ui)
16
+ [![Node.js 22 or later](https://img.shields.io/badge/Node.js-22%20or%20later-339933.svg?logo=node.js&logoColor=white)](https://nodejs.org/)
23
17
 
24
- > DSH Codex UI is a community-maintained plugin, not an official DeepSeek AI product. It uses public DSH slots only and does not modify host source code or conversation data.
18
+ </div>
19
+
20
+ > DSH Codex UI is a community-maintained DeepSeek Harness (DSH) plugin, not an official DeepSeek AI product. It uses public DSH slots only and does not modify host source code or conversation data.
25
21
 
26
22
  ## Features
27
23
 
28
- - Replaces the default sidebar through the official `sidebar` slot and keeps `sidebar.workspaces`, `sidebar.settings`, and `sidebar.footer.action`.
29
- - Provides a Codex-style header with brand wordmark, sidebar collapse, and global search.
30
- - Lists workspaces and conversations with expand/collapse, drag reorder, project pinning, unread dots, and running-state indicators.
31
- - Adds project and conversation menus for rename, pin, unread, archive, fork, open folder, copy, and delete.
32
- - Restyles the conversation column and composer card, and adds a compact turn navigator on the current session.
33
- - Adds Settings sections for Connectors and About, including companion-plugin install status.
24
+ - Replace the default sidebar through the official `sidebar` slot and keep `sidebar.workspaces`, `sidebar.settings`, and `sidebar.footer.action`.
25
+ - Provide a Codex-style header with brand wordmark, sidebar collapse, and global search.
26
+ - List workspaces and conversations with expand/collapse, drag reorder, project pinning, unread dots, and running-state indicators.
27
+ - Add project and conversation menus for rename, pin, unread, archive, fork, open folder, copy, and delete.
28
+ - Restyle the conversation column and composer card, and add a compact turn navigator on the current session.
29
+ - Show companion-plugin status in **Settings About**, and install the missing pieces from npm.
30
+
31
+ ## Screenshots
32
+
33
+ Light theme: Codex-style sidebar, workspace tree, and conversation column.
34
+
35
+ ![Light theme conversation](assets/screenshots/conversation-light.png)
36
+
37
+ Dark theme: the same layout with Codex dark tokens.
38
+
39
+ ![Dark theme conversation](assets/screenshots/conversation.png)
40
+
41
+ Conversation menu: rename, pin, unread, archive, fork, copy, and delete.
34
42
 
35
- ![Codex-style sidebar and empty conversation](assets/screenshots/sidebar.png)
43
+ ![Conversation menu](assets/screenshots/session-menu.png)
44
+
45
+ **Settings → About** lists the companion plugins and their install state.
46
+
47
+ ![About page and companion plugins](assets/screenshots/settings-about.png)
36
48
 
37
49
  ## Prerequisites
38
50
 
@@ -40,33 +52,76 @@
40
52
  - Examples use the `web` profile; replace it with the target profile.
41
53
  - Source installation and development require Node.js 22+ and pnpm. Installing from npm does not require running `pnpm install` in an arbitrary directory.
42
54
 
55
+ ## Plugin combo
56
+
57
+ `@michengai/dsh-codex-suite` is the one-click combo. It installs these six plugins into the same profile:
58
+
59
+ | Plugin | npm package | Role |
60
+ | --- | --- | --- |
61
+ | Codex UI | `@michengai/dsh-codex-ui` | Codex-style sidebar, workspace tree, search, and turn navigation |
62
+ | Expert management | `@michengai/dsh-agency-agents` | Settings page opened from **Experts** |
63
+ | Skill management | `@michengai/dsh-skills-manager` | Settings page opened from **Skills** |
64
+ | Archive management | `@michengai/dsh-archive-manager` | Permanent deletion and archived-session management |
65
+ | IM Assistant | `@michengai/dsh-im-connect` | IM settings and the **Channels** tab |
66
+ | Scheduled tasks | `@michengai/dsh-automation` | Scheduled-task settings and the **Schedule** tab |
67
+
68
+ `dshmarket` stays optional. When it is installed, **Plugins** opens the market first.
69
+
70
+ Do not install the suite and the individual plugins in the same profile. The two patch sets conflict.
71
+
43
72
  ## Installation
44
73
 
45
- ### Install from npm
74
+ `dsh plugin add` forwards to `pnpm add` in the profile directory. Without a version and official registry, a local mirror or minimum-release-age policy can leave you on an older build.
46
75
 
47
- Run this from any PowerShell directory. Install into the DSH profile through `dsh plugin`:
76
+ ### Ask another agent to install the suite
77
+
78
+ Copy one of the sentences below into DSH, Codex, or WorkBuddy and let that agent install the combo into your local `web` profile.
79
+
80
+ From npm:
81
+
82
+ ```text
83
+ Install the latest DSH plugin suite @michengai/dsh-codex-suite into my local web profile using the official npm registry: dsh plugin --profile web add @michengai/dsh-codex-suite@latest --registry=https://registry.npmjs.org/. Then run dsh --profile web --dump-config, confirm codex-ui, agency-agents, skills-manager, archive-manager, im-connect, and dsh-automation are mounted, and remind me to restart DSH Web and hard-refresh the browser.
84
+ ```
85
+
86
+ UI only:
87
+
88
+ ```text
89
+ Install the latest DSH plugin @michengai/dsh-codex-ui into my local web profile using the official npm registry: dsh plugin --profile web add @michengai/dsh-codex-ui@latest --registry=https://registry.npmjs.org/. Then run dsh --profile web --dump-config, confirm codex-ui is mounted, and remind me to restart DSH Web and hard-refresh the browser.
90
+ ```
91
+
92
+ | Product | How to use it |
93
+ | --- | --- |
94
+ | DSH | Send one of the sentences above to the current session. |
95
+ | Codex | Send one of the sentences above to Codex and let it install locally. |
96
+ | WorkBuddy | Send one of the sentences above to WorkBuddy. |
97
+
98
+ If `dsh` is not on PATH, replace the leading `dsh` with `npx --yes @deepseek-ai/dsh`.
99
+
100
+ ### Install the complete suite
101
+
102
+ This is the one-click combo. Run it from any PowerShell directory:
48
103
 
49
104
  ```powershell
50
105
  [Console]::OutputEncoding = [System.Text.Encoding]::UTF8
51
106
  $OutputEncoding = [System.Text.Encoding]::UTF8
52
- dsh plugin --profile web add @michengai/dsh-codex-ui
107
+ dsh plugin --profile web add @michengai/dsh-codex-suite@latest --registry=https://registry.npmjs.org/
53
108
  dsh --profile web --dump-config
54
109
  ```
55
110
 
56
- Restart DSH Web and hard-refresh the browser. The plugin takes over the default sidebar through `cordis.patch.yml`; uninstalling restores the default sidebar. If a package mirror is behind, append `--registry=https://registry.npmjs.org/`.
111
+ To pin a release, replace `@latest` with a version such as `@0.1.0`.
57
112
 
58
- ### Install the complete suite
113
+ Restart DSH Web and hard-refresh the browser. If the profile already has any of the six plugins installed individually, uninstall those plugins first.
59
114
 
60
- To install Codex UI together with the experts, skills, and archived-session managers after `@michengai/dsh-codex-suite` is published:
115
+ ### Install Codex UI only
61
116
 
62
117
  ```powershell
63
118
  [Console]::OutputEncoding = [System.Text.Encoding]::UTF8
64
119
  $OutputEncoding = [System.Text.Encoding]::UTF8
65
- dsh plugin --profile web add @michengai/dsh-codex-suite
120
+ dsh plugin --profile web add @michengai/dsh-codex-ui@latest --registry=https://registry.npmjs.org/
66
121
  dsh --profile web --dump-config
67
122
  ```
68
123
 
69
- Individual and aggregate installation are mutually exclusive. Do not install both in the same profile. Remove the four individually installed plugins before switching to the suite.
124
+ The plugin takes over the default sidebar through `cordis.patch.yml`. Uninstalling restores the default sidebar.
70
125
 
71
126
  ### Install from source
72
127
 
@@ -99,15 +154,7 @@ Open DSH Web. The left navigation is rendered by this plugin.
99
154
  | Manage a conversation | Open the conversation menu to rename, pin, mark unread, archive, fork, copy, or delete. |
100
155
  | Jump between turns | Use the turn marks on the left of the current conversation. |
101
156
  | Inspect connectors | Open **Settings → Connectors**. Addresses, commands, and credentials are never shown. |
102
- | Check companion plugins | Open **Settings → About** to see expert, skill, and archive plugin status. |
103
-
104
- ![Conversation menu](assets/screenshots/session-menu.png)
105
-
106
- ![Workspace menu](assets/screenshots/workspace-menu.png)
107
-
108
- ![Conversation view and turn navigator](assets/screenshots/conversation.png)
109
-
110
- ![About page and companion plugins](assets/screenshots/settings-about.png)
157
+ | Check companion plugins | Open **Settings → About** to install or update the combo plugins. |
111
158
 
112
159
  Deleting a workspace registration does not delete its folder or conversation records. Pinned and unread state is stored only in the current browser.
113
160
 
@@ -123,21 +170,8 @@ Deleting a workspace registration does not delete its folder or conversation rec
123
170
  - The plugin uses only public DSH slots and services.
124
171
  - It does not modify host source code or the conversation data model.
125
172
  - Permanent deletion of archived conversations is provided by `@michengai/dsh-archive-manager`.
126
- - Expert and skill management are optional peer plugins.
127
173
  - The Connectors directory never exposes addresses, commands, or credentials.
128
174
 
129
- ## Companion plugins
130
-
131
- | Plugin | npm package | Role |
132
- | --- | --- | --- |
133
- | Expert management | `@michengai/dsh-agency-agents` | Settings page opened from **Experts** |
134
- | Skill management | `@michengai/dsh-skills-manager` | Settings page opened from **Skills** |
135
- | Archive management | `@michengai/dsh-archive-manager` | Permanent deletion and archived-session management |
136
- | IM Assistant | `@michengai/dsh-im-connect` | Settings page opened from **IM Assistant** |
137
- | Scheduled tasks | `@michengai/dsh-automation` | Settings page opened from **Scheduled tasks** |
138
- | Plugin Market | `dshmarket` | When installed, the **Plugins** entry opens the market first |
139
- | Suite | `@michengai/dsh-codex-suite` | Installs Codex UI and companion management plugins |
140
-
141
175
  ## Secondary development
142
176
 
143
177
  - [src\index.ts](src/index.ts): host entry and the non-sensitive Connectors directory endpoint.
@@ -167,8 +201,6 @@ pnpm build
167
201
  pnpm test
168
202
  ```
169
203
 
170
- ## Documentation and license
171
-
172
- Start from the [handoff index](docs/00-交接入口/00-阅读导航.md) for project status, architecture, and iteration notes.
204
+ ## License
173
205
 
174
206
  This project is licensed under [Apache License 2.0](LICENSE). Conversation-management workflow is informed by [Semidia/dsh-session-manager](https://github.com/Semidia/dsh-session-manager), but this plugin is implemented independently through public DSH slots and services.
package/README.zh-CN.md CHANGED
@@ -1,27 +1,23 @@
1
1
  <p align="center">
2
- <img src="assets/icon.png" alt="DSH Codex UI" width="96">
2
+ <img src="assets/branding/dsh-banner.png" alt="DSH Codex UI" width="100%">
3
3
  </p>
4
4
 
5
- <h1 align="center">DSH Codex UI</h1>
5
+ <div align="center">
6
6
 
7
- <p align="center">
8
- <strong>为 DeepSeek Harness Web 提供 Codex 风格侧栏、工作区会话树、全局搜索和轮次导航的独立插件。</strong>
9
- </p>
7
+ # DSH Codex UI
10
8
 
11
- <p align="center">
12
- <a href="https://github.com/MichengAI/dsh-codex-ui/issues">反馈问题</a>
13
- · <a href="https://www.npmjs.com/package/@michengai/dsh-codex-ui">查看 npm</a>
14
- · <a href="README.md">English</a>
15
- </p>
9
+ **为 DeepSeek Harness Web 重构 Codex 风格侧栏、工作区会话树、全局搜索和轮次导航**
16
10
 
17
- <p align="center">
18
- <a href="LICENSE"><img src="https://img.shields.io/badge/license-Apache--2.0-blue.svg" alt="Apache License 2.0"></a>
19
- <a href="https://www.npmjs.com/package/@michengai/dsh-codex-ui"><img src="https://img.shields.io/npm/v/%40michengai/dsh-codex-ui?label=npm" alt="npm package"></a>
20
- <img src="https://img.shields.io/badge/DSH-Web%20Plugin-10b981" alt="DSH Web Plugin">
21
- <img src="https://img.shields.io/badge/Node.js-%E2%89%A522-339933?logo=nodedotjs&logoColor=white" alt="Node.js 22 或更高版本">
22
- </p>
11
+ [English](README.md) · [Apache-2.0](LICENSE)
12
+
13
+ [![许可证:Apache-2.0](https://img.shields.io/badge/许可证-Apache--2.0-blue.svg)](LICENSE)
14
+ [![npm package](https://img.shields.io/npm/v/%40michengai%2Fdsh-codex-ui.svg?label=npm%20package)](https://www.npmjs.com/package/@michengai/dsh-codex-ui)
15
+ [![DSH Web Plugin](https://img.shields.io/badge/DSH%20Web-Plugin-0f766e.svg)](https://github.com/MichengAI/dsh-codex-ui)
16
+ [![Node.js 22 or later](https://img.shields.io/badge/Node.js-22%20or%20later-339933.svg?logo=node.js&logoColor=white)](https://nodejs.org/)
23
17
 
24
- > DSH Codex UI 是社区维护的插件,并非 DeepSeek AI 官方产品。它只使用 DSH 公开插槽,不修改宿主源码或会话数据。
18
+ </div>
19
+
20
+ > DSH Codex UI 是社区维护的 DeepSeek Harness(DSH)插件,并非 DeepSeek AI 官方产品。它只使用 DSH 公开插槽,不修改宿主源码或会话数据。
25
21
 
26
22
  ## 功能概览
27
23
 
@@ -30,9 +26,25 @@
30
26
  - 工作区与会话支持展开折叠、拖拽排序、项目置顶、未读圆点和运行状态。
31
27
  - 项目和会话菜单支持重命名、置顶、未读、归档、派生、打开目录、复制和删除。
32
28
  - 调整会话列与输入卡片视觉,并为当前会话提供紧凑轮次导航。
33
- - 在设置中提供连接器目录和「关于」页,展示配套插件安装状态。
29
+ - 在「设置 → 关于」展示配套插件状态,并可从 npm 安装缺失项。
30
+
31
+ ## 界面预览
32
+
33
+ 浅色主题:Codex 风格侧栏、工作区会话树和会话列。
34
+
35
+ ![浅色主题会话页](assets/screenshots/conversation-light.png)
36
+
37
+ 深色主题:同一布局,使用 Codex 暗色令牌。
38
+
39
+ ![深色主题会话页](assets/screenshots/conversation.png)
40
+
41
+ 会话菜单:重命名、置顶、未读、归档、派生、复制和删除。
34
42
 
35
- ![Codex 风格侧栏与空会话页](assets/screenshots/sidebar.png)
43
+ ![会话菜单](assets/screenshots/session-menu.png)
44
+
45
+ 「设置 → 关于」列出配套插件及其安装状态。
46
+
47
+ ![关于页与配套插件](assets/screenshots/settings-about.png)
36
48
 
37
49
  ## 前置条件
38
50
 
@@ -40,33 +52,76 @@
40
52
  - 以下示例使用 `web` profile;请替换为实际目标 profile。
41
53
  - 从源码安装或二次开发需要 Node.js 22+ 与 pnpm;仅从 npm 安装无需在任意目录执行 `pnpm install`。
42
54
 
55
+ ## 插件组合
56
+
57
+ `@michengai/dsh-codex-suite` 是一键套件,会把下面 6 个插件装进同一个 profile:
58
+
59
+ | 插件 | npm 包 | 作用 |
60
+ | --- | --- | --- |
61
+ | Codex UI | `@michengai/dsh-codex-ui` | Codex 风格侧栏、工作区会话树、搜索和轮次导航 |
62
+ | 专家管理 | `@michengai/dsh-agency-agents` | 从「专家」进入对应设置页 |
63
+ | 技能管理 | `@michengai/dsh-skills-manager` | 从「技能」进入对应设置页 |
64
+ | 归档管理 | `@michengai/dsh-archive-manager` | 提供永久删除和已归档会话管理 |
65
+ | IM 助理 | `@michengai/dsh-im-connect` | IM 设置页和「频道」页签 |
66
+ | 定时任务 | `@michengai/dsh-automation` | 定时任务设置页和「定时」页签 |
67
+
68
+ `dshmarket` 仍是可选项。已安装时,「插件」入口会优先进入市场。
69
+
70
+ 套件安装和单独安装互斥。同一 profile 不要同时安装两者,两套 patch 会冲突。
71
+
43
72
  ## 安装
44
73
 
45
- ### npm 安装
74
+ `dsh plugin add` 会转发到 profile 目录里的 `pnpm add`。不写版本、不指定官方源时,本机镜像和最短发布间隔可能让你停在旧版。
46
75
 
47
- 在任意 PowerShell 目录执行。请通过 `dsh plugin` 安装到 DSH profile:
76
+ ### 交给其他 Agent 一句话安装套件
77
+
78
+ 把下面其中一句复制到 DSH、Codex 或 WorkBuddy,让它代你安装到本机 `web` profile。
79
+
80
+ 从 npm 安装完整套件:
81
+
82
+ ```text
83
+ 请把 DSH 套件 @michengai/dsh-codex-suite 最新版装进本机 web profile,使用官方 npm 源执行:dsh plugin --profile web add @michengai/dsh-codex-suite@latest --registry=https://registry.npmjs.org/。装完执行 dsh --profile web --dump-config,确认已挂载 codex-ui、agency-agents、skills-manager、archive-manager、im-connect 和 dsh-automation,并提醒我重启 DSH Web 后硬刷新浏览器。
84
+ ```
85
+
86
+ 只安装 Codex UI:
87
+
88
+ ```text
89
+ 请把 DSH 插件 @michengai/dsh-codex-ui 最新版装进本机 web profile,使用官方 npm 源执行:dsh plugin --profile web add @michengai/dsh-codex-ui@latest --registry=https://registry.npmjs.org/。装完执行 dsh --profile web --dump-config,确认已挂载 codex-ui,并提醒我重启 DSH Web 后硬刷新浏览器。
90
+ ```
91
+
92
+ | 产品 | 怎么用 |
93
+ | --- | --- |
94
+ | DSH | 把上面其中一句发给当前会话。 |
95
+ | Codex | 把上面其中一句发给 Codex,让它在本机执行安装。 |
96
+ | WorkBuddy | 把上面其中一句发给 WorkBuddy。 |
97
+
98
+ 未把 `dsh` 装进 PATH 时,把开头的 `dsh` 换成 `npx --yes @deepseek-ai/dsh`。
99
+
100
+ ### 安装完整套件
101
+
102
+ 这是一键组合安装。在任意 PowerShell 目录执行:
48
103
 
49
104
  ```powershell
50
105
  [Console]::OutputEncoding = [System.Text.Encoding]::UTF8
51
106
  $OutputEncoding = [System.Text.Encoding]::UTF8
52
- dsh plugin --profile web add @michengai/dsh-codex-ui
107
+ dsh plugin --profile web add @michengai/dsh-codex-suite@latest --registry=https://registry.npmjs.org/
53
108
  dsh --profile web --dump-config
54
109
  ```
55
110
 
56
- 安装或升级后重启 DSH Web,并硬刷新浏览器。插件会通过 `cordis.patch.yml` 接管默认侧栏;卸载后默认侧栏会恢复。若镜像未同步最新版本,可在安装命令末尾追加 `--registry=https://registry.npmjs.org/`。
111
+ 需要钉死某一版时,把 `@latest` 换成具体版本,例如 `@0.1.0`。
57
112
 
58
- ### 安装完整套件
113
+ 安装后重启 DSH Web 并硬刷新浏览器。若该 profile 已单独安装上述任一插件,先卸载这些独立插件,再装套件。
59
114
 
60
- 需要同时安装 Codex UI、专家、技能和归档会话管理时,待 `@michengai/dsh-codex-suite` 发布到 npm 后执行:
115
+ ### 只安装 Codex UI
61
116
 
62
117
  ```powershell
63
118
  [Console]::OutputEncoding = [System.Text.Encoding]::UTF8
64
119
  $OutputEncoding = [System.Text.Encoding]::UTF8
65
- dsh plugin --profile web add @michengai/dsh-codex-suite
120
+ dsh plugin --profile web add @michengai/dsh-codex-ui@latest --registry=https://registry.npmjs.org/
66
121
  dsh --profile web --dump-config
67
122
  ```
68
123
 
69
- 独立安装和聚合安装互斥。同一 profile 不要同时安装两者。切换为套件前,先卸载已单独安装的四个插件。
124
+ 插件会通过 `cordis.patch.yml` 接管默认侧栏;卸载后默认侧栏会恢复。
70
125
 
71
126
  ### 从源码安装
72
127
 
@@ -99,15 +154,7 @@ dsh --profile web --dump-config
99
154
  | 管理会话 | 打开会话菜单,进行重命名、置顶、未读、归档、派生、复制或删除。 |
100
155
  | 跳转轮次 | 使用当前会话左侧的轮次刻度跳转到对应提问。 |
101
156
  | 查看连接器 | 打开「设置 → 连接器」。不会展示地址、命令或凭证。 |
102
- | 查看配套插件 | 打开「设置 → 关于」,查看专家、技能、归档、IM、定时任务和插件市场状态。 |
103
-
104
- ![会话菜单](assets/screenshots/session-menu.png)
105
-
106
- ![项目菜单](assets/screenshots/workspace-menu.png)
107
-
108
- ![会话视图与轮次导航](assets/screenshots/conversation.png)
109
-
110
- ![关于页与配套插件](assets/screenshots/settings-about.png)
157
+ | 查看配套插件 | 打开「设置 → 关于」,安装或更新套件中的配套插件。 |
111
158
 
112
159
  删除项目注册不会删除项目目录或会话记录。置顶和未读状态只保存在当前浏览器。
113
160
 
@@ -123,21 +170,8 @@ dsh --profile web --dump-config
123
170
  - 本插件只使用 DSH 公开插槽和服务。
124
171
  - 不修改宿主源码或会话数据模型。
125
172
  - 归档会话的永久删除由 `@michengai/dsh-archive-manager` 提供。
126
- - 专家和技能管理分别由对应可选 peer 插件提供。
127
173
  - 连接器目录不会展示地址、命令或凭证。
128
174
 
129
- ## 配套插件
130
-
131
- | 插件 | npm 包 | 作用 |
132
- | --- | --- | --- |
133
- | 专家管理 | `@michengai/dsh-agency-agents` | 从「专家」进入对应设置页 |
134
- | 技能管理 | `@michengai/dsh-skills-manager` | 从「技能」进入对应设置页 |
135
- | 归档管理 | `@michengai/dsh-archive-manager` | 提供永久删除和已归档会话管理 |
136
- | IM 助理 | `@michengai/dsh-im-connect` | 从「IM助理」进入对应设置页 |
137
- | 定时任务 | `@michengai/dsh-automation` | 从「定时任务」进入对应设置页 |
138
- | 插件市场 | `dshmarket` | 已安装时,「插件」入口优先进入市场 |
139
- | 套件 | `@michengai/dsh-codex-suite` | 一次安装 Codex UI 及配套管理插件 |
140
-
141
175
  ## 二次开发
142
176
 
143
177
  - [src\index.ts](src/index.ts):Host 入口,以及不含敏感信息的连接器目录接口。
@@ -167,8 +201,6 @@ pnpm build
167
201
  pnpm test
168
202
  ```
169
203
 
170
- ## 文档与许可证
171
-
172
- 项目状态、技术架构和迭代记录从[文档交接入口](docs/00-交接入口/00-阅读导航.md)开始。
204
+ ## 许可证
173
205
 
174
206
  本项目采用 [Apache License 2.0](LICENSE)。会话管理工作流参考 [Semidia/dsh-session-manager](https://github.com/Semidia/dsh-session-manager),但本插件独立通过 DSH 公开插槽和服务实现。
Binary file
Binary file
Binary file
package/dist/client.js CHANGED
@@ -447,7 +447,6 @@ window.__ModuleLoader__.load({
447
447
  pinned && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
448
448
  className: "dcu-wb-pin",
449
449
  "aria-label": t("sessions.pinned"),
450
- title: t("sessions.pinned"),
451
450
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(PinMark, {})
452
451
  }),
453
452
  unread ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
@@ -463,7 +462,6 @@ window.__ModuleLoader__.load({
463
462
  type: "button",
464
463
  className: "dcu-wb-more dcu-wb-quick-pin",
465
464
  "aria-label": t(pinned ? "sessions.unpin" : "sessions.pin"),
466
- title: t(pinned ? "sessions.unpin" : "sessions.pin"),
467
465
  onClick: (event) => {
468
466
  event.stopPropagation();
469
467
  onPin();
@@ -473,7 +471,6 @@ window.__ModuleLoader__.load({
473
471
  type: "button",
474
472
  className: "dcu-wb-more",
475
473
  "aria-label": t("sessions.archive"),
476
- title: t("sessions.archive"),
477
474
  onClick: (event) => {
478
475
  event.stopPropagation();
479
476
  onArchive();
@@ -986,10 +983,7 @@ header [data-dcu-title-folder] svg,header [data-dcu-title-more] svg{display:bloc
986
983
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
987
984
  className: "dcu-wb-folder",
988
985
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconFolderClose16, { size: 16 })
989
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
990
- title: hoverTip.path,
991
- children: hoverTip.path
992
- })]
986
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: hoverTip.path })]
993
987
  }),
994
988
  hoverTip.kind === "session" && hoverTip.project !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
995
989
  className: "dcu-wb-tip-row",
@@ -1517,7 +1511,6 @@ header [data-dcu-title-folder] svg,header [data-dcu-title-more] svg{display:bloc
1517
1511
  }),
1518
1512
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
1519
1513
  className: "dcu-wb-project-title",
1520
- title: workspace.path,
1521
1514
  children: workspace.title
1522
1515
  }),
1523
1516
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
@@ -1669,7 +1662,6 @@ header [data-dcu-title-folder] svg,header [data-dcu-title-more] svg{display:bloc
1669
1662
  pinnedSessionIds.includes(id) && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
1670
1663
  className: "dcu-wb-pin",
1671
1664
  "aria-label": t("sessions.pinned"),
1672
- title: t("sessions.pinned"),
1673
1665
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("svg", {
1674
1666
  viewBox: "0 0 16 16",
1675
1667
  "aria-hidden": "true",
@@ -1689,7 +1681,6 @@ header [data-dcu-title-folder] svg,header [data-dcu-title-more] svg{display:bloc
1689
1681
  type: "button",
1690
1682
  className: "dcu-wb-more dcu-wb-quick-pin",
1691
1683
  "aria-label": t(pinnedSessionIds.includes(id) ? "sessions.unpin" : "sessions.pin"),
1692
- title: t(pinnedSessionIds.includes(id) ? "sessions.unpin" : "sessions.pin"),
1693
1684
  onClick: (event) => {
1694
1685
  event.stopPropagation();
1695
1686
  setPinnedSessionIds((ids) => toggleSessionId(ids, id));
@@ -1703,7 +1694,6 @@ header [data-dcu-title-folder] svg,header [data-dcu-title-more] svg{display:bloc
1703
1694
  type: "button",
1704
1695
  className: "dcu-wb-more",
1705
1696
  "aria-label": t("sessions.archive"),
1706
- title: t("sessions.archive"),
1707
1697
  onClick: (event) => {
1708
1698
  event.stopPropagation();
1709
1699
  run("archive", () => archiveSession(id));
@@ -3430,6 +3420,10 @@ header [data-dcu-title-folder] svg,header [data-dcu-title-more] svg{display:bloc
3430
3420
  //#endregion
3431
3421
  //#region src/dependencies.ts
3432
3422
  const MANAGED_DEPENDENCIES = [
3423
+ {
3424
+ id: "suite",
3425
+ packageName: "@michengai/dsh-codex-suite"
3426
+ },
3433
3427
  {
3434
3428
  id: "ui",
3435
3429
  packageName: "@michengai/dsh-codex-ui"
@@ -3790,7 +3784,7 @@ header [data-dcu-title-folder] svg,header [data-dcu-title-more] svg{display:bloc
3790
3784
  "about.feature.conversation": "保留原生消息、工具调用、输入、权限和模型选择,仅调整容器视觉",
3791
3785
  "about.feature.navigator": "当前会话提供轮次缩略导航,可快速跳转至每一次用户提问",
3792
3786
  "about.dependencies": "配套管理插件",
3793
- "about.dependenciesDescription": "可在此检查并更新本插件,以及专家、技能、归档、IM、定时任务和第三方插件市场;点击安装会从 npm 下载并写入当前 Web profile。",
3787
+ "about.dependenciesDescription": "可先安装 Codex 套件一键装齐配套插件,也可单独检查并更新专家、技能、归档、IM、定时任务和第三方插件市场。",
3794
3788
  "about.loading": "正在读取依赖安装状态…",
3795
3789
  "about.statusFailed": "暂时无法读取依赖安装状态。",
3796
3790
  "about.installed": "已安装",
@@ -3801,6 +3795,7 @@ header [data-dcu-title-folder] svg,header [data-dcu-title-more] svg{display:bloc
3801
3795
  "about.installing": "安装中",
3802
3796
  "about.installFailed": "依赖安装失败,请稍后重试。",
3803
3797
  "about.restartRequired": "依赖安装完成。请重启 DSH Web 服务以加载新插件。",
3798
+ "about.dependency.suite": "Codex 套件",
3804
3799
  "about.dependency.ui": "Codex UI",
3805
3800
  "about.dependency.experts": "专家管理",
3806
3801
  "about.dependency.skills": "技能管理",
@@ -3911,7 +3906,7 @@ header [data-dcu-title-folder] svg,header [data-dcu-title-more] svg{display:bloc
3911
3906
  "about.feature.conversation": "Keeps native messages, tool calls, composer, permissions, and model selection while refining the container visuals",
3912
3907
  "about.feature.navigator": "Navigate directly to each user prompt with the current conversation turn navigator",
3913
3908
  "about.dependencies": "Companion management plugins",
3914
- "about.dependenciesDescription": "Check and update this plugin here, along with the expert, skill, archive, IM, scheduled-task, and third-party marketplace companions. Installation downloads from npm and writes to the current Web profile.",
3909
+ "about.dependenciesDescription": "Install the Codex suite to get all companion plugins at once, or check and update the expert, skill, archive, IM, scheduled-task, and marketplace plugins individually.",
3915
3910
  "about.loading": "Loading dependency status…",
3916
3911
  "about.statusFailed": "Dependency status is temporarily unavailable.",
3917
3912
  "about.installed": "Installed",
@@ -3922,6 +3917,7 @@ header [data-dcu-title-folder] svg,header [data-dcu-title-more] svg{display:bloc
3922
3917
  "about.installing": "Installing",
3923
3918
  "about.installFailed": "Dependency installation failed. Try again later.",
3924
3919
  "about.restartRequired": "Installation is complete. Restart DSH Web to load the new plugin.",
3920
+ "about.dependency.suite": "Codex suite",
3925
3921
  "about.dependency.ui": "Codex UI",
3926
3922
  "about.dependency.experts": "Expert management",
3927
3923
  "about.dependency.skills": "Skill management",
package/dist/index.mjs CHANGED
@@ -5,6 +5,10 @@ import { resolve } from "node:path";
5
5
  import { fileURLToPath } from "node:url";
6
6
  //#region src/dependencies.ts
7
7
  const MANAGED_DEPENDENCIES = [
8
+ {
9
+ id: "suite",
10
+ packageName: "@michengai/dsh-codex-suite"
11
+ },
8
12
  {
9
13
  id: "ui",
10
14
  packageName: "@michengai/dsh-codex-ui"
@@ -43,14 +47,6 @@ function profileDirectory() {
43
47
  if (process.env.DSH_PROFILE_DIR !== void 0) return process.env.DSH_PROFILE_DIR;
44
48
  return resolve(homedir(), ".dsh", "profiles", "web");
45
49
  }
46
- async function profileManifest() {
47
- try {
48
- return JSON.parse(await readFile(resolve(profileDirectory(), "package.json"), "utf8"));
49
- } catch (error) {
50
- if (error.code === "ENOENT") return {};
51
- throw error;
52
- }
53
- }
54
50
  async function installedPackageVersion(packageName) {
55
51
  try {
56
52
  const manifest = JSON.parse(await readFile(resolve(profileDirectory(), "node_modules", ...packageName.split("/"), "package.json"), "utf8"));
@@ -60,6 +56,10 @@ async function installedPackageVersion(packageName) {
60
56
  throw error;
61
57
  }
62
58
  }
59
+ /** 以 node_modules 实际版本为准;套件嵌套安装没有写进顶层 dependencies,也算已安装。 */
60
+ function isManagedPackageInstalled(input) {
61
+ return input.installedVersion !== void 0 && input.installedVersion !== "";
62
+ }
63
63
  /** npm latest 查询缓存有效期:避免每次打开“关于”页都打 7 个 registry 请求。 */
64
64
  const LATEST_CACHE_TTL_MS = 3e5;
65
65
  const latestCache = /* @__PURE__ */ new Map();
@@ -133,15 +133,9 @@ function newerVersion(installed, latest) {
133
133
  }
134
134
  /** 返回 Web profile 中固定管理插件的实际安装版本与 npm latest 状态。 */
135
135
  async function dependencyStatuses() {
136
- const manifest = await profileManifest();
137
136
  return Promise.all(MANAGED_DEPENDENCIES.map(async (dependency) => {
138
- if ((manifest.dependencies?.[dependency.packageName] ?? manifest.devDependencies?.[dependency.packageName]) === void 0) return {
139
- ...dependency,
140
- installed: false,
141
- updateAvailable: false
142
- };
143
137
  const version = await installedPackageVersion(dependency.packageName);
144
- if (version === void 0) return {
138
+ if (!isManagedPackageInstalled({ installedVersion: version })) return {
145
139
  ...dependency,
146
140
  installed: false,
147
141
  updateAvailable: false
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@michengai/dsh-codex-ui",
3
- "version": "0.2.55",
3
+ "version": "0.2.57",
4
4
  "description": "以 Codex 风格重构 DSH Web 侧栏的独立客户端插件",
5
5
  "license": "Apache-2.0",
6
6
  "publishConfig": {
@@ -51,10 +51,6 @@
51
51
  "platform": "web"
52
52
  }
53
53
  },
54
- "scripts": {
55
- "build": "tsc --noEmit && tsdown",
56
- "test": "tsx tests/permission-i18n.assert.ts && tsx tests/hover-tip.assert.ts && tsx tests/companion-slots.assert.ts && tsx tests/channel-api.assert.ts && tsx tests/schedule-sessions.assert.ts && tsx tests/session-tree.assert.ts && tsx tests/pinned-sessions.assert.ts && tsx tests/session-manager.assert.ts && tsx tests/workspace-browser.assert.ts && tsx tests/sidebar-search.assert.ts && tsx tests/settings-navigation.assert.ts && tsx tests/settings-nav-icons.assert.ts && tsx tests/locales.assert.ts && vitest run tests/client-runtime.integration.spec.ts && tsx tests/settings-integration.assert.ts && tsx tests/about-dependencies.assert.ts && tsx tests/dependency-manager.assert.ts && tsx tests/conversation-bubbles.assert.ts && tsx tests/conversation-header.assert.ts && tsx tests/conversation-visuals.assert.ts && tsdown && tsx tests/client-bundle.assert.ts && tsx tests/codex-suite.assert.ts"
57
- },
58
54
  "peerDependencies": {
59
55
  "@deepseek-ai/cordis": ">=4.0.1 <5.0.0",
60
56
  "@deepseek-ai/dsh-client-locale": ">=0.1.0-rc.0 <0.2.0",
@@ -100,5 +96,9 @@
100
96
  "tsx": "^4.22.4",
101
97
  "typescript": "^6.0.3",
102
98
  "vitest": "^4.1.8"
99
+ },
100
+ "scripts": {
101
+ "build": "tsc --noEmit && tsdown",
102
+ "test": "tsx tests/permission-i18n.assert.ts && tsx tests/hover-tip.assert.ts && tsx tests/companion-slots.assert.ts && tsx tests/channel-api.assert.ts && tsx tests/schedule-sessions.assert.ts && tsx tests/session-tree.assert.ts && tsx tests/pinned-sessions.assert.ts && tsx tests/session-manager.assert.ts && tsx tests/workspace-browser.assert.ts && tsx tests/sidebar-search.assert.ts && tsx tests/settings-navigation.assert.ts && tsx tests/settings-nav-icons.assert.ts && tsx tests/locales.assert.ts && vitest run tests/client-runtime.integration.spec.ts && tsx tests/settings-integration.assert.ts && tsx tests/about-dependencies.assert.ts && tsx tests/dependency-manager.assert.ts && tsx tests/conversation-bubbles.assert.ts && tsx tests/conversation-header.assert.ts && tsx tests/conversation-visuals.assert.ts && tsdown && tsx tests/client-bundle.assert.ts && tsx tests/codex-suite.assert.ts"
103
103
  }
104
- }
104
+ }