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,113 @@
1
+ /**
2
+ * Mega Brain - Email Validation Module
3
+ * Validates MoneyClub buyer emails via Supabase RPC
4
+ *
5
+ * Uses native fetch (Node.js 18+) instead of Supabase client
6
+ * to avoid assertion errors from dangling WebSocket handles.
7
+ *
8
+ * On successful validation, returns a premium_token for
9
+ * accessing the premium content repository.
10
+ */
11
+
12
+ // Supabase connection — loaded from environment variables.
13
+ // SUPABASE_URL and SUPABASE_ANON_KEY must be set in .env
14
+ // Supabase anon keys are public by design (protected by RLS),
15
+ // but we load from env to avoid hardcoding in source control.
16
+ // See: https://supabase.com/docs/guides/auth#api-keys
17
+ const SUPABASE_URL = process.env.SUPABASE_URL || '';
18
+ const SUPABASE_ANON_KEY = process.env.SUPABASE_ANON_KEY || '';
19
+
20
+ const TIMEOUT_MS = 10000;
21
+ const MAX_ATTEMPTS = 3;
22
+
23
+ let attemptCount = 0;
24
+
25
+ /**
26
+ * Validate a buyer email against MoneyClub database
27
+ * @param {string} email - Email to validate
28
+ * @returns {Promise<{valid: boolean, name?: string, reason?: string, installCount?: number, premium_token?: string}>}
29
+ */
30
+ export async function validateEmail(email) {
31
+ if (attemptCount >= MAX_ATTEMPTS) {
32
+ return {
33
+ valid: false,
34
+ reason: 'max_attempts_exceeded',
35
+ };
36
+ }
37
+
38
+ attemptCount++;
39
+
40
+ if (!email || !email.includes('@')) {
41
+ return {
42
+ valid: false,
43
+ reason: 'invalid_email_format',
44
+ };
45
+ }
46
+
47
+ try {
48
+ const response = await fetch(
49
+ `${SUPABASE_URL}/rest/v1/rpc/validate_buyer_email`,
50
+ {
51
+ method: 'POST',
52
+ headers: {
53
+ 'apikey': SUPABASE_ANON_KEY,
54
+ 'Authorization': `Bearer ${SUPABASE_ANON_KEY}`,
55
+ 'Content-Type': 'application/json',
56
+ },
57
+ body: JSON.stringify({ buyer_email: email.trim().toLowerCase() }),
58
+ signal: AbortSignal.timeout(TIMEOUT_MS),
59
+ }
60
+ );
61
+
62
+ if (!response.ok) {
63
+ return {
64
+ valid: false,
65
+ reason: 'validation_error',
66
+ };
67
+ }
68
+
69
+ const data = await response.json();
70
+
71
+ return {
72
+ valid: data.valid,
73
+ name: data.name || null,
74
+ reason: data.reason || null,
75
+ installCount: data.install_count || 0,
76
+ premium_token: data.premium_token || null,
77
+ };
78
+ } catch (err) {
79
+ if (err.name === 'TimeoutError' || err.name === 'AbortError') {
80
+ return {
81
+ valid: false,
82
+ reason: 'timeout',
83
+ };
84
+ }
85
+
86
+ return {
87
+ valid: false,
88
+ reason: 'network_error',
89
+ };
90
+ }
91
+ }
92
+
93
+ /**
94
+ * Get user-friendly error messages in Portuguese
95
+ * @param {string} reason - Error reason code
96
+ * @returns {string} Human-readable message
97
+ */
98
+ export function getErrorMessage(reason) {
99
+ const messages = {
100
+ email_not_found: 'Email não autorizado.\nAcesse a página do produto para adquirir acesso.',
101
+ invalid_email_format: 'Formato de email inválido. Verifique e tente novamente.',
102
+ max_attempts_exceeded: 'Número máximo de tentativas excedido. Reinicie o instalador.',
103
+ timeout: 'Tempo de conexão esgotado. Verifique sua internet e tente novamente.',
104
+ network_error: 'Erro de conexão. Verifique sua internet e tente novamente.',
105
+ validation_error: 'Erro na validação. Tente novamente em alguns minutos.',
106
+ };
107
+
108
+ return messages[reason] || 'Erro desconhecido. Tente novamente.';
109
+ }
110
+
111
+ export function resetAttempts() {
112
+ attemptCount = 0;
113
+ }
@@ -0,0 +1,136 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Mega Brain - AI Knowledge Management System
5
+ * CLI Entry Point
6
+ *
7
+ * Usage:
8
+ * npx mega-brain-ai install [name] - Install Mega Brain (optional project name)
9
+ * npx mega-brain-ai validate - Validate MoneyClub email
10
+ * npx mega-brain-ai push - Push to Layer 1/2/3 remote
11
+ * npx mega-brain-ai upgrade - Upgrade Community to Premium
12
+ * npx mega-brain-ai status - Show Pro license status
13
+ * npx mega-brain-ai features - List available vs locked features
14
+ * npx mega-brain-ai --help - Show help
15
+ */
16
+
17
+ import { createRequire } from 'module';
18
+ import { fileURLToPath } from 'url';
19
+ import { dirname, resolve } from 'path';
20
+ import { readFileSync, existsSync } from 'fs';
21
+
22
+ // Load .env from project root (Node.js 21+ native, no dependencies)
23
+ const __filename = fileURLToPath(import.meta.url);
24
+ const __dirname = dirname(__filename);
25
+ const envPath = resolve(__dirname, '..', '.env');
26
+ if (existsSync(envPath)) {
27
+ try { process.loadEnvFile(envPath); } catch {}
28
+ }
29
+
30
+ const require = createRequire(import.meta.url);
31
+
32
+ const pkg = JSON.parse(readFileSync(resolve(__dirname, '..', 'package.json'), 'utf-8'));
33
+
34
+ const args = process.argv.slice(2);
35
+ const command = args[0];
36
+
37
+ async function main() {
38
+ const { showBanner } = await import('./lib/ascii-art.js');
39
+
40
+ showBanner(pkg.version);
41
+
42
+ if (!command || command === '--help' || command === '-h') {
43
+ showHelp();
44
+ process.exit(0);
45
+ }
46
+
47
+ // Auto-trigger setup if .env is missing (skip for install/setup/help)
48
+ const skipEnvCheck = ['install', 'setup', 'push'].includes(command);
49
+ if (!skipEnvCheck) {
50
+ const projectEnv = resolve(process.cwd(), '.env');
51
+ if (!existsSync(projectEnv)) {
52
+ const boxen = (await import('boxen')).default;
53
+ console.log(boxen(
54
+ ' First time? Let\'s set up your environment.\n' +
55
+ ' Running setup wizard...\n\n' +
56
+ ' (You can run this anytime with: npx mega-brain-ai setup)',
57
+ { padding: 1, borderColor: 'cyan', borderStyle: 'round' }
58
+ ));
59
+ const { runSetup } = await import('./lib/setup-wizard.js');
60
+ await runSetup();
61
+ process.exit(0);
62
+ }
63
+ }
64
+
65
+ if (command === 'install') {
66
+ const { runInstaller } = await import('./lib/installer.js');
67
+ await runInstaller(pkg.version, args[1]);
68
+ } else if (command === 'validate') {
69
+ const { validateEmail } = await import('./lib/validate-email.js');
70
+ const email = args[1];
71
+ if (!email) {
72
+ console.error('\n Uso: mega-brain validate <email>\n');
73
+ process.exit(1);
74
+ }
75
+ const result = await validateEmail(email);
76
+ console.log(result.valid ? `\n Email válido: ${result.name}` : `\n Email inválido: ${result.reason}`);
77
+ setTimeout(() => process.exit(result.valid ? 0 : 1), 100);
78
+ } else if (command === 'push') {
79
+ // Dynamic import of push module
80
+ await import('./push.js');
81
+ } else if (command === 'upgrade') {
82
+ const { runUpgrade } = await import('./lib/installer.js');
83
+ if (typeof runUpgrade === 'function') {
84
+ await runUpgrade(pkg.version);
85
+ } else {
86
+ console.log('\n Funcionalidade de upgrade será disponibilizada em breve.');
87
+ console.log(' Por enquanto, reinstale com: mega-brain install\n');
88
+ }
89
+ } else if (command === 'status') {
90
+ const { showStatus } = await import('./lib/pro-commands.js');
91
+ showStatus();
92
+ } else if (command === 'features') {
93
+ const { showFeatures } = await import('./lib/pro-commands.js');
94
+ showFeatures();
95
+ } else if (command === 'setup') {
96
+ const { runSetup } = await import('./lib/setup-wizard.js');
97
+ await runSetup();
98
+ } else {
99
+ console.error(`\n Comando desconhecido: ${command}`);
100
+ showHelp();
101
+ process.exit(1);
102
+ }
103
+ }
104
+
105
+ function showHelp() {
106
+ console.log(`
107
+ Mega Brain v${pkg.version}
108
+ AI Knowledge Management System
109
+
110
+ Comandos:
111
+ install [nome] Instalar Mega Brain (PREMIUM ou Community)
112
+ setup Configurar API keys e dependencias (wizard interativo)
113
+ validate Validar email MoneyClub (mega-brain validate <email>)
114
+ push Push para Layer 1/2/3 (mega-brain push [--layer N])
115
+ upgrade Atualizar Community para Premium
116
+ status Mostrar status da licenca Pro
117
+ features Listar features disponiveis vs bloqueadas
118
+ --help Mostrar esta mensagem
119
+
120
+ Layers:
121
+ Layer 1 Community (público) — shell sem conteúdo
122
+ Layer 2 Premium (MoneyClub) — shell + cérebro
123
+ Layer 3 Full Backup (pessoal) — tudo incluindo dados sensíveis
124
+
125
+ Exemplos:
126
+ npx mega-brain-ai install
127
+ npx mega-brain-ai install meu-projeto
128
+ npx mega-brain-ai push --layer 1
129
+ npx mega-brain-ai push
130
+ `);
131
+ }
132
+
133
+ main().catch((err) => {
134
+ console.error('\n Erro inesperado:', err.message);
135
+ setTimeout(() => process.exit(1), 100);
136
+ });
@@ -0,0 +1,229 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Mega Brain — Pre-Publish Security Gate (PHYSICAL BLOCK)
5
+ *
6
+ * PURPOSE: Scan npm package contents for secrets AND verify only L1 content
7
+ * is included BEFORE publishing.
8
+ * DESIGN: fail-CLOSED — if scanning fails, publish is BLOCKED.
9
+ * INSTALLED: 2026-02-20 (post-incident hardening)
10
+ * UPDATED: 2026-02-27 (added L1 layer validation)
11
+ *
12
+ * Runs automatically via: "prepublishOnly": "node bin/pre-publish-gate.js"
13
+ */
14
+
15
+ import { execSync } from 'child_process';
16
+ import { readFileSync, existsSync, mkdirSync, rmSync } from 'fs';
17
+ import { resolve, dirname } from 'path';
18
+ import { fileURLToPath } from 'url';
19
+ import { validatePackageSync } from './validate-package.js';
20
+
21
+ const __filename = fileURLToPath(import.meta.url);
22
+ const __dirname = dirname(__filename);
23
+ const PROJECT_ROOT = resolve(__dirname, '..');
24
+
25
+ // ANSI colors
26
+ const RED = '\x1b[31m';
27
+ const GREEN = '\x1b[32m';
28
+ const YELLOW = '\x1b[33m';
29
+ const CYAN = '\x1b[36m';
30
+ const NC = '\x1b[0m';
31
+
32
+ // === SECRET PATTERNS ===
33
+ const SECRET_PATTERNS = [
34
+ // GitHub tokens
35
+ /ghp_[A-Za-z0-9]{36}/,
36
+ /github_pat_[A-Za-z0-9_]{82}/,
37
+ /gho_[A-Za-z0-9]{36}/,
38
+ /ghs_[A-Za-z0-9]{36}/,
39
+ /ghr_[A-Za-z0-9]{36}/,
40
+ // Anthropic
41
+ /sk-ant-[A-Za-z0-9-]{90,}/,
42
+ // OpenAI
43
+ /sk-[A-Za-z0-9]{48}/,
44
+ // AWS
45
+ /AKIA[0-9A-Z]{16}/,
46
+ // ElevenLabs
47
+ /sk_[a-f0-9]{48}/,
48
+ // N8N webhooks
49
+ /https?:\/\/[^/]*\.app\.n8n\.cloud\/webhook/,
50
+ // Notion
51
+ /ntn_[A-Za-z0-9]{40,}/,
52
+ /secret_[A-Za-z0-9]{40,}/,
53
+ // JWT tokens (Supabase, etc.)
54
+ /eyJ[A-Za-z0-9_-]{20,}\.eyJ[A-Za-z0-9_-]{20,}\.[A-Za-z0-9_-]{20,}/,
55
+ // Generic secrets in code
56
+ /(?:password|api_key|secret|token|private_key)\s*[:=]\s*['"][^'"]{12,}['"]/i,
57
+ // Brazilian CPF (11 digits)
58
+ /\d{3}\.\d{3}\.\d{3}-\d{2}/,
59
+ // Brazilian CNPJ
60
+ /\d{2}\.\d{3}\.\d{3}\/\d{4}-\d{2}/,
61
+ // Email addresses in bulk (PII indicator)
62
+ /[\w.+-]+@[\w-]+\.[\w.]+/,
63
+ ];
64
+
65
+ // Files that should NEVER be in the package
66
+ const FORBIDDEN_FILE_PATTERNS = [
67
+ /\.env($|\.)/i,
68
+ /credentials\.json$/i,
69
+ /service.account.*\.json$/i,
70
+ /\.pem$/i,
71
+ /\.key$/i,
72
+ /id_rsa/i,
73
+ /id_ed25519/i,
74
+ /\.sqlite$/i,
75
+ /\.db$/i,
76
+ /memory\.db$/i,
77
+ /DOSSIE-SEGURANCA/i,
78
+ /trufflehog/i,
79
+ ];
80
+
81
+ // Maximum emails allowed (more than this = PII leak)
82
+ const MAX_EMAILS_PER_FILE = 3;
83
+
84
+ console.log(`${YELLOW}[pre-publish] Running security gate before npm publish...${NC}`);
85
+
86
+ let foundIssues = 0;
87
+
88
+ // === STEP 1: Clean __pycache__ (original prepublishOnly behavior) ===
89
+ try {
90
+ execSync('find . -type d -name __pycache__ -exec rm -rf {} + 2>/dev/null', {
91
+ cwd: PROJECT_ROOT,
92
+ stdio: 'ignore',
93
+ });
94
+ } catch {
95
+ // Ignore cleanup errors
96
+ }
97
+
98
+ // === STEP 2: Get list of files that would be published ===
99
+ let packFiles = [];
100
+ try {
101
+ const packOutput = execSync('npm pack --dry-run --json 2>/dev/null', {
102
+ cwd: PROJECT_ROOT,
103
+ encoding: 'utf-8',
104
+ stdio: ['pipe', 'pipe', 'pipe'],
105
+ });
106
+
107
+ const packData = JSON.parse(packOutput);
108
+ if (packData && packData[0] && packData[0].files) {
109
+ packFiles = packData[0].files.map(f => f.path);
110
+ }
111
+ } catch {
112
+ // Fallback: use the files field from package.json
113
+ console.log(`${YELLOW}[pre-publish] npm pack --dry-run failed, using files field fallback.${NC}`);
114
+ try {
115
+ const pkg = JSON.parse(readFileSync(resolve(PROJECT_ROOT, 'package.json'), 'utf-8'));
116
+ packFiles = pkg.files || [];
117
+ } catch {
118
+ console.error(`${RED}[BLOCKED] Cannot determine package files. Blocking publish.${NC}`);
119
+ process.exit(1);
120
+ }
121
+ }
122
+
123
+ console.log(`${CYAN}[pre-publish] Scanning ${packFiles.length} files...${NC}`);
124
+
125
+ // === STEP 3: Check file names for forbidden patterns ===
126
+ for (const file of packFiles) {
127
+ for (const pattern of FORBIDDEN_FILE_PATTERNS) {
128
+ if (pattern.test(file)) {
129
+ console.error(`${RED}[BLOCKED] Forbidden file in package: ${file}${NC}`);
130
+ foundIssues++;
131
+ }
132
+ }
133
+ }
134
+
135
+ // === STEP 4: Scan file contents for secrets ===
136
+ const BINARY_EXTENSIONS = new Set([
137
+ '.png', '.jpg', '.jpeg', '.gif', '.ico', '.svg',
138
+ '.woff', '.woff2', '.ttf', '.eot',
139
+ '.pdf', '.zip', '.tar', '.gz', '.bz2',
140
+ '.mp3', '.mp4', '.wav', '.webm',
141
+ ]);
142
+
143
+ for (const file of packFiles) {
144
+ // Skip binary files
145
+ const ext = file.substring(file.lastIndexOf('.')).toLowerCase();
146
+ if (BINARY_EXTENSIONS.has(ext)) continue;
147
+
148
+ const filePath = resolve(PROJECT_ROOT, file);
149
+ if (!existsSync(filePath)) continue;
150
+
151
+ let content;
152
+ try {
153
+ content = readFileSync(filePath, 'utf-8');
154
+ } catch {
155
+ continue;
156
+ }
157
+
158
+ // Check for secret patterns
159
+ for (const pattern of SECRET_PATTERNS) {
160
+ const matches = content.match(new RegExp(pattern.source, 'g'));
161
+ if (matches) {
162
+ // Special handling for emails: allow up to MAX_EMAILS_PER_FILE
163
+ if (pattern.source.includes('@')) {
164
+ if (matches.length > MAX_EMAILS_PER_FILE) {
165
+ console.error(`${RED}[BLOCKED] Bulk PII (${matches.length} emails) in: ${file}${NC}`);
166
+ foundIssues++;
167
+ }
168
+ continue;
169
+ }
170
+
171
+ // Redact the actual values
172
+ const redacted = matches[0].substring(0, 12) + '**REDACTED**';
173
+ console.error(`${RED}[BLOCKED] Secret found in: ${file} → ${redacted}${NC}`);
174
+ foundIssues++;
175
+ }
176
+ }
177
+ }
178
+
179
+ // === STEP 5: Optional trufflehog scan ===
180
+ try {
181
+ execSync('trufflehog --version', { stdio: 'pipe' });
182
+ console.log(`${YELLOW}[pre-publish] Running trufflehog deep scan...${NC}`);
183
+ const result = execSync(
184
+ `trufflehog filesystem "${PROJECT_ROOT}" --only-verified --no-update --json`,
185
+ { encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'], timeout: 120000 }
186
+ );
187
+ if (result.trim()) {
188
+ console.error(`${RED}[BLOCKED] trufflehog found VERIFIED secrets.${NC}`);
189
+ foundIssues++;
190
+ }
191
+ } catch {
192
+ // trufflehog not available, pattern scan is sufficient
193
+ }
194
+
195
+ // === STEP 6: Layer validation (L1 only) ===
196
+ console.log(`${CYAN}[pre-publish] Running layer validation...${NC}`);
197
+ try {
198
+ const validation = validatePackageSync(PROJECT_ROOT);
199
+ if (validation.status === 'FAILED') {
200
+ console.error(`${RED}[BLOCKED] ${validation.violations.length} non-L1 file(s) in package:${NC}`);
201
+ for (const v of validation.violations) {
202
+ console.error(`${RED} [${v.layer}] ${v.path} — ${v.reason}${NC}`);
203
+ }
204
+ foundIssues += validation.violations.length;
205
+ } else {
206
+ console.log(`${GREEN}[pre-publish] Layer validation PASSED: ${validation.totalFiles} files, all L1.${NC}`);
207
+ }
208
+ } catch (err) {
209
+ // Layer validation is best-effort in pre-publish gate.
210
+ // If Python or audit_layers.py not available, WARN but don't block.
211
+ console.warn(`${YELLOW}[pre-publish] Layer validation skipped: ${err.message}${NC}`);
212
+ console.warn(`${YELLOW}[pre-publish] Run 'node bin/validate-package.js' manually to validate.${NC}`);
213
+ }
214
+
215
+ // === VERDICT ===
216
+ if (foundIssues > 0) {
217
+ console.error('');
218
+ console.error(`${RED}=====================================================${NC}`);
219
+ console.error(`${RED} NPM PUBLISH BLOCKED: ${foundIssues} security issue(s) found ${NC}`);
220
+ console.error(`${RED}=====================================================${NC}`);
221
+ console.error('');
222
+ console.error(`${YELLOW} Fix the issues above before publishing.${NC}`);
223
+ console.error(`${YELLOW} Run 'npm pack --dry-run' to see what would be published.${NC}`);
224
+ console.error('');
225
+ process.exit(1);
226
+ }
227
+
228
+ console.log(`${GREEN}[pre-publish] Security gate PASSED. ${packFiles.length} files scanned, 0 issues.${NC}`);
229
+ console.log(`${GREEN}[pre-publish] Package is safe to publish.${NC}`);