Документация Adapstory
Платформа

Обзор платформы

Как устроена Adapstory — bounded contexts, plugin runtime и куда встраивается ваш код.

Adapstory построена вокруг минимального ядра из bounded contexts (BC) и plugin runtime, который хостит всё остальное.

Ядерные bounded contexts

BCИмяЧто принадлежит
BC-01Plugin GatewayРеестр MCP-инструментов, маршрутизация LLM, агрегация OpenAPI
BC-02Plugin LifecycleInstall / update / rollback манифестов плагинов
BC-10IdentityПользователи, тенанты, SSO, RBAC (на базе Keycloak)
BC-15Data Model EngineДинамические сущности, схемы, валидация, проекция событий
BC-16Identity RuntimeВыпуск JWT, introspection, per-tenant ключи
BC-19Multi-Tenant RuntimeИзоляция плагинов, per-tenant DB границы, sidecar-инъекция

Всё что вне этого списка — плагин.

Двухплоскостная архитектура

Control plane (Java 25 + Spring Boot 4): BC выше, каждый — свой микросервис со своей PostgreSQL. jOOQ для доступа к данным, Kafka для событий, CloudEvents 1.0 на проводе.

Data plane (Python 3.12 + FastAPI): AI-микросервисы за Plugin Gateway. LangChain / LangGraph, vLLM или Ollama для инференса, PyTorch для кастомных моделей. Один сервис — одна capability.

Plugin runtime (BC-19): ваш плагин поставляется подписанным контейнером. На install runtime планирует его в namespace тенанта с правильными секретами, лимитами ресурсов и сетевыми политиками.

Как плагины встраиваются

Плагин декларирует точки интеграции в plugin.yaml:

apiVersion: adapstory.com/v1
kind: Plugin
metadata:
  name: course-recommender
  version: 1.4.0
spec:
  mcpTools:
    - name: recommend_next_course
      description: Suggest the next course for a given learner
      endpoint: /mcp/recommend
  dataModels:
    extends: [bc15.course, bc15.enrollment]
  events:
    produces: [course.recommended.v1]
    consumes: [enrollment.completed.v1]
  llm:
    gatewayBudget: 500000   # tokens/day per tenant
    defaultModel: claude-sonnet-4-6
  guardrails:
    content:
      - no-pii
      - education-safe

Все поля plugin.yaml версионируются и immutable после публикации. Чтобы изменить что-то важное — выпустите новую версию и дайте lifecycle-контроллеру мигрировать тенантов.

Границы данных

  • Java ↔ Python — строго REST или Kafka. Shared-баз данных нет. Никогда.
  • Plugin ↔ Core — MCP-инструменты (для вызовов от LLM) или Kafka (для асинхронных сценариев). Никаких прямых SQL в core-таблицы.
  • Tenant ↔ tenant — изоляция на уровне схемы PostgreSQL и namespace Kubernetes. Runtime обеспечивает; вам это не нужно делать вручную.

Куда дальше

On this page