Files
agentik/docs/diagrams/01-module-layers.md
T
subochev 25771a0c33
ci / JVM build + tests (push) Failing after 1m57s
docs(diagrams): agent architecture overview with pre-rendered SVG
PlantUML diagrams for future agent architecture (Android, multi-user
chat, sub-agents, A2A):
- 01-module-layers.md — целевая модульная структура
- 02-agent-composition.md — AgentBuilder DSL + MemoryBackend.exposesTools()
- 03-multi-user-chat.md — mention-detection sequence
- 04-sub-agents.md — spawnChild + Flow<SubAgentEvent> + A2A
- 05-android-stack.md — что меняется на Android vs Standalone

Каждый .md включает пред-рендеренный SVG (показывается во всех markdown
viewers без PlantUML plugin) + PlantUML source в code block (для
редактирования). SVG нужен потому что PlantUML требует Graphviz dot
для рендеринга — без него IntelliJ/VSCode выдают ошибку.

Регенерация SVG после правки PlantUML-source:
  docker run --rm -v "$PWD:/work" plantuml/plantuml -tsvg /work/docs/diagrams/*.md
2026-09-18 20:02:41 +03:00

4.8 KiB

01 — Слои модулей (целевое состояние)

Целевая модульная структура agentik. Снизу вверх: приложения → runtime → домен → абстракции → платформенные impl.

Module Layers

PlantUML source (для редактирования; требует Graphviz dot для рендеринга):

@startuml agentik-module-layers
skinparam componentStyle rectangle
skinparam ranksep 60
skinparam nodesep 30
skinparam packageStyle rectangle

title agentik — слои модулей (целевое состояние)

' --- Applications: entry points (thin wrappers) ---
package "Applications\n(entry points, тонкие)" {
    [Standalone\nHTTP+AG-UI+A2A] as Standalone
    [AgentikCli\nREPL] as Cli
    [AgentikAndroid\nCompose UI] as Android
}

' --- Agent runtime ---
package "Agent Runtime\n(композиция, lifecycle)" {
    [AgentCore\nBaseAgent] as AgentCore
    [AgentBuilder\nDSL] as Builder
}

' --- Background work ---
package "Background Work\n(event-driven triggers)" {
    [BackgroundEvents\nbus + events] as Ev
    [BackgroundScheduler\npolicy] as Sched
}

' --- Domain logic (generic, переиспользуется) ---
package "Domain Logic\n(generic tools)" {
    [LlmTools\nReflector/Reviewer/Miner] as LlmT
    [McpBridge\nMCP-SDK → LiteTool] as Mcp
    [Skills\nparse + store] as Skills
}

' --- Storage abstractions + impls ---
package "Storage\n(abstractions)" as StoragePkg {
    [StorageCore\ninterfaces] as StorageCore
}

package "Storage\n(JVM impls)" {
    [StorageSqlite\nJDBC] as StorageSql
    [StorageInmemory\ntests] as StorageInmem
}

package "Storage\n(Android impl)" {
    [StorageSqliteAndroid\nRoom/sqlite] as StorageSqlA
}

' --- Memory backends ---
package "Memory\n(abstractions)" {
    [MemoryApi\nMemorySystem/MemoryTools] as MemApi
}

package "Memory\n(impls)" {
    [MemoryMd\nHermes §-files] as MemMd
    [MemoryVector\nJVector+JVM] as MemVec
    [MemoryVectorAndroid\nONNX+ANN] as MemVecA
}

' --- LLM backends ---
package "LLM\n(abstractions)" {
    [LitertApi\nLiteLlm контракт] as Litert
}

package "LLM\n(impls)" {
    [LitertOpenai\nHTTP] as LitertO
    [LitertGoogle\nLiteRT JVM] as LitertG
    [LitertAndroid\nLiteRT Android] as LitertA
}

' --- Inter-app protocol ---
package "Inter-app" {
    [Proto\nAgent/Conversation] as Proto
    [A2AServer] as A2A
}

' --- Зависимости (приложения → runtime → домен → абстракции → платформенные импл) ---
Standalone ..> Builder
Cli ..> Builder
Android ..> Builder

Builder ..> AgentCore
AgentCore ..> Proto
AgentCore ..> StorageCore
AgentCore ..> MemApi
AgentCore ..> Litert
AgentCore ..> Mcp
AgentCore ..> Skills

Sched ..> Ev
AgentCore ..> Sched
AgentCore ..> Ev

Mcp ..> Litert
LlmT ..> Litert

MemMd ..> MemApi
MemVec ..> MemApi
MemVecA ..> MemApi

StorageSql ..> StorageCore
StorageInmem ..> StorageCore
StorageSqlA ..> StorageCore

LitertO ..> Litert
LitertG ..> Litert
LitertA ..> Litert

Standalone ..> A2A
Standalone ..> LitertO
Standalone ..> LitertG
Standalone ..> StorageSql
Standalone ..> MemMd
Standalone ..> MemVec
Standalone ..> Mcp

Android ..> LitertA
Android ..> StorageSqlA
Android ..> MemMd
Android ..> MemVecA

@enduml

Что показывает

  • Applications — три точки входа: web-сервер, CLI REPL, Android-приложение. Каждое тонкое, не содержит бизнес-логики.
  • Agent Runtime — BaseAgent + AgentBuilder DSL. Вся композиция и lifecycle.
  • Background Work — BackgroundEvents (event-bus) + BackgroundScheduler (policy подписки). Event-driven, не interval-polling.
  • Domain Logic — generic переиспользуемые модули (:llm-tools, :mcp-bridge, :skills).
  • Storage / Memory / LLM — каждая с абстракцией и одним или несколькими impl (JVM-only или Android-only).
  • Inter-app — :proto контракты + :a2a-server для межагентного общения.

Текущее состояние vs целевое

✅ Уже сделано (в этом цикле правок):

  • :llm-tools extracted
  • :mcp-bridge extracted
  • BackgroundScheduler стал event-driven
  • ConversationLoop стал отдельным компонентом (typealias ChatConversation)

⏳ Не сделано:

  • :agent-core (выделить BaseAgent + builder в отдельный KMP-модуль)
  • :background-events (выделить events + scheduler — пока в :standalone)
  • :storage-sqlite-android
  • :memory-vector-android
  • :litert-android
  • :agentik-android (само приложение)