# ingallz/fussy-review architecture

> Architecture diagram of the GitHub repository ingallz/fussy-review, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-10-26). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/ingallz/fussy-review
- Repository: https://github.com/ingallz/fussy-review

## Overview

Multi-Agent PR Review provides GitHub Action reviews, a standalone Python CLI, and a VS Code extension. Both review paths feed diffs through chunking and tree-sitter reference context to five independent AI reviewers, then filter and report findings; the extension additionally monitors unstaged files and presents review progress and results. The Python implementation was not sampled, so its internal stages and provider/reporting connections below rely on README documentation; unsampled implementation details are represented at the existing .github/scripts directory.

Main entry points: [`extension/src/review-session.ts`](https://github.com/ingallz/fussy-review/blob/main/extension/src/review-session.ts) (Review session), [`.github/scripts`](https://github.com/ingallz/fussy-review/tree/main/.github/scripts) (Five review agents), [`extension/src/findings-store.ts`](https://github.com/ingallz/fussy-review/blob/main/extension/src/findings-store.ts) (Findings store), [`.github/scripts/local_review.py`](https://github.com/ingallz/fussy-review/blob/main/.github/scripts/local_review.py) (Review CLI)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entrypoints["Review entrypoints"]
  node_action["GitHub Action<br/>[action.yml]"]
  node_cli["Review CLI<br/>[local_review.py]"]
end

subgraph group_extension["VS Code experience"]
  node_watcher["Change watcher<br/>[change-watcher.ts]"]
  node_git["Git change detection<br/>[git.ts]"]
  node_session["Review session<br/>[review-session.ts]"]
  node_runner["Engine process runner<br/>[review-runner.ts]"]
  node_pythonenv["Python environment<br/>[python-env.ts]"]
  node_settings["Review settings<br/>[settings.ts]"]
  node_settingsui["Settings panel<br/>[settings-panel.ts]"]
end

subgraph group_engine["Review engine"]
  node_diff["Diff acquisition<br/>[scripts]"]
  node_chunking["Diff chunking<br/>[scripts]"]
  node_context["Reference context"]
  node_agents["Five review agents<br/>[scripts]"]
end

subgraph group_providers["Model providers"]
  node_gemini{{"Gemini API"}}
  node_nvidia{{"NVIDIA NIM"}}
  node_antigravity{{"Antigravity CLI"}}
end

subgraph group_results["Findings and reporting"]
  node_filter["Finding merge and severity<br/>[scripts]"]
  node_protocol["Review event protocol<br/>[protocol.ts]"]
  node_store["Findings store<br/>[findings-store.ts]"]
  node_views["Progress and findings views<br/>[agents-view.ts]"]
  node_fixprompt["Fix-it prompt<br/>[fix-prompt-view.ts]"]
  node_githubreport["GitHub inline comments<br/>[scripts]"]
end

node_developer(("Developer"))
node_github(("GitHub PR"))
node_vscode(("VS Code"))
node_problems["VS Code Problems"]

node_developer -->|"invokes review"| node_vscode
node_github -->|"triggers review"| node_action
node_action -->|"runs engine"| node_cli
node_developer -->|"runs CLI"| node_cli
node_vscode -->|"shows changes"| node_watcher
node_watcher -->|"queries unstaged files"| node_git
node_developer -->|"starts review"| node_session
node_session -->|"refreshes scope"| node_watcher
node_session -->|"prepares runtime"| node_pythonenv
node_session -->|"reads configuration"| node_settings
node_session -->|"launches review"| node_runner
node_runner -->|"spawns engine"| node_cli
node_settingsui -->|"saves choices"| node_settings
node_cli -->|"acquires changes"| node_diff
node_diff -->|"splits large diffs"| node_chunking
node_chunking -->|"provides touched code"| node_context
node_context -->|"supplies context"| node_agents
node_agents -->|"requests reviews"| node_gemini
node_agents -->|"requests reviews"| node_nvidia
node_agents -.->|"runs locally through"| node_antigravity
node_agents -->|"returns findings"| node_filter
node_filter -->|"posts inline comments"| node_githubreport
node_filter -->|"streams review events"| node_protocol
node_runner -->|"parses events"| node_protocol
node_session -->|"records findings"| node_store
node_store -->|"updates displays"| node_views
node_store -->|"supplies review prompt"| node_fixprompt
node_views -->|"shows diagnostics"| node_problems
node_store -->|"publishes findings"| node_problems

click node_action "https://github.com/ingallz/fussy-review/blob/main/action.yml"
click node_cli "https://github.com/ingallz/fussy-review/blob/main/.github/scripts/local_review.py"
click node_watcher "https://github.com/ingallz/fussy-review/blob/main/extension/src/change-watcher.ts"
click node_git "https://github.com/ingallz/fussy-review/blob/main/extension/src/git.ts"
click node_session "https://github.com/ingallz/fussy-review/blob/main/extension/src/review-session.ts"
click node_runner "https://github.com/ingallz/fussy-review/blob/main/extension/src/review-runner.ts"
click node_pythonenv "https://github.com/ingallz/fussy-review/blob/main/extension/src/python-env.ts"
click node_settings "https://github.com/ingallz/fussy-review/blob/main/extension/src/settings.ts"
click node_settingsui "https://github.com/ingallz/fussy-review/blob/main/extension/src/settings-panel.ts"
click node_diff "https://github.com/ingallz/fussy-review/tree/main/.github/scripts"
click node_chunking "https://github.com/ingallz/fussy-review/tree/main/.github/scripts"
click node_context "https://github.com/ingallz/fussy-review/blob/main/.github/scripts/code_context/reference_context.py"
click node_agents "https://github.com/ingallz/fussy-review/tree/main/.github/scripts"
click node_filter "https://github.com/ingallz/fussy-review/tree/main/.github/scripts"
click node_protocol "https://github.com/ingallz/fussy-review/blob/main/extension/src/protocol.ts"
click node_store "https://github.com/ingallz/fussy-review/blob/main/extension/src/findings-store.ts"
click node_views "https://github.com/ingallz/fussy-review/blob/main/extension/src/agents-view.ts"
click node_fixprompt "https://github.com/ingallz/fussy-review/blob/main/extension/src/fix-prompt-view.ts"
click node_githubreport "https://github.com/ingallz/fussy-review/tree/main/.github/scripts"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_action,node_cli toneBlue
class node_watcher,node_git,node_session,node_runner,node_pythonenv,node_settings,node_settingsui toneAmber
class node_diff,node_chunking,node_context,node_agents toneMint
class node_gemini,node_nvidia,node_antigravity toneRose
class node_filter,node_protocol,node_store,node_views,node_fixprompt,node_githubreport,node_developer,node_github,node_vscode,node_problems toneIndigo
```

## Components

### Review entrypoints

- [GitHub Action](https://github.com/ingallz/fussy-review/blob/main/action.yml): `action.yml`
- [Review CLI](https://github.com/ingallz/fussy-review/blob/main/.github/scripts/local_review.py): `.github/scripts/local_review.py`

### VS Code experience

- [Change watcher](https://github.com/ingallz/fussy-review/blob/main/extension/src/change-watcher.ts): `extension/src/change-watcher.ts`
- [Git change detection](https://github.com/ingallz/fussy-review/blob/main/extension/src/git.ts): `extension/src/git.ts`
- [Review session](https://github.com/ingallz/fussy-review/blob/main/extension/src/review-session.ts): `extension/src/review-session.ts`
- [Engine process runner](https://github.com/ingallz/fussy-review/blob/main/extension/src/review-runner.ts): `extension/src/review-runner.ts`
- [Python environment](https://github.com/ingallz/fussy-review/blob/main/extension/src/python-env.ts): `extension/src/python-env.ts`
- [Review settings](https://github.com/ingallz/fussy-review/blob/main/extension/src/settings.ts): `extension/src/settings.ts`
- [Settings panel](https://github.com/ingallz/fussy-review/blob/main/extension/src/settings-panel.ts): `extension/src/settings-panel.ts`

### Review engine

- [Diff acquisition](https://github.com/ingallz/fussy-review/tree/main/.github/scripts): `.github/scripts`
- [Diff chunking](https://github.com/ingallz/fussy-review/tree/main/.github/scripts): `.github/scripts`
- [Reference context](https://github.com/ingallz/fussy-review/blob/main/.github/scripts/code_context/reference_context.py): `.github/scripts/code_context/reference_context.py`
- [Five review agents](https://github.com/ingallz/fussy-review/tree/main/.github/scripts): `.github/scripts`

### Model providers

- **Gemini API**
- **NVIDIA NIM**
- **Antigravity CLI**

### Findings and reporting

- [Finding merge and severity](https://github.com/ingallz/fussy-review/tree/main/.github/scripts): `.github/scripts`
- [Review event protocol](https://github.com/ingallz/fussy-review/blob/main/extension/src/protocol.ts): `extension/src/protocol.ts`
- [Findings store](https://github.com/ingallz/fussy-review/blob/main/extension/src/findings-store.ts): `extension/src/findings-store.ts`
- [Progress and findings views](https://github.com/ingallz/fussy-review/blob/main/extension/src/agents-view.ts): `extension/src/agents-view.ts`
- [Fix-it prompt](https://github.com/ingallz/fussy-review/blob/main/extension/src/fix-prompt-view.ts): `extension/src/fix-prompt-view.ts`
- [GitHub inline comments](https://github.com/ingallz/fussy-review/tree/main/.github/scripts): `.github/scripts`

### Other components

- **Developer**
- **GitHub PR**
- **VS Code**
- **VS Code Problems**

## Connections

- Developer → VS Code: invokes review (evidence: `README.md`)
- GitHub PR → GitHub Action: triggers review (evidence: `README.md`)
- GitHub Action → Review CLI: runs engine (evidence: `README.md`)
- Developer → Review CLI: runs CLI (evidence: `README.md`)
- VS Code → Change watcher: shows changes (evidence: `README.md`)
- Change watcher → Git change detection: queries unstaged files (evidence: `extension/src/change-watcher.ts`)
- Developer → Review session: starts review (evidence: `README.md`)
- Review session → Change watcher: refreshes scope (evidence: `extension/src/review-session.ts`)
- Review session → Python environment: prepares runtime (evidence: `extension/src/review-session.ts`)
- Review session → Review settings: reads configuration (evidence: `extension/src/review-session.ts`)
- Review session → Engine process runner: launches review (evidence: `extension/src/review-session.ts`)
- Engine process runner → Review CLI: spawns engine (evidence: `extension/src/review-runner.ts`)
- Settings panel → Review settings: saves choices (evidence: `extension/src/settings-panel.ts`)
- Review CLI → Diff acquisition: acquires changes (evidence: `README.md`)
- Diff acquisition → Diff chunking: splits large diffs (evidence: `README.md`)
- Diff chunking → Reference context: provides touched code (evidence: `README.md`)
- Reference context → Five review agents: supplies context (evidence: `README.md`)
- Five review agents → Gemini API: requests reviews (evidence: `README.md`)
- Five review agents → NVIDIA NIM: requests reviews (evidence: `README.md`)
- Five review agents → Antigravity CLI: runs locally through (evidence: `README.md`)
- Five review agents → Finding merge and severity: returns findings (evidence: `README.md`)
- Finding merge and severity → GitHub inline comments: posts inline comments (evidence: `README.md`)
- Finding merge and severity → Review event protocol: streams review events (evidence: `extension/src/protocol.ts`)
- Engine process runner → Review event protocol: parses events (evidence: `extension/src/review-runner.ts`)
- Review session → Findings store: records findings (evidence: `extension/src/review-session.ts`)
- Findings store → Progress and findings views: updates displays (evidence: `extension/src/findings-store.ts`)
- Findings store → Fix-it prompt: supplies review prompt (evidence: `extension/src/fix-prompt-view.ts`)
- Progress and findings views → VS Code Problems: shows diagnostics (evidence: `README.md`)
- Findings store → VS Code Problems: publishes findings (evidence: `README.md`)
