From 677e19907c80cd9393fbdbe847f545432895d6c7 Mon Sep 17 00:00:00 2001 From: doccker Date: Fri, 20 Mar 2026 21:30:52 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=20/optimize=20?= =?UTF-8?q?=E5=91=BD=E4=BB=A4=E3=80=81Codex=20=E9=85=8D=E7=BD=AE=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E4=B8=8E=E5=A4=9A=E9=A1=B9=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 /optimize 系统优化命令,支持 full/ux/perf/code 四种模式 - 新增 .codex/ 配置及 sync-config 同步逻辑(sh + bat) - redis-safety 从 rules 下沉到 skills,减少每次会话固定 token 消耗 - java-dev 新增 Native SQL 规范(MySQL 保留字别名检测) - go-dev 性能优化表补充 SQL 保留字提示 - ui-ux-pro-max 去掉 paths 自动触发,改为手动/描述触发 - plugins.json 清理 3 个低频插件,新增 code-review - defensive rule 新增上下文管理提示(/btw、/compact) - check-toolsearch 修复版本显示(改用 claude --version) - gitignore 模板新增 10 个 AI 工具忽略规则 - Dockerfile 模板引入 BuildKit 缓存和 GOPROXY - publish.sh 优化 release notes 格式 - 更新 LICENSE 为 PolyForm NC、新增 NOTICE - README 大幅更新:Codex Part 3、插件列表、上下文管理最佳实践 --- .claude/commands/check-toolsearch.md | 10 +- .claude/commands/optimize.md | 489 ++++++++++++++++++ .claude/plugins.json | 18 +- .claude/rules/claude-code-defensive.md | 5 + .claude/skills/go-dev/SKILL.md | 1 + .claude/skills/java-dev/SKILL.md | 34 ++ .../redis-safety/SKILL.md} | 3 +- .claude/skills/ui-ux-pro-max/SKILL.md | 12 +- .claude/templates/gitignore-go.tmpl | 17 +- .codex/global/AGENTS.md | 26 + .codex/global/rules/cc-dangerous-ops.rules | 71 +++ .codex/global/rules/cc-safe-default.rules | 35 ++ .codex/manifests/sync-map.md | 26 + .codex/profiles/cc-balanced.toml | 6 + .codex/profiles/cc-deep.toml | 6 + .codex/profiles/cc-fast-api.toml | 6 + .codex/skills/cc-bash-style/SKILL.md | 27 + .../skills/cc-bash-style/agents/openai.yaml | 5 + .../cc-bash-style/references/bash-comments.md | 5 + .../cc-bash-style/references/heredoc.md | 5 + .../cc-bash-style/references/tee-write.md | 5 + .codex/skills/cc-commit-msg/SKILL.md | 35 ++ .../skills/cc-commit-msg/agents/openai.yaml | 6 + .../cc-commit-msg/references/commit-types.md | 17 + .../references/message-format.md | 30 ++ .codex/skills/cc-core-defensive/SKILL.md | 38 ++ .../cc-core-defensive/agents/openai.yaml | 5 + .../references/change-boundary.md | 6 + .../references/decision-principles.md | 7 + .../references/verification.md | 6 + .codex/skills/cc-design/SKILL.md | 28 + .codex/skills/cc-design/agents/openai.yaml | 6 + .../cc-design/references/checklist-usage.md | 5 + .../cc-design/references/design-scope.md | 5 + .../cc-design/references/tradeoff-thinking.md | 5 + .../cc-design/templates/design-checklist.md | 11 + .../skills/cc-design/templates/design-doc.md | 13 + .codex/skills/cc-fix/SKILL.md | 49 ++ .codex/skills/cc-fix/agents/openai.yaml | 6 + .codex/skills/cc-fix/references/debug-mode.md | 6 + .codex/skills/cc-fix/references/fix-mode.md | 5 + .../references/verification-after-fix.md | 6 + .codex/skills/cc-fix/templates/fix-report.md | 9 + .codex/skills/cc-frontend-dev/SKILL.md | 31 ++ .../skills/cc-frontend-dev/agents/openai.yaml | 5 + .../references/accessibility.md | 5 + .../skills/cc-frontend-dev/references/css.md | 5 + .../cc-frontend-dev/references/react-vue.md | 5 + .../cc-frontend-dev/references/testing.md | 5 + .../cc-frontend-dev/references/typescript.md | 5 + .../cc-frontend-dev/references/ui-style.md | 5 + .codex/skills/cc-go-dev/SKILL.md | 30 ++ .codex/skills/cc-go-dev/agents/openai.yaml | 5 + .../cc-go-dev/references/concurrency.md | 5 + .codex/skills/cc-go-dev/references/errors.md | 5 + .../cc-go-dev/references/project-shape.md | 5 + .codex/skills/cc-go-dev/references/style.md | 5 + .codex/skills/cc-go-dev/references/testing.md | 5 + .codex/skills/cc-java-dev/SKILL.md | 31 ++ .codex/skills/cc-java-dev/agents/openai.yaml | 5 + .../cc-java-dev/references/collections.md | 5 + .../cc-java-dev/references/concurrency.md | 5 + .../cc-java-dev/references/exceptions.md | 5 + .../skills/cc-java-dev/references/spring.md | 5 + .codex/skills/cc-java-dev/references/style.md | 5 + .../skills/cc-java-dev/references/testing.md | 5 + .codex/skills/cc-new-feature/SKILL.md | 43 ++ .../skills/cc-new-feature/agents/openai.yaml | 6 + .../references/orchestration.md | 18 + .../references/resume-policy.md | 14 + .../skills/cc-new-feature/templates/task.md | 27 + .codex/skills/cc-ops-safety/SKILL.md | 37 ++ .../skills/cc-ops-safety/agents/openai.yaml | 5 + .../references/destructive-actions.md | 5 + .../references/environment-scope.md | 5 + .../references/risk-assessment.md | 6 + .../references/rollback-thinking.md | 5 + .codex/skills/cc-optimize/SKILL.md | 37 ++ .codex/skills/cc-optimize/agents/openai.yaml | 6 + .../cc-optimize/references/optimize-modes.md | 15 + .../cc-optimize/references/report-format.md | 22 + .../cc-optimize/references/scope-selection.md | 19 + .../cc-optimize/templates/optimize-report.md | 27 + .codex/skills/cc-project-init/SKILL.md | 37 ++ .../skills/cc-project-init/agents/openai.yaml | 6 + .../cc-project-init/assets/AGENTS.project.md | 136 +++++ .../assets/Dockerfile-go-frontend.tmpl | 31 ++ .../cc-project-init/assets/Dockerfile-go.tmpl | 22 + .../assets/docker-compose-mysql.yml.tmpl | 32 ++ .../assets/docker-compose-redis.yml.tmpl | 24 + .../assets/docker-compose-sqlite.yml.tmpl | 13 + .../cc-project-init/assets/dockerignore.tmpl | 55 ++ .../cc-project-init/assets/gitignore-go.tmpl | 95 ++++ .../cc-project-init/assets/restart-go.sh.tmpl | 41 ++ .../assets/restart-java.sh.tmpl | 37 ++ .../references/template-selection.md | 30 ++ .codex/skills/cc-python-dev/SKILL.md | 29 ++ .../skills/cc-python-dev/agents/openai.yaml | 5 + .../cc-python-dev/references/pydantic.md | 5 + .../skills/cc-python-dev/references/pytest.md | 5 + .../skills/cc-python-dev/references/style.md | 5 + .../cc-python-dev/references/toolchain.md | 5 + .../skills/cc-python-dev/references/typing.md | 5 + .codex/skills/cc-requirement/SKILL.md | 28 + .../skills/cc-requirement/agents/openai.yaml | 6 + .../references/ambiguity-checks.md | 6 + .../references/interrogate-mode.md | 5 + .../references/requirement-scope.md | 5 + .../templates/interrogate-checklist.md | 9 + .../templates/requirement-doc.md | 11 + .codex/skills/cc-review/SKILL.md | 52 ++ .codex/skills/cc-review/agents/openai.yaml | 5 + .../cc-review/references/full-review.md | 5 + .../cc-review/references/quick-review.md | 5 + .../cc-review/references/review-priority.md | 5 + .../cc-review/references/security-review.md | 5 + .../cc-review/templates/review-report.md | 7 + .codex/skills/cc-size-check/SKILL.md | 27 + .../skills/cc-size-check/agents/openai.yaml | 6 + .../references/acceptable-complexity.md | 5 + .../references/simplification-signals.md | 6 + .../references/size-heuristics.md | 5 + .../cc-size-check/templates/size-report.md | 7 + .codex/skills/cc-status/SKILL.md | 33 ++ .codex/skills/cc-status/agents/openai.yaml | 5 + .../cc-status/references/status-checks.md | 20 + .codex/tasks/.gitkeep | 1 + .codex/templates/.gitkeep | 1 + .gemini/settings.json | 3 + LICENSE | 139 ++++- NOTICE | 12 + README.md | 419 ++++++++++++--- cover.svg | 195 ++++++- tools/sync-config.bat | 86 ++- tools/sync-config.sh | 315 ++++++++--- wx-hao.png | Bin 177823 -> 74544 bytes 136 files changed, 3462 insertions(+), 200 deletions(-) create mode 100644 .claude/commands/optimize.md rename .claude/{rules/redis-safety.md => skills/redis-safety/SKILL.md} (92%) create mode 100644 .codex/global/AGENTS.md create mode 100644 .codex/global/rules/cc-dangerous-ops.rules create mode 100644 .codex/global/rules/cc-safe-default.rules create mode 100644 .codex/manifests/sync-map.md create mode 100644 .codex/profiles/cc-balanced.toml create mode 100644 .codex/profiles/cc-deep.toml create mode 100644 .codex/profiles/cc-fast-api.toml create mode 100644 .codex/skills/cc-bash-style/SKILL.md create mode 100644 .codex/skills/cc-bash-style/agents/openai.yaml create mode 100644 .codex/skills/cc-bash-style/references/bash-comments.md create mode 100644 .codex/skills/cc-bash-style/references/heredoc.md create mode 100644 .codex/skills/cc-bash-style/references/tee-write.md create mode 100644 .codex/skills/cc-commit-msg/SKILL.md create mode 100644 .codex/skills/cc-commit-msg/agents/openai.yaml create mode 100644 .codex/skills/cc-commit-msg/references/commit-types.md create mode 100644 .codex/skills/cc-commit-msg/references/message-format.md create mode 100644 .codex/skills/cc-core-defensive/SKILL.md create mode 100644 .codex/skills/cc-core-defensive/agents/openai.yaml create mode 100644 .codex/skills/cc-core-defensive/references/change-boundary.md create mode 100644 .codex/skills/cc-core-defensive/references/decision-principles.md create mode 100644 .codex/skills/cc-core-defensive/references/verification.md create mode 100644 .codex/skills/cc-design/SKILL.md create mode 100644 .codex/skills/cc-design/agents/openai.yaml create mode 100644 .codex/skills/cc-design/references/checklist-usage.md create mode 100644 .codex/skills/cc-design/references/design-scope.md create mode 100644 .codex/skills/cc-design/references/tradeoff-thinking.md create mode 100644 .codex/skills/cc-design/templates/design-checklist.md create mode 100644 .codex/skills/cc-design/templates/design-doc.md create mode 100644 .codex/skills/cc-fix/SKILL.md create mode 100644 .codex/skills/cc-fix/agents/openai.yaml create mode 100644 .codex/skills/cc-fix/references/debug-mode.md create mode 100644 .codex/skills/cc-fix/references/fix-mode.md create mode 100644 .codex/skills/cc-fix/references/verification-after-fix.md create mode 100644 .codex/skills/cc-fix/templates/fix-report.md create mode 100644 .codex/skills/cc-frontend-dev/SKILL.md create mode 100644 .codex/skills/cc-frontend-dev/agents/openai.yaml create mode 100644 .codex/skills/cc-frontend-dev/references/accessibility.md create mode 100644 .codex/skills/cc-frontend-dev/references/css.md create mode 100644 .codex/skills/cc-frontend-dev/references/react-vue.md create mode 100644 .codex/skills/cc-frontend-dev/references/testing.md create mode 100644 .codex/skills/cc-frontend-dev/references/typescript.md create mode 100644 .codex/skills/cc-frontend-dev/references/ui-style.md create mode 100644 .codex/skills/cc-go-dev/SKILL.md create mode 100644 .codex/skills/cc-go-dev/agents/openai.yaml create mode 100644 .codex/skills/cc-go-dev/references/concurrency.md create mode 100644 .codex/skills/cc-go-dev/references/errors.md create mode 100644 .codex/skills/cc-go-dev/references/project-shape.md create mode 100644 .codex/skills/cc-go-dev/references/style.md create mode 100644 .codex/skills/cc-go-dev/references/testing.md create mode 100644 .codex/skills/cc-java-dev/SKILL.md create mode 100644 .codex/skills/cc-java-dev/agents/openai.yaml create mode 100644 .codex/skills/cc-java-dev/references/collections.md create mode 100644 .codex/skills/cc-java-dev/references/concurrency.md create mode 100644 .codex/skills/cc-java-dev/references/exceptions.md create mode 100644 .codex/skills/cc-java-dev/references/spring.md create mode 100644 .codex/skills/cc-java-dev/references/style.md create mode 100644 .codex/skills/cc-java-dev/references/testing.md create mode 100644 .codex/skills/cc-new-feature/SKILL.md create mode 100644 .codex/skills/cc-new-feature/agents/openai.yaml create mode 100644 .codex/skills/cc-new-feature/references/orchestration.md create mode 100644 .codex/skills/cc-new-feature/references/resume-policy.md create mode 100644 .codex/skills/cc-new-feature/templates/task.md create mode 100644 .codex/skills/cc-ops-safety/SKILL.md create mode 100644 .codex/skills/cc-ops-safety/agents/openai.yaml create mode 100644 .codex/skills/cc-ops-safety/references/destructive-actions.md create mode 100644 .codex/skills/cc-ops-safety/references/environment-scope.md create mode 100644 .codex/skills/cc-ops-safety/references/risk-assessment.md create mode 100644 .codex/skills/cc-ops-safety/references/rollback-thinking.md create mode 100644 .codex/skills/cc-optimize/SKILL.md create mode 100644 .codex/skills/cc-optimize/agents/openai.yaml create mode 100644 .codex/skills/cc-optimize/references/optimize-modes.md create mode 100644 .codex/skills/cc-optimize/references/report-format.md create mode 100644 .codex/skills/cc-optimize/references/scope-selection.md create mode 100644 .codex/skills/cc-optimize/templates/optimize-report.md create mode 100644 .codex/skills/cc-project-init/SKILL.md create mode 100644 .codex/skills/cc-project-init/agents/openai.yaml create mode 100644 .codex/skills/cc-project-init/assets/AGENTS.project.md create mode 100644 .codex/skills/cc-project-init/assets/Dockerfile-go-frontend.tmpl create mode 100644 .codex/skills/cc-project-init/assets/Dockerfile-go.tmpl create mode 100644 .codex/skills/cc-project-init/assets/docker-compose-mysql.yml.tmpl create mode 100644 .codex/skills/cc-project-init/assets/docker-compose-redis.yml.tmpl create mode 100644 .codex/skills/cc-project-init/assets/docker-compose-sqlite.yml.tmpl create mode 100644 .codex/skills/cc-project-init/assets/dockerignore.tmpl create mode 100644 .codex/skills/cc-project-init/assets/gitignore-go.tmpl create mode 100644 .codex/skills/cc-project-init/assets/restart-go.sh.tmpl create mode 100644 .codex/skills/cc-project-init/assets/restart-java.sh.tmpl create mode 100644 .codex/skills/cc-project-init/references/template-selection.md create mode 100644 .codex/skills/cc-python-dev/SKILL.md create mode 100644 .codex/skills/cc-python-dev/agents/openai.yaml create mode 100644 .codex/skills/cc-python-dev/references/pydantic.md create mode 100644 .codex/skills/cc-python-dev/references/pytest.md create mode 100644 .codex/skills/cc-python-dev/references/style.md create mode 100644 .codex/skills/cc-python-dev/references/toolchain.md create mode 100644 .codex/skills/cc-python-dev/references/typing.md create mode 100644 .codex/skills/cc-requirement/SKILL.md create mode 100644 .codex/skills/cc-requirement/agents/openai.yaml create mode 100644 .codex/skills/cc-requirement/references/ambiguity-checks.md create mode 100644 .codex/skills/cc-requirement/references/interrogate-mode.md create mode 100644 .codex/skills/cc-requirement/references/requirement-scope.md create mode 100644 .codex/skills/cc-requirement/templates/interrogate-checklist.md create mode 100644 .codex/skills/cc-requirement/templates/requirement-doc.md create mode 100644 .codex/skills/cc-review/SKILL.md create mode 100644 .codex/skills/cc-review/agents/openai.yaml create mode 100644 .codex/skills/cc-review/references/full-review.md create mode 100644 .codex/skills/cc-review/references/quick-review.md create mode 100644 .codex/skills/cc-review/references/review-priority.md create mode 100644 .codex/skills/cc-review/references/security-review.md create mode 100644 .codex/skills/cc-review/templates/review-report.md create mode 100644 .codex/skills/cc-size-check/SKILL.md create mode 100644 .codex/skills/cc-size-check/agents/openai.yaml create mode 100644 .codex/skills/cc-size-check/references/acceptable-complexity.md create mode 100644 .codex/skills/cc-size-check/references/simplification-signals.md create mode 100644 .codex/skills/cc-size-check/references/size-heuristics.md create mode 100644 .codex/skills/cc-size-check/templates/size-report.md create mode 100644 .codex/skills/cc-status/SKILL.md create mode 100644 .codex/skills/cc-status/agents/openai.yaml create mode 100644 .codex/skills/cc-status/references/status-checks.md create mode 100644 .codex/tasks/.gitkeep create mode 100644 .codex/templates/.gitkeep create mode 100644 NOTICE diff --git a/.claude/commands/check-toolsearch.md b/.claude/commands/check-toolsearch.md index 9b99a4e..5b62feb 100644 --- a/.claude/commands/check-toolsearch.md +++ b/.claude/commands/check-toolsearch.md @@ -8,9 +8,13 @@ description: 检查 ToolSearch(WebSearch)是否可用 ### 1. 尝试调用 WebSearch -使用 WebSearch 工具搜索关键词 `Claude Code latest version`。 +使用 WebSearch 工具搜索关键词 `Claude Code CLI`。 -### 2. 判断结果 +### 2. 获取本机版本 + +使用 Bash 执行 `claude --version` 获取用户当前安装的 Claude Code 版本号。 + +### 3. 判断结果 **如果搜索成功返回结果**: @@ -23,6 +27,8 @@ description: 检查 ToolSearch(WebSearch)是否可用 - 大幅减少 token 占用(工具定义不再内嵌上下文) - 模型表现更好(上下文更干净,注意力不被稀释) - 对话轮次更多(同样的上下文窗口可以增加数轮对话) + +当前 Claude Code 版本为 {claude --version 的输出}。 ``` **如果搜索失败或报错**: diff --git a/.claude/commands/optimize.md b/.claude/commands/optimize.md new file mode 100644 index 0000000..67a9daf --- /dev/null +++ b/.claude/commands/optimize.md @@ -0,0 +1,489 @@ +--- +description: 系统优化扫描(full/ux/perf/code 四种模式) +allowed-tools: Bash(git ls-files:*), Bash(git diff:*), Bash(git status:*), Bash(git log:*), Bash(git stash:*), Bash(git checkout:*), Bash(go build:*), Bash(go test:*), Bash(go vet:*), Bash(npm run build:*), Bash(npm test:*), Bash(npx vue-tsc:*), Bash(mvn compile:*), Bash(mvn test:*), Bash(wc:*), Bash(python -m pytest:*), Read, Glob, Grep, Edit, Write, Agent, WebSearch +argument-hint: "[ux|perf|code] 默认 full 全量扫描" +--- + +根据参数选择扫描模式: + +- `/optimize` 或 `/optimize full` → 六维全量评估 +- `/optimize ux` → 仅 UX 与操作费力度 +- `/optimize perf` → 仅性能与中间件评估 +- `/optimize code` → 仅代码质量、语法糖与冗余 + +参数值:「$ARGUMENTS」 + +--- + +## 第 0 步:范围选择 + +使用 AskUserQuestion 询问扫描范围: + +``` +请选择扫描范围: + +1. 全量扫描(前端 + 后端) + 扫描所有代码,token 消耗较大(项目越大消耗越多), + 适合里程碑节点或季度优化。 + +2. 仅后端 + 只扫描 Go/Java/Python 等后端代码。 + +3. 仅前端 + 只扫描 Vue/React/TS 等前端代码。 + +4. 指定目录 + 用户输入目录路径,只扫描指定模块。 +``` + +用户选择「全量扫描」时,先统计规模并提示: + +```bash +# 统计文件数和行数 +git ls-files --exclude-standard | head -500 +git ls-files --exclude-standard | xargs wc -l 2>/dev/null | tail -1 +``` + +输出提示: +``` +⚠️ 全量扫描预估: + - 文件数:XX 个 + - 总行数:约 XXXX 行 + - 预计消耗 tokens 较多,确认继续?(Y/N) +``` + +用户确认后进入第 1 步。 + +--- + +## 第 1 步:项目画像 + +扫描项目基本信息,输出概览表: + +### 扫描内容 + +1. **技术栈识别**:读取 `go.mod`(Go 版本)、`package.json`(Vue/React/Node 版本)、`pom.xml`(Java 版本)、`requirements.txt`/`pyproject.toml`(Python 版本) +2. **框架识别**:Gin/Echo/Fiber、Spring Boot、Vue/React、Element Plus/Ant Design +3. **数据库**:搜索 SQLite/MySQL/PostgreSQL 连接配置 +4. **已用中间件**:搜索 Redis/MQ/MinIO/ES 的 import 和配置 +5. **文件规模统计**:按语言分类统计文件数和行数 +6. **大文件检测**:按语言阈值(Go 400行 / Vue 200行 / Java 300行 / TS/JS 300行 / Python 300行) + +### 输出格式 + +```markdown +## 项目概览 + +| 项 | 值 | +|---|---| +| 技术栈 | Go 1.22 + Gin / Vue 3.4 + Element Plus 2.7 | +| 数据库 | SQLite / MySQL | +| 已用中间件 | Redis | +| 后端文件 | XX 个,约 XXXX 行 | +| 前端文件 | XX 个,约 XXXX 行 | +| 大文件(>阈值) | X 个 | +``` + +--- + +## 第 2 步:六维评估 + +根据模式参数决定执行哪些维度: + +| 模式 | 执行维度 | +|------|---------| +| `full` | UX + PERF + CODE + SUGAR + SEC + BEST | +| `ux` | UX | +| `perf` | PERF + BEST(中间件相关) | +| `code` | CODE + SUGAR | + +--- + +### 维度 1:[UX] 用户体验与操作费力度 + +#### 前端扫描 + +| 检查项 | 扫描方法 | 判定标准 | +|--------|---------|---------| +| 表单防重复提交 | 搜索 `` / `
` 的提交处理 | 提交函数无 loading 状态控制 → 问题 | +| 列表空状态 | 搜索 `` / `v-for` 列表 | 无 `` 或 empty slot → 问题 | +| 加载状态 | 搜索 API 调用处 | 无 loading / skeleton 反馈 → 问题 | +| 错误提示 | 搜索 `catch` 块 | `console.log` 吞错误,无用户提示 → 问题 | +| 表单校验 | 搜索 `` | 无 `:rules` 或规则为空 → 问题 | +| 批量操作 | 搜索列表页 | 仅逐条操作,无批量选择能力 → 建议 | +| 响应式布局 | 搜索 `@media` / `:span` / `:xs` | 无任何响应式处理 → 建议 | + +#### 后端扫描 + +| 检查项 | 扫描方法 | 判定标准 | +|--------|---------|---------| +| 接口响应格式 | 搜索 handler 返回结构 | 不统一(有的 `{code,data}` 有的裸返回)→ 问题 | +| 分页支持 | 搜索列表查询接口 | 返回全量数据无分页 → 问题 | +| 参数校验 | 搜索 handler 入参 | 无 `binding:"required"` 或手动校验 → 建议 | + +--- + +### 维度 2:[PERF] 性能与中间件评估 + +#### 数据库性能 + +| 检查项 | 扫描方法 | 判定标准 | +|--------|---------|---------| +| N+1 查询 | 搜索循环内的 DB 调用 | `for` 循环内有 `db.Find` / `db.First` → Critical | +| 全表查询 | 搜索无 Where 的 Find/Select | `db.Find(&all)` 无条件无分页 → Critical | +| 缺失索引 | 读取 model struct tag | 外键和常用查询字段无 `index` tag → Important | +| 慢查询日志 | 搜索 GORM 配置 | 未配置 `SlowThreshold` → 建议 | +| 连接池 | 搜索 DB 配置 | 未设置 `MaxOpenConns` / `MaxIdleConns` → 建议 | + +#### 前端性能 + +| 检查项 | 扫描方法 | 判定标准 | +|--------|---------|---------| +| 路由懒加载 | 搜索 router 配置 | 使用 `import Xxx from` 而非 `() => import()` → 问题 | +| 大依赖 | 读取 package.json | 检查 moment.js / lodash 全量引入 → 建议替代 | +| 图片优化 | 搜索静态资源 | 大图片(>500KB)未压缩 → 建议 | + +#### 中间件评估矩阵 + +对以下中间件逐一评估,输出决策表: + +**Redis 决策:** +- 扫描:搜索配置表/字典表的读取频率、session 管理方式、是否有热点查询 +- 必要 → 高频读低频写的数据每次查库,且 QPS > 100 +- 推荐 → 有配置/字典类数据每次查库,或 session 存数据库 +- 不需要 → 数据变更频繁,或访问量很小 + +**MinIO(对象存储)决策:** +- 扫描:搜索 `os.WriteFile` / `ioutil.WriteFile` / `multipart` / `` / 本地 `uploads/` 目录 +- 必要 → 文件上传 + 多实例/容器化部署 +- 推荐 → 文件上传 + 单机但文件量大(>1GB) 或有 CDN 需求 +- 不需要 → 无文件上传,或仅头像等小图且量极小 + +**Elasticsearch 决策:** +- 扫描:搜索 `LIKE '%keyword%'` / `.Where("name LIKE ?")` / 前端搜索框对应的后端实现 +- 必要 → 模糊搜索 + 数据量 >10w + 多字段联合搜索 +- 推荐 → 模糊搜索 + 数据量 >1w,或需要搜索建议/高亮/聚合 +- 不需要 → 精确查询为主,或数据量 <1w 的简单 LIKE + +**MQ(消息队列)决策:** +- 扫描:搜索耗时操作(发邮件 `smtp`/`gomail`、文件处理、外部 HTTP 调用)是否在请求链路中同步执行 +- 必要 → 请求链路中有 >3s 的同步阻塞操作 +- 推荐 → 有异步通知、日志收集、多服务解耦需求 +- 不需要 → 无明显异步场景 + +**输出格式:** + +```markdown +## 中间件评估 + +| 中间件 | 当前状态 | 建议 | 理由 | +|--------|---------|------|------| +| Redis | 未使用 | 推荐引入 | GetSysConfig() 每次查库,变更频率低 | +| MinIO | 未使用 | 推荐引入 | 文件存本地 ./uploads/,容器化有风险 | +| Elasticsearch | 未使用 | 暂不需要 | 搜索场景简单,数据量 <1w | +| MQ | 未使用 | 暂不需要 | 无明显异步阻塞场景 | +``` + +--- + +### 维度 3:[CODE] 代码质量与组件抽取 + +| 检查项 | 扫描方法 | 判定标准 | +|--------|---------|---------| +| **前端重复组件** | 搜索相似的模板结构(相同 el- 组件组合出现 ≥2 次) | 多页面有相同布局 → 应抽取公共组件 | +| **前端重复逻辑** | 搜索相同的 API 调用 + 分页 + 搜索模式 | ≥2 处相同 CRUD 模式 → 应抽取 composable | +| **后端重复代码** | 搜索 service 层相同的 查询+校验+更新 模式 | ≥3 个 service 相同模式 → 建议泛型封装 | +| **前后端重复定义** | 对比后端 struct/DTO 和前端 interface/type | 同一实体两端各定义,字段不一致 → 问题 | +| **上帝文件** | 按语言阈值检测超大文件 | 超过阈值 → 给出拆分建议 | +| **死代码** | 搜索未被 import 的 exported 函数、未使用的组件文件 | 存在 → 建议删除 | +| **硬编码** | 搜索魔法数字、硬编码 URL、写死的配置值 | 存在 → 建议提取常量或配置 | + +**组件抽取建议输出格式:** + +```markdown +## 组件抽取建议 + +| 当前位置 | 建议抽取为 | 复用次数 | 预计减少行数 | +|---------|-----------|---------|------------| +| views/user/Detail, views/order/Detail | components/DetailCard.vue | 3 | ~100 行 | +| api/user.ts, api/order.ts 的错误处理 | utils/request.ts | 8 | ~60 行 | +| service/user.go, service/order.go CRUD | pkg/base/service.go (泛型) | 4 | ~200 行 | +``` + +--- + +### 维度 4:[SUGAR] 语法糖与现代化写法 + +读取项目的语言版本后,按以下检查表扫描: + +#### Go(读 go.mod 的 `go 1.xx`) + +| 版本要求 | 检查项 | 旧写法特征 | 新写法 | +|---------|--------|-----------|--------| +| 1.21+ | slices 包 | 手写 Contains/Filter/Map 工具函数 | `slices.Contains()` 等标准库 | +| 1.21+ | slog 结构化日志 | `log.Println` / `fmt.Println` | `slog.Info()` | +| 1.21+ | min/max 内置函数 | 手写 `if a > b { return a }` | `max(a, b)` | +| 1.22+ | range 整数 | `for i := 0; i < n; i++` | `for i := range n` | +| 1.22+ | http 路由增强 | 简单 mux + 手动路径匹配 | `http.HandleFunc("GET /api/{id}")` | +| 1.23+ | iter 迭代器 | 手写迭代逻辑 | `iter.Seq` / `iter.Seq2` | + +#### Java(读 pom.xml 的 ``) + +| 版本要求 | 检查项 | 旧写法特征 | 新写法 | +|---------|--------|-----------|--------| +| 17+ | record | 纯数据 class(只有 getter/setter) | `record UserDTO(String name, int age)` | +| 17+ | sealed class | 大量 instanceof 判断 | sealed + pattern matching | +| 17+ | switch 表达式 | 多层 if-else 或 switch-case + break | `switch` 表达式 + `->` | +| 17+ | text block | 多行字符串拼接 | `"""` 文本块 | +| 21+ | virtual threads | `new Thread()` / 自建线程池处理简单任务 | `Thread.ofVirtual()` | + +#### Vue / TypeScript(读 package.json 版本) + +| 版本要求 | 检查项 | 旧写法特征 | 新写法 | +|---------|--------|-----------|--------| +| Vue 3.3+ | defineOptions | 单独的 `