feat(frontend): integrate opencode plugin modal into preflight UI

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
xintaofei
2026-04-12 10:48:17 +08:00
parent ebf0281251
commit 40e1483ab0

View File

@@ -85,6 +85,7 @@ import type {
ModelProviderInfo, ModelProviderInfo,
PreflightResult, PreflightResult,
} from "@/lib/types" } from "@/lib/types"
import { OpencodePluginsModal } from "./opencode-plugins-modal"
interface AgentCheckState { interface AgentCheckState {
result?: PreflightResult result?: PreflightResult
@@ -156,6 +157,7 @@ type UiFixAction =
| "upgrade_npx" | "upgrade_npx"
| "uninstall_binary" | "uninstall_binary"
| "uninstall_npx" | "uninstall_npx"
| "install_opencode_plugins"
payload: string payload: string
} }
@@ -2584,6 +2586,10 @@ export function AcpAgentSettings() {
const [modelProviders, setModelProviders] = useState<ModelProviderInfo[]>([]) const [modelProviders, setModelProviders] = useState<ModelProviderInfo[]>([])
const [uninstallConfirmAgent, setUninstallConfirmAgent] = const [uninstallConfirmAgent, setUninstallConfirmAgent] =
useState<AcpAgentInfo | null>(null) useState<AcpAgentInfo | null>(null)
const [pluginModalOpen, setPluginModalOpen] = useState(false)
const [pluginModalAgent, setPluginModalAgent] = useState<AgentType | null>(
null
)
const [expandedChecks, setExpandedChecks] = useState<Record<string, boolean>>( const [expandedChecks, setExpandedChecks] = useState<Record<string, boolean>>(
{} {}
) )
@@ -3137,6 +3143,11 @@ export function AcpAgentSettings() {
await runBinaryAction(agent, "upgrade", "redownload_binary") await runBinaryAction(agent, "upgrade", "redownload_binary")
return return
} }
if (action.kind === "install_opencode_plugins") {
setPluginModalAgent(agent.agent_type)
setPluginModalOpen(true)
return
}
await runPreflight(agent.agent_type) await runPreflight(agent.agent_type)
} }
@@ -3238,6 +3249,7 @@ export function AcpAgentSettings() {
"uninstall_binary", "uninstall_binary",
"uninstall_npx", "uninstall_npx",
"redownload_binary", "redownload_binary",
"install_opencode_plugins",
].includes(fix.kind) ].includes(fix.kind)
} }
onClick={() => { onClick={() => {
@@ -3258,6 +3270,8 @@ export function AcpAgentSettings() {
) : fix.kind === "uninstall_binary" || ) : fix.kind === "uninstall_binary" ||
fix.kind === "uninstall_npx" ? ( fix.kind === "uninstall_npx" ? (
<Trash2 className="h-3 w-3" /> <Trash2 className="h-3 w-3" />
) : fix.kind === "install_opencode_plugins" ? (
<Download className="h-3 w-3" />
) : null} ) : null}
{fix.label} {fix.label}
</Button> </Button>
@@ -7164,6 +7178,17 @@ supports_websockets = true`}
</AlertDialogFooter> </AlertDialogFooter>
</AlertDialogContent> </AlertDialogContent>
</AlertDialog> </AlertDialog>
<OpencodePluginsModal
open={pluginModalOpen}
onOpenChange={setPluginModalOpen}
onCompleted={() => {
if (pluginModalAgent) {
runPreflight(pluginModalAgent)
}
setPluginModalAgent(null)
}}
/>
</div> </div>
) )
} }