@cogitator-ai/channels 0.2.5 → 0.4.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 (133) hide show
  1. package/README.md +142 -40
  2. package/dist/assistant-config.d.ts +1 -0
  3. package/dist/assistant-config.d.ts.map +1 -1
  4. package/dist/assistant-config.js +1 -0
  5. package/dist/assistant-config.js.map +1 -1
  6. package/dist/channels/discord.d.ts +4 -0
  7. package/dist/channels/discord.d.ts.map +1 -1
  8. package/dist/channels/discord.js +123 -59
  9. package/dist/channels/discord.js.map +1 -1
  10. package/dist/channels/slack.d.ts +9 -0
  11. package/dist/channels/slack.d.ts.map +1 -1
  12. package/dist/channels/slack.js +153 -34
  13. package/dist/channels/slack.js.map +1 -1
  14. package/dist/channels/telegram.d.ts +13 -0
  15. package/dist/channels/telegram.d.ts.map +1 -1
  16. package/dist/channels/telegram.js +206 -111
  17. package/dist/channels/telegram.js.map +1 -1
  18. package/dist/channels/terminal.d.ts +10 -0
  19. package/dist/channels/terminal.d.ts.map +1 -1
  20. package/dist/channels/terminal.js +46 -10
  21. package/dist/channels/terminal.js.map +1 -1
  22. package/dist/channels/webchat.d.ts +7 -2
  23. package/dist/channels/webchat.d.ts.map +1 -1
  24. package/dist/channels/webchat.js +112 -50
  25. package/dist/channels/webchat.js.map +1 -1
  26. package/dist/channels/whatsapp.d.ts +19 -3
  27. package/dist/channels/whatsapp.d.ts.map +1 -1
  28. package/dist/channels/whatsapp.js +204 -66
  29. package/dist/channels/whatsapp.js.map +1 -1
  30. package/dist/cron.d.ts +2 -0
  31. package/dist/cron.d.ts.map +1 -0
  32. package/dist/cron.js +9 -0
  33. package/dist/cron.js.map +1 -0
  34. package/dist/envelope.d.ts.map +1 -1
  35. package/dist/envelope.js +7 -6
  36. package/dist/envelope.js.map +1 -1
  37. package/dist/formatters/code-protect.d.ts +2 -0
  38. package/dist/formatters/code-protect.d.ts.map +1 -0
  39. package/dist/formatters/code-protect.js +12 -0
  40. package/dist/formatters/code-protect.js.map +1 -0
  41. package/dist/formatters/markdown.d.ts +1 -1
  42. package/dist/formatters/markdown.d.ts.map +1 -1
  43. package/dist/formatters/markdown.js +79 -21
  44. package/dist/formatters/markdown.js.map +1 -1
  45. package/dist/formatters/whatsapp-markdown.d.ts.map +1 -1
  46. package/dist/formatters/whatsapp-markdown.js +7 -21
  47. package/dist/formatters/whatsapp-markdown.js.map +1 -1
  48. package/dist/gateway.d.ts +32 -3
  49. package/dist/gateway.d.ts.map +1 -1
  50. package/dist/gateway.js +275 -174
  51. package/dist/gateway.js.map +1 -1
  52. package/dist/heartbeat.d.ts +9 -2
  53. package/dist/heartbeat.d.ts.map +1 -1
  54. package/dist/heartbeat.js +121 -84
  55. package/dist/heartbeat.js.map +1 -1
  56. package/dist/inbound-debounce.js +2 -2
  57. package/dist/inbound-debounce.js.map +1 -1
  58. package/dist/index.d.ts +6 -3
  59. package/dist/index.d.ts.map +1 -1
  60. package/dist/index.js +2 -1
  61. package/dist/index.js.map +1 -1
  62. package/dist/media/audio-format.d.ts +3 -0
  63. package/dist/media/audio-format.d.ts.map +1 -0
  64. package/dist/media/audio-format.js +20 -0
  65. package/dist/media/audio-format.js.map +1 -0
  66. package/dist/media/deepgram-stt.d.ts +1 -1
  67. package/dist/media/deepgram-stt.d.ts.map +1 -1
  68. package/dist/media/deepgram-stt.js +4 -3
  69. package/dist/media/deepgram-stt.js.map +1 -1
  70. package/dist/media/media-processor.d.ts +12 -1
  71. package/dist/media/media-processor.d.ts.map +1 -1
  72. package/dist/media/media-processor.js +75 -18
  73. package/dist/media/media-processor.js.map +1 -1
  74. package/dist/media/whisper-api.d.ts.map +1 -1
  75. package/dist/media/whisper-api.js +21 -33
  76. package/dist/media/whisper-api.js.map +1 -1
  77. package/dist/media/whisper-local.d.ts +1 -0
  78. package/dist/media/whisper-local.d.ts.map +1 -1
  79. package/dist/media/whisper-local.js +106 -50
  80. package/dist/media/whisper-local.js.map +1 -1
  81. package/dist/message-queue.d.ts +1 -0
  82. package/dist/message-queue.d.ts.map +1 -1
  83. package/dist/message-queue.js +17 -10
  84. package/dist/message-queue.js.map +1 -1
  85. package/dist/middleware/auto-extract.d.ts +2 -0
  86. package/dist/middleware/auto-extract.d.ts.map +1 -1
  87. package/dist/middleware/auto-extract.js +94 -30
  88. package/dist/middleware/auto-extract.js.map +1 -1
  89. package/dist/middleware/dm-policy.d.ts +2 -1
  90. package/dist/middleware/dm-policy.d.ts.map +1 -1
  91. package/dist/middleware/dm-policy.js +26 -27
  92. package/dist/middleware/dm-policy.js.map +1 -1
  93. package/dist/middleware/owner-commands.d.ts +1 -1
  94. package/dist/middleware/owner-commands.d.ts.map +1 -1
  95. package/dist/middleware/owner-commands.js +8 -7
  96. package/dist/middleware/owner-commands.js.map +1 -1
  97. package/dist/middleware/pairing-codes.d.ts +12 -0
  98. package/dist/middleware/pairing-codes.d.ts.map +1 -0
  99. package/dist/middleware/pairing-codes.js +26 -0
  100. package/dist/middleware/pairing-codes.js.map +1 -0
  101. package/dist/middleware/pairing.d.ts +3 -3
  102. package/dist/middleware/pairing.d.ts.map +1 -1
  103. package/dist/middleware/pairing.js +18 -25
  104. package/dist/middleware/pairing.js.map +1 -1
  105. package/dist/middleware/rate-limit.d.ts +3 -1
  106. package/dist/middleware/rate-limit.d.ts.map +1 -1
  107. package/dist/middleware/rate-limit.js +21 -6
  108. package/dist/middleware/rate-limit.js.map +1 -1
  109. package/dist/runtime-builder.d.ts +11 -0
  110. package/dist/runtime-builder.d.ts.map +1 -1
  111. package/dist/runtime-builder.js +212 -62
  112. package/dist/runtime-builder.js.map +1 -1
  113. package/dist/simple-timer-store.d.ts +6 -0
  114. package/dist/simple-timer-store.d.ts.map +1 -1
  115. package/dist/simple-timer-store.js +8 -1
  116. package/dist/simple-timer-store.js.map +1 -1
  117. package/dist/stream-buffer.d.ts +14 -7
  118. package/dist/stream-buffer.d.ts.map +1 -1
  119. package/dist/stream-buffer.js +129 -84
  120. package/dist/stream-buffer.js.map +1 -1
  121. package/dist/tools/path-guard.d.ts +4 -0
  122. package/dist/tools/path-guard.d.ts.map +1 -0
  123. package/dist/tools/path-guard.js +53 -0
  124. package/dist/tools/path-guard.js.map +1 -0
  125. package/dist/tools/self-config.d.ts +12 -2
  126. package/dist/tools/self-config.d.ts.map +1 -1
  127. package/dist/tools/self-config.js +53 -16
  128. package/dist/tools/self-config.js.map +1 -1
  129. package/package.json +27 -21
  130. package/dist/media/index.d.ts +0 -7
  131. package/dist/media/index.d.ts.map +0 -1
  132. package/dist/media/index.js +0 -5
  133. package/dist/media/index.js.map +0 -1
@@ -1,16 +1,35 @@
1
+ import { createServer } from 'node:http';
2
+ const NOT_MODIFIED = 'message is not modified';
3
+ function errorMessage(err) {
4
+ return err instanceof Error ? err.message : String(err);
5
+ }
6
+ function isEntityParseError(err) {
7
+ const msg = errorMessage(err);
8
+ return msg.includes("can't parse entities") || msg.includes("Bad Request: can't parse");
9
+ }
10
+ function isNotModifiedError(err) {
11
+ return errorMessage(err).includes(NOT_MODIFIED);
12
+ }
1
13
  export class TelegramChannel {
2
14
  config;
3
15
  type = 'telegram';
4
16
  handler = null;
5
17
  bot = null;
18
+ grammy = null;
19
+ server = null;
6
20
  constructor(config) {
7
21
  this.config = config;
8
22
  }
9
23
  onMessage(handler) {
10
24
  this.handler = handler;
11
25
  }
26
+ requireBot() {
27
+ if (!this.bot)
28
+ throw new Error('Telegram channel is not started');
29
+ return this.bot;
30
+ }
12
31
  async downloadFile(fileId) {
13
- const bot = this.bot;
32
+ const bot = this.requireBot();
14
33
  const file = await bot.api.getFile(fileId);
15
34
  if (!file.file_path)
16
35
  throw new Error('Telegram returned no file_path');
@@ -21,6 +40,7 @@ export class TelegramChannel {
21
40
  return Buffer.from(await resp.arrayBuffer());
22
41
  }
23
42
  buildBaseMessage(ctx) {
43
+ const replyTo = ctx.message.reply_to_message?.message_id;
24
44
  return {
25
45
  id: String(ctx.message.message_id),
26
46
  channelType: 'telegram',
@@ -28,9 +48,28 @@ export class TelegramChannel {
28
48
  userId: String(ctx.from.id),
29
49
  userName: ctx.from.first_name + (ctx.from.last_name ? ` ${ctx.from.last_name}` : ''),
30
50
  groupId: ctx.chat.type !== 'private' ? String(ctx.chat.id) : undefined,
51
+ ...(replyTo !== undefined ? { replyTo: String(replyTo) } : {}),
31
52
  };
32
53
  }
54
+ async emitWithFile(ctx, file, attachment) {
55
+ if (!this.handler)
56
+ return;
57
+ try {
58
+ const buffer = await this.downloadFile(file.file_id);
59
+ await this.handler({
60
+ ...this.buildBaseMessage(ctx),
61
+ text: ctx.message.caption ?? '',
62
+ attachments: [{ ...attachment, buffer }],
63
+ raw: ctx,
64
+ });
65
+ }
66
+ catch (err) {
67
+ console.error(`[telegram] Failed to process ${attachment.type}:`, errorMessage(err));
68
+ }
69
+ }
33
70
  async start() {
71
+ if (this.bot)
72
+ return;
34
73
  let grammy;
35
74
  try {
36
75
  grammy = (await import('grammy'));
@@ -38,6 +77,7 @@ export class TelegramChannel {
38
77
  catch {
39
78
  throw new Error('grammy is required for Telegram support. Install it: pnpm add grammy');
40
79
  }
80
+ this.grammy = grammy;
41
81
  const bot = new grammy.Bot(this.config.token);
42
82
  this.bot = bot;
43
83
  bot.catch((err) => {
@@ -53,145 +93,212 @@ export class TelegramChannel {
53
93
  });
54
94
  });
55
95
  bot.on('message:photo', async (ctx) => {
56
- if (!this.handler || !ctx.message.photo?.length)
96
+ const photos = ctx.message.photo;
97
+ if (!photos?.length)
57
98
  return;
58
- try {
59
- const largest = ctx.message.photo[ctx.message.photo.length - 1];
60
- const buffer = await this.downloadFile(largest.file_id);
61
- await this.handler({
62
- ...this.buildBaseMessage(ctx),
63
- text: ctx.message.caption ?? '',
64
- attachments: [{ type: 'image', mimeType: 'image/jpeg', buffer }],
65
- raw: ctx,
66
- });
67
- }
68
- catch (err) {
69
- console.error('[telegram] Failed to download photo:', err.message);
70
- }
99
+ await this.emitWithFile(ctx, photos[photos.length - 1], {
100
+ type: 'image',
101
+ mimeType: 'image/jpeg',
102
+ });
71
103
  });
72
104
  bot.on('message:voice', async (ctx) => {
73
- if (!this.handler || !ctx.message.voice)
105
+ const voice = ctx.message.voice;
106
+ if (!voice)
74
107
  return;
75
- try {
76
- const buffer = await this.downloadFile(ctx.message.voice.file_id);
77
- await this.handler({
78
- ...this.buildBaseMessage(ctx),
79
- text: ctx.message.caption ?? '',
80
- attachments: [
81
- {
82
- type: 'audio',
83
- mimeType: ctx.message.voice.mime_type ?? 'audio/ogg',
84
- buffer,
85
- filename: 'voice.ogg',
86
- },
87
- ],
88
- raw: ctx,
89
- });
90
- }
91
- catch (err) {
92
- console.error('[telegram] Failed to download voice:', err.message);
93
- }
108
+ await this.emitWithFile(ctx, voice, {
109
+ type: 'audio',
110
+ mimeType: voice.mime_type ?? 'audio/ogg',
111
+ filename: 'voice.ogg',
112
+ });
94
113
  });
95
- bot.on('message:document', async (ctx) => {
96
- if (!this.handler || !ctx.message.document)
114
+ bot.on('message:audio', async (ctx) => {
115
+ const audio = ctx.message.audio;
116
+ if (!audio)
97
117
  return;
118
+ await this.emitWithFile(ctx, audio, {
119
+ type: 'audio',
120
+ mimeType: audio.mime_type ?? 'audio/mpeg',
121
+ filename: audio.file_name,
122
+ });
123
+ });
124
+ bot.on('message:video', async (ctx) => {
125
+ const video = ctx.message.video;
126
+ if (!video)
127
+ return;
128
+ await this.emitWithFile(ctx, video, {
129
+ type: 'video',
130
+ mimeType: video.mime_type ?? 'video/mp4',
131
+ filename: video.file_name,
132
+ });
133
+ });
134
+ bot.on('message:document', async (ctx) => {
98
135
  const doc = ctx.message.document;
99
- const isImage = doc.mime_type?.startsWith('image/');
100
- try {
101
- const buffer = await this.downloadFile(doc.file_id);
102
- await this.handler({
103
- ...this.buildBaseMessage(ctx),
104
- text: ctx.message.caption ?? '',
105
- attachments: [
106
- {
107
- type: isImage ? 'image' : 'file',
108
- mimeType: doc.mime_type ?? 'application/octet-stream',
109
- buffer,
110
- filename: doc.file_name,
111
- },
112
- ],
113
- raw: ctx,
136
+ if (!doc)
137
+ return;
138
+ const isImage = doc.mime_type?.startsWith('image/') ?? false;
139
+ await this.emitWithFile(ctx, doc, {
140
+ type: isImage ? 'image' : 'file',
141
+ mimeType: doc.mime_type ?? 'application/octet-stream',
142
+ filename: doc.file_name,
143
+ });
144
+ });
145
+ try {
146
+ if (this.config.webhook) {
147
+ await this.startWebhook(bot, grammy, this.config.webhook);
148
+ }
149
+ else {
150
+ await new Promise((resolve, reject) => {
151
+ bot
152
+ .start({
153
+ drop_pending_updates: true,
154
+ ...(this.config.allowedUpdates
155
+ ? { allowed_updates: this.config.allowedUpdates }
156
+ : {}),
157
+ onStart: () => resolve(),
158
+ })
159
+ .catch(reject);
114
160
  });
115
161
  }
116
- catch (err) {
117
- console.error('[telegram] Failed to download document:', err.message);
162
+ }
163
+ catch (err) {
164
+ this.bot = null;
165
+ await this.closeServer();
166
+ throw err;
167
+ }
168
+ }
169
+ async startWebhook(bot, grammy, webhook) {
170
+ await bot.init();
171
+ const handle = grammy.webhookCallback(bot, 'http', {
172
+ ...(webhook.secretToken ? { secretToken: webhook.secretToken } : {}),
173
+ });
174
+ const path = webhook.path ?? (new URL(webhook.url).pathname || '/');
175
+ const server = createServer((req, res) => {
176
+ const reqPath = new URL(req.url ?? '/', 'http://localhost').pathname;
177
+ if (req.method !== 'POST' || reqPath !== path) {
178
+ res.statusCode = 404;
179
+ res.end();
180
+ return;
118
181
  }
182
+ handle(req, res).catch((err) => {
183
+ console.error('[telegram] Webhook handler error:', errorMessage(err));
184
+ if (!res.headersSent)
185
+ res.statusCode = 500;
186
+ res.end();
187
+ });
119
188
  });
120
- if (this.config.webhook) {
121
- await bot.api.setWebhook(this.config.webhook.url);
122
- }
123
- else {
124
- await new Promise((resolve, reject) => {
125
- bot
126
- .start({
127
- drop_pending_updates: true,
128
- onStart: () => resolve(),
129
- })
130
- .catch(reject);
189
+ await new Promise((resolve, reject) => {
190
+ server.once('error', reject);
191
+ server.listen(webhook.port, () => {
192
+ server.off('error', reject);
193
+ resolve();
131
194
  });
132
- }
195
+ });
196
+ this.server = server;
197
+ await bot.api.setWebhook(webhook.url, {
198
+ drop_pending_updates: true,
199
+ ...(this.config.allowedUpdates ? { allowed_updates: this.config.allowedUpdates } : {}),
200
+ ...(webhook.secretToken ? { secret_token: webhook.secretToken } : {}),
201
+ });
202
+ }
203
+ async closeServer() {
204
+ const server = this.server;
205
+ if (!server)
206
+ return;
207
+ this.server = null;
208
+ await new Promise((resolve) => server.close(() => resolve()));
133
209
  }
134
210
  async stop() {
135
- if (this.bot) {
136
- await this.bot.stop();
137
- this.bot = null;
211
+ const bot = this.bot;
212
+ if (!bot)
213
+ return;
214
+ this.bot = null;
215
+ if (this.config.webhook) {
216
+ await this.closeServer();
217
+ }
218
+ else {
219
+ await bot.stop();
138
220
  }
139
221
  }
140
222
  async sendText(channelId, text, options) {
141
- if (!this.bot)
142
- return '';
223
+ const bot = this.requireBot();
143
224
  const chatId = Number(channelId);
144
225
  const useMarkdown = options?.format === 'markdown';
145
226
  const baseOpts = {
146
- ...(options?.replyTo ? { reply_parameters: { message_id: Number(options.replyTo) } } : {}),
227
+ ...(options?.replyTo
228
+ ? {
229
+ reply_parameters: {
230
+ message_id: Number(options.replyTo),
231
+ allow_sending_without_reply: true,
232
+ },
233
+ }
234
+ : {}),
147
235
  ...(options?.silent ? { disable_notification: true } : {}),
148
236
  };
149
237
  if (useMarkdown) {
150
238
  try {
151
- const sent = await this.bot.api.sendMessage(chatId, text, {
239
+ const sent = await bot.api.sendMessage(chatId, text, {
152
240
  ...baseOpts,
153
241
  parse_mode: 'Markdown',
154
242
  });
155
243
  return String(sent.message_id);
156
244
  }
157
245
  catch (err) {
158
- if (isEntityParseError(err)) {
159
- const sent = await this.bot.api.sendMessage(chatId, text, baseOpts);
160
- return String(sent.message_id);
161
- }
162
- throw err;
246
+ if (!isEntityParseError(err))
247
+ throw err;
163
248
  }
164
249
  }
165
- const sent = await this.bot.api.sendMessage(chatId, text, baseOpts);
250
+ const sent = await bot.api.sendMessage(chatId, text, baseOpts);
166
251
  return String(sent.message_id);
167
252
  }
168
253
  async editText(channelId, messageId, text) {
169
- if (!this.bot)
170
- return;
254
+ const bot = this.requireBot();
255
+ const chatId = Number(channelId);
256
+ const msgId = Number(messageId);
171
257
  try {
172
- await this.bot.api.editMessageText(Number(channelId), Number(messageId), text, {
173
- parse_mode: 'Markdown',
174
- });
258
+ await bot.api.editMessageText(chatId, msgId, text, { parse_mode: 'Markdown' });
259
+ return;
175
260
  }
176
261
  catch (err) {
177
- if (isEntityParseError(err)) {
178
- try {
179
- await this.bot.api.editMessageText(Number(channelId), Number(messageId), text);
180
- }
181
- catch { }
262
+ if (isNotModifiedError(err))
182
263
  return;
183
- }
264
+ if (!isEntityParseError(err))
265
+ throw err;
266
+ }
267
+ try {
268
+ await bot.api.editMessageText(chatId, msgId, text);
269
+ }
270
+ catch (err) {
271
+ if (!isNotModifiedError(err))
272
+ throw err;
184
273
  }
185
274
  }
186
275
  async sendFile(channelId, file) {
187
- if (!this.bot)
188
- return;
276
+ const bot = this.requireBot();
189
277
  const chatId = Number(channelId);
190
- if (file.type === 'image' && file.url) {
191
- await this.bot.api.sendPhoto(chatId, file.url);
278
+ let source;
279
+ if (file.buffer) {
280
+ if (!this.grammy)
281
+ throw new Error('Telegram channel is not started');
282
+ source = new this.grammy.InputFile(file.buffer, file.filename);
192
283
  }
193
284
  else if (file.url) {
194
- await this.bot.api.sendDocument(chatId, file.url);
285
+ source = file.url;
286
+ }
287
+ else {
288
+ throw new Error('Attachment must have either a buffer or a url');
289
+ }
290
+ switch (file.type) {
291
+ case 'image':
292
+ await bot.api.sendPhoto(chatId, source);
293
+ return;
294
+ case 'audio':
295
+ await bot.api.sendAudio(chatId, source);
296
+ return;
297
+ case 'video':
298
+ await bot.api.sendVideo(chatId, source);
299
+ return;
300
+ default:
301
+ await bot.api.sendDocument(chatId, source);
195
302
  }
196
303
  }
197
304
  async sendTyping(channelId) {
@@ -200,21 +307,15 @@ export class TelegramChannel {
200
307
  await this.bot.api.sendChatAction(Number(channelId), 'typing');
201
308
  }
202
309
  async sendDraft(channelId, draftId, text, options) {
203
- if (!this.bot)
204
- return;
205
- const chatId = Number(channelId);
310
+ const bot = this.requireBot();
206
311
  const useMarkdown = options?.format === 'markdown';
207
- await this.bot.api.sendMessageDraft(chatId, draftId, text, {
312
+ await bot.api.sendMessageDraft(Number(channelId), draftId, text, {
208
313
  ...(useMarkdown ? { parse_mode: 'Markdown' } : {}),
209
314
  });
210
315
  }
211
316
  async deleteMessage(channelId, messageId) {
212
- if (!this.bot)
213
- return;
214
- try {
215
- await this.bot.api.deleteMessage(Number(channelId), Number(messageId));
216
- }
217
- catch { }
317
+ const bot = this.requireBot();
318
+ await bot.api.deleteMessage(Number(channelId), Number(messageId));
218
319
  }
219
320
  async setReaction(channelId, messageId, emoji) {
220
321
  if (!this.bot)
@@ -224,12 +325,6 @@ export class TelegramChannel {
224
325
  ]);
225
326
  }
226
327
  }
227
- function isEntityParseError(err) {
228
- if (!(err instanceof Error))
229
- return false;
230
- const msg = err.message;
231
- return msg.includes("can't parse entities") || msg.includes("Bad Request: can't parse");
232
- }
233
328
  export function telegramChannel(config) {
234
329
  return new TelegramChannel(config);
235
330
  }
@@ -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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"}
@@ -3,6 +3,11 @@ export interface TerminalConfig {
3
3
  userName?: string;
4
4
  userId?: string;
5
5
  prompt?: string;
6
+ /**
7
+ * Called when the user asks to leave (Ctrl+C, Ctrl+D, `/quit`).
8
+ * Defaults to raising SIGINT so the host application can shut down gracefully.
9
+ */
10
+ onExit?: () => void;
6
11
  }
7
12
  export declare class TerminalChannel implements Channel {
8
13
  readonly type: ChannelType;
@@ -11,9 +16,12 @@ export declare class TerminalChannel implements Channel {
11
16
  private msgCounter;
12
17
  private lastLineCount;
13
18
  private responding;
19
+ private questionPending;
20
+ private closing;
14
21
  private readonly userName;
15
22
  private readonly userId;
16
23
  private readonly promptStr;
24
+ private readonly onExit?;
17
25
  constructor(config?: TerminalConfig);
18
26
  onMessage(handler: (msg: ChannelMessage) => Promise<void>): void;
19
27
  start(): Promise<void>;
@@ -22,6 +30,8 @@ export declare class TerminalChannel implements Channel {
22
30
  editText(_channelId: string, _messageId: string, text: string): Promise<void>;
23
31
  sendFile(_channelId: string, file: Attachment): Promise<void>;
24
32
  sendTyping(): Promise<void>;
33
+ private requestExit;
34
+ private countRenderedLines;
25
35
  private writeOutput;
26
36
  private showPrompt;
27
37
  private handleInput;
@@ -1 +1 @@
1
- {"version":3,"file":"terminal.d.ts","sourceRoot":"","sources":["../../src/channels/terminal.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,OAAO,EACP,cAAc,EACd,WAAW,EACX,UAAU,EACV,WAAW,EACZ,MAAM,qBAAqB,CAAC;AAE7B,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,eAAgB,YAAW,OAAO;IAC7C,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAc;IACxC,OAAO,CAAC,OAAO,CAAyD;IACxE,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;gBAEvB,MAAM,GAAE,cAAmB;IAMvC,SAAS,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAI1D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAgBtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAOrB,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC;IAQnF,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAO7E,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAM7D,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAEjC,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,UAAU;YAOJ,WAAW;CAuC1B;AAED,wBAAgB,eAAe,CAAC,MAAM,CAAC,EAAE,cAAc,GAAG,OAAO,CAEhE"}
1
+ {"version":3,"file":"terminal.d.ts","sourceRoot":"","sources":["../../src/channels/terminal.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,OAAO,EACP,cAAc,EACd,WAAW,EACX,UAAU,EACV,WAAW,EACZ,MAAM,qBAAqB,CAAC;AAE7B,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACrB;AAID,qBAAa,eAAgB,YAAW,OAAO;IAC7C,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAc;IACxC,OAAO,CAAC,OAAO,CAAyD;IACxE,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAa;gBAEzB,MAAM,GAAE,cAAmB;IAOvC,SAAS,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAI1D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAsBtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAUrB,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC;IASnF,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAO7E,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAM7D,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAEjC,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,kBAAkB;IAM1B,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,UAAU;YASJ,WAAW;CAwC1B;AAED,wBAAgB,eAAe,CAAC,MAAM,CAAC,EAAE,cAAc,GAAG,OAAO,CAEhE"}
@@ -1,5 +1,6 @@
1
1
  import { createInterface } from 'node:readline';
2
2
  import { userInfo } from 'node:os';
3
+ const EXIT_COMMANDS = new Set(['/quit', '/exit', 'exit']);
3
4
  export class TerminalChannel {
4
5
  type = 'terminal';
5
6
  handler = null;
@@ -7,41 +8,59 @@ export class TerminalChannel {
7
8
  msgCounter = 0;
8
9
  lastLineCount = 0;
9
10
  responding = false;
11
+ questionPending = false;
12
+ closing = false;
10
13
  userName;
11
14
  userId;
12
15
  promptStr;
16
+ onExit;
13
17
  constructor(config = {}) {
14
18
  this.userName = config.userName || userInfo().username;
15
19
  this.userId = config.userId || 'owner';
16
20
  this.promptStr = config.prompt || '> ';
21
+ this.onExit = config.onExit;
17
22
  }
18
23
  onMessage(handler) {
19
24
  this.handler = handler;
20
25
  }
21
26
  async start() {
27
+ if (this.rl)
28
+ return;
22
29
  if (!process.stdin.isTTY && !process.env.COGITATOR_FORCE_TERMINAL)
23
30
  return;
24
- this.rl = createInterface({
31
+ this.closing = false;
32
+ const rl = createInterface({
25
33
  input: process.stdin,
26
34
  output: process.stdout,
27
35
  terminal: true,
28
36
  });
29
- this.rl.on('close', () => {
30
- process.exit(0);
37
+ this.rl = rl;
38
+ rl.on('SIGINT', () => this.requestExit());
39
+ rl.on('close', () => {
40
+ this.rl = null;
41
+ this.questionPending = false;
42
+ if (!this.closing)
43
+ this.requestExit();
31
44
  });
32
45
  this.showPrompt();
33
46
  }
34
47
  async stop() {
35
48
  if (this.rl) {
36
- this.rl.close();
49
+ this.closing = true;
50
+ const rl = this.rl;
37
51
  this.rl = null;
52
+ this.questionPending = false;
53
+ rl.close();
38
54
  }
39
55
  }
40
56
  async sendText(_channelId, text, _options) {
41
57
  const id = `term_${++this.msgCounter}`;
58
+ const unsolicited = !this.responding && this.questionPending;
59
+ if (unsolicited)
60
+ process.stdout.write('\r\x1b[K');
42
61
  this.writeOutput(text);
43
- this.responding = false;
44
- this.showPrompt();
62
+ if (unsolicited)
63
+ this.rl?.prompt(true);
45
64
  return id;
46
65
  }
47
66
  async editText(_channelId, _messageId, text) {
@@ -56,15 +75,30 @@ export class TerminalChannel {
56
75
  process.stdout.write(` [${label}]${url}\n`);
57
76
  }
58
77
  async sendTyping() { }
78
+ requestExit() {
79
+ if (this.onExit) {
80
+ this.onExit();
81
+ return;
82
+ }
83
+ process.kill(process.pid, 'SIGINT');
84
+ }
85
+ countRenderedLines(lines) {
86
+ const columns = process.stdout.columns;
87
+ if (!columns || columns <= 0)
88
+ return lines.length;
89
+ return lines.reduce((sum, line) => sum + Math.max(1, Math.ceil(line.length / columns)), 0);
90
+ }
59
91
  writeOutput(text) {
60
92
  const lines = text.split('\n');
61
- this.lastLineCount = lines.length;
93
+ this.lastLineCount = this.countRenderedLines(lines);
62
94
  process.stdout.write(lines.join('\n') + '\n');
63
95
  }
64
96
  showPrompt() {
65
- if (!this.rl || this.responding)
97
+ if (!this.rl || this.responding || this.questionPending)
66
98
  return;
99
+ this.questionPending = true;
67
100
  this.rl.question(this.promptStr, (input) => {
101
+ this.questionPending = false;
68
102
  void this.handleInput(input);
69
103
  });
70
104
  }
@@ -74,8 +108,8 @@ export class TerminalChannel {
74
108
  this.showPrompt();
75
109
  return;
76
110
  }
77
- if (text === '/quit' || text === '/exit' || text === 'exit') {
78
- await this.stop();
111
+ if (EXIT_COMMANDS.has(text)) {
112
+ this.requestExit();
79
113
  return;
80
114
  }
81
115
  if (!this.handler) {
@@ -99,6 +133,8 @@ export class TerminalChannel {
99
133
  catch (err) {
100
134
  const errMsg = err instanceof Error ? err.message : String(err);
101
135
  process.stdout.write(`Error: ${errMsg}\n`);
136
+ }
137
+ finally {
102
138
  this.responding = false;
103
139
  this.showPrompt();
104
140
  }
@@ -1 +1 @@
1
- {"version":3,"file":"terminal.js","sourceRoot":"","sources":["../../src/channels/terminal.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"terminal.js","sourceRoot":"","sources":["../../src/channels/terminal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAkB,MAAM,eAAe,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAoBnC,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;AAE1D,MAAM,OAAO,eAAe;IACjB,IAAI,GAAgB,UAAU,CAAC;IAChC,OAAO,GAAoD,IAAI,CAAC;IAChE,EAAE,GAAqB,IAAI,CAAC;IAC5B,UAAU,GAAG,CAAC,CAAC;IACf,aAAa,GAAG,CAAC,CAAC;IAClB,UAAU,GAAG,KAAK,CAAC;IACnB,eAAe,GAAG,KAAK,CAAC;IACxB,OAAO,GAAG,KAAK,CAAC;IACP,QAAQ,CAAS;IACjB,MAAM,CAAS;IACf,SAAS,CAAS;IAClB,MAAM,CAAc;IAErC,YAAY,SAAyB,EAAE;QACrC,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,QAAQ,EAAE,CAAC,QAAQ,CAAC;QACvD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,OAAO,CAAC;QACvC,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC;QACvC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAC9B,CAAC;IAED,SAAS,CAAC,OAA+C;QACvD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,EAAE;YAAE,OAAO;QACpB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,wBAAwB;YAAE,OAAO;QAE1E,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,MAAM,EAAE,GAAG,eAAe,CAAC;YACzB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,QAAQ,EAAE,IAAI;SACf,CAAC,CAAC;QACH,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QAEb,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QAC1C,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YAClB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;YACf,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;YAC7B,IAAI,CAAC,IAAI,CAAC,OAAO;gBAAE,IAAI,CAAC,WAAW,EAAE,CAAC;QACxC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,UAAU,EAAE,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YACZ,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YACpB,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;YACnB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;YACf,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;YAC7B,EAAE,CAAC,KAAK,EAAE,CAAC;QACb,CAAC;IACH,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,UAAkB,EAAE,IAAY,EAAE,QAAsB;QACrE,MAAM,EAAE,GAAG,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;QACvC,MAAM,WAAW,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,eAAe,CAAC;QAC7D,IAAI,WAAW;YAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAClD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACvB,IAAI,WAAW;YAAE,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QACvC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,UAAkB,EAAE,UAAkB,EAAE,IAAY;QACjE,IAAI,IAAI,CAAC,aAAa,GAAG,CAAC,EAAE,CAAC;YAC3B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,aAAa,SAAS,CAAC,CAAC;QAC5D,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,UAAkB,EAAE,IAAgB;QACjD,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC;QAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,IAAI,GAAG,IAAI,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,UAAU,KAAmB,CAAC;IAE5B,WAAW;QACjB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,OAAO;QACT,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACtC,CAAC;IAEO,kBAAkB,CAAC,KAAe;QACxC,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC;QACvC,IAAI,CAAC,OAAO,IAAI,OAAO,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC,MAAM,CAAC;QAClD,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7F,CAAC;IAEO,WAAW,CAAC,IAAY;QAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;QACpD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;IAChD,CAAC;IAEO,UAAU;QAChB,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,eAAe;YAAE,OAAO;QAChE,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC5B,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE;YACzC,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;YAC7B,KAAK,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,WAAW,CAAC,GAAW;QACnC,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;QACxB,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,OAAO;QACT,CAAC;QAED,IAAI,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;QAEvB,MAAM,GAAG,GAAmB;YAC1B,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE;YAC7B,WAAW,EAAE,UAAU;YACvB,SAAS,EAAE,UAAU;YACrB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,IAAI;YACJ,GAAG,EAAE,EAAE,IAAI,EAAE;SACd,CAAC;QAEF,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,MAAM,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAChE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,MAAM,IAAI,CAAC,CAAC;QAC7C,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;YACxB,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,CAAC;IACH,CAAC;CACF;AAED,MAAM,UAAU,eAAe,CAAC,MAAuB;IACrD,OAAO,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC;AACrC,CAAC"}