9.2 KiB
Схема БД
1. Назначение документа
Этот документ фиксирует целевую структуру хранения workspace-scoped конфигураций, агентов, ключей доступа и observability-данных. Базовая СУБД - PostgreSQL.
2. Общие принципы хранения
2.1. Версионирование обязательно
Конфигурация operation и agent не хранится только в одной "живой" записи. Каждое существенное изменение создает новую версию.
2.2. Published и draft разделяются логически
draftможет меняться;publishedвсегда указывает на конкретную version;- runtime читает только опубликованные представления.
2.3. Workspace scoping обязателен
Все продуктовые таблицы должны ссылаться на workspaces.
2.4. Артефакты и конфигурация не смешиваются
.proto, descriptor set, sample JSON и YAML payload не хранятся в тех же строках, что runtime-ready configuration.
2.5. Секреты не хранятся в открытом виде
- upstream secrets живут в отдельных таблицах и шифруются;
- agent keys и credentials доверенных клиентов хранятся как hash;
- короткоживущие токены хранятся в форме, пригодной для отзыва и учета использования.
3. Основные таблицы
workspacesusersuser_sessionsmembershipsinvitation_tokenssecretssecret_versionsoperationsoperation_versionspublished_operationsoperation_samplesdescriptorsauth_profilesagentsagent_versionsagent_operation_bindingspublished_agentsagent_keysissued_agent_tokensplatform_client_credentialsstream_sessionsasync_jobsinvocation_logsusage_rollupsyaml_import_jobs
4. Operations
operations
idworkspace_idnamedisplay_nameprotocolstatussecurity_levelcurrent_draft_versionlatest_published_versioncreated_atupdated_atpublished_at
Ограничение:
unique (workspace_id, name)
operation_versions
operation_idversionstatustarget_jsoninput_schema_jsonoutput_schema_jsoninput_mapping_jsonoutput_mapping_jsonexecution_config_jsontool_description_jsonsamples_jsongenerated_draft_jsonconfig_export_jsonchange_notecreated_atcreated_by
published_operations
operation_idversionpublished_atpublished_by
5. Operation artifacts
operation_samples
idoperation_idversionsample_kindstorage_refcontent_typefile_namecreated_at
descriptors
idoperation_idversiondescriptor_kindstorage_refsource_namepackage_index_jsoncreated_at
descriptor_kind дополнительно поддерживает:
wsdl_uploadxsd_upload
package_index_json для wsdl_upload хранит нормализованный inspection result:
service_nameport_namebinding_nameendpointsoap_versionoperations[]
yaml_import_jobs
idsource_sample_idstatusformat_versionmoderesult_operation_idresult_versionerror_textcreated_atfinished_at
6. Upstream secrets and auth
secrets
idworkspace_idnamekindstatuscurrent_versioncreated_atupdated_at
Ограничение:
unique (workspace_id, name)
secret_versions
secret_idversionciphertextkey_versioncreated_at
auth_profiles
idworkspace_idnamekindconfig_jsoncreated_atupdated_at
Назначение:
config_jsonхранит ссылки наsecret_id, а не plaintext значения;- допустимы bearer, basic, api-key-header, api-key-query профили.
Ограничение:
unique (workspace_id, name)
agent_keys
idworkspace_idagent_idnameprefixsecret_hashscopes_jsonstatusexpires_atcreated_atlast_used_at
Ограничения:
unique (agent_id, name)prefixуникален глобально
Назначение:
- длинноживущий ключ принадлежит одному агенту;
- ключ используется как исходное основание для выпуска короткоживущего токена;
- прямой вызов MCP по такому ключу допускается только в переходном режиме.
issued_agent_tokens
idworkspace_idagent_idagent_key_idtoken_kindstatusscopes_jsonmax_usesused_countcnf_jktexpires_atcreated_atused_at
Индексы:
(agent_id, status, expires_at)(workspace_id, status, expires_at)(cnf_jkt)при включенной привязке токена к ключевой паре клиента
Назначение:
- учет выданных короткоживущих токенов;
- поддержка одноразовых токенов;
- поддержка отзыва и проверки повторного использования.
stream_sessions
idworkspace_idagent_idoperation_idmodestatuscursor_jsonstate_jsonexpires_atlast_poll_atcreated_atclosed_at
Индексы:
(workspace_id, status, expires_at)(operation_id, status)
async_jobs
idworkspace_idagent_idoperation_idstatusprogress_jsonresult_jsonerror_jsonexpires_atcreated_atupdated_atfinished_at
Индексы:
(workspace_id, status, expires_at)(operation_id, status)
7. Workspaces and access layer
workspaces
idslugdisplay_namestatussettings_jsoncreated_atupdated_at
users
idemaildisplay_namepassword_hashstatuscreated_at
user_sessions
iduser_idsecret_hashstatusexpires_atlast_seen_atcreated_at
Ограничения:
unique (user_id, id)
memberships
workspace_iduser_idrolecreated_at
invitation_tokens
idworkspace_idemailrolestatustoken_hashexpires_atcreated_at
8. Agents
agents
idworkspace_idslugdisplay_namedescriptionstatuscurrent_draft_versionlatest_published_versioncreated_atupdated_atpublished_at
Ограничение:
unique (workspace_id, slug)
agent_versions
agent_idversionstatusinstructions_jsontool_selection_policy_jsoncreated_at
agent_operation_bindings
agent_idagent_versionoperation_idoperation_versiontool_nametool_titletool_description_overrideenabled
published_agents
agent_idversionpublished_atpublished_by
9. Machine access and observability
agent_keys
idworkspace_idagent_idnameprefixsecret_hashscopes_jsonstatusexpires_atcreated_atlast_used_at
issued_agent_tokens
idworkspace_idagent_idagent_key_idtoken_kindstatusscopes_jsonmax_usesused_countcnf_jktexpires_atcreated_atused_at
invocation_logs
idworkspace_idagent_idoperation_idsourcerequest_idlevelstatustool_namemessagestatus_codeduration_mserror_kindrequest_preview_jsonresponse_preview_jsoncreated_at
usage_rollups
workspace_idagent_idoperation_idperiod_kindperiod_startcalls_totalcalls_okcalls_errorp50_msp95_msp99_ms
Замечание:
- в MVP usage read-model может вычисляться напрямую из
invocation_logs; usage_rollupsсохраняется как совместимая таблица под materialized aggregates и дальнейшую оптимизацию.
10. Migration strategy
Переход от текущей схемы к целевой идет так:
- добавить
workspacesи заполнить default workspace; - добавить
workspace_idвoperationsиauth_profiles; - добавить
secretsиsecret_versions; - перевести
auth_profilesна secret-backed config; - добавить
agentsиpublished_agents; - внедрить
agent_keys,platform_client_credentialsиissued_agent_tokens; - добавить
invocation_logsиusage_rollups; - перевести MCP runtime на
published_agents, а не на глобальный список operations.