main
py 40 lines 1.12 KB
Raw
1 from typing import Any
2
3 from helpers.extension import Extension, extensible
4 from helpers import skills as skills_helper, tool_policy
5 from agent import Agent, LoopData
6
7
8 class SkillsPrompt(Extension):
9
10 async def execute(
11 self,
12 system_prompt: list[str] = [],
13 loop_data: LoopData = LoopData(),
14 **kwargs: Any,
15 ):
16 if not self.agent:
17 return
18 prompt = await build_prompt(self.agent)
19 if prompt:
20 system_prompt.append(prompt)
21
22
23 @extensible
24 async def build_prompt(agent: Agent) -> str:
25 if not tool_policy.resolve_tool(agent, "skills_tool").allowed:
26 return ""
27
28 available = skills_helper.list_skills(agent=agent)
29 result: list[str] = []
30 for skill in available:
31 name = skill.name.strip().replace("\n", " ")[:100]
32 descr = skill.description.replace("\n", " ").strip()
33 if len(descr) > 100:
34 descr = descr[:100].rstrip() + "..."
35 result.append(f"- {name}: {descr}" if descr else f"- {name}")
36
37 if not result:
38 return ""
39
40 return agent.read_prompt("agent.system.skills.md", skills="\n".join(result))