dsh-plugin
模型与 MCP 活跃维护

dsh-plugin

cradler-ai/dsh-plugin

该插件可将Claude、GPT、Gemini、DeepSeek、Grok等主流大模型统一为同一套API接口,仅需单个密钥即可调用所有支持的模型,兼容通用API规范,接入流程简单高效。

0
Stars 标星
0
Forks 分支
0
Watchers 关注
0
Open Issues
TypeScript
主要语言
None
开源协议
16 KB
仓库大小
1 个月前
最后推送
一键安装扩展 / 插件指令
dsh plugin --profile web add github:cradler-ai/dsh-plugin
git clone https://github.com/cradler-ai/dsh-plugin.git
git clone git@github.com:cradler-ai/dsh-plugin.git
README.md main

@cradler/dsh-plugin

Cradler Router as a provider inside DeepSeek Harness (dsh).

One API key, and Claude, GPT, Gemini, DeepSeek and Grok all show up in the dsh
model picker. The model list is read live from your account, so a model added
to Router appears in dsh without touching this plugin.

Install

Install into the profile you boot (dsh plugin forwards its arguments to pnpm
in that profile's directory, and --profile is required):

dsh plugin --profile web add @cradler/dsh-plugin
export CRADLER_ROUTER_KEY="sk-cr-…"   # get one at https://cradler.ai/dashboard/router

Then add it to that profile's patch layer — $DSH_HOME/cordis.patch.yml for
every profile, or the profile's own layer for just one:

- id: cradler-router
  name: '@cradler/dsh-plugin'

Boot dsh and pick cradler as the provider. The key is read from the
environment by default, so no secret needs to be written into a config file.

Configuration

Every field has a default; the entry above needs no config: block at all.

Field Default What it is
apiKey $CRADLER_ROUTER_KEY Your Router key (sk-cr-…)
baseURL https://router.cradler.ai/v1 Router endpoint, /v1 included
provider cradler Route name shown in model selectors
- id: cradler-router
  name: '@cradler/dsh-plugin'
  config:
    provider: cradler

Without a key the plugin logs where to get one and registers nothing, rather
than failing the harness at boot.

What it does

Registers one LlmAdapter on ctx.llm. Requests go to Router's OpenAI chat
endpoint, which carries the whole catalog — including Claude and Gemini, whose
native protocols dsh custom providers cannot express.

The adapter honors the harness streaming contract:

  • usage is emitted immediately before the terminal finish, and nothing follows it
  • block indices are allocated in first-seen order and reused across deltas
  • tool-call arguments stay raw JSON strings, streamed as argumentsDelta
  • token counts are disjoint — cache reads and cache writes are split out of the prompt total
  • options.signal cancels in flight
  • unsupported input (images) raises LlmError('UNSUPPORTED') instead of being dropped
  • every request carries attributionHeaders()

Text and tool calls are supported. Image input is not: this provider advertises
text-only modality and refuses image blocks rather than silently discarding them.

Alternative: no plugin

A plain custom provider works too, since Router speaks the OpenAI protocol:

llm-pi-ai:
  providers:
    cradler:
      apiKeyEnv: CRADLER_ROUTER_KEY
      api: openai-completions
      baseURL: https://router.cradler.ai/v1
      models:
        - id: claude-sonnet-4-6
        - id: gpt-5.5

npx @cradler/router-setup <key> writes that block for you, along with configs
for Claude Code, Codex, Gemini CLI and others. The plugin adds a live model
list and first-class provider identity on top.

Development

pnpm install
pnpm build
pnpm test        # contract tests over the chunk protocol

License

MIT