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,597 @@
1
+ # TAG-RESOLVER-IMPLEMENTATION.md
2
+ # Instruções para Criar o Sistema de Resolução TAG ↔ Path
3
+
4
+ ---
5
+
6
+ ## CONTEXTO
7
+
8
+ O sistema atual tem uma lacuna crítica:
9
+ - `PLANILHA-INDEX.json` tem 915 entries com `tag`, `original_name`, `sheet`
10
+ - **NÃO TEM** campo `path` - não sabe onde o arquivo está fisicamente
11
+ - Batches referenciam TAGs (ex: `JH-ST-0002`)
12
+ - Agentes não conseguem resolver TAG → arquivo real
13
+
14
+ ---
15
+
16
+ ## PARTE 1: CRIAR TAG-RESOLVER.json
17
+
18
+ ### 1.1 Script Python para Gerar o Resolver
19
+
20
+ Criar arquivo `scripts/create-tag-resolver.py`:
21
+
22
+ ```python
23
+ #!/usr/bin/env python3
24
+ """
25
+ TAG-RESOLVER Generator
26
+ Cria índice bidirecional TAG ↔ Path para o sistema Mega Brain
27
+
28
+ Uso:
29
+ python create-tag-resolver.py
30
+
31
+ Output:
32
+ knowledge/TAG-RESOLVER.json
33
+ """
34
+
35
+ import os
36
+ import re
37
+ import json
38
+ from datetime import datetime
39
+ from pathlib import Path
40
+ from collections import defaultdict
41
+
42
+ # Configuração
43
+ MEGA_BRAIN_ROOT = Path(__file__).parent.parent # Sobe de scripts para raiz
44
+ INBOX_PATH = MEGA_BRAIN_ROOT / "inbox"
45
+ OUTPUT_PATH = MEGA_BRAIN_ROOT / "knowledge" / "TAG-RESOLVER.json"
46
+ PLANILHA_INDEX_PATH = MEGA_BRAIN_ROOT / "PLANILHA-INDEX.json"
47
+
48
+ # Regex para extrair TAGs do nome do arquivo
49
+ # Formatos suportados:
50
+ # - [JM-0114] filename.txt
51
+ # - [JH-ST-0002] filename.txt
52
+ TAG_PATTERN = re.compile(r'\[([A-Z0-9]+-[A-Z]*-?\d+)\]')
53
+
54
+ def extract_tag_from_filename(filename: str) -> str | None:
55
+ """Extrai TAG do nome do arquivo"""
56
+ match = TAG_PATTERN.search(filename)
57
+ return match.group(1) if match else None
58
+
59
+ def get_source_code(path: str) -> str:
60
+ """Determina o código fonte baseado no path"""
61
+ path_lower = path.lower()
62
+
63
+ if "jeremy miner" in path_lower or "7th level" in path_lower:
64
+ return "JM"
65
+ elif "jeremy haynes" in path_lower:
66
+ if "sales-training" in path_lower:
67
+ return "JH-ST"
68
+ elif "inbound-closer" in path_lower:
69
+ return "JH-IC"
70
+ else:
71
+ return "JH"
72
+ elif "alex hormozi" in path_lower or "alex-hormozi" in path_lower:
73
+ return "AH"
74
+ elif "cole gordon" in path_lower or "cole-gordon" in path_lower:
75
+ return "CG"
76
+ else:
77
+ return "UNK"
78
+
79
+ def scan_inbox(inbox_path: Path) -> dict:
80
+ """Varre o INBOX e cria mapeamento TAG → Path"""
81
+
82
+ tag_to_path = {}
83
+ path_to_tag = {}
84
+ stats = {
85
+ "total_files": 0,
86
+ "files_with_tag": 0,
87
+ "files_without_tag": 0,
88
+ "by_source": defaultdict(int),
89
+ "duplicates": [],
90
+ "errors": []
91
+ }
92
+
93
+ print(f"Scanning: {inbox_path}")
94
+
95
+ for root, dirs, files in os.walk(inbox_path):
96
+ # Ignorar pastas de backup
97
+ dirs[:] = [d for d in dirs if not d.startswith('_')]
98
+
99
+ for filename in files:
100
+ # Ignorar arquivos ocultos e de sistema
101
+ if filename.startswith('.') or filename.startswith('_'):
102
+ continue
103
+
104
+ stats["total_files"] += 1
105
+
106
+ full_path = os.path.join(root, filename)
107
+ relative_path = os.path.relpath(full_path, MEGA_BRAIN_ROOT)
108
+
109
+ tag = extract_tag_from_filename(filename)
110
+
111
+ if tag:
112
+ stats["files_with_tag"] += 1
113
+ source = get_source_code(relative_path)
114
+ stats["by_source"][source] += 1
115
+
116
+ # Verificar duplicata
117
+ if tag in tag_to_path:
118
+ stats["duplicates"].append({
119
+ "tag": tag,
120
+ "path1": tag_to_path[tag],
121
+ "path2": relative_path
122
+ })
123
+ print(f" ⚠️ TAG duplicada: {tag}")
124
+ else:
125
+ tag_to_path[tag] = relative_path
126
+ path_to_tag[relative_path] = tag
127
+ else:
128
+ stats["files_without_tag"] += 1
129
+
130
+ return {
131
+ "tag_to_path": tag_to_path,
132
+ "path_to_tag": path_to_tag,
133
+ "stats": stats
134
+ }
135
+
136
+ def load_planilha_index(path: Path) -> dict:
137
+ """Carrega PLANILHA-INDEX.json existente"""
138
+ if path.exists():
139
+ with open(path, 'r', encoding='utf-8') as f:
140
+ return json.load(f)
141
+ return {"entries": []}
142
+
143
+ def merge_with_planilha(resolver_data: dict, planilha_data: dict) -> dict:
144
+ """Merge resolver com dados da planilha"""
145
+
146
+ tag_to_path = resolver_data["tag_to_path"]
147
+
148
+ # Criar índice por tag da planilha
149
+ planilha_by_tag = {}
150
+ for entry in planilha_data.get("entries", []):
151
+ if "tag" in entry:
152
+ planilha_by_tag[entry["tag"]] = entry
153
+
154
+ # Criar entries enriquecidas
155
+ enriched_entries = []
156
+
157
+ for tag, path in tag_to_path.items():
158
+ entry = {
159
+ "tag": tag,
160
+ "path": path,
161
+ "source": get_source_code(path),
162
+ "filename": os.path.basename(path)
163
+ }
164
+
165
+ # Enriquecer com dados da planilha se existir
166
+ if tag in planilha_by_tag:
167
+ planilha_entry = planilha_by_tag[tag]
168
+ entry["original_name"] = planilha_entry.get("original_name")
169
+ entry["sheet"] = planilha_entry.get("sheet")
170
+ entry["in_planilha"] = True
171
+ else:
172
+ entry["in_planilha"] = False
173
+
174
+ enriched_entries.append(entry)
175
+
176
+ # Identificar TAGs na planilha sem arquivo
177
+ orphan_tags = []
178
+ for tag in planilha_by_tag:
179
+ if tag not in tag_to_path:
180
+ orphan_tags.append({
181
+ "tag": tag,
182
+ "original_name": planilha_by_tag[tag].get("original_name"),
183
+ "sheet": planilha_by_tag[tag].get("sheet")
184
+ })
185
+
186
+ return {
187
+ "entries": enriched_entries,
188
+ "orphan_tags": orphan_tags
189
+ }
190
+
191
+ def create_tag_resolver():
192
+ """Função principal - cria TAG-RESOLVER.json"""
193
+
194
+ print("=" * 60)
195
+ print("TAG-RESOLVER Generator")
196
+ print("=" * 60)
197
+ print()
198
+
199
+ # 1. Scan do INBOX
200
+ print("📁 Fase 1: Scanning INBOX...")
201
+ resolver_data = scan_inbox(INBOX_PATH)
202
+
203
+ print(f" Total arquivos: {resolver_data['stats']['total_files']}")
204
+ print(f" Com TAG: {resolver_data['stats']['files_with_tag']}")
205
+ print(f" Sem TAG: {resolver_data['stats']['files_without_tag']}")
206
+ print()
207
+
208
+ # 2. Carregar planilha existente
209
+ print("📊 Fase 2: Loading PLANILHA-INDEX.json...")
210
+ planilha_data = load_planilha_index(PLANILHA_INDEX_PATH)
211
+ print(f" Entries na planilha: {len(planilha_data.get('entries', []))}")
212
+ print()
213
+
214
+ # 3. Merge dados
215
+ print("🔗 Fase 3: Merging data...")
216
+ merged_data = merge_with_planilha(resolver_data, planilha_data)
217
+ print(f" Entries enriquecidas: {len(merged_data['entries'])}")
218
+ print(f" TAGs órfãs (na planilha sem arquivo): {len(merged_data['orphan_tags'])}")
219
+ print()
220
+
221
+ # 4. Criar output final
222
+ output = {
223
+ "version": "1.0.0",
224
+ "generated_at": datetime.utcnow().isoformat() + "Z",
225
+ "generator": "create-tag-resolver.py",
226
+ "stats": {
227
+ "total_files_scanned": resolver_data["stats"]["total_files"],
228
+ "files_with_tag": resolver_data["stats"]["files_with_tag"],
229
+ "files_without_tag": resolver_data["stats"]["files_without_tag"],
230
+ "by_source": dict(resolver_data["stats"]["by_source"]),
231
+ "duplicates_found": len(resolver_data["stats"]["duplicates"]),
232
+ "orphan_tags": len(merged_data["orphan_tags"])
233
+ },
234
+ "tag_to_path": resolver_data["tag_to_path"],
235
+ "path_to_tag": resolver_data["path_to_tag"],
236
+ "entries": merged_data["entries"],
237
+ "orphan_tags": merged_data["orphan_tags"],
238
+ "duplicates": resolver_data["stats"]["duplicates"]
239
+ }
240
+
241
+ # 5. Salvar
242
+ print(f"💾 Fase 4: Saving to {OUTPUT_PATH}...")
243
+ OUTPUT_PATH.parent.mkdir(parents=True, exist_ok=True)
244
+
245
+ with open(OUTPUT_PATH, 'w', encoding='utf-8') as f:
246
+ json.dump(output, f, indent=2, ensure_ascii=False)
247
+
248
+ print(f" ✅ Salvo: {OUTPUT_PATH}")
249
+ print()
250
+
251
+ # 6. Sumário
252
+ print("=" * 60)
253
+ print("SUMÁRIO")
254
+ print("=" * 60)
255
+ print(f"Total TAGs mapeadas: {len(output['tag_to_path'])}")
256
+ print(f"Por fonte:")
257
+ for source, count in sorted(output["stats"]["by_source"].items()):
258
+ print(f" - {source}: {count}")
259
+
260
+ if output["duplicates"]:
261
+ print(f"\n⚠️ ATENÇÃO: {len(output['duplicates'])} TAGs duplicadas encontradas!")
262
+ for dup in output["duplicates"][:5]:
263
+ print(f" - {dup['tag']}: {dup['path1']} vs {dup['path2']}")
264
+
265
+ if output["orphan_tags"]:
266
+ print(f"\n⚠️ ATENÇÃO: {len(output['orphan_tags'])} TAGs na planilha sem arquivo!")
267
+ for orphan in output["orphan_tags"][:5]:
268
+ print(f" - {orphan['tag']}: {orphan['original_name']}")
269
+
270
+ print()
271
+ print("✅ TAG-RESOLVER.json criado com sucesso!")
272
+ return output
273
+
274
+ if __name__ == "__main__":
275
+ create_tag_resolver()
276
+ ```
277
+
278
+ ### 1.2 Executar o Script
279
+
280
+ ```bash
281
+ python3 scripts/create-tag-resolver.py
282
+ ```
283
+
284
+ **Resultado esperado:**
285
+ - Arquivo `knowledge/TAG-RESOLVER.json` criado
286
+ - ~727 TAGs mapeadas para seus paths
287
+ - Relatório de TAGs duplicadas ou órfãs
288
+
289
+ ---
290
+
291
+ ## PARTE 2: VALIDAR TAG-RESOLVER
292
+
293
+ ### 2.1 Verificar Estrutura
294
+
295
+ ```bash
296
+ # Verificar que arquivo foi criado
297
+ ls -la "knowledge/TAG-RESOLVER.json"
298
+
299
+ # Ver estatísticas
300
+ cat "knowledge/TAG-RESOLVER.json" | python3 -c "
301
+ import json, sys
302
+ data = json.load(sys.stdin)
303
+ print('=== TAG-RESOLVER Stats ===')
304
+ print(f'Version: {data[\"version\"]}')
305
+ print(f'Generated: {data[\"generated_at\"]}')
306
+ print(f'Total TAGs: {len(data[\"tag_to_path\"])}')
307
+ print()
308
+ print('Por fonte:')
309
+ for src, count in sorted(data['stats']['by_source'].items()):
310
+ print(f' {src}: {count}')
311
+ print()
312
+ print(f'Duplicatas: {data[\"stats\"][\"duplicates_found\"]}')
313
+ print(f'Órfãs: {data[\"stats\"][\"orphan_tags\"]}')
314
+ "
315
+ ```
316
+
317
+ ### 2.2 Testar Resolução de TAGs
318
+
319
+ ```bash
320
+ # Script de teste rápido
321
+ python3 << 'EOF'
322
+ import json
323
+
324
+ with open("knowledge/TAG-RESOLVER.json") as f:
325
+ resolver = json.load(f)
326
+
327
+ # Testar algumas TAGs conhecidas
328
+
329
+ print("=== Teste de Resolução TAG → Path ===")
330
+ for tag in test_tags:
331
+ path = resolver["tag_to_path"].get(tag)
332
+ if path:
333
+ print(f"✅ {tag} → {path}")
334
+ else:
335
+ print(f"❌ {tag} → NOT FOUND")
336
+
337
+ print()
338
+ print("=== Teste de Resolução Path → TAG ===")
339
+ # Pegar 3 paths aleatórios
340
+ for path in list(resolver["path_to_tag"].keys())[:3]:
341
+ tag = resolver["path_to_tag"][path]
342
+ print(f"✅ {path[:50]}... → {tag}")
343
+ EOF
344
+ ```
345
+
346
+ ### 2.3 Resultado Esperado
347
+
348
+ ```
349
+ ╔══════════════════════════════════════════════════════════════════════════════╗
350
+ ║ TAG-RESOLVER VALIDAÇÃO ║
351
+ ╠══════════════════════════════════════════════════════════════════════════════╣
352
+ ║ ║
353
+ ║ [✓] Arquivo criado em knowledge/TAG-RESOLVER.json ║
354
+ ║ [✓] ~727 TAGs mapeadas ║
355
+ ║ [✓] Resolução bidirecional funcionando ║
356
+ ║ [✓] Stats por fonte calculados ║
357
+ ║ [✓] Duplicatas identificadas (se houver) ║
358
+ ║ [✓] Órfãs identificadas (TAGs na planilha sem arquivo) ║
359
+ ║ ║
360
+ ╚══════════════════════════════════════════════════════════════════════════════╝
361
+ ```
362
+
363
+ ---
364
+
365
+ ## PARTE 3: FUNÇÃO HELPER PARA USO EM SCRIPTS
366
+
367
+ ### 3.1 Criar Módulo tag_resolver.py
368
+
369
+ Adicionar em `scripts/lib/tag_resolver.py`:
370
+
371
+ ```python
372
+ #!/usr/bin/env python3
373
+ """
374
+ TAG Resolver Library
375
+ Funções helper para resolver TAG ↔ Path em scripts do Mega Brain
376
+ """
377
+
378
+ import json
379
+ import os
380
+ from pathlib import Path
381
+ from functools import lru_cache
382
+
383
+ # Cache do resolver
384
+ _resolver_cache = None
385
+ _resolver_path = None
386
+
387
+ def get_resolver_path() -> Path:
388
+ """Retorna path do TAG-RESOLVER.json"""
389
+ global _resolver_path
390
+ if _resolver_path is None:
391
+ # Tenta encontrar o arquivo subindo diretórios
392
+ current = Path(__file__).resolve()
393
+ for _ in range(5):
394
+ current = current.parent
395
+ candidate = current / "knowledge" / "TAG-RESOLVER.json"
396
+ if candidate.exists():
397
+ _resolver_path = candidate
398
+ break
399
+ return _resolver_path
400
+
401
+ @lru_cache(maxsize=1)
402
+ def load_resolver() -> dict:
403
+ """Carrega e cacheia o TAG-RESOLVER.json"""
404
+ global _resolver_cache
405
+ if _resolver_cache is None:
406
+ path = get_resolver_path()
407
+ if path and path.exists():
408
+ with open(path, 'r', encoding='utf-8') as f:
409
+ _resolver_cache = json.load(f)
410
+ else:
411
+ raise FileNotFoundError("TAG-RESOLVER.json não encontrado. Execute create-tag-resolver.py primeiro.")
412
+ return _resolver_cache
413
+
414
+ def resolve_tag(tag: str) -> str | None:
415
+ """
416
+ Resolve TAG para path do arquivo
417
+
418
+ Args:
419
+ tag: TAG no formato "JM-0114" ou "[JM-0114]"
420
+
421
+ Returns:
422
+ Path relativo do arquivo ou None se não encontrado
423
+ """
424
+ # Remove colchetes se presentes
425
+ tag = tag.strip("[]")
426
+
427
+ resolver = load_resolver()
428
+ return resolver["tag_to_path"].get(tag)
429
+
430
+ def resolve_path(path: str) -> str | None:
431
+ """
432
+ Resolve path para TAG
433
+
434
+ Args:
435
+ path: Path relativo do arquivo
436
+
437
+ Returns:
438
+ TAG ou None se não encontrado
439
+ """
440
+ resolver = load_resolver()
441
+ return resolver["path_to_tag"].get(path)
442
+
443
+ def get_entry(tag: str) -> dict | None:
444
+ """
445
+ Retorna entry completa para uma TAG
446
+
447
+ Args:
448
+ tag: TAG no formato "JM-0114"
449
+
450
+ Returns:
451
+ Dict com tag, path, source, filename, original_name, sheet, in_planilha
452
+ """
453
+ tag = tag.strip("[]")
454
+ resolver = load_resolver()
455
+
456
+ for entry in resolver["entries"]:
457
+ if entry["tag"] == tag:
458
+ return entry
459
+ return None
460
+
461
+ def get_tags_by_source(source_code: str) -> list:
462
+ """
463
+ Retorna todas as TAGs de uma fonte específica
464
+
465
+ Args:
466
+
467
+ Returns:
468
+ Lista de dicts com tag e path
469
+ """
470
+ resolver = load_resolver()
471
+ return [
472
+ {"tag": e["tag"], "path": e["path"]}
473
+ for e in resolver["entries"]
474
+ if e.get("source") == source_code
475
+ ]
476
+
477
+ def validate_tags(tags: list) -> dict:
478
+ """
479
+ Valida lista de TAGs
480
+
481
+ Args:
482
+ tags: Lista de TAGs
483
+
484
+ Returns:
485
+ Dict com valid (lista de TAGs encontradas) e invalid (não encontradas)
486
+ """
487
+ resolver = load_resolver()
488
+ tag_set = set(resolver["tag_to_path"].keys())
489
+
490
+ valid = []
491
+ invalid = []
492
+
493
+ for tag in tags:
494
+ tag = tag.strip("[]")
495
+ if tag in tag_set:
496
+ valid.append(tag)
497
+ else:
498
+ invalid.append(tag)
499
+
500
+ return {"valid": valid, "invalid": invalid}
501
+
502
+ # Funções de conveniência
503
+ def tag_exists(tag: str) -> bool:
504
+ """Verifica se TAG existe no resolver"""
505
+ return resolve_tag(tag) is not None
506
+
507
+ def get_absolute_path(tag: str, mega_brain_root: str = None) -> str | None:
508
+ """Retorna path absoluto para uma TAG"""
509
+ relative = resolve_tag(tag)
510
+ if relative is None:
511
+ return None
512
+
513
+ if mega_brain_root is None:
514
+ mega_brain_root = get_resolver_path().parent.parent
515
+
516
+ return os.path.join(mega_brain_root, relative)
517
+
518
+ # Stats helpers
519
+ def get_stats() -> dict:
520
+ """Retorna estatísticas do resolver"""
521
+ return load_resolver()["stats"]
522
+
523
+ def get_orphan_tags() -> list:
524
+ """Retorna TAGs que estão na planilha mas não têm arquivo"""
525
+ return load_resolver()["orphan_tags"]
526
+
527
+ def get_duplicates() -> list:
528
+ """Retorna TAGs duplicadas encontradas"""
529
+ return load_resolver()["duplicates"]
530
+ ```
531
+
532
+ ### 3.2 Criar __init__.py
533
+
534
+ ```bash
535
+ mkdir -p scripts/lib
536
+ touch scripts/lib/__init__.py
537
+ ```
538
+
539
+ ---
540
+
541
+ ## PARTE 4: ATUALIZAR PLANILHA-INDEX.json
542
+
543
+ ### 4.1 Script para Adicionar Campo Path
544
+
545
+ ```python
546
+ #!/usr/bin/env python3
547
+ """
548
+ Atualiza PLANILHA-INDEX.json com campo 'path' do TAG-RESOLVER
549
+ """
550
+
551
+ import json
552
+ from pathlib import Path
553
+
554
+ MEGA_BRAIN = Path(".")
555
+ PLANILHA_PATH = MEGA_BRAIN / "PLANILHA-INDEX.json"
556
+ RESOLVER_PATH = MEGA_BRAIN / "knowledge" / "TAG-RESOLVER.json"
557
+
558
+ # Carregar arquivos
559
+ with open(RESOLVER_PATH) as f:
560
+ resolver = json.load(f)
561
+
562
+ with open(PLANILHA_PATH) as f:
563
+ planilha = json.load(f)
564
+
565
+ # Criar índice tag → path
566
+ tag_to_path = resolver["tag_to_path"]
567
+
568
+ # Atualizar entries
569
+ updated = 0
570
+ not_found = 0
571
+
572
+ for entry in planilha.get("entries", []):
573
+ tag = entry.get("tag")
574
+ if tag and tag in tag_to_path:
575
+ entry["path"] = tag_to_path[tag]
576
+ updated += 1
577
+ else:
578
+ entry["path"] = None
579
+ not_found += 1
580
+
581
+ # Salvar
582
+ with open(PLANILHA_PATH, 'w', encoding='utf-8') as f:
583
+ json.dump(planilha, f, indent=2, ensure_ascii=False)
584
+
585
+ print(f"PLANILHA-INDEX.json atualizada!")
586
+ print(f" Entries com path: {updated}")
587
+ print(f" Entries sem path: {not_found}")
588
+ ```
589
+
590
+ ---
591
+
592
+ ## PRÓXIMO PASSO
593
+
594
+ Após completar esta parte, execute as instruções em:
595
+ **`INTEGRATION-POINTS.md`**
596
+
597
+ Isso conectará o TAG-RESOLVER aos scripts existentes da pipeline.