When @category is selected, ms.setCursorOffset and ms.setValue were called in the same event loop tick — the cursor sync effect later read the DOM before the new mention value flushed, restoring the old caret position. Defer ms.setCursorOffset via setTimeout so it fires after the DOM reconciliation. Same fix applied to insertCategory imperative handle. |
||
|---|---|---|
| .github | ||
| apps | ||
| deploy | ||
| docker | ||
| docs | ||
| libs | ||
| openspec | ||
| public | ||
| scripts | ||
| src | ||
| .dockerignore | ||
| .drone.yml | ||
| .env.example | ||
| .gitignore | ||
| Cargo.lock | ||
| Cargo.toml | ||
| components.json | ||
| eslint.config.js | ||
| index.html | ||
| lib.rs | ||
| openapi-ts.config.ts | ||
| openapi.json | ||
| package.json | ||
| pnpm-lock.yaml | ||
| README.md | ||
| tsconfig.app.json | ||
| tsconfig.json | ||
| tsconfig.node.json | ||
| vite.config.ts | ||
GitDataAI
Where Humans & Agents Engineer Together.
Every action is a command. Every command is versioned, auditable, and composable.
项目概述
GitDataAI 是一个面向 Agentic 时代的开发协作平台,通过 Command as Service 理念,将人类与 AI 代理的协作标准化。每一次操作——创建仓库、发起 PR、调度 Agent——都是一条可版本化、可回放、可组合的命令。CLI 即 API,工作流即可查询的命令流。
核心功能
- Command as Service — 所有操作均为版本化命令,CLI 即 API,支持回放与组合
- Git Repositories — 完整 Git 操作(分支、提交、合并),HTTP/SSH 访问,内置分支保护
- Collaborative Rooms — 人类与 AI 代理共存的实时命令执行空间
- AI Agents — 监听命令流,执行 Skill,报告结果,可持久化记忆
- Issue & Pull Request — 追踪、审查、Agent 自动化
- Skill Registry — 可复用的 Agent 行为包,通过命令调用
技术栈
后端 (Rust)
| 类别 | 技术 |
|---|---|
| 语言 | Rust 2024 Edition |
| Web 框架 | Actix-web |
| ORM | SeaORM |
| 数据库 | PostgreSQL |
| 缓存 | Redis |
| 实时通信 | WebSocket (actix-ws) |
| 消息队列 | Redis |
| 向量数据库 | Qdrant |
| Git 操作 | git2 / git2-ext |
| 认证 | JWT + Session |
| API 文档 | utoipa (OpenAPI) |
前端 (TypeScript/React)
| 类别 | 技术 |
|---|---|
| 语言 | TypeScript 5.9 |
| 框架 | React 19 |
| 路由 | React Router v7 |
| 构建工具 | Vite 8 + SWC |
| UI 组件 | shadcn/ui + Tailwind CSS 4 |
| 状态管理 | TanStack Query |
| HTTP 客户端 | Axios + OpenAPI 生成 |
| Markdown | react-markdown + Shiki |
| 拖拽 | dnd-kit |
项目结构
code/
├── apps/ # 应用程序入口
│ ├── app/ # 主 Web 应用
│ ├── gitserver/ # Git HTTP/SSH 服务器
│ ├── git-hook/ # Git Hook 处理服务
│ ├── email/ # 邮件发送服务
│ ├── migrate/ # 数据库迁移工具
│ └── operator/ # Kubernetes 操作器
├── libs/ # 共享库
│ ├── api/ # REST API 路由与处理器
│ ├── models/ # 数据库模型 (SeaORM)
│ ├── service/ # 业务逻辑层
│ ├── db/ # 数据库连接池
│ ├── config/ # 配置管理
│ ├── session/ # 会话管理
│ ├── git/ # Git 操作封装
│ ├── room/ # 实时聊天服务
│ ├── queue/ # 消息队列
│ ├── webhook/ # Webhook 处理
│ ├── rpc/ # RPC 服务 (gRPC/Tonic)
│ ├── email/ # 邮件发送
│ ├── agent/ # AI Agent 集成
│ ├── avatar/ # 头像处理
│ ├── transport/ # 传输层
│ └── migrate/ # 迁移脚本
├── src/ # 前端源代码
│ ├── app/ # 页面路由组件
│ ├── components/ # 可复用组件
│ ├── contexts/ # React Context
│ ├── client/ # API 客户端 (OpenAPI 生成)
│ ├── hooks/ # 自定义 Hooks
│ └── lib/ # 工具函数
├── docker/ # Docker 配置
├── scripts/ # 构建脚本
├── openapi.json # OpenAPI 规范文件
└── Cargo.toml # Rust Workspace 配置
快速开始
环境要求
- Rust: 最新稳定版 (Edition 2024)
- Node.js: >= 20
- pnpm: >= 10
- PostgreSQL: >= 14
- Redis: >= 6
安装步骤
-
克隆仓库
git clone <repository-url> cd code -
配置环境变量
cp .env.example .env # 编辑 .env 文件,配置数据库连接等信息 -
启动数据库与 Redis
# 使用 Docker 启动(推荐) docker compose -f docker/docker-compose.yml up -d -
数据库迁移
cargo run -p migrate -
启动后端服务
cargo run -p app -
启动前端开发服务器
pnpm install pnpm dev -
访问应用
- 前端: http://localhost:5173
- 后端 API: http://localhost:8080
开发指南
后端开发
# 运行所有测试
cargo test
# 运行特定模块测试
cargo test -p service
# 检查代码质量
cargo clippy --workspace
# 格式化代码
cargo fmt --workspace
# 生成 OpenAPI 文档
pnpm openapi:gen-json
前端开发
# 安装依赖
pnpm install
# 启动开发服务器
pnpm dev
# 构建生产版本
pnpm build
# 代码检查
pnpm lint
# 生成 OpenAPI 客户端
pnpm openapi:gen
数据库迁移
# 创建新迁移
cd libs/migrate && cargo run -- create <migration_name>
# 执行迁移
cargo run -p migrate
配置说明
必需配置项
| 变量名 | 说明 | 示例 |
|---|---|---|
APP_DATABASE_URL |
PostgreSQL 连接 | postgresql://user:pass@localhost/db |
APP_REDIS_URL |
Redis 连接 | redis://localhost:6379 |
APP_AI_API_KEY |
AI 服务 API Key | sk-xxxxx |
APP_SMTP_* |
SMTP 邮件配置 | 见 .env.example |
可选配置项
| 变量名 | 默认值 | 说明 |
|---|---|---|
APP_DATABASE_MAX_CONNECTIONS |
10 | 数据库连接池大小 |
APP_LOG_LEVEL |
info | 日志级别 |
APP_QDRANT_URL |
- | 向量数据库地址 |
APP_REPOS_ROOT |
/data/repos | Git 仓库存储路径 |
完整配置请参考 .env.example。
API 文档
启动服务后访问 http://localhost:8080/swagger-ui 查看完整的 API 文档。
架构设计
后端分层架构
┌─────────────────────────────────────┐
│ apps/app │ ← 应用入口
├─────────────────────────────────────┤
│ libs/api │ ← HTTP 路由/Handler
├─────────────────────────────────────┤
│ libs/service │ ← 业务逻辑层
├─────────────────────────────────────┤
│ libs/models │ libs/db │ libs/git│ ← 数据访问层
├─────────────────────────────────────┤
│ PostgreSQL │ Redis │ Qdrant │ ← 存储层
└─────────────────────────────────────┘
前端目录结构
src/
├── app/ # 页面级组件 (按功能模块组织)
│ ├── project/ # 项目相关页面 (Issue、Settings)
│ ├── repository/ # 仓库相关页面 (PR、代码浏览)
│ └── settings/ # 用户设置
├── components/ # 可复用组件
│ ├── ui/ # 基础 UI 组件 (shadcn)
│ ├── project/ # 项目相关组件
│ ├── repository/ # 仓库相关组件
│ └── room/ # 聊天相关组件
├── contexts/ # React Context (用户、聊天室等)
├── client/ # OpenAPI 生成的客户端
└── lib/ # 工具函数与 Hooks
任务清单
项目当前开发任务详见 task.md,按优先级分为:
- P0 — 阻塞性问题(核心流程不通)
- P1 — 核心体验(关键功能)
- P2 — 体验优化(增强功能)
许可证
[待添加]