-
Notifications
You must be signed in to change notification settings - Fork 2.6k
fix: reduce VS Code extension lag by truncating CHANGELOG #8529
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,87 @@ | ||
| # Roo Code Changelog | ||
|
|
||
| ## [3.28.15] - 2025-10-03 | ||
|
|
||
| - Add new DeepSeek and GLM models with detailed descriptions to the Chutes provider (thanks @mohammad154!) | ||
| - Fix: properly reset cost limit tracking when user clicks "Reset and Continue" (#6889 by @alecoot, PR by app/roomote) | ||
| - Fix: improve save button activation in prompts settings (#5780 by @beccare, PR by app/roomote) | ||
| - Fix: overeager 'there are unsaved changes' dialog in settings (thanks @brunobergher!) | ||
| - Fix: show send button when only images are selected in chat textarea (thanks app/roomote!) | ||
| - Fix: Claude Sonnet 4.5 compatibility improvements (thanks @mrubens!) | ||
| - Add UsageStats schema and type for better analytics tracking (thanks app/roomote!) | ||
| - Include reasoning messages in cloud tasks (thanks @mrubens!) | ||
| - Security: update dependency vite to v6.3.6 (thanks app/renovate!) | ||
| - Deprecate free grok 4 fast model (thanks @mrubens!) | ||
| - Remove unsupported Gemini 2.5 Flash Image Preview free model (thanks @SannidhyaSah!) | ||
| - Add structured data to the homepage for better SEO (thanks @mrubens!) | ||
| - Update dependency glob to v11.0.3 (thanks app/renovate!) | ||
|
|
||
| ## [3.28.14] - 2025-09-30 | ||
|
|
||
| - Add support for GLM-4.6 model for z.ai provider (#8406 by @dmarkey, PR by @roomote) | ||
|
|
||
| ## [3.28.13] - 2025-09-29 | ||
|
|
||
| - Fix: Remove topP parameter from Bedrock inference config (#8377 by @ronyblum, PR by @daniel-lxs) | ||
| - Fix: Correct Vertex AI Sonnet 4.5 model configuration (#8387 by @nickcatal, PR by @mrubens!) | ||
|
|
||
| ## [3.28.12] - 2025-09-29 | ||
|
|
||
| - Fix: Correct Anthropic Sonnet 4.5 model ID and add Bedrock 1M context checkbox (thanks @daniel-lxs!) | ||
|
|
||
| ## [3.28.11] - 2025-09-29 | ||
|
|
||
| - Fix: Correct AWS Bedrock Claude Sonnet 4.5 model identifier (#8371 by @sunhyung, PR by @app/roomote) | ||
| - Fix: Correct Claude Sonnet 4.5 model ID format (thanks @daniel-lxs!) | ||
|
|
||
| ## [3.28.10] - 2025-09-29 | ||
|
|
||
| - Feat: Add Sonnet 4.5 support (thanks @daniel-lxs!) | ||
| - Fix: Resolve max_completion_tokens issue for GPT-5 models in LiteLLM provider (#6979 by @lx1054331851, PR by @roomote) | ||
| - Fix: Make chat icons properly sized with shrink-0 class (thanks @mrubens!) | ||
| - Enhancement: Track telemetry settings changes for better analytics (thanks @mrubens!) | ||
| - Web: Add testimonials section to website (thanks @brunobergher!) | ||
| - CI: Refresh contrib.rocks cache workflow for contributor badges (thanks @hannesrudolph!) | ||
|
|
||
| ## [3.28.9] - 2025-09-26 | ||
|
|
||
| - The free Supernova model now has a 1M token context window (thanks @mrubens!) | ||
| - Experiment to show the Roo provider on the welcome screen (thanks @mrubens!) | ||
| - Web: Website improvements to https://roocode.com/ (thanks @brunobergher!) | ||
| - Fix: Remove <thinking> tags from prompts for cleaner output and fewer tokens (#8318 by @hannesrudolph, PR by @app/roomote) | ||
| - Correct tool use suggestion to improve model adherence to suggestion (thanks @hannesrudolph!) | ||
| - feat: log out from cloud when resetting extension state (thanks @app/roomote!) | ||
| - feat: Add telemetry tracking to DismissibleUpsell component (thanks @app/roomote!) | ||
| - refactor: remove pr-reviewer mode (thanks @daniel-lxs!) | ||
| - Removing user hint when refreshing models (thanks @requesty-JohnCosta27!) | ||
|
|
||
| ## [3.28.8] - 2025-09-25 | ||
|
|
||
| - Fix: Resolve frequent "No tool used" errors by clarifying tool-use rules (thanks @hannesrudolph!) | ||
| - Fix: Include initial ask in condense summarization (thanks @hannesrudolph!) | ||
| - Add support for more free models in the Roo provider (thanks @mrubens!) | ||
| - Show cloud switcher and option to add a team when logged in (thanks @mrubens!) | ||
| - Add Opengraph image for web (thanks @brunobergher!) | ||
|
|
||
| ## [3.28.7] - 2025-09-23 | ||
|
|
||
| - UX: Collapse thinking blocks by default with UI settings to always show them (thanks @brunobergher!) | ||
| - Fix: Resolve checkpoint restore popover positioning issue (#8219 by @NaccOll, PR by @app/roomote) | ||
| - Add cloud account switcher functionality (thanks @mrubens!) | ||
| - Add support for zai-org/GLM-4.5-turbo model in Chutes provider (#8155 by @mugnimaestra, PR by @app/roomote) | ||
|
|
||
| ## [3.28.6] - 2025-09-23 | ||
|
|
||
| - Feat: Add GPT-5-Codex model (thanks @daniel-lxs!) | ||
| - Feat: Add keyboard shortcut for toggling auto-approve (Cmd/Ctrl+Alt+A) (thanks @brunobergher!) | ||
| - Fix: Improve reasoning block formatting for better readability (thanks @daniel-lxs!) | ||
| - Fix: Respect Ollama Modelfile num_ctx configuration (#7797 by @hannesrudolph, PR by @app/roomote) | ||
| - Fix: Prevent checkpoint text from wrapping in non-English languages (#8206 by @NaccOll, PR by @app/roomote) | ||
| - Remove language selection and word wrap toggle from CodeBlock (thanks @mrubens!) | ||
| - Feat: Add package.nls.json checking to find-missing-translations script (thanks @app/roomote!) | ||
| - Fix: Bare metal evals fixes (thanks @cte!) | ||
| - Fix: Follow-up questions should trigger the "interactive" state (thanks @cte!) | ||
|
|
||
| --- | ||
|
|
||
| _For the complete changelog with all 11 releases, please visit the [GitHub repository](https://github.com/RooCodeInc/Roo-Code/blob/main/CHANGELOG.md)._ |
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
| @@ -0,0 +1,76 @@ | ||||||
| #!/usr/bin/env node | ||||||
|
|
||||||
| const fs = require("fs") | ||||||
| const path = require("path") | ||||||
|
|
||||||
| /** | ||||||
| * Generate a truncated CHANGELOG for VS Code extension | ||||||
| * This reduces the file size to improve performance when viewing the extension details | ||||||
| */ | ||||||
| function generateVSCodeChangelog() { | ||||||
| const changelogPath = path.join(__dirname, "..", "CHANGELOG.md") | ||||||
| const outputPath = path.join(__dirname, "..", "CHANGELOG.vscode.md") | ||||||
|
|
||||||
| if (!fs.existsSync(changelogPath)) { | ||||||
| console.error("CHANGELOG.md not found") | ||||||
| process.exit(1) | ||||||
| } | ||||||
|
|
||||||
| const content = fs.readFileSync(changelogPath, "utf8") | ||||||
| const lines = content.split("\n") | ||||||
|
|
||||||
| const truncatedLines = [] | ||||||
| let versionCount = 0 | ||||||
| const maxVersions = 10 // Keep only the 10 most recent versions | ||||||
| let inVersion = false | ||||||
|
|
||||||
| for (const line of lines) { | ||||||
| // Check if this is a version header | ||||||
| if (line.startsWith("## [")) { | ||||||
| versionCount++ | ||||||
| if (versionCount > maxVersions) { | ||||||
| break | ||||||
| } | ||||||
| inVersion = true | ||||||
| } | ||||||
|
|
||||||
| // Skip image lines (they reference release images) | ||||||
| if (line.includes(".*`, | ||||||
|
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. P2: The release count in the footer is inaccurate: versionCount increments before the break, so this often reports 11 when only 10 versions are included, and it doesn't reflect total releases. Either compute a total in a separate pass or avoid the number entirely to prevent misleading output.
Suggested change
|
||||||
| ) | ||||||
|
|
||||||
| const truncatedContent = truncatedLines.join("\n") | ||||||
| fs.writeFileSync(outputPath, truncatedContent, "utf8") | ||||||
|
|
||||||
| const originalSize = Buffer.byteLength(content, "utf8") | ||||||
| const truncatedSize = Buffer.byteLength(truncatedContent, "utf8") | ||||||
| const reduction = (((originalSize - truncatedSize) / originalSize) * 100).toFixed(1) | ||||||
|
|
||||||
| console.log(`✅ Generated CHANGELOG.vscode.md`) | ||||||
| console.log(` Original size: ${(originalSize / 1024).toFixed(1)} KB`) | ||||||
| console.log(` Truncated size: ${(truncatedSize / 1024).toFixed(1)} KB`) | ||||||
| console.log(` Size reduction: ${reduction}%`) | ||||||
|
|
||||||
| return outputPath | ||||||
| } | ||||||
|
|
||||||
| // Run if called directly | ||||||
| if (require.main === module) { | ||||||
| generateVSCodeChangelog() | ||||||
| } | ||||||
|
|
||||||
| module.exports = { generateVSCodeChangelog } | ||||||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -4,6 +4,7 @@ import * as path from "path" | |
| import { fileURLToPath } from "url" | ||
| import process from "node:process" | ||
| import * as console from "node:console" | ||
| import { execSync } from "child_process" | ||
|
|
||
| import { copyPaths, copyWasms, copyLocales, setupLocaleWatcher } from "@roo-code/build" | ||
|
|
||
|
|
@@ -47,18 +48,36 @@ async function main() { | |
| name: "copyFiles", | ||
| setup(build) { | ||
| build.onEnd(() => { | ||
| copyPaths( | ||
| [ | ||
| ["../README.md", "README.md"], | ||
| ["../CHANGELOG.md", "CHANGELOG.md"], | ||
| ["../LICENSE", "LICENSE"], | ||
| ["../.env", ".env", { optional: true }], | ||
| ["node_modules/vscode-material-icons/generated", "assets/vscode-material-icons"], | ||
| ["../webview-ui/audio", "webview-ui/audio"], | ||
| ], | ||
| srcDir, | ||
| buildDir, | ||
| ) | ||
| // Generate truncated CHANGELOG for VS Code extension | ||
| let changelogGenerated = false | ||
| try { | ||
| console.log("[extension] Generating truncated CHANGELOG for VS Code...") | ||
| execSync("node ../scripts/generate-vscode-changelog.js", { | ||
|
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. P3: execSync runs on every build (including watch/dev), adding overhead and blocking the event loop during iterative builds. Consider gating generation behind the existing production flag to avoid doing this work outside release packaging. |
||
| cwd: srcDir, | ||
| stdio: "inherit" | ||
| }) | ||
| changelogGenerated = true | ||
| } catch (error) { | ||
| console.error("[extension] Failed to generate truncated CHANGELOG:", error.message) | ||
| console.log("[extension] Falling back to original CHANGELOG.md") | ||
| } | ||
|
|
||
| const filesToCopy = [ | ||
| ["../README.md", "README.md"], | ||
| ["../LICENSE", "LICENSE"], | ||
| ["../.env", ".env", { optional: true }], | ||
| ["node_modules/vscode-material-icons/generated", "assets/vscode-material-icons"], | ||
| ["../webview-ui/audio", "webview-ui/audio"], | ||
| ] | ||
|
|
||
| // Use truncated CHANGELOG if it was generated, otherwise use original | ||
| if (changelogGenerated && fs.existsSync(path.join(srcDir, "..", "CHANGELOG.vscode.md"))) { | ||
| filesToCopy.splice(1, 0, ["../CHANGELOG.vscode.md", "CHANGELOG.md"]) | ||
| } else { | ||
| filesToCopy.splice(1, 0, ["../CHANGELOG.md", "CHANGELOG.md"]) | ||
| } | ||
|
|
||
| copyPaths(filesToCopy, srcDir, buildDir) | ||
| }) | ||
| }, | ||
| }, | ||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The current logic increments versionCount for each version header and breaks when versionCount exceeds maxVersions. This causes versionCount to be one more than the number of versions actually included in the truncated file. If the note is intended to show the total number of releases in the full changelog, consider pre-counting the headers; otherwise, adjust the note for clarity.