5.8 KiB
Модель данных
1. Назначение документа
Этот документ фиксирует целевую формальную модель данных платформы. Его цель - определить такие структуры, которые можно без существенных изменений перенести в:
- Rust domain types;
- HTTP DTO;
- структуру таблиц БД;
- runtime-представление операций и агентов;
- UI-формы и конфигурационные экраны.
2. Общие принципы модели
2.1. Одна операция - один интеграционный контракт
Каждая Operation соответствует одному интеграционному контракту:
- GraphQL -> один конкретный
queryилиmutation; - gRPC -> один unary method;
- REST -> один endpoint-сценарий.
Однако MCP tool публикуется не напрямую из operation, а через AgentOperationBinding внутри конкретного Agent.
2.2. Внутренний транспортный формат - JSON
Независимо от внешнего протокола внутри системы данные представлены в JSON-ориентированном виде.
2.3. Mapping всегда явный
Даже если система умеет строить черновой mapping по примерам данных, итоговая конфигурация mapping сохраняется явно.
2.4. JSONPath как единый язык адресации
Для input и output mapping используется JSONPath.
2.5. Workspace - обязательная граница данных
Все продуктовые сущности принадлежат одному Workspace.
Минимальный набор workspace-scoped сущностей:
OperationOperationVersionAuthProfileAgentPlatformApiKeyInvocationLogUsageRollup
2.6. YAML как формат обмена конфигурацией
Помимо канонической JSON-модели система поддерживает импорт и экспорт конфигураций в YAML.
3. Корневые сущности
3.1. Workspace
Поля:
idslugdisplay_namestatussettingscreated_atupdated_at
Назначение:
- логическая изоляция команд;
- scoping для операций, агентов, ключей и логов;
- основа для multi-tenant MCP endpoints.
3.2. Operation
Поля:
idworkspace_idnamedisplay_nameprotocolstatusversiontargetinput_schemaoutput_schemainput_mappingoutput_mappingexecution_configtool_descriptionsamplesgenerated_draftconfig_exportcreated_atupdated_atpublished_at
3.3. Agent
Agent - пользовательская MCP-поверхность, которая собирает ограниченный набор published operations.
Поля:
idworkspace_idslugdisplay_namedescriptionstatuscurrent_draft_versionlatest_published_versioncreated_atupdated_atpublished_at
3.4. AgentVersion
Снимок конфигурации агента.
Поля:
agent_idversionstatusinstructionstool_selection_policybindingscreated_at
3.5. AgentOperationBinding
Связь published operation с agent version.
Поля:
operation_idoperation_versiontool_nametool_titletool_description_overrideenabled
3.6. AuthProfile
Используется только для доступа к внешним системам.
Поля:
idworkspace_idnamekindconfig
3.7. PlatformApiKey
Отдельная сущность для доступа к самой платформе.
Поля:
idworkspace_idnameprefixscopesstatuscreated_atlast_used_at
3.8. InvocationLog
Продуктовая запись о вызове tool.
Поля:
idworkspace_idagent_idoperation_idrequest_idlevelstatusduration_mserror_kindrequest_previewresponse_previewcreated_at
3.9. UsageRollup
Агрегированная статистика по периоду.
Поля:
workspace_idagent_idoperation_idperiod_kindperiod_startcalls_totalcalls_okcalls_errorp50_msp95_msp99_ms
4. Target
Target описывает конкретный внешний вызов. Это discriminated union по протоколу.
4.1. RestTarget
kindbase_urlmethodpath_templatestatic_headers
4.2. GraphqlTarget
kindendpointoperation_typeoperation_namequery_templateresponse_path
4.3. GrpcTarget
kindserver_addrpackageservicemethoddescriptor_refdescriptor_set_b64
5. Schema
Schema - нормализованное описание входа или выхода.
Поддерживаются:
- скалярные поля;
- вложенные объекты;
- массивы;
- enum;
- nullable-поля;
oneofдля protobuf.
6. Принцип совместимости
Если UI требует сущность, которой нет в текущем backend, эта сущность должна быть сначала явно добавлена в эту модель данных, а уже потом в код и БД.