Add typed AuthError variants once the runtime distinguishes auth-missing/invalid/unreachable
- 主要语言
- Java
- 星标
- 10.5k
- 派生
- 1.5k
- 平均合并
- 1 天 11 小时
- 30 天内合并 PR
- 128
描述
## Context
Companion to [github/copilot-agent-runtime#7485](https://github.com/github/copilot-agent-runtime/issues/7485) — the runtime today returns identical generic `-32603 internal_error` payloads for "no token," "invalid token," and "network unreachable." Once the runtime adds distinct codes (e.g., `-32001 AuthMissing`, `-32002 AuthInvalid`, `-32003 AuthUnreachable`), the SDK should expose them as a typed enum so consumers don't string-match.
## Proposed shape
```rust
pub enum Error {
Rpc { code: i32, message: String, data: Option },
// ...
Auth(AuthErrorKind), // new
}
pub enum AuthErrorKind {
/// No token configured. User needs to sign in.
Missing,
/// Token rejected by CAPI (401/403). User needs to reauth.
Invalid,
/// Transport failure talking to CAPI. Retry, don't reauth.
Unreachable { cause: String },
}
```
The SDK can map known runtime codes to `Error::Auth(...)` and leave anything else as `Error::Rpc { ... }`.
## What this lets consumers delete
In Copilot Desktop today (`src-tauri/src/error.rs:115-120`) we string-match three magic phrases:
```rust
pub fn is_copilot_auth_failure(&self) -> bool {
let message = self.to_string().to_ascii_lowercase();
message.contains("not authenticated")
|| message.contains("authenticate first")
|| message.contains("no authentication info available")
}
```
Plus the connectivity-tracker workaround in `handlers/auth.rs::emit_copilot_cli_auth_issue` whose only job is to second-guess whether the runtime's "not authenticated" really means "not authenticated" or "couldn't reach the auth service." Both go away with typed variants.
## Dependencies
Blocked on the runtime change ([github/copilot-agent-runtime#7485](https://github.com/github/copilot-agent-runtime/issues/7485)). No useful SDK work to land before the runtime distinguishes the cases on the wire.
---
Generated via Copilot (Claude Opus 4.7) on behalf of @tclem
贡献指南
调研方向
这项工作受 github/copilot-agent-runtime#7485 阻塞;先阅读该 runtime issue,并定位 SDK 现有的 Error/Rpc 映射,因为这里没有指定 SDK 文件。存在不同的 wire code 后,将它们映射到 AuthErrorKind,并将未知 code 保留为 Rpc,然后验证 src-tauri/src/error.rs:115-120 和 handlers/auth.rs::emit_copilot_cli_auth_issue 不再需要字符串匹配或 connectivity workaround。
由索引模型根据 Issue 内容生成。
评估
- 技术栈
- rust
- 领域
- api, authentication
- Issue 类型
- 功能
- 难度
- 5/5
- 预计耗时
- 一周以上
- 活跃度
- 冷清
- 描述清晰度
- 描述清楚
- 新手友好度
- 25/100