Skip to content

Cards

arcana.types.card.Card

Bases: StrEnum

The 22 Major Arcana. Assign one to any agent.

arcana.types.card.TarotCard

Bases: BaseModel

A single card definition.

arcana.types.card.AgentConfig

Bases: BaseModel

Resolved config from CardEngine. Applied to Agent at creation.

arcana.cards.registry.CardRegistry

CardRegistry()

Holds all 22 Major Arcana definitions. Cards are loaded lazily from cards/definitions/*.py on first access.

Source code in packages/arcana-core/arcana/cards/registry.py
def __init__(self) -> None:
    self._cards: dict[Card, TarotCard] = {}
    self._loaded = False

arcana.cards.engine.CardEngine

CardEngine(registry)
Source code in packages/arcana-core/arcana/cards/engine.py
def __init__(self, registry: CardRegistry) -> None:
    self._registry = registry

check_compatibility

check_compatibility(primary, modifiers)

Return tension and synergy pairs across the full card set (bidirectional).

Source code in packages/arcana-core/arcana/cards/engine.py
def check_compatibility(
    self,
    primary: Card,
    modifiers: list[Card],
) -> BlendCompatibility:
    """Return tension and synergy pairs across the full card set (bidirectional)."""
    if not modifiers:
        return BlendCompatibility()

    all_ids = [primary, *modifiers]
    tensions: list[tuple[Card, Card]] = []
    synergies: list[tuple[Card, Card]] = []
    seen: set[frozenset[Card]] = set()

    for i, a_id in enumerate(all_ids):
        card_a = self._registry.get(a_id)
        for b_id in all_ids[i + 1 :]:
            pair: frozenset[Card] = frozenset({a_id, b_id})
            if pair in seen:
                continue
            seen.add(pair)
            card_b = self._registry.get(b_id)

            if b_id in card_a.tension_cards or a_id in card_b.tension_cards:
                tensions.append((a_id, b_id))
            if b_id in card_a.synergy_cards or a_id in card_b.synergy_cards:
                synergies.append((a_id, b_id))

    return BlendCompatibility(tensions=tensions, synergies=synergies)

arcana.cards.engine.BlendCompatibility

Bases: BaseModel

Tension and synergy pairs detected across primary + modifier cards.