Changeset 0.8.4 (#47)

This commit is contained in:
2026-02-22 11:23:29 +00:00
parent e78a27c06e
commit f9f362c900
7 changed files with 361 additions and 219 deletions

View File

@@ -187,6 +187,55 @@ Required for enterprise and compliance. Cheap to build, expensive to retrofit.
- [x] Admin audit viewer (filter by action, resource type, paginated)
- [ ] Team admin sees audit entries scoped to their team
**Model Visibility (0.8.3)**
- [x] Three-state visibility: enabled (all users) / team (preset-building only) / disabled
- [x] Migration replaces `is_enabled` boolean with `visibility` varchar
- [x] Admin model list: 3-state cycle button, bulk set all to any state
- [x] `GET /teams/:teamId/models` returns enabled+team models for preset builders
- [x] User-facing `ListEnabledModels` strictly filters `visibility = 'enabled'`
**Preset Form Unification + UX (0.8.4)**
- [x] Single `renderPresetForm(options)` function shared across admin/team contexts
— parameterized: showAvatar, showProviderConfig, onSubmit, onCancel
- [x] Remove icon field from preset forms (not rendered anywhere meaningful)
- [x] Team admin preset form includes avatar upload (reuse admin component)
- [x] Hide Providers tab in Settings when `user_providers_enabled` is false
- [x] Settings Models tab: only show `visibility='enabled'` base models
(team-only models must not leak to user model list; presets filtered out)
- [x] Model provenance labels: badge indicating global vs personal source
— same model_id from both sources shown separately (different API keys)
- [x] Admin presets list: show created_by name + team name for attribution
(e.g. "Code Reviewer · 👥 Engineering · by sarah")
**User Presets + Model Filtering (0.8.5)**
- [ ] Users can create personal presets from any enabled base model
(backend `CreateUserPreset` exists, needs UI surface in Settings)
- [ ] Settings Models tab reworked as "My Models": toggle to hide/show
base models from selector, "+ Create Preset" action per model row
- [ ] `user_model_preferences` table: user_id, model_config_id, hidden boolean
— lightweight filter, not access control
- [ ] User personal provider models: simple enable/disable toggle
(no team dimension — personal keys are personal)
**Team Providers (0.8.6+)**
- [ ] `team_id` column on `api_configs` (nullable, symmetric with `user_id`)
- [ ] Team admins manage team-scoped provider configs
(add/remove API keys, toggle active, same UI as personal providers)
- [ ] `allow_team_providers` flag in `teams.settings` JSONB
— admin controls which teams can add their own API keys
- [ ] Team provider models use same 3-state visibility: enabled/disabled/team
— enabled: team members see in model selector (direct use)
— team: team admin can use for presets only (not direct member access)
— disabled: hidden from everyone
Same cycle button, same bulk actions, scoped to team admin panel
- [ ] `ListEnabledModels` adds section: team provider models where
`visibility = 'enabled'` AND user is member of owning team
- [ ] Team preset builder shows team provider models where
`visibility IN ('enabled', 'team')` AND user is admin of owning team
- [ ] Three-tier provider hierarchy with uniform visibility semantics:
global (sys-admin) → team (team-admin) → personal (user)
- [ ] Model provenance badges: global / team:TeamName / personal
**Usage / Cost Tracking**
- [ ] Capture from provider responses: prompt_tokens, completion_tokens,
cache_creation_tokens, cache_read_tokens