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

多源 OAuth 登录 aa2246740/dsh-oauth-login

DeepSeek Harnessv0.2.9
aa224674035 天前有提交已提供中文文档扫描:含敏感能力

用独立存储登录多家模型账号,不碰官方凭据

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
装得上吗
本站已在 dsh 0.2.1-rc.5 下真实安装成功
非静态推断
L5 · 运行时冒烟等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 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
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

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

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 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 登录,独立存储,绝不碰官方命令行认证文件。

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 ↗
预览分享卡片长什么样 ↓aa2246740/dsh-oauth-login
分享 · DeepSeek Harness Hub
aa2246740/dsh-oauth-login

用独立存储登录多家模型账号,不碰官方凭据

这是你的仓库?认领条目

回到顶部