feat: CLI entry point — mcp, tui, list, open, help subcommands
This commit is contained in:
@@ -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)
|
||||
Reference in New Issue
Block a user