@k1e1n04/mav 0.1.7 → 0.1.19
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/package.json +2 -5
- package/dist/src/ui/app.d.ts +4 -2
- package/dist/src/ui/app.js +32 -46
- package/dist/src/ui/app.js.map +1 -1
- package/dist/src/ui/detail.d.ts +5 -4
- package/dist/src/ui/detail.js +16 -18
- package/dist/src/ui/detail.js.map +1 -1
- package/dist/src/ui/overview.d.ts +21 -8
- package/dist/src/ui/overview.js +272 -227
- package/dist/src/ui/overview.js.map +1 -1
- package/dist/src/ui/terminal.d.ts +28 -0
- package/dist/src/ui/terminal.js +74 -0
- package/dist/src/ui/terminal.js.map +1 -0
- package/package.json +2 -5
- package/src/ui/app.ts +36 -46
- package/src/ui/detail.ts +19 -21
- package/src/ui/overview.ts +295 -226
- package/src/ui/terminal.ts +104 -0
- package/src/types/neo-blessed.d.ts +0 -5
package/dist/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@k1e1n04/mav",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.19",
|
|
4
4
|
"description": "Multi-agent view — manage multiple AI CLI sessions in one terminal",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -35,9 +35,7 @@
|
|
|
35
35
|
"dependencies": {
|
|
36
36
|
"commander": "13.1.0",
|
|
37
37
|
"js-yaml": "4.1.0",
|
|
38
|
-
"
|
|
39
|
-
"node-pty": "1.0.0",
|
|
40
|
-
"term.js": "^0.0.7"
|
|
38
|
+
"node-pty": "1.0.0"
|
|
41
39
|
},
|
|
42
40
|
"pnpm": {
|
|
43
41
|
"onlyBuiltDependencies": [
|
|
@@ -46,7 +44,6 @@
|
|
|
46
44
|
]
|
|
47
45
|
},
|
|
48
46
|
"devDependencies": {
|
|
49
|
-
"@types/blessed": "^0.1.27",
|
|
50
47
|
"@types/js-yaml": "4.0.9",
|
|
51
48
|
"@types/node": "22.15.21",
|
|
52
49
|
"tsx": "4.19.3",
|
package/dist/src/ui/app.d.ts
CHANGED
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
import type { SessionManager } from '../session-manager.js';
|
|
2
|
+
import { TerminalUI } from './terminal.js';
|
|
2
3
|
export declare class App {
|
|
3
|
-
private screen;
|
|
4
4
|
private manager;
|
|
5
5
|
private statePath;
|
|
6
|
+
private terminal;
|
|
6
7
|
private overviewUI;
|
|
7
8
|
private detailUI;
|
|
8
9
|
private mode;
|
|
9
|
-
constructor(manager: SessionManager, statePath: string);
|
|
10
|
+
constructor(manager: SessionManager, statePath: string, terminal?: TerminalUI);
|
|
10
11
|
private bindGlobalKeys;
|
|
12
|
+
private handleOverviewKeypress;
|
|
11
13
|
private switchToDetail;
|
|
12
14
|
private switchToOverview;
|
|
13
15
|
private shutdown;
|
package/dist/src/ui/app.js
CHANGED
|
@@ -1,93 +1,79 @@
|
|
|
1
|
-
import blessed from 'neo-blessed';
|
|
2
1
|
import { saveState } from '../state.js';
|
|
3
|
-
import { OverviewUI } from './overview.js';
|
|
4
2
|
import { DetailUI } from './detail.js';
|
|
3
|
+
import { OverviewUI } from './overview.js';
|
|
4
|
+
import { TerminalUI } from './terminal.js';
|
|
5
5
|
export class App {
|
|
6
|
-
screen;
|
|
7
6
|
manager;
|
|
8
7
|
statePath;
|
|
8
|
+
terminal;
|
|
9
9
|
overviewUI;
|
|
10
10
|
detailUI;
|
|
11
11
|
mode = 'overview';
|
|
12
|
-
constructor(manager, statePath) {
|
|
12
|
+
constructor(manager, statePath, terminal = new TerminalUI()) {
|
|
13
13
|
this.manager = manager;
|
|
14
14
|
this.statePath = statePath;
|
|
15
|
-
this.
|
|
16
|
-
|
|
17
|
-
title: 'mav',
|
|
18
|
-
fullUnicode: true,
|
|
19
|
-
});
|
|
20
|
-
this.overviewUI = new OverviewUI(this.screen, manager, (session) => {
|
|
15
|
+
this.terminal = terminal;
|
|
16
|
+
this.overviewUI = new OverviewUI(terminal, manager, (session) => {
|
|
21
17
|
if (session) {
|
|
22
18
|
this.switchToDetail(session);
|
|
23
19
|
}
|
|
24
20
|
});
|
|
25
|
-
this.detailUI = new DetailUI(
|
|
21
|
+
this.detailUI = new DetailUI(terminal, () => {
|
|
26
22
|
if (this.mode === 'detail') {
|
|
27
23
|
this.switchToOverview();
|
|
28
24
|
}
|
|
29
25
|
});
|
|
30
|
-
const proto = Object.getPrototypeOf(this.screen);
|
|
31
|
-
const baseRender = proto.render ?? this.screen.render;
|
|
32
|
-
const protoRender = baseRender.bind(this.screen);
|
|
33
|
-
this.screen.render = () => {
|
|
34
|
-
if (this.mode === 'detail')
|
|
35
|
-
return;
|
|
36
|
-
protoRender();
|
|
37
|
-
};
|
|
38
26
|
this.bindGlobalKeys();
|
|
39
|
-
this.
|
|
40
|
-
const cols = this.
|
|
41
|
-
const rows = this.
|
|
27
|
+
this.terminal.onResize(() => {
|
|
28
|
+
const cols = this.terminal.cols;
|
|
29
|
+
const rows = this.terminal.rows;
|
|
42
30
|
if (this.mode === 'detail') {
|
|
43
31
|
this.detailUI.resize(cols, rows);
|
|
44
32
|
return;
|
|
45
33
|
}
|
|
46
34
|
this.overviewUI.resizeSelectedSession();
|
|
47
|
-
this.screen.render();
|
|
48
35
|
});
|
|
49
36
|
}
|
|
50
37
|
bindGlobalKeys() {
|
|
51
|
-
this.
|
|
52
|
-
if (this.mode === 'detail')
|
|
53
|
-
return;
|
|
54
|
-
this.shutdown();
|
|
55
|
-
});
|
|
56
|
-
this.screen.key('C-c', () => {
|
|
38
|
+
this.terminal.onKeypress((str, key) => {
|
|
57
39
|
if (this.mode === 'overview') {
|
|
58
|
-
this.
|
|
40
|
+
this.handleOverviewKeypress(str, key);
|
|
59
41
|
}
|
|
60
42
|
});
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
43
|
+
}
|
|
44
|
+
handleOverviewKeypress(str, key) {
|
|
45
|
+
if (key.ctrl && key.name === 'c') {
|
|
46
|
+
this.shutdown();
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
if (str === 'q') {
|
|
50
|
+
this.shutdown();
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
if (!this.overviewUI.isPromptOpen() && (key.name === 'right' || key.name === 'enter' || key.name === 'return')) {
|
|
66
54
|
const session = this.manager.selectedSession;
|
|
67
55
|
if (!session)
|
|
68
56
|
return;
|
|
69
|
-
this.switchToDetail();
|
|
70
|
-
|
|
57
|
+
this.switchToDetail(session);
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
this.overviewUI.handleKeypress(str, key);
|
|
71
61
|
}
|
|
72
62
|
switchToDetail(session = this.manager.selectedSession) {
|
|
73
63
|
if (!session)
|
|
74
64
|
return;
|
|
75
65
|
this.mode = 'detail';
|
|
76
66
|
this.overviewUI.hide();
|
|
77
|
-
this.
|
|
78
|
-
this.screen.program.disableMouse();
|
|
79
|
-
this.screen.realloc();
|
|
67
|
+
this.terminal.exitAlternateScreen();
|
|
80
68
|
this.detailUI.attach(session);
|
|
81
|
-
this.detailUI.resize(this.
|
|
69
|
+
this.detailUI.resize(this.terminal.cols, this.terminal.rows);
|
|
82
70
|
this.detailUI.show();
|
|
83
71
|
}
|
|
84
72
|
switchToOverview() {
|
|
85
73
|
this.mode = 'overview';
|
|
86
74
|
this.detailUI.detach();
|
|
87
75
|
this.detailUI.hide();
|
|
88
|
-
this.
|
|
89
|
-
this.screen.program.enableMouse();
|
|
90
|
-
this.screen.realloc();
|
|
76
|
+
this.terminal.enterAlternateScreen();
|
|
91
77
|
this.overviewUI.show();
|
|
92
78
|
}
|
|
93
79
|
shutdown() {
|
|
@@ -98,13 +84,13 @@ export class App {
|
|
|
98
84
|
// 終了シーケンスは継続する
|
|
99
85
|
}
|
|
100
86
|
this.manager.killAll();
|
|
101
|
-
this.
|
|
87
|
+
this.terminal.destroy();
|
|
102
88
|
process.exit(0);
|
|
103
89
|
}
|
|
104
90
|
start() {
|
|
91
|
+
this.terminal.enterAlternateScreen();
|
|
105
92
|
this.overviewUI.show();
|
|
106
93
|
this.overviewUI.resizeSelectedSession();
|
|
107
|
-
this.screen.render();
|
|
108
94
|
}
|
|
109
95
|
}
|
|
110
96
|
//# sourceMappingURL=app.js.map
|
package/dist/src/ui/app.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.js","sourceRoot":"","sources":["../../../src/ui/app.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../../../src/ui/app.ts"],"names":[],"mappings":"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"}
|
package/dist/src/ui/detail.d.ts
CHANGED
|
@@ -1,19 +1,20 @@
|
|
|
1
|
-
import type { Widgets } from 'neo-blessed';
|
|
2
1
|
import type { AgentSession } from '../agent.js';
|
|
2
|
+
import type { TerminalUI } from './terminal.js';
|
|
3
3
|
export declare class DetailUI {
|
|
4
4
|
private static readonly KEYBOARD_FLAGS_RESPONSE_PATTERN;
|
|
5
5
|
private static readonly PENDING_INPUT_FLUSH_DELAY_MS;
|
|
6
|
+
private static readonly EXIT_HINT;
|
|
6
7
|
private static readonly EXIT_SEQUENCES;
|
|
7
8
|
private static readonly EXIT_SEQUENCE_PATTERNS;
|
|
8
|
-
private
|
|
9
|
+
private terminal;
|
|
9
10
|
private onExitDetail;
|
|
10
11
|
private currentSession;
|
|
11
12
|
private dataListener;
|
|
12
|
-
private
|
|
13
|
+
private rawInputDisposer;
|
|
13
14
|
private pendingInput;
|
|
14
15
|
private pendingInputTimer;
|
|
15
16
|
private keyboardEnhancementFlags;
|
|
16
|
-
constructor(
|
|
17
|
+
constructor(terminal: TerminalUI, onExitDetail: () => void);
|
|
17
18
|
private isExitShortcut;
|
|
18
19
|
private isExitShortcutPrefix;
|
|
19
20
|
private debugLogInput;
|
package/dist/src/ui/detail.js
CHANGED
|
@@ -2,6 +2,7 @@ import { appendFileSync } from 'node:fs';
|
|
|
2
2
|
export class DetailUI {
|
|
3
3
|
static KEYBOARD_FLAGS_RESPONSE_PATTERN = /\x1b\[\?(\d+)u/g;
|
|
4
4
|
static PENDING_INPUT_FLUSH_DELAY_MS = 25;
|
|
5
|
+
static EXIT_HINT = '\x1b[7m mav detail \x1b[27m Press Ctrl+] to return to Overview\r\n\r\n';
|
|
5
6
|
static EXIT_SEQUENCES = [
|
|
6
7
|
'\x1d',
|
|
7
8
|
'\x1b[93;5u',
|
|
@@ -11,16 +12,16 @@ export class DetailUI {
|
|
|
11
12
|
/^\x1b\[93(?:::\d+)?;5(?::\d+)?u$/,
|
|
12
13
|
/^\x1b\[99;5u$/,
|
|
13
14
|
];
|
|
14
|
-
|
|
15
|
+
terminal;
|
|
15
16
|
onExitDetail;
|
|
16
17
|
currentSession = null;
|
|
17
18
|
dataListener = null;
|
|
18
|
-
|
|
19
|
+
rawInputDisposer = null;
|
|
19
20
|
pendingInput = '';
|
|
20
21
|
pendingInputTimer = null;
|
|
21
22
|
keyboardEnhancementFlags = null;
|
|
22
|
-
constructor(
|
|
23
|
-
this.
|
|
23
|
+
constructor(terminal, onExitDetail) {
|
|
24
|
+
this.terminal = terminal;
|
|
24
25
|
this.onExitDetail = onExitDetail;
|
|
25
26
|
}
|
|
26
27
|
isExitShortcut(input) {
|
|
@@ -64,22 +65,22 @@ export class DetailUI {
|
|
|
64
65
|
this.detach();
|
|
65
66
|
this.currentSession = session;
|
|
66
67
|
this.pendingInput = '';
|
|
67
|
-
const { input, output } = this.screen.program;
|
|
68
68
|
const safeLog = session.logBuffer
|
|
69
69
|
.join('')
|
|
70
70
|
.replace(/\x1b\[\?104[79][hl]|\x1b\[\?47[hl]/g, '')
|
|
71
71
|
.replace(/\x1b\[(?:>?\d*c|\?u|>q|\?\d+\$p)/g, '');
|
|
72
72
|
if (this.keyboardEnhancementFlags) {
|
|
73
|
-
|
|
73
|
+
this.terminal.write(`\x1b[=${this.keyboardEnhancementFlags}u`);
|
|
74
74
|
}
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
75
|
+
this.terminal.write('\x1b[?1l');
|
|
76
|
+
this.terminal.clearScreen();
|
|
77
|
+
this.terminal.write(DetailUI.EXIT_HINT);
|
|
78
|
+
this.terminal.write(safeLog);
|
|
78
79
|
this.dataListener = (data) => {
|
|
79
|
-
|
|
80
|
+
this.terminal.write(data);
|
|
80
81
|
};
|
|
81
82
|
session.on('data', this.dataListener);
|
|
82
|
-
this.
|
|
83
|
+
this.rawInputDisposer = this.terminal.onData((chunk) => {
|
|
83
84
|
const str = Buffer.isBuffer(chunk)
|
|
84
85
|
? chunk.toString('utf8')
|
|
85
86
|
: typeof chunk === 'string'
|
|
@@ -109,20 +110,17 @@ export class DetailUI {
|
|
|
109
110
|
return;
|
|
110
111
|
}
|
|
111
112
|
this.flushPendingInput();
|
|
112
|
-
};
|
|
113
|
-
input.on('data', this.rawInputListener);
|
|
113
|
+
});
|
|
114
114
|
}
|
|
115
115
|
detach() {
|
|
116
116
|
if (this.currentSession && this.dataListener) {
|
|
117
117
|
this.currentSession.off('data', this.dataListener);
|
|
118
118
|
this.dataListener = null;
|
|
119
119
|
}
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
this.rawInputListener = null;
|
|
123
|
-
}
|
|
120
|
+
this.rawInputDisposer?.();
|
|
121
|
+
this.rawInputDisposer = null;
|
|
124
122
|
if (this.keyboardEnhancementFlags) {
|
|
125
|
-
this.
|
|
123
|
+
this.terminal.write('\x1b[=0u');
|
|
126
124
|
}
|
|
127
125
|
this.clearPendingInputTimer();
|
|
128
126
|
this.pendingInput = '';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detail.js","sourceRoot":"","sources":["../../../src/ui/detail.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAIxC,MAAM,OAAO,QAAQ;IACX,MAAM,CAAU,+BAA+B,GAAG,iBAAiB,CAAA;IACnE,MAAM,CAAU,4BAA4B,GAAG,EAAE,CAAA;
|
|
1
|
+
{"version":3,"file":"detail.js","sourceRoot":"","sources":["../../../src/ui/detail.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAIxC,MAAM,OAAO,QAAQ;IACX,MAAM,CAAU,+BAA+B,GAAG,iBAAiB,CAAA;IACnE,MAAM,CAAU,4BAA4B,GAAG,EAAE,CAAA;IACjD,MAAM,CAAU,SAAS,GAC/B,yEAAyE,CAAA;IAEnE,MAAM,CAAU,cAAc,GAAG;QACvC,MAAM;QACN,YAAY;QACZ,eAAe;KACP,CAAA;IACF,MAAM,CAAU,sBAAsB,GAAG;QAC/C,kCAAkC;QAClC,eAAe;KACP,CAAA;IAEF,QAAQ,CAAY;IACpB,YAAY,CAAY;IACxB,cAAc,GAAwB,IAAI,CAAA;IAC1C,YAAY,GAAoC,IAAI,CAAA;IACpD,gBAAgB,GAAwB,IAAI,CAAA;IAC5C,YAAY,GAAG,EAAE,CAAA;IACjB,iBAAiB,GAAyC,IAAI,CAAA;IAC9D,wBAAwB,GAAkB,IAAI,CAAA;IAEtD,YAAY,QAAoB,EAAE,YAAwB;QACxD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;QACxB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAA;IAClC,CAAC;IAEO,cAAc,CAAC,KAAa;QAClC,OAAO,CACL,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAC9B,KAAiD,CAClD;YACD,QAAQ,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CACvE,CAAA;IACH,CAAC;IAEO,oBAAoB,CAAC,KAAa;QACxC,OAAO,CACL,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YACtE,gBAAgB,CAAC,UAAU,CAAC,KAAK,CAAC;YAClC,kBAAkB,CAAC,UAAU,CAAC,KAAK,CAAC;YACpC,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,CAC/B,CAAA;IACH,CAAC;IAEO,aAAa,CAAC,GAAW;QAC/B,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAA;QAC5C,IAAI,CAAC,IAAI;YAAE,OAAM;QAEjB,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;QACpD,cAAc,CAAC,IAAI,EAAE,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAA;IACjE,CAAC;IAEO,gCAAgC,CAAC,GAAW;QAClD,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,+BAA+B,CAAC,EAAE,CAAC;YAC3E,IAAI,CAAC,wBAAwB,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAA;QAClD,CAAC;IACH,CAAC;IAEO,sBAAsB;QAC5B,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC5B,OAAM;QACR,CAAC;QACD,YAAY,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;QACpC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAA;IAC/B,CAAC;IAEO,iBAAiB;QACvB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,OAAM;QACR,CAAC;QACD,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;QAC7C,IAAI,CAAC,YAAY,GAAG,EAAE,CAAA;QACtB,IAAI,CAAC,sBAAsB,EAAE,CAAA;IAC/B,CAAC;IAED,MAAM,CAAC,OAAqB;QAC1B,IAAI,CAAC,MAAM,EAAE,CAAA;QACb,IAAI,CAAC,cAAc,GAAG,OAAO,CAAA;QAC7B,IAAI,CAAC,YAAY,GAAG,EAAE,CAAA;QAEtB,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS;aAC9B,IAAI,CAAC,EAAE,CAAC;aACR,OAAO,CAAC,qCAAqC,EAAE,EAAE,CAAC;aAClD,OAAO,CAAC,mCAAmC,EAAE,EAAE,CAAC,CAAA;QACnD,IAAI,IAAI,CAAC,wBAAwB,EAAE,CAAC;YAClC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,wBAAwB,GAAG,CAAC,CAAA;QAChE,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;QAC/B,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAA;QAC3B,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;QACvC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QAE5B,IAAI,CAAC,YAAY,GAAG,CAAC,IAAY,EAAE,EAAE;YACnC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAC3B,CAAC,CAAA;QACD,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,CAAA;QAErC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAsB,EAAE,EAAE;YACtE,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAChC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;gBACxB,CAAC,CAAC,OAAO,KAAK,KAAK,QAAQ;oBACzB,CAAC,CAAC,KAAK;oBACP,CAAC,CAAC,EAAE,CAAA;YACR,IAAI,CAAC,GAAG;gBAAE,OAAM;YAChB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAA;YACvB,IAAI,CAAC,gCAAgC,CAAC,GAAG,CAAC,CAAA;YAC1C,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC7B,IAAI,CAAC,YAAY,EAAE,CAAA;gBACnB,OAAM;YACR,CAAC;YACD,IAAI,CAAC,YAAY,IAAI,GAAG,CAAA;YAExB,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;gBAC3C,IAAI,CAAC,sBAAsB,EAAE,CAAA;gBAC7B,IAAI,CAAC,YAAY,GAAG,EAAE,CAAA;gBACtB,IAAI,CAAC,YAAY,EAAE,CAAA;gBACnB,OAAM;YACR,CAAC;YAED,IAAI,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;gBACjD,IAAI,CAAC,sBAAsB,EAAE,CAAA;gBAC7B,IAAI,CAAC,iBAAiB,GAAG,UAAU,CAAC,GAAG,EAAE;oBACvC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAA;oBAC7B,IAAI,CAAC,iBAAiB,EAAE,CAAA;gBAC1B,CAAC,EAAE,QAAQ,CAAC,4BAA4B,CAAC,CAAA;gBACzC,OAAM;YACR,CAAC;YAED,IAAI,CAAC,iBAAiB,EAAE,CAAA;QAC1B,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,MAAM;QACJ,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YAC7C,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,CAAA;YAClD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAA;QAC1B,CAAC;QACD,IAAI,CAAC,gBAAgB,EAAE,EAAE,CAAA;QACzB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAA;QAC5B,IAAI,IAAI,CAAC,wBAAwB,EAAE,CAAC;YAClC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;QACjC,CAAC;QACD,IAAI,CAAC,sBAAsB,EAAE,CAAA;QAC7B,IAAI,CAAC,YAAY,GAAG,EAAE,CAAA;QACtB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAA;IAC5B,CAAC;IAED,IAAI,KAAU,CAAC;IACf,IAAI,KAAU,CAAC;IAEf,MAAM,CAAC,IAAY,EAAE,IAAY;QAC/B,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IACzC,CAAC"}
|
|
@@ -1,17 +1,20 @@
|
|
|
1
|
-
import type { Widgets } from 'neo-blessed';
|
|
2
1
|
import type { SessionManager } from '../session-manager.js';
|
|
2
|
+
import type { KeyInfo, TerminalUI } from './terminal.js';
|
|
3
3
|
export declare class OverviewUI {
|
|
4
|
+
private static readonly ANSI;
|
|
4
5
|
private static readonly STATUS_GROUPS;
|
|
5
|
-
private static readonly
|
|
6
|
-
private
|
|
6
|
+
private static readonly AGENT_TYPES;
|
|
7
|
+
private terminal;
|
|
7
8
|
private manager;
|
|
8
9
|
private onSessionCreated?;
|
|
9
|
-
private
|
|
10
|
-
private
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
private promptState;
|
|
11
|
+
private displaySessionIds;
|
|
12
|
+
private visible;
|
|
13
|
+
constructor(terminal: TerminalUI, manager: SessionManager, onSessionCreated?: (session: SessionManager['selectedSession']) => void);
|
|
14
|
+
handleKeypress(str: string, key: KeyInfo): void;
|
|
15
|
+
private handleAgentPromptKeypress;
|
|
16
|
+
private handleCwdPromptKeypress;
|
|
13
17
|
private showAddPrompt;
|
|
14
|
-
private showCwdPrompt;
|
|
15
18
|
private spawnAgent;
|
|
16
19
|
private showError;
|
|
17
20
|
private syncList;
|
|
@@ -21,6 +24,16 @@ export declare class OverviewUI {
|
|
|
21
24
|
private moveSelection;
|
|
22
25
|
private getStatusLabel;
|
|
23
26
|
private getStatusRank;
|
|
27
|
+
private countByStatus;
|
|
28
|
+
private stripAnsi;
|
|
29
|
+
private padRight;
|
|
30
|
+
private color;
|
|
31
|
+
private getStatusColor;
|
|
32
|
+
private makeRule;
|
|
33
|
+
private formatSummary;
|
|
34
|
+
private buildMainLines;
|
|
35
|
+
private buildPromptLines;
|
|
36
|
+
private render;
|
|
24
37
|
show(): void;
|
|
25
38
|
isPromptOpen(): boolean;
|
|
26
39
|
resizeSelectedSession(): void;
|