- sdk/services/capabilities.py: MANIFEST+DEFAULTS+sanitize+QA 注册表合并 - sdk/services/humanizer.py: 9 类中文 AI 痕迹规则(块级保护引用/表格/代码/图片) - sdk/routers/capabilities.py: GET /api/capabilities + POST install 透传 - sdk/schemas.py+sessions.py: SessionMeta.capabilities + PATCH meta 白名单 merge - sdk/routers/qa.py: humanize 会话开关注入 SSE;chat.js: body 加 session_id - sse_relay.py: humanize_enabled 参数链(修 _pump_events 可见性编译错误) - api.py(QA): /capabilities/registry loopback(BFF 合并) - ui: settings store+SettingsPanel+AppShell 接线+SessionPanel 展开态设置入口+labels - 测试: humanizer 8 用例+capabilities_svc 6 用例;SDK 146 全绿;UI vitest 172 全绿 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
53 lines
1.8 KiB
Python
53 lines
1.8 KiB
Python
"""test_capabilities.py —— BFF 能力清单 sanitize 单测(S4)。"""
|
|
from __future__ import annotations
|
|
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
sys.path.insert(0, str(Path(__file__).resolve().parent.parent))
|
|
|
|
from app.services.capabilities import ( # noqa: E402
|
|
DEFAULTS,
|
|
MANIFEST,
|
|
merged_capabilities,
|
|
sanitize_capabilities,
|
|
)
|
|
|
|
|
|
class TestSanitize:
|
|
def test_whitelist_only(self):
|
|
out = sanitize_capabilities({"memory": True, "evil": 1, "web_search": "1"})
|
|
assert out == {"memory": True, "web_search": True}
|
|
|
|
def test_bool_coerce(self):
|
|
out = sanitize_capabilities({"memory": "false", "humanize": "true"})
|
|
assert out == {"memory": False, "humanize": True}
|
|
|
|
def test_non_dict(self):
|
|
assert sanitize_capabilities(None) == {}
|
|
assert sanitize_capabilities([("memory", True)]) == {}
|
|
|
|
|
|
class TestMerged:
|
|
def test_defaults(self):
|
|
body = merged_capabilities(None)
|
|
caps = {c["name"]: c for c in body["capabilities"]}
|
|
assert caps["memory"]["enabled"] is True
|
|
assert caps["web_search"]["enabled"] is False
|
|
assert caps["humanize"]["enabled"] is False
|
|
|
|
def test_session_overrides(self):
|
|
body = merged_capabilities({"web_search": True, "humanize": True})
|
|
caps = {c["name"]: c for c in body["capabilities"]}
|
|
assert caps["web_search"]["enabled"] is True
|
|
assert caps["humanize"]["enabled"] is True
|
|
|
|
def test_qa_registry_merged(self):
|
|
body = merged_capabilities(
|
|
None,
|
|
qa_registry=[{"name": "web_search", "description": "x"}],
|
|
qa_warnings=["bad entry skipped"],
|
|
)
|
|
assert body["installed"] == [{"name": "web_search", "description": "x"}]
|
|
assert body["load_warnings"] == ["bad entry skipped"]
|