mirror of
https://github.com/agent0ai/agent-zero.git
synced 2026-05-31 21:39:24 +00:00
Standardize multi-action tools around tool_args.action while keeping parser compatibility for older tool/args, tool_name:action, and method-shaped requests. This keeps new prompts clean without breaking agents that learned the previous dialect. Move A0 connector remote execution/file tools into stable standard prompts, make remote targeting independent of the active chat context, and skill-gate beta computer-use remote so it no longer weighs down the always-on tool list. Align text editor, scheduler, skills, office artifact, memory, notify, and browser prompts/tools around the canonical action contract. Add scheduler update/timezone handling, skills_tool read_file, text editor patch coverage, and fixes for memory_forget, behaviour_adjustment, and code execution progress warnings. Reduce default prompt pressure by compacting browser and scheduler prompts into skill-backed manifests, shortening skill catalog descriptions, and pruning noisy framework knowledge. Remove obsolete connector prompt stubs and root tool-call knowledge examples. Tests: conda run -n a0 pytest tests/test_a0_connector_prompt_gating.py tests/test_tool_action_contracts.py tests/test_task_scheduler_timezone.py tests/test_text_editor_context_patch.py tests/test_tool_request_normalization.py tests/test_office_document_store.py::test_odf_is_advertised_and_docx_remains_explicit_compatibility tests/test_office_document_store.py::test_document_artifact_accepts_method_alias_for_ods_create tests/test_skills_runtime.py tests/test_default_prompt_budget.py::test_a0_small_profile_removed_and_prompt_text_generic -q
37 lines
1 KiB
Python
37 lines
1 KiB
Python
from typing import Any
|
|
|
|
from helpers.extension import Extension, extensible
|
|
from helpers import skills as skills_helper
|
|
from agent import Agent, LoopData
|
|
|
|
|
|
class SkillsPrompt(Extension):
|
|
|
|
async def execute(
|
|
self,
|
|
system_prompt: list[str] = [],
|
|
loop_data: LoopData = LoopData(),
|
|
**kwargs: Any,
|
|
):
|
|
if not self.agent:
|
|
return
|
|
prompt = await build_prompt(self.agent)
|
|
if prompt:
|
|
system_prompt.append(prompt)
|
|
|
|
|
|
@extensible
|
|
async def build_prompt(agent: Agent) -> str:
|
|
available = skills_helper.list_skills(agent=agent)
|
|
result: list[str] = []
|
|
for skill in available:
|
|
name = skill.name.strip().replace("\n", " ")[:100]
|
|
descr = skill.description.replace("\n", " ").strip()
|
|
if len(descr) > 100:
|
|
descr = descr[:100].rstrip() + "..."
|
|
result.append(f"- {name}: {descr}" if descr else f"- {name}")
|
|
|
|
if not result:
|
|
return ""
|
|
|
|
return agent.read_prompt("agent.system.skills.md", skills="\n".join(result))
|