@michengai/dsh-automation 0.1.40 → 0.1.41
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 +4 -0
- package/CHANGELOG.zh-CN.md +4 -0
- package/README.md +8 -5
- package/README.zh-CN.md +10 -5
- package/lib/client.js +39 -11
- package/lib/client.js.map +2 -2
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,10 @@
|
|
|
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.41 - 2026-09-14
|
|
8
|
+
|
|
9
|
+
- Fix Scheduled and execution-history navigation disappearing when used with the archive and IM plugins.
|
|
10
|
+
|
|
7
11
|
## 0.1.40 - 2026-09-12
|
|
8
12
|
|
|
9
13
|
- Configure concurrency per automation to allow overlapping executions of the same task. The default is `1`, preserving existing task behavior. When full, scheduled triggers are skipped and manual starts are rejected; lowering the limit does not cancel existing runs.
|
package/CHANGELOG.zh-CN.md
CHANGED
package/README.md
CHANGED
|
@@ -55,18 +55,21 @@ Run history stays in Settings and can be filtered by day, week, month, task, or
|
|
|
55
55
|
|
|
56
56
|
## DSH product ecosystem
|
|
57
57
|
|
|
58
|
-
For a
|
|
58
|
+
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.
|
|
59
59
|
|
|
60
60
|
| Plugin | What you can do |
|
|
61
61
|
| --- | --- |
|
|
62
62
|
| [Codex UI](https://github.com/MichengAI/dsh-codex-ui) | Organize projects and conversations, search tasks, and navigate chat turns |
|
|
63
|
-
| [
|
|
64
|
-
| [Automation](https://github.com/MichengAI/dsh-automation) | Schedule tasks and review each run |
|
|
63
|
+
| [Agency Agents](https://github.com/MichengAI/dsh-agency-agents) | Choose and summon specialists for your task |
|
|
65
64
|
| [Skills Manager](https://github.com/MichengAI/dsh-skills-manager) | Find, enable, create, and import local skills |
|
|
66
65
|
| [Archive Manager](https://github.com/MichengAI/dsh-archive-manager) | Search, restore, or clean up archived conversations |
|
|
67
|
-
| [
|
|
66
|
+
| [IM Connect](https://github.com/MichengAI/dsh-im-connect) | Send tasks and receive replies through messaging platforms |
|
|
67
|
+
| [Automation](https://github.com/MichengAI/dsh-automation) | Schedule tasks and review each run |
|
|
68
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
|
|
69
|
+
| [Simplify](https://github.com/MichengAI/dsh-simplify) | Use `/simplify` to improve code within your Git changes |
|
|
70
|
+
| [PUA](https://github.com/MichengAI/dsh-pua) | Guide the Agent to try new approaches after failures, investigate causes, and verify results before completion |
|
|
71
|
+
| [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 |
|
|
72
|
+
| [Codex Pet](https://github.com/MichengAI/dsh-codex-pet) | View conversation notifications and respond to tool approvals and questions through a desktop pet |
|
|
70
73
|
|
|
71
74
|
## Prerequisites
|
|
72
75
|
|
package/README.zh-CN.md
CHANGED
|
@@ -55,18 +55,21 @@
|
|
|
55
55
|
|
|
56
56
|
## DSH 产品生态
|
|
57
57
|
|
|
58
|
-
|
|
58
|
+
想使用桌面工作台,可下载 [DSH Codex Desktop](https://github.com/MichengAI/dsh-codex-desktop/releases);已有 [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) 环境,可按各项目 README 按需安装。以下列出 11 个自研插件;桌面端实际随附范围以对应版本的发行说明和内置清单为准。
|
|
59
59
|
|
|
60
60
|
| 插件 | 你可以用它做什么 |
|
|
61
61
|
| --- | --- |
|
|
62
62
|
| [Codex UI](https://github.com/MichengAI/dsh-codex-ui) | 整理项目与会话、搜索任务、跳转对话轮次 |
|
|
63
|
-
| [
|
|
64
|
-
| [Automation](https://github.com/MichengAI/dsh-automation) | 按计划执行任务,查看每次运行的结果 |
|
|
63
|
+
| [Agency Agents](https://github.com/MichengAI/dsh-agency-agents) | 按任务选择并召唤专业角色 |
|
|
65
64
|
| [Skills Manager](https://github.com/MichengAI/dsh-skills-manager) | 统一查找、启停、创建和导入本机技能 |
|
|
66
65
|
| [Archive Manager](https://github.com/MichengAI/dsh-archive-manager) | 搜索、恢复或清理已归档会话 |
|
|
67
|
-
| [
|
|
66
|
+
| [IM Connect](https://github.com/MichengAI/dsh-im-connect) | 从消息平台下任务、收回复 |
|
|
67
|
+
| [Automation](https://github.com/MichengAI/dsh-automation) | 按计划执行任务,查看每次运行的结果 |
|
|
68
68
|
| [BTW](https://github.com/MichengAI/dsh-btw) | 在当前上下文中临时旁问,不打断主任务 |
|
|
69
|
-
| [Simplify](https://github.com/MichengAI/dsh-simplify) | 用
|
|
69
|
+
| [Simplify](https://github.com/MichengAI/dsh-simplify) | 用 `/simplify` 整理 Git 改动范围内的代码 |
|
|
70
|
+
| [PUA](https://github.com/MichengAI/dsh-pua) | 引导 Agent 在失败时换方法、查原因,并在完成前验证结果 |
|
|
71
|
+
| [Code Review](https://github.com/MichengAI/dsh-code-review) | 用 `/review` 发起独立 Agent 代码审查,在当前会话接收报告 |
|
|
72
|
+
| [Codex Pet](https://github.com/MichengAI/dsh-codex-pet) | 通过桌面宠物查看会话提醒、处理工具审批和问题回答 |
|
|
70
73
|
|
|
71
74
|
## 前置条件
|
|
72
75
|
|
|
@@ -186,6 +189,8 @@ pnpm build
|
|
|
186
189
|
|
|
187
190
|
`pnpm check` 会连续执行类型检查、单元测试、真实宿主兼容测试和构建。`pnpm test:host` 不加载宿主运行时桩,使用官方 AgentLoop、Session V3 和权限服务,模型响应由本地固定适配器提供,不调用外部模型。浏览器交互和真实模型调用需另行验收。
|
|
188
191
|
|
|
192
|
+
跨插件侧栏回归可运行 `node --import tsx scripts/verify-sidebar-composition.mjs <dsh-im-connect 检出目录>`。它执行两仓库的接入逻辑和页签注册表,覆盖归档、IM、定时及 Codex UI 的注册顺序、延迟通知与卸载接管;插槽和计时器使用模拟环境,不替代 Desktop 渲染验收,也不安装插件。
|
|
193
|
+
|
|
189
194
|
`pnpm test:matrix` 先构建发布包,再联网为上述四个版本分别建立临时 npm 环境,执行严格 peer 安装、整棵官方依赖树版本检查、发布入口加载、真实 AgentLoop 执行和服务回归。四版均通过;服务回归中的持久化枚举使用内存夹具,覆盖新旧冷会话格式,不等同于真实 Profile 的磁盘迁移验收。脚本输出证据目录,保留各版安装锁文件、测试日志和 `results.json`。矩阵不修改开发依赖,也不连接用户 Profile。
|
|
190
195
|
|
|
191
196
|
## 许可证
|
package/lib/client.js
CHANGED
|
@@ -4648,10 +4648,16 @@ function apply(ctx) {
|
|
|
4648
4648
|
ctx.slots.inject("sidebar.workspaces", () => {
|
|
4649
4649
|
let wrappedEntry;
|
|
4650
4650
|
let originalComp;
|
|
4651
|
+
let ownedWrapper;
|
|
4652
|
+
let ownedRegistry;
|
|
4653
|
+
let insertedRegistry;
|
|
4651
4654
|
let removeInsertedTab = () => void 0;
|
|
4652
4655
|
let wrapped = false;
|
|
4653
4656
|
let syncing = false;
|
|
4654
4657
|
let retryTimer;
|
|
4658
|
+
const notifyPeers = () => {
|
|
4659
|
+
queueMicrotask(() => window.dispatchEvent(new Event("dsh-native-sidebar-change")));
|
|
4660
|
+
};
|
|
4655
4661
|
const listenChannels = (listener) => ctx.slots.subscribe?.("sidebar.channels", listener) ?? (() => void 0);
|
|
4656
4662
|
const stopRetry = () => {
|
|
4657
4663
|
if (retryTimer !== void 0) {
|
|
@@ -4663,19 +4669,27 @@ function apply(ctx) {
|
|
|
4663
4669
|
stopRetry();
|
|
4664
4670
|
removeInsertedTab();
|
|
4665
4671
|
removeInsertedTab = () => void 0;
|
|
4666
|
-
|
|
4667
|
-
|
|
4668
|
-
|
|
4669
|
-
|
|
4670
|
-
|
|
4672
|
+
insertedRegistry = void 0;
|
|
4673
|
+
if (wrappedEntry !== void 0) {
|
|
4674
|
+
if (originalComp !== void 0 && wrappedEntry.component === ownedWrapper) wrappedEntry.component = originalComp;
|
|
4675
|
+
const record = wrappedEntry;
|
|
4676
|
+
if (record.__dshNativeTabs === ownedRegistry) delete record.__dshNativeTabs;
|
|
4677
|
+
notifyPeers();
|
|
4671
4678
|
}
|
|
4672
4679
|
wrappedEntry = void 0;
|
|
4673
4680
|
originalComp = void 0;
|
|
4681
|
+
ownedWrapper = void 0;
|
|
4682
|
+
ownedRegistry = void 0;
|
|
4674
4683
|
wrapped = false;
|
|
4675
4684
|
};
|
|
4676
4685
|
const insertScheduleTab = (entry, openSession) => {
|
|
4677
4686
|
const registry = findNativeTabRegistry(entry);
|
|
4678
4687
|
if (registry === void 0) return false;
|
|
4688
|
+
if (insertedRegistry !== registry) {
|
|
4689
|
+
removeInsertedTab();
|
|
4690
|
+
removeInsertedTab = () => void 0;
|
|
4691
|
+
insertedRegistry = registry;
|
|
4692
|
+
}
|
|
4679
4693
|
if (registry.getTabs().some((item) => item.id === "schedule")) return true;
|
|
4680
4694
|
removeInsertedTab = registry.insert({
|
|
4681
4695
|
id: "schedule",
|
|
@@ -4707,7 +4721,7 @@ function apply(ctx) {
|
|
|
4707
4721
|
const record = entry;
|
|
4708
4722
|
if (insertScheduleTab(entry) || insertScheduleTab(record.component)) return true;
|
|
4709
4723
|
}
|
|
4710
|
-
return
|
|
4724
|
+
return false;
|
|
4711
4725
|
};
|
|
4712
4726
|
const ensureScheduleTab = () => {
|
|
4713
4727
|
if (insertIntoKnownHosts()) {
|
|
@@ -4740,7 +4754,7 @@ function apply(ctx) {
|
|
|
4740
4754
|
...innerProps.useSessions === void 0 ? {} : { useSessions: innerProps.useSessions },
|
|
4741
4755
|
...innerProps.useWorkspaces === void 0 ? {} : { useWorkspaces: innerProps.useWorkspaces },
|
|
4742
4756
|
...innerProps.renderSlot === void 0 ? {} : { renderSlot: innerProps.renderSlot },
|
|
4743
|
-
|
|
4757
|
+
officialTree: tree
|
|
4744
4758
|
});
|
|
4745
4759
|
};
|
|
4746
4760
|
var AutomationNativeWorkspaceShell = AutomationNativeWorkspaceShell2;
|
|
@@ -4749,13 +4763,19 @@ function apply(ctx) {
|
|
|
4749
4763
|
return;
|
|
4750
4764
|
}
|
|
4751
4765
|
const entries = readSlotEntries(ctx, "sidebar.workspaces");
|
|
4752
|
-
const
|
|
4753
|
-
|
|
4754
|
-
if (
|
|
4766
|
+
const active = entries.find((entry) => entry?.component !== void 0);
|
|
4767
|
+
if (wrappedEntry !== void 0 && (active !== wrappedEntry || active.component !== ownedWrapper)) unwrap();
|
|
4768
|
+
if (active === wrappedEntry && active?.component === ownedWrapper && ownedWrapper !== void 0) {
|
|
4755
4769
|
ensureScheduleTab();
|
|
4756
4770
|
return;
|
|
4757
4771
|
}
|
|
4758
|
-
if (
|
|
4772
|
+
if (active === void 0) {
|
|
4773
|
+
unwrap();
|
|
4774
|
+
return;
|
|
4775
|
+
}
|
|
4776
|
+
const occupant = pickWrappableWorkspacesEntry(entries);
|
|
4777
|
+
const current = occupant?.component;
|
|
4778
|
+
if (current !== void 0 && isForeignSidebarHost(current)) {
|
|
4759
4779
|
ensureScheduleTab();
|
|
4760
4780
|
return;
|
|
4761
4781
|
}
|
|
@@ -4764,17 +4784,21 @@ function apply(ctx) {
|
|
|
4764
4784
|
if (resolved === void 0) return;
|
|
4765
4785
|
originalComp = resolved;
|
|
4766
4786
|
const registry = createNativeTabRegistry(originalComp);
|
|
4787
|
+
ownedRegistry = registry;
|
|
4767
4788
|
attachNativeTabRegistry(occupant, registry);
|
|
4768
4789
|
const marked = AutomationNativeWorkspaceShell2;
|
|
4769
4790
|
marked.displayName = "AutomationNativeWorkspaceShell";
|
|
4770
4791
|
marked.__dshNativeTabHost = true;
|
|
4771
4792
|
marked.__dshAutomationWrapped = true;
|
|
4772
4793
|
marked.__dshAutomationOriginal = originalComp;
|
|
4794
|
+
const tree = originalComp;
|
|
4773
4795
|
attachNativeTabRegistry(marked, registry);
|
|
4774
4796
|
occupant.component = marked;
|
|
4797
|
+
ownedWrapper = marked;
|
|
4775
4798
|
wrappedEntry = occupant;
|
|
4776
4799
|
wrapped = true;
|
|
4777
4800
|
ensureScheduleTab();
|
|
4801
|
+
notifyPeers();
|
|
4778
4802
|
} catch (error) {
|
|
4779
4803
|
console.warn("[dsh-automation] \u5305\u88F9\u5B98\u65B9\u4EFB\u52A1\u6811\u5931\u8D25", error);
|
|
4780
4804
|
} finally {
|
|
@@ -4783,9 +4807,13 @@ function apply(ctx) {
|
|
|
4783
4807
|
};
|
|
4784
4808
|
sync();
|
|
4785
4809
|
const unsub = typeof ctx.slots.subscribe === "function" ? ctx.slots.subscribe("sidebar.workspaces", sync) : () => void 0;
|
|
4810
|
+
const unsubSidebar = ctx.slots.subscribe?.("sidebar", sync) ?? (() => void 0);
|
|
4811
|
+
window.addEventListener("dsh-native-sidebar-change", sync);
|
|
4786
4812
|
ensureScheduleTab();
|
|
4787
4813
|
return () => {
|
|
4788
4814
|
unsub();
|
|
4815
|
+
unsubSidebar();
|
|
4816
|
+
window.removeEventListener("dsh-native-sidebar-change", sync);
|
|
4789
4817
|
unwrap();
|
|
4790
4818
|
};
|
|
4791
4819
|
});
|