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,250 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Complete Tag Matching Script - DE-PARA 1-a-1
4
+ Matches each untagged file to its correct planilha entry and applies TAG
5
+ """
6
+
7
+ import os
8
+ import re
9
+ import json
10
+ from difflib import SequenceMatcher
11
+
12
+ # Planilha data - extracted from Google Sheets
13
+ PLANILHA_DATA = {
14
+ "30 Days Challenge": {
15
+ "prefix": "30DC",
16
+ "entries": {
17
+ "1 - Day 1": "30DC-0001",
18
+ "2 - Day 2": "30DC-0002",
19
+ "3 - Day 3": "30DC-0003",
20
+ "4 - Day 4": "30DC-0004",
21
+ "5 - Day 5": "30DC-0005",
22
+ "6 - Day 6": "30DC-0006",
23
+ "7 - Day 7": "30DC-0007",
24
+ "8 - Day 8": "30DC-0008",
25
+ "9 - Day 9": "30DC-0009",
26
+ "10 - Day 10": "30DC-0010",
27
+ "11 - Day 11.": "30DC-0011",
28
+ "12 - Day 12.": "30DC-0012",
29
+ "13- Day 13.": "30DC-0013",
30
+ "14 - Day 14.": "30DC-0014",
31
+ "15 - Day 15": "30DC-0015",
32
+ "16 - Day 16": "30DC-0016",
33
+ "17 - Day 17": "30DC-0017",
34
+ "18 - Day 18": "30DC-0018",
35
+ "19 - Day 19": "30DC-0019",
36
+ "20 - Day 20": "30DC-0020",
37
+ "21 - Day 21": "30DC-0021",
38
+ "22 - Day 22": "30DC-0022",
39
+ "23 - Day 23": "30DC-0023",
40
+ "24 - Day 24": "30DC-0024",
41
+ "25 - Day 25": "30DC-0025",
42
+ "26 - Day 26": "30DC-0026",
43
+ "27 - Day 27": "30DC-0027",
44
+ "28 - Day 28": "30DC-0028",
45
+ "29 - Day 29.": "30DC-0029",
46
+ "30 - Day 30": "30DC-0030",
47
+ }
48
+ },
49
+ "Cold Video Pitch": {
50
+ "prefix": "PCVP",
51
+ "entries": {
52
+ "1. Power Of Cold Video.": "PCVP-0001",
53
+ "2. Selling Advertising.": "PCVP-0002",
54
+ "3. Social Media Management.": "PCVP-0003",
55
+ "4. Google PPC.": "PCVP-0004",
56
+ "5. Facebook And Instagram.": "PCVP-0005",
57
+ "6. Long Form Content Creation.": "PCVP-0006",
58
+ "7. Animation.": "PCVP-0007",
59
+ "8. Graphics Design.": "PCVP-0008",
60
+ "9. Google Listing.": "PCVP-0009",
61
+ "10. Redoing Thumbnails.": "PCVP-0010",
62
+ "11. Sell Funnels.": "PCVP-0011",
63
+ "12. Chatbots.": "PCVP-0012",
64
+ "13. PR Services.": "PCVP-0013",
65
+ }
66
+ },
67
+ "Agency Blueprint": {
68
+ "prefix": "AOBA",
69
+ "entries": {
70
+ "1. What Is A Marketing Agency.": "AOBA-0001",
71
+ "2. Phases Of A Marketing Agency.": "AOBA-0002",
72
+ "3. Skills Or No Skills.": "AOBA-0003",
73
+ "4. Is It Best To Have Stuff Or A Referral Network.": "AOBA-0004",
74
+ "5. What Are The Possible Limiting Beliefs.": "AOBA-0005",
75
+ "6. What Is PPHD.": "AOBA-0006",
76
+ "7. Leveraging The Facebook Group.": "AOBA-0007",
77
+ "8. Is It Best To Go General Or Niche.": "AOBA-0008",
78
+ "9. Whats The Best Business Model Service Clients Or Consulting.": "AOBA-0009",
79
+ "10. How To Keep A Real Perspective Of Things.": "AOBA-0010",
80
+ "11. Do You Need A Website For Your Agency.": "AOBA-0011",
81
+ "12. How To Become An Expert.": "AOBA-0012",
82
+ "13. Before You Even Think About Getting A Partner.": "AOBA-0013",
83
+ "14. How To Be Comfortable With Failure.": "AOBA-0014",
84
+ "15. Anatomy Of A Perfect Client.": "AOBA-0015",
85
+ "16. How To Keep Your Standards High.": "AOBA-0016",
86
+ "17. The Power Of Expert Positioning": "AOBA-0017",
87
+ "18. How To Improve Your Social Presence.": "AOBA-0018",
88
+ "19. The Best Way To Hijack Authority.": "AOBA-0019",
89
+ "20. Differences Between Hard Flex and Soft Flex.": "AOBA-0020",
90
+ "21. When To Ask For Testimonials.": "AOBA-0021",
91
+ "22. Every Result Is A Marketable Headline.": "AOBA-0022",
92
+ "23. How To PR For Expansion.": "AOBA-0023",
93
+ "24. How To Overcome Major Obstacles.": "AOBA-0024",
94
+ "25. Is It Better To Charge High-Ticket Or Competitive Pricing.": "AOBA-0025",
95
+ "26. What Are The Core Services To Offer.": "AOBA-0026",
96
+ "27. What Model Is Better Transactional Or Recurring.": "AOBA-0027",
97
+ "28. How To Move From Transactional To Recurring.": "AOBA-0028",
98
+ "29. How To Stay Away From Free To Paid Service.": "AOBA-0029",
99
+ "30. The Profit First Business Model.": "AOBA-0030",
100
+ "31. How To Manage Agency Costs.": "AOBA-0031",
101
+ "32. How To Setup Bank Accounts.": "AOBA-0032",
102
+ "33. State Of The Agency Contraction And Expansion.": "AOBA-0033",
103
+ "34. Refunds Policy No Refunds.": "AOBA-0034",
104
+ "35. Result-Driven Services.": "AOBA-0035",
105
+ "36. Is It Better To Have A Contract Or Not.": "AOBA-0036",
106
+ "37. Change Is The Only Constant.": "AOBA-0037",
107
+ "38. Is It Best To Get New Skills Or Referrals.": "AOBA-0038",
108
+ "39. Cash Is Like Oxygen.": "AOBA-0039",
109
+ "40. Why Big Companies Focus On Sales.": "AOBA-0040",
110
+ "41. Daily Attitude And Training": "AOBA-0041",
111
+ "42. How Your Outflow Equals Your Inflow.": "AOBA-0042",
112
+ "43. Money Is In The Follow Up.": "AOBA-0043",
113
+ "44. How To Use Conviction To Win More.": "AOBA-0044",
114
+ "45. How To Win The Sales Game.": "AOBA-0045",
115
+ "46. Duplicating Yourself With Sales People.": "AOBA-0046",
116
+ "47. How To Be Confident In Your Services.": "AOBA-0047",
117
+ "48. How To Keep Your Cool At All Times.": "AOBA-0048",
118
+ "49. Is Cold Calling Dead.": "AOBA-0049",
119
+ "50. How To Keep A Full Pipeline.": "AOBA-0050",
120
+ "51. When Is It Time To Fire A Client.": "AOBA-0051",
121
+ "52. How To Deal With More Rejection Than Acceptance": "AOBA-0052",
122
+ "53. What Is A VAK.": "AOBA-0053",
123
+ "54. Leverage The Power Of Math.": "AOBA-0054",
124
+ "55. How To Use Systems To Save Your Agency.": "AOBA-0055",
125
+ "56. How To Keep Your Team Accountable.": "AOBA-0056",
126
+ "57. Expectations Equal Success.": "AOBA-0057",
127
+ }
128
+ }
129
+ }
130
+
131
+ def normalize_name(name):
132
+ """Normalize filename for matching"""
133
+ # Remove extension
134
+ name = re.sub(r'\.(txt|docx|mp4|pdf)$', '', name, flags=re.IGNORECASE)
135
+ # Remove youtube references
136
+ name = re.sub(r'\s*\[youtube\.com.*?\]', '', name)
137
+ # Remove timestamps
138
+ name = re.sub(r'\s*\d{1,2}-\d{1,2}-\d{2,4}', '', name)
139
+ # Normalize spaces and case
140
+ name = name.strip().lower()
141
+ # Remove multiple spaces
142
+ name = re.sub(r'\s+', ' ', name)
143
+ return name
144
+
145
+ def find_best_match(filename, threshold=0.7):
146
+ """Find best matching planilha entry for a filename"""
147
+ norm_file = normalize_name(filename)
148
+
149
+ best_match = None
150
+ best_score = 0
151
+ best_tag = None
152
+ best_source = None
153
+
154
+ for source, data in PLANILHA_DATA.items():
155
+ for entry_name, tag in data["entries"].items():
156
+ norm_entry = normalize_name(entry_name)
157
+ score = SequenceMatcher(None, norm_file, norm_entry).ratio()
158
+
159
+ if score > best_score:
160
+ best_score = score
161
+ best_match = entry_name
162
+ best_tag = tag
163
+ best_source = source
164
+
165
+ if best_score >= threshold:
166
+ return {
167
+ "matched_to": best_match,
168
+ "tag": best_tag,
169
+ "source": best_source,
170
+ "score": best_score
171
+ }
172
+ return None
173
+
174
+ def get_untagged_files(inbox_path):
175
+ """Get all untagged .txt files"""
176
+ untagged = []
177
+
178
+ for root, dirs, files in os.walk(inbox_path):
179
+ # Skip hidden and backup folders
180
+ dirs[:] = [d for d in dirs if not d.startswith('.') and not d.startswith('_')]
181
+
182
+ for f in files:
183
+ if f.endswith('.txt') and not (f.startswith('[') and ']' in f):
184
+ full_path = os.path.join(root, f)
185
+ rel_path = full_path.replace(inbox_path + '/', '')
186
+ untagged.append({
187
+ "filename": f,
188
+ "full_path": full_path,
189
+ "rel_path": rel_path
190
+ })
191
+
192
+ return untagged
193
+
194
+ def main():
195
+ inbox_path = "inbox"
196
+
197
+ print("=== COMPLETE TAG MATCHING - DE-PARA 1-a-1 ===\n")
198
+
199
+ # Get untagged files
200
+ untagged = get_untagged_files(inbox_path)
201
+ print(f"Total arquivos sem TAG: {len(untagged)}\n")
202
+
203
+ # Match each file
204
+ matches = []
205
+ orphans = []
206
+
207
+ for file_info in untagged:
208
+ match = find_best_match(file_info["filename"])
209
+ if match:
210
+ matches.append({
211
+ **file_info,
212
+ **match
213
+ })
214
+ else:
215
+ orphans.append(file_info)
216
+
217
+ print(f"MATCHES ENCONTRADOS: {len(matches)}")
218
+ print(f"ÓRFÃOS (sem match): {len(orphans)}\n")
219
+
220
+ print("=== MATCHES DETALHADOS ===\n")
221
+ for m in sorted(matches, key=lambda x: x["tag"]):
222
+ print(f"[{m['tag']}] {m['filename']}")
223
+ print(f" → Planilha: {m['matched_to']} ({m['source']})")
224
+ print(f" → Score: {m['score']:.2%}")
225
+ print(f" → Path: {m['rel_path']}")
226
+ print()
227
+
228
+ print("\n=== ÓRFÃOS (ARQUIVOS SEM MATCH NA PLANILHA) ===\n")
229
+ for o in orphans:
230
+ print(f" ✗ {o['rel_path']}")
231
+
232
+ # Save results
233
+ results = {
234
+ "total_untagged": len(untagged),
235
+ "total_matches": len(matches),
236
+ "total_orphans": len(orphans),
237
+ "matches": matches,
238
+ "orphans": orphans
239
+ }
240
+
241
+ output_path = ".claude/mission-control/COMPLETE-TAG-MATCHING.json"
242
+ with open(output_path, 'w') as f:
243
+ json.dump(results, f, indent=2, ensure_ascii=False)
244
+
245
+ print(f"\n\nResultados salvos em: {output_path}")
246
+
247
+ return results
248
+
249
+ if __name__ == "__main__":
250
+ main()
@@ -0,0 +1,139 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Deduplication Script - Remove duplicate files keeping only the most recent
4
+ """
5
+
6
+ import os
7
+ import re
8
+ import shutil
9
+ from collections import defaultdict
10
+ from datetime import datetime
11
+
12
+ INBOX_PATH = "inbox"
13
+ BACKUP_PATH = os.path.join(INBOX_PATH, "_DEDUP_BACKUP")
14
+
15
+ def find_tagged_files():
16
+ """Find all files with [TAG-XXXX] format"""
17
+ tagged_files = defaultdict(list)
18
+ tag_pattern = re.compile(r'^\[([A-Z0-9\-]+)\]')
19
+
20
+ for root, dirs, files in os.walk(INBOX_PATH):
21
+ # Skip the backup folder itself
22
+ if "_DEDUP_BACKUP" in root:
23
+ continue
24
+
25
+ for filename in files:
26
+ if not filename.endswith('.txt'):
27
+ continue
28
+
29
+ match = tag_pattern.match(filename)
30
+ if match:
31
+ tag = match.group(1)
32
+ full_path = os.path.join(root, filename)
33
+ mtime = os.path.getmtime(full_path)
34
+ tagged_files[tag].append({
35
+ 'filename': filename,
36
+ 'path': full_path,
37
+ 'mtime': mtime,
38
+ 'rel_path': os.path.relpath(full_path, INBOX_PATH)
39
+ })
40
+
41
+ return tagged_files
42
+
43
+ def deduplicate(execute=False):
44
+ """Remove duplicates, keeping the most recent file for each TAG"""
45
+
46
+ print("=" * 70)
47
+ print("DEDUPLICAÇÃO DO INBOX - MEGA BRAIN")
48
+ print("=" * 70)
49
+ print(f"\nModo: {'EXECUTAR' if execute else 'PREVIEW (--execute para aplicar)'}")
50
+ print("=" * 70)
51
+
52
+ # Ensure backup folder exists
53
+ if execute and not os.path.exists(BACKUP_PATH):
54
+ os.makedirs(BACKUP_PATH)
55
+
56
+ tagged_files = find_tagged_files()
57
+
58
+ # Stats
59
+ total_tags = len(tagged_files)
60
+ duplicated_tags = 0
61
+ files_to_remove = 0
62
+
63
+ duplicates_list = []
64
+
65
+ for tag, files in sorted(tagged_files.items()):
66
+ if len(files) > 1:
67
+ duplicated_tags += 1
68
+ # Sort by mtime descending (most recent first)
69
+ files_sorted = sorted(files, key=lambda x: x['mtime'], reverse=True)
70
+ keep = files_sorted[0]
71
+ remove = files_sorted[1:]
72
+
73
+ print(f"\n[{tag}] {len(files)} cópias encontradas:")
74
+ print(f" ✓ MANTER: {keep['rel_path']}")
75
+ print(f" (modificado: {datetime.fromtimestamp(keep['mtime']).strftime('%Y-%m-%d %H:%M')})")
76
+
77
+ for f in remove:
78
+ files_to_remove += 1
79
+ print(f" ✗ REMOVER: {f['rel_path']}")
80
+ print(f" (modificado: {datetime.fromtimestamp(f['mtime']).strftime('%Y-%m-%d %H:%M')})")
81
+ duplicates_list.append({
82
+ 'tag': tag,
83
+ 'file': f,
84
+ 'keep': keep
85
+ })
86
+
87
+ print("\n" + "=" * 70)
88
+ print("RESUMO")
89
+ print("=" * 70)
90
+ print(f"Total de TAGs únicas: {total_tags}")
91
+ print(f"TAGs com duplicatas: {duplicated_tags}")
92
+ print(f"Arquivos a remover: {files_to_remove}")
93
+
94
+ if execute and duplicates_list:
95
+ print("\n" + "=" * 70)
96
+ print("EXECUTANDO REMOÇÃO")
97
+ print("=" * 70)
98
+
99
+ success = 0
100
+ errors = 0
101
+
102
+ for dup in duplicates_list:
103
+ src = dup['file']['path']
104
+ # Create subfolder in backup based on original relative path
105
+ rel_dir = os.path.dirname(dup['file']['rel_path'])
106
+ if rel_dir:
107
+ dest_dir = os.path.join(BACKUP_PATH, rel_dir)
108
+ else:
109
+ dest_dir = BACKUP_PATH
110
+
111
+ if not os.path.exists(dest_dir):
112
+ os.makedirs(dest_dir)
113
+
114
+ dest = os.path.join(dest_dir, dup['file']['filename'])
115
+
116
+ try:
117
+ shutil.move(src, dest)
118
+ print(f"✓ Movido: {dup['file']['rel_path']}")
119
+ success += 1
120
+ except Exception as e:
121
+ print(f"✗ Erro: {dup['file']['rel_path']} - {e}")
122
+ errors += 1
123
+
124
+ print("\n" + "=" * 70)
125
+ print("RESULTADO FINAL")
126
+ print("=" * 70)
127
+ print(f"✓ Arquivos movidos para backup: {success}")
128
+ print(f"✗ Erros: {errors}")
129
+ print(f"\nBackup em: {BACKUP_PATH}")
130
+
131
+ elif not execute:
132
+ print(f"\nExecute com: python3 deduplicate-inbox.py --execute")
133
+
134
+ return duplicated_tags, files_to_remove
135
+
136
+ if __name__ == "__main__":
137
+ import sys
138
+ execute = '--execute' in sys.argv
139
+ deduplicate(execute)
@@ -0,0 +1,141 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ DOCX XML Text Extractor for Mega Brain
4
+ ---------------------------------------
5
+ Extrai texto de arquivos .docx usando parsing XML direto.
6
+ Não requer pandoc ou outras dependências externas.
7
+ """
8
+
9
+ import base64
10
+ import tempfile
11
+ import os
12
+ import sys
13
+ import re
14
+ import zipfile
15
+ from xml.etree import ElementTree as ET
16
+
17
+ # OOXML namespace
18
+ WORD_NAMESPACE = '{http://schemas.openxmlformats.org/wordprocessingml/2006/main}'
19
+
20
+ def extract_text_from_xml(xml_content: str) -> str:
21
+ """
22
+ Extract text from Word document.xml content
23
+ """
24
+ try:
25
+ root = ET.fromstring(xml_content)
26
+ except ET.ParseError:
27
+ # Fallback to regex if XML parsing fails
28
+ texts = re.findall(r'<w:t[^>]*>([^<]*)</w:t>', xml_content)
29
+ return ' '.join(texts)
30
+
31
+ texts = []
32
+
33
+ # Find all <w:t> elements (text runs)
34
+ for elem in root.iter():
35
+ if elem.tag == f'{WORD_NAMESPACE}t':
36
+ if elem.text:
37
+ texts.append(elem.text)
38
+ # Handle paragraph breaks
39
+ elif elem.tag == f'{WORD_NAMESPACE}p':
40
+ if texts and not texts[-1].endswith('\n'):
41
+ texts.append('\n')
42
+ # Handle line breaks
43
+ elif elem.tag == f'{WORD_NAMESPACE}br':
44
+ texts.append('\n')
45
+
46
+ # Join and clean up
47
+ text = ''.join(texts)
48
+ # Normalize whitespace but preserve paragraph breaks
49
+ text = re.sub(r'[ \t]+', ' ', text)
50
+ text = re.sub(r'\n\s*\n', '\n\n', text)
51
+ text = text.strip()
52
+
53
+ return text
54
+
55
+ def extract_from_docx_bytes(docx_bytes: bytes) -> str:
56
+ """
57
+ Extract text from docx file bytes
58
+ """
59
+ with tempfile.NamedTemporaryFile(suffix='.docx', delete=False) as tmp:
60
+ tmp.write(docx_bytes)
61
+ tmp_path = tmp.name
62
+
63
+ try:
64
+ if not zipfile.is_zipfile(tmp_path):
65
+ return "[ERROR] Invalid docx file (not a valid ZIP)"
66
+
67
+ with zipfile.ZipFile(tmp_path, 'r') as z:
68
+ if 'word/document.xml' not in z.namelist():
69
+ return "[ERROR] Invalid docx file (no document.xml)"
70
+
71
+ xml_content = z.read('word/document.xml').decode('utf-8')
72
+ return extract_text_from_xml(xml_content)
73
+
74
+ finally:
75
+ try:
76
+ os.unlink(tmp_path)
77
+ except:
78
+ pass
79
+
80
+ def process_base64_file(input_file: str) -> str:
81
+ """
82
+ Process a file containing base64-encoded docx content
83
+ """
84
+ with open(input_file, 'r') as f:
85
+ base64_content = f.read().strip()
86
+
87
+ # Clean base64 content
88
+ base64_clean = base64_content.replace('\n', '').replace('\r', '').replace(' ', '')
89
+
90
+ try:
91
+ docx_bytes = base64.b64decode(base64_clean)
92
+ except Exception as e:
93
+ return f"[ERROR] Base64 decode failed: {e}"
94
+
95
+ return extract_from_docx_bytes(docx_bytes)
96
+
97
+ def save_transcription(text: str, tag: str, name: str, output_dir: str) -> str:
98
+ """
99
+ Save transcription with proper [TAG] naming
100
+ """
101
+ # Clean the name
102
+ clean_name = name
103
+ for ext in ['.docx', '.mp4', '.txt']:
104
+ clean_name = clean_name.replace(ext, '')
105
+ clean_name = clean_name.strip(' -.')
106
+
107
+ filename = f"[{tag}] {clean_name}.txt"
108
+ filepath = os.path.join(output_dir, filename)
109
+
110
+ os.makedirs(output_dir, exist_ok=True)
111
+
112
+ with open(filepath, 'w', encoding='utf-8') as f:
113
+ f.write(text)
114
+
115
+ return filepath
116
+
117
+ if __name__ == "__main__":
118
+ import argparse
119
+
120
+ parser = argparse.ArgumentParser(description='Extract text from base64-encoded docx')
121
+ parser.add_argument('base64_file', help='File containing base64 content')
122
+ parser.add_argument('--tag', help='TAG for output file (e.g., JM-0003)')
123
+ parser.add_argument('--name', help='Original filename for output')
124
+ parser.add_argument('--output-dir', help='Output directory')
125
+
126
+ args = parser.parse_args()
127
+
128
+ text = process_base64_file(args.base64_file)
129
+
130
+ if text.startswith('[ERROR]'):
131
+ print(text, file=sys.stderr)
132
+ sys.exit(1)
133
+
134
+ if args.tag and args.name and args.output_dir:
135
+ filepath = save_transcription(text, args.tag, args.name, args.output_dir)
136
+ print(f"Saved: {filepath}")
137
+ print(f"Characters: {len(text)}")
138
+ print(f"Words: {len(text.split())}")
139
+ else:
140
+ # Just print the text
141
+ print(text)
@@ -0,0 +1,58 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Extract text from base64-encoded .docx files from Google Drive
4
+ """
5
+
6
+ import base64
7
+ import subprocess
8
+ import tempfile
9
+ import os
10
+ import sys
11
+
12
+ def extract_text_from_base64_docx(base64_content: str) -> str:
13
+ """
14
+ Decode base64 docx content and extract text using pandoc
15
+ """
16
+ # Decode base64
17
+ docx_bytes = base64.b64decode(base64_content)
18
+
19
+ # Create temp file
20
+ with tempfile.NamedTemporaryFile(suffix='.docx', delete=False) as tmp:
21
+ tmp.write(docx_bytes)
22
+ tmp_path = tmp.name
23
+
24
+ try:
25
+ # Use pandoc to extract text
26
+ result = subprocess.run(
27
+ ['pandoc', tmp_path, '-t', 'plain', '--wrap=none'],
28
+ capture_output=True,
29
+ text=True,
30
+ check=True
31
+ )
32
+ return result.stdout
33
+ finally:
34
+ # Clean up
35
+ os.unlink(tmp_path)
36
+
37
+ def save_transcription(text: str, tag: str, name: str, output_dir: str) -> str:
38
+ """
39
+ Save extracted text to file with proper naming
40
+ """
41
+ # Clean filename
42
+ clean_name = name.replace('.docx', '').replace('.mp4', '').strip()
43
+ filename = f"[{tag}] {clean_name}.txt"
44
+ filepath = os.path.join(output_dir, filename)
45
+
46
+ with open(filepath, 'w', encoding='utf-8') as f:
47
+ f.write(text)
48
+
49
+ return filepath
50
+
51
+ if __name__ == "__main__":
52
+ if len(sys.argv) < 2:
53
+ print("Usage: python extract-docx-text.py <base64_content>")
54
+ sys.exit(1)
55
+
56
+ base64_content = sys.argv[1]
57
+ text = extract_text_from_base64_docx(base64_content)
58
+ print(text)
@@ -0,0 +1,74 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Extract a single transcription directly from Google Drive
4
+ Uses the MCP gdrive API output format
5
+ """
6
+
7
+ import base64
8
+ import subprocess
9
+ import tempfile
10
+ import os
11
+ import sys
12
+ import re
13
+ import zipfile
14
+
15
+ def extract_text_from_docx_bytes(docx_bytes: bytes) -> str:
16
+ """
17
+ Extract text from docx bytes using pandoc or fallback to XML parsing
18
+ """
19
+ # Create temp file
20
+ with tempfile.NamedTemporaryFile(suffix='.docx', delete=False) as tmp:
21
+ tmp.write(docx_bytes)
22
+ tmp_path = tmp.name
23
+
24
+ try:
25
+ # First try pandoc
26
+ result = subprocess.run(
27
+ ['pandoc', tmp_path, '-t', 'plain', '--wrap=none'],
28
+ capture_output=True,
29
+ text=True,
30
+ timeout=30
31
+ )
32
+
33
+ if result.returncode == 0:
34
+ return result.stdout
35
+
36
+ # Fallback: extract from XML directly
37
+ with zipfile.ZipFile(tmp_path, 'r') as z:
38
+ if 'word/document.xml' in z.namelist():
39
+ xml_content = z.read('word/document.xml').decode('utf-8')
40
+ # Extract text from <w:t> tags
41
+ texts = re.findall(r'<w:t[^>]*>([^<]*)</w:t>', xml_content)
42
+ return ' '.join(texts)
43
+
44
+ return "[ERROR] Could not extract text"
45
+
46
+ except Exception as e:
47
+ return f"[ERROR] {e}"
48
+ finally:
49
+ try:
50
+ os.unlink(tmp_path)
51
+ except:
52
+ pass
53
+
54
+ def main():
55
+ # Read base64 from stdin
56
+ base64_content = sys.stdin.read().strip()
57
+
58
+ if not base64_content:
59
+ print("[ERROR] No base64 content provided via stdin")
60
+ sys.exit(1)
61
+
62
+ try:
63
+ docx_bytes = base64.b64decode(base64_content)
64
+ print(f"[INFO] Decoded {len(docx_bytes)} bytes", file=sys.stderr)
65
+
66
+ text = extract_text_from_docx_bytes(docx_bytes)
67
+ print(text)
68
+
69
+ except Exception as e:
70
+ print(f"[ERROR] {e}")
71
+ sys.exit(1)
72
+
73
+ if __name__ == "__main__":
74
+ main()