botmux 1.4.3 → 1.5.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 (104) hide show
  1. package/.env.example +5 -0
  2. package/README.en.md +56 -2
  3. package/README.md +56 -2
  4. package/dist/adapters/backend/tmux-backend.d.ts.map +1 -1
  5. package/dist/adapters/backend/tmux-backend.js +31 -0
  6. package/dist/adapters/backend/tmux-backend.js.map +1 -1
  7. package/dist/adapters/cli/aiden.d.ts.map +1 -1
  8. package/dist/adapters/cli/aiden.js +11 -1
  9. package/dist/adapters/cli/aiden.js.map +1 -1
  10. package/dist/adapters/cli/claude-code.d.ts.map +1 -1
  11. package/dist/adapters/cli/claude-code.js +12 -1
  12. package/dist/adapters/cli/claude-code.js.map +1 -1
  13. package/dist/bot-registry.d.ts +31 -0
  14. package/dist/bot-registry.d.ts.map +1 -0
  15. package/dist/bot-registry.js +125 -0
  16. package/dist/bot-registry.js.map +1 -0
  17. package/dist/cli.js +198 -52
  18. package/dist/cli.js.map +1 -1
  19. package/dist/core/command-handler.d.ts +2 -2
  20. package/dist/core/command-handler.d.ts.map +1 -1
  21. package/dist/core/command-handler.js +18 -13
  22. package/dist/core/command-handler.js.map +1 -1
  23. package/dist/core/session-manager.d.ts +4 -3
  24. package/dist/core/session-manager.d.ts.map +1 -1
  25. package/dist/core/session-manager.js +45 -12
  26. package/dist/core/session-manager.js.map +1 -1
  27. package/dist/core/types.d.ts +3 -0
  28. package/dist/core/types.d.ts.map +1 -1
  29. package/dist/core/types.js +4 -1
  30. package/dist/core/types.js.map +1 -1
  31. package/dist/core/worker-pool.d.ts +4 -3
  32. package/dist/core/worker-pool.d.ts.map +1 -1
  33. package/dist/core/worker-pool.js +43 -30
  34. package/dist/core/worker-pool.js.map +1 -1
  35. package/dist/daemon.d.ts.map +1 -1
  36. package/dist/daemon.js +140 -70
  37. package/dist/daemon.js.map +1 -1
  38. package/dist/im/lark/card-handler.d.ts +2 -2
  39. package/dist/im/lark/card-handler.d.ts.map +1 -1
  40. package/dist/im/lark/card-handler.js +45 -19
  41. package/dist/im/lark/card-handler.js.map +1 -1
  42. package/dist/im/lark/client.d.ts +11 -13
  43. package/dist/im/lark/client.d.ts.map +1 -1
  44. package/dist/im/lark/client.js +23 -45
  45. package/dist/im/lark/client.js.map +1 -1
  46. package/dist/im/lark/event-dispatcher.d.ts +12 -10
  47. package/dist/im/lark/event-dispatcher.d.ts.map +1 -1
  48. package/dist/im/lark/event-dispatcher.js +54 -42
  49. package/dist/im/lark/event-dispatcher.js.map +1 -1
  50. package/dist/server.d.ts.map +1 -1
  51. package/dist/server.js +10 -1
  52. package/dist/server.js.map +1 -1
  53. package/dist/tools/get-thread-messages.d.ts.map +1 -1
  54. package/dist/tools/get-thread-messages.js +3 -1
  55. package/dist/tools/get-thread-messages.js.map +1 -1
  56. package/dist/tools/react-to-message.d.ts +3 -0
  57. package/dist/tools/react-to-message.d.ts.map +1 -1
  58. package/dist/tools/react-to-message.js +8 -3
  59. package/dist/tools/react-to-message.js.map +1 -1
  60. package/dist/tools/send-to-thread.d.ts.map +1 -1
  61. package/dist/tools/send-to-thread.js +2 -1
  62. package/dist/tools/send-to-thread.js.map +1 -1
  63. package/dist/types.d.ts +3 -0
  64. package/dist/types.d.ts.map +1 -1
  65. package/dist/types.js.map +1 -1
  66. package/dist/worker.js +10 -2
  67. package/dist/worker.js.map +1 -1
  68. package/package.json +1 -1
  69. package/dist/scheduler.d.ts +0 -38
  70. package/dist/scheduler.d.ts.map +0 -1
  71. package/dist/scheduler.js +0 -221
  72. package/dist/scheduler.js.map +0 -1
  73. package/dist/services/lark-client.d.ts +0 -22
  74. package/dist/services/lark-client.d.ts.map +0 -1
  75. package/dist/services/lark-client.js +0 -238
  76. package/dist/services/lark-client.js.map +0 -1
  77. package/dist/services/lark-ws.d.ts +0 -5
  78. package/dist/services/lark-ws.d.ts.map +0 -1
  79. package/dist/services/lark-ws.js +0 -79
  80. package/dist/services/lark-ws.js.map +0 -1
  81. package/dist/services/message-router.d.ts +0 -8
  82. package/dist/services/message-router.d.ts.map +0 -1
  83. package/dist/services/message-router.js +0 -73
  84. package/dist/services/message-router.js.map +0 -1
  85. package/dist/tools/close-session.d.ts +0 -22
  86. package/dist/tools/close-session.d.ts.map +0 -1
  87. package/dist/tools/close-session.js +0 -38
  88. package/dist/tools/close-session.js.map +0 -1
  89. package/dist/tools/create-session.d.ts +0 -28
  90. package/dist/tools/create-session.d.ts.map +0 -1
  91. package/dist/tools/create-session.js +0 -40
  92. package/dist/tools/create-session.js.map +0 -1
  93. package/dist/tools/wait-for-reply.d.ts +0 -17
  94. package/dist/tools/wait-for-reply.d.ts.map +0 -1
  95. package/dist/tools/wait-for-reply.js +0 -65
  96. package/dist/tools/wait-for-reply.js.map +0 -1
  97. package/dist/utils/card-builder.d.ts +0 -16
  98. package/dist/utils/card-builder.d.ts.map +0 -1
  99. package/dist/utils/card-builder.js +0 -183
  100. package/dist/utils/card-builder.js.map +0 -1
  101. package/dist/utils/message-parser.d.ts +0 -45
  102. package/dist/utils/message-parser.d.ts.map +0 -1
  103. package/dist/utils/message-parser.js +0 -132
  104. package/dist/utils/message-parser.js.map +0 -1
package/dist/daemon.js CHANGED
@@ -1,17 +1,20 @@
1
1
  import { execFileSync } from 'node:child_process';
2
2
  import { writeFileSync, existsSync, mkdirSync, unlinkSync } from 'node:fs';
3
3
  import { join } from 'node:path';
4
- import { config, validateConfig } from './config.js';
4
+ import { homedir } from 'node:os';
5
+ import { config } from './config.js';
5
6
  import { replyMessage, updateMessage, resolveAllowedUsers } from './im/lark/client.js';
7
+ import { loadBotConfigs, registerBot, getBot, getAllBots } from './bot-registry.js';
6
8
  import * as sessionStore from './services/session-store.js';
7
9
  import * as messageQueue from './services/message-queue.js';
8
10
  import { parseEventMessage } from './im/lark/message-parser.js';
9
11
  import { logger } from './utils/logger.js';
12
+ import { sessionKey } from './core/types.js';
10
13
  import * as scheduler from './core/scheduler.js';
11
14
  import { scanMultipleProjects } from './services/project-scanner.js';
12
15
  import { buildRepoSelectCard, buildStreamingCard } from './im/lark/card-builder.js';
13
16
  import { createCliAdapterSync } from './adapters/cli/registry.js';
14
- import { initWorkerPool, forkWorker, killWorker, setCurrentClaudeVersion, getCurrentClaudeVersion, } from './core/worker-pool.js';
17
+ import { initWorkerPool, forkWorker, killWorker, setCurrentClaudeVersion, } from './core/worker-pool.js';
15
18
  import { DAEMON_COMMANDS, handleCommand } from './core/command-handler.js';
16
19
  import { getSessionWorkingDir, getProjectScanDirs, downloadResources, formatAttachmentsHint, buildNewTopicPrompt, restoreActiveSessions, executeScheduledTask, } from './core/session-manager.js';
17
20
  import { handleCardAction } from './im/lark/card-handler.js';
@@ -20,16 +23,30 @@ import { probeBotOpenId, startLarkEventDispatcher } from './im/lark/event-dispat
20
23
  const activeSessions = new Map();
21
24
  // Cache last /repo scan results per chat for /repo <number> fallback
22
25
  const lastRepoScan = new Map();
23
- let lastVersionCheckAt = 0;
26
+ const cliVersionCache = new Map();
24
27
  const VERSION_CHECK_INTERVAL = 60_000; // cache 1 min
25
28
  /**
26
29
  * Reply to a message, automatically using reply_in_thread for p2p sessions.
27
30
  * In p2p chats, Lark needs reply_in_thread=true to create/continue a thread.
28
31
  */
29
- async function sessionReply(rootId, content, msgType = 'text') {
30
- const ds = activeSessions.get(rootId);
32
+ async function sessionReply(rootId, content, msgType = 'text', larkAppId) {
33
+ let ds;
34
+ if (larkAppId) {
35
+ ds = activeSessions.get(sessionKey(rootId, larkAppId));
36
+ }
37
+ else {
38
+ for (const s of activeSessions.values()) {
39
+ if (s.session.rootMessageId === rootId) {
40
+ ds = s;
41
+ break;
42
+ }
43
+ }
44
+ }
45
+ const appId = larkAppId ?? ds?.larkAppId ?? getAllBots()[0]?.config.larkAppId;
46
+ if (!appId)
47
+ throw new Error('No bot configured');
31
48
  const inThread = ds?.chatType === 'p2p';
32
- return replyMessage(rootId, content, msgType, inThread);
49
+ return replyMessage(appId, rootId, content, msgType, inThread);
33
50
  }
34
51
  // ─── PID file ────────────────────────────────────────────────────────────────
35
52
  function getPidFile() {
@@ -41,6 +58,13 @@ function writePidFile() {
41
58
  mkdirSync(dir, { recursive: true });
42
59
  }
43
60
  writeFileSync(getPidFile(), String(process.pid), 'utf-8');
61
+ // Write breadcrumb so CLI tools (botmux list/delete) can find the active data dir
62
+ const breadcrumb = join(homedir(), '.botmux', '.data-dir');
63
+ try {
64
+ mkdirSync(join(homedir(), '.botmux'), { recursive: true });
65
+ writeFileSync(breadcrumb, config.session.dataDir, 'utf-8');
66
+ }
67
+ catch { /* best effort */ }
44
68
  logger.info(`PID file written: ${getPidFile()} (pid: ${process.pid})`);
45
69
  }
46
70
  function removePidFile() {
@@ -51,13 +75,13 @@ function removePidFile() {
51
75
  }
52
76
  }
53
77
  // ─── Version tracking ────────────────────────────────────────────────────────
54
- function refreshClaudeVersion() {
78
+ function refreshClaudeVersion(cliId, cliPathOverride) {
55
79
  const now = Date.now();
56
- if (now - lastVersionCheckAt < VERSION_CHECK_INTERVAL)
80
+ const cached = cliVersionCache.get(cliId);
81
+ if (cached && now - cached.lastCheckAt < VERSION_CHECK_INTERVAL)
57
82
  return false;
58
- lastVersionCheckAt = now;
59
83
  try {
60
- const adapter = createCliAdapterSync(config.daemon.cliId, config.daemon.cliPathOverride);
84
+ const adapter = createCliAdapterSync(cliId, cliPathOverride);
61
85
  const raw = execFileSync(adapter.resolvedBin, ['--version'], {
62
86
  encoding: 'utf-8',
63
87
  timeout: 5_000,
@@ -65,18 +89,19 @@ function refreshClaudeVersion() {
65
89
  const newVersion = raw.replace(/^[^0-9]*/, '');
66
90
  if (newVersion === 'unknown' || !newVersion)
67
91
  return false;
68
- const curVer = getCurrentClaudeVersion();
69
- if (curVer !== 'unknown' && newVersion !== curVer) {
70
- setCurrentClaudeVersion(newVersion);
71
- logger.info(`CLI version updated: ${curVer} → ${newVersion} (${adapter.id})`);
92
+ const oldVersion = cached?.version;
93
+ cliVersionCache.set(cliId, { version: newVersion, lastCheckAt: now });
94
+ // Also update the shared version (used by forkWorker for ds.claudeVersion)
95
+ setCurrentClaudeVersion(newVersion);
96
+ if (oldVersion && oldVersion !== newVersion) {
97
+ logger.info(`CLI version updated: ${oldVersion} → ${newVersion} (${adapter.id})`);
72
98
  return true;
73
99
  }
74
- setCurrentClaudeVersion(newVersion);
75
- logger.info(`CLI version: ${getCurrentClaudeVersion()} (${adapter.id})`);
100
+ logger.info(`CLI version: ${newVersion} (${adapter.id})`);
76
101
  return false;
77
102
  }
78
103
  catch (err) {
79
- logger.warn(`Failed to get CLI version: ${err.message}`);
104
+ logger.warn(`Failed to get CLI version for ${cliId}: ${err.message}`);
80
105
  return false;
81
106
  }
82
107
  }
@@ -106,41 +131,47 @@ const cardDeps = {
106
131
  lastRepoScan,
107
132
  };
108
133
  // ─── Event handling ──────────────────────────────────────────────────────────
109
- async function handleNewTopic(data, chatId, messageId, chatType = 'group') {
134
+ async function handleNewTopic(data, chatId, messageId, chatType = 'group', larkAppId) {
110
135
  const { parsed, resources } = parseEventMessage(data);
111
136
  const content = parsed.content.trim();
112
137
  const senderOpenId = data.sender?.sender_id?.open_id;
138
+ const botCfg = getBot(larkAppId).config;
113
139
  logger.info(`New topic: ${messageId} "${content.substring(0, 60)}" (resources: ${resources.length}, active: ${getActiveCount()})`);
114
140
  // Intercept daemon commands in new topics (no session needed for some commands)
115
141
  if (content.startsWith('/')) {
116
142
  const cmd = content.split(/\s+/)[0].toLowerCase();
117
143
  if (DAEMON_COMMANDS.has(cmd)) {
118
144
  const session = sessionStore.createSession(chatId, messageId, content.substring(0, 50), chatType);
119
- activeSessions.set(messageId, {
145
+ session.larkAppId = larkAppId;
146
+ sessionStore.updateSession(session);
147
+ activeSessions.set(sessionKey(messageId, larkAppId), {
120
148
  session,
121
149
  worker: null,
122
150
  workerPort: null,
123
151
  workerToken: null,
152
+ larkAppId,
124
153
  chatId,
125
154
  chatType,
126
155
  spawnedAt: Date.now(),
127
- claudeVersion: getCurrentClaudeVersion(),
156
+ claudeVersion: cliVersionCache.get(botCfg.cliId)?.version ?? 'unknown',
128
157
  lastMessageAt: Date.now(),
129
158
  hasHistory: false,
130
159
  ownerOpenId: senderOpenId,
131
160
  });
132
- await handleCommand(cmd, messageId, parsed, commandDeps);
161
+ await handleCommand(cmd, messageId, parsed, commandDeps, larkAppId);
133
162
  return;
134
163
  }
135
164
  }
136
165
  // Download attachments
137
- const attachments = await downloadResources(messageId, resources);
166
+ const attachments = await downloadResources(larkAppId, messageId, resources);
138
167
  if (attachments.length > 0) {
139
168
  parsed.attachments = attachments;
140
169
  }
141
- refreshClaudeVersion();
170
+ refreshClaudeVersion(botCfg.cliId, botCfg.cliPathOverride);
142
171
  // Create session in pending-repo state — don't spawn Claude yet
143
172
  const session = sessionStore.createSession(chatId, messageId, parsed.content.substring(0, 50), chatType);
173
+ session.larkAppId = larkAppId;
174
+ sessionStore.updateSession(session);
144
175
  messageQueue.ensureQueue(messageId);
145
176
  messageQueue.appendMessage(messageId, parsed);
146
177
  const ds = {
@@ -148,10 +179,11 @@ async function handleNewTopic(data, chatId, messageId, chatType = 'group') {
148
179
  worker: null,
149
180
  workerPort: null,
150
181
  workerToken: null,
182
+ larkAppId,
151
183
  chatId,
152
184
  chatType,
153
185
  spawnedAt: Date.now(),
154
- claudeVersion: getCurrentClaudeVersion(),
186
+ claudeVersion: cliVersionCache.get(botCfg.cliId)?.version ?? 'unknown',
155
187
  lastMessageAt: Date.now(),
156
188
  hasHistory: false,
157
189
  pendingRepo: true,
@@ -160,7 +192,7 @@ async function handleNewTopic(data, chatId, messageId, chatType = 'group') {
160
192
  ownerOpenId: senderOpenId,
161
193
  currentTurnTitle: content.substring(0, 50),
162
194
  };
163
- activeSessions.set(messageId, ds);
195
+ activeSessions.set(sessionKey(messageId, larkAppId), ds);
164
196
  // Show repo selection card
165
197
  const scanDirs = getProjectScanDirs(ds).filter(d => existsSync(d));
166
198
  let projects = [];
@@ -171,41 +203,56 @@ async function handleNewTopic(data, chatId, messageId, chatType = 'group') {
171
203
  lastRepoScan.set(chatId, projects);
172
204
  const currentCwd = getSessionWorkingDir(ds);
173
205
  const cardJson = buildRepoSelectCard(projects, currentCwd, messageId);
174
- await sessionReply(messageId, cardJson, 'interactive');
206
+ await sessionReply(messageId, cardJson, 'interactive', larkAppId);
175
207
  logger.info(`[${tag(ds)}] Waiting for repo selection (${projects.length} projects)`);
176
208
  }
177
209
  else {
178
210
  // No projects found — skip repo selection, spawn directly
179
211
  ds.pendingRepo = false;
180
- const prompt = buildNewTopicPrompt(content, session.sessionId, attachments);
212
+ const prompt = buildNewTopicPrompt(content, session.sessionId, botCfg.cliId, botCfg.cliPathOverride, attachments);
181
213
  forkWorker(ds, prompt);
182
214
  logger.info(`Session ${session.sessionId} ready (no projects to select), total active: ${getActiveCount()}`);
183
215
  }
184
216
  }
185
- async function handleThreadReply(data, rootId) {
217
+ async function handleThreadReply(data, rootId, larkAppId) {
186
218
  const { parsed, resources } = parseEventMessage(data);
187
219
  const content = parsed.content.trim();
188
220
  // Intercept daemon commands
189
221
  if (content.startsWith('/')) {
190
222
  const cmd = content.split(/\s+/)[0].toLowerCase();
191
223
  if (DAEMON_COMMANDS.has(cmd)) {
192
- handleCommand(cmd, rootId, parsed, commandDeps);
224
+ handleCommand(cmd, rootId, parsed, commandDeps, larkAppId);
193
225
  return;
194
226
  }
195
227
  }
196
228
  logger.info(`Thread reply in ${rootId}: ${content.substring(0, 100)} (resources: ${resources.length})`);
229
+ let ds = activeSessions.get(sessionKey(rootId, larkAppId));
230
+ // If a different bot is @mentioned in this thread, take over the session.
231
+ // The event dispatcher only routes here if the bot was @mentioned or owns the session,
232
+ // so reaching this point without an existing session means an explicit @mention takeover.
233
+ if (!ds) {
234
+ for (const [key, otherDs] of activeSessions) {
235
+ if (otherDs.session.rootMessageId === rootId && otherDs.larkAppId !== larkAppId) {
236
+ logger.info(`[${larkAppId}] Taking over thread ${rootId} from ${otherDs.larkAppId}`);
237
+ killWorker(otherDs);
238
+ sessionStore.closeSession(otherDs.session.sessionId);
239
+ activeSessions.delete(key);
240
+ break;
241
+ }
242
+ }
243
+ }
197
244
  // Download attachments
198
- const attachments = await downloadResources(parsed.messageId, resources);
245
+ const effectiveAppId = ds?.larkAppId ?? larkAppId;
246
+ const attachments = await downloadResources(effectiveAppId, parsed.messageId, resources);
199
247
  if (attachments.length > 0) {
200
248
  parsed.attachments = attachments;
201
249
  }
202
250
  // Update last message time
203
- const ds = activeSessions.get(rootId);
204
251
  if (ds)
205
252
  ds.lastMessageAt = Date.now();
206
253
  // If waiting for repo selection, remind user
207
254
  if (ds?.pendingRepo) {
208
- await sessionReply(rootId, '请先在上方卡片中选择仓库,再发送消息。');
255
+ await sessionReply(rootId, '请先在上方卡片中选择仓库,再发送消息。', 'text', larkAppId);
209
256
  return;
210
257
  }
211
258
  // Route to file queue
@@ -213,20 +260,28 @@ async function handleThreadReply(data, rootId) {
213
260
  messageQueue.appendMessage(rootId, parsed);
214
261
  if (!ds) {
215
262
  // No active session for this thread — auto-create with repo selection
263
+ if (activeSessions.has(sessionKey(rootId, larkAppId))) {
264
+ logger.info(`[${larkAppId}] Session already exists for thread ${rootId}, skipping auto-create`);
265
+ return;
266
+ }
216
267
  const chatId = data?.message?.chat_id ?? '';
217
268
  const chatType = (data?.message?.chat_type === 'p2p' ? 'p2p' : 'group');
269
+ const botCfg = getBot(larkAppId).config;
218
270
  logger.info(`No active session for thread ${rootId}, auto-creating new session...`);
219
- refreshClaudeVersion();
271
+ refreshClaudeVersion(botCfg.cliId, botCfg.cliPathOverride);
220
272
  const session = sessionStore.createSession(chatId, rootId, parsed.content.substring(0, 50), chatType);
273
+ session.larkAppId = larkAppId;
274
+ sessionStore.updateSession(session);
221
275
  const newDs = {
222
276
  session,
223
277
  worker: null,
224
278
  workerPort: null,
225
279
  workerToken: null,
280
+ larkAppId,
226
281
  chatId,
227
282
  chatType,
228
283
  spawnedAt: Date.now(),
229
- claudeVersion: getCurrentClaudeVersion(),
284
+ claudeVersion: cliVersionCache.get(botCfg.cliId)?.version ?? 'unknown',
230
285
  lastMessageAt: Date.now(),
231
286
  hasHistory: false,
232
287
  pendingRepo: true,
@@ -235,7 +290,7 @@ async function handleThreadReply(data, rootId) {
235
290
  ownerOpenId: data.sender?.sender_id?.open_id,
236
291
  currentTurnTitle: parsed.content.substring(0, 50),
237
292
  };
238
- activeSessions.set(rootId, newDs);
293
+ activeSessions.set(sessionKey(rootId, larkAppId), newDs);
239
294
  // Show repo selection card (same as handleNewTopic)
240
295
  const scanDirs2 = getProjectScanDirs(newDs).filter(d => existsSync(d));
241
296
  let projects = [];
@@ -246,13 +301,13 @@ async function handleThreadReply(data, rootId) {
246
301
  lastRepoScan.set(chatId, projects);
247
302
  const currentCwd = getSessionWorkingDir(newDs);
248
303
  const cardJson = buildRepoSelectCard(projects, currentCwd, rootId);
249
- await sessionReply(rootId, cardJson, 'interactive');
304
+ await sessionReply(rootId, cardJson, 'interactive', larkAppId);
250
305
  logger.info(`[${tag(newDs)}] Waiting for repo selection (${projects.length} projects)`);
251
306
  }
252
307
  else {
253
308
  // No projects found — skip repo selection, spawn directly
254
309
  newDs.pendingRepo = false;
255
- const prompt = buildNewTopicPrompt(parsed.content, session.sessionId, attachments);
310
+ const prompt = buildNewTopicPrompt(parsed.content, session.sessionId, botCfg.cliId, botCfg.cliPathOverride, attachments);
256
311
  forkWorker(newDs, prompt);
257
312
  }
258
313
  return;
@@ -266,8 +321,9 @@ async function handleThreadReply(data, rootId) {
266
321
  if (ds.streamCardId && ds.workerPort) {
267
322
  const readUrl = `http://${config.web.externalHost}:${ds.workerPort}`;
268
323
  const prevTitle = ds.currentTurnTitle || ds.session.title || 'Claude Code';
269
- const frozenCard = buildStreamingCard(ds.session.sessionId, ds.session.rootMessageId, readUrl, prevTitle, ds.lastScreenContent ?? '', 'idle', config.daemon.cliId, ds.streamExpanded);
270
- updateMessage(ds.streamCardId, frozenCard).catch(() => { });
324
+ const dsBotCfg = getBot(ds.larkAppId).config;
325
+ const frozenCard = buildStreamingCard(ds.session.sessionId, ds.session.rootMessageId, readUrl, prevTitle, ds.lastScreenContent ?? '', 'idle', dsBotCfg.cliId, ds.streamExpanded);
326
+ updateMessage(ds.larkAppId, ds.streamCardId, frozenCard).catch(() => { });
271
327
  }
272
328
  // Mark new turn — next screen_update will create a fresh streaming card
273
329
  ds.streamCardPending = true;
@@ -283,7 +339,11 @@ async function handleThreadReply(data, rootId) {
283
339
  }
284
340
  // ─── Main ────────────────────────────────────────────────────────────────────
285
341
  export async function startDaemon() {
286
- validateConfig();
342
+ // Load and register all bots
343
+ const botConfigs = loadBotConfigs();
344
+ for (const cfg of botConfigs) {
345
+ registerBot(cfg);
346
+ }
287
347
  writePidFile();
288
348
  // Initialise worker pool with daemon callbacks
289
349
  initWorkerPool({
@@ -291,43 +351,50 @@ export async function startDaemon() {
291
351
  getSessionWorkingDir,
292
352
  getActiveCount,
293
353
  });
294
- // Get initial CLI version
295
- refreshClaudeVersion();
296
- if (getCurrentClaudeVersion() === 'unknown') {
297
- logger.warn('Could not detect CLI version at startup');
298
- }
299
- // Validate and resolve ALLOWED_USERS
300
- if (config.daemon.allowedUsers.length > 0) {
301
- const invalid = config.daemon.allowedUsers.filter(u => !u.startsWith('ou_') && !u.includes('@'));
302
- if (invalid.length > 0) {
303
- logger.warn(`ALLOWED_USERS contains invalid entries (expected email or ou_ open_id): ${invalid.join(', ')}`);
304
- }
305
- const hasEmails = config.daemon.allowedUsers.some(u => u.includes('@'));
306
- if (hasEmails) {
307
- try {
308
- config.daemon.allowedUsers = await resolveAllowedUsers(config.daemon.allowedUsers);
309
- logger.info(`Resolved allowedUsers: ${config.daemon.allowedUsers.join(', ')}`);
310
- }
311
- catch (err) {
312
- logger.warn(`Failed to resolve allowedUsers: ${err.message}`);
354
+ // Per-bot initialization
355
+ for (const bot of getAllBots()) {
356
+ const cfg = bot.config;
357
+ // Refresh CLI version per bot's cliId
358
+ refreshClaudeVersion(cfg.cliId, cfg.cliPathOverride);
359
+ // Resolve allowed users per bot
360
+ if (bot.resolvedAllowedUsers.length > 0) {
361
+ const hasEmails = bot.resolvedAllowedUsers.some(u => u.includes('@'));
362
+ if (hasEmails) {
363
+ try {
364
+ bot.resolvedAllowedUsers = await resolveAllowedUsers(cfg.larkAppId, bot.resolvedAllowedUsers);
365
+ logger.info(`[${cfg.larkAppId}] Resolved allowedUsers: ${bot.resolvedAllowedUsers.join(', ')}`);
366
+ }
367
+ catch (err) {
368
+ logger.warn(`[${cfg.larkAppId}] Failed to resolve allowedUsers: ${err.message}`);
369
+ }
313
370
  }
314
371
  }
372
+ // Probe bot open_id
373
+ probeBotOpenId(cfg.larkAppId).catch(err => {
374
+ logger.warn(`[${cfg.larkAppId}] Bot open_id probe failed: ${err.message}`);
375
+ });
376
+ // Start event dispatcher for this bot
377
+ startLarkEventDispatcher(cfg.larkAppId, cfg.larkAppSecret, {
378
+ handleCardAction: (data, appId) => handleCardAction(data, cardDeps, appId),
379
+ handleNewTopic: (data, chatId, messageId, chatType, appId) => handleNewTopic(data, chatId, messageId, chatType, appId),
380
+ handleThreadReply: (data, rootId, appId) => handleThreadReply(data, rootId, appId),
381
+ isSessionOwner: (rootId, appId) => {
382
+ if (!activeSessions.has(sessionKey(rootId, appId)))
383
+ return false;
384
+ // Only grant shortcut if no other bot also has a session for this rootId
385
+ for (const s of activeSessions.values()) {
386
+ if (s.session.rootMessageId === rootId && s.larkAppId !== appId)
387
+ return false;
388
+ }
389
+ return true;
390
+ },
391
+ });
315
392
  }
316
- // Probe bot open_id at startup (non-blocking)
317
- probeBotOpenId().catch(err => {
318
- logger.warn(`Bot open_id probe failed (will learn from events): ${err.message}`);
319
- });
320
393
  // Restore active sessions from previous run
321
394
  restoreActiveSessions(activeSessions);
322
395
  // Start scheduled task scheduler
323
396
  scheduler.setExecuteCallback((task) => executeScheduledTask(task, activeSessions, refreshClaudeVersion));
324
397
  scheduler.startScheduler();
325
- // Start Lark event dispatcher
326
- startLarkEventDispatcher({
327
- handleCardAction: (data) => handleCardAction(data, cardDeps),
328
- handleNewTopic,
329
- handleThreadReply,
330
- });
331
398
  // Graceful shutdown
332
399
  const shutdown = () => {
333
400
  logger.info(`Daemon shutting down... (active: ${getActiveCount()})`);
@@ -335,7 +402,10 @@ export async function startDaemon() {
335
402
  for (const [, ds] of activeSessions) {
336
403
  if (ds.worker && !ds.worker.killed) {
337
404
  logger.info(`Shutting down worker for session ${ds.session.sessionId}`);
338
- if (config.daemon.backendType === 'tmux') {
405
+ const backendType = ds.larkAppId
406
+ ? (getBot(ds.larkAppId).config.backendType ?? config.daemon.backendType)
407
+ : config.daemon.backendType;
408
+ if (backendType === 'tmux') {
339
409
  // Tmux mode: just kill the worker process — tmux session survives for re-attach.
340
410
  // Worker's SIGTERM handler calls backend.kill() which only detaches.
341
411
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"daemon.js","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"daemon.js","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":"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"}
@@ -2,8 +2,8 @@ import type { DaemonSession } from '../../core/types.js';
2
2
  import type { ProjectInfo } from '../../services/project-scanner.js';
3
3
  export interface CardHandlerDeps {
4
4
  activeSessions: Map<string, DaemonSession>;
5
- sessionReply: (rootId: string, content: string, msgType?: string) => Promise<string>;
5
+ sessionReply: (rootId: string, content: string, msgType?: string, larkAppId?: string) => Promise<string>;
6
6
  lastRepoScan: Map<string, ProjectInfo[]>;
7
7
  }
8
- export declare function handleCardAction(data: any, deps: CardHandlerDeps): Promise<void>;
8
+ export declare function handleCardAction(data: any, deps: CardHandlerDeps, larkAppId?: string): Promise<void>;
9
9
  //# sourceMappingURL=card-handler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"card-handler.d.ts","sourceRoot":"","sources":["../../../src/im/lark/card-handler.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAC;AAIrE,MAAM,WAAW,eAAe;IAC9B,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC3C,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACrF,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;CAC1C;AAUD,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAiKtF"}
1
+ {"version":3,"file":"card-handler.d.ts","sourceRoot":"","sources":["../../../src/im/lark/card-handler.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAC;AAIrE,MAAM,WAAW,eAAe;IAC9B,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC3C,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACzG,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;CAC1C;AAUD,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,eAAe,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA6L1G"}