claude-telegram-mirror 0.1.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.
- package/README.md +331 -0
- package/dist/bot/commands.d.ts +41 -0
- package/dist/bot/commands.d.ts.map +1 -0
- package/dist/bot/commands.js +231 -0
- package/dist/bot/commands.js.map +1 -0
- package/dist/bot/formatting.d.ts +62 -0
- package/dist/bot/formatting.d.ts.map +1 -0
- package/dist/bot/formatting.js +295 -0
- package/dist/bot/formatting.js.map +1 -0
- package/dist/bot/telegram.d.ts +93 -0
- package/dist/bot/telegram.d.ts.map +1 -0
- package/dist/bot/telegram.js +378 -0
- package/dist/bot/telegram.js.map +1 -0
- package/dist/bot/types.d.ts +28 -0
- package/dist/bot/types.d.ts.map +1 -0
- package/dist/bot/types.js +5 -0
- package/dist/bot/types.js.map +1 -0
- package/dist/bridge/daemon.d.ts +93 -0
- package/dist/bridge/daemon.d.ts.map +1 -0
- package/dist/bridge/daemon.js +626 -0
- package/dist/bridge/daemon.js.map +1 -0
- package/dist/bridge/index.d.ts +10 -0
- package/dist/bridge/index.d.ts.map +1 -0
- package/dist/bridge/index.js +9 -0
- package/dist/bridge/index.js.map +1 -0
- package/dist/bridge/injector.d.ts +97 -0
- package/dist/bridge/injector.d.ts.map +1 -0
- package/dist/bridge/injector.js +289 -0
- package/dist/bridge/injector.js.map +1 -0
- package/dist/bridge/session.d.ts +108 -0
- package/dist/bridge/session.d.ts.map +1 -0
- package/dist/bridge/session.js +381 -0
- package/dist/bridge/session.js.map +1 -0
- package/dist/bridge/socket.d.ts +97 -0
- package/dist/bridge/socket.d.ts.map +1 -0
- package/dist/bridge/socket.js +436 -0
- package/dist/bridge/socket.js.map +1 -0
- package/dist/bridge/types.d.ts +38 -0
- package/dist/bridge/types.d.ts.map +1 -0
- package/dist/bridge/types.js +5 -0
- package/dist/bridge/types.js.map +1 -0
- package/dist/cli.d.ts +7 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +332 -0
- package/dist/cli.js.map +1 -0
- package/dist/hooks/handler.d.ts +94 -0
- package/dist/hooks/handler.d.ts.map +1 -0
- package/dist/hooks/handler.js +431 -0
- package/dist/hooks/handler.js.map +1 -0
- package/dist/hooks/index.d.ts +8 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +7 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/installer.d.ts +46 -0
- package/dist/hooks/installer.d.ts.map +1 -0
- package/dist/hooks/installer.js +317 -0
- package/dist/hooks/installer.js.map +1 -0
- package/dist/hooks/types.d.ts +88 -0
- package/dist/hooks/types.d.ts.map +1 -0
- package/dist/hooks/types.js +6 -0
- package/dist/hooks/types.js.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/service/doctor.d.ts +10 -0
- package/dist/service/doctor.d.ts.map +1 -0
- package/dist/service/doctor.js +424 -0
- package/dist/service/doctor.js.map +1 -0
- package/dist/service/manager.d.ts +48 -0
- package/dist/service/manager.d.ts.map +1 -0
- package/dist/service/manager.js +584 -0
- package/dist/service/manager.js.map +1 -0
- package/dist/service/setup.d.ts +10 -0
- package/dist/service/setup.d.ts.map +1 -0
- package/dist/service/setup.js +266 -0
- package/dist/service/setup.js.map +1 -0
- package/dist/utils/chunker.d.ts +24 -0
- package/dist/utils/chunker.d.ts.map +1 -0
- package/dist/utils/chunker.js +123 -0
- package/dist/utils/chunker.js.map +1 -0
- package/dist/utils/config.d.ts +48 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +154 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/logger.d.ts +7 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +28 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +88 -0
- package/postinstall.cjs +76 -0
- package/scripts/claude-wrapper.sh +122 -0
- package/scripts/doctor.sh +433 -0
- package/scripts/get-chat-id.sh +64 -0
- package/scripts/global-hooks.sh +39 -0
- package/scripts/install.sh +831 -0
- package/scripts/start-daemon.sh +49 -0
- package/scripts/telegram-hook.sh +449 -0
- package/scripts/uninstall.sh +261 -0
|
@@ -0,0 +1,378 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Telegram Bot Implementation
|
|
3
|
+
* Core bot using grammY with rate limiting and message queue
|
|
4
|
+
*/
|
|
5
|
+
import { Bot, session, GrammyError, HttpError } from 'grammy';
|
|
6
|
+
import { InlineKeyboard } from 'grammy';
|
|
7
|
+
import { loadConfig } from '../utils/config.js';
|
|
8
|
+
import { chunkMessage } from '../utils/chunker.js';
|
|
9
|
+
import logger from '../utils/logger.js';
|
|
10
|
+
/**
|
|
11
|
+
* Message queue for rate limiting
|
|
12
|
+
*/
|
|
13
|
+
class MessageQueue {
|
|
14
|
+
queue = [];
|
|
15
|
+
processing = false;
|
|
16
|
+
rateLimit;
|
|
17
|
+
constructor(rateLimit = 1) {
|
|
18
|
+
this.rateLimit = rateLimit;
|
|
19
|
+
}
|
|
20
|
+
add(item) {
|
|
21
|
+
this.queue.push({
|
|
22
|
+
...item,
|
|
23
|
+
retries: 0,
|
|
24
|
+
createdAt: new Date()
|
|
25
|
+
});
|
|
26
|
+
this.process();
|
|
27
|
+
}
|
|
28
|
+
async process() {
|
|
29
|
+
if (this.processing || this.queue.length === 0)
|
|
30
|
+
return;
|
|
31
|
+
this.processing = true;
|
|
32
|
+
while (this.queue.length > 0) {
|
|
33
|
+
const item = this.queue.shift();
|
|
34
|
+
try {
|
|
35
|
+
await this.sendItem(item);
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
if (item.retries < 3) {
|
|
39
|
+
item.retries++;
|
|
40
|
+
// Exponential backoff
|
|
41
|
+
await this.delay(1000 * Math.pow(2, item.retries));
|
|
42
|
+
this.queue.unshift(item);
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
logger.error('Failed to send message after retries', { error });
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
// Rate limiting delay
|
|
49
|
+
await this.delay(1000 / this.rateLimit);
|
|
50
|
+
}
|
|
51
|
+
this.processing = false;
|
|
52
|
+
}
|
|
53
|
+
async sendItem(_item) {
|
|
54
|
+
// Implemented by TelegramBot class
|
|
55
|
+
throw new Error('sendItem must be implemented');
|
|
56
|
+
}
|
|
57
|
+
delay(ms) {
|
|
58
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
59
|
+
}
|
|
60
|
+
setHandler(handler) {
|
|
61
|
+
this.sendItem = handler;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Telegram Bot Class
|
|
66
|
+
*/
|
|
67
|
+
export class TelegramBot {
|
|
68
|
+
bot;
|
|
69
|
+
config;
|
|
70
|
+
messageQueue;
|
|
71
|
+
running = false;
|
|
72
|
+
messageHandlers = [];
|
|
73
|
+
callbackHandlers = [];
|
|
74
|
+
constructor(config) {
|
|
75
|
+
this.config = config || loadConfig();
|
|
76
|
+
this.bot = new Bot(this.config.botToken);
|
|
77
|
+
this.messageQueue = new MessageQueue(this.config.rateLimit);
|
|
78
|
+
this.setupMiddleware();
|
|
79
|
+
this.setupErrorHandling();
|
|
80
|
+
this.setupMessageQueueHandler();
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Setup middleware
|
|
84
|
+
*/
|
|
85
|
+
setupMiddleware() {
|
|
86
|
+
// Session middleware
|
|
87
|
+
this.bot.use(session({
|
|
88
|
+
initial: () => ({
|
|
89
|
+
attachedSessionId: null,
|
|
90
|
+
muted: false,
|
|
91
|
+
lastActivity: Date.now()
|
|
92
|
+
})
|
|
93
|
+
}));
|
|
94
|
+
// Security: Only respond to configured chat
|
|
95
|
+
this.bot.use(async (ctx, next) => {
|
|
96
|
+
const chatId = ctx.chat?.id;
|
|
97
|
+
if (chatId && chatId !== this.config.chatId) {
|
|
98
|
+
logger.warn('Unauthorized access attempt', { chatId });
|
|
99
|
+
await ctx.reply('⛔ Unauthorized. This bot is private.');
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
// Update activity timestamp
|
|
103
|
+
if (ctx.session) {
|
|
104
|
+
ctx.session.lastActivity = Date.now();
|
|
105
|
+
}
|
|
106
|
+
await next();
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Setup error handling
|
|
111
|
+
*/
|
|
112
|
+
setupErrorHandling() {
|
|
113
|
+
this.bot.catch((err) => {
|
|
114
|
+
const ctx = err.ctx;
|
|
115
|
+
const error = err.error;
|
|
116
|
+
logger.error('Bot error', {
|
|
117
|
+
updateType: ctx.update.update_id,
|
|
118
|
+
error: error instanceof Error ? error.message : String(error)
|
|
119
|
+
});
|
|
120
|
+
if (error instanceof GrammyError) {
|
|
121
|
+
logger.error('Telegram API error', {
|
|
122
|
+
code: error.error_code,
|
|
123
|
+
description: error.description
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
else if (error instanceof HttpError) {
|
|
127
|
+
logger.error('Network error', { error: error.message });
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Setup message queue handler
|
|
133
|
+
*/
|
|
134
|
+
setupMessageQueueHandler() {
|
|
135
|
+
this.messageQueue.setHandler(async (item) => {
|
|
136
|
+
const threadId = item.threadId || item.options?.threadId;
|
|
137
|
+
const parseMode = item.options?.parseMode || 'Markdown';
|
|
138
|
+
try {
|
|
139
|
+
if (item.buttons && item.buttons.length > 0) {
|
|
140
|
+
const keyboard = new InlineKeyboard();
|
|
141
|
+
item.buttons.forEach((btn, idx) => {
|
|
142
|
+
keyboard.text(btn.text, btn.callbackData);
|
|
143
|
+
if ((idx + 1) % 2 === 0)
|
|
144
|
+
keyboard.row();
|
|
145
|
+
});
|
|
146
|
+
await this.bot.api.sendMessage(item.chatId, item.text, {
|
|
147
|
+
parse_mode: parseMode,
|
|
148
|
+
disable_notification: item.options?.disableNotification,
|
|
149
|
+
message_thread_id: threadId,
|
|
150
|
+
reply_markup: keyboard
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
await this.bot.api.sendMessage(item.chatId, item.text, {
|
|
155
|
+
parse_mode: parseMode,
|
|
156
|
+
disable_notification: item.options?.disableNotification,
|
|
157
|
+
message_thread_id: threadId
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
catch (error) {
|
|
162
|
+
// If Markdown parsing failed, retry without parse_mode (plain text)
|
|
163
|
+
if (error instanceof GrammyError && error.error_code === 400 &&
|
|
164
|
+
error.description.includes("can't parse entities")) {
|
|
165
|
+
logger.warn('Markdown parsing failed, retrying as plain text', {
|
|
166
|
+
error: error.description
|
|
167
|
+
});
|
|
168
|
+
// Strip markdown formatting for plain text fallback
|
|
169
|
+
const plainText = item.text
|
|
170
|
+
.replace(/\*\*/g, '') // Remove bold **
|
|
171
|
+
.replace(/\*/g, '') // Remove italic *
|
|
172
|
+
.replace(/`/g, "'") // Replace backticks with quotes
|
|
173
|
+
.replace(/_/g, ''); // Remove underscores
|
|
174
|
+
if (item.buttons && item.buttons.length > 0) {
|
|
175
|
+
const keyboard = new InlineKeyboard();
|
|
176
|
+
item.buttons.forEach((btn, idx) => {
|
|
177
|
+
keyboard.text(btn.text, btn.callbackData);
|
|
178
|
+
if ((idx + 1) % 2 === 0)
|
|
179
|
+
keyboard.row();
|
|
180
|
+
});
|
|
181
|
+
await this.bot.api.sendMessage(item.chatId, plainText, {
|
|
182
|
+
disable_notification: item.options?.disableNotification,
|
|
183
|
+
message_thread_id: threadId,
|
|
184
|
+
reply_markup: keyboard
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
else {
|
|
188
|
+
await this.bot.api.sendMessage(item.chatId, plainText, {
|
|
189
|
+
disable_notification: item.options?.disableNotification,
|
|
190
|
+
message_thread_id: threadId
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
else {
|
|
195
|
+
throw error; // Re-throw other errors for retry logic
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Start the bot
|
|
202
|
+
*/
|
|
203
|
+
async start() {
|
|
204
|
+
if (this.running) {
|
|
205
|
+
logger.warn('Bot already running');
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
logger.info('Starting Telegram bot...');
|
|
209
|
+
this.running = true;
|
|
210
|
+
// Start long polling
|
|
211
|
+
this.bot.start({
|
|
212
|
+
onStart: (botInfo) => {
|
|
213
|
+
logger.info(`Bot started: @${botInfo.username}`);
|
|
214
|
+
}
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Stop the bot
|
|
219
|
+
*/
|
|
220
|
+
async stop() {
|
|
221
|
+
if (!this.running)
|
|
222
|
+
return;
|
|
223
|
+
logger.info('Stopping Telegram bot...');
|
|
224
|
+
this.running = false;
|
|
225
|
+
await this.bot.stop();
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Send a message (queued with rate limiting)
|
|
229
|
+
*/
|
|
230
|
+
async sendMessage(text, options, threadId) {
|
|
231
|
+
// Chunk long messages
|
|
232
|
+
const chunks = chunkMessage(text, { maxLength: this.config.chunkSize });
|
|
233
|
+
for (const chunk of chunks) {
|
|
234
|
+
this.messageQueue.add({
|
|
235
|
+
chatId: this.config.chatId,
|
|
236
|
+
text: chunk,
|
|
237
|
+
options,
|
|
238
|
+
threadId: threadId || options?.threadId
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Send message with inline buttons
|
|
244
|
+
*/
|
|
245
|
+
async sendWithButtons(text, buttons, options, threadId) {
|
|
246
|
+
this.messageQueue.add({
|
|
247
|
+
chatId: this.config.chatId,
|
|
248
|
+
text,
|
|
249
|
+
options,
|
|
250
|
+
buttons,
|
|
251
|
+
threadId: threadId || options?.threadId
|
|
252
|
+
});
|
|
253
|
+
}
|
|
254
|
+
// Valid forum topic icon colors (Telegram API requirement)
|
|
255
|
+
static TOPIC_COLORS = [
|
|
256
|
+
0x6FB9F0, // Blue
|
|
257
|
+
0xFFD67E, // Yellow
|
|
258
|
+
0xCB86DB, // Purple
|
|
259
|
+
0x8EEE98, // Green
|
|
260
|
+
0xFF93B2, // Pink
|
|
261
|
+
0xFB6F5F // Red
|
|
262
|
+
];
|
|
263
|
+
/**
|
|
264
|
+
* Create a forum topic for a session
|
|
265
|
+
* Returns the thread ID if successful, null if not supported
|
|
266
|
+
*/
|
|
267
|
+
async createForumTopic(name, colorIndex = 0) {
|
|
268
|
+
if (!this.config.useThreads) {
|
|
269
|
+
return null;
|
|
270
|
+
}
|
|
271
|
+
try {
|
|
272
|
+
// Use a valid color from the allowed list
|
|
273
|
+
const iconColor = TelegramBot.TOPIC_COLORS[colorIndex % TelegramBot.TOPIC_COLORS.length];
|
|
274
|
+
const result = await this.bot.api.createForumTopic(this.config.chatId, name, { icon_color: iconColor });
|
|
275
|
+
logger.info('Created forum topic', { name, threadId: result.message_thread_id });
|
|
276
|
+
return result.message_thread_id;
|
|
277
|
+
}
|
|
278
|
+
catch (error) {
|
|
279
|
+
// Forum topics not supported (not a supergroup with topics enabled)
|
|
280
|
+
logger.debug('Forum topics not supported', { error });
|
|
281
|
+
return null;
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Close a forum topic
|
|
286
|
+
*/
|
|
287
|
+
async closeForumTopic(threadId) {
|
|
288
|
+
try {
|
|
289
|
+
await this.bot.api.closeForumTopic(this.config.chatId, threadId);
|
|
290
|
+
logger.info('Closed forum topic', { threadId });
|
|
291
|
+
return true;
|
|
292
|
+
}
|
|
293
|
+
catch (error) {
|
|
294
|
+
logger.debug('Failed to close forum topic', { threadId, error });
|
|
295
|
+
return false;
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
/**
|
|
299
|
+
* Register text message handler
|
|
300
|
+
*/
|
|
301
|
+
onMessage(handler) {
|
|
302
|
+
this.messageHandlers.push(handler);
|
|
303
|
+
// Only register once
|
|
304
|
+
if (this.messageHandlers.length === 1) {
|
|
305
|
+
this.bot.on('message:text', (ctx) => {
|
|
306
|
+
const text = ctx.message.text;
|
|
307
|
+
const chatId = ctx.chat.id;
|
|
308
|
+
const threadId = ctx.message.message_thread_id;
|
|
309
|
+
// Skip commands
|
|
310
|
+
if (text.startsWith('/'))
|
|
311
|
+
return;
|
|
312
|
+
this.messageHandlers.forEach(h => h(text, chatId, threadId));
|
|
313
|
+
});
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* Register callback query handler
|
|
318
|
+
*/
|
|
319
|
+
onCallback(handler) {
|
|
320
|
+
this.callbackHandlers.push(handler);
|
|
321
|
+
// Only register once
|
|
322
|
+
if (this.callbackHandlers.length === 1) {
|
|
323
|
+
this.bot.on('callback_query:data', async (ctx) => {
|
|
324
|
+
const data = ctx.callbackQuery.data;
|
|
325
|
+
const chatId = ctx.chat?.id;
|
|
326
|
+
if (chatId) {
|
|
327
|
+
this.callbackHandlers.forEach(h => h(data, chatId));
|
|
328
|
+
}
|
|
329
|
+
await ctx.answerCallbackQuery();
|
|
330
|
+
});
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
/**
|
|
334
|
+
* Get the underlying grammY bot instance
|
|
335
|
+
*/
|
|
336
|
+
getBot() {
|
|
337
|
+
return this.bot;
|
|
338
|
+
}
|
|
339
|
+
/**
|
|
340
|
+
* Check if bot is running
|
|
341
|
+
*/
|
|
342
|
+
isRunning() {
|
|
343
|
+
return this.running;
|
|
344
|
+
}
|
|
345
|
+
/**
|
|
346
|
+
* Get session data for a chat
|
|
347
|
+
*/
|
|
348
|
+
getSession(_chatId) {
|
|
349
|
+
// Note: This would need proper session storage for production
|
|
350
|
+
return null;
|
|
351
|
+
}
|
|
352
|
+
/**
|
|
353
|
+
* Update message (for editing after button press)
|
|
354
|
+
*/
|
|
355
|
+
async editMessage(messageId, text, options) {
|
|
356
|
+
try {
|
|
357
|
+
await this.bot.api.editMessageText(this.config.chatId, messageId, text, {
|
|
358
|
+
parse_mode: options?.parseMode || 'Markdown'
|
|
359
|
+
});
|
|
360
|
+
}
|
|
361
|
+
catch (error) {
|
|
362
|
+
logger.error('Failed to edit message', { messageId, error });
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
/**
|
|
366
|
+
* Remove inline keyboard from message
|
|
367
|
+
*/
|
|
368
|
+
async removeKeyboard(messageId) {
|
|
369
|
+
try {
|
|
370
|
+
await this.bot.api.editMessageReplyMarkup(this.config.chatId, messageId, { reply_markup: undefined });
|
|
371
|
+
}
|
|
372
|
+
catch (error) {
|
|
373
|
+
logger.error('Failed to remove keyboard', { messageId, error });
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
export default TelegramBot;
|
|
378
|
+
//# sourceMappingURL=telegram.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telegram.js","sourceRoot":"","sources":["../../src/bot/telegram.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Telegram Bot Types
|
|
3
|
+
*/
|
|
4
|
+
export interface SendOptions {
|
|
5
|
+
parseMode?: 'Markdown' | 'MarkdownV2' | 'HTML';
|
|
6
|
+
disableNotification?: boolean;
|
|
7
|
+
replyToMessageId?: number;
|
|
8
|
+
threadId?: number;
|
|
9
|
+
}
|
|
10
|
+
export interface InlineButton {
|
|
11
|
+
text: string;
|
|
12
|
+
callbackData: string;
|
|
13
|
+
}
|
|
14
|
+
export interface BotSession {
|
|
15
|
+
attachedSessionId: string | null;
|
|
16
|
+
muted: boolean;
|
|
17
|
+
lastActivity: Date;
|
|
18
|
+
}
|
|
19
|
+
export interface MessageQueueItem {
|
|
20
|
+
chatId: number;
|
|
21
|
+
text: string;
|
|
22
|
+
options?: SendOptions;
|
|
23
|
+
buttons?: InlineButton[];
|
|
24
|
+
threadId?: number;
|
|
25
|
+
retries: number;
|
|
26
|
+
createdAt: Date;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/bot/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,WAAW;IAC1B,SAAS,CAAC,EAAE,UAAU,GAAG,YAAY,GAAG,MAAM,CAAC;IAC/C,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,KAAK,EAAE,OAAO,CAAC;IACf,YAAY,EAAE,IAAI,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACjB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/bot/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bridge Daemon
|
|
3
|
+
* Central coordinator for Claude Code ↔ Telegram bridge
|
|
4
|
+
*/
|
|
5
|
+
import { EventEmitter } from 'events';
|
|
6
|
+
import { TelegramMirrorConfig } from '../utils/config.js';
|
|
7
|
+
/**
|
|
8
|
+
* Bridge Daemon Class
|
|
9
|
+
* Orchestrates all components
|
|
10
|
+
*/
|
|
11
|
+
export declare class BridgeDaemon extends EventEmitter {
|
|
12
|
+
private config;
|
|
13
|
+
private bot;
|
|
14
|
+
private socket;
|
|
15
|
+
private sessions;
|
|
16
|
+
private injector;
|
|
17
|
+
private running;
|
|
18
|
+
private cleanupInterval;
|
|
19
|
+
private sessionThreads;
|
|
20
|
+
private sessionTmuxTargets;
|
|
21
|
+
private recentTelegramInputs;
|
|
22
|
+
private toolInputCache;
|
|
23
|
+
private compactingSessions;
|
|
24
|
+
constructor(config?: TelegramMirrorConfig);
|
|
25
|
+
/**
|
|
26
|
+
* Start the daemon
|
|
27
|
+
*/
|
|
28
|
+
start(): Promise<void>;
|
|
29
|
+
/**
|
|
30
|
+
* Setup socket message handlers (CLI → Telegram)
|
|
31
|
+
*/
|
|
32
|
+
private setupSocketHandlers;
|
|
33
|
+
/**
|
|
34
|
+
* Check if text is a stop/interrupt command
|
|
35
|
+
*/
|
|
36
|
+
private isStopCommand;
|
|
37
|
+
/**
|
|
38
|
+
* Setup bot message handlers (Telegram → CLI)
|
|
39
|
+
*/
|
|
40
|
+
private setupBotHandlers;
|
|
41
|
+
private handleSessionStart;
|
|
42
|
+
/**
|
|
43
|
+
* Format topic name for a session
|
|
44
|
+
*/
|
|
45
|
+
private formatTopicName;
|
|
46
|
+
/**
|
|
47
|
+
* Ensure a session exists (create on-the-fly if needed)
|
|
48
|
+
* This handles the case where events arrive before session_start.
|
|
49
|
+
*
|
|
50
|
+
* IMPORTANT: This function ONLY creates the session entry in the database.
|
|
51
|
+
* Topic creation is the responsibility of handleSessionStart() alone.
|
|
52
|
+
* Messages arriving before the topic is created will go to General.
|
|
53
|
+
*/
|
|
54
|
+
private ensureSessionExists;
|
|
55
|
+
/**
|
|
56
|
+
* Get thread ID for a session
|
|
57
|
+
*/
|
|
58
|
+
private getSessionThreadId;
|
|
59
|
+
private handleSessionEnd;
|
|
60
|
+
private handleAgentResponse;
|
|
61
|
+
private handleToolStart;
|
|
62
|
+
/**
|
|
63
|
+
* Truncate file path to show basename and parent
|
|
64
|
+
*/
|
|
65
|
+
private truncatePath;
|
|
66
|
+
private handleToolResult;
|
|
67
|
+
private handleUserInput;
|
|
68
|
+
private handleApprovalRequest;
|
|
69
|
+
private handleError;
|
|
70
|
+
private handlePreCompact;
|
|
71
|
+
private handleCompactComplete;
|
|
72
|
+
/**
|
|
73
|
+
* Stop the daemon
|
|
74
|
+
*/
|
|
75
|
+
stop(): Promise<void>;
|
|
76
|
+
/**
|
|
77
|
+
* Check if daemon is running
|
|
78
|
+
*/
|
|
79
|
+
isRunning(): boolean;
|
|
80
|
+
/**
|
|
81
|
+
* Get daemon status
|
|
82
|
+
*/
|
|
83
|
+
getStatus(): {
|
|
84
|
+
running: boolean;
|
|
85
|
+
clients: number;
|
|
86
|
+
sessions: {
|
|
87
|
+
activeSessions: number;
|
|
88
|
+
pendingApprovals: number;
|
|
89
|
+
};
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
export default BridgeDaemon;
|
|
93
|
+
//# sourceMappingURL=daemon.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../../src/bridge/daemon.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAMtC,OAAO,EAAc,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAYtE;;;GAGG;AACH,qBAAa,YAAa,SAAQ,YAAY;IAC5C,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,GAAG,CAAc;IACzB,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,QAAQ,CAAgB;IAChC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,eAAe,CAA+B;IACtD,OAAO,CAAC,cAAc,CAAkC;IACxD,OAAO,CAAC,kBAAkB,CAAkC;IAC5D,OAAO,CAAC,oBAAoB,CAA0B;IACtD,OAAO,CAAC,cAAc,CAA+E;IACrG,OAAO,CAAC,kBAAkB,CAA0B;gBAExC,MAAM,CAAC,EAAE,oBAAoB;IASzC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA8G5B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA8E3B;;OAEG;IACH,OAAO,CAAC,aAAa;IAarB;;OAEG;IACH,OAAO,CAAC,gBAAgB;YA4GV,kBAAkB;IAkEhC;;OAEG;IACH,OAAO,CAAC,eAAe;IAqBvB;;;;;;;OAOG;YACW,mBAAmB;IAmCjC;;OAEG;IACH,OAAO,CAAC,kBAAkB;YAeZ,gBAAgB;YA0BhB,mBAAmB;YASnB,eAAe;IA6D7B;;OAEG;IACH,OAAO,CAAC,YAAY;YAMN,gBAAgB;YAehB,eAAe;YAsCf,qBAAqB;YAgBrB,WAAW;YASX,gBAAgB;YAqBhB,qBAAqB;IAenC;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA+B3B;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACH,SAAS,IAAI;QACX,OAAO,EAAE,OAAO,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE;YAAE,cAAc,EAAE,MAAM,CAAC;YAAC,gBAAgB,EAAE,MAAM,CAAA;SAAE,CAAC;KAChE;CAOF;AAED,eAAe,YAAY,CAAC"}
|