fix(acp): pin @latest for all plugins and enable button when only floating versions exist

- install_missing_plugins now pins ALL @latest specs (not just newly installed)
- When nothing is missing but @latest exists, the pin-only path runs
- Modal button switches to 'Pin @latest Versions' when no missing plugins
- Added pinVersions i18n key for 10 languages
This commit is contained in:
xintaofei
2026-04-12 11:56:55 +08:00
parent 4397b0eae7
commit 023e4c5514
12 changed files with 60 additions and 9 deletions

View File

@@ -117,6 +117,10 @@ export function OpencodePluginsModal({
const missingCount =
summary?.plugins.filter((p) => p.status === "missing").length ?? 0
const floatingCount =
summary?.plugins.filter((p) => p.declared_spec.endsWith("@latest"))
.length ?? 0
const hasActionablePlugins = missingCount > 0 || floatingCount > 0
return (
<Dialog open={open} onOpenChange={handleClose}>
@@ -209,7 +213,7 @@ export function OpencodePluginsModal({
<div className="flex items-center justify-between">
<Button
size="sm"
disabled={isOperating || missingCount === 0}
disabled={isOperating || !hasActionablePlugins}
onClick={handleInstallAll}
>
{stream.status === "running" ? (
@@ -217,7 +221,9 @@ export function OpencodePluginsModal({
) : (
<Download className="h-3.5 w-3.5 mr-1.5" />
)}
{t("opencodePlugins.installAll")}
{missingCount > 0
? t("opencodePlugins.installAll")
: t("opencodePlugins.pinVersions")}
</Button>
<Button
size="sm"