@michengai/dsh-codex-ui 1.1.3 → 1.1.4
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 +21 -0
- package/CHANGELOG.zh-CN.md +21 -0
- package/README.md +9 -6
- package/README.zh-CN.md +9 -6
- package/lib/client.js +48 -15
- package/lib/index.mjs +77 -10
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,27 @@
|
|
|
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.4 - 2026-09-14
|
|
8
|
+
|
|
9
|
+
- Manage companion plugins in Settings → About, with PUA, Code Review, and Codex Pet included in a consistent order.
|
|
10
|
+
- Show total npm downloads beside each plugin name using a compact icon and text.
|
|
11
|
+
|
|
12
|
+
## suite-installer-v1.0.5 - 2026-09-12
|
|
13
|
+
|
|
14
|
+
Resolved and pinned the following member versions from the official npm registry:
|
|
15
|
+
|
|
16
|
+
- `@michengai/dsh-archive-manager@0.1.39`
|
|
17
|
+
- `@michengai/dsh-codex-ui@1.1.3`
|
|
18
|
+
- `@michengai/dsh-skills-manager@0.1.48`
|
|
19
|
+
- `@michengai/dsh-agency-agents@0.1.41`
|
|
20
|
+
- `@michengai/dsh-im-connect@0.1.45`
|
|
21
|
+
- `@michengai/dsh-automation@0.1.39`
|
|
22
|
+
- `@michengai/dsh-btw@0.1.6`
|
|
23
|
+
- `@michengai/dsh-simplify@0.1.4`
|
|
24
|
+
- `@michengai/dsh-codex-pet@0.1.5`
|
|
25
|
+
|
|
26
|
+
The installer uses these exact versions for reproducible installation.
|
|
27
|
+
|
|
7
28
|
## 1.1.3 - 2026-09-12
|
|
8
29
|
|
|
9
30
|
- With Pet 0.1.5 or later, keep the pet visible and accessible by mouse and keyboard on settings pages while other background content remains isolated.
|
package/CHANGELOG.zh-CN.md
CHANGED
|
@@ -4,6 +4,27 @@
|
|
|
4
4
|
|
|
5
5
|
本日志记录 DSH Codex UI 及其一键安装器的最近发布;更早的变更可查看 [Git 提交历史](https://github.com/MichengAI/dsh-codex-ui/commits/main)。
|
|
6
6
|
|
|
7
|
+
## 1.1.4 - 2026-09-14
|
|
8
|
+
|
|
9
|
+
- 在「设置 → 关于」集中管理配套插件,补齐 PUA、Code Review 和 Codex Pet,并统一插件排序。
|
|
10
|
+
- 在插件名称后显示 npm 累计下载量,以紧凑的图标和文字呈现。
|
|
11
|
+
|
|
12
|
+
## suite-installer-v1.0.5 - 2026-09-12
|
|
13
|
+
|
|
14
|
+
从官方 npm 解析并锁定以下成员版本:
|
|
15
|
+
|
|
16
|
+
- `@michengai/dsh-archive-manager@0.1.39`
|
|
17
|
+
- `@michengai/dsh-codex-ui@1.1.3`
|
|
18
|
+
- `@michengai/dsh-skills-manager@0.1.48`
|
|
19
|
+
- `@michengai/dsh-agency-agents@0.1.41`
|
|
20
|
+
- `@michengai/dsh-im-connect@0.1.45`
|
|
21
|
+
- `@michengai/dsh-automation@0.1.39`
|
|
22
|
+
- `@michengai/dsh-btw@0.1.6`
|
|
23
|
+
- `@michengai/dsh-simplify@0.1.4`
|
|
24
|
+
- `@michengai/dsh-codex-pet@0.1.5`
|
|
25
|
+
|
|
26
|
+
安装器使用这些精确版本执行安装,确保可复现。
|
|
27
|
+
|
|
7
28
|
## 1.1.3 - 2026-09-12
|
|
8
29
|
|
|
9
30
|
- 配合 Pet 0.1.5 或更新版本,进入设置页后宠物仍可显示、点击和通过键盘操作;其他背景内容继续保持隔离。
|
package/README.md
CHANGED
|
@@ -53,7 +53,7 @@ Conversation menu: rename, pin, unread, archive, fork, copy, and delete.
|
|
|
53
53
|
|
|
54
54
|

|
|
55
55
|
|
|
56
|
-
**Settings →
|
|
56
|
+
**Settings → About** lists the companion plugins and their install state.
|
|
57
57
|
|
|
58
58
|

|
|
59
59
|
|
|
@@ -65,18 +65,21 @@ Conversation menu: rename, pin, unread, archive, fork, copy, and delete.
|
|
|
65
65
|
|
|
66
66
|
## DSH product ecosystem
|
|
67
67
|
|
|
68
|
-
For a
|
|
68
|
+
For a desktop workbench, download [DSH Codex Desktop](https://github.com/MichengAI/dsh-codex-desktop/releases). Existing [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) installations can add plugins as needed by following each project's README. Below are 11 first-party plugins; consult the corresponding desktop release notes and bundled catalog for what that version includes.
|
|
69
69
|
|
|
70
70
|
| Plugin | What you can do |
|
|
71
71
|
| --- | --- |
|
|
72
72
|
| [Codex UI](https://github.com/MichengAI/dsh-codex-ui) | Organize projects and conversations, search tasks, and navigate chat turns |
|
|
73
|
-
| [
|
|
74
|
-
| [Automation](https://github.com/MichengAI/dsh-automation) | Schedule tasks and review each run |
|
|
73
|
+
| [Agency Agents](https://github.com/MichengAI/dsh-agency-agents) | Choose and summon specialists for your task |
|
|
75
74
|
| [Skills Manager](https://github.com/MichengAI/dsh-skills-manager) | Find, enable, create, and import local skills |
|
|
76
75
|
| [Archive Manager](https://github.com/MichengAI/dsh-archive-manager) | Search, restore, or clean up archived conversations |
|
|
77
|
-
| [
|
|
76
|
+
| [IM Connect](https://github.com/MichengAI/dsh-im-connect) | Send tasks and receive replies through messaging platforms |
|
|
77
|
+
| [Automation](https://github.com/MichengAI/dsh-automation) | Schedule tasks and review each run |
|
|
78
78
|
| [BTW](https://github.com/MichengAI/dsh-btw) | Ask side questions without interrupting the main task |
|
|
79
|
-
| [Simplify](https://github.com/MichengAI/dsh-simplify) | Use
|
|
79
|
+
| [Simplify](https://github.com/MichengAI/dsh-simplify) | Use `/simplify` to improve code within your Git changes |
|
|
80
|
+
| [PUA](https://github.com/MichengAI/dsh-pua) | Guide the Agent to try new approaches after failures, investigate causes, and verify results before completion |
|
|
81
|
+
| [Code Review](https://github.com/MichengAI/dsh-code-review) | Use `/review` to request an independent Agent code review and receive the report in the current conversation |
|
|
82
|
+
| [Codex Pet](https://github.com/MichengAI/dsh-codex-pet) | View conversation notifications and respond to tool approvals and questions through a desktop pet |
|
|
80
83
|
|
|
81
84
|
## Installation
|
|
82
85
|
|
package/README.zh-CN.md
CHANGED
|
@@ -53,7 +53,7 @@
|
|
|
53
53
|
|
|
54
54
|

|
|
55
55
|
|
|
56
|
-
「设置 →
|
|
56
|
+
「设置 → 关于」列出配套插件及其安装状态。
|
|
57
57
|
|
|
58
58
|

|
|
59
59
|
|
|
@@ -65,18 +65,21 @@
|
|
|
65
65
|
|
|
66
66
|
## DSH 产品生态
|
|
67
67
|
|
|
68
|
-
|
|
68
|
+
想使用桌面工作台,可下载 [DSH Codex Desktop](https://github.com/MichengAI/dsh-codex-desktop/releases);已有 [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) 环境,可按各项目 README 按需安装。以下列出 11 个自研插件;桌面端实际随附范围以对应版本的发行说明和内置清单为准。
|
|
69
69
|
|
|
70
70
|
| 插件 | 你可以用它做什么 |
|
|
71
71
|
| --- | --- |
|
|
72
72
|
| [Codex UI](https://github.com/MichengAI/dsh-codex-ui) | 整理项目与会话、搜索任务、跳转对话轮次 |
|
|
73
|
-
| [
|
|
74
|
-
| [Automation](https://github.com/MichengAI/dsh-automation) | 按计划执行任务,查看每次运行的结果 |
|
|
73
|
+
| [Agency Agents](https://github.com/MichengAI/dsh-agency-agents) | 按任务选择并召唤专业角色 |
|
|
75
74
|
| [Skills Manager](https://github.com/MichengAI/dsh-skills-manager) | 统一查找、启停、创建和导入本机技能 |
|
|
76
75
|
| [Archive Manager](https://github.com/MichengAI/dsh-archive-manager) | 搜索、恢复或清理已归档会话 |
|
|
77
|
-
| [
|
|
76
|
+
| [IM Connect](https://github.com/MichengAI/dsh-im-connect) | 从消息平台下任务、收回复 |
|
|
77
|
+
| [Automation](https://github.com/MichengAI/dsh-automation) | 按计划执行任务,查看每次运行的结果 |
|
|
78
78
|
| [BTW](https://github.com/MichengAI/dsh-btw) | 在当前上下文中临时旁问,不打断主任务 |
|
|
79
|
-
| [Simplify](https://github.com/MichengAI/dsh-simplify) | 用
|
|
79
|
+
| [Simplify](https://github.com/MichengAI/dsh-simplify) | 用 `/simplify` 整理 Git 改动范围内的代码 |
|
|
80
|
+
| [PUA](https://github.com/MichengAI/dsh-pua) | 引导 Agent 在失败时换方法、查原因,并在完成前验证结果 |
|
|
81
|
+
| [Code Review](https://github.com/MichengAI/dsh-code-review) | 用 `/review` 发起独立 Agent 代码审查,在当前会话接收报告 |
|
|
82
|
+
| [Codex Pet](https://github.com/MichengAI/dsh-codex-pet) | 通过桌面宠物查看会话提醒、处理工具审批和问题回答 |
|
|
80
83
|
|
|
81
84
|
## 安装
|
|
82
85
|
|
package/lib/client.js
CHANGED
|
@@ -7286,10 +7286,6 @@ html[data-dcu-official-turn-navigator-supported=true] .dcu-turn-navigator,html:h
|
|
|
7286
7286
|
//#endregion
|
|
7287
7287
|
//#region src/dependencies.ts
|
|
7288
7288
|
const MANAGED_DEPENDENCIES = [
|
|
7289
|
-
{
|
|
7290
|
-
id: "dsh",
|
|
7291
|
-
packageName: "@deepseek-ai/dsh"
|
|
7292
|
-
},
|
|
7293
7289
|
{
|
|
7294
7290
|
id: "ui",
|
|
7295
7291
|
packageName: "@michengai/dsh-codex-ui"
|
|
@@ -7314,10 +7310,6 @@ html[data-dcu-official-turn-navigator-supported=true] .dcu-turn-navigator,html:h
|
|
|
7314
7310
|
id: "schedule",
|
|
7315
7311
|
packageName: "@michengai/dsh-automation"
|
|
7316
7312
|
},
|
|
7317
|
-
{
|
|
7318
|
-
id: "pet",
|
|
7319
|
-
packageName: "@michengai/dsh-codex-pet"
|
|
7320
|
-
},
|
|
7321
7313
|
{
|
|
7322
7314
|
id: "btw",
|
|
7323
7315
|
packageName: "@michengai/dsh-btw"
|
|
@@ -7326,6 +7318,18 @@ html[data-dcu-official-turn-navigator-supported=true] .dcu-turn-navigator,html:h
|
|
|
7326
7318
|
id: "simplify",
|
|
7327
7319
|
packageName: "@michengai/dsh-simplify"
|
|
7328
7320
|
},
|
|
7321
|
+
{
|
|
7322
|
+
id: "pua",
|
|
7323
|
+
packageName: "@michengai/dsh-pua"
|
|
7324
|
+
},
|
|
7325
|
+
{
|
|
7326
|
+
id: "review",
|
|
7327
|
+
packageName: "@michengai/dsh-code-review"
|
|
7328
|
+
},
|
|
7329
|
+
{
|
|
7330
|
+
id: "pet",
|
|
7331
|
+
packageName: "@michengai/dsh-codex-pet"
|
|
7332
|
+
},
|
|
7329
7333
|
{
|
|
7330
7334
|
id: "market",
|
|
7331
7335
|
packageName: "dshmarket"
|
|
@@ -7344,6 +7348,7 @@ html[data-dcu-official-turn-navigator-supported=true] .dcu-turn-navigator,html:h
|
|
|
7344
7348
|
.dcu-about{color:var(--dsw-alias-label-primary)}.dcu-about h2{margin:0;font-size:20px;line-height:28px}.dcu-about-intro{margin:6px 0 22px;color:var(--dsw-alias-label-secondary);font-size:13px;line-height:20px}.dcu-about h3{margin:24px 0 8px;font-size:14px;line-height:20px}.dcu-about-features{margin:0;padding-left:20px;color:var(--dsw-alias-label-secondary);font-size:13px;line-height:24px}.dcu-about-dependencies-heading{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:24px}.dcu-about-dependencies-heading h3{margin:0}.dcu-about-dependencies-heading+.dcu-about-intro{margin-bottom:14px}.dcu-about-dependencies{overflow:hidden;border:1px solid var(--dsw-alias-border-l2);border-radius:10px}.dcu-about-dependency{display:flex;align-items:center;gap:12px;min-height:64px;padding:12px;border-bottom:1px solid var(--dsw-alias-border-l2)}.dcu-about-dependency:last-child{border-bottom:0}.dcu-about-copy{min-width:0;flex:1}.dcu-about-name{font-size:13px;line-height:20px;font-weight:600}.dcu-about-package{overflow:hidden;margin-top:2px;color:var(--dsw-alias-label-tertiary);font-size:12px;text-overflow:ellipsis;white-space:nowrap}.dcu-about-status{display:flex;align-items:center;gap:5px;font-size:12px}.dcu-about-status[data-installed=true]{color:var(--dsw-alias-state-success-primary)}.dcu-about-status[data-installed=false]{color:var(--dsw-alias-state-error-primary)}.dcu-about-status[data-update=true]{color:var(--dsw-alias-state-warning-primary)}.dcu-about-install{display:inline-flex;align-items:center;justify-content:center;gap:5px;min-height:32px;border:1px solid var(--dsw-alias-border-l2);border-radius:7px;padding:6px 9px;background:transparent;color:var(--dsw-alias-label-primary);font:inherit;font-size:12px;cursor:pointer}.dcu-about-install:hover:not(:disabled){background:var(--dsw-specific-menu-item-hover)}.dcu-about-install:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:2px}.dcu-about-install:disabled{cursor:wait;opacity:.65}.dcu-about-update-all{min-width:92px}.dcu-about-message{margin:10px 0 0;border-radius:8px;padding:9px 10px;background:color-mix(in srgb,var(--dsw-alias-state-business-primary) 12%,transparent);color:var(--dsw-alias-label-secondary);font-size:12px;line-height:18px}.dcu-about-message[data-error=true]{background:color-mix(in srgb,var(--dsw-alias-state-error-primary) 12%,transparent);color:var(--dsw-alias-state-error-primary)}.dcu-about-progress{display:grid;grid-template-columns:auto 1fr auto;gap:8px 10px;align-items:center;margin-top:10px;border:1px solid var(--dsw-alias-border-l2);border-radius:8px;padding:9px 10px}.dcu-about-progress code{min-width:0;color:var(--dsw-alias-label-secondary);font-size:12px;line-height:18px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dcu-about-progress-pct{color:var(--dsw-alias-label-tertiary);font-size:12px;font-variant-numeric:tabular-nums}.dcu-about-progress-bar{grid-column:1/-1;height:4px;overflow:hidden;border-radius:99px;background:var(--dsw-alias-border-l2)}.dcu-about-progress-fill{height:100%;background:var(--dsw-alias-state-business-primary);transition:width .2s ease}.dcu-about-progress-fill[data-wave=true]{width:28%;animation:dcu-about-progress-wave 1.2s ease-in-out infinite}@keyframes dcu-about-progress-wave{0%{transform:translateX(-60%)}100%{transform:translateX(280%)}}
|
|
7345
7349
|
.dcu-about-title-row{display:flex;align-items:center;gap:8px;min-width:0}.dcu-about-links{display:flex;align-items:center;gap:4px}.dcu-about-external-link{display:inline-flex;align-items:center;gap:5px;min-height:28px;padding:0 8px;color:var(--dsw-alias-label-secondary);background:transparent;border:1px solid var(--dsw-alias-border-l2);border-radius:7px;font-size:12px;font-weight:500;line-height:18px;text-decoration:none;white-space:nowrap}.dcu-about-external-link:hover{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-interactive-bg-hover)}.dcu-about-external-link:focus-visible{outline:2px solid var(--dsw-alias-state-success-primary);outline-offset:2px}.dcu-about-external-link svg{flex:none}@media(max-width:720px){.dcu-about-title-row{flex-wrap:wrap}}
|
|
7346
7350
|
.dcu-about-version{margin-left:8px;color:var(--dsw-alias-label-tertiary);font-family:inherit;font-size:12px;font-weight:500;line-height:18px;letter-spacing:0;white-space:nowrap;vertical-align:baseline}
|
|
7351
|
+
.dcu-about-name-row{display:flex;align-items:center;gap:10px;min-width:0}.dcu-about-name-row .dcu-about-name{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dcu-about-downloads{display:inline-flex;align-items:center;gap:4px;flex:none;color:var(--dsw-alias-label-secondary);font-size:11px;line-height:20px;font-weight:400;font-variant-numeric:tabular-nums;text-decoration:none;white-space:nowrap}.dcu-about-downloads svg{flex:none;opacity:.75}.dcu-about-downloads:hover{color:var(--dsw-alias-label-primary)}.dcu-about-downloads:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:3px;border-radius:2px}@media(max-width:480px){.dcu-about-dependency{flex-wrap:wrap;gap:8px}.dcu-about-copy{flex-basis:100%}}
|
|
7347
7352
|
`;
|
|
7348
7353
|
/** 宿主图标库不提供 GitHub 品牌标识,内联后可离线使用并继承当前文字颜色。 */
|
|
7349
7354
|
function GithubMark16() {
|
|
@@ -7628,11 +7633,29 @@ html[data-dcu-official-turn-navigator-supported=true] .dcu-turn-navigator,html:h
|
|
|
7628
7633
|
children: [
|
|
7629
7634
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
7630
7635
|
className: "dcu-about-copy",
|
|
7631
|
-
children: [/* @__PURE__ */ (0, react_jsx_runtime.
|
|
7632
|
-
className: "dcu-about-name",
|
|
7633
|
-
children:
|
|
7636
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
7637
|
+
className: "dcu-about-name-row",
|
|
7638
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
7639
|
+
className: "dcu-about-name",
|
|
7640
|
+
children: title(dependency.id)
|
|
7641
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("a", {
|
|
7642
|
+
className: "dcu-about-downloads",
|
|
7643
|
+
href: `https://www.npmjs.com/package/${dependency.packageName}`,
|
|
7644
|
+
target: "_blank",
|
|
7645
|
+
rel: "noreferrer",
|
|
7646
|
+
title: t("about.downloadsSource"),
|
|
7647
|
+
"aria-label": `${dependency.packageName} · ${t("about.totalDownloads")} · ${typeof dependency.totalDownloads === "number" && Number.isSafeInteger(dependency.totalDownloads) && dependency.totalDownloads >= 0 ? dependency.totalDownloads.toLocaleString() : t("about.downloadsUnavailable")}`,
|
|
7648
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconDownloadOutline16, {
|
|
7649
|
+
size: 12,
|
|
7650
|
+
"aria-hidden": "true"
|
|
7651
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
7652
|
+
className: "dcu-about-downloads-count",
|
|
7653
|
+
children: typeof dependency.totalDownloads === "number" && Number.isSafeInteger(dependency.totalDownloads) && dependency.totalDownloads >= 0 ? dependency.totalDownloads.toLocaleString() : "—"
|
|
7654
|
+
})]
|
|
7655
|
+
})]
|
|
7634
7656
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
7635
7657
|
className: "dcu-about-package",
|
|
7658
|
+
title: dependency.packageName,
|
|
7636
7659
|
children: [
|
|
7637
7660
|
dependency.packageName,
|
|
7638
7661
|
dependency.version === void 0 ? "" : ` · ${dependency.version}`,
|
|
@@ -8092,7 +8115,7 @@ html[data-dcu-official-turn-navigator-supported=true] .dcu-turn-navigator,html:h
|
|
|
8092
8115
|
"about.feature.conversation": "保留原生消息、工具调用、输入、权限和模型选择,仅调整容器视觉",
|
|
8093
8116
|
"about.feature.navigator": "当前会话提供轮次缩略导航,可快速跳转至每一次用户提问",
|
|
8094
8117
|
"about.dependencies": "配套管理插件",
|
|
8095
|
-
"about.dependenciesDescription": "每个配套插件都可单独安装和更新,也可一键安装缺失项并更新旧版本。可分别检查 Codex UI、专家、技能、归档、IM
|
|
8118
|
+
"about.dependenciesDescription": "每个配套插件都可单独安装和更新,也可一键安装缺失项并更新旧版本。可分别检查 Codex UI、专家、技能、归档、IM、定时任务、BTW、Simplify、PUA、代码审查、宠物和应用市场。",
|
|
8096
8119
|
"about.loading": "正在读取依赖安装状态…",
|
|
8097
8120
|
"about.statusFailed": "暂时无法读取依赖安装状态。",
|
|
8098
8121
|
"about.refreshFailed": "依赖状态刷新失败,当前显示上次成功读取的结果。",
|
|
@@ -8135,7 +8158,12 @@ html[data-dcu-official-turn-navigator-supported=true] .dcu-turn-navigator,html:h
|
|
|
8135
8158
|
"about.dependency.pet": "Codex 宠物",
|
|
8136
8159
|
"about.dependency.btw": "BTW 旁问",
|
|
8137
8160
|
"about.dependency.simplify": "Simplify",
|
|
8138
|
-
"about.dependency.
|
|
8161
|
+
"about.dependency.pua": "PUA",
|
|
8162
|
+
"about.dependency.review": "代码审查",
|
|
8163
|
+
"about.dependency.market": "应用市场",
|
|
8164
|
+
"about.totalDownloads": "npm 累计下载",
|
|
8165
|
+
"about.downloadsUnavailable": "暂不可用",
|
|
8166
|
+
"about.downloadsSource": "npm 官方统计:自包创建日至昨日的累计下载次数,点击查看 npm 包",
|
|
8139
8167
|
"turns.label": "当前会话轮次导航",
|
|
8140
8168
|
"turns.untitled": "未命名提问",
|
|
8141
8169
|
"turns.jump": "跳转到第 {index} 轮:{summary}",
|
|
@@ -8361,7 +8389,7 @@ html[data-dcu-official-turn-navigator-supported=true] .dcu-turn-navigator,html:h
|
|
|
8361
8389
|
"about.feature.conversation": "Keeps native messages, tool calls, composer, permissions, and model selection while refining the container visuals",
|
|
8362
8390
|
"about.feature.navigator": "Navigate directly to each user prompt with the current conversation turn navigator",
|
|
8363
8391
|
"about.dependencies": "Companion management plugins",
|
|
8364
|
-
"about.dependenciesDescription": "Install or update each companion separately, or install missing plugins and update old versions in one action. Check Codex UI, expert, skill, archive, IM, scheduled-task,
|
|
8392
|
+
"about.dependenciesDescription": "Install or update each companion separately, or install missing plugins and update old versions in one action. Check Codex UI, expert, skill, archive, IM, scheduled-task, BTW, Simplify, PUA, code review, pet, and marketplace plugins on their own.",
|
|
8365
8393
|
"about.loading": "Loading dependency status…",
|
|
8366
8394
|
"about.statusFailed": "Dependency status is temporarily unavailable.",
|
|
8367
8395
|
"about.refreshFailed": "Dependency status refresh failed. Showing the last successful result.",
|
|
@@ -8404,7 +8432,12 @@ html[data-dcu-official-turn-navigator-supported=true] .dcu-turn-navigator,html:h
|
|
|
8404
8432
|
"about.dependency.pet": "Codex Pet",
|
|
8405
8433
|
"about.dependency.btw": "BTW",
|
|
8406
8434
|
"about.dependency.simplify": "Simplify",
|
|
8407
|
-
"about.dependency.
|
|
8435
|
+
"about.dependency.pua": "PUA",
|
|
8436
|
+
"about.dependency.review": "Code Review",
|
|
8437
|
+
"about.dependency.market": "App Market",
|
|
8438
|
+
"about.totalDownloads": "npm total downloads",
|
|
8439
|
+
"about.downloadsUnavailable": "Unavailable",
|
|
8440
|
+
"about.downloadsSource": "Cumulative npm downloads from package creation through yesterday. View package on npm.",
|
|
8408
8441
|
"turns.label": "Conversation turn navigation",
|
|
8409
8442
|
"turns.untitled": "Untitled prompt",
|
|
8410
8443
|
"turns.jump": "Jump to turn {index}: {summary}",
|
package/lib/index.mjs
CHANGED
|
@@ -42,6 +42,62 @@ const CODEX_UI_API_ENDPOINTS = Object.freeze({
|
|
|
42
42
|
sessionMove: `${CODEX_UI_API_BASE}/session-move`
|
|
43
43
|
});
|
|
44
44
|
//#endregion
|
|
45
|
+
//#region src/npm-downloads.ts
|
|
46
|
+
/** 关于页使用的 npm 累计下载量;历史不完整时返回 undefined,不把局部统计当总量。 */
|
|
47
|
+
const cache = /* @__PURE__ */ new Map();
|
|
48
|
+
const pending = /* @__PURE__ */ new Map();
|
|
49
|
+
function npmTotalDownloads(packageName) {
|
|
50
|
+
const hit = cache.get(packageName);
|
|
51
|
+
if (hit !== void 0 && hit.expires > Date.now()) return Promise.resolve(hit.value);
|
|
52
|
+
const active = pending.get(packageName);
|
|
53
|
+
if (active !== void 0) return active;
|
|
54
|
+
const request = query(packageName).then((value) => {
|
|
55
|
+
cache.set(packageName, {
|
|
56
|
+
value,
|
|
57
|
+
expires: Date.now() + (value === void 0 ? 3e5 : 216e5)
|
|
58
|
+
});
|
|
59
|
+
return value;
|
|
60
|
+
}).finally(() => {
|
|
61
|
+
pending.delete(packageName);
|
|
62
|
+
});
|
|
63
|
+
pending.set(packageName, request);
|
|
64
|
+
return request;
|
|
65
|
+
}
|
|
66
|
+
async function query(packageName) {
|
|
67
|
+
try {
|
|
68
|
+
const signal = AbortSignal.timeout(5e3);
|
|
69
|
+
const encoded = encodeURIComponent(packageName);
|
|
70
|
+
const metadata = await fetch(`https://registry.npmjs.org/${encoded}`, { signal });
|
|
71
|
+
if (!metadata.ok) return void 0;
|
|
72
|
+
const created = (await metadata.json())?.time?.created;
|
|
73
|
+
if (typeof created !== "string") return void 0;
|
|
74
|
+
const createdAt = Date.parse(created);
|
|
75
|
+
if (!Number.isFinite(createdAt) || createdAt < Date.parse("2015-01-10T00:00:00Z") || createdAt > Date.now()) return void 0;
|
|
76
|
+
const day = 864e5;
|
|
77
|
+
const start = Math.floor(createdAt / day) * day;
|
|
78
|
+
const end = Math.floor(Date.now() / day) * day - day;
|
|
79
|
+
if (start > end) return 0;
|
|
80
|
+
const ranges = [];
|
|
81
|
+
for (let from = start; from <= end; from += 365 * day) ranges.push({
|
|
82
|
+
start: new Date(from).toISOString().slice(0, 10),
|
|
83
|
+
end: new Date(Math.min(from + 364 * day, end)).toISOString().slice(0, 10)
|
|
84
|
+
});
|
|
85
|
+
const values = await Promise.all(ranges.map(async (range) => {
|
|
86
|
+
const response = await fetch(`https://api.npmjs.org/downloads/point/${range.start}:${range.end}/${encoded}`, { signal });
|
|
87
|
+
if (!response.ok) return void 0;
|
|
88
|
+
const data = await response.json();
|
|
89
|
+
if (data === null || typeof data !== "object") return void 0;
|
|
90
|
+
const { package: name, downloads, start, end } = data;
|
|
91
|
+
return name === packageName && start === range.start && end === range.end && typeof downloads === "number" && Number.isSafeInteger(downloads) && downloads >= 0 ? downloads : void 0;
|
|
92
|
+
}));
|
|
93
|
+
if (values.some((value) => value === void 0)) return void 0;
|
|
94
|
+
const total = values.reduce((sum, value) => sum + value, 0);
|
|
95
|
+
return Number.isSafeInteger(total) ? total : void 0;
|
|
96
|
+
} catch {
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
//#endregion
|
|
45
101
|
//#region src/dependencies.ts
|
|
46
102
|
const SUITE_PACKAGE = "@michengai/dsh-codex-suite";
|
|
47
103
|
const SUITE_MEMBER_PACKAGES = [
|
|
@@ -53,10 +109,6 @@ const SUITE_MEMBER_PACKAGES = [
|
|
|
53
109
|
"@michengai/dsh-automation"
|
|
54
110
|
];
|
|
55
111
|
const MANAGED_DEPENDENCIES = [
|
|
56
|
-
{
|
|
57
|
-
id: "dsh",
|
|
58
|
-
packageName: "@deepseek-ai/dsh"
|
|
59
|
-
},
|
|
60
112
|
{
|
|
61
113
|
id: "ui",
|
|
62
114
|
packageName: "@michengai/dsh-codex-ui"
|
|
@@ -81,10 +133,6 @@ const MANAGED_DEPENDENCIES = [
|
|
|
81
133
|
id: "schedule",
|
|
82
134
|
packageName: "@michengai/dsh-automation"
|
|
83
135
|
},
|
|
84
|
-
{
|
|
85
|
-
id: "pet",
|
|
86
|
-
packageName: "@michengai/dsh-codex-pet"
|
|
87
|
-
},
|
|
88
136
|
{
|
|
89
137
|
id: "btw",
|
|
90
138
|
packageName: "@michengai/dsh-btw"
|
|
@@ -93,6 +141,18 @@ const MANAGED_DEPENDENCIES = [
|
|
|
93
141
|
id: "simplify",
|
|
94
142
|
packageName: "@michengai/dsh-simplify"
|
|
95
143
|
},
|
|
144
|
+
{
|
|
145
|
+
id: "pua",
|
|
146
|
+
packageName: "@michengai/dsh-pua"
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
id: "review",
|
|
150
|
+
packageName: "@michengai/dsh-code-review"
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
id: "pet",
|
|
154
|
+
packageName: "@michengai/dsh-codex-pet"
|
|
155
|
+
},
|
|
96
156
|
{
|
|
97
157
|
id: "market",
|
|
98
158
|
packageName: "dshmarket"
|
|
@@ -351,7 +411,14 @@ async function runtimeSupportsOfficialTurnNavigator(runtime = resolveDependencyR
|
|
|
351
411
|
/** 返回当前 profile 中固定管理插件的实际安装版本与 npm latest 状态。 */
|
|
352
412
|
async function dependencyStatuses(runtime = resolveDependencyRuntime()) {
|
|
353
413
|
const bundleNames = await profileBundleNames(runtime);
|
|
354
|
-
return Promise.all(MANAGED_DEPENDENCIES.map(async (
|
|
414
|
+
return Promise.all(MANAGED_DEPENDENCIES.map(async (entry) => {
|
|
415
|
+
const [status, totalDownloads] = await Promise.all([readStatus(entry), npmTotalDownloads(entry.packageName)]);
|
|
416
|
+
return {
|
|
417
|
+
...status,
|
|
418
|
+
totalDownloads
|
|
419
|
+
};
|
|
420
|
+
}));
|
|
421
|
+
async function readStatus(dependency) {
|
|
355
422
|
const version = await installedPackageVersion(dependency.packageName, runtime);
|
|
356
423
|
if (version === void 0 && runtime.environmentKind === "desktop" && isOfficialRuntimePackage(dependency.packageName)) return {
|
|
357
424
|
...dependency,
|
|
@@ -375,7 +442,7 @@ async function dependencyStatuses(runtime = resolveDependencyRuntime()) {
|
|
|
375
442
|
latestVersion,
|
|
376
443
|
updateAvailable: latestVersion !== void 0 && newerVersion(version, latestVersion)
|
|
377
444
|
};
|
|
378
|
-
}
|
|
445
|
+
}
|
|
379
446
|
}
|
|
380
447
|
/**
|
|
381
448
|
* 把当前进程的 CLI 入口收成绝对路径。源码启动时 argv[1] 常是相对路径,
|