feat: establish unified administration and model context baseline

This commit is contained in:
Codex
2026-09-12 18:03:15 +02:00
parent 840344706f
commit f52bf22e05
74 changed files with 2334 additions and 523 deletions
@@ -2,6 +2,7 @@ import { forwardRef, useId, useState, type ReactNode } from "react"
import { ArrowLeft, ChevronRight } from "lucide-react"
import { Button } from "../../components/ui/button"
import { AdministrationHeader } from "../administration/AdministrationPage"
import {
WorkAreaPanel,
WorkAreaPanelHostProvider,
@@ -117,17 +118,13 @@ export function FleetLedgerHeader({
className,
}: FleetLedgerHeaderProps) {
return (
<header className={classes("thot-fleet-ledger__header", className)}>
<div className="thot-fleet-ledger__heading-copy">
<h1 className="thot-fleet-ledger__title">{title}</h1>
</div>
{status ? <div className="thot-fleet-ledger__header-status">{status}</div> : null}
{actions ? (
<div className="thot-fleet-ledger__header-actions" role="group" aria-label={actionsLabel}>
<div className={className}>
<AdministrationHeader title={title} description="Configure database connections, synchronize schema and curate the catalog." />
<div className="thot-fleet-ledger__header-status">{status}</div>
{actions && <div className="thot-administration-toolbar" role="group" aria-label={actionsLabel}>
{actions}
</div>
) : null}
</header>
</div>}
</div>
)
}
@@ -1,4 +1,5 @@
import { useId } from "react";
import { useWorkingContextScope } from "../../workspaces/WorkingContext";
import type { MetadataGenerationModels } from "../../api/catalog-databases";
export const NO_METADATA_GENERATION_LLM_MODEL_MESSAGE =
@@ -24,16 +25,19 @@ export function MetadataGenerationModelSelector({
variant = "default",
}: Props) {
const helpId = useId();
const workingContext = useWorkingContextScope();
if (workingContext) return null;
const models = data?.models ?? [];
const configuredDefault = data?.default ?? "";
const hasUsableDefault = configuredDefault !== ""
&& models.some((model) => model.id === configuredDefault);
const noUsableModel = !isLoading && !isError && Boolean(data) && !hasUsableDefault;
const staleSelection = Boolean(selectedModel) && !models.some((model) => model.id === selectedModel);
const unavailableMessage = !isLoading && isError
? "Metadata-generation LLM model choices are unavailable."
? "Global LLM model choices are unavailable."
: noUsableModel
? NO_METADATA_GENERATION_LLM_MODEL_MESSAGE
: null;
: staleSelection ? "The global LLM model is unavailable. Choose a configured model; no fallback is applied." : null;
const compact = variant === "compact";
return (
@@ -45,15 +49,16 @@ export function MetadataGenerationModelSelector({
? "flex min-w-0 items-center gap-2 text-xs font-medium text-foreground"
: "grid gap-1.5 text-xs font-medium text-foreground"}
>
<span className={compact ? "whitespace-nowrap" : undefined}>Metadata-generation LLM model</span>
<span className={compact ? "whitespace-nowrap" : undefined}>Global LLM model</span>
<select
className={`${compact ? "h-8 min-w-52" : "h-9 w-full"} rounded-md border border-input bg-card px-3 text-sm outline-none transition focus:border-primary/60 focus:ring-3 focus:ring-ring/15 disabled:bg-muted disabled:text-muted-foreground`}
aria-label="Metadata-generation LLM model"
aria-label="Global LLM model"
aria-describedby={unavailableMessage ? helpId : undefined}
value={selectedModel}
disabled={!canManage || isLoading || isError || !hasUsableDefault}
onChange={(event) => onSelectedModelChange(event.target.value)}
>
{staleSelection && <option value={selectedModel}>{selectedModel} (unavailable)</option>}
{isLoading ? <option value="">Loading models…</option> : null}
{!isLoading && isError ? <option value="">Model choices unavailable</option> : null}
{noUsableModel ? (
@@ -64,6 +69,7 @@ export function MetadataGenerationModelSelector({
))}
</select>
</label>
<span className="text-xs text-muted-foreground">Shared with Core and all workspaces.</span>
{unavailableMessage ? (
<p id={helpId} className="max-w-72 text-xs font-normal leading-4 text-muted-foreground">
{unavailableMessage}