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,265 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ SOURCE SYNC - Detecção de Delta e Sincronização com Planilha
4
+ =============================================================
5
+
6
+ Este script:
7
+ 1. Carrega o snapshot local (PLANILHA-INDEX.json)
8
+ 2. Compara com o estado atual da planilha (via MCP)
9
+ 3. Detecta arquivos NOVOS (delta)
10
+ 4. Gera relatório visual
11
+ 5. Opcionalmente executa tagueamento + download
12
+
13
+ Uso:
14
+ python source-sync.py --check # Apenas verificar
15
+ python source-sync.py --execute # Verificar + baixar
16
+ python source-sync.py --source=JM # Filtrar por fonte
17
+
18
+ Autor: JARVIS
19
+ Versão: 1.0.0
20
+ Data: 2026-01-13
21
+ """
22
+
23
+ import json
24
+ import os
25
+ import sys
26
+ from datetime import datetime
27
+ from pathlib import Path
28
+ from typing import Dict, List, Optional, Tuple
29
+
30
+ #=================================
31
+ # CONFIGURAÇÃO
32
+ #=================================
33
+
34
+ MEGA_BRAIN_ROOT = Path(".")
35
+ MISSION_CONTROL = MEGA_BRAIN_ROOT / ".claude" / "mission-control"
36
+ INBOX_ROOT = MEGA_BRAIN_ROOT / "inbox"
37
+
38
+ # Arquivos de estado
39
+ PLANILHA_INDEX_FILE = MISSION_CONTROL / "PLANILHA-INDEX.json"
40
+ SYNC_STATE_FILE = MISSION_CONTROL / "SOURCE-SYNC-STATE.json"
41
+ DELTA_PENDING_FILE = MISSION_CONTROL / "DELTA-PENDING.json"
42
+
43
+ # ID da planilha principal
44
+ PLANILHA_ID = "[YOUR_SHEET_ID_HERE]"
45
+
46
+ #=================================
47
+ # MAPEAMENTO ABA → PREFIXO
48
+ #=================================
49
+
50
+ SHEET_TO_PREFIX: Dict[str, str] = {
51
+ "Jeremy Miner": "JM",
52
+ "Jeremy Haynes Sales Training": "JH-ST",
53
+ "Jeremy Haynes Inner Circle": "JH-IC",
54
+ "Inner Circle Weekly Group Call Recordings": "JH-WK",
55
+ "Agency Blueprint": "AOBA",
56
+ "Cold Video Pitch": "PCVP",
57
+ "Land Your First Agency Client": "LYFC",
58
+ "Marketer Mindset Masterclass": "MMM",
59
+ "30 Days Challenge": "30DC",
60
+ "Scale The Agency": "STA",
61
+ "Ultra High Ticket Closer": "UHTC",
62
+ "The Scalable Company": "TSC",
63
+ "Cole Gordon": "CG",
64
+ "Sales Training BR": "EDC",
65
+ "Alex Hormozi": "AH",
66
+ "Jeremy Haynes Program": "CA",
67
+ }
68
+
69
+ # Mapeamento reverso para agrupamento
70
+ PREFIX_TO_SOURCE: Dict[str, str] = {
71
+ "JM": "JEREMY MINER",
72
+ "JH-ST": "JEREMY HAYNES (SALES TRAINING)",
73
+ "JH-IC": "JEREMY HAYNES (INNER CIRCLE)",
74
+ "JH-WK": "JEREMY HAYNES (WEEKLY CALLS)",
75
+ "AOBA": "AGENCY OWNERS BLUEPRINT",
76
+ "PCVP": "PERFECT COLD VIDEO PITCH",
77
+ "LYFC": "LAND YOUR FIRST CLIENT",
78
+ "MMM": "MARKETER MINDSET",
79
+ "30DC": "30 DAYS CHALLENGE",
80
+ "STA": "SCALE THE AGENCY",
81
+ "UHTC": "ULTRA HIGH TICKET CLOSER",
82
+ "TSC": "THE SCALABLE COMPANY",
83
+ "CG": "COLE GORDON",
84
+ "EDC": "SALES TRAINING BR",
85
+ "AH": "ALEX HORMOZI",
86
+ "CA": "JEREMY HAYNES PROGRAM",
87
+ }
88
+
89
+ #=================================
90
+ # FUNÇÕES AUXILIARES
91
+ #=================================
92
+
93
+ def load_json(path: Path) -> dict:
94
+ """Carrega arquivo JSON com tratamento de erro."""
95
+ if not path.exists():
96
+ return {}
97
+ try:
98
+ with open(path, 'r', encoding='utf-8') as f:
99
+ return json.load(f)
100
+ except json.JSONDecodeError:
101
+ print(f"⚠️ Erro ao ler {path}")
102
+ return {}
103
+
104
+ def save_json(data: dict, path: Path) -> None:
105
+ """Salva dados em arquivo JSON."""
106
+ path.parent.mkdir(parents=True, exist_ok=True)
107
+ with open(path, 'w', encoding='utf-8') as f:
108
+ json.dump(data, f, ensure_ascii=False, indent=2)
109
+
110
+ def generate_next_tag(prefix: str, existing_tags: List[str]) -> str:
111
+ """Gera próxima TAG sequencial para um prefixo."""
112
+ # Extrair números existentes para este prefixo
113
+ existing_nums = []
114
+ for tag in existing_tags:
115
+ if tag.startswith(prefix + "-"):
116
+ try:
117
+ num = int(tag.split("-")[-1])
118
+ existing_nums.append(num)
119
+ except ValueError:
120
+ continue
121
+
122
+ # Próximo número
123
+ next_num = max(existing_nums, default=0) + 1
124
+ return f"{prefix}-{next_num:04d}"
125
+
126
+ #=================================
127
+ # FUNÇÕES PRINCIPAIS
128
+ #=================================
129
+
130
+ def load_snapshot() -> dict:
131
+ """Carrega snapshot local da planilha."""
132
+ snapshot = load_json(PLANILHA_INDEX_FILE)
133
+ if not snapshot:
134
+ snapshot = {
135
+ "entries": [],
136
+ "timestamp": None,
137
+ "total_count": 0
138
+ }
139
+ return snapshot
140
+
141
+ def get_snapshot_tags(snapshot: dict) -> set:
142
+ """Extrai conjunto de TAGs do snapshot."""
143
+ return {entry.get("tag") for entry in snapshot.get("entries", []) if entry.get("tag")}
144
+
145
+ def detect_delta(current_entries: List[dict], snapshot_tags: set) -> Tuple[List[dict], List[dict]]:
146
+ """
147
+ Detecta delta entre estado atual e snapshot.
148
+
149
+ Retorna:
150
+ - novos_com_tag: Arquivos novos que JÁ têm TAG na planilha
151
+ - novos_sem_tag: Arquivos novos que PRECISAM de TAG
152
+ """
153
+ novos_com_tag = []
154
+ novos_sem_tag = []
155
+
156
+ for entry in current_entries:
157
+ tag = entry.get("tag")
158
+
159
+ # Se não está no snapshot, é novo
160
+ if tag and tag not in snapshot_tags:
161
+ novos_com_tag.append(entry)
162
+ elif not tag:
163
+ novos_sem_tag.append(entry)
164
+
165
+ return novos_com_tag, novos_sem_tag
166
+
167
+ def group_by_source(entries: List[dict]) -> Dict[str, List[dict]]:
168
+ """Agrupa entries por fonte/aba."""
169
+ grouped = {}
170
+ for entry in entries:
171
+ sheet = entry.get("sheet", "UNKNOWN")
172
+ if sheet not in grouped:
173
+ grouped[sheet] = []
174
+ grouped[sheet].append(entry)
175
+ return grouped
176
+
177
+ def print_report(novos_com_tag: List[dict], novos_sem_tag: List[dict]) -> None:
178
+ """Exibe relatório visual do delta detectado."""
179
+ total_novos = len(novos_com_tag) + len(novos_sem_tag)
180
+
181
+ print()
182
+ print("╔" + "═" * 78 + "╗")
183
+ print("║" + "SOURCE SYNC - RELATÓRIO DE DELTA".center(78) + "║")
184
+ print("╠" + "═" * 78 + "╣")
185
+ print(f"║ NOVOS ARQUIVOS DETECTADOS: {total_novos:<48}║")
186
+ print("║" + " " * 78 + "║")
187
+
188
+ # Agrupar por fonte
189
+ all_novos = novos_com_tag + novos_sem_tag
190
+ grouped = group_by_source(all_novos)
191
+
192
+ print("║ POR FONTE:" + " " * 66 + "║")
193
+ for sheet, entries in sorted(grouped.items()):
194
+ prefix = SHEET_TO_PREFIX.get(sheet, "??")
195
+ line = f" ├── {sheet[:30]:<30} ({prefix}): {len(entries):>3} novos"
196
+ print(f"║{line:<78}║")
197
+
198
+ print("║" + " " * 78 + "║")
199
+ print("║ AÇÕES NECESSÁRIAS:" + " " * 58 + "║")
200
+ print(f"║ ├── TAGs a gerar: {len(novos_sem_tag):<3} (arquivos sem TAG)" + " " * 27 + "║")
201
+ print(f"║ ├── Downloads: {total_novos:<3} arquivos" + " " * 34 + "║")
202
+ print("║ └── Destino: inbox/[FONTE]/[TIPO]/" + " " * 38 + "║")
203
+ print("╚" + "═" * 78 + "╝")
204
+ print()
205
+
206
+ def update_sync_state(novos_count: int, status: str = "CHECKED") -> None:
207
+ """Atualiza estado da sincronização."""
208
+ state = {
209
+ "last_sync": datetime.now().isoformat(),
210
+ "last_status": status,
211
+ "last_delta_count": novos_count,
212
+ "planilha_id": PLANILHA_ID
213
+ }
214
+ save_json(state, SYNC_STATE_FILE)
215
+
216
+ def save_delta_pending(novos_com_tag: List[dict], novos_sem_tag: List[dict]) -> None:
217
+ """Salva delta pendente para processamento posterior."""
218
+ delta = {
219
+ "timestamp": datetime.now().isoformat(),
220
+ "com_tag": novos_com_tag,
221
+ "sem_tag": novos_sem_tag,
222
+ "total": len(novos_com_tag) + len(novos_sem_tag)
223
+ }
224
+ save_json(delta, DELTA_PENDING_FILE)
225
+
226
+ #=================================
227
+ # MAIN
228
+ #=================================
229
+
230
+ def main():
231
+ """Função principal - executa detecção de delta."""
232
+ print("\n" + "=" * 80)
233
+ print("SOURCE SYNC - Detecção de Delta")
234
+ print("=" * 80)
235
+
236
+ # 1. Carregar snapshot
237
+ print("\n📁 Carregando snapshot local...")
238
+ snapshot = load_snapshot()
239
+ snapshot_tags = get_snapshot_tags(snapshot)
240
+ print(f" → {len(snapshot_tags)} TAGs no snapshot")
241
+
242
+ # 2. NOTA: A leitura real da planilha deve ser feita via MCP no Claude
243
+ print("\n⚠️ Este script prepara a estrutura de dados.")
244
+ print(" A leitura real da planilha deve ser feita via MCP gdrive.")
245
+ print(" Use o comando /source-sync no Claude para execução completa.")
246
+
247
+ # 3. Exibir estado atual
248
+ print("\n📊 Estado atual:")
249
+ print(f" → Snapshot: {PLANILHA_INDEX_FILE}")
250
+ print(f" → State: {SYNC_STATE_FILE}")
251
+ print(f" → Delta: {DELTA_PENDING_FILE}")
252
+
253
+ # 4. Verificar se há delta pendente
254
+ if DELTA_PENDING_FILE.exists():
255
+ delta = load_json(DELTA_PENDING_FILE)
256
+ if delta.get("total", 0) > 0:
257
+ print(f"\n⚠️ DELTA PENDENTE: {delta['total']} arquivos aguardando")
258
+ print(f" → Timestamp: {delta.get('timestamp', 'N/A')}")
259
+
260
+ print("\n" + "=" * 80)
261
+ print("Use /source-sync no Claude para sincronização completa via MCP")
262
+ print("=" * 80 + "\n")
263
+
264
+ if __name__ == "__main__":
265
+ main()
@@ -0,0 +1,276 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ FASE 2.5 - Script de Tagueamento de Arquivos INBOX
4
+ Mega Brain - Sistema de Inteligencia de Negocios
5
+
6
+ Este script:
7
+ 1. Le a planilha de controle e extrai mapeamento nome -> TAG
8
+ 2. Varre todos os arquivos do INBOX recursivamente
9
+ 3. Faz matching entre arquivos e TAGs
10
+ 4. Renomeia arquivos com prefixo [TAG]
11
+ 5. Gera relatorio de arquivos processados vs orfaos
12
+ """
13
+
14
+ import os
15
+ import re
16
+ import json
17
+ from pathlib import Path
18
+ from datetime import datetime
19
+
20
+ # Configuracoes
21
+ INBOX_PATH = "inbox"
22
+ SCHEMA_PATH = ".claude/mission-control/SPREADSHEET-SCHEMA.json"
23
+ OUTPUT_PATH = ".claude/mission-control/TAG-MAPPING-REPORT.json"
24
+
25
+ # Mapeamento de pasta INBOX -> prefixo TAG
26
+ FOLDER_TO_PREFIX = {
27
+ "JEREMY MINER": "JM",
28
+ "JEREMY HAYNES": ["JH-ST", "JH-IC", "JH-WK", "AOBA", "PCVP", "LYFC", "MMM", "30DC", "STA", "UHTC"],
29
+ "THE SCALABLE COMPANY": "TSC",
30
+ "ALEX HORMOZI": "AH",
31
+ "JEREMY HAYNES PROGRAM": "CA",
32
+ "SAM OVEN (SETTERLUN UNIVERSITY)": None, # Nao tem na planilha ainda
33
+ "SETTERLUN (SETTERLUN UNIVERSITY)": None,
34
+ }
35
+
36
+ def extract_number_from_filename(filename):
37
+ """Extrai o numero do inicio do nome do arquivo."""
38
+ # Padroes comuns:
39
+ # "6 - 42 Minutes of Sales Training.txt"
40
+ # "112. How To Get Prospects.txt"
41
+ # "44 - LIVE CALL A Masterclass.txt"
42
+
43
+ patterns = [
44
+ r'^(\d+)\s*[-\.]\s*', # "123 - " ou "123. "
45
+ r'^(\d+)\.\s*', # "123. "
46
+ r'^(\d+)\s+', # "123 "
47
+ ]
48
+
49
+ for pattern in patterns:
50
+ match = re.match(pattern, filename)
51
+ if match:
52
+ return int(match.group(1))
53
+ return None
54
+
55
+ def clean_filename_for_matching(filename):
56
+ """Limpa o nome do arquivo para facilitar matching."""
57
+ # Remove extensao
58
+ name = os.path.splitext(filename)[0]
59
+ # Remove timestamps no final
60
+ name = re.sub(r'_\d{14}$', '', name)
61
+ # Remove numero inicial
62
+ name = re.sub(r'^\d+\s*[-\.]\s*', '', name)
63
+ # Lowercase e remove caracteres especiais
64
+ name = name.lower()
65
+ name = re.sub(r'[^\w\s]', ' ', name)
66
+ name = re.sub(r'\s+', ' ', name).strip()
67
+ return name
68
+
69
+ def determine_prefix_from_path(filepath):
70
+ """Determina o prefixo TAG baseado no caminho do arquivo."""
71
+ path_str = str(filepath).upper()
72
+
73
+ for folder, prefix in FOLDER_TO_PREFIX.items():
74
+ if folder in path_str:
75
+ return prefix
76
+ return None
77
+
78
+ def scan_inbox_files():
79
+ """Varre todos os arquivos do INBOX recursivamente."""
80
+ files = []
81
+ extensions = {'.txt', '.docx', '.pdf'}
82
+
83
+ for root, dirs, filenames in os.walk(INBOX_PATH):
84
+ # Ignorar pastas de backup/template
85
+ if '_BACKUP' in root or '_TEMPLATE' in root:
86
+ continue
87
+
88
+ for filename in filenames:
89
+ ext = os.path.splitext(filename)[1].lower()
90
+ if ext in extensions:
91
+ filepath = Path(root) / filename
92
+
93
+ # Verificar se ja tem TAG no nome
94
+ has_tag = bool(re.match(r'^\[[\w-]+\]', filename))
95
+
96
+ files.append({
97
+ 'path': str(filepath),
98
+ 'filename': filename,
99
+ 'folder': os.path.basename(root),
100
+ 'parent_folder': os.path.basename(os.path.dirname(root)),
101
+ 'number': extract_number_from_filename(filename),
102
+ 'clean_name': clean_filename_for_matching(filename),
103
+ 'has_tag': has_tag,
104
+ 'suggested_prefix': determine_prefix_from_path(filepath)
105
+ })
106
+
107
+ return files
108
+
109
+ def generate_tag_from_number(prefix, number):
110
+ """Gera TAG no formato [PREFIX]-[NNNN]."""
111
+ if isinstance(prefix, list):
112
+ prefix = prefix[0] # Usar primeiro prefixo como padrao
113
+ return f"{prefix}-{number:04d}"
114
+
115
+ def rename_file_with_tag(filepath, tag):
116
+ """Renomeia arquivo adicionando prefixo [TAG]."""
117
+ path = Path(filepath)
118
+ new_name = f"[{tag}] {path.name}"
119
+ new_path = path.parent / new_name
120
+
121
+ # Verificar se destino ja existe
122
+ if new_path.exists():
123
+ return None, "Destino ja existe"
124
+
125
+ try:
126
+ path.rename(new_path)
127
+ return str(new_path), None
128
+ except Exception as e:
129
+ return None, str(e)
130
+
131
+ def execute_rename(report, dry_run=False):
132
+ """Executa a renomeacao dos arquivos."""
133
+ print()
134
+ print("=" * 60)
135
+ print("EXECUTANDO RENOMEACAO" + (" (DRY RUN)" if dry_run else ""))
136
+ print("=" * 60)
137
+ print()
138
+
139
+ success = 0
140
+ errors = []
141
+
142
+ for item in report['to_tag']:
143
+ filepath = item['current_path']
144
+ tag = item['suggested_tag']
145
+
146
+ if dry_run:
147
+ path = Path(filepath)
148
+ new_name = f"[{tag}] {path.name}"
149
+ print(f" [DRY] {path.name}")
150
+ print(f" -> {new_name}")
151
+ success += 1
152
+ else:
153
+ new_path, error = rename_file_with_tag(filepath, tag)
154
+ if error:
155
+ errors.append({'path': filepath, 'error': error})
156
+ print(f" [ERRO] {item['filename']}: {error}")
157
+ else:
158
+ success += 1
159
+ if success % 50 == 0:
160
+ print(f" Renomeados: {success}/{len(report['to_tag'])}")
161
+
162
+ print()
163
+ print("=" * 60)
164
+ print("RESULTADO")
165
+ print("=" * 60)
166
+ print(f" Sucesso: {success}")
167
+ print(f" Erros: {len(errors)}")
168
+
169
+ if errors:
170
+ print()
171
+ print("ERROS:")
172
+ for e in errors[:10]: # Mostrar apenas primeiros 10
173
+ print(f" - {e['path']}: {e['error']}")
174
+ if len(errors) > 10:
175
+ print(f" ... e mais {len(errors) - 10} erros")
176
+
177
+ return success, errors
178
+
179
+
180
+ def main(execute=False, dry_run=False):
181
+ print("=" * 60)
182
+ print("FASE 2.5 - TAGUEAMENTO DE ARQUIVOS INBOX")
183
+ print("=" * 60)
184
+ print()
185
+
186
+ # 1. Carregar schema
187
+ print("[1/4] Carregando schema...")
188
+ with open(SCHEMA_PATH, 'r', encoding='utf-8') as f:
189
+ schema = json.load(f)
190
+
191
+ # 2. Escanear arquivos
192
+ print("[2/4] Escaneando INBOX...")
193
+ files = scan_inbox_files()
194
+ print(f" Encontrados: {len(files)} arquivos")
195
+
196
+ # 3. Classificar arquivos
197
+ print("[3/4] Classificando arquivos...")
198
+
199
+ already_tagged = [f for f in files if f['has_tag']]
200
+ to_tag = [f for f in files if not f['has_tag'] and f['suggested_prefix'] and f['number']]
201
+ orphans = [f for f in files if not f['has_tag'] and (not f['suggested_prefix'] or not f['number'])]
202
+
203
+ print(f" Ja tagueados: {len(already_tagged)}")
204
+ print(f" Para taguear: {len(to_tag)}")
205
+ print(f" Orfaos: {len(orphans)}")
206
+
207
+ # 4. Gerar relatorio
208
+ print("[4/4] Gerando relatorio...")
209
+
210
+ report = {
211
+ 'timestamp': datetime.now().isoformat(),
212
+ 'summary': {
213
+ 'total_files': len(files),
214
+ 'already_tagged': len(already_tagged),
215
+ 'to_tag': len(to_tag),
216
+ 'orphans': len(orphans)
217
+ },
218
+ 'to_tag': [],
219
+ 'orphans': []
220
+ }
221
+
222
+ for f in to_tag:
223
+ prefix = f['suggested_prefix']
224
+ if isinstance(prefix, list):
225
+ prefix = prefix[0]
226
+ tag = generate_tag_from_number(prefix, f['number'])
227
+ report['to_tag'].append({
228
+ 'current_path': f['path'],
229
+ 'suggested_tag': tag,
230
+ 'filename': f['filename'],
231
+ 'folder': f['folder']
232
+ })
233
+
234
+ for f in orphans:
235
+ report['orphans'].append({
236
+ 'path': f['path'],
237
+ 'filename': f['filename'],
238
+ 'folder': f['folder'],
239
+ 'reason': 'Sem prefixo conhecido' if not f['suggested_prefix'] else 'Sem numero no nome'
240
+ })
241
+
242
+ # Salvar relatorio
243
+ with open(OUTPUT_PATH, 'w', encoding='utf-8') as f:
244
+ json.dump(report, f, ensure_ascii=False, indent=2)
245
+
246
+ print()
247
+ print("=" * 60)
248
+ print("RELATORIO GERADO")
249
+ print("=" * 60)
250
+ print(f"Arquivo: {OUTPUT_PATH}")
251
+
252
+ # 5. Executar renomeacao se solicitado
253
+ if execute:
254
+ success, errors = execute_rename(report, dry_run)
255
+ report['execution'] = {
256
+ 'success': success,
257
+ 'errors': len(errors),
258
+ 'error_details': errors
259
+ }
260
+ # Atualizar relatorio com resultado
261
+ with open(OUTPUT_PATH, 'w', encoding='utf-8') as f:
262
+ json.dump(report, f, ensure_ascii=False, indent=2)
263
+ else:
264
+ print()
265
+ print("PROXIMO PASSO: Executar com --execute para renomear")
266
+ print(" Ou --dry-run para simular")
267
+
268
+ print()
269
+ return report
270
+
271
+
272
+ if __name__ == '__main__':
273
+ import sys
274
+ execute = '--execute' in sys.argv
275
+ dry_run = '--dry-run' in sys.argv
276
+ main(execute=execute, dry_run=dry_run)