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,468 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ CHRONICLER CORE - Sistema de Logs Narrativos para Mega Brain
4
+ =============================================================
5
+
6
+ Módulo principal que fornece funções para geração de:
7
+ - Briefings visuais de sessão
8
+ - Handoffs de continuidade
9
+ - Evolution logs append-only
10
+
11
+ Integra com session_start.py e session_end.py
12
+ """
13
+
14
+ import json
15
+ import os
16
+ from datetime import datetime
17
+ from pathlib import Path
18
+ from typing import Dict, List, Optional, Any
19
+
20
+ # ============================================================================
21
+ # CONFIGURAÇÃO
22
+ # ============================================================================
23
+
24
+ CHRONICLE_DIR = "logs/CHRONICLE"
25
+ SESSION_HISTORY_DIR = f"{CHRONICLE_DIR}/session-history"
26
+
27
+ # ============================================================================
28
+ # UTILITÁRIOS
29
+ # ============================================================================
30
+
31
+ def get_project_dir() -> str:
32
+ """Obtém o diretório do projeto."""
33
+ return os.environ.get('CLAUDE_PROJECT_DIR', os.getcwd())
34
+
35
+
36
+ def ensure_chronicle_dirs():
37
+ """Garante que diretórios do Chronicle existem."""
38
+ project_dir = get_project_dir()
39
+ Path(project_dir, CHRONICLE_DIR).mkdir(parents=True, exist_ok=True)
40
+ Path(project_dir, SESSION_HISTORY_DIR).mkdir(parents=True, exist_ok=True)
41
+
42
+
43
+ def read_json_safe(filepath: Path) -> Optional[Dict]:
44
+ """Lê arquivo JSON com tratamento de erros."""
45
+ try:
46
+ if filepath.exists():
47
+ with open(filepath, 'r', encoding='utf-8') as f:
48
+ return json.load(f)
49
+ except (json.JSONDecodeError, IOError):
50
+ pass
51
+ return None
52
+
53
+
54
+ def read_file_safe(filepath: Path) -> str:
55
+ """Lê arquivo de texto com tratamento de erros."""
56
+ try:
57
+ if filepath.exists():
58
+ return filepath.read_text(encoding='utf-8')
59
+ except IOError:
60
+ pass
61
+ return ""
62
+
63
+
64
+ def count_files_in_dir(dirpath: Path, pattern: str = "*") -> int:
65
+ """Conta arquivos em um diretório."""
66
+ try:
67
+ if dirpath.exists():
68
+ return len(list(dirpath.glob(pattern)))
69
+ except Exception:
70
+ pass
71
+ return 0
72
+
73
+
74
+ # ============================================================================
75
+ # COLETA DE DADOS
76
+ # ============================================================================
77
+
78
+ def collect_system_state() -> Dict[str, Any]:
79
+ """Coleta estado atual do sistema para o briefing."""
80
+ project_dir = Path(get_project_dir())
81
+
82
+ state = {
83
+ 'session_number': get_next_session_number(),
84
+ 'date': datetime.now().strftime('%Y-%m-%d %H:%M'),
85
+ 'loops': [],
86
+ 'metrics': {
87
+ 'knowledge_base': 0,
88
+ 'agents': 0,
89
+ 'phase': 'N/A',
90
+ 'inbox': 0
91
+ },
92
+ 'recommended_action': 'Aguardando análise...'
93
+ }
94
+
95
+ # 1. Ler STATE.json
96
+ state_path = project_dir / '.claude' / 'jarvis' / 'STATE.json'
97
+ jarvis_state = read_json_safe(state_path)
98
+ if jarvis_state:
99
+ current = jarvis_state.get('current_state', {})
100
+ state['metrics']['phase'] = f"{current.get('phase', '?')}"
101
+
102
+ # 2. Ler MISSION-STATE.json
103
+ mission_path = project_dir / '.claude' / 'mission-control' / 'MISSION-STATE.json'
104
+ mission_state = read_json_safe(mission_path)
105
+ if mission_state:
106
+ current = mission_state.get('current_state', {})
107
+ state['metrics']['phase'] = f"{current.get('phase', '?')} - {current.get('phase_name', 'IDLE')}"
108
+
109
+ # 3. Ler PENDING.md para loops abertos
110
+ pending_path = project_dir / '.claude' / 'jarvis' / 'PENDING.md'
111
+ pending_content = read_file_safe(pending_path)
112
+ state['loops'] = extract_loops_from_pending(pending_content)
113
+
114
+ # 4. Contar arquivos
115
+ state['metrics']['knowledge_base'] = count_files_in_dir(
116
+ project_dir / 'knowledge', '**/*.md'
117
+ )
118
+ state['metrics']['agents'] = count_files_in_dir(
119
+ project_dir / 'agents', '**/AGENT.md'
120
+ )
121
+ state['metrics']['inbox'] = count_files_in_dir(
122
+ project_dir / 'inbox', '*'
123
+ )
124
+
125
+ # 5. Determinar ação recomendada
126
+ state['recommended_action'] = determine_recommended_action(state)
127
+
128
+ return state
129
+
130
+
131
+ def extract_loops_from_pending(content: str) -> List[Dict[str, str]]:
132
+ """Extrai loops abertos do PENDING.md."""
133
+ loops = []
134
+
135
+ if not content:
136
+ return loops
137
+
138
+ # Parse por seções
139
+ sections = {
140
+ '## Alta Prioridade': 'critical',
141
+ '## 🔴 Alta Prioridade': 'critical',
142
+ '## Media Prioridade': 'pending',
143
+ '## 🟡 Média Prioridade': 'pending',
144
+ '## Baixa Prioridade': 'continuable',
145
+ '## 🟢 Baixa Prioridade': 'continuable'
146
+ }
147
+
148
+ for marker, priority in sections.items():
149
+ if marker in content:
150
+ section = content.split(marker)[1].split('##')[0]
151
+ import re
152
+ items = re.findall(r'-\s*\[.\]\s*(.+)', section)
153
+ for item in items[:2]: # Max 2 por categoria
154
+ loops.append({
155
+ 'priority': priority,
156
+ 'description': item.strip()[:60]
157
+ })
158
+
159
+ return loops
160
+
161
+
162
+ def determine_recommended_action(state: Dict) -> str:
163
+ """Determina ação recomendada baseado no estado."""
164
+ # Prioridade: loops críticos > inbox cheio > continuar trabalho
165
+
166
+ critical_loops = [l for l in state['loops'] if l['priority'] == 'critical']
167
+ if critical_loops:
168
+ return f"RESOLVER: {critical_loops[0]['description']}"
169
+
170
+ inbox_count = state['metrics'].get('inbox', 0)
171
+ if inbox_count > 10:
172
+ return f"ORGANIZAR: {inbox_count} itens no INBOX aguardando"
173
+
174
+ pending_loops = [l for l in state['loops'] if l['priority'] == 'pending']
175
+ if pending_loops:
176
+ return f"CONTINUAR: {pending_loops[0]['description']}"
177
+
178
+ return "Continuar trabalho na fase atual"
179
+
180
+
181
+ def get_next_session_number() -> int:
182
+ """Obtém próximo número de sessão."""
183
+ project_dir = Path(get_project_dir())
184
+ history_dir = project_dir / CHRONICLE_DIR / 'session-history'
185
+
186
+ if history_dir.exists():
187
+ sessions = list(history_dir.glob('HANDOFF-*.md'))
188
+ return len(sessions) + 1
189
+ return 1
190
+
191
+
192
+ # ============================================================================
193
+ # GERAÇÃO DE BRIEFING
194
+ # ============================================================================
195
+
196
+ def generate_chronicle_briefing() -> str:
197
+ """Gera briefing visual completo."""
198
+ state = collect_system_state()
199
+
200
+ # Header ASCII
201
+ header = """
202
+ ╔═══════════════════════════════════════════════════════════════════════════════╗
203
+ ║ ██████╗██╗ ██╗██████╗ ██████╗ ███╗ ██╗██╗ ██████╗██╗ ███████╗ ║
204
+ ║ ██╔════╝██║ ██║██╔══██╗██╔═══██╗████╗ ██║██║██╔════╝██║ ██╔════╝ ║
205
+ ║ ██║ ███████║██████╔╝██║ ██║██╔██╗ ██║██║██║ ██║ █████╗ ║
206
+ ║ ██║ ██╔══██║██╔══██╗██║ ██║██║╚██╗██║██║██║ ██║ ██╔══╝ ║
207
+ ║ ╚██████╗██║ ██║██║ ██║╚██████╔╝██║ ╚████║██║╚██████╗███████╗███████╗ ║
208
+ ║ ╚═════╝╚═╝ ╚═╝╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═══╝╚═╝ ╚═════╝╚══════╝╚══════╝ ║
209
+ ╚═══════════════════════════════════════════════════════════════════════════════╝
210
+ """
211
+
212
+ # Sessão info
213
+ session_info = f"\n📅 Sessão #{state['session_number']} | {state['date']}\n"
214
+
215
+ # Loops abertos
216
+ loops_section = "\n┌─ LOOPS ABERTOS ─────────────────────────────────────────────────────────────┐\n"
217
+
218
+ priority_icons = {
219
+ 'critical': '🔴',
220
+ 'pending': '🟡',
221
+ 'continuable': '🟢'
222
+ }
223
+
224
+ if state['loops']:
225
+ for loop in state['loops'][:5]:
226
+ icon = priority_icons.get(loop['priority'], '⚪')
227
+ desc = loop['description'][:65].ljust(65)
228
+ loops_section += f"│ {icon} {desc}│\n"
229
+ else:
230
+ loops_section += "│ ✅ Nenhum loop aberto │\n"
231
+
232
+ loops_section += "└─────────────────────────────────────────────────────────────────────────────┘\n"
233
+
234
+ # Estado do sistema
235
+ m = state['metrics']
236
+ system_section = f"""
237
+ ┌─ ESTADO DO SISTEMA ─────────────────────────────────────────────────────────┐
238
+ │ Knowledge Base │ Agents │ Pipeline │ Inbox │
239
+ │ {str(m['knowledge_base']).ljust(10)} sources │ {str(m['agents']).ljust(8)} ativos │ Fase {str(m['phase']).ljust(8)} │ {str(m['inbox']).ljust(6)} items │
240
+ └─────────────────────────────────────────────────────────────────────────────┘
241
+ """
242
+
243
+ # Ação recomendada
244
+ action = state['recommended_action'][:70].ljust(70)
245
+ action_section = f"""
246
+ ┌─ AÇÃO RECOMENDADA ──────────────────────────────────────────────────────────┐
247
+ │ {action}│
248
+ └─────────────────────────────────────────────────────────────────────────────┘
249
+ """
250
+
251
+ # Footer
252
+ footer = "\n ─── Chronicler • Mega Brain ───\n"
253
+
254
+ return header + session_info + loops_section + system_section + action_section + footer
255
+
256
+
257
+ # ============================================================================
258
+ # GERAÇÃO DE HANDOFF
259
+ # ============================================================================
260
+
261
+ def generate_chronicle_handoff(
262
+ tasks_completed: List[str] = None,
263
+ tasks_pending: List[str] = None,
264
+ decisions: List[Dict[str, str]] = None,
265
+ files_modified: List[Dict[str, str]] = None,
266
+ next_steps: List[str] = None
267
+ ) -> str:
268
+ """Gera handoff de continuidade."""
269
+
270
+ state = collect_system_state()
271
+
272
+ content = f"""# HANDOFF - Sessão #{state['session_number']}
273
+
274
+ 📅 {state['date']}
275
+
276
+ ---
277
+
278
+ ## ✅ TAREFAS COMPLETAS
279
+ """
280
+
281
+ if tasks_completed:
282
+ for task in tasks_completed:
283
+ content += f"- [x] {task}\n"
284
+ else:
285
+ content += "- [x] Sessão iniciada e contexto carregado\n"
286
+
287
+ content += """
288
+ ## ⏳ PENDENTE
289
+
290
+ **Alta Prioridade:**
291
+ """
292
+
293
+ high_priority = [l for l in state['loops'] if l['priority'] == 'critical']
294
+ if high_priority:
295
+ for item in high_priority[:3]:
296
+ content += f"- [ ] {item['description']}\n"
297
+ else:
298
+ content += "- Nenhuma pendência crítica\n"
299
+
300
+ content += "\n**Normal:**\n"
301
+
302
+ normal_priority = [l for l in state['loops'] if l['priority'] in ['pending', 'continuable']]
303
+ if normal_priority:
304
+ for item in normal_priority[:3]:
305
+ content += f"- [ ] {item['description']}\n"
306
+ elif tasks_pending:
307
+ for task in tasks_pending[:3]:
308
+ content += f"- [ ] {task}\n"
309
+ else:
310
+ content += "- Nenhuma pendência registrada\n"
311
+
312
+ content += "\n## 🎯 DECISÕES TOMADAS\n\n"
313
+ content += "| Decisão | Razão |\n|---------|-------|\n"
314
+
315
+ if decisions:
316
+ for d in decisions:
317
+ content += f"| {d.get('decision', 'N/A')} | {d.get('reason', 'N/A')} |\n"
318
+ else:
319
+ content += "| Nenhuma decisão significativa | Sessão de continuidade |\n"
320
+
321
+ content += "\n## 📁 ARQUIVOS MODIFICADOS\n\n"
322
+ content += "| Arquivo | Mudança |\n|---------|--------|\n"
323
+
324
+ if files_modified:
325
+ for f in files_modified:
326
+ content += f"| {f.get('file', 'N/A')} | {f.get('change', 'N/A')} |\n"
327
+ else:
328
+ content += "| Nenhum arquivo modificado | Sessão consultiva |\n"
329
+
330
+ content += "\n## ➡️ PRÓXIMOS PASSOS SUGERIDOS\n\n"
331
+
332
+ if next_steps:
333
+ for i, step in enumerate(next_steps[:5], 1):
334
+ content += f"{i}. {step}\n"
335
+ else:
336
+ content += f"1. {state['recommended_action']}\n"
337
+ content += "2. Verificar pendências no PENDING.md\n"
338
+ content += "3. Continuar trabalho na fase atual\n"
339
+
340
+ content += "\n---\n\n"
341
+ content += " ─── Chronicler • Mega Brain ───\n"
342
+
343
+ return content
344
+
345
+
346
+ # ============================================================================
347
+ # EVOLUTION LOG
348
+ # ============================================================================
349
+
350
+ def append_to_evolution_log(entry_type: str, description: str):
351
+ """Adiciona entrada ao Evolution Log (append-only)."""
352
+ ensure_chronicle_dirs()
353
+ project_dir = Path(get_project_dir())
354
+ log_path = project_dir / CHRONICLE_DIR / 'EVOLUTION-LOG.md'
355
+
356
+ timestamp = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
357
+
358
+ # Criar arquivo se não existe
359
+ if not log_path.exists():
360
+ header = """# EVOLUTION LOG - Mega Brain
361
+
362
+ > Histórico permanente do sistema. Append-only.
363
+
364
+ ---
365
+
366
+ """
367
+ log_path.write_text(header, encoding='utf-8')
368
+
369
+ # Append nova entrada
370
+ entry = f"\n## [{timestamp}] {entry_type.upper()}\n\n{description}\n\n---\n"
371
+
372
+ with open(log_path, 'a', encoding='utf-8') as f:
373
+ f.write(entry)
374
+
375
+
376
+ # ============================================================================
377
+ # SAVE/ARCHIVE
378
+ # ============================================================================
379
+
380
+ def save_chronicle_briefing():
381
+ """Salva briefing em SESSION-STATE.md."""
382
+ ensure_chronicle_dirs()
383
+ project_dir = Path(get_project_dir())
384
+
385
+ briefing = generate_chronicle_briefing()
386
+ state_path = project_dir / CHRONICLE_DIR / 'SESSION-STATE.md'
387
+ state_path.write_text(briefing, encoding='utf-8')
388
+
389
+ return str(state_path)
390
+
391
+
392
+ def save_chronicle_handoff(**kwargs):
393
+ """Salva handoff e arquiva o anterior."""
394
+ ensure_chronicle_dirs()
395
+ project_dir = Path(get_project_dir())
396
+
397
+ handoff_path = project_dir / CHRONICLE_DIR / 'HANDOFF.md'
398
+ history_dir = project_dir / SESSION_HISTORY_DIR
399
+
400
+ # Arquivar handoff anterior se existe
401
+ if handoff_path.exists():
402
+ timestamp = datetime.now().strftime('%Y%m%d-%H%M%S')
403
+ archive_name = f"HANDOFF-{timestamp}.md"
404
+ archive_path = history_dir / archive_name
405
+
406
+ import shutil
407
+ shutil.move(str(handoff_path), str(archive_path))
408
+
409
+ # Gerar e salvar novo handoff
410
+ handoff = generate_chronicle_handoff(**kwargs)
411
+ handoff_path.write_text(handoff, encoding='utf-8')
412
+
413
+ # Registrar no Evolution Log
414
+ append_to_evolution_log('SESSION', f'Handoff criado. Sessão encerrada.')
415
+
416
+ return str(handoff_path)
417
+
418
+
419
+ # ============================================================================
420
+ # INTERFACE PARA HOOKS
421
+ # ============================================================================
422
+
423
+ def on_session_start() -> str:
424
+ """Chamado pelo session_start.py."""
425
+ ensure_chronicle_dirs()
426
+
427
+ # Gerar e salvar briefing
428
+ save_chronicle_briefing()
429
+
430
+ # Registrar no Evolution Log
431
+ append_to_evolution_log('SESSION', 'Nova sessão iniciada.')
432
+
433
+ # Retornar briefing para exibição
434
+ return generate_chronicle_briefing()
435
+
436
+
437
+ def on_session_end(**kwargs) -> str:
438
+ """Chamado pelo session_end.py."""
439
+ ensure_chronicle_dirs()
440
+
441
+ # Gerar e salvar handoff
442
+ handoff_path = save_chronicle_handoff(**kwargs)
443
+
444
+ return handoff_path
445
+
446
+
447
+ # ============================================================================
448
+ # MAIN (para testes)
449
+ # ============================================================================
450
+
451
+ if __name__ == '__main__':
452
+ import sys
453
+
454
+ if len(sys.argv) > 1:
455
+ command = sys.argv[1]
456
+
457
+ if command == 'briefing':
458
+ print(generate_chronicle_briefing())
459
+ elif command == 'handoff':
460
+ print(generate_chronicle_handoff())
461
+ elif command == 'save-briefing':
462
+ path = save_chronicle_briefing()
463
+ print(f"Briefing salvo em: {path}")
464
+ elif command == 'save-handoff':
465
+ path = save_chronicle_handoff()
466
+ print(f"Handoff salvo em: {path}")
467
+ else:
468
+ print("Uso: python chronicler_core.py [briefing|handoff|save-briefing|save-handoff]")
@@ -0,0 +1,160 @@
1
+ # Code Review Skill
2
+
3
+ > **Auto-Trigger:** Quando usuário pedir review de código, análise de qualidade, revisão de PR, auditoria de código
4
+ > **Keywords:** "review", "revisar código", "code review", "análise de código", "qualidade de código", "revisar mudanças"
5
+ > **Prioridade:** ALTA
6
+ > **Namespace:** [OFFICIAL]
7
+ > **Tools:** Read, Glob, Grep, Task
8
+
9
+ ## Quando NÃO Ativar
10
+
11
+ - Escrita de código novo sem review
12
+ - Debugging sem análise de qualidade
13
+ - Perguntas sobre padrões sem código para revisar
14
+ - Quando usuário explicitamente pedir skill diferente
15
+
16
+ ---
17
+
18
+ ## Core Purpose
19
+
20
+ Multi-agent PR/code review system with confidence-based scoring. Uses 4 parallel agents
21
+ to provide comprehensive analysis with 80-point confidence threshold for recommendations.
22
+
23
+ ---
24
+
25
+ ## The 4 Review Agents
26
+
27
+ ### 1. Architecture Agent
28
+
29
+ **Focus:** Structural analysis
30
+
31
+ - Code organization
32
+ - Design patterns
33
+ - Dependency management
34
+ - Scalability concerns
35
+ - SOLID principles adherence
36
+
37
+ ### 2. Security Agent
38
+
39
+ **Focus:** Vulnerability detection
40
+
41
+ - Input validation
42
+ - Authentication/authorization
43
+ - Data exposure risks
44
+ - Injection vulnerabilities
45
+ - Secure coding practices
46
+
47
+ ### 3. Performance Agent
48
+
49
+ **Focus:** Efficiency analysis
50
+
51
+ - Algorithm complexity
52
+ - Memory usage
53
+ - Database query efficiency
54
+ - Caching opportunities
55
+ - Resource management
56
+
57
+ ### 4. Maintainability Agent
58
+
59
+ **Focus:** Code quality
60
+
61
+ - Readability
62
+ - Documentation
63
+ - Test coverage
64
+ - Technical debt
65
+ - Naming conventions
66
+
67
+ ---
68
+
69
+ ## Confidence Scoring System
70
+
71
+ ```
72
+ ┌─────────────────────────────────────────────────────────────────────────────┐
73
+ │ CONFIDENCE SCALE │
74
+ ├─────────────────────────────────────────────────────────────────────────────┤
75
+ │ 90-100: Critical issue - Must fix before merge │
76
+ │ 80-89: Strong recommendation - Should address │
77
+ │ 70-79: Suggestion - Consider addressing │
78
+ │ 60-69: Minor - Nice to have │
79
+ │ <60: Informational only │
80
+ │ │
81
+ │ THRESHOLD: 80+ = Actionable recommendation │
82
+ └─────────────────────────────────────────────────────────────────────────────┘
83
+ ```
84
+
85
+ ---
86
+
87
+ ## Review Output Format
88
+
89
+ ```
90
+ ╔══════════════════════════════════════════════════════════════════════════════╗
91
+ ║ CODE REVIEW REPORT ║
92
+ ╠══════════════════════════════════════════════════════════════════════════════╣
93
+ ║ Files Reviewed: [N] ║
94
+ ║ Lines Changed: +[added] / -[removed] ║
95
+ ║ Overall Score: [X]/100 ║
96
+ ╚══════════════════════════════════════════════════════════════════════════════╝
97
+
98
+ ┌─ CRITICAL (90+) ────────────────────────────────────────────────────────────┐
99
+ │ [Issues that must be fixed] │
100
+ └─────────────────────────────────────────────────────────────────────────────┘
101
+
102
+ ┌─ RECOMMENDATIONS (80-89) ───────────────────────────────────────────────────┐
103
+ │ [Strong suggestions] │
104
+ └─────────────────────────────────────────────────────────────────────────────┘
105
+
106
+ ┌─ SUGGESTIONS (70-79) ───────────────────────────────────────────────────────┐
107
+ │ [Nice to have improvements] │
108
+ └─────────────────────────────────────────────────────────────────────────────┘
109
+
110
+ ┌─ POSITIVES ─────────────────────────────────────────────────────────────────┐
111
+ │ [What's done well] │
112
+ └─────────────────────────────────────────────────────────────────────────────┘
113
+ ```
114
+
115
+ ---
116
+
117
+ ## Review Checklist
118
+
119
+ ### Architecture
120
+ - [ ] Follows project patterns
121
+ - [ ] Appropriate abstractions
122
+ - [ ] Clear separation of concerns
123
+ - [ ] No circular dependencies
124
+
125
+ ### Security
126
+ - [ ] Input validated
127
+ - [ ] No hardcoded secrets
128
+ - [ ] Proper error handling
129
+ - [ ] Secure defaults
130
+
131
+ ### Performance
132
+ - [ ] No obvious N+1 queries
133
+ - [ ] Appropriate caching
134
+ - [ ] Efficient algorithms
135
+ - [ ] Resource cleanup
136
+
137
+ ### Maintainability
138
+ - [ ] Clear naming
139
+ - [ ] Adequate comments
140
+ - [ ] Tests included
141
+ - [ ] Documentation updated
142
+
143
+ ---
144
+
145
+ ## Example Prompts This Skill Handles
146
+
147
+ - "Revise o código que acabei de escrever"
148
+ - "Do a code review on my PR changes"
149
+ - "Analise a qualidade deste módulo"
150
+ - "Review the authentication implementation"
151
+ - "Faça uma auditoria de segurança neste código"
152
+
153
+ ---
154
+
155
+ ## Integration Notes
156
+
157
+ This skill is part of the **Claude Code Official Skills** collection.
158
+ Namespace: `[OFFICIAL]` - Distinguishes from Mega Brain custom skills.
159
+
160
+ For custom Mega Brain skills, see: `/.claude/skills/`