diff --git a/AGENTS.md b/AGENTS.md index e6c9914..5a096c5 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -4,41 +4,26 @@ This file provides guidance to Code Agent when working with code in this reposit ## 项目概述 -codeg 是一个多模式应用,支持桌面客户端和独立服务器部署,用于聚合和浏览本地 AI 编码代理的会话记录。它从多个代理(Claude Code、Codex、OpenCode、Gemini CLI、OpenClaw、Cline)的本地文件系统中读取会话数据,统一格式后在 UI 中展示。 +codeg 是一个多模式应用,支持桌面客户端和独立服务器部署,用于聚合和浏览本地 AI 编码代理的会话记录。它从多个代理(Claude Code、Codex、OpenCode、Gemini CLI、OpenClaw、Cline)的本地文件系统中读取会话数据,统一格式后在 UI 中展示。同时支持通过聊天频道(Telegram、飞书、微信)远程交互,以及项目脚手架生成、Git 工作流、终端管理等功能。 ## 技术栈 - **桌面运行时**: Tauri 2(Rust 后端 + webview 前端) -- **服务器运行时**: 独立 Rust 二进制(Axum HTTP + WebSocket,无需 Tauri/GUI) +- **服务器运行时**: 独立 Rust 二进制(Axum HTTP + WebSocket) - **前端**: Next.js 16(静态导出模式)+ React 19 + TypeScript(strict) - **样式**: Tailwind CSS v4 + shadcn/ui(radix-maia 风格) +- **国际化**: next-intl +- **数据库**: SeaORM + SQLite - **包管理器**: pnpm -## 开发命令 +## 代码检查(任务完成后进行必要的检查) ```bash -# 启动完整桌面应用(Tauri + Next.js Turbopack 开发服务器) -pnpm tauri dev - -# 仅启动前端 -pnpm dev - -# 构建前端(静态导出到 out/) +# 前端 检查 +pnpm eslint . pnpm build -# 构建 Tauri 桌面应用 -pnpm tauri build - -# 启动独立服务器(无需 Tauri/GUI) -pnpm server:dev - -# 构建服务器 release 二进制 -pnpm server:build - -# Lint 检查 -pnpm eslint . - -# Rust 检查(在 src-tauri/ 目录下执行) +# 后端 Rust 检查(在 src-tauri/ 目录下执行) cargo check # 桌面模式(默认) cargo check --bin codeg-server --no-default-features # 服务器模式 cargo clippy @@ -61,34 +46,40 @@ cargo build - **`app_state.rs`** — `AppState` 共享状态结构,两种模式通过 `EventEmitter` 枚举区分事件发射方式 - **`web/event_bridge.rs`** — `EventEmitter::Tauri(AppHandle)` 或 `EventEmitter::WebOnly(Arc)` - **`web/router.rs`** — Axum 路由,接受 `Arc` -- **`web/handlers/`** — 146 个 HTTP API 端点,全部使用 `Extension>` +- **`web/handlers/`** — HTTP API 端点,全部使用 `Extension>` ### 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 终端管理 +- **`models/`** — 共享数据结构(agent、conversation、message、folder、chat_channel、system) +- **`parsers/`** — 每个代理一个解析器(claude、codex、opencode、gemini、cline、openclaw) +- **`commands/`** — 业务逻辑,`_core` 函数供两种模式共用,`#[tauri::command]` 函数仅桌面模式 +- **`web/`** — Axum HTTP API + WebSocket + 静态文件服务 + 认证中间件 +- **`acp/`** — Agent Client Protocol 连接管理(注册、预检、fork、二进制缓存、终端运行时) - **`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 组件 +#### 核心库(`lib/`) + +- **`transport/`** — Transport 抽象层(自动检测 Tauri/Web 环境切换 `invoke()`/`fetch()`) +- **`adapters/`** — AI 响应到组件渲染的适配器 +- **`types.ts`** — Rust 模型的 TypeScript 镜像 +- **`api.ts`** — 主 API 客户端 +- **`tauri.ts`** — Tauri API 封装 + +#### 国际化(`i18n/`) + +- 支持 10 种语言:英语、简体中文、繁体中文、日语、韩语、西班牙语、德语、法语、葡萄牙语、阿拉伯语 +- 使用 next-intl 框架,消息文件存放在 `i18n/messages/` ### 数据流 桌面模式:前端 `invoke()` → Tauri 命令 → 业务逻辑 → 返回数据 服务器模式:前端 `fetch()` → Axum HTTP API → 同一业务逻辑 → 返回 JSON +实时通信:后端事件 → EventEmitter(Tauri 事件 / WebSocket 广播)→ 前端 ### 条件编译约定 @@ -102,6 +93,7 @@ cargo build - **路径别名**:`@/*` 映射到 `./src/*`,导入写法为 `@/lib/utils`、`@/components/ui/button` - **Rust serde 约定**:`AgentType` 序列化为 snake_case(`claude_code`、`open_code`)。Tauri 命令参数在 JS 侧使用 camelCase,Rust 侧使用 snake_case - **服务器部署**:通过环境变量配置(`CODEG_PORT`、`CODEG_HOST`、`CODEG_TOKEN`、`CODEG_DATA_DIR`、`CODEG_STATIC_DIR`) +- **Docker 支持**:多阶段构建(Node.js + Rust),支持 `docker-compose` 一键部署 ## 代码风格 diff --git a/CLAUDE.md b/CLAUDE.md index cf0311d..e4ad785 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -4,41 +4,26 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co ## 项目概述 -codeg 是一个多模式应用,支持桌面客户端和独立服务器部署,用于聚合和浏览本地 AI 编码代理的会话记录。它从多个代理(Claude Code、Codex、OpenCode、Gemini CLI、OpenClaw、Cline)的本地文件系统中读取会话数据,统一格式后在 UI 中展示。 +codeg 是一个多模式应用,支持桌面客户端和独立服务器部署,用于聚合和浏览本地 AI 编码代理的会话记录。它从多个代理(Claude Code、Codex、OpenCode、Gemini CLI、OpenClaw、Cline)的本地文件系统中读取会话数据,统一格式后在 UI 中展示。同时支持通过聊天频道(Telegram、飞书、微信)远程交互,以及项目脚手架生成、Git 工作流、终端管理等功能。 ## 技术栈 - **桌面运行时**: Tauri 2(Rust 后端 + webview 前端) -- **服务器运行时**: 独立 Rust 二进制(Axum HTTP + WebSocket,无需 Tauri/GUI) +- **服务器运行时**: 独立 Rust 二进制(Axum HTTP + WebSocket) - **前端**: Next.js 16(静态导出模式)+ React 19 + TypeScript(strict) - **样式**: Tailwind CSS v4 + shadcn/ui(radix-maia 风格) +- **国际化**: next-intl +- **数据库**: SeaORM + SQLite - **包管理器**: pnpm -## 开发命令 +## 代码检查(任务完成后进行必要的检查) ```bash -# 启动完整桌面应用(Tauri + Next.js Turbopack 开发服务器) -pnpm tauri dev - -# 仅启动前端 -pnpm dev - -# 构建前端(静态导出到 out/) +# 前端 检查 +pnpm eslint . pnpm build -# 构建 Tauri 桌面应用 -pnpm tauri build - -# 启动独立服务器(无需 Tauri/GUI) -pnpm server:dev - -# 构建服务器 release 二进制 -pnpm server:build - -# Lint 检查 -pnpm eslint . - -# Rust 检查(在 src-tauri/ 目录下执行) +# 后端 Rust 检查(在 src-tauri/ 目录下执行) cargo check # 桌面模式(默认) cargo check --bin codeg-server --no-default-features # 服务器模式 cargo clippy @@ -61,34 +46,40 @@ cargo build - **`app_state.rs`** — `AppState` 共享状态结构,两种模式通过 `EventEmitter` 枚举区分事件发射方式 - **`web/event_bridge.rs`** — `EventEmitter::Tauri(AppHandle)` 或 `EventEmitter::WebOnly(Arc)` - **`web/router.rs`** — Axum 路由,接受 `Arc` -- **`web/handlers/`** — 146 个 HTTP API 端点,全部使用 `Extension>` +- **`web/handlers/`** — HTTP API 端点,全部使用 `Extension>` ### 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 终端管理 +- **`models/`** — 共享数据结构(agent、conversation、message、folder、chat_channel、system) +- **`parsers/`** — 每个代理一个解析器(claude、codex、opencode、gemini、cline、openclaw) +- **`commands/`** — 业务逻辑,`_core` 函数供两种模式共用,`#[tauri::command]` 函数仅桌面模式 +- **`web/`** — Axum HTTP API + WebSocket + 静态文件服务 + 认证中间件 +- **`acp/`** — Agent Client Protocol 连接管理(注册、预检、fork、二进制缓存、终端运行时) - **`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 组件 +#### 核心库(`lib/`) + +- **`transport/`** — Transport 抽象层(自动检测 Tauri/Web 环境切换 `invoke()`/`fetch()`) +- **`adapters/`** — AI 响应到组件渲染的适配器 +- **`types.ts`** — Rust 模型的 TypeScript 镜像 +- **`api.ts`** — 主 API 客户端 +- **`tauri.ts`** — Tauri API 封装 + +#### 国际化(`i18n/`) + +- 支持 10 种语言:英语、简体中文、繁体中文、日语、韩语、西班牙语、德语、法语、葡萄牙语、阿拉伯语 +- 使用 next-intl 框架,消息文件存放在 `i18n/messages/` ### 数据流 桌面模式:前端 `invoke()` → Tauri 命令 → 业务逻辑 → 返回数据 服务器模式:前端 `fetch()` → Axum HTTP API → 同一业务逻辑 → 返回 JSON +实时通信:后端事件 → EventEmitter(Tauri 事件 / WebSocket 广播)→ 前端 ### 条件编译约定 @@ -102,6 +93,7 @@ cargo build - **路径别名**:`@/*` 映射到 `./src/*`,导入写法为 `@/lib/utils`、`@/components/ui/button` - **Rust serde 约定**:`AgentType` 序列化为 snake_case(`claude_code`、`open_code`)。Tauri 命令参数在 JS 侧使用 camelCase,Rust 侧使用 snake_case - **服务器部署**:通过环境变量配置(`CODEG_PORT`、`CODEG_HOST`、`CODEG_TOKEN`、`CODEG_DATA_DIR`、`CODEG_STATIC_DIR`) +- **Docker 支持**:多阶段构建(Node.js + Rust),支持 `docker-compose` 一键部署 ## 代码风格