feat(ai): disable local provider and improve commit file display
Local AI is now treated as unavailable in the settings UI, with a migration to ensure any previously saved "local" selection switches back to OpenAI. The history panel also improves how commit file names are presented, including clearer old->new path formatting. - Migrate stored AI provider away from local to prevent dead state - Disable local provider option with an "in development" badge - Refine history panel filename rendering and tooltip context
This commit is contained in:
+6
-2
@@ -543,7 +543,7 @@
|
||||
|
||||
function defaultAiSettings(): AiSettings {
|
||||
return {
|
||||
provider: "local",
|
||||
provider: "openai",
|
||||
localModelId: "qwen2.5-0.5b",
|
||||
localProfile: "fast",
|
||||
openaiModel: "gpt-4o-mini",
|
||||
@@ -557,7 +557,11 @@
|
||||
try {
|
||||
const stored = JSON.parse(localStorage.getItem(AI_SETTINGS_KEY) ?? "null") as unknown;
|
||||
if (stored && typeof stored === "object") {
|
||||
return { ...defaultAiSettings(), ...(stored as Partial<AiSettings>) };
|
||||
const merged = { ...defaultAiSettings(), ...(stored as Partial<AiSettings>) };
|
||||
// Local AI is still in development and disabled in the settings UI — migrate any
|
||||
// previously saved selection away from it so nobody gets stuck on a dead option.
|
||||
if (merged.provider === "local") merged.provider = "openai";
|
||||
return merged;
|
||||
}
|
||||
} catch {
|
||||
// Fall through to defaults below.
|
||||
|
||||
+13
@@ -1721,6 +1721,19 @@
|
||||
color: #f5f7ff;
|
||||
background: linear-gradient(180deg, rgba(100,108,255,0.22), rgba(65,209,255,0.1));
|
||||
}
|
||||
.ai-provider-option-local {
|
||||
flex-wrap: wrap;
|
||||
row-gap: 2px;
|
||||
}
|
||||
.ai-provider-badge {
|
||||
flex-basis: 100%;
|
||||
text-align: center;
|
||||
font-size: 9.5px;
|
||||
font-weight: 700;
|
||||
letter-spacing: 0.04em;
|
||||
text-transform: uppercase;
|
||||
color: var(--color-ink-faint);
|
||||
}
|
||||
.ai-local-profile-options {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(3, minmax(0, 1fr));
|
||||
|
||||
@@ -141,9 +141,16 @@
|
||||
|
||||
<form class="ai-settings-form" onsubmit={(e) => { e.preventDefault(); void handleSave(); }}>
|
||||
<div class="ai-provider-options" role="radiogroup" aria-label="AI provider">
|
||||
<button type="button" class="ai-provider-option" class:active={provider === "local"} onclick={() => { provider = "local"; }}>
|
||||
<button
|
||||
type="button"
|
||||
class="ai-provider-option ai-provider-option-local"
|
||||
class:active={provider === "local"}
|
||||
disabled
|
||||
title="Local AI is still in development and not yet available"
|
||||
>
|
||||
<Cpu size={16} aria-hidden="true" />
|
||||
Local AI
|
||||
<span class="ai-provider-badge">In development</span>
|
||||
</button>
|
||||
<button type="button" class="ai-provider-option" class:active={provider === "openai"} onclick={() => { provider = "openai"; }}>
|
||||
<Bot size={16} aria-hidden="true" />
|
||||
|
||||
@@ -113,6 +113,16 @@
|
||||
return file.old_path ? `${file.old_path} -> ${file.path}` : file.path;
|
||||
}
|
||||
|
||||
function baseName(path: string): string {
|
||||
return path.split(/[\\/]/).filter(Boolean).pop() ?? path;
|
||||
}
|
||||
|
||||
function commitFileName(file: GitCommitFile): string {
|
||||
return file.old_path
|
||||
? `${baseName(file.old_path)} -> ${baseName(file.path)}`
|
||||
: baseName(file.path);
|
||||
}
|
||||
|
||||
function formatCommitDate(value: string): string {
|
||||
const date = new Date(value);
|
||||
if (Number.isNaN(date.getTime())) return value;
|
||||
@@ -208,10 +218,10 @@
|
||||
type="button"
|
||||
onclick={() => onPreviewCommitFile(item, file)}
|
||||
disabled={isBusy}
|
||||
title="Show differences before restoring"
|
||||
title={`Show differences before restoring - ${displayCommitFile(file)}`}
|
||||
>
|
||||
<span class={`status-badge ${file.status}`}>{statusLabel(file.status)}</span>
|
||||
<strong>{displayCommitFile(file)}</strong>
|
||||
<strong>{commitFileName(file)}</strong>
|
||||
</button>
|
||||
{/each}
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user