diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index aee91c77ee7..a7a46ecb7f2 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -82,7 +82,6 @@ body: - DeepSeek - Featherless AI - Fireworks AI - - Glama - Google Gemini - Google Vertex AI - Groq diff --git a/.roo/roomotes.yml b/.roo/roomotes.yml index 33f6b3bd57c..0ea30b93af7 100644 --- a/.roo/roomotes.yml +++ b/.roo/roomotes.yml @@ -1,25 +1,6 @@ version: "1.0" commands: - - name: Pull latest changes - run: git pull - timeout: 60 - execution_phase: task_run - name: Install dependencies run: pnpm install timeout: 60 - execution_phase: task_run - -github_events: - - event: issues.opened - action: - name: github.issue.fix - - event: issue_comment.created - action: - name: github.issue.comment.respond - - event: pull_request.opened - action: - name: github.pr.review - - event: pull_request_review_comment.created - action: - name: github.pr.comment.respond diff --git a/apps/web-roo-code/src/app/terms/terms.md b/apps/web-roo-code/src/app/terms/terms.md index 1880c6184ec..e5589909417 100644 --- a/apps/web-roo-code/src/app/terms/terms.md +++ b/apps/web-roo-code/src/app/terms/terms.md @@ -70,7 +70,7 @@ Customer may access and use the Service solely for its internal business purpose ## 6. Privacy & Data -Roo Code's Privacy Notice ([https://roocode.com/privacy](https://roocode.com/privacy)) explains how Roo Code collects and handles personal information. If Customer requires a DPA, email [support@roocode.com](mailto:support@roocode.com). +Roo Code's Privacy Notice ([https://roocode.com/privacy](https://roocode.com/privacy)) explains how Roo Code collects and handles personal information. If Customer requires a DPA, email [zgsm@sangfor.com.cn](mailto:zgsm@sangfor.com.cn). ## 7. Warranty Disclaimer @@ -98,4 +98,4 @@ The caps in Section 2 apply to all claims under the Agreement, whether in contra **Roo Code, Inc.** 98 Graceland Dr, San Rafael, CA 94901 USA -Email: [support@roocode.com](mailto:support@roocode.com) +Email: [zgsm@sangfor.com.cn](mailto:zgsm@sangfor.com.cn) diff --git a/apps/web-roo-code/src/components/chromes/footer.tsx b/apps/web-roo-code/src/components/chromes/footer.tsx index 91ce39e715e..18a96190e7a 100644 --- a/apps/web-roo-code/src/components/chromes/footer.tsx +++ b/apps/web-roo-code/src/components/chromes/footer.tsx @@ -225,7 +225,7 @@ export function Footer() {
- {message.text.substring(4)} -
- ) + } else if (message.text.indexOf("Connection error") === 0) { + body = t("chat:apiRequest.errorMessage.connection") } else { - // Non-HTTP-status-code error message - display the actual error text - body = message.text + // Non-HTTP-status-code error message - store full text as errorDetails + body = t("chat:apiRequest.errorMessage.unknown") + docsURL = "mailto:zgsm@sangfor.com.cn?subject=Unknown API Error" } + + // This isn't pretty, but since the retry logic happens at a lower level + // and the message object is just a flat string, we need to extract the + // retry information using this "tag" as a convention + const retryTimerMatch = message.text.match(/
+
{{regex}}",
"didSearch": "Roo searched this directory for {{regex}}",
"wantsToSearchOutsideWorkspace": "Roo wants to search this directory (outside workspace) for {{regex}}",
@@ -290,6 +288,11 @@
},
"taskCompleted": "Task Completed",
"error": "Error",
+ "errorDetails": {
+ "title": "Error Details",
+ "copyToClipboard": "Copy to Clipboard",
+ "copied": "Copied!"
+ },
"diffError": {
"title": "Edit Unsuccessful"
},
diff --git a/webview-ui/src/i18n/locales/en/settings.json b/webview-ui/src/i18n/locales/en/settings.json
index b4b5497cc73..2c4c6f05a2e 100644
--- a/webview-ui/src/i18n/locales/en/settings.json
+++ b/webview-ui/src/i18n/locales/en/settings.json
@@ -61,6 +61,16 @@
"slashCommands": {
"description": "Manage your slash commands to quickly execute custom workflows and actions. {{regex}}",
"didSearch": "Roo 已在此目錄中搜尋 {{regex}}",
"wantsToSearchOutsideWorkspace": "Roo 想要在此目錄(工作區外)中搜尋 {{regex}}",
@@ -297,6 +295,11 @@
"title": "編輯失敗"
},
"troubleMessage": "Roo 遇到問題...",
+ "errorDetails": {
+ "title": "錯誤詳細資訊",
+ "copyToClipboard": "複製到剪貼簿",
+ "copied": "已複製!"
+ },
"powershell": {
"issues": "您似乎遇到了 Windows PowerShell 的問題,請參閱此說明文件"
},
diff --git a/webview-ui/src/i18n/locales/zh-TW/settings.json b/webview-ui/src/i18n/locales/zh-TW/settings.json
index 842ca00416a..4e30a69f648 100644
--- a/webview-ui/src/i18n/locales/zh-TW/settings.json
+++ b/webview-ui/src/i18n/locales/zh-TW/settings.json
@@ -284,8 +284,6 @@
"vercelAiGatewayApiKey": "Vercel AI Gateway API 金鑰",
"getVercelAiGatewayApiKey": "取得 Vercel AI Gateway API 金鑰",
"apiKeyStorageNotice": "API 金鑰安全儲存於 VSCode 金鑰儲存中",
- "glamaApiKey": "Glama API 金鑰",
- "getGlamaApiKey": "取得 Glama API 金鑰",
"useCustomBaseUrl": "使用自訂基礎 URL",
"useReasoning": "啟用推理",
"useHostHeader": "使用自訂 Host 標頭",
@@ -975,8 +973,12 @@
},
"ui": {
"collapseThinking": {
- "label": "預設折疊“思考”訊息",
- "description": "啟用後,“思考”塊將預設折疊,直到您與其互動"
+ "label": "預設折疊「思考」訊息",
+ "description": "啟用後,「思考」塊將預設折疊,直到您與其互動"
+ },
+ "requireCtrlEnterToSend": {
+ "label": "需要 {{primaryMod}}+Enter 傳送訊息",
+ "description": "啟用後,必須按 {{primaryMod}}+Enter 傳送訊息,而不只是 Enter"
}
}
}
diff --git a/webview-ui/src/oauth/urls.ts b/webview-ui/src/oauth/urls.ts
index 8abf0ca4340..38acb839c43 100644
--- a/webview-ui/src/oauth/urls.ts
+++ b/webview-ui/src/oauth/urls.ts
@@ -4,10 +4,6 @@ export function getCallbackUrl(provider: string, uriScheme?: string) {
return encodeURIComponent(`${uriScheme || "vscode"}://${Package.publisher}.${Package.name}/${provider}`)
}
-export function getGlamaAuthUrl(uriScheme?: string) {
- return `https://glama.ai/oauth/authorize?callback_url=${getCallbackUrl("glama", uriScheme)}`
-}
-
export function getOpenRouterAuthUrl(uriScheme?: string) {
return `https://openrouter.ai/auth?callback_url=${getCallbackUrl("openrouter", uriScheme)}`
}
diff --git a/webview-ui/src/utils/__tests__/validate.test.ts b/webview-ui/src/utils/__tests__/validate.test.ts
index 3fed0f70c29..c8c90cfe2ed 100644
--- a/webview-ui/src/utils/__tests__/validate.test.ts
+++ b/webview-ui/src/utils/__tests__/validate.test.ts
@@ -24,16 +24,6 @@ describe("Model Validation Functions", () => {
outputPrice: 5.0,
},
},
- glama: {
- "valid-model": {
- maxTokens: 8192,
- contextWindow: 200000,
- supportsImages: true,
- supportsPromptCache: false,
- inputPrice: 3.0,
- outputPrice: 15.0,
- },
- },
requesty: {},
unbound: {},
litellm: {},
@@ -94,26 +84,6 @@ describe("Model Validation Functions", () => {
expect(result).toContain("model")
})
- it("returns undefined for valid Glama model", () => {
- const config: ProviderSettings = {
- apiProvider: "glama",
- glamaModelId: "valid-model",
- }
-
- const result = getModelValidationError(config, mockRouterModels, allowAllOrganization)
- expect(result).toBeUndefined()
- })
-
- it("returns error for invalid Glama model", () => {
- const config: ProviderSettings = {
- apiProvider: "glama",
- glamaModelId: "invalid-model",
- }
-
- const result = getModelValidationError(config, mockRouterModels, allowAllOrganization)
- expect(result).toBeUndefined()
- })
-
it("returns undefined for OpenAI models when no router models provided", () => {
const config: ProviderSettings = {
apiProvider: "openai",
@@ -193,25 +163,5 @@ describe("Model Validation Functions", () => {
)
expect(result).toBeUndefined() // Should exclude model-specific org errors
})
-
- it("returns undefined for valid IO Intelligence model", () => {
- const config: ProviderSettings = {
- apiProvider: "io-intelligence",
- glamaModelId: "valid-model",
- }
-
- const result = getModelValidationError(config, mockRouterModels, allowAllOrganization)
- expect(result).toBeUndefined()
- })
-
- it("returns error for invalid IO Intelligence model", () => {
- const config: ProviderSettings = {
- apiProvider: "io-intelligence",
- glamaModelId: "invalid-model",
- }
-
- const result = getModelValidationError(config, mockRouterModels, allowAllOrganization)
- expect(result).toBeUndefined()
- })
})
})
diff --git a/webview-ui/src/utils/validate.ts b/webview-ui/src/utils/validate.ts
index 5c04ebe926c..2f390f7dd77 100644
--- a/webview-ui/src/utils/validate.ts
+++ b/webview-ui/src/utils/validate.ts
@@ -45,11 +45,6 @@ function validateModelsAndKeysProvided(apiConfiguration: ProviderSettings): stri
return i18next.t("settings:validation.apiKey")
}
break
- case "glama":
- if (!apiConfiguration.glamaApiKey) {
- return i18next.t("settings:validation.apiKey")
- }
- break
case "unbound":
if (!apiConfiguration.unboundApiKey) {
return i18next.t("settings:validation.apiKey")