diff --git a/migrations/versions/010_marketing_manager_template.py b/migrations/versions/010_marketing_manager_template.py new file mode 100644 index 0000000..1c38ef9 --- /dev/null +++ b/migrations/versions/010_marketing_manager_template.py @@ -0,0 +1,127 @@ +"""Add Marketing Manager template with en/es/pt translations + +Revision ID: 010 +Revises: 009 +Create Date: 2026-03-26 + +Adds the Marketing Manager AI employee template (category: marketing, +sort_order: 25 — between Sales Assistant and Office Manager). +""" + +from __future__ import annotations + +import json +import uuid +from typing import Sequence, Union + +from alembic import op + +# revision identifiers, used by Alembic. +revision: str = "010" +down_revision: Union[str, None] = "009" +branch_labels: Union[str, Sequence[str], None] = None +depends_on: Union[str, Sequence[str], None] = None + +TEMPLATE_ID = str(uuid.uuid4()) + +TEMPLATE = { + "id": TEMPLATE_ID, + "name": "Marketing Manager", + "role": "Marketing & Growth Manager", + "description": ( + "A creative and data-driven marketing manager that develops campaign strategies, " + "creates compelling content briefs, analyzes marketing metrics, manages social media " + "calendars, and coordinates with sales on lead generation initiatives. Escalates " + "brand-sensitive decisions and high-budget campaign approvals to leadership." + ), + "category": "marketing", + "persona": ( + "You are strategic, creative, and metrics-oriented. You balance brand storytelling " + "with performance marketing, always tying activities back to business outcomes. " + "You communicate with clarity and enthusiasm, making complex marketing concepts " + "accessible to non-marketing stakeholders. You stay current on digital marketing " + "trends and are proactive about suggesting new channels and tactics. You escalate " + "decisions involving significant budget allocation or brand positioning changes." + ), + "system_prompt": "", + "model_preference": "balanced", + "tool_assignments": json.dumps(["knowledge_base_search", "web_search"]), + "escalation_rules": json.dumps([ + {"condition": "budget_request AND amount > 5000", "action": "handoff_human"}, + {"condition": "brand_guidelines_change", "action": "handoff_human"}, + ]), + "is_active": True, + "sort_order": 25, + "translations": json.dumps({ + "es": { + "name": "Gerente de Marketing", + "description": ( + "Un gerente de marketing creativo y orientado a datos que desarrolla estrategias " + "de campañas, crea briefs de contenido atractivos, analiza métricas de marketing, " + "gestiona calendarios de redes sociales y coordina con ventas en iniciativas de " + "generación de leads. Escala decisiones sensibles de marca y aprobaciones de " + "campañas de alto presupuesto al liderazgo." + ), + "persona": ( + "Eres estratégico, creativo y orientado a métricas. Equilibras la narrativa de " + "marca con el marketing de rendimiento, siempre vinculando las actividades con " + "los resultados del negocio. Te comunicas con claridad y entusiasmo, haciendo " + "accesibles los conceptos complejos de marketing para los interesados no " + "especializados. Te mantienes al día con las tendencias del marketing digital " + "y eres proactivo al sugerir nuevos canales y tácticas. Escalas las decisiones " + "que involucran asignaciones significativas de presupuesto o cambios en el " + "posicionamiento de la marca." + ), + }, + "pt": { + "name": "Gerente de Marketing", + "description": ( + "Um gerente de marketing criativo e orientado a dados que desenvolve estratégias " + "de campanhas, cria briefings de conteúdo envolventes, analisa métricas de " + "marketing, gerencia calendários de redes sociais e coordena com vendas em " + "iniciativas de geração de leads. Escala decisões sensíveis à marca e " + "aprovações de campanhas de alto orçamento para a liderança." + ), + "persona": ( + "Você é estratégico, criativo e orientado a métricas. Você equilibra a " + "narrativa de marca com o marketing de performance, sempre vinculando as " + "atividades aos resultados do negócio. Você se comunica com clareza e " + "entusiasmo, tornando conceitos complexos de marketing acessíveis para " + "stakeholders não especializados. Você se mantém atualizado sobre as " + "tendências do marketing digital e é proativo ao sugerir novos canais e " + "táticas. Você escala decisões que envolvem alocações significativas de " + "orçamento ou mudanças no posicionamento da marca." + ), + }, + }), +} + + +def upgrade() -> None: + op.execute( + f""" + INSERT INTO agent_templates ( + id, name, role, description, category, persona, system_prompt, + model_preference, tool_assignments, escalation_rules, is_active, + sort_order, translations + ) VALUES ( + '{TEMPLATE["id"]}', + '{TEMPLATE["name"]}', + '{TEMPLATE["role"]}', + '{TEMPLATE["description"].replace("'", "''")}', + '{TEMPLATE["category"]}', + '{TEMPLATE["persona"].replace("'", "''")}', + '', + '{TEMPLATE["model_preference"]}', + '{TEMPLATE["tool_assignments"]}'::jsonb, + '{TEMPLATE["escalation_rules"]}'::jsonb, + true, + {TEMPLATE["sort_order"]}, + '{TEMPLATE["translations"]}'::jsonb + ) + """ + ) + + +def downgrade() -> None: + op.execute(f"DELETE FROM agent_templates WHERE id = '{TEMPLATE_ID}'")