""" Builds a user-safe, read-only capability summary for the Emma system prompt. """ from typing import List, Dict from capability_registry import Availability, Capability, list_capabilities def build_capability_system_context() -> str: """ Builds a deterministic, user-safe, plain-text summary of capabilities. The output is structured for inclusion in a system prompt and must not leak internal details. """ categorized: Dict[Availability, List[str]] = { Availability.ACTIVE: [], Availability.PLANNED: [], Availability.FORBIDDEN: [], } for capability in list_capabilities(): if capability.availability == Availability.FORBIDDEN: if capability.id == "terminal.arbitrary_shell": categorized[Availability.FORBIDDEN].append( "- Arbitrary terminal access is not available." ) continue if capability.availability in categorized: categorized[capability.availability].append( f"- {capability.display_name}: {capability.description}" ) output_lines = ["CURRENT CAPABILITY STATUS FOR THIS CHAT"] if categorized[Availability.ACTIVE]: output_lines.append("\nAvailable now:") output_lines.extend(categorized[Availability.ACTIVE]) if categorized[Availability.PLANNED]: output_lines.append("\nPlanned, but not active in this chat:") output_lines.extend(categorized[Availability.PLANNED]) if categorized[Availability.FORBIDDEN]: output_lines.append("\nUnavailable:") output_lines.extend(categorized[Availability.FORBIDDEN]) output_lines.append( "\nRules:\n" "- Planned capabilities are not available in this chat and must not be claimed as active.\n" "- No tool, repository, deployment, memory, document retrieval, external service or state-changing action is activated by this capability summary.\n" "- Future write or high-impact capabilities require a concrete, explicit, bound user approval before execution." ) return "\n".join(output_lines)