The built-bin fail-loud test needs the TTY refusal before Loader boot (a compose-time throw is logged per-entry, not rethrown); the PTY driver drops COLORTERM so a developer's truecolor shell cannot flip the banner to the gradient path mid-assertion; the scripted fixture persists raw JSONL so the smoke's system-prompt inspection can read the log.
28 lines
1.2 KiB
JavaScript
28 lines
1.2 KiB
JavaScript
#!/usr/bin/env node
|
|
/**
|
|
* Boot a TUI app from a leaf `cordis.yml`; usage is `dsh-tui-demo [config]`, defaulting to the
|
|
* cwd file. Shared `.env` loading, fail-loud Loader guards, and settled-tree boot live in
|
|
* dsh-app-boot. The tui-agent and cordis-agent demos invoke this bin with their own leaf configs.
|
|
* @module @deepseek-ai/dsh-tui-demo/bin
|
|
*/
|
|
|
|
import { boot, installFailLoud, loadEnv, resolveConfigPath } from '@deepseek-ai/dsh-app-boot'
|
|
|
|
const NAME = 'dsh-tui-demo'
|
|
|
|
/* v8 ignore start -- thin self-executing composition over the unit-tested
|
|
dsh-app-boot helpers; exercised end-to-end by the tui-agent PTY smoke and
|
|
the built-bin fail-loud smoke */
|
|
// Refuse pipes BEFORE booting: a compose-time throw inside the Loader tree is
|
|
// logged per-entry rather than rethrown, so a piped launch would otherwise
|
|
// settle into an idle UI-less process instead of exiting nonzero.
|
|
if (!process.stdin.isTTY || !process.stdout.isTTY) {
|
|
process.stderr.write(`${NAME}: the TUI requires stdin and stdout to be interactive TTYs; `
|
|
+ 'use the one-shot dsh-cli-demo bin for pipes and automation\n')
|
|
process.exit(1)
|
|
}
|
|
installFailLoud(NAME)
|
|
loadEnv(NAME)
|
|
await boot(NAME, resolveConfigPath(process.argv[2] ?? './cordis.yml', undefined))
|
|
/* v8 ignore stop */
|