🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

OpenCode Go 接入 edynasty/dsh-opencode-go-provider

DeepSeek Harness
edynasty66 天前有提交已提供中文文档扫描:含敏感能力

把 OpenCode Go 模型路由接入 DSH 并管理密钥

32.7/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/24 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add edynasty/dsh-opencode-go-provider
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · model
装得上吗
本站已在 dsh 0.2.1-rc.2 下真实安装成功
非静态推断
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 66 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件读取剪贴板或密钥环境变量发起外部网络请求
查看扫描证据(共 22 处,展示前 22 条)
  • 读取本地文件
    lib/index.js:1417
    text = readFileSync(path, "utf8");
  • 发起网络请求
    lib/client.js:484
    const response = await fetch(path, {
  • 读取本地文件
    lib/control-CZd1dUg_.js:1305
    if (memoizedManifest === void 0) memoizedManifest = parseModelsManifest(parseJsonFile(readFileSync(MODELS_ARTIFACT, "utf8"), "models.json"));
  • 读取本地文件
    lib/control-CZd1dUg_.js:1321
    if (memoizedPatches === void 0) memoizedPatches = parsePatchesFile(parseJsonFile(readFileSync(PATCHES_ARTIFACT, "utf8"), "patches.json"));
  • 写入本地文件
    lib/control-CZd1dUg_.js:1424
    await mkdir(directory, { recursive: true });
  • 写入本地文件
    lib/control-CZd1dUg_.js:1436
    await rename(temp, path);
  • 删除本地文件
    lib/control-CZd1dUg_.js:1441
    if (tempCreated) await rm(temp, { force: true }).catch(() => void 0);
  • 发起网络请求
    lib/control-CZd1dUg_.js:1635
    const liveRace = await raceCancellation(deps.fetch(endpoint, {
  • 读取本地文件
    lib/control-CZd1dUg_.js:1706
    if ((await lstat(current)).isSymbolicLink()) {
  • 读取本地文件
    lib/control-CZd1dUg_.js:1707
    if (await realpath(current) !== `/private${current}`) throw new Error("unsafe-symlink");
  • 读取本地文件
    lib/control-CZd1dUg_.js:1732
    info = await lstat(path);
  • 删除本地文件
    lib/control-CZd1dUg_.js:1795
    await rm(lockPath, { force: true }).catch(() => void 0);
  • 删除本地文件
    lib/control-CZd1dUg_.js:1799
    if (lockCreated) await rm(lockPath, { force: true }).catch(() => void 0);
  • 删除本地文件
    lib/control-CZd1dUg_.js:1832
    if (backupCreated) await rm(backupPath, { force: true }).catch(() => void 0);
  • 写入本地文件
    lib/control-CZd1dUg_.js:1856
    async function writeTextAtomic(path, text, mode, renameSeam = (from, to) => rename(from, to), verifyBeforeRename = async () => void 0, beforeVerify =
  • 写入本地文件
    lib/control-CZd1dUg_.js:1866
    if ((mode & 511) !== 384) await chmod(temp, mode);
  • 删除本地文件
    lib/control-CZd1dUg_.js:1874
    if (tempCreated) await rm(temp, { force: true }).catch(() => void 0);
  • 读取密钥环境变量
    lib/control-CZd1dUg_.js:7671
    if (node_process.env.LOG_TOKENS) console.log("|", cst.prettyToken(source));
  • 删除本地文件
    lib/control-CZd1dUg_.js:8901
    if (backupPath !== void 0) await rm(backupPath, { force: true }).catch(() => void 0);
  • 发起网络请求
    lib/control-CZd1dUg_.js:9050
    const modelsDevRace = await raceCancellation(deps.fetch(MODELS_DEV_API_URL, { signal }), signal, SYNC_DEADLINE_CODE);
  • 发起网络请求
    lib/control-CZd1dUg_.js:9069
    const liveRace = await raceCancellation(deps.fetch(liveEndpoint, {
  • 发起网络请求
    lib/control-CZd1dUg_.js:9115
    const response = await globalThis.fetch(url, {
扫描于 2026/11/1(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-api-remotes@deepseek-ai/dsh-attachment@deepseek-ai/dsh-brand@deepseek-ai/dsh-client-connection@deepseek-ai/dsh-client-locale@deepseek-ai/dsh-client-runtime@deepseek-ai/dsh-client-ui-primitives@deepseek-ai/dsh-client-ui-settings@deepseek-ai/dsh-client-ui-settings-plugins@deepseek-ai/dsh-client-ui-slots@deepseek-ai/dsh-credentials
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

README

由 DeepSeek 最新模型翻译生成
dsh-opencode-go-provider 面向 DeepSeek Harness(DSH rc.6)的 OpenCode Go LLM provider 组合包:单个 opencode-go 模型路由接入 OpenCode Go 网关,附带 Web Connect 设置卡、 stale-while-revalidate 模型目录与安全的诊断命令。 状态:社区软件,未发布到 npm。 本包以 commit-pinned Git 依赖的形式安装进 DSH profile;npm registry 不是安装途径。本包不隶属于、不受 DeepSeek、 OpenCode 或任何模型供应商的背书或赞助。见 LICENSE 与 THIRD_PARTY_NOTICES.md。 环境要求 - DeepSeek Harness DSH rc.6(本组合包面向 0.1.0-rc.6 peer 图)。 - Node.js ^22.19.0 || >=24.0.0。 - corepack 托管的 pnpm 11.7.0(若 pnpm --version 无法经 Corepack 解析,先执行 corepack enable)。 - 一个 OpenCode Go API key。
展开完整文档(README 剩余 1 节)
dsh-opencode-go-provider

面向 DeepSeek Harness(DSH rc.6)的 OpenCode Go LLM provider 组合包:单个 opencode-go 模型路由接入 OpenCode Go 网关,附带 Web Connect 设置卡、 stale-while-revalidate 模型目录与安全的诊断命令。

状态:社区软件,未发布到 npm。 本包以 commit-pinned Git 依赖的形式安装进 DSH profile;npm registry 不是安装途径。本包不隶属于、不受 DeepSeek、 OpenCode 或任何模型供应商的背书或赞助。见 LICENSE 与 THIRD_PARTY_NOTICES.md。

环境要求

- DeepSeek Harness DSH rc.6(本组合包面向 0.1.0-rc.6 peer 图)。
- Node.js ^22.19.0 || >=24.0.0。
- corepack 托管的 pnpm 11.7.0(若 pnpm --version 无法经 Corepack 解析,先执行 corepack enable)。
- 一个 OpenCode Go API key。该 key 仅在操作时经 DSH credentials 服务以 OPENCODE_GO_API_KEY 为 ref 存储与解析;绝不写入 settings、catalog、日志、错误信息或包内。

安装(Git,commit-pinned)

本包未发布到 npm;受支持的安装方式是 DSH web profile 的 commit-pinned Git 依赖:

dsh plugin --profile web add github:edynasty/dsh-opencode-go-provider#d2a447610a5dff4006ac966525effd9669342a78

仓库已提交 lib/,因此 Git 安装无需构建步骤即可加载组合包。卸载会移除包及其 bundle 行:

dsh plugin --profile web remove dsh-opencode-go-provider

与 web base bundle 共存

web profile 的 base bundle(@deepseek-ai/dsh-llm-pi-ai)已在 provider 目录中声明了 opencode-go(其目录原生包含该路由)。本包采用该已有条目而非重复注册,并以自身 adapter(更丰富的 SWR catalog)、Connect 卡与 doctor 路由接管该路由。与 base bundle 共存无需任何 profile 改动——特别是无需禁用 llm-pi-ai。

注册内容

- 唯一 provider 路由:opencode-go,由 llm-opencode-go bundle 行(cordis.patch.yml)挂载。
- 一个 settings namespace:llm-opencode-go(刷新间隔、新鲜度窗口、网络超时、下架宽限、credential ref)。
- 一张 Web Connect 设置卡(经 dsh.client.inject 注入),可连接、测试连接、运行诊断与断开。
- 独立 bin(dsh plugin --profile web exec dsh-opencode-go-provider)提供 status、doctor、migration-dry-run 与 migration-apply。

模型目录与协议

内嵌目录(catalog/models.json)派生自 OpenCode 的 models.dev 元数据(https://models.opencode.ai/api.json),只保留 opencode-go provider 记录。
每个模型从该元数据携带自己的协议,adapter 按模型分发,绝不按模型名前缀猜测:

| 协议 | 选择依据 |
| openai-responses | models.dev SDK 元数据映射到 @ai-sdk/openai 的模型 |
| openai-completions | 映射到 @ai-sdk/openai-compatible 的模型(默认类别) |
| anthropic-messages | 映射到 @ai-sdk/anthropic 的模型(base URL https://opencode.ai/zen/go) |

模型可用性通过实时端点 https://opencode.ai/zen/go/v1/models 检查,该端点 只贡献可用 id;协议、上下文、模态、成本与推理元数据一律以 models.dev 为准。

目录生命周期(stale-while-revalidate)

- 内嵌目录启动即可用——离线且无需凭据。
- 后台刷新维护 5 分钟新鲜度窗口;窗口内的读取绝不触网。
- 60 分钟周期刷新做再验证;过期读取调度一次 single-flight 后台刷新。
- 每次网络尝试受 10 秒超时约束。
- 刷新成功后原子写入缓存(同目录临时文件、0600、fsync、rename),路径为 $DSH_HOME/cache/dsh-opencode-go-provider/catalog.json,随后才切换内存快照;进行中的请求保留其启动时的快照。
- 离线回退:缓存缺失或损坏时以内嵌目录服务(origin: embedded/corrupt);损坏文件绝不删除,失败也绝不覆盖 last-good 状态。
- 隔离(quarantine):有 live id 但无 models.dev 元数据时,以脱敏的可机读原因记录,绝不暴露为可调用模型。
- 14 天下架宽限:models.dev 已知但 live 缺失的模型在 deprecatedAt 时间戳内仍可选;超过 14 天被驱逐(若回到 live 则复活)。

Connect / status / doctor / disconnect

- 连接(Connect)(Web 卡或 Host 路由)只把 key 存入 DSH credentials 服务的 OPENCODE_GO_API_KEY;key 绝不回显、回传或写入其他任何位置。
- 状态(status)只输出脱敏事实:configured 是否、来源(embedded/cache/refreshed)、模型数、上次刷新、上次尝试、刷新成功/失败计数。
- 测试连接 / 诊断(doctor)只执行一次带认证的 GET https://opencode.ai/zen/go/v1/models,输出脱敏计数与固定错误码;绝不调用生成端点。
- 断开(disconnect)只移除 OPENCODE_GO_API_KEY 这一个凭据。opencode-go 路由与 Connect 卡保持注册与可选——断开绝不删除 provider、不写入 disabled 列表、也不触碰其他 provider。

connect/disconnect 仅限 Host:独立 bin 会以固定消息拒绝它们,因为 DSH credential store 归运行中的 Host 所有。

迁移手工路由

若旧配置手工设置了 llm-pi-ai.providers.opencode-go,本组合包可将其迁移掉:

dsh plugin --profile web exec dsh-opencode-go-provider migration-dry-run <settings.yaml>
dsh plugin --profile web exec dsh-opencode-go-provider migration-apply --revision <64-hex> <settings.yaml>

- migration-dry-run 只读,输出目标、SHA-256 revision 与删除 key/行 计数(绝不输出 key 名或值)。
- migration-apply 校验期望 revision、获取同目录锁、写入前重新读取并重新哈希、创建带时间戳的可恢复备份(绝不触碰 credentials 文件),并原子发布。并发编辑产生 conflict 且零残留;二次 apply 是幂等的 no-change。
- 仅支持保守的 YAML 形状:无 flow map、anchor 或 alias 的 block mapping 可迁移;不支持的形状在任何锁/备份/写入之前以 unsupported-shape 中止。
- 迁移保留默认模型、其他所有 providers、注释、引号与 key 顺序——只删除 llm-pi-ai.providers.opencode-go 块,credential ref 原样保留。

安全

支持范围、私有报告途径、凭据处理与安全诊断契约见 SECURITY.md。

开发

环境搭建、TDD 工作流、严格类型/禁止私有导入规则、250-LOC 生产代码上限与完整本地门禁见 CONTRIBUTING.md:

corepack enable
pnpm install --frozen-lockfile
pnpm run check

CI(.github/workflows/ci.yml)在 Node 22.19.0、24、26 上以 pnpm 11.7.0 与 frozen lockfile 运行相同门禁。Live smoke 需要同时满足本地 RUN_OPENCODE_GO_LIVE=1 显式开启和本地 OPENCODE_GO_API_KEY;CI 两者都不注入,因此该步骤始终跳过。

许可证

MIT —— 见 LICENSE。上游通知与署名保留在 THIRD_PARTY_NOTICES.md。
预览分享卡片长什么样 ↓edynasty/dsh-opencode-go-provider
分享 · DeepSeek Harness Hub
edynasty/dsh-opencode-go-provider

把 OpenCode Go 模型路由接入 DSH 并管理密钥

回到顶部