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,77 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Script para extrair texto de arquivos .docx baixados do Google Drive (base64)
4
+ """
5
+
6
+ import base64
7
+ import zipfile
8
+ import io
9
+ import re
10
+ import sys
11
+ import os
12
+
13
+ def decode_base64_docx(base64_content):
14
+ """Decodifica conteúdo base64 para bytes"""
15
+ # Remove possíveis prefixos de data URI
16
+ if ',' in base64_content:
17
+ base64_content = base64_content.split(',')[1]
18
+
19
+ # Remove whitespace
20
+ base64_content = base64_content.strip().replace('\n', '').replace('\r', '')
21
+
22
+ return base64.b64decode(base64_content)
23
+
24
+ def extract_text_from_docx_bytes(docx_bytes):
25
+ """Extrai texto de um arquivo .docx (que é um ZIP)"""
26
+ try:
27
+ # Abre como ZIP
28
+ with zipfile.ZipFile(io.BytesIO(docx_bytes)) as zf:
29
+ # Lê word/document.xml
30
+ with zf.open('word/document.xml') as doc:
31
+ xml_content = doc.read().decode('utf-8')
32
+
33
+ # Remove tags XML, mantendo apenas texto
34
+ # Padrão para encontrar texto entre tags <w:t>
35
+ text_parts = re.findall(r'<w:t[^>]*>([^<]*)</w:t>', xml_content)
36
+
37
+ # Junta tudo
38
+ raw_text = ''.join(text_parts)
39
+
40
+ # Limpa e formata
41
+ # Substitui múltiplos espaços por um
42
+ text = re.sub(r' +', ' ', raw_text)
43
+
44
+ # Tenta preservar parágrafos baseado em padrões comuns
45
+ # Adiciona quebras antes de números que parecem timestamps ou marcadores
46
+ text = re.sub(r'(\d{1,2}:\d{2})', r'\n\1', text)
47
+
48
+ return text.strip()
49
+
50
+ except Exception as e:
51
+ return f"ERRO ao extrair texto: {str(e)}"
52
+
53
+ def process_file(base64_content, output_path):
54
+ """Processa um arquivo: decode + extract + save"""
55
+ try:
56
+ # Decodifica base64
57
+ docx_bytes = decode_base64_docx(base64_content)
58
+
59
+ # Extrai texto
60
+ text = extract_text_from_docx_bytes(docx_bytes)
61
+
62
+ # Cria diretório se necessário
63
+ os.makedirs(os.path.dirname(output_path), exist_ok=True)
64
+
65
+ # Salva como .txt
66
+ with open(output_path, 'w', encoding='utf-8') as f:
67
+ f.write(text)
68
+
69
+ return True, len(text)
70
+
71
+ except Exception as e:
72
+ return False, str(e)
73
+
74
+ if __name__ == "__main__":
75
+ # Teste básico
76
+ if len(sys.argv) > 1:
77
+ print(f"Script pronto. Use as funções: decode_base64_docx, extract_text_from_docx_bytes, process_file")
@@ -0,0 +1,5 @@
1
+ # Stub — full implementation pending
2
+
3
+
4
+ class JarvisOrchestrator:
5
+ pass
@@ -0,0 +1,246 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ ORGANIZED DOWNLOADER - Download com TAG
4
+ Mega Brain - Sistema de Inteligência de Negócios
5
+
6
+ Baixa arquivos do Google Drive JÁ com [TAG] no nome.
7
+ Organiza automaticamente em inbox/[SOURCE]/
8
+
9
+ USO: Este script é chamado pelo JARVIS via MCP, não diretamente.
10
+ """
11
+
12
+ import os
13
+ import json
14
+ import re
15
+ from datetime import datetime
16
+ from pathlib import Path
17
+
18
+ # Configurações
19
+ MEGA_BRAIN = "."
20
+ INBOX = f"{MEGA_BRAIN}/inbox"
21
+ MISSION_CONTROL = f"{MEGA_BRAIN}/.claude/mission-control"
22
+ PLANILHA_INDEX = f"{MISSION_CONTROL}/PLANILHA-INDEX.json"
23
+ DOWNLOAD_LOG = f"{MISSION_CONTROL}/DOWNLOAD-LOG.json"
24
+
25
+ # Mapeamento de prefixo → pasta no INBOX
26
+ PREFIX_TO_FOLDER = {
27
+ "JM": "JEREMY MINER",
28
+ "JH-ST": "JEREMY HAYNES/SALES TRAINING",
29
+ "JH-IC": "JEREMY HAYNES/INNER CIRCLE",
30
+ "JH-WK": "JEREMY HAYNES/WEEKLY CALLS",
31
+ "AOBA": "JEREMY HAYNES/AOBA",
32
+ "PCVP": "JEREMY HAYNES/PCVP",
33
+ "LYFC": "JEREMY HAYNES/LYFC",
34
+ "MMM": "JEREMY HAYNES/MMM",
35
+ "30DC": "JEREMY HAYNES/30DC",
36
+ "STA": "JEREMY HAYNES/STA",
37
+ "UHTC": "JEREMY HAYNES/UHTC",
38
+ "CG": "COLE GORDON",
39
+ "TSC": "COLE GORDON/TSC",
40
+ "EDC": "COLE GORDON/EAD",
41
+ "AH": "ALEX HORMOZI",
42
+ "CA": "JEREMY HAYNES PROGRAM"
43
+ }
44
+
45
+
46
+ def sanitize_filename(name):
47
+ """Remove caracteres inválidos do nome do arquivo."""
48
+ invalid_chars = '<>:"/\\|?*'
49
+ for char in invalid_chars:
50
+ name = name.replace(char, '_')
51
+ return name.strip()
52
+
53
+
54
+ def get_folder_for_tag(tag):
55
+ """Retorna pasta de destino baseada no prefixo da TAG."""
56
+ for prefix, folder in PREFIX_TO_FOLDER.items():
57
+ if tag.startswith(prefix + "-"):
58
+ return folder
59
+ return "OUTROS"
60
+
61
+
62
+ def format_tagged_filename(tag, original_name):
63
+ """Formata nome do arquivo com TAG."""
64
+ clean_name = sanitize_filename(original_name)
65
+ return f"[{tag}] {clean_name}"
66
+
67
+
68
+ def prepare_download_operations(tagged_entries):
69
+ """
70
+ Prepara operações de download para MCP.
71
+
72
+ Args:
73
+ tagged_entries: Lista de entradas já tagueadas na planilha
74
+ Formato: [{'tag': 'JM-0001', 'name': '...', 'file_id': '...', ...}]
75
+
76
+ Returns:
77
+ Lista de operações de download
78
+ """
79
+ operations = []
80
+
81
+ for entry in tagged_entries:
82
+ tag = entry.get('tag', '')
83
+ original_name = entry.get('name', entry.get('original_name', 'arquivo'))
84
+ file_id = entry.get('file_id', entry.get('drive_id', ''))
85
+
86
+ if not tag or not file_id:
87
+ continue
88
+
89
+ folder = get_folder_for_tag(tag)
90
+ dest_folder = os.path.join(INBOX, folder)
91
+ tagged_name = format_tagged_filename(tag, original_name)
92
+ dest_path = os.path.join(dest_folder, tagged_name)
93
+
94
+ operations.append({
95
+ 'type': 'download',
96
+ 'file_id': file_id,
97
+ 'original_name': original_name,
98
+ 'tagged_name': tagged_name,
99
+ 'tag': tag,
100
+ 'dest_folder': dest_folder,
101
+ 'dest_path': dest_path,
102
+ 'source': folder.split('/')[0] if '/' in folder else folder
103
+ })
104
+
105
+ return operations
106
+
107
+
108
+ def ensure_folders_exist(operations):
109
+ """Cria pastas de destino se não existirem."""
110
+ folders = set(op['dest_folder'] for op in operations)
111
+ created = []
112
+
113
+ for folder in folders:
114
+ if not os.path.exists(folder):
115
+ os.makedirs(folder, exist_ok=True)
116
+ created.append(folder)
117
+
118
+ return created
119
+
120
+
121
+ def generate_download_report(operations):
122
+ """Gera relatório de downloads."""
123
+ report = {
124
+ 'timestamp': datetime.now().isoformat(),
125
+ 'total_downloads': len(operations),
126
+ 'by_source': {},
127
+ 'operations': operations
128
+ }
129
+
130
+ for op in operations:
131
+ source = op['source']
132
+ if source not in report['by_source']:
133
+ report['by_source'][source] = 0
134
+ report['by_source'][source] += 1
135
+
136
+ return report
137
+
138
+
139
+ def log_downloads(operations, success_ids):
140
+ """Registra downloads realizados."""
141
+ log_path = DOWNLOAD_LOG
142
+
143
+ if os.path.exists(log_path):
144
+ with open(log_path, 'r', encoding='utf-8') as f:
145
+ log = json.load(f)
146
+ else:
147
+ log = {'downloads': [], 'stats': {'total': 0, 'by_date': {}}}
148
+
149
+ today = datetime.now().strftime('%Y-%m-%d')
150
+
151
+ for op in operations:
152
+ if op['file_id'] in success_ids:
153
+ log['downloads'].append({
154
+ 'timestamp': datetime.now().isoformat(),
155
+ 'tag': op['tag'],
156
+ 'file_id': op['file_id'],
157
+ 'dest_path': op['dest_path']
158
+ })
159
+ log['stats']['total'] += 1
160
+
161
+ if today not in log['stats']['by_date']:
162
+ log['stats']['by_date'][today] = 0
163
+ log['stats']['by_date'][today] += 1
164
+
165
+ with open(log_path, 'w', encoding='utf-8') as f:
166
+ json.dump(log, f, indent=2, ensure_ascii=False)
167
+
168
+ return log
169
+
170
+
171
+ def update_planilha_index(operations, success_ids):
172
+ """Atualiza índice da planilha com status de download."""
173
+ if not os.path.exists(PLANILHA_INDEX):
174
+ return
175
+
176
+ with open(PLANILHA_INDEX, 'r', encoding='utf-8') as f:
177
+ index = json.load(f)
178
+
179
+ downloaded_tags = {op['tag'] for op in operations if op['file_id'] in success_ids}
180
+
181
+ for entry in index.get('entries', []):
182
+ if entry.get('tag') in downloaded_tags:
183
+ entry['downloaded'] = True
184
+ entry['download_date'] = datetime.now().isoformat()
185
+
186
+ with open(PLANILHA_INDEX, 'w', encoding='utf-8') as f:
187
+ json.dump(index, f, indent=2, ensure_ascii=False)
188
+
189
+
190
+ def main(tagged_entries=None, preview=True):
191
+ """
192
+ Função principal do downloader.
193
+
194
+ Args:
195
+ tagged_entries: Lista de entradas já tagueadas
196
+ preview: Se True, apenas mostra relatório
197
+
198
+ Returns:
199
+ Se preview=True: relatório
200
+ Se preview=False: lista de operações para MCP
201
+ """
202
+ print("=" * 60)
203
+ print("ORGANIZED DOWNLOADER - Download com TAG")
204
+ print("=" * 60)
205
+ print()
206
+
207
+ if tagged_entries is None:
208
+ print("[MODO STANDALONE]")
209
+ print("Passe tagged_entries para executar.")
210
+ return None
211
+
212
+ operations = prepare_download_operations(tagged_entries)
213
+
214
+ if not operations:
215
+ print("✅ Nenhum download pendente!")
216
+ return []
217
+
218
+ report = generate_download_report(operations)
219
+
220
+ print(f"Downloads preparados: {report['total_downloads']}")
221
+ print()
222
+ print("Por fonte:")
223
+ for source, count in sorted(report['by_source'].items()):
224
+ print(f" {source}: {count}")
225
+ print()
226
+
227
+ if preview:
228
+ print("Arquivos:")
229
+ for i, op in enumerate(operations[:5], 1):
230
+ print(f" {i}. [{op['tag']}] → {op['source']}")
231
+ if len(operations) > 5:
232
+ print(f" ... e mais {len(operations) - 5}")
233
+ print()
234
+ print("MODO PREVIEW - Nenhum download realizado.")
235
+ return report
236
+
237
+ # Criar pastas
238
+ created_folders = ensure_folders_exist(operations)
239
+ if created_folders:
240
+ print(f"Pastas criadas: {len(created_folders)}")
241
+
242
+ return operations
243
+
244
+
245
+ if __name__ == '__main__':
246
+ main()
@@ -0,0 +1,187 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ PLANILHA TAGGER - Tagueamento na Fonte
4
+ Mega Brain - Sistema de Inteligência de Negócios
5
+
6
+ Escreve TAGs diretamente na planilha de controle via MCP gdrive.
7
+ TAGs são escritas NA FONTE, não localmente.
8
+
9
+ USO: Este script é chamado pelo JARVIS via MCP, não diretamente.
10
+ """
11
+
12
+ import os
13
+ import json
14
+ from datetime import datetime
15
+ from pathlib import Path
16
+
17
+ # Configurações
18
+ MISSION_CONTROL = ".claude/mission-control"
19
+ PLANILHA_INDEX = f"{MISSION_CONTROL}/PLANILHA-INDEX.json"
20
+ SOURCE_SYNC_STATE = f"{MISSION_CONTROL}/SOURCE-SYNC-STATE.json"
21
+
22
+ # Mapeamento de abas → prefixos de TAG
23
+ SHEET_TO_PREFIX = {
24
+ "Jeremy Miner": "JM",
25
+ "Jeremy Haynes Sales Training": "JH-ST",
26
+ "Jeremy Haynes Inner Circle": "JH-IC",
27
+ "Inner Circle Weekly Group Call Recordings": "JH-WK",
28
+ "Agency Blueprint": "AOBA",
29
+ "Cold Video Pitch": "PCVP",
30
+ "Land Your First Agency Client": "LYFC",
31
+ "Marketer Mindset Masterclass": "MMM",
32
+ "30 Days Challenge": "30DC",
33
+ "Scale The Agency": "STA",
34
+ "Ultra High Ticket Closer": "UHTC",
35
+ "Cole Gordon": "CG",
36
+ "The Scalable Company": "TSC",
37
+ "Sales Training BR": "EDC",
38
+ "Alex Hormozi": "AH",
39
+ "Jeremy Haynes Program": "CA",
40
+ }
41
+
42
+ TAG_COLUMN = "I"
43
+ TAG_COLUMN_INDEX = 8
44
+
45
+
46
+ def load_planilha_index():
47
+ """Carrega índice da planilha."""
48
+ if os.path.exists(PLANILHA_INDEX):
49
+ with open(PLANILHA_INDEX, 'r', encoding='utf-8') as f:
50
+ return json.load(f)
51
+ return {"entries": [], "timestamp": None}
52
+
53
+
54
+ def get_existing_tags(index, prefix):
55
+ """Retorna todas as TAGs existentes para um prefixo."""
56
+ tags = set()
57
+ for entry in index.get('entries', []):
58
+ tag = entry.get('tag', '')
59
+ if tag.startswith(prefix + "-"):
60
+ tags.add(tag)
61
+ return tags
62
+
63
+
64
+ def generate_next_tag(prefix, existing_tags):
65
+ """Gera próxima TAG sequencial para um prefixo."""
66
+ max_num = 0
67
+ for tag in existing_tags:
68
+ if tag.startswith(prefix + "-"):
69
+ try:
70
+ num_part = tag.split("-")[-1]
71
+ num = int(num_part)
72
+ if num > max_num:
73
+ max_num = num
74
+ except ValueError:
75
+ continue
76
+ return f"{prefix}-{str(max_num + 1).zfill(4)}"
77
+
78
+
79
+ def identify_untagged_entries(delta_entries, index):
80
+ """Identifica entradas que precisam de TAG."""
81
+ untagged = []
82
+
83
+ for entry in delta_entries:
84
+ if entry.get('tag') and entry['tag'].strip():
85
+ continue
86
+
87
+ sheet_name = entry.get('sheet', '')
88
+ prefix = SHEET_TO_PREFIX.get(sheet_name)
89
+
90
+ if not prefix:
91
+ for sheet, pf in SHEET_TO_PREFIX.items():
92
+ if sheet.lower() in sheet_name.lower():
93
+ prefix = pf
94
+ break
95
+
96
+ if prefix:
97
+ untagged.append({
98
+ 'entry': entry,
99
+ 'prefix': prefix,
100
+ 'sheet': sheet_name
101
+ })
102
+
103
+ return untagged
104
+
105
+
106
+ def prepare_tag_operations(untagged, index):
107
+ """Prepara operações de tagueamento para MCP."""
108
+ operations = []
109
+ by_prefix = {}
110
+
111
+ for item in untagged:
112
+ prefix = item['prefix']
113
+ if prefix not in by_prefix:
114
+ by_prefix[prefix] = []
115
+ by_prefix[prefix].append(item)
116
+
117
+ for prefix, items in by_prefix.items():
118
+ existing_tags = get_existing_tags(index, prefix)
119
+
120
+ for item in items:
121
+ new_tag = generate_next_tag(prefix, existing_tags)
122
+ existing_tags.add(new_tag)
123
+
124
+ entry = item['entry']
125
+ operations.append({
126
+ 'type': 'write_tag',
127
+ 'spreadsheet_id': entry.get('spreadsheet_id'),
128
+ 'sheet_name': item['sheet'],
129
+ 'row': entry.get('row'),
130
+ 'column': TAG_COLUMN,
131
+ 'range': f"'{item['sheet']}'!{TAG_COLUMN}{entry.get('row')}",
132
+ 'value': new_tag,
133
+ 'original_name': entry.get('name', ''),
134
+ 'prefix': prefix
135
+ })
136
+
137
+ return operations
138
+
139
+
140
+ def generate_tag_report(operations):
141
+ """Gera relatório de operações de tagueamento."""
142
+ report = {
143
+ 'timestamp': datetime.now().isoformat(),
144
+ 'total_operations': len(operations),
145
+ 'by_prefix': {},
146
+ 'operations': operations
147
+ }
148
+
149
+ for op in operations:
150
+ prefix = op['prefix']
151
+ if prefix not in report['by_prefix']:
152
+ report['by_prefix'][prefix] = 0
153
+ report['by_prefix'][prefix] += 1
154
+
155
+ return report
156
+
157
+
158
+ def main(delta_entries=None, preview=True):
159
+ """Função principal do tagger."""
160
+ index = load_planilha_index()
161
+
162
+ if delta_entries is None:
163
+ print("PLANILHA TAGGER - Modo Standalone")
164
+ print("Passe delta_entries para executar.")
165
+ return None
166
+
167
+ untagged = identify_untagged_entries(delta_entries, index)
168
+
169
+ if not untagged:
170
+ print("✅ Todas as entradas já possuem TAG!")
171
+ return []
172
+
173
+ operations = prepare_tag_operations(untagged, index)
174
+ report = generate_tag_report(operations)
175
+
176
+ print(f"TAGs a escrever: {report['total_operations']}")
177
+ for prefix, count in sorted(report['by_prefix'].items()):
178
+ print(f" {prefix}: {count}")
179
+
180
+ if preview:
181
+ return None
182
+
183
+ return operations
184
+
185
+
186
+ if __name__ == '__main__':
187
+ main()
@@ -0,0 +1,70 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ REVERT - Remove TAGs incorretas dos arquivos
4
+ """
5
+
6
+ import os
7
+ import re
8
+ from pathlib import Path
9
+
10
+ INBOX_PATH = "inbox"
11
+
12
+ def revert_tags():
13
+ print("=" * 60)
14
+ print("REVERTENDO TAGS INCORRETAS")
15
+ print("=" * 60)
16
+
17
+ # Encontrar arquivos com TAG
18
+ tagged_files = []
19
+ pattern = re.compile(r'^\[[\w-]+\]\s*')
20
+
21
+ for root, dirs, files in os.walk(INBOX_PATH):
22
+ if '_BACKUP' in root or '_TEMPLATE' in root:
23
+ continue
24
+ for filename in files:
25
+ if pattern.match(filename):
26
+ tagged_files.append(Path(root) / filename)
27
+
28
+ print(f"\nEncontrados: {len(tagged_files)} arquivos com TAG")
29
+
30
+ # Reverter
31
+ success = 0
32
+ errors = []
33
+
34
+ for filepath in tagged_files:
35
+ old_name = filepath.name
36
+ # Remove [TAG] do início
37
+ new_name = pattern.sub('', old_name)
38
+ new_path = filepath.parent / new_name
39
+
40
+ # Verificar se destino já existe
41
+ if new_path.exists():
42
+ errors.append({'path': str(filepath), 'error': f'Destino já existe: {new_name}'})
43
+ continue
44
+
45
+ try:
46
+ filepath.rename(new_path)
47
+ success += 1
48
+ if success % 50 == 0:
49
+ print(f" Revertidos: {success}/{len(tagged_files)}")
50
+ except Exception as e:
51
+ errors.append({'path': str(filepath), 'error': str(e)})
52
+
53
+ print()
54
+ print("=" * 60)
55
+ print("RESULTADO")
56
+ print("=" * 60)
57
+ print(f" Sucesso: {success}")
58
+ print(f" Erros: {len(errors)}")
59
+
60
+ if errors:
61
+ print("\nERROS:")
62
+ for e in errors[:20]:
63
+ print(f" - {e['path']}: {e['error']}")
64
+ if len(errors) > 20:
65
+ print(f" ... e mais {len(errors) - 20} erros")
66
+
67
+ return success, errors
68
+
69
+ if __name__ == '__main__':
70
+ revert_tags()