mirror of
https://github.com/TencentCloud/Octop.git
synced 2026-10-15 05:30:33 +08:00
Allow experts and skill packages to carry composer defaults so that installed/created agents start with the author's chosen knowledge bases and MCP servers. Defaults are persisted as agent profile columns and validated against the installing user. Adds the per-user policy resource table (migration 014) and wires the dashboard composer fields plus locale strings. - Add knowledge_base_ids and mcp_servers to the agent profile schema - Validate KB/MCP ids on expert/skill-package install and create paths - Persist defaults via migrate.py helper and 014_user_policy migration - Surface composer default fields in the dashboard expert/skill UI
89 lines
2.9 KiB
Python
89 lines
2.9 KiB
Python
"""Unit tests for knowledge-base turn selection defaults."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from types import SimpleNamespace
|
|
|
|
from octop.infra.knowledge.default_open import (
|
|
merge_knowledge_base_ids,
|
|
stamp_turn_knowledge_config,
|
|
)
|
|
|
|
|
|
def test_merge_knowledge_base_ids_applies_only_visible_defaults_when_omitted() -> None:
|
|
visible = [
|
|
SimpleNamespace(id="default", owner_user_id=1, default_open=True, shared=False),
|
|
SimpleNamespace(id="optional", owner_user_id=1, default_open=False, shared=False),
|
|
]
|
|
|
|
assert merge_knowledge_base_ids(visible, None, owner_user_id=1) == ["default"]
|
|
assert merge_knowledge_base_ids(visible, [], owner_user_id=1) == []
|
|
assert merge_knowledge_base_ids(visible, ["optional", "unknown"], owner_user_id=1) == [
|
|
"optional",
|
|
"unknown",
|
|
]
|
|
|
|
|
|
def test_merge_knowledge_base_ids_default_open_only_for_owner() -> None:
|
|
visible = [
|
|
SimpleNamespace(id="mine", owner_user_id=1, default_open=True, shared=False),
|
|
SimpleNamespace(id="shared-default", owner_user_id=2, default_open=True, shared=True),
|
|
SimpleNamespace(id="shared-opt", owner_user_id=2, default_open=False, shared=True),
|
|
]
|
|
|
|
assert merge_knowledge_base_ids(visible, None, owner_user_id=1) == ["mine"]
|
|
assert merge_knowledge_base_ids(visible, None, owner_user_id=2) == ["shared-default"]
|
|
|
|
|
|
def test_merge_knowledge_base_ids_unions_visible_extra_ids() -> None:
|
|
visible = [
|
|
SimpleNamespace(id="default", owner_user_id=1, default_open=True, shared=False),
|
|
SimpleNamespace(id="expert-pick", owner_user_id=1, default_open=False, shared=False),
|
|
]
|
|
|
|
assert merge_knowledge_base_ids(
|
|
visible,
|
|
None,
|
|
owner_user_id=1,
|
|
extra_ids=["expert-pick", "gone", ""],
|
|
) == ["default", "expert-pick"]
|
|
assert (
|
|
merge_knowledge_base_ids(
|
|
visible,
|
|
[],
|
|
owner_user_id=1,
|
|
extra_ids=["expert-pick"],
|
|
)
|
|
== []
|
|
)
|
|
|
|
|
|
def test_stamp_turn_knowledge_config_writes_catalog() -> None:
|
|
visible = [
|
|
SimpleNamespace(
|
|
id="expert-pick",
|
|
owner_user_id=1,
|
|
default_open=False,
|
|
name="Policies",
|
|
description="Refund rules",
|
|
),
|
|
]
|
|
request: dict = {}
|
|
selected = stamp_turn_knowledge_config(
|
|
request,
|
|
visible_bases=visible,
|
|
explicit_ids=None,
|
|
owner_user_id=1,
|
|
extra_ids=["expert-pick", "gone"],
|
|
is_admin=False,
|
|
locale="zh",
|
|
)
|
|
assert selected == ["expert-pick"]
|
|
configurable = request["configurable"]
|
|
assert configurable["knowledge_base_ids"] == ["expert-pick"]
|
|
assert configurable["knowledge_base_catalog"] == [
|
|
{"id": "expert-pick", "name": "Policies", "description": "Refund rules"}
|
|
]
|
|
assert configurable["user_is_admin"] is False
|
|
assert configurable["locale"] == "zh"
|