@michengai/dsh-automation 0.1.34 → 0.1.36

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 CHANGED
@@ -4,7 +4,17 @@
4
4
 
5
5
  The five most recent published versions are listed below. Git tags and GitHub Releases now mirror these entries; historical sections retain links to their original release commits.
6
6
 
7
- ## Unreleased
7
+ ## 0.1.36 - 2026-09-10
8
+
9
+ - Support DSH `0.1.5-rc.1` Agent setup and Web RPC dependency injection while retaining legacy interfaces. Correct manual/scheduled history labels and cover the official patch engine, real Connection, AgentLoop, and permissions.
10
+ - Accept both persisted session-list formats; preserve all session links when enumeration is unavailable or malformed, avoiding accidental unlinking of existing cold sessions.
11
+ - Pin development dependencies to `0.1.5-rc.1` and restrict official Host peers to `0.1.0-rc.8 || 0.1.1-rc.2 || 0.1.2-rc.1 || 0.1.5-rc.1`. Other versions fall outside the declared range and fail strict peer installation. Add new versions to the standalone `pnpm test:matrix` before expanding support.
12
+
13
+ ## 0.1.35 - 2026-09-09
14
+
15
+ - Adjust model menu sizing and hint containers, and simplify model rows.
16
+
17
+ - Unified settings headings, descriptions, and action layouts; maintenance controls no longer squeeze titles or versions. The layout adapts to native DSH settings without Codex UI.
8
18
 
9
19
  ## 0.1.34 - 2026-09-07
10
20
 
@@ -4,7 +4,17 @@
4
4
 
5
5
  以下记录最近发布的五个版本。Git 标签与 GitHub Release 现已和这些条目同步;历史条目继续保留原始发布提交链接。
6
6
 
7
- ## 未发布
7
+ ## 0.1.36 - 2026-09-10
8
+
9
+ - 适配 DSH `0.1.5-rc.1` 的显式 Agent 创建回调和 Web RPC 依赖注入,保留旧版接口;修正历史记录的手动/定时触发文案,并补充官方补丁引擎、真实 Connection、AgentLoop 与权限回归。
10
+ - 兼容新旧持久化会话列表;缺少枚举能力或发现异常枚举时保留全部会话关联,避免将仍存在的冷会话误判为已删除。
11
+ - 开发依赖锁定 `0.1.5-rc.1`,官方 Host peer 范围精确限定为 `0.1.0-rc.8 || 0.1.1-rc.2 || 0.1.2-rc.1 || 0.1.5-rc.1`。其他版本不在声明范围内,严格 peer 安装将失败;新增版本需扩展并运行独立的 `pnpm test:matrix`。
12
+
13
+ ## 0.1.35 - 2026-09-09
14
+
15
+ - 调整模型菜单的宽度及辅助文本容器,精简模型条目显示。
16
+
17
+ - 统一设置页标题、说明与操作布局,标题及版本不再被维护按钮挤压;适配原生 DSH 设置内容区,无需安装 Codex UI。
8
18
 
9
19
  ## 0.1.34 - 2026-09-07
10
20
 
package/README.md CHANGED
@@ -21,14 +21,13 @@
21
21
 
22
22
  ## Features
23
23
 
24
- - Manage scheduled tasks from **Settings → Scheduled Tasks**.
25
- - Create, pause, resume, run now, and delete rules from the Web UI or Agent tools.
26
- - Start each occurrence in a fresh root Agent and Session. Source-chat history is not inherited.
27
- - Support once, interval, hourly, daily, weekly, monthly, and custom-every-N-days schedules.
28
- - Pick workspace, model, skills, and any permission preset exposed by the Host.
29
- - Create from chat: describe the schedule in any conversation, then confirm with the official approval card.
30
- - Keep durable run history: `queued`, `running`, `succeeded`, `failed`, `skipped`, `cancelled`.
31
- - Add a sidebar **Scheduled** tab. Folders are task names and child sessions are run times. On stock DSH it wraps the official workspace tree and does not depend on `dsh-codex-ui`.
24
+ Let DSH handle work on a schedule. Set up tasks in Settings or describe the timing and requirements in a conversation, then review each run.
25
+
26
+ - **Run once or repeat**: choose intervals, hourly, daily, weekly, monthly, or every N days.
27
+ - **Choose the working environment**: set the directory, model, skills, and permissions.
28
+ - **Adjust the schedule anytime**: create, pause, resume, run immediately, or delete tasks.
29
+ - **Review results**: browse task conversations by name and run time in the **Scheduled** tab, or filter run history in Settings.
30
+ - **Keep each run independent**: each run uses the saved task instructions and does not inherit the conversation that created it.
32
31
 
33
32
  ## Interface
34
33
 
@@ -40,7 +39,7 @@ Open **Settings → Scheduled Tasks** to search, create, pause, and inspect rule
40
39
 
41
40
  ![Scheduled tasks settings](assets/screenshots/settings-tasks.png)
42
41
 
43
- Describe the job in chat. The agent calls `automation_create` and asks through the official approval card:
42
+ Describe the job in chat. DSH handles approval according to the selected permission mode:
44
43
 
45
44
  ![Create a scheduled task from chat](assets/screenshots/chat-create.png)
46
45
 
@@ -56,53 +55,51 @@ Run history stays in Settings and can be filtered by day, week, month, task, or
56
55
 
57
56
  ## DSH product ecosystem
58
57
 
59
- This product can be installed independently or used through the desktop app or Web suite. They share the same DSH core but serve different ways of working; on stock DSH, this product does not depend on Codex UI:
58
+ 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.
60
59
 
61
- | Product | Relationship to this product |
60
+ | Plugin | What you can do |
62
61
  | --- | --- |
63
- | [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) | The host runtime that provides models, sessions, tools, and the plugin system |
64
- | [DSH Codex Desktop](https://github.com/MichengAI/dsh-codex-desktop) | A ready-to-install desktop product with this product and the other five feature products built in |
65
- | Six feature products | [Codex UI](https://github.com/MichengAI/dsh-codex-ui) · [IM Connect](https://github.com/MichengAI/dsh-im-connect) · [Automation](https://github.com/MichengAI/dsh-automation) · [Skills Manager](https://github.com/MichengAI/dsh-skills-manager) · [Archive Manager](https://github.com/MichengAI/dsh-archive-manager) · [Agency Agents](https://github.com/MichengAI/dsh-agency-agents) |
62
+ | [Codex UI](https://github.com/MichengAI/dsh-codex-ui) | Organize projects and conversations, search tasks, and navigate chat turns |
63
+ | [IM Connect](https://github.com/MichengAI/dsh-im-connect) | Send tasks and receive replies through your usual messenger |
64
+ | [Automation](https://github.com/MichengAI/dsh-automation) | Schedule tasks and review each run |
65
+ | [Skills Manager](https://github.com/MichengAI/dsh-skills-manager) | Find, enable, create, and import local skills |
66
+ | [Archive Manager](https://github.com/MichengAI/dsh-archive-manager) | Search, restore, or clean up archived conversations |
67
+ | [Agency Agents](https://github.com/MichengAI/dsh-agency-agents) | Choose and summon specialists for your task |
68
+ | [BTW](https://github.com/MichengAI/dsh-btw) | Ask side questions without interrupting the main task |
69
+ | [Simplify](https://github.com/MichengAI/dsh-simplify) | Use /simplify to improve code within your Git changes |
66
70
 
67
71
  ## Prerequisites
68
72
 
73
+ - The current source uses DSH `0.1.5-rc.1` for development and real Host compatibility tests, while retaining the legacy Agent setup callback and session-list formats. Back up automation storage and sessions in the Profile before upgrading the Host; V3 sessions cannot be read after downgrading.
74
+ - Official DSH peerDependencies are exactly `0.1.0-rc.8 || 0.1.1-rc.2 || 0.1.2-rc.1 || 0.1.5-rc.1`; development dependencies remain pinned to `0.1.5-rc.1`. Use one consistent official package version within each Host.
75
+ - Other versions are outside the declared compatibility range. Installers may warn, and strict peer validation rejects them. Extend and pass the version matrix before adding a new rc.
76
+ - The Connection patch replaces the Web bundle's configured injection list with `[webServer, webRuntime]`; Loader still merges dependencies declared by the plugin source. Custom Hosts with additional configured injections must retain these two entries and their extra dependencies in a later Profile patch. This patch does not automatically merge other bundles' lists.
69
77
  - A working DeepSeek Harness Web installation with `dsh` available in PowerShell.
70
78
  - Examples use the `web` profile; replace it with the target profile.
71
79
  - Source installation and development require Node.js 22.19+. npm installation does not require running `npm install` in an arbitrary directory.
72
80
 
73
81
  ## Installation
74
82
 
75
- `dsh plugin add` forwards to `pnpm add` in the profile directory. If you omit a version or the official registry, a local mirror may leave you on an old build.
83
+ The installation commands below use the official npm registry.
76
84
 
77
- ### Install from npm
85
+ ### Ask an agent to install it (recommended)
78
86
 
79
- ```powershell
80
- [Console]::OutputEncoding = [System.Text.Encoding]::UTF8
81
- $OutputEncoding = [System.Text.Encoding]::UTF8
82
- dsh plugin --profile web add @michengai/dsh-automation@latest --registry=https://registry.npmjs.org/
83
- dsh --profile web --dump-config
84
- ```
87
+ 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.
85
88
 
86
- Restart DSH Web and hard-refresh the browser. Pin a version with `@0.1.5` instead of `@latest` when needed.
87
-
88
- ### Install from source
89
+ ```text
90
+ Install the DSH plugin @michengai/dsh-automation into my local web profile by running: dsh plugin --profile web add @michengai/dsh-automation@latest --registry=https://registry.npmjs.org/. Then run dsh --profile web --dump-config, confirm the configuration includes dsh-automation, and explain how to reload DSH and start using the plugin.
91
+ ```
89
92
 
90
- Use this for debugging or unpublished changes. The cloned directory becomes the plugin source path:
93
+ ### Install from npm
91
94
 
92
95
  ```powershell
93
96
  [Console]::OutputEncoding = [System.Text.Encoding]::UTF8
94
97
  $OutputEncoding = [System.Text.Encoding]::UTF8
95
- Set-Location D:\Repository\deepseek-harness-plugin
96
- git clone https://github.com/MichengAI/dsh-automation.git
97
- Set-Location .\dsh-automation
98
- pnpm install
99
- pnpm test
100
- pnpm build
101
- dsh plugin --profile web add .
98
+ dsh plugin --profile web add @michengai/dsh-automation@latest --registry=https://registry.npmjs.org/
102
99
  dsh --profile web --dump-config
103
100
  ```
104
101
 
105
- Restart DSH Web and hard-refresh the browser. Local installation reads and applies `cordis.patch.yml`; do not copy `lib` files manually.
102
+ Restart DSH Web and hard-refresh the browser. Pin a version with `@0.1.5` instead of `@latest` when needed.
106
103
 
107
104
  ## Updates
108
105
 
@@ -139,6 +136,25 @@ A schedule stores future intent. It is not a cached permission grant.
139
136
 
140
137
  ## Development
141
138
 
139
+ ### Install from source
140
+
141
+ Use this for debugging or unpublished changes. The cloned directory becomes the plugin source path:
142
+
143
+ ```powershell
144
+ [Console]::OutputEncoding = [System.Text.Encoding]::UTF8
145
+ $OutputEncoding = [System.Text.Encoding]::UTF8
146
+ Set-Location D:\Repository\deepseek-harness-plugin
147
+ git clone https://github.com/MichengAI/dsh-automation.git
148
+ Set-Location .\dsh-automation
149
+ pnpm install
150
+ pnpm test
151
+ pnpm build
152
+ dsh plugin --profile web add .
153
+ dsh --profile web --dump-config
154
+ ```
155
+
156
+ Restart DSH Web and hard-refresh the browser. Local installation reads and applies `cordis.patch.yml`; do not copy `lib` files manually.
157
+
142
158
  Current sources live in `src` and build into `lib`:
143
159
 
144
160
  - [src\index.ts](src/index.ts): Host plugin, tools, and RPC.
@@ -166,10 +182,12 @@ pnpm test
166
182
  pnpm build
167
183
  ```
168
184
 
169
- `pnpm check` runs typecheck, tests, and build together.
185
+ `pnpm check` runs typecheck, unit tests, real Host compatibility tests, and build. `pnpm test:host` bypasses runtime stubs and uses the official AgentLoop, Session V3, and permission service with a fixed local model adapter; it makes no external model calls. Browser interactions and real model calls require separate acceptance testing.
186
+
187
+ `pnpm test:matrix` builds the package, then creates separate temporary npm environments for all four versions using network access. It checks strict peer installation, every official dependency version, the packaged entry point, real AgentLoop execution, and service regressions. All four versions pass. Persistence enumeration in service regressions uses in-memory fixtures for both cold-session formats; it does not validate on-disk migration of a real Profile. The printed evidence directory retains installation lockfiles, test logs, and `results.json`. The matrix does not modify development dependencies or connect to the user's Profile.
170
188
 
171
- ## Project docs and license
189
+ ## License
172
190
 
173
- Start from the [documentation entry](docs/00-交接入口/00-阅读导航.md) for project status, architecture, and the current iteration. Product notes live in NOTICE.
191
+ Additional notices are in [NOTICE](NOTICE).
174
192
 
175
193
  This project uses [Apache License 2.0](LICENSE).
package/README.zh-CN.md CHANGED
@@ -21,14 +21,13 @@
21
21
 
22
22
  ## 功能概览
23
23
 
24
- - 在「设置 → 定时任务」里管理计划任务。
25
- - 支持 Web 设置页和 Agent 工具创建、暂停、恢复、立即运行和删除。
26
- - 每次到期都启动全新 root Agent 和 Session,不继承来源对话。
27
- - 计划类型包括不重复、间隔、每小时、每天、每周、每月和自定义间隔天数。
28
- - 新建弹窗可选择工作目录、模型、技能,以及 Host 官方提供的权限预设。
29
- - 在任意对话里描述定时任务即可创建;Full access 直接执行,其他权限走官方授权卡。
30
- - 运行状态包含 `queued`、`running`、`succeeded`、`failed`、`skipped`、`cancelled`。
31
- - 侧栏提供「定时」页签:文件夹是任务名称,子会话是执行时间。原生下只包裹官方任务树,不依赖 `dsh-codex-ui`。
24
+ 把需要按时重复的工作交给 DSH。你可以在设置页安排任务,也可以在对话中说明执行时间和要求,再回看每次运行的结果。
25
+
26
+ - **安排一次或重复执行**:支持间隔、每小时、每天、每周、每月和自定义间隔天数。
27
+ - **选择工作环境**:设置工作目录、模型、技能和权限。
28
+ - **随时调整安排**:创建、暂停、恢复、立即运行或删除任务。
29
+ - **查看执行结果**:在侧栏「定时」中按任务和执行时间回看会话,在设置页筛选运行记录。
30
+ - **每次独立运行**:使用已保存的任务说明,不继承创建任务时的整段对话。
32
31
 
33
32
  ## 界面预览
34
33
 
@@ -40,7 +39,7 @@
40
39
 
41
40
  ![定时任务设置页](assets/screenshots/settings-tasks.png)
42
41
 
43
- 在对话里描述任务。Agent 会调用 `automation_create`,并弹出官方授权:
42
+ 在对话里描述任务。DSH 会按所选权限模式处理授权:
44
43
 
45
44
  ![通过对话创建定时任务](assets/screenshots/chat-create.png)
46
45
 
@@ -56,53 +55,51 @@
56
55
 
57
56
  ## DSH 产品生态
58
57
 
59
- 本产品既可以独立安装,也可以随桌面端或 Web 套件一起使用。它们共享同一个 DSH 核心,但面向不同的使用方式;在原生 DSH 下,本产品不依赖 Codex UI:
58
+ 想直接使用完整工作台,可下载 [DSH Codex Desktop](https://github.com/MichengAI/dsh-codex-desktop/releases);已有 [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) 环境,可按需独立安装以下 8 个自研插件。桌面端已随附这些插件。
60
59
 
61
- | 产品 | 与本产品的关系 |
60
+ | 插件 | 你可以用它做什么 |
62
61
  | --- | --- |
63
- | [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) | 本产品的运行宿主,提供模型、会话、工具和插件系统 |
64
- | [DSH Codex Desktop](https://github.com/MichengAI/dsh-codex-desktop) | 下载安装即用的桌面产品,已内置本产品和其他 5 个功能产品 |
65
- | 6 个功能产品 | [Codex UI](https://github.com/MichengAI/dsh-codex-ui) · [IM Connect](https://github.com/MichengAI/dsh-im-connect) · [Automation](https://github.com/MichengAI/dsh-automation) · [Skills Manager](https://github.com/MichengAI/dsh-skills-manager) · [Archive Manager](https://github.com/MichengAI/dsh-archive-manager) · [Agency Agents](https://github.com/MichengAI/dsh-agency-agents) |
62
+ | [Codex UI](https://github.com/MichengAI/dsh-codex-ui) | 整理项目与会话、搜索任务、跳转对话轮次 |
63
+ | [IM Connect](https://github.com/MichengAI/dsh-im-connect) | 从微信、飞书、钉钉等消息平台下任务、收回复 |
64
+ | [Automation](https://github.com/MichengAI/dsh-automation) | 按计划执行任务,查看每次运行的结果 |
65
+ | [Skills Manager](https://github.com/MichengAI/dsh-skills-manager) | 统一查找、启停、创建和导入本机技能 |
66
+ | [Archive Manager](https://github.com/MichengAI/dsh-archive-manager) | 搜索、恢复或清理已归档会话 |
67
+ | [Agency Agents](https://github.com/MichengAI/dsh-agency-agents) | 按任务选择并召唤专业角色 |
68
+ | [BTW](https://github.com/MichengAI/dsh-btw) | 在当前上下文中临时旁问,不打断主任务 |
69
+ | [Simplify](https://github.com/MichengAI/dsh-simplify) | 用 /simplify 整理 Git 改动范围内的代码 |
66
70
 
67
71
  ## 前置条件
68
72
 
73
+ - 当前源码以 DSH `0.1.5-rc.1` 为开发和真实宿主测试基线,保留旧版 Agent 创建回调及会话列表格式的兼容。升级宿主前备份 Profile 中的自动化存储和会话目录;V3 会话不支持降级读取。
74
+ - 官方 DSH peerDependencies 精确限定为 `0.1.0-rc.8 || 0.1.1-rc.2 || 0.1.2-rc.1 || 0.1.5-rc.1`;开发依赖固定为 `0.1.5-rc.1`。同一宿主中的官方包应使用一致版本。
75
+ - 其他版本不在声明兼容范围内;安装器可能提示 peer 警告,启用严格 peer 校验时会失败。支持新 rc 前需扩展版本矩阵并通过验证。
76
+ - Connection 补丁替换 Web bundle 的配置注入列表为 `[webServer, webRuntime]`,Loader 仍会合并插件源码声明的依赖。自定义宿主若增加了其他配置注入,需在后置 Profile 补丁中保留这两项并补齐自定义依赖;本补丁不自动合并其他 bundle 的列表。
69
77
  - 已可正常运行 DeepSeek Harness Web,且可在 PowerShell 中使用 `dsh`。
70
78
  - 以下示例使用 `web` profile;请替换为实际目标 profile。
71
79
  - 从源码安装或二次开发需要 Node.js 22.19+;仅从 npm 安装无需在任意目录执行 `npm install`。
72
80
 
73
81
  ## 安装
74
82
 
75
- `dsh plugin add` 会转发到 profile 目录里的 `pnpm add`。不写版本、不指定官方源时,本机镜像可能让你停在旧版。
83
+ 以下安装命令使用官方 npm 源。
76
84
 
77
- ### 从 npm 安装
85
+ ### 让 Agent 帮你安装(推荐)
78
86
 
79
- ```powershell
80
- [Console]::OutputEncoding = [System.Text.Encoding]::UTF8
81
- $OutputEncoding = [System.Text.Encoding]::UTF8
82
- dsh plugin --profile web add @michengai/dsh-automation@latest --registry=https://registry.npmjs.org/
83
- dsh --profile web --dump-config
84
- ```
87
+ 把下面这段话发给任意能够执行本机终端命令的 Agent。将 `web` 替换为实际使用的 profile;安装完成后,在 DSH 中使用本插件。
85
88
 
86
- 安装后重启 DSH Web,并在浏览器硬刷新。需要钉死某一版时,把 `@latest` 换成 `@0.1.5`。
87
-
88
- ### 从源码安装
89
+ ```text
90
+ 请将 DSH 插件 @michengai/dsh-automation 安装到本机 web profile,执行:dsh plugin --profile web add @michengai/dsh-automation@latest --registry=https://registry.npmjs.org/。安装后执行 dsh --profile web --dump-config,确认配置包含 dsh-automation,并告诉我如何重新加载 DSH 和开始使用。
91
+ ```
89
92
 
90
- 适用于调试或使用未发布改动。克隆后的目录会直接作为插件安装路径:
93
+ ### 从 npm 安装
91
94
 
92
95
  ```powershell
93
96
  [Console]::OutputEncoding = [System.Text.Encoding]::UTF8
94
97
  $OutputEncoding = [System.Text.Encoding]::UTF8
95
- Set-Location D:\Repository\deepseek-harness-plugin
96
- git clone https://github.com/MichengAI/dsh-automation.git
97
- Set-Location .\dsh-automation
98
- pnpm install
99
- pnpm test
100
- pnpm build
101
- dsh plugin --profile web add .
98
+ dsh plugin --profile web add @michengai/dsh-automation@latest --registry=https://registry.npmjs.org/
102
99
  dsh --profile web --dump-config
103
100
  ```
104
101
 
105
- 完成后重启 DSH Web 并硬刷新浏览器。`dsh plugin ... add .` 会自动读取并应用 `cordis.patch.yml`;不要手工复制 `lib` 文件。
102
+ 安装后重启 DSH Web,并在浏览器硬刷新。需要钉死某一版时,把 `@latest` 换成 `@0.1.5`。
106
103
 
107
104
  ## 在线更新
108
105
 
@@ -139,6 +136,25 @@ dsh --profile web --dump-config
139
136
 
140
137
  ## 二次开发
141
138
 
139
+ ### 从源码安装
140
+
141
+ 适用于调试或使用未发布改动。克隆后的目录会直接作为插件安装路径:
142
+
143
+ ```powershell
144
+ [Console]::OutputEncoding = [System.Text.Encoding]::UTF8
145
+ $OutputEncoding = [System.Text.Encoding]::UTF8
146
+ Set-Location D:\Repository\deepseek-harness-plugin
147
+ git clone https://github.com/MichengAI/dsh-automation.git
148
+ Set-Location .\dsh-automation
149
+ pnpm install
150
+ pnpm test
151
+ pnpm build
152
+ dsh plugin --profile web add .
153
+ dsh --profile web --dump-config
154
+ ```
155
+
156
+ 完成后重启 DSH Web 并硬刷新浏览器。`dsh plugin ... add .` 会自动读取并应用 `cordis.patch.yml`;不要手工复制 `lib` 文件。
157
+
142
158
  当前源码在 `src`,构建产物在 `lib`:
143
159
 
144
160
  - [src\index.ts](src/index.ts):Host 插件、工具和 RPC。
@@ -166,10 +182,12 @@ pnpm test
166
182
  pnpm build
167
183
  ```
168
184
 
169
- `pnpm check` 会连续执行类型检查、测试和构建。
185
+ `pnpm check` 会连续执行类型检查、单元测试、真实宿主兼容测试和构建。`pnpm test:host` 不加载宿主运行时桩,使用官方 AgentLoop、Session V3 和权限服务,模型响应由本地固定适配器提供,不调用外部模型。浏览器交互和真实模型调用需另行验收。
186
+
187
+ `pnpm test:matrix` 先构建发布包,再联网为上述四个版本分别建立临时 npm 环境,执行严格 peer 安装、整棵官方依赖树版本检查、发布入口加载、真实 AgentLoop 执行和服务回归。四版均通过;服务回归中的持久化枚举使用内存夹具,覆盖新旧冷会话格式,不等同于真实 Profile 的磁盘迁移验收。脚本输出证据目录,保留各版安装锁文件、测试日志和 `results.json`。矩阵不修改开发依赖,也不连接用户 Profile。
170
188
 
171
- ## 项目文档与许可证
189
+ ## 许可证
172
190
 
173
- 项目状态、使用边界、技术架构和迭代记录从[文档交接入口](docs/00-交接入口/00-阅读导航.md)开始。补充说明见 NOTICE。
191
+ 补充说明见 [NOTICE](NOTICE)。
174
192
 
175
193
  本项目采用 [Apache License 2.0](LICENSE)。
package/cordis.patch.yml CHANGED
@@ -1,4 +1,11 @@
1
1
  # 一次安装同时挂载 Host 服务并发布 Web 客户端。
2
+ # 新版 Connection 的独立 RPC 注册在自身作用域读取 webServer,需显式注入。
3
+ # 此列表替换官方 Web bundle 的 [webRuntime];插件源码声明的依赖仍由 Loader 合并。
4
+ - id: connection
5
+ name: '@deepseek-ai/dsh-client-connection'
6
+ inject:
7
+ - webServer
8
+ - webRuntime
2
9
  - insert:
3
10
  - id: dsh-automation
4
11
  name: '@michengai/dsh-automation'
package/lib/client.js CHANGED
@@ -34,6 +34,9 @@ var import_react6 = require("react");
34
34
  var import_dsh_client_ui_primitives2 = require("@deepseek-ai/dsh-client-ui-primitives");
35
35
 
36
36
  // src/client/helpers.ts
37
+ function formatRunTrigger(trigger, t) {
38
+ return t(`run.trigger.${trigger}`);
39
+ }
37
40
  var AutomationFormError = class extends Error {
38
41
  constructor(key) {
39
42
  super(key);
@@ -927,7 +930,7 @@ function MenuRow({
927
930
  /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { children: label })
928
931
  ] }),
929
932
  /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("span", { className: "dsh-st-menu-row-side", children: [
930
- hint,
933
+ hint !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { children: hint }),
931
934
  active === true && chevron !== true && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("i", { className: "dsh-st-tick" }),
932
935
  chevron === true && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("i", { className: "dsh-st-next" })
933
936
  ] })
@@ -1400,10 +1403,7 @@ function ModelPicker({
1400
1403
  title: item.label,
1401
1404
  onClick: () => selectModel(item),
1402
1405
  children: [
1403
- /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("span", { className: "dsh-st-model-option-copy", children: [
1404
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "dsh-st-model-name", children: item.label }),
1405
- item.description !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "dsh-st-model-description", children: item.description })
1406
- ] }),
1406
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "dsh-st-model-option-copy", children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "dsh-st-model-name", children: item.label }) }),
1407
1407
  /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "dsh-st-model-check", children: value === modelKey && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_dsh_client_ui_primitives.IconCheckOutline16, {}) })
1408
1408
  ]
1409
1409
  },
@@ -2473,7 +2473,7 @@ function RunRow({ run, t }) {
2473
2473
  /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("p", { children: [
2474
2474
  /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { children: clockTime(run.startedAt ?? run.scheduledFor) }),
2475
2475
  duration !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { children: duration }),
2476
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { children: t("history.trigger") })
2476
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { children: formatRunTrigger(run.trigger, t) })
2477
2477
  ] })
2478
2478
  ] });
2479
2479
  }
@@ -2551,7 +2551,6 @@ var en = {
2551
2551
  "history.date": "{date}",
2552
2552
  "history.week": "Week of {date}",
2553
2553
  "history.month": "{month}",
2554
- "history.trigger": "Scheduled",
2555
2554
  "history.nextApprox": "Next run in about {when}",
2556
2555
  "time.withinMinute": "about {count} minutes",
2557
2556
  "time.withinHour": "about {count} hours",
@@ -2680,7 +2679,6 @@ var en = {
2680
2679
  "card.cancel": "Cancel",
2681
2680
  "run.trigger.schedule": "Scheduled",
2682
2681
  "run.trigger.manual": "Manual",
2683
- "run.trigger.catch-up": "Catch-up",
2684
2682
  "run.openSession": "Session {id}",
2685
2683
  "run.markRead": "Mark reviewed",
2686
2684
  loading: "Loading automations\u2026",
@@ -2768,7 +2766,6 @@ var zh = {
2768
2766
  "history.date": "{date}",
2769
2767
  "history.week": "{date} \u5F53\u5468",
2770
2768
  "history.month": "{month}",
2771
- "history.trigger": "\u5B9A\u65F6\u89E6\u53D1",
2772
2769
  "history.nextApprox": "\u4E0B\u6B21\u6267\u884C \u5927\u7EA6 {when}",
2773
2770
  "time.withinMinute": "{count} \u5206\u949F\u5185",
2774
2771
  "time.withinHour": "{count} \u5C0F\u65F6\u5185",
@@ -2895,9 +2892,8 @@ var zh = {
2895
2892
  "card.confirmDeleteHint": "\u8FD0\u884C\u5386\u53F2\u4F1A\u4FDD\u7559\u7528\u4E8E\u5BA1\u8BA1\u3002",
2896
2893
  "card.confirm": "\u786E\u8BA4\u5220\u9664",
2897
2894
  "card.cancel": "\u53D6\u6D88",
2898
- "run.trigger.schedule": "\u5B9A\u65F6",
2899
- "run.trigger.manual": "\u624B\u52A8",
2900
- "run.trigger.catch-up": "\u8865\u507F\u8FD0\u884C",
2895
+ "run.trigger.schedule": "\u5B9A\u65F6\u89E6\u53D1",
2896
+ "run.trigger.manual": "\u624B\u52A8\u89E6\u53D1",
2901
2897
  "run.openSession": "Session {id}",
2902
2898
  "run.markRead": "\u6807\u8BB0\u5DF2\u5904\u7406",
2903
2899
  loading: "\u6B63\u5728\u52A0\u8F7D\u81EA\u52A8\u5316\u2026",
@@ -3918,12 +3914,12 @@ function NativeTaskRail({
3918
3914
  // src/client/styles.ts
3919
3915
  var STYLE_ID = "dsh-automation-styles";
3920
3916
  var CSS_TEXT = `
3921
- .dsh-st-shell{box-sizing:border-box;max-width:1080px;width:100%;margin:0 auto;padding:0 0 32px;color:var(--dsw-alias-label-primary);font-family:var(--dsw-font-family,system-ui)}
3917
+ .dsh-st-shell{container-type:inline-size;min-width:0;box-sizing:border-box;max-width:1080px;width:100%;margin:0 auto;padding:0 0 32px;color:var(--dsw-alias-label-primary);font-family:var(--dsw-font-family,system-ui)}
3922
3918
  .dsh-st-top{display:flex;flex-direction:column;align-items:stretch;gap:12px;margin-bottom:12px}
3923
- .dsh-st-heading h1,.dsh-st-top h1{margin:0;font-size:20px;line-height:28px;font-weight:650;letter-spacing:-.2px}
3924
- .dsh-st-heading-row{display:flex;align-items:center;gap:8px;min-width:0;flex-wrap:wrap}.dsh-st-heading-links{display:inline-flex;align-items:center;gap:4px;min-width:0}.dsh-st-heading-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}.dsh-st-heading-link:hover{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-interactive-bg-hover)}.dsh-st-heading-link:focus-visible{outline:2px solid var(--dsw-alias-state-success-primary);outline-offset:2px}.dsh-st-heading-link svg{flex:none}
3925
- .dsh-st-heading p,.dsh-st-top p{margin:4px 0 0;max-width:none;color:var(--dsw-alias-label-tertiary);font-size:13px;line-height:1.5}
3926
- .dsh-st-toolbar{display:flex;flex-wrap:nowrap;align-items:center;justify-content:flex-start;gap:8px}
3919
+ .dsh-st-heading h1,.dsh-st-top h1{margin:0;font-size:24px;line-height:32px;font-weight:600;letter-spacing:-.4px;white-space:nowrap}
3920
+ .dsh-st-heading-row{display:flex;align-items:center;gap:8px;min-width:0;flex-wrap:wrap}.dsh-st-heading-links{display:inline-flex;align-items:center;gap:4px;min-width:0;flex-wrap:wrap}.dsh-st-heading-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}.dsh-st-heading-link:hover{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-interactive-bg-hover)}.dsh-st-heading-link:focus-visible{outline:2px solid var(--dsw-alias-state-success-primary);outline-offset:2px}.dsh-st-heading-link svg{flex:none}
3921
+ .dsh-st-heading p,.dsh-st-top p{margin:12px 0 0;max-width:none;color:var(--dsw-alias-label-tertiary);font-size:14px;line-height:22px}
3922
+ .dsh-st-toolbar{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-start;gap:8px}
3927
3923
  .dsh-st-search{flex:1;min-width:0;max-width:280px;height:32px;padding:0 12px;border:1px solid var(--dsw-alias-border-l2);border-radius:8px;background:var(--dsw-alias-bg-layer-3,var(--dsw-alias-bg-layer-1));color:inherit;font:inherit;font-size:13px}
3928
3924
  .dsh-st-btn,.dsh-st-icon{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:32px;padding:0 12px;border:1px solid var(--dsw-alias-border-l2);border-radius:8px;background:transparent;color:inherit;font:inherit;font-size:13px;cursor:pointer;white-space:nowrap}
3929
3925
  .dsh-st-icon{width:32px;padding:0;flex:none}
@@ -4052,7 +4048,7 @@ var CSS_TEXT = `
4052
4048
  .dsh-st-chip-btn:hover{background:rgba(255,255,255,.06);color:var(--dsw-alias-label-primary)}
4053
4049
  .dsh-st-chip-btn.is-static{cursor:default;opacity:.78}
4054
4050
  .dsh-st-chip-btn em,.dsh-st-select.is-pill .dsh-st-select-btn em{width:6px;height:6px;margin-left:2px;opacity:.55}
4055
- .dsh-st-model-select{position:relative;z-index:1;min-width:0;flex:none}.dsh-st-model-select.is-open{z-index:30}.dsh-st-model-select-trigger{display:flex;align-items:center;gap:4px;min-width:0;max-width:260px;height:28px;padding:0 4px 0 8px;border:0;border-radius:24px;background:transparent;color:var(--dsw-alias-label-secondary);font-size:13px;font-weight:500;line-height:20px;cursor:pointer}.dsh-st-model-select-trigger:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.dsh-st-model-select-trigger>span:first-child{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dsh-st-model-trigger-effort{flex:none;color:var(--dsw-alias-label-tertiary);white-space:nowrap}.dsh-st-model-trigger-chevron{flex:none;transition:transform .16s ease}.dsh-st-model-trigger-chevron.is-open{transform:rotate(180deg)}.dsh-st-model-select-menu{z-index:30;width:min(240px,calc(100vw - 32px));max-height:min(360px,calc(100vh - 96px));overflow-y:auto;padding:4px;border:1px solid var(--dsw-alias-border-inverted,var(--dsw-alias-border-l2));border-radius:12px;background:var(--dsw-specific-menu,var(--dsw-alias-bg-base));box-shadow:var(--dsw-shadow-lv3)}.dsh-st-model-select-menu.is-float{position:absolute;z-index:1200;box-sizing:border-box}.dsh-st-model-select-menu .dsh-st-menu-row{min-height:40px;padding:0 10px;border-radius:10px;font-size:14px}.dsh-st-model-select-menu .dsh-st-menu-row.is-kv .dsh-st-menu-row-side{font-size:13px;color:var(--dsw-alias-label-tertiary)}.dsh-st-model-group+.dsh-st-model-group{margin-top:4px}.dsh-st-model-group-title{position:sticky;top:0;z-index:1;padding:5px 8px 3px;background:var(--dsw-specific-menu,var(--dsw-alias-bg-base));color:var(--dsw-alias-label-tertiary);font-size:12px;font-weight:500;line-height:18px}.dsh-st-model-option{display:flex;width:100%;min-height:38px;align-items:center;gap:8px;padding:6px 8px;border:0;border-radius:10px;background:transparent;color:var(--dsw-alias-label-primary);text-align:left;cursor:pointer}.dsh-st-model-option:hover,.dsh-st-model-option:focus-visible{background:var(--dsw-alias-interactive-bg-hover);outline:none}.dsh-st-model-option-copy{display:flex;min-width:0;flex:1;flex-direction:column}.dsh-st-model-name{overflow:hidden;font-size:14px;font-weight:500;line-height:20px;text-overflow:ellipsis;white-space:nowrap}.dsh-st-model-description{overflow:hidden;color:var(--dsw-alias-label-tertiary);font-size:12px;line-height:18px;text-overflow:ellipsis;white-space:nowrap}.dsh-st-model-check{display:grid;flex:0 0 18px;place-items:center;color:var(--dsw-alias-label-primary)}.dsh-st-model-warning{margin:4px;padding:8px;border-radius:8px;background:var(--dsw-alias-interactive-bg-hover-danger,rgba(248,81,73,.1));color:var(--dsw-alias-state-error-primary,#f85149);font-size:12px;line-height:18px}.dsh-st-model-empty{padding:14px 12px;color:var(--dsw-alias-label-tertiary);font-size:12px;text-align:center}
4051
+ .dsh-st-model-select{position:relative;z-index:1;min-width:0;flex:none}.dsh-st-model-select.is-open{z-index:30}.dsh-st-model-select-trigger{display:flex;align-items:center;gap:4px;min-width:0;max-width:260px;height:28px;padding:0 4px 0 8px;border:0;border-radius:24px;background:transparent;color:var(--dsw-alias-label-secondary);font-size:13px;font-weight:500;line-height:20px;cursor:pointer}.dsh-st-model-select-trigger:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.dsh-st-model-select-trigger>span:first-child{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dsh-st-model-trigger-effort{flex:none;color:var(--dsw-alias-label-tertiary);white-space:nowrap}.dsh-st-model-trigger-chevron{flex:none;transition:transform .16s ease}.dsh-st-model-trigger-chevron.is-open{transform:rotate(180deg)}.dsh-st-model-select-menu{z-index:30;width:max-content;min-width:min(240px,calc(100vw - 32px));max-width:calc(100vw - 32px);max-height:min(360px,calc(100vh - 96px));overflow-y:auto;padding:4px;border:1px solid var(--dsw-alias-border-inverted,var(--dsw-alias-border-l2));border-radius:12px;background:var(--dsw-specific-menu,var(--dsw-alias-bg-base));box-shadow:var(--dsw-shadow-lv3)}.dsh-st-model-select-menu.is-float{position:absolute;z-index:1200;box-sizing:border-box}.dsh-st-model-select-menu .dsh-st-menu-row{min-height:40px;padding:0 10px;border-radius:10px;font-size:14px}.dsh-st-model-select-menu .dsh-st-menu-row-side>span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dsh-st-model-select-menu .dsh-st-menu-row.is-kv .dsh-st-menu-row-side{font-size:13px;color:var(--dsw-alias-label-tertiary)}.dsh-st-model-group+.dsh-st-model-group{margin-top:4px}.dsh-st-model-group-title{position:sticky;top:0;z-index:1;padding:5px 8px 3px;background:var(--dsw-specific-menu,var(--dsw-alias-bg-base));color:var(--dsw-alias-label-tertiary);font-size:12px;font-weight:500;line-height:18px}.dsh-st-model-option{display:flex;width:100%;min-height:38px;align-items:center;gap:8px;padding:6px 8px;border:0;border-radius:10px;background:transparent;color:var(--dsw-alias-label-primary);text-align:left;cursor:pointer}.dsh-st-model-option:hover,.dsh-st-model-option:focus-visible{background:var(--dsw-alias-interactive-bg-hover);outline:none}.dsh-st-model-option-copy{display:flex;min-width:0;flex:1;flex-direction:column}.dsh-st-model-name{overflow:hidden;font-size:14px;font-weight:500;line-height:20px;text-overflow:ellipsis;white-space:nowrap}.dsh-st-model-description{overflow:hidden;color:var(--dsw-alias-label-tertiary);font-size:12px;line-height:18px;text-overflow:ellipsis;white-space:nowrap}.dsh-st-model-check{display:grid;flex:0 0 18px;place-items:center;color:var(--dsw-alias-label-primary)}.dsh-st-model-warning{margin:4px;padding:8px;border-radius:8px;background:var(--dsw-alias-interactive-bg-hover-danger,rgba(248,81,73,.1));color:var(--dsw-alias-state-error-primary,#f85149);font-size:12px;line-height:18px}.dsh-st-model-empty{padding:14px 12px;color:var(--dsw-alias-label-tertiary);font-size:12px;text-align:center}
4056
4052
  .dsh-st-suffix{color:var(--dsw-alias-label-secondary);font-size:13px}
4057
4053
  .dsh-st-inline input.is-narrow{width:72px;flex:none}
4058
4054
  .dsh-st-time{display:inline-flex;align-items:center;gap:2px;min-height:36px;padding:0 8px;border:1px solid var(--dsw-alias-border-l2);border-radius:12px;background:rgba(255,255,255,.04)}