@aiwayds/dsh-tui-pi 0.7.1 → 0.7.2

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/lib/tui.js CHANGED
@@ -36,7 +36,12 @@ export function startTui(options = {}) {
36
36
  // where the pane background belongs to the multiplexer. DSH_TUI_TRANSPARENT=1
37
37
  // opts back into the old see-through canvas for users who want their
38
38
  // terminal theme to stay visible.
39
- const paintCanvas = process.env.DSH_TUI_TRANSPARENT !== '1';
39
+ // Feature-detected: the repo patches pi-tui via pnpm patchedDependencies,
40
+ // which never propagates to consumers — an unpatched pi-tui has no
41
+ // setCanvasBackground, and calling it would crash TUI startup into a
42
+ // silent blank screen. Degrade to the transparent canvas instead.
43
+ const paintCanvas = process.env.DSH_TUI_TRANSPARENT !== '1'
44
+ && typeof tui.setCanvasBackground === 'function';
40
45
  if (paintCanvas)
41
46
  tui.setCanvasBackground(ansiBg(themeRef.palette.canvas));
42
47
  // ------------------------------------------------------------- component tree --
package/lib/tui.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"tui.js","sourceRoot":"","sources":["../src/tui.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tui.js","sourceRoot":"","sources":["../src/tui.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aiwayds/dsh-tui-pi",
3
- "version": "0.7.1",
3
+ "version": "0.7.2",
4
4
  "description": "pi-style terminal UI for DeepSeek Harness (dsh) — pi-tui look & feel, dsh slash commands, GitHub light/dark themes, powerline footer",
5
5
  "repository": {
6
6
  "type": "git",
@@ -45,8 +45,8 @@
45
45
  "test": "node --test test/*.test.mjs"
46
46
  },
47
47
  "dependencies": {
48
- "@aiwayds/dsh-dcp": "latest",
49
- "@aiwayds/dsh-subagent-registry": "latest",
48
+ "@aiwayds/dsh-dcp": "0.4.0",
49
+ "@aiwayds/dsh-subagent-registry": "0.1.3",
50
50
  "@earendil-works/pi-tui": "0.84.2"
51
51
  },
52
52
  "devDependencies": {
@@ -0,0 +1,612 @@
1
+ #!/usr/bin/env bash
2
+ # diagnose-container-tui.sh — pipe this into a bare Ubuntu 22 container to
3
+ # diagnose why dsh-tui-pi shows a blank TUI after plugin install.
4
+ #
5
+ # Usage:
6
+ # podman run --rm -i ubuntu:22.04 bash < scripts/diagnose-container-tui.sh
7
+ #
8
+ # Or with docker:
9
+ # docker run --rm -i ubuntu:22.04 bash < scripts/diagnose-container-tui.sh
10
+ #
11
+ # The script is self-contained: it installs Node 22, pnpm, dsh 0.1.0-rc.7,
12
+ # and @aiwayds/dsh-tui-pi@0.7.1, then runs a battery of diagnostic checks.
13
+ # No code is modified — this is purely diagnostic.
14
+
15
+ set -uo pipefail
16
+
17
+ # ---------------------------------------------------------------------------
18
+ # helpers
19
+ # ---------------------------------------------------------------------------
20
+ PASS=0
21
+ FAIL=0
22
+ WARN=0
23
+ STEP=0
24
+
25
+ banner() {
26
+ printf '\n%s\n' "================================================================"
27
+ printf ' %s\n' "$1"
28
+ printf '%s\n\n' "================================================================"
29
+ }
30
+ step() {
31
+ STEP=$((STEP+1))
32
+ printf '\n--- [%d] %s ---\n' "$STEP" "$1"
33
+ }
34
+ ok() { printf ' [OK] %s\n' "$1"; PASS=$((PASS+1)); }
35
+ fail() { printf ' [FAIL] %s\n' "$1"; FAIL=$((FAIL+1)); }
36
+ warn() { printf ' [WARN] %s\n' "$1"; WARN=$((WARN+1)); }
37
+ info() { printf ' [INFO] %s\n' "$1"; }
38
+
39
+ # ---------------------------------------------------------------------------
40
+ banner "dsh-tui-pi container TUI diagnostics"
41
+ info "Date: $(date -u '+%Y-%m-%d %H:%M:%S UTC')"
42
+ info "Host: $(uname -a)"
43
+ # ---------------------------------------------------------------------------
44
+
45
+ # ===== 0. Environment setup =====
46
+ step "Installing Node 22 (nodesource) + pnpm + utilities"
47
+
48
+ apt-get update -qq >/dev/null 2>&1
49
+ # script(1) is in bsdutils on Ubuntu; some images have it already
50
+ apt-get install -y -qq curl ca-certificates bsdutils >/dev/null 2>&1 || true
51
+
52
+ # nodesource Node 22
53
+ if ! command -v node &>/dev/null; then
54
+ curl -fsSL https://deb.nodesource.com/setup_22.x | bash - >/dev/null 2>&1
55
+ apt-get install -y -qq nodejs >/dev/null 2>&1
56
+ fi
57
+ info "node $(node --version), npm $(npm --version)"
58
+
59
+ if ! command -v pnpm &>/dev/null; then
60
+ npm install -g pnpm >/dev/null 2>&1
61
+ fi
62
+ info "pnpm $(pnpm --version)"
63
+
64
+ # TERM for TUI rendering
65
+ export TERM=xterm-256color
66
+ info "TERM=$TERM"
67
+
68
+ # ===== 1. Install dsh =====
69
+ step "Installing @deepseek-ai/dsh@0.1.0-rc.7"
70
+
71
+ npm install -g @deepseek-ai/dsh@0.1.0-rc.7 2>&1 | tail -5
72
+ if command -v dsh &>/dev/null; then
73
+ ok "dsh on PATH: $(which dsh)"
74
+ info "dsh --version: $(dsh --version 2>&1 || echo '(flag not supported)')"
75
+ else
76
+ fail "dsh not found on PATH after install"
77
+ echo "ABORT: cannot continue without dsh"
78
+ exit 1
79
+ fi
80
+
81
+ # ===== 2. Install dsh-tui-pi plugin =====
82
+ step "Installing @aiwayds/dsh-tui-pi@0.7.1 into profile 'tui'"
83
+
84
+ INSTALL_OUTPUT=$(dsh plugin --profile tui add @aiwayds/dsh-tui-pi@0.7.1 2>&1) || true
85
+ INSTALL_EXIT=$?
86
+ info "dsh plugin add exit code: $INSTALL_EXIT"
87
+ echo "$INSTALL_OUTPUT" | head -30 | sed 's/^/ /'
88
+ if [ "$INSTALL_EXIT" -eq 0 ]; then
89
+ ok "Plugin install reported success (exit 0)"
90
+ else
91
+ fail "Plugin install failed (exit $INSTALL_EXIT)"
92
+ fi
93
+
94
+ # ===== 3. Profile directory structure =====
95
+ step "Profile directory structure"
96
+
97
+ PROFILE_DIR="$HOME/.dsh/profiles/tui"
98
+ if [ -d "$PROFILE_DIR" ]; then
99
+ ok "Profile dir exists: $PROFILE_DIR"
100
+ info "Top-level contents:"
101
+ ls -la "$PROFILE_DIR/" 2>&1 | sed 's/^/ /'
102
+ else
103
+ fail "Profile dir does not exist: $PROFILE_DIR"
104
+ fi
105
+
106
+ # ===== 4. Check profile bundles =====
107
+ step "Profile bundles / cordis.patch.yml registration"
108
+
109
+ FOUND_BUNDLES=0
110
+ for f in "$PROFILE_DIR/dsh.profile" "$PROFILE_DIR/dsh.profile.yml" "$PROFILE_DIR/dsh.profile.yaml"; do
111
+ if [ -f "$f" ]; then
112
+ ok "Found profile config: $f"
113
+ echo " --- contents ---"
114
+ cat "$f" 2>&1 | sed 's/^/ /'
115
+ echo " --- end ---"
116
+ FOUND_BUNDLES=1
117
+ fi
118
+ done
119
+
120
+ # Also check package.json for bundle references
121
+ if [ -f "$PROFILE_DIR/package.json" ]; then
122
+ info "package.json dependencies:"
123
+ node -e "
124
+ const pkg = JSON.parse(require('fs').readFileSync('$PROFILE_DIR/package.json','utf8'));
125
+ const deps = {...(pkg.dependencies||{}), ...(pkg.devDependencies||{})};
126
+ for (const [k,v] of Object.entries(deps)) {
127
+ console.log(' ' + k + ': ' + v);
128
+ }
129
+ " 2>&1 || true
130
+
131
+ # Check if dsh-tui-pi is in dependencies
132
+ if node -e "
133
+ const pkg = JSON.parse(require('fs').readFileSync('$PROFILE_DIR/package.json','utf8'));
134
+ const deps = {...(pkg.dependencies||{}), ...(pkg.devDependencies||{})};
135
+ const has = deps['@aiwayds/dsh-tui-pi'] || deps['dsh-tui-pi'];
136
+ process.exit(has ? 0 : 1);
137
+ " 2>/dev/null; then
138
+ ok "dsh-tui-pi is listed in profile package.json dependencies"
139
+ else
140
+ fail "dsh-tui-pi NOT found in profile package.json dependencies"
141
+ fi
142
+ fi
143
+
144
+ if [ "$FOUND_BUNDLES" -eq 0 ]; then
145
+ # Check if cordis.patch.yml was copied into the profile
146
+ if find "$PROFILE_DIR" -name "cordis.patch.yml" 2>/dev/null | head -1 | grep -q .; then
147
+ ok "cordis.patch.yml found in profile tree"
148
+ else
149
+ warn "No dsh.profile file and no cordis.patch.yml found in profile"
150
+ info "dsh-tui-pi registers via cordis.patch.yml (insert id: tui-pi)"
151
+ info "The plugin loader must discover this file in node_modules"
152
+ fi
153
+ fi
154
+
155
+ # ===== 5. Check node_modules for plugin package =====
156
+ step "Plugin package in node_modules"
157
+
158
+ TUI_PKG_DIR=""
159
+ for candidate in \
160
+ "$PROFILE_DIR/node_modules/@aiwayds/dsh-tui-pi" \
161
+ "$PROFILE_DIR/node_modules/dsh-tui-pi"; do
162
+ if [ -d "$candidate" ]; then
163
+ ok "Plugin package found: $candidate"
164
+ TUI_PKG_DIR="$candidate"
165
+ info "Version: $(node -e "console.log(JSON.parse(require('fs').readFileSync('$candidate/package.json','utf8')).version)" 2>&1 || echo 'unreadable')"
166
+ info "lib/ contents:"
167
+ ls "$candidate/lib/" 2>&1 | head -15 | sed 's/^/ /'
168
+ break
169
+ fi
170
+ done
171
+ if [ -z "$TUI_PKG_DIR" ]; then
172
+ fail "dsh-tui-pi package NOT found in node_modules"
173
+ fi
174
+
175
+ # ===== 6. cordis.patch.yml verification =====
176
+ step "cordis.patch.yml content (bundle registration id)"
177
+
178
+ if [ -n "$TUI_PKG_DIR" ] && [ -f "$TUI_PKG_DIR/cordis.patch.yml" ]; then
179
+ ok "cordis.patch.yml found in plugin package"
180
+ echo " --- contents ---"
181
+ cat "$TUI_PKG_DIR/cordis.patch.yml" | sed 's/^/ /'
182
+ echo " --- end ---"
183
+
184
+ if grep -q "tui-pi" "$TUI_PKG_DIR/cordis.patch.yml"; then
185
+ ok "Bundle id 'tui-pi' present in patch"
186
+ else
187
+ fail "Bundle id 'tui-pi' NOT found in cordis.patch.yml"
188
+ fi
189
+ else
190
+ fail "cordis.patch.yml NOT found in plugin package"
191
+ fi
192
+
193
+ # ===== 7. @deepseek-ai closure symlinks =====
194
+ step "@deepseek-ai closure (critical: single cordis instance contract)"
195
+
196
+ # The consumer runtime closure: ~/.dsh/profiles/node_modules/@deepseek-ai/
197
+ GLOBAL_CLOSURE="$HOME/.dsh/profiles/node_modules/@deepseek-ai"
198
+ if [ -d "$GLOBAL_CLOSURE" ]; then
199
+ ok "Global closure exists: $GLOBAL_CLOSURE"
200
+ info "Contents:"
201
+ ls -la "$GLOBAL_CLOSURE/" 2>&1 | sed 's/^/ /'
202
+
203
+ # Check if cordis is symlink or physical (AGENTS.md iron rule 8)
204
+ CORDIS_PATH="$GLOBAL_CLOSURE/cordis"
205
+ if [ -e "$CORDIS_PATH" ]; then
206
+ if [ -L "$CORDIS_PATH" ]; then
207
+ ok "cordis is a symlink (correct — single closure)"
208
+ info " -> $(readlink "$CORDIS_PATH")"
209
+ else
210
+ fail "cordis is a PHYSICAL directory (WRONG — causes dual cordis instances)"
211
+ info " This triggers 'Cannot read properties of undefined (reading prepare)' crash"
212
+ fi
213
+ else
214
+ fail "cordis NOT found in global closure"
215
+ fi
216
+ else
217
+ warn "Global closure dir not found: $GLOBAL_CLOSURE"
218
+ info "Checking plugin-local @deepseek-ai..."
219
+ PLUGIN_CLOSURE="${TUI_PKG_DIR:+$TUI_PKG_DIR/node_modules/@deepseek-ai}"
220
+ if [ -n "$PLUGIN_CLOSURE" ] && [ -d "$PLUGIN_CLOSURE" ]; then
221
+ info "Plugin-local @deepseek-ai found: $PLUGIN_CLOSURE"
222
+ ls -la "$PLUGIN_CLOSURE/" 2>&1 | sed 's/^/ /'
223
+ else
224
+ fail "No @deepseek-ai found anywhere — plugin cannot resolve cordis types"
225
+ fi
226
+ fi
227
+
228
+ # dsh global install's own closure
229
+ DSH_BIN=$(which dsh 2>/dev/null || echo "")
230
+ if [ -n "$DSH_BIN" ]; then
231
+ DSH_REAL=$(realpath "$DSH_BIN" 2>/dev/null || echo "$DSH_BIN")
232
+ DSH_GLOBAL_CLOSURE="$(dirname "$(dirname "$DSH_REAL")")/node_modules/@deepseek-ai"
233
+ if [ -d "$DSH_GLOBAL_CLOSURE" ]; then
234
+ ok "dsh global closure: $DSH_GLOBAL_CLOSURE"
235
+ info "Contents:"
236
+ ls "$DSH_GLOBAL_CLOSURE/" 2>&1 | sed 's/^/ /'
237
+ else
238
+ warn "dsh global closure not at expected path: $DSH_GLOBAL_CLOSURE"
239
+ fi
240
+ fi
241
+
242
+ # ===== 8. Node module resolution test =====
243
+ step "Module resolution: can the plugin resolve @deepseek-ai/cordis?"
244
+
245
+ if [ -n "$TUI_PKG_DIR" ]; then
246
+ RESOLVE_TEST=$(node -e "
247
+ try {
248
+ const path = require.resolve('@deepseek-ai/cordis', { paths: ['$TUI_PKG_DIR'] });
249
+ console.log('RESOLVED: ' + path);
250
+ } catch (e) {
251
+ console.log('FAILED: ' + e.message);
252
+ }
253
+ " 2>&1)
254
+ info "@deepseek-ai/cordis from plugin dir:"
255
+ echo " $RESOLVE_TEST"
256
+
257
+ if echo "$RESOLVE_TEST" | grep -q "RESOLVED"; then
258
+ ok "@deepseek-ai/cordis resolves from plugin directory"
259
+ else
260
+ fail "@deepseek-ai/cordis does NOT resolve from plugin directory"
261
+ info "This is the most common root cause of blank TUI"
262
+ fi
263
+
264
+ # Also check pi-tui
265
+ PIUI_TEST=$(node -e "
266
+ try {
267
+ const path = require.resolve('@earendil-works/pi-tui', { paths: ['$TUI_PKG_DIR'] });
268
+ console.log('RESOLVED: ' + path);
269
+ } catch (e) {
270
+ console.log('FAILED: ' + e.message);
271
+ }
272
+ " 2>&1)
273
+ info "@earendil-works/pi-tui from plugin dir:"
274
+ echo " $PIUI_TEST"
275
+
276
+ if echo "$PIUI_TEST" | grep -q "RESOLVED"; then
277
+ ok "@earendil-works/pi-tui resolves"
278
+ else
279
+ fail "@earendil-works/pi-tui does NOT resolve"
280
+ fi
281
+ fi
282
+
283
+ # ===== 9. pi-tui native bindings (informational — Linux degrades gracefully) =====
284
+ step "pi-tui native bindings (informational — Linux has no native helpers)"
285
+
286
+ if [ -n "$TUI_PKG_DIR" ]; then
287
+ PIUI_PKG=$(node -e "
288
+ try { console.log(require.resolve('@earendil-works/pi-tui/package.json', { paths: ['$TUI_PKG_DIR'] }).replace('/package.json','')); }
289
+ catch { console.log(''); }
290
+ " 2>/dev/null || echo "")
291
+
292
+ if [ -n "$PIUI_PKG" ] && [ -d "$PIUI_PKG" ]; then
293
+ info "pi-tui package: $PIUI_PKG"
294
+ if [ -d "$PIUI_PKG/native" ]; then
295
+ info "Native platforms shipped:"
296
+ ls "$PIUI_PKG/native/" 2>&1 | sed 's/^/ /'
297
+
298
+ # Check linux availability
299
+ if [ -d "$PIUI_PKG/native/linux" ]; then
300
+ ok "Linux native bindings exist"
301
+ else
302
+ info "No linux native bindings — but this is EXPECTED and harmless"
303
+ info "pi-tui native-modifiers.js returns undefined on process.platform !== 'darwin'/'win32'"
304
+ info "The native helpers are only for darwin modifier keys and win32 console mode"
305
+ info "Linux terminal input works without native bindings (process.stdin raw mode)"
306
+ fi
307
+ fi
308
+ fi
309
+ fi
310
+
311
+ # ===== 10. dsh --help — command registration check =====
312
+ step "dsh --profile tui --help (are TUI commands visible?)"
313
+
314
+ HELP_OUTPUT=$(dsh --profile tui --help 2>&1) || true
315
+ echo "$HELP_OUTPUT" | head -30 | sed 's/^/ /'
316
+
317
+ TUI_CMDS=0
318
+ for cmd in "/login" "/logout" "/settings" "/model" "/theme" "/session" "/resume" "/hotkeys" "/reload"; do
319
+ if echo "$HELP_OUTPUT" | grep -qi "$cmd"; then
320
+ ok "Command in help: $cmd"
321
+ TUI_CMDS=$((TUI_CMDS+1))
322
+ fi
323
+ done
324
+ if [ "$TUI_CMDS" -eq 0 ]; then
325
+ fail "No dsh-tui-pi commands found in --help output"
326
+ info "This suggests the plugin is NOT being loaded by dsh"
327
+ else
328
+ ok "$TUI_CMDS dsh-tui-pi commands found in --help"
329
+ fi
330
+
331
+ # ===== 11. dsh --profile tui --version =====
332
+ step "dsh --profile tui --version (non-interactive sanity check)"
333
+
334
+ VERSION_OUTPUT=$(dsh --profile tui --version 2>&1) || true
335
+ info "Output:"
336
+ echo "$VERSION_OUTPUT" | sed 's/^/ /'
337
+ if echo "$VERSION_OUTPUT" | grep -qi "dsh-tui-pi\|0\.7\.1\|tui-pi"; then
338
+ ok "Version output mentions dsh-tui-pi or version"
339
+ else
340
+ warn "Version output does not mention dsh-tui-pi"
341
+ fi
342
+
343
+ # ===== 12. Check if dsh exits cleanly without TTY =====
344
+ step "dsh --profile tui exit behavior (no TTY, 5s timeout)"
345
+
346
+ EXIT_LOG="/tmp/dsh-exit-test.log"
347
+ START_TS=$(date +%s)
348
+ timeout 5 dsh --profile tui </dev/null >"$EXIT_LOG" 2>&1 || true
349
+ EXIT_CODE=$?
350
+ END_TS=$(date +%s)
351
+ DURATION=$((END_TS - START_TS))
352
+
353
+ info "Exit code: $EXIT_CODE (after ${DURATION}s)"
354
+ info "Output bytes: $(wc -c < "$EXIT_LOG")"
355
+
356
+ if [ "$EXIT_CODE" -eq 124 ]; then
357
+ info "Exit 124 = timeout (TUI started but did not exit on its own)"
358
+ info "This is expected: TUI waits for user input"
359
+ ok "TUI process is alive (timeout = it ran for 5 seconds)"
360
+ elif [ "$EXIT_CODE" -eq 0 ]; then
361
+ warn "Exit 0 = TUI exited immediately without error"
362
+ info "Possible cause: TUI detects no TTY and exits gracefully"
363
+ else
364
+ warn "Exit $EXIT_CODE = TUI exited with error"
365
+ fi
366
+
367
+ if [ -s "$EXIT_LOG" ]; then
368
+ info "Exit test output:"
369
+ cat "$EXIT_LOG" | head -30 | cat -v | sed 's/^/ /'
370
+ else
371
+ info "(no output captured)"
372
+ fi
373
+
374
+ # ===== 13. script command capture =====
375
+ step "Terminal capture with 'script -q' (PTY emulation)"
376
+
377
+ SCRIPT_LOG="/tmp/dsh-tui-script.log"
378
+ # script provides a pseudo-TTY, which may let the TUI render
379
+ timeout 5 script -q "$SCRIPT_LOG" -c "dsh --profile tui" </dev/null 2>&1 || true
380
+
381
+ SCRIPT_SIZE=$(wc -c < "$SCRIPT_LOG" 2>/dev/null || echo 0)
382
+ info "script log size: $SCRIPT_SIZE bytes"
383
+
384
+ if [ "$SCRIPT_SIZE" -gt 0 ]; then
385
+ ok "script captured output ($SCRIPT_SIZE bytes)"
386
+ info "First 50 lines (cat -v shows escape sequences):"
387
+ head -50 "$SCRIPT_LOG" | cat -v | sed 's/^/ /'
388
+
389
+ # Check for alt-screen activation: ESC[?1049h
390
+ if cat -v "$SCRIPT_LOG" | grep -q '\[?1049h\|\[2J\|\[H'; then
391
+ ok "Alt-screen / cursor-home escape sequences detected"
392
+ else
393
+ info "No alt-screen escapes (TUI may not have entered alt-screen mode)"
394
+ fi
395
+
396
+ # Strip escape sequences and check for visible text
397
+ VISIBLE=$(sed 's/\x1b\[[0-9;]*[a-zA-Z]//g; s/\x1b\][^\x07]*\x07//g; s/\x1b[()][AB012]//g' "$SCRIPT_LOG" | tr -d '[:cntrl:]' | tr -s ' ')
398
+ if [ -n "$VISIBLE" ] && [ ${#VISIBLE} -gt 10 ]; then
399
+ ok "Visible text content found after stripping escapes"
400
+ info "Cleaned text (first 300 chars):"
401
+ echo "$VISIBLE" | head -c 300 | sed 's/^/ /'
402
+ else
403
+ fail "No visible text content — TUI output is blank or all-escape"
404
+ info "This confirms the blank TUI symptom"
405
+ fi
406
+ else
407
+ fail "script captured zero bytes — TUI produced no output at all"
408
+ fi
409
+
410
+ # ===== 14. Direct pipe capture =====
411
+ step "Direct pipe capture: dsh --profile tui 2>&1 (no PTY)"
412
+
413
+ PIPE_LOG="/tmp/dsh-tui-pipe.log"
414
+ timeout 5 dsh --profile tui </dev/null >"$PIPE_LOG" 2>&1 || true
415
+
416
+ PIPE_SIZE=$(wc -c < "$PIPE_LOG" 2>/dev/null || echo 0)
417
+ info "Pipe log size: $PIPE_SIZE bytes"
418
+
419
+ if [ "$PIPE_SIZE" -gt 0 ]; then
420
+ ok "Pipe captured output ($PIPE_SIZE bytes)"
421
+ info "Raw output (cat -v):"
422
+ cat -v "$PIPE_LOG" | head -50 | sed 's/^/ /'
423
+
424
+ # Check for TUI content markers
425
+ if cat "$PIPE_LOG" | grep -qi "dsh-tui-pi\|pi-tui\|whale\|DSH TUI\|welcome"; then
426
+ ok "TUI content markers found in pipe output"
427
+ else
428
+ info "No TUI content markers in pipe output"
429
+ fi
430
+ else
431
+ fail "Pipe captured zero bytes — TUI is silent without a PTY"
432
+ fi
433
+
434
+ # ===== 15. stderr-only capture =====
435
+ step "Stderr capture (error diagnostics)"
436
+
437
+ STDERR_LOG="/tmp/dsh-stderr.log"
438
+ timeout 5 dsh --profile tui </dev/null 2>"$STDERR_LOG" || true
439
+
440
+ STDERR_SIZE=$(wc -c < "$STDERR_LOG" 2>/dev/null || echo 0)
441
+ info "Stderr size: $STDERR_SIZE bytes"
442
+
443
+ if [ "$STDERR_SIZE" -gt 0 ]; then
444
+ warn "Stderr has output (may contain errors):"
445
+ cat "$STDERR_LOG" | head -40 | sed 's/^/ /'
446
+ else
447
+ info "Stderr is empty (no error output)"
448
+ fi
449
+
450
+ # ===== 16. DSH home directory inspection =====
451
+ step "DSH home directory (~/.dsh/)"
452
+
453
+ if [ -d "$HOME/.dsh" ]; then
454
+ ok "$HOME/.dsh exists"
455
+ info "Top-level:"
456
+ ls -la "$HOME/.dsh/" 2>&1 | sed 's/^/ /'
457
+
458
+ # Log files
459
+ info "Looking for log files..."
460
+ LOGS=$(find "$HOME/.dsh" -maxdepth 3 \( -name "*.log" -o -name "debug*" -o -name "error*" -o -name "crash*" \) 2>/dev/null)
461
+ if [ -n "$LOGS" ]; then
462
+ ok "Log files found:"
463
+ echo "$LOGS" | sed 's/^/ /'
464
+ # Show last few lines of each log
465
+ for lf in $LOGS; do
466
+ info "--- $lf (last 10 lines) ---"
467
+ tail -10 "$lf" 2>&1 | sed 's/^/ /'
468
+ done
469
+ else
470
+ info "No log files found in ~/.dsh/"
471
+ fi
472
+
473
+ # settings.yaml
474
+ if [ -f "$HOME/.dsh/settings.yaml" ]; then
475
+ ok "settings.yaml exists"
476
+ info "Contents:"
477
+ cat "$HOME/.dsh/settings.yaml" | sed 's/^/ /'
478
+ else
479
+ warn "No settings.yaml (fresh install, no config yet)"
480
+ fi
481
+
482
+ # .credentials.yaml
483
+ if [ -f "$HOME/.dsh/.credentials.yaml" ]; then
484
+ ok ".credentials.yaml exists"
485
+ else
486
+ warn "No .credentials.yaml — /login may be required"
487
+ info "TUI might show blank if it blocks on authentication"
488
+ fi
489
+ else
490
+ fail "$HOME/.dsh does not exist"
491
+ fi
492
+
493
+ # ===== 17. NODE_DEBUG=module trace =====
494
+ step "Module loading trace (NODE_DEBUG=module)"
495
+
496
+ MODULE_LOG="/tmp/dsh-module-debug.log"
497
+ timeout 5 NODE_DEBUG=module dsh --profile tui </dev/null 2>"$MODULE_LOG" || true
498
+
499
+ MODULE_SIZE=$(wc -c < "$MODULE_LOG" 2>/dev/null || echo 0)
500
+ info "Module debug log: $MODULE_SIZE bytes"
501
+
502
+ if [ "$MODULE_SIZE" -gt 0 ]; then
503
+ # Check for plugin loading
504
+ if grep -i "dsh-tui-pi\|tui-pi\|@aiwayds" "$MODULE_LOG" >/dev/null 2>&1; then
505
+ ok "Module trace mentions dsh-tui-pi"
506
+ grep -i "dsh-tui-pi\|tui-pi\|@aiwayds" "$MODULE_LOG" | head -5 | sed 's/^/ /'
507
+ else
508
+ fail "Module trace does NOT mention dsh-tui-pi — plugin never loaded"
509
+ fi
510
+
511
+ # Check for errors
512
+ ERRORS=$(grep -i "error\|ERR_\|MODULE_NOT_FOUND\|cannot find\|not found" "$MODULE_LOG" 2>/dev/null | head -10)
513
+ if [ -n "$ERRORS" ]; then
514
+ warn "Errors in module debug:"
515
+ echo "$ERRORS" | sed 's/^/ /'
516
+ fi
517
+ else
518
+ warn "Module debug log empty"
519
+ fi
520
+
521
+ # ===== 18. dsh profile list =====
522
+ step "dsh profile list"
523
+
524
+ PROFILE_LIST=$(dsh profile list 2>&1) || true
525
+ echo "$PROFILE_LIST" | sed 's/^/ /'
526
+ if echo "$PROFILE_LIST" | grep -qi "tui"; then
527
+ ok "Profile 'tui' in profile list"
528
+ else
529
+ warn "Profile 'tui' not in profile list"
530
+ fi
531
+
532
+ # ===== 19. dsh plugin list =====
533
+ step "dsh plugin --profile tui list"
534
+
535
+ PLUGIN_LIST=$(dsh plugin --profile tui list 2>&1) || true
536
+ echo "$PLUGIN_LIST" | sed 's/^/ /'
537
+ if echo "$PLUGIN_LIST" | grep -qi "dsh-tui-pi\|tui-pi\|@aiwayds"; then
538
+ ok "dsh-tui-pi in plugin list"
539
+ else
540
+ fail "dsh-tui-pi NOT in plugin list"
541
+ fi
542
+
543
+ # ===== 20. Full plugin node_modules listing =====
544
+ step "Full node_modules listing for @deepseek-ai and @earendil-works"
545
+
546
+ if [ -n "$TUI_PKG_DIR" ]; then
547
+ info "@deepseek-ai in plugin node_modules:"
548
+ ls -la "$TUI_PKG_DIR/node_modules/@deepseek-ai/" 2>&1 | sed 's/^/ /' || info " (not found)"
549
+
550
+ info "@earendil-works in plugin node_modules:"
551
+ ls -la "$TUI_PKG_DIR/node_modules/@earendil-works/" 2>&1 | sed 's/^/ /' || info " (not found)"
552
+ fi
553
+
554
+ # Also check the profile-level node_modules
555
+ info "@deepseek-ai in profile node_modules:"
556
+ ls -la "$PROFILE_DIR/node_modules/@deepseek-ai/" 2>&1 | sed 's/^/ /' || info " (not found)"
557
+
558
+ # ===== 21. strace-lite: check if process opens any files =====
559
+ step "Process activity trace (strace-lite via /proc)"
560
+
561
+ # On Ubuntu, we can check /proc for the dsh process
562
+ timeout 3 bash -c '
563
+ dsh --profile tui </dev/null &
564
+ PID=$!
565
+ sleep 1
566
+ if [ -d "/proc/$PID" ]; then
567
+ echo " [INFO] dsh process alive as PID $PID"
568
+ echo " [INFO] Open file descriptors:"
569
+ ls -la /proc/$PID/fd 2>/dev/null | tail -20 | sed "s/^/ /"
570
+ echo " [INFO] Memory maps (node modules loaded):"
571
+ grep "node_modules\|pi-tui\|dsh-tui" /proc/$PID/maps 2>/dev/null | head -10 | sed "s/^/ /"
572
+ else
573
+ echo " [INFO] dsh process already exited"
574
+ fi
575
+ wait $PID 2>/dev/null || true
576
+ ' 2>&1 || true
577
+
578
+ # ===== Summary =====
579
+ banner "DIAGNOSTIC SUMMARY"
580
+ echo ""
581
+ printf " PASS: %d\n" "$PASS"
582
+ printf " FAIL: %d\n" "$FAIL"
583
+ printf " WARN: %d\n" "$WARN"
584
+ echo ""
585
+
586
+ if [ "$FAIL" -gt 0 ]; then
587
+ echo " ISSUES DETECTED — review [FAIL] items above."
588
+ echo ""
589
+ echo " Common root causes for blank TUI in containers:"
590
+ echo " 1. @deepseek-ai/cordis not resolvable from plugin (closure broken)"
591
+ echo " 2. Plugin not registered in profile bundles (cordis.patch.yml missing)"
592
+ echo " 3. No TTY — pi-tui TuiAltScreen requires a real terminal"
593
+ echo " (podman run -i without -t gives stdin but no PTY)"
594
+ echo " 4. Missing .credentials.yaml — TUI may block waiting for /login"
595
+ echo " 5. pi-tui process.platform check fails silently on unexpected env"
596
+ echo ""
597
+ echo " NOTE: pi-tui native bindings (darwin-modifiers, win32-console-mode)"
598
+ echo " are NOT needed on Linux — native-modifiers.js returns undefined"
599
+ echo " gracefully for platform !== 'darwin'/'win32'. This is NOT the cause."
600
+ else
601
+ echo " All checks passed."
602
+ echo " Blank TUI is likely a rendering issue (no PTY or terminal detection)."
603
+ fi
604
+
605
+ echo ""
606
+ echo " Diagnostic logs:"
607
+ echo " /tmp/dsh-tui-script.log (script PTY capture)"
608
+ echo " /tmp/dsh-tui-pipe.log (direct pipe capture)"
609
+ echo " /tmp/dsh-stderr.log (stderr)"
610
+ echo " /tmp/dsh-module-debug.log (NODE_DEBUG=module)"
611
+ echo " /tmp/dsh-exit-test.log (exit behavior)"
612
+ echo ""