botmux 1.4.2 → 1.4.4

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 (86) hide show
  1. package/.env.example +5 -0
  2. package/dist/bot-registry.d.ts +31 -0
  3. package/dist/bot-registry.d.ts.map +1 -0
  4. package/dist/bot-registry.js +125 -0
  5. package/dist/bot-registry.js.map +1 -0
  6. package/dist/cli.js +0 -0
  7. package/dist/core/command-handler.d.ts.map +1 -1
  8. package/dist/core/command-handler.js +6 -4
  9. package/dist/core/command-handler.js.map +1 -1
  10. package/dist/core/session-manager.d.ts +4 -3
  11. package/dist/core/session-manager.d.ts.map +1 -1
  12. package/dist/core/session-manager.js +42 -10
  13. package/dist/core/session-manager.js.map +1 -1
  14. package/dist/core/types.d.ts +1 -0
  15. package/dist/core/types.d.ts.map +1 -1
  16. package/dist/core/worker-pool.d.ts +3 -2
  17. package/dist/core/worker-pool.d.ts.map +1 -1
  18. package/dist/core/worker-pool.js +39 -26
  19. package/dist/core/worker-pool.js.map +1 -1
  20. package/dist/daemon.d.ts.map +1 -1
  21. package/dist/daemon.js +83 -61
  22. package/dist/daemon.js.map +1 -1
  23. package/dist/im/lark/card-handler.d.ts.map +1 -1
  24. package/dist/im/lark/card-handler.js +30 -13
  25. package/dist/im/lark/card-handler.js.map +1 -1
  26. package/dist/im/lark/client.d.ts +11 -13
  27. package/dist/im/lark/client.d.ts.map +1 -1
  28. package/dist/im/lark/client.js +23 -45
  29. package/dist/im/lark/client.js.map +1 -1
  30. package/dist/im/lark/event-dispatcher.d.ts +10 -10
  31. package/dist/im/lark/event-dispatcher.d.ts.map +1 -1
  32. package/dist/im/lark/event-dispatcher.js +36 -33
  33. package/dist/im/lark/event-dispatcher.js.map +1 -1
  34. package/dist/server.d.ts.map +1 -1
  35. package/dist/server.js +10 -1
  36. package/dist/server.js.map +1 -1
  37. package/dist/tools/get-thread-messages.d.ts.map +1 -1
  38. package/dist/tools/get-thread-messages.js +2 -1
  39. package/dist/tools/get-thread-messages.js.map +1 -1
  40. package/dist/tools/react-to-message.d.ts.map +1 -1
  41. package/dist/tools/react-to-message.js +3 -2
  42. package/dist/tools/react-to-message.js.map +1 -1
  43. package/dist/tools/send-to-thread.js +1 -1
  44. package/dist/tools/send-to-thread.js.map +1 -1
  45. package/dist/types.d.ts +3 -0
  46. package/dist/types.d.ts.map +1 -1
  47. package/dist/types.js.map +1 -1
  48. package/dist/worker.js +8 -2
  49. package/dist/worker.js.map +1 -1
  50. package/package.json +1 -1
  51. package/dist/scheduler.d.ts +0 -38
  52. package/dist/scheduler.d.ts.map +0 -1
  53. package/dist/scheduler.js +0 -221
  54. package/dist/scheduler.js.map +0 -1
  55. package/dist/services/lark-client.d.ts +0 -22
  56. package/dist/services/lark-client.d.ts.map +0 -1
  57. package/dist/services/lark-client.js +0 -238
  58. package/dist/services/lark-client.js.map +0 -1
  59. package/dist/services/lark-ws.d.ts +0 -5
  60. package/dist/services/lark-ws.d.ts.map +0 -1
  61. package/dist/services/lark-ws.js +0 -79
  62. package/dist/services/lark-ws.js.map +0 -1
  63. package/dist/services/message-router.d.ts +0 -8
  64. package/dist/services/message-router.d.ts.map +0 -1
  65. package/dist/services/message-router.js +0 -73
  66. package/dist/services/message-router.js.map +0 -1
  67. package/dist/tools/close-session.d.ts +0 -22
  68. package/dist/tools/close-session.d.ts.map +0 -1
  69. package/dist/tools/close-session.js +0 -38
  70. package/dist/tools/close-session.js.map +0 -1
  71. package/dist/tools/create-session.d.ts +0 -28
  72. package/dist/tools/create-session.d.ts.map +0 -1
  73. package/dist/tools/create-session.js +0 -40
  74. package/dist/tools/create-session.js.map +0 -1
  75. package/dist/tools/wait-for-reply.d.ts +0 -17
  76. package/dist/tools/wait-for-reply.d.ts.map +0 -1
  77. package/dist/tools/wait-for-reply.js +0 -65
  78. package/dist/tools/wait-for-reply.js.map +0 -1
  79. package/dist/utils/card-builder.d.ts +0 -16
  80. package/dist/utils/card-builder.d.ts.map +0 -1
  81. package/dist/utils/card-builder.js +0 -183
  82. package/dist/utils/card-builder.js.map +0 -1
  83. package/dist/utils/message-parser.d.ts +0 -45
  84. package/dist/utils/message-parser.d.ts.map +0 -1
  85. package/dist/utils/message-parser.js +0 -132
  86. package/dist/utils/message-parser.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"lark-client.d.ts","sourceRoot":"","sources":["../../src/services/lark-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,yBAAyB,CAAC;AAQhD,wBAAgB,aAAa,IAAI,IAAI,CAAC,MAAM,CAQ3C;AAED,wBAAsB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,MAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAqB5G;AAED,wBAAsB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,MAAe,EAAE,aAAa,GAAE,OAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAqBhJ;AAED,wBAAsB,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAYvF;AAED,wBAAsB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CASzF;AAED,wBAAsB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,MAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAqBhH;AAED,wBAAsB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAUhF;AAED,wBAAsB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAStF;AAED,wBAAsB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAStE;AAED,wBAAsB,uBAAuB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA2BzI;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAoC1E;AAED,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAuCrH"}
@@ -1,238 +0,0 @@
1
- import * as Lark from '@larksuiteoapi/node-sdk';
2
- import { writeFileSync, mkdirSync, existsSync } from 'node:fs';
3
- import { dirname } from 'node:path';
4
- import { config } from '../config.js';
5
- import { logger } from '../utils/logger.js';
6
- let client;
7
- export function getLarkClient() {
8
- if (!client) {
9
- client = new Lark.Client({
10
- appId: config.lark.appId,
11
- appSecret: config.lark.appSecret,
12
- });
13
- }
14
- return client;
15
- }
16
- export async function sendMessage(chatId, content, msgType = 'text') {
17
- const c = getLarkClient();
18
- const body = msgType === 'text' ? JSON.stringify({ text: content }) : content;
19
- const res = await c.im.v1.message.create({
20
- params: { receive_id_type: 'chat_id' },
21
- data: {
22
- receive_id: chatId,
23
- msg_type: msgType,
24
- content: body,
25
- },
26
- });
27
- if (res.code !== 0) {
28
- throw new Error(`Failed to send message: ${res.msg} (code: ${res.code})`);
29
- }
30
- const messageId = res.data?.message_id;
31
- if (!messageId)
32
- throw new Error('No message_id in response');
33
- logger.info(`Sent message ${messageId} to chat ${chatId}`);
34
- return messageId;
35
- }
36
- export async function replyMessage(messageId, content, msgType = 'text', replyInThread = false) {
37
- const c = getLarkClient();
38
- const body = msgType === 'text' ? JSON.stringify({ text: content }) : content;
39
- const res = await c.im.v1.message.reply({
40
- path: { message_id: messageId },
41
- data: {
42
- msg_type: msgType,
43
- content: body,
44
- ...(replyInThread ? { reply_in_thread: true } : {}),
45
- },
46
- });
47
- if (res.code !== 0) {
48
- throw new Error(`Failed to reply message: ${res.msg} (code: ${res.code})`);
49
- }
50
- const replyId = res.data?.message_id;
51
- if (!replyId)
52
- throw new Error('No message_id in reply response');
53
- logger.info(`Replied ${replyId} to message ${messageId}${replyInThread ? ' (in thread)' : ''}`);
54
- return replyId;
55
- }
56
- export async function addReaction(messageId, emojiType) {
57
- const c = getLarkClient();
58
- const res = await c.im.v1.messageReaction.create({
59
- path: { message_id: messageId },
60
- data: { reaction_type: { emoji_type: emojiType } },
61
- });
62
- if (res.code !== 0) {
63
- throw new Error(`Failed to add reaction: ${res.msg} (code: ${res.code})`);
64
- }
65
- const reactionId = res.data?.reaction_id;
66
- logger.info(`Added reaction ${emojiType} (${reactionId}) to message ${messageId}`);
67
- return reactionId ?? '';
68
- }
69
- export async function removeReaction(messageId, reactionId) {
70
- const c = getLarkClient();
71
- const res = await c.im.v1.messageReaction.delete({
72
- path: { message_id: messageId, reaction_id: reactionId },
73
- });
74
- if (res.code !== 0) {
75
- throw new Error(`Failed to remove reaction: ${res.msg} (code: ${res.code})`);
76
- }
77
- logger.info(`Removed reaction ${reactionId} from message ${messageId}`);
78
- }
79
- export async function sendUserMessage(openId, content, msgType = 'text') {
80
- const c = getLarkClient();
81
- const body = msgType === 'text' ? JSON.stringify({ text: content }) : content;
82
- const res = await c.im.v1.message.create({
83
- params: { receive_id_type: 'open_id' },
84
- data: {
85
- receive_id: openId,
86
- msg_type: msgType,
87
- content: body,
88
- },
89
- });
90
- if (res.code !== 0) {
91
- throw new Error(`Failed to send user message: ${res.msg} (code: ${res.code})`);
92
- }
93
- const messageId = res.data?.message_id;
94
- if (!messageId)
95
- throw new Error('No message_id in response');
96
- logger.info(`Sent DM ${messageId} to user ${openId}`);
97
- return messageId;
98
- }
99
- export async function getChatInfo(chatId) {
100
- const c = getLarkClient();
101
- const res = await c.im.v1.chat.get({
102
- path: { chat_id: chatId },
103
- });
104
- if (res.code !== 0) {
105
- throw new Error(`Failed to get chat info: ${res.msg} (code: ${res.code})`);
106
- }
107
- // user_count excludes bots, only real users
108
- return { userCount: Number(res.data?.user_count ?? 0) };
109
- }
110
- export async function updateMessage(messageId, cardJson) {
111
- const c = getLarkClient();
112
- const res = await c.im.v1.message.patch({
113
- path: { message_id: messageId },
114
- data: { content: cardJson },
115
- });
116
- if (res.code !== 0) {
117
- throw new Error(`Failed to update message: ${res.msg} (code: ${res.code})`);
118
- }
119
- }
120
- export async function getMessageDetail(messageId) {
121
- const c = getLarkClient();
122
- const res = await c.im.v1.message.get({
123
- path: { message_id: messageId },
124
- });
125
- if (res.code !== 0) {
126
- throw new Error(`Failed to get message: ${res.msg} (code: ${res.code})`);
127
- }
128
- return res.data;
129
- }
130
- export async function downloadMessageResource(messageId, fileKey, type, savePath) {
131
- const c = getLarkClient();
132
- const dir = dirname(savePath);
133
- if (!existsSync(dir)) {
134
- mkdirSync(dir, { recursive: true });
135
- }
136
- const res = await c.im.v1.messageResource.get({
137
- path: { message_id: messageId, file_key: fileKey },
138
- params: { type },
139
- });
140
- if (res instanceof Buffer) {
141
- writeFileSync(savePath, res);
142
- }
143
- else if (res && typeof res === 'object' && 'writeFile' in res) {
144
- await res.writeFile(savePath);
145
- }
146
- else {
147
- // Response is likely a readable stream or buffer-like
148
- const chunks = [];
149
- for await (const chunk of res) {
150
- chunks.push(Buffer.from(chunk));
151
- }
152
- writeFileSync(savePath, Buffer.concat(chunks));
153
- }
154
- logger.info(`Downloaded ${type} ${fileKey} → ${savePath}`);
155
- }
156
- /**
157
- * Resolve email prefixes (e.g. "shenhan.sh") to Lark open_ids via batch user lookup.
158
- * Accepts mixed input: items starting with "ou_" are kept as-is; everything else
159
- * is treated as an email prefix and looked up as `${prefix}@bytedance.com`.
160
- * Returns an array of open_ids (unresolvable entries are dropped with a warning).
161
- */
162
- export async function resolveAllowedUsers(raw) {
163
- const openIds = [];
164
- const emailPrefixes = [];
165
- for (const v of raw) {
166
- if (v.startsWith('ou_')) {
167
- openIds.push(v);
168
- }
169
- else {
170
- emailPrefixes.push(v);
171
- }
172
- }
173
- if (emailPrefixes.length === 0)
174
- return openIds;
175
- const emails = emailPrefixes.map(p => p.includes('@') ? p : `${p}@bytedance.com`);
176
- const c = getLarkClient();
177
- try {
178
- const res = await c.contact.v3.user.batchGetId({
179
- params: { user_id_type: 'open_id' },
180
- data: { emails, include_resigned: false },
181
- });
182
- if (res.code !== 0) {
183
- logger.warn(`Failed to resolve emails to open_ids: ${res.msg} (code: ${res.code})`);
184
- return openIds;
185
- }
186
- const userList = res.data?.user_list ?? [];
187
- for (const item of userList) {
188
- if (item.user_id) {
189
- openIds.push(item.user_id);
190
- logger.info(`Resolved ${item.email} → ${item.user_id}`);
191
- }
192
- else {
193
- logger.warn(`Could not resolve email: ${item.email}`);
194
- }
195
- }
196
- }
197
- catch (err) {
198
- logger.warn(`resolveAllowedUsers failed: ${err.message}`);
199
- }
200
- return openIds;
201
- }
202
- export async function listThreadMessages(chatId, rootMessageId, pageSize = 50) {
203
- const c = getLarkClient();
204
- const allMessages = [];
205
- let pageToken;
206
- // Lark API only supports container_id_type="chat", so we list chat messages
207
- // and filter by root_id to get thread messages
208
- do {
209
- const res = await c.im.v1.message.list({
210
- params: {
211
- container_id_type: 'chat',
212
- container_id: chatId,
213
- page_size: pageSize,
214
- sort_type: 'ByCreateTimeDesc',
215
- ...(pageToken ? { page_token: pageToken } : {}),
216
- },
217
- });
218
- if (res.code !== 0) {
219
- throw new Error(`Failed to list messages: ${res.msg} (code: ${res.code})`);
220
- }
221
- if (res.data?.items) {
222
- for (const item of res.data.items) {
223
- // Include the root message itself and all its thread replies
224
- if (item.message_id === rootMessageId || item.root_id === rootMessageId) {
225
- allMessages.push(item);
226
- }
227
- }
228
- }
229
- pageToken = res.data?.page_token;
230
- // Stop early if we've collected enough or gone past the root message timestamp
231
- if (allMessages.length >= pageSize)
232
- break;
233
- } while (pageToken);
234
- // Sort by create_time ascending
235
- allMessages.sort((a, b) => (a.create_time ?? '').localeCompare(b.create_time ?? ''));
236
- return allMessages;
237
- }
238
- //# sourceMappingURL=lark-client.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"lark-client.js","sourceRoot":"","sources":["../../src/services/lark-client.ts"],"names":[],"mappings":"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"}
@@ -1,5 +0,0 @@
1
- export declare function getBotOpenId(): string | null;
2
- export declare function fetchBotOpenId(): Promise<void>;
3
- export declare function start(): void;
4
- export declare function stop(): void;
5
- //# sourceMappingURL=lark-ws.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"lark-ws.d.ts","sourceRoot":"","sources":["../../src/services/lark-ws.ts"],"names":[],"mappings":"AASA,wBAAgB,YAAY,IAAI,MAAM,GAAG,IAAI,CAE5C;AAED,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAiBpD;AAED,wBAAgB,KAAK,IAAI,IAAI,CAgD5B;AAED,wBAAgB,IAAI,IAAI,IAAI,CAI3B"}
@@ -1,79 +0,0 @@
1
- import * as Lark from '@larksuiteoapi/node-sdk';
2
- import { config } from '../config.js';
3
- import { logger } from '../utils/logger.js';
4
- import { parseEventMessage } from '../utils/message-parser.js';
5
- import * as messageRouter from './message-router.js';
6
- let wsClient = null;
7
- let botOpenId = null;
8
- export function getBotOpenId() {
9
- return botOpenId;
10
- }
11
- export async function fetchBotOpenId() {
12
- try {
13
- const { getLarkClient } = await import('./lark-client.js');
14
- const client = getLarkClient();
15
- const res = await client.contact.v3.user.get({
16
- params: { user_id_type: 'open_id' },
17
- path: { user_id: 'me' },
18
- });
19
- if (res.code === 0 && res.data?.user?.open_id) {
20
- botOpenId = res.data.user.open_id;
21
- logger.info(`Bot open_id: ${botOpenId}`);
22
- }
23
- else {
24
- logger.debug('Bot open_id not available (non-critical, using sender_type filter)');
25
- }
26
- }
27
- catch (e) {
28
- logger.debug(`Bot open_id fetch skipped (non-critical): ${e}`);
29
- }
30
- }
31
- export function start() {
32
- if (wsClient) {
33
- logger.warn('WSClient already started');
34
- return;
35
- }
36
- const eventDispatcher = new Lark.EventDispatcher({}).register({
37
- 'im.message.receive_v1': async (data) => {
38
- try {
39
- logger.debug(`Raw event data keys: ${Object.keys(data).join(', ')}`);
40
- const message = data.message;
41
- const sender = data.sender; // sender is at data top-level, NOT inside message
42
- if (!message) {
43
- logger.warn('Received event without message');
44
- return;
45
- }
46
- // Only process thread replies (messages with root_id)
47
- const rootId = message.root_id;
48
- if (!rootId) {
49
- logger.debug('Ignoring non-thread message');
50
- return;
51
- }
52
- // Skip bot's own messages (sender is at data level)
53
- if (sender?.sender_type === 'app') {
54
- logger.debug('Ignoring bot message');
55
- return;
56
- }
57
- const { parsed } = parseEventMessage(data);
58
- logger.info(`WS received message in thread ${rootId}: ${parsed.content.substring(0, 100)}`);
59
- messageRouter.dispatch(rootId, parsed);
60
- }
61
- catch (err) {
62
- logger.error(`Error handling message event: ${err}`);
63
- }
64
- },
65
- });
66
- wsClient = new Lark.WSClient({
67
- appId: config.lark.appId,
68
- appSecret: config.lark.appSecret,
69
- loggerLevel: Lark.LoggerLevel.info,
70
- });
71
- wsClient.start({ eventDispatcher });
72
- logger.info('WSClient started, listening for messages...');
73
- }
74
- export function stop() {
75
- // WSClient doesn't expose a stop method directly, but we null it out
76
- wsClient = null;
77
- logger.info('WSClient stopped');
78
- }
79
- //# sourceMappingURL=lark-ws.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"lark-ws.js","sourceRoot":"","sources":["../../src/services/lark-ws.ts"],"names":[],"mappings":"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"}
@@ -1,8 +0,0 @@
1
- import type { LarkMessage } from '../types.js';
2
- export declare function register(rootMessageId: string): void;
3
- export declare function unregister(rootMessageId: string): void;
4
- export declare function dispatch(rootMessageId: string, message: LarkMessage): void;
5
- export declare function getPendingMessages(rootMessageId: string): LarkMessage[];
6
- export declare function waitForNext(rootMessageId: string, timeoutMs: number): Promise<LarkMessage[]>;
7
- export declare function isRegistered(rootMessageId: string): boolean;
8
- //# sourceMappingURL=message-router.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"message-router.d.ts","sourceRoot":"","sources":["../../src/services/message-router.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAe/C,wBAAgB,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAKpD;AAED,wBAAgB,UAAU,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAWtD;AAED,wBAAgB,QAAQ,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI,CAmB1E;AAED,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,MAAM,GAAG,WAAW,EAAE,CAOvE;AAED,wBAAgB,WAAW,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAwB5F;AAED,wBAAgB,YAAY,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAE3D"}
@@ -1,73 +0,0 @@
1
- import { logger } from '../utils/logger.js';
2
- const threads = new Map();
3
- export function register(rootMessageId) {
4
- if (!threads.has(rootMessageId)) {
5
- threads.set(rootMessageId, { queue: [], waiters: [] });
6
- logger.info(`MessageRouter: registered thread ${rootMessageId}`);
7
- }
8
- }
9
- export function unregister(rootMessageId) {
10
- const state = threads.get(rootMessageId);
11
- if (state) {
12
- // Resolve all pending waiters with empty result
13
- for (const waiter of state.waiters) {
14
- clearTimeout(waiter.timer);
15
- waiter.resolve([]);
16
- }
17
- threads.delete(rootMessageId);
18
- logger.info(`MessageRouter: unregistered thread ${rootMessageId}`);
19
- }
20
- }
21
- export function dispatch(rootMessageId, message) {
22
- const state = threads.get(rootMessageId);
23
- if (!state) {
24
- logger.debug(`MessageRouter: no listener for thread ${rootMessageId}, ignoring`);
25
- return;
26
- }
27
- // If someone is waiting, resolve immediately
28
- if (state.waiters.length > 0) {
29
- const waiter = state.waiters.shift();
30
- clearTimeout(waiter.timer);
31
- waiter.resolve([message]);
32
- logger.debug(`MessageRouter: resolved waiter for thread ${rootMessageId}`);
33
- return;
34
- }
35
- // Otherwise queue the message
36
- state.queue.push(message);
37
- logger.debug(`MessageRouter: queued message for thread ${rootMessageId}, queue size: ${state.queue.length}`);
38
- }
39
- export function getPendingMessages(rootMessageId) {
40
- const state = threads.get(rootMessageId);
41
- if (!state)
42
- return [];
43
- const messages = [...state.queue];
44
- state.queue = [];
45
- return messages;
46
- }
47
- export function waitForNext(rootMessageId, timeoutMs) {
48
- const state = threads.get(rootMessageId);
49
- if (!state) {
50
- return Promise.resolve([]);
51
- }
52
- // Check queue first
53
- if (state.queue.length > 0) {
54
- const messages = [...state.queue];
55
- state.queue = [];
56
- return Promise.resolve(messages);
57
- }
58
- // Create a promise that resolves when a message arrives or timeout
59
- return new Promise((resolve) => {
60
- const timer = setTimeout(() => {
61
- // Remove this waiter on timeout
62
- const idx = state.waiters.findIndex(w => w.resolve === resolve);
63
- if (idx !== -1)
64
- state.waiters.splice(idx, 1);
65
- resolve([]);
66
- }, timeoutMs);
67
- state.waiters.push({ resolve, timer });
68
- });
69
- }
70
- export function isRegistered(rootMessageId) {
71
- return threads.has(rootMessageId);
72
- }
73
- //# sourceMappingURL=message-router.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"message-router.js","sourceRoot":"","sources":["../../src/services/message-router.ts"],"names":[],"mappings":"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"}
@@ -1,22 +0,0 @@
1
- import { z } from 'zod';
2
- export declare const schema: z.ZodObject<{
3
- session_id: z.ZodString;
4
- closing_message: z.ZodOptional<z.ZodString>;
5
- }, "strip", z.ZodTypeAny, {
6
- session_id: string;
7
- closing_message?: string | undefined;
8
- }, {
9
- session_id: string;
10
- closing_message?: string | undefined;
11
- }>;
12
- export declare const description = "Close a session and stop listening for messages in the associated thread.";
13
- export declare function execute(args: z.infer<typeof schema>): Promise<{
14
- error: string;
15
- success?: undefined;
16
- sessionId?: undefined;
17
- } | {
18
- success: boolean;
19
- sessionId: string;
20
- error?: undefined;
21
- }>;
22
- //# sourceMappingURL=close-session.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"close-session.d.ts","sourceRoot":"","sources":["../../src/tools/close-session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,eAAO,MAAM,MAAM;;;;;;;;;EAGjB,CAAC;AAEH,eAAO,MAAM,WAAW,8EAA8E,CAAC;AAEvG,wBAAsB,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,MAAM,CAAC;;;;;;;;GA6BzD"}
@@ -1,38 +0,0 @@
1
- import { z } from 'zod';
2
- import { replyMessage } from '../services/lark-client.js';
3
- import * as sessionStore from '../services/session-store.js';
4
- import * as messageRouter from '../services/message-router.js';
5
- import { logger } from '../utils/logger.js';
6
- export const schema = z.object({
7
- session_id: z.string().describe('Session ID for the active session'),
8
- closing_message: z.string().optional().describe('Optional closing message to send before closing'),
9
- });
10
- export const description = 'Close a session and stop listening for messages in the associated thread.';
11
- export async function execute(args) {
12
- const session = sessionStore.getSession(args.session_id);
13
- if (!session) {
14
- return { error: `Session ${args.session_id} not found` };
15
- }
16
- if (session.status === 'closed') {
17
- return { error: `Session ${args.session_id} is already closed` };
18
- }
19
- try {
20
- // Send closing message if provided
21
- const closingMsg = args.closing_message ?? '🔚 Session closed.';
22
- await replyMessage(session.rootMessageId, closingMsg);
23
- // Unregister from message router
24
- messageRouter.unregister(session.rootMessageId);
25
- // Mark session as closed
26
- sessionStore.closeSession(args.session_id);
27
- logger.info(`Session ${args.session_id} closed`);
28
- return {
29
- success: true,
30
- sessionId: args.session_id,
31
- };
32
- }
33
- catch (err) {
34
- logger.error(`Failed to close session: ${err.message}`);
35
- return { error: `Failed to close session: ${err.message}` };
36
- }
37
- }
38
- //# sourceMappingURL=close-session.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"close-session.js","sourceRoot":"","sources":["../../src/tools/close-session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,KAAK,YAAY,MAAM,8BAA8B,CAAC;AAC7D,OAAO,KAAK,aAAa,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7B,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;IACpE,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iDAAiD,CAAC;CACnG,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,WAAW,GAAG,2EAA2E,CAAC;AAEvG,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAA4B;IACxD,MAAM,OAAO,GAAG,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACzD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,EAAE,KAAK,EAAE,WAAW,IAAI,CAAC,UAAU,YAAY,EAAE,CAAC;IAC3D,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAChC,OAAO,EAAE,KAAK,EAAE,WAAW,IAAI,CAAC,UAAU,oBAAoB,EAAE,CAAC;IACnE,CAAC;IAED,IAAI,CAAC;QACH,mCAAmC;QACnC,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,IAAI,oBAAoB,CAAC;QAChE,MAAM,YAAY,CAAC,OAAO,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;QAEtD,iCAAiC;QACjC,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QAEhD,yBAAyB;QACzB,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAE3C,MAAM,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,UAAU,SAAS,CAAC,CAAC;QACjD,OAAO;YACL,OAAO,EAAE,IAAI;YACb,SAAS,EAAE,IAAI,CAAC,UAAU;SAC3B,CAAC;IACJ,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,MAAM,CAAC,KAAK,CAAC,4BAA4B,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QACxD,OAAO,EAAE,KAAK,EAAE,4BAA4B,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC;IAC9D,CAAC;AACH,CAAC"}
@@ -1,28 +0,0 @@
1
- import { z } from 'zod';
2
- export declare const schema: z.ZodObject<{
3
- title: z.ZodString;
4
- chat_id: z.ZodOptional<z.ZodString>;
5
- }, "strip", z.ZodTypeAny, {
6
- title: string;
7
- chat_id?: string | undefined;
8
- }, {
9
- title: string;
10
- chat_id?: string | undefined;
11
- }>;
12
- export declare const description = "Create a new session by starting a thread in the Lark topic group. Returns session ID and thread info.";
13
- export declare function execute(args: z.infer<typeof schema>): Promise<{
14
- error: string;
15
- sessionId?: undefined;
16
- threadId?: undefined;
17
- chatId?: undefined;
18
- title?: undefined;
19
- status?: undefined;
20
- } | {
21
- sessionId: string;
22
- threadId: string;
23
- chatId: string;
24
- title: string;
25
- status: string;
26
- error?: undefined;
27
- }>;
28
- //# sourceMappingURL=create-session.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"create-session.d.ts","sourceRoot":"","sources":["../../src/tools/create-session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB,eAAO,MAAM,MAAM;;;;;;;;;EAGjB,CAAC;AAEH,eAAO,MAAM,WAAW,2GAA2G,CAAC;AAEpI,wBAAsB,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,MAAM,CAAC;;;;;;;;;;;;;;GAgCzD"}
@@ -1,40 +0,0 @@
1
- import { z } from 'zod';
2
- import { config } from '../config.js';
3
- import { sendMessage, replyMessage } from '../services/lark-client.js';
4
- import * as sessionStore from '../services/session-store.js';
5
- import * as messageRouter from '../services/message-router.js';
6
- import { logger } from '../utils/logger.js';
7
- export const schema = z.object({
8
- title: z.string().describe('Title for the thread/session'),
9
- chat_id: z.string().optional().describe('Chat ID of the topic group. Defaults to LARK_DEFAULT_CHAT_ID'),
10
- });
11
- export const description = 'Create a new session by starting a thread in the Lark topic group. Returns session ID and thread info.';
12
- export async function execute(args) {
13
- const chatId = args.chat_id || config.lark.defaultChatId;
14
- if (!chatId) {
15
- return { error: 'No chat_id provided and LARK_DEFAULT_CHAT_ID not set' };
16
- }
17
- try {
18
- // Send root message to create the thread
19
- const rootMessageId = await sendMessage(chatId, `🤖 ${args.title}`);
20
- // Reply to root message to initialize the thread
21
- await replyMessage(rootMessageId, `Session started. Claude Code is connected.`);
22
- // Register in message router for real-time message reception
23
- messageRouter.register(rootMessageId);
24
- // Persist session
25
- const session = sessionStore.createSession(chatId, rootMessageId, args.title);
26
- logger.info(`Session created: ${session.sessionId}, thread root: ${rootMessageId}`);
27
- return {
28
- sessionId: session.sessionId,
29
- threadId: rootMessageId,
30
- chatId,
31
- title: args.title,
32
- status: 'active',
33
- };
34
- }
35
- catch (err) {
36
- logger.error(`Failed to create session: ${err.message}`);
37
- return { error: `Failed to create session: ${err.message}` };
38
- }
39
- }
40
- //# sourceMappingURL=create-session.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"create-session.js","sourceRoot":"","sources":["../../src/tools/create-session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AACvE,OAAO,KAAK,YAAY,MAAM,8BAA8B,CAAC;AAC7D,OAAO,KAAK,aAAa,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;IAC1D,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8DAA8D,CAAC;CACxG,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,WAAW,GAAG,wGAAwG,CAAC;AAEpI,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAA4B;IACxD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC;IACzD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,EAAE,KAAK,EAAE,sDAAsD,EAAE,CAAC;IAC3E,CAAC;IAED,IAAI,CAAC;QACH,yCAAyC;QACzC,MAAM,aAAa,GAAG,MAAM,WAAW,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QAEpE,iDAAiD;QACjD,MAAM,YAAY,CAAC,aAAa,EAAE,4CAA4C,CAAC,CAAC;QAEhF,6DAA6D;QAC7D,aAAa,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;QAEtC,kBAAkB;QAClB,MAAM,OAAO,GAAG,YAAY,CAAC,aAAa,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAE9E,MAAM,CAAC,IAAI,CAAC,oBAAoB,OAAO,CAAC,SAAS,kBAAkB,aAAa,EAAE,CAAC,CAAC;QAEpF,OAAO;YACL,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,QAAQ,EAAE,aAAa;YACvB,MAAM;YACN,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,QAAQ;SACjB,CAAC;IACJ,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,MAAM,CAAC,KAAK,CAAC,6BAA6B,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QACzD,OAAO,EAAE,KAAK,EAAE,6BAA6B,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC;IAC/D,CAAC;AACH,CAAC"}
@@ -1,17 +0,0 @@
1
- import { z } from 'zod';
2
- import type { WaitResult } from '../types.js';
3
- export declare const schema: z.ZodObject<{
4
- session_id: z.ZodString;
5
- timeout_ms: z.ZodOptional<z.ZodNumber>;
6
- }, "strip", z.ZodTypeAny, {
7
- session_id: string;
8
- timeout_ms?: number | undefined;
9
- }, {
10
- session_id: string;
11
- timeout_ms?: number | undefined;
12
- }>;
13
- export declare const description = "Wait for user reply in the Lark thread. Event-driven (no polling). Returns immediately if there are pending messages, otherwise waits until a message arrives or timeout.";
14
- export declare function execute(args: z.infer<typeof schema>): Promise<WaitResult | {
15
- error: string;
16
- }>;
17
- //# sourceMappingURL=wait-for-reply.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"wait-for-reply.d.ts","sourceRoot":"","sources":["../../src/tools/wait-for-reply.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,eAAO,MAAM,MAAM;;;;;;;;;EAGjB,CAAC;AAEH,eAAO,MAAM,WAAW,8KAA8K,CAAC;AAEvM,wBAAsB,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,MAAM,CAAC,GAAG,OAAO,CAAC,UAAU,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAuBnG"}