Skip to content

Releases: Ztyss/dsh-llm-provider

v0.2.7

Choose a tag to compare

@Ztyss Ztyss released this 20 Oct 11:05

修 DSH NEXT 把宿主打成 resources/app.asar 之后桥接整体失效的问题。

症状

启动日志:

[warn] llm bridge 不可用,退化为纯计费模式:Cannot find package
'@deepseek-ai/dsh-launch-environment' imported from
C:\Users\39244\.dsh\llm-provider-bridge\llm-bridge\lib\index.js

Config(设置表单)拿不到,pi-ai 桥接整座不可用。把「启用最新版 pi-ai」拨回 OFF 同样起不来。

根因

官方 @deepseek-ai/dsh-llm-pi-ai bundle、它依赖的 8 个 @deepseek-ai/* 包、以及 DSH 自带那份
pi-ai,现在全在归档里。桥接层给 bundle 的每个 bare specifier 挂一条目录链接(Windows junction),
目标就是 .../app.asar/node_modules/...。

目录链接的目标由内核的对象管理器解析,而内核不认识 asar(Electron 的 asar 覆盖层只对直接
路径生效)→ 每条链必然悬空,existsSync 直接 false。

宿主进程内探针实证:

  • import('file:///…app.asar/…/dsh-launch-environment/lib/index.js') 正常,8 个包全部 OK;
  • existsSync(junction → asar 内目录) = false;
  • 悬空 junction 下 import pi-ai 子路径直接 Cannot find package '@earendil-works/pi-ai'。

所以不是归档读不到,是链的问题。

修法

包目录落在 .asar 里就不挂链,把桥接副本里的 specifier 直接写成归档入口的 file:// URL。
宿主自己就是这么加载官方 bundle 的——同一条路径解析出同一个模块实例,不会出现
「一份代码两个 LlmError / cordis」。

四处必须一起改:

  1. syncBridgeLinks:归档 specifier 改写;解不出入口的才退回挂链(错误形态与改动前一致);
    旧版留下的悬空链摘掉。
  2. probePiAi 归档感知:归档候选不建链,生成一份把 pi-ai specifier 写成归档 URL 的探针。
    不这么做,探针会靠链田上那条健康链蒙对(探针目录就在 bridge 下面,往上正好撞见),
    把不合格的候选判成通过。
  3. 副本从真源重新推导,不在现有内容上打补丁:改写一旦把 specifier 换成 URL 就回不了裸名,
    ON→OFF→ON 往返时补丁式改写会让副本一直留着上一轮的 pi-ai URL,静默用错版本。
  4. pi-ai 需求改读真源(bridgeRequirements / loadBridge):读副本的话,被改写后一条
    pi-ai specifier 都匹配不到,会退化成「需求为空 → 所有候选 unverified 直接放行」,体检名存实亡。

顺带修 entryTarget 的模式键分支:只认字符串值,而真包的 "./providers/*" 是条件对象,
整条模式键都会被跳过。

验证

  • 新增 test/bridge-archive-links.mjs(41 条断言,进 npm test 链):归档边界与字符串判定、
    归档 specifier 改写、悬空链摘除、真目录仍挂链、幂等、入口解不出退回挂链、
    ON→OFF→ON 往返逐字一致、副本被改写后需求仍读得到、归档 / 真目录候选的 probePiAi。
  • npm test:exit 0,607 条 ok 断言,0 FAIL,18 个测试文件全过。
  • 真机往返:拨 OFF → llm bridge active on pi-ai 1.2.0(归档里 DSH 自带那份);
    拨回 ON → llm bridge active on pi-ai 1.3.0(安全区下载档)。
  • 真机落盘:ON 档 5 条 pi-ai 裸名 + 8 条 @deepseek-ai URL;OFF 档 5 条 pi-ai URL;
    两档 @deepseek-ai 都是 8 条 URL;安全区无 .probe-* 残留。

影响

纯修复:无行为变更、无配置变更。升级后重启即生效(桥接副本按源哈希刷新,改写幂等)。

@ztyss/dsh-llm-provider v0.2.6

Choose a tag to compare

@Ztyss Ztyss released this 12 Oct 10:57

修复

  • 「测试」连官方默认端点:路由没写 baseURL 时回退 pi-ai 工厂的官方默认端点(目录 id 才有,如 zai-coding-cn → https://open.bigmodel.cn/api/coding/paas/v4);目录外 id 仍如实回报不硬猜。
  • 「添加模型」表单报错原位替换:全部表单内校验(ID 空/重复/已在目录/数值非法)写进表单自己的消息槽,原位替换测试结果并带红字样式;不再掉到编辑器底部的小字行。
  • 删除自定义模型后清单页幽灵行:保存时就地剪除该路由名下不在新清单里的声明系详情键(adapter/目录详情不动,裸 id 兜底键仅指向被删详情本体时一并清)。
  • 新增/删除保存后的陈旧状态粘住:行集改草稿制渲染(没动过草稿每次渲染从当前数据重算),保存时三层本地状态(详情/目录/plan)乐观更新——重开清单立即正确,不必等宿主秒级慢刷新。
  • 模型选择器徽标缺失:选择器每次展开重拉模型详情图——设置页新增的自定义模型立即带视觉/推理徽标与上下文标注。

测试与工程

  • 新增 test/pi-ai-endpoint.mjs(19 断言)、test/declared-prune.mjs(14 断言)、race-reopen-probe / form-error-probe / ghost-row-probe / selector-badge-probe 四个 UI 探针;npm test 链 24 个测试文件。
  • patch-condition 真实 loader 定位机器无关化(DSH_CHECKOUT → devDependencies 解析,不再写死机器路径)。
  • ui-harness 基建升级:mini-react v3(卸载清扫对齐真 React 卸载语义)、stub 快照语义、__lpDebug 仪表门。

升级后需重启宿主生效。

v0.2.5

Choose a tag to compare

@Ztyss Ztyss released this 28 Sep 07:52

修复

  • deepseek 基础路由 base 声明按内核分派:0.2.4 在 0.1.5 系宿主上 deepseek 卡片死掉(未配置 key / 查询失败 / 没有凭据名)——base 声明改为条件表达式,桥接接管(0.1.5 系)才提供完整路由,0.1.7+ 返回 {} 维持官方 deepseek-account 决策。判定与 llm-pi-ai 行禁用条件共用同一探测骨架(读宿主 @deepseek-ai/dsh 版本号)。
  • 账户行 baseUrl 如实透传:glm / deepseek / minimax / zenmux 适配器此前把账户行 baseUrl 降级成 URL.origin(剥掉路径),导出 YAML 的 baseURL: 行同样丢路径。
  • 同名手填行取数目录版优先:宿主为 custom 路由自产声明模型详情(无 source),qualified 键先命中会让目录收录的行仍显示可编辑状态。
  • pi-ai-safe-install 测试在短路径用户名(ZHUTIA~1 → %7E1)下 ENOENT。

新增

  • 模型选择器 modlens 包装组显示上游同样额度:modlens-<上游> / deepseek-modlens 的 chip、输入框旁当前额度、/model 面板按上游账户取数(dot 状态点与配色一并跟上游)。
  • custom 路由编辑模型按 baseURL 映射 pi-ai 目录候选:id 不在目录里的自定义路由(多把 key 的 custom zai)按 API 地址精确匹配同端点目录 provider,目录模型全部进候选清单;同名行以目录版元数据为准,手填独有条目保留,勾选保存才落盘。

v0.2.4:供应商卡片告警统一——短标签 + hover 全文,不再平铺报错

Choose a tag to compare

@Ztyss Ztyss released this 25 Sep 06:33

v0.2.4:供应商卡片告警统一——短标签 + hover 全文,不再平铺报错

自 v0.2.3 起 12 个提交。主线是供应商卡片上「错误 / 告警」呈现的统一重构:卡片上只留短标签和数字,一切全文只在鼠标悬停时出现(本版五条用户批注逐条落地,每处都有离线断言或 CDP headless 探针取证,红→绿)。

查询失败:详情 hover 化

  • 详细报错改为 hover「查询失败」出现:chip 的 title 挂完整报错原文(如「API key 有效,但该 workspace 没有订阅 OpenCode Go(HTTP 403)」),不拼前缀——hover 目标本身就是这四个字
  • 展开卡底部的报错行移除:查询失败的 log 不再在展开体平铺;凭据体检结论是处置建议不是 log,另行走告警通道
  • 错误卡不再自动展开:卡片默认恒收起,「有错就自己弹开」的行为删除;状态由红点 + 红色短句表达

告警全部 chip 化(统一处理)

  • err / warn / note 三类一套机制:由 headlineChips 统一产出短标签 chip——「查询失败」(红)/「凭据告警」(红,多 provider 共用一把 key 的体检结论)/「账户不可用」(橙,欠费、未订阅套餐等业务提示);原文一律挂 chip 的 title,hover 即全文
  • 两处平铺槽位删除:收起态的整行红字(截断省略号)与展开体底部的告警行都不复存在——收起与展开看到的是同一行 chips,信息一份不丢、一处不重
  • 色调语义:err/warn 红(#d9534f)、note 橙(#d9a300)——提醒不是失败
  • 与余量 chips 共存:告警 chips 排在余量/余额 chips 之后,5h/7d/30d 数字仍是主角

状态 chip 的 hover 说明(新)

  • 「未配置 key」:hover 显示「还没有配置这个 provider 的 API 密钥——展开卡片,在「API 密钥」行填入并保存后即可查用量」
  • 「无适配器」:hover 显示「插件还没有适配这个 provider,暂时查不了用量」;给插件作者的开发提示(note)依旧不下发给普通用户
  • 中英字典同步(zh:凭据告警/账户不可用;en:credential alert/account unavailable)

修复与工程

  • lib 产物合并漂移修复:合并提交里的构建产物曾被 git 行级合并成「两边源码各一半」的杂交文件(已安装产物与源码不对应)——以合并后源码重建替换;此后每轮合并核对安装指纹 == 本地构建
  • LICENSE / README:补本仓库版权行;版本链同步
  • npm test 全链 exit 0(453 断言,含 build 冷跑)

测试取证

  • errhover-probe(16 断言):失败卡 chip.title == 完整报错;收起/展开均无平铺;err 卡不出凭据/账户 chips;状态卡 hover 说明;?errCard / ?statCard 夹具
  • collapsed-alert-probe(12 断言):三颗告警 chips 顺序与色调(红/红/橙逐字面量比对 computed color)、title 全文、旧红行槽位 .pv_pcAlert = 0、展开体零告警行、展开互斥与箭头居中回归
  • client-smoke(+16 断言):告警 chips 顺序/去重/色调/与余量共存、unknown-provider 的 note 不出 chip、状态 chip tip

升级说明

  • 覆盖安装即可(GitHub 直装跟随 main 分支);无数据迁移,安全区状态(开关偏好、.cookies.yaml、vendor-status)不受影响
  • 重启 DSH 后生效

v0.2.3:状态持久化迁安全区 + 统一 Cookie 存储 + 添加面板批注落地

Choose a tag to compare

@Ztyss Ztyss released this 24 Sep 00:15

v0.2.3:状态持久化迁安全区 + 统一 Cookie 存储 + 添加面板批注落地

自 v0.2.2 起 17 个提交。主线是把「会跟着插件包被重装抹掉的状态」全部搬进安全区($DSH_HOME/llm-provider-bridge/),外加添加供应商面板与提示语的三轮用户批注落地(每处都有离线断言或 CDP headless 探针取证,红→绿)。

状态持久化迁安全区(重装插件零丢失)

  • 「启用最新版 pi-ai」开关偏好迁安全区:vendor 状态文件从插件包内 vendor/status.json 迁至 $DSH_HOME/llm-provider-bridge/vendor-status.json——此前每次重装/升级插件,开关都被重置回 OFF(包管理器会整棵重建插件目录)。包内过渡版文件在首次读取时自动并入安全区后移除
  • 状态读写统一走安全区一条路:修复迁移过程中「写安全区、读包内」的分裂——开关拨 OFF 实际写成功了、状态路由却读包内残留弹回 ON,表现为「按钮失效」(bridge 导出 readVendorStatus(),状态路由与启动检查统一走它)
  • 实证:设 ON → 物理删除插件包目录 → 从 tarball 重建 → 偏好存活

统一 Cookie 存储 .cookies.yaml(新)

  • 单文件、可扩展:$DSH_HOME/llm-provider-bridge/.cookies.yaml(点前缀隐藏,对齐 .credentials.yaml 习惯;只认这一个文件),范式对齐 credentials(version + 扁平键表);键 = 凭据 ref 名(如 STEPFUN_CONSOLE_COOKIE),新 provider / 新 cookie 直接加键;通用模块 adapters/cookie-store.ts(解析容错手改、坏行不炸查询)
  • 旧版单槽会话文件自动迁移:stepfun-console-session.json 首次读取并入新文件后移除
  • 种子指纹去重(写盘收敛):条目记 seedSha(种子凭据指纹)——同一凭据的后续配额刷新命中指纹即用存储值,不再把静态凭据反复写回。此前一次配额刷新 = 两次写盘 + 一次白做的续期 RPC,.cookies.yaml 每次刷新都变;现在只在「重贴 Cookie」与「续期轮换」两种真实变化时落盘
  • 碎片种子守护:种子必须含 Oasis-Token 段——凭据里只贴了 Oasis-Webid 一枚的碎片不会覆盖已轮换的好 jar
  • 全新机器首存:bridge 目录不存在时自动创建

添加供应商面板(三处批注)

  • 按钮门槛:「发现模型」「查询配置」改为 API 密钥与 API 地址都填了才可点(此前各只查自己那格)
  • 地址锁死修复:custom-gateway 的 API 地址首次输入后不再变只读——可填条件从「当前值为空」(一打字就锁)改为「所选预设不带 baseURL」,半截输入可续打
  • 取消 = 清空并收起:表单回初始空值,模型勾选 / Cookie 草稿 / 下拉展开态一并归零;此前只收起不清空,旧输入留到下次打开
  • 取证:新增 test/ui-harness/addpanel-probe.mjs(CDP headless 驱动真 lib/client.js,13 条 DOM 断言 + 截图,红→绿)

提示语与开关结论

  • 「查询配置」提示通用化:去掉「(含 step_plan 的走 Step Plan 点数)」括弧——该按钮对全部 provider 出现,提示不应带单家专属内容
  • 拨 ON 清旧结论:OFF→ON 后,上一次拨 OFF 的同步结论(「已在使用 DSH 自带的 pi-ai」)不再残留——ON 的进行中/终态都走开关行右侧文字

测试与开发流程

  • 存储测试物理隔离:stepfun-billing 改 DSH_HOME 一次性临时目录——此前「挪走-恢复」式隔离与运行中的宿主在真实 bridge 目录上竞争(实际污染过真 .cookies.yaml 一次,真数据经旧会话文件完好恢复);真目录 hash/mtime 零触碰实证
  • 环境态解耦:bridge-candidates / pi-ai-probe 的候选档 key 契约断言显式传 'dsh'——无参调用读线上偏好,开关 ON 时多出的 safe-* 档会把断言打红(时红时绿的根源);pi-ai-probe 失败时打印实际 key 列表
  • dev-merge 内容守恒免重复全量:合并后树与刚复测的分支树逐位一致即跳过主线重复全量(git rev-parse <branch>^{tree} 比对),每轮流程省一次完整测试
  • 全新机器首存:bridge 目录不存在时自动创建(此前首存会 ENOENT)
  • npm test 全链 exit 0(含 build 冷跑 5.5s)

升级说明

  • 覆盖安装即可;pi-ai 开关偏好、已下载版本、StepFun 会话全部无损迁移(首次刷新时自动搬迁)
  • 重启 DSH 后生效

v0.2.2:StepFun 计费双通道 + provider 页面两轮打磨

Choose a tag to compare

@Ztyss Ztyss released this 23 Sep 11:58

v0.2.2:StepFun 计费双通道 + provider 页面两轮打磨

自 v0.2.1 起 28 个提交。一条并行 agent 线做完了 StepFun 计费/额度查询,另一条把 provider 编辑页与「添加供应商」面板按用户批注逐条打磨(每处都有 CDP headless 探针取证,红→绿)。

新增:StepFun 计费适配器(双通道,按 API 地址自动选)

  • 钱包通道:GET /v1/accounts 查余额,balance / 现金余额 / 赠金 三行 CNY;401/403 显式报错
  • Step Plan 通道(baseURL 含 step_plan):QueryStepPlanRateLimit 查套餐点数 → credit_buckets 逐个成窗口(总量/剩余/百分比/秒级重置时间)+ 五小时窗 + 每周窗;WAF 指纹拦 node fetch,改走 System32 curl + -o 文件输出(stdio:'ignore' 绕开 electron 沙禁的管道 EPERM)
  • 控制台 Cookie 自动续期:会话段 30 分钟过期时调 passport RefreshToken,用 27 天长效段轮换 Oasis-Token,会话持久化到安全区 stepfun-console-session.json——长效段内免维护;Cookie 过期按网关错误体分类(expired / illegal / embezzled)给人读的提示,不再静默降级
  • 查询入口通用化:BillingAdapter 契约加 queryConfigNeeded(baseUrl),host 按适配器求值后随 AccountStatus 下发;需要额外配置的(step_plan)出「查询配置」+ Cookie 编辑器,不需要的(opencode-go / deepseek 等)点按提示「无需额外配置查询方式!」
  • match 判据只认 baseURL 官方域名(api.stepfun.com):provider id 可改名、不作判据;CONSOLE_COOKIE 凭据名只跟随路由 ID(id 是配置键不可改,apiKeyEnv 用户可改会漂移)

StepFun 额度标签语义(用户批注纠正 + 兜底重做)

  • 套餐点数窗口名带 bucket 类型后缀(Step Plan 套餐点数(bucket monthly)):后缀里的 month 命中 30d 是正确语义——那个套餐就是月度 plan(用户明确"就是要显示 30d")。曾一度误加 Step Plan → Step 前缀特例,已收回
  • 兜底档统一 Remaining:原先是 text.slice(0,4) 截原名四个字,只会产出 Step / Openc / GLM 这类既非档位也非来源的乱码
  • 兜底档悬停只给「余量 x%」:不挂档位(会拼出 Remaining余量)、也不挂窗口原名(会把 bucket 后缀那串噪声带回来);已知档仍是「30d余量 40%」

provider 编辑页 / 添加供应商面板(每处附截图批注 → 取证 → 修复)

  • 聚焦描边:输入框聚焦从「border 加深 + inset 1px 同色阴影」(视觉 2px)收敛为 1px 深色 border,与协议下拉展开态完全同款
  • 值列统一灰:自绘下拉的值文本改用 label-secondary,与其它值列一致
  • 按钮不再顶行尾:「查询配置」「保存」压掉 margin-left:auto 紧贴各自输入框(曾试过用固定输入框宽度强行对齐两个按钮,结果把框撑得比别的行宽 60px,已撤)
  • 下拉弹层:协议弹层外观逐字段对齐「供应商筛选」下拉(border 同 token、投影换 elevation-prominent)
  • 选中项:品牌色 + 加粗之外补浅灰底 + 行尾官方同款对勾
  • 供应商下拉箭头:▸/▾ 文本字形 → 官方 caretSvg,与协议下拉同一只
  • 未选供应商时四项全锁:路由 ID / API 密钥 / API 地址 / 协议 一概不可填;不可填字段渲染成 span 而非 input(readOnly)——宿主的黄色 focus 环只在可聚焦元素上出现,span 压根聚焦不了(比压 outline 根治)
  • 按钮置灰语义:「发现模型」没选供应商或密钥为空即灰;「查询配置」API 地址为空即灰——与该按钮实际所需的前提对齐,不等点完才告知
  • 按钮就位与对齐:发现模型 → API 密钥旁、查询配置 → API 地址旁;「添加到列表」左对齐
  • 协议文案人类可读:providerApiLabel() → OpenAI Completions / Anthropic Messages,添加面板与 provider 编辑页一致,不再裸露 api 串
  • 删「密钥存为 …」行;「控制台 Cookie」标签改「Cookie」(标签列 72px,原标题折两行)
  • 修一个自己踩的坑:不可填字段换成 span 后,空 span 没有行盒,高度从 34px 塌成 14px(.pv_field 补 min-height:20px 内容盒下限,三种形态一律 34px)

pi-ai 桥接

  • 待生效的那一版若正是本次检查真下载来的 → 说「已更新 x.y.z(重启生效)」;文件早有、只是没在跑(原地启用)→ 「已下载」——不再两种情况都念「无需下载」且不提重启

测试

npm test 全链 0 失败;新增 test/ui-harness/rowpolish-probe.mjs(CDP headless 驱动真 lib/client.js,44 条 computed style / 几何断言 + 全页截图取证,覆盖上述每一处批注,红→绿可复现);local-patches / client-smoke 同步补窗口标签与下拉文案断言。harness 补宿主设计 token 替身(否则无 fallback 的颜色属性退化成 inherit,颜色断言恒真)。

安装:dsh plugin --profile web add github:Ztyss/dsh-llm-provider(走 main 分支,需重启 dsh)

v0.2.1

Choose a tag to compare

@Ztyss Ztyss released this 22 Sep 14:24

v0.2.1:「启用最新版 pi-ai」开关

设置页(Provider → pi-ai 桥接)新增 「启用最新版 pi-ai」toggle:让 dsh 的官方 pi-ai 适配器跑在从 npm 下载的最新版 @earendil-works/pi-ai 上,替代 DSH 自带的 0.85.1——pi-ai 出新版本、支持新模型时不必等待 dsh 发版。

功能行为

  • 拨 ON = 常驻意图:立即从 npm registry 拉 dist-tags.latest 的 @earendil-works/pi-ai(sha512 校验 → 内置 tar 解压 → npm install 依赖闭包 → 桥接 import 需求体检),落盘安全区 ~/.dsh/llm-provider-bridge/pi-ai/<版本>/(插件包可被整棵递归删,下载的几百 MB 不放包里);重启后桥接软链指向自有版。每次启动也会检查一次:本地无就绪副本即自动补下载,有副本也检查更新、有新版自动下(updateDecision 跳过「最新版 ≤ 本地已就位」;60s 防抖仅防 crash-loop)
  • 拨 OFF:重启后回退 DSH 自带版,已下载文件保留,再拨 ON 零成本
  • 待重启现场推导:piAiNeedsRestart(偏好, 安全区已就位版本, 当前跑的那档) 纯函数推导——latest+有就位版+没在跑它 → true;latest+安全区空 → false;dsh+正跑安全区版 → true;其余 false。/provider/status 直接喂推导值,不再落盘写入 needsRestart 标志
  • 版本行即真相,文案只在开关行说话:x.y.z(DSH 自带 / npm 最新 / vendor) 标明在用哪份;开关右侧只在有进行/待办时说话(正在下载 / 已下载 x.y.z(重启生效)/ 已下载 x.y.z(重启后回退官方)/ 已下载 x.y.z(无法启用)/ 已下载 x.y.z(未启用))——原地启用那一态也照实说「重启生效」;明细行退场,只留版本行与常驻的未过检验原因。i18n 补 bridge.stateOffPending(zh/en),删死键 bridge.lastCheckAt。下载中 2s 轮询
  • 只保留最新一个自有版本:loadBridge 选中新版、切换完成后才清旧版(当前进程绝不踩待删目录);体检不过自动回退,开关永远有兜底
  • 闸门明示:最新版不高于当前时不再白下,结论写 status.json 并显示

稳定性修复

  • 下载态永不收尾:execFile('tar') 默认 stdio 管道在 dsh 的 electron 沙禁下 EPERM、promise 永不 settle → 子进程显式 stdio:'ignore'
  • Windows 解压失败:外部 tar 被 Node 直起时路径解析失败 → 改为纯 Node 内置 tar 解析(src/tar-gz.ts,零子进程,含 stripComponents/路径穿越防护)
  • 失败原因被吞:lastCheck 补齐 reason,界面不再把真实原因显示成「未下载」
  • npm cache 不常驻:cache 改放 tmpdir、装完即删;启动兜底清理安全区遗留

测试

npm test 全链通过(新增 tar-gz 二进制级 fixture + 真实 tarball 端到端、preference 门控——推导函数八个局面、safe-install 闸门、client-smoke 原地启用/待回退态文案等 40+ 断言);host-safety(整包零链接)/ link-removal / host-integration(降级模式)回归通过。

安装:dsh plugin --profile web add github:Ztyss/dsh-llm-provider(走 main 分支,需重启 dsh)

v0.2.0

Choose a tag to compare

@Ztyss Ztyss released this 21 Sep 16:43

v0.2.0

自 v0.1.3 以来的 57 个提交:模型思考档位全链路、目录外模型行内编辑、发现模型清单化三大特性落地,外加一批推理链路 P0 修复与界面打磨。

✨ 新特性

  • 思考档位(reasoningEfforts)全链路:勾选编辑器 / 添加表单可视化配置思考档位(off/minimal/low/medium/high/xhigh/max + 自定义线值),内置 deepseek、glm、kimi、claude、grok、qwen、gemini、gpt/o 系家族档位表,按模型 ID 前缀智能预填(ba580e4, 2f952fe)
  • 目录外模型行内编辑:点击模型 ID 直接改显示名 / 上下文 / 最大输出 / 能力,草稿制经「保存」落盘,compat 等手写字段原样保留;面板带同款「测试」实连按钮(d4e4e25, e72c0fb)
  • 发现模型:一键探测网关模型清单,表格化勾选添加;跨 provider 补全能力 / 上下文 / 最大输出元数据(8709ded, f681864)
  • 添加模型智能默认:留空自动按「精确匹配官方参数 → 已知模型最小档 → 保守常数」三级策略取值(e5f28b7, f0f898e, 1277a7d, 12310f8)
  • 编辑面互斥闭环:展开 provider 卡 / 添加面板 / 模型框互斥展开,添加成功自动收起(6b00119, 5de4077)
  • API 密钥始终可改:输入新值直接写回原凭据名,去掉「凭据名」行(29af3b7)
  • 协议下拉自绘弹层:白底 / 圆角 / 投影 / 选中品牌色高亮,与页面视觉统一;输入框聚焦边框加黑加粗、不再套外圈 outline(6046a79)
  • 页面级后台刷新用量期间,卡片 ↻ 按钮同步旋转(a5e8a99)
  • Custom Gateway 路由 ID 改为建议值形态(2259cf0)
  • 模型清单编辑器交互改版:草稿制 + 「保存」一次性落盘、每行 ✕、「还原清单」(12310f8, 2ca6fe7, db83fc7, 8d73d22)

🐛 修复

  • P0 推理链路
    • 目录外声明模型的推理等级选择不再锁死(1adb13b)
    • 裸 reasoning: true 保存时自动补齐缺失的 reasoningEfforts 档位表——修复模型选择器报 session/model-unavailable: does not support reasoning effort "high"(81bd6d7)
    • 声明条目的 reasoning:true 点亮清单页推理徽标(c7d2edd);行内编辑推理勾选态取生效值(8503085)
  • host
    • 探测被 HTTP 400 拒的网关退回清单校验——opencode-go 特例(de9d42c)
    • 补交漏提交的宿主端实连实现,在线宿主不再跑旧的清单探测(b8627af)
  • 发现模型:落盘携带元数据,上下文 / 最大输出 / 模态不再丢失(449f805);自定义网关添加被官方校验整体拒绝的问题(a2a4ab9)
  • 目录外语义:✕ 与添加默认值只认 pi-ai 目录来源,declared / adapter 详情不算目录收录(849000b, 334be59)
  • 即时性:编辑模型保存后能力列立即更新(99a417a);打开模型服务不再被用量快照阻塞(1557d23);行内编辑保存后本地立即同步(d840154)
  • 视觉细节:桥接页闪空框 / 切页签闪黑(77a2483, 7988682);协议下拉展开态边框收回 1px、弹层与输入框严格等宽(89893b3);模型框折叠态「模型(N)」竖向居中(0923505);目录外模型不再渲染「声明」徽标、能力列加宽 132px、K/M 整除口径 65536→64K、video 不写 input(641f7ae);编辑面板 / 弹层 / 按钮行各处对齐与呼吸距(9f3efe1, 0e8b173, a38f593, 3db4f20, 786d7e2, 5f8b940, f9f5750, 1a00655, e3939f1, 19d127d, daec73f, 8d73d22);模型选择器面板上限 360→560px(038c35b);清单「已添加」计数与卡片头对齐(80dad59)
  • provider 编辑:端点 / 协议 / 凭据名不允许清空(显示名留空沿用路由 ID)、/status 回传实值(2cc131c, 351b120);Custom Gateway 路由 ID 改不了 / 清空吞显示(4f5f5b9, d647307)
  • 桥接:pi-ai 体检探针 .probe-* 用完即拆,不再在用户 DSH 主目录堆积(153726e)

🧹 维护

  • harness 的 client.js 运行时副本改为 gitignore 不再跟踪(2b00d62)
  • 全量测试与 headless UI harness 持续护航;新增探针:自绘弹层几何对齐(左右边缘差 ≤0.6px)、展开态样式、思考档位保存载荷补齐、行内编辑面板预填展示等

v0.1.3

Choose a tag to compare

@Ztyss Ztyss released this 20 Sep 03:01
  • fix(ui): 模型 ID 超长时单行省略号截断(title 悬停看完整 ID),不再与能力徽标重叠——清单页与勾选编辑器统一
  • fix(ui): 「当前跟随 pi-ai 目录(N 个可用)」「当前只服务清单里的 N 个模型」提示去掉句尾句号
  • test: harness 夹具加入超长 ID(deepseek/deepseek-v4-flash-0731:patch),几何探针钉住「单行、截断、零重叠」

v0.1.2

Choose a tag to compare

@Ztyss Ztyss released this 20 Sep 02:44
  • fix(ui): 模型清单页去掉「名称」列、补「最大输出」列,模型 ID 换行完整显示(不再省略号截断),「修改模型」按钮与框底边留出间距
  • fix(ui): 清单编辑器初始勾选 = 当前真正生效的清单:跟随目录(未配 models)的 provider 目录全量预勾(此前全不勾,已启用的模型看起来像没启用);配置了 models 的仍只勾声明条目
  • test: buildEditRows 导出并钉住初始勾选语义;harness 新增跟随目录预勾、列改版、按钮呼吸距断言