mega-brain-ai 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of mega-brain-ai might be problematic. Click here for more details.
- package/.claude/CLAUDE.md +155 -0
- package/.claude/commands/agents.md +161 -0
- package/.claude/commands/ask.md +117 -0
- package/.claude/commands/benchmark.md +224 -0
- package/.claude/commands/chat.md +343 -0
- package/.claude/commands/compare.md +116 -0
- package/.claude/commands/conclave.md +194 -0
- package/.claude/commands/config.md +133 -0
- package/.claude/commands/council.md +194 -0
- package/.claude/commands/create-agent.md +452 -0
- package/.claude/commands/debate.md +157 -0
- package/.claude/commands/documentation/create-architecture-documentation.md +175 -0
- package/.claude/commands/dossiers.md +180 -0
- package/.claude/commands/evolve.md +223 -0
- package/.claude/commands/extract-dna.md +170 -0
- package/.claude/commands/extract-knowledge.md +507 -0
- package/.claude/commands/inbox.md +296 -0
- package/.claude/commands/ingest-empresa.md +191 -0
- package/.claude/commands/ingest.md +182 -0
- package/.claude/commands/jarvis-briefing.md +67 -0
- package/.claude/commands/jarvis-control.md +169 -0
- package/.claude/commands/jarvis-full.md +181 -0
- package/.claude/commands/jarvis.md +212 -0
- package/.claude/commands/ler-drive.md +212 -0
- package/.claude/commands/log.md +158 -0
- package/.claude/commands/loop.md +133 -0
- package/.claude/commands/loops.md +73 -0
- package/.claude/commands/mission-autopilot.md +538 -0
- package/.claude/commands/mission.md +353 -0
- package/.claude/commands/process-inbox.md +148 -0
- package/.claude/commands/process-jarvis.md +3036 -0
- package/.claude/commands/process-video.md +131 -0
- package/.claude/commands/rag-search.md +78 -0
- package/.claude/commands/resume.md +33 -0
- package/.claude/commands/save.md +38 -0
- package/.claude/commands/scan-inbox.md +125 -0
- package/.claude/commands/setup.md +99 -0
- package/.claude/commands/system-digest.md +243 -0
- package/.claude/commands/verify.md +182 -0
- package/.claude/commands/view-dna.md +169 -0
- package/.claude/hooks/agent_doctor.py +433 -0
- package/.claude/hooks/agent_memory_persister.py +203 -0
- package/.claude/hooks/auto_formatter.py +158 -0
- package/.claude/hooks/checkpoint_writer.py +244 -0
- package/.claude/hooks/claude_md_guard.py +146 -0
- package/.claude/hooks/creation_validator.py +357 -0
- package/.claude/hooks/enforce_dual_location.py +501 -0
- package/.claude/hooks/enforce_plan_mode.py +220 -0
- package/.claude/hooks/inbox_age_alert.py +367 -0
- package/.claude/hooks/jarvis_briefing.py +506 -0
- package/.claude/hooks/ledger_updater.py +301 -0
- package/.claude/hooks/memory_hints_injector.py +251 -0
- package/.claude/hooks/memory_updater.py +202 -0
- package/.claude/hooks/multi_agent_hook.py +464 -0
- package/.claude/hooks/notification_system.py +120 -0
- package/.claude/hooks/pattern_analyzer.py +526 -0
- package/.claude/hooks/pending_tracker.py +188 -0
- package/.claude/hooks/post_batch_cascading.py +1740 -0
- package/.claude/hooks/post_output_validator.py +358 -0
- package/.claude/hooks/post_tool_use.py +120 -0
- package/.claude/hooks/post_write_validator.py +200 -0
- package/.claude/hooks/quality_watchdog.py +394 -0
- package/.claude/hooks/ralph_wiggum.py +277 -0
- package/.claude/hooks/session-source-sync.py +218 -0
- package/.claude/hooks/session_autosave_v2.py +1135 -0
- package/.claude/hooks/session_end.py +203 -0
- package/.claude/hooks/session_start.py +939 -0
- package/.claude/hooks/skill_indexer.py +48 -0
- package/.claude/hooks/skill_router.py +358 -0
- package/.claude/hooks/stop_hook_completeness.py +178 -0
- package/.claude/hooks/subagent_tracker.py +163 -0
- package/.claude/hooks/token_checkpoint.py +584 -0
- package/.claude/hooks/user_prompt_submit.py +125 -0
- package/.claude/rules/ANTHROPIC-STANDARDS.md +384 -0
- package/.claude/rules/CLAUDE-LITE.md +201 -0
- package/.claude/rules/RULE-GROUP-1.md +320 -0
- package/.claude/rules/RULE-GROUP-2.md +307 -0
- package/.claude/rules/RULE-GROUP-3.md +248 -0
- package/.claude/rules/RULE-GROUP-4.md +427 -0
- package/.claude/rules/RULE-GROUP-5.md +388 -0
- package/.claude/rules/RULE-GROUP-6.md +387 -0
- package/.claude/rules/logging.md +53 -0
- package/.claude/rules/mcp-governance.md +128 -0
- package/.claude/rules/pipeline.md +60 -0
- package/.claude/rules/state-management.md +93 -0
- package/.claude/scripts/apply-tags.py +77 -0
- package/.claude/scripts/batch-extract-transcriptions.py +132 -0
- package/.claude/scripts/build-complete-index.py +250 -0
- package/.claude/scripts/build-planilha-index.py +170 -0
- package/.claude/scripts/complete-tag-matching.py +250 -0
- package/.claude/scripts/deduplicate-inbox.py +139 -0
- package/.claude/scripts/docx-xml-extractor.py +141 -0
- package/.claude/scripts/extract-docx-text.py +58 -0
- package/.claude/scripts/extract-single-transcription.py +74 -0
- package/.claude/scripts/extract_docx_from_gdrive.py +77 -0
- package/.claude/scripts/organized-downloader.py +246 -0
- package/.claude/scripts/planilha-tagger.py +187 -0
- package/.claude/scripts/revert-tags.py +70 -0
- package/.claude/scripts/source-sync.py +265 -0
- package/.claude/scripts/tag-inbox-files.py +276 -0
- package/.claude/scripts/tag-inbox-v2.py +253 -0
- package/.claude/scripts/test-extraction.py +35 -0
- package/.claude/scripts/test-full-extraction.py +74 -0
- package/.claude/skills/00-SKILL-CREATOR/SKILL.md +186 -0
- package/.claude/skills/01-SKILL-DOCS-MEGABRAIN/SKILL.md +251 -0
- package/.claude/skills/02-SKILL-PYTHON-MEGABRAIN/SKILL.md +323 -0
- package/.claude/skills/03-SKILL-AGENT-CREATION/SKILL.md +374 -0
- package/.claude/skills/04-SKILL-KNOWLEDGE-EXTRACTION/SKILL.md +318 -0
- package/.claude/skills/05-SKILL-PIPELINE-JARVIS/SKILL.md +430 -0
- package/.claude/skills/06-SKILL-BRAINSTORMING/SKILL.md +72 -0
- package/.claude/skills/07-SKILL-DISPATCHING-PARALLEL-AGENTS/SKILL.md +193 -0
- package/.claude/skills/08-SKILL-EXECUTING-PLANS/SKILL.md +114 -0
- package/.claude/skills/09-SKILL-WRITING-PLANS/SKILL.md +184 -0
- package/.claude/skills/10-SKILL-VERIFICATION-BEFORE-COMPLETION/SKILL.md +130 -0
- package/.claude/skills/11-SKILL-USING-SUPERPOWERS/SKILL.md +105 -0
- package/.claude/skills/DETECTION-PROTOCOL.md +217 -0
- package/.claude/skills/README.md +240 -0
- package/.claude/skills/SKILL-REGISTRY.md +284 -0
- package/.claude/skills/SKILL-SUGGESTIONS.md +114 -0
- package/.claude/skills/_TEMPLATES/SKILL-WRITER-GUIDE.md +385 -0
- package/.claude/skills/chronicler/SKILL.md +146 -0
- package/.claude/skills/chronicler/chronicler_core.py +468 -0
- package/.claude/skills/code-review/SKILL.md +160 -0
- package/.claude/skills/council/SKILL.md +210 -0
- package/.claude/skills/executor/SKILL.md +161 -0
- package/.claude/skills/fase-2-5-tagging/SKILL.md +182 -0
- package/.claude/skills/feature-dev/SKILL.md +154 -0
- package/.claude/skills/finance-agent/SKILL.md +137 -0
- package/.claude/skills/frontend-design/SKILL.md +165 -0
- package/.claude/skills/gdrive-transcription-downloader/SKILL.md +249 -0
- package/.claude/skills/gemini-fallback/SKILL.md +67 -0
- package/.claude/skills/gemini-fallback/gemini_fetch.py +0 -0
- package/.claude/skills/gha/SKILL.md +96 -0
- package/.claude/skills/gha/gha_diagnostic.py +227 -0
- package/.claude/skills/github-workflow/SKILL.md +190 -0
- package/.claude/skills/hookify/SKILL.md +134 -0
- package/.claude/skills/hybrid-source-reading/SKILL.md +265 -0
- package/.claude/skills/jarvis/SKILL.md +546 -0
- package/.claude/skills/jarvis-briefing/SKILL.md +340 -0
- package/.claude/skills/ler-planilha/SKILL.md +281 -0
- package/.claude/skills/plugin-dev/SKILL.md +176 -0
- package/.claude/skills/pr-review-toolkit/SKILL.md +178 -0
- package/.claude/skills/resume/SKILL.md +61 -0
- package/.claude/skills/save/SKILL.md +87 -0
- package/.claude/skills/skill-writer/SKILL.md +153 -0
- package/.claude/skills/skill-writer/examples.md +191 -0
- package/.claude/skills/skill-writer/troubleshooting.md +205 -0
- package/.claude/skills/smart-download-tagger/SKILL.md +148 -0
- package/.claude/skills/source-sync/SKILL.md +240 -0
- package/.claude/skills/sync-docs/SKILL.md +193 -0
- package/.claude/skills/sync-docs/config.json +37 -0
- package/.claude/skills/sync-docs/gdrive_sync.py +358 -0
- package/.claude/skills/sync-docs/reauth.py +71 -0
- package/.claude/skills/talent-agent/SKILL.md +183 -0
- package/.claude/skills/verify/SKILL.md +154 -0
- package/.claude/skills/verify/verify_runner.py +0 -0
- package/.claude/skills/verify-6-levels/SKILL.md +234 -0
- package/.claude/templates/BATCH-LOG-TEMPLATE.md +221 -0
- package/.claudeignore +9 -0
- package/.gitattributes +4 -0
- package/.github/layer1-allowlist.txt +80 -0
- package/.github/layer2-manifest.txt +40 -0
- package/.gitignore +219 -0
- package/README.md +1210 -0
- package/agents/_templates/INDEX.md +741 -0
- package/agents/_templates/TEMPLATE-AGENT-MD-ULTRA-ROBUSTO-V3.md +2399 -0
- package/agents/boardroom/CHECKLIST-MASTER.md +281 -0
- package/agents/boardroom/INTEGRATION-GUIDE.md +406 -0
- package/agents/boardroom/README.md +238 -0
- package/agents/boardroom/config/BOARDROOM-CONFIG.md +186 -0
- package/agents/boardroom/config/TTS-INTEGRATION.md +258 -0
- package/agents/boardroom/config/VOICE-PROFILES.md +624 -0
- package/agents/boardroom/config/voice_mapping.json +128 -0
- package/agents/boardroom/scripts/audio_generator.py +375 -0
- package/agents/boardroom/scripts/audio_generator_edge.py +353 -0
- package/agents/boardroom/scripts/jarvis_boardroom_hook.py +415 -0
- package/agents/boardroom/scripts/notebooklm_generator.py +578 -0
- package/agents/boardroom/templates/EPISODE-TEMPLATE.md +367 -0
- package/agents/boardroom/templates/scene-templates/SCENE-AGENT-DEBATE.md +252 -0
- package/agents/boardroom/templates/scene-templates/SCENE-COUNCIL.md +270 -0
- package/agents/boardroom/templates/scene-templates/SCENE-DNA-CONSULTATION.md +126 -0
- package/agents/boardroom/templates/scene-templates/SCENE-QUESTION.md +174 -0
- package/agents/boardroom/workflows/WORKFLOW-AUDIO-GENERATION.md +421 -0
- package/agents/constitution/BASE-CONSTITUTION.md +254 -0
- package/agents/council/CRITIC.md +197 -0
- package/agents/council/DEVILS-ADVOCATE.md +274 -0
- package/agents/council/SYNTHESIZER.md +293 -0
- package/agents/council/advogado-do-diabo/AGENT.md +489 -0
- package/agents/council/advogado-do-diabo/SOUL.md +100 -0
- package/agents/council/critico-metodologico/AGENT.md +670 -0
- package/agents/council/critico-metodologico/SOUL.md +107 -0
- package/agents/council/sintetizador/AGENT.md +558 -0
- package/agents/council/sintetizador/SOUL.md +94 -0
- package/agents/persons/_example/AGENT-EXAMPLE.md +42 -0
- package/agents/persons/_example/DNA-EXAMPLE.yaml +61 -0
- package/agents/protocols/AGENT-COGNITION-PROTOCOL.md +779 -0
- package/agents/protocols/AGENT-INTEGRITY-PROTOCOL.md +692 -0
- package/agents/protocols/BATCH-VISUAL-PROTOCOL.md +841 -0
- package/agents/protocols/DNA-CONFIG-TEMPLATE.yaml +181 -0
- package/agents/protocols/DNA-EXTRACTION-PROTOCOL.md +370 -0
- package/agents/protocols/EPISTEMIC-PROTOCOL.md +333 -0
- package/agents/protocols/LOG-STRUCTURE-PROTOCOL.md +65 -0
- package/agents/protocols/MEMORY-PROTOCOL.md +567 -0
- package/agents/protocols/NARRATIVE-SYNTHESIS-PROTOCOL.md +278 -0
- package/agents/protocols/PHASE-4-VERIFICATION-CHECKPOINT.md +146 -0
- package/agents/protocols/SOUL-TEMPLATE.md +416 -0
- package/agents/protocols/TEMPLATE-EVOLUTION-PROTOCOL.md +544 -0
- package/agents/protocols/VISUAL-DIFF-PROTOCOL.md +159 -0
- package/agents/sua-empresa/README.md +44 -0
- package/agents/sua-empresa/_example/jds/EXAMPLE-JD.md +42 -0
- package/agents/sua-empresa/_example/org/EXAMPLE-ORG.md +32 -0
- package/agents/sua-empresa/_example/roles/EXAMPLE-ROLE.md +38 -0
- package/bin/cli.js +2 -0
- package/bin/lib/ascii-art.js +234 -0
- package/bin/lib/installer.js +402 -0
- package/bin/lib/setup-wizard.js +95 -0
- package/bin/lib/validate-email.js +109 -0
- package/bin/mega-brain.js +97 -0
- package/bin/push.js +342 -0
- package/bin/templates/env.example +38 -0
- package/inbox/.gitkeep +0 -0
- package/integrations/README.md +46 -0
- package/integrations/mcps/MCP-REGISTRY.md +56 -0
- package/integrations/mcps/excalidraw/CONFIG.md +56 -0
- package/integrations/mcps/gdrive/CONFIG.md +38 -0
- package/knowledge/dna/.gitkeep +0 -0
- package/knowledge/dossiers/persons/.gitkeep +0 -0
- package/knowledge/dossiers/persons/DOSSIER-EXAMPLE.md +49 -0
- package/knowledge/dossiers/system/.gitkeep +0 -0
- package/knowledge/dossiers/themes/.gitkeep +0 -0
- package/knowledge/playbooks/.gitkeep +0 -0
- package/knowledge/playbooks/PLAYBOOK-EXAMPLE.md +50 -0
- package/knowledge/sources/.gitkeep +0 -0
- package/logs/.gitkeep +0 -0
- package/package.json +128 -0
- package/processing/canonical/.gitkeep +0 -0
- package/processing/chunks/.gitkeep +0 -0
- package/processing/insights/.gitkeep +0 -0
- package/processing/narratives/.gitkeep +0 -0
- package/reference/CONSELHO.md +337 -0
- package/reference/CONTEXT7_README.md +28 -0
- package/reference/JARVIS-LOGGING-PROTOCOL.md +380 -0
- package/reference/QUICK-START.md +197 -0
- package/reference/README-RALPH-CASCATEAMENTO.md +207 -0
- package/reference/TEMPLATE-MASTER.md +727 -0
- package/reference/prds/prd-jarvis-mega-brain-v3.md +1305 -0
- package/reference/templates/phase5/IMPLEMENTATION-GUIDE.md +355 -0
- package/reference/templates/phase5/MOGA-BRAIN-PHASE5-TEMPLATES.md +1284 -0
- package/reference/templates/phase5/README.md +165 -0
- package/reference/workflow-claude-code-boris-cherny-continuous-claude.md +2232 -0
- package/system/database/001_moneyclub_buyers.sql +160 -0
- package/system/database/002_premium_token.sql +97 -0
- package/system/database/apply-migration.mjs +129 -0
- package/system/docs/MEGA-BRAIN-DEMO-COMPLETA.md +1226 -0
- package/system/docs/MEGA-BRAIN-MANIFESTO-COMPLETO.md +1054 -0
- package/system/docs/MOGA-BRAIN-EXPLICACAO-COMPLETA.md +791 -0
- package/system/docs/STRATEGIC-INTEGRATION-GUIDE.md +725 -0
- package/system/docs/architecture/01-system-context.md +136 -0
- package/system/docs/architecture/02-components.md +225 -0
- package/system/docs/architecture/03-data-flow.md +235 -0
- package/system/docs/architecture/04-integrations.md +283 -0
- package/system/docs/architecture/README.md +71 -0
- package/system/docs/architecture/diagrams/component-diagram.mmd +50 -0
- package/system/docs/architecture/diagrams/data-flow.mmd +39 -0
- package/system/docs/architecture/diagrams/system-overview.mmd +68 -0
- package/system/protocols/AGENT-AUTHORITY.md +217 -0
- package/system/protocols/CONSTITUICAO-BASE.md +115 -0
- package/system/protocols/CONSTITUTION.md +231 -0
- package/system/protocols/GOVERNANCE-MAP.md +123 -0
- package/system/protocols/HOOK-SECURITY-THREAT-MODEL.md +152 -0
- package/system/protocols/ORQUESTRACAO-PROTOCOL.md +215 -0
- package/system/protocols/_archive/CHUNKING-PROTOCOL.md +207 -0
- package/system/protocols/_archive/ENTITY-RESOLUTION-PROTOCOL.md +269 -0
- package/system/protocols/_archive/INSIGHT-EXTRACTION-PROTOCOL.md +257 -0
- package/system/protocols/_archive/NARRATIVE-SYNTHESIS-PROTOCOL.md +290 -0
- package/system/protocols/agents/AGENT-INTERACTION.md +315 -0
- package/system/protocols/agents/CORTEX-PROTOCOL.md +520 -0
- package/system/protocols/agents/EPISTEMIC-PROTOCOL.md +465 -0
- package/system/protocols/agents/MEMORY-PROTOCOL.md +366 -0
- package/system/protocols/agents/WAR-ROOM.md +355 -0
- package/system/protocols/company/COMPANY-DOCUMENT-PROTOCOL.md +793 -0
- package/system/protocols/company/COMPANY-ENRICHMENT-PROTOCOL.md +679 -0
- package/system/protocols/conclave/CONCLAVE-LOG-TEMPLATE-v2.md +309 -0
- package/system/protocols/conclave/CONCLAVE-PROTOCOL.md +518 -0
- package/system/protocols/conclave/DEBATE-DYNAMICS-CONFIG.yaml +322 -0
- package/system/protocols/conclave/DEBATE-DYNAMICS-PROTOCOL.md +613 -0
- package/system/protocols/conclave/DEBATE-PROTOCOL.md +323 -0
- package/system/protocols/council/COUNCIL-LOG-TEMPLATE-v2.md +309 -0
- package/system/protocols/council/COUNCIL-PROTOCOL.md +518 -0
- package/system/protocols/council/DEBATE-DYNAMICS-CONFIG.yaml +322 -0
- package/system/protocols/council/DEBATE-DYNAMICS-PROTOCOL.md +613 -0
- package/system/protocols/council/DEBATE-PROTOCOL.md +323 -0
- package/system/protocols/dna/DNA-EXTRACTION-PROTOCOL.md +1214 -0
- package/system/protocols/dna/ENRICHMENT-PROTOCOL.md +408 -0
- package/system/protocols/dna/REASONING-MODEL-PROTOCOL.md +331 -0
- package/system/protocols/pipeline/DOSSIER-COMPILATION-PROTOCOL.md +790 -0
- package/system/protocols/pipeline/NARRATIVE-METABOLISM-PROTOCOL.md +292 -0
- package/system/protocols/pipeline/PIPELINE-JARVIS-v2.1.md +606 -0
- package/system/protocols/pipeline/PROMPT-1.1-CHUNKING.md +154 -0
- package/system/protocols/pipeline/PROMPT-1.2-ENTITY-RESOLUTION.md +186 -0
- package/system/protocols/pipeline/PROMPT-2.1-DNA-TAGS-INCREMENT.md +208 -0
- package/system/protocols/pipeline/PROMPT-2.1-INSIGHT-EXTRACTION.md +191 -0
- package/system/protocols/pipeline/PROMPT-3.1-NARRATIVE-SYNTHESIS.md +331 -0
- package/system/protocols/pipeline/SOURCES-COMPILATION-PROTOCOL.md +340 -0
- package/system/protocols/system/AUTO-LOG-PROTOCOL.md +369 -0
- package/system/protocols/system/CHECKPOINT-ENFORCEMENT.md +176 -0
- package/system/protocols/system/ENFORCEMENT.md +435 -0
- package/system/protocols/system/LOG-TEMPLATES.md +1068 -0
|
@@ -0,0 +1,415 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
JARVIS-BOARDROOM HOOK
|
|
4
|
+
Integração entre Pipeline Jarvis e Boardroom Warfare
|
|
5
|
+
|
|
6
|
+
Este módulo é chamado ao final do Pipeline Jarvis (Fase 8)
|
|
7
|
+
para oferecer a opção de gerar debates em áudio.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
import os
|
|
11
|
+
import json
|
|
12
|
+
from pathlib import Path
|
|
13
|
+
from datetime import datetime
|
|
14
|
+
from typing import List, Dict, Optional
|
|
15
|
+
|
|
16
|
+
# Importar gerador de áudio
|
|
17
|
+
try:
|
|
18
|
+
from audio_generator import generate_episode_audio, parse_script
|
|
19
|
+
AUDIO_GENERATOR_AVAILABLE = True
|
|
20
|
+
except ImportError:
|
|
21
|
+
AUDIO_GENERATOR_AVAILABLE = False
|
|
22
|
+
|
|
23
|
+
# Paths
|
|
24
|
+
PROJECT_ROOT = Path(__file__).parent.parent.parent
|
|
25
|
+
BOARDROOM_PATH = PROJECT_ROOT / "agents/boardroom"
|
|
26
|
+
TEMPLATES_PATH = BOARDROOM_PATH / "templates"
|
|
27
|
+
OUTPUTS_PATH = BOARDROOM_PATH / "outputs"
|
|
28
|
+
CONFIG_PATH = BOARDROOM_PATH / "config"
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
# ═══════════════════════════════════════════════════════════════
|
|
32
|
+
# DETECÇÃO DE PARTICIPANTES
|
|
33
|
+
# ═══════════════════════════════════════════════════════════════
|
|
34
|
+
|
|
35
|
+
KEYWORD_MAPPING = {
|
|
36
|
+
# Keywords → Agents a convocar
|
|
37
|
+
"comissão": ["COLE_GORDON", "HORMOZI", "CRO", "CFO"],
|
|
38
|
+
"salário": ["COLE_GORDON", "HORMOZI", "CRO", "CFO"],
|
|
39
|
+
"compensação": ["COLE_GORDON", "HORMOZI", "CRO", "CFO"],
|
|
40
|
+
"vendas": ["COLE_GORDON", "HORMOZI", "CRO"],
|
|
41
|
+
"closer": ["COLE_GORDON", "HORMOZI", "CRO"],
|
|
42
|
+
"funil": ["BRUNSON", "HORMOZI", "CMO"],
|
|
43
|
+
"conversão": ["BRUNSON", "HORMOZI", "CMO"],
|
|
44
|
+
"landing": ["BRUNSON", "CMO"],
|
|
45
|
+
"oferta": ["HORMOZI", "BRUNSON", "CRO"],
|
|
46
|
+
"preço": ["HORMOZI", "CFO", "CRO"],
|
|
47
|
+
"valor": ["HORMOZI", "BRUNSON"],
|
|
48
|
+
"marketing": ["BRUNSON", "CMO"],
|
|
49
|
+
"marca": ["BRUNSON", "CMO"],
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
def detect_participants(topic: str, content: str = "") -> Dict[str, List[str]]:
|
|
54
|
+
"""
|
|
55
|
+
Detecta quais agentes devem participar do debate com base no tema.
|
|
56
|
+
|
|
57
|
+
Returns:
|
|
58
|
+
Dict com 'persons', 'positions', 'council'
|
|
59
|
+
"""
|
|
60
|
+
combined_text = f"{topic} {content}".lower()
|
|
61
|
+
|
|
62
|
+
persons = set()
|
|
63
|
+
positions = set()
|
|
64
|
+
|
|
65
|
+
for keyword, agents in KEYWORD_MAPPING.items():
|
|
66
|
+
if keyword in combined_text:
|
|
67
|
+
for agent in agents:
|
|
68
|
+
if agent in ["HORMOZI", "COLE_GORDON", "BRUNSON"]:
|
|
69
|
+
persons.add(agent)
|
|
70
|
+
else:
|
|
71
|
+
positions.add(agent)
|
|
72
|
+
|
|
73
|
+
# Garantir mínimo de participantes
|
|
74
|
+
if len(persons) < 2:
|
|
75
|
+
persons.add("HORMOZI")
|
|
76
|
+
|
|
77
|
+
if len(positions) < 2:
|
|
78
|
+
positions.add("CRO")
|
|
79
|
+
positions.add("CFO")
|
|
80
|
+
|
|
81
|
+
return {
|
|
82
|
+
"persons": list(persons)[:4], # Max 4 persons
|
|
83
|
+
"positions": list(positions)[:4], # Max 4 positions
|
|
84
|
+
"council": ["METHODOLOGICAL-CRITIC", "DEVILS-ADVOCATE", "SYNTHESIZER"]
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
# ═══════════════════════════════════════════════════════════════
|
|
89
|
+
# GERAÇÃO DE SCRIPT
|
|
90
|
+
# ═══════════════════════════════════════════════════════════════
|
|
91
|
+
|
|
92
|
+
def generate_episode_script(
|
|
93
|
+
topic: str,
|
|
94
|
+
participants: Dict[str, List[str]],
|
|
95
|
+
context: str = "",
|
|
96
|
+
sources: List[str] = None
|
|
97
|
+
) -> str:
|
|
98
|
+
"""
|
|
99
|
+
Gera script completo de episódio baseado no tema e participantes.
|
|
100
|
+
|
|
101
|
+
Este é um template simplificado - o script real seria gerado
|
|
102
|
+
usando o LLM com os templates da pasta TEMPLATES/.
|
|
103
|
+
"""
|
|
104
|
+
|
|
105
|
+
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
|
|
106
|
+
episode_id = f"BWE-{datetime.now().year}-{timestamp}"
|
|
107
|
+
|
|
108
|
+
# Header do script
|
|
109
|
+
script = f"""# ═══════════════════════════════════════════════════════════════
|
|
110
|
+
# BOARDROOM WARFARE
|
|
111
|
+
# Episódio: {topic}
|
|
112
|
+
# ID: {episode_id}
|
|
113
|
+
# Gerado: {datetime.now().isoformat()}
|
|
114
|
+
# ═══════════════════════════════════════════════════════════════
|
|
115
|
+
|
|
116
|
+
## METADADOS
|
|
117
|
+
|
|
118
|
+
```yaml
|
|
119
|
+
episode_id: "{episode_id}"
|
|
120
|
+
topic: "{topic}"
|
|
121
|
+
participants:
|
|
122
|
+
persons: {json.dumps(participants['persons'])}
|
|
123
|
+
positions: {json.dumps(participants['positions'])}
|
|
124
|
+
council: {json.dumps(participants['council'])}
|
|
125
|
+
sources: {json.dumps(sources or [])}
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
## SCRIPT
|
|
131
|
+
|
|
132
|
+
[SOM: Porta de vidro fechando]
|
|
133
|
+
|
|
134
|
+
### ATO 1: ABERTURA
|
|
135
|
+
|
|
136
|
+
[NARRADOR]
|
|
137
|
+
(tom baixo, sussurrado)
|
|
138
|
+
"Sala de reuniões. O tema de hoje: {topic}.
|
|
139
|
+
|
|
140
|
+
Na mesa: {', '.join(participants['persons'][:2])}.
|
|
141
|
+
Executivos: {', '.join(participants['positions'][:2])}.
|
|
142
|
+
Observando: o Council.
|
|
143
|
+
|
|
144
|
+
Vamos observar."
|
|
145
|
+
|
|
146
|
+
[PAUSA 2 seg]
|
|
147
|
+
|
|
148
|
+
### ATO 2: CONSTITUIÇÃO
|
|
149
|
+
|
|
150
|
+
[NARRADOR]
|
|
151
|
+
"Antes do debate, a constituição."
|
|
152
|
+
|
|
153
|
+
[CITADOR]
|
|
154
|
+
"Referência: DNA Cognitivo, camada a ser determinada."
|
|
155
|
+
|
|
156
|
+
[NARRADOR]
|
|
157
|
+
"O princípio que guia: a ser inserido baseado no tema."
|
|
158
|
+
|
|
159
|
+
### ATO 3: DEBATE
|
|
160
|
+
|
|
161
|
+
[{participants['persons'][0]}]
|
|
162
|
+
"[POSIÇÃO INICIAL - a ser gerada com base no DNA do agente]"
|
|
163
|
+
|
|
164
|
+
"[RESPOSTA/CONTRAPONTO - a ser gerada]"
|
|
165
|
+
|
|
166
|
+
### ATO 4: EXECUTIVOS
|
|
167
|
+
|
|
168
|
+
[{participants['positions'][0]}]
|
|
169
|
+
"[PERSPECTIVA DO CARGO]"
|
|
170
|
+
|
|
171
|
+
[{participants['positions'][1] if len(participants['positions']) > 1 else 'CFO'}]
|
|
172
|
+
"[CONTRAPONTO]"
|
|
173
|
+
|
|
174
|
+
### ATO 5: COUNCIL
|
|
175
|
+
|
|
176
|
+
[SYNTHESIZER]
|
|
177
|
+
"Vou pedir uma pausa. Temos divergência. Critic?"
|
|
178
|
+
|
|
179
|
+
[METHODOLOGICAL-CRITIC]
|
|
180
|
+
"[QUESTIONAMENTO DE PREMISSA]"
|
|
181
|
+
|
|
182
|
+
[DEVILS-ADVOCATE]
|
|
183
|
+
"[CENÁRIO DE RISCO]"
|
|
184
|
+
|
|
185
|
+
[SYNTHESIZER]
|
|
186
|
+
"Minha síntese: [A SER GERADA]"
|
|
187
|
+
|
|
188
|
+
### ATO 6: RESOLUÇÃO
|
|
189
|
+
|
|
190
|
+
[SYNTHESIZER]
|
|
191
|
+
"Proposta final: [A SER GERADA]
|
|
192
|
+
|
|
193
|
+
SCORING:
|
|
194
|
+
- Viabilidade: X/10
|
|
195
|
+
- Impacto: X/10
|
|
196
|
+
- Risco: X/10
|
|
197
|
+
|
|
198
|
+
Score final: X.X"
|
|
199
|
+
|
|
200
|
+
### ATO 7: PERGUNTA
|
|
201
|
+
|
|
202
|
+
[NARRADOR]
|
|
203
|
+
"E você?
|
|
204
|
+
|
|
205
|
+
[PERGUNTA PROVOCATIVA RELACIONADA AO TEMA]
|
|
206
|
+
|
|
207
|
+
Essa é a pergunta que fica."
|
|
208
|
+
|
|
209
|
+
[SOM: Porta abrindo]
|
|
210
|
+
|
|
211
|
+
[NARRADOR]
|
|
212
|
+
"Até o próximo episódio de Boardroom Warfare."
|
|
213
|
+
|
|
214
|
+
# ═══════════════════════════════════════════════════════════════
|
|
215
|
+
# FIM DO EPISÓDIO
|
|
216
|
+
# ═══════════════════════════════════════════════════════════════
|
|
217
|
+
"""
|
|
218
|
+
|
|
219
|
+
return script
|
|
220
|
+
|
|
221
|
+
|
|
222
|
+
# ═══════════════════════════════════════════════════════════════
|
|
223
|
+
# HOOK PRINCIPAL
|
|
224
|
+
# ═══════════════════════════════════════════════════════════════
|
|
225
|
+
|
|
226
|
+
def boardroom_hook(
|
|
227
|
+
pipeline_outputs: List[Dict],
|
|
228
|
+
auto_prompt: bool = True
|
|
229
|
+
) -> Optional[Path]:
|
|
230
|
+
"""
|
|
231
|
+
Hook chamado ao final do Pipeline Jarvis.
|
|
232
|
+
|
|
233
|
+
Args:
|
|
234
|
+
pipeline_outputs: Lista de outputs do pipeline
|
|
235
|
+
[{"type": "playbook", "title": "...", "path": "..."}, ...]
|
|
236
|
+
auto_prompt: Se True, pergunta ao usuário
|
|
237
|
+
|
|
238
|
+
Returns:
|
|
239
|
+
Path do áudio gerado ou None
|
|
240
|
+
"""
|
|
241
|
+
|
|
242
|
+
if not pipeline_outputs:
|
|
243
|
+
return None
|
|
244
|
+
|
|
245
|
+
# ─────────────────────────────────────────────────────────────
|
|
246
|
+
# PROMPT AO USUÁRIO
|
|
247
|
+
# ─────────────────────────────────────────────────────────────
|
|
248
|
+
|
|
249
|
+
print("\n" + "═" * 60)
|
|
250
|
+
print("📋 PROCESSAMENTO CONCLUÍDO")
|
|
251
|
+
print("═" * 60)
|
|
252
|
+
print("\nOutputs gerados:")
|
|
253
|
+
for i, output in enumerate(pipeline_outputs, 1):
|
|
254
|
+
print(f" {i}. [{output.get('type', 'unknown')}] {output.get('title', 'Sem título')}")
|
|
255
|
+
|
|
256
|
+
print("\n" + "─" * 60)
|
|
257
|
+
print("🎬 BOARDROOM WARFARE")
|
|
258
|
+
print("─" * 60)
|
|
259
|
+
print("\nDeseja gerar episódio de debate para algum output?")
|
|
260
|
+
print("\n[1] SIM - Selecionar tema para debate")
|
|
261
|
+
print("[2] NÃO - Finalizar processamento")
|
|
262
|
+
|
|
263
|
+
if not auto_prompt:
|
|
264
|
+
return None
|
|
265
|
+
|
|
266
|
+
choice = input("\nSua escolha: ").strip()
|
|
267
|
+
|
|
268
|
+
if choice != "1":
|
|
269
|
+
print("\n✅ Processamento finalizado sem debate.")
|
|
270
|
+
return None
|
|
271
|
+
|
|
272
|
+
# ─────────────────────────────────────────────────────────────
|
|
273
|
+
# SELEÇÃO DE TEMA
|
|
274
|
+
# ─────────────────────────────────────────────────────────────
|
|
275
|
+
|
|
276
|
+
print("\nSelecione o output para debate:")
|
|
277
|
+
for i, output in enumerate(pipeline_outputs, 1):
|
|
278
|
+
print(f" [{i}] {output.get('title', 'Sem título')}")
|
|
279
|
+
|
|
280
|
+
try:
|
|
281
|
+
selection = int(input("\nNúmero: ").strip()) - 1
|
|
282
|
+
selected = pipeline_outputs[selection]
|
|
283
|
+
except (ValueError, IndexError):
|
|
284
|
+
print("❌ Seleção inválida.")
|
|
285
|
+
return None
|
|
286
|
+
|
|
287
|
+
topic = selected.get('title', 'Tema do debate')
|
|
288
|
+
content = selected.get('content', '')
|
|
289
|
+
|
|
290
|
+
# ─────────────────────────────────────────────────────────────
|
|
291
|
+
# DETECÇÃO DE PARTICIPANTES
|
|
292
|
+
# ─────────────────────────────────────────────────────────────
|
|
293
|
+
|
|
294
|
+
participants = detect_participants(topic, content)
|
|
295
|
+
|
|
296
|
+
print(f"\n🎭 Participantes detectados:")
|
|
297
|
+
print(f" Experts: {', '.join(participants['persons'])}")
|
|
298
|
+
print(f" Executivos: {', '.join(participants['positions'])}")
|
|
299
|
+
print(f" Council: {', '.join(participants['council'])}")
|
|
300
|
+
|
|
301
|
+
confirm = input("\nConfirmar participantes? [S/n]: ").strip().lower()
|
|
302
|
+
if confirm == 'n':
|
|
303
|
+
# TODO: Permitir customização
|
|
304
|
+
print("⚠️ Customização de participantes ainda não implementada.")
|
|
305
|
+
|
|
306
|
+
# ─────────────────────────────────────────────────────────────
|
|
307
|
+
# GERAÇÃO DO SCRIPT
|
|
308
|
+
# ─────────────────────────────────────────────────────────────
|
|
309
|
+
|
|
310
|
+
print("\n📝 Gerando script do episódio...")
|
|
311
|
+
|
|
312
|
+
script = generate_episode_script(
|
|
313
|
+
topic=topic,
|
|
314
|
+
participants=participants,
|
|
315
|
+
context=content,
|
|
316
|
+
sources=[selected.get('path', '')]
|
|
317
|
+
)
|
|
318
|
+
|
|
319
|
+
# Salvar script
|
|
320
|
+
script_filename = f"BWE-{datetime.now().strftime('%Y%m%d_%H%M%S')}.md"
|
|
321
|
+
script_path = OUTPUTS_PATH / "scripts" / script_filename
|
|
322
|
+
script_path.parent.mkdir(parents=True, exist_ok=True)
|
|
323
|
+
|
|
324
|
+
with open(script_path, 'w', encoding='utf-8') as f:
|
|
325
|
+
f.write(script)
|
|
326
|
+
|
|
327
|
+
print(f" ✅ Script salvo: {script_path}")
|
|
328
|
+
|
|
329
|
+
# ─────────────────────────────────────────────────────────────
|
|
330
|
+
# PROMPT PARA NARRAÇÃO
|
|
331
|
+
# ─────────────────────────────────────────────────────────────
|
|
332
|
+
|
|
333
|
+
print("\n" + "─" * 60)
|
|
334
|
+
print("🎧 NARRAÇÃO")
|
|
335
|
+
print("─" * 60)
|
|
336
|
+
print("\nDeseja iniciar a narração do debate?")
|
|
337
|
+
print("\n[SIM] - Gerar áudio agora")
|
|
338
|
+
print("[NÃO] - Apenas salvar script")
|
|
339
|
+
|
|
340
|
+
narrate = input("\nSua escolha: ").strip().upper()
|
|
341
|
+
|
|
342
|
+
if narrate != "SIM":
|
|
343
|
+
print(f"\n✅ Script salvo em: {script_path}")
|
|
344
|
+
print(" Para gerar áudio depois:")
|
|
345
|
+
print(f" python audio_generator.py {script_path}")
|
|
346
|
+
return script_path
|
|
347
|
+
|
|
348
|
+
# ─────────────────────────────────────────────────────────────
|
|
349
|
+
# GERAÇÃO DE ÁUDIO
|
|
350
|
+
# ─────────────────────────────────────────────────────────────
|
|
351
|
+
|
|
352
|
+
if not AUDIO_GENERATOR_AVAILABLE:
|
|
353
|
+
print("\n⚠️ audio_generator não disponível.")
|
|
354
|
+
print(f" Script salvo em: {script_path}")
|
|
355
|
+
return script_path
|
|
356
|
+
|
|
357
|
+
print("\n🔊 Iniciando geração de áudio...")
|
|
358
|
+
|
|
359
|
+
try:
|
|
360
|
+
audio_path = generate_episode_audio(script_path)
|
|
361
|
+
|
|
362
|
+
print("\n" + "═" * 60)
|
|
363
|
+
print("✅ EPISÓDIO GERADO COM SUCESSO")
|
|
364
|
+
print("═" * 60)
|
|
365
|
+
print(f"\n📁 Script: {script_path}")
|
|
366
|
+
print(f"🎧 Áudio: {audio_path}")
|
|
367
|
+
print(f"\n🔗 Para ouvir agora:")
|
|
368
|
+
print(f" open {audio_path} # Mac")
|
|
369
|
+
print(f" xdg-open {audio_path} # Linux")
|
|
370
|
+
print("═" * 60)
|
|
371
|
+
|
|
372
|
+
return audio_path
|
|
373
|
+
|
|
374
|
+
except Exception as e:
|
|
375
|
+
print(f"\n❌ Erro ao gerar áudio: {e}")
|
|
376
|
+
print(f" Script salvo em: {script_path}")
|
|
377
|
+
return script_path
|
|
378
|
+
|
|
379
|
+
|
|
380
|
+
# ═══════════════════════════════════════════════════════════════
|
|
381
|
+
# INTEGRAÇÃO DIRETA COM JARVIS
|
|
382
|
+
# ═══════════════════════════════════════════════════════════════
|
|
383
|
+
|
|
384
|
+
def integrate_with_jarvis_pipeline():
|
|
385
|
+
"""
|
|
386
|
+
Função para ser importada pelo jarvis_pipeline.py
|
|
387
|
+
|
|
388
|
+
Adicione ao final da Fase 8 do Pipeline Jarvis:
|
|
389
|
+
|
|
390
|
+
from boardroom.jarvis_boardroom_hook import boardroom_hook
|
|
391
|
+
|
|
392
|
+
# No final da fase 8:
|
|
393
|
+
boardroom_hook(pipeline_outputs)
|
|
394
|
+
"""
|
|
395
|
+
pass
|
|
396
|
+
|
|
397
|
+
|
|
398
|
+
if __name__ == "__main__":
|
|
399
|
+
# Teste standalone
|
|
400
|
+
test_outputs = [
|
|
401
|
+
{
|
|
402
|
+
"type": "playbook",
|
|
403
|
+
"title": "Estrutura de Comissão para Time de Vendas",
|
|
404
|
+
"path": "04-PLAYBOOK/PLAYBOOK-COMISSAO.md",
|
|
405
|
+
"content": "Playbook sobre estrutura de comissão, closer, vendas high-ticket"
|
|
406
|
+
},
|
|
407
|
+
{
|
|
408
|
+
"type": "dossier",
|
|
409
|
+
"title": "Dossiê Cole Gordon - Vendas",
|
|
410
|
+
"path": "03-KNOWLEDGE/dossiers/DOSSIE-COLE-GORDON.md",
|
|
411
|
+
"content": "Dossiê sobre Cole Gordon e suas metodologias de vendas"
|
|
412
|
+
}
|
|
413
|
+
]
|
|
414
|
+
|
|
415
|
+
boardroom_hook(test_outputs)
|