用独立存储登录多家模型账号,不碰官方凭据
30.5/100
综合分
1
GitHub 星标
66
npm 周下载
—/5
用户评分
数据截至 2026/10/2 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
自动兼容检查未通过:要求 dsh >=0.2.0-rc.2 <0.2.1,而最新版为 0.2.1-rc.2。以下命令仍可尝试,但可能失败。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add aa2246740/dsh-oauth-login该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · market
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 35 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查需源码安装要求 dsh >=0.2.0-rc.2 <0.2.1,而最新版为 0.2.1-rc.2
展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✓npm 包dsh-oauth-login @ 0.2.9
✓Node 引擎要求 >=22.19.0 · 基线 Node 22.19 满足
✗dsh CLI 依赖要求 >=0.2.0-rc.2 <0.2.1 · 最新 0.2.1-rc.2 不兼容
✓入口文件main/exports/bin 已声明
源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/20 04:29:49
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 65 处,展示前 63 条)
- 执行外部命令固定命令lib/index.js:1350
execFile("/usr/sbin/scutil", ["--proxy"], { - 发起网络请求lib/index.js:1461
dispatcher: new EnvHttpProxyAgent({ - 发起网络请求lib/index.js:1472
install(); - 读取本地文件lib/index.js:1544
text = await readFile(this.filename, "utf8"); - 写入本地文件lib/index.js:1560
await mkdir(dirname(this.filename), { - 发起网络请求lib/index.js:1594
const fallback = getGlobalDispatcher(); - 发起网络请求lib/index.js:1602
setGlobalDispatcher(routing.dispatcher); - 发起网络请求lib/index.js:1620
const direct = new Agent({ allowH2: false }); - 发起网络请求lib/index.js:1628
const proxy = new ProxyAgent({ - 读取本地文件lib/index.js:1964
mode = (await stat(filename)).mode; - 读取本地文件lib/index.js:2045
return parseDocument(await readFile(filename, "utf8"), filename); - 写入本地文件lib/index.js:2074
await mkdir(dirname(this.filename), { - 写入本地文件lib/index.js:2105
await mkdir(dirname(this.filename), { - 删除本地文件lib/index.js:2117
await rm(this.filename, { force: true }); - 读取本地文件lib/index.js:2835
if ((await stat(this.options.filename)).size > MAX_BYTES) throw new Error("cache too large"); - 读取本地文件lib/index.js:2836
const raw = objectValue(JSON.parse(await readFile(this.options.filename, "utf8"))); - 读取本地文件lib/index.js:2930
const cached = objectValue(JSON.parse(await readFile(this.options.filename, "utf8"))); - 发起网络请求lib/client.js:204
const response = await fetch(PROXY_SETTINGS_PATH, { - 发起网络请求lib/client.js:250
const response = await fetch(PROXY_SETTINGS_PATH, { - 发起网络请求lib/client.js:519
const response = await fetch(path, { - 发起网络请求lib/client.js:1749
constructor(request = (...args) => globalThis.fetch(...args)) { - 发起网络请求lib/client.js:1813
const response = await this.request(force ? OPENROUTER_REFRESH_PATH : OPENROUTER_CATALOG_PATH, { - 执行外部命令固定命令lib/bin.js:836
execFile("/usr/sbin/scutil", ["--proxy"], { - 发起网络请求lib/bin.js:947
dispatcher: new EnvHttpProxyAgent({ - 发起网络请求lib/bin.js:958
install(); - 读取本地文件lib/bin.js:1028
text = await readFile(this.filename, "utf8"); - 写入本地文件lib/bin.js:1044
await mkdir(dirname(this.filename), { - 发起网络请求lib/bin.js:1078
const fallback = getGlobalDispatcher(); - 发起网络请求lib/bin.js:1086
setGlobalDispatcher(routing.dispatcher); - 发起网络请求lib/bin.js:1104
const direct = new Agent({ allowH2: false }); - 发起网络请求lib/bin.js:1112
const proxy = new ProxyAgent({ - 读取本地文件lib/bin.js:1443
mode = (await stat(filename)).mode; - 读取本地文件lib/bin.js:1524
return parseDocument(await readFile(filename, "utf8"), filename); - 写入本地文件lib/bin.js:1553
await mkdir(dirname(this.filename), { - 写入本地文件lib/bin.js:1584
await mkdir(dirname(this.filename), { - 删除本地文件lib/bin.js:1596
await rm(this.filename, { force: true }); - 读取本地文件lib/bin.js:1770
if ((await stat(this.options.filename)).size > MAX_BYTES) throw new Error("cache too large"); - 读取本地文件lib/bin.js:1771
const raw = objectValue(JSON.parse(await readFile(this.options.filename, "utf8"))); - 读取本地文件lib/bin.js:1865
const cached = objectValue(JSON.parse(await readFile(this.options.filename, "utf8"))); - 执行外部命令来自配置/变量lib/bin.js:2018
const child = spawn(command.file, command.args, { - 执行外部命令来自配置/变量src/bin.ts:32
const child = spawn(command.file, command.args, { - 发起网络请求src/client/openrouter-store.ts:40
constructor(private readonly request: typeof globalThis.fetch = (...args) => globalThis.fetch(...args)) {} - 发起网络请求src/client/openrouter-store.ts:92
const response = await this.request(force ? OPENROUTER_REFRESH_PATH : OPENROUTER_CATALOG_PATH, { - 执行外部命令固定命令src/http.ts:87
execFile( - 发起网络请求src/http.ts:214
const dispatcher = new EnvHttpProxyAgent({ - 发起网络请求src/http.ts:228
install() - 发起网络请求src/http.ts:238
setGlobalDispatcher(dispatcher) - 读取本地文件src/openrouter-catalog.ts:83
if ((await stat(this.options.filename)).size > MAX_BYTES) throw new Error('cache too large') - 读取本地文件src/openrouter-catalog.ts:84
const raw = objectValue(JSON.parse(await readFile(this.options.filename, 'utf8'))) - 读取本地文件src/openrouter-catalog.ts:190
const cached = objectValue(JSON.parse(await readFile(this.options.filename, 'utf8'))) - 读取本地文件src/proxy-store.ts:16
try { text = await readFile(this.filename, 'utf8') } catch (error) { - 写入本地文件src/proxy-store.ts:32
await mkdir(dirname(this.filename), { recursive: true, mode: 0o700 }) - 发起网络请求src/proxy-transport.ts:28
function isLoopback(origin: Dispatcher.DispatchOptions['origin']): boolean { - 发起网络请求src/proxy-transport.ts:36
const fallback = getGlobalDispatcher() - 发起网络请求src/proxy-transport.ts:45
setGlobalDispatcher(routing.dispatcher) - 发起网络请求src/proxy-transport.ts:83
const direct = new Agent({ allowH2: false }) - 发起网络请求src/proxy-transport.ts:91
const proxy = new ProxyAgent({ uri: channel.url, allowH2: false }) - 发起网络请求src/session.ts:47
fetch: (input, init) => this.proxy.run(() => fetch(input, init)), - 读取本地文件src/store.ts:33
mode = (await stat(filename)).mode - 读取本地文件src/store.ts:158
return parseDocument(await readFile(filename, 'utf8'), filename) - 写入本地文件src/store.ts:193
await mkdir(dirname(this.filename), { recursive: true, mode: 0o700 }) - 写入本地文件src/store.ts:216
await mkdir(dirname(this.filename), { recursive: true, mode: 0o700 }) - 删除本地文件src/store.ts:225
await rm(this.filename, { force: true })
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-api-session-controller@deepseek-ai/dsh-atomic-write@deepseek-ai/dsh-attachment@deepseek-ai/dsh-authorization@deepseek-ai/dsh-brand@deepseek-ai/dsh-client-connection@deepseek-ai/dsh-client-locale@deepseek-ai/dsh-client-ui-conversation@deepseek-ai/dsh-client-ui-model-selection@deepseek-ai/dsh-client-ui-renderer@deepseek-ai/dsh-client-ui-session给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 多服务商OAuth登录
- 独立存储凭据
- 不碰官方认证文件
为 DeepSeek Harness 提供原生支持多服务商的 OAuth 登录,独立存储,绝不碰官方命令行认证文件。
最近更新
在 GitHub 查看全部 →v0.2.92026-10-14
· dsh-oauth-login 0.2.9
Codex 订阅路由现在声明托管搜索时带明确模式:codexSearch 默认 cached,外部网页访问用 live,off 则保留客户端自带的网页工具。cached 搜索发送 external_web_access: false,live 搜索发送 true。Codex 请求不再从通用 Responses 路径继承托管图像生成声明。
调用方的 onPayload 钩子执行后会再检查一次载荷,确保选定的搜索模式仍然生效。原有的转录工具改动、系统消息、用量观测和托管追踪过滤都保留。账户不支持的能力仍会报错,不会悄悄替换模型或搜索模式。
macOS 验收通过实际 Desktop Host 发起了一次有界的 GPT-6 Sol max cached 搜索请求。这不能说明上游搜索次数、计费,也不代表每个账户和模式都受支持。原生 Electron UI 交互仍未验证。
· 验证
macOS 上 213 项测试全部通过,包括本地 TLS 测试夹具和 Codex SDK 载荷序列化,后者在进入网络传输前就停止。类型检查、构建、DSHX 检查和归档校验均通过。服务端与客户端入口文件与先前验收的 v9 安装完全一致。验证 registry 产物期间没有额外调用真实模型,也没有在生产环境安装 Host。
· 已发布产物验证
· npm:dsh-oauth-login@0.2.9
· 源码提交:9c2f305ca567686d9d56d48049d85d10af5b3ac1
· 标签发布工作流成功
· registry tarball SHA-256:38807446b88acea26bd4ff4d3b933a8987be8d8e401add4b0db7cf99586aba56
· 附件 tarball 从 npm registry 下载。registry 签名、发布证明和 SLSA 证明均通过密码学验证;签名主体摘要、仓库、标签、源码提交和工作流运行全部匹配。
· 附件验证报告与来源信息保留了这些检查。SHA256SUMS.txt 覆盖 tarball 和两份 JSON 记录。
v0.2.72026-09-29
· dsh-oauth-login 0.2.7
· DeepSeek Harness 兼容性
基于 DeepSeek Harness 0.2.0-rc.2(639ed015397290b3745d163aafe02ffee4aa3f84)构建并测试。用官方插件安装器安装预构建的发布包,或使用本仓库编译出的产物。
RC2 把 pi-ai 升级到 0.87.1。服务商请求现在会保留对话记录里的系统消息和工具的增删,同时在添加服务商原生工具前过滤掉 DSH 网页工具。本版本要求 DSH RC2 和 pi-ai 0.87.x。
验证在 macOS arm64 上完成。本版本不声称已通过 Windows 或 Linux 运行时验收。
v0.2.62026-09-26
· 官方安装
桌面端:设置 → 插件 → 添加插件 → github:aa2246740/dsh-oauth-login#v0.2.6。
Web 命令行:dsh plugin --profile web add github:aa2246740/dsh-oauth-login#v0.2.6。它只改动 Web 配置档;已经跑着的 Web Host 要重启一次,再刷新页面。构建产物已包含在内,普通用户不用检出源码、不用构建,也不用 DSHX。
DSH Studio 0.1.7-rc.2 的稳定版。
包含当前的订阅登录和模型选择客户端集成。
验证:206 项自动化测试、TypeScript 检查和生产构建。
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。
README
该插件文档不完整,请到 GitHub 查看原文。 github.com/aa2246740/dsh-oauth-login ↗
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
aa2246740/dsh-oauth-login
用独立存储登录多家模型账号,不碰官方凭据
相关插件 · 市场 / 管理
插件精选列表awesome-dsh-plugin/awesome-dsh-plugin
DeepSeek Harness(dsh)插件精选列表
★ 22,225未汉化DSH
73.6
新词雷达zhuyansen/new-term-radar
new-term-radar新词雷达
★ 2,049已汉化MCP
72.8
插件生态导航0xsline/awesome-deepseek-harness
安装 贡献指南 DeepSeek Docs 公开插件目录 Issues
★ 1,188已汉化DSH
72.6
技能注册中心iflytek/skillhub
企业级开源智能体技能注册中心——发布、发现并管理组织内可复用的技能包。
★ 5,370已汉化DSH
71.9
插件市场目录imsai-sh/awesome-deepseek-harness-plugins
面向 DeepSeek Harnessdsh生态的社区插件目录,共收录 13941 个插件含 PR 收录与…
★ 355已汉化DSH
71.8
插件精选清单Anil-matcha/awesome-dsh-plugin
DeepSeek Harnessdsh精选指南——DeepSeek…
★ 1,013已汉化DSH
71.7
这是你的仓库?认领条目