@aiwayds/dsh-tui-pi 2.19.0 → 2.20.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/README.md +12 -48
- package/README.zh-CN.md +11 -47
- package/lib/agents.js +67 -52
- package/lib/agents.js.map +1 -1
- package/lib/ask-user.js +30 -30
- package/lib/ask-user.js.map +1 -1
- package/lib/attachments.js +8 -3
- package/lib/attachments.js.map +1 -1
- package/lib/btw.d.ts +4 -2
- package/lib/btw.js +22 -16
- package/lib/btw.js.map +1 -1
- package/lib/custom-provider.js +34 -28
- package/lib/custom-provider.js.map +1 -1
- package/lib/footer.d.ts +9 -8
- package/lib/footer.js +36 -18
- package/lib/footer.js.map +1 -1
- package/lib/hard-exit.d.ts +36 -0
- package/lib/hard-exit.js +64 -0
- package/lib/hard-exit.js.map +1 -0
- package/lib/history-fork.d.ts +2 -2
- package/lib/history-fork.js +12 -9
- package/lib/history-fork.js.map +1 -1
- package/lib/history-turns.d.ts +4 -2
- package/lib/history-turns.js +7 -3
- package/lib/history-turns.js.map +1 -1
- package/lib/history.js +57 -45
- package/lib/history.js.map +1 -1
- package/lib/hotkeys.js +44 -33
- package/lib/hotkeys.js.map +1 -1
- package/lib/i18n/index.d.ts +54 -0
- package/lib/i18n/index.js +98 -0
- package/lib/i18n/index.js.map +1 -0
- package/lib/i18n/registry.d.ts +65 -0
- package/lib/i18n/registry.js +129 -0
- package/lib/i18n/registry.js.map +1 -0
- package/lib/index.js +216 -108
- package/lib/index.js.map +1 -1
- package/lib/language-ask.d.ts +98 -0
- package/lib/language-ask.js +118 -0
- package/lib/language-ask.js.map +1 -0
- package/lib/live-widgets.js +9 -8
- package/lib/live-widgets.js.map +1 -1
- package/lib/login.js +5 -4
- package/lib/login.js.map +1 -1
- package/lib/messages.d.ts +0 -4
- package/lib/messages.js +14 -15
- package/lib/messages.js.map +1 -1
- package/lib/model-profiles.js +32 -20
- package/lib/model-profiles.js.map +1 -1
- package/lib/panels.js +18 -17
- package/lib/panels.js.map +1 -1
- package/lib/preflight-projcache.js +9 -3
- package/lib/preflight-projcache.js.map +1 -1
- package/lib/preset-dialog.d.ts +3 -3
- package/lib/preset-dialog.js +20 -17
- package/lib/preset-dialog.js.map +1 -1
- package/lib/provider-catalog.d.ts +23 -7
- package/lib/provider-catalog.js +90 -68
- package/lib/provider-catalog.js.map +1 -1
- package/lib/queue-panel.d.ts +2 -2
- package/lib/queue-panel.js +13 -9
- package/lib/queue-panel.js.map +1 -1
- package/lib/repair-dialog.d.ts +4 -4
- package/lib/repair-dialog.js +23 -16
- package/lib/repair-dialog.js.map +1 -1
- package/lib/route-dialog.d.ts +3 -3
- package/lib/route-dialog.js +20 -14
- package/lib/route-dialog.js.map +1 -1
- package/lib/selectors.d.ts +15 -1
- package/lib/selectors.js +57 -23
- package/lib/selectors.js.map +1 -1
- package/lib/sessions.d.ts +47 -14
- package/lib/sessions.js +162 -53
- package/lib/sessions.js.map +1 -1
- package/lib/settings.d.ts +68 -9
- package/lib/settings.js +327 -78
- package/lib/settings.js.map +1 -1
- package/lib/skills-manager.js +27 -21
- package/lib/skills-manager.js.map +1 -1
- package/lib/skills.js +5 -4
- package/lib/skills.js.map +1 -1
- package/lib/startup-info.js +9 -3
- package/lib/startup-info.js.map +1 -1
- package/lib/steer-flow.d.ts +14 -4
- package/lib/steer-flow.js +24 -9
- package/lib/steer-flow.js.map +1 -1
- package/lib/stop-dialog.d.ts +2 -2
- package/lib/stop-dialog.js +16 -12
- package/lib/stop-dialog.js.map +1 -1
- package/lib/subagent-viewer.d.ts +3 -6
- package/lib/subagent-viewer.js +38 -36
- package/lib/subagent-viewer.js.map +1 -1
- package/lib/theme-preview.js +12 -11
- package/lib/theme-preview.js.map +1 -1
- package/lib/theme-settings.d.ts +23 -2
- package/lib/theme-settings.js +68 -61
- package/lib/theme-settings.js.map +1 -1
- package/lib/tui.js +2 -1
- package/lib/tui.js.map +1 -1
- package/locales/en.json +646 -0
- package/locales/ja.json +646 -0
- package/locales/ko.json +646 -0
- package/locales/zh-CN.json +646 -0
- package/package.json +2 -1
- package/skills/dsh-tui-pi-config/SKILL.md +9 -2
package/lib/btw.js
CHANGED
|
@@ -23,10 +23,16 @@
|
|
|
23
23
|
* wiring in index.ts.
|
|
24
24
|
*/
|
|
25
25
|
import { createUserMessage } from '@deepseek-ai/dsh-llm';
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
26
|
+
import { t } from "./i18n/index.js";
|
|
27
|
+
// ------------------------------------------------------------ UI copy --
|
|
28
|
+
/** Idle-state guidance for a bare `/btw`: the main line is idle, ask directly. */
|
|
29
|
+
export function btwIdleNotice() {
|
|
30
|
+
return t('btw.notice.idle');
|
|
31
|
+
}
|
|
32
|
+
/** Usage line for `/btw <question>`. */
|
|
33
|
+
export function btwUsage() {
|
|
34
|
+
return t('btw.notice.usage');
|
|
35
|
+
}
|
|
30
36
|
/**
|
|
31
37
|
* Parse the text after `/btw`. Everything is the question except one
|
|
32
38
|
* optional `--model provider/model` override (extractable from anywhere in
|
|
@@ -45,9 +51,9 @@ export function parseBtwInput(rawInput) {
|
|
|
45
51
|
question = `${raw.slice(0, match.index)} ${raw.slice(match.index + match[0].length)}`.trim();
|
|
46
52
|
}
|
|
47
53
|
if (question === '')
|
|
48
|
-
return { kind: 'error', error: '
|
|
54
|
+
return { kind: 'error', error: t('btw.error.noQuestion') };
|
|
49
55
|
if (modelOverride !== undefined && !modelOverride.includes('/')) {
|
|
50
|
-
return { kind: 'error', error:
|
|
56
|
+
return { kind: 'error', error: t('btw.error.invalidModel', { model: modelOverride }) };
|
|
51
57
|
}
|
|
52
58
|
// The override key is omitted (not undefined-valued) when absent.
|
|
53
59
|
return modelOverride === undefined
|
|
@@ -171,7 +177,7 @@ export class BtwQueue {
|
|
|
171
177
|
return { kind: 'started' };
|
|
172
178
|
}
|
|
173
179
|
if (this.waiting.length >= BTW_QUEUE_CAP) {
|
|
174
|
-
return { kind: 'rejected', reason:
|
|
180
|
+
return { kind: 'rejected', reason: t('btw.queueFull', { cap: BTW_QUEUE_CAP }) };
|
|
175
181
|
}
|
|
176
182
|
this.waiting.push(job);
|
|
177
183
|
return { kind: 'queued', position: this.waiting.length };
|
|
@@ -212,17 +218,17 @@ export async function consumeBtwStream(chunks, onDelta, signal) {
|
|
|
212
218
|
case 'aborted':
|
|
213
219
|
return { kind: 'aborted' };
|
|
214
220
|
case 'error':
|
|
215
|
-
return { kind: 'error', message: chunk.reason.failure?.message ?? '
|
|
221
|
+
return { kind: 'error', message: chunk.reason.failure?.message ?? t('btw.error.unknownStream') };
|
|
216
222
|
case 'max-tokens':
|
|
217
|
-
return { kind: 'error', message: '
|
|
223
|
+
return { kind: 'error', message: t('btw.error.maxTokens') };
|
|
218
224
|
case 'tool-calls':
|
|
219
|
-
return { kind: 'error', message: '
|
|
225
|
+
return { kind: 'error', message: t('btw.error.toolCalls') };
|
|
220
226
|
default:
|
|
221
|
-
return { kind: 'error', message:
|
|
227
|
+
return { kind: 'error', message: t('btw.error.unsupportedFinish', { kind: String(chunk.reason?.kind) }) };
|
|
222
228
|
}
|
|
223
229
|
}
|
|
224
230
|
}
|
|
225
|
-
return { kind: 'error', message: '
|
|
231
|
+
return { kind: 'error', message: t('btw.error.noFinish') };
|
|
226
232
|
}
|
|
227
233
|
catch (error) {
|
|
228
234
|
if (signal?.aborted)
|
|
@@ -318,8 +324,8 @@ export class BtwController {
|
|
|
318
324
|
: resolveOverride(job.modelOverride);
|
|
319
325
|
if (selection === undefined) {
|
|
320
326
|
this.deps.notify(job.modelOverride === undefined
|
|
321
|
-
? '
|
|
322
|
-
:
|
|
327
|
+
? t('btw.error.noModel')
|
|
328
|
+
: t('btw.error.modelUnavailable', { model: job.modelOverride }), 'error');
|
|
323
329
|
this.drain();
|
|
324
330
|
return;
|
|
325
331
|
}
|
|
@@ -335,7 +341,7 @@ export class BtwController {
|
|
|
335
341
|
if (promoted && this.deps.hasCapturingSurface?.() === true) {
|
|
336
342
|
// A drained job popping up under an active dialog/overlay would steal
|
|
337
343
|
// the keyboard mid-flow — run into the slot instead; /btw reopens it.
|
|
338
|
-
this.deps.notify('btw
|
|
344
|
+
this.deps.notify(t('btw.background'), 'info');
|
|
339
345
|
}
|
|
340
346
|
else {
|
|
341
347
|
this.deps.onRunStarted(run);
|
|
@@ -394,7 +400,7 @@ export class BtwController {
|
|
|
394
400
|
// No surface to show the failure on — the footer notice is the only
|
|
395
401
|
// channel left (the overlay path renders it in place).
|
|
396
402
|
if (!this.overlayOpen)
|
|
397
|
-
this.deps.notify(
|
|
403
|
+
this.deps.notify(t('btw.failed', { message: finish.message }), 'error');
|
|
398
404
|
}
|
|
399
405
|
this.deps.requestRender();
|
|
400
406
|
this.drain();
|
package/lib/btw.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"btw.js","sourceRoot":"","sources":["../src/btw.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAAE,iBAAiB,EAAwC,MAAM,sBAAsB,CAAA;AAE9F,uGAAuG;AAEvG,MAAM,CAAC,MAAM,eAAe,GAC1B,sFAAsF,CAAA;AAExF,MAAM,CAAC,MAAM,SAAS,GACpB,yEAAyE;IACzE,6EAA6E,CAAA;AAS/E;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,QAA4B;IACxD,MAAM,GAAG,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;IACnC,IAAI,GAAG,KAAK,EAAE;QAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAA;IACxC,IAAI,aAAiC,CAAA;IACrC,IAAI,QAAQ,GAAG,GAAG,CAAA;IAClB,MAAM,KAAK,GAAG,yBAAyB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACjD,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,aAAa,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;QACxB,QAAQ,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,CAAA;IAC9F,CAAC;IACD,IAAI,QAAQ,KAAK,EAAE;QAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,iCAAiC,EAAE,CAAA;IACvF,IAAI,aAAa,KAAK,SAAS,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAChE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,oBAAoB,aAAa,8BAA8B,EAAE,CAAA;IAClG,CAAC;IACD,kEAAkE;IAClE,OAAO,aAAa,KAAK,SAAS;QAChC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE;QAC1B,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAA;AAC7C,CAAC;AAUD,qEAAqE;AACrE,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,CAAA;AAC9C,4EAA4E;AAC5E,MAAM,CAAC,MAAM,yBAAyB,GAAG,EAAE,CAAA;AAC3C,+EAA+E;AAC/E,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,CAAA;AAEzC,MAAM,iBAAiB,GAAG,gBAAgB,CAAA;AAE1C;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,GAAuB;IAC1D,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,IAAI,EAAE,EAAE,EAAE,CAAC,CAAA;IAC7C,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;QAAE,OAAO,6BAA6B,CAAA;IAC9D,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,yBAAyB,CAAC,CAAA;AACjE,CAAC;AAED,4EAA4E;AAC5E,SAAS,MAAM,CAAC,OAAgB;IAC9B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,OAAO,EAAE,CAAA;IACtC,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IACE,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;YAC1C,KAA4B,CAAC,IAAI,KAAK,MAAM;YAC7C,OAAQ,KAA4B,CAAC,IAAI,KAAK,QAAQ,EACtD,CAAC;YACD,KAAK,CAAC,IAAI,CAAE,KAA0B,CAAC,IAAI,CAAC,CAAA;QAC9C,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACzB,CAAC;AAED,SAAS,WAAW,CAAC,IAAY;IAC/B,OAAO,IAAI,CAAC,MAAM,GAAG,qBAAqB;QACxC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,qBAAqB,CAAC,GAAG,iBAAiB;QAC1D,CAAC,CAAC,IAAI,CAAA;AACV,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAmC,EAAE,KAAa;IACjF,MAAM,MAAM,GAAc,EAAE,CAAA;IAC5B,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,MAAM,CAAA;IAC7B,KAAK,IAAI,KAAK,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,KAAK,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACpF,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;QAC3B,IAAI,KAAK,EAAE,IAAI,KAAK,cAAc,IAAI,KAAK,EAAE,IAAI,KAAK,mBAAmB;YAAE,SAAQ;QACnF,MAAM,IAAI,GAAG,KAAK,CAAC,IAAqE,CAAA;QACxF,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;YAAE,SAAQ;QACvD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAA;QACpF,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAA;QACnC,IAAI,IAAI,KAAK,EAAE;YAAE,SAAQ;QACzB,wEAAwE;QACxE,qEAAqE;QACrE,sEAAsE;QACtE,yEAAyE;QACzE,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,KAAK,cAAc;YAC1C,CAAC,CAAC,OAAQ,IAAyB,CAAC,EAAE,KAAK,QAAQ;gBAChD,IAAwC,CAAC,MAAM,EAAE,IAAI,KAAK,MAAM;gBACjE,CAAC,CAAC,IAA0B;gBAC5B,CAAC,CAAC,SAAS;YACb,CAAC,CAAE,IAA8B,CAAC,OAAO,CAAA;QAC3C,IAAI,MAAM,KAAK,SAAS;YAAE,SAAQ;QAClC,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;IAClF,CAAC;IACD,OAAO,MAAM,CAAC,OAAO,EAAE,CAAA;AACzB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAA4B,EAAE,QAAgB;IAC7E,OAAO;QACL,GAAG,QAAQ;QACX,iBAAiB,CAAC;YAChB,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;YAC3C,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,gBAAgB,EAAE;SACrD,CAAC;KACH,CAAA;AACH,CAAC;AAED,4EAA4E;AAC5E,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,oGAAoG;IACpG,sEAAsE;IACtE,wGAAwG;CACzG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAEX,mGAAmG;AAEnG,wDAAwD;AACxD,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAA;AAY9B;;;GAGG;AACH,MAAM,OAAO,QAAQ;IACX,UAAU,CAAoB;IACrB,OAAO,GAAa,EAAE,CAAA;IAEvC,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,UAAU,KAAK,SAAS,CAAA;IACtC,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAA;IAC5B,CAAC;IAED,MAAM,CAAC,GAAW;QAChB,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YAClC,IAAI,CAAC,UAAU,GAAG,GAAG,CAAA;YACrB,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAA;QAC5B,CAAC;QACD,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,aAAa,EAAE,CAAC;YACzC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,0BAA0B,aAAa,GAAG,EAAE,CAAA;QACjF,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACtB,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAA;IAC1D,CAAC;IAED,sEAAsE;IACtE,aAAa;QACX,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,SAAS,CAAA;QACnD,OAAO,IAAI,CAAC,UAAU,CAAA;IACxB,CAAC;IAED,SAAS;QACP,MAAM,eAAe,GAAG,IAAI,CAAC,UAAU,KAAK,SAAS,CAAA;QACrD,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAA;QAC1C,IAAI,CAAC,UAAU,GAAG,SAAS,CAAA;QAC3B,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAA;QACvB,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,CAAA;IAC5C,CAAC;CACF;AAiCD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,MAAqC,EACrC,OAA+B,EAC/B,MAAoB;IAEpB,IAAI,MAAM,GAAG,EAAE,CAAA;IACf,IAAI,CAAC;QACH,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YACjC,IAAI,MAAM,EAAE,OAAO;gBAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAA;YAC/C,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,EAAE,EAAE,CAAC;gBACvF,MAAM,IAAI,KAAK,CAAC,IAAI,CAAA;gBACpB,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;YACrB,CAAC;iBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACnC,QAAQ,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC;oBAC3B,KAAK,MAAM;wBACT,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAA;oBACjC,KAAK,SAAS;wBACZ,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAA;oBAC5B,KAAK,OAAO;wBACV,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,IAAI,6BAA6B,EAAE,CAAA;oBACnG,KAAK,YAAY;wBACf,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,sCAAsC,EAAE,CAAA;oBAC3E,KAAK,YAAY;wBACf,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,8CAA8C,EAAE,CAAA;oBACnF;wBACE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,8BAA8B,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,CAAA;gBACjG,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,gDAAgD,EAAE,CAAA;IACrF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,MAAM,EAAE,OAAO;YAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAA;QAC/C,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAA;IAC3F,CAAC;AACH,CAAC;AAgDD;;;;GAIG;AACH,MAAM,OAAO,aAAa;IACP,IAAI,CAAmB;IACvB,KAAK,GAAG,IAAI,QAAQ,EAAE,CAAA;IAC/B,eAAe,CAA6B;IAC5C,GAAG,CAAyB;IAC5B,YAAY,CAA6B;IACzC,WAAW,GAAG,KAAK,CAAA;IAE3B,YAAY,IAAuB;QACjC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;IAClB,CAAC;IAED,gFAAgF;IAChF,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,GAAG,CAAA;IACjB,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,YAAY,CAAA;IAC1B,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAA;IAC/B,CAAC;IAED,8EAA8E;IAC9E,cAAc,CAAC,IAAa;QAC1B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAA;QACvB,wEAAwE;QACxE,wEAAwE;QACxE,gEAAgE;QAChE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;YACvE,IAAI,CAAC,GAAG,GAAG,SAAS,CAAA;YACpB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAA;QAC3B,CAAC;IACH,CAAC;IAED,MAAM,CAAC,GAAW;QAChB,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QACtC,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS;YAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QAChD,OAAO,OAAO,CAAA;IAChB,CAAC;IAED;;;OAGG;IACH,UAAU;QACR,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;YAC3B,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YAChC,OAAO,MAAM,CAAA;QACf,CAAC;QACD,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS;YAAE,OAAO,OAAO,CAAA;QACnD,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;YACrB,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,QAAQ;YACpC,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU;YACxC,MAAM,EAAE,MAAM;YACd,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM;SACrC,CAAC,CAAA;QACF,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED;;;;OAIG;IACH,SAAS;QACP,MAAM,EAAE,eAAe,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAA;QAClE,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE,CAAA;QAC7B,IAAI,CAAC,eAAe,GAAG,SAAS,CAAA;QAChC,IAAI,CAAC,GAAG,GAAG,SAAS,CAAA;QACpB,IAAI,eAAe,IAAI,cAAc,GAAG,CAAC;YAAE,IAAI,CAAC,IAAI,CAAC,uBAAuB,EAAE,CAAA;IAChF,CAAC;IAED,oEAAoE;IACpE,OAAO;QACL,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAA;QACtB,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE,CAAA;QAC7B,IAAI,CAAC,eAAe,GAAG,SAAS,CAAA;QAChC,IAAI,CAAC,GAAG,GAAG,SAAS,CAAA;QACpB,IAAI,CAAC,WAAW,GAAG,KAAK,CAAA;IAC1B,CAAC;IAEO,MAAM,CAAC,GAAW,EAAE,QAAQ,GAAG,KAAK;QAC1C,MAAM,SAAS,GAAG,GAAG,CAAC,aAAa,KAAK,SAAS;YAC/C,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;YAC9B,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,aAAa,CAAC,CAAA;QACtC,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5B,IAAI,CAAC,IAAI,CAAC,MAAM,CACd,GAAG,CAAC,aAAa,KAAK,SAAS;gBAC7B,CAAC,CAAC,qCAAqC;gBACvC,CAAC,CAAC,cAAc,GAAG,CAAC,aAAa,qBAAqB,EACxD,OAAO,CACR,CAAA;YACD,IAAI,CAAC,KAAK,EAAE,CAAA;YACZ,OAAM;QACR,CAAC;QACD,MAAM,GAAG,GAAgB;YACvB,QAAQ,EAAE,GAAG,CAAC,QAAQ;YACtB,UAAU,EAAE,GAAG,SAAS,CAAC,QAAQ,IAAI,SAAS,CAAC,KAAK,EAAE;YACtD,MAAM,EAAE,WAAW;YACnB,UAAU,EAAE,EAAE;SACf,CAAA;QACD,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;QACd,MAAM,KAAK,GAAG,IAAI,eAAe,EAAE,CAAA;QACnC,IAAI,CAAC,eAAe,GAAG,KAAK,CAAA;QAC5B,IAAI,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,KAAK,IAAI,EAAE,CAAC;YAC3D,sEAAsE;YACtE,sEAAsE;YACtE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,0DAA0D,EAAE,MAAM,CAAC,CAAA;QACtF,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA;QAC7B,CAAC;QACD,KAAK,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;IACtD,CAAC;IAEO,KAAK,CAAC,OAAO,CACnB,GAAgB,EAChB,GAAW,EACX,SAAuB,EACvB,MAAmB;QAEnB,IAAI,MAAiB,CAAA;QACrB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAA;YAC1E,MAAM,GAAG,MAAM,gBAAgB,CAC7B,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;gBACf,QAAQ,EAAE,SAAS,CAAC,QAAQ;gBAC5B,KAAK,EAAE,SAAS,CAAC,KAAK;gBACtB,GAAG,CAAC,SAAS,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,SAAS,CAAC,eAAe,EAAE,CAAC;gBAClG,QAAQ;gBACR,MAAM,EAAE,iBAAiB;gBACzB,MAAM;aACP,CAAC,EACF,KAAK,CAAC,EAAE;gBACN,GAAG,CAAC,UAAU,IAAI,KAAK,CAAA;gBACvB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAA;YAC3B,CAAC,EACD,MAAM,CACP,CAAA;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,mEAAmE;YACnE,sEAAsE;YACtE,MAAM,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAA;QAC7F,CAAC;QACD,uEAAuE;QACvE,yEAAyE;QACzE,IAAI,IAAI,CAAC,GAAG,KAAK,GAAG;YAAE,OAAM;QAC5B,IAAI,CAAC,eAAe,GAAG,SAAS,CAAA;QAChC,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC3B,GAAG,CAAC,MAAM,GAAG,MAAM,CAAA;YACnB,sEAAsE;YACtE,gEAAgE;YAChE,IAAI,CAAC,YAAY,GAAG;gBAClB,QAAQ,EAAE,GAAG,CAAC,QAAQ;gBACtB,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,UAAU,EAAE,GAAG,CAAC,UAAU;aAC3B,CAAA;QACH,CAAC;aAAM,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YACrC,GAAG,CAAC,MAAM,GAAG,UAAU,CAAA;YACvB,IAAI,CAAC,GAAG,GAAG,SAAS,CAAA;YACpB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAA;YACzB,uEAAuE;YACvE,uEAAuE;YACvE,sEAAsE;YACtE,IAAI,CAAC,KAAK,EAAE,CAAA;YACZ,OAAM;QACR,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,MAAM,GAAG,OAAO,CAAA;YACpB,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC,OAAO,CAAA;YAC1B,oEAAoE;YACpE,uDAAuD;YACvD,IAAI,CAAC,IAAI,CAAC,WAAW;gBAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,MAAM,CAAC,OAAO,EAAE,EAAE,OAAO,CAAC,CAAA;QACnF,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAA;QACzB,IAAI,CAAC,KAAK,EAAE,CAAA;IACd,CAAC;IAED,yEAAyE;IACjE,KAAK;QACX,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAA;QACvC,IAAI,IAAI,KAAK,SAAS;YAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IACjD,CAAC;CACF;AAED;;;GAGG;AACH,SAAS,eAAe,CAAC,aAAqB;IAC5C,MAAM,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IACxC,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,KAAK,aAAa,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,SAAS,CAAA;IACtE,OAAO,EAAE,QAAQ,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,CAAA;AAC3F,CAAC"}
|
|
1
|
+
{"version":3,"file":"btw.js","sourceRoot":"","sources":["../src/btw.ts"],"names":[],"mappings":"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"}
|
package/lib/custom-provider.js
CHANGED
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
* for real. Pure parse/validate/build helpers live at the top so the field
|
|
20
20
|
* contracts stay unit-testable without a TTY.
|
|
21
21
|
*/
|
|
22
|
+
import { t } from "./i18n/index.js";
|
|
22
23
|
import { EditField } from "./settings.js";
|
|
23
24
|
/** Route id of the synthetic "Custom provider…" picker entry. */
|
|
24
25
|
export const CUSTOM_PROVIDER_ID = 'custom';
|
|
@@ -31,8 +32,10 @@ export const SUPPORTED_PROTOCOLS = ['openai-completions', 'openai-responses', 'a
|
|
|
31
32
|
export function customProviderEntry() {
|
|
32
33
|
return {
|
|
33
34
|
id: CUSTOM_PROVIDER_ID,
|
|
34
|
-
name: '
|
|
35
|
-
|
|
35
|
+
name: t('custprov.entry.name'),
|
|
36
|
+
// Runtime-built entry: the hint resolves NOW (unlike the static catalog,
|
|
37
|
+
// whose frozen-table hints carry i18n keys until render time).
|
|
38
|
+
hint: t('custprov.entry.hint'),
|
|
36
39
|
catalogRoute: false,
|
|
37
40
|
};
|
|
38
41
|
}
|
|
@@ -46,14 +49,14 @@ export function customProviderEntry() {
|
|
|
46
49
|
export function parseCustomProviderId(text, takenIds) {
|
|
47
50
|
const id = text.trim().toLowerCase();
|
|
48
51
|
if (id === '')
|
|
49
|
-
return { kind: 'error', error: '
|
|
52
|
+
return { kind: 'error', error: t('custprov.error.idEmpty') };
|
|
50
53
|
if (id.length < 2 || id.length > 40)
|
|
51
|
-
return { kind: 'error', error: '
|
|
54
|
+
return { kind: 'error', error: t('custprov.error.idLength') };
|
|
52
55
|
if (!/^[a-z0-9][a-z0-9-]*$/.test(id)) {
|
|
53
|
-
return { kind: 'error', error: '
|
|
56
|
+
return { kind: 'error', error: t('custprov.error.idChars') };
|
|
54
57
|
}
|
|
55
58
|
if (takenIds.has(id))
|
|
56
|
-
return { kind: 'error', error:
|
|
59
|
+
return { kind: 'error', error: t('custprov.error.idTaken', { id }) };
|
|
57
60
|
return { kind: 'value', value: id };
|
|
58
61
|
}
|
|
59
62
|
/** Display name validation: optional, one line, capped. */
|
|
@@ -62,7 +65,7 @@ export function parseCustomDisplayName(text) {
|
|
|
62
65
|
if (name === '')
|
|
63
66
|
return { kind: 'value', value: '' };
|
|
64
67
|
if (name.length > 40)
|
|
65
|
-
return { kind: 'error', error: '
|
|
68
|
+
return { kind: 'error', error: t('custprov.error.nameLength') };
|
|
66
69
|
return { kind: 'value', value: name };
|
|
67
70
|
}
|
|
68
71
|
/**
|
|
@@ -76,7 +79,7 @@ export function parseCustomProtocol(text) {
|
|
|
76
79
|
return { kind: 'value', value: SUPPORTED_PROTOCOLS[0] };
|
|
77
80
|
const match = SUPPORTED_PROTOCOLS.find(protocol => protocol === value);
|
|
78
81
|
if (match === undefined) {
|
|
79
|
-
return { kind: 'error', error:
|
|
82
|
+
return { kind: 'error', error: t('custprov.error.protocol', { list: SUPPORTED_PROTOCOLS.join(', ') }) };
|
|
80
83
|
}
|
|
81
84
|
return { kind: 'value', value: match };
|
|
82
85
|
}
|
|
@@ -84,9 +87,9 @@ export function parseCustomProtocol(text) {
|
|
|
84
87
|
export function parseCustomBaseUrl(text) {
|
|
85
88
|
const url = text.trim();
|
|
86
89
|
if (url === '')
|
|
87
|
-
return { kind: 'error', error: '
|
|
90
|
+
return { kind: 'error', error: t('custprov.error.baseUrlEmpty') };
|
|
88
91
|
if (!/^https?:\/\/\S+$/.test(url)) {
|
|
89
|
-
return { kind: 'error', error: '
|
|
92
|
+
return { kind: 'error', error: t('custprov.error.baseUrlFormat') };
|
|
90
93
|
}
|
|
91
94
|
return { kind: 'value', value: url };
|
|
92
95
|
}
|
|
@@ -98,11 +101,11 @@ export function parseCustomBaseUrl(text) {
|
|
|
98
101
|
export function parseCustomModels(text) {
|
|
99
102
|
const ids = [...new Set(text.split(/[\s,]+/).map(id => id.trim()).filter(id => id !== ''))];
|
|
100
103
|
if (ids.length === 0)
|
|
101
|
-
return { kind: 'error', error: '
|
|
104
|
+
return { kind: 'error', error: t('custprov.error.modelsEmpty') };
|
|
102
105
|
if (ids.some(id => id.length > 80))
|
|
103
|
-
return { kind: 'error', error: '
|
|
106
|
+
return { kind: 'error', error: t('custprov.error.modelLength') };
|
|
104
107
|
if (ids.length > 50)
|
|
105
|
-
return { kind: 'error', error: '
|
|
108
|
+
return { kind: 'error', error: t('custprov.error.modelsMax') };
|
|
106
109
|
return { kind: 'value', value: ids.join(',') };
|
|
107
110
|
}
|
|
108
111
|
/** Build the hand-declared catalog entry the commit chain consumes. */
|
|
@@ -110,7 +113,7 @@ export function buildCustomEntry(draft) {
|
|
|
110
113
|
return {
|
|
111
114
|
id: draft.id,
|
|
112
115
|
name: draft.displayName !== '' ? draft.displayName : draft.id,
|
|
113
|
-
hint: '
|
|
116
|
+
hint: t('custprov.hint.declared'),
|
|
114
117
|
catalogRoute: false,
|
|
115
118
|
api: draft.api,
|
|
116
119
|
baseURL: draft.baseURL,
|
|
@@ -144,42 +147,45 @@ export class CustomProviderFlow {
|
|
|
144
147
|
specs() {
|
|
145
148
|
return [
|
|
146
149
|
{
|
|
147
|
-
label: '
|
|
148
|
-
subtitle: '
|
|
150
|
+
label: t('custprov.step.id'),
|
|
151
|
+
subtitle: t('custprov.step.idHint'),
|
|
149
152
|
initial: this.draft.id,
|
|
150
153
|
parse: text => parseCustomProviderId(text, this.options.takenIds),
|
|
151
154
|
},
|
|
152
155
|
{
|
|
153
|
-
label: '
|
|
154
|
-
subtitle: '
|
|
156
|
+
label: t('custprov.step.displayName'),
|
|
157
|
+
subtitle: t('custprov.step.displayNameHint'),
|
|
155
158
|
initial: this.draft.displayName,
|
|
156
159
|
parse: parseCustomDisplayName,
|
|
157
160
|
},
|
|
158
161
|
{
|
|
159
|
-
label: '
|
|
160
|
-
subtitle:
|
|
162
|
+
label: t('custprov.step.protocol'),
|
|
163
|
+
subtitle: t('custprov.step.protocolHint', {
|
|
164
|
+
list: SUPPORTED_PROTOCOLS.join(' · '),
|
|
165
|
+
default: SUPPORTED_PROTOCOLS[0],
|
|
166
|
+
}),
|
|
161
167
|
initial: this.draft.api,
|
|
162
168
|
parse: parseCustomProtocol,
|
|
163
169
|
},
|
|
164
170
|
{
|
|
165
|
-
label: '
|
|
166
|
-
subtitle: '
|
|
171
|
+
label: t('custprov.step.baseUrl'),
|
|
172
|
+
subtitle: t('custprov.step.baseUrlHint'),
|
|
167
173
|
initial: this.draft.baseURL,
|
|
168
174
|
parse: parseCustomBaseUrl,
|
|
169
175
|
},
|
|
170
176
|
{
|
|
171
|
-
label: '
|
|
172
|
-
subtitle: '
|
|
177
|
+
label: t('custprov.step.models'),
|
|
178
|
+
subtitle: t('custprov.step.modelsHint'),
|
|
173
179
|
initial: this.draft.models,
|
|
174
180
|
parse: parseCustomModels,
|
|
175
181
|
},
|
|
176
182
|
{
|
|
177
|
-
label: '
|
|
178
|
-
subtitle:
|
|
183
|
+
label: t('custprov.step.apiKey'),
|
|
184
|
+
subtitle: t('custprov.step.apiKeyHint'),
|
|
179
185
|
initial: '',
|
|
180
186
|
secret: true,
|
|
181
187
|
parse: text => text.trim() === ''
|
|
182
|
-
? { kind: 'error', error: '
|
|
188
|
+
? { kind: 'error', error: t('custprov.error.keyEmpty') }
|
|
183
189
|
: { kind: 'value', value: text.trim() },
|
|
184
190
|
},
|
|
185
191
|
];
|
|
@@ -195,7 +201,7 @@ export class CustomProviderFlow {
|
|
|
195
201
|
// commit abandons the whole flow (the key-editor contract).
|
|
196
202
|
let committedThisStep = false;
|
|
197
203
|
return new EditField(this.tui, {
|
|
198
|
-
title:
|
|
204
|
+
title: t('custprov.step.title', { current: this.step + 1, total, label: spec.label }),
|
|
199
205
|
subtitle: spec.subtitle,
|
|
200
206
|
initial: spec.initial,
|
|
201
207
|
...(spec.secret === true ? { secret: true } : {}),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"custom-provider.js","sourceRoot":"","sources":["../src/custom-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAGH,OAAO,EAAE,SAAS,EAAqB,MAAM,eAAe,CAAA;AAI5D,iEAAiE;AACjE,MAAM,CAAC,MAAM,kBAAkB,GAAG,QAAQ,CAAA;AAE1C;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,oBAAoB,EAAE,kBAAkB,EAAE,oBAAoB,CAAU,CAAA;AAE5G,gEAAgE;AAChE,MAAM,UAAU,mBAAmB;IACjC,OAAO;QACL,EAAE,EAAE,kBAAkB;QACtB,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"custom-provider.js","sourceRoot":"","sources":["../src/custom-provider.ts"],"names":[],"mappings":"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"}
|
package/lib/footer.d.ts
CHANGED
|
@@ -17,15 +17,17 @@ import type { BridgeStats } from './session.ts';
|
|
|
17
17
|
import type { CacheHitMode } from './theme-settings.ts';
|
|
18
18
|
import { type TuiTheme } from './theme/index.ts';
|
|
19
19
|
/**
|
|
20
|
-
* The footer keybinding hint
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
20
|
+
* The footer keybinding hint with the all-true default selection — the same
|
|
21
|
+
* string `buildFooterHint(DEFAULT_FOOTER_HINTS)` produces. A function, not a
|
|
22
|
+
* module constant: the label resolves through `t()` on every call, so a
|
|
23
|
+
* language switch re-renders it instead of freezing the boot-time language.
|
|
24
|
+
* The no-wrap rendering lives in `FooterHint` (a width-clipping component,
|
|
25
|
+
* not a word-wrapping Text). The unit tests in test/footer-hints.test.mjs and
|
|
26
|
+
* test/history.test.mjs guard the default against future length regressions
|
|
25
27
|
* (a longer hint word-wraps on 105-118-column terminals and hides its suffix
|
|
26
28
|
* on <=104).
|
|
27
29
|
*/
|
|
28
|
-
export declare
|
|
30
|
+
export declare function FOOTER_HINT(): string;
|
|
29
31
|
/** The toggleable footer hint segments, keyed as in the `dsh-tui` settings. */
|
|
30
32
|
export interface FooterHints {
|
|
31
33
|
send: boolean;
|
|
@@ -39,10 +41,9 @@ export interface FooterHints {
|
|
|
39
41
|
}
|
|
40
42
|
/** Every hint off - the footer hint bar renders nothing. */
|
|
41
43
|
export declare const DEFAULT_FOOTER_HINTS: FooterHints;
|
|
42
|
-
/** The hint segments in display order
|
|
44
|
+
/** The hint segments in display order; labels resolve live via footerHintLabel. */
|
|
43
45
|
export declare const FOOTER_HINT_ITEMS: ReadonlyArray<{
|
|
44
46
|
id: keyof FooterHints;
|
|
45
|
-
label: string;
|
|
46
47
|
}>;
|
|
47
48
|
/**
|
|
48
49
|
* Assemble the footer hint from the user's per-segment on/off selection, in
|
package/lib/footer.js
CHANGED
|
@@ -13,20 +13,25 @@
|
|
|
13
13
|
* tick only re-renders this component's single line.
|
|
14
14
|
*/
|
|
15
15
|
import { truncateToWidth, visibleWidth } from '@earendil-works/pi-tui';
|
|
16
|
+
import { t } from "./i18n/index.js";
|
|
16
17
|
import { ansiBg, ansiFg, BOLD, POWERLINE, RESET } from "./theme/index.js";
|
|
17
18
|
import { hexIsLight } from "./theme/palette.js";
|
|
18
19
|
import { clipToWidth } from "./text.js";
|
|
19
20
|
import { arrowRight } from "./icons.js";
|
|
20
21
|
/**
|
|
21
|
-
* The footer keybinding hint
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
22
|
+
* The footer keybinding hint with the all-true default selection — the same
|
|
23
|
+
* string `buildFooterHint(DEFAULT_FOOTER_HINTS)` produces. A function, not a
|
|
24
|
+
* module constant: the label resolves through `t()` on every call, so a
|
|
25
|
+
* language switch re-renders it instead of freezing the boot-time language.
|
|
26
|
+
* The no-wrap rendering lives in `FooterHint` (a width-clipping component,
|
|
27
|
+
* not a word-wrapping Text). The unit tests in test/footer-hints.test.mjs and
|
|
28
|
+
* test/history.test.mjs guard the default against future length regressions
|
|
26
29
|
* (a longer hint word-wraps on 105-118-column terminals and hides its suffix
|
|
27
30
|
* on <=104).
|
|
28
31
|
*/
|
|
29
|
-
export
|
|
32
|
+
export function FOOTER_HINT() {
|
|
33
|
+
return t('footer.hint.default');
|
|
34
|
+
}
|
|
30
35
|
/** Every hint off - the footer hint bar renders nothing. */
|
|
31
36
|
export const DEFAULT_FOOTER_HINTS = Object.freeze({
|
|
32
37
|
send: true,
|
|
@@ -38,23 +43,36 @@ export const DEFAULT_FOOTER_HINTS = Object.freeze({
|
|
|
38
43
|
preset: true,
|
|
39
44
|
history: true,
|
|
40
45
|
});
|
|
41
|
-
/** The hint segments in display order
|
|
46
|
+
/** The hint segments in display order; labels resolve live via footerHintLabel. */
|
|
42
47
|
export const FOOTER_HINT_ITEMS = [
|
|
43
|
-
{ id: 'send'
|
|
44
|
-
{ id: 'stop'
|
|
45
|
-
{ id: 'quit'
|
|
46
|
-
{ id: 'quitEmpty'
|
|
47
|
-
{ id: 'subagents'
|
|
48
|
-
{ id: 'search'
|
|
49
|
-
{ id: 'preset'
|
|
50
|
-
{ id: 'history'
|
|
48
|
+
{ id: 'send' },
|
|
49
|
+
{ id: 'stop' },
|
|
50
|
+
{ id: 'quit' },
|
|
51
|
+
{ id: 'quitEmpty' },
|
|
52
|
+
{ id: 'subagents' },
|
|
53
|
+
{ id: 'search' },
|
|
54
|
+
{ id: 'preset' },
|
|
55
|
+
{ id: 'history' },
|
|
51
56
|
];
|
|
57
|
+
/** One hint segment's display text (without the `⌨ ` lead). A function so the label tracks the active language instead of freezing at module load. */
|
|
58
|
+
function footerHintLabel(id) {
|
|
59
|
+
switch (id) {
|
|
60
|
+
case 'send': return t('footer.hint.send');
|
|
61
|
+
case 'stop': return t('footer.hint.stop');
|
|
62
|
+
case 'quit': return t('footer.hint.quit');
|
|
63
|
+
case 'quitEmpty': return t('footer.hint.quitEmpty');
|
|
64
|
+
case 'subagents': return t('footer.hint.subagents');
|
|
65
|
+
case 'search': return t('footer.hint.search');
|
|
66
|
+
case 'preset': return t('footer.hint.preset');
|
|
67
|
+
case 'history': return t('footer.hint.history');
|
|
68
|
+
}
|
|
69
|
+
}
|
|
52
70
|
/**
|
|
53
71
|
* Assemble the footer hint from the user's per-segment on/off selection, in
|
|
54
72
|
* the fixed display order. `''` when every segment is off.
|
|
55
73
|
*/
|
|
56
74
|
export function buildFooterHint(shown) {
|
|
57
|
-
const parts = FOOTER_HINT_ITEMS.filter(item => shown[item.id]).map(item => item.
|
|
75
|
+
const parts = FOOTER_HINT_ITEMS.filter(item => shown[item.id]).map(item => footerHintLabel(item.id));
|
|
58
76
|
if (parts.length === 0)
|
|
59
77
|
return '';
|
|
60
78
|
return `⌨ ${parts.join(' · ')}`;
|
|
@@ -198,8 +216,8 @@ export class PowerlineFooter {
|
|
|
198
216
|
if ((stats.cacheReadTokens > 0 || stats.cacheWriteTokens > 0) && rate !== undefined) {
|
|
199
217
|
segs.push({ label: `⚡ CH${rate.toFixed(1)}%`, bgHex: POWERLINE.cache });
|
|
200
218
|
}
|
|
201
|
-
segs.push({ label:
|
|
202
|
-
segs.push({ label:
|
|
219
|
+
segs.push({ label: t('footer.seg.msgs', { count: stats.msgCount }), bgHex: POWERLINE.messages });
|
|
220
|
+
segs.push({ label: t('footer.seg.tools', { count: stats.toolCallCount }), bgHex: POWERLINE.tools });
|
|
203
221
|
const left = buildSegments(segs);
|
|
204
222
|
const leftWidth = visibleWidth(left);
|
|
205
223
|
// The clock must carry the palette foreground: the app paints the canvas
|
package/lib/footer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"footer.js","sourceRoot":"","sources":["../src/footer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,eAAe,EAAE,YAAY,EAAkB,MAAM,wBAAwB,CAAA;
|
|
1
|
+
{"version":3,"file":"footer.js","sourceRoot":"","sources":["../src/footer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hard-exit helper — the tail of every self-initiated process exit.
|
|
3
|
+
*
|
|
4
|
+
* `process.exit()` is not unconditional: Node drains the libuv threadpool
|
|
5
|
+
* before dying, and a threadpool request completing at exactly that moment
|
|
6
|
+
* (observed live: the session log's file close delivering its completion
|
|
7
|
+
* callback while the Ctrl+C×2 quit path exits) can leave
|
|
8
|
+
* `uv__threadpool_cleanup` joining a worker forever. The process then hangs
|
|
9
|
+
* AFTER the goodbye line printed — alive, holding the terminal with cooked
|
|
10
|
+
* mode restored but no shell in the foreground, deaf to every key (`sample`
|
|
11
|
+
* showed the main thread parked in `pthread_join` for 30+ minutes while
|
|
12
|
+
* every libuv worker sat idle; the user's only way out was `kill -9`).
|
|
13
|
+
*
|
|
14
|
+
* Two defenses, because nothing on the main thread can run while that exit
|
|
15
|
+
* is blocked (JS timers never fire there):
|
|
16
|
+
*
|
|
17
|
+
* 1. the exit is deferred one turn of the event loop (`setImmediate`) —
|
|
18
|
+
* the observed hang was triggered by calling `process.exit` from inside
|
|
19
|
+
* a threadpool completion callback, and exiting from the check phase
|
|
20
|
+
* starts the threadpool drain from a quiet stack instead;
|
|
21
|
+
* 2. a Worker-thread watchdog arms a one-shot SIGKILL at `watchdogMs` —
|
|
22
|
+
* workers run their own event loop on a separate thread, so the timer
|
|
23
|
+
* fires even with the main thread stuck inside `process.exit`. Normal
|
|
24
|
+
* quits never feel it: the exit lands in microseconds and the worker
|
|
25
|
+
* dies with the process; the pathological case is bounded to the
|
|
26
|
+
* watchdog delay (the shell comes back, exit code 137 instead of an
|
|
27
|
+
* eternal hang).
|
|
28
|
+
*/
|
|
29
|
+
/** Grace period before the watchdog SIGKILLs a stuck exit. */
|
|
30
|
+
export declare const EXIT_WATCHDOG_MS = 3000;
|
|
31
|
+
/**
|
|
32
|
+
* Exit the process after `code`, guarded against the threadpool-drain hang.
|
|
33
|
+
* Every self-initiated exit (Ctrl+C×2 quit, Ctrl+D, smoke fallback, boot
|
|
34
|
+
* guard) goes through here instead of calling `process.exit` directly.
|
|
35
|
+
*/
|
|
36
|
+
export declare function hardExit(code: number, watchdogMs?: number): void;
|
package/lib/hard-exit.js
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hard-exit helper — the tail of every self-initiated process exit.
|
|
3
|
+
*
|
|
4
|
+
* `process.exit()` is not unconditional: Node drains the libuv threadpool
|
|
5
|
+
* before dying, and a threadpool request completing at exactly that moment
|
|
6
|
+
* (observed live: the session log's file close delivering its completion
|
|
7
|
+
* callback while the Ctrl+C×2 quit path exits) can leave
|
|
8
|
+
* `uv__threadpool_cleanup` joining a worker forever. The process then hangs
|
|
9
|
+
* AFTER the goodbye line printed — alive, holding the terminal with cooked
|
|
10
|
+
* mode restored but no shell in the foreground, deaf to every key (`sample`
|
|
11
|
+
* showed the main thread parked in `pthread_join` for 30+ minutes while
|
|
12
|
+
* every libuv worker sat idle; the user's only way out was `kill -9`).
|
|
13
|
+
*
|
|
14
|
+
* Two defenses, because nothing on the main thread can run while that exit
|
|
15
|
+
* is blocked (JS timers never fire there):
|
|
16
|
+
*
|
|
17
|
+
* 1. the exit is deferred one turn of the event loop (`setImmediate`) —
|
|
18
|
+
* the observed hang was triggered by calling `process.exit` from inside
|
|
19
|
+
* a threadpool completion callback, and exiting from the check phase
|
|
20
|
+
* starts the threadpool drain from a quiet stack instead;
|
|
21
|
+
* 2. a Worker-thread watchdog arms a one-shot SIGKILL at `watchdogMs` —
|
|
22
|
+
* workers run their own event loop on a separate thread, so the timer
|
|
23
|
+
* fires even with the main thread stuck inside `process.exit`. Normal
|
|
24
|
+
* quits never feel it: the exit lands in microseconds and the worker
|
|
25
|
+
* dies with the process; the pathological case is bounded to the
|
|
26
|
+
* watchdog delay (the shell comes back, exit code 137 instead of an
|
|
27
|
+
* eternal hang).
|
|
28
|
+
*/
|
|
29
|
+
import { Worker } from 'node:worker_threads';
|
|
30
|
+
/** Grace period before the watchdog SIGKILLs a stuck exit. */
|
|
31
|
+
export const EXIT_WATCHDOG_MS = 3_000;
|
|
32
|
+
function exitNow(code, watchdogMs) {
|
|
33
|
+
try {
|
|
34
|
+
const source = `
|
|
35
|
+
// Ref'd on purpose: the timer is the only thing keeping this worker's
|
|
36
|
+
// event loop alive, and an unref'd one would let the worker exit
|
|
37
|
+
// before it ever fires. The worker itself is unref'd from the main
|
|
38
|
+
// side below — that is what keeps it from holding the process open.
|
|
39
|
+
setTimeout(() => { process.kill(process.pid, 'SIGKILL') }, ${watchdogMs});
|
|
40
|
+
`;
|
|
41
|
+
const watchdog = new Worker(source, { eval: true });
|
|
42
|
+
// The watchdog must not keep the process alive on its own account — it
|
|
43
|
+
// only matters while the main thread is stuck inside process.exit, and
|
|
44
|
+
// on every clean path the process (and with it the worker) is long gone
|
|
45
|
+
// before the timer runs.
|
|
46
|
+
watchdog.unref();
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
// No worker support (exotic embeddings): exit unguarded rather than
|
|
50
|
+
// not at all — the deferred exit below is still the normal path.
|
|
51
|
+
}
|
|
52
|
+
// One loop turn off the caller's stack: never exit from inside a
|
|
53
|
+
// threadpool completion callback (see the module doc).
|
|
54
|
+
setImmediate(() => process.exit(code));
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Exit the process after `code`, guarded against the threadpool-drain hang.
|
|
58
|
+
* Every self-initiated exit (Ctrl+C×2 quit, Ctrl+D, smoke fallback, boot
|
|
59
|
+
* guard) goes through here instead of calling `process.exit` directly.
|
|
60
|
+
*/
|
|
61
|
+
export function hardExit(code, watchdogMs = EXIT_WATCHDOG_MS) {
|
|
62
|
+
exitNow(code, watchdogMs);
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=hard-exit.js.map
|