@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.
- package/dist/core/auth/credential_store.js +1 -9
- package/dist/core/auth/credential_store.js.map +1 -1
- package/dist/core/cli.js +3 -0
- package/dist/core/cli.js.map +1 -1
- package/dist/core/config/runtime.js +4 -4
- package/dist/core/config/runtime.js.map +1 -1
- package/dist/core/config/runtime_config_snapshot.js +1 -1
- package/dist/core/config/runtime_config_snapshot.js.map +1 -1
- package/dist/core/models/catalog.js +11 -45
- package/dist/core/models/catalog.js.map +1 -1
- package/dist/core/models/cli.js +49 -0
- package/dist/core/models/cli.js.map +1 -0
- package/dist/core/models/remote_catalog.js +394 -0
- package/dist/core/models/remote_catalog.js.map +1 -0
- package/dist/core/personas.js +3 -3
- package/dist/core/static/tau_docs/getting-started.md +5 -1
- package/dist/core/static/tau_docs/models.md +12 -2
- package/dist/core/static/tau_docs/node-sdk.md +4 -1
- package/dist/core/static/tau_docs/security.md +5 -0
- package/dist/core/static/tau_docs/telegram.md +2 -2
- package/dist/core/static/tau_docs/tui.md +2 -2
- package/dist/core/telegram/adapter.js +2 -2
- package/dist/core/telegram/adapter.js.map +1 -1
- package/dist/core/telegram/local_session_client.js +1 -1
- package/dist/core/telegram/local_session_client.js.map +1 -1
- package/dist/core/telegram/tts.js +3 -4
- package/dist/core/telegram/tts.js.map +1 -1
- package/dist/core/utils/gemini_speech.js +435 -150
- package/dist/core/utils/gemini_speech.js.map +1 -1
- package/dist/core/utils/model_stream.js +0 -10
- package/dist/core/utils/model_stream.js.map +1 -1
- package/dist/core/utils/openai_transcription.js +164 -23
- package/dist/core/utils/openai_transcription.js.map +1 -1
- package/dist/core/utils/speech_to_text.js +1 -0
- package/dist/core/utils/speech_to_text.js.map +1 -1
- package/dist/core/version.js +2 -1
- package/dist/core/version.js.map +1 -1
- package/dist/execution/execution_environment.js.map +1 -1
- package/dist/execution/tool_backend_execution_environment.js +2 -1
- package/dist/execution/tool_backend_execution_environment.js.map +1 -1
- package/dist/host/execution_runtime.js +3 -1
- package/dist/host/execution_runtime.js.map +1 -1
- package/dist/host/local_session_host.js +37 -11
- package/dist/host/local_session_host.js.map +1 -1
- package/dist/main.js +52 -6
- package/dist/main.js.map +1 -1
- package/dist/sdk/local_client.d.ts +4 -1
- package/dist/sdk/local_client.js +32 -8
- package/dist/sdk/local_client.js.map +1 -1
- package/dist/sdk/types.d.ts +1 -0
- package/dist/tui/speech_playback.js +145 -82
- package/dist/tui/speech_playback.js.map +1 -1
- package/package.json +4 -4
- package/dist/core/models/tau_extensions.js +0 -27
- package/dist/core/models/tau_extensions.js.map +0 -1
|
@@ -1,109 +1,172 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
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
|
-
|
|
8
|
-
let
|
|
9
|
-
let
|
|
10
|
-
let
|
|
11
|
-
let
|
|
12
|
-
const
|
|
13
|
-
if (
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
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
|
|
58
|
+
for await (const chunk of streamGeminiSpeechPcm({
|
|
21
59
|
apiKey: args.apiKey,
|
|
22
60
|
sourceText: args.sourceText,
|
|
23
|
-
|
|
24
|
-
|
|
61
|
+
signal: abortController.signal,
|
|
62
|
+
initialBufferBytes: SPEECH_PLAYBACK_START_BUFFER_BYTES,
|
|
25
63
|
onStageChange: (stage) => {
|
|
26
|
-
args.onActivityLabel(stage === "rewriting" ? "rewriting for 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
|
-
|
|
35
|
-
|
|
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
|
-
|
|
66
|
-
|
|
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
|
-
|
|
70
|
-
|
|
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
|
|
74
|
-
|
|
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
|
-
|
|
102
|
+
if (outcome && "result" in outcome && !outcome.result.aborted) {
|
|
103
|
+
throw playbackFailure(outcome.result);
|
|
104
|
+
}
|
|
105
|
+
throw error;
|
|
77
106
|
}
|
|
78
107
|
finally {
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
}
|
|
108
|
+
abortController.abort();
|
|
109
|
+
abortController.dispose();
|
|
82
110
|
}
|
|
83
111
|
}
|
|
84
|
-
async function
|
|
85
|
-
|
|
86
|
-
|
|
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
|
-
|
|
90
|
-
|
|
91
|
-
|
|
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
|
-
|
|
131
|
+
await new Promise((resolve) => input.end(resolve));
|
|
94
132
|
}
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
133
|
+
function playbackFailure(result) {
|
|
134
|
+
const detail = result.stderr.trim();
|
|
135
|
+
if (detail) {
|
|
136
|
+
return new Error(`ffplay failed: ${detail}`);
|
|
98
137
|
}
|
|
99
|
-
|
|
100
|
-
|
|
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
|
|
104
|
-
|
|
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
|
|
107
|
-
|
|
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":"
|
|
1
|
+
{"version":3,"file":"speech_playback.js","sourceRoot":"","sources":["../../src/tui/speech_playback.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,6BAA6B,EAC7B,2BAA2B,EAC3B,2BAA2B,EAC3B,4BAA4B,EAC5B,qBAAqB,GACtB,MAAM,gCAAgC,CAAC;AAGxC,MAAM,+BAA+B,GAAG,GAAG,CAAC;AAC5C,MAAM,kCAAkC,GAAG,IAAI,CAAC,IAAI,CAClD,4BAA4B;IAC1B,2BAA2B;IAC3B,CAAC,6BAA6B,GAAG,CAAC,CAAC;IACnC,CAAC,+BAA+B,GAAG,IAAI,CAAC,CAC3C,CAAC;AAIF,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,IAM3C;IACC,MAAM,eAAe,GAAG,2BAA2B,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACjE,IAAI,QAA8C,CAAC;IACnD,IAAI,aAAa,GAAoB,IAAI,CAAC;IAC1C,IAAI,cAAc,GAAG,KAAK,CAAC;IAC3B,IAAI,oBAAiD,CAAC;IAEtD,MAAM,aAAa,GAAG,KAAK,IAAuB,EAAE;QAClD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,QAAQ,GAAG,IAAI,CAAC,IAAI;iBACjB,KAAK,CACJ,QAAQ,EACR;gBACE,SAAS;gBACT,WAAW;gBACX,WAAW;gBACX,OAAO;gBACP,IAAI;gBACJ,OAAO;gBACP,KAAK;gBACL,MAAM,CAAC,4BAA4B,CAAC;gBACpC,YAAY;gBACZ,MAAM;gBACN,KAAK;gBACL,UAAU,2BAA2B,EAAE;gBACvC,QAAQ;aACT,EACD;gBACE,QAAQ,EAAE,IAAI;gBACd,gBAAgB,EAAE,IAAI;gBACtB,MAAM,EAAE,eAAe,CAAC,MAAM;gBAC9B,KAAK,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC;gBACjC,aAAa,EAAE,QAAQ;gBACvB,eAAe,EAAE,MAAM;gBACvB,OAAO,EAAE,CAAC,KAAmB,EAAE,EAAE;oBAC/B,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC;oBAC5B,aAAa,EAAE,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;gBACvC,CAAC;aACF,CACF;iBACA,IAAI,CACH,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EACxB,CAAC,KAAc,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAChC,CAAC;YACJ,KAAK,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;gBAC7B,IAAI,CAAC,cAAc,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;oBACvD,oBAAoB,GAAG,OAAO,CAAC;oBAC/B,eAAe,CAAC,KAAK,EAAE,CAAC;gBAC1B,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;QAED,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC;YAC/B,MAAM,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC7E,CAAC;QAED,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAC;QACvC,OAAO,aAAa,CAAC;IACvB,CAAC,CAAC;IAEF,IAAI,CAAC;QACH,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,qBAAqB,CAAC;YAC9C,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,MAAM,EAAE,eAAe,CAAC,MAAM;YAC9B,kBAAkB,EAAE,kCAAkC;YACtD,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE;gBACvB,IAAI,CAAC,eAAe,CAAC,KAAK,KAAK,WAAW,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC;YAC5F,CAAC;SACF,CAAC,EAAE,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,aAAa,EAAE,CAAC;YACpC,MAAM,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC;QACvE,CAAC;QAED,cAAc,GAAG,IAAI,CAAC;QACtB,MAAM,WAAW,CAAC,aAAc,CAAC,CAAC;QAClC,MAAM,OAAO,GAAG,MAAM,QAAS,CAAC;QAChC,IAAI,OAAO,IAAI,OAAO,EAAE,CAAC;YACvB,MAAM,OAAO,CAAC,KAAK,CAAC;QACtB,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YAClD,OAAO;QACT,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;YAClC,MAAM,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,eAAe,CAAC,KAAK,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,oBAAoB,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAChF,IAAI,oBAAoB,EAAE,CAAC;YACzB,IAAI,OAAO,IAAI,oBAAoB,EAAE,CAAC;gBACpC,IAAI,wBAAwB,CAAC,oBAAoB,CAAC,KAAK,CAAC,EAAE,CAAC;oBACzD,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;gBACrE,CAAC;gBACD,MAAM,oBAAoB,CAAC,KAAK,CAAC;YACnC,CAAC;YACD,MAAM,eAAe,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;QACrD,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,CAAC,EAAE,CAAC;YACnF,OAAO;QACT,CAAC;QACD,IACE,wBAAwB,CAAC,KAAK,CAAC;YAC/B,CAAC,OAAO,IAAI,OAAO,IAAI,OAAO,IAAI,wBAAwB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAC1E,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACrE,CAAC;QACD,IAAI,OAAO,IAAI,QAAQ,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YAC9D,MAAM,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACxC,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;YAAS,CAAC;QACT,eAAe,CAAC,KAAK,EAAE,CAAC;QACxB,eAAe,CAAC,OAAO,EAAE,CAAC;IAC5B,CAAC;AACH,CAAC;AAED,KAAK,UAAU,kBAAkB,CAC/B,KAAe,EACf,KAAa,EACb,MAAmB;IAEnB,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,MAAM,UAAU,EAAE,CAAC;IACrB,CAAC;IAED,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC1C,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;YAC3B,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,CAAC,KAAK,CAAC,CAAC;YAChB,CAAC;iBAAM,CAAC;gBACN,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,KAAe;IACxC,IAAI,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;QAC3C,OAAO;IACT,CAAC;IACD,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,eAAe,CAAC,MAIxB;IACC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IACpC,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,IAAI,KAAK,CAAC,kBAAkB,MAAM,EAAE,CAAC,CAAC;IAC/C,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;QAC7B,OAAO,IAAI,KAAK,CAAC,2BAA2B,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;IACjE,CAAC;IACD,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;QACvB,OAAO,IAAI,KAAK,CAAC,+BAA+B,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,wBAAwB,CAAC,KAAc;IAC9C,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,MAAM,IAAI,KAAK;QACd,KAA+B,CAAC,IAAI,KAAK,QAAQ,CACnD,CAAC;AACJ,CAAC;AAED,SAAS,2BAA2B,CAAC,MAAmB;IAKtD,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAEtD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,OAAO,EAAE,CAAC;IACZ,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED,OAAO;QACL,MAAM,EAAE,UAAU,CAAC,MAAM;QACzB,KAAK,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE;QAC/B,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC;KAC5D,CAAC;AACJ,CAAC;AAED,SAAS,UAAU;IACjB,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACvD,KAAK,CAAC,IAAI,GAAG,YAAY,CAAC;IAC1B,OAAO,KAAK,CAAC;AACf,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@markusylisiurunen/tau",
|
|
3
|
-
"version": "0.3.
|
|
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.
|
|
40
|
-
"jose": "^6.2.
|
|
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.
|
|
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"}
|