Upgrade openapi-generator 7.12.0 → 7.21.0 and switch the generated API
client serialization library from Moshi to kotlinx.serialization to unify
with the RPC DTOs in shared/ which already use kotlinx.
- Extract PrepareLocalCliTask to buildSrc/ to fix Gradle configuration
cache error (non-static inner class)
- Remove moshi/moshi-kotlin deps, add kotlinx-serialization-json
- Map bare number types to kotlin.Double (avoids BigDecimal + @Contextual)
- Rewrite fixGeneratedApi task for 7 kotlinx codegen bugs: boolean const
enums, double-parens on HashMap classes, private Double constructor,
missing @Contextual on Any, nullable OkHttp body, AnySerializer for
dynamic JSON, and empty anyOf wrapper classes replaced with JsonElement
Add findBun() to build.gradle.kts to probe common install locations
(/opt/homebrew/bin, ~/.bun/bin, etc.) so localCli task works even
when Gradle daemon's PATH doesn't include bun.
Fix Config.model and Config.small_model deserialization: the spec
defines these as anyOf[string, null] but codegen produced empty wrapper
classes. Extend fixGeneratedApi to delete ConfigModel/ConfigSmallModel
and replace field types with kotlin.String?.
Add response body logging on fetch failures for easier debugging.
Introduce KiloAppState lifecycle: Disconnected → Connecting → Loading →
Ready → Error. Config and notifications are required (retried 3×),
profile 401 is treated as not-logged-in (not an error).
Each failed fetch captures HTTP status code and error detail from
ClientException/ServerException. The tool window displays granular
loading progress per resource and detailed error information including
HTTP status and response messages.
Lift concurrency control to KiloBackendAppService with a single Mutex
that serializes connect/restart/reinstall/reconnect. Remove Mutex and
Deferred from KiloBackendCliManager. Add onReconnect callback to
KiloConnectionService so dead-process restarts go through the mutex.
Fix process leak on startup timeout by killing orphaned CLI processes
in the catch block. Skip redundant reconnects when already connected.
Promote KiloAppService from project-level to app-level service since
it holds no project state. Change watch() to pass raw ConnectionStateDto
instead of pre-formatted text, letting callers handle EDT scheduling
and display conversion.
The RPC API is entirely project-neutral — all operations delegate to
the app-level KiloBackendAppService. Remove the unused ProjectId
parameter from all methods and rename to KiloAppRpcApi to reflect this.
Move health() from KiloBackendProjectService to KiloBackendAppService
and have the RPC impl delegate directly to the app service.
Move backend RPC classes to ai.kilocode.backend.rpc. Move frontend
classes to ai.kilocode.client with subpackages for actions and plugin.
Rename frontend KiloApiService to KiloAppService. Update XML
registrations to match new fully-qualified class names.
Rename server package to ai.kilocode.backend and apply consistent
KiloBackend* prefix: KiloBackendAppService, KiloBackendCliManager,
KiloBackendConnectionService, KiloBackendHttpClients,
KiloBackendProjectService.
Introduce KiloAppService that owns ServerManager and
KiloConnectionService as plain classes instead of separate services.
On CLI connect, it loads global data (profile, config, notifications)
in parallel and routes SSE events for config reloads.
KiloProjectService now delegates to KiloAppService instead of
KiloConnectionService directly.
Models fetched via the OpenAI-compatible /v1/models endpoint had image
support hardcoded to false because the endpoint provides no capability
metadata. This matches the legacy extension behavior (supportsImages:
true) for custom providers while leaving all other provider defaults
untouched.
The @ mention dropdown showed directories instead of files on empty query, limited
results to 10, and only reordered (not injected) open tabs. Now requests files-only
with a higher limit, injects open editor tabs at the top (active file first), and
filters by query. Closes#8709
* docs(kilo-docs): document asking the agent to configure kilo.json
* Apply suggestion from @lambertjosh
* docs: restore original intro line on settings page
slimPatch and slimMultiedit used `...meta` spreads that leaked heavy
fields (metadata.diff up to 158KB, files[].before/after ~128KB each)
through to the VS Code webview on every session switch. Replace with
explicit allowlist construction matching the pattern slimEdit/slimWrite
already used.
Add size-based guardrail tests that inject unknown heavy fields into
each tool's metadata and assert the slimmed output stays under 10KB.
This catches future upstream changes regardless of field names.
Add a runtime warning in slimPart (non-production) when slimmed state
exceeds 50KB so regressions surface during development.
The New Worktree dialog prompt input now mirrors the sidebar chat
exactly: mode selector, model selector, thinking effort (reasoning),
and a reset button — in the same order with the same defaults.
- Extract ThinkingSelectorBase from ThinkingSelector for reuse outside
session context (same pattern as ModelSelectorBase/ModeSwitcherBase)
- Initialize model/variant/agent from session defaults instead of null
- Show reset button only when model differs from config default
- Hide model/thinking/reset pills in compare mode (each session uses
its model's default variant)
- Extract message-files and continue-worktree helpers from
KiloProvider to fix pre-existing lint cap violations
- Extract onRequestState from AgentManagerProvider.onMessage to fix
pre-existing complexity violation
- Remove orphaned open-sessions.ts (dead code flagged by knip)