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,578 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ BOARDROOM WARFARE → NOTEBOOKLM INTEGRATION
4
+ Gera documentos otimizados para Audio Overview do Google NotebookLM
5
+
6
+ Este script substitui a integração com ElevenLabs TTS.
7
+ Os arquivos são salvos em /mnt/user-data/outputs/ (ou pasta configurada)
8
+ para upload manual no NotebookLM.
9
+ """
10
+
11
+ import os
12
+ import json
13
+ from pathlib import Path
14
+ from datetime import datetime
15
+ from typing import Dict, List, Optional
16
+ from dataclasses import dataclass, field
17
+
18
+ # ═══════════════════════════════════════════════════════════════
19
+ # CONFIGURAÇÃO
20
+ # ═══════════════════════════════════════════════════════════════
21
+
22
+ # Pasta padrão de outputs (Windows)
23
+ DEFAULT_OUTPUT_PATH = r"./output"
24
+
25
+ @dataclass
26
+ class NotebookLMConfig:
27
+ """Configuração da integração NotebookLM"""
28
+ output_path: str = DEFAULT_OUTPUT_PATH
29
+ subfolder: str = "NOTEBOOKLM" # Subpasta para organizar
30
+ filename_format: str = "DEBATE-{tema}-{timestamp}.md"
31
+
32
+
33
+ # ═══════════════════════════════════════════════════════════════
34
+ # ESTRUTURAS DE DADOS
35
+ # ═══════════════════════════════════════════════════════════════
36
+
37
+ @dataclass
38
+ class Participant:
39
+ """Participante do debate"""
40
+ name: str
41
+ specialty: str
42
+ position: str
43
+ arguments: List[str]
44
+ quote: str
45
+ source: str
46
+
47
+
48
+ @dataclass
49
+ class Conflict:
50
+ """Ponto de conflito"""
51
+ description: str
52
+ side_a: str
53
+ side_a_position: str
54
+ side_b: str
55
+ side_b_position: str
56
+
57
+
58
+ @dataclass
59
+ class CouncilAnalysis:
60
+ """Análise do Council"""
61
+ central_question: str
62
+ consensus_points: List[str]
63
+ methodological_questions: List[str]
64
+ risk_scenarios: List[str]
65
+ synthesis: str
66
+ scoring: Dict[str, int]
67
+ followup_question: str
68
+
69
+
70
+ @dataclass
71
+ class DebateContent:
72
+ """Conteúdo completo do debate"""
73
+ title: str
74
+ context: str
75
+ participants: List[Participant]
76
+ conflicts: List[Conflict]
77
+ council: CouncilAnalysis
78
+ sources: List[str]
79
+ final_question: str
80
+ dna_principles: List[str] = field(default_factory=list)
81
+
82
+
83
+ # ═══════════════════════════════════════════════════════════════
84
+ # GERADOR DE DOCUMENTO
85
+ # ═══════════════════════════════════════════════════════════════
86
+
87
+ def generate_notebooklm_document(debate: DebateContent) -> str:
88
+ """
89
+ Gera documento markdown otimizado para NotebookLM Audio Overview.
90
+
91
+ O formato é estruturado para que os hosts do NotebookLM:
92
+ - Entendam o contexto rapidamente
93
+ - Assumam as perspectivas dos participantes
94
+ - Debatam os pontos de conflito naturalmente
95
+ - Concluam com a síntese e pergunta
96
+ """
97
+
98
+ doc = f"""# 🎙️ DEBATE: {debate.title}
99
+
100
+ > **Contexto para geração de podcast:** Este documento estrutura um debate
101
+ > entre especialistas em negócios sobre {debate.title.lower()}. Os hosts
102
+ > devem apresentar as diferentes perspectivas, debater os conflitos, e
103
+ > concluir com a síntese do Council e a pergunta final ao ouvinte.
104
+
105
+ ---
106
+
107
+ ## 📋 O PROBLEMA
108
+
109
+ {debate.context}
110
+
111
+ **Pergunta central:** {debate.council.central_question}
112
+
113
+ """
114
+
115
+ # DNA/Constituição (se houver)
116
+ if debate.dna_principles:
117
+ doc += """---
118
+
119
+ ## 📜 PRINCÍPIOS CONSTITUCIONAIS (DNA)
120
+
121
+ Antes do debate, os princípios que guiam a análise:
122
+
123
+ """
124
+ for i, principle in enumerate(debate.dna_principles, 1):
125
+ doc += f"{i}. {principle}\n"
126
+ doc += "\n"
127
+
128
+ # Participantes
129
+ doc += """---
130
+
131
+ ## 🎭 AS PERSPECTIVAS EM CONFLITO
132
+
133
+ """
134
+
135
+ for i, p in enumerate(debate.participants, 1):
136
+ doc += f"""### {p.name}
137
+ **Especialidade:** {p.specialty}
138
+
139
+ **Posição central:** {p.position}
140
+
141
+ **Argumentos:**
142
+ """
143
+ for j, arg in enumerate(p.arguments, 1):
144
+ doc += f"- {arg}\n"
145
+
146
+ doc += f"""
147
+ **Frase característica:** *"{p.quote}"*
148
+
149
+ **Fonte:** {p.source}
150
+
151
+ ---
152
+
153
+ """
154
+
155
+ # Conflitos
156
+ doc += """## ⚔️ OS PONTOS DE TENSÃO
157
+
158
+ """
159
+ for i, c in enumerate(debate.conflicts, 1):
160
+ doc += f"""### Conflito {i}: {c.description}
161
+
162
+ | {c.side_a} | vs | {c.side_b} |
163
+ |------------|:--:|------------|
164
+ | {c.side_a_position} | ⚡ | {c.side_b_position} |
165
+
166
+ """
167
+
168
+ # Consensos
169
+ doc += """---
170
+
171
+ ## 🤝 ONDE TODOS CONCORDAM
172
+
173
+ """
174
+ for point in debate.council.consensus_points:
175
+ doc += f"- {point}\n"
176
+
177
+ # Council
178
+ doc += f"""
179
+
180
+ ---
181
+
182
+ ## ⚖️ ANÁLISE DO COUNCIL
183
+
184
+ ### O Crítico Metodológico questiona:
185
+ """
186
+ for q in debate.council.methodological_questions:
187
+ doc += f'- *"{q}"*\n'
188
+
189
+ doc += """
190
+ ### O Advogado do Diabo alerta:
191
+ """
192
+ for r in debate.council.risk_scenarios:
193
+ doc += f'- *"{r}"*\n'
194
+
195
+ doc += f"""
196
+ ### Síntese Final:
197
+
198
+ > {debate.council.synthesis}
199
+
200
+ **Avaliação:**
201
+ """
202
+ total = 0
203
+ for metric, score in debate.council.scoring.items():
204
+ doc += f"- {metric}: **{score}/10**\n"
205
+ total += score
206
+
207
+ avg = total / len(debate.council.scoring)
208
+ doc += f"\n**Score Final: {avg:.1f}/10**\n"
209
+
210
+ # Fontes
211
+ doc += """
212
+ ---
213
+
214
+ ## 📚 FONTES CITADAS
215
+
216
+ """
217
+ for source in debate.sources:
218
+ doc += f"- {source}\n"
219
+
220
+ # Pergunta final
221
+ doc += f"""
222
+ ---
223
+
224
+ ## ❓ A PERGUNTA QUE FICA
225
+
226
+ > **{debate.final_question}**
227
+
228
+ {debate.council.followup_question}
229
+
230
+ ---
231
+
232
+ ## 🎧 NOTAS PARA O PODCAST
233
+
234
+ **Estrutura sugerida:**
235
+ 1. Abrir contextualizando o problema (2 min)
236
+ 2. Apresentar as perspectivas conflitantes (5 min)
237
+ 3. Debater os pontos de tensão (8 min)
238
+ 4. Trazer a análise do Council (3 min)
239
+ 5. Fechar com a pergunta ao ouvinte (2 min)
240
+
241
+ **Tom:** Profissional mas acessível. Momentos de tensão são bem-vindos.
242
+
243
+ **Duração ideal:** 15-25 minutos
244
+ """
245
+
246
+ return doc
247
+
248
+
249
+ # ═══════════════════════════════════════════════════════════════
250
+ # SALVAMENTO
251
+ # ═══════════════════════════════════════════════════════════════
252
+
253
+ def save_document(content: str, tema: str, config: NotebookLMConfig = None) -> Path:
254
+ """
255
+ Salva o documento na pasta de outputs.
256
+
257
+ Returns:
258
+ Path do arquivo salvo
259
+ """
260
+ if config is None:
261
+ config = NotebookLMConfig()
262
+
263
+ # Criar pasta se necessário
264
+ output_dir = Path(config.output_path) / config.subfolder
265
+ output_dir.mkdir(parents=True, exist_ok=True)
266
+
267
+ # Nome do arquivo
268
+ timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
269
+ tema_slug = "".join(c if c.isalnum() or c in "-_ " else "" for c in tema)
270
+ tema_slug = tema_slug.replace(" ", "-").lower()[:40]
271
+ filename = f"DEBATE-{tema_slug}-{timestamp}.md"
272
+
273
+ # Salvar
274
+ filepath = output_dir / filename
275
+ with open(filepath, 'w', encoding='utf-8') as f:
276
+ f.write(content)
277
+
278
+ return filepath
279
+
280
+
281
+ # ═══════════════════════════════════════════════════════════════
282
+ # INTERFACE PRINCIPAL
283
+ # ═══════════════════════════════════════════════════════════════
284
+
285
+ def create_notebooklm_debate(
286
+ tema: str,
287
+ contexto: str,
288
+ participantes: List[Dict],
289
+ conflitos: List[Dict],
290
+ council_data: Dict,
291
+ fontes: List[str],
292
+ pergunta_final: str,
293
+ principios_dna: List[str] = None
294
+ ) -> Path:
295
+ """
296
+ Função principal para criar debate para NotebookLM.
297
+
298
+ Args:
299
+ tema: Título do debate
300
+ contexto: Descrição do problema/situação
301
+ participantes: Lista de dicts com dados dos participantes
302
+ conflitos: Lista de dicts com pontos de conflito
303
+ council_data: Dict com análise do council
304
+ fontes: Lista de fontes citadas
305
+ pergunta_final: Pergunta provocativa final
306
+ principios_dna: Lista de princípios do DNA (opcional)
307
+
308
+ Returns:
309
+ Path do arquivo salvo
310
+ """
311
+
312
+ # Construir objetos
313
+ participants = [
314
+ Participant(
315
+ name=p["name"],
316
+ specialty=p.get("specialty", ""),
317
+ position=p.get("position", ""),
318
+ arguments=p.get("arguments", []),
319
+ quote=p.get("quote", ""),
320
+ source=p.get("source", "")
321
+ )
322
+ for p in participantes
323
+ ]
324
+
325
+ conflicts = [
326
+ Conflict(
327
+ description=c["description"],
328
+ side_a=c.get("side_a", ""),
329
+ side_a_position=c.get("side_a_position", ""),
330
+ side_b=c.get("side_b", ""),
331
+ side_b_position=c.get("side_b_position", "")
332
+ )
333
+ for c in conflitos
334
+ ]
335
+
336
+ council = CouncilAnalysis(
337
+ central_question=council_data.get("central_question", f"Qual a melhor abordagem para {tema}?"),
338
+ consensus_points=council_data.get("consensus", []),
339
+ methodological_questions=council_data.get("questions", []),
340
+ risk_scenarios=council_data.get("risks", []),
341
+ synthesis=council_data.get("synthesis", ""),
342
+ scoring=council_data.get("scoring", {}),
343
+ followup_question=council_data.get("followup", "")
344
+ )
345
+
346
+ debate = DebateContent(
347
+ title=tema,
348
+ context=contexto,
349
+ participants=participants,
350
+ conflicts=conflicts,
351
+ council=council,
352
+ sources=fontes,
353
+ final_question=pergunta_final,
354
+ dna_principles=principios_dna or []
355
+ )
356
+
357
+ # Gerar documento
358
+ document = generate_notebooklm_document(debate)
359
+
360
+ # Salvar
361
+ filepath = save_document(document, tema)
362
+
363
+ return filepath
364
+
365
+
366
+ def print_success_message(filepath: Path):
367
+ """Imprime mensagem de sucesso com instruções."""
368
+
369
+ print("\n" + "═" * 65)
370
+ print("✅ DOCUMENTO PRONTO PARA NOTEBOOKLM!")
371
+ print("═" * 65)
372
+ print(f"\n📁 Arquivo salvo em:\n {filepath}")
373
+ print("\n" + "─" * 65)
374
+ print("📋 PRÓXIMOS PASSOS:")
375
+ print("─" * 65)
376
+ print(" 1. Abra: notebooklm.google.com")
377
+ print(" 2. Crie um novo Notebook")
378
+ print(" 3. Clique em 'Add source' → Upload")
379
+ print(" 4. Selecione o arquivo acima")
380
+ print(" 5. Clique em 'Audio Overview' (ícone de fone)")
381
+ print(" 6. Aguarde ~2-5 minutos")
382
+ print("\n🎧 O Google gerará um podcast de alta qualidade!")
383
+ print(" - Vozes naturais com emoção")
384
+ print(" - Risadas e expressões espontâneas")
385
+ print(" - Pronúncia correta (B2B → 'B two B')")
386
+ print(" - Diálogo fluido e envolvente")
387
+ print("═" * 65 + "\n")
388
+
389
+
390
+ # ═══════════════════════════════════════════════════════════════
391
+ # HOOK PARA PIPELINE JARVIS
392
+ # ═══════════════════════════════════════════════════════════════
393
+
394
+ def boardroom_notebooklm_hook(pipeline_outputs: List[Dict]) -> Optional[Path]:
395
+ """
396
+ Hook chamado ao final do Pipeline Jarvis.
397
+ Substitui o hook anterior que usava ElevenLabs.
398
+
399
+ Args:
400
+ pipeline_outputs: Lista de outputs do pipeline
401
+
402
+ Returns:
403
+ Path do arquivo gerado ou None
404
+ """
405
+
406
+ if not pipeline_outputs:
407
+ return None
408
+
409
+ print("\n" + "═" * 65)
410
+ print("📋 PROCESSAMENTO CONCLUÍDO")
411
+ print("═" * 65)
412
+ print("\nOutputs disponíveis:")
413
+ for i, output in enumerate(pipeline_outputs, 1):
414
+ print(f" {i}. [{output.get('type', '?')}] {output.get('title', 'Sem título')}")
415
+
416
+ print("\n" + "─" * 65)
417
+ print("🎙️ BOARDROOM WARFARE → NOTEBOOKLM")
418
+ print("─" * 65)
419
+ print("\nDeseja gerar documento de debate para podcast?")
420
+ print("\n [1] SIM - Criar documento para NotebookLM")
421
+ print(" [2] NÃO - Finalizar")
422
+
423
+ choice = input("\nEscolha: ").strip()
424
+
425
+ if choice != "1":
426
+ print("\n✅ Finalizado sem gerar debate.")
427
+ return None
428
+
429
+ # Seleção de output
430
+ print("\nQual output usar como base do debate?")
431
+ try:
432
+ selection = int(input("Número: ").strip()) - 1
433
+ selected = pipeline_outputs[selection]
434
+ except (ValueError, IndexError):
435
+ print("❌ Seleção inválida.")
436
+ return None
437
+
438
+ # Aqui entraria a lógica de detecção de participantes
439
+ # e montagem do debate baseado no output selecionado
440
+ # Por enquanto, retorna placeholder
441
+
442
+ print("\n⚙️ Gerando documento...")
443
+
444
+ # TODO: Integrar com DNA, detectar participantes, etc.
445
+ # Por enquanto, usar dados de exemplo
446
+
447
+ return None # Será implementado com integração completa
448
+
449
+
450
+ # ═══════════════════════════════════════════════════════════════
451
+ # TESTE / EXEMPLO
452
+ # ═══════════════════════════════════════════════════════════════
453
+
454
+ if __name__ == "__main__":
455
+ """Exemplo de uso com debate sobre comissão de vendas"""
456
+
457
+ filepath = create_notebooklm_debate(
458
+ tema="Estrutura de Comissão para Time de Vendas B2B",
459
+
460
+ contexto="""
461
+ Uma empresa de SaaS B2B com faturamento de 8 dígitos está enfrentando
462
+ alta rotatividade no time de vendas. Os melhores closers estão saindo
463
+ para concorrentes que oferecem comissões mais agressivas.
464
+
465
+ O CEO precisa decidir: ajustar a estrutura de compensação ou manter
466
+ o modelo atual e focar em outros fatores de retenção?
467
+
468
+ O time atual tem 12 closers, com ticket médio de R$ 45.000 e ciclo
469
+ de vendas de 45 dias. A comissão atual é 8% flat.
470
+ """,
471
+
472
+ participantes=[
473
+ {
474
+ "name": "Alex Hormozi",
475
+ "specialty": "Escala e aquisição de empresas",
476
+ "position": "Comissão agressiva de 15% sem teto para atrair e reter os melhores",
477
+ "arguments": [
478
+ "Os melhores vendedores querem upside ilimitado - teto é insulto",
479
+ "Se você preocupa com quanto vai pagar, está pensando pequeno",
480
+ "Vendedor caro que performa vale 10x o que custa",
481
+ "No his gym business, pagar mais atraiu os melhores do mercado"
482
+ ],
483
+ "quote": "Isso é coisa de pobre. Se o cara te faz ganhar 1 milhão, qual o problema de pagar 150 mil pra ele?",
484
+ "source": "Offers Framework + Hormozi Podcast"
485
+ },
486
+ {
487
+ "name": "Cole Gordon",
488
+ "specialty": "Sistemas de vendas high-ticket",
489
+ "position": "Modelo híbrido com base sólida + variável + acelerador acima da meta",
490
+ "arguments": [
491
+ "Comissão sem teto cria imprevisibilidade financeira perigosa",
492
+ "Vendedor bom em sistema ruim perde para vendedor médio em sistema bom",
493
+ "Base forte dá segurança, variável motiva, acelerador explode resultados",
494
+ "Em 300+ closers treinados, o híbrido teve 40% menos turnover"
495
+ ],
496
+ "quote": "Qual é o processo? Se não é sistemático, não escala. Ponto.",
497
+ "source": "Cole Gordon + Remote Closing Methods"
498
+ },
499
+ {
500
+ "specialty": "Gestão empresarial no contexto brasileiro",
501
+ "position": "Qualquer modelo precisa considerar CLT e a realidade operacional local",
502
+ "arguments": [
503
+ "Mudança de comissão sem acordo formal gera passivo trabalhista",
504
+ "O que funciona nos EUA não replica automaticamente no Brasil",
505
+ "Foco na execução - quem vai fazer isso funcionar todo dia?",
506
+ "Em 500 empresas analisadas, 70% dos problemas são de gestão, não de comissão"
507
+ ],
508
+ "quote": "Isso é papo de gringo. E a CLT? Quem vai assinar o distrato? Quem treina os novos?",
509
+ }
510
+ ],
511
+
512
+ conflitos=[
513
+ {
514
+ "description": "Agressividade vs. Previsibilidade Financeira",
515
+ "side_a": "Hormozi",
516
+ "side_a_position": "Pagar muito para os melhores é investimento com ROI garantido",
517
+ "side_b": "Cole Gordon + CFO",
518
+ "side_b_position": "Precisa ser previsível para escalar sem quebrar o caixa"
519
+ },
520
+ {
521
+ "description": "Modelo Americano vs. Realidade Brasileira",
522
+ "side_a": "Hormozi + Cole",
523
+ "side_a_position": "Os princípios são universais, só adaptar a execução",
524
+ "side_b_position": "CLT, cultura e mercado brasileiro exigem modelo próprio"
525
+ },
526
+ {
527
+ "description": "Otimizar para Excepcional vs. Otimizar para Sistema",
528
+ "side_a": "Hormozi",
529
+ "side_a_position": "Foque nos 20% excepcionais, o resto que vá embora",
530
+ "side_b": "Cole Gordon",
531
+ "side_b_position": "Sistema bom eleva a média e retém os bons por mais tempo"
532
+ }
533
+ ],
534
+
535
+ council_data={
536
+ "central_question": "Qual estrutura de comissão retém os melhores closers sem comprometer a saúde financeira da empresa?",
537
+ "consensus": [
538
+ "Vendedores excepcionais merecem remuneração excepcional",
539
+ "O modelo atual de 8% flat está abaixo do mercado",
540
+ "Qualquer mudança precisa de validação jurídica antes",
541
+ "Problema pode não ser só comissão - precisa investigar"
542
+ ],
543
+ "questions": [
544
+ "Estamos assumindo que o problema é comissão. Qual a evidência concreta?",
545
+ "Os que saíram foram por dinheiro ou por gestão/ambiente?",
546
+ "Se aumentarmos comissão, não vamos reter os medíocres também?"
547
+ ],
548
+ "risks": [
549
+ "Aumentar comissão pode reter os vendedores errados - os bons saem por outros motivos",
550
+ "Mudança abrupta sem acordo pode gerar 12 processos trabalhistas",
551
+ "Modelo muito agressivo pode atrair mercenários sem fit cultural"
552
+ ],
553
+ "synthesis": "Implementar em duas fases: Fase 1 (90 dias) - avaliar o time atual com critérios claros, desligar bottom 20% com acordo, e recrutar 3 novos já no modelo novo. Fase 2 - implementar estrutura híbrida: R$ 5.000 base, 10% comissão, 15% acelerador acima de 120% da meta. Migrar os atuais com aceite formal documentado.",
554
+ "scoring": {
555
+ "Viabilidade": 8,
556
+ "Impacto em Retenção": 8,
557
+ "Risco Jurídico": 7,
558
+ "Alinhamento Estratégico": 9
559
+ },
560
+ "followup": "E se você limpasse o time essa semana, teria coragem de dobrar a comissão dos que ficassem?"
561
+ },
562
+
563
+ fontes=[
564
+ "**Offers Framework** (Alex Hormozi) - Conceito de oferta irresistível e valor percebido",
565
+ "**Cole Gordon** (Cole Gordon) - Estrutura híbrida de compensação para high-ticket",
566
+ "**DNA Cognitivo** - Princípio de alinhamento de incentivos individuais e coletivos"
567
+ ],
568
+
569
+ pergunta_final="Quantos vendedores medíocres você está pagando para ficarem confortáveis sendo medíocres?",
570
+
571
+ principios_dna=[
572
+ "Compensação deve alinhar incentivos individuais com resultados coletivos",
573
+ "Vendedor bem pago que não performa é custo; vendedor mal pago que performa é risco",
574
+ "A proporção fixo/variável deve refletir o controle sobre o resultado"
575
+ ]
576
+ )
577
+
578
+ print_success_message(filepath)