@aiwayds/dsh-tui-pi 2.18.2 → 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 -43
- package/README.zh-CN.md +11 -42
- package/lib/agents.js +67 -52
- package/lib/agents.js.map +1 -1
- package/lib/ask-user.d.ts +122 -3
- package/lib/ask-user.js +335 -41
- 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 +219 -109
- 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 -8
- package/lib/subagent-viewer.js +38 -62
- 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 +44 -2
- package/lib/theme-settings.js +97 -54
- 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 +14 -4
|
@@ -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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hard-exit.js","sourceRoot":"","sources":["../src/hard-exit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAE5C,8DAA8D;AAC9D,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,CAAA;AAErC,SAAS,OAAO,CAAC,IAAY,EAAE,UAAkB;IAC/C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG;;;;;mEAKgD,UAAU;KACxE,CAAA;QACD,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;QACnD,uEAAuE;QACvE,uEAAuE;QACvE,wEAAwE;QACxE,yBAAyB;QACzB,QAAQ,CAAC,KAAK,EAAE,CAAA;IAClB,CAAC;IAAC,MAAM,CAAC;QACP,oEAAoE;QACpE,iEAAiE;IACnE,CAAC;IACD,iEAAiE;IACjE,uDAAuD;IACvD,YAAY,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;AACxC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,QAAQ,CAAC,IAAY,EAAE,aAAqB,gBAAgB;IAC1E,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;AAC3B,CAAC"}
|
package/lib/history-fork.d.ts
CHANGED
|
@@ -35,8 +35,8 @@ export declare function forkAtTurnOptions(turnLabel: string): ReadonlyArray<{
|
|
|
35
35
|
id: 'fork' | 'cancel';
|
|
36
36
|
text: string;
|
|
37
37
|
}>;
|
|
38
|
-
/** Footer hint —
|
|
39
|
-
export declare
|
|
38
|
+
/** Footer hint — resolved per call so a live language switch repaints it. */
|
|
39
|
+
export declare function forkAtTurnFooter(): string;
|
|
40
40
|
/** Pure dialog state: which row is highlighted, and the terminal outcome. */
|
|
41
41
|
export interface ForkAtTurnState {
|
|
42
42
|
selected: number;
|
package/lib/history-fork.js
CHANGED
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
* resolves; the switch itself runs after confirmation).
|
|
15
15
|
*/
|
|
16
16
|
import { getKeybindings } from '@earendil-works/pi-tui';
|
|
17
|
+
import { t } from "./i18n/index.js";
|
|
17
18
|
import { PanelHost, panelThemeFns } from "./panels.js";
|
|
18
19
|
import { BOLD, RESET, ansiFg } from "./theme/index.js";
|
|
19
20
|
import { clipToWidth, wrapText } from "./text.js";
|
|
@@ -21,7 +22,7 @@ import { clipToWidth, wrapText } from "./text.js";
|
|
|
21
22
|
export const FORK_AT_TURN_OPTION_IDS = ['fork', 'cancel'];
|
|
22
23
|
/** Accent-BOLD dialog title (`N` = the selected turn's number). */
|
|
23
24
|
export function forkAtTurnTitle(turnLabel) {
|
|
24
|
-
return
|
|
25
|
+
return t('fork.title', { turn: turnLabel });
|
|
25
26
|
}
|
|
26
27
|
/**
|
|
27
28
|
* The fixed body points, one entry per bullet — each wrapped to the terminal
|
|
@@ -35,21 +36,23 @@ export function forkAtTurnTitle(turnLabel) {
|
|
|
35
36
|
*/
|
|
36
37
|
export function forkAtTurnBody(turnLabel, totalTurns, detachedLiveId) {
|
|
37
38
|
return [
|
|
38
|
-
|
|
39
|
+
t('fork.body.carry', { turn: turnLabel, total: totalTurns }),
|
|
39
40
|
detachedLiveId === undefined
|
|
40
|
-
? '
|
|
41
|
-
:
|
|
41
|
+
? t('fork.body.resume')
|
|
42
|
+
: t('fork.body.detach', { id: detachedLiveId }),
|
|
42
43
|
];
|
|
43
44
|
}
|
|
44
45
|
/** The fixed option rows for one target turn. */
|
|
45
46
|
export function forkAtTurnOptions(turnLabel) {
|
|
46
47
|
return [
|
|
47
|
-
{ id: 'fork', text:
|
|
48
|
-
{ id: 'cancel', text: '
|
|
48
|
+
{ id: 'fork', text: t('fork.option.fork', { turn: turnLabel }) },
|
|
49
|
+
{ id: 'cancel', text: t('fork.option.cancel') },
|
|
49
50
|
];
|
|
50
51
|
}
|
|
51
|
-
/** Footer hint —
|
|
52
|
-
export
|
|
52
|
+
/** Footer hint — resolved per call so a live language switch repaints it. */
|
|
53
|
+
export function forkAtTurnFooter() {
|
|
54
|
+
return t('fork.footer');
|
|
55
|
+
}
|
|
53
56
|
export function initialForkAtTurnState() {
|
|
54
57
|
return { selected: 0 };
|
|
55
58
|
}
|
|
@@ -129,7 +132,7 @@ export class ForkAtTurnPanel {
|
|
|
129
132
|
: fns.muted(row));
|
|
130
133
|
}
|
|
131
134
|
lines.push('');
|
|
132
|
-
lines.push(fns.subtle(clipToWidth(
|
|
135
|
+
lines.push(fns.subtle(clipToWidth(forkAtTurnFooter(), wrap)));
|
|
133
136
|
return lines;
|
|
134
137
|
}
|
|
135
138
|
handleInput(data) {
|
package/lib/history-fork.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"history-fork.js","sourceRoot":"","sources":["../src/history-fork.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,cAAc,EAA4B,MAAM,wBAAwB,CAAA;AACjF,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AACtD,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAiB,MAAM,kBAAkB,CAAA;AACrE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEjD,gEAAgE;AAChE,MAAM,CAAC,MAAM,uBAAuB,GAAqC,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;AAE3F,mEAAmE;AACnE,MAAM,UAAU,eAAe,CAAC,SAAiB;IAC/C,OAAO,
|
|
1
|
+
{"version":3,"file":"history-fork.js","sourceRoot":"","sources":["../src/history-fork.ts"],"names":[],"mappings":"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"}
|
package/lib/history-turns.d.ts
CHANGED
|
@@ -22,7 +22,8 @@
|
|
|
22
22
|
* outright: the replay-path rule (iron rule 9) — the assembled message carries
|
|
23
23
|
* the full text.
|
|
24
24
|
*
|
|
25
|
-
* Pure and dependency-free apart from the event types
|
|
25
|
+
* Pure and dependency-free apart from the event types (plus the one `t()`
|
|
26
|
+
* lookup in the tool-summary label), so it is unit-testable
|
|
26
27
|
* without a terminal or a session store.
|
|
27
28
|
*/
|
|
28
29
|
import type { SessionEvent } from '@deepseek-ai/dsh-session';
|
|
@@ -80,7 +81,8 @@ export declare function turnPrimaryUserText(turn: HistoryTurn): string | undefin
|
|
|
80
81
|
export declare function matchesTurnFilter(turn: HistoryTurn, query: string): boolean;
|
|
81
82
|
/**
|
|
82
83
|
* The `⚙ N tool calls: read×2, edit×1` summary of one turn's tool/call names,
|
|
83
|
-
* in first-appearance order. Empty string for a tool-less turn.
|
|
84
|
+
* in first-appearance order. Empty string for a tool-less turn. (The `t()`
|
|
85
|
+
* dependency is the one UI-string lookup — the fold itself stays pure.)
|
|
84
86
|
*/
|
|
85
87
|
export declare function toolCallSummary(names: readonly string[]): string;
|
|
86
88
|
/**
|
package/lib/history-turns.js
CHANGED
|
@@ -22,9 +22,11 @@
|
|
|
22
22
|
* outright: the replay-path rule (iron rule 9) — the assembled message carries
|
|
23
23
|
* the full text.
|
|
24
24
|
*
|
|
25
|
-
* Pure and dependency-free apart from the event types
|
|
25
|
+
* Pure and dependency-free apart from the event types (plus the one `t()`
|
|
26
|
+
* lookup in the tool-summary label), so it is unit-testable
|
|
26
27
|
* without a terminal or a session store.
|
|
27
28
|
*/
|
|
29
|
+
import { t } from "./i18n/index.js";
|
|
28
30
|
/**
|
|
29
31
|
* Join the `text` blocks of a message content array into one trimmed string
|
|
30
32
|
* (multi-block bodies join with newlines so copy stays faithful). Defensive
|
|
@@ -155,7 +157,8 @@ export function matchesTurnFilter(turn, query) {
|
|
|
155
157
|
}
|
|
156
158
|
/**
|
|
157
159
|
* The `⚙ N tool calls: read×2, edit×1` summary of one turn's tool/call names,
|
|
158
|
-
* in first-appearance order. Empty string for a tool-less turn.
|
|
160
|
+
* in first-appearance order. Empty string for a tool-less turn. (The `t()`
|
|
161
|
+
* dependency is the one UI-string lookup — the fold itself stays pure.)
|
|
159
162
|
*/
|
|
160
163
|
export function toolCallSummary(names) {
|
|
161
164
|
if (names.length === 0)
|
|
@@ -165,7 +168,8 @@ export function toolCallSummary(names) {
|
|
|
165
168
|
counts.set(name, (counts.get(name) ?? 0) + 1);
|
|
166
169
|
const parts = [...counts.entries()].map(([name, count]) => `${name}×${count}`);
|
|
167
170
|
const total = names.length;
|
|
168
|
-
|
|
171
|
+
const label = total === 1 ? t('turns.toolCallOne') : t('turns.toolCallMany');
|
|
172
|
+
return `${total} ${label}: ${parts.join(', ')}`;
|
|
169
173
|
}
|
|
170
174
|
/**
|
|
171
175
|
* The fork-at-turn seed: the session events from seq 0 through the selected
|
package/lib/history-turns.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"history-turns.js","sourceRoot":"","sources":["../src/history-turns.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"history-turns.js","sourceRoot":"","sources":["../src/history-turns.ts"],"names":[],"mappings":"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"}
|