@wings006/agent-link 0.1.2 → 0.1.3

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 (2) hide show
  1. package/README.md +36 -242
  2. package/package.json +1 -1
package/README.md CHANGED
@@ -2,16 +2,6 @@
2
2
 
3
3
  多 Agent 聊天系统 — 连接多台电脑上的 Claude Code,实现 Agent 间互相通信。支持局域网自动发现和跨网络中继通信。
4
4
 
5
- ## 工作原理
6
-
7
- 每台电脑运行一个 `agent-link` 进程,同时承担:
8
-
9
- - **MCP Server** — 给本地 Claude Code 提供 `agent_list`、`agent_send`、`agent_inbox`、`agent_reply`、`agent_mark_read`、`agent_clear_inbox`、`agent_task_status` 工具
10
- - **A2A Server** — 接收其他电脑 Agent 发来的任务(HTTP JSON-RPC)
11
- - **A2A Client** — 向其他电脑的 Agent 发送任务
12
- - **mDNS 广播** — 零配置自动发现局域网内所有 Agent
13
- - **中继客户端** — 通过公网中继服务器发现和通信跨网络 Agent
14
-
15
5
  ```
16
6
  局域网 远程
17
7
  电脑A (dev-macbook) 电脑B (office-pc) 电脑C (home-pc)
@@ -29,7 +19,9 @@
29
19
 
30
20
  ## 快速开始
31
21
 
32
- 无需安装,直接在 Claude Code 的 MCP 配置中添加:
22
+ Claude Code 的 MCP 配置中添加:
23
+
24
+ **局域网模式(同一网络内自动发现):**
33
25
 
34
26
  ```json
35
27
  {
@@ -42,280 +34,82 @@
42
34
  }
43
35
  ```
44
36
 
45
- 重启 Claude Code 即可使用。每台电脑使用不同的 `--name`。
46
-
47
- > 需要跨网络通信?添加 `"--relay", "ws://你的中继服务器:3458"`,详见[跨网络通信](#跨网络通信中继模式)。
48
-
49
- ## 从源码安装(可选)
50
-
51
- 如果需要开发或自定义:
52
-
53
- ```bash
54
- git clone <repo-url> agent-link
55
- cd agent-link
56
- npm install
57
- npm run build
58
- npm link
59
- ```
60
-
61
- 执行 `npm link` 后,`agent-link` 命令全局可用,MCP 配置可改为:
37
+ **中继模式(跨网络通信):**
62
38
 
63
39
  ```json
64
40
  {
65
41
  "mcpServers": {
66
42
  "agent-link": {
67
- "command": "agent-link",
68
- "args": ["--name", "你的Agent名称"]
43
+ "command": "npx",
44
+ "args": ["-y", "@wings006/agent-link", "--name", "你的Agent名称", "--relay", "ws://中继服务器IP:3458"]
69
45
  }
70
46
  }
71
47
  }
72
48
  ```
73
49
 
74
- ### 参数说明
50
+ 重启 Claude Code 即可。每台电脑使用不同的 `--name`。
51
+
52
+ ## 参数说明
75
53
 
76
54
  | 参数 | 简写 | 说明 | 默认值 |
77
55
  |------|------|------|--------|
78
56
  | `--name` | `-n` | Agent 名称(全局唯一) | 随机生成 |
79
57
  | `--port` | `-p` | A2A Server 监听端口 | 3456 |
80
58
  | `--relay` | `-r` | 中继服务器地址(跨网络通信) | 无 |
81
- | `--no-mdns` | | 禁用局域网 mDNS 发现,仅使用中继模式 | false |
59
+ | `--no-mdns` | | 禁用局域网发现,仅用中继 | false |
82
60
  | `--skills` | `-s` | 能力标签,逗号分隔 | general |
83
61
 
84
- ### 配置示例
85
-
86
- **电脑 A(开发机,局域网):**
87
- ```json
88
- {
89
- "mcpServers": {
90
- "agent-link": {
91
- "command": "npx",
92
- "args": ["-y", "@wings006/agent-link", "--name", "dev-macbook", "--skills", "code,test"]
93
- }
94
- }
95
- }
96
- ```
97
-
98
- **电脑 B(办公电脑,跨网络):**
99
- ```json
100
- {
101
- "mcpServers": {
102
- "agent-link": {
103
- "command": "npx",
104
- "args": ["-y", "@wings006/agent-link", "--name", "office-pc", "--relay", "ws://your-server:3458", "--skills", "report,doc"]
105
- }
106
- }
107
- }
108
- ```
109
-
110
62
  ## 使用
111
63
 
112
- 配置完成后重启 Claude Code,agent-link 会自动启动。直接用自然语言和 Claude Code 对话即可:
113
-
114
- ### 查看在线 Agent
115
-
116
- ```
117
- 你: 有哪些 agent 在线?
118
- Claude Code → 调用 agent_list
119
- Claude Code: 当前在线 Agent:
120
- - dev-macbook (192.168.1.50:3456) [code, test]
121
- - office-pc (192.168.1.100:3456) [report, doc]
122
- ```
123
-
124
- ### 发送任务
125
-
126
- ```
127
- 你: 告诉 office-pc 帮我生成本周周报
128
- Claude Code → 调用 agent_send(to: "office-pc", message: "帮我生成本周周报")
129
- Claude Code: 任务已发送,等待 office-pc 处理...
130
- ```
131
-
132
- 对方电脑的 Claude Code 会收到消息,询问用户是否执行。
133
-
134
- ### 查看收件箱
135
-
136
- ```
137
- 你: 看看有没有人给我发消息
138
- Claude Code → 调用 agent_inbox
139
- Claude Code: 收到 1 条消息:
140
- - 来自 dev-macbook: "帮我检查一下测试覆盖率" (待处理)
141
- ```
142
-
143
- ### 回复任务
64
+ 配置完成后直接用自然语言和 Claude Code 对话:
144
65
 
145
- ```
146
- 你: 回复这个任务,告诉他测试覆盖率是 85%
147
- Claude Code → 调用 agent_reply(task_id: "xxx", message: "测试覆盖率 85%", status: "completed")
148
- Claude Code: 已回复 dev-macbook
149
- ```
150
-
151
- ## 消息流转
152
-
153
- 完整的一次跨机器任务流程:
154
-
155
- ```
156
- 1. A 用户 → A Claude Code: "告诉 office-pc 生成周报"
157
- 2. A Claude Code 调用 agent_list 确认 office-pc 在线
158
- 3. A Claude Code 调用 agent_send → A 的 agent-link 发送 HTTP 请求到 B
159
- 4. B 的 agent-link 收到任务,存入 inbox
160
- 5. B 的 Claude Code 通过 agent_inbox 看到新消息
161
- 6. B 的 Claude Code 询问 B 用户: "收到 dev-macbook 的请求,是否执行?"
162
- 7. B 用户确认 → B Claude Code 执行任务
163
- 8. B Claude Code 调用 agent_reply 回复结果
164
- 9. A Claude Code 收到结果,展示给 A 用户
165
- ```
66
+ - **"有哪些 agent 在线?"** → 调用 `agent_list`
67
+ - **"告诉 office-pc 帮我生成周报"** → 调用 `agent_send`
68
+ - **"看看有没有人给我发消息"** → 调用 `agent_inbox`
69
+ - **"回复这个任务"** 调用 `agent_reply`
70
+ - **"标记全部已读"** → 调用 `agent_mark_read`
71
+ - **"清理已读消息"** → 调用 `agent_clear_inbox`
166
72
 
167
- ## MCP 工具一览
73
+ ## 部署中继服务器
168
74
 
169
- | 工具 | 说明 |
170
- |------|------|
171
- | `agent_list` | 列出所有在线 Agent(局域网 + 中继) |
172
- | `agent_send` | 向目标 Agent 发送消息/任务 |
173
- | `agent_inbox` | 查看收到的消息(显示已读/未读状态) |
174
- | `agent_reply` | 回复任务(完成/拒绝/需要更多信息) |
175
- | `agent_mark_read` | 标记消息已读(单条或全部) |
176
- | `agent_clear_inbox` | 清理收件箱(已读/全部/最早N条) |
177
- | `agent_task_status` | 查询已发出任务的状态和回复 |
178
-
179
- ## 跨网络通信(中继模式)
180
-
181
- 当 Agent 不在同一局域网时,可通过公网中继服务器实现通信。
182
-
183
- ### 部署中继服务器
184
-
185
- 在公网服务器上:
75
+ 跨网络通信需要一台公网服务器作为中继:
186
76
 
187
77
  ```bash
188
- # 创建目录
189
78
  mkdir -p /opt/agent-link-relay && cd /opt/agent-link-relay
190
-
191
- # 复制中继服务器文件
192
- scp dist/relay-server.js user@server:/opt/agent-link-relay/
193
-
194
- # 安装依赖
195
79
  npm init -y
196
80
  sed -i 's/"type": "commonjs"/"type": "module"/' package.json
197
81
  npm install ws
198
82
 
83
+ # 从项目中复制中继服务器
84
+ scp dist/relay-server.js user@server:/opt/agent-link-relay/
85
+
199
86
  # 启动
200
87
  node relay-server.js --port 3458
201
88
  ```
202
89
 
203
- 建议用 systemd 管理:
204
-
205
- ```ini
206
- # /etc/systemd/system/agent-link-relay.service
207
- [Unit]
208
- Description=Agent Link Relay Server
209
- After=network.target
210
-
211
- [Service]
212
- Type=simple
213
- WorkingDirectory=/opt/agent-link-relay
214
- ExecStart=/usr/bin/node relay-server.js --port 3458
215
- Restart=always
216
- RestartSec=5
217
-
218
- [Install]
219
- WantedBy=multi-user.target
220
- ```
221
-
222
- ```bash
223
- systemctl enable agent-link-relay && systemctl start agent-link-relay
224
- ```
225
-
226
- > 注意:需要在云服务商安全组中放行 3458 端口(TCP 入方向)。
227
-
228
- ### 配置 Agent 连接中继
229
-
230
- 在 MCP 配置中添加 `--relay` 参数:
231
-
232
- ```json
233
- {
234
- "mcpServers": {
235
- "agent-link": {
236
- "command": "agent-link",
237
- "args": ["--name", "my-agent", "--relay", "ws://your-server-ip:3458"]
238
- }
239
- }
240
- }
241
- ```
242
-
243
- ### 工作原理
244
-
245
- ```
246
- 电脑A (家里) 公网中继服务器 电脑B (公司)
247
- ┌───────────┐ WebSocket ┌──────────────┐ WebSocket ┌───────────┐
248
- │ agent-link├──────────────►│ relay-server │◄──────────────┤agent-link │
249
- └───────────┘ └──────────────┘ └───────────┘
250
- ```
251
-
252
- - 双方通过 WebSocket 长连接到中继服务器
253
- - 中继服务器维护在线 Agent 列表,推送给所有客户端
254
- - 消息通过中继转发,中继不存储数据
255
- - 局域网 mDNS 发现照常工作,同网络内优先直连
256
-
257
- ## 本机测试
258
-
259
- 在同一台机器上模拟多 Agent 通信(使用不同端口):
260
-
261
- **终端 1:**
262
- ```bash
263
- agent-link --name agent-a --port 3456
264
- ```
265
-
266
- **终端 2:**
267
- ```bash
268
- agent-link --name agent-b --port 3457
269
- ```
270
-
271
- 两个进程会通过 mDNS 自动发现对方。
90
+ > 需要在云服务商安全组中放行 3458 端口(TCP 入方向)。
272
91
 
273
92
  ## 故障排查
274
93
 
275
- ### mDNS 发现调试
276
-
277
- 如果两台电脑都配置了 agent-link 但 `agent_list` 看不到对方,使用调试脚本排查:
278
-
279
- **电脑 A:**
280
- ```bash
281
- npx tsx tests/mdns-debug.ts pc-a
282
- ```
283
-
284
- **电脑 B:**
285
- ```bash
286
- npx tsx tests/mdns-debug.ts pc-b
287
- ```
288
-
289
- 脚本会广播自身并监听局域网内的其他 Agent。如果 10 秒内双方都能看到 `[mDNS] 发现服务: ...` 输出,说明 mDNS 工作正常。
290
-
291
- 如果发现不了对方,常见原因:
292
-
293
- | 原因 | 排查方法 |
94
+ | 问题 | 解决方法 |
294
95
  |------|---------|
295
- | macOS 防火墙阻止 UDP 5353 | 系统设置 网络 → 防火墙,关闭或添加例外 |
296
- | 两台电脑不在同一子网 | 确认 IP 在同一网段(如都是 192.168.1.x) |
297
- | 路由器禁用多播转发 | 检查路由器设置,启用 mDNS/Bonjour 转发 |
298
- | 企业网络隔离 | 部分企业 WiFi 会隔离客户端间通信 |
96
+ | `agent_list` 看不到对方 | 确认双方在同一局域网,或都配置了相同的 `--relay` |
97
+ | 发送消息失败 `fetch failed` | 检查是否有代理拦截,`.local` 域名需加入 `no_proxy` |
98
+ | daemon 参数不生效 | 完全退出 Claude Code 重新打开(不只是 `/mcp`) |
99
+ | 中继连接失败 | 确认中继服务器端口已放行,`ws://IP:端口` 格式正确 |
100
+ | mDNS 发现不到 | macOS 检查防火墙;确认同一子网;路由器启用多播转发 |
101
+ | 同机多实例冲突 | 不同实例使用不同的 `--port` 和 `--api-port` |
299
102
 
300
- ## 开发
103
+ ## 从源码开发
301
104
 
302
105
  ```bash
303
- npm run build # 编译 TypeScript
304
- npm run dev # 开发模式运行(tsx)
305
- npm test # 运行测试
306
- npm run test:watch # 测试监听模式
106
+ git clone https://github.com/l3wingsgg/agent_link.git
107
+ cd agent_link
108
+ npm install
109
+ npm run build
110
+ npm test
307
111
  ```
308
112
 
309
- ## 技术栈
310
-
311
- - TypeScript + Node.js
312
- - [A2A 协议](https://github.com/a2aproject/A2A) — Agent 间通信(JSON-RPC over HTTP)
313
- - [MCP 协议](https://modelcontextprotocol.io/) — Claude Code 工具集成
314
- - [bonjour-service](https://www.npmjs.com/package/bonjour-service) — mDNS 零配置局域网发现
315
- - [ws](https://www.npmjs.com/package/ws) — WebSocket 中继通信
316
- - [better-sqlite3](https://www.npmjs.com/package/better-sqlite3) — SQLite 持久化存储
317
- - [Vitest](https://vitest.dev/) — 测试框架
318
-
319
113
  ## 许可证
320
114
 
321
115
  MIT
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wings006/agent-link",
3
- "version": "0.1.2",
3
+ "version": "0.1.3",
4
4
  "description": "多 Agent 聊天系统 - 连接多台电脑上的 Claude Code,支持局域网发现和跨网络中继通信",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",