@markusylisiurunen/tau 0.3.66 → 0.3.68

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 (106) hide show
  1. package/dist/core/personas.js +13 -0
  2. package/dist/core/personas.js.map +1 -1
  3. package/dist/core/static/tau_docs/remote-sessions.md +1 -1
  4. package/dist/core/static/tau_docs/telegram.md +4 -2
  5. package/dist/core/static/tau_docs/tui.md +2 -2
  6. package/dist/core/telegram/adapter.js +40 -12
  7. package/dist/core/telegram/adapter.js.map +1 -1
  8. package/dist/core/telegram/session_manager.js +14 -7
  9. package/dist/core/telegram/session_manager.js.map +1 -1
  10. package/dist/core/utils/openai_transcription.js +72 -22
  11. package/dist/core/utils/openai_transcription.js.map +1 -1
  12. package/dist/core/utils/speech_to_text.js +17 -24
  13. package/dist/core/utils/speech_to_text.js.map +1 -1
  14. package/dist/core/version.js +1 -1
  15. package/dist/diff_tool/app/dist/assets/{angular-html-BeSCPCet.js → angular-html-D1LkfYUk.js} +1 -1
  16. package/dist/diff_tool/app/dist/assets/{angular-ts-M6ucwcXp.js → angular-ts-GBkN0dgz.js} +1 -1
  17. package/dist/diff_tool/app/dist/assets/{apl-BTy2T_s_.js → apl-B9B6LoBR.js} +1 -1
  18. package/dist/diff_tool/app/dist/assets/{astro-cFE44UBz.js → astro-Bq1oMHJ9.js} +1 -1
  19. package/dist/diff_tool/app/dist/assets/{blade-BSzl0tbR.js → blade-COJUdHCh.js} +1 -1
  20. package/dist/diff_tool/app/dist/assets/{c-wBFdKaz6.js → c-B5mehGRz.js} +1 -1
  21. package/dist/diff_tool/app/dist/assets/{chapel-b-MisDxs.js → chapel-mTzW_3Rb.js} +1 -1
  22. package/dist/diff_tool/app/dist/assets/{cobol-dLRFXfHq.js → cobol-CUZj6Dna.js} +1 -1
  23. package/dist/diff_tool/app/dist/assets/{coffee-DY5l5u2h.js → coffee-CNqmYL25.js} +1 -1
  24. package/dist/diff_tool/app/dist/assets/{cpp-DjXgSTII.js → cpp-CRMagQcD.js} +1 -1
  25. package/dist/diff_tool/app/dist/assets/{crystal-CP6xOayN.js → crystal-DCj_yeSi.js} +1 -1
  26. package/dist/diff_tool/app/dist/assets/{css-xaNrTKYV.js → css-DAwpXLWY.js} +1 -1
  27. package/dist/diff_tool/app/dist/assets/{edge-BOmlY556.js → edge-CtFTwS18.js} +1 -1
  28. package/dist/diff_tool/app/dist/assets/{elixir-DcKGE0v2.js → elixir-C1OrVr_M.js} +1 -1
  29. package/dist/diff_tool/app/dist/assets/{elm-Cr3UN5CN.js → elm-BdS37bq6.js} +1 -1
  30. package/dist/diff_tool/app/dist/assets/{erb-B0s1W7oL.js → erb-Ba0Xnkuj.js} +1 -1
  31. package/dist/diff_tool/app/dist/assets/{git-rebase-BicxzMm4.js → git-rebase-DRtTCAv_.js} +1 -1
  32. package/dist/diff_tool/app/dist/assets/{glimmer-js-ODVU1BSP.js → glimmer-js-B4F-uWDL.js} +1 -1
  33. package/dist/diff_tool/app/dist/assets/{glimmer-ts-BjlaPEbT.js → glimmer-ts-JRBbzMuE.js} +1 -1
  34. package/dist/diff_tool/app/dist/assets/{glsl-DARqrBAL.js → glsl-B0F7j1rZ.js} +1 -1
  35. package/dist/diff_tool/app/dist/assets/{graphql-9AgTO0pa.js → graphql-B2oXozjz.js} +1 -1
  36. package/dist/diff_tool/app/dist/assets/{hack-a62s-UZ0.js → hack-BmdKh4Xg.js} +1 -1
  37. package/dist/diff_tool/app/dist/assets/{haml-D2r7a_kb.js → haml-B5txh1mt.js} +1 -1
  38. package/dist/diff_tool/app/dist/assets/{handlebars-CIj0uB_t.js → handlebars-BrOeahQH.js} +1 -1
  39. package/dist/diff_tool/app/dist/assets/{html-D8D8vyLW.js → html-CwVI_Nmo.js} +1 -1
  40. package/dist/diff_tool/app/dist/assets/{html-derivative-CLdYoNWv.js → html-derivative-Dmp-VtO0.js} +1 -1
  41. package/dist/diff_tool/app/dist/assets/{http-BHeQHXaH.js → http-DZvA2jMi.js} +1 -1
  42. package/dist/diff_tool/app/dist/assets/{hurl-CHiE6F8G.js → hurl-Czca3pRy.js} +1 -1
  43. package/dist/diff_tool/app/dist/assets/{index-ryW0IvBs.js → index-B9k3vTfc.js} +4 -4
  44. package/dist/diff_tool/app/dist/assets/{java-vZct0aFW.js → java-C9B5avDT.js} +1 -1
  45. package/dist/diff_tool/app/dist/assets/{javascript-CYtnIw0K.js → javascript-DdUPgmCi.js} +1 -1
  46. package/dist/diff_tool/app/dist/assets/{jinja-CLfmA9uq.js → jinja-C88anDVh.js} +1 -1
  47. package/dist/diff_tool/app/dist/assets/{jison-XTtTo0I_.js → jison-CYn9Sl79.js} +1 -1
  48. package/dist/diff_tool/app/dist/assets/{json-GZxy-acy.js → json-CYp3vrCJ.js} +1 -1
  49. package/dist/diff_tool/app/dist/assets/{jsx-C7hyhPZ0.js → jsx-BuDHdbPM.js} +1 -1
  50. package/dist/diff_tool/app/dist/assets/{julia-BmMkiSmK.js → julia-CLyKC_SD.js} +1 -1
  51. package/dist/diff_tool/app/dist/assets/{just-RxJWAQxh.js → just-BRw_BRkc.js} +1 -1
  52. package/dist/diff_tool/app/dist/assets/{latex-poGrpwNW.js → latex-Bsyk0ZET.js} +1 -1
  53. package/dist/diff_tool/app/dist/assets/{liquid-Bi2qx1OK.js → liquid-B2KWKTUY.js} +1 -1
  54. package/dist/diff_tool/app/dist/assets/{lua-CKOivslC.js → lua-BBCZNaoe.js} +1 -1
  55. package/dist/diff_tool/app/dist/assets/{marko-B71GrBHJ.js → marko-CzEoqxXx.js} +1 -1
  56. package/dist/diff_tool/app/dist/assets/{mdc-DFiDlus5.js → mdc-BYYhPtQ2.js} +1 -1
  57. package/dist/diff_tool/app/dist/assets/{nginx-ByKHg69_.js → nginx-B0ANyMYF.js} +1 -1
  58. package/dist/diff_tool/app/dist/assets/{nim-BwiP7WMs.js → nim-BnO-hPuv.js} +1 -1
  59. package/dist/diff_tool/app/dist/assets/{org-Cy_LFEd1.js → org-DZ53bUbb.js} +1 -1
  60. package/dist/diff_tool/app/dist/assets/{perl-L6AmMgUk.js → perl-DCaXAjqZ.js} +1 -1
  61. package/dist/diff_tool/app/dist/assets/{php-r2zLMjgX.js → php-DFJP7AYG.js} +1 -1
  62. package/dist/diff_tool/app/dist/assets/{pug-BCKOpP4a.js → pug-CibApuhk.js} +1 -1
  63. package/dist/diff_tool/app/dist/assets/{qml-BGFEfuZ-.js → qml-DwVnDdTM.js} +1 -1
  64. package/dist/diff_tool/app/dist/assets/{r-25U_CdGU.js → r-C4Dchd1P.js} +1 -1
  65. package/dist/diff_tool/app/dist/assets/{razor-SIQ_YLlC.js → razor-CyJ-w1Ub.js} +1 -1
  66. package/dist/diff_tool/app/dist/assets/{regexp-DCxK7MQQ.js → regexp-CNghQ5eY.js} +1 -1
  67. package/dist/diff_tool/app/dist/assets/{rst-9_Rowq3o.js → rst-CynWjePz.js} +1 -1
  68. package/dist/diff_tool/app/dist/assets/{ruby-O5wpMn8A.js → ruby-CLYbVE1Z.js} +1 -1
  69. package/dist/diff_tool/app/dist/assets/{sas-C-k458kN.js → sas-bJHxiY-x.js} +1 -1
  70. package/dist/diff_tool/app/dist/assets/{scss-BwP9aXVf.js → scss-CcgsuVdc.js} +1 -1
  71. package/dist/diff_tool/app/dist/assets/{shellscript-BFMLRpod.js → shellscript-CFJeRn3g.js} +1 -1
  72. package/dist/diff_tool/app/dist/assets/{shellsession-DlRPuye4.js → shellsession-BzeG4DIz.js} +1 -1
  73. package/dist/diff_tool/app/dist/assets/{soy-C5Ch5nY5.js → soy-B1Ewncjv.js} +1 -1
  74. package/dist/diff_tool/app/dist/assets/{sql-BHt0XWX7.js → sql-C6gIz-i-.js} +1 -1
  75. package/dist/diff_tool/app/dist/assets/{stata-CgvX5dGK.js → stata-DZ3n2NNy.js} +1 -1
  76. package/dist/diff_tool/app/dist/assets/{surrealql-Cj3grwXO.js → surrealql-CxjJ_MYO.js} +1 -1
  77. package/dist/diff_tool/app/dist/assets/{svelte-DveFys-B.js → svelte-Dad0hAwn.js} +1 -1
  78. package/dist/diff_tool/app/dist/assets/{templ-DmoziF6W.js → templ-BuNk0dhh.js} +1 -1
  79. package/dist/diff_tool/app/dist/assets/{tex-CQEH3eWy.js → tex-C61-WHOR.js} +1 -1
  80. package/dist/diff_tool/app/dist/assets/{ts-tags-CyATrp4W.js → ts-tags-BMWGwRt6.js} +1 -1
  81. package/dist/diff_tool/app/dist/assets/{tsx-SmI3BYI2.js → tsx-AKa5rdAm.js} +1 -1
  82. package/dist/diff_tool/app/dist/assets/{twig-CZdHY8II.js → twig-CKXFwiec.js} +1 -1
  83. package/dist/diff_tool/app/dist/assets/{typescript-BEXbDl0M.js → typescript-BzRr3JI0.js} +1 -1
  84. package/dist/diff_tool/app/dist/assets/{typst-DVVDEOeR.js → typst-BXNdvFzz.js} +1 -1
  85. package/dist/diff_tool/app/dist/assets/{vue-cLMg-8kU.js → vue-Du8kVE1C.js} +1 -1
  86. package/dist/diff_tool/app/dist/assets/{vue-html-DsBku6bW.js → vue-html-DMrkK9XH.js} +1 -1
  87. package/dist/diff_tool/app/dist/assets/{vue-vine-CJ-uTo5p.js → vue-vine-5f0lzpP6.js} +1 -1
  88. package/dist/diff_tool/app/dist/assets/{xml-DFarLFG4.js → xml-BUuAw89A.js} +1 -1
  89. package/dist/diff_tool/app/dist/assets/{xsl-C-KcDKTd.js → xsl-cGKOdY7Q.js} +1 -1
  90. package/dist/diff_tool/app/dist/assets/{yaml-C-7s0ZGy.js → yaml-BxZ2CAV2.js} +1 -1
  91. package/dist/diff_tool/app/dist/index.html +1 -1
  92. package/dist/host/hosted_ephemeral_agent_session.js +18 -4
  93. package/dist/host/hosted_ephemeral_agent_session.js.map +1 -1
  94. package/dist/host/local_session_host.js +54 -7
  95. package/dist/host/local_session_host.js.map +1 -1
  96. package/dist/host/session_protocol_handler.js +29 -2
  97. package/dist/host/session_protocol_handler.js.map +1 -1
  98. package/dist/protocol/session_protocol.js +22 -5
  99. package/dist/protocol/session_protocol.js.map +1 -1
  100. package/dist/tui/listen_capture.js +0 -1
  101. package/dist/tui/listen_capture.js.map +1 -1
  102. package/dist/tui/session_chat_controller.js +255 -39
  103. package/dist/tui/session_chat_controller.js.map +1 -1
  104. package/dist/tui/ui/footer.js +1 -1
  105. package/dist/tui/ui/footer.js.map +1 -1
  106. package/package.json +5 -5
@@ -261,6 +261,16 @@ const PERSONA_SPECS = [
261
261
  settings: { reasoning: "medium", serviceTier: "priority" },
262
262
  skills: "*",
263
263
  },
264
+ {
265
+ id: "fable-5.1",
266
+ description: "Claude Fable 5.1",
267
+ provider: "anthropic",
268
+ modelId: "claude-fable-5-1",
269
+ catalogOnly: true,
270
+ allowedReasoningLevels: ["low", "medium", "high", "xhigh", "max"],
271
+ settings: { reasoning: "medium" },
272
+ skills: "*",
273
+ },
264
274
  {
265
275
  id: "opus-5",
266
276
  description: "Claude Opus 5",
@@ -329,6 +339,9 @@ function buildPersona(spec, variant, modelResolver) {
329
339
  }
330
340
  export function createBuiltinPersonas(modelResolver = resolveModel) {
331
341
  return PERSONA_SPECS.flatMap((spec) => {
342
+ if (spec.catalogOnly && !modelResolver(spec.provider, spec.modelId)) {
343
+ return [];
344
+ }
332
345
  if (spec.id.includes("-codex-")) {
333
346
  const coderPersona = buildPersona(spec, "coder", modelResolver);
334
347
  return [
@@ -1 +1 @@
1
- {"version":3,"file":"personas.js","sourceRoot":"","sources":["../../src/core/personas.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"personas.js","sourceRoot":"","sources":["../../src/core/personas.ts"],"names":[],"mappings":"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"}
@@ -186,7 +186,7 @@ Different changes have different owners:
186
186
 
187
187
  ## Reconnect and observe safely
188
188
 
189
- A WebSocket connection observes a hosted session; it does not own or delete it. If a TUI disconnects while a turn runs, the host keeps working. Reattach with the same session id to obtain the current persisted state and continue receiving updates.
189
+ A WebSocket connection observes a hosted session; it does not own or delete its durable state. After the last observer disconnects, the host unloads an idle live runtime while retaining its persisted snapshot. If a client disconnects while work runs, the host keeps working and unloads the runtime only after that work settles. Reattach with the same session id to recover the current persisted state and continue receiving updates.
190
190
 
191
191
  A clean `tau serve` shutdown interrupts active work, persists live sessions, and closes clients. On restart, the host lists sessions whose execution environments it can restore. Recovery returns sessions idle, drops pending queued and steering messages, discards live subagents, and changes an active persistent goal to blocked. Use `/goal resume` only after checking why the host stopped.
192
192
 
@@ -220,7 +220,9 @@ After preparation, Tau creates an ordinary local session at the workspace `cwd`.
220
220
 
221
221
  A project `persona` overrides the normal default for that session. `noAgentContextFiles: true` suppresses `AGENTS.md` injection for repository or persistent-directory sessions. Composite root context is generated deliberately and uses its required persona.
222
222
 
223
- The top-level and per-bot `systemMessage` values are different from project context. Tau prepends them as a hidden `<system>` block to every Telegram-submitted turn, with the top-level message first and the bot message second. They are persisted as part of the user turn and can appear in history, so never put credentials in them.
223
+ Every Telegram turn starts with hidden `<system>` guidance identifying Telegram as the source and reply destination. It favors direct simple answers and brief acknowledgements or meaningful progress updates for tool-driven or multi-step work, since users cannot see tool activity.
224
+
225
+ Top-level and per-bot `systemMessage` values share a second hidden block after the default, in that order. Audio transcripts receive another warning that they may contain noise or errors. Unlike project context, hidden guidance is persisted with user turns and can appear in history, so never put credentials in configured messages.
224
226
 
225
227
  The runner's speech-to-text provider is loaded from normal Tau config at runner startup, based on the runner process's startup `cwd`. Restart the runner after changing that provider or its environment.
226
228
 
@@ -278,7 +280,7 @@ An attachment-only DM queues files for the next text or voice/audio turn; it doe
278
280
 
279
281
  The local execution environment can access these runner temporary paths. Pending attachments and group context are not snapshot data. Shutdown clears their queues, and startup removes stale `tau-telegram-attachments-*` directories.
280
282
 
281
- Telegram `voice` and `audio` messages are downloaded and transcribed. Direct DM turns and bot-triggering group turns echo the transcript to the chat before submission so the sender can verify it.
283
+ Telegram `voice` and `audio` messages up to 20 minutes long are downloaded and transcribed. Direct DM turns and bot-triggering group turns echo the transcript to the chat before submission so the sender can verify it.
282
284
 
283
285
  OpenAI is the default. Select Gemini with `speechToText.provider`. Runner credentials are:
284
286
 
@@ -197,9 +197,9 @@ The TUI also advertises diff review as a client tool unless `--no-client-tools`
197
197
 
198
198
  ## Use speech
199
199
 
200
- `/listen` and Ctrl+Y are currently macOS-only. Recording uses local `ffmpeg` with the AVFoundation audio input and stops when Ctrl+Y is pressed again, when Escape is pressed, or after five minutes. Startup fails if the microphone produces no audio within 15 seconds. The transcript is inserted at the cursor for review and is not submitted automatically.
200
+ `/listen` and Ctrl+Y are currently macOS-only. Recording uses local `ffmpeg` with the AVFoundation audio input and stops when Ctrl+Y is pressed again, when Escape is pressed, or after 20 minutes. Startup fails if the microphone produces no audio within 15 seconds. Stopping manually or reaching the 20-minute limit finishes transcription and inserts the transcript at the cursor for review without submitting it.
201
201
 
202
- If transcription fails, Tau retains the local WAV and reports its path. Run `/listen retry` to transcribe the same audio again with the current provider and conversation context, or `/listen discard` to delete it. A replacement recording deletes the retained file only after the new capture starts producing audio. Tau keeps at most one failed recording, and exiting leaves that file at the reported path for manual recovery. For live transcription, both providers extract spelling hints from recent conversation while recording begins, buffer audio until the transcription session is ready, and then stream subsequent audio. Gemini uses Gemini 3.7 Flash for hint extraction and `gemini-3.5-transcribe-live` in smart mode; OpenAI uses GPT-5.6 Luna and `gpt-live-transcribe`. Hint extraction failure does not fail transcription. On retry, Gemini uploads the retained recording for `gemini-3.5-transcribe` smart transcription and attempts to delete the remote file afterward; OpenAI uploads it to `gpt-transcribe` with recent context.
202
+ If transcription fails, Tau retains the local WAV and reports its path. Run `/listen retry` to transcribe the same audio again with the current provider and conversation context, or `/listen discard` to delete it. Retained recordings longer than 20 minutes are rejected rather than sent to the provider. A replacement recording deletes the retained file only after the new capture starts producing audio. Tau keeps at most one failed recording, and exiting leaves that file at the reported path for manual recovery. For live transcription, both providers extract spelling hints from recent conversation while recording begins, buffer audio until the transcription session is ready, and then stream subsequent audio. Gemini uses Gemini 3.7 Flash for hint extraction and `gemini-3.5-transcribe-live` in smart mode; OpenAI uses GPT-5.6 Luna and `gpt-live-transcribe`. Hint extraction failure does not fail transcription. On retry, Gemini uploads the retained recording for `gemini-3.5-transcribe` smart transcription and attempts to delete the remote file afterward; OpenAI uploads it to `gpt-transcribe` with recent context.
203
203
 
204
204
  Install `ffmpeg` and configure a speech-to-text provider:
205
205
 
@@ -4,7 +4,7 @@ import { basename, extname, join } from "node:path";
4
4
  import { z } from "zod";
5
5
  import { TauSessionProtocolResponseError } from "../../transport/errors.js";
6
6
  import { formatAdaptiveNumber, formatTokenWindow } from "../utils/format.js";
7
- import { createSpeechToTextTranscription, } from "../utils/speech_to_text.js";
7
+ import { createSpeechToTextTranscription, SPEECH_TO_TEXT_CLIENT_MAX_DURATION_MS, } from "../utils/speech_to_text.js";
8
8
  import { collectSpeechToTextContext, } from "../utils/speech_to_text_context.js";
9
9
  import { formatTauUserText, splitTauUserText } from "../utils/user_metadata.js";
10
10
  import { formatZodError } from "../utils/zod.js";
@@ -12,6 +12,7 @@ import { createScopedTelegramSessionManager, TelegramSessionManagerError, } from
12
12
  import { generateTelegramVoice } from "./tts.js";
13
13
  const DEFAULT_POLL_INTERVAL_MS = 1000;
14
14
  const DEFAULT_REQUEST_TIMEOUT_SECONDS = 30;
15
+ const TELEGRAM_AUDIO_TRANSCRIPTION_SYSTEM_MESSAGE = "This text was transcribed from Telegram audio and may contain noise, misheard words, or transcription errors.";
15
16
  const MAX_COMMAND_PREVIEW_CHARS = 128;
16
17
  const MAX_PROVISION_DIAGNOSTIC_CHARS = 2_000;
17
18
  const DEFAULT_TELEGRAM_VOICE_MIME_TYPE = "audio/ogg";
@@ -516,9 +517,14 @@ const TelegramPhotoVariantSchema = telegramPartialObject({
516
517
  width: z.number(),
517
518
  height: z.number(),
518
519
  });
519
- const TelegramVoiceSchema = TelegramFileSchema.pick({ file_id: true, mime_type: true });
520
- const TelegramAudioSchema = TelegramFileSchema.pick({
520
+ const TelegramVoiceSchema = TelegramFileSchema.extend({
521
+ duration: z.number().int().nonnegative(),
522
+ }).pick({ file_id: true, duration: true, mime_type: true });
523
+ const TelegramAudioSchema = TelegramFileSchema.extend({
524
+ duration: z.number().int().nonnegative(),
525
+ }).pick({
521
526
  file_id: true,
527
+ duration: true,
522
528
  mime_type: true,
523
529
  file_name: true,
524
530
  });
@@ -1201,22 +1207,26 @@ class TelegramAdapterImpl {
1201
1207
  await this.answerCallbackQuery(callbackQuery.id, callbackHandled ? "done" : undefined);
1202
1208
  }
1203
1209
  parseAudioMessage(message) {
1204
- const voiceFileId = message.voice?.file_id?.trim();
1205
- if (voiceFileId) {
1210
+ const voice = message.voice;
1211
+ const voiceFileId = voice?.file_id?.trim();
1212
+ if (voice && voiceFileId) {
1206
1213
  return {
1207
1214
  fileId: voiceFileId,
1208
- mimeType: message.voice?.mime_type?.trim() || DEFAULT_TELEGRAM_VOICE_MIME_TYPE,
1215
+ durationMs: voice.duration * 1_000,
1216
+ mimeType: voice.mime_type?.trim() || DEFAULT_TELEGRAM_VOICE_MIME_TYPE,
1209
1217
  fileName: DEFAULT_TELEGRAM_VOICE_FILE_NAME,
1210
1218
  };
1211
1219
  }
1212
- const audioFileId = message.audio?.file_id?.trim();
1213
- if (!audioFileId) {
1220
+ const audio = message.audio;
1221
+ const audioFileId = audio?.file_id?.trim();
1222
+ if (!audio || !audioFileId) {
1214
1223
  return undefined;
1215
1224
  }
1216
1225
  return {
1217
1226
  fileId: audioFileId,
1218
- mimeType: message.audio?.mime_type?.trim() || DEFAULT_TELEGRAM_AUDIO_MIME_TYPE,
1219
- fileName: message.audio?.file_name?.trim() || DEFAULT_TELEGRAM_AUDIO_FILE_NAME,
1227
+ durationMs: audio.duration * 1_000,
1228
+ mimeType: audio.mime_type?.trim() || DEFAULT_TELEGRAM_AUDIO_MIME_TYPE,
1229
+ fileName: audio.file_name?.trim() || DEFAULT_TELEGRAM_AUDIO_FILE_NAME,
1220
1230
  };
1221
1231
  }
1222
1232
  async queueMessageAttachments(chatId, message, options = {}) {
@@ -1852,7 +1862,14 @@ class TelegramAdapterImpl {
1852
1862
  this.pushIndentedErrorLines(lines, triggerErrors, "");
1853
1863
  this.pushIndentedAttachmentLines(lines, triggerAttachments, "");
1854
1864
  lines.push("</telegram-trigger-message>");
1855
- return formatTauUserText({ text: lines.join("\n"), hiddenSystemMessages: [system] });
1865
+ const hasAudioTranscript = Boolean(triggerAudioTranscript) || pending.some((message) => message.audioTranscript);
1866
+ return formatTauUserText({
1867
+ text: lines.join("\n"),
1868
+ hiddenSystemMessages: [
1869
+ system,
1870
+ ...(hasAudioTranscript ? [TELEGRAM_AUDIO_TRANSCRIPTION_SYSTEM_MESSAGE] : []),
1871
+ ],
1872
+ });
1856
1873
  }
1857
1874
  pushIndentedErrorLines(lines, errors, indent) {
1858
1875
  if (!errors || errors.length === 0) {
@@ -1907,6 +1924,13 @@ class TelegramAdapterImpl {
1907
1924
  }
1908
1925
  }
1909
1926
  async transcribeTelegramAudio(chatId, message, options = {}) {
1927
+ if (message.durationMs > SPEECH_TO_TEXT_CLIENT_MAX_DURATION_MS) {
1928
+ const error = "audio transcription failed: audio is longer than 20 minutes";
1929
+ if (!options.silent) {
1930
+ await this.reply(chatId, error);
1931
+ }
1932
+ return { error };
1933
+ }
1910
1934
  const apiKey = this.getSpeechToTextApiKey();
1911
1935
  if (!apiKey) {
1912
1936
  const error = this.getSpeechToTextApiKeyErrorMessage("transcribe Telegram audio");
@@ -1958,7 +1982,11 @@ class TelegramAdapterImpl {
1958
1982
  }
1959
1983
  try {
1960
1984
  await this.reply(chatId, `transcribed: ${result.transcript}`);
1961
- await this.submitSessionMessage(chatId, session.id, result.transcript, sourceMessageId);
1985
+ const text = formatTauUserText({
1986
+ text: result.transcript,
1987
+ hiddenSystemMessages: [TELEGRAM_AUDIO_TRANSCRIPTION_SYSTEM_MESSAGE],
1988
+ });
1989
+ await this.submitSessionMessage(chatId, session.id, text, sourceMessageId);
1962
1990
  }
1963
1991
  catch (error) {
1964
1992
  await this.reply(chatId, this.formatManagerError(error));