snow-flow 10.0.132 → 10.0.133
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/package.json +1 -1
- package/src/cli/cmd/tui/app.tsx +12 -58
package/package.json
CHANGED
package/src/cli/cmd/tui/app.tsx
CHANGED
|
@@ -222,67 +222,21 @@ function HostedRendererDiag() {
|
|
|
222
222
|
const log = (msg: string) => process.stderr.write(`[sf-diag] ${msg}\n`)
|
|
223
223
|
const realWrite = r.realStdoutWrite
|
|
224
224
|
const stdout = r.stdout
|
|
225
|
-
const write = (s: string) => realWrite?.call(stdout, s)
|
|
226
|
-
|
|
227
|
-
log(`useThread=${r._useThread} isRunning=${r._isRunning} state=${r._controlState}`)
|
|
228
|
-
log(`platform=${process.platform} altScreen=${r._useAlternateScreen}`)
|
|
229
|
-
|
|
230
|
-
// Patch renderNative to count calls and try flushing
|
|
231
|
-
let renderCount = 0
|
|
232
|
-
if (r.lib && r.rendererPtr) {
|
|
233
|
-
const origRenderNative = r.renderNative.bind(r)
|
|
234
|
-
r.renderNative = () => {
|
|
235
|
-
renderCount++
|
|
236
|
-
origRenderNative()
|
|
237
|
-
// Try dumpStdoutBuffer to flush Zig's pending render output
|
|
238
|
-
try {
|
|
239
|
-
r.lib.dumpStdoutBuffer(r.rendererPtr, BigInt(Date.now()))
|
|
240
|
-
} catch (e: any) {
|
|
241
|
-
if (renderCount === 1) log(`dumpStdoutBuffer error: ${e.message}`)
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
log("patched renderNative")
|
|
245
|
-
}
|
|
246
225
|
|
|
247
|
-
|
|
248
|
-
write("\x1b[2J\x1b[H")
|
|
249
|
-
if (!r._isRunning) {
|
|
250
|
-
r.start()
|
|
251
|
-
log(`started: isRunning=${r._isRunning}`)
|
|
252
|
-
}
|
|
226
|
+
log(`useThread=${r._useThread} isRunning=${r._isRunning}`)
|
|
253
227
|
|
|
254
|
-
//
|
|
255
|
-
|
|
256
|
-
log(`3s: renderCount=${renderCount} isRunning=${r._isRunning}`)
|
|
257
|
-
|
|
258
|
-
// Check if nextRenderBuffer has any content by reading a few cells
|
|
259
|
-
try {
|
|
260
|
-
const buf = r.nextRenderBuffer
|
|
261
|
-
const w = r.lib.getBufferWidth(buf)
|
|
262
|
-
const h = r.lib.getBufferHeight(buf)
|
|
263
|
-
log(`buffer: ${w}x${h}`)
|
|
264
|
-
} catch (e: any) {
|
|
265
|
-
log(`buffer check error: ${e.message}`)
|
|
266
|
-
}
|
|
228
|
+
// Clear screen for clean rendering
|
|
229
|
+
realWrite?.call(stdout, "\x1b[2J\x1b[H")
|
|
267
230
|
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
// Try fs.writeSync to test raw POSIX write(1, ...)
|
|
278
|
-
try {
|
|
279
|
-
const { writeSync } = require("fs")
|
|
280
|
-
writeSync(1, "\x1b[7;1H\x1b[1;32m[sf-diag] fs.writeSync(1) works\x1b[0m\r\n")
|
|
281
|
-
log("fs.writeSync(1) succeeded")
|
|
282
|
-
} catch (e: any) {
|
|
283
|
-
log(`fs.writeSync error: ${e.message}`)
|
|
284
|
-
}
|
|
285
|
-
}, 3000)
|
|
231
|
+
// Start the render loop (it doesn't auto-start on Linux)
|
|
232
|
+
if (!r._isRunning) r.start()
|
|
233
|
+
|
|
234
|
+
// Key fix: enable Zig output thread AFTER renderer is safely initialized.
|
|
235
|
+
// On Linux, @opentui creates the renderer with useThread=false.
|
|
236
|
+
// The setter calls lib.setUseThread(ptr, true) which starts the Zig
|
|
237
|
+
// thread that drains the render output buffer and writes to fd 1.
|
|
238
|
+
r.useThread = true
|
|
239
|
+
log(`after useThread=true: useThread=${r._useThread}`)
|
|
286
240
|
})
|
|
287
241
|
return null
|
|
288
242
|
}
|