feat(electrobun): project wizard phases 1-5 (WIP)

- sanitize.ts: input sanitization (trim, control chars, path traversal)
- provider-scanner.ts: detect Claude/Codex/Ollama/Gemini availability
- model-fetcher.ts: live model lists from 4 provider APIs
- ModelConfigPanel.svelte: per-provider config (thinking, effort, sandbox, temperature)
- WizardStep1-3.svelte: split wizard into composable steps
- CustomDropdown/Checkbox/Radio: themed UI components
- provider-handlers.ts: provider.scan + provider.models RPC
- Wire providers into wizard step 3 (live detection + model lists)
- Replace native selects in 5 settings panels with CustomDropdown
This commit is contained in:
Hibryda 2026-03-23 13:05:07 +01:00
parent b7fc3a0f9b
commit d4014a193d
25 changed files with 2112 additions and 759 deletions

View file

@ -78,9 +78,9 @@
function handleWizardCreated(result: {
id: string; name: string; cwd: string; provider?: string; model?: string;
systemPrompt?: string; autoStart?: boolean; groupId?: string;
useWorktrees?: boolean; shell?: string; icon?: string;
useWorktrees?: boolean; shell?: string; icon?: string; color?: string;
}) {
const accent = ACCENTS[PROJECTS.length % ACCENTS.length];
const accent = result.color || ACCENTS[PROJECTS.length % ACCENTS.length];
const project: Project = {
id: result.id,
name: result.name,
@ -512,6 +512,7 @@
onCreated={handleWizardCreated}
groupId={activeGroupId}
groups={groups.map(g => ({ id: g.id, name: g.name }))}
existingNames={PROJECTS.map(p => p.name)}
/>
</div>