# Диаграммы

## 1. Назначение документа

Этот документ собирает диаграммы целевой модели проекта:

- компонентную структуру;
- связи между доменными сущностями;
- хранение данных в БД.

Примечание:

- диаграммы требуют следующего обновления по слою машинного доступа;
- вместо `PlatformApiKey` целевая модель проекта теперь использует `AgentKey`, `IssuedAgentToken` и при необходимости `PlatformClientCredential`;
- детальная схема зафиксирована в `docs/agent-auth-model.md`.

## 2. Компонентная диаграмма

```mermaid
flowchart LR
    UI[crank-ui]
    ADMIN[admin-api]
    MCP[mcp-server]
    REG[crank-registry]
    RUN[crank-runtime]
    CORE[crank-core]
    SCHEMA[crank-schema]
    MAP[crank-mapping]
    PROTO[crank-proto]
    REST[adapter-rest]
    GQL[adapter-graphql]
    GRPC[adapter-grpc]
    DB[(PostgreSQL)]
    STORE[(Artifact Storage)]
    OBS[(Usage and Logs)]

    UI --> ADMIN
    MCP --> REG
    MCP --> RUN
    ADMIN --> REG
    ADMIN --> RUN
    ADMIN --> PROTO
    REG --> DB
    REG --> CORE
    REG --> SCHEMA
    REG --> MAP
    RUN --> CORE
    RUN --> SCHEMA
    RUN --> MAP
    RUN --> REST
    RUN --> GQL
    RUN --> GRPC
    GRPC --> PROTO
    PROTO --> STORE
    ADMIN --> STORE
    REG --> OBS
    ADMIN --> OBS
```

## 3. Структурная диаграмма доменной модели

```mermaid
classDiagram
    class Workspace {
      +id
      +slug
      +display_name
    }

    class Operation {
      +id
      +workspace_id
      +name
      +display_name
      +protocol
      +status
    }

    class Agent {
      +id
      +workspace_id
      +slug
      +display_name
      +status
    }

    class AgentBinding {
      +operation_id
      +operation_version
      +tool_name
      +enabled
    }

    class PlatformApiKey {
      +id
      +workspace_id
      +name
      +prefix
      +scopes
      +status
    }

    class InvocationLog {
      +workspace_id
      +agent_id
      +operation_id
      +status
      +duration_ms
    }

    Workspace --> Operation : owns
    Workspace --> Agent : owns
    Workspace --> PlatformApiKey : owns
    Agent --> AgentBinding : contains
    AgentBinding --> Operation : references
    InvocationLog --> Workspace : belongs_to
    InvocationLog --> Agent : belongs_to
    InvocationLog --> Operation : belongs_to
```

## 4. ER-диаграмма БД

```mermaid
erDiagram
    WORKSPACES ||--o{ OPERATIONS : owns
    WORKSPACES ||--o{ AGENTS : owns
    WORKSPACES ||--o{ AUTH_PROFILES : owns
    WORKSPACES ||--o{ PLATFORM_API_KEYS : owns
    WORKSPACES ||--o{ INVOCATION_LOGS : owns
    OPERATIONS ||--o{ OPERATION_VERSIONS : has
    OPERATIONS ||--o| PUBLISHED_OPERATIONS : publishes
    AGENTS ||--o{ AGENT_VERSIONS : has
    AGENTS ||--o| PUBLISHED_AGENTS : publishes
    AGENT_VERSIONS ||--o{ AGENT_OPERATION_BINDINGS : contains
    OPERATIONS ||--o{ AGENT_OPERATION_BINDINGS : exposed_by

    WORKSPACES {
      text id PK
      text slug
      text display_name
    }
    OPERATIONS {
      text id PK
      text workspace_id FK
      text name
      text display_name
      text protocol
      text status
    }
    AGENTS {
      text id PK
      text workspace_id FK
      text slug
      text display_name
      text status
    }
```
