snow-flow 10.0.130 → 10.0.132
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 +62 -11
package/package.json
CHANGED
package/src/cli/cmd/tui/app.tsx
CHANGED
|
@@ -151,12 +151,8 @@ export function tui(input: {
|
|
|
151
151
|
},
|
|
152
152
|
} as Parameters<typeof render>[1]
|
|
153
153
|
|
|
154
|
-
// On Linux, @opentui
|
|
155
|
-
//
|
|
156
|
-
if (forceThread) {
|
|
157
|
-
log("[snow-flow] forcing renderer threading (OTUI_FORCE_THREAD)")
|
|
158
|
-
Object.defineProperty(process, "platform", { value: "darwin", configurable: true })
|
|
159
|
-
}
|
|
154
|
+
// On Linux, @opentui sets useThread=false which may prevent the Zig renderer
|
|
155
|
+
// from flushing output. HostedRendererDiag handles starting the loop and flushing.
|
|
160
156
|
|
|
161
157
|
try {
|
|
162
158
|
log("[snow-flow] starting tui...")
|
|
@@ -223,15 +219,70 @@ function HostedRendererDiag() {
|
|
|
223
219
|
const renderer = useRenderer()
|
|
224
220
|
onMount(() => {
|
|
225
221
|
const r = renderer as any
|
|
222
|
+
const log = (msg: string) => process.stderr.write(`[sf-diag] ${msg}\n`)
|
|
223
|
+
const realWrite = r.realStdoutWrite
|
|
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
|
+
}
|
|
226
246
|
|
|
227
|
-
// Clear screen
|
|
247
|
+
// Clear screen and start the render loop
|
|
248
|
+
write("\x1b[2J\x1b[H")
|
|
228
249
|
if (!r._isRunning) {
|
|
229
|
-
const realWrite = r.realStdoutWrite
|
|
230
|
-
if (realWrite) {
|
|
231
|
-
realWrite.call(r.stdout, "\x1b[2J\x1b[H")
|
|
232
|
-
}
|
|
233
250
|
r.start()
|
|
251
|
+
log(`started: isRunning=${r._isRunning}`)
|
|
234
252
|
}
|
|
253
|
+
|
|
254
|
+
// After 3s: report render count and buffer state
|
|
255
|
+
setTimeout(() => {
|
|
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
|
+
}
|
|
267
|
+
|
|
268
|
+
// Check root node children
|
|
269
|
+
try {
|
|
270
|
+
const root = r.root
|
|
271
|
+
log(`root children: ${root?.children?.length ?? "?"}`)
|
|
272
|
+
} catch {}
|
|
273
|
+
|
|
274
|
+
// Write visible marker so user can confirm terminal works
|
|
275
|
+
write("\x1b[5;1H\x1b[1;31m[sf-diag] terminal output works - render loop ran ${renderCount} frames\x1b[0m\r\n")
|
|
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)
|
|
235
286
|
})
|
|
236
287
|
return null
|
|
237
288
|
}
|