@jesonliu/lark-claudecode-bridge 0.3.1 → 0.7.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.
Files changed (59) hide show
  1. package/README.md +90 -12
  2. package/config.example.yaml +42 -17
  3. package/dist/auth-precheck.d.ts +3 -3
  4. package/dist/auth-precheck.js +6 -7
  5. package/dist/auth-precheck.js.map +1 -1
  6. package/dist/cli/app-manager.d.ts +2 -3
  7. package/dist/cli/app-manager.js +2 -7
  8. package/dist/cli/app-manager.js.map +1 -1
  9. package/dist/cli/setup-wizard.d.ts +1 -0
  10. package/dist/cli/setup-wizard.js +5 -6
  11. package/dist/cli/setup-wizard.js.map +1 -1
  12. package/dist/config.js +73 -10
  13. package/dist/config.js.map +1 -1
  14. package/dist/executor/claude-executor.d.ts +8 -2
  15. package/dist/executor/claude-executor.js +20 -2
  16. package/dist/executor/claude-executor.js.map +1 -1
  17. package/dist/executor/notify-server.d.ts +2 -5
  18. package/dist/executor/notify-server.js +3 -48
  19. package/dist/executor/notify-server.js.map +1 -1
  20. package/dist/executor/permission-gate.d.ts +30 -0
  21. package/dist/executor/permission-gate.js +56 -5
  22. package/dist/executor/permission-gate.js.map +1 -1
  23. package/dist/executor/plugin-discovery.d.ts +26 -0
  24. package/dist/executor/plugin-discovery.js +131 -0
  25. package/dist/executor/plugin-discovery.js.map +1 -0
  26. package/dist/gateway/card-builder.d.ts +16 -1
  27. package/dist/gateway/card-builder.js +58 -0
  28. package/dist/gateway/card-builder.js.map +1 -1
  29. package/dist/gateway/diff-card.d.ts +16 -0
  30. package/dist/gateway/diff-card.js +39 -0
  31. package/dist/gateway/diff-card.js.map +1 -0
  32. package/dist/gateway/feishu-gateway.js +9 -2
  33. package/dist/gateway/feishu-gateway.js.map +1 -1
  34. package/dist/index.js +163 -32
  35. package/dist/index.js.map +1 -1
  36. package/dist/session/commands.d.ts +13 -2
  37. package/dist/session/commands.js +97 -9
  38. package/dist/session/commands.js.map +1 -1
  39. package/dist/session/session-store.d.ts +3 -0
  40. package/dist/session/session-store.js.map +1 -1
  41. package/dist/session/triggers.d.ts +1 -1
  42. package/dist/session/triggers.js +3 -2
  43. package/dist/session/triggers.js.map +1 -1
  44. package/dist/types.d.ts +49 -9
  45. package/dist/util/beijing-time.d.ts +5 -0
  46. package/dist/util/beijing-time.js +33 -0
  47. package/dist/util/beijing-time.js.map +1 -0
  48. package/dist/util/chunk-text.d.ts +2 -0
  49. package/dist/util/chunk-text.js +48 -0
  50. package/dist/util/chunk-text.js.map +1 -0
  51. package/dist/util/diff.d.ts +2 -0
  52. package/dist/util/diff.js +70 -0
  53. package/dist/util/diff.js.map +1 -0
  54. package/dist/util/workspace-diff.d.ts +9 -0
  55. package/dist/util/workspace-diff.js +56 -0
  56. package/dist/util/workspace-diff.js.map +1 -0
  57. package/dist/version.d.ts +1 -1
  58. package/dist/version.js +1 -1
  59. package/package.json +3 -1
package/README.md CHANGED
@@ -7,11 +7,15 @@
7
7
  ## 特性
8
8
 
9
9
  - 私聊 / 群聊 @机器人 触发;群聊多人可用(配对 + 白名单访问控制)
10
- - **多机器人**:一个进程同时跑 N 个飞书机器人,各自独立会话池、独立并发、独立 Claude Code 实例(会话存储/设置/插件/模型凭证互不共享)
11
- - 写操作确认卡片:允许 / 拒绝 / 本次会话不再询问(仅任务发起人可点)
10
+ - **直接使用本机 Claude Code 全套配置**:模型设置(`~/.claude/settings.json`)、登录态、user 级 MCP、skills、marketplace 插件自动继承,无须二次配置;已启用插件自动加载
11
+ - **斜杠透传**:飞书里直接发 `/superpowers:brainstorming` 等斜杠命令,原文透传给 Claude Code 展开(user skills / 插件命令均可触发);配合飞书「机器人菜单」可做成输入框上方的快捷操作按钮
12
+ - **多机器人**:一个进程同时跑 N 个飞书机器人,各自独立会话池、独立并发、独立人格(`append_system_prompt`);共享同一套 `~/.claude` 配置
13
+ - 写操作确认卡片:允许 / 拒绝 / 本次会话不再询问(仅任务发起人可点),Write/Edit 卡片直接展示红绿 diff
14
+ - **读操作免确认**:读工具(Read/Grep/Glob 等)与 Bash 读命令默认直通,危险命令黑名单兜底;白名单可通过 `permissions.allow_tools` 自定义
15
+ - **开发场景工作流(`type: code-dev`)**:统一 plan mode——先出计划 → 飞书卡片批准/按意见修改/放弃 → 批准后自动执行;任务收尾发汇总 diff 卡片(红绿着色),不再整文件刷屏
12
16
  - 流式进度卡片(打字机效果 + 工具调用 + 运行心跳,静默不等于卡死)
13
- - 结果文本 + 产出文件回传(图片预览、>10 文件自动 zip
14
- - 多工作区切换(/ws)、会话管理(/new /resume)、/stop 打断
17
+ - 结果文本 + 产出文件回传(图片预览、>10 文件自动 zip;generic 工作区)
18
+ - 多工作区切换(/ws)、会话管理(/new /resume)、/stop 打断、模型切换(/model)、加载清单查看(/skills /plugins /mcp)
15
19
  - **对话内容落盘**:用户消息与 Claude 回复全文存为 JSONL(`transcripts/`,为后续知识库挖掘打底;可选保留期)
16
20
  - 通道并发(默认 3),通道内串行
17
21
 
@@ -32,13 +36,33 @@ lcb start
32
36
  ## 飞书应用配置(图文)
33
37
 
34
38
  1. https://open.feishu.cn → 创建企业自建应用 → 添加「机器人」能力
35
- 2. 权限管理开通:`im:message`、`im:message:send_as_bot`、`im:resource`、`contact:user.base:readonly`
39
+ 2. 权限管理开通:`im:message`、`im:message:send_as_bot`、`im:resource`、`contact:user.base:readonly`、 `application:app_slash_command:write`(这里的目的是可以为飞书机器人增加斜杆命令。如:/help)
36
40
  3. 事件与回调 → 事件配置 → 订阅方式选「使用长连接接收事件」→ 添加 `im.message.receive_v1`
37
41
  4. 事件与回调 → 回调配置 → 订阅方式选「使用长连接接收回调」→「已订阅的回调」点「添加回调」,添加「卡片回传交互」(`card.action.trigger`)
38
42
  5. 凭证与基础信息 → 复制 App ID / App Secret
39
43
  6. 版本管理与发布 → 创建版本并发布,管理员审核通过
40
44
  7. 运行 `lcb setup` 填入凭证 → `lcb start` → 私聊机器人发「/help」
41
45
 
46
+ ### 配置斜杆命令
47
+ ```curl
48
+ curl --location --request POST 'https://open.feishu.cn/open-apis/application/v7/app_slash_commands' \
49
+ --header 'Authorization: Bearer YOUR_TENANT_ACCESS_TOKEN' \
50
+ --header 'Content-Type: application/json; charset=utf-8' \
51
+ --data-raw '{
52
+ "command": "greet",
53
+ "description": {
54
+ "default_value": "发送一句问候",
55
+ "i18n": {
56
+ "en_us": "Send a greeting",
57
+ "zh_cn": "发送一句问候"
58
+ },
59
+ "icon": {
60
+ "icon_key": "skill_outlined"
61
+ }
62
+ }
63
+ }'
64
+ ```
65
+
42
66
  ## 首次配对
43
67
 
44
68
  第一个发消息的用户会收到 6 位配对码(15 分钟内有效),在 `lcb start` 的终端里输入该码回车即批准(首个批准者自动成为 admin)。或另开终端 `lcb pair <code>`——批准写盘后,运行中的桥在下一条消息到达时自动重读白名单,无需重启。
@@ -69,7 +93,12 @@ lcb start
69
93
  | /stop | 停止当前任务 |
70
94
  | /status | 当前状态 |
71
95
  | /ws list / /ws use \<名字\> | 工作区(切换仅 admin 可用) |
96
+ | /model | 查看当前模型;`/model <名字>` 通道级切换;`/model reset` 恢复默认 |
97
+ | /skills / /plugins / /mcp | 查看本会话实际加载的技能 / 插件 / MCP 服务 |
72
98
  | /help | 帮助 |
99
+ | 其它 `/xxx` | **原文透传**给 Claude Code 派发斜杠命令(如 `/superpowers:brainstorming` 触发插件技能) |
100
+
101
+ > 清单类命令(/skills 等)的数据来自最近一次会话的加载清单;刚启动还没跑过任务时,先发一条普通消息(如「你好」)再查。
73
102
 
74
103
  ## 配置文件 ~/.lark-claudecode-bridge/config.yaml
75
104
 
@@ -83,26 +112,72 @@ apps: # 多机器人:每个应用一条长连接
83
112
  # domain: lark # 国际版 Lark 才需要
84
113
  # default_workspace: demo # 该机器人的默认工作区
85
114
  # concurrency: 2 # 该机器人的并发上限
86
- # append_system_prompt: '你是我的素材收集助手' # 人格补充
87
- # env: # per-app 环境变量(不同机器人用不同模型端点/密钥)
88
- # ANTHROPIC_BASE_URL: https://your-endpoint/
115
+ # append_system_prompt: '你是我的素材收集助手' # 人格补充(多机器人差异化定位的主要手段)
116
+ # env: # per-app 环境变量(注意 ~/.claude/settings.json 的 env 优先级更高,
117
+ # 此处适合放 settings.json 里没有的键)
118
+ # SOME_PLUGIN_KEY: xxx
89
119
  workspaces: # 工作区白名单(列表全局共享;「当前用哪个」per-app 隔离)
90
120
  - name: demo
91
121
  path: F:\workspace\demo
122
+ # type: code-dev # 代码开发工作区:统一 plan mode + 收尾汇总 diff 卡片;缺省 generic
92
123
  defaults:
93
124
  workspace: demo
94
125
  concurrency: 3 # 通道间并发上限(未单独配置的 app 沿用)
126
+ # permissions: # 工具白名单(整块可选,字段独立回退内置默认;改后重启生效)
127
+ # allow_tools: # 免确认直通工具;配置即整体替换内置默认
128
+ # # 内置默认:Read/Glob/Grep/LS/TodoRead/TodoWrite/WebFetch/WebSearch/Bash
129
+ # dangerous_commands: # Bash 危险命令正则,命中弹确认卡(内置默认覆盖 rm -rf/sudo/git push --force/
130
+ # - 'rm\s+-rf' # git reset --hard/mkfs/dd if=/chmod 777/管道执行远程脚本/shutdown 等)
95
131
  # transcripts: # 对话落盘清理策略;缺省 = 永久保留
96
132
  # retention_days: 90
97
133
  ```
98
134
 
99
- ### 多机器人隔离语义(重要)
135
+ ### 开发场景工作流(`type: code-dev`)
136
+
137
+ 给代码开发类工作区设置 `type: code-dev` 后,每个任务自动走「先计划、后执行」:
138
+
139
+ 1. **计划审批**:任务以 plan mode 启动(期间只允许读操作),Claude 查阅代码后提交计划 → 飞书收到计划卡片:
140
+ - **✅ 批准执行**:SDK 自动切回可编辑模式,按计划开工(后续每次写文件仍会弹带红绿 diff 的确认卡)
141
+ - **📝 按意见修改**:在卡片输入框填修改意见后点击,Claude 修订计划重新提交(同一会话内循环,直到批准或放弃)
142
+ - **❌ 放弃计划**:任务终止;10 分钟无操作自动放弃
143
+ 2. **收尾汇总 diff**:任务完成后不再把改动文件逐个上传,而是发**汇总 diff 卡片**(标题含文件数与 +X/-Y 行统计,正文红绿着色,超长自动拆多张)。改动以 `git diff HEAD` + untracked 新文件为准,因此 **code-dev 工作区需要是 git 仓库**(非 git 仓库自动回退为旧的文件上传行为,并提示 `git init`)
144
+
145
+ **读操作免确认**:读工具与 Bash 默认直通(`ls`/`cat`/`grep` 不再弹卡),命中 `dangerous_commands` 黑名单(`rm -rf`、`sudo`、`git push --force` 等)仍弹确认卡;「本次会话不再询问」的记忆同样绕不过黑名单。想放行其它工具(如 `Edit`)往 `permissions.allow_tools` 追加即可——注意配置即**整体替换**内置默认,需把内置读工具一并写上。
146
+
147
+ > plan 卡片与 permissions 配置的改动需重启 bridge 进程生效(`workspaces[].type` 改动亦然)。
148
+
149
+ ### 配置继承(本机 ~/.claude 一处配置,全机器人共享)
150
+
151
+ 所有机器人共享本机 `~/.claude`,以下内容自动继承、无须在 config.yaml 重复配置:
152
+
153
+ | 继承项 | 来源 | 说明 |
154
+ |---|---|---|
155
+ | 模型设置 | `~/.claude/settings.json` 的 `model` 与 `env` | 含 `ANTHROPIC_*`、第三方端点等全部环境变量 |
156
+ | 登录态 | `~/.claude/.credentials.json` / settings.json 认证声明 | 本机 `claude login` 一次即可 |
157
+ | user 级 MCP | `~/.claude.json` 的 `mcpServers` | 与本机 CLI 用同一批 MCP 服务 |
158
+ | skills | `~/.claude/skills/` | 可直接在飞书发 `/技能名` 触发(透传) |
159
+ | 插件 | `~/.claude/plugins/` 中已启用的 marketplace 插件 | 按 `installed_plugins.json` + `enabledPlugins` 自动加载 |
160
+ | 会话记录 | `~/.claude/projects/` | 飞书跑过的会话,本机 `claude --resume` 也能接着看 |
161
+
162
+ **插件自动发现**:随本机 CLI 的 `/plugin install` / `/plugin uninstall` 自动跟随(按文件 mtime 失效缓存);`apps[].plugins` 显式配置用于开发期直指源码目录,与自动发现同名时显式优先。
163
+
164
+ **多机器人隔离语义**:
100
165
 
101
166
  - **会话池**:每个机器人一份 `sessions.<app_id>.json`,历史会话绝不共享,`/resume` 只见自己的
102
- - **Claude Code 实例**:每个机器人一个独立的 `claude/<app_id>/` 数据目录(会话存储、用户设置、插件、登录态各自一套);也可用 `claude_config_dir` 显式指定
103
- - **模型凭证**:`env` 可按机器人覆盖 `ANTHROPIC_BASE_URL` / `ANTHROPIC_API_KEY` / `ANTHROPIC_MODEL` 等(如对话机器人用高端模型、素材收集用便宜端点)
167
+ - **人格**:`append_system_prompt` 按机器人定制(如对话助手 / 素材收集各一套)
104
168
  - **并发**:按机器人独立限额(缺省沿用全局 `concurrency`);同时与多个机器人对话互不排队
105
- - **升级兼容**:旧版 `feishu:` 单应用配置无需改动即可启动(自动归一化,旧会话原样可 `/resume`);首次 `lcb app add` 会把旧配置原地转为 `apps:` 格式,**转换后新增的机器人请追加在列表后面**(旧数据归属第一个应用)
169
+ - **升级兼容**:旧版 `feishu:` 单应用配置无需改动即可启动(自动归一化);首次 `lcb app add` 会把旧配置原地转为 `apps:` 格式,**转换后新增的机器人请追加在列表后面**(旧数据归属第一个应用)
170
+ - ⚠️ **0.4 起废弃 `claude_config_dir`**:所有机器人统一用 `~/.claude(共享配置)`,机器人间仅会话池隔离。旧版独立目录 `~/.lark-claudecode-bridge/claude/<app_id>/` 中的历史会话不再可 `/resume`(启动时会提示目录位置,确认无用后可手动删除)
171
+
172
+ ### 快捷操作:飞书机器人菜单
173
+
174
+ 把常用技能做成聊天输入框上方的按钮(点击即发对应斜杠命令):
175
+
176
+ 1. https://open.feishu.cn → 你的应用 → **应用功能 → 机器人 → 机器人菜单**
177
+ 2. 添加菜单项,如:菜单名 **「内容生成」**、动作类型选 **「发送消息」**、消息内容填 `/content-producer:content-producer`
178
+ 3. 发布新版本后,聊天窗口输入框上方即出现该按钮——点击 = 以你的身份发出该命令,经斜杠透传触发 content-producer 插件
179
+
180
+ > 菜单命令的格式:`/<插件名>:<技能名>`(插件技能)或 `/<技能名>`(user skill)。可用命令清单发 `/skills` 查看。
106
181
 
107
182
  ### 对话落盘
108
183
 
@@ -168,6 +243,9 @@ WantedBy=default.target
168
243
  4. **多机器人同群的 @ 识别**:依赖每个机器人各自的 open_id 精确匹配;若某机器人的 open_id 拉取失败,多应用部署下该机器人的**群聊消息会被丢弃**(宁丢不猜,防止同群消息触发两个机器人重复执行)——私聊不受影响。
169
244
  5. **旧数据迁移归属**:升级多应用后,旧 `sessions.json` 归属 `apps` 列表的第一个应用;新增机器人请追加在列表末尾,否则历史会话会挂错机器人。
170
245
  6. **飞书 SDK 对非法 app_id 静默失败**:`ws.start()` 对形状不合法的 app_id 只打日志不报错,启动后请确认每条「✅ <应用名> 长连接已启动」状态行都出现了。
246
+ 7. **共享 ~/.claude 的副作用**:本机 user 级 hooks 也会在机器人任务里执行(含阻断型 PostToolUse hook);`apps[].env` 的同名键会被 `~/.claude/settings.json` 的 `env` 覆盖(优先级:CLI flags(/model)> settings.json env > apps[].env > 进程环境)。插件加载失败 SDK 会静默跳过,实际加载情况以 `/plugins` 清单为准。
247
+ 8. **plan 卡片的「按意见修改」依赖飞书卡片输入框回传**:修改意见经卡片 input 组件随按钮回调传回;若个别客户端版本不回传输入值,点「按意见修改」会提示先填写意见——此时可改用「放弃计划」后在会话里直接发修改要求重新起任务。
248
+ 9. **code-dev 工作区的收尾 diff 基于 git**:`type: code-dev` 的工作区需要是 git 仓库(含未提交改动即可,无需 commit);非 git 仓库自动回退为旧的整文件上传行为。untracked 新文件按全新增 diff 展示(目录级 untracked 与超过 20 个的 untracked 文件不展开)。
171
249
 
172
250
  ## 开发
173
251
 
@@ -1,5 +1,9 @@
1
- # 多机器人:apps 数组,每个应用一条独立长连接 + 独立会话池 + 独立 Claude Code 实例。
1
+ # 多机器人:apps 数组,每个应用一条独立长连接 + 独立会话池;机器人间仅会话隔离。
2
+ # 所有机器人共用本机 ~/.claude:模型设置(settings.json)、登录态、user 级 MCP、skills、
3
+ # 已启用的 marketplace 插件全部自动继承,无须在此重复配置认证/模型。
2
4
  # 升级提示:旧版单应用 feishu: 格式仍可直接使用(启动时自动归一化,首次 lcb app add 时原地转格式)。
5
+ # 快捷操作:在飞书开放平台后台「应用功能 → 机器人 → 机器人菜单」配置菜单项
6
+ # (如「内容生成」→ 发送消息 /content-producer:content-producer),点击即触发对应技能/插件。
3
7
  apps:
4
8
  - name: 主力助手 # 显示名(日志前缀 / /status / lcb app list),缺省取 app_id
5
9
  app_id: cli_xxxx # 飞书开放平台 → 凭证与基础信息
@@ -7,36 +11,57 @@ apps:
7
11
  # domain: lark # 国际版 Lark 才需要
8
12
  # default_workspace: demo # 该机器人的默认工作区(须在 workspaces 列表内),缺省用全局 defaults.workspace
9
13
  # concurrency: 2 # 该机器人的并发上限(1-100),缺省用全局 concurrency
10
- # claude_config_dir: 'C:\Users\you\.claude' # Claude Code 数据目录(会话存储/设置/插件)
11
- # 缺省为 ~/.lark-claudecode-bridge/claude/<app_id>/——每个机器人一套;
12
- # feishu 格式迁移的应用自动沿用系统默认 ~/.claude(保存量会话)
13
- # append_system_prompt: '你是我的素材收集助手' # 可选人格补充(直通 Claude Code)
14
- # env: # per-app 环境变量:不同机器人可用不同模型凭证
15
- # ANTHROPIC_BASE_URL: https://your-endpoint/
16
- # ANTHROPIC_MODEL: glm-4.6
14
+ # append_system_prompt: '你是我的素材收集助手' # 可选人格补充(多机器人差异化定位的主要手段)
15
+ # env: # per-app 环境变量(注意:~/.claude/settings.json 的 env 优先级更高,
16
+ # 此处适合放 settings.json 里没有的键)
17
+ # SOME_PLUGIN_KEY: xxx
17
18
  # triggers: # 触发词映射:命中即把消息改写为 rewrite 再入队(按序首个命中生效)。
18
- # # SDK 单次会话不展开斜杠命令,飞书里触发技能必须经此改写;
19
- # # match / 开头 = 首 token 精确匹配(/produce 命中、/produced 不命中),
20
- # # 否则 = 整条消息包含该关键词即命中;{text}=原文全文,{args}=去掉首 token 的剩余参数。
21
- # # /stop /new /help 等本地命令永远优先,不会被劫持。改动写盘后下一条消息即热生效。
19
+ # # 通常无须配置:未命中触发词的 /xxx 消息会原文透传给 Claude Code
20
+ # 自动展开斜杠命令(可触发 skills / 插件命令,如 /superpowers:brainstorming);
21
+ # 仅在需要改写参数/附加指令时才配触发词。
22
+ # match / 开头 = 首 token 精确匹配(/produce 命中、/produced 不命中),
23
+ # 否则 = 整条消息包含该关键词即命中;{text}=原文全文,{args}=去掉首 token 的剩余参数。
24
+ # /stop /new /help 等本地命令永远优先,不会被劫持。改动写盘后下一条消息即热生效。
22
25
  # - match: /produce
23
26
  # rewrite: '调用 content-producer 插件的主技能(skills/content-producer/SKILL.md)执行内容生产流程,严格遵循其编排。任务参数:{args}'
24
27
  # - match: 写文章
25
28
  # rewrite: '调用 content-producer 插件的主技能(skills/content-producer/SKILL.md)执行内容生产流程,严格遵循其编排。任务描述:{text}'
26
- # plugins: # 显式加载的本地插件(path 指含 .claude-plugin/plugin.json 的目录)。
27
- # # 新机器人的 claude_config_dir 独立于 ~/.claude,已安装插件对其不可见——
28
- # # 直指源码目录改 SKILL.md 即生效,无需重装;插件的 MCP/hooks 随之加载,
29
- # # MCP 凭证(IMAGE_GEN_API_KEY 等)经上方 env 传入。
29
+ # plugins: # 通常无须配置:~/.claude 已启用的插件自动加载(随 CLI 的 /plugin install 变化)。
30
+ # 显式配置用于开发期直指源码目录(改 SKILL.md 即生效,无需重装);
31
+ # 与自动发现同名时显式优先。插件的 MCP/hooks 随之加载。
30
32
  # - name: content-producer
31
33
  # path: F:/workspace/plugins/content-producer/plugin
32
- # - name: 素材收集 # 再添一个机器人:复制上面的结构即可
34
+ # - name: 素材收集 # 再添一个机器人:复制上面的结构即可(会话池独立,配置共享 ~/.claude)
33
35
  # app_id: cli_yyyy
34
36
  # app_secret: yyyy
35
37
  workspaces: # 工作区白名单:名字 + 路径(所有机器人共享列表,当前使用哪个 per-app 隔离)
36
38
  - name: demo
37
39
  path: F:\workspace\demo
40
+ # type: code-dev # 工作区类型:code-dev = 代码开发(每个任务先出计划 → 飞书卡片批准后自动执行;
41
+ # 收尾发汇总 diff 卡片,不再整文件上传,git 仓库专属);缺省 generic = 通用
42
+ # - name: my-project
43
+ # path: F:\workspace\my-project
44
+ # type: code-dev
38
45
  defaults:
39
46
  workspace: demo
40
47
  concurrency: 3 # 全局并发上限(未单独配置的 app 沿用此值)
48
+ # permissions: # 工具白名单(整块可选;未配置的字段用内置默认)。改后重启 bridge 生效
49
+ # allow_tools: # 免确认直通工具名。配置即整体替换内置默认(不与默认合并)!
50
+ # # 内置默认 = Read/Glob/Grep/LS/TodoRead/TodoWrite/WebFetch/WebSearch/Bash
51
+ # # (Bash 默认放行读命令;安全性由 dangerous_commands 黑名单兜底)
52
+ # - Read
53
+ # - Glob
54
+ # - Grep
55
+ # - LS
56
+ # - TodoRead
57
+ # - TodoWrite
58
+ # - WebFetch
59
+ # - WebSearch
60
+ # - Bash
61
+ # dangerous_commands: # Bash 危险命令正则(对命令全文匹配,命中弹确认卡);缺省内置
62
+ # # rm -rf / sudo / git push --force / git reset --hard / mkfs /
63
+ # # dd if= / chmod 777 / curl|wget 管道执行脚本 / shutdown|reboot
64
+ # - 'rm\s+-rf'
65
+ # - 'sudo\s'
41
66
  # transcripts: # 对话落盘清理策略;缺省 = 永久保留
42
67
  # retention_days: 90
@@ -1,7 +1,7 @@
1
1
  /**
2
- * 检查单个 app 的 Claude Code 认证来源(与 CLI 侧判定顺序一致):
3
- * 环境变量(进程透传或 apps[].env)→ 配置目录 OAuth 凭证 → 配置目录 settings.json 认证声明。
2
+ * 检查认证来源(与 CLI 侧判定顺序一致):
3
+ * 环境变量(进程透传或 apps[].env)→ ~/.claude OAuth 凭证 → ~/.claude settings.json 认证声明。
4
4
  */
5
5
  export declare function hasClaudeAuth(appEnv: Record<string, string | undefined>, claudeConfigDir: string): boolean;
6
- /** 启动预检:无任何认证来源时 warn 三条出路;返回是否存在认证(测试断言用) */
6
+ /** 启动预检:无任何认证来源时 warn 修复出路;返回是否存在认证(测试断言用) */
7
7
  export declare function warnIfNoClaudeAuth(appName: string, appEnv: Record<string, string | undefined>, claudeConfigDir: string): boolean;
@@ -23,24 +23,23 @@ function hasSettingsAuth(claudeConfigDir) {
23
23
  }
24
24
  }
25
25
  /**
26
- * 检查单个 app 的 Claude Code 认证来源(与 CLI 侧判定顺序一致):
27
- * 环境变量(进程透传或 apps[].env)→ 配置目录 OAuth 凭证 → 配置目录 settings.json 认证声明。
26
+ * 检查认证来源(与 CLI 侧判定顺序一致):
27
+ * 环境变量(进程透传或 apps[].env)→ ~/.claude OAuth 凭证 → ~/.claude settings.json 认证声明。
28
28
  */
29
29
  export function hasClaudeAuth(appEnv, claudeConfigDir) {
30
30
  return hasEnvAuth(appEnv)
31
31
  || existsSync(join(claudeConfigDir, '.credentials.json'))
32
32
  || hasSettingsAuth(claudeConfigDir);
33
33
  }
34
- /** 启动预检:无任何认证来源时 warn 三条出路;返回是否存在认证(测试断言用) */
34
+ /** 启动预检:无任何认证来源时 warn 修复出路;返回是否存在认证(测试断言用) */
35
35
  export function warnIfNoClaudeAuth(appName, appEnv, claudeConfigDir) {
36
36
  if (hasClaudeAuth(appEnv, claudeConfigDir))
37
37
  return true;
38
38
  console.warn(`[app:${appName}] [配置] 未检测到 Claude Code 认证来源:环境变量无 ANTHROPIC_AUTH_TOKEN/ANTHROPIC_API_KEY,`
39
39
  + `且 ${claudeConfigDir} 下无 .credentials.json,settings.json 也未声明认证。`
40
- + `发消息将报「Not logged in · Please run /login」。三选一修复:`
41
- + `① config.yaml app 的 env 配置 ANTHROPIC_AUTH_TOKEN(第三方端点另配 ANTHROPIC_BASE_URL);`
42
- + `② appclaude_config_dir 指向已登录的目录(如 ~/.claude);`
43
- + `③ 在该目录登录一次:CLAUDE_CONFIG_DIR=${claudeConfigDir} claude login`);
40
+ + `发消息将报「Not logged in · Please run /login」。二选一修复:`
41
+ + `① 在本机终端登录一次 claude login(登录态存于 ~/.claude,所有机器人共享);`
42
+ + `② ~/.claude/settings.jsonenv ANTHROPIC_AUTH_TOKEN(第三方端点另配 ANTHROPIC_BASE_URL)`);
44
43
  return false;
45
44
  }
46
45
  //# sourceMappingURL=auth-precheck.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth-precheck.js","sourceRoot":"","sources":["../src/auth-precheck.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,mDAAmD;AACnD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,sEAAsE;AACtE,SAAS,UAAU,CAAC,MAA0C;IAC5D,OAAO,OAAO,CAAC,MAAM,CAAC,oBAAoB,EAAE,IAAI,EAAE,IAAI,MAAM,CAAC,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC;AAC1F,CAAC;AAED,6EAA6E;AAC7E,SAAS,eAAe,CAAC,eAAuB;IAC9C,MAAM,CAAC,GAAG,IAAI,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC;IACjD,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACjC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAG7C,CAAC;QACF,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC;QAC1B,OAAO,OAAO,CACZ,CAAC,OAAO,GAAG,CAAC,oBAAoB,KAAK,QAAQ,IAAI,GAAG,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC;eAC9E,CAAC,OAAO,GAAG,CAAC,iBAAiB,KAAK,QAAQ,IAAI,GAAG,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;eAC3E,CAAC,OAAO,GAAG,CAAC,YAAY,KAAK,QAAQ,IAAI,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CACrE,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,MAA0C,EAAE,eAAuB;IAC/F,OAAO,UAAU,CAAC,MAAM,CAAC;WACpB,UAAU,CAAC,IAAI,CAAC,eAAe,EAAE,mBAAmB,CAAC,CAAC;WACtD,eAAe,CAAC,eAAe,CAAC,CAAC;AACxC,CAAC;AAED,8CAA8C;AAC9C,MAAM,UAAU,kBAAkB,CAChC,OAAe,EACf,MAA0C,EAC1C,eAAuB;IAEvB,IAAI,aAAa,CAAC,MAAM,EAAE,eAAe,CAAC;QAAE,OAAO,IAAI,CAAC;IACxD,OAAO,CAAC,IAAI,CACV,QAAQ,OAAO,4EAA4E;UACzF,KAAK,eAAe,6CAA6C;UACjE,iDAAiD;UACjD,gFAAgF;UAChF,oDAAoD;UACpD,gCAAgC,eAAe,eAAe,CACjE,CAAC;IACF,OAAO,KAAK,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"auth-precheck.js","sourceRoot":"","sources":["../src/auth-precheck.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,mDAAmD;AACnD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,sEAAsE;AACtE,SAAS,UAAU,CAAC,MAA0C;IAC5D,OAAO,OAAO,CAAC,MAAM,CAAC,oBAAoB,EAAE,IAAI,EAAE,IAAI,MAAM,CAAC,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC;AAC1F,CAAC;AAED,6EAA6E;AAC7E,SAAS,eAAe,CAAC,eAAuB;IAC9C,MAAM,CAAC,GAAG,IAAI,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC;IACjD,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACjC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAG7C,CAAC;QACF,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC;QAC1B,OAAO,OAAO,CACZ,CAAC,OAAO,GAAG,CAAC,oBAAoB,KAAK,QAAQ,IAAI,GAAG,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC;eAC9E,CAAC,OAAO,GAAG,CAAC,iBAAiB,KAAK,QAAQ,IAAI,GAAG,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;eAC3E,CAAC,OAAO,GAAG,CAAC,YAAY,KAAK,QAAQ,IAAI,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CACrE,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,MAA0C,EAAE,eAAuB;IAC/F,OAAO,UAAU,CAAC,MAAM,CAAC;WACpB,UAAU,CAAC,IAAI,CAAC,eAAe,EAAE,mBAAmB,CAAC,CAAC;WACtD,eAAe,CAAC,eAAe,CAAC,CAAC;AACxC,CAAC;AAED,8CAA8C;AAC9C,MAAM,UAAU,kBAAkB,CAChC,OAAe,EACf,MAA0C,EAC1C,eAAuB;IAEvB,IAAI,aAAa,CAAC,MAAM,EAAE,eAAe,CAAC;QAAE,OAAO,IAAI,CAAC;IACxD,OAAO,CAAC,IAAI,CACV,QAAQ,OAAO,4EAA4E;UACzF,KAAK,eAAe,6CAA6C;UACjE,iDAAiD;UACjD,oDAAoD;UACpD,sFAAsF,CACzF,CAAC;IACF,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -12,9 +12,8 @@ export interface AppInput {
12
12
  domain?: 'feishu' | 'lark';
13
13
  }
14
14
  /**
15
- * 添加应用。配置为旧 feishu 单应用格式时先原地转 apps 数组(首次 app 操作即完成格式升级):
16
- * app 显式写 claude_config_dir=~/.claude——物理转成 apps 格式后 loadConfig 会按新规则
17
- * 推导独立目录,不显式钉住系统默认目录会丢存量会话的 resume 链。
15
+ * 添加应用。配置为旧 feishu 单应用格式时先原地转 apps 数组(首次 app 操作即完成格式升级)。
16
+ * Claude Code 数据目录一律为 ~/.claude(全机器人共享,无 per-app 配置项)。
18
17
  */
19
18
  export declare function addApp(raw: string, input: AppInput): AppResult;
20
19
  /** 删除应用(按 name 或 app_id 匹配);最后一个不可删;遗留的会话分片与落盘目录不动(人工清理) */
@@ -1,16 +1,13 @@
1
1
  // lcb app add/remove/list 的核心逻辑:对已有 config.yaml 做增量改写(保注释),模式复刻 ws-manager。
2
2
  // 纯逻辑,写盘由调用方(bin)负责,tests/app-manager.test.ts 直接单测。
3
- import { homedir } from 'node:os';
4
- import { join } from 'node:path';
5
3
  import { parseDocument } from 'yaml';
6
4
  function appsSeq(raw) {
7
5
  const doc = parseDocument(raw);
8
6
  return doc.get('apps');
9
7
  }
10
8
  /**
11
- * 添加应用。配置为旧 feishu 单应用格式时先原地转 apps 数组(首次 app 操作即完成格式升级):
12
- * app 显式写 claude_config_dir=~/.claude——物理转成 apps 格式后 loadConfig 会按新规则
13
- * 推导独立目录,不显式钉住系统默认目录会丢存量会话的 resume 链。
9
+ * 添加应用。配置为旧 feishu 单应用格式时先原地转 apps 数组(首次 app 操作即完成格式升级)。
10
+ * Claude Code 数据目录一律为 ~/.claude(全机器人共享,无 per-app 配置项)。
14
11
  */
15
12
  export function addApp(raw, input) {
16
13
  const appId = input.appId.trim();
@@ -33,8 +30,6 @@ export function addApp(raw, input) {
33
30
  app_id: oldAppId,
34
31
  app_secret: oldSecret,
35
32
  ...(oldDomain ? { domain: String(oldDomain) } : {}),
36
- // 存量会话在系统默认目录,显式钉住防止归一化按新 app 规则推导独立目录
37
- claude_config_dir: join(homedir(), '.claude'),
38
33
  }]));
39
34
  doc.delete('feishu');
40
35
  }
@@ -1 +1 @@
1
- {"version":3,"file":"app-manager.js","sourceRoot":"","sources":["../../src/cli/app-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"app-manager.js","sourceRoot":"","sources":["../../src/cli/app-manager.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,7 @@ export interface SetupAnswers {
9
9
  workspaces: Array<{
10
10
  name: string;
11
11
  path: string;
12
+ type?: 'code-dev' | 'generic';
12
13
  }>;
13
14
  defaultWorkspace: string;
14
15
  }
@@ -2,9 +2,8 @@
2
2
  // 交互层(readline 问答)与序列化层(answersToConfig / toYamlDocument)分离:
3
3
  // 序列化层是纯函数,tests/cli.test.ts 直接单测;交互层留给手动冒烟
4
4
  import { mkdirSync, writeFileSync, existsSync, readFileSync } from 'node:fs';
5
- import { dirname, join } from 'node:path';
5
+ import { dirname } from 'node:path';
6
6
  import { stringify } from 'yaml';
7
- import { CONFIG_DIR } from '../config.js';
8
7
  import { asker } from './asker.js';
9
8
  /** App ID 形状(Task 6 遗留建议:不符仅警告,不阻止) */
10
9
  export const APP_ID_RE = /^cli_[0-9a-fA-F]{16}$/;
@@ -20,9 +19,6 @@ export function answersToConfig(a) {
20
19
  name: app.name?.trim() || app.appId,
21
20
  appId: app.appId,
22
21
  appSecret: app.appSecret,
23
- // 新配置 app 的缺省数据目录(与 loadConfig/normalizeApps 推导一致;
24
- // toYamlDocument 不写此键,落盘后仍由 loadConfig 重新推导)
25
- claudeConfigDir: join(CONFIG_DIR, 'claude', app.appId),
26
22
  })),
27
23
  workspaces: a.workspaces,
28
24
  defaults: { workspace: a.workspaces.some((w) => w.name === ws) ? ws : first },
@@ -98,7 +94,10 @@ export async function runSetup(configPath) {
98
94
  if (!name)
99
95
  break;
100
96
  const path = await ask(`工作区 ${name} 的本机路径`);
101
- workspaces.push({ name, path });
97
+ // 类型决定开发工作流:code-dev = 统一 plan mode(先出计划→飞书批准)+ 收尾汇总 diff 卡片
98
+ const type = await ask(`工作区 ${name} 类型(code-dev=代码开发 / generic=通用,回车默认 generic)`, 'generic');
99
+ const normalized = type.trim() === 'code-dev' ? 'code-dev' : 'generic';
100
+ workspaces.push({ name, path, ...(normalized === 'code-dev' ? { type: normalized } : {}) });
102
101
  if (!defaultWorkspace)
103
102
  defaultWorkspace = name;
104
103
  }
@@ -1 +1 @@
1
- {"version":3,"file":"setup-wizard.js","sourceRoot":"","sources":["../../src/cli/setup-wizard.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB,6DAA6D;AAC7D,4CAA4C;AAC5C,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAEjC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AASnC,uCAAuC;AACvC,MAAM,CAAC,MAAM,SAAS,GAAG,uBAAuB,CAAC;AAEjD;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,CAAe;IAC7C,MAAM,KAAK,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC;IAC1C,MAAM,EAAE,GAAG,CAAC,CAAC,gBAAgB,IAAI,KAAK,CAAC;IACvC,OAAO;QACL,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YACzB,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,GAAG,CAAC,KAAK;YACnC,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,mDAAmD;YACnD,6CAA6C;YAC7C,eAAe,EAAE,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,GAAG,CAAC,KAAK,CAAC;SACvD,CAAC,CAAC;QACH,UAAU,EAAE,CAAC,CAAC,UAAU;QACxB,QAAQ,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE;QAC7E,WAAW,EAAE,CAAC;KACf,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,GAAiB;IAC9C,OAAO;QACL,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAC3B,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACrD,MAAM,EAAE,GAAG,CAAC,KAAK;YACjB,UAAU,EAAE,GAAG,CAAC,SAAS;YACzB,GAAG,CAAC,GAAG,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACrD,CAAC,CAAC;QACH,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,QAAQ,EAAE,EAAE,SAAS,EAAE,GAAG,CAAC,QAAQ,CAAC,SAAS,EAAE;QAC/C,WAAW,EAAE,GAAG,CAAC,WAAW;KAC7B,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,UAAkB;IAC/C,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5D,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IACtC,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,SAAS,UAAU,WAAW,EAAE,GAAG,CAAC,CAAC;QACjE,IAAI,SAAS,CAAC,WAAW,EAAE,KAAK,GAAG,EAAE,CAAC;YACpC,KAAK,EAAE,CAAC;YACR,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACnB,OAAO;QACT,CAAC;QACD,wCAAwC;QACxC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YAC7C,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,4BAA4B,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACzG,IAAI,KAAK,GAAG,CAAC;gBAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,KAAK,6BAA6B,CAAC,CAAC;QACjF,CAAC;QAAC,MAAM,CAAC,CAAC,yBAAyB,CAAC,CAAC;IACvC,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,6BAA6B;UACrC,yBAAyB;UACzB,4FAA4F;UAC5F,4CAA4C;UAC5C,qBAAqB,CAAC,CAAC;IAC3B,MAAM,IAAI,GAAyB,EAAE,CAAC;IACtC,KAAK,IAAI,CAAC,GAAG,CAAC,GAAI,CAAC,EAAE,EAAE,CAAC;QACtB,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC;YAC7B,CAAC,CAAC,iDAAiD;YACnD,CAAC,CAAC,0BAA0B,CAAC,CAAC;QAChC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBACZ,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;gBAC5B,KAAK,EAAE,CAAC;gBACR,OAAO;YACT,CAAC;YACD,MAAM;QACR,CAAC;QACD,0CAA0C;QAC1C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,aAAa,KAAK,qCAAqC,CAAC,CAAC;QAClG,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,gCAAgC,CAAC,CAAC;QACzD,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,YAAY,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IACtE,CAAC;IACD,MAAM,UAAU,GAA0C,EAAE,CAAC;IAC7D,IAAI,gBAAgB,GAAG,EAAE,CAAC;IAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,GAAI,CAAC,EAAE,EAAE,CAAC;QACtB,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC;QAC3E,IAAI,CAAC,IAAI;YAAE,MAAM;QACjB,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,OAAO,IAAI,QAAQ,CAAC,CAAC;QAC5C,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAChC,IAAI,CAAC,gBAAgB;YAAE,gBAAgB,GAAG,IAAI,CAAC;IACjD,CAAC;IACD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QAC7B,KAAK,EAAE,CAAC;QACR,OAAO;IACT,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;IAClD,gBAAgB,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC;IACrF,MAAM,GAAG,GAAG,eAAe,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,gBAAgB,EAAE,CAAC,CAAC;IACpE,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACpD,aAAa,CAAC,UAAU,EAAE,SAAS,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAClE,KAAK,EAAE,CAAC;IACR,OAAO,CAAC,GAAG,CAAC,aAAa,UAAU,IAAI,IAAI,CAAC,MAAM,8CAA8C,CAAC,CAAC;AACpG,CAAC"}
1
+ {"version":3,"file":"setup-wizard.js","sourceRoot":"","sources":["../../src/cli/setup-wizard.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB,6DAA6D;AAC7D,4CAA4C;AAC5C,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAEjC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AASnC,uCAAuC;AACvC,MAAM,CAAC,MAAM,SAAS,GAAG,uBAAuB,CAAC;AAEjD;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,CAAe;IAC7C,MAAM,KAAK,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC;IAC1C,MAAM,EAAE,GAAG,CAAC,CAAC,gBAAgB,IAAI,KAAK,CAAC;IACvC,OAAO;QACL,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YACzB,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,GAAG,CAAC,KAAK;YACnC,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,SAAS,EAAE,GAAG,CAAC,SAAS;SACzB,CAAC,CAAC;QACH,UAAU,EAAE,CAAC,CAAC,UAAU;QACxB,QAAQ,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE;QAC7E,WAAW,EAAE,CAAC;KACf,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,GAAiB;IAC9C,OAAO;QACL,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAC3B,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACrD,MAAM,EAAE,GAAG,CAAC,KAAK;YACjB,UAAU,EAAE,GAAG,CAAC,SAAS;YACzB,GAAG,CAAC,GAAG,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACrD,CAAC,CAAC;QACH,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,QAAQ,EAAE,EAAE,SAAS,EAAE,GAAG,CAAC,QAAQ,CAAC,SAAS,EAAE;QAC/C,WAAW,EAAE,GAAG,CAAC,WAAW;KAC7B,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,UAAkB;IAC/C,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5D,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IACtC,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,SAAS,UAAU,WAAW,EAAE,GAAG,CAAC,CAAC;QACjE,IAAI,SAAS,CAAC,WAAW,EAAE,KAAK,GAAG,EAAE,CAAC;YACpC,KAAK,EAAE,CAAC;YACR,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACnB,OAAO;QACT,CAAC;QACD,wCAAwC;QACxC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YAC7C,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,4BAA4B,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACzG,IAAI,KAAK,GAAG,CAAC;gBAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,KAAK,6BAA6B,CAAC,CAAC;QACjF,CAAC;QAAC,MAAM,CAAC,CAAC,yBAAyB,CAAC,CAAC;IACvC,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,6BAA6B;UACrC,yBAAyB;UACzB,4FAA4F;UAC5F,4CAA4C;UAC5C,qBAAqB,CAAC,CAAC;IAC3B,MAAM,IAAI,GAAyB,EAAE,CAAC;IACtC,KAAK,IAAI,CAAC,GAAG,CAAC,GAAI,CAAC,EAAE,EAAE,CAAC;QACtB,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC;YAC7B,CAAC,CAAC,iDAAiD;YACnD,CAAC,CAAC,0BAA0B,CAAC,CAAC;QAChC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBACZ,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;gBAC5B,KAAK,EAAE,CAAC;gBACR,OAAO;YACT,CAAC;YACD,MAAM;QACR,CAAC;QACD,0CAA0C;QAC1C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,aAAa,KAAK,qCAAqC,CAAC,CAAC;QAClG,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,gCAAgC,CAAC,CAAC;QACzD,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,YAAY,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IACtE,CAAC;IACD,MAAM,UAAU,GAA+B,EAAE,CAAC;IAClD,IAAI,gBAAgB,GAAG,EAAE,CAAC;IAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,GAAI,CAAC,EAAE,EAAE,CAAC;QACtB,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC;QAC3E,IAAI,CAAC,IAAI;YAAE,MAAM;QACjB,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,OAAO,IAAI,QAAQ,CAAC,CAAC;QAC5C,6DAA6D;QAC7D,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,OAAO,IAAI,8CAA8C,EAAE,SAAS,CAAC,CAAC;QAC7F,MAAM,UAAU,GAA2B,IAAI,CAAC,IAAI,EAAE,KAAK,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;QAC/F,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,UAAU,KAAK,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAC5F,IAAI,CAAC,gBAAgB;YAAE,gBAAgB,GAAG,IAAI,CAAC;IACjD,CAAC;IACD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QAC7B,KAAK,EAAE,CAAC;QACR,OAAO;IACT,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;IAClD,gBAAgB,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC;IACrF,MAAM,GAAG,GAAG,eAAe,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,gBAAgB,EAAE,CAAC,CAAC;IACpE,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACpD,aAAa,CAAC,UAAU,EAAE,SAAS,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAClE,KAAK,EAAE,CAAC;IACR,OAAO,CAAC,GAAG,CAAC,aAAa,UAAU,IAAI,IAAI,CAAC,MAAM,8CAA8C,CAAC,CAAC;AACpG,CAAC"}
package/dist/config.js CHANGED
@@ -44,6 +44,66 @@ function normalizePlugins(raw, where) {
44
44
  return { name, path };
45
45
  });
46
46
  }
47
+ const WORKSPACE_TYPES = new Set(['code-dev', 'generic']);
48
+ /** 归一化工作区列表:name/path 必须非空;type 严格枚举(code-dev = 统一 plan mode + diff 收尾,generic = 缺省) */
49
+ function normalizeWorkspaces(raw) {
50
+ const list = (Array.isArray(raw) ? raw : []);
51
+ if (list.length === 0)
52
+ throw new Error('配置至少需要一个 workspaces 条目');
53
+ return list.map((w, i) => {
54
+ const name = typeof w?.name === 'string' ? w.name.trim() : '';
55
+ const path = typeof w?.path === 'string' ? w.path.trim() : '';
56
+ if (!name)
57
+ throw new Error(`workspaces[${i}] 缺少 name,请检查 config.yaml`);
58
+ if (!path)
59
+ throw new Error(`workspaces[${i}](${name}) 缺少 path,请检查 config.yaml`);
60
+ if (w.type === undefined || w.type === null)
61
+ return { name, path };
62
+ if (typeof w.type !== 'string' || !WORKSPACE_TYPES.has(w.type)) {
63
+ throw new Error(`workspaces[${i}](${name}) 的 type 必须为 code-dev / generic(当前值:${String(w.type)}),请检查 config.yaml`);
64
+ }
65
+ return { name, path, type: w.type };
66
+ });
67
+ }
68
+ /**
69
+ * 归一化 permissions 白名单块(整体可选):allow_tools 为免确认直通工具名(配置即整体替换内置默认,
70
+ * 不与默认合并);dangerous_commands 为 Bash 危险命令正则源串(此处 new RegExp 预编译校验,
71
+ * 非法正则硬抛——带permissions[i]定位,运行期再抛会让所有 Bash 意外弹卡)。
72
+ */
73
+ function normalizePermissions(doc) {
74
+ const raw = doc.permissions;
75
+ if (raw === undefined || raw === null)
76
+ return undefined;
77
+ if (typeof raw !== 'object')
78
+ throw new Error('permissions 必须为对象(含 allow_tools / dangerous_commands),请检查 config.yaml');
79
+ const p = raw;
80
+ const allowTools = p.allow_tools;
81
+ if (allowTools !== undefined) {
82
+ if (!Array.isArray(allowTools) || allowTools.some((t) => typeof t !== 'string' || !t.trim())) {
83
+ throw new Error('permissions.allow_tools 必须为非空字符串数组,请检查 config.yaml');
84
+ }
85
+ }
86
+ const dangerous = p.dangerous_commands;
87
+ let dangerousCommands = [];
88
+ if (dangerous !== undefined) {
89
+ if (!Array.isArray(dangerous))
90
+ throw new Error('permissions.dangerous_commands 必须为正则字符串数组,请检查 config.yaml');
91
+ dangerousCommands = dangerous.map((s, i) => {
92
+ if (typeof s !== 'string' || !s.trim())
93
+ throw new Error(`permissions.dangerous_commands[${i}] 必须为非空正则字符串,请检查 config.yaml`);
94
+ try {
95
+ return new RegExp(s);
96
+ }
97
+ catch (e) {
98
+ throw new Error(`permissions.dangerous_commands[${i}] 不是合法正则("${s}"):${e.message}`);
99
+ }
100
+ });
101
+ }
102
+ return {
103
+ ...(allowTools !== undefined ? { allowTools: allowTools } : {}),
104
+ ...(dangerous !== undefined ? { dangerousCommands } : {}),
105
+ };
106
+ }
47
107
  /**
48
108
  * 归一化应用列表:doc.apps 数组优先(并存旧 feishu 时 warn 忽略);
49
109
  * 无 apps 有 feishu → 归一化为单元素数组(只在内存归一,不回写文件,保住用户手写注释)。
@@ -86,11 +146,12 @@ function normalizeApps(doc, workspaceNames) {
86
146
  throw new Error(`${where} 的 concurrency 必须为 1-100 的数字(当前值:${String(raw.concurrency)}),请检查 config.yaml`);
87
147
  }
88
148
  }
89
- // Claude Code 数据目录:显式配置优先;旧 feishu 迁移的 app 沿用系统默认 ~/.claude(保存量会话 resume);
90
- // apps 里新配置的 app 缺省独立目录——每个机器人一套会话存储/设置/插件,物理隔离互不共享
91
- const claudeConfigDir = typeof raw.claude_config_dir === 'string' && raw.claude_config_dir.trim()
92
- ? raw.claude_config_dir
93
- : isLegacy ? join(homedir(), '.claude') : join(CONFIG_DIR, 'claude', appId);
149
+ // claude_config_dir 已废弃:所有机器人一律共享本机 ~/.claude(模型设置/登录态/MCP/skills/插件),
150
+ // 机器人间仅靠 sessions.<appId>.json 做会话隔离。检测到旧键仅 warn 不报错,保证存量配置平滑升级
151
+ if (typeof raw.claude_config_dir === 'string' && raw.claude_config_dir.trim()) {
152
+ console.warn(`[配置] ${where} 的 claude_config_dir 已废弃:本版起所有机器人一律使用 ~/.claude`
153
+ + `(共享本机模型设置/登录态/MCP/skills/插件,仅会话池隔离),该配置项将被忽略`);
154
+ }
94
155
  return {
95
156
  name,
96
157
  appId,
@@ -99,7 +160,6 @@ function normalizeApps(doc, workspaceNames) {
99
160
  defaultWorkspace: raw.default_workspace,
100
161
  concurrency,
101
162
  appendSystemPrompt: raw.append_system_prompt,
102
- claudeConfigDir,
103
163
  env: raw.env && typeof raw.env === 'object' ? raw.env : undefined,
104
164
  triggers: normalizeTriggers(raw.triggers, where),
105
165
  plugins: normalizePlugins(raw.plugins, where),
@@ -129,9 +189,7 @@ export function loadConfig(path = CONFIG_PATH) {
129
189
  catch (e) {
130
190
  throw new Error(`配置文件 YAML 语法错误:${e.message}`);
131
191
  }
132
- const workspaces = (doc.workspaces ?? []);
133
- if (workspaces.length === 0)
134
- throw new Error('配置至少需要一个 workspaces 条目');
192
+ const workspaces = normalizeWorkspaces(doc.workspaces);
135
193
  const defaults = (doc.defaults ?? {});
136
194
  if (!workspaces.some((w) => w.name === defaults.workspace)) {
137
195
  throw new Error(`defaults.workspace "${defaults.workspace}" 不在 workspaces 列表中`);
@@ -151,6 +209,11 @@ export function loadConfig(path = CONFIG_PATH) {
151
209
  concurrency,
152
210
  // 缺省/0/非法 = 永久保留,不默认删用户数据
153
211
  transcripts: Number.isFinite(retentionDays) && retentionDays > 0 ? { retentionDays } : undefined,
212
+ // 权限白名单:未配置的字段由消费侧(permission-gate)回退内置默认
213
+ ...((() => {
214
+ const permissions = normalizePermissions(doc);
215
+ return permissions ? { permissions } : {};
216
+ })()),
154
217
  };
155
218
  }
156
219
  /** 热重载比较:任一 app 的凭证/名称/工作区/并发/配置目录/人格变化即视为需重启的变更(顺序敏感) */
@@ -161,7 +224,7 @@ export function sameApps(a, b) {
161
224
  const y = b[i];
162
225
  return x.appId === y.appId && x.appSecret === y.appSecret && x.name === y.name
163
226
  && x.domain === y.domain && x.defaultWorkspace === y.defaultWorkspace
164
- && x.concurrency === y.concurrency && x.claudeConfigDir === y.claudeConfigDir
227
+ && x.concurrency === y.concurrency
165
228
  && x.appendSystemPrompt === y.appendSystemPrompt
166
229
  && JSON.stringify(x.env ?? {}) === JSON.stringify(y.env ?? {});
167
230
  });
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}