NOirBRight/dsh-llm-opencode-go 预览 preview

NOirBRight/dsh-llm-opencode-go

OpenCode Go LLM provider plugin for DeepSeek Harness

Project Overview项目介绍

DSH plugin integrating OpenCode Go into DeepSeek Harness. Chat reuses the shared pi-ai adapter, dispatching per model to Completions, Responses, or Anthropic Messages via one route. Model discovery and subscription usage stay on native Go endpoints, handled by the Host. Requires DeepSeek Harness 0.1.0-rc.6 or later. Provider settings edit only over loopback by default; remote use needs remoteManagement enabled with --trusted-host, otherwise use SSH port forwarding.

DSH 插件,为 DeepSeek Harness 集成 OpenCode Go LLM。聊天通过共享的 pi-ai 适配器,按模型在 Completions、Responses、Anthropic Messages 间自动选择协议;模型发现与订阅用量仅由 Host 读取原生 Go 端点。需 DeepSeek Harness 0.1.0-rc.6 及以上。配置编辑默认仅本地回路;远程访问需在受信主机上开启 remoteManagement 并配合 --trusted-host,或使用 SSH 端口转发。

Or use CLI install (for developers)或使用命令行安装(适合开发者)

CLI Install命令行安装

dsh plugin --profile web add github:NOirBRight/dsh-llm-opencode-go

NOirBRight/dsh-llm-opencode-go 加入你的 DSH 配置(web profile)即可启用。

READMEREADME

dsh-llm-opencode-go

English | 中文

OpenCode Go integration for DeepSeek Harness. Chat uses the shared pi-ai adapter. Completions, Responses, or Anthropic Messages are selected per model from the official Go table. Model discovery and subscription usage stay on native Go endpoints because those capabilities are not part of the chat protocol.

The package root exposes the Cordis plugin contract and OpenCodeGoAdapter. The same artifact exports ./client, which contributes the OpenCode Go card under Settings → LLM Providers. The protocol split is recorded in ADR 0001.

Compatibility

Host @deepseek-ai/dsh-* packages are not version-locked: peers are * and optional. devDependencies pin the compile target (0.1.5-rc.1). Cordis stays >=4.0.2 <5.0.0.

Verified Hosts in package.json#dsh.compatibility.dshReleases are evidence, not an allowlist. Unknown newer Hosts warn once and keep the normal mount path. Only a reproduced failure is blocklisted.

catalogId and the unresolved unknown account state are attached at runtime. Published dsh-llm-providers-ui 0.2.8 omits those fields and treats unknown as unconnected; they only take effect on a newer Owner.

LLM Providers UI ownership

The LLM Providers Settings page (settings.section id: providers with child settings.provider.item) and the shared llm-providers order store are owned solely by dsh-llm-providers-ui.

  • This plugin contributes only its keyed card (key: llm-opencode-go) and its Host llm route; it does not install the page or the shared llm-providers namespace. Load order with the owner does not matter.
  • Without the owner (Headless or Web without dsh-llm-providers-ui): the Host model route opencode-go still works; in Web the Providers page and this card are omitted and the browser console warns that the owner is missing. A Web release composition test rejects a bundle graph that ships provider cards without the owner.
  • The nav globe glyph is a temporary Alpha.4 DOM adapter owned only by dsh-llm-providers-ui (src/client/nav-icon.ts); this plugin does not ship that adapter.

Install dsh-llm-providers-ui explicitly in the profile alongside provider plugins (see that package's cordis.patch.yml).

Installation

Install the published package through the profile manager:

dsh plugin --profile web add --force \
  https://github.com/NOirBRight/dsh-llm-providers-ui/releases/download/v0.2.9/dsh-llm-providers-ui-0.2.9.tgz
dsh plugin --profile web add --force \
  https://github.com/NOirBRight/dsh-llm-opencode-go/releases/download/v0.1.29/dsh-llm-opencode-go-0.1.29.tgz
dsh web

The package contains release-ready lib artifacts. Install dsh-llm-providers-ui alongside this plugin to provide the shared LLM Providers page.

The Host Connection RPC authenticates browser requests through the Web trust fence. Durable settings remain enabled only for loopback pages; non-loopback pages keep their settings process-local even when their authority is trusted. Use SSH forwarding when remote editing is needed.

Put this plugin in the profile bundle with dsh-llm-providers-ui; the owner enumerates every installed provider card.

Web configuration

Open Settings → LLM Providers → OpenCode Go. The provider-management RPC returns only decoded settings, revision, and value-free credential status; API keys are write-only and never echoed or logged. The Connection RPC authenticates through the Web trust fence, while durable settings writes require a loopback settings scope; use SSH forwarding when the browser is remote.

The card saves the public base URL and model catalog together as one revision-fenced llm-opencode-go settings mutation. Fetch available models opens the picker immediately. The Host reads GET /zen/go/v1/models (OpenAI-shaped ids only) and fills name, context, vision, thinking, and protocol from a local snapshot, then from a live models.dev opencode-go overlay so newly published ids such as omen-alpha are not blank after Fetch.

When a key is stored, the card loads account quota while collapsed (and again on Fetch/Refresh). The Host reads GET &lt;baseURL&gt;/usage; remaining 5-hour, weekly, and monthly windows paint from a local cache on first open, then refresh in the background. The credential never crosses to the browser.

The model catalog starts collapsed and lists one row per model: a drag handle reorders rows (the order persists with the catalog), the chevron opens that row's context and capability flags, and the trash button removes it.

Plugin configuration

OpenCode Go Plugin card: API key, usage, and model catalog

The Models page lists saved opencode-go models and can select them. Current Harness releases do not expose a third-party editor slot inside that page, so this package owns its editor under LLM Providers.

Capability and protocol split

Chat uses one opencode-go route. The adapter does not re-register that route as a configurable provider (the pi-ai catalog already owns the directory entry). Per-model api selects:

openai-completions   POST {baseURL}/chat/completions
openai-responses     POST {baseURL}/responses
anthropic-messages   POST {baseURL minus trailing /v1}/v1/messages

Native independent capabilities remain Host-only:

model discovery   GET /zen/go/v1/models
subscription usage   GET /zen/go/v1/usage

Official provider documentation: https://opencode.ai/docs/zh-cn/go/

Config

- id: llm-opencode-go
  name: dsh-llm-opencode-go
  config:
    apiKeyEnv: OPENCODE_API_KEY
    baseURL: https://opencode.ai/zen/go/v1
    defaultContextWindow: 262144
    streamIdleTimeoutMs: 300000
    models:
      - id: muse-spark-1.2-contributor
        name: Muse Spark 1.2 Contributor
        contextWindow: 1048576
        maxTokens: 131072
        vision: true
        thinking: true
        defaultEffort: medium
        api: openai-responses
      - id: glm-5.3-flash
        name: GLM-5.3-Flash
        contextWindow: 1000000
        thinking: true
        defaultEffort: high
        api: openai-completions

The provider route remains opencode-go and the settings namespace remains llm-opencode-go. Only configured catalog models are accepted for chat. Per-row contextWindow is the DSH compaction budget. The fallback context window is 262,144 tokens.

Model capabilities

vision controls text/image input modalities. thinking enables selectable reasoning efforts. Known Go families pin a plugin defaultEffort when the session has not picked one. api is required for dispatch; unknown ids fall back to the documented family table.

Muse Spark requires the OpenCode workspace toggle for training-data models. DeepSeek V4 Flash and V4.1 Flash (deepseek-flash) require the toggle for models hosted in China. Those are account flags on https://opencode.ai, not plugin settings. The forward max option for Muse Spark 1.3 Contributor is intentionally shown, but the current OpenCode Go upstream rejects that value with HTTP 400; select xhigh until the upstream enum is expanded.

Model experience

The system prompt and provider-neutral messages are translated by PiAiAdapter into Completions, Responses, or Messages. Tool calls retain provider-issued ids. Images are encoded as base64 data URLs only for vision models.

Usage maps to Harness input/output counts. maxTokens is clamped against the configured context capacity by pi-ai.

Known limitations

  • A leftover ~/.dsh/.credentials.yaml.lock written by CodexHub (codexhub-atomic-lock=1) blocks every DSH credentials.set until the sidecar is deleted. See CodexHub docs/tasks/dsh-credentials-lock-interop.md.
  • This package does not call registerConfigurableProviders for opencode-go (duplicate directory with llm-pi-ai).
  • GenerateOptions.stop is not supported by the shared PiAiAdapter.

Release installation (Latest)

OpenCode Go models with per-model protocol routing, discovery, and usage. The release artifact targets DeepSeek Harness 0.1.5-rc.1 and 0.1.5-rc.2 and contains built Host/Client files only; it has no sibling-repository source, workstation path, link:, or workspace: dependency.

The dsh-llm-providers-ui package owns the LLM Providers page, navigation, and shared order store. This package owns only its provider card, models, credentials, and Host route. Install the Owner first for Web; headless Host routing works without the Owner.

Latest (Owner + this plugin; required together on Web):

dsh plugin --profile web add --force \
  https://github.com/NOirBRight/dsh-llm-providers-ui/releases/latest/download/dsh-llm-providers-ui-0.2.9.tgz
dsh plugin --profile web add --force \
  https://github.com/NOirBRight/dsh-llm-opencode-go/releases/latest/download/dsh-llm-opencode-go-0.1.29.tgz

Fixed versions (reproducible):

dsh plugin --profile web add --force \
  https://github.com/NOirBRight/dsh-llm-providers-ui/releases/download/v0.2.9/dsh-llm-providers-ui-0.2.9.tgz
dsh plugin --profile web add --force \
  https://github.com/NOirBRight/dsh-llm-opencode-go/releases/download/v0.1.29/dsh-llm-opencode-go-0.1.29.tgz

Update, uninstall, and verify:

# Update Owner + this plugin to Latest
dsh plugin --profile web add --force \
  https://github.com/NOirBRight/dsh-llm-providers-ui/releases/latest/download/dsh-llm-providers-ui-0.2.9.tgz
dsh plugin --profile web add --force \
  https://github.com/NOirBRight/dsh-llm-opencode-go/releases/latest/download/dsh-llm-opencode-go-0.1.29.tgz
# Verify the loaded version
dsh plugin --profile web list
dsh plugin --profile web doctor
# Uninstall only this plugin
dsh plugin --profile web remove dsh-llm-opencode-go

Configuration: use the plugin section in Settings for Web UI plugins, or the profile dsh.profile.bundles entry for Host-only plugins. Start with this README's minimal YAML/JSON example and provide credentials/backend addresses explicitly.

Rollback: rerun the fixed v0.1.29 command, verify the profile list, then restart the Web service once. Inspect journalctl --user -u dsh-web.service and dsh plugin --profile web doctor; never put a source checkout in the production profile.

Release and integrity: v0.1.29 · SHA256SUMS.

上一个 Prev ybkk-AIOS 下一个 Next dsh-updater-npm