From c12b8ab6c9eb416e893eba342479a13bc51bb275 Mon Sep 17 00:00:00 2001 From: ooovenenoso <120500656+ooovenenoso@users.noreply.github.com> Date: Mon, 22 Jun 2026 11:33:02 -0400 Subject: [PATCH] fix: add OpenCode setup provider aliases (#4700) Co-authored-by: Kevin <120500656+oooindefatigable@users.noreply.github.com> --- static/js/slashCommands.js | 4 +++ tests/test_slash_setup_provider_aliases.py | 29 ++++++++++++++++++++++ 2 files changed, 33 insertions(+) create mode 100644 tests/test_slash_setup_provider_aliases.py diff --git a/static/js/slashCommands.js b/static/js/slashCommands.js index 07d96dc9d..8ddb84c91 100644 --- a/static/js/slashCommands.js +++ b/static/js/slashCommands.js @@ -101,6 +101,8 @@ function _setupProviderFromInput(input) { xai: 'xai', grok: 'xai', nvidia: 'nvidia', + opencodezen: 'opencode-zen', + opencodego: 'opencode-go', }; return SETUP_PROVIDER_URLS[aliases[raw] || raw] || null; } @@ -129,6 +131,8 @@ function _extractSetupProviderCredential(input) { ['google', 'gemini'], ['gemini', 'gemini'], ['x ai', 'xai'], ['xai', 'xai'], ['grok', 'xai'], ['nvidia', 'nvidia'], + ['opencode zen', 'opencode-zen'], ['opencode-zen', 'opencode-zen'], + ['opencode go', 'opencode-go'], ['opencode-go', 'opencode-go'], ]; for (const [alias, key] of providerAliases) { const re = new RegExp('(^|\\s|[,;:])(' + alias.replace(/\s+/g, '\\s+') + ')(?=$|\\s|[,;:])', 'i'); diff --git a/tests/test_slash_setup_provider_aliases.py b/tests/test_slash_setup_provider_aliases.py new file mode 100644 index 000000000..0e50c7c48 --- /dev/null +++ b/tests/test_slash_setup_provider_aliases.py @@ -0,0 +1,29 @@ +import re +import subprocess +from pathlib import Path + + +def test_opencode_setup_provider_aliases_resolve(): + source = Path("static/js/slashCommands.js").read_text() + match = re.search( + r"const SETUP_PROVIDER_URLS = \{[\s\S]*?\nfunction _normalizeSetupBaseUrl", + source, + ) + assert match, "setup provider helper block not found" + helper_source = match.group(0).removesuffix("\nfunction _normalizeSetupBaseUrl") + script = helper_source + r""" +function assert(condition, message) { + if (!condition) throw new Error(message); +} +const zenFromCommand = _setupProviderFromInput('opencode zen'); +assert(zenFromCommand && zenFromCommand.url === 'https://opencode.ai/zen/v1', 'opencode zen command alias failed'); +const goFromCommand = _setupProviderFromInput('opencode-go'); +assert(goFromCommand && goFromCommand.url === 'https://opencode.ai/zen/go/v1', 'opencode-go command alias failed'); +const zenCredential = _extractSetupProviderCredential('opencode-zen sk-test'); +assert(zenCredential && zenCredential.provider.name === 'OpenCode Zen', 'opencode-zen credential provider failed'); +assert(zenCredential.credential === 'sk-test', 'opencode-zen credential extraction failed'); +const goCredential = _extractSetupProviderCredential('opencode go sk-test'); +assert(goCredential && goCredential.provider.name === 'OpenCode Go', 'opencode go credential provider failed'); +assert(goCredential.credential === 'sk-test', 'opencode go credential extraction failed'); +""" + subprocess.run(["node", "-e", script], check=True)