# nil2004n/ci_cd_prod architecture

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

- Interactive diagram: https://gitdiagram.com/nil2004n/ci_cd_prod
- Repository: https://github.com/nil2004n/ci_cd_prod

## Overview

PWT is a local-first YAML security assessment workbench: users select a repository and YAML files, PWT runs installed scanners, stores sanitized findings and run state in shared SQLite, and presents reports through desktop or project-scoped assistant integrations. Its distinct stages are repository discovery, scanner execution, persistence, and report/evidence access; MCP adds scoped tools and database-backed analysis. README documents the product-level integration flows; source excerpts confirm discovery, scan orchestration, and report behavior, but not every internal MCP route.

Main entry points: [`pwt/src/main/java/pwt/mcp/McpScanTools.java`](https://github.com/nil2004n/ci_cd_prod/blob/main/pwt/src/main/java/pwt/mcp/McpScanTools.java) (MCP tools), [`pwt/src/main/java/pwt/application/ScanService.java`](https://github.com/nil2004n/ci_cd_prod/blob/main/pwt/src/main/java/pwt/application/ScanService.java) (Scan orchestration), [`pwt/src/main/java/pwt/infrastructure/SqliteStore.java`](https://github.com/nil2004n/ci_cd_prod/blob/main/pwt/src/main/java/pwt/infrastructure/SqliteStore.java) (Shared SQLite), [`pwt/src/main/java/pwt/desktop/PwtDesktopApp.java`](https://github.com/nil2004n/ci_cd_prod/blob/main/pwt/src/main/java/pwt/desktop/PwtDesktopApp.java) (Desktop GUI)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["User entry points"]
  node_desktop["Desktop GUI<br/>[PwtDesktopApp.java]"]
  node_opencode["OpenCode commands<br/>[tui.ts]"]
  node_claude["Claude commands"]
end

subgraph group_workflow["Assessment workflow"]
  node_discovery["YAML discovery"]
  node_discovery_api["Discovery service"]
  node_scan["Scan orchestration<br/>[ScanService.java]"]
  node_adapters["Scanner adapters"]
  node_schemas["Local schemas"]
end

subgraph group_storage["State and reports"]
  node_reports["Report service<br/>[ReportService.java]"]
  node_report_files["Report exports<br/>[ReportWriter.java]"]
  node_sqlite[("Shared SQLite<br/>[SqliteStore.java]")]
  node_journal["Assessment journal<br/>[JournalWriter.java]"]
end

subgraph group_assist["Scoped assistant access"]
  node_mcp_server["MCP server<br/>[PwtMcpServer.java]"]
  node_mcp_tools["MCP tools<br/>[McpScanTools.java]"]
  node_scope["Project scope<br/>[ProjectScope.java]"]
  node_scan_manager["Scan manager"]
end

node_user(("Authorized user"))
node_external_scanners["Installed scanners"]
node_project_yaml["Project YAML files"]

node_user -->|"uses dashboard"| node_desktop
node_user -->|"uses commands"| node_opencode
node_user -->|"uses commands"| node_claude
node_desktop -->|"requests discovery"| node_discovery_api
node_discovery_api -->|"delegates traversal"| node_discovery
node_discovery -->|"lists YAML files"| node_project_yaml
node_desktop -->|"starts scans"| node_scan
node_scan -->|"discovers targets"| node_discovery
node_scan -->|"executes scanners"| node_adapters
node_scan -->|"executes validation"| node_schemas
node_adapters -.->|"invokes tools"| node_external_scanners
node_scan -.->|"persists results"| node_sqlite
node_desktop -->|"shares state"| node_sqlite
node_reports -->|"reads run data"| node_sqlite
node_reports -->|"writes exports"| node_report_files
node_opencode -->|"connects MCP"| node_mcp_server
node_claude -->|"connects MCP"| node_mcp_server
node_mcp_server -.->|"registers tools"| node_mcp_tools
node_mcp_tools -->|"enforces project scope"| node_scope
node_mcp_tools -->|"dispatches scans"| node_scan_manager
node_scan_manager -->|"runs scan service"| node_scan
node_mcp_tools -->|"reads assessment evidence"| node_sqlite
node_mcp_tools -->|"requests reports"| node_reports
node_mcp_tools -.->|"uses journal"| node_journal
node_mcp_server -->|"shares state"| node_sqlite

click node_desktop "https://github.com/nil2004n/ci_cd_prod/blob/main/pwt/src/main/java/pwt/desktop/PwtDesktopApp.java"
click node_opencode "https://github.com/nil2004n/ci_cd_prod/blob/main/integrations/opencode-plugin/tui.ts"
click node_claude "https://github.com/nil2004n/ci_cd_prod/tree/main/integrations"
click node_discovery "https://github.com/nil2004n/ci_cd_prod/blob/main/pwt/src/main/java/pwt/infrastructure/NioDiscoveryService.java"
click node_discovery_api "https://github.com/nil2004n/ci_cd_prod/blob/main/pwt/src/main/java/pwt/application/DiscoveryService.java"
click node_scan "https://github.com/nil2004n/ci_cd_prod/blob/main/pwt/src/main/java/pwt/application/ScanService.java"
click node_adapters "https://github.com/nil2004n/ci_cd_prod/blob/main/pwt/src/main/java/pwt/adapters/ScannerAdapter.java"
click node_schemas "https://github.com/nil2004n/ci_cd_prod/blob/main/pwt/src/main/java/pwt/adapters/LocalSchemaAdapter.java"
click node_reports "https://github.com/nil2004n/ci_cd_prod/blob/main/pwt/src/main/java/pwt/application/ReportService.java"
click node_report_files "https://github.com/nil2004n/ci_cd_prod/blob/main/pwt/src/main/java/pwt/infrastructure/ReportWriter.java"
click node_sqlite "https://github.com/nil2004n/ci_cd_prod/blob/main/pwt/src/main/java/pwt/infrastructure/SqliteStore.java"
click node_mcp_server "https://github.com/nil2004n/ci_cd_prod/blob/main/pwt/src/main/java/pwt/mcp/PwtMcpServer.java"
click node_mcp_tools "https://github.com/nil2004n/ci_cd_prod/blob/main/pwt/src/main/java/pwt/mcp/McpScanTools.java"
click node_scope "https://github.com/nil2004n/ci_cd_prod/blob/main/pwt/src/main/java/pwt/mcp/ProjectScope.java"
click node_scan_manager "https://github.com/nil2004n/ci_cd_prod/blob/main/pwt/src/main/java/pwt/mcp/McpScanManager.java"
click node_journal "https://github.com/nil2004n/ci_cd_prod/blob/main/pwt/src/main/java/pwt/application/JournalWriter.java"

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_desktop,node_opencode,node_claude,node_user toneBlue
class node_discovery,node_discovery_api,node_scan,node_adapters,node_schemas toneAmber
class node_reports,node_report_files,node_sqlite,node_journal toneMint
class node_mcp_server,node_mcp_tools,node_scope,node_scan_manager toneRose
class node_external_scanners,node_project_yaml toneIndigo
```

## Components

### User entry points

- [Desktop GUI](https://github.com/nil2004n/ci_cd_prod/blob/main/pwt/src/main/java/pwt/desktop/PwtDesktopApp.java): `pwt/src/main/java/pwt/desktop/PwtDesktopApp.java`
- [OpenCode commands](https://github.com/nil2004n/ci_cd_prod/blob/main/integrations/opencode-plugin/tui.ts): `integrations/opencode-plugin/tui.ts`
- [Claude commands](https://github.com/nil2004n/ci_cd_prod/tree/main/integrations): `integrations`

### Assessment workflow

- [YAML discovery](https://github.com/nil2004n/ci_cd_prod/blob/main/pwt/src/main/java/pwt/infrastructure/NioDiscoveryService.java): `pwt/src/main/java/pwt/infrastructure/NioDiscoveryService.java`
- [Discovery service](https://github.com/nil2004n/ci_cd_prod/blob/main/pwt/src/main/java/pwt/application/DiscoveryService.java): `pwt/src/main/java/pwt/application/DiscoveryService.java`
- [Scan orchestration](https://github.com/nil2004n/ci_cd_prod/blob/main/pwt/src/main/java/pwt/application/ScanService.java): `pwt/src/main/java/pwt/application/ScanService.java`
- [Scanner adapters](https://github.com/nil2004n/ci_cd_prod/blob/main/pwt/src/main/java/pwt/adapters/ScannerAdapter.java): `pwt/src/main/java/pwt/adapters/ScannerAdapter.java`
- [Local schemas](https://github.com/nil2004n/ci_cd_prod/blob/main/pwt/src/main/java/pwt/adapters/LocalSchemaAdapter.java): `pwt/src/main/java/pwt/adapters/LocalSchemaAdapter.java`

### State and reports

- [Report service](https://github.com/nil2004n/ci_cd_prod/blob/main/pwt/src/main/java/pwt/application/ReportService.java): `pwt/src/main/java/pwt/application/ReportService.java`
- [Report exports](https://github.com/nil2004n/ci_cd_prod/blob/main/pwt/src/main/java/pwt/infrastructure/ReportWriter.java): `pwt/src/main/java/pwt/infrastructure/ReportWriter.java`
- [Shared SQLite](https://github.com/nil2004n/ci_cd_prod/blob/main/pwt/src/main/java/pwt/infrastructure/SqliteStore.java): `pwt/src/main/java/pwt/infrastructure/SqliteStore.java`
- [Assessment journal](https://github.com/nil2004n/ci_cd_prod/blob/main/pwt/src/main/java/pwt/application/JournalWriter.java): `pwt/src/main/java/pwt/application/JournalWriter.java`

### Scoped assistant access

- [MCP server](https://github.com/nil2004n/ci_cd_prod/blob/main/pwt/src/main/java/pwt/mcp/PwtMcpServer.java): `pwt/src/main/java/pwt/mcp/PwtMcpServer.java`
- [MCP tools](https://github.com/nil2004n/ci_cd_prod/blob/main/pwt/src/main/java/pwt/mcp/McpScanTools.java): `pwt/src/main/java/pwt/mcp/McpScanTools.java`
- [Project scope](https://github.com/nil2004n/ci_cd_prod/blob/main/pwt/src/main/java/pwt/mcp/ProjectScope.java): `pwt/src/main/java/pwt/mcp/ProjectScope.java`
- [Scan manager](https://github.com/nil2004n/ci_cd_prod/blob/main/pwt/src/main/java/pwt/mcp/McpScanManager.java): `pwt/src/main/java/pwt/mcp/McpScanManager.java`

### Other components

- **Authorized user**
- **Installed scanners**
- **Project YAML files**

## Connections

- Authorized user → Desktop GUI: uses dashboard (evidence: `README.md`)
- Authorized user → OpenCode commands: uses commands (evidence: `README.md`)
- Authorized user → Claude commands: uses commands (evidence: `README.md`)
- Desktop GUI → Discovery service: requests discovery (evidence: `pwt/src/main/java/pwt/desktop/PwtDesktopApp.java`)
- Discovery service → YAML discovery: delegates traversal (evidence: `pwt/src/main/java/pwt/infrastructure/NioDiscoveryService.java`)
- YAML discovery → Project YAML files: lists YAML files (evidence: `pwt/src/main/java/pwt/infrastructure/NioDiscoveryService.java`)
- Desktop GUI → Scan orchestration: starts scans (evidence: `pwt/src/main/java/pwt/desktop/PwtDesktopApp.java`)
- Scan orchestration → YAML discovery: discovers targets (evidence: `pwt/src/main/java/pwt/application/ScanService.java`)
- Scan orchestration → Scanner adapters: executes scanners (evidence: `pwt/src/main/java/pwt/application/ScanService.java`)
- Scan orchestration → Local schemas: executes validation (evidence: `pwt/src/main/java/pwt/application/ScanService.java`)
- Scanner adapters → Installed scanners: invokes tools
- Scan orchestration → Shared SQLite: persists results (evidence: `pwt/src/main/java/pwt/application/ScanService.java`)
- Desktop GUI → Shared SQLite: shares state (evidence: `README.md`)
- Report service → Shared SQLite: reads run data (evidence: `pwt/src/main/java/pwt/application/ReportService.java`)
- Report service → Report exports: writes exports (evidence: `pwt/src/main/java/pwt/application/ReportService.java`)
- OpenCode commands → MCP server: connects MCP (evidence: `README.md`)
- Claude commands → MCP server: connects MCP (evidence: `README.md`)
- MCP server → MCP tools: registers tools
- MCP tools → Project scope: enforces project scope (evidence: `pwt/src/main/java/pwt/mcp/McpScanTools.java`)
- MCP tools → Scan manager: dispatches scans (evidence: `pwt/src/main/java/pwt/mcp/McpScanTools.java`)
- Scan manager → Scan orchestration: runs scan service (evidence: `pwt/src/main/java/pwt/mcp/McpScanManager.java`)
- MCP tools → Shared SQLite: reads assessment evidence (evidence: `pwt/src/main/java/pwt/mcp/McpScanTools.java`)
- MCP tools → Report service: requests reports (evidence: `pwt/src/main/java/pwt/mcp/McpScanTools.java`)
- MCP tools → Assessment journal: uses journal (evidence: `pwt/src/main/java/pwt/mcp/McpScanTools.java`)
- MCP server → Shared SQLite: shares state (evidence: `README.md`)
