v0.2.5 grouped actions

This commit is contained in:
local
2026-05-11 22:12:02 -05:00
parent e612e8b8e8
commit 45c8462fa2
9 changed files with 30 additions and 18 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "recap-relay-server", "name": "recap-relay-server",
"version": "0.2.4", "version": "0.2.5",
"type": "module", "type": "module",
"private": true, "private": true,
"dependencies": { "dependencies": {
+4 -6
View File
@@ -94,15 +94,13 @@ const inputSpec = InputSpec.of({
placeholder: null, placeholder: null,
}), }),
// Max tier knobs. // Max tier knobs.
max_monthly: Value.union( max_monthly: Value.union({
{
name: 'Max — Monthly Credits', name: 'Max — Monthly Credits',
description: 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.', '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', default: 'unlimited',
}, variants: maxMonthlyVariants,
maxMonthlyVariants, }),
),
max_gemini_cap: Value.number({ max_gemini_cap: Value.number({
name: 'Max — Gemini Cap (monthly)', name: 'Max — Gemini Cap (monthly)',
description: 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.', 'Tune the per-tier monthly credit caps and Gemini exposure without redeploying. Changes apply to the next request — no restart needed.',
warning: null, warning: null,
allowedStatuses: 'any', allowedStatuses: 'any',
group: null, group: 'Tiers',
visibility: 'enabled', visibility: 'enabled',
}), }),
+1 -1
View File
@@ -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.", "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, warning: null,
allowedStatuses: 'any', allowedStatuses: 'any',
group: null, group: 'Setup',
visibility: 'enabled', visibility: 'enabled',
}), }),
+1 -1
View File
@@ -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.", "The operator's Gemini key. Required — the relay will refuse to serve traffic until this is set.",
warning: null, warning: null,
allowedStatuses: 'any', allowedStatuses: 'any',
group: null, group: 'AI Backends',
visibility: 'enabled', visibility: 'enabled',
}), }),
+1 -1
View File
@@ -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.', 'Optional. Where the relay forwards analysis requests once a user exceeds their monthly Gemini cap. Leave URL empty to disable the fallback.',
warning: null, warning: null,
allowedStatuses: 'any', allowedStatuses: 'any',
group: null, group: 'AI Backends',
visibility: 'enabled', visibility: 'enabled',
}), }),
+1 -1
View File
@@ -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.", "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, warning: null,
allowedStatuses: 'any', allowedStatuses: 'any',
group: null, group: 'Setup',
visibility: 'enabled', visibility: 'enabled',
}), }),
+1 -1
View File
@@ -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.", "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, warning: null,
allowedStatuses: 'any', allowedStatuses: 'any',
group: null, group: 'AI Backends',
visibility: 'enabled', visibility: 'enabled',
}), }),
+3 -2
View File
@@ -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_2 } from './v0.2.2'
import { v_0_2_3 } from './v0.2.3' import { v_0_2_3 } from './v0.2.3'
import { v_0_2_4 } from './v0.2.4' import { v_0_2_4 } from './v0.2.4'
import { v_0_2_5 } from './v0.2.5'
export const versionGraph = VersionGraph.of({ export const versionGraph = VersionGraph.of({
current: v_0_2_4, current: v_0_2_5,
other: [v_0_2_3, v_0_2_2, v_0_2_1, v_0_2_0, v_0_1_0], 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],
}) })
+13
View File
@@ -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 }) => {},
},
})