@slycode/slycode 0.2.15 → 0.2.17

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 (49) hide show
  1. package/dist/bridge/pty-handler.js +54 -0
  2. package/dist/bridge/pty-handler.js.map +1 -1
  3. package/dist/bridge/session-manager.js +3 -3
  4. package/dist/bridge/session-manager.js.map +1 -1
  5. package/dist/messaging/bridge-client.js +1 -1
  6. package/dist/messaging/channels/telegram.d.ts +25 -5
  7. package/dist/messaging/channels/telegram.js +258 -152
  8. package/dist/messaging/channels/telegram.js.map +1 -1
  9. package/dist/messaging/index.js +5 -3
  10. package/dist/messaging/index.js.map +1 -1
  11. package/dist/messaging/state.d.ts +3 -0
  12. package/dist/messaging/state.js +13 -0
  13. package/dist/messaging/state.js.map +1 -1
  14. package/dist/messaging/types.d.ts +2 -0
  15. package/dist/web/.next/BUILD_ID +1 -1
  16. package/dist/web/.next/build-manifest.json +2 -2
  17. package/dist/web/.next/server/app/_global-error.html +2 -2
  18. package/dist/web/.next/server/app/_global-error.rsc +1 -1
  19. package/dist/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  20. package/dist/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  21. package/dist/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  22. package/dist/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  23. package/dist/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  24. package/dist/web/.next/server/app/_not-found.html +1 -1
  25. package/dist/web/.next/server/app/_not-found.rsc +1 -1
  26. package/dist/web/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  27. package/dist/web/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  28. package/dist/web/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  29. package/dist/web/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  30. package/dist/web/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  31. package/dist/web/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  32. package/dist/web/.next/server/app/page_client-reference-manifest.js +1 -1
  33. package/dist/web/.next/server/app/project/[id]/page_client-reference-manifest.js +1 -1
  34. package/dist/web/.next/server/chunks/src_lib_scheduler_ts_03988e3e._.js +1 -1
  35. package/dist/web/.next/server/chunks/src_lib_scheduler_ts_7120457c._.js +1 -1
  36. package/dist/web/.next/server/chunks/ssr/[root-of-the-server]__1f5fc489._.js +1 -1
  37. package/dist/web/.next/server/chunks/ssr/[root-of-the-server]__bcbe4bf2._.js +1 -1
  38. package/dist/web/.next/server/pages/404.html +1 -1
  39. package/dist/web/.next/server/pages/500.html +2 -2
  40. package/dist/web/.next/static/chunks/{68a737843232927b.js → 3d5195b57fc05540.js} +1 -1
  41. package/dist/web/.next/static/chunks/{7b456abf0afeeb60.js → 59fb302a5bfd2dc0.js} +1 -1
  42. package/dist/web/src/components/ClaudeTerminalPanel.tsx +1 -1
  43. package/dist/web/src/lib/scheduler.ts +11 -2
  44. package/dist/web/tsconfig.tsbuildinfo +1 -1
  45. package/package.json +3 -4
  46. package/templates/kanban-seed.json +1 -1
  47. /package/dist/web/.next/static/{du1bb9CKBc_rQF_UArbIP → zp7O3ZtAOySM7ONwqP-kQ}/_buildManifest.js +0 -0
  48. /package/dist/web/.next/static/{du1bb9CKBc_rQF_UArbIP → zp7O3ZtAOySM7ONwqP-kQ}/_clientMiddlewareManifest.json +0 -0
  49. /package/dist/web/.next/static/{du1bb9CKBc_rQF_UArbIP → zp7O3ZtAOySM7ONwqP-kQ}/_ssgManifest.js +0 -0
@@ -1,134 +1,52 @@
1
- import TelegramBot from 'node-telegram-bot-api';
2
1
  import fs from 'fs';
3
2
  import path from 'path';
4
3
  import os from 'os';
4
+ // --- TelegramChannel ---
5
5
  export class TelegramChannel {
6
6
  name = 'Telegram';
7
- bot;
8
7
  botToken;
9
8
  authorizedUserId;
10
9
  chatId = null;
10
+ onChatIdChanged;
11
11
  textHandler;
12
12
  voiceHandler;
13
13
  photoHandler;
14
14
  voiceSelectHandler;
15
15
  callbackHandlers = new Map();
16
+ commandHandlers = new Map();
16
17
  persistentKeyboard = null;
17
18
  pendingVoiceList = [];
18
19
  // Photo album batching
19
20
  photoBuffer = new Map();
21
+ // Polling state
22
+ polling = false;
23
+ pollOffset = 0;
24
+ pollAbort = null;
20
25
  constructor(config) {
21
26
  this.authorizedUserId = config.authorizedUserId;
22
27
  this.botToken = config.botToken;
23
- this.bot = new TelegramBot(config.botToken, { polling: true });
28
+ if (config.chatId)
29
+ this.chatId = config.chatId;
30
+ if (config.onChatIdChanged)
31
+ this.onChatIdChanged = config.onChatIdChanged;
24
32
  }
25
33
  async start() {
26
- // Set up message listener
27
- this.bot.on('message', (msg) => {
28
- if (!msg.from || !this.isAuthorized(msg.from.id))
29
- return;
30
- this.setChatId(msg.chat.id);
31
- // Text messages (non-commands)
32
- if (msg.text && !msg.text.startsWith('/') && this.textHandler) {
33
- this.textHandler(msg.text);
34
- }
35
- });
36
- // Voice message listener
37
- this.bot.on('voice', async (msg) => {
38
- if (!msg.from || !this.isAuthorized(msg.from.id))
39
- return;
40
- if (!msg.voice)
41
- return;
42
- this.setChatId(msg.chat.id);
43
- if (this.voiceHandler) {
44
- try {
45
- const fileLink = await this.bot.getFileLink(msg.voice.file_id);
46
- const tempPath = path.join(os.tmpdir(), `voice_${Date.now()}.ogg`);
47
- const response = await fetch(fileLink);
48
- const buffer = Buffer.from(await response.arrayBuffer());
49
- fs.writeFileSync(tempPath, buffer);
50
- this.voiceHandler(tempPath);
51
- }
52
- catch (err) {
53
- console.error('Error downloading voice message:', err);
54
- await this.sendText(`Error processing voice message: ${err.message}`);
55
- }
56
- }
57
- });
58
- // Photo message listener — batches album photos via media_group_id
59
- this.bot.on('photo', async (msg) => {
60
- if (!msg.from || !this.isAuthorized(msg.from.id))
61
- return;
62
- if (!msg.photo || msg.photo.length === 0)
63
- return;
64
- this.setChatId(msg.chat.id);
65
- if (!this.photoHandler)
66
- return;
67
- try {
68
- // Download the photo (largest resolution = last in array)
69
- const photo = msg.photo[msg.photo.length - 1];
70
- const fileLink = await this.bot.getFileLink(photo.file_id);
71
- const tempPath = path.join(os.tmpdir(), `photo_${Date.now()}_${Math.random().toString(36).slice(2, 6)}.jpg`);
72
- const response = await fetch(fileLink);
73
- const buffer = Buffer.from(await response.arrayBuffer());
74
- fs.writeFileSync(tempPath, buffer);
75
- const entry = { filePath: tempPath, caption: msg.caption || undefined };
76
- if (msg.media_group_id) {
77
- // Album photo — buffer and flush after 2s of no new photos
78
- const groupId = msg.media_group_id;
79
- const existing = this.photoBuffer.get(groupId);
80
- if (existing) {
81
- clearTimeout(existing.timer);
82
- existing.photos.push(entry);
83
- }
84
- else {
85
- this.photoBuffer.set(groupId, { photos: [entry], timer: null });
86
- }
87
- const group = this.photoBuffer.get(groupId);
88
- group.timer = setTimeout(() => {
89
- this.photoBuffer.delete(groupId);
90
- this.photoHandler(group.photos);
91
- }, 2000);
92
- }
93
- else {
94
- // Single photo — deliver immediately
95
- this.photoHandler([entry]);
96
- }
97
- }
98
- catch (err) {
99
- console.error('Error downloading photo:', err);
100
- await this.sendText(`Error processing photo: ${err.message}`);
101
- }
102
- });
103
- // Inline button callbacks — route by prefix
104
- this.bot.on('callback_query', async (query) => {
105
- if (!query.from || !this.isAuthorized(query.from.id))
106
- return;
107
- if (!query.data || !query.message)
108
- return;
109
- this.setChatId(query.message.chat.id);
110
- await this.bot.answerCallbackQuery(query.id);
111
- // Voice selection (index-based lookup)
112
- if (query.data.startsWith('voice_') && this.voiceSelectHandler) {
113
- const idx = parseInt(query.data.replace('voice_', ''), 10);
114
- const voice = this.pendingVoiceList[idx];
115
- if (voice) {
116
- this.voiceSelectHandler(voice.id, voice.name);
117
- }
118
- return;
119
- }
120
- // Generic prefix routing
121
- for (const [prefix, handler] of this.callbackHandlers) {
122
- if (query.data.startsWith(prefix)) {
123
- handler(query.data);
124
- return;
125
- }
126
- }
127
- });
34
+ this.polling = true;
35
+ this.pollLoop();
128
36
  console.log(`[${this.name}] Channel started (long polling)`);
129
37
  }
130
38
  stop() {
131
- this.bot.stopPolling();
39
+ this.polling = false;
40
+ // Cancel any in-flight getUpdates request
41
+ if (this.pollAbort) {
42
+ this.pollAbort.abort();
43
+ this.pollAbort = null;
44
+ }
45
+ // Clear any pending photo album timers
46
+ for (const [, group] of this.photoBuffer) {
47
+ clearTimeout(group.timer);
48
+ }
49
+ this.photoBuffer.clear();
132
50
  console.log(`[${this.name}] Channel stopped`);
133
51
  }
134
52
  onText(handler) {
@@ -141,13 +59,7 @@ export class TelegramChannel {
141
59
  this.photoHandler = handler;
142
60
  }
143
61
  onCommand(command, handler) {
144
- this.bot.onText(new RegExp(`^/${command}(.*)$`), (msg, match) => {
145
- if (!msg.from || !this.isAuthorized(msg.from.id))
146
- return;
147
- this.setChatId(msg.chat.id);
148
- const args = (match?.[1] || '').trim();
149
- handler(args);
150
- });
62
+ this.commandHandlers.set(command, handler);
151
63
  }
152
64
  onCallback(prefix, handler) {
153
65
  this.callbackHandlers.set(prefix, handler);
@@ -178,16 +90,7 @@ export class TelegramChannel {
178
90
  async sendVoice(audio) {
179
91
  if (!this.chatId)
180
92
  throw new Error('No active chat. Send a message from Telegram first.');
181
- const opts = this.keyboardMarkup();
182
- if (opts.reply_markup) {
183
- // sendVoice via library uses form-urlencoded; reply_markup must be JSON string
184
- await this.bot.sendVoice(this.chatId, audio, {
185
- reply_markup: JSON.stringify(opts.reply_markup),
186
- });
187
- }
188
- else {
189
- await this.bot.sendVoice(this.chatId, audio);
190
- }
93
+ await this.apiSendVoice(this.chatId, audio, this.keyboardMarkup());
191
94
  }
192
95
  async sendInlineKeyboard(text, buttons) {
193
96
  if (!this.chatId)
@@ -204,19 +107,6 @@ export class TelegramChannel {
204
107
  this.persistentKeyboard = buttons;
205
108
  console.log(`[Telegram] Keyboard set: ${buttons.flat().join(', ')}`);
206
109
  }
207
- /** Return reply_markup for the persistent keyboard, or empty object if none set. */
208
- keyboardMarkup() {
209
- if (!this.persistentKeyboard)
210
- return {};
211
- return {
212
- reply_markup: {
213
- keyboard: this.persistentKeyboard.map(row => row.map(text => ({ text }))),
214
- resize_keyboard: true,
215
- is_persistent: true,
216
- one_time_keyboard: false,
217
- },
218
- };
219
- }
220
110
  async sendTyping() {
221
111
  await this.sendChatAction('typing');
222
112
  }
@@ -224,7 +114,7 @@ export class TelegramChannel {
224
114
  if (!this.chatId)
225
115
  return;
226
116
  try {
227
- await this.bot.sendChatAction(this.chatId, action);
117
+ await this.apiCall('sendChatAction', { chat_id: this.chatId, action });
228
118
  }
229
119
  catch {
230
120
  // Ignore chat action failures
@@ -238,10 +128,8 @@ export class TelegramChannel {
238
128
  text: `${v.name} (${v.description})`,
239
129
  callback_data: `voice_${i}`,
240
130
  }]));
241
- await this.bot.sendMessage(this.chatId, 'Select a voice:', {
242
- reply_markup: {
243
- inline_keyboard: keyboard,
244
- },
131
+ await this.apiSendMessage(this.chatId, 'Select a voice:', {
132
+ reply_markup: { inline_keyboard: keyboard },
245
133
  });
246
134
  }
247
135
  onVoiceSelect(handler) {
@@ -250,25 +138,240 @@ export class TelegramChannel {
250
138
  isReady() {
251
139
  return this.chatId !== null;
252
140
  }
253
- setChatId(id) {
254
- this.chatId = id;
255
- }
256
- isAuthorized(userId) {
257
- return userId === this.authorizedUserId;
258
- }
259
- /** Send a message via Telegram API using JSON (avoids form-urlencoded escaping bugs). */
260
- async apiSendMessage(chatId, text, opts) {
261
- const body = { chat_id: chatId, text, ...opts };
262
- const res = await fetch(`https://api.telegram.org/bot${this.botToken}/sendMessage`, {
141
+ // --- Private: Telegram Bot API methods ---
142
+ /** Generic JSON API call to Telegram Bot API. */
143
+ async apiCall(method, body) {
144
+ const res = await fetch(`https://api.telegram.org/bot${this.botToken}/${method}`, {
263
145
  method: 'POST',
264
146
  headers: { 'Content-Type': 'application/json' },
265
147
  body: JSON.stringify(body),
266
148
  });
267
149
  const data = await res.json();
268
150
  if (!data.ok)
269
- throw new Error(`Telegram API error: ${data.description}`);
151
+ throw new Error(`Telegram API error (${method}): ${data.description}`);
270
152
  return data.result;
271
153
  }
154
+ /** Send a text message via Telegram API. */
155
+ async apiSendMessage(chatId, text, opts) {
156
+ return this.apiCall('sendMessage', { chat_id: chatId, text, ...opts });
157
+ }
158
+ /** Get a file download URL from a file_id. */
159
+ async apiGetFileLink(fileId) {
160
+ const file = await this.apiCall('getFile', { file_id: fileId });
161
+ return `https://api.telegram.org/file/bot${this.botToken}/${file.file_path}`;
162
+ }
163
+ /** Send a voice message (multipart/form-data for binary upload). */
164
+ async apiSendVoice(chatId, audio, opts) {
165
+ const form = new FormData();
166
+ form.append('chat_id', String(chatId));
167
+ form.append('voice', new Blob([new Uint8Array(audio)], { type: 'audio/ogg' }), 'voice.ogg');
168
+ if (opts?.reply_markup) {
169
+ form.append('reply_markup', JSON.stringify(opts.reply_markup));
170
+ }
171
+ const res = await fetch(`https://api.telegram.org/bot${this.botToken}/sendVoice`, {
172
+ method: 'POST',
173
+ body: form,
174
+ });
175
+ const data = await res.json();
176
+ if (!data.ok)
177
+ throw new Error(`Telegram API error (sendVoice): ${data.description}`);
178
+ return data.result;
179
+ }
180
+ /** Acknowledge a callback query. */
181
+ async apiAnswerCallbackQuery(callbackQueryId) {
182
+ await this.apiCall('answerCallbackQuery', { callback_query_id: callbackQueryId });
183
+ }
184
+ // --- Private: Polling loop ---
185
+ async pollLoop() {
186
+ let backoff = 1000;
187
+ while (this.polling) {
188
+ try {
189
+ this.pollAbort = new AbortController();
190
+ const url = `https://api.telegram.org/bot${this.botToken}/getUpdates`;
191
+ const res = await fetch(url, {
192
+ method: 'POST',
193
+ headers: { 'Content-Type': 'application/json' },
194
+ body: JSON.stringify({
195
+ offset: this.pollOffset,
196
+ timeout: 30,
197
+ allowed_updates: ['message', 'callback_query'],
198
+ }),
199
+ signal: this.pollAbort.signal,
200
+ });
201
+ if (!this.polling)
202
+ break;
203
+ if (res.status === 409) {
204
+ console.error(`[Telegram] 409 Conflict — another bot instance is polling. Retrying in 10s...`);
205
+ await this.sleep(10000);
206
+ continue;
207
+ }
208
+ const data = await res.json();
209
+ if (!data.ok) {
210
+ console.error(`[Telegram] getUpdates error: ${data.description}`);
211
+ await this.sleep(backoff);
212
+ backoff = Math.min(backoff * 2, 30000);
213
+ continue;
214
+ }
215
+ // Reset backoff on success
216
+ backoff = 1000;
217
+ for (const update of data.result) {
218
+ this.pollOffset = update.update_id + 1;
219
+ try {
220
+ await this.dispatchUpdate(update);
221
+ }
222
+ catch (err) {
223
+ console.error(`[Telegram] Error handling update ${update.update_id}:`, err);
224
+ }
225
+ }
226
+ }
227
+ catch (err) {
228
+ if (err.name === 'AbortError')
229
+ break; // Graceful shutdown
230
+ if (!this.polling)
231
+ break;
232
+ console.error(`[Telegram] Polling error:`, err.message);
233
+ await this.sleep(backoff);
234
+ backoff = Math.min(backoff * 2, 30000);
235
+ }
236
+ }
237
+ }
238
+ /** Route an update to the appropriate handler. */
239
+ async dispatchUpdate(update) {
240
+ if (update.callback_query) {
241
+ await this.handleCallbackQuery(update.callback_query);
242
+ return;
243
+ }
244
+ if (update.message) {
245
+ await this.handleMessage(update.message);
246
+ }
247
+ }
248
+ /** Handle an incoming message (text, voice, photo, or command). */
249
+ async handleMessage(msg) {
250
+ if (!msg.from || !this.isAuthorized(msg.from.id))
251
+ return;
252
+ this.setChatId(msg.chat.id);
253
+ // Voice message
254
+ if (msg.voice && this.voiceHandler) {
255
+ try {
256
+ const fileLink = await this.apiGetFileLink(msg.voice.file_id);
257
+ const tempPath = path.join(os.tmpdir(), `voice_${Date.now()}.ogg`);
258
+ const response = await fetch(fileLink);
259
+ const buffer = Buffer.from(await response.arrayBuffer());
260
+ fs.writeFileSync(tempPath, buffer);
261
+ this.voiceHandler(tempPath);
262
+ }
263
+ catch (err) {
264
+ console.error('Error downloading voice message:', err);
265
+ await this.sendText(`Error processing voice message: ${err.message}`);
266
+ }
267
+ return;
268
+ }
269
+ // Photo message — batches album photos via media_group_id
270
+ if (msg.photo && msg.photo.length > 0 && this.photoHandler) {
271
+ try {
272
+ const photo = msg.photo[msg.photo.length - 1];
273
+ const fileLink = await this.apiGetFileLink(photo.file_id);
274
+ const tempPath = path.join(os.tmpdir(), `photo_${Date.now()}_${Math.random().toString(36).slice(2, 6)}.jpg`);
275
+ const response = await fetch(fileLink);
276
+ const buffer = Buffer.from(await response.arrayBuffer());
277
+ fs.writeFileSync(tempPath, buffer);
278
+ const entry = { filePath: tempPath, caption: msg.caption || undefined };
279
+ // Capture handler ref for timer callback safety
280
+ const photoHandler = this.photoHandler;
281
+ if (msg.media_group_id) {
282
+ const groupId = msg.media_group_id;
283
+ const existing = this.photoBuffer.get(groupId);
284
+ if (existing) {
285
+ clearTimeout(existing.timer);
286
+ existing.photos.push(entry);
287
+ }
288
+ else {
289
+ this.photoBuffer.set(groupId, { photos: [entry], timer: null });
290
+ }
291
+ const group = this.photoBuffer.get(groupId);
292
+ group.timer = setTimeout(() => {
293
+ this.photoBuffer.delete(groupId);
294
+ photoHandler(group.photos);
295
+ }, 2000);
296
+ }
297
+ else {
298
+ photoHandler([entry]);
299
+ }
300
+ }
301
+ catch (err) {
302
+ console.error('Error downloading photo:', err);
303
+ await this.sendText(`Error processing photo: ${err.message}`);
304
+ }
305
+ return;
306
+ }
307
+ // Command messages
308
+ if (msg.text && msg.text.startsWith('/')) {
309
+ for (const [command, handler] of this.commandHandlers) {
310
+ const regex = new RegExp(`^/${command}(.*)$`);
311
+ const match = msg.text.match(regex);
312
+ if (match) {
313
+ const args = (match[1] || '').trim();
314
+ handler(args);
315
+ return;
316
+ }
317
+ }
318
+ }
319
+ // Plain text messages (non-commands)
320
+ if (msg.text && !msg.text.startsWith('/') && this.textHandler) {
321
+ this.textHandler(msg.text);
322
+ }
323
+ }
324
+ /** Handle a callback query (inline button press). */
325
+ async handleCallbackQuery(query) {
326
+ if (!this.isAuthorized(query.from.id))
327
+ return;
328
+ if (!query.data || !query.message)
329
+ return;
330
+ this.setChatId(query.message.chat.id);
331
+ await this.apiAnswerCallbackQuery(query.id);
332
+ // Voice selection (index-based lookup)
333
+ if (query.data.startsWith('voice_') && this.voiceSelectHandler) {
334
+ const idx = parseInt(query.data.replace('voice_', ''), 10);
335
+ const voice = this.pendingVoiceList[idx];
336
+ if (voice) {
337
+ this.voiceSelectHandler(voice.id, voice.name);
338
+ }
339
+ return;
340
+ }
341
+ // Generic prefix routing
342
+ for (const [prefix, handler] of this.callbackHandlers) {
343
+ if (query.data.startsWith(prefix)) {
344
+ handler(query.data);
345
+ return;
346
+ }
347
+ }
348
+ }
349
+ // --- Private: Utilities ---
350
+ /** Return reply_markup for the persistent keyboard, or empty object if none set. */
351
+ keyboardMarkup() {
352
+ if (!this.persistentKeyboard)
353
+ return {};
354
+ return {
355
+ reply_markup: {
356
+ keyboard: this.persistentKeyboard.map(row => row.map(text => ({ text }))),
357
+ resize_keyboard: true,
358
+ is_persistent: true,
359
+ one_time_keyboard: false,
360
+ },
361
+ };
362
+ }
363
+ setChatId(id) {
364
+ if (this.chatId !== id) {
365
+ this.chatId = id;
366
+ this.onChatIdChanged?.(id);
367
+ }
368
+ else {
369
+ this.chatId = id;
370
+ }
371
+ }
372
+ isAuthorized(userId) {
373
+ return userId === this.authorizedUserId;
374
+ }
272
375
  splitMessage(text) {
273
376
  const maxLen = 4096;
274
377
  const chunks = [];
@@ -286,5 +389,8 @@ export class TelegramChannel {
286
389
  }
287
390
  return chunks;
288
391
  }
392
+ sleep(ms) {
393
+ return new Promise(resolve => setTimeout(resolve, ms));
394
+ }
289
395
  }
290
396
  //# sourceMappingURL=telegram.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"telegram.js","sourceRoot":"","sources":["../../src/channels/telegram.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"telegram.js","sourceRoot":"","sources":["../../src/channels/telegram.ts"],"names":[],"mappings":"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"}
@@ -162,13 +162,15 @@ function loadConfig(bridgeUrl) {
162
162
  },
163
163
  };
164
164
  }
165
- function createChannel() {
165
+ function createChannel(state) {
166
166
  const botToken = process.env.TELEGRAM_BOT_TOKEN;
167
167
  const userId = process.env.TELEGRAM_USER_ID;
168
168
  if (botToken && userId) {
169
169
  return new TelegramChannel({
170
170
  botToken,
171
171
  authorizedUserId: parseInt(userId, 10),
172
+ chatId: state.getChatId() ?? undefined,
173
+ onChatIdChanged: (chatId) => state.setChatId(chatId),
172
174
  });
173
175
  }
174
176
  return null;
@@ -1104,10 +1106,10 @@ function setupChannel(channel, bridge, state, kanban, actionFilter, voiceConfig)
1104
1106
  async function main() {
1105
1107
  const bridgeUrl = await detectBridgeUrl();
1106
1108
  const { service: serviceConfig, voice: voiceConfig } = loadConfig(bridgeUrl);
1107
- const channel = createChannel();
1109
+ const state = new StateManager();
1110
+ const channel = createChannel(state);
1108
1111
  logConfigStatus(channel, voiceConfig, serviceConfig.bridgeUrl);
1109
1112
  const bridge = new BridgeClient(serviceConfig.bridgeUrl);
1110
- const state = new StateManager();
1111
1113
  const kanban = new KanbanClient(state.getProjects());
1112
1114
  const actionFilter = new SlyActionFilter();
1113
1115
  console.log(`Projects loaded: ${state.getProjects().length}`);