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,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)
|