opencode-bridge 2.9.0 → 2.9.1-1

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 (38) hide show
  1. package/.env.example +137 -131
  2. package/LICENSE +674 -674
  3. package/README.md +418 -1197
  4. package/bin/opencode-bridge.js +31 -31
  5. package/dist/commands/parser.js +49 -49
  6. package/dist/config.d.ts +2 -0
  7. package/dist/config.d.ts.map +1 -1
  8. package/dist/config.js +4 -0
  9. package/dist/config.js.map +1 -1
  10. package/dist/feishu/cards-stream.d.ts +2 -0
  11. package/dist/feishu/cards-stream.d.ts.map +1 -1
  12. package/dist/feishu/cards-stream.js.map +1 -1
  13. package/dist/feishu/cards.d.ts +2 -0
  14. package/dist/feishu/cards.d.ts.map +1 -1
  15. package/dist/feishu/cards.js +6 -0
  16. package/dist/feishu/cards.js.map +1 -1
  17. package/dist/handlers/discord.js +5 -5
  18. package/dist/index.js +51 -82
  19. package/dist/index.js.map +1 -1
  20. package/dist/opencode/tool-trace.d.ts +4 -0
  21. package/dist/opencode/tool-trace.d.ts.map +1 -0
  22. package/dist/opencode/tool-trace.js +77 -0
  23. package/dist/opencode/tool-trace.js.map +1 -0
  24. package/dist/permissions/handler.d.ts +4 -0
  25. package/dist/permissions/handler.d.ts.map +1 -1
  26. package/dist/permissions/handler.js +4 -0
  27. package/dist/permissions/handler.js.map +1 -1
  28. package/dist/router/action-handlers.d.ts.map +1 -1
  29. package/dist/router/action-handlers.js +54 -12
  30. package/dist/router/action-handlers.js.map +1 -1
  31. package/dist/router/opencode-event-hub.d.ts.map +1 -1
  32. package/dist/router/opencode-event-hub.js +2 -8
  33. package/dist/router/opencode-event-hub.js.map +1 -1
  34. package/dist/utils/process-cleanup.d.ts +22 -0
  35. package/dist/utils/process-cleanup.d.ts.map +1 -0
  36. package/dist/utils/process-cleanup.js +75 -0
  37. package/dist/utils/process-cleanup.js.map +1 -0
  38. package/package.json +73 -73
package/.env.example CHANGED
@@ -1,131 +1,137 @@
1
- # 飞书应用配置(从开发者后台获取)
2
- FEISHU_APP_ID=cli_xxxxxxxxxxxxx
3
- FEISHU_APP_SECRET=xxxxxxxxxxxxxxxxxxxxxxxx
4
-
5
- # npm CLI 默认优先读取当前工作目录下的 .env;若不存在,则读取 ~/.config/opencode-bridge/.env
6
- # 也可以通过命令行覆盖:opencode-bridge --config-dir /path/to/config
7
-
8
- # 用户白名单(你的飞书 open_id)
9
- # ALLOWED_USERS=ou_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
10
-
11
- # 平台启用过滤(可选,逗号分隔)
12
- # ENABLED_PLATFORMS=feishu,discord
13
-
14
- # Discord 适配器(可选)
15
- # DISCORD_ENABLED=true
16
- # 兼容两种 token 命名:DISCORD_TOKEN / DISCORD_BOT_TOKEN
17
- # DISCORD_TOKEN=your-discord-bot-token
18
- # DISCORD_BOT_TOKEN=your-discord-bot-token
19
- # DISCORD_CLIENT_ID=your-discord-client-id
20
- # 需要在 Discord Developer Portal 开启 Message Content Intent
21
- # 并给机器人授予发送/读取频道消息权限
22
-
23
- # OpenCode 服务地址
24
- # OPENCODE_HOST=localhost
25
- # OPENCODE_PORT=4096
26
-
27
- # OpenCode Server Basic Auth(可选)
28
- # OpenCode 设置 OPENCODE_SERVER_PASSWORD 后,桥接端需要配置同一组凭据
29
- # OPENCODE_SERVER_USERNAME 默认为 opencode
30
- # OPENCODE_SERVER_USERNAME=opencode
31
- # OPENCODE_SERVER_PASSWORD=your-strong-password
32
-
33
- # 可靠性(心跳 + Cron + 宕机救援)
34
- # 是否启用可靠性 Cron 调度
35
- # RELIABILITY_CRON_ENABLED=true
36
- # 是否启用运行时 Cron API(支持 /cron/add|remove|update|list)
37
- # RELIABILITY_CRON_API_ENABLED=false
38
- # Cron API 监听地址和端口
39
- # RELIABILITY_CRON_API_HOST=127.0.0.1
40
- # RELIABILITY_CRON_API_PORT=4097
41
- # Cron API Bearer Token(可选)
42
- # RELIABILITY_CRON_API_TOKEN=your-token
43
- # Cron 动态任务持久化文件(默认 ~/cron/jobs.json)
44
- # RELIABILITY_CRON_JOBS_FILE=/absolute/path/jobs.json
45
- # 是否自动清理僵尸 Cron(启动扫描 / 群解散或频道删除联动 / stale cleanup)
46
- # RELIABILITY_CRON_ORPHAN_AUTO_CLEANUP=false
47
- # 原聊天窗口失效时,是否允许转发到私聊/备用窗口
48
- # RELIABILITY_CRON_FORWARD_TO_PRIVATE=false
49
- # Feishu 备用接收 chat_id(可选)
50
- # RELIABILITY_CRON_FALLBACK_FEISHU_CHAT_ID=oc_xxx
51
- # Discord 备用接收频道/私聊 conversationId(可选)
52
- # RELIABILITY_CRON_FALLBACK_DISCORD_CONVERSATION_ID=1234567890
53
- # 主动心跳开关(Bridge 定时器,默认关闭)
54
- # RELIABILITY_PROACTIVE_HEARTBEAT_ENABLED=false
55
- # 入站消息触发心跳开关(兼容模式,默认关闭)
56
- # RELIABILITY_INBOUND_HEARTBEAT_ENABLED=false
57
- # 主动心跳轮询间隔(毫秒)
58
- # RELIABILITY_HEARTBEAT_INTERVAL_MS=1800000
59
- # 主动心跳使用的 Agent(可选)
60
- # RELIABILITY_HEARTBEAT_AGENT=companion
61
- # 主动心跳提示词(可选,建议包含 HEARTBEAT_OK)
62
- # RELIABILITY_HEARTBEAT_PROMPT=Read HEARTBEAT.md if it exists... reply HEARTBEAT_OK
63
- # 心跳告警推送目标飞书 chat_id(逗号分隔,可选)
64
- # RELIABILITY_HEARTBEAT_ALERT_CHATS=oc_xxx,oc_yyy
65
- # 无限重连场景:连续失败阈值与时间窗口
66
- # RELIABILITY_FAILURE_THRESHOLD=3
67
- # RELIABILITY_WINDOW_MS=90000
68
- # 两次自动救援之间的冷却时间(毫秒)
69
- # RELIABILITY_COOLDOWN_MS=300000
70
- # 自动救援预算(耗尽后转人工介入)
71
- # RELIABILITY_REPAIR_BUDGET=3
72
- # 可靠性模式预留字段:observe | shadow | active
73
- # RELIABILITY_MODE=observe
74
- # 仅允许本地 loopback(localhost/127.0.0.1/::1)自动救援
75
- # RELIABILITY_LOOPBACK_ONLY=true
76
- # 宕机救援用于备份/回退的 OpenCode 配置文件路径
77
- # OPENCODE_CONFIG_FILE=./opencode.json
78
-
79
- # 群聊是否仅在明确 @ 机器人时才响应(true/false)
80
- # false: 兼容旧行为,群聊普通消息也会响应
81
- # true: 仅在群聊中被 @ 才响应
82
- # GROUP_REQUIRE_MENTION=false
83
-
84
- # 输出显示配置(可选)
85
- # 思维链和工具链显示控制
86
- # 全局开关:默认 true,设为 false 可隐藏对应内容
87
- # SHOW_THINKING_CHAIN=true
88
- # SHOW_TOOL_CHAIN=true
89
-
90
- # 飞书特定开关(优先级高于全局:平台键覆盖全局键)
91
- # FEISHU_SHOW_THINKING_CHAIN=true
92
- # FEISHU_SHOW_TOOL_CHAIN=true
93
- #
94
- # Discord 特定开关(优先级高于全局:平台键覆盖全局键)
95
- # DISCORD_SHOW_THINKING_CHAIN=true
96
- # DISCORD_SHOW_TOOL_CHAIN=true
97
-
98
- # 工作目录配置(可选)
99
- # 允许的工作目录根列表(逗号分隔绝对路径)
100
- # 未配置时用户不能自定义路径,只能使用默认目录或从已知项目选择
101
- # ALLOWED_DIRECTORIES=/home/user/projects,/opt/repos
102
- # 全局默认工作目录(最低优先级兜底,不配置则跟随 OpenCode 服务端)
103
- # DEFAULT_WORK_DIRECTORY=/home/user/projects/main-project
104
- # 项目别名映射(JSON 格式,短名 → 绝对路径)
105
- # PROJECT_ALIASES={"frontend":"/home/user/frontend","backend":"/home/user/backend"}
106
- # 是否自动将目录归一到 Git 仓库根目录(默认 true)
107
- # GIT_ROOT_NORMALIZATION=true
108
-
109
- # 自动允许的工具(不需要确认)
110
- TOOL_WHITELIST=Read,Glob,Grep,Task,Write
111
-
112
- # 权限请求在桥接侧的保留时长(毫秒)
113
- # <= 0 表示不超时(默认),会一直等待用户回复
114
- # PERMISSION_REQUEST_TIMEOUT_MS=0
115
-
116
- # 输出配置
117
- OUTPUT_UPDATE_INTERVAL=3000
118
-
119
- # 延迟响应最大等待时间(毫秒)
120
- MAX_DELAYED_RESPONSE_WAIT_MS=120000
121
-
122
- # 是否允许手动绑定已有 OpenCode 会话(true/false)
123
- # true: 开启 /session <sessionId> 与建群下拉中的“绑定已有会话”
124
- # false: 仅允许新建会话,不展示/不允许绑定已有会话
125
- ENABLE_MANUAL_SESSION_BIND=true
126
-
127
- # 路由模式(legacy | dual | router)
128
- # legacy: 默认稳定模式
129
- # dual: 双轨对比日志模式
130
- # router: 新路由模式
131
- # ROUTER_MODE=legacy
1
+ # 飞书应用配置(从开发者后台获取)
2
+ FEISHU_APP_ID=cli_xxxxxxxxxxxxx
3
+ FEISHU_APP_SECRET=xxxxxxxxxxxxxxxxxxxxxxxx
4
+
5
+ # npm CLI 默认优先读取当前工作目录下的 .env;若不存在,则读取 ~/.config/opencode-bridge/.env
6
+ # 也可以通过命令行覆盖:opencode-bridge --config-dir /path/to/config
7
+
8
+ # 用户白名单(你的飞书 open_id)
9
+ # ALLOWED_USERS=ou_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
10
+
11
+ # 平台启用过滤(可选,逗号分隔)
12
+ # ENABLED_PLATFORMS=feishu,discord
13
+
14
+ # Discord 适配器(可选)
15
+ # DISCORD_ENABLED=true
16
+ # 兼容两种 token 命名:DISCORD_TOKEN / DISCORD_BOT_TOKEN
17
+ # DISCORD_TOKEN=your-discord-bot-token
18
+ # DISCORD_BOT_TOKEN=your-discord-bot-token
19
+ # DISCORD_CLIENT_ID=your-discord-client-id
20
+ # 需要在 Discord Developer Portal 开启 Message Content Intent
21
+ # 并给机器人授予发送/读取频道消息权限
22
+
23
+ # OpenCode 服务地址
24
+ # OPENCODE_HOST=localhost
25
+ # OPENCODE_PORT=4096
26
+
27
+ # OpenCode 自动启动(可选)
28
+ # 设置为 true 时,Bridge 启动时会自动启动 OpenCode 后台进程
29
+ # OPENCODE_AUTO_START=false
30
+ # 可自定义启动命令(默认为 opencode serve,headless 后台模式)
31
+ # OPENCODE_AUTO_START_CMD=opencode serve
32
+
33
+ # OpenCode Server Basic Auth(可选)
34
+ # OpenCode 设置 OPENCODE_SERVER_PASSWORD 后,桥接端需要配置同一组凭据
35
+ # OPENCODE_SERVER_USERNAME 默认为 opencode
36
+ # OPENCODE_SERVER_USERNAME=opencode
37
+ # OPENCODE_SERVER_PASSWORD=your-strong-password
38
+
39
+ # 可靠性(心跳 + Cron + 宕机救援)
40
+ # 是否启用可靠性 Cron 调度
41
+ # RELIABILITY_CRON_ENABLED=true
42
+ # 是否启用运行时 Cron API(支持 /cron/add|remove|update|list)
43
+ # RELIABILITY_CRON_API_ENABLED=false
44
+ # Cron API 监听地址和端口
45
+ # RELIABILITY_CRON_API_HOST=127.0.0.1
46
+ # RELIABILITY_CRON_API_PORT=4097
47
+ # Cron API Bearer Token(可选)
48
+ # RELIABILITY_CRON_API_TOKEN=your-token
49
+ # Cron 动态任务持久化文件(默认 ~/cron/jobs.json)
50
+ # RELIABILITY_CRON_JOBS_FILE=/absolute/path/jobs.json
51
+ # 是否自动清理僵尸 Cron(启动扫描 / 群解散或频道删除联动 / stale cleanup)
52
+ # RELIABILITY_CRON_ORPHAN_AUTO_CLEANUP=false
53
+ # 原聊天窗口失效时,是否允许转发到私聊/备用窗口
54
+ # RELIABILITY_CRON_FORWARD_TO_PRIVATE=false
55
+ # Feishu 备用接收 chat_id(可选)
56
+ # RELIABILITY_CRON_FALLBACK_FEISHU_CHAT_ID=oc_xxx
57
+ # Discord 备用接收频道/私聊 conversationId(可选)
58
+ # RELIABILITY_CRON_FALLBACK_DISCORD_CONVERSATION_ID=1234567890
59
+ # 主动心跳开关(Bridge 定时器,默认关闭)
60
+ # RELIABILITY_PROACTIVE_HEARTBEAT_ENABLED=false
61
+ # 入站消息触发心跳开关(兼容模式,默认关闭)
62
+ # RELIABILITY_INBOUND_HEARTBEAT_ENABLED=false
63
+ # 主动心跳轮询间隔(毫秒)
64
+ # RELIABILITY_HEARTBEAT_INTERVAL_MS=1800000
65
+ # 主动心跳使用的 Agent(可选)
66
+ # RELIABILITY_HEARTBEAT_AGENT=companion
67
+ # 主动心跳提示词(可选,建议包含 HEARTBEAT_OK)
68
+ # RELIABILITY_HEARTBEAT_PROMPT=Read HEARTBEAT.md if it exists... reply HEARTBEAT_OK
69
+ # 心跳告警推送目标飞书 chat_id(逗号分隔,可选)
70
+ # RELIABILITY_HEARTBEAT_ALERT_CHATS=oc_xxx,oc_yyy
71
+ # 无限重连场景:连续失败阈值与时间窗口
72
+ # RELIABILITY_FAILURE_THRESHOLD=3
73
+ # RELIABILITY_WINDOW_MS=90000
74
+ # 两次自动救援之间的冷却时间(毫秒)
75
+ # RELIABILITY_COOLDOWN_MS=300000
76
+ # 自动救援预算(耗尽后转人工介入)
77
+ # RELIABILITY_REPAIR_BUDGET=3
78
+ # 可靠性模式预留字段:observe | shadow | active
79
+ # RELIABILITY_MODE=observe
80
+ # 仅允许本地 loopback(localhost/127.0.0.1/::1)自动救援
81
+ # RELIABILITY_LOOPBACK_ONLY=true
82
+ # 宕机救援用于备份/回退的 OpenCode 配置文件路径
83
+ # OPENCODE_CONFIG_FILE=./opencode.json
84
+
85
+ # 群聊是否仅在明确 @ 机器人时才响应(true/false)
86
+ # false: 兼容旧行为,群聊普通消息也会响应
87
+ # true: 仅在群聊中被 @ 才响应
88
+ # GROUP_REQUIRE_MENTION=false
89
+
90
+ # 输出显示配置(可选)
91
+ # 思维链和工具链显示控制
92
+ # 全局开关:默认 true,设为 false 可隐藏对应内容
93
+ # SHOW_THINKING_CHAIN=true
94
+ # SHOW_TOOL_CHAIN=true
95
+
96
+ # 飞书特定开关(优先级高于全局:平台键覆盖全局键)
97
+ # FEISHU_SHOW_THINKING_CHAIN=true
98
+ # FEISHU_SHOW_TOOL_CHAIN=true
99
+ #
100
+ # Discord 特定开关(优先级高于全局:平台键覆盖全局键)
101
+ # DISCORD_SHOW_THINKING_CHAIN=true
102
+ # DISCORD_SHOW_TOOL_CHAIN=true
103
+
104
+ # 工作目录配置(可选)
105
+ # 允许的工作目录根列表(逗号分隔绝对路径)
106
+ # 未配置时用户不能自定义路径,只能使用默认目录或从已知项目选择
107
+ # ALLOWED_DIRECTORIES=/home/user/projects,/opt/repos
108
+ # 全局默认工作目录(最低优先级兜底,不配置则跟随 OpenCode 服务端)
109
+ # DEFAULT_WORK_DIRECTORY=/home/user/projects/main-project
110
+ # 项目别名映射(JSON 格式,短名 → 绝对路径)
111
+ # PROJECT_ALIASES={"frontend":"/home/user/frontend","backend":"/home/user/backend"}
112
+ # 是否自动将目录归一到 Git 仓库根目录(默认 true)
113
+ # GIT_ROOT_NORMALIZATION=true
114
+
115
+ # 自动允许的工具(不需要确认)
116
+ TOOL_WHITELIST=Read,Glob,Grep,Task,Write
117
+
118
+ # 权限请求在桥接侧的保留时长(毫秒)
119
+ # <= 0 表示不超时(默认),会一直等待用户回复
120
+ # PERMISSION_REQUEST_TIMEOUT_MS=0
121
+
122
+ # 输出配置
123
+ OUTPUT_UPDATE_INTERVAL=3000
124
+
125
+ # 延迟响应最大等待时间(毫秒)
126
+ MAX_DELAYED_RESPONSE_WAIT_MS=120000
127
+
128
+ # 是否允许手动绑定已有 OpenCode 会话(true/false)
129
+ # true: 开启 /session <sessionId> 与建群下拉中的“绑定已有会话”
130
+ # false: 仅允许新建会话,不展示/不允许绑定已有会话
131
+ ENABLE_MANUAL_SESSION_BIND=true
132
+
133
+ # 路由模式(legacy | dual | router)
134
+ # legacy: 默认稳定模式
135
+ # dual: 双轨对比日志模式
136
+ # router: 新路由模式
137
+ # ROUTER_MODE=legacy