# AGENTS.md — AI 编码助手项目指南

> 本文件面向 AI 编码助手。阅读者应假设对该项目一无所知。以下所有信息均基于项目实际内容，不做假设性推断。

---

## 项目概述

本项目是一个**语义分割系统**（Semantic Segmentation System）的 Web 前端应用，用于 AI 驱动的图像/视频分割与标注。它提供了一个深色主题（Dark Mode）的单页应用（SPA），包含项目管理、分割工作区、AI 智能分割引擎和模板库四大核心模块。

- **项目名称**: `react-example`（package.json 中的 name）
- **部署目标**: Google AI Studio（Cloud Run）
- **AI Studio 应用链接**: https://ai.studio/apps/2707f0e1-d453-4594-a618-fba53cb937c4
- **业务文档**: `语义分割系统构建方案.docx`（项目根目录，未解析内容）

---

## 技术栈

| 层级 | 技术 |
|------|------|
| 前端框架 | React 19 + TypeScript 5.8 |
| 构建工具 | Vite 6 |
| 样式方案 | TailwindCSS 4 + 自定义深色主题 |
| 状态管理 | React `useState`（无外部状态库） |
| 路由 | 无路由库，基于 React 状态切换模块 |
| Canvas 渲染 | Konva + react-konva |
| 图标库 | lucide-react |
| 动画 | motion |
| AI SDK | @google/genai（Gemini API） |
| 后端/服务器 | Express 4（单文件 `server.ts`） |
| 运行时 | Node.js，ES Modules（`"type": "module"`） |

---

## 项目结构

```
Seg_Server/
├── server.ts              # Express 服务端入口（开发服务器 + 生产静态文件服务）
├── index.html             # SPA HTML 入口
├── vite.config.ts         # Vite 构建配置
├── tsconfig.json          # TypeScript 配置
├── package.json           # 依赖与脚本
├── .env.example           # 环境变量模板
├── metadata.json          # AI Studio 元数据（目前为空）
├── src/
│   ├── main.tsx           # React 应用挂载点（StrictMode）
│   ├── App.tsx            # 根组件：模块路由 + 登录鉴权
│   ├── index.css          # TailwindCSS 导入 + 自定义工具类
│   ├── lib/
│   │   └── utils.ts       # `cn()` 工具函数（clsx + tailwind-merge）
│   └── components/
│       ├── auth/
│       │   └── Login.tsx              # 登录页
│       ├── layout/
│       │   └── Sidebar.tsx            # 左侧导航栏（w-16）
│       ├── dashboard/
│       │   └── Dashboard.tsx          # 总体概况仪表盘
│       ├── projects/
│       │   └── ProjectLibrary.tsx     # 项目库列表
│       ├── workspace/
│       │   ├── VideoWorkspace.tsx     # 核心分割工作区布局
│       │   ├── CanvasArea.tsx         # Konva 画布（缩放/平移/选点）
│       │   ├── ToolsPalette.tsx       # 左侧工具栏
│       │   ├── OntologyInspector.tsx  # 右侧本体/属性检查面板
│       │   └── FrameTimeline.tsx      # 底部时间轴
│       ├── ai/
│       │   └── AISegmentation.tsx     # AI 智能分割引擎界面
│       └── templates/
│           └── TemplateRegistry.tsx   # 模板库管理
```

---

## 构建与运行命令

```bash
# 安装依赖
npm install

# 开发模式（启动 Express + Vite 中间件，端口 3000）
npm run dev

# 生产构建（输出到 dist/）
npm run build

# 预览生产构建
npm run preview

# 生产模式启动（Node 直接运行 server.ts，需先 build）
npm start

# 类型检查（不输出文件）
npm run lint

# 清理构建产物
npm run clean
```

**开发服务器地址**: `http://localhost:3000`

**环境变量**（复制 `.env.example` 为 `.env.local`）：
- `GEMINI_API_KEY` — Gemini AI API 密钥（AI Studio 会自动注入）
- `APP_URL` — 应用托管 URL（AI Studio 自动注入 Cloud Run 地址）

---

## 运行时架构

### 前端
- 单页应用，React 19 `StrictMode` 挂载。
- 模块切换通过 `App.tsx` 中的 `activeModule` 状态控制，可选值：
  `'dashboard' | 'projects' | 'ai' | 'workspace' | 'templates'`
- 默认进入 `workspace`（分割工作区）。
- 未登录时全局拦截，显示 `Login` 组件。

### 后端 (`server.ts`)
- Express 服务器，端口 `3000`。
- **开发模式**: 集成 Vite 中间件（`middlewareMode: true`）。
- **生产模式**: 静态文件服务 `dist/`，所有路由回退到 `index.html`。
- **API 端点**（内存数据存储，无数据库）：
  - `POST /api/login` — 认证（固定用户名 `admin`，密码 `123456`）
  - `GET /api/projects` — 返回项目列表
  - `GET /api/templates` — 返回模板列表

### 部署
- 面向 **Google AI Studio** / **Cloud Run** 部署。
- `metadata.json` 用于 AI Studio 元数据配置（当前为空）。
- `vite.config.ts` 中 HMR 可通过环境变量 `DISABLE_HMR=true` 关闭（AI Studio 环境下文件监听被禁用以防止 agent 编辑时闪烁）。

---

## 代码风格与约定

### 样式规范
- **深色主题**: 全局背景色以 `#0a0a0a`、`#111`、`#0d0d0d`、`#151515`、`#1e1e1e` 为主。
- **强调色**: 青色（`cyan-400`/`cyan-500`）用于激活状态、按钮和关键指示器。
- **工具类优先**: 全面使用 TailwindCSS 工具类，通过 `cn()` 合并条件类名。
- **自定义工具类**: `index.css` 中定义 `.no-scrollbar` 用于隐藏滚动条。

### 组件规范
- 所有组件使用 **函数组件 + Hooks**，无类组件。
- 组件按功能模块分目录存放在 `src/components/{module}/` 下。
- Props 类型使用 TypeScript `interface` 定义。
- 导入排序：React → 第三方库 → 内部模块 → 类型。

### 命名规范
- 组件文件使用 **PascalCase**（如 `AISegmentation.tsx`）。
- 工具文件使用 **camelCase**（如 `utils.ts`）。
- 类型/接口使用 **PascalCase**。

### 语言约定
- **界面文本**: 全部使用 **中文**（如 "核心分割工作区"、"AI智能分割引擎"、"导出 JSON 标注集"）。
- **代码与注释**: 使用英文。
- 添加新 UI 文本时，**必须保持中文**。

---

## 测试策略

**当前状态：无测试文件。**

- 项目中不存在 `.test.` 或 `.spec.` 文件。
- 无测试框架配置（如 Jest、Vitest、Playwright）。
- 若需添加测试，建议在前端引入 Vitest（与 Vite 同生态）进行单元测试，或使用 Playwright 进行 E2E 测试。

---

## 安全注意事项

- **硬编码凭证**: `server.ts` 中登录验证使用硬编码凭据（`admin` / `123456`），生产环境必须替换为真实的身份验证机制。
- **Mock JWT**: 登录成功返回固定的 `fake-jwt-token-for-admin`，无实际的 JWT 签名验证。
- **内存数据存储**: 所有项目/模板数据存储在内存中，服务重启后数据丢失。无持久化层。
- **环境变量**: `GEMINI_API_KEY` 通过 `.env.local` 管理，已加入 `.gitignore`，不会误提交。
- **CORS / 安全头**: Express 服务器目前未配置 CORS 策略或安全响应头（如 Helmet）。

---

## 关键依赖与注意事项

- **React 19**: 使用 `createRoot` API，注意与 React 18 的部分差异。
- **TailwindCSS 4**: 使用 `@import "tailwindcss"` 语法（非 v3 的 `@tailwind` 指令）。
- **react-konva**: Canvas 交互核心，所有画布相关操作（缩放、选点、遮罩）均依赖此库。
- **use-image**: 用于异步加载图片到 Konva 画布。
- **路径别名**: `@/*` 映射到项目根目录（由 `vite.config.ts` 和 `tsconfig.json` 共同配置）。
- **缺失资源**: `Sidebar.tsx` 引用了 `/Logo.png`，但项目根目录无此文件，运行时会 404。

---

## AI Studio 特定配置

- `vite.config.ts` 中通过 `loadEnv` 加载环境变量，并将 `GEMINI_API_KEY` 注入到 `process.env.GEMINI_API_KEY`。
- AI Studio 会在部署时自动注入 `GEMINI_API_KEY` 和 `APP_URL`。
- `DISABLE_HMR` 环境变量用于在 AI Studio agent 编辑模式下关闭 HMR，避免界面闪烁。**请勿修改此逻辑。**
