@k1e1n04/mav 0.1.18 → 0.1.20

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@k1e1n04/mav",
3
- "version": "0.1.18",
3
+ "version": "0.1.20",
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
- "neo-blessed": "0.2.0",
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",
@@ -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;
@@ -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.screen = blessed.screen({
16
- smartCSR: true,
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(this.screen, () => {
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.screen.on('resize', () => {
40
- const cols = this.screen.width;
41
- const rows = this.screen.height;
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.screen.key('q', () => {
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.shutdown();
40
+ this.handleOverviewKeypress(str, key);
59
41
  }
60
42
  });
61
- this.screen.key(['right', 'enter'], () => {
62
- if (this.mode !== 'overview')
63
- return;
64
- if (this.overviewUI.isPromptOpen())
65
- return;
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.screen.program.normalBuffer();
78
- this.screen.program.disableMouse();
79
- this.screen.realloc();
67
+ this.terminal.exitAlternateScreen();
80
68
  this.detailUI.attach(session);
81
- this.detailUI.resize(this.screen.width, this.screen.height);
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.screen.program.alternateBuffer();
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.screen.destroy();
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
@@ -1 +1 @@
1
- {"version":3,"file":"app.js","sourceRoot":"","sources":["../../../src/ui/app.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../../../src/ui/app.ts"],"names":[],"mappings":"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"}
@@ -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 screen;
9
+ private terminal;
9
10
  private onExitDetail;
10
11
  private currentSession;
11
12
  private dataListener;
12
- private rawInputListener;
13
+ private rawInputDisposer;
13
14
  private pendingInput;
14
15
  private pendingInputTimer;
15
16
  private keyboardEnhancementFlags;
16
- constructor(screen: Widgets.Screen, onExitDetail: () => void);
17
+ constructor(terminal: TerminalUI, onExitDetail: () => void);
17
18
  private isExitShortcut;
18
19
  private isExitShortcutPrefix;
19
20
  private debugLogInput;
@@ -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
- screen;
15
+ terminal;
15
16
  onExitDetail;
16
17
  currentSession = null;
17
18
  dataListener = null;
18
- rawInputListener = null;
19
+ rawInputDisposer = null;
19
20
  pendingInput = '';
20
21
  pendingInputTimer = null;
21
22
  keyboardEnhancementFlags = null;
22
- constructor(screen, onExitDetail) {
23
- this.screen = screen;
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
- output.write(`\x1b[=${this.keyboardEnhancementFlags}u`);
73
+ this.terminal.write(`\x1b[=${this.keyboardEnhancementFlags}u`);
74
74
  }
75
- output.write('\x1b[?1l');
76
- output.write('\x1b[H\x1b[2J');
77
- output.write(safeLog);
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
- output.write(data);
80
+ this.terminal.write(data);
80
81
  };
81
82
  session.on('data', this.dataListener);
82
- this.rawInputListener = (chunk) => {
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
- if (this.rawInputListener) {
121
- this.screen.program.input.removeListener('data', this.rawInputListener);
122
- this.rawInputListener = null;
123
- }
120
+ this.rawInputDisposer?.();
121
+ this.rawInputDisposer = null;
124
122
  if (this.keyboardEnhancementFlags) {
125
- this.screen.program.output.write('\x1b[=0u');
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":"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"}
1
+ {"version":3,"file":"detail.js","sourceRoot":"","sources":["../../../src/ui/detail.ts"],"names":[],"mappings":"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"}
@@ -1,17 +1,21 @@
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 HORIZONTAL_MARGIN;
5
+ private static readonly ANSI;
4
6
  private static readonly STATUS_GROUPS;
5
- private static readonly STATUS_COLORS;
6
- private screen;
7
+ private static readonly AGENT_TYPES;
8
+ private terminal;
7
9
  private manager;
8
10
  private onSessionCreated?;
9
- private listBox;
10
- private promptOpen;
11
- constructor(screen: Widgets.Screen, manager: SessionManager, onSessionCreated?: (session: SessionManager['selectedSession']) => void);
12
- private bindKeys;
11
+ private promptState;
12
+ private displaySessionIds;
13
+ private visible;
14
+ constructor(terminal: TerminalUI, manager: SessionManager, onSessionCreated?: (session: SessionManager['selectedSession']) => void);
15
+ handleKeypress(str: string, key: KeyInfo): void;
16
+ private handleAgentPromptKeypress;
17
+ private handleCwdPromptKeypress;
13
18
  private showAddPrompt;
14
- private showCwdPrompt;
15
19
  private spawnAgent;
16
20
  private showError;
17
21
  private syncList;
@@ -21,6 +25,25 @@ export declare class OverviewUI {
21
25
  private moveSelection;
22
26
  private getStatusLabel;
23
27
  private getStatusRank;
28
+ private countByStatus;
29
+ private stripAnsi;
30
+ private visibleLength;
31
+ private getRenderWidth;
32
+ private getContentWidth;
33
+ private insetLine;
34
+ private finalizeLines;
35
+ private padRight;
36
+ private fitPlain;
37
+ private fitVisible;
38
+ private color;
39
+ private getStatusColor;
40
+ private makeRule;
41
+ private wrapPlainText;
42
+ private wrapVisibleParts;
43
+ private formatSummaryLines;
44
+ private buildMainLines;
45
+ private buildPromptLines;
46
+ private render;
24
47
  show(): void;
25
48
  isPromptOpen(): boolean;
26
49
  resizeSelectedSession(): void;