跳到主要内容
    ↑↓ 选择↵ 打开esc 关闭
    中文English
    Tarquinen

    Auth Provider

    v0.1.7认证与凭证
    @tarquinen/opencode-auth-provider

    Reuse OpenCode authentication & provider logic for clean AI calls in plugins

    GitHub 星标

    4

    月装机量

    945

    近 7 天 156

    综合评分SCORE

    29.8

    生态多维模型

    最近提交

    8 个月前

    2025-12-02

    快速安装与配置

    opencode.json

    写入当前项目的 opencode.json,只对这个仓库生效。

    opencode.json

    {
      "$schema": "https://opencode.ai/config.json",
      "plugin": ["@tarquinen/opencode-auth-provider@0.1.7"]
    }

    opencode 启动时会通过内嵌运行时自动加载 npm 依赖并缓存至本地目录,无需手动在全局环境执行安装。

    A reusable runtime that mirrors OpenCode's provider discovery logic so plugins can reuse the credentials stored in ~/.local/share/opencode/auth.json (API keys and OAuth) to run clean AI calls via the Vercel AI SDK.

    Features

    • Loads the same opencode.jsonc configuration layers (global + workspace) and merges provider overrides
    • Reads ~/.local/share/opencode/auth.json and environment variables just like the CLI
    • Installs provider SDK packages on-demand (via Bun) and exposes ready-to-use LanguageModel instances
    • Boots the same OAuth auth plugins as the CLI (Anthropic + Copilot by default, plus anything listed in your opencode.jsonc, e.g. opencode-gemini-auth) so refresh logic matches the CLI
    • Keeps models in sync with models.dev and applies the same filtering rules (e.g. experimental flags)

    Usage

    import { OpencodeAI } from "opencode-auth-provider"
    import { generateText } from "ai"
    
    const runtime = new OpencodeAI({ workspaceDir: process.cwd() })
    
    const { providerID, modelID } = await runtime.getDefaultModel()
    const model = await runtime.getLanguageModel(providerID, modelID)
    
    const result = await generateText({
      model,
      prompt: "Summarize the most recent changes",
    })
    
    console.log(result.text)
    

    Selecting providers directly

    const githubModel = await runtime.getLanguageModel("github-copilot", "gpt-4o-mini")
    const response = await generateText({
      model: githubModel,
      messages: [{ role: "user", content: "Explain the PR diff" }],
    })
    

    Refreshing state

    Call runtime.reset() if you update opencode.jsonc or auth.json during runtime.

    Demo script

    A ready-to-run script lives at scripts/run-model.ts. It uses the package to pick a model and print the response.

    Prerequisites

    1. Bun ≥ 1.1 installed.
    2. OpenCode credentials configured (e.g. ~/.local/share/opencode/auth.json plus any opencode.jsonc files you rely on).
    3. This repo checked out (e.g. /home/dan/.config/opencode/opencode-auth-provider).

    Steps

    cd /home/dan/.config/opencode/opencode-auth-provider
    bun install           # install deps (already done if you ran it once)
    

    Quick single-shot call

    bun scripts/run-model.ts --prompt "Say hello"
    
    • Use --provider <id> and --model <id> to override the defaults (otherwise it uses whatever opencode.jsonc marks as default).
    • Use --cwd /path/to/project if you want the runtime to load configs from another workspace.
    • The script outputs which provider/model were chosen and prints the model text. Any OAuth refresh handling happens automatically.

    Interactive picker

    bun scripts/chat-with-provider.ts
    
    • Shows every detected provider + model and lets you pick by number or ID.
    • Prompts for the message text and prints the resulting completion.
    • Press Enter to accept defaults (the same ones OpenCode would use).

    Notes

    • The package requires Bun (matching OpenCode) because it relies on Bun.spawn, Bun.hash, and Bun's package installer for on-demand provider SDKs.
    • Additional OAuth plugins can be added by listing them in opencode.jsonc and installing their npm packages alongside this library.
    • By default the Anthropic and Copilot auth plugins are always loaded (unless OPENCODE_DISABLE_DEFAULT_PLUGINS=1).
    • A bundled snapshot of models.dev is included so cold starts work offline; when the network is available, it continues to refresh the cache hourly just like the CLI.