# lazygophers/aidog architecture

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

- Interactive diagram: https://gitdiagram.com/lazygophers/aidog
- Repository: https://github.com/lazygophers/aidog

## Overview

AiDog is a local-first Tauri desktop AI API gateway. Users configure provider credentials and routing groups in the UI, point an AI client at the local proxy, and receive routed, converted upstream responses; requests are also metered and logged for monitoring. The README documents provider aggregation, failover/load balancing, model mapping, middleware, protocol conversion, coding-assistant integrations, MCP/Skills, encrypted import/export, and backups. The graph combines those documented capabilities with sampled frontend and Rust paths; several subsystem links are omitted where source wiring was not sampled.

Main entry points: [`src-tauri/crates/aidog_core/src/gateway/db/mod.rs`](https://github.com/lazygophers/aidog/blob/master/src-tauri/crates/aidog_core/src/gateway/db/mod.rs) (Local SQLite), [`src-tauri/crates/aidog_core/src/gateway/proxy/handler.rs`](https://github.com/lazygophers/aidog/blob/master/src-tauri/crates/aidog_core/src/gateway/proxy/handler.rs) (Proxy handler), [`src/App.tsx`](https://github.com/lazygophers/aidog/blob/master/src/App.tsx) (App shell), [`src-tauri/crates/aidog_core/src/gateway/proxy/forward.rs`](https://github.com/lazygophers/aidog/blob/master/src-tauri/crates/aidog_core/src/gateway/proxy/forward.rs) (Request forwarding)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ui["Desktop management"]
  node_app["App shell<br/>[App.tsx]"]
  node_platforms["Platform setup<br/>[usePlatformForm.ts]"]
  node_platformcards["Platform controls"]
  node_groups["Group management<br/>[usePlatformDrag.ts]"]
  node_settings["System settings"]
end

subgraph group_gateway["Gateway runtime"]
  node_proxy["Proxy handler<br/>[handler.rs]"]
  node_forward["Request forwarding<br/>[forward.rs]"]
  node_routing["Group routing<br/>[group_info.rs]"]
  node_middleware["Middleware rules<br/>[middleware_body.rs]"]
  node_adapters["Provider adapters<br/>[lib.rs]"]
  node_protocols["Protocol conversion<br/>[mod.rs]"]
  node_kernel["Local kernel<br/>[main.rs]"]
end

subgraph group_assistants["Assistant integrations"]
  node_mcp["MCP management<br/>[useMcpData.ts]"]
  node_skills["Skills management<br/>[useSkillsData.ts]"]
  node_coding["Coding assistant setup<br/>[codex.rs]"]
end

subgraph group_data["Monitoring and data"]
  node_stats["Usage statistics<br/>[query_stats.rs]"]
  node_logs["Request logging<br/>[log.rs]"]
  node_storage[("Local SQLite<br/>[mod.rs]")]
  node_backup["Backup scheduling<br/>[scheduler.rs]"]
  node_importexport["Import and export<br/>[mod.rs]"]
end

node_user(("Administrator"))
node_client(("AI client"))
node_provider{{"AI providers"}}

node_user -->|"manages"| node_app
node_app -->|"opens setup"| node_platforms
node_app -->|"opens groups"| node_groups
node_app -->|"opens settings"| node_settings
node_platforms -->|"saves config"| node_storage
node_groups -->|"updates membership"| node_storage
node_platformcards -->|"updates platform"| node_storage
node_client -->|"sends request"| node_proxy
node_kernel -->|"starts"| node_proxy
node_proxy -->|"applies rules"| node_middleware
node_proxy -->|"selects group"| node_routing
node_proxy -->|"dispatches"| node_forward
node_forward -->|"converts request"| node_protocols
node_forward -->|"selects adapter"| node_adapters
node_adapters -->|"calls API"| node_provider
node_provider -->|"returns response"| node_forward
node_proxy -->|"records request"| node_logs
node_proxy -->|"records usage"| node_stats
node_stats -->|"queries"| node_storage
node_logs -->|"writes logs"| node_storage
node_settings -->|"persists settings"| node_storage
node_mcp -->|"manages config"| node_storage
node_skills -->|"manages records"| node_storage
node_coding -->|"reads configuration"| node_storage
node_backup -->|"backs up"| node_storage
node_importexport -->|"imports and exports"| node_storage

click node_app "https://github.com/lazygophers/aidog/blob/master/src/App.tsx"
click node_platforms "https://github.com/lazygophers/aidog/blob/master/src/pages/platforms/usePlatformForm.ts"
click node_platformcards "https://github.com/lazygophers/aidog/blob/master/src/components/platforms/usePlatformCards.ts"
click node_groups "https://github.com/lazygophers/aidog/blob/master/src/pages/Groups/usePlatformDrag.ts"
click node_settings "https://github.com/lazygophers/aidog/blob/master/src/pages/AppSettings/useSystemSettings.ts"
click node_proxy "https://github.com/lazygophers/aidog/blob/master/src-tauri/crates/aidog_core/src/gateway/proxy/handler.rs"
click node_forward "https://github.com/lazygophers/aidog/blob/master/src-tauri/crates/aidog_core/src/gateway/proxy/forward.rs"
click node_routing "https://github.com/lazygophers/aidog/blob/master/src-tauri/crates/aidog_core/src/gateway/proxy/group_info.rs"
click node_middleware "https://github.com/lazygophers/aidog/blob/master/src-tauri/crates/aidog_core/src/gateway/proxy/middleware_body.rs"
click node_adapters "https://github.com/lazygophers/aidog/blob/master/src-tauri/crates/aidog_adapter/src/lib.rs"
click node_protocols "https://github.com/lazygophers/aidog/blob/master/src-tauri/crates/aidog_adapter/src/converter/mod.rs"
click node_kernel "https://github.com/lazygophers/aidog/blob/master/src-tauri/crates/aidog_kernel/src/main.rs"
click node_mcp "https://github.com/lazygophers/aidog/blob/master/src/pages/Mcp/useMcpData.ts"
click node_skills "https://github.com/lazygophers/aidog/blob/master/src/pages/Skills/useSkillsData.ts"
click node_coding "https://github.com/lazygophers/aidog/blob/master/src-tauri/crates/aidog_core/src/gateway/codex.rs"
click node_stats "https://github.com/lazygophers/aidog/blob/master/src-tauri/crates/aidog_stats/src/query_stats.rs"
click node_logs "https://github.com/lazygophers/aidog/blob/master/src-tauri/crates/aidog_core/src/gateway/proxy/log.rs"
click node_storage "https://github.com/lazygophers/aidog/blob/master/src-tauri/crates/aidog_core/src/gateway/db/mod.rs"
click node_backup "https://github.com/lazygophers/aidog/blob/master/src-tauri/crates/aidog_backup/src/scheduler.rs"
click node_importexport "https://github.com/lazygophers/aidog/blob/master/src-tauri/crates/aidog_core/src/gateway/import_export/mod.rs"

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_app,node_platforms,node_platformcards,node_groups,node_settings,node_client toneBlue
class node_proxy,node_forward,node_routing,node_middleware,node_adapters,node_protocols,node_kernel toneAmber
class node_mcp,node_skills,node_coding toneMint
class node_stats,node_logs,node_storage,node_backup,node_importexport toneRose
class node_user,node_provider toneIndigo
```

## Components

### Desktop management

- [App shell](https://github.com/lazygophers/aidog/blob/master/src/App.tsx): `src/App.tsx`
- [Platform setup](https://github.com/lazygophers/aidog/blob/master/src/pages/platforms/usePlatformForm.ts): `src/pages/platforms/usePlatformForm.ts`
- [Platform controls](https://github.com/lazygophers/aidog/blob/master/src/components/platforms/usePlatformCards.ts): `src/components/platforms/usePlatformCards.ts`
- [Group management](https://github.com/lazygophers/aidog/blob/master/src/pages/Groups/usePlatformDrag.ts): `src/pages/Groups/usePlatformDrag.ts`
- [System settings](https://github.com/lazygophers/aidog/blob/master/src/pages/AppSettings/useSystemSettings.ts): `src/pages/AppSettings/useSystemSettings.ts`

### Gateway runtime

- [Proxy handler](https://github.com/lazygophers/aidog/blob/master/src-tauri/crates/aidog_core/src/gateway/proxy/handler.rs): `src-tauri/crates/aidog_core/src/gateway/proxy/handler.rs`
- [Request forwarding](https://github.com/lazygophers/aidog/blob/master/src-tauri/crates/aidog_core/src/gateway/proxy/forward.rs): `src-tauri/crates/aidog_core/src/gateway/proxy/forward.rs`
- [Group routing](https://github.com/lazygophers/aidog/blob/master/src-tauri/crates/aidog_core/src/gateway/proxy/group_info.rs): `src-tauri/crates/aidog_core/src/gateway/proxy/group_info.rs`
- [Middleware rules](https://github.com/lazygophers/aidog/blob/master/src-tauri/crates/aidog_core/src/gateway/proxy/middleware_body.rs): `src-tauri/crates/aidog_core/src/gateway/proxy/middleware_body.rs`
- [Provider adapters](https://github.com/lazygophers/aidog/blob/master/src-tauri/crates/aidog_adapter/src/lib.rs): `src-tauri/crates/aidog_adapter/src/lib.rs`
- [Protocol conversion](https://github.com/lazygophers/aidog/blob/master/src-tauri/crates/aidog_adapter/src/converter/mod.rs): `src-tauri/crates/aidog_adapter/src/converter/mod.rs`
- [Local kernel](https://github.com/lazygophers/aidog/blob/master/src-tauri/crates/aidog_kernel/src/main.rs): `src-tauri/crates/aidog_kernel/src/main.rs`

### Assistant integrations

- [MCP management](https://github.com/lazygophers/aidog/blob/master/src/pages/Mcp/useMcpData.ts): `src/pages/Mcp/useMcpData.ts`
- [Skills management](https://github.com/lazygophers/aidog/blob/master/src/pages/Skills/useSkillsData.ts): `src/pages/Skills/useSkillsData.ts`
- [Coding assistant setup](https://github.com/lazygophers/aidog/blob/master/src-tauri/crates/aidog_core/src/gateway/codex.rs): `src-tauri/crates/aidog_core/src/gateway/codex.rs`

### Monitoring and data

- [Usage statistics](https://github.com/lazygophers/aidog/blob/master/src-tauri/crates/aidog_stats/src/query_stats.rs): `src-tauri/crates/aidog_stats/src/query_stats.rs`
- [Request logging](https://github.com/lazygophers/aidog/blob/master/src-tauri/crates/aidog_core/src/gateway/proxy/log.rs): `src-tauri/crates/aidog_core/src/gateway/proxy/log.rs`
- [Local SQLite](https://github.com/lazygophers/aidog/blob/master/src-tauri/crates/aidog_core/src/gateway/db/mod.rs): `src-tauri/crates/aidog_core/src/gateway/db/mod.rs`
- [Backup scheduling](https://github.com/lazygophers/aidog/blob/master/src-tauri/crates/aidog_backup/src/scheduler.rs): `src-tauri/crates/aidog_backup/src/scheduler.rs`
- [Import and export](https://github.com/lazygophers/aidog/blob/master/src-tauri/crates/aidog_core/src/gateway/import_export/mod.rs): `src-tauri/crates/aidog_core/src/gateway/import_export/mod.rs`

### Other components

- **Administrator**
- **AI client**
- **AI providers**

## Connections

- Administrator → App shell: manages
- App shell → Platform setup: opens setup
- App shell → Group management: opens groups
- App shell → System settings: opens settings
- Platform setup → Local SQLite: saves config
- Group management → Local SQLite: updates membership
- Platform controls → Local SQLite: updates platform
- AI client → Proxy handler: sends request
- Local kernel → Proxy handler: starts
- Proxy handler → Middleware rules: applies rules
- Proxy handler → Group routing: selects group
- Proxy handler → Request forwarding: dispatches
- Request forwarding → Protocol conversion: converts request
- Request forwarding → Provider adapters: selects adapter
- Provider adapters → AI providers: calls API
- AI providers → Request forwarding: returns response
- Proxy handler → Request logging: records request
- Proxy handler → Usage statistics: records usage
- Usage statistics → Local SQLite: queries
- Request logging → Local SQLite: writes logs
- System settings → Local SQLite: persists settings
- MCP management → Local SQLite: manages config
- Skills management → Local SQLite: manages records
- Coding assistant setup → Local SQLite: reads configuration
- Backup scheduling → Local SQLite: backs up
- Import and export → Local SQLite: imports and exports
