@michengai/dsh-automation 0.1.42 → 0.1.44

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,6 +4,17 @@
4
4
 
5
5
  Upcoming changes and 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
+ ## 0.1.44 - 2026-09-16
8
+
9
+ - Keep only turn-boundary events in the live run-summary buffer, dropping request headers and tool results.
10
+ - Treat plugin-fiber unload (`INACTIVE_EFFECT`) or an aborted run signal mid-execution as `cancelled`, not `executor_error`.
11
+
12
+ ## 0.1.43 - 2026-09-16
13
+
14
+ - Add support for DSH `0.1.6-alpha.1`, retaining compatibility with `0.1.0-rc.8`, `0.1.1-rc.2`, `0.1.2-rc.1`, `0.1.5-rc.1`, and `0.1.5-rc.2`.
15
+ - On DSH `0.1.6+` hosts, collect run summaries from live `session/event` updates and fall back to the deprecated snapshot when that stream is missing or incomplete. Owned-session detection prefers `deriveMessages` and still reads events on older hosts.
16
+ - Open scheduled-task settings from overview cards on the Codex UI settings page, not only the official settings dialog.
17
+
7
18
  ## 0.1.42 - 2026-09-14
8
19
 
9
20
  - Preserve a replacement sidebar tab when an older registration with the same ID is unloaded.
@@ -4,6 +4,17 @@
4
4
 
5
5
  以下记录待发布变更及近期已发布版本。Git 标签与 GitHub Release 现已和这些条目同步;历史条目继续保留原始发布提交链接。
6
6
 
7
+ ## 0.1.44 - 2026-09-16
8
+
9
+ - 运行摘要增量只保留 turn 边界事件,不再缓存 request/header 和工具结果。
10
+ - 插件 fiber 卸载抛出 `INACTIVE_EFFECT`,或运行中段已 abort 时,将运行记为 `cancelled`,而不是 `executor_error`。
11
+
12
+ ## 0.1.43 - 2026-09-16
13
+
14
+ - 支持 DSH `0.1.6-alpha.1`,继续兼容 `0.1.0-rc.8`、`0.1.1-rc.2`、`0.1.2-rc.1`、`0.1.5-rc.1` 和 `0.1.5-rc.2`。
15
+ - 在 DSH `0.1.6+` 宿主上,运行摘要优先订阅 `session/event` 增量;增量缺失或不完整时回退已弃用的同步快照。会话归属优先读 `deriveMessages`,旧宿主继续读事件。
16
+ - 总览卡片打开任务设置时兼容 Codex UI 设置页,不再只找官方设置弹窗。
17
+
7
18
  ## 0.1.42 - 2026-09-14
8
19
 
9
20
  - 修复旧侧栏页签卸载时,可能误删同 ID 替代页签的问题。
package/README.md CHANGED
@@ -73,8 +73,8 @@ For a desktop workbench, download [DSH Codex Desktop](https://github.com/Micheng
73
73
 
74
74
  ## Prerequisites
75
75
 
76
- - The current source uses DSH `0.1.5-rc.2` 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.
77
- - 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 || 0.1.5-rc.2`; development dependencies remain pinned to `0.1.5-rc.2`. Use one consistent official package version within each Host.
76
+ - The current source uses DSH `0.1.6-alpha.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.
77
+ - 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 || 0.1.5-rc.2 || 0.1.6-alpha.1`; development dependencies remain pinned to `0.1.6-alpha.1`. Use one consistent official package version within each Host.
78
78
  - 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.
79
79
  - 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.
80
80
  - A working DeepSeek Harness Web installation with `dsh` available in PowerShell.
@@ -191,7 +191,7 @@ pnpm build
191
191
 
192
192
  Cross-plugin sidebar regressions run with `pnpm test:composition <dsh-im-connect checkout>`. Build the IM checkout first; the script reads its `lib/client.js`. It executes the composition logic and tab registries of both repositories, covering registration order, delayed notifications, and uninstall handover across the archive, IM, scheduled, and Codex UI plugins; slots and timers use a simulated environment, so it does not install any plugin or replace Desktop rendering acceptance testing. This separate check requires an external checkout and is not included in `pnpm check`; use a fixed IM revision for reproducible results.
193
193
 
194
- `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.
194
+ `pnpm test:matrix` builds the package, then creates separate temporary npm environments for every declared Host version using network access. It checks strict peer installation, every official dependency version, the packaged entry point, real AgentLoop execution, and service regressions. All declared 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.
195
195
 
196
196
  ## License
197
197
 
package/README.zh-CN.md CHANGED
@@ -73,8 +73,8 @@
73
73
 
74
74
  ## 前置条件
75
75
 
76
- - 当前源码以 DSH `0.1.5-rc.2` 为开发和真实宿主测试基线,保留旧版 Agent 创建回调及会话列表格式的兼容。升级宿主前备份 Profile 中的自动化存储和会话目录;V3 会话不支持降级读取。
77
- - 官方 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.2`;开发依赖固定为 `0.1.5-rc.2`。同一宿主中的官方包应使用一致版本。
76
+ - 当前源码以 DSH `0.1.6-alpha.1` 为开发和真实宿主测试基线,保留旧版 Agent 创建回调及会话列表格式的兼容。升级宿主前备份 Profile 中的自动化存储和会话目录;V3 会话不支持降级读取。
77
+ - 官方 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.2 || 0.1.6-alpha.1`;开发依赖固定为 `0.1.6-alpha.1`。同一宿主中的官方包应使用一致版本。
78
78
  - 其他版本不在声明兼容范围内;安装器可能提示 peer 警告,启用严格 peer 校验时会失败。支持新 rc 前需扩展版本矩阵并通过验证。
79
79
  - Connection 补丁替换 Web bundle 的配置注入列表为 `[webServer, webRuntime]`,Loader 仍会合并插件源码声明的依赖。自定义宿主若增加了其他配置注入,需在后置 Profile 补丁中保留这两项并补齐自定义依赖;本补丁不自动合并其他 bundle 的列表。
80
80
  - 已可正常运行 DeepSeek Harness Web,且可在 PowerShell 中使用 `dsh`。
@@ -191,7 +191,7 @@ pnpm build
191
191
 
192
192
  跨插件侧栏回归可运行 `pnpm test:composition <dsh-im-connect 检出目录>`。请先构建 IM 检出目录,脚本读取其中的 `lib/client.js`。它执行两仓库的接入逻辑和页签注册表,覆盖归档、IM、定时及 Codex UI 的注册顺序、延迟通知与卸载接管;插槽和计时器使用模拟环境,不替代 Desktop 渲染验收,也不安装插件。该检查需要外部检出目录,独立于 `pnpm check`;请固定 IM revision,以便复现结果。
193
193
 
194
- `pnpm test:matrix` 先构建发布包,再联网为上述四个版本分别建立临时 npm 环境,执行严格 peer 安装、整棵官方依赖树版本检查、发布入口加载、真实 AgentLoop 执行和服务回归。四版均通过;服务回归中的持久化枚举使用内存夹具,覆盖新旧冷会话格式,不等同于真实 Profile 的磁盘迁移验收。脚本输出证据目录,保留各版安装锁文件、测试日志和 `results.json`。矩阵不修改开发依赖,也不连接用户 Profile。
194
+ `pnpm test:matrix` 先构建发布包,再联网为上述已声明版本分别建立临时 npm 环境,执行严格 peer 安装、整棵官方依赖树版本检查、发布入口加载、真实 AgentLoop 执行和服务回归。各声明版本均通过;服务回归中的持久化枚举使用内存夹具,覆盖新旧冷会话格式,不等同于真实 Profile 的磁盘迁移验收。脚本输出证据目录,保留各版安装锁文件、测试日志和 `results.json`。矩阵不修改开发依赖,也不连接用户 Profile。
195
195
 
196
196
  ## 许可证
197
197
 
package/lib/client.js CHANGED
@@ -4185,20 +4185,38 @@ function pickSettingsLauncher(buttons) {
4185
4185
  return named ?? (buttons.length === 1 ? buttons[0] : void 0);
4186
4186
  }
4187
4187
  var cancelPendingNavigation;
4188
+ var SETTINGS_CODEX_TRIGGER_SELECTOR = "[data-dcu-settings-trigger]";
4189
+ var SETTINGS_CODEX_PAGE_SELECTOR = "[data-dcu-settings-page]";
4190
+ var SETTINGS_OPEN_SECTION_EVENT = "dcu-settings-open-section";
4191
+ function requestCodexSettingsSection(labels) {
4192
+ const trigger = document.querySelector(SETTINGS_CODEX_TRIGGER_SELECTOR);
4193
+ if (trigger === null) return false;
4194
+ const request = new CustomEvent(SETTINGS_OPEN_SECTION_EVENT, {
4195
+ detail: { labels: [...labels] },
4196
+ cancelable: true
4197
+ });
4198
+ return !trigger.dispatchEvent(request);
4199
+ }
4188
4200
  function openSettingsSection(labels, onSelected, onMissing) {
4189
4201
  if (typeof document === "undefined" || typeof window === "undefined") {
4190
4202
  onMissing?.();
4191
4203
  return;
4192
4204
  }
4205
+ if (requestCodexSettingsSection(labels)) {
4206
+ onSelected?.();
4207
+ return;
4208
+ }
4193
4209
  const launchers = [...document.querySelectorAll('button[aria-haspopup="dialog"]')];
4194
4210
  const launcher = pickSettingsLauncher(launchers);
4211
+ const pageTrigger = document.querySelector(SETTINGS_CODEX_TRIGGER_SELECTOR);
4195
4212
  const dialogOpen = document.querySelector('[role="dialog"]') !== null;
4196
- if (!dialogOpen && launcher === void 0) {
4213
+ const pageOpen = document.querySelector(SETTINGS_CODEX_PAGE_SELECTOR) !== null;
4214
+ if (!dialogOpen && !pageOpen && launcher === void 0 && pageTrigger === null) {
4197
4215
  onMissing?.();
4198
4216
  return;
4199
4217
  }
4200
4218
  cancelPendingNavigation?.();
4201
- if (!dialogOpen) launcher?.click();
4219
+ if (!dialogOpen && !pageOpen) (pageTrigger ?? launcher)?.click();
4202
4220
  let frame;
4203
4221
  let finished = false;
4204
4222
  const observer = new MutationObserver(() => {
@@ -4213,7 +4231,10 @@ function openSettingsSection(labels, onSelected, onMissing) {
4213
4231
  if (cancelPendingNavigation === cleanup) cancelPendingNavigation = void 0;
4214
4232
  };
4215
4233
  const select = () => {
4216
- const buttons = [...document.querySelectorAll('[role="dialog"] nav button')];
4234
+ const buttons = [
4235
+ ...document.querySelectorAll('[role="dialog"] nav button'),
4236
+ ...document.querySelectorAll(`${SETTINGS_CODEX_PAGE_SELECTOR} nav button`)
4237
+ ];
4217
4238
  const target = pickSettingsSectionButton(buttons, labels);
4218
4239
  if (target === void 0) return false;
4219
4240
  cleanup();