mirror of
https://github.com/block/buzz.git
synced 2026-11-14 13:21:02 +00:00
108 lines
3.0 KiB
TypeScript
108 lines
3.0 KiB
TypeScript
import type * as React from "react";
|
|
import type { InheritedDefault } from "./bakedEnvHelpers";
|
|
import { getPersonaProviderOptions } from "./agentConfigOptions";
|
|
import { Button } from "@/shared/ui/button";
|
|
|
|
function providerLabel(providerId: string) {
|
|
const option = getPersonaProviderOptions("", "buzz-agent").find(
|
|
(candidate) => candidate.id === providerId,
|
|
);
|
|
return option?.label ?? providerId;
|
|
}
|
|
|
|
export function formatAiDefaultsSummary({
|
|
provider,
|
|
model,
|
|
}: {
|
|
provider: InheritedDefault;
|
|
model: InheritedDefault;
|
|
}) {
|
|
const parts = [
|
|
provider.value ? providerLabel(provider.value) : null,
|
|
model.value || null,
|
|
].filter((value): value is string => Boolean(value));
|
|
|
|
return parts.length > 0 ? parts.join(" · ") : "Not configured";
|
|
}
|
|
|
|
export function AgentAiDefaultsNotice({
|
|
isConfigured = true,
|
|
onEditDefaults,
|
|
triggerRef,
|
|
explicitModel,
|
|
explicitProvider,
|
|
harness,
|
|
inheritedModel,
|
|
inheritedProvider,
|
|
}: {
|
|
isConfigured?: boolean;
|
|
onEditDefaults: () => void;
|
|
triggerRef?: React.Ref<HTMLButtonElement>;
|
|
explicitModel: string;
|
|
explicitProvider: string;
|
|
harness?: string;
|
|
inheritedModel: InheritedDefault;
|
|
inheritedProvider: InheritedDefault;
|
|
}) {
|
|
const provider = explicitProvider.trim() || inheritedProvider.value;
|
|
const model = explicitModel.trim() || inheritedModel.value;
|
|
|
|
if (!isConfigured) {
|
|
return (
|
|
<div
|
|
className="flex items-center justify-between gap-3 rounded-xl border border-border/70 bg-muted/30 px-3 py-2.5"
|
|
data-testid="agent-ai-defaults-notice"
|
|
>
|
|
<p className="text-sm font-medium text-foreground">
|
|
Global defaults not set
|
|
</p>
|
|
<Button
|
|
className="shrink-0"
|
|
data-testid="set-ai-defaults"
|
|
onClick={onEditDefaults}
|
|
ref={triggerRef}
|
|
size="sm"
|
|
type="button"
|
|
variant="outline"
|
|
>
|
|
Set
|
|
</Button>
|
|
</div>
|
|
);
|
|
}
|
|
|
|
return (
|
|
<div className="space-y-1" data-testid="agent-ai-defaults-notice">
|
|
<dl className="grid grid-cols-[auto_minmax(0,1fr)] gap-x-3 text-sm">
|
|
{harness !== undefined ? (
|
|
<>
|
|
<dt className="text-muted-foreground">Harness</dt>
|
|
<dd className="truncate text-foreground">
|
|
{harness || "Not configured"}
|
|
</dd>
|
|
</>
|
|
) : null}
|
|
<dt className="text-muted-foreground">Provider</dt>
|
|
<dd className="truncate text-foreground">
|
|
{provider ? providerLabel(provider) : "Not configured"}
|
|
</dd>
|
|
<dt className="text-muted-foreground">Model</dt>
|
|
<dd className="truncate text-foreground">
|
|
{model || "Not configured"}
|
|
</dd>
|
|
</dl>
|
|
<Button
|
|
className="h-auto px-0 py-1"
|
|
data-testid="edit-ai-defaults"
|
|
onClick={onEditDefaults}
|
|
ref={triggerRef}
|
|
size="xs"
|
|
type="button"
|
|
variant="link"
|
|
>
|
|
Edit global defaults
|
|
</Button>
|
|
</div>
|
|
);
|
|
}
|