agents-bridge 0.1.0 → 0.1.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 (95) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +162 -131
  3. package/bin/agent-bridge.mjs +11 -11
  4. package/config.example.json +22 -55
  5. package/config.multi-agent.example.json +67 -0
  6. package/dist/agents/agent-resolver.d.ts +12 -0
  7. package/dist/agents/agent-resolver.d.ts.map +1 -0
  8. package/dist/agents/agent-resolver.js +114 -0
  9. package/dist/agents/agent-resolver.js.map +1 -0
  10. package/dist/agents/agent-router.d.ts +8 -0
  11. package/dist/agents/agent-router.d.ts.map +1 -0
  12. package/dist/agents/agent-router.js +72 -0
  13. package/dist/agents/agent-router.js.map +1 -0
  14. package/dist/agents/cli-backends.d.ts +20 -27
  15. package/dist/agents/cli-backends.d.ts.map +1 -1
  16. package/dist/agents/cli-backends.js +29 -4
  17. package/dist/agents/cli-backends.js.map +1 -1
  18. package/dist/agents/cli-output.d.ts +35 -0
  19. package/dist/agents/cli-output.d.ts.map +1 -0
  20. package/dist/agents/cli-output.js +277 -0
  21. package/dist/agents/cli-output.js.map +1 -0
  22. package/dist/agents/cli-output.test.d.ts +2 -0
  23. package/dist/agents/cli-output.test.d.ts.map +1 -0
  24. package/dist/agents/cli-output.test.js +56 -0
  25. package/dist/agents/cli-output.test.js.map +1 -0
  26. package/dist/agents/cli-runner.d.ts +23 -0
  27. package/dist/agents/cli-runner.d.ts.map +1 -1
  28. package/dist/agents/cli-runner.js +244 -153
  29. package/dist/agents/cli-runner.js.map +1 -1
  30. package/dist/agents/cli-runner.test.d.ts +2 -0
  31. package/dist/agents/cli-runner.test.d.ts.map +1 -0
  32. package/dist/agents/cli-runner.test.js +119 -0
  33. package/dist/agents/cli-runner.test.js.map +1 -0
  34. package/dist/agents/cli-session-store.d.ts +47 -0
  35. package/dist/agents/cli-session-store.d.ts.map +1 -1
  36. package/dist/agents/cli-session-store.js +72 -0
  37. package/dist/agents/cli-session-store.js.map +1 -1
  38. package/dist/agents/cli-session-store.test.d.ts +2 -0
  39. package/dist/agents/cli-session-store.test.d.ts.map +1 -0
  40. package/dist/agents/cli-session-store.test.js +30 -0
  41. package/dist/agents/cli-session-store.test.js.map +1 -0
  42. package/dist/agents/codex-app-server-runtime.d.ts +72 -0
  43. package/dist/agents/codex-app-server-runtime.d.ts.map +1 -0
  44. package/dist/agents/codex-app-server-runtime.js +772 -0
  45. package/dist/agents/codex-app-server-runtime.js.map +1 -0
  46. package/dist/agents/codex-app-server-runtime.test.d.ts +2 -0
  47. package/dist/agents/codex-app-server-runtime.test.d.ts.map +1 -0
  48. package/dist/agents/codex-app-server-runtime.test.js +164 -0
  49. package/dist/agents/codex-app-server-runtime.test.js.map +1 -0
  50. package/dist/agents/model-selection.d.ts +3 -2
  51. package/dist/agents/model-selection.js +1 -1
  52. package/dist/channels/botlink.d.ts +2 -0
  53. package/dist/channels/botlink.js +73 -60
  54. package/dist/channels/botlink.js.map +1 -1
  55. package/dist/cli/cmd-doctor.d.ts.map +1 -1
  56. package/dist/cli/cmd-doctor.js +41 -5
  57. package/dist/cli/cmd-doctor.js.map +1 -1
  58. package/dist/cli/cmd-logs.js +1 -1
  59. package/dist/cli/cmd-logs.js.map +1 -1
  60. package/dist/cli/cmd-onboard.d.ts.map +1 -1
  61. package/dist/cli/cmd-onboard.js +16 -10
  62. package/dist/cli/cmd-onboard.js.map +1 -1
  63. package/dist/cli/cmd-start.d.ts.map +1 -1
  64. package/dist/cli/cmd-start.js +205 -32
  65. package/dist/cli/cmd-start.js.map +1 -1
  66. package/dist/cli/run-main.js +27 -27
  67. package/dist/config/agent-dirs.d.ts +12 -0
  68. package/dist/config/agent-dirs.d.ts.map +1 -1
  69. package/dist/config/agent-dirs.js +43 -2
  70. package/dist/config/agent-dirs.js.map +1 -1
  71. package/dist/config/config.js +1 -1
  72. package/dist/config/config.js.map +1 -1
  73. package/dist/config/merge-config.d.ts.map +1 -1
  74. package/dist/config/merge-config.js +16 -4
  75. package/dist/config/merge-config.js.map +1 -1
  76. package/dist/config/paths.d.ts +4 -0
  77. package/dist/config/paths.d.ts.map +1 -1
  78. package/dist/config/paths.js +7 -0
  79. package/dist/config/paths.js.map +1 -1
  80. package/dist/config/zod-schema.d.ts +2158 -239
  81. package/dist/config/zod-schema.d.ts.map +1 -1
  82. package/dist/config/zod-schema.js +100 -1
  83. package/dist/config/zod-schema.js.map +1 -1
  84. package/dist/entry.d.ts +1 -1
  85. package/dist/logger.d.ts +1 -0
  86. package/dist/logger.d.ts.map +1 -1
  87. package/dist/logger.js +28 -5
  88. package/dist/logger.js.map +1 -1
  89. package/dist/types/index.d.ts +130 -3
  90. package/dist/types/index.d.ts.map +1 -1
  91. package/package.json +55 -54
  92. package/dist/console-encoding.d.ts +0 -6
  93. package/dist/console-encoding.d.ts.map +0 -1
  94. package/dist/console-encoding.js +0 -35
  95. package/dist/console-encoding.js.map +0 -1
package/LICENSE CHANGED
@@ -1,21 +1,21 @@
1
- MIT License
2
-
3
- Copyright (c) 2026
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
1
+ MIT License
2
+
3
+ Copyright (c) 2026
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,77 +1,76 @@
1
- # agents-bridge
1
+ # agents-bridge
2
2
 
3
- 本地 Agent 网关,部署在客户本地机器上,通过长轮询连接云端 botlink 平台,驱动本地的 Claude Code / Codex 等 AI Agent。
3
+ 鏈湴 Agent 缃戝叧锛岄儴缃插湪瀹㈡埛鏈湴鏈哄櫒涓婏紝閫氳繃闀胯疆璇㈣繛鎺ヤ簯绔?botlink 骞冲彴锛岄┍鍔ㄦ湰鍦扮殑 Claude Code / Codex 绛?AI Agent銆?
4
4
 
5
- ## 架构概览
5
+ ## 鏋舵瀯姒傝
6
6
 
7
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
- │ └─ Pi Agent (API) │
18
- └──────────────────────────┘
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
+ 鈹斺攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?
19
18
  ```
20
19
 
21
- agents-bridge 始终作为客户端主动外连云端,客户无需暴露任何端口。
20
+ agents-bridge 濮嬬粓浣滀负瀹㈡埛绔富鍔ㄥ杩炰簯绔紝瀹㈡埛鏃犻渶鏆撮湶浠讳綍绔彛銆?
22
21
 
23
- ## 快速开始
22
+ ## 蹇€熷紑濮?
24
23
 
25
- ### 方式 A:npm 全局安装(推荐)
24
+ ### 鏂瑰紡 A锛歯pm 鍏ㄥ眬瀹夎锛堟帹鑽愶級
26
25
 
27
- ```bash
28
- npm install -g agents-bridge@latest
26
+ ```bash
27
+ npm install -g agents-bridge@latest
29
28
 
30
- # 交互式引导:输入 gateway URL、bot token、选择模型,自动生成配置
29
+ # 浜や簰寮忓紩瀵硷細杈撳叆 gateway URL銆乥ot token銆侀€夋嫨妯″瀷锛岃嚜鍔ㄧ敓鎴愰厤缃?
31
30
  agents-bridge onboard
32
31
 
33
- # 启动
32
+ # 鍚姩
34
33
  agents-bridge start
35
34
  ```
36
35
 
37
- ### 方式 B:Docker
36
+ ### 鏂瑰紡 B锛欴ocker
38
37
 
39
- ```bash
40
- docker run -d --name agents-bridge \
41
- -v /home/user/project:/workspace \
42
- -v agents-bridge-data:/root/.agent-bridge \
43
- -e AGENT_BRIDGE_GATEWAY_URL=https://your-botlink.com \
44
- -e AGENT_BRIDGE_BOT_TOKEN=bot_xxx \
45
- -e ANTHROPIC_API_KEY=sk-ant-xxx \
46
- agents-bridge:latest
47
- ```
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
46
+ ```
48
47
 
49
- 或使用 docker-compose:
48
+ 鎴栦娇鐢?docker-compose锛?
50
49
 
51
50
  ```bash
52
51
  cp .env.example .env
53
- # 编辑 .env 填入实际值
52
+ # 缂栬緫 .env 濉叆瀹為檯鍊?
54
53
  docker compose up -d
55
54
  ```
56
55
 
57
- ### 方式 C:源码运行(开发者)
56
+ ### 鏂瑰紡 C锛氭簮鐮佽繍琛岋紙寮€鍙戣€咃級
58
57
 
59
- ```bash
60
- git clone <repo-url>
61
- cd <repo-dir>
62
- pnpm install
63
- pnpm build
64
- cp config.example.json config.json # 编辑配置
65
- node dist/entry.js start
58
+ ```bash
59
+ git clone <repo-url>
60
+ cd <repo-dir>
61
+ pnpm install
62
+ pnpm build
63
+ cp config.example.json config.json # 缂栬緫閰嶇疆
64
+ node dist/entry.js start
66
65
  ```
67
66
 
68
- 开发模式(自动重载):
67
+ 寮€鍙戞ā寮忥紙鑷姩閲嶈浇锛夛細
69
68
 
70
69
  ```bash
71
70
  pnpm dev
72
71
  ```
73
72
 
74
- ## CLI 命令
73
+ ## CLI 鍛戒护
75
74
 
76
75
  ```bash
77
76
  agents-bridge start # 启动 gateway(前台)
@@ -80,26 +79,26 @@ agents-bridge start -c <path> # 指定配置文件启动
80
79
  agents-bridge stop # 停止守护进程
81
80
  agents-bridge status # 查看运行状态
82
81
  agents-bridge onboard # 交互式初始化引导
83
- agents-bridge doctor # 诊断环境(Node.js、CLI 工具、API Key)
84
- agents-bridge logs # 查看日志
82
+ agents-bridge doctor # 诊断环境、会话持久化、日志与 CLI 路径
83
+ agents-bridge logs # 查看当天最新日志
85
84
  agents-bridge config # 查看当前配置(脱敏显示)
86
85
  agents-bridge help # 帮助
87
86
  ```
88
87
 
89
- ## 配置
90
-
91
- ### 配置文件
88
+ ## 閰嶇疆
92
89
 
93
- 主配置文件为 JSON 格式,搜索顺序:
90
+ ### 閰嶇疆鏂囦欢
94
91
 
95
- 1. CLI 参数:`agents-bridge start -c /path/to/config.json`
96
- 2. 环境变量:`AGENT_BRIDGE_CONFIG=/path/to/config.json`
97
- 3. 用户目录:`~/.agent-bridge/config.json`
98
- 4. 当前目录:`./config.json`
92
+ 涓婚厤缃枃浠朵负 JSON 鏍煎紡锛屾悳绱㈤『搴忥細
99
93
 
100
- 完整示例见 [config.example.json](config.example.json)。
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
98
 
102
- ### 核心配置项
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锛?
103
102
 
104
103
  ```json
105
104
  {
@@ -115,8 +114,7 @@ agents-bridge help # 帮助
115
114
  "agents": {
116
115
  "defaults": {
117
116
  "model": {
118
- "primary": "claude-cli/opus-4.6",
119
- "fallbacks": ["anthropic/claude-sonnet-4-6"]
117
+ "primary": "claude-cli/opus-4.6"
120
118
  },
121
119
  "cliBackends": {
122
120
  "claude-cli": {
@@ -150,88 +148,118 @@ agents-bridge help # 帮助
150
148
  }
151
149
  ```
152
150
 
153
- ### 环境变量覆盖
151
+ ### 澶?Agent 閰嶇疆
152
+
153
+ 鍦?`agents` 涓嬪姞 `list` 瀹氫箟澶氫釜鍛藉悕 agent锛岀敤椤跺眰 `bindings` 鎸変細璇?鐢ㄦ埛璺敱锛?
154
+
155
+ ```json
156
+ {
157
+ "agents": {
158
+ "defaults": { "model": { "primary": "claude-cli/opus-4.6" } },
159
+ "list": [
160
+ { "id": "coder", "default": true, "workspace": "/home/user/app" },
161
+ { "id": "ops", "model": "codex-cli/o3", "workspace": "/opt/infra" }
162
+ ]
163
+ },
164
+ "bindings": [
165
+ { "agentId": "ops", "match": { "peer": { "id": "-300" } } },
166
+ { "agentId": "coder", "match": { "channel": "*" } }
167
+ ]
168
+ }
169
+ ```
170
+
171
+ 姣忎釜 agent 缁ф壙 `defaults` 骞跺彲瑕嗙洊 model銆亀orkspace銆乪nv銆乧liBackends 绛夈€傝瑙?[閰嶇疆鏂囨。](../agent-bridge-docs/docs/guides/configuration.md)銆?
154
172
 
155
- 环境变量可覆盖配置文件中的对应值:
173
+ ### 鐜鍙橀噺瑕嗙洊
156
174
 
157
- | 环境变量 | 覆盖 | 说明 |
175
+ 鐜鍙橀噺鍙鐩栭厤缃枃浠朵腑鐨勫搴斿€硷細
176
+
177
+ | 鐜鍙橀噺 | 瑕嗙洊 | 璇存槑 |
158
178
  |---|---|---|
159
- | `AGENT_BRIDGE_CONFIG` | — | 配置文件路径 |
160
- | `AGENT_BRIDGE_GATEWAY_URL` | `channels.botlink.gateway_url` | botlink 网关地址 |
161
- | `AGENT_BRIDGE_BOT_TOKEN` | `channels.botlink.bot_token` | Bot Token |
162
- | `AGENT_BRIDGE_LOG_LEVEL` | `logging.level` | 日志级别 |
163
- | `AGENT_BRIDGE_TEMP_DIR` | `files.temp_dir` | 临时文件目录 |
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` | 涓存椂鏂囦欢鐩綍 |
164
184
 
165
- ## 数据目录
185
+ ## 鏁版嵁鐩綍
166
186
 
167
187
  ```
168
188
  ~/.agent-bridge/
169
- ├── config.json # 主配置(onboard 生成)
170
- ├── agent-bridge.pid # PID 文件(daemon 模式)
171
- ├── data/
172
- │ ├── sessions/ # Agent 会话持久化
173
- │ │ └── cli-sessions.json # botlink session -> CLI session id 映射
174
- │ ├── files/ # 文件中转临时目录
175
- │ └── logs/ # 日志文件
176
- └── skills/ # 自定义技能
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/ # 鑷畾涔夋妧鑳?
177
203
  ```
178
204
 
179
- ## 项目结构
180
-
181
- ```
182
- agents-bridge/
183
- ├── bin/
184
- │ └── agent-bridge.mjs # CLI 入口(npm 全局安装)
185
- ├── src/
186
- │ ├── entry.ts # 主入口,子命令路由
187
- │ ├── cli/ # CLI 命令实现
188
- │ │ ├── run-main.ts # 参数解析
189
- │ │ ├── cmd-start.ts # start 命令
190
- │ │ ├── cmd-stop.ts # stop 命令
191
- │ │ ├── cmd-status.ts # status 命令
192
- │ │ ├── cmd-onboard.ts # onboard 交互引导
193
- │ │ ├── cmd-doctor.ts # doctor 环境诊断
194
- │ │ ├── cmd-logs.ts # logs 查看
195
- │ │ └── cmd-config.ts # config 查看
196
- │ ├── config/ # 配置加载与校验
197
- │ │ ├── config.ts # 主加载器
198
- │ │ ├── zod-schema.ts # Zod schema
199
- │ │ ├── paths.ts # 数据目录路径常量
200
- │ │ ├── env-vars.ts # 环境变量读取
201
- │ │ ├── merge-config.ts # 配置合并
202
- │ │ └── agent-dirs.ts # 目录初始化
203
- │ ├── channels/ # Channel 插件框架
204
- │ │ ├── registry.ts # 插件注册表
205
- │ │ ├── session.ts # 会话管理
206
- │ │ └── ...
207
- │ ├── agents/ # Agent 运行时
208
- │ │ ├── cli-backends.ts # CLI backend provider id / 默认配置装配
209
- │ │ ├── cli-session-store.ts # CLI session 映射持久化
210
- │ │ ├── cli-runner.ts # Claude/Codex CLI 执行器
211
- │ │ └── ...
212
- │ ├── types/ # 类型定义
213
- │ └── logger.ts # Pino 日志
214
- ├── extensions/ # Channel 插件(botlink)
215
- ├── skills/ # 技能定义
216
- ├── config.example.json # 配置示例
217
- ├── .env.example # 环境变量示例
218
- ├── Dockerfile
219
- ├── docker-compose.yml
220
- ├── package.json
221
- └── tsconfig.json
205
+ ## 椤圭洰缁撴瀯
206
+
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
222
250
  ```
223
251
 
224
- ## 三种 Agent 模式
252
+ ## 褰撳墠鏀寔鐨?Agent 妯″紡
225
253
 
226
- | 模式 | 模型引用示例 | 说明 |
254
+ | 妯″紡 | 妯″瀷寮曠敤绀轰緥 | 璇存槑 |
227
255
  |---|---|---|
228
256
  | Claude Code | `claude-cli/opus-4.6` | 通过 CLI backend 启动本地 `claude` 命令 |
229
- | Codex | `codex-cli/gpt-5.3-codex` | 通过 CLI backend 启动本地 `codex` 命令 |
257
+ | Codex | `codex-cli/gpt-5.4` | 通过 CLI backend 启动本地 `codex` 命令 |
230
258
  | Pi Agent | `anthropic/claude-sonnet-4-6` | 通过 LLM API 直连,内置工具执行 |
231
259
 
232
- 在 `config.json` 的 `agents.defaults.model.primary` 中选择。
260
+ 鍦?`config.json` 鐨?`agents.defaults.model.primary` 涓€夋嫨銆?
233
261
 
234
- ## CLI Backend 约定
262
+ ## CLI Backend 绾﹀畾
235
263
 
236
264
  - 内置 provider id 固定为 `claude-cli`、`codex-cli`。
237
265
  - `agents.defaults.cliBackends` 会覆盖内置默认值,不需要重复写全量字段。
@@ -239,21 +267,24 @@ agents-bridge/
239
267
  - CLI backend session id 会持久化到 `~/.agent-bridge/data/sessions/cli-sessions.json` 的 `cliSessionIds[providerId]`。
240
268
  - `serialize: true` 的语义是“同一 botlink session 串行、跨 session 可并发”。
241
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”的问题。
242
272
 
243
- ## 技术栈
273
+ ## 鎶€鏈爤
244
274
 
245
275
  - TypeScript + Node.js (>= 22.0.0)
246
276
  - pnpm (>= 9.0.0)
247
- - Pino(日志)
248
- - Zod(配置校验)
249
- - JSON(配置格式)
277
+ - Pino锛堟棩蹇楋級
278
+ - Zod锛堥厤缃牎楠岋級
279
+ - JSON锛堥厤缃牸寮忥級
250
280
 
251
- ## 开发
281
+ ## 寮€鍙?
252
282
 
253
283
  ```bash
254
- pnpm install # 安装依赖
255
- pnpm build # 编译
256
- pnpm dev # 开发模式(自动重载)
257
- pnpm typecheck # 类型检查
284
+ pnpm install # 瀹夎渚濊禆
285
+ pnpm build # 缂栬瘧
286
+ pnpm dev # 寮€鍙戞ā寮忥紙鑷姩閲嶈浇锛?
287
+ pnpm typecheck # 绫诲瀷妫€鏌?
258
288
  ```
259
289
 
290
+
@@ -1,12 +1,12 @@
1
- #!/usr/bin/env node
2
-
3
- // agents-bridge CLI entry point
4
- // Used by: npm install -g agents-bridge / npx agents-bridge
5
-
6
- import { fileURLToPath } from 'node:url'
7
- import { dirname, resolve } from 'node:path'
8
-
9
- const __dirname = dirname(fileURLToPath(import.meta.url))
10
-
11
- // Import the compiled entry point
1
+ #!/usr/bin/env node
2
+
3
+ // agents-bridge CLI entry point
4
+ // Used by: npm install -g agents-bridge / npx agents-bridge
5
+
6
+ import { fileURLToPath } from 'node:url'
7
+ import { dirname, resolve } from 'node:path'
8
+
9
+ const __dirname = dirname(fileURLToPath(import.meta.url))
10
+
11
+ // Import the compiled entry point
12
12
  await import(resolve(__dirname, '..', 'dist', 'entry.js'))
@@ -1,8 +1,8 @@
1
- {
1
+ {
2
2
  "channels": {
3
3
  "botlink": {
4
- "gateway_url": "https://test.51yzt.cn",
5
- "bot_token": "bot_WEMU0m9NVxwOQIMVaNYskiSDTK-_1hA7dcCrQCzoxcU",
4
+ "gateway_url": "https://your-botlink.com",
5
+ "bot_token": "bot_xxx",
6
6
  "poll_timeout": 30,
7
7
  "retry_interval": 5,
8
8
  "max_retry_interval": 60
@@ -11,10 +11,7 @@
11
11
  "agents": {
12
12
  "defaults": {
13
13
  "model": {
14
- "primary": "claude-cli/opus-4.6",
15
- "fallbacks": [
16
- "anthropic/claude-sonnet-4-6"
17
- ]
14
+ "primary": "claude-cli/opus-4.6"
18
15
  },
19
16
  "cliBackends": {
20
17
  "claude-cli": {
@@ -45,67 +42,37 @@
45
42
  "systemPromptArg": "--append-system-prompt",
46
43
  "systemPromptMode": "append",
47
44
  "systemPromptWhen": "first",
48
- "clearEnv": [
49
- "ANTHROPIC_API_KEY",
50
- "ANTHROPIC_API_KEY_OLD"
51
- ],
52
45
  "sessionMode": "always",
53
- "serialize": true,
54
- "reliability": {
55
- "watchdog": {
56
- "fresh": {
57
- "noOutputTimeoutRatio": 0.8,
58
- "minMs": 180000,
59
- "maxMs": 600000
60
- },
61
- "resume": {
62
- "noOutputTimeoutRatio": 0.3,
63
- "minMs": 60000,
64
- "maxMs": 180000
65
- }
66
- }
67
- }
46
+ "serialize": true
68
47
  },
69
48
  "codex-cli": {
70
49
  "command": "codex",
71
- "args": [
72
- "exec", "--json", "--color", "never",
73
- "--sandbox", "read-only", "--skip-git-repo-check"
74
- ],
75
- "resumeArgs": [
76
- "exec", "resume", "{sessionId}", "--color", "never",
77
- "--sandbox", "read-only", "--skip-git-repo-check"
78
- ],
79
- "output": "jsonl",
80
- "resumeOutput": "text",
81
- "modelArg": "--model",
50
+ "runtimeMode": "app-server",
51
+ "appServer": {
52
+ "listen": "stdio://",
53
+ "sessionSource": "agent-bridge",
54
+ "startupTimeoutMs": 15000,
55
+ "requestTimeoutMs": 30000,
56
+ "serviceName": "agent-bridge",
57
+ "experimentalApi": false,
58
+ "approvalPolicy": "never",
59
+ "sandbox": "read-only",
60
+ "persistExtendedHistory": false,
61
+ "experimentalRawEvents": false
62
+ },
82
63
  "sessionIdFields": [
83
64
  "thread_id"
84
65
  ],
85
- "imageArg": "--image",
86
- "imageMode": "repeat",
87
66
  "sessionMode": "existing",
88
- "serialize": true,
89
- "reliability": {
90
- "watchdog": {
91
- "fresh": {
92
- "noOutputTimeoutRatio": 0.8,
93
- "minMs": 180000,
94
- "maxMs": 600000
95
- },
96
- "resume": {
97
- "noOutputTimeoutRatio": 0.3,
98
- "minMs": 60000,
99
- "maxMs": 180000
100
- }
101
- }
102
- }
67
+ "serialize": true
103
68
  }
104
69
  }
105
70
  }
106
71
  },
107
72
  "skills": {
108
- "dirs": ["./skills"]
73
+ "dirs": [
74
+ "./skills"
75
+ ]
109
76
  },
110
77
  "files": {
111
78
  "temp_dir": "/tmp/agent-bridge/files",
@@ -0,0 +1,67 @@
1
+ {
2
+ "channels": {
3
+ "botlink": {
4
+ "accounts": {
5
+ "codex-bot": {
6
+ "gateway_url": "https://your-botlink.com",
7
+ "bot_token": "bot_codex_xxx",
8
+ "poll_timeout": 30,
9
+ "retry_interval": 5,
10
+ "max_retry_interval": 60
11
+ },
12
+ "claude-bot": {
13
+ "gateway_url": "https://your-botlink.com",
14
+ "bot_token": "bot_claude_xxx",
15
+ "poll_timeout": 30,
16
+ "retry_interval": 5,
17
+ "max_retry_interval": 60
18
+ }
19
+ }
20
+ }
21
+ },
22
+ "agents": {
23
+ "defaults": {
24
+ "model": {
25
+ "primary": "claude-cli/opus-4.6"
26
+ }
27
+ },
28
+ "list": [
29
+ {
30
+ "id": "codex-assistant",
31
+ "default": true,
32
+ "name": "Codex 助理",
33
+ "model": "codex-cli/gpt-5.4",
34
+ "workspace": "/workspace/app",
35
+ "cliSessionId": "thread_xxxxxxxxxxxxxxxx"
36
+ },
37
+ {
38
+ "id": "claudecode-assistant",
39
+ "name": "Claude Code 助理",
40
+ "model": "claude-cli/opus-4.6",
41
+ "workspace": "/workspace/app",
42
+ "cliSessionId": "01970df8-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
43
+ }
44
+ ]
45
+ },
46
+ "bindings": [
47
+ {
48
+ "agentId": "codex-assistant",
49
+ "comment": "codex bot",
50
+ "match": {
51
+ "channel": "botlink",
52
+ "accountId": "codex-bot"
53
+ }
54
+ },
55
+ {
56
+ "agentId": "claudecode-assistant",
57
+ "comment": "claude bot",
58
+ "match": {
59
+ "channel": "botlink",
60
+ "accountId": "claude-bot"
61
+ }
62
+ }
63
+ ],
64
+ "logging": {
65
+ "level": "info"
66
+ }
67
+ }
@@ -0,0 +1,12 @@
1
+ import type { AppConfig } from '../config/zod-schema.js';
2
+ import type { Logger, ResolvedAgent } from '../types/index.js';
3
+ export interface ResolveAgentsResult {
4
+ agents: Map<string, ResolvedAgent>;
5
+ defaultAgentId: string;
6
+ }
7
+ /**
8
+ * Resolve agent configurations: merge defaults + list → Map<agentId, ResolvedAgent>.
9
+ * Called once at startup, result cached for routing.
10
+ */
11
+ export declare function resolveAgentConfigs(config: AppConfig, logger: Logger): ResolveAgentsResult;
12
+ //# sourceMappingURL=agent-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-resolver.d.ts","sourceRoot":"","sources":["../../src/agents/agent-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAe,MAAM,yBAAyB,CAAA;AACrE,OAAO,KAAK,EAAoB,MAAM,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAKhF,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;IAClC,cAAc,EAAE,MAAM,CAAA;CACvB;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,mBAAmB,CAyC1F"}