@markusylisiurunen/tau 0.3.67 → 0.3.69
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/core/personas.js +47 -3
- package/dist/core/personas.js.map +1 -1
- package/dist/core/static/tau_docs/remote-sessions.md +1 -1
- package/dist/core/static/tau_docs/telegram.md +3 -3
- package/dist/core/static/tau_docs/tui.md +2 -2
- package/dist/core/telegram/adapter.js +26 -10
- package/dist/core/telegram/adapter.js.map +1 -1
- package/dist/core/utils/gemini_speech.js +1 -1
- package/dist/core/utils/gemini_transcription.js +1 -1
- package/dist/core/utils/openai_transcription.js +72 -22
- package/dist/core/utils/openai_transcription.js.map +1 -1
- package/dist/core/utils/speech_to_text.js +17 -24
- package/dist/core/utils/speech_to_text.js.map +1 -1
- package/dist/core/version.js +2 -2
- package/dist/diff_tool/app/dist/assets/{angular-html-BeSCPCet.js → angular-html-GYtPR4ZN.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{angular-ts-M6ucwcXp.js → angular-ts-CP8tBFCL.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{apl-BTy2T_s_.js → apl-DlYjD5SW.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{astro-cFE44UBz.js → astro-D8wjxID2.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{blade-BSzl0tbR.js → blade-DwY1HngW.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{c-wBFdKaz6.js → c-CAILAMk6.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{chapel-b-MisDxs.js → chapel-VXP46g0K.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{cobol-dLRFXfHq.js → cobol-BwAQKs_L.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{coffee-DY5l5u2h.js → coffee-DeNZ8VRy.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{cpp-DjXgSTII.js → cpp-CF9ADHZh.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{crystal-CP6xOayN.js → crystal-Dlr9u7o6.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{css-xaNrTKYV.js → css-DqAHzxWB.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{edge-BOmlY556.js → edge-ds7vvsur.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{elixir-DcKGE0v2.js → elixir-Es7Jrt6x.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{elm-Cr3UN5CN.js → elm-D11ntXWx.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{erb-B0s1W7oL.js → erb-BqfIFYyn.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{git-rebase-BicxzMm4.js → git-rebase-BNJHcUvp.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{glimmer-js-ODVU1BSP.js → glimmer-js-DNpIS5IN.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{glimmer-ts-BjlaPEbT.js → glimmer-ts-Bv4OLkK5.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{glsl-DARqrBAL.js → glsl-BrwGmSBp.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{graphql-9AgTO0pa.js → graphql-BNCK5rQk.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{hack-a62s-UZ0.js → hack-DuFQc5W0.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{haml-D2r7a_kb.js → haml-DfSIBmXD.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{handlebars-CIj0uB_t.js → handlebars-97zL-LWI.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{html-D8D8vyLW.js → html-5cQu52Yo.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{html-derivative-CLdYoNWv.js → html-derivative-BtDKJ__D.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{http-BHeQHXaH.js → http-DDVZeUrK.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{hurl-CHiE6F8G.js → hurl-jYWcmpTH.js} +1 -1
- package/dist/diff_tool/app/dist/assets/index-B1D38aHD.js +1559 -0
- package/dist/diff_tool/app/dist/assets/{java-vZct0aFW.js → java-DztsnWnX.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{javascript-CYtnIw0K.js → javascript-B9237BHu.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{jinja-CLfmA9uq.js → jinja-8JSK8Y6a.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{jison-XTtTo0I_.js → jison-B5IknAGj.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{json-GZxy-acy.js → json-DRnIZCq8.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{jsx-C7hyhPZ0.js → jsx-CFiWn8fZ.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{julia-BmMkiSmK.js → julia-BtFBdMTG.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{just-RxJWAQxh.js → just-C14ODGGY.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{latex-poGrpwNW.js → latex-DeaaLUFy.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{liquid-Bi2qx1OK.js → liquid-HEBlYFrk.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{lua-CKOivslC.js → lua-CR87cBpR.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{marko-B71GrBHJ.js → marko-Eh01TuqB.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{mdc-DFiDlus5.js → mdc-B6RhKbU2.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{nginx-ByKHg69_.js → nginx-VWZdkDqr.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{nim-BwiP7WMs.js → nim-CHz86e8d.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{org-Cy_LFEd1.js → org-VhIfCSLb.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{perl-L6AmMgUk.js → perl-aD0uyR3K.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{php-r2zLMjgX.js → php-DgAIzA1E.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{pug-BCKOpP4a.js → pug-DrOOTekJ.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{qml-BGFEfuZ-.js → qml-CBowC-In.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{r-25U_CdGU.js → r-BDVQ17do.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{razor-SIQ_YLlC.js → razor-3Cui7XJA.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{regexp-DCxK7MQQ.js → regexp-CGlnek7r.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{rst-9_Rowq3o.js → rst-BJ8-NYKF.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{ruby-O5wpMn8A.js → ruby-CYg2GUU3.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{sas-C-k458kN.js → sas-DfcBvB-I.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{scss-BwP9aXVf.js → scss-S7r2xNkU.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{shellscript-BFMLRpod.js → shellscript-U4EOW3nV.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{shellsession-DlRPuye4.js → shellsession-DYrNCgPk.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{soy-C5Ch5nY5.js → soy-B25GTE01.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{sql-BHt0XWX7.js → sql-CrqkYif6.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{stata-CgvX5dGK.js → stata-CMX2LAnU.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{surrealql-Cj3grwXO.js → surrealql-DDFKL5G0.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{svelte-DveFys-B.js → svelte-CLZCBtO7.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{templ-DmoziF6W.js → templ-BKLVAgyX.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{tex-CQEH3eWy.js → tex-DbqBQGS7.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{ts-tags-CyATrp4W.js → ts-tags-B9kA6WQP.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{tsx-SmI3BYI2.js → tsx-CxQG0405.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{twig-CZdHY8II.js → twig-0z1Xause.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{typescript-BEXbDl0M.js → typescript-R3tpeET4.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{typst-DVVDEOeR.js → typst-DiHSix3p.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{vue-cLMg-8kU.js → vue-C-Pb_COm.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{vue-html-DsBku6bW.js → vue-html-CA18u2Ne.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{vue-vine-CJ-uTo5p.js → vue-vine-CMnXmPqz.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{xml-DFarLFG4.js → xml-5qEjbdVg.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{xsl-C-KcDKTd.js → xsl-CeJj5xD1.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{yaml-C-7s0ZGy.js → yaml-C2k4Cqy8.js} +1 -1
- package/dist/diff_tool/app/dist/index.html +1 -1
- package/dist/host/hosted_ephemeral_agent_session.js +18 -4
- package/dist/host/hosted_ephemeral_agent_session.js.map +1 -1
- package/dist/host/local_session_host.js +54 -7
- package/dist/host/local_session_host.js.map +1 -1
- package/dist/host/session_protocol_handler.js +29 -2
- package/dist/host/session_protocol_handler.js.map +1 -1
- package/dist/protocol/session_protocol.js +22 -5
- package/dist/protocol/session_protocol.js.map +1 -1
- package/dist/tui/listen_capture.js +0 -1
- package/dist/tui/listen_capture.js.map +1 -1
- package/dist/tui/session_chat_controller.js +255 -39
- package/dist/tui/session_chat_controller.js.map +1 -1
- package/dist/tui/ui/footer.js +1 -1
- package/dist/tui/ui/footer.js.map +1 -1
- package/package.json +9 -9
- package/dist/diff_tool/app/dist/assets/index-ryW0IvBs.js +0 -1565
package/dist/core/personas.js
CHANGED
|
@@ -172,10 +172,11 @@ const CODER_SYSTEM_PROMPT = [
|
|
|
172
172
|
].join("\n\n");
|
|
173
173
|
const PERSONA_SPECS = [
|
|
174
174
|
{
|
|
175
|
-
id: "gemini-3.
|
|
176
|
-
description: "Gemini 3.
|
|
175
|
+
id: "gemini-3.8-flash",
|
|
176
|
+
description: "Gemini 3.8 Flash",
|
|
177
177
|
provider: "google",
|
|
178
|
-
modelId: "gemini-3.
|
|
178
|
+
modelId: "gemini-3.8-flash",
|
|
179
|
+
catalogOnly: true,
|
|
179
180
|
allowedReasoningLevels: ["low", "medium", "high"],
|
|
180
181
|
settings: { reasoning: "medium" },
|
|
181
182
|
skills: "*",
|
|
@@ -261,6 +262,46 @@ const PERSONA_SPECS = [
|
|
|
261
262
|
settings: { reasoning: "medium", serviceTier: "priority" },
|
|
262
263
|
skills: "*",
|
|
263
264
|
},
|
|
265
|
+
{
|
|
266
|
+
id: "gpt-6-astra",
|
|
267
|
+
description: "GPT-6 Astra",
|
|
268
|
+
provider: "openai",
|
|
269
|
+
modelId: "gpt-6-astra",
|
|
270
|
+
catalogOnly: true,
|
|
271
|
+
allowedReasoningLevels: ["low", "medium", "high", "xhigh", "max"],
|
|
272
|
+
settings: { reasoning: "medium" },
|
|
273
|
+
skills: "*",
|
|
274
|
+
},
|
|
275
|
+
{
|
|
276
|
+
id: "gpt-6-astra-chatgpt",
|
|
277
|
+
description: "GPT-6 Astra (ChatGPT)",
|
|
278
|
+
provider: "openai-codex",
|
|
279
|
+
modelId: "gpt-6-astra",
|
|
280
|
+
catalogOnly: true,
|
|
281
|
+
allowedReasoningLevels: ["low", "medium", "high", "xhigh", "max"],
|
|
282
|
+
settings: { reasoning: "medium" },
|
|
283
|
+
skills: "*",
|
|
284
|
+
},
|
|
285
|
+
{
|
|
286
|
+
id: "gpt-6-astra-chatgpt-fast",
|
|
287
|
+
description: "GPT-6 Astra Fast (ChatGPT)",
|
|
288
|
+
provider: "openai-codex",
|
|
289
|
+
modelId: "gpt-6-astra",
|
|
290
|
+
catalogOnly: true,
|
|
291
|
+
allowedReasoningLevels: ["low", "medium", "high", "xhigh", "max"],
|
|
292
|
+
settings: { reasoning: "medium", serviceTier: "priority" },
|
|
293
|
+
skills: "*",
|
|
294
|
+
},
|
|
295
|
+
{
|
|
296
|
+
id: "fable-5.1",
|
|
297
|
+
description: "Claude Fable 5.1",
|
|
298
|
+
provider: "anthropic",
|
|
299
|
+
modelId: "claude-fable-5-1",
|
|
300
|
+
catalogOnly: true,
|
|
301
|
+
allowedReasoningLevels: ["low", "medium", "high", "xhigh", "max"],
|
|
302
|
+
settings: { reasoning: "medium" },
|
|
303
|
+
skills: "*",
|
|
304
|
+
},
|
|
264
305
|
{
|
|
265
306
|
id: "opus-5",
|
|
266
307
|
description: "Claude Opus 5",
|
|
@@ -329,6 +370,9 @@ function buildPersona(spec, variant, modelResolver) {
|
|
|
329
370
|
}
|
|
330
371
|
export function createBuiltinPersonas(modelResolver = resolveModel) {
|
|
331
372
|
return PERSONA_SPECS.flatMap((spec) => {
|
|
373
|
+
if (spec.catalogOnly && !modelResolver(spec.provider, spec.modelId)) {
|
|
374
|
+
return [];
|
|
375
|
+
}
|
|
332
376
|
if (spec.id.includes("-codex-")) {
|
|
333
377
|
const coderPersona = buildPersona(spec, "coder", modelResolver);
|
|
334
378
|
return [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"personas.js","sourceRoot":"","sources":["../../src/core/personas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACvE,OAAO,EAAE,qBAAqB,EAA0B,MAAM,sBAAsB,CAAC;AACrF,OAAO,EACL,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,yBAAyB,EACzB,qBAAqB,EACrB,cAAc,EACd,6BAA6B,EAC7B,qBAAqB,EACrB,oBAAoB,EACpB,yBAAyB,EACzB,aAAa,EACb,eAAe,GAChB,MAAM,uBAAuB,CAAC;AAG/B,MAAM,8BAA8B,GAAG;;;;;;CAMtC,CAAC,IAAI,EAAE,CAAC;AAET,MAAM,oBAAoB,GAAG;;;;;;CAM5B,CAAC,IAAI,EAAE,CAAC;AAET,MAAM,6BAA6B,GAAG;;;;;;;;;;;;;;CAcrC,CAAC,IAAI,EAAE,CAAC;AAET,MAAM,yBAAyB,GAAG;;;;;;;;;;CAUjC,CAAC,IAAI,EAAE,CAAC;AAET,MAAM,+BAA+B,GAAG;;;;;;;;;;CAUvC,CAAC,IAAI,EAAE,CAAC;AAET,MAAM,4BAA4B,GAAG;;;;;;;;;;CAUpC,CAAC,IAAI,EAAE,CAAC;AAET,MAAM,mBAAmB,GAAG;;;;;;;;CAQ3B,CAAC,IAAI,EAAE,CAAC;AAET,MAAM,0BAA0B,GAAG;;;;;;;;;;;;;CAalC,CAAC,IAAI,EAAE,CAAC;AAET,MAAM,oBAAoB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;CAwB5B,CAAC,IAAI,EAAE,CAAC;AAET,MAAM,sBAAsB,GAAG;;;;;;;;;;;;;;CAc9B,CAAC,IAAI,EAAE,CAAC;AAET,MAAM,yBAAyB,GAAG;;;;;;;;CAQjC,CAAC,IAAI,EAAE,CAAC;AAET,MAAM,qBAAqB,GAAG;;;;CAI7B,CAAC,IAAI,EAAE,CAAC;AAET,MAAM,gCAAgC,GAAG;;;;;;CAMxC,CAAC,IAAI,EAAE,CAAC;AAET,MAAM,mBAAmB,GAAG;IAC1B,8BAA8B;IAC9B,6BAA6B;IAC7B,yBAAyB;IACzB,gCAAgC;IAChC,mBAAmB;IACnB,0BAA0B;IAC1B,yBAAyB;IACzB,qBAAqB;CACtB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAEf,MAAM,mBAAmB,GAAG;IAC1B,oBAAoB;IACpB,6BAA6B;IAC7B,+BAA+B;IAC/B,4BAA4B;IAC5B,gCAAgC;IAChC,mBAAmB;IACnB,0BAA0B;IAC1B,oBAAoB;IACpB,sBAAsB;IACtB,yBAAyB;IACzB,qBAAqB;CACtB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;
|
|
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
|
|
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
|
|
|
@@ -280,16 +280,16 @@ An attachment-only DM queues files for the next text or voice/audio turn; it doe
|
|
|
280
280
|
|
|
281
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.
|
|
282
282
|
|
|
283
|
-
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.
|
|
284
284
|
|
|
285
285
|
OpenAI is the default. Select Gemini with `speechToText.provider`. Runner credentials are:
|
|
286
286
|
|
|
287
287
|
- Gemini: `GEMINI_API_KEY`, then `apiKeys.google`
|
|
288
288
|
- OpenAI: `OPENAI_API_KEY`, then `apiKeys.openai`
|
|
289
289
|
|
|
290
|
-
Gemini extracts spelling hints from recent conversation with Gemini 3.
|
|
290
|
+
Gemini extracts spelling hints from recent conversation with Gemini 3.8 Flash, uploads downloaded audio for `gemini-3.5-transcribe` smart transcription, and attempts to delete the remote file afterward. OpenAI normalizes downloaded audio with runner-side `ffmpeg` and uploads it to `gpt-transcribe`. Missing keys reject the audio. See [credentials](credentials.md).
|
|
291
291
|
|
|
292
|
-
`/tts_on` uses `gemini-3.
|
|
292
|
+
`/tts_on` uses `gemini-3.8-flash`, `gemini-3.1-flash-tts-preview`, Despina, the Google key, and runner `ffmpeg` with Opus. Source and rewritten text each allow 10,000 Unicode characters; audio allows 32 MiB. Rewrite and job timeouts are one and five minutes. Jobs are ephemeral. Failure sends `voice response failed. please try again.` without affecting text; details stay in logs.
|
|
293
293
|
|
|
294
294
|
## Command client tools
|
|
295
295
|
|
|
@@ -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
|
|
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.
|
|
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.8 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";
|
|
@@ -517,9 +517,14 @@ const TelegramPhotoVariantSchema = telegramPartialObject({
|
|
|
517
517
|
width: z.number(),
|
|
518
518
|
height: z.number(),
|
|
519
519
|
});
|
|
520
|
-
const TelegramVoiceSchema = TelegramFileSchema.
|
|
521
|
-
|
|
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({
|
|
522
526
|
file_id: true,
|
|
527
|
+
duration: true,
|
|
523
528
|
mime_type: true,
|
|
524
529
|
file_name: true,
|
|
525
530
|
});
|
|
@@ -1202,22 +1207,26 @@ class TelegramAdapterImpl {
|
|
|
1202
1207
|
await this.answerCallbackQuery(callbackQuery.id, callbackHandled ? "done" : undefined);
|
|
1203
1208
|
}
|
|
1204
1209
|
parseAudioMessage(message) {
|
|
1205
|
-
const
|
|
1206
|
-
|
|
1210
|
+
const voice = message.voice;
|
|
1211
|
+
const voiceFileId = voice?.file_id?.trim();
|
|
1212
|
+
if (voice && voiceFileId) {
|
|
1207
1213
|
return {
|
|
1208
1214
|
fileId: voiceFileId,
|
|
1209
|
-
|
|
1215
|
+
durationMs: voice.duration * 1_000,
|
|
1216
|
+
mimeType: voice.mime_type?.trim() || DEFAULT_TELEGRAM_VOICE_MIME_TYPE,
|
|
1210
1217
|
fileName: DEFAULT_TELEGRAM_VOICE_FILE_NAME,
|
|
1211
1218
|
};
|
|
1212
1219
|
}
|
|
1213
|
-
const
|
|
1214
|
-
|
|
1220
|
+
const audio = message.audio;
|
|
1221
|
+
const audioFileId = audio?.file_id?.trim();
|
|
1222
|
+
if (!audio || !audioFileId) {
|
|
1215
1223
|
return undefined;
|
|
1216
1224
|
}
|
|
1217
1225
|
return {
|
|
1218
1226
|
fileId: audioFileId,
|
|
1219
|
-
|
|
1220
|
-
|
|
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,
|
|
1221
1230
|
};
|
|
1222
1231
|
}
|
|
1223
1232
|
async queueMessageAttachments(chatId, message, options = {}) {
|
|
@@ -1915,6 +1924,13 @@ class TelegramAdapterImpl {
|
|
|
1915
1924
|
}
|
|
1916
1925
|
}
|
|
1917
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
|
+
}
|
|
1918
1934
|
const apiKey = this.getSpeechToTextApiKey();
|
|
1919
1935
|
if (!apiKey) {
|
|
1920
1936
|
const error = this.getSpeechToTextApiKeyErrorMessage("transcribe Telegram audio");
|