Saltar a contenido

Crear un Adaptador

Los adaptadores conectan RaiSE a servicios externos. Implementan contratos Python Protocol y se descubren via entry points.

Contratos Protocol

RaiSE define dos protocolos de adaptador primarios en rai_cli.adapters.protocols:

ProjectManagementAdapter — para rastreadores de issues:

from typing import Protocol, runtime_checkable

@runtime_checkable
class ProjectManagementAdapter(Protocol):
    def create_issue(self, project_key: str, issue: IssueSpec) -> IssueRef: ...
    def get_issue(self, key: str) -> IssueDetail: ...
    def update_issue(self, key: str, fields: dict[str, Any]) -> IssueRef: ...
    def transition_issue(self, key: str, status: str) -> IssueRef: ...
    def search(self, query: str, limit: int = 50) -> list[IssueSummary]: ...
    def health(self) -> AdapterHealth: ...

DocumentationTarget — para plataformas de documentación:

@runtime_checkable
class DocumentationTarget(Protocol):
    def can_publish(self, doc_type: str, metadata: dict[str, Any]) -> bool: ...
    def publish(self, doc_type: str, content: str, metadata: dict[str, Any]) -> PublishResult: ...
    def get_page(self, identifier: str) -> PageContent: ...
    def search(self, query: str, limit: int = 10) -> list[PageSummary]: ...
    def health(self) -> AdapterHealth: ...

Ambos son @runtime_checkable, por lo que RaiSE verifica el cumplimiento con isinstance().

Arquitectura Async-First

Los adaptadores concretos implementan las variantes async (AsyncProjectManagementAdapter, AsyncDocumentationTarget). El CLI consume wrappers síncronos:

from rai_cli.adapters.sync import SyncPMAdapter

class MyTrackerAsync:
    async def create_issue(self, project_key, issue):
        # Tu implementación async
        ...

# Consumo en CLI
adapter = SyncPMAdapter(MyTrackerAsync())

Registro por Entry Points

Registra tu adaptador en pyproject.toml:

[project.entry-points."rai.adapters.pm"]
my-tracker = "my_package.adapter:MyTrackerAdapter"

[project.entry-points."rai.docs.targets"]
my-docs = "my_package.docs:MyDocsTarget"

Los nombres de los grupos de entry points son contratos estables: - rai.adapters.pm — gestión de proyectos - rai.docs.targets — documentación - rai.governance.schemas — esquemas de gobernanza - rai.governance.parsers — parsers de gobernanza - rai.graph.backends — almacenamiento de graph

Validación

Tras el registro, verifica tu adaptador:

# Listar todos los adaptadores descubiertos
rai adapter list

# Verificar cumplimiento del Protocol
rai adapter check

# Validar config YAML declarativa
rai adapter validate .raise/adapters/my-tracker.yaml

rai adapter check carga cada entry point registrado y ejecuta isinstance() contra el contrato Protocol. Los fallos muestran qué métodos faltan.