4runr-os 2.0.15 → 2.0.17
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/ui/v3/commands/commandEngine.js +258 -3
- package/dist/ui/v3/commands/commandEngine.js.map +1 -1
- package/dist/ui/v3/ui/debugUtils.d.ts +6 -0
- package/dist/ui/v3/ui/debugUtils.d.ts.map +1 -1
- package/dist/ui/v3/ui/debugUtils.js +21 -9
- package/dist/ui/v3/ui/debugUtils.js.map +1 -1
- package/dist/ui/v3/ui/layout/phase1Layout.d.ts.map +1 -1
- package/dist/ui/v3/ui/layout/phase1Layout.js +43 -19
- package/dist/ui/v3/ui/layout/phase1Layout.js.map +1 -1
- package/dist/ui/v3/ui/phase1RuntimeClean.d.ts +8 -0
- package/dist/ui/v3/ui/phase1RuntimeClean.d.ts.map +1 -1
- package/dist/ui/v3/ui/phase1RuntimeClean.js +183 -42
- package/dist/ui/v3/ui/phase1RuntimeClean.js.map +1 -1
- package/package.json +1 -1
|
@@ -127,14 +127,18 @@ export function dumpListenerBindings() {
|
|
|
127
127
|
}
|
|
128
128
|
/**
|
|
129
129
|
* Step 3A: Track blocked stdout/stderr writes
|
|
130
|
+
*
|
|
131
|
+
* Enhanced: Capture full stack trace for corruption detection
|
|
130
132
|
*/
|
|
131
133
|
export function trackBlockedWrite(stream, content) {
|
|
132
134
|
const stack = new Error().stack || '';
|
|
135
|
+
// Capture full stack trace (first 10 lines for corruption detection)
|
|
136
|
+
const fullStack = stack.split('\n').slice(2, 12).join('\n ');
|
|
133
137
|
const caller = stack.split('\n').slice(2, 5).join('\n ');
|
|
134
138
|
const blocked = {
|
|
135
139
|
ts: Date.now(),
|
|
136
|
-
content: content.substring(0,
|
|
137
|
-
stack:
|
|
140
|
+
content: content.substring(0, 200), // Increased to 200 for better visibility
|
|
141
|
+
stack: fullStack, // Full stack for corruption detection
|
|
138
142
|
stream
|
|
139
143
|
};
|
|
140
144
|
blockedWrites.push(blocked);
|
|
@@ -144,7 +148,8 @@ export function trackBlockedWrite(stream, content) {
|
|
|
144
148
|
}
|
|
145
149
|
// Emit to operations (rate limited to prevent spam)
|
|
146
150
|
if (isDebugMode()) {
|
|
147
|
-
log(`[${stream.toUpperCase()} BLOCKED] "${blocked.content}"
|
|
151
|
+
log(`[${stream.toUpperCase()} BLOCKED] "${blocked.content.substring(0, 50)}..."`, 'WARN');
|
|
152
|
+
log(` Stack: ${caller}`, 'WARN');
|
|
148
153
|
}
|
|
149
154
|
}
|
|
150
155
|
/**
|
|
@@ -164,6 +169,8 @@ export function dumpBlockedWrites() {
|
|
|
164
169
|
}
|
|
165
170
|
/**
|
|
166
171
|
* Monkeypatch stdout/stderr to catch writes
|
|
172
|
+
*
|
|
173
|
+
* Enhanced: Detect corruption during TUI runtime (captures stack traces)
|
|
167
174
|
*/
|
|
168
175
|
export function installStdoutMonkeypatch() {
|
|
169
176
|
const originalStdoutWrite = process.stdout.write.bind(process.stdout);
|
|
@@ -173,18 +180,21 @@ export function installStdoutMonkeypatch() {
|
|
|
173
180
|
const content = String(chunk);
|
|
174
181
|
// Allow ANSI escape codes (cursor control) and blessed writes
|
|
175
182
|
const stack = new Error().stack || '';
|
|
176
|
-
const isBlessed = stack.includes('neo-blessed') || stack.includes('Program.prototype');
|
|
183
|
+
const isBlessed = stack.includes('neo-blessed') || stack.includes('Program.prototype') || stack.includes('blessed');
|
|
177
184
|
const isAnsiEscape = /^\x1b\[[\d;]*[A-Za-z]/.test(content);
|
|
178
|
-
|
|
185
|
+
const isClearScreen = content === '\x1b[2J\x1b[H' || content.includes('\x1b[2J');
|
|
186
|
+
// Allow blessed, ANSI escapes, and clear screen commands (from our hard clear)
|
|
187
|
+
if (isBlessed || isAnsiEscape || isClearScreen) {
|
|
179
188
|
return originalStdoutWrite(chunk, ...args);
|
|
180
189
|
}
|
|
181
|
-
// Block and track
|
|
190
|
+
// Block and track (capture full stack for corruption detection)
|
|
182
191
|
trackBlockedWrite('stdout', content);
|
|
183
|
-
return true; // Pretend success
|
|
192
|
+
return true; // Pretend success to prevent corruption
|
|
184
193
|
};
|
|
185
|
-
// Patch stderr (
|
|
194
|
+
// Patch stderr (track but allow - less strict)
|
|
186
195
|
process.stderr.write = function (chunk, ...args) {
|
|
187
196
|
const content = String(chunk);
|
|
197
|
+
// Track but allow stderr (some libraries use it for errors)
|
|
188
198
|
trackBlockedWrite('stderr', content);
|
|
189
199
|
return originalStderrWrite(chunk, ...args);
|
|
190
200
|
};
|
|
@@ -197,7 +207,9 @@ export function installStdoutMonkeypatch() {
|
|
|
197
207
|
let resizeStats = {
|
|
198
208
|
eventCount: 0,
|
|
199
209
|
applyCount: 0,
|
|
200
|
-
handlerBound: false
|
|
210
|
+
handlerBound: false,
|
|
211
|
+
listenerCount: 0,
|
|
212
|
+
uiRebuildCount: 0
|
|
201
213
|
};
|
|
202
214
|
/**
|
|
203
215
|
* Update resize stats (called from phase1RuntimeClean)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"debugUtils.js","sourceRoot":"","sources":["../../../../src/ui/v3/ui/debugUtils.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"debugUtils.js","sourceRoot":"","sources":["../../../../src/ui/v3/ui/debugUtils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAG/C,6CAA6C;AAC7C,MAAM,CAAC,MAAM,OAAO,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;AAUrF,MAAM,cAAc,GAAG,IAAI,GAAG,EAAsB,CAAC;AAUrD,MAAM,gBAAgB,GAAsB,EAAE,CAAC;AAC/C,IAAI,kBAAkB,GAAG,CAAC,CAAC;AAU3B,MAAM,aAAa,GAAmB,EAAE,CAAC;AACzC,MAAM,kBAAkB,GAAG,EAAE,CAAC;AAE9B,MAAM,CAAC,MAAM,WAAW,GAAG,GAAY,EAAE;IACvC,OAAO,OAAO,CAAC,GAAG,CAAC,SAAS,KAAK,GAAG,CAAC;AACvC,CAAC,CAAC;AAEF,MAAM,GAAG,GAAG,CAAC,GAAW,EAAE,QAAmC,MAAM,EAAE,EAAE;IACrE,QAAQ,CAAC,IAAI,CAAC;QACZ,GAAG,EAAE,KAAK;QACV,GAAG,EAAE,SAAS,OAAO,KAAK,GAAG,EAAE;QAC/B,KAAK;KACN,CAAC,CAAC;AACL,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,MAAW,EAAE,IAAY;IACnD,IAAI,CAAC,WAAW,EAAE;QAAE,OAAO;IAE3B,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACtD,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC;IACtC,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAE/D,MAAM,IAAI,GAAe;QACvB,IAAI,EAAE,EAAE;QACR,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE;QACvB,WAAW,EAAE,SAAS;QACtB,MAAM,EAAE,IAAI;KACb,CAAC;IAEF,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC;IACjB,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;IACtC,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;IACtC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;IAErB,cAAc,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAE7B,GAAG,CAAC,WAAW,IAAI,OAAO,EAAE,EAAE,CAAC,CAAC;AAClC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,MAAsB;IACpD,MAAM,QAAQ,GAAI,MAAc,CAAC,QAAQ,IAAI,EAAE,CAAC;IAChD,MAAM,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC;IAEtC,GAAG,CAAC,sBAAsB,CAAC,CAAC;IAC5B,GAAG,CAAC,mBAAmB,aAAa,EAAE,CAAC,CAAC;IAExC,wBAAwB;IACxB,MAAM,UAAU,GAAG,IAAI,GAAG,EAAqE,CAAC;IAEhG,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAI,KAAa,CAAC,MAAM,IAAI,SAAS,CAAC;QAChD,MAAM,EAAE,GAAI,KAAa,CAAC,IAAI,IAAI,OAAO,CAAC;QAC1C,MAAM,SAAS,GAAI,KAAa,CAAC,WAAW,IAAI,CAAC,CAAC;QAClD,MAAM,SAAS,GAAI,KAAa,CAAC,WAAW,IAAI,SAAS,CAAC;QAE1D,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC3B,CAAC;QACD,UAAU,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED,+BAA+B;IAC/B,KAAK,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC;QACrD,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC;QAC/B,GAAG,CAAC,GAAG,IAAI,KAAK,KAAK,cAAc,CAAC,CAAC;QAErC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACd,GAAG,CAAC,+BAA+B,IAAI,GAAG,EAAE,MAAM,CAAC,CAAC;YACpD,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;gBAC7B,GAAG,CAAC,YAAY,IAAI,CAAC,EAAE,eAAe,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;gBAChF,GAAG,CAAC,gBAAgB,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;YACxC,CAAC;QACH,CAAC;IACH,CAAC;IAED,GAAG,CAAC,uBAAuB,CAAC,CAAC;AAC/B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,IAAI,CAAC,WAAW,EAAE;QAAE,OAAO;IAE3B,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtB,kBAAkB,EAAE,CAAC;IACvB,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC;IACtC,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAE7D,MAAM,OAAO,GAAoB;QAC/B,IAAI;QACJ,UAAU,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC;QAC7G,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE;QACnB,KAAK,EAAE,OAAO;KACf,CAAC;IAEF,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAE/B,GAAG,CAAC,SAAS,IAAI,YAAY,OAAO,CAAC,UAAU,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IACjG,GAAG,CAAC,YAAY,OAAO,EAAE,CAAC,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB;IAClC,GAAG,CAAC,2BAA2B,CAAC,CAAC;IACjC,GAAG,CAAC,mBAAmB,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC;IAElD,gBAAgB;IAChB,MAAM,MAAM,GAAG,IAAI,GAAG,EAA6B,CAAC;IACpD,KAAK,MAAM,OAAO,IAAI,gBAAgB,EAAE,CAAC;QACvC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9B,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC/B,CAAC;QACD,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC1C,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;QAChD,GAAG,CAAC,GAAG,IAAI,KAAK,QAAQ,CAAC,MAAM,aAAa,CAAC,CAAC;QAE9C,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,GAAG,CAAC,8BAA8B,IAAI,GAAG,EAAE,MAAM,CAAC,CAAC;QACrD,CAAC;QAED,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,GAAG,CAAC,eAAe,OAAO,CAAC,UAAU,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;YACvF,GAAG,CAAC,cAAc,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAED,GAAG,CAAC,+BAA+B,CAAC,CAAC;AACvC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAA2B,EAAE,OAAe;IAC5E,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC;IACtC,qEAAqE;IACrE,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAChE,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAE5D,MAAM,OAAO,GAAiB;QAC5B,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;QACd,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,yCAAyC;QAC7E,KAAK,EAAE,SAAS,EAAE,sCAAsC;QACxD,MAAM;KACP,CAAC;IAEF,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAE5B,oCAAoC;IACpC,IAAI,aAAa,CAAC,MAAM,GAAG,kBAAkB,EAAE,CAAC;QAC9C,aAAa,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;IAED,oDAAoD;IACpD,IAAI,WAAW,EAAE,EAAE,CAAC;QAClB,GAAG,CAAC,IAAI,MAAM,CAAC,WAAW,EAAE,cAAc,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC1F,GAAG,CAAC,YAAY,MAAM,EAAE,EAAE,MAAM,CAAC,CAAC;IACpC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,GAAG,CAAC,sCAAsC,CAAC,CAAC;IAC5C,GAAG,CAAC,kBAAkB,aAAa,CAAC,MAAM,oBAAoB,CAAC,CAAC;IAEhE,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;IAExC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACxB,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,MAAM,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QAC1E,GAAG,CAAC,gBAAgB,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC;QACtC,GAAG,CAAC,aAAa,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IAClC,CAAC;IAED,GAAG,CAAC,4BAA4B,CAAC,CAAC;AACpC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,wBAAwB;IACtC,MAAM,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACtE,MAAM,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAEtE,eAAe;IACd,OAAO,CAAC,MAAM,CAAC,KAAa,GAAG,UAAS,KAAU,EAAE,GAAG,IAAW;QACjE,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAE9B,8DAA8D;QAC9D,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC;QACtC,MAAM,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,mBAAmB,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QACpH,MAAM,YAAY,GAAG,uBAAuB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC3D,MAAM,aAAa,GAAG,OAAO,KAAK,eAAe,IAAI,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAEjF,+EAA+E;QAC/E,IAAI,SAAS,IAAI,YAAY,IAAI,aAAa,EAAE,CAAC;YAC/C,OAAO,mBAAmB,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC;QAC7C,CAAC;QAED,gEAAgE;QAChE,iBAAiB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACrC,OAAO,IAAI,CAAC,CAAC,wCAAwC;IACvD,CAAC,CAAC;IAEF,+CAA+C;IAC9C,OAAO,CAAC,MAAM,CAAC,KAAa,GAAG,UAAS,KAAU,EAAE,GAAG,IAAW;QACjE,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAC9B,4DAA4D;QAC5D,iBAAiB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACrC,OAAO,mBAAmB,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC;IAC7C,CAAC,CAAC;IAEF,0BAA0B;IAC1B,OAAO,GAAG,EAAE;QACV,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,mBAA0B,CAAC;QAClD,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,mBAA0B,CAAC;IACpD,CAAC,CAAC;AACJ,CAAC;AAWD,IAAI,WAAW,GAAgB;IAC7B,UAAU,EAAE,CAAC;IACb,UAAU,EAAE,CAAC;IACb,YAAY,EAAE,KAAK;IACnB,aAAa,EAAE,CAAC;IAChB,cAAc,EAAE,CAAC;CAClB,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAA2B;IAC3D,WAAW,GAAG,EAAE,GAAG,WAAW,EAAE,GAAG,KAAK,EAAE,CAAC;AAC7C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc;IAC5B,OAAO,EAAE,GAAG,WAAW,EAAE,CAAC;AAC5B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa;IAO3B,OAAO;QACL,MAAM,EAAE,OAAO;QACf,WAAW,EAAE,cAAc,CAAC,IAAI;QAChC,aAAa,EAAE,gBAAgB,CAAC,MAAM;QACtC,iBAAiB,EAAE,aAAa,CAAC,MAAM;QACvC,WAAW,EAAE,cAAc,EAAE;KAC9B,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"phase1Layout.d.ts","sourceRoot":"","sources":["../../../../../src/ui/v3/ui/layout/phase1Layout.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAG3C,MAAM,WAAW,OAAO;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,OAAO,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB;AAGD,eAAO,MAAM,SAAS,KAAK,CAAC;AAC5B,eAAO,MAAM,UAAU,KAAK,CAAC;AAM7B;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,MAAM,GAAG,YAAY,
|
|
1
|
+
{"version":3,"file":"phase1Layout.d.ts","sourceRoot":"","sources":["../../../../../src/ui/v3/ui/layout/phase1Layout.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAG3C,MAAM,WAAW,OAAO;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,OAAO,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB;AAGD,eAAO,MAAM,SAAS,KAAK,CAAC;AAC5B,eAAO,MAAM,UAAU,KAAK,CAAC;AAM7B;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,MAAM,GAAG,YAAY,CA4QxG"}
|
|
@@ -207,27 +207,51 @@ export function computePhase1Layout(width, height, screen) {
|
|
|
207
207
|
if (layout.commandLine.top + layout.commandLine.height > safeHeight) {
|
|
208
208
|
errors.push(`Command line overflow: ${layout.commandLine.top + layout.commandLine.height} > ${safeHeight}`);
|
|
209
209
|
}
|
|
210
|
-
//
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
const
|
|
227
|
-
|
|
228
|
-
|
|
210
|
+
// CRITICAL: Hard clamp ALL panels to safeWidth - 1 (ALWAYS, not just debug mode)
|
|
211
|
+
// This prevents horizontal scrollbar in ALL environments (local, SSH, browser terminals)
|
|
212
|
+
const panels = [
|
|
213
|
+
{ name: 'POSTURE', rect: layout.posture },
|
|
214
|
+
{ name: 'RESOURCES', rect: layout.resources },
|
|
215
|
+
{ name: 'ASSETS', rect: layout.assets },
|
|
216
|
+
{ name: 'OPERATIONS', rect: layout.operations },
|
|
217
|
+
{ name: 'NETWORK', rect: layout.network },
|
|
218
|
+
{ name: 'CAPABILITIES', rect: layout.capabilities },
|
|
219
|
+
{ name: 'COMMAND_LINE', rect: layout.commandLine },
|
|
220
|
+
];
|
|
221
|
+
const maxRightEdge = safeWidth - 1; // Hard boundary: never exceed this
|
|
222
|
+
for (const { name, rect } of panels) {
|
|
223
|
+
const rightEdge = rect.left + rect.width;
|
|
224
|
+
// CRITICAL: Hard clamp if overflow detected (prevents horizontal scrollbar)
|
|
225
|
+
if (rightEdge > maxRightEdge) {
|
|
226
|
+
const overflow = rightEdge - maxRightEdge;
|
|
227
|
+
// Clamp width to fit within boundary
|
|
228
|
+
rect.width = Math.max(1, rect.width - overflow);
|
|
229
|
+
// Log the clamp (in debug mode only to prevent spam)
|
|
230
|
+
if (process.env.TUI_DEBUG === '1') {
|
|
231
|
+
errors.push(`⚠ HARD CLAMP: ${name} width reduced by ${overflow} to prevent overflow (rightEdge was ${rightEdge}, clamped to ${rect.left + rect.width})`);
|
|
229
232
|
}
|
|
230
233
|
}
|
|
234
|
+
// Validate Y bounds (top + height <= safeHeight)
|
|
235
|
+
const bottomEdge = rect.top + rect.height;
|
|
236
|
+
const maxBottomEdge = safeHeight - 1;
|
|
237
|
+
if (bottomEdge > maxBottomEdge) {
|
|
238
|
+
const overflow = bottomEdge - maxBottomEdge;
|
|
239
|
+
rect.height = Math.max(1, rect.height - overflow);
|
|
240
|
+
if (process.env.TUI_DEBUG === '1') {
|
|
241
|
+
errors.push(`⚠ HARD CLAMP: ${name} height reduced by ${overflow} to prevent overflow (bottomEdge was ${bottomEdge}, clamped to ${rect.top + rect.height})`);
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
// Re-validate after clamping
|
|
246
|
+
for (const { name, rect } of panels) {
|
|
247
|
+
const rightEdge = rect.left + rect.width;
|
|
248
|
+
if (rightEdge > maxRightEdge) {
|
|
249
|
+
errors.push(`FATAL: ${name} still overflows after clamp: ${rightEdge} > ${maxRightEdge}`);
|
|
250
|
+
}
|
|
251
|
+
const bottomEdge = rect.top + rect.height;
|
|
252
|
+
if (bottomEdge > safeHeight) {
|
|
253
|
+
errors.push(`FATAL: ${name} bottom still overflows after clamp: ${bottomEdge} > ${safeHeight}`);
|
|
254
|
+
}
|
|
231
255
|
}
|
|
232
256
|
if (errors.length > 0) {
|
|
233
257
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"phase1Layout.js","sourceRoot":"","sources":["../../../../../src/ui/v3/ui/layout/phase1Layout.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"phase1Layout.js","sourceRoot":"","sources":["../../../../../src/ui/v3/ui/layout/phase1Layout.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,14 @@
|
|
|
7
7
|
* - Zero stdout writes
|
|
8
8
|
* - Clean unbinding
|
|
9
9
|
*/
|
|
10
|
+
/**
|
|
11
|
+
* Toggle resize trace mode (exported for debug commands)
|
|
12
|
+
*/
|
|
13
|
+
export declare function setResizeTraceEnabled(enabled: boolean): void;
|
|
14
|
+
/**
|
|
15
|
+
* Get resize trace status (exported for debug commands)
|
|
16
|
+
*/
|
|
17
|
+
export declare function getResizeTraceEnabled(): boolean;
|
|
10
18
|
/**
|
|
11
19
|
* Step 1: Single instance guard
|
|
12
20
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"phase1RuntimeClean.d.ts","sourceRoot":"","sources":["../../../../src/ui/v3/ui/phase1RuntimeClean.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"phase1RuntimeClean.d.ts","sourceRoot":"","sources":["../../../../src/ui/v3/ui/phase1RuntimeClean.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAoFH;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAE5D;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,OAAO,CAE/C;AAgKD;;GAEG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC,CAgMxD;AA0sBD;;GAEG;AACH,wBAAgB,UAAU,IAAI,MAAM,EAAE,CAyJrC"}
|
|
@@ -23,7 +23,7 @@ import { renderNetworkPanel } from './panels/NetworkPanel.js';
|
|
|
23
23
|
import { renderCapabilitiesPanel } from './panels/CapabilitiesPanel.js';
|
|
24
24
|
import { isAvailable } from '../state/value.js';
|
|
25
25
|
import { parse, execute, UiAction } from '../commands/commandEngine.js';
|
|
26
|
-
import { BOOT_ID, isDebugMode, trackWidget, trackListenerBinding, installStdoutMonkeypatch, updateResizeStats } from './debugUtils.js';
|
|
26
|
+
import { BOOT_ID, isDebugMode, trackWidget, trackListenerBinding, installStdoutMonkeypatch, updateResizeStats, getResizeStats } from './debugUtils.js';
|
|
27
27
|
import { getTerminalGeometry, isGeometryStable, formatGeometry } from '../tui/geometry.js';
|
|
28
28
|
import { detectTerminalMode, getDetectionLog } from '../tui/terminalMode.js';
|
|
29
29
|
const blessedLib = blessed;
|
|
@@ -51,10 +51,25 @@ let scrollOffset = 0;
|
|
|
51
51
|
// Phase C1: Resize debounce (prevent resize storm)
|
|
52
52
|
let resizeDebounceTimer = null;
|
|
53
53
|
let lastAppliedSize = null;
|
|
54
|
-
const RESIZE_DEBOUNCE_MS =
|
|
54
|
+
const RESIZE_DEBOUNCE_MS = 100; // 100ms debounce for smooth resize
|
|
55
55
|
let resizeEventCount = 0;
|
|
56
56
|
let resizeApplyCount = 0;
|
|
57
57
|
let layoutUIInProgress = false; // Guard against re-entrant layoutUI calls
|
|
58
|
+
let isResizing = false; // Freeze flag to prevent state updates during resize
|
|
59
|
+
let resizeTraceEnabled = false; // Enable resize trace logging
|
|
60
|
+
let firstResizeSinceMount = true; // Track first resize for immediate render
|
|
61
|
+
/**
|
|
62
|
+
* Toggle resize trace mode (exported for debug commands)
|
|
63
|
+
*/
|
|
64
|
+
export function setResizeTraceEnabled(enabled) {
|
|
65
|
+
resizeTraceEnabled = enabled;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Get resize trace status (exported for debug commands)
|
|
69
|
+
*/
|
|
70
|
+
export function getResizeTraceEnabled() {
|
|
71
|
+
return resizeTraceEnabled;
|
|
72
|
+
}
|
|
58
73
|
// Resize handler guard (Step 4A: bind once)
|
|
59
74
|
let resizeHandlerBound = false;
|
|
60
75
|
/**
|
|
@@ -93,6 +108,8 @@ function safeAppend(screen, widget) {
|
|
|
93
108
|
function mountUI(screen, layout) {
|
|
94
109
|
// Issue 1 - Step 1: Hard guard - mount exactly once
|
|
95
110
|
if (mounted) {
|
|
111
|
+
// Track UI rebuild attempts (should never happen)
|
|
112
|
+
updateResizeStats({ uiRebuildCount: (getResizeStats().uiRebuildCount || 0) + 1 });
|
|
96
113
|
throw new Error('UI already mounted - cannot mount twice');
|
|
97
114
|
}
|
|
98
115
|
mounted = true;
|
|
@@ -282,6 +299,8 @@ export async function startPhase1Runtime() {
|
|
|
282
299
|
}
|
|
283
300
|
// A) mountUI() - Create widgets ONCE
|
|
284
301
|
widgets = mountUI(screen, layout);
|
|
302
|
+
// Track initial mount (not a rebuild)
|
|
303
|
+
updateResizeStats({ uiRebuildCount: 0 });
|
|
285
304
|
// Store unbind functions
|
|
286
305
|
const unbindFns = [];
|
|
287
306
|
// Step 3A: Install stdout monkeypatch (debug mode)
|
|
@@ -353,66 +372,143 @@ export async function startPhase1Runtime() {
|
|
|
353
372
|
});
|
|
354
373
|
}
|
|
355
374
|
/**
|
|
356
|
-
*
|
|
375
|
+
* Hard clear terminal buffer - removes all artifacts
|
|
376
|
+
*/
|
|
377
|
+
function hardClearTerminal(screen) {
|
|
378
|
+
try {
|
|
379
|
+
const program = screen.program;
|
|
380
|
+
// Try blessed's program.clear() + home() first
|
|
381
|
+
if (program && typeof program.clear === 'function' && typeof program.home === 'function') {
|
|
382
|
+
program.clear();
|
|
383
|
+
program.home();
|
|
384
|
+
return;
|
|
385
|
+
}
|
|
386
|
+
// Fallback: ANSI escape codes
|
|
387
|
+
// \x1b[2J = Clear entire screen
|
|
388
|
+
// \x1b[H = Move cursor to home position (0,0)
|
|
389
|
+
if (process.stdout.isTTY) {
|
|
390
|
+
process.stdout.write('\x1b[2J\x1b[H');
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
catch (e) {
|
|
394
|
+
// If clear fails, try ANSI escape as last resort
|
|
395
|
+
if (process.stdout.isTTY) {
|
|
396
|
+
process.stdout.write('\x1b[2J\x1b[H');
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
/**
|
|
401
|
+
* Atomic resize application - single path, no incremental updates
|
|
402
|
+
*
|
|
403
|
+
* Sequence:
|
|
404
|
+
* 1. Freeze rendering (isResizing = true)
|
|
405
|
+
* 2. Hard clear terminal buffer
|
|
406
|
+
* 3. Recompute layout from scratch
|
|
407
|
+
* 4. Force full repaint
|
|
408
|
+
* 5. Unfreeze rendering
|
|
409
|
+
*/
|
|
410
|
+
function applyResizeAtomic(cols, rows, screen, widgets) {
|
|
411
|
+
// Step 1: Freeze rendering (ignore state updates during resize)
|
|
412
|
+
isResizing = true;
|
|
413
|
+
try {
|
|
414
|
+
// Resize trace logging
|
|
415
|
+
if (resizeTraceEnabled || isDebugMode()) {
|
|
416
|
+
const childrenCount = (screen.children || []).length;
|
|
417
|
+
log('DBG', `[RESIZE TRACE] Apply #${resizeApplyCount}: ${cols}x${rows}, children=${childrenCount}`);
|
|
418
|
+
}
|
|
419
|
+
// Step 2: Hard clear terminal buffer (removes all artifacts)
|
|
420
|
+
hardClearTerminal(screen);
|
|
421
|
+
// Step 3: Recompute layout from scratch (using fresh dimensions)
|
|
422
|
+
layoutUI(screen, widgets, cols, rows);
|
|
423
|
+
// Step 4: Force full repaint
|
|
424
|
+
screen.render();
|
|
425
|
+
// Step 5: Validate no duplication occurred
|
|
426
|
+
const screenChildren = screen.children || [];
|
|
427
|
+
const widgetCount = screenChildren.length;
|
|
428
|
+
const commandLineCount = screenChildren.filter((w) => w === widgets.commandLine).length;
|
|
429
|
+
const postureCount = screenChildren.filter((w) => w === widgets.posture).length;
|
|
430
|
+
const operationsCount = screenChildren.filter((w) => w === widgets.operations).length;
|
|
431
|
+
if (commandLineCount > 1 || postureCount > 1 || operationsCount > 1) {
|
|
432
|
+
log('ERR', `DUPLICATION DETECTED: commandLine=${commandLineCount}, posture=${postureCount}, operations=${operationsCount}`, 'ERROR');
|
|
433
|
+
if (isDebugMode()) {
|
|
434
|
+
log('DBG', `Total screen children: ${widgetCount} (expected ~8 widgets)`);
|
|
435
|
+
log('DBG', `Widgets: ${screenChildren.map((w) => w.type || 'unknown').join(', ')}`);
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
if (resizeTraceEnabled || (isDebugMode() && resizeApplyCount % 5 === 0)) {
|
|
439
|
+
const finalChildrenCount = (screen.children || []).length;
|
|
440
|
+
log('DBG', `[RESIZE TRACE] Complete: children=${finalChildrenCount}, size=${cols}x${rows}`);
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
finally {
|
|
444
|
+
// Step 6: Unfreeze rendering
|
|
445
|
+
isResizing = false;
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
/**
|
|
449
|
+
* Schedule resize application with smooth behavior
|
|
450
|
+
*
|
|
451
|
+
* Strategy:
|
|
452
|
+
* - First resize: render immediately (fast response)
|
|
453
|
+
* - Subsequent resizes: debounce 100ms (smooth, no spam)
|
|
357
454
|
*
|
|
358
455
|
* Ensures:
|
|
359
456
|
* - Debounce: Multiple rapid resize events result in single layout update
|
|
360
457
|
* - Ignore duplicates: Skip if size hasn't changed from last applied
|
|
361
|
-
* -
|
|
458
|
+
* - Atomic: Full redraw from scratch, not incremental
|
|
362
459
|
*/
|
|
363
460
|
function scheduleResize(nextCols, nextRows, screen, widgets) {
|
|
364
461
|
// Check if this is the same as last applied (ignore duplicates)
|
|
365
462
|
if (lastAppliedSize && lastAppliedSize.cols === nextCols && lastAppliedSize.rows === nextRows) {
|
|
366
463
|
return; // Same size, no need to recompute
|
|
367
464
|
}
|
|
368
|
-
//
|
|
465
|
+
// First resize: render immediately for fast response
|
|
466
|
+
if (firstResizeSinceMount) {
|
|
467
|
+
firstResizeSinceMount = false;
|
|
468
|
+
resizeApplyCount++;
|
|
469
|
+
lastAppliedSize = { cols: nextCols, rows: nextRows };
|
|
470
|
+
updateResizeStats({ eventCount: resizeEventCount, applyCount: resizeApplyCount });
|
|
471
|
+
// Immediate atomic resize
|
|
472
|
+
applyResizeAtomic(nextCols, nextRows, screen, widgets);
|
|
473
|
+
// Schedule a final debounced resize to catch any rapid subsequent changes
|
|
474
|
+
if (resizeDebounceTimer) {
|
|
475
|
+
clearTimeout(resizeDebounceTimer);
|
|
476
|
+
}
|
|
477
|
+
resizeDebounceTimer = setTimeout(() => {
|
|
478
|
+
resizeDebounceTimer = null;
|
|
479
|
+
// Check if size changed during debounce
|
|
480
|
+
const currentGeo = getTerminalGeometry(screen);
|
|
481
|
+
if (currentGeo.cols !== nextCols || currentGeo.rows !== nextRows) {
|
|
482
|
+
resizeApplyCount++;
|
|
483
|
+
lastAppliedSize = { cols: currentGeo.cols, rows: currentGeo.rows };
|
|
484
|
+
updateResizeStats({ eventCount: resizeEventCount, applyCount: resizeApplyCount });
|
|
485
|
+
applyResizeAtomic(currentGeo.cols, currentGeo.rows, screen, widgets);
|
|
486
|
+
}
|
|
487
|
+
}, RESIZE_DEBOUNCE_MS);
|
|
488
|
+
return;
|
|
489
|
+
}
|
|
490
|
+
// Subsequent resizes: cancel pending and schedule new debounced resize
|
|
369
491
|
if (resizeDebounceTimer) {
|
|
370
492
|
clearTimeout(resizeDebounceTimer);
|
|
371
493
|
}
|
|
372
|
-
// Schedule resize application
|
|
373
494
|
resizeDebounceTimer = setTimeout(() => {
|
|
374
495
|
resizeDebounceTimer = null;
|
|
375
496
|
resizeApplyCount++;
|
|
376
497
|
// Update last applied size BEFORE processing (prevents duplicate processing)
|
|
377
498
|
lastAppliedSize = { cols: nextCols, rows: nextRows };
|
|
378
499
|
updateResizeStats({ eventCount: resizeEventCount, applyCount: resizeApplyCount });
|
|
379
|
-
// Get current geometry (
|
|
500
|
+
// Get current geometry (may have changed during debounce)
|
|
380
501
|
const geo = getTerminalGeometry(screen);
|
|
381
|
-
//
|
|
502
|
+
// Use current geometry if it changed during debounce
|
|
503
|
+
const finalCols = geo.cols !== nextCols ? geo.cols : nextCols;
|
|
504
|
+
const finalRows = geo.rows !== nextRows ? geo.rows : nextRows;
|
|
382
505
|
if (geo.cols !== nextCols || geo.rows !== nextRows) {
|
|
383
|
-
// Screen dimensions changed while debouncing - use current screen dimensions
|
|
384
|
-
if (isDebugMode()) {
|
|
385
|
-
log('DBG', `Size changed during debounce: requested ${nextCols}x${nextRows}, using ${geo.cols}x${geo.rows}`);
|
|
386
|
-
}
|
|
387
|
-
}
|
|
388
|
-
// Throttle resize logging to prevent spam (only log every 5th resize apply)
|
|
389
|
-
if (isDebugMode() && resizeApplyCount % 5 === 0) {
|
|
390
|
-
log('DBG', `Resize apply #${resizeApplyCount} (${resizeEventCount} events): ${formatGeometry(geo)}`);
|
|
391
|
-
const screenCols = screen.cols ?? screen.program?.cols ?? screen.width;
|
|
392
|
-
const screenRows = screen.rows ?? screen.program?.rows ?? screen.height;
|
|
393
|
-
log('DBG', `screen.cols=${screenCols} screen.rows=${screenRows} screen.width=${screen.width} screen.height=${screen.height}`);
|
|
394
|
-
}
|
|
395
|
-
// Resize = REFLOW ONLY
|
|
396
|
-
// Pass explicit dimensions to layoutUI (more accurate than reading from screen during resize)
|
|
397
|
-
// Use the dimensions we computed in the resize handler (from process.stdout for native terminals)
|
|
398
|
-
layoutUI(screen, widgets, nextCols, nextRows);
|
|
399
|
-
// Render once (no logging inside render)
|
|
400
|
-
screen.render();
|
|
401
|
-
// Validate no duplication occurred (check all critical widgets)
|
|
402
|
-
const screenChildren = screen.children || [];
|
|
403
|
-
const widgetCount = screenChildren.length;
|
|
404
|
-
const commandLineCount = screenChildren.filter((w) => w === widgets.commandLine).length;
|
|
405
|
-
const postureCount = screenChildren.filter((w) => w === widgets.posture).length;
|
|
406
|
-
const operationsCount = screenChildren.filter((w) => w === widgets.operations).length;
|
|
407
|
-
// Expected widget count: 7 widgets (posture, resources, assets, operations, network, capabilities, statusStrip, commandLine)
|
|
408
|
-
// But commandLine and statusStrip might be children of a container, so we check individually
|
|
409
|
-
if (commandLineCount > 1 || postureCount > 1 || operationsCount > 1) {
|
|
410
|
-
log('ERR', `DUPLICATION DETECTED: commandLine=${commandLineCount}, posture=${postureCount}, operations=${operationsCount}`, 'ERROR');
|
|
411
506
|
if (isDebugMode()) {
|
|
412
|
-
log('DBG', `
|
|
413
|
-
log('DBG', `Widgets: ${screenChildren.map((w) => w.type || 'unknown').join(', ')}`);
|
|
507
|
+
log('DBG', `Size changed during debounce: requested ${nextCols}x${nextRows}, using ${finalCols}x${finalRows}`);
|
|
414
508
|
}
|
|
415
509
|
}
|
|
510
|
+
// Atomic resize application
|
|
511
|
+
applyResizeAtomic(finalCols, finalRows, screen, widgets);
|
|
416
512
|
}, RESIZE_DEBOUNCE_MS);
|
|
417
513
|
}
|
|
418
514
|
/**
|
|
@@ -499,12 +595,22 @@ function setupResizeHandling(screen, widgets, unbindFns) {
|
|
|
499
595
|
};
|
|
500
596
|
// Debug: Track listener binding
|
|
501
597
|
trackListenerBinding('resize');
|
|
598
|
+
// Count resize listeners (must be exactly 1 for screen + optionally 1 for stdout)
|
|
599
|
+
let listenerCount = 0;
|
|
502
600
|
// Bind to blessed screen resize event
|
|
503
601
|
screen.on('resize', handleResize);
|
|
602
|
+
listenerCount++;
|
|
504
603
|
// Also bind to process.stdout resize (for Windows compatibility)
|
|
505
604
|
// Both handlers call the same function to avoid double-processing
|
|
506
|
-
if (
|
|
605
|
+
if (typeof process.stdout.on === 'function') {
|
|
507
606
|
process.stdout.on('resize', handleResize);
|
|
607
|
+
listenerCount++;
|
|
608
|
+
}
|
|
609
|
+
// Update stats with listener count (should be 1 for screen-only, 2 if stdout also bound)
|
|
610
|
+
updateResizeStats({ listenerCount });
|
|
611
|
+
if (isDebugMode()) {
|
|
612
|
+
const stdoutBound = typeof process.stdout.on === 'function' ? '1' : '0';
|
|
613
|
+
log('DBG', `Resize listeners bound: ${listenerCount} (screen=1, stdout=${stdoutBound})`);
|
|
508
614
|
}
|
|
509
615
|
unbindFns.push(() => {
|
|
510
616
|
// Unbind screen resize
|
|
@@ -757,8 +863,14 @@ function setupInputHandling(screen, commandLine, unbindFns) {
|
|
|
757
863
|
}
|
|
758
864
|
/**
|
|
759
865
|
* Update all panel content
|
|
866
|
+
*
|
|
867
|
+
* Guard: Skip updates during resize to prevent corruption
|
|
760
868
|
*/
|
|
761
869
|
function updateAllPanels(widgets) {
|
|
870
|
+
// Skip state updates during resize (prevents corruption)
|
|
871
|
+
if (isResizing) {
|
|
872
|
+
return;
|
|
873
|
+
}
|
|
762
874
|
updatePanel(widgets.posture, renderPosturePanel(currentUiState.posture));
|
|
763
875
|
updatePanel(widgets.resources, renderResourcesPanel(currentUiState.resources));
|
|
764
876
|
updatePanel(widgets.assets, renderAssetsPanel(currentUiState.assets));
|
|
@@ -777,33 +889,55 @@ function updateAllPanels(widgets) {
|
|
|
777
889
|
}
|
|
778
890
|
/**
|
|
779
891
|
* Update a panel with content lines
|
|
892
|
+
*
|
|
893
|
+
* Fix: Clear panel content before writing to prevent vertical artifacts
|
|
780
894
|
*/
|
|
781
895
|
function updatePanel(panel, lines) {
|
|
782
896
|
const panelWidth = panel.width;
|
|
783
897
|
const panelHeight = panel.height;
|
|
784
898
|
const innerWidth = Math.max(1, panelWidth - 4);
|
|
785
899
|
const innerHeight = Math.max(1, panelHeight - 2);
|
|
900
|
+
// Clear panel content first (prevent vertical artifacts)
|
|
901
|
+
// Fill with blank lines to ensure old content is overwritten
|
|
902
|
+
const blankLines = [];
|
|
903
|
+
for (let i = 0; i < innerHeight; i++) {
|
|
904
|
+
blankLines.push(' '.repeat(innerWidth));
|
|
905
|
+
}
|
|
906
|
+
const clearedContent = '\n ' + blankLines.join('\n ');
|
|
907
|
+
panel.setContent(clearedContent);
|
|
908
|
+
// Now set actual content
|
|
786
909
|
const truncatedLines = lines.slice(0, innerHeight).map(line => {
|
|
787
910
|
if (line.length > innerWidth) {
|
|
788
911
|
return line.substring(0, innerWidth - 3) + '...';
|
|
789
912
|
}
|
|
790
|
-
|
|
913
|
+
// Pad with spaces to full width (ensures old content is overwritten)
|
|
914
|
+
return line.padEnd(innerWidth, ' ');
|
|
791
915
|
});
|
|
792
916
|
const content = '\n ' + truncatedLines.join('\n ');
|
|
793
917
|
panel.setContent(content);
|
|
794
918
|
}
|
|
795
919
|
/**
|
|
796
920
|
* Update operations panel
|
|
921
|
+
*
|
|
922
|
+
* Fix: Clear panel content before writing to prevent vertical artifacts
|
|
797
923
|
*/
|
|
798
924
|
function updateOperationsPanel(panel) {
|
|
799
925
|
const panelHeight = panel.height;
|
|
800
926
|
const panelWidth = panel.width;
|
|
801
927
|
const innerHeight = Math.max(1, panelHeight - 2);
|
|
802
928
|
const innerWidth = Math.max(1, panelWidth - 2);
|
|
929
|
+
// Clear panel content first (prevent vertical artifacts)
|
|
930
|
+
const blankLines = [];
|
|
931
|
+
for (let i = 0; i < innerHeight; i++) {
|
|
932
|
+
blankLines.push(' '.repeat(innerWidth));
|
|
933
|
+
}
|
|
934
|
+
const clearedContent = '\n ' + blankLines.join('\n ');
|
|
935
|
+
panel.setContent(clearedContent);
|
|
936
|
+
// Now set actual content
|
|
803
937
|
const events = feedStore.getLatest(innerHeight);
|
|
804
938
|
const lines = [];
|
|
805
939
|
if (events.length === 0) {
|
|
806
|
-
lines.push('No operations yet');
|
|
940
|
+
lines.push('No operations yet'.padEnd(innerWidth, ' '));
|
|
807
941
|
}
|
|
808
942
|
else {
|
|
809
943
|
for (const event of events.slice(-innerHeight)) {
|
|
@@ -813,7 +947,8 @@ function updateOperationsPanel(panel) {
|
|
|
813
947
|
lines.push(line.substring(0, innerWidth - 3) + '...');
|
|
814
948
|
}
|
|
815
949
|
else {
|
|
816
|
-
|
|
950
|
+
// Pad with spaces to full width
|
|
951
|
+
lines.push(line.padEnd(innerWidth, ' '));
|
|
817
952
|
}
|
|
818
953
|
}
|
|
819
954
|
}
|
|
@@ -822,10 +957,16 @@ function updateOperationsPanel(panel) {
|
|
|
822
957
|
}
|
|
823
958
|
/**
|
|
824
959
|
* Start background state updates
|
|
960
|
+
*
|
|
961
|
+
* Guard: Skip updates during resize to prevent corruption
|
|
825
962
|
*/
|
|
826
963
|
function startBackgroundUpdates(widgets, screen) {
|
|
827
964
|
const interval = setInterval(async () => {
|
|
828
965
|
try {
|
|
966
|
+
// Skip state updates during resize (prevents corruption)
|
|
967
|
+
if (isResizing) {
|
|
968
|
+
return;
|
|
969
|
+
}
|
|
829
970
|
const newState = await buildUiState(currentUiState);
|
|
830
971
|
currentUiState = newState;
|
|
831
972
|
updateAllPanels(widgets);
|