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