Changeset 0.15.0 patches (#72)

This commit is contained in:
2026-02-26 23:44:44 +00:00
parent 2d79ff593b
commit e663104575
12 changed files with 76 additions and 45 deletions

View File

@@ -749,15 +749,30 @@ See [DESIGN-0.14.0.md](DESIGN-0.14.0.md) for full spec.
---
## v0.15.0 — Compaction
## v0.15.0 — Compaction
Depends on: utility model role (v0.10.0).
- [ ] Auto-compaction service: background job that calls utility model to summarize
- [ ] Channel-scoped: triggers when context exceeds threshold
- [ ] Summaries stored as system messages
- [ ] Configurable: per-channel opt-in/out, summary model override
- [ ] Admin controls for resource limits
- [x] Compaction service: extracts messages, calls utility model to summarize, replaces with summary
- [x] `Summarize & Continue` button: user-triggered compaction via existing summarize endpoint
- [x] Channel-scoped context threshold triggers (configurable min messages, min chars, activity gap)
- [x] Summaries stored as system messages with `is_summary = true` metadata
- [x] Background scanner: periodic candidate detection with cooldown and in-flight dedup
- [x] Configurable: per-channel opt-in/out (`compaction_opt_out`), global threshold overrides
- [x] Admin controls: global enable/disable, threshold/cooldown settings via `global_settings`
- [x] Context budget guard rail: estimated tokens must exceed 80% of ceiling before compaction
- [x] Token estimation: `(len + 3) / 4` heuristic with path-from-summary support
- [x] Rate limiting on summarize endpoint
- [x] Comprehensive test suite: scanner candidates, guard rails, live pipeline integration tests
Bug fixes during CI stabilization:
- [x] Fixed `channels.deleted_at``channels.is_archived` (channels use soft-archive, not soft-delete)
- [x] Fixed NULL model column scan in scanner (`COALESCE(c.model, '')`)
- [x] Fixed test channel backdating (BEFORE UPDATE trigger override via INSERT)
- [x] Fixed vault nil-check fallback in role resolver for plaintext API keys
- [x] Fixed parallel test DB races (`-p 1` serialization)
- [x] Fixed proactive token refresh cascade: failed refresh no longer nukes active session
- [x] Fixed model visibility reset: preferences fetch failure preserves existing hidden state
---
@@ -1160,6 +1175,7 @@ based on need.
**UX / Multi-Seat**
- ~~Per-chat model/preset persistence (server-side)~~ ✅ _(v0.12.0 — `channels.settings.last_selector_id` JSONB merge, localStorage write-through cache)_
- Per-provider model preferences: `user_model_settings` unique key is `(user_id, model_id)` — same model from different providers shares one visibility toggle. Needs `provider_config_id` dimension in DB constraint, store, API, and frontend `hiddenModels` keying. Frontend composite key (`configId:modelId`) already exists in `App.models[].id`.
**Knowledge Bases — Future**
- Hybrid search: combine vector similarity with full-text `tsvector`, re-rank
@@ -1184,4 +1200,4 @@ based on need.
- Multi-tenant SaaS mode
- Plugin/extension marketplace
- Virtual scroll for long conversations
- SQLite backend option (single-user / dev)
- SQLite backend option (single-user / dev)