merge: integrate origin/master (v0.5.50) into gitea/new_feature
- Resolve conflicts in chatCore handlers: keep apiKey/streamErrorPatterns from the details-filters feature, adopt origin's stripContinuityFields, customToolNames, cache-inclusive usage accounting, and Responses-API SSE→JSON conversion - Adopt origin's provider usage handlers (codebuddy-intl, qoder creds) and modality detection (audio/video inputs) - Keep requestDetails apiKey column (schema v2) + masked key persistence Co-authored-by: CommandCodeBot <noreply@commandcode.ai>
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -226,7 +226,6 @@ export default function OAuthModal({ isOpen, provider, providerInfo, onSuccess,
|
||||
// Device code flow providers (must match oauth providers with flowType: "device_code")
|
||||
const deviceCodeProviders = [
|
||||
"github",
|
||||
"qwen",
|
||||
"kiro",
|
||||
"kimi",
|
||||
"kimi-coding",
|
||||
|
||||
@@ -21,7 +21,7 @@ const navItems = [
|
||||
{ href: "/dashboard/endpoint", label: "Endpoint & Key", icon: "api" },
|
||||
{ href: "/dashboard/providers", label: "Providers", icon: "dns" },
|
||||
// { href: "/dashboard/basic-chat", label: "Basic Chat", icon: "chat" }, // Hidden
|
||||
{ href: "/dashboard/combos", label: "Combos", icon: "layers" },
|
||||
{ href: "/dashboard/combos", label: "Combo & Vision Adapter", icon: "layers" },
|
||||
{ href: "/dashboard/usage", label: "Usage", icon: "bar_chart" },
|
||||
{ href: "/dashboard/quota", label: "Quota Tracker", icon: "data_usage" },
|
||||
{ href: "/dashboard/token-saver", label: "Token Saver", icon: "savings" },
|
||||
|
||||
@@ -416,6 +416,45 @@ devin auth login
|
||||
devin --version`,
|
||||
},
|
||||
},
|
||||
opendesign: {
|
||||
id: "opendesign",
|
||||
name: "OpenDesign",
|
||||
image: "/providers/opendesign.png",
|
||||
color: "#7C3AED",
|
||||
description: "OpenDesign — claude.ai/design open-sourced! Agent-native design skills pack",
|
||||
docsUrl: "https://github.com/manalkaff/opendesign",
|
||||
configType: "guide",
|
||||
notes: [
|
||||
{ type: "info", text: "OpenDesign ships as a plugin/skills pack installed into Claude Code, Cursor, OpenAI Codex, Gemini CLI, or OpenCode. It inherits the host agent's model config, so once your host points at 9Router, /opendesign design sessions route through 9Router automatically — no extra env vars needed." },
|
||||
{ type: "info", text: "Invoke with /opendesign <brief>. Covers decks, wireframes, interactive prototypes, design-system extraction, and brand systems, with a verifier subagent that checks output against the brief." },
|
||||
],
|
||||
guideSteps: [
|
||||
{ step: 1, title: "Install the plugin", desc: "Pick your host below and run the matching install command from the matrix." },
|
||||
{ step: 2, title: "No config needed", desc: "OpenDesign runs inside your host agent and uses its model config. If the host already routes through 9Router, /opendesign traffic does too." },
|
||||
{ step: 3, title: "Start designing", desc: "Invoke OpenDesign from your agent:", value: "/opendesign make a pitch deck for a seed-stage AI company, 10 slides", copyable: true },
|
||||
],
|
||||
codeBlock: {
|
||||
language: "bash",
|
||||
code: `# Claude Code
|
||||
/plugin marketplace add manalkaff/opendesign
|
||||
/plugin install opendesign@opendesign
|
||||
|
||||
# Cursor
|
||||
/add-plugin opendesign
|
||||
|
||||
# OpenAI Codex CLI
|
||||
/plugins # search "opendesign" -> Install Plugin
|
||||
|
||||
# OpenAI Codex App
|
||||
# Plugins sidebar -> OpenDesign (Design section) -> +
|
||||
|
||||
# Gemini CLI
|
||||
gemini extensions install https://github.com/manalkaff/opendesign
|
||||
|
||||
# OpenCode
|
||||
# Fetch and follow .opencode/INSTALL.md from the repo`,
|
||||
},
|
||||
},
|
||||
// HIDDEN: gemini-cli
|
||||
// "gemini-cli": {
|
||||
// id: "gemini-cli",
|
||||
|
||||
@@ -135,4 +135,16 @@ export const TTS_PROVIDER_CONFIG = {
|
||||
voiceKey: "gemini-tts-voices",
|
||||
voicesPerModel: true,
|
||||
},
|
||||
"xiaomi-mimo": {
|
||||
hasLanguageDropdown: false,
|
||||
hasModelSelector: true,
|
||||
hasBrowseButton: false,
|
||||
hasVoiceIdInput: false,
|
||||
hasStyleInput: true, // style/voice instructions (role: user)
|
||||
hasLanguageHint: true, // language dropdown (Auto-detect default); voices are language-independent
|
||||
languageOptions: ["Chinese", "English"],
|
||||
voiceSource: "hardcoded",
|
||||
modelKey: "xiaomi-mimo-tts-models",
|
||||
voicesPerModel: true,
|
||||
},
|
||||
};
|
||||
|
||||
@@ -112,6 +112,12 @@ async function runHeavyStartup() {
|
||||
.then(({ startQuotaAutoPing }) => startQuotaAutoPing())
|
||||
.catch((e) => console.log("[AutoPing] scheduler start failed:", e.message));
|
||||
}
|
||||
|
||||
// Proactive OAuth token refresh (e.g. grok-cli ~6h TTL). Module is idempotent
|
||||
// and also started from custom-server.js when that entry is used.
|
||||
import("@/sse/services/backgroundTokenRefresh.js")
|
||||
.then(({ startBackgroundTokenRefresh }) => startBackgroundTokenRefresh())
|
||||
.catch((e) => console.log("[BackgroundTokenRefresh] scheduler start failed:", e.message));
|
||||
}
|
||||
|
||||
function hasQuotaAutoPingEnabled(settings) {
|
||||
|
||||
Reference in New Issue
Block a user