botmux 2.60.1 → 2.62.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 (75) hide show
  1. package/README.en.md +4 -4
  2. package/README.md +5 -5
  3. package/dist/bot-registry.d.ts +24 -0
  4. package/dist/bot-registry.d.ts.map +1 -1
  5. package/dist/bot-registry.js +30 -0
  6. package/dist/bot-registry.js.map +1 -1
  7. package/dist/cli.d.ts.map +1 -1
  8. package/dist/cli.js +28 -31
  9. package/dist/cli.js.map +1 -1
  10. package/dist/core/command-discovery.d.ts +24 -0
  11. package/dist/core/command-discovery.d.ts.map +1 -0
  12. package/dist/core/command-discovery.js +201 -0
  13. package/dist/core/command-discovery.js.map +1 -0
  14. package/dist/core/command-handler.d.ts +9 -0
  15. package/dist/core/command-handler.d.ts.map +1 -1
  16. package/dist/core/command-handler.js +59 -10
  17. package/dist/core/command-handler.js.map +1 -1
  18. package/dist/core/dashboard-ipc-server.d.ts.map +1 -1
  19. package/dist/core/dashboard-ipc-server.js +2 -1
  20. package/dist/core/dashboard-ipc-server.js.map +1 -1
  21. package/dist/core/dashboard-rows.d.ts +2 -1
  22. package/dist/core/dashboard-rows.d.ts.map +1 -1
  23. package/dist/core/dashboard-rows.js +6 -4
  24. package/dist/core/dashboard-rows.js.map +1 -1
  25. package/dist/core/worker-pool.d.ts.map +1 -1
  26. package/dist/core/worker-pool.js +3 -0
  27. package/dist/core/worker-pool.js.map +1 -1
  28. package/dist/daemon.d.ts.map +1 -1
  29. package/dist/daemon.js +5 -4
  30. package/dist/daemon.js.map +1 -1
  31. package/dist/dashboard/bot-onboarding.d.ts.map +1 -1
  32. package/dist/dashboard/bot-onboarding.js +10 -13
  33. package/dist/dashboard/bot-onboarding.js.map +1 -1
  34. package/dist/dashboard/web/groups.d.ts.map +1 -1
  35. package/dist/dashboard/web/groups.js +6 -1
  36. package/dist/dashboard/web/groups.js.map +1 -1
  37. package/dist/dashboard-web/app.js +1 -1
  38. package/dist/i18n/en.d.ts.map +1 -1
  39. package/dist/i18n/en.js +12 -0
  40. package/dist/i18n/en.js.map +1 -1
  41. package/dist/i18n/zh.d.ts.map +1 -1
  42. package/dist/i18n/zh.js +12 -0
  43. package/dist/i18n/zh.js.map +1 -1
  44. package/dist/im/lark/card-builder.d.ts +17 -0
  45. package/dist/im/lark/card-builder.d.ts.map +1 -1
  46. package/dist/im/lark/card-builder.js +84 -0
  47. package/dist/im/lark/card-builder.js.map +1 -1
  48. package/dist/im/lark/client.d.ts.map +1 -1
  49. package/dist/im/lark/client.js +7 -5
  50. package/dist/im/lark/client.js.map +1 -1
  51. package/dist/im/lark/event-dispatcher.d.ts +2 -1
  52. package/dist/im/lark/event-dispatcher.d.ts.map +1 -1
  53. package/dist/im/lark/event-dispatcher.js +15 -9
  54. package/dist/im/lark/event-dispatcher.js.map +1 -1
  55. package/dist/im/lark/lark-hosts.d.ts +44 -0
  56. package/dist/im/lark/lark-hosts.d.ts.map +1 -0
  57. package/dist/im/lark/lark-hosts.js +49 -0
  58. package/dist/im/lark/lark-hosts.js.map +1 -0
  59. package/dist/setup/verify-permissions.d.ts +2 -1
  60. package/dist/setup/verify-permissions.d.ts.map +1 -1
  61. package/dist/setup/verify-permissions.js +5 -8
  62. package/dist/setup/verify-permissions.js.map +1 -1
  63. package/dist/types.d.ts +1 -0
  64. package/dist/types.d.ts.map +1 -1
  65. package/dist/utils/lark-upload.d.ts +2 -1
  66. package/dist/utils/lark-upload.d.ts.map +1 -1
  67. package/dist/utils/lark-upload.js +11 -7
  68. package/dist/utils/lark-upload.js.map +1 -1
  69. package/dist/utils/user-token.d.ts +12 -4
  70. package/dist/utils/user-token.d.ts.map +1 -1
  71. package/dist/utils/user-token.js +64 -25
  72. package/dist/utils/user-token.js.map +1 -1
  73. package/dist/worker.js +4 -1
  74. package/dist/worker.js.map +1 -1
  75. package/package.json +1 -1
package/README.en.md CHANGED
@@ -40,7 +40,7 @@
40
40
 
41
41
  ### Design Philosophy
42
42
 
43
- Core philosophy: **Bridge CLIs, don't rebuild them**. botmux doesn't reimplement Agent capabilities — it bridges existing AI coding CLIs (Claude Code, Codex, Cursor, Gemini, OpenCode, Antigravity) directly. Memory, context management, tool use, permission systems — these capabilities are evolving rapidly within the CLIs themselves. botmux rides on top of that evolution rather than rebuilding in parallel. Every CLI upgrade benefits botmux automatically with zero adaptation.
43
+ Core philosophy: **Bridge CLIs, don't rebuild them**. botmux doesn't reimplement Agent capabilities — it bridges existing AI coding CLIs (Claude Code, Codex, Cursor, Gemini, OpenCode, Antigravity, GitHub Copilot) directly. Memory, context management, tool use, permission systems — these capabilities are evolving rapidly within the CLIs themselves. botmux rides on top of that evolution rather than rebuilding in parallel. Every CLI upgrade benefits botmux automatically with zero adaptation.
44
44
 
45
45
  ### Key Advantages
46
46
 
@@ -52,7 +52,7 @@ Compared to OpenClaw-style approaches built on Agent SDKs:
52
52
  | CLI Capabilities | Full runtime (hooks, memory, plan mode, skills, `/` commands) | SDK API subset, missing features must be reimplemented |
53
53
  | CLI Upgrades | Zero-adaptation automatic benefit | Must track SDK version changes |
54
54
  | Memory / Context | Reuses CLI's built-in memory system, improves as the CLI evolves | Must build custom memory system, duplicating CLI-native capabilities |
55
- | Multi-CLI Support | 6 CLIs, switch with one config (Claude Code / Codex / Cursor / Gemini / OpenCode / Antigravity) | Tied to a single SDK, cannot switch CLIs |
55
+ | Multi-CLI Support | 7 CLIs, switch with one config (Claude Code / Codex / Cursor / Gemini / OpenCode / Antigravity / GitHub Copilot) | Tied to a single SDK, cannot switch CLIs |
56
56
  | Web Terminal | Interactive full terminal, mobile shortcut toolbar, phone/desktop/Lark tri-screen sync | Usually web chat UI or read-only output |
57
57
  | Multi-Bot Collaboration | Multiple bots in same group via @mention routing, isolated processes, different CLIs sparring | Usually single bot |
58
58
  | Multi-Topic Collaboration | A lead bot auto-splits the task, opens multiple topics, and dispatches several bots to work in parallel (coder + reviewer), with a Lark task list as the shared progress board | Usually manual one-by-one assignment, no unified progress board |
@@ -95,7 +95,7 @@ Run `botmux setup` and follow the interactive menu:
95
95
 
96
96
  Then comes the **2nd scan**: botmux's built-in Feishu Web login automatically imports permissions, configures the `http://127.0.0.1:9768/callback` redirect URL, and creates + submits a publish version. On failure it falls back and prints the manual steps (folded below) without affecting the config already written; importing only part of the permissions still counts as success — add the rest later on the Open Platform.
97
97
 
98
- > ⚠️ **Currently only Feishu (feishu.cn) tenants are supported.** If scan detects a Lark international (larksuite.com) tenant, setup aborts — the daemon runtime (Lark Client/WSClient/event-dispatcher) hasn't been wired up for the `larksuite.com` domain yet. A follow-up PR will add full Lark support.
98
+ > **Both Feishu (feishu.cn) and Lark international (larksuite.com) tenants are supported.** Scan-to-create auto-detects the tenant brand (China / international) and remembers itno manual choice needed; the manual paste path asks once. Each bot connects to its own brand's domain, so one machine can run Feishu and Lark bots side by side, with login credentials isolated per app.
99
99
 
100
100
  At the end, setup validates credentials with a `tenant_access_token` call (only writing `bots.json` on success) and writes the full scope JSON to `~/.botmux/lark-scopes.json` for reference.
101
101
 
@@ -296,7 +296,7 @@ Anthropic's official Telegram channel — which exposes each action as an
296
296
  MCP tool — the Skill + CLI combo skips the MCP handshake on every CLI
297
297
  launch, doesn't burn tool-list tokens, and works across every CLI that
298
298
  can read a system prompt and shell out (Claude Code / Codex / Cursor /
299
- Gemini / OpenCode / Antigravity), with no MCP protocol support required.
299
+ Gemini / OpenCode / Antigravity / GitHub Copilot), with no MCP protocol support required.
300
300
 
301
301
  ### Dashboard
302
302
 
package/README.md CHANGED
@@ -21,7 +21,7 @@
21
21
 
22
22
  ---
23
23
 
24
- **飞书话题群 + AI 编程 CLI,一条消息启动编程会话。** Daemon 监听飞书消息,为每个新话题自动启动独立 CLI 进程(Claude Code / Codex / Cursor / Gemini / OpenCode / Antigravity),提供实时流式卡片和可交互 Web 终端。
24
+ **飞书话题群 + AI 编程 CLI,一条消息启动编程会话。** Daemon 监听飞书消息,为每个新话题自动启动独立 CLI 进程(Claude Code / Codex / Cursor / Gemini / OpenCode / Antigravity / GitHub Copilot),提供实时流式卡片和可交互 Web 终端。
25
25
 
26
26
  > 📖 **完整文档**(命令 / 配置 / 最佳实践 / 排错):**<https://bytedance.aiforce.cloud/app/app_4k9smq6rdxher/>** ——本 README 只讲为什么用它和怎么快速上手。
27
27
 
@@ -45,7 +45,7 @@
45
45
 
46
46
  **不做 SDK wrapper,直接桥接 CLI。**
47
47
 
48
- botmux 不重新实现 Agent 能力,而是直接桥接已有的 AI 编程 CLI(Claude Code、Codex、Cursor、Gemini、OpenCode、Antigravity)。记忆、上下文管理、工具调用、权限体系——这些能力 CLI 本身都在快速迭代,botmux 选择站在这个进化之上,而不是平行重造一套。CLI 的每次升级,botmux 零适配自动受益。
48
+ botmux 不重新实现 Agent 能力,而是直接桥接已有的 AI 编程 CLI(Claude Code、Codex、Cursor、Gemini、OpenCode、Antigravity、GitHub Copilot)。记忆、上下文管理、工具调用、权限体系——这些能力 CLI 本身都在快速迭代,botmux 选择站在这个进化之上,而不是平行重造一套。CLI 的每次升级,botmux 零适配自动受益。
49
49
 
50
50
  ### 核心优势
51
51
 
@@ -57,7 +57,7 @@ botmux 不重新实现 Agent 能力,而是直接桥接已有的 AI 编程 CLI
57
57
  | CLI 能力 | 完整运行时(hooks、memory、plan mode、Skill、`/` 命令) | SDK API 子集,需手动实现缺失功能 |
58
58
  | CLI 升级 | 零适配自动受益 | 需要跟进 SDK 版本变更 |
59
59
  | 记忆 / 上下文 | 直接复用 CLI 内建的记忆系统,随 CLI 迭代自动增强 | 需自建记忆系统,与 CLI 原生能力重复 |
60
- | 多 CLI 支持 | 6 种 CLI 一键切换(Claude Code / Codex / Cursor / Gemini / OpenCode / Antigravity) | 绑定单一 SDK,无法切换 CLI |
60
+ | 多 CLI 支持 | 7 种 CLI 一键切换(Claude Code / Codex / Cursor / Gemini / OpenCode / Antigravity / GitHub Copilot) | 绑定单一 SDK,无法切换 CLI |
61
61
  | Web 终端 | 可交互的完整终端,移动端快捷键工具栏,手机/电脑/飞书三端同步 | 通常仅 Web 聊天界面或只读输出 |
62
62
  | 多机器人协作 | 多 bot 同群 @mention 路由,独立进程隔离,不同 CLI 赛博斗蛐蛐 | 通常单机器人 |
63
63
  | 多话题协作模式 | 主 bot 自动拆任务、开多话题、派多 bot 并行协作(coder+reviewer),飞书任务清单当共享进度板 | 通常需人工逐个分派、无统一进度板 |
@@ -177,7 +177,7 @@ CLI 进入 botmux 会话时自动获得 `~/.botmux/bin` 在 PATH 中,以及一
177
177
  - `botmux bots list` — 查询当前群聊的机器人及 open_id
178
178
  - `botmux schedule` — 增删改查定时任务
179
179
 
180
- 这些能力通过 `--append-system-prompt` 注入和 Skill 描述自动引导 agent 使用。Skill + CLI 的组合相比 Anthropic 官方 Telegram channel 那套 MCP 方案:CLI 启动不用做 MCP 握手、不占用工具列表 token,且对 Claude Code / Codex / Cursor / Gemini / OpenCode / Antigravity 通用 —— 只要 CLI 能读 system prompt 跑 shell 命令就行,不依赖任何 MCP 协议支持。
180
+ 这些能力通过 `--append-system-prompt` 注入和 Skill 描述自动引导 agent 使用。Skill + CLI 的组合相比 Anthropic 官方 Telegram channel 那套 MCP 方案:CLI 启动不用做 MCP 握手、不占用工具列表 token,且对 Claude Code / Codex / Cursor / Gemini / OpenCode / Antigravity / GitHub Copilot 通用 —— 只要 CLI 能读 system prompt 跑 shell 命令就行,不依赖任何 MCP 协议支持。
181
181
 
182
182
  ### Dashboard 管控面
183
183
 
@@ -230,7 +230,7 @@ npm install -g botmux
230
230
 
231
231
  接着进入**第 2 次扫码**:botmux 内置的飞书 Web 登录会自动导入权限、配置 `http://127.0.0.1:9768/callback` 重定向 URL、创建并提交发布版本。失败会自动回退并打印手动步骤(见文末折叠),不影响已写入的配置;权限只导入了一部分也算成功,缺的可事后到开放平台补。
232
232
 
233
- > ⚠️ **目前仅支持飞书 (feishu.cn) 租户**。扫码检测到 Lark 国际版 (larksuite.com) 会中止 setup —— daemon runtime (Lark Client/WSClient/event-dispatcher 等) 需要一并接入 lark 域,会在单独 PR 跟进。
233
+ > **飞书 (feishu.cn) Lark 国际版 (larksuite.com) 均支持**。扫码创建时自动识别租户类型(国内 / 国际)并记住,无需手动选择;手动粘 AppID/Secret 时会让你选一次。每个机器人按所属版本独立连对应域名,同一台机器可同时跑飞书 + Lark 机器人,登录凭证按应用隔离、互不干扰。
234
234
 
235
235
  setup 末尾会用 `tenant_access_token` 校验凭证(通过才落盘 `bots.json`),并把完整权限 JSON 写到 `~/.botmux/lark-scopes.json` 备查。
236
236
 
@@ -3,6 +3,7 @@ import type { BackendType } from './adapters/backend/types.js';
3
3
  import type { CliId } from './adapters/cli/types.js';
4
4
  import { type Locale } from './i18n/index.js';
5
5
  import type { VoiceConfig } from './services/voice/types.js';
6
+ import { type Brand } from './im/lark/lark-hosts.js';
6
7
  export interface OncallChat {
7
8
  /** Lark chat_id (oc_xxx) the bot was pulled into. */
8
9
  chatId: string;
@@ -28,6 +29,15 @@ export interface BotDefaultOncall {
28
29
  export interface BotConfig {
29
30
  larkAppId: string;
30
31
  larkAppSecret: string;
32
+ /**
33
+ * 租户品牌:`'feishu'`(中国版,open.feishu.cn)或 `'lark'`(国际版,
34
+ * open.larksuite.com)。缺省 / 旧 bots.json 无此字段 → 视为 `'feishu'`
35
+ * (见 {@link normalizeBrand}),向后兼容。决定 SDK Client / WSClient 的
36
+ * domain、所有裸 fetch 的 host、OAuth / applink 深链等——全部从这一个字段
37
+ * 派生(见 im/lark/lark-hosts.ts)。setup 时自动识别后落盘;brand 绑定到
38
+ * 具体 app/租户,不在运行时切换(要换平台 = 重新配/加一个 bot)。
39
+ */
40
+ brand?: Brand;
31
41
  /** Optional process-name suffix; the daemon's process name is rendered as `botmux-<name>` (defaults to `botmux-<index>`). */
32
42
  name?: string;
33
43
  cliId: CliId;
@@ -116,6 +126,15 @@ export interface BotConfig {
116
126
  * `/` 开头的文本",避免误伤讨论命令用法的普通对话)。默认 false(保持现状:被授权人可用透传)。
117
127
  */
118
128
  restrictGrantCommands?: boolean;
129
+ /**
130
+ * 用户自定义、额外放行透传给 CLI 的 slash 命令 —— 在固定的 PASSTHROUGH_COMMANDS
131
+ * 之上扩展(例如把 CLI 支持但默认不放行的 `/goal`、`/export` 加进来)。每项必须
132
+ * `/` 开头、小写、仅含 [a-z0-9:_-];解析时归一化(缺失的 `/` 自动补、转小写、去重、
133
+ * 丢弃非法项与会遮蔽 botmux daemon 命令的项)。与内置白名单合并后由
134
+ * {@link resolvePassthroughCommands} 生效;`/list-slash-command` 可查看完整放行清单。
135
+ * 未配置(undefined)→ 仅用内置白名单(保持现状)。
136
+ */
137
+ customPassthroughCommands?: string[];
119
138
  /**
120
139
  * Custom footer brand label for cards this bot sends. Three states:
121
140
  * • `undefined` (unset) → default `[botmux](github)` link
@@ -200,6 +219,11 @@ export declare function getBotClient(larkAppId: string): Lark.Client;
200
219
  export declare function getOwnerOpenId(larkAppId: string): string | undefined;
201
220
  /** Bot 自身的 open_id(用于在 mention 解析时排除自己)。 */
202
221
  export declare function getBotOpenId(larkAppId: string): string | undefined;
222
+ /**
223
+ * 安全地按 appId 取 brand。未注册(如跨进程 dashboard 聚合到别的 daemon 的
224
+ * 会话)→ 归一为 'feishu'。仅用于派生 applink 等 host,缺省 feishu 安全。
225
+ */
226
+ export declare function getBotBrand(larkAppId: string | undefined): Brand;
203
227
  export declare function getAllBots(): BotState[];
204
228
  /** Lookup the oncall binding for a given bot+chat, if any. */
205
229
  export declare function findOncallChat(larkAppId: string, chatId: string): OncallChat | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"bot-registry.d.ts","sourceRoot":"","sources":["../src/bot-registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bot-registry.d.ts","sourceRoot":"","sources":["../src/bot-registry.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,7 @@ import { resolve } from 'node:path';
4
4
  import { homedir } from 'node:os';
5
5
  import { logger } from './utils/logger.js';
6
6
  import { isLocale, setBotLookup } from './i18n/index.js';
7
+ import { sdkDomain, normalizeBrand } from './im/lark/lark-hosts.js';
7
8
  const bots = new Map();
8
9
  // Wire the i18n lookup so `localeForBot()` can resolve per-bot locale without
9
10
  // a hard import cycle between `i18n` and `bot-registry`.
@@ -44,6 +45,9 @@ export function registerBot(cfg) {
44
45
  const client = new Lark.Client({
45
46
  appId: cfg.larkAppId,
46
47
  appSecret: cfg.larkAppSecret,
48
+ // brand → SDK domain。缺省走 feishu,国际版租户走 larksuite.com。
49
+ // 这一行同时修好了所有经由 SDK 的调用(发消息 / 文件 / contact 等)。
50
+ domain: sdkDomain(normalizeBrand(cfg.brand)),
47
51
  logger: larkLogger,
48
52
  });
49
53
  const state = {
@@ -73,6 +77,13 @@ export function getOwnerOpenId(larkAppId) {
73
77
  export function getBotOpenId(larkAppId) {
74
78
  return bots.get(larkAppId)?.botOpenId;
75
79
  }
80
+ /**
81
+ * 安全地按 appId 取 brand。未注册(如跨进程 dashboard 聚合到别的 daemon 的
82
+ * 会话)→ 归一为 'feishu'。仅用于派生 applink 等 host,缺省 feishu 安全。
83
+ */
84
+ export function getBotBrand(larkAppId) {
85
+ return normalizeBrand(larkAppId ? bots.get(larkAppId)?.config.brand : undefined);
86
+ }
76
87
  export function getAllBots() {
77
88
  return Array.from(bots.values());
78
89
  }
@@ -326,6 +337,21 @@ export function parseBotConfigsFromText(jsonText) {
326
337
  if (Object.keys(out).length > 0)
327
338
  quotaState = out;
328
339
  }
340
+ // customPassthroughCommands:用户额外放行透传的 slash 命令。归一化:转小写、
341
+ // 自动补前导 `/`、按 /^\/[a-z0-9][a-z0-9:_-]*$/ 过滤、去重。非法/缺省 → undefined。
342
+ // 注意:与 daemon 命令的冲突过滤放在 resolvePassthroughCommands(运行时合并)做,
343
+ // 这里只保证条目本身格式合法,避免在解析期耦合 command-handler 的命令清单。
344
+ let customPassthroughCommands;
345
+ if (Array.isArray(entry.customPassthroughCommands)) {
346
+ const normalized = entry.customPassthroughCommands
347
+ .filter((x) => typeof x === 'string')
348
+ .map((x) => x.trim().toLowerCase())
349
+ .map((x) => (x.startsWith('/') ? x : `/${x}`))
350
+ .filter((x) => /^\/[a-z0-9][a-z0-9:_-]*$/.test(x));
351
+ const uniq = [...new Set(normalized)];
352
+ if (uniq.length > 0)
353
+ customPassthroughCommands = uniq;
354
+ }
329
355
  // voice:per-bot 语音引擎覆盖。结构化保留(engine ∈ sami|openai,sami/openai
330
356
  // 为对象,speaker/rate 透传);非对象或 engine 非法 → undefined。深度校验
331
357
  // (凭证是否可用)在 resolveVoiceConfig 做,这里只挡明显垃圾。
@@ -354,6 +380,9 @@ export function parseBotConfigsFromText(jsonText) {
354
380
  configs.push({
355
381
  larkAppId: entry.larkAppId,
356
382
  larkAppSecret: entry.larkAppSecret,
383
+ // brand:只认精确的 'lark',其余 → undefined(下游 normalizeBrand 当
384
+ // feishu)。feishu 故意存成 undefined,保持旧 bots.json 干净、不写死字段。
385
+ brand: entry.brand === 'lark' ? 'lark' : undefined,
357
386
  name: typeof entry.name === 'string' && entry.name.trim() ? entry.name.trim() : undefined,
358
387
  cliId: entry.cliId ?? 'claude-code',
359
388
  cliPathOverride: entry.cliPathOverride,
@@ -377,6 +406,7 @@ export function parseBotConfigsFromText(jsonText) {
377
406
  messageQuota,
378
407
  quotaState,
379
408
  restrictGrantCommands: entry.restrictGrantCommands === true || undefined,
409
+ customPassthroughCommands,
380
410
  lang: isLocale(entry.lang) ? entry.lang : undefined,
381
411
  // Preserve '' distinctly from undefined: '' means "brand off", undefined
382
412
  // means "use default botmux brand". Don't trim-to-undefined here.
@@ -1 +1 @@
1
- {"version":3,"file":"bot-registry.js","sourceRoot":"","sources":["../src/bot-registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bot-registry.js","sourceRoot":"","sources":["../src/bot-registry.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AA8gIA;;;;;;;;;;;GAWG;AACH,wBAAsB,OAAO,CAC3B,OAAO,EAAE,OAAO,EAChB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,EACvC,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,qBAAqB,EAAE,SAAS,CAAC,EAC9F,KAAK,EAAE,MAAM,EACb,mBAAmB,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,2BAA2B,EAAE,UAAU,GAAG,IAAI,CAAC,GACzF,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CA+F7B"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AA6gIA;;;;;;;;;;;GAWG;AACH,wBAAsB,OAAO,CAC3B,OAAO,EAAE,OAAO,EAChB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,EACvC,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,qBAAqB,EAAE,SAAS,CAAC,EAC9F,KAAK,EAAE,MAAM,EACb,mBAAmB,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,2BAA2B,EAAE,UAAU,GAAG,IAAI,CAAC,GACzF,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CA+F7B"}
package/dist/cli.js CHANGED
@@ -39,6 +39,7 @@ import { firstPositional } from './cli/arg-utils.js';
39
39
  import { formatBotInfoEntriesForCli, formatChatBotsForCli, } from './cli/bots-list-output.js';
40
40
  import { buildFooterAddressing, hasKnownBotMention, knownBotOpenIdsFromCrossRef, orderedFooterRecipients, } from './utils/bot-routing.js';
41
41
  import { isLocale, localeForBot, setDefaultLocale, SUPPORTED_LOCALES } from './i18n/index.js';
42
+ import { chatAppLink, larkHosts, normalizeBrand, sdkDomain } from './im/lark/lark-hosts.js';
42
43
  import { readGlobalConfig, setGlobalLocale, globalConfigPath } from './global-config.js';
43
44
  import { makeFingerprint, normaliseForFingerprint } from './services/bridge-turn-queue.js';
44
45
  // Resolve the CLI's UI locale once from the global config file, so subsequent
@@ -363,9 +364,10 @@ function writeBotsJsonAtomic(bots) {
363
364
  /**
364
365
  * 从 bot 配置里取 brand. 旧的 bots.json (1.0 之前) 没这个字段, default 到 feishu
365
366
  * 保留向后兼容. cmdStart 凭证校验 + printRemainingSteps 深链都靠它选 host.
367
+ * 归一逻辑收口到 lark-hosts 的 {@link normalizeBrand}(单一事实源)。
366
368
  */
367
369
  function botBrand(b) {
368
- return b?.brand === 'lark' ? 'lark' : 'feishu';
370
+ return normalizeBrand(b?.brand);
369
371
  }
370
372
  /**
371
373
  * 把 botmux 推荐的完整 scope JSON (从 src/setup/lark-scopes.json) 写到
@@ -425,8 +427,7 @@ function printRemainingSteps(appId, brand) {
425
427
  // PersonalAgent 应用扫码建出来时已默认订阅 im.message.receive_v1 +
426
428
  // card.action.trigger, 并开通 bot 能力, 主线只剩两步: 申请权限 + 重定向
427
429
  // URL (按需). README "Step 8 收不到消息时" 段提供 fallback 自查链接.
428
- const host = brand === 'lark' ? 'open.larksuite.com' : 'open.feishu.cn';
429
- const home = `https://${host}/app/${appId}`;
430
+ const home = `${larkHosts(brand).openApi}/app/${appId}`;
430
431
  let scopesJsonPath = '';
431
432
  try {
432
433
  scopesJsonPath = writeScopesJsonToConfigDir();
@@ -508,22 +509,12 @@ async function obtainCredentials(rl) {
508
509
  const { tryRegisterApp } = await import('./setup/register-app.js');
509
510
  const result = await tryRegisterApp();
510
511
  if (result.ok) {
511
- // Lark 国际版需要 daemon 链路全程走 larksuite.com (Client domain /
512
- // WSClient / event-dispatcher fetch URL / scope 深链 host). 当前
513
- // botmux runtime 这几处都硬编码 feishu.cn, 所以即使扫码成功了也无法
514
- // 真正跑起来. 干净做法是 setup 阶段就拒绝, 让用户用 feishu 租户. 单
515
- // 独 PR 完整接入 lark 后再去掉这个分支.
516
- if (result.brand === 'lark') {
517
- console.log(`\n❌ 检测到 Lark 国际版 (larksuite.com) 租户。`);
518
- console.log(` botmux 当前 daemon 运行链路仅支持飞书 (feishu.cn) 租户,`);
519
- console.log(` Lark 国际版完整接入会在单独 PR 跟进 (BotConfig / Client domain /`);
520
- console.log(` WSClient / event-dispatcher 等需要一并支持).`);
521
- console.log(` 请用飞书 (feishu.cn) 租户重试 setup。\n`);
522
- return { ok: false, reason: 'lark_unsupported' };
523
- }
512
+ // brand 由扫码 device flow tenant_brand 自动识别(registerApp 内部已
513
+ // 切到对应域名轮询)。feishu / lark 都直接落盘——daemon 链路全程从
514
+ // BotConfig.brand 派生 host(Client / WSClient domain、裸 fetch、深链)。
524
515
  console.log(`\n✅ 应用创建成功`);
525
516
  console.log(` App ID: ${result.appId}`);
526
- console.log(` 租户类型: ${result.brand}`);
517
+ console.log(` 租户类型: ${result.brand === 'lark' ? 'Lark 国际版 (larksuite.com)' : '飞书 (feishu.cn)'}`);
527
518
  if (result.userOpenId) {
528
519
  console.log(` 扫码人 open_id: ${result.userOpenId}(将默认作为 allowedUsers)`);
529
520
  }
@@ -542,27 +533,31 @@ async function obtainCredentials(rl) {
542
533
  }
543
534
  console.log(' 降级到手动输入 AppID/Secret。\n');
544
535
  }
545
- else {
546
- console.log('\n请在浏览器打开 https://open.feishu.cn/app 创建应用,然后回来粘 ID/Secret。\n');
547
- }
548
- // 手动 fallback. 不再提问租户类型 — 当前 daemon runtime 只支持 feishu,
549
- // 让用户选 lark 是误导. 等 lark 完整接入再加回来.
536
+ // 手动 fallback / 手动选项:扫码路径已用 tenant_brand 自动识别;手动路径
537
+ // 没有这个信号,兜底让用户手选租户类型(决定建应用 / 运行时的域名)。
538
+ console.log('\n租户类型:');
539
+ console.log(' 1) 飞书(中国版,open.feishu.cn)');
540
+ console.log(' 2) Lark(国际版,open.larksuite.com)');
541
+ const brandChoice = (await ask(rl, '选择 [1]: ')).trim();
542
+ const brand = brandChoice === '2' ? 'lark' : 'feishu';
543
+ console.log(`\n请在浏览器打开 ${larkHosts(brand).openApi}/app 创建应用,然后回来粘 ID/Secret。\n`);
550
544
  const appId = (await ask(rl, 'AppID (cli_xxx): ')).trim();
551
545
  const appSecret = (await ask(rl, 'AppSecret: ')).trim();
552
546
  if (!appId || !appSecret) {
553
547
  console.log('\n❌ AppID/AppSecret 不能为空,setup 中止。');
554
548
  return { ok: false, reason: 'cancelled' };
555
549
  }
556
- return { ok: true, appId, appSecret, brand: 'feishu' };
550
+ return { ok: true, appId, appSecret, brand };
557
551
  }
558
552
  /**
559
553
  * 用指定应用凭证把 open_id (ou_) 解析成 union_id (on_,跨应用稳定)。
560
554
  * 查询失败(无 contact 权限 / API 错误)则 fallback 返回原 open_id。
561
555
  */
562
- async function resolveOpenIdToUnionId(appId, appSecret, openId) {
556
+ async function resolveOpenIdToUnionId(appId, appSecret, openId, brand = 'feishu') {
563
557
  try {
564
558
  const { Client } = await import('@larksuiteoapi/node-sdk');
565
- const client = new Client({ appId, appSecret });
559
+ // brand 域名。Lark 扫码人 ou_→on_ 必须打 larksuite.com,否则失败丢掉 cross-app 稳定性。
560
+ const client = new Client({ appId, appSecret, domain: sdkDomain(brand) });
566
561
  const res = await client.contact.v3.user.get({
567
562
  path: { user_id: openId },
568
563
  params: { user_id_type: 'open_id' },
@@ -636,10 +631,6 @@ async function promptBotConfig(rl) {
636
631
  }
637
632
  const workingDir = await ask(rl, '默认工作目录 [~]: ');
638
633
  const modelChoice = await promptModel(rl, cliId);
639
- // 不再持久化 brand 字段: setup 阶段 brand=lark 直接被 obtainCredentials 中止,
640
- // 落盘的永远是 'feishu', 写进配置是死字段. 等 lark 完整接入再加回来, 那时
641
- // 同步打开 daemon 链路的 brand 透传. botBrand() helper 读不到字段会 default
642
- // 到 'feishu', 兼容旧版同时支持将来扩展.
643
634
  const bot = {
644
635
  larkAppId: creds.appId,
645
636
  larkAppSecret: creds.appSecret,
@@ -648,6 +639,12 @@ async function promptBotConfig(rl) {
648
639
  // 在哪儿, 不用去 README 查字段名.
649
640
  workingDir: workingDir.trim() || '~',
650
641
  };
642
+ // brand 落盘:只在国际版 (lark) 时写字段,feishu 留空——保持旧 bots.json 干净,
643
+ // 且 botBrand()/normalizeBrand() 读不到时 default 到 feishu,向后兼容。
644
+ // 下游 finishOpenPlatformSetup(bot, botBrand(bot)) 据此给出正确的 larksuite 深链。
645
+ if (creds.brand === 'lark') {
646
+ bot.brand = 'lark';
647
+ }
651
648
  // modelChoice === undefined → 该 CLI 没声明候选 / 用户跳过;不写 model 字段
652
649
  if (typeof modelChoice === 'string' && modelChoice) {
653
650
  bot.model = modelChoice;
@@ -658,7 +655,7 @@ async function promptBotConfig(rl) {
658
655
  // allowedUsers 为空时虽然"全开放", 但一旦后续加了 allowedChatGroups 就会变成
659
656
  // "群成员能对话却没人能做敏感操作 / 用 /grant". setup 阶段强制收口, 不允许没 owner.
660
657
  if (creds.userOpenId) {
661
- bot.allowedUsers = [await resolveOpenIdToUnionId(creds.appId, creds.appSecret, creds.userOpenId)];
658
+ bot.allowedUsers = [await resolveOpenIdToUnionId(creds.appId, creds.appSecret, creds.userOpenId, creds.brand)];
662
659
  }
663
660
  else {
664
661
  bot.allowedUsers = await promptRequiredOwner(rl);
@@ -3803,7 +3800,7 @@ botmux create-group — 用一组机器人新建飞书群
3803
3800
  // partially failed, the chat exists and retrying would create duplicates.
3804
3801
  process.stdout.write(`${result.chatId}\n`);
3805
3802
  // Human-readable summary + warnings → stderr.
3806
- const link = `https://applink.feishu.cn/client/chat/open?openChatId=${encodeURIComponent(result.chatId)}`;
3803
+ const link = chatAppLink(result.chatId, botBrand(creatorCfg));
3807
3804
  console.error(`✅ 群已创建:${link}`);
3808
3805
  if (result.invalidBotIds.length > 0) {
3809
3806
  console.error(`⚠️ 飞书拒绝邀请的 bot: ${result.invalidBotIds.join(', ')}`);