docs: 同步 README 与 docs 文档至当前代码状态

- README 补充 PageShell、i18n、Agent CLI、中间件监控等近期功能
- project-structure 重写 api/pages/locales 目录约定
- development-guide 新增 PageShell 与 i18n 开发规范
- PROJECT_SUMMARY 整体重写,移除过时 internal/ 结构
- docs/README 新增 Agent CLI 设计文档索引与近期变更摘要
- dev-log 追加 2026-07-01 变更记录
This commit is contained in:
Logan committed 2026-07-01 12:50:58 +08:00
1 parent e363ded445
commit 4cb0e62857
6 files changed
+300 -278

No files matched your search

+77 -10
View File
@@ -52,7 +52,8 @@ feat: 添加服务器批量导入功能
| `router/` | 路由注册 |
| `service/` / `repository/` | 业务逻辑 / 数据访问 |
| `pkg/database/` | 数据库连接 + AutoMigrate |
| `pkg/logger/` | 日志工具 |
| `pkg/agentcli/` | Agent CLI 引擎(ReAct + Evolver) |
| `pkg/remoteexec/` | Go-native SSH 远程执行 |
| `static/` | 前端 embed 静态资源 |
### 命名规范
@@ -121,6 +122,7 @@ func (h *ServerHandler) CreateServer(c *gin.Context) {
- Go 编译前设置 `GOPROXY=https://goproxy.cn,direct`
- SQLite 需要 `CGO_ENABLED=1`
- JWT 使用 `golang-jwt/jwt/v5`,`jwt.TimeFunc()` 已移除,用 `time.Now()`
- 新增或修改代码注释末尾署名 `// Logan.Li`
## 前端规范(React + TypeScript)
@@ -128,14 +130,17 @@ func (h *ServerHandler) CreateServer(c *gin.Context) {
| 目录 | 职责 |
|------|------|
| `src/components/*/` | 业务组件 |
| `src/api/` | API 封装(按菜单域分子目录,`http.ts` 自动解包 `.data`) |
| `src/pages/` | 复杂域级页面(多 Tab / 多子面板) |
| `src/components/*/` | 可复用业务组件 |
| `src/components/layout/` | PageShell / Sidebar / Header / ThemePicker |
| `src/components/ui/` | shadcn/ui 基础组件 |
| `src/locales/` | i18n 翻译文件(zh-CN.json / en-US.json) |
| `src/i18n/` | i18next 初始化 |
| `src/hooks/` | 自定义 Hooks |
| `src/lib/` | 工具函数 |
| `src/services/` | API 封装 |
| `src/store/` | Zustand 状态管理 |
| `src/types/` | TypeScript 类型 |
| `src/mocks/` | Mock 数据 |
| `src/types/` | TypeScript 类型(按域拆分) |
| `src/utils/` | 主题 / 权限 / 导出等工具 |
### 命名规范
@@ -143,12 +148,65 @@ func (h *ServerHandler) CreateServer(c *gin.Context) {
- 工具文件:`camelCase.ts`(如 `formatDate.ts`)
- 组件名:`PascalCase`
### PageShell 页面骨架
新页面优先使用 `PageShell` 统一布局:
```tsx
import { PageShell } from '@/components/layout/PageShell';
import { useTranslation } from 'react-i18next';
export function MyPage() {
const { t } = useTranslation();
return (
<PageShell
title={t('myModule.title')}
subtitle={t('myModule.subtitle')}
icon={<ServerIcon className="h-5 w-5" />}
actions={<Button>操作</Button>}
toolbar={<SearchInput />}
tabs={[{ id: 'list', label: t('myModule.tabList') }]}
activeTab="list"
onTabChange={() => {}}
variant="list"
>
{/* 页面内容 */}
</PageShell>
);
}
```
`variant` 取值:`default` | `list` | `config` | `workspace`。
### 国际化 (i18n)
- 框架:i18next + react-i18next
- 语言:`zh-CN`(默认)/ `en-US`
- 翻译文件:`src/locales/zh-CN.json` / `en-US.json`
- 命名空间按模块划分:`common`、`menu`、`dashboard`、`server`、`alert`、`approval`、`audit`、`deploy`、`k8s` 等
新增文案规范:
```tsx
// ✅ 使用翻译键
const { t } = useTranslation();
<span>{t('server.batchImport')}</span>
// ❌ 禁止硬编码中文(已迁移模块)
<span>批量导入</span>
```
双语同步:修改 `zh-CN.json` 时必须同步更新 `en-US.json`。
### UI 设计原则
- 能去掉的装饰都去掉(无边框、无多余分隔线)
- 选中态用 `bg-surface-active`,不用彩色高亮
- 页面打开即用,不需要额外的"新建"按钮跳转
- 操作成功不弹 toast,仅在失败时提示
- 主题感知 — 使用 CSS 变量 `var(--dg-xxx)`,不硬编码颜色
- 按钮文案 2–4 字
- 禁止 `window.confirm()` / `alert()`,使用 `useConfirm()` + `toast`
- Radix Dialog 必须包含 `<DialogDescription>`
### API 调用
@@ -156,7 +214,9 @@ func (h *ServerHandler) CreateServer(c *gin.Context) {
```typescript
// 开发环境请求会被代理到 http://localhost:8080
fetch('/api/v1/servers')
// http.ts 已自动提取 Response.Data,列表返回 { list, total }
import { getServers } from '@/api/server';
const { list, total } = await getServers({ page: 1 });
```
## 测试
@@ -165,7 +225,8 @@ fetch('/api/v1/servers')
```bash
cd backend
go test -v ./...
go vet ./...
go build -o aiops-server .
```
### 前端构建测试
@@ -183,6 +244,12 @@ npx tsc --noEmit # 类型检查(提交前零错误)
./aiops version
```
### 集成测试
```bash
python3 tests/integration_test.py --host localhost --port 8080
```
## 日志
| 级别 | 使用场景 |
@@ -195,4 +262,4 @@ npx tsc --noEmit # 类型检查(提交前零错误)
```go
log.Info("server started", zap.String("port", cfg.Port))
log.Error("database error", zap.Error(err))
```
```