@jesonliu/lark-claudecode-bridge 0.11.0 → 0.13.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 (63) hide show
  1. package/README.md +81 -46
  2. package/assets/web/index.html +1416 -0
  3. package/config.example.yaml +22 -2
  4. package/dist/auth-precheck.d.ts +5 -2
  5. package/dist/auth-precheck.js +8 -2
  6. package/dist/auth-precheck.js.map +1 -1
  7. package/dist/bin/lcb.js +32 -3
  8. package/dist/bin/lcb.js.map +1 -1
  9. package/dist/claude-config.d.ts +19 -0
  10. package/dist/claude-config.js +76 -0
  11. package/dist/claude-config.js.map +1 -0
  12. package/dist/cli/setup-wizard.d.ts +1 -0
  13. package/dist/cli/setup-wizard.js +4 -0
  14. package/dist/cli/setup-wizard.js.map +1 -1
  15. package/dist/config-defaults.d.ts +4 -0
  16. package/dist/config-defaults.js +15 -0
  17. package/dist/config-defaults.js.map +1 -0
  18. package/dist/config.d.ts +7 -0
  19. package/dist/config.js +190 -6
  20. package/dist/config.js.map +1 -1
  21. package/dist/executor/permission-gate.d.ts +8 -1
  22. package/dist/executor/permission-gate.js +21 -14
  23. package/dist/executor/permission-gate.js.map +1 -1
  24. package/dist/executor/plugin-discovery.d.ts +11 -0
  25. package/dist/executor/plugin-discovery.js +28 -0
  26. package/dist/executor/plugin-discovery.js.map +1 -1
  27. package/dist/executor/plugin-manager.d.ts +19 -0
  28. package/dist/executor/plugin-manager.js +84 -0
  29. package/dist/executor/plugin-manager.js.map +1 -0
  30. package/dist/feishu/slash-commands.d.ts +77 -0
  31. package/dist/feishu/slash-commands.js +188 -0
  32. package/dist/feishu/slash-commands.js.map +1 -0
  33. package/dist/index.js +80 -17
  34. package/dist/index.js.map +1 -1
  35. package/dist/session/commands.d.ts +16 -1
  36. package/dist/session/commands.js +33 -1
  37. package/dist/session/commands.js.map +1 -1
  38. package/dist/session/plugin-command.d.ts +14 -0
  39. package/dist/session/plugin-command.js +110 -0
  40. package/dist/session/plugin-command.js.map +1 -0
  41. package/dist/types.d.ts +58 -0
  42. package/dist/util/open-browser.d.ts +1 -0
  43. package/dist/util/open-browser.js +20 -0
  44. package/dist/util/open-browser.js.map +1 -0
  45. package/dist/util/server-url.d.ts +3 -0
  46. package/dist/util/server-url.js +10 -0
  47. package/dist/util/server-url.js.map +1 -0
  48. package/dist/web/config-api.d.ts +50 -0
  49. package/dist/web/config-api.js +184 -0
  50. package/dist/web/config-api.js.map +1 -0
  51. package/dist/web/lifecycle.d.ts +52 -0
  52. package/dist/web/lifecycle.js +167 -0
  53. package/dist/web/lifecycle.js.map +1 -0
  54. package/dist/web/model-list.d.ts +36 -0
  55. package/dist/web/model-list.js +101 -0
  56. package/dist/web/model-list.js.map +1 -0
  57. package/dist/web/server.d.ts +22 -0
  58. package/dist/web/server.js +543 -0
  59. package/dist/web/server.js.map +1 -0
  60. package/dist/web/update.d.ts +26 -0
  61. package/dist/web/update.js +64 -0
  62. package/dist/web/update.js.map +1 -0
  63. package/package.json +2 -1
package/README.md CHANGED
@@ -2,67 +2,63 @@
2
2
 
3
3
  飞书 ↔ Claude Code 桥接器:在飞书里遥控本机 Claude Code。
4
4
  写操作以卡片按钮确认(长连接回调),结果文本与产出文件回传飞书。
5
- **无需公网 IP、无需内网穿透;模型自由(订阅 / API Key / 第三方端点均可)。**
5
+ **无需公网 IP、无需内网穿透;无需预装 Claude Code CLI,一键安装 + 网页配置即可使用。**
6
6
 
7
7
  ## 特性
8
8
 
9
+ - **一键安装开箱即用**:`npm install -g` 后 `lcb start` 自动弹出网页配置页,飞书凭证 / Claude 认证(API Key / 中转站 Token)/ 模型 / 权限白名单全部在页面完成,不依赖本机 `claude login`(已登录的本机用户可继续共享 `~/.claude`,见「认证双模式」)
10
+ - **Web 配置页随桥接器常驻**(`http://127.0.0.1:17317`):应用 / 工作区 / 权限 / 触发词 / 插件随时可改,密钥脱敏回显;改动自动区分「热生效」与「需重启」
11
+ - **飞书斜杠命令一键同步**:配置页把 `/new` `/status` 等命令注册为飞书输入框斜杠指令(输入 `/` 弹面板、选中后可继续输入描述),替代手工去开放平台逐条创建
12
+ - **飞书端直接装插件**:聊天里 `/plugin install xxx@marketplace`(仅管理员)即可安装 / 启停 Claude Code 插件,下一条消息自动加载;配置页同样可管
9
13
  - 私聊 / 群聊 @机器人 触发;群聊多人可用(配对 + 白名单访问控制)
10
- - **直接使用本机 Claude Code 全套配置**:模型设置(`~/.claude/settings.json`)、登录态、user 级 MCP、skills、marketplace 插件自动继承,无须二次配置;已启用插件自动加载
11
- - **斜杠透传**:飞书里直接发 `/superpowers:brainstorming` 等斜杠命令,原文透传给 Claude Code 展开(user skills / 插件命令均可触发);配合飞书「机器人菜单」可做成输入框上方的快捷操作按钮
12
- - **多机器人**:一个进程同时跑 N 个飞书机器人,各自独立会话池、独立并发、独立人格(`append_system_prompt`);共享同一套 `~/.claude` 配置
14
+ - **直接使用本机 Claude Code 全套配置**(inherit 模式):模型设置(`~/.claude/settings.json`)、登录态、user 级 MCP、skills、marketplace 插件自动继承,无须二次配置;已启用插件自动加载
15
+ - **斜杠透传**:飞书里直接发 `/superpowers:brainstorming` 等斜杠命令,原文透传给 Claude Code 展开(user skills / 插件命令均可触发)
16
+ - **多机器人**:一个进程同时跑 N 个飞书机器人,各自独立会话池、独立并发、独立人格(`append_system_prompt`);共享同一套 Claude 配置
13
17
  - 写操作确认卡片:允许 / 拒绝 / 本次会话不再询问(仅任务发起人可点),Write/Edit 卡片直接展示红绿 diff
14
- - **读操作免确认**:读工具(Read/Grep/Glob 等)与 Bash 读命令默认直通,危险命令黑名单兜底;白名单可通过 `permissions.allow_tools` 自定义
18
+ - **读操作免确认**:读工具(Read/Grep/Glob 等)与 Bash 读命令默认直通,危险命令黑名单兜底;白名单可通过 `permissions.allow_tools` 自定义(配置页可增删,新建配置默认预置完整默认值)
15
19
  - **开发场景工作流(`type: code-dev`)**:统一 plan mode——先出计划 → 飞书卡片批准/按意见修改/放弃 → 批准后自动执行;任务收尾发汇总 diff 卡片(红绿着色),不再整文件刷屏
16
20
  - 流式进度卡片(打字机效果 + 工具调用 + 运行心跳,静默不等于卡死)
17
21
  - **接收图片与富文本**:直接给机器人发图片(下载到 `~/.lark-claudecode-bridge/inbox/`,Claude 用 Read 工具识图);粘贴的多行/带格式内容(post 富文本)自动拍平为多行文本;不支持的类型(语音等)私聊会回复提示;入站消息按 message_id 去重(WS 重投不会导致任务跑两遍)
18
22
  - 结果文本 + 产出文件回传(图片预览、>10 文件自动 zip;generic 工作区)
19
- - 多工作区切换(/ws)、会话管理(/new /resume)、/stop 打断、模型切换(/model)、加载清单查看(/skills /plugins /mcp)
23
+ - 多工作区切换(/ws)、会话管理(/new /resume)、/stop 打断、模型切换(/model)、加载清单查看(/skills /plugins /mcp)、插件管理(/plugin
20
24
  - **对话内容落盘**:用户消息与 Claude 回复全文存为 JSONL(`transcripts/`,为后续知识库挖掘打底;可选保留期)
21
25
  - 通道并发(默认 3),通道内串行
22
26
 
23
27
  ## 前置条件
24
28
 
25
29
  1. Node.js ≥ 20
26
- 2. Claude Code CLI 可用:终端 `claude "hi"` 能正常回复(任意鉴权方式:
27
- 订阅 `claude login` / `ANTHROPIC_API_KEY` / `ANTHROPIC_BASE_URL` 第三方端点如 GLM——桥接器透传环境变量,不介入鉴权)
30
+ 2. Claude 认证(二选一):
31
+ - **bridge 托管(推荐,免本机登录)**:准备 `ANTHROPIC_API_KEY`(官方)或 `ANTHROPIC_AUTH_TOKEN` + `ANTHROPIC_BASE_URL`(第三方中转端点),在配置页填写即可
32
+ - **继承本机**:本机已 `claude login`(任意鉴权方式),桥接器自动共享 `~/.claude` 全套配置
28
33
 
29
34
  ## 安装
30
35
 
31
36
  ```bash
32
37
  npm install -g @jesonliu/lark-claudecode-bridge
33
- lcb setup
34
38
  lcb start
35
39
  ```
36
40
 
41
+ 首次运行 `lcb start` 检测到没有配置时,会自动打开浏览器进入配置页(`http://127.0.0.1:17317`):填飞书凭证 → 选认证方式 → 完成后重新 `lcb start` 即可使用。
42
+
43
+ 偏好命令行问答的也可以用 `lcb setup`(两者产物等价,setup 额外预置 permissions / server 默认段)。配置页也可单独启动:`lcb ui`(不启动机器人,可与运行中的桥接器共存)。
44
+
37
45
  ## 飞书应用配置(图文)
38
46
 
39
47
  1. https://open.feishu.cn → 创建企业自建应用 → 添加「机器人」能力
40
- 2. 权限管理开通:`im:message`、`im:message:send_as_bot`、`im:resource`(**接收用户图片时下载消息资源用,不开则图片任务会提示下载失败**)、`contact:user.base:readonly`、 `application:app_slash_command:write`(这里的目的是可以为飞书机器人增加斜杆命令。如:/help)
48
+ 2. 权限管理开通:`im:message`、`im:message:send_as_bot`、`im:resource`(**接收用户图片时下载消息资源用,不开则图片任务会提示下载失败**)、`contact:user.base:readonly`、`application:app_slash_command:write` / `application:app_slash_command:read`(斜杠命令一键同步用,见下)
41
49
  3. 事件与回调 → 事件配置 → 订阅方式选「使用长连接接收事件」→ 添加 `im.message.receive_v1`
42
50
  4. 事件与回调 → 回调配置 → 订阅方式选「使用长连接接收回调」→「已订阅的回调」点「添加回调」,添加「卡片回传交互」(`card.action.trigger`)
43
51
  5. 凭证与基础信息 → 复制 App ID / App Secret
44
52
  6. 版本管理与发布 → 创建版本并发布,管理员审核通过
45
- 7. 运行 `lcb setup` 填入凭证 → `lcb start` → 私聊机器人发「/help」
46
-
47
- ### 配置斜杆命令
48
- ```curl
49
- curl --location --request POST 'https://open.feishu.cn/open-apis/application/v7/app_slash_commands' \
50
- --header 'Authorization: Bearer YOUR_TENANT_ACCESS_TOKEN' \
51
- --header 'Content-Type: application/json; charset=utf-8' \
52
- --data-raw '{
53
- "command": "greet",
54
- "description": {
55
- "default_value": "发送一句问候",
56
- "i18n": {
57
- "en_us": "Send a greeting",
58
- "zh_cn": "发送一句问候"
59
- },
60
- "icon": {
61
- "icon_key": "skill_outlined"
62
- }
63
- }
64
- }'
65
- ```
53
+ 7. `lcb start`(首次自动进配置页)或 `lcb setup` 填入凭证 → 私聊机器人发「/help」
54
+
55
+ ### 配置斜杠命令(配置页一键同步)
56
+
57
+ 配置页 →「斜杠命令」tab:选择目标应用 **一键同步**,把 bridge 全部内置命令(`/new` `/status` `/help` …)+ 自定义透传命令注册为飞书输入框斜杠指令。用户在聊天输入 `/` 弹出指令面板,**选中后命令留在输入框,可继续输入描述**再发送(区别于机器人菜单点击即发送)。
58
+
59
+ - 同步为**全量对齐**:远端多余的命令会被删除;生效约 5 分钟(客户端缓存),PC 端需 7.70+
60
+ - 自定义命令(如把 `/produce` 关联到 content-producer 插件):表格添加「命令 / 描述 / 图标」→ 保存 → 同步(内部命令集恒参与同步)
61
+ - 前置:应用已开通 `application:app_slash_command:write` / `read` 权限并发布版本
66
62
 
67
63
  ## 首次配对
68
64
 
@@ -72,8 +68,9 @@ curl --location --request POST 'https://open.feishu.cn/open-apis/application/v7/
72
68
 
73
69
  | 命令 | 说明 |
74
70
  |---|---|
75
- | `lcb setup` | 引导式配置(写入 `~/.lark-claudecode-bridge/config.yaml`,支持一次配多个机器人) |
76
- | `lcb start` | 启动桥接器(前台,为每个机器人各建一条长连接;终端可直接输入配对码批准) |
71
+ | `lcb setup` | 引导式配置(命令行问答;与配置页产物等价,预置 permissions / server 默认段) |
72
+ | `lcb start` | 启动桥接器(前台,为每个机器人各建一条长连接 + 内嵌 Web 配置页;首次安装自动进引导;终端可直接输入配对码批准) |
73
+ | `lcb ui` | 仅启动 Web 配置页(不启动机器人;可与运行中的桥接器共存,写盘后桥接器自动拾取可热字段) |
77
74
  | `lcb pair <code>` | 另开终端批准 6 位配对码 |
78
75
  | `lcb app list` | 列出机器人应用 |
79
76
  | `lcb app add` | 添加机器人应用(交互式;旧单应用配置会自动升级为多应用格式,重启后生效) |
@@ -85,6 +82,14 @@ curl --location --request POST 'https://open.feishu.cn/open-apis/application/v7/
85
82
 
86
83
  > **热生效**:桥接器运行中执行 `lcb ws add / remove`,下一条消息到达时自动重读配置,无需重启(apps 应用列表、凭证与 `concurrency` 改动除外,需重启)。
87
84
 
85
+ ## 配置页进程管理与自动更新
86
+
87
+ 配置页「概览」支持托管桥接器进程与自更新(源码 tsx 运行模式下自动降级为手动指引):
88
+
89
+ - **启停/重启**:概览「运行状态」卡显示桥接器进程状态(PID),可一键启动(后台守护进程)/ 停止 / 重启。`lcb start` 内嵌页面停止/重启时页面随进程短暂失联后自动恢复;`lcb ui` 独立页面则跨进程操作(Windows 下停止为硬终止,会话逐消息落盘不受影响)。
90
+ - **后台运行日志**:经页面启动/重启的桥接器,输出落 `~/.lark-claudecode-bridge/bridge.log`(超 5MB 自动截断);进程 PID 记录于同目录 `bridge.pid`(进程消亡后自动清理)。
91
+ - **版本更新**:概览「版本与更新」卡自动对比 npm registry(跟随本机 `.npmrc` 镜像配置)与当前版本;有新版时一键更新(`npm install -g`)并自动重启生效。
92
+
88
93
  ## 命令速查(飞书里发给机器人)
89
94
 
90
95
  | 命令 | 说明 |
@@ -96,6 +101,7 @@ curl --location --request POST 'https://open.feishu.cn/open-apis/application/v7/
96
101
  | /ws list / /ws use \<名字\> | 工作区(切换仅 admin 可用) |
97
102
  | /model | 查看当前模型;`/model <名字>` 通道级切换;`/model reset` 恢复默认 |
98
103
  | /skills / /plugins / /mcp | 查看本会话实际加载的技能 / 插件 / MCP 服务 |
104
+ | /plugin | 插件管理:`/plugin list`(全员,含本机 ~/.claude 与托管目录两处清单);`install/uninstall/enable/disable/marketplace …`(仅 admin,默认装 ~/.claude,`--dir=managed` 装托管目录),装好下一条消息自动加载 |
99
105
  | /help | 帮助 |
100
106
  | 其它 `/xxx` | **原文透传**给 Claude Code 派发斜杠命令(如 `/superpowers:brainstorming` 触发插件技能) |
101
107
 
@@ -124,15 +130,45 @@ workspaces: # 工作区白名单(列表全局共享;「当前
124
130
  defaults:
125
131
  workspace: demo
126
132
  concurrency: 3 # 通道间并发上限(未单独配置的 app 沿用)
127
- # permissions: # 工具白名单(整块可选,字段独立回退内置默认;改后重启生效)
133
+ # permissions: # 工具白名单(整块可选;setup / 配置页新建时预置完整默认值,页面可增删)
128
134
  # allow_tools: # 免确认直通工具;配置即整体替换内置默认
129
135
  # # 内置默认:Read/Glob/Grep/LS/TodoRead/TodoWrite/WebFetch/WebSearch/Bash
130
- # dangerous_commands: # Bash 危险命令正则,命中弹确认卡(内置默认覆盖 rm -rf/sudo/git push --force/
131
- # - 'rm\s+-rf' # git reset --hard/mkfs/dd if=/chmod 777/管道执行远程脚本/shutdown 等)
136
+ # dangerous_commands: # Bash 危险命令正则(不区分大小写),命中弹确认卡
137
+ # - 'rm\s+-rf' # 内置默认覆盖 rm -rf/sudo/git push --force/git reset --hard/mkfs/dd if=/
138
+ # # chmod 777/管道执行远程脚本/shutdown 等
139
+ # server: # Web 配置页(随 lcb start 常驻;也可 lcb ui 单独启动)
140
+ # enabled: true # 缺省 true;false 则不启动
141
+ # host: 127.0.0.1 # 仅绑回环(改非回环 = 局域网可见,注意安全)
142
+ # port: 17317
143
+ # claude: # 认证双模式;缺省 = inherit(共享本机 ~/.claude)
144
+ # mode: managed # managed = bridge 托管(无需本机 claude login)
145
+ # auth_token: sk-xxx # ANTHROPIC_AUTH_TOKEN(中转站常用;与 api_key 二选一)
146
+ # # api_key: sk-ant-xxx # ANTHROPIC_API_KEY(官方)
147
+ # base_url: https://relay.example # 中转站端点;官方留空
148
+ # model: claude-sonnet-5 # 写入托管目录 settings.json
149
+ # slash_commands: # 飞书斜杠命令同步;内置命令恒参与,此处为自定义透传命令
150
+ # extra:
151
+ # - command: produce
152
+ # description: 内容生产流程
153
+ # icon: skill_outlined
132
154
  # transcripts: # 对话落盘清理策略;缺省 = 永久保留
133
155
  # retention_days: 90
134
156
  ```
135
157
 
158
+ ### 认证双模式(inherit / managed)
159
+
160
+ | | inherit(缺省) | managed |
161
+ |---|---|---|
162
+ | 认证来源 | 本机 `~/.claude`(`claude login` 或其 settings.json) | config.yaml `claude` 段 → 写入 `~/.lark-claudecode-bridge/claude/settings.json` |
163
+ | 适用 | 本机已在用 Claude Code 的用户 | 干净机器 / 不想动本机配置;配 API Key 或中转站 Token |
164
+ | 模型/MCP/skills | 继承 `~/.claude` 全套 | 全部落在托管目录,与本机 `~/.claude` 完全隔离 |
165
+ | 插件 | `~/.claude` 已启用插件自动加载 | **双目录合并加载**:托管目录 + 本机 `~/.claude` 已启用插件(同名托管目录优先),本机已装插件无须重装 |
166
+ | 切换 | 改 `claude.mode` 后**重启**生效 | 同 |
167
+
168
+ 配置页「Claude 认证」tab 可视化切换;managed 模式下认证/模型改动保存后即对后续任务生效(无需重启)。
169
+
170
+ **插件双目录(managed 模式)**:新装插件默认装到本机 `~/.claude`(与本机 claude CLI 共用一份),`/plugin install xxx --dir=managed` 或配置页安装框选「bridge 托管目录」可装到托管目录;启停/卸载自动按插件所在目录执行,两处清单在配置页「插件」tab 与 `/plugin list` 中均带来源标记。
171
+
136
172
  ### 开发场景工作流(`type: code-dev`)
137
173
 
138
174
  给代码开发类工作区设置 `type: code-dev` 后,每个任务自动走「先计划、后执行」:
@@ -147,9 +183,9 @@ concurrency: 3 # 通道间并发上限(未单独配置的 app 沿
147
183
 
148
184
  > plan 卡片与 permissions 配置的改动需重启 bridge 进程生效(`workspaces[].type` 改动亦然)。
149
185
 
150
- ### 配置继承(本机 ~/.claude 一处配置,全机器人共享)
186
+ ### 配置继承(inherit 模式:本机 ~/.claude 一处配置,全机器人共享)
151
187
 
152
- 所有机器人共享本机 `~/.claude`,以下内容自动继承、无须在 config.yaml 重复配置:
188
+ inherit 模式(缺省)下所有机器人共享本机 `~/.claude`,以下内容自动继承、无须在 config.yaml 重复配置(managed 模式则全部落在托管目录):
153
189
 
154
190
  | 继承项 | 来源 | 说明 |
155
191
  |---|---|---|
@@ -160,7 +196,7 @@ concurrency: 3 # 通道间并发上限(未单独配置的 app 沿
160
196
  | 插件 | `~/.claude/plugins/` 中已启用的 marketplace 插件 | 按 `installed_plugins.json` + `enabledPlugins` 自动加载 |
161
197
  | 会话记录 | `~/.claude/projects/` | 飞书跑过的会话,本机 `claude --resume` 也能接着看 |
162
198
 
163
- **插件自动发现**:随本机 CLI `/plugin install` / `/plugin uninstall` 自动跟随(按文件 mtime 失效缓存);`apps[].plugins` 显式配置用于开发期直指源码目录,与自动发现同名时显式优先。
199
+ **插件自动发现**:安装 / 卸载 / 启停自动跟随(按文件 mtime 失效缓存 + 操作后主动失效)。三种管理入口等价:飞书端 `/plugin install xxx@marketplace`(admin)、配置页「插件」tab、本机 CLI。`apps[].plugins` 显式配置用于开发期直指源码目录,与自动发现同名时显式优先。
164
200
 
165
201
  **多机器人隔离语义**:
166
202
 
@@ -170,15 +206,11 @@ concurrency: 3 # 通道间并发上限(未单独配置的 app 沿
170
206
  - **升级兼容**:旧版 `feishu:` 单应用配置无需改动即可启动(自动归一化);首次 `lcb app add` 会把旧配置原地转为 `apps:` 格式,**转换后新增的机器人请追加在列表后面**(旧数据归属第一个应用)
171
207
  - ⚠️ **0.4 起废弃 `claude_config_dir`**:所有机器人统一用 `~/.claude(共享配置)`,机器人间仅会话池隔离。旧版独立目录 `~/.lark-claudecode-bridge/claude/<app_id>/` 中的历史会话不再可 `/resume`(启动时会提示目录位置,确认无用后可手动删除)
172
208
 
173
- ### 快捷操作:飞书机器人菜单
174
-
175
- 把常用技能做成聊天输入框上方的按钮(点击即发对应斜杠命令):
209
+ ### 快捷操作:飞书斜杠命令 / 机器人菜单
176
210
 
177
- 1. https://open.feishu.cn 你的应用 **应用功能 机器人 → 机器人菜单**
178
- 2. 添加菜单项,如:菜单名 **「内容生成」**、动作类型选 **「发送消息」**、消息内容填 `/content-producer:content-producer`
179
- 3. 发布新版本后,聊天窗口输入框上方即出现该按钮——点击 = 以你的身份发出该命令,经斜杠透传触发 content-producer 插件
211
+ **推荐:斜杠命令**(配置页「斜杠命令」tab 一键同步)——聊天输入框输入 `/` 弹出指令面板,选中后命令留在输入框、**可继续输入描述**(如 `/produce 写一篇公众号文章`),发送后经命令 / 透传链路执行。自定义命令在表格维护,保存后点「一键同步」。
180
212
 
181
- > 菜单命令的格式:`/<插件名>:<技能名>`(插件技能)或 `/<技能名>`(user skill)。可用命令清单发 `/skills` 查看。
213
+ 备选:机器人菜单(点击即发送,无法附加描述)——开放平台 应用功能 → 机器人 → 机器人菜单,添加「发送消息」类菜单项填 `/content-producer:content-producer` 即可。菜单命令格式:`/<插件名>:<技能名>`(插件技能)或 `/<技能名>`(user skill),可用命令清单发 `/skills` 查看。
182
214
 
183
215
  ### 对话落盘
184
216
 
@@ -249,6 +281,9 @@ WantedBy=default.target
249
281
  9. **code-dev 工作区的收尾 diff 基于 git**:`type: code-dev` 的工作区需要是 git 仓库(含未提交改动即可,无需 commit);非 git 仓库自动回退为旧的整文件上传行为。untracked 新文件按全新增 diff 展示(目录级 untracked 与超过 20 个的 untracked 文件不展开)。
250
282
  10. **入站图片不清理**:用户发送的图片落盘 `~/.lark-claudecode-bridge/inbox/` 后不会自动删除(供会话内多次查看),长期使用可手动清理;Claude 是否能「看懂」图片取决于当前模型是否多模态(非多模态模型可配置识图 MCP 兜底)。富文本(post)中的超链接以 `[文字](链接)` 形式拍平进文本,@用户 被移除。
251
283
  11. **短回复不再单独发结果消息**:回复不超过进度卡正文上限(1200 字)时,结果就展示在进度卡终态里(避免同内容两条消息);更长回复仍会单独发一条结果消息(进度卡只保留尾部)。
284
+ 12. **Web 配置页改 apps/workspaces 段会丢段内手写注释**:页面按整段替换写回(值未变的段落跳过重写、注释保留;`lcb ws add` 等增量命令不受影响)。手工注释建议写在段外或段头。
285
+ 13. **config.yaml 并发写**:配置页写盘为原子替换,但与 `lcb ws add` / `lcb app add` 等独立进程命令同时操作存在读-改-写窗口,请避免同时修改。
286
+ 14. **配置页默认仅本机可访问**(127.0.0.1);改 `server.host` 放开到局域网意味着页面可读写全部凭证,请仅在可信网络使用。
252
287
 
253
288
  ## 开发
254
289