feat(agents,api): 一致性冲突一键采纳补丁对 original/replacement + SSE/契约透传

- Conflict schema 增 original/replacement(可缺):可局部修复时审稿提议精确补丁
- 续审 prompt 指示填逐字 original + 改后 replacement,不可定位则留空
- orchestrator SSE conflict 事件 + apps/api ReviewConflictView 透传两字段
- 重生成 TS 客户端 schema.d.ts;memory/contracts.md 记录契约变更(向后兼容)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Yaojia Wang
2026-06-22 18:28:04 +02:00
parent 2d77977d8a
commit d028c790c9
8 changed files with 79 additions and 4 deletions

View File

@@ -61,6 +61,31 @@ def test_conflict_refs_default_empty() -> None:
assert conflict.refs == []
def test_conflict_patch_fields_default_none() -> None:
# 一键采纳补丁字段original/replacement可缺不可定位的冲突两者留空。
conflict = Conflict.model_validate(
{"type": "设定违例", "where": "战斗场景", "suggestion": "删去违例能力"}
)
assert conflict.original is None
assert conflict.replacement is None
def test_conflict_carries_patch_pair_when_localizable() -> None:
# 可局部修复original 逐字原文最小句段 + replacement 改后文本,供前端一键 find-replace。
conflict = Conflict.model_validate(
{
"type": "设定违例",
"where": "第1段",
"refs": [],
"suggestion": "迈巴赫改为奔驰",
"original": "迈巴赫扬长而去的尾灯",
"replacement": "奔驰扬长而去的尾灯",
}
)
assert conflict.original == "迈巴赫扬长而去的尾灯"
assert conflict.replacement == "奔驰扬长而去的尾灯"
def test_continuity_spec_is_analyst_tier() -> None:
assert continuity_spec.tier == "analyst"
assert continuity_spec.name == "continuity"