# dsh-oauth-newapi

面向 DeepSeek Harness 的 New API OAuth 提供方插件。它依赖 `dsh-oauth` 保存 OAuth 凭据，自己负责站点实例、账号选择、分组、令牌、模型发现和模型路由。

## 配置

```yaml
- id: llm-newapi-oauth
  name: dsh-oauth-newapi
  config:
    instances:
      - id: company
        displayName: Company New API
        issuer: https://newapi.example.com
```

Cordis 配置中的实例是只读预置。用户界面创建的实例保存在 `$DSH_HOME/oauth/newapi.json`；相同 ID 下预置实例优先。
New API 会通过 discovery 公布站点的唯一公开 DSH 客户端，普通配置只需站点地址。旧站点或特殊部署可在高级设置中覆盖 `clientId` 和 `redirectUri`；回调地址必须与 OAuth 应用登记值完全一致，并使用当前机器可监听的固定 loopback 端口。

## 协议约定

- OAuth：Authorization Code + PKCE S256，仅公开客户端。
- scopes：`openid profile offline_access newapi:groups.read newapi:tokens.read newapi:tokens.create newapi:inference`。
- 推理鉴权：`Authorization: Bearer <OAuth access token>` 与 `New-Api-Token-Id: <token id>`。
- discovery 文档必须包含顶层 `newapi_endpoints` 扩展；可选的 `newapi_default_client` 公布唯一默认公开客户端，字段定义见 `src/discovery.ts`。
- access token 和 refresh token 仅由 `dsh-oauth` Host 管理，不进入本插件状态文件或 Remote。

首次完成账号、分组和令牌配置后，Host 自动获取一次模型；自动尝试在请求前持久化，因此失败或重启不会重复触发。后续由用户手动刷新，失败时保留上一次成功模型列表。

## 开发验证

```sh
pnpm run typecheck
pnpm test
pnpm run build
pnpm run pack:check
```
