34 lines
1.6 KiB
Markdown
34 lines
1.6 KiB
Markdown
# `:content-api` — общие типы содержимого сообщения
|
||
|
||
Низкоуровневый KMP-модуль с типами, которые используются во всех слоях
|
||
agentik и раньше дублировались:
|
||
|
||
- `Content` — часть содержимого сообщения: `Content.Text(body)`,
|
||
`Content.Image(data, mime)`.
|
||
- `MessageContext` — контекст инициации хода (`origin`, `description`,
|
||
`sourceId`, `metadata`).
|
||
- `MessageOrigin` — `USER` / `SYSTEM` / `EVENT`.
|
||
- `TurnTokens` — token usage одного assistant turn'а (`input`, `output`).
|
||
|
||
## Зачем отдельный модуль
|
||
|
||
`:proto` (wire-контракт), `:journal-api` (слой хранения) и `:outbox-api`
|
||
(события) должны ссылаться на **один и тот же** `Content`/`MessageContext`,
|
||
а не держать по собственной копии. Общий модуль убирает дубли и циклы:
|
||
|
||
```
|
||
:content-api ◄── :proto
|
||
◄── :journal-api
|
||
◄── :outbox-api
|
||
```
|
||
|
||
`:proto`/`:journal-api`/`:outbox-api` объявляют `api(project(":content-api"))`,
|
||
поэтому потребители (`:client`, `:server`, `:standalone`, ...) видят типы
|
||
транзитивно, но должны импортировать их напрямую из `pw.binom.agentik.content`.
|
||
|
||
## Публикация
|
||
|
||
Каталог `gradle/libs.versions.toml` → `agentik-content-api`.
|
||
`./gradlew :content-api:publish -Pversion=...` публикует все KMP-таргеты
|
||
(jvm + натив).
|