feat(gateway): PreferencesService + /preferences REST + /system Valkey override (P8-011) #180

Merged
jason.woltje merged 1 commits from feat/p8-011-preferences into main 2026-03-16 02:35:39 +00:00
Owner

Summary

  • PreferencesService: platform defaults, per-user DB overrides, IMMUTABLE_KEYS enforcement
  • PreferencesController: GET /api/preferences, POST /api/preferences, DELETE /api/preferences/:key
  • SystemOverrideService: Valkey-backed session-scoped system prompt injection with 5-min TTL
  • /system command: registered and handled via SystemOverrideService
  • AgentService: injects system override before each prompt() call, renews TTL
  • 11 unit tests covering defaults, overrides, enforcement wins, immutable-key errors

Closes #164

Test plan

  • pnpm typecheck — 32/32 pass
  • pnpm lint — 18/18 pass
  • pnpm format:check — clean
  • pnpm test — 52 tests pass

🤖 Generated with Claude Code

## Summary - **PreferencesService**: platform defaults, per-user DB overrides, `IMMUTABLE_KEYS` enforcement - **PreferencesController**: `GET /api/preferences`, `POST /api/preferences`, `DELETE /api/preferences/:key` - **SystemOverrideService**: Valkey-backed session-scoped system prompt injection with 5-min TTL - **`/system` command**: registered and handled via `SystemOverrideService` - **AgentService**: injects system override before each `prompt()` call, renews TTL - **11 unit tests** covering defaults, overrides, enforcement wins, immutable-key errors Closes #164 ## Test plan - [x] `pnpm typecheck` — 32/32 pass - [x] `pnpm lint` — 18/18 pass - [x] `pnpm format:check` — clean - [x] `pnpm test` — 52 tests pass 🤖 Generated with [Claude Code](https://claude.com/claude-code)
jason.woltje added 1 commit 2026-03-16 02:33:18 +00:00
feat(gateway): PreferencesService + /preferences REST + /system Valkey override (P8-011)
All checks were successful
ci/woodpecker/push/ci Pipeline was successful
ci/woodpecker/pr/ci Pipeline was successful
85aeebbde2
- PreferencesService: platform defaults, user overrides, IMMUTABLE_KEYS enforcement
- PreferencesController: GET /api/preferences, POST /api/preferences, DELETE /api/preferences/:key
- PreferencesModule: global module exporting PreferencesService and SystemOverrideService
- SystemOverrideService: Valkey-backed session-scoped system prompt override with 5-min TTL + renew
- CommandRegistryService: register /system command (socket execution)
- CommandExecutorService: handle /system command via SystemOverrideService
- AgentService: inject system override before each prompt turn, renew TTL; store userId in session
- ChatGateway: pass userId when creating agent sessions
- PreferencesService unit tests: 11 tests covering defaults, overrides, enforcement wins, immutable key errors

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
jason.woltje merged commit b4d03a8b49 into main 2026-03-16 02:35:39 +00:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: mosaicstack/stack#180