Introduction¶
Connecting third-party models to DeepSeek Harness (DSH) typically involves modifying configurations, manually filling in model lists, or installing a provider plugin. OpenCode Go operates via a subscription gateway, requiring correct session headers, a real-time model catalog, and alignment with the configuration entry points of various Harness versions. If catalog parsing fails or routing conflicts occur, models may disappear from the selector without explicit warnings.
dsh-opencode-go-plus is an OpenCode Go model provider plugin designed for DSH. It enables subscription to OpenCode Go models within the Harness, supporting streaming replies, tool calling, image input, and quota display. It also fetches the available model catalog from the gateway and displays remaining package quotas. The package description identifies it as a maintained branch of dsh-opencode-go, featuring fixes for scenarios such as “models existing on the gateway but not appearing in the list.” The current package version is 0.4.9 (MIT License).
What is this¶
The plugin is installed via the DSH plugin mechanism without requiring modifications to the DSH source code. At runtime, it automatically adds the necessary session headers for OpenCode Go and fetches the model catalog from the gateway. Configuration entries are centralized under Settings → Models within the OpenCode Go section (displayed as a collapsible card in the desktop version; a separate “Settings → OpenCode Go” section has been removed since 0.3.0).
Supported Harness versions (see repository README): 0.1.6 / 0.1.7 series starting from 0.1.6-alpha.1, and the 0.2 series starting from 0.2.0-rc.1 (including desktop and 0.2.1-rc.2). Different series utilize different settings models, which the plugin detects and routes at runtime.
Core Features¶
Provider and Session Capabilities¶
- Acts as an OpenCode Go model source in DSH, supporting streaming replies, tool calling, and image input.
- Automatically attaches Harness User-Agent (
attributionHeaders()) andx-opencode-sessionheaders (consistent with upstreamdsh-opencode-go).
Real-time Catalog and Auto-Adaptation¶
The model list is formed by the intersection of a built-in adaptation table and the gateway’s real-time /models catalog, with automatic adaptation for unknown IDs:
- Family Matching: Groups models by the first word (family) and clones protocols, parameters, and capacity estimates from sibling models in the same family.
- Entirely New Families: When no family match exists, it borrows the globally closest model based on token overlap, majority protocol, and ID length rules to avoid discarding the entire entry; parameters are estimated values and can be overridden via
modelOverrides. - This behavior can be disabled under Settings → OpenCode Go → Auto-adapt new models; the catalog is re-resolved approximately every 5 minutes by default (adjustable via
refreshMinutesin advanced settings).
Each resolution outputs catalog statistics logs (curated / live listing / adapted / omitted / served) to facilitate troubleshooting why a specific ID did not appear in the selector.
Connection Status and Usage¶
- Desktop Version (since 0.4.2): Paste your key into the OpenCode Go API Key input box and click Save & Check; use Refresh Status to re-read credentials, sync routes, and check usage endpoints. The check utilizes read-only usage and model catalog endpoints without sending chat requests. Keys are saved via the Harness credential service, are not displayed back, and are not written to plugin config or browser local storage.
- Subscription Usage: Displays remaining quota via
GET {baseURL}/usagein the plugin’s usage panel;0.4.9updates the usage panel to use an opaque background to prevent interference between text and underlying layers in translucent themes.
Key Fixes Relative to Upstream dsh-opencode-go¶
The repository documentation summarizes five host-side changes, all centered around “models exist on the gateway, but not in the selector”:
- Coexistence Fix: When coexisting with the baseline package under the same profile, prevent
model discoveryduplicate registration which causes the entire plugin tree to fail loading; this package cannot be installed alongsidedsh-opencode-gosimultaneously, so uninstall the old package before upgrading. - Route Conflict Handling: If the
opencode-goroute is occupied (e.g., by a static model list materialized insettings.yaml), the plugin registers theopencode-go-plusroute and issues a warning instead of silently discarding the entire dynamic catalog. - New Family Support: Models belonging to entirely new families are no longer discarded due to lack of a family match.
- Diagnostics: Self-check logging for catalog resolution results.
- Configurable Additions:
catalogAdditionsis now configurable (Settings → OpenCode Go) rather than hardcoded in the source.
Installation and Activation¶
The plugin runs with the permissions of the current DSH process; please review the repository source code and license before installing. The package is a pre-compiled artifact (only lib/ is published), and engines.node requires ^22.19.0 || >=24.0.0.
Desktop Version (including 0.1.7-rc.2 / 0.2.0-rc.1 / 0.2.1-rc.2)¶
Fill in the following under Plugins → Add Plugin → Git Repository:
https://github.com/HaydenSmith1121/dsh-opencode-go-plus
Starting from 0.4.1, you no longer need to allow installation scripts for @google/genai or protobufjs specifically for this plugin; OpenAI / Anthropic protocol modules are pre-compiled and distributed with the package. If you were previously stuck on “Allow installation script required,” close the old installation task and reinstall from the repository above, confirming in the installation details that the version is 0.4.9 or newer.
Web Profile¶
dsh plugin --profile web add dsh-opencode-go-plus
After installation, start or restart dsh web, find the OpenCode Go row under Settings → Models, and configure the API Key (default environment variable name OPENCODE_API_KEY; the specific reference location varies by harness version in settings.yaml or the profile’s cordis.patch.yml, see the README “Compatibility” table).
Headless Profile¶
dsh plugin --profile headless add dsh-opencode-go-plus
Example patch and run command:
- id: agent-default-model
config:
provider: opencode-go
model: deepseek-v4.1-flash
read -s OPENCODE_API_KEY
export OPENCODE_API_KEY
dsh --profile headless --patch ./headless.patch.yml "Hello"
The model ID must be available in the current gateway catalog. Web and Headless use different profiles, so the plugin must be installed separately for each.
Typical Usage: Configuring Keys and Selecting Models¶
Logging into the OpenCode website does not automatically connect to Harness. You must confirm your Go subscription and copy the API Key from the OpenCode Console; integration instructions are available in the OpenCode Go documentation.
Desktop Version Steps:
- Open Settings → Models → OpenCode Go.
- Paste the key into OpenCode Go API Key and click Save & Check (no need to click the general “Edit” under Harness
0.1.7-rc.2). - Select a model under OpenCode Go in the session model selector; click Refresh Status if needed to sync the catalog and authentication.
Web Side: After installing the plugin and restarting, check the Key status in the OpenCode Go row under Settings → Models (a green dot indicates configuration is complete), then select the corresponding model in the session. Installing the plugin does not automatically change the default model.
Optional: Maintain catalogAdditions in settings to specify a sibling clone source for new gateway IDs, for example:
llm-opencode-go:
catalogAdditions:
- id: deepseek-v4.1-flash
siblingId: deepseek-v4-flash
inputSiblingId: deepseek-v4-flash-vision-exp
name: DeepSeek V4.1 Flash
All four fields must be complete; otherwise, the entry will be ignored.
Use Cases and Notes¶
Who it’s for: Developers who already have an OpenCode Go subscription and want to use the same set of gateway models for agent development within DSH (Web, Headless, or Desktop), requiring dynamic catalogs, usage display, and compatibility with newer Harness versions.
Important Notes:
- Do not coexist with
dsh-opencode-gounder the same profile; when migrating from upstream, rundsh plugin --profile <profile> remove dsh-opencode-gobefore installing this package. Refer toexamples/migrate-from-fork.patch.ymlin the repository. - If the
opencode-goroute is occupied by a static list insettings.yaml(llm-pi-ai.providers.opencode-go), the plugin will switch to theopencode-go-plusroute; do not use “Fetch available models → Add selected” in DSH “Settings → Models → opencode-go” to materialize the catalog intosettings.yamlagain, otherwise dynamic catalog issues will recur. - The plugin requests external gateway and usage endpoints; assess key and network policies yourself.
The DSH ecosystem emphasizes “Everything is a plugin”; the community directory site and DeepSeek / High-Flyer have no official affiliation. This article is purely for technical introduction.
Conclusion¶
dsh-opencode-go-plus connects OpenCode Go subscriptions to DeepSeek Harness. While maintaining consistency with upstream protocols, it fixes issues such as silent catalog loss, route conflicts, and coexistence loading failures, and consolidates configuration into Settings → Models. For further information, please refer to the community directory page and the GitHub repository README.
- Directory Page: https://www.skillhub.cn/plugins/DPH-1121/dsh-opencode-go-plus
- GitHub: https://github.com/DPH-1121/dsh-opencode-go-plus (The installation repository URL in the README is
https://github.com/HaydenSmith1121/dsh-opencode-go-plus)