Skip to content

feat: 纯 C# 接入全部 pi OAuth,授权后自动返回应用 - #10

Merged
ArabidopsisDev merged 1 commit into
ArabidopsisDev:primaryfrom
sylw114:feat/native-csharp-oauth
Oct 8, 2026
Merged

ArabidopsisDev merged 1 commit into
ArabidopsisDev:primaryfrom
sylw114:feat/native-csharp-oauth

Conversation

@sylw114

@sylw114 sylw114 commented Oct 8, 2026

Copy link
Copy Markdown
Contributor

为 ReciteHelper 增加原生 C# 模型账号 OAuth,覆盖与 pi-ai 1.1.0 对齐的全部九项:Anthropic、OpenAI、OpenAI Codex、GitHub Copilot、Kimi Code、Meta、OpenRouter、Radius 和 xAI。用户从首次配置或主界面的“模型服务”登录,在浏览器完成授权后由 loopback 回调自动接收结果并恢复授权窗口,不需要复制授权码、回调 URL 或粘贴 token。

实现:

  • 参考 pi-ai README 与 pi-ai 1.1.0 的 auth/oauth、api 源码,移植到 HttpClient、System.Text.Json、加密和 TCP API。构建、运行、测试均无需 Node.js、npm、JavaScript bridge 或子进程。
  • 原生 loopback listener 只绑定 127.0.0.1,无需管理员权限;校验路径、PKCE state 和 OpenAI 签发的 client ID,同一回调只处理一次,完成 / 取消 / 失败时关闭所有连接并释放端口。OpenAI 的固定端口冲突会报错,Codex / Radius 可切换自动轮询的设备码方式。
  • 设备授权优先使用服务端的 verification_uri_complete,批准后自动继续。部分服务需要在其网页输入一次性验证码;应用中没有 OAuth 手动凭据输入控件。个人 GitHub 账号直接登录,企业域名作为可选配置保留。
  • Windows DPAPI 加密保存完整凭据和稳定安装 ID,兼容原有加密存储。跨实例文件锁只覆盖凭据事务,已开始的刷新先持久化再响应调用者取消;模型请求在锁外并发。
  • 内嵌 pi-ai 1.1.0 的 546 个聊天模型,原生支持 Anthropic Messages、OpenAI Chat Completions、OpenAI Responses、Codex Responses、pi-messages 五种协议。保留 Copilot 账号代理与模型权限过滤、Radius 动态目录和缓存、Meta key 生成、xAI 未轮换 refresh token 的兼容处理。
  • 资料解析、出题、章节整理和错题辅助继续经 IAiChatService 路由。旧 API Key / 托管方案仍可选择,知识库向量服务独立配置。
  • 更新中英文文档、OAuth 指南及 Windows CI;pi 派生协议 / 目录保留 MIT 许可证并随发布包提供。

验证:

  • 完整 .NET Release 构建通过;原仓库的 NuGet / nullable 警告仍存在。
  • 72 项 C# 测试通过:五项浏览器授权使用真实本地 HTTP callback 自动完成且不触发凭据 prompt;另外覆盖 state / client ID / 重复回调拒绝、取消释放端口、设备授权、九个服务的刷新、546 个模型请求构建、五种 SSE、UTF-8 大响应、DPAPI、跨实例刷新、失败保留与并发推理。
  • win-x64 Release 发布通过,确认新发布目录中没有 .js / .mjs / node.exe,MIT notice 正确包含。
  • WPF 界面已渲染检查;截图使用合成数据。真实服务商账号授权与实际计费请求尚需账号验证。

替代已关闭的 #9。

自动返回提示(渲染预览)

@ArabidopsisDev

Copy link
Copy Markdown
Owner

Code verification passed, thank you for your contribution to the project.

@ArabidopsisDev
ArabidopsisDev merged commit 910906f into ArabidopsisDev:primary Oct 8, 2026
1 check passed
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.

2 participants