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
+ Apply Tags Script - Renames matched files with TAG prefix
4
+ """
5
+
6
+ import os
7
+ import json
8
+ import sys
9
+
10
+ def apply_tags(execute=False):
11
+ # Load matching results
12
+ with open('.claude/mission-control/COMPLETE-TAG-MATCHING.json') as f:
13
+ data = json.load(f)
14
+
15
+ matches = data['matches']
16
+
17
+ print("=" * 60)
18
+ print("APLICAÇÃO DE TAGS - DE-PARA COMPLETO")
19
+ print("=" * 60)
20
+ print(f"\nTotal arquivos com match: {len(matches)}")
21
+ print(f"Modo: {'EXECUTAR' if execute else 'PREVIEW (--execute para aplicar)'}")
22
+ print("=" * 60)
23
+ print()
24
+
25
+ success = 0
26
+ errors = 0
27
+ skipped = 0
28
+
29
+ for m in sorted(matches, key=lambda x: x['tag']):
30
+ old_path = m['full_path']
31
+ tag = m['tag']
32
+ filename = m['filename']
33
+
34
+ # Skip if file already has a tag
35
+ if filename.startswith('[') and ']' in filename:
36
+ print(f"⏭️ SKIP (já tem tag): {filename}")
37
+ skipped += 1
38
+ continue
39
+
40
+ # Build new filename with tag
41
+ new_filename = f"[{tag}] {filename}"
42
+ new_path = os.path.join(os.path.dirname(old_path), new_filename)
43
+
44
+ print(f"[{tag}] {m['rel_path']}")
45
+ print(f" → {new_filename}")
46
+
47
+ if execute:
48
+ try:
49
+ if os.path.exists(old_path):
50
+ os.rename(old_path, new_path)
51
+ print(f" ✓ RENOMEADO")
52
+ success += 1
53
+ else:
54
+ print(f" ✗ ERRO: Arquivo não encontrado")
55
+ errors += 1
56
+ except Exception as e:
57
+ print(f" ✗ ERRO: {e}")
58
+ errors += 1
59
+ print()
60
+
61
+ print("=" * 60)
62
+ print("RESUMO")
63
+ print("=" * 60)
64
+ if execute:
65
+ print(f"✓ Renomeados com sucesso: {success}")
66
+ print(f"⏭️ Pulados (já tem tag): {skipped}")
67
+ print(f"✗ Erros: {errors}")
68
+ else:
69
+ print(f"📋 Prontos para renomear: {len(matches) - skipped}")
70
+ print(f"⏭️ Já com tag: {skipped}")
71
+ print(f"\nExecute com: python3 apply-tags.py --execute")
72
+
73
+ return success, skipped, errors
74
+
75
+ if __name__ == "__main__":
76
+ execute = '--execute' in sys.argv
77
+ apply_tags(execute)
@@ -0,0 +1,132 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Batch Extraction Script for Mega Brain Transcriptions
4
+ ------------------------------------------------------
5
+ Este script extrai transcrições de arquivos .docx no Google Drive
6
+ e salva como arquivos .txt com TAG no INBOX.
7
+
8
+ Uso:
9
+ python batch-extract-transcriptions.py <base64_file> <tag> <output_name> <output_dir>
10
+
11
+ O arquivo base64_file deve conter o conteúdo base64 puro do .docx
12
+ """
13
+
14
+ import base64
15
+ import subprocess
16
+ import tempfile
17
+ import os
18
+ import sys
19
+ import json
20
+
21
+ def decode_and_extract(base64_content: str) -> str:
22
+ """
23
+ Decode base64 docx content and extract text using pandoc
24
+ """
25
+ # Remove whitespace/newlines from base64
26
+ base64_clean = base64_content.strip().replace('\n', '').replace(' ', '')
27
+
28
+ # Decode base64
29
+ try:
30
+ docx_bytes = base64.b64decode(base64_clean)
31
+ except Exception as e:
32
+ return f"[ERROR] Base64 decode failed: {e}"
33
+
34
+ # Create temp file
35
+ with tempfile.NamedTemporaryFile(suffix='.docx', delete=False) as tmp:
36
+ tmp.write(docx_bytes)
37
+ tmp_path = tmp.name
38
+
39
+ try:
40
+ # Check if pandoc is available
41
+ result = subprocess.run(
42
+ ['which', 'pandoc'],
43
+ capture_output=True,
44
+ text=True
45
+ )
46
+
47
+ if result.returncode != 0:
48
+ # Try using unzip to extract document.xml directly
49
+ import zipfile
50
+ try:
51
+ with zipfile.ZipFile(tmp_path, 'r') as z:
52
+ if 'word/document.xml' in z.namelist():
53
+ xml_content = z.read('word/document.xml').decode('utf-8')
54
+ # Basic XML text extraction
55
+ import re
56
+ text = re.sub(r'<[^>]+>', '', xml_content)
57
+ text = re.sub(r'\s+', ' ', text)
58
+ return text.strip()
59
+ except Exception as e:
60
+ return f"[ERROR] ZIP extraction failed: {e}"
61
+
62
+ # Use pandoc to extract text
63
+ result = subprocess.run(
64
+ ['pandoc', tmp_path, '-t', 'plain', '--wrap=none'],
65
+ capture_output=True,
66
+ text=True,
67
+ check=True
68
+ )
69
+ return result.stdout
70
+
71
+ except subprocess.CalledProcessError as e:
72
+ return f"[ERROR] Pandoc failed: {e.stderr}"
73
+ except Exception as e:
74
+ return f"[ERROR] Extraction failed: {e}"
75
+ finally:
76
+ # Clean up
77
+ try:
78
+ os.unlink(tmp_path)
79
+ except:
80
+ pass
81
+
82
+ def save_transcription(text: str, tag: str, name: str, output_dir: str) -> str:
83
+ """
84
+ Save extracted text to file with proper naming
85
+ """
86
+ # Clean filename
87
+ clean_name = name.replace('.docx', '').replace('.mp4', '').strip()
88
+ # Remove leading numbers and dashes if duplicated
89
+ clean_name = clean_name.strip(' -.')
90
+
91
+ filename = f"[{tag}] {clean_name}.txt"
92
+ filepath = os.path.join(output_dir, filename)
93
+
94
+ with open(filepath, 'w', encoding='utf-8') as f:
95
+ f.write(text)
96
+
97
+ return filepath
98
+
99
+ def process_from_file(base64_file: str, tag: str, name: str, output_dir: str) -> dict:
100
+ """
101
+ Process a single file from base64 content file
102
+ """
103
+ with open(base64_file, 'r') as f:
104
+ base64_content = f.read()
105
+
106
+ text = decode_and_extract(base64_content)
107
+
108
+ if text.startswith('[ERROR]'):
109
+ return {'success': False, 'error': text, 'tag': tag}
110
+
111
+ filepath = save_transcription(text, tag, name, output_dir)
112
+ return {
113
+ 'success': True,
114
+ 'filepath': filepath,
115
+ 'tag': tag,
116
+ 'chars': len(text),
117
+ 'words': len(text.split())
118
+ }
119
+
120
+ if __name__ == "__main__":
121
+ if len(sys.argv) < 5:
122
+ print("Usage: python batch-extract-transcriptions.py <base64_file> <tag> <output_name> <output_dir>")
123
+ print("Example: python batch-extract-transcriptions.py /tmp/content.b64 JM-0003 'Your Prospects Are Lying' ./INBOX/")
124
+ sys.exit(1)
125
+
126
+ base64_file = sys.argv[1]
127
+ tag = sys.argv[2]
128
+ name = sys.argv[3]
129
+ output_dir = sys.argv[4]
130
+
131
+ result = process_from_file(base64_file, tag, name, output_dir)
132
+ print(json.dumps(result, indent=2))
@@ -0,0 +1,250 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ BUILD COMPLETE INDEX - Extrai dados de todos os JSONs da planilha
4
+ Mega Brain - Sistema de Inteligência de Negócios
5
+
6
+ Processa os arquivos JSON salvos das chamadas do Google Sheets API
7
+ e constrói o índice completo nome→TAG
8
+ """
9
+
10
+ import os
11
+ import re
12
+ import json
13
+ from datetime import datetime
14
+ from pathlib import Path
15
+
16
+ # Configurações
17
+ TOOL_RESULTS_PATH = "" # Set to your Claude tool-results path
18
+ OUTPUT_PATH = ".claude/mission-control/PLANILHA-INDEX.json"
19
+ SCHEMA_PATH = ".claude/mission-control/SPREADSHEET-SCHEMA.json"
20
+
21
+ # Mapeamento de sheet -> coluna da TAG (índice baseado em 0 da row)
22
+ SHEET_CONFIG = {
23
+ "Jeremy Haynes Sales Training": {"tag_col": -1, "prefix": "JH-ST"}, # última coluna
24
+ "Jeremy Haynes Inner Circle": {"tag_col": -1, "prefix": "JH-IC"},
25
+ "Inner Circle Weekly Group Call Recordings": {"tag_col": -1, "prefix": "JH-WK"},
26
+ "Agency Blueprint": {"tag_col": -1, "prefix": "AOBA"},
27
+ "Cold Video Pitch": {"tag_col": -1, "prefix": "PCVP"},
28
+ "Land Your First Agency Client": {"tag_col": -1, "prefix": "LYFC"},
29
+ "Marketer Mindset Masterclass": {"tag_col": -1, "prefix": "MMM"},
30
+ "30 Days Challenge": {"tag_col": -1, "prefix": "30DC"},
31
+ "Scale The Agency": {"tag_col": -1, "prefix": "STA"},
32
+ "Ultra High Ticket Closer": {"tag_col": -1, "prefix": "UHTC"},
33
+ "Jeremy Miner": {"tag_col": -1, "prefix": "JM"},
34
+ "The Scalable Company": {"tag_col": -1, "prefix": "TSC"},
35
+ "Sales Training BR": {"tag_col": -1, "prefix": "EDC"},
36
+ "Alex Hormozi": {"tag_col": -1, "prefix": "AH"},
37
+ "Jeremy Haynes Program": {"tag_col": -1, "prefix": "CA"},
38
+ }
39
+
40
+ def normalize_name(name):
41
+ """Normaliza nome para matching."""
42
+ if not name:
43
+ return ""
44
+ # Lowercase
45
+ name = str(name).lower()
46
+ # Remove extensão
47
+ name = re.sub(r'\.(mp4|docx|txt|pdf)$', '', name, flags=re.IGNORECASE)
48
+ # Remove número inicial
49
+ name = re.sub(r'^\d+[\s\.\-]+', '', name)
50
+ # Remove (1), (2), etc
51
+ name = re.sub(r'\s*\(\d+\)\s*', '', name)
52
+ # Remove youtube references
53
+ name = re.sub(r'\[youtube\.com[^\]]*\]', '', name)
54
+ # Remove caracteres especiais
55
+ name = re.sub(r'[^\w\s]', ' ', name)
56
+ name = re.sub(r'\s+', ' ', name).strip()
57
+ return name
58
+
59
+ def is_valid_tag(tag, prefix=None):
60
+ """Verifica se é uma TAG válida."""
61
+ if not tag:
62
+ return False
63
+ tag = str(tag).strip()
64
+
65
+ # Formato básico: XXX-NNNN ou XX-XXX-NNNN
66
+ if not re.match(r'^[\w-]+-\d{4}$', tag):
67
+ return False
68
+
69
+ # Se prefix especificado, verificar
70
+ if prefix and not tag.startswith(prefix):
71
+ return False
72
+
73
+ return True
74
+
75
+ def extract_from_row(row, sheet_name):
76
+ """Extrai nome e TAG de uma row."""
77
+ if not row:
78
+ return None, None
79
+
80
+ # Extrair valores
81
+ values = []
82
+ for cell in row:
83
+ if isinstance(cell, dict):
84
+ values.append(cell.get('value', ''))
85
+ else:
86
+ values.append(str(cell) if cell else '')
87
+
88
+ if not values:
89
+ return None, None
90
+
91
+ # Nome está na primeira coluna
92
+ name = values[0] if values else None
93
+
94
+ # TAG está na última coluna (geralmente)
95
+ # Procurar TAG no formato correto de trás para frente
96
+ tag = None
97
+ for v in reversed(values):
98
+ if v and is_valid_tag(v):
99
+ tag = v
100
+ break
101
+
102
+ return name, tag
103
+
104
+ def process_json_file(filepath):
105
+ """Processa um arquivo JSON do Google Sheets."""
106
+ entries = []
107
+
108
+ try:
109
+ with open(filepath, 'r', encoding='utf-8') as f:
110
+ raw_data = json.load(f)
111
+
112
+ # Formato: [{type: text, text: JSON_STRING}]
113
+ if isinstance(raw_data, list) and raw_data:
114
+ if isinstance(raw_data[0], dict) and 'text' in raw_data[0]:
115
+ data = json.loads(raw_data[0]['text'])
116
+ else:
117
+ data = raw_data
118
+ else:
119
+ data = raw_data
120
+
121
+ # Processar dados
122
+ if isinstance(data, list):
123
+ # Lista de sheets
124
+ for sheet_data in data:
125
+ if isinstance(sheet_data, dict) and 'sheetName' in sheet_data:
126
+ sheet_name = sheet_data['sheetName']
127
+ rows = sheet_data.get('data', [])
128
+
129
+ for row in rows:
130
+ name, tag = extract_from_row(row, sheet_name)
131
+ if name and tag:
132
+ entries.append({
133
+ 'original_name': name,
134
+ 'normalized': normalize_name(name),
135
+ 'tag': tag,
136
+ 'sheet': sheet_name
137
+ })
138
+
139
+ elif isinstance(data, dict):
140
+ # Pode ser formato valueRanges ou outro
141
+ if 'valueRanges' in data:
142
+ for range_data in data.get('valueRanges', []):
143
+ # Extrair sheet name do range
144
+ range_str = range_data.get('range', '')
145
+ sheet_name = range_str.split('!')[0].strip("'")
146
+
147
+ for row in range_data.get('values', []):
148
+ name, tag = extract_from_row(row, sheet_name)
149
+ if name and tag:
150
+ entries.append({
151
+ 'original_name': name,
152
+ 'normalized': normalize_name(name),
153
+ 'tag': tag,
154
+ 'sheet': sheet_name
155
+ })
156
+
157
+ except Exception as e:
158
+ print(f" Erro processando {filepath}: {e}")
159
+
160
+ return entries
161
+
162
+ def main():
163
+ print("=" * 60)
164
+ print("BUILD COMPLETE INDEX")
165
+ print("=" * 60)
166
+ print()
167
+
168
+ all_entries = []
169
+ sheets_found = set()
170
+
171
+ # 1. Processar todos os arquivos JSON em tool-results
172
+ print("[1/3] Processando arquivos JSON...")
173
+
174
+ if os.path.exists(TOOL_RESULTS_PATH):
175
+ json_files = list(Path(TOOL_RESULTS_PATH).glob("mcp-gdrive*.txt"))
176
+ print(f" {len(json_files)} arquivos encontrados")
177
+
178
+ for filepath in json_files:
179
+ entries = process_json_file(filepath)
180
+ if entries:
181
+ print(f" {filepath.name}: {len(entries)} entradas")
182
+ all_entries.extend(entries)
183
+ sheets_found.update(e['sheet'] for e in entries)
184
+ else:
185
+ print(f" AVISO: Pasta não encontrada: {TOOL_RESULTS_PATH}")
186
+
187
+ # 2. Remover duplicatas (manter mais recente por tag)
188
+ print()
189
+ print("[2/3] Removendo duplicatas...")
190
+
191
+ seen_tags = {}
192
+ unique_entries = []
193
+
194
+ for entry in all_entries:
195
+ tag = entry['tag']
196
+ if tag not in seen_tags:
197
+ seen_tags[tag] = entry
198
+ unique_entries.append(entry)
199
+ else:
200
+ # Se mesma tag, manter a entrada com nome mais completo
201
+ existing = seen_tags[tag]
202
+ if len(entry['original_name']) > len(existing['original_name']):
203
+ seen_tags[tag] = entry
204
+ unique_entries = [e for e in unique_entries if e['tag'] != tag]
205
+ unique_entries.append(entry)
206
+
207
+ print(f" De {len(all_entries)} para {len(unique_entries)} entradas únicas")
208
+
209
+ # 3. Ordenar por sheet e tag
210
+ unique_entries.sort(key=lambda x: (x['sheet'], x['tag']))
211
+
212
+ # 4. Salvar índice
213
+ print()
214
+ print("[3/3] Salvando índice...")
215
+
216
+ index = {
217
+ 'version': '2.0',
218
+ 'timestamp': datetime.now().isoformat(),
219
+ 'total_entries': len(unique_entries),
220
+ 'sheets_processed': sorted(list(sheets_found)),
221
+ 'entries': unique_entries
222
+ }
223
+
224
+ with open(OUTPUT_PATH, 'w', encoding='utf-8') as f:
225
+ json.dump(index, f, ensure_ascii=False, indent=2)
226
+
227
+ print(f" Salvo em: {OUTPUT_PATH}")
228
+ print()
229
+
230
+ # 5. Resumo por sheet
231
+ print("=" * 60)
232
+ print("RESUMO POR SHEET")
233
+ print("=" * 60)
234
+
235
+ sheet_counts = {}
236
+ for entry in unique_entries:
237
+ sheet = entry['sheet']
238
+ sheet_counts[sheet] = sheet_counts.get(sheet, 0) + 1
239
+
240
+ for sheet, count in sorted(sheet_counts.items()):
241
+ print(f" {sheet}: {count} TAGs")
242
+
243
+ print()
244
+ print(f"TOTAL: {len(unique_entries)} entradas")
245
+ print("=" * 60)
246
+
247
+ return index
248
+
249
+ if __name__ == '__main__':
250
+ main()
@@ -0,0 +1,170 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ BUILD PLANILHA INDEX - Cria índice nome→TAG da planilha
4
+ Processa os arquivos JSON exportados das abas do Google Sheets
5
+ """
6
+
7
+ import os
8
+ import re
9
+ import json
10
+ from datetime import datetime
11
+
12
+ # Configurações
13
+ TOOL_RESULTS_PATH = "" # Set to your Claude tool-results path
14
+ OUTPUT_PATH = ".claude/mission-control/PLANILHA-INDEX.json"
15
+ SCHEMA_PATH = ".claude/mission-control/SPREADSHEET-SCHEMA.json"
16
+
17
+ def normalize_name(name):
18
+ """Normaliza nome para matching."""
19
+ if not name:
20
+ return ""
21
+ # Lowercase
22
+ name = str(name).lower()
23
+ # Remove extensão
24
+ name = re.sub(r'\.(mp4|docx|txt|pdf)$', '', name, flags=re.IGNORECASE)
25
+ # Remove número inicial
26
+ name = re.sub(r'^\d+[\s\.\-]+', '', name)
27
+ # Remove (1), (2), etc
28
+ name = re.sub(r'\s*\(\d+\)\s*', '', name)
29
+ # Remove caracteres especiais
30
+ name = re.sub(r'[^\w\s]', ' ', name)
31
+ name = re.sub(r'\s+', ' ', name).strip()
32
+ return name
33
+
34
+ def process_sheet_data(data, sheet_name, tag_col_index):
35
+ """Processa dados de uma aba e extrai entradas."""
36
+ entries = []
37
+
38
+ for row in data:
39
+ if not row or len(row) < tag_col_index + 1:
40
+ continue
41
+
42
+ # Extrair valores relevantes
43
+ name_cell = row[0] if len(row) > 0 else None # Coluna B (nome)
44
+ tag_cell = row[tag_col_index] if len(row) > tag_col_index else None
45
+
46
+ if not name_cell or not tag_cell:
47
+ continue
48
+
49
+ name = name_cell.get('value', '') if isinstance(name_cell, dict) else str(name_cell)
50
+ tag = tag_cell.get('value', '') if isinstance(tag_cell, dict) else str(tag_cell)
51
+
52
+ # Verificar se TAG é válida
53
+ if not tag or not re.match(r'^[\w-]+-\d{4}$', tag):
54
+ continue
55
+
56
+ entries.append({
57
+ 'original_name': name,
58
+ 'normalized': normalize_name(name),
59
+ 'tag': tag,
60
+ 'sheet': sheet_name
61
+ })
62
+
63
+ return entries
64
+
65
+ def main():
66
+ print("=" * 60)
67
+ print("BUILD PLANILHA INDEX")
68
+ print("=" * 60)
69
+ print()
70
+
71
+ # Carregar schema para saber configuração de cada aba
72
+ print("[1/3] Carregando schema...")
73
+ with open(SCHEMA_PATH, 'r', encoding='utf-8') as f:
74
+ schema = json.load(f)
75
+
76
+ # Encontrar arquivos JSON do Google Sheets
77
+ print("[2/3] Processando dados exportados...")
78
+
79
+ # Dados inline do Sales Training (copiados do resultado anterior)
80
+ # Por agora, vou criar entradas manualmente baseadas no schema
81
+
82
+ entries = []
83
+
84
+ # Dados do Jeremy Haynes Sales Training (processado inline)
85
+ jh_st_data = [
86
+ ("1 - Introduction to Sales Training", "JH-ST-0001"),
87
+ ("2. The Plague of Fat Cat Closers", "JH-ST-0002"),
88
+ ("3. How to Deal With Inbound Leads Who Only Filled Out a Form", "JH-ST-0003"),
89
+ ("4. Sales Team Structures to Consider", "JH-ST-0004"),
90
+ ("5. The Cleaner Role", "JH-ST-0005"),
91
+ ("6. Using Sales Videos to Aid The Sales Process", "JH-ST-0006"),
92
+ ("7. Selfie Follow up Video Texts Get an iphone", "JH-ST-0007"),
93
+ ("8. Get Leads Back on The Phone With Value Driven Follow up", "JH-ST-0008"),
94
+ ("9. How to Increase Show Rate", "JH-ST-0009"),
95
+ ("10.Why You Should Text Every Lead Manually", "JH-ST-0010"),
96
+ ("11. Value Added vs Selfish Questions", "JH-ST-0011"),
97
+ ("12. Value Added Questions vs Selfish Questions", "JH-ST-0012"),
98
+ ("13. How to Increase Average Order Value", "JH-ST-0013"),
99
+ ("14. How to Recruit Sales People", "JH-ST-0014"),
100
+ ("15. How to Train Maintain a Great Sales Team", "JH-ST-0015"),
101
+ ("16. Why Full Time Closers Are Better", "JH-ST-0016"),
102
+ ("17. How to Raise The Value of The Price", "JH-ST-0017"),
103
+ ("18. Raising The Clients Interest Level", "JH-ST-0018"),
104
+ ("19. How to Create Real Scarcity Urgency", "JH-ST-0019"),
105
+ ("20. Reviewing Calls Providing Feedback", "JH-ST-0020"),
106
+ ("21. Your Personal Life Impacts Your Professional Life", "JH-ST-0021"),
107
+ ("22. Tools Software For Closers", "JH-ST-0022"),
108
+ ("23. When to Fire Sales Reps", "JH-ST-0023"),
109
+ ("24. Keep Your Moral High", "JH-ST-0024"),
110
+ ("25. Sales Training With Jordan Stupar", "JH-ST-0025"),
111
+ ("26. Sales Training With Josh Troy", "JH-ST-0026"),
112
+ ("1. Intro to Objections", "JH-ST-0028"),
113
+ ("2. What Happens if You go Out of Business", "JH-ST-0029"),
114
+ ("3. How do I Know my Money is Safe", "JH-ST-0030"),
115
+ ("4. Can I Speak to The Owner", "JH-ST-0031"),
116
+ ("5. How Can You Guarantee That Ill Make Money", "JH-ST-0032"),
117
+ ("6. Why Are You Better Than Everybody Else", "JH-ST-0033"),
118
+ ("7. Id Rather Get Started Next Quarter", "JH-ST-0034"),
119
+ ("8. I Have to Get my Lawyer to Review Before Moving Forward", "JH-ST-0035"),
120
+ ("9. My Business Partner I Will Need To Review This", "JH-ST-0036"),
121
+ ("10. Im Traveling This Week Lets Move Forward Next Week", "JH-ST-0037"),
122
+ ("11. Are You Open to Changes in The Agreement", "JH-ST-0038"),
123
+ ("12. Can I Speak to an Existing Client", "JH-ST-0039"),
124
+ ("13. I Saw a Negative Review Im Afraid Itll Happen to me", "JH-ST-0040"),
125
+ ("14. Objection I Cant Afford This", "JH-ST-0041"),
126
+ ("15. Objection I Cant Afford This", "JH-ST-0042"),
127
+ ("16. Objection I Cant Afford This", "JH-ST-0043"),
128
+ ("17. I Didnt Expect it to Cost This Much", "JH-ST-0044"),
129
+ ("18. I am Looking at Other Service Providers", "JH-ST-0045"),
130
+ ]
131
+
132
+ for name, tag in jh_st_data:
133
+ entries.append({
134
+ 'original_name': name,
135
+ 'normalized': normalize_name(name),
136
+ 'tag': tag,
137
+ 'sheet': 'Jeremy Haynes Sales Training'
138
+ })
139
+
140
+ print(f" Processadas {len(entries)} entradas iniciais")
141
+ print()
142
+ print(" NOTA: Este script precisa ser expandido para processar todas as abas")
143
+ print(" via API do Google Sheets ou arquivos JSON exportados.")
144
+ print()
145
+
146
+ # 3. Salvar índice
147
+ print("[3/3] Salvando índice...")
148
+
149
+ index = {
150
+ 'version': '1.0',
151
+ 'timestamp': datetime.now().isoformat(),
152
+ 'total_entries': len(entries),
153
+ 'sheets_processed': list(set(e['sheet'] for e in entries)),
154
+ 'entries': entries
155
+ }
156
+
157
+ with open(OUTPUT_PATH, 'w', encoding='utf-8') as f:
158
+ json.dump(index, f, ensure_ascii=False, indent=2)
159
+
160
+ print(f" Salvo em: {OUTPUT_PATH}")
161
+ print(f" Total: {len(entries)} entradas")
162
+ print()
163
+ print("=" * 60)
164
+ print("ÍNDICE CRIADO (parcial)")
165
+ print("=" * 60)
166
+
167
+ return index
168
+
169
+ if __name__ == '__main__':
170
+ main()