Files
codeg/AGENTS.md
2026-03-29 18:36:30 +08:00

4.5 KiB
Raw Blame History

AGENTS.md

This file provides guidance to Code Agent when working with code in this repository.

项目概述

codeg 是一个多模式应用,支持桌面客户端和独立服务器部署,用于聚合和浏览本地 AI 编码代理的会话记录。它从多个代理Claude Code、Codex、OpenCode、Gemini CLI、OpenClaw、Cline的本地文件系统中读取会话数据统一格式后在 UI 中展示。

技术栈

  • 桌面运行时: Tauri 2Rust 后端 + webview 前端)
  • 服务器运行时: 独立 Rust 二进制Axum HTTP + WebSocket无需 Tauri/GUI
  • 前端: Next.js 16静态导出模式+ React 19 + TypeScriptstrict
  • 样式: Tailwind CSS v4 + shadcn/uiradix-maia 风格)
  • 包管理器: pnpm

开发命令

# 启动完整桌面应用Tauri + Next.js Turbopack 开发服务器)
pnpm tauri dev

# 仅启动前端
pnpm dev

# 构建前端(静态导出到 out/
pnpm build

# 构建 Tauri 桌面应用
pnpm tauri build

# 启动独立服务器(无需 Tauri/GUI
pnpm server:dev

# 构建服务器 release 二进制
pnpm server:build

# Lint 检查
pnpm eslint .

# Rust 检查(在 src-tauri/ 目录下执行)
cargo check                                                    # 桌面模式(默认)
cargo check --bin codeg-server --no-default-features           # 服务器模式
cargo clippy
cargo build

目前尚未配置测试框架。

架构

双模式运行

项目通过 Cargo feature flags 支持两种运行模式:

  • tauri-runtime(默认):完整桌面应用,包含 Tauri 窗口管理、系统通知、自动更新等
  • 无 feature--no-default-features:独立服务器模式,仅编译 Axum HTTP API + WebSocket

共享核心

  • app_state.rsAppState 共享状态结构,两种模式通过 EventEmitter 枚举区分事件发射方式
  • web/event_bridge.rsEventEmitter::Tauri(AppHandle)EventEmitter::WebOnly(Arc<WebEventBroadcaster>)
  • web/router.rs — Axum 路由,接受 Arc<AppState>
  • web/handlers/ — 146 个 HTTP API 端点,全部使用 Extension<Arc<AppState>>

Rust 后端(src-tauri/src/

后端负责读取和解析本地文件系统上的代理会话文件:

  • app_state.rs — 共享状态db、连接管理器、终端管理器、事件广播器
  • models/ — 共享数据结构
  • parsers/ — 每个代理一个解析器
  • commands/ — 业务逻辑(_core 函数供两种模式共用,#[tauri::command] 函数仅桌面模式)
  • web/ — Axum HTTP API + WebSocket + 静态文件服务
  • acp/ — Agent Client Protocol 连接管理
  • terminal/ — PTY 终端管理
  • db/ — SeaORM + SQLite

前端(src/

  • lib/transport/ — Transport 抽象层,自动检测 Tauri/Web 环境切换 invoke()/fetch()
  • lib/types.ts — Rust 模型的 TypeScript 镜像
  • app/ — Next.js 页面,不使用动态路由
  • app/login/ — Web 模式 token 登录页
  • components/ — 项目组件
  • components/ui/ — shadcn 组件

数据流

桌面模式:前端 invoke() → Tauri 命令 → 业务逻辑 → 返回数据 服务器模式:前端 fetch() → Axum HTTP API → 同一业务逻辑 → 返回 JSON

条件编译约定

  • #[cfg(feature = "tauri-runtime")] — 仅桌面模式编译Tauri 窗口、通知、tauri::State 参数等)
  • #[cfg_attr(feature = "tauri-runtime", tauri::command)] — 函数始终可用,仅在桌面模式标记为 Tauri 命令
  • _core 后缀函数 — 接受普通引用参数(&AppDatabase&EventEmitter),供 Web handlers 和 Tauri 命令共用

关键约束

  • 仅支持静态导出next.config.ts 设置 output: "export",不支持动态路由([param]),必须使用查询参数替代
  • 路径别名@/* 映射到 ./src/*,导入写法为 @/lib/utils@/components/ui/button
  • Rust serde 约定AgentType 序列化为 snake_caseclaude_codeopen_code。Tauri 命令参数在 JS 侧使用 camelCaseRust 侧使用 snake_case
  • 服务器部署:通过环境变量配置(CODEG_PORTCODEG_HOSTCODEG_TOKENCODEG_DATA_DIRCODEG_STATIC_DIR

代码风格

  • Prettier无分号、尾逗号es5、2 空格缩进、80 字符宽度
  • ESLintnext/core-web-vitals + typescript + prettier
  • TypeScriptstrict 模式,启用 noUnusedLocalsnoUnusedParameters
  • Rust2021 edition使用 thiserror 定义错误类型