# 01 — Слои модулей (целевое состояние) Целевая модульная структура agentik. Снизу вверх: **приложения → runtime → домен → абстракции → платформенные impl**. ![Module Layers](./01-module-layers.svg) PlantUML source (для редактирования; требует Graphviz `dot` для рендеринга): ```plantuml @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` (само приложение)