dsh-foreman 0.0.0-stage → 0.1.0
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 +105 -0
- package/LICENSE +21 -0
- package/README.md +67 -2
- package/cordis.patch.yml +198 -0
- package/icon.svg +23 -0
- package/lib/client.js +8359 -0
- package/lib/feishu-Du3bga5l.js +1382 -0
- package/lib/feishu-watch.d.ts +125 -0
- package/lib/feishu-watch.js +2 -0
- package/lib/github-pull-DJ47SVHW.js +626 -0
- package/lib/github-watch.d.ts +2 -0
- package/lib/github-watch.js +935 -0
- package/lib/index.d.ts +371 -0
- package/lib/index.js +12445 -0
- package/lib/intake-Di3PgVj2.d.ts +777 -0
- package/lib/kind-DGutnJ2b.d.ts +1178 -0
- package/lib/local-watch.d.ts +119 -0
- package/lib/local-watch.js +281 -0
- package/lib/model-CL65zgAC.js +93 -0
- package/lib/poll-DyAjgCpF.js +1006 -0
- package/locale/en.json +6 -0
- package/locale/zh.json +6 -0
- package/package.json +149 -4
- package/prompts/admission.md +69 -0
- package/prompts/cli.md +17 -0
- package/prompts/dispatch.md +59 -0
- package/prompts/handoff-orchestrator.md +4 -0
- package/prompts/handoff-worker.md +7 -0
- package/prompts/handoff.md +6 -0
- package/prompts/orchestrator.md +24 -0
- package/prompts/replies.md +35 -0
- package/prompts/shared.md +7 -0
- package/prompts/subscriptions.md +13 -0
- package/prompts/team/communication.md +97 -0
- package/prompts/team/delivery.md +28 -0
- package/prompts/team/scope.md +22 -0
- package/prompts/work.md +49 -0
- package/prompts/worker.md +10 -0
- package/skills/dsh-foreman-feishu/SKILL.md +12 -0
- package/skills/dsh-foreman-github/SKILL.md +14 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
本仓库的历史从本项目自己的初始提交开始,**不携带上游 git 历史**(见 README 的「由来与致谢」)。
|
|
4
|
+
下面 `0.2.0` 一节是从代码基线 `dsh-superagent-local` 沿袭下来的、那一份代码相对上游
|
|
5
|
+
`dsh-superagent-prototype` 的改动记录,保留它是为了说明基线里已经有什么;**它不是本项目的发布版本**。
|
|
6
|
+
|
|
7
|
+
本项目自己的版本从 `0.1.0` 开始。
|
|
8
|
+
|
|
9
|
+
## 0.1.0 — 2026-11-07
|
|
10
|
+
|
|
11
|
+
首个公开发布。**一个常驻主 loop,把工单派给多台在线设备上各自完整运行的 DSH,账本只有一份。**
|
|
12
|
+
|
|
13
|
+
### 新增:设备与派单
|
|
14
|
+
|
|
15
|
+
- **设备注册表**(`src/foreman/devices.ts`):同一份 SQLite 里的 `foreman-device:` 家族,
|
|
16
|
+
令牌只存 SHA-256。加设备、换令牌、吊销都不需要重启主 loop。
|
|
17
|
+
CLI:`scripts/add-device.mjs add | list | rotate | revoke`。
|
|
18
|
+
- **Selector**(`src/foreman/selector.ts`):纯函数。吊销的、离线的、没有对应项目 root 的设备先出局;
|
|
19
|
+
显式点名或标签要求再收窄;剩下的按在跑数量最少,平局取最近心跳。
|
|
20
|
+
- **选择落在 accept 上**:`Ticket.target` 在 accept 时确定,`newAssignment` 复制到
|
|
21
|
+
`Assignment.target`。选设备在 `prepareTicket` 缝上,**不在** Executor 里——Executor 没有写库通道。
|
|
22
|
+
- **ForemanExecutor**(`src/foreman/executor.ts`):本机目标原样交给 `DshExecutor`;
|
|
23
|
+
远端目标变成一个 `assign` 帧。设备不可达时报 `blocked`,**不伪造 failed,也不悄悄改成本机执行**。
|
|
24
|
+
- **Foreman Hub**(`src/foreman/hub.ts` + `ws.ts`):设备主动外连,`ws` 只出现在一个文件里,
|
|
25
|
+
只监听 `127.0.0.1`(对外由隧道终结 TLS)。握手校验令牌与协议版本;吊销在下一帧就生效。
|
|
26
|
+
- **文本渲染**(`src/foreman/render.ts`):任务文本在主 loop 侧定稿,**不带任何主 loop 路径**;
|
|
27
|
+
附件走 base64 字节,按编码后大小卡 256 KiB 上限。
|
|
28
|
+
|
|
29
|
+
### 新增:断线与恢复
|
|
30
|
+
|
|
31
|
+
- **断线绝不自动重派**。`assignmentInterrupted` 会走 `Tickets.restart` 立刻重开一张,
|
|
32
|
+
而设备可能还在跑——那是「同一件事执行两遍」。超时只转 `blocked`,交给人。
|
|
33
|
+
- Hub 重启时,在飞的远端 assignment 一律先转 `blocked`,等设备 `hello` 对齐;
|
|
34
|
+
`DshExecutor.resume()` 按 target 跳过远端项。
|
|
35
|
+
- 设备重连后先 `hello` 报「我在跑哪些」,Hub 对齐而不是假设。
|
|
36
|
+
|
|
37
|
+
### 新增:设备侧插件(另一个包)
|
|
38
|
+
|
|
39
|
+
- [`dsh-foreman-node`](https://www.npmjs.com/package/dsh-foreman-node):连出去、接单、回报三件事。
|
|
40
|
+
job 会话是 `job-<assignmentId>`,权限是 **`workspace-write`**(不是主 loop 自己的 `danger-full-access`:
|
|
41
|
+
笔记本前没人,弹审批等于卡死)。
|
|
42
|
+
- 设备上注册 `foreman_report` 工具(`progress` / `ready` / `blocked` / `failed`)。
|
|
43
|
+
**`dropped` 不允许**:那是判断,设备没有判断权。
|
|
44
|
+
|
|
45
|
+
### 新增:面板
|
|
46
|
+
|
|
47
|
+
- 「设置 › 设备」:在线点、在跑数、最近活动、项目名(**不显示设备自己的路径**)、吊销与换令牌。
|
|
48
|
+
|
|
49
|
+
### 新增:飞书群即项目
|
|
50
|
+
|
|
51
|
+
- Policy 的 `routing.chats`:群 → 工作区,同时约束设备选择(内网群只选带 `intranet` 标签的设备)。
|
|
52
|
+
映射按 settings 修订号缓存,改了对新到的消息生效。
|
|
53
|
+
|
|
54
|
+
### 新增:迁移
|
|
55
|
+
|
|
56
|
+
- `scripts/migrate.mjs`:`plan` / `checkpoint` / `pack` / `verify`。
|
|
57
|
+
必须先 checkpoint——库跑在 WAL 模式,只拷 `.sqlite` 会**静默丢掉**最近的工单。
|
|
58
|
+
- [docs/migration.md](docs/migration.md) 五步 runbook。
|
|
59
|
+
|
|
60
|
+
### 依赖
|
|
61
|
+
|
|
62
|
+
- 唯一新增的运行时依赖是 `ws@8`。
|
|
63
|
+
- `@deepseek-ai/*` 全是 `peerDependencies`,由装了本插件的 DSH 实例提供。
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## 0.2.0 — 2026-11-01(上游基线,非本项目发布)
|
|
68
|
+
|
|
69
|
+
> 这一节记录的是代码基线 `dsh-superagent-local` 相对上游 `dsh-superagent-prototype` 的改动。
|
|
70
|
+
> 本项目的 `0.1.0` 已包含其中全部内容。
|
|
71
|
+
|
|
72
|
+
### 新增:需求来自本机操作者
|
|
73
|
+
|
|
74
|
+
- `src/sources/dsh.ts`,作为 `./local-watch` 导出,注册 Source kind `dsh`
|
|
75
|
+
(标题「本机操作者」)。主会话里由人手输入的消息(`message.source.kind === 'user'`)
|
|
76
|
+
变成 Trigger,主会话的回复回到同一条会话。
|
|
77
|
+
- 消息里带的图片和文件随需求一起走:Trigger 的 `meta.attachments` 记录附件 id,
|
|
78
|
+
Executor 在派给 Worker 的任务说明里附上 `~/.dsh/attachments/v1/objects/<前两位>/<id>`
|
|
79
|
+
路径,Worker 用 `read_image` 打开后再动手。
|
|
80
|
+
- 本地部署不再要求 GitHub 仓库:`resolveDeployment` 在没有远端时返回空 repository,
|
|
81
|
+
GitHub watcher 报 `paused` 而不是反复失败。
|
|
82
|
+
|
|
83
|
+
### 新增:每个工作区一条主会话
|
|
84
|
+
|
|
85
|
+
- `KV.runtime.masters` 记录 workspaceId 到 sessionId 的映射,重启后恢复。
|
|
86
|
+
- `GET /orchestrator/api/master?workspace=<id>` 按需创建并返回该工作区的主会话,
|
|
87
|
+
会话 id 由工作区路径确定性生成,cwd 就是该工作区目录。
|
|
88
|
+
- `Runtime.isMaster()` 让所有主会话都套 router preset、挂路由工具;主会话只有
|
|
89
|
+
路由类工具,没有 bash 和文件写入。
|
|
90
|
+
- 客户端在每个工作区组标题行注入 ★ 按钮(`data-main-session-entry`),点它打开
|
|
91
|
+
该工作区的主会话,并把主会话行从侧栏列表里隐藏。
|
|
92
|
+
|
|
93
|
+
### 修复:一次需求一张工单
|
|
94
|
+
|
|
95
|
+
- `meta.newTicket` 让本地来源的每条消息都开新工单,不再被同 thread 的运行中工单
|
|
96
|
+
吸收,也不会复活已结束的工单。修正前第二条需求会挂到第一张工单上、复用同一个
|
|
97
|
+
Worker 会话。
|
|
98
|
+
- 本地需求的 Worker 会话与主会话同组,产物落在该工作区目录,不再为每张工单建
|
|
99
|
+
`work/<工单名>` 工作区。
|
|
100
|
+
|
|
101
|
+
### 改进:结果回给发起它的主会话
|
|
102
|
+
|
|
103
|
+
- `relay` 与 `notice` 两个 effect 载荷带上 `sessionId`,工单结束通知回到创建它的
|
|
104
|
+
那条主会话,而不是固定回默认主会话。
|
|
105
|
+
- 工单卡片带 `workspace` 字段说明产物目录,提示词要求主会话去那里读文件。
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 DeepSeek Harness Team
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,3 +1,68 @@
|
|
|
1
|
-
#
|
|
1
|
+
# dsh-foreman
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
> **Not an official DeepSeek product.** 这是第三方项目,与 DeepSeek 官方无关。
|
|
4
|
+
|
|
5
|
+
**一句话:一个常驻的主 loop,把工单派给多台在线设备上各自完整运行的 DSH,账本只有一份。**
|
|
6
|
+
|
|
7
|
+
你在服务器上装 `dsh-foreman`,它拥有全部工单、策略和评估;你在每台个人机器上装
|
|
8
|
+
[`dsh-foreman-node`](https://github.com/niechao136/dsh-foreman-node),它只负责接单、在本地跑、
|
|
9
|
+
把结构化回报交回来。设备上不建工单、不评估、不持有策略、不打开数据库。
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
┌──────────── 服务器:dsh-foreman(唯一账本)────────────┐
|
|
13
|
+
│ Engine / SQLite / Policy / Tickets / Evals / 设备表 │
|
|
14
|
+
│ 每个项目一个主会话入口 ← 你在这里说话 │
|
|
15
|
+
│ Selector:accept 时决定这活交给哪台机器 │
|
|
16
|
+
│ Foreman Hub:设备主动连上来 │
|
|
17
|
+
└──────────────────────┬─────────────────────────────────┘
|
|
18
|
+
│ 设备外连(wss,稳定域名)
|
|
19
|
+
┌──────────────┼──────────────┐
|
|
20
|
+
▼ ▼ ▼
|
|
21
|
+
公司笔记本 宿舍电脑 服务器本机
|
|
22
|
+
dsh-foreman-node dsh-foreman-node 本地直跑,不走网络
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## 状态
|
|
26
|
+
|
|
27
|
+
**早期开发中。** 设备注册表、Selector、ForemanExecutor、Hub、回报规则、设备侧插件、文本渲染、
|
|
28
|
+
迁移脚本、面板设备页、飞书群路由都已落地,测试 1332 项。设计与实现计划见:
|
|
29
|
+
- [设计](docs/superpowers/specs/2026-11-06-dsh-foreman-design.md)
|
|
30
|
+
- [实现计划](docs/superpowers/plans/2026-11-06-dsh-foreman.md)
|
|
31
|
+
- [交接文档](HANDOFF.md)
|
|
32
|
+
|
|
33
|
+
部署两件事各有一份 runbook:[独立实例](docs/deploy-loop-instance.md) 与 [迁机](docs/migration.md)。
|
|
34
|
+
|
|
35
|
+
## 一眼看懂它怎么派人
|
|
36
|
+
|
|
37
|
+
accept 一张工单时,`prepareTicket` 这一步就选定了设备,写进 `Ticket.target`,再由 `newAssignment`
|
|
38
|
+
复制到 `Assignment.target`——**不是** Executor 选的(Executor 没有写库通道)。之后:
|
|
39
|
+
|
|
40
|
+
- `target.kind === 'local'`:原样交给本机的 `DshExecutor`,行为与没有设备时完全一样。
|
|
41
|
+
- 远端:变成一帧 `assign` 发给那台设备。设备不在线就报 `blocked`,**不伪造 failed,也不悄悄改成本机跑**。
|
|
42
|
+
|
|
43
|
+
断线**绝不自动重派**:设备可能还在跑,重派就是同一件事执行两遍。超时只转 `blocked`,交给人。
|
|
44
|
+
|
|
45
|
+
## 由来与致谢
|
|
46
|
+
|
|
47
|
+
本项目**不是**一个 git fork,但代码以
|
|
48
|
+
[dsh-superagent-local](https://github.com/mengzhongjie/dsh-superagent-local) 为起点,
|
|
49
|
+
而后者是 [dsh-superagent-prototype](https://github.com/deepseek-ai/dsh-superagent-prototype)
|
|
50
|
+
(DeepSeek Harness 团队)的改编版。三者的关系:
|
|
51
|
+
|
|
52
|
+
| 项目 | 作者 | 与本项目的关系 |
|
|
53
|
+
| --- | --- | --- |
|
|
54
|
+
| [dsh-superagent-prototype](https://github.com/deepseek-ai/dsh-superagent-prototype) | DeepSeek Harness Team | 原始研究原型;本项目的架构思想来源 |
|
|
55
|
+
| [dsh-superagent-local](https://github.com/mengzhongjie/dsh-superagent-local) | mengzhongjie | 上述原型的本地化改编;本项目代码基线 |
|
|
56
|
+
| **dsh-foreman** | niechao136 | 在多设备与迁移方向上的重写与扩展 |
|
|
57
|
+
|
|
58
|
+
原始代码以 MIT 许可发布,Copyright (c) 2026 DeepSeek Harness Team,[LICENSE](LICENSE) 予以保留。
|
|
59
|
+
本仓库的 git 历史从本项目自己的初始提交开始,不携带上游历史;**这不是假装原创,而是为了
|
|
60
|
+
避免把一份无法与上游对齐的三方历史混进来**。要核对上游改动,请直接比对上面两个仓库。
|
|
61
|
+
|
|
62
|
+
架构思想来自 DeepSeek Harness 团队的《Super-agent 设计探索:迈向更自主的 Agent 系统》。
|
|
63
|
+
本项目借用了其中已经落地的部分(双层架构、Trigger/Thread/Subscription、计算与执行环境分离),
|
|
64
|
+
并对该文第八节自己承认为未解的问题(尤其是 A2A 与安全)给出了自己的取舍,而不是声称解决。
|
|
65
|
+
|
|
66
|
+
## 许可
|
|
67
|
+
|
|
68
|
+
MIT,见 [LICENSE](LICENSE)。
|
package/cordis.patch.yml
ADDED
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
# dsh-foreman bundle layer: inserts the plugins without configuration, and the agent presets its Sessions run under. The
|
|
2
|
+
# profile supplies the `dsh-foreman` entry's stateDir (see docs/006-deployment.md and examples/profile.cordis.patch.yml); the plugin
|
|
3
|
+
# refuses to start without stateDir.
|
|
4
|
+
- insert:
|
|
5
|
+
- id: dsh-foreman
|
|
6
|
+
name: dsh-foreman
|
|
7
|
+
- id: dsh-foreman-github
|
|
8
|
+
name: dsh-foreman/github-watch
|
|
9
|
+
# 椋炰功 IM 鏉ユ簮锛氱兢娑堟伅涓庣鑱婅繘宸ュ崟銆傛病鏈夐厤缃満鍣ㄤ汉 CLI 鏃跺畠鑷繁鎶ャ€屾湭璁剧疆鏈哄櫒浜?CLI銆嶏紝
|
|
10
|
+
# 涓嶅奖鍝嶅埆鐨勬潵婧愶紝鎵€浠ラ粯璁ゅ紑鐫€锛岃浜鸿兘鐩存帴鍦ㄨ缃噷濉€?
|
|
11
|
+
- id: dsh-foreman-feishu
|
|
12
|
+
name: dsh-foreman/feishu-watch
|
|
13
|
+
# 鏈湴 Source锛氭妸鎿嶄綔鑰呭湪涓讳細璇濋噷璇寸殑璇濆綋浣滈渶姹傛潵婧愶紱涓€涓疄渚嬭鐩栨墍鏈夊伐浣滃尯銆?
|
|
14
|
+
- id: dsh-foreman-dsh
|
|
15
|
+
name: dsh-foreman/local-watch
|
|
16
|
+
# The agent preset of every Executor Session (WORKER_PRESET in src/app/sessions.ts); the main Session has its own, below.
|
|
17
|
+
# It is DSH's `standard` preset with only what a worker needs, and a shell whose foreground command moves to a background job
|
|
18
|
+
# after 5 seconds, so a long command does not hold back a person's message, which the Session takes at its next step. Left
|
|
19
|
+
# out: questions to a person, presenting, plan mode, the plugin manager and market, scheduling, goals, workflows, web fetch,
|
|
20
|
+
# and forked subagents, which would run under this preset; spawned subagents run under `standard`, whose shell moves a
|
|
21
|
+
# command to a background job only after 60 seconds, as a subagent's jobs are killed when it ends. A preset row has no
|
|
22
|
+
# setting that hides it from the preset picker, so its name and description say whom it is for.
|
|
23
|
+
- id: dsh-foreman-worker-preset
|
|
24
|
+
name: '@deepseek-ai/dsh-agent-preset'
|
|
25
|
+
config:
|
|
26
|
+
id: dsh-foreman-worker
|
|
27
|
+
name: dsh-foreman 鎵ц鍣?
|
|
28
|
+
description: dsh-foreman 鐨勬墽琛屽櫒 Session 涓撶敤锛屼笉渚涙墜鍔ㄩ€夋嫨銆傚墠鍙板懡浠よ秴 5 绉掕浆鍏ュ悗鍙帮紝鍙惈鎵ц宸ヤ綔鎵€闇€鐨勫伐鍏枫€?
|
|
29
|
+
order: 90
|
|
30
|
+
plugins:
|
|
31
|
+
- id: persona
|
|
32
|
+
name: '@deepseek-ai/dsh-persona'
|
|
33
|
+
config:
|
|
34
|
+
prefix: You are a coding agent powered by the {{model}} model.
|
|
35
|
+
- id: agent-instructions
|
|
36
|
+
name: '@deepseek-ai/dsh-agent-instructions'
|
|
37
|
+
config:
|
|
38
|
+
maxBytes: 65536
|
|
39
|
+
- id: time-context
|
|
40
|
+
name: '@deepseek-ai/dsh-time-context'
|
|
41
|
+
# A foreground command waits at most 5 s, then the shell tool moves it to a background job.
|
|
42
|
+
- id: shell
|
|
43
|
+
name: cordis:group
|
|
44
|
+
group: true
|
|
45
|
+
isolate:
|
|
46
|
+
shell: true
|
|
47
|
+
config:
|
|
48
|
+
- id: bash-sandbox
|
|
49
|
+
name: '@deepseek-ai/dsh-bash-sandbox'
|
|
50
|
+
disabled: !!js process.platform === 'win32'
|
|
51
|
+
config:
|
|
52
|
+
timeoutMs: 5000
|
|
53
|
+
maxTimeoutMs: 5000
|
|
54
|
+
- id: pwsh-sandbox
|
|
55
|
+
name: '@deepseek-ai/dsh-pwsh-sandbox'
|
|
56
|
+
disabled: !!js process.platform !== 'win32'
|
|
57
|
+
config:
|
|
58
|
+
timeoutMs: 5000
|
|
59
|
+
maxTimeoutMs: 5000
|
|
60
|
+
- id: tool-bash
|
|
61
|
+
name: '@deepseek-ai/dsh-tool-bash'
|
|
62
|
+
disabled: !!js process.platform === 'win32'
|
|
63
|
+
- id: tool-pwsh
|
|
64
|
+
name: '@deepseek-ai/dsh-tool-pwsh'
|
|
65
|
+
disabled: !!js process.platform !== 'win32'
|
|
66
|
+
- id: tool-fs
|
|
67
|
+
name: '@deepseek-ai/dsh-tool-fs'
|
|
68
|
+
- id: tool-fs-search
|
|
69
|
+
name: '@deepseek-ai/dsh-tool-fs-search'
|
|
70
|
+
config:
|
|
71
|
+
sampleOverCapGlobResults: false
|
|
72
|
+
# A wait for a job ends after 5 s too; the job's end wakes the worker with its result.
|
|
73
|
+
- id: tool-jobs
|
|
74
|
+
name: '@deepseek-ai/dsh-tool-jobs'
|
|
75
|
+
config:
|
|
76
|
+
waitTimeoutMs: 5000
|
|
77
|
+
maxWaitTimeoutMs: 5000
|
|
78
|
+
- id: skill-filesystem
|
|
79
|
+
name: '@deepseek-ai/dsh-skill-filesystem'
|
|
80
|
+
- id: tool-skill
|
|
81
|
+
name: '@deepseek-ai/dsh-tool-skill'
|
|
82
|
+
- id: compaction
|
|
83
|
+
name: cordis:group
|
|
84
|
+
group: true
|
|
85
|
+
isolate:
|
|
86
|
+
compaction: true
|
|
87
|
+
toolResultPruner: true
|
|
88
|
+
config:
|
|
89
|
+
- id: compaction-basic
|
|
90
|
+
name: '@deepseek-ai/dsh-compaction-basic'
|
|
91
|
+
- id: command-compact
|
|
92
|
+
name: '@deepseek-ai/dsh-command-compact'
|
|
93
|
+
- id: tool-result-pruner
|
|
94
|
+
name: '@deepseek-ai/dsh-compaction-tool-result-pruner'
|
|
95
|
+
config:
|
|
96
|
+
thresholdChars: 8192
|
|
97
|
+
headChars: 4096
|
|
98
|
+
tailChars: 1024
|
|
99
|
+
- id: delegation
|
|
100
|
+
name: cordis:group
|
|
101
|
+
group: true
|
|
102
|
+
isolate:
|
|
103
|
+
workflowEngine: true
|
|
104
|
+
config:
|
|
105
|
+
- id: tool-subagent-control
|
|
106
|
+
name: '@deepseek-ai/dsh-tool-subagent-control'
|
|
107
|
+
- id: tool-subagent
|
|
108
|
+
name: '@deepseek-ai/dsh-tool-subagent'
|
|
109
|
+
config:
|
|
110
|
+
provider: spawn
|
|
111
|
+
toolName: subagent
|
|
112
|
+
modelSelection: true
|
|
113
|
+
modelDiscovery: true
|
|
114
|
+
agentPreset: standard
|
|
115
|
+
- id: tool-todo
|
|
116
|
+
name: '@deepseek-ai/dsh-tool-todo'
|
|
117
|
+
config:
|
|
118
|
+
allowParallelInProgress: true
|
|
119
|
+
- id: tool-web
|
|
120
|
+
name: '@deepseek-ai/dsh-tool-web'
|
|
121
|
+
config:
|
|
122
|
+
fetch: false
|
|
123
|
+
searchTimeoutMs: 60000
|
|
124
|
+
# The agent preset of the main Session (ROUTER_PRESET in src/app/sessions.ts). The worker's 5-second shell and job waits, so a command or a wait does not hold back the next candidates, and
|
|
125
|
+
# only what the main Session uses: no subagents, web, file search or writes, todo list, questions to a person, presenting,
|
|
126
|
+
# plan mode, plugin manager, scheduling, goals or workflows. No persona: the main Session's prompt is complete, so it has
|
|
127
|
+
# no other section.
|
|
128
|
+
- id: dsh-foreman-router-preset
|
|
129
|
+
name: '@deepseek-ai/dsh-agent-preset'
|
|
130
|
+
config:
|
|
131
|
+
id: dsh-foreman-router
|
|
132
|
+
name: dsh-foreman 涓?Session
|
|
133
|
+
description: dsh-foreman 鐨勪富 Session 涓撶敤锛屼笉渚涙墜鍔ㄩ€夋嫨銆傚墠鍙板懡浠ゅ拰浠诲姟绛夊緟瓒?5 绉掕浆鍏ュ悗鍙帮紝鍙惈璺敱鎵€闇€鐨勫伐鍏枫€?
|
|
134
|
+
order: 91
|
|
135
|
+
plugins:
|
|
136
|
+
- id: agent-instructions
|
|
137
|
+
name: '@deepseek-ai/dsh-agent-instructions'
|
|
138
|
+
config:
|
|
139
|
+
maxBytes: 65536
|
|
140
|
+
- id: time-context
|
|
141
|
+
name: '@deepseek-ai/dsh-time-context'
|
|
142
|
+
- id: shell
|
|
143
|
+
name: cordis:group
|
|
144
|
+
group: true
|
|
145
|
+
isolate:
|
|
146
|
+
shell: true
|
|
147
|
+
config:
|
|
148
|
+
- id: bash-sandbox
|
|
149
|
+
name: '@deepseek-ai/dsh-bash-sandbox'
|
|
150
|
+
disabled: !!js process.platform === 'win32'
|
|
151
|
+
config:
|
|
152
|
+
timeoutMs: 5000
|
|
153
|
+
maxTimeoutMs: 5000
|
|
154
|
+
- id: pwsh-sandbox
|
|
155
|
+
name: '@deepseek-ai/dsh-pwsh-sandbox'
|
|
156
|
+
disabled: !!js process.platform !== 'win32'
|
|
157
|
+
config:
|
|
158
|
+
timeoutMs: 5000
|
|
159
|
+
maxTimeoutMs: 5000
|
|
160
|
+
# The main Session routes; it must not carry work out itself. Without a shell tool it
|
|
161
|
+
# cannot write files (fs writes are already off), so a request can only become a ticket.
|
|
162
|
+
- id: tool-bash
|
|
163
|
+
name: '@deepseek-ai/dsh-tool-bash'
|
|
164
|
+
disabled: true
|
|
165
|
+
- id: tool-pwsh
|
|
166
|
+
name: '@deepseek-ai/dsh-tool-pwsh'
|
|
167
|
+
disabled: true
|
|
168
|
+
- id: tool-fs
|
|
169
|
+
name: '@deepseek-ai/dsh-tool-fs'
|
|
170
|
+
config:
|
|
171
|
+
write: false
|
|
172
|
+
edit: false
|
|
173
|
+
- id: tool-jobs
|
|
174
|
+
name: '@deepseek-ai/dsh-tool-jobs'
|
|
175
|
+
config:
|
|
176
|
+
waitTimeoutMs: 5000
|
|
177
|
+
maxWaitTimeoutMs: 5000
|
|
178
|
+
- id: skill-filesystem
|
|
179
|
+
name: '@deepseek-ai/dsh-skill-filesystem'
|
|
180
|
+
- id: tool-skill
|
|
181
|
+
name: '@deepseek-ai/dsh-tool-skill'
|
|
182
|
+
- id: compaction
|
|
183
|
+
name: cordis:group
|
|
184
|
+
group: true
|
|
185
|
+
isolate:
|
|
186
|
+
compaction: true
|
|
187
|
+
toolResultPruner: true
|
|
188
|
+
config:
|
|
189
|
+
- id: compaction-basic
|
|
190
|
+
name: '@deepseek-ai/dsh-compaction-basic'
|
|
191
|
+
- id: command-compact
|
|
192
|
+
name: '@deepseek-ai/dsh-command-compact'
|
|
193
|
+
- id: tool-result-pruner
|
|
194
|
+
name: '@deepseek-ai/dsh-compaction-tool-result-pruner'
|
|
195
|
+
config:
|
|
196
|
+
thresholdChars: 8192
|
|
197
|
+
headChars: 4096
|
|
198
|
+
tailChars: 1024
|
package/icon.svg
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 96 96" role="img" aria-label="dsh-foreman">
|
|
2
|
+
<defs>
|
|
3
|
+
<linearGradient id="bg" x1="10" y1="6" x2="86" y2="90" gradientUnits="userSpaceOnUse">
|
|
4
|
+
<stop offset="0" stop-color="#5B7CFA"/>
|
|
5
|
+
<stop offset="1" stop-color="#8B5CF6"/>
|
|
6
|
+
</linearGradient>
|
|
7
|
+
</defs>
|
|
8
|
+
<!-- 底:圆角方块 + 渐变,和其他插件图标同尺寸、同圆角 -->
|
|
9
|
+
<rect width="96" height="96" rx="24" fill="url(#bg)"/>
|
|
10
|
+
<!-- 路由线:主会话把活儿分给三条支线 -->
|
|
11
|
+
<g stroke="#fff" stroke-opacity="0.7" stroke-width="4" stroke-linecap="round">
|
|
12
|
+
<path d="M48 58 L48 72"/>
|
|
13
|
+
<path d="M38 40 L24 30"/>
|
|
14
|
+
<path d="M58 40 L72 30"/>
|
|
15
|
+
</g>
|
|
16
|
+
<!-- 主会话:中心节点(中间留出品牌色小孔) -->
|
|
17
|
+
<circle cx="48" cy="44" r="12" fill="#fff" fill-opacity="0.96"/>
|
|
18
|
+
<circle cx="48" cy="44" r="4.5" fill="#6B6BFA"/>
|
|
19
|
+
<!-- 三个工作区节点 -->
|
|
20
|
+
<circle cx="48" cy="78" r="7" fill="#fff" fill-opacity="0.96"/>
|
|
21
|
+
<circle cx="20" cy="27" r="7" fill="#fff" fill-opacity="0.96"/>
|
|
22
|
+
<circle cx="76" cy="27" r="7" fill="#fff" fill-opacity="0.96"/>
|
|
23
|
+
</svg>
|