Fix Cowork model selection and Windows CLI packaging (#1129)
Cherry-picked from upstream PR #1129 + local improvements: - dedupe inline remove-model handler -> use handleRemoveModel - add .next-cli-build/ and cli/.build-home/ to .gitignore
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
"use client";
|
||||
|
||||
import { useState, useEffect } from "react";
|
||||
import { Card, Button, ManualConfigModal, ComboFormModal, McpMarketplaceModal } from "@/shared/components";
|
||||
import { Card, Button, ManualConfigModal, ComboFormModal, McpMarketplaceModal, ModelSelectModal } from "@/shared/components";
|
||||
import Image from "next/image";
|
||||
import BaseUrlSelect from "./BaseUrlSelect";
|
||||
import ApiKeySelect from "./ApiKeySelect";
|
||||
@@ -43,7 +43,9 @@ export default function CoworkToolCard({
|
||||
const [plugins, setPlugins] = useState([]);
|
||||
const [localPlugins, setLocalPlugins] = useState([]);
|
||||
const [customPlugins, setCustomPlugins] = useState([]);
|
||||
const [modelAliases, setModelAliases] = useState({});
|
||||
const [comboModalOpen, setComboModalOpen] = useState(false);
|
||||
const [modelSelectOpen, setModelSelectOpen] = useState(false);
|
||||
const [marketplaceOpen, setMarketplaceOpen] = useState(false);
|
||||
const [addMcpOpen, setAddMcpOpen] = useState(false);
|
||||
const [addMcpForm, setAddMcpForm] = useState({ type: "url", name: "", url: "", command: "", args: "" });
|
||||
@@ -62,6 +64,16 @@ export default function CoworkToolCard({
|
||||
if (isExpanded && !status) checkStatus();
|
||||
}, [isExpanded]);
|
||||
|
||||
useEffect(() => {
|
||||
if (!isExpanded) return;
|
||||
fetch("/api/models/alias")
|
||||
.then((r) => r.ok ? r.json() : null)
|
||||
.then((data) => {
|
||||
if (data) setModelAliases(data.aliases || {});
|
||||
})
|
||||
.catch(() => {});
|
||||
}, [isExpanded]);
|
||||
|
||||
useEffect(() => {
|
||||
if (status?.cowork?.models?.length) {
|
||||
setSelectedModels(status.cowork.models);
|
||||
@@ -170,6 +182,17 @@ export default function CoworkToolCard({
|
||||
}
|
||||
};
|
||||
|
||||
const handleAddModel = (model) => {
|
||||
const value = model?.value || model?.name || model;
|
||||
if (!value || selectedModels.includes(value)) return;
|
||||
setSelectedModels((prev) => [...prev, value]);
|
||||
};
|
||||
|
||||
const handleRemoveModel = (model) => {
|
||||
const value = model?.value || model?.name || model;
|
||||
setSelectedModels((prev) => prev.filter((item) => item !== value));
|
||||
};
|
||||
|
||||
const handleReset = async () => {
|
||||
setRestoring(true);
|
||||
setMessage(null);
|
||||
@@ -313,13 +336,20 @@ export default function CoworkToolCard({
|
||||
selectedModels.map((m) => (
|
||||
<span key={m} className="inline-flex items-center gap-1 px-2 py-0.5 rounded text-xs bg-black/5 dark:bg-white/5 text-text-muted border border-transparent hover:border-border">
|
||||
{m}
|
||||
<button onClick={() => setSelectedModels((prev) => prev.filter((x) => x !== m))} className="ml-0.5 hover:text-red-500">
|
||||
<button onClick={() => handleRemoveModel(m)} className="ml-0.5 hover:text-red-500">
|
||||
<span className="material-symbols-outlined text-[12px]">close</span>
|
||||
</button>
|
||||
</span>
|
||||
))
|
||||
)}
|
||||
</div>
|
||||
<button
|
||||
onClick={() => setModelSelectOpen(true)}
|
||||
disabled={!hasActiveProviders}
|
||||
className={`shrink-0 px-2 py-1.5 rounded border text-xs whitespace-nowrap transition-colors ${hasActiveProviders ? "bg-surface border-border text-text-main hover:border-primary cursor-pointer" : "opacity-50 cursor-not-allowed border-border"}`}
|
||||
>
|
||||
Select Model
|
||||
</button>
|
||||
<button onClick={() => setComboModalOpen(true)} disabled={!hasActiveProviders} className={`shrink-0 px-2 py-1.5 rounded border text-xs whitespace-nowrap transition-colors ${hasActiveProviders ? "bg-primary/10 border-primary/40 text-primary hover:bg-primary/20 cursor-pointer" : "opacity-50 cursor-not-allowed border-border"}`}>+ Combo</button>
|
||||
</div>
|
||||
</div>
|
||||
@@ -501,6 +531,18 @@ export default function CoworkToolCard({
|
||||
title="Create Cowork Combo"
|
||||
/>
|
||||
|
||||
<ModelSelectModal
|
||||
isOpen={modelSelectOpen}
|
||||
onClose={() => setModelSelectOpen(false)}
|
||||
onSelect={handleAddModel}
|
||||
onDeselect={handleRemoveModel}
|
||||
activeProviders={activeProviders}
|
||||
modelAliases={modelAliases}
|
||||
title="Select Cowork Model"
|
||||
addedModelValues={selectedModels}
|
||||
closeOnSelect={false}
|
||||
/>
|
||||
|
||||
<McpMarketplaceModal
|
||||
isOpen={marketplaceOpen}
|
||||
onClose={() => setMarketplaceOpen(false)}
|
||||
|
||||
Reference in New Issue
Block a user