From 37e10e12982707031b93b2279ec9f52d4381abf8 Mon Sep 17 00:00:00 2001 From: code-crusher Date: Mon, 12 Jan 2026 11:04:04 +0530 Subject: [PATCH 1/3] Update file edit review and webview message handling --- src/core/webview/ClineProvider.ts | 1 - src/core/webview/webviewMessageHandler.ts | 89 ++++++++++++++++++- .../editor/FileEditReviewController.ts | 44 ++++++++- src/package.json | 2 +- 4 files changed, 130 insertions(+), 6 deletions(-) diff --git a/src/core/webview/ClineProvider.ts b/src/core/webview/ClineProvider.ts index b40cb348d..33a7bf1de 100644 --- a/src/core/webview/ClineProvider.ts +++ b/src/core/webview/ClineProvider.ts @@ -3027,7 +3027,6 @@ ${prompt} if (this._kiloConfig === null) { const { repositoryUrl } = await this.getGitProperties() this._kiloConfig = await getKilocodeConfig(this.cwd, repositoryUrl) - console.log("getKiloConfig", this._kiloConfig) } return this._kiloConfig } diff --git a/src/core/webview/webviewMessageHandler.ts b/src/core/webview/webviewMessageHandler.ts index 5d15d7a8a..5f879c325 100644 --- a/src/core/webview/webviewMessageHandler.ts +++ b/src/core/webview/webviewMessageHandler.ts @@ -1453,9 +1453,94 @@ ${comment.suggestion} await seeNewChanges(task, (message.payload as SeeNewChangesPayload).commitRange) } break - case "fileEditReviewAcceptAll": - await vscode.commands.executeCommand("axon-code.fileEdit.acceptAll") + case "fileEditReviewAcceptAll": { + const currentTask = provider.getCurrentTask() + if (!currentTask) { + break + } + + // Execute the accept all command and get line counters + const lineCounters = await vscode.commands.executeCommand< + { linesAdded: number; linesUpdated: number; linesDeleted: number } | undefined + >("axon-code.fileEdit.acceptAll") + + // Send line counters to server if we have data + if ( + lineCounters && + (lineCounters.linesAdded > 0 || lineCounters.linesUpdated > 0 || lineCounters.linesDeleted > 0) + ) { + try { + // Get state to retrieve kilocodeToken + const state = await provider.getState() + const kilocodeToken = state.apiConfiguration?.kilocodeToken + + if (!kilocodeToken) { + provider.log("KiloCode token not found, skipping line counter update") + break + } + + // Get git repository info for x-axon-repo header + const { getGitRepositoryInfo } = await import("../../utils/git") + const gitInfo = await getGitRepositoryInfo(provider.cwd) + const repo = gitInfo.repositoryUrl || path.basename(provider.cwd) + + // Get the primary language from the first edited file + const pendingEdits = currentTask.fileEditReviewController.getPendingEdits() + let language = "ts" // default + if (pendingEdits.size > 0) { + const firstFile = Array.from(pendingEdits.keys())[0] + const ext = path.extname(firstFile).toLowerCase() + const languageMap: Record = { + ".ts": "ts", + ".tsx": "tsx", + ".js": "js", + ".jsx": "jsx", + ".py": "py", + ".java": "java", + ".go": "go", + ".rs": "rs", + ".cpp": "cpp", + ".c": "c", + ".cs": "cs", + ".php": "php", + ".rb": "rb", + ".swift": "swift", + ".kt": "kt", + ".dart": "dart", + ".vue": "vue", + ".svelte": "svelte", + } + language = languageMap[ext] || "ts" + } + + // Send POST request to update line counters + const url = `https://api.matterai.so/axoncode/meta/${currentTask.taskId}/lines` + const response = await fetch(url, { + method: "POST", + headers: { + "Content-Type": "application/json", + Authorization: `Bearer ${kilocodeToken}`, + "X-AXON-REPO": repo, + }, + body: JSON.stringify({ + language, + linesAdded: lineCounters.linesAdded, + linesUpdated: lineCounters.linesUpdated, + linesDeleted: lineCounters.linesDeleted, + }), + }) + + if (!response.ok) { + provider.log(`Failed to update line counters: ${response.statusText}`) + } + } catch (error) { + provider.log( + `Error updating line counters: ${error instanceof Error ? error.message : String(error)}`, + ) + } + } break + } case "fileEditReviewRejectAll": await vscode.commands.executeCommand("axon-code.fileEdit.rejectAll") break diff --git a/src/integrations/editor/FileEditReviewController.ts b/src/integrations/editor/FileEditReviewController.ts index ac18bb1f1..69c4c4955 100644 --- a/src/integrations/editor/FileEditReviewController.ts +++ b/src/integrations/editor/FileEditReviewController.ts @@ -272,13 +272,53 @@ export class FileEditReviewController implements vscode.Disposable { } } - async handleAcceptAll() { - if (this.pendingEdits.size === 0) return + async handleAcceptAll(): Promise<{ linesAdded: number; linesUpdated: number; linesDeleted: number } | undefined> { + if (this.pendingEdits.size === 0) return undefined + + // Calculate line counters before clearing + let linesAdded = 0 + let linesUpdated = 0 + let linesDeleted = 0 + + for (const edit of this.pendingEdits.values()) { + for (const editEntry of edit.edits) { + const beforeLines = editEntry.originalContent ? editEntry.originalContent.split("\n") : [] + const afterLines = editEntry.newContent ? editEntry.newContent.split("\n") : [] + + if (beforeLines.length === 0) { + // New content added + linesAdded += afterLines.length + } else if (afterLines.length === 0) { + // Content deleted + linesDeleted += beforeLines.length + } else { + // Modified content - count changed lines + const commonLength = Math.min(beforeLines.length, afterLines.length) + let changedInCommon = 0 + for (let i = 0; i < commonLength; i++) { + if (beforeLines[i] !== afterLines[i]) { + changedInCommon++ + } + } + linesUpdated += changedInCommon + + // Account for added/deleted lines beyond common length + const diff = afterLines.length - beforeLines.length + if (diff > 0) { + linesAdded += diff + } else if (diff < 0) { + linesDeleted += Math.abs(diff) + } + } + } + } this.pendingEdits.clear() this.reviewQueue = [] this.refreshDecorations() this.codeLensEmitter.fire() + + return { linesAdded, linesUpdated, linesDeleted } } async handleRejectAll() { diff --git a/src/package.json b/src/package.json index ff680407c..b0bd2fd03 100644 --- a/src/package.json +++ b/src/package.json @@ -3,7 +3,7 @@ "displayName": "%extension.displayName%", "description": "%extension.description%", "publisher": "matterai", - "version": "5.0.3", + "version": "5.1.0", "icon": "assets/icons/matterai-ic.png", "galleryBanner": { "color": "#FFFFFF", From 9c81f5fdc65479de4cdd1f2487e3bbee7f88121c Mon Sep 17 00:00:00 2001 From: code-crusher Date: Mon, 12 Jan 2026 12:00:47 +0530 Subject: [PATCH 2/3] chore: release v5.1.0 - line counter tracking and file edit review improvements --- CHANGELOG.md | 19 +++++++ src/core/webview/webviewMessageHandler.ts | 43 ++++++++++++++++ src/shared/WebviewMessage.ts | 1 + webview-ui/src/components/chat/ChatRow.tsx | 7 +-- webview-ui/src/components/chat/ChatView.tsx | 9 +++- .../src/components/chat/ProgressIndicator.tsx | 35 +++++++++++++ .../src/components/chat/QueuedMessages.tsx | 2 +- .../src/components/chat/ReasoningBlock.tsx | 51 ++++++++++++++----- .../chat/kilocode/AcceptRejectButtons.tsx | 20 ++++++++ .../components/kilocode/BottomApiConfig.tsx | 4 +- webview-ui/src/i18n/locales/ar/chat.json | 1 + webview-ui/src/i18n/locales/ca/chat.json | 1 + webview-ui/src/i18n/locales/cs/chat.json | 1 + webview-ui/src/i18n/locales/de/chat.json | 1 + webview-ui/src/i18n/locales/en/chat.json | 5 +- webview-ui/src/i18n/locales/es/chat.json | 1 + webview-ui/src/i18n/locales/fr/chat.json | 1 + webview-ui/src/i18n/locales/hi/chat.json | 1 + webview-ui/src/i18n/locales/id/chat.json | 1 + webview-ui/src/i18n/locales/it/chat.json | 1 + webview-ui/src/i18n/locales/ja/chat.json | 1 + webview-ui/src/i18n/locales/ko/chat.json | 1 + webview-ui/src/i18n/locales/nl/chat.json | 1 + webview-ui/src/i18n/locales/pl/chat.json | 1 + webview-ui/src/i18n/locales/pt-BR/chat.json | 1 + webview-ui/src/i18n/locales/ru/chat.json | 1 + webview-ui/src/i18n/locales/th/chat.json | 1 + webview-ui/src/i18n/locales/tr/chat.json | 1 + webview-ui/src/i18n/locales/uk/chat.json | 1 + webview-ui/src/i18n/locales/vi/chat.json | 1 + webview-ui/src/i18n/locales/zh-CN/chat.json | 1 + webview-ui/src/i18n/locales/zh-TW/chat.json | 1 + 32 files changed, 195 insertions(+), 22 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1460d9304..5fbba5e0a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,24 @@ # Changelog +## [v5.1.0] - 2026-01-12 + +### Added + +- Line counter tracking for file edit reviews (lines added, updated, deleted) +- Server integration to report line change statistics +- Automatic language detection from edited files for analytics + +### Changed + +- Enhanced file edit review accept all functionality with detailed metrics +- Improved webview message handling for file edit operations + +### Fixed + +- Removed debug console.log statement from kilo config loading + +--- + ## [v5.0.3] - 2026-01-11 ### Added diff --git a/src/core/webview/webviewMessageHandler.ts b/src/core/webview/webviewMessageHandler.ts index 5f879c325..1f703eafe 100644 --- a/src/core/webview/webviewMessageHandler.ts +++ b/src/core/webview/webviewMessageHandler.ts @@ -50,6 +50,7 @@ import { checkoutDiffPayloadSchema, checkoutRestorePayloadSchema, } from "../../shared/WebviewMessage" +import type { WebviewMessage as WebviewMessageType } from "../../shared/WebviewMessage" import { checkExistKey } from "../../shared/checkExistApiConfig" import { experimentDefault } from "../../shared/experiments" import { Terminal } from "../../integrations/terminal/Terminal" @@ -976,6 +977,48 @@ export const webviewMessageHandler = async ( } as any) break } + // kilocode_change start: View pending file diffs in VS Code diff view + case "viewPendingFileDiffs" as any: { + const currentTask = provider.getCurrentTask() + + if (!currentTask) { + break + } + + const pendingEdits = currentTask.fileEditReviewController.getPendingEdits() + + if (pendingEdits.size === 0) { + break + } + + // Open each file with pending edits in diff view + for (const [readablePath, edit] of pendingEdits.entries()) { + try { + const fileName = path.basename(edit.absolutePath) + const fileUri = vscode.Uri.file(edit.absolutePath) + + // Create a URI for the original content using the diff view scheme + const originalUri = vscode.Uri.parse(`cline-diff:${fileName}`).with({ + query: Buffer.from(edit.originalContent).toString("base64"), + }) + + // Open diff view between original and current content + await vscode.commands.executeCommand( + "vscode.diff", + originalUri, + fileUri, + `${fileName}: Original ↔ Axon Code's Changes`, + { preserveFocus: true }, + ) + } catch (error) { + provider.log( + `Failed to open diff for ${readablePath}: ${error instanceof Error ? error.message : "Unknown error"}`, + ) + } + } + break + } + // kilocode_change end // kilocode_change start: Get Git changes for AI Code Review (separate from pending file edits) case "getGitChangesForReview": { try { diff --git a/src/shared/WebviewMessage.ts b/src/shared/WebviewMessage.ts index be7d82d40..b81bdd2db 100644 --- a/src/shared/WebviewMessage.ts +++ b/src/shared/WebviewMessage.ts @@ -314,6 +314,7 @@ export interface WebviewMessage { | "commitChanges" | "getPendingFileEdits" | "pendingFileEdits" + | "viewPendingFileDiffs" | "requestCodeReview" | "codeReviewResults" | "applyCodeReviewFix" diff --git a/webview-ui/src/components/chat/ChatRow.tsx b/webview-ui/src/components/chat/ChatRow.tsx index 99df5f783..b06def179 100644 --- a/webview-ui/src/components/chat/ChatRow.tsx +++ b/webview-ui/src/components/chat/ChatRow.tsx @@ -35,7 +35,7 @@ import { CommandExecution } from "./CommandExecution" import { CommandExecutionError } from "./CommandExecutionError" import { FollowUpSuggest } from "./FollowUpSuggest" import { Markdown } from "./Markdown" -import { ProgressIndicator } from "./ProgressIndicator" +import { MatterProgressIndicator, ProgressIndicator } from "./ProgressIndicator" import ReportBugPreview from "./ReportBugPreview" import { ReadOnlyChatText } from "./ReadOnlyChatText" import { PlanFileIndicator } from "./PlanFileIndicator" @@ -329,7 +329,7 @@ export const ChatRowContent = ({ ) : apiRequestFailedMessage ? ( getIconSpan("error", errorColor) ) : ( - + ), apiReqCancelReason !== null && apiReqCancelReason !== undefined ? ( apiReqCancelReason === "user_cancelled" ? ( @@ -1197,7 +1197,8 @@ export const ChatRowContent = ({ content={message.text || ""} ts={message.ts} isStreaming={isStreaming} - isLast={isLast} + _isLast={isLast} + partial={message.partial} metadata={message.metadata as any} /> ) diff --git a/webview-ui/src/components/chat/ChatView.tsx b/webview-ui/src/components/chat/ChatView.tsx index f487bd63b..e69a2eb48 100644 --- a/webview-ui/src/components/chat/ChatView.tsx +++ b/webview-ui/src/components/chat/ChatView.tsx @@ -828,6 +828,8 @@ const ChatViewComponent: React.ForwardRefRenderFunction (
(
) + +export const MatterProgressIndicator = () => { + const [activeIndex, setActiveIndex] = useState(0) + + useEffect(() => { + const interval = setInterval(() => { + setActiveIndex((prev) => (prev + 1) % 3) + }, 200) + + return () => clearInterval(interval) + }, []) + + return ( +
+ {[0, 1, 2].map((index) => ( +
+ ))} +
+ ) +} diff --git a/webview-ui/src/components/chat/QueuedMessages.tsx b/webview-ui/src/components/chat/QueuedMessages.tsx index 5c17234e9..47a2831be 100644 --- a/webview-ui/src/components/chat/QueuedMessages.tsx +++ b/webview-ui/src/components/chat/QueuedMessages.tsx @@ -49,7 +49,7 @@ export const QueuedMessages = ({ queue, onRemove, onUpdate }: QueuedMessagesProp return (
+ className="bg-vscode-editor-background border rounded-md p-1 overflow-hidden whitespace-pre-wrap flex-shrink-0">
{editState.isEditing ? ( diff --git a/webview-ui/src/components/chat/ReasoningBlock.tsx b/webview-ui/src/components/chat/ReasoningBlock.tsx index 77e99668b..08725cc20 100644 --- a/webview-ui/src/components/chat/ReasoningBlock.tsx +++ b/webview-ui/src/components/chat/ReasoningBlock.tsx @@ -10,18 +10,20 @@ interface ReasoningBlockProps { content: string ts: number isStreaming: boolean - isLast: boolean + _isLast: boolean + partial?: boolean metadata?: any } -export const ReasoningBlock = ({ content, isStreaming, isLast }: ReasoningBlockProps) => { +export const ReasoningBlock = ({ content, ts, isStreaming, _isLast, partial }: ReasoningBlockProps) => { const { t } = useTranslation() const { reasoningBlockCollapsed } = useExtensionState() const [isCollapsed, setIsCollapsed] = useState(reasoningBlockCollapsed) - const startTimeRef = useRef(Date.now()) const [elapsed, setElapsed] = useState(0) + const [finalElapsed, setFinalElapsed] = useState(0) + const hasStoredFinalRef = useRef(false) const contentRef = useRef(null) useEffect(() => { @@ -29,16 +31,36 @@ export const ReasoningBlock = ({ content, isStreaming, isLast }: ReasoningBlockP }, [reasoningBlockCollapsed]) useEffect(() => { - if (isLast && isStreaming) { - const tick = () => setElapsed(Date.now() - startTimeRef.current) + if (partial) { + hasStoredFinalRef.current = false + const tick = () => setElapsed(Date.now() - ts) tick() const id = setInterval(tick, 1000) - return () => clearInterval(id) + return () => { + clearInterval(id) + // Capture final elapsed time when streaming stops + const finalTime = Date.now() - ts + setFinalElapsed(finalTime) + setElapsed(0) // Reset elapsed to stop counting + hasStoredFinalRef.current = true + } } - }, [isLast, isStreaming]) + }, [partial, ts]) - const seconds = Math.floor(elapsed / 1000) - const secondsLabel = t("chat:reasoning.seconds", { count: seconds }) + const displayElapsed = isStreaming ? elapsed : finalElapsed + const totalSeconds = Math.floor(displayElapsed / 1000) + + const formatTime = (seconds: number): string => { + if (seconds < 60) { + return `${seconds}s` + } + const minutes = Math.floor(seconds / 60) + const remainingSeconds = seconds % 60 + return remainingSeconds > 0 ? `${minutes}m${remainingSeconds}s` : `${minutes}m` + } + + const timeLabel = formatTime(totalSeconds) + const label = partial ? t("chat:reasoning.thinking") : t("chat:reasoning.thought") const handleToggle = () => { setIsCollapsed(!isCollapsed) @@ -47,13 +69,16 @@ export const ReasoningBlock = ({ content, isStreaming, isLast }: ReasoningBlockP return (
{/* */} - {t("chat:reasoning.thinking")} - {elapsed > 0 && ( - {secondsLabel} + {displayElapsed > 0 ? ( + + {label} for {timeLabel} + + ) : ( + {label} )}
diff --git a/webview-ui/src/components/chat/kilocode/AcceptRejectButtons.tsx b/webview-ui/src/components/chat/kilocode/AcceptRejectButtons.tsx index 02597588c..31dec0a4a 100644 --- a/webview-ui/src/components/chat/kilocode/AcceptRejectButtons.tsx +++ b/webview-ui/src/components/chat/kilocode/AcceptRejectButtons.tsx @@ -69,6 +69,11 @@ export const AcceptRejectButtons = ({ onDismiss }: { onDismiss?: () => void }) = setFiles([]) }, [onDismiss]) + const viewDiffCallback = useCallback(() => { + // View diffs for all pending file edits in VS Code + vscode.postMessage({ type: "viewPendingFileDiffs" }) + }, []) + // Helper to format path const getFileName = (path: string) => path.split("/").pop() || path const getDir = (path: string) => { @@ -101,6 +106,21 @@ export const AcceptRejectButtons = ({ onDismiss }: { onDismiss?: () => void }) = {/* File List - Only show when expanded */} {isExpanded && (
+ {/* View Diff Button at the top */} +
+ View changes in editor + +
{files.map((file) => { const fileIconUrl = getFileIconUrl(file.relPath) return ( diff --git a/webview-ui/src/components/kilocode/BottomApiConfig.tsx b/webview-ui/src/components/kilocode/BottomApiConfig.tsx index 5c809e170..16c72d93c 100644 --- a/webview-ui/src/components/kilocode/BottomApiConfig.tsx +++ b/webview-ui/src/components/kilocode/BottomApiConfig.tsx @@ -122,7 +122,7 @@ export const BottomApiConfig = () => { flexShrink: 0, }} /> - {usagePercentage !== null ? `used ${usagePercentage.toFixed(1)}% monthly limit` : "loading..."} + {usagePercentage !== null ? `used ${usagePercentage.toFixed(0)}% monthly limit` : "loading..."} {showHoverCard && createPortal( @@ -157,7 +157,7 @@ export const BottomApiConfig = () => { Monthly Reviews
- {(profileData?.remainingReviews || 0).toFixed(1)} reviews remaining + {(profileData?.remainingReviews || 0).toFixed(0)} reviews remaining
diff --git a/webview-ui/src/i18n/locales/ar/chat.json b/webview-ui/src/i18n/locales/ar/chat.json index 0d1097d28..ed1c13ca0 100644 --- a/webview-ui/src/i18n/locales/ar/chat.json +++ b/webview-ui/src/i18n/locales/ar/chat.json @@ -313,6 +313,7 @@ }, "reasoning": { "thinking": "التفكير", + "thought": "فكرة", "seconds": "{{count}}ث" }, "followUpSuggest": { diff --git a/webview-ui/src/i18n/locales/ca/chat.json b/webview-ui/src/i18n/locales/ca/chat.json index 8fda8dae8..fe4b67196 100644 --- a/webview-ui/src/i18n/locales/ca/chat.json +++ b/webview-ui/src/i18n/locales/ca/chat.json @@ -313,6 +313,7 @@ }, "reasoning": { "thinking": "Raonament", + "thought": "Pensament", "seconds": "{{count}}s" }, "followUpSuggest": { diff --git a/webview-ui/src/i18n/locales/cs/chat.json b/webview-ui/src/i18n/locales/cs/chat.json index 179fdec22..4405315b1 100644 --- a/webview-ui/src/i18n/locales/cs/chat.json +++ b/webview-ui/src/i18n/locales/cs/chat.json @@ -313,6 +313,7 @@ }, "reasoning": { "thinking": "Uvažování", + "thought": "Myšlenka", "seconds": "{{count}}s" }, "followUpSuggest": { diff --git a/webview-ui/src/i18n/locales/de/chat.json b/webview-ui/src/i18n/locales/de/chat.json index 56cbe8149..97326c3a8 100644 --- a/webview-ui/src/i18n/locales/de/chat.json +++ b/webview-ui/src/i18n/locales/de/chat.json @@ -313,6 +313,7 @@ }, "reasoning": { "thinking": "Überlegung", + "thought": "Gedanke", "seconds": "{{count}}s" }, "followUpSuggest": { diff --git a/webview-ui/src/i18n/locales/en/chat.json b/webview-ui/src/i18n/locales/en/chat.json index 1e5f8291c..deb06dd80 100644 --- a/webview-ui/src/i18n/locales/en/chat.json +++ b/webview-ui/src/i18n/locales/en/chat.json @@ -153,7 +153,7 @@ "apiRequest": { "title": "API Request", "failed": "API Request Failed", - "streaming": "API Request...", + "streaming": "Generating...", "cancelled": "API Request Cancelled", "streamingFailed": "API Streaming Failed" }, @@ -312,7 +312,8 @@ "socialLinks": "Join us on X, Discord, or r/RooCode 🚀" }, "reasoning": { - "thinking": "Reasoning", + "thinking": "Thinking", + "thought": "Thought", "seconds": "{{count}}s" }, "followUpSuggest": { diff --git a/webview-ui/src/i18n/locales/es/chat.json b/webview-ui/src/i18n/locales/es/chat.json index b54d08112..88c802b2a 100644 --- a/webview-ui/src/i18n/locales/es/chat.json +++ b/webview-ui/src/i18n/locales/es/chat.json @@ -313,6 +313,7 @@ }, "reasoning": { "thinking": "Razonamiento", + "thought": "Pensamiento", "seconds": "{{count}}s" }, "followUpSuggest": { diff --git a/webview-ui/src/i18n/locales/fr/chat.json b/webview-ui/src/i18n/locales/fr/chat.json index 599492d17..819a30df3 100644 --- a/webview-ui/src/i18n/locales/fr/chat.json +++ b/webview-ui/src/i18n/locales/fr/chat.json @@ -313,6 +313,7 @@ }, "reasoning": { "thinking": "Raisonnement", + "thought": "Réflexion", "seconds": "{{count}}s" }, "followUpSuggest": { diff --git a/webview-ui/src/i18n/locales/hi/chat.json b/webview-ui/src/i18n/locales/hi/chat.json index 7e3d7b323..3675620d3 100644 --- a/webview-ui/src/i18n/locales/hi/chat.json +++ b/webview-ui/src/i18n/locales/hi/chat.json @@ -313,6 +313,7 @@ }, "reasoning": { "thinking": "तर्क", + "thought": "विचार", "seconds": "{{count}}सेकंड" }, "followUpSuggest": { diff --git a/webview-ui/src/i18n/locales/id/chat.json b/webview-ui/src/i18n/locales/id/chat.json index 9af04c851..c6502535a 100644 --- a/webview-ui/src/i18n/locales/id/chat.json +++ b/webview-ui/src/i18n/locales/id/chat.json @@ -313,6 +313,7 @@ }, "reasoning": { "thinking": "Penalaran", + "thought": "Pikiran", "seconds": "{{count}}d" }, "followUpSuggest": { diff --git a/webview-ui/src/i18n/locales/it/chat.json b/webview-ui/src/i18n/locales/it/chat.json index 4b494921f..967c207c4 100644 --- a/webview-ui/src/i18n/locales/it/chat.json +++ b/webview-ui/src/i18n/locales/it/chat.json @@ -313,6 +313,7 @@ }, "reasoning": { "thinking": "Ragionamento", + "thought": "Pensiero", "seconds": "{{count}}s" }, "followUpSuggest": { diff --git a/webview-ui/src/i18n/locales/ja/chat.json b/webview-ui/src/i18n/locales/ja/chat.json index 23a5f5c50..9e52701d8 100644 --- a/webview-ui/src/i18n/locales/ja/chat.json +++ b/webview-ui/src/i18n/locales/ja/chat.json @@ -313,6 +313,7 @@ }, "reasoning": { "thinking": "推論中", + "thought": "思考", "seconds": "{{count}}秒" }, "followUpSuggest": { diff --git a/webview-ui/src/i18n/locales/ko/chat.json b/webview-ui/src/i18n/locales/ko/chat.json index e9dde2c68..5b3c424b4 100644 --- a/webview-ui/src/i18n/locales/ko/chat.json +++ b/webview-ui/src/i18n/locales/ko/chat.json @@ -313,6 +313,7 @@ }, "reasoning": { "thinking": "추론 중", + "thought": "생각", "seconds": "{{count}}초" }, "followUpSuggest": { diff --git a/webview-ui/src/i18n/locales/nl/chat.json b/webview-ui/src/i18n/locales/nl/chat.json index 24b80f7fe..0cb0a24d0 100644 --- a/webview-ui/src/i18n/locales/nl/chat.json +++ b/webview-ui/src/i18n/locales/nl/chat.json @@ -313,6 +313,7 @@ }, "reasoning": { "thinking": "Denkt na", + "thought": "Gedachte", "seconds": "{{count}}s" }, "followUpSuggest": { diff --git a/webview-ui/src/i18n/locales/pl/chat.json b/webview-ui/src/i18n/locales/pl/chat.json index e3dee5542..c45e03987 100644 --- a/webview-ui/src/i18n/locales/pl/chat.json +++ b/webview-ui/src/i18n/locales/pl/chat.json @@ -313,6 +313,7 @@ }, "reasoning": { "thinking": "Myślenie", + "thought": "Myśl", "seconds": "{{count}} s" }, "followUpSuggest": { diff --git a/webview-ui/src/i18n/locales/pt-BR/chat.json b/webview-ui/src/i18n/locales/pt-BR/chat.json index 014e89f84..3d7da20ed 100644 --- a/webview-ui/src/i18n/locales/pt-BR/chat.json +++ b/webview-ui/src/i18n/locales/pt-BR/chat.json @@ -313,6 +313,7 @@ }, "reasoning": { "thinking": "Pensando", + "thought": "Pensamento", "seconds": "{{count}}s" }, "followUpSuggest": { diff --git a/webview-ui/src/i18n/locales/ru/chat.json b/webview-ui/src/i18n/locales/ru/chat.json index 978a4af77..a00d993fe 100644 --- a/webview-ui/src/i18n/locales/ru/chat.json +++ b/webview-ui/src/i18n/locales/ru/chat.json @@ -313,6 +313,7 @@ }, "reasoning": { "thinking": "Обдумывание", + "thought": "Мысль", "seconds": "{{count}}с" }, "followUpSuggest": { diff --git a/webview-ui/src/i18n/locales/th/chat.json b/webview-ui/src/i18n/locales/th/chat.json index 491f6c828..358b21a58 100644 --- a/webview-ui/src/i18n/locales/th/chat.json +++ b/webview-ui/src/i18n/locales/th/chat.json @@ -313,6 +313,7 @@ }, "reasoning": { "thinking": "กำลังคิด", + "thought": "คิด", "seconds": "{{count}} วินาที" }, "followUpSuggest": { diff --git a/webview-ui/src/i18n/locales/tr/chat.json b/webview-ui/src/i18n/locales/tr/chat.json index 537ecbf89..b2273090f 100644 --- a/webview-ui/src/i18n/locales/tr/chat.json +++ b/webview-ui/src/i18n/locales/tr/chat.json @@ -313,6 +313,7 @@ }, "reasoning": { "thinking": "Düşünüyor", + "thought": "Düşünce", "seconds": "{{count}}sn" }, "followUpSuggest": { diff --git a/webview-ui/src/i18n/locales/uk/chat.json b/webview-ui/src/i18n/locales/uk/chat.json index 866434876..9c38d5196 100644 --- a/webview-ui/src/i18n/locales/uk/chat.json +++ b/webview-ui/src/i18n/locales/uk/chat.json @@ -313,6 +313,7 @@ }, "reasoning": { "thinking": "Думаю", + "thought": "Думка", "seconds": "{{count}}с" }, "followUpSuggest": { diff --git a/webview-ui/src/i18n/locales/vi/chat.json b/webview-ui/src/i18n/locales/vi/chat.json index c51b5672c..ea8e71dd3 100644 --- a/webview-ui/src/i18n/locales/vi/chat.json +++ b/webview-ui/src/i18n/locales/vi/chat.json @@ -313,6 +313,7 @@ }, "reasoning": { "thinking": "Đang suy nghĩ", + "thought": "Suy nghĩ", "seconds": "{{count}} giây" }, "followUpSuggest": { diff --git a/webview-ui/src/i18n/locales/zh-CN/chat.json b/webview-ui/src/i18n/locales/zh-CN/chat.json index 718760d95..1187610e3 100644 --- a/webview-ui/src/i18n/locales/zh-CN/chat.json +++ b/webview-ui/src/i18n/locales/zh-CN/chat.json @@ -313,6 +313,7 @@ }, "reasoning": { "thinking": "思考中", + "thought": "思考", "seconds": "{{count}}秒" }, "followUpSuggest": { diff --git a/webview-ui/src/i18n/locales/zh-TW/chat.json b/webview-ui/src/i18n/locales/zh-TW/chat.json index 8d65b9db8..d2c9548d0 100644 --- a/webview-ui/src/i18n/locales/zh-TW/chat.json +++ b/webview-ui/src/i18n/locales/zh-TW/chat.json @@ -313,6 +313,7 @@ }, "reasoning": { "thinking": "思考中", + "thought": "思考", "seconds": "{{count}} 秒" }, "followUpSuggest": { From 2c25885b84cf63f1e636d86d3241529e7cee5559 Mon Sep 17 00:00:00 2001 From: code-crusher Date: Mon, 12 Jan 2026 12:03:25 +0530 Subject: [PATCH 3/3] docs: update changelog with v5.1.0 details --- CHANGELOG.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5fbba5e0a..30769eb18 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,15 +7,23 @@ - Line counter tracking for file edit reviews (lines added, updated, deleted) - Server integration to report line change statistics - Automatic language detection from edited files for analytics +- `MatterProgressIndicator` component with animated loading dots +- "View Diff" button in file edit review to view pending changes in VS Code editor +- Elapsed time tracking for reasoning blocks (shows "Thinking for Xs" during streaming) +- "Thought" translation key for completed reasoning blocks ### Changed - Enhanced file edit review accept all functionality with detailed metrics - Improved webview message handling for file edit operations +- Updated "API Request..." label to "Generating..." for better UX +- Fixed sendingDisabled behavior when canceling tasks or aborting commands +- Enhanced reasoning block UI with time display and collapse functionality ### Fixed - Removed debug console.log statement from kilo config loading +- Fixed unused parameter warning in ReasoningBlock component ---