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.

Files changed (308) hide show
  1. package/.claude/CLAUDE.md +155 -0
  2. package/.claude/commands/agents.md +161 -0
  3. package/.claude/commands/ask.md +117 -0
  4. package/.claude/commands/benchmark.md +224 -0
  5. package/.claude/commands/chat.md +343 -0
  6. package/.claude/commands/compare.md +116 -0
  7. package/.claude/commands/conclave.md +194 -0
  8. package/.claude/commands/config.md +133 -0
  9. package/.claude/commands/council.md +194 -0
  10. package/.claude/commands/create-agent.md +452 -0
  11. package/.claude/commands/debate.md +157 -0
  12. package/.claude/commands/documentation/create-architecture-documentation.md +175 -0
  13. package/.claude/commands/dossiers.md +180 -0
  14. package/.claude/commands/evolve.md +223 -0
  15. package/.claude/commands/extract-dna.md +170 -0
  16. package/.claude/commands/extract-knowledge.md +507 -0
  17. package/.claude/commands/inbox.md +296 -0
  18. package/.claude/commands/ingest-empresa.md +191 -0
  19. package/.claude/commands/ingest.md +182 -0
  20. package/.claude/commands/jarvis-briefing.md +67 -0
  21. package/.claude/commands/jarvis-control.md +169 -0
  22. package/.claude/commands/jarvis-full.md +181 -0
  23. package/.claude/commands/jarvis.md +212 -0
  24. package/.claude/commands/ler-drive.md +212 -0
  25. package/.claude/commands/log.md +158 -0
  26. package/.claude/commands/loop.md +133 -0
  27. package/.claude/commands/loops.md +73 -0
  28. package/.claude/commands/mission-autopilot.md +538 -0
  29. package/.claude/commands/mission.md +353 -0
  30. package/.claude/commands/process-inbox.md +148 -0
  31. package/.claude/commands/process-jarvis.md +3036 -0
  32. package/.claude/commands/process-video.md +131 -0
  33. package/.claude/commands/rag-search.md +78 -0
  34. package/.claude/commands/resume.md +33 -0
  35. package/.claude/commands/save.md +38 -0
  36. package/.claude/commands/scan-inbox.md +125 -0
  37. package/.claude/commands/setup.md +99 -0
  38. package/.claude/commands/system-digest.md +243 -0
  39. package/.claude/commands/verify.md +182 -0
  40. package/.claude/commands/view-dna.md +169 -0
  41. package/.claude/hooks/agent_doctor.py +433 -0
  42. package/.claude/hooks/agent_memory_persister.py +203 -0
  43. package/.claude/hooks/auto_formatter.py +158 -0
  44. package/.claude/hooks/checkpoint_writer.py +244 -0
  45. package/.claude/hooks/claude_md_guard.py +146 -0
  46. package/.claude/hooks/creation_validator.py +357 -0
  47. package/.claude/hooks/enforce_dual_location.py +501 -0
  48. package/.claude/hooks/enforce_plan_mode.py +220 -0
  49. package/.claude/hooks/inbox_age_alert.py +367 -0
  50. package/.claude/hooks/jarvis_briefing.py +506 -0
  51. package/.claude/hooks/ledger_updater.py +301 -0
  52. package/.claude/hooks/memory_hints_injector.py +251 -0
  53. package/.claude/hooks/memory_updater.py +202 -0
  54. package/.claude/hooks/multi_agent_hook.py +464 -0
  55. package/.claude/hooks/notification_system.py +120 -0
  56. package/.claude/hooks/pattern_analyzer.py +526 -0
  57. package/.claude/hooks/pending_tracker.py +188 -0
  58. package/.claude/hooks/post_batch_cascading.py +1740 -0
  59. package/.claude/hooks/post_output_validator.py +358 -0
  60. package/.claude/hooks/post_tool_use.py +120 -0
  61. package/.claude/hooks/post_write_validator.py +200 -0
  62. package/.claude/hooks/quality_watchdog.py +394 -0
  63. package/.claude/hooks/ralph_wiggum.py +277 -0
  64. package/.claude/hooks/session-source-sync.py +218 -0
  65. package/.claude/hooks/session_autosave_v2.py +1135 -0
  66. package/.claude/hooks/session_end.py +203 -0
  67. package/.claude/hooks/session_start.py +939 -0
  68. package/.claude/hooks/skill_indexer.py +48 -0
  69. package/.claude/hooks/skill_router.py +358 -0
  70. package/.claude/hooks/stop_hook_completeness.py +178 -0
  71. package/.claude/hooks/subagent_tracker.py +163 -0
  72. package/.claude/hooks/token_checkpoint.py +584 -0
  73. package/.claude/hooks/user_prompt_submit.py +125 -0
  74. package/.claude/rules/ANTHROPIC-STANDARDS.md +384 -0
  75. package/.claude/rules/CLAUDE-LITE.md +201 -0
  76. package/.claude/rules/RULE-GROUP-1.md +320 -0
  77. package/.claude/rules/RULE-GROUP-2.md +307 -0
  78. package/.claude/rules/RULE-GROUP-3.md +248 -0
  79. package/.claude/rules/RULE-GROUP-4.md +427 -0
  80. package/.claude/rules/RULE-GROUP-5.md +388 -0
  81. package/.claude/rules/RULE-GROUP-6.md +387 -0
  82. package/.claude/rules/logging.md +53 -0
  83. package/.claude/rules/mcp-governance.md +128 -0
  84. package/.claude/rules/pipeline.md +60 -0
  85. package/.claude/rules/state-management.md +93 -0
  86. package/.claude/scripts/apply-tags.py +77 -0
  87. package/.claude/scripts/batch-extract-transcriptions.py +132 -0
  88. package/.claude/scripts/build-complete-index.py +250 -0
  89. package/.claude/scripts/build-planilha-index.py +170 -0
  90. package/.claude/scripts/complete-tag-matching.py +250 -0
  91. package/.claude/scripts/deduplicate-inbox.py +139 -0
  92. package/.claude/scripts/docx-xml-extractor.py +141 -0
  93. package/.claude/scripts/extract-docx-text.py +58 -0
  94. package/.claude/scripts/extract-single-transcription.py +74 -0
  95. package/.claude/scripts/extract_docx_from_gdrive.py +77 -0
  96. package/.claude/scripts/organized-downloader.py +246 -0
  97. package/.claude/scripts/planilha-tagger.py +187 -0
  98. package/.claude/scripts/revert-tags.py +70 -0
  99. package/.claude/scripts/source-sync.py +265 -0
  100. package/.claude/scripts/tag-inbox-files.py +276 -0
  101. package/.claude/scripts/tag-inbox-v2.py +253 -0
  102. package/.claude/scripts/test-extraction.py +35 -0
  103. package/.claude/scripts/test-full-extraction.py +74 -0
  104. package/.claude/skills/00-SKILL-CREATOR/SKILL.md +186 -0
  105. package/.claude/skills/01-SKILL-DOCS-MEGABRAIN/SKILL.md +251 -0
  106. package/.claude/skills/02-SKILL-PYTHON-MEGABRAIN/SKILL.md +323 -0
  107. package/.claude/skills/03-SKILL-AGENT-CREATION/SKILL.md +374 -0
  108. package/.claude/skills/04-SKILL-KNOWLEDGE-EXTRACTION/SKILL.md +318 -0
  109. package/.claude/skills/05-SKILL-PIPELINE-JARVIS/SKILL.md +430 -0
  110. package/.claude/skills/06-SKILL-BRAINSTORMING/SKILL.md +72 -0
  111. package/.claude/skills/07-SKILL-DISPATCHING-PARALLEL-AGENTS/SKILL.md +193 -0
  112. package/.claude/skills/08-SKILL-EXECUTING-PLANS/SKILL.md +114 -0
  113. package/.claude/skills/09-SKILL-WRITING-PLANS/SKILL.md +184 -0
  114. package/.claude/skills/10-SKILL-VERIFICATION-BEFORE-COMPLETION/SKILL.md +130 -0
  115. package/.claude/skills/11-SKILL-USING-SUPERPOWERS/SKILL.md +105 -0
  116. package/.claude/skills/DETECTION-PROTOCOL.md +217 -0
  117. package/.claude/skills/README.md +240 -0
  118. package/.claude/skills/SKILL-REGISTRY.md +284 -0
  119. package/.claude/skills/SKILL-SUGGESTIONS.md +114 -0
  120. package/.claude/skills/_TEMPLATES/SKILL-WRITER-GUIDE.md +385 -0
  121. package/.claude/skills/chronicler/SKILL.md +146 -0
  122. package/.claude/skills/chronicler/chronicler_core.py +468 -0
  123. package/.claude/skills/code-review/SKILL.md +160 -0
  124. package/.claude/skills/council/SKILL.md +210 -0
  125. package/.claude/skills/executor/SKILL.md +161 -0
  126. package/.claude/skills/fase-2-5-tagging/SKILL.md +182 -0
  127. package/.claude/skills/feature-dev/SKILL.md +154 -0
  128. package/.claude/skills/finance-agent/SKILL.md +137 -0
  129. package/.claude/skills/frontend-design/SKILL.md +165 -0
  130. package/.claude/skills/gdrive-transcription-downloader/SKILL.md +249 -0
  131. package/.claude/skills/gemini-fallback/SKILL.md +67 -0
  132. package/.claude/skills/gemini-fallback/gemini_fetch.py +0 -0
  133. package/.claude/skills/gha/SKILL.md +96 -0
  134. package/.claude/skills/gha/gha_diagnostic.py +227 -0
  135. package/.claude/skills/github-workflow/SKILL.md +190 -0
  136. package/.claude/skills/hookify/SKILL.md +134 -0
  137. package/.claude/skills/hybrid-source-reading/SKILL.md +265 -0
  138. package/.claude/skills/jarvis/SKILL.md +546 -0
  139. package/.claude/skills/jarvis-briefing/SKILL.md +340 -0
  140. package/.claude/skills/ler-planilha/SKILL.md +281 -0
  141. package/.claude/skills/plugin-dev/SKILL.md +176 -0
  142. package/.claude/skills/pr-review-toolkit/SKILL.md +178 -0
  143. package/.claude/skills/resume/SKILL.md +61 -0
  144. package/.claude/skills/save/SKILL.md +87 -0
  145. package/.claude/skills/skill-writer/SKILL.md +153 -0
  146. package/.claude/skills/skill-writer/examples.md +191 -0
  147. package/.claude/skills/skill-writer/troubleshooting.md +205 -0
  148. package/.claude/skills/smart-download-tagger/SKILL.md +148 -0
  149. package/.claude/skills/source-sync/SKILL.md +240 -0
  150. package/.claude/skills/sync-docs/SKILL.md +193 -0
  151. package/.claude/skills/sync-docs/config.json +37 -0
  152. package/.claude/skills/sync-docs/gdrive_sync.py +358 -0
  153. package/.claude/skills/sync-docs/reauth.py +71 -0
  154. package/.claude/skills/talent-agent/SKILL.md +183 -0
  155. package/.claude/skills/verify/SKILL.md +154 -0
  156. package/.claude/skills/verify/verify_runner.py +0 -0
  157. package/.claude/skills/verify-6-levels/SKILL.md +234 -0
  158. package/.claude/templates/BATCH-LOG-TEMPLATE.md +221 -0
  159. package/.claudeignore +9 -0
  160. package/.gitattributes +4 -0
  161. package/.github/layer1-allowlist.txt +80 -0
  162. package/.github/layer2-manifest.txt +40 -0
  163. package/.gitignore +219 -0
  164. package/README.md +1210 -0
  165. package/agents/_templates/INDEX.md +741 -0
  166. package/agents/_templates/TEMPLATE-AGENT-MD-ULTRA-ROBUSTO-V3.md +2399 -0
  167. package/agents/boardroom/CHECKLIST-MASTER.md +281 -0
  168. package/agents/boardroom/INTEGRATION-GUIDE.md +406 -0
  169. package/agents/boardroom/README.md +238 -0
  170. package/agents/boardroom/config/BOARDROOM-CONFIG.md +186 -0
  171. package/agents/boardroom/config/TTS-INTEGRATION.md +258 -0
  172. package/agents/boardroom/config/VOICE-PROFILES.md +624 -0
  173. package/agents/boardroom/config/voice_mapping.json +128 -0
  174. package/agents/boardroom/scripts/audio_generator.py +375 -0
  175. package/agents/boardroom/scripts/audio_generator_edge.py +353 -0
  176. package/agents/boardroom/scripts/jarvis_boardroom_hook.py +415 -0
  177. package/agents/boardroom/scripts/notebooklm_generator.py +578 -0
  178. package/agents/boardroom/templates/EPISODE-TEMPLATE.md +367 -0
  179. package/agents/boardroom/templates/scene-templates/SCENE-AGENT-DEBATE.md +252 -0
  180. package/agents/boardroom/templates/scene-templates/SCENE-COUNCIL.md +270 -0
  181. package/agents/boardroom/templates/scene-templates/SCENE-DNA-CONSULTATION.md +126 -0
  182. package/agents/boardroom/templates/scene-templates/SCENE-QUESTION.md +174 -0
  183. package/agents/boardroom/workflows/WORKFLOW-AUDIO-GENERATION.md +421 -0
  184. package/agents/constitution/BASE-CONSTITUTION.md +254 -0
  185. package/agents/council/CRITIC.md +197 -0
  186. package/agents/council/DEVILS-ADVOCATE.md +274 -0
  187. package/agents/council/SYNTHESIZER.md +293 -0
  188. package/agents/council/advogado-do-diabo/AGENT.md +489 -0
  189. package/agents/council/advogado-do-diabo/SOUL.md +100 -0
  190. package/agents/council/critico-metodologico/AGENT.md +670 -0
  191. package/agents/council/critico-metodologico/SOUL.md +107 -0
  192. package/agents/council/sintetizador/AGENT.md +558 -0
  193. package/agents/council/sintetizador/SOUL.md +94 -0
  194. package/agents/persons/_example/AGENT-EXAMPLE.md +42 -0
  195. package/agents/persons/_example/DNA-EXAMPLE.yaml +61 -0
  196. package/agents/protocols/AGENT-COGNITION-PROTOCOL.md +779 -0
  197. package/agents/protocols/AGENT-INTEGRITY-PROTOCOL.md +692 -0
  198. package/agents/protocols/BATCH-VISUAL-PROTOCOL.md +841 -0
  199. package/agents/protocols/DNA-CONFIG-TEMPLATE.yaml +181 -0
  200. package/agents/protocols/DNA-EXTRACTION-PROTOCOL.md +370 -0
  201. package/agents/protocols/EPISTEMIC-PROTOCOL.md +333 -0
  202. package/agents/protocols/LOG-STRUCTURE-PROTOCOL.md +65 -0
  203. package/agents/protocols/MEMORY-PROTOCOL.md +567 -0
  204. package/agents/protocols/NARRATIVE-SYNTHESIS-PROTOCOL.md +278 -0
  205. package/agents/protocols/PHASE-4-VERIFICATION-CHECKPOINT.md +146 -0
  206. package/agents/protocols/SOUL-TEMPLATE.md +416 -0
  207. package/agents/protocols/TEMPLATE-EVOLUTION-PROTOCOL.md +544 -0
  208. package/agents/protocols/VISUAL-DIFF-PROTOCOL.md +159 -0
  209. package/agents/sua-empresa/README.md +44 -0
  210. package/agents/sua-empresa/_example/jds/EXAMPLE-JD.md +42 -0
  211. package/agents/sua-empresa/_example/org/EXAMPLE-ORG.md +32 -0
  212. package/agents/sua-empresa/_example/roles/EXAMPLE-ROLE.md +38 -0
  213. package/bin/cli.js +2 -0
  214. package/bin/lib/ascii-art.js +234 -0
  215. package/bin/lib/installer.js +402 -0
  216. package/bin/lib/setup-wizard.js +95 -0
  217. package/bin/lib/validate-email.js +109 -0
  218. package/bin/mega-brain.js +97 -0
  219. package/bin/push.js +342 -0
  220. package/bin/templates/env.example +38 -0
  221. package/inbox/.gitkeep +0 -0
  222. package/integrations/README.md +46 -0
  223. package/integrations/mcps/MCP-REGISTRY.md +56 -0
  224. package/integrations/mcps/excalidraw/CONFIG.md +56 -0
  225. package/integrations/mcps/gdrive/CONFIG.md +38 -0
  226. package/knowledge/dna/.gitkeep +0 -0
  227. package/knowledge/dossiers/persons/.gitkeep +0 -0
  228. package/knowledge/dossiers/persons/DOSSIER-EXAMPLE.md +49 -0
  229. package/knowledge/dossiers/system/.gitkeep +0 -0
  230. package/knowledge/dossiers/themes/.gitkeep +0 -0
  231. package/knowledge/playbooks/.gitkeep +0 -0
  232. package/knowledge/playbooks/PLAYBOOK-EXAMPLE.md +50 -0
  233. package/knowledge/sources/.gitkeep +0 -0
  234. package/logs/.gitkeep +0 -0
  235. package/package.json +128 -0
  236. package/processing/canonical/.gitkeep +0 -0
  237. package/processing/chunks/.gitkeep +0 -0
  238. package/processing/insights/.gitkeep +0 -0
  239. package/processing/narratives/.gitkeep +0 -0
  240. package/reference/CONSELHO.md +337 -0
  241. package/reference/CONTEXT7_README.md +28 -0
  242. package/reference/JARVIS-LOGGING-PROTOCOL.md +380 -0
  243. package/reference/QUICK-START.md +197 -0
  244. package/reference/README-RALPH-CASCATEAMENTO.md +207 -0
  245. package/reference/TEMPLATE-MASTER.md +727 -0
  246. package/reference/prds/prd-jarvis-mega-brain-v3.md +1305 -0
  247. package/reference/templates/phase5/IMPLEMENTATION-GUIDE.md +355 -0
  248. package/reference/templates/phase5/MOGA-BRAIN-PHASE5-TEMPLATES.md +1284 -0
  249. package/reference/templates/phase5/README.md +165 -0
  250. package/reference/workflow-claude-code-boris-cherny-continuous-claude.md +2232 -0
  251. package/system/database/001_moneyclub_buyers.sql +160 -0
  252. package/system/database/002_premium_token.sql +97 -0
  253. package/system/database/apply-migration.mjs +129 -0
  254. package/system/docs/MEGA-BRAIN-DEMO-COMPLETA.md +1226 -0
  255. package/system/docs/MEGA-BRAIN-MANIFESTO-COMPLETO.md +1054 -0
  256. package/system/docs/MOGA-BRAIN-EXPLICACAO-COMPLETA.md +791 -0
  257. package/system/docs/STRATEGIC-INTEGRATION-GUIDE.md +725 -0
  258. package/system/docs/architecture/01-system-context.md +136 -0
  259. package/system/docs/architecture/02-components.md +225 -0
  260. package/system/docs/architecture/03-data-flow.md +235 -0
  261. package/system/docs/architecture/04-integrations.md +283 -0
  262. package/system/docs/architecture/README.md +71 -0
  263. package/system/docs/architecture/diagrams/component-diagram.mmd +50 -0
  264. package/system/docs/architecture/diagrams/data-flow.mmd +39 -0
  265. package/system/docs/architecture/diagrams/system-overview.mmd +68 -0
  266. package/system/protocols/AGENT-AUTHORITY.md +217 -0
  267. package/system/protocols/CONSTITUICAO-BASE.md +115 -0
  268. package/system/protocols/CONSTITUTION.md +231 -0
  269. package/system/protocols/GOVERNANCE-MAP.md +123 -0
  270. package/system/protocols/HOOK-SECURITY-THREAT-MODEL.md +152 -0
  271. package/system/protocols/ORQUESTRACAO-PROTOCOL.md +215 -0
  272. package/system/protocols/_archive/CHUNKING-PROTOCOL.md +207 -0
  273. package/system/protocols/_archive/ENTITY-RESOLUTION-PROTOCOL.md +269 -0
  274. package/system/protocols/_archive/INSIGHT-EXTRACTION-PROTOCOL.md +257 -0
  275. package/system/protocols/_archive/NARRATIVE-SYNTHESIS-PROTOCOL.md +290 -0
  276. package/system/protocols/agents/AGENT-INTERACTION.md +315 -0
  277. package/system/protocols/agents/CORTEX-PROTOCOL.md +520 -0
  278. package/system/protocols/agents/EPISTEMIC-PROTOCOL.md +465 -0
  279. package/system/protocols/agents/MEMORY-PROTOCOL.md +366 -0
  280. package/system/protocols/agents/WAR-ROOM.md +355 -0
  281. package/system/protocols/company/COMPANY-DOCUMENT-PROTOCOL.md +793 -0
  282. package/system/protocols/company/COMPANY-ENRICHMENT-PROTOCOL.md +679 -0
  283. package/system/protocols/conclave/CONCLAVE-LOG-TEMPLATE-v2.md +309 -0
  284. package/system/protocols/conclave/CONCLAVE-PROTOCOL.md +518 -0
  285. package/system/protocols/conclave/DEBATE-DYNAMICS-CONFIG.yaml +322 -0
  286. package/system/protocols/conclave/DEBATE-DYNAMICS-PROTOCOL.md +613 -0
  287. package/system/protocols/conclave/DEBATE-PROTOCOL.md +323 -0
  288. package/system/protocols/council/COUNCIL-LOG-TEMPLATE-v2.md +309 -0
  289. package/system/protocols/council/COUNCIL-PROTOCOL.md +518 -0
  290. package/system/protocols/council/DEBATE-DYNAMICS-CONFIG.yaml +322 -0
  291. package/system/protocols/council/DEBATE-DYNAMICS-PROTOCOL.md +613 -0
  292. package/system/protocols/council/DEBATE-PROTOCOL.md +323 -0
  293. package/system/protocols/dna/DNA-EXTRACTION-PROTOCOL.md +1214 -0
  294. package/system/protocols/dna/ENRICHMENT-PROTOCOL.md +408 -0
  295. package/system/protocols/dna/REASONING-MODEL-PROTOCOL.md +331 -0
  296. package/system/protocols/pipeline/DOSSIER-COMPILATION-PROTOCOL.md +790 -0
  297. package/system/protocols/pipeline/NARRATIVE-METABOLISM-PROTOCOL.md +292 -0
  298. package/system/protocols/pipeline/PIPELINE-JARVIS-v2.1.md +606 -0
  299. package/system/protocols/pipeline/PROMPT-1.1-CHUNKING.md +154 -0
  300. package/system/protocols/pipeline/PROMPT-1.2-ENTITY-RESOLUTION.md +186 -0
  301. package/system/protocols/pipeline/PROMPT-2.1-DNA-TAGS-INCREMENT.md +208 -0
  302. package/system/protocols/pipeline/PROMPT-2.1-INSIGHT-EXTRACTION.md +191 -0
  303. package/system/protocols/pipeline/PROMPT-3.1-NARRATIVE-SYNTHESIS.md +331 -0
  304. package/system/protocols/pipeline/SOURCES-COMPILATION-PROTOCOL.md +340 -0
  305. package/system/protocols/system/AUTO-LOG-PROTOCOL.md +369 -0
  306. package/system/protocols/system/CHECKPOINT-ENFORCEMENT.md +176 -0
  307. package/system/protocols/system/ENFORCEMENT.md +435 -0
  308. 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)