@lynn123411/dsh-a6api 1.5.7 → 1.5.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -12,7 +12,7 @@ A6API 多模型聚合站深度接入插件:将 A6API 聚合网关无缝注册
12
12
  - **路由快照时效标注**:每张模型卡片右下角标注「路由快照」时效(该卡片商户数据来自我最近一次路由请求的时刻,相对时间 + 悬停绝对时间),与全网最近成功时间叠放两行;日志中无路由记录的模型显示灰色「从未路由」。
13
13
  - **官方 vs 商户全景价格对比**:展开卡片即可查看详细渠道说明、智能标签、真实数据徽章、近 100 次样本统计,以及官方基准价与商户实时价在「输入价/输出价/缓存读/缓存写 (1M)」各维度的清晰对比表格。
14
14
  - **真实账户资产看板与调用明细**:在「账户资产」页面实时呈现真实可用余额(美元及折合人民币)、历史总消耗、累计请求次数,并实时捕获展示近期模型请求的路由明细快照(时间、模型、命中商户渠道、总耗时、Token 消耗及状态)。
15
- - **原生提供商动态注册与一键加入 DSH**:自动向 DSH LLM 运行时注入 `a6api` 目录,在「可用模型」列表点击「添加到 DSH」即可将模型自动增量同步至 `settings.yaml` DSH 对话选择器。
15
+ - **一键加入 DSH 与原生路由接入**:在「可用模型」列表点击「添加到 DSH」即可把模型增量写入 `settings.yaml` `llm-pi-ai.providers.a6api`(由 pi-ai 据此注册 `a6api` 路由),模型随即出现在 DSH 对话选择器中;插件不自行调用 LLM 运行时注册接口。
16
16
  - **节点切换与凭据一站式配置**:在「基础配置」页面支持 CDN 推荐节点(`https://api.a6api.com`)、直连备用节点(`https://a6.a6api.com`)与自定义网关节点自由切换,提供 API Key 与系统访问令牌密码显隐切换及获取教程。
17
17
  - **DSH 原生配置存储**:全部配置落位 DSH 自有配置体系——凭据(API Key / 系统访问令牌 / userId)存入 `~/.dsh/.credentials.yaml`(0600,env 优先语义),非机密状态(节点 / 模型列表)写入 `settings.yaml` 的 `llm-pi-ai.providers.a6api`,读写走 DSH 原生 `settings` / `credentials` 服务(串行写队列 + schema 校验 + 热发布),不再占用独立配置文件;旧版 `dsh-a6api-config.json` 启动时自动迁移并归档为 `.bak`。启用模型时节点随模型列表一并落盘;移除全部模型时自动移除 DSH 中的 a6api 提供商块(DSH 对手写路由无合法的零模型表示)。
18
18
  - **价格波动实时胶囊**:标题栏余额右侧常驻「价格波动:n」胶囊(白底,仅数字变色:`0` 绿/`n>0` 红/`--` 灰),基于 `GET /api/marketplace/price-notices` 的待处理条数每 60s 轻轮询(与余额同频,仅计不处置;待处理 = 通知 `relations[].state === 'open'`,即固定渠道存在未被处理/取代的价格变动,兼容显式 `pendingCount` 字段与 `status ∈ open/pending/effective` 的兜底形态),`n>0` 时一键新标签跳 `https://a6api.com/console/token`,未配置/失效或 `0` 时置灰不可点,满足“只监听不处置”的轻量诉求。
package/lib/client.js CHANGED
@@ -5157,16 +5157,25 @@ function apply(ctx) {
5157
5157
  }
5158
5158
  if (typeof window === "undefined") return;
5159
5159
  try {
5160
- setTimeout(() => {
5161
- try {
5162
- store.warmUp();
5163
- } catch {
5164
- }
5165
- try {
5166
- store.initPricePolling();
5167
- } catch {
5168
- }
5169
- }, 1500);
5160
+ ctx.effect(() => {
5161
+ const warmupTimer = setTimeout(() => {
5162
+ try {
5163
+ store.warmUp();
5164
+ } catch {
5165
+ }
5166
+ try {
5167
+ store.initPricePolling();
5168
+ } catch {
5169
+ }
5170
+ }, 1500);
5171
+ return () => {
5172
+ clearTimeout(warmupTimer);
5173
+ try {
5174
+ store.stopAutoRefresh();
5175
+ } catch {
5176
+ }
5177
+ };
5178
+ }, "dsh-a6api: warmup & price polling");
5170
5179
  } catch {
5171
5180
  }
5172
5181
  try {