diff --git a/CHANGELOG.md b/CHANGELOG.md index c05545b1d9..3e701fcde0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,11 +1,19 @@ # Changelog +## [3.39.0] +- Add Explain Changes feature +- Add microwave Stealth model +- Add Tabbed Model Picker with Recommended and Free tabs +- Add support to View remote rules and workflows in the editor +- Enable NTC (Native Tool Calling) by default +- Bug fixes and improvements for LiteLLM provider + ## [3.38.3] - Task export feature now opens the task directory, allowing easy access to the full task files -- Added Grok 4.1 and Grok Code to XAI provider +- Add Grok 4.1 and Grok Code to XAI provider - Enabled native tool calling for Baseten and Kimi K2 models -- Added thinking level to Gemini 3.0 Pro preview +- Add thinking level to Gemini 3.0 Pro preview - Expanded Hooks functionality - Removed Task Timeline from Task Header - Bug fix for slash commands diff --git a/package-lock.json b/package-lock.json index f2786152d7..ee59689191 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "claude-dev", - "version": "3.38.3", + "version": "3.39.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "claude-dev", - "version": "3.38.3", + "version": "3.39.0", "license": "Apache-2.0", "dependencies": { "@anthropic-ai/sdk": "^0.37.0", diff --git a/package.json b/package.json index a6d2d7b3a4..12c281a4f5 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "claude-dev", "displayName": "Cline", "description": "Autonomous coding agent right in your IDE, capable of creating/editing files, running commands, using the browser, and more with your permission every step of the way.", - "version": "3.38.3", + "version": "3.39.0", "icon": "assets/icons/icon.png", "engines": { "vscode": "^1.84.0" diff --git a/webview-ui/src/components/chat/Announcement.tsx b/webview-ui/src/components/chat/Announcement.tsx index 6c99847afa..960cf254a6 100644 --- a/webview-ui/src/components/chat/Announcement.tsx +++ b/webview-ui/src/components/chat/Announcement.tsx @@ -1,11 +1,15 @@ -import { VSCodeLink } from "@vscode/webview-ui-toolkit/react" +import { EmptyRequest } from "@shared/proto/cline/common" +import { VSCodeButton, VSCodeLink } from "@vscode/webview-ui-toolkit/react" import { XIcon } from "lucide-react" -import { CSSProperties, memo } from "react" +import { CSSProperties, memo, useState } from "react" import { useMount } from "react-use" import { Button } from "@/components/ui/button" import { PLATFORM_CONFIG, PlatformType } from "@/config/platform.config" +import { useClineAuth } from "@/context/ClineAuthContext" import { useExtensionState } from "@/context/ExtensionStateContext" +import { AccountServiceClient } from "@/services/grpc-client" import { getAsVar, VSC_DESCRIPTION_FOREGROUND, VSC_INACTIVE_SELECTION_BACKGROUND } from "@/utils/vscStyles" +import { useApiConfigurationHandlers } from "../settings/utils/useApiConfigurationHandlers" interface AnnouncementProps { version: string @@ -20,7 +24,7 @@ const containerStyle: CSSProperties = { position: "relative", flexShrink: 0, } -const h4TitleStyle: CSSProperties = { margin: "0 0 8px", fontWeight: "bold" } +const h2TitleStyle: CSSProperties = { margin: "0 0 8px", fontWeight: "bold" } const ulStyle: CSSProperties = { margin: "0 0 8px", paddingLeft: "12px", listStyleType: "disc" } const _accountIconStyle: CSSProperties = { fontSize: 11 } const hrStyle: CSSProperties = { @@ -39,10 +43,39 @@ Patch releases (3.19.1 → 3.19.2) will not trigger new announcements. */ const Announcement = ({ version, hideAnnouncement }: AnnouncementProps) => { const minorVersion = version.split(".").slice(0, 2).join(".") // 2.0.0 -> 2.0 - const { refreshOpenRouterModels } = useExtensionState() + const { clineUser } = useClineAuth() + const { openRouterModels, setShowChatModelSelector, refreshOpenRouterModels } = useExtensionState() + const user = clineUser || undefined + const { handleFieldsChange } = useApiConfigurationHandlers() + + const [didClickMicrowaveButton, setDidClickMicrowaveButton] = useState(false) // Need to get latest model list in case user hits shortcut button to set model useMount(refreshOpenRouterModels) + const setMicrowave = () => { + const modelId = "stealth/microwave" + // set both plan and act modes to use code-supernova-1-million + handleFieldsChange({ + planModeOpenRouterModelId: modelId, + actModeOpenRouterModelId: modelId, + planModeOpenRouterModelInfo: openRouterModels[modelId], + actModeOpenRouterModelInfo: openRouterModels[modelId], + planModeApiProvider: "cline", + actModeApiProvider: "cline", + }) + + setTimeout(() => { + setDidClickMicrowaveButton(true) + setShowChatModelSelector(true) + }, 10) + } + + const handleShowAccount = () => { + AccountServiceClient.accountLoginClicked(EmptyRequest.create()).catch((err) => + console.error("Failed to get login URL:", err), + ) + } + const isVscode = PLATFORM_CONFIG.type === PlatformType.VSCODE return ( @@ -55,9 +88,9 @@ const Announcement = ({ version, hideAnnouncement }: AnnouncementProps) => { variant="icon"> -

+

🎉{" "}New in v{version} -

+ - {isVscode && (

- See a demo: INSERT_LINK + See a{" "} + + demo of "Explain Changes" +

)}
diff --git a/webview-ui/src/components/settings/OpenRouterModelPicker.tsx b/webview-ui/src/components/settings/OpenRouterModelPicker.tsx index e6804a1335..b5aaa7b418 100644 --- a/webview-ui/src/components/settings/OpenRouterModelPicker.tsx +++ b/webview-ui/src/components/settings/OpenRouterModelPicker.tsx @@ -11,7 +11,6 @@ import { useExtensionState } from "@/context/ExtensionStateContext" import { StateServiceClient } from "@/services/grpc-client" import { highlight } from "../history/HistoryView" import { ContextWindowSwitcher } from "./common/ContextWindowSwitcher" -import { ModelInfoView } from "./common/ModelInfoView" import { DropdownContainer } from "./common/ModelSelector" import FeaturedModelCard from "./FeaturedModelCard" import ThinkingBudgetSlider from "./ThinkingBudgetSlider" @@ -72,18 +71,17 @@ const freeModels = [ { id: "x-ai/grok-code-fast-1", description: "Fast inference with strong coding performance", - label: "FAST", + label: "FREE", }, { id: "minimax/minimax-m2", description: "Open source model with solid performance", - label: "OSS", + label: "FREE", }, { id: "stealth/microwave", description: "A stealth model for agentic coding tasks", - label: "Free", - isFree: true, + label: "FREE", }, ] @@ -96,7 +94,10 @@ const OpenRouterModelPicker: React.FC = ({ isPopup, const [searchTerm, setSearchTerm] = useState(modeFields.openRouterModelId || openRouterDefaultModelId) const [isDropdownVisible, setIsDropdownVisible] = useState(false) const [selectedIndex, setSelectedIndex] = useState(-1) - const [activeTab, setActiveTab] = useState<"recommended" | "free">("recommended") + const [activeTab, setActiveTab] = useState<"recommended" | "free">(() => { + const currentModelId = modeFields.openRouterModelId || openRouterDefaultModelId + return freeModels.some((m) => m.id === currentModelId) ? "free" : "recommended" + }) const dropdownRef = useRef(null) const itemRefs = useRef<(HTMLDivElement | null)[]>([]) const dropdownListRef = useRef(null) @@ -298,7 +299,7 @@ const OpenRouterModelPicker: React.FC = ({ isPopup, currentMode === "plan" ? apiConfiguration?.geminiPlanModeThinkingLevel : apiConfiguration?.geminiActModeThinkingLevel return ( -
+