DSH HUB
HomePlugin StorePlugin PacksCommunityRankingsResourcesPublish Guide
Plugin source
Back to catalog

Rccccc6 /

Rccccc6/Tongji-AGI-Credit

Verified

同济 AGI 平台积分余额面板 + 小鲸鱼挂件接入(DSH 插件)

★ 0 Stars0 Forks0 IssuesN/A Community rating0 Confirmed installs
View on GitHub
READMESource: main@bc18771c

Tongji AGI Credit

实时获取同济大学 AGI 平台(agi.tongji.edu.cn)的积分余额;已接入余额小鲸鱼挂件;可作为独立面板使用;个人信息加密保存在本地。

当前版本:v0.3.0


一、简介

项目 说明
插件名 tongji-agi-credit
数据来源 同济 AGI 官方接口(agi.tongji.edu.cn/api/v1/*),登录统一身份认证后读取
账密存放 只存在本插件自己的金库(<插件目录>/.vault/config.json),密码用系统级加密(Windows DPAPI / Electron safeStorage)
对外接口 进程内服务 + 本地回环 HTTP + 面板 UI
已适配 dsh-whale-widget@0.4.2(一键接入 / 解除关联)
不影响 鲸鱼的 DeepSeek 官方余额、其他厂商 API 模型的余额与账本

入口:页面左下角的「济」按钮。

1.1 兼容性

项目 要求
DSH >= 0.2.0 < 0.3.0(声明在 engines.dsh,不满足会被宿主拒绝加载并提示 allow-version)
Node ^22.19 || >= 24(跟随 DSH 自带的运行时)
平台 Windows(DPAPI 加密仅在 Windows 生效;其他平台自动退到内置 AES-256-GCM)
可选 dsh-whale-widget@0.4.2(不装也能用独立面板)

1.2 隐私与安全声明

  • 本插件需要学号与统一身份认证密码,因为它要以你的身份登录 iam.tongji.edu.cn 才能读到积分。
  • 账密只写入本插件目录下的金库 <插件目录>/.vault/config.json,密码字段永远是密文(enc:v1:ss. / enc:v1:dp. / enc:v1:wk.),从不存明文、从不写入日志。
  • 学号、密码、登录会话、回环 token 只在插件进程内使用:鲸鱼挂件拿到的只有一个占位密钥和一条本机 URL,拿不到你的个人信息。
  • 本地回环接口只监听 127.0.0.1、只允许 GET、必须带 Bearer token、拒绝非回环 Origin、只返回白名单字段(纯数字与时间)。
  • 插件只访问 iam.tongji.edu.cn 与 agi.tongji.edu.cn,不向任何第三方上报数据。
  • 删除:面板「清除个人信息」=删除整个金库;卸载插件=插件目录(含金库)被物理删除。

二、安装与配置

2.1 安装顺序

  1. 安装本插件(二选一):
# 从本地 tgz 安装
dsh plugin --profile desktop add C:/path/to/Tongji-AGI-Credit-0.3.0.tgz
# 或从源码目录安装(改代码重启即生效)
dsh plugin --profile desktop add link:C:/path/to/Tongji-AGI-Credit
  1. 安装(或确认已装)小鲸鱼挂件:dsh plugin --profile desktop add dsh-whale-widget@0.4.2
  2. 重启 DSH(必须;两个插件的注入脚本都在启动时装)。
  3. 打开本插件面板:点左下角「济」按钮。
  4. 填写账号密码并保存:学号 + 统一身份认证密码 → 保存(密码加密后落盘;面板顶部应出现剩余积分)。
  5. 接入小鲸鱼:点面板右侧「配置 ⚙️」→「插件接入」→ 一键接入(会在鲸鱼里写入「同济AGI」这一行)。
  6. 再重启一次 DSH,然后检查小鲸鱼挂件里是否出现「同济AGI」。

2.2 检查与排障

现象 处理
挂件里没有「同济AGI」 面板里点 解除关联 → 再点 一键接入 → 重启 DSH
挂件里出现了但数字是 -- 确认面板顶部能取到积分(能取到说明登录正常);再等鲸鱼下一次轮询(约 60 秒)或重启
面板顶部取不到积分 确认学号、密码能在 iam.tongji.edu.cn 正常登录;确认网络能访问 agi.tongji.edu.cn
面板要求输入图形验证码 学校风控偶尔会要求,输入图中字符即可;验证码只在本机内存里,不落盘
要求短信/邮箱验证码 账号触发了「增强认证」,按面板提示发送并填入验证码即可

2.3 在鲸鱼泡泡里显示余额

重启 DSH 后,打开小鲸鱼挂件的「按压泡泡设置」,在可选模块里能看到:

  • 余额·同济AGI —— 剩余积分(无单位);
  • 今日已用·同济AGI —— 今日消耗积分(无单位)。

2.4 解除关联 / 清除个人信息

  • 解除关联:回滚鲸鱼侧全部改动,本插件自己的账密保留。
  • 清除个人信息(二次确认):删除整个金库(账密、登录会话、回环 token、绑定快照)。
  • 直接删除插件目录(或用包管理器卸载)也会连同 .vault/ 一起物理删除。
  • 建议顺序:先「解除关联」,再卸载插件——这样鲸鱼侧的模型条目、用量设置、泡泡模块、占位凭据会一并回滚干净。

三、核心功能与接口调用

3.1 核心功能

功能 说明
积分余额 剩余 / 本周期总额度 / 已用 / 周期起止 / 下次重置时间
今日用量 今日 0:00 至此刻消耗的积分
账密保管 学号和密码加密保存在本地
对外供数 只输出白名单字段(数字与时间),学号/密码/token/昵称/邮箱永不出网
一键接入鲸鱼 自动写模型条目、用量提醒、泡泡模块、占位凭据;解绑可完整回滚
自动休眠 10 分钟无调用 → 空闲,30 分钟 → 休眠(可在配置里改)

3.2 数据接口(三种调法)

① 进程内服务(推荐给其他 DSH 插件)

const tac = ctx.get('tongjiAgiCredit')
await tac.getSnapshot()     // { ok, remaining, total, used, todayUsed, planName, resetCycle, periodStart, nextResetAt, updatedAt }
await tac.refresh()         // 同上,但强制重新取数
await tac.getTodayUsage()   // { ok, todayUsed }
tac.status()                // { level: 'active'|'idle'|'deep', lastActivityAt, hasConfig }

② 本地回环 HTTP(给鲸鱼或任何本机程序)

GET http://127.0.0.1:47821/tac/v1/balance
GET http://127.0.0.1:47821/tac/v1/today
GET http://127.0.0.1:47821/tac/v1/health
Authorization: Bearer <token>        # token 在 <插件目录>/.vault/bridge.token
  • 端口从 47821 起,被占用自动顺延到 47830(可用配置 ports 改);
  • 只监听 127.0.0.1、只允许 GET、必须带 Bearer token、带非回环 Origin 一律 403;
  • 返回字段固定为:ok / remaining / total / used / todayUsed / planName / resetCycle / periodStart / nextResetAt / updatedAt / stale / manual / code / error / connected。

③ 插件自身路由(面板用,宿主认证)

/dsh-tongji-credit/ 下:ui.js、whale-ui.js、state.json、balance.json、save.json、refresh.json、captcha.json、otp.json、bridge.json、bubble-today.json、clear.json。 这些路由只接受回环/同源请求,用于面板读写;第三方直接调用请走 ②。

3.3 配置项

不写配置即用默认值;需要时在 cordis.patch.yml 的 insert 行里加 config:

- insert:
    - id: tongji-agi-credit
      name: tongji-agi-credit
      config:
        modelName: 同济AGI
        renewAheadMinutes: 30
字段 默认 说明
routePrefix /dsh-tongji-credit 面板路由前缀
host 127.0.0.1 回环监听地址(只允许回环)
ports 47821…47830 回环端口候选
idleMs / deepMs 10 分钟 / 30 分钟 空闲 / 休眠阈值(deepMs 必须 ≥ idleMs)
ttlActiveMs / ttlIdleMs / ttlDeepMs 25 秒 / 5 分钟 / 15 分钟 三档休眠下的取数缓存
renewAheadMinutes 20 到期前多少分钟提前静默续期,0 表示关闭
modelName 同济AGI 鲸鱼账本里的显示名
serviceName tongjiAgiCredit 进程内服务名(其他插件 ctx.get 用)
maxBodyBytes 64 KiB 面板请求体上限
tokenLength 24 回环 token 长度

3.4 UI 入口

入口 怎么用
「济」按钮 页面左下角,可拖动、位置记忆;单击开/关面板
鲸鱼模型面板 打开小鲸鱼 → 模型面板 →「同济AGI」卡片多一行「同济账号密码 → 打开配置面板」
控制台 window.__TAC_OPEN__() 直接打开面板
配置 ⚙️ 面板右侧齿轮,展开「同济账号密码 / 插件接入 / 隐藏图标 / 清除个人信息」
隐藏图标 勾选后隐藏左下角「济」按钮;每次启动 DSH 默认显示

3.5 接入小鲸鱼挂件

在面板「插件接入」里点 一键接入,本插件会做四件事:

  1. ~/.dsh/.dshw-api.json:新增模型 tongji-agi(币种零宽字符、balance.url 指向本插件回环、json 映射 remaining/total/used←todayUsed);
  2. ~/.dsh/.dshw-usage.json:settings.models['tongji-agi'](余额预警默认开、阈值 100;当日预算默认关);
  3. ~/.dsh/.dshw-bubble.json:模块库加一条「今日已用·同济AGI」,并清掉不该出现的额度模块;
  4. DSH 凭据服务:写入占位密钥 TONGJI_AGI_TAC_KEY(真正的账密仍在 TAC 金库里)。

重启 DSH 后,在小鲸鱼挂件里打开「按压泡泡设置」,可选模块中会出现 余额·同济AGI 与 今日已用·同济AGI,勾选即可显示。

点 解除关联 会按绑定时的快照完整回滚(模型条目、用量设置、泡泡模块、占位凭据),本插件自己的账密保留。


四、目录结构

Tongji-AGI-Credit/
├─ package.json             插件元数据(main=lib/index.js,files 含 lib/adapter/web/locale/icon)
├─ cordis.patch.yml         插件声明(dsh.profile.bundles 里有名字即生效)
├─ README.md                安装与使用说明(本文件)
├─ CHANGELOG.md             版本变更记录
├─ icon.png                 插件图标(512×512)
├─ locale/                  插件卡片文案(zh / en)
├─ dist/                    发布包
├─ LICENSE
├─ lib/
│  ├─ index.js              装配层:注入脚本、起回环、注册路由、休眠状态机、快照缓存
│  ├─ config-schema.mjs     配置字段(Standard Schema,宿主加载时校验)
│  ├─ schema.mjs            最小 Standard Schema 实现(宿主不向第三方插件暴露 SDK)
│  ├─ agi-session.mjs       协议层:登录、会话缓存、取余额/今日用量、金库加密
│  └─ api-server.mjs        接口层:只读回环 HTTP(白名单字段、Bearer token、只 GET)
├─ adapter/                 ← 宿主插件适配层(一个宿主一组文件)
│  ├─ whale-bridge.mjs      主进程侧:鲸鱼注册表 / 用量设置 / 泡泡模块 / 占位凭据 / 快照回滚
│  └─ whale-ui.js           渲染进程侧:往鲸鱼 DOM 补「同济账号密码」入口行、修模块库 chip 文案
├─ web/
│  └─ ui.js                 面板 UI(自绘、可拖动;只走 lib/index.js 的 HTTP 路由)
└─ dev/
   ├─ smoke.mjs             自检:金库加解密 → 回环接口 → 适配层 bind/status/unbind
   └─ make-icon.py          重新生成 icon.png

分层原则:协议层不认识宿主插件,适配层不碰账密,UI 不直接读写文件。 以后若要适配别的宿主插件,在 adapter/ 下新增一组 <宿主>-bridge.mjs + <宿主>-ui.js 即可,lib/ 不用动。


五、安全 / 自检 / 限制

5.1 安全设计

面 做法
账密存放 <插件目录>/.vault/config.json,只存 passwordEnc(enc:v1:ss. / enc:v1:dp. / enc:v1:wk.)
加密实现 优先 Electron safeStorage(系统密钥链,ss);其次 Windows DPAPI 当前用户(dp);都不行才退到 AES-256-GCM + 机器派生口令(wk)
个人信息范围 学号、密码、会话 JWT、回环 token 只在本插件内;鲸鱼侧只有一个占位 key TONGJI_AGI_TAC_KEY 和回环 URL
回环接口 只监 127.0.0.1、只 GET、必须 Bearer token、拒绝非回环 Origin、字段白名单
路由 插件 HTTP 路由只接受回环/同源请求
卸载清理 金库在插件目录内,删目录即物理删除;另有「清除个人信息」按钮
日志 只打「登录成功/失败、休眠级别、端口」等状态,不打印账密与 token

5.2 开发自检

# 语法(用 DSH 自带运行时)
ELECTRON_RUN_AS_NODE=1 "D:/Program Files/DSH/DeepSeek Harness.exe" --check lib/index.js
ELECTRON_RUN_AS_NODE=1 "D:/Program Files/DSH/DeepSeek Harness.exe" --check adapter/whale-ui.js

# 全链路自检(金库 → 回环 → 适配层 bind/unbind,无需联网)
ELECTRON_RUN_AS_NODE=1 "D:/Program Files/DSH/DeepSeek Harness.exe" dev/smoke.mjs

自检覆盖:配置默认值与非法值、apply() 装配(11 条路由 + 进程内服务 + dispose 清理)、明文密码自动迁移为密文、密文可解密、回环鉴权与字段白名单、绑定后四处写入、解绑后四处回滚。

5.3 已知限制

  • 平台接口变更:AGI 是 SPA,接口与页面元素由上游决定;billing/overview、my-usage/stats 若改字段,需要更新 lib/agi-session.mjs 的取值路径(字段缺失时返回 code:'SHAPE' 与中文错误,不会显示假数据)。
  • 会话有效期:AGI 侧登录会话按天计;TAC 在到期前会用登录时保留的认证会话尝试静默续期,续期不成才需要重新登录。
  • 无单位显示:靠币种写零宽字符实现;若鲸鱼某天对币种做 trim(),会退化成显示「积分」。
  • 鲸鱼 DOM 依赖:入口行与 chip 文案修正依赖 .dshwv-usage-card / .dshwv-bubpal 等选择器,鲸鱼大改版可能需要同步调整 adapter/whale-ui.js。
  • 今日已用:按平台按天聚合接口取值,跨零点重新计数,不作为记账依据。
  • 多实例:回环端口在 47821–47830 顺延;全部被占用时鲸鱼侧会显示取数失败。
  • 升级会清金库:用 tgz 覆盖升级会重建插件目录,.vault/ 需要重新填写账密;想保留就用 link: 方式安装。
—/ 5

No ratings yet

Verified DSH bundle

Commit bc18771cf687

Community comments

No comments yet. Be the first to write one.

DSH HUB

A community index for DSH plugins. Not an official GitHub or DeepSeek AI product.

CommunityResourcesAPIAbout