跳过主要内容
X

dsh-opencode-free

x5427876/dsh-opencode-free

在 DeepSeek Harness 中使用免费的 OpenCode Zen 模型:默认匿名,可选填 Zen key;模型表在运行时从 Zen 官方列表读取,匿名请求会按免费档校验做适配,并有带日期的实测记录。

安装

dsh plugin --profile web add github:x5427876/dsh-opencode-free

README

dsh-opencode-free

English | 繁體中文

npm CI License: MIT

Use free OpenCode Zen models in DeepSeek Harness (DSH), without installing OpenCode or running a separate server. Anonymous access is the default; a Zen API key is optional.

  • Works on the anonymous tier. Zen's free tier decides by request content (tool declarations, an <env> block, the TLS cipher list), not only by headers. The plugin shapes anonymous requests to match; see what the free tier checks, with dated measurements.
  • No built-in model list. The picker follows Zen's official model list: chat models whose declared prices are all zero. Refreshes are lazy, and a failed refresh keeps the last good list. Hide individual models from the detail page.
  • Native in DSH. Models appear under OpenCode Zen Free with streaming, reasoning, tool calls, usage, and cancellation.
  • Availability checks. The detail page shows probe results and latency. Quota limits and gate refusals do not remove models.
  • One release, one DSH. Each release supports exactly one DSH version.

[!WARNING] This is an unofficial plugin, not affiliated with OpenCode or DeepSeek. Anonymous access sends OpenCode CLI-format identity fields from this plugin, not the official CLI, and has no third-party access guarantee: upstream changes may break it without notice. Anonymous quota is shared by callers behind the same egress IP.

The plugin runs with DSH's privileges and wraps process-wide HTTP entry points for the Zen inference endpoint. Read Security and limitations and DSH's safety notice before installing.

Quick start

Requirements

RequirementVersion
DeepSeek Harness0.2.2-rc.1 (exact)
Node.js^22.19.0 or >=24.0.0

Each release supports exactly one DSH version. Do not ignore peer dependency warnings; all four runtime peers are required. For an older release, read its GitHub Release or run npm view dsh-opencode-free@<version> peerDependencies.

Install

Check your DSH version, then install the pinned package:

dsh --version
dsh plugin --profile web add dsh-opencode-free@0.6.0

Replace web with your target profile. If already installed, use the update command below instead of adding it again.

Verify the package and composed configuration:

dsh plugin --profile web list dsh-opencode-free --depth 0
dsh --profile web --dump-config

The package and the opencode-free plugin entry should each appear once. Restart DSH (or wait for HMR), then choose a model under OpenCode Zen Free.

Update or remove

dsh plugin --profile web update dsh-opencode-free
dsh plugin --profile web remove dsh-opencode-free

Usage

See the usage guide for refresh intervals, probe results, cache recovery, and key verification.

The model picker shows the current catalogue rather than a fixed model list. Context sizes, image support, and reasoning levels come from each model's published metadata. Failed refreshes preserve the cached list; without a cache, the plugin falls back to pi-ai's bundled models.

On the plugin detail page, enable or hide models and use Probe now to check availability. Reading the model list also triggers a check once per local day. Checks send real inference requests and consume quota, one enabled model at a time. Results persist across restarts.

Only catalogue withdrawal or explicit model unavailability removes a model; gate refusals, exhausted quota, invalid keys, and network failures are inconclusive. See the catalogue decision rules for refresh, removal, and cache behavior.

Optional API key

Key priority: plugin config.apiKey → OPENCODE_API_KEY environment variable → anonymous public. There is no login flow, and the plugin never switches to a paid model automatically. A key changes authentication and quota, not the model list; it does not guarantee access to an unavailable model.

For Desktop, configure the key in your profile's cordis.patch.yml rather than relying on a shell environment:

- id: opencode-free
  name: dsh-opencode-free
  config:
    apiKey: <your Zen key>

Reload DSH after changing the configuration. Keep the key and configuration private; never include them in issue reports.

How it works

The implementation is based on the maintainer's analysis of the OpenCode CLI source code and request verification. It registers the opencode-zen-free provider through DSH's PiAiAdapter and uses pi-ai transports to call https://opencode.ai/inference/v1 directly. Tool execution stays in DSH.

Anonymous requests carry OpenCode CLI identity headers, a time-encoded session ID, streaming, and substantive read and bash tool declarations. The minimum upstream admission rules are not fully verified and may change. See the protocol notes for sources and evidence limits.

What changes in model requests

These adaptations apply only to anonymous requests; keyed requests retain their original tools and prompts.

AdaptationModel-visible effect
Windows shellDSH's pwsh is presented as bash; returned calls are restored to pwsh. Read/shell parameter names are mapped while preserving host constraints.
Missing toolsAdmission-only read/bash declarations are added when absent. They grant no execution capability; calls to missing tools are rejected before host dispatch. Explicit caller tool choices are preserved.
CompactionMatching tool-less context-summary requests receive an OpenCode-style summary system prompt. The user turn containing the conversation is unchanged.

Tool guidance and admission declarations add tokens; compaction replaces system prompt tokens. Tool/history rewriting is prefix-stable for the same tool set, but switching between anonymous and keyed access changes that prefix. Compaction is a separate request.

Security and limitations

  • Process-wide interception: the plugin wraps globalThis.fetch and node:http(s) request/get, restricted to the HTTPS Zen inference origin and /inference/v1 path or descendants. Other plugins calling that endpoint in the same process also receive the identity headers.
  • Profile dependency: a webServer service is required for detail-page routes. The built-in headless profile does not provide it.
  • Debug privacy: DSH_OPENCODE_FREE_DEBUG=1 enables diagnostics. Logs name the credential kind (anonymous or key) and never any part of it. Upstream refusals contribute only the status, gate marker and error code, not their text. Request and session identifiers still appear, so do not publish raw logs.
  • Verification scope: compat run results are not stored in the repository: they depend on environment, versions, time and the shared anonymous quota. Run the compat guide yourself for current evidence. The headless run does not verify Web, Desktop, or compaction.

Troubleshooting

SymptomNext step
Plugin does not loadCheck the exact DSH version, required peers, target profile, and webServer service.
403 FreeTierError … only be used from within OpenCodeUpstream rejected admission. This alone does not identify an IP restriction, invalid key, or retired model. Reinstalling is not a gate fix.
Grey “not measured” rowsThe check was inconclusive, not evidence that a model is gone. Read the banner before deciding whether to probe again.
HTTP 200 but no replyHTTP success is not a completed response. Try another model; preserve the model ID and sanitized error for diagnosis.

Report bugs through GitHub Issues with your plugin/DSH versions, OS, profile, and sanitized error. Never post keys, raw logs, or conversation content.

Development

Use the documentation index to find task-specific guides. Read the engineering standards and known gaps before contributing. Edit src/; lib/ is generated.

pnpm install
pnpm run check  # local links, typecheck, build, offline tests, and pack

Default tests use fixtures and a temporary DSH_HOME; they do not access the network or consume inference quota. Live checks are separate and require explicit authorization:

  • scripts/reverify.sh is a legacy diagnostic with outdated request assumptions, not a current admission or key verification test. It sends real requests and is available only from a clone. See the usage guide.
  • For actual-host verification and exit-code meanings, see the compat run guide.
  • For release history and agent installation procedures, see GitHub Releases and AGENTS.md.

License

MIT.

相关插件