diff --git a/server/package.json b/server/package.json index d07ab00..304ec80 100644 --- a/server/package.json +++ b/server/package.json @@ -1,6 +1,6 @@ { "name": "recap-relay-server", - "version": "0.2.4", + "version": "0.2.5", "type": "module", "private": true, "dependencies": { diff --git a/startos/actions/adjustTierQuotas.ts b/startos/actions/adjustTierQuotas.ts index 660c7c5..71ee76e 100644 --- a/startos/actions/adjustTierQuotas.ts +++ b/startos/actions/adjustTierQuotas.ts @@ -94,15 +94,13 @@ const inputSpec = InputSpec.of({ placeholder: null, }), // Max tier knobs. - max_monthly: Value.union( - { - name: 'Max — Monthly Credits', - description: - 'Max-tier users default to unlimited monthly credits. Switch to "Limit to a specific amount" to cap how many credits each Max install can spend per month.', - default: 'unlimited', - }, - maxMonthlyVariants, - ), + max_monthly: Value.union({ + name: 'Max — Monthly Credits', + description: + 'Max-tier users default to unlimited monthly credits. Switch to "Limit to a specific amount" to cap how many credits each Max install can spend per month.', + default: 'unlimited', + variants: maxMonthlyVariants, + }), max_gemini_cap: Value.number({ name: 'Max — Gemini Cap (monthly)', description: @@ -127,7 +125,7 @@ export const adjustTierQuotas = sdk.Action.withInput( 'Tune the per-tier monthly credit caps and Gemini exposure without redeploying. Changes apply to the next request — no restart needed.', warning: null, allowedStatuses: 'any', - group: null, + group: 'Tiers', visibility: 'enabled', }), diff --git a/startos/actions/setAdminPassword.ts b/startos/actions/setAdminPassword.ts index eaa15e3..7be2aec 100644 --- a/startos/actions/setAdminPassword.ts +++ b/startos/actions/setAdminPassword.ts @@ -47,7 +47,7 @@ export const setAdminPassword = sdk.Action.withInput( "Gate the relay's /admin dashboard. The public /relay/* endpoints are unaffected — they're per-call authenticated via X-Recap-Install-Id + Authorization headers.", warning: null, allowedStatuses: 'any', - group: null, + group: 'Setup', visibility: 'enabled', }), diff --git a/startos/actions/setGeminiKey.ts b/startos/actions/setGeminiKey.ts index 03896dc..671f977 100644 --- a/startos/actions/setGeminiKey.ts +++ b/startos/actions/setGeminiKey.ts @@ -32,7 +32,7 @@ export const setGeminiKey = sdk.Action.withInput( "The operator's Gemini key. Required — the relay will refuse to serve traffic until this is set.", warning: null, allowedStatuses: 'any', - group: null, + group: 'AI Backends', visibility: 'enabled', }), diff --git a/startos/actions/setGemmaUrl.ts b/startos/actions/setGemmaUrl.ts index 311d5ab..e50f5fe 100644 --- a/startos/actions/setGemmaUrl.ts +++ b/startos/actions/setGemmaUrl.ts @@ -43,7 +43,7 @@ export const setGemmaUrl = sdk.Action.withInput( 'Optional. Where the relay forwards analysis requests once a user exceeds their monthly Gemini cap. Leave URL empty to disable the fallback.', warning: null, allowedStatuses: 'any', - group: null, + group: 'AI Backends', visibility: 'enabled', }), diff --git a/startos/actions/setKeysatBaseUrl.ts b/startos/actions/setKeysatBaseUrl.ts index 6d16d4f..9f698d4 100644 --- a/startos/actions/setKeysatBaseUrl.ts +++ b/startos/actions/setKeysatBaseUrl.ts @@ -35,7 +35,7 @@ export const setKeysatBaseUrl = sdk.Action.withInput( "Where the relay validates Recap user licenses. Defaults to https://keysat.xyz — override to a co-located internal hostname if Keysat is on the same Start9 server.", warning: null, allowedStatuses: 'any', - group: null, + group: 'Setup', visibility: 'enabled', }), diff --git a/startos/actions/setParakeetUrl.ts b/startos/actions/setParakeetUrl.ts index 84a2687..7ce7126 100644 --- a/startos/actions/setParakeetUrl.ts +++ b/startos/actions/setParakeetUrl.ts @@ -42,7 +42,7 @@ export const setParakeetUrl = sdk.Action.withInput( "Optional. Where the relay forwards transcription requests once a user exceeds their monthly Gemini cap. Leave URL empty to disable the operator-hardware fallback.", warning: null, allowedStatuses: 'any', - group: null, + group: 'AI Backends', visibility: 'enabled', }), diff --git a/startos/versions/index.ts b/startos/versions/index.ts index 048c388..568e025 100644 --- a/startos/versions/index.ts +++ b/startos/versions/index.ts @@ -5,8 +5,9 @@ import { v_0_2_1 } from './v0.2.1' import { v_0_2_2 } from './v0.2.2' import { v_0_2_3 } from './v0.2.3' import { v_0_2_4 } from './v0.2.4' +import { v_0_2_5 } from './v0.2.5' export const versionGraph = VersionGraph.of({ - current: v_0_2_4, - other: [v_0_2_3, v_0_2_2, v_0_2_1, v_0_2_0, v_0_1_0], + current: v_0_2_5, + other: [v_0_2_4, v_0_2_3, v_0_2_2, v_0_2_1, v_0_2_0, v_0_1_0], }) diff --git a/startos/versions/v0.2.5.ts b/startos/versions/v0.2.5.ts new file mode 100644 index 0000000..66786a6 --- /dev/null +++ b/startos/versions/v0.2.5.ts @@ -0,0 +1,13 @@ +import { VersionInfo } from '@start9labs/start-sdk' + +export const v_0_2_5 = VersionInfo.of({ + version: '0.2.5:0', + releaseNotes: { + en_US: + 'StartOS actions are now grouped (Setup / AI Backends / Tiers) for easier navigation in the operator dashboard.', + }, + migrations: { + up: async ({ effects }) => {}, + down: async ({ effects }) => {}, + }, +})