cui-no-auth
v0.7.12
Published
Web UI Agent Platform based on Claude Code
Downloads
1,079
Maintainers
Readme
CUI Server - Claude Code / Codex 实时监控平台
基于 Claude Code 与 Codex 的 Web 化实时日志监控系统
项目简介
CUI Server 是一个为 Claude Code 与 Codex 设计的 Web 化实时监控平台,让你通过浏览器随时查看 AI 任务的执行状态。
核心价值
- 持续可见:新会话、历史会话和内容更新都能自动跟上
- Web 化:无需终端,浏览器访问,随时随地查看
- 协同化:多人可同时查看同一任务进度,团队协作利器
- 高性能:按需监控,支持 1000+ 历史会话,内存占用 < 100MB
应用场景
场景 1:后台任务监控
终端运行 Claude 分析项目 → 打开浏览器查看实时进度 → 无需守在终端前
场景 2:团队协作
开发者 A 运行测试 → 开发者 B 在浏览器查看进度 → QA 也能同时监控
场景 3:日志中心
Claude 与 Codex 会话统一管理 → 来源过滤、目录过滤、归档 → 可追溯的执行历史
场景 4:sub-agent 排查
主会话使用 Agent tool → 点击工具块跳到 sub-agent 执行过程 → 不污染首页列表核心特性
🚀 监控与浏览体验(v0.7.6)
0. Claude + Codex 会话统一浏览
[终端] claude / codex 执行任务
↓
[浏览器] 首页按来源筛选:全部 / Claude Code / Codex
↓
[详情页] Codex 历史会话只读查看,Claude 会话继续支持续聊- ✅ 读取
~/.codex/sessions/**/rollout-*.jsonl - ✅ Codex 会话使用
codex:前缀隔离,避免和 Claude sessionId 冲突 - ✅ 首页新增来源过滤器,可按
全部 / Claude Code / Codex切换 - ✅ Codex 详情页支持消息、工具调用、工具结果、模型和 token 用量展示
- ✅ Codex 只读会话隐藏续聊、归档、置顶、重命名等 Claude 专属操作
1. 首页自动发现新会话
[终端] claude "分析代码"
↓ 默认最多约 30 秒
[浏览器] 首页自动出现新会话 ✨- ✅ 无需手动刷新
- ✅ 默认 30 秒轮询兜底,可通过参数调整为 15 / 60 秒或更大
- ✅ 列表增量 patch,减少全量重载
2. 详情页自动追踪对话
[点击] 会话详情
↓
[自动] 完整消息落盘后自动刷新
↓
[手动] 也可下滑刷新 / 点击右侧刷新按钮- ✅ 自动刷新提示:
已更新/已更新,请向下滑 - ✅ 支持下滑刷新和右侧浮动刷新按钮
- ✅ 活跃会话仍保留流式更新,历史会话走可配置 polling 兜底
3. 无限滚动 + 智能更新
[首页] 显示最近 20 个会话
↓
[滚动] 自动加载更多(21-40, 41-60...)
↓
[已加载会话] 有更新 → 自动刷新 ✨- ✅ 支持 1000+ 历史会话
- ✅ 已加载会话自动更新
- ✅ 性能优化(虚拟滚动)
4. sub-agent 过程钻取
- ✅ 首页不显示 sub-agent
- ✅ 主会话里的
Agent(...)工具块可直接跳转到 sub-agent 详情页 - ✅ 保留原结果区块,同时提供
执行进展 / 执行过程链接
5. 多客户端协同
- ✅ 多人同时查看同一会话
- ✅ 共享监控(资源节省)
- ✅ 所有人实时同步
📊 技术架构
当前实现
Layer 1: Directory Discovery(默认每 30 秒)
├─ 扫描 ~/.claude/projects/** 与 ~/.codex/sessions/**
├─ 发现 Claude *.jsonl 与 Codex rollout-*.jsonl
└─ 建立 sessionId -> filePath 索引
Layer 2: File Polling(默认每 30 秒)
├─ 对已知 session 比较 mtime + size
├─ 推断哪些首页列表项需要更新
└─ 推断哪些详情页需要刷新内容
Layer 3: SSE Broadcaster
├─ session_list_update → 首页增量更新
└─ session_content_update → 详情页自动刷新性能对比
| 指标 | 优化前 | 优化后 | 提升 | |-----|--------|--------|------| | 监控文件数 | 1377(失效) | 0-50(动态) | 96% ↓ | | 新会话发现 | ∞(需刷新) | 默认 ≤ 30 秒 | 自动 | | 详情更新 | N/A | 默认 ≤ 30 秒(历史会话) | 自动 | | 内存占用 | ~50MB | ~60MB | 持平 |
🌐 v0.7.6 新增
- Codex 历史会话浏览:
- 后端新增 Codex JSONL reader / mapper / indexer
- 新增
/api/codex-conversations与/api/codex-conversations/:sessionId - 支持 Codex 消息、reasoning summary、shell tool、tool result 和 token usage 映射
- 首页来源过滤:
- 新增
全部 / Claude Code / Codex来源选择 - Claude 与 Codex 列表按更新时间合并、去重、分页
- 新增
- Codex 只读详情页:
- 从首页点击 Codex 会话可进入详情页
- 自动隐藏续聊输入框和 Claude 会话管理入口
- 模型标签按 Claude / GPT-Codex / 外部模型分色展示
🌐 v0.7.4 新增
- sub-agent 详情钻取:从
Agent(...)工具块直接进入子代理详情页 - session 页刷新交互:
- 下滑刷新
- 右侧浮动刷新按钮
已更新 / 已更新,请向下滑 / 暂无最新消息提示
- 可配置轮询兜底:
- 首页新会话发现
- 首页列表增量更新
- session 页完整消息自动刷新
- SSE 解耦:索引更新与 SSE 广播分离,批量广播更稳
🌐 v0.7.3 新增
- 环境变量/代理预设:每个会话独立配置 proxy、API Key(⚙️ → Environment Tab)
- 目录过滤:选择工作目录自动过滤 session 列表
- ToolMetrics 持久化:代码改动统计重启后不丢失
- OOM 修复:3 个内存泄漏修复,长时间运行稳定
详见 CHANGELOG.md
🎯 其他特性
- 🎨 现代化界面:响应式设计,支持桌面和移动端
- ⚡ 并行任务:同时运行多个 Claude / Codex 会话浏览任务
- 📋 任务管理:查看、恢复、归档历史会话
- 🤖 多模型支持:支持 Claude、GPT/Codex、Gemini、Ollama 等
- 🔧 CLI 兼容:与 Claude Code CLI 完全兼容
- 🔔 推送通知:任务完成后浏览器通知
- 🎤 语音输入:支持 Gemini / GLM 语音识别
系统要求
最小要求
| 组件 | 要求 | 说明 | |-----|------|------| | 操作系统 | Linux (kernel >= 2.6.13) | macOS 也支持 | | Node.js | >= 20.19.0 | 安装指南 | | 内存 | >= 512MB | 推荐 1GB | | 磁盘 | >= 1GB | 存储会话历史和索引 |
编译环境(仅首次安装时需要)
| 组件 | 用途 | 必需性 | |-----|------|--------| | Python 3 | 编译 better-sqlite3 | ✅ 必需 | | GCC/G++ | 编译原生模块 | ✅ 必需 | | Make | 构建工具 | ✅ 必需 |
Linux 发行版兼容性
| 发行版 | 状态 | 说明 | |--------|------|------| | Ubuntu 20.04+ | ✅ 完全支持 | 推荐 | | Debian 11+ | ✅ 完全支持 | 推荐 | | CentOS 8+ | ✅ 完全支持 | - | | RHEL 8+ | ✅ 完全支持 | - | | Fedora 35+ | ✅ 完全支持 | - | | Alpine Linux | ⚠️ 需额外配置 | 需安装 build 工具 | | Amazon Linux 2 | ✅ 完全支持 | - |
依赖检查
运行依赖检查脚本:
bash scripts/check-dependencies.sh输出示例:
✅ Node.js: 20.19.0
✅ npm: 10.2.0
✅ Python 3: 3.10.12
✅ gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0
✅ GNU Make 4.3
✅ Linux Kernel: 5.15.0
✅ 所有依赖检查通过!快速开始
方式 1:NPX 快速启动(推荐)
# 直接运行(无需安装)
npx cui-no-auth --host 0.0.0.0 --port 8526 --skip-auth-token打开浏览器:http://localhost:8526
方式 2:全局安装
# 安装
npm install -g cui-no-auth
# 启动
cui-server --host 0.0.0.0 --port 8526 --skip-auth-token方式 3:从源码运行
# 克隆仓库
git clone https://github.com/bmpixel/cui.git
cd cui
# 安装依赖
npm install
# 构建
npm run build
# 启动
npm start -- --host 0.0.0.0 --port 8526 --skip-auth-token命令行选项
| 选项 | 说明 | 默认值 |
|-----|------|--------|
| --host <host> | 监听地址 | localhost |
| --port <port> | 监听端口 | 3001 |
| --skip-auth-token | 禁用认证(本地环境) | 关闭 |
| --token <token> | 自定义认证 Token | 自动生成 |
| --history-poll-interval-seconds <seconds> | Claude / Codex 历史会话检查间隔,单位秒 | 30 |
部署指南
Ubuntu/Debian 部署
# 1. 安装系统依赖
sudo apt-get update
sudo apt-get install -y curl python3 build-essential
# 2. 安装 Node.js 20
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt-get install -y nodejs
# 3. 检查依赖
bash scripts/check-dependencies.sh
# 4. 安装 CUI Server
npm install -g cui-no-auth
# 5. 启动服务
cui-server --host 0.0.0.0 --port 8526 --skip-auth-token
# 6. 配置开机自启动(可选)
sudo tee /etc/systemd/system/cui-server.service << 'EOF'
[Unit]
Description=CUI Server - Claude Code Monitoring Platform
After=network.target
[Service]
Type=simple
User=YOUR_USER
WorkingDirectory=/home/YOUR_USER
ExecStart=/usr/bin/cui-server --host 0.0.0.0 --port 8526 --skip-auth-token
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable cui-server
sudo systemctl start cui-serverCentOS/RHEL 部署
# 1. 安装系统依赖
sudo yum groupinstall -y "Development Tools"
sudo yum install -y python3
# 2. 安装 Node.js 20
curl -fsSL https://rpm.nodesource.com/setup_20.x | sudo bash -
sudo yum install -y nodejs
# 3. 后续步骤同上Docker 部署
# Dockerfile
FROM node:20-alpine
# 安装编译工具
RUN apk add --no-cache python3 make g++
WORKDIR /app
# 安装依赖
COPY package*.json ./
RUN npm ci --only=production
# 复制代码并构建
COPY . .
RUN npm run build
# 暴露端口
EXPOSE 8526
# 启动
CMD ["node", "dist/server.js", "--host", "0.0.0.0", "--port", "8526", "--skip-auth-token"]# 构建镜像
docker build -t cui-server .
# 运行容器
docker run -d \
--name cui-server \
-p 8526:8526 \
-v ~/.claude:/root/.claude:ro \
-v ~/.codex:/root/.codex:ro \
cui-server使用说明
首页 - 会话列表
功能:
- 显示所有 Claude / Codex 会话(按更新时间排序)
- 来源过滤:全部 / Claude Code / Codex
- 自动发现:新会话自动出现(默认 30 秒轮询,可配置)
- 无限滚动:向下滚动自动加载更多
- 智能更新:已加载会话元数据自动刷新
- 手动刷新:右上角支持手动刷新列表
操作:
- 点击会话 → 查看详情
- 点击右上角 → 创建新会话
- 向下滚动 → 加载更多历史
详情页 - 自动追踪
功能:
- 查看完整对话历史
- Codex 只读查看:Codex 历史会话支持消息、工具调用、模型和 token 用量展示
- 自动更新:完整消息落盘后自动刷新
- 手动刷新:支持下滑刷新和右侧刷新按钮
- sub-agent 跳转:从
Agent(...)工具块查看子代理执行过程 - Claude 会话支持继续对话、恢复会话、查看工具调用
- Codex 会话为只读历史浏览,不提供续聊、归档、置顶、重命名
操作:
- 输入框发送消息 → 继续对话
- 点击"停止" → 中断正在运行的任务
- 关闭页面 → 后台自动清理监控
实时监控架构
工作原理
┌─────────────────────────────────────────────┐
│ 终端(Claude Code CLI / Codex CLI) │
│ ├─ claude "分析项目架构" │
│ └─ codex "分析项目架构" │
│ ↓ │
│ ~/.claude/projects/xxx.jsonl │
│ ~/.codex/sessions/**/rollout-*.jsonl │
└─────────────────────────────────────────────┘
│ 文件落盘
↓
┌─────────────────────────────────────────────┐
│ CUI Server 后端 │
│ ┌─────────────────────────────────────┐ │
│ │ Directory Poller(默认 30 秒) │ │
│ │ ├─ 发现新的 Claude / Codex JSONL │ │
│ │ └─ 建立 sessionId -> filePath │ │
│ └─────────────────────────────────────┘ │
│ ↓ │
│ ┌─────────────────────────────────────┐ │
│ │ File Poller(默认 30 秒) │ │
│ │ ├─ 比较 mtime + size │ │
│ │ ├─ 推断首页列表项变化 │ │
│ │ └─ 推断详情页内容变化 │ │
│ └─────────────────────────────────────┘ │
│ ↓ │
│ ┌─────────────────────────────────────┐ │
│ │ EventBus(事件总线) │ │
│ │ ├─ session_list_update │ │
│ │ └─ session_content_update │ │
│ └─────────────────────────────────────┘ │
│ ↓ │
│ ┌─────────────────────────────────────┐ │
│ │ StreamManager(SSE 推送) │ │
│ │ ├─ 全局流(所有客户端) │ │
│ │ └─ 会话流(订阅者) │ │
│ └─────────────────────────────────────┘ │
└─────────────────────────────────────────────┘
│ Server-Sent Events
↓
┌─────────────────────────────────────────────┐
│ 浏览器前端 │
│ ├─ 监听全局事件 → 首页自动更新 │
│ ├─ 监听 session 事件 → 详情页自动刷新 │
│ └─ 下滑/按钮刷新 → 手动重拉 │
└─────────────────────────────────────────────┘资源控制
- 启动即恢复:重启后重新扫描目录并恢复文件追踪
- 共享广播:列表更新与详情页更新复用同一套 SSE 广播层
- 内存占用:只持久化元数据,不把所有会话全文载入内存
底层依赖
核心依赖
| 依赖 | 版本 | 用途 | Linux 兼容性 | |-----|------|------|-------------| | Node.js | >= 20.19.0 | 运行时环境 | ✅ 完全支持 | | better-sqlite3 | ^12.2.0 | 数据库(原生模块) | ⚠️ 需编译环境 | | chokidar | ^3.6.0 | 可选文件监控依赖 | ✅ 完全支持 | | express | ^4.18.2 | HTTP 服务器 | ✅ 完全支持 | | @anthropic-ai/claude-code | ^2.0.65 | Claude SDK | ✅ 完全支持 |
系统依赖
运行时(必需)
- Linux Kernel >= 2.6.13
- glibc 或 musl libc
编译时(仅安装时需要)
- Python 3 (>= 3.6)
- GCC/G++ (>= 4.8)
- GNU Make
安装编译环境
# Ubuntu/Debian
sudo apt-get install -y python3 build-essential
# CentOS/RHEL
sudo yum groupinstall -y "Development Tools"
sudo yum install -y python3
# Alpine Linux
apk add --no-cache python3 make g++
# Arch Linux
sudo pacman -S python gcc makeLinux 兼容性详解
✅ 完全支持的发行版
以下发行版无需额外配置(安装编译工具后):
- Ubuntu 20.04, 22.04, 24.04
- Debian 11, 12
- CentOS 8, 9
- RHEL 8, 9
- Fedora 35+
- Amazon Linux 2, 2023
- openSUSE Leap 15+
⚠️ 需要额外配置的发行版
Alpine Linux
问题:精简系统,缺少编译工具
解决方案:
# 安装编译环境
apk add --no-cache python3 make g++ nodejs npm
# 安装 CUI Server
npm install -g cui-no-auth精简版 Linux(如 Minimal Ubuntu)
问题:可能没有预装 Python 和编译工具
解决方案:
# 先检查依赖
bash scripts/check-dependencies.sh
# 根据提示安装缺失的工具
sudo apt-get install -y python3 build-essential❌ 不支持的环境
- Windows(原生):请使用 WSL2
- 旧版 Linux Kernel < 2.6.13:不支持 inotify
故障排查
问题 1:npm install 失败(better-sqlite3 编译错误)
错误信息:
gyp ERR! build error
gyp ERR! stack Error: `make` failed with exit code: 2解决方案:
# 安装编译工具
sudo apt-get install -y python3 build-essential
# 重新安装
npm install问题 2:session 页面没有自动跟新
当前版本的首页与历史会话刷新以 可配置目录发现 + 文件轮询 为主,默认 30 秒,不再强依赖 fs.watch(recursive)。
请先确认:
ls ~/.claude/projects以及:
find ~/.claude/projects -name '*.jsonl' | head如果 Claude 会话 JSONL 已经落盘,但浏览器仍然没有变化:
- 等待一个轮询周期(默认 30 秒)
- 再使用详情页右侧的
刷新按钮手动刷新 - 如果仍无变化,检查该 session 文件是否真的持续写入
问题 3:Codex 会话没有显示
请先确认 Codex 历史文件存在:
find ~/.codex/sessions -name 'rollout-*.jsonl' | head如果文件存在但浏览器仍然没有显示:
- 确认首页来源过滤不是只选了
Claude Code - 等待一个轮询周期(默认 30 秒)
- 检查 CUI Server 进程是否能读取当前用户的
~/.codex/sessions - Docker 部署时需要挂载
~/.codex:/root/.codex:ro
问题 4:端口被占用
错误信息:
Error: listen EADDRINUSE: address already in use 0.0.0.0:8526解决方案:
# 查找占用端口的进程
lsof -ti :8526
# 杀掉进程
kill $(lsof -ti :8526)
# 或更换端口
cui-server --port 8527问题 5:Docker Alpine 镜像构建失败
解决方案:
# 确保安装了编译工具
RUN apk add --no-cache python3 make g++
# 如果还是失败,使用 node:20(基于 Debian)
FROM node:20API 端点
会话管理
| 端点 | 方法 | 说明 |
|-----|------|------|
| /api/conversations | GET | 获取会话列表(支持分页) |
| /api/conversations/:sessionId | GET | 获取会话详情 |
| /api/conversations/start | POST | 启动新会话 |
| /api/conversations/:streamingId/stop | POST | 停止会话 |
| /api/codex-conversations | GET | 获取 Codex 会话列表(支持分页和过滤) |
| /api/codex-conversations/:sessionId | GET | 获取 Codex 会话详情(只读) |
实时监控(v0.7.0 新增)
| 端点 | 方法 | 说明 |
|-----|------|------|
| /api/subscriptions/subscribe | POST | 订阅会话内容更新 |
| /api/subscriptions/unsubscribe | POST | 取消订阅 |
| /api/subscriptions/status | GET | 查看订阅状态 |
| /api/stream/global | GET (SSE) | 全局事件流 |
| /api/stream/session-{id} | GET (SSE) | 会话内容流 |
系统管理
| 端点 | 方法 | 说明 |
|-----|------|------|
| /api/system/status | GET | 系统状态 |
| /health | GET | 健康检查 |
开发指南
开发环境搭建
# 克隆仓库
git clone https://github.com/bmpixel/cui.git
cd cui
# 安装依赖
npm install
# 启动开发模式(后端)
npm run dev
# 启动开发模式(前端)
npm run dev:web运行测试
# 所有测试
npm test
# 单元测试
npm run unit-tests
# 集成测试
npm run integration-tests
# 测试覆盖率
npm run test:coverage
# 交互式测试
npm run test:ui类型检查
npm run typecheck构建
npm run build性能优化建议
1. 增加 inotify 限制(推荐)
# 当前限制
cat /proc/sys/fs/inotify/max_user_watches
# 增加到 524288(推荐)
sudo sysctl fs.inotify.max_user_watches=524288
# 永久生效
echo 'fs.inotify.max_user_watches=524288' | sudo tee -a /etc/sysctl.conf2. 使用 PM2 管理进程(推荐)
# 安装 PM2
npm install -g pm2
# 启动服务
pm2 start cui-server --name cui -- --host 0.0.0.0 --port 8526 --skip-auth-token
# 查看日志
pm2 logs cui
# 查看状态
pm2 status
# 开机自启
pm2 startup
pm2 save3. 配置反向代理(生产环境)
# /etc/nginx/sites-available/cui-server
server {
listen 80;
server_name cui.your-domain.com;
location / {
proxy_pass http://localhost:8526;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
# SSE 支持
proxy_buffering off;
proxy_read_timeout 86400;
}
}配置文件
配置位置
~/.cui/config.json配置示例
{
"server": {
"host": "0.0.0.0",
"port": 8526
},
"interface": {
"colorScheme": "system",
"language": "zh-CN"
},
"machine_id": "1",
"authToken": "your-token"
}文档
用户文档
开发文档
设计文档
- 产品需求定义(PRD)
- 技术架构设计
- 无限滚动设计
版本更新日志
v0.7.2(2025-12-29)- 交互体验优化
✨ 功能增强
- 回到顶部:新增一键回到顶部按钮,长对话浏览更便捷
- 滚动优化:优化滚动到底部/顶部的行为,使用瞬时跳转替代平滑滚动,解决长列表滚动不到位的问题
v0.7.1(2025-12-29)- 性能与体验升级
🚀 核心优化
- 零卡顿切换:重构会话视图架构,彻底解决多会话切换时的闪烁与卡顿问题
- 渲染性能提升:移除全局流状态合并,优化虚拟列表渲染,CPU 占用降低 50%
- 智能资源调度:延迟建立 SSE 连接,避免浏览器连接数耗尽
- 滚动体验优化:修复长会话进入时的滚动条跳动问题
v0.7.0(2025-12-28)- 实时监控系统
核心功能
- ✅ 实时监控系统:双层监控架构,支持实时发现和追踪
- ✅ 首页自动发现:新会话 1-2 秒内自动出现
- ✅ 详情页实时追踪:对话进度实时显示
- ✅ 无限滚动:支持 1000+ 会话,已加载会话实时更新
- ✅ 多客户端协同:共享监控,多人同时查看
技术改进
- ✅ DirectoryWatcher:轻量监控器(监控所有文件)
- ✅ ContentWatcher:深度监控器(按需订阅)
- ✅ EventBus:事件驱动架构
- ✅ SSE 推送:取代轮询,零延迟
- ✅ 资源优化:监控文件数减少 96%
API 新增
POST /api/subscriptions/subscribe- 订阅会话POST /api/subscriptions/unsubscribe- 取消订阅GET /api/subscriptions/status- 订阅状态GET /api/stream/global- 全局事件流GET /api/stream/session-{id}- 会话内容流
v0.6.8
- 性能优化:索引优化,详情页秒开
- 架构升级:事件驱动更新(fs.watch + SSE)
- 体验改进:隐藏目录支持、列表降噪
技术栈
后端
- 运行时:Node.js 20 + TypeScript
- 框架:Express.js
- 数据库:SQLite3(better-sqlite3)
- 文件监控:chokidar(基于 inotify)
- 实时通信:Server-Sent Events (SSE)
- 日志:pino
前端
- 框架:React 18 + TypeScript
- 路由:React Router v6
- UI:Radix UI + Tailwind CSS
- 状态管理:Context API + Hooks
- 构建:Vite 7
测试
- 框架:Vitest
- 覆盖率:v8
- UI 测试:@testing-library/react
贡献指南
欢迎贡献代码、报告问题或提出建议!
开发流程
- Fork 本仓库
- 创建特性分支:
git checkout -b feature/your-feature - 提交更改:
git commit -am 'Add some feature' - 推送分支:
git push origin feature/your-feature - 提交 Pull Request
代码规范
# 运行 lint
npm run lint
# 类型检查
npm run typecheck
# 运行测试
npm test许可证
Apache License 2.0
致谢
- Claude Code - Anthropic 官方 CLI
- chokidar - 跨平台文件监控
- better-sqlite3 - 高性能 SQLite
联系方式
- 问题反馈:GitHub Issues
- 功能建议:GitHub Discussions
- 原作者:Wenbo Pan
- Fork 维护者:木鱼拓哉(微信:BiothaLMY)
用 Web 化实时监控,让 AI 任务执行一目了然
Made with ❤️ by the community
