@markusylisiurunen/tau 0.3.55 → 0.3.56

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 (55) hide show
  1. package/dist/core/auth/credential_store.js +1 -9
  2. package/dist/core/auth/credential_store.js.map +1 -1
  3. package/dist/core/cli.js +3 -0
  4. package/dist/core/cli.js.map +1 -1
  5. package/dist/core/config/runtime.js +4 -4
  6. package/dist/core/config/runtime.js.map +1 -1
  7. package/dist/core/config/runtime_config_snapshot.js +1 -1
  8. package/dist/core/config/runtime_config_snapshot.js.map +1 -1
  9. package/dist/core/models/catalog.js +11 -45
  10. package/dist/core/models/catalog.js.map +1 -1
  11. package/dist/core/models/cli.js +49 -0
  12. package/dist/core/models/cli.js.map +1 -0
  13. package/dist/core/models/remote_catalog.js +394 -0
  14. package/dist/core/models/remote_catalog.js.map +1 -0
  15. package/dist/core/personas.js +3 -3
  16. package/dist/core/static/tau_docs/getting-started.md +5 -1
  17. package/dist/core/static/tau_docs/models.md +12 -2
  18. package/dist/core/static/tau_docs/node-sdk.md +4 -1
  19. package/dist/core/static/tau_docs/security.md +5 -0
  20. package/dist/core/static/tau_docs/telegram.md +2 -2
  21. package/dist/core/static/tau_docs/tui.md +2 -2
  22. package/dist/core/telegram/adapter.js +2 -2
  23. package/dist/core/telegram/adapter.js.map +1 -1
  24. package/dist/core/telegram/local_session_client.js +1 -1
  25. package/dist/core/telegram/local_session_client.js.map +1 -1
  26. package/dist/core/telegram/tts.js +3 -4
  27. package/dist/core/telegram/tts.js.map +1 -1
  28. package/dist/core/utils/gemini_speech.js +435 -150
  29. package/dist/core/utils/gemini_speech.js.map +1 -1
  30. package/dist/core/utils/model_stream.js +0 -10
  31. package/dist/core/utils/model_stream.js.map +1 -1
  32. package/dist/core/utils/openai_transcription.js +164 -23
  33. package/dist/core/utils/openai_transcription.js.map +1 -1
  34. package/dist/core/utils/speech_to_text.js +1 -0
  35. package/dist/core/utils/speech_to_text.js.map +1 -1
  36. package/dist/core/version.js +2 -1
  37. package/dist/core/version.js.map +1 -1
  38. package/dist/execution/execution_environment.js.map +1 -1
  39. package/dist/execution/tool_backend_execution_environment.js +2 -1
  40. package/dist/execution/tool_backend_execution_environment.js.map +1 -1
  41. package/dist/host/execution_runtime.js +3 -1
  42. package/dist/host/execution_runtime.js.map +1 -1
  43. package/dist/host/local_session_host.js +37 -11
  44. package/dist/host/local_session_host.js.map +1 -1
  45. package/dist/main.js +52 -6
  46. package/dist/main.js.map +1 -1
  47. package/dist/sdk/local_client.d.ts +4 -1
  48. package/dist/sdk/local_client.js +32 -8
  49. package/dist/sdk/local_client.js.map +1 -1
  50. package/dist/sdk/types.d.ts +1 -0
  51. package/dist/tui/speech_playback.js +145 -82
  52. package/dist/tui/speech_playback.js.map +1 -1
  53. package/package.json +4 -4
  54. package/dist/core/models/tau_extensions.js +0 -27
  55. package/dist/core/models/tau_extensions.js.map +0 -1
@@ -1,109 +1,172 @@
1
- import { unlink, writeFile } from "node:fs/promises";
2
- import { tmpdir } from "node:os";
3
- import { join } from "node:path";
4
- import { GEMINI_SPEECH_PLAYBACK_RATE, streamGeminiSpeechAudio, } from "../core/utils/gemini_speech.js";
5
- export const SPEAK_TEMP_FILE_TEMPLATE = join(tmpdir(), "tau-speak.XXXXXX");
1
+ import { GEMINI_SPEECH_BITS_PER_SAMPLE, GEMINI_SPEECH_CHANNEL_COUNT, GEMINI_SPEECH_PLAYBACK_RATE, GEMINI_SPEECH_SAMPLE_RATE_HZ, streamGeminiSpeechPcm, } from "../core/utils/gemini_speech.js";
2
+ const SPEECH_PLAYBACK_START_BUFFER_MS = 500;
3
+ const SPEECH_PLAYBACK_START_BUFFER_BYTES = Math.ceil(GEMINI_SPEECH_SAMPLE_RATE_HZ *
4
+ GEMINI_SPEECH_CHANNEL_COUNT *
5
+ (GEMINI_SPEECH_BITS_PER_SAMPLE / 8) *
6
+ (SPEECH_PLAYBACK_START_BUFFER_MS / 1000));
6
7
  export async function runSpeechPlaybackTask(args) {
7
- let audioPath;
8
- let readyChunks = 0;
9
- let totalChunks = 0;
10
- let playedChunks = 0;
11
- let playbackStarted = false;
12
- const refreshSpeechProgress = () => {
13
- if (totalChunks <= 0)
14
- return;
15
- args.onActivityLabel(playbackStarted
16
- ? formatSpeechPlaybackProgressMessage(playedChunks, readyChunks, totalChunks)
17
- : formatSpeechChunkProgressMessage(readyChunks, totalChunks));
8
+ const abortController = createLinkedAbortController(args.signal);
9
+ let playback;
10
+ let playbackInput = null;
11
+ let playbackEnding = false;
12
+ let earlyPlaybackOutcome;
13
+ const startPlayback = async () => {
14
+ if (!playback) {
15
+ playback = args.deps
16
+ .spawn("ffplay", [
17
+ "-nodisp",
18
+ "-autoexit",
19
+ "-loglevel",
20
+ "error",
21
+ "-f",
22
+ "s16le",
23
+ "-ar",
24
+ String(GEMINI_SPEECH_SAMPLE_RATE_HZ),
25
+ "-ch_layout",
26
+ "mono",
27
+ "-af",
28
+ `atempo=${GEMINI_SPEECH_PLAYBACK_RATE}`,
29
+ "pipe:0",
30
+ ], {
31
+ detached: true,
32
+ killProcessGroup: true,
33
+ signal: abortController.signal,
34
+ stdio: ["pipe", "ignore", "pipe"],
35
+ captureOutput: "stderr",
36
+ maxCaptureBytes: 20_000,
37
+ onSpawn: (child) => {
38
+ playbackInput = child.stdin;
39
+ playbackInput?.on("error", () => { });
40
+ },
41
+ })
42
+ .then((result) => ({ result }), (error) => ({ error }));
43
+ void playback.then((outcome) => {
44
+ if (!playbackEnding && !abortController.signal.aborted) {
45
+ earlyPlaybackOutcome = outcome;
46
+ abortController.abort();
47
+ }
48
+ });
49
+ }
50
+ if (!playbackInput) {
51
+ const outcome = await playback;
52
+ throw "error" in outcome ? outcome.error : playbackFailure(outcome.result);
53
+ }
54
+ args.onActivityLabel("playing speech");
55
+ return playbackInput;
18
56
  };
19
57
  try {
20
- for await (const chunk of streamGeminiSpeechAudio({
58
+ for await (const chunk of streamGeminiSpeechPcm({
21
59
  apiKey: args.apiKey,
22
60
  sourceText: args.sourceText,
23
- deliveryMode: "progressive",
24
- signal: args.signal,
61
+ signal: abortController.signal,
62
+ initialBufferBytes: SPEECH_PLAYBACK_START_BUFFER_BYTES,
25
63
  onStageChange: (stage) => {
26
- args.onActivityLabel(stage === "rewriting" ? "rewriting for speech" : "generating speech");
27
- },
28
- onChunkProgress: ({ ready, total }) => {
29
- readyChunks = ready;
30
- totalChunks = total;
31
- refreshSpeechProgress();
64
+ args.onActivityLabel(stage === "rewriting" ? "rewriting for speech" : "preparing speech");
32
65
  },
33
66
  })) {
34
- if (args.signal.aborted) {
35
- return;
36
- }
37
- playbackStarted = true;
38
- totalChunks = chunk.total;
39
- refreshSpeechProgress();
40
- audioPath = await createTempFilePath(args.deps, SPEAK_TEMP_FILE_TEMPLATE);
41
- await writeFile(audioPath, chunk.audio);
42
- const playback = await args.deps.spawn("afplay", ["-r", String(GEMINI_SPEECH_PLAYBACK_RATE), audioPath], {
43
- detached: true,
44
- killProcessGroup: true,
45
- signal: args.signal,
46
- stdio: ["ignore", "ignore", "ignore"],
47
- });
48
- await cleanupTempFile(audioPath);
49
- audioPath = undefined;
50
- if (args.signal.aborted || playback.aborted) {
51
- return;
52
- }
53
- if (playback.exitCode !== 0) {
54
- const detail = playback.exitCode !== null
55
- ? `afplay exited with code ${playback.exitCode}`
56
- : playback.closeSignal
57
- ? `afplay terminated by signal ${playback.closeSignal}`
58
- : "afplay exited";
59
- throw new Error(detail);
60
- }
61
- playedChunks = chunk.index + 1;
62
- refreshSpeechProgress();
67
+ const input = await startPlayback();
68
+ await writePlaybackAudio(input, chunk.audio, abortController.signal);
63
69
  }
64
- }
65
- catch (err) {
66
- if (args.signal.aborted) {
70
+ playbackEnding = true;
71
+ await endPlayback(playbackInput);
72
+ const outcome = await playback;
73
+ if ("error" in outcome) {
74
+ throw outcome.error;
75
+ }
76
+ if (args.signal.aborted || outcome.result.aborted) {
67
77
  return;
68
78
  }
69
- const error = err;
70
- if (error.name === "AbortError") {
79
+ if (outcome.result.exitCode !== 0) {
80
+ throw playbackFailure(outcome.result);
81
+ }
82
+ }
83
+ catch (error) {
84
+ abortController.abort();
85
+ const outcome = earlyPlaybackOutcome ?? (playback ? await playback : undefined);
86
+ if (earlyPlaybackOutcome) {
87
+ if ("error" in earlyPlaybackOutcome) {
88
+ if (isMissingExecutableError(earlyPlaybackOutcome.error)) {
89
+ throw new Error("ffplay not found. Install ffmpeg to use /speak.");
90
+ }
91
+ throw earlyPlaybackOutcome.error;
92
+ }
93
+ throw playbackFailure(earlyPlaybackOutcome.result);
94
+ }
95
+ if (args.signal.aborted || (error instanceof Error && error.name === "AbortError")) {
71
96
  return;
72
97
  }
73
- if (error.code === "ENOENT") {
74
- throw new Error("afplay not found.");
98
+ if (isMissingExecutableError(error) ||
99
+ (outcome && "error" in outcome && isMissingExecutableError(outcome.error))) {
100
+ throw new Error("ffplay not found. Install ffmpeg to use /speak.");
75
101
  }
76
- throw err;
102
+ if (outcome && "result" in outcome && !outcome.result.aborted) {
103
+ throw playbackFailure(outcome.result);
104
+ }
105
+ throw error;
77
106
  }
78
107
  finally {
79
- if (audioPath) {
80
- await cleanupTempFile(audioPath);
81
- }
108
+ abortController.abort();
109
+ abortController.dispose();
82
110
  }
83
111
  }
84
- async function createTempFilePath(deps, template) {
85
- const result = await deps.spawn("mktemp", [template]);
86
- if (result.exitCode !== 0) {
87
- throw new Error(result.stderr || result.stdout || "mktemp failed");
112
+ async function writePlaybackAudio(input, audio, signal) {
113
+ if (signal.aborted) {
114
+ throw abortError();
88
115
  }
89
- const path = result.stdout.trim();
90
- if (!path) {
91
- throw new Error("mktemp returned an empty path");
116
+ await new Promise((resolve, reject) => {
117
+ input.write(audio, (error) => {
118
+ if (error) {
119
+ reject(error);
120
+ }
121
+ else {
122
+ resolve();
123
+ }
124
+ });
125
+ });
126
+ }
127
+ async function endPlayback(input) {
128
+ if (input.destroyed || input.writableEnded) {
129
+ return;
92
130
  }
93
- return path;
131
+ await new Promise((resolve) => input.end(resolve));
94
132
  }
95
- async function cleanupTempFile(path) {
96
- try {
97
- await unlink(path);
133
+ function playbackFailure(result) {
134
+ const detail = result.stderr.trim();
135
+ if (detail) {
136
+ return new Error(`ffplay failed: ${detail}`);
98
137
  }
99
- catch {
100
- // best-effort cleanup
138
+ if (result.exitCode !== null) {
139
+ return new Error(`ffplay exited with code ${result.exitCode}`);
101
140
  }
141
+ if (result.closeSignal) {
142
+ return new Error(`ffplay terminated by signal ${result.closeSignal}`);
143
+ }
144
+ return new Error("ffplay exited");
145
+ }
146
+ function isMissingExecutableError(error) {
147
+ return (typeof error === "object" &&
148
+ error !== null &&
149
+ "code" in error &&
150
+ error.code === "ENOENT");
102
151
  }
103
- function formatSpeechChunkProgressMessage(ready, total) {
104
- return `generating speech chunks (${ready} out of ${total} ready)`;
152
+ function createLinkedAbortController(parent) {
153
+ const controller = new AbortController();
154
+ const onAbort = () => controller.abort(parent.reason);
155
+ if (parent.aborted) {
156
+ onAbort();
157
+ }
158
+ else {
159
+ parent.addEventListener("abort", onAbort, { once: true });
160
+ }
161
+ return {
162
+ signal: controller.signal,
163
+ abort: () => controller.abort(),
164
+ dispose: () => parent.removeEventListener("abort", onAbort),
165
+ };
105
166
  }
106
- function formatSpeechPlaybackProgressMessage(played, ready, total) {
107
- return `playing speech (${played}/${total} played, ${ready}/${total} ready)`;
167
+ function abortError() {
168
+ const error = new Error("Speech playback was aborted");
169
+ error.name = "AbortError";
170
+ return error;
108
171
  }
109
172
  //# sourceMappingURL=speech_playback.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"speech_playback.js","sourceRoot":"","sources":["../../src/tui/speech_playback.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"speech_playback.js","sourceRoot":"","sources":["../../src/tui/speech_playback.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@markusylisiurunen/tau",
3
- "version": "0.3.55",
3
+ "version": "0.3.56",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "tau": "dist/main.js"
@@ -36,8 +36,8 @@
36
36
  "@fly/sprites": "^0.2.0",
37
37
  "chalk": "^6.0.0",
38
38
  "colorjs.io": "^0.7.1",
39
- "file-type": "^22.0.1",
40
- "jose": "^6.2.8",
39
+ "file-type": "^22.0.2",
40
+ "jose": "^6.2.9",
41
41
  "ses": "2.3.0",
42
42
  "sharp": "^0.35.3",
43
43
  "strip-ansi": "^7.2.0",
@@ -48,7 +48,7 @@
48
48
  },
49
49
  "devDependencies": {
50
50
  "@biomejs/biome": "2.5.8",
51
- "@cloudflare/workers-types": "^5.20260814.1",
51
+ "@cloudflare/workers-types": "^5.20260816.1",
52
52
  "@types/node": "^24.13.3",
53
53
  "@types/ws": "^8.18.1",
54
54
  "prettier": "^3.9.6",
@@ -1,27 +0,0 @@
1
- export const TAU_PROVIDER_EXTENSIONS = [];
2
- export function validateTauProviderExtensionModel(extension) {
3
- for (const model of extension.models) {
4
- if (model.provider !== extension.id) {
5
- throw new Error(`invalid model registration for provider '${extension.id}': model '${model.id}' declares provider '${model.provider}'`);
6
- }
7
- }
8
- }
9
- export function mergeTauProviderExtensionModels(provider, baseModels, extensions = TAU_PROVIDER_EXTENSIONS) {
10
- const modelIds = new Set(baseModels.map((model) => model.id));
11
- const merged = [...baseModels];
12
- for (const extension of extensions) {
13
- if (extension.id !== provider) {
14
- continue;
15
- }
16
- validateTauProviderExtensionModel(extension);
17
- for (const model of extension.models) {
18
- if (modelIds.has(model.id)) {
19
- continue;
20
- }
21
- modelIds.add(model.id);
22
- merged.push(model);
23
- }
24
- }
25
- return merged;
26
- }
27
- //# sourceMappingURL=tau_extensions.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tau_extensions.js","sourceRoot":"","sources":["../../../src/core/models/tau_extensions.ts"],"names":[],"mappings":"AAeA,MAAM,CAAC,MAAM,uBAAuB,GAA2B,EAAE,CAAC;AAElE,MAAM,UAAU,iCAAiC,CAAC,SAA+B;IAC/E,KAAK,MAAM,KAAK,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;QACrC,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,EAAE,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CACb,4CAA4C,SAAS,CAAC,EAAE,aAAa,KAAK,CAAC,EAAE,wBAAwB,KAAK,CAAC,QAAQ,GAAG,CACvH,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,+BAA+B,CAC7C,QAAgB,EAChB,UAAiC,EACjC,UAAU,GAAoC,uBAAuB;IAErE,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9D,MAAM,MAAM,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC;IAE/B,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,SAAS,CAAC,EAAE,KAAK,QAAQ,EAAE,CAAC;YAC9B,SAAS;QACX,CAAC;QAED,iCAAiC,CAAC,SAAS,CAAC,CAAC;QAE7C,KAAK,MAAM,KAAK,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;YACrC,IAAI,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC3B,SAAS;YACX,CAAC;YAED,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACvB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}