@wrongstack/tui 0.313.0 → 0.313.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/app-action-type.d.ts +1 -0
- package/dist/app-initial-state.d.ts +5 -0
- package/dist/app-settings-type.d.ts +2 -0
- package/dist/app-state.d.ts +2 -0
- package/dist/app-ui-state.d.ts +9 -0
- package/dist/components/settings-picker.d.ts +3 -1
- package/dist/index.js +526 -12
- package/dist/settings-contracts.d.ts +1 -0
- package/dist/ui-contracts.d.ts +2 -2
- package/package.json +7 -7
|
@@ -323,6 +323,7 @@ export type Action = {
|
|
|
323
323
|
breakerAutoKillResetMs: number;
|
|
324
324
|
showModelReasoning: boolean;
|
|
325
325
|
showAgentSwarmPanel: import('./app-settings-type.js').AgentSwarmPanelMode;
|
|
326
|
+
showSidebar?: boolean | undefined;
|
|
326
327
|
panelPositions: import('./ui-contracts.js').PanelPositionMap;
|
|
327
328
|
readSymbols: boolean;
|
|
328
329
|
showSageMemoryInject: boolean;
|
|
@@ -55,6 +55,11 @@ export interface CreateInitialStateOptions {
|
|
|
55
55
|
restoredEntries: State['entries'];
|
|
56
56
|
/** Checkpoints rebuilt from a resumed session's events. Empty for a fresh session. */
|
|
57
57
|
restoredCheckpoints?: State['checkpoints'] | undefined;
|
|
58
|
+
/** Initial context-window snapshot for resumed sessions. */
|
|
59
|
+
initialContextSnapshot?: {
|
|
60
|
+
tokens: number;
|
|
61
|
+
maxContext: number;
|
|
62
|
+
} | undefined;
|
|
58
63
|
enhanceEnabled: boolean;
|
|
59
64
|
initialAgentsMonitorOpen?: boolean | undefined;
|
|
60
65
|
/** Boot-time fleet-chat verbosity (from persisted config). Default 'off'. */
|
|
@@ -76,6 +76,8 @@ export type Settings = {
|
|
|
76
76
|
* sidebar, vertical), or 'off' (hidden). Default: 'bottom'.
|
|
77
77
|
* Backward-compat: old boolean configs are coerced — true→'bottom', false→'off'. */
|
|
78
78
|
showAgentSwarmPanel: AgentSwarmPanelMode;
|
|
79
|
+
/** Right sidebar visibility: when false, the right sidebar is completely hidden. Default: true. */
|
|
80
|
+
showSidebar: boolean;
|
|
79
81
|
/**
|
|
80
82
|
* Per-panel position map. Each F-key panel can be set to 'bottom' (F-key
|
|
81
83
|
* behavior, the default) or 'sidebar' (rendered in the right sidebar).
|
package/dist/app-state.d.ts
CHANGED
|
@@ -299,6 +299,8 @@ export type State = {
|
|
|
299
299
|
showModelReasoning: boolean;
|
|
300
300
|
/** Agent swarm panel placement: 'bottom' (lower region), 'sidebar' (right sidebar), or 'off'. Default: 'bottom'. */
|
|
301
301
|
showAgentSwarmPanel: import('./app-settings-type.js').AgentSwarmPanelMode;
|
|
302
|
+
/** Right sidebar visibility (mirrors Settings.showSidebar). Default: true. */
|
|
303
|
+
showSidebar: boolean;
|
|
302
304
|
/**
|
|
303
305
|
* Per-panel position map mirrored from the persisted Settings shape.
|
|
304
306
|
* Each F-key panel can be set to 'bottom' (F-key behavior, the default)
|
package/dist/app-ui-state.d.ts
CHANGED
|
@@ -23,6 +23,15 @@ export declare function effectivePanelPositions(state: State, liveSettings: Sett
|
|
|
23
23
|
export declare function resolveAgentSwarmPanelVisibility(settingsOpen: boolean, pickerValue: AgentSwarmPanelMode, persistedValue: AgentSwarmPanelMode | undefined): AgentSwarmPanelMode;
|
|
24
24
|
/** {@link resolveAgentSwarmPanelVisibility} bound to app state + live settings. */
|
|
25
25
|
export declare function effectiveAgentSwarmPanelMode(state: State, liveSettings: Settings | undefined): AgentSwarmPanelMode;
|
|
26
|
+
/**
|
|
27
|
+
* Pure dual-source read for the right-sidebar master switch: the picker
|
|
28
|
+
* draft wins while the settings picker is open, the persisted value
|
|
29
|
+
* (defaulting to true) otherwise. Boolean mirror of {@link
|
|
30
|
+
* resolveAgentSwarmPanelVisibility}.
|
|
31
|
+
*/
|
|
32
|
+
export declare function resolveShowSidebarVisibility(settingsOpen: boolean, pickerValue: boolean, persistedValue: boolean | undefined): boolean;
|
|
33
|
+
/** {@link resolveShowSidebarVisibility} bound to app state + live settings. */
|
|
34
|
+
export declare function effectiveShowSidebar(state: State, liveSettings: Settings | undefined): boolean;
|
|
26
35
|
/**
|
|
27
36
|
* Open flags for each routable panel — which twins are candidates for a
|
|
28
37
|
* sidebar slot. Shared by the dispatcher and the renderer so the
|
|
@@ -70,6 +70,8 @@ export interface SettingsPickerProps {
|
|
|
70
70
|
* this toggle controls only the sidebar mission queue. Default: 'bottom'.
|
|
71
71
|
*/
|
|
72
72
|
showAgentSwarmPanel: import('../app-settings-type.js').AgentSwarmPanelMode;
|
|
73
|
+
/** Right sidebar master toggle. */
|
|
74
|
+
showSidebar?: boolean | undefined;
|
|
73
75
|
/** Show SAGE Memory Inject blocks in tool results. Default: false. */
|
|
74
76
|
showSageMemoryInject: boolean;
|
|
75
77
|
/** Minimum relation strength for SAGE memory injection. Default: 0.85. */
|
|
@@ -133,5 +135,5 @@ export interface SettingsPickerProps {
|
|
|
133
135
|
fieldRowIndex: readonly number[];
|
|
134
136
|
}) => void) | undefined;
|
|
135
137
|
}
|
|
136
|
-
export declare function SettingsPicker({ field, filter, mode, delayMs, titleAnimation, yolo, fleetChat, chime, confirmExit, nextPrediction, featureMcp, featurePlugins, featureMemory, featureSkills, featureModelsRegistry, tokenSavingTier, allowOutsideProjectRoot, maxIterations, autoProceedMaxIterations, enhanceDelayMs, enhanceEnabled, enhanceLanguage, preRefineSeconds, indexOnStart, multiDiffSummaryThreshold, thinkingWord, thinkingWordEditing, thinkingWordDraft, wrongProxyUrlEditing, wrongProxyUrlDraft, reasoningMode, reasoningEffort, reasoningPreserve, cacheTtl, contextAutoCompact, contextStrategy, contextMode, maxConcurrent, logLevel, auditLevel, debugStream, statuslineMode, configScope, profileConfigPath, animationStyle, breakerEnabled, breakerAutoKillResetMs, showModelReasoning, showAgentSwarmPanel, showSageMemoryInject, sageMemoryInjectThreshold, nextStepsTool, readSymbols, panelPositions, wrongProxyEnabled, wrongProxyUrl, inputHeight, hint, onLayoutComputed, }: SettingsPickerProps): React.ReactElement;
|
|
138
|
+
export declare function SettingsPicker({ field, filter, mode, delayMs, titleAnimation, yolo, fleetChat, chime, confirmExit, nextPrediction, featureMcp, featurePlugins, featureMemory, featureSkills, featureModelsRegistry, tokenSavingTier, allowOutsideProjectRoot, maxIterations, autoProceedMaxIterations, enhanceDelayMs, enhanceEnabled, enhanceLanguage, preRefineSeconds, indexOnStart, multiDiffSummaryThreshold, thinkingWord, thinkingWordEditing, thinkingWordDraft, wrongProxyUrlEditing, wrongProxyUrlDraft, reasoningMode, reasoningEffort, reasoningPreserve, cacheTtl, contextAutoCompact, contextStrategy, contextMode, maxConcurrent, logLevel, auditLevel, debugStream, statuslineMode, configScope, profileConfigPath, animationStyle, breakerEnabled, breakerAutoKillResetMs, showModelReasoning, showAgentSwarmPanel, showSidebar, showSageMemoryInject, sageMemoryInjectThreshold, nextStepsTool, readSymbols, panelPositions, wrongProxyEnabled, wrongProxyUrl, inputHeight, hint, onLayoutComputed, }: SettingsPickerProps): React.ReactElement;
|
|
137
139
|
//# sourceMappingURL=settings-picker.d.ts.map
|
package/dist/index.js
CHANGED
|
@@ -1238,6 +1238,342 @@ var themePresets = Object.freeze({
|
|
|
1238
1238
|
diffAddBg: "#1c1c1c",
|
|
1239
1239
|
diffDelBg: "#262626",
|
|
1240
1240
|
monitor: { fleet: "#cccccc", agents: "#d0d0d0", worktree: "#a8a8a8", phase: "#bcbcbc" }
|
|
1241
|
+
}),
|
|
1242
|
+
matrix: Object.freeze({
|
|
1243
|
+
...baseTheme,
|
|
1244
|
+
textPrimary: "#a3e635",
|
|
1245
|
+
textSecondary: "#65a30d",
|
|
1246
|
+
textMuted: "#3f6212",
|
|
1247
|
+
brandPrimary: "#4ade80",
|
|
1248
|
+
brandAccent: "#22c55e",
|
|
1249
|
+
surface: "#050a05",
|
|
1250
|
+
surfaceRaised: "#0d190d",
|
|
1251
|
+
accent: "#22c55e",
|
|
1252
|
+
user: "#86efac",
|
|
1253
|
+
assistant: "#22c55e",
|
|
1254
|
+
tool: "#4ade80",
|
|
1255
|
+
success: "#22c55e",
|
|
1256
|
+
warn: "#a3e635",
|
|
1257
|
+
error: "#ef4444",
|
|
1258
|
+
borderDefault: "#1a331a",
|
|
1259
|
+
borderSubtle: "#0f200f",
|
|
1260
|
+
borderActive: "#22c55e",
|
|
1261
|
+
brand: "#16a34a",
|
|
1262
|
+
diffAddBg: "#0b2612",
|
|
1263
|
+
diffDelBg: "#2a0e14",
|
|
1264
|
+
monitor: { fleet: "#4ade80", agents: "#22c55e", worktree: "#86efac", phase: "#16a34a" }
|
|
1265
|
+
}),
|
|
1266
|
+
amber: Object.freeze({
|
|
1267
|
+
...baseTheme,
|
|
1268
|
+
textPrimary: "#ffc83b",
|
|
1269
|
+
textSecondary: "#d9981e",
|
|
1270
|
+
textMuted: "#8c5e0d",
|
|
1271
|
+
brandPrimary: "#ffb000",
|
|
1272
|
+
brandAccent: "#ff8c00",
|
|
1273
|
+
surface: "#0f0a03",
|
|
1274
|
+
surfaceRaised: "#1a1205",
|
|
1275
|
+
accent: "#ffb000",
|
|
1276
|
+
user: "#ffd700",
|
|
1277
|
+
assistant: "#ffb000",
|
|
1278
|
+
tool: "#ffa000",
|
|
1279
|
+
success: "#73c936",
|
|
1280
|
+
warn: "#ffb000",
|
|
1281
|
+
error: "#ff5555",
|
|
1282
|
+
borderDefault: "#3d2806",
|
|
1283
|
+
borderSubtle: "#261803",
|
|
1284
|
+
borderActive: "#ffb000",
|
|
1285
|
+
brand: "#ff9000",
|
|
1286
|
+
diffAddBg: "#1a2608",
|
|
1287
|
+
diffDelBg: "#2b0e0a",
|
|
1288
|
+
monitor: { fleet: "#ffb000", agents: "#ff8c00", worktree: "#ffd700", phase: "#ffa000" }
|
|
1289
|
+
}),
|
|
1290
|
+
"cyber-noir": Object.freeze({
|
|
1291
|
+
...baseTheme,
|
|
1292
|
+
textPrimary: "#f1f5f9",
|
|
1293
|
+
textSecondary: "#cbd5e1",
|
|
1294
|
+
textMuted: "#64748b",
|
|
1295
|
+
brandPrimary: "#94a3b8",
|
|
1296
|
+
brandAccent: "#e2e8f0",
|
|
1297
|
+
surface: "#08090a",
|
|
1298
|
+
surfaceRaised: "#121417",
|
|
1299
|
+
accent: "#e2e8f0",
|
|
1300
|
+
user: "#f8fafc",
|
|
1301
|
+
assistant: "#e2e8f0",
|
|
1302
|
+
tool: "#cbd5e1",
|
|
1303
|
+
success: "#86efac",
|
|
1304
|
+
warn: "#fde047",
|
|
1305
|
+
error: "#f87171",
|
|
1306
|
+
borderDefault: "#334155",
|
|
1307
|
+
borderSubtle: "#1e293b",
|
|
1308
|
+
borderActive: "#f8fafc",
|
|
1309
|
+
brand: "#cbd5e1",
|
|
1310
|
+
diffAddBg: "#0f291e",
|
|
1311
|
+
diffDelBg: "#2d1217",
|
|
1312
|
+
monitor: { fleet: "#e2e8f0", agents: "#cbd5e1", worktree: "#86efac", phase: "#94a3b8" }
|
|
1313
|
+
}),
|
|
1314
|
+
"cobalt-mono": Object.freeze({
|
|
1315
|
+
...baseTheme,
|
|
1316
|
+
textPrimary: "#bae6fd",
|
|
1317
|
+
textSecondary: "#7dd3fc",
|
|
1318
|
+
textMuted: "#0369a1",
|
|
1319
|
+
brandPrimary: "#38bdf8",
|
|
1320
|
+
brandAccent: "#0ea5e9",
|
|
1321
|
+
surface: "#040d1a",
|
|
1322
|
+
surfaceRaised: "#08172e",
|
|
1323
|
+
accent: "#38bdf8",
|
|
1324
|
+
user: "#7dd3fc",
|
|
1325
|
+
assistant: "#38bdf8",
|
|
1326
|
+
tool: "#0ea5e9",
|
|
1327
|
+
success: "#4ade80",
|
|
1328
|
+
warn: "#facc15",
|
|
1329
|
+
error: "#f87171",
|
|
1330
|
+
borderDefault: "#0c4a6e",
|
|
1331
|
+
borderSubtle: "#082f49",
|
|
1332
|
+
borderActive: "#38bdf8",
|
|
1333
|
+
brand: "#0284c7",
|
|
1334
|
+
diffAddBg: "#06281e",
|
|
1335
|
+
diffDelBg: "#2a0e18",
|
|
1336
|
+
monitor: { fleet: "#38bdf8", agents: "#0ea5e9", worktree: "#7dd3fc", phase: "#0284c7" }
|
|
1337
|
+
}),
|
|
1338
|
+
"blood-moon": Object.freeze({
|
|
1339
|
+
...baseTheme,
|
|
1340
|
+
textPrimary: "#fecaca",
|
|
1341
|
+
textSecondary: "#f87171",
|
|
1342
|
+
textMuted: "#991b1b",
|
|
1343
|
+
brandPrimary: "#ef4444",
|
|
1344
|
+
brandAccent: "#dc2626",
|
|
1345
|
+
surface: "#0f0507",
|
|
1346
|
+
surfaceRaised: "#1a0a0e",
|
|
1347
|
+
accent: "#f87171",
|
|
1348
|
+
user: "#fca5a5",
|
|
1349
|
+
assistant: "#f87171",
|
|
1350
|
+
tool: "#ef4444",
|
|
1351
|
+
success: "#4ade80",
|
|
1352
|
+
warn: "#fbbf24",
|
|
1353
|
+
error: "#f87171",
|
|
1354
|
+
borderDefault: "#450a0a",
|
|
1355
|
+
borderSubtle: "#2d0606",
|
|
1356
|
+
borderActive: "#ef4444",
|
|
1357
|
+
brand: "#dc2626",
|
|
1358
|
+
diffAddBg: "#122614",
|
|
1359
|
+
diffDelBg: "#2e080d",
|
|
1360
|
+
monitor: { fleet: "#f87171", agents: "#dc2626", worktree: "#fca5a5", phase: "#ef4444" }
|
|
1361
|
+
}),
|
|
1362
|
+
cobalt2: Object.freeze({
|
|
1363
|
+
...baseTheme,
|
|
1364
|
+
textPrimary: "#ffffff",
|
|
1365
|
+
textSecondary: "#a5b4fc",
|
|
1366
|
+
textMuted: "#6272a4",
|
|
1367
|
+
brandPrimary: "#ffc600",
|
|
1368
|
+
brandAccent: "#0088ff",
|
|
1369
|
+
surface: "#15232d",
|
|
1370
|
+
surfaceRaised: "#193549",
|
|
1371
|
+
accent: "#0088ff",
|
|
1372
|
+
user: "#ffc600",
|
|
1373
|
+
assistant: "#3ad900",
|
|
1374
|
+
tool: "#0088ff",
|
|
1375
|
+
success: "#3ad900",
|
|
1376
|
+
warn: "#ff9d00",
|
|
1377
|
+
error: "#ff0055",
|
|
1378
|
+
borderDefault: "#264a66",
|
|
1379
|
+
borderSubtle: "#193549",
|
|
1380
|
+
borderActive: "#ffc600",
|
|
1381
|
+
brand: "#ffc600",
|
|
1382
|
+
diffAddBg: "#103822",
|
|
1383
|
+
diffDelBg: "#3d0e20",
|
|
1384
|
+
monitor: { fleet: "#0088ff", agents: "#ffc600", worktree: "#3ad900", phase: "#ff9d00" }
|
|
1385
|
+
}),
|
|
1386
|
+
"shades-of-purple": Object.freeze({
|
|
1387
|
+
...baseTheme,
|
|
1388
|
+
textPrimary: "#ffffff",
|
|
1389
|
+
textSecondary: "#d1b3ff",
|
|
1390
|
+
textMuted: "#7869a8",
|
|
1391
|
+
brandPrimary: "#fad000",
|
|
1392
|
+
brandAccent: "#ff62d3",
|
|
1393
|
+
surface: "#181734",
|
|
1394
|
+
surfaceRaised: "#222244",
|
|
1395
|
+
accent: "#9effff",
|
|
1396
|
+
user: "#fad000",
|
|
1397
|
+
assistant: "#9effff",
|
|
1398
|
+
tool: "#b362ff",
|
|
1399
|
+
success: "#a5ff90",
|
|
1400
|
+
warn: "#fad000",
|
|
1401
|
+
error: "#ff3366",
|
|
1402
|
+
borderDefault: "#443c7a",
|
|
1403
|
+
borderSubtle: "#2d2757",
|
|
1404
|
+
borderActive: "#fad000",
|
|
1405
|
+
brand: "#b362ff",
|
|
1406
|
+
diffAddBg: "#163628",
|
|
1407
|
+
diffDelBg: "#3b162a",
|
|
1408
|
+
monitor: { fleet: "#9effff", agents: "#b362ff", worktree: "#a5ff90", phase: "#ff62d3" }
|
|
1409
|
+
}),
|
|
1410
|
+
"flexoki-dark": Object.freeze({
|
|
1411
|
+
...baseTheme,
|
|
1412
|
+
textPrimary: "#cecdc3",
|
|
1413
|
+
textSecondary: "#b7b5ac",
|
|
1414
|
+
textMuted: "#66645e",
|
|
1415
|
+
brandPrimary: "#da702c",
|
|
1416
|
+
brandAccent: "#ce5d97",
|
|
1417
|
+
surface: "#100f0f",
|
|
1418
|
+
surfaceRaised: "#1c1b1a",
|
|
1419
|
+
accent: "#4385be",
|
|
1420
|
+
user: "#d0a215",
|
|
1421
|
+
assistant: "#24837b",
|
|
1422
|
+
tool: "#4385be",
|
|
1423
|
+
success: "#879a39",
|
|
1424
|
+
warn: "#da702c",
|
|
1425
|
+
error: "#d14d41",
|
|
1426
|
+
borderDefault: "#343331",
|
|
1427
|
+
borderSubtle: "#282726",
|
|
1428
|
+
borderActive: "#da702c",
|
|
1429
|
+
brand: "#ce5d97",
|
|
1430
|
+
diffAddBg: "#192b1a",
|
|
1431
|
+
diffDelBg: "#321919",
|
|
1432
|
+
monitor: { fleet: "#4385be", agents: "#ce5d97", worktree: "#879a39", phase: "#24837b" }
|
|
1433
|
+
}),
|
|
1434
|
+
laserwave: Object.freeze({
|
|
1435
|
+
...baseTheme,
|
|
1436
|
+
textPrimary: "#ffffff",
|
|
1437
|
+
textSecondary: "#d0bfe6",
|
|
1438
|
+
textMuted: "#716485",
|
|
1439
|
+
brandPrimary: "#eb64b9",
|
|
1440
|
+
brandAccent: "#b381c5",
|
|
1441
|
+
surface: "#161320",
|
|
1442
|
+
surfaceRaised: "#1f1a2e",
|
|
1443
|
+
accent: "#40b4c4",
|
|
1444
|
+
user: "#ffe261",
|
|
1445
|
+
assistant: "#40b4c4",
|
|
1446
|
+
tool: "#eb64b9",
|
|
1447
|
+
success: "#74dfc4",
|
|
1448
|
+
warn: "#ffe261",
|
|
1449
|
+
error: "#e95678",
|
|
1450
|
+
borderDefault: "#44385f",
|
|
1451
|
+
borderSubtle: "#2b233e",
|
|
1452
|
+
borderActive: "#eb64b9",
|
|
1453
|
+
brand: "#b381c5",
|
|
1454
|
+
diffAddBg: "#143830",
|
|
1455
|
+
diffDelBg: "#3a1728",
|
|
1456
|
+
monitor: { fleet: "#40b4c4", agents: "#b381c5", worktree: "#74dfc4", phase: "#eb64b9" }
|
|
1457
|
+
}),
|
|
1458
|
+
andromeda: Object.freeze({
|
|
1459
|
+
...baseTheme,
|
|
1460
|
+
textPrimary: "#f7f7f8",
|
|
1461
|
+
textSecondary: "#d5ced9",
|
|
1462
|
+
textMuted: "#746f77",
|
|
1463
|
+
brandPrimary: "#f92672",
|
|
1464
|
+
brandAccent: "#c74ded",
|
|
1465
|
+
surface: "#1b1d23",
|
|
1466
|
+
surfaceRaised: "#23262e",
|
|
1467
|
+
accent: "#00e8c6",
|
|
1468
|
+
user: "#ffe66d",
|
|
1469
|
+
assistant: "#00e8c6",
|
|
1470
|
+
tool: "#c74ded",
|
|
1471
|
+
success: "#96e072",
|
|
1472
|
+
warn: "#ffe66d",
|
|
1473
|
+
error: "#f92672",
|
|
1474
|
+
borderDefault: "#3e4451",
|
|
1475
|
+
borderSubtle: "#2b2f38",
|
|
1476
|
+
borderActive: "#00e8c6",
|
|
1477
|
+
brand: "#c74ded",
|
|
1478
|
+
diffAddBg: "#163827",
|
|
1479
|
+
diffDelBg: "#3b172a",
|
|
1480
|
+
monitor: { fleet: "#00e8c6", agents: "#c74ded", worktree: "#96e072", phase: "#ffe66d" }
|
|
1481
|
+
}),
|
|
1482
|
+
"github-dark-dimmed": Object.freeze({
|
|
1483
|
+
...baseTheme,
|
|
1484
|
+
textPrimary: "#cdd9e5",
|
|
1485
|
+
textSecondary: "#adbac7",
|
|
1486
|
+
textMuted: "#636e7b",
|
|
1487
|
+
brandPrimary: "#539bf5",
|
|
1488
|
+
brandAccent: "#dcbdfb",
|
|
1489
|
+
surface: "#1c2128",
|
|
1490
|
+
surfaceRaised: "#22272e",
|
|
1491
|
+
accent: "#6cb6ff",
|
|
1492
|
+
user: "#daaa3f",
|
|
1493
|
+
assistant: "#6cb6ff",
|
|
1494
|
+
tool: "#539bf5",
|
|
1495
|
+
success: "#57ab5a",
|
|
1496
|
+
warn: "#daaa3f",
|
|
1497
|
+
error: "#f47067",
|
|
1498
|
+
borderDefault: "#444c56",
|
|
1499
|
+
borderSubtle: "#313944",
|
|
1500
|
+
borderActive: "#539bf5",
|
|
1501
|
+
brand: "#dcbdfb",
|
|
1502
|
+
diffAddBg: "#1b3824",
|
|
1503
|
+
diffDelBg: "#3d1c20",
|
|
1504
|
+
monitor: { fleet: "#6cb6ff", agents: "#dcbdfb", worktree: "#57ab5a", phase: "#539bf5" }
|
|
1505
|
+
}),
|
|
1506
|
+
snazzy: Object.freeze({
|
|
1507
|
+
...baseTheme,
|
|
1508
|
+
textPrimary: "#eff0eb",
|
|
1509
|
+
textSecondary: "#d8dee9",
|
|
1510
|
+
textMuted: "#686f7a",
|
|
1511
|
+
brandPrimary: "#ff5c57",
|
|
1512
|
+
brandAccent: "#ff6ac1",
|
|
1513
|
+
surface: "#1e2029",
|
|
1514
|
+
surfaceRaised: "#282a36",
|
|
1515
|
+
accent: "#57c7ff",
|
|
1516
|
+
user: "#f3f99d",
|
|
1517
|
+
assistant: "#57c7ff",
|
|
1518
|
+
tool: "#ff6ac1",
|
|
1519
|
+
success: "#5af78e",
|
|
1520
|
+
warn: "#f3f99d",
|
|
1521
|
+
error: "#ff5c57",
|
|
1522
|
+
borderDefault: "#414558",
|
|
1523
|
+
borderSubtle: "#2f3241",
|
|
1524
|
+
borderActive: "#57c7ff",
|
|
1525
|
+
brand: "#ff6ac1",
|
|
1526
|
+
diffAddBg: "#153826",
|
|
1527
|
+
diffDelBg: "#3b1820",
|
|
1528
|
+
monitor: { fleet: "#57c7ff", agents: "#ff6ac1", worktree: "#5af78e", phase: "#f3f99d" }
|
|
1529
|
+
}),
|
|
1530
|
+
"tokyo-night-moon": Object.freeze({
|
|
1531
|
+
...baseTheme,
|
|
1532
|
+
textPrimary: "#c8d3f5",
|
|
1533
|
+
textSecondary: "#a5b6cf",
|
|
1534
|
+
textMuted: "#636e8d",
|
|
1535
|
+
brandPrimary: "#ff966c",
|
|
1536
|
+
brandAccent: "#c099ff",
|
|
1537
|
+
surface: "#1e2030",
|
|
1538
|
+
surfaceRaised: "#222436",
|
|
1539
|
+
accent: "#82aaff",
|
|
1540
|
+
user: "#ffc777",
|
|
1541
|
+
assistant: "#82aaff",
|
|
1542
|
+
tool: "#c099ff",
|
|
1543
|
+
success: "#c3e88d",
|
|
1544
|
+
warn: "#ffc777",
|
|
1545
|
+
error: "#ff757f",
|
|
1546
|
+
borderDefault: "#3b4261",
|
|
1547
|
+
borderSubtle: "#2f334d",
|
|
1548
|
+
borderActive: "#82aaff",
|
|
1549
|
+
brand: "#c099ff",
|
|
1550
|
+
diffAddBg: "#1d3627",
|
|
1551
|
+
diffDelBg: "#3d1e28",
|
|
1552
|
+
monitor: { fleet: "#82aaff", agents: "#c099ff", worktree: "#c3e88d", phase: "#ff966c" }
|
|
1553
|
+
}),
|
|
1554
|
+
"gruvbox-dark-hard": Object.freeze({
|
|
1555
|
+
...baseTheme,
|
|
1556
|
+
textPrimary: "#ebdbb2",
|
|
1557
|
+
textSecondary: "#d5c4a1",
|
|
1558
|
+
textMuted: "#665c54",
|
|
1559
|
+
brandPrimary: "#fe8019",
|
|
1560
|
+
brandAccent: "#d3869b",
|
|
1561
|
+
surface: "#141617",
|
|
1562
|
+
surfaceRaised: "#1d2021",
|
|
1563
|
+
accent: "#83a598",
|
|
1564
|
+
user: "#fabd2f",
|
|
1565
|
+
assistant: "#83a598",
|
|
1566
|
+
tool: "#8ec07c",
|
|
1567
|
+
success: "#b8bb26",
|
|
1568
|
+
warn: "#fabd2f",
|
|
1569
|
+
error: "#fb4934",
|
|
1570
|
+
borderDefault: "#504945",
|
|
1571
|
+
borderSubtle: "#32302f",
|
|
1572
|
+
borderActive: "#fe8019",
|
|
1573
|
+
brand: "#d3869b",
|
|
1574
|
+
diffAddBg: "#1a331a",
|
|
1575
|
+
diffDelBg: "#351a1a",
|
|
1576
|
+
monitor: { fleet: "#83a598", agents: "#d3869b", worktree: "#b8bb26", phase: "#8ec07c" }
|
|
1241
1577
|
})
|
|
1242
1578
|
});
|
|
1243
1579
|
var THEME_OPTIONS = [
|
|
@@ -1412,6 +1748,76 @@ var THEME_OPTIONS = [
|
|
|
1412
1748
|
id: "monochrome",
|
|
1413
1749
|
name: "Monochrome",
|
|
1414
1750
|
description: "Pure grayscale \u2014 no hue, only luminance"
|
|
1751
|
+
},
|
|
1752
|
+
{
|
|
1753
|
+
id: "matrix",
|
|
1754
|
+
name: "Matrix Green",
|
|
1755
|
+
description: "Phosphor green CRT terminal \u2014 digital rain aesthetic"
|
|
1756
|
+
},
|
|
1757
|
+
{
|
|
1758
|
+
id: "amber",
|
|
1759
|
+
name: "Amber CRT",
|
|
1760
|
+
description: "Warm phosphor CRT terminal \u2014 glowing vintage amber"
|
|
1761
|
+
},
|
|
1762
|
+
{
|
|
1763
|
+
id: "cyber-noir",
|
|
1764
|
+
name: "Cyber Noir",
|
|
1765
|
+
description: "Stark white and slate on jet black \u2014 minimalist high contrast"
|
|
1766
|
+
},
|
|
1767
|
+
{
|
|
1768
|
+
id: "cobalt-mono",
|
|
1769
|
+
name: "Cobalt Monochrome",
|
|
1770
|
+
description: "Luminous cyan on deep abyss blue \u2014 oceanic blueprint"
|
|
1771
|
+
},
|
|
1772
|
+
{
|
|
1773
|
+
id: "blood-moon",
|
|
1774
|
+
name: "Blood Moon",
|
|
1775
|
+
description: "Crimson & scarlet on obsidian \u2014 brooding dark mode"
|
|
1776
|
+
},
|
|
1777
|
+
{
|
|
1778
|
+
id: "cobalt2",
|
|
1779
|
+
name: "Cobalt2",
|
|
1780
|
+
description: "Wes Bos' signature theme \u2014 deep navy with golden yellow & cyan"
|
|
1781
|
+
},
|
|
1782
|
+
{
|
|
1783
|
+
id: "shades-of-purple",
|
|
1784
|
+
name: "Shades of Purple",
|
|
1785
|
+
description: "Ahmad Awais' bold purple palette with neon yellow & magenta"
|
|
1786
|
+
},
|
|
1787
|
+
{
|
|
1788
|
+
id: "flexoki-dark",
|
|
1789
|
+
name: "Flexoki Dark",
|
|
1790
|
+
description: "Steph Ango's inky warm paper palette \u2014 natural earthy accents"
|
|
1791
|
+
},
|
|
1792
|
+
{
|
|
1793
|
+
id: "laserwave",
|
|
1794
|
+
name: "LaserWave",
|
|
1795
|
+
description: "80s retrowave \u2014 neon flamingo and turquoise on violet"
|
|
1796
|
+
},
|
|
1797
|
+
{
|
|
1798
|
+
id: "andromeda",
|
|
1799
|
+
name: "Andromeda",
|
|
1800
|
+
description: "Deep interstellar dark with vibrant neon teal and pink"
|
|
1801
|
+
},
|
|
1802
|
+
{
|
|
1803
|
+
id: "github-dark-dimmed",
|
|
1804
|
+
name: "GitHub Dark Dimmed",
|
|
1805
|
+
description: "GitHub's softer slate dark theme \u2014 gentle blues and pastels"
|
|
1806
|
+
},
|
|
1807
|
+
{
|
|
1808
|
+
id: "snazzy",
|
|
1809
|
+
name: "Hyper Snazzy",
|
|
1810
|
+
description: "Sindre Sorhus' elegant saturated terminal palette"
|
|
1811
|
+
},
|
|
1812
|
+
{
|
|
1813
|
+
id: "tokyo-night-moon",
|
|
1814
|
+
name: "Tokyo Night Moon",
|
|
1815
|
+
description: "Tokyo Night on balanced deep indigo \u2014 vibrant accents"
|
|
1816
|
+
},
|
|
1817
|
+
{
|
|
1818
|
+
id: "gruvbox-dark-hard",
|
|
1819
|
+
name: "Gruvbox Dark Hard",
|
|
1820
|
+
description: "Maximum contrast Gruvbox on deep pitch charcoal"
|
|
1415
1821
|
}
|
|
1416
1822
|
];
|
|
1417
1823
|
|
|
@@ -1936,7 +2342,7 @@ var PANEL_IDS = Object.freeze([
|
|
|
1936
2342
|
"connections"
|
|
1937
2343
|
// Ctrl+N
|
|
1938
2344
|
]);
|
|
1939
|
-
var TOTAL_SETTINGS_FIELD_COUNT = PANEL_POSITION_FIELD_START + PANEL_IDS.length +
|
|
2345
|
+
var TOTAL_SETTINGS_FIELD_COUNT = PANEL_POSITION_FIELD_START + PANEL_IDS.length + 3;
|
|
1940
2346
|
var DEFAULT_PANEL_POSITIONS = Object.freeze({
|
|
1941
2347
|
projectPicker: "bottom",
|
|
1942
2348
|
fleet: "bottom",
|
|
@@ -2009,6 +2415,16 @@ function effectiveAgentSwarmPanelMode(state, liveSettings) {
|
|
|
2009
2415
|
liveSettings?.showAgentSwarmPanel
|
|
2010
2416
|
);
|
|
2011
2417
|
}
|
|
2418
|
+
function resolveShowSidebarVisibility(settingsOpen, pickerValue, persistedValue) {
|
|
2419
|
+
return settingsOpen ? pickerValue : persistedValue ?? true;
|
|
2420
|
+
}
|
|
2421
|
+
function effectiveShowSidebar(state, liveSettings) {
|
|
2422
|
+
return resolveShowSidebarVisibility(
|
|
2423
|
+
state.settingsPicker.open,
|
|
2424
|
+
state.settingsPicker.showSidebar,
|
|
2425
|
+
liveSettings?.showSidebar
|
|
2426
|
+
);
|
|
2427
|
+
}
|
|
2012
2428
|
function buildSidebarOpenFlags(state, liveSettings) {
|
|
2013
2429
|
return {
|
|
2014
2430
|
projectPicker: state.projectPicker.open,
|
|
@@ -2033,15 +2449,16 @@ function resolveAppSidebarLayout(state, termCols, liveSettings, mailboxPanelOpen
|
|
|
2033
2449
|
effectivePanelPositionsInput(state, liveSettings),
|
|
2034
2450
|
mailboxPanelOpen,
|
|
2035
2451
|
buildSidebarOpenFlags(state, liveSettings),
|
|
2036
|
-
effectiveAgentSwarmPanelMode(state, liveSettings) === "sidebar"
|
|
2452
|
+
effectiveAgentSwarmPanelMode(state, liveSettings) === "sidebar",
|
|
2453
|
+
effectiveShowSidebar(state, liveSettings)
|
|
2037
2454
|
);
|
|
2038
2455
|
}
|
|
2039
|
-
function resolveSidebarLayout(state, termCols, panelPositionsInput, mailboxPanelOpen, sidebarOpenFlags, legacySwarmOnSidebar) {
|
|
2456
|
+
function resolveSidebarLayout(state, termCols, panelPositionsInput, mailboxPanelOpen, sidebarOpenFlags, legacySwarmOnSidebar, showSidebar) {
|
|
2040
2457
|
const panelPositions = coercePanelPositionMap(panelPositionsInput);
|
|
2041
2458
|
const routedToSidebar = (id) => panelPositions[id] === "sidebar";
|
|
2042
2459
|
const overlayOpen = isPickerOverlayOpen(state) || state.coordinator.monitorOpen && !routedToSidebar("coordinator") || state.auditPanelOpen || state.connectionsPanelOpen && !routedToSidebar("connections") || state.helpOpen || state.agentsMonitorOpen && !routedToSidebar("agents") || state.monitorOpen && !routedToSidebar("fleet") || state.contextPanelOpen || state.processListOpen && !routedToSidebar("processList") || state.todosMonitorOpen && !routedToSidebar("todos") || state.worktreeMonitorOpen && !routedToSidebar("worktree") || state.planPanelOpen && !routedToSidebar("plan") || state.kanbanPanelOpen && !routedToSidebar("kanban") || state.queuePanelOpen && !routedToSidebar("queue") || state.goalPanelOpen && !routedToSidebar("goal") || state.sessionsPanelOpen && !routedToSidebar("sessions") || state.projectPicker.open && !routedToSidebar("projectPicker") || state.goalKanbanPanelOpen || state.cronMonitorOpen || state.rewindOverlay != null || state.fallbackOverlay != null || state.shellCommandWarning != null || state.confirmQueue.length > 0 || state.clearConfirm != null || state.exitConfirm != null || state.slashConfirm != null || state.escConfirm != null || state.sendModePicker != null || state.enhance != null || state.enhanceBusy || state.topicCheckBusy || state.refineCountdown != null || state.refineFailure != null || state.continueConfirm != null || state.brainPrompt != null || mailboxPanelOpen || (state.goalRun?.monitorOpen ?? false) && !routedToSidebar("coordinator") || (state.sddBoard?.monitorOpen ?? false);
|
|
2043
|
-
const sidebarWidth = overlayOpen ? 0 : computeSidebarWidth(termCols);
|
|
2044
|
-
const effectiveSwarmOnSidebar = panelPositions.fleet === "sidebar" || (legacySwarmOnSidebar ?? false);
|
|
2460
|
+
const sidebarWidth = overlayOpen || showSidebar === false ? 0 : computeSidebarWidth(termCols);
|
|
2461
|
+
const effectiveSwarmOnSidebar = showSidebar !== false && (panelPositions.fleet === "sidebar" || (legacySwarmOnSidebar ?? false));
|
|
2045
2462
|
let sidebarTwinRowCount = 0;
|
|
2046
2463
|
if (sidebarOpenFlags) {
|
|
2047
2464
|
sidebarTwinRowCount = sumSidebarTwinRowCount(
|
|
@@ -17873,8 +18290,10 @@ var SETTINGS_FIELD_LABELS = [
|
|
|
17873
18290
|
// WS `prefs.update` pipeline; the picker is just the user surface.
|
|
17874
18291
|
"WrongProxy / WrongTrace",
|
|
17875
18292
|
// 59
|
|
17876
|
-
"WrongProxy URL"
|
|
18293
|
+
"WrongProxy URL",
|
|
17877
18294
|
// 60
|
|
18295
|
+
"Right sidebar"
|
|
18296
|
+
// 61
|
|
17878
18297
|
];
|
|
17879
18298
|
function resolveSettingsFieldValue(field, input) {
|
|
17880
18299
|
const raw = input.trim().toLowerCase();
|
|
@@ -17904,7 +18323,9 @@ function resolveSettingsFieldValue(field, input) {
|
|
|
17904
18323
|
[45, "nextStepsTool"],
|
|
17905
18324
|
// WrongProxy / WrongTrace master switch (field 59). The companion
|
|
17906
18325
|
// URL field (60) is text-typed, see resolveSettingsFieldValue.
|
|
17907
|
-
[59, "wrongProxyEnabled"]
|
|
18326
|
+
[59, "wrongProxyEnabled"],
|
|
18327
|
+
// Right sidebar master switch (field 61).
|
|
18328
|
+
[61, "showSidebar"]
|
|
17908
18329
|
]);
|
|
17909
18330
|
const boolKey = BOOL_FIELDS.get(field);
|
|
17910
18331
|
if (boolKey) {
|
|
@@ -18119,7 +18540,9 @@ function getSettingsFieldValue(values, field) {
|
|
|
18119
18540
|
[45, "nextStepsTool"],
|
|
18120
18541
|
// WrongProxy / WrongTrace master switch (field 59). The companion
|
|
18121
18542
|
// URL field (60) is text-typed, see getSettingsFieldValue.
|
|
18122
|
-
[59, "wrongProxyEnabled"]
|
|
18543
|
+
[59, "wrongProxyEnabled"],
|
|
18544
|
+
// Right sidebar master switch (field 61).
|
|
18545
|
+
[61, "showSidebar"]
|
|
18123
18546
|
];
|
|
18124
18547
|
for (const [f, key] of BOOL_KEYS) {
|
|
18125
18548
|
if (field !== f) continue;
|
|
@@ -18221,7 +18644,7 @@ var SETTINGS_SECTIONS = [
|
|
|
18221
18644
|
},
|
|
18222
18645
|
{
|
|
18223
18646
|
name: "Display",
|
|
18224
|
-
fields: [39, 40, 41, 43, 44]
|
|
18647
|
+
fields: [39, 40, 41, 43, 44, 61]
|
|
18225
18648
|
},
|
|
18226
18649
|
{
|
|
18227
18650
|
name: "Panels",
|
|
@@ -18313,7 +18736,8 @@ var SETTINGS_DEFAULTS = Object.freeze({
|
|
|
18313
18736
|
// makes every key mandatory — omitting them here breaks the type
|
|
18314
18737
|
// contract for the entire TUI settings module. See Chimera review.
|
|
18315
18738
|
wrongProxyEnabled: false,
|
|
18316
|
-
wrongProxyUrl: "http://localhost:3444"
|
|
18739
|
+
wrongProxyUrl: "http://localhost:3444",
|
|
18740
|
+
showSidebar: true
|
|
18317
18741
|
});
|
|
18318
18742
|
function resetSettingsFieldValue(field) {
|
|
18319
18743
|
const result = getSettingsFieldValue(SETTINGS_DEFAULTS, field);
|
|
@@ -18376,7 +18800,11 @@ function buildResetPatch(field) {
|
|
|
18376
18800
|
// and `ToolsConfig.wrongProxy?: WrongProxyToolConfig` for the
|
|
18377
18801
|
// canonical persistence shape.
|
|
18378
18802
|
[59, "wrongProxyEnabled"],
|
|
18379
|
-
[60, "wrongProxyUrl"]
|
|
18803
|
+
[60, "wrongProxyUrl"],
|
|
18804
|
+
// Right sidebar master switch (field 61). Without this entry,
|
|
18805
|
+
// `/settings reset sidebar` returns null and the field is
|
|
18806
|
+
// unresettable even though BOOL_FIELDS accepts on/off for it.
|
|
18807
|
+
[61, "showSidebar"]
|
|
18380
18808
|
];
|
|
18381
18809
|
for (const [f, key] of KEY_MAP) {
|
|
18382
18810
|
if (f === field) {
|
|
@@ -18526,6 +18954,7 @@ function SettingsPicker({
|
|
|
18526
18954
|
breakerAutoKillResetMs,
|
|
18527
18955
|
showModelReasoning,
|
|
18528
18956
|
showAgentSwarmPanel,
|
|
18957
|
+
showSidebar,
|
|
18529
18958
|
showSageMemoryInject,
|
|
18530
18959
|
sageMemoryInjectThreshold,
|
|
18531
18960
|
nextStepsTool,
|
|
@@ -18825,6 +19254,11 @@ function SettingsPicker({
|
|
|
18825
19254
|
label: "WrongProxy URL",
|
|
18826
19255
|
value: wrongProxyUrlEditing ? `${wrongProxyUrlDraft ?? ""}\u258F` : wrongProxyUrl,
|
|
18827
19256
|
detail: wrongProxyUrlEditing ? "type a URL \xB7 Enter \u2713 \xB7 Esc \u2717 (http://host:port or https://host:port)" : "Where the local proxy daemon listens. Probed at <url>/api/health every 30s."
|
|
19257
|
+
},
|
|
19258
|
+
{
|
|
19259
|
+
label: "Right sidebar",
|
|
19260
|
+
value: boolVal(showSidebar ?? true),
|
|
19261
|
+
detail: "Show or hide the right sidebar in the TUI (chat history takes full width when off)"
|
|
18828
19262
|
}
|
|
18829
19263
|
];
|
|
18830
19264
|
const fieldRowIndex = [];
|
|
@@ -20164,6 +20598,7 @@ function AppViewPickers({
|
|
|
20164
20598
|
breakerAutoKillResetMs: state.settingsPicker.breakerAutoKillResetMs,
|
|
20165
20599
|
showModelReasoning: state.settingsPicker.showModelReasoning,
|
|
20166
20600
|
showAgentSwarmPanel: state.settingsPicker.showAgentSwarmPanel,
|
|
20601
|
+
showSidebar: state.settingsPicker.showSidebar,
|
|
20167
20602
|
showSageMemoryInject: state.settingsPicker.showSageMemoryInject,
|
|
20168
20603
|
sageMemoryInjectThreshold: state.settingsPicker.sageMemoryInjectThreshold,
|
|
20169
20604
|
nextStepsTool: state.settingsPicker.nextStepsTool,
|
|
@@ -32688,6 +33123,7 @@ function createInitialState(options) {
|
|
|
32688
33123
|
breakerAutoKillResetMs: 6e4,
|
|
32689
33124
|
showModelReasoning: true,
|
|
32690
33125
|
showAgentSwarmPanel: "bottom",
|
|
33126
|
+
showSidebar: true,
|
|
32691
33127
|
panelPositions: DEFAULT_PANEL_POSITIONS,
|
|
32692
33128
|
// Default on: compact one-line chip (see SageMemoryBlock). Full bordered
|
|
32693
33129
|
// panel remains available when operators expand inject visibility later.
|
|
@@ -32777,7 +33213,11 @@ function createInitialState(options) {
|
|
|
32777
33213
|
currentTool: void 0,
|
|
32778
33214
|
startedAt: Date.now(),
|
|
32779
33215
|
lastEventAt: Date.now(),
|
|
32780
|
-
iterating: false
|
|
33216
|
+
iterating: false,
|
|
33217
|
+
...options.initialContextSnapshot && options.initialContextSnapshot.tokens > 0 ? {
|
|
33218
|
+
ctxTokens: options.initialContextSnapshot.tokens,
|
|
33219
|
+
ctxMaxTokens: options.initialContextSnapshot.maxContext > 0 ? options.initialContextSnapshot.maxContext : void 0
|
|
33220
|
+
} : {}
|
|
32781
33221
|
},
|
|
32782
33222
|
fleetCost: 0,
|
|
32783
33223
|
fleetTokens: { input: 0, output: 0 },
|
|
@@ -35095,6 +35535,7 @@ function reduceSettingsPanel(state, action) {
|
|
|
35095
35535
|
breakerAutoKillResetMs: action.breakerAutoKillResetMs,
|
|
35096
35536
|
showModelReasoning: action.showModelReasoning,
|
|
35097
35537
|
showAgentSwarmPanel: action.showAgentSwarmPanel,
|
|
35538
|
+
showSidebar: action.showSidebar ?? true,
|
|
35098
35539
|
panelPositions: coercePanelPositionMap(action.panelPositions),
|
|
35099
35540
|
showSageMemoryInject: action.showSageMemoryInject,
|
|
35100
35541
|
sageMemoryInjectThreshold: action.sageMemoryInjectThreshold,
|
|
@@ -35626,6 +36067,11 @@ function reduceSettingsValues(state, action) {
|
|
|
35626
36067
|
...state,
|
|
35627
36068
|
settingsPicker: { ...sp, wrongProxyEnabled: !sp.wrongProxyEnabled, hint: void 0 }
|
|
35628
36069
|
};
|
|
36070
|
+
if (f === 61)
|
|
36071
|
+
return {
|
|
36072
|
+
...state,
|
|
36073
|
+
settingsPicker: { ...sp, showSidebar: !sp.showSidebar, hint: void 0 }
|
|
36074
|
+
};
|
|
35629
36075
|
if (f >= PANEL_POSITION_FIELD_START && f - PANEL_POSITION_FIELD_START < PANEL_IDS.length) {
|
|
35630
36076
|
const PANEL_POSITION_CYCLE = ["bottom", "sidebar"];
|
|
35631
36077
|
const panelId = PANEL_IDS[f - PANEL_POSITION_FIELD_START];
|
|
@@ -36392,6 +36838,14 @@ function useAppSessionState(options) {
|
|
|
36392
36838
|
() => buildRestoredCheckpoints(options.restoredEvents),
|
|
36393
36839
|
[options.restoredEvents]
|
|
36394
36840
|
);
|
|
36841
|
+
const initialContextSnapshot = useMemo11(() => {
|
|
36842
|
+
const lastReq = options.agent?.ctx?.lastRequestTokens;
|
|
36843
|
+
const reqTokens = options.agent?.ctx?.tokenCounter?.currentRequestTokens?.();
|
|
36844
|
+
const sumReqTokens = (typeof reqTokens === "number" ? reqTokens : 0) + (typeof reqTokens?.input === "number" ? reqTokens.input : 0) + (typeof reqTokens?.cacheRead === "number" ? reqTokens.cacheRead : 0) + (typeof reqTokens?.cacheWrite === "number" ? reqTokens.cacheWrite : 0);
|
|
36845
|
+
const tokens = sumReqTokens > 0 ? sumReqTokens : typeof lastReq === "number" ? lastReq : 0;
|
|
36846
|
+
const maxContext = options.agent?.ctx?.provider?.capabilities?.maxContext ?? 0;
|
|
36847
|
+
return tokens > 0 ? { tokens, maxContext } : void 0;
|
|
36848
|
+
}, [options.agent?.ctx]);
|
|
36395
36849
|
const [state, dispatch] = useReducer(
|
|
36396
36850
|
reducer,
|
|
36397
36851
|
createInitialState({
|
|
@@ -36408,6 +36862,7 @@ function useAppSessionState(options) {
|
|
|
36408
36862
|
autonomyAgents: options.autonomyAgents,
|
|
36409
36863
|
restoredEntries,
|
|
36410
36864
|
restoredCheckpoints,
|
|
36865
|
+
initialContextSnapshot,
|
|
36411
36866
|
enhanceEnabled: options.enhanceEnabled,
|
|
36412
36867
|
initialAgentsMonitorOpen: options.initialAgentsMonitorOpen,
|
|
36413
36868
|
initialFleetChat: options.initialFleetChat
|
|
@@ -42637,6 +43092,17 @@ function useProviderEventBridge({
|
|
|
42637
43092
|
}
|
|
42638
43093
|
});
|
|
42639
43094
|
});
|
|
43095
|
+
const offModelSwitched = events.on("provider.model_switched", (e) => {
|
|
43096
|
+
const from = e.from ? `${e.from.providerId}/${e.from.model}` : "";
|
|
43097
|
+
const to = `${e.to.providerId}/${e.to.model}`;
|
|
43098
|
+
dispatch({
|
|
43099
|
+
type: "addEntry",
|
|
43100
|
+
entry: {
|
|
43101
|
+
kind: "info",
|
|
43102
|
+
text: from ? `\u{1F504} Model changed: ${from} \u2192 ${to}` : `\u{1F504} Model set to ${to}`
|
|
43103
|
+
}
|
|
43104
|
+
});
|
|
43105
|
+
});
|
|
42640
43106
|
const offFallbackPending = events.on("provider.fallback_pending", (e) => {
|
|
42641
43107
|
const eventSessionId = e.sessionId;
|
|
42642
43108
|
if (typeof eventSessionId === "string" && eventSessionId !== agent.ctx.session.id) return;
|
|
@@ -42855,6 +43321,7 @@ function useProviderEventBridge({
|
|
|
42855
43321
|
offRetry();
|
|
42856
43322
|
offProvErr();
|
|
42857
43323
|
offFallback();
|
|
43324
|
+
offModelSwitched();
|
|
42858
43325
|
offFallbackPending();
|
|
42859
43326
|
offProvResp();
|
|
42860
43327
|
offConfirmNeeded();
|
|
@@ -43354,6 +43821,7 @@ function useSettingsAutoSave(state, saveSettings, dispatch) {
|
|
|
43354
43821
|
breakerAutoKillResetMs: sp.breakerAutoKillResetMs,
|
|
43355
43822
|
showModelReasoning: sp.showModelReasoning,
|
|
43356
43823
|
showAgentSwarmPanel: sp.showAgentSwarmPanel,
|
|
43824
|
+
showSidebar: sp.showSidebar,
|
|
43357
43825
|
panelPositions: sp.panelPositions,
|
|
43358
43826
|
showSageMemoryInject: sp.showSageMemoryInject,
|
|
43359
43827
|
sageMemoryInjectThreshold: sp.sageMemoryInjectThreshold,
|
|
@@ -43413,6 +43881,7 @@ function useSettingsAutoSave(state, saveSettings, dispatch) {
|
|
|
43413
43881
|
state.settingsPicker.breakerAutoKillResetMs,
|
|
43414
43882
|
state.settingsPicker.showModelReasoning,
|
|
43415
43883
|
state.settingsPicker.showAgentSwarmPanel,
|
|
43884
|
+
state.settingsPicker.showSidebar,
|
|
43416
43885
|
state.settingsPicker.panelPositions,
|
|
43417
43886
|
state.settingsPicker.showSageMemoryInject,
|
|
43418
43887
|
state.settingsPicker.sageMemoryInjectThreshold,
|
|
@@ -45625,6 +46094,51 @@ Available chords:
|
|
|
45625
46094
|
official: true
|
|
45626
46095
|
});
|
|
45627
46096
|
}, [slashRegistry, openStatuslinePicker, setHiddenItems]);
|
|
46097
|
+
useEffect68(() => {
|
|
46098
|
+
if (!getSettings || !saveSettings) return;
|
|
46099
|
+
const applyLayoutPreset = async (statuslineMode, showSidebar) => {
|
|
46100
|
+
const patch = { statuslineMode, showSidebar };
|
|
46101
|
+
dispatch({ type: "settingsValueSet", patch });
|
|
46102
|
+
const cur = getSettings();
|
|
46103
|
+
if (cur) {
|
|
46104
|
+
try {
|
|
46105
|
+
const err = await saveSettings({ ...cur, ...patch });
|
|
46106
|
+
if (err) dispatch({ type: "settingsHint", text: err });
|
|
46107
|
+
} catch {
|
|
46108
|
+
dispatch({ type: "settingsHint", text: "Could not save settings." });
|
|
46109
|
+
}
|
|
46110
|
+
}
|
|
46111
|
+
return showSidebar ? `\u2713 Full layout: statusline detailed, sidebar on.` : `\u2713 Lite layout: statusline minimum, sidebar off.`;
|
|
46112
|
+
};
|
|
46113
|
+
const liteCmd = {
|
|
46114
|
+
name: "lite",
|
|
46115
|
+
description: "Minimal chrome: statusline density \u2192 minimum and the right sidebar hidden.",
|
|
46116
|
+
help: "Switch to the lite layout.\n\n statusline density \u2192 minimum (single rail)\n right sidebar \u2192 hidden (full-width history)\n\nReverse with /full.",
|
|
46117
|
+
async run() {
|
|
46118
|
+
return { message: await applyLayoutPreset("minimum", false) };
|
|
46119
|
+
}
|
|
46120
|
+
};
|
|
46121
|
+
const fullCmd = {
|
|
46122
|
+
name: "full",
|
|
46123
|
+
description: "Full chrome: statusline density \u2192 detailed and the right sidebar visible.",
|
|
46124
|
+
help: "Switch to the full layout.\n\n statusline density \u2192 detailed (multi-line bar)\n right sidebar \u2192 visible\n\nReverse with /lite.",
|
|
46125
|
+
async run() {
|
|
46126
|
+
return { message: await applyLayoutPreset("detailed", true) };
|
|
46127
|
+
}
|
|
46128
|
+
};
|
|
46129
|
+
const teardownLite = registerSlashCommandLifecycle(slashRegistry, liteCmd, {
|
|
46130
|
+
owner: "tui",
|
|
46131
|
+
official: true
|
|
46132
|
+
});
|
|
46133
|
+
const teardownFull = registerSlashCommandLifecycle(slashRegistry, fullCmd, {
|
|
46134
|
+
owner: "tui",
|
|
46135
|
+
official: true
|
|
46136
|
+
});
|
|
46137
|
+
return () => {
|
|
46138
|
+
teardownLite();
|
|
46139
|
+
teardownFull();
|
|
46140
|
+
};
|
|
46141
|
+
}, [slashRegistry, getSettings, saveSettings, dispatch]);
|
|
45628
46142
|
useEffect68(() => {
|
|
45629
46143
|
const cmd = {
|
|
45630
46144
|
name: "mailbox",
|
|
@@ -65,6 +65,7 @@ export type SettingsPickerPatch = Partial<{
|
|
|
65
65
|
breakerAutoKillResetMs: number;
|
|
66
66
|
showModelReasoning: boolean;
|
|
67
67
|
showAgentSwarmPanel: AgentSwarmPanelMode;
|
|
68
|
+
showSidebar: boolean;
|
|
68
69
|
/**
|
|
69
70
|
* Per-panel position map (one entry per F-key panel id). Each value is
|
|
70
71
|
* 'bottom' (F-key behavior) or 'sidebar' (right-sidebar twin). Callers
|
package/dist/ui-contracts.d.ts
CHANGED
|
@@ -72,8 +72,8 @@ export type PanelPosition = 'bottom' | 'sidebar';
|
|
|
72
72
|
export declare const PANEL_IDS: readonly ["projectPicker", "fleet", "agents", "worktree", "plan", "todos", "queue", "processList", "goal", "sessions", "coordinator", "kanban", "connections"];
|
|
73
73
|
export type PanelId = (typeof PANEL_IDS)[number];
|
|
74
74
|
/** Total field count = legacy 46 + per-panel positions + the two
|
|
75
|
-
* WrongProxy / WrongTrace fields (master switch + URL)
|
|
76
|
-
* runtime from `PANEL_IDS.length` +
|
|
75
|
+
* WrongProxy / WrongTrace fields (master switch + URL) + showSidebar.
|
|
76
|
+
* Derived at runtime from `PANEL_IDS.length` + 3 to keep the surface in sync. */
|
|
77
77
|
export declare const TOTAL_SETTINGS_FIELD_COUNT: number;
|
|
78
78
|
/** Map of every tracked panel → its current placement. */
|
|
79
79
|
export type PanelPositionMap = Readonly<Record<PanelId, PanelPosition>>;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wrongstack/tui",
|
|
3
|
-
"version": "0.313.
|
|
3
|
+
"version": "0.313.1",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "WrongStack terminal UI: Ink-based interactive renderer with history, pickers, and slash menus.",
|
|
6
6
|
"repository": {
|
|
@@ -30,12 +30,12 @@
|
|
|
30
30
|
"react": "^19.2.8",
|
|
31
31
|
"string-width": "8.2.2",
|
|
32
32
|
"wrap-ansi": "^10.0.1",
|
|
33
|
-
"@wrongstack/
|
|
34
|
-
"@wrongstack/
|
|
35
|
-
"@wrongstack/
|
|
36
|
-
"@wrongstack/
|
|
37
|
-
"@wrongstack/
|
|
38
|
-
"@wrongstack/sdd": "0.313.
|
|
33
|
+
"@wrongstack/kanban": "0.313.1",
|
|
34
|
+
"@wrongstack/sage": "0.313.1",
|
|
35
|
+
"@wrongstack/core": "0.313.1",
|
|
36
|
+
"@wrongstack/runtime": "0.313.1",
|
|
37
|
+
"@wrongstack/tools": "0.313.1",
|
|
38
|
+
"@wrongstack/sdd": "0.313.1"
|
|
39
39
|
},
|
|
40
40
|
"devDependencies": {
|
|
41
41
|
"@testing-library/dom": "^10.4.1",
|