@visorcraft/idlehands 0.9.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/LICENSE +21 -0
- package/README.md +30 -0
- package/dist/agent.js +2604 -0
- package/dist/agent.js.map +1 -0
- package/dist/anton/controller.js +341 -0
- package/dist/anton/controller.js.map +1 -0
- package/dist/anton/lock.js +110 -0
- package/dist/anton/lock.js.map +1 -0
- package/dist/anton/parser.js +303 -0
- package/dist/anton/parser.js.map +1 -0
- package/dist/anton/prompt.js +203 -0
- package/dist/anton/prompt.js.map +1 -0
- package/dist/anton/reporter.js +119 -0
- package/dist/anton/reporter.js.map +1 -0
- package/dist/anton/session.js +51 -0
- package/dist/anton/session.js.map +1 -0
- package/dist/anton/types.js +7 -0
- package/dist/anton/types.js.map +1 -0
- package/dist/anton/verifier.js +263 -0
- package/dist/anton/verifier.js.map +1 -0
- package/dist/bench/compare.js +239 -0
- package/dist/bench/compare.js.map +1 -0
- package/dist/bench/debug_hooks.js +17 -0
- package/dist/bench/debug_hooks.js.map +1 -0
- package/dist/bench/json_extract.js +22 -0
- package/dist/bench/json_extract.js.map +1 -0
- package/dist/bench/openclaw.js +86 -0
- package/dist/bench/openclaw.js.map +1 -0
- package/dist/bench/report.js +116 -0
- package/dist/bench/report.js.map +1 -0
- package/dist/bench/runner.js +312 -0
- package/dist/bench/runner.js.map +1 -0
- package/dist/bench/types.js +2 -0
- package/dist/bench/types.js.map +1 -0
- package/dist/bot/commands.js +444 -0
- package/dist/bot/commands.js.map +1 -0
- package/dist/bot/confirm-discord.js +133 -0
- package/dist/bot/confirm-discord.js.map +1 -0
- package/dist/bot/confirm-telegram.js +290 -0
- package/dist/bot/confirm-telegram.js.map +1 -0
- package/dist/bot/discord.js +826 -0
- package/dist/bot/discord.js.map +1 -0
- package/dist/bot/format.js +210 -0
- package/dist/bot/format.js.map +1 -0
- package/dist/bot/session-manager.js +270 -0
- package/dist/bot/session-manager.js.map +1 -0
- package/dist/bot/telegram.js +678 -0
- package/dist/bot/telegram.js.map +1 -0
- package/dist/cli/agent-turn.js +45 -0
- package/dist/cli/agent-turn.js.map +1 -0
- package/dist/cli/args.js +236 -0
- package/dist/cli/args.js.map +1 -0
- package/dist/cli/bot.js +252 -0
- package/dist/cli/bot.js.map +1 -0
- package/dist/cli/build-repl-context.js +365 -0
- package/dist/cli/build-repl-context.js.map +1 -0
- package/dist/cli/command-registry.js +20 -0
- package/dist/cli/command-registry.js.map +1 -0
- package/dist/cli/commands/anton.js +271 -0
- package/dist/cli/commands/anton.js.map +1 -0
- package/dist/cli/commands/editing.js +328 -0
- package/dist/cli/commands/editing.js.map +1 -0
- package/dist/cli/commands/model.js +274 -0
- package/dist/cli/commands/model.js.map +1 -0
- package/dist/cli/commands/project.js +255 -0
- package/dist/cli/commands/project.js.map +1 -0
- package/dist/cli/commands/runtime.js +63 -0
- package/dist/cli/commands/runtime.js.map +1 -0
- package/dist/cli/commands/session.js +281 -0
- package/dist/cli/commands/session.js.map +1 -0
- package/dist/cli/commands/tools.js +126 -0
- package/dist/cli/commands/tools.js.map +1 -0
- package/dist/cli/commands/trifecta.js +221 -0
- package/dist/cli/commands/trifecta.js.map +1 -0
- package/dist/cli/commands/tui.js +17 -0
- package/dist/cli/commands/tui.js.map +1 -0
- package/dist/cli/init.js +222 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/cli/input.js +360 -0
- package/dist/cli/input.js.map +1 -0
- package/dist/cli/oneshot.js +254 -0
- package/dist/cli/oneshot.js.map +1 -0
- package/dist/cli/repl-context.js +2 -0
- package/dist/cli/repl-context.js.map +1 -0
- package/dist/cli/runtime-cmds.js +811 -0
- package/dist/cli/runtime-cmds.js.map +1 -0
- package/dist/cli/service.js +145 -0
- package/dist/cli/service.js.map +1 -0
- package/dist/cli/session-state.js +130 -0
- package/dist/cli/session-state.js.map +1 -0
- package/dist/cli/setup.js +815 -0
- package/dist/cli/setup.js.map +1 -0
- package/dist/cli/shell.js +79 -0
- package/dist/cli/shell.js.map +1 -0
- package/dist/cli/status.js +392 -0
- package/dist/cli/status.js.map +1 -0
- package/dist/cli/watch.js +33 -0
- package/dist/cli/watch.js.map +1 -0
- package/dist/client.js +676 -0
- package/dist/client.js.map +1 -0
- package/dist/commands.js +194 -0
- package/dist/commands.js.map +1 -0
- package/dist/config.js +507 -0
- package/dist/config.js.map +1 -0
- package/dist/confirm/auto.js +13 -0
- package/dist/confirm/auto.js.map +1 -0
- package/dist/confirm/headless.js +41 -0
- package/dist/confirm/headless.js.map +1 -0
- package/dist/confirm/terminal.js +90 -0
- package/dist/confirm/terminal.js.map +1 -0
- package/dist/context.js +49 -0
- package/dist/context.js.map +1 -0
- package/dist/git.js +136 -0
- package/dist/git.js.map +1 -0
- package/dist/harnesses.js +171 -0
- package/dist/harnesses.js.map +1 -0
- package/dist/history.js +139 -0
- package/dist/history.js.map +1 -0
- package/dist/index.js +700 -0
- package/dist/index.js.map +1 -0
- package/dist/indexer.js +374 -0
- package/dist/indexer.js.map +1 -0
- package/dist/jsonrpc.js +76 -0
- package/dist/jsonrpc.js.map +1 -0
- package/dist/lens.js +525 -0
- package/dist/lens.js.map +1 -0
- package/dist/lsp.js +605 -0
- package/dist/lsp.js.map +1 -0
- package/dist/markdown.js +275 -0
- package/dist/markdown.js.map +1 -0
- package/dist/mcp.js +554 -0
- package/dist/mcp.js.map +1 -0
- package/dist/recovery.js +178 -0
- package/dist/recovery.js.map +1 -0
- package/dist/replay.js +132 -0
- package/dist/replay.js.map +1 -0
- package/dist/replay_cli.js +24 -0
- package/dist/replay_cli.js.map +1 -0
- package/dist/runtime/executor.js +418 -0
- package/dist/runtime/executor.js.map +1 -0
- package/dist/runtime/planner.js +197 -0
- package/dist/runtime/planner.js.map +1 -0
- package/dist/runtime/store.js +289 -0
- package/dist/runtime/store.js.map +1 -0
- package/dist/runtime/types.js +2 -0
- package/dist/runtime/types.js.map +1 -0
- package/dist/safety.js +446 -0
- package/dist/safety.js.map +1 -0
- package/dist/spinner.js +224 -0
- package/dist/spinner.js.map +1 -0
- package/dist/sys/context.js +124 -0
- package/dist/sys/context.js.map +1 -0
- package/dist/sys/snapshot.sh +97 -0
- package/dist/term.js +61 -0
- package/dist/term.js.map +1 -0
- package/dist/themes.js +135 -0
- package/dist/themes.js.map +1 -0
- package/dist/tools.js +1114 -0
- package/dist/tools.js.map +1 -0
- package/dist/tui/branch-picker.js +65 -0
- package/dist/tui/branch-picker.js.map +1 -0
- package/dist/tui/command-handler.js +108 -0
- package/dist/tui/command-handler.js.map +1 -0
- package/dist/tui/confirm.js +90 -0
- package/dist/tui/confirm.js.map +1 -0
- package/dist/tui/controller.js +463 -0
- package/dist/tui/controller.js.map +1 -0
- package/dist/tui/event-bridge.js +44 -0
- package/dist/tui/event-bridge.js.map +1 -0
- package/dist/tui/events.js +2 -0
- package/dist/tui/events.js.map +1 -0
- package/dist/tui/keymap.js +144 -0
- package/dist/tui/keymap.js.map +1 -0
- package/dist/tui/layout.js +11 -0
- package/dist/tui/layout.js.map +1 -0
- package/dist/tui/render.js +186 -0
- package/dist/tui/render.js.map +1 -0
- package/dist/tui/screen.js +48 -0
- package/dist/tui/screen.js.map +1 -0
- package/dist/tui/state.js +167 -0
- package/dist/tui/state.js.map +1 -0
- package/dist/tui/theme.js +70 -0
- package/dist/tui/theme.js.map +1 -0
- package/dist/tui/types.js +2 -0
- package/dist/tui/types.js.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/upgrade.js +412 -0
- package/dist/upgrade.js.map +1 -0
- package/dist/utils.js +87 -0
- package/dist/utils.js.map +1 -0
- package/dist/vault.js +520 -0
- package/dist/vault.js.map +1 -0
- package/dist/vim.js +160 -0
- package/dist/vim.js.map +1 -0
- package/package.json +67 -0
- package/src/sys/snapshot.sh +97 -0
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
export function resolveAction(key) {
|
|
2
|
+
switch (key) {
|
|
3
|
+
case "C-c": return "cancel";
|
|
4
|
+
case "C-d": return "quit";
|
|
5
|
+
case "C-r": return "history_search";
|
|
6
|
+
case "tab": return "tab_complete";
|
|
7
|
+
case "S-tab": return "focus_prev";
|
|
8
|
+
case "pageup": return "scroll_up";
|
|
9
|
+
case "pagedown": return "scroll_down";
|
|
10
|
+
case "up": return "history_prev";
|
|
11
|
+
case "down": return "history_next";
|
|
12
|
+
case "left": return "cursor_left";
|
|
13
|
+
case "right": return "cursor_right";
|
|
14
|
+
case "enter": return "send";
|
|
15
|
+
case "C-j": return "insert_newline";
|
|
16
|
+
case "M-enter": return "insert_newline";
|
|
17
|
+
case "backspace": return "backspace";
|
|
18
|
+
case "delete": return "delete_forward";
|
|
19
|
+
case "home": return "cursor_home";
|
|
20
|
+
case "end": return "cursor_end";
|
|
21
|
+
default: return null;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
export function decodeRawInput(chunk) {
|
|
25
|
+
const keys = [];
|
|
26
|
+
for (let i = 0; i < chunk.length; i++) {
|
|
27
|
+
const ch = chunk[i];
|
|
28
|
+
if (ch === "\u001b") {
|
|
29
|
+
const c1 = chunk[i + 1];
|
|
30
|
+
const c2 = chunk[i + 2];
|
|
31
|
+
if (c1 === "[" && c2 === "A") {
|
|
32
|
+
keys.push("up");
|
|
33
|
+
i += 2;
|
|
34
|
+
continue;
|
|
35
|
+
}
|
|
36
|
+
if (c1 === "[" && c2 === "B") {
|
|
37
|
+
keys.push("down");
|
|
38
|
+
i += 2;
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
if (c1 === "[" && c2 === "C") {
|
|
42
|
+
keys.push("right");
|
|
43
|
+
i += 2;
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
if (c1 === "[" && c2 === "D") {
|
|
47
|
+
keys.push("left");
|
|
48
|
+
i += 2;
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
51
|
+
if (c1 === "O" && c2 === "A") {
|
|
52
|
+
keys.push("up");
|
|
53
|
+
i += 2;
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
if (c1 === "O" && c2 === "B") {
|
|
57
|
+
keys.push("down");
|
|
58
|
+
i += 2;
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
if (c1 === "O" && c2 === "C") {
|
|
62
|
+
keys.push("right");
|
|
63
|
+
i += 2;
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
if (c1 === "O" && c2 === "D") {
|
|
67
|
+
keys.push("left");
|
|
68
|
+
i += 2;
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
// CSI sequences with ~ terminator: \x1b[N~ (PageUp=5~, PageDown=6~, Home=1~, End=4~, Delete=3~)
|
|
72
|
+
if (c1 === "[" && c2 !== undefined) {
|
|
73
|
+
const c3 = chunk[i + 3];
|
|
74
|
+
if (c3 === "~") {
|
|
75
|
+
if (c2 === "5") {
|
|
76
|
+
keys.push("pageup");
|
|
77
|
+
i += 3;
|
|
78
|
+
continue;
|
|
79
|
+
}
|
|
80
|
+
if (c2 === "6") {
|
|
81
|
+
keys.push("pagedown");
|
|
82
|
+
i += 3;
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
if (c2 === "1") {
|
|
86
|
+
keys.push("home");
|
|
87
|
+
i += 3;
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
if (c2 === "4") {
|
|
91
|
+
keys.push("end");
|
|
92
|
+
i += 3;
|
|
93
|
+
continue;
|
|
94
|
+
}
|
|
95
|
+
if (c2 === "3") {
|
|
96
|
+
keys.push("delete");
|
|
97
|
+
i += 3;
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
// Unknown CSI ~-terminated sequence — skip
|
|
101
|
+
i += 3;
|
|
102
|
+
continue;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
if (c1 === "\r") {
|
|
106
|
+
keys.push("M-enter");
|
|
107
|
+
i += 1;
|
|
108
|
+
continue;
|
|
109
|
+
}
|
|
110
|
+
continue;
|
|
111
|
+
}
|
|
112
|
+
if (ch === "\u0003") {
|
|
113
|
+
keys.push("C-c");
|
|
114
|
+
continue;
|
|
115
|
+
}
|
|
116
|
+
if (ch === "\u0004") {
|
|
117
|
+
keys.push("C-d");
|
|
118
|
+
continue;
|
|
119
|
+
}
|
|
120
|
+
if (ch === "\u0012") {
|
|
121
|
+
keys.push("C-r");
|
|
122
|
+
continue;
|
|
123
|
+
}
|
|
124
|
+
if (ch === "\u0009") {
|
|
125
|
+
keys.push("tab");
|
|
126
|
+
continue;
|
|
127
|
+
}
|
|
128
|
+
if (ch === "\u007f") {
|
|
129
|
+
keys.push("backspace");
|
|
130
|
+
continue;
|
|
131
|
+
}
|
|
132
|
+
if (ch === "\r") {
|
|
133
|
+
keys.push("enter");
|
|
134
|
+
continue;
|
|
135
|
+
}
|
|
136
|
+
if (ch === "\n") {
|
|
137
|
+
keys.push("C-j");
|
|
138
|
+
continue;
|
|
139
|
+
}
|
|
140
|
+
keys.push(`text:${ch}`);
|
|
141
|
+
}
|
|
142
|
+
return keys;
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=keymap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keymap.js","sourceRoot":"","sources":["../../src/tui/keymap.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export function calculateLayout(rows, cols = 120) {
|
|
2
|
+
const safeRows = Math.max(1, rows);
|
|
3
|
+
const safeCols = Math.max(1, cols);
|
|
4
|
+
const statusRows = 2;
|
|
5
|
+
const alertRows = 1;
|
|
6
|
+
const toolsRows = 2;
|
|
7
|
+
const inputRows = 2;
|
|
8
|
+
const transcriptRows = Math.max(3, safeRows - statusRows - alertRows - toolsRows - inputRows);
|
|
9
|
+
return { cols: safeCols, rows: safeRows, statusRows, alertRows, toolsRows, inputRows, transcriptRows };
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=layout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layout.js","sourceRoot":"","sources":["../../src/tui/layout.ts"],"names":[],"mappings":"AAUA,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,IAAI,GAAG,GAAG;IACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACnC,MAAM,UAAU,GAAG,CAAC,CAAC;IACrB,MAAM,SAAS,GAAG,CAAC,CAAC;IACpB,MAAM,SAAS,GAAG,CAAC,CAAC;IACpB,MAAM,SAAS,GAAG,CAAC,CAAC;IACpB,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC,CAAC;IAC9F,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC;AACzG,CAAC"}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
import { clearScreen } from './screen.js';
|
|
2
|
+
import { calculateLayout } from './layout.js';
|
|
3
|
+
import { resolveTuiTheme } from './theme.js';
|
|
4
|
+
/** Cached theme colors — set once via setRenderTheme(). */
|
|
5
|
+
let C = resolveTuiTheme('default');
|
|
6
|
+
/** Call once at TUI startup to apply the active theme to all rendering. */
|
|
7
|
+
export function setRenderTheme(name) {
|
|
8
|
+
C = resolveTuiTheme(name);
|
|
9
|
+
}
|
|
10
|
+
function truncate(s, n) {
|
|
11
|
+
if (n <= 0)
|
|
12
|
+
return '';
|
|
13
|
+
return s.length <= n ? s : `${s.slice(0, Math.max(0, n - 1))}…`;
|
|
14
|
+
}
|
|
15
|
+
function secs(ms) {
|
|
16
|
+
return `${(ms / 1000).toFixed(1)}s`;
|
|
17
|
+
}
|
|
18
|
+
function formatToolUsage(e) {
|
|
19
|
+
const durationMs = typeof e.durationMs === 'number' ? e.durationMs : Math.max(0, Date.now() - e.ts);
|
|
20
|
+
const icon = e.phase === 'error' ? `${C.red}✗${C.reset}` : e.phase === 'end' ? `${C.green}✓${C.reset}` : `${C.yellow}⠋${C.reset}`;
|
|
21
|
+
return `${icon} ${e.name} (${secs(durationMs)})`;
|
|
22
|
+
}
|
|
23
|
+
function rolePrefix(role) {
|
|
24
|
+
switch (role) {
|
|
25
|
+
case 'user':
|
|
26
|
+
return `${C.cyan}you:${C.reset}`;
|
|
27
|
+
case 'assistant':
|
|
28
|
+
case 'assistant_streaming':
|
|
29
|
+
return `${C.green}ai:${C.reset}`;
|
|
30
|
+
case 'tool':
|
|
31
|
+
return `${C.yellow}tool:${C.reset}`;
|
|
32
|
+
case 'error':
|
|
33
|
+
return `${C.red}err:${C.reset}`;
|
|
34
|
+
default:
|
|
35
|
+
return `${C.dim}sys:${C.reset}`;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
function placeRight(line, indicator, cols) {
|
|
39
|
+
if (!indicator || cols <= 0)
|
|
40
|
+
return truncate(line, cols);
|
|
41
|
+
if (indicator.length >= cols)
|
|
42
|
+
return truncate(indicator, cols);
|
|
43
|
+
const left = truncate(line, cols - indicator.length);
|
|
44
|
+
return `${left.padEnd(cols - indicator.length, ' ')}${indicator}`;
|
|
45
|
+
}
|
|
46
|
+
function buildBranchOverlay(state, width, height) {
|
|
47
|
+
const picker = state.branchPicker;
|
|
48
|
+
if (!picker)
|
|
49
|
+
return [];
|
|
50
|
+
const inner = Math.max(10, width - 2);
|
|
51
|
+
const lines = [];
|
|
52
|
+
const title = picker.action === 'browse' ? 'Branches' : picker.action === 'checkout' ? 'Checkout Branch' : 'Merge Branch';
|
|
53
|
+
lines.push(`${C.bold}${title}${C.reset} (↑/↓ select, Enter confirm, Esc cancel)`);
|
|
54
|
+
lines.push('');
|
|
55
|
+
if (!picker.branches.length) {
|
|
56
|
+
lines.push(`${C.dim}No branches saved.${C.reset}`);
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
for (let i = 0; i < picker.branches.length; i++) {
|
|
60
|
+
const b = picker.branches[i];
|
|
61
|
+
const sel = i === picker.selectedIndex;
|
|
62
|
+
const when = new Date(b.ts).toLocaleString();
|
|
63
|
+
const prefix = sel ? `${C.cyan}❯${C.reset}` : ' ';
|
|
64
|
+
const name = sel ? `${C.bold}${b.name}${C.reset}` : b.name;
|
|
65
|
+
lines.push(`${prefix} ${name} ${C.dim}(${b.messageCount} msgs, ${when})${C.reset}`);
|
|
66
|
+
}
|
|
67
|
+
lines.push('');
|
|
68
|
+
const selected = picker.branches[picker.selectedIndex];
|
|
69
|
+
if (selected?.preview) {
|
|
70
|
+
lines.push(`${C.dim}Preview:${C.reset} ${selected.preview}`);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
const contentRows = Math.max(3, height - 2);
|
|
74
|
+
const body = lines.slice(0, contentRows).map((l) => truncate(l, inner - 2));
|
|
75
|
+
while (body.length < contentRows)
|
|
76
|
+
body.push('');
|
|
77
|
+
const top = `┌${'─'.repeat(inner)}┐`;
|
|
78
|
+
const mid = body.map((line) => `│ ${line.padEnd(inner - 2)} │`);
|
|
79
|
+
const bot = `└${'─'.repeat(inner)}┘`;
|
|
80
|
+
return [`${C.bold}${top}${C.reset}`, ...mid, `${C.bold}${bot}${C.reset}`];
|
|
81
|
+
}
|
|
82
|
+
function buildOverlay(state, width, height) {
|
|
83
|
+
const pending = state.confirmPending;
|
|
84
|
+
if (!pending)
|
|
85
|
+
return [];
|
|
86
|
+
const inner = Math.max(10, width - 2);
|
|
87
|
+
const lines = [];
|
|
88
|
+
const prompt = pending.diff ? '[Y]es [N]o [D]iff' : '[Y]es [N]o';
|
|
89
|
+
lines.push(`tool: ${pending.tool}`);
|
|
90
|
+
lines.push(`summary: ${pending.summary}`);
|
|
91
|
+
lines.push(prompt);
|
|
92
|
+
if (pending.showDiff && pending.diff) {
|
|
93
|
+
lines.push('');
|
|
94
|
+
lines.push(...pending.diff.split(/\r?\n/));
|
|
95
|
+
}
|
|
96
|
+
const contentRows = Math.max(3, height - 2);
|
|
97
|
+
const body = lines.slice(0, contentRows).map((l) => truncate(l, inner - 2));
|
|
98
|
+
while (body.length < contentRows)
|
|
99
|
+
body.push('');
|
|
100
|
+
const top = `┌${'─'.repeat(inner)}┐`;
|
|
101
|
+
const mid = body.map((line) => `│ ${line.padEnd(inner - 2)} │`);
|
|
102
|
+
const bot = `└${'─'.repeat(inner)}┘`;
|
|
103
|
+
return [`${C.bold}${top}${C.reset}`, ...mid, `${C.bold}${bot}${C.reset}`];
|
|
104
|
+
}
|
|
105
|
+
export function renderTui(state) {
|
|
106
|
+
const layout = calculateLayout(process.stdout.rows ?? 30, process.stdout.columns ?? 120);
|
|
107
|
+
const cols = layout.cols;
|
|
108
|
+
clearScreen();
|
|
109
|
+
const runtime = state.activeRuntime;
|
|
110
|
+
const s1 = [
|
|
111
|
+
`${C.bold}Idle Hands TUI${C.reset}`,
|
|
112
|
+
`${C.dim}model=${C.reset}${runtime?.modelId ?? '-'}`,
|
|
113
|
+
`${C.dim}host=${C.reset}${runtime?.hostId ?? '-'}`,
|
|
114
|
+
`${C.dim}streaming=${C.reset}${state.isStreaming ? 'yes' : 'no'}`,
|
|
115
|
+
].join(' | ');
|
|
116
|
+
process.stdout.write(truncate(s1, cols) + '\n');
|
|
117
|
+
const health = runtime?.healthy ? `${C.green}●${C.reset}` : `${C.red}○${C.reset}`;
|
|
118
|
+
const s2 = [
|
|
119
|
+
`${C.dim}backend=${C.reset}${runtime?.backendId ?? '-'}`,
|
|
120
|
+
`${C.dim}endpoint=${C.reset}${runtime?.endpoint ?? '-'}`,
|
|
121
|
+
`${C.dim}health=${C.reset}${health}`,
|
|
122
|
+
].join(' | ');
|
|
123
|
+
process.stdout.write(truncate(s2, cols) + '\n');
|
|
124
|
+
const transcriptLines = [];
|
|
125
|
+
for (const item of state.transcript) {
|
|
126
|
+
const chunks = String(item.text ?? '').split('\n');
|
|
127
|
+
transcriptLines.push(`${rolePrefix(item.role)} ${chunks[0] ?? ''}`);
|
|
128
|
+
for (const c of chunks.slice(1))
|
|
129
|
+
transcriptLines.push(` ${c}`);
|
|
130
|
+
}
|
|
131
|
+
const maxScrollBack = Math.max(0, transcriptLines.length - layout.transcriptRows);
|
|
132
|
+
const scrollBack = Math.max(0, Math.min(state.scroll.transcript, maxScrollBack));
|
|
133
|
+
const end = transcriptLines.length - scrollBack;
|
|
134
|
+
const start = Math.max(0, end - layout.transcriptRows);
|
|
135
|
+
const visible = transcriptLines.slice(start, end);
|
|
136
|
+
while (visible.length < layout.transcriptRows)
|
|
137
|
+
visible.push('');
|
|
138
|
+
const olderAbove = start;
|
|
139
|
+
const newerBelow = scrollBack;
|
|
140
|
+
const alert = state.alerts[state.alerts.length - 1];
|
|
141
|
+
const scrollStatus = newerBelow > 0 ? `↓${newerBelow} more` : olderAbove > 0 ? `↑${olderAbove} more` : '';
|
|
142
|
+
if (alert) {
|
|
143
|
+
const color = alert.level === 'error' ? C.red : alert.level === 'warn' ? C.yellow : C.dim;
|
|
144
|
+
const alertText = `${color}[${alert.level}]${C.reset} ${alert.text}`;
|
|
145
|
+
process.stdout.write(placeRight(alertText, scrollStatus, cols) + '\n');
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
process.stdout.write(placeRight(`${C.dim}[info]${C.reset} ready`, scrollStatus, cols) + '\n');
|
|
149
|
+
}
|
|
150
|
+
if (olderAbove > 0 && visible.length > 0) {
|
|
151
|
+
visible[0] = placeRight(visible[0] ?? '', `${C.dim}↑${olderAbove}${C.reset}`, cols);
|
|
152
|
+
}
|
|
153
|
+
if (newerBelow > 0 && visible.length > 0) {
|
|
154
|
+
visible[visible.length - 1] = placeRight(visible[visible.length - 1] ?? '', `${C.dim}↓${newerBelow}${C.reset}`, cols);
|
|
155
|
+
}
|
|
156
|
+
// Overlay rendering (confirm or branch picker — mutually exclusive)
|
|
157
|
+
const activeOverlay = state.confirmPending
|
|
158
|
+
? buildOverlay(state, Math.min(Math.max(36, Math.floor(cols * 0.75)), cols - 2), Math.min(layout.transcriptRows, state.confirmPending.showDiff ? Math.max(8, Math.floor(layout.transcriptRows * 0.9)) : 6))
|
|
159
|
+
: state.branchPicker
|
|
160
|
+
? buildBranchOverlay(state, Math.min(Math.max(36, Math.floor(cols * 0.75)), cols - 2), Math.min(layout.transcriptRows, Math.max(8, Math.floor(layout.transcriptRows * 0.9))))
|
|
161
|
+
: null;
|
|
162
|
+
if (activeOverlay) {
|
|
163
|
+
const boxW = Math.min(Math.max(36, Math.floor(cols * 0.75)), cols - 2);
|
|
164
|
+
const top = Math.max(0, Math.floor((layout.transcriptRows - activeOverlay.length) / 2));
|
|
165
|
+
const left = Math.max(0, Math.floor((cols - boxW) / 2));
|
|
166
|
+
for (let i = 0; i < activeOverlay.length; i += 1) {
|
|
167
|
+
const idx = top + i;
|
|
168
|
+
if (idx < 0 || idx >= visible.length)
|
|
169
|
+
continue;
|
|
170
|
+
const base = visible[idx].padEnd(cols, '');
|
|
171
|
+
const line = activeOverlay[i] ?? '';
|
|
172
|
+
visible[idx] = `${base.slice(0, left)}${line}${base.slice(left + line.length)}`;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
for (const l of visible)
|
|
176
|
+
process.stdout.write(truncate(l, cols) + '\n');
|
|
177
|
+
const recent = state.toolEvents.slice(-3);
|
|
178
|
+
const t1 = recent.length ? recent.map(formatToolUsage).join(' | ') : `${C.dim}idle${C.reset}`;
|
|
179
|
+
process.stdout.write(truncate(t1, cols) + '\n');
|
|
180
|
+
const done = [...state.toolEvents].reverse().find((e) => e.phase === 'end' || e.phase === 'error');
|
|
181
|
+
const summary = done ? `${done.name}: ${done.summary ?? done.detail ?? 'completed'}` : 'no completed tools yet';
|
|
182
|
+
process.stdout.write(truncate(`${C.dim}last:${C.reset} ${summary}`, cols) + '\n');
|
|
183
|
+
process.stdout.write('─'.repeat(Math.max(10, Math.min(cols, 80))) + '\n');
|
|
184
|
+
process.stdout.write(truncate(`> ${state.inputBuffer}`, cols) + '\n');
|
|
185
|
+
}
|
|
186
|
+
//# sourceMappingURL=render.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/tui/render.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
export const HIDE_CURSOR = '\x1b[?25l';
|
|
2
|
+
export const SHOW_CURSOR = '\x1b[?25h';
|
|
3
|
+
export const ENTER_ALT_SCREEN = '\x1b[?1049h';
|
|
4
|
+
export const LEAVE_ALT_SCREEN = '\x1b[?1049l';
|
|
5
|
+
export const CLEAR_SCREEN = '\x1b[2J\x1b[H';
|
|
6
|
+
export const ERASE_LINE = '\x1b[2K';
|
|
7
|
+
export function moveTo(row, col) {
|
|
8
|
+
return `\x1b[${row};${col}H`;
|
|
9
|
+
}
|
|
10
|
+
export function moveUp(n) {
|
|
11
|
+
return `\x1b[${n}A`;
|
|
12
|
+
}
|
|
13
|
+
export function probeTermCapabilities() {
|
|
14
|
+
const term = process.env.TERM ?? '';
|
|
15
|
+
const colorTerm = process.env.COLORTERM ?? '';
|
|
16
|
+
return {
|
|
17
|
+
altScreen: !term.startsWith('dumb'),
|
|
18
|
+
colors256: term.includes('256color') || colorTerm !== '',
|
|
19
|
+
trueColor: colorTerm === 'truecolor' || colorTerm === '24bit',
|
|
20
|
+
unicode: !term.startsWith('dumb') && (process.env.LANG?.includes('UTF') ?? false),
|
|
21
|
+
rows: process.stdout.rows ?? 24,
|
|
22
|
+
cols: process.stdout.columns ?? 80,
|
|
23
|
+
term,
|
|
24
|
+
isTmux: !!process.env.TMUX,
|
|
25
|
+
isScreen: term.startsWith('screen'),
|
|
26
|
+
isSsh: !!process.env.SSH_TTY || !!process.env.SSH_CLIENT,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
export function validateTerminal() {
|
|
30
|
+
const caps = probeTermCapabilities();
|
|
31
|
+
if (caps.term === 'dumb')
|
|
32
|
+
return { ok: false, reason: 'dumb terminal — no cursor control' };
|
|
33
|
+
if (caps.rows < 10)
|
|
34
|
+
return { ok: false, reason: `terminal too short (${caps.rows} rows, need 10+)` };
|
|
35
|
+
if (caps.cols < 40)
|
|
36
|
+
return { ok: false, reason: `terminal too narrow (${caps.cols} cols, need 40+)` };
|
|
37
|
+
return { ok: true };
|
|
38
|
+
}
|
|
39
|
+
export function enterFullScreen() {
|
|
40
|
+
process.stdout.write(ENTER_ALT_SCREEN + CLEAR_SCREEN + HIDE_CURSOR);
|
|
41
|
+
}
|
|
42
|
+
export function leaveFullScreen() {
|
|
43
|
+
process.stdout.write(SHOW_CURSOR + LEAVE_ALT_SCREEN);
|
|
44
|
+
}
|
|
45
|
+
export function clearScreen() {
|
|
46
|
+
process.stdout.write(CLEAR_SCREEN);
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=screen.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"screen.js","sourceRoot":"","sources":["../../src/tui/screen.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAAG,WAAW,CAAC;AACvC,MAAM,CAAC,MAAM,WAAW,GAAG,WAAW,CAAC;AACvC,MAAM,CAAC,MAAM,gBAAgB,GAAG,aAAa,CAAC;AAC9C,MAAM,CAAC,MAAM,gBAAgB,GAAG,aAAa,CAAC;AAC9C,MAAM,CAAC,MAAM,YAAY,GAAG,eAAe,CAAC;AAC5C,MAAM,CAAC,MAAM,UAAU,GAAG,SAAS,CAAC;AAepC,MAAM,UAAU,MAAM,CAAC,GAAW,EAAE,GAAW;IAC7C,OAAO,QAAQ,GAAG,IAAI,GAAG,GAAG,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,CAAS;IAC9B,OAAO,QAAQ,CAAC,GAAG,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,qBAAqB;IACnC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;IACpC,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC;IAC9C,OAAO;QACL,SAAS,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;QACnC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,SAAS,KAAK,EAAE;QACxD,SAAS,EAAE,SAAS,KAAK,WAAW,IAAI,SAAS,KAAK,OAAO;QAC7D,OAAO,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC;QACjF,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE;QAC/B,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE;QAClC,IAAI;QACJ,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI;QAC1B,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QACnC,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU;KACzD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,MAAM,IAAI,GAAG,qBAAqB,EAAE,CAAC;IACrC,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,mCAAmC,EAAE,CAAC;IAC5F,IAAI,IAAI,CAAC,IAAI,GAAG,EAAE;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,uBAAuB,IAAI,CAAC,IAAI,kBAAkB,EAAE,CAAC;IACrG,IAAI,IAAI,CAAC,IAAI,GAAG,EAAE;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,wBAAwB,IAAI,CAAC,IAAI,kBAAkB,EAAE,CAAC;IACtG,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,GAAG,YAAY,GAAG,WAAW,CAAC,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,GAAG,gBAAgB,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;AACrC,CAAC"}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
function clampCursor(buffer, cursor) {
|
|
2
|
+
return Math.max(0, Math.min(buffer.length, cursor));
|
|
3
|
+
}
|
|
4
|
+
export function createInitialTuiState() {
|
|
5
|
+
return {
|
|
6
|
+
mode: "chat",
|
|
7
|
+
focus: "input",
|
|
8
|
+
inputBuffer: "",
|
|
9
|
+
inputCursor: 0,
|
|
10
|
+
inputHistory: [],
|
|
11
|
+
historyIndex: null,
|
|
12
|
+
transcript: [],
|
|
13
|
+
toolEvents: [],
|
|
14
|
+
alerts: [],
|
|
15
|
+
activeRuntime: null,
|
|
16
|
+
isStreaming: false,
|
|
17
|
+
streamTargetId: undefined,
|
|
18
|
+
confirmPending: undefined,
|
|
19
|
+
scroll: { transcript: 0, input: 0, status: 0, tools: 0, alerts: 0 },
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
export function reduceTuiState(state, ev) {
|
|
23
|
+
switch (ev.type) {
|
|
24
|
+
case "USER_INPUT_CHANGE": {
|
|
25
|
+
const next = ev.text;
|
|
26
|
+
return { ...state, inputBuffer: next, inputCursor: next.length, historyIndex: null };
|
|
27
|
+
}
|
|
28
|
+
case "USER_INPUT_INSERT": {
|
|
29
|
+
const before = state.inputBuffer.slice(0, state.inputCursor);
|
|
30
|
+
const after = state.inputBuffer.slice(state.inputCursor);
|
|
31
|
+
const inputBuffer = `${before}${ev.text}${after}`;
|
|
32
|
+
return {
|
|
33
|
+
...state,
|
|
34
|
+
inputBuffer,
|
|
35
|
+
inputCursor: state.inputCursor + ev.text.length,
|
|
36
|
+
historyIndex: null,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
case "USER_INPUT_BACKSPACE": {
|
|
40
|
+
if (state.inputCursor <= 0)
|
|
41
|
+
return state;
|
|
42
|
+
const before = state.inputBuffer.slice(0, state.inputCursor - 1);
|
|
43
|
+
const after = state.inputBuffer.slice(state.inputCursor);
|
|
44
|
+
return {
|
|
45
|
+
...state,
|
|
46
|
+
inputBuffer: `${before}${after}`,
|
|
47
|
+
inputCursor: state.inputCursor - 1,
|
|
48
|
+
historyIndex: null,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
case "USER_INPUT_DELETE_FORWARD": {
|
|
52
|
+
if (state.inputCursor >= state.inputBuffer.length)
|
|
53
|
+
return state;
|
|
54
|
+
const before = state.inputBuffer.slice(0, state.inputCursor);
|
|
55
|
+
const after = state.inputBuffer.slice(state.inputCursor + 1);
|
|
56
|
+
return { ...state, inputBuffer: `${before}${after}`, historyIndex: null };
|
|
57
|
+
}
|
|
58
|
+
case "USER_INPUT_CURSOR_MOVE": {
|
|
59
|
+
return {
|
|
60
|
+
...state,
|
|
61
|
+
inputCursor: clampCursor(state.inputBuffer, state.inputCursor + ev.delta),
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
case "USER_INPUT_CURSOR_HOME":
|
|
65
|
+
return { ...state, inputCursor: 0 };
|
|
66
|
+
case "USER_INPUT_CURSOR_END":
|
|
67
|
+
return { ...state, inputCursor: state.inputBuffer.length };
|
|
68
|
+
case "USER_INPUT_HISTORY_PREV": {
|
|
69
|
+
if (!state.inputHistory.length)
|
|
70
|
+
return state;
|
|
71
|
+
const idx = state.historyIndex === null
|
|
72
|
+
? state.inputHistory.length - 1
|
|
73
|
+
: Math.max(0, state.historyIndex - 1);
|
|
74
|
+
const text = state.inputHistory[idx] ?? "";
|
|
75
|
+
return { ...state, historyIndex: idx, inputBuffer: text, inputCursor: text.length };
|
|
76
|
+
}
|
|
77
|
+
case "USER_INPUT_HISTORY_NEXT": {
|
|
78
|
+
if (!state.inputHistory.length || state.historyIndex === null)
|
|
79
|
+
return state;
|
|
80
|
+
const idx = state.historyIndex + 1;
|
|
81
|
+
if (idx >= state.inputHistory.length) {
|
|
82
|
+
return { ...state, historyIndex: null, inputBuffer: "", inputCursor: 0 };
|
|
83
|
+
}
|
|
84
|
+
const text = state.inputHistory[idx] ?? "";
|
|
85
|
+
return { ...state, historyIndex: idx, inputBuffer: text, inputCursor: text.length };
|
|
86
|
+
}
|
|
87
|
+
case "USER_INPUT_SUBMIT": {
|
|
88
|
+
const item = { id: `u_${Date.now()}`, role: "user", text: ev.text, ts: Date.now() };
|
|
89
|
+
const inputHistory = ev.text.length ? [...state.inputHistory, ev.text] : state.inputHistory;
|
|
90
|
+
return {
|
|
91
|
+
...state,
|
|
92
|
+
inputBuffer: "",
|
|
93
|
+
inputCursor: 0,
|
|
94
|
+
historyIndex: null,
|
|
95
|
+
inputHistory,
|
|
96
|
+
transcript: [...state.transcript, item],
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
case "AGENT_STREAM_START": {
|
|
100
|
+
const item = { id: ev.id, role: "assistant_streaming", text: "", ts: Date.now() };
|
|
101
|
+
return { ...state, isStreaming: true, streamTargetId: ev.id, transcript: [...state.transcript, item] };
|
|
102
|
+
}
|
|
103
|
+
case "AGENT_STREAM_TOKEN": {
|
|
104
|
+
const transcript = state.transcript.map((t) => (t.id === ev.id ? { ...t, text: t.text + ev.token } : t));
|
|
105
|
+
return { ...state, transcript };
|
|
106
|
+
}
|
|
107
|
+
case "AGENT_STREAM_DONE": {
|
|
108
|
+
const transcript = state.transcript.map((t) => (t.id === ev.id ? { ...t, role: "assistant" } : t));
|
|
109
|
+
return { ...state, isStreaming: false, streamTargetId: undefined, transcript };
|
|
110
|
+
}
|
|
111
|
+
case "TOOL_START":
|
|
112
|
+
return { ...state, toolEvents: [...state.toolEvents, { id: ev.id, name: ev.name, phase: "start", ts: Date.now(), detail: ev.detail, summary: ev.summary }] };
|
|
113
|
+
case "TOOL_END":
|
|
114
|
+
return { ...state, toolEvents: [...state.toolEvents, { id: ev.id, name: ev.name, phase: "end", ts: Date.now(), detail: ev.detail, summary: ev.summary, durationMs: ev.durationMs }] };
|
|
115
|
+
case "TOOL_ERROR":
|
|
116
|
+
return { ...state, toolEvents: [...state.toolEvents, { id: ev.id, name: ev.name, phase: "error", ts: Date.now(), detail: ev.detail, summary: ev.summary, durationMs: ev.durationMs }] };
|
|
117
|
+
case "RUNTIME_STATE_UPDATE":
|
|
118
|
+
return { ...state, activeRuntime: ev.runtime };
|
|
119
|
+
case "ALERT_PUSH":
|
|
120
|
+
return { ...state, alerts: [...state.alerts, { id: ev.id, level: ev.level, text: ev.text, ts: Date.now() }] };
|
|
121
|
+
case "ALERT_CLEAR":
|
|
122
|
+
return { ...state, alerts: ev.id ? state.alerts.filter((a) => a.id !== ev.id) : [] };
|
|
123
|
+
case "CONFIRM_SHOW":
|
|
124
|
+
return {
|
|
125
|
+
...state,
|
|
126
|
+
confirmPending: {
|
|
127
|
+
tool: ev.tool,
|
|
128
|
+
summary: ev.summary,
|
|
129
|
+
args: ev.args,
|
|
130
|
+
diff: ev.diff,
|
|
131
|
+
showDiff: false,
|
|
132
|
+
},
|
|
133
|
+
};
|
|
134
|
+
case "CONFIRM_TOGGLE_DIFF":
|
|
135
|
+
if (!state.confirmPending)
|
|
136
|
+
return state;
|
|
137
|
+
return {
|
|
138
|
+
...state,
|
|
139
|
+
confirmPending: {
|
|
140
|
+
...state.confirmPending,
|
|
141
|
+
showDiff: !state.confirmPending.showDiff,
|
|
142
|
+
},
|
|
143
|
+
};
|
|
144
|
+
case "CONFIRM_DISMISS":
|
|
145
|
+
return { ...state, confirmPending: undefined };
|
|
146
|
+
case "FOCUS_SET":
|
|
147
|
+
return { ...state, focus: ev.panel };
|
|
148
|
+
case "SCROLL":
|
|
149
|
+
return { ...state, scroll: { ...state.scroll, [ev.panel]: state.scroll[ev.panel] + ev.delta } };
|
|
150
|
+
case "BRANCH_PICKER_OPEN":
|
|
151
|
+
return { ...state, branchPicker: { branches: ev.branches, selectedIndex: 0, action: ev.action } };
|
|
152
|
+
case "BRANCH_PICKER_MOVE": {
|
|
153
|
+
if (!state.branchPicker)
|
|
154
|
+
return state;
|
|
155
|
+
const len = state.branchPicker.branches.length;
|
|
156
|
+
if (len === 0)
|
|
157
|
+
return state;
|
|
158
|
+
const next = Math.max(0, Math.min(len - 1, state.branchPicker.selectedIndex + ev.delta));
|
|
159
|
+
return { ...state, branchPicker: { ...state.branchPicker, selectedIndex: next } };
|
|
160
|
+
}
|
|
161
|
+
case "BRANCH_PICKER_CLOSE":
|
|
162
|
+
return { ...state, branchPicker: undefined };
|
|
163
|
+
default:
|
|
164
|
+
return state;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
//# sourceMappingURL=state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/tui/state.ts"],"names":[],"mappings":"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"}
|