botmux 2.85.0 → 2.85.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 (47) hide show
  1. package/dist/cli.d.ts.map +1 -1
  2. package/dist/cli.js +22 -13
  3. package/dist/cli.js.map +1 -1
  4. package/dist/daemon.d.ts.map +1 -1
  5. package/dist/daemon.js +4 -1
  6. package/dist/daemon.js.map +1 -1
  7. package/dist/dashboard/bot-onboarding.d.ts +24 -8
  8. package/dist/dashboard/bot-onboarding.d.ts.map +1 -1
  9. package/dist/dashboard/bot-onboarding.js +170 -49
  10. package/dist/dashboard/bot-onboarding.js.map +1 -1
  11. package/dist/dashboard/bot-payload.d.ts +43 -0
  12. package/dist/dashboard/bot-payload.d.ts.map +1 -0
  13. package/dist/dashboard/bot-payload.js +44 -0
  14. package/dist/dashboard/bot-payload.js.map +1 -0
  15. package/dist/dashboard/registry.d.ts +2 -0
  16. package/dist/dashboard/registry.d.ts.map +1 -1
  17. package/dist/dashboard/registry.js.map +1 -1
  18. package/dist/dashboard/web/bot-defaults.d.ts +1 -0
  19. package/dist/dashboard/web/bot-defaults.d.ts.map +1 -1
  20. package/dist/dashboard/web/bot-defaults.js +6 -3
  21. package/dist/dashboard/web/bot-defaults.js.map +1 -1
  22. package/dist/dashboard/web/bot-onboarding.d.ts.map +1 -1
  23. package/dist/dashboard/web/bot-onboarding.js +60 -4
  24. package/dist/dashboard/web/bot-onboarding.js.map +1 -1
  25. package/dist/dashboard/web/i18n.d.ts.map +1 -1
  26. package/dist/dashboard/web/i18n.js +14 -0
  27. package/dist/dashboard/web/i18n.js.map +1 -1
  28. package/dist/dashboard/web/overview.d.ts +22 -0
  29. package/dist/dashboard/web/overview.d.ts.map +1 -1
  30. package/dist/dashboard/web/overview.js +6 -1
  31. package/dist/dashboard/web/overview.js.map +1 -1
  32. package/dist/dashboard-web/app.js +261 -250
  33. package/dist/dashboard.js +58 -36
  34. package/dist/dashboard.js.map +1 -1
  35. package/dist/im/lark/client.d.ts.map +1 -1
  36. package/dist/im/lark/client.js +23 -1
  37. package/dist/im/lark/client.js.map +1 -1
  38. package/dist/im/lark/event-dispatcher.d.ts.map +1 -1
  39. package/dist/im/lark/event-dispatcher.js +16 -9
  40. package/dist/im/lark/event-dispatcher.js.map +1 -1
  41. package/dist/setup/cli-selection.d.ts +20 -1
  42. package/dist/setup/cli-selection.d.ts.map +1 -1
  43. package/dist/setup/cli-selection.js +45 -5
  44. package/dist/setup/cli-selection.js.map +1 -1
  45. package/dist/worker.js +10 -1
  46. package/dist/worker.js.map +1 -1
  47. package/package.json +1 -1
@@ -2,7 +2,7 @@ import { type RegisterAppOptions, type RegisterAppResult } from '../setup/regist
2
2
  import { type CredentialValidation, type RemainingStep } from '../setup/verify-permissions.js';
3
3
  import { type OpenPlatformAutomationOptions, type OpenPlatformAutomationResult } from '../setup/open-platform-automation.js';
4
4
  import type { CliId } from '../adapters/cli/types.js';
5
- export type BotOnboardingStatus = 'starting' | 'waiting_for_scan' | 'verifying' | 'configuring_permissions' | 'waiting_for_platform_scan' | 'completed' | 'failed';
5
+ export type BotOnboardingStatus = 'starting' | 'waiting_for_scan' | 'verifying' | 'configuring_permissions' | 'waiting_for_platform_scan' | 'needs_owner' | 'completed' | 'failed';
6
6
  /** 开放平台权限自动配置结果, 供前端展示成功摘要或手动兜底步骤. */
7
7
  export interface BotOnboardingPermission {
8
8
  ok: boolean;
@@ -69,6 +69,7 @@ export declare function renderQrSvgDataUrl(value: string): string;
69
69
  export declare class BotOnboardingManager {
70
70
  private readonly opts;
71
71
  private readonly jobs;
72
+ private readonly pendingBots;
72
73
  private readonly registerApp;
73
74
  private readonly validateCredentials;
74
75
  private readonly automateOpenPlatform;
@@ -79,15 +80,30 @@ export declare class BotOnboardingManager {
79
80
  get(id: string): BotOnboardingSnapshot | undefined;
80
81
  private patch;
81
82
  private run;
83
+ /** 把 bot append/更新进 bots.json(按 larkAppId upsert, 幂等),返回它的行号。 */
84
+ private persistBot;
82
85
  /**
83
- * 跑开放平台权限自动配置. 复用 setup automateOpenPlatformSetup:
84
- * - 缓存命中 (~/.botmux/feishu-session.json 有效) 静默自动配置, 不出二维码
85
- * - 否则 通过 onQrCode 抛出第二个二维码 (登录开放平台), 前端渲染让用户扫
86
- * - 成功 completed + 权限摘要; 失败 → completed + 手动步骤 (buildRemainingSteps)
87
- *
88
- * 无论自动配置成败, bot 都已写入 bots.json, 所以终态恒为 'completed'.
86
+ * 用户在 needs_owner 状态下手动提交 owner。先做格式校验, 再用新 app 凭证 best-effort
87
+ * 校验「填的身份在本应用里是否可用」:只对能确凿判定的错误 ( app ou_ / 不在本
88
+ * 企业的邮箱) 拒绝;scope 未生效 / 权限不足 / 网络错误等无法证伪的情况不拦截, 避免把
89
+ * 用户永久卡在 needs_owner。校验通过才落盘 allowedUsers 并进入 completed
89
90
  */
90
- private configurePermissions;
91
+ submitOwner(id: string, rawEntries: string[]): Promise<{
92
+ ok: boolean;
93
+ error?: string;
94
+ message?: string;
95
+ }>;
96
+ /**
97
+ * 跑开放平台权限自动配置 (复用 setup 的 automateOpenPlatformSetup)。只负责把进度
98
+ * 推给前端 (configuring_permissions / waiting_for_platform_scan) 并返回结果——终态
99
+ * 由调用方在 owner 落盘后统一决定 (见 finalizePermissions)。
100
+ */
101
+ private runPermissionAutomation;
102
+ /**
103
+ * 统一落终态:completed (已落盘 + 有 owner) 或 needs_owner (尚未落盘、待用户手动填)。
104
+ * needs_owner 时 addedBotIndex 为 undefined——bot 还没进 bots.json, 没有行号。
105
+ */
106
+ private finalizePermissions;
91
107
  }
92
108
  export {};
93
109
  //# sourceMappingURL=bot-onboarding.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"bot-onboarding.d.ts","sourceRoot":"","sources":["../../src/dashboard/bot-onboarding.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bot-onboarding.d.ts","sourceRoot":"","sources":["../../src/dashboard/bot-onboarding.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { createRequire } from 'node:module';
2
2
  import { readBotsJsonOrEmpty, writeBotsJsonAtomic } from '../setup/bots-store.js';
3
- import { normalizeBotConfig } from '../setup/bot-config-editor.js';
3
+ import { normalizeBotConfig, findInvalidAllowedUserEntries, hasOwnerEntry } from '../setup/bot-config-editor.js';
4
4
  import { tryRegisterApp } from '../setup/register-app.js';
5
5
  import { validateCredentials, buildRemainingSteps } from '../setup/verify-permissions.js';
6
6
  import { automateOpenPlatformSetup, } from '../setup/open-platform-automation.js';
@@ -39,6 +39,10 @@ export function renderQrSvgDataUrl(value) {
39
39
  export class BotOnboardingManager {
40
40
  opts;
41
41
  jobs = new Map();
42
+ // needs_owner 状态下「待落盘」的 bot 配置(含 secret)——故意不写进 bots.json,
43
+ // 避免在 owner 确认前就有一个空 allowlist 的可启动 bot 留在磁盘上(重启即 fail-open)。
44
+ // 也不放进 jobs 快照(那个会序列化给前端、会泄漏 secret)。owner 校验通过后才 append。
45
+ pendingBots = new Map();
42
46
  registerApp;
43
47
  validateCredentials;
44
48
  automateOpenPlatform;
@@ -131,36 +135,100 @@ export class BotOnboardingManager {
131
135
  if (result.brand === 'lark') {
132
136
  bot.brand = 'lark';
133
137
  }
138
+ // 注意:此处 **不** 立刻把 bot 写进 bots.json。空 allowedUsers 的 bot 一旦落盘,
139
+ // 就是一个「可被 botmux start/restart 读取、运行时按无白名单全开放」的 fail-open
140
+ // 隐患(哪怕没出 restart hint, 关弹窗 / 重启 / pm2 重启都会以开放模式起)。
141
+ // 只有「能确认 owner」时才落盘——见下方两条路径。
142
+ // 跑 setup 同款开放平台自动配置 (导入权限 / 配 redirect / 建并发版)。
143
+ const auto = await this.runPermissionAutomation(id, result.appId, result.brand, { cliId, workingDir });
144
+ // 关键顺序:先确认 owner, 再决定是否落盘 + 终态。completed 必须意味着「bots.json
145
+ // 里这个 bot 带着至少一个 owner」, 绝不产出空 allowedUsers 的可启动 bot。
146
+ let ownerEntry;
134
147
  if (result.userOpenId) {
135
- // 优先存 union_id(on_,跨应用稳定),避免 open_id 在其他 bot 下报 cross-app 错误。
136
- // 用刚注册的应用自身凭证查询;若查询失败(无 contact 权限)则 fallback open_id
137
- bot.allowedUsers = [await resolveToUnionId(result.appId, result.appSecret, result.userOpenId, result.brand)];
138
- }
139
- const addedBotIndex = bots.length;
140
- writeBotsJsonAtomic(this.opts.botsJsonPath, [...bots, normalizeBotConfig(bot)]);
141
- // bots.json 已落盘——bot 本身已添加. 接下来跑 setup 同款开放平台自动配置
142
- // (导入权限 / 配 redirect / 建并发版). 这一步失败不回滚 bot, 只降级到
143
- // 手动权限步骤提示——和 `botmux setup` 的 finishOpenPlatformSetup 行为一致.
144
- await this.configurePermissions(id, result.appId, result.brand, { cliId, workingDir, addedBotIndex });
148
+ // registerApp 返回的 open_id 来自扫码链路; 用新 app 自身凭证验证, 失败不
149
+ // fallback 写入该 (常为跨 app 的) ou_——避免把其他 app 视角的 open_id 固化
150
+ // owner, 导致 /grant 和授权卡片一直判 non-owner。
151
+ ownerEntry = await resolveScannerAllowedUser(result.appId, result.appSecret, result.userOpenId, result.brand);
152
+ }
153
+ if (ownerEntry) {
154
+ const addedBotIndex = this.persistBot({ ...bot, allowedUsers: [ownerEntry] });
155
+ this.finalizePermissions(id, result.appId, result.brand, addedBotIndex, auto, 'completed');
156
+ }
157
+ else {
158
+ // owner 没法自动确认:bot 先不落盘, 暂存内存等用户手动填 owner 校验通过后再写。
159
+ this.pendingBots.set(id, bot);
160
+ this.finalizePermissions(id, result.appId, result.brand, undefined, auto, 'needs_owner');
161
+ }
162
+ }
163
+ /** 把 bot append/更新进 bots.json(按 larkAppId upsert, 幂等),返回它的行号。 */
164
+ persistBot(bot) {
165
+ const bots = readBotsJsonOrEmpty(this.opts.botsJsonPath);
166
+ const normalized = normalizeBotConfig(bot);
167
+ const existing = bots.findIndex((b) => b?.larkAppId === bot.larkAppId);
168
+ if (existing >= 0) {
169
+ const next = [...bots];
170
+ next[existing] = normalized;
171
+ writeBotsJsonAtomic(this.opts.botsJsonPath, next);
172
+ return existing;
173
+ }
174
+ const index = bots.length;
175
+ writeBotsJsonAtomic(this.opts.botsJsonPath, [...bots, normalized]);
176
+ return index;
177
+ }
178
+ /**
179
+ * 用户在 needs_owner 状态下手动提交 owner。先做格式校验, 再用新 app 凭证 best-effort
180
+ * 校验「填的身份在本应用里是否可用」:只对能确凿判定的错误 (跨 app 的 ou_ / 不在本
181
+ * 企业的邮箱) 拒绝;scope 未生效 / 权限不足 / 网络错误等无法证伪的情况不拦截, 避免把
182
+ * 用户永久卡在 needs_owner。校验通过才落盘 allowedUsers 并进入 completed。
183
+ */
184
+ async submitOwner(id, rawEntries) {
185
+ const job = this.jobs.get(id);
186
+ if (!job)
187
+ return { ok: false, error: 'unknown_onboarding_job' };
188
+ if (job.status !== 'needs_owner')
189
+ return { ok: false, error: 'not_awaiting_owner' };
190
+ const pending = this.pendingBots.get(id);
191
+ if (!pending)
192
+ return { ok: false, error: 'missing_app' };
193
+ const entries = rawEntries.map(e => e.trim()).filter(Boolean);
194
+ const invalid = findInvalidAllowedUserEntries(entries);
195
+ if (invalid.length > 0) {
196
+ return { ok: false, error: 'invalid_entries', message: `不是完整邮箱、union_id(on_) 或 open_id(ou_):${invalid.join(', ')}` };
197
+ }
198
+ if (!hasOwnerEntry(entries)) {
199
+ return { ok: false, error: 'no_owner', message: '至少需要一个完整邮箱、union_id(on_) 或 open_id(ou_) 作为 owner。' };
200
+ }
201
+ const appId = typeof pending.larkAppId === 'string' ? pending.larkAppId : '';
202
+ const appSecret = typeof pending.larkAppSecret === 'string' ? pending.larkAppSecret : '';
203
+ const brand = job.brand ?? 'feishu';
204
+ const unusable = await detectUnusableOwnerEntries(appId, appSecret, brand, entries);
205
+ if (unusable.length > 0) {
206
+ return {
207
+ ok: false,
208
+ error: 'unusable_owner',
209
+ message: `以下身份在当前应用里无法解析(可能是其他应用的 open_id,或邮箱不在本企业):${unusable.join(', ')}。请改用本企业邮箱或 union_id(on_)。`,
210
+ };
211
+ }
212
+ // 校验通过才落盘:此刻 bot 第一次进入 bots.json, 且带着非空 allowedUsers。
213
+ const addedBotIndex = this.persistBot({ ...pending, allowedUsers: entries });
214
+ this.pendingBots.delete(id);
215
+ this.patch(id, { status: 'completed', addedBotIndex });
216
+ return { ok: true };
145
217
  }
146
218
  /**
147
- * 跑开放平台权限自动配置. 复用 setup 的 automateOpenPlatformSetup:
148
- * - 缓存命中 (~/.botmux/feishu-session.json 有效) → 静默自动配置, 不出二维码
149
- * - 否则 通过 onQrCode 抛出第二个二维码 (登录开放平台), 前端渲染让用户扫
150
- * - 成功 → completed + 权限摘要; 失败 → completed + 手动步骤 (buildRemainingSteps)
151
- *
152
- * 无论自动配置成败, bot 都已写入 bots.json, 所以终态恒为 'completed'.
219
+ * 跑开放平台权限自动配置 (复用 setup 的 automateOpenPlatformSetup)。只负责把进度
220
+ * 推给前端 (configuring_permissions / waiting_for_platform_scan) 并返回结果——终态
221
+ * 由调用方在 owner 落盘后统一决定 (见 finalizePermissions)
153
222
  */
154
- async configurePermissions(id, appId, brand, meta) {
223
+ async runPermissionAutomation(id, appId, brand, meta) {
155
224
  this.patch(id, {
156
225
  status: 'configuring_permissions',
157
226
  appId,
158
227
  cliId: meta.cliId,
159
228
  workingDir: meta.workingDir,
160
229
  });
161
- let auto;
162
230
  try {
163
- auto = await this.automateOpenPlatform({
231
+ return await this.automateOpenPlatform({
164
232
  appId,
165
233
  brand,
166
234
  onQrCode: info => {
@@ -179,53 +247,106 @@ export class BotOnboardingManager {
179
247
  }
180
248
  catch (err) {
181
249
  // automation 不应抛 (内部已结构化返回), 兜底当作失败 → 手动步骤.
182
- auto = {
250
+ return {
183
251
  ok: false,
184
252
  reason: 'api_error',
185
253
  message: err instanceof Error ? err.message : String(err),
186
254
  };
187
255
  }
188
- if (auto.ok) {
189
- this.patch(id, {
190
- status: 'completed',
191
- addedBotIndex: meta.addedBotIndex,
192
- platformQrDataUrl: undefined,
193
- permission: {
194
- ok: true,
195
- scopeCount: auto.scopeCount,
196
- skippedScopeCount: auto.skippedScopeCount,
197
- versionId: auto.versionId,
198
- scopeWarning: auto.scopeWarning,
199
- },
200
- });
201
- return;
202
- }
203
- // 自动配置失败: bot 已添加, 给手动权限步骤 (与 setup 失败回退一致).
256
+ }
257
+ /**
258
+ * 统一落终态:completed (已落盘 + 有 owner) 或 needs_owner (尚未落盘、待用户手动填)。
259
+ * needs_owner 时 addedBotIndex 为 undefined——bot 还没进 bots.json, 没有行号。
260
+ */
261
+ finalizePermissions(id, appId, brand, addedBotIndex, auto, status) {
262
+ const permission = auto.ok
263
+ ? {
264
+ ok: true,
265
+ scopeCount: auto.scopeCount,
266
+ skippedScopeCount: auto.skippedScopeCount,
267
+ versionId: auto.versionId,
268
+ scopeWarning: auto.scopeWarning,
269
+ }
270
+ : { ok: false, reason: auto.reason, message: auto.message };
204
271
  this.patch(id, {
205
- status: 'completed',
206
- addedBotIndex: meta.addedBotIndex,
272
+ status,
273
+ ...(addedBotIndex !== undefined ? { addedBotIndex } : {}),
207
274
  platformQrDataUrl: undefined,
208
- permission: { ok: false, reason: auto.reason, message: auto.message },
209
- remainingSteps: buildRemainingSteps(appId, brand),
275
+ permission,
276
+ ...(auto.ok ? {} : { remainingSteps: buildRemainingSteps(appId, brand) }),
210
277
  });
211
278
  }
212
279
  }
213
280
  /**
214
- * 用指定应用的凭证把 open_id (ou_) 解析成 union_id (on_)
215
- * union_id 跨应用稳定,适合写入 allowedUsers 供多个 bot 共用。
216
- * 若查询失败(无 contact 权限 / API 错误)则 fallback 返回原 open_id
281
+ * 用新应用自身凭证验证扫码链路拿到的 open_id。
282
+ * 能解析 union_id 时写 on_;没有 union_id open_id 对当前 app 有效时写 ou_。
283
+ * 查询失败或用户不在当前 app 视角时返回 undefined,调用方不得 fallback 写入该 ou_
217
284
  */
218
- async function resolveToUnionId(appId, appSecret, openId, brand = 'feishu') {
285
+ async function resolveScannerAllowedUser(appId, appSecret, openId, brand = 'feishu') {
219
286
  try {
220
287
  const client = new Lark.Client({ appId, appSecret, domain: sdkDomain(brand), disableTokenCache: false });
221
288
  const res = await client.contact.v3.user.get({
222
289
  path: { user_id: openId },
223
290
  params: { user_id_type: 'open_id' },
224
291
  });
225
- if (res.code === 0 && res.data?.user?.union_id)
226
- return res.data.user.union_id;
292
+ if (res.code === 0 && res.data?.user) {
293
+ return res.data.user.union_id ?? openId;
294
+ }
295
+ }
296
+ catch { /* do not trust scanner open_id when verification fails */ }
297
+ return undefined;
298
+ }
299
+ // 跨 app open_id 的固定错误码:用本 app 凭证查别的 app 视角的 ou_ 必返这个。
300
+ const CROSS_APP_OPEN_ID_CODE = 99992361;
301
+ /**
302
+ * best-effort 找出「确凿不可用」的 owner 条目, 供 submitOwner 拒绝。只在能明确判定时
303
+ * 才判不可用——避免 scope 未生效 / 权限不足 / 网络错误时把合法条目误杀:
304
+ * - ou_:本 app 查到跨 app 错误码 (99992361) → 不可用 (典型误填别的 app 的 open_id)。
305
+ * - 邮箱:batchGetId 成功返回但该邮箱没有对应 user → 不可用 (不在本企业)。
306
+ * - on_:union_id 无法构造确凿的「不属于本 app」信号, 一律放行 (留给运行时解析)。
307
+ * 任何抛错 / 非确定性响应都视为「无法证伪」→ 不计入 unusable。
308
+ */
309
+ async function detectUnusableOwnerEntries(appId, appSecret, brand, entries) {
310
+ if (!appSecret)
311
+ return [];
312
+ let client;
313
+ try {
314
+ client = new Lark.Client({ appId, appSecret, domain: sdkDomain(brand), disableTokenCache: false });
315
+ }
316
+ catch {
317
+ return [];
318
+ }
319
+ const unusable = [];
320
+ for (const entry of entries) {
321
+ try {
322
+ if (entry.startsWith('ou_')) {
323
+ const res = await client.contact.v3.user.get({
324
+ path: { user_id: entry },
325
+ params: { user_id_type: 'open_id' },
326
+ });
327
+ if (res?.code === CROSS_APP_OPEN_ID_CODE)
328
+ unusable.push(entry);
329
+ }
330
+ else if (entry.startsWith('on_')) {
331
+ // union_id:无确凿的跨 app 否定信号, 放行。
332
+ continue;
333
+ }
334
+ else {
335
+ const res = await client.contact.v3.user.batchGetId({
336
+ params: { user_id_type: 'open_id' },
337
+ data: { emails: [entry], include_resigned: false },
338
+ });
339
+ // 单封邮箱查询:成功响应里没有任何带 user_id 的条目 → 确凿不在本企业。
340
+ // 用「是否存在 user_id」而非「邮箱精确匹配」判定, 避开 API 侧邮箱规范化误杀。
341
+ if (res?.code === 0) {
342
+ const list = res.data?.user_list ?? [];
343
+ if (!list.some(u => u?.user_id))
344
+ unusable.push(entry);
345
+ }
346
+ }
347
+ }
348
+ catch { /* 无法证伪:不计入 unusable */ }
227
349
  }
228
- catch { /* fallback */ }
229
- return openId;
350
+ return unusable;
230
351
  }
231
352
  //# sourceMappingURL=bot-onboarding.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"bot-onboarding.js","sourceRoot":"","sources":["../../src/dashboard/bot-onboarding.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bot-onboarding.js","sourceRoot":"","sources":["../../src/dashboard/bot-onboarding.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ export interface DashboardBotDescriptor {
2
+ larkAppId: string;
3
+ botName?: string | null;
4
+ botAvatarUrl?: string;
5
+ cliId?: string;
6
+ }
7
+ export declare function botSummaryPayload(bot: DashboardBotDescriptor): {
8
+ cliId?: string | undefined;
9
+ botAvatarUrl?: string | undefined;
10
+ larkAppId: string;
11
+ botName: string | null | undefined;
12
+ };
13
+ export declare function botDefaultsPayload(bot: DashboardBotDescriptor, j?: any, error?: string): {
14
+ error: string;
15
+ online: boolean;
16
+ cliId?: string | undefined;
17
+ larkAppId: string;
18
+ botName: string | null | undefined;
19
+ } | {
20
+ defaultOncall: any;
21
+ autoboundChatCount: any;
22
+ brandLabel: any;
23
+ sandbox: boolean;
24
+ disableStreamingCard: boolean;
25
+ writableTerminalLinkInCard: boolean;
26
+ privateCard: boolean;
27
+ autoStartOnGroupJoin: boolean;
28
+ autoStartOnGroupJoinPrompt: any;
29
+ autoStartOnNewTopic: boolean;
30
+ regularGroupReplyMode: any;
31
+ regularGroupMentionMode: any;
32
+ restrictGrantCommands: boolean;
33
+ messageQuotaDefaultLimit: any;
34
+ p2pMode: string;
35
+ maxLiveWorkers: any;
36
+ startupCommands: any;
37
+ skills: any;
38
+ online: boolean;
39
+ cliId?: string | undefined;
40
+ larkAppId: string;
41
+ botName: string | null | undefined;
42
+ };
43
+ //# sourceMappingURL=bot-payload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bot-payload.d.ts","sourceRoot":"","sources":["../../src/dashboard/bot-payload.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,sBAAsB;;;;;EAO5D;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,sBAAsB,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiCtF"}
@@ -0,0 +1,44 @@
1
+ export function botSummaryPayload(bot) {
2
+ return {
3
+ larkAppId: bot.larkAppId,
4
+ botName: bot.botName,
5
+ ...(bot.botAvatarUrl ? { botAvatarUrl: bot.botAvatarUrl } : {}),
6
+ ...(bot.cliId ? { cliId: bot.cliId } : {}),
7
+ };
8
+ }
9
+ export function botDefaultsPayload(bot, j, error) {
10
+ const base = {
11
+ larkAppId: bot.larkAppId,
12
+ botName: bot.botName,
13
+ ...(bot.cliId ? { cliId: bot.cliId } : {}),
14
+ online: true,
15
+ };
16
+ if (error)
17
+ return { ...base, error };
18
+ return {
19
+ ...base,
20
+ defaultOncall: j?.defaultOncall,
21
+ autoboundChatCount: j?.autoboundChatCount ?? 0,
22
+ brandLabel: j?.brandLabel ?? null,
23
+ sandbox: j?.sandbox === true,
24
+ disableStreamingCard: j?.disableStreamingCard === true,
25
+ writableTerminalLinkInCard: j?.writableTerminalLinkInCard === true,
26
+ privateCard: j?.privateCard === true,
27
+ autoStartOnGroupJoin: j?.autoStartOnGroupJoin === true,
28
+ autoStartOnGroupJoinPrompt: typeof j?.autoStartOnGroupJoinPrompt === 'string' ? j.autoStartOnGroupJoinPrompt : '',
29
+ autoStartOnNewTopic: j?.autoStartOnNewTopic === true,
30
+ regularGroupReplyMode: (j?.regularGroupReplyMode === 'new-topic' || j?.regularGroupReplyMode === 'shared')
31
+ ? j.regularGroupReplyMode
32
+ : 'chat',
33
+ regularGroupMentionMode: (j?.regularGroupMentionMode === 'topic' || j?.regularGroupMentionMode === 'never')
34
+ ? j.regularGroupMentionMode
35
+ : 'always',
36
+ restrictGrantCommands: j?.restrictGrantCommands === true,
37
+ messageQuotaDefaultLimit: typeof j?.messageQuotaDefaultLimit === 'number' ? j.messageQuotaDefaultLimit : null,
38
+ p2pMode: j?.p2pMode === 'chat' ? 'chat' : 'thread',
39
+ maxLiveWorkers: typeof j?.maxLiveWorkers === 'number' ? j.maxLiveWorkers : null,
40
+ startupCommands: typeof j?.startupCommands === 'string' ? j.startupCommands : '',
41
+ skills: j?.skills && typeof j.skills === 'object' ? j.skills : null,
42
+ };
43
+ }
44
+ //# sourceMappingURL=bot-payload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bot-payload.js","sourceRoot":"","sources":["../../src/dashboard/bot-payload.ts"],"names":[],"mappings":"AAOA,MAAM,UAAU,iBAAiB,CAAC,GAA2B;IAC3D,OAAO;QACL,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC3C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,GAA2B,EAAE,CAAO,EAAE,KAAc;IACrF,MAAM,IAAI,GAAG;QACX,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1C,MAAM,EAAE,IAAI;KACb,CAAC;IACF,IAAI,KAAK;QAAE,OAAO,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,CAAC;IACrC,OAAO;QACL,GAAG,IAAI;QACP,aAAa,EAAE,CAAC,EAAE,aAAa;QAC/B,kBAAkB,EAAE,CAAC,EAAE,kBAAkB,IAAI,CAAC;QAC9C,UAAU,EAAE,CAAC,EAAE,UAAU,IAAI,IAAI;QACjC,OAAO,EAAE,CAAC,EAAE,OAAO,KAAK,IAAI;QAC5B,oBAAoB,EAAE,CAAC,EAAE,oBAAoB,KAAK,IAAI;QACtD,0BAA0B,EAAE,CAAC,EAAE,0BAA0B,KAAK,IAAI;QAClE,WAAW,EAAE,CAAC,EAAE,WAAW,KAAK,IAAI;QACpC,oBAAoB,EAAE,CAAC,EAAE,oBAAoB,KAAK,IAAI;QACtD,0BAA0B,EAAE,OAAO,CAAC,EAAE,0BAA0B,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,EAAE;QACjH,mBAAmB,EAAE,CAAC,EAAE,mBAAmB,KAAK,IAAI;QACpD,qBAAqB,EAAE,CAAC,CAAC,EAAE,qBAAqB,KAAK,WAAW,IAAI,CAAC,EAAE,qBAAqB,KAAK,QAAQ,CAAC;YACxG,CAAC,CAAC,CAAC,CAAC,qBAAqB;YACzB,CAAC,CAAC,MAAM;QACV,uBAAuB,EAAE,CAAC,CAAC,EAAE,uBAAuB,KAAK,OAAO,IAAI,CAAC,EAAE,uBAAuB,KAAK,OAAO,CAAC;YACzG,CAAC,CAAC,CAAC,CAAC,uBAAuB;YAC3B,CAAC,CAAC,QAAQ;QACZ,qBAAqB,EAAE,CAAC,EAAE,qBAAqB,KAAK,IAAI;QACxD,wBAAwB,EAAE,OAAO,CAAC,EAAE,wBAAwB,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,IAAI;QAC7G,OAAO,EAAE,CAAC,EAAE,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ;QAClD,cAAc,EAAE,OAAO,CAAC,EAAE,cAAc,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI;QAC/E,eAAe,EAAE,OAAO,CAAC,EAAE,eAAe,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE;QAChF,MAAM,EAAE,CAAC,EAAE,MAAM,IAAI,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI;KACpE,CAAC;AACJ,CAAC"}
@@ -1,6 +1,8 @@
1
1
  export interface DaemonInfo {
2
2
  larkAppId: string;
3
3
  botName: string;
4
+ /** CLI adapter id from bots.json, e.g. codex / claude-code / traex. */
5
+ cliId?: string;
4
6
  /** Lark app avatar URL (from /bot/v3/info); absent until the open_id probe lands. */
5
7
  botAvatarUrl?: string;
6
8
  botIndex: number;
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/dashboard/registry.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,qFAAqF;IACrF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB;;;;;OAKG;IACH,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;CACjC;AAKD,MAAM,MAAM,gBAAgB,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,IAAI,CAAC;AAE9D,MAAM,WAAW,qBAAqB;IACpC,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;;GAGG;AACH,qBAAa,cAAc;IAOb,OAAO,CAAC,GAAG;IANvB,OAAO,CAAC,KAAK,CAAiC;IAC9C,OAAO,CAAC,SAAS,CAA+B;IAChD,OAAO,CAAC,OAAO,CAAC,CAAY;IAC5B,OAAO,CAAC,MAAM,CAAC,CAAiC;IAChD,OAAO,CAAC,iBAAiB,CAAS;gBAEd,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,qBAA0B;IAI9D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAc5B,IAAI,IAAI,IAAI;IASZ,IAAI,IAAI,UAAU,EAAE;IAKpB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAM9C,EAAE,CAAC,EAAE,EAAE,gBAAgB,GAAG,MAAM,IAAI;IAKpC,OAAO,CAAC,OAAO;CAmBhB"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/dashboard/registry.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,uEAAuE;IACvE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qFAAqF;IACrF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB;;;;;OAKG;IACH,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;CACjC;AAKD,MAAM,MAAM,gBAAgB,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,IAAI,CAAC;AAE9D,MAAM,WAAW,qBAAqB;IACpC,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;;GAGG;AACH,qBAAa,cAAc;IAOb,OAAO,CAAC,GAAG;IANvB,OAAO,CAAC,KAAK,CAAiC;IAC9C,OAAO,CAAC,SAAS,CAA+B;IAChD,OAAO,CAAC,OAAO,CAAC,CAAY;IAC5B,OAAO,CAAC,MAAM,CAAC,CAAiC;IAChD,OAAO,CAAC,iBAAiB,CAAS;gBAEd,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,qBAA0B;IAI9D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAc5B,IAAI,IAAI,IAAI;IASZ,IAAI,IAAI,UAAU,EAAE;IAKpB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAM9C,EAAE,CAAC,EAAE,EAAE,gBAAgB,GAAG,MAAM,IAAI;IAKpC,OAAO,CAAC,OAAO;CAmBhB"}
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/dashboard/registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/dashboard/registry.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,3 @@
1
+ export declare function displayCliId(bot: any, sessionFallback: string): string;
1
2
  export declare function renderBotDefaultsPage(root: HTMLElement): Promise<void>;
2
3
  //# sourceMappingURL=bot-defaults.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"bot-defaults.d.ts","sourceRoot":"","sources":["../../../src/dashboard/web/bot-defaults.ts"],"names":[],"mappings":"AA8EA,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,WAAW,iBAshC5D"}
1
+ {"version":3,"file":"bot-defaults.d.ts","sourceRoot":"","sources":["../../../src/dashboard/web/bot-defaults.ts"],"names":[],"mappings":"AAaA,wBAAgB,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,eAAe,EAAE,MAAM,GAAG,MAAM,CAEtE;AAmED,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,WAAW,iBAshC5D"}
@@ -9,7 +9,10 @@ let cache = { bots: [] };
9
9
  let loadError = null;
10
10
  // master-detail:左侧员工名册选中谁,右侧就渲染谁的档案
11
11
  let selectedAppId = null;
12
- /** /api/bots 不带 cliId — 从 store 里该 bot 最近的会话上推。 */
12
+ export function displayCliId(bot, sessionFallback) {
13
+ return typeof bot?.cliId === 'string' && bot.cliId ? bot.cliId : sessionFallback;
14
+ }
15
+ /** Fallback for old /api/bots payloads: infer from the bot's recent sessions. */
13
16
  function cliIdOf(appId) {
14
17
  let best = null;
15
18
  for (const s of store.sessions.values()) {
@@ -136,7 +139,7 @@ export async function renderBotDefaultsPage(root) {
136
139
  }
137
140
  function renderRosterItem(b) {
138
141
  const name = b.botName ?? b.larkAppId;
139
- const cli = cliIdOf(b.larkAppId);
142
+ const cli = displayCliId(b, cliIdOf(b.larkAppId));
140
143
  const flag = b.defaultOncall?.enabled
141
144
  ? `<span class="bd-roster-flag">oncall</span>`
142
145
  : '';
@@ -163,7 +166,7 @@ export async function renderBotDefaultsPage(root) {
163
166
  const def = b.defaultOncall ?? { enabled: false, workingDir: '', since: 0 };
164
167
  const enabled = !!def.enabled;
165
168
  const name = b.botName ?? b.larkAppId;
166
- const cli = cliIdOf(b.larkAppId);
169
+ const cli = displayCliId(b, cliIdOf(b.larkAppId));
167
170
  return `<article class="bd-card bd-profile" data-appid="${escapeHtml(b.larkAppId)}">
168
171
  <header class="bd-profile-head">
169
172
  ${botAvatarHtml({ name, larkAppId: b.larkAppId, dot: 'ok' })}