feat: CLI entry point — mcp, tui, list, open, help subcommands

This commit is contained in:
Mortdecai
2026-03-29 19:14:49 -04:00
parent 707e8b7e31
commit 382e083471
+88
View File
@@ -0,0 +1,88 @@
"""CLI entry point for kitty-workbench."""
from __future__ import annotations
import argparse
import sys
from kitty_workbench import __version__
def cmd_mcp(args):
"""Start the MCP server on stdio."""
from kitty_workbench.server import create_mcp_server
mcp = create_mcp_server()
mcp.run(transport="stdio")
def cmd_tui(args):
"""Launch the Textual TUI app (called by backends, not typically user-facing)."""
from kitty_workbench.tui import KittWorkbenchApp
app = KittWorkbenchApp(socket_path=args.socket)
app.run()
def cmd_list(args):
"""List all projects."""
from kitty_workbench.project import list_projects
projects = list_projects()
if not projects:
print("No projects found in ~/Kitty-Workbench/")
return
for p in projects:
print(f" {p['name']}")
def cmd_open(args):
"""Open a project display (standalone, no MCP)."""
import asyncio
from kitty_workbench.server import KittWorkbenchServer
srv = KittWorkbenchServer()
async def run():
await srv.kitt_open(args.name, args.name)
try:
while True:
await asyncio.sleep(1)
except (KeyboardInterrupt, asyncio.CancelledError):
await srv.kitt_close(args.name)
asyncio.run(run())
def main():
parser = argparse.ArgumentParser(
prog="kitty-workbench",
description="MCP server for AI-driven terminal display panels",
)
parser.add_argument("--version", action="version", version=f"%(prog)s {__version__}")
sub = parser.add_subparsers(dest="command")
sub.add_parser("mcp", help="Start MCP server (stdio transport)")
tui_parser = sub.add_parser("tui", help="Launch TUI app (internal)")
tui_parser.add_argument("name", help="Project name")
tui_parser.add_argument("--socket", required=True, help="Unix socket path")
sub.add_parser("list", help="List all projects")
open_parser = sub.add_parser("open", help="Open display for existing project")
open_parser.add_argument("name", help="Project name")
sub.add_parser("help", help="Show help")
args = parser.parse_args()
commands = {
"mcp": cmd_mcp,
"tui": cmd_tui,
"list": cmd_list,
"open": cmd_open,
"help": lambda a: parser.print_help(),
}
if args.command is None:
parser.print_help()
sys.exit(0)
commands[args.command](args)