@mono-agent/telegram-adapter 0.2.1 → 0.2.2

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 (48) hide show
  1. package/README.md +2 -0
  2. package/dist/adapter.d.ts +35 -57
  3. package/dist/adapter.d.ts.map +1 -1
  4. package/dist/adapter.js +37 -179
  5. package/dist/adapter.js.map +1 -1
  6. package/dist/bot.d.ts +50 -0
  7. package/dist/bot.d.ts.map +1 -0
  8. package/dist/bot.js +214 -0
  9. package/dist/bot.js.map +1 -0
  10. package/dist/config.d.ts +2 -0
  11. package/dist/config.d.ts.map +1 -1
  12. package/dist/config.js +18 -2
  13. package/dist/config.js.map +1 -1
  14. package/dist/grammy-client.d.ts +14 -0
  15. package/dist/grammy-client.d.ts.map +1 -0
  16. package/dist/grammy-client.js +103 -0
  17. package/dist/grammy-client.js.map +1 -0
  18. package/dist/index.d.ts +11 -10
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +5 -4
  21. package/dist/index.js.map +1 -1
  22. package/dist/message-stream.d.ts +80 -7
  23. package/dist/message-stream.d.ts.map +1 -1
  24. package/dist/message-stream.js +381 -34
  25. package/dist/message-stream.js.map +1 -1
  26. package/dist/start.d.ts +23 -34
  27. package/dist/start.d.ts.map +1 -1
  28. package/dist/start.js +25 -43
  29. package/dist/start.js.map +1 -1
  30. package/dist/telegram-error.d.ts +34 -0
  31. package/dist/telegram-error.d.ts.map +1 -0
  32. package/dist/telegram-error.js +39 -0
  33. package/dist/telegram-error.js.map +1 -0
  34. package/dist/telegram-markdown.d.ts +17 -0
  35. package/dist/telegram-markdown.d.ts.map +1 -0
  36. package/dist/telegram-markdown.js +20 -0
  37. package/dist/telegram-markdown.js.map +1 -0
  38. package/dist/types.d.ts +8 -1
  39. package/dist/types.d.ts.map +1 -1
  40. package/package.json +6 -3
  41. package/dist/long-poller.d.ts +0 -55
  42. package/dist/long-poller.d.ts.map +0 -1
  43. package/dist/long-poller.js +0 -156
  44. package/dist/long-poller.js.map +0 -1
  45. package/dist/telegram-client.d.ts +0 -38
  46. package/dist/telegram-client.d.ts.map +0 -1
  47. package/dist/telegram-client.js +0 -183
  48. package/dist/telegram-client.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"message-stream.d.ts","sourceRoot":"","sources":["../src/message-stream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,IAAI,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAQhG,OAAO,KAAK,EACV,cAAc,EACd,cAAc,EAEf,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,kBAAmB,SAAQ,sBAAsB;IAChE,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3C;AAED,MAAM,WAAW,4BAA4B;IAC3C,GAAG,EAAE,cAAc,CAAC;IACpB,MAAM,EAAE,cAAc,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,CAAC,EAAE,2BAA2B,CAAC;CACtC;AAED,MAAM,WAAW,2BAA2B;IAC1C,KAAK,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAClE,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACjE,KAAK,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CACnE;AAMD,qBAAa,qBAAsB,YAAW,kBAAkB;IAC9D,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAiB;IACrC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiB;IACxC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAS;IAC3C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAqB;IACtD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0C;IAEjE,OAAO,CAAC,WAAW,CAAM;IACzB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,WAAW,CAAkC;IACrD,OAAO,CAAC,kBAAkB,CAA2C;IACrE,OAAO,CAAC,SAAS,CAA4C;IAC7D,OAAO,CAAC,YAAY,CAA4B;IAChD,OAAO,CAAC,cAAc,CAAU;IAChC,OAAO,CAAC,QAAQ,CAAS;gBAEb,OAAO,EAAE,4BAA4B;IAoB3C,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWnC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYpC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQpC,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAyBjC,aAAa;IAyB3B,OAAO,CAAC,YAAY;IAcpB,OAAO,CAAC,iBAAiB;YAYX,SAAS;IASvB,OAAO,CAAC,mBAAmB;YAOb,iBAAiB;YAOjB,iBAAiB;IAY/B,OAAO,CAAC,UAAU;CAKnB;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAK1E"}
1
+ {"version":3,"file":"message-stream.d.ts","sourceRoot":"","sources":["../src/message-stream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,IAAI,sBAAsB,EAC5C,gBAAgB,EACjB,MAAM,6BAA6B,CAAC;AAUrC,OAAO,KAAK,EACV,cAAc,EAEd,qBAAqB,EAGtB,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,kBAAmB,SAAQ,sBAAsB;IAChE,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,KAAK,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3C;AAED,MAAM,WAAW,4BAA4B;IAC3C,GAAG,EAAE,qBAAqB,CAAC;IAC3B,MAAM,EAAE,cAAc,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,0EAA0E;IAC1E,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,mFAAmF;IACnF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,sFAAsF;IACtF,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,yEAAyE;IACzE,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,qFAAqF;IACrF,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,sDAAsD;IACtD,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,MAAM,CAAC,EAAE,2BAA2B,CAAC;CACtC;AAED,MAAM,WAAW,2BAA2B;IAC1C,KAAK,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAClE,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACjE,KAAK,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CACnE;AAED;;;;GAIG;AACH,qBAAa,qBAAsB,SAAQ,KAAK;IAC9C,SAAkB,KAAK,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;gBAEd,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE;CAM3E;AAED,yDAAyD;AACzD,MAAM,MAAM,mBAAmB,GAC3B;IAAE,IAAI,EAAE,cAAc,CAAA;CAAE,GACxB;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,GACpB;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,GAC1B;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,GACxC;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC;AAUtB,qBAAa,qBAAsB,YAAW,kBAAkB;IAC9D,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAwB;IAC5C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiB;IACxC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAS;IAC3C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAqB;IACtD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAU;IACvC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAU;IACzC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA0B;IACtD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0C;IAEjE,OAAO,CAAC,WAAW,CAAM;IACzB,OAAO,CAAC,YAAY,CAAM;IAC1B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,WAAW,CAAkC;IACrD,OAAO,CAAC,kBAAkB,CAA2C;IACrE,OAAO,CAAC,SAAS,CAA4C;IAC7D,OAAO,CAAC,YAAY,CAA4B;IAChD,OAAO,CAAC,eAAe,CAAqB;IAC5C,OAAO,CAAC,mBAAmB,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAS;gBAEb,OAAO,EAAE,4BAA4B;IAmC3C,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWnC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAepC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWpC,KAAK,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAyC7C,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IA6C/E,OAAO,CAAC,kBAAkB;YAUZ,aAAa;IAgC3B,OAAO,CAAC,YAAY;IAcpB,OAAO,CAAC,iBAAiB;IAYzB;;;;;OAKG;YACW,WAAW;IAgFzB;;;OAGG;YACW,cAAc;IAgC5B,uFAAuF;YACzE,iBAAiB;IAyB/B,OAAO,CAAC,eAAe;IAgBvB,OAAO,CAAC,eAAe;IAQvB,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,KAAK;IAsBb,OAAO,CAAC,mBAAmB;YAOb,iBAAiB;IAO/B,OAAO,CAAC,UAAU;CAKnB;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,mBAAmB,CAgDzE;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAK1E"}
@@ -1,7 +1,28 @@
1
1
  import { DEFAULT_EMPTY_FINAL_TEXT, DEFAULT_MAX_MESSAGE_CHARS, buildStreamingTailPreview, normalizeTrailing, splitTextByCodePoints, } from "@mono-agent/agent-contracts";
2
+ import { TelegramApiError } from "./telegram-error.js";
3
+ import { renderTelegramMarkdown } from "./telegram-markdown.js";
4
+ /**
5
+ * Raised only when a *final* delivery cannot reach Telegram after retries and
6
+ * the last-resort fresh send. The AI request itself already succeeded, so the
7
+ * adapter treats this as a degraded delivery — never as an agent failure.
8
+ */
9
+ export class TelegramDeliveryError extends Error {
10
+ cause;
11
+ attempts;
12
+ constructor(message, details) {
13
+ super(message);
14
+ this.name = "TelegramDeliveryError";
15
+ this.cause = details.cause;
16
+ this.attempts = details.attempts;
17
+ }
18
+ }
2
19
  const DEFAULT_INITIAL_STATUS_TEXT = "Thinking…";
3
20
  const DEFAULT_EDIT_DEBOUNCE_MS = 750;
21
+ const DEFAULT_MAX_SEND_RETRIES = 3;
22
+ const DEFAULT_RETRY_CAP_MS = 60_000;
23
+ const DEFAULT_RETRY_BASE_DELAY_MS = 500;
4
24
  const EMPTY_FINAL_TEXT = DEFAULT_EMPTY_FINAL_TEXT;
25
+ const THOUGHT_PREFIX = "💭 ";
5
26
  export class TelegramMessageStream {
6
27
  api;
7
28
  chatId;
@@ -9,14 +30,23 @@ export class TelegramMessageStream {
9
30
  editDebounceMs;
10
31
  maxMessageChars;
11
32
  replyToMessageId;
33
+ maxSendRetries;
34
+ retryCapMs;
35
+ retryBaseDelayMs;
36
+ showThoughts;
37
+ formatMarkdown;
38
+ abortSignal;
12
39
  logger;
13
40
  currentText = "";
41
+ thinkingText = "";
42
+ hasAnswerText = false;
14
43
  statusText;
15
44
  sentMessage;
16
45
  sendMessagePromise;
17
46
  editTimer;
18
47
  inFlightEdit;
19
- lastAsyncError;
48
+ lastFlushedText;
49
+ lastFlushedMarkdown = false;
20
50
  finished = false;
21
51
  constructor(options) {
22
52
  this.api = options.api;
@@ -26,6 +56,12 @@ export class TelegramMessageStream {
26
56
  this.editDebounceMs = options.editDebounceMs ?? DEFAULT_EDIT_DEBOUNCE_MS;
27
57
  this.maxMessageChars = options.maxMessageChars ?? DEFAULT_MAX_MESSAGE_CHARS;
28
58
  this.replyToMessageId = options.replyToMessageId;
59
+ this.maxSendRetries = options.maxSendRetries ?? DEFAULT_MAX_SEND_RETRIES;
60
+ this.retryCapMs = options.retryCapMs ?? DEFAULT_RETRY_CAP_MS;
61
+ this.retryBaseDelayMs = options.retryBaseDelayMs ?? DEFAULT_RETRY_BASE_DELAY_MS;
62
+ this.showThoughts = options.showThoughts ?? true;
63
+ this.formatMarkdown = options.formatMarkdown ?? true;
64
+ this.abortSignal = options.abortSignal;
29
65
  this.logger = options.logger;
30
66
  if (!Number.isInteger(this.maxMessageChars) || this.maxMessageChars < 32) {
31
67
  throw new RangeError("maxMessageChars must be an integer of at least 32.");
@@ -33,69 +69,162 @@ export class TelegramMessageStream {
33
69
  if (!Number.isFinite(this.editDebounceMs) || this.editDebounceMs < 0) {
34
70
  throw new RangeError("editDebounceMs must be a non-negative number.");
35
71
  }
72
+ if (!Number.isInteger(this.maxSendRetries) || this.maxSendRetries < 0) {
73
+ throw new RangeError("maxSendRetries must be a non-negative integer.");
74
+ }
75
+ if (!Number.isFinite(this.retryCapMs) || this.retryCapMs < 0) {
76
+ throw new RangeError("retryCapMs must be a non-negative number.");
77
+ }
78
+ if (!Number.isFinite(this.retryBaseDelayMs) || this.retryBaseDelayMs < 0) {
79
+ throw new RangeError("retryBaseDelayMs must be a non-negative number.");
80
+ }
36
81
  }
37
82
  async status(text) {
38
83
  this.assertOpen();
39
- await this.throwIfAsyncError();
84
+ await this.awaitInFlightEdit();
40
85
  this.statusText = normalizeTelegramText(text);
41
86
  const hadMessage = this.sentMessage !== undefined;
42
87
  await this.ensureMessage();
43
88
  if (hadMessage) {
44
- await this.flushEdit(this.statusText);
89
+ await this.deliverText(this.statusText, { final: false });
45
90
  }
46
91
  }
47
92
  async append(delta) {
48
93
  this.assertOpen();
49
- await this.throwIfAsyncError();
94
+ await this.awaitInFlightEdit();
50
95
  if (delta.length === 0) {
51
96
  return;
52
97
  }
53
98
  this.currentText += delta;
99
+ if (!this.hasAnswerText && delta.trim().length > 0) {
100
+ this.hasAnswerText = true;
101
+ }
54
102
  await this.ensureMessage();
55
103
  this.scheduleEdit();
56
104
  }
57
105
  async replace(text) {
58
106
  this.assertOpen();
59
- await this.throwIfAsyncError();
107
+ await this.awaitInFlightEdit();
60
108
  this.currentText = text;
109
+ if (text.trim().length > 0) {
110
+ this.hasAnswerText = true;
111
+ }
61
112
  await this.ensureMessage();
62
113
  this.scheduleEdit();
63
114
  }
64
- async finish(finalText) {
115
+ async event(event) {
116
+ this.assertOpen();
117
+ await this.awaitInFlightEdit();
118
+ if (event.type === "assistant_thought") {
119
+ // Reasoning is shown live as a single accumulating "💭" message, then
120
+ // superseded the moment the answer starts streaming.
121
+ if (!this.showThoughts || this.hasAnswerText || event.text.length === 0) {
122
+ return;
123
+ }
124
+ this.thinkingText += event.text;
125
+ await this.ensureMessage();
126
+ this.scheduleEdit();
127
+ return;
128
+ }
129
+ if (event.type === "runtime_warning") {
130
+ this.logger?.warn?.("Telegram stream received runtime warning.", {
131
+ warningKind: event.warningKind,
132
+ message: event.message,
133
+ });
134
+ return;
135
+ }
136
+ if (event.type === "tool_call_started") {
137
+ this.logger?.debug?.("Telegram stream received tool start event.", {
138
+ id: event.id,
139
+ name: event.name,
140
+ });
141
+ return;
142
+ }
143
+ if (event.type === "tool_call_completed") {
144
+ this.logger?.debug?.("Telegram stream received tool completion event.", {
145
+ id: event.id,
146
+ name: event.name,
147
+ isError: event.isError === true,
148
+ });
149
+ }
150
+ }
151
+ async finish(finalText, options) {
65
152
  if (this.finished) {
66
153
  return;
67
154
  }
68
155
  this.finished = true;
69
156
  if (finalText !== undefined) {
70
157
  this.currentText = finalText;
158
+ if (finalText.trim().length > 0) {
159
+ this.hasAnswerText = true;
160
+ }
71
161
  }
72
162
  this.cancelScheduledEdit();
73
- await this.throwIfAsyncError();
74
163
  await this.awaitInFlightEdit();
75
- await this.throwIfAsyncError();
76
164
  const chunks = splitTelegramText(this.currentText, this.maxMessageChars);
77
165
  const [firstChunk, ...remainingChunks] = chunks;
78
166
  await this.ensureMessage();
79
- await this.flushEdit(firstChunk ?? EMPTY_FINAL_TEXT);
167
+ try {
168
+ await this.deliverText(firstChunk ?? EMPTY_FINAL_TEXT, {
169
+ final: true,
170
+ format: options?.format ?? true,
171
+ });
172
+ }
173
+ catch (error) {
174
+ if (this.abortSignal?.aborted === true) {
175
+ // Cancelled: deliver in place if we can, but never post a brand-new
176
+ // message carrying content the user has already asked us to drop.
177
+ this.logger?.warn?.("Telegram final delivery skipped after cancellation.", {
178
+ error: errorMessage(error),
179
+ });
180
+ return;
181
+ }
182
+ await this.lastResortSend(firstChunk ?? EMPTY_FINAL_TEXT, error);
183
+ }
184
+ if (this.abortSignal?.aborted === true) {
185
+ // Do not spray overflow continuation messages onto a cancelled run.
186
+ return;
187
+ }
80
188
  for (const chunk of remainingChunks) {
81
- await this.api.sendMessage({ chat_id: this.chatId, text: chunk });
189
+ await this.sendOverflowChunk(chunk);
82
190
  }
83
191
  }
192
+ interimDisplayText() {
193
+ if (this.hasAnswerText || this.currentText.length > 0) {
194
+ return this.currentText;
195
+ }
196
+ if (this.showThoughts && this.thinkingText.length > 0) {
197
+ return `${THOUGHT_PREFIX}${this.thinkingText}`;
198
+ }
199
+ return this.statusText;
200
+ }
84
201
  async ensureMessage() {
85
202
  if (this.sentMessage !== undefined) {
86
203
  return this.sentMessage;
87
204
  }
88
205
  if (this.sendMessagePromise === undefined) {
206
+ const initialText = this.statusText;
89
207
  const params = {
90
208
  chat_id: this.chatId,
91
- text: this.statusText,
209
+ text: initialText,
92
210
  };
93
211
  if (this.replyToMessageId !== undefined) {
94
212
  params.reply_to_message_id = this.replyToMessageId;
95
213
  }
96
- this.sendMessagePromise = this.api.sendMessage(params);
214
+ this.sendMessagePromise = this.api.sendMessage(params).then((message) => {
215
+ this.lastFlushedText = initialText;
216
+ this.lastFlushedMarkdown = false;
217
+ return message;
218
+ });
219
+ }
220
+ try {
221
+ this.sentMessage = await this.sendMessagePromise;
222
+ }
223
+ catch (error) {
224
+ // Do not poison future sends with a rejected promise.
225
+ this.sendMessagePromise = undefined;
226
+ throw error;
97
227
  }
98
- this.sentMessage = await this.sendMessagePromise;
99
228
  return this.sentMessage;
100
229
  }
101
230
  scheduleEdit() {
@@ -110,22 +239,197 @@ export class TelegramMessageStream {
110
239
  }, this.editDebounceMs);
111
240
  }
112
241
  startInFlightEdit() {
113
- const text = buildStreamingPreview(this.currentText, this.maxMessageChars);
114
- this.inFlightEdit = this.flushEdit(text).catch((error) => {
115
- this.lastAsyncError = error;
116
- this.logger?.error?.("Telegram stream edit failed.", {
117
- error: error instanceof Error ? error.message : String(error),
242
+ const text = buildStreamingPreview(this.interimDisplayText(), this.maxMessageChars);
243
+ this.inFlightEdit = this.deliverText(text, { final: false }).catch((error) => {
244
+ // Interim edits are best-effort; deliverText already swallows, but guard
245
+ // against an abort rejection so a streaming hiccup never aborts the run.
246
+ this.logger?.warn?.("Telegram stream interim edit failed (ignored).", {
247
+ error: errorMessage(error),
118
248
  });
119
- throw error;
120
249
  });
121
- void this.inFlightEdit.catch(() => undefined);
250
+ void this.inFlightEdit;
122
251
  }
123
- async flushEdit(text) {
124
- const message = await this.ensureMessage();
125
- await this.api.editMessageText({
252
+ /**
253
+ * Send `sourceText` to Telegram, classifying failures and recovering where
254
+ * possible. Interim edits (`final: false`) are best-effort and never throw;
255
+ * final delivery retries transient failures and throws TelegramDeliveryError
256
+ * only when every path is exhausted.
257
+ */
258
+ async deliverText(sourceText, options) {
259
+ const normalizedSource = normalizeTelegramText(sourceText);
260
+ let useMarkdown = options.final && this.formatMarkdown && (options.format ?? true);
261
+ let renderedText = useMarkdown ? renderTelegramMarkdown(normalizedSource) : normalizedSource;
262
+ if (useMarkdown && countCodePoints(renderedText) > this.maxMessageChars) {
263
+ // MarkdownV2 escaping can expand a chunk past Telegram's size limit, but
264
+ // chunks are split on the source length. The plain source is within the
265
+ // limit, so deliver it as plain text rather than fail with
266
+ // "message is too long". (We never test renderedText === source to decide
267
+ // this: telegramify renders inline code / links back to identical bytes
268
+ // that still need parse_mode to render, so equality is not a plain-text
269
+ // signal.)
270
+ useMarkdown = false;
271
+ renderedText = normalizedSource;
272
+ }
273
+ if (renderedText === this.lastFlushedText && useMarkdown === this.lastFlushedMarkdown) {
274
+ return;
275
+ }
276
+ const maxAttempts = options.final ? this.maxSendRetries + 1 : 1;
277
+ let recreate = false;
278
+ let lastError;
279
+ for (let attempt = 1; attempt <= maxAttempts; attempt += 1) {
280
+ try {
281
+ if (recreate) {
282
+ const sent = await this.api.sendMessage(this.buildSendParams(renderedText, useMarkdown));
283
+ this.sentMessage = sent;
284
+ }
285
+ else {
286
+ const message = await this.ensureMessage();
287
+ await this.api.editMessageText(this.buildEditParams(message, renderedText, useMarkdown));
288
+ }
289
+ this.lastFlushedText = renderedText;
290
+ this.lastFlushedMarkdown = useMarkdown;
291
+ return;
292
+ }
293
+ catch (error) {
294
+ lastError = error;
295
+ const outcome = classifyTelegramError(error);
296
+ if (outcome.kind === "not_modified") {
297
+ this.lastFlushedText = renderedText;
298
+ this.lastFlushedMarkdown = useMarkdown;
299
+ return;
300
+ }
301
+ if (outcome.kind === "reformat_plain" && useMarkdown) {
302
+ useMarkdown = false;
303
+ renderedText = normalizedSource;
304
+ continue;
305
+ }
306
+ if (outcome.kind === "recreate" && this.abortSignal?.aborted !== true) {
307
+ recreate = true;
308
+ this.sentMessage = undefined;
309
+ this.lastFlushedText = undefined;
310
+ continue;
311
+ }
312
+ if (outcome.kind === "retry" && options.final && attempt < maxAttempts) {
313
+ await this.sleep(this.retryDelayMs(outcome.retryAfterMs, attempt));
314
+ if (this.abortSignal?.aborted === true) {
315
+ break;
316
+ }
317
+ continue;
318
+ }
319
+ break;
320
+ }
321
+ }
322
+ if (options.final) {
323
+ throw new TelegramDeliveryError("Telegram final delivery failed.", {
324
+ cause: lastError,
325
+ attempts: maxAttempts,
326
+ });
327
+ }
328
+ this.logger?.warn?.("Telegram stream interim edit failed (ignored).", {
329
+ error: errorMessage(lastError),
330
+ });
331
+ }
332
+ /**
333
+ * The streamed message could not be edited or recreated in place. Post the
334
+ * final answer as a brand-new plain message so the user still receives it.
335
+ */
336
+ async lastResortSend(text, cause) {
337
+ const normalized = normalizeTelegramText(text);
338
+ const maxAttempts = this.maxSendRetries + 1;
339
+ let lastError = cause;
340
+ for (let attempt = 1; attempt <= maxAttempts; attempt += 1) {
341
+ try {
342
+ const sent = await this.api.sendMessage(this.buildSendParams(normalized, false));
343
+ this.sentMessage = sent;
344
+ this.lastFlushedText = normalized;
345
+ this.lastFlushedMarkdown = false;
346
+ return;
347
+ }
348
+ catch (error) {
349
+ lastError = error;
350
+ const outcome = classifyTelegramError(error);
351
+ if (outcome.kind === "retry" && attempt < maxAttempts) {
352
+ await this.sleep(this.retryDelayMs(outcome.retryAfterMs, attempt));
353
+ if (this.abortSignal?.aborted === true) {
354
+ break;
355
+ }
356
+ continue;
357
+ }
358
+ break;
359
+ }
360
+ }
361
+ throw new TelegramDeliveryError("Telegram delivery failed after fallback send.", {
362
+ cause: lastError,
363
+ attempts: maxAttempts,
364
+ });
365
+ }
366
+ /** Overflow continuation chunks are best-effort: the primary answer already landed. */
367
+ async sendOverflowChunk(chunk) {
368
+ const normalized = normalizeTelegramText(chunk);
369
+ const maxAttempts = this.maxSendRetries + 1;
370
+ for (let attempt = 1; attempt <= maxAttempts; attempt += 1) {
371
+ try {
372
+ await this.api.sendMessage(this.buildSendParams(normalized, false));
373
+ return;
374
+ }
375
+ catch (error) {
376
+ const outcome = classifyTelegramError(error);
377
+ if (outcome.kind === "retry" && attempt < maxAttempts) {
378
+ await this.sleep(this.retryDelayMs(outcome.retryAfterMs, attempt));
379
+ if (this.abortSignal?.aborted === true) {
380
+ return;
381
+ }
382
+ continue;
383
+ }
384
+ this.logger?.warn?.("Telegram overflow chunk failed (ignored).", {
385
+ error: errorMessage(error),
386
+ });
387
+ return;
388
+ }
389
+ }
390
+ }
391
+ buildEditParams(message, text, useMarkdown) {
392
+ const params = {
126
393
  chat_id: this.chatId,
127
394
  message_id: message.message_id,
128
- text: normalizeTelegramText(text),
395
+ text,
396
+ };
397
+ if (useMarkdown) {
398
+ params.parse_mode = "MarkdownV2";
399
+ }
400
+ return params;
401
+ }
402
+ buildSendParams(text, useMarkdown) {
403
+ const params = { chat_id: this.chatId, text };
404
+ if (useMarkdown) {
405
+ params.parse_mode = "MarkdownV2";
406
+ }
407
+ return params;
408
+ }
409
+ retryDelayMs(retryAfterMs, attempt) {
410
+ const backoff = this.retryBaseDelayMs * 2 ** (attempt - 1);
411
+ const chosen = retryAfterMs ?? backoff;
412
+ return Math.min(chosen, this.retryCapMs);
413
+ }
414
+ sleep(ms) {
415
+ if (ms <= 0 || this.abortSignal?.aborted === true) {
416
+ return Promise.resolve();
417
+ }
418
+ return new Promise((resolve) => {
419
+ const signal = this.abortSignal;
420
+ const cleanup = () => {
421
+ clearTimeout(timer);
422
+ signal?.removeEventListener("abort", onAbort);
423
+ };
424
+ const onAbort = () => {
425
+ cleanup();
426
+ resolve();
427
+ };
428
+ const timer = setTimeout(() => {
429
+ cleanup();
430
+ resolve();
431
+ }, ms);
432
+ signal?.addEventListener("abort", onAbort, { once: true });
129
433
  });
130
434
  }
131
435
  cancelScheduledEdit() {
@@ -140,22 +444,58 @@ export class TelegramMessageStream {
140
444
  this.inFlightEdit = undefined;
141
445
  }
142
446
  }
143
- async throwIfAsyncError() {
144
- if (this.inFlightEdit !== undefined) {
145
- await this.awaitInFlightEdit();
146
- }
147
- if (this.lastAsyncError !== undefined) {
148
- const error = this.lastAsyncError;
149
- this.lastAsyncError = undefined;
150
- throw error;
151
- }
152
- }
153
447
  assertOpen() {
154
448
  if (this.finished) {
155
449
  throw new Error("Cannot write to a finished TelegramMessageStream.");
156
450
  }
157
451
  }
158
452
  }
453
+ /**
454
+ * Classify a Telegram send/edit failure into a recovery strategy. Pure and
455
+ * exported so the recovery policy can be unit-tested directly.
456
+ */
457
+ export function classifyTelegramError(error) {
458
+ if (error instanceof TelegramApiError) {
459
+ const description = (error.telegramDescription ?? "").toLowerCase();
460
+ if (description.includes("message is not modified")) {
461
+ return { kind: "not_modified" };
462
+ }
463
+ if (description.includes("message to edit not found") ||
464
+ description.includes("message to be edited not found") ||
465
+ description.includes("message can't be edited") ||
466
+ description.includes("message_id_invalid")) {
467
+ return { kind: "recreate" };
468
+ }
469
+ if (description.includes("can't parse entities") ||
470
+ description.includes("can't find end of the entity") ||
471
+ description.includes("unsupported start tag") ||
472
+ description.includes("unclosed")) {
473
+ return { kind: "reformat_plain" };
474
+ }
475
+ if (error.retryAfterMs !== undefined ||
476
+ error.errorCode === 429 ||
477
+ error.status === 429 ||
478
+ description.includes("too many requests")) {
479
+ if (error.retryAfterMs !== undefined) {
480
+ return { kind: "retry", retryAfterMs: error.retryAfterMs };
481
+ }
482
+ return { kind: "retry" };
483
+ }
484
+ if (error.kind === "network") {
485
+ return { kind: "retry" };
486
+ }
487
+ if (error.kind === "aborted") {
488
+ return { kind: "fatal" };
489
+ }
490
+ if (error.status !== undefined && error.status >= 500) {
491
+ return { kind: "retry" };
492
+ }
493
+ return { kind: "fatal" };
494
+ }
495
+ // Non-TelegramApiError (e.g. a transient transport error or a test stub):
496
+ // retry conservatively rather than surfacing it as a hard failure.
497
+ return { kind: "retry" };
498
+ }
159
499
  export function splitTelegramText(text, maxChars) {
160
500
  return splitTextByCodePoints(normalizeTrailing(text, EMPTY_FINAL_TEXT), maxChars);
161
501
  }
@@ -165,4 +505,11 @@ function buildStreamingPreview(text, maxChars) {
165
505
  function normalizeTelegramText(text) {
166
506
  return text.trimEnd();
167
507
  }
508
+ /** Count Unicode code points — Telegram's message length is measured in them. */
509
+ function countCodePoints(text) {
510
+ return [...text].length;
511
+ }
512
+ function errorMessage(error) {
513
+ return error instanceof Error ? error.message : String(error);
514
+ }
168
515
  //# sourceMappingURL=message-stream.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"message-stream.js","sourceRoot":"","sources":["../src/message-stream.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"message-stream.js","sourceRoot":"","sources":["../src/message-stream.ts"],"names":[],"mappings":"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"}