diff --git a/src/api/providers/utils/response-render-config.ts b/src/api/providers/utils/response-render-config.ts index 6f4a3f6165..49768c7a2f 100644 --- a/src/api/providers/utils/response-render-config.ts +++ b/src/api/providers/utils/response-render-config.ts @@ -18,7 +18,7 @@ export const renderModes = { export function getApiResponseRenderMode() { if (isJetbrainsPlatform()) { - return renderModes.fast + return renderModes.slow } const apiResponseRenderMode = vscode.workspace .getConfiguration("zgsm") diff --git a/src/core/task/__tests__/Task.sticky-profile-race.spec.ts b/src/core/task/__tests__/Task.sticky-profile-race.spec.ts index e78301541d..f5fcf14149 100644 --- a/src/core/task/__tests__/Task.sticky-profile-race.spec.ts +++ b/src/core/task/__tests__/Task.sticky-profile-race.spec.ts @@ -43,6 +43,14 @@ vi.mock("vscode", () => { createTextEditorDecorationType: vi.fn().mockReturnValue({ dispose: vi.fn(), }), + createOutputChannel: vi.fn().mockReturnValue({ + appendLine: vi.fn(), + append: vi.fn(), + clear: vi.fn(), + show: vi.fn(), + hide: vi.fn(), + dispose: vi.fn(), + }), visibleTextEditors: [mockTextEditor], tabGroups: { all: [mockTabGroup], @@ -71,6 +79,11 @@ vi.mock("vscode", () => { }, onDidSaveTextDocument: vi.fn(() => mockDisposable), }, + extensions: { + getExtension: vi.fn().mockReturnValue({ + extensionUri: { fsPath: "/mock/extension/path", path: "/mock/extension/path" }, + }), + }, env: { uriScheme: "vscode", language: "en", diff --git a/src/core/webview/ClineProvider.ts b/src/core/webview/ClineProvider.ts index 89733782e0..c505bdf486 100644 --- a/src/core/webview/ClineProvider.ts +++ b/src/core/webview/ClineProvider.ts @@ -173,7 +173,7 @@ export class ClineProvider public isViewLaunched = false public settingsImportedAt?: number - public readonly latestAnnouncementId = "dec-2025-v3.38.0-skills-native-tool-calling" // v3.38.0 Skills & Native Tool Calling Required + public readonly latestAnnouncementId = "jan-2026-v3.39.0-sticky-profiles-image-mentions-brrr" // v3.39.0 Sticky Profiles, Image @Mentions, BRRR Mode public readonly providerSettingsManager: ProviderSettingsManager public readonly customModesManager: CustomModesManager diff --git a/src/core/webview/__tests__/ClineProvider.sticky-profile.spec.ts b/src/core/webview/__tests__/ClineProvider.sticky-profile.spec.ts index 3df4408b71..5688977ff8 100644 --- a/src/core/webview/__tests__/ClineProvider.sticky-profile.spec.ts +++ b/src/core/webview/__tests__/ClineProvider.sticky-profile.spec.ts @@ -26,6 +26,14 @@ vi.mock("vscode", () => ({ showWarningMessage: vi.fn(), showErrorMessage: vi.fn(), onDidChangeActiveTextEditor: vi.fn(() => ({ dispose: vi.fn() })), + createOutputChannel: vi.fn().mockReturnValue({ + appendLine: vi.fn(), + append: vi.fn(), + clear: vi.fn(), + show: vi.fn(), + hide: vi.fn(), + dispose: vi.fn(), + }), }, workspace: { getConfiguration: vi.fn().mockReturnValue({ @@ -40,6 +48,11 @@ vi.mock("vscode", () => ({ onDidOpenTextDocument: vi.fn(() => ({ dispose: vi.fn() })), onDidCloseTextDocument: vi.fn(() => ({ dispose: vi.fn() })), }, + extensions: { + getExtension: vi.fn().mockReturnValue({ + extensionUri: { fsPath: "/mock/extension/path", path: "/mock/extension/path" }, + }), + }, env: { uriScheme: "vscode", language: "en", diff --git a/src/core/webview/__tests__/webviewMessageHandler.imageMentions.integration.spec.ts b/src/core/webview/__tests__/webviewMessageHandler.imageMentions.integration.spec.ts index 277e56626a..90535b136c 100644 --- a/src/core/webview/__tests__/webviewMessageHandler.imageMentions.integration.spec.ts +++ b/src/core/webview/__tests__/webviewMessageHandler.imageMentions.integration.spec.ts @@ -12,10 +12,30 @@ vi.mock("vscode", () => ({ window: { showInformationMessage: vi.fn(), showErrorMessage: vi.fn(), + createOutputChannel: vi.fn().mockReturnValue({ + appendLine: vi.fn(), + append: vi.fn(), + clear: vi.fn(), + show: vi.fn(), + hide: vi.fn(), + dispose: vi.fn(), + }), + createTextEditorDecorationType: vi.fn().mockReturnValue({ + dispose: vi.fn(), + }), }, workspace: { workspaceFolders: [{ uri: { fsPath: "/mock/workspace" } }], }, + extensions: { + getExtension: vi.fn().mockReturnValue({ + extensionUri: { fsPath: "/mock/extension/path", path: "/mock/extension/path" }, + }), + }, + env: { + uriScheme: "vscode", + language: "en", + }, })) // Mock imageHelpers - use actual implementations for functions that need real file access @@ -89,9 +109,13 @@ describe("webviewMessageHandler - image mentions (integration)", () => { images: [], } as any) - expect(handleWebviewAskResponse).toHaveBeenCalledWith("messageResponse", "Please look at @/cat.jpg", [ - `data:image/jpeg;base64,${imgBytes.toString("base64")}`, - ]) + expect(handleWebviewAskResponse).toHaveBeenCalledWith( + "messageResponse", + "Please look at @/cat.jpg", + [`data:image/jpeg;base64,${imgBytes.toString("base64")}`], + "system", + false, + ) } finally { await fs.rm(tmpRoot, { recursive: true, force: true }) } diff --git a/src/core/webview/__tests__/webviewMessageHandler.searchFiles.spec.ts b/src/core/webview/__tests__/webviewMessageHandler.searchFiles.spec.ts index 82f4d765ab..f857c8756e 100644 --- a/src/core/webview/__tests__/webviewMessageHandler.searchFiles.spec.ts +++ b/src/core/webview/__tests__/webviewMessageHandler.searchFiles.spec.ts @@ -17,10 +17,30 @@ vi.mock("vscode", () => ({ window: { showInformationMessage: vi.fn(), showErrorMessage: vi.fn(), + createOutputChannel: vi.fn().mockReturnValue({ + appendLine: vi.fn(), + append: vi.fn(), + clear: vi.fn(), + show: vi.fn(), + hide: vi.fn(), + dispose: vi.fn(), + }), + createTextEditorDecorationType: vi.fn().mockReturnValue({ + dispose: vi.fn(), + }), }, workspace: { workspaceFolders: [{ uri: { fsPath: "/mock/workspace" } }], }, + extensions: { + getExtension: vi.fn().mockReturnValue({ + extensionUri: { fsPath: "/mock/extension/path", path: "/mock/extension/path" }, + }), + }, + env: { + uriScheme: "vscode", + language: "en", + }, })) describe("webviewMessageHandler - searchFiles with RooIgnore filtering", () => { diff --git a/webview-ui/src/components/chat/Announcement.tsx b/webview-ui/src/components/chat/Announcement.tsx index 7488328614..490d0f2d68 100644 --- a/webview-ui/src/components/chat/Announcement.tsx +++ b/webview-ui/src/components/chat/Announcement.tsx @@ -44,24 +44,9 @@ const Announcement = ({ hideAnnouncement }: AnnouncementProps) => {
{t("chat:announcement.release.heading")}