mirror of
https://github.com/RooVetGit/Roo-Code.git
synced 2026-08-28 05:27:24 +00:00
- Add 'disableMarketplace' setting to completely disable marketplace functionality - Add 'marketplaceTimeout' setting to configure API request timeout (1000-60000ms) - Update RemoteConfigLoader to respect user settings and return empty arrays when disabled - Update ClineProvider and webviewMessageHandler to check both experiment flag and user setting - Add better error logging and graceful handling of network timeouts - Update marketplace button visibility to respect disable setting - Add comprehensive tests for new functionality - Update existing tests with proper vscode mocks This allows users in network-restricted environments to disable marketplace functionality completely, preventing timeout errors and improving performance.
883 lines
419 KiB
Text
883 lines
419 KiB
Text
[2025-06-18T08:42:51.949Z] {
|
||
"ts": 1750236171947,
|
||
"type": "say",
|
||
"say": "text",
|
||
"text": "Fix the following GitHub issue:\n\nRepository: RooCodeInc/Roo-Code\nIssue #4817: Failed to load marketplace items: AxiosError: timeout of 10000ms exceeded\n\nDescription:\n### App Version\n\n3.21.0\n\n### API Provider\n\nAnthropic\n\n### Model Used\n\ndeepseek-v3-0321\n\n### 🔁 Steps to Reproduce\n\nwith 3.19.7 no problems\nwith 3.20.x the problems happend\nsend a message, it cost too much time to get answers.\n\n\nusing vscode in inner network with limited access to intel network.\n\nvscode version is:\n1.101.0 2025-06-11\n\n### 💥 Outcome Summary\n\ndue to limited network access, some request blocked, does this requests matters, can have a switch to turn it off ?\n\n### 📄 Relevant Logs or Errors (Optional)\n\n```shell\ncheck the console,found this:\nworkbench.desktop.main.js:35 ERR [Extension Host] Failed to load marketplace items: AxiosError: timeout of 10000ms exceeded\n\tat sC.<anonymous> (/root/.vscode-server/extensions/rooveterinaryinc.roo-cline-3.21.0/dist/extension.js:1080:10310)\n\tat sC.emit (node:events:518:28)\n\tat Timeout.<anonymous> (/root/.vscode-server/extensions/rooveterinaryinc.roo-cline-3.21.0/dist/extension.js:33:3303)\n\tat Timeout.a (/root/.vscode-server/extensions/saoudrizwan.claude-dev-3.17.12/dist/extension.js:935:9428)\nat listOnTimeout (node:internal/timers:588:17)\n\tat process.processTimers (node:internal/timers:523:7)\n\tat jU.request (/root/.vscode-server/extensions/rooveterinaryinc.roo-cline-3.21.0/dist/extension.js:1082:2067)\n\tat async KDe.fetchWithRetry (/root/.vscode-server/extensions/rooveterinaryinc.roo-cline-3.21.0/dist/extension.js:2983:2588)\n\tat async KDe.fetchModes (/root/.vscode-server/extensions/rooveterinaryinc.roo-cline-3.21.0/dist/extension.js:2983:2125)\n\tat async Promise.all (index 0)\nat async KDe.loadAllItems (/root/.vscode-server/extensions/rooveterinaryinc.roo-cline-3.21.0/dist/extension.js:2983:1966)\n\tat async jDe.getMarketplaceItems (/root/.vscode-server/extensions/rooveterinaryinc.roo-cline-3.21.0/dist/extension.js:2983:3273)\n\tat async jDe.getCurrentItems (/root/.vscode-server/extensions/rooveterinaryinc.roo-cline-3.21.0/dist/extension.js:2983:3481)\n\tat async t.getStateToPostToWebview (/root/.vscode-server/extensions/rooveterinaryinc.roo-cline-3.21.0/dist/extension.js:5076:9730)\nat async t.postStateToWebview (/root/.vscode-server/extensions/rooveterinaryinc.roo-cline-3.21.0/dist/extension.js:5076:7691)\n\tat async t.addToClineMessages (/root/.vscode-server/extensions/rooveterinaryinc.roo-cline-3.21.0/dist/extension.js:4984:4467)\n\tat async t.say (/root/.vscode-server/extensions/rooveterinaryinc.roo-cline-3.21.0/dist/extension.js:4984:8517)\n\tat async Xae (/root/.vscode-server/extensions/rooveterinaryinc.roo-cline-3.21.0/dist/extension.js:4392:960)\n```\n\nLabels: bug\n\nPlease analyze the issue, understand what needs to be fixed, and implement a solution.\n\nWhen you're finished:\n- Create a git branch to store your work (git checkout -b fix-4817)\n- Commit your changes to this branch (git commit -m \"Fixes #4817\")\n- Push your branch to the remote repository (git push --set-upstream origin fix-4817)\n- Submit a pull request using the \"gh\" command line tool (gh pr create --title \"Fixes #4817\n\n[Your PR description here.]\" --fill)\n\nYour job isn't done until you've created a pull request. Try to solve any git issues that arise while creating your branch and submitting your pull request."
|
||
}
|
||
[2025-06-18T08:42:51.955Z] taskStarted -> ad1a7db8-3f8e-4b58-a3bc-9414ec503c62
|
||
[2025-06-18T08:42:51.957Z] {
|
||
"ts": 1750236171956,
|
||
"type": "say",
|
||
"say": "api_req_started",
|
||
"text": "{\"request\":\"<task>\\nFix the following GitHub issue:\\n\\nRepository: RooCodeInc/Roo-Code\\nIssue #4817: Failed to load marketplace items: AxiosError: timeout of 10000ms exceeded\\n\\nDescription:\\n### App Version\\n\\n3.21.0\\n\\n### API Provider\\n\\nAnthropic\\n\\n### Model Used\\n\\ndeepseek-v3-0321\\n\\n### 🔁 Steps to Reproduce\\n\\nwith 3.19.7 no problems\\nwith 3.20.x the problems happend\\nsend a message, it cost too much time to get answers.\\n\\n\\nusing vscode in inner network with limited access to intel network.\\n\\nvscode version is:\\n1.101.0 2025-06-11\\n\\n### 💥 Outcome Summary\\n\\ndue to limited network access, some request blocked, does this requests matters, can have a switch to turn it off ?\\n\\n### 📄 Relevant Logs or Errors (Optional)\\n\\n```shell\\ncheck the console,found this:\\nworkbench.desktop.main.js:35 ERR [Extension Host] Failed to load marketplace items: AxiosError: timeout of 10000ms exceeded\\n\\tat sC.<anonymous> (/root/.vscode-server/extensions/rooveterinaryinc.roo-cline-3.21.0/dist/extension.js:1080:10310)\\n\\tat sC.emit (node:events:518:28)\\n\\tat Timeout.<anonymous> (/root/.vscode-server/extensions/rooveterinaryinc.roo-cline-3.21.0/dist/extension.js:33:3303)\\n\\tat Timeout.a (/root/.vscode-server/extensions/saoudrizwan.claude-dev-3.17.12/dist/extension.js:935:9428)\\nat listOnTimeout (node:internal/timers:588:17)\\n\\tat process.processTimers (node:internal/timers:523:7)\\n\\tat jU.request (/root/.vscode-server/extensions/rooveterinaryinc.roo-cline-3.21.0/dist/extension.js:1082:2067)\\n\\tat async KDe.fetchWithRetry (/root/.vscode-server/extensions/rooveterinaryinc.roo-cline-3.21.0/dist/extension.js:2983:2588)\\n\\tat async KDe.fetchModes (/root/.vscode-server/extensions/rooveterinaryinc.roo-cline-3.21.0/dist/extension.js:2983:2125)\\n\\tat async Promise.all (index 0)\\nat async KDe.loadAllItems (/root/.vscode-server/extensions/rooveterinaryinc.roo-cline-3.21.0/dist/extension.js:2983:1966)\\n\\tat async jDe.getMarketplaceItems (/root/.vscode-server/extensions/rooveterinaryinc.roo-cline-3.21.0/dist/extension.js:2983:3273)\\n\\tat async jDe.getCurrentItems (/root/.vscode-server/extensions/rooveterinaryinc.roo-cline-3.21.0/dist/extension.js:2983:3481)\\n\\tat async t.getStateToPostToWebview (/root/.vscode-server/extensions/rooveterinaryinc.roo-cline-3.21.0/dist/extension.js:5076:9730)\\nat async t.postStateToWebview (/root/.vscode-server/extensions/rooveterinaryinc.roo-cline-3.21.0/dist/extension.js:5076:7691)\\n\\tat async t.addToClineMessages (/root/.vscode-server/extensions/rooveterinaryinc.roo-cline-3.21.0/dist/extension.js:4984:4467)\\n\\tat async t.say (/root/.vscode-server/extensions/rooveterinaryinc.roo-cline-3.21.0/dist/extension.js:4984:8517)\\n\\tat async Xae (/root/.vscode-server/extensions/rooveterinaryinc.roo-cline-3.21.0/dist/extension.js:4392:960)\\n```\\n\\nLabels: bug\\n\\nPlease analyze the issue, understand what needs to be fixed, and implement a solution.\\n\\nWhen you're finished:\\n- Create a git branch to store your work (git checkout -b fix-4817)\\n- Commit your changes to this branch (git commit -m \\\"Fixes #4817\\\")\\n- Push your branch to the remote repository (git push --set-upstream origin fix-4817)\\n- Submit a pull request using the \\\"gh\\\" command line tool (gh pr create --title \\\"Fixes #4817\\n\\n[Your PR description here.]\\\" --fill)\\n\\nYour job isn't done until you've created a pull request. Try to solve any git issues that arise while creating your branch and submitting your pull request.\\n</task>\\n\\nLoading...\"}"
|
||
}
|
||
[2025-06-18T08:43:01.952Z] {
|
||
"ts": 1750236175846,
|
||
"type": "say",
|
||
"say": "text",
|
||
"text": "Looking at this GitHub issue, I need to understand what's happening:\n\n1. The error is \"Failed to load marketplace items: AxiosError: timeout of 10000ms exceeded\"\n2. This started happening in version 3.20.x (working fine in 3.19.7)\n3. The user is in a limited network environment with restricted internet access\n4. The error occurs when trying to fetch marketplace items, specifically modes\n5. The user is asking for a switch to turn off these requests since they're in a limited network environment\n\nFrom the stack trace, I can see:\n- The error occurs in `KDe.fetchModes` and `KDe.loadAllItems`\n- It's trying to fetch marketplace items but timing out after 10 seconds\n- This happens during `getMarketplaceItems` and `getCurrentItems`\n\nI need to:\n1. Find the marketplace/modes fetching code\n2. Understand how it works\n3. Add a setting to disable marketplace fetching for users in limited network environments\n4. Make sure the extension gracefully handles when marketplace items can't be loaded\n\nLet me start by exploring the codebase to understand the structure and find the relevant files.\n\nI'll help you fix this GitHub issue. The problem is that users in limited network environments are experiencing timeouts when the extension tries to fetch marketplace items. Let me start by exploring the codebase to understand the structure and locate the relevant files.",
|
||
"partial": false
|
||
}
|
||
[2025-06-18T08:43:02.318Z] {
|
||
"ts": 1750236181964,
|
||
"type": "ask",
|
||
"ask": "tool",
|
||
"text": "{\"tool\":\"listFilesTopLevel\",\"path\":\"src\",\"isOutsideWorkspace\":false,\"content\":\"esbuild.mjs\\neslint.config.mjs\\nextension.ts\\njest.config.mjs\\npackage.json\\npackage.nls.ca.json\\npackage.nls.de.json\\npackage.nls.es.json\\npackage.nls.fr.json\\npackage.nls.hi.json\\npackage.nls.id.json\\npackage.nls.it.json\\npackage.nls.ja.json\\npackage.nls.json\\npackage.nls.ko.json\\npackage.nls.nl.json\\npackage.nls.pl.json\\npackage.nls.pt-BR.json\\npackage.nls.ru.json\\npackage.nls.tr.json\\npackage.nls.vi.json\\npackage.nls.zh-CN.json\\npackage.nls.zh-TW.json\\ntsconfig.json\\nturbo.json\\nvitest.config.ts\\nvitest.setup.ts\\n__mocks__/\\n__tests__/\\nactivate/\\napi/\\nassets/\\ncore/\\nextension/\\ni18n/\\nintegrations/\\nservices/\\nshared/\\nutils/\\nworkers/\"}",
|
||
"partial": false,
|
||
"isProtected": false
|
||
}
|
||
[2025-06-18T08:43:02.455Z] {
|
||
"ts": 1750236182452,
|
||
"type": "say",
|
||
"say": "api_req_started",
|
||
"text": "{\"request\":\"[list_files for 'src'] Result:\\n\\nesbuild.mjs\\neslint.config.mjs\\nextension.ts\\njest.config.mjs\\npackage.json\\npackage.nls.ca.json\\npackage.nls.de.json\\npackage.nls.es.json\\npackage.nls.fr.json\\npackage.nls.hi.json\\npackage.nls.id.json\\npackage.nls.it.json\\npackage.nls.ja.json\\npackage.nls.json\\npackage.nls.ko.json\\npackage.nls.nl.json\\npackage.nls.pl.json\\npackage.nls.pt-BR.json\\npackage.nls.ru.json\\npackage.nls.tr.json\\npackage.nls.vi.json\\npackage.nls.zh-CN.json\\npackage.nls.zh-TW.json\\ntsconfig.json\\nturbo.json\\nvitest.config.ts\\nvitest.setup.ts\\n__mocks__/\\n__tests__/\\nactivate/\\napi/\\nassets/\\ncore/\\nextension/\\ni18n/\\nintegrations/\\nservices/\\nshared/\\nutils/\\nworkers/\\n\\nTool [search_files] was not executed because a tool has already been used in this message. Only one tool may be used per message. You must assess the first tool's result before proceeding to use the next tool.\\n\\nLoading...\"}"
|
||
}
|
||
[2025-06-18T08:43:05.635Z] {
|
||
"ts": 1750236185065,
|
||
"type": "say",
|
||
"say": "text",
|
||
"text": "Now let me search for marketplace-related code to understand how the marketplace items are being fetched:",
|
||
"partial": false
|
||
}
|
||
[2025-06-18T08:43:06.203Z] {
|
||
"ts": 1750236185634,
|
||
"type": "ask",
|
||
"ask": "tool",
|
||
"text": "{\"tool\":\"searchFiles\",\"path\":\"src\",\"regex\":\"marketplace|fetchModes|loadAllItems\",\"filePattern\":\"*.ts\",\"isOutsideWorkspace\":false,\"content\":\"Found 82 results.\\n\\n# src/shared/experiments.ts\\n 3 | export const EXPERIMENT_IDS = {\\n 4 | \\tMARKETPLACE: \\\"marketplace\\\",\\n 5 | \\tMULTI_FILE_APPLY_DIFF: \\\"multiFileApplyDiff\\\",\\n----\\n\\n# src/core/webview/ClineProvider.ts\\n 49 | import { McpServerManager } from \\\"../../services/mcp/McpServerManager\\\"\\n 50 | import { MarketplaceManager } from \\\"../../services/marketplace\\\"\\n 51 | import { ShadowCheckpointService } from \\\"../../services/checkpoints/ShadowCheckpointService\\\"\\n----\\n104 | \\tprotected mcpHub?: McpHub // Change from private to protected\\n105 | \\tprivate marketplaceManager: MarketplaceManager\\n106 | \\n----\\n152 | \\n153 | \\t\\tthis.marketplaceManager = new MarketplaceManager(this.context)\\n154 | \\t}\\n----\\n268 | \\t\\tthis.mcpHub = undefined\\n269 | \\t\\tthis.marketplaceManager?.cleanup()\\n270 | \\t\\tthis.customModesManager?.dispose()\\n----\\n780 | \\t\\tconst onReceiveMessage = async (message: WebviewMessage) =>\\n781 | \\t\\t\\twebviewMessageHandler(this, message, this.marketplaceManager)\\n782 | \\n----\\n1253 | \\n1254 | \\t\\t// Set context for marketplace experiment\\n1255 | \\t\\tawait vscode.commands.executeCommand(\\n1256 | \\t\\t\\t\\\"setContext\\\",\\n1257 | \\t\\t\\t`${Package.name}.marketplaceEnabled`,\\n1258 | \\t\\t\\texperiments.marketplace ?? false,\\n1259 | \\t\\t)\\n----\\n1349 | \\n1350 | \\t\\t// Only fetch marketplace data if the feature is enabled\\n1351 | \\t\\tlet marketplaceItems: any[] = []\\n1352 | \\t\\tlet marketplaceInstalledMetadata: any = { project: {}, global: {} }\\n1353 | \\n1354 | \\t\\tif (experiments.marketplace) {\\n1355 | \\t\\t\\tmarketplaceItems = (await this.marketplaceManager.getCurrentItems()) || []\\n1356 | \\t\\t\\tmarketplaceInstalledMetadata = await this.marketplaceManager.getInstallationMetadata()\\n1357 | \\t\\t}\\n----\\n1364 | \\t\\t\\tversion: this.context.extension?.packageJSON?.version ?? \\\"\\\",\\n1365 | \\t\\t\\tmarketplaceItems,\\n1366 | \\t\\t\\tmarketplaceInstalledMetadata,\\n1367 | \\t\\t\\tapiConfiguration,\\n----\\n\\n# src/core/webview/webviewMessageHandler.ts\\n 45 | \\n 46 | import { MarketplaceManager, MarketplaceItemType } from \\\"../../services/marketplace\\\"\\n 47 | \\n----\\n 50 | \\tmessage: WebviewMessage,\\n 51 | \\tmarketplaceManager?: MarketplaceManager,\\n 52 | ) => {\\n----\\n1467 | \\t\\tcase \\\"filterMarketplaceItems\\\": {\\n1468 | \\t\\t\\t// Check if marketplace is enabled before making API calls\\n1469 | \\t\\t\\tconst { experiments } = await provider.getState()\\n1470 | \\t\\t\\tif (!experiments.marketplace) {\\n1471 | \\t\\t\\t\\tconsole.log(\\\"Marketplace: Feature disabled, skipping API call\\\")\\n----\\n1474 | \\n1475 | \\t\\t\\tif (marketplaceManager && message.filters) {\\n1476 | \\t\\t\\t\\ttry {\\n1477 | \\t\\t\\t\\t\\tawait marketplaceManager.updateWithFilteredItems({\\n1478 | \\t\\t\\t\\t\\t\\ttype: message.filters.type as MarketplaceItemType | undefined,\\n----\\n1484 | \\t\\t\\t\\t\\tconsole.error(\\\"Marketplace: Error filtering items:\\\", error)\\n1485 | \\t\\t\\t\\t\\tvscode.window.showErrorMessage(\\\"Failed to filter marketplace items\\\")\\n1486 | \\t\\t\\t\\t}\\n----\\n1491 | \\t\\tcase \\\"installMarketplaceItem\\\": {\\n1492 | \\t\\t\\t// Check if marketplace is enabled before installing\\n1493 | \\t\\t\\tconst { experiments } = await provider.getState()\\n1494 | \\t\\t\\tif (!experiments.marketplace) {\\n1495 | \\t\\t\\t\\tconsole.log(\\\"Marketplace: Feature disabled, skipping installation\\\")\\n----\\n1498 | \\n1499 | \\t\\t\\tif (marketplaceManager && message.mpItem && message.mpInstallOptions) {\\n1500 | \\t\\t\\t\\ttry {\\n1501 | \\t\\t\\t\\t\\tconst configFilePath = await marketplaceManager.installMarketplaceItem(\\n1502 | \\t\\t\\t\\t\\t\\tmessage.mpItem,\\n----\\n1508 | \\t\\t\\t\\t\\tprovider.postMessageToWebview({\\n1509 | \\t\\t\\t\\t\\t\\ttype: \\\"marketplaceInstallResult\\\",\\n1510 | \\t\\t\\t\\t\\t\\tsuccess: true,\\n----\\n1513 | \\t\\t\\t\\t} catch (error) {\\n1514 | \\t\\t\\t\\t\\tconsole.error(`Error installing marketplace item: ${error}`)\\n1515 | \\t\\t\\t\\t\\t// Send error message to webview\\n1516 | \\t\\t\\t\\t\\tprovider.postMessageToWebview({\\n1517 | \\t\\t\\t\\t\\t\\ttype: \\\"marketplaceInstallResult\\\",\\n1518 | \\t\\t\\t\\t\\t\\tsuccess: false,\\n----\\n1527 | \\t\\tcase \\\"removeInstalledMarketplaceItem\\\": {\\n1528 | \\t\\t\\t// Check if marketplace is enabled before removing\\n1529 | \\t\\t\\tconst { experiments } = await provider.getState()\\n1530 | \\t\\t\\tif (!experiments.marketplace) {\\n1531 | \\t\\t\\t\\tconsole.log(\\\"Marketplace: Feature disabled, skipping removal\\\")\\n----\\n1534 | \\n1535 | \\t\\t\\tif (marketplaceManager && message.mpItem && message.mpInstallOptions) {\\n1536 | \\t\\t\\t\\ttry {\\n1537 | \\t\\t\\t\\t\\tawait marketplaceManager.removeInstalledMarketplaceItem(message.mpItem, message.mpInstallOptions)\\n1538 | \\t\\t\\t\\t\\tawait provider.postStateToWebview()\\n1539 | \\t\\t\\t\\t} catch (error) {\\n1540 | \\t\\t\\t\\t\\tconsole.error(`Error removing marketplace item: ${error}`)\\n1541 | \\t\\t\\t\\t}\\n----\\n1546 | \\t\\tcase \\\"installMarketplaceItemWithParameters\\\": {\\n1547 | \\t\\t\\t// Check if marketplace is enabled before installing with parameters\\n1548 | \\t\\t\\tconst { experiments } = await provider.getState()\\n1549 | \\t\\t\\tif (!experiments.marketplace) {\\n1550 | \\t\\t\\t\\tconsole.log(\\\"Marketplace: Feature disabled, skipping installation with parameters\\\")\\n----\\n1553 | \\n1554 | \\t\\t\\tif (marketplaceManager && message.payload && \\\"item\\\" in message.payload && \\\"parameters\\\" in message.payload) {\\n1555 | \\t\\t\\t\\ttry {\\n1556 | \\t\\t\\t\\t\\tconst configFilePath = await marketplaceManager.installMarketplaceItem(message.payload.item, {\\n1557 | \\t\\t\\t\\t\\t\\tparameters: message.payload.parameters,\\n----\\n1561 | \\t\\t\\t\\t} catch (error) {\\n1562 | \\t\\t\\t\\t\\tconsole.error(`Error installing marketplace item with parameters: ${error}`)\\n1563 | \\t\\t\\t\\t\\tvscode.window.showErrorMessage(\\n1564 | \\t\\t\\t\\t\\t\\t`Failed to install marketplace item: ${error instanceof Error ? error.message : String(error)}`,\\n1565 | \\t\\t\\t\\t\\t)\\n----\\n\\n# src/shared/WebviewMessage.ts\\n 9 | } from \\\"@roo-code/types\\\"\\n 10 | import { marketplaceItemSchema } from \\\"@roo-code/types\\\"\\n 11 | \\n----\\n162 | \\t\\t| \\\"filterMarketplaceItems\\\"\\n163 | \\t\\t| \\\"marketplaceButtonClicked\\\"\\n164 | \\t\\t| \\\"installMarketplaceItem\\\"\\n----\\n167 | \\t\\t| \\\"removeInstalledMarketplaceItem\\\"\\n168 | \\t\\t| \\\"marketplaceInstallResult\\\"\\n169 | \\t\\t| \\\"switchTab\\\"\\n170 | \\ttext?: string\\n171 | \\ttab?: \\\"settings\\\" | \\\"history\\\" | \\\"mcp\\\" | \\\"modes\\\" | \\\"chat\\\" | \\\"marketplace\\\" | \\\"account\\\"\\n172 | \\tdisabled?: boolean\\n----\\n235 | export const installMarketplaceItemWithParametersPayloadSchema = z.object({\\n236 | \\titem: marketplaceItemSchema,\\n237 | \\tparameters: z.record(z.string(), z.any()),\\n----\\n\\n# src/shared/__tests__/experiments.test.ts\\n 29 | \\t\\t\\t\\tpowerSteering: false,\\n 30 | \\t\\t\\t\\tmarketplace: false,\\n 31 | \\t\\t\\t\\tdisableCompletionCommand: false,\\n----\\n 39 | \\t\\t\\t\\tpowerSteering: true,\\n 40 | \\t\\t\\t\\tmarketplace: false,\\n 41 | \\t\\t\\t\\tdisableCompletionCommand: false,\\n----\\n 49 | \\t\\t\\t\\tpowerSteering: false,\\n 50 | \\t\\t\\t\\tmarketplace: false,\\n 51 | \\t\\t\\t\\tdisableCompletionCommand: false,\\n----\\n 58 | \\t\\tit(\\\"is configured correctly\\\", () => {\\n 59 | \\t\\t\\texpect(EXPERIMENT_IDS.MARKETPLACE).toBe(\\\"marketplace\\\")\\n 60 | \\t\\t\\texpect(experimentConfigsMap.MARKETPLACE).toMatchObject({\\n----\\n 69 | \\t\\t\\t\\tpowerSteering: false,\\n 70 | \\t\\t\\t\\tmarketplace: false,\\n 71 | \\t\\t\\t\\tdisableCompletionCommand: false,\\n----\\n 79 | \\t\\t\\t\\tpowerSteering: false,\\n 80 | \\t\\t\\t\\tmarketplace: true,\\n 81 | \\t\\t\\t\\tdisableCompletionCommand: false,\\n----\\n 89 | \\t\\t\\t\\tpowerSteering: false,\\n 90 | \\t\\t\\t\\t// marketplace missing\\n 91 | \\t\\t\\t} as any\\n----\\n\\n# src/shared/ExtensionMessage.ts\\n 91 | \\t\\t| \\\"codebaseIndexConfig\\\"\\n 92 | \\t\\t| \\\"marketplaceInstallResult\\\"\\n 93 | \\ttext?: string\\n----\\n100 | \\t\\t| \\\"promptsButtonClicked\\\"\\n101 | \\t\\t| \\\"marketplaceButtonClicked\\\"\\n102 | \\t\\t| \\\"accountButtonClicked\\\"\\n----\\n250 | \\tautoCondenseContextPercent: number\\n251 | \\tmarketplaceItems?: MarketplaceItem[]\\n252 | \\tmarketplaceInstalledMetadata?: { project: Record<string, any>; global: Record<string, any> }\\n253 | }\\n----\\n\\n# src/services/marketplace/__tests__/MarketplaceManager.test.ts\\n159 | \\n160 | \\t\\t\\t// Mock the loadAllItems method\\n161 | \\t\\t\\tjest.spyOn(manager[\\\"configLoader\\\"], \\\"loadAllItems\\\").mockResolvedValue(mockItems)\\n162 | \\n----\\n170 | \\t\\t\\t// Mock the config loader to throw an error\\n171 | \\t\\t\\tjest.spyOn(manager[\\\"configLoader\\\"], \\\"loadAllItems\\\").mockRejectedValue(new Error(\\\"API request failed\\\"))\\n172 | \\n----\\n\\n# src/services/marketplace/__tests__/MarketplaceManager.spec.ts\\n 63 | describe(\\\"MarketplaceManager\\\", () => {\\n 64 | \\tlet marketplaceManager: MarketplaceManager\\n 65 | \\tlet mockContext: any\\n----\\n 81 | \\n 82 | \\t\\tmarketplaceManager = new MarketplaceManager(mockContext)\\n 83 | \\t})\\n----\\n 89 | \\n 90 | \\t\\t\\tconst result = await marketplaceManager.getInstallationMetadata()\\n 91 | \\n----\\n116 | \\n117 | \\t\\t\\tconst result = await marketplaceManager.getInstallationMetadata()\\n118 | \\n----\\n145 | \\n146 | \\t\\t\\tconst result = await marketplaceManager.getInstallationMetadata()\\n147 | \\n----\\n186 | \\n187 | \\t\\t\\tconst result = await marketplaceManager.getInstallationMetadata()\\n188 | \\n----\\n226 | \\n227 | \\t\\t\\tconst result = await marketplaceManager.getInstallationMetadata()\\n228 | \\n----\\n\\n# src/services/marketplace/__tests__/marketplace-setting-check.test.ts\\n 3 | \\n 4 | // Mock the provider and marketplace manager\\n 5 | const mockProvider = {\\n----\\n 18 | \\n 19 | \\tit(\\\"should skip API calls when marketplace is disabled\\\", async () => {\\n 20 | \\t\\t// Mock experiments with marketplace disabled\\n 21 | \\t\\tmockProvider.getState.mockResolvedValue({\\n 22 | \\t\\t\\texperiments: { marketplace: false },\\n 23 | \\t\\t})\\n----\\n 31 | \\n 32 | \\t\\t// Should not call marketplace manager methods\\n 33 | \\t\\texpect(mockMarketplaceManager.updateWithFilteredItems).not.toHaveBeenCalled()\\n----\\n 36 | \\n 37 | \\tit(\\\"should allow API calls when marketplace is enabled\\\", async () => {\\n 38 | \\t\\t// Mock experiments with marketplace enabled\\n 39 | \\t\\tmockProvider.getState.mockResolvedValue({\\n 40 | \\t\\t\\texperiments: { marketplace: true },\\n 41 | \\t\\t})\\n----\\n 49 | \\n 50 | \\t\\t// Should call marketplace manager methods\\n 51 | \\t\\texpect(mockMarketplaceManager.updateWithFilteredItems).toHaveBeenCalledWith({\\n----\\n 58 | \\n 59 | \\tit(\\\"should skip installation when marketplace is disabled\\\", async () => {\\n 60 | \\t\\t// Mock experiments with marketplace disabled\\n 61 | \\t\\tmockProvider.getState.mockResolvedValue({\\n 62 | \\t\\t\\texperiments: { marketplace: false },\\n 63 | \\t\\t})\\n----\\n\\n# src/services/marketplace/__tests__/RemoteConfigLoader.test.ts\\n 23 | \\n 24 | \\tdescribe(\\\"loadAllItems\\\", () => {\\n 25 | \\t\\tit(\\\"should fetch and combine modes and MCPs from API\\\", async () => {\\n----\\n 48 | \\n 49 | \\t\\t\\tconst items = await loader.loadAllItems()\\n 50 | \\n----\\n 52 | \\t\\t\\texpect(mockedAxios.get).toHaveBeenCalledWith(\\n 53 | \\t\\t\\t\\t\\\"https://test.api.com/api/marketplace/modes\\\",\\n 54 | \\t\\t\\t\\texpect.objectContaining({\\n----\\n 62 | \\t\\t\\texpect(mockedAxios.get).toHaveBeenCalledWith(\\n 63 | \\t\\t\\t\\t\\\"https://test.api.com/api/marketplace/mcps\\\",\\n 64 | \\t\\t\\t\\texpect.objectContaining({\\n----\\n115 | \\t\\t\\t// First call - should hit API\\n116 | \\t\\t\\tconst items1 = await loader.loadAllItems()\\n117 | \\t\\t\\texpect(mockedAxios.get).toHaveBeenCalledTimes(2)\\n----\\n119 | \\t\\t\\t// Second call - should use cache\\n120 | \\t\\t\\tconst items2 = await loader.loadAllItems()\\n121 | \\t\\t\\texpect(mockedAxios.get).toHaveBeenCalledTimes(2) // Still 2, not 4\\n----\\n150 | \\n151 | \\t\\t\\tconst items = await loader.loadAllItems()\\n152 | \\n----\\n161 | \\n162 | \\t\\t\\tawait expect(loader.loadAllItems()).rejects.toThrow(\\\"Persistent network error\\\")\\n163 | \\n----\\n166 | \\t\\t\\texpect(mockedAxios.get).toHaveBeenCalledWith(\\n167 | \\t\\t\\t\\texpect.stringContaining(\\\"/api/marketplace/\\\"),\\n168 | \\t\\t\\t\\texpect.any(Object),\\n----\\n196 | \\t\\t\\t// Should throw validation error for invalid modes\\n197 | \\t\\t\\tawait expect(loader.loadAllItems()).rejects.toThrow()\\n198 | \\t\\t})\\n----\\n271 | \\t\\t\\t// First call\\n272 | \\t\\t\\tawait loader.loadAllItems()\\n273 | \\t\\t\\texpect(mockedAxios.get).toHaveBeenCalledTimes(2)\\n----\\n275 | \\t\\t\\t// Second call - should use cache\\n276 | \\t\\t\\tawait loader.loadAllItems()\\n277 | \\t\\t\\texpect(mockedAxios.get).toHaveBeenCalledTimes(2)\\n----\\n282 | \\t\\t\\t// Third call - should hit API again\\n283 | \\t\\t\\tawait loader.loadAllItems()\\n284 | \\t\\t\\texpect(mockedAxios.get).toHaveBeenCalledTimes(4)\\n----\\n314 | \\t\\t\\t// First call\\n315 | \\t\\t\\tawait loader.loadAllItems()\\n316 | \\t\\t\\texpect(mockedAxios.get).toHaveBeenCalledTimes(2)\\n----\\n318 | \\t\\t\\t// Second call immediately - should use cache\\n319 | \\t\\t\\tawait loader.loadAllItems()\\n320 | \\t\\t\\texpect(mockedAxios.get).toHaveBeenCalledTimes(2)\\n----\\n325 | \\t\\t\\t// Third call - cache should be expired\\n326 | \\t\\t\\tawait loader.loadAllItems()\\n327 | \\t\\t\\texpect(mockedAxios.get).toHaveBeenCalledTimes(4)\\n----\\n\\n# src/services/marketplace/RemoteConfigLoader.ts\\n 25 | \\n 26 | \\tasync loadAllItems(): Promise<MarketplaceItem[]> {\\n 27 | \\t\\tconst items: MarketplaceItem[] = []\\n 28 | \\n 29 | \\t\\tconst [modes, mcps] = await Promise.all([this.fetchModes(), this.fetchMcps()])\\n 30 | \\n----\\n 34 | \\n 35 | \\tprivate async fetchModes(): Promise<MarketplaceItem[]> {\\n 36 | \\t\\tconst cacheKey = \\\"modes\\\"\\n----\\n 39 | \\n 40 | \\t\\tconst data = await this.fetchWithRetry<string>(`${this.apiBaseUrl}/api/marketplace/modes`)\\n 41 | \\n----\\n 59 | \\n 60 | \\t\\tconst data = await this.fetchWithRetry<string>(`${this.apiBaseUrl}/api/marketplace/mcps`)\\n 61 | \\n----\\n101 | \\tasync getItem(id: string, type: MarketplaceItemType): Promise<MarketplaceItem | null> {\\n102 | \\t\\tconst items = await this.loadAllItems()\\n103 | \\t\\treturn items.find((item) => item.id === id && item.type === type) || null\\n----\\n\\n# src/services/marketplace/MarketplaceManager.ts\\n 23 | \\t\\ttry {\\n 24 | \\t\\t\\tconst items = await this.configLoader.loadAllItems()\\n 25 | \\n----\\n 28 | \\t\\t\\tconst errorMessage = error instanceof Error ? error.message : String(error)\\n 29 | \\t\\t\\tconsole.error(\\\"Failed to load marketplace items:\\\", error)\\n 30 | \\n----\\n 92 | \\n 93 | \\t\\tvscode.window.showInformationMessage(t(\\\"marketplace:installation.installing\\\", { itemName: item.name }))\\n 94 | \\n----\\n 96 | \\t\\t\\tconst result = await this.installer.installItem(item, { target, parameters })\\n 97 | \\t\\t\\tvscode.window.showInformationMessage(t(\\\"marketplace:installation.installSuccess\\\", { itemName: item.name }))\\n 98 | \\n----\\n134 | \\t\\t\\tvscode.window.showErrorMessage(\\n135 | \\t\\t\\t\\tt(\\\"marketplace:installation.installError\\\", { itemName: item.name, errorMessage }),\\n136 | \\t\\t\\t)\\n----\\n146 | \\n147 | \\t\\tvscode.window.showInformationMessage(t(\\\"marketplace:installation.removing\\\", { itemName: item.name }))\\n148 | \\n----\\n150 | \\t\\t\\tawait this.installer.removeItem(item, { target })\\n151 | \\t\\t\\tvscode.window.showInformationMessage(t(\\\"marketplace:installation.removeSuccess\\\", { itemName: item.name }))\\n152 | \\n----\\n157 | \\t\\t\\tvscode.window.showErrorMessage(\\n158 | \\t\\t\\t\\tt(\\\"marketplace:installation.removeError\\\", { itemName: item.name, errorMessage }),\\n159 | \\t\\t\\t)\\n----\\n\\n# src/activate/registerCommands.ts\\n148 | \\t},\\n149 | \\tmarketplaceButtonClicked: () => {\\n150 | \\t\\tconst visibleProvider = getVisibleProviderOrLog(outputChannel)\\n151 | \\t\\tif (!visibleProvider) return\\n152 | \\t\\tvisibleProvider.postMessageToWebview({ type: \\\"action\\\", action: \\\"marketplaceButtonClicked\\\" })\\n153 | \\t},\\n----\"}",
|
||
"partial": false,
|
||
"isProtected": false
|
||
}
|
||
[2025-06-18T08:43:06.327Z] {
|
||
"ts": 1750236186324,
|
||
"type": "say",
|
||
"say": "api_req_started",
|
||
"text": "{\"request\":\"[search_files for 'marketplace|fetchModes|loadAllItems' in '*.ts'] Result:\\n\\nFound 82 results.\\n\\n# src/shared/experiments.ts\\n 3 | export const EXPERIMENT_IDS = {\\n 4 | \\tMARKETPLACE: \\\"marketplace\\\",\\n 5 | \\tMULTI_FILE_APPLY_DIFF: \\\"multiFileApplyDiff\\\",\\n----\\n\\n# src/core/webview/ClineProvider.ts\\n 49 | import { McpServerManager } from \\\"../../services/mcp/McpServerManager\\\"\\n 50 | import { MarketplaceManager } from \\\"../../services/marketplace\\\"\\n 51 | import { ShadowCheckpointService } from \\\"../../services/checkpoints/ShadowCheckpointService\\\"\\n----\\n104 | \\tprotected mcpHub?: McpHub // Change from private to protected\\n105 | \\tprivate marketplaceManager: MarketplaceManager\\n106 | \\n----\\n152 | \\n153 | \\t\\tthis.marketplaceManager = new MarketplaceManager(this.context)\\n154 | \\t}\\n----\\n268 | \\t\\tthis.mcpHub = undefined\\n269 | \\t\\tthis.marketplaceManager?.cleanup()\\n270 | \\t\\tthis.customModesManager?.dispose()\\n----\\n780 | \\t\\tconst onReceiveMessage = async (message: WebviewMessage) =>\\n781 | \\t\\t\\twebviewMessageHandler(this, message, this.marketplaceManager)\\n782 | \\n----\\n1253 | \\n1254 | \\t\\t// Set context for marketplace experiment\\n1255 | \\t\\tawait vscode.commands.executeCommand(\\n1256 | \\t\\t\\t\\\"setContext\\\",\\n1257 | \\t\\t\\t`${Package.name}.marketplaceEnabled`,\\n1258 | \\t\\t\\texperiments.marketplace ?? false,\\n1259 | \\t\\t)\\n----\\n1349 | \\n1350 | \\t\\t// Only fetch marketplace data if the feature is enabled\\n1351 | \\t\\tlet marketplaceItems: any[] = []\\n1352 | \\t\\tlet marketplaceInstalledMetadata: any = { project: {}, global: {} }\\n1353 | \\n1354 | \\t\\tif (experiments.marketplace) {\\n1355 | \\t\\t\\tmarketplaceItems = (await this.marketplaceManager.getCurrentItems()) || []\\n1356 | \\t\\t\\tmarketplaceInstalledMetadata = await this.marketplaceManager.getInstallationMetadata()\\n1357 | \\t\\t}\\n----\\n1364 | \\t\\t\\tversion: this.context.extension?.packageJSON?.version ?? \\\"\\\",\\n1365 | \\t\\t\\tmarketplaceItems,\\n1366 | \\t\\t\\tmarketplaceInstalledMetadata,\\n1367 | \\t\\t\\tapiConfiguration,\\n----\\n\\n# src/core/webview/webviewMessageHandler.ts\\n 45 | \\n 46 | import { MarketplaceManager, MarketplaceItemType } from \\\"../../services/marketplace\\\"\\n 47 | \\n----\\n 50 | \\tmessage: WebviewMessage,\\n 51 | \\tmarketplaceManager?: MarketplaceManager,\\n 52 | ) => {\\n----\\n1467 | \\t\\tcase \\\"filterMarketplaceItems\\\": {\\n1468 | \\t\\t\\t// Check if marketplace is enabled before making API calls\\n1469 | \\t\\t\\tconst { experiments } = await provider.getState()\\n1470 | \\t\\t\\tif (!experiments.marketplace) {\\n1471 | \\t\\t\\t\\tconsole.log(\\\"Marketplace: Feature disabled, skipping API call\\\")\\n----\\n1474 | \\n1475 | \\t\\t\\tif (marketplaceManager && message.filters) {\\n1476 | \\t\\t\\t\\ttry {\\n1477 | \\t\\t\\t\\t\\tawait marketplaceManager.updateWithFilteredItems({\\n1478 | \\t\\t\\t\\t\\t\\ttype: message.filters.type as MarketplaceItemType | undefined,\\n----\\n1484 | \\t\\t\\t\\t\\tconsole.error(\\\"Marketplace: Error filtering items:\\\", error)\\n1485 | \\t\\t\\t\\t\\tvscode.window.showErrorMessage(\\\"Failed to filter marketplace items\\\")\\n1486 | \\t\\t\\t\\t}\\n----\\n1491 | \\t\\tcase \\\"installMarketplaceItem\\\": {\\n1492 | \\t\\t\\t// Check if marketplace is enabled before installing\\n1493 | \\t\\t\\tconst { experiments } = await provider.getState()\\n1494 | \\t\\t\\tif (!experiments.marketplace) {\\n1495 | \\t\\t\\t\\tconsole.log(\\\"Marketplace: Feature disabled, skipping installation\\\")\\n----\\n1498 | \\n1499 | \\t\\t\\tif (marketplaceManager && message.mpItem && message.mpInstallOptions) {\\n1500 | \\t\\t\\t\\ttry {\\n1501 | \\t\\t\\t\\t\\tconst configFilePath = await marketplaceManager.installMarketplaceItem(\\n1502 | \\t\\t\\t\\t\\t\\tmessage.mpItem,\\n----\\n1508 | \\t\\t\\t\\t\\tprovider.postMessageToWebview({\\n1509 | \\t\\t\\t\\t\\t\\ttype: \\\"marketplaceInstallResult\\\",\\n1510 | \\t\\t\\t\\t\\t\\tsuccess: true,\\n----\\n1513 | \\t\\t\\t\\t} catch (error) {\\n1514 | \\t\\t\\t\\t\\tconsole.error(`Error installing marketplace item: ${error}`)\\n1515 | \\t\\t\\t\\t\\t// Send error message to webview\\n1516 | \\t\\t\\t\\t\\tprovider.postMessageToWebview({\\n1517 | \\t\\t\\t\\t\\t\\ttype: \\\"marketplaceInstallResult\\\",\\n1518 | \\t\\t\\t\\t\\t\\tsuccess: false,\\n----\\n1527 | \\t\\tcase \\\"removeInstalledMarketplaceItem\\\": {\\n1528 | \\t\\t\\t// Check if marketplace is enabled before removing\\n1529 | \\t\\t\\tconst { experiments } = await provider.getState()\\n1530 | \\t\\t\\tif (!experiments.marketplace) {\\n1531 | \\t\\t\\t\\tconsole.log(\\\"Marketplace: Feature disabled, skipping removal\\\")\\n----\\n1534 | \\n1535 | \\t\\t\\tif (marketplaceManager && message.mpItem && message.mpInstallOptions) {\\n1536 | \\t\\t\\t\\ttry {\\n1537 | \\t\\t\\t\\t\\tawait marketplaceManager.removeInstalledMarketplaceItem(message.mpItem, message.mpInstallOptions)\\n1538 | \\t\\t\\t\\t\\tawait provider.postStateToWebview()\\n1539 | \\t\\t\\t\\t} catch (error) {\\n1540 | \\t\\t\\t\\t\\tconsole.error(`Error removing marketplace item: ${error}`)\\n1541 | \\t\\t\\t\\t}\\n----\\n1546 | \\t\\tcase \\\"installMarketplaceItemWithParameters\\\": {\\n1547 | \\t\\t\\t// Check if marketplace is enabled before installing with parameters\\n1548 | \\t\\t\\tconst { experiments } = await provider.getState()\\n1549 | \\t\\t\\tif (!experiments.marketplace) {\\n1550 | \\t\\t\\t\\tconsole.log(\\\"Marketplace: Feature disabled, skipping installation with parameters\\\")\\n----\\n1553 | \\n1554 | \\t\\t\\tif (marketplaceManager && message.payload && \\\"item\\\" in message.payload && \\\"parameters\\\" in message.payload) {\\n1555 | \\t\\t\\t\\ttry {\\n1556 | \\t\\t\\t\\t\\tconst configFilePath = await marketplaceManager.installMarketplaceItem(message.payload.item, {\\n1557 | \\t\\t\\t\\t\\t\\tparameters: message.payload.parameters,\\n----\\n1561 | \\t\\t\\t\\t} catch (error) {\\n1562 | \\t\\t\\t\\t\\tconsole.error(`Error installing marketplace item with parameters: ${error}`)\\n1563 | \\t\\t\\t\\t\\tvscode.window.showErrorMessage(\\n1564 | \\t\\t\\t\\t\\t\\t`Failed to install marketplace item: ${error instanceof Error ? error.message : String(error)}`,\\n1565 | \\t\\t\\t\\t\\t)\\n----\\n\\n# src/shared/WebviewMessage.ts\\n 9 | } from \\\"@roo-code/types\\\"\\n 10 | import { marketplaceItemSchema } from \\\"@roo-code/types\\\"\\n 11 | \\n----\\n162 | \\t\\t| \\\"filterMarketplaceItems\\\"\\n163 | \\t\\t| \\\"marketplaceButtonClicked\\\"\\n164 | \\t\\t| \\\"installMarketplaceItem\\\"\\n----\\n167 | \\t\\t| \\\"removeInstalledMarketplaceItem\\\"\\n168 | \\t\\t| \\\"marketplaceInstallResult\\\"\\n169 | \\t\\t| \\\"switchTab\\\"\\n170 | \\ttext?: string\\n171 | \\ttab?: \\\"settings\\\" | \\\"history\\\" | \\\"mcp\\\" | \\\"modes\\\" | \\\"chat\\\" | \\\"marketplace\\\" | \\\"account\\\"\\n172 | \\tdisabled?: boolean\\n----\\n235 | export const installMarketplaceItemWithParametersPayloadSchema = z.object({\\n236 | \\titem: marketplaceItemSchema,\\n237 | \\tparameters: z.record(z.string(), z.any()),\\n----\\n\\n# src/shared/__tests__/experiments.test.ts\\n 29 | \\t\\t\\t\\tpowerSteering: false,\\n 30 | \\t\\t\\t\\tmarketplace: false,\\n 31 | \\t\\t\\t\\tdisableCompletionCommand: false,\\n----\\n 39 | \\t\\t\\t\\tpowerSteering: true,\\n 40 | \\t\\t\\t\\tmarketplace: false,\\n 41 | \\t\\t\\t\\tdisableCompletionCommand: false,\\n----\\n 49 | \\t\\t\\t\\tpowerSteering: false,\\n 50 | \\t\\t\\t\\tmarketplace: false,\\n 51 | \\t\\t\\t\\tdisableCompletionCommand: false,\\n----\\n 58 | \\t\\tit(\\\"is configured correctly\\\", () => {\\n 59 | \\t\\t\\texpect(EXPERIMENT_IDS.MARKETPLACE).toBe(\\\"marketplace\\\")\\n 60 | \\t\\t\\texpect(experimentConfigsMap.MARKETPLACE).toMatchObject({\\n----\\n 69 | \\t\\t\\t\\tpowerSteering: false,\\n 70 | \\t\\t\\t\\tmarketplace: false,\\n 71 | \\t\\t\\t\\tdisableCompletionCommand: false,\\n----\\n 79 | \\t\\t\\t\\tpowerSteering: false,\\n 80 | \\t\\t\\t\\tmarketplace: true,\\n 81 | \\t\\t\\t\\tdisableCompletionCommand: false,\\n----\\n 89 | \\t\\t\\t\\tpowerSteering: false,\\n 90 | \\t\\t\\t\\t// marketplace missing\\n 91 | \\t\\t\\t} as any\\n----\\n\\n# src/shared/ExtensionMessage.ts\\n 91 | \\t\\t| \\\"codebaseIndexConfig\\\"\\n 92 | \\t\\t| \\\"marketplaceInstallResult\\\"\\n 93 | \\ttext?: string\\n----\\n100 | \\t\\t| \\\"promptsButtonClicked\\\"\\n101 | \\t\\t| \\\"marketplaceButtonClicked\\\"\\n102 | \\t\\t| \\\"accountButtonClicked\\\"\\n----\\n250 | \\tautoCondenseContextPercent: number\\n251 | \\tmarketplaceItems?: MarketplaceItem[]\\n252 | \\tmarketplaceInstalledMetadata?: { project: Record<string, any>; global: Record<string, any> }\\n253 | }\\n----\\n\\n# src/services/marketplace/__tests__/MarketplaceManager.test.ts\\n159 | \\n160 | \\t\\t\\t// Mock the loadAllItems method\\n161 | \\t\\t\\tjest.spyOn(manager[\\\"configLoader\\\"], \\\"loadAllItems\\\").mockResolvedValue(mockItems)\\n162 | \\n----\\n170 | \\t\\t\\t// Mock the config loader to throw an error\\n171 | \\t\\t\\tjest.spyOn(manager[\\\"configLoader\\\"], \\\"loadAllItems\\\").mockRejectedValue(new Error(\\\"API request failed\\\"))\\n172 | \\n----\\n\\n# src/services/marketplace/__tests__/MarketplaceManager.spec.ts\\n 63 | describe(\\\"MarketplaceManager\\\", () => {\\n 64 | \\tlet marketplaceManager: MarketplaceManager\\n 65 | \\tlet mockContext: any\\n----\\n 81 | \\n 82 | \\t\\tmarketplaceManager = new MarketplaceManager(mockContext)\\n 83 | \\t})\\n----\\n 89 | \\n 90 | \\t\\t\\tconst result = await marketplaceManager.getInstallationMetadata()\\n 91 | \\n----\\n116 | \\n117 | \\t\\t\\tconst result = await marketplaceManager.getInstallationMetadata()\\n118 | \\n----\\n145 | \\n146 | \\t\\t\\tconst result = await marketplaceManager.getInstallationMetadata()\\n147 | \\n----\\n186 | \\n187 | \\t\\t\\tconst result = await marketplaceManager.getInstallationMetadata()\\n188 | \\n----\\n226 | \\n227 | \\t\\t\\tconst result = await marketplaceManager.getInstallationMetadata()\\n228 | \\n----\\n\\n# src/services/marketplace/__tests__/marketplace-setting-check.test.ts\\n 3 | \\n 4 | // Mock the provider and marketplace manager\\n 5 | const mockProvider = {\\n----\\n 18 | \\n 19 | \\tit(\\\"should skip API calls when marketplace is disabled\\\", async () => {\\n 20 | \\t\\t// Mock experiments with marketplace disabled\\n 21 | \\t\\tmockProvider.getState.mockResolvedValue({\\n 22 | \\t\\t\\texperiments: { marketplace: false },\\n 23 | \\t\\t})\\n----\\n 31 | \\n 32 | \\t\\t// Should not call marketplace manager methods\\n 33 | \\t\\texpect(mockMarketplaceManager.updateWithFilteredItems).not.toHaveBeenCalled()\\n----\\n 36 | \\n 37 | \\tit(\\\"should allow API calls when marketplace is enabled\\\", async () => {\\n 38 | \\t\\t// Mock experiments with marketplace enabled\\n 39 | \\t\\tmockProvider.getState.mockResolvedValue({\\n 40 | \\t\\t\\texperiments: { marketplace: true },\\n 41 | \\t\\t})\\n----\\n 49 | \\n 50 | \\t\\t// Should call marketplace manager methods\\n 51 | \\t\\texpect(mockMarketplaceManager.updateWithFilteredItems).toHaveBeenCalledWith({\\n----\\n 58 | \\n 59 | \\tit(\\\"should skip installation when marketplace is disabled\\\", async () => {\\n 60 | \\t\\t// Mock experiments with marketplace disabled\\n 61 | \\t\\tmockProvider.getState.mockResolvedValue({\\n 62 | \\t\\t\\texperiments: { marketplace: false },\\n 63 | \\t\\t})\\n----\\n\\n# src/services/marketplace/__tests__/RemoteConfigLoader.test.ts\\n 23 | \\n 24 | \\tdescribe(\\\"loadAllItems\\\", () => {\\n 25 | \\t\\tit(\\\"should fetch and combine modes and MCPs from API\\\", async () => {\\n----\\n 48 | \\n 49 | \\t\\t\\tconst items = await loader.loadAllItems()\\n 50 | \\n----\\n 52 | \\t\\t\\texpect(mockedAxios.get).toHaveBeenCalledWith(\\n 53 | \\t\\t\\t\\t\\\"https://test.api.com/api/marketplace/modes\\\",\\n 54 | \\t\\t\\t\\texpect.objectContaining({\\n----\\n 62 | \\t\\t\\texpect(mockedAxios.get).toHaveBeenCalledWith(\\n 63 | \\t\\t\\t\\t\\\"https://test.api.com/api/marketplace/mcps\\\",\\n 64 | \\t\\t\\t\\texpect.objectContaining({\\n----\\n115 | \\t\\t\\t// First call - should hit API\\n116 | \\t\\t\\tconst items1 = await loader.loadAllItems()\\n117 | \\t\\t\\texpect(mockedAxios.get).toHaveBeenCalledTimes(2)\\n----\\n119 | \\t\\t\\t// Second call - should use cache\\n120 | \\t\\t\\tconst items2 = await loader.loadAllItems()\\n121 | \\t\\t\\texpect(mockedAxios.get).toHaveBeenCalledTimes(2) // Still 2, not 4\\n----\\n150 | \\n151 | \\t\\t\\tconst items = await loader.loadAllItems()\\n152 | \\n----\\n161 | \\n162 | \\t\\t\\tawait expect(loader.loadAllItems()).rejects.toThrow(\\\"Persistent network error\\\")\\n163 | \\n----\\n166 | \\t\\t\\texpect(mockedAxios.get).toHaveBeenCalledWith(\\n167 | \\t\\t\\t\\texpect.stringContaining(\\\"/api/marketplace/\\\"),\\n168 | \\t\\t\\t\\texpect.any(Object),\\n----\\n196 | \\t\\t\\t// Should throw validation error for invalid modes\\n197 | \\t\\t\\tawait expect(loader.loadAllItems()).rejects.toThrow()\\n198 | \\t\\t})\\n----\\n271 | \\t\\t\\t// First call\\n272 | \\t\\t\\tawait loader.loadAllItems()\\n273 | \\t\\t\\texpect(mockedAxios.get).toHaveBeenCalledTimes(2)\\n----\\n275 | \\t\\t\\t// Second call - should use cache\\n276 | \\t\\t\\tawait loader.loadAllItems()\\n277 | \\t\\t\\texpect(mockedAxios.get).toHaveBeenCalledTimes(2)\\n----\\n282 | \\t\\t\\t// Third call - should hit API again\\n283 | \\t\\t\\tawait loader.loadAllItems()\\n284 | \\t\\t\\texpect(mockedAxios.get).toHaveBeenCalledTimes(4)\\n----\\n314 | \\t\\t\\t// First call\\n315 | \\t\\t\\tawait loader.loadAllItems()\\n316 | \\t\\t\\texpect(mockedAxios.get).toHaveBeenCalledTimes(2)\\n----\\n318 | \\t\\t\\t// Second call immediately - should use cache\\n319 | \\t\\t\\tawait loader.loadAllItems()\\n320 | \\t\\t\\texpect(mockedAxios.get).toHaveBeenCalledTimes(2)\\n----\\n325 | \\t\\t\\t// Third call - cache should be expired\\n326 | \\t\\t\\tawait loader.loadAllItems()\\n327 | \\t\\t\\texpect(mockedAxios.get).toHaveBeenCalledTimes(4)\\n----\\n\\n# src/services/marketplace/RemoteConfigLoader.ts\\n 25 | \\n 26 | \\tasync loadAllItems(): Promise<MarketplaceItem[]> {\\n 27 | \\t\\tconst items: MarketplaceItem[] = []\\n 28 | \\n 29 | \\t\\tconst [modes, mcps] = await Promise.all([this.fetchModes(), this.fetchMcps()])\\n 30 | \\n----\\n 34 | \\n 35 | \\tprivate async fetchModes(): Promise<MarketplaceItem[]> {\\n 36 | \\t\\tconst cacheKey = \\\"modes\\\"\\n----\\n 39 | \\n 40 | \\t\\tconst data = await this.fetchWithRetry<string>(`${this.apiBaseUrl}/api/marketplace/modes`)\\n 41 | \\n----\\n 59 | \\n 60 | \\t\\tconst data = await this.fetchWithRetry<string>(`${this.apiBaseUrl}/api/marketplace/mcps`)\\n 61 | \\n----\\n101 | \\tasync getItem(id: string, type: MarketplaceItemType): Promise<MarketplaceItem | null> {\\n102 | \\t\\tconst items = await this.loadAllItems()\\n103 | \\t\\treturn items.find((item) => item.id === id && item.type === type) || null\\n----\\n\\n# src/services/marketplace/MarketplaceManager.ts\\n 23 | \\t\\ttry {\\n 24 | \\t\\t\\tconst items = await this.configLoader.loadAllItems()\\n 25 | \\n----\\n 28 | \\t\\t\\tconst errorMessage = error instanceof Error ? error.message : String(error)\\n 29 | \\t\\t\\tconsole.error(\\\"Failed to load marketplace items:\\\", error)\\n 30 | \\n----\\n 92 | \\n 93 | \\t\\tvscode.window.showInformationMessage(t(\\\"marketplace:installation.installing\\\", { itemName: item.name }))\\n 94 | \\n----\\n 96 | \\t\\t\\tconst result = await this.installer.installItem(item, { target, parameters })\\n 97 | \\t\\t\\tvscode.window.showInformationMessage(t(\\\"marketplace:installation.installSuccess\\\", { itemName: item.name }))\\n 98 | \\n----\\n134 | \\t\\t\\tvscode.window.showErrorMessage(\\n135 | \\t\\t\\t\\tt(\\\"marketplace:installation.installError\\\", { itemName: item.name, errorMessage }),\\n136 | \\t\\t\\t)\\n----\\n146 | \\n147 | \\t\\tvscode.window.showInformationMessage(t(\\\"marketplace:installation.removing\\\", { itemName: item.name }))\\n148 | \\n----\\n150 | \\t\\t\\tawait this.installer.removeItem(item, { target })\\n151 | \\t\\t\\tvscode.window.showInformationMessage(t(\\\"marketplace:installation.removeSuccess\\\", { itemName: item.name }))\\n152 | \\n----\\n157 | \\t\\t\\tvscode.window.showErrorMessage(\\n158 | \\t\\t\\t\\tt(\\\"marketplace:installation.removeError\\\", { itemName: item.name, errorMessage }),\\n159 | \\t\\t\\t)\\n----\\n\\n# src/activate/registerCommands.ts\\n148 | \\t},\\n149 | \\tmarketplaceButtonClicked: () => {\\n150 | \\t\\tconst visibleProvider = getVisibleProviderOrLog(outputChannel)\\n151 | \\t\\tif (!visibleProvider) return\\n152 | \\t\\tvisibleProvider.postMessageToWebview({ type: \\\"action\\\", action: \\\"marketplaceButtonClicked\\\" })\\n153 | \\t},\\n----\\n\\nLoading...\"}"
|
||
}
|
||
[2025-06-18T08:43:09.049Z] {
|
||
"ts": 1750236188576,
|
||
"type": "say",
|
||
"say": "text",
|
||
"text": "Now let me look at the MarketplaceManager and RemoteConfigLoader to understand the timeout issue:",
|
||
"partial": false
|
||
}
|
||
[2025-06-18T08:43:09.050Z] {
|
||
"ts": 1750236188576,
|
||
"type": "say",
|
||
"say": "text",
|
||
"text": "Now let me look at the MarketplaceManager and RemoteConfigLoader to understand the timeout issue:",
|
||
"partial": false
|
||
}
|
||
[2025-06-18T08:43:09.050Z] {
|
||
"ts": 1750236188576,
|
||
"type": "say",
|
||
"say": "text",
|
||
"text": "Now let me look at the MarketplaceManager and RemoteConfigLoader to understand the timeout issue:",
|
||
"partial": false
|
||
}
|
||
[2025-06-18T08:43:09.051Z] {
|
||
"ts": 1750236188576,
|
||
"type": "say",
|
||
"say": "text",
|
||
"text": "Now let me look at the MarketplaceManager and RemoteConfigLoader to understand the timeout issue:",
|
||
"partial": false
|
||
}
|
||
[2025-06-18T08:43:09.061Z] {
|
||
"ts": 1750236188576,
|
||
"type": "say",
|
||
"say": "text",
|
||
"text": "Now let me look at the MarketplaceManager and RemoteConfigLoader to understand the timeout issue:",
|
||
"partial": false
|
||
}
|
||
[2025-06-18T08:43:09.783Z] {
|
||
"ts": 1750236189060,
|
||
"type": "ask",
|
||
"ask": "tool",
|
||
"text": "{\"tool\":\"readFile\",\"batchFiles\":[{\"path\":\"src/services/marketplace/MarketplaceManager.ts\",\"lineSnippet\":\"\",\"isOutsideWorkspace\":false,\"key\":\"src/services/marketplace/MarketplaceManager.ts\",\"content\":\"/roo/repos/Roo-Code/src/services/marketplace/MarketplaceManager.ts\"},{\"path\":\"src/services/marketplace/RemoteConfigLoader.ts\",\"lineSnippet\":\"\",\"isOutsideWorkspace\":false,\"key\":\"src/services/marketplace/RemoteConfigLoader.ts\",\"content\":\"/roo/repos/Roo-Code/src/services/marketplace/RemoteConfigLoader.ts\"}]}",
|
||
"partial": false
|
||
}
|
||
[2025-06-18T08:43:09.907Z] {
|
||
"ts": 1750236189905,
|
||
"type": "say",
|
||
"say": "api_req_started",
|
||
"text": "{\"request\":\"[read_file for 'src/services/marketplace/MarketplaceManager.ts', 'src/services/marketplace/RemoteConfigLoader.ts'] Result:\\n\\n<files>\\n<file><path>src/services/marketplace/MarketplaceManager.ts</path>\\n<content lines=\\\"1-282\\\">\\n 1 | import * as vscode from \\\"vscode\\\"\\n 2 | import * as fs from \\\"fs/promises\\\"\\n 3 | import * as path from \\\"path\\\"\\n 4 | import * as yaml from \\\"yaml\\\"\\n 5 | import { RemoteConfigLoader } from \\\"./RemoteConfigLoader\\\"\\n 6 | import { SimpleInstaller } from \\\"./SimpleInstaller\\\"\\n 7 | import type { MarketplaceItem, MarketplaceItemType } from \\\"@roo-code/types\\\"\\n 8 | import { GlobalFileNames } from \\\"../../shared/globalFileNames\\\"\\n 9 | import { ensureSettingsDirectoryExists } from \\\"../../utils/globalContext\\\"\\n 10 | import { t } from \\\"../../i18n\\\"\\n 11 | import { TelemetryService } from \\\"@roo-code/telemetry\\\"\\n 12 | \\n 13 | export class MarketplaceManager {\\n 14 | \\tprivate configLoader: RemoteConfigLoader\\n 15 | \\tprivate installer: SimpleInstaller\\n 16 | \\n 17 | \\tconstructor(private readonly context: vscode.ExtensionContext) {\\n 18 | \\t\\tthis.configLoader = new RemoteConfigLoader()\\n 19 | \\t\\tthis.installer = new SimpleInstaller(context)\\n 20 | \\t}\\n 21 | \\n 22 | \\tasync getMarketplaceItems(): Promise<{ items: MarketplaceItem[]; errors?: string[] }> {\\n 23 | \\t\\ttry {\\n 24 | \\t\\t\\tconst items = await this.configLoader.loadAllItems()\\n 25 | \\n 26 | \\t\\t\\treturn { items }\\n 27 | \\t\\t} catch (error) {\\n 28 | \\t\\t\\tconst errorMessage = error instanceof Error ? error.message : String(error)\\n 29 | \\t\\t\\tconsole.error(\\\"Failed to load marketplace items:\\\", error)\\n 30 | \\n 31 | \\t\\t\\treturn {\\n 32 | \\t\\t\\t\\titems: [],\\n 33 | \\t\\t\\t\\terrors: [errorMessage],\\n 34 | \\t\\t\\t}\\n 35 | \\t\\t}\\n 36 | \\t}\\n 37 | \\n 38 | \\tasync getCurrentItems(): Promise<MarketplaceItem[]> {\\n 39 | \\t\\tconst result = await this.getMarketplaceItems()\\n 40 | \\t\\treturn result.items\\n 41 | \\t}\\n 42 | \\n 43 | \\tfilterItems(\\n 44 | \\t\\titems: MarketplaceItem[],\\n 45 | \\t\\tfilters: { type?: MarketplaceItemType; search?: string; tags?: string[] },\\n 46 | \\t): MarketplaceItem[] {\\n 47 | \\t\\treturn items.filter((item) => {\\n 48 | \\t\\t\\t// Type filter\\n 49 | \\t\\t\\tif (filters.type && item.type !== filters.type) {\\n 50 | \\t\\t\\t\\treturn false\\n 51 | \\t\\t\\t}\\n 52 | \\n 53 | \\t\\t\\t// Search filter\\n 54 | \\t\\t\\tif (filters.search) {\\n 55 | \\t\\t\\t\\tconst searchTerm = filters.search.toLowerCase()\\n 56 | \\t\\t\\t\\tconst searchableText = `${item.name} ${item.description}`.toLowerCase()\\n 57 | \\t\\t\\t\\tif (!searchableText.includes(searchTerm)) {\\n 58 | \\t\\t\\t\\t\\treturn false\\n 59 | \\t\\t\\t\\t}\\n 60 | \\t\\t\\t}\\n 61 | \\n 62 | \\t\\t\\t// Tags filter\\n 63 | \\t\\t\\tif (filters.tags?.length) {\\n 64 | \\t\\t\\t\\tif (!item.tags?.some((tag) => filters.tags!.includes(tag))) {\\n 65 | \\t\\t\\t\\t\\treturn false\\n 66 | \\t\\t\\t\\t}\\n 67 | \\t\\t\\t}\\n 68 | \\n 69 | \\t\\t\\treturn true\\n 70 | \\t\\t})\\n 71 | \\t}\\n 72 | \\n 73 | \\tasync updateWithFilteredItems(filters: {\\n 74 | \\t\\ttype?: MarketplaceItemType\\n 75 | \\t\\tsearch?: string\\n 76 | \\t\\ttags?: string[]\\n 77 | \\t}): Promise<MarketplaceItem[]> {\\n 78 | \\t\\tconst allItems = await this.getCurrentItems()\\n 79 | \\n 80 | \\t\\tif (!filters.type && !filters.search && (!filters.tags || filters.tags.length === 0)) {\\n 81 | \\t\\t\\treturn allItems\\n 82 | \\t\\t}\\n 83 | \\n 84 | \\t\\treturn this.filterItems(allItems, filters)\\n 85 | \\t}\\n 86 | \\n 87 | \\tasync installMarketplaceItem(\\n 88 | \\t\\titem: MarketplaceItem,\\n 89 | \\t\\toptions?: { target?: \\\"global\\\" | \\\"project\\\"; parameters?: Record<string, any> },\\n 90 | \\t): Promise<string> {\\n 91 | \\t\\tconst { target = \\\"project\\\", parameters } = options || {}\\n 92 | \\n 93 | \\t\\tvscode.window.showInformationMessage(t(\\\"marketplace:installation.installing\\\", { itemName: item.name }))\\n 94 | \\n 95 | \\t\\ttry {\\n 96 | \\t\\t\\tconst result = await this.installer.installItem(item, { target, parameters })\\n 97 | \\t\\t\\tvscode.window.showInformationMessage(t(\\\"marketplace:installation.installSuccess\\\", { itemName: item.name }))\\n 98 | \\n 99 | \\t\\t\\t// Capture telemetry for successful installation\\n100 | \\t\\t\\tconst telemetryProperties: Record<string, any> = {}\\n101 | \\t\\t\\tif (parameters && Object.keys(parameters).length > 0) {\\n102 | \\t\\t\\t\\ttelemetryProperties.hasParameters = true\\n103 | \\t\\t\\t\\t// For MCP items with multiple installation methods, track which one was used\\n104 | \\t\\t\\t\\tif (item.type === \\\"mcp\\\" && parameters._selectedIndex !== undefined && Array.isArray(item.content)) {\\n105 | \\t\\t\\t\\t\\tconst selectedMethod = item.content[parameters._selectedIndex]\\n106 | \\t\\t\\t\\t\\tif (selectedMethod && selectedMethod.name) {\\n107 | \\t\\t\\t\\t\\t\\ttelemetryProperties.installationMethodName = selectedMethod.name\\n108 | \\t\\t\\t\\t\\t}\\n109 | \\t\\t\\t\\t}\\n110 | \\t\\t\\t}\\n111 | \\n112 | \\t\\t\\tTelemetryService.instance.captureMarketplaceItemInstalled(\\n113 | \\t\\t\\t\\titem.id,\\n114 | \\t\\t\\t\\titem.type,\\n115 | \\t\\t\\t\\titem.name,\\n116 | \\t\\t\\t\\ttarget,\\n117 | \\t\\t\\t\\ttelemetryProperties,\\n118 | \\t\\t\\t)\\n119 | \\n120 | \\t\\t\\t// Open the config file that was modified, optionally at the specific line\\n121 | \\t\\t\\tconst document = await vscode.workspace.openTextDocument(result.filePath)\\n122 | \\t\\t\\tconst options: vscode.TextDocumentShowOptions = {}\\n123 | \\n124 | \\t\\t\\tif (result.line !== undefined) {\\n125 | \\t\\t\\t\\t// Position cursor at the line where content was added\\n126 | \\t\\t\\t\\toptions.selection = new vscode.Range(result.line - 1, 0, result.line - 1, 0)\\n127 | \\t\\t\\t}\\n128 | \\n129 | \\t\\t\\tawait vscode.window.showTextDocument(document, options)\\n130 | \\n131 | \\t\\t\\treturn result.filePath\\n132 | \\t\\t} catch (error) {\\n133 | \\t\\t\\tconst errorMessage = error instanceof Error ? error.message : String(error)\\n134 | \\t\\t\\tvscode.window.showErrorMessage(\\n135 | \\t\\t\\t\\tt(\\\"marketplace:installation.installError\\\", { itemName: item.name, errorMessage }),\\n136 | \\t\\t\\t)\\n137 | \\t\\t\\tthrow error\\n138 | \\t\\t}\\n139 | \\t}\\n140 | \\n141 | \\tasync removeInstalledMarketplaceItem(\\n142 | \\t\\titem: MarketplaceItem,\\n143 | \\t\\toptions?: { target?: \\\"global\\\" | \\\"project\\\" },\\n144 | \\t): Promise<void> {\\n145 | \\t\\tconst { target = \\\"project\\\" } = options || {}\\n146 | \\n147 | \\t\\tvscode.window.showInformationMessage(t(\\\"marketplace:installation.removing\\\", { itemName: item.name }))\\n148 | \\n149 | \\t\\ttry {\\n150 | \\t\\t\\tawait this.installer.removeItem(item, { target })\\n151 | \\t\\t\\tvscode.window.showInformationMessage(t(\\\"marketplace:installation.removeSuccess\\\", { itemName: item.name }))\\n152 | \\n153 | \\t\\t\\t// Capture telemetry for successful removal\\n154 | \\t\\t\\tTelemetryService.instance.captureMarketplaceItemRemoved(item.id, item.type, item.name, target)\\n155 | \\t\\t} catch (error) {\\n156 | \\t\\t\\tconst errorMessage = error instanceof Error ? error.message : String(error)\\n157 | \\t\\t\\tvscode.window.showErrorMessage(\\n158 | \\t\\t\\t\\tt(\\\"marketplace:installation.removeError\\\", { itemName: item.name, errorMessage }),\\n159 | \\t\\t\\t)\\n160 | \\t\\t\\tthrow error\\n161 | \\t\\t}\\n162 | \\t}\\n163 | \\n164 | \\tasync cleanup(): Promise<void> {\\n165 | \\t\\t// Clear API cache if needed\\n166 | \\t\\tthis.configLoader.clearCache()\\n167 | \\t}\\n168 | \\n169 | \\t/**\\n170 | \\t * Get installation metadata by checking config files for installed items\\n171 | \\t */\\n172 | \\tasync getInstallationMetadata(): Promise<{\\n173 | \\t\\tproject: Record<string, { type: string }>\\n174 | \\t\\tglobal: Record<string, { type: string }>\\n175 | \\t}> {\\n176 | \\t\\tconst metadata = {\\n177 | \\t\\t\\tproject: {} as Record<string, { type: string }>,\\n178 | \\t\\t\\tglobal: {} as Record<string, { type: string }>,\\n179 | \\t\\t}\\n180 | \\n181 | \\t\\t// Check project-level installations\\n182 | \\t\\tawait this.checkProjectInstallations(metadata.project)\\n183 | \\n184 | \\t\\t// Check global-level installations\\n185 | \\t\\tawait this.checkGlobalInstallations(metadata.global)\\n186 | \\n187 | \\t\\treturn metadata\\n188 | \\t}\\n189 | \\n190 | \\t/**\\n191 | \\t * Check for project-level installed items\\n192 | \\t */\\n193 | \\tprivate async checkProjectInstallations(metadata: Record<string, { type: string }>): Promise<void> {\\n194 | \\t\\ttry {\\n195 | \\t\\t\\tconst workspaceFolder = vscode.workspace.workspaceFolders?.[0]\\n196 | \\t\\t\\tif (!workspaceFolder) {\\n197 | \\t\\t\\t\\treturn // No workspace, no project installations\\n198 | \\t\\t\\t}\\n199 | \\n200 | \\t\\t\\t// Check modes in .roomodes\\n201 | \\t\\t\\tconst projectModesPath = path.join(workspaceFolder.uri.fsPath, \\\".roomodes\\\")\\n202 | \\t\\t\\ttry {\\n203 | \\t\\t\\t\\tconst content = await fs.readFile(projectModesPath, \\\"utf-8\\\")\\n204 | \\t\\t\\t\\tconst data = yaml.parse(content)\\n205 | \\t\\t\\t\\tif (data?.customModes && Array.isArray(data.customModes)) {\\n206 | \\t\\t\\t\\t\\tfor (const mode of data.customModes) {\\n207 | \\t\\t\\t\\t\\t\\tif (mode.slug) {\\n208 | \\t\\t\\t\\t\\t\\t\\tmetadata[mode.slug] = {\\n209 | \\t\\t\\t\\t\\t\\t\\t\\ttype: \\\"mode\\\",\\n210 | \\t\\t\\t\\t\\t\\t\\t}\\n211 | \\t\\t\\t\\t\\t\\t}\\n212 | \\t\\t\\t\\t\\t}\\n213 | \\t\\t\\t\\t}\\n214 | \\t\\t\\t} catch (error) {\\n215 | \\t\\t\\t\\t// File doesn't exist or can't be read, skip\\n216 | \\t\\t\\t}\\n217 | \\n218 | \\t\\t\\t// Check MCPs in .roo/mcp.json\\n219 | \\t\\t\\tconst projectMcpPath = path.join(workspaceFolder.uri.fsPath, \\\".roo\\\", \\\"mcp.json\\\")\\n220 | \\t\\t\\ttry {\\n221 | \\t\\t\\t\\tconst content = await fs.readFile(projectMcpPath, \\\"utf-8\\\")\\n222 | \\t\\t\\t\\tconst data = JSON.parse(content)\\n223 | \\t\\t\\t\\tif (data?.mcpServers && typeof data.mcpServers === \\\"object\\\") {\\n224 | \\t\\t\\t\\t\\tfor (const serverName of Object.keys(data.mcpServers)) {\\n225 | \\t\\t\\t\\t\\t\\tmetadata[serverName] = {\\n226 | \\t\\t\\t\\t\\t\\t\\ttype: \\\"mcp\\\",\\n227 | \\t\\t\\t\\t\\t\\t}\\n228 | \\t\\t\\t\\t\\t}\\n229 | \\t\\t\\t\\t}\\n230 | \\t\\t\\t} catch (error) {\\n231 | \\t\\t\\t\\t// File doesn't exist or can't be read, skip\\n232 | \\t\\t\\t}\\n233 | \\t\\t} catch (error) {\\n234 | \\t\\t\\tconsole.error(\\\"Error checking project installations:\\\", error)\\n235 | \\t\\t}\\n236 | \\t}\\n237 | \\n238 | \\t/**\\n239 | \\t * Check for global-level installed items\\n240 | \\t */\\n241 | \\tprivate async checkGlobalInstallations(metadata: Record<string, { type: string }>): Promise<void> {\\n242 | \\t\\ttry {\\n243 | \\t\\t\\tconst globalSettingsPath = await ensureSettingsDirectoryExists(this.context)\\n244 | \\n245 | \\t\\t\\t// Check global modes\\n246 | \\t\\t\\tconst globalModesPath = path.join(globalSettingsPath, GlobalFileNames.customModes)\\n247 | \\t\\t\\ttry {\\n248 | \\t\\t\\t\\tconst content = await fs.readFile(globalModesPath, \\\"utf-8\\\")\\n249 | \\t\\t\\t\\tconst data = yaml.parse(content)\\n250 | \\t\\t\\t\\tif (data?.customModes && Array.isArray(data.customModes)) {\\n251 | \\t\\t\\t\\t\\tfor (const mode of data.customModes) {\\n252 | \\t\\t\\t\\t\\t\\tif (mode.slug) {\\n253 | \\t\\t\\t\\t\\t\\t\\tmetadata[mode.slug] = {\\n254 | \\t\\t\\t\\t\\t\\t\\t\\ttype: \\\"mode\\\",\\n255 | \\t\\t\\t\\t\\t\\t\\t}\\n256 | \\t\\t\\t\\t\\t\\t}\\n257 | \\t\\t\\t\\t\\t}\\n258 | \\t\\t\\t\\t}\\n259 | \\t\\t\\t} catch (error) {\\n260 | \\t\\t\\t\\t// File doesn't exist or can't be read, skip\\n261 | \\t\\t\\t}\\n262 | \\n263 | \\t\\t\\t// Check global MCPs\\n264 | \\t\\t\\tconst globalMcpPath = path.join(globalSettingsPath, GlobalFileNames.mcpSettings)\\n265 | \\t\\t\\ttry {\\n266 | \\t\\t\\t\\tconst content = await fs.readFile(globalMcpPath, \\\"utf-8\\\")\\n267 | \\t\\t\\t\\tconst data = JSON.parse(content)\\n268 | \\t\\t\\t\\tif (data?.mcpServers && typeof data.mcpServers === \\\"object\\\") {\\n269 | \\t\\t\\t\\t\\tfor (const serverName of Object.keys(data.mcpServers)) {\\n270 | \\t\\t\\t\\t\\t\\tmetadata[serverName] = {\\n271 | \\t\\t\\t\\t\\t\\t\\ttype: \\\"mcp\\\",\\n272 | \\t\\t\\t\\t\\t\\t}\\n273 | \\t\\t\\t\\t\\t}\\n274 | \\t\\t\\t\\t}\\n275 | \\t\\t\\t} catch (error) {\\n276 | \\t\\t\\t\\t// File doesn't exist or can't be read, skip\\n277 | \\t\\t\\t}\\n278 | \\t\\t} catch (error) {\\n279 | \\t\\t\\tconsole.error(\\\"Error checking global installations:\\\", error)\\n280 | \\t\\t}\\n281 | \\t}\\n282 | }\\n</content>\\n</file>\\n<file><path>src/services/marketplace/RemoteConfigLoader.ts</path>\\n<content lines=\\\"1-129\\\">\\n 1 | import axios from \\\"axios\\\"\\n 2 | import * as yaml from \\\"yaml\\\"\\n 3 | import { z } from \\\"zod\\\"\\n 4 | import { getRooCodeApiUrl } from \\\"@roo-code/cloud\\\"\\n 5 | import type { MarketplaceItem, MarketplaceItemType } from \\\"@roo-code/types\\\"\\n 6 | import { modeMarketplaceItemSchema, mcpMarketplaceItemSchema } from \\\"@roo-code/types\\\"\\n 7 | \\n 8 | // Response schemas for YAML API responses\\n 9 | const modeMarketplaceResponse = z.object({\\n 10 | \\titems: z.array(modeMarketplaceItemSchema),\\n 11 | })\\n 12 | \\n 13 | const mcpMarketplaceResponse = z.object({\\n 14 | \\titems: z.array(mcpMarketplaceItemSchema),\\n 15 | })\\n 16 | \\n 17 | export class RemoteConfigLoader {\\n 18 | \\tprivate apiBaseUrl: string\\n 19 | \\tprivate cache: Map<string, { data: MarketplaceItem[]; timestamp: number }> = new Map()\\n 20 | \\tprivate cacheDuration = 5 * 60 * 1000 // 5 minutes\\n 21 | \\n 22 | \\tconstructor() {\\n 23 | \\t\\tthis.apiBaseUrl = getRooCodeApiUrl()\\n 24 | \\t}\\n 25 | \\n 26 | \\tasync loadAllItems(): Promise<MarketplaceItem[]> {\\n 27 | \\t\\tconst items: MarketplaceItem[] = []\\n 28 | \\n 29 | \\t\\tconst [modes, mcps] = await Promise.all([this.fetchModes(), this.fetchMcps()])\\n 30 | \\n 31 | \\t\\titems.push(...modes, ...mcps)\\n 32 | \\t\\treturn items\\n 33 | \\t}\\n 34 | \\n 35 | \\tprivate async fetchModes(): Promise<MarketplaceItem[]> {\\n 36 | \\t\\tconst cacheKey = \\\"modes\\\"\\n 37 | \\t\\tconst cached = this.getFromCache(cacheKey)\\n 38 | \\t\\tif (cached) return cached\\n 39 | \\n 40 | \\t\\tconst data = await this.fetchWithRetry<string>(`${this.apiBaseUrl}/api/marketplace/modes`)\\n 41 | \\n 42 | \\t\\t// Parse and validate YAML response\\n 43 | \\t\\tconst yamlData = yaml.parse(data)\\n 44 | \\t\\tconst validated = modeMarketplaceResponse.parse(yamlData)\\n 45 | \\n 46 | \\t\\tconst items: MarketplaceItem[] = validated.items.map((item) => ({\\n 47 | \\t\\t\\ttype: \\\"mode\\\" as const,\\n 48 | \\t\\t\\t...item,\\n 49 | \\t\\t}))\\n 50 | \\n 51 | \\t\\tthis.setCache(cacheKey, items)\\n 52 | \\t\\treturn items\\n 53 | \\t}\\n 54 | \\n 55 | \\tprivate async fetchMcps(): Promise<MarketplaceItem[]> {\\n 56 | \\t\\tconst cacheKey = \\\"mcps\\\"\\n 57 | \\t\\tconst cached = this.getFromCache(cacheKey)\\n 58 | \\t\\tif (cached) return cached\\n 59 | \\n 60 | \\t\\tconst data = await this.fetchWithRetry<string>(`${this.apiBaseUrl}/api/marketplace/mcps`)\\n 61 | \\n 62 | \\t\\t// Parse and validate YAML response\\n 63 | \\t\\tconst yamlData = yaml.parse(data)\\n 64 | \\t\\tconst validated = mcpMarketplaceResponse.parse(yamlData)\\n 65 | \\n 66 | \\t\\tconst items: MarketplaceItem[] = validated.items.map((item) => ({\\n 67 | \\t\\t\\ttype: \\\"mcp\\\" as const,\\n 68 | \\t\\t\\t...item,\\n 69 | \\t\\t}))\\n 70 | \\n 71 | \\t\\tthis.setCache(cacheKey, items)\\n 72 | \\t\\treturn items\\n 73 | \\t}\\n 74 | \\n 75 | \\tprivate async fetchWithRetry<T>(url: string, maxRetries = 3): Promise<T> {\\n 76 | \\t\\tlet lastError: Error\\n 77 | \\n 78 | \\t\\tfor (let i = 0; i < maxRetries; i++) {\\n 79 | \\t\\t\\ttry {\\n 80 | \\t\\t\\t\\tconst response = await axios.get(url, {\\n 81 | \\t\\t\\t\\t\\ttimeout: 10000, // 10 second timeout\\n 82 | \\t\\t\\t\\t\\theaders: {\\n 83 | \\t\\t\\t\\t\\t\\tAccept: \\\"application/json\\\",\\n 84 | \\t\\t\\t\\t\\t\\t\\\"Content-Type\\\": \\\"application/json\\\",\\n 85 | \\t\\t\\t\\t\\t},\\n 86 | \\t\\t\\t\\t})\\n 87 | \\t\\t\\t\\treturn response.data as T\\n 88 | \\t\\t\\t} catch (error) {\\n 89 | \\t\\t\\t\\tlastError = error as Error\\n 90 | \\t\\t\\t\\tif (i < maxRetries - 1) {\\n 91 | \\t\\t\\t\\t\\t// Exponential backoff: 1s, 2s, 4s\\n 92 | \\t\\t\\t\\t\\tconst delay = Math.pow(2, i) * 1000\\n 93 | \\t\\t\\t\\t\\tawait new Promise((resolve) => setTimeout(resolve, delay))\\n 94 | \\t\\t\\t\\t}\\n 95 | \\t\\t\\t}\\n 96 | \\t\\t}\\n 97 | \\n 98 | \\t\\tthrow lastError!\\n 99 | \\t}\\n100 | \\n101 | \\tasync getItem(id: string, type: MarketplaceItemType): Promise<MarketplaceItem | null> {\\n102 | \\t\\tconst items = await this.loadAllItems()\\n103 | \\t\\treturn items.find((item) => item.id === id && item.type === type) || null\\n104 | \\t}\\n105 | \\n106 | \\tprivate getFromCache(key: string): MarketplaceItem[] | null {\\n107 | \\t\\tconst cached = this.cache.get(key)\\n108 | \\t\\tif (!cached) return null\\n109 | \\n110 | \\t\\tconst now = Date.now()\\n111 | \\t\\tif (now - cached.timestamp > this.cacheDuration) {\\n112 | \\t\\t\\tthis.cache.delete(key)\\n113 | \\t\\t\\treturn null\\n114 | \\t\\t}\\n115 | \\n116 | \\t\\treturn cached.data\\n117 | \\t}\\n118 | \\n119 | \\tprivate setCache(key: string, data: MarketplaceItem[]): void {\\n120 | \\t\\tthis.cache.set(key, {\\n121 | \\t\\t\\tdata,\\n122 | \\t\\t\\ttimestamp: Date.now(),\\n123 | \\t\\t})\\n124 | \\t}\\n125 | \\n126 | \\tclearCache(): void {\\n127 | \\t\\tthis.cache.clear()\\n128 | \\t}\\n129 | }\\n</content>\\n</file>\\n</files>\\n\\nLoading...\"}"
|
||
}
|
||
[2025-06-18T08:43:12.982Z] {
|
||
"ts": 1750236192333,
|
||
"type": "say",
|
||
"say": "text",
|
||
"text": "Now let me check the experiments configuration to understand how the marketplace feature is controlled:",
|
||
"partial": false
|
||
}
|
||
[2025-06-18T08:43:13.228Z] {
|
||
"ts": 1750236192982,
|
||
"type": "ask",
|
||
"ask": "tool",
|
||
"text": "{\"tool\":\"readFile\",\"path\":\"src/shared/experiments.ts\",\"isOutsideWorkspace\":false,\"content\":\"/roo/repos/Roo-Code/src/shared/experiments.ts\",\"reason\":\"\"}",
|
||
"partial": false
|
||
}
|
||
[2025-06-18T08:43:13.482Z] {
|
||
"ts": 1750236193478,
|
||
"type": "say",
|
||
"say": "api_req_started",
|
||
"text": "{\"request\":\"[read_file for 'src/shared/experiments.ts'. Reading multiple files at once is more efficient for the LLM. If other files are relevant to your current task, please read them simultaneously.] Result:\\n\\n<files>\\n<file><path>src/shared/experiments.ts</path>\\n<content lines=\\\"1-35\\\">\\n 1 | import type { AssertEqual, Equals, Keys, Values, ExperimentId, Experiments } from \\\"@roo-code/types\\\"\\n 2 | \\n 3 | export const EXPERIMENT_IDS = {\\n 4 | \\tMARKETPLACE: \\\"marketplace\\\",\\n 5 | \\tMULTI_FILE_APPLY_DIFF: \\\"multiFileApplyDiff\\\",\\n 6 | \\tDISABLE_COMPLETION_COMMAND: \\\"disableCompletionCommand\\\",\\n 7 | \\tPOWER_STEERING: \\\"powerSteering\\\",\\n 8 | } as const satisfies Record<string, ExperimentId>\\n 9 | \\n10 | type _AssertExperimentIds = AssertEqual<Equals<ExperimentId, Values<typeof EXPERIMENT_IDS>>>\\n11 | \\n12 | type ExperimentKey = Keys<typeof EXPERIMENT_IDS>\\n13 | \\n14 | interface ExperimentConfig {\\n15 | \\tenabled: boolean\\n16 | }\\n17 | \\n18 | export const experimentConfigsMap: Record<ExperimentKey, ExperimentConfig> = {\\n19 | \\tMARKETPLACE: { enabled: false },\\n20 | \\tMULTI_FILE_APPLY_DIFF: { enabled: false },\\n21 | \\tDISABLE_COMPLETION_COMMAND: { enabled: false },\\n22 | \\tPOWER_STEERING: { enabled: false },\\n23 | }\\n24 | \\n25 | export const experimentDefault = Object.fromEntries(\\n26 | \\tObject.entries(experimentConfigsMap).map(([_, config]) => [\\n27 | \\t\\tEXPERIMENT_IDS[_ as keyof typeof EXPERIMENT_IDS] as ExperimentId,\\n28 | \\t\\tconfig.enabled,\\n29 | \\t]),\\n30 | ) as Record<ExperimentId, boolean>\\n31 | \\n32 | export const experiments = {\\n33 | \\tget: (id: ExperimentKey): ExperimentConfig | undefined => experimentConfigsMap[id],\\n34 | \\tisEnabled: (experimentsConfig: Experiments, id: ExperimentId) => experimentsConfig[id] ?? experimentDefault[id],\\n35 | } as const\\n</content>\\n</file>\\n</files>\\n\\nLoading...\"}"
|
||
}
|
||
[2025-06-18T08:43:18.027Z] {
|
||
"ts": 1750236197744,
|
||
"type": "say",
|
||
"say": "text",
|
||
"text": "Now let me check the package.json to see if there are any settings related to marketplace:",
|
||
"partial": false
|
||
}
|
||
[2025-06-18T08:43:18.377Z] {
|
||
"ts": 1750236198027,
|
||
"type": "ask",
|
||
"ask": "tool",
|
||
"text": "{\"tool\":\"readFile\",\"path\":\"src/package.json\",\"isOutsideWorkspace\":false,\"content\":\"/roo/repos/Roo-Code/src/package.json\",\"reason\":\"\"}",
|
||
"partial": false
|
||
}
|
||
[2025-06-18T08:43:18.528Z] {
|
||
"ts": 1750236198524,
|
||
"type": "say",
|
||
"say": "api_req_started",
|
||
"text": "{\"request\":\"[read_file for 'src/package.json'. Reading multiple files at once is more efficient for the LLM. If other files are relevant to your current task, please read them simultaneously.] Result:\\n\\n<files>\\n<file><path>src/package.json</path>\\n<content lines=\\\"1-473\\\">\\n 1 | {\\n 2 | \\t\\\"name\\\": \\\"roo-cline\\\",\\n 3 | \\t\\\"displayName\\\": \\\"%extension.displayName%\\\",\\n 4 | \\t\\\"description\\\": \\\"%extension.description%\\\",\\n 5 | \\t\\\"publisher\\\": \\\"RooVeterinaryInc\\\",\\n 6 | \\t\\\"version\\\": \\\"3.20.3\\\",\\n 7 | \\t\\\"icon\\\": \\\"assets/icons/icon.png\\\",\\n 8 | \\t\\\"galleryBanner\\\": {\\n 9 | \\t\\t\\\"color\\\": \\\"#617A91\\\",\\n 10 | \\t\\t\\\"theme\\\": \\\"dark\\\"\\n 11 | \\t},\\n 12 | \\t\\\"engines\\\": {\\n 13 | \\t\\t\\\"vscode\\\": \\\"^1.84.0\\\",\\n 14 | \\t\\t\\\"node\\\": \\\"20.19.2\\\"\\n 15 | \\t},\\n 16 | \\t\\\"author\\\": {\\n 17 | \\t\\t\\\"name\\\": \\\"Roo Code\\\"\\n 18 | \\t},\\n 19 | \\t\\\"repository\\\": {\\n 20 | \\t\\t\\\"type\\\": \\\"git\\\",\\n 21 | \\t\\t\\\"url\\\": \\\"https://github.com/RooCodeInc/Roo-Code\\\"\\n 22 | \\t},\\n 23 | \\t\\\"homepage\\\": \\\"https://github.com/RooCodeInc/Roo-Code\\\",\\n 24 | \\t\\\"categories\\\": [\\n 25 | \\t\\t\\\"AI\\\",\\n 26 | \\t\\t\\\"Chat\\\",\\n 27 | \\t\\t\\\"Programming Languages\\\",\\n 28 | \\t\\t\\\"Education\\\",\\n 29 | \\t\\t\\\"Snippets\\\",\\n 30 | \\t\\t\\\"Testing\\\"\\n 31 | \\t],\\n 32 | \\t\\\"keywords\\\": [\\n 33 | \\t\\t\\\"cline\\\",\\n 34 | \\t\\t\\\"claude\\\",\\n 35 | \\t\\t\\\"dev\\\",\\n 36 | \\t\\t\\\"mcp\\\",\\n 37 | \\t\\t\\\"openrouter\\\",\\n 38 | \\t\\t\\\"coding\\\",\\n 39 | \\t\\t\\\"agent\\\",\\n 40 | \\t\\t\\\"autonomous\\\",\\n 41 | \\t\\t\\\"chatgpt\\\",\\n 42 | \\t\\t\\\"sonnet\\\",\\n 43 | \\t\\t\\\"ai\\\",\\n 44 | \\t\\t\\\"llama\\\",\\n 45 | \\t\\t\\\"roo code\\\",\\n 46 | \\t\\t\\\"roocode\\\"\\n 47 | \\t],\\n 48 | \\t\\\"activationEvents\\\": [\\n 49 | \\t\\t\\\"onLanguage\\\",\\n 50 | \\t\\t\\\"onStartupFinished\\\"\\n 51 | \\t],\\n 52 | \\t\\\"main\\\": \\\"./dist/extension.js\\\",\\n 53 | \\t\\\"contributes\\\": {\\n 54 | \\t\\t\\\"viewsContainers\\\": {\\n 55 | \\t\\t\\t\\\"activitybar\\\": [\\n 56 | \\t\\t\\t\\t{\\n 57 | \\t\\t\\t\\t\\t\\\"id\\\": \\\"roo-cline-ActivityBar\\\",\\n 58 | \\t\\t\\t\\t\\t\\\"title\\\": \\\"%views.activitybar.title%\\\",\\n 59 | \\t\\t\\t\\t\\t\\\"icon\\\": \\\"assets/icons/icon.svg\\\"\\n 60 | \\t\\t\\t\\t}\\n 61 | \\t\\t\\t]\\n 62 | \\t\\t},\\n 63 | \\t\\t\\\"views\\\": {\\n 64 | \\t\\t\\t\\\"roo-cline-ActivityBar\\\": [\\n 65 | \\t\\t\\t\\t{\\n 66 | \\t\\t\\t\\t\\t\\\"type\\\": \\\"webview\\\",\\n 67 | \\t\\t\\t\\t\\t\\\"id\\\": \\\"roo-cline.SidebarProvider\\\",\\n 68 | \\t\\t\\t\\t\\t\\\"name\\\": \\\"%views.sidebar.name%\\\"\\n 69 | \\t\\t\\t\\t}\\n 70 | \\t\\t\\t]\\n 71 | \\t\\t},\\n 72 | \\t\\t\\\"commands\\\": [\\n 73 | \\t\\t\\t{\\n 74 | \\t\\t\\t\\t\\\"command\\\": \\\"roo-cline.plusButtonClicked\\\",\\n 75 | \\t\\t\\t\\t\\\"title\\\": \\\"%command.newTask.title%\\\",\\n 76 | \\t\\t\\t\\t\\\"icon\\\": \\\"$(add)\\\"\\n 77 | \\t\\t\\t},\\n 78 | \\t\\t\\t{\\n 79 | \\t\\t\\t\\t\\\"command\\\": \\\"roo-cline.mcpButtonClicked\\\",\\n 80 | \\t\\t\\t\\t\\\"title\\\": \\\"%command.mcpServers.title%\\\",\\n 81 | \\t\\t\\t\\t\\\"icon\\\": \\\"$(server)\\\"\\n 82 | \\t\\t\\t},\\n 83 | \\t\\t\\t{\\n 84 | \\t\\t\\t\\t\\\"command\\\": \\\"roo-cline.promptsButtonClicked\\\",\\n 85 | \\t\\t\\t\\t\\\"title\\\": \\\"%command.prompts.title%\\\",\\n 86 | \\t\\t\\t\\t\\\"icon\\\": \\\"$(organization)\\\"\\n 87 | \\t\\t\\t},\\n 88 | \\t\\t\\t{\\n 89 | \\t\\t\\t\\t\\\"command\\\": \\\"roo-cline.historyButtonClicked\\\",\\n 90 | \\t\\t\\t\\t\\\"title\\\": \\\"%command.history.title%\\\",\\n 91 | \\t\\t\\t\\t\\\"icon\\\": \\\"$(history)\\\"\\n 92 | \\t\\t\\t},\\n 93 | \\t\\t\\t{\\n 94 | \\t\\t\\t\\t\\\"command\\\": \\\"roo-cline.marketplaceButtonClicked\\\",\\n 95 | \\t\\t\\t\\t\\\"title\\\": \\\"%command.marketplace.title%\\\",\\n 96 | \\t\\t\\t\\t\\\"icon\\\": \\\"$(extensions)\\\"\\n 97 | \\t\\t\\t},\\n 98 | \\t\\t\\t{\\n 99 | \\t\\t\\t\\t\\\"command\\\": \\\"roo-cline.popoutButtonClicked\\\",\\n100 | \\t\\t\\t\\t\\\"title\\\": \\\"%command.openInEditor.title%\\\",\\n101 | \\t\\t\\t\\t\\\"icon\\\": \\\"$(link-external)\\\"\\n102 | \\t\\t\\t},\\n103 | \\t\\t\\t{\\n104 | \\t\\t\\t\\t\\\"command\\\": \\\"roo-cline.accountButtonClicked\\\",\\n105 | \\t\\t\\t\\t\\\"title\\\": \\\"Account\\\",\\n106 | \\t\\t\\t\\t\\\"icon\\\": \\\"$(account)\\\",\\n107 | \\t\\t\\t\\t\\\"when\\\": \\\"config.roo-cline.rooCodeCloudEnabled\\\"\\n108 | \\t\\t\\t},\\n109 | \\t\\t\\t{\\n110 | \\t\\t\\t\\t\\\"command\\\": \\\"roo-cline.settingsButtonClicked\\\",\\n111 | \\t\\t\\t\\t\\\"title\\\": \\\"%command.settings.title%\\\",\\n112 | \\t\\t\\t\\t\\\"icon\\\": \\\"$(settings-gear)\\\"\\n113 | \\t\\t\\t},\\n114 | \\t\\t\\t{\\n115 | \\t\\t\\t\\t\\\"command\\\": \\\"roo-cline.openInNewTab\\\",\\n116 | \\t\\t\\t\\t\\\"title\\\": \\\"%command.openInNewTab.title%\\\",\\n117 | \\t\\t\\t\\t\\\"category\\\": \\\"%configuration.title%\\\"\\n118 | \\t\\t\\t},\\n119 | \\t\\t\\t{\\n120 | \\t\\t\\t\\t\\\"command\\\": \\\"roo-cline.explainCode\\\",\\n121 | \\t\\t\\t\\t\\\"title\\\": \\\"%command.explainCode.title%\\\",\\n122 | \\t\\t\\t\\t\\\"category\\\": \\\"%configuration.title%\\\"\\n123 | \\t\\t\\t},\\n124 | \\t\\t\\t{\\n125 | \\t\\t\\t\\t\\\"command\\\": \\\"roo-cline.fixCode\\\",\\n126 | \\t\\t\\t\\t\\\"title\\\": \\\"%command.fixCode.title%\\\",\\n127 | \\t\\t\\t\\t\\\"category\\\": \\\"%configuration.title%\\\"\\n128 | \\t\\t\\t},\\n129 | \\t\\t\\t{\\n130 | \\t\\t\\t\\t\\\"command\\\": \\\"roo-cline.improveCode\\\",\\n131 | \\t\\t\\t\\t\\\"title\\\": \\\"%command.improveCode.title%\\\",\\n132 | \\t\\t\\t\\t\\\"category\\\": \\\"%configuration.title%\\\"\\n133 | \\t\\t\\t},\\n134 | \\t\\t\\t{\\n135 | \\t\\t\\t\\t\\\"command\\\": \\\"roo-cline.addToContext\\\",\\n136 | \\t\\t\\t\\t\\\"title\\\": \\\"%command.addToContext.title%\\\",\\n137 | \\t\\t\\t\\t\\\"category\\\": \\\"%configuration.title%\\\"\\n138 | \\t\\t\\t},\\n139 | \\t\\t\\t{\\n140 | \\t\\t\\t\\t\\\"command\\\": \\\"roo-cline.newTask\\\",\\n141 | \\t\\t\\t\\t\\\"title\\\": \\\"%command.newTask.title%\\\",\\n142 | \\t\\t\\t\\t\\\"category\\\": \\\"%configuration.title%\\\"\\n143 | \\t\\t\\t},\\n144 | \\t\\t\\t{\\n145 | \\t\\t\\t\\t\\\"command\\\": \\\"roo-cline.terminalAddToContext\\\",\\n146 | \\t\\t\\t\\t\\\"title\\\": \\\"%command.terminal.addToContext.title%\\\",\\n147 | \\t\\t\\t\\t\\\"category\\\": \\\"Terminal\\\"\\n148 | \\t\\t\\t},\\n149 | \\t\\t\\t{\\n150 | \\t\\t\\t\\t\\\"command\\\": \\\"roo-cline.terminalFixCommand\\\",\\n151 | \\t\\t\\t\\t\\\"title\\\": \\\"%command.terminal.fixCommand.title%\\\",\\n152 | \\t\\t\\t\\t\\\"category\\\": \\\"Terminal\\\"\\n153 | \\t\\t\\t},\\n154 | \\t\\t\\t{\\n155 | \\t\\t\\t\\t\\\"command\\\": \\\"roo-cline.terminalExplainCommand\\\",\\n156 | \\t\\t\\t\\t\\\"title\\\": \\\"%command.terminal.explainCommand.title%\\\",\\n157 | \\t\\t\\t\\t\\\"category\\\": \\\"Terminal\\\"\\n158 | \\t\\t\\t},\\n159 | \\t\\t\\t{\\n160 | \\t\\t\\t\\t\\\"command\\\": \\\"roo-cline.setCustomStoragePath\\\",\\n161 | \\t\\t\\t\\t\\\"title\\\": \\\"%command.setCustomStoragePath.title%\\\",\\n162 | \\t\\t\\t\\t\\\"category\\\": \\\"%configuration.title%\\\"\\n163 | \\t\\t\\t},\\n164 | \\t\\t\\t{\\n165 | \\t\\t\\t\\t\\\"command\\\": \\\"roo-cline.focusInput\\\",\\n166 | \\t\\t\\t\\t\\\"title\\\": \\\"%command.focusInput.title%\\\",\\n167 | \\t\\t\\t\\t\\\"category\\\": \\\"%configuration.title%\\\"\\n168 | \\t\\t\\t},\\n169 | \\t\\t\\t{\\n170 | \\t\\t\\t\\t\\\"command\\\": \\\"roo-cline.acceptInput\\\",\\n171 | \\t\\t\\t\\t\\\"title\\\": \\\"%command.acceptInput.title%\\\",\\n172 | \\t\\t\\t\\t\\\"category\\\": \\\"%configuration.title%\\\"\\n173 | \\t\\t\\t}\\n174 | \\t\\t],\\n175 | \\t\\t\\\"menus\\\": {\\n176 | \\t\\t\\t\\\"editor/context\\\": [\\n177 | \\t\\t\\t\\t{\\n178 | \\t\\t\\t\\t\\t\\\"submenu\\\": \\\"roo-cline.contextMenu\\\",\\n179 | \\t\\t\\t\\t\\t\\\"group\\\": \\\"1\\\"\\n180 | \\t\\t\\t\\t}\\n181 | \\t\\t\\t],\\n182 | \\t\\t\\t\\\"roo-cline.contextMenu\\\": [\\n183 | \\t\\t\\t\\t{\\n184 | \\t\\t\\t\\t\\t\\\"command\\\": \\\"roo-cline.addToContext\\\",\\n185 | \\t\\t\\t\\t\\t\\\"group\\\": \\\"1_actions@1\\\"\\n186 | \\t\\t\\t\\t},\\n187 | \\t\\t\\t\\t{\\n188 | \\t\\t\\t\\t\\t\\\"command\\\": \\\"roo-cline.explainCode\\\",\\n189 | \\t\\t\\t\\t\\t\\\"group\\\": \\\"1_actions@2\\\"\\n190 | \\t\\t\\t\\t},\\n191 | \\t\\t\\t\\t{\\n192 | \\t\\t\\t\\t\\t\\\"command\\\": \\\"roo-cline.improveCode\\\",\\n193 | \\t\\t\\t\\t\\t\\\"group\\\": \\\"1_actions@3\\\"\\n194 | \\t\\t\\t\\t}\\n195 | \\t\\t\\t],\\n196 | \\t\\t\\t\\\"terminal/context\\\": [\\n197 | \\t\\t\\t\\t{\\n198 | \\t\\t\\t\\t\\t\\\"submenu\\\": \\\"roo-cline.terminalMenu\\\",\\n199 | \\t\\t\\t\\t\\t\\\"group\\\": \\\"2\\\"\\n200 | \\t\\t\\t\\t}\\n201 | \\t\\t\\t],\\n202 | \\t\\t\\t\\\"roo-cline.terminalMenu\\\": [\\n203 | \\t\\t\\t\\t{\\n204 | \\t\\t\\t\\t\\t\\\"command\\\": \\\"roo-cline.terminalAddToContext\\\",\\n205 | \\t\\t\\t\\t\\t\\\"group\\\": \\\"1_actions@1\\\"\\n206 | \\t\\t\\t\\t},\\n207 | \\t\\t\\t\\t{\\n208 | \\t\\t\\t\\t\\t\\\"command\\\": \\\"roo-cline.terminalFixCommand\\\",\\n209 | \\t\\t\\t\\t\\t\\\"group\\\": \\\"1_actions@2\\\"\\n210 | \\t\\t\\t\\t},\\n211 | \\t\\t\\t\\t{\\n212 | \\t\\t\\t\\t\\t\\\"command\\\": \\\"roo-cline.terminalExplainCommand\\\",\\n213 | \\t\\t\\t\\t\\t\\\"group\\\": \\\"1_actions@3\\\"\\n214 | \\t\\t\\t\\t}\\n215 | \\t\\t\\t],\\n216 | \\t\\t\\t\\\"view/title\\\": [\\n217 | \\t\\t\\t\\t{\\n218 | \\t\\t\\t\\t\\t\\\"command\\\": \\\"roo-cline.plusButtonClicked\\\",\\n219 | \\t\\t\\t\\t\\t\\\"group\\\": \\\"navigation@1\\\",\\n220 | \\t\\t\\t\\t\\t\\\"when\\\": \\\"view == roo-cline.SidebarProvider\\\"\\n221 | \\t\\t\\t\\t},\\n222 | \\t\\t\\t\\t{\\n223 | \\t\\t\\t\\t\\t\\\"command\\\": \\\"roo-cline.promptsButtonClicked\\\",\\n224 | \\t\\t\\t\\t\\t\\\"group\\\": \\\"navigation@2\\\",\\n225 | \\t\\t\\t\\t\\t\\\"when\\\": \\\"view == roo-cline.SidebarProvider\\\"\\n226 | \\t\\t\\t\\t},\\n227 | \\t\\t\\t\\t{\\n228 | \\t\\t\\t\\t\\t\\\"command\\\": \\\"roo-cline.mcpButtonClicked\\\",\\n229 | \\t\\t\\t\\t\\t\\\"group\\\": \\\"navigation@3\\\",\\n230 | \\t\\t\\t\\t\\t\\\"when\\\": \\\"view == roo-cline.SidebarProvider\\\"\\n231 | \\t\\t\\t\\t},\\n232 | \\t\\t\\t\\t{\\n233 | \\t\\t\\t\\t\\t\\\"command\\\": \\\"roo-cline.marketplaceButtonClicked\\\",\\n234 | \\t\\t\\t\\t\\t\\\"group\\\": \\\"navigation@4\\\",\\n235 | \\t\\t\\t\\t\\t\\\"when\\\": \\\"view == roo-cline.SidebarProvider && roo-cline.marketplaceEnabled\\\"\\n236 | \\t\\t\\t\\t},\\n237 | \\t\\t\\t\\t{\\n238 | \\t\\t\\t\\t\\t\\\"command\\\": \\\"roo-cline.historyButtonClicked\\\",\\n239 | \\t\\t\\t\\t\\t\\\"group\\\": \\\"navigation@5\\\",\\n240 | \\t\\t\\t\\t\\t\\\"when\\\": \\\"view == roo-cline.SidebarProvider\\\"\\n241 | \\t\\t\\t\\t},\\n242 | \\t\\t\\t\\t{\\n243 | \\t\\t\\t\\t\\t\\\"command\\\": \\\"roo-cline.popoutButtonClicked\\\",\\n244 | \\t\\t\\t\\t\\t\\\"group\\\": \\\"navigation@6\\\",\\n245 | \\t\\t\\t\\t\\t\\\"when\\\": \\\"view == roo-cline.SidebarProvider\\\"\\n246 | \\t\\t\\t\\t},\\n247 | \\t\\t\\t\\t{\\n248 | \\t\\t\\t\\t\\t\\\"command\\\": \\\"roo-cline.accountButtonClicked\\\",\\n249 | \\t\\t\\t\\t\\t\\\"group\\\": \\\"navigation@7\\\",\\n250 | \\t\\t\\t\\t\\t\\\"when\\\": \\\"view == roo-cline.SidebarProvider && config.roo-cline.rooCodeCloudEnabled\\\"\\n251 | \\t\\t\\t\\t},\\n252 | \\t\\t\\t\\t{\\n253 | \\t\\t\\t\\t\\t\\\"command\\\": \\\"roo-cline.settingsButtonClicked\\\",\\n254 | \\t\\t\\t\\t\\t\\\"group\\\": \\\"navigation@8\\\",\\n255 | \\t\\t\\t\\t\\t\\\"when\\\": \\\"view == roo-cline.SidebarProvider\\\"\\n256 | \\t\\t\\t\\t}\\n257 | \\t\\t\\t],\\n258 | \\t\\t\\t\\\"editor/title\\\": [\\n259 | \\t\\t\\t\\t{\\n260 | \\t\\t\\t\\t\\t\\\"command\\\": \\\"roo-cline.plusButtonClicked\\\",\\n261 | \\t\\t\\t\\t\\t\\\"group\\\": \\\"navigation@1\\\",\\n262 | \\t\\t\\t\\t\\t\\\"when\\\": \\\"activeWebviewPanelId == roo-cline.TabPanelProvider\\\"\\n263 | \\t\\t\\t\\t},\\n264 | \\t\\t\\t\\t{\\n265 | \\t\\t\\t\\t\\t\\\"command\\\": \\\"roo-cline.promptsButtonClicked\\\",\\n266 | \\t\\t\\t\\t\\t\\\"group\\\": \\\"navigation@2\\\",\\n267 | \\t\\t\\t\\t\\t\\\"when\\\": \\\"activeWebviewPanelId == roo-cline.TabPanelProvider\\\"\\n268 | \\t\\t\\t\\t},\\n269 | \\t\\t\\t\\t{\\n270 | \\t\\t\\t\\t\\t\\\"command\\\": \\\"roo-cline.mcpButtonClicked\\\",\\n271 | \\t\\t\\t\\t\\t\\\"group\\\": \\\"navigation@3\\\",\\n272 | \\t\\t\\t\\t\\t\\\"when\\\": \\\"activeWebviewPanelId == roo-cline.TabPanelProvider\\\"\\n273 | \\t\\t\\t\\t},\\n274 | \\t\\t\\t\\t{\\n275 | \\t\\t\\t\\t\\t\\\"command\\\": \\\"roo-cline.marketplaceButtonClicked\\\",\\n276 | \\t\\t\\t\\t\\t\\\"group\\\": \\\"navigation@4\\\",\\n277 | \\t\\t\\t\\t\\t\\\"when\\\": \\\"activeWebviewPanelId == roo-cline.TabPanelProvider && roo-cline.marketplaceEnabled\\\"\\n278 | \\t\\t\\t\\t},\\n279 | \\t\\t\\t\\t{\\n280 | \\t\\t\\t\\t\\t\\\"command\\\": \\\"roo-cline.historyButtonClicked\\\",\\n281 | \\t\\t\\t\\t\\t\\\"group\\\": \\\"navigation@5\\\",\\n282 | \\t\\t\\t\\t\\t\\\"when\\\": \\\"activeWebviewPanelId == roo-cline.TabPanelProvider\\\"\\n283 | \\t\\t\\t\\t},\\n284 | \\t\\t\\t\\t{\\n285 | \\t\\t\\t\\t\\t\\\"command\\\": \\\"roo-cline.accountButtonClicked\\\",\\n286 | \\t\\t\\t\\t\\t\\\"group\\\": \\\"navigation@6\\\",\\n287 | \\t\\t\\t\\t\\t\\\"when\\\": \\\"activeWebviewPanelId == roo-cline.TabPanelProvider && config.roo-cline.rooCodeCloudEnabled\\\"\\n288 | \\t\\t\\t\\t},\\n289 | \\t\\t\\t\\t{\\n290 | \\t\\t\\t\\t\\t\\\"command\\\": \\\"roo-cline.settingsButtonClicked\\\",\\n291 | \\t\\t\\t\\t\\t\\\"group\\\": \\\"navigation@7\\\",\\n292 | \\t\\t\\t\\t\\t\\\"when\\\": \\\"activeWebviewPanelId == roo-cline.TabPanelProvider\\\"\\n293 | \\t\\t\\t\\t}\\n294 | \\t\\t\\t]\\n295 | \\t\\t},\\n296 | \\t\\t\\\"submenus\\\": [\\n297 | \\t\\t\\t{\\n298 | \\t\\t\\t\\t\\\"id\\\": \\\"roo-cline.contextMenu\\\",\\n299 | \\t\\t\\t\\t\\\"label\\\": \\\"%views.contextMenu.label%\\\"\\n300 | \\t\\t\\t},\\n301 | \\t\\t\\t{\\n302 | \\t\\t\\t\\t\\\"id\\\": \\\"roo-cline.terminalMenu\\\",\\n303 | \\t\\t\\t\\t\\\"label\\\": \\\"%views.terminalMenu.label%\\\"\\n304 | \\t\\t\\t}\\n305 | \\t\\t],\\n306 | \\t\\t\\\"configuration\\\": {\\n307 | \\t\\t\\t\\\"title\\\": \\\"%configuration.title%\\\",\\n308 | \\t\\t\\t\\\"properties\\\": {\\n309 | \\t\\t\\t\\t\\\"roo-cline.allowedCommands\\\": {\\n310 | \\t\\t\\t\\t\\t\\\"type\\\": \\\"array\\\",\\n311 | \\t\\t\\t\\t\\t\\\"items\\\": {\\n312 | \\t\\t\\t\\t\\t\\t\\\"type\\\": \\\"string\\\"\\n313 | \\t\\t\\t\\t\\t},\\n314 | \\t\\t\\t\\t\\t\\\"default\\\": [\\n315 | \\t\\t\\t\\t\\t\\t\\\"npm test\\\",\\n316 | \\t\\t\\t\\t\\t\\t\\\"npm install\\\",\\n317 | \\t\\t\\t\\t\\t\\t\\\"tsc\\\",\\n318 | \\t\\t\\t\\t\\t\\t\\\"git log\\\",\\n319 | \\t\\t\\t\\t\\t\\t\\\"git diff\\\",\\n320 | \\t\\t\\t\\t\\t\\t\\\"git show\\\"\\n321 | \\t\\t\\t\\t\\t],\\n322 | \\t\\t\\t\\t\\t\\\"description\\\": \\\"%commands.allowedCommands.description%\\\"\\n323 | \\t\\t\\t\\t},\\n324 | \\t\\t\\t\\t\\\"roo-cline.vsCodeLmModelSelector\\\": {\\n325 | \\t\\t\\t\\t\\t\\\"type\\\": \\\"object\\\",\\n326 | \\t\\t\\t\\t\\t\\\"properties\\\": {\\n327 | \\t\\t\\t\\t\\t\\t\\\"vendor\\\": {\\n328 | \\t\\t\\t\\t\\t\\t\\t\\\"type\\\": \\\"string\\\",\\n329 | \\t\\t\\t\\t\\t\\t\\t\\\"description\\\": \\\"%settings.vsCodeLmModelSelector.vendor.description%\\\"\\n330 | \\t\\t\\t\\t\\t\\t},\\n331 | \\t\\t\\t\\t\\t\\t\\\"family\\\": {\\n332 | \\t\\t\\t\\t\\t\\t\\t\\\"type\\\": \\\"string\\\",\\n333 | \\t\\t\\t\\t\\t\\t\\t\\\"description\\\": \\\"%settings.vsCodeLmModelSelector.family.description%\\\"\\n334 | \\t\\t\\t\\t\\t\\t}\\n335 | \\t\\t\\t\\t\\t},\\n336 | \\t\\t\\t\\t\\t\\\"description\\\": \\\"%settings.vsCodeLmModelSelector.description%\\\"\\n337 | \\t\\t\\t\\t},\\n338 | \\t\\t\\t\\t\\\"roo-cline.customStoragePath\\\": {\\n339 | \\t\\t\\t\\t\\t\\\"type\\\": \\\"string\\\",\\n340 | \\t\\t\\t\\t\\t\\\"default\\\": \\\"\\\",\\n341 | \\t\\t\\t\\t\\t\\\"description\\\": \\\"%settings.customStoragePath.description%\\\"\\n342 | \\t\\t\\t\\t},\\n343 | \\t\\t\\t\\t\\\"roo-cline.rooCodeCloudEnabled\\\": {\\n344 | \\t\\t\\t\\t\\t\\\"type\\\": \\\"boolean\\\",\\n345 | \\t\\t\\t\\t\\t\\\"default\\\": false,\\n346 | \\t\\t\\t\\t\\t\\\"description\\\": \\\"%settings.rooCodeCloudEnabled.description%\\\"\\n347 | \\t\\t\\t\\t}\\n348 | \\t\\t\\t}\\n349 | \\t\\t}\\n350 | \\t},\\n351 | \\t\\\"scripts\\\": {\\n352 | \\t\\t\\\"lint\\\": \\\"eslint . --ext=ts --max-warnings=0\\\",\\n353 | \\t\\t\\\"check-types\\\": \\\"tsc --noEmit\\\",\\n354 | \\t\\t\\\"pretest\\\": \\\"turbo run bundle --cwd ..\\\",\\n355 | \\t\\t\\\"test\\\": \\\"jest -w=40% && vitest run\\\",\\n356 | \\t\\t\\\"format\\\": \\\"prettier --write .\\\",\\n357 | \\t\\t\\\"bundle\\\": \\\"node esbuild.mjs\\\",\\n358 | \\t\\t\\\"vscode:prepublish\\\": \\\"pnpm bundle --production\\\",\\n359 | \\t\\t\\\"vsix\\\": \\\"mkdirp ../bin && vsce package --no-dependencies --out ../bin\\\",\\n360 | \\t\\t\\\"publish:marketplace\\\": \\\"vsce publish --no-dependencies && ovsx publish --no-dependencies\\\",\\n361 | \\t\\t\\\"watch:bundle\\\": \\\"pnpm bundle --watch\\\",\\n362 | \\t\\t\\\"watch:tsc\\\": \\\"tsc --noEmit --watch --project tsconfig.json\\\",\\n363 | \\t\\t\\\"clean\\\": \\\"rimraf README.md CHANGELOG.md LICENSE dist mock .turbo\\\"\\n364 | \\t},\\n365 | \\t\\\"dependencies\\\": {\\n366 | \\t\\t\\\"@anthropic-ai/bedrock-sdk\\\": \\\"^0.10.2\\\",\\n367 | \\t\\t\\\"@anthropic-ai/sdk\\\": \\\"^0.37.0\\\",\\n368 | \\t\\t\\\"@anthropic-ai/vertex-sdk\\\": \\\"^0.7.0\\\",\\n369 | \\t\\t\\\"@aws-sdk/client-bedrock-runtime\\\": \\\"^3.779.0\\\",\\n370 | \\t\\t\\\"@aws-sdk/credential-providers\\\": \\\"^3.806.0\\\",\\n371 | \\t\\t\\\"@google/genai\\\": \\\"^1.0.0\\\",\\n372 | \\t\\t\\\"@mistralai/mistralai\\\": \\\"^1.3.6\\\",\\n373 | \\t\\t\\\"@modelcontextprotocol/sdk\\\": \\\"^1.9.0\\\",\\n374 | \\t\\t\\\"@roo-code/cloud\\\": \\\"workspace:^\\\",\\n375 | \\t\\t\\\"@roo-code/ipc\\\": \\\"workspace:^\\\",\\n376 | \\t\\t\\\"@roo-code/telemetry\\\": \\\"workspace:^\\\",\\n377 | \\t\\t\\\"@roo-code/types\\\": \\\"workspace:^\\\",\\n378 | \\t\\t\\\"@qdrant/js-client-rest\\\": \\\"^1.14.0\\\",\\n379 | \\t\\t\\\"@types/lodash.debounce\\\": \\\"^4.0.9\\\",\\n380 | \\t\\t\\\"@vscode/codicons\\\": \\\"^0.0.36\\\",\\n381 | \\t\\t\\\"async-mutex\\\": \\\"^0.5.0\\\",\\n382 | \\t\\t\\\"axios\\\": \\\"^1.7.4\\\",\\n383 | \\t\\t\\\"cheerio\\\": \\\"^1.0.0\\\",\\n384 | \\t\\t\\\"chokidar\\\": \\\"^4.0.1\\\",\\n385 | \\t\\t\\\"clone-deep\\\": \\\"^4.0.1\\\",\\n386 | \\t\\t\\\"default-shell\\\": \\\"^2.2.0\\\",\\n387 | \\t\\t\\\"delay\\\": \\\"^6.0.0\\\",\\n388 | \\t\\t\\\"diff\\\": \\\"^5.2.0\\\",\\n389 | \\t\\t\\\"diff-match-patch\\\": \\\"^1.0.5\\\",\\n390 | \\t\\t\\\"fast-deep-equal\\\": \\\"^3.1.3\\\",\\n391 | \\t\\t\\\"fast-xml-parser\\\": \\\"^5.0.0\\\",\\n392 | \\t\\t\\\"fastest-levenshtein\\\": \\\"^1.0.16\\\",\\n393 | \\t\\t\\\"fzf\\\": \\\"^0.5.2\\\",\\n394 | \\t\\t\\\"get-folder-size\\\": \\\"^5.0.0\\\",\\n395 | \\t\\t\\\"google-auth-library\\\": \\\"^9.15.1\\\",\\n396 | \\t\\t\\\"i18next\\\": \\\"^25.0.0\\\",\\n397 | \\t\\t\\\"ignore\\\": \\\"^7.0.3\\\",\\n398 | \\t\\t\\\"isbinaryfile\\\": \\\"^5.0.2\\\",\\n399 | \\t\\t\\\"lodash.debounce\\\": \\\"^4.0.8\\\",\\n400 | \\t\\t\\\"mammoth\\\": \\\"^1.8.0\\\",\\n401 | \\t\\t\\\"monaco-vscode-textmate-theme-converter\\\": \\\"^0.1.7\\\",\\n402 | \\t\\t\\\"node-cache\\\": \\\"^5.1.2\\\",\\n403 | \\t\\t\\\"node-ipc\\\": \\\"^12.0.0\\\",\\n404 | \\t\\t\\\"openai\\\": \\\"^4.78.1\\\",\\n405 | \\t\\t\\\"os-name\\\": \\\"^6.0.0\\\",\\n406 | \\t\\t\\\"p-limit\\\": \\\"^6.2.0\\\",\\n407 | \\t\\t\\\"p-wait-for\\\": \\\"^5.0.2\\\",\\n408 | \\t\\t\\\"pdf-parse\\\": \\\"^1.1.1\\\",\\n409 | \\t\\t\\\"pkce-challenge\\\": \\\"^4.1.0\\\",\\n410 | \\t\\t\\\"pretty-bytes\\\": \\\"^6.1.1\\\",\\n411 | \\t\\t\\\"ps-tree\\\": \\\"^1.2.0\\\",\\n412 | \\t\\t\\\"puppeteer-chromium-resolver\\\": \\\"^23.0.0\\\",\\n413 | \\t\\t\\\"puppeteer-core\\\": \\\"^23.4.0\\\",\\n414 | \\t\\t\\\"reconnecting-eventsource\\\": \\\"^1.6.4\\\",\\n415 | \\t\\t\\\"sanitize-filename\\\": \\\"^1.6.3\\\",\\n416 | \\t\\t\\\"say\\\": \\\"^0.16.0\\\",\\n417 | \\t\\t\\\"serialize-error\\\": \\\"^11.0.3\\\",\\n418 | \\t\\t\\\"simple-git\\\": \\\"^3.27.0\\\",\\n419 | \\t\\t\\\"sound-play\\\": \\\"^1.1.0\\\",\\n420 | \\t\\t\\\"string-similarity\\\": \\\"^4.0.4\\\",\\n421 | \\t\\t\\\"strip-ansi\\\": \\\"^7.1.0\\\",\\n422 | \\t\\t\\\"strip-bom\\\": \\\"^5.0.0\\\",\\n423 | \\t\\t\\\"tiktoken\\\": \\\"^1.0.21\\\",\\n424 | \\t\\t\\\"tmp\\\": \\\"^0.2.3\\\",\\n425 | \\t\\t\\\"tree-sitter-wasms\\\": \\\"^0.1.11\\\",\\n426 | \\t\\t\\\"turndown\\\": \\\"^7.2.0\\\",\\n427 | \\t\\t\\\"uuid\\\": \\\"^11.1.0\\\",\\n428 | \\t\\t\\\"vscode-material-icons\\\": \\\"^0.1.1\\\",\\n429 | \\t\\t\\\"web-tree-sitter\\\": \\\"^0.22.6\\\",\\n430 | \\t\\t\\\"workerpool\\\": \\\"^9.2.0\\\",\\n431 | \\t\\t\\\"yaml\\\": \\\"^2.8.0\\\",\\n432 | \\t\\t\\\"zod\\\": \\\"^3.25.61\\\"\\n433 | \\t},\\n434 | \\t\\\"devDependencies\\\": {\\n435 | \\t\\t\\\"@jest/globals\\\": \\\"^29.7.0\\\",\\n436 | \\t\\t\\\"@roo-code/build\\\": \\\"workspace:^\\\",\\n437 | \\t\\t\\\"@roo-code/config-eslint\\\": \\\"workspace:^\\\",\\n438 | \\t\\t\\\"@roo-code/config-typescript\\\": \\\"workspace:^\\\",\\n439 | \\t\\t\\\"@types/clone-deep\\\": \\\"^4.0.4\\\",\\n440 | \\t\\t\\\"@types/debug\\\": \\\"^4.1.12\\\",\\n441 | \\t\\t\\\"@types/diff\\\": \\\"^5.2.1\\\",\\n442 | \\t\\t\\\"@types/diff-match-patch\\\": \\\"^1.0.36\\\",\\n443 | \\t\\t\\\"@types/glob\\\": \\\"^8.1.0\\\",\\n444 | \\t\\t\\\"@types/jest\\\": \\\"^29.5.14\\\",\\n445 | \\t\\t\\\"@types/mocha\\\": \\\"^10.0.10\\\",\\n446 | \\t\\t\\\"@types/node\\\": \\\"20.x\\\",\\n447 | \\t\\t\\\"@types/node-cache\\\": \\\"^4.1.3\\\",\\n448 | \\t\\t\\\"@types/node-ipc\\\": \\\"^9.2.3\\\",\\n449 | \\t\\t\\\"@types/ps-tree\\\": \\\"^1.1.6\\\",\\n450 | \\t\\t\\\"@types/string-similarity\\\": \\\"^4.0.2\\\",\\n451 | \\t\\t\\\"@types/tmp\\\": \\\"^0.2.6\\\",\\n452 | \\t\\t\\\"@types/turndown\\\": \\\"^5.0.5\\\",\\n453 | \\t\\t\\\"@types/vscode\\\": \\\"^1.84.0\\\",\\n454 | \\t\\t\\\"@vscode/test-electron\\\": \\\"^2.5.2\\\",\\n455 | \\t\\t\\\"@vscode/vsce\\\": \\\"3.3.2\\\",\\n456 | \\t\\t\\\"esbuild\\\": \\\"^0.25.0\\\",\\n457 | \\t\\t\\\"execa\\\": \\\"^9.5.2\\\",\\n458 | \\t\\t\\\"glob\\\": \\\"^11.0.1\\\",\\n459 | \\t\\t\\\"jest\\\": \\\"^29.7.0\\\",\\n460 | \\t\\t\\\"jest-simple-dot-reporter\\\": \\\"^1.0.5\\\",\\n461 | \\t\\t\\\"mkdirp\\\": \\\"^3.0.1\\\",\\n462 | \\t\\t\\\"nock\\\": \\\"^14.0.4\\\",\\n463 | \\t\\t\\\"npm-run-all2\\\": \\\"^8.0.1\\\",\\n464 | \\t\\t\\\"ovsx\\\": \\\"0.10.4\\\",\\n465 | \\t\\t\\\"rimraf\\\": \\\"^6.0.1\\\",\\n466 | \\t\\t\\\"ts-jest\\\": \\\"^29.2.5\\\",\\n467 | \\t\\t\\\"tsup\\\": \\\"^8.4.0\\\",\\n468 | \\t\\t\\\"tsx\\\": \\\"^4.19.3\\\",\\n469 | \\t\\t\\\"typescript\\\": \\\"5.8.3\\\",\\n470 | \\t\\t\\\"vitest\\\": \\\"^3.1.3\\\",\\n471 | \\t\\t\\\"zod-to-ts\\\": \\\"^1.2.0\\\"\\n472 | \\t}\\n473 | }\\n</content>\\n</file>\\n</files>\\n\\nLoading...\"}"
|
||
}
|
||
[2025-06-18T08:43:24.948Z] {
|
||
"ts": 1750236202086,
|
||
"type": "say",
|
||
"say": "text",
|
||
"text": "Now I understand the issue. Let me analyze what's happening:\n\n1. The marketplace feature is controlled by an experiment flag (`MARKETPLACE`) which is currently disabled by default\n2. However, the code in `ClineProvider.ts` still tries to fetch marketplace items even when the experiment is disabled\n3. The timeout occurs in `RemoteConfigLoader.ts` at line 81 with a 10-second timeout\n4. Users in limited network environments can't access the marketplace API, causing timeouts\n\nThe issue is that the marketplace fetching happens regardless of the experiment setting. Let me check how the experiment is being used:",
|
||
"partial": false
|
||
}
|
||
[2025-06-18T08:43:25.479Z] {
|
||
"ts": 1750236204955,
|
||
"type": "ask",
|
||
"ask": "tool",
|
||
"text": "{\"tool\":\"searchFiles\",\"path\":\"src\",\"regex\":\"experiments\\\\.marketplace\",\"filePattern\":\"*.ts\",\"isOutsideWorkspace\":false,\"content\":\"Found 6 results.\\n\\n# src/core/webview/ClineProvider.ts\\n1257 | \\t\\t\\t`${Package.name}.marketplaceEnabled`,\\n1258 | \\t\\t\\texperiments.marketplace ?? false,\\n1259 | \\t\\t)\\n----\\n1353 | \\n1354 | \\t\\tif (experiments.marketplace) {\\n1355 | \\t\\t\\tmarketplaceItems = (await this.marketplaceManager.getCurrentItems()) || []\\n----\\n\\n# src/core/webview/webviewMessageHandler.ts\\n1469 | \\t\\t\\tconst { experiments } = await provider.getState()\\n1470 | \\t\\t\\tif (!experiments.marketplace) {\\n1471 | \\t\\t\\t\\tconsole.log(\\\"Marketplace: Feature disabled, skipping API call\\\")\\n----\\n1493 | \\t\\t\\tconst { experiments } = await provider.getState()\\n1494 | \\t\\t\\tif (!experiments.marketplace) {\\n1495 | \\t\\t\\t\\tconsole.log(\\\"Marketplace: Feature disabled, skipping installation\\\")\\n----\\n1529 | \\t\\t\\tconst { experiments } = await provider.getState()\\n1530 | \\t\\t\\tif (!experiments.marketplace) {\\n1531 | \\t\\t\\t\\tconsole.log(\\\"Marketplace: Feature disabled, skipping removal\\\")\\n----\\n1548 | \\t\\t\\tconst { experiments } = await provider.getState()\\n1549 | \\t\\t\\tif (!experiments.marketplace) {\\n1550 | \\t\\t\\t\\tconsole.log(\\\"Marketplace: Feature disabled, skipping installation with parameters\\\")\\n----\"}",
|
||
"partial": false,
|
||
"isProtected": false
|
||
}
|
||
[2025-06-18T08:43:25.653Z] {
|
||
"ts": 1750236205648,
|
||
"type": "say",
|
||
"say": "api_req_started",
|
||
"text": "{\"request\":\"[search_files for 'experiments\\\\.marketplace' in '*.ts'] Result:\\n\\nFound 6 results.\\n\\n# src/core/webview/ClineProvider.ts\\n1257 | \\t\\t\\t`${Package.name}.marketplaceEnabled`,\\n1258 | \\t\\t\\texperiments.marketplace ?? false,\\n1259 | \\t\\t)\\n----\\n1353 | \\n1354 | \\t\\tif (experiments.marketplace) {\\n1355 | \\t\\t\\tmarketplaceItems = (await this.marketplaceManager.getCurrentItems()) || []\\n----\\n\\n# src/core/webview/webviewMessageHandler.ts\\n1469 | \\t\\t\\tconst { experiments } = await provider.getState()\\n1470 | \\t\\t\\tif (!experiments.marketplace) {\\n1471 | \\t\\t\\t\\tconsole.log(\\\"Marketplace: Feature disabled, skipping API call\\\")\\n----\\n1493 | \\t\\t\\tconst { experiments } = await provider.getState()\\n1494 | \\t\\t\\tif (!experiments.marketplace) {\\n1495 | \\t\\t\\t\\tconsole.log(\\\"Marketplace: Feature disabled, skipping installation\\\")\\n----\\n1529 | \\t\\t\\tconst { experiments } = await provider.getState()\\n1530 | \\t\\t\\tif (!experiments.marketplace) {\\n1531 | \\t\\t\\t\\tconsole.log(\\\"Marketplace: Feature disabled, skipping removal\\\")\\n----\\n1548 | \\t\\t\\tconst { experiments } = await provider.getState()\\n1549 | \\t\\t\\tif (!experiments.marketplace) {\\n1550 | \\t\\t\\t\\tconsole.log(\\\"Marketplace: Feature disabled, skipping installation with parameters\\\")\\n----\\n\\nLoading...\"}"
|
||
}
|
||
[2025-06-18T08:43:30.880Z] {
|
||
"ts": 1750236208801,
|
||
"type": "say",
|
||
"say": "text",
|
||
"text": "Perfect! I can see the issue now. The code in `ClineProvider.ts` at lines 1354-1357 correctly checks if the marketplace experiment is enabled before fetching marketplace items. However, the issue reported suggests that this check might not be working properly, or there might be another code path that's causing the timeout.\n\nLet me also add a user setting to allow users to completely disable marketplace functionality for network-restricted environments. Let me first check if there are any other places where marketplace items are fetched:",
|
||
"partial": false
|
||
}
|
||
[2025-06-18T08:43:31.757Z] {
|
||
"ts": 1750236210876,
|
||
"type": "ask",
|
||
"ask": "tool",
|
||
"text": "{\"tool\":\"searchFiles\",\"path\":\"src\",\"regex\":\"getCurrentItems|loadAllItems|fetchModes|fetchMcps\",\"filePattern\":\"*.ts\",\"isOutsideWorkspace\":false,\"content\":\"Found 23 results.\\n\\n# src/services/marketplace/RemoteConfigLoader.ts\\n 25 | \\n 26 | \\tasync loadAllItems(): Promise<MarketplaceItem[]> {\\n 27 | \\t\\tconst items: MarketplaceItem[] = []\\n 28 | \\n 29 | \\t\\tconst [modes, mcps] = await Promise.all([this.fetchModes(), this.fetchMcps()])\\n 30 | \\n----\\n 34 | \\n 35 | \\tprivate async fetchModes(): Promise<MarketplaceItem[]> {\\n 36 | \\t\\tconst cacheKey = \\\"modes\\\"\\n----\\n 54 | \\n 55 | \\tprivate async fetchMcps(): Promise<MarketplaceItem[]> {\\n 56 | \\t\\tconst cacheKey = \\\"mcps\\\"\\n----\\n101 | \\tasync getItem(id: string, type: MarketplaceItemType): Promise<MarketplaceItem | null> {\\n102 | \\t\\tconst items = await this.loadAllItems()\\n103 | \\t\\treturn items.find((item) => item.id === id && item.type === type) || null\\n----\\n\\n# src/services/marketplace/MarketplaceManager.ts\\n 23 | \\t\\ttry {\\n 24 | \\t\\t\\tconst items = await this.configLoader.loadAllItems()\\n 25 | \\n----\\n 37 | \\n 38 | \\tasync getCurrentItems(): Promise<MarketplaceItem[]> {\\n 39 | \\t\\tconst result = await this.getMarketplaceItems()\\n----\\n 77 | \\t}): Promise<MarketplaceItem[]> {\\n 78 | \\t\\tconst allItems = await this.getCurrentItems()\\n 79 | \\n----\\n\\n# src/services/marketplace/__tests__/MarketplaceManager.test.ts\\n159 | \\n160 | \\t\\t\\t// Mock the loadAllItems method\\n161 | \\t\\t\\tjest.spyOn(manager[\\\"configLoader\\\"], \\\"loadAllItems\\\").mockResolvedValue(mockItems)\\n162 | \\n----\\n170 | \\t\\t\\t// Mock the config loader to throw an error\\n171 | \\t\\t\\tjest.spyOn(manager[\\\"configLoader\\\"], \\\"loadAllItems\\\").mockRejectedValue(new Error(\\\"API request failed\\\"))\\n172 | \\n----\\n\\n# src/services/marketplace/__tests__/RemoteConfigLoader.test.ts\\n 23 | \\n 24 | \\tdescribe(\\\"loadAllItems\\\", () => {\\n 25 | \\t\\tit(\\\"should fetch and combine modes and MCPs from API\\\", async () => {\\n----\\n 48 | \\n 49 | \\t\\t\\tconst items = await loader.loadAllItems()\\n 50 | \\n----\\n115 | \\t\\t\\t// First call - should hit API\\n116 | \\t\\t\\tconst items1 = await loader.loadAllItems()\\n117 | \\t\\t\\texpect(mockedAxios.get).toHaveBeenCalledTimes(2)\\n----\\n119 | \\t\\t\\t// Second call - should use cache\\n120 | \\t\\t\\tconst items2 = await loader.loadAllItems()\\n121 | \\t\\t\\texpect(mockedAxios.get).toHaveBeenCalledTimes(2) // Still 2, not 4\\n----\\n150 | \\n151 | \\t\\t\\tconst items = await loader.loadAllItems()\\n152 | \\n----\\n161 | \\n162 | \\t\\t\\tawait expect(loader.loadAllItems()).rejects.toThrow(\\\"Persistent network error\\\")\\n163 | \\n----\\n196 | \\t\\t\\t// Should throw validation error for invalid modes\\n197 | \\t\\t\\tawait expect(loader.loadAllItems()).rejects.toThrow()\\n198 | \\t\\t})\\n----\\n271 | \\t\\t\\t// First call\\n272 | \\t\\t\\tawait loader.loadAllItems()\\n273 | \\t\\t\\texpect(mockedAxios.get).toHaveBeenCalledTimes(2)\\n----\\n275 | \\t\\t\\t// Second call - should use cache\\n276 | \\t\\t\\tawait loader.loadAllItems()\\n277 | \\t\\t\\texpect(mockedAxios.get).toHaveBeenCalledTimes(2)\\n----\\n282 | \\t\\t\\t// Third call - should hit API again\\n283 | \\t\\t\\tawait loader.loadAllItems()\\n284 | \\t\\t\\texpect(mockedAxios.get).toHaveBeenCalledTimes(4)\\n----\\n314 | \\t\\t\\t// First call\\n315 | \\t\\t\\tawait loader.loadAllItems()\\n316 | \\t\\t\\texpect(mockedAxios.get).toHaveBeenCalledTimes(2)\\n----\\n318 | \\t\\t\\t// Second call immediately - should use cache\\n319 | \\t\\t\\tawait loader.loadAllItems()\\n320 | \\t\\t\\texpect(mockedAxios.get).toHaveBeenCalledTimes(2)\\n----\\n325 | \\t\\t\\t// Third call - cache should be expired\\n326 | \\t\\t\\tawait loader.loadAllItems()\\n327 | \\t\\t\\texpect(mockedAxios.get).toHaveBeenCalledTimes(4)\\n----\\n\\n# src/core/webview/ClineProvider.ts\\n1354 | \\t\\tif (experiments.marketplace) {\\n1355 | \\t\\t\\tmarketplaceItems = (await this.marketplaceManager.getCurrentItems()) || []\\n1356 | \\t\\t\\tmarketplaceInstalledMetadata = await this.marketplaceManager.getInstallationMetadata()\\n----\"}",
|
||
"partial": false,
|
||
"isProtected": false
|
||
}
|
||
[2025-06-18T08:43:31.886Z] {
|
||
"ts": 1750236211882,
|
||
"type": "say",
|
||
"say": "api_req_started",
|
||
"text": "{\"request\":\"[search_files for 'getCurrentItems|loadAllItems|fetchModes|fetchMcps' in '*.ts'] Result:\\n\\nFound 23 results.\\n\\n# src/services/marketplace/RemoteConfigLoader.ts\\n 25 | \\n 26 | \\tasync loadAllItems(): Promise<MarketplaceItem[]> {\\n 27 | \\t\\tconst items: MarketplaceItem[] = []\\n 28 | \\n 29 | \\t\\tconst [modes, mcps] = await Promise.all([this.fetchModes(), this.fetchMcps()])\\n 30 | \\n----\\n 34 | \\n 35 | \\tprivate async fetchModes(): Promise<MarketplaceItem[]> {\\n 36 | \\t\\tconst cacheKey = \\\"modes\\\"\\n----\\n 54 | \\n 55 | \\tprivate async fetchMcps(): Promise<MarketplaceItem[]> {\\n 56 | \\t\\tconst cacheKey = \\\"mcps\\\"\\n----\\n101 | \\tasync getItem(id: string, type: MarketplaceItemType): Promise<MarketplaceItem | null> {\\n102 | \\t\\tconst items = await this.loadAllItems()\\n103 | \\t\\treturn items.find((item) => item.id === id && item.type === type) || null\\n----\\n\\n# src/services/marketplace/MarketplaceManager.ts\\n 23 | \\t\\ttry {\\n 24 | \\t\\t\\tconst items = await this.configLoader.loadAllItems()\\n 25 | \\n----\\n 37 | \\n 38 | \\tasync getCurrentItems(): Promise<MarketplaceItem[]> {\\n 39 | \\t\\tconst result = await this.getMarketplaceItems()\\n----\\n 77 | \\t}): Promise<MarketplaceItem[]> {\\n 78 | \\t\\tconst allItems = await this.getCurrentItems()\\n 79 | \\n----\\n\\n# src/services/marketplace/__tests__/MarketplaceManager.test.ts\\n159 | \\n160 | \\t\\t\\t// Mock the loadAllItems method\\n161 | \\t\\t\\tjest.spyOn(manager[\\\"configLoader\\\"], \\\"loadAllItems\\\").mockResolvedValue(mockItems)\\n162 | \\n----\\n170 | \\t\\t\\t// Mock the config loader to throw an error\\n171 | \\t\\t\\tjest.spyOn(manager[\\\"configLoader\\\"], \\\"loadAllItems\\\").mockRejectedValue(new Error(\\\"API request failed\\\"))\\n172 | \\n----\\n\\n# src/services/marketplace/__tests__/RemoteConfigLoader.test.ts\\n 23 | \\n 24 | \\tdescribe(\\\"loadAllItems\\\", () => {\\n 25 | \\t\\tit(\\\"should fetch and combine modes and MCPs from API\\\", async () => {\\n----\\n 48 | \\n 49 | \\t\\t\\tconst items = await loader.loadAllItems()\\n 50 | \\n----\\n115 | \\t\\t\\t// First call - should hit API\\n116 | \\t\\t\\tconst items1 = await loader.loadAllItems()\\n117 | \\t\\t\\texpect(mockedAxios.get).toHaveBeenCalledTimes(2)\\n----\\n119 | \\t\\t\\t// Second call - should use cache\\n120 | \\t\\t\\tconst items2 = await loader.loadAllItems()\\n121 | \\t\\t\\texpect(mockedAxios.get).toHaveBeenCalledTimes(2) // Still 2, not 4\\n----\\n150 | \\n151 | \\t\\t\\tconst items = await loader.loadAllItems()\\n152 | \\n----\\n161 | \\n162 | \\t\\t\\tawait expect(loader.loadAllItems()).rejects.toThrow(\\\"Persistent network error\\\")\\n163 | \\n----\\n196 | \\t\\t\\t// Should throw validation error for invalid modes\\n197 | \\t\\t\\tawait expect(loader.loadAllItems()).rejects.toThrow()\\n198 | \\t\\t})\\n----\\n271 | \\t\\t\\t// First call\\n272 | \\t\\t\\tawait loader.loadAllItems()\\n273 | \\t\\t\\texpect(mockedAxios.get).toHaveBeenCalledTimes(2)\\n----\\n275 | \\t\\t\\t// Second call - should use cache\\n276 | \\t\\t\\tawait loader.loadAllItems()\\n277 | \\t\\t\\texpect(mockedAxios.get).toHaveBeenCalledTimes(2)\\n----\\n282 | \\t\\t\\t// Third call - should hit API again\\n283 | \\t\\t\\tawait loader.loadAllItems()\\n284 | \\t\\t\\texpect(mockedAxios.get).toHaveBeenCalledTimes(4)\\n----\\n314 | \\t\\t\\t// First call\\n315 | \\t\\t\\tawait loader.loadAllItems()\\n316 | \\t\\t\\texpect(mockedAxios.get).toHaveBeenCalledTimes(2)\\n----\\n318 | \\t\\t\\t// Second call immediately - should use cache\\n319 | \\t\\t\\tawait loader.loadAllItems()\\n320 | \\t\\t\\texpect(mockedAxios.get).toHaveBeenCalledTimes(2)\\n----\\n325 | \\t\\t\\t// Third call - cache should be expired\\n326 | \\t\\t\\tawait loader.loadAllItems()\\n327 | \\t\\t\\texpect(mockedAxios.get).toHaveBeenCalledTimes(4)\\n----\\n\\n# src/core/webview/ClineProvider.ts\\n1354 | \\t\\tif (experiments.marketplace) {\\n1355 | \\t\\t\\tmarketplaceItems = (await this.marketplaceManager.getCurrentItems()) || []\\n1356 | \\t\\t\\tmarketplaceInstalledMetadata = await this.marketplaceManager.getInstallationMetadata()\\n----\\n\\nLoading...\"}"
|
||
}
|
||
[2025-06-18T08:43:37.970Z] {
|
||
"ts": 1750236215357,
|
||
"type": "say",
|
||
"say": "text",
|
||
"text": "Now I understand the issue better. The problem is that the marketplace experiment is disabled by default, but the error suggests that marketplace items are still being fetched. Let me create a comprehensive solution:\n\n1. Add a user setting to disable marketplace functionality completely\n2. Ensure the marketplace experiment check is working properly\n3. Add better error handling for network timeouts\n4. Make the timeout configurable for users in limited network environments\n\nLet me start by creating the solution:",
|
||
"partial": false
|
||
}
|
||
[2025-06-18T08:43:41.172Z] {
|
||
"ts": 1750236218039,
|
||
"type": "ask",
|
||
"ask": "tool",
|
||
"text": "{\"tool\":\"appliedDiff\",\"path\":\"src/package.json\",\"diff\":\"<<<<<<< SEARCH\\n:start_line:346\\n-------\\n\\t\\t\\t\\t\\\"roo-cline.rooCodeCloudEnabled\\\": {\\n\\t\\t\\t\\t\\t\\\"type\\\": \\\"boolean\\\",\\n\\t\\t\\t\\t\\t\\\"default\\\": false,\\n\\t\\t\\t\\t\\t\\\"description\\\": \\\"%settings.rooCodeCloudEnabled.description%\\\"\\n\\t\\t\\t\\t}\\n=======\\n\\t\\t\\t\\t\\\"roo-cline.rooCodeCloudEnabled\\\": {\\n\\t\\t\\t\\t\\t\\\"type\\\": \\\"boolean\\\",\\n\\t\\t\\t\\t\\t\\\"default\\\": false,\\n\\t\\t\\t\\t\\t\\\"description\\\": \\\"%settings.rooCodeCloudEnabled.description%\\\"\\n\\t\\t\\t\\t},\\n\\t\\t\\t\\t\\\"roo-cline.disableMarketplace\\\": {\\n\\t\\t\\t\\t\\t\\\"type\\\": \\\"boolean\\\",\\n\\t\\t\\t\\t\\t\\\"default\\\": false,\\n\\t\\t\\t\\t\\t\\\"description\\\": \\\"%settings.disableMarketplace.description%\\\"\\n\\t\\t\\t\\t},\\n\\t\\t\\t\\t\\\"roo-cline.marketplaceTimeout\\\": {\\n\\t\\t\\t\\t\\t\\\"type\\\": \\\"number\\\",\\n\\t\\t\\t\\t\\t\\\"default\\\": 10000,\\n\\t\\t\\t\\t\\t\\\"minimum\\\": 1000,\\n\\t\\t\\t\\t\\t\\\"maximum\\\": 60000,\\n\\t\\t\\t\\t\\t\\\"description\\\": \\\"%settings.marketplaceTimeout.description%\\\"\\n\\t\\t\\t\\t}\\n>>>>>>> REPLACE\"}",
|
||
"partial": false,
|
||
"isProtected": false,
|
||
"progressStatus": {
|
||
"icon": "diff-multiple",
|
||
"text": "1"
|
||
}
|
||
}
|
||
[2025-06-18T08:43:42.374Z] {
|
||
"ts": 1750236222371,
|
||
"type": "say",
|
||
"say": "api_req_started",
|
||
"text": "{\"request\":\"[apply_diff for 'src/package.json'] Result:\\n\\n<file_write_result>\\n<path>src/package.json</path>\\n<operation>modified</operation>\\n<notice>\\n<i>You do not need to re-read the file, as you have seen all changes</i>\\n<i>Proceed with the task using these changes as the new baseline.</i>\\n</notice>\\n</file_write_result>\\n\\n\\nLoading...\"}"
|
||
}
|
||
[2025-06-18T08:43:49.206Z] {
|
||
"ts": 1750236228938,
|
||
"type": "say",
|
||
"say": "text",
|
||
"text": "Now let me add the localization strings for these new settings:",
|
||
"partial": false
|
||
}
|
||
[2025-06-18T08:43:49.838Z] {
|
||
"ts": 1750236229206,
|
||
"type": "ask",
|
||
"ask": "tool",
|
||
"text": "{\"tool\":\"readFile\",\"path\":\"src/package.nls.json\",\"isOutsideWorkspace\":false,\"content\":\"/roo/repos/Roo-Code/src/package.nls.json\",\"reason\":\"\"}",
|
||
"partial": false
|
||
}
|
||
[2025-06-18T08:43:50.088Z] {
|
||
"ts": 1750236230083,
|
||
"type": "say",
|
||
"say": "api_req_started",
|
||
"text": "{\"request\":\"[read_file for 'src/package.nls.json'. Reading multiple files at once is more efficient for the LLM. If other files are relevant to your current task, please read them simultaneously.] Result:\\n\\n<files>\\n<file><path>src/package.nls.json</path>\\n<content lines=\\\"1-34\\\">\\n 1 | {\\n 2 | \\t\\\"extension.displayName\\\": \\\"Roo Code (prev. Roo Cline)\\\",\\n 3 | \\t\\\"extension.description\\\": \\\"A whole dev team of AI agents in your editor.\\\",\\n 4 | \\t\\\"views.contextMenu.label\\\": \\\"Roo Code\\\",\\n 5 | \\t\\\"views.terminalMenu.label\\\": \\\"Roo Code\\\",\\n 6 | \\t\\\"views.activitybar.title\\\": \\\"Roo Code\\\",\\n 7 | \\t\\\"views.sidebar.name\\\": \\\"Roo Code\\\",\\n 8 | \\t\\\"command.newTask.title\\\": \\\"New Task\\\",\\n 9 | \\t\\\"command.mcpServers.title\\\": \\\"MCP Servers\\\",\\n10 | \\t\\\"command.prompts.title\\\": \\\"Modes\\\",\\n11 | \\t\\\"command.history.title\\\": \\\"History\\\",\\n12 | \\t\\\"command.marketplace.title\\\": \\\"Marketplace\\\",\\n13 | \\t\\\"command.openInEditor.title\\\": \\\"Open in Editor\\\",\\n14 | \\t\\\"command.settings.title\\\": \\\"Settings\\\",\\n15 | \\t\\\"command.documentation.title\\\": \\\"Documentation\\\",\\n16 | \\t\\\"command.openInNewTab.title\\\": \\\"Open In New Tab\\\",\\n17 | \\t\\\"command.explainCode.title\\\": \\\"Explain Code\\\",\\n18 | \\t\\\"command.fixCode.title\\\": \\\"Fix Code\\\",\\n19 | \\t\\\"command.improveCode.title\\\": \\\"Improve Code\\\",\\n20 | \\t\\\"command.addToContext.title\\\": \\\"Add To Context\\\",\\n21 | \\t\\\"command.focusInput.title\\\": \\\"Focus Input Field\\\",\\n22 | \\t\\\"command.setCustomStoragePath.title\\\": \\\"Set Custom Storage Path\\\",\\n23 | \\t\\\"command.terminal.addToContext.title\\\": \\\"Add Terminal Content to Context\\\",\\n24 | \\t\\\"command.terminal.fixCommand.title\\\": \\\"Fix This Command\\\",\\n25 | \\t\\\"command.terminal.explainCommand.title\\\": \\\"Explain This Command\\\",\\n26 | \\t\\\"command.acceptInput.title\\\": \\\"Accept Input/Suggestion\\\",\\n27 | \\t\\\"configuration.title\\\": \\\"Roo Code\\\",\\n28 | \\t\\\"commands.allowedCommands.description\\\": \\\"Commands that can be auto-executed when 'Always approve execute operations' is enabled\\\",\\n29 | \\t\\\"settings.vsCodeLmModelSelector.description\\\": \\\"Settings for VSCode Language Model API\\\",\\n30 | \\t\\\"settings.vsCodeLmModelSelector.vendor.description\\\": \\\"The vendor of the language model (e.g. copilot)\\\",\\n31 | \\t\\\"settings.vsCodeLmModelSelector.family.description\\\": \\\"The family of the language model (e.g. gpt-4)\\\",\\n32 | \\t\\\"settings.customStoragePath.description\\\": \\\"Custom storage path. Leave empty to use the default location. Supports absolute paths (e.g. 'D:\\\\\\\\RooCodeStorage')\\\",\\n33 | \\t\\\"settings.rooCodeCloudEnabled.description\\\": \\\"Enable Roo Code Cloud.\\\"\\n34 | }\\n</content>\\n</file>\\n</files>\\n\\nLoading...\"}"
|
||
}
|
||
[2025-06-18T08:43:53.300Z] {
|
||
"ts": 1750236233290,
|
||
"type": "say",
|
||
"say": "text",
|
||
"text": ""
|
||
}
|
||
[2025-06-18T08:43:57.034Z] {
|
||
"ts": 1750236233585,
|
||
"type": "ask",
|
||
"ask": "tool",
|
||
"text": "{\"tool\":\"appliedDiff\",\"path\":\"src/package.nls.json\",\"diff\":\"<<<<<<< SEARCH\\n:start_line:33\\n-------\\n\\t\\\"settings.rooCodeCloudEnabled.description\\\": \\\"Enable Roo Code Cloud.\\\"\\n=======\\n\\t\\\"settings.rooCodeCloudEnabled.description\\\": \\\"Enable Roo Code Cloud.\\\",\\n\\t\\\"settings.disableMarketplace.description\\\": \\\"Disable marketplace functionality completely. Useful for users in network-restricted environments.\\\",\\n\\t\\\"settings.marketplaceTimeout.description\\\": \\\"Timeout in milliseconds for marketplace API requests (1000-60000ms). Reduce for faster failure in limited network environments.\\\"\\n>>>>>>> REPLACE\"}",
|
||
"partial": false,
|
||
"isProtected": false,
|
||
"progressStatus": {
|
||
"icon": "diff-multiple",
|
||
"text": "1"
|
||
}
|
||
}
|
||
[2025-06-18T08:43:58.129Z] {
|
||
"ts": 1750236238126,
|
||
"type": "say",
|
||
"say": "api_req_started",
|
||
"text": "{\"request\":\"[apply_diff for 'src/package.nls.json'] Result:\\n\\n<file_write_result>\\n<path>src/package.nls.json</path>\\n<operation>modified</operation>\\n<notice>\\n<i>You do not need to re-read the file, as you have seen all changes</i>\\n<i>Proceed with the task using these changes as the new baseline.</i>\\n</notice>\\n</file_write_result>\\n\\n\\nLoading...\"}"
|
||
}
|
||
[2025-06-18T08:44:02.286Z] {
|
||
"ts": 1750236241625,
|
||
"type": "say",
|
||
"say": "text",
|
||
"text": "Now let me update the RemoteConfigLoader to use the configurable timeout and respect the disable marketplace setting:",
|
||
"partial": false
|
||
}
|
||
[2025-06-18T08:44:07.057Z] {
|
||
"ts": 1750236243116,
|
||
"type": "ask",
|
||
"ask": "tool",
|
||
"text": "{\"tool\":\"appliedDiff\",\"path\":\"src/services/marketplace/RemoteConfigLoader.ts\",\"diff\":\"<<<<<<< SEARCH\\n:start_line:1\\n-------\\nimport axios from \\\"axios\\\"\\nimport * as yaml from \\\"yaml\\\"\\nimport { z } from \\\"zod\\\"\\nimport { getRooCodeApiUrl } from \\\"@roo-code/cloud\\\"\\nimport type { MarketplaceItem, MarketplaceItemType } from \\\"@roo-code/types\\\"\\nimport { modeMarketplaceItemSchema, mcpMarketplaceItemSchema } from \\\"@roo-code/types\\\"\\n=======\\nimport axios from \\\"axios\\\"\\nimport * as yaml from \\\"yaml\\\"\\nimport { z } from \\\"zod\\\"\\nimport * as vscode from \\\"vscode\\\"\\nimport { getRooCodeApiUrl } from \\\"@roo-code/cloud\\\"\\nimport type { MarketplaceItem, MarketplaceItemType } from \\\"@roo-code/types\\\"\\nimport { modeMarketplaceItemSchema, mcpMarketplaceItemSchema } from \\\"@roo-code/types\\\"\\n>>>>>>> REPLACE\"}",
|
||
"partial": false,
|
||
"isProtected": false,
|
||
"progressStatus": {
|
||
"icon": "diff-multiple",
|
||
"text": "1"
|
||
}
|
||
}
|
||
[2025-06-18T08:44:08.159Z] {
|
||
"ts": 1750236248156,
|
||
"type": "say",
|
||
"say": "api_req_started",
|
||
"text": "{\"request\":\"[apply_diff for 'src/services/marketplace/RemoteConfigLoader.ts'] Result:\\n\\n<file_write_result>\\n<path>src/services/marketplace/RemoteConfigLoader.ts</path>\\n<operation>modified</operation>\\n<notice>\\n<i>You do not need to re-read the file, as you have seen all changes</i>\\n<i>Proceed with the task using these changes as the new baseline.</i>\\n</notice>\\n</file_write_result>\\n\\n\\nLoading...\"}"
|
||
}
|
||
[2025-06-18T08:44:12.345Z] {
|
||
"ts": 1750236252319,
|
||
"type": "say",
|
||
"say": "text",
|
||
"text": "",
|
||
"partial": false
|
||
}
|
||
[2025-06-18T08:44:18.215Z] {
|
||
"ts": 1750236258210,
|
||
"type": "say",
|
||
"say": "api_req_started",
|
||
"text": "{\"request\":\"[apply_diff for 'src/services/marketplace/RemoteConfigLoader.ts'] Result:\\n\\nUnable to apply diff to file: /roo/repos/Roo-Code/src/services/marketplace/RemoteConfigLoader.ts\\n\\n<error_details>\\nERROR: Special marker '=======' found in your diff content at line 30:\\n\\nWhen removing merge conflict markers like '=======' from files, you MUST escape them\\nin your SEARCH section by prepending a backslash (\\\\) at the beginning of the line:\\n\\nCORRECT FORMAT:\\n\\n<<<<<<< SEARCH\\ncontent before\\n\\\\======= <-- Note the backslash here in this example\\ncontent after\\n=======\\nreplacement content\\n>>>>>>> REPLACE\\n\\nWithout escaping, the system confuses your content with diff syntax markers.\\nYou may use multiple diff blocks in a single diff request, but ANY of ONLY the following separators that occur within SEARCH or REPLACE content must be escaped, as follows:\\n\\\\<<<<<<< SEARCH\\n\\\\=======\\n\\\\>>>>>>> REPLACE\\n\\n</error_details>\\n\\nLoading...\"}"
|
||
}
|
||
[2025-06-18T08:44:20.692Z] {
|
||
"ts": 1750236260670,
|
||
"type": "say",
|
||
"say": "text",
|
||
"text": "",
|
||
"partial": false
|
||
}
|
||
[2025-06-18T08:44:25.225Z] {
|
||
"ts": 1750236261027,
|
||
"type": "ask",
|
||
"ask": "tool",
|
||
"text": "{\"tool\":\"appliedDiff\",\"path\":\"src/services/marketplace/RemoteConfigLoader.ts\",\"diff\":\"<<<<<<< SEARCH\\n:start_line:26\\n-------\\n\\tasync loadAllItems(): Promise<MarketplaceItem[]> {\\n\\t\\tconst items: MarketplaceItem[] = []\\n\\n\\t\\tconst [modes, mcps] = await Promise.all([this.fetchModes(), this.fetchMcps()])\\n\\n\\t\\titems.push(...modes, ...mcps)\\n\\t\\treturn items\\n\\t}\\n=======\\n\\tasync loadAllItems(): Promise<MarketplaceItem[]> {\\n\\t\\t// Check if marketplace is disabled via user setting\\n\\t\\tconst config = vscode.workspace.getConfiguration(\\\"roo-cline\\\")\\n\\t\\tconst isMarketplaceDisabled = config.get<boolean>(\\\"disableMarketplace\\\", false)\\n\\t\\t\\n\\t\\tif (isMarketplaceDisabled) {\\n\\t\\t\\tconsole.log(\\\"Marketplace: Disabled via user setting, returning empty items\\\")\\n\\t\\t\\treturn []\\n\\t\\t}\\n\\n\\t\\tconst items: MarketplaceItem[] = []\\n\\n\\t\\tconst [modes, mcps] = await Promise.all([this.fetchModes(), this.fetchMcps()])\\n\\n\\t\\titems.push(...modes, ...mcps)\\n\\t\\treturn items\\n\\t}\\n>>>>>>> REPLACE\"}",
|
||
"partial": false,
|
||
"isProtected": false,
|
||
"progressStatus": {
|
||
"icon": "diff-multiple",
|
||
"text": "1"
|
||
}
|
||
}
|
||
[2025-06-18T08:44:26.332Z] {
|
||
"ts": 1750236266328,
|
||
"type": "say",
|
||
"say": "api_req_started",
|
||
"text": "{\"request\":\"[apply_diff for 'src/services/marketplace/RemoteConfigLoader.ts'] Result:\\n\\n<file_write_result>\\n<path>src/services/marketplace/RemoteConfigLoader.ts</path>\\n<operation>modified</operation>\\n<notice>\\n<i>You do not need to re-read the file, as you have seen all changes</i>\\n<i>Proceed with the task using these changes as the new baseline.</i>\\n</notice>\\n</file_write_result>\\n\\n\\nLoading...\"}"
|
||
}
|
||
[2025-06-18T08:44:30.520Z] {
|
||
"ts": 1750236270061,
|
||
"type": "say",
|
||
"say": "text",
|
||
"text": "Now let me update the fetchWithRetry method to use the configurable timeout:",
|
||
"partial": false
|
||
}
|
||
[2025-06-18T08:44:40.288Z] {
|
||
"ts": 1750236270795,
|
||
"type": "ask",
|
||
"ask": "tool",
|
||
"text": "{\"tool\":\"appliedDiff\",\"path\":\"src/services/marketplace/RemoteConfigLoader.ts\",\"diff\":\"<<<<<<< SEARCH\\n:start_line:85\\n-------\\n\\tprivate async fetchWithRetry<T>(url: string, maxRetries = 3): Promise<T> {\\n\\t\\tlet lastError: Error\\n\\n\\t\\tfor (let i = 0; i < maxRetries; i++) {\\n\\t\\t\\ttry {\\n\\t\\t\\t\\tconst response = await axios.get(url, {\\n\\t\\t\\t\\t\\ttimeout: 10000, // 10 second timeout\\n\\t\\t\\t\\t\\theaders: {\\n\\t\\t\\t\\t\\t\\tAccept: \\\"application/json\\\",\\n\\t\\t\\t\\t\\t\\t\\\"Content-Type\\\": \\\"application/json\\\",\\n\\t\\t\\t\\t\\t},\\n\\t\\t\\t\\t})\\n\\t\\t\\t\\treturn response.data as T\\n\\t\\t\\t} catch (error) {\\n\\t\\t\\t\\tlastError = error as Error\\n\\t\\t\\t\\tif (i < maxRetries - 1) {\\n\\t\\t\\t\\t\\t// Exponential backoff: 1s, 2s, 4s\\n\\t\\t\\t\\t\\tconst delay = Math.pow(2, i) * 1000\\n\\t\\t\\t\\t\\tawait new Promise((resolve) => setTimeout(resolve, delay))\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\tthrow lastError!\\n\\t}\\n=======\\n\\tprivate async fetchWithRetry<T>(url: string, maxRetries = 3): Promise<T> {\\n\\t\\t// Get configurable timeout from user settings\\n\\t\\tconst config = vscode.workspace.getConfiguration(\\\"roo-cline\\\")\\n\\t\\tconst timeout = config.get<number>(\\\"marketplaceTimeout\\\", 10000)\\n\\n\\t\\tlet lastError: Error\\n\\n\\t\\tfor (let i = 0; i < maxRetries; i++) {\\n\\t\\t\\ttry {\\n\\t\\t\\t\\tconst response = await axios.get(url, {\\n\\t\\t\\t\\t\\ttimeout,\\n\\t\\t\\t\\t\\theaders: {\\n\\t\\t\\t\\t\\t\\tAccept: \\\"application/json\\\",\\n\\t\\t\\t\\t\\t\\t\\\"Content-Type\\\": \\\"application/json\\\",\\n\\t\\t\\t\\t\\t},\\n\\t\\t\\t\\t})\\n\\t\\t\\t\\treturn response.data as T\\n\\t\\t\\t} catch (error) {\\n\\t\\t\\t\\tlastError = error as Error\\n\\t\\t\\t\\tconsole.log(`Marketplace: API request failed (attempt ${i + 1}/${maxRetries}):`, error instanceof Error ? error.message : String(error))\\n\\t\\t\\t\\t\\n\\t\\t\\t\\tif (i < maxRetries - 1) {\\n\\t\\t\\t\\t\\t// Exponential backoff: 1s, 2s, 4s\\n\\t\\t\\t\\t\\tconst delay = Math.pow(2, i) * 1000\\n\\t\\t\\t\\t\\tconsole.log(`Marketplace: Retrying in ${delay}ms...`)\\n\\t\\t\\t\\t\\tawait new Promise((resolve) => setTimeout(resolve, delay))\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\tconsole.error(`Marketplace: All ${maxRetries} attempts failed for ${url}`)\\n\\t\\tthrow lastError!\\n\\t}\\n>>>>>>> REPLACE\"}",
|
||
"partial": false,
|
||
"isProtected": false,
|
||
"progressStatus": {
|
||
"icon": "diff-multiple",
|
||
"text": "1"
|
||
}
|
||
}
|
||
[2025-06-18T08:44:41.390Z] {
|
||
"ts": 1750236281379,
|
||
"type": "say",
|
||
"say": "api_req_started",
|
||
"text": "{\"request\":\"[apply_diff for 'src/services/marketplace/RemoteConfigLoader.ts'] Result:\\n\\n<file_write_result>\\n<path>src/services/marketplace/RemoteConfigLoader.ts</path>\\n<operation>modified</operation>\\n<notice>\\n<i>You do not need to re-read the file, as you have seen all changes</i>\\n<i>Proceed with the task using these changes as the new baseline.</i>\\n</notice>\\n</file_write_result>\\n\\n\\nLoading...\"}"
|
||
}
|
||
[2025-06-18T08:44:44.653Z] {
|
||
"ts": 1750236284474,
|
||
"type": "say",
|
||
"say": "text",
|
||
"text": "Now let me update the ClineProvider to also check the user setting in addition to the experiment flag:",
|
||
"partial": false
|
||
}
|
||
[2025-06-18T08:44:51.944Z] {
|
||
"ts": 1750236284955,
|
||
"type": "ask",
|
||
"ask": "tool",
|
||
"text": "{\"tool\":\"appliedDiff\",\"path\":\"src/core/webview/ClineProvider.ts\",\"diff\":\"<<<<<<< SEARCH\\n:start_line:1350\\n-------\\n\\t\\t// Only fetch marketplace data if the feature is enabled\\n\\t\\tlet marketplaceItems: any[] = []\\n\\t\\tlet marketplaceInstalledMetadata: any = { project: {}, global: {} }\\n\\n\\t\\tif (experiments.marketplace) {\\n\\t\\t\\tmarketplaceItems = (await this.marketplaceManager.getCurrentItems()) || []\\n\\t\\t\\tmarketplaceInstalledMetadata = await this.marketplaceManager.getInstallationMetadata()\\n\\t\\t}\\n=======\\n\\t\\t// Only fetch marketplace data if the feature is enabled and not disabled by user setting\\n\\t\\tlet marketplaceItems: any[] = []\\n\\t\\tlet marketplaceInstalledMetadata: any = { project: {}, global: {} }\\n\\n\\t\\tconst config = vscode.workspace.getConfiguration(\\\"roo-cline\\\")\\n\\t\\tconst isMarketplaceDisabled = config.get<boolean>(\\\"disableMarketplace\\\", false)\\n\\n\\t\\tif (experiments.marketplace && !isMarketplaceDisabled) {\\n\\t\\t\\ttry {\\n\\t\\t\\t\\tmarketplaceItems = (await this.marketplaceManager.getCurrentItems()) || []\\n\\t\\t\\t\\tmarketplaceInstalledMetadata = await this.marketplaceManager.getInstallationMetadata()\\n\\t\\t\\t} catch (error) {\\n\\t\\t\\t\\tconsole.error(\\\"Failed to load marketplace items:\\\", error)\\n\\t\\t\\t\\t// Continue with empty marketplace data instead of failing completely\\n\\t\\t\\t\\tmarketplaceItems = []\\n\\t\\t\\t\\tmarketplaceInstalledMetadata = { project: {}, global: {} }\\n\\t\\t\\t}\\n\\t\\t} else if (isMarketplaceDisabled) {\\n\\t\\t\\tconsole.log(\\\"Marketplace: Disabled via user setting\\\")\\n\\t\\t}\\n>>>>>>> REPLACE\"}",
|
||
"partial": false,
|
||
"isProtected": false,
|
||
"progressStatus": {
|
||
"icon": "diff-multiple",
|
||
"text": "1"
|
||
}
|
||
}
|
||
[2025-06-18T08:44:53.129Z] {
|
||
"ts": 1750236293125,
|
||
"type": "say",
|
||
"say": "api_req_started",
|
||
"text": "{\"request\":\"[apply_diff for 'src/core/webview/ClineProvider.ts'] Result:\\n\\n<file_write_result>\\n<path>src/core/webview/ClineProvider.ts</path>\\n<operation>modified</operation>\\n<notice>\\n<i>You do not need to re-read the file, as you have seen all changes</i>\\n<i>Proceed with the task using these changes as the new baseline.</i>\\n</notice>\\n</file_write_result>\\n\\n\\nLoading...\"}"
|
||
}
|
||
[2025-06-18T08:44:55.934Z] {
|
||
"ts": 1750236295640,
|
||
"type": "say",
|
||
"say": "text",
|
||
"text": "Now let me update the webview message handler to also check the user setting:",
|
||
"partial": false
|
||
}
|
||
[2025-06-18T08:45:00.090Z] {
|
||
"ts": 1750236300087,
|
||
"type": "say",
|
||
"say": "api_req_started",
|
||
"text": "{\"request\":\"[apply_diff for 'src/core/webview/webviewMessageHandler.ts'] Result:\\n\\n<error_details>\\nNo sufficiently similar match found at line: 1467 (97% similar, needs 100%)\\n\\nDebug Info:\\n- Similarity Score: 97%\\n- Required Threshold: 100%\\n- Search Range: starting at line 1467\\n- Tried both standard and aggressive line number stripping\\n- Tip: Use the read_file tool to get the latest content of the file before attempting to use the apply_diff tool again, as the file content may have changed\\n\\nSearch Content:\\n\\t\\tcase \\\"filterMarketplaceItems\\\": {\\n\\t\\t\\t// Check if marketplace is enabled before making API calls\\n\\t\\t\\tconst { experiments } = await provider.getState()\\n\\t\\t\\tif (!experiments.marketplace) {\\n\\t\\t\\t\\tconsole.log(\\\"Marketplace: Feature disabled, skipping API call\\\")\\n\\t\\t\\t\\treturn\\n\\t\\t\\t}\\n\\nBest Match Found:\\n1467 | \\t\\tcase \\\"filterMarketplaceItems\\\": {\\n1468 | \\t\\t\\t// Check if marketplace is enabled before making API calls\\n1469 | \\t\\t\\tconst { experiments } = await provider.getState()\\n1470 | \\t\\t\\tif (!experiments.marketplace) {\\n1471 | \\t\\t\\t\\tconsole.log(\\\"Marketplace: Feature disabled, skipping API call\\\")\\n1472 | \\t\\t\\t\\tbreak\\n1473 | \\t\\t\\t}\\n\\n\\nOriginal Content:\\n1427 | \\t\\tcase \\\"requestIndexingStatus\\\": {\\n1428 | \\t\\t\\tconst status = provider.codeIndexManager!.getCurrentStatus()\\n1429 | \\t\\t\\tprovider.postMessageToWebview({\\n1430 | \\t\\t\\t\\ttype: \\\"indexingStatusUpdate\\\",\\n1431 | \\t\\t\\t\\tvalues: status,\\n1432 | \\t\\t\\t})\\n1433 | \\t\\t\\tbreak\\n1434 | \\t\\t}\\n1435 | \\t\\tcase \\\"startIndexing\\\": {\\n1436 | \\t\\t\\ttry {\\n1437 | \\t\\t\\t\\tconst manager = provider.codeIndexManager!\\n1438 | \\t\\t\\t\\tif (manager.isFeatureEnabled && manager.isFeatureConfigured) {\\n1439 | \\t\\t\\t\\t\\tif (!manager.isInitialized) {\\n1440 | \\t\\t\\t\\t\\t\\tawait manager.initialize(provider.contextProxy)\\n1441 | \\t\\t\\t\\t\\t}\\n1442 | \\n1443 | \\t\\t\\t\\t\\tmanager.startIndexing()\\n1444 | \\t\\t\\t\\t}\\n1445 | \\t\\t\\t} catch (error) {\\n1446 | \\t\\t\\t\\tprovider.log(`Error starting indexing: ${error instanceof Error ? error.message : String(error)}`)\\n1447 | \\t\\t\\t}\\n1448 | \\t\\t\\tbreak\\n1449 | \\t\\t}\\n1450 | \\t\\tcase \\\"clearIndexData\\\": {\\n1451 | \\t\\t\\ttry {\\n1452 | \\t\\t\\t\\tconst manager = provider.codeIndexManager!\\n1453 | \\t\\t\\t\\tawait manager.clearIndexData()\\n1454 | \\t\\t\\t\\tprovider.postMessageToWebview({ type: \\\"indexCleared\\\", values: { success: true } })\\n1455 | \\t\\t\\t} catch (error) {\\n1456 | \\t\\t\\t\\tprovider.log(`Error clearing index data: ${error instanceof Error ? error.message : String(error)}`)\\n1457 | \\t\\t\\t\\tprovider.postMessageToWebview({\\n1458 | \\t\\t\\t\\t\\ttype: \\\"indexCleared\\\",\\n1459 | \\t\\t\\t\\t\\tvalues: {\\n1460 | \\t\\t\\t\\t\\t\\tsuccess: false,\\n1461 | \\t\\t\\t\\t\\t\\terror: error instanceof Error ? error.message : String(error),\\n1462 | \\t\\t\\t\\t\\t},\\n1463 | \\t\\t\\t\\t})\\n1464 | \\t\\t\\t}\\n1465 | \\t\\t\\tbreak\\n1466 | \\t\\t}\\n1467 | \\t\\tcase \\\"filterMarketplaceItems\\\": {\\n1468 | \\t\\t\\t// Check if marketplace is enabled before making API calls\\n1469 | \\t\\t\\tconst { experiments } = await provider.getState()\\n1470 | \\t\\t\\tif (!experiments.marketplace) {\\n1471 | \\t\\t\\t\\tconsole.log(\\\"Marketplace: Feature disabled, skipping API call\\\")\\n1472 | \\t\\t\\t\\tbreak\\n1473 | \\t\\t\\t}\\n1474 | \\n1475 | \\t\\t\\tif (marketplaceManager && message.filters) {\\n1476 | \\t\\t\\t\\ttry {\\n1477 | \\t\\t\\t\\t\\tawait marketplaceManager.updateWithFilteredItems({\\n1478 | \\t\\t\\t\\t\\t\\ttype: message.filters.type as MarketplaceItemType | undefined,\\n1479 | \\t\\t\\t\\t\\t\\tsearch: message.filters.search,\\n1480 | \\t\\t\\t\\t\\t\\ttags: message.filters.tags,\\n1481 | \\t\\t\\t\\t\\t})\\n1482 | \\t\\t\\t\\t\\tawait provider.postStateToWebview()\\n1483 | \\t\\t\\t\\t} catch (error) {\\n1484 | \\t\\t\\t\\t\\tconsole.error(\\\"Marketplace: Error filtering items:\\\", error)\\n1485 | \\t\\t\\t\\t\\tvscode.window.showErrorMessage(\\\"Failed to filter marketplace items\\\")\\n1486 | \\t\\t\\t\\t}\\n1487 | \\t\\t\\t}\\n1488 | \\t\\t\\tbreak\\n1489 | \\t\\t}\\n1490 | \\n1491 | \\t\\tcase \\\"installMarketplaceItem\\\": {\\n1492 | \\t\\t\\t// Check if marketplace is enabled before installing\\n1493 | \\t\\t\\tconst { experiments } = await provider.getState()\\n1494 | \\t\\t\\tif (!experiments.marketplace) {\\n1495 | \\t\\t\\t\\tconsole.log(\\\"Marketplace: Feature disabled, skipping installation\\\")\\n1496 | \\t\\t\\t\\tbreak\\n1497 | \\t\\t\\t}\\n1498 | \\n1499 | \\t\\t\\tif (marketplaceManager && message.mpItem && message.mpInstallOptions) {\\n1500 | \\t\\t\\t\\ttry {\\n1501 | \\t\\t\\t\\t\\tconst configFilePath = await marketplaceManager.installMarketplaceItem(\\n1502 | \\t\\t\\t\\t\\t\\tmessage.mpItem,\\n1503 | \\t\\t\\t\\t\\t\\tmessage.mpInstallOptions,\\n1504 | \\t\\t\\t\\t\\t)\\n1505 | \\t\\t\\t\\t\\tawait provider.postStateToWebview()\\n1506 | \\t\\t\\t\\t\\tconsole.log(`Marketplace item installed and config file opened: ${configFilePath}`)\\n1507 | \\t\\t\\t\\t\\t// Send success message to webview\\n1508 | \\t\\t\\t\\t\\tprovider.postMessageToWebview({\\n1509 | \\t\\t\\t\\t\\t\\ttype: \\\"marketplaceInstallResult\\\",\\n1510 | \\t\\t\\t\\t\\t\\tsuccess: true,\\n1511 | \\t\\t\\t\\t\\t\\tslug: message.mpItem.id,\\n1512 | \\t\\t\\t\\t\\t})\\n1513 | \\t\\t\\t\\t} catch (error) {\\n\\n</error_details>\\n\\nLoading...\"}"
|
||
}
|
||
[2025-06-18T08:45:03.821Z] {
|
||
"ts": 1750236303209,
|
||
"type": "say",
|
||
"say": "text",
|
||
"text": "I need to read the current content of the webview message handler file to see the exact format:",
|
||
"partial": false
|
||
}
|
||
[2025-06-18T08:45:04.796Z] {
|
||
"ts": 1750236303821,
|
||
"type": "ask",
|
||
"ask": "tool",
|
||
"text": "{\"tool\":\"readFile\",\"path\":\"src/core/webview/webviewMessageHandler.ts\",\"isOutsideWorkspace\":false,\"content\":\"/roo/repos/Roo-Code/src/core/webview/webviewMessageHandler.ts\",\"reason\":\"\"}",
|
||
"partial": false
|
||
}
|
||
[2025-06-18T08:45:04.959Z] {
|
||
"ts": 1750236304952,
|
||
"type": "say",
|
||
"say": "api_req_started",
|
||
"text": "{\"request\":\"[read_file for 'src/core/webview/webviewMessageHandler.ts'. Reading multiple files at once is more efficient for the LLM. If other files are relevant to your current task, please read them simultaneously.] Result:\\n\\n<files>\\n<file><path>src/core/webview/webviewMessageHandler.ts</path>\\n<content lines=\\\"1-1579\\\">\\n 1 | import * as path from \\\"path\\\"\\n 2 | import fs from \\\"fs/promises\\\"\\n 3 | import pWaitFor from \\\"p-wait-for\\\"\\n 4 | import * as vscode from \\\"vscode\\\"\\n 5 | \\n 6 | import { type Language, type ProviderSettings, type GlobalState, TelemetryEventName } from \\\"@roo-code/types\\\"\\n 7 | import { CloudService } from \\\"@roo-code/cloud\\\"\\n 8 | import { TelemetryService } from \\\"@roo-code/telemetry\\\"\\n 9 | \\n 10 | import { ClineProvider } from \\\"./ClineProvider\\\"\\n 11 | import { changeLanguage, t } from \\\"../../i18n\\\"\\n 12 | import { Package } from \\\"../../shared/package\\\"\\n 13 | import { RouterName, toRouterName, ModelRecord } from \\\"../../shared/api\\\"\\n 14 | import { supportPrompt } from \\\"../../shared/support-prompt\\\"\\n 15 | \\n 16 | import { checkoutDiffPayloadSchema, checkoutRestorePayloadSchema, WebviewMessage } from \\\"../../shared/WebviewMessage\\\"\\n 17 | import { checkExistKey } from \\\"../../shared/checkExistApiConfig\\\"\\n 18 | import { experimentDefault } from \\\"../../shared/experiments\\\"\\n 19 | import { Terminal } from \\\"../../integrations/terminal/Terminal\\\"\\n 20 | import { openFile } from \\\"../../integrations/misc/open-file\\\"\\n 21 | import { openImage, saveImage } from \\\"../../integrations/misc/image-handler\\\"\\n 22 | import { selectImages } from \\\"../../integrations/misc/process-images\\\"\\n 23 | import { getTheme } from \\\"../../integrations/theme/getTheme\\\"\\n 24 | import { discoverChromeHostUrl, tryChromeHostUrl } from \\\"../../services/browser/browserDiscovery\\\"\\n 25 | import { searchWorkspaceFiles } from \\\"../../services/search/file-search\\\"\\n 26 | import { fileExistsAtPath } from \\\"../../utils/fs\\\"\\n 27 | import { playTts, setTtsEnabled, setTtsSpeed, stopTts } from \\\"../../utils/tts\\\"\\n 28 | import { singleCompletionHandler } from \\\"../../utils/single-completion-handler\\\"\\n 29 | import { searchCommits } from \\\"../../utils/git\\\"\\n 30 | import { exportSettings, importSettings } from \\\"../config/importExport\\\"\\n 31 | import { getOpenAiModels } from \\\"../../api/providers/openai\\\"\\n 32 | import { getOllamaModels } from \\\"../../api/providers/ollama\\\"\\n 33 | import { getVsCodeLmModels } from \\\"../../api/providers/vscode-lm\\\"\\n 34 | import { getLmStudioModels } from \\\"../../api/providers/lm-studio\\\"\\n 35 | import { openMention } from \\\"../mentions\\\"\\n 36 | import { TelemetrySetting } from \\\"../../shared/TelemetrySetting\\\"\\n 37 | import { getWorkspacePath } from \\\"../../utils/path\\\"\\n 38 | import { Mode, defaultModeSlug } from \\\"../../shared/modes\\\"\\n 39 | import { getModels, flushModels } from \\\"../../api/providers/fetchers/modelCache\\\"\\n 40 | import { GetModelsOptions } from \\\"../../shared/api\\\"\\n 41 | import { generateSystemPrompt } from \\\"./generateSystemPrompt\\\"\\n 42 | import { getCommand } from \\\"../../utils/commands\\\"\\n 43 | \\n 44 | const ALLOWED_VSCODE_SETTINGS = new Set([\\\"terminal.integrated.inheritEnv\\\"])\\n 45 | \\n 46 | import { MarketplaceManager, MarketplaceItemType } from \\\"../../services/marketplace\\\"\\n 47 | \\n 48 | export const webviewMessageHandler = async (\\n 49 | \\tprovider: ClineProvider,\\n 50 | \\tmessage: WebviewMessage,\\n 51 | \\tmarketplaceManager?: MarketplaceManager,\\n 52 | ) => {\\n 53 | \\t// Utility functions provided for concise get/update of global state via contextProxy API.\\n 54 | \\tconst getGlobalState = <K extends keyof GlobalState>(key: K) => provider.contextProxy.getValue(key)\\n 55 | \\tconst updateGlobalState = async <K extends keyof GlobalState>(key: K, value: GlobalState[K]) =>\\n 56 | \\t\\tawait provider.contextProxy.setValue(key, value)\\n 57 | \\n 58 | \\tswitch (message.type) {\\n 59 | \\t\\tcase \\\"webviewDidLaunch\\\":\\n 60 | \\t\\t\\t// Load custom modes first\\n 61 | \\t\\t\\tconst customModes = await provider.customModesManager.getCustomModes()\\n 62 | \\t\\t\\tawait updateGlobalState(\\\"customModes\\\", customModes)\\n 63 | \\n 64 | \\t\\t\\tprovider.postStateToWebview()\\n 65 | \\t\\t\\tprovider.workspaceTracker?.initializeFilePaths() // Don't await.\\n 66 | \\n 67 | \\t\\t\\tgetTheme().then((theme) => provider.postMessageToWebview({ type: \\\"theme\\\", text: JSON.stringify(theme) }))\\n 68 | \\n 69 | \\t\\t\\t// If MCP Hub is already initialized, update the webview with\\n 70 | \\t\\t\\t// current server list.\\n 71 | \\t\\t\\tconst mcpHub = provider.getMcpHub()\\n 72 | \\n 73 | \\t\\t\\tif (mcpHub) {\\n 74 | \\t\\t\\t\\tprovider.postMessageToWebview({ type: \\\"mcpServers\\\", mcpServers: mcpHub.getAllServers() })\\n 75 | \\t\\t\\t}\\n 76 | \\n 77 | \\t\\t\\tprovider.providerSettingsManager\\n 78 | \\t\\t\\t\\t.listConfig()\\n 79 | \\t\\t\\t\\t.then(async (listApiConfig) => {\\n 80 | \\t\\t\\t\\t\\tif (!listApiConfig) {\\n 81 | \\t\\t\\t\\t\\t\\treturn\\n 82 | \\t\\t\\t\\t\\t}\\n 83 | \\n 84 | \\t\\t\\t\\t\\tif (listApiConfig.length === 1) {\\n 85 | \\t\\t\\t\\t\\t\\t// Check if first time init then sync with exist config.\\n 86 | \\t\\t\\t\\t\\t\\tif (!checkExistKey(listApiConfig[0])) {\\n 87 | \\t\\t\\t\\t\\t\\t\\tconst { apiConfiguration } = await provider.getState()\\n 88 | \\n 89 | \\t\\t\\t\\t\\t\\t\\tawait provider.providerSettingsManager.saveConfig(\\n 90 | \\t\\t\\t\\t\\t\\t\\t\\tlistApiConfig[0].name ?? \\\"default\\\",\\n 91 | \\t\\t\\t\\t\\t\\t\\t\\tapiConfiguration,\\n 92 | \\t\\t\\t\\t\\t\\t\\t)\\n 93 | \\n 94 | \\t\\t\\t\\t\\t\\t\\tlistApiConfig[0].apiProvider = apiConfiguration.apiProvider\\n 95 | \\t\\t\\t\\t\\t\\t}\\n 96 | \\t\\t\\t\\t\\t}\\n 97 | \\n 98 | \\t\\t\\t\\t\\tconst currentConfigName = getGlobalState(\\\"currentApiConfigName\\\")\\n 99 | \\n 100 | \\t\\t\\t\\t\\tif (currentConfigName) {\\n 101 | \\t\\t\\t\\t\\t\\tif (!(await provider.providerSettingsManager.hasConfig(currentConfigName))) {\\n 102 | \\t\\t\\t\\t\\t\\t\\t// Current config name not valid, get first config in list.\\n 103 | \\t\\t\\t\\t\\t\\t\\tconst name = listApiConfig[0]?.name\\n 104 | \\t\\t\\t\\t\\t\\t\\tawait updateGlobalState(\\\"currentApiConfigName\\\", name)\\n 105 | \\n 106 | \\t\\t\\t\\t\\t\\t\\tif (name) {\\n 107 | \\t\\t\\t\\t\\t\\t\\t\\tawait provider.activateProviderProfile({ name })\\n 108 | \\t\\t\\t\\t\\t\\t\\t\\treturn\\n 109 | \\t\\t\\t\\t\\t\\t\\t}\\n 110 | \\t\\t\\t\\t\\t\\t}\\n 111 | \\t\\t\\t\\t\\t}\\n 112 | \\n 113 | \\t\\t\\t\\t\\tawait Promise.all([\\n 114 | \\t\\t\\t\\t\\t\\tawait updateGlobalState(\\\"listApiConfigMeta\\\", listApiConfig),\\n 115 | \\t\\t\\t\\t\\t\\tawait provider.postMessageToWebview({ type: \\\"listApiConfig\\\", listApiConfig }),\\n 116 | \\t\\t\\t\\t\\t])\\n 117 | \\t\\t\\t\\t})\\n 118 | \\t\\t\\t\\t.catch((error) =>\\n 119 | \\t\\t\\t\\t\\tprovider.log(\\n 120 | \\t\\t\\t\\t\\t\\t`Error list api configuration: ${JSON.stringify(error, Object.getOwnPropertyNames(error), 2)}`,\\n 121 | \\t\\t\\t\\t\\t),\\n 122 | \\t\\t\\t\\t)\\n 123 | \\n 124 | \\t\\t\\t// If user already opted in to telemetry, enable telemetry service\\n 125 | \\t\\t\\tprovider.getStateToPostToWebview().then((state) => {\\n 126 | \\t\\t\\t\\tconst { telemetrySetting } = state\\n 127 | \\t\\t\\t\\tconst isOptedIn = telemetrySetting === \\\"enabled\\\"\\n 128 | \\t\\t\\t\\tTelemetryService.instance.updateTelemetryState(isOptedIn)\\n 129 | \\t\\t\\t})\\n 130 | \\n 131 | \\t\\t\\tprovider.isViewLaunched = true\\n 132 | \\t\\t\\tbreak\\n 133 | \\t\\tcase \\\"newTask\\\":\\n 134 | \\t\\t\\t// Initializing new instance of Cline will make sure that any\\n 135 | \\t\\t\\t// agentically running promises in old instance don't affect our new\\n 136 | \\t\\t\\t// task. This essentially creates a fresh slate for the new task.\\n 137 | \\t\\t\\tawait provider.initClineWithTask(message.text, message.images)\\n 138 | \\t\\t\\tbreak\\n 139 | \\t\\tcase \\\"customInstructions\\\":\\n 140 | \\t\\t\\tawait provider.updateCustomInstructions(message.text)\\n 141 | \\t\\t\\tbreak\\n 142 | \\t\\tcase \\\"alwaysAllowReadOnly\\\":\\n 143 | \\t\\t\\tawait updateGlobalState(\\\"alwaysAllowReadOnly\\\", message.bool ?? undefined)\\n 144 | \\t\\t\\tawait provider.postStateToWebview()\\n 145 | \\t\\t\\tbreak\\n 146 | \\t\\tcase \\\"alwaysAllowReadOnlyOutsideWorkspace\\\":\\n 147 | \\t\\t\\tawait updateGlobalState(\\\"alwaysAllowReadOnlyOutsideWorkspace\\\", message.bool ?? undefined)\\n 148 | \\t\\t\\tawait provider.postStateToWebview()\\n 149 | \\t\\t\\tbreak\\n 150 | \\t\\tcase \\\"alwaysAllowWrite\\\":\\n 151 | \\t\\t\\tawait updateGlobalState(\\\"alwaysAllowWrite\\\", message.bool ?? undefined)\\n 152 | \\t\\t\\tawait provider.postStateToWebview()\\n 153 | \\t\\t\\tbreak\\n 154 | \\t\\tcase \\\"alwaysAllowWriteOutsideWorkspace\\\":\\n 155 | \\t\\t\\tawait updateGlobalState(\\\"alwaysAllowWriteOutsideWorkspace\\\", message.bool ?? undefined)\\n 156 | \\t\\t\\tawait provider.postStateToWebview()\\n 157 | \\t\\t\\tbreak\\n 158 | \\t\\tcase \\\"alwaysAllowWriteProtected\\\":\\n 159 | \\t\\t\\tawait updateGlobalState(\\\"alwaysAllowWriteProtected\\\", message.bool ?? undefined)\\n 160 | \\t\\t\\tawait provider.postStateToWebview()\\n 161 | \\t\\t\\tbreak\\n 162 | \\t\\tcase \\\"alwaysAllowExecute\\\":\\n 163 | \\t\\t\\tawait updateGlobalState(\\\"alwaysAllowExecute\\\", message.bool ?? undefined)\\n 164 | \\t\\t\\tawait provider.postStateToWebview()\\n 165 | \\t\\t\\tbreak\\n 166 | \\t\\tcase \\\"alwaysAllowBrowser\\\":\\n 167 | \\t\\t\\tawait updateGlobalState(\\\"alwaysAllowBrowser\\\", message.bool ?? undefined)\\n 168 | \\t\\t\\tawait provider.postStateToWebview()\\n 169 | \\t\\t\\tbreak\\n 170 | \\t\\tcase \\\"alwaysAllowMcp\\\":\\n 171 | \\t\\t\\tawait updateGlobalState(\\\"alwaysAllowMcp\\\", message.bool)\\n 172 | \\t\\t\\tawait provider.postStateToWebview()\\n 173 | \\t\\t\\tbreak\\n 174 | \\t\\tcase \\\"alwaysAllowModeSwitch\\\":\\n 175 | \\t\\t\\tawait updateGlobalState(\\\"alwaysAllowModeSwitch\\\", message.bool)\\n 176 | \\t\\t\\tawait provider.postStateToWebview()\\n 177 | \\t\\t\\tbreak\\n 178 | \\t\\tcase \\\"allowedMaxRequests\\\":\\n 179 | \\t\\t\\tawait updateGlobalState(\\\"allowedMaxRequests\\\", message.value)\\n 180 | \\t\\t\\tawait provider.postStateToWebview()\\n 181 | \\t\\t\\tbreak\\n 182 | \\t\\tcase \\\"alwaysAllowSubtasks\\\":\\n 183 | \\t\\t\\tawait updateGlobalState(\\\"alwaysAllowSubtasks\\\", message.bool)\\n 184 | \\t\\t\\tawait provider.postStateToWebview()\\n 185 | \\t\\t\\tbreak\\n 186 | \\t\\tcase \\\"askResponse\\\":\\n 187 | \\t\\t\\tprovider.getCurrentCline()?.handleWebviewAskResponse(message.askResponse!, message.text, message.images)\\n 188 | \\t\\t\\tbreak\\n 189 | \\t\\tcase \\\"autoCondenseContext\\\":\\n 190 | \\t\\t\\tawait updateGlobalState(\\\"autoCondenseContext\\\", message.bool)\\n 191 | \\t\\t\\tawait provider.postStateToWebview()\\n 192 | \\t\\t\\tbreak\\n 193 | \\t\\tcase \\\"autoCondenseContextPercent\\\":\\n 194 | \\t\\t\\tawait updateGlobalState(\\\"autoCondenseContextPercent\\\", message.value)\\n 195 | \\t\\t\\tawait provider.postStateToWebview()\\n 196 | \\t\\t\\tbreak\\n 197 | \\t\\tcase \\\"terminalOperation\\\":\\n 198 | \\t\\t\\tif (message.terminalOperation) {\\n 199 | \\t\\t\\t\\tprovider.getCurrentCline()?.handleTerminalOperation(message.terminalOperation)\\n 200 | \\t\\t\\t}\\n 201 | \\t\\t\\tbreak\\n 202 | \\t\\tcase \\\"clearTask\\\":\\n 203 | \\t\\t\\t// clear task resets the current session and allows for a new task to be started, if this session is a subtask - it allows the parent task to be resumed\\n 204 | \\t\\t\\tawait provider.finishSubTask(t(\\\"common:tasks.canceled\\\"))\\n 205 | \\t\\t\\tawait provider.postStateToWebview()\\n 206 | \\t\\t\\tbreak\\n 207 | \\t\\tcase \\\"didShowAnnouncement\\\":\\n 208 | \\t\\t\\tawait updateGlobalState(\\\"lastShownAnnouncementId\\\", provider.latestAnnouncementId)\\n 209 | \\t\\t\\tawait provider.postStateToWebview()\\n 210 | \\t\\t\\tbreak\\n 211 | \\t\\tcase \\\"selectImages\\\":\\n 212 | \\t\\t\\tconst images = await selectImages()\\n 213 | \\t\\t\\tawait provider.postMessageToWebview({ type: \\\"selectedImages\\\", images })\\n 214 | \\t\\t\\tbreak\\n 215 | \\t\\tcase \\\"exportCurrentTask\\\":\\n 216 | \\t\\t\\tconst currentTaskId = provider.getCurrentCline()?.taskId\\n 217 | \\t\\t\\tif (currentTaskId) {\\n 218 | \\t\\t\\t\\tprovider.exportTaskWithId(currentTaskId)\\n 219 | \\t\\t\\t}\\n 220 | \\t\\t\\tbreak\\n 221 | \\t\\tcase \\\"shareCurrentTask\\\":\\n 222 | \\t\\t\\tconst shareTaskId = provider.getCurrentCline()?.taskId\\n 223 | \\t\\t\\tif (!shareTaskId) {\\n 224 | \\t\\t\\t\\tvscode.window.showErrorMessage(t(\\\"common:errors.share_no_active_task\\\"))\\n 225 | \\t\\t\\t\\tbreak\\n 226 | \\t\\t\\t}\\n 227 | \\n 228 | \\t\\t\\ttry {\\n 229 | \\t\\t\\t\\tconst success = await CloudService.instance.shareTask(shareTaskId)\\n 230 | \\t\\t\\t\\tif (success) {\\n 231 | \\t\\t\\t\\t\\t// Show success message\\n 232 | \\t\\t\\t\\t\\tvscode.window.showInformationMessage(t(\\\"common:info.share_link_copied\\\"))\\n 233 | \\t\\t\\t\\t} else {\\n 234 | \\t\\t\\t\\t\\t// Show generic failure message\\n 235 | \\t\\t\\t\\t\\tvscode.window.showErrorMessage(t(\\\"common:errors.share_task_failed\\\"))\\n 236 | \\t\\t\\t\\t}\\n 237 | \\t\\t\\t} catch (error) {\\n 238 | \\t\\t\\t\\t// Show generic failure message\\n 239 | \\t\\t\\t\\tvscode.window.showErrorMessage(t(\\\"common:errors.share_task_failed\\\"))\\n 240 | \\t\\t\\t}\\n 241 | \\t\\t\\tbreak\\n 242 | \\t\\tcase \\\"showTaskWithId\\\":\\n 243 | \\t\\t\\tprovider.showTaskWithId(message.text!)\\n 244 | \\t\\t\\tbreak\\n 245 | \\t\\tcase \\\"condenseTaskContextRequest\\\":\\n 246 | \\t\\t\\tprovider.condenseTaskContext(message.text!)\\n 247 | \\t\\t\\tbreak\\n 248 | \\t\\tcase \\\"deleteTaskWithId\\\":\\n 249 | \\t\\t\\tprovider.deleteTaskWithId(message.text!)\\n 250 | \\t\\t\\tbreak\\n 251 | \\t\\tcase \\\"deleteMultipleTasksWithIds\\\": {\\n 252 | \\t\\t\\tconst ids = message.ids\\n 253 | \\n 254 | \\t\\t\\tif (Array.isArray(ids)) {\\n 255 | \\t\\t\\t\\t// Process in batches of 20 (or another reasonable number)\\n 256 | \\t\\t\\t\\tconst batchSize = 20\\n 257 | \\t\\t\\t\\tconst results = []\\n 258 | \\n 259 | \\t\\t\\t\\t// Only log start and end of the operation\\n 260 | \\t\\t\\t\\tconsole.log(`Batch deletion started: ${ids.length} tasks total`)\\n 261 | \\n 262 | \\t\\t\\t\\tfor (let i = 0; i < ids.length; i += batchSize) {\\n 263 | \\t\\t\\t\\t\\tconst batch = ids.slice(i, i + batchSize)\\n 264 | \\n 265 | \\t\\t\\t\\t\\tconst batchPromises = batch.map(async (id) => {\\n 266 | \\t\\t\\t\\t\\t\\ttry {\\n 267 | \\t\\t\\t\\t\\t\\t\\tawait provider.deleteTaskWithId(id)\\n 268 | \\t\\t\\t\\t\\t\\t\\treturn { id, success: true }\\n 269 | \\t\\t\\t\\t\\t\\t} catch (error) {\\n 270 | \\t\\t\\t\\t\\t\\t\\t// Keep error logging for debugging purposes\\n 271 | \\t\\t\\t\\t\\t\\t\\tconsole.log(\\n 272 | \\t\\t\\t\\t\\t\\t\\t\\t`Failed to delete task ${id}: ${error instanceof Error ? error.message : String(error)}`,\\n 273 | \\t\\t\\t\\t\\t\\t\\t)\\n 274 | \\t\\t\\t\\t\\t\\t\\treturn { id, success: false }\\n 275 | \\t\\t\\t\\t\\t\\t}\\n 276 | \\t\\t\\t\\t\\t})\\n 277 | \\n 278 | \\t\\t\\t\\t\\t// Process each batch in parallel but wait for completion before starting the next batch\\n 279 | \\t\\t\\t\\t\\tconst batchResults = await Promise.all(batchPromises)\\n 280 | \\t\\t\\t\\t\\tresults.push(...batchResults)\\n 281 | \\n 282 | \\t\\t\\t\\t\\t// Update the UI after each batch to show progress\\n 283 | \\t\\t\\t\\t\\tawait provider.postStateToWebview()\\n 284 | \\t\\t\\t\\t}\\n 285 | \\n 286 | \\t\\t\\t\\t// Log final results\\n 287 | \\t\\t\\t\\tconst successCount = results.filter((r) => r.success).length\\n 288 | \\t\\t\\t\\tconst failCount = results.length - successCount\\n 289 | \\t\\t\\t\\tconsole.log(\\n 290 | \\t\\t\\t\\t\\t`Batch deletion completed: ${successCount}/${ids.length} tasks successful, ${failCount} tasks failed`,\\n 291 | \\t\\t\\t\\t)\\n 292 | \\t\\t\\t}\\n 293 | \\t\\t\\tbreak\\n 294 | \\t\\t}\\n 295 | \\t\\tcase \\\"exportTaskWithId\\\":\\n 296 | \\t\\t\\tprovider.exportTaskWithId(message.text!)\\n 297 | \\t\\t\\tbreak\\n 298 | \\t\\tcase \\\"importSettings\\\": {\\n 299 | \\t\\t\\tconst result = await importSettings({\\n 300 | \\t\\t\\t\\tproviderSettingsManager: provider.providerSettingsManager,\\n 301 | \\t\\t\\t\\tcontextProxy: provider.contextProxy,\\n 302 | \\t\\t\\t\\tcustomModesManager: provider.customModesManager,\\n 303 | \\t\\t\\t})\\n 304 | \\n 305 | \\t\\t\\tif (result.success) {\\n 306 | \\t\\t\\t\\tprovider.settingsImportedAt = Date.now()\\n 307 | \\t\\t\\t\\tawait provider.postStateToWebview()\\n 308 | \\t\\t\\t\\tawait vscode.window.showInformationMessage(t(\\\"common:info.settings_imported\\\"))\\n 309 | \\t\\t\\t} else if (result.error) {\\n 310 | \\t\\t\\t\\tawait vscode.window.showErrorMessage(t(\\\"common:errors.settings_import_failed\\\", { error: result.error }))\\n 311 | \\t\\t\\t}\\n 312 | \\n 313 | \\t\\t\\tbreak\\n 314 | \\t\\t}\\n 315 | \\t\\tcase \\\"exportSettings\\\":\\n 316 | \\t\\t\\tawait exportSettings({\\n 317 | \\t\\t\\t\\tproviderSettingsManager: provider.providerSettingsManager,\\n 318 | \\t\\t\\t\\tcontextProxy: provider.contextProxy,\\n 319 | \\t\\t\\t})\\n 320 | \\n 321 | \\t\\t\\tbreak\\n 322 | \\t\\tcase \\\"resetState\\\":\\n 323 | \\t\\t\\tawait provider.resetState()\\n 324 | \\t\\t\\tbreak\\n 325 | \\t\\tcase \\\"flushRouterModels\\\":\\n 326 | \\t\\t\\tconst routerNameFlush: RouterName = toRouterName(message.text)\\n 327 | \\t\\t\\tawait flushModels(routerNameFlush)\\n 328 | \\t\\t\\tbreak\\n 329 | \\t\\tcase \\\"requestRouterModels\\\":\\n 330 | \\t\\t\\tconst { apiConfiguration } = await provider.getState()\\n 331 | \\n 332 | \\t\\t\\tconst routerModels: Partial<Record<RouterName, ModelRecord>> = {\\n 333 | \\t\\t\\t\\topenrouter: {},\\n 334 | \\t\\t\\t\\trequesty: {},\\n 335 | \\t\\t\\t\\tglama: {},\\n 336 | \\t\\t\\t\\tunbound: {},\\n 337 | \\t\\t\\t\\tlitellm: {},\\n 338 | \\t\\t\\t}\\n 339 | \\n 340 | \\t\\t\\tconst safeGetModels = async (options: GetModelsOptions): Promise<ModelRecord> => {\\n 341 | \\t\\t\\t\\ttry {\\n 342 | \\t\\t\\t\\t\\treturn await getModels(options)\\n 343 | \\t\\t\\t\\t} catch (error) {\\n 344 | \\t\\t\\t\\t\\tconsole.error(\\n 345 | \\t\\t\\t\\t\\t\\t`Failed to fetch models in webviewMessageHandler requestRouterModels for ${options.provider}:`,\\n 346 | \\t\\t\\t\\t\\t\\terror,\\n 347 | \\t\\t\\t\\t\\t)\\n 348 | \\t\\t\\t\\t\\tthrow error // Re-throw to be caught by Promise.allSettled\\n 349 | \\t\\t\\t\\t}\\n 350 | \\t\\t\\t}\\n 351 | \\n 352 | \\t\\t\\tconst modelFetchPromises: Array<{ key: RouterName; options: GetModelsOptions }> = [\\n 353 | \\t\\t\\t\\t{ key: \\\"openrouter\\\", options: { provider: \\\"openrouter\\\" } },\\n 354 | \\t\\t\\t\\t{ key: \\\"requesty\\\", options: { provider: \\\"requesty\\\", apiKey: apiConfiguration.requestyApiKey } },\\n 355 | \\t\\t\\t\\t{ key: \\\"glama\\\", options: { provider: \\\"glama\\\" } },\\n 356 | \\t\\t\\t\\t{ key: \\\"unbound\\\", options: { provider: \\\"unbound\\\", apiKey: apiConfiguration.unboundApiKey } },\\n 357 | \\t\\t\\t]\\n 358 | \\n 359 | \\t\\t\\tconst litellmApiKey = apiConfiguration.litellmApiKey || message?.values?.litellmApiKey\\n 360 | \\t\\t\\tconst litellmBaseUrl = apiConfiguration.litellmBaseUrl || message?.values?.litellmBaseUrl\\n 361 | \\t\\t\\tif (litellmApiKey && litellmBaseUrl) {\\n 362 | \\t\\t\\t\\tmodelFetchPromises.push({\\n 363 | \\t\\t\\t\\t\\tkey: \\\"litellm\\\",\\n 364 | \\t\\t\\t\\t\\toptions: { provider: \\\"litellm\\\", apiKey: litellmApiKey, baseUrl: litellmBaseUrl },\\n 365 | \\t\\t\\t\\t})\\n 366 | \\t\\t\\t}\\n 367 | \\n 368 | \\t\\t\\tconst results = await Promise.allSettled(\\n 369 | \\t\\t\\t\\tmodelFetchPromises.map(async ({ key, options }) => {\\n 370 | \\t\\t\\t\\t\\tconst models = await safeGetModels(options)\\n 371 | \\t\\t\\t\\t\\treturn { key, models } // key is RouterName here\\n 372 | \\t\\t\\t\\t}),\\n 373 | \\t\\t\\t)\\n 374 | \\n 375 | \\t\\t\\tconst fetchedRouterModels: Partial<Record<RouterName, ModelRecord>> = { ...routerModels }\\n 376 | \\n 377 | \\t\\t\\tresults.forEach((result, index) => {\\n 378 | \\t\\t\\t\\tconst routerName = modelFetchPromises[index].key // Get RouterName using index\\n 379 | \\n 380 | \\t\\t\\t\\tif (result.status === \\\"fulfilled\\\") {\\n 381 | \\t\\t\\t\\t\\tfetchedRouterModels[routerName] = result.value.models\\n 382 | \\t\\t\\t\\t} else {\\n 383 | \\t\\t\\t\\t\\t// Handle rejection: Post a specific error message for this provider\\n 384 | \\t\\t\\t\\t\\tconst errorMessage = result.reason instanceof Error ? result.reason.message : String(result.reason)\\n 385 | \\t\\t\\t\\t\\tconsole.error(`Error fetching models for ${routerName}:`, result.reason)\\n 386 | \\n 387 | \\t\\t\\t\\t\\tfetchedRouterModels[routerName] = {} // Ensure it's an empty object in the main routerModels message\\n 388 | \\n 389 | \\t\\t\\t\\t\\tprovider.postMessageToWebview({\\n 390 | \\t\\t\\t\\t\\t\\ttype: \\\"singleRouterModelFetchResponse\\\",\\n 391 | \\t\\t\\t\\t\\t\\tsuccess: false,\\n 392 | \\t\\t\\t\\t\\t\\terror: errorMessage,\\n 393 | \\t\\t\\t\\t\\t\\tvalues: { provider: routerName },\\n 394 | \\t\\t\\t\\t\\t})\\n 395 | \\t\\t\\t\\t}\\n 396 | \\t\\t\\t})\\n 397 | \\n 398 | \\t\\t\\tprovider.postMessageToWebview({\\n 399 | \\t\\t\\t\\ttype: \\\"routerModels\\\",\\n 400 | \\t\\t\\t\\trouterModels: fetchedRouterModels as Record<RouterName, ModelRecord>,\\n 401 | \\t\\t\\t})\\n 402 | \\t\\t\\tbreak\\n 403 | \\t\\tcase \\\"requestOpenAiModels\\\":\\n 404 | \\t\\t\\tif (message?.values?.baseUrl && message?.values?.apiKey) {\\n 405 | \\t\\t\\t\\tconst openAiModels = await getOpenAiModels(\\n 406 | \\t\\t\\t\\t\\tmessage?.values?.baseUrl,\\n 407 | \\t\\t\\t\\t\\tmessage?.values?.apiKey,\\n 408 | \\t\\t\\t\\t\\tmessage?.values?.openAiHeaders,\\n 409 | \\t\\t\\t\\t)\\n 410 | \\n 411 | \\t\\t\\t\\tprovider.postMessageToWebview({ type: \\\"openAiModels\\\", openAiModels })\\n 412 | \\t\\t\\t}\\n 413 | \\n 414 | \\t\\t\\tbreak\\n 415 | \\t\\tcase \\\"requestOllamaModels\\\":\\n 416 | \\t\\t\\tconst ollamaModels = await getOllamaModels(message.text)\\n 417 | \\t\\t\\t// TODO: Cache like we do for OpenRouter, etc?\\n 418 | \\t\\t\\tprovider.postMessageToWebview({ type: \\\"ollamaModels\\\", ollamaModels })\\n 419 | \\t\\t\\tbreak\\n 420 | \\t\\tcase \\\"requestLmStudioModels\\\":\\n 421 | \\t\\t\\tconst lmStudioModels = await getLmStudioModels(message.text)\\n 422 | \\t\\t\\t// TODO: Cache like we do for OpenRouter, etc?\\n 423 | \\t\\t\\tprovider.postMessageToWebview({ type: \\\"lmStudioModels\\\", lmStudioModels })\\n 424 | \\t\\t\\tbreak\\n 425 | \\t\\tcase \\\"requestVsCodeLmModels\\\":\\n 426 | \\t\\t\\tconst vsCodeLmModels = await getVsCodeLmModels()\\n 427 | \\t\\t\\t// TODO: Cache like we do for OpenRouter, etc?\\n 428 | \\t\\t\\tprovider.postMessageToWebview({ type: \\\"vsCodeLmModels\\\", vsCodeLmModels })\\n 429 | \\t\\t\\tbreak\\n 430 | \\t\\tcase \\\"openImage\\\":\\n 431 | \\t\\t\\topenImage(message.text!, { values: message.values })\\n 432 | \\t\\t\\tbreak\\n 433 | \\t\\tcase \\\"saveImage\\\":\\n 434 | \\t\\t\\tsaveImage(message.dataUri!)\\n 435 | \\t\\t\\tbreak\\n 436 | \\t\\tcase \\\"openFile\\\":\\n 437 | \\t\\t\\topenFile(message.text!, message.values as { create?: boolean; content?: string; line?: number })\\n 438 | \\t\\t\\tbreak\\n 439 | \\t\\tcase \\\"openMention\\\":\\n 440 | \\t\\t\\topenMention(message.text)\\n 441 | \\t\\t\\tbreak\\n 442 | \\t\\tcase \\\"openExternal\\\":\\n 443 | \\t\\t\\tif (message.url) {\\n 444 | \\t\\t\\t\\tvscode.env.openExternal(vscode.Uri.parse(message.url))\\n 445 | \\t\\t\\t}\\n 446 | \\t\\t\\tbreak\\n 447 | \\t\\tcase \\\"checkpointDiff\\\":\\n 448 | \\t\\t\\tconst result = checkoutDiffPayloadSchema.safeParse(message.payload)\\n 449 | \\n 450 | \\t\\t\\tif (result.success) {\\n 451 | \\t\\t\\t\\tawait provider.getCurrentCline()?.checkpointDiff(result.data)\\n 452 | \\t\\t\\t}\\n 453 | \\n 454 | \\t\\t\\tbreak\\n 455 | \\t\\tcase \\\"checkpointRestore\\\": {\\n 456 | \\t\\t\\tconst result = checkoutRestorePayloadSchema.safeParse(message.payload)\\n 457 | \\n 458 | \\t\\t\\tif (result.success) {\\n 459 | \\t\\t\\t\\tawait provider.cancelTask()\\n 460 | \\n 461 | \\t\\t\\t\\ttry {\\n 462 | \\t\\t\\t\\t\\tawait pWaitFor(() => provider.getCurrentCline()?.isInitialized === true, { timeout: 3_000 })\\n 463 | \\t\\t\\t\\t} catch (error) {\\n 464 | \\t\\t\\t\\t\\tvscode.window.showErrorMessage(t(\\\"common:errors.checkpoint_timeout\\\"))\\n 465 | \\t\\t\\t\\t}\\n 466 | \\n 467 | \\t\\t\\t\\ttry {\\n 468 | \\t\\t\\t\\t\\tawait provider.getCurrentCline()?.checkpointRestore(result.data)\\n 469 | \\t\\t\\t\\t} catch (error) {\\n 470 | \\t\\t\\t\\t\\tvscode.window.showErrorMessage(t(\\\"common:errors.checkpoint_failed\\\"))\\n 471 | \\t\\t\\t\\t}\\n 472 | \\t\\t\\t}\\n 473 | \\n 474 | \\t\\t\\tbreak\\n 475 | \\t\\t}\\n 476 | \\t\\tcase \\\"cancelTask\\\":\\n 477 | \\t\\t\\tawait provider.cancelTask()\\n 478 | \\t\\t\\tbreak\\n 479 | \\t\\tcase \\\"allowedCommands\\\":\\n 480 | \\t\\t\\tawait provider.context.globalState.update(\\\"allowedCommands\\\", message.commands)\\n 481 | \\n 482 | \\t\\t\\t// Also update workspace settings.\\n 483 | \\t\\t\\tawait vscode.workspace\\n 484 | \\t\\t\\t\\t.getConfiguration(Package.name)\\n 485 | \\t\\t\\t\\t.update(\\\"allowedCommands\\\", message.commands, vscode.ConfigurationTarget.Global)\\n 486 | \\n 487 | \\t\\t\\tbreak\\n 488 | \\t\\tcase \\\"openCustomModesSettings\\\": {\\n 489 | \\t\\t\\tconst customModesFilePath = await provider.customModesManager.getCustomModesFilePath()\\n 490 | \\n 491 | \\t\\t\\tif (customModesFilePath) {\\n 492 | \\t\\t\\t\\topenFile(customModesFilePath)\\n 493 | \\t\\t\\t}\\n 494 | \\n 495 | \\t\\t\\tbreak\\n 496 | \\t\\t}\\n 497 | \\t\\tcase \\\"openMcpSettings\\\": {\\n 498 | \\t\\t\\tconst mcpSettingsFilePath = await provider.getMcpHub()?.getMcpSettingsFilePath()\\n 499 | \\n 500 | \\t\\t\\tif (mcpSettingsFilePath) {\\n 501 | \\t\\t\\t\\topenFile(mcpSettingsFilePath)\\n 502 | \\t\\t\\t}\\n 503 | \\n 504 | \\t\\t\\tbreak\\n 505 | \\t\\t}\\n 506 | \\t\\tcase \\\"openProjectMcpSettings\\\": {\\n 507 | \\t\\t\\tif (!vscode.workspace.workspaceFolders?.length) {\\n 508 | \\t\\t\\t\\tvscode.window.showErrorMessage(t(\\\"common:errors.no_workspace\\\"))\\n 509 | \\t\\t\\t\\treturn\\n 510 | \\t\\t\\t}\\n 511 | \\n 512 | \\t\\t\\tconst workspaceFolder = vscode.workspace.workspaceFolders[0]\\n 513 | \\t\\t\\tconst rooDir = path.join(workspaceFolder.uri.fsPath, \\\".roo\\\")\\n 514 | \\t\\t\\tconst mcpPath = path.join(rooDir, \\\"mcp.json\\\")\\n 515 | \\n 516 | \\t\\t\\ttry {\\n 517 | \\t\\t\\t\\tawait fs.mkdir(rooDir, { recursive: true })\\n 518 | \\t\\t\\t\\tconst exists = await fileExistsAtPath(mcpPath)\\n 519 | \\n 520 | \\t\\t\\t\\tif (!exists) {\\n 521 | \\t\\t\\t\\t\\tawait fs.writeFile(mcpPath, JSON.stringify({ mcpServers: {} }, null, 2))\\n 522 | \\t\\t\\t\\t}\\n 523 | \\n 524 | \\t\\t\\t\\tawait openFile(mcpPath)\\n 525 | \\t\\t\\t} catch (error) {\\n 526 | \\t\\t\\t\\tvscode.window.showErrorMessage(t(\\\"mcp:errors.create_json\\\", { error: `${error}` }))\\n 527 | \\t\\t\\t}\\n 528 | \\n 529 | \\t\\t\\tbreak\\n 530 | \\t\\t}\\n 531 | \\t\\tcase \\\"deleteMcpServer\\\": {\\n 532 | \\t\\t\\tif (!message.serverName) {\\n 533 | \\t\\t\\t\\tbreak\\n 534 | \\t\\t\\t}\\n 535 | \\n 536 | \\t\\t\\ttry {\\n 537 | \\t\\t\\t\\tprovider.log(`Attempting to delete MCP server: ${message.serverName}`)\\n 538 | \\t\\t\\t\\tawait provider.getMcpHub()?.deleteServer(message.serverName, message.source as \\\"global\\\" | \\\"project\\\")\\n 539 | \\t\\t\\t\\tprovider.log(`Successfully deleted MCP server: ${message.serverName}`)\\n 540 | \\n 541 | \\t\\t\\t\\t// Refresh the webview state\\n 542 | \\t\\t\\t\\tawait provider.postStateToWebview()\\n 543 | \\t\\t\\t} catch (error) {\\n 544 | \\t\\t\\t\\tconst errorMessage = error instanceof Error ? error.message : String(error)\\n 545 | \\t\\t\\t\\tprovider.log(`Failed to delete MCP server: ${errorMessage}`)\\n 546 | \\t\\t\\t\\t// Error messages are already handled by McpHub.deleteServer\\n 547 | \\t\\t\\t}\\n 548 | \\t\\t\\tbreak\\n 549 | \\t\\t}\\n 550 | \\t\\tcase \\\"restartMcpServer\\\": {\\n 551 | \\t\\t\\ttry {\\n 552 | \\t\\t\\t\\tawait provider.getMcpHub()?.restartConnection(message.text!, message.source as \\\"global\\\" | \\\"project\\\")\\n 553 | \\t\\t\\t} catch (error) {\\n 554 | \\t\\t\\t\\tprovider.log(\\n 555 | \\t\\t\\t\\t\\t`Failed to retry connection for ${message.text}: ${JSON.stringify(error, Object.getOwnPropertyNames(error), 2)}`,\\n 556 | \\t\\t\\t\\t)\\n 557 | \\t\\t\\t}\\n 558 | \\t\\t\\tbreak\\n 559 | \\t\\t}\\n 560 | \\t\\tcase \\\"toggleToolAlwaysAllow\\\": {\\n 561 | \\t\\t\\ttry {\\n 562 | \\t\\t\\t\\tawait provider\\n 563 | \\t\\t\\t\\t\\t.getMcpHub()\\n 564 | \\t\\t\\t\\t\\t?.toggleToolAlwaysAllow(\\n 565 | \\t\\t\\t\\t\\t\\tmessage.serverName!,\\n 566 | \\t\\t\\t\\t\\t\\tmessage.source as \\\"global\\\" | \\\"project\\\",\\n 567 | \\t\\t\\t\\t\\t\\tmessage.toolName!,\\n 568 | \\t\\t\\t\\t\\t\\tBoolean(message.alwaysAllow),\\n 569 | \\t\\t\\t\\t\\t)\\n 570 | \\t\\t\\t} catch (error) {\\n 571 | \\t\\t\\t\\tprovider.log(\\n 572 | \\t\\t\\t\\t\\t`Failed to toggle auto-approve for tool ${message.toolName}: ${JSON.stringify(error, Object.getOwnPropertyNames(error), 2)}`,\\n 573 | \\t\\t\\t\\t)\\n 574 | \\t\\t\\t}\\n 575 | \\t\\t\\tbreak\\n 576 | \\t\\t}\\n 577 | \\t\\tcase \\\"toggleMcpServer\\\": {\\n 578 | \\t\\t\\ttry {\\n 579 | \\t\\t\\t\\tawait provider\\n 580 | \\t\\t\\t\\t\\t.getMcpHub()\\n 581 | \\t\\t\\t\\t\\t?.toggleServerDisabled(\\n 582 | \\t\\t\\t\\t\\t\\tmessage.serverName!,\\n 583 | \\t\\t\\t\\t\\t\\tmessage.disabled!,\\n 584 | \\t\\t\\t\\t\\t\\tmessage.source as \\\"global\\\" | \\\"project\\\",\\n 585 | \\t\\t\\t\\t\\t)\\n 586 | \\t\\t\\t} catch (error) {\\n 587 | \\t\\t\\t\\tprovider.log(\\n 588 | \\t\\t\\t\\t\\t`Failed to toggle MCP server ${message.serverName}: ${JSON.stringify(error, Object.getOwnPropertyNames(error), 2)}`,\\n 589 | \\t\\t\\t\\t)\\n 590 | \\t\\t\\t}\\n 591 | \\t\\t\\tbreak\\n 592 | \\t\\t}\\n 593 | \\t\\tcase \\\"mcpEnabled\\\":\\n 594 | \\t\\t\\tconst mcpEnabled = message.bool ?? true\\n 595 | \\t\\t\\tawait updateGlobalState(\\\"mcpEnabled\\\", mcpEnabled)\\n 596 | \\t\\t\\tawait provider.postStateToWebview()\\n 597 | \\t\\t\\tbreak\\n 598 | \\t\\tcase \\\"enableMcpServerCreation\\\":\\n 599 | \\t\\t\\tawait updateGlobalState(\\\"enableMcpServerCreation\\\", message.bool ?? true)\\n 600 | \\t\\t\\tawait provider.postStateToWebview()\\n 601 | \\t\\t\\tbreak\\n 602 | \\t\\tcase \\\"refreshAllMcpServers\\\": {\\n 603 | \\t\\t\\tconst mcpHub = provider.getMcpHub()\\n 604 | \\t\\t\\tif (mcpHub) {\\n 605 | \\t\\t\\t\\tawait mcpHub.refreshAllConnections()\\n 606 | \\t\\t\\t}\\n 607 | \\t\\t\\tbreak\\n 608 | \\t\\t}\\n 609 | \\t\\t// playSound handler removed - now handled directly in the webview\\n 610 | \\t\\tcase \\\"soundEnabled\\\":\\n 611 | \\t\\t\\tconst soundEnabled = message.bool ?? true\\n 612 | \\t\\t\\tawait updateGlobalState(\\\"soundEnabled\\\", soundEnabled)\\n 613 | \\t\\t\\tawait provider.postStateToWebview()\\n 614 | \\t\\t\\tbreak\\n 615 | \\t\\tcase \\\"soundVolume\\\":\\n 616 | \\t\\t\\tconst soundVolume = message.value ?? 0.5\\n 617 | \\t\\t\\tawait updateGlobalState(\\\"soundVolume\\\", soundVolume)\\n 618 | \\t\\t\\tawait provider.postStateToWebview()\\n 619 | \\t\\t\\tbreak\\n 620 | \\t\\tcase \\\"ttsEnabled\\\":\\n 621 | \\t\\t\\tconst ttsEnabled = message.bool ?? true\\n 622 | \\t\\t\\tawait updateGlobalState(\\\"ttsEnabled\\\", ttsEnabled)\\n 623 | \\t\\t\\tsetTtsEnabled(ttsEnabled) // Add this line to update the tts utility\\n 624 | \\t\\t\\tawait provider.postStateToWebview()\\n 625 | \\t\\t\\tbreak\\n 626 | \\t\\tcase \\\"ttsSpeed\\\":\\n 627 | \\t\\t\\tconst ttsSpeed = message.value ?? 1.0\\n 628 | \\t\\t\\tawait updateGlobalState(\\\"ttsSpeed\\\", ttsSpeed)\\n 629 | \\t\\t\\tsetTtsSpeed(ttsSpeed)\\n 630 | \\t\\t\\tawait provider.postStateToWebview()\\n 631 | \\t\\t\\tbreak\\n 632 | \\t\\tcase \\\"playTts\\\":\\n 633 | \\t\\t\\tif (message.text) {\\n 634 | \\t\\t\\t\\tplayTts(message.text, {\\n 635 | \\t\\t\\t\\t\\tonStart: () => provider.postMessageToWebview({ type: \\\"ttsStart\\\", text: message.text }),\\n 636 | \\t\\t\\t\\t\\tonStop: () => provider.postMessageToWebview({ type: \\\"ttsStop\\\", text: message.text }),\\n 637 | \\t\\t\\t\\t})\\n 638 | \\t\\t\\t}\\n 639 | \\t\\t\\tbreak\\n 640 | \\t\\tcase \\\"stopTts\\\":\\n 641 | \\t\\t\\tstopTts()\\n 642 | \\t\\t\\tbreak\\n 643 | \\t\\tcase \\\"diffEnabled\\\":\\n 644 | \\t\\t\\tconst diffEnabled = message.bool ?? true\\n 645 | \\t\\t\\tawait updateGlobalState(\\\"diffEnabled\\\", diffEnabled)\\n 646 | \\t\\t\\tawait provider.postStateToWebview()\\n 647 | \\t\\t\\tbreak\\n 648 | \\t\\tcase \\\"enableCheckpoints\\\":\\n 649 | \\t\\t\\tconst enableCheckpoints = message.bool ?? true\\n 650 | \\t\\t\\tawait updateGlobalState(\\\"enableCheckpoints\\\", enableCheckpoints)\\n 651 | \\t\\t\\tawait provider.postStateToWebview()\\n 652 | \\t\\t\\tbreak\\n 653 | \\t\\tcase \\\"browserViewportSize\\\":\\n 654 | \\t\\t\\tconst browserViewportSize = message.text ?? \\\"900x600\\\"\\n 655 | \\t\\t\\tawait updateGlobalState(\\\"browserViewportSize\\\", browserViewportSize)\\n 656 | \\t\\t\\tawait provider.postStateToWebview()\\n 657 | \\t\\t\\tbreak\\n 658 | \\t\\tcase \\\"remoteBrowserHost\\\":\\n 659 | \\t\\t\\tawait updateGlobalState(\\\"remoteBrowserHost\\\", message.text)\\n 660 | \\t\\t\\tawait provider.postStateToWebview()\\n 661 | \\t\\t\\tbreak\\n 662 | \\t\\tcase \\\"remoteBrowserEnabled\\\":\\n 663 | \\t\\t\\t// Store the preference in global state\\n 664 | \\t\\t\\t// remoteBrowserEnabled now means \\\"enable remote browser connection\\\"\\n 665 | \\t\\t\\tawait updateGlobalState(\\\"remoteBrowserEnabled\\\", message.bool ?? false)\\n 666 | \\t\\t\\t// If disabling remote browser connection, clear the remoteBrowserHost\\n 667 | \\t\\t\\tif (!message.bool) {\\n 668 | \\t\\t\\t\\tawait updateGlobalState(\\\"remoteBrowserHost\\\", undefined)\\n 669 | \\t\\t\\t}\\n 670 | \\t\\t\\tawait provider.postStateToWebview()\\n 671 | \\t\\t\\tbreak\\n 672 | \\t\\tcase \\\"testBrowserConnection\\\":\\n 673 | \\t\\t\\t// If no text is provided, try auto-discovery\\n 674 | \\t\\t\\tif (!message.text) {\\n 675 | \\t\\t\\t\\t// Use testBrowserConnection for auto-discovery\\n 676 | \\t\\t\\t\\tconst chromeHostUrl = await discoverChromeHostUrl()\\n 677 | \\n 678 | \\t\\t\\t\\tif (chromeHostUrl) {\\n 679 | \\t\\t\\t\\t\\t// Send the result back to the webview\\n 680 | \\t\\t\\t\\t\\tawait provider.postMessageToWebview({\\n 681 | \\t\\t\\t\\t\\t\\ttype: \\\"browserConnectionResult\\\",\\n 682 | \\t\\t\\t\\t\\t\\tsuccess: !!chromeHostUrl,\\n 683 | \\t\\t\\t\\t\\t\\ttext: `Auto-discovered and tested connection to Chrome: ${chromeHostUrl}`,\\n 684 | \\t\\t\\t\\t\\t\\tvalues: { endpoint: chromeHostUrl },\\n 685 | \\t\\t\\t\\t\\t})\\n 686 | \\t\\t\\t\\t} else {\\n 687 | \\t\\t\\t\\t\\tawait provider.postMessageToWebview({\\n 688 | \\t\\t\\t\\t\\t\\ttype: \\\"browserConnectionResult\\\",\\n 689 | \\t\\t\\t\\t\\t\\tsuccess: false,\\n 690 | \\t\\t\\t\\t\\t\\ttext: \\\"No Chrome instances found on the network. Make sure Chrome is running with remote debugging enabled (--remote-debugging-port=9222).\\\",\\n 691 | \\t\\t\\t\\t\\t})\\n 692 | \\t\\t\\t\\t}\\n 693 | \\t\\t\\t} else {\\n 694 | \\t\\t\\t\\t// Test the provided URL\\n 695 | \\t\\t\\t\\tconst customHostUrl = message.text\\n 696 | \\t\\t\\t\\tconst hostIsValid = await tryChromeHostUrl(message.text)\\n 697 | \\n 698 | \\t\\t\\t\\t// Send the result back to the webview\\n 699 | \\t\\t\\t\\tawait provider.postMessageToWebview({\\n 700 | \\t\\t\\t\\t\\ttype: \\\"browserConnectionResult\\\",\\n 701 | \\t\\t\\t\\t\\tsuccess: hostIsValid,\\n 702 | \\t\\t\\t\\t\\ttext: hostIsValid\\n 703 | \\t\\t\\t\\t\\t\\t? `Successfully connected to Chrome: ${customHostUrl}`\\n 704 | \\t\\t\\t\\t\\t\\t: \\\"Failed to connect to Chrome\\\",\\n 705 | \\t\\t\\t\\t})\\n 706 | \\t\\t\\t}\\n 707 | \\t\\t\\tbreak\\n 708 | \\t\\tcase \\\"fuzzyMatchThreshold\\\":\\n 709 | \\t\\t\\tawait updateGlobalState(\\\"fuzzyMatchThreshold\\\", message.value)\\n 710 | \\t\\t\\tawait provider.postStateToWebview()\\n 711 | \\t\\t\\tbreak\\n 712 | \\t\\tcase \\\"updateVSCodeSetting\\\": {\\n 713 | \\t\\t\\tconst { setting, value } = message\\n 714 | \\n 715 | \\t\\t\\tif (setting !== undefined && value !== undefined) {\\n 716 | \\t\\t\\t\\tif (ALLOWED_VSCODE_SETTINGS.has(setting)) {\\n 717 | \\t\\t\\t\\t\\tawait vscode.workspace.getConfiguration().update(setting, value, true)\\n 718 | \\t\\t\\t\\t} else {\\n 719 | \\t\\t\\t\\t\\tvscode.window.showErrorMessage(`Cannot update restricted VSCode setting: ${setting}`)\\n 720 | \\t\\t\\t\\t}\\n 721 | \\t\\t\\t}\\n 722 | \\n 723 | \\t\\t\\tbreak\\n 724 | \\t\\t}\\n 725 | \\t\\tcase \\\"getVSCodeSetting\\\":\\n 726 | \\t\\t\\tconst { setting } = message\\n 727 | \\n 728 | \\t\\t\\tif (setting) {\\n 729 | \\t\\t\\t\\ttry {\\n 730 | \\t\\t\\t\\t\\tawait provider.postMessageToWebview({\\n 731 | \\t\\t\\t\\t\\t\\ttype: \\\"vsCodeSetting\\\",\\n 732 | \\t\\t\\t\\t\\t\\tsetting,\\n 733 | \\t\\t\\t\\t\\t\\tvalue: vscode.workspace.getConfiguration().get(setting),\\n 734 | \\t\\t\\t\\t\\t})\\n 735 | \\t\\t\\t\\t} catch (error) {\\n 736 | \\t\\t\\t\\t\\tconsole.error(`Failed to get VSCode setting ${message.setting}:`, error)\\n 737 | \\n 738 | \\t\\t\\t\\t\\tawait provider.postMessageToWebview({\\n 739 | \\t\\t\\t\\t\\t\\ttype: \\\"vsCodeSetting\\\",\\n 740 | \\t\\t\\t\\t\\t\\tsetting,\\n 741 | \\t\\t\\t\\t\\t\\terror: `Failed to get setting: ${error.message}`,\\n 742 | \\t\\t\\t\\t\\t\\tvalue: undefined,\\n 743 | \\t\\t\\t\\t\\t})\\n 744 | \\t\\t\\t\\t}\\n 745 | \\t\\t\\t}\\n 746 | \\n 747 | \\t\\t\\tbreak\\n 748 | \\t\\tcase \\\"alwaysApproveResubmit\\\":\\n 749 | \\t\\t\\tawait updateGlobalState(\\\"alwaysApproveResubmit\\\", message.bool ?? false)\\n 750 | \\t\\t\\tawait provider.postStateToWebview()\\n 751 | \\t\\t\\tbreak\\n 752 | \\t\\tcase \\\"requestDelaySeconds\\\":\\n 753 | \\t\\t\\tawait updateGlobalState(\\\"requestDelaySeconds\\\", message.value ?? 5)\\n 754 | \\t\\t\\tawait provider.postStateToWebview()\\n 755 | \\t\\t\\tbreak\\n 756 | \\t\\tcase \\\"writeDelayMs\\\":\\n 757 | \\t\\t\\tawait updateGlobalState(\\\"writeDelayMs\\\", message.value)\\n 758 | \\t\\t\\tawait provider.postStateToWebview()\\n 759 | \\t\\t\\tbreak\\n 760 | \\t\\tcase \\\"terminalOutputLineLimit\\\":\\n 761 | \\t\\t\\tawait updateGlobalState(\\\"terminalOutputLineLimit\\\", message.value)\\n 762 | \\t\\t\\tawait provider.postStateToWebview()\\n 763 | \\t\\t\\tbreak\\n 764 | \\t\\tcase \\\"terminalShellIntegrationTimeout\\\":\\n 765 | \\t\\t\\tawait updateGlobalState(\\\"terminalShellIntegrationTimeout\\\", message.value)\\n 766 | \\t\\t\\tawait provider.postStateToWebview()\\n 767 | \\t\\t\\tif (message.value !== undefined) {\\n 768 | \\t\\t\\t\\tTerminal.setShellIntegrationTimeout(message.value)\\n 769 | \\t\\t\\t}\\n 770 | \\t\\t\\tbreak\\n 771 | \\t\\tcase \\\"terminalShellIntegrationDisabled\\\":\\n 772 | \\t\\t\\tawait updateGlobalState(\\\"terminalShellIntegrationDisabled\\\", message.bool)\\n 773 | \\t\\t\\tawait provider.postStateToWebview()\\n 774 | \\t\\t\\tif (message.bool !== undefined) {\\n 775 | \\t\\t\\t\\tTerminal.setShellIntegrationDisabled(message.bool)\\n 776 | \\t\\t\\t}\\n 777 | \\t\\t\\tbreak\\n 778 | \\t\\tcase \\\"terminalCommandDelay\\\":\\n 779 | \\t\\t\\tawait updateGlobalState(\\\"terminalCommandDelay\\\", message.value)\\n 780 | \\t\\t\\tawait provider.postStateToWebview()\\n 781 | \\t\\t\\tif (message.value !== undefined) {\\n 782 | \\t\\t\\t\\tTerminal.setCommandDelay(message.value)\\n 783 | \\t\\t\\t}\\n 784 | \\t\\t\\tbreak\\n 785 | \\t\\tcase \\\"terminalPowershellCounter\\\":\\n 786 | \\t\\t\\tawait updateGlobalState(\\\"terminalPowershellCounter\\\", message.bool)\\n 787 | \\t\\t\\tawait provider.postStateToWebview()\\n 788 | \\t\\t\\tif (message.bool !== undefined) {\\n 789 | \\t\\t\\t\\tTerminal.setPowershellCounter(message.bool)\\n 790 | \\t\\t\\t}\\n 791 | \\t\\t\\tbreak\\n 792 | \\t\\tcase \\\"terminalZshClearEolMark\\\":\\n 793 | \\t\\t\\tawait updateGlobalState(\\\"terminalZshClearEolMark\\\", message.bool)\\n 794 | \\t\\t\\tawait provider.postStateToWebview()\\n 795 | \\t\\t\\tif (message.bool !== undefined) {\\n 796 | \\t\\t\\t\\tTerminal.setTerminalZshClearEolMark(message.bool)\\n 797 | \\t\\t\\t}\\n 798 | \\t\\t\\tbreak\\n 799 | \\t\\tcase \\\"terminalZshOhMy\\\":\\n 800 | \\t\\t\\tawait updateGlobalState(\\\"terminalZshOhMy\\\", message.bool)\\n 801 | \\t\\t\\tawait provider.postStateToWebview()\\n 802 | \\t\\t\\tif (message.bool !== undefined) {\\n 803 | \\t\\t\\t\\tTerminal.setTerminalZshOhMy(message.bool)\\n 804 | \\t\\t\\t}\\n 805 | \\t\\t\\tbreak\\n 806 | \\t\\tcase \\\"terminalZshP10k\\\":\\n 807 | \\t\\t\\tawait updateGlobalState(\\\"terminalZshP10k\\\", message.bool)\\n 808 | \\t\\t\\tawait provider.postStateToWebview()\\n 809 | \\t\\t\\tif (message.bool !== undefined) {\\n 810 | \\t\\t\\t\\tTerminal.setTerminalZshP10k(message.bool)\\n 811 | \\t\\t\\t}\\n 812 | \\t\\t\\tbreak\\n 813 | \\t\\tcase \\\"terminalZdotdir\\\":\\n 814 | \\t\\t\\tawait updateGlobalState(\\\"terminalZdotdir\\\", message.bool)\\n 815 | \\t\\t\\tawait provider.postStateToWebview()\\n 816 | \\t\\t\\tif (message.bool !== undefined) {\\n 817 | \\t\\t\\t\\tTerminal.setTerminalZdotdir(message.bool)\\n 818 | \\t\\t\\t}\\n 819 | \\t\\t\\tbreak\\n 820 | \\t\\tcase \\\"terminalCompressProgressBar\\\":\\n 821 | \\t\\t\\tawait updateGlobalState(\\\"terminalCompressProgressBar\\\", message.bool)\\n 822 | \\t\\t\\tawait provider.postStateToWebview()\\n 823 | \\t\\t\\tif (message.bool !== undefined) {\\n 824 | \\t\\t\\t\\tTerminal.setCompressProgressBar(message.bool)\\n 825 | \\t\\t\\t}\\n 826 | \\t\\t\\tbreak\\n 827 | \\t\\tcase \\\"mode\\\":\\n 828 | \\t\\t\\tawait provider.handleModeSwitch(message.text as Mode)\\n 829 | \\t\\t\\tbreak\\n 830 | \\t\\tcase \\\"updateSupportPrompt\\\":\\n 831 | \\t\\t\\ttry {\\n 832 | \\t\\t\\t\\tif (!message?.values) {\\n 833 | \\t\\t\\t\\t\\treturn\\n 834 | \\t\\t\\t\\t}\\n 835 | \\n 836 | \\t\\t\\t\\t// Replace all prompts with the new values from the cached state\\n 837 | \\t\\t\\t\\tawait updateGlobalState(\\\"customSupportPrompts\\\", message.values)\\n 838 | \\t\\t\\t\\tawait provider.postStateToWebview()\\n 839 | \\t\\t\\t} catch (error) {\\n 840 | \\t\\t\\t\\tprovider.log(\\n 841 | \\t\\t\\t\\t\\t`Error update support prompt: ${JSON.stringify(error, Object.getOwnPropertyNames(error), 2)}`,\\n 842 | \\t\\t\\t\\t)\\n 843 | \\t\\t\\t\\tvscode.window.showErrorMessage(t(\\\"common:errors.update_support_prompt\\\"))\\n 844 | \\t\\t\\t}\\n 845 | \\t\\t\\tbreak\\n 846 | \\t\\tcase \\\"updatePrompt\\\":\\n 847 | \\t\\t\\tif (message.promptMode && message.customPrompt !== undefined) {\\n 848 | \\t\\t\\t\\tconst existingPrompts = getGlobalState(\\\"customModePrompts\\\") ?? {}\\n 849 | \\t\\t\\t\\tconst updatedPrompts = { ...existingPrompts, [message.promptMode]: message.customPrompt }\\n 850 | \\t\\t\\t\\tawait updateGlobalState(\\\"customModePrompts\\\", updatedPrompts)\\n 851 | \\t\\t\\t\\tconst currentState = await provider.getStateToPostToWebview()\\n 852 | \\t\\t\\t\\tconst stateWithPrompts = { ...currentState, customModePrompts: updatedPrompts }\\n 853 | \\t\\t\\t\\tprovider.postMessageToWebview({ type: \\\"state\\\", state: stateWithPrompts })\\n 854 | \\t\\t\\t}\\n 855 | \\t\\t\\tbreak\\n 856 | \\t\\tcase \\\"deleteMessage\\\": {\\n 857 | \\t\\t\\tconst answer = await vscode.window.showInformationMessage(\\n 858 | \\t\\t\\t\\tt(\\\"common:confirmation.delete_message\\\"),\\n 859 | \\t\\t\\t\\t{ modal: true },\\n 860 | \\t\\t\\t\\tt(\\\"common:confirmation.just_this_message\\\"),\\n 861 | \\t\\t\\t\\tt(\\\"common:confirmation.this_and_subsequent\\\"),\\n 862 | \\t\\t\\t)\\n 863 | \\n 864 | \\t\\t\\tif (\\n 865 | \\t\\t\\t\\t(answer === t(\\\"common:confirmation.just_this_message\\\") ||\\n 866 | \\t\\t\\t\\t\\tanswer === t(\\\"common:confirmation.this_and_subsequent\\\")) &&\\n 867 | \\t\\t\\t\\tprovider.getCurrentCline() &&\\n 868 | \\t\\t\\t\\ttypeof message.value === \\\"number\\\" &&\\n 869 | \\t\\t\\t\\tmessage.value\\n 870 | \\t\\t\\t) {\\n 871 | \\t\\t\\t\\tconst timeCutoff = message.value - 1000 // 1 second buffer before the message to delete\\n 872 | \\n 873 | \\t\\t\\t\\tconst messageIndex = provider\\n 874 | \\t\\t\\t\\t\\t.getCurrentCline()!\\n 875 | \\t\\t\\t\\t\\t.clineMessages.findIndex((msg) => msg.ts && msg.ts >= timeCutoff)\\n 876 | \\n 877 | \\t\\t\\t\\tconst apiConversationHistoryIndex = provider\\n 878 | \\t\\t\\t\\t\\t.getCurrentCline()\\n 879 | \\t\\t\\t\\t\\t?.apiConversationHistory.findIndex((msg) => msg.ts && msg.ts >= timeCutoff)\\n 880 | \\n 881 | \\t\\t\\t\\tif (messageIndex !== -1) {\\n 882 | \\t\\t\\t\\t\\tconst { historyItem } = await provider.getTaskWithId(provider.getCurrentCline()!.taskId)\\n 883 | \\n 884 | \\t\\t\\t\\t\\tif (answer === t(\\\"common:confirmation.just_this_message\\\")) {\\n 885 | \\t\\t\\t\\t\\t\\t// Find the next user message first\\n 886 | \\t\\t\\t\\t\\t\\tconst nextUserMessage = provider\\n 887 | \\t\\t\\t\\t\\t\\t\\t.getCurrentCline()!\\n 888 | \\t\\t\\t\\t\\t\\t\\t.clineMessages.slice(messageIndex + 1)\\n 889 | \\t\\t\\t\\t\\t\\t\\t.find((msg) => msg.type === \\\"say\\\" && msg.say === \\\"user_feedback\\\")\\n 890 | \\n 891 | \\t\\t\\t\\t\\t\\t// Handle UI messages\\n 892 | \\t\\t\\t\\t\\t\\tif (nextUserMessage) {\\n 893 | \\t\\t\\t\\t\\t\\t\\t// Find absolute index of next user message\\n 894 | \\t\\t\\t\\t\\t\\t\\tconst nextUserMessageIndex = provider\\n 895 | \\t\\t\\t\\t\\t\\t\\t\\t.getCurrentCline()!\\n 896 | \\t\\t\\t\\t\\t\\t\\t\\t.clineMessages.findIndex((msg) => msg === nextUserMessage)\\n 897 | \\n 898 | \\t\\t\\t\\t\\t\\t\\t// Keep messages before current message and after next user message\\n 899 | \\t\\t\\t\\t\\t\\t\\tawait provider\\n 900 | \\t\\t\\t\\t\\t\\t\\t\\t.getCurrentCline()!\\n 901 | \\t\\t\\t\\t\\t\\t\\t\\t.overwriteClineMessages([\\n 902 | \\t\\t\\t\\t\\t\\t\\t\\t\\t...provider.getCurrentCline()!.clineMessages.slice(0, messageIndex),\\n 903 | \\t\\t\\t\\t\\t\\t\\t\\t\\t...provider.getCurrentCline()!.clineMessages.slice(nextUserMessageIndex),\\n 904 | \\t\\t\\t\\t\\t\\t\\t\\t])\\n 905 | \\t\\t\\t\\t\\t\\t} else {\\n 906 | \\t\\t\\t\\t\\t\\t\\t// If no next user message, keep only messages before current message\\n 907 | \\t\\t\\t\\t\\t\\t\\tawait provider\\n 908 | \\t\\t\\t\\t\\t\\t\\t\\t.getCurrentCline()!\\n 909 | \\t\\t\\t\\t\\t\\t\\t\\t.overwriteClineMessages(\\n 910 | \\t\\t\\t\\t\\t\\t\\t\\t\\tprovider.getCurrentCline()!.clineMessages.slice(0, messageIndex),\\n 911 | \\t\\t\\t\\t\\t\\t\\t\\t)\\n 912 | \\t\\t\\t\\t\\t\\t}\\n 913 | \\n 914 | \\t\\t\\t\\t\\t\\t// Handle API messages\\n 915 | \\t\\t\\t\\t\\t\\tif (apiConversationHistoryIndex !== -1) {\\n 916 | \\t\\t\\t\\t\\t\\t\\tif (nextUserMessage && nextUserMessage.ts) {\\n 917 | \\t\\t\\t\\t\\t\\t\\t\\t// Keep messages before current API message and after next user message\\n 918 | \\t\\t\\t\\t\\t\\t\\t\\tawait provider\\n 919 | \\t\\t\\t\\t\\t\\t\\t\\t\\t.getCurrentCline()!\\n 920 | \\t\\t\\t\\t\\t\\t\\t\\t\\t.overwriteApiConversationHistory([\\n 921 | \\t\\t\\t\\t\\t\\t\\t\\t\\t\\t...provider\\n 922 | \\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t.getCurrentCline()!\\n 923 | \\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t.apiConversationHistory.slice(0, apiConversationHistoryIndex),\\n 924 | \\t\\t\\t\\t\\t\\t\\t\\t\\t\\t...provider\\n 925 | \\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t.getCurrentCline()!\\n 926 | \\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t.apiConversationHistory.filter(\\n 927 | \\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t(msg) => msg.ts && msg.ts >= nextUserMessage.ts,\\n 928 | \\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t),\\n 929 | \\t\\t\\t\\t\\t\\t\\t\\t\\t])\\n 930 | \\t\\t\\t\\t\\t\\t\\t} else {\\n 931 | \\t\\t\\t\\t\\t\\t\\t\\t// If no next user message, keep only messages before current API message\\n 932 | \\t\\t\\t\\t\\t\\t\\t\\tawait provider\\n 933 | \\t\\t\\t\\t\\t\\t\\t\\t\\t.getCurrentCline()!\\n 934 | \\t\\t\\t\\t\\t\\t\\t\\t\\t.overwriteApiConversationHistory(\\n 935 | \\t\\t\\t\\t\\t\\t\\t\\t\\t\\tprovider\\n 936 | \\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t.getCurrentCline()!\\n 937 | \\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t.apiConversationHistory.slice(0, apiConversationHistoryIndex),\\n 938 | \\t\\t\\t\\t\\t\\t\\t\\t\\t)\\n 939 | \\t\\t\\t\\t\\t\\t\\t}\\n 940 | \\t\\t\\t\\t\\t\\t}\\n 941 | \\t\\t\\t\\t\\t} else if (answer === t(\\\"common:confirmation.this_and_subsequent\\\")) {\\n 942 | \\t\\t\\t\\t\\t\\t// Delete this message and all that follow\\n 943 | \\t\\t\\t\\t\\t\\tawait provider\\n 944 | \\t\\t\\t\\t\\t\\t\\t.getCurrentCline()!\\n 945 | \\t\\t\\t\\t\\t\\t\\t.overwriteClineMessages(provider.getCurrentCline()!.clineMessages.slice(0, messageIndex))\\n 946 | \\t\\t\\t\\t\\t\\tif (apiConversationHistoryIndex !== -1) {\\n 947 | \\t\\t\\t\\t\\t\\t\\tawait provider\\n 948 | \\t\\t\\t\\t\\t\\t\\t\\t.getCurrentCline()!\\n 949 | \\t\\t\\t\\t\\t\\t\\t\\t.overwriteApiConversationHistory(\\n 950 | \\t\\t\\t\\t\\t\\t\\t\\t\\tprovider\\n 951 | \\t\\t\\t\\t\\t\\t\\t\\t\\t\\t.getCurrentCline()!\\n 952 | \\t\\t\\t\\t\\t\\t\\t\\t\\t\\t.apiConversationHistory.slice(0, apiConversationHistoryIndex),\\n 953 | \\t\\t\\t\\t\\t\\t\\t\\t)\\n 954 | \\t\\t\\t\\t\\t\\t}\\n 955 | \\t\\t\\t\\t\\t}\\n 956 | \\n 957 | \\t\\t\\t\\t\\tawait provider.initClineWithHistoryItem(historyItem)\\n 958 | \\t\\t\\t\\t}\\n 959 | \\t\\t\\t}\\n 960 | \\t\\t\\tbreak\\n 961 | \\t\\t}\\n 962 | \\t\\tcase \\\"screenshotQuality\\\":\\n 963 | \\t\\t\\tawait updateGlobalState(\\\"screenshotQuality\\\", message.value)\\n 964 | \\t\\t\\tawait provider.postStateToWebview()\\n 965 | \\t\\t\\tbreak\\n 966 | \\t\\tcase \\\"maxOpenTabsContext\\\":\\n 967 | \\t\\t\\tconst tabCount = Math.min(Math.max(0, message.value ?? 20), 500)\\n 968 | \\t\\t\\tawait updateGlobalState(\\\"maxOpenTabsContext\\\", tabCount)\\n 969 | \\t\\t\\tawait provider.postStateToWebview()\\n 970 | \\t\\t\\tbreak\\n 971 | \\t\\tcase \\\"maxWorkspaceFiles\\\":\\n 972 | \\t\\t\\tconst fileCount = Math.min(Math.max(0, message.value ?? 200), 500)\\n 973 | \\t\\t\\tawait updateGlobalState(\\\"maxWorkspaceFiles\\\", fileCount)\\n 974 | \\t\\t\\tawait provider.postStateToWebview()\\n 975 | \\t\\t\\tbreak\\n 976 | \\t\\tcase \\\"browserToolEnabled\\\":\\n 977 | \\t\\t\\tawait updateGlobalState(\\\"browserToolEnabled\\\", message.bool ?? true)\\n 978 | \\t\\t\\tawait provider.postStateToWebview()\\n 979 | \\t\\t\\tbreak\\n 980 | \\t\\tcase \\\"language\\\":\\n 981 | \\t\\t\\tchangeLanguage(message.text ?? \\\"en\\\")\\n 982 | \\t\\t\\tawait updateGlobalState(\\\"language\\\", message.text as Language)\\n 983 | \\t\\t\\tawait provider.postStateToWebview()\\n 984 | \\t\\t\\tbreak\\n 985 | \\t\\tcase \\\"showRooIgnoredFiles\\\":\\n 986 | \\t\\t\\tawait updateGlobalState(\\\"showRooIgnoredFiles\\\", message.bool ?? true)\\n 987 | \\t\\t\\tawait provider.postStateToWebview()\\n 988 | \\t\\t\\tbreak\\n 989 | \\t\\tcase \\\"maxReadFileLine\\\":\\n 990 | \\t\\t\\tawait updateGlobalState(\\\"maxReadFileLine\\\", message.value)\\n 991 | \\t\\t\\tawait provider.postStateToWebview()\\n 992 | \\t\\t\\tbreak\\n 993 | \\t\\tcase \\\"maxConcurrentFileReads\\\":\\n 994 | \\t\\t\\tconst valueToSave = message.value // Capture the value intended for saving\\n 995 | \\t\\t\\tawait updateGlobalState(\\\"maxConcurrentFileReads\\\", valueToSave)\\n 996 | \\t\\t\\tawait provider.postStateToWebview()\\n 997 | \\t\\t\\tbreak\\n 998 | \\t\\tcase \\\"setHistoryPreviewCollapsed\\\": // Add the new case handler\\n 999 | \\t\\t\\tawait updateGlobalState(\\\"historyPreviewCollapsed\\\", message.bool ?? false)\\n1000 | \\t\\t\\t// No need to call postStateToWebview here as the UI already updated optimistically\\n1001 | \\t\\t\\tbreak\\n1002 | \\t\\tcase \\\"toggleApiConfigPin\\\":\\n1003 | \\t\\t\\tif (message.text) {\\n1004 | \\t\\t\\t\\tconst currentPinned = getGlobalState(\\\"pinnedApiConfigs\\\") ?? {}\\n1005 | \\t\\t\\t\\tconst updatedPinned: Record<string, boolean> = { ...currentPinned }\\n1006 | \\n1007 | \\t\\t\\t\\tif (currentPinned[message.text]) {\\n1008 | \\t\\t\\t\\t\\tdelete updatedPinned[message.text]\\n1009 | \\t\\t\\t\\t} else {\\n1010 | \\t\\t\\t\\t\\tupdatedPinned[message.text] = true\\n1011 | \\t\\t\\t\\t}\\n1012 | \\n1013 | \\t\\t\\t\\tawait updateGlobalState(\\\"pinnedApiConfigs\\\", updatedPinned)\\n1014 | \\t\\t\\t\\tawait provider.postStateToWebview()\\n1015 | \\t\\t\\t}\\n1016 | \\t\\t\\tbreak\\n1017 | \\t\\tcase \\\"enhancementApiConfigId\\\":\\n1018 | \\t\\t\\tawait updateGlobalState(\\\"enhancementApiConfigId\\\", message.text)\\n1019 | \\t\\t\\tawait provider.postStateToWebview()\\n1020 | \\t\\t\\tbreak\\n1021 | \\t\\tcase \\\"condensingApiConfigId\\\":\\n1022 | \\t\\t\\tawait updateGlobalState(\\\"condensingApiConfigId\\\", message.text)\\n1023 | \\t\\t\\tawait provider.postStateToWebview()\\n1024 | \\t\\t\\tbreak\\n1025 | \\t\\tcase \\\"updateCondensingPrompt\\\":\\n1026 | \\t\\t\\tawait updateGlobalState(\\\"customCondensingPrompt\\\", message.text)\\n1027 | \\t\\t\\tawait provider.postStateToWebview()\\n1028 | \\t\\t\\tbreak\\n1029 | \\t\\tcase \\\"autoApprovalEnabled\\\":\\n1030 | \\t\\t\\tawait updateGlobalState(\\\"autoApprovalEnabled\\\", message.bool ?? false)\\n1031 | \\t\\t\\tawait provider.postStateToWebview()\\n1032 | \\t\\t\\tbreak\\n1033 | \\t\\tcase \\\"enhancePrompt\\\":\\n1034 | \\t\\t\\tif (message.text) {\\n1035 | \\t\\t\\t\\ttry {\\n1036 | \\t\\t\\t\\t\\tconst { apiConfiguration, customSupportPrompts, listApiConfigMeta, enhancementApiConfigId } =\\n1037 | \\t\\t\\t\\t\\t\\tawait provider.getState()\\n1038 | \\n1039 | \\t\\t\\t\\t\\t// Try to get enhancement config first, fall back to current config.\\n1040 | \\t\\t\\t\\t\\tlet configToUse: ProviderSettings = apiConfiguration\\n1041 | \\n1042 | \\t\\t\\t\\t\\tif (enhancementApiConfigId && !!listApiConfigMeta.find(({ id }) => id === enhancementApiConfigId)) {\\n1043 | \\t\\t\\t\\t\\t\\tconst { name: _, ...providerSettings } = await provider.providerSettingsManager.getProfile({\\n1044 | \\t\\t\\t\\t\\t\\t\\tid: enhancementApiConfigId,\\n1045 | \\t\\t\\t\\t\\t\\t})\\n1046 | \\n1047 | \\t\\t\\t\\t\\t\\tif (providerSettings.apiProvider) {\\n1048 | \\t\\t\\t\\t\\t\\t\\tconfigToUse = providerSettings\\n1049 | \\t\\t\\t\\t\\t\\t}\\n1050 | \\t\\t\\t\\t\\t}\\n1051 | \\n1052 | \\t\\t\\t\\t\\tconst enhancedPrompt = await singleCompletionHandler(\\n1053 | \\t\\t\\t\\t\\t\\tconfigToUse,\\n1054 | \\t\\t\\t\\t\\t\\tsupportPrompt.create(\\\"ENHANCE\\\", { userInput: message.text }, customSupportPrompts),\\n1055 | \\t\\t\\t\\t\\t)\\n1056 | \\n1057 | \\t\\t\\t\\t\\t// Capture telemetry for prompt enhancement.\\n1058 | \\t\\t\\t\\t\\tconst currentCline = provider.getCurrentCline()\\n1059 | \\t\\t\\t\\t\\tTelemetryService.instance.capturePromptEnhanced(currentCline?.taskId)\\n1060 | \\n1061 | \\t\\t\\t\\t\\tawait provider.postMessageToWebview({ type: \\\"enhancedPrompt\\\", text: enhancedPrompt })\\n1062 | \\t\\t\\t\\t} catch (error) {\\n1063 | \\t\\t\\t\\t\\tprovider.log(\\n1064 | \\t\\t\\t\\t\\t\\t`Error enhancing prompt: ${JSON.stringify(error, Object.getOwnPropertyNames(error), 2)}`,\\n1065 | \\t\\t\\t\\t\\t)\\n1066 | \\n1067 | \\t\\t\\t\\t\\tvscode.window.showErrorMessage(t(\\\"common:errors.enhance_prompt\\\"))\\n1068 | \\t\\t\\t\\t\\tawait provider.postMessageToWebview({ type: \\\"enhancedPrompt\\\" })\\n1069 | \\t\\t\\t\\t}\\n1070 | \\t\\t\\t}\\n1071 | \\t\\t\\tbreak\\n1072 | \\t\\tcase \\\"getSystemPrompt\\\":\\n1073 | \\t\\t\\ttry {\\n1074 | \\t\\t\\t\\tconst systemPrompt = await generateSystemPrompt(provider, message)\\n1075 | \\n1076 | \\t\\t\\t\\tawait provider.postMessageToWebview({\\n1077 | \\t\\t\\t\\t\\ttype: \\\"systemPrompt\\\",\\n1078 | \\t\\t\\t\\t\\ttext: systemPrompt,\\n1079 | \\t\\t\\t\\t\\tmode: message.mode,\\n1080 | \\t\\t\\t\\t})\\n1081 | \\t\\t\\t} catch (error) {\\n1082 | \\t\\t\\t\\tprovider.log(\\n1083 | \\t\\t\\t\\t\\t`Error getting system prompt: ${JSON.stringify(error, Object.getOwnPropertyNames(error), 2)}`,\\n1084 | \\t\\t\\t\\t)\\n1085 | \\t\\t\\t\\tvscode.window.showErrorMessage(t(\\\"common:errors.get_system_prompt\\\"))\\n1086 | \\t\\t\\t}\\n1087 | \\t\\t\\tbreak\\n1088 | \\t\\tcase \\\"copySystemPrompt\\\":\\n1089 | \\t\\t\\ttry {\\n1090 | \\t\\t\\t\\tconst systemPrompt = await generateSystemPrompt(provider, message)\\n1091 | \\n1092 | \\t\\t\\t\\tawait vscode.env.clipboard.writeText(systemPrompt)\\n1093 | \\t\\t\\t\\tawait vscode.window.showInformationMessage(t(\\\"common:info.clipboard_copy\\\"))\\n1094 | \\t\\t\\t} catch (error) {\\n1095 | \\t\\t\\t\\tprovider.log(\\n1096 | \\t\\t\\t\\t\\t`Error getting system prompt: ${JSON.stringify(error, Object.getOwnPropertyNames(error), 2)}`,\\n1097 | \\t\\t\\t\\t)\\n1098 | \\t\\t\\t\\tvscode.window.showErrorMessage(t(\\\"common:errors.get_system_prompt\\\"))\\n1099 | \\t\\t\\t}\\n1100 | \\t\\t\\tbreak\\n1101 | \\t\\tcase \\\"searchCommits\\\": {\\n1102 | \\t\\t\\tconst cwd = provider.cwd\\n1103 | \\t\\t\\tif (cwd) {\\n1104 | \\t\\t\\t\\ttry {\\n1105 | \\t\\t\\t\\t\\tconst commits = await searchCommits(message.query || \\\"\\\", cwd)\\n1106 | \\t\\t\\t\\t\\tawait provider.postMessageToWebview({\\n1107 | \\t\\t\\t\\t\\t\\ttype: \\\"commitSearchResults\\\",\\n1108 | \\t\\t\\t\\t\\t\\tcommits,\\n1109 | \\t\\t\\t\\t\\t})\\n1110 | \\t\\t\\t\\t} catch (error) {\\n1111 | \\t\\t\\t\\t\\tprovider.log(\\n1112 | \\t\\t\\t\\t\\t\\t`Error searching commits: ${JSON.stringify(error, Object.getOwnPropertyNames(error), 2)}`,\\n1113 | \\t\\t\\t\\t\\t)\\n1114 | \\t\\t\\t\\t\\tvscode.window.showErrorMessage(t(\\\"common:errors.search_commits\\\"))\\n1115 | \\t\\t\\t\\t}\\n1116 | \\t\\t\\t}\\n1117 | \\t\\t\\tbreak\\n1118 | \\t\\t}\\n1119 | \\t\\tcase \\\"searchFiles\\\": {\\n1120 | \\t\\t\\tconst workspacePath = getWorkspacePath()\\n1121 | \\n1122 | \\t\\t\\tif (!workspacePath) {\\n1123 | \\t\\t\\t\\t// Handle case where workspace path is not available\\n1124 | \\t\\t\\t\\tawait provider.postMessageToWebview({\\n1125 | \\t\\t\\t\\t\\ttype: \\\"fileSearchResults\\\",\\n1126 | \\t\\t\\t\\t\\tresults: [],\\n1127 | \\t\\t\\t\\t\\trequestId: message.requestId,\\n1128 | \\t\\t\\t\\t\\terror: \\\"No workspace path available\\\",\\n1129 | \\t\\t\\t\\t})\\n1130 | \\t\\t\\t\\tbreak\\n1131 | \\t\\t\\t}\\n1132 | \\t\\t\\ttry {\\n1133 | \\t\\t\\t\\t// Call file search service with query from message\\n1134 | \\t\\t\\t\\tconst results = await searchWorkspaceFiles(\\n1135 | \\t\\t\\t\\t\\tmessage.query || \\\"\\\",\\n1136 | \\t\\t\\t\\t\\tworkspacePath,\\n1137 | \\t\\t\\t\\t\\t20, // Use default limit, as filtering is now done in the backend\\n1138 | \\t\\t\\t\\t)\\n1139 | \\n1140 | \\t\\t\\t\\t// Send results back to webview\\n1141 | \\t\\t\\t\\tawait provider.postMessageToWebview({\\n1142 | \\t\\t\\t\\t\\ttype: \\\"fileSearchResults\\\",\\n1143 | \\t\\t\\t\\t\\tresults,\\n1144 | \\t\\t\\t\\t\\trequestId: message.requestId,\\n1145 | \\t\\t\\t\\t})\\n1146 | \\t\\t\\t} catch (error) {\\n1147 | \\t\\t\\t\\tconst errorMessage = error instanceof Error ? error.message : String(error)\\n1148 | \\n1149 | \\t\\t\\t\\t// Send error response to webview\\n1150 | \\t\\t\\t\\tawait provider.postMessageToWebview({\\n1151 | \\t\\t\\t\\t\\ttype: \\\"fileSearchResults\\\",\\n1152 | \\t\\t\\t\\t\\tresults: [],\\n1153 | \\t\\t\\t\\t\\terror: errorMessage,\\n1154 | \\t\\t\\t\\t\\trequestId: message.requestId,\\n1155 | \\t\\t\\t\\t})\\n1156 | \\t\\t\\t}\\n1157 | \\t\\t\\tbreak\\n1158 | \\t\\t}\\n1159 | \\t\\tcase \\\"saveApiConfiguration\\\":\\n1160 | \\t\\t\\tif (message.text && message.apiConfiguration) {\\n1161 | \\t\\t\\t\\ttry {\\n1162 | \\t\\t\\t\\t\\tawait provider.providerSettingsManager.saveConfig(message.text, message.apiConfiguration)\\n1163 | \\t\\t\\t\\t\\tconst listApiConfig = await provider.providerSettingsManager.listConfig()\\n1164 | \\t\\t\\t\\t\\tawait updateGlobalState(\\\"listApiConfigMeta\\\", listApiConfig)\\n1165 | \\t\\t\\t\\t} catch (error) {\\n1166 | \\t\\t\\t\\t\\tprovider.log(\\n1167 | \\t\\t\\t\\t\\t\\t`Error save api configuration: ${JSON.stringify(error, Object.getOwnPropertyNames(error), 2)}`,\\n1168 | \\t\\t\\t\\t\\t)\\n1169 | \\t\\t\\t\\t\\tvscode.window.showErrorMessage(t(\\\"common:errors.save_api_config\\\"))\\n1170 | \\t\\t\\t\\t}\\n1171 | \\t\\t\\t}\\n1172 | \\t\\t\\tbreak\\n1173 | \\t\\tcase \\\"upsertApiConfiguration\\\":\\n1174 | \\t\\t\\tif (message.text && message.apiConfiguration) {\\n1175 | \\t\\t\\t\\tawait provider.upsertProviderProfile(message.text, message.apiConfiguration)\\n1176 | \\t\\t\\t}\\n1177 | \\t\\t\\tbreak\\n1178 | \\t\\tcase \\\"renameApiConfiguration\\\":\\n1179 | \\t\\t\\tif (message.values && message.apiConfiguration) {\\n1180 | \\t\\t\\t\\ttry {\\n1181 | \\t\\t\\t\\t\\tconst { oldName, newName } = message.values\\n1182 | \\n1183 | \\t\\t\\t\\t\\tif (oldName === newName) {\\n1184 | \\t\\t\\t\\t\\t\\tbreak\\n1185 | \\t\\t\\t\\t\\t}\\n1186 | \\n1187 | \\t\\t\\t\\t\\t// Load the old configuration to get its ID.\\n1188 | \\t\\t\\t\\t\\tconst { id } = await provider.providerSettingsManager.getProfile({ name: oldName })\\n1189 | \\n1190 | \\t\\t\\t\\t\\t// Create a new configuration with the new name and old ID.\\n1191 | \\t\\t\\t\\t\\tawait provider.providerSettingsManager.saveConfig(newName, { ...message.apiConfiguration, id })\\n1192 | \\n1193 | \\t\\t\\t\\t\\t// Delete the old configuration.\\n1194 | \\t\\t\\t\\t\\tawait provider.providerSettingsManager.deleteConfig(oldName)\\n1195 | \\n1196 | \\t\\t\\t\\t\\t// Re-activate to update the global settings related to the\\n1197 | \\t\\t\\t\\t\\t// currently activated provider profile.\\n1198 | \\t\\t\\t\\t\\tawait provider.activateProviderProfile({ name: newName })\\n1199 | \\t\\t\\t\\t} catch (error) {\\n1200 | \\t\\t\\t\\t\\tprovider.log(\\n1201 | \\t\\t\\t\\t\\t\\t`Error rename api configuration: ${JSON.stringify(error, Object.getOwnPropertyNames(error), 2)}`,\\n1202 | \\t\\t\\t\\t\\t)\\n1203 | \\n1204 | \\t\\t\\t\\t\\tvscode.window.showErrorMessage(t(\\\"common:errors.rename_api_config\\\"))\\n1205 | \\t\\t\\t\\t}\\n1206 | \\t\\t\\t}\\n1207 | \\t\\t\\tbreak\\n1208 | \\t\\tcase \\\"loadApiConfiguration\\\":\\n1209 | \\t\\t\\tif (message.text) {\\n1210 | \\t\\t\\t\\ttry {\\n1211 | \\t\\t\\t\\t\\tawait provider.activateProviderProfile({ name: message.text })\\n1212 | \\t\\t\\t\\t} catch (error) {\\n1213 | \\t\\t\\t\\t\\tprovider.log(\\n1214 | \\t\\t\\t\\t\\t\\t`Error load api configuration: ${JSON.stringify(error, Object.getOwnPropertyNames(error), 2)}`,\\n1215 | \\t\\t\\t\\t\\t)\\n1216 | \\t\\t\\t\\t\\tvscode.window.showErrorMessage(t(\\\"common:errors.load_api_config\\\"))\\n1217 | \\t\\t\\t\\t}\\n1218 | \\t\\t\\t}\\n1219 | \\t\\t\\tbreak\\n1220 | \\t\\tcase \\\"loadApiConfigurationById\\\":\\n1221 | \\t\\t\\tif (message.text) {\\n1222 | \\t\\t\\t\\ttry {\\n1223 | \\t\\t\\t\\t\\tawait provider.activateProviderProfile({ id: message.text })\\n1224 | \\t\\t\\t\\t} catch (error) {\\n1225 | \\t\\t\\t\\t\\tprovider.log(\\n1226 | \\t\\t\\t\\t\\t\\t`Error load api configuration by ID: ${JSON.stringify(error, Object.getOwnPropertyNames(error), 2)}`,\\n1227 | \\t\\t\\t\\t\\t)\\n1228 | \\t\\t\\t\\t\\tvscode.window.showErrorMessage(t(\\\"common:errors.load_api_config\\\"))\\n1229 | \\t\\t\\t\\t}\\n1230 | \\t\\t\\t}\\n1231 | \\t\\t\\tbreak\\n1232 | \\t\\tcase \\\"deleteApiConfiguration\\\":\\n1233 | \\t\\t\\tif (message.text) {\\n1234 | \\t\\t\\t\\tconst answer = await vscode.window.showInformationMessage(\\n1235 | \\t\\t\\t\\t\\tt(\\\"common:confirmation.delete_config_profile\\\"),\\n1236 | \\t\\t\\t\\t\\t{ modal: true },\\n1237 | \\t\\t\\t\\t\\tt(\\\"common:answers.yes\\\"),\\n1238 | \\t\\t\\t\\t)\\n1239 | \\n1240 | \\t\\t\\t\\tif (answer !== t(\\\"common:answers.yes\\\")) {\\n1241 | \\t\\t\\t\\t\\tbreak\\n1242 | \\t\\t\\t\\t}\\n1243 | \\n1244 | \\t\\t\\t\\tconst oldName = message.text\\n1245 | \\n1246 | \\t\\t\\t\\tconst newName = (await provider.providerSettingsManager.listConfig()).filter(\\n1247 | \\t\\t\\t\\t\\t(c) => c.name !== oldName,\\n1248 | \\t\\t\\t\\t)[0]?.name\\n1249 | \\n1250 | \\t\\t\\t\\tif (!newName) {\\n1251 | \\t\\t\\t\\t\\tvscode.window.showErrorMessage(t(\\\"common:errors.delete_api_config\\\"))\\n1252 | \\t\\t\\t\\t\\treturn\\n1253 | \\t\\t\\t\\t}\\n1254 | \\n1255 | \\t\\t\\t\\ttry {\\n1256 | \\t\\t\\t\\t\\tawait provider.providerSettingsManager.deleteConfig(oldName)\\n1257 | \\t\\t\\t\\t\\tawait provider.activateProviderProfile({ name: newName })\\n1258 | \\t\\t\\t\\t} catch (error) {\\n1259 | \\t\\t\\t\\t\\tprovider.log(\\n1260 | \\t\\t\\t\\t\\t\\t`Error delete api configuration: ${JSON.stringify(error, Object.getOwnPropertyNames(error), 2)}`,\\n1261 | \\t\\t\\t\\t\\t)\\n1262 | \\n1263 | \\t\\t\\t\\t\\tvscode.window.showErrorMessage(t(\\\"common:errors.delete_api_config\\\"))\\n1264 | \\t\\t\\t\\t}\\n1265 | \\t\\t\\t}\\n1266 | \\t\\t\\tbreak\\n1267 | \\t\\tcase \\\"getListApiConfiguration\\\":\\n1268 | \\t\\t\\ttry {\\n1269 | \\t\\t\\t\\tconst listApiConfig = await provider.providerSettingsManager.listConfig()\\n1270 | \\t\\t\\t\\tawait updateGlobalState(\\\"listApiConfigMeta\\\", listApiConfig)\\n1271 | \\t\\t\\t\\tprovider.postMessageToWebview({ type: \\\"listApiConfig\\\", listApiConfig })\\n1272 | \\t\\t\\t} catch (error) {\\n1273 | \\t\\t\\t\\tprovider.log(\\n1274 | \\t\\t\\t\\t\\t`Error get list api configuration: ${JSON.stringify(error, Object.getOwnPropertyNames(error), 2)}`,\\n1275 | \\t\\t\\t\\t)\\n1276 | \\t\\t\\t\\tvscode.window.showErrorMessage(t(\\\"common:errors.list_api_config\\\"))\\n1277 | \\t\\t\\t}\\n1278 | \\t\\t\\tbreak\\n1279 | \\t\\tcase \\\"updateExperimental\\\": {\\n1280 | \\t\\t\\tif (!message.values) {\\n1281 | \\t\\t\\t\\tbreak\\n1282 | \\t\\t\\t}\\n1283 | \\n1284 | \\t\\t\\tconst updatedExperiments = {\\n1285 | \\t\\t\\t\\t...(getGlobalState(\\\"experiments\\\") ?? experimentDefault),\\n1286 | \\t\\t\\t\\t...message.values,\\n1287 | \\t\\t\\t}\\n1288 | \\n1289 | \\t\\t\\tawait updateGlobalState(\\\"experiments\\\", updatedExperiments)\\n1290 | \\n1291 | \\t\\t\\tawait provider.postStateToWebview()\\n1292 | \\t\\t\\tbreak\\n1293 | \\t\\t}\\n1294 | \\t\\tcase \\\"updateMcpTimeout\\\":\\n1295 | \\t\\t\\tif (message.serverName && typeof message.timeout === \\\"number\\\") {\\n1296 | \\t\\t\\t\\ttry {\\n1297 | \\t\\t\\t\\t\\tawait provider\\n1298 | \\t\\t\\t\\t\\t\\t.getMcpHub()\\n1299 | \\t\\t\\t\\t\\t\\t?.updateServerTimeout(\\n1300 | \\t\\t\\t\\t\\t\\t\\tmessage.serverName,\\n1301 | \\t\\t\\t\\t\\t\\t\\tmessage.timeout,\\n1302 | \\t\\t\\t\\t\\t\\t\\tmessage.source as \\\"global\\\" | \\\"project\\\",\\n1303 | \\t\\t\\t\\t\\t\\t)\\n1304 | \\t\\t\\t\\t} catch (error) {\\n1305 | \\t\\t\\t\\t\\tprovider.log(\\n1306 | \\t\\t\\t\\t\\t\\t`Failed to update timeout for ${message.serverName}: ${JSON.stringify(error, Object.getOwnPropertyNames(error), 2)}`,\\n1307 | \\t\\t\\t\\t\\t)\\n1308 | \\t\\t\\t\\t\\tvscode.window.showErrorMessage(t(\\\"common:errors.update_server_timeout\\\"))\\n1309 | \\t\\t\\t\\t}\\n1310 | \\t\\t\\t}\\n1311 | \\t\\t\\tbreak\\n1312 | \\t\\tcase \\\"updateCustomMode\\\":\\n1313 | \\t\\t\\tif (message.modeConfig) {\\n1314 | \\t\\t\\t\\tawait provider.customModesManager.updateCustomMode(message.modeConfig.slug, message.modeConfig)\\n1315 | \\t\\t\\t\\t// Update state after saving the mode\\n1316 | \\t\\t\\t\\tconst customModes = await provider.customModesManager.getCustomModes()\\n1317 | \\t\\t\\t\\tawait updateGlobalState(\\\"customModes\\\", customModes)\\n1318 | \\t\\t\\t\\tawait updateGlobalState(\\\"mode\\\", message.modeConfig.slug)\\n1319 | \\t\\t\\t\\tawait provider.postStateToWebview()\\n1320 | \\t\\t\\t}\\n1321 | \\t\\t\\tbreak\\n1322 | \\t\\tcase \\\"deleteCustomMode\\\":\\n1323 | \\t\\t\\tif (message.slug) {\\n1324 | \\t\\t\\t\\tconst answer = await vscode.window.showInformationMessage(\\n1325 | \\t\\t\\t\\t\\tt(\\\"common:confirmation.delete_custom_mode\\\"),\\n1326 | \\t\\t\\t\\t\\t{ modal: true },\\n1327 | \\t\\t\\t\\t\\tt(\\\"common:answers.yes\\\"),\\n1328 | \\t\\t\\t\\t)\\n1329 | \\n1330 | \\t\\t\\t\\tif (answer !== t(\\\"common:answers.yes\\\")) {\\n1331 | \\t\\t\\t\\t\\tbreak\\n1332 | \\t\\t\\t\\t}\\n1333 | \\n1334 | \\t\\t\\t\\tawait provider.customModesManager.deleteCustomMode(message.slug)\\n1335 | \\t\\t\\t\\t// Switch back to default mode after deletion\\n1336 | \\t\\t\\t\\tawait updateGlobalState(\\\"mode\\\", defaultModeSlug)\\n1337 | \\t\\t\\t\\tawait provider.postStateToWebview()\\n1338 | \\t\\t\\t}\\n1339 | \\t\\t\\tbreak\\n1340 | \\t\\tcase \\\"humanRelayResponse\\\":\\n1341 | \\t\\t\\tif (message.requestId && message.text) {\\n1342 | \\t\\t\\t\\tvscode.commands.executeCommand(getCommand(\\\"handleHumanRelayResponse\\\"), {\\n1343 | \\t\\t\\t\\t\\trequestId: message.requestId,\\n1344 | \\t\\t\\t\\t\\ttext: message.text,\\n1345 | \\t\\t\\t\\t\\tcancelled: false,\\n1346 | \\t\\t\\t\\t})\\n1347 | \\t\\t\\t}\\n1348 | \\t\\t\\tbreak\\n1349 | \\n1350 | \\t\\tcase \\\"humanRelayCancel\\\":\\n1351 | \\t\\t\\tif (message.requestId) {\\n1352 | \\t\\t\\t\\tvscode.commands.executeCommand(getCommand(\\\"handleHumanRelayResponse\\\"), {\\n1353 | \\t\\t\\t\\t\\trequestId: message.requestId,\\n1354 | \\t\\t\\t\\t\\tcancelled: true,\\n1355 | \\t\\t\\t\\t})\\n1356 | \\t\\t\\t}\\n1357 | \\t\\t\\tbreak\\n1358 | \\n1359 | \\t\\tcase \\\"telemetrySetting\\\": {\\n1360 | \\t\\t\\tconst telemetrySetting = message.text as TelemetrySetting\\n1361 | \\t\\t\\tawait updateGlobalState(\\\"telemetrySetting\\\", telemetrySetting)\\n1362 | \\t\\t\\tconst isOptedIn = telemetrySetting === \\\"enabled\\\"\\n1363 | \\t\\t\\tTelemetryService.instance.updateTelemetryState(isOptedIn)\\n1364 | \\t\\t\\tawait provider.postStateToWebview()\\n1365 | \\t\\t\\tbreak\\n1366 | \\t\\t}\\n1367 | \\t\\tcase \\\"accountButtonClicked\\\": {\\n1368 | \\t\\t\\t// Navigate to the account tab.\\n1369 | \\t\\t\\tprovider.postMessageToWebview({ type: \\\"action\\\", action: \\\"accountButtonClicked\\\" })\\n1370 | \\t\\t\\tbreak\\n1371 | \\t\\t}\\n1372 | \\t\\tcase \\\"rooCloudSignIn\\\": {\\n1373 | \\t\\t\\ttry {\\n1374 | \\t\\t\\t\\tTelemetryService.instance.captureEvent(TelemetryEventName.AUTHENTICATION_INITIATED)\\n1375 | \\t\\t\\t\\tawait CloudService.instance.login()\\n1376 | \\t\\t\\t} catch (error) {\\n1377 | \\t\\t\\t\\tprovider.log(`AuthService#login failed: ${error}`)\\n1378 | \\t\\t\\t\\tvscode.window.showErrorMessage(\\\"Sign in failed.\\\")\\n1379 | \\t\\t\\t}\\n1380 | \\n1381 | \\t\\t\\tbreak\\n1382 | \\t\\t}\\n1383 | \\t\\tcase \\\"rooCloudSignOut\\\": {\\n1384 | \\t\\t\\ttry {\\n1385 | \\t\\t\\t\\tawait CloudService.instance.logout()\\n1386 | \\t\\t\\t\\tawait provider.postStateToWebview()\\n1387 | \\t\\t\\t\\tprovider.postMessageToWebview({ type: \\\"authenticatedUser\\\", userInfo: undefined })\\n1388 | \\t\\t\\t} catch (error) {\\n1389 | \\t\\t\\t\\tprovider.log(`AuthService#logout failed: ${error}`)\\n1390 | \\t\\t\\t\\tvscode.window.showErrorMessage(\\\"Sign out failed.\\\")\\n1391 | \\t\\t\\t}\\n1392 | \\n1393 | \\t\\t\\tbreak\\n1394 | \\t\\t}\\n1395 | \\t\\tcase \\\"codebaseIndexConfig\\\": {\\n1396 | \\t\\t\\tconst codebaseIndexConfig = message.values ?? {\\n1397 | \\t\\t\\t\\tcodebaseIndexEnabled: false,\\n1398 | \\t\\t\\t\\tcodebaseIndexQdrantUrl: \\\"http://localhost:6333\\\",\\n1399 | \\t\\t\\t\\tcodebaseIndexEmbedderProvider: \\\"openai\\\",\\n1400 | \\t\\t\\t\\tcodebaseIndexEmbedderBaseUrl: \\\"\\\",\\n1401 | \\t\\t\\t\\tcodebaseIndexEmbedderModelId: \\\"\\\",\\n1402 | \\t\\t\\t}\\n1403 | \\t\\t\\tawait updateGlobalState(\\\"codebaseIndexConfig\\\", codebaseIndexConfig)\\n1404 | \\n1405 | \\t\\t\\ttry {\\n1406 | \\t\\t\\t\\tif (provider.codeIndexManager) {\\n1407 | \\t\\t\\t\\t\\tawait provider.codeIndexManager.handleExternalSettingsChange()\\n1408 | \\n1409 | \\t\\t\\t\\t\\t// If now configured and enabled, start indexing automatically\\n1410 | \\t\\t\\t\\t\\tif (provider.codeIndexManager.isFeatureEnabled && provider.codeIndexManager.isFeatureConfigured) {\\n1411 | \\t\\t\\t\\t\\t\\tif (!provider.codeIndexManager.isInitialized) {\\n1412 | \\t\\t\\t\\t\\t\\t\\tawait provider.codeIndexManager.initialize(provider.contextProxy)\\n1413 | \\t\\t\\t\\t\\t\\t}\\n1414 | \\t\\t\\t\\t\\t\\t// Start indexing in background (no await)\\n1415 | \\t\\t\\t\\t\\t\\tprovider.codeIndexManager.startIndexing()\\n1416 | \\t\\t\\t\\t\\t}\\n1417 | \\t\\t\\t\\t}\\n1418 | \\t\\t\\t} catch (error) {\\n1419 | \\t\\t\\t\\tprovider.log(\\n1420 | \\t\\t\\t\\t\\t`[CodeIndexManager] Error during background CodeIndexManager configuration/indexing: ${error.message || error}`,\\n1421 | \\t\\t\\t\\t)\\n1422 | \\t\\t\\t}\\n1423 | \\n1424 | \\t\\t\\tawait provider.postStateToWebview()\\n1425 | \\t\\t\\tbreak\\n1426 | \\t\\t}\\n1427 | \\t\\tcase \\\"requestIndexingStatus\\\": {\\n1428 | \\t\\t\\tconst status = provider.codeIndexManager!.getCurrentStatus()\\n1429 | \\t\\t\\tprovider.postMessageToWebview({\\n1430 | \\t\\t\\t\\ttype: \\\"indexingStatusUpdate\\\",\\n1431 | \\t\\t\\t\\tvalues: status,\\n1432 | \\t\\t\\t})\\n1433 | \\t\\t\\tbreak\\n1434 | \\t\\t}\\n1435 | \\t\\tcase \\\"startIndexing\\\": {\\n1436 | \\t\\t\\ttry {\\n1437 | \\t\\t\\t\\tconst manager = provider.codeIndexManager!\\n1438 | \\t\\t\\t\\tif (manager.isFeatureEnabled && manager.isFeatureConfigured) {\\n1439 | \\t\\t\\t\\t\\tif (!manager.isInitialized) {\\n1440 | \\t\\t\\t\\t\\t\\tawait manager.initialize(provider.contextProxy)\\n1441 | \\t\\t\\t\\t\\t}\\n1442 | \\n1443 | \\t\\t\\t\\t\\tmanager.startIndexing()\\n1444 | \\t\\t\\t\\t}\\n1445 | \\t\\t\\t} catch (error) {\\n1446 | \\t\\t\\t\\tprovider.log(`Error starting indexing: ${error instanceof Error ? error.message : String(error)}`)\\n1447 | \\t\\t\\t}\\n1448 | \\t\\t\\tbreak\\n1449 | \\t\\t}\\n1450 | \\t\\tcase \\\"clearIndexData\\\": {\\n1451 | \\t\\t\\ttry {\\n1452 | \\t\\t\\t\\tconst manager = provider.codeIndexManager!\\n1453 | \\t\\t\\t\\tawait manager.clearIndexData()\\n1454 | \\t\\t\\t\\tprovider.postMessageToWebview({ type: \\\"indexCleared\\\", values: { success: true } })\\n1455 | \\t\\t\\t} catch (error) {\\n1456 | \\t\\t\\t\\tprovider.log(`Error clearing index data: ${error instanceof Error ? error.message : String(error)}`)\\n1457 | \\t\\t\\t\\tprovider.postMessageToWebview({\\n1458 | \\t\\t\\t\\t\\ttype: \\\"indexCleared\\\",\\n1459 | \\t\\t\\t\\t\\tvalues: {\\n1460 | \\t\\t\\t\\t\\t\\tsuccess: false,\\n1461 | \\t\\t\\t\\t\\t\\terror: error instanceof Error ? error.message : String(error),\\n1462 | \\t\\t\\t\\t\\t},\\n1463 | \\t\\t\\t\\t})\\n1464 | \\t\\t\\t}\\n1465 | \\t\\t\\tbreak\\n1466 | \\t\\t}\\n1467 | \\t\\tcase \\\"filterMarketplaceItems\\\": {\\n1468 | \\t\\t\\t// Check if marketplace is enabled before making API calls\\n1469 | \\t\\t\\tconst { experiments } = await provider.getState()\\n1470 | \\t\\t\\tif (!experiments.marketplace) {\\n1471 | \\t\\t\\t\\tconsole.log(\\\"Marketplace: Feature disabled, skipping API call\\\")\\n1472 | \\t\\t\\t\\tbreak\\n1473 | \\t\\t\\t}\\n1474 | \\n1475 | \\t\\t\\tif (marketplaceManager && message.filters) {\\n1476 | \\t\\t\\t\\ttry {\\n1477 | \\t\\t\\t\\t\\tawait marketplaceManager.updateWithFilteredItems({\\n1478 | \\t\\t\\t\\t\\t\\ttype: message.filters.type as MarketplaceItemType | undefined,\\n1479 | \\t\\t\\t\\t\\t\\tsearch: message.filters.search,\\n1480 | \\t\\t\\t\\t\\t\\ttags: message.filters.tags,\\n1481 | \\t\\t\\t\\t\\t})\\n1482 | \\t\\t\\t\\t\\tawait provider.postStateToWebview()\\n1483 | \\t\\t\\t\\t} catch (error) {\\n1484 | \\t\\t\\t\\t\\tconsole.error(\\\"Marketplace: Error filtering items:\\\", error)\\n1485 | \\t\\t\\t\\t\\tvscode.window.showErrorMessage(\\\"Failed to filter marketplace items\\\")\\n1486 | \\t\\t\\t\\t}\\n1487 | \\t\\t\\t}\\n1488 | \\t\\t\\tbreak\\n1489 | \\t\\t}\\n1490 | \\n1491 | \\t\\tcase \\\"installMarketplaceItem\\\": {\\n1492 | \\t\\t\\t// Check if marketplace is enabled before installing\\n1493 | \\t\\t\\tconst { experiments } = await provider.getState()\\n1494 | \\t\\t\\tif (!experiments.marketplace) {\\n1495 | \\t\\t\\t\\tconsole.log(\\\"Marketplace: Feature disabled, skipping installation\\\")\\n1496 | \\t\\t\\t\\tbreak\\n1497 | \\t\\t\\t}\\n1498 | \\n1499 | \\t\\t\\tif (marketplaceManager && message.mpItem && message.mpInstallOptions) {\\n1500 | \\t\\t\\t\\ttry {\\n1501 | \\t\\t\\t\\t\\tconst configFilePath = await marketplaceManager.installMarketplaceItem(\\n1502 | \\t\\t\\t\\t\\t\\tmessage.mpItem,\\n1503 | \\t\\t\\t\\t\\t\\tmessage.mpInstallOptions,\\n1504 | \\t\\t\\t\\t\\t)\\n1505 | \\t\\t\\t\\t\\tawait provider.postStateToWebview()\\n1506 | \\t\\t\\t\\t\\tconsole.log(`Marketplace item installed and config file opened: ${configFilePath}`)\\n1507 | \\t\\t\\t\\t\\t// Send success message to webview\\n1508 | \\t\\t\\t\\t\\tprovider.postMessageToWebview({\\n1509 | \\t\\t\\t\\t\\t\\ttype: \\\"marketplaceInstallResult\\\",\\n1510 | \\t\\t\\t\\t\\t\\tsuccess: true,\\n1511 | \\t\\t\\t\\t\\t\\tslug: message.mpItem.id,\\n1512 | \\t\\t\\t\\t\\t})\\n1513 | \\t\\t\\t\\t} catch (error) {\\n1514 | \\t\\t\\t\\t\\tconsole.error(`Error installing marketplace item: ${error}`)\\n1515 | \\t\\t\\t\\t\\t// Send error message to webview\\n1516 | \\t\\t\\t\\t\\tprovider.postMessageToWebview({\\n1517 | \\t\\t\\t\\t\\t\\ttype: \\\"marketplaceInstallResult\\\",\\n1518 | \\t\\t\\t\\t\\t\\tsuccess: false,\\n1519 | \\t\\t\\t\\t\\t\\terror: error instanceof Error ? error.message : String(error),\\n1520 | \\t\\t\\t\\t\\t\\tslug: message.mpItem.id,\\n1521 | \\t\\t\\t\\t\\t})\\n1522 | \\t\\t\\t\\t}\\n1523 | \\t\\t\\t}\\n1524 | \\t\\t\\tbreak\\n1525 | \\t\\t}\\n1526 | \\n1527 | \\t\\tcase \\\"removeInstalledMarketplaceItem\\\": {\\n1528 | \\t\\t\\t// Check if marketplace is enabled before removing\\n1529 | \\t\\t\\tconst { experiments } = await provider.getState()\\n1530 | \\t\\t\\tif (!experiments.marketplace) {\\n1531 | \\t\\t\\t\\tconsole.log(\\\"Marketplace: Feature disabled, skipping removal\\\")\\n1532 | \\t\\t\\t\\tbreak\\n1533 | \\t\\t\\t}\\n1534 | \\n1535 | \\t\\t\\tif (marketplaceManager && message.mpItem && message.mpInstallOptions) {\\n1536 | \\t\\t\\t\\ttry {\\n1537 | \\t\\t\\t\\t\\tawait marketplaceManager.removeInstalledMarketplaceItem(message.mpItem, message.mpInstallOptions)\\n1538 | \\t\\t\\t\\t\\tawait provider.postStateToWebview()\\n1539 | \\t\\t\\t\\t} catch (error) {\\n1540 | \\t\\t\\t\\t\\tconsole.error(`Error removing marketplace item: ${error}`)\\n1541 | \\t\\t\\t\\t}\\n1542 | \\t\\t\\t}\\n1543 | \\t\\t\\tbreak\\n1544 | \\t\\t}\\n1545 | \\n1546 | \\t\\tcase \\\"installMarketplaceItemWithParameters\\\": {\\n1547 | \\t\\t\\t// Check if marketplace is enabled before installing with parameters\\n1548 | \\t\\t\\tconst { experiments } = await provider.getState()\\n1549 | \\t\\t\\tif (!experiments.marketplace) {\\n1550 | \\t\\t\\t\\tconsole.log(\\\"Marketplace: Feature disabled, skipping installation with parameters\\\")\\n1551 | \\t\\t\\t\\tbreak\\n1552 | \\t\\t\\t}\\n1553 | \\n1554 | \\t\\t\\tif (marketplaceManager && message.payload && \\\"item\\\" in message.payload && \\\"parameters\\\" in message.payload) {\\n1555 | \\t\\t\\t\\ttry {\\n1556 | \\t\\t\\t\\t\\tconst configFilePath = await marketplaceManager.installMarketplaceItem(message.payload.item, {\\n1557 | \\t\\t\\t\\t\\t\\tparameters: message.payload.parameters,\\n1558 | \\t\\t\\t\\t\\t})\\n1559 | \\t\\t\\t\\t\\tawait provider.postStateToWebview()\\n1560 | \\t\\t\\t\\t\\tconsole.log(`Marketplace item with parameters installed and config file opened: ${configFilePath}`)\\n1561 | \\t\\t\\t\\t} catch (error) {\\n1562 | \\t\\t\\t\\t\\tconsole.error(`Error installing marketplace item with parameters: ${error}`)\\n1563 | \\t\\t\\t\\t\\tvscode.window.showErrorMessage(\\n1564 | \\t\\t\\t\\t\\t\\t`Failed to install marketplace item: ${error instanceof Error ? error.message : String(error)}`,\\n1565 | \\t\\t\\t\\t\\t)\\n1566 | \\t\\t\\t\\t}\\n1567 | \\t\\t\\t}\\n1568 | \\t\\t\\tbreak\\n1569 | \\t\\t}\\n1570 | \\n1571 | \\t\\tcase \\\"switchTab\\\": {\\n1572 | \\t\\t\\tif (message.tab) {\\n1573 | \\t\\t\\t\\t// Send a message to the webview to switch to the specified tab\\n1574 | \\t\\t\\t\\tawait provider.postMessageToWebview({ type: \\\"action\\\", action: \\\"switchTab\\\", tab: message.tab })\\n1575 | \\t\\t\\t}\\n1576 | \\t\\t\\tbreak\\n1577 | \\t\\t}\\n1578 | \\t}\\n1579 | }\\n</content>\\n</file>\\n</files>\\n\\nLoading...\"}"
|
||
}
|
||
[2025-06-18T08:45:10.411Z] {
|
||
"ts": 1750236310301,
|
||
"type": "say",
|
||
"say": "text",
|
||
"text": "Now I can see the exact format. Let me update the webview message handler to also check the user setting:",
|
||
"partial": false
|
||
}
|
||
[2025-06-18T08:45:14.937Z] {
|
||
"ts": 1750236310949,
|
||
"type": "ask",
|
||
"ask": "tool",
|
||
"text": "{\"tool\":\"appliedDiff\",\"path\":\"src/core/webview/webviewMessageHandler.ts\",\"diff\":\"<<<<<<< SEARCH\\n:start_line:1467\\n-------\\n\\t\\tcase \\\"filterMarketplaceItems\\\": {\\n\\t\\t\\t// Check if marketplace is enabled before making API calls\\n\\t\\t\\tconst { experiments } = await provider.getState()\\n\\t\\t\\tif (!experiments.marketplace) {\\n\\t\\t\\t\\tconsole.log(\\\"Marketplace: Feature disabled, skipping API call\\\")\\n\\t\\t\\t\\tbreak\\n\\t\\t\\t}\\n=======\\n\\t\\tcase \\\"filterMarketplaceItems\\\": {\\n\\t\\t\\t// Check if marketplace is enabled before making API calls\\n\\t\\t\\tconst { experiments } = await provider.getState()\\n\\t\\t\\tconst config = vscode.workspace.getConfiguration(\\\"roo-cline\\\")\\n\\t\\t\\tconst isMarketplaceDisabled = config.get<boolean>(\\\"disableMarketplace\\\", false)\\n\\t\\t\\t\\n\\t\\t\\tif (!experiments.marketplace || isMarketplaceDisabled) {\\n\\t\\t\\t\\tconsole.log(\\\"Marketplace: Feature disabled, skipping API call\\\")\\n\\t\\t\\t\\tbreak\\n\\t\\t\\t}\\n>>>>>>> REPLACE\"}",
|
||
"partial": false,
|
||
"isProtected": false,
|
||
"progressStatus": {
|
||
"icon": "diff-multiple",
|
||
"text": "1"
|
||
}
|
||
}
|
||
[2025-06-18T08:45:16.058Z] {
|
||
"ts": 1750236316053,
|
||
"type": "say",
|
||
"say": "api_req_started",
|
||
"text": "{\"request\":\"[apply_diff for 'src/core/webview/webviewMessageHandler.ts'] Result:\\n\\n<file_write_result>\\n<path>src/core/webview/webviewMessageHandler.ts</path>\\n<operation>modified</operation>\\n<notice>\\n<i>You do not need to re-read the file, as you have seen all changes</i>\\n<i>Proceed with the task using these changes as the new baseline.</i>\\n</notice>\\n</file_write_result>\\n\\n\\nLoading...\"}"
|
||
}
|
||
[2025-06-18T08:45:20.164Z] {
|
||
"ts": 1750236320136,
|
||
"type": "say",
|
||
"say": "text",
|
||
"text": "Now let me update the other marketplace-related cases in the webview message handler:",
|
||
"partial": false
|
||
}
|
||
[2025-06-18T08:45:23.240Z] {
|
||
"ts": 1750236320164,
|
||
"type": "ask",
|
||
"ask": "tool",
|
||
"text": "{\"tool\":\"appliedDiff\",\"path\":\"src/core/webview/webviewMessageHandler.ts\",\"diff\":\"<<<<<<< SEARCH\\n:start_line:1491\\n-------\\n\\t\\tcase \\\"installMarketplaceItem\\\": {\\n\\t\\t\\t// Check if marketplace is enabled before installing\\n\\t\\t\\tconst { experiments } = await provider.getState()\\n\\t\\t\\tif (!experiments.marketplace) {\\n\\t\\t\\t\\tconsole.log(\\\"Marketplace: Feature disabled, skipping installation\\\")\\n\\t\\t\\t\\tbreak\\n\\t\\t\\t}\\n=======\\n\\t\\tcase \\\"installMarketplaceItem\\\": {\\n\\t\\t\\t// Check if marketplace is enabled before installing\\n\\t\\t\\tconst { experiments } = await provider.getState()\\n\\t\\t\\tconst config = vscode.workspace.getConfiguration(\\\"roo-cline\\\")\\n\\t\\t\\tconst isMarketplaceDisabled = config.get<boolean>(\\\"disableMarketplace\\\", false)\\n\\t\\t\\t\\n\\t\\t\\tif (!experiments.marketplace || isMarketplaceDisabled) {\\n\\t\\t\\t\\tconsole.log(\\\"Marketplace: Feature disabled, skipping installation\\\")\\n\\t\\t\\t\\tbreak\\n\\t\\t\\t}\\n>>>>>>> REPLACE\"}",
|
||
"partial": false,
|
||
"isProtected": false,
|
||
"progressStatus": {
|
||
"icon": "diff-multiple",
|
||
"text": "1"
|
||
}
|
||
}
|
||
[2025-06-18T08:45:24.360Z] {
|
||
"ts": 1750236324350,
|
||
"type": "say",
|
||
"say": "api_req_started",
|
||
"text": "{\"request\":\"[apply_diff for 'src/core/webview/webviewMessageHandler.ts'] Result:\\n\\n<file_write_result>\\n<path>src/core/webview/webviewMessageHandler.ts</path>\\n<operation>modified</operation>\\n<notice>\\n<i>You do not need to re-read the file, as you have seen all changes</i>\\n<i>Proceed with the task using these changes as the new baseline.</i>\\n</notice>\\n</file_write_result>\\n\\n\\nLoading...\"}"
|
||
}
|
||
[2025-06-18T08:45:27.625Z] {
|
||
"ts": 1750236327594,
|
||
"type": "say",
|
||
"say": "text",
|
||
"text": "",
|
||
"partial": false
|
||
}
|
||
[2025-06-18T08:45:30.640Z] {
|
||
"ts": 1750236328551,
|
||
"type": "ask",
|
||
"ask": "tool",
|
||
"text": "{\"tool\":\"appliedDiff\",\"path\":\"src/core/webview/webviewMessageHandler.ts\",\"diff\":\"<<<<<<< SEARCH\\n:start_line:1527\\n-------\\n\\t\\tcase \\\"removeInstalledMarketplaceItem\\\": {\\n\\t\\t\\t// Check if marketplace is enabled before removing\\n\\t\\t\\tconst { experiments } = await provider.getState()\\n\\t\\t\\tif (!experiments.marketplace) {\\n\\t\\t\\t\\tconsole.log(\\\"Marketplace: Feature disabled, skipping removal\\\")\\n\\t\\t\\t\\tbreak\\n\\t\\t\\t}\\n=======\\n\\t\\tcase \\\"removeInstalledMarketplaceItem\\\": {\\n\\t\\t\\t// Check if marketplace is enabled before removing\\n\\t\\t\\tconst { experiments } = await provider.getState()\\n\\t\\t\\tconst config = vscode.workspace.getConfiguration(\\\"roo-cline\\\")\\n\\t\\t\\tconst isMarketplaceDisabled = config.get<boolean>(\\\"disableMarketplace\\\", false)\\n\\t\\t\\t\\n\\t\\t\\tif (!experiments.marketplace || isMarketplaceDisabled) {\\n\\t\\t\\t\\tconsole.log(\\\"Marketplace: Feature disabled, skipping removal\\\")\\n\\t\\t\\t\\tbreak\\n\\t\\t\\t}\\n>>>>>>> REPLACE\"}",
|
||
"partial": false,
|
||
"isProtected": false,
|
||
"progressStatus": {
|
||
"icon": "diff-multiple",
|
||
"text": "1"
|
||
}
|
||
}
|
||
[2025-06-18T08:45:31.757Z] {
|
||
"ts": 1750236331752,
|
||
"type": "say",
|
||
"say": "api_req_started",
|
||
"text": "{\"request\":\"[apply_diff for 'src/core/webview/webviewMessageHandler.ts'] Result:\\n\\n<file_write_result>\\n<path>src/core/webview/webviewMessageHandler.ts</path>\\n<operation>modified</operation>\\n<notice>\\n<i>You do not need to re-read the file, as you have seen all changes</i>\\n<i>Proceed with the task using these changes as the new baseline.</i>\\n</notice>\\n</file_write_result>\\n\\n\\nLoading...\"}"
|
||
}
|
||
[2025-06-18T08:45:34.476Z] {
|
||
"ts": 1750236334450,
|
||
"type": "say",
|
||
"say": "text",
|
||
"text": "",
|
||
"partial": false
|
||
}
|
||
[2025-06-18T08:45:38.095Z] {
|
||
"ts": 1750236334733,
|
||
"type": "ask",
|
||
"ask": "tool",
|
||
"text": "{\"tool\":\"appliedDiff\",\"path\":\"src/core/webview/webviewMessageHandler.ts\",\"diff\":\"<<<<<<< SEARCH\\n:start_line:1546\\n-------\\n\\t\\tcase \\\"installMarketplaceItemWithParameters\\\": {\\n\\t\\t\\t// Check if marketplace is enabled before installing with parameters\\n\\t\\t\\tconst { experiments } = await provider.getState()\\n\\t\\t\\tif (!experiments.marketplace) {\\n\\t\\t\\t\\tconsole.log(\\\"Marketplace: Feature disabled, skipping installation with parameters\\\")\\n\\t\\t\\t\\tbreak\\n\\t\\t\\t}\\n=======\\n\\t\\tcase \\\"installMarketplaceItemWithParameters\\\": {\\n\\t\\t\\t// Check if marketplace is enabled before installing with parameters\\n\\t\\t\\tconst { experiments } = await provider.getState()\\n\\t\\t\\tconst config = vscode.workspace.getConfiguration(\\\"roo-cline\\\")\\n\\t\\t\\tconst isMarketplaceDisabled = config.get<boolean>(\\\"disableMarketplace\\\", false)\\n\\t\\t\\t\\n\\t\\t\\tif (!experiments.marketplace || isMarketplaceDisabled) {\\n\\t\\t\\t\\tconsole.log(\\\"Marketplace: Feature disabled, skipping installation with parameters\\\")\\n\\t\\t\\t\\tbreak\\n\\t\\t\\t}\\n>>>>>>> REPLACE\"}",
|
||
"partial": false,
|
||
"isProtected": false,
|
||
"progressStatus": {
|
||
"icon": "diff-multiple",
|
||
"text": "1"
|
||
}
|
||
}
|
||
[2025-06-18T08:45:39.269Z] {
|
||
"ts": 1750236339265,
|
||
"type": "say",
|
||
"say": "api_req_started",
|
||
"text": "{\"request\":\"[apply_diff for 'src/core/webview/webviewMessageHandler.ts'] Result:\\n\\n<file_write_result>\\n<path>src/core/webview/webviewMessageHandler.ts</path>\\n<operation>modified</operation>\\n<notice>\\n<i>You do not need to re-read the file, as you have seen all changes</i>\\n<i>Proceed with the task using these changes as the new baseline.</i>\\n</notice>\\n</file_write_result>\\n\\n\\nLoading...\"}"
|
||
}
|
||
[2025-06-18T08:45:42.691Z] {
|
||
"ts": 1750236341919,
|
||
"type": "say",
|
||
"say": "text",
|
||
"text": "Now let me also update the marketplace button visibility to respect the user setting. Let me check how the marketplace button visibility is controlled:",
|
||
"partial": false
|
||
}
|
||
[2025-06-18T08:45:46.471Z] {
|
||
"ts": 1750236343086,
|
||
"type": "ask",
|
||
"ask": "tool",
|
||
"text": "{\"tool\":\"appliedDiff\",\"path\":\"src/core/webview/ClineProvider.ts\",\"diff\":\"<<<<<<< SEARCH\\n:start_line:1254\\n-------\\n\\t\\t// Set context for marketplace experiment\\n\\t\\tawait vscode.commands.executeCommand(\\n\\t\\t\\t\\\"setContext\\\",\\n\\t\\t\\t`${Package.name}.marketplaceEnabled`,\\n\\t\\t\\texperiments.marketplace ?? false,\\n\\t\\t)\\n=======\\n\\t\\t// Set context for marketplace experiment and user setting\\n\\t\\tconst config = vscode.workspace.getConfiguration(\\\"roo-cline\\\")\\n\\t\\tconst isMarketplaceDisabled = config.get<boolean>(\\\"disableMarketplace\\\", false)\\n\\t\\tconst marketplaceEnabled = (experiments.marketplace ?? false) && !isMarketplaceDisabled\\n\\t\\t\\n\\t\\tawait vscode.commands.executeCommand(\\n\\t\\t\\t\\\"setContext\\\",\\n\\t\\t\\t`${Package.name}.marketplaceEnabled`,\\n\\t\\t\\tmarketplaceEnabled,\\n\\t\\t)\\n>>>>>>> REPLACE\"}",
|
||
"partial": false,
|
||
"isProtected": false,
|
||
"progressStatus": {
|
||
"icon": "diff-multiple",
|
||
"text": "1"
|
||
}
|
||
}
|
||
[2025-06-18T08:45:47.588Z] {
|
||
"ts": 1750236347583,
|
||
"type": "say",
|
||
"say": "api_req_started",
|
||
"text": "{\"request\":\"[apply_diff for 'src/core/webview/ClineProvider.ts'] Result:\\n\\n<file_write_result>\\n<path>src/core/webview/ClineProvider.ts</path>\\n<operation>modified</operation>\\n<notice>\\n<i>You do not need to re-read the file, as you have seen all changes</i>\\n<i>Proceed with the task using these changes as the new baseline.</i>\\n</notice>\\n</file_write_result>\\n\\n\\nLoading...\"}"
|
||
}
|
||
[2025-06-18T08:45:51.394Z] {
|
||
"ts": 1750236351341,
|
||
"type": "say",
|
||
"say": "text",
|
||
"text": "Now let me create a test to verify our changes work correctly:",
|
||
"partial": false
|
||
}
|
||
[2025-06-18T08:46:10.138Z] {
|
||
"ts": 1750236351612,
|
||
"type": "ask",
|
||
"ask": "tool",
|
||
"text": "{\"tool\":\"newFileCreated\",\"path\":\"src/services/marketplace/__tests__/network-timeout-fix.test.ts\",\"content\":\"import * as vscode from \\\"vscode\\\"\\nimport { RemoteConfigLoader } from \\\"../RemoteConfigLoader\\\"\\nimport { MarketplaceManager } from \\\"../MarketplaceManager\\\"\\n\\n// Mock vscode\\njest.mock(\\\"vscode\\\", () => ({\\n\\tworkspace: {\\n\\t\\tgetConfiguration: jest.fn(),\\n\\t},\\n}))\\n\\n// Mock axios to simulate network timeouts\\njest.mock(\\\"axios\\\")\\n\\ndescribe(\\\"Network Timeout Fix\\\", () => {\\n\\tlet mockGetConfiguration: jest.MockedFunction<typeof vscode.workspace.getConfiguration>\\n\\n\\tbeforeEach(() => {\\n\\t\\tmockGetConfiguration = vscode.workspace.getConfiguration as jest.MockedFunction<\\n\\t\\t\\ttypeof vscode.workspace.getConfiguration\\n\\t\\t>\\n\\t\\tjest.clearAllMocks()\\n\\t})\\n\\n\\tdescribe(\\\"RemoteConfigLoader\\\", () => {\\n\\t\\tit(\\\"should return empty array when marketplace is disabled via user setting\\\", async () => {\\n\\t\\t\\t// Mock configuration to disable marketplace\\n\\t\\t\\tmockGetConfiguration.mockReturnValue({\\n\\t\\t\\t\\tget: jest.fn((key: string, defaultValue?: any) => {\\n\\t\\t\\t\\t\\tif (key === \\\"disableMarketplace\\\") return true\\n\\t\\t\\t\\t\\tif (key === \\\"marketplaceTimeout\\\") return 10000\\n\\t\\t\\t\\t\\treturn defaultValue\\n\\t\\t\\t\\t}),\\n\\t\\t\\t} as any)\\n\\n\\t\\t\\tconst loader = new RemoteConfigLoader()\\n\\t\\t\\tconst items = await loader.loadAllItems()\\n\\n\\t\\t\\texpect(items).toEqual([])\\n\\t\\t\\texpect(mockGetConfiguration).toHaveBeenCalledWith(\\\"roo-cline\\\")\\n\\t\\t})\\n\\n\\t\\tit(\\\"should use custom timeout from user settings\\\", async () => {\\n\\t\\t\\tconst customTimeout = 5000\\n\\n\\t\\t\\t// Mock configuration with custom timeout\\n\\t\\t\\tmockGetConfiguration.mockReturnValue({\\n\\t\\t\\t\\tget: jest.fn((key: string, defaultValue?: any) => {\\n\\t\\t\\t\\t\\tif (key === \\\"disableMarketplace\\\") return false\\n\\t\\t\\t\\t\\tif (key === \\\"marketplaceTimeout\\\") return customTimeout\\n\\t\\t\\t\\t\\treturn defaultValue\\n\\t\\t\\t\\t}),\\n\\t\\t\\t} as any)\\n\\n\\t\\t\\tconst loader = new RemoteConfigLoader()\\n\\n\\t\\t\\t// Mock the private fetchWithRetry method to verify timeout is used\\n\\t\\t\\tconst fetchWithRetrySpy = jest.spyOn(loader as any, \\\"fetchWithRetry\\\")\\n\\t\\t\\tfetchWithRetrySpy.mockRejectedValue(new Error(\\\"Network timeout\\\"))\\n\\n\\t\\t\\ttry {\\n\\t\\t\\t\\tawait loader.loadAllItems()\\n\\t\\t\\t} catch (error) {\\n\\t\\t\\t\\t// Expected to fail due to mocked network error\\n\\t\\t\\t}\\n\\n\\t\\t\\texpect(mockGetConfiguration).toHaveBeenCalledWith(\\\"roo-cline\\\")\\n\\t\\t})\\n\\n\\t\\tit(\\\"should log appropriate messages when marketplace is disabled\\\", async () => {\\n\\t\\t\\tconst consoleSpy = jest.spyOn(console, \\\"log\\\").mockImplementation()\\n\\n\\t\\t\\t// Mock configuration to disable marketplace\\n\\t\\t\\tmockGetConfiguration.mockReturnValue({\\n\\t\\t\\t\\tget: jest.fn((key: string, defaultValue?: any) => {\\n\\t\\t\\t\\t\\tif (key === \\\"disableMarketplace\\\") return true\\n\\t\\t\\t\\t\\treturn defaultValue\\n\\t\\t\\t\\t}),\\n\\t\\t\\t} as any)\\n\\n\\t\\t\\tconst loader = new RemoteConfigLoader()\\n\\t\\t\\tawait loader.loadAllItems()\\n\\n\\t\\t\\texpect(consoleSpy).toHaveBeenCalledWith(\\\"Marketplace: Disabled via user setting, returning empty items\\\")\\n\\n\\t\\t\\tconsoleSpy.mockRestore()\\n\\t\\t})\\n\\t})\\n\\n\\tdescribe(\\\"MarketplaceManager\\\", () => {\\n\\t\\tit(\\\"should handle network errors gracefully\\\", async () => {\\n\\t\\t\\t// Mock configuration to enable marketplace but simulate network issues\\n\\t\\t\\tmockGetConfiguration.mockReturnValue({\\n\\t\\t\\t\\tget: jest.fn((key: string, defaultValue?: any) => {\\n\\t\\t\\t\\t\\tif (key === \\\"disableMarketplace\\\") return false\\n\\t\\t\\t\\t\\tif (key === \\\"marketplaceTimeout\\\") return 1000 // Very short timeout\\n\\t\\t\\t\\t\\treturn defaultValue\\n\\t\\t\\t\\t}),\\n\\t\\t\\t} as any)\\n\\n\\t\\t\\tconst mockContext = {\\n\\t\\t\\t\\tglobalState: {\\n\\t\\t\\t\\t\\tget: jest.fn(),\\n\\t\\t\\t\\t\\tupdate: jest.fn(),\\n\\t\\t\\t\\t},\\n\\t\\t\\t\\textensionPath: \\\"/mock/path\\\",\\n\\t\\t\\t} as any\\n\\n\\t\\t\\tconst manager = new MarketplaceManager(mockContext)\\n\\n\\t\\t\\t// Mock the config loader to throw a timeout error\\n\\t\\t\\tjest.spyOn(manager[\\\"configLoader\\\"], \\\"loadAllItems\\\").mockRejectedValue(\\n\\t\\t\\t\\tnew Error(\\\"timeout of 1000ms exceeded\\\"),\\n\\t\\t\\t)\\n\\n\\t\\t\\tconst result = await manager.getMarketplaceItems()\\n\\n\\t\\t\\texpect(result.items).toEqual([])\\n\\t\\t\\texpect(result.errors).toContain(\\\"timeout of 1000ms exceeded\\\")\\n\\t\\t})\\n\\t})\\n})\",\"isOutsideWorkspace\":false,\"isProtected\":false}",
|
||
"partial": false,
|
||
"isProtected": false
|
||
}
|
||
[2025-06-18T08:46:11.263Z] {
|
||
"ts": 1750236371258,
|
||
"type": "say",
|
||
"say": "api_req_started",
|
||
"text": "{\"request\":\"[write_to_file for 'src/services/marketplace/__tests__/network-timeout-fix.test.ts'] Result:\\n\\n<file_write_result>\\n<path>src/services/marketplace/__tests__/network-timeout-fix.test.ts</path>\\n<operation>created</operation>\\n<notice>\\n<i>You do not need to re-read the file, as you have seen all changes</i>\\n<i>Proceed with the task using these changes as the new baseline.</i>\\n</notice>\\n</file_write_result>\\n\\n\\nLoading...\"}"
|
||
}
|
||
[2025-06-18T08:46:45.055Z] {
|
||
"ts": 1750236403356,
|
||
"type": "say",
|
||
"say": "text",
|
||
"text": "Now let me run the tests to make sure our changes work correctly:",
|
||
"partial": false
|
||
}
|
||
[2025-06-18T08:46:52.996Z] {
|
||
"ts": 1750236405055,
|
||
"type": "ask",
|
||
"ask": "command",
|
||
"text": "cd src && npm test -- --testPathPattern=\"network-timeout-fix.test.ts\"",
|
||
"partial": false,
|
||
"isProtected": false
|
||
}
|
||
[2025-06-18T08:46:53.242Z] {
|
||
"ts": 1750236413237,
|
||
"type": "ask",
|
||
"ask": "command_output",
|
||
"text": ""
|
||
}
|
||
[2025-06-18T08:46:53.757Z] {
|
||
"ts": 1750236413742,
|
||
"type": "ask",
|
||
"ask": "command_output",
|
||
"text": ""
|
||
}
|
||
[2025-06-18T08:46:56.209Z] {
|
||
"ts": 1750236416203,
|
||
"type": "ask",
|
||
"ask": "command_output",
|
||
"text": ""
|
||
}
|
||
[2025-06-18T08:47:00.067Z] {
|
||
"ts": 1750236420060,
|
||
"type": "ask",
|
||
"ask": "command_output",
|
||
"text": ""
|
||
}
|
||
[2025-06-18T08:47:01.558Z] {
|
||
"ts": 1750236421552,
|
||
"type": "ask",
|
||
"ask": "command_output",
|
||
"text": ""
|
||
}
|
||
[2025-06-18T08:47:06.387Z] {
|
||
"ts": 1750236426374,
|
||
"type": "ask",
|
||
"ask": "command_output",
|
||
"text": ""
|
||
}
|
||
[2025-06-18T08:47:06.901Z] {
|
||
"ts": 1750236426895,
|
||
"type": "ask",
|
||
"ask": "command_output",
|
||
"text": ""
|
||
}
|
||
[2025-06-18T08:47:09.184Z] {
|
||
"ts": 1750236429177,
|
||
"type": "ask",
|
||
"ask": "command_output",
|
||
"text": ""
|
||
}
|
||
[2025-06-18T08:47:09.900Z] {
|
||
"ts": 1750236429895,
|
||
"type": "ask",
|
||
"ask": "command_output",
|
||
"text": ""
|
||
}
|
||
[2025-06-18T08:47:10.605Z] {
|
||
"ts": 1750236430598,
|
||
"type": "ask",
|
||
"ask": "command_output",
|
||
"text": ""
|
||
}
|
||
[2025-06-18T08:47:26.132Z] {
|
||
"ts": 1750236446113,
|
||
"type": "ask",
|
||
"ask": "command_output",
|
||
"text": ""
|
||
}
|
||
[2025-06-18T08:47:26.132Z] {
|
||
"ts": 1750236446126,
|
||
"type": "ask",
|
||
"ask": "command_output",
|
||
"text": ""
|
||
}
|
||
[2025-06-18T08:47:26.136Z] {
|
||
"ts": 1750236446126,
|
||
"type": "say",
|
||
"say": "command_output",
|
||
"text": "\n> roo-cline@3.20.3 pretest\n> turbo run bundle --cwd ..\n\n\nAttention:\nTurborepo now collects completely anonymous telemetry regarding usage.\nThis information is used to shape the Turborepo roadmap and prioritize features.\nYou can learn more, including how to opt-out if you'd not like to participate in this anonymous program, by visiting the following URL:\nhttps://turborepo.com/docs/telemetry\n\nturbo 2.5.4\n\n• Packages in scope: @roo-code/build, @roo-code/cloud, @roo-code/config-eslint, @roo-code/config-typescript, @roo-code/evals, @roo-code/ipc, @roo-code/telemetry, @roo-code/types, @roo-code/vscode-e2e, @roo-code/vscode-nightly, @roo-code/vscode-webview, @roo-code/web-evals, @roo-code/web-roo-code, roo-cline\n• Running bundle in 14 packages\n• Remote caching disabled\n@roo-code/vscode-webview:build: cache miss, executing 3e3f231f0af50923\n@roo-code/types:build: cache miss, executing 0c63a498c5dc57fc\n@roo-code/build:build: cache miss, executing 81a531b758730c71\n@roo-code/types:build: \n@roo-code/types:build: > @roo-code/types@0.0.0 build /roo/repos/Roo-Code/packages/types\n@roo-code/types:build: > tsup\n@roo-code/types:build: \n@roo-code/vscode-webview:build: \n@roo-code/vscode-webview:build: > @roo-code/vscode-webview@ build /roo/repos/Roo-Code/webview-ui\n@roo-code/vscode-webview:build: > tsc -b && vite build\n@roo-code/vscode-webview:build: \n@roo-code/build:build: \n@roo-code/build:build: > @roo-code/build@ build /roo/repos/Roo-Code/packages/build\n@roo-code/build:build: > tsc\n@roo-code/build:build: \n@roo-code/types:build: CLI Building entry: src/index.ts\n@roo-code/types:build: CLI Using tsconfig: tsconfig.json\n@roo-code/types:build: CLI tsup v8.5.0\n@roo-code/types:build: CLI Using tsup config: /roo/repos/Roo-Code/packages/types/tsup.config.ts\n@roo-code/types:build: CLI Target: es2022\n@roo-code/types:build: CJS Build start\n@roo-code/types:build: ESM Build start\n@roo-code/types:build: CJS dist/index.cjs 110.03 KB\n@roo-code/types:build: CJS dist/index.cjs.map 174.20 KB\n@roo-code/types:build: CJS ⚡️ Build success in 41ms\n@roo-code/types:build: ESM dist/index.js 95.69 KB\n@roo-code/types:build: ESM dist/index.js.map 173.31 KB\n@roo-code/types:build: ESM ⚡️ Build success in 44ms\n@roo-code/types:build: DTS Build start\n@roo-code/types:build: DTS ⚡️ Build success in 2306ms\n@roo-code/types:build: DTS dist/index.d.cts 606.40 KB\n@roo-code/types:build: DTS dist/index.d.ts 606.40 KB\n@roo-code/vscode-webview:build: vite v6.3.5 building for production...\n@roo-code/vscode-webview:build: transforming...\n@roo-code/vscode-webview:build: [plugin vite:resolve] Module \"fs/promises\" has been externalized for browser compatibility, imported by \"/roo/repos/Roo-Code/src/core/prompts/sections/custom-instructions.ts\". See https://vite.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details.\n@roo-code/vscode-webview:build: [plugin vite:resolve] Module \"path\" has been externalized for browser compatibility, imported by \"/roo/repos/Roo-Code/src/core/prompts/sections/custom-instructions.ts\". See https://vite.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details.\n@roo-code/vscode-webview:build: ✓ 5371 modules transformed.\n@roo-code/vscode-webview:build: rendering chunks...\n@roo-code/vscode-webview:build: ../src/webview-ui/build/index.html 0.43 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/codicon.ttf 80.19 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/index.css 93.34 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Bp6g37R7.js 0.59 kB │ map: 1.11 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D9kx8fwg.js 0.75 kB │ map: 1.34 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-B_m7g4N7.js 0.78 kB │ map: 1.40 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C3rowuyE.js 0.94 kB │ map: 1.44 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DjjNbUIW.js 1.02 kB │ map: 1.70 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C8lEn-DE.js 1.05 kB │ map: 1.76 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CSPye00a.js 1.13 kB │ map: 1.96 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-fuZLfV_i.js 1.19 kB │ map: 2.02 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CdTSL8YE.js 1.27 kB │ map: 2.05 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CJOTNe-S.js 1.43 kB │ map: 2.21 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Da5cRb03.js 1.47 kB │ map: 2.36 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CrJ-YhoI.js 1.52 kB │ map: 2.13 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BEwlwnbL.js 1.57 kB │ map: 2.50 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BcOcwvcX.js 1.78 kB │ map: 2.67 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C9tDr53Z.js 1.79 kB │ map: 2.49 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BmXAJ9_W.js 1.88 kB │ map: 2.79 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BV7otONQ.js 2.20 kB │ map: 3.21 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C2t-YnRu.js 2.28 kB │ map: 3.42 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C-SQnVFl.js 2.39 kB │ map: 3.54 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DNNlxIVo.js 2.39 kB │ map: 3.57 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D08WgyRC.js 2.41 kB │ map: 3.85 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D97Zzqfu.js 2.61 kB │ map: 3.89 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BspZqrRM.js 2.62 kB │ map: 4.02 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DouSy6O5.js 2.66 kB │ map: 3.32 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DFXneXwc.js 2.69 kB │ map: 3.72 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Cp-IABpG.js 2.87 kB │ map: 4.35 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BFvZA1X9.js 2.89 kB │ map: 4.37 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DP8w0yq8.js 2.98 kB │ map: 4.55 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DcaNXYhu.js 3.05 kB │ map: 4.54 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Des-eS-w.js 3.15 kB │ map: 4.63 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BtOb2qkB.js 3.17 kB │ map: 3.84 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BTJTHyun.js 3.28 kB │ map: 5.11 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C9tS-k6U.js 3.30 kB │ map: 4.98 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CKIfxQSi.js 3.30 kB │ map: 4.70 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-QIJgUcNo.js 3.33 kB │ map: 5.16 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D0YGMca9.js 3.40 kB │ map: 4.90 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C3B-1QV4.js 3.41 kB │ map: 4.90 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CsfeWuGM.js 3.41 kB │ map: 4.92 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BtCnVYZw.js 3.48 kB │ map: 4.47 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C4IJs8-o.js 3.65 kB │ map: 5.23 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-_ykCGR6B.js 3.66 kB │ map: 4.51 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DFQXde-d.js 3.66 kB │ map: 5.45 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DXETW7eA.js 3.68 kB │ map: 4.40 kB\n\n[...41 lines omitted...]\n\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DXbdFlpD.js 6.89 kB │ map: 9.70 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BM1_JUlF.js 6.96 kB │ map: 9.63 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CTRr51gU.js 7.01 kB │ map: 9.55 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-3ipgsugG.js 7.02 kB │ map: 10.73 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C98Dy4si.js 7.21 kB │ map: 9.82 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D3lLCCz7.js 7.31 kB │ map: 9.27 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-IeuSbFQv.js 7.52 kB │ map: 9.43 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CF10PKvl.js 7.86 kB │ map: 11.55 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-4A_iFExJ.js 7.91 kB │ map: 10.67 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D4h5O-jR.js 7.93 kB │ map: 11.12 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CDVJQ6XC.js 8.03 kB │ map: 11.22 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Cne5dW8M.js 8.30 kB │ map: 12.39 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DHCkPAjA.js 8.43 kB │ map: 12.33 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-ChMvpjG-.js 8.56 kB │ map: 10.92 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D1_LrSGp.js 8.70 kB │ map: 12.07 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BdnUsdx6.js 8.83 kB │ map: 12.81 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C3khCPGq.js 8.90 kB │ map: 11.77 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DIHx2sdZ.js 8.99 kB │ map: 14.50 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CHLpvVh8.js 9.00 kB │ map: 12.89 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D1K3uGbs.js 9.11 kB │ map: 11.13 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C3mMm8J8.js 9.14 kB │ map: 12.44 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BthQWCQV.js 9.16 kB │ map: 12.53 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Cj5Yp3dK.js 9.33 kB │ map: 13.45 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-3e1v2bzS.js 9.34 kB │ map: 12.51 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DqwNpetd.js 9.47 kB │ map: 13.13 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-jQY0bNUL.js 9.57 kB │ map: 12.23 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-B5tOyCc9.js 9.73 kB │ map: 14.12 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D1j8_8rp.js 9.90 kB │ map: 11.30 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-B7mTdjB0.js 9.98 kB │ map: 13.44 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BWvSN4gD.js 10.10 kB │ map: 14.82 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BoKiGodi.js 10.17 kB │ map: 14.74 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BtqSS_iP.js 10.51 kB │ map: 15.14 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DXvB9xmW.js 10.52 kB │ map: 12.94 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D2CYqzqI.js 10.55 kB │ map: 15.20 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Buea-lGh.js 10.55 kB │ map: 14.93 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BAAX8Kh4.js 10.71 kB │ map: 15.59 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-sVvOI5da.js 11.02 kB │ map: 16.06 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DAi9KRSo.js 11.23 kB │ map: 15.43 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CbFg5uaA.js 11.40 kB │ map: 13.33 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BETggiCN.js 11.43 kB │ map: 16.25 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DHJKELXO.js 11.45 kB │ map: 15.70 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BMWR74SV.js 11.48 kB │ map: 16.35 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DUszq2jm.js 11.54 kB │ map: 14.72 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DyxjwDmM.js 11.99 kB │ map: 13.15 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-MzD3tlZU.js 12.05 kB │ map: 16.87 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D5-asLiD.js 12.10 kB │ map: 17.32 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C9dXKwCe.js 12.19 kB │ map: 17.40 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Pmp26Uib.js 12.50 kB │ map: 15.98 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-irsrSlf-.js 12.73 kB │ map: 17.89 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DU1UobuO.js 12.74 kB │ map: 16.19 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BkioyH1T.js 12.93 kB │ map: 17.43 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DljmTZ5-.js 13.27 kB │ map: 19.32 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CVO1_9PV.js 13.66 kB │ map: 18.57 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D-2ljcwZ.js 13.70 kB │ map: 17.59 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Bkuqu6BP.js 13.72 kB │ map: 18.65 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D0r3Knsf.js 13.80 kB │ map: 18.73 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Jcf2cZT6.js 13.88 kB │ map: 20.53 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CbfX1IO0.js 14.08 kB │ map: 19.11 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CfeIJUat.js 14.09 kB │ map: 19.86 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CHh-QcGE.js 14.14 kB │ map: 19.78 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D7oLnXFd.js 14.20 kB │ map: 19.29 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BfjtVDDH.js 14.32 kB │ map: 19.46 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DH5Ifo-i.js 14.48 kB │ map: 19.66 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Cuk6v7N8.js 14.48 kB │ map: 19.67 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-E3gJ1_iC.js 14.64 kB │ map: 19.89 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BepWV7mh.js 14.79 kB │ map: 21.56 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DdkO51Og.js 14.83 kB │ map: 20.85 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Cv9koXgw.js 14.99 kB │ map: 20.29 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-B1yitclQ.js 15.11 kB │ map: 21.49 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BvAqAH-y.js 15.21 kB │ map: 19.64 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Colysff4.js 15.25 kB │ map: 21.66 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BdImnpbu.js 15.90 kB │ map: 18.87 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D7o27uSR.js 16.13 kB │ map: 23.40 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D82EKSYY.js 16.25 kB │ map: 23.82 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BbcW6ACK.js 16.28 kB │ map: 23.70 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DRBVVfo7.js 16.36 kB │ map: 23.16 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DO0LZyKx.js 16.77 kB │ map: 24.05 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CMUws-av.js 17.00 kB │ map: 23.92 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BkPM1oy1.js 17.11 kB │ map: 25.66 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DWedfzmr.js 17.17 kB │ map: 22.29 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CfQXZHmo.js 17.17 kB │ map: 22.30 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CkXjmgJE.js 17.17 kB │ map: 22.30 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BgEskmCb.js 17.76 kB │ map: 24.78 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C-HMFfM3.js 18.04 kB │ map: 25.48 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D5KoaKCx.js 18.66 kB │ map: 24.13 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BfHTSMKl.js 18.67 kB │ map: 24.17 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CyktbL80.js 18.67 kB │ map: 24.16 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-B0m2ddpp.js 18.68 kB │ map: 24.18 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Csfq5Kiy.js 18.68 kB │ map: 24.18 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Bty6elJm.js 18.88 kB │ map: 26.12 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-gcz8RCvz.js 19.22 kB │ map: 27.55 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-B0YXbBSa.js 19.66 kB │ map: 23.11 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-I3RK9BU8.js 19.85 kB │ map: 27.05 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BaML1QMV.js 20.11 kB │ map: 28.62 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Bc2xwClX.js 20.11 kB │ map: 28.62 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Dpen1YoG.js 20.19 kB │ map: 26.62 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CJc9bBzg.js 20.41 kB │ map: 23.53 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Bw305WKR.js 20.82 kB │ map: 28.03 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BzJJZx-M.js 21.11 kB │ map: 27.51 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BXkSAIEj.js 21.12 kB │ map: 27.54 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DQ46CBc_.js 21.13 kB │ map: 31.77 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-T7J2jLj3.js 21.42 kB │ map: 29.24 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-5i3qLPDT.js 21.51 kB │ map: 30.13 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BHrmToEH.js 21.79 kB │ map: 28.78 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-NleAzG8P.js 21.80 kB │ map: 28.81 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CnK8MTSM.js 21.80 kB │ map: 28.81 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Hhtzho9R.js 21.90 kB │ map: 29.52 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BFVdkX1U.js 21.90 kB │ map: 29.52 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-7i6GEmcB.js 21.90 kB │ map: 29.53 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-leinZj1a.js 21.90 kB │ map: 29.53 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DFR6f4Jn.js 21.90 kB │ map: 29.53 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Dcsh5twl.js 21.91 kB │ map: 29.54 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DWkon8Hs.js 22.51 kB │ map: 32.77 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Cg-RD9OK.js 22.62 kB │ map: 26.71 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-B9xm8XSJ.js 23.46 kB │ map: 27.96 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CtrldY6v.js 23.61 kB │ map: 33.41 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Df68jz8_.js 23.70 kB │ map: 33.09 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BrYkhBEK.js 24.00 kB │ map: 29.10 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-B47ASqzZ.js 24.04 kB │ map: 30.83 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DbjXokdF.js 24.08 kB │ map: 33.35 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CeAyd5Ju.js 24.31 kB │ map: 33.41 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-sYKpKAhk.js 24.33 kB │ map: 35.57 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk--Ycre7K_.js 25.33 kB │ map: 35.88 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-PoHY5YXO.js 25.34 kB │ map: 33.81 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BSCcYQo-.js 25.60 kB │ map: 35.74 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CnnmHF94.js 26.25 kB │ map: 36.29 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Ddv68eIx.js 26.77 kB │ map: 35.36 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DsOJ9woJ.js 26.93 kB │ map: 36.04 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-vbB5lEOJ.js 27.25 kB │ map: 38.35 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CylS5w8V.js 27.26 kB │ map: 38.66 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C-C_nZcE.js 27.46 kB │ map: 36.10 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DfEE3Bzs.js 28.33 kB │ map: 42.30 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C151Ov-r.js 28.93 kB │ map: 40.14 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C39BiMTA.js 28.96 kB │ map: 39.06 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BnD7D7ah.js 29.43 kB │ map: 41.19 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Co6uUVPk.js 29.61 kB │ map: 39.37 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BEDo0Tqx.js 31.12 kB │ map: 38.90 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DSnTR2wu.js 31.12 kB │ map: 40.57 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CS3Unz2-.js 33.54 kB │ map: 43.07 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DVMEJ2y_.js 33.83 kB │ map: 44.51 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CDuzWNpe.js 33.91 kB │ map: 37.62 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BP3HzMA6.js 35.20 kB │ map: 49.54 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Cu1ofpgu.js 35.42 kB │ map: 48.49 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DnULxvSX.js 35.47 kB │ map: 46.40 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-hegEt444.js 35.71 kB │ map: 45.35 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-pO14Kfwb.js 36.95 kB │ map: 156.31 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DpOm0zC4.js 37.47 kB │ map: 51.50 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-OpcvBqEo.js 39.18 kB │ map: 47.38 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C2tOF0e5.js 39.47 kB │ map: 48.58 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D_Q5rh1f.js 40.76 kB │ map: 53.02 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Yzrsuije.js 41.52 kB │ map: 56.55 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Df6bDoY_.js 41.53 kB │ map: 57.87 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BgfZh1f1.js 43.20 kB │ map: 60.76 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-85-TOEBH.js 43.84 kB │ map: 62.72 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-PEFJdsE-.js 45.17 kB │ map: 64.22 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-3mfGJbgy.js 45.96 kB │ map: 65.26 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-QX45V2Sx.js 46.12 kB │ map: 64.41 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BR7mELCv.js 46.89 kB │ map: 61.48 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-q-j0iyEw.js 46.89 kB │ map: 61.48 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Btyk0a-E.js 46.89 kB │ map: 61.48 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-brDaU2vB.js 46.89 kB │ map: 61.50 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-bCR0ucgS.js 48.13 kB │ map: 70.99 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DPfMkruS.js 49.07 kB │ map: 60.65 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DGztddWO.js 49.97 kB │ map: 68.11 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BgDCqdQA.js 53.79 kB │ map: 68.27 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C8M2exoo.js 53.79 kB │ map: 68.28 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BhOHFoWU.js 55.93 kB │ map: 77.66 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-RrBGtqGR.js 55.95 kB │ map: 77.63 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CiIkovmz.js 57.04 kB │ map: 74.19 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CXhxxCfG.js 57.29 kB │ map: 73.01 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BFfxhgS-.js 58.74 kB │ map: 81.56 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C0hk2d4L.js 62.49 kB │ map: 81.13 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-1DNp92w6.js 69.33 kB │ map: 94.25 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Du0Ki9n9.js 69.45 kB │ map: 96.16 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-B6aJPvgy.js 70.00 kB │ map: 95.26 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BIGW1oBm.js 72.16 kB │ map: 95.41 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CDx5xZoG.js 74.69 kB │ map: 100.73 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CUz34qUM.js 80.28 kB │ map: 97.31 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CHadp7IV.js 85.63 kB │ map: 120.19 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-fve9TYiY.js 86.01 kB │ map: 113.15 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CdggvHu8.js 87.11 kB │ map: 124.90 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D22FLkUw.js 87.19 kB │ map: 121.54 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BqYA7rlc.js 92.43 kB │ map: 106.21 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-B1dDrJ26.js 97.68 kB │ map: 131.88 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CLIx6TIR.js 103.84 kB │ map: 129.27 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DXmwc3jG.js 105.46 kB │ map: 129.67 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Cf4Oy6XI.js 111.05 kB │ map: 139.30 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Cmh6b_Ma.js 136.16 kB │ map: 176.75 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CLxacb5B.js 172.02 kB │ map: 218.55 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BMMyXqK5.js 174.86 kB │ map: 236.06 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-COt5Ahok.js 175.58 kB │ map: 236.76 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-g9-lgVsj.js 177.84 kB │ map: 239.01 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DlfHMoPT.js 181.11 kB │ map: 244.40 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Cno5XSCQ.js 183.86 kB │ map: 249.41 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-lXgVvXCa.js 262.43 kB │ map: 279.68 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CG6Dc4jp.js 622.38 kB │ map: 622.93 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CzjqYRUi.js 626.13 kB │ map: 816.15 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C9XAeP06.js 779.90 kB │ map: 789.83 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/mermaid-bundle.js 2,538.21 kB │ map: 9,621.20 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/index.js 3,236.37 kB │ map: 7,432.44 kB\n@roo-code/vscode-webview:build: \n@roo-code/vscode-webview:build: (!) Some chunks are larger than 500 kB after minification. Consider:\n@roo-code/vscode-webview:build: - Using dynamic import() to code-split the application\n@roo-code/vscode-webview:build: - Use build.rollupOptions.output.manualChunks to improve chunking: https://rollupjs.org/configuration-options/#output-manualchunks\n@roo-code/vscode-webview:build: - Adjust chunk size limit for this warning via build.chunkSizeWarningLimit.\n@roo-code/vscode-webview:build: ✓ built in 9.10s\nroo-cline:bundle: cache miss, executing bca2304591f4eb39\nroo-cline:bundle: \nroo-cline:bundle: > roo-cline@3.20.3 bundle /roo/repos/Roo-Code/src\nroo-cline:bundle: > node esbuild.mjs\nroo-cline:bundle: \nroo-cline:bundle: [esbuild-problem-matcher#onStart]\nroo-cline:bundle: [copyPaths] Copied ../README.md to README.md\nroo-cline:bundle: [copyPaths] Copied ../CHANGELOG.md to CHANGELOG.md\nroo-cline:bundle: [copyPaths] Copied ../LICENSE to LICENSE\nroo-cline:bundle: [copyPaths] Optional file not found: ../.env\nroo-cline:bundle: [copyPaths] Copied 911 files from node_modules/vscode-material-icons/generated to assets/vscode-material-icons\nroo-cline:bundle: [copyPaths] Copied 3 files from ../webview-ui/audio to webview-ui/audio\nroo-cline:bundle: [copyWasms] Copied tiktoken WASMs to /roo/repos/Roo-Code/src/dist\nroo-cline:bundle: [copyWasms] Copied tiktoken WASMs to /roo/repos/Roo-Code/src/dist/workers\nroo-cline:bundle: [copyWasms] Copied tree-sitter.wasm to /roo/repos/Roo-Code/src/dist\nroo-cline:bundle: [copyWasms] Copied 35 tree-sitter language wasms to /roo/repos/Roo-Code/src/dist\nroo-cline:bundle: [copyLocales] Copied 72 locale files to /roo/repos/Roo-Code/src/dist/i18n/locales\nroo-cline:bundle: [esbuild-problem-matcher#onEnd]\n\n Tasks: 4 successful, 4 total\nCached: 0 cached, 4 total\n Time: 16.711s \n\n\n> roo-cline@3.20.3 test\n> jest -w=40% && vitest run --testPathPattern=network-timeout-fix.test.ts\n\n\nFound 130 test suites\n..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................***********..................*FFFF.FFF.....................................................*........................................................................................................................................................................................................................................................................................................................................................................................................................................*****......................................................................................................................................................................................................................................FFF......................................................................**.................\nRan 1389 tests in 15.515 s\n 1359 passing 10 failing 20 pending\n ● RemoteConfigLoader › loadAllItems › should fetch and combine modes and MCPs from API\n\n TypeError: vscode.workspace.getConfiguration is not a function\n\n 27 | \tasync loadAllItems(): Promise<MarketplaceItem[]> {\n 28 | \t\t// Check if marketplace is disabled via user setting\n > 29 | \t\tconst config = vscode.workspace.getConfiguration(\"roo-cline\")\n | \t\t ^\n 30 | \t\tconst isMarketplaceDisabled = config.get<boolean>(\"disableMarketplace\", false)\n 31 | \t\t\n 32 | \t\tif (isMarketplaceDisabled) {\n\n at RemoteConfigLoader.loadAllItems (services/marketplace/RemoteConfigLoader.ts:29:35)\n at Object.<anonymous> (services/marketplace/__tests__/RemoteConfigLoader.test.ts:49:31)\n\n ● RemoteConfigLoader › loadAllItems › should use cache on subsequent calls\n\n TypeError: vscode.workspace.getConfiguration is not a function\n\n 27 | \tasync loadAllItems(): Promise<MarketplaceItem[]> {\n 28 | \t\t// Check if marketplace is disabled via user setting\n > 29 | \t\tconst config = vscode.workspace.getConfiguration(\"roo-cline\")\n | \t\t ^\n 30 | \t\tconst isMarketplaceDisabled = config.get<boolean>(\"disableMarketplace\", false)\n 31 | \t\t\n 32 | \t\tif (isMarketplaceDisabled) {\n\n at RemoteConfigLoader.loadAllItems (services/marketplace/RemoteConfigLoader.ts:29:35)\n at Object.<anonymous> (services/marketplace/__tests__/RemoteConfigLoader.test.ts:116:32)\n\n ● RemoteConfigLoader › loadAllItems › should retry on network failures\n\n TypeError: vscode.workspace.getConfiguration is not a function\n\n 27 | \tasync loadAllItems(): Promise<MarketplaceItem[]> {\n 28 | \t\t// Check if marketplace is disabled via user setting\n > 29 | \t\tconst config = vscode.workspace.getConfiguration(\"roo-cline\")\n | \t\t ^\n 30 | \t\tconst isMarketplaceDisabled = config.get<boolean>(\"disableMarketplace\", false)\n 31 | \t\t\n 32 | \t\tif (isMarketplaceDisabled) {\n\n at RemoteConfigLoader.loadAllItems (services/marketplace/RemoteConfigLoader.ts:29:35)\n at Object.<anonymous> (services/marketplace/__tests__/RemoteConfigLoader.test.ts:151:31)\n\n ● RemoteConfigLoader › loadAllItems › should throw error after max retries\n\n expect(received).rejects.toThrow(expected)\n\n Expected substring: \"Persistent network error\"\n Received message: \"vscode.workspace.getConfiguration is not a function\"\n\n 27 | \tasync loadAllItems(): Promise<MarketplaceItem[]> {\n 28 | \t\t// Check if marketplace is disabled via user setting\n > 29 | \t\tconst config = vscode.workspace.getConfiguration(\"roo-cline\")\n | \t\t ^\n 30 | \t\tconst isMarketplaceDisabled = config.get<boolean>(\"disableMarketplace\", false)\n 31 | \t\t\n 32 | \t\tif (isMarketplaceDisabled) {\n\n at RemoteConfigLoader.loadAllItems (services/marketplace/RemoteConfigLoader.ts:29:35)\n at Object.<anonymous> (services/marketplace/__tests__/RemoteConfigLoader.test.ts:162:24)\n at Object.toThrow (../node_modules/.pnpm/expect@29.7.0/node_modules/expect/build/index.js:218:22)\n at Object.<anonymous> (services/marketplace/__tests__/RemoteConfigLoader.test.ts:162:48)\n\n ● RemoteConfigLoader › getItem › should find specific item by id and type\n\n TypeError: vscode.workspace.getConfiguration is not a function\n\n 27 | \tasync loadAllItems(): Promise<MarketplaceItem[]> {\n 28 | \t\t// Check if marketplace is disabled via user setting\n > 29 | \t\tconst config = vscode.workspace.getConfiguration(\"roo-cline\")\n | \t\t ^\n 30 | \t\tconst isMarketplaceDisabled = config.get<boolean>(\"disableMarketplace\", false)\n 31 | \t\t\n 32 | \t\tif (isMarketplaceDisabled) {\n\n at RemoteConfigLoader.loadAllItems (services/marketplace/RemoteConfigLoader.ts:29:35)\n at RemoteConfigLoader.getItem (services/marketplace/RemoteConfigLoader.ts:120:28)\n at Object.<anonymous> (services/marketplace/__tests__/RemoteConfigLoader.test.ts:226:34)\n\n ● RemoteConfigLoader › clearCache › should clear cache and force fresh API calls\n\n TypeError: vscode.workspace.getConfiguration is not a function\n\n 27 | \tasync loadAllItems(): Promise<MarketplaceItem[]> {\n 28 | \t\t// Check if marketplace is disabled via user setting\n > 29 | \t\tconst config = vscode.workspace.getConfiguration(\"roo-cline\")\n | \t\t ^\n 30 | \t\tconst isMarketplaceDisabled = config.get<boolean>(\"disableMarketplace\", false)\n 31 | \t\t\n 32 | \t\tif (isMarketplaceDisabled) {\n\n at RemoteConfigLoader.loadAllItems (services/marketplace/RemoteConfigLoader.ts:29:35)\n at Object.<anonymous> (services/marketplace/__tests__/RemoteConfigLoader.test.ts:272:17)\n\n ● RemoteConfigLoader › cache expiration › should expire cache after 5 minutes\n\n TypeError: vscode.workspace.getConfiguration is not a function\n\n 27 | \tasync loadAllItems(): Promise<MarketplaceItem[]> {\n 28 | \t\t// Check if marketplace is disabled via user setting\n > 29 | \t\tconst config = vscode.workspace.getConfiguration(\"roo-cline\")\n | \t\t ^\n 30 | \t\tconst isMarketplaceDisabled = config.get<boolean>(\"disableMarketplace\", false)\n 31 | \t\t\n 32 | \t\tif (isMarketplaceDisabled) {\n\n at RemoteConfigLoader.loadAllItems (services/marketplace/RemoteConfigLoader.ts:29:35)\n at Object.<anonymous> (services/marketplace/__tests__/RemoteConfigLoader.test.ts:315:17)\n\n ● Marketplace Setting Check › should skip API calls when marketplace is disabled\n\n TypeError: vscode.workspace.getConfiguration is not a function\n\n 1468 | \t\t\t// Check if marketplace is enabled before making API calls\n 1469 | \t\t\tconst { experiments } = await provider.getState()\n > 1470 | \t\t\tconst config = vscode.workspace.getConfiguration(\"roo-cline\")\n | \t\t\t ^\n 1471 | \t\t\tconst isMarketplaceDisabled = config.get<boolean>(\"disableMarketplace\", false)\n 1472 | \t\t\t\n 1473 | \t\t\tif (!experiments.marketplace || isMarketplaceDisabled) {\n\n at webviewMessageHandler (core/webview/webviewMessageHandler.ts:1470:36)\n at Object.<anonymous> (services/marketplace/__tests__/marketplace-setting-check.test.ts:30:3)\n\n ● Marketplace Setting Check › should allow API calls when marketplace is enabled\n\n TypeError: vscode.workspace.getConfiguration is not a function\n\n 1468 | \t\t\t// Check if marketplace is enabled before making API calls\n 1469 | \t\t\tconst { experiments } = await provider.getState()\n > 1470 | \t\t\tconst config = vscode.workspace.getConfiguration(\"roo-cline\")\n | \t\t\t ^\n 1471 | \t\t\tconst isMarketplaceDisabled = config.get<boolean>(\"disableMarketplace\", false)\n 1472 | \t\t\t\n 1473 | \t\t\tif (!experiments.marketplace || isMarketplaceDisabled) {\n\n at webviewMessageHandler (core/webview/webviewMessageHandler.ts:1470:36)\n at Object.<anonymous> (services/marketplace/__tests__/marketplace-setting-check.test.ts:48:3)\n\n ● Marketplace Setting Check › should skip installation when marketplace is disabled\n\n TypeError: vscode.workspace.getConfiguration is not a function\n\n 1495 | \t\t\t// Check if marketplace is enabled before installing\n 1496 | \t\t\tconst { experiments } = await provider.getState()\n > 1497 | \t\t\tconst config = vscode.workspace.getConfiguration(\"roo-cline\")\n | \t\t\t ^\n 1498 | \t\t\tconst isMarketplaceDisabled = config.get<boolean>(\"disableMarketplace\", false)\n 1499 | \t\t\t\n 1500 | \t\t\tif (!experiments.marketplace || isMarketplaceDisabled) {\n\n at webviewMessageHandler (core/webview/webviewMessageHandler.ts:1497:36)\n at Object.<anonymous> (services/marketplace/__tests__/marketplace-setting-check.test.ts:83:3)\n\nnpm notice\nnpm notice New major version of npm available! 10.8.2 -> 11.4.2\nnpm notice Changelog: https://github.com/npm/cli/releases/tag/v11.4.2\nnpm notice To update run: npm install -g npm@11.4.2\nnpm notice\n"
|
||
}
|
||
[2025-06-18T08:47:26.222Z] {
|
||
"ts": 1750236446217,
|
||
"type": "say",
|
||
"say": "api_req_started",
|
||
"text": "{\"request\":\"[execute_command for 'cd src && npm test -- --testPathPattern=\\\"network-timeout-fix.test.ts\\\"'] Result:\\n\\nCommand executed in terminal within working directory '/roo/repos/Roo-Code'. Command execution was not successful, inspect the cause and adjust as needed.\\nExit code: 1\\nOutput:\\n\\n> roo-cline@3.20.3 pretest\\n> turbo run bundle --cwd ..\\n\\n\\nAttention:\\nTurborepo now collects completely anonymous telemetry regarding usage.\\nThis information is used to shape the Turborepo roadmap and prioritize features.\\nYou can learn more, including how to opt-out if you'd not like to participate in this anonymous program, by visiting the following URL:\\nhttps://turborepo.com/docs/telemetry\\n\\nturbo 2.5.4\\n\\n• Packages in scope: @roo-code/build, @roo-code/cloud, @roo-code/config-eslint, @roo-code/config-typescript, @roo-code/evals, @roo-code/ipc, @roo-code/telemetry, @roo-code/types, @roo-code/vscode-e2e, @roo-code/vscode-nightly, @roo-code/vscode-webview, @roo-code/web-evals, @roo-code/web-roo-code, roo-cline\\n• Running bundle in 14 packages\\n• Remote caching disabled\\n@roo-code/vscode-webview:build: cache miss, executing 3e3f231f0af50923\\n@roo-code/types:build: cache miss, executing 0c63a498c5dc57fc\\n@roo-code/build:build: cache miss, executing 81a531b758730c71\\n@roo-code/types:build: \\n@roo-code/types:build: > @roo-code/types@0.0.0 build /roo/repos/Roo-Code/packages/types\\n@roo-code/types:build: > tsup\\n@roo-code/types:build: \\n@roo-code/vscode-webview:build: \\n@roo-code/vscode-webview:build: > @roo-code/vscode-webview@ build /roo/repos/Roo-Code/webview-ui\\n@roo-code/vscode-webview:build: > tsc -b && vite build\\n@roo-code/vscode-webview:build: \\n@roo-code/build:build: \\n@roo-code/build:build: > @roo-code/build@ build /roo/repos/Roo-Code/packages/build\\n@roo-code/build:build: > tsc\\n@roo-code/build:build: \\n@roo-code/types:build: CLI Building entry: src/index.ts\\n@roo-code/types:build: CLI Using tsconfig: tsconfig.json\\n@roo-code/types:build: CLI tsup v8.5.0\\n@roo-code/types:build: CLI Using tsup config: /roo/repos/Roo-Code/packages/types/tsup.config.ts\\n@roo-code/types:build: CLI Target: es2022\\n@roo-code/types:build: CJS Build start\\n@roo-code/types:build: ESM Build start\\n@roo-code/types:build: CJS dist/index.cjs 110.03 KB\\n@roo-code/types:build: CJS dist/index.cjs.map 174.20 KB\\n@roo-code/types:build: CJS ⚡️ Build success in 41ms\\n@roo-code/types:build: ESM dist/index.js 95.69 KB\\n@roo-code/types:build: ESM dist/index.js.map 173.31 KB\\n@roo-code/types:build: ESM ⚡️ Build success in 44ms\\n@roo-code/types:build: DTS Build start\\n@roo-code/types:build: DTS ⚡️ Build success in 2306ms\\n@roo-code/types:build: DTS dist/index.d.cts 606.40 KB\\n@roo-code/types:build: DTS dist/index.d.ts 606.40 KB\\n@roo-code/vscode-webview:build: vite v6.3.5 building for production...\\n@roo-code/vscode-webview:build: transforming...\\n@roo-code/vscode-webview:build: [plugin vite:resolve] Module \\\"fs/promises\\\" has been externalized for browser compatibility, imported by \\\"/roo/repos/Roo-Code/src/core/prompts/sections/custom-instructions.ts\\\". See https://vite.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details.\\n@roo-code/vscode-webview:build: [plugin vite:resolve] Module \\\"path\\\" has been externalized for browser compatibility, imported by \\\"/roo/repos/Roo-Code/src/core/prompts/sections/custom-instructions.ts\\\". See https://vite.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details.\\n@roo-code/vscode-webview:build: ✓ 5371 modules transformed.\\n@roo-code/vscode-webview:build: rendering chunks...\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/index.html 0.43 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/codicon.ttf 80.19 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/index.css 93.34 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Bp6g37R7.js 0.59 kB │ map: 1.11 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D9kx8fwg.js 0.75 kB │ map: 1.34 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-B_m7g4N7.js 0.78 kB │ map: 1.40 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C3rowuyE.js 0.94 kB │ map: 1.44 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DjjNbUIW.js 1.02 kB │ map: 1.70 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C8lEn-DE.js 1.05 kB │ map: 1.76 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CSPye00a.js 1.13 kB │ map: 1.96 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-fuZLfV_i.js 1.19 kB │ map: 2.02 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CdTSL8YE.js 1.27 kB │ map: 2.05 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CJOTNe-S.js 1.43 kB │ map: 2.21 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Da5cRb03.js 1.47 kB │ map: 2.36 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CrJ-YhoI.js 1.52 kB │ map: 2.13 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BEwlwnbL.js 1.57 kB │ map: 2.50 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BcOcwvcX.js 1.78 kB │ map: 2.67 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C9tDr53Z.js 1.79 kB │ map: 2.49 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BmXAJ9_W.js 1.88 kB │ map: 2.79 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BV7otONQ.js 2.20 kB │ map: 3.21 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C2t-YnRu.js 2.28 kB │ map: 3.42 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C-SQnVFl.js 2.39 kB │ map: 3.54 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DNNlxIVo.js 2.39 kB │ map: 3.57 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D08WgyRC.js 2.41 kB │ map: 3.85 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D97Zzqfu.js 2.61 kB │ map: 3.89 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BspZqrRM.js 2.62 kB │ map: 4.02 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DouSy6O5.js 2.66 kB │ map: 3.32 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DFXneXwc.js 2.69 kB │ map: 3.72 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Cp-IABpG.js 2.87 kB │ map: 4.35 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BFvZA1X9.js 2.89 kB │ map: 4.37 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DP8w0yq8.js 2.98 kB │ map: 4.55 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DcaNXYhu.js 3.05 kB │ map: 4.54 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Des-eS-w.js 3.15 kB │ map: 4.63 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BtOb2qkB.js 3.17 kB │ map: 3.84 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BTJTHyun.js 3.28 kB │ map: 5.11 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C9tS-k6U.js 3.30 kB │ map: 4.98 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CKIfxQSi.js 3.30 kB │ map: 4.70 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-QIJgUcNo.js 3.33 kB │ map: 5.16 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D0YGMca9.js 3.40 kB │ map: 4.90 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C3B-1QV4.js 3.41 kB │ map: 4.90 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CsfeWuGM.js 3.41 kB │ map: 4.92 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BtCnVYZw.js 3.48 kB │ map: 4.47 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C4IJs8-o.js 3.65 kB │ map: 5.23 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-_ykCGR6B.js 3.66 kB │ map: 4.51 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DFQXde-d.js 3.66 kB │ map: 5.45 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DXETW7eA.js 3.68 kB │ map: 4.40 kB\\n\\n[...41 lines omitted...]\\n\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DXbdFlpD.js 6.89 kB │ map: 9.70 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BM1_JUlF.js 6.96 kB │ map: 9.63 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CTRr51gU.js 7.01 kB │ map: 9.55 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-3ipgsugG.js 7.02 kB │ map: 10.73 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C98Dy4si.js 7.21 kB │ map: 9.82 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D3lLCCz7.js 7.31 kB │ map: 9.27 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-IeuSbFQv.js 7.52 kB │ map: 9.43 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CF10PKvl.js 7.86 kB │ map: 11.55 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-4A_iFExJ.js 7.91 kB │ map: 10.67 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D4h5O-jR.js 7.93 kB │ map: 11.12 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CDVJQ6XC.js 8.03 kB │ map: 11.22 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Cne5dW8M.js 8.30 kB │ map: 12.39 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DHCkPAjA.js 8.43 kB │ map: 12.33 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-ChMvpjG-.js 8.56 kB │ map: 10.92 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D1_LrSGp.js 8.70 kB │ map: 12.07 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BdnUsdx6.js 8.83 kB │ map: 12.81 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C3khCPGq.js 8.90 kB │ map: 11.77 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DIHx2sdZ.js 8.99 kB │ map: 14.50 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CHLpvVh8.js 9.00 kB │ map: 12.89 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D1K3uGbs.js 9.11 kB │ map: 11.13 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C3mMm8J8.js 9.14 kB │ map: 12.44 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BthQWCQV.js 9.16 kB │ map: 12.53 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Cj5Yp3dK.js 9.33 kB │ map: 13.45 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-3e1v2bzS.js 9.34 kB │ map: 12.51 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DqwNpetd.js 9.47 kB │ map: 13.13 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-jQY0bNUL.js 9.57 kB │ map: 12.23 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-B5tOyCc9.js 9.73 kB │ map: 14.12 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D1j8_8rp.js 9.90 kB │ map: 11.30 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-B7mTdjB0.js 9.98 kB │ map: 13.44 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BWvSN4gD.js 10.10 kB │ map: 14.82 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BoKiGodi.js 10.17 kB │ map: 14.74 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BtqSS_iP.js 10.51 kB │ map: 15.14 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DXvB9xmW.js 10.52 kB │ map: 12.94 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D2CYqzqI.js 10.55 kB │ map: 15.20 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Buea-lGh.js 10.55 kB │ map: 14.93 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BAAX8Kh4.js 10.71 kB │ map: 15.59 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-sVvOI5da.js 11.02 kB │ map: 16.06 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DAi9KRSo.js 11.23 kB │ map: 15.43 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CbFg5uaA.js 11.40 kB │ map: 13.33 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BETggiCN.js 11.43 kB │ map: 16.25 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DHJKELXO.js 11.45 kB │ map: 15.70 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BMWR74SV.js 11.48 kB │ map: 16.35 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DUszq2jm.js 11.54 kB │ map: 14.72 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DyxjwDmM.js 11.99 kB │ map: 13.15 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-MzD3tlZU.js 12.05 kB │ map: 16.87 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D5-asLiD.js 12.10 kB │ map: 17.32 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C9dXKwCe.js 12.19 kB │ map: 17.40 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Pmp26Uib.js 12.50 kB │ map: 15.98 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-irsrSlf-.js 12.73 kB │ map: 17.89 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DU1UobuO.js 12.74 kB │ map: 16.19 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BkioyH1T.js 12.93 kB │ map: 17.43 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DljmTZ5-.js 13.27 kB │ map: 19.32 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CVO1_9PV.js 13.66 kB │ map: 18.57 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D-2ljcwZ.js 13.70 kB │ map: 17.59 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Bkuqu6BP.js 13.72 kB │ map: 18.65 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D0r3Knsf.js 13.80 kB │ map: 18.73 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Jcf2cZT6.js 13.88 kB │ map: 20.53 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CbfX1IO0.js 14.08 kB │ map: 19.11 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CfeIJUat.js 14.09 kB │ map: 19.86 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CHh-QcGE.js 14.14 kB │ map: 19.78 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D7oLnXFd.js 14.20 kB │ map: 19.29 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BfjtVDDH.js 14.32 kB │ map: 19.46 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DH5Ifo-i.js 14.48 kB │ map: 19.66 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Cuk6v7N8.js 14.48 kB │ map: 19.67 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-E3gJ1_iC.js 14.64 kB │ map: 19.89 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BepWV7mh.js 14.79 kB │ map: 21.56 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DdkO51Og.js 14.83 kB │ map: 20.85 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Cv9koXgw.js 14.99 kB │ map: 20.29 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-B1yitclQ.js 15.11 kB │ map: 21.49 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BvAqAH-y.js 15.21 kB │ map: 19.64 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Colysff4.js 15.25 kB │ map: 21.66 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BdImnpbu.js 15.90 kB │ map: 18.87 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D7o27uSR.js 16.13 kB │ map: 23.40 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D82EKSYY.js 16.25 kB │ map: 23.82 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BbcW6ACK.js 16.28 kB │ map: 23.70 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DRBVVfo7.js 16.36 kB │ map: 23.16 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DO0LZyKx.js 16.77 kB │ map: 24.05 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CMUws-av.js 17.00 kB │ map: 23.92 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BkPM1oy1.js 17.11 kB │ map: 25.66 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DWedfzmr.js 17.17 kB │ map: 22.29 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CfQXZHmo.js 17.17 kB │ map: 22.30 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CkXjmgJE.js 17.17 kB │ map: 22.30 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BgEskmCb.js 17.76 kB │ map: 24.78 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C-HMFfM3.js 18.04 kB │ map: 25.48 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D5KoaKCx.js 18.66 kB │ map: 24.13 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BfHTSMKl.js 18.67 kB │ map: 24.17 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CyktbL80.js 18.67 kB │ map: 24.16 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-B0m2ddpp.js 18.68 kB │ map: 24.18 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Csfq5Kiy.js 18.68 kB │ map: 24.18 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Bty6elJm.js 18.88 kB │ map: 26.12 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-gcz8RCvz.js 19.22 kB │ map: 27.55 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-B0YXbBSa.js 19.66 kB │ map: 23.11 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-I3RK9BU8.js 19.85 kB │ map: 27.05 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BaML1QMV.js 20.11 kB │ map: 28.62 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Bc2xwClX.js 20.11 kB │ map: 28.62 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Dpen1YoG.js 20.19 kB │ map: 26.62 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CJc9bBzg.js 20.41 kB │ map: 23.53 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Bw305WKR.js 20.82 kB │ map: 28.03 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BzJJZx-M.js 21.11 kB │ map: 27.51 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BXkSAIEj.js 21.12 kB │ map: 27.54 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DQ46CBc_.js 21.13 kB │ map: 31.77 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-T7J2jLj3.js 21.42 kB │ map: 29.24 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-5i3qLPDT.js 21.51 kB │ map: 30.13 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BHrmToEH.js 21.79 kB │ map: 28.78 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-NleAzG8P.js 21.80 kB │ map: 28.81 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CnK8MTSM.js 21.80 kB │ map: 28.81 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Hhtzho9R.js 21.90 kB │ map: 29.52 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BFVdkX1U.js 21.90 kB │ map: 29.52 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-7i6GEmcB.js 21.90 kB │ map: 29.53 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-leinZj1a.js 21.90 kB │ map: 29.53 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DFR6f4Jn.js 21.90 kB │ map: 29.53 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Dcsh5twl.js 21.91 kB │ map: 29.54 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DWkon8Hs.js 22.51 kB │ map: 32.77 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Cg-RD9OK.js 22.62 kB │ map: 26.71 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-B9xm8XSJ.js 23.46 kB │ map: 27.96 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CtrldY6v.js 23.61 kB │ map: 33.41 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Df68jz8_.js 23.70 kB │ map: 33.09 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BrYkhBEK.js 24.00 kB │ map: 29.10 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-B47ASqzZ.js 24.04 kB │ map: 30.83 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DbjXokdF.js 24.08 kB │ map: 33.35 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CeAyd5Ju.js 24.31 kB │ map: 33.41 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-sYKpKAhk.js 24.33 kB │ map: 35.57 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk--Ycre7K_.js 25.33 kB │ map: 35.88 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-PoHY5YXO.js 25.34 kB │ map: 33.81 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BSCcYQo-.js 25.60 kB │ map: 35.74 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CnnmHF94.js 26.25 kB │ map: 36.29 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Ddv68eIx.js 26.77 kB │ map: 35.36 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DsOJ9woJ.js 26.93 kB │ map: 36.04 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-vbB5lEOJ.js 27.25 kB │ map: 38.35 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CylS5w8V.js 27.26 kB │ map: 38.66 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C-C_nZcE.js 27.46 kB │ map: 36.10 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DfEE3Bzs.js 28.33 kB │ map: 42.30 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C151Ov-r.js 28.93 kB │ map: 40.14 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C39BiMTA.js 28.96 kB │ map: 39.06 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BnD7D7ah.js 29.43 kB │ map: 41.19 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Co6uUVPk.js 29.61 kB │ map: 39.37 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BEDo0Tqx.js 31.12 kB │ map: 38.90 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DSnTR2wu.js 31.12 kB │ map: 40.57 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CS3Unz2-.js 33.54 kB │ map: 43.07 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DVMEJ2y_.js 33.83 kB │ map: 44.51 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CDuzWNpe.js 33.91 kB │ map: 37.62 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BP3HzMA6.js 35.20 kB │ map: 49.54 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Cu1ofpgu.js 35.42 kB │ map: 48.49 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DnULxvSX.js 35.47 kB │ map: 46.40 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-hegEt444.js 35.71 kB │ map: 45.35 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-pO14Kfwb.js 36.95 kB │ map: 156.31 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DpOm0zC4.js 37.47 kB │ map: 51.50 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-OpcvBqEo.js 39.18 kB │ map: 47.38 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C2tOF0e5.js 39.47 kB │ map: 48.58 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D_Q5rh1f.js 40.76 kB │ map: 53.02 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Yzrsuije.js 41.52 kB │ map: 56.55 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Df6bDoY_.js 41.53 kB │ map: 57.87 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BgfZh1f1.js 43.20 kB │ map: 60.76 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-85-TOEBH.js 43.84 kB │ map: 62.72 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-PEFJdsE-.js 45.17 kB │ map: 64.22 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-3mfGJbgy.js 45.96 kB │ map: 65.26 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-QX45V2Sx.js 46.12 kB │ map: 64.41 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BR7mELCv.js 46.89 kB │ map: 61.48 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-q-j0iyEw.js 46.89 kB │ map: 61.48 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Btyk0a-E.js 46.89 kB │ map: 61.48 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-brDaU2vB.js 46.89 kB │ map: 61.50 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-bCR0ucgS.js 48.13 kB │ map: 70.99 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DPfMkruS.js 49.07 kB │ map: 60.65 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DGztddWO.js 49.97 kB │ map: 68.11 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BgDCqdQA.js 53.79 kB │ map: 68.27 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C8M2exoo.js 53.79 kB │ map: 68.28 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BhOHFoWU.js 55.93 kB │ map: 77.66 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-RrBGtqGR.js 55.95 kB │ map: 77.63 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CiIkovmz.js 57.04 kB │ map: 74.19 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CXhxxCfG.js 57.29 kB │ map: 73.01 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BFfxhgS-.js 58.74 kB │ map: 81.56 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C0hk2d4L.js 62.49 kB │ map: 81.13 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-1DNp92w6.js 69.33 kB │ map: 94.25 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Du0Ki9n9.js 69.45 kB │ map: 96.16 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-B6aJPvgy.js 70.00 kB │ map: 95.26 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BIGW1oBm.js 72.16 kB │ map: 95.41 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CDx5xZoG.js 74.69 kB │ map: 100.73 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CUz34qUM.js 80.28 kB │ map: 97.31 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CHadp7IV.js 85.63 kB │ map: 120.19 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-fve9TYiY.js 86.01 kB │ map: 113.15 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CdggvHu8.js 87.11 kB │ map: 124.90 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D22FLkUw.js 87.19 kB │ map: 121.54 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BqYA7rlc.js 92.43 kB │ map: 106.21 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-B1dDrJ26.js 97.68 kB │ map: 131.88 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CLIx6TIR.js 103.84 kB │ map: 129.27 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DXmwc3jG.js 105.46 kB │ map: 129.67 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Cf4Oy6XI.js 111.05 kB │ map: 139.30 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Cmh6b_Ma.js 136.16 kB │ map: 176.75 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CLxacb5B.js 172.02 kB │ map: 218.55 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BMMyXqK5.js 174.86 kB │ map: 236.06 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-COt5Ahok.js 175.58 kB │ map: 236.76 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-g9-lgVsj.js 177.84 kB │ map: 239.01 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DlfHMoPT.js 181.11 kB │ map: 244.40 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Cno5XSCQ.js 183.86 kB │ map: 249.41 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-lXgVvXCa.js 262.43 kB │ map: 279.68 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CG6Dc4jp.js 622.38 kB │ map: 622.93 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CzjqYRUi.js 626.13 kB │ map: 816.15 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C9XAeP06.js 779.90 kB │ map: 789.83 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/mermaid-bundle.js 2,538.21 kB │ map: 9,621.20 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/index.js 3,236.37 kB │ map: 7,432.44 kB\\n@roo-code/vscode-webview:build: \\n@roo-code/vscode-webview:build: (!) Some chunks are larger than 500 kB after minification. Consider:\\n@roo-code/vscode-webview:build: - Using dynamic import() to code-split the application\\n@roo-code/vscode-webview:build: - Use build.rollupOptions.output.manualChunks to improve chunking: https://rollupjs.org/configuration-options/#output-manualchunks\\n@roo-code/vscode-webview:build: - Adjust chunk size limit for this warning via build.chunkSizeWarningLimit.\\n@roo-code/vscode-webview:build: ✓ built in 9.10s\\nroo-cline:bundle: cache miss, executing bca2304591f4eb39\\nroo-cline:bundle: \\nroo-cline:bundle: > roo-cline@3.20.3 bundle /roo/repos/Roo-Code/src\\nroo-cline:bundle: > node esbuild.mjs\\nroo-cline:bundle: \\nroo-cline:bundle: [esbuild-problem-matcher#onStart]\\nroo-cline:bundle: [copyPaths] Copied ../README.md to README.md\\nroo-cline:bundle: [copyPaths] Copied ../CHANGELOG.md to CHANGELOG.md\\nroo-cline:bundle: [copyPaths] Copied ../LICENSE to LICENSE\\nroo-cline:bundle: [copyPaths] Optional file not found: ../.env\\nroo-cline:bundle: [copyPaths] Copied 911 files from node_modules/vscode-material-icons/generated to assets/vscode-material-icons\\nroo-cline:bundle: [copyPaths] Copied 3 files from ../webview-ui/audio to webview-ui/audio\\nroo-cline:bundle: [copyWasms] Copied tiktoken WASMs to /roo/repos/Roo-Code/src/dist\\nroo-cline:bundle: [copyWasms] Copied tiktoken WASMs to /roo/repos/Roo-Code/src/dist/workers\\nroo-cline:bundle: [copyWasms] Copied tree-sitter.wasm to /roo/repos/Roo-Code/src/dist\\nroo-cline:bundle: [copyWasms] Copied 35 tree-sitter language wasms to /roo/repos/Roo-Code/src/dist\\nroo-cline:bundle: [copyLocales] Copied 72 locale files to /roo/repos/Roo-Code/src/dist/i18n/locales\\nroo-cline:bundle: [esbuild-problem-matcher#onEnd]\\n\\n Tasks: 4 successful, 4 total\\nCached: 0 cached, 4 total\\n Time: 16.711s \\n\\n\\n> roo-cline@3.20.3 test\\n> jest -w=40% && vitest run --testPathPattern=network-timeout-fix.test.ts\\n\\n\\nFound 130 test suites\\n..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................***********..................*FFFF.FFF.....................................................*........................................................................................................................................................................................................................................................................................................................................................................................................................................*****......................................................................................................................................................................................................................................FFF......................................................................**.................\\nRan 1389 tests in 15.515 s\\n 1359 passing 10 failing 20 pending\\n ● RemoteConfigLoader › loadAllItems › should fetch and combine modes and MCPs from API\\n\\n TypeError: vscode.workspace.getConfiguration is not a function\\n\\n 27 | \\tasync loadAllItems(): Promise<MarketplaceItem[]> {\\n 28 | \\t\\t// Check if marketplace is disabled via user setting\\n > 29 | \\t\\tconst config = vscode.workspace.getConfiguration(\\\"roo-cline\\\")\\n | \\t\\t ^\\n 30 | \\t\\tconst isMarketplaceDisabled = config.get<boolean>(\\\"disableMarketplace\\\", false)\\n 31 | \\t\\t\\n 32 | \\t\\tif (isMarketplaceDisabled) {\\n\\n at RemoteConfigLoader.loadAllItems (services/marketplace/RemoteConfigLoader.ts:29:35)\\n at Object.<anonymous> (services/marketplace/__tests__/RemoteConfigLoader.test.ts:49:31)\\n\\n ● RemoteConfigLoader › loadAllItems › should use cache on subsequent calls\\n\\n TypeError: vscode.workspace.getConfiguration is not a function\\n\\n 27 | \\tasync loadAllItems(): Promise<MarketplaceItem[]> {\\n 28 | \\t\\t// Check if marketplace is disabled via user setting\\n > 29 | \\t\\tconst config = vscode.workspace.getConfiguration(\\\"roo-cline\\\")\\n | \\t\\t ^\\n 30 | \\t\\tconst isMarketplaceDisabled = config.get<boolean>(\\\"disableMarketplace\\\", false)\\n 31 | \\t\\t\\n 32 | \\t\\tif (isMarketplaceDisabled) {\\n\\n at RemoteConfigLoader.loadAllItems (services/marketplace/RemoteConfigLoader.ts:29:35)\\n at Object.<anonymous> (services/marketplace/__tests__/RemoteConfigLoader.test.ts:116:32)\\n\\n ● RemoteConfigLoader › loadAllItems › should retry on network failures\\n\\n TypeError: vscode.workspace.getConfiguration is not a function\\n\\n 27 | \\tasync loadAllItems(): Promise<MarketplaceItem[]> {\\n 28 | \\t\\t// Check if marketplace is disabled via user setting\\n > 29 | \\t\\tconst config = vscode.workspace.getConfiguration(\\\"roo-cline\\\")\\n | \\t\\t ^\\n 30 | \\t\\tconst isMarketplaceDisabled = config.get<boolean>(\\\"disableMarketplace\\\", false)\\n 31 | \\t\\t\\n 32 | \\t\\tif (isMarketplaceDisabled) {\\n\\n at RemoteConfigLoader.loadAllItems (services/marketplace/RemoteConfigLoader.ts:29:35)\\n at Object.<anonymous> (services/marketplace/__tests__/RemoteConfigLoader.test.ts:151:31)\\n\\n ● RemoteConfigLoader › loadAllItems › should throw error after max retries\\n\\n expect(received).rejects.toThrow(expected)\\n\\n Expected substring: \\\"Persistent network error\\\"\\n Received message: \\\"vscode.workspace.getConfiguration is not a function\\\"\\n\\n 27 | \\tasync loadAllItems(): Promise<MarketplaceItem[]> {\\n 28 | \\t\\t// Check if marketplace is disabled via user setting\\n > 29 | \\t\\tconst config = vscode.workspace.getConfiguration(\\\"roo-cline\\\")\\n | \\t\\t ^\\n 30 | \\t\\tconst isMarketplaceDisabled = config.get<boolean>(\\\"disableMarketplace\\\", false)\\n 31 | \\t\\t\\n 32 | \\t\\tif (isMarketplaceDisabled) {\\n\\n at RemoteConfigLoader.loadAllItems (services/marketplace/RemoteConfigLoader.ts:29:35)\\n at Object.<anonymous> (services/marketplace/__tests__/RemoteConfigLoader.test.ts:162:24)\\n at Object.toThrow (../node_modules/.pnpm/expect@29.7.0/node_modules/expect/build/index.js:218:22)\\n at Object.<anonymous> (services/marketplace/__tests__/RemoteConfigLoader.test.ts:162:48)\\n\\n ● RemoteConfigLoader › getItem › should find specific item by id and type\\n\\n TypeError: vscode.workspace.getConfiguration is not a function\\n\\n 27 | \\tasync loadAllItems(): Promise<MarketplaceItem[]> {\\n 28 | \\t\\t// Check if marketplace is disabled via user setting\\n > 29 | \\t\\tconst config = vscode.workspace.getConfiguration(\\\"roo-cline\\\")\\n | \\t\\t ^\\n 30 | \\t\\tconst isMarketplaceDisabled = config.get<boolean>(\\\"disableMarketplace\\\", false)\\n 31 | \\t\\t\\n 32 | \\t\\tif (isMarketplaceDisabled) {\\n\\n at RemoteConfigLoader.loadAllItems (services/marketplace/RemoteConfigLoader.ts:29:35)\\n at RemoteConfigLoader.getItem (services/marketplace/RemoteConfigLoader.ts:120:28)\\n at Object.<anonymous> (services/marketplace/__tests__/RemoteConfigLoader.test.ts:226:34)\\n\\n ● RemoteConfigLoader › clearCache › should clear cache and force fresh API calls\\n\\n TypeError: vscode.workspace.getConfiguration is not a function\\n\\n 27 | \\tasync loadAllItems(): Promise<MarketplaceItem[]> {\\n 28 | \\t\\t// Check if marketplace is disabled via user setting\\n > 29 | \\t\\tconst config = vscode.workspace.getConfiguration(\\\"roo-cline\\\")\\n | \\t\\t ^\\n 30 | \\t\\tconst isMarketplaceDisabled = config.get<boolean>(\\\"disableMarketplace\\\", false)\\n 31 | \\t\\t\\n 32 | \\t\\tif (isMarketplaceDisabled) {\\n\\n at RemoteConfigLoader.loadAllItems (services/marketplace/RemoteConfigLoader.ts:29:35)\\n at Object.<anonymous> (services/marketplace/__tests__/RemoteConfigLoader.test.ts:272:17)\\n\\n ● RemoteConfigLoader › cache expiration › should expire cache after 5 minutes\\n\\n TypeError: vscode.workspace.getConfiguration is not a function\\n\\n 27 | \\tasync loadAllItems(): Promise<MarketplaceItem[]> {\\n 28 | \\t\\t// Check if marketplace is disabled via user setting\\n > 29 | \\t\\tconst config = vscode.workspace.getConfiguration(\\\"roo-cline\\\")\\n | \\t\\t ^\\n 30 | \\t\\tconst isMarketplaceDisabled = config.get<boolean>(\\\"disableMarketplace\\\", false)\\n 31 | \\t\\t\\n 32 | \\t\\tif (isMarketplaceDisabled) {\\n\\n at RemoteConfigLoader.loadAllItems (services/marketplace/RemoteConfigLoader.ts:29:35)\\n at Object.<anonymous> (services/marketplace/__tests__/RemoteConfigLoader.test.ts:315:17)\\n\\n ● Marketplace Setting Check › should skip API calls when marketplace is disabled\\n\\n TypeError: vscode.workspace.getConfiguration is not a function\\n\\n 1468 | \\t\\t\\t// Check if marketplace is enabled before making API calls\\n 1469 | \\t\\t\\tconst { experiments } = await provider.getState()\\n > 1470 | \\t\\t\\tconst config = vscode.workspace.getConfiguration(\\\"roo-cline\\\")\\n | \\t\\t\\t ^\\n 1471 | \\t\\t\\tconst isMarketplaceDisabled = config.get<boolean>(\\\"disableMarketplace\\\", false)\\n 1472 | \\t\\t\\t\\n 1473 | \\t\\t\\tif (!experiments.marketplace || isMarketplaceDisabled) {\\n\\n at webviewMessageHandler (core/webview/webviewMessageHandler.ts:1470:36)\\n at Object.<anonymous> (services/marketplace/__tests__/marketplace-setting-check.test.ts:30:3)\\n\\n ● Marketplace Setting Check › should allow API calls when marketplace is enabled\\n\\n TypeError: vscode.workspace.getConfiguration is not a function\\n\\n 1468 | \\t\\t\\t// Check if marketplace is enabled before making API calls\\n 1469 | \\t\\t\\tconst { experiments } = await provider.getState()\\n > 1470 | \\t\\t\\tconst config = vscode.workspace.getConfiguration(\\\"roo-cline\\\")\\n | \\t\\t\\t ^\\n 1471 | \\t\\t\\tconst isMarketplaceDisabled = config.get<boolean>(\\\"disableMarketplace\\\", false)\\n 1472 | \\t\\t\\t\\n 1473 | \\t\\t\\tif (!experiments.marketplace || isMarketplaceDisabled) {\\n\\n at webviewMessageHandler (core/webview/webviewMessageHandler.ts:1470:36)\\n at Object.<anonymous> (services/marketplace/__tests__/marketplace-setting-check.test.ts:48:3)\\n\\n ● Marketplace Setting Check › should skip installation when marketplace is disabled\\n\\n TypeError: vscode.workspace.getConfiguration is not a function\\n\\n 1495 | \\t\\t\\t// Check if marketplace is enabled before installing\\n 1496 | \\t\\t\\tconst { experiments } = await provider.getState()\\n > 1497 | \\t\\t\\tconst config = vscode.workspace.getConfiguration(\\\"roo-cline\\\")\\n | \\t\\t\\t ^\\n 1498 | \\t\\t\\tconst isMarketplaceDisabled = config.get<boolean>(\\\"disableMarketplace\\\", false)\\n 1499 | \\t\\t\\t\\n 1500 | \\t\\t\\tif (!experiments.marketplace || isMarketplaceDisabled) {\\n\\n at webviewMessageHandler (core/webview/webviewMessageHandler.ts:1497:36)\\n at Object.<anonymous> (services/marketplace/__tests__/marketplace-setting-check.test.ts:83:3)\\n\\nnpm notice\\nnpm notice New major version of npm available! 10.8.2 -> 11.4.2\\nnpm notice Changelog: https://github.com/npm/cli/releases/tag/v11.4.2\\nnpm notice To update run: npm install -g npm@11.4.2\\nnpm notice\\n\\n\\nLoading...\"}"
|
||
}
|
||
[2025-06-18T08:47:31.346Z] {
|
||
"ts": 1750236450912,
|
||
"type": "say",
|
||
"say": "text",
|
||
"text": "I see the issue. The existing tests are failing because they don't have the proper vscode mocks for the new configuration calls I added. Let me fix the existing tests by updating their mocks:",
|
||
"partial": false
|
||
}
|
||
[2025-06-18T08:47:32.194Z] {
|
||
"ts": 1750236451346,
|
||
"type": "ask",
|
||
"ask": "tool",
|
||
"text": "{\"tool\":\"readFile\",\"path\":\"src/services/marketplace/__tests__/RemoteConfigLoader.test.ts\",\"isOutsideWorkspace\":false,\"content\":\"/roo/repos/Roo-Code/src/services/marketplace/__tests__/RemoteConfigLoader.test.ts\",\"reason\":\"\"}",
|
||
"partial": false
|
||
}
|
||
[2025-06-18T08:47:32.444Z] {
|
||
"ts": 1750236452432,
|
||
"type": "say",
|
||
"say": "api_req_started",
|
||
"text": "{\"request\":\"[read_file for 'src/services/marketplace/__tests__/RemoteConfigLoader.test.ts'. Reading multiple files at once is more efficient for the LLM. If other files are relevant to your current task, please read them simultaneously.] Result:\\n\\n<files>\\n<file><path>src/services/marketplace/__tests__/RemoteConfigLoader.test.ts</path>\\n<content lines=\\\"1-333\\\">\\n 1 | import axios from \\\"axios\\\"\\n 2 | import { RemoteConfigLoader } from \\\"../RemoteConfigLoader\\\"\\n 3 | import type { MarketplaceItemType } from \\\"@roo-code/types\\\"\\n 4 | \\n 5 | // Mock axios\\n 6 | jest.mock(\\\"axios\\\")\\n 7 | const mockedAxios = axios as jest.Mocked<typeof axios>\\n 8 | \\n 9 | // Mock the cloud config\\n 10 | jest.mock(\\\"@roo-code/cloud\\\", () => ({\\n 11 | \\tgetRooCodeApiUrl: () => \\\"https://test.api.com\\\",\\n 12 | }))\\n 13 | \\n 14 | describe(\\\"RemoteConfigLoader\\\", () => {\\n 15 | \\tlet loader: RemoteConfigLoader\\n 16 | \\n 17 | \\tbeforeEach(() => {\\n 18 | \\t\\tloader = new RemoteConfigLoader()\\n 19 | \\t\\tjest.clearAllMocks()\\n 20 | \\t\\t// Clear any existing cache\\n 21 | \\t\\tloader.clearCache()\\n 22 | \\t})\\n 23 | \\n 24 | \\tdescribe(\\\"loadAllItems\\\", () => {\\n 25 | \\t\\tit(\\\"should fetch and combine modes and MCPs from API\\\", async () => {\\n 26 | \\t\\t\\tconst mockModesYaml = `items:\\n 27 | - id: \\\"test-mode\\\"\\n 28 | name: \\\"Test Mode\\\"\\n 29 | description: \\\"A test mode\\\"\\n 30 | content: \\\"customModes:\\\\\\\\n - slug: test\\\\\\\\n name: Test\\\"`\\n 31 | \\n 32 | \\t\\t\\tconst mockMcpsYaml = `items:\\n 33 | - id: \\\"test-mcp\\\"\\n 34 | name: \\\"Test MCP\\\"\\n 35 | description: \\\"A test MCP\\\"\\n 36 | url: \\\"https://github.com/test/test-mcp\\\"\\n 37 | content: '{\\\"command\\\": \\\"test\\\"}'`\\n 38 | \\n 39 | \\t\\t\\tmockedAxios.get.mockImplementation((url) => {\\n 40 | \\t\\t\\t\\tif (url.includes(\\\"/modes\\\")) {\\n 41 | \\t\\t\\t\\t\\treturn Promise.resolve({ data: mockModesYaml })\\n 42 | \\t\\t\\t\\t}\\n 43 | \\t\\t\\t\\tif (url.includes(\\\"/mcps\\\")) {\\n 44 | \\t\\t\\t\\t\\treturn Promise.resolve({ data: mockMcpsYaml })\\n 45 | \\t\\t\\t\\t}\\n 46 | \\t\\t\\t\\treturn Promise.reject(new Error(\\\"Unknown URL\\\"))\\n 47 | \\t\\t\\t})\\n 48 | \\n 49 | \\t\\t\\tconst items = await loader.loadAllItems()\\n 50 | \\n 51 | \\t\\t\\texpect(mockedAxios.get).toHaveBeenCalledTimes(2)\\n 52 | \\t\\t\\texpect(mockedAxios.get).toHaveBeenCalledWith(\\n 53 | \\t\\t\\t\\t\\\"https://test.api.com/api/marketplace/modes\\\",\\n 54 | \\t\\t\\t\\texpect.objectContaining({\\n 55 | \\t\\t\\t\\t\\ttimeout: 10000,\\n 56 | \\t\\t\\t\\t\\theaders: {\\n 57 | \\t\\t\\t\\t\\t\\tAccept: \\\"application/json\\\",\\n 58 | \\t\\t\\t\\t\\t\\t\\\"Content-Type\\\": \\\"application/json\\\",\\n 59 | \\t\\t\\t\\t\\t},\\n 60 | \\t\\t\\t\\t}),\\n 61 | \\t\\t\\t)\\n 62 | \\t\\t\\texpect(mockedAxios.get).toHaveBeenCalledWith(\\n 63 | \\t\\t\\t\\t\\\"https://test.api.com/api/marketplace/mcps\\\",\\n 64 | \\t\\t\\t\\texpect.objectContaining({\\n 65 | \\t\\t\\t\\t\\ttimeout: 10000,\\n 66 | \\t\\t\\t\\t\\theaders: {\\n 67 | \\t\\t\\t\\t\\t\\tAccept: \\\"application/json\\\",\\n 68 | \\t\\t\\t\\t\\t\\t\\\"Content-Type\\\": \\\"application/json\\\",\\n 69 | \\t\\t\\t\\t\\t},\\n 70 | \\t\\t\\t\\t}),\\n 71 | \\t\\t\\t)\\n 72 | \\n 73 | \\t\\t\\texpect(items).toHaveLength(2)\\n 74 | \\t\\t\\texpect(items[0]).toEqual({\\n 75 | \\t\\t\\t\\ttype: \\\"mode\\\",\\n 76 | \\t\\t\\t\\tid: \\\"test-mode\\\",\\n 77 | \\t\\t\\t\\tname: \\\"Test Mode\\\",\\n 78 | \\t\\t\\t\\tdescription: \\\"A test mode\\\",\\n 79 | \\t\\t\\t\\tcontent: \\\"customModes:\\\\n - slug: test\\\\n name: Test\\\",\\n 80 | \\t\\t\\t})\\n 81 | \\t\\t\\texpect(items[1]).toEqual({\\n 82 | \\t\\t\\t\\ttype: \\\"mcp\\\",\\n 83 | \\t\\t\\t\\tid: \\\"test-mcp\\\",\\n 84 | \\t\\t\\t\\tname: \\\"Test MCP\\\",\\n 85 | \\t\\t\\t\\tdescription: \\\"A test MCP\\\",\\n 86 | \\t\\t\\t\\turl: \\\"https://github.com/test/test-mcp\\\",\\n 87 | \\t\\t\\t\\tcontent: '{\\\"command\\\": \\\"test\\\"}',\\n 88 | \\t\\t\\t})\\n 89 | \\t\\t})\\n 90 | \\n 91 | \\t\\tit(\\\"should use cache on subsequent calls\\\", async () => {\\n 92 | \\t\\t\\tconst mockModesYaml = `items:\\n 93 | - id: \\\"test-mode\\\"\\n 94 | name: \\\"Test Mode\\\"\\n 95 | description: \\\"A test mode\\\"\\n 96 | content: \\\"test content\\\"`\\n 97 | \\n 98 | \\t\\t\\tconst mockMcpsYaml = `items:\\n 99 | - id: \\\"test-mcp\\\"\\n100 | name: \\\"Test MCP\\\"\\n101 | description: \\\"A test MCP\\\"\\n102 | url: \\\"https://github.com/test/test-mcp\\\"\\n103 | content: \\\"test content\\\"`\\n104 | \\n105 | \\t\\t\\tmockedAxios.get.mockImplementation((url) => {\\n106 | \\t\\t\\t\\tif (url.includes(\\\"/modes\\\")) {\\n107 | \\t\\t\\t\\t\\treturn Promise.resolve({ data: mockModesYaml })\\n108 | \\t\\t\\t\\t}\\n109 | \\t\\t\\t\\tif (url.includes(\\\"/mcps\\\")) {\\n110 | \\t\\t\\t\\t\\treturn Promise.resolve({ data: mockMcpsYaml })\\n111 | \\t\\t\\t\\t}\\n112 | \\t\\t\\t\\treturn Promise.reject(new Error(\\\"Unknown URL\\\"))\\n113 | \\t\\t\\t})\\n114 | \\n115 | \\t\\t\\t// First call - should hit API\\n116 | \\t\\t\\tconst items1 = await loader.loadAllItems()\\n117 | \\t\\t\\texpect(mockedAxios.get).toHaveBeenCalledTimes(2)\\n118 | \\n119 | \\t\\t\\t// Second call - should use cache\\n120 | \\t\\t\\tconst items2 = await loader.loadAllItems()\\n121 | \\t\\t\\texpect(mockedAxios.get).toHaveBeenCalledTimes(2) // Still 2, not 4\\n122 | \\n123 | \\t\\t\\texpect(items1).toEqual(items2)\\n124 | \\t\\t})\\n125 | \\n126 | \\t\\tit(\\\"should retry on network failures\\\", async () => {\\n127 | \\t\\t\\tconst mockModesYaml = `items:\\n128 | - id: \\\"test-mode\\\"\\n129 | name: \\\"Test Mode\\\"\\n130 | description: \\\"A test mode\\\"\\n131 | content: \\\"test content\\\"`\\n132 | \\n133 | \\t\\t\\tconst mockMcpsYaml = `items: []`\\n134 | \\n135 | \\t\\t\\t// Mock modes endpoint to fail twice then succeed\\n136 | \\t\\t\\tlet modesCallCount = 0\\n137 | \\t\\t\\tmockedAxios.get.mockImplementation((url) => {\\n138 | \\t\\t\\t\\tif (url.includes(\\\"/modes\\\")) {\\n139 | \\t\\t\\t\\t\\tmodesCallCount++\\n140 | \\t\\t\\t\\t\\tif (modesCallCount <= 2) {\\n141 | \\t\\t\\t\\t\\t\\treturn Promise.reject(new Error(\\\"Network error\\\"))\\n142 | \\t\\t\\t\\t\\t}\\n143 | \\t\\t\\t\\t\\treturn Promise.resolve({ data: mockModesYaml })\\n144 | \\t\\t\\t\\t}\\n145 | \\t\\t\\t\\tif (url.includes(\\\"/mcps\\\")) {\\n146 | \\t\\t\\t\\t\\treturn Promise.resolve({ data: mockMcpsYaml })\\n147 | \\t\\t\\t\\t}\\n148 | \\t\\t\\t\\treturn Promise.reject(new Error(\\\"Unknown URL\\\"))\\n149 | \\t\\t\\t})\\n150 | \\n151 | \\t\\t\\tconst items = await loader.loadAllItems()\\n152 | \\n153 | \\t\\t\\t// Should have retried modes endpoint 3 times (2 failures + 1 success)\\n154 | \\t\\t\\texpect(modesCallCount).toBe(3)\\n155 | \\t\\t\\texpect(items).toHaveLength(1)\\n156 | \\t\\t\\texpect(items[0].type).toBe(\\\"mode\\\")\\n157 | \\t\\t})\\n158 | \\n159 | \\t\\tit(\\\"should throw error after max retries\\\", async () => {\\n160 | \\t\\t\\tmockedAxios.get.mockRejectedValue(new Error(\\\"Persistent network error\\\"))\\n161 | \\n162 | \\t\\t\\tawait expect(loader.loadAllItems()).rejects.toThrow(\\\"Persistent network error\\\")\\n163 | \\n164 | \\t\\t\\t// Both endpoints will be called with retries since Promise.all starts both promises\\n165 | \\t\\t\\t// Each endpoint retries 3 times, but due to Promise.all behavior, one might fail faster\\n166 | \\t\\t\\texpect(mockedAxios.get).toHaveBeenCalledWith(\\n167 | \\t\\t\\t\\texpect.stringContaining(\\\"/api/marketplace/\\\"),\\n168 | \\t\\t\\t\\texpect.any(Object),\\n169 | \\t\\t\\t)\\n170 | \\t\\t\\t// Verify we got at least some retry attempts (should be at least 2 calls)\\n171 | \\t\\t\\texpect(mockedAxios.get.mock.calls.length).toBeGreaterThanOrEqual(2)\\n172 | \\t\\t})\\n173 | \\n174 | \\t\\tit(\\\"should handle invalid data gracefully\\\", async () => {\\n175 | \\t\\t\\tconst invalidModesYaml = `items:\\n176 | - id: \\\"invalid-mode\\\"\\n177 | # Missing required fields like name and description`\\n178 | \\n179 | \\t\\t\\tconst validMcpsYaml = `items:\\n180 | - id: \\\"valid-mcp\\\"\\n181 | name: \\\"Valid MCP\\\"\\n182 | description: \\\"A valid MCP\\\"\\n183 | url: \\\"https://github.com/test/test-mcp\\\"\\n184 | content: \\\"test content\\\"`\\n185 | \\n186 | \\t\\t\\tmockedAxios.get.mockImplementation((url) => {\\n187 | \\t\\t\\t\\tif (url.includes(\\\"/modes\\\")) {\\n188 | \\t\\t\\t\\t\\treturn Promise.resolve({ data: invalidModesYaml })\\n189 | \\t\\t\\t\\t}\\n190 | \\t\\t\\t\\tif (url.includes(\\\"/mcps\\\")) {\\n191 | \\t\\t\\t\\t\\treturn Promise.resolve({ data: validMcpsYaml })\\n192 | \\t\\t\\t\\t}\\n193 | \\t\\t\\t\\treturn Promise.reject(new Error(\\\"Unknown URL\\\"))\\n194 | \\t\\t\\t})\\n195 | \\n196 | \\t\\t\\t// Should throw validation error for invalid modes\\n197 | \\t\\t\\tawait expect(loader.loadAllItems()).rejects.toThrow()\\n198 | \\t\\t})\\n199 | \\t})\\n200 | \\n201 | \\tdescribe(\\\"getItem\\\", () => {\\n202 | \\t\\tit(\\\"should find specific item by id and type\\\", async () => {\\n203 | \\t\\t\\tconst mockModesYaml = `items:\\n204 | - id: \\\"target-mode\\\"\\n205 | name: \\\"Target Mode\\\"\\n206 | description: \\\"The mode we want\\\"\\n207 | content: \\\"test content\\\"`\\n208 | \\n209 | \\t\\t\\tconst mockMcpsYaml = `items:\\n210 | - id: \\\"target-mcp\\\"\\n211 | name: \\\"Target MCP\\\"\\n212 | description: \\\"The MCP we want\\\"\\n213 | url: \\\"https://github.com/test/test-mcp\\\"\\n214 | content: \\\"test content\\\"`\\n215 | \\n216 | \\t\\t\\tmockedAxios.get.mockImplementation((url) => {\\n217 | \\t\\t\\t\\tif (url.includes(\\\"/modes\\\")) {\\n218 | \\t\\t\\t\\t\\treturn Promise.resolve({ data: mockModesYaml })\\n219 | \\t\\t\\t\\t}\\n220 | \\t\\t\\t\\tif (url.includes(\\\"/mcps\\\")) {\\n221 | \\t\\t\\t\\t\\treturn Promise.resolve({ data: mockMcpsYaml })\\n222 | \\t\\t\\t\\t}\\n223 | \\t\\t\\t\\treturn Promise.reject(new Error(\\\"Unknown URL\\\"))\\n224 | \\t\\t\\t})\\n225 | \\n226 | \\t\\t\\tconst modeItem = await loader.getItem(\\\"target-mode\\\", \\\"mode\\\" as MarketplaceItemType)\\n227 | \\t\\t\\tconst mcpItem = await loader.getItem(\\\"target-mcp\\\", \\\"mcp\\\" as MarketplaceItemType)\\n228 | \\t\\t\\tconst notFound = await loader.getItem(\\\"nonexistent\\\", \\\"mode\\\" as MarketplaceItemType)\\n229 | \\n230 | \\t\\t\\texpect(modeItem).toEqual({\\n231 | \\t\\t\\t\\ttype: \\\"mode\\\",\\n232 | \\t\\t\\t\\tid: \\\"target-mode\\\",\\n233 | \\t\\t\\t\\tname: \\\"Target Mode\\\",\\n234 | \\t\\t\\t\\tdescription: \\\"The mode we want\\\",\\n235 | \\t\\t\\t\\tcontent: \\\"test content\\\",\\n236 | \\t\\t\\t})\\n237 | \\n238 | \\t\\t\\texpect(mcpItem).toEqual({\\n239 | \\t\\t\\t\\ttype: \\\"mcp\\\",\\n240 | \\t\\t\\t\\tid: \\\"target-mcp\\\",\\n241 | \\t\\t\\t\\tname: \\\"Target MCP\\\",\\n242 | \\t\\t\\t\\tdescription: \\\"The MCP we want\\\",\\n243 | \\t\\t\\t\\turl: \\\"https://github.com/test/test-mcp\\\",\\n244 | \\t\\t\\t\\tcontent: \\\"test content\\\",\\n245 | \\t\\t\\t})\\n246 | \\n247 | \\t\\t\\texpect(notFound).toBeNull()\\n248 | \\t\\t})\\n249 | \\t})\\n250 | \\n251 | \\tdescribe(\\\"clearCache\\\", () => {\\n252 | \\t\\tit(\\\"should clear cache and force fresh API calls\\\", async () => {\\n253 | \\t\\t\\tconst mockModesYaml = `items:\\n254 | - id: \\\"test-mode\\\"\\n255 | name: \\\"Test Mode\\\"\\n256 | description: \\\"A test mode\\\"\\n257 | content: \\\"test content\\\"`\\n258 | \\n259 | \\t\\t\\tconst mockMcpsYaml = `items: []`\\n260 | \\n261 | \\t\\t\\tmockedAxios.get.mockImplementation((url) => {\\n262 | \\t\\t\\t\\tif (url.includes(\\\"/modes\\\")) {\\n263 | \\t\\t\\t\\t\\treturn Promise.resolve({ data: mockModesYaml })\\n264 | \\t\\t\\t\\t}\\n265 | \\t\\t\\t\\tif (url.includes(\\\"/mcps\\\")) {\\n266 | \\t\\t\\t\\t\\treturn Promise.resolve({ data: mockMcpsYaml })\\n267 | \\t\\t\\t\\t}\\n268 | \\t\\t\\t\\treturn Promise.reject(new Error(\\\"Unknown URL\\\"))\\n269 | \\t\\t\\t})\\n270 | \\n271 | \\t\\t\\t// First call\\n272 | \\t\\t\\tawait loader.loadAllItems()\\n273 | \\t\\t\\texpect(mockedAxios.get).toHaveBeenCalledTimes(2)\\n274 | \\n275 | \\t\\t\\t// Second call - should use cache\\n276 | \\t\\t\\tawait loader.loadAllItems()\\n277 | \\t\\t\\texpect(mockedAxios.get).toHaveBeenCalledTimes(2)\\n278 | \\n279 | \\t\\t\\t// Clear cache\\n280 | \\t\\t\\tloader.clearCache()\\n281 | \\n282 | \\t\\t\\t// Third call - should hit API again\\n283 | \\t\\t\\tawait loader.loadAllItems()\\n284 | \\t\\t\\texpect(mockedAxios.get).toHaveBeenCalledTimes(4)\\n285 | \\t\\t})\\n286 | \\t})\\n287 | \\n288 | \\tdescribe(\\\"cache expiration\\\", () => {\\n289 | \\t\\tit(\\\"should expire cache after 5 minutes\\\", async () => {\\n290 | \\t\\t\\tconst mockModesYaml = `items:\\n291 | - id: \\\"test-mode\\\"\\n292 | name: \\\"Test Mode\\\"\\n293 | description: \\\"A test mode\\\"\\n294 | content: \\\"test content\\\"`\\n295 | \\n296 | \\t\\t\\tconst mockMcpsYaml = `items: []`\\n297 | \\n298 | \\t\\t\\tmockedAxios.get.mockImplementation((url) => {\\n299 | \\t\\t\\t\\tif (url.includes(\\\"/modes\\\")) {\\n300 | \\t\\t\\t\\t\\treturn Promise.resolve({ data: mockModesYaml })\\n301 | \\t\\t\\t\\t}\\n302 | \\t\\t\\t\\tif (url.includes(\\\"/mcps\\\")) {\\n303 | \\t\\t\\t\\t\\treturn Promise.resolve({ data: mockMcpsYaml })\\n304 | \\t\\t\\t\\t}\\n305 | \\t\\t\\t\\treturn Promise.reject(new Error(\\\"Unknown URL\\\"))\\n306 | \\t\\t\\t})\\n307 | \\n308 | \\t\\t\\t// Mock Date.now to control time\\n309 | \\t\\t\\tconst originalDateNow = Date.now\\n310 | \\t\\t\\tlet currentTime = 1000000\\n311 | \\n312 | \\t\\t\\tDate.now = jest.fn(() => currentTime)\\n313 | \\n314 | \\t\\t\\t// First call\\n315 | \\t\\t\\tawait loader.loadAllItems()\\n316 | \\t\\t\\texpect(mockedAxios.get).toHaveBeenCalledTimes(2)\\n317 | \\n318 | \\t\\t\\t// Second call immediately - should use cache\\n319 | \\t\\t\\tawait loader.loadAllItems()\\n320 | \\t\\t\\texpect(mockedAxios.get).toHaveBeenCalledTimes(2)\\n321 | \\n322 | \\t\\t\\t// Advance time by 6 minutes (360,000 ms)\\n323 | \\t\\t\\tcurrentTime += 6 * 60 * 1000\\n324 | \\n325 | \\t\\t\\t// Third call - cache should be expired\\n326 | \\t\\t\\tawait loader.loadAllItems()\\n327 | \\t\\t\\texpect(mockedAxios.get).toHaveBeenCalledTimes(4)\\n328 | \\n329 | \\t\\t\\t// Restore original Date.now\\n330 | \\t\\t\\tDate.now = originalDateNow\\n331 | \\t\\t})\\n332 | \\t})\\n333 | })\\n</content>\\n</file>\\n</files>\\n\\nLoading...\"}"
|
||
}
|
||
[2025-06-18T08:48:04.966Z] {
|
||
"ts": 1750236482508,
|
||
"type": "say",
|
||
"say": "text",
|
||
"text": "I need to add the vscode mock to the existing test file. Let me update it:",
|
||
"partial": false
|
||
}
|
||
[2025-06-18T08:49:21.342Z] {
|
||
"ts": 1750236488347,
|
||
"type": "ask",
|
||
"ask": "tool",
|
||
"text": "{\"tool\":\"appliedDiff\",\"path\":\"src/services/marketplace/__tests__/RemoteConfigLoader.test.ts\",\"diff\":\"<<<<<<< SEARCH\\n:start_line:1\\n-------\\nimport axios from \\\"axios\\\"\\nimport { RemoteConfigLoader } from \\\"../RemoteConfigLoader\\\"\\nimport type { MarketplaceItemType } from \\\"@roo-code/types\\\"\\n\\n// Mock axios\\njest.mock(\\\"axios\\\")\\nconst mockedAxios = axios as jest.Mocked<typeof axios>\\n\\n// Mock the cloud config\\njest.mock(\\\"@roo-code/cloud\\\", () => ({\\n\\tgetRooCodeApiUrl: () => \\\"https://test.api.com\\\",\\n}))\\n=======\\nimport axios from \\\"axios\\\"\\nimport { RemoteConfigLoader } from \\\"../RemoteConfigLoader\\\"\\nimport type { MarketplaceItemType } from \\\"@roo-code/types\\\"\\n\\n// Mock axios\\njest.mock(\\\"axios\\\")\\nconst mockedAxios = axios as jest.Mocked<typeof axios>\\n\\n// Mock vscode\\njest.mock(\\\"vscode\\\", () => ({\\n\\tworkspace: {\\n\\t\\tgetConfiguration: jest.fn(() => ({\\n\\t\\t\\tget: jest.fn((key: string, defaultValue?: any) => {\\n\\t\\t\\t\\tif (key === \\\"disableMarketplace\\\") return false\\n\\t\\t\\t\\tif (key === \\\"marketplaceTimeout\\\") return 10000\\n\\t\\t\\t\\treturn defaultValue\\n\\t\\t\\t}),\\n\\t\\t})),\\n\\t},\\n}))\\n\\n// Mock the cloud config\\njest.mock(\\\"@roo-code/cloud\\\", () => ({\\n\\tgetRooCodeApiUrl: () => \\\"https://test.api.com\\\",\\n}))\\n>>>>>>> REPLACE\"}",
|
||
"partial": false,
|
||
"isProtected": false,
|
||
"progressStatus": {
|
||
"icon": "diff-multiple",
|
||
"text": "1"
|
||
}
|
||
}
|
||
[2025-06-18T08:49:23.243Z] {
|
||
"ts": 1750236563234,
|
||
"type": "say",
|
||
"say": "api_req_started",
|
||
"text": "{\"request\":\"[apply_diff for 'src/services/marketplace/__tests__/RemoteConfigLoader.test.ts'] Result:\\n\\n<file_write_result>\\n<path>src/services/marketplace/__tests__/RemoteConfigLoader.test.ts</path>\\n<operation>modified</operation>\\n<notice>\\n<i>You do not need to re-read the file, as you have seen all changes</i>\\n<i>Proceed with the task using these changes as the new baseline.</i>\\n</notice>\\n</file_write_result>\\n\\n\\nLoading...\"}"
|
||
}
|
||
[2025-06-18T08:49:28.149Z] {
|
||
"ts": 1750236568119,
|
||
"type": "say",
|
||
"say": "text",
|
||
"text": "Now let me also update the marketplace setting check test:",
|
||
"partial": false
|
||
}
|
||
[2025-06-18T08:49:28.825Z] {
|
||
"ts": 1750236568149,
|
||
"type": "ask",
|
||
"ask": "tool",
|
||
"text": "{\"tool\":\"readFile\",\"path\":\"src/services/marketplace/__tests__/marketplace-setting-check.test.ts\",\"isOutsideWorkspace\":false,\"content\":\"/roo/repos/Roo-Code/src/services/marketplace/__tests__/marketplace-setting-check.test.ts\",\"reason\":\"\"}",
|
||
"partial": false
|
||
}
|
||
[2025-06-18T08:49:28.969Z] {
|
||
"ts": 1750236568961,
|
||
"type": "say",
|
||
"say": "api_req_started",
|
||
"text": "{\"request\":\"[read_file for 'src/services/marketplace/__tests__/marketplace-setting-check.test.ts'. Reading multiple files at once is more efficient for the LLM. If other files are relevant to your current task, please read them simultaneously.] Result:\\n\\n<files>\\n<file><path>src/services/marketplace/__tests__/marketplace-setting-check.test.ts</path>\\n<content lines=\\\"1-88\\\">\\n 1 | import { webviewMessageHandler } from \\\"../../../core/webview/webviewMessageHandler\\\"\\n 2 | import { MarketplaceManager } from \\\"../MarketplaceManager\\\"\\n 3 | \\n 4 | // Mock the provider and marketplace manager\\n 5 | const mockProvider = {\\n 6 | \\tgetState: jest.fn(),\\n 7 | \\tpostStateToWebview: jest.fn(),\\n 8 | } as any\\n 9 | \\n10 | const mockMarketplaceManager = {\\n11 | \\tupdateWithFilteredItems: jest.fn(),\\n12 | } as any\\n13 | \\n14 | describe(\\\"Marketplace Setting Check\\\", () => {\\n15 | \\tbeforeEach(() => {\\n16 | \\t\\tjest.clearAllMocks()\\n17 | \\t})\\n18 | \\n19 | \\tit(\\\"should skip API calls when marketplace is disabled\\\", async () => {\\n20 | \\t\\t// Mock experiments with marketplace disabled\\n21 | \\t\\tmockProvider.getState.mockResolvedValue({\\n22 | \\t\\t\\texperiments: { marketplace: false },\\n23 | \\t\\t})\\n24 | \\n25 | \\t\\tconst message = {\\n26 | \\t\\t\\ttype: \\\"filterMarketplaceItems\\\" as const,\\n27 | \\t\\t\\tfilters: { type: \\\"mcp\\\", search: \\\"\\\", tags: [] },\\n28 | \\t\\t}\\n29 | \\n30 | \\t\\tawait webviewMessageHandler(mockProvider, message, mockMarketplaceManager)\\n31 | \\n32 | \\t\\t// Should not call marketplace manager methods\\n33 | \\t\\texpect(mockMarketplaceManager.updateWithFilteredItems).not.toHaveBeenCalled()\\n34 | \\t\\texpect(mockProvider.postStateToWebview).not.toHaveBeenCalled()\\n35 | \\t})\\n36 | \\n37 | \\tit(\\\"should allow API calls when marketplace is enabled\\\", async () => {\\n38 | \\t\\t// Mock experiments with marketplace enabled\\n39 | \\t\\tmockProvider.getState.mockResolvedValue({\\n40 | \\t\\t\\texperiments: { marketplace: true },\\n41 | \\t\\t})\\n42 | \\n43 | \\t\\tconst message = {\\n44 | \\t\\t\\ttype: \\\"filterMarketplaceItems\\\" as const,\\n45 | \\t\\t\\tfilters: { type: \\\"mcp\\\", search: \\\"\\\", tags: [] },\\n46 | \\t\\t}\\n47 | \\n48 | \\t\\tawait webviewMessageHandler(mockProvider, message, mockMarketplaceManager)\\n49 | \\n50 | \\t\\t// Should call marketplace manager methods\\n51 | \\t\\texpect(mockMarketplaceManager.updateWithFilteredItems).toHaveBeenCalledWith({\\n52 | \\t\\t\\ttype: \\\"mcp\\\",\\n53 | \\t\\t\\tsearch: \\\"\\\",\\n54 | \\t\\t\\ttags: [],\\n55 | \\t\\t})\\n56 | \\t\\texpect(mockProvider.postStateToWebview).toHaveBeenCalled()\\n57 | \\t})\\n58 | \\n59 | \\tit(\\\"should skip installation when marketplace is disabled\\\", async () => {\\n60 | \\t\\t// Mock experiments with marketplace disabled\\n61 | \\t\\tmockProvider.getState.mockResolvedValue({\\n62 | \\t\\t\\texperiments: { marketplace: false },\\n63 | \\t\\t})\\n64 | \\n65 | \\t\\tconst mockInstallMarketplaceItem = jest.fn()\\n66 | \\t\\tconst mockMarketplaceManagerWithInstall = {\\n67 | \\t\\t\\tinstallMarketplaceItem: mockInstallMarketplaceItem,\\n68 | \\t\\t}\\n69 | \\n70 | \\t\\tconst message = {\\n71 | \\t\\t\\ttype: \\\"installMarketplaceItem\\\" as const,\\n72 | \\t\\t\\tmpItem: {\\n73 | \\t\\t\\t\\tid: \\\"test-item\\\",\\n74 | \\t\\t\\t\\tname: \\\"Test Item\\\",\\n75 | \\t\\t\\t\\ttype: \\\"mcp\\\" as const,\\n76 | \\t\\t\\t\\tdescription: \\\"Test description\\\",\\n77 | \\t\\t\\t\\tcontent: \\\"test content\\\",\\n78 | \\t\\t\\t\\turl: \\\"https://example.com/test-mcp\\\",\\n79 | \\t\\t\\t},\\n80 | \\t\\t\\tmpInstallOptions: { target: \\\"project\\\" as const },\\n81 | \\t\\t}\\n82 | \\n83 | \\t\\tawait webviewMessageHandler(mockProvider, message, mockMarketplaceManagerWithInstall as any)\\n84 | \\n85 | \\t\\t// Should not call install method\\n86 | \\t\\texpect(mockInstallMarketplaceItem).not.toHaveBeenCalled()\\n87 | \\t})\\n88 | })\\n</content>\\n</file>\\n</files>\\n\\nLoading...\"}"
|
||
}
|
||
[2025-06-18T08:49:32.549Z] {
|
||
"ts": 1750236572525,
|
||
"type": "say",
|
||
"say": "text",
|
||
"text": ""
|
||
}
|
||
[2025-06-18T08:49:38.205Z] {
|
||
"ts": 1750236572581,
|
||
"type": "ask",
|
||
"ask": "tool",
|
||
"text": "{\"tool\":\"appliedDiff\",\"path\":\"src/services/marketplace/__tests__/marketplace-setting-check.test.ts\",\"diff\":\"<<<<<<< SEARCH\\n:start_line:1\\n-------\\nimport { webviewMessageHandler } from \\\"../../../core/webview/webviewMessageHandler\\\"\\nimport { MarketplaceManager } from \\\"../MarketplaceManager\\\"\\n\\n// Mock the provider and marketplace manager\\nconst mockProvider = {\\n\\tgetState: jest.fn(),\\n\\tpostStateToWebview: jest.fn(),\\n} as any\\n=======\\nimport { webviewMessageHandler } from \\\"../../../core/webview/webviewMessageHandler\\\"\\nimport { MarketplaceManager } from \\\"../MarketplaceManager\\\"\\n\\n// Mock vscode\\njest.mock(\\\"vscode\\\", () => ({\\n\\tworkspace: {\\n\\t\\tgetConfiguration: jest.fn(() => ({\\n\\t\\t\\tget: jest.fn((key: string, defaultValue?: any) => {\\n\\t\\t\\t\\tif (key === \\\"disableMarketplace\\\") return false\\n\\t\\t\\t\\tif (key === \\\"marketplaceTimeout\\\") return 10000\\n\\t\\t\\t\\treturn defaultValue\\n\\t\\t\\t}),\\n\\t\\t})),\\n\\t},\\n}))\\n\\n// Mock the provider and marketplace manager\\nconst mockProvider = {\\n\\tgetState: jest.fn(),\\n\\tpostStateToWebview: jest.fn(),\\n} as any\\n>>>>>>> REPLACE\"}",
|
||
"partial": false,
|
||
"isProtected": false,
|
||
"progressStatus": {
|
||
"icon": "diff-multiple",
|
||
"text": "1"
|
||
}
|
||
}
|
||
[2025-06-18T08:49:39.326Z] {
|
||
"ts": 1750236579319,
|
||
"type": "say",
|
||
"say": "api_req_started",
|
||
"text": "{\"request\":\"[apply_diff for 'src/services/marketplace/__tests__/marketplace-setting-check.test.ts'] Result:\\n\\n<file_write_result>\\n<path>src/services/marketplace/__tests__/marketplace-setting-check.test.ts</path>\\n<operation>modified</operation>\\n<notice>\\n<i>You do not need to re-read the file, as you have seen all changes</i>\\n<i>Proceed with the task using these changes as the new baseline.</i>\\n</notice>\\n</file_write_result>\\n\\n\\nLoading...\"}"
|
||
}
|
||
[2025-06-18T08:49:42.828Z] {
|
||
"ts": 1750236582221,
|
||
"type": "say",
|
||
"say": "text",
|
||
"text": "Now let me run the tests again to see if our fixes work:",
|
||
"partial": false
|
||
}
|
||
[2025-06-18T08:49:43.548Z] {
|
||
"ts": 1750236582828,
|
||
"type": "ask",
|
||
"ask": "command",
|
||
"text": "cd src && npm test -- --testPathPattern=\"marketplace.*test\\.ts$\"",
|
||
"partial": false,
|
||
"isProtected": false
|
||
}
|
||
[2025-06-18T08:49:43.714Z] {
|
||
"ts": 1750236583707,
|
||
"type": "ask",
|
||
"ask": "command_output",
|
||
"text": ""
|
||
}
|
||
[2025-06-18T08:49:44.626Z] {
|
||
"ts": 1750236584620,
|
||
"type": "ask",
|
||
"ask": "command_output",
|
||
"text": ""
|
||
}
|
||
[2025-06-18T08:49:45.365Z] {
|
||
"ts": 1750236585358,
|
||
"type": "ask",
|
||
"ask": "command_output",
|
||
"text": ""
|
||
}
|
||
[2025-06-18T08:50:01.728Z] {
|
||
"ts": 1750236601716,
|
||
"type": "ask",
|
||
"ask": "command_output",
|
||
"text": ""
|
||
}
|
||
[2025-06-18T08:50:01.764Z] {
|
||
"ts": 1750236601757,
|
||
"type": "ask",
|
||
"ask": "command_output",
|
||
"text": ""
|
||
}
|
||
[2025-06-18T08:50:01.767Z] {
|
||
"ts": 1750236601757,
|
||
"type": "say",
|
||
"say": "command_output",
|
||
"text": "\n> roo-cline@3.20.3 pretest\n> turbo run bundle --cwd ..\n\nturbo 2.5.4\n\n• Packages in scope: @roo-code/build, @roo-code/cloud, @roo-code/config-eslint, @roo-code/config-typescript, @roo-code/evals, @roo-code/ipc, @roo-code/telemetry, @roo-code/types, @roo-code/vscode-e2e, @roo-code/vscode-nightly, @roo-code/vscode-webview, @roo-code/web-evals, @roo-code/web-roo-code, roo-cline\n• Running bundle in 14 packages\n• Remote caching disabled\n@roo-code/types:build: cache hit, replaying logs 0c63a498c5dc57fc\n@roo-code/types:build: \n@roo-code/types:build: > @roo-code/types@0.0.0 build /roo/repos/Roo-Code/packages/types\n@roo-code/types:build: > tsup\n@roo-code/types:build: \n@roo-code/types:build: CLI Building entry: src/index.ts\n@roo-code/types:build: CLI Using tsconfig: tsconfig.json\n@roo-code/types:build: CLI tsup v8.5.0\n@roo-code/types:build: CLI Using tsup config: /roo/repos/Roo-Code/packages/types/tsup.config.ts\n@roo-code/types:build: CLI Target: es2022\n@roo-code/types:build: CJS Build start\n@roo-code/types:build: ESM Build start\n@roo-code/types:build: CJS dist/index.cjs 110.03 KB\n@roo-code/types:build: CJS dist/index.cjs.map 174.20 KB\n@roo-code/types:build: CJS ⚡️ Build success in 41ms\n@roo-code/types:build: ESM dist/index.js 95.69 KB\n@roo-code/types:build: ESM dist/index.js.map 173.31 KB\n@roo-code/types:build: ESM ⚡️ Build success in 44ms\n@roo-code/types:build: DTS Build start\n@roo-code/types:build: DTS ⚡️ Build success in 2306ms\n@roo-code/types:build: DTS dist/index.d.cts 606.40 KB\n@roo-code/types:build: DTS dist/index.d.ts 606.40 KB\n@roo-code/build:build: cache hit, replaying logs 81a531b758730c71\n@roo-code/build:build: \n@roo-code/build:build: > @roo-code/build@ build /roo/repos/Roo-Code/packages/build\n@roo-code/build:build: > tsc\n@roo-code/build:build: \n@roo-code/vscode-webview:build: cache hit, replaying logs 3e3f231f0af50923\n@roo-code/vscode-webview:build: \n@roo-code/vscode-webview:build: > @roo-code/vscode-webview@ build /roo/repos/Roo-Code/webview-ui\n@roo-code/vscode-webview:build: > tsc -b && vite build\n@roo-code/vscode-webview:build: \n@roo-code/vscode-webview:build: vite v6.3.5 building for production...\n@roo-code/vscode-webview:build: transforming...\n@roo-code/vscode-webview:build: [plugin vite:resolve] Module \"fs/promises\" has been externalized for browser compatibility, imported by \"/roo/repos/Roo-Code/src/core/prompts/sections/custom-instructions.ts\". See https://vite.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details.\n@roo-code/vscode-webview:build: [plugin vite:resolve] Module \"path\" has been externalized for browser compatibility, imported by \"/roo/repos/Roo-Code/src/core/prompts/sections/custom-instructions.ts\". See https://vite.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details.\n@roo-code/vscode-webview:build: ✓ 5371 modules transformed.\n@roo-code/vscode-webview:build: rendering chunks...\n@roo-code/vscode-webview:build: ../src/webview-ui/build/index.html 0.43 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/codicon.ttf 80.19 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/index.css 93.34 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Bp6g37R7.js 0.59 kB │ map: 1.11 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D9kx8fwg.js 0.75 kB │ map: 1.34 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-B_m7g4N7.js 0.78 kB │ map: 1.40 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C3rowuyE.js 0.94 kB │ map: 1.44 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DjjNbUIW.js 1.02 kB │ map: 1.70 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C8lEn-DE.js 1.05 kB │ map: 1.76 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CSPye00a.js 1.13 kB │ map: 1.96 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-fuZLfV_i.js 1.19 kB │ map: 2.02 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CdTSL8YE.js 1.27 kB │ map: 2.05 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CJOTNe-S.js 1.43 kB │ map: 2.21 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Da5cRb03.js 1.47 kB │ map: 2.36 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CrJ-YhoI.js 1.52 kB │ map: 2.13 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BEwlwnbL.js 1.57 kB │ map: 2.50 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BcOcwvcX.js 1.78 kB │ map: 2.67 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C9tDr53Z.js 1.79 kB │ map: 2.49 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BmXAJ9_W.js 1.88 kB │ map: 2.79 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BV7otONQ.js 2.20 kB │ map: 3.21 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C2t-YnRu.js 2.28 kB │ map: 3.42 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C-SQnVFl.js 2.39 kB │ map: 3.54 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DNNlxIVo.js 2.39 kB │ map: 3.57 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D08WgyRC.js 2.41 kB │ map: 3.85 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D97Zzqfu.js 2.61 kB │ map: 3.89 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BspZqrRM.js 2.62 kB │ map: 4.02 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DouSy6O5.js 2.66 kB │ map: 3.32 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DFXneXwc.js 2.69 kB │ map: 3.72 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Cp-IABpG.js 2.87 kB │ map: 4.35 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BFvZA1X9.js 2.89 kB │ map: 4.37 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DP8w0yq8.js 2.98 kB │ map: 4.55 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DcaNXYhu.js 3.05 kB │ map: 4.54 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Des-eS-w.js 3.15 kB │ map: 4.63 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BtOb2qkB.js 3.17 kB │ map: 3.84 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BTJTHyun.js 3.28 kB │ map: 5.11 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C9tS-k6U.js 3.30 kB │ map: 4.98 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CKIfxQSi.js 3.30 kB │ map: 4.70 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-QIJgUcNo.js 3.33 kB │ map: 5.16 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D0YGMca9.js 3.40 kB │ map: 4.90 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C3B-1QV4.js 3.41 kB │ map: 4.90 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CsfeWuGM.js 3.41 kB │ map: 4.92 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BtCnVYZw.js 3.48 kB │ map: 4.47 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C4IJs8-o.js 3.65 kB │ map: 5.23 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-_ykCGR6B.js 3.66 kB │ map: 4.51 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DFQXde-d.js 3.66 kB │ map: 5.45 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DXETW7eA.js 3.68 kB │ map: 4.40 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DRg8JJMk.js 3.72 kB │ map: 5.45 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BsS91CYL.js 3.74 kB │ map: 5.52 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DVFEvuxE.js 3.96 kB │ map: 5.78 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BU0udk1K.js 3.98 kB │ map: 5.96 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-c1G5yEKj.js 4.14 kB │ map: 6.09 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D93ZcfNL.js 4.19 kB │ map: 5.56 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Bl2oy6fF.js 4.22 kB │ map: 5.72 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-6nHXG8SA.js 4.35 kB │ map: 6.44 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-dwOrl1Do.js 4.47 kB │ map: 6.51 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CUBwRw-F.js 4.58 kB │ map: 6.71 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C0HS_06l.js 4.71 kB │ map: 7.28 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DVxCFoDh.js 4.75 kB │ map: 5.92 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BYunw83y.js 4.81 kB │ map: 6.45 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CHM0blh-.js 4.84 kB │ map: 7.05 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D32k8WzR.js 5.06 kB │ map: 6.67 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Dx-B1_4e.js 5.19 kB │ map: 7.53 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DEd0xgAf.js 5.30 kB │ map: 7.72 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DXHVBXt-.js 5.37 kB │ map: 8.15 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CEL-wOlO.js 5.41 kB │ map: 6.80 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CK-KhNJq.js 5.41 kB │ map: 7.93 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-B_vNuMnf.js 5.43 kB │ map: 7.87 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DMzUqQB5.js 5.50 kB │ map: 8.02 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CMdgaOU9.js 5.54 kB │ map: 7.51 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-25uR9ifH.js 5.73 kB │ map: 8.52 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CEu0bR-o.js 5.95 kB │ map: 8.54 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C3IMAYVA.js 5.97 kB │ map: 7.72 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BQ8w6xss.js 5.97 kB │ map: 8.05 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-COkxafJQ.js 6.00 kB │ map: 8.47 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D17OF-Vu.js 6.14 kB │ map: 8.07 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-bN70gL4F.js 6.31 kB │ map: 8.90 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CafNBF8u.js 6.33 kB │ map: 8.63 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DkwncUOv.js 6.37 kB │ map: 9.22 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Dd19v3D-.js 6.37 kB │ map: 9.30 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BRHolxvo.js 6.41 kB │ map: 9.28 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-P80f7IUj.js 6.46 kB │ map: 9.31 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CXtECtnM.js 6.46 kB │ map: 9.14 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-vGWfd6FD.js 6.47 kB │ map: 9.50 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-L9t79GZl.js 6.52 kB │ map: 9.25 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DyJlTyXw.js 6.56 kB │ map: 9.89 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BERRCDM3.js 6.63 kB │ map: 9.28 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CkByrt1z.js 6.80 kB │ map: 10.10 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DXbdFlpD.js 6.89 kB │ map: 9.70 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BM1_JUlF.js 6.96 kB │ map: 9.63 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CTRr51gU.js 7.01 kB │ map: 9.55 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-3ipgsugG.js 7.02 kB │ map: 10.73 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C98Dy4si.js 7.21 kB │ map: 9.82 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D3lLCCz7.js 7.31 kB │ map: 9.27 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-IeuSbFQv.js 7.52 kB │ map: 9.43 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CF10PKvl.js 7.86 kB │ map: 11.55 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-4A_iFExJ.js 7.91 kB │ map: 10.67 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D4h5O-jR.js 7.93 kB │ map: 11.12 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CDVJQ6XC.js 8.03 kB │ map: 11.22 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Cne5dW8M.js 8.30 kB │ map: 12.39 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DHCkPAjA.js 8.43 kB │ map: 12.33 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-ChMvpjG-.js 8.56 kB │ map: 10.92 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D1_LrSGp.js 8.70 kB │ map: 12.07 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BdnUsdx6.js 8.83 kB │ map: 12.81 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C3khCPGq.js 8.90 kB │ map: 11.77 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DIHx2sdZ.js 8.99 kB │ map: 14.50 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CHLpvVh8.js 9.00 kB │ map: 12.89 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D1K3uGbs.js 9.11 kB │ map: 11.13 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C3mMm8J8.js 9.14 kB │ map: 12.44 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BthQWCQV.js 9.16 kB │ map: 12.53 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Cj5Yp3dK.js 9.33 kB │ map: 13.45 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-3e1v2bzS.js 9.34 kB │ map: 12.51 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DqwNpetd.js 9.47 kB │ map: 13.13 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-jQY0bNUL.js 9.57 kB │ map: 12.23 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-B5tOyCc9.js 9.73 kB │ map: 14.12 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D1j8_8rp.js 9.90 kB │ map: 11.30 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-B7mTdjB0.js 9.98 kB │ map: 13.44 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BWvSN4gD.js 10.10 kB │ map: 14.82 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BoKiGodi.js 10.17 kB │ map: 14.74 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BtqSS_iP.js 10.51 kB │ map: 15.14 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DXvB9xmW.js 10.52 kB │ map: 12.94 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D2CYqzqI.js 10.55 kB │ map: 15.20 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Buea-lGh.js 10.55 kB │ map: 14.93 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BAAX8Kh4.js 10.71 kB │ map: 15.59 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-sVvOI5da.js 11.02 kB │ map: 16.06 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DAi9KRSo.js 11.23 kB │ map: 15.43 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CbFg5uaA.js 11.40 kB │ map: 13.33 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BETggiCN.js 11.43 kB │ map: 16.25 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DHJKELXO.js 11.45 kB │ map: 15.70 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BMWR74SV.js 11.48 kB │ map: 16.35 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DUszq2jm.js 11.54 kB │ map: 14.72 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DyxjwDmM.js 11.99 kB │ map: 13.15 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-MzD3tlZU.js 12.05 kB │ map: 16.87 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D5-asLiD.js 12.10 kB │ map: 17.32 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C9dXKwCe.js 12.19 kB │ map: 17.40 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Pmp26Uib.js 12.50 kB │ map: 15.98 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-irsrSlf-.js 12.73 kB │ map: 17.89 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DU1UobuO.js 12.74 kB │ map: 16.19 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BkioyH1T.js 12.93 kB │ map: 17.43 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DljmTZ5-.js 13.27 kB │ map: 19.32 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CVO1_9PV.js 13.66 kB │ map: 18.57 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D-2ljcwZ.js 13.70 kB │ map: 17.59 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Bkuqu6BP.js 13.72 kB │ map: 18.65 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D0r3Knsf.js 13.80 kB │ map: 18.73 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Jcf2cZT6.js 13.88 kB │ map: 20.53 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CbfX1IO0.js 14.08 kB │ map: 19.11 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CfeIJUat.js 14.09 kB │ map: 19.86 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CHh-QcGE.js 14.14 kB │ map: 19.78 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D7oLnXFd.js 14.20 kB │ map: 19.29 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BfjtVDDH.js 14.32 kB │ map: 19.46 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DH5Ifo-i.js 14.48 kB │ map: 19.66 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Cuk6v7N8.js 14.48 kB │ map: 19.67 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-E3gJ1_iC.js 14.64 kB │ map: 19.89 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BepWV7mh.js 14.79 kB │ map: 21.56 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DdkO51Og.js 14.83 kB │ map: 20.85 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Cv9koXgw.js 14.99 kB │ map: 20.29 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-B1yitclQ.js 15.11 kB │ map: 21.49 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BvAqAH-y.js 15.21 kB │ map: 19.64 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Colysff4.js 15.25 kB │ map: 21.66 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BdImnpbu.js 15.90 kB │ map: 18.87 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D7o27uSR.js 16.13 kB │ map: 23.40 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D82EKSYY.js 16.25 kB │ map: 23.82 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BbcW6ACK.js 16.28 kB │ map: 23.70 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DRBVVfo7.js 16.36 kB │ map: 23.16 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DO0LZyKx.js 16.77 kB │ map: 24.05 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CMUws-av.js 17.00 kB │ map: 23.92 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BkPM1oy1.js 17.11 kB │ map: 25.66 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DWedfzmr.js 17.17 kB │ map: 22.29 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CfQXZHmo.js 17.17 kB │ map: 22.30 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CkXjmgJE.js 17.17 kB │ map: 22.30 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BgEskmCb.js 17.76 kB │ map: 24.78 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C-HMFfM3.js 18.04 kB │ map: 25.48 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D5KoaKCx.js 18.66 kB │ map: 24.13 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BfHTSMKl.js 18.67 kB │ map: 24.17 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CyktbL80.js 18.67 kB │ map: 24.16 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-B0m2ddpp.js 18.68 kB │ map: 24.18 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Csfq5Kiy.js 18.68 kB │ map: 24.18 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Bty6elJm.js 18.88 kB │ map: 26.12 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-gcz8RCvz.js 19.22 kB │ map: 27.55 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-B0YXbBSa.js 19.66 kB │ map: 23.11 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-I3RK9BU8.js 19.85 kB │ map: 27.05 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BaML1QMV.js 20.11 kB │ map: 28.62 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Bc2xwClX.js 20.11 kB │ map: 28.62 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Dpen1YoG.js 20.19 kB │ map: 26.62 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CJc9bBzg.js 20.41 kB │ map: 23.53 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Bw305WKR.js 20.82 kB │ map: 28.03 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BzJJZx-M.js 21.11 kB │ map: 27.51 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BXkSAIEj.js 21.12 kB │ map: 27.54 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DQ46CBc_.js 21.13 kB │ map: 31.77 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-T7J2jLj3.js 21.42 kB │ map: 29.24 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-5i3qLPDT.js 21.51 kB │ map: 30.13 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BHrmToEH.js 21.79 kB │ map: 28.78 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-NleAzG8P.js 21.80 kB │ map: 28.81 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CnK8MTSM.js 21.80 kB │ map: 28.81 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Hhtzho9R.js 21.90 kB │ map: 29.52 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BFVdkX1U.js 21.90 kB │ map: 29.52 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-7i6GEmcB.js 21.90 kB │ map: 29.53 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-leinZj1a.js 21.90 kB │ map: 29.53 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DFR6f4Jn.js 21.90 kB │ map: 29.53 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Dcsh5twl.js 21.91 kB │ map: 29.54 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DWkon8Hs.js 22.51 kB │ map: 32.77 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Cg-RD9OK.js 22.62 kB │ map: 26.71 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-B9xm8XSJ.js 23.46 kB │ map: 27.96 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CtrldY6v.js 23.61 kB │ map: 33.41 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Df68jz8_.js 23.70 kB │ map: 33.09 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BrYkhBEK.js 24.00 kB │ map: 29.10 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-B47ASqzZ.js 24.04 kB │ map: 30.83 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DbjXokdF.js 24.08 kB │ map: 33.35 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CeAyd5Ju.js 24.31 kB │ map: 33.41 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-sYKpKAhk.js 24.33 kB │ map: 35.57 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk--Ycre7K_.js 25.33 kB │ map: 35.88 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-PoHY5YXO.js 25.34 kB │ map: 33.81 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BSCcYQo-.js 25.60 kB │ map: 35.74 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CnnmHF94.js 26.25 kB │ map: 36.29 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Ddv68eIx.js 26.77 kB │ map: 35.36 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DsOJ9woJ.js 26.93 kB │ map: 36.04 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-vbB5lEOJ.js 27.25 kB │ map: 38.35 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CylS5w8V.js 27.26 kB │ map: 38.66 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C-C_nZcE.js 27.46 kB │ map: 36.10 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DfEE3Bzs.js 28.33 kB │ map: 42.30 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C151Ov-r.js 28.93 kB │ map: 40.14 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C39BiMTA.js 28.96 kB │ map: 39.06 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BnD7D7ah.js 29.43 kB │ map: 41.19 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Co6uUVPk.js 29.61 kB │ map: 39.37 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BEDo0Tqx.js 31.12 kB │ map: 38.90 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DSnTR2wu.js 31.12 kB │ map: 40.57 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CS3Unz2-.js 33.54 kB │ map: 43.07 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DVMEJ2y_.js 33.83 kB │ map: 44.51 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CDuzWNpe.js 33.91 kB │ map: 37.62 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BP3HzMA6.js 35.20 kB │ map: 49.54 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Cu1ofpgu.js 35.42 kB │ map: 48.49 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DnULxvSX.js 35.47 kB │ map: 46.40 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-hegEt444.js 35.71 kB │ map: 45.35 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-pO14Kfwb.js 36.95 kB │ map: 156.31 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DpOm0zC4.js 37.47 kB │ map: 51.50 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-OpcvBqEo.js 39.18 kB │ map: 47.38 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C2tOF0e5.js 39.47 kB │ map: 48.58 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D_Q5rh1f.js 40.76 kB │ map: 53.02 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Yzrsuije.js 41.52 kB │ map: 56.55 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Df6bDoY_.js 41.53 kB │ map: 57.87 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BgfZh1f1.js 43.20 kB │ map: 60.76 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-85-TOEBH.js 43.84 kB │ map: 62.72 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-PEFJdsE-.js 45.17 kB │ map: 64.22 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-3mfGJbgy.js 45.96 kB │ map: 65.26 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-QX45V2Sx.js 46.12 kB │ map: 64.41 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BR7mELCv.js 46.89 kB │ map: 61.48 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-q-j0iyEw.js 46.89 kB │ map: 61.48 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Btyk0a-E.js 46.89 kB │ map: 61.48 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-brDaU2vB.js 46.89 kB │ map: 61.50 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-bCR0ucgS.js 48.13 kB │ map: 70.99 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DPfMkruS.js 49.07 kB │ map: 60.65 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DGztddWO.js 49.97 kB │ map: 68.11 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BgDCqdQA.js 53.79 kB │ map: 68.27 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C8M2exoo.js 53.79 kB │ map: 68.28 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BhOHFoWU.js 55.93 kB │ map: 77.66 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-RrBGtqGR.js 55.95 kB │ map: 77.63 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CiIkovmz.js 57.04 kB │ map: 74.19 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CXhxxCfG.js 57.29 kB │ map: 73.01 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BFfxhgS-.js 58.74 kB │ map: 81.56 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C0hk2d4L.js 62.49 kB │ map: 81.13 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-1DNp92w6.js 69.33 kB │ map: 94.25 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Du0Ki9n9.js 69.45 kB │ map: 96.16 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-B6aJPvgy.js 70.00 kB │ map: 95.26 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BIGW1oBm.js 72.16 kB │ map: 95.41 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CDx5xZoG.js 74.69 kB │ map: 100.73 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CUz34qUM.js 80.28 kB │ map: 97.31 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CHadp7IV.js 85.63 kB │ map: 120.19 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-fve9TYiY.js 86.01 kB │ map: 113.15 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CdggvHu8.js 87.11 kB │ map: 124.90 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D22FLkUw.js 87.19 kB │ map: 121.54 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BqYA7rlc.js 92.43 kB │ map: 106.21 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-B1dDrJ26.js 97.68 kB │ map: 131.88 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CLIx6TIR.js 103.84 kB │ map: 129.27 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DXmwc3jG.js 105.46 kB │ map: 129.67 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Cf4Oy6XI.js 111.05 kB │ map: 139.30 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Cmh6b_Ma.js 136.16 kB │ map: 176.75 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CLxacb5B.js 172.02 kB │ map: 218.55 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BMMyXqK5.js 174.86 kB │ map: 236.06 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-COt5Ahok.js 175.58 kB │ map: 236.76 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-g9-lgVsj.js 177.84 kB │ map: 239.01 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DlfHMoPT.js 181.11 kB │ map: 244.40 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Cno5XSCQ.js 183.86 kB │ map: 249.41 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-lXgVvXCa.js 262.43 kB │ map: 279.68 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CG6Dc4jp.js 622.38 kB │ map: 622.93 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CzjqYRUi.js 626.13 kB │ map: 816.15 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C9XAeP06.js 779.90 kB │ map: 789.83 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/mermaid-bundle.js 2,538.21 kB │ map: 9,621.20 kB\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/index.js 3,236.37 kB │ map: 7,432.44 kB\n@roo-code/vscode-webview:build: \n@roo-code/vscode-webview:build: (!) Some chunks are larger than 500 kB after minification. Consider:\n@roo-code/vscode-webview:build: - Using dynamic import() to code-split the application\n@roo-code/vscode-webview:build: - Use build.rollupOptions.output.manualChunks to improve chunking: https://rollupjs.org/configuration-options/#output-manualchunks\n@roo-code/vscode-webview:build: - Adjust chunk size limit for this warning via build.chunkSizeWarningLimit.\n@roo-code/vscode-webview:build: ✓ built in 9.10s\nroo-cline:bundle: cache miss, executing a0cd4b6217a2e7ba\nroo-cline:bundle: \nroo-cline:bundle: > roo-cline@3.20.3 bundle /roo/repos/Roo-Code/src\nroo-cline:bundle: > node esbuild.mjs\nroo-cline:bundle: \nroo-cline:bundle: [extension] Cleaning dist directory: /roo/repos/Roo-Code/src/dist\nroo-cline:bundle: [esbuild-problem-matcher#onStart]\nroo-cline:bundle: [copyPaths] Copied ../README.md to README.md\nroo-cline:bundle: [copyPaths] Copied ../CHANGELOG.md to CHANGELOG.md\nroo-cline:bundle: [copyPaths] Copied ../LICENSE to LICENSE\nroo-cline:bundle: [copyPaths] Optional file not found: ../.env\nroo-cline:bundle: [copyPaths] Copied 911 files from node_modules/vscode-material-icons/generated to assets/vscode-material-icons\nroo-cline:bundle: [copyPaths] Copied 3 files from ../webview-ui/audio to webview-ui/audio\nroo-cline:bundle: [copyWasms] Copied tiktoken WASMs to /roo/repos/Roo-Code/src/dist\nroo-cline:bundle: [copyWasms] Copied tiktoken WASMs to /roo/repos/Roo-Code/src/dist/workers\nroo-cline:bundle: [copyWasms] Copied tree-sitter.wasm to /roo/repos/Roo-Code/src/dist\nroo-cline:bundle: [copyWasms] Copied 35 tree-sitter language wasms to /roo/repos/Roo-Code/src/dist\nroo-cline:bundle: [copyLocales] Copied 72 locale files to /roo/repos/Roo-Code/src/dist/i18n/locales\nroo-cline:bundle: [esbuild-problem-matcher#onEnd]\n\n Tasks: 4 successful, 4 total\nCached: 3 cached, 4 total\n Time: 974ms \n\n\n> roo-cline@3.20.3 test\n> jest -w=40% && vitest run --testPathPattern=marketplace.*test\\.ts$\n\n\nFound 130 test suites\n***********.........................................................................................................................*****..................................................................................................................................................................................................................................................................*...............................................................................................................................................................................*...........................................................................................................................................................................................................................................................................**....................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................\nRan 1389 tests in 16.358 s\n 1369 passing 0 failing 20 pending\nfile:///roo/repos/Roo-Code/node_modules/.pnpm/vitest@3.1.3_@types+debug@4.1.12_@types+node@20.17.50_jiti@2.4.2_jsdom@20.0.3_lightningcss@1.30.1_tsx@4.19.4_yaml@2.8.0/node_modules/vitest/dist/chunks/cac.BN2e7cE1.js:403\n throw new CACError(`Unknown option \\`${name.length > 1 ? `--${name}` : `-${name}`}\\``);\n ^\n\nCACError: Unknown option `--testPathPattern`\n at Command.checkUnknownOptions (file:///roo/repos/Roo-Code/node_modules/.pnpm/vitest@3.1.3_@types+debug@4.1.12_@types+node@20.17.50_jiti@2.4.2_jsdom@20.0.3_lightningcss@1.30.1_tsx@4.19.4_yaml@2.8.0/node_modules/vitest/dist/chunks/cac.BN2e7cE1.js:403:17)\n at CAC.runMatchedCommand (file:///roo/repos/Roo-Code/node_modules/.pnpm/vitest@3.1.3_@types+debug@4.1.12_@types+node@20.17.50_jiti@2.4.2_jsdom@20.0.3_lightningcss@1.30.1_tsx@4.19.4_yaml@2.8.0/node_modules/vitest/dist/chunks/cac.BN2e7cE1.js:603:13)\n at CAC.parse (file:///roo/repos/Roo-Code/node_modules/.pnpm/vitest@3.1.3_@types+debug@4.1.12_@types+node@20.17.50_jiti@2.4.2_jsdom@20.0.3_lightningcss@1.30.1_tsx@4.19.4_yaml@2.8.0/node_modules/vitest/dist/chunks/cac.BN2e7cE1.js:544:12)\n at file:///roo/repos/Roo-Code/node_modules/.pnpm/vitest@3.1.3_@types+debug@4.1.12_@types+node@20.17.50_jiti@2.4.2_jsdom@20.0.3_lightningcss@1.30.1_tsx@4.19.4_yaml@2.8.0/node_modules/vitest/dist/cli.js:8:13\n at ModuleJob.run (node:internal/modules/esm/module_job:263:25)\n at async ModuleLoader.import (node:internal/modules/esm/loader:540:24)\n at async asyncRunEntryPointWithESMLoader (node:internal/modules/run_main:117:5)\n\nNode.js v20.19.2\n"
|
||
}
|
||
[2025-06-18T08:50:01.816Z] {
|
||
"ts": 1750236601809,
|
||
"type": "say",
|
||
"say": "api_req_started",
|
||
"text": "{\"request\":\"[execute_command for 'cd src && npm test -- --testPathPattern=\\\"marketplace.*test\\\\.ts$\\\"'] Result:\\n\\nCommand executed in terminal within working directory '/roo/repos/Roo-Code'. Command execution was not successful, inspect the cause and adjust as needed.\\nExit code: 1\\nOutput:\\n\\n> roo-cline@3.20.3 pretest\\n> turbo run bundle --cwd ..\\n\\nturbo 2.5.4\\n\\n• Packages in scope: @roo-code/build, @roo-code/cloud, @roo-code/config-eslint, @roo-code/config-typescript, @roo-code/evals, @roo-code/ipc, @roo-code/telemetry, @roo-code/types, @roo-code/vscode-e2e, @roo-code/vscode-nightly, @roo-code/vscode-webview, @roo-code/web-evals, @roo-code/web-roo-code, roo-cline\\n• Running bundle in 14 packages\\n• Remote caching disabled\\n@roo-code/types:build: cache hit, replaying logs 0c63a498c5dc57fc\\n@roo-code/types:build: \\n@roo-code/types:build: > @roo-code/types@0.0.0 build /roo/repos/Roo-Code/packages/types\\n@roo-code/types:build: > tsup\\n@roo-code/types:build: \\n@roo-code/types:build: CLI Building entry: src/index.ts\\n@roo-code/types:build: CLI Using tsconfig: tsconfig.json\\n@roo-code/types:build: CLI tsup v8.5.0\\n@roo-code/types:build: CLI Using tsup config: /roo/repos/Roo-Code/packages/types/tsup.config.ts\\n@roo-code/types:build: CLI Target: es2022\\n@roo-code/types:build: CJS Build start\\n@roo-code/types:build: ESM Build start\\n@roo-code/types:build: CJS dist/index.cjs 110.03 KB\\n@roo-code/types:build: CJS dist/index.cjs.map 174.20 KB\\n@roo-code/types:build: CJS ⚡️ Build success in 41ms\\n@roo-code/types:build: ESM dist/index.js 95.69 KB\\n@roo-code/types:build: ESM dist/index.js.map 173.31 KB\\n@roo-code/types:build: ESM ⚡️ Build success in 44ms\\n@roo-code/types:build: DTS Build start\\n@roo-code/types:build: DTS ⚡️ Build success in 2306ms\\n@roo-code/types:build: DTS dist/index.d.cts 606.40 KB\\n@roo-code/types:build: DTS dist/index.d.ts 606.40 KB\\n@roo-code/build:build: cache hit, replaying logs 81a531b758730c71\\n@roo-code/build:build: \\n@roo-code/build:build: > @roo-code/build@ build /roo/repos/Roo-Code/packages/build\\n@roo-code/build:build: > tsc\\n@roo-code/build:build: \\n@roo-code/vscode-webview:build: cache hit, replaying logs 3e3f231f0af50923\\n@roo-code/vscode-webview:build: \\n@roo-code/vscode-webview:build: > @roo-code/vscode-webview@ build /roo/repos/Roo-Code/webview-ui\\n@roo-code/vscode-webview:build: > tsc -b && vite build\\n@roo-code/vscode-webview:build: \\n@roo-code/vscode-webview:build: vite v6.3.5 building for production...\\n@roo-code/vscode-webview:build: transforming...\\n@roo-code/vscode-webview:build: [plugin vite:resolve] Module \\\"fs/promises\\\" has been externalized for browser compatibility, imported by \\\"/roo/repos/Roo-Code/src/core/prompts/sections/custom-instructions.ts\\\". See https://vite.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details.\\n@roo-code/vscode-webview:build: [plugin vite:resolve] Module \\\"path\\\" has been externalized for browser compatibility, imported by \\\"/roo/repos/Roo-Code/src/core/prompts/sections/custom-instructions.ts\\\". See https://vite.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details.\\n@roo-code/vscode-webview:build: ✓ 5371 modules transformed.\\n@roo-code/vscode-webview:build: rendering chunks...\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/index.html 0.43 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/codicon.ttf 80.19 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/index.css 93.34 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Bp6g37R7.js 0.59 kB │ map: 1.11 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D9kx8fwg.js 0.75 kB │ map: 1.34 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-B_m7g4N7.js 0.78 kB │ map: 1.40 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C3rowuyE.js 0.94 kB │ map: 1.44 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DjjNbUIW.js 1.02 kB │ map: 1.70 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C8lEn-DE.js 1.05 kB │ map: 1.76 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CSPye00a.js 1.13 kB │ map: 1.96 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-fuZLfV_i.js 1.19 kB │ map: 2.02 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CdTSL8YE.js 1.27 kB │ map: 2.05 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CJOTNe-S.js 1.43 kB │ map: 2.21 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Da5cRb03.js 1.47 kB │ map: 2.36 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CrJ-YhoI.js 1.52 kB │ map: 2.13 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BEwlwnbL.js 1.57 kB │ map: 2.50 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BcOcwvcX.js 1.78 kB │ map: 2.67 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C9tDr53Z.js 1.79 kB │ map: 2.49 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BmXAJ9_W.js 1.88 kB │ map: 2.79 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BV7otONQ.js 2.20 kB │ map: 3.21 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C2t-YnRu.js 2.28 kB │ map: 3.42 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C-SQnVFl.js 2.39 kB │ map: 3.54 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DNNlxIVo.js 2.39 kB │ map: 3.57 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D08WgyRC.js 2.41 kB │ map: 3.85 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D97Zzqfu.js 2.61 kB │ map: 3.89 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BspZqrRM.js 2.62 kB │ map: 4.02 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DouSy6O5.js 2.66 kB │ map: 3.32 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DFXneXwc.js 2.69 kB │ map: 3.72 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Cp-IABpG.js 2.87 kB │ map: 4.35 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BFvZA1X9.js 2.89 kB │ map: 4.37 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DP8w0yq8.js 2.98 kB │ map: 4.55 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DcaNXYhu.js 3.05 kB │ map: 4.54 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Des-eS-w.js 3.15 kB │ map: 4.63 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BtOb2qkB.js 3.17 kB │ map: 3.84 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BTJTHyun.js 3.28 kB │ map: 5.11 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C9tS-k6U.js 3.30 kB │ map: 4.98 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CKIfxQSi.js 3.30 kB │ map: 4.70 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-QIJgUcNo.js 3.33 kB │ map: 5.16 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D0YGMca9.js 3.40 kB │ map: 4.90 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C3B-1QV4.js 3.41 kB │ map: 4.90 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CsfeWuGM.js 3.41 kB │ map: 4.92 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BtCnVYZw.js 3.48 kB │ map: 4.47 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C4IJs8-o.js 3.65 kB │ map: 5.23 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-_ykCGR6B.js 3.66 kB │ map: 4.51 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DFQXde-d.js 3.66 kB │ map: 5.45 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DXETW7eA.js 3.68 kB │ map: 4.40 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DRg8JJMk.js 3.72 kB │ map: 5.45 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BsS91CYL.js 3.74 kB │ map: 5.52 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DVFEvuxE.js 3.96 kB │ map: 5.78 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BU0udk1K.js 3.98 kB │ map: 5.96 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-c1G5yEKj.js 4.14 kB │ map: 6.09 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D93ZcfNL.js 4.19 kB │ map: 5.56 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Bl2oy6fF.js 4.22 kB │ map: 5.72 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-6nHXG8SA.js 4.35 kB │ map: 6.44 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-dwOrl1Do.js 4.47 kB │ map: 6.51 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CUBwRw-F.js 4.58 kB │ map: 6.71 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C0HS_06l.js 4.71 kB │ map: 7.28 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DVxCFoDh.js 4.75 kB │ map: 5.92 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BYunw83y.js 4.81 kB │ map: 6.45 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CHM0blh-.js 4.84 kB │ map: 7.05 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D32k8WzR.js 5.06 kB │ map: 6.67 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Dx-B1_4e.js 5.19 kB │ map: 7.53 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DEd0xgAf.js 5.30 kB │ map: 7.72 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DXHVBXt-.js 5.37 kB │ map: 8.15 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CEL-wOlO.js 5.41 kB │ map: 6.80 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CK-KhNJq.js 5.41 kB │ map: 7.93 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-B_vNuMnf.js 5.43 kB │ map: 7.87 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DMzUqQB5.js 5.50 kB │ map: 8.02 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CMdgaOU9.js 5.54 kB │ map: 7.51 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-25uR9ifH.js 5.73 kB │ map: 8.52 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CEu0bR-o.js 5.95 kB │ map: 8.54 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C3IMAYVA.js 5.97 kB │ map: 7.72 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BQ8w6xss.js 5.97 kB │ map: 8.05 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-COkxafJQ.js 6.00 kB │ map: 8.47 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D17OF-Vu.js 6.14 kB │ map: 8.07 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-bN70gL4F.js 6.31 kB │ map: 8.90 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CafNBF8u.js 6.33 kB │ map: 8.63 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DkwncUOv.js 6.37 kB │ map: 9.22 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Dd19v3D-.js 6.37 kB │ map: 9.30 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BRHolxvo.js 6.41 kB │ map: 9.28 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-P80f7IUj.js 6.46 kB │ map: 9.31 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CXtECtnM.js 6.46 kB │ map: 9.14 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-vGWfd6FD.js 6.47 kB │ map: 9.50 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-L9t79GZl.js 6.52 kB │ map: 9.25 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DyJlTyXw.js 6.56 kB │ map: 9.89 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BERRCDM3.js 6.63 kB │ map: 9.28 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CkByrt1z.js 6.80 kB │ map: 10.10 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DXbdFlpD.js 6.89 kB │ map: 9.70 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BM1_JUlF.js 6.96 kB │ map: 9.63 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CTRr51gU.js 7.01 kB │ map: 9.55 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-3ipgsugG.js 7.02 kB │ map: 10.73 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C98Dy4si.js 7.21 kB │ map: 9.82 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D3lLCCz7.js 7.31 kB │ map: 9.27 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-IeuSbFQv.js 7.52 kB │ map: 9.43 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CF10PKvl.js 7.86 kB │ map: 11.55 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-4A_iFExJ.js 7.91 kB │ map: 10.67 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D4h5O-jR.js 7.93 kB │ map: 11.12 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CDVJQ6XC.js 8.03 kB │ map: 11.22 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Cne5dW8M.js 8.30 kB │ map: 12.39 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DHCkPAjA.js 8.43 kB │ map: 12.33 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-ChMvpjG-.js 8.56 kB │ map: 10.92 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D1_LrSGp.js 8.70 kB │ map: 12.07 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BdnUsdx6.js 8.83 kB │ map: 12.81 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C3khCPGq.js 8.90 kB │ map: 11.77 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DIHx2sdZ.js 8.99 kB │ map: 14.50 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CHLpvVh8.js 9.00 kB │ map: 12.89 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D1K3uGbs.js 9.11 kB │ map: 11.13 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C3mMm8J8.js 9.14 kB │ map: 12.44 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BthQWCQV.js 9.16 kB │ map: 12.53 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Cj5Yp3dK.js 9.33 kB │ map: 13.45 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-3e1v2bzS.js 9.34 kB │ map: 12.51 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DqwNpetd.js 9.47 kB │ map: 13.13 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-jQY0bNUL.js 9.57 kB │ map: 12.23 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-B5tOyCc9.js 9.73 kB │ map: 14.12 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D1j8_8rp.js 9.90 kB │ map: 11.30 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-B7mTdjB0.js 9.98 kB │ map: 13.44 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BWvSN4gD.js 10.10 kB │ map: 14.82 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BoKiGodi.js 10.17 kB │ map: 14.74 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BtqSS_iP.js 10.51 kB │ map: 15.14 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DXvB9xmW.js 10.52 kB │ map: 12.94 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D2CYqzqI.js 10.55 kB │ map: 15.20 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Buea-lGh.js 10.55 kB │ map: 14.93 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BAAX8Kh4.js 10.71 kB │ map: 15.59 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-sVvOI5da.js 11.02 kB │ map: 16.06 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DAi9KRSo.js 11.23 kB │ map: 15.43 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CbFg5uaA.js 11.40 kB │ map: 13.33 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BETggiCN.js 11.43 kB │ map: 16.25 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DHJKELXO.js 11.45 kB │ map: 15.70 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BMWR74SV.js 11.48 kB │ map: 16.35 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DUszq2jm.js 11.54 kB │ map: 14.72 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DyxjwDmM.js 11.99 kB │ map: 13.15 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-MzD3tlZU.js 12.05 kB │ map: 16.87 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D5-asLiD.js 12.10 kB │ map: 17.32 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C9dXKwCe.js 12.19 kB │ map: 17.40 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Pmp26Uib.js 12.50 kB │ map: 15.98 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-irsrSlf-.js 12.73 kB │ map: 17.89 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DU1UobuO.js 12.74 kB │ map: 16.19 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BkioyH1T.js 12.93 kB │ map: 17.43 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DljmTZ5-.js 13.27 kB │ map: 19.32 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CVO1_9PV.js 13.66 kB │ map: 18.57 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D-2ljcwZ.js 13.70 kB │ map: 17.59 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Bkuqu6BP.js 13.72 kB │ map: 18.65 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D0r3Knsf.js 13.80 kB │ map: 18.73 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Jcf2cZT6.js 13.88 kB │ map: 20.53 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CbfX1IO0.js 14.08 kB │ map: 19.11 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CfeIJUat.js 14.09 kB │ map: 19.86 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CHh-QcGE.js 14.14 kB │ map: 19.78 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D7oLnXFd.js 14.20 kB │ map: 19.29 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BfjtVDDH.js 14.32 kB │ map: 19.46 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DH5Ifo-i.js 14.48 kB │ map: 19.66 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Cuk6v7N8.js 14.48 kB │ map: 19.67 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-E3gJ1_iC.js 14.64 kB │ map: 19.89 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BepWV7mh.js 14.79 kB │ map: 21.56 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DdkO51Og.js 14.83 kB │ map: 20.85 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Cv9koXgw.js 14.99 kB │ map: 20.29 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-B1yitclQ.js 15.11 kB │ map: 21.49 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BvAqAH-y.js 15.21 kB │ map: 19.64 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Colysff4.js 15.25 kB │ map: 21.66 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BdImnpbu.js 15.90 kB │ map: 18.87 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D7o27uSR.js 16.13 kB │ map: 23.40 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D82EKSYY.js 16.25 kB │ map: 23.82 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BbcW6ACK.js 16.28 kB │ map: 23.70 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DRBVVfo7.js 16.36 kB │ map: 23.16 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DO0LZyKx.js 16.77 kB │ map: 24.05 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CMUws-av.js 17.00 kB │ map: 23.92 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BkPM1oy1.js 17.11 kB │ map: 25.66 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DWedfzmr.js 17.17 kB │ map: 22.29 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CfQXZHmo.js 17.17 kB │ map: 22.30 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CkXjmgJE.js 17.17 kB │ map: 22.30 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BgEskmCb.js 17.76 kB │ map: 24.78 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C-HMFfM3.js 18.04 kB │ map: 25.48 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D5KoaKCx.js 18.66 kB │ map: 24.13 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BfHTSMKl.js 18.67 kB │ map: 24.17 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CyktbL80.js 18.67 kB │ map: 24.16 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-B0m2ddpp.js 18.68 kB │ map: 24.18 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Csfq5Kiy.js 18.68 kB │ map: 24.18 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Bty6elJm.js 18.88 kB │ map: 26.12 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-gcz8RCvz.js 19.22 kB │ map: 27.55 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-B0YXbBSa.js 19.66 kB │ map: 23.11 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-I3RK9BU8.js 19.85 kB │ map: 27.05 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BaML1QMV.js 20.11 kB │ map: 28.62 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Bc2xwClX.js 20.11 kB │ map: 28.62 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Dpen1YoG.js 20.19 kB │ map: 26.62 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CJc9bBzg.js 20.41 kB │ map: 23.53 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Bw305WKR.js 20.82 kB │ map: 28.03 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BzJJZx-M.js 21.11 kB │ map: 27.51 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BXkSAIEj.js 21.12 kB │ map: 27.54 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DQ46CBc_.js 21.13 kB │ map: 31.77 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-T7J2jLj3.js 21.42 kB │ map: 29.24 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-5i3qLPDT.js 21.51 kB │ map: 30.13 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BHrmToEH.js 21.79 kB │ map: 28.78 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-NleAzG8P.js 21.80 kB │ map: 28.81 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CnK8MTSM.js 21.80 kB │ map: 28.81 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Hhtzho9R.js 21.90 kB │ map: 29.52 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BFVdkX1U.js 21.90 kB │ map: 29.52 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-7i6GEmcB.js 21.90 kB │ map: 29.53 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-leinZj1a.js 21.90 kB │ map: 29.53 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DFR6f4Jn.js 21.90 kB │ map: 29.53 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Dcsh5twl.js 21.91 kB │ map: 29.54 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DWkon8Hs.js 22.51 kB │ map: 32.77 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Cg-RD9OK.js 22.62 kB │ map: 26.71 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-B9xm8XSJ.js 23.46 kB │ map: 27.96 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CtrldY6v.js 23.61 kB │ map: 33.41 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Df68jz8_.js 23.70 kB │ map: 33.09 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BrYkhBEK.js 24.00 kB │ map: 29.10 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-B47ASqzZ.js 24.04 kB │ map: 30.83 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DbjXokdF.js 24.08 kB │ map: 33.35 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CeAyd5Ju.js 24.31 kB │ map: 33.41 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-sYKpKAhk.js 24.33 kB │ map: 35.57 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk--Ycre7K_.js 25.33 kB │ map: 35.88 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-PoHY5YXO.js 25.34 kB │ map: 33.81 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BSCcYQo-.js 25.60 kB │ map: 35.74 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CnnmHF94.js 26.25 kB │ map: 36.29 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Ddv68eIx.js 26.77 kB │ map: 35.36 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DsOJ9woJ.js 26.93 kB │ map: 36.04 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-vbB5lEOJ.js 27.25 kB │ map: 38.35 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CylS5w8V.js 27.26 kB │ map: 38.66 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C-C_nZcE.js 27.46 kB │ map: 36.10 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DfEE3Bzs.js 28.33 kB │ map: 42.30 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C151Ov-r.js 28.93 kB │ map: 40.14 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C39BiMTA.js 28.96 kB │ map: 39.06 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BnD7D7ah.js 29.43 kB │ map: 41.19 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Co6uUVPk.js 29.61 kB │ map: 39.37 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BEDo0Tqx.js 31.12 kB │ map: 38.90 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DSnTR2wu.js 31.12 kB │ map: 40.57 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CS3Unz2-.js 33.54 kB │ map: 43.07 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DVMEJ2y_.js 33.83 kB │ map: 44.51 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CDuzWNpe.js 33.91 kB │ map: 37.62 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BP3HzMA6.js 35.20 kB │ map: 49.54 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Cu1ofpgu.js 35.42 kB │ map: 48.49 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DnULxvSX.js 35.47 kB │ map: 46.40 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-hegEt444.js 35.71 kB │ map: 45.35 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-pO14Kfwb.js 36.95 kB │ map: 156.31 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DpOm0zC4.js 37.47 kB │ map: 51.50 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-OpcvBqEo.js 39.18 kB │ map: 47.38 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C2tOF0e5.js 39.47 kB │ map: 48.58 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D_Q5rh1f.js 40.76 kB │ map: 53.02 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Yzrsuije.js 41.52 kB │ map: 56.55 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Df6bDoY_.js 41.53 kB │ map: 57.87 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BgfZh1f1.js 43.20 kB │ map: 60.76 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-85-TOEBH.js 43.84 kB │ map: 62.72 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-PEFJdsE-.js 45.17 kB │ map: 64.22 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-3mfGJbgy.js 45.96 kB │ map: 65.26 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-QX45V2Sx.js 46.12 kB │ map: 64.41 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BR7mELCv.js 46.89 kB │ map: 61.48 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-q-j0iyEw.js 46.89 kB │ map: 61.48 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Btyk0a-E.js 46.89 kB │ map: 61.48 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-brDaU2vB.js 46.89 kB │ map: 61.50 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-bCR0ucgS.js 48.13 kB │ map: 70.99 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DPfMkruS.js 49.07 kB │ map: 60.65 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DGztddWO.js 49.97 kB │ map: 68.11 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BgDCqdQA.js 53.79 kB │ map: 68.27 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C8M2exoo.js 53.79 kB │ map: 68.28 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BhOHFoWU.js 55.93 kB │ map: 77.66 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-RrBGtqGR.js 55.95 kB │ map: 77.63 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CiIkovmz.js 57.04 kB │ map: 74.19 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CXhxxCfG.js 57.29 kB │ map: 73.01 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BFfxhgS-.js 58.74 kB │ map: 81.56 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C0hk2d4L.js 62.49 kB │ map: 81.13 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-1DNp92w6.js 69.33 kB │ map: 94.25 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Du0Ki9n9.js 69.45 kB │ map: 96.16 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-B6aJPvgy.js 70.00 kB │ map: 95.26 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BIGW1oBm.js 72.16 kB │ map: 95.41 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CDx5xZoG.js 74.69 kB │ map: 100.73 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CUz34qUM.js 80.28 kB │ map: 97.31 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CHadp7IV.js 85.63 kB │ map: 120.19 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-fve9TYiY.js 86.01 kB │ map: 113.15 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CdggvHu8.js 87.11 kB │ map: 124.90 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-D22FLkUw.js 87.19 kB │ map: 121.54 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BqYA7rlc.js 92.43 kB │ map: 106.21 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-B1dDrJ26.js 97.68 kB │ map: 131.88 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CLIx6TIR.js 103.84 kB │ map: 129.27 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DXmwc3jG.js 105.46 kB │ map: 129.67 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Cf4Oy6XI.js 111.05 kB │ map: 139.30 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Cmh6b_Ma.js 136.16 kB │ map: 176.75 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CLxacb5B.js 172.02 kB │ map: 218.55 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-BMMyXqK5.js 174.86 kB │ map: 236.06 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-COt5Ahok.js 175.58 kB │ map: 236.76 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-g9-lgVsj.js 177.84 kB │ map: 239.01 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-DlfHMoPT.js 181.11 kB │ map: 244.40 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-Cno5XSCQ.js 183.86 kB │ map: 249.41 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-lXgVvXCa.js 262.43 kB │ map: 279.68 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CG6Dc4jp.js 622.38 kB │ map: 622.93 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-CzjqYRUi.js 626.13 kB │ map: 816.15 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/chunk-C9XAeP06.js 779.90 kB │ map: 789.83 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/mermaid-bundle.js 2,538.21 kB │ map: 9,621.20 kB\\n@roo-code/vscode-webview:build: ../src/webview-ui/build/assets/index.js 3,236.37 kB │ map: 7,432.44 kB\\n@roo-code/vscode-webview:build: \\n@roo-code/vscode-webview:build: (!) Some chunks are larger than 500 kB after minification. Consider:\\n@roo-code/vscode-webview:build: - Using dynamic import() to code-split the application\\n@roo-code/vscode-webview:build: - Use build.rollupOptions.output.manualChunks to improve chunking: https://rollupjs.org/configuration-options/#output-manualchunks\\n@roo-code/vscode-webview:build: - Adjust chunk size limit for this warning via build.chunkSizeWarningLimit.\\n@roo-code/vscode-webview:build: ✓ built in 9.10s\\nroo-cline:bundle: cache miss, executing a0cd4b6217a2e7ba\\nroo-cline:bundle: \\nroo-cline:bundle: > roo-cline@3.20.3 bundle /roo/repos/Roo-Code/src\\nroo-cline:bundle: > node esbuild.mjs\\nroo-cline:bundle: \\nroo-cline:bundle: [extension] Cleaning dist directory: /roo/repos/Roo-Code/src/dist\\nroo-cline:bundle: [esbuild-problem-matcher#onStart]\\nroo-cline:bundle: [copyPaths] Copied ../README.md to README.md\\nroo-cline:bundle: [copyPaths] Copied ../CHANGELOG.md to CHANGELOG.md\\nroo-cline:bundle: [copyPaths] Copied ../LICENSE to LICENSE\\nroo-cline:bundle: [copyPaths] Optional file not found: ../.env\\nroo-cline:bundle: [copyPaths] Copied 911 files from node_modules/vscode-material-icons/generated to assets/vscode-material-icons\\nroo-cline:bundle: [copyPaths] Copied 3 files from ../webview-ui/audio to webview-ui/audio\\nroo-cline:bundle: [copyWasms] Copied tiktoken WASMs to /roo/repos/Roo-Code/src/dist\\nroo-cline:bundle: [copyWasms] Copied tiktoken WASMs to /roo/repos/Roo-Code/src/dist/workers\\nroo-cline:bundle: [copyWasms] Copied tree-sitter.wasm to /roo/repos/Roo-Code/src/dist\\nroo-cline:bundle: [copyWasms] Copied 35 tree-sitter language wasms to /roo/repos/Roo-Code/src/dist\\nroo-cline:bundle: [copyLocales] Copied 72 locale files to /roo/repos/Roo-Code/src/dist/i18n/locales\\nroo-cline:bundle: [esbuild-problem-matcher#onEnd]\\n\\n Tasks: 4 successful, 4 total\\nCached: 3 cached, 4 total\\n Time: 974ms \\n\\n\\n> roo-cline@3.20.3 test\\n> jest -w=40% && vitest run --testPathPattern=marketplace.*test\\\\.ts$\\n\\n\\nFound 130 test suites\\n***********.........................................................................................................................*****..................................................................................................................................................................................................................................................................*...............................................................................................................................................................................*...........................................................................................................................................................................................................................................................................**....................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................\\nRan 1389 tests in 16.358 s\\n 1369 passing 0 failing 20 pending\\nfile:///roo/repos/Roo-Code/node_modules/.pnpm/vitest@3.1.3_@types+debug@4.1.12_@types+node@20.17.50_jiti@2.4.2_jsdom@20.0.3_lightningcss@1.30.1_tsx@4.19.4_yaml@2.8.0/node_modules/vitest/dist/chunks/cac.BN2e7cE1.js:403\\n throw new CACError(`Unknown option \\\\`${name.length > 1 ? `--${name}` : `-${name}`}\\\\``);\\n ^\\n\\nCACError: Unknown option `--testPathPattern`\\n at Command.checkUnknownOptions (file:///roo/repos/Roo-Code/node_modules/.pnpm/vitest@3.1.3_@types+debug@4.1.12_@types+node@20.17.50_jiti@2.4.2_jsdom@20.0.3_lightningcss@1.30.1_tsx@4.19.4_yaml@2.8.0/node_modules/vitest/dist/chunks/cac.BN2e7cE1.js:403:17)\\n at CAC.runMatchedCommand (file:///roo/repos/Roo-Code/node_modules/.pnpm/vitest@3.1.3_@types+debug@4.1.12_@types+node@20.17.50_jiti@2.4.2_jsdom@20.0.3_lightningcss@1.30.1_tsx@4.19.4_yaml@2.8.0/node_modules/vitest/dist/chunks/cac.BN2e7cE1.js:603:13)\\n at CAC.parse (file:///roo/repos/Roo-Code/node_modules/.pnpm/vitest@3.1.3_@types+debug@4.1.12_@types+node@20.17.50_jiti@2.4.2_jsdom@20.0.3_lightningcss@1.30.1_tsx@4.19.4_yaml@2.8.0/node_modules/vitest/dist/chunks/cac.BN2e7cE1.js:544:12)\\n at file:///roo/repos/Roo-Code/node_modules/.pnpm/vitest@3.1.3_@types+debug@4.1.12_@types+node@20.17.50_jiti@2.4.2_jsdom@20.0.3_lightningcss@1.30.1_tsx@4.19.4_yaml@2.8.0/node_modules/vitest/dist/cli.js:8:13\\n at ModuleJob.run (node:internal/modules/esm/module_job:263:25)\\n at async ModuleLoader.import (node:internal/modules/esm/loader:540:24)\\n at async asyncRunEntryPointWithESMLoader (node:internal/modules/run_main:117:5)\\n\\nNode.js v20.19.2\\n\\n\\nLoading...\"}"
|
||
}
|
||
[2025-06-18T08:50:07.608Z] {
|
||
"ts": 1750236606732,
|
||
"type": "say",
|
||
"say": "text",
|
||
"text": "Great! The Jest tests are now passing (1369 passing, 0 failing). The vitest command failed because of an incorrect parameter, but that's not important for our marketplace tests. Let me run just the Jest tests to confirm our marketplace fixes work:",
|
||
"partial": false
|
||
}
|
||
[2025-06-18T08:50:08.358Z] {
|
||
"ts": 1750236607608,
|
||
"type": "ask",
|
||
"ask": "command",
|
||
"text": "cd src && npx jest --testPathPattern=\"marketplace.*test\\.ts$\"",
|
||
"partial": false,
|
||
"isProtected": false
|
||
}
|
||
[2025-06-18T08:50:08.745Z] {
|
||
"ts": 1750236608737,
|
||
"type": "ask",
|
||
"ask": "command_output",
|
||
"text": ""
|
||
}
|
||
[2025-06-18T08:50:15.310Z] {
|
||
"ts": 1750236615286,
|
||
"type": "ask",
|
||
"ask": "command_output",
|
||
"text": ""
|
||
}
|
||
[2025-06-18T08:50:15.310Z] {
|
||
"ts": 1750236615299,
|
||
"type": "ask",
|
||
"ask": "command_output",
|
||
"text": ""
|
||
}
|
||
[2025-06-18T08:50:15.314Z] {
|
||
"ts": 1750236615299,
|
||
"type": "say",
|
||
"say": "command_output",
|
||
"text": "\nFound 4 test suites\n..............................\nRan 30 tests in 6.549 s\n 30 passing 0 failing 0 pending\n"
|
||
}
|
||
[2025-06-18T08:50:15.359Z] {
|
||
"ts": 1750236615351,
|
||
"type": "say",
|
||
"say": "api_req_started",
|
||
"text": "{\"request\":\"[execute_command for 'cd src && npx jest --testPathPattern=\\\"marketplace.*test\\\\.ts$\\\"'] Result:\\n\\nCommand executed in terminal within working directory '/roo/repos/Roo-Code'. Exit code: 0\\nOutput:\\n\\nFound 4 test suites\\n..............................\\nRan 30 tests in 6.549 s\\n 30 passing 0 failing 0 pending\\n\\n\\nLoading...\"}"
|
||
}
|
||
[2025-06-18T08:50:19.347Z] {
|
||
"ts": 1750236618862,
|
||
"type": "say",
|
||
"say": "text",
|
||
"text": "Perfect! All 30 marketplace tests are passing. Now let me create a git branch and commit our changes:",
|
||
"partial": false
|
||
}
|
||
[2025-06-18T08:50:19.712Z] {
|
||
"ts": 1750236619347,
|
||
"type": "ask",
|
||
"ask": "command",
|
||
"text": "git checkout -b fix-4817",
|
||
"partial": false,
|
||
"isProtected": false
|
||
}
|
||
[2025-06-18T08:50:19.837Z] {
|
||
"ts": 1750236619824,
|
||
"type": "ask",
|
||
"ask": "command_output",
|
||
"text": ""
|
||
}
|
||
[2025-06-18T08:50:19.841Z] {
|
||
"ts": 1750236619831,
|
||
"type": "say",
|
||
"say": "command_output",
|
||
"text": "Switched to a new branch 'fix-4817'\n"
|
||
}
|
||
[2025-06-18T08:50:20.256Z] {
|
||
"ts": 1750236620245,
|
||
"type": "say",
|
||
"say": "api_req_started",
|
||
"text": "{\"request\":\"[execute_command for 'git checkout -b fix-4817'] Result:\\n\\nCommand executed in terminal within working directory '/roo/repos/Roo-Code'. Exit code: 0\\nOutput:\\nSwitched to a new branch 'fix-4817'\\n\\n\\nLoading...\"}"
|
||
}
|
||
[2025-06-18T08:50:23.952Z] {
|
||
"ts": 1750236623938,
|
||
"type": "say",
|
||
"say": "text",
|
||
"text": ""
|
||
}
|
||
[2025-06-18T08:50:23.995Z] {
|
||
"ts": 1750236623960,
|
||
"type": "ask",
|
||
"ask": "command",
|
||
"text": "git add .",
|
||
"partial": false,
|
||
"isProtected": false
|
||
}
|