OSVauco/opax-mcp/capability_bridge.py

57 lines
2.1 KiB
Python

"""
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)