@deepseek-harness-tui/dsh-tui 0.8.6 → 0.8.8
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 +15 -5
- package/bin/dsh-tui.js +269 -218
- package/cordis.patch.yml +48 -22
- package/lib/types/cc/figures.d.ts.map +1 -1
- package/lib/types/cc/figures.js +14 -13
- package/lib/types/cc/syntaxRuns.d.ts +16 -0
- package/lib/types/cc/syntaxRuns.d.ts.map +1 -0
- package/lib/types/cc/syntaxRuns.js +79 -0
- package/lib/types/commands.d.ts +14 -0
- package/lib/types/commands.d.ts.map +1 -1
- package/lib/types/commands.js +20 -1
- package/lib/types/components/Chat/SubagentMessage.d.ts +19 -0
- package/lib/types/components/Chat/SubagentMessage.d.ts.map +1 -0
- package/lib/types/components/Chat/SubagentMessage.js +75 -0
- package/lib/types/components/EffortInputBorder.d.ts.map +1 -1
- package/lib/types/components/EffortInputBorder.js +2 -2
- package/lib/types/components/EffortTierBadge.js +1 -1
- package/lib/types/components/FileSuggestions.d.ts +8 -4
- package/lib/types/components/FileSuggestions.d.ts.map +1 -1
- package/lib/types/components/FileSuggestions.js +22 -12
- package/lib/types/components/HelpMenu.d.ts +8 -1
- package/lib/types/components/HelpMenu.d.ts.map +1 -1
- package/lib/types/components/HelpMenu.js +15 -4
- package/lib/types/components/LogoV2.d.ts +7 -1
- package/lib/types/components/LogoV2.d.ts.map +1 -1
- package/lib/types/components/LogoV2.js +13 -4
- package/lib/types/components/MessageList.d.ts +6 -2
- package/lib/types/components/MessageList.d.ts.map +1 -1
- package/lib/types/components/MessageList.js +17 -6
- package/lib/types/components/ModelPicker.js +2 -2
- package/lib/types/components/PromptInput.d.ts +1 -1
- package/lib/types/components/PromptInput.d.ts.map +1 -1
- package/lib/types/components/PromptInput.js +100 -36
- package/lib/types/components/SkillsPicker.js +2 -2
- package/lib/types/components/SplitDiffView.d.ts +1 -13
- package/lib/types/components/SplitDiffView.d.ts.map +1 -1
- package/lib/types/components/SplitDiffView.js +6 -105
- package/lib/types/components/SubagentCard.d.ts +9 -0
- package/lib/types/components/SubagentCard.d.ts.map +1 -0
- package/lib/types/components/SubagentCard.js +26 -0
- package/lib/types/components/SubagentDashboard.d.ts +13 -0
- package/lib/types/components/SubagentDashboard.d.ts.map +1 -0
- package/lib/types/components/SubagentDashboard.js +50 -0
- package/lib/types/components/SubagentDetailScene.d.ts +16 -0
- package/lib/types/components/SubagentDetailScene.d.ts.map +1 -0
- package/lib/types/components/SubagentDetailScene.js +141 -0
- package/lib/types/components/SyntaxText.d.ts +15 -0
- package/lib/types/components/SyntaxText.d.ts.map +1 -0
- package/lib/types/components/SyntaxText.js +34 -0
- package/lib/types/components/ThinkingToggle.d.ts +3 -10
- package/lib/types/components/ThinkingToggle.d.ts.map +1 -1
- package/lib/types/components/ThinkingToggle.js +4 -9
- package/lib/types/components/design-system/ListItem.d.ts.map +1 -1
- package/lib/types/components/design-system/ListItem.js +1 -1
- package/lib/types/components/messages/AssistantThinkingMessage.d.ts.map +1 -1
- package/lib/types/components/messages/AssistantThinkingMessage.js +18 -7
- package/lib/types/components/messages/AssistantToolUseMessage.d.ts +2 -0
- package/lib/types/components/messages/AssistantToolUseMessage.d.ts.map +1 -1
- package/lib/types/components/messages/AssistantToolUseMessage.js +42 -6
- package/lib/types/components/messages/UserPromptMessage.d.ts.map +1 -1
- package/lib/types/components/messages/UserPromptMessage.js +15 -2
- package/lib/types/dsh-adapter/channel.d.ts +64 -3
- package/lib/types/dsh-adapter/channel.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel.js +387 -37
- package/lib/types/dsh-adapter/contract.d.ts +67 -4
- package/lib/types/dsh-adapter/contract.d.ts.map +1 -1
- package/lib/types/dsh-adapter/contract.js +149 -15
- package/lib/types/dsh-adapter/index.d.ts.map +1 -1
- package/lib/types/dsh-adapter/index.js +6 -6
- package/lib/types/dsh-adapter/plugin.d.ts.map +1 -1
- package/lib/types/dsh-adapter/plugin.js +38 -0
- package/lib/types/dsh-adapter/shortcuts.js +3 -3
- package/lib/types/dsh-adapter/subagents.d.ts +87 -0
- package/lib/types/dsh-adapter/subagents.d.ts.map +1 -0
- package/lib/types/dsh-adapter/subagents.js +204 -0
- package/lib/types/herdr.d.ts +28 -0
- package/lib/types/herdr.d.ts.map +1 -0
- package/lib/types/herdr.js +133 -0
- package/lib/types/i18n.d.ts +233 -32
- package/lib/types/i18n.d.ts.map +1 -1
- package/lib/types/i18n.js +87 -16
- package/lib/types/ink/ink.d.ts +4 -0
- package/lib/types/ink/ink.d.ts.map +1 -1
- package/lib/types/ink/ink.js +84 -38
- package/lib/types/ink/render-node-to-output.d.ts +6 -3
- package/lib/types/ink/render-node-to-output.d.ts.map +1 -1
- package/lib/types/ink/render-node-to-output.js +33 -7
- package/lib/types/ink/selection.d.ts +29 -4
- package/lib/types/ink/selection.d.ts.map +1 -1
- package/lib/types/ink/selection.js +41 -5
- package/lib/types/minimalMode.d.ts +13 -0
- package/lib/types/minimalMode.d.ts.map +1 -0
- package/lib/types/minimalMode.js +17 -0
- package/lib/types/screens/Chat.d.ts +1 -1
- package/lib/types/screens/Chat.d.ts.map +1 -1
- package/lib/types/screens/Chat.js +94 -43
- package/lib/types/screens/StatusLine.d.ts.map +1 -1
- package/lib/types/screens/StatusLine.js +6 -2
- package/lib/types/screens/TrajectoryScene.d.ts.map +1 -1
- package/lib/types/screens/TrajectoryScene.js +4 -2
- package/lib/types/theme.d.ts +8 -0
- package/lib/types/theme.d.ts.map +1 -1
- package/lib/types/theme.js +38 -14
- package/lib/types/tips.d.ts.map +1 -1
- package/lib/types/tips.js +25 -7
- package/lib/types/update.d.ts +18 -0
- package/lib/types/update.d.ts.map +1 -1
- package/lib/types/update.js +73 -2
- package/lib/types/utils/execFileNoThrow.d.ts +3 -20
- package/lib/types/utils/execFileNoThrow.d.ts.map +1 -1
- package/lib/types/utils/execFileNoThrow.js +53 -32
- package/lib/types/utils/externalEditor.d.ts +12 -11
- package/lib/types/utils/externalEditor.d.ts.map +1 -1
- package/lib/types/utils/externalEditor.js +11 -11
- package/lib/types/utils/fileSuggestions.d.ts +19 -0
- package/lib/types/utils/fileSuggestions.d.ts.map +1 -0
- package/lib/types/utils/fileSuggestions.js +40 -0
- package/lib/types/utils/mentions.d.ts.map +1 -1
- package/lib/types/utils/mentions.js +3 -1
- package/package.json +81 -74
|
@@ -47,7 +47,10 @@ import { HistorySearchDialog } from '../components/HistorySearchDialog.js';
|
|
|
47
47
|
import { RewindPicker } from '../components/RewindPicker.js';
|
|
48
48
|
import { BtwPanel } from '../components/BtwPanel.js';
|
|
49
49
|
import { TipsPanel } from '../components/TipsPanel.js';
|
|
50
|
+
import { SubagentDashboard } from '../components/SubagentDashboard.js';
|
|
51
|
+
import { SubagentDetailScene } from '../components/SubagentDetailScene.js';
|
|
50
52
|
import { setClipboard } from '../ink/termio/osc.js';
|
|
53
|
+
import { TerminalWriteContext } from '../ink/useTerminalNotification.js';
|
|
51
54
|
import instances from '../ink/instances.js';
|
|
52
55
|
import { useAnimationFrame } from '../ink/hooks/use-animation-frame.js';
|
|
53
56
|
import { TrajectoryScene } from './TrajectoryScene.js';
|
|
@@ -135,6 +138,7 @@ let fallbackApprovalStore;
|
|
|
135
138
|
let fallbackDialogStore;
|
|
136
139
|
let fallbackStatusStore;
|
|
137
140
|
export function Chat({ channel, questionStore, approvalStore, extensionDialogs, extensionStatus, extensionShortcuts, onExit, onUpdate, fullscreen = false, trajectorySeen: trajectorySeenProp, }) {
|
|
141
|
+
const writeRaw = React.useContext(TerminalWriteContext);
|
|
138
142
|
// Re-render whenever the channel mutates; rows/status are read fresh below.
|
|
139
143
|
React.useSyncExternalStore(channel.subscribe, () => channel.version);
|
|
140
144
|
// Re-render on language switches so the whole UI hot-swaps its strings.
|
|
@@ -230,8 +234,6 @@ export function Chat({ channel, questionStore, approvalStore, extensionDialogs,
|
|
|
230
234
|
const [thinkingVisible, setThinkingVisible] = React.useState(true);
|
|
231
235
|
const [thinkingOpen, setThinkingOpen] = React.useState(false);
|
|
232
236
|
const [thinkingFocus, setThinkingFocus] = React.useState(0);
|
|
233
|
-
/** Mid-conversation toggle waiting for Enter confirmation (CC semantics). */
|
|
234
|
-
const [thinkingConfirm, setThinkingConfirm] = React.useState(null);
|
|
235
237
|
/** ctrl+r history search dialog (ported from CC's HistorySearchDialog). */
|
|
236
238
|
const [historyOpen, setHistoryOpen] = React.useState(false);
|
|
237
239
|
const [historyQuery, setHistoryQuery] = React.useState('');
|
|
@@ -265,6 +267,15 @@ export function Chat({ channel, questionStore, approvalStore, extensionDialogs,
|
|
|
265
267
|
};
|
|
266
268
|
/** /tips usage-tips overlay: pure UI state, no session side effects. */
|
|
267
269
|
const [tipsOpen, setTipsOpen] = React.useState(false);
|
|
270
|
+
/** Subagent dashboard (Ctrl+A): displays active/completed subagents. */
|
|
271
|
+
const [subagentDashboardOpen, setSubagentDashboardOpen] = React.useState(false);
|
|
272
|
+
/** Detail view for a specific subagent (opened from dashboard). */
|
|
273
|
+
const [subagentDetailId, setSubagentDetailId] = React.useState(null);
|
|
274
|
+
/**
|
|
275
|
+
* Hidden `/deepseek` easter egg: each invocation bumps this key so the
|
|
276
|
+
* logo header remounts and replays the whale spout + text shimmer.
|
|
277
|
+
*/
|
|
278
|
+
const [logoNonce, setLogoNonce] = React.useState(0);
|
|
268
279
|
React.useEffect(() => () => btwAbortRef.current?.abort(), []);
|
|
269
280
|
/**
|
|
270
281
|
* The trajectory scene (issue #80 evolution). Unlike every other overlay
|
|
@@ -1063,6 +1074,18 @@ export function Chat({ channel, questionStore, approvalStore, extensionDialogs,
|
|
|
1063
1074
|
});
|
|
1064
1075
|
return true;
|
|
1065
1076
|
}
|
|
1077
|
+
case 'deepseek': {
|
|
1078
|
+
// Hidden easter egg: replay the logo header's whale spout + text
|
|
1079
|
+
// shimmer. The command is intentionally not in the suggestion/help
|
|
1080
|
+
// catalogs; PromptInput recognizes it through HIDDEN_COMMAND_NAMES.
|
|
1081
|
+
setHelpOpen(false);
|
|
1082
|
+
setLogoNonce(n => n + 1);
|
|
1083
|
+
// Bring the logo back into view if the transcript has scrolled.
|
|
1084
|
+
setTimeout(() => {
|
|
1085
|
+
handle?.scrollTo(0);
|
|
1086
|
+
}, 0);
|
|
1087
|
+
return true;
|
|
1088
|
+
}
|
|
1066
1089
|
case 'tips':
|
|
1067
1090
|
setHelpOpen(false);
|
|
1068
1091
|
setTipsOpen(true);
|
|
@@ -1353,12 +1376,35 @@ export function Chat({ channel, questionStore, approvalStore, extensionDialogs,
|
|
|
1353
1376
|
// the field draft editor belong to it alone.
|
|
1354
1377
|
if (settingsOpen)
|
|
1355
1378
|
return;
|
|
1379
|
+
// Subagent dashboard or detail scene: it owns the keyboard while open.
|
|
1380
|
+
if (subagentDashboardOpen || subagentDetailId !== null)
|
|
1381
|
+
return;
|
|
1356
1382
|
// A plugin scene (dsh-tui-scenes) or the trajectory scene owns the whole
|
|
1357
1383
|
// screen while open: every key belongs to it. Unguarded, an Esc meant to
|
|
1358
1384
|
// CLOSE the scene also reached the chat:cancel branch below whenever a
|
|
1359
1385
|
// turn was in flight — closing the view and killing the turn in one key.
|
|
1360
1386
|
if (sceneOpen || channel.pluginScene !== undefined)
|
|
1361
1387
|
return;
|
|
1388
|
+
// Mouse wheel scrolls the transcript even while a question/approval/
|
|
1389
|
+
// dialog panel is open — those panels own arrow/Enter/Esc keys, but the
|
|
1390
|
+
// transcript above them should still be scrollable in fullscreen mode.
|
|
1391
|
+
// Help is different: its own ScrollBox owns wheel input, so Chat must
|
|
1392
|
+
// yield before stopping propagation or both covered layers would move.
|
|
1393
|
+
// Events only arrive with mouse tracking on; inline mode never sees
|
|
1394
|
+
// them, so this is a no-op there.
|
|
1395
|
+
if (key.wheelUp || key.wheelDown) {
|
|
1396
|
+
if (helpOpen)
|
|
1397
|
+
return;
|
|
1398
|
+
handle?.scrollBy(key.wheelUp ? -3 : 3);
|
|
1399
|
+
event.stopImmediatePropagation();
|
|
1400
|
+
return;
|
|
1401
|
+
}
|
|
1402
|
+
// Help is modal over Chat. Chat's listener registers before PromptInput's,
|
|
1403
|
+
// so yield every remaining key before any global/custom shortcut, search,
|
|
1404
|
+
// selection, or working-turn cancellation branch can mutate hidden state.
|
|
1405
|
+
// PromptInput then owns Esc, navigation, Tab guards, and ordinary typing.
|
|
1406
|
+
if (helpOpen)
|
|
1407
|
+
return;
|
|
1362
1408
|
// The questionnaire / approval panel / managed plugin dialog owns the
|
|
1363
1409
|
// keyboard while one is pending (the panel's own useInput handles
|
|
1364
1410
|
// ↑/↓/Space/Tab/Enter/Esc; the prompt input is unmounted, so nothing
|
|
@@ -1370,16 +1416,6 @@ export function Chat({ channel, questionStore, approvalStore, extensionDialogs,
|
|
|
1370
1416
|
const plainReturn = returnCandidate && returnNow - lastModalEnterAtRef.current >= 80;
|
|
1371
1417
|
if (plainReturn)
|
|
1372
1418
|
lastModalEnterAtRef.current = returnNow;
|
|
1373
|
-
// Mouse wheel scrolls the transcript — in fullscreen there is no
|
|
1374
|
-
// terminal scrollback (alt-screen), so this is the only way back.
|
|
1375
|
-
// Imperative scrollBy: no React re-render per notch (CC semantics).
|
|
1376
|
-
// Events only arrive with mouse tracking on; inline mode never sees
|
|
1377
|
-
// them, so this is a no-op there.
|
|
1378
|
-
if (key.wheelUp || key.wheelDown) {
|
|
1379
|
-
handle?.scrollBy(key.wheelUp ? -3 : 3);
|
|
1380
|
-
event.stopImmediatePropagation();
|
|
1381
|
-
return;
|
|
1382
|
-
}
|
|
1383
1419
|
// Esc clears a settled mouse selection first (CC precedence), ahead of
|
|
1384
1420
|
// every other Esc meaning below (close pickers, interrupt the turn).
|
|
1385
1421
|
// hasSelection() is an imperative read — no subscription needed.
|
|
@@ -1447,33 +1483,14 @@ export function Chat({ channel, questionStore, approvalStore, extensionDialogs,
|
|
|
1447
1483
|
return;
|
|
1448
1484
|
}
|
|
1449
1485
|
if (thinkingOpen) {
|
|
1450
|
-
if (
|
|
1451
|
-
// Confirmation state: Enter applies, Esc backs out to the select.
|
|
1452
|
-
if (plainReturn) {
|
|
1453
|
-
const enabled = thinkingConfirm;
|
|
1454
|
-
setThinkingVisible(enabled);
|
|
1455
|
-
setThinkingConfirm(null);
|
|
1456
|
-
setThinkingOpen(false);
|
|
1457
|
-
channel.notify(t('thinking-toggled', { state: enabled ? t('thinking-on') : t('thinking-off') }));
|
|
1458
|
-
}
|
|
1459
|
-
else if (key.escape) {
|
|
1460
|
-
setThinkingConfirm(null);
|
|
1461
|
-
}
|
|
1462
|
-
}
|
|
1463
|
-
else if (key.upArrow || key.downArrow) {
|
|
1486
|
+
if (key.upArrow || key.downArrow) {
|
|
1464
1487
|
setThinkingFocus(index => (index === 0 ? 1 : 0));
|
|
1465
1488
|
}
|
|
1466
1489
|
else if (plainReturn) {
|
|
1467
|
-
const
|
|
1468
|
-
|
|
1469
|
-
|
|
1470
|
-
|
|
1471
|
-
}
|
|
1472
|
-
else {
|
|
1473
|
-
setThinkingVisible(enabled);
|
|
1474
|
-
setThinkingOpen(false);
|
|
1475
|
-
channel.notify(t('thinking-toggled', { state: enabled ? t('thinking-on') : t('thinking-off') }));
|
|
1476
|
-
}
|
|
1490
|
+
const visible = thinkingFocus === 0;
|
|
1491
|
+
setThinkingVisible(visible);
|
|
1492
|
+
setThinkingOpen(false);
|
|
1493
|
+
channel.notify(t('thinking-toggled', { state: visible ? t('thinking-on') : t('thinking-off') }));
|
|
1477
1494
|
}
|
|
1478
1495
|
else if (key.escape) {
|
|
1479
1496
|
setThinkingOpen(false);
|
|
@@ -1850,6 +1867,11 @@ export function Chat({ channel, questionStore, approvalStore, extensionDialogs,
|
|
|
1850
1867
|
openScene();
|
|
1851
1868
|
return;
|
|
1852
1869
|
}
|
|
1870
|
+
if (isMod(key) && input === 'a') {
|
|
1871
|
+
// Ctrl+A opens the subagent dashboard.
|
|
1872
|
+
setSubagentDashboardOpen(true);
|
|
1873
|
+
return;
|
|
1874
|
+
}
|
|
1853
1875
|
if (isMod(key) && input === 'p' && loadedContextVisible) {
|
|
1854
1876
|
// Ctrl+P toggles the startup loaded-context panel while it is on
|
|
1855
1877
|
// screen (transcript still empty); once rows take over and the
|
|
@@ -1865,7 +1887,7 @@ export function Chat({ channel, questionStore, approvalStore, extensionDialogs,
|
|
|
1865
1887
|
setHistoryOpen(true);
|
|
1866
1888
|
return;
|
|
1867
1889
|
}
|
|
1868
|
-
if (key.shift && key.upArrow && !selectionActive) {
|
|
1890
|
+
if (key.shift && key.upArrow && !selectionActive && !helpOpen) {
|
|
1869
1891
|
enterSelection();
|
|
1870
1892
|
}
|
|
1871
1893
|
else if (selectionActive) {
|
|
@@ -1883,7 +1905,7 @@ export function Chat({ channel, questionStore, approvalStore, extensionDialogs,
|
|
|
1883
1905
|
setSelectedId(null);
|
|
1884
1906
|
}
|
|
1885
1907
|
}
|
|
1886
|
-
else if (key.escape && channel.working) {
|
|
1908
|
+
else if (key.escape && channel.working && !helpOpen) {
|
|
1887
1909
|
// CC's chat:cancel — esc interrupts a running turn (the prompt input
|
|
1888
1910
|
// only sees esc when idle, where it has the double-tap-clear meaning).
|
|
1889
1911
|
// With messages queued for delivery, interrupt-and-deliver them right
|
|
@@ -1899,8 +1921,11 @@ export function Chat({ channel, questionStore, approvalStore, extensionDialogs,
|
|
|
1899
1921
|
}
|
|
1900
1922
|
event.stopImmediatePropagation();
|
|
1901
1923
|
}
|
|
1902
|
-
else if (isMod(key) && input === 'o') {
|
|
1924
|
+
else if (isMod(key) && input === 'o' && !helpOpen) {
|
|
1903
1925
|
// Leaving transcript mode (Ctrl+O) — search was already handled above.
|
|
1926
|
+
// Help is modal: toggling this state behind the overlay is invisible,
|
|
1927
|
+
// then the next `/` unexpectedly opens transcript search instead of
|
|
1928
|
+
// slash-command completion after Help closes.
|
|
1904
1929
|
setExpanded(previous => !previous);
|
|
1905
1930
|
// The toggle rewrites every thinking row's layout at once. The
|
|
1906
1931
|
// ordinary scroll-based diff pushes rows into terminal scrollback on
|
|
@@ -1913,7 +1938,7 @@ export function Chat({ channel, questionStore, approvalStore, extensionDialogs,
|
|
|
1913
1938
|
const ink = instances.get(process.stdout) ?? instances.values().next().value;
|
|
1914
1939
|
ink?.reanchorViewport();
|
|
1915
1940
|
}
|
|
1916
|
-
else if (input === '/' && !key.ctrl && !key.meta && !key.super) {
|
|
1941
|
+
else if (input === '/' && !key.ctrl && !key.meta && !key.super && !helpOpen) {
|
|
1917
1942
|
// `/` in transcript mode (Ctrl+O expanded, CC's REPL semantics:
|
|
1918
1943
|
// search is active on the transcript screen where `/` isn't a command).
|
|
1919
1944
|
if (expanded) {
|
|
@@ -2011,6 +2036,31 @@ export function Chat({ channel, questionStore, approvalStore, extensionDialogs,
|
|
|
2011
2036
|
const screen = _jsx(Settings, { channel: channel, onClose: () => setSettingsOpen(false) });
|
|
2012
2037
|
return fullscreen ? screen : _jsx(AlternateScreen, { children: screen });
|
|
2013
2038
|
}
|
|
2039
|
+
// Subagent detail scene: displays detailed view of a specific subagent.
|
|
2040
|
+
// Like the browser and settings, it replaces the conversation entirely.
|
|
2041
|
+
if (subagentDetailId !== null) {
|
|
2042
|
+
const subagent = channel.subagents.find(s => s.agentId === subagentDetailId);
|
|
2043
|
+
if (!subagent) {
|
|
2044
|
+
// Agent not found, go back to dashboard
|
|
2045
|
+
setSubagentDetailId(null);
|
|
2046
|
+
setSubagentDashboardOpen(true);
|
|
2047
|
+
return null;
|
|
2048
|
+
}
|
|
2049
|
+
const scene = (_jsx(SubagentDetailScene, { subagent: subagent, onInterrupt: (id) => channel.subagentControl.interrupt(id), onBack: () => {
|
|
2050
|
+
setSubagentDetailId(null);
|
|
2051
|
+
setSubagentDashboardOpen(true);
|
|
2052
|
+
} }));
|
|
2053
|
+
return fullscreen ? scene : _jsx(AlternateScreen, { children: scene });
|
|
2054
|
+
}
|
|
2055
|
+
// Subagent dashboard: displays all active and completed subagents.
|
|
2056
|
+
// Like the browser and settings, it replaces the conversation entirely.
|
|
2057
|
+
if (subagentDashboardOpen) {
|
|
2058
|
+
const dashboard = (_jsx(SubagentDashboard, { subagents: [...channel.subagents], onSelect: (id) => {
|
|
2059
|
+
setSubagentDashboardOpen(false);
|
|
2060
|
+
setSubagentDetailId(id);
|
|
2061
|
+
}, onClose: () => setSubagentDashboardOpen(false) }));
|
|
2062
|
+
return fullscreen ? dashboard : _jsx(AlternateScreen, { children: dashboard });
|
|
2063
|
+
}
|
|
2014
2064
|
/** Prompt input is inert while a modal dialog owns the keyboard. */
|
|
2015
2065
|
const promptSelectionActive = selectionActive || modelPickerOpen || skillsPickerOpen || workspacePickerOpen || workspaceFlow !== null || activityPickerOpen ||
|
|
2016
2066
|
effortSliderOpen || presetPickerOpen || themePickerOpen || thinkingOpen || historyOpen || rewindOpen || searchOpen ||
|
|
@@ -2044,8 +2094,9 @@ export function Chat({ channel, questionStore, approvalStore, extensionDialogs,
|
|
|
2044
2094
|
seekRow(lastUser.id);
|
|
2045
2095
|
else
|
|
2046
2096
|
handle?.scrollToBottom();
|
|
2047
|
-
} })), _jsxs(ScrollBox, { ref: setHandle, flexDirection: "column", flexGrow: 1, flexShrink: 1, stickyScroll: true, children: [_jsx(LogoHeader, { model: channel.model, effort: channel.reasoningEffort, cwd: channel.displayCwd }), loadedContextVisible && (_jsx(LoadedContextPanel, { context: channel.loadedContext, open: loadedContextOpen, onToggle: toggleLoadedContext })), _jsx(MessageList, { rows: channel.rows, failureHintRowId: failureHintRowId, failureHint: t('traj-hint-failure', { key: `${modLabel}t` }), expanded: expanded, expandedRows: expandedRows, selectedId: selectionActive ? selectedId : null, onToggleRow: toggleRowExpanded, model: channel.model, diffLayout: channel.diffLayout, thinkingFold: channel.thinkingFold, toolBackground: channel.toolBackground, showAll: showAllMessages, thinkingVisible: thinkingVisible, onToggleAll: () => { setShowAllMessages(previous => !previous); }, onLoadOlder: () => channel.loadOlder(), registerRowRef: registerRowRef, scrollHandle: handle, forceMountRowId: forceMountRowId, newSinceRowId: isSticky ? null : lastSeenRowIdRef.current, onUnseenCount: setUnseenCount })] }), _jsxs(Box, { flexDirection: "column", flexShrink: 0, children: [showPill && (_jsx(NewMessagesPill, { count: unseenCount, onClick: () => handle?.scrollToBottom() })), channel.working &&
|
|
2097
|
+
} })), _jsxs(ScrollBox, { ref: setHandle, flexDirection: "column", flexGrow: 1, flexShrink: 1, stickyScroll: true, children: [_jsx(LogoHeader, { model: channel.model, effort: channel.reasoningEffort, cwd: channel.displayCwd, whale: channel.whale }, logoNonce), loadedContextVisible && (_jsx(LoadedContextPanel, { context: channel.loadedContext, open: loadedContextOpen, onToggle: toggleLoadedContext })), _jsx(MessageList, { rows: channel.rows, failureHintRowId: failureHintRowId, failureHint: t('traj-hint-failure', { key: `${modLabel}t` }), expanded: expanded, expandedRows: expandedRows, selectedId: selectionActive ? selectedId : null, onToggleRow: toggleRowExpanded, model: channel.model, diffLayout: channel.diffLayout, thinkingFold: channel.thinkingFold, toolBackground: channel.toolBackground, activityFrames: channel.activityFrames, showAll: showAllMessages, thinkingVisible: thinkingVisible, onToggleAll: () => { setShowAllMessages(previous => !previous); }, onLoadOlder: () => channel.loadOlder(), registerRowRef: registerRowRef, scrollHandle: handle, forceMountRowId: forceMountRowId, newSinceRowId: isSticky ? null : lastSeenRowIdRef.current, onUnseenCount: setUnseenCount })] }), _jsxs(Box, { flexDirection: "column", flexShrink: 0, children: [showPill && (_jsx(NewMessagesPill, { count: unseenCount, onClick: () => handle?.scrollToBottom() })), channel.working &&
|
|
2048
2098
|
(channel.activityEnabled &&
|
|
2099
|
+
!channel.minimal &&
|
|
2049
2100
|
channel.workingActivity !== undefined &&
|
|
2050
2101
|
channel.workingActivity.line !== '' &&
|
|
2051
2102
|
channel.workingActivity.phase !== 'idle' ? (_jsx(Box, { marginTop: 1, children: _jsx(ActivityLine, { activity: channel.workingActivity, activityFrames: channel.activityFrames, warnPct: activityWarnPct, warnDanger: activityWarnPct !== undefined && activityWarnPct >= 95,
|
|
@@ -2055,7 +2106,7 @@ export function Chat({ channel, questionStore, approvalStore, extensionDialogs,
|
|
|
2055
2106
|
// inflating the reading next to a real upload number).
|
|
2056
2107
|
suffix: `${lastUploadTokens > 0 ? ` · ↑ ${formatTokens(lastUploadTokens)}` : ''} · ↓ ${formatTokens(Math.round(channel.responseChars / 4))} tokens` }) })) : (_jsx(WorkingSpinner, { mode: channel.spinnerMode, hasActiveTools: channel.activeToolCount > 0, responseLengthRef: responseLengthRef, uploadTokensRef: uploadTokensRef, loadingStartTimeRef: loadingStartTimeRef, totalPausedMsRef: totalPausedMsRef, pauseStartTimeRef: pauseStartTimeRef, thinkingStatus: thinkingStatus }))), _jsx(GoalTodoPanel, { channel: channel }), statusEntries.length > 0 && (_jsx(Text, { dimColor: true, wrap: "truncate", children: statusEntries.map(entry => entry.text).join(' · ') })), approvalSnapshot !== null ? (_jsx(ApprovalPanel, { approval: approvalSnapshot, onDecide: outcome => approvals.decide(outcome) }, approvalSnapshot.key)) : dialogSnapshot !== null ? (_jsx(ExtensionDialog, { dialog: dialogSnapshot, onDecide: value => dialogs.decide(dialogSnapshot.key, value), onCancel: () => dialogs.cancel(dialogSnapshot.key) }, dialogSnapshot.key)) : tipsOpen ? (_jsx(Box, { flexDirection: "column", marginTop: 1, children: _jsx(TipsPanel, { onClose: () => setTipsOpen(false) }) })) : btw !== null ? (_jsx(Box, { flexDirection: "column", marginTop: 1, children: _jsx(BtwPanel, { question: btw.question, answer: btw.answer, error: btw.error, streaming: !btw.done, onClose: closeBtw, onCopy: () => {
|
|
2057
2108
|
void setClipboard(btw.answer ?? '').then(raw => { if (raw)
|
|
2058
|
-
|
|
2109
|
+
writeRaw?.(raw); });
|
|
2059
2110
|
channel.notify(t('copied-chars', { n: (btw.answer ?? '').length }), { timeoutMs: 1500 });
|
|
2060
2111
|
} }) })) : questionSnapshot !== null ? (_jsx(AskUserQuestionPanel, { question: questionSnapshot.question, position: questionSnapshot.position, total: questionSnapshot.total, answered: questionSnapshot.answered, onAnswer: selection => questionStore.answerCurrent(selection), onCancel: () => questionStore.cancelCurrent() }, questionSnapshot.key)) : (_jsx(PromptInput, { channel: channel, helpOpen: helpOpen, onToggleHelp: () => { setHelpOpen(previous => !previous); }, onRunCommand: runCommand, selectionActive: promptSelectionActive, fillText: historyFill, onFillConsumed: () => { setHistoryFill(null); }, onRewindRequest: openRewind, controllerRef: promptControllerRef })), _jsx(StatusLine, { channel: channel, selectionActive: selectionActive, helpOpen: helpOpen, wake: wakeBand === undefined
|
|
2061
2112
|
? undefined
|
|
@@ -2063,7 +2114,7 @@ export function Chat({ channel, questionStore, approvalStore, extensionDialogs,
|
|
|
2063
2114
|
band: wakeBand,
|
|
2064
2115
|
hint: trajectorySeen ? undefined : `${modLabel}t`,
|
|
2065
2116
|
tick: Math.floor(wakeTime / 120),
|
|
2066
|
-
} }), dialogOverlayOpen && (_jsxs(OverlayAbove, { maxHeight: Math.max(terminalRows - 8, 8), children: [thinkingOpen && (_jsx(ThinkingToggle, { currentValue: thinkingVisible, focusIndex: thinkingFocus
|
|
2117
|
+
} }), dialogOverlayOpen && (_jsxs(OverlayAbove, { maxHeight: Math.max(terminalRows - 8, 8), children: [thinkingOpen && (_jsx(ThinkingToggle, { currentValue: thinkingVisible, focusIndex: thinkingFocus })), workspacePickerOpen && workspaceTargets.length > 0 && (_jsx(Box, { flexDirection: "column", marginTop: 1, children: _jsx(WorkspacePicker, { targets: workspaceTargets, focusIndex: workspaceIndex, currentCwd: channel.cwd }) })), workspaceFlow !== null && (_jsx(Box, { flexDirection: "column", marginTop: 1, children: _jsx(WorkspaceFlowPicker, { title: workspaceFlow.title, choices: workspaceFlow.choices, focusIndex: workspaceFlowIndex, busy: workspaceFlowBusy, input: workspaceFlowInput }) })), modelPickerOpen && (_jsx(Box, { flexDirection: "column", marginTop: 1, children: models.length === 0 ? (_jsx(ModelPickerLoading, {})) : (_jsx(ModelPicker, { models: models, focusIndex: modelIndex, currentModel: `${channel.provider}/${channel.model}` })) })), skillsPickerOpen && (_jsx(Box, { flexDirection: "column", marginTop: 1, children: skillsList === null ? (_jsx(SkillsPickerLoading, {})) : (_jsx(SkillsPicker, { skills: skillsList, focusIndex: skillsIndex })) })), activityPickerOpen && (_jsx(Box, { flexDirection: "column", marginTop: 1, children: _jsx(ActivityPicker, { focusIndex: activityIndex, currentPreset: channel.activityFrames }) })), effortSliderOpen && effortOptions.length > 1 && (_jsx(Box, { flexDirection: "column", marginTop: 1, children: _jsx(EffortSlider, { options: effortOptions, focusIndex: effortIndex, currentId: channel.reasoningEffort }) })), presetPickerOpen && presetOptions.length > 0 && (_jsx(Box, { flexDirection: "column", marginTop: 1, children: _jsx(PresetPicker, { presets: presetOptions, focusIndex: presetIndex, currentPreset: channel.agentPreset }) })), themePickerOpen && (_jsx(Box, { flexDirection: "column", marginTop: 1, children: _jsx(ThemePicker, { focusIndex: themeIndex, currentTheme: themeName }) })), historyOpen && (_jsx(Box, { flexDirection: "column", marginTop: 1, children: _jsx(HistorySearchDialog, { query: historyQuery, cursorOffset: historyCursor, matches: historyMatches, focusIndex: historyFocus }) })), rewindOpen && (_jsx(Box, { flexDirection: "column", marginTop: 1, children: _jsx(RewindPicker, { rows: rewindRows, focusIndex: rewindIndex, confirmRow: rewindConfirm, modes: rewindModes, modeIndex: rewindModeIndex, busy: rewindBusy }) })), searchOpen && _jsx(TranscriptSearchBar, { query: searchQuery, cursorOffset: searchCursor, count: searchCount, current: searchCurrent })] }))] })] }));
|
|
2067
2118
|
}
|
|
2068
2119
|
/**
|
|
2069
2120
|
* The pinned prompt header shown above the ScrollBox while the user has
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StatusLine.d.ts","sourceRoot":"","sources":["../../../src/screens/StatusLine.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAOzB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAA;AAGxD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAQvD;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,EACzB,OAAO,EACP,eAAuB,EACvB,QAAgB,EAChB,IAAI,GACL,EAAE;IACD,OAAO,EAAE,OAAO,CAAA;IAChB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB;;;;;;;;OAQG;IACH,IAAI,CAAC,EAAE;QAAE,IAAI,EAAE,QAAQ,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;CACvD,
|
|
1
|
+
{"version":3,"file":"StatusLine.d.ts","sourceRoot":"","sources":["../../../src/screens/StatusLine.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAOzB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAA;AAGxD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAQvD;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,EACzB,OAAO,EACP,eAAuB,EACvB,QAAgB,EAChB,IAAI,GACL,EAAE;IACD,OAAO,EAAE,OAAO,CAAA;IAChB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB;;;;;;;;OAQG;IACH,IAAI,CAAC,EAAE;QAAE,IAAI,EAAE,QAAQ,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;CACvD,qBA0PA;AAED,KAAK,aAAa,GAAG;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,8EAA8E;AAC9E,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,aAAa,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAKvF"}
|
|
@@ -2,7 +2,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
2
2
|
import { Box, Text, useTerminalSize, useTheme } from '../ui.js';
|
|
3
3
|
import { formatTokens } from '../cc/format.js';
|
|
4
4
|
import { t } from '../i18n.js';
|
|
5
|
-
import { formatContextUsage, normalizeStatusBar } from '../tuiDisplayPrefs.js';
|
|
5
|
+
import { formatContextUsage, DEFAULT_STATUS_BAR, normalizeStatusBar } from '../tuiDisplayPrefs.js';
|
|
6
6
|
import { Byline } from '../components/design-system/Byline.js';
|
|
7
7
|
import { ActivityLine, contextPressurePct } from '../components/ActivityLine.js';
|
|
8
8
|
import { modeDisplayName } from '../sessionModes.js';
|
|
@@ -19,7 +19,11 @@ import { renderContextBar, renderTpsGauge, renderTpsSparkline, speedColor, } fro
|
|
|
19
19
|
export function StatusLine({ channel, selectionActive = false, helpOpen = false, wake, }) {
|
|
20
20
|
const { columns } = useTerminalSize();
|
|
21
21
|
const [themeName] = useTheme();
|
|
22
|
-
const statusBar =
|
|
22
|
+
const statusBar = channel.minimal
|
|
23
|
+
// Minimal mode overrides every field switch: model + cwd only, so the
|
|
24
|
+
// footer can never grow decorations regardless of saved preferences.
|
|
25
|
+
? { ...DEFAULT_STATUS_BAR, compact: true, model: true, cwd: true }
|
|
26
|
+
: normalizeStatusBar(channel.statusBar);
|
|
23
27
|
const usage = channel.lastUsage;
|
|
24
28
|
const contextUsed = usage === undefined
|
|
25
29
|
? undefined
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TrajectoryScene.d.ts","sourceRoot":"","sources":["../../../src/screens/TrajectoryScene.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAczB,OAAO,EAML,KAAK,SAAS,EACf,MAAM,oCAAoC,CAAA;AAE3C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAA;AA+BxD,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,SAAS,CAAA;AAEnD,wBAAgB,eAAe,CAAC,EAC9B,OAAO,EACP,KAAK,EACL,OAAO,GACR,EAAE;IACD,OAAO,EAAE,OAAO,CAAA;IAChB;;;;OAIG;IACH,KAAK,EAAE,SAAS,CAAA;IAChB,sDAAsD;IACtD,OAAO,EAAE,MAAM,IAAI,CAAA;CACpB,GAAG,KAAK,CAAC,SAAS,
|
|
1
|
+
{"version":3,"file":"TrajectoryScene.d.ts","sourceRoot":"","sources":["../../../src/screens/TrajectoryScene.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAczB,OAAO,EAML,KAAK,SAAS,EACf,MAAM,oCAAoC,CAAA;AAE3C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAA;AA+BxD,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,SAAS,CAAA;AAEnD,wBAAgB,eAAe,CAAC,EAC9B,OAAO,EACP,KAAK,EACL,OAAO,GACR,EAAE;IACD,OAAO,EAAE,OAAO,CAAA;IAChB;;;;OAIG;IACH,KAAK,EAAE,SAAS,CAAA;IAChB,sDAAsD;IACtD,OAAO,EAAE,MAAM,IAAI,CAAA;CACpB,GAAG,KAAK,CAAC,SAAS,CAyYlB"}
|
|
@@ -227,12 +227,14 @@ export function TrajectoryScene({ channel, build, onClose, }) {
|
|
|
227
227
|
return move(-ledgerRows);
|
|
228
228
|
if (key.pageDown)
|
|
229
229
|
return move(ledgerRows);
|
|
230
|
-
|
|
230
|
+
// Bare-letter jumps must not fire on Ctrl+G (the prompt's external-editor
|
|
231
|
+
// key) or other modified chords that share the letter.
|
|
232
|
+
if (input === 'g' && !key.ctrl && !key.meta && !key.super) {
|
|
231
233
|
setCursor(0);
|
|
232
234
|
setFollow(false);
|
|
233
235
|
return;
|
|
234
236
|
}
|
|
235
|
-
if (input === 'G') {
|
|
237
|
+
if (input === 'G' && !key.ctrl && !key.meta && !key.super) {
|
|
236
238
|
setCursor(Math.max(0, filtered.length - 1));
|
|
237
239
|
setFollow(true);
|
|
238
240
|
return;
|
package/lib/types/theme.d.ts
CHANGED
|
@@ -104,6 +104,14 @@ export type Theme = {
|
|
|
104
104
|
rainbow_blue_shimmer: string;
|
|
105
105
|
rainbow_indigo_shimmer: string;
|
|
106
106
|
rainbow_violet_shimmer: string;
|
|
107
|
+
subagentBullet: string;
|
|
108
|
+
subagentDescription: string;
|
|
109
|
+
subagentModel: string;
|
|
110
|
+
subagentElapsed: string;
|
|
111
|
+
subagentToolName: string;
|
|
112
|
+
subagentStatusRunning: string;
|
|
113
|
+
subagentStatusCompleted: string;
|
|
114
|
+
subagentStatusFailed: string;
|
|
107
115
|
};
|
|
108
116
|
/** The built-in theme names, in display order. */
|
|
109
117
|
export declare const THEME_NAMES: readonly ["dark", "dark-ansi", "light"];
|
package/lib/types/theme.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../src/theme.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../src/theme.ts"],"names":[],"mappings":"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"}
|
package/lib/types/theme.js
CHANGED
|
@@ -95,16 +95,16 @@ const darkTheme = {
|
|
|
95
95
|
toolDotWrite: rgb('#B3A0D4'), // soft violet — edit/write
|
|
96
96
|
toolDotWeb: rgb('#7DA1DE'), // mist blue — web search/fetch
|
|
97
97
|
toolDotTask: rgb('#D194AE'), // mist rose — subagent/jobs
|
|
98
|
-
syntaxKeyword: rgb('#
|
|
99
|
-
syntaxString: rgb('#
|
|
100
|
-
syntaxComment: rgb('#
|
|
101
|
-
syntaxNumber: rgb('#
|
|
102
|
-
syntaxFunction: rgb('#
|
|
103
|
-
syntaxType: rgb('#
|
|
98
|
+
syntaxKeyword: rgb('#78A0D6'), // muted anchor blue
|
|
99
|
+
syntaxString: rgb('#79AD91'), // mist green, distinct without neon saturation
|
|
100
|
+
syntaxComment: rgb('#74808D'), // neutral blue-grey
|
|
101
|
+
syntaxNumber: rgb('#C89B70'), // softened warm amber
|
|
102
|
+
syntaxFunction: rgb('#6FAEB5'), // muted cyan
|
|
103
|
+
syntaxType: rgb('#A98FBF'), // softened violet
|
|
104
104
|
syntaxVariable: rgb('#C9D1D9'), // near-text
|
|
105
105
|
syntaxOperator: rgb('#93A1B0'), // blue grey
|
|
106
106
|
syntaxPunctuation: rgb('#7A8694'), // dim blue grey
|
|
107
|
-
syntaxConstant: rgb('#
|
|
107
|
+
syntaxConstant: rgb('#C98291'), // softened rose
|
|
108
108
|
red_FOR_SUBAGENTS_ONLY: rgb('#D4685E'),
|
|
109
109
|
blue_FOR_SUBAGENTS_ONLY: rgb('#7496D6'),
|
|
110
110
|
green_FOR_SUBAGENTS_ONLY: rgb('#66B285'),
|
|
@@ -143,6 +143,14 @@ const darkTheme = {
|
|
|
143
143
|
rainbow_blue_shimmer: rgb('#AFBFE2'),
|
|
144
144
|
rainbow_indigo_shimmer: rgb('#BFB4DE'),
|
|
145
145
|
rainbow_violet_shimmer: rgb('#D1B4D1'),
|
|
146
|
+
subagentBullet: rgb('#D194AE'),
|
|
147
|
+
subagentDescription: rgb('#E8E6E0'),
|
|
148
|
+
subagentModel: rgb('#8D95A6'),
|
|
149
|
+
subagentElapsed: rgb('#8D95A6'),
|
|
150
|
+
subagentToolName: rgb('#7DA1DE'),
|
|
151
|
+
subagentStatusRunning: rgb('#7DA1DE'),
|
|
152
|
+
subagentStatusCompleted: rgb('#82B89D'),
|
|
153
|
+
subagentStatusFailed: rgb('#DA8A93'),
|
|
146
154
|
};
|
|
147
155
|
/**
|
|
148
156
|
* Gentle Mist Blue light theme — the strict original card. Blue carries
|
|
@@ -191,16 +199,16 @@ const lightTheme = {
|
|
|
191
199
|
toolDotWrite: rgb('#7A5CA8'),
|
|
192
200
|
toolDotWeb: rgb('#4A63A8'),
|
|
193
201
|
toolDotTask: rgb('#B04A5A'),
|
|
194
|
-
syntaxKeyword: rgb('#
|
|
195
|
-
syntaxString: rgb('#
|
|
196
|
-
syntaxComment: rgb('#
|
|
197
|
-
syntaxNumber: rgb('#
|
|
198
|
-
syntaxFunction: rgb('#
|
|
199
|
-
syntaxType: rgb('#
|
|
202
|
+
syntaxKeyword: rgb('#3F68B5'), // clear primary blue without neon saturation
|
|
203
|
+
syntaxString: rgb('#3F805F'), // readable muted green
|
|
204
|
+
syntaxComment: rgb('#7D858F'), // neutral blue-grey
|
|
205
|
+
syntaxNumber: rgb('#A7652B'), // warm amber accent
|
|
206
|
+
syntaxFunction: rgb('#2E7E8A'), // muted cyan
|
|
207
|
+
syntaxType: rgb('#7E55A4'), // softened violet
|
|
200
208
|
syntaxVariable: rgb('#343945'),
|
|
201
209
|
syntaxOperator: rgb('#5B6672'),
|
|
202
210
|
syntaxPunctuation: rgb('#9AA0A8'),
|
|
203
|
-
syntaxConstant: rgb('#
|
|
211
|
+
syntaxConstant: rgb('#A84472'), // muted rose accent
|
|
204
212
|
red_FOR_SUBAGENTS_ONLY: rgb('#BE5A52'),
|
|
205
213
|
blue_FOR_SUBAGENTS_ONLY: rgb('#3F6CC4'),
|
|
206
214
|
green_FOR_SUBAGENTS_ONLY: rgb('#4E9675'),
|
|
@@ -239,6 +247,14 @@ const lightTheme = {
|
|
|
239
247
|
rainbow_blue_shimmer: rgb('#A9BCE0'),
|
|
240
248
|
rainbow_indigo_shimmer: rgb('#B7AFD8'),
|
|
241
249
|
rainbow_violet_shimmer: rgb('#CFB0CC'),
|
|
250
|
+
subagentBullet: rgb('#C07A93'),
|
|
251
|
+
subagentDescription: rgb('#343945'),
|
|
252
|
+
subagentModel: rgb('#8991A0'),
|
|
253
|
+
subagentElapsed: rgb('#8991A0'),
|
|
254
|
+
subagentToolName: rgb('#3F6CC4'),
|
|
255
|
+
subagentStatusRunning: rgb('#3F6CC4'),
|
|
256
|
+
subagentStatusCompleted: rgb('#4E9675'),
|
|
257
|
+
subagentStatusFailed: rgb('#C65D6B'),
|
|
242
258
|
};
|
|
243
259
|
/**
|
|
244
260
|
* Dark ANSI theme using only the 16 standard ANSI colors, for terminals
|
|
@@ -337,6 +353,14 @@ const darkAnsiTheme = {
|
|
|
337
353
|
rainbow_blue_shimmer: 'ansi:cyanBright',
|
|
338
354
|
rainbow_indigo_shimmer: 'ansi:blueBright',
|
|
339
355
|
rainbow_violet_shimmer: 'ansi:magentaBright',
|
|
356
|
+
subagentBullet: 'ansi:magentaBright',
|
|
357
|
+
subagentDescription: 'ansi:whiteBright',
|
|
358
|
+
subagentModel: 'ansi:white',
|
|
359
|
+
subagentElapsed: 'ansi:white',
|
|
360
|
+
subagentToolName: 'ansi:cyanBright',
|
|
361
|
+
subagentStatusRunning: 'ansi:blueBright',
|
|
362
|
+
subagentStatusCompleted: 'ansi:greenBright',
|
|
363
|
+
subagentStatusFailed: 'ansi:redBright',
|
|
340
364
|
};
|
|
341
365
|
/**
|
|
342
366
|
* Resolve a theme name to its concrete color palette.
|
package/lib/types/tips.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tips.d.ts","sourceRoot":"","sources":["../../src/tips.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,UAAU,GAAG,UAAU,GAAG,SAAS,GAAG,UAAU,CAAA;AAEhF,MAAM,WAAW,GAAG;IAClB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,QAAQ,CAAA;IACf,EAAE,EAAE,MAAM,CAAA;IACV,EAAE,EAAE,MAAM,CAAA;CACX;AAED,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,QAAQ,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAMzE,CAAA;AAED,eAAO,MAAM,IAAI,EAAE,SAAS,GAAG,
|
|
1
|
+
{"version":3,"file":"tips.d.ts","sourceRoot":"","sources":["../../src/tips.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,UAAU,GAAG,UAAU,GAAG,SAAS,GAAG,UAAU,CAAA;AAEhF,MAAM,WAAW,GAAG;IAClB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,QAAQ,CAAA;IACf,EAAE,EAAE,MAAM,CAAA;IACV,EAAE,EAAE,MAAM,CAAA;CACX;AAED,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,QAAQ,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAMzE,CAAA;AAED,eAAO,MAAM,IAAI,EAAE,SAAS,GAAG,EAwjB9B,CAAA;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,MAAM,GAAE,MAAM,MAAoB,GAAG,GAAG,CAErE;AAED,0CAA0C;AAC1C,wBAAgB,WAAW,CAAC,KAAK,EAAE,QAAQ,GAAG,GAAG,EAAE,CAElD"}
|
package/lib/types/tips.js
CHANGED
|
@@ -60,10 +60,10 @@ export const TIPS = [
|
|
|
60
60
|
en: 'In trajectory, / queries fields like tool:, err:, >10s, tok>1k',
|
|
61
61
|
},
|
|
62
62
|
{
|
|
63
|
-
id: 'keys-ctrl-
|
|
63
|
+
id: 'keys-ctrl-g',
|
|
64
64
|
group: 'keys',
|
|
65
|
-
zh: 'Ctrl+
|
|
66
|
-
en: 'Ctrl+
|
|
65
|
+
zh: 'Ctrl+G 用 $VISUAL/$EDITOR 编辑器编辑当前输入',
|
|
66
|
+
en: 'Ctrl+G edits your input in the $VISUAL/$EDITOR editor',
|
|
67
67
|
},
|
|
68
68
|
{
|
|
69
69
|
id: 'keys-ctrl-enter',
|
|
@@ -98,8 +98,14 @@ export const TIPS = [
|
|
|
98
98
|
{
|
|
99
99
|
id: 'keys-home-end',
|
|
100
100
|
group: 'keys',
|
|
101
|
-
zh: 'Home/End
|
|
102
|
-
en: 'Home/End
|
|
101
|
+
zh: 'Home/End 到行首/行尾,Ctrl+E 到行尾',
|
|
102
|
+
en: 'Home/End jump to line start/end; Ctrl+E to line end',
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
id: 'keys-ctrl-a',
|
|
106
|
+
group: 'keys',
|
|
107
|
+
zh: 'Ctrl+A 子代理面板:Enter 看详情 · X 中断 · Esc 关',
|
|
108
|
+
en: 'Ctrl+A opens the subagent dashboard; Enter details, X interrupt, Esc close',
|
|
103
109
|
},
|
|
104
110
|
{
|
|
105
111
|
id: 'keys-edit-keys',
|
|
@@ -364,8 +370,8 @@ export const TIPS = [
|
|
|
364
370
|
{
|
|
365
371
|
id: 'flow-at',
|
|
366
372
|
group: 'workflow',
|
|
367
|
-
zh: '
|
|
368
|
-
en: '@ completes files
|
|
373
|
+
zh: '@ 补全支持模糊匹配;@src/ 直达该目录',
|
|
374
|
+
en: '@ completes files with fuzzy matching; @dir/ lists that directory',
|
|
369
375
|
},
|
|
370
376
|
{
|
|
371
377
|
id: 'flow-question-type',
|
|
@@ -470,6 +476,12 @@ export const TIPS = [
|
|
|
470
476
|
zh: '全屏模式鼠标拖选即复制;Esc 取消选区',
|
|
471
477
|
en: 'Drag-select copies instantly in fullscreen; Esc cancels',
|
|
472
478
|
},
|
|
479
|
+
{
|
|
480
|
+
id: 'disp-wheel-sel',
|
|
481
|
+
group: 'display',
|
|
482
|
+
zh: '有文本选区时,滚轮平移选区而非滚动列表',
|
|
483
|
+
en: 'With a text selection, the wheel translates the selection, not the list',
|
|
484
|
+
},
|
|
473
485
|
{
|
|
474
486
|
id: 'disp-whale',
|
|
475
487
|
group: 'display',
|
|
@@ -519,6 +531,12 @@ export const TIPS = [
|
|
|
519
531
|
zh: '提示版本错位时,按提示 npm install -g 对齐启动器',
|
|
520
532
|
en: 'On version skew, follow the npm install -g hint to align the launcher',
|
|
521
533
|
},
|
|
534
|
+
{
|
|
535
|
+
id: 'pit-drift',
|
|
536
|
+
group: 'pitfalls',
|
|
537
|
+
zh: 'logo ⚠ 提示 dsh 版本不符时,按提示 npm i -g @deepseek-ai/dsh 对齐',
|
|
538
|
+
en: 'When the logo warns about dsh versions, follow the npm i -g @deepseek-ai/dsh hint',
|
|
539
|
+
},
|
|
522
540
|
{
|
|
523
541
|
id: 'pit-mac',
|
|
524
542
|
group: 'pitfalls',
|
package/lib/types/update.d.ts
CHANGED
|
@@ -88,6 +88,24 @@ export declare function tuiUpdatePluginArgs(profile: string, targetVersion?: str
|
|
|
88
88
|
* token, so matching both keeps the retry from masking real failures.
|
|
89
89
|
*/
|
|
90
90
|
export declare function isTransientUpdateFailure(stderr: string): boolean;
|
|
91
|
+
/**
|
|
92
|
+
* Best-effort migrate the GLOBAL launcher to the delegating shim (0.8.7):
|
|
93
|
+
* after a successful profile update, copy this package's `bin/dsh-tui.js`
|
|
94
|
+
* and `package.json` over the global install so the launcher can never lag
|
|
95
|
+
* the profile again — the shim delegates all logic to the profile copy it
|
|
96
|
+
* just updated. Single-file-safe by contract: the new bin imports nothing
|
|
97
|
+
* from lib/ (see its header), so overwriting it inside an older global
|
|
98
|
+
* install cannot dangle a missing helper.
|
|
99
|
+
*
|
|
100
|
+
* Locating the global dir relies on argv[1] being the global `dsh-tui.js`
|
|
101
|
+
* (true when booted through the `dsh-tui` command). Source checkouts and
|
|
102
|
+
* direct `dsh --profile` boots resolve nothing — the migration is a silent
|
|
103
|
+
* no-op there. Write failures (permissions, locked files) are equally
|
|
104
|
+
* silent: the launcher-alignment warning remains the fallback diagnosis.
|
|
105
|
+
*
|
|
106
|
+
* @returns true when the global launcher files were replaced.
|
|
107
|
+
*/
|
|
108
|
+
export declare function migrateGlobalLauncher(): boolean;
|
|
91
109
|
/**
|
|
92
110
|
* Update the installed dsh-tui package and restart the same launcher while
|
|
93
111
|
* preserving the active session. The TUI must already be unmounted before
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/update.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAIlD,OAAO,EAAE,UAAU,EAAE,CAAA;AAQrB,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;CACf;AAED,4DAA4D;AAC5D,MAAM,MAAM,eAAe,GACvB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,GAC3E;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACnC;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,CAAA;AAEvB,MAAM,WAAW,eAAe;IAC9B,8EAA8E;IAC9E,UAAU,EAAE,MAAM,CAAA;IAClB;;;OAGG;IACH,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,gFAAgF;AAChF,wBAAgB,mBAAmB,IAAI,MAAM,GAAG,SAAS,CAiBxD;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,GAAE,SAAS,MAAM,EAAiB,GAAG,MAAM,GAAG,SAAS,CAahG;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAW5C;AAED,6EAA6E;AAC7E,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAIzE;AAED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAG7D;AA4BD;;;;;;;;;;;;GAYG;AACH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,eAAe,CAAC,CAcvE;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAG5E;AA6DD,gFAAgF;AAChF,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAIrF;AAED;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEhE;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,aAAa,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,eAAe,CAAC,
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/update.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAIlD,OAAO,EAAE,UAAU,EAAE,CAAA;AAQrB,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;CACf;AAED,4DAA4D;AAC5D,MAAM,MAAM,eAAe,GACvB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,GAC3E;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACnC;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,CAAA;AAEvB,MAAM,WAAW,eAAe;IAC9B,8EAA8E;IAC9E,UAAU,EAAE,MAAM,CAAA;IAClB;;;OAGG;IACH,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,gFAAgF;AAChF,wBAAgB,mBAAmB,IAAI,MAAM,GAAG,SAAS,CAiBxD;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,GAAE,SAAS,MAAM,EAAiB,GAAG,MAAM,GAAG,SAAS,CAahG;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAW5C;AAED,6EAA6E;AAC7E,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAIzE;AAED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAG7D;AA4BD;;;;;;;;;;;;GAYG;AACH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,eAAe,CAAC,CAcvE;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAG5E;AA6DD,gFAAgF;AAChF,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAIrF;AAED;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEhE;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,qBAAqB,IAAI,OAAO,CA2C/C;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,aAAa,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,eAAe,CAAC,CA+E1B"}
|