@michengai/dsh-codex-ui 1.1.21 → 1.1.22
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 +24 -0
- package/CHANGELOG.zh-CN.md +24 -0
- package/README.md +1 -1
- package/README.zh-CN.md +1 -1
- package/lib/index.mjs +27 -4
- package/package.json +37 -38
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,30 @@
|
|
|
4
4
|
|
|
5
5
|
This changelog records recent releases of DSH Codex UI and its one-click installer. Earlier changes remain available in the [Git history](https://github.com/MichengAI/dsh-codex-ui/commits/main).
|
|
6
6
|
|
|
7
|
+
## 1.1.22 - 2026-09-29
|
|
8
|
+
|
|
9
|
+
- Host support now starts at DSH `0.1.2-rc.1` and lists every release candidate through `0.2.0-rc.1`: `0.1.2-rc.1`, `0.1.5-rc.1`, `0.1.5-rc.2`, `0.1.5-rc.3`, `0.1.7-rc.1`, `0.1.7-rc.2`, and `0.2.0-rc.1`. This adds the previously missing `0.1.5-rc.3` and matches the other first-party plugins; `0.1.0-rc.8` and `0.1.1-rc.2` are no longer declared.
|
|
10
|
+
- Development dependencies are pinned to DSH `0.2.0-rc.1`, so the plugin installs on the newest release candidate instead of being disabled by the host compatibility check.
|
|
11
|
+
- Dropped the abandoned `@deepseek-ai/dsh-client-runtime` development dependency. The settings lifecycle spec now mounts the production `SlotRegistry` from the official `@deepseek-ai/dsh-client-ui-renderer/client` bundle, so the package is gone from peers, client inject, and tests alike.
|
|
12
|
+
|
|
13
|
+
## suite-installer-v1.0.28 - 2026-09-27
|
|
14
|
+
|
|
15
|
+
Install or maintain 11 first-party plugins in one step. Included plugins and versions:
|
|
16
|
+
|
|
17
|
+
- `@michengai/dsh-archive-manager@1.0.6`
|
|
18
|
+
- `@michengai/dsh-codex-ui@1.1.20`
|
|
19
|
+
- `@michengai/dsh-skills-manager@1.1.4`
|
|
20
|
+
- `@michengai/dsh-agency-agents@1.0.5`
|
|
21
|
+
- `@michengai/dsh-im-connect@0.1.55`
|
|
22
|
+
- `@michengai/dsh-automation@0.1.51`
|
|
23
|
+
- `@michengai/dsh-btw@0.1.13`
|
|
24
|
+
- `@michengai/dsh-simplify@0.1.10`
|
|
25
|
+
- `@michengai/dsh-pua@0.3.18`
|
|
26
|
+
- `@michengai/dsh-code-review@0.1.7`
|
|
27
|
+
- `@michengai/dsh-codex-pet@0.1.10`
|
|
28
|
+
|
|
29
|
+
The installer uses these exact versions for reproducible installation.
|
|
30
|
+
|
|
7
31
|
## 1.1.21 - 2026-09-27
|
|
8
32
|
|
|
9
33
|
- Updating or installing on DSH `0.1.7-rc.2` is no longer rejected by the compatibility check.
|
package/CHANGELOG.zh-CN.md
CHANGED
|
@@ -4,6 +4,30 @@
|
|
|
4
4
|
|
|
5
5
|
本日志记录 DSH Codex UI 及其一键安装器的最近发布;更早的变更可查看 [Git 提交历史](https://github.com/MichengAI/dsh-codex-ui/commits/main)。
|
|
6
6
|
|
|
7
|
+
## 1.1.22 - 2026-09-29
|
|
8
|
+
|
|
9
|
+
- 宿主兼容范围从 DSH `0.1.2-rc.1` 起,逐个列出直到 `0.2.0-rc.1` 的全部候选版:`0.1.2-rc.1`、`0.1.5-rc.1`、`0.1.5-rc.2`、`0.1.5-rc.3`、`0.1.7-rc.1`、`0.1.7-rc.2` 与 `0.2.0-rc.1`。这补上了此前漏掉的 `0.1.5-rc.3`,并与其余自研插件保持一致;`0.1.0-rc.8` 与 `0.1.1-rc.2` 不再声明支持。
|
|
10
|
+
- 开发依赖钉到 DSH `0.2.0-rc.1`,否则最新候选版宿主会因兼容检查直接停用本插件。
|
|
11
|
+
- 移除已停更的 `@deepseek-ai/dsh-client-runtime` 开发依赖。设置生命周期用例改为挂载官方 `@deepseek-ai/dsh-client-ui-renderer/client` 装配包里的生产 `SlotRegistry`,该包已从 peer、客户端 inject 与测试中彻底消失。
|
|
12
|
+
|
|
13
|
+
## suite-installer-v1.0.28 - 2026-09-27
|
|
14
|
+
|
|
15
|
+
一键维护安装 11 个自研插件。包含以下插件及版本:
|
|
16
|
+
|
|
17
|
+
- `@michengai/dsh-archive-manager@1.0.6`
|
|
18
|
+
- `@michengai/dsh-codex-ui@1.1.20`
|
|
19
|
+
- `@michengai/dsh-skills-manager@1.1.4`
|
|
20
|
+
- `@michengai/dsh-agency-agents@1.0.5`
|
|
21
|
+
- `@michengai/dsh-im-connect@0.1.55`
|
|
22
|
+
- `@michengai/dsh-automation@0.1.51`
|
|
23
|
+
- `@michengai/dsh-btw@0.1.13`
|
|
24
|
+
- `@michengai/dsh-simplify@0.1.10`
|
|
25
|
+
- `@michengai/dsh-pua@0.3.18`
|
|
26
|
+
- `@michengai/dsh-code-review@0.1.7`
|
|
27
|
+
- `@michengai/dsh-codex-pet@0.1.10`
|
|
28
|
+
|
|
29
|
+
安装器使用这些精确版本执行安装,确保可复现。
|
|
30
|
+
|
|
7
31
|
## 1.1.21 - 2026-09-27
|
|
8
32
|
|
|
9
33
|
- 在 DSH `0.1.7-rc.2` 上可以正常更新安装,不再被兼容检查拒绝。
|
package/README.md
CHANGED
|
@@ -24,7 +24,7 @@ Working across several projects and conversations in DSH Web? DSH Codex UI helps
|
|
|
24
24
|
|
|
25
25
|
## Host compatibility
|
|
26
26
|
|
|
27
|
-
This working tree explicitly declares DSH `0.1.
|
|
27
|
+
This working tree explicitly declares DSH `0.1.2-rc.1`, `0.1.5-rc.1`, `0.1.5-rc.2`, `0.1.5-rc.3`, `0.1.7-rc.1`, `0.1.7-rc.2`, and `0.2.0-rc.1`. Development dependencies are pinned to `0.2.0-rc.1`. No code references `@deepseek-ai/dsh-client-runtime`: it is not a peer, not a client inject, and no longer a development dependency now that the settings-lifecycle spec mounts the production `SlotRegistry` from the official `@deepseek-ai/dsh-client-ui-renderer/client` bundle. Isolated host checks cover `0.1.2-rc.1`, `0.1.5-rc.1`, `0.1.5-rc.2`, `0.1.5-rc.3`, `0.1.7-rc.1`, `0.1.7-rc.2`, and `0.2.0-rc.1`.
|
|
28
28
|
|
|
29
29
|
## What you can do
|
|
30
30
|
|
package/README.zh-CN.md
CHANGED
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
|
|
25
25
|
## 宿主兼容性
|
|
26
26
|
|
|
27
|
-
当前工作区已显式声明支持 DSH `0.1.
|
|
27
|
+
当前工作区已显式声明支持 DSH `0.1.2-rc.1`、`0.1.5-rc.1`、`0.1.5-rc.2`、`0.1.5-rc.3`、`0.1.7-rc.1`、`0.1.7-rc.2` 或 `0.2.0-rc.1`。开发依赖钉在 `0.2.0-rc.1`。代码已不再引用 `@deepseek-ai/dsh-client-runtime`:它既不是 peer、也不写入客户端 inject;设置生命周期用例改用官方 `@deepseek-ai/dsh-client-ui-renderer/client` 装配包里的生产 `SlotRegistry` 后,这条开发依赖也已移除。隔离宿主检查覆盖 `0.1.2-rc.1`、`0.1.5-rc.1`、`0.1.5-rc.2`、`0.1.5-rc.3`、`0.1.7-rc.1`、`0.1.7-rc.2` 或 `0.2.0-rc.1`。
|
|
28
28
|
|
|
29
29
|
## 你可以用它做什么
|
|
30
30
|
|
package/lib/index.mjs
CHANGED
|
@@ -20,12 +20,36 @@ const CODEX_UI_API_ENDPOINTS = Object.freeze({
|
|
|
20
20
|
/** 关于页使用的 npm 累计下载量;历史不完整时返回 undefined,不把局部统计当总量。 */
|
|
21
21
|
const cache = /* @__PURE__ */ new Map();
|
|
22
22
|
const pending = /* @__PURE__ */ new Map();
|
|
23
|
+
const QUERY_LIMIT = 4;
|
|
24
|
+
let activeQueries = 0;
|
|
25
|
+
const queryWaiters = [];
|
|
26
|
+
function acquireQuery() {
|
|
27
|
+
if (activeQueries < QUERY_LIMIT) {
|
|
28
|
+
activeQueries += 1;
|
|
29
|
+
return Promise.resolve();
|
|
30
|
+
}
|
|
31
|
+
return new Promise((resolve) => {
|
|
32
|
+
queryWaiters.push(resolve);
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
function releaseQuery() {
|
|
36
|
+
const next = queryWaiters.shift();
|
|
37
|
+
if (next !== void 0) next();
|
|
38
|
+
else activeQueries -= 1;
|
|
39
|
+
}
|
|
23
40
|
function npmTotalDownloads(packageName) {
|
|
24
41
|
const hit = cache.get(packageName);
|
|
25
42
|
if (hit !== void 0 && hit.expires > Date.now()) return Promise.resolve(hit.value);
|
|
26
43
|
const active = pending.get(packageName);
|
|
27
44
|
if (active !== void 0) return active;
|
|
28
|
-
const request =
|
|
45
|
+
const request = (async () => {
|
|
46
|
+
await acquireQuery();
|
|
47
|
+
try {
|
|
48
|
+
return await query(packageName);
|
|
49
|
+
} finally {
|
|
50
|
+
releaseQuery();
|
|
51
|
+
}
|
|
52
|
+
})().then((value) => {
|
|
29
53
|
cache.set(packageName, {
|
|
30
54
|
value,
|
|
31
55
|
expires: Date.now() + (value === void 0 ? 3e5 : 216e5)
|
|
@@ -39,9 +63,8 @@ function npmTotalDownloads(packageName) {
|
|
|
39
63
|
}
|
|
40
64
|
async function query(packageName) {
|
|
41
65
|
try {
|
|
42
|
-
const signal = AbortSignal.timeout(5e3);
|
|
43
66
|
const encoded = encodeURIComponent(packageName);
|
|
44
|
-
const metadata = await fetch(`https://registry.npmjs.org/${encoded}`, { signal });
|
|
67
|
+
const metadata = await fetch(`https://registry.npmjs.org/${encoded}`, { signal: AbortSignal.timeout(5e3) });
|
|
45
68
|
if (!metadata.ok) return void 0;
|
|
46
69
|
const created = (await metadata.json())?.time?.created;
|
|
47
70
|
if (typeof created !== "string") return void 0;
|
|
@@ -57,7 +80,7 @@ async function query(packageName) {
|
|
|
57
80
|
end: new Date(Math.min(from + 364 * day, end)).toISOString().slice(0, 10)
|
|
58
81
|
});
|
|
59
82
|
const values = await Promise.all(ranges.map(async (range) => {
|
|
60
|
-
const response = await fetch(`https://api.npmjs.org/downloads/point/${range.start}:${range.end}/${encoded}`, { signal });
|
|
83
|
+
const response = await fetch(`https://api.npmjs.org/downloads/point/${range.start}:${range.end}/${encoded}`, { signal: AbortSignal.timeout(5e3) });
|
|
61
84
|
if (!response.ok) return void 0;
|
|
62
85
|
const data = await response.json();
|
|
63
86
|
if (data === null || typeof data !== "object") return void 0;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@michengai/dsh-codex-ui",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.22",
|
|
4
4
|
"description": "DSH Codex UI — 为 DeepSeek Harness Web 提供 Codex 风格侧栏、工作区会话树、全局搜索和轮次导航 · A Codex-style sidebar, workspace session tree, global search, and turn navigation for DSH Web",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"publishConfig": {
|
|
@@ -74,48 +74,47 @@
|
|
|
74
74
|
},
|
|
75
75
|
"peerDependencies": {
|
|
76
76
|
"@deepseek-ai/cordis": ">=4.0.2 <5.0.0",
|
|
77
|
-
"@deepseek-ai/dsh-client-connection": "0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.7-rc.1 || 0.1.7-rc.2",
|
|
78
|
-
"@deepseek-ai/dsh-client-locale": "0.1.
|
|
79
|
-
"@deepseek-ai/dsh-client-ui-conversation": "0.1.
|
|
80
|
-
"@deepseek-ai/dsh-client-ui-input-trigger": "0.1.
|
|
81
|
-
"@deepseek-ai/dsh-client-ui-layout": "0.1.
|
|
82
|
-
"@deepseek-ai/dsh-client-ui-primitives": "0.1.
|
|
83
|
-
"@deepseek-ai/dsh-client-ui-settings": "0.1.
|
|
84
|
-
"@deepseek-ai/dsh-client-ui-settings-general": "0.1.
|
|
85
|
-
"@deepseek-ai/dsh-client-ui-sidebar": "0.1.
|
|
86
|
-
"@deepseek-ai/dsh-client-ui-slots": "0.1.
|
|
87
|
-
"@deepseek-ai/dsh-client-ui-workspace": "0.1.
|
|
77
|
+
"@deepseek-ai/dsh-client-connection": "0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1",
|
|
78
|
+
"@deepseek-ai/dsh-client-locale": "0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1",
|
|
79
|
+
"@deepseek-ai/dsh-client-ui-conversation": "0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1",
|
|
80
|
+
"@deepseek-ai/dsh-client-ui-input-trigger": "0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1",
|
|
81
|
+
"@deepseek-ai/dsh-client-ui-layout": "0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1",
|
|
82
|
+
"@deepseek-ai/dsh-client-ui-primitives": "0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1",
|
|
83
|
+
"@deepseek-ai/dsh-client-ui-settings": "0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1",
|
|
84
|
+
"@deepseek-ai/dsh-client-ui-settings-general": "0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1",
|
|
85
|
+
"@deepseek-ai/dsh-client-ui-sidebar": "0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1",
|
|
86
|
+
"@deepseek-ai/dsh-client-ui-slots": "0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1",
|
|
87
|
+
"@deepseek-ai/dsh-client-ui-workspace": "0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1",
|
|
88
88
|
"react": "^18.2.0",
|
|
89
89
|
"react-dom": "^18.2.0"
|
|
90
90
|
},
|
|
91
91
|
"devDependencies": {
|
|
92
92
|
"@deepseek-ai/cordis": "4.0.4",
|
|
93
|
-
"@deepseek-ai/dsh-api-session-controller": "0.
|
|
94
|
-
"@deepseek-ai/dsh-api-workspace-controller": "0.
|
|
95
|
-
"@deepseek-ai/dsh-attachment": "0.
|
|
96
|
-
"@deepseek-ai/dsh-client-connection": "0.
|
|
97
|
-
"@deepseek-ai/dsh-client-locale": "0.
|
|
98
|
-
"@deepseek-ai/dsh-client-
|
|
99
|
-
"@deepseek-ai/dsh-client-
|
|
100
|
-
"@deepseek-ai/dsh-client-
|
|
101
|
-
"@deepseek-ai/dsh-client-ui-
|
|
102
|
-
"@deepseek-ai/dsh-client-ui-
|
|
103
|
-
"@deepseek-ai/dsh-client-ui-
|
|
104
|
-
"@deepseek-ai/dsh-client-ui-
|
|
105
|
-
"@deepseek-ai/dsh-client-ui-
|
|
106
|
-
"@deepseek-ai/dsh-client-ui-
|
|
107
|
-
"@deepseek-ai/dsh-client-ui-
|
|
108
|
-
"@deepseek-ai/dsh-client-ui-settings": "0.
|
|
109
|
-
"@deepseek-ai/dsh-client-ui-
|
|
110
|
-
"@deepseek-ai/dsh-client-ui-
|
|
111
|
-
"@deepseek-ai/dsh-client-ui-
|
|
112
|
-
"@deepseek-ai/dsh-
|
|
113
|
-
"@deepseek-ai/dsh-
|
|
114
|
-
"@deepseek-ai/dsh-
|
|
115
|
-
"@deepseek-ai/dsh-
|
|
116
|
-
"@deepseek-ai/dsh-
|
|
117
|
-
"@deepseek-ai/dsh-
|
|
118
|
-
"@deepseek-ai/dsh-workspace": "0.1.7-rc.2",
|
|
93
|
+
"@deepseek-ai/dsh-api-session-controller": "0.2.0-rc.1",
|
|
94
|
+
"@deepseek-ai/dsh-api-workspace-controller": "0.2.0-rc.1",
|
|
95
|
+
"@deepseek-ai/dsh-attachment": "0.2.0-rc.1",
|
|
96
|
+
"@deepseek-ai/dsh-client-connection": "0.2.0-rc.1",
|
|
97
|
+
"@deepseek-ai/dsh-client-locale": "0.2.0-rc.1",
|
|
98
|
+
"@deepseek-ai/dsh-client-store": "0.2.0-rc.1",
|
|
99
|
+
"@deepseek-ai/dsh-client-test-runtime": "0.2.0-rc.1",
|
|
100
|
+
"@deepseek-ai/dsh-client-ui-chat": "0.2.0-rc.1",
|
|
101
|
+
"@deepseek-ai/dsh-client-ui-conversation": "0.2.0-rc.1",
|
|
102
|
+
"@deepseek-ai/dsh-client-ui-input-trigger": "0.2.0-rc.1",
|
|
103
|
+
"@deepseek-ai/dsh-client-ui-layout": "0.2.0-rc.1",
|
|
104
|
+
"@deepseek-ai/dsh-client-ui-primitives": "0.2.0-rc.1",
|
|
105
|
+
"@deepseek-ai/dsh-client-ui-renderer": "0.2.0-rc.1",
|
|
106
|
+
"@deepseek-ai/dsh-client-ui-session": "0.2.0-rc.1",
|
|
107
|
+
"@deepseek-ai/dsh-client-ui-settings": "0.2.0-rc.1",
|
|
108
|
+
"@deepseek-ai/dsh-client-ui-settings-general": "0.2.0-rc.1",
|
|
109
|
+
"@deepseek-ai/dsh-client-ui-sidebar": "0.2.0-rc.1",
|
|
110
|
+
"@deepseek-ai/dsh-client-ui-slots": "0.2.0-rc.1",
|
|
111
|
+
"@deepseek-ai/dsh-client-ui-workspace": "0.2.0-rc.1",
|
|
112
|
+
"@deepseek-ai/dsh-session": "0.2.0-rc.1",
|
|
113
|
+
"@deepseek-ai/dsh-scope": "0.2.0-rc.1",
|
|
114
|
+
"@deepseek-ai/dsh-subagent": "0.2.0-rc.1",
|
|
115
|
+
"@deepseek-ai/dsh-typert-protocol": "0.2.0-rc.1",
|
|
116
|
+
"@deepseek-ai/dsh-util-workspace-path": "0.2.0-rc.1",
|
|
117
|
+
"@deepseek-ai/dsh-workspace": "0.2.0-rc.1",
|
|
119
118
|
"diff": "^9.0.0",
|
|
120
119
|
"shiki": "^4.3.1",
|
|
121
120
|
"simple-icons": "16.31.0",
|