25771a0c33
ci / JVM build + tests (push) Failing after 1m57s
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
159 lines
4.8 KiB
Markdown
159 lines
4.8 KiB
Markdown
# 01 — Слои модулей (целевое состояние)
|
|
|
|
Целевая модульная структура agentik. Снизу вверх:
|
|
**приложения → runtime → домен → абстракции → платформенные impl**.
|
|
|
|

|
|
|
|
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` (само приложение)
|