• 16 f191387e99

    16
    release / Publish KMP libraries → caffeine Nexus (release) Successful in 1m18s
    Stable

    subochev released this 2026-09-23 12:59:58 +00:00 | 4 commits to main since this release

    ksqlite 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 — total
    • GET /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 isolation
    • BearerTokenTest inline-stub дополнен count методами

    Build

    • ./gradlew jvmTest: 425/0/0 ✅
    • ./gradlew :standalone:shadowJar: ✅ (245M fatjar)
    • :server:jvmTest 10/0, :standalone:jvmTest 129/0, :journal-ksqlite:jvmTest 25/0,
      :journal-inmemory:jvmTest 19/0

    Коммит: f191387

    Downloads
  • 15 d1b4f897b7

    15
    release / Publish KMP libraries → caffeine Nexus (release) Successful in 1m4s
    Stable

    subochev released this 2026-09-23 02:44:06 +00:00 | 5 commits to main since this release

    Downloads
  • 14 a81d92f489

    14
    release / Publish KMP libraries → caffeine Nexus (release) Failing after 32s
    Stable

    subochev released this 2026-09-23 02:42:06 +00:00 | 6 commits to main since this release

    Downloads
  • 13 a81d92f489

    13
    release / Publish KMP libraries → caffeine Nexus (release) Failing after 32s
    Stable

    subochev released this 2026-09-23 02:31:28 +00:00 | 6 commits to main since this release

    Downloads
  • 12 3e583ac8ea

    12
    release / Publish KMP libraries → caffeine Nexus (release) Successful in 1m16s
    Stable

    subochev released this 2026-09-23 01:47:59 +00:00 | 7 commits to main since this release

    Downloads
  • 11 639c7d1748

    tag 11
    ci / JVM build + tests (push) Successful in 5m49s
    release / Publish KMP libraries → caffeine Nexus (release) Successful in 36s
    Stable

    subochev released this 2026-09-22 02:26:10 +00:00 | 12 commits to main since this release

    tag 11

    • Agent.conversationStore (read-only view) + Agent.renameConversation command on :proto
    • MutableConversationStore split out of ConversationStore in :journal-api + listFlow default impl
    • AgentEvent.Touched in :outbox-api for client-cache freshness after send()
    • :client: HttpConversationStore + in-memory cache wrapped into AgentikAgent
    • :server: GET /conversations returns List<ConversationRecord>; PATCH /conversations/{id} uses agent.renameConversation
    • :journal-inmemory: ios targets added; InMemoryMutableConversationStore moved here from :storage-inmemory
    • :client/README: new «Кэш списка бесед» section
    Downloads
  • 10 acb4ee6186

    10
    ci / JVM build + tests (push) Successful in 5m48s
    release / Publish KMP libraries → caffeine Nexus (release) Successful in 35s
    Stable

    subochev released 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 → toolName map — денормализация дешёвая, поле присутствует в payload.
    • Удалены typealias'ы в :proto (Event.kt, AgentEvent.kt, CommonEvent.kt). Через alias is 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-api Event.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> — cursor lastSeen сохраняется между попытками, клиент не теряет события при reconnect
      • connectionStatus(): 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
  • 9 7865eed836

    9
    ci / JVM build + tests (push) Successful in 6m20s
    release / Publish KMP libraries → caffeine Nexus (release) Successful in 37s
    Stable

    subochev released 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
  • 8 68543357c2

    8
    ci / JVM build + tests (push) Failing after 11s
    release / Publish KMP libraries → caffeine Nexus (release) Failing after 10s
    Stable

    subochev released this 2026-09-21 09:28:22 +00:00 | 21 commits to main since this release

    Downloads
  • 7 f946186ef5

    7
    ci / JVM build + tests (push) Failing after 54s
    release / Publish KMP libraries → caffeine Nexus (release) Failing after 5s
    Stable

    subochev released this 2026-09-21 09:27:21 +00:00 | 22 commits to main since this release

    Downloads