Skip to content

Feature/provider onboarding stack - #38

Open
HarriethWiKk wants to merge 27 commits into
huiliyi37:mainfrom
HarriethWiKk:feature/provider-onboarding-stack
Open

Feature/provider onboarding stack#38
HarriethWiKk wants to merge 27 commits into
huiliyi37:mainfrom
HarriethWiKk:feature/provider-onboarding-stack

Conversation

@HarriethWiKk

@HarriethWiKk HarriethWiKk commented Aug 14, 2026

Copy link
Copy Markdown
Collaborator

变更摘要

统一 Provider onboarding 流程,新增 probe-first 接入、凭证安全存储、TUI /connect 配置向导,以及独立视觉模型 /vision onboarding 闭环。

动机

现有 Provider 配置路径分散在旧版 readline wizard、预设逻辑和通用配置接口中,存在以下问题:

  • Provider 描述、协议和模型能力信息重复维护;
  • 配置前缺少真实 endpoint/model 探测;
  • API key 可能以不安全形式进入普通配置;
  • TUI、CLI、Server 的 Provider 接入行为不一致;
  • 视觉模型配置依赖通用 Provider 流程,无法验证真实视觉能力;
  • 失败或中断后缺少可恢复的 onboarding 状态。

本 PR 将这些路径收敛为统一、可验证、可恢复的 Provider onboarding 流程。

主要改动

Provider API 与模型能力

  • 新增统一 Provider catalog、协议描述和模型 ID 匹配逻辑。
  • 新增 probe-first Provider 探测:
    • 获取 endpoint 的 /models
    • 选择实际返回的模型;
    • 执行 completion probe;
    • 对视觉模型执行真实图片请求;
    • 分类网络、鉴权、配额和模型错误。
  • 支持 OpenAI-compatible 与 Anthropic 协议。
  • 支持 endpoint URL 规范化、Anthropic x-api-key 认证和 Provider-specific request metadata。
  • 对未知但由 endpoint 实际返回的模型保留可配置能力,不依赖静态预设注入模型。

配置与凭证

  • API key 默认写入 secrets.jsonconfig.json 只保存 keyRef
  • 支持环境变量凭证,并只持久化环境变量名。
  • 拒绝 apiKeyapiKeyEnv 同时提交。
  • Provider 注册、覆盖、删除和默认 Provider 切换增加生命周期校验。
  • Provider secret/config 写入失败时执行配置回滚,避免留下悬空 keyRef 或半成品 Provider。
  • Provider model 更新采用字段合并,避免覆盖 supportsVisiontierpricing 等已有元数据。

TUI onboarding

  • 使用 TUI /connect 替代旧 readline Provider wizard。
  • 支持:
    • 预设 Provider;
    • 自定义 OpenAI-compatible endpoint;
    • Anthropic endpoint;
    • 无密钥本地 endpoint;
    • 多模型选择;
    • 能力补充与高级参数;
    • 默认 Provider 确认;
    • 探测报告和失败重试;
    • 草稿保存与恢复;
    • 粘贴输入、光标、搜索和列表交互。
  • 移除旧 provider-wizard.ts 及其测试路径。
  • 修复粘贴后光标位置和预填输入状态。

独立视觉模型 onboarding

  • 新增独立 /vision TUI 流程。
  • 增加服务端接口:
    • POST /config/vision-model/discover
    • POST /config/vision-model/onboard
  • 服务端重新获取 /models 并验证候选模型归属。
  • 只对用户明确选择的模型发送一次图片验证请求。
  • 验证成功后才保存独立 vision bridge 配置。
  • 视觉模型不会覆盖默认 Provider,也不会进入普通模型路由。
  • 增加 API、Server、配置和 TUI overlay 回归测试。

文档

  • 更新 Provider 用户手册中的实现入口。
  • 移除对已删除 src/config/provider-wizard.ts 的现行文档引用。
  • 历史计划和审计文档中的旧路径记录保持为历史上下文。

测试

已通过:

  • Provider 配置、secret 回滚、Provider 生命周期测试;
  • Provider probe、模型匹配和协议相关测试;
  • 视觉模型 onboarding API 测试;
  • 视觉 onboarding Server route 测试;
  • TUI /connect flow、草稿、列表、光标和恢复测试;
  • TUI /vision flow 与 overlay 测试;
  • 定向测试合计:45 tests passed;
  • npm run typecheck 通过;
  • git diff --check origin/main...HEAD 通过。

完整 npm test 尚未在本 PR 分支上得到可确认的稳定汇总结果。此前完整测试运行存在聚合进程异常,因此不将其宣称为全部通过;

检查清单

  • 本地 npm test 通过 //此问题在PR#36得到解决
  • npm run typecheck 无类型错误
  • 变更范围最小化,无关改动已排除
  • 文档(用户手册 / CHANGELOG)已同步更新

相关 Issue

暂无。

基线合并说明

本 PR 已合并最新 upstream/main(截至 3618261),并处理了 Provider 相关冲突。

合并保留了本 PR 的核心 Provider onboarding 能力:

  • 统一 Provider catalog、协议和模型匹配;
  • probe-first Provider 接入与诊断;
  • secrets.json / keyRef 凭证存储;
  • 多模型、自定义 OpenAI-compatible 与 Anthropic Provider 注册;
  • TUI /connect onboarding、草稿恢复和错误重试;
  • 独立 /vision 视觉模型发现、验证与持久化;
  • Provider 生命周期、disconnect 和配置写入回滚。

同时吸收基线中的运行时与配置改进:

  • slowThinking 显式配置及 provider 名称/base URL 启发式;
  • Provider tunables 接口:slowThinkingfirstByteTimeoutMsthinkingStallTimeoutMs
  • OpenAI 非 SSE 响应、401/403、404 的可操作错误提示;
  • 显式 requestTimeoutMs 硬超时;
  • profile overlay、config watcher、hook 配置管理与严格配置解析。

冲突处理原则:

  • Provider onboarding、凭证持久化、协议、多模型和视觉接入以本 PR 的统一实现为准;
  • 基线的 slow-thinking、tunables、profile/config 加固和运行时诊断一并保留;
  • custom Provider route 继续使用本 PR 的 registerProvider() 统一写入核心,未回退到旧单模型 setupCustomProvider() 路径;
  • 已删除的 readline provider-wizard 没有被恢复。

验证:

  • npm run typecheck 通过;
  • Provider/API/TUI/vision 合并后的定向测试通过;
  • 推送前 pre-push typecheck 已通过。

已知基线问题:upstream/main 自身在公开构建中存在一个 computer-use Pro gate 测试失败(闭源 src/pro/computer-use 模块缺席时测试预期不一致)。该失败可在干净 upstream/main 复现,与本 PR 的 Provider 合并无关。

Reviewer 可以按以下四个阶段审查:

80f71c5–eba9268:Provider 基础与探测;
2256880–c9fa861:TUI /connect 主流程;
7f10847–c99708d:生命周期、凭证安全和旧 wizard 清理;
6161601–bf7d63e:视觉 onboarding、回滚修复和文档收尾。

- secrets-store:~/.rivet/secrets.json 0600 存储,write/read/delete
- manager:内联 apiKey 一次性迁移为 keyRef;loadConfig 内存物化、saveConfig 剥离明文
- factory/provider-cli:密钥解析链首位插入 keyRef
- 首启 readline 向导降级为最小 preset 接入(TUI 走 /connect,自定义走 provider add)
…接再探测,密钥不必重输;探测失败「返回修改地址」同样预填并免重走密钥步
…失败只留原因建议);型号选取智能回退优先别名表认识的识图/多模态档;报告页补全失败新增「换个模型重探」
(cherry picked from commit 608399f7d7dee21987f3ec85402499d537faab83)
(cherry picked from commit 9a689d09be832de44ff863efc01e33a2008f4e0f)
@HarriethWiKk
HarriethWiKk marked this pull request as draft August 14, 2026 13:26
@HarriethWiKk
HarriethWiKk marked this pull request as ready for review August 14, 2026 13:43
@HarriethWiKk
HarriethWiKk force-pushed the feature/provider-onboarding-stack branch from 8161dc2 to a67422f Compare August 14, 2026 14:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant