github / github/copilot-sdk

Add typed AuthError variants once the runtime distinguishes auth-missing/invalid/unreachable

未关闭
#1,209 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看
enhancement
主要语言
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

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。