feat: add project-review workflow (whole-project / single-feature review)

Adds the project-review workflow for code review independent of the git
diff. The scope is parsed from the user instruction: 全面/整个项目 ->
whole-project (score every source file), otherwise feature + target
keyword (locate the code with semantic search + graph queries).

- scoring_tools.py: score_review_func gains all_files=True to score every
  source file in the graph via store.get_all_files()
- main.py: score_review_tool gains all_files param; registers the
  project_review MCP prompt (prompts 6->7)
- prompts.py: project_review_prompt(scope, target) with whole-project and
  feature branches (fixed a precedence bug that truncated the feature text)
- skills.py + skills/project-review/: new read-only project-review skill
  with shared checklists
- .opencode/command/code-review-graph-project-review.md: slash command
- tests: test_project_review.py (prompt rendering), TestProjectReviewPrompt,
  skill count assertions 5->6, all_files wiring checks
- docs: prompts (6->7) + project-review entries across COMMANDS, CLAUDE,
  README (+localized), INDEX, architecture, LLM-OPTIMIZED-REFERENCE,
  CHANGELOG
This commit is contained in:
dev
2026-08-06 13:56:54 +08:00
parent 6f0e6f0775
commit 307d2fd471
45 changed files with 1339 additions and 131 deletions
+5 -4
View File
@@ -115,8 +115,9 @@ def get_docs_section(
Args:
section_name: Exact section name. One of: usage, review-delta,
review-pr, unified-review, score-review, commands,
legal, watch, embeddings, languages, troubleshooting.
review-pr, unified-review, project-review, score-review,
commands, legal, watch, embeddings, languages,
troubleshooting.
repo_root: Repository root path. Auto-detected from current
directory if omitted.
@@ -178,8 +179,8 @@ def get_docs_section(
available = [
"usage", "review-delta", "review-pr", "unified-review",
"score-review", "commands", "legal", "watch", "embeddings",
"languages", "troubleshooting",
"project-review", "score-review", "commands", "legal", "watch",
"embeddings", "languages", "troubleshooting",
]
return {
"status": "not_found",