forked from enderofwings/NexusOS
feat(cli): add interactive TUI chat
Add a Textual chat interface with threaded SSE streaming, slash commands, interrupt handling, and bare nexus dispatch. Package it behind the tui extra, document usage, and cover command routing, dependencies, and headless interaction with tests.
This commit is contained in:
@@ -31,8 +31,23 @@ def run_cli(tmp_path: Path, *args: str) -> subprocess.CompletedProcess[str]:
|
||||
def test_help_exposes_portable_command_tree(tmp_path):
|
||||
result = run_cli(tmp_path, "--help")
|
||||
assert result.returncode == 0, result.stderr
|
||||
for command in ("init", "config", "provider", "doctor", "serve", "models", "chat", "monitor"):
|
||||
for command in ("init", "config", "provider", "doctor", "serve", "models", "chat", "monitor", "tui"):
|
||||
assert command in result.stdout
|
||||
assert "interactive TUI" in result.stdout or "TUI" in result.stdout
|
||||
|
||||
|
||||
def test_bare_nexus_defaults_to_tui_command():
|
||||
"""No subcommand → TUI entry (Hermes-style). Non-TTY exits 2 without launching."""
|
||||
from unittest import mock
|
||||
|
||||
from nexusos_cli.cli import build_parser, cmd_tui
|
||||
|
||||
parser = build_parser()
|
||||
args = parser.parse_args([])
|
||||
assert args.command is None # filled in by main()
|
||||
with mock.patch("sys.stdin.isatty", return_value=False), \
|
||||
mock.patch("sys.stdout.isatty", return_value=False):
|
||||
assert cmd_tui(args) == 2
|
||||
|
||||
|
||||
def test_legacy_cli_spellings_remain_compatible():
|
||||
|
||||
Reference in New Issue
Block a user