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,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/`
|