agents-bridge 0.1.4 → 0.1.6

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 (69) hide show
  1. package/README.md +199 -205
  2. package/config.example.json +28 -70
  3. package/dist/agents/cli-backends.js +3 -3
  4. package/dist/agents/cli-backends.js.map +1 -1
  5. package/dist/agents/cli-runner.d.ts +5 -2
  6. package/dist/agents/cli-runner.d.ts.map +1 -1
  7. package/dist/agents/cli-runner.js +73 -35
  8. package/dist/agents/cli-runner.js.map +1 -1
  9. package/dist/agents/cli-session-store.d.ts +6 -0
  10. package/dist/agents/cli-session-store.d.ts.map +1 -1
  11. package/dist/agents/cli-session-store.js +64 -0
  12. package/dist/agents/cli-session-store.js.map +1 -1
  13. package/dist/agents/codex-app-server-runtime.js +2 -2
  14. package/dist/agents/codex-app-server-runtime.js.map +1 -1
  15. package/dist/channels/command-gating.d.ts.map +1 -1
  16. package/dist/channels/command-gating.js +6 -6
  17. package/dist/channels/command-gating.js.map +1 -1
  18. package/dist/cli/cmd-add-agent.d.ts +19 -0
  19. package/dist/cli/cmd-add-agent.d.ts.map +1 -0
  20. package/dist/cli/cmd-add-agent.js +374 -0
  21. package/dist/cli/cmd-add-agent.js.map +1 -0
  22. package/dist/cli/cmd-restart.d.ts +3 -0
  23. package/dist/cli/cmd-restart.d.ts.map +1 -0
  24. package/dist/cli/cmd-restart.js +22 -0
  25. package/dist/cli/cmd-restart.js.map +1 -0
  26. package/dist/cli/cmd-start.d.ts.map +1 -1
  27. package/dist/cli/cmd-start.js +35 -10
  28. package/dist/cli/cmd-start.js.map +1 -1
  29. package/dist/cli/cmd-stop.d.ts +5 -0
  30. package/dist/cli/cmd-stop.d.ts.map +1 -1
  31. package/dist/cli/cmd-stop.js +32 -8
  32. package/dist/cli/cmd-stop.js.map +1 -1
  33. package/dist/cli/run-main.d.ts +5 -1
  34. package/dist/cli/run-main.d.ts.map +1 -1
  35. package/dist/cli/run-main.js +41 -14
  36. package/dist/cli/run-main.js.map +1 -1
  37. package/dist/config/default-config.d.ts.map +1 -1
  38. package/dist/config/default-config.js +0 -10
  39. package/dist/config/default-config.js.map +1 -1
  40. package/dist/entry.d.ts.map +1 -1
  41. package/dist/entry.js +8 -0
  42. package/dist/entry.js.map +1 -1
  43. package/dist/types/index.d.ts +6 -0
  44. package/dist/types/index.d.ts.map +1 -1
  45. package/package.json +5 -1
  46. package/dist/agents/cli-output.test.d.ts +0 -2
  47. package/dist/agents/cli-output.test.d.ts.map +0 -1
  48. package/dist/agents/cli-output.test.js +0 -56
  49. package/dist/agents/cli-output.test.js.map +0 -1
  50. package/dist/agents/cli-runner.test.d.ts +0 -2
  51. package/dist/agents/cli-runner.test.d.ts.map +0 -1
  52. package/dist/agents/cli-runner.test.js +0 -119
  53. package/dist/agents/cli-runner.test.js.map +0 -1
  54. package/dist/agents/cli-session-store.test.d.ts +0 -2
  55. package/dist/agents/cli-session-store.test.d.ts.map +0 -1
  56. package/dist/agents/cli-session-store.test.js +0 -30
  57. package/dist/agents/cli-session-store.test.js.map +0 -1
  58. package/dist/agents/codex-app-server-runtime.test.d.ts +0 -2
  59. package/dist/agents/codex-app-server-runtime.test.d.ts.map +0 -1
  60. package/dist/agents/codex-app-server-runtime.test.js +0 -164
  61. package/dist/agents/codex-app-server-runtime.test.js.map +0 -1
  62. package/dist/cli/run-main.test.d.ts +0 -2
  63. package/dist/cli/run-main.test.d.ts.map +0 -1
  64. package/dist/cli/run-main.test.js +0 -17
  65. package/dist/cli/run-main.test.js.map +0 -1
  66. package/dist/config/default-config.test.d.ts +0 -2
  67. package/dist/config/default-config.test.d.ts.map +0 -1
  68. package/dist/config/default-config.test.js +0 -19
  69. package/dist/config/default-config.test.js.map +0 -1
package/README.md CHANGED
@@ -1,290 +1,284 @@
1
- # agents-bridge
1
+ # agents-bridge
2
2
 
3
- 鏈湴 Agent 缃戝叧锛岄儴缃插湪瀹㈡埛鏈湴鏈哄櫒涓婏紝閫氳繃闀胯疆璇㈣繛鎺ヤ簯绔?botlink 骞冲彴锛岄┍鍔ㄦ湰鍦扮殑 Claude Code / Codex 绛?AI Agent銆?
3
+ 本地 Agent 网关,部署在客户本地机器上,通过长轮询连接 botlink 平台,把消息转发给本机运行的 Claude Code / Codex 等 Agent 运行时。
4
4
 
5
- ## 鏋舵瀯姒傝
5
+ 核心特点:
6
6
 
7
- ```
8
- botlink 浜戠 瀹㈡埛鏈湴
9
- 鈹屸攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹? 鈹屸攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?
10
- 鈹? botlink-web 鈹? 鈹? agents-bridge 鈹?
11
- 鈹? client-gateway 鈹? 鈹? 鈹?
12
- 鈹? bot-gateway 鈼勨攢鈹€鈹€鈹€鈹€鈹€鈹€鈹尖攢鈹€ HTTP 鈹? botlink channel 鈹?
13
- 鈹? message-svc 鈹? 闀胯疆璇⑩攤 鈫? 鈹?
14
- 鈹? routing-svc 鈹? 鈹? Agent Runtime 鈹?
15
- 鈹斺攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹? 鈹? 鈹溾攢 Claude Code (CLI) 鈹?
16
- 鈹? 鈹溾攢 Codex (CLI) 鈹?
17
- 鈹斺攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?
18
- ```
7
+ - 客户端主动外连,无需暴露入站端口
8
+ - 支持 `claude-cli/...`、`codex-cli/...` 这类 CLI 模型引用
9
+ - 支持多 agent 配置与按绑定规则路由
10
+ - 提供 `onboard`、`add-agent`、`doctor`、`logs`、`config` 等运维命令
11
+ - 支持前台运行和守护进程模式
12
+
13
+ ## 架构概览
14
+
15
+ 链路可以简化为:
19
16
 
20
- agents-bridge 濮嬬粓浣滀负瀹㈡埛绔富鍔ㄥ杩炰簯绔紝瀹㈡埛鏃犻渶鏆撮湶浠讳綍绔彛銆?
17
+ `botlink cloud -> 长轮询 -> agents-bridge -> 本地 CLI backend / Agent Runtime`
21
18
 
22
- ## 蹇€熷紑濮?
19
+ 其中:
23
20
 
24
- ### 鏂瑰紡 A锛歯pm 鍏ㄥ眬瀹夎锛堟帹鑽愶級
21
+ - botlink 负责云端消息入口
22
+ - agents-bridge 负责轮询、路由、会话管理、日志和文件中转
23
+ - 本地 Agent Runtime 负责实际执行 Claude Code、Codex 等 CLI
24
+
25
+ ## 快速开始
26
+
27
+ ### 方式 A:npm 全局安装
25
28
 
26
29
  ```bash
27
30
  npm install -g agents-bridge@latest
28
31
 
29
- # 浜や簰寮忓紩瀵硷細杈撳叆 gateway URL銆乥ot token銆侀€夋嫨妯″瀷锛岃嚜鍔ㄧ敓鎴愰厤缃?
32
+ # 交互式初始化:输入 gateway URL、bot token、选择模型
30
33
  agents-bridge onboard
31
34
 
32
- # 鍚姩
35
+ # 前台启动
33
36
  agents-bridge start
34
- ```
35
37
 
36
- ### 鏂瑰紡 B锛欴ocker
37
-
38
- ```bash
39
- docker run -d --name agents-bridge \
40
- -v /home/user/project:/workspace \
41
- -v agents-bridge-data:/root/.agent-bridge \
42
- | `AGENT_BRIDGE_GATEWAY_URL` | `channels.botlink.gateway_url` 或 `channels.botlink.accounts.default.gateway_url` | botlink 网关地址 |
43
- | `AGENT_BRIDGE_BOT_TOKEN` | `channels.botlink.bot_token` 或 `channels.botlink.accounts.default.bot_token` | Bot Token |
44
- -e ANTHROPIC_API_KEY=sk-ant-xxx \
45
- agents-bridge:latest
38
+ # 或后台启动
39
+ agents-bridge start --daemon
46
40
  ```
47
41
 
48
- 鎴栦娇鐢?docker-compose锛?
42
+ ### 方式 B:Docker Compose
49
43
 
50
44
  ```bash
51
45
  cp .env.example .env
52
- # 缂栬緫 .env 濉叆瀹為檯鍊?
46
+ # 编辑 .env,填写 GATEWAY_URL、BOT_TOKEN 等变量
47
+
53
48
  docker compose up -d
54
49
  ```
55
50
 
56
- ### 鏂瑰紡 C锛氭簮鐮佽繍琛岋紙寮€鍙戣€咃級
51
+ `docker-compose.yml` 默认会:
52
+
53
+ - 挂载 `${WORKSPACE_DIR:-./workspace}` 到容器内 `/workspace`
54
+ - 持久化 `/root/.agent-bridge`
55
+ - 通过环境变量覆盖网关地址、Bot Token 和日志级别
56
+
57
+ ### 方式 C:源码运行
57
58
 
58
59
  ```bash
59
60
  git clone <repo-url>
60
- cd <repo-dir>
61
+ cd agent-bridge
61
62
  pnpm install
62
63
  pnpm build
63
- cp config.example.json config.json # 缂栬緫閰嶇疆
64
+ cp config.example.json config.json
65
+ # 编辑 config.json
64
66
  node dist/entry.js start
65
67
  ```
66
68
 
67
- 寮€鍙戞ā寮忥紙鑷姩閲嶈浇锛夛細
69
+ 开发模式:
68
70
 
69
71
  ```bash
70
72
  pnpm dev
71
73
  ```
72
74
 
73
- ## CLI 鍛戒护
75
+ ## CLI 命令
74
76
 
75
77
  ```bash
76
- agents-bridge start # 启动 gateway(前台)
77
- agents-bridge start --daemon # 启动为后台守护进程
78
- agents-bridge start -c <path> # 指定配置文件启动
79
- agents-bridge stop # 停止守护进程
80
- agents-bridge status # 查看运行状态
81
- agents-bridge onboard # 交互式初始化引导
82
- agents-bridge doctor # 诊断环境、会话持久化、日志与 CLI 路径
83
- agents-bridge logs # 查看当天最新日志
84
- agents-bridge config # 查看当前配置(脱敏显示)
85
- agents-bridge help # 帮助
78
+ agents-bridge start # 前台启动
79
+ agents-bridge start --daemon # 后台启动
80
+ agents-bridge start -c ./config.json # 指定配置文件
81
+ agents-bridge stop # 停止守护进程
82
+ agents-bridge restart # 重启
83
+ agents-bridge status # 查看运行状态
84
+ agents-bridge onboard # 交互式初始化
85
+ agents-bridge add-agent # 交互式追加一个 agent
86
+ agents-bridge add-agent --account-id office-bot
87
+ agents-bridge add-agent --create-account office-bot --account-gateway-url https://botlink.example.com --account-bot-token bot_xxx
88
+ agents-bridge doctor # 检查环境、CLI、API Key 和配置
89
+ agents-bridge logs # 查看最近日志
90
+ agents-bridge config # 输出当前配置
91
+ agents-bridge version # 查看版本
92
+ agents-bridge help # 查看帮助
86
93
  ```
87
94
 
88
- ## 閰嶇疆
95
+ ## 配置
89
96
 
90
- ### 閰嶇疆鏂囦欢
97
+ ### 配置文件搜索顺序
91
98
 
92
- 涓婚厤缃枃浠朵负 JSON 鏍煎紡锛屾悳绱㈤『搴忥細
99
+ 当前实现会按以下顺序读取第一个存在的配置文件:
93
100
 
94
- 1. CLI 鍙傛暟锛歚agents-bridge start -c /path/to/config.json`
95
- 2. 鐜鍙橀噺锛歚AGENT_BRIDGE_CONFIG=/path/to/config.json`
96
- 3. 鐢ㄦ埛鐩綍锛歚~/.agent-bridge/config.json`
97
- 4. 褰撳墠鐩綍锛歚./config.json`
101
+ 1. `agents-bridge start -c /path/to/config.json`
102
+ 2. 环境变量 `AGENT_BRIDGE_CONFIG`
103
+ 3. 当前目录 `./config.json`
104
+ 4. 用户目录 `~/.agent-bridge/config.json`
98
105
 
99
- 瀹屾暣绀轰緥瑙?[config.example.json](config.example.json)锛堝崟 agent锛夊拰 [config.multi-agent.example.json](config.multi-agent.example.json)锛堝 agent锛夈€傞厤缃瓧娈佃缁嗚鏄庤 [閰嶇疆鏂囨。](../agent-bridge-docs/docs/guides/configuration.md)銆?
100
- 褰撳墠杩愯鏃朵粎鏀寔 CLI 妯″紡妯″瀷锛屽 `claude-cli/...`銆乣codex-cli/...`銆俙anthropic/...`銆乣openai/...` 杩欑被 API 鐩磋繛妯″瀷寮曠敤鏆傛湭瀹炵幇鎵ц閾捐矾銆?
101
- ### 鏍稿績閰嶇疆椤癸紙鍗?agent锛?
106
+ ### 最小配置示例
102
107
 
103
108
  ```json
104
109
  {
105
110
  "channels": {
106
111
  "botlink": {
107
- "gateway_url": "https://your-botlink-instance.com",
108
- "bot_token": "bot_xxxxxxxxxxxxxxxxxx",
109
- "poll_timeout": 30,
110
- "retry_interval": 5,
111
- "max_retry_interval": 60
112
+ "gateway_url": "https://your-botlink.com",
113
+ "bot_token": "bot_xxx"
112
114
  }
113
115
  },
114
116
  "agents": {
115
117
  "defaults": {
116
118
  "model": {
117
119
  "primary": "claude-cli/opus-4.6"
118
- },
119
- "cliBackends": {
120
- "claude-cli": {
121
- "command": "claude",
122
- "args": ["-p", "--output-format", "json", "--dangerously-skip-permissions"],
123
- "resumeArgs": ["-p", "--output-format", "json", "--dangerously-skip-permissions", "--resume", "{sessionId}"],
124
- "output": "json",
125
- "modelArg": "--model",
126
- "sessionArg": "--session-id",
127
- "sessionIdFields": ["session_id", "sessionId", "conversation_id", "conversationId"],
128
- "sessionMode": "always",
129
- "serialize": true
130
- },
131
- "codex-cli": {
132
- "command": "codex",
133
- "args": ["exec", "--json", "..."],
134
- "resumeArgs": ["exec", "resume", "{sessionId}", "..."],
135
- "sessionMode": "existing",
136
- "output": "jsonl",
137
- "resumeOutput": "text",
138
- "modelArg": "--model",
139
- "sessionIdFields": ["thread_id"],
140
- "serialize": true
141
- }
142
120
  }
143
- }
144
- },
145
- "logging": {
146
- "level": "info"
147
- }
148
- }
149
- ```
150
-
151
- ### 澶?Agent 閰嶇疆
152
-
153
- 鍦?`agents` 涓嬪姞 `list` 瀹氫箟澶氫釜鍛藉悕 agent锛岀敤椤跺眰 `bindings` 鎸変細璇?鐢ㄦ埛璺敱锛?
154
-
155
- ```json
156
- {
157
- "agents": {
158
- "defaults": { "model": { "primary": "claude-cli/opus-4.6" } },
121
+ },
159
122
  "list": [
160
- { "id": "coder", "default": true, "workspace": "/home/user/app" },
161
- { "id": "ops", "model": "codex-cli/o3", "workspace": "/opt/infra" }
123
+ {
124
+ "id": "default",
125
+ "default": true
126
+ }
162
127
  ]
163
128
  },
164
129
  "bindings": [
165
- { "agentId": "ops", "match": { "peer": { "id": "-300" } } },
166
- { "agentId": "coder", "match": { "channel": "*" } }
130
+ {
131
+ "agentId": "default",
132
+ "match": {
133
+ "channel": "*"
134
+ }
135
+ }
167
136
  ]
168
137
  }
169
138
  ```
170
139
 
171
- 姣忎釜 agent 缁ф壙 `defaults` 骞跺彲瑕嗙洊 model銆亀orkspace銆乪nv銆乧liBackends 绛夈€傝瑙?[閰嶇疆鏂囨。](../agent-bridge-docs/docs/guides/configuration.md)銆?
140
+ 完整示例见:
172
141
 
173
- ### 鐜鍙橀噺瑕嗙洊
142
+ - [config.example.json](./config.example.json)
143
+ - [config.multi-agent.example.json](./config.multi-agent.example.json)
144
+ - [配置文档](../agent-bridge-docs/docs/guides/configuration.md)
174
145
 
175
- 鐜鍙橀噺鍙鐩栭厤缃枃浠朵腑鐨勫搴斿€硷細
146
+ ### 关键配置项
176
147
 
177
- | 鐜鍙橀噺 | 瑕嗙洊 | 璇存槑 |
178
- |---|---|---|
179
- | `AGENT_BRIDGE_CONFIG` | 鈥?| 閰嶇疆鏂囦欢璺緞 |
180
- | `AGENT_BRIDGE_GATEWAY_URL` | `channels.botlink.gateway_url` 或 `channels.botlink.accounts.default.gateway_url` | botlink 网关地址 |
181
- | `AGENT_BRIDGE_BOT_TOKEN` | `channels.botlink.bot_token` 或 `channels.botlink.accounts.default.bot_token` | Bot Token |
182
- | `AGENT_BRIDGE_LOG_LEVEL` | `logging.level` | 鏃ュ織绾у埆 |
183
- | `AGENT_BRIDGE_TEMP_DIR` | `files.temp_dir` | 涓存椂鏂囦欢鐩綍 |
148
+ - `channels.botlink.gateway_url`:botlink 网关地址
149
+ - `channels.botlink.bot_token`:bot token
150
+ - `agents.defaults.model.primary`:主模型引用,例如 `claude-cli/opus-4.6` 或 `codex-cli/gpt-5.4`
151
+ - `agents.defaults.model.fallbacks`:备用模型链
152
+ - `agents.defaults.cliBackends`:CLI backend 启动参数与运行模式
153
+ - `agents.list`:命名 agent 列表
154
+ - `bindings`:消息路由规则,可按 `channel`、`accountId`、`peer.id` 等条件匹配
155
+ - `files.temp_dir`:文件中转目录
156
+ - `logging.level`:日志级别
184
157
 
185
- ## 鏁版嵁鐩綍
158
+ ### 多 agent 配置
186
159
 
187
- ```
188
- ~/.agent-bridge/
189
- 鈹溾攢鈹€ config.json # 涓婚厤缃紙onboard 鐢熸垚锛?
190
- 鈹溾攢鈹€ agent-bridge.pid # PID 鏂囦欢锛坉aemon 妯″紡锛?
191
- 鈹溾攢鈹€ agents/ # per-agent 鐘舵€侊紙澶?agent 妯″紡锛?
192
- 鈹? 鈹溾攢鈹€ coder/
193
- 鈹? 鈹? 鈹斺攢鈹€ cli-sessions.json # coder 鐨?session 鏄犲皠
194
- 鈹? 鈹溾攢鈹€ reviewer/
195
- 鈹? 鈹? 鈹斺攢鈹€ cli-sessions.json
196
- 鈹? 鈹斺攢鈹€ default/ # 闅愬紡 agent锛堟湭閰?list 鏃讹級
197
- 鈹? 鈹斺攢鈹€ cli-sessions.json
198
- 鈹溾攢鈹€ data/
199
- 鈹? 鈹溾攢鈹€ sessions/ # 鏃х増 session 瀛樺偍锛堝崌绾у悗鑷姩杩佺Щ锛?
200
- 鈹? 鈹溾攢鈹€ files/ # 鏂囦欢涓浆涓存椂鐩綍
201
- 鈹? 鈹斺攢鈹€ logs/ # 鏃ュ織鏂囦欢
202
- 鈹斺攢鈹€ skills/ # 鑷畾涔夋妧鑳?
203
- ```
160
+ 多 agent 模式通过 `agents.list` 定义运行实例,通过 `bindings` 决定消息路由到哪个 agent。
204
161
 
205
- ## 椤圭洰缁撴瀯
162
+ 追加 agent 时,也可以直接运行:
206
163
 
207
- ```
208
- agents-bridge/
209
- 鈹溾攢鈹€ bin/
210
- 鈹? 鈹斺攢鈹€ agent-bridge.mjs # CLI 鍏ュ彛锛坣pm 鍏ㄥ眬瀹夎锛?
211
- 鈹溾攢鈹€ src/
212
- 鈹? 鈹溾攢鈹€ entry.ts # 涓诲叆鍙o紝瀛愬懡浠よ矾鐢?
213
- 鈹? 鈹溾攢鈹€ cli/ # CLI 鍛戒护瀹炵幇
214
- 鈹? 鈹? 鈹溾攢鈹€ run-main.ts # 鍙傛暟瑙f瀽
215
- 鈹? 鈹? 鈹溾攢鈹€ cmd-start.ts # start 鍛戒护
216
- 鈹? 鈹? 鈹溾攢鈹€ cmd-stop.ts # stop 鍛戒护
217
- 鈹? 鈹? 鈹溾攢鈹€ cmd-status.ts # status 鍛戒护
218
- 鈹? 鈹? 鈹溾攢鈹€ cmd-onboard.ts # onboard 浜や簰寮曞
219
- 鈹? 鈹? 鈹溾攢鈹€ cmd-doctor.ts # doctor 鐜璇婃柇
220
- 鈹? 鈹? 鈹溾攢鈹€ cmd-logs.ts # logs 鏌ョ湅
221
- 鈹? 鈹? 鈹斺攢鈹€ cmd-config.ts # config 鏌ョ湅
222
- 鈹? 鈹溾攢鈹€ config/ # 閰嶇疆鍔犺浇涓庢牎楠?
223
- 鈹? 鈹? 鈹溾攢鈹€ config.ts # 涓诲姞杞藉櫒
224
- 鈹? 鈹? 鈹溾攢鈹€ zod-schema.ts # Zod schema
225
- 鈹? 鈹? 鈹溾攢鈹€ paths.ts # 鏁版嵁鐩綍璺緞甯搁噺
226
- 鈹? 鈹? 鈹溾攢鈹€ env-vars.ts # 鐜鍙橀噺璇诲彇
227
- 鈹? 鈹? 鈹溾攢鈹€ merge-config.ts # 閰嶇疆鍚堝苟
228
- 鈹? 鈹? 鈹斺攢鈹€ agent-dirs.ts # 鐩綍鍒濆鍖?
229
- 鈹? 鈹溾攢鈹€ channels/ # Channel 鎻掍欢妗嗘灦
230
- 鈹? 鈹? 鈹溾攢鈹€ registry.ts # 鎻掍欢娉ㄥ唽琛?
231
- 鈹? 鈹? 鈹溾攢鈹€ session.ts # 浼氳瘽绠$悊
232
- 鈹? 鈹? 鈹斺攢鈹€ ...
233
- 鈹? 鈹溾攢鈹€ agents/ # Agent 杩愯鏃?
234
- 鈹? 鈹? 鈹溾攢鈹€ agent-resolver.ts # 澶?agent 閰嶇疆瑙f瀽锛坉efaults + list 鍚堝苟锛?
235
- 鈹? 鈹? 鈹溾攢鈹€ agent-router.ts # 娑堟伅璺敱锛坆indings 鍖归厤锛?
236
- 鈹? 鈹? 鈹溾攢鈹€ cli-backends.ts # CLI backend provider id / 榛樿閰嶇疆瑁呴厤
237
- 鈹? 鈹? 鈹溾攢鈹€ cli-session-store.ts # CLI session 鏄犲皠鎸佷箙鍖栵紙per-agent锛?
238
- 鈹? 鈹? 鈹溾攢鈹€ cli-runner.ts # Claude/Codex CLI 鎵ц鍣?
239
- 鈹? 鈹? 鈹斺攢鈹€ ...
240
- 鈹? 鈹溾攢鈹€ types/ # 绫诲瀷瀹氫箟
241
- 鈹? 鈹斺攢鈹€ logger.ts # Pino 鏃ュ織
242
- 鈹溾攢鈹€ extensions/ # Channel 鎻掍欢锛坆otlink锛?
243
- 鈹溾攢鈹€ skills/ # 鎶€鑳藉畾涔?
244
- 鈹溾攢鈹€ config.example.json # 閰嶇疆绀轰緥
245
- 鈹溾攢鈹€ .env.example # 鐜鍙橀噺绀轰緥
246
- 鈹溾攢鈹€ Dockerfile
247
- 鈹溾攢鈹€ docker-compose.yml
248
- 鈹溾攢鈹€ package.json
249
- 鈹斺攢鈹€ tsconfig.json
164
+ ```bash
165
+ agents-bridge add-agent
250
166
  ```
251
167
 
252
- ## 褰撳墠鏀寔鐨?Agent 妯″紡
168
+ 该命令会在现有配置上:
169
+
170
+ - 追加一个 `agents.list[]` 项
171
+ - 可选绑定已有 botlink `accountId`
172
+ - 可选创建新的 botlink account 并立刻绑定
173
+ - 写入前自动备份原配置文件
174
+
175
+ 如果现有 account 已被其他 agent 占用,交互流程会提示该 account 当前绑定到哪个 agent,并允许直接创建新的 account 后继续绑定。
176
+
177
+ 也可以显式指定:
178
+
179
+ ```bash
180
+ agents-bridge add-agent --account-id office-bot
181
+ agents-bridge add-agent --create-account office-bot --account-gateway-url https://botlink.example.com --account-bot-token bot_xxx
182
+ ```
253
183
 
254
- | 妯″紡 | 妯″瀷寮曠敤绀轰緥 | 璇存槑 |
184
+ 例如:
185
+
186
+ - 一个 bot 绑定到 Codex
187
+ - 一个 bot 绑定到 Claude Code
188
+ - 不同工作区使用不同 `workspace`
189
+ - 通过预置 `cliSessionId` 复用既有 CLI 会话
190
+
191
+ 详见 [config.multi-agent.example.json](./config.multi-agent.example.json)。
192
+
193
+ ### 环境变量覆盖
194
+
195
+ 环境变量可覆盖配置文件中的对应值:
196
+
197
+ | 环境变量 | 覆盖字段 | 说明 |
255
198
  |---|---|---|
256
- | Claude Code | `claude-cli/opus-4.6` | 通过 CLI backend 启动本地 `claude` 命令 |
257
- | Codex | `codex-cli/gpt-5.4` | 通过 CLI backend 启动本地 `codex` 命令 |
258
- | Pi Agent | `anthropic/claude-sonnet-4-6` | 通过 LLM API 直连,内置工具执行 |
199
+ | `AGENT_BRIDGE_CONFIG` | 配置文件路径 | 指定要加载的 `config.json` |
200
+ | `AGENT_BRIDGE_GATEWAY_URL` | `channels.botlink.gateway_url` | botlink 网关地址 |
201
+ | `AGENT_BRIDGE_BOT_TOKEN` | `channels.botlink.bot_token` | Bot Token |
202
+ | `AGENT_BRIDGE_LOG_LEVEL` | `logging.level` | 日志级别 |
203
+ | `AGENT_BRIDGE_TEMP_DIR` | `files.temp_dir` | 临时文件目录 |
204
+ | `ANTHROPIC_API_KEY` | 环境变量 | 供诊断或后续 API 模式使用 |
205
+ | `OPENAI_API_KEY` | 环境变量 | 供诊断或后续 API 模式使用 |
206
+
207
+ ## 模型与运行模式
259
208
 
260
- 鍦?`config.json` 鐨?`agents.defaults.model.primary` 涓€夋嫨銆?
209
+ 当前消息执行链路仅支持 CLI 模式模型,也就是:
261
210
 
262
- ## CLI Backend 绾﹀畾
211
+ - `claude-cli/...`
212
+ - `codex-cli/...`
263
213
 
264
- - 内置 provider id 固定为 `claude-cli`、`codex-cli`。
265
- - `agents.defaults.cliBackends` 会覆盖内置默认值,不需要重复写全量字段。
266
- - `SessionEnvelope.sessionId` 是 botlink 稳定会话键,不等于 Claude/Codex 自己的 session id。
267
- - CLI backend session id 会持久化到 `~/.agent-bridge/data/sessions/cli-sessions.json` 的 `cliSessionIds[providerId]`。
268
- - `serialize: true` 的语义是“同一 botlink session 串行、跨 session 可并发”。
269
- - Claude CLI 走 JSON 输出;Codex CLI 首次运行走 JSONL,resume 走 text。
270
- - agents-bridge 会把运行日志同时写到 stdout 和 `~/.agent-bridge/data/logs/agent-bridge-YYYY-MM-DD.log`。
271
- - `agents-bridge doctor` 会检查 Codex 会话是否缺失 `thread_id` 持久化,便于定位“每次都 fresh”的问题。
214
+ 配置层已经允许 `anthropic/...`、`openai/...` 这类 API provider 引用,但当前主运行时尚未实现 API 模式;若把它们设为主模型,程序会返回“当前仅支持 CLI 模式模型”。
272
215
 
273
- ## 鎶€鏈爤
216
+ ## 数据目录
274
217
 
275
- - TypeScript + Node.js (>= 22.0.0)
276
- - pnpm (>= 9.0.0)
277
- - Pino锛堟棩蹇楋級
278
- - Zod锛堥厤缃牎楠岋級
279
- - JSON锛堥厤缃牸寮忥級
218
+ 运行时数据默认保存在 `~/.agent-bridge/`:
280
219
 
281
- ## 寮€鍙?
220
+ ```text
221
+ ~/.agent-bridge/
222
+ ├── config.json
223
+ ├── agent-bridge.pid
224
+ ├── agents/
225
+ │ └── <agentId>/
226
+ │ └── cli-sessions.json
227
+ ├── data/
228
+ │ ├── files/
229
+ │ ├── logs/
230
+ │ └── sessions/
231
+ └── skills/
232
+ ```
233
+
234
+ 其中:
235
+
236
+ - `config.json`:全局配置文件
237
+ - `agent-bridge.pid`:守护进程 PID 文件
238
+ - `agents/<agentId>/cli-sessions.json`:每个 agent 的 CLI 会话映射
239
+ - `data/logs/`:按天滚动的日志文件
240
+ - `skills/`:自定义技能目录
241
+
242
+ ## 项目结构
243
+
244
+ ```text
245
+ agent-bridge/
246
+ ├── bin/ # CLI 入口
247
+ ├── src/
248
+ │ ├── cli/ # start / stop / onboard / doctor 等命令
249
+ │ ├── agents/ # Agent 解析、路由、CLI 执行
250
+ │ ├── channels/ # Channel 插件(如 botlink)
251
+ │ ├── config/ # 配置加载、校验、默认值
252
+ │ ├── types/ # 类型定义
253
+ │ └── logger.ts # 日志
254
+ ├── extensions/ # 扩展点
255
+ ├── skills/ # 本地技能目录
256
+ ├── config.example.json
257
+ ├── config.multi-agent.example.json
258
+ ├── docker-compose.yml
259
+ ├── Dockerfile
260
+ └── package.json
261
+ ```
262
+
263
+ ## 开发
282
264
 
283
265
  ```bash
284
- pnpm install # 瀹夎渚濊禆
285
- pnpm build # 缂栬瘧
286
- pnpm dev # 寮€鍙戞ā寮忥紙鑷姩閲嶈浇锛?
287
- pnpm typecheck # 绫诲瀷妫€鏌?
266
+ pnpm install
267
+ pnpm build
268
+ pnpm typecheck
269
+ pnpm dev
288
270
  ```
289
271
 
272
+ 环境要求:
273
+
274
+ - Node.js >= 22.0.0
275
+ - pnpm >= 9.0.0
276
+
277
+ ## 相关文档
278
+
279
+ - [文档索引](../agent-bridge-docs/INDEX.md)
280
+ - [配置文档](../agent-bridge-docs/docs/guides/configuration.md)
281
+
282
+ ## 许可证
290
283
 
284
+ [MIT](./LICENSE)
@@ -1,4 +1,4 @@
1
- {
1
+ {
2
2
  "channels": {
3
3
  "botlink": {
4
4
  "gateway_url": "https://your-botlink.com",
@@ -7,12 +7,12 @@
7
7
  "retry_interval": 5,
8
8
  "max_retry_interval": 60
9
9
  }
10
- },
11
- "agents": {
12
- "defaults": {
13
- "model": {
14
- "primary": "claude-cli/opus-4.6",
15
- "fallbacks": [
10
+ },
11
+ "agents": {
12
+ "defaults": {
13
+ "model": {
14
+ "primary": "claude-cli/opus-4.6",
15
+ "fallbacks": [
16
16
  "codex-cli/gpt-5.4"
17
17
  ]
18
18
  },
@@ -71,74 +71,32 @@
71
71
  }
72
72
  }
73
73
  },
74
- "codex-cli": {
75
- "command": "codex",
76
- "runtimeMode": "app-server",
77
- "args": [
78
- "exec",
79
- "--json",
80
- "--color",
81
- "never",
82
- "--sandbox",
83
- "workspace-write",
84
- "--skip-git-repo-check"
85
- ],
86
- "resumeArgs": [
87
- "exec",
88
- "resume",
89
- "{sessionId}",
90
- "--color",
91
- "never",
92
- "--sandbox",
93
- "workspace-write",
94
- "--skip-git-repo-check"
95
- ],
96
- "output": "jsonl",
97
- "resumeOutput": "text",
98
- "input": "arg",
99
- "modelArg": "--model",
100
- "appServer": {
101
- "listen": "stdio://",
102
- "sessionSource": "agent-bridge",
103
- "startupTimeoutMs": 15000,
104
- "requestTimeoutMs": 30000,
74
+ "codex-cli": {
75
+ "command": "codex",
76
+ "runtimeMode": "app-server",
77
+ "appServer": {
78
+ "listen": "stdio://",
79
+ "sessionSource": "agent-bridge",
80
+ "startupTimeoutMs": 15000,
81
+ "requestTimeoutMs": 30000,
105
82
  "serviceName": "agent-bridge",
106
83
  "experimentalApi": false,
107
84
  "approvalPolicy": "never",
108
- "sandbox": "workspace-write",
85
+ "sandbox": "danger-full-access",
109
86
  "persistExtendedHistory": false,
110
87
  "experimentalRawEvents": false
111
88
  },
112
- "sessionIdFields": [
113
- "thread_id"
114
- ],
115
- "sessionMode": "existing",
116
- "imageArg": "--image",
117
- "imageMode": "repeat",
118
- "serialize": true,
119
- "reliability": {
120
- "watchdog": {
121
- "fresh": {
122
- "noOutputTimeoutRatio": 0.8,
123
- "minMs": 180000,
124
- "maxMs": 600000
125
- },
126
- "resume": {
127
- "noOutputTimeoutRatio": 0.3,
128
- "minMs": 60000,
129
- "maxMs": 180000
130
- }
131
- }
132
- }
89
+ "sessionMode": "existing",
90
+ "serialize": true
133
91
  }
134
92
  }
135
93
  },
136
- "list": [
137
- {
138
- "id": "default",
139
- "default": true
140
- }
141
- ]
94
+ "list": [
95
+ {
96
+ "id": "default",
97
+ "default": true
98
+ }
99
+ ]
142
100
  },
143
101
  "bindings": [
144
102
  {
@@ -147,10 +105,10 @@
147
105
  "channel": "*"
148
106
  }
149
107
  }
150
- },
151
- "skills": {
152
- "dirs": [
153
- "./skills"
108
+ ],
109
+ "skills": {
110
+ "dirs": [
111
+ "./skills"
154
112
  ]
155
113
  },
156
114
  "files": {
@@ -66,7 +66,7 @@ const DEFAULT_CLAUDE_BACKEND = {
66
66
  const DEFAULT_CODEX_BACKEND = {
67
67
  command: 'codex',
68
68
  runtimeMode: 'app-server',
69
- args: ['exec', '--json', '--color', 'never', '--sandbox', 'workspace-write', '--skip-git-repo-check'],
69
+ args: ['exec', '--json', '--color', 'never', '--sandbox', 'danger-full-access', '--skip-git-repo-check'],
70
70
  resumeArgs: [
71
71
  'exec',
72
72
  'resume',
@@ -74,7 +74,7 @@ const DEFAULT_CODEX_BACKEND = {
74
74
  '--color',
75
75
  'never',
76
76
  '--sandbox',
77
- 'workspace-write',
77
+ 'danger-full-access',
78
78
  '--skip-git-repo-check',
79
79
  ],
80
80
  output: 'jsonl',
@@ -93,7 +93,7 @@ const DEFAULT_CODEX_BACKEND = {
93
93
  serviceName: 'agent-bridge',
94
94
  experimentalApi: false,
95
95
  approvalPolicy: 'never',
96
- sandbox: 'workspace-write',
96
+ sandbox: 'danger-full-access',
97
97
  persistExtendedHistory: false,
98
98
  experimentalRawEvents: false,
99
99
  },