3.4 KiB
Gaza
Gaza 是一个协议优先、跨平台的多 Teamserver 桌面工作台。当前仓库包含可运行的首个项目骨架,重点验证 Teamserver 工作区和标签页隔离模型。
标准协议模型
src/protocol 定义 GUI 与兼容 Teamserver 之间的首版强类型模型,包括 Teamserver、Project、Session、Capability、Task、Event、Artifact 和 Audit。该模块不包含网络请求、认证或私有 C2 适配。
ServerId、ProjectId、SessionId 等采用品牌类型,避免在编译期误用不同层级 ID;枚举允许未来服务端新增值,解析器保留未知枚举和扩展字段。迁移现有界面数据时可从 src/protocol/fixtures 引入最小演示 fixture。
技术栈
- Tauri 2(桌面容器)
- React 19 + TypeScript + Vite(界面)
- Vitest + Testing Library(单元与组件测试)
快速开始
本机安装 Node.js 22 与 Rust stable 后:
npm ci
npm run dev # 浏览器开发模式
npm run tauri dev # 桌面开发模式
无需本机 Node.js 的前端验证:
docker compose build test build
docker compose run --rm test
docker compose run --rm build
docker compose run --rm test npm run typecheck
docker compose run --rm test npm audit --audit-level=high
Docker 启动 Web 测试服务
构建镜像并在后台启动:
docker compose up --build -d
浏览器访问 http://127.0.0.1:1420。查看状态和日志:
docker compose ps
docker compose logs -f web
./scripts/check-web-health.sh
停止服务:
docker compose down
默认只监听本机回环地址。需要让局域网测试设备访问时,显式设置监听地址和端口:
WEB_BIND_ADDRESS=0.0.0.0 WEB_PORT=1420 docker compose up --build -d
开放到局域网前请确认主机防火墙和测试网络范围;Web 预览不包含认证能力。
当前范围
- 展示多 Teamserver 连接状态和独立工作区。
- 切换 Teamserver 时隔离标签、项目导航和激活状态。
- 所有演示业务状态仅保存在进程内存,不写入本地存储。
- 提供 Tauri 最小权限配置;后续连接、协议与加密 SQLite 能力按独立迭代接入。
常用命令
npm ci
npm run typecheck
npm test
npm run build
npm audit --audit-level=high
npm run tauri build
持续集成与本地复现
Forgejo 工作流 .forgejo/workflows/ci.yml 在推送到 main 和拉取请求时运行两个独立作业:
- Node 质量门禁依次执行锁定依赖安装、TypeScript 类型检查、测试、生产构建和高危依赖审计。
- Docker 门禁构建
web镜像,按 Compose 的最小权限配置启动服务,并等待镜像内置健康检查通过。
本机装有 Node.js 22.18.0 时,可使用“常用命令”中的前五条命令逐步复现 Node 作业。仅安装 Docker 时,可完整复现 CI:
docker compose build test build
docker compose run --rm test npm run typecheck
docker compose run --rm test
docker compose run --rm build
docker compose run --rm test npm audit --audit-level=high
docker compose build web
docker compose up --no-build -d web
./scripts/check-web-health.sh
docker compose down --volumes --remove-orphans
依赖审计会在发现高危或严重漏洞时失败;网络或软件源不可用同样视为审计失败,不静默跳过。Docker 服务仍以非 root 用户运行,并保留只读根文件系统与 no-new-privileges 限制。