# Clavue v8.10.14 — Website / Marketing Update Pack

**Audience**：clavue.com 的内容维护者 / marketing。
**目标**：把 8.10.14 的 user-visible 变化更新到首页、changelog、docs 三个地方。
**约束**：本仓库不含网站源码（见 `docs/website-content-recommendations.md`）。这份文档把所有"可粘"内容打包好。

---

## 1. 首页改动建议

### 1.1 顶部 banner / hero 副标题

替换或新增：

> **v8.10.14** — 修复 GPT-5.x / Codex 路径下两处语义丢失：tool_result 返图不再被字符串化，assistant thinking 在多轮里不再被静默丢弃。长流程（如 release skill 用截图验证）从"循环 polling 不前进"变为正常推进。

CTA 链接到 changelog 锚点 `#8-10-14`。

### 1.2 "新功能 / 新修复" 卡片

新增 2 张：

**卡 1: GPT-5.x 路径上的工具截图不再丢失**

- 标题：Screenshots in tool results survive the OpenAI Responses adapter
- 副标题：之前用 gpt-5.5 / codex 路由运行涉及"工具返图给模型分析"的流程（release 验证、UI 截图测试、屏幕 OCR）时，图片会被字符串化为 `[image] {"base64": "..."}` 噪声，模型彻底失明。现在图片以 OpenAI 协议合规的 `input_image` 形态作为 follow-up user message 保留下来。
- 数据点：用户 case —— 用 gpt-5.5 跑 release skill 14 分钟原地 polling，换 claude-opus-4-7 立刻成功；本版本修复后两条路径行为一致。
- 链接：`/docs/changelog#8-10-14`

**卡 2: 多轮工具流不再"健忘"**

- 标题：GPT路径上的 reasoning 历史不再消失
- 副标题：Anthropic thinking 块在转换到 OpenAI Responses 时之前被一刀切丢弃，长 skill 跑到第 N+1 轮 GPT 看不到自己第 N 轮的计划。修复后以 `[reasoning] ...` 前缀降级保留为 output_text，模型保持连贯。
- 链接：`/docs/changelog#8-10-14`

---

## 2. Changelog 页（/changelog 或 /releases）

把以下 markdown 块直接 append 到 changelog 页顶部：

```markdown
## v8.10.14 — 2026-05-14

### Fixed
- **OpenAI Responses 适配器：tool_result 中的图片不再被字符串化丢失**：`stringifyToolResultContent` 之前对 `image` 块走 fallback，输出形如 `[image] {"type":"image","source":{"base64":"..."}}` 的 stringified base64，让 GPT-5.x / Codex 路径在"截图验证"类工具上彻底失明（release skill 用截图确认网站是否已部署是典型场景）。Anthropic 直通路径不经过该层翻译所以无此问题，表现为同一个工具调用在 Claude 模型下正确、在 GPT 下"产物不对"。修复方案：从 tool_result 抽出 image block，作为紧跟 `function_call_output` 的独立 `role: user, content: [input_image]` 消息推入 input。
- **OpenAI Responses 适配器：assistant.thinking 在多轮回放时不再被静默丢弃**：之前 `translateAssistantContent` 对 thinking / redacted_thinking 一刀切 `break`，导致长 skill 第 N+1 轮 GPT 看不到自己第 N 轮的推理链，容易重新规划、原地打转。修复：thinking 文本以 `[reasoning] ...` 前缀降级为 assistant output_text 保留进 input。redacted_thinking 无可读内容仍丢弃。

### Added
- 新测试 `tests/responses-adapter-release-flow-regressions.test.mjs`（T1 + T2）：构造含 base64 截图的 tool_result 和含 thinking 的 assistant 消息，断言适配器翻译后图片不被字符串化、thinking 文本仍可见。锁住两个回归点，后续重排或回退会立即爆红。
- `toolResultStringify.ts` 新增导出 `extractToolResultImageBlocks(block)` 供 requestBuilders 抽出 tool_result 中的 image。

### Changed
- `src/services/api/responsesAdapter/toolResultStringify.ts` 的 `stringifyToolResultContent`：`image` 块返回空字符串而非 fallback stringification，避免在 `function_call_output.output`（string-only 字段）里泄漏 base64 噪声。
- `src/services/api/responsesAdapter/requestBuilders.ts` 的 `translateUserContent` 中 `tool_result` 分支：发出 `function_call_output` 后调用 `extractToolResultImageBlocks` + `translateAnthropicImageBlockToResponses`，把图片作为独立 user message 紧跟其后。
- 同文件 `translateAssistantContent` 中 `thinking` 分支：从 `break` 改为生成 `[reasoning] ${text}` 前缀的 output_text 项。

### Tests
- 新增 2 个契约测试（responses-adapter-release-flow-regressions）
- 全套 `npm run check` 1299 tests / 1296 pass / 3 skipped / 0 fail, ~59s

### Compatibility
- Claude-family 用户（走 Anthropic `/v1/messages` 直通路径）**体验无变化**。
- GPT-5.x / Codex 用户：tool_result 含图片时模型现在能看到图；多轮 skill 时 GPT 能看到自己上一轮的推理。无任何破坏性变更。

升级：

\`\`\`bash
npm install -g clavue@8.10.14
\`\`\`

完整发布说明：[docs/clavue-v8.10.14-release-notes.md](https://github.com/mycode699/clavue/blob/v8.10.14/docs/clavue-v8.10.14-release-notes.md)
```

---

## 3. Docs 页改动建议

### 3.1 在 `/docs/provider` 或新建 `/docs/openai-responses-adapter` 页面加一节

参考骨架：

```markdown
# OpenAI Responses adapter — semantic parity with Anthropic Messages

When the active model is in the GPT-5.x / Codex family, Clavue routes
through `/v1/responses` via an Anthropic-Messages → OpenAI-Responses
adapter (`src/services/api/responsesAdapter/`). Claude-family models go
straight to `/v1/messages` with no translation.

Two block types historically lost information in that translation; both
are fixed in v8.10.14:

## tool_result containing images

OpenAI Responses' `function_call_output.output` is a string-only field.
A naive stringification of an Anthropic image block produces base64 noise
that the model cannot read. Clavue now extracts image blocks from
tool_results and forwards them as a separate `role: user, content: [input_image]`
message immediately after the function_call_output, preserving both the
text part of the tool result and the visual evidence.

## assistant.thinking on multi-turn replay

OpenAI has no signed reasoning surface that matches Anthropic's
`thinking` block (with `signature`). Rather than drop reasoning history
entirely — which made long skills lose continuity — Clavue downgrades
thinking text into a `[reasoning] ...` prefixed `output_text` part on
the assistant turn. Models can see what they planned previously without
confusing it with their public reply.

## Fields still lost on this transport

`cache_control`, `citations`, and `redacted_thinking` still cannot be
expressed on the OpenAI side. The adapter logs a per-turn warning when
these are present so users on GPT routes know the metadata was dropped.
For prompt caching to take effect across Anthropic-only fields, use a
first-party Claude route.
```

### 3.2 更新 `/docs/changelog` 页

把 §2 的 changelog 块直接贴顶部即可。

---

## 4. llms.txt / llms-full.txt

本次发布同时把这两份文件版本字段同步到 8.10.14（之前停留在 8.10.8 和 8.10.13）。如果网站直接消费这两份文件做发布版本声明，请确认拉取最新仓库内容。

---

## 5. Social / 短文案候选

> Clavue 8.10.14 修了 GPT-5.x 路径上一个长期细节 bug：之前 release skill 用截图验证发布是否成功时，GPT 看到的是 base64 字符串噪声而不是图，导致循环 polling 不进展。换 Claude 立刻就好。本版本让两条路径在工具返图和多轮 reasoning 上行为一致。npm i -g clavue@8.10.14

> v8.10.14: GPT-5.x routes now preserve images returned from tools and assistant reasoning across multi-turn skills — two places the OpenAI Responses adapter used to silently drop information. Claude routes were never affected. Long workflows like release verification now behave the same on both providers.

---

## 6. 不要做的事

- **不要重写老 changelog 条目。** v8.10.4 / v8.10.13 等保持不动，只 append。
- **不要在公开文案里把 root cause 描述为"GPT 模型不行"** —— 这是 adapter 层的翻译丢失，跟 GPT 模型质量无关。强调"clavue 这一侧之前丢了信息，现在补齐了"。
- **不要承诺 100% 跨 provider 行为等价。** `cache_control` / `citations` 仍然丢失（无 OpenAI 对应字段），文案应说"两条路径在工具返图和多轮 reasoning 上现在一致"，而不是"完全等价"。
