Files
JARVIS/backend/app/agents/registry/builtins.py
WIN-JHFT4D3SIVT\caoxiaozhu 4251a79062 feat: add agent registry manifests and coverage
Introduce a manifest-backed agent registry surface and align graph tests with the new runtime prompt and tool indexing behavior.
2026-04-02 14:34:26 +08:00

115 lines
3.6 KiB
Python

from app.agents.prompts import SUB_COMMANDER_PROMPTS_BY_KEY
from app.agents.registry.models import (
AgentManifest,
CapabilityManifest,
SpecialistTemplateManifest,
SubCommanderManifest,
)
from app.agents.state import AgentRole
from app.agents.tools import SUB_COMMANDER_TOOLSETS
TOP_LEVEL_AGENT_DEFAULT_SUB_COMMANDERS: dict[str, tuple[str, ...]] = {
AgentRole.MASTER.value: (),
AgentRole.SCHEDULE_PLANNER.value: (
"schedule_analysis",
"schedule_planning",
),
AgentRole.EXECUTOR.value: (
"executor_tasks",
"executor_forum",
),
AgentRole.LIBRARIAN.value: (
"librarian_retrieval",
"librarian_graph",
),
AgentRole.ANALYST.value: (
"analyst_progress",
"analyst_insights",
),
}
TOP_LEVEL_AGENT_DISPLAY_NAMES: dict[str, str] = {
AgentRole.MASTER.value: "Master",
AgentRole.SCHEDULE_PLANNER.value: "Schedule Planner",
AgentRole.EXECUTOR.value: "Executor",
AgentRole.LIBRARIAN.value: "Librarian",
AgentRole.ANALYST.value: "Analyst",
}
TOP_LEVEL_AGENT_ROUTING_HINTS: dict[str, tuple[str, ...]] = {
AgentRole.MASTER.value: (
"Route user requests to the most suitable top-level runtime agent or answer directly.",
),
AgentRole.SCHEDULE_PLANNER.value: (
"Handle planning-oriented requests using schedule analysis and schedule planning sub-commanders.",
),
AgentRole.EXECUTOR.value: (
"Handle execution-oriented requests using task and forum sub-commanders.",
),
AgentRole.LIBRARIAN.value: (
"Handle knowledge retrieval and graph-context requests using librarian sub-commanders.",
),
AgentRole.ANALYST.value: (
"Handle reporting and insight requests using analyst sub-commanders.",
),
}
SUB_COMMANDER_PARENT_AGENT_IDS: dict[str, str] = {
"schedule_analysis": AgentRole.SCHEDULE_PLANNER.value,
"schedule_planning": AgentRole.SCHEDULE_PLANNER.value,
"executor_tasks": AgentRole.EXECUTOR.value,
"executor_forum": AgentRole.EXECUTOR.value,
"librarian_retrieval": AgentRole.LIBRARIAN.value,
"librarian_graph": AgentRole.LIBRARIAN.value,
"analyst_progress": AgentRole.ANALYST.value,
"analyst_insights": AgentRole.ANALYST.value,
}
BUILTIN_AGENT_MANIFESTS: tuple[AgentManifest, ...] = tuple(
AgentManifest(
agent_id=role.value,
display_name=TOP_LEVEL_AGENT_DISPLAY_NAMES[role.value],
role_value=role.value,
system_prompt_key=role.value,
routing_hints=list(TOP_LEVEL_AGENT_ROUTING_HINTS[role.value]),
default_sub_commanders=list(TOP_LEVEL_AGENT_DEFAULT_SUB_COMMANDERS[role.value]),
skill_context_key=role.value.replace("agent_", ""),
)
for role in AgentRole
)
_capability_tool_names = tuple(
dict.fromkeys(
tool.name
for tools in SUB_COMMANDER_TOOLSETS.values()
for tool in tools
)
)
BUILTIN_CAPABILITY_MANIFESTS: tuple[CapabilityManifest, ...] = tuple(
CapabilityManifest(
capability_id=tool_name,
tool_name=tool_name,
)
for tool_name in _capability_tool_names
)
BUILTIN_SUB_COMMANDER_MANIFESTS: tuple[SubCommanderManifest, ...] = tuple(
SubCommanderManifest(
sub_commander_id=sub_commander_id,
parent_agent_id=SUB_COMMANDER_PARENT_AGENT_IDS[sub_commander_id],
prompt_text=SUB_COMMANDER_PROMPTS_BY_KEY[sub_commander_id],
capability_ids=list(
dict.fromkeys(tool.name for tool in tools)
),
)
for sub_commander_id, tools in SUB_COMMANDER_TOOLSETS.items()
)
BUILTIN_SPECIALIST_TEMPLATE_MANIFESTS: tuple[SpecialistTemplateManifest, ...] = ()