Changeset 0.10.2 (#58)

This commit is contained in:
2026-02-24 20:29:08 +00:00
parent 13772ebd6c
commit 4061e4a145
20 changed files with 1223 additions and 41 deletions

View File

@@ -23,7 +23,7 @@ v0.9.4 API Key Encryption + Vault
v0.10.0 Model Roles (utility + embedding) + Usage Tracking
v0.10.1 Summarize & Continue (first utility role consumer)
v0.10.2 Summarize & Continue (first utility role consumer)
┌───────┴──────────────┐
│ │
@@ -404,16 +404,56 @@ Three tracks of infrastructure that everything downstream depends on.
---
## v0.10.1 — Summarize & Continue
## v0.10.1 — Polish + UX
Spit and polish release: admin system prompt injection, team management modal
extraction, persona tab, side panel enhancements, code download, and critical
OpenAI streaming usage race fix.
- [x] Admin system prompt (global, injected before user/preset prompts)
- [x] Personas tab (moved from Models, policy-gated)
- [x] Team Management modal (extracted from Settings, tabbed, multi-team picker)
- [x] Preview pane: clear button, fullscreen toggle, resizable
- [x] Code block: download button (infers extension from language tag)
- [x] Personal Usage scoped to BYOK only
- [x] OpenAI streaming usage race fix (deferred Done event until usage chunk)
- [x] Usage logging zero-token guard removal
---
## v0.10.2 — Summarize & Continue + Role Cleanup
First consumer of the utility model role. User-triggered conversation
compaction — not automatic (that's v0.15.0).
- [ ] "Summarize and continue" button (appears alongside context length warning)
- [ ] Calls utility role to summarize conversation history
- [ ] Summary inserted as system message, earlier messages hidden from context
- [ ] Original messages preserved in DB (viewable via "show full history" toggle)
- [ ] Respects team-level role overrides for utility model selection
Depends on: utility model role (v0.10.0).
**Summarize & Continue**
- [x] "Summarize and continue" button in context warning bar (≥75% context)
- [x] `POST /channels/:id/summarize` — calls utility role with conversation history
- [x] Summary inserted as tree node with `metadata.type = "summary"` + boundary metadata
- [x] `loadConversation` recognizes summary boundaries: replaces pre-summary messages with summary system message
- [x] Multiple summaries stack (re-summarize after context fills again)
- [x] Fork-aware: summary is a tree node, branches have independent boundaries
- [x] Original messages preserved: "show full history" toggle reveals collapsed messages
- [x] Usage logged against utility role with cost tracking
**BYOK Role Overrides**
- [x] Personal role resolution chain: personal → team → global
- [x] User Settings → Model Roles tab (BYOK providers only)
- [x] Stored in `user.settings` JSONB (`model_roles` key, same shape as team overrides)
- [x] Only utility and embedding roles (generation removed)
**Generation Role Removal**
- [x] `RoleGeneration` removed from `ValidRoles` (was "generation" for image/media)
- [x] Removed from admin Roles tab UI
- [x] Image gen will be extension-managed (v0.11.0), not a role slot
**Utility Rate Limiting**
- [x] `utility_rate_limit` global setting (default: 20 calls/hour/user, 0 = unlimited)
- [x] Check against `usage_log` before executing org-funded utility calls
- [x] BYOK calls exempt (user's own key, user's own cost)
- [x] 429 response with clear message when exceeded
---
@@ -681,6 +721,15 @@ based on need.
- GDPR-style "download my data"
- Backup/restore CronJob manifests
**UX / Multi-Seat**
- Per-chat model/preset persistence (server-side). Currently a localStorage
bandaid (v0.10.2) that doesn't roam across devices. Proper fix: store
`last_selector_id` in `channels.settings` JSONB on each send. On chat
selection, resolve from `channel.settings.last_selector_id` → match against
available models/presets → fall back to `channel.model` → global default.
Eliminates device-local state entirely. Needs `updateChannel` PATCH on
completion success (single extra column merge, no migration).
**Platform**
- Rate limiting per user/team/tier (token budgets)
- Provider health monitoring + key rotation