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.
Files changed (510) hide show
  1. package/.antigravity/README.md +46 -0
  2. package/.antigravity/rules/.gitkeep +0 -0
  3. package/.antigravity/rules/mega-brain.md +39 -0
  4. package/.claude/CLAUDE.md +172 -0
  5. package/.claude/agents.yaml +44 -0
  6. package/.claude/commands/agents.md +161 -0
  7. package/.claude/commands/ask.md +117 -0
  8. package/.claude/commands/benchmark.md +224 -0
  9. package/.claude/commands/chat.md +343 -0
  10. package/.claude/commands/compare.md +116 -0
  11. package/.claude/commands/conclave.md +196 -0
  12. package/.claude/commands/config.md +133 -0
  13. package/.claude/commands/create-agent.md +467 -0
  14. package/.claude/commands/debate.md +159 -0
  15. package/.claude/commands/documentation/create-architecture-documentation.md +175 -0
  16. package/.claude/commands/dossiers.md +180 -0
  17. package/.claude/commands/evolve.md +223 -0
  18. package/.claude/commands/extract-dna.md +172 -0
  19. package/.claude/commands/extract-knowledge.md +507 -0
  20. package/.claude/commands/gsd/add-phase.md +43 -0
  21. package/.claude/commands/gsd/add-tests.md +41 -0
  22. package/.claude/commands/gsd/add-todo.md +47 -0
  23. package/.claude/commands/gsd/audit-milestone.md +36 -0
  24. package/.claude/commands/gsd/check-todos.md +45 -0
  25. package/.claude/commands/gsd/cleanup.md +18 -0
  26. package/.claude/commands/gsd/complete-milestone.md +136 -0
  27. package/.claude/commands/gsd/debug.md +167 -0
  28. package/.claude/commands/gsd/discuss-phase.md +83 -0
  29. package/.claude/commands/gsd/execute-phase.md +41 -0
  30. package/.claude/commands/gsd/health.md +22 -0
  31. package/.claude/commands/gsd/help.md +22 -0
  32. package/.claude/commands/gsd/insert-phase.md +32 -0
  33. package/.claude/commands/gsd/join-discord.md +18 -0
  34. package/.claude/commands/gsd/list-phase-assumptions.md +46 -0
  35. package/.claude/commands/gsd/map-codebase.md +71 -0
  36. package/.claude/commands/gsd/new-milestone.md +44 -0
  37. package/.claude/commands/gsd/new-project.md +42 -0
  38. package/.claude/commands/gsd/pause-work.md +38 -0
  39. package/.claude/commands/gsd/plan-milestone-gaps.md +34 -0
  40. package/.claude/commands/gsd/plan-phase.md +45 -0
  41. package/.claude/commands/gsd/progress.md +24 -0
  42. package/.claude/commands/gsd/quick.md +41 -0
  43. package/.claude/commands/gsd/reapply-patches.md +110 -0
  44. package/.claude/commands/gsd/remove-phase.md +31 -0
  45. package/.claude/commands/gsd/research-phase.md +189 -0
  46. package/.claude/commands/gsd/resume-work.md +40 -0
  47. package/.claude/commands/gsd/set-profile.md +34 -0
  48. package/.claude/commands/gsd/settings.md +36 -0
  49. package/.claude/commands/gsd/update.md +37 -0
  50. package/.claude/commands/gsd/verify-work.md +38 -0
  51. package/.claude/commands/inbox.md +296 -0
  52. package/.claude/commands/ingest-empresa.md +191 -0
  53. package/.claude/commands/ingest.md +183 -0
  54. package/.claude/commands/jarvis-briefing.md +67 -0
  55. package/.claude/commands/jarvis-control.md +169 -0
  56. package/.claude/commands/jarvis-full.md +182 -0
  57. package/.claude/commands/jarvis.md +212 -0
  58. package/.claude/commands/ler-drive.md +212 -0
  59. package/.claude/commands/log.md +158 -0
  60. package/.claude/commands/loop.md +133 -0
  61. package/.claude/commands/loops.md +73 -0
  62. package/.claude/commands/mission-autopilot.md +538 -0
  63. package/.claude/commands/mission.md +353 -0
  64. package/.claude/commands/process-inbox.md +148 -0
  65. package/.claude/commands/process-jarvis.md +3036 -0
  66. package/.claude/commands/process-video.md +131 -0
  67. package/.claude/commands/rag-search.md +78 -0
  68. package/.claude/commands/resume.md +33 -0
  69. package/.claude/commands/save.md +38 -0
  70. package/.claude/commands/scan-inbox.md +125 -0
  71. package/.claude/commands/setup.md +99 -0
  72. package/.claude/commands/system-digest.md +243 -0
  73. package/.claude/commands/verify.md +182 -0
  74. package/.claude/commands/view-dna.md +169 -0
  75. package/.claude/get-shit-done/VERSION +1 -0
  76. package/.claude/get-shit-done/bin/gsd-tools.cjs +588 -0
  77. package/.claude/get-shit-done/bin/lib/commands.cjs +553 -0
  78. package/.claude/get-shit-done/bin/lib/config.cjs +162 -0
  79. package/.claude/get-shit-done/bin/lib/core.cjs +411 -0
  80. package/.claude/get-shit-done/bin/lib/frontmatter.cjs +299 -0
  81. package/.claude/get-shit-done/bin/lib/init.cjs +710 -0
  82. package/.claude/get-shit-done/bin/lib/milestone.cjs +216 -0
  83. package/.claude/get-shit-done/bin/lib/phase.cjs +871 -0
  84. package/.claude/get-shit-done/bin/lib/roadmap.cjs +298 -0
  85. package/.claude/get-shit-done/bin/lib/state.cjs +679 -0
  86. package/.claude/get-shit-done/bin/lib/template.cjs +222 -0
  87. package/.claude/get-shit-done/bin/lib/verify.cjs +773 -0
  88. package/.claude/get-shit-done/references/checkpoints.md +776 -0
  89. package/.claude/get-shit-done/references/continuation-format.md +249 -0
  90. package/.claude/get-shit-done/references/decimal-phase-calculation.md +65 -0
  91. package/.claude/get-shit-done/references/git-integration.md +248 -0
  92. package/.claude/get-shit-done/references/git-planning-commit.md +38 -0
  93. package/.claude/get-shit-done/references/model-profile-resolution.md +34 -0
  94. package/.claude/get-shit-done/references/model-profiles.md +92 -0
  95. package/.claude/get-shit-done/references/phase-argument-parsing.md +61 -0
  96. package/.claude/get-shit-done/references/planning-config.md +196 -0
  97. package/.claude/get-shit-done/references/questioning.md +145 -0
  98. package/.claude/get-shit-done/references/tdd.md +263 -0
  99. package/.claude/get-shit-done/references/ui-brand.md +160 -0
  100. package/.claude/get-shit-done/references/verification-patterns.md +612 -0
  101. package/.claude/get-shit-done/templates/DEBUG.md +164 -0
  102. package/.claude/get-shit-done/templates/UAT.md +247 -0
  103. package/.claude/get-shit-done/templates/VALIDATION.md +76 -0
  104. package/.claude/get-shit-done/templates/codebase/architecture.md +255 -0
  105. package/.claude/get-shit-done/templates/codebase/concerns.md +310 -0
  106. package/.claude/get-shit-done/templates/codebase/conventions.md +307 -0
  107. package/.claude/get-shit-done/templates/codebase/integrations.md +280 -0
  108. package/.claude/get-shit-done/templates/codebase/stack.md +186 -0
  109. package/.claude/get-shit-done/templates/codebase/structure.md +285 -0
  110. package/.claude/get-shit-done/templates/codebase/testing.md +480 -0
  111. package/.claude/get-shit-done/templates/config.json +37 -0
  112. package/.claude/get-shit-done/templates/context.md +283 -0
  113. package/.claude/get-shit-done/templates/continue-here.md +78 -0
  114. package/.claude/get-shit-done/templates/debug-subagent-prompt.md +91 -0
  115. package/.claude/get-shit-done/templates/discovery.md +146 -0
  116. package/.claude/get-shit-done/templates/milestone-archive.md +123 -0
  117. package/.claude/get-shit-done/templates/milestone.md +115 -0
  118. package/.claude/get-shit-done/templates/phase-prompt.md +569 -0
  119. package/.claude/get-shit-done/templates/planner-subagent-prompt.md +117 -0
  120. package/.claude/get-shit-done/templates/project.md +184 -0
  121. package/.claude/get-shit-done/templates/requirements.md +231 -0
  122. package/.claude/get-shit-done/templates/research-project/ARCHITECTURE.md +204 -0
  123. package/.claude/get-shit-done/templates/research-project/FEATURES.md +147 -0
  124. package/.claude/get-shit-done/templates/research-project/PITFALLS.md +200 -0
  125. package/.claude/get-shit-done/templates/research-project/STACK.md +120 -0
  126. package/.claude/get-shit-done/templates/research-project/SUMMARY.md +170 -0
  127. package/.claude/get-shit-done/templates/research.md +552 -0
  128. package/.claude/get-shit-done/templates/retrospective.md +54 -0
  129. package/.claude/get-shit-done/templates/roadmap.md +202 -0
  130. package/.claude/get-shit-done/templates/state.md +176 -0
  131. package/.claude/get-shit-done/templates/summary-complex.md +59 -0
  132. package/.claude/get-shit-done/templates/summary-minimal.md +41 -0
  133. package/.claude/get-shit-done/templates/summary-standard.md +48 -0
  134. package/.claude/get-shit-done/templates/summary.md +248 -0
  135. package/.claude/get-shit-done/templates/user-setup.md +311 -0
  136. package/.claude/get-shit-done/templates/verification-report.md +322 -0
  137. package/.claude/get-shit-done/workflows/add-phase.md +111 -0
  138. package/.claude/get-shit-done/workflows/add-tests.md +350 -0
  139. package/.claude/get-shit-done/workflows/add-todo.md +157 -0
  140. package/.claude/get-shit-done/workflows/audit-milestone.md +297 -0
  141. package/.claude/get-shit-done/workflows/check-todos.md +176 -0
  142. package/.claude/get-shit-done/workflows/cleanup.md +152 -0
  143. package/.claude/get-shit-done/workflows/complete-milestone.md +763 -0
  144. package/.claude/get-shit-done/workflows/diagnose-issues.md +219 -0
  145. package/.claude/get-shit-done/workflows/discovery-phase.md +289 -0
  146. package/.claude/get-shit-done/workflows/discuss-phase.md +542 -0
  147. package/.claude/get-shit-done/workflows/execute-phase.md +449 -0
  148. package/.claude/get-shit-done/workflows/execute-plan.md +448 -0
  149. package/.claude/get-shit-done/workflows/health.md +156 -0
  150. package/.claude/get-shit-done/workflows/help.md +489 -0
  151. package/.claude/get-shit-done/workflows/insert-phase.md +129 -0
  152. package/.claude/get-shit-done/workflows/list-phase-assumptions.md +178 -0
  153. package/.claude/get-shit-done/workflows/map-codebase.md +315 -0
  154. package/.claude/get-shit-done/workflows/new-milestone.md +382 -0
  155. package/.claude/get-shit-done/workflows/new-project.md +1116 -0
  156. package/.claude/get-shit-done/workflows/pause-work.md +122 -0
  157. package/.claude/get-shit-done/workflows/plan-milestone-gaps.md +274 -0
  158. package/.claude/get-shit-done/workflows/plan-phase.md +569 -0
  159. package/.claude/get-shit-done/workflows/progress.md +381 -0
  160. package/.claude/get-shit-done/workflows/quick.md +453 -0
  161. package/.claude/get-shit-done/workflows/remove-phase.md +154 -0
  162. package/.claude/get-shit-done/workflows/research-phase.md +73 -0
  163. package/.claude/get-shit-done/workflows/resume-project.md +306 -0
  164. package/.claude/get-shit-done/workflows/set-profile.md +80 -0
  165. package/.claude/get-shit-done/workflows/settings.md +213 -0
  166. package/.claude/get-shit-done/workflows/transition.md +544 -0
  167. package/.claude/get-shit-done/workflows/update.md +219 -0
  168. package/.claude/get-shit-done/workflows/verify-phase.md +242 -0
  169. package/.claude/get-shit-done/workflows/verify-work.md +569 -0
  170. package/.claude/gsd-file-manifest.json +144 -0
  171. package/.claude/hooks/agent_creation_trigger.py +168 -0
  172. package/.claude/hooks/agent_index_updater.py +255 -0
  173. package/.claude/hooks/agent_memory_persister.py +203 -0
  174. package/.claude/hooks/claude_md_agent_sync.py +162 -0
  175. package/.claude/hooks/claude_md_guard.py +154 -0
  176. package/.claude/hooks/continuous_save.py +414 -0
  177. package/.claude/hooks/creation_validator.py +360 -0
  178. package/.claude/hooks/enforce_dual_location.py +501 -0
  179. package/.claude/hooks/enforce_plan_mode.py +220 -0
  180. package/.claude/hooks/gsd-check-update.js +62 -0
  181. package/.claude/hooks/gsd-context-monitor.js +122 -0
  182. package/.claude/hooks/gsd-statusline.js +108 -0
  183. package/.claude/hooks/inbox_age_alert.py +367 -0
  184. package/.claude/hooks/ledger_updater.py +303 -0
  185. package/.claude/hooks/memory_hints_injector.py +251 -0
  186. package/.claude/hooks/memory_updater.py +202 -0
  187. package/.claude/hooks/notification_system.py +115 -0
  188. package/.claude/hooks/pending_tracker.py +188 -0
  189. package/.claude/hooks/pipeline_checkpoint.py +583 -0
  190. package/.claude/hooks/post_batch_cascading.py +1740 -0
  191. package/.claude/hooks/post_tool_use.py +120 -0
  192. package/.claude/hooks/quality_watchdog.py +394 -0
  193. package/.claude/hooks/ralph_wiggum.py +286 -0
  194. package/.claude/hooks/session-source-sync.py +223 -0
  195. package/.claude/hooks/session_autosave_v2.py +1135 -0
  196. package/.claude/hooks/session_end.py +203 -0
  197. package/.claude/hooks/session_start.py +939 -0
  198. package/.claude/hooks/skill_indexer.py +48 -0
  199. package/.claude/hooks/skill_router.py +358 -0
  200. package/.claude/hooks/stop_hook_completeness.py +187 -0
  201. package/.claude/hooks/user_prompt_submit.py +125 -0
  202. package/.claude/package.json +1 -0
  203. package/.claude/rules/ANTHROPIC-STANDARDS.md +384 -0
  204. package/.claude/rules/CLAUDE-LITE.md +201 -0
  205. package/.claude/rules/RULE-GROUP-1.md +320 -0
  206. package/.claude/rules/RULE-GROUP-2.md +307 -0
  207. package/.claude/rules/RULE-GROUP-3.md +248 -0
  208. package/.claude/rules/RULE-GROUP-4.md +427 -0
  209. package/.claude/rules/RULE-GROUP-5.md +388 -0
  210. package/.claude/rules/RULE-GROUP-6.md +387 -0
  211. package/.claude/rules/RULE-GSD-MANDATORY.md +106 -0
  212. package/.claude/rules/agent-cognition.md +779 -0
  213. package/.claude/rules/agent-integrity.md +692 -0
  214. package/.claude/rules/epistemic-standards.md +333 -0
  215. package/.claude/rules/logging.md +53 -0
  216. package/.claude/rules/mcp-governance.md +128 -0
  217. package/.claude/rules/pipeline.md +60 -0
  218. package/.claude/rules/state-management.md +93 -0
  219. package/.claude/scripts/apply-tags.py +77 -0
  220. package/.claude/scripts/batch-extract-transcriptions.py +132 -0
  221. package/.claude/scripts/build-complete-index.py +250 -0
  222. package/.claude/scripts/build-planilha-index.py +170 -0
  223. package/.claude/scripts/complete-tag-matching.py +250 -0
  224. package/.claude/scripts/deduplicate-inbox.py +139 -0
  225. package/.claude/scripts/docx-xml-extractor.py +141 -0
  226. package/.claude/scripts/extract-docx-text.py +58 -0
  227. package/.claude/scripts/extract-single-transcription.py +74 -0
  228. package/.claude/scripts/extract_docx_from_gdrive.py +77 -0
  229. package/.claude/scripts/jarvis_orchestrator.py +5 -0
  230. package/.claude/scripts/organized-downloader.py +246 -0
  231. package/.claude/scripts/planilha-tagger.py +187 -0
  232. package/.claude/scripts/revert-tags.py +70 -0
  233. package/.claude/scripts/source-sync.py +265 -0
  234. package/.claude/scripts/tag-inbox-files.py +276 -0
  235. package/.claude/scripts/tag-inbox-v2.py +253 -0
  236. package/.claude/scripts/test-extraction.py +35 -0
  237. package/.claude/scripts/test-full-extraction.py +74 -0
  238. package/.claude/scripts/validate_cascading_integrity.py +409 -0
  239. package/.claude/settings.json +215 -0
  240. package/.claude/skills/DETECTION-PROTOCOL.md +217 -0
  241. package/.claude/skills/README.md +240 -0
  242. package/.claude/skills/SKILL-REGISTRY.md +283 -0
  243. package/.claude/skills/SKILL-SUGGESTIONS.md +114 -0
  244. package/.claude/skills/_TEMPLATES/SKILL-WRITER-GUIDE.md +385 -0
  245. package/.claude/skills/agent-creation/SKILL.md +374 -0
  246. package/.claude/skills/ask-company/SKILL.md +198 -0
  247. package/.claude/skills/brainstorming/SKILL.md +72 -0
  248. package/.claude/skills/chronicler/SKILL.md +146 -0
  249. package/.claude/skills/chronicler/chronicler_core.py +468 -0
  250. package/.claude/skills/code-review/SKILL.md +160 -0
  251. package/.claude/skills/convert-to-company-docs/SKILL.md +68 -0
  252. package/.claude/skills/convert-to-company-docs/convert.py +532 -0
  253. package/.claude/skills/dispatching-parallel-agents/SKILL.md +193 -0
  254. package/.claude/skills/docs-megabrain/SKILL.md +251 -0
  255. package/.claude/skills/executing-plans/SKILL.md +114 -0
  256. package/.claude/skills/executor/SKILL.md +161 -0
  257. package/.claude/skills/fase-2-5-tagging/SKILL.md +182 -0
  258. package/.claude/skills/feature-dev/SKILL.md +154 -0
  259. package/.claude/skills/frontend-design/SKILL.md +165 -0
  260. package/.claude/skills/gdrive-transcription-downloader/SKILL.md +249 -0
  261. package/.claude/skills/gemini-fallback/SKILL.md +67 -0
  262. package/.claude/skills/gemini-fallback/gemini_fetch.py +0 -0
  263. package/.claude/skills/gha/SKILL.md +96 -0
  264. package/.claude/skills/gha/gha_diagnostic.py +227 -0
  265. package/.claude/skills/github-workflow/SKILL.md +190 -0
  266. package/.claude/skills/hookify/SKILL.md +134 -0
  267. package/.claude/skills/hybrid-source-reading/SKILL.md +265 -0
  268. package/.claude/skills/jarvis/SKILL.md +546 -0
  269. package/.claude/skills/jarvis-briefing/SKILL.md +340 -0
  270. package/.claude/skills/knowledge-extraction/SKILL.md +318 -0
  271. package/.claude/skills/ler-planilha/SKILL.md +281 -0
  272. package/.claude/skills/pipeline-jarvis/SKILL.md +430 -0
  273. package/.claude/skills/plugin-dev/SKILL.md +176 -0
  274. package/.claude/skills/pr-review-toolkit/SKILL.md +178 -0
  275. package/.claude/skills/process-company-inbox/SKILL.md +183 -0
  276. package/.claude/skills/python-megabrain/SKILL.md +323 -0
  277. package/.claude/skills/resume/SKILL.md +61 -0
  278. package/.claude/skills/save/SKILL.md +87 -0
  279. package/.claude/skills/skill-creator-internal/SKILL.md +186 -0
  280. package/.claude/skills/skill-writer/SKILL.md +153 -0
  281. package/.claude/skills/skill-writer/examples.md +191 -0
  282. package/.claude/skills/skill-writer/troubleshooting.md +205 -0
  283. package/.claude/skills/smart-download-tagger/SKILL.md +148 -0
  284. package/.claude/skills/source-sync/SKILL.md +240 -0
  285. package/.claude/skills/sync-docs/SKILL.md +193 -0
  286. package/.claude/skills/sync-docs/config.json +37 -0
  287. package/.claude/skills/sync-docs/gdrive_sync.py +358 -0
  288. package/.claude/skills/sync-docs/reauth.py +71 -0
  289. package/.claude/skills/using-superpowers/SKILL.md +105 -0
  290. package/.claude/skills/verification-before-completion/SKILL.md +130 -0
  291. package/.claude/skills/verify/SKILL.md +154 -0
  292. package/.claude/skills/verify/verify_runner.py +0 -0
  293. package/.claude/skills/verify-6-levels/SKILL.md +234 -0
  294. package/.claude/skills/writing-plans/SKILL.md +184 -0
  295. package/.claude/templates/BATCH-LOG-TEMPLATE.md +221 -0
  296. package/.claudeignore +9 -0
  297. package/.cursor/agents.yaml +44 -0
  298. package/.cursor/rules/mega-brain.md +39 -0
  299. package/.gitattributes +19 -0
  300. package/.github/CODEOWNERS +8 -0
  301. package/.github/ISSUE_TEMPLATE/agent.md +96 -0
  302. package/.github/ISSUE_TEMPLATE/bug.md +67 -0
  303. package/.github/ISSUE_TEMPLATE/feature.md +56 -0
  304. package/.github/ISSUE_TEMPLATE/pipeline.md +70 -0
  305. package/.github/PULL_REQUEST_TEMPLATE.md +30 -0
  306. package/.github/assets/banner.svg +152 -0
  307. package/.github/assets/logo-dark.svg +79 -0
  308. package/.github/assets/social-preview.png +0 -0
  309. package/.github/layer1-allowlist.txt +196 -0
  310. package/.github/layer2-manifest.txt +42 -0
  311. package/.github/layer3-manifest.txt +94 -0
  312. package/.github/workflows/claude-code-pr.yml +198 -0
  313. package/.github/workflows/claude-code-review.yml +57 -0
  314. package/.github/workflows/claude.yml +76 -0
  315. package/.github/workflows/publish-pro.yml +72 -0
  316. package/.github/workflows/publish.yml +86 -0
  317. package/.github/workflows/verification.yml +251 -0
  318. package/.gitignore +244 -0
  319. package/.gitleaks.toml +118 -0
  320. package/.windsurf/agents.yaml +44 -0
  321. package/.windsurf/rules/mega-brain.md +39 -0
  322. package/CONTRIBUTING.md +62 -0
  323. package/QUICK-START.md +231 -0
  324. package/README.md +168 -0
  325. package/agents/AGENT-INDEX.yaml +107 -0
  326. package/agents/MASTER-AGENT.md +612 -0
  327. package/agents/README.md +48 -0
  328. package/agents/_templates/INDEX.md +741 -0
  329. package/agents/_templates/TEMPLATE-AGENT-MD-ULTRA-ROBUSTO-V3.md +2399 -0
  330. package/agents/boardroom/CHECKLIST-MASTER.md +281 -0
  331. package/agents/boardroom/INTEGRATION-GUIDE.md +406 -0
  332. package/agents/boardroom/README.md +238 -0
  333. package/agents/boardroom/config/BOARDROOM-CONFIG.md +186 -0
  334. package/agents/boardroom/config/TTS-INTEGRATION.md +258 -0
  335. package/agents/boardroom/config/VOICE-PROFILES.md +624 -0
  336. package/agents/boardroom/scripts/audio_generator.py +375 -0
  337. package/agents/boardroom/scripts/audio_generator_edge.py +353 -0
  338. package/agents/boardroom/scripts/jarvis_boardroom_hook.py +415 -0
  339. package/agents/boardroom/scripts/notebooklm_generator.py +578 -0
  340. package/agents/boardroom/templates/EPISODE-TEMPLATE.md +367 -0
  341. package/agents/boardroom/templates/scene-templates/SCENE-AGENT-DEBATE.md +252 -0
  342. package/agents/boardroom/templates/scene-templates/SCENE-COUNCIL.md +270 -0
  343. package/agents/boardroom/templates/scene-templates/SCENE-DNA-CONSULTATION.md +126 -0
  344. package/agents/boardroom/templates/scene-templates/SCENE-QUESTION.md +174 -0
  345. package/agents/boardroom/workflows/WORKFLOW-AUDIO-GENERATION.md +421 -0
  346. package/agents/conclave/CRITIC.md +197 -0
  347. package/agents/conclave/DEVILS-ADVOCATE.md +274 -0
  348. package/agents/conclave/README.md +35 -0
  349. package/agents/conclave/SYNTHESIZER.md +293 -0
  350. package/agents/conclave/advogado-do-diabo/AGENT.md +502 -0
  351. package/agents/conclave/advogado-do-diabo/SOUL.md +100 -0
  352. package/agents/conclave/critico-metodologico/AGENT.md +683 -0
  353. package/agents/conclave/critico-metodologico/SOUL.md +107 -0
  354. package/agents/conclave/sintetizador/AGENT.md +571 -0
  355. package/agents/conclave/sintetizador/SOUL.md +94 -0
  356. package/agents/constitution/BASE-CONSTITUTION.md +254 -0
  357. package/agents/persona-registry.yaml +300 -0
  358. package/agents/sua-empresa/.gitkeep +0 -0
  359. package/agents/sua-empresa/README.md +44 -0
  360. package/agents/sua-empresa/_example/jds/EXAMPLE-JD.md +42 -0
  361. package/agents/sua-empresa/_example/org/EXAMPLE-ORG.md +32 -0
  362. package/agents/sua-empresa/_example/roles/EXAMPLE-ROLE.md +38 -0
  363. package/artifacts/README.md +11 -0
  364. package/artifacts/canonical/.gitkeep +0 -0
  365. package/artifacts/chunks/.gitkeep +0 -0
  366. package/artifacts/insights/.gitkeep +0 -0
  367. package/artifacts/narratives/.gitkeep +0 -0
  368. package/bin/cli.js +2 -0
  369. package/bin/lib/ascii-art.js +202 -0
  370. package/bin/lib/feature-gate.js +46 -0
  371. package/bin/lib/installer.js +593 -0
  372. package/bin/lib/license.js +59 -0
  373. package/bin/lib/pro-commands.js +75 -0
  374. package/bin/lib/setup-wizard.js +547 -0
  375. package/bin/lib/validate-email.js +113 -0
  376. package/bin/mega-brain.js +136 -0
  377. package/bin/pre-publish-gate.js +229 -0
  378. package/bin/push.js +1056 -0
  379. package/bin/templates/env.example +27 -0
  380. package/bin/utils/pro-detector.js +50 -0
  381. package/bin/validate-package.js +190 -0
  382. package/core/__init__.py +2 -0
  383. package/core/glossary/INDEX.md +63 -0
  384. package/core/glossary/digital.md +243 -0
  385. package/core/glossary/finance.md +49 -0
  386. package/core/glossary/marketing.md +69 -0
  387. package/core/glossary/operations.md +50 -0
  388. package/core/glossary/sales.md +690 -0
  389. package/core/intelligence/__init__.py +41 -0
  390. package/core/intelligence/agent_trigger.py +468 -0
  391. package/core/intelligence/audit_layers.py +491 -0
  392. package/core/intelligence/autonomous_processor.py +796 -0
  393. package/core/intelligence/bootstrap_registry.py +550 -0
  394. package/core/intelligence/business_model_detector.py +476 -0
  395. package/core/intelligence/dossier_trigger.py +336 -0
  396. package/core/intelligence/entity_normalizer.py +565 -0
  397. package/core/intelligence/org_chain_detector.py +411 -0
  398. package/core/intelligence/review_dashboard.py +338 -0
  399. package/core/intelligence/role_detector.py +855 -0
  400. package/core/intelligence/session_autosave.py +46 -0
  401. package/core/intelligence/skill_generator.py +601 -0
  402. package/core/intelligence/sow_generator.py +711 -0
  403. package/core/intelligence/sync_package_files.py +504 -0
  404. package/core/intelligence/task_orchestrator.py +780 -0
  405. package/core/intelligence/theme_analyzer.py +562 -0
  406. package/core/intelligence/tool_discovery.py +432 -0
  407. package/core/intelligence/validate_json_integrity.py +106 -0
  408. package/core/intelligence/validate_layers.py +310 -0
  409. package/core/intelligence/verify_classifications.py +94 -0
  410. package/core/intelligence/viability_scorer.py +592 -0
  411. package/core/jarvis/02-JARVIS-SOUL.md +390 -0
  412. package/core/jarvis/03-JARVIS-DNA.yaml +312 -0
  413. package/core/jarvis/AGENT.md +191 -0
  414. package/core/jarvis/agent-creator/AGENT.md +199 -0
  415. package/core/jarvis/agent-creator/SOUL.md +82 -0
  416. package/core/jarvis/agent-creator/tasks/create-agent.md +133 -0
  417. package/core/jarvis/agent-creator/tasks/sync-agents.md +100 -0
  418. package/core/jarvis/agent-creator/workflows/wf-create-agent.yaml +110 -0
  419. package/core/jarvis/agent-creator/workflows/wf-pipeline-trigger.yaml +111 -0
  420. package/core/jarvis/autonomous/benchmark/AGENT.md +347 -0
  421. package/core/jarvis/autonomous/benchmark/SOUL.md +78 -0
  422. package/core/jarvis/autonomous/critic/AGENT.md +324 -0
  423. package/core/jarvis/autonomous/critic/SOUL.md +78 -0
  424. package/core/jarvis/autonomous/evolver/AGENT.md +294 -0
  425. package/core/jarvis/autonomous/evolver/SOUL.md +85 -0
  426. package/core/jarvis/autonomous/playbook-generator/AGENT.md +399 -0
  427. package/core/jarvis/autonomous/playbook-generator/SOUL.md +80 -0
  428. package/core/patterns/_ROLE_PATTERNS.yaml +547 -0
  429. package/core/patterns/quality_gates.yaml +259 -0
  430. package/core/patterns/trigger_config.yaml +193 -0
  431. package/core/schemas/SCHEMA-INDEX.md +94 -0
  432. package/core/schemas/canonical-map.schema.json +98 -0
  433. package/core/schemas/chunks-state.schema.json +131 -0
  434. package/core/schemas/decisions-registry.schema.json +120 -0
  435. package/core/schemas/file-registry.schema.json +69 -0
  436. package/core/schemas/insights-state.schema.json +111 -0
  437. package/core/schemas/narratives-state.schema.json +150 -0
  438. package/core/tasks/CHANGELOG.md +55 -0
  439. package/core/tasks/TASK-REGISTRY.md +113 -0
  440. package/core/tasks/_templates/task-tmpl.md +105 -0
  441. package/core/tasks/analyze-themes.md +84 -0
  442. package/core/tasks/detect-role.md +82 -0
  443. package/core/tasks/extract-dna.md +114 -0
  444. package/core/tasks/normalize-entities.md +82 -0
  445. package/core/tasks/process-batch.md +111 -0
  446. package/core/tasks/validate-cascade.md +105 -0
  447. package/core/templates/README.md +27 -0
  448. package/core/templates/agents/dna-config-template.yaml +181 -0
  449. package/core/templates/agents/enrichment-protocol.md +408 -0
  450. package/core/templates/agents/memory-template.md +567 -0
  451. package/core/templates/agents/reasoning-model.md +331 -0
  452. package/core/templates/agents/soul-template.md +416 -0
  453. package/core/templates/agents/template-evolution.md +544 -0
  454. package/core/templates/debates/CONCLAVE-LOG-TEMPLATE-v2.md +309 -0
  455. package/core/templates/debates/conclave-log-template.md +309 -0
  456. package/core/templates/debates/conclave-protocol.md +518 -0
  457. package/core/templates/debates/debate-dynamics-config.yaml +322 -0
  458. package/core/templates/debates/debate-dynamics.md +613 -0
  459. package/core/templates/debates/debate-protocol.md +323 -0
  460. package/core/templates/logs/LOG-TEMPLATES.md +1068 -0
  461. package/core/templates/logs/batch-visual-template.md +841 -0
  462. package/core/templates/logs/log-structure.md +65 -0
  463. package/core/templates/logs/visual-diff.md +159 -0
  464. package/core/templates/phases/dossier-compilation.md +790 -0
  465. package/core/templates/phases/narrative-metabolism.md +292 -0
  466. package/core/templates/phases/narrative-synthesis.md +278 -0
  467. package/core/templates/phases/phase4-checkpoint.md +146 -0
  468. package/core/templates/phases/prompt-1.1-chunking.md +154 -0
  469. package/core/templates/phases/prompt-1.2-entity-resolution.md +186 -0
  470. package/core/templates/phases/prompt-2.1-dna-tags.md +208 -0
  471. package/core/templates/phases/prompt-2.1-insight-extraction.md +191 -0
  472. package/core/templates/phases/prompt-3.1-narrative.md +331 -0
  473. package/core/templates/phases/sources-compilation.md +340 -0
  474. package/core/workflows/PIPELINE-JARVIS-DOCS.md +606 -0
  475. package/core/workflows/wf-conclave.yaml +139 -0
  476. package/core/workflows/wf-extract-dna.yaml +158 -0
  477. package/core/workflows/wf-ingest.yaml +88 -0
  478. package/core/workflows/wf-pipeline-full.yaml +138 -0
  479. package/docs/API-KEYS-GUIDE.md +372 -0
  480. package/docs/INTEGRATION-POINTS.md +501 -0
  481. package/docs/LAYERS.md +403 -0
  482. package/docs/PLAN-MODE-PROTOCOL.md +388 -0
  483. package/docs/RESTORE-AND-INDEX.md +203 -0
  484. package/docs/TAG-RESOLVER-IMPLEMENTATION.md +597 -0
  485. package/docs/conselho.md +337 -0
  486. package/docs/context7-readme.md +28 -0
  487. package/docs/jarvis-logging-protocol.md +380 -0
  488. package/docs/pipeline-completa-v4.md +1315 -0
  489. package/docs/prompts/meta_agente_mapeamento_processos.md +297 -0
  490. package/docs/quick-start.md +197 -0
  491. package/docs/readme-ralph-cascateamento.md +207 -0
  492. package/docs/template-master.md +727 -0
  493. package/docs/templates/phase5/IMPLEMENTATION-GUIDE.md +355 -0
  494. package/docs/templates/phase5/MOGA-BRAIN-PHASE5-TEMPLATES.md +1284 -0
  495. package/docs/templates/phase5/README.md +165 -0
  496. package/docs/workflow-continuous-claude.md +2232 -0
  497. package/inbox/.gitkeep +0 -0
  498. package/inbox/README.md +15 -0
  499. package/knowledge/NAVIGATION-MAP.json +292 -0
  500. package/knowledge/README.md +11 -0
  501. package/knowledge/dna/.gitkeep +0 -0
  502. package/knowledge/dossiers/persons/.gitkeep +0 -0
  503. package/knowledge/dossiers/system/.gitkeep +0 -0
  504. package/knowledge/dossiers/themes/.gitkeep +0 -0
  505. package/knowledge/playbooks/.gitkeep +0 -0
  506. package/knowledge/sources/.gitkeep +0 -0
  507. package/logs/.gitkeep +0 -0
  508. package/logs/README.md +11 -0
  509. package/package.json +180 -0
  510. package/requirements.txt +4 -0
@@ -0,0 +1,286 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ RALPH WIGGUM - COMPLETION PROMISE HOOK
4
+ ======================================
5
+ Baseado no plugin original de Boris Cherny.
6
+
7
+ O "completion promise" é um pattern onde Claude deve outputtar uma string
8
+ específica para sinalizar que a tarefa está REALMENTE completa.
9
+
10
+ Funcionamento:
11
+ 1. Claude recebe instrução para usar <promise>DONE</promise> quando terminar
12
+ 2. Este hook verifica se o completion promise foi dado
13
+ 3. Se não foi, re-prompta Claude para continuar ou confirmar
14
+
15
+ Token: <promise>DONE</promise>
16
+
17
+ Referência: https://github.com/chernyshov/ralph-wiggum
18
+ """
19
+
20
+ import sys
21
+ import os
22
+ import json
23
+ import re
24
+ from pathlib import Path
25
+ from datetime import datetime
26
+
27
+ # Fix Windows cp1252 encoding
28
+ if sys.platform == 'win32':
29
+ sys.stdout.reconfigure(encoding='utf-8', errors='replace')
30
+ sys.stderr.reconfigure(encoding='utf-8', errors='replace')
31
+
32
+ PROJECT_ROOT = Path(os.environ.get('CLAUDE_PROJECT_DIR', '.'))
33
+ STATE_FILE = PROJECT_ROOT / '.claude' / 'ralph_wiggum_state.json'
34
+ LOG_FILE = PROJECT_ROOT / 'logs' / 'ralph_wiggum.jsonl'
35
+
36
+ # Completion promise token
37
+ PROMISE_TOKEN = '<promise>DONE</promise>'
38
+ PROMISE_PATTERN = re.compile(r'<promise>DONE</promise>', re.IGNORECASE)
39
+
40
+ # Tasks that require completion promise
41
+ COMPLEX_TASK_KEYWORDS = [
42
+ 'processar', 'pipeline', 'batch', 'criar agente',
43
+ 'implementar', 'refatorar', 'migrar', 'varredura',
44
+ 'fase 4', 'fase 5', 'dossier', 'playbook'
45
+ ]
46
+
47
+
48
+ def ensure_dirs():
49
+ """Ensure log directory exists"""
50
+ LOG_FILE.parent.mkdir(parents=True, exist_ok=True)
51
+ STATE_FILE.parent.mkdir(parents=True, exist_ok=True)
52
+
53
+
54
+ def load_state() -> dict:
55
+ """Load Ralph Wiggum state"""
56
+ if STATE_FILE.exists():
57
+ try:
58
+ return json.loads(STATE_FILE.read_text())
59
+ except:
60
+ pass
61
+ return {
62
+ 'active_task': None,
63
+ 'promise_required': False,
64
+ 'promise_received': False,
65
+ 'reprompt_count': 0,
66
+ 'max_reprompts': 3
67
+ }
68
+
69
+
70
+ def save_state(state: dict):
71
+ """Save Ralph Wiggum state"""
72
+ ensure_dirs()
73
+ STATE_FILE.write_text(json.dumps(state, indent=2))
74
+
75
+
76
+ def log_event(event_type: str, details: dict):
77
+ """Log Ralph Wiggum events"""
78
+ ensure_dirs()
79
+ entry = {
80
+ 'timestamp': datetime.now().isoformat(),
81
+ 'event': event_type,
82
+ **details
83
+ }
84
+ with open(LOG_FILE, 'a') as f:
85
+ f.write(json.dumps(entry) + '\n')
86
+
87
+
88
+ def is_complex_task(task_description: str) -> bool:
89
+ """Determine if task requires completion promise"""
90
+ if not task_description:
91
+ return False
92
+ task_lower = task_description.lower()
93
+ return any(keyword in task_lower for keyword in COMPLEX_TASK_KEYWORDS)
94
+
95
+
96
+ def check_promise_in_output() -> bool:
97
+ """Check if completion promise was given in recent output"""
98
+ # Check LEDGER for promise
99
+ ledger_path = PROJECT_ROOT / '.claude' / 'LEDGER.md'
100
+ if ledger_path.exists():
101
+ content = ledger_path.read_text()
102
+ if PROMISE_PATTERN.search(content):
103
+ return True
104
+
105
+ # Check recent session log
106
+ sessions_dir = PROJECT_ROOT / '.claude' / 'sessions'
107
+ if sessions_dir.exists():
108
+ session_files = sorted(sessions_dir.glob('SESSION-*.md'), reverse=True)
109
+ if session_files:
110
+ recent = session_files[0].read_text()
111
+ if PROMISE_PATTERN.search(recent):
112
+ return True
113
+
114
+ return False
115
+
116
+
117
+ def start_task(task_description: str):
118
+ """Call when a complex task starts"""
119
+ state = load_state()
120
+
121
+ if is_complex_task(task_description):
122
+ state['active_task'] = task_description
123
+ state['promise_required'] = True
124
+ state['promise_received'] = False
125
+ state['reprompt_count'] = 0
126
+ save_state(state)
127
+ log_event('task_started', {'task': task_description, 'promise_required': True})
128
+
129
+ # Inject instruction about completion promise
130
+ print(f"""
131
+ ╔══════════════════════════════════════════════════════════════════════════════╗
132
+ ║ 🎯 RALPH WIGGUM ACTIVE ║
133
+ ╠══════════════════════════════════════════════════════════════════════════════╣
134
+ ║ ║
135
+ ║ Tarefa complexa detectada: {task_description[:50]:<50} ║
136
+ ║ ║
137
+ ║ Quando COMPLETAR a tarefa, inclua na sua resposta: ║
138
+ ║ ║
139
+ ║ <promise>DONE</promise> ║
140
+ ║ ║
141
+ ║ Isso confirma que a tarefa está REALMENTE completa. ║
142
+ ║ ║
143
+ ╚══════════════════════════════════════════════════════════════════════════════╝
144
+ """)
145
+
146
+
147
+ def check_completion() -> bool:
148
+ """Check if task is complete (has promise)"""
149
+ state = load_state()
150
+
151
+ if not state.get('promise_required'):
152
+ return True
153
+
154
+ if state.get('promise_received'):
155
+ return True
156
+
157
+ # Check if promise was given
158
+ if check_promise_in_output():
159
+ state['promise_received'] = True
160
+ save_state(state)
161
+ log_event('promise_received', {'task': state.get('active_task')})
162
+ return True
163
+
164
+ return False
165
+
166
+
167
+ def reprompt():
168
+ """Generate reprompt message if task incomplete"""
169
+ state = load_state()
170
+
171
+ if state.get('reprompt_count', 0) >= state.get('max_reprompts', 3):
172
+ # Max reprompts reached, allow exit
173
+ log_event('max_reprompts_reached', {'task': state.get('active_task')})
174
+ clear_task()
175
+ return None
176
+
177
+ state['reprompt_count'] = state.get('reprompt_count', 0) + 1
178
+ save_state(state)
179
+
180
+ task = state.get('active_task', 'current task')
181
+ count = state['reprompt_count']
182
+ max_count = state.get('max_reprompts', 3)
183
+
184
+ log_event('reprompt_generated', {'task': task, 'count': count})
185
+
186
+ return f"""
187
+ ╔══════════════════════════════════════════════════════════════════════════════╗
188
+ ║ ⚠️ RALPH WIGGUM: Completion promise not detected ({count}/{max_count}) ║
189
+ ╠══════════════════════════════════════════════════════════════════════════════╣
190
+ ║ ║
191
+ ║ Task: {task[:66]:<66} ║
192
+ ║ ║
193
+ ║ Você ainda não confirmou que a tarefa está completa. ║
194
+ ║ ║
195
+ ║ Se a tarefa está COMPLETA, responda com: ║
196
+ ║ <promise>DONE</promise> ║
197
+ ║ ║
198
+ ║ Se há mais trabalho, continue de onde parou. ║
199
+ ║ ║
200
+ ╚══════════════════════════════════════════════════════════════════════════════╝
201
+ """
202
+
203
+
204
+ def clear_task():
205
+ """Clear the current task"""
206
+ state = load_state()
207
+ if state.get('active_task'):
208
+ log_event('task_cleared', {'task': state.get('active_task')})
209
+ state['active_task'] = None
210
+ state['promise_required'] = False
211
+ state['promise_received'] = False
212
+ state['reprompt_count'] = 0
213
+ save_state(state)
214
+
215
+
216
+ def main():
217
+ """Main Ralph Wiggum logic for Stop hook. Must output valid JSON."""
218
+ ensure_dirs()
219
+ state = load_state()
220
+
221
+ # If no task active, allow exit
222
+ if not state.get('active_task'):
223
+ print(json.dumps({"continue": True, "feedback": ""}))
224
+ sys.exit(0)
225
+
226
+ # If promise not required, allow exit
227
+ if not state.get('promise_required'):
228
+ print(json.dumps({"continue": True, "feedback": ""}))
229
+ sys.exit(0)
230
+
231
+ # Check if promise was given
232
+ if check_completion():
233
+ clear_task()
234
+ print(json.dumps({"continue": True, "feedback": "Ralph Wiggum: Completion promise received. Task complete."}))
235
+ sys.exit(0)
236
+
237
+ # Generate reprompt
238
+ reprompt_msg = reprompt()
239
+
240
+ if reprompt_msg:
241
+ # Task incomplete, but still output valid JSON
242
+ feedback = f"Ralph Wiggum: Task incomplete. Reprompt count: {state.get('reprompt_count', 0)}"
243
+ print(json.dumps({"continue": True, "feedback": feedback}))
244
+ else:
245
+ # Max reprompts reached
246
+ print(json.dumps({"continue": True, "feedback": "Ralph Wiggum: Max reprompts reached. Allowing exit."}))
247
+
248
+ sys.exit(0)
249
+
250
+
251
+ # CLI interface for manual control
252
+ if __name__ == '__main__':
253
+ if len(sys.argv) > 1:
254
+ cmd = sys.argv[1]
255
+
256
+ if cmd == 'start' and len(sys.argv) > 2:
257
+ task = ' '.join(sys.argv[2:])
258
+ start_task(task)
259
+
260
+ elif cmd == 'check':
261
+ if check_completion():
262
+ print("✅ Task complete (promise received)")
263
+ else:
264
+ print("⏳ Task incomplete (no promise)")
265
+
266
+ elif cmd == 'clear':
267
+ clear_task()
268
+ print("🗑️ Task cleared")
269
+
270
+ elif cmd == 'status':
271
+ state = load_state()
272
+ print(json.dumps(state, indent=2))
273
+
274
+ else:
275
+ print("""
276
+ Ralph Wiggum - Completion Promise Hook
277
+
278
+ Usage:
279
+ ralph_wiggum.py # Stop hook mode
280
+ ralph_wiggum.py start TASK # Start tracking complex task
281
+ ralph_wiggum.py check # Check if promise received
282
+ ralph_wiggum.py clear # Clear current task
283
+ ralph_wiggum.py status # Show current state
284
+ """)
285
+ else:
286
+ main()
@@ -0,0 +1,223 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ SESSION SOURCE SYNC HOOK
4
+ ========================
5
+
6
+ Hook executado no início de cada sessão para verificar:
7
+ 1. Se há delta pendente de sincronização
8
+ 2. Se última sincronização está muito antiga (>7 dias)
9
+ 3. Se há arquivos no INBOX sem TAG
10
+
11
+ Alertas são exibidos no início da sessão para lembrar o usuário.
12
+
13
+ Autor: JARVIS
14
+ Versão: 1.0.0
15
+ Data: 2026-01-13
16
+ """
17
+
18
+ import json
19
+ import os
20
+ import sys
21
+ from datetime import datetime, timedelta
22
+ from pathlib import Path
23
+ from typing import List, Tuple
24
+
25
+ # Fix Windows cp1252 encoding
26
+ if sys.platform == 'win32':
27
+ sys.stdout.reconfigure(encoding='utf-8', errors='replace')
28
+ sys.stderr.reconfigure(encoding='utf-8', errors='replace')
29
+
30
+ #=================================
31
+ # CONFIGURAÇÃO
32
+ #=================================
33
+
34
+ PROJECT_ROOT = Path(os.environ.get('CLAUDE_PROJECT_DIR', '.'))
35
+ MISSION_CONTROL = PROJECT_ROOT / ".claude" / "mission-control"
36
+ INBOX_ROOT = PROJECT_ROOT / "inbox"
37
+
38
+ SYNC_STATE_FILE = MISSION_CONTROL / "SOURCE-SYNC-STATE.json"
39
+ DELTA_PENDING_FILE = MISSION_CONTROL / "DELTA-PENDING.json"
40
+
41
+ # Configuração de alertas
42
+ STALE_THRESHOLD_DAYS = 7 # Dias sem sync para considerar "stale"
43
+
44
+ #=================================
45
+ # FUNÇÕES AUXILIARES
46
+ #=================================
47
+
48
+ def load_json(path: Path) -> dict:
49
+ """Carrega arquivo JSON com tratamento de erro."""
50
+ if not path.exists():
51
+ return {}
52
+ try:
53
+ with open(path, 'r', encoding='utf-8') as f:
54
+ return json.load(f)
55
+ except (json.JSONDecodeError, IOError):
56
+ return {}
57
+
58
+ def days_since(iso_timestamp: str) -> int:
59
+ """Calcula dias desde um timestamp ISO."""
60
+ if not iso_timestamp:
61
+ return 999 # Muito tempo
62
+ try:
63
+ dt = datetime.fromisoformat(iso_timestamp.replace('Z', '+00:00'))
64
+ delta = datetime.now(dt.tzinfo) - dt if dt.tzinfo else datetime.now() - dt
65
+ return delta.days
66
+ except (ValueError, TypeError):
67
+ return 999
68
+
69
+ def count_untagged_inbox_files() -> int:
70
+ """Conta arquivos no INBOX que não têm TAG."""
71
+ untagged = 0
72
+ if not INBOX_ROOT.exists():
73
+ return 0
74
+
75
+ for root, dirs, files in os.walk(INBOX_ROOT):
76
+ for f in files:
77
+ # Ignora arquivos do sistema
78
+ if f.startswith('.') or f.endswith('.md'):
79
+ continue
80
+ # Verifica se tem TAG [XX-XXXX]
81
+ if not f.startswith('['):
82
+ untagged += 1
83
+
84
+ return untagged
85
+
86
+ #=================================
87
+ # FUNÇÕES DE VERIFICAÇÃO
88
+ #=================================
89
+
90
+ def check_pending_delta() -> Tuple[bool, int, str]:
91
+ """
92
+ Verifica se há delta pendente.
93
+
94
+ Returns:
95
+ (has_pending, count, timestamp)
96
+ """
97
+ delta = load_json(DELTA_PENDING_FILE)
98
+ total = delta.get("total", 0)
99
+ timestamp = delta.get("timestamp", "")
100
+
101
+ return total > 0, total, timestamp
102
+
103
+ def check_stale_sync() -> Tuple[bool, int]:
104
+ """
105
+ Verifica se última sincronização está muito antiga.
106
+
107
+ Returns:
108
+ (is_stale, days_since_sync)
109
+ """
110
+ state = load_json(SYNC_STATE_FILE)
111
+ last_sync = state.get("last_sync", "")
112
+ days = days_since(last_sync)
113
+
114
+ return days > STALE_THRESHOLD_DAYS, days
115
+
116
+ def check_untagged_files() -> Tuple[bool, int]:
117
+ """
118
+ Verifica arquivos no INBOX sem TAG.
119
+
120
+ Returns:
121
+ (has_untagged, count)
122
+ """
123
+ count = count_untagged_inbox_files()
124
+ return count > 0, count
125
+
126
+ #=================================
127
+ # GERAÇÃO DE ALERTAS
128
+ #=================================
129
+
130
+ def generate_alerts() -> List[dict]:
131
+ """Gera lista de alertas baseado nas verificações."""
132
+ alerts = []
133
+
134
+ # 1. Delta pendente
135
+ has_pending, count, timestamp = check_pending_delta()
136
+ if has_pending:
137
+ alerts.append({
138
+ "type": "PENDING_DELTA",
139
+ "severity": "HIGH",
140
+ "message": f"{count} arquivos NOVOS detectados aguardando download",
141
+ "action": "Execute /source-sync --execute para processar",
142
+ "timestamp": timestamp
143
+ })
144
+
145
+ # 2. Sync antigo
146
+ is_stale, days = check_stale_sync()
147
+ if is_stale:
148
+ alerts.append({
149
+ "type": "STALE_SYNC",
150
+ "severity": "MEDIUM",
151
+ "message": f"Última sincronização há {days} dias",
152
+ "action": "Execute /source-sync --check para verificar novos conteúdos"
153
+ })
154
+
155
+ # 3. Arquivos sem TAG
156
+ has_untagged, count = check_untagged_files()
157
+ if has_untagged:
158
+ alerts.append({
159
+ "type": "UNTAGGED_FILES",
160
+ "severity": "LOW",
161
+ "message": f"{count} arquivos no INBOX sem TAG",
162
+ "action": "Execute Fase 2.5 ou /source-sync para tagueamento"
163
+ })
164
+
165
+ return alerts
166
+
167
+ def print_alerts(alerts: List[dict]) -> None:
168
+ """Exibe alertas no formato visual."""
169
+ if not alerts:
170
+ return
171
+
172
+ print()
173
+ print("┌" + "─" * 78 + "┐")
174
+ print("│" + "SOURCE SYNC - ALERTAS DE SESSÃO".center(78) + "│")
175
+ print("├" + "─" * 78 + "┤")
176
+
177
+ for alert in alerts:
178
+ severity_icon = {
179
+ "HIGH": "🔴",
180
+ "MEDIUM": "🟡",
181
+ "LOW": "🟢"
182
+ }.get(alert["severity"], "⚪")
183
+
184
+ print(f"│ [{alert['type']}]" + " " * (68 - len(alert['type'])) + "│")
185
+ print(f"│ {severity_icon} {alert['message']:<73}│")
186
+ print(f"│ → {alert['action']:<72}│")
187
+ print("│" + " " * 78 + "│")
188
+
189
+ print("└" + "─" * 78 + "┘")
190
+ print()
191
+
192
+ def get_alerts_json() -> str:
193
+ """Retorna alertas em formato JSON para integração."""
194
+ alerts = generate_alerts()
195
+ return json.dumps({
196
+ "timestamp": datetime.now().isoformat(),
197
+ "alerts": alerts,
198
+ "count": len(alerts)
199
+ }, ensure_ascii=False, indent=2)
200
+
201
+ #=================================
202
+ # MAIN
203
+ #=================================
204
+
205
+ def main():
206
+ """Executa verificação e exibe alertas."""
207
+ alerts = generate_alerts()
208
+
209
+ if alerts:
210
+ print_alerts(alerts)
211
+ else:
212
+ print("\n✅ SOURCE SYNC: Nenhum alerta pendente.\n")
213
+
214
+ # SEMPRE exit 0 - alertas são informativos, não erros
215
+ # Exit code != 0 bloqueia operações do Claude Code
216
+ sys.exit(0)
217
+
218
+ if __name__ == "__main__":
219
+ # Verifica se deve retornar JSON
220
+ if len(sys.argv) > 1 and sys.argv[1] == "--json":
221
+ print(get_alerts_json())
222
+ else:
223
+ main()