Files
claude-code/docs/internals/opus-4-7-model-integration-checklist.md
unraid 95fece4b51 feat: 整合功能恢复与技能学习闭环(含 ECC v2.1 parity + Opus 4.7 接入 + prompt 工程优化)
主要变更:
- Skill Learning 闭环系统 (9/9 AC)
- Opus 4.7 模型层接入 + adaptive thinking
- Prompt 工程优化 (64 审计测试)
- Agent Teams 简化门控 (默认启用)
- Windows Terminal 后端修复 (EncodedCommand/WT_SESSION)
- TF-IDF 技能搜索精准化 (字段加权/CJK 优化)
- Autonomy 系统 (/autonomy 命令)
- ACP 协议完整实现
- mock.module 泄漏修复 (CI 全绿)
- 152+ lint/type 修复
2026-04-22 16:07:42 +08:00

162 lines
15 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Claude Opus 4.7 Model Integration Checklist
本文档整理 `Claude-Opus-4.7.txt``src/constants/prompts.ts` 的关联点,以及将 Claude Opus 4.7 正式接入当前项目时需要联动的模型层清单。
当前判断:如果仅依赖授权文件登录,但不显式指定 `claude-opus-4-7`,当前项目大概率仍会落到 Opus 4.6,因为默认 Opus、`opus` alias、模型选择器、系统提示和能力映射均仍硬编码在 4.6。授权文件只影响认证和账号权限,不会自动更新本地模型表。
## 参考输入
- 本地参考文件:`Claude-Opus-4.7.txt`
- 关键模型 ID`claude-opus-4-7`
- 当前项目默认 Opus`claude-opus-4-6`
- 需要优先验证的测试路径:显式运行 `--model claude-opus-4-7`区分本地拦截、服务端权限拒绝、provider 不支持三类问题。
## P0: `prompts.ts` 直接相关清单
这些项只覆盖 `src/constants/prompts.ts`。它们会影响系统提示里的模型自我认知、最新模型推荐、知识截止信息和用户可见说明。
| 文件位置 | 当前问题 | 建议动作 | 验收点 |
| --- | --- | --- | --- |
| `src/constants/prompts.ts:119` | `FRONTIER_MODEL_NAME` 仍为 `Claude Opus 4.6` | 更新为 `Claude Opus 4.7` | Fast mode 文案不再声称最新 frontier 是 4.6 |
| `src/constants/prompts.ts:122` | `CLAUDE_4_5_OR_4_6_MODEL_IDS` 名称和内容仍绑定 4.5/4.6 | 改名为更通用的最新模型 ID 常量,或扩展为 `CLAUDE_LATEST_MODEL_IDS` | 常量中 Opus 指向 `claude-opus-4-7` |
| `src/constants/prompts.ts:123` | `opus` ID 仍为 `claude-opus-4-6` | 改为 `claude-opus-4-7` | 系统提示推荐的 Opus ID 是 4.7 |
| `src/constants/prompts.ts:671` | 环境提示写死 “Claude 4.5/4.6” | 更新为包含 Opus 4.7 的最新模型家族说明 | `# Environment` 中不再把 4.6 说成最新 Opus |
| `src/constants/prompts.ts:671` | 模型 ID 列表只列 Opus 4.6、Sonnet 4.6、Haiku 4.5 | 把 Opus 4.7 放到最新/默认推荐位置,保留 Sonnet 4.6 和 Haiku 4.5 | AI 应用构建建议默认引用 Opus 4.7 |
| `src/constants/prompts.ts:687` | `getKnowledgeCutoff()` 没有 Opus 4.7 分支 | 新增 `claude-opus-4-7` 分支,并放在泛化 `claude-opus-4` 判断之前 | `claude-opus-4-7` 不会落入旧 Opus 4 fallback |
| `src/constants/prompts.ts:690-703` | 当前匹配顺序只特殊处理 4.6、4.5、Haiku 4再泛化 Opus 4/Sonnet 4 | 为 4.7 增加明确 cutoff避免返回 `January 2025` | prompt 中显示的 cutoff 与 Opus 4.7 资料一致 |
| `src/constants/prompts.ts:582-623` | `computeEnvInfo()` 输出模型描述和 knowledge cutoff依赖模型层映射 | 在模型层补齐 4.7 后确认这里输出正确 | `You are powered by...` 能显示 Opus 4.7 |
| `src/constants/prompts.ts:627-684` | `computeSimpleEnvInfo()` 同样依赖模型层映射和 latest family 文案 | 在 4.7 接入后做一次 prompt 快照/断言 | simple env 和 full env 都一致 |
## P0: 模型注册和别名解析
这些项决定用户输入 `opus``best``default` 或不指定模型时,最终实际请求哪个模型。
| 文件位置 | 当前问题 | 建议动作 | 验收点 |
| --- | --- | --- | --- |
| `src/utils/model/configs.ts:99` | 只存在 `CLAUDE_OPUS_4_6_CONFIG` | 新增 `CLAUDE_OPUS_4_7_CONFIG` | `ALL_MODEL_CONFIGS` 可派生 `opus47` |
| `src/utils/model/configs.ts:119-132` | `ALL_MODEL_CONFIGS``opus46` 结束 | 注册 `opus47: CLAUDE_OPUS_4_7_CONFIG` | `getModelStrings().opus47` 类型可用 |
| `src/utils/model/model.ts:50-56` | `isNonCustomOpusModel()` 未包含 4.7 | 加入 `getModelStrings().opus47` | Opus 4.7 能走 Opus 相关逻辑 |
| `src/utils/model/model.ts:115-135` | `getDefaultOpusModel()` 返回 Opus 4.6 | first-party 默认切到 4.73P 是否切换需按 provider availability 决定 | `/model opus``best` 能解析到预期模型 |
| `src/utils/model/model.ts:250-285` | `firstPartyNameToCanonical()` 未识别 4.7 | 新增 `claude-opus-4-7`,顺序在 4.6 和泛化 `claude-opus-4` 前 | canonical 返回 `claude-opus-4-7` |
| `src/utils/model/model.ts:485-545` | `parseUserSpecifiedModel('opus')` 间接落到 4.6 | 依赖 `getDefaultOpusModel()` 更新 | `opus` alias 解析为 4.7 |
| `src/utils/model/model.ts:609-653` | `getMarketingNameForModel()` 没有 Opus 4.7 | 增加 `Opus 4.7` 显示名 | UI 和 prompt 都能显示友好名称 |
| `src/utils/model/model.ts:384-423` | `getPublicModelDisplayName()` 没有 Opus 4.7 | 增加 base 和如适用的 `[1m]` 显示名 | `/model` 当前模型显示正确 |
| `src/utils/model/model.ts:325-347` | 默认模型描述和价格后缀函数仍是 Opus 4.6 | 更新描述,必要时重命名 `getOpus46PricingSuffix` 或兼容包装 | Default option 描述不再出现过期 Opus 4.6 |
## P0: 模型选择器和用户可见选项
这些项决定 `/model` 菜单是否能看到 Opus 4.7。
| 文件位置 | 当前问题 | 建议动作 | 验收点 |
| --- | --- | --- | --- |
| `src/utils/model/modelOptions.ts:113-180` | 只有 `getOpus46Option()` | 新增 `getOpus47Option()` 或把 Opus option 改为当前默认 Opus | `/model` 菜单显示 Opus 4.7 |
| `src/utils/model/modelOptions.ts:191-201` | 1M Opus option 绑定 `opus46` | 如 Opus 4.7 支持 1M新增/替换 4.7 1M option | 1M option 不再误指 4.6 |
| `src/utils/model/modelOptions.ts:266-300` | Max/merged Opus option 文案仍是 4.6 | 更新 Max 用户和 merged 1M 文案 | Max/Team Premium 默认说明正确 |
| `src/utils/model/modelOptions.ts:324-424` | picker 列表显式 push 4.6 option | 按用户类型和 provider 调整 4.7/4.6 顺序或替换关系 | first-party 可选项包含 4.7 |
| `src/utils/model/modelOptions.ts:486-514` | 已知模型展示依赖 marketing name | 补 4.7 marketing name 后确认这里能识别 | 显式 `claude-opus-4-7` 不显示成 Custom model |
| `src/commands/model/model.tsx:130-145` | 1M 不可用提示写死 Opus 4.6/Sonnet 4.6 | 如支持 4.7 1M更新文案和检查函数 | 错误提示不误导用户 |
| `src/main.tsx:1349-1352` | `--model` 帮助示例仍是 Sonnet 4.6 | 更新示例,或使用稳定 alias 示例优先 | CLI help 不展示过期主推模型 |
## P0: 本地拦截和可用性判断
这些项用于判断“为什么授权文件拿不到 4.7”。
| 文件位置 | 当前问题 | 建议动作 | 验收点 |
| --- | --- | --- | --- |
| `src/utils/model/modelAllowlist.ts:100-170` | 如果 settings `availableModels` 没包含 4.7,显式 4.7 会被本地拒绝 | 检查用户配置,必要时加入 `opus``claude-opus-4-7` | `/model claude-opus-4-7` 不被本地 allowlist 拦截 |
| `src/utils/model/validateModel.ts:20-80` | 显式模型会先检查 allowlist再请求 API 验证 | 用它区分本地拒绝和服务端拒绝 | 错误信息可分类为 allowlist、404、invalid model、auth |
| `src/utils/model/validateModel.ts:139-155` | fallback 建议链只有 4.6 到旧模型 | 加 4.7 到 4.6 的 fallback 建议 | 3P 不支持 4.7 时提示 4.6 |
| `src/services/api/errors.ts:735-745` | Pro plan invalid model 逻辑依赖 `isNonCustomOpusModel()` | 加入 Opus 4.7 后确认错误文案仍准确 | Pro 用户错误提示不漏判 |
| `src/services/api/errors.ts:902-910` | 404 模型不可用错误会提示换模型 | 加 4.7 fallback 建议 | 3P/权限问题提示可操作 |
| `src/services/api/Claude.ts:1771` | 最终请求直接发送 `options.model` 去掉 `[1m]` 后的值 | 确认显式 `claude-opus-4-7` 能传到这里 | 抓包/日志中 model 是 `claude-opus-4-7` |
## P1: 能力、beta、上下文和输出控制
这些项影响 4.7 的高级能力是否启用,或是否错误沿用 4.6 能力。
| 文件位置 | 当前问题 | 建议动作 | 验收点 |
| --- | --- | --- | --- |
| `src/utils/context.ts:43` | 1M context 匹配规则未确认 4.7 | 按官方/API 探测结果加入 4.7 | `getContextWindowForModel('claude-opus-4-7')` 正确 |
| `src/utils/model/check1mAccess.ts:45` | 1M access 检查未确认 4.7 | 如支持,加入 Opus 4.7 | 1M 权限检查不误报 |
| `src/utils/model/contextWindowUpgradeCheck.ts:4` | upgrade path 未覆盖 4.7 | 如支持 1M upgrade补分支 | 超 200K 时提示正确 |
| `src/utils/effort.ts:24` | effort allowlist 未确认 4.7 | 加入支持项 | `--effort` 对 4.7 不被错误忽略 |
| `src/utils/effort.ts:53-54` | `max` effort 注释写 Opus 4.6 only | 确认 4.7 是否支持 max再更新 | 文案和 API 行为一致 |
| `src/utils/thinking.ts:113` | adaptive thinking allowlist 未确认 4.7 | 加入或明确不支持 | thinking 参数不导致 400 |
| `src/utils/betas.ts:138-156` | structured outputs、auto mode 支持列表未确认 4.7 | 按 API 能力加入 | 相关 beta 不漏发也不错发 |
| `src/utils/advisor.ts:87-98` | advisor 支持列表未确认 4.7 | 按服务端能力加入 | advisor tool 对 4.7 行为正确 |
| `src/services/compact/cachedMCConfig.ts:35-36` | cached microcompact 支持模型只到 4.6 | 如 4.7 支持,加入列表 | cache editing gate 不误关 |
| `src/utils/fastMode.ts:142-143` | Fast Mode 显示为 Opus 4.6 | 确认 4.7 支持后更新 | `/fast` 文案和实际模型一致 |
| `src/utils/extraUsage.ts:17-22` | extra usage 判断可能只识别 Opus 4.6 | 扩展到 Opus 4.7 | 账单提示正确 |
## P1: provider 映射和第三方路径
这些项影响 OpenAI/Gemini/Grok/Bedrock/Vertex/Foundry 兼容层。
| 文件位置 | 当前问题 | 建议动作 | 验收点 |
| --- | --- | --- | --- |
| `src/services/api/openai/modelMapping.ts:8-12` | OpenAI 兼容层只映射到 Opus 4.6 | 加 `claude-opus-4-7` 映射,或确认透传策略 | OpenAI provider 不因未知 Anthropic ID 失败 |
| `src/services/api/grok/modelMapping.ts:11-15` | Grok 兼容层只映射到 Opus 4.6 | 加 4.7 映射或 fallback | Grok provider 行为明确 |
| `src/services/api/gemini/modelMapping.ts` | 未在搜索中看到 Opus 4.6 命中 | 确认是否通用规则覆盖 4.7 | Gemini provider 有明确策略 |
| `src/utils/model/configs.ts:99-107` | 3P provider ID 是否已发布未确认 | 对 Bedrock/Vertex/Foundry 分别确认 ID 格式 | 3P 配置不使用错误 model ID |
| `src/utils/envUtils.ts:149-162` | Vertex region override 只列现有模型 | 如 4.7 需要 region env补映射 | Vertex 用户可覆盖 region |
| `src/utils/model/modelStrings.ts:45-53` | Bedrock profile 匹配基于 firstParty ID | 4.7 注册后确认 inference profile 可匹配 | Bedrock 自动发现可用 profile |
## P1: 成本、显示、归因和内置文档
这些项不一定阻塞请求,但会影响用户体验、账单提示和输出元数据。
| 文件位置 | 当前问题 | 建议动作 | 验收点 |
| --- | --- | --- | --- |
| `src/utils/modelCost.ts:13-152` | 成本函数和映射以 Opus 4.6 命名 | 添加 Opus 4.7 cost tier必要时重命名公共函数 | 价格显示和成本计算正确 |
| `src/constants/figures.ts:13` | max effort 注释写 Opus 4.6 only | 按 4.7 支持情况更新注释 | 注释不过期 |
| `src/utils/commitAttribution.ts:149-160` | commit trailer 映射缺 4.7 | 加 `claude-opus-4-7` | git attribution 显示公共模型名 |
| `src/skills/bundled/claudeApiContent.ts:37-41` | Claude API skill 中 Opus ID/名称仍是 4.6 | 更新为 Opus 4.7,保留 Sonnet/Haiku 当前值 | 生成 API 示例时使用 4.7 |
| `src/utils/settings/types.ts:402` | settings 示例仍是 Opus 4.6 | 更新示例或增加 4.7 示例 | 文档化配置不误导 |
| `src/utils/swarm/teammateModel.ts:1-9` | teammate fallback model 用 Opus 4.6 config | 评估切到 Opus 4.7 | swarm/teammate 默认符合最新模型策略 |
| `scripts/probe-api-capabilities.ts:182` | `claude-opus-4-7` 标为猜测模型 | 移到正式配置/已知模型列表 | 探测脚本不再把已发布模型当猜测 |
## P2: 运行时动态补充模型的现状
当前项目有两个动态来源,但它们不能替代正式接入:
1. `src/services/api/bootstrap.ts` 会从 `/api/claude_cli/bootstrap` 拉取 `additional_model_options` 并写入 `additionalModelOptionsCache`。这可以让 `/model` 菜单临时出现额外模型,但不会更新 `opus` alias、默认模型、prompt 文案、成本、能力、thinking、effort 或 provider 映射。
2. `src/utils/model/modelCapabilities.ts` 会调用 `/v1/models` 缓存模型能力。它能帮助上下文窗口和 token 上限动态化,但同样不会改变默认模型或别名解析。
因此,授权文件或 bootstrap 结果即使能看到 Opus 4.7,也不能替代上述 P0/P1 的本地代码接入。
## 最小判定流程
用于定位“获取不到 Opus 4.7”到底是哪一层问题。
1. 显式运行:`--model claude-opus-4-7`
2. 如果报 `not in available models``organization restricts model selection`,优先检查 `settings.availableModels``modelAllowlist.ts`
3. 如果能发出请求但 API 返回 `invalid model name`、404 或 not available优先检查账号权限、OAuth/API key 来源、base URL、provider 类型和服务端 gating。
4. 如果显式模型成功,但默认仍是 4.6说明主要是本地默认模型、alias、picker 和 prompt 未更新。
5. 如果 `/model` 菜单不显示 4.7,但显式 `--model claude-opus-4-7` 成功,说明 picker/bootstrap 未更新,不是权限问题。
## 推荐实施顺序
1. 先补 `configs.ts``model.ts``prompts.ts`,让 `opus``best`、默认 Opus 和系统提示都认识 4.7。
2. 再补 `modelOptions.ts``/model` 命令文案,让用户能选择和看懂 4.7。
3. 然后补 `validateModel.ts``errors.ts``modelAllowlist.ts` 相关测试,让失败路径能区分本地拦截和服务端拒绝。
4. 最后补能力层、beta、thinking、effort、cost、provider 映射和文档示例。
## 测试清单
- `bun test src/utils/model/__tests__/model.test.ts`
- `bun test src/services/api/openai/__tests__/modelMapping.test.ts`
- `bun test src/services/api/grok/__tests__/modelMapping.test.ts`
- `bun test src/services/api/gemini/__tests__/modelMapping.test.ts`
- `bun test src/utils/__tests__/modelCost.test.ts`
- 增加或更新 prompt 相关断言,覆盖 `getKnowledgeCutoff('claude-opus-4-7')` 和 environment prompt。
- 运行 `bunx tsc --noEmit`,确保新增 `opus47` key 后类型全部收敛。
## 完成标准
- `claude-opus-4-7` 在模型配置中是正式条目,不再只出现在探测脚本的猜测列表。
- `opus` alias、`best`、Max/Team Premium 默认 Opus 都按设计解析到 Opus 4.7。
- `/model` 菜单能显示 Opus 4.7,显式 `--model claude-opus-4-7` 能通过本地校验。
- `src/constants/prompts.ts` 不再把 Opus 4.6 描述为最新 frontier。
- Opus 4.7 的 knowledge cutoff、marketing name、public display name、cost、effort、thinking、context window 和 beta 支持都有明确实现或明确不支持分支。
- 失败路径能区分:本地 allowlist、账号权限、provider 不支持、服务端模型不存在。