@tt-a1i/hive 0.6.0-alpha.5 → 0.6.0-alpha.8
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 +54 -0
- package/LICENSE +7 -1
- package/LICENSE.BSL +101 -0
- package/README.en.md +275 -0
- package/README.md +104 -152
- package/dist/src/server/agent-launch-cache.js +2 -2
- package/dist/src/server/agent-launch-cache.js.map +1 -1
- package/dist/src/server/agent-launch-resolver.d.ts +4 -0
- package/dist/src/server/agent-launch-resolver.js +33 -0
- package/dist/src/server/agent-launch-resolver.js.map +1 -0
- package/dist/src/server/hive-team-guidance.js +1 -0
- package/dist/src/server/hive-team-guidance.js.map +1 -1
- package/dist/src/server/orchestrator-autostart.js +12 -2
- package/dist/src/server/orchestrator-autostart.js.map +1 -1
- package/dist/src/server/orchestrator-launch.js +2 -27
- package/dist/src/server/orchestrator-launch.js.map +1 -1
- package/dist/src/server/recovery-summary.js +1 -1
- package/dist/src/server/recovery-summary.js.map +1 -1
- package/dist/src/server/route-types.d.ts +2 -0
- package/dist/src/server/routes-workspaces.js +26 -18
- package/dist/src/server/routes-workspaces.js.map +1 -1
- package/dist/src/server/team-list-enrichment.d.ts +22 -0
- package/dist/src/server/team-list-enrichment.js +41 -0
- package/dist/src/server/team-list-enrichment.js.map +1 -0
- package/dist/src/server/team-list-serializer.d.ts +1 -1
- package/dist/src/server/team-list-serializer.js +2 -1
- package/dist/src/server/team-list-serializer.js.map +1 -1
- package/dist/src/shared/types.d.ts +9 -0
- package/package.json +5 -4
- package/web/dist/assets/index-B8F00qo4.css +1 -0
- package/web/dist/assets/index-DFE1Ia4e.js +80 -0
- package/web/dist/cli-icons/claude.png +0 -0
- package/web/dist/cli-icons/codex.png +0 -0
- package/web/dist/cli-icons/gemini.png +0 -0
- package/web/dist/cli-icons/opencode.svg +18 -0
- package/web/dist/index.html +2 -2
- package/README.zh-CN.md +0 -215
- package/web/dist/assets/index-CMHbdGhT.css +0 -1
- package/web/dist/assets/index-CkY03NZW.js +0 -76
package/README.md
CHANGED
|
@@ -1,233 +1,186 @@
|
|
|
1
1
|
# Hive
|
|
2
2
|
|
|
3
3
|
<p align="center">
|
|
4
|
-
<img src="./assets/hive-hero.png" alt="Hive
|
|
4
|
+
<img src="./assets/hive-hero.png" alt="Hive 本机多 agent 协作工作台" />
|
|
5
5
|
</p>
|
|
6
6
|
|
|
7
|
-
**Hive
|
|
8
|
-
is a real `claude` / `codex` / `opencode` / `gemini` process — not you, and
|
|
9
|
-
not a script — and so are the workers it dispatches to. Every agent runs as
|
|
10
|
-
a real PTY on your machine, talks through a small `team` protocol that Hive
|
|
11
|
-
injects into each agent's shell, and shares a markdown task graph at
|
|
12
|
-
`<workspace>/.hive/tasks.md`.
|
|
7
|
+
**Hive 是面向 CLI Coding Agent 的浏览器版蜂巢(hive-mind)。** Orchestrator 本身就是一个真实的 `claude` / `codex` / `opencode` / `gemini` 进程——不是你、也不是脚本——它派单的 Worker 同样是真 CLI agent。所有 agent 都是你电脑上真实的 PTY 进程,通过 Hive 注入到 shell 里的小型 `team` 协议互相通信,共享 `<workspace>/.hive/tasks.md` 这份 markdown 任务图。
|
|
13
8
|
|
|
14
9
|
[](https://www.npmjs.com/package/@tt-a1i/hive)
|
|
15
10
|
[](https://github.com/tt-a1i/hive/actions/workflows/release.yml)
|
|
11
|
+
[](https://hive-site.pages.dev)
|
|
16
12
|
[](https://nodejs.org/)
|
|
17
|
-
[-lightgrey.svg)](
|
|
13
|
+
[](./LICENSE.BSL)
|
|
14
|
+
[-lightgrey.svg)](#平台支持)
|
|
19
15
|
|
|
20
|
-
|
|
16
|
+
🌐 **官网**:[hive-site.pages.dev](https://hive-site.pages.dev/)([English](https://hive-site.pages.dev/en/))
|
|
21
17
|
|
|
22
|
-
|
|
23
|
-
> for developers who already use CLI coding agents. The latest published
|
|
24
|
-
> version is on [npm](https://www.npmjs.com/package/@tt-a1i/hive) and the
|
|
25
|
-
> badge above resolves to it.
|
|
18
|
+
[English](./README.en.md) · 简体中文
|
|
26
19
|
|
|
27
|
-
|
|
20
|
+
> Public preview。Hive 是本机优先的工具,只监听 `127.0.0.1`,面向已经在用 CLI Coding Agent 的开发者。最新发布版本见 [npm](https://www.npmjs.com/package/@tt-a1i/hive),上面的 badge 会指向它。
|
|
28
21
|
|
|
29
|
-
|
|
30
|
-
awkward:
|
|
22
|
+
## 为什么需要 Hive
|
|
31
23
|
|
|
32
|
-
|
|
33
|
-
- It is hard to split a task into implementation, review, and testing without a
|
|
34
|
-
routing layer.
|
|
35
|
-
- Worker progress disappears into scrollback.
|
|
36
|
-
- Restart recovery depends on each CLI's native session behavior.
|
|
24
|
+
CLI Coding Agent 各自都很强,但同时管几个就有点别扭:
|
|
37
25
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
26
|
+
- 长任务的会话散在好几个终端里,注意力来回切。
|
|
27
|
+
- 想把"实现 / review / 测试"分给三个 agent,却没有一层把它们路由起来。
|
|
28
|
+
- Worker 的进度淹在 scrollback 里,回头看找不到。
|
|
29
|
+
- 想重启接着干,全看每个 CLI 自己的 session 恢复行为,散乱不可控。
|
|
41
30
|
|
|
42
|
-
|
|
31
|
+
Hive 加上这一层调度,**不替换**任何 CLI。Agent 还是真实跑在你电脑上的终端进程,Hive 只是它们外面的"团队 shell"。
|
|
43
32
|
|
|
44
|
-
|
|
45
|
-
click **Try Demo** in the first-run wizard. You get a fully client-side
|
|
46
|
-
preview — fake orchestrator + two workers, prerecorded scrollback, a
|
|
47
|
-
prefilled task list — without touching the server or any real CLI agent.
|
|
48
|
-
Useful for deciding whether to install a real CLI.
|
|
33
|
+
## 先看看 demo
|
|
49
34
|
|
|
50
|
-
|
|
35
|
+
还没装任何 agent CLI?运行 `hive`、打开它打印出的本地地址、在 first-run 向导里点 **Try Demo**。你会看到一个完全跑在客户端的预览——假 orchestrator + 两个 worker、预录的终端 scrollback、一份预填的任务清单——既不会连服务器,也不需要任何真实 CLI agent。适合决定要不要继续装真 CLI。
|
|
51
36
|
|
|
52
|
-
|
|
37
|
+
## 快速开始
|
|
53
38
|
|
|
54
|
-
|
|
55
|
-
- At least one supported agent CLI installed, authenticated, and available on
|
|
56
|
-
`PATH`.
|
|
39
|
+
前置条件:
|
|
57
40
|
|
|
58
|
-
|
|
41
|
+
- Node.js 22 或更新版本
|
|
42
|
+
- 至少一个支持的 Agent CLI 已经安装好、登录过、在 `PATH` 上可调用
|
|
43
|
+
|
|
44
|
+
安装并启动 Hive:
|
|
59
45
|
|
|
60
46
|
```bash
|
|
61
47
|
npm install -g @tt-a1i/hive
|
|
62
48
|
hive
|
|
63
49
|
```
|
|
64
50
|
|
|
65
|
-
|
|
66
|
-
`hive --port 4010` when you need a specific local port.
|
|
51
|
+
打开终端打印出来的本机地址,通常是 `http://127.0.0.1:3000/`。如果你想指定端口,可以用 `hive --port 4010`。
|
|
67
52
|
|
|
68
|
-
|
|
53
|
+
首次使用流程:
|
|
69
54
|
|
|
70
|
-
1.
|
|
71
|
-
2.
|
|
72
|
-
3. Hive
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
5. Ask the Orchestrator to delegate work. It sends tasks with
|
|
76
|
-
`team send <worker-name> "<task>"`; workers report back with `team report`.
|
|
55
|
+
1. 选择一个项目目录作为 workspace。
|
|
56
|
+
2. 挑一个 Orchestrator 预设。
|
|
57
|
+
3. Hive 会创建 `<workspace>/.hive/tasks.md`,启动 Orchestrator 的 PTY,把内部的 `team` 命令注入这个 agent 会话。
|
|
58
|
+
4. 在 Team Members 面板里添加 Worker。
|
|
59
|
+
5. 跟 Orchestrator 说一声让它派活,它会用 `team send <worker-name> "<task>"` 发任务,Worker 完事后用 `team report` 回报。
|
|
77
60
|
|
|
78
|
-
##
|
|
61
|
+
## 工作方式
|
|
79
62
|
|
|
80
63
|
```text
|
|
81
|
-
|
|
82
|
-
|
|
64
|
+
浏览器 UI 跑在 127.0.0.1
|
|
65
|
+
任务 · 团队 · 终端 · 汇报
|
|
83
66
|
|
|
|
84
67
|
| HTTP + WebSocket
|
|
85
68
|
v
|
|
86
|
-
Hive
|
|
87
|
-
SQLite
|
|
69
|
+
Hive Runtime
|
|
70
|
+
SQLite 元数据 · PTY 生命周期 · 任务派单
|
|
88
71
|
|
|
|
89
72
|
+-- Orchestrator PTY
|
|
90
|
-
|
|
|
73
|
+
| 可调用:team send、team list、team report
|
|
91
74
|
|
|
|
92
75
|
+-- Worker PTY
|
|
93
|
-
|
|
|
76
|
+
| 可调用:team report
|
|
94
77
|
|
|
|
95
78
|
+-- Worker PTY
|
|
96
|
-
|
|
79
|
+
可调用:team report
|
|
97
80
|
|
|
98
|
-
Workspace
|
|
81
|
+
Workspace 任务图:
|
|
99
82
|
<workspace>/.hive/tasks.md
|
|
100
83
|
```
|
|
101
84
|
|
|
102
|
-
|
|
85
|
+
三个细节值得记住:
|
|
103
86
|
|
|
104
|
-
-
|
|
105
|
-
- `team`
|
|
106
|
-
|
|
107
|
-
command.
|
|
108
|
-
- The task graph is a markdown file in the workspace, so you can inspect or
|
|
109
|
-
edit it outside the app.
|
|
87
|
+
- Agent 是真正的 CLI 进程,不是模拟的 subagent。
|
|
88
|
+
- `team` 命令**只**在 Hive 管理的 agent 会话里可用——通过把包内 bin 目录 prepend 到 PATH 实现,不会装成全局命令。
|
|
89
|
+
- 任务图就是 workspace 里的一份 markdown 文件,你可以在编辑器里直接看或者改。
|
|
110
90
|
|
|
111
|
-
## Agent
|
|
91
|
+
## Agent 预设
|
|
112
92
|
|
|
113
|
-
|
|
|
93
|
+
| 预设 | `PATH` 上的命令 | 默认 bypass 模式 | 会话恢复 |
|
|
114
94
|
| --- | --- | --- | --- |
|
|
115
|
-
| Claude Code | `claude` | `--dangerously-skip-permissions
|
|
95
|
+
| Claude Code | `claude` | `--dangerously-skip-permissions`、`--permission-mode=bypassPermissions` | `--resume <session_id>` |
|
|
116
96
|
| Codex | `codex` | `--dangerously-bypass-approvals-and-sandbox` | `resume <session_id>` |
|
|
117
|
-
| OpenCode | `opencode` |
|
|
97
|
+
| OpenCode | `opencode` | 由 `~/.config/opencode/opencode.json` 配置 | `--session <session_id>` |
|
|
118
98
|
| Gemini | `gemini` | `--yolo` | `--resume <session_id>` |
|
|
119
|
-
|
|
|
120
|
-
|
|
121
|
-
Hive does not install these CLIs for you. Install and authenticate them in the
|
|
122
|
-
same shell environment you use to start Hive.
|
|
99
|
+
| 自定义 | 任意可执行文件 | 自己配 | 自己配 |
|
|
123
100
|
|
|
124
|
-
|
|
101
|
+
Hive 不替你安装这些 CLI。请在启动 Hive 的同一个 shell 环境里先装好、登录好。
|
|
125
102
|
|
|
126
|
-
|
|
127
|
-
- Orchestrator and worker terminals backed by real PTYs.
|
|
128
|
-
- Add Worker flow with role presets for coder, reviewer, tester, and custom
|
|
129
|
-
members.
|
|
130
|
-
- `.hive/tasks.md` editor with external-file conflict handling.
|
|
131
|
-
- Background PTY preservation and best-effort native session resume.
|
|
132
|
-
- Local SQLite metadata under `~/.config/hive` by default, or `$HIVE_DATA_DIR`
|
|
133
|
-
when set.
|
|
103
|
+
## Hive 提供什么
|
|
134
104
|
|
|
135
|
-
|
|
136
|
-
|
|
105
|
+
- Workspace 侧边栏,方便在多个本机项目之间切换。
|
|
106
|
+
- Orchestrator 和 Worker 终端都是真实 PTY 支撑的。
|
|
107
|
+
- Add Worker 流程预置了 coder / reviewer / tester 和自定义成员的角色模板。
|
|
108
|
+
- `.hive/tasks.md` 编辑器,带外部文件冲突处理。
|
|
109
|
+
- PTY 后台保留 + 尽力使用各 CLI 原生 session 恢复。
|
|
110
|
+
- 元数据存在本机 SQLite,默认在 `~/.config/hive`,或者通过 `$HIVE_DATA_DIR` 指定。
|
|
137
111
|
|
|
138
|
-
|
|
112
|
+
Hive **不**提供 sandbox 隔离、多用户认证、云端托管,也没有自带的编码模型。它只负责调度你已经在用的本机工具。
|
|
139
113
|
|
|
140
|
-
|
|
141
|
-
| --- | --- | --- |
|
|
142
|
-
| macOS | Tier 1 | Main development and release verification target. |
|
|
143
|
-
| Linux | Tier 1 | CI verified. Native folder picking expects `zenity`; manual path entry works without it. |
|
|
144
|
-
| Windows | Tier 2 | CI runs a Windows test subset and a packaged-install smoke. Folder picking uses Windows PowerShell and the package includes `team.cmd`. Treat as best-effort — full Windows verification before each release is manual. |
|
|
114
|
+
## 平台支持
|
|
145
115
|
|
|
146
|
-
|
|
147
|
-
(`node-pty` and `better-sqlite3`), so native install tooling may be required
|
|
148
|
-
when prebuilt binaries are unavailable.
|
|
116
|
+
所有平台都需要 Node.js 22+。Hive 依赖 `node-pty` 和 `better-sqlite3` 这类原生包,没有预编译二进制时需要你本机有原生构建工具链。
|
|
149
117
|
|
|
150
|
-
##
|
|
118
|
+
## 安全模型
|
|
151
119
|
|
|
152
|
-
Hive
|
|
120
|
+
Hive 是本机开发工具,**不是**托管服务。
|
|
153
121
|
|
|
154
|
-
-
|
|
155
|
-
|
|
156
|
-
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
-
|
|
160
|
-
shell account running Hive.
|
|
161
|
-
- Agent tokens are session scoped, generated by the local runtime, injected into
|
|
162
|
-
agent process environments, and not intended as internet-facing credentials.
|
|
163
|
-
- Hive has no multi-user authentication boundary. Treat same-machine processes
|
|
164
|
-
that can reach the local port as trusted local access.
|
|
165
|
-
- The browser UI token is a local session guard, not protection against other
|
|
166
|
-
processes already running as your OS user.
|
|
122
|
+
- Runtime 只监听 `127.0.0.1`。不要把 Hive 端口通过公网隧道、反向代理或任何共享网络接口暴露出去。
|
|
123
|
+
- 内置预设会主动传 CLI 的 non-interactive / bypass flag。Worker 在选中的 workspace 里有跟启动 shell **同等**的执行权限——把它当成"会自动跑命令的你自己"。
|
|
124
|
+
- 只打开你信任的 workspace。Worker 拥有跟你登录账户一样的文件系统访问权限。
|
|
125
|
+
- Agent token 是 session 级的,由本机 runtime 生成,注入到 agent 进程环境变量里,**不**用于跨网络通信。
|
|
126
|
+
- Hive 不做多用户认证。任何能从本机访问到端口的进程都视为可信本地访问。
|
|
127
|
+
- 浏览器 UI token 只是本机会话保护,不是用来防同一系统账户下其他进程的安全边界。
|
|
167
128
|
|
|
168
|
-
|
|
129
|
+
在敏感仓库里用 Hive 之前,请先读 [SECURITY.md](SECURITY.md)。
|
|
169
130
|
|
|
170
|
-
##
|
|
131
|
+
## 数据位置
|
|
171
132
|
|
|
172
|
-
|
|
|
133
|
+
| 数据 | 位置 |
|
|
173
134
|
| --- | --- |
|
|
174
|
-
| Runtime
|
|
175
|
-
| Workspace
|
|
176
|
-
|
|
|
177
|
-
| Web UI
|
|
135
|
+
| Runtime 元数据 | `~/.config/hive` 或 `$HIVE_DATA_DIR` |
|
|
136
|
+
| Workspace 任务图 | `<workspace>/.hive/tasks.md` |
|
|
137
|
+
| 内部 `team` 命令 | 包内 `dist/bin/`,通过 PATH 注入 PTY |
|
|
138
|
+
| Web UI 资源 | 由 runtime 从包内 `web/dist` 直接服务 |
|
|
178
139
|
|
|
179
|
-
##
|
|
140
|
+
## 故障排查
|
|
180
141
|
|
|
181
|
-
|
|
142
|
+
**找不到 Agent CLI**
|
|
182
143
|
|
|
183
|
-
|
|
184
|
-
same shell, and available on `PATH`.
|
|
144
|
+
确认选中的命令已经安装好、登录好、在启动 Hive 那个 shell 里能直接调用,且在 `PATH` 上。
|
|
185
145
|
|
|
186
|
-
|
|
146
|
+
**端口被占用**
|
|
187
147
|
|
|
188
|
-
|
|
148
|
+
换个本机端口启动:
|
|
189
149
|
|
|
190
150
|
```bash
|
|
191
151
|
hive --port 4020
|
|
192
152
|
```
|
|
193
153
|
|
|
194
|
-
|
|
154
|
+
**原生包构建失败**
|
|
195
155
|
|
|
196
|
-
Hive
|
|
197
|
-
Node.js 22+, keep your package manager cache clean, and verify your platform
|
|
198
|
-
build tools are available.
|
|
156
|
+
Hive 依赖 `node-pty` 和 `better-sqlite3`,它们用原生二进制。确认 Node.js 22+,清干净 package manager 缓存,并准备好你平台的构建工具(macOS Xcode CLI、Linux build-essential + python3、Windows VS Build Tools)。
|
|
199
157
|
|
|
200
|
-
**
|
|
158
|
+
**Linux 上目录选择器不弹**
|
|
201
159
|
|
|
202
|
-
|
|
160
|
+
装 `zenity`,或者直接在对话框里粘路径。
|
|
203
161
|
|
|
204
|
-
**
|
|
162
|
+
**Windows 上目录选择器不弹**
|
|
205
163
|
|
|
206
|
-
|
|
207
|
-
workspace path manually.
|
|
164
|
+
确认 `powershell.exe` 在 `PATH` 上,或者直接粘路径。
|
|
208
165
|
|
|
209
|
-
**Tasks
|
|
166
|
+
**Tasks 文件冲突 banner 出现**
|
|
210
167
|
|
|
211
|
-
Hive
|
|
212
|
-
from disk, or `Keep Local` to keep the editor contents and save again.
|
|
168
|
+
Hive 检测到磁盘上的 `.hive/tasks.md` 比 UI 里的新。`Reload` 接受磁盘版本,`Keep Local` 保留 UI 编辑并覆盖保存。
|
|
213
169
|
|
|
214
|
-
**Worker
|
|
170
|
+
**Worker 卡在 `working` 状态**
|
|
215
171
|
|
|
216
|
-
Hive
|
|
217
|
-
`idle` when they call `team report`. If a worker is blocked, stop or restart it
|
|
218
|
-
from the UI.
|
|
172
|
+
Hive 不通过进程活动猜测任务完成。Worker 只有在调 `team report` 时才会回到 `idle`。如果它确实卡了,从 UI 里 Stop 或 Restart。
|
|
219
173
|
|
|
220
|
-
##
|
|
174
|
+
## 开发
|
|
221
175
|
|
|
222
176
|
```bash
|
|
223
177
|
pnpm install
|
|
224
178
|
pnpm dev
|
|
225
179
|
```
|
|
226
180
|
|
|
227
|
-
|
|
228
|
-
`127.0.0.1:5180` and proxies API and WebSocket traffic to the runtime.
|
|
181
|
+
开发模式下 runtime 跑在 `127.0.0.1:4010`,Vite 跑在 `127.0.0.1:5180`,把 API 和 WebSocket 代理到 runtime。
|
|
229
182
|
|
|
230
|
-
|
|
183
|
+
常用命令:
|
|
231
184
|
|
|
232
185
|
```bash
|
|
233
186
|
pnpm check
|
|
@@ -235,35 +188,34 @@ pnpm build
|
|
|
235
188
|
pnpm test
|
|
236
189
|
```
|
|
237
190
|
|
|
238
|
-
|
|
191
|
+
预演 production 构建:
|
|
239
192
|
|
|
240
193
|
```bash
|
|
241
194
|
pnpm build
|
|
242
195
|
node dist/src/cli/hive.js --port 4010
|
|
243
196
|
```
|
|
244
197
|
|
|
245
|
-
|
|
246
|
-
needed after `pnpm build`.
|
|
198
|
+
Production 模式下 runtime 直接服务构建好的 web UI,不需要单独的 Vite。
|
|
247
199
|
|
|
248
|
-
##
|
|
200
|
+
## 发布
|
|
249
201
|
|
|
250
|
-
|
|
202
|
+
维护者本地预演:
|
|
251
203
|
|
|
252
204
|
```bash
|
|
253
205
|
pnpm release:dry
|
|
254
206
|
```
|
|
255
207
|
|
|
256
|
-
|
|
257
|
-
including manual Windows smoke steps.
|
|
208
|
+
完整 tag 发版清单见 [docs/release.md](docs/release.md),里面包含 Windows 手动 smoke 步骤。
|
|
258
209
|
|
|
259
|
-
|
|
260
|
-
verifies macOS, Ubuntu, and Windows, then publishes to npm with `NPM_TOKEN`.
|
|
210
|
+
带 `v*` 的 tag push 会触发 GitHub Actions release workflow。workflow 会在 macOS、Ubuntu、Windows 三平台验证,然后用 `NPM_TOKEN` 发布到 npm。
|
|
261
211
|
|
|
262
|
-
##
|
|
212
|
+
## 状态
|
|
263
213
|
|
|
264
|
-
Hive
|
|
265
|
-
while the core local orchestration model hardens.
|
|
214
|
+
Hive 正处于 alpha public preview 阶段。在本机调度模型稳定下来之前,UI 和协议细节还会继续调整。
|
|
266
215
|
|
|
267
216
|
## License
|
|
268
217
|
|
|
269
|
-
|
|
218
|
+
- **0.6.0-alpha.8 及之后**: Business Source License 1.1([LICENSE.BSL](LICENSE.BSL)),4 年后(2030-05-16)自动转为 Apache-2.0
|
|
219
|
+
- **0.6.0-alpha.7 及之前**: Apache-2.0([LICENSE](LICENSE)),永久授权
|
|
220
|
+
|
|
221
|
+
BSL 允许个人使用、内部部署、嵌入其他产品、非商业 fork。**仅禁止**把 Hive 包装成多 agent 协作 SaaS 卖给第三方。详细边界见 [LICENSE.BSL](LICENSE.BSL) 的 Additional Use Grant。
|
|
@@ -40,14 +40,14 @@ export const createAgentLaunchCache = (store) => {
|
|
|
40
40
|
resumeArgsTemplate: input.resumeArgsTemplate ?? null,
|
|
41
41
|
sessionIdCapture: input.sessionIdCapture ?? null,
|
|
42
42
|
};
|
|
43
|
+
store.saveLaunchConfig(workspaceId, agentId, normalized);
|
|
43
44
|
launchConfigs.set(cacheKey(workspaceId, agentId), normalized);
|
|
44
45
|
workspaceByAgentId.set(agentId, workspaceId);
|
|
45
|
-
store.saveLaunchConfig(workspaceId, agentId, normalized);
|
|
46
46
|
},
|
|
47
47
|
remove(workspaceId, agentId) {
|
|
48
|
+
store.deleteLaunchConfig(workspaceId, agentId);
|
|
48
49
|
launchConfigs.delete(cacheKey(workspaceId, agentId));
|
|
49
50
|
workspaceByAgentId.delete(agentId);
|
|
50
|
-
store.deleteLaunchConfig(workspaceId, agentId);
|
|
51
51
|
},
|
|
52
52
|
setWorkspaceId(agentId, workspaceId) {
|
|
53
53
|
workspaceByAgentId.set(agentId, workspaceId);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-launch-cache.js","sourceRoot":"","sources":["../../../src/server/agent-launch-cache.ts"],"names":[],"mappings":"AAcA,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,KAA4B,EAAE,EAAE;IACrE,MAAM,aAAa,GAAG,IAAI,GAAG,EAAkC,CAAA;IAC/D,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAkB,CAAA;IACpD,MAAM,QAAQ,GAAG,CAAC,WAAmB,EAAE,OAAe,EAAE,EAAE,CAAC,GAAG,WAAW,IAAI,OAAO,EAAE,CAAA;IACtF,MAAM,IAAI,GAAG,GAAG,EAAE;QAChB,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,iBAAiB,EAAE,EAAE,CAAC;YAC5C,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;YACrE,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,WAAW,CAAC,CAAA;QACtD,CAAC;IACH,CAAC,CAAA;IAED,IAAI,EAAE,CAAA;IAEN,OAAO;QACL,GAAG,CAAC,WAAmB,EAAE,OAAe;YACtC,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAA;YAChE,IAAI,MAAM;gBAAE,OAAO,MAAM,CAAA;YACzB,IAAI,EAAE,CAAA;YACN,MAAM,cAAc,GAAG,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAA;YACxE,IAAI,cAAc;gBAAE,OAAO,cAAc,CAAA;YACzC,MAAM,IAAI,KAAK,CAAC,kCAAkC,OAAO,EAAE,CAAC,CAAA;QAC9D,CAAC;QACD,IAAI,CAAC,WAAmB,EAAE,OAAe;YACvC,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAA;YAChE,IAAI,MAAM;gBAAE,OAAO,MAAM,CAAA;YACzB,IAAI,EAAE,CAAA;YACN,OAAO,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAA;QAC1D,CAAC;QACD,cAAc,CAAC,OAAe;YAC5B,OAAO,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QACxC,CAAC;QACD,IAAI,CAAC,WAAmB,EAAE,OAAe,EAAE,KAA6B;YACtE,MAAM,UAAU,GAAG;gBACjB,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,EAAE;gBACtB,eAAe,EAAE,KAAK,CAAC,eAAe,IAAI,IAAI;gBAC9C,kBAAkB,EAAE,KAAK,CAAC,kBAAkB,IAAI,IAAI;gBACpD,0BAA0B,EAAE,KAAK,CAAC,0BAA0B,IAAI,KAAK;gBACrE,kBAAkB,EAAE,KAAK,CAAC,kBAAkB,IAAI,IAAI;gBACpD,gBAAgB,EAAE,KAAK,CAAC,gBAAgB,IAAI,IAAI;aACjD,CAAA;YACD,
|
|
1
|
+
{"version":3,"file":"agent-launch-cache.js","sourceRoot":"","sources":["../../../src/server/agent-launch-cache.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { AgentLaunchConfigInput } from './agent-run-store.js';
|
|
2
|
+
import type { SettingsStore } from './settings-store.js';
|
|
3
|
+
export declare const resolveCommandPresetLaunchConfig: (settings: SettingsStore, commandPresetId: string) => AgentLaunchConfigInput | undefined;
|
|
4
|
+
export declare const resolveStartupCommandLaunchConfig: (settings: SettingsStore, startupCommand: string, commandPresetId?: string | null) => AgentLaunchConfigInput | undefined;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { createStartupCommandLaunch, getStartupCommandExecutable, } from './startup-command-parser.js';
|
|
2
|
+
export const resolveCommandPresetLaunchConfig = (settings, commandPresetId) => {
|
|
3
|
+
const preset = settings.getCommandPreset(commandPresetId);
|
|
4
|
+
if (!preset)
|
|
5
|
+
return undefined;
|
|
6
|
+
return {
|
|
7
|
+
args: preset.args,
|
|
8
|
+
command: preset.command,
|
|
9
|
+
commandPresetId: preset.id,
|
|
10
|
+
};
|
|
11
|
+
};
|
|
12
|
+
const findPresetForStartupCommand = (settings, startupCommand, commandPresetId) => {
|
|
13
|
+
if (commandPresetId)
|
|
14
|
+
return settings.getCommandPreset(commandPresetId);
|
|
15
|
+
const executable = getStartupCommandExecutable(startupCommand);
|
|
16
|
+
return executable ? settings.getCommandPreset(executable) : undefined;
|
|
17
|
+
};
|
|
18
|
+
export const resolveStartupCommandLaunchConfig = (settings, startupCommand, commandPresetId = null) => {
|
|
19
|
+
const trimmedStartupCommand = startupCommand.trim();
|
|
20
|
+
if (!trimmedStartupCommand)
|
|
21
|
+
return undefined;
|
|
22
|
+
const parsed = createStartupCommandLaunch(trimmedStartupCommand);
|
|
23
|
+
const preset = findPresetForStartupCommand(settings, trimmedStartupCommand, commandPresetId);
|
|
24
|
+
return {
|
|
25
|
+
command: parsed.command,
|
|
26
|
+
args: parsed.args,
|
|
27
|
+
commandPresetId: null,
|
|
28
|
+
interactiveCommand: preset?.command ?? getStartupCommandExecutable(trimmedStartupCommand),
|
|
29
|
+
presetAugmentationDisabled: true,
|
|
30
|
+
sessionIdCapture: preset?.sessionIdCapture ?? null,
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
//# sourceMappingURL=agent-launch-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-launch-resolver.js","sourceRoot":"","sources":["../../../src/server/agent-launch-resolver.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,0BAA0B,EAC1B,2BAA2B,GAC5B,MAAM,6BAA6B,CAAA;AAEpC,MAAM,CAAC,MAAM,gCAAgC,GAAG,CAC9C,QAAuB,EACvB,eAAuB,EACa,EAAE;IACtC,MAAM,MAAM,GAAG,QAAQ,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAA;IACzD,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAA;IAC7B,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,eAAe,EAAE,MAAM,CAAC,EAAE;KAC3B,CAAA;AACH,CAAC,CAAA;AAED,MAAM,2BAA2B,GAAG,CAClC,QAAuB,EACvB,cAAsB,EACtB,eAA8B,EAC9B,EAAE;IACF,IAAI,eAAe;QAAE,OAAO,QAAQ,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAA;IACtE,MAAM,UAAU,GAAG,2BAA2B,CAAC,cAAc,CAAC,CAAA;IAC9D,OAAO,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;AACvE,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,iCAAiC,GAAG,CAC/C,QAAuB,EACvB,cAAsB,EACtB,kBAAiC,IAAI,EACD,EAAE;IACtC,MAAM,qBAAqB,GAAG,cAAc,CAAC,IAAI,EAAE,CAAA;IACnD,IAAI,CAAC,qBAAqB;QAAE,OAAO,SAAS,CAAA;IAC5C,MAAM,MAAM,GAAG,0BAA0B,CAAC,qBAAqB,CAAC,CAAA;IAChE,MAAM,MAAM,GAAG,2BAA2B,CAAC,QAAQ,EAAE,qBAAqB,EAAE,eAAe,CAAC,CAAA;IAC5F,OAAO;QACL,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,eAAe,EAAE,IAAI;QACrB,kBAAkB,EAAE,MAAM,EAAE,OAAO,IAAI,2BAA2B,CAAC,qBAAqB,CAAC;QACzF,0BAA0B,EAAE,IAAI;QAChC,gBAAgB,EAAE,MAAM,EAAE,gBAAgB,IAAI,IAAI;KACnD,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
const ORCHESTRATOR_RULES = [
|
|
2
2
|
'Hive worker 是右侧卡片里的真实 CLI agent,不是你所在 CLI 的内置 subagent / 子代理工具。',
|
|
3
3
|
'当 user 要你“让 worker ... / 给 worker 找活 / 让成员处理”时,先执行 `team list` 确认真实 Hive worker。',
|
|
4
|
+
'普通、低风险、几分钟内能直接完成的小任务可以自己做;不要为了形式感派 worker。需要并行、长时间执行、独立 review/test、专门角色,或 user 明确要求 worker/成员处理时,再用 `team send`。',
|
|
4
5
|
'如果只有一个可用 worker,直接用 `team send <worker-name> "<task>"` 派给它;不要把选择题丢回给 user。',
|
|
5
6
|
'当 user 要你“让 worker ...”时,必须用 `team send <worker-name> "<task>"` 派给 Hive worker。',
|
|
6
7
|
'不要使用你所在 CLI 的内置 subagent / 子代理工具(如 Task / Explore 等)来代替 Hive worker;它们不会出现在 Hive UI,也不会更新 Hive 调度状态。',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hive-team-guidance.js","sourceRoot":"","sources":["../../../src/server/hive-team-guidance.ts"],"names":[],"mappings":"AAEA,MAAM,kBAAkB,GAAG;IACzB,iEAAiE;IACjE,kFAAkF;IAClF,4EAA4E;IAC5E,iFAAiF;IACjF,sGAAsG;IACtG,6MAA6M;CAC9M,CAAA;AAED,MAAM,YAAY,GAAG;IACnB,qDAAqD;IACrD,+EAA+E;IAC/E,gDAAgD;IAChD,sDAAsD;IACtD,sGAAsG;IACtG,6FAA6F;CAC9F,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,KAAiC,EAAE,EAAE,CACpE,KAAK,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,YAAY,CAAA"}
|
|
1
|
+
{"version":3,"file":"hive-team-guidance.js","sourceRoot":"","sources":["../../../src/server/hive-team-guidance.ts"],"names":[],"mappings":"AAEA,MAAM,kBAAkB,GAAG;IACzB,iEAAiE;IACjE,kFAAkF;IAClF,mHAAmH;IACnH,4EAA4E;IAC5E,iFAAiF;IACjF,sGAAsG;IACtG,6MAA6M;CAC9M,CAAA;AAED,MAAM,YAAY,GAAG;IACnB,qDAAqD;IACrD,+EAA+E;IAC/E,gDAAgD;IAChD,sDAAsD;IACtD,sGAAsG;IACtG,6FAA6F;CAC9F,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,KAAiC,EAAE,EAAE,CACpE,KAAK,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,YAAY,CAAA"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { getStartupCommandExecutable } from './startup-command-parser.js';
|
|
1
2
|
// SETTLE_WAIT_MS: how long we wait before declaring autostart "ok". Must be
|
|
2
3
|
// long enough to observe an early exit when the child shell prints
|
|
3
4
|
// "command not found" then dies with exit 127 (typically <100ms in practice).
|
|
@@ -40,6 +41,15 @@ const formatEarlyExitError = (command, exitCode) => {
|
|
|
40
41
|
}
|
|
41
42
|
return `${command} failed to start (exit ${exitCode ?? 'null'})`;
|
|
42
43
|
};
|
|
44
|
+
const getLaunchErrorCommand = (config) => {
|
|
45
|
+
if (config.presetAugmentationDisabled) {
|
|
46
|
+
const startupCommand = config.args?.at(-1);
|
|
47
|
+
const executable = startupCommand ? getStartupCommandExecutable(startupCommand) : null;
|
|
48
|
+
if (executable)
|
|
49
|
+
return executable;
|
|
50
|
+
}
|
|
51
|
+
return config.interactiveCommand ?? config.command;
|
|
52
|
+
};
|
|
43
53
|
/**
|
|
44
54
|
* Wraps `store.startAgent` so spawn failures never bubble up: callers always
|
|
45
55
|
* receive a structured result. The HTTP layer uses this to keep workspace
|
|
@@ -86,7 +96,7 @@ export const autostartAgent = async (port, workspaceId, agentId, hivePort, optio
|
|
|
86
96
|
if (status === 'error' || (status === 'exited' && (exitCode ?? 0) !== 0)) {
|
|
87
97
|
return {
|
|
88
98
|
ok: false,
|
|
89
|
-
error: formatEarlyExitError(config
|
|
99
|
+
error: formatEarlyExitError(getLaunchErrorCommand(config), exitCode),
|
|
90
100
|
run_id: run.runId,
|
|
91
101
|
};
|
|
92
102
|
}
|
|
@@ -95,7 +105,7 @@ export const autostartAgent = async (port, workspaceId, agentId, hivePort, optio
|
|
|
95
105
|
catch (error) {
|
|
96
106
|
return {
|
|
97
107
|
ok: false,
|
|
98
|
-
error: formatStartError(error, config
|
|
108
|
+
error: formatStartError(error, getLaunchErrorCommand(config)),
|
|
99
109
|
run_id: null,
|
|
100
110
|
};
|
|
101
111
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orchestrator-autostart.js","sourceRoot":"","sources":["../../../src/server/orchestrator-autostart.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"orchestrator-autostart.js","sourceRoot":"","sources":["../../../src/server/orchestrator-autostart.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { resolveCommandPresetLaunchConfig, resolveStartupCommandLaunchConfig, } from './agent-launch-resolver.js';
|
|
2
2
|
import { getOrchestratorId } from './workspace-store-support.js';
|
|
3
3
|
const parseArgsEnv = (raw) => {
|
|
4
4
|
if (raw === undefined)
|
|
@@ -16,22 +16,6 @@ const parseArgsEnv = (raw) => {
|
|
|
16
16
|
}
|
|
17
17
|
return undefined;
|
|
18
18
|
};
|
|
19
|
-
const resolveCommandPresetLaunchConfig = (settings, commandPresetId) => {
|
|
20
|
-
const preset = settings.getCommandPreset(commandPresetId);
|
|
21
|
-
if (!preset)
|
|
22
|
-
return undefined;
|
|
23
|
-
return {
|
|
24
|
-
args: preset.args,
|
|
25
|
-
command: preset.command,
|
|
26
|
-
commandPresetId: preset.id,
|
|
27
|
-
};
|
|
28
|
-
};
|
|
29
|
-
const findPresetForStartupCommand = (settings, startupCommand, commandPresetId) => {
|
|
30
|
-
if (commandPresetId)
|
|
31
|
-
return settings.getCommandPreset(commandPresetId);
|
|
32
|
-
const executable = getStartupCommandExecutable(startupCommand);
|
|
33
|
-
return executable ? settings.getCommandPreset(executable) : undefined;
|
|
34
|
-
};
|
|
35
19
|
/**
|
|
36
20
|
* Resolve the orchestrator's launch config in priority order:
|
|
37
21
|
* 1. Explicit startup command pasted by the user. It runs through their shell
|
|
@@ -46,16 +30,7 @@ const findPresetForStartupCommand = (settings, startupCommand, commandPresetId)
|
|
|
46
30
|
export const resolveOrchestratorLaunchConfig = (settings, commandPresetId = null, startupCommand = null) => {
|
|
47
31
|
const trimmedStartupCommand = startupCommand?.trim();
|
|
48
32
|
if (trimmedStartupCommand) {
|
|
49
|
-
|
|
50
|
-
const preset = findPresetForStartupCommand(settings, trimmedStartupCommand, commandPresetId);
|
|
51
|
-
return {
|
|
52
|
-
command: parsed.command,
|
|
53
|
-
args: parsed.args,
|
|
54
|
-
commandPresetId: null,
|
|
55
|
-
interactiveCommand: preset?.command ?? getStartupCommandExecutable(trimmedStartupCommand),
|
|
56
|
-
presetAugmentationDisabled: true,
|
|
57
|
-
sessionIdCapture: preset?.sessionIdCapture ?? null,
|
|
58
|
-
};
|
|
33
|
+
return resolveStartupCommandLaunchConfig(settings, trimmedStartupCommand, commandPresetId);
|
|
59
34
|
}
|
|
60
35
|
if (commandPresetId) {
|
|
61
36
|
return resolveCommandPresetLaunchConfig(settings, commandPresetId);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orchestrator-launch.js","sourceRoot":"","sources":["../../../src/server/orchestrator-launch.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"orchestrator-launch.js","sourceRoot":"","sources":["../../../src/server/orchestrator-launch.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gCAAgC,EAChC,iCAAiC,GAClC,MAAM,4BAA4B,CAAA;AAGnC,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAchE,MAAM,YAAY,GAAG,CAAC,GAAuB,EAAwB,EAAE;IACrE,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,SAAS,CAAA;IACvC,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAA;IAC1B,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,CAAA;IACvB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAY,CAAA;QAC7C,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC;YAAE,OAAO,MAAM,CAAA;IAC9F,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IAC7B,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC,CAAA;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAC7C,QAAuB,EACvB,kBAAiC,IAAI,EACrC,iBAAgC,IAAI,EACA,EAAE;IACtC,MAAM,qBAAqB,GAAG,cAAc,EAAE,IAAI,EAAE,CAAA;IACpD,IAAI,qBAAqB,EAAE,CAAC;QAC1B,OAAO,iCAAiC,CAAC,QAAQ,EAAE,qBAAqB,EAAE,eAAe,CAAC,CAAA;IAC5F,CAAC;IACD,IAAI,eAAe,EAAE,CAAC;QACpB,OAAO,gCAAgC,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAA;IACpE,CAAC;IACD,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAA;IACxD,IAAI,UAAU,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,UAAU;YACnB,IAAI,EAAE,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,IAAI,EAAE;YACjE,eAAe,EAAE,IAAI;SACtB,CAAA;IACH,CAAC;IACD,MAAM,QAAQ,GAAG,QAAQ,CAAC,iBAAiB,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,KAAK,cAAc,CAAC,CAAA;IAChG,IAAI,CAAC,QAAQ;QAAE,OAAO,SAAS,CAAA;IAC/B,4EAA4E;IAC5E,2EAA2E;IAC3E,2EAA2E;IAC3E,sEAAsE;IACtE,OAAO;QACL,OAAO,EAAE,QAAQ,CAAC,cAAc;QAChC,IAAI,EAAE,QAAQ,CAAC,WAAW;QAC1B,eAAe,EAAE,IAAI;KACtB,CAAA;AACH,CAAC,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAC1C,IAAmB,EACnB,QAAuB,EACvB,WAAmB,EACnB,kBAAiC,IAAI,EACrC,iBAAgC,IAAI,EAC9B,EAAE;IACR,MAAM,cAAc,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAA;IACrD,IAAI,IAAI,CAAC,qBAAqB,CAAC,WAAW,EAAE,cAAc,CAAC;QAAE,OAAM;IACnE,MAAM,MAAM,GAAG,+BAA+B,CAAC,QAAQ,EAAE,eAAe,EAAE,cAAc,CAAC,CAAA;IACzF,IAAI,CAAC,MAAM;QAAE,OAAM;IACnB,IAAI,CAAC,oBAAoB,CAAC,WAAW,EAAE,cAAc,EAAE,MAAM,CAAC,CAAA;AAChE,CAAC,CAAA"}
|
|
@@ -66,7 +66,7 @@ const formatWorkers = (workers) => {
|
|
|
66
66
|
const getTaskSectionTitle = (agent) => agent.role === 'orchestrator' ? '## 你已派出的任务' : '## 最近派给你的任务';
|
|
67
67
|
export const buildRecoverySummary = ({ agent, allTaskMessages, messages, tasksContent, workers, workspace, }) => wrapSystemMessage([
|
|
68
68
|
`你是 ${workspace.name} 的 ${agent.name}(${agent.role})。`,
|
|
69
|
-
'
|
|
69
|
+
'你刚被 Hive 重启了,且无法通过原生 session resume 恢复。下面是接力上下文。',
|
|
70
70
|
'',
|
|
71
71
|
'## 最近 1 小时与 user 的对话',
|
|
72
72
|
...formatUserInputs(messages),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recovery-summary.js","sourceRoot":"","sources":["../../../src/server/recovery-summary.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"recovery-summary.js","sourceRoot":"","sources":["../../../src/server/recovery-summary.ts"],"names":[],"mappings":"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"}
|