# v0.5.0 Release Notes

> v0.4.1 -> v0.5.0

## Summary

Unifies cross-provider token streaming behind a shared SSE layer and brings remaining backends online, including Gemini. Hardens stream error surfaces with typed failures and clearer upstream diagnostics.

<details>
<summary>翻譯</summary>

以共用 SSE 層統一跨供應商 token 串流，並補齊其餘後端（含 Gemini）。以型別化錯誤與更清楚的上游診斷強化串流失敗表面。

</details>

## ⚠️ Breaking Changes

### `core.OpenStream` no longer returns HTTP status

**Before:**
```go
func OpenStream(ctx context.Context, client *http.Client, url string, headers map[string]string, body map[string]any, label string) (*http.Response, int, error)
```

**After:**
```go
func OpenStream(ctx context.Context, client *http.Client, url string, headers map[string]string, body map[string]any, label string) (*http.Response, error)
```

**Migration:**
```go
// Old
resp, code, err := core.OpenStream(ctx, client, url, headers, body, label)
if err != nil {
    // use code or err
    _ = code
}

// New — status lives on *core.StreamError when the request fails
resp, err := core.OpenStream(ctx, client, url, headers, body, label)
if err != nil {
    var se *core.StreamError
    if errors.As(err, &se) {
        code := se.Code
        _ = code
    }
    return err
}
defer resp.Body.Close()
```

<details>
<summary>翻譯</summary>

`OpenStream` 不再回傳 HTTP status `int`。失敗時改以 `*core.StreamError` 承載 `Code`／`Body`／inner `Err`，呼叫端請用 `errors.As` 取出狀態碼。

</details>

## Changes

### BREAKING
- Change OpenStream to drop status and return StreamError (@pardnchiu) [95b26bb]

<details>
<summary>翻譯</summary>

- 變更 OpenStream 簽章：移除 status 回傳並改回 StreamError (@pardnchiu) [95b26bb]

</details>

### FEAT
- Add shared SSE streaming support across LLM providers (@pardnchiu) [d3988b0]
- Add Grok/Compat streaming and unify SSE parsing (@pardnchiu) [fcec9e0]
- Add Grok OAuth and Codex streaming support (@pardnchiu) [568315e]
- Add Gemini streaming with ThoughtSignature on tool deltas (@pardnchiu) [95b26bb]

<details>
<summary>翻譯</summary>

- 新增跨 LLM 供應商的共用 SSE 串流支援 (@pardnchiu) [d3988b0]
- 新增 Grok／Compat 串流並統一 SSE 解析 (@pardnchiu) [fcec9e0]
- 新增 Grok OAuth 與 Codex 串流支援 (@pardnchiu) [568315e]
- 新增 Gemini 串流，並在 tool delta 帶 ThoughtSignature (@pardnchiu) [95b26bb]

</details>

### UPDATE
- Change OpenAI fast-mode service_tier from fast to priority (@pardnchiu) [568315e]
- Prefer a single reasoning delta field over concatenating both (@pardnchiu) [95b26bb]
- Improve provider stream/send error prefixes and body limits (@pardnchiu) [95b26bb]

<details>
<summary>翻譯</summary>

- 將 OpenAI fast mode 的 service_tier 由 fast 改為 priority (@pardnchiu) [568315e]
- reasoning delta 改為擇一輸出，不再串接雙欄位 (@pardnchiu) [95b26bb]
- 改善各供應商串流／同步錯誤前綴與 body 長度上限 (@pardnchiu) [95b26bb]

</details>

### REFACTOR
- Route Claude streaming through OpenStream and ScanSSE (@pardnchiu) [95b26bb]
- Export stream body/error size limit constants (@pardnchiu) [95b26bb]

<details>
<summary>翻譯</summary>

- Claude 串流改走 OpenStream 與 ScanSSE (@pardnchiu) [95b26bb]
- 匯出串流 body／錯誤大小上限常數 (@pardnchiu) [95b26bb]

</details>

## Scope

- `core/stream.go`, `core/sse.go`, `core/type.go` — BREAKING, FEAT, UPDATE, REFACTOR
- `core/gemini/` — FEAT (`stream.go`, `send.go`)
- `core/openai/`, `core/deepseek/`, `core/nvidia/`, `core/openRouter/`, `core/copilot/` — FEAT
- `core/grok/`, `core/compat/`, `core/claude/` — FEAT, REFACTOR
- `core/grokOauth/`, `core/openaiCodex/` — FEAT, UPDATE
- `core/cloudflare/` — FEAT (`stream.go` stub)
- `core/*/send.go` — UPDATE (error prefixes, limits)

***

Generated by [SKILL](https://github.com/pardnchiu/skill-version-generate)
