refactor: explicit Opencode Executor (#188)

* use display and fromStr implementations in ExecutorConfig

(cherry picked from commit 115a6a447d9195d28b9c29004fa6301fb60b1b89)
(cherry picked from commit 25d589d54a3fc89f8868f5c409f25bdb162f1326)

* rename opencode to charm/opencode

(cherry picked from commit 41fe88a46cc6c7a1cbf5ecbc3599639351c415c8)

* rename opencode on the frontend

* resuse executor types on the frontend

* put back missing types
This commit is contained in:
Gabriel Gordon-Hall
2025-07-15 12:59:28 +01:00
committed by GitHub
parent d994622a99
commit 459f93b751
9 changed files with 135 additions and 370 deletions

View File

@@ -81,9 +81,7 @@ export function OnboardingDialog({ open, onComplete }: OnboardingDialogProps) {
<Label htmlFor="executor">Default Executor</Label>
<Select
value={executor.type}
onValueChange={(value: 'echo' | 'claude' | 'amp') =>
setExecutor({ type: value })
}
onValueChange={(value) => setExecutor({ type: value as any })}
>
<SelectTrigger id="executor">
<SelectValue placeholder="Select your preferred coding agent" />
@@ -100,6 +98,8 @@ export function OnboardingDialog({ open, onComplete }: OnboardingDialogProps) {
{executor.type === 'claude' && 'Claude Code from Anthropic'}
{executor.type === 'amp' && 'From Sourcegraph'}
{executor.type === 'gemini' && 'Google Gemini from Bloop'}
{executor.type === 'charmopencode' &&
'Charm/Opencode AI assistant'}
{executor.type === 'echo' &&
'This is just for debugging vibe-kanban itself'}
</p>

View File

@@ -4,6 +4,7 @@ import { Button } from '@/components/ui/button';
import { useConfig } from '@/components/config-provider';
import { attemptsApi, projectsApi } from '@/lib/api';
import type { GitBranch, TaskAttempt } from 'shared/types';
import { EXECUTOR_TYPES, EXECUTOR_LABELS } from 'shared/types';
import {
TaskAttemptDataContext,
TaskAttemptLoadingContext,
@@ -16,13 +17,10 @@ import CreatePRDialog from '@/components/tasks/Toolbar/CreatePRDialog.tsx';
import CreateAttempt from '@/components/tasks/Toolbar/CreateAttempt.tsx';
import CurrentAttempt from '@/components/tasks/Toolbar/CurrentAttempt.tsx';
const availableExecutors = [
{ id: 'echo', name: 'Echo' },
{ id: 'claude', name: 'Claude' },
{ id: 'amp', name: 'Amp' },
{ id: 'gemini', name: 'Gemini' },
{ id: 'opencode', name: 'OpenCode' },
];
const availableExecutors = EXECUTOR_TYPES.map((id) => ({
id,
name: EXECUTOR_LABELS[id] || id,
}));
function TaskDetailsToolbar() {
const { task, projectId } = useContext(TaskDetailsContext);