@tt-a1i/hive 0.6.0-alpha.0 → 0.6.0-alpha.2

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.
Files changed (31) hide show
  1. package/CHANGELOG.md +61 -2
  2. package/README.md +166 -90
  3. package/README.zh-CN.md +213 -0
  4. package/SECURITY.md +1 -2
  5. package/assets/hive-hero.png +0 -0
  6. package/dist/src/server/agent-runtime.js +3 -0
  7. package/dist/src/server/agent-runtime.js.map +1 -1
  8. package/dist/src/server/routes-workspaces.js +12 -7
  9. package/dist/src/server/routes-workspaces.js.map +1 -1
  10. package/dist/src/server/runtime-store-helpers.d.ts +2 -0
  11. package/dist/src/server/runtime-store-helpers.js +10 -0
  12. package/dist/src/server/runtime-store-helpers.js.map +1 -1
  13. package/dist/src/server/runtime-store.d.ts +1 -0
  14. package/dist/src/server/runtime-store.js +1 -0
  15. package/dist/src/server/runtime-store.js.map +1 -1
  16. package/dist/src/server/team-list-serializer.d.ts +2 -8
  17. package/dist/src/server/team-list-serializer.js +2 -1
  18. package/dist/src/server/team-list-serializer.js.map +1 -1
  19. package/dist/src/server/terminal-state-mirror.d.ts +6 -0
  20. package/dist/src/server/terminal-state-mirror.js +21 -0
  21. package/dist/src/server/terminal-state-mirror.js.map +1 -1
  22. package/dist/src/server/worker-output-tracker.d.ts +14 -0
  23. package/dist/src/server/worker-output-tracker.js +51 -0
  24. package/dist/src/server/worker-output-tracker.js.map +1 -0
  25. package/dist/src/shared/types.d.ts +3 -0
  26. package/package.json +2 -1
  27. package/web/dist/assets/index-BGhNuRRP.css +1 -0
  28. package/web/dist/assets/index-D8sy4JED.js +75 -0
  29. package/web/dist/index.html +2 -2
  30. package/web/dist/assets/index-CjlaoOoA.css +0 -1
  31. package/web/dist/assets/index-CwdRvXrs.js +0 -63
package/CHANGELOG.md CHANGED
@@ -2,11 +2,70 @@
2
2
 
3
3
  All notable user-facing changes will be documented in this file.
4
4
 
5
- ## 0.6.0-alpha.0 - Unreleased
5
+ ## 0.6.0-alpha.2 - 2026-05-14
6
+
7
+ Follow-up to alpha.1 — corrects a handful of inconsistencies and tightens the
8
+ runtime-down experience that was deferred from the alpha.1 review.
9
+
10
+ - Removed the OrchestratorHintOverlay introduced in alpha.1. The hint card on
11
+ the Orchestrator pane was judged as unnecessary; agent terminals are now
12
+ back to a clean full-bleed PTY.
13
+ - Runtime-down handling is no longer half-finished: when the local Hive
14
+ runtime is unreachable on startup, the WelcomePane "Add your first
15
+ workspace" CTA is disabled with an explicit footnote, and `createWorkspace`
16
+ failures now surface as an error toast instead of being swallowed.
17
+ - npm releases are now published with `--provenance`, matching the prior
18
+ claim in README/CHANGELOG. The alpha.0 / alpha.1 tarballs do not have
19
+ provenance attestations; alpha.2 is the first release that actually does.
20
+ - Toast ids no longer use `Math.random()` (AGENTS.md §6); switched to a
21
+ module-level monotonic counter — `crypto.randomUUID` was the previous
22
+ fallback but a future LAN deployment would not have a secure context.
23
+ - README and SECURITY no longer pin a specific version number in the public
24
+ preview banner — the npm badge now carries that responsibility.
25
+ - Windows is documented as Tier 2 (CI smoke + manual verification before
26
+ release) rather than Tier 1; the previous wording oversold what the CI
27
+ matrix actually covers.
28
+
29
+ ## 0.6.0-alpha.1 - 2026-05-14
30
+
31
+ UI onboarding revamp. Three audits (visual / UX / competitive) called the
32
+ first-run state too sparse to ship publicly; this release answers all of them
33
+ in one batch.
34
+
35
+ - Empty main area now renders a WelcomePane with a 3-step guide and a primary
36
+ CTA, replacing the previous black null branch in WorkspaceDetail.
37
+ - Sidebar EmptyState absorbs the New workspace CTA so the call-to-action sits
38
+ in the eye-flow center; the bottom dashed Add Workspace button still appears
39
+ once the list is non-empty.
40
+ - Topbar drops the hardcoded `v0.1` and reads the real package version. The
41
+ Blueprint and Notifications actions hide while no workspace is active.
42
+ - Cards lose the `translateY(-1px)` hover lift. Role badges now blend the
43
+ status color into the surface with `color-mix(in oklab, ... 22%, var(--bg-2))`
44
+ so they ride the token system instead of hardcoded hex.
45
+ - Runtime-down on first load surfaces an explicit error toast instead of
46
+ falling through to "No workspaces."
47
+ - Orchestrator pane shows a Cursor-style hint overlay on the first run; any
48
+ keystroke or the explicit Dismiss button removes it.
49
+ - Worker cards expose the last terminal output line for working workers,
50
+ backed by a new `last_output_line` field on the team list payload and a new
51
+ per-run `worker-output-tracker` on the runtime.
52
+ - New Try Demo flow renders a fully client-side demo workspace (fake
53
+ orchestrator + two workers, prerecorded scrollback, prefilled tasks
54
+ checklist). The demo never touches the server.
55
+ - New first-run wizard auto-opens once per browser via a localStorage flag and
56
+ routes users into Add Workspace, Try Demo, or Skip.
57
+ - Server: duplicate-start guard in `agent-runtime.startAgent` reuses the
58
+ active run rather than spawning a second PTY when the orchestrator autostart
59
+ collides with a manual start.
60
+ - App refactor: split into `AppProviders` + `AppInner`, extracted
61
+ `useFirstRunWizard`, `useEffectiveWorkspaceState`, and
62
+ `WorkspaceTaskDrawer` so `web/src/app.tsx` stays under the 150-line hard
63
+ cap.
64
+
65
+ ## 0.6.0-alpha.0 - 2026-05-13
6
66
 
7
67
  - Prepared Hive for public preview package distribution.
8
68
  - Added Apache-2.0 licensing metadata and repository support documents.
9
69
  - Documented supported platforms, supported CLI presets, first-run flow, safety
10
70
  model, and troubleshooting guidance.
11
71
  - Added package smoke validation for packaged runtime startup.
12
-
package/README.md CHANGED
@@ -1,127 +1,165 @@
1
1
  # Hive
2
2
 
3
- Hive is a local multi-agent workspace for CLI coding agents. It turns Claude
4
- Code, Codex, OpenCode, Gemini, and custom CLI agents into a visible team running
5
- on your machine: one Orchestrator owns the plan, worker agents execute tasks in
6
- their own PTYs, and the web UI keeps tasks, terminals, and reports in one place.
3
+ <p align="center">
4
+ <img src="./assets/hive-hero.png" alt="Hive local-first multi-agent coding workspace hero image" />
5
+ </p>
7
6
 
8
- Hive is built for people who already use CLI coding agents and want a tighter
9
- way to coordinate several of them without giving up each agent's native
10
- terminal workflow.
7
+ Hive is a local multi-agent workspace for CLI coding agents. It lets you run
8
+ Claude Code, Codex, OpenCode, Gemini, or any custom CLI agent as a visible team:
9
+ one Orchestrator coordinates the plan, worker agents run in their own PTYs, and
10
+ the web UI keeps tasks, terminals, and reports in one place.
11
11
 
12
- > Public preview status: macOS, Linux, and Windows are the Tier 1 targets.
12
+ [![npm](https://img.shields.io/npm/v/@tt-a1i/hive.svg)](https://www.npmjs.com/package/@tt-a1i/hive)
13
+ [![Node](https://img.shields.io/badge/node-%3E%3D22-3c873a.svg)](https://nodejs.org/)
14
+ [![License](https://img.shields.io/badge/license-Apache--2.0-blue.svg)](./LICENSE)
15
+ [![Platforms](https://img.shields.io/badge/platforms-macOS%20%C2%B7%20Linux%20%C2%B7%20Windows%20(best--effort)-lightgrey.svg)](#platform-support)
13
16
 
14
- ## 60 Second Start
17
+ English · [简体中文](./README.zh-CN.md)
15
18
 
16
- After the package is published:
19
+ > Public preview. Hive is local-first, runs on `127.0.0.1`, and is intended
20
+ > for developers who already use CLI coding agents. The latest published
21
+ > version is on [npm](https://www.npmjs.com/package/@tt-a1i/hive) and the
22
+ > badge above resolves to it.
17
23
 
18
- ```bash
19
- npm i -g @tt-a1i/hive
20
- hive --port 4010
21
- ```
24
+ ## Why Hive
25
+
26
+ CLI coding agents are powerful, but coordinating several of them manually is
27
+ awkward:
28
+
29
+ - Long-running sessions are spread across terminals.
30
+ - It is hard to split a task into implementation, review, and testing without a
31
+ routing layer.
32
+ - Worker progress disappears into scrollback.
33
+ - Restart recovery depends on each CLI's native session behavior.
34
+
35
+ Hive adds that coordination layer without replacing the CLIs. The agents remain
36
+ real terminal processes running on your machine; Hive manages the team shell
37
+ around them.
38
+
39
+ ## Quick Start
40
+
41
+ Prerequisites:
42
+
43
+ - Node.js 22 or newer.
44
+ - At least one supported agent CLI installed, authenticated, and available on
45
+ `PATH`.
22
46
 
23
- or:
47
+ Install and start Hive:
24
48
 
25
49
  ```bash
26
- npx @tt-a1i/hive --port 4010
50
+ npm install -g @tt-a1i/hive
51
+ hive --port 4010
27
52
  ```
28
53
 
29
54
  Open the printed local URL, usually `http://127.0.0.1:4010/`.
30
55
 
31
- First run flow:
56
+ First-run flow:
32
57
 
33
- 1. Add a workspace by picking or pasting a project folder.
58
+ 1. Create a workspace from a project folder.
34
59
  2. Choose an Orchestrator preset.
35
60
  3. Hive creates `<workspace>/.hive/tasks.md`, starts the Orchestrator PTY, and
36
- injects the internal `team` command into agent sessions.
61
+ injects the internal `team` command into the agent session.
37
62
  4. Add workers from the Team Members panel.
38
- 5. The Orchestrator sends work with `team send <worker-name> "<task>"`; workers
39
- reply with `team report`.
63
+ 5. Ask the Orchestrator to delegate work. It sends tasks with
64
+ `team send <worker-name> "<task>"`; workers report back with `team report`.
65
+
66
+ ## How It Works
67
+
68
+ ```text
69
+ Browser UI on 127.0.0.1
70
+ tasks, team, terminals, reports
71
+ |
72
+ | HTTP + WebSocket
73
+ v
74
+ Hive runtime
75
+ SQLite metadata, PTY lifecycle, task dispatch
76
+ |
77
+ +-- Orchestrator PTY
78
+ | can call: team send, team list, team report
79
+ |
80
+ +-- Worker PTY
81
+ | can call: team report
82
+ |
83
+ +-- Worker PTY
84
+ can call: team report
85
+
86
+ Workspace task graph:
87
+ <workspace>/.hive/tasks.md
88
+ ```
40
89
 
41
- ## What It Does
90
+ Three details matter:
42
91
 
43
- - Keeps each agent in an isolated recoverable PTY.
44
- - Shows workspaces, team members, task state, and terminal output in one local
45
- web UI.
46
- - Uses `.hive/tasks.md` as the workspace task graph so the plan remains visible
47
- outside the app.
48
- - Injects the internal `team` command only inside agent sessions; it does not
49
- install a global `team` command.
50
- - Stores runtime metadata under `~/.config/hive` by default, or under
51
- `HIVE_DATA_DIR` when set.
92
+ - Agents are real CLI processes, not simulated subagents.
93
+ - `team` is injected only inside Hive-managed agent sessions by prepending the
94
+ package's internal bin directory to `PATH`; it is not installed as a global
95
+ command.
96
+ - The task graph is a markdown file in the workspace, so you can inspect or
97
+ edit it outside the app.
52
98
 
53
- ## Supported Agent Presets
99
+ ## Agent Presets
54
100
 
55
- | Preset | Command expected on PATH | Notes |
56
- | --- | --- | --- |
57
- | Claude Code | `claude` | Built-in default preset. |
58
- | Codex | `codex` | Uses the local Codex CLI. |
59
- | OpenCode | `opencode` | Uses the local OpenCode CLI. |
60
- | Gemini | `gemini` | Uses the local Gemini CLI. |
61
- | Custom | Any executable | Configure command and args in the UI. |
101
+ | Preset | Command expected on `PATH` | Default bypass mode | Session resume |
102
+ | --- | --- | --- | --- |
103
+ | Claude Code | `claude` | `--dangerously-skip-permissions`, `--permission-mode=bypassPermissions` | `--resume <session_id>` |
104
+ | Codex | `codex` | `--dangerously-bypass-approvals-and-sandbox` | `resume <session_id>` |
105
+ | OpenCode | `opencode` | `--dangerously-skip-permissions` | `--session <session_id>` |
106
+ | Gemini | `gemini` | `--yolo` | `--resume <session_id>` |
107
+ | Custom | Any executable | User configured | User configured |
108
+
109
+ Hive does not install these CLIs for you. Install and authenticate them in the
110
+ same shell environment you use to start Hive.
111
+
112
+ ## What Hive Provides
62
113
 
63
- Hive does not install these CLIs for you. Install and authenticate each agent
64
- CLI before selecting it in Hive.
114
+ - Workspace sidebar for switching between local projects.
115
+ - Orchestrator and worker terminals backed by real PTYs.
116
+ - Add Worker flow with role presets for coder, reviewer, tester, and custom
117
+ members.
118
+ - `.hive/tasks.md` editor with external-file conflict handling.
119
+ - Background PTY preservation and best-effort native session resume.
120
+ - Local SQLite metadata under `~/.config/hive` by default, or `$HIVE_DATA_DIR`
121
+ when set.
122
+
123
+ Hive does not provide sandboxing, multi-user auth, cloud hosting, or its own
124
+ coding model. It coordinates tools you already run locally.
65
125
 
66
126
  ## Platform Support
67
127
 
68
128
  | Platform | Status | Notes |
69
129
  | --- | --- | --- |
70
- | macOS | Tier 1 | Local development and release verification target. |
71
- | Linux | Tier 1 | CI verification target; folder picking expects `zenity` when using the native picker. |
72
- | Windows | Tier 1 | CI verification target; folder picking uses Windows PowerShell and the packaged internal `team.cmd`. |
130
+ | macOS | Tier 1 | Main development and release verification target. |
131
+ | Linux | Tier 1 | CI verified. Native folder picking expects `zenity`; manual path entry works without it. |
132
+ | 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. |
133
+
134
+ All platforms require Node.js 22+. Hive depends on `node-pty`, so native install
135
+ tooling may be required when prebuilt binaries are unavailable.
73
136
 
74
137
  ## Safety Model
75
138
 
76
- Hive is a local development tool, not a hosted multi-user service.
139
+ Hive is a local development tool, not a hosted service.
77
140
 
78
141
  - The runtime binds to `127.0.0.1`. Do not expose the Hive port through a public
79
142
  tunnel, reverse proxy, or shared network interface.
80
143
  - Built-in presets intentionally use each CLI's non-interactive or bypass mode
81
144
  where available. Treat workers as able to run arbitrary shell commands inside
82
145
  the selected workspace.
83
- - Only open trusted workspaces. A worker has the same filesystem access as the
146
+ - Open only trusted workspaces. A worker has the same filesystem access as the
84
147
  shell account running Hive.
85
148
  - Agent tokens are session scoped, generated by the local runtime, injected into
86
149
  agent process environments, and not intended as internet-facing credentials.
87
- - Hive has no multi-user authentication boundary. If another process can reach
88
- the local port from the same machine, treat it as trusted local access.
89
-
90
- See [SECURITY.md](SECURITY.md) before using Hive with sensitive repositories.
91
-
92
- ## Development
93
-
94
- ```bash
95
- pnpm install
96
- pnpm dev
97
- ```
98
-
99
- The development runtime uses `127.0.0.1:4010`; the Vite web server uses
100
- `127.0.0.1:5180` and proxies API and WebSocket traffic to the runtime.
101
-
102
- Useful checks:
103
-
104
- ```bash
105
- pnpm check
106
- pnpm build
107
- pnpm test
108
- ```
109
-
110
- ## Production-Style Local Run
111
-
112
- ```bash
113
- pnpm build
114
- node dist/src/cli/hive.js --port 4010
115
- ```
150
+ - Hive has no multi-user authentication boundary. Treat same-machine processes
151
+ that can reach the local port as trusted local access.
116
152
 
117
- The production server serves `web/dist` directly. No separate Vite server is
118
- needed after `pnpm build`.
153
+ Read [SECURITY.md](SECURITY.md) before using Hive with sensitive repositories.
119
154
 
120
- Use an isolated data directory when testing:
155
+ ## Data Locations
121
156
 
122
- ```bash
123
- HIVE_DATA_DIR=/tmp/hive-data node dist/src/cli/hive.js --port 4010
124
- ```
157
+ | Data | Location |
158
+ | --- | --- |
159
+ | Runtime metadata | `~/.config/hive` or `$HIVE_DATA_DIR` |
160
+ | Workspace tasks | `<workspace>/.hive/tasks.md` |
161
+ | Internal `team` command | Packaged under `dist/bin/`, injected into PTYs |
162
+ | Web UI assets | Served by the runtime from the packaged `web/dist` build |
125
163
 
126
164
  ## Troubleshooting
127
165
 
@@ -132,7 +170,7 @@ same shell, and available on `PATH`.
132
170
 
133
171
  **Port already in use**
134
172
 
135
- Start Hive with a different local port:
173
+ Start Hive with another local port:
136
174
 
137
175
  ```bash
138
176
  hive --port 4020
@@ -140,9 +178,9 @@ hive --port 4020
140
178
 
141
179
  **Native PTY install fails**
142
180
 
143
- Hive depends on `node-pty`, which ships native binaries. Use Node.js 22+, keep
144
- your package manager cache clean, and verify your platform is macOS, Linux, or
145
- Windows.
181
+ Hive depends on `node-pty`, which uses native binaries. Use Node.js 22+, keep
182
+ your package manager cache clean, and verify your platform build tools are
183
+ available.
146
184
 
147
185
  **Folder picker does not open on Linux**
148
186
 
@@ -158,17 +196,55 @@ workspace path manually.
158
196
  Hive detected a newer `.hive/tasks.md` on disk. Use `Reload` to accept the file
159
197
  from disk, or `Keep Local` to keep the editor contents and save again.
160
198
 
161
- ## Package Release
199
+ **Worker appears stuck in `working`**
200
+
201
+ Hive does not guess task completion from process activity. Workers move back to
202
+ `idle` when they call `team report`. If a worker is blocked, stop or restart it
203
+ from the UI.
204
+
205
+ ## Development
206
+
207
+ ```bash
208
+ pnpm install
209
+ pnpm dev
210
+ ```
211
+
212
+ Development mode runs the runtime on `127.0.0.1:4010`; Vite runs on
213
+ `127.0.0.1:5180` and proxies API and WebSocket traffic to the runtime.
214
+
215
+ Useful checks:
216
+
217
+ ```bash
218
+ pnpm check
219
+ pnpm build
220
+ pnpm test
221
+ ```
222
+
223
+ Production-style local run:
224
+
225
+ ```bash
226
+ pnpm build
227
+ node dist/src/cli/hive.js --port 4010
228
+ ```
162
229
 
163
- Release commands are intentionally separate from normal development:
230
+ The production server serves the built web UI directly. No Vite server is
231
+ needed after `pnpm build`.
232
+
233
+ ## Release
234
+
235
+ Maintainer dry run:
164
236
 
165
237
  ```bash
166
238
  pnpm release:dry
167
239
  ```
168
240
 
169
- That command runs linting, the production build, the full test suite, npm
170
- packlist validation, and a tarball install smoke test. Tag pushes matching `v*`
171
- run the GitHub Actions release workflow; the publish job requires `NPM_TOKEN`.
241
+ Tag pushes matching `v*` run the GitHub Actions release workflow. The workflow
242
+ verifies macOS, Ubuntu, and Windows, then publishes to npm with `NPM_TOKEN`.
243
+
244
+ ## Status
245
+
246
+ Hive is in alpha public preview. Expect UI and protocol details to keep moving
247
+ while the core local orchestration model hardens.
172
248
 
173
249
  ## License
174
250
 
@@ -0,0 +1,213 @@
1
+ # Hive
2
+
3
+ <p align="center">
4
+ <img src="./assets/hive-hero.png" alt="Hive 本机多 agent 协作工作台" />
5
+ </p>
6
+
7
+ Hive 是一个本机多 agent 协作工作台。它让 Claude Code、Codex、OpenCode、Gemini 或任意自定义 CLI Agent 组成一个可见的团队:一个 Orchestrator 负责协调计划,多个 Worker 在各自的 PTY 里执行任务,Web UI 把任务、终端和汇报集中在一处。
8
+
9
+ [![npm](https://img.shields.io/npm/v/@tt-a1i/hive.svg)](https://www.npmjs.com/package/@tt-a1i/hive)
10
+ [![Node](https://img.shields.io/badge/node-%3E%3D22-3c873a.svg)](https://nodejs.org/)
11
+ [![License](https://img.shields.io/badge/license-Apache--2.0-blue.svg)](./LICENSE)
12
+ [![Platforms](https://img.shields.io/badge/platforms-macOS%20%C2%B7%20Linux%20%C2%B7%20Windows%20(best--effort)-lightgrey.svg)](#平台支持)
13
+
14
+ [English](./README.md) · 简体中文
15
+
16
+ > Public preview。Hive 是本机优先的工具,只监听 `127.0.0.1`,面向已经在用 CLI Coding Agent 的开发者。最新发布版本见 [npm](https://www.npmjs.com/package/@tt-a1i/hive),上面的 badge 会指向它。
17
+
18
+ ## 为什么需要 Hive
19
+
20
+ CLI Coding Agent 各自都很强,但同时管几个就有点别扭:
21
+
22
+ - 长任务的会话散在好几个终端里,注意力来回切。
23
+ - 想把"实现 / review / 测试"分给三个 agent,却没有一层把它们路由起来。
24
+ - Worker 的进度淹在 scrollback 里,回头看找不到。
25
+ - 想重启接着干,全看每个 CLI 自己的 session 恢复行为,散乱不可控。
26
+
27
+ Hive 加上这一层调度,**不替换**任何 CLI。Agent 还是真实跑在你电脑上的终端进程,Hive 只是它们外面的"团队 shell"。
28
+
29
+ ## 快速开始
30
+
31
+ 前置条件:
32
+
33
+ - Node.js 22 或更新版本
34
+ - 至少一个支持的 Agent CLI 已经安装好、登录过、在 `PATH` 上可调用
35
+
36
+ 安装并启动 Hive:
37
+
38
+ ```bash
39
+ npm install -g @tt-a1i/hive
40
+ hive --port 4010
41
+ ```
42
+
43
+ 打开终端打印出来的本机地址,通常是 `http://127.0.0.1:4010/`。
44
+
45
+ 首次使用流程:
46
+
47
+ 1. 选择一个项目目录作为 workspace。
48
+ 2. 挑一个 Orchestrator 预设。
49
+ 3. Hive 会创建 `<workspace>/.hive/tasks.md`,启动 Orchestrator 的 PTY,把内部的 `team` 命令注入这个 agent 会话。
50
+ 4. 在 Team Members 面板里添加 Worker。
51
+ 5. 跟 Orchestrator 说一声让它派活,它会用 `team send <worker-name> "<task>"` 发任务,Worker 完事后用 `team report` 回报。
52
+
53
+ ## 工作方式
54
+
55
+ ```text
56
+ 浏览器 UI 跑在 127.0.0.1
57
+ 任务 · 团队 · 终端 · 汇报
58
+ |
59
+ | HTTP + WebSocket
60
+ v
61
+ Hive Runtime
62
+ SQLite 元数据 · PTY 生命周期 · 任务派单
63
+ |
64
+ +-- Orchestrator PTY
65
+ | 可调用:team send、team list、team report
66
+ |
67
+ +-- Worker PTY
68
+ | 可调用:team report
69
+ |
70
+ +-- Worker PTY
71
+ 可调用:team report
72
+
73
+ Workspace 任务图:
74
+ <workspace>/.hive/tasks.md
75
+ ```
76
+
77
+ 三个细节值得记住:
78
+
79
+ - Agent 是真正的 CLI 进程,不是模拟的 subagent。
80
+ - `team` 命令**只**在 Hive 管理的 agent 会话里可用——通过把包内 bin 目录 prepend 到 PATH 实现,不会装成全局命令。
81
+ - 任务图就是 workspace 里的一份 markdown 文件,你可以在编辑器里直接看或者改。
82
+
83
+ ## Agent 预设
84
+
85
+ | 预设 | `PATH` 上的命令 | 默认 bypass 模式 | 会话恢复 |
86
+ | --- | --- | --- | --- |
87
+ | Claude Code | `claude` | `--dangerously-skip-permissions`、`--permission-mode=bypassPermissions` | `--resume <session_id>` |
88
+ | Codex | `codex` | `--dangerously-bypass-approvals-and-sandbox` | `resume <session_id>` |
89
+ | OpenCode | `opencode` | `--dangerously-skip-permissions` | `--session <session_id>` |
90
+ | Gemini | `gemini` | `--yolo` | `--resume <session_id>` |
91
+ | 自定义 | 任意可执行文件 | 自己配 | 自己配 |
92
+
93
+ Hive 不替你安装这些 CLI。请在启动 Hive 的同一个 shell 环境里先装好、登录好。
94
+
95
+ ## Hive 提供什么
96
+
97
+ - Workspace 侧边栏,方便在多个本机项目之间切换。
98
+ - Orchestrator 和 Worker 终端都是真实 PTY 支撑的。
99
+ - Add Worker 流程预置了 coder / reviewer / tester 和自定义成员的角色模板。
100
+ - `.hive/tasks.md` 编辑器,带外部文件冲突处理。
101
+ - PTY 后台保留 + 尽力使用各 CLI 原生 session 恢复。
102
+ - 元数据存在本机 SQLite,默认在 `~/.config/hive`,或者通过 `$HIVE_DATA_DIR` 指定。
103
+
104
+ Hive **不**提供 sandbox 隔离、多用户认证、云端托管,也没有自带的编码模型。它只负责调度你已经在用的本机工具。
105
+
106
+ ## 平台支持
107
+
108
+ | 平台 | 状态 | 备注 |
109
+ | --- | --- | --- |
110
+ | macOS | Tier 1 | 主开发与发布验证平台 |
111
+ | Linux | Tier 1 | CI 持续验证。目录选择器需要 `zenity`,没装也可以手动粘贴路径 |
112
+ | Windows | Tier 2 | CI 跑 Windows 测试子集 + 打包安装 smoke。目录选择器走 Windows PowerShell,包内带了 `team.cmd`。视为 best-effort——每次发版前的完整 Windows 验证仍是手动 |
113
+
114
+ 所有平台都需要 Node.js 22+。Hive 依赖 `node-pty`,没有预编译二进制时需要你本机有原生构建工具链。
115
+
116
+ ## 安全模型
117
+
118
+ Hive 是本机开发工具,**不是**托管服务。
119
+
120
+ - Runtime 只监听 `127.0.0.1`。不要把 Hive 端口通过公网隧道、反向代理或任何共享网络接口暴露出去。
121
+ - 内置预设会主动传 CLI 的 non-interactive / bypass flag。Worker 在选中的 workspace 里有跟启动 shell **同等**的执行权限——把它当成"会自动跑命令的你自己"。
122
+ - 只打开你信任的 workspace。Worker 拥有跟你登录账户一样的文件系统访问权限。
123
+ - Agent token 是 session 级的,由本机 runtime 生成,注入到 agent 进程环境变量里,**不**用于跨网络通信。
124
+ - Hive 不做多用户认证。任何能从本机访问到端口的进程都视为可信本地访问。
125
+
126
+ 在敏感仓库里用 Hive 之前,请先读 [SECURITY.md](SECURITY.md)。
127
+
128
+ ## 数据位置
129
+
130
+ | 数据 | 位置 |
131
+ | --- | --- |
132
+ | Runtime 元数据 | `~/.config/hive` 或 `$HIVE_DATA_DIR` |
133
+ | Workspace 任务图 | `<workspace>/.hive/tasks.md` |
134
+ | 内部 `team` 命令 | 包内 `dist/bin/`,通过 PATH 注入 PTY |
135
+ | Web UI 资源 | 由 runtime 从包内 `web/dist` 直接服务 |
136
+
137
+ ## 故障排查
138
+
139
+ **找不到 Agent CLI**
140
+
141
+ 确认选中的命令已经安装好、登录好、在启动 Hive 那个 shell 里能直接调用,且在 `PATH` 上。
142
+
143
+ **端口被占用**
144
+
145
+ 换个本机端口启动:
146
+
147
+ ```bash
148
+ hive --port 4020
149
+ ```
150
+
151
+ **node-pty 原生构建失败**
152
+
153
+ Hive 依赖 `node-pty`,它用原生二进制。确认 Node.js 22+,清干净 package manager 缓存,并准备好你平台的构建工具(macOS Xcode CLI、Linux build-essential + python3、Windows VS Build Tools)。
154
+
155
+ **Linux 上目录选择器不弹**
156
+
157
+ 装 `zenity`,或者直接在对话框里粘路径。
158
+
159
+ **Windows 上目录选择器不弹**
160
+
161
+ 确认 `powershell.exe` 在 `PATH` 上,或者直接粘路径。
162
+
163
+ **Tasks 文件冲突 banner 出现**
164
+
165
+ Hive 检测到磁盘上的 `.hive/tasks.md` 比 UI 里的新。`Reload` 接受磁盘版本,`Keep Local` 保留 UI 编辑并覆盖保存。
166
+
167
+ **Worker 卡在 `working` 状态**
168
+
169
+ Hive 不通过进程活动猜测任务完成。Worker 只有在调 `team report` 时才会回到 `idle`。如果它确实卡了,从 UI 里 Stop 或 Restart。
170
+
171
+ ## 开发
172
+
173
+ ```bash
174
+ pnpm install
175
+ pnpm dev
176
+ ```
177
+
178
+ 开发模式下 runtime 跑在 `127.0.0.1:4010`,Vite 跑在 `127.0.0.1:5180`,把 API 和 WebSocket 代理到 runtime。
179
+
180
+ 常用命令:
181
+
182
+ ```bash
183
+ pnpm check
184
+ pnpm build
185
+ pnpm test
186
+ ```
187
+
188
+ 预演 production 构建:
189
+
190
+ ```bash
191
+ pnpm build
192
+ node dist/src/cli/hive.js --port 4010
193
+ ```
194
+
195
+ Production 模式下 runtime 直接服务构建好的 web UI,不需要单独的 Vite。
196
+
197
+ ## 发布
198
+
199
+ 维护者本地预演:
200
+
201
+ ```bash
202
+ pnpm release:dry
203
+ ```
204
+
205
+ 带 `v*` 的 tag push 会触发 GitHub Actions release workflow。workflow 会在 macOS、Ubuntu、Windows 三平台验证,然后用 `NPM_TOKEN` 发布到 npm。
206
+
207
+ ## 状态
208
+
209
+ Hive 正处于 alpha public preview 阶段。在本机调度模型稳定下来之前,UI 和协议细节还会继续调整。
210
+
211
+ ## License
212
+
213
+ Apache-2.0。详见 [LICENSE](LICENSE)。
package/SECURITY.md CHANGED
@@ -43,6 +43,5 @@ Please include:
43
43
 
44
44
  - Running Hive as a shared server for multiple users.
45
45
  - Exposing Hive through a public tunnel or reverse proxy.
46
- - Windows production support.
46
+ - Operating Hive as a hardened production service.
47
47
  - Sandboxing third-party CLI agents beyond the controls provided by those CLIs.
48
-
Binary file
@@ -81,6 +81,9 @@ export const createAgentRuntime = (agentManager, agentRunStore, sessionStore, ge
81
81
  },
82
82
  async startAgent(workspace, agentId, input) {
83
83
  launchCache.setWorkspaceId(agentId, workspace.id);
84
+ const activeRun = getActiveRunByAgent(registry, launchCache.getWorkspaceId, syncRun, workspace.id, agentId);
85
+ if (activeRun)
86
+ return activeRun;
84
87
  return startLiveRun(workspace, agentId, launchCache.get(workspace.id, agentId), input.hivePort);
85
88
  },
86
89
  stopAgentRun(runId) {
@@ -1 +1 @@
1
- {"version":3,"file":"agent-runtime.js","sourceRoot":"","sources":["../../../src/server/agent-runtime.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-runtime.js","sourceRoot":"","sources":["../../../src/server/agent-runtime.ts"],"names":[],"mappings":"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"}