-
released this
2026-09-23 12:59:58 +00:00 | 4 commits to main since this releaseksqlite 0.1.2 → 0.1.3
Поднята зависимость
pw.binom.db:ksqliteс 0.1.2 до 0.1.3 в шести модулях
(:vector-index-ksqlite,:journal-ksqlite,:context-ksqlite,
:reflection-ksqlite,:standalone,:memory-md-vector).В Maven Central опубликованы POM, Gradle Module Metadata и JAR — резолв
pw.binom.db:ksqlite-jvm:0.1.3подтверждён через./gradlew :journal-ksqlite:dependencies.Расширение контракта :journal-api
В интерфейс
JournalStoreдобавлены два метода:suspend fun count(conversationId: String): Long— total число сообщений в диалогеsuspend fun count(conversationId: String, after: Instant): Long— строгоcreatedAt > after
Реализации:
:journal-ksqlite— pre-prepared SELECT COUNT(*) statement'ы, O(1) SQL:journal-inmemory— O(N) под Mutex
HTTP-фасад :server
Новые endpoint'ы в
journalRoutes:GET /conversations/{id}/count— totalGET /conversations/{id}/count?after=— count after cursor
Один endpoint с опциональным параметром
after(симметрично существующемуmessages).
Тело ответа — JSON{"count": <Long>}через@Serializable CountResponse.HTTP-клиент :client
HttpJournalStore.count/HttpJournalStore.count(after)реализованы через новые endpoint'ы.Тесты
server/JournalRoutesCountTest— 5 кейсов через embedded CIO + реальныйInMemoryJournalStore:
total, after-cursor, unknown-conv (0), JSON shape, cross-conv isolationBearerTokenTestinline-stub дополненcountметодами
Build
./gradlew jvmTest: 425/0/0 ✅./gradlew :standalone:shadowJar: ✅ (245M fatjar):server:jvmTest10/0,:standalone:jvmTest129/0,:journal-ksqlite:jvmTest25/0,
:journal-inmemory:jvmTest19/0
Коммит:
f191387Downloads
-
tag 11
Stablereleased this
2026-09-22 02:26:10 +00:00 | 12 commits to main since this releasetag 11
Agent.conversationStore(read-only view) +Agent.renameConversationcommand on :protoMutableConversationStoresplit out ofConversationStorein :journal-api +listFlowdefault implAgentEvent.Touchedin :outbox-api for client-cache freshness aftersend()- :client:
HttpConversationStore+ in-memory cache wrapped intoAgentikAgent - :server:
GET /conversationsreturnsList<ConversationRecord>;PATCH /conversations/{id}usesagent.renameConversation - :journal-inmemory: ios targets added;
InMemoryMutableConversationStoremoved here from :storage-inmemory - :client/README: new «Кэш списка бесед» section
Downloads
-
10
Stablereleased this
2026-09-22 00:13:02 +00:00 | 14 commits to main since this releaseЧто в релизе
Refactor (protocol)
Три протокольных изменения по итогам ревью Android-клиента:
- toolName denormalization в ToolResult (3 слоя):
:outbox-api/Event.ToolResult,:journal-api/MessageRecord.ToolResult,:proto/Message.ToolResultтеперь несутtoolName: String? = null. КодекиResultPayloadв:storage-ksqlite+:journal-ksqliteобновлены,:standalone/ToolDispatcherпробрасываетtoolName = call.name. UI больше не обязан вести локальныйtoolCallId → toolNamemap — денормализация дешёвая, поле присутствует в payload. - Удалены typealias'ы в
:proto(Event.kt,AgentEvent.kt,CommonEvent.kt). Через aliasis proto.Event.Endпадает сUnresolved reference 'End'— alias теряет nested-class access. Все потребители (:proto,:server,:client,:standalone,:agentik-tui,:agentik-cli) перевёл на прямой импортpw.binom.agentik.outbox.{Event, AgentEvent, CommonEvent}. 21 файл rewired, 3 файла удалено. Event.ToolResult.id→toolCallId(semantic rename): в:outbox-apiEvent.ToolResult.id == Event.ToolCall.id(одно значение, одно имя) → переименовано вtoolCallId. Persistent journal (MessageRecord.ToolResult) оставлен как есть: тамid— собственный PK,toolCallId— FK на call (разные семантики). Заодно пофикшен баг вToolDispatcher: эмитилid = resultId, а KDoc утверждалid == ToolCall.id→ теперь эмититtoolCallId = callId.Conversation.events()удалён из:proto.OutboxStore— единственный источник live-событий.Conversationтеперь pure per-conversation abstraction (send/getMessages/rename/close). HTTP-роутGET /conversations/{id}/eventsсохранён для wire-compat, но внутри роутится черезagent.outbox.conversationEvents(after, id).map { it.event }. Клиент делаетagent.outbox.conversationEvents(Instant.DISTANT_PAST, convId).map { it.event }.
Docs (client)
- KDoc на
AgentikAgentтеперь содержит таблицу «Что клиент хранит локально (persistence)» —clientId(произвольная строка клиента для server-side log multiplexing, генерируется один раз, никогда не меняется),baseUrl(включает path-prefix фасада),token(Bearer,null= анонимный).client/README.mdполучил зеркальную секцию с минимальным JSON-примером.AgentSettingsRepositoryнамеренно НЕ добавлен — UI-фреймворки хранят настройки по-разному (JSON-файл, Keychain, Android DataStore, NSUserDefaults), либа формат не навязывает.
Feature (client)
-
ReconnectingOutboxв:client/commonMain(240 LOC + 4 теста): обёртка над любымOutboxStoreс auto-reconnect при обрыве SSE. Два независимых параллельных потока:events(after): Flow<CommonEvent>— cursorlastSeenсохраняется между попытками, клиент не теряет события при reconnectconnectionStatus(): Flow<ConnectionStatus>—Connecting(attempt)/Connected(since)/Disconnected(reason, willRetryIn)/Failed(cause)для UI-индикации, НЕ мешается с потоком событийBackoffPolicy.Default(1s → 2s → 4s → 8s → 16s → 30s, ±20% jitter, бесконечные попытки) +BackoffPolicy.Fixed(delay, attempts)для тестовAutoCloseable.close()отменяет background-loop
client/README.md— секция «Auto-reconnect для живого outbox» с примером (дваscope.launchна разные потоки).
Verified
- jvmTest: 95 задач зелёных, 0 падений
- 4 новых теста
ReconnectingOutboxTest: успех / disconnect+reconnect+cursor preserved / exhausted attempts → Failed / close cancels loop
Downloads
- toolName denormalization в ToolResult (3 слоя):
-
9
Stablereleased this
2026-09-21 20:18:45 +00:00 | 18 commits to main since this releaseЧто в релизе
Fixes
- ksqlite 0.1.1-SNAPSHOT → 0.1.2 (опубликован в Maven Central)
- text-embedding-kmp 3.0.0-SNAPSHOT → v5 (опубликован в caffeine Nexus с нативными klib'ами для linuxX64/Arm64, mingwX64, macosX64/Arm64, iosX64/Arm64/SimulatorArm64 — v4 имел только jvm+android, что ломало native-resolve)
- ci.yml: убран шаг
:agentik-cli:shadowJar(модуль отключён изsettings.gradle.ktsс 2026-09-21)
Features
- :memory-md-vector (KMP jvm+linuxX64+mingwX64): гибридный md+vector store. .md-файлы как source of truth, sqlite-vec как derived cache. Hybrid score: 0.7vector + 0.3keyword. Reconcile на старте через content-hash.
- :reflection-api: новый 4-й API-модуль (Reflection, ReflectionStore, ReflectionEvent.Created).
- TextEmbeddingExecutor в :memory-api (suspend-обёртка над KMP TextEmbeddingExtractor) — заменил JVM-only EmbeddingProvider.
- :outbox-api + :journal-api: финальное переименование/расщепление бывших :event-store / :message-store-api / :message-log-api / :working-memory-api.
- :standalone flattened: всё в commonMain/commonTest (KMP-plugin сохранён ради бесшовного потребления KMP-зависимостей).
Verified
- jvmTest: 96 задач, 407 тестов, 0 падений
- text-embedding-kmp v5 native klib'ы присутствуют в caffeine (api-linuxx64-5.klib=10571b, api-iosarm64-5.klib=10570b, ...)
Downloads