@tianshu-ai/tianshu 0.59.1 → 0.60.0
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/package.json +3 -1
- package/packages/server/dist/boot/routes-tts.d.ts.map +1 -1
- package/packages/server/dist/boot/routes-tts.js +108 -53
- package/packages/server/dist/boot/routes-tts.js.map +1 -1
- package/packages/server/dist/chat/handler.d.ts.map +1 -1
- package/packages/server/dist/chat/handler.js +10 -4
- package/packages/server/dist/chat/handler.js.map +1 -1
- package/packages/server/dist/setup/cli-agent.d.ts.map +1 -1
- package/packages/server/dist/setup/cli-agent.js +69 -2
- package/packages/server/dist/setup/cli-agent.js.map +1 -1
- package/packages/server/dist/setup/probe-default-model.js +7 -7
- package/packages/server/dist/setup/probe-default-model.js.map +1 -1
- package/packages/web/dist/assets/{DataSourceConfigForm-DzZTI-3W.js → DataSourceConfigForm-36_ZQLwM.js} +1 -1
- package/packages/web/dist/assets/{bundle-web-BD3MOGdz.js → bundle-web-bCpA4Yw9.js} +1 -1
- package/packages/web/dist/assets/{index-CgNsgpL6.js → index-Cf7Wv1i8.js} +6 -6
- package/packages/web/dist/assets/{react-force-graph-2d-DLdKoWtw.js → react-force-graph-2d-DH0NflcJ.js} +1 -1
- package/packages/web/dist/index.html +1 -1
- package/plugins/wiki/dist/embedding.d.ts.map +1 -1
- package/plugins/wiki/dist/embedding.js +44 -22
- package/plugins/wiki/dist/embedding.js.map +1 -1
- package/plugins/wiki/dist/server.d.ts.map +1 -1
- package/plugins/wiki/dist/server.js +67 -24
- package/plugins/wiki/dist/server.js.map +2 -2
- package/scripts/QWEN3_TTS_SETUP.md +186 -0
- package/scripts/qwen3-tts-server/install.sh +134 -0
- package/scripts/qwen3-tts-server/server.py +254 -0
- package/scripts/qwen3-tts-server/voices/.gitattributes +1 -0
- package/scripts/qwen3-tts-server/voices/yujie_ref.wav +0 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tianshu-ai/tianshu",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.60.0",
|
|
4
4
|
"description": "An open AI agent platform with a sidecar browser. Built in public.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"homepage": "https://github.com/tianshu-ai/tianshu",
|
|
@@ -33,6 +33,8 @@
|
|
|
33
33
|
"plugins/**/agent-seeds/**",
|
|
34
34
|
"plugins/**/templates/**",
|
|
35
35
|
"plugins/**/sandbox-image/**",
|
|
36
|
+
"scripts/qwen3-tts-server/**",
|
|
37
|
+
"scripts/QWEN3_TTS_SETUP.md",
|
|
36
38
|
"README.md",
|
|
37
39
|
"LICENSE"
|
|
38
40
|
],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes-tts.d.ts","sourceRoot":"","sources":["../../src/boot/routes-tts.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"routes-tts.d.ts","sourceRoot":"","sources":["../../src/boot/routes-tts.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAAE,OAAO,EAAqB,MAAM,SAAS,CAAC;AAmR1D,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,QA0H1C"}
|
|
@@ -1,23 +1,24 @@
|
|
|
1
1
|
// POST /api/tts: text -> audio proxy.
|
|
2
2
|
//
|
|
3
|
-
// Yu, 2026-09-19:
|
|
4
|
-
//
|
|
3
|
+
// Yu, 2026-09-19: initial version with edge + cosyvoice.
|
|
4
|
+
// Yu, 2026-09-20: replaced cosyvoice/kokoro with qwentts.
|
|
5
|
+
// CosyVoice (RTF 6x, too slow) and Kokoro (sounds like edge-tts)
|
|
6
|
+
// are removed. Only edge and qwentts remain.
|
|
7
|
+
//
|
|
8
|
+
// TTS_PROVIDER env selects the default backend:
|
|
5
9
|
//
|
|
6
10
|
// "edge" (default) — Microsoft Edge's online TTS via the
|
|
7
|
-
// @andresaya/edge-tts npm package. Zero local setup, no API key
|
|
8
|
-
//
|
|
9
|
-
//
|
|
10
|
-
// Microsoft EULA forbids commercial use (fine for a personal
|
|
11
|
-
// side project like tianshu, revisit before shipping).
|
|
11
|
+
// @andresaya/edge-tts npm package. Zero local setup, no API key.
|
|
12
|
+
// Chinese voices (Xiaoxiao/Yunxi/Yunyang) are near-production
|
|
13
|
+
// quality. Needs internet; Microsoft EULA forbids commercial use.
|
|
12
14
|
//
|
|
13
|
-
// "
|
|
14
|
-
// ~
|
|
15
|
-
//
|
|
16
|
-
// via HTTP. See scripts/COSYVOICE_SETUP.md for setup.
|
|
15
|
+
// "qwentts" — Local Qwen3-TTS 0.6B MLX server (Apache 2.0,
|
|
16
|
+
// RTF ~0.3x on Apple Silicon, 9 preset voices, 10 languages).
|
|
17
|
+
// See scripts/QWEN3_TTS_SETUP.md for setup.
|
|
17
18
|
//
|
|
18
19
|
// Same public contract in both cases:
|
|
19
|
-
// POST /api/tts body: { text, voice? }
|
|
20
|
-
// → response body: audio/* (mp3 for edge, wav for
|
|
20
|
+
// POST /api/tts body: { text, voice?, provider? }
|
|
21
|
+
// → response body: audio/* (mp3 for edge, wav for qwentts)
|
|
21
22
|
//
|
|
22
23
|
// Browser <audio> plays either directly; useTts hook doesn't care.
|
|
23
24
|
import { EdgeTTS } from "@andresaya/edge-tts";
|
|
@@ -59,7 +60,9 @@ function buildWavHeader(pcmByteLen) {
|
|
|
59
60
|
const byteRate = COSY_SAMPLE_RATE * COSY_CHANNELS * (COSY_BITS_PER_SAMPLE / 8);
|
|
60
61
|
const blockAlign = COSY_CHANNELS * (COSY_BITS_PER_SAMPLE / 8);
|
|
61
62
|
header.write("RIFF", 0);
|
|
62
|
-
|
|
63
|
+
// For streaming (pcmByteLen=0xFFFFFFFF), RIFF chunk size is also
|
|
64
|
+
// 0xFFFFFFFF — signals unknown length to decoders.
|
|
65
|
+
header.writeUInt32LE(pcmByteLen === 0xFFFFFFFF ? 0xFFFFFFFF : 36 + pcmByteLen, 4);
|
|
63
66
|
header.write("WAVE", 8);
|
|
64
67
|
header.write("fmt ", 12);
|
|
65
68
|
header.writeUInt32LE(16, 16);
|
|
@@ -139,34 +142,50 @@ async function handleEdge(res, text, voice) {
|
|
|
139
142
|
`(first at ${firstChunkMs}ms, total ${Date.now() - start}ms)`);
|
|
140
143
|
}
|
|
141
144
|
/**
|
|
142
|
-
*
|
|
143
|
-
*
|
|
145
|
+
* Local TTS handler — forwards to a local FastAPI server (Kokoro or
|
|
146
|
+
* CosyVoice) and streams WAV back to the browser.
|
|
147
|
+
*
|
|
148
|
+
* Yu, 2026-09-20: rewritten from buffer-all to true streaming.
|
|
149
|
+
* Old path buffered ALL PCM before prepending the WAV header,
|
|
150
|
+
* which meant 9+ seconds silence on CosyVoice before audio started.
|
|
151
|
+
*
|
|
152
|
+
* New path:
|
|
153
|
+
* 1. Send a WAV header with data-size = 0xFFFFFFFF (streaming
|
|
154
|
+
* marker; browsers / MediaSource treat this as "unknown length,
|
|
155
|
+
* keep reading until connection closes").
|
|
156
|
+
* 2. Pipe upstream PCM chunks directly to the HTTP response as
|
|
157
|
+
* they arrive — first audio byte reaches the browser as soon
|
|
158
|
+
* as the model yields its first chunk.
|
|
159
|
+
* 3. Connection close signals end-of-stream.
|
|
160
|
+
*
|
|
161
|
+
* Works with both Kokoro (RTF ~0.4x, first chunk ~2s) and CosyVoice
|
|
162
|
+
* (RTF ~6x, first chunk ~9s). The streaming path benefits Kokoro
|
|
163
|
+
* enormously; CosyVoice still has a long first-chunk wait but at
|
|
164
|
+
* least doesn't add extra buffering delay on top.
|
|
144
165
|
*/
|
|
145
|
-
async function
|
|
166
|
+
async function handleLocalTts(res, text, voice, providerLabel) {
|
|
146
167
|
const useVoice = voice?.trim() || DEFAULT_COSY_VOICE;
|
|
147
168
|
const upstream = process.env.TTS_URL || DEFAULT_COSY_URL;
|
|
148
169
|
const url = `${upstream}/inference_sft`;
|
|
149
|
-
// CosyVoice's FastAPI expects multipart/form-data (server.py:
|
|
150
|
-
// `tts_text: str = Form(), spk_id: str = Form()`).
|
|
151
170
|
const form = new FormData();
|
|
152
171
|
form.set("tts_text", text);
|
|
153
172
|
form.set("spk_id", useVoice);
|
|
154
|
-
console.log(`[tts]
|
|
173
|
+
console.log(`[tts] ${providerLabel} forwarding: len=${text.length} voice=${useVoice} url=${url}`);
|
|
155
174
|
let upstreamRes;
|
|
156
175
|
try {
|
|
157
176
|
upstreamRes = await fetch(url, { method: "POST", body: form });
|
|
158
177
|
}
|
|
159
178
|
catch (err) {
|
|
160
|
-
console.warn(`[tts]
|
|
179
|
+
console.warn(`[tts] ${providerLabel} upstream unreachable: ${upstream}`, err);
|
|
161
180
|
res.status(503).json({
|
|
162
181
|
error: "tts upstream unreachable",
|
|
163
182
|
detail: err instanceof Error ? err.message : String(err),
|
|
164
|
-
hint: `Is
|
|
183
|
+
hint: `Is the TTS server running at ${upstream}?`,
|
|
165
184
|
});
|
|
166
185
|
return;
|
|
167
186
|
}
|
|
168
187
|
if (!upstreamRes.ok || !upstreamRes.body) {
|
|
169
|
-
console.warn(`[tts]
|
|
188
|
+
console.warn(`[tts] ${providerLabel} upstream error: ${upstreamRes.status} ${upstreamRes.statusText}`);
|
|
170
189
|
res.status(upstreamRes.status).json({
|
|
171
190
|
error: "tts upstream returned error",
|
|
172
191
|
status: upstreamRes.status,
|
|
@@ -174,11 +193,17 @@ async function handleCosyvoice(res, text, voice) {
|
|
|
174
193
|
});
|
|
175
194
|
return;
|
|
176
195
|
}
|
|
177
|
-
//
|
|
178
|
-
//
|
|
179
|
-
|
|
180
|
-
|
|
196
|
+
// Stream WAV: send header immediately with unknown data size,
|
|
197
|
+
// then pipe PCM chunks as they arrive from upstream.
|
|
198
|
+
const streamingHeader = buildWavHeader(0xFFFFFFFF);
|
|
199
|
+
res.setHeader("Content-Type", "audio/wav");
|
|
200
|
+
res.setHeader("Cache-Control", "no-store");
|
|
201
|
+
res.setHeader("X-Accel-Buffering", "no");
|
|
202
|
+
res.write(streamingHeader);
|
|
203
|
+
const start = Date.now();
|
|
181
204
|
let totalBytes = 0;
|
|
205
|
+
let chunkCount = 0;
|
|
206
|
+
let firstChunkMs = null;
|
|
182
207
|
const reader = upstreamRes.body.getReader();
|
|
183
208
|
try {
|
|
184
209
|
while (true) {
|
|
@@ -186,39 +211,69 @@ async function handleCosyvoice(res, text, voice) {
|
|
|
186
211
|
if (done)
|
|
187
212
|
break;
|
|
188
213
|
const buf = Buffer.from(value);
|
|
189
|
-
|
|
214
|
+
if (firstChunkMs == null)
|
|
215
|
+
firstChunkMs = Date.now() - start;
|
|
190
216
|
totalBytes += buf.length;
|
|
217
|
+
chunkCount++;
|
|
218
|
+
res.write(buf);
|
|
191
219
|
}
|
|
192
220
|
}
|
|
193
221
|
catch (err) {
|
|
194
|
-
console.warn(
|
|
195
|
-
|
|
196
|
-
error: "tts upstream stream aborted",
|
|
197
|
-
detail: err instanceof Error ? err.message : String(err),
|
|
198
|
-
});
|
|
199
|
-
return;
|
|
222
|
+
console.warn(`[tts] ${providerLabel} stream aborted:`, err);
|
|
223
|
+
// Headers already sent; just close the response.
|
|
200
224
|
}
|
|
225
|
+
res.end();
|
|
201
226
|
if (totalBytes === 0) {
|
|
202
|
-
console.warn(
|
|
203
|
-
res.status(502).json({ error: "tts upstream returned empty audio" });
|
|
227
|
+
console.warn(`[tts] ${providerLabel} returned empty PCM`);
|
|
204
228
|
return;
|
|
205
229
|
}
|
|
206
|
-
const
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
res.setHeader("Cache-Control", "no-store");
|
|
211
|
-
res.write(header);
|
|
212
|
-
for (const chunk of chunks)
|
|
213
|
-
res.write(chunk);
|
|
214
|
-
res.end();
|
|
215
|
-
console.log(`[tts] cosyvoice delivered wav: pcm=${totalBytes}B total=${wavLen}B ` +
|
|
216
|
-
`(${(totalBytes /
|
|
217
|
-
COSY_SAMPLE_RATE /
|
|
218
|
-
(COSY_BITS_PER_SAMPLE / 8) /
|
|
219
|
-
COSY_CHANNELS).toFixed(1)}s)`);
|
|
230
|
+
const audioDur = totalBytes / COSY_SAMPLE_RATE / (COSY_BITS_PER_SAMPLE / 8) / COSY_CHANNELS;
|
|
231
|
+
console.log(`[tts] ${providerLabel} streamed wav: ${totalBytes}B in ${chunkCount} chunks ` +
|
|
232
|
+
`(first at ${firstChunkMs}ms, total ${Date.now() - start}ms, ` +
|
|
233
|
+
`${audioDur.toFixed(1)}s audio)`);
|
|
220
234
|
}
|
|
221
235
|
export function mountTtsRoutes(app) {
|
|
236
|
+
// GET /api/tts/stream?text=...&voice=...&provider=...
|
|
237
|
+
//
|
|
238
|
+
// Streaming-friendly endpoint that browsers can use directly via
|
|
239
|
+
// <audio src="/api/tts/stream?...">. Unlike POST /api/tts, the
|
|
240
|
+
// browser's built-in audio pipeline handles chunked WAV natively —
|
|
241
|
+
// playback starts as soon as the first bytes arrive, no need for
|
|
242
|
+
// MediaSource or blob buffering.
|
|
243
|
+
//
|
|
244
|
+
// Yu, 2026-09-21: added so qwentts true-streaming WAV can be
|
|
245
|
+
// consumed edge-to-edge without waiting for the full response.
|
|
246
|
+
app.get("/api/tts/stream", async (req, res) => {
|
|
247
|
+
const text = typeof req.query.text === "string" ? req.query.text.trim() : "";
|
|
248
|
+
const voice = typeof req.query.voice === "string" && req.query.voice.trim().length
|
|
249
|
+
? req.query.voice.trim()
|
|
250
|
+
: undefined;
|
|
251
|
+
const requestedProvider = typeof req.query.provider === "string" && req.query.provider.trim().length
|
|
252
|
+
? req.query.provider.trim().toLowerCase()
|
|
253
|
+
: TTS_PROVIDER;
|
|
254
|
+
if (!text) {
|
|
255
|
+
res.status(400).json({ error: "text is required" });
|
|
256
|
+
return;
|
|
257
|
+
}
|
|
258
|
+
if (text.length > MAX_TEXT_CHARS) {
|
|
259
|
+
res.status(400).json({
|
|
260
|
+
error: `text too long: ${text.length} chars > max ${MAX_TEXT_CHARS}`,
|
|
261
|
+
});
|
|
262
|
+
return;
|
|
263
|
+
}
|
|
264
|
+
if (requestedProvider === "edge") {
|
|
265
|
+
await handleEdge(res, text, voice);
|
|
266
|
+
}
|
|
267
|
+
else if (requestedProvider === "qwentts") {
|
|
268
|
+
await handleLocalTts(res, text, voice, requestedProvider);
|
|
269
|
+
}
|
|
270
|
+
else {
|
|
271
|
+
res.status(400).json({
|
|
272
|
+
error: `unknown provider: ${requestedProvider}`,
|
|
273
|
+
hint: "Use provider=edge or provider=qwentts",
|
|
274
|
+
});
|
|
275
|
+
}
|
|
276
|
+
});
|
|
222
277
|
app.post("/api/tts", async (req, res) => {
|
|
223
278
|
const body = (req.body ?? {});
|
|
224
279
|
const text = typeof body.text === "string" ? body.text.trim() : "";
|
|
@@ -245,14 +300,14 @@ export function mountTtsRoutes(app) {
|
|
|
245
300
|
if (requestedProvider === "edge") {
|
|
246
301
|
await handleEdge(res, text, voice);
|
|
247
302
|
}
|
|
248
|
-
else if (requestedProvider === "
|
|
249
|
-
await
|
|
303
|
+
else if (requestedProvider === "qwentts") {
|
|
304
|
+
await handleLocalTts(res, text, voice, requestedProvider);
|
|
250
305
|
}
|
|
251
306
|
else {
|
|
252
307
|
console.warn(`[tts] unknown provider: ${requestedProvider}`);
|
|
253
308
|
res.status(400).json({
|
|
254
309
|
error: `unknown provider: ${requestedProvider}`,
|
|
255
|
-
hint: "Use provider=edge or provider=
|
|
310
|
+
hint: "Use provider=edge or provider=qwentts",
|
|
256
311
|
});
|
|
257
312
|
}
|
|
258
313
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes-tts.js","sourceRoot":"","sources":["../../src/boot/routes-tts.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,EAAE;AACF,
|
|
1
|
+
{"version":3,"file":"routes-tts.js","sourceRoot":"","sources":["../../src/boot/routes-tts.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../src/chat/handler.ts"],"names":[],"mappings":"AAgDA,OAAO,EACL,mBAAmB,EACnB,cAAc,EAEd,KAAK,mBAAmB,EACxB,KAAK,wBAAwB,EAC9B,MAAM,uBAAuB,CAAC;AAI/B,OAAO,EACL,mBAAmB,EACnB,cAAc,EACd,KAAK,mBAAmB,EACxB,KAAK,wBAAwB,GAC9B,CAAC;AAGF,OAAO,EACL,mBAAmB,EACnB,0BAA0B,EAC1B,wBAAwB,EACxB,2BAA2B,EAC3B,wBAAwB,EACxB,2BAA2B,EAC3B,yBAAyB,EACzB,6BAA6B,EAC7B,2BAA2B,EAC3B,4BAA4B,EAC5B,KAAK,oBAAoB,GAC1B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,EAOL,KAAK,aAAa,EACnB,MAAM,kBAAkB,CAAC;AA4B1B,OAAO,EAGL,KAAK,WAAW,EACjB,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EAOL,KAAK,WAAW,EAEjB,MAAM,eAAe,CAAC;AAWvB,OAAO,EAGL,KAAK,SAAS,EAEd,KAAK,cAAc,EAEpB,MAAM,kBAAkB,CAAC;AA6B1B,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,aAAa,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,SAAS,CAAC;IAClB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,OAAO,6BAA6B,EAAE,cAAc,CAAC;IACtE,+DAA+D;IAC/D,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../src/chat/handler.ts"],"names":[],"mappings":"AAgDA,OAAO,EACL,mBAAmB,EACnB,cAAc,EAEd,KAAK,mBAAmB,EACxB,KAAK,wBAAwB,EAC9B,MAAM,uBAAuB,CAAC;AAI/B,OAAO,EACL,mBAAmB,EACnB,cAAc,EACd,KAAK,mBAAmB,EACxB,KAAK,wBAAwB,GAC9B,CAAC;AAGF,OAAO,EACL,mBAAmB,EACnB,0BAA0B,EAC1B,wBAAwB,EACxB,2BAA2B,EAC3B,wBAAwB,EACxB,2BAA2B,EAC3B,yBAAyB,EACzB,6BAA6B,EAC7B,2BAA2B,EAC3B,4BAA4B,EAC5B,KAAK,oBAAoB,GAC1B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,EAOL,KAAK,aAAa,EACnB,MAAM,kBAAkB,CAAC;AA4B1B,OAAO,EAGL,KAAK,WAAW,EACjB,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EAOL,KAAK,WAAW,EAEjB,MAAM,eAAe,CAAC;AAWvB,OAAO,EAGL,KAAK,SAAS,EAEd,KAAK,cAAc,EAEpB,MAAM,kBAAkB,CAAC;AA6B1B,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,aAAa,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,SAAS,CAAC;IAClB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,OAAO,6BAA6B,EAAE,cAAc,CAAC;IACtE,+DAA+D;IAC/D,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI,CAiQ7D;AAED,UAAU,aAAa;IACrB,GAAG,EAAE,aAAa,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,CAAC,GAAG,EAAE,SAAS,KAAK,IAAI,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,cAAc,EAAE,CAAC;IAC/B,MAAM,EAAE,WAAW,CAAC;IACpB,cAAc,CAAC,EAAE,OAAO,6BAA6B,EAAE,cAAc,CAAC;IACtE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;4BAGwB;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;;;;;OAQG;IACH,OAAO,CAAC,EAAE,OAAO,eAAe,EAAE,WAAW,CAAC;IAC9C;;;;;;OAMG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC;;;;;;;OAOG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,wBAAsB,SAAS,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAikClE;AAmVD,wBAAgB,uBAAuB,CACrC,oBAAoB,EAAE,WAAW,CAAC,MAAM,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,EAC3D,2BAA2B,CAAC,EAAE,MAAM,GACnC,MAAM,CAuCR;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,oBAAoB,EAAE,MAAM,GAAG,MAAM,EAAE,CAgB3E;AAsCD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,aAAa,EAClB,SAAS,EAAE,MAAM,GAChB,MAAM,GAAG,IAAI,CA0Ef;AA4QD,wBAAgB,cAAc,IAAI,WAAW,EAAE,CAkC9C;AAGD,YAAY,EAAE,WAAW,EAAE,CAAC"}
|
|
@@ -55,7 +55,7 @@ import { buildHostTools, buildRecallHostTools, getCompactRef } from "./host-tool
|
|
|
55
55
|
import { progressiveHistoryTransform } from "./progressive-history.js";
|
|
56
56
|
import { toWire, } from "./ws-protocol.js";
|
|
57
57
|
import { cacheGet, cachePut, fitToLimit, imageFitCacheKey, } from "./image-fit.js";
|
|
58
|
-
const MAX_TURNS =
|
|
58
|
+
const MAX_TURNS = 9999;
|
|
59
59
|
// Yu, 2026-09-18 10:29: warn when a single tool_result crosses this
|
|
60
60
|
// size. Threshold picked to catch mvn/spring-boot-style firehose
|
|
61
61
|
// output (typically 1-20MB) while ignoring routine tool results
|
|
@@ -174,8 +174,10 @@ export function attachChatHandler(opts) {
|
|
|
174
174
|
return;
|
|
175
175
|
}
|
|
176
176
|
case "prompt": {
|
|
177
|
-
if (aborter)
|
|
178
|
-
|
|
177
|
+
if (aborter) {
|
|
178
|
+
console.warn(`[handler] abort:new_prompt (previous turn superseded by new user message)`);
|
|
179
|
+
aborter.abort();
|
|
180
|
+
}
|
|
179
181
|
aborter = new AbortController();
|
|
180
182
|
// Slash-command: `/compact` runs an immediate compaction
|
|
181
183
|
// pass without sending a fresh user prompt. Recognised when
|
|
@@ -226,8 +228,10 @@ export function attachChatHandler(opts) {
|
|
|
226
228
|
// Resume the last turn of the current session in place (no new
|
|
227
229
|
// user message). The client's auto-retry loop uses this so a
|
|
228
230
|
// failed / interrupted run doesn't spawn duplicate prompts.
|
|
229
|
-
if (aborter)
|
|
231
|
+
if (aborter) {
|
|
232
|
+
console.warn(`[handler] abort:retry (previous turn superseded by client retry)`);
|
|
230
233
|
aborter.abort();
|
|
234
|
+
}
|
|
231
235
|
aborter = new AbortController();
|
|
232
236
|
runPrompt({
|
|
233
237
|
ctx,
|
|
@@ -248,6 +252,7 @@ export function attachChatHandler(opts) {
|
|
|
248
252
|
return;
|
|
249
253
|
}
|
|
250
254
|
case "abort": {
|
|
255
|
+
console.warn(`[handler] abort:user_stop (user clicked stop button)`);
|
|
251
256
|
aborter?.abort();
|
|
252
257
|
aborter = null;
|
|
253
258
|
return;
|
|
@@ -746,6 +751,7 @@ export async function runPrompt(args) {
|
|
|
746
751
|
lastAssistantRow = row;
|
|
747
752
|
assistantTurns++;
|
|
748
753
|
if (assistantTurns >= MAX_TURNS) {
|
|
754
|
+
console.warn(`[handler] abort:max_turns session=${session.id} turns=${assistantTurns}/${MAX_TURNS}`);
|
|
749
755
|
void harness.abort();
|
|
750
756
|
}
|
|
751
757
|
},
|