feat: 新增 BotOps 子模块——aibox 的 Textual TUI 前端(流式 Markdown 渲染+自动重连+任务侧栏)
This commit is contained in:
1 parent
afb55494e5
commit
f91d4166d6
14 files changed
+569
No files matched your search
@@ -0,0 +1,62 @@
|
||||
"""斜杠命令注册表:/connect /disconnect /interrupt /clear /status /help /quit。
|
||||
|
||||
本地命令在此拦截处理;未注册的 / 命令透传给 aibox 服务器(与 client.py 行为一致)。
|
||||
"""
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from app import BotOpsApp
|
||||
|
||||
|
||||
class CommandRegistry:
|
||||
def __init__(self, app: "BotOpsApp"):
|
||||
self.app = app
|
||||
self._commands = {
|
||||
"/connect": ("连接服务器:/connect ws://host:port", self._connect),
|
||||
"/disconnect": ("断开连接(不自动重连)", self._disconnect),
|
||||
"/interrupt": ("中断当前生成(或按 Ctrl+C)", self._interrupt),
|
||||
"/clear": ("清空聊天区", self._clear),
|
||||
"/status": ("显示连接状态", self._status),
|
||||
"/help": ("显示帮助", self._help),
|
||||
"/quit": ("退出 BotOps", self._quit),
|
||||
}
|
||||
|
||||
async def execute(self, line: str) -> bool:
|
||||
"""是本地命令则执行并返回 True;否则返回 False(调用方应透传服务器)。"""
|
||||
cmd = line.split()[0].lower()
|
||||
entry = self._commands.get(cmd)
|
||||
if entry is None:
|
||||
return False
|
||||
await entry[1](line)
|
||||
return True
|
||||
|
||||
async def _connect(self, line: str):
|
||||
parts = line.split()
|
||||
if len(parts) < 2:
|
||||
await self.app.notify_system("用法: /connect ws://host:port", level="error")
|
||||
return
|
||||
await self.app.connect_to(parts[1])
|
||||
|
||||
async def _disconnect(self, _line: str):
|
||||
await self.app.disconnect()
|
||||
|
||||
async def _interrupt(self, _line: str):
|
||||
await self.app.send_interrupt()
|
||||
|
||||
async def _clear(self, _line: str):
|
||||
await self.app.clear_chat()
|
||||
|
||||
async def _status(self, _line: str):
|
||||
if self.app.ws.connected:
|
||||
await self.app.notify_system(f"✅ 已连接: {self.app.ws.uri}")
|
||||
else:
|
||||
await self.app.notify_system("○ 未连接")
|
||||
|
||||
async def _help(self, _line: str):
|
||||
lines = ["可用命令:"] + [f" {k:<14} {v[0]}" for k, v in self._commands.items()]
|
||||
lines.append(" 其余 / 命令将透传给 aibox 服务器")
|
||||
await self.app.notify_system("\n".join(lines))
|
||||
|
||||
async def _quit(self, _line: str):
|
||||
await self.app.ws.disconnect()
|
||||
self.app.exit()
|
||||
Reference in new issue
Block a user