mega-brain-ai 1.3.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.
- package/.antigravity/README.md +46 -0
- package/.antigravity/rules/.gitkeep +0 -0
- package/.antigravity/rules/mega-brain.md +39 -0
- package/.claude/CLAUDE.md +172 -0
- package/.claude/agents.yaml +44 -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 +196 -0
- package/.claude/commands/config.md +133 -0
- package/.claude/commands/create-agent.md +467 -0
- package/.claude/commands/debate.md +159 -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 +172 -0
- package/.claude/commands/extract-knowledge.md +507 -0
- package/.claude/commands/gsd/add-phase.md +43 -0
- package/.claude/commands/gsd/add-tests.md +41 -0
- package/.claude/commands/gsd/add-todo.md +47 -0
- package/.claude/commands/gsd/audit-milestone.md +36 -0
- package/.claude/commands/gsd/check-todos.md +45 -0
- package/.claude/commands/gsd/cleanup.md +18 -0
- package/.claude/commands/gsd/complete-milestone.md +136 -0
- package/.claude/commands/gsd/debug.md +167 -0
- package/.claude/commands/gsd/discuss-phase.md +83 -0
- package/.claude/commands/gsd/execute-phase.md +41 -0
- package/.claude/commands/gsd/health.md +22 -0
- package/.claude/commands/gsd/help.md +22 -0
- package/.claude/commands/gsd/insert-phase.md +32 -0
- package/.claude/commands/gsd/join-discord.md +18 -0
- package/.claude/commands/gsd/list-phase-assumptions.md +46 -0
- package/.claude/commands/gsd/map-codebase.md +71 -0
- package/.claude/commands/gsd/new-milestone.md +44 -0
- package/.claude/commands/gsd/new-project.md +42 -0
- package/.claude/commands/gsd/pause-work.md +38 -0
- package/.claude/commands/gsd/plan-milestone-gaps.md +34 -0
- package/.claude/commands/gsd/plan-phase.md +45 -0
- package/.claude/commands/gsd/progress.md +24 -0
- package/.claude/commands/gsd/quick.md +41 -0
- package/.claude/commands/gsd/reapply-patches.md +110 -0
- package/.claude/commands/gsd/remove-phase.md +31 -0
- package/.claude/commands/gsd/research-phase.md +189 -0
- package/.claude/commands/gsd/resume-work.md +40 -0
- package/.claude/commands/gsd/set-profile.md +34 -0
- package/.claude/commands/gsd/settings.md +36 -0
- package/.claude/commands/gsd/update.md +37 -0
- package/.claude/commands/gsd/verify-work.md +38 -0
- package/.claude/commands/inbox.md +296 -0
- package/.claude/commands/ingest-empresa.md +191 -0
- package/.claude/commands/ingest.md +183 -0
- package/.claude/commands/jarvis-briefing.md +67 -0
- package/.claude/commands/jarvis-control.md +169 -0
- package/.claude/commands/jarvis-full.md +182 -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/get-shit-done/VERSION +1 -0
- package/.claude/get-shit-done/bin/gsd-tools.cjs +588 -0
- package/.claude/get-shit-done/bin/lib/commands.cjs +553 -0
- package/.claude/get-shit-done/bin/lib/config.cjs +162 -0
- package/.claude/get-shit-done/bin/lib/core.cjs +411 -0
- package/.claude/get-shit-done/bin/lib/frontmatter.cjs +299 -0
- package/.claude/get-shit-done/bin/lib/init.cjs +710 -0
- package/.claude/get-shit-done/bin/lib/milestone.cjs +216 -0
- package/.claude/get-shit-done/bin/lib/phase.cjs +871 -0
- package/.claude/get-shit-done/bin/lib/roadmap.cjs +298 -0
- package/.claude/get-shit-done/bin/lib/state.cjs +679 -0
- package/.claude/get-shit-done/bin/lib/template.cjs +222 -0
- package/.claude/get-shit-done/bin/lib/verify.cjs +773 -0
- package/.claude/get-shit-done/references/checkpoints.md +776 -0
- package/.claude/get-shit-done/references/continuation-format.md +249 -0
- package/.claude/get-shit-done/references/decimal-phase-calculation.md +65 -0
- package/.claude/get-shit-done/references/git-integration.md +248 -0
- package/.claude/get-shit-done/references/git-planning-commit.md +38 -0
- package/.claude/get-shit-done/references/model-profile-resolution.md +34 -0
- package/.claude/get-shit-done/references/model-profiles.md +92 -0
- package/.claude/get-shit-done/references/phase-argument-parsing.md +61 -0
- package/.claude/get-shit-done/references/planning-config.md +196 -0
- package/.claude/get-shit-done/references/questioning.md +145 -0
- package/.claude/get-shit-done/references/tdd.md +263 -0
- package/.claude/get-shit-done/references/ui-brand.md +160 -0
- package/.claude/get-shit-done/references/verification-patterns.md +612 -0
- package/.claude/get-shit-done/templates/DEBUG.md +164 -0
- package/.claude/get-shit-done/templates/UAT.md +247 -0
- package/.claude/get-shit-done/templates/VALIDATION.md +76 -0
- package/.claude/get-shit-done/templates/codebase/architecture.md +255 -0
- package/.claude/get-shit-done/templates/codebase/concerns.md +310 -0
- package/.claude/get-shit-done/templates/codebase/conventions.md +307 -0
- package/.claude/get-shit-done/templates/codebase/integrations.md +280 -0
- package/.claude/get-shit-done/templates/codebase/stack.md +186 -0
- package/.claude/get-shit-done/templates/codebase/structure.md +285 -0
- package/.claude/get-shit-done/templates/codebase/testing.md +480 -0
- package/.claude/get-shit-done/templates/config.json +37 -0
- package/.claude/get-shit-done/templates/context.md +283 -0
- package/.claude/get-shit-done/templates/continue-here.md +78 -0
- package/.claude/get-shit-done/templates/debug-subagent-prompt.md +91 -0
- package/.claude/get-shit-done/templates/discovery.md +146 -0
- package/.claude/get-shit-done/templates/milestone-archive.md +123 -0
- package/.claude/get-shit-done/templates/milestone.md +115 -0
- package/.claude/get-shit-done/templates/phase-prompt.md +569 -0
- package/.claude/get-shit-done/templates/planner-subagent-prompt.md +117 -0
- package/.claude/get-shit-done/templates/project.md +184 -0
- package/.claude/get-shit-done/templates/requirements.md +231 -0
- package/.claude/get-shit-done/templates/research-project/ARCHITECTURE.md +204 -0
- package/.claude/get-shit-done/templates/research-project/FEATURES.md +147 -0
- package/.claude/get-shit-done/templates/research-project/PITFALLS.md +200 -0
- package/.claude/get-shit-done/templates/research-project/STACK.md +120 -0
- package/.claude/get-shit-done/templates/research-project/SUMMARY.md +170 -0
- package/.claude/get-shit-done/templates/research.md +552 -0
- package/.claude/get-shit-done/templates/retrospective.md +54 -0
- package/.claude/get-shit-done/templates/roadmap.md +202 -0
- package/.claude/get-shit-done/templates/state.md +176 -0
- package/.claude/get-shit-done/templates/summary-complex.md +59 -0
- package/.claude/get-shit-done/templates/summary-minimal.md +41 -0
- package/.claude/get-shit-done/templates/summary-standard.md +48 -0
- package/.claude/get-shit-done/templates/summary.md +248 -0
- package/.claude/get-shit-done/templates/user-setup.md +311 -0
- package/.claude/get-shit-done/templates/verification-report.md +322 -0
- package/.claude/get-shit-done/workflows/add-phase.md +111 -0
- package/.claude/get-shit-done/workflows/add-tests.md +350 -0
- package/.claude/get-shit-done/workflows/add-todo.md +157 -0
- package/.claude/get-shit-done/workflows/audit-milestone.md +297 -0
- package/.claude/get-shit-done/workflows/check-todos.md +176 -0
- package/.claude/get-shit-done/workflows/cleanup.md +152 -0
- package/.claude/get-shit-done/workflows/complete-milestone.md +763 -0
- package/.claude/get-shit-done/workflows/diagnose-issues.md +219 -0
- package/.claude/get-shit-done/workflows/discovery-phase.md +289 -0
- package/.claude/get-shit-done/workflows/discuss-phase.md +542 -0
- package/.claude/get-shit-done/workflows/execute-phase.md +449 -0
- package/.claude/get-shit-done/workflows/execute-plan.md +448 -0
- package/.claude/get-shit-done/workflows/health.md +156 -0
- package/.claude/get-shit-done/workflows/help.md +489 -0
- package/.claude/get-shit-done/workflows/insert-phase.md +129 -0
- package/.claude/get-shit-done/workflows/list-phase-assumptions.md +178 -0
- package/.claude/get-shit-done/workflows/map-codebase.md +315 -0
- package/.claude/get-shit-done/workflows/new-milestone.md +382 -0
- package/.claude/get-shit-done/workflows/new-project.md +1116 -0
- package/.claude/get-shit-done/workflows/pause-work.md +122 -0
- package/.claude/get-shit-done/workflows/plan-milestone-gaps.md +274 -0
- package/.claude/get-shit-done/workflows/plan-phase.md +569 -0
- package/.claude/get-shit-done/workflows/progress.md +381 -0
- package/.claude/get-shit-done/workflows/quick.md +453 -0
- package/.claude/get-shit-done/workflows/remove-phase.md +154 -0
- package/.claude/get-shit-done/workflows/research-phase.md +73 -0
- package/.claude/get-shit-done/workflows/resume-project.md +306 -0
- package/.claude/get-shit-done/workflows/set-profile.md +80 -0
- package/.claude/get-shit-done/workflows/settings.md +213 -0
- package/.claude/get-shit-done/workflows/transition.md +544 -0
- package/.claude/get-shit-done/workflows/update.md +219 -0
- package/.claude/get-shit-done/workflows/verify-phase.md +242 -0
- package/.claude/get-shit-done/workflows/verify-work.md +569 -0
- package/.claude/gsd-file-manifest.json +144 -0
- package/.claude/hooks/agent_creation_trigger.py +168 -0
- package/.claude/hooks/agent_index_updater.py +255 -0
- package/.claude/hooks/agent_memory_persister.py +203 -0
- package/.claude/hooks/claude_md_agent_sync.py +162 -0
- package/.claude/hooks/claude_md_guard.py +154 -0
- package/.claude/hooks/continuous_save.py +414 -0
- package/.claude/hooks/creation_validator.py +360 -0
- package/.claude/hooks/enforce_dual_location.py +501 -0
- package/.claude/hooks/enforce_plan_mode.py +220 -0
- package/.claude/hooks/gsd-check-update.js +62 -0
- package/.claude/hooks/gsd-context-monitor.js +122 -0
- package/.claude/hooks/gsd-statusline.js +108 -0
- package/.claude/hooks/inbox_age_alert.py +367 -0
- package/.claude/hooks/ledger_updater.py +303 -0
- package/.claude/hooks/memory_hints_injector.py +251 -0
- package/.claude/hooks/memory_updater.py +202 -0
- package/.claude/hooks/notification_system.py +115 -0
- package/.claude/hooks/pending_tracker.py +188 -0
- package/.claude/hooks/pipeline_checkpoint.py +583 -0
- package/.claude/hooks/post_batch_cascading.py +1740 -0
- package/.claude/hooks/post_tool_use.py +120 -0
- package/.claude/hooks/quality_watchdog.py +394 -0
- package/.claude/hooks/ralph_wiggum.py +286 -0
- package/.claude/hooks/session-source-sync.py +223 -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 +187 -0
- package/.claude/hooks/user_prompt_submit.py +125 -0
- package/.claude/package.json +1 -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/RULE-GSD-MANDATORY.md +106 -0
- package/.claude/rules/agent-cognition.md +779 -0
- package/.claude/rules/agent-integrity.md +692 -0
- package/.claude/rules/epistemic-standards.md +333 -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/jarvis_orchestrator.py +5 -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/scripts/validate_cascading_integrity.py +409 -0
- package/.claude/settings.json +215 -0
- package/.claude/skills/DETECTION-PROTOCOL.md +217 -0
- package/.claude/skills/README.md +240 -0
- package/.claude/skills/SKILL-REGISTRY.md +283 -0
- package/.claude/skills/SKILL-SUGGESTIONS.md +114 -0
- package/.claude/skills/_TEMPLATES/SKILL-WRITER-GUIDE.md +385 -0
- package/.claude/skills/agent-creation/SKILL.md +374 -0
- package/.claude/skills/ask-company/SKILL.md +198 -0
- package/.claude/skills/brainstorming/SKILL.md +72 -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/convert-to-company-docs/SKILL.md +68 -0
- package/.claude/skills/convert-to-company-docs/convert.py +532 -0
- package/.claude/skills/dispatching-parallel-agents/SKILL.md +193 -0
- package/.claude/skills/docs-megabrain/SKILL.md +251 -0
- package/.claude/skills/executing-plans/SKILL.md +114 -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/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/knowledge-extraction/SKILL.md +318 -0
- package/.claude/skills/ler-planilha/SKILL.md +281 -0
- package/.claude/skills/pipeline-jarvis/SKILL.md +430 -0
- package/.claude/skills/plugin-dev/SKILL.md +176 -0
- package/.claude/skills/pr-review-toolkit/SKILL.md +178 -0
- package/.claude/skills/process-company-inbox/SKILL.md +183 -0
- package/.claude/skills/python-megabrain/SKILL.md +323 -0
- package/.claude/skills/resume/SKILL.md +61 -0
- package/.claude/skills/save/SKILL.md +87 -0
- package/.claude/skills/skill-creator-internal/SKILL.md +186 -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/using-superpowers/SKILL.md +105 -0
- package/.claude/skills/verification-before-completion/SKILL.md +130 -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/skills/writing-plans/SKILL.md +184 -0
- package/.claude/templates/BATCH-LOG-TEMPLATE.md +221 -0
- package/.claudeignore +9 -0
- package/.cursor/agents.yaml +44 -0
- package/.cursor/rules/mega-brain.md +39 -0
- package/.gitattributes +19 -0
- package/.github/CODEOWNERS +8 -0
- package/.github/ISSUE_TEMPLATE/agent.md +96 -0
- package/.github/ISSUE_TEMPLATE/bug.md +67 -0
- package/.github/ISSUE_TEMPLATE/feature.md +56 -0
- package/.github/ISSUE_TEMPLATE/pipeline.md +70 -0
- package/.github/PULL_REQUEST_TEMPLATE.md +30 -0
- package/.github/assets/banner.svg +152 -0
- package/.github/assets/logo-dark.svg +79 -0
- package/.github/assets/social-preview.png +0 -0
- package/.github/layer1-allowlist.txt +196 -0
- package/.github/layer2-manifest.txt +42 -0
- package/.github/layer3-manifest.txt +94 -0
- package/.github/workflows/claude-code-pr.yml +198 -0
- package/.github/workflows/claude-code-review.yml +57 -0
- package/.github/workflows/claude.yml +76 -0
- package/.github/workflows/publish-pro.yml +72 -0
- package/.github/workflows/publish.yml +86 -0
- package/.github/workflows/verification.yml +251 -0
- package/.gitignore +244 -0
- package/.gitleaks.toml +118 -0
- package/.windsurf/agents.yaml +44 -0
- package/.windsurf/rules/mega-brain.md +39 -0
- package/CONTRIBUTING.md +62 -0
- package/QUICK-START.md +231 -0
- package/README.md +168 -0
- package/agents/AGENT-INDEX.yaml +107 -0
- package/agents/MASTER-AGENT.md +612 -0
- package/agents/README.md +48 -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/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/conclave/CRITIC.md +197 -0
- package/agents/conclave/DEVILS-ADVOCATE.md +274 -0
- package/agents/conclave/README.md +35 -0
- package/agents/conclave/SYNTHESIZER.md +293 -0
- package/agents/conclave/advogado-do-diabo/AGENT.md +502 -0
- package/agents/conclave/advogado-do-diabo/SOUL.md +100 -0
- package/agents/conclave/critico-metodologico/AGENT.md +683 -0
- package/agents/conclave/critico-metodologico/SOUL.md +107 -0
- package/agents/conclave/sintetizador/AGENT.md +571 -0
- package/agents/conclave/sintetizador/SOUL.md +94 -0
- package/agents/constitution/BASE-CONSTITUTION.md +254 -0
- package/agents/persona-registry.yaml +300 -0
- package/agents/sua-empresa/.gitkeep +0 -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/artifacts/README.md +11 -0
- package/artifacts/canonical/.gitkeep +0 -0
- package/artifacts/chunks/.gitkeep +0 -0
- package/artifacts/insights/.gitkeep +0 -0
- package/artifacts/narratives/.gitkeep +0 -0
- package/bin/cli.js +2 -0
- package/bin/lib/ascii-art.js +202 -0
- package/bin/lib/feature-gate.js +46 -0
- package/bin/lib/installer.js +593 -0
- package/bin/lib/license.js +59 -0
- package/bin/lib/pro-commands.js +75 -0
- package/bin/lib/setup-wizard.js +547 -0
- package/bin/lib/validate-email.js +113 -0
- package/bin/mega-brain.js +136 -0
- package/bin/pre-publish-gate.js +229 -0
- package/bin/push.js +1056 -0
- package/bin/templates/env.example +27 -0
- package/bin/utils/pro-detector.js +50 -0
- package/bin/validate-package.js +190 -0
- package/core/__init__.py +2 -0
- package/core/glossary/INDEX.md +63 -0
- package/core/glossary/digital.md +243 -0
- package/core/glossary/finance.md +49 -0
- package/core/glossary/marketing.md +69 -0
- package/core/glossary/operations.md +50 -0
- package/core/glossary/sales.md +690 -0
- package/core/intelligence/__init__.py +41 -0
- package/core/intelligence/agent_trigger.py +468 -0
- package/core/intelligence/audit_layers.py +491 -0
- package/core/intelligence/autonomous_processor.py +796 -0
- package/core/intelligence/bootstrap_registry.py +550 -0
- package/core/intelligence/business_model_detector.py +476 -0
- package/core/intelligence/dossier_trigger.py +336 -0
- package/core/intelligence/entity_normalizer.py +565 -0
- package/core/intelligence/org_chain_detector.py +411 -0
- package/core/intelligence/review_dashboard.py +338 -0
- package/core/intelligence/role_detector.py +855 -0
- package/core/intelligence/session_autosave.py +46 -0
- package/core/intelligence/skill_generator.py +601 -0
- package/core/intelligence/sow_generator.py +711 -0
- package/core/intelligence/sync_package_files.py +504 -0
- package/core/intelligence/task_orchestrator.py +780 -0
- package/core/intelligence/theme_analyzer.py +562 -0
- package/core/intelligence/tool_discovery.py +432 -0
- package/core/intelligence/validate_json_integrity.py +106 -0
- package/core/intelligence/validate_layers.py +310 -0
- package/core/intelligence/verify_classifications.py +94 -0
- package/core/intelligence/viability_scorer.py +592 -0
- package/core/jarvis/02-JARVIS-SOUL.md +390 -0
- package/core/jarvis/03-JARVIS-DNA.yaml +312 -0
- package/core/jarvis/AGENT.md +191 -0
- package/core/jarvis/agent-creator/AGENT.md +199 -0
- package/core/jarvis/agent-creator/SOUL.md +82 -0
- package/core/jarvis/agent-creator/tasks/create-agent.md +133 -0
- package/core/jarvis/agent-creator/tasks/sync-agents.md +100 -0
- package/core/jarvis/agent-creator/workflows/wf-create-agent.yaml +110 -0
- package/core/jarvis/agent-creator/workflows/wf-pipeline-trigger.yaml +111 -0
- package/core/jarvis/autonomous/benchmark/AGENT.md +347 -0
- package/core/jarvis/autonomous/benchmark/SOUL.md +78 -0
- package/core/jarvis/autonomous/critic/AGENT.md +324 -0
- package/core/jarvis/autonomous/critic/SOUL.md +78 -0
- package/core/jarvis/autonomous/evolver/AGENT.md +294 -0
- package/core/jarvis/autonomous/evolver/SOUL.md +85 -0
- package/core/jarvis/autonomous/playbook-generator/AGENT.md +399 -0
- package/core/jarvis/autonomous/playbook-generator/SOUL.md +80 -0
- package/core/patterns/_ROLE_PATTERNS.yaml +547 -0
- package/core/patterns/quality_gates.yaml +259 -0
- package/core/patterns/trigger_config.yaml +193 -0
- package/core/schemas/SCHEMA-INDEX.md +94 -0
- package/core/schemas/canonical-map.schema.json +98 -0
- package/core/schemas/chunks-state.schema.json +131 -0
- package/core/schemas/decisions-registry.schema.json +120 -0
- package/core/schemas/file-registry.schema.json +69 -0
- package/core/schemas/insights-state.schema.json +111 -0
- package/core/schemas/narratives-state.schema.json +150 -0
- package/core/tasks/CHANGELOG.md +55 -0
- package/core/tasks/TASK-REGISTRY.md +113 -0
- package/core/tasks/_templates/task-tmpl.md +105 -0
- package/core/tasks/analyze-themes.md +84 -0
- package/core/tasks/detect-role.md +82 -0
- package/core/tasks/extract-dna.md +114 -0
- package/core/tasks/normalize-entities.md +82 -0
- package/core/tasks/process-batch.md +111 -0
- package/core/tasks/validate-cascade.md +105 -0
- package/core/templates/README.md +27 -0
- package/core/templates/agents/dna-config-template.yaml +181 -0
- package/core/templates/agents/enrichment-protocol.md +408 -0
- package/core/templates/agents/memory-template.md +567 -0
- package/core/templates/agents/reasoning-model.md +331 -0
- package/core/templates/agents/soul-template.md +416 -0
- package/core/templates/agents/template-evolution.md +544 -0
- package/core/templates/debates/CONCLAVE-LOG-TEMPLATE-v2.md +309 -0
- package/core/templates/debates/conclave-log-template.md +309 -0
- package/core/templates/debates/conclave-protocol.md +518 -0
- package/core/templates/debates/debate-dynamics-config.yaml +322 -0
- package/core/templates/debates/debate-dynamics.md +613 -0
- package/core/templates/debates/debate-protocol.md +323 -0
- package/core/templates/logs/LOG-TEMPLATES.md +1068 -0
- package/core/templates/logs/batch-visual-template.md +841 -0
- package/core/templates/logs/log-structure.md +65 -0
- package/core/templates/logs/visual-diff.md +159 -0
- package/core/templates/phases/dossier-compilation.md +790 -0
- package/core/templates/phases/narrative-metabolism.md +292 -0
- package/core/templates/phases/narrative-synthesis.md +278 -0
- package/core/templates/phases/phase4-checkpoint.md +146 -0
- package/core/templates/phases/prompt-1.1-chunking.md +154 -0
- package/core/templates/phases/prompt-1.2-entity-resolution.md +186 -0
- package/core/templates/phases/prompt-2.1-dna-tags.md +208 -0
- package/core/templates/phases/prompt-2.1-insight-extraction.md +191 -0
- package/core/templates/phases/prompt-3.1-narrative.md +331 -0
- package/core/templates/phases/sources-compilation.md +340 -0
- package/core/workflows/PIPELINE-JARVIS-DOCS.md +606 -0
- package/core/workflows/wf-conclave.yaml +139 -0
- package/core/workflows/wf-extract-dna.yaml +158 -0
- package/core/workflows/wf-ingest.yaml +88 -0
- package/core/workflows/wf-pipeline-full.yaml +138 -0
- package/docs/API-KEYS-GUIDE.md +372 -0
- package/docs/INTEGRATION-POINTS.md +501 -0
- package/docs/LAYERS.md +403 -0
- package/docs/PLAN-MODE-PROTOCOL.md +388 -0
- package/docs/RESTORE-AND-INDEX.md +203 -0
- package/docs/TAG-RESOLVER-IMPLEMENTATION.md +597 -0
- package/docs/conselho.md +337 -0
- package/docs/context7-readme.md +28 -0
- package/docs/jarvis-logging-protocol.md +380 -0
- package/docs/pipeline-completa-v4.md +1315 -0
- package/docs/prompts/meta_agente_mapeamento_processos.md +297 -0
- package/docs/quick-start.md +197 -0
- package/docs/readme-ralph-cascateamento.md +207 -0
- package/docs/template-master.md +727 -0
- package/docs/templates/phase5/IMPLEMENTATION-GUIDE.md +355 -0
- package/docs/templates/phase5/MOGA-BRAIN-PHASE5-TEMPLATES.md +1284 -0
- package/docs/templates/phase5/README.md +165 -0
- package/docs/workflow-continuous-claude.md +2232 -0
- package/inbox/.gitkeep +0 -0
- package/inbox/README.md +15 -0
- package/knowledge/NAVIGATION-MAP.json +292 -0
- package/knowledge/README.md +11 -0
- package/knowledge/dna/.gitkeep +0 -0
- package/knowledge/dossiers/persons/.gitkeep +0 -0
- package/knowledge/dossiers/system/.gitkeep +0 -0
- package/knowledge/dossiers/themes/.gitkeep +0 -0
- package/knowledge/playbooks/.gitkeep +0 -0
- package/knowledge/sources/.gitkeep +0 -0
- package/logs/.gitkeep +0 -0
- package/logs/README.md +11 -0
- package/package.json +180 -0
- package/requirements.txt +4 -0
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
# AGENT CHRONICLER - Sistema de Logs Narrativos
|
|
2
|
+
|
|
3
|
+
> **Auto-Trigger:** Briefings de sessão, handoffs, logs visuais elaborados
|
|
4
|
+
> **Keywords:** "briefing", "handoff", "chronicler", "log bonito", "chronicle", "sessão"
|
|
5
|
+
> **Prioridade:** ALTA
|
|
6
|
+
> **Tools:** Read, Write, Glob
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Propósito
|
|
11
|
+
|
|
12
|
+
O **Agent Chronicler** é o escriba do Mega Brain. Enquanto outros agentes decidem e executam, o Chronicler:
|
|
13
|
+
|
|
14
|
+
- **REGISTRA** informações de forma visual e humanizada
|
|
15
|
+
- **NARRA** execuções com contexto explicativo
|
|
16
|
+
- **PRESERVA** memória através de logs append-only
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## Funcionalidades
|
|
21
|
+
|
|
22
|
+
### 1. BRIEFING Protocol
|
|
23
|
+
|
|
24
|
+
Gera briefing visual no início de sessões:
|
|
25
|
+
|
|
26
|
+
```
|
|
27
|
+
╔═══════════════════════════════════════════════════════════════════════════════╗
|
|
28
|
+
║ CHRONICLE ║
|
|
29
|
+
╚═══════════════════════════════════════════════════════════════════════════════╝
|
|
30
|
+
|
|
31
|
+
📅 Sessão #N | Data
|
|
32
|
+
|
|
33
|
+
┌─ LOOPS ABERTOS ─────────────────────────────────────────────────────────────┐
|
|
34
|
+
│ 🔴 [Crítico] Loop descrição │
|
|
35
|
+
│ 🟡 [Pendente] Loop descrição │
|
|
36
|
+
│ 🟢 [Continuável] Loop descrição │
|
|
37
|
+
└─────────────────────────────────────────────────────────────────────────────┘
|
|
38
|
+
|
|
39
|
+
┌─ ESTADO DO SISTEMA ─────────────────────────────────────────────────────────┐
|
|
40
|
+
│ Knowledge Base │ Agents │ Pipeline │ Inbox │
|
|
41
|
+
└─────────────────────────────────────────────────────────────────────────────┘
|
|
42
|
+
|
|
43
|
+
┌─ AÇÃO RECOMENDADA ──────────────────────────────────────────────────────────┐
|
|
44
|
+
│ [Ação prioritária baseada em regras] │
|
|
45
|
+
└─────────────────────────────────────────────────────────────────────────────┘
|
|
46
|
+
|
|
47
|
+
─── Chronicler • Mega Brain ───
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### 2. HANDOFF Protocol
|
|
51
|
+
|
|
52
|
+
Gera documento de continuidade ao fim de sessões:
|
|
53
|
+
|
|
54
|
+
- Tarefas completas (checkboxes)
|
|
55
|
+
- Tarefas pendentes (priorizadas)
|
|
56
|
+
- Decisões tomadas (com razões)
|
|
57
|
+
- Arquivos modificados
|
|
58
|
+
- Próximos passos sugeridos
|
|
59
|
+
|
|
60
|
+
### 3. EVOLUTION-LOG
|
|
61
|
+
|
|
62
|
+
Mantém histórico permanente:
|
|
63
|
+
|
|
64
|
+
- Append-only (nunca edita entradas antigas)
|
|
65
|
+
- Registra marcos, decisões, sessões
|
|
66
|
+
- Formato timestamped
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
## Arquivos Gerenciados
|
|
71
|
+
|
|
72
|
+
```
|
|
73
|
+
/logs/CHRONICLE/
|
|
74
|
+
├── SESSION-STATE.md # Métricas + loops (atualiza por sessão)
|
|
75
|
+
├── HANDOFF.md # Último handoff (overwrite por sessão)
|
|
76
|
+
├── EVOLUTION-LOG.md # Histórico permanente (append-only)
|
|
77
|
+
└── SESSION-HISTORY/ # Arquivo de handoffs anteriores
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## Fontes de Dados (Leitura)
|
|
83
|
+
|
|
84
|
+
O Chronicler **lê** de:
|
|
85
|
+
|
|
86
|
+
| Arquivo | O que extrai |
|
|
87
|
+
|---------|--------------|
|
|
88
|
+
| `/.claude/jarvis/STATE.json` | Métricas, fase atual, progresso |
|
|
89
|
+
| `/.claude/jarvis/PENDING.md` | Loops abertos, pendências |
|
|
90
|
+
| `/.claude/mission-control/MISSION-STATE.json` | Estado da missão |
|
|
91
|
+
| `/logs/` | Contagem de arquivos por categoria |
|
|
92
|
+
| `/agents/` | Contagem de agentes ativos |
|
|
93
|
+
| `/inbox/` | Itens pendentes no inbox |
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
## Comandos
|
|
98
|
+
|
|
99
|
+
| Comando | Ação |
|
|
100
|
+
|---------|------|
|
|
101
|
+
| `/briefing` | Gera briefing on-demand |
|
|
102
|
+
| `/handoff` | Gera handoff sem encerrar sessão |
|
|
103
|
+
| `/chronicle status` | Mostra estado do sistema Chronicle |
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
## Regras Invioláveis
|
|
108
|
+
|
|
109
|
+
1. **LOOPS SEMPRE PRIMEIRO** — No briefing, loops abertos são a seção mais importante
|
|
110
|
+
2. **HANDOFF OVERWRITES** — Apenas o último handoff importa (anteriores arquivados)
|
|
111
|
+
3. **EVOLUTION-LOG CRESCE APENAS** — Nunca editar entradas antigas, apenas append
|
|
112
|
+
4. **EXPLICAÇÕES OBRIGATÓRIAS** — Todo termo técnico recebe [contexto]
|
|
113
|
+
5. **ASSINATURA SEMPRE** — Outputs terminam com "─── Chronicler • Mega Brain ───"
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
## Quando NÃO Ativar
|
|
118
|
+
|
|
119
|
+
- Tarefas puramente técnicas sem necessidade de log visual
|
|
120
|
+
- Quando o usuário pedir output simples/direto
|
|
121
|
+
- Durante processamento de batches (usar logs técnicos)
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
## Integração com Hooks
|
|
126
|
+
|
|
127
|
+
O Chronicler é chamado automaticamente:
|
|
128
|
+
|
|
129
|
+
- **SessionStart:** `session_start.py` → `generate_chronicle_briefing()`
|
|
130
|
+
- **SessionEnd:** `session_end.py` → `generate_chronicle_handoff()`
|
|
131
|
+
|
|
132
|
+
---
|
|
133
|
+
|
|
134
|
+
## Exemplo de Uso Manual
|
|
135
|
+
|
|
136
|
+
```
|
|
137
|
+
Usuário: /briefing
|
|
138
|
+
JARVIS: [Gera briefing Chronicle completo]
|
|
139
|
+
|
|
140
|
+
Usuário: /handoff
|
|
141
|
+
JARVIS: [Gera handoff sem encerrar sessão, salva em CHRONICLE/]
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
─── Chronicler • Mega Brain ───
|
|
@@ -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]")
|