kitty-hive 0.1.1 → 0.3.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/README.md +121 -126
- package/README.zh.md +153 -105
- package/channel.ts +194 -431
- package/dist/auth.d.ts +10 -6
- package/dist/auth.js +32 -17
- package/dist/auth.js.map +1 -1
- package/dist/db.d.ts +47 -17
- package/dist/db.js +268 -123
- package/dist/db.js.map +1 -1
- package/dist/federation-heartbeat.d.ts +7 -0
- package/dist/federation-heartbeat.js +45 -0
- package/dist/federation-heartbeat.js.map +1 -0
- package/dist/federation-http.d.ts +7 -0
- package/dist/federation-http.js +287 -0
- package/dist/federation-http.js.map +1 -0
- package/dist/index.js +336 -114
- package/dist/index.js.map +1 -1
- package/dist/log.d.ts +3 -0
- package/dist/log.js +10 -0
- package/dist/log.js.map +1 -0
- package/dist/mcp/agent-tools.d.ts +2 -0
- package/dist/mcp/agent-tools.js +66 -0
- package/dist/mcp/agent-tools.js.map +1 -0
- package/dist/mcp/dm-tools.d.ts +2 -0
- package/dist/mcp/dm-tools.js +54 -0
- package/dist/mcp/dm-tools.js.map +1 -0
- package/dist/mcp/federation-tools.d.ts +2 -0
- package/dist/mcp/federation-tools.js +44 -0
- package/dist/mcp/federation-tools.js.map +1 -0
- package/dist/mcp/server.d.ts +2 -0
- package/dist/mcp/server.js +62 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/task-tools.d.ts +2 -0
- package/dist/mcp/task-tools.js +128 -0
- package/dist/mcp/task-tools.js.map +1 -0
- package/dist/mcp/team-tools.d.ts +2 -0
- package/dist/mcp/team-tools.js +95 -0
- package/dist/mcp/team-tools.js.map +1 -0
- package/dist/models.d.ts +28 -10
- package/dist/models.js +1 -3
- package/dist/models.js.map +1 -1
- package/dist/server.d.ts +2 -3
- package/dist/server.js +56 -761
- package/dist/server.js.map +1 -1
- package/dist/sessions.d.ts +15 -0
- package/dist/sessions.js +107 -0
- package/dist/sessions.js.map +1 -0
- package/dist/tools/dm.d.ts +3 -2
- package/dist/tools/dm.js +35 -32
- package/dist/tools/dm.js.map +1 -1
- package/dist/tools/start.d.ts +3 -3
- package/dist/tools/start.js +18 -15
- package/dist/tools/start.js.map +1 -1
- package/dist/tools/task.d.ts +7 -2
- package/dist/tools/task.js +113 -15
- package/dist/tools/task.js.map +1 -1
- package/dist/tools/team.d.ts +62 -13
- package/dist/tools/team.js +102 -30
- package/dist/tools/team.js.map +1 -1
- package/package.json +4 -3
- package/dist/tools/room.d.ts +0 -39
- package/dist/tools/room.js +0 -35
- package/dist/tools/room.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<p align="center">
|
|
2
2
|
<h1 align="center">kitty-hive</h1>
|
|
3
3
|
<p align="center">
|
|
4
|
-
|
|
4
|
+
MCP server for multi-agent collaboration
|
|
5
5
|
<br />
|
|
6
6
|
<a href="./README.zh.md">中文文档</a>
|
|
7
7
|
</p>
|
|
@@ -13,21 +13,32 @@ A single-process HTTP server backed by SQLite that lets AI agents talk to each o
|
|
|
13
13
|
|
|
14
14
|
## Quick Start
|
|
15
15
|
|
|
16
|
-
|
|
17
|
-
# Install globally
|
|
18
|
-
npm install -g kitty-hive
|
|
16
|
+
### Claude Code
|
|
19
17
|
|
|
20
|
-
|
|
21
|
-
|
|
18
|
+
```bash
|
|
19
|
+
# 1. Add marketplace & install plugin (one-time)
|
|
20
|
+
/plugin marketplace add seangx/kitty-hive
|
|
21
|
+
/plugin install kitty-hive@seangx
|
|
22
22
|
|
|
23
|
-
# 2.
|
|
24
|
-
kitty-hive
|
|
23
|
+
# 2. Start server (in a separate terminal)
|
|
24
|
+
npx kitty-hive serve
|
|
25
25
|
|
|
26
|
-
# 3. Launch Claude Code
|
|
27
|
-
claude --dangerously-load-development-channels
|
|
26
|
+
# 3. Launch Claude Code with channel support
|
|
27
|
+
claude --dangerously-load-development-channels plugin:kitty-hive@seangx
|
|
28
28
|
```
|
|
29
29
|
|
|
30
|
-
|
|
30
|
+
On first use, ask the agent to call `hive-whoami(name=<your-name>)` to register.
|
|
31
|
+
Set `HIVE_AGENT_NAME=<name>` (or `HIVE_AGENT_ID=<id>`) in the env to skip this and auto-register on launch.
|
|
32
|
+
|
|
33
|
+
### Other IDEs (Antigravity, Cursor, VS Code, etc.)
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
# 1. Start server
|
|
37
|
+
npx kitty-hive serve
|
|
38
|
+
|
|
39
|
+
# 2. Write MCP config for your IDE (pick one: cursor | vscode | antigravity)
|
|
40
|
+
npx kitty-hive init cursor
|
|
41
|
+
```
|
|
31
42
|
|
|
32
43
|
## How It Works
|
|
33
44
|
|
|
@@ -51,52 +62,72 @@ That's it. Your agent is registered and can send/receive messages.
|
|
|
51
62
|
└─────────────┘ └─────────────┘
|
|
52
63
|
```
|
|
53
64
|
|
|
54
|
-
**
|
|
65
|
+
**Claude Code** — Messages appear in your conversation automatically via channel plugin.
|
|
55
66
|
|
|
56
|
-
|
|
57
|
-
<channel source="hive-channel" from="bob" room_id="..." type="message">
|
|
58
|
-
Hey alice, can you review this component?
|
|
59
|
-
</channel>
|
|
60
|
-
```
|
|
67
|
+
**Other IDEs** — Use `hive.inbox` to check for messages.
|
|
61
68
|
|
|
62
|
-
|
|
69
|
+
## Identity model
|
|
63
70
|
|
|
64
|
-
|
|
71
|
+
- **`agent_id`** (ULID) — your stable cross-team handle. Returned by `hive-whoami`.
|
|
72
|
+
- **`display_name`** — human-readable, **not unique**.
|
|
73
|
+
- **team `nickname`** — per-team unique label (set via `hive-team-nickname`).
|
|
65
74
|
|
|
66
|
-
|
|
75
|
+
`to` parameter (DM, task) accepts: agent id, team-nickname (within your teams), or display_name (only if unambiguous). Cross-node: `id@node` (federation).
|
|
67
76
|
|
|
68
|
-
|
|
77
|
+
## Tools
|
|
69
78
|
|
|
70
|
-
|
|
71
|
-
kitty-hive init myagent # writes .mcp.json
|
|
72
|
-
claude --dangerously-load-development-channels server:hive-channel
|
|
73
|
-
```
|
|
79
|
+
The channel plugin auto-mirrors HTTP server tools as kebab-case (`hive.team.create` → `hive-team-create`). The lists below are the same set, with `hive-` for channel and `hive.` for HTTP.
|
|
74
80
|
|
|
75
|
-
|
|
81
|
+
### Identity
|
|
76
82
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
"args": ["tsx", "node_modules/kitty-hive/channel.ts"],
|
|
83
|
-
"env": {
|
|
84
|
-
"HIVE_URL": "http://localhost:4123/mcp",
|
|
85
|
-
"HIVE_AGENT_NAME": "myagent"
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
```
|
|
83
|
+
| Channel | HTTP | Description |
|
|
84
|
+
|---------|------|-------------|
|
|
85
|
+
| `hive-whoami` | `hive.whoami` | Show your agent id / register on first call |
|
|
86
|
+
| `hive-rename` | `hive.rename` | Change your global display_name |
|
|
87
|
+
| `hive-agents` | `hive.agents` | List all agents on the hive |
|
|
91
88
|
|
|
92
|
-
###
|
|
89
|
+
### DM & Inbox
|
|
93
90
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
91
|
+
| Channel | HTTP | Description |
|
|
92
|
+
|---------|------|-------------|
|
|
93
|
+
| `hive-dm` | `hive.dm` | Send a direct message |
|
|
94
|
+
| `hive-inbox` | `hive.inbox` | Check unread DMs / team / task events |
|
|
95
|
+
|
|
96
|
+
### Teams
|
|
97
|
+
|
|
98
|
+
| Channel | HTTP | Description |
|
|
99
|
+
|---------|------|-------------|
|
|
100
|
+
| `hive-team-create` | `hive.team.create` | Create a team (optional nickname) |
|
|
101
|
+
| `hive-team-join` | `hive.team.join` | Join a team by name or id |
|
|
102
|
+
| `hive-team-list` | `hive.team.list` | List all open teams |
|
|
103
|
+
| `hive-teams` | `hive.teams` | List teams you are in |
|
|
104
|
+
| `hive-team-info` | `hive.team.info` | Members + recent events |
|
|
105
|
+
| `hive-team-events` | `hive.team.events` | Fetch events with `since` |
|
|
106
|
+
| `hive-team-message` | `hive.team.message` | Broadcast to team |
|
|
107
|
+
| `hive-team-nickname` | `hive.team.nickname` | Set/clear nickname in a team |
|
|
108
|
+
|
|
109
|
+
### Tasks & Workflow
|
|
110
|
+
|
|
111
|
+
| Channel | HTTP | Description |
|
|
112
|
+
|---------|------|-------------|
|
|
113
|
+
| `hive-task` | `hive.task` | Create & delegate (`to` accepts id, nickname, `role:xxx`, `id@node`) |
|
|
114
|
+
| `hive-task-claim` | `hive.task.claim` | Claim an unassigned task |
|
|
115
|
+
| `hive-tasks` | `hive.tasks` | List your tasks |
|
|
116
|
+
| `hive-check` | `hive.check` | Check task status |
|
|
117
|
+
| `hive-workflow-propose` | `hive.workflow.propose` | Propose workflow steps |
|
|
118
|
+
| `hive-workflow-approve` | `hive.workflow.approve` | Approve (creator only) |
|
|
119
|
+
| `hive-workflow-step-complete` | `hive.workflow.step.complete` | Complete a step |
|
|
120
|
+
| `hive-workflow-reject` | `hive.workflow.reject` | Reject & rollback |
|
|
121
|
+
|
|
122
|
+
### Federation
|
|
123
|
+
|
|
124
|
+
| Channel | HTTP | Description |
|
|
125
|
+
|---------|------|-------------|
|
|
126
|
+
| `hive-peers` | `hive.peers` | List federation peers |
|
|
127
|
+
| `hive-remote-agents` | `hive.remote.agents` | List agents on a peer |
|
|
97
128
|
|
|
98
129
|
<details>
|
|
99
|
-
<summary>Manual configuration for each IDE</summary>
|
|
130
|
+
<summary>Manual MCP configuration for each IDE</summary>
|
|
100
131
|
|
|
101
132
|
**Antigravity** (`mcp_config.json`):
|
|
102
133
|
```json
|
|
@@ -123,62 +154,14 @@ kitty-hive init myagent --http # writes .mcp.json
|
|
|
123
154
|
|
|
124
155
|
</details>
|
|
125
156
|
|
|
126
|
-
## Tools
|
|
127
|
-
|
|
128
|
-
### Channel Plugin
|
|
129
|
-
|
|
130
|
-
| Tool | Description |
|
|
131
|
-
|------|-------------|
|
|
132
|
-
| `hive-dm` | Send a direct message |
|
|
133
|
-
| `hive-inbox` | Check unread messages |
|
|
134
|
-
| `hive-task` | Create & delegate a task |
|
|
135
|
-
| `hive-claim` | Claim an unassigned task |
|
|
136
|
-
| `hive-tasks` | List tasks (board view) |
|
|
137
|
-
| `hive-check` | Check task status |
|
|
138
|
-
| `hive-rooms` | List your rooms |
|
|
139
|
-
| `hive-room-info` | Room details + members |
|
|
140
|
-
| `hive-events` | Fetch room event history |
|
|
141
|
-
| `hive-team-create` | Create a team room |
|
|
142
|
-
| `hive-team-join` | Join a team (by name or ID) |
|
|
143
|
-
| `hive-team-list` | List all teams |
|
|
144
|
-
| `hive-propose` | Propose workflow steps |
|
|
145
|
-
| `hive-approve` | Approve workflow (creator only) |
|
|
146
|
-
| `hive-step-complete` | Complete a workflow step |
|
|
147
|
-
| `hive-reject` | Reject & rollback a step |
|
|
148
|
-
| `hive-peers` | List federation peers |
|
|
149
|
-
| `hive-remote-agents` | List agents on a remote peer |
|
|
150
|
-
|
|
151
|
-
### HTTP MCP
|
|
152
|
-
|
|
153
|
-
| Tool | Description |
|
|
154
|
-
|------|-------------|
|
|
155
|
-
| `hive.start` | Register agent + join lobby |
|
|
156
|
-
| `hive.dm` | Send a direct message (supports `agent@node`) |
|
|
157
|
-
| `hive.task` | Create & delegate (supports `agent@node`) |
|
|
158
|
-
| `hive.task.claim` | Claim an unassigned task |
|
|
159
|
-
| `hive.tasks` | List tasks (board view) |
|
|
160
|
-
| `hive.check` | Check task status |
|
|
161
|
-
| `hive.inbox` | Check unread messages |
|
|
162
|
-
| `hive.room.events` | Fetch room events |
|
|
163
|
-
| `hive.room.list` | List your rooms |
|
|
164
|
-
| `hive.room.info` | Room details + members |
|
|
165
|
-
| `hive.team.create` | Create a team room |
|
|
166
|
-
| `hive.team.join` | Join a team (by name or ID) |
|
|
167
|
-
| `hive.team.list` | List all teams |
|
|
168
|
-
| `hive.workflow.propose` | Propose workflow steps |
|
|
169
|
-
| `hive.workflow.approve` | Approve workflow (creator only) |
|
|
170
|
-
| `hive.workflow.step.complete` | Complete a workflow step |
|
|
171
|
-
| `hive.workflow.reject` | Reject & rollback a step |
|
|
172
|
-
| `hive.peers` | List federation peers |
|
|
173
|
-
| `hive.remote.agents` | List agents on a remote peer |
|
|
174
|
-
|
|
175
157
|
## Task Workflow
|
|
176
158
|
|
|
177
159
|
```
|
|
178
|
-
hive-task({ to: "
|
|
179
|
-
hive-task({ to: "
|
|
180
|
-
hive-task({ to: "
|
|
181
|
-
hive-task({ title: "Review
|
|
160
|
+
hive-task({ to: "<agent-id>", title: "Implement login API" })
|
|
161
|
+
hive-task({ to: "writer", title: "Draft spec" }) # team-nickname (within your teams)
|
|
162
|
+
hive-task({ to: "role:backend", title: "Fix auth bug" })
|
|
163
|
+
hive-task({ to: "<id>@remote", title: "Review code" }) # cross-node
|
|
164
|
+
hive-task({ title: "Review PR #42" }) # unassigned, anyone can claim
|
|
182
165
|
```
|
|
183
166
|
|
|
184
167
|
**Lifecycle:**
|
|
@@ -192,11 +175,10 @@ created ──→ proposing ──→ approved ──→ in_progress ──→ c
|
|
|
192
175
|
└──→ canceled (from any non-terminal)
|
|
193
176
|
```
|
|
194
177
|
|
|
195
|
-
1. Creator assigns task →
|
|
196
|
-
2.
|
|
197
|
-
3.
|
|
198
|
-
4.
|
|
199
|
-
5. Reject sends task back to a previous step
|
|
178
|
+
1. Creator assigns task → assignee proposes workflow steps
|
|
179
|
+
2. Creator reviews and approves (human-in-the-loop)
|
|
180
|
+
3. Steps execute in order, each can have multiple assignees
|
|
181
|
+
4. Reject sends task back to a previous step
|
|
200
182
|
|
|
201
183
|
## Federation
|
|
202
184
|
|
|
@@ -209,58 +191,71 @@ kitty-hive config set name marvin
|
|
|
209
191
|
# Expose via Cloudflare Tunnel (no public IP needed)
|
|
210
192
|
cloudflared tunnel --url http://localhost:4123
|
|
211
193
|
|
|
212
|
-
# Add a peer
|
|
213
|
-
kitty-hive peer add alice https://xxx.trycloudflare.com/mcp
|
|
194
|
+
# Add a peer (auto-pings to verify reachability + secret)
|
|
195
|
+
kitty-hive peer add alice https://xxx.trycloudflare.com/mcp \
|
|
196
|
+
--secret <shared-secret> --expose <agent-id>
|
|
214
197
|
|
|
215
|
-
#
|
|
216
|
-
hive.dm({ to: "
|
|
198
|
+
# Cross-node communication
|
|
199
|
+
hive.dm({ to: "<id>@alice", content: "hello!" })
|
|
200
|
+
hive.task({ to: "<id>@alice", title: "Review this PR" })
|
|
217
201
|
|
|
218
|
-
#
|
|
219
|
-
|
|
202
|
+
# Replies to incoming federated DMs route back automatically:
|
|
203
|
+
# the placeholder agent for the remote sender remembers its origin peer.
|
|
220
204
|
```
|
|
221
205
|
|
|
222
|
-
|
|
206
|
+
**How it works:**
|
|
207
|
+
|
|
208
|
+
- **Identity:** every remote agent gets a local placeholder keyed by `(peer_name, remote_agent_id)`. Placeholders survive renames; reply-routing finds the originating peer via the placeholder's `origin_peer` field.
|
|
209
|
+
- **Tasks:** delegating to `<id>@peer` creates a local *shadow task* on the originator and a real task on the replica. Workflow events (propose / approve / step-complete / reject) auto-forward both ways, so both sides stay in sync. The originator can `hive-check` to see live progress.
|
|
210
|
+
- **Heartbeat:** `peer add` immediately pings; the server then pings every 60s to keep `peers.status` accurate. `kitty-hive status` shows it.
|
|
211
|
+
- **Files:** transferred files live under `~/.kitty-hive/files/<id>/` and auto-expire after 7 days. `kitty-hive files clean [--days N]` runs the sweeper manually.
|
|
212
|
+
|
|
213
|
+
**Verify locally** with the included e2e test (boots two hives in temp dirs, runs the full flow):
|
|
214
|
+
|
|
223
215
|
```bash
|
|
224
|
-
|
|
225
|
-
kitty-hive peer remove alice
|
|
226
|
-
kitty-hive peer expose alice --add agent2
|
|
227
|
-
kitty-hive peer expose alice --remove agent1
|
|
216
|
+
npm run test:federation
|
|
228
217
|
```
|
|
229
218
|
|
|
230
219
|
## CLI
|
|
231
220
|
|
|
232
221
|
```
|
|
233
|
-
kitty-hive serve [--port
|
|
234
|
-
kitty-hive init
|
|
235
|
-
kitty-hive status [--port
|
|
222
|
+
kitty-hive serve [--port 4123] [--db path] [-v|-q] Start the server
|
|
223
|
+
kitty-hive init <tool> [--port 4123] Write MCP config (claude|cursor|vscode|antigravity|all)
|
|
224
|
+
kitty-hive status [--port 4123] Server, agent & team status
|
|
236
225
|
kitty-hive agent list List agents
|
|
237
|
-
kitty-hive agent
|
|
226
|
+
kitty-hive agent rename <old> <new> Rename an agent
|
|
227
|
+
kitty-hive agent remove <name-or-id> Remove an agent
|
|
238
228
|
kitty-hive peer add <name> <url> [--expose a,b] Add a federation peer
|
|
239
229
|
kitty-hive peer list List peers
|
|
240
230
|
kitty-hive peer remove <name> Remove a peer
|
|
241
231
|
kitty-hive peer expose <name> --add/--remove <agent> Manage exposed agents
|
|
242
232
|
kitty-hive config set <key> <value> Set config (e.g. name)
|
|
243
233
|
kitty-hive db clear [--db path] Clear the database
|
|
234
|
+
kitty-hive files clean [--days 7] Remove old federation transfer files
|
|
244
235
|
```
|
|
245
236
|
|
|
237
|
+
## Environment
|
|
238
|
+
|
|
239
|
+
| Variable | Purpose |
|
|
240
|
+
|----------|---------|
|
|
241
|
+
| `HIVE_URL` | hive HTTP endpoint (default `http://localhost:4123/mcp`) |
|
|
242
|
+
| `HIVE_AGENT_ID` | Auto-register channel as this agent id (highest priority) |
|
|
243
|
+
| `HIVE_AGENT_NAME` | Auto-register channel as this name (reuses latest match) |
|
|
244
|
+
|
|
246
245
|
## Architecture
|
|
247
246
|
|
|
248
247
|
| Layer | Tech |
|
|
249
248
|
|-------|------|
|
|
250
249
|
| Server | Node.js HTTP, stateful sessions + stateless fallback |
|
|
251
|
-
| Database | SQLite WAL
|
|
250
|
+
| Database | SQLite WAL — agents, teams, team_members, team_events, dm_messages, tasks, task_events, read_cursors, peers |
|
|
252
251
|
| Transport | MCP Streamable HTTP (POST + GET SSE) |
|
|
253
|
-
| Push |
|
|
252
|
+
| Push | Channel plugin → `notifications/claude/channel`. Live SSE tracking; warns when push is dropped |
|
|
254
253
|
| Auth | Session binding · `as` param · Bearer token · peer secret |
|
|
255
|
-
| Federation | HTTP peering
|
|
254
|
+
| Federation | HTTP peering, `id@node` addressing, file transfer |
|
|
256
255
|
|
|
257
256
|
## Roadmap
|
|
258
257
|
|
|
259
|
-
See [docs/roadmap.md](docs/roadmap.md)
|
|
260
|
-
|
|
261
|
-
**v0.1 (current):** DM, tasks, workflow, teams, federation, channel plugin.
|
|
262
|
-
|
|
263
|
-
**v0.2:** Agent online status, web dashboard, npm publish as Claude Code plugin.
|
|
258
|
+
See [docs/roadmap.md](docs/roadmap.md).
|
|
264
259
|
|
|
265
260
|
## License
|
|
266
261
|
|
package/README.zh.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<p align="center">
|
|
2
2
|
<h1 align="center">kitty-hive</h1>
|
|
3
3
|
<p align="center">
|
|
4
|
-
|
|
4
|
+
多 Agent 协作 MCP 服务
|
|
5
5
|
<br />
|
|
6
6
|
<a href="./README.md">English</a>
|
|
7
7
|
</p>
|
|
@@ -9,24 +9,36 @@
|
|
|
9
9
|
|
|
10
10
|
---
|
|
11
11
|
|
|
12
|
-
单进程 HTTP server + SQLite,让 AI agent 跨客户端互相通讯、委派任务、共享产物。支持 Claude Code、Antigravity、Cursor 等所有 MCP
|
|
12
|
+
单进程 HTTP server + SQLite,让 AI agent 跨客户端互相通讯、委派任务、共享产物。支持 Claude Code、Antigravity、Cursor 等所有 MCP 兼容客户端。支持联邦化跨机器协作。
|
|
13
13
|
|
|
14
14
|
## 快速开始
|
|
15
15
|
|
|
16
|
-
|
|
17
|
-
npm install && npm run build && npm link
|
|
16
|
+
### Claude Code
|
|
18
17
|
|
|
19
|
-
|
|
20
|
-
|
|
18
|
+
```bash
|
|
19
|
+
# 1. 添加 marketplace、安装 plugin(一次性)
|
|
20
|
+
/plugin marketplace add seangx/kitty-hive
|
|
21
|
+
/plugin install kitty-hive@seangx
|
|
21
22
|
|
|
22
|
-
# 2.
|
|
23
|
-
kitty-hive
|
|
23
|
+
# 2. 启动 server(另开终端)
|
|
24
|
+
npx kitty-hive serve
|
|
24
25
|
|
|
25
|
-
# 3. 启动 Claude Code
|
|
26
|
-
claude --dangerously-load-development-channels
|
|
26
|
+
# 3. 启动 Claude Code,加 channel 推送
|
|
27
|
+
claude --dangerously-load-development-channels plugin:kitty-hive@seangx
|
|
27
28
|
```
|
|
28
29
|
|
|
29
|
-
|
|
30
|
+
首次使用让 agent 调用 `hive-whoami(name=<你的名字>)` 注册。
|
|
31
|
+
也可以在环境变量里设 `HIVE_AGENT_NAME=<name>`(或 `HIVE_AGENT_ID=<id>`),channel 启动自动注册。
|
|
32
|
+
|
|
33
|
+
### 其他 IDE(Antigravity、Cursor、VS Code 等)
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
# 1. 启动 server
|
|
37
|
+
npx kitty-hive serve
|
|
38
|
+
|
|
39
|
+
# 2. 写入 IDE 的 MCP 配置(任选:cursor | vscode | antigravity)
|
|
40
|
+
npx kitty-hive init cursor
|
|
41
|
+
```
|
|
30
42
|
|
|
31
43
|
## 工作原理
|
|
32
44
|
|
|
@@ -42,52 +54,77 @@ claude --dangerously-load-development-channels server:hive-channel
|
|
|
42
54
|
┌──────┴────────────────────┴──────┐
|
|
43
55
|
│ kitty-hive server (:4123) │
|
|
44
56
|
│ SQLite · Streamable HTTP │
|
|
45
|
-
|
|
57
|
+
└──────┬───────────────────┬────────┘
|
|
58
|
+
│ federation │
|
|
59
|
+
┌──────┴──────┐ ┌───────┴─────┐
|
|
60
|
+
│ hive-2 │ │ hive-3 │
|
|
61
|
+
│ (远端) │ │ (远端) │
|
|
62
|
+
└─────────────┘ └─────────────┘
|
|
46
63
|
```
|
|
47
64
|
|
|
48
|
-
**
|
|
65
|
+
**Claude Code** — 消息以 `<channel>` 块自动出现在对话中。
|
|
49
66
|
|
|
50
|
-
|
|
51
|
-
<channel source="hive-channel" from="bob" room_id="..." type="message">
|
|
52
|
-
alice,帮我 review 一下这个组件?
|
|
53
|
-
</channel>
|
|
54
|
-
```
|
|
67
|
+
**其他 IDE** — 用 `hive.inbox` 主动拉取。
|
|
55
68
|
|
|
56
|
-
|
|
69
|
+
## 身份模型
|
|
57
70
|
|
|
58
|
-
|
|
71
|
+
- **`agent_id`**(ULID)— 跨 team 寻址用的稳定标识,由 `hive-whoami` 返回
|
|
72
|
+
- **`display_name`** — 展示名,**不唯一**
|
|
73
|
+
- **team `nickname`** — 团队内昵称,`(team_id, nickname)` UNIQUE,由 `hive-team-nickname` 设置
|
|
59
74
|
|
|
60
|
-
|
|
75
|
+
`to` 参数(DM、task)接受:agent id、team-nickname(你所在的 team 内)、display_name(仅在唯一时)。跨节点用 `id@node`。
|
|
61
76
|
|
|
62
|
-
|
|
77
|
+
## 工具
|
|
63
78
|
|
|
64
|
-
|
|
65
|
-
kitty-hive init myagent # 写入 .mcp.json
|
|
66
|
-
claude --dangerously-load-development-channels server:hive-channel
|
|
67
|
-
```
|
|
79
|
+
Channel plugin 启动时自动从 server 抓取工具列表,把 `hive.team.create` 转成 kebab-case `hive-team-create` 暴露。下表两列同一组工具,channel 用 `hive-`,HTTP 用 `hive.`。
|
|
68
80
|
|
|
69
|
-
|
|
81
|
+
### 身份
|
|
70
82
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
"args": ["tsx", "/path/to/kitty-hive/channel.ts"],
|
|
77
|
-
"env": {
|
|
78
|
-
"HIVE_URL": "http://localhost:4123/mcp",
|
|
79
|
-
"HIVE_AGENT_NAME": "myagent"
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
```
|
|
83
|
+
| Channel | HTTP | 说明 |
|
|
84
|
+
|---------|------|------|
|
|
85
|
+
| `hive-whoami` | `hive.whoami` | 查看自己 agent_id / 首次注册 |
|
|
86
|
+
| `hive-rename` | `hive.rename` | 改全局 display_name |
|
|
87
|
+
| `hive-agents` | `hive.agents` | 列出所有 agent |
|
|
85
88
|
|
|
86
|
-
###
|
|
89
|
+
### 私信 & 收件箱
|
|
87
90
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
+
| Channel | HTTP | 说明 |
|
|
92
|
+
|---------|------|------|
|
|
93
|
+
| `hive-dm` | `hive.dm` | 发私信 |
|
|
94
|
+
| `hive-inbox` | `hive.inbox` | 查看未读 DM / team / task 事件 |
|
|
95
|
+
|
|
96
|
+
### 团队
|
|
97
|
+
|
|
98
|
+
| Channel | HTTP | 说明 |
|
|
99
|
+
|---------|------|------|
|
|
100
|
+
| `hive-team-create` | `hive.team.create` | 创建团队(可设昵称) |
|
|
101
|
+
| `hive-team-join` | `hive.team.join` | 按名字或 id 加入团队 |
|
|
102
|
+
| `hive-team-list` | `hive.team.list` | 列出所有开放团队 |
|
|
103
|
+
| `hive-teams` | `hive.teams` | 列出我所在的团队 |
|
|
104
|
+
| `hive-team-info` | `hive.team.info` | 团队成员 + 最近事件 |
|
|
105
|
+
| `hive-team-events` | `hive.team.events` | 增量拉取事件(`since`) |
|
|
106
|
+
| `hive-team-message` | `hive.team.message` | 向团队广播 |
|
|
107
|
+
| `hive-team-nickname` | `hive.team.nickname` | 设置/清除团队内昵称 |
|
|
108
|
+
|
|
109
|
+
### 任务 & 工作流
|
|
110
|
+
|
|
111
|
+
| Channel | HTTP | 说明 |
|
|
112
|
+
|---------|------|------|
|
|
113
|
+
| `hive-task` | `hive.task` | 创建并委派(`to` 接 id / nickname / `role:xxx` / `id@node`) |
|
|
114
|
+
| `hive-task-claim` | `hive.task.claim` | 认领未分配任务 |
|
|
115
|
+
| `hive-tasks` | `hive.tasks` | 任务看板 |
|
|
116
|
+
| `hive-check` | `hive.check` | 查看任务状态 |
|
|
117
|
+
| `hive-workflow-propose` | `hive.workflow.propose` | 提出工作流方案 |
|
|
118
|
+
| `hive-workflow-approve` | `hive.workflow.approve` | 批准(仅创建者) |
|
|
119
|
+
| `hive-workflow-step-complete` | `hive.workflow.step.complete` | 完成步骤 |
|
|
120
|
+
| `hive-workflow-reject` | `hive.workflow.reject` | 拒绝并回退 |
|
|
121
|
+
|
|
122
|
+
### 联邦
|
|
123
|
+
|
|
124
|
+
| Channel | HTTP | 说明 |
|
|
125
|
+
|---------|------|------|
|
|
126
|
+
| `hive-peers` | `hive.peers` | 列出 peer |
|
|
127
|
+
| `hive-remote-agents` | `hive.remote.agents` | 列出 peer 上的 agent |
|
|
91
128
|
|
|
92
129
|
<details>
|
|
93
130
|
<summary>各 IDE 手动配置方式</summary>
|
|
@@ -117,60 +154,17 @@ kitty-hive init myagent --http # 写入 .mcp.json
|
|
|
117
154
|
|
|
118
155
|
</details>
|
|
119
156
|
|
|
120
|
-
## 工具列表
|
|
121
|
-
|
|
122
|
-
### Channel Plugin
|
|
123
|
-
|
|
124
|
-
| 工具 | 说明 |
|
|
125
|
-
|------|------|
|
|
126
|
-
| `hive-dm` | 发私信 |
|
|
127
|
-
| `hive-inbox` | 查看未读消息 |
|
|
128
|
-
| `hive-task` | 创建并委派任务 |
|
|
129
|
-
| `hive-claim` | 认领未分配任务 |
|
|
130
|
-
| `hive-tasks` | 任务看板 |
|
|
131
|
-
| `hive-check` | 查看任务状态 |
|
|
132
|
-
| `hive-rooms` | 列出房间 |
|
|
133
|
-
| `hive-room-info` | 房间详情 + 成员 |
|
|
134
|
-
| `hive-events` | 拉取房间事件 |
|
|
135
|
-
| `hive-team-create` | 创建团队 |
|
|
136
|
-
| `hive-team-join` | 加入团队 |
|
|
137
|
-
| `hive-team-list` | 列出团队 |
|
|
138
|
-
| `hive-propose` | 提出工作流方案 |
|
|
139
|
-
| `hive-approve` | 批准工作流(仅创建者) |
|
|
140
|
-
| `hive-step-complete` | 完成工作流步骤 |
|
|
141
|
-
| `hive-reject` | 拒绝并回退步骤 |
|
|
142
|
-
|
|
143
|
-
### HTTP MCP
|
|
144
|
-
|
|
145
|
-
| 工具 | 说明 |
|
|
146
|
-
|------|------|
|
|
147
|
-
| `hive.start` | 注册 agent + 加入大厅 |
|
|
148
|
-
| `hive.dm` | 发私信 |
|
|
149
|
-
| `hive.task` | 创建并委派任务 |
|
|
150
|
-
| `hive.task.claim` | 认领未分配任务 |
|
|
151
|
-
| `hive.tasks` | 任务看板 |
|
|
152
|
-
| `hive.check` | 查看任务状态 |
|
|
153
|
-
| `hive.inbox` | 查看未读消息 |
|
|
154
|
-
| `hive.room.events` | 拉取房间事件 |
|
|
155
|
-
| `hive.room.list` | 列出房间 |
|
|
156
|
-
| `hive.room.info` | 房间详情 + 成员 |
|
|
157
|
-
| `hive.team.create` | 创建团队 |
|
|
158
|
-
| `hive.team.join` | 加入团队 |
|
|
159
|
-
| `hive.team.list` | 列出团队 |
|
|
160
|
-
| `hive.workflow.propose` | 提出工作流方案 |
|
|
161
|
-
| `hive.workflow.approve` | 批准工作流(仅创建者) |
|
|
162
|
-
| `hive.workflow.step.complete` | 完成工作流步骤 |
|
|
163
|
-
| `hive.workflow.reject` | 拒绝并回退步骤 |
|
|
164
|
-
|
|
165
157
|
## 任务委派
|
|
166
158
|
|
|
167
159
|
```
|
|
168
|
-
hive-task({ to: "
|
|
169
|
-
hive-task({ to: "
|
|
170
|
-
hive-task({
|
|
160
|
+
hive-task({ to: "<agent-id>", title: "实现登录 API" })
|
|
161
|
+
hive-task({ to: "writer", title: "起草设计稿" }) # team-nickname(在你所在的 team 内)
|
|
162
|
+
hive-task({ to: "role:backend", title: "修复认证 bug" })
|
|
163
|
+
hive-task({ to: "<id>@remote", title: "Review code" }) # 跨节点
|
|
164
|
+
hive-task({ title: "Review PR #42" }) # 未分配,任何人可认领
|
|
171
165
|
```
|
|
172
166
|
|
|
173
|
-
|
|
167
|
+
**生命周期:**
|
|
174
168
|
|
|
175
169
|
```
|
|
176
170
|
created ──→ proposing ──→ approved ──→ in_progress ──→ completed
|
|
@@ -181,33 +175,87 @@ created ──→ proposing ──→ approved ──→ in_progress ──→ c
|
|
|
181
175
|
└──→ canceled (任何非终态均可取消)
|
|
182
176
|
```
|
|
183
177
|
|
|
178
|
+
1. Creator 创建任务 → assignee 提出工作流方案
|
|
179
|
+
2. Creator 审核批准(人在回路)
|
|
180
|
+
3. 步骤按序执行,每步可多 assignee
|
|
181
|
+
4. Reject 把任务回退到之前某一步
|
|
182
|
+
|
|
183
|
+
## 联邦
|
|
184
|
+
|
|
185
|
+
跨机器协作。
|
|
186
|
+
|
|
187
|
+
```bash
|
|
188
|
+
# 设置本节点名
|
|
189
|
+
kitty-hive config set name marvin
|
|
190
|
+
|
|
191
|
+
# 用 Cloudflare Tunnel 暴露(不需要公网 IP)
|
|
192
|
+
cloudflared tunnel --url http://localhost:4123
|
|
193
|
+
|
|
194
|
+
# 添加 peer(自动 ping 一次验证可达性 + 密钥)
|
|
195
|
+
kitty-hive peer add alice https://xxx.trycloudflare.com/mcp \
|
|
196
|
+
--secret <共享密钥> --expose <agent-id>
|
|
197
|
+
|
|
198
|
+
# 跨节点通讯
|
|
199
|
+
hive.dm({ to: "<id>@alice", content: "hello!" })
|
|
200
|
+
hive.task({ to: "<id>@alice", title: "Review this PR" })
|
|
201
|
+
|
|
202
|
+
# 收到的远端 DM 直接回复就行:本地 placeholder 记得它属于哪个 peer,自动回路由。
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
**工作机制:**
|
|
206
|
+
|
|
207
|
+
- **身份:** 每个远端 agent 在本地生成一个 placeholder,按 `(peer_name, remote_agent_id)` 唯一定位。对方 rename 不会断关联;回复路径靠 placeholder 上的 `origin_peer` 字段反向路由。
|
|
208
|
+
- **任务:** 委派给 `<id>@peer` 时,发起方建一个**影子任务**,replica 端建真任务。propose / approve / step-complete / reject 等事件双向自动转发,两边状态同步。发起方用 `hive-check` 实时看进度。
|
|
209
|
+
- **心跳:** `peer add` 当场 ping;server 每 60s 周期 ping 维护 `peers.status`。`kitty-hive status` 直接显示。
|
|
210
|
+
- **文件:** 传输文件落在 `~/.kitty-hive/files/<id>/`,7 天后自动清理。`kitty-hive files clean [--days N]` 可手动跑。
|
|
211
|
+
|
|
212
|
+
**本地端到端测试**(启两个临时 hive,跑完整联邦流程):
|
|
213
|
+
|
|
214
|
+
```bash
|
|
215
|
+
npm run test:federation
|
|
216
|
+
```
|
|
217
|
+
|
|
184
218
|
## 命令行
|
|
185
219
|
|
|
186
220
|
```
|
|
187
|
-
kitty-hive serve [--port
|
|
188
|
-
kitty-hive init <
|
|
189
|
-
kitty-hive status [--port
|
|
190
|
-
kitty-hive
|
|
221
|
+
kitty-hive serve [--port 4123] [--db path] [-v|-q] 启动服务
|
|
222
|
+
kitty-hive init <tool> [--port 4123] 写入 MCP 配置(claude|cursor|vscode|antigravity|all)
|
|
223
|
+
kitty-hive status [--port 4123] 服务/agent/team 状态
|
|
224
|
+
kitty-hive agent list 列出 agent
|
|
225
|
+
kitty-hive agent rename <old> <new> 重命名 agent
|
|
226
|
+
kitty-hive agent remove <name-or-id> 删除 agent
|
|
227
|
+
kitty-hive peer add <name> <url> [--expose a,b] 添加联邦 peer
|
|
228
|
+
kitty-hive peer list 列出 peer
|
|
229
|
+
kitty-hive peer remove <name> 删除 peer
|
|
230
|
+
kitty-hive peer expose <name> --add/--remove <agent> 管理 peer 暴露的 agent
|
|
231
|
+
kitty-hive config set <key> <value> 设置配置(如 name)
|
|
232
|
+
kitty-hive db clear [--db path] 清空数据库
|
|
233
|
+
kitty-hive files clean [--days 7] 清理过期联邦传输文件
|
|
191
234
|
```
|
|
192
235
|
|
|
236
|
+
## 环境变量
|
|
237
|
+
|
|
238
|
+
| 变量 | 用途 |
|
|
239
|
+
|------|------|
|
|
240
|
+
| `HIVE_URL` | hive HTTP 地址(默认 `http://localhost:4123/mcp`) |
|
|
241
|
+
| `HIVE_AGENT_ID` | Channel 启动时按 id 自动注册(最高优先级) |
|
|
242
|
+
| `HIVE_AGENT_NAME` | Channel 启动时按 name 自动注册(复用最近匹配) |
|
|
243
|
+
|
|
193
244
|
## 架构
|
|
194
245
|
|
|
195
246
|
| 层级 | 技术 |
|
|
196
247
|
|------|------|
|
|
197
248
|
| 服务端 | Node.js HTTP,有状态 session + 无状态兜底 |
|
|
198
|
-
| 数据库 | SQLite WAL
|
|
249
|
+
| 数据库 | SQLite WAL — agents、teams、team_members、team_events、dm_messages、tasks、task_events、read_cursors、peers |
|
|
199
250
|
| 传输 | MCP Streamable HTTP(POST + GET SSE) |
|
|
200
|
-
| 推送 |
|
|
201
|
-
| 认证 | Session 绑定 · `as` 参数 · Bearer token |
|
|
251
|
+
| 推送 | Channel plugin → `notifications/claude/channel`。跟踪活跃 SSE,丢包时打 warning |
|
|
252
|
+
| 认证 | Session 绑定 · `as` 参数 · Bearer token · peer secret |
|
|
253
|
+
| 联邦 | HTTP peering、`id@node` 寻址、文件传输 |
|
|
202
254
|
|
|
203
255
|
## 版本计划
|
|
204
256
|
|
|
205
257
|
详见 [docs/roadmap.md](docs/roadmap.md)。
|
|
206
258
|
|
|
207
|
-
**下一步 (v0.2):** File Lease(防止编辑冲突)、agent 在线状态、npm 发布。
|
|
208
|
-
|
|
209
|
-
**未来 (v0.3):** Federation(跨机器互联)、OAuth、Web 看板。
|
|
210
|
-
|
|
211
259
|
## License
|
|
212
260
|
|
|
213
261
|
MIT
|