Source code for ralph.prompts._capability_set

"""CapabilitySet — lightweight set of Ralph capabilities."""

from __future__ import annotations

from typing import TYPE_CHECKING

from ralph.mcp.protocol.capability_mapping import Capability as RalphCapability
from ralph.mcp.protocol.capability_mapping import SessionDrain

if TYPE_CHECKING:
    from collections.abc import Iterable, Iterator


[docs] class CapabilitySet: """Lightweight set of Ralph capabilities.""" def __init__(self, values: Iterable[RalphCapability] | None = None) -> None: self._values = frozenset(values or ()) def contains(self, capability: RalphCapability) -> bool: return capability in self._values def insert(self, capability: RalphCapability) -> None: self._values = frozenset((*self._values, capability)) def __iter__(self) -> Iterator[RalphCapability]: return iter(self._values) def iter(self) -> Iterable[RalphCapability]: return iter(self._values) def to_vec(self) -> tuple[RalphCapability, ...]: return tuple(self._values) @classmethod def defaults_for_drain(cls, drain: SessionDrain) -> CapabilitySet: return cls(DEFAULT_CAPABILITIES.get(drain, ())) @classmethod def from_identifiers(cls, identifiers: Iterable[str] | None) -> CapabilitySet: if not identifiers: return cls() values: list[RalphCapability] = [] for identifier in identifiers: try: values.append(RalphCapability(identifier)) except ValueError: continue return cls(values)
DEFAULT_CAPABILITIES: dict[SessionDrain, tuple[RalphCapability, ...]] = { SessionDrain.PLANNING: ( RalphCapability.WORKSPACE_READ, RalphCapability.WORKSPACE_METADATA_READ, RalphCapability.WORKSPACE_WRITE_EPHEMERAL, RalphCapability.GIT_STATUS_READ, RalphCapability.GIT_DIFF_READ, RalphCapability.ARTIFACT_SUBMIT, RalphCapability.ARTIFACT_PLAN_READ, RalphCapability.ARTIFACT_PLAN_WRITE, RalphCapability.WEB_SEARCH, RalphCapability.WEB_VISIT, RalphCapability.UPSTREAM_TOOL_USE, ), SessionDrain.DEVELOPMENT_ANALYSIS: ( RalphCapability.WORKSPACE_READ, RalphCapability.WORKSPACE_METADATA_READ, RalphCapability.GIT_STATUS_READ, RalphCapability.GIT_DIFF_READ, RalphCapability.ARTIFACT_SUBMIT, RalphCapability.ARTIFACT_PLAN_READ, RalphCapability.PROCESS_EXEC_BOUNDED, RalphCapability.RUN_REPORT_PROGRESS, RalphCapability.WEB_SEARCH, RalphCapability.WEB_VISIT, RalphCapability.UPSTREAM_TOOL_USE, ), SessionDrain.DEVELOPMENT_COMMIT: ( RalphCapability.WORKSPACE_READ, RalphCapability.WORKSPACE_METADATA_READ, RalphCapability.GIT_STATUS_READ, RalphCapability.GIT_DIFF_READ, RalphCapability.ARTIFACT_SUBMIT, RalphCapability.ARTIFACT_PLAN_READ, RalphCapability.RUN_REPORT_PROGRESS, ), SessionDrain.ANALYSIS: ( RalphCapability.WORKSPACE_READ, RalphCapability.WORKSPACE_METADATA_READ, RalphCapability.GIT_STATUS_READ, RalphCapability.GIT_DIFF_READ, RalphCapability.ARTIFACT_SUBMIT, RalphCapability.ARTIFACT_PLAN_READ, RalphCapability.PROCESS_EXEC_BOUNDED, RalphCapability.RUN_REPORT_PROGRESS, RalphCapability.WEB_VISIT, RalphCapability.UPSTREAM_TOOL_USE, ), SessionDrain.REVIEW: ( RalphCapability.WORKSPACE_READ, RalphCapability.WORKSPACE_METADATA_READ, RalphCapability.WORKSPACE_WRITE_EPHEMERAL, RalphCapability.GIT_STATUS_READ, RalphCapability.GIT_DIFF_READ, RalphCapability.ARTIFACT_SUBMIT, RalphCapability.ARTIFACT_PLAN_READ, RalphCapability.WEB_SEARCH, RalphCapability.WEB_VISIT, RalphCapability.UPSTREAM_TOOL_USE, ), SessionDrain.REVIEW_ANALYSIS: ( RalphCapability.WORKSPACE_READ, RalphCapability.WORKSPACE_METADATA_READ, RalphCapability.GIT_STATUS_READ, RalphCapability.GIT_DIFF_READ, RalphCapability.ARTIFACT_SUBMIT, RalphCapability.ARTIFACT_PLAN_READ, RalphCapability.PROCESS_EXEC_BOUNDED, RalphCapability.RUN_REPORT_PROGRESS, RalphCapability.WEB_SEARCH, RalphCapability.WEB_VISIT, RalphCapability.UPSTREAM_TOOL_USE, ), SessionDrain.DEVELOPMENT: ( RalphCapability.WORKSPACE_READ, RalphCapability.WORKSPACE_METADATA_READ, RalphCapability.WORKSPACE_WRITE_EPHEMERAL, RalphCapability.WORKSPACE_WRITE_TRACKED, RalphCapability.WORKSPACE_EDIT, RalphCapability.WORKSPACE_DELETE, RalphCapability.GIT_STATUS_READ, RalphCapability.GIT_DIFF_READ, RalphCapability.PROCESS_EXEC_BOUNDED, RalphCapability.ARTIFACT_SUBMIT, RalphCapability.ARTIFACT_PLAN_READ, RalphCapability.RUN_REPORT_PROGRESS, RalphCapability.ENV_READ, RalphCapability.WEB_SEARCH, RalphCapability.WEB_VISIT, RalphCapability.UPSTREAM_TOOL_USE, ), SessionDrain.FIX: ( RalphCapability.WORKSPACE_READ, RalphCapability.WORKSPACE_METADATA_READ, RalphCapability.WORKSPACE_WRITE_TRACKED, RalphCapability.WORKSPACE_EDIT, RalphCapability.WORKSPACE_DELETE, RalphCapability.GIT_STATUS_READ, RalphCapability.GIT_DIFF_READ, RalphCapability.PROCESS_EXEC_BOUNDED, RalphCapability.ARTIFACT_SUBMIT, RalphCapability.ARTIFACT_PLAN_READ, RalphCapability.RUN_REPORT_PROGRESS, RalphCapability.ENV_READ, RalphCapability.WEB_SEARCH, RalphCapability.WEB_VISIT, RalphCapability.UPSTREAM_TOOL_USE, ), SessionDrain.REVIEW_COMMIT: ( RalphCapability.WORKSPACE_READ, RalphCapability.WORKSPACE_METADATA_READ, RalphCapability.GIT_STATUS_READ, RalphCapability.GIT_DIFF_READ, RalphCapability.ARTIFACT_SUBMIT, RalphCapability.ARTIFACT_PLAN_READ, RalphCapability.RUN_REPORT_PROGRESS, ), SessionDrain.COMMIT: ( RalphCapability.WORKSPACE_READ, RalphCapability.WORKSPACE_METADATA_READ, RalphCapability.GIT_STATUS_READ, RalphCapability.GIT_DIFF_READ, RalphCapability.ARTIFACT_SUBMIT, RalphCapability.ARTIFACT_PLAN_READ, RalphCapability.RUN_REPORT_PROGRESS, ), } __all__ = ["DEFAULT_CAPABILITIES", "CapabilitySet"]