@k1e1n04/mav 0.1.21 → 0.1.22

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.21",
3
+ "version": "0.1.22",
4
4
  "description": "Multi-agent view — manage multiple AI CLI sessions in one terminal",
5
5
  "type": "module",
6
6
  "bin": {
@@ -14,6 +14,7 @@ export declare class DetailUI {
14
14
  private pendingInput;
15
15
  private pendingInputTimer;
16
16
  private keyboardEnhancementFlags;
17
+ private pendingTerminalResponse;
17
18
  constructor(terminal: TerminalUI, onExitDetail: () => void);
18
19
  private isExitShortcut;
19
20
  private isExitShortcutPrefix;
@@ -21,6 +22,8 @@ export declare class DetailUI {
21
22
  private rememberKeyboardEnhancementFlags;
22
23
  private clearPendingInputTimer;
23
24
  private flushPendingInput;
25
+ private sanitizeTerminalResponses;
26
+ private static extractTrailingTerminalResponsePrefix;
24
27
  attach(session: AgentSession): void;
25
28
  detach(): void;
26
29
  show(): void;
@@ -20,6 +20,7 @@ export class DetailUI {
20
20
  pendingInput = '';
21
21
  pendingInputTimer = null;
22
22
  keyboardEnhancementFlags = null;
23
+ pendingTerminalResponse = '';
23
24
  constructor(terminal, onExitDetail) {
24
25
  this.terminal = terminal;
25
26
  this.onExitDetail = onExitDetail;
@@ -61,6 +62,34 @@ export class DetailUI {
61
62
  this.pendingInput = '';
62
63
  this.clearPendingInputTimer();
63
64
  }
65
+ sanitizeTerminalResponses(input) {
66
+ const combined = this.pendingTerminalResponse + input;
67
+ const trailingPrefix = DetailUI.extractTrailingTerminalResponsePrefix(combined);
68
+ const processable = trailingPrefix.length > 0
69
+ ? combined.slice(0, -trailingPrefix.length)
70
+ : combined;
71
+ this.pendingTerminalResponse = trailingPrefix;
72
+ return processable
73
+ .replace(/\x1b[P_^X][\s\S]*?(?:\x07|\x1b\\)/g, '')
74
+ .replace(/\x1b\][\s\S]*?(?:\x07|\x1b\\)/g, '')
75
+ .replace(/\x1b\[\?\d+(?:;\d+)*u/g, '');
76
+ }
77
+ static extractTrailingTerminalResponsePrefix(input) {
78
+ const csiMatch = input.match(/\x1b\[\?[0-9;]*$/);
79
+ if (csiMatch) {
80
+ return csiMatch[0];
81
+ }
82
+ const escapeIndex = input.lastIndexOf('\x1b');
83
+ if (escapeIndex === -1) {
84
+ return '';
85
+ }
86
+ const candidate = input.slice(escapeIndex);
87
+ if (!/^\x1b[\]P_^X]/.test(candidate)) {
88
+ return '';
89
+ }
90
+ const hasTerminator = /\x07|\x1b\\/.test(candidate);
91
+ return hasTerminator ? '' : candidate;
92
+ }
64
93
  attach(session) {
65
94
  this.detach();
66
95
  this.currentSession = session;
@@ -90,11 +119,15 @@ export class DetailUI {
90
119
  return;
91
120
  this.debugLogInput(str);
92
121
  this.rememberKeyboardEnhancementFlags(str);
93
- if (this.isExitShortcut(str)) {
122
+ const sanitized = this.sanitizeTerminalResponses(str);
123
+ if (!sanitized) {
124
+ return;
125
+ }
126
+ if (this.isExitShortcut(sanitized)) {
94
127
  this.onExitDetail();
95
128
  return;
96
129
  }
97
- this.pendingInput += str;
130
+ this.pendingInput += sanitized;
98
131
  if (this.isExitShortcut(this.pendingInput)) {
99
132
  this.clearPendingInputTimer();
100
133
  this.pendingInput = '';
@@ -124,6 +157,7 @@ export class DetailUI {
124
157
  }
125
158
  this.clearPendingInputTimer();
126
159
  this.pendingInput = '';
160
+ this.pendingTerminalResponse = '';
127
161
  this.currentSession = null;
128
162
  }
129
163
  show() { }
@@ -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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@k1e1n04/mav",
3
- "version": "0.1.21",
3
+ "version": "0.1.22",
4
4
  "description": "Multi-agent view — manage multiple AI CLI sessions in one terminal",
5
5
  "type": "module",
6
6
  "bin": {
package/src/ui/detail.ts CHANGED
@@ -26,6 +26,7 @@ export class DetailUI {
26
26
  private pendingInput = ''
27
27
  private pendingInputTimer: ReturnType<typeof setTimeout> | null = null
28
28
  private keyboardEnhancementFlags: string | null = null
29
+ private pendingTerminalResponse = ''
29
30
 
30
31
  constructor(terminal: TerminalUI, onExitDetail: () => void) {
31
32
  this.terminal = terminal
@@ -81,6 +82,40 @@ export class DetailUI {
81
82
  this.clearPendingInputTimer()
82
83
  }
83
84
 
85
+ private sanitizeTerminalResponses(input: string): string {
86
+ const combined = this.pendingTerminalResponse + input
87
+ const trailingPrefix = DetailUI.extractTrailingTerminalResponsePrefix(combined)
88
+ const processable = trailingPrefix.length > 0
89
+ ? combined.slice(0, -trailingPrefix.length)
90
+ : combined
91
+ this.pendingTerminalResponse = trailingPrefix
92
+
93
+ return processable
94
+ .replace(/\x1b[P_^X][\s\S]*?(?:\x07|\x1b\\)/g, '')
95
+ .replace(/\x1b\][\s\S]*?(?:\x07|\x1b\\)/g, '')
96
+ .replace(/\x1b\[\?\d+(?:;\d+)*u/g, '')
97
+ }
98
+
99
+ private static extractTrailingTerminalResponsePrefix(input: string): string {
100
+ const csiMatch = input.match(/\x1b\[\?[0-9;]*$/)
101
+ if (csiMatch) {
102
+ return csiMatch[0]
103
+ }
104
+
105
+ const escapeIndex = input.lastIndexOf('\x1b')
106
+ if (escapeIndex === -1) {
107
+ return ''
108
+ }
109
+
110
+ const candidate = input.slice(escapeIndex)
111
+ if (!/^\x1b[\]P_^X]/.test(candidate)) {
112
+ return ''
113
+ }
114
+
115
+ const hasTerminator = /\x07|\x1b\\/.test(candidate)
116
+ return hasTerminator ? '' : candidate
117
+ }
118
+
84
119
  attach(session: AgentSession): void {
85
120
  this.detach()
86
121
  this.currentSession = session
@@ -112,11 +147,15 @@ export class DetailUI {
112
147
  if (!str) return
113
148
  this.debugLogInput(str)
114
149
  this.rememberKeyboardEnhancementFlags(str)
115
- if (this.isExitShortcut(str)) {
150
+ const sanitized = this.sanitizeTerminalResponses(str)
151
+ if (!sanitized) {
152
+ return
153
+ }
154
+ if (this.isExitShortcut(sanitized)) {
116
155
  this.onExitDetail()
117
156
  return
118
157
  }
119
- this.pendingInput += str
158
+ this.pendingInput += sanitized
120
159
 
121
160
  if (this.isExitShortcut(this.pendingInput)) {
122
161
  this.clearPendingInputTimer()
@@ -150,6 +189,7 @@ export class DetailUI {
150
189
  }
151
190
  this.clearPendingInputTimer()
152
191
  this.pendingInput = ''
192
+ this.pendingTerminalResponse = ''
153
193
  this.currentSession = null
154
194
  }
155
195