From 95ef6f2dd16340d0c11a9d5e9b20d6dfc04ef040 Mon Sep 17 00:00:00 2001 From: seb Date: Tue, 6 Oct 2026 17:57:52 +0200 Subject: [PATCH] u --- README.md | 2 +- src/store/companysetting/set.js | 17 ++++++++++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 7b68a22..2158b09 100644 --- a/README.md +++ b/README.md @@ -169,7 +169,7 @@ Company-scoped key/value settings. Auth via selected company (`google_auth.selec - With `frontendOnly: true`, backend-only keys are omitted / `get` returns `undefined` (no leak via error type beyond missing). - `writeonly: true` → usergui gets a `"***"` scrambled version when retrieving the key (in `list`, or in `get` when `maskWriteonly` is enabled / `frontendOnly: true`). The backend receives the full value. - `keys.tavily`, `keys.openrouter`, and `keys.serper` default to `writeonly: true` on `set`. -- `set` only allows a fixed allow-list of keys: `ui.theme`, `keys.tavily`, `keys.openrouter`, `keys.serper`, `systemprompt-prefix`, `systemprompt-suffix`, `default-model`. +- `set` only allows a fixed allow-list of keys: `ui.theme`, `keys.tavily`, `keys.openrouter`, `keys.serper`, `systemprompt-prefix`, `systemprompt-suffix`, `default-model`, `modelslug`, `modelslugflag`, `modelreasoning`, `modelslugimage`. - No delete endpoint — settings are upsert / read only. Errors: `No company selected`, `Company not found`, `Not authorized`, `Invalid setting`. diff --git a/src/store/companysetting/set.js b/src/store/companysetting/set.js index 23744bc..09d1075 100644 --- a/src/store/companysetting/set.js +++ b/src/store/companysetting/set.js @@ -18,6 +18,10 @@ const ALLOWED_KEYS = new Set([ 'systemprompt-prefix', 'systemprompt-suffix', 'default-model', + 'modelslug', + 'modelslugflag', + 'modelreasoning', + 'modelslugimage', ]); const WRITEONLY_KEYS = new Set([ @@ -59,6 +63,17 @@ export default function set(provider) { if (typeof input.value !== 'string') { throw new Error('Invalid setting'); } + const trimmedVal = input.value.trim(); + let value = input.value; + if (key === 'modelslug' && !trimmedVal) { + value = 'openai/gpt-6-luna'; + } + if (key === 'modelslugflag' && !['', 'floor', 'nitro'].includes(trimmedVal)) { + throw new Error('Invalid setting'); + } + if (key === 'modelreasoning' && !['none', 'low', 'medium', 'high'].includes(trimmedVal)) { + throw new Error('Invalid setting'); + } const runner = makeRunner(provider, tx); const frontend = Boolean(input.frontend); @@ -71,7 +86,7 @@ export default function set(provider) { await runner.query(upsertSql, { companyId, key, - value: input.value, + value, frontend: isSqlite ? (frontend ? 1 : 0) : frontend, writeonly: isSqlite ? (writeonly ? 1 : 0) : writeonly, });