@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 +1 -1
- package/dist/src/ui/detail.d.ts +3 -0
- package/dist/src/ui/detail.js +36 -2
- package/dist/src/ui/detail.js.map +1 -1
- package/package.json +1 -1
- package/src/ui/detail.ts +42 -2
package/dist/package.json
CHANGED
package/dist/src/ui/detail.d.ts
CHANGED
|
@@ -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;
|
package/dist/src/ui/detail.js
CHANGED
|
@@ -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
|
-
|
|
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 +=
|
|
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":"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;
|
|
1
|
+
{"version":3,"file":"detail.js","sourceRoot":"","sources":["../../../src/ui/detail.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
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
|
-
|
|
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 +=
|
|
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
|
|