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,46 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Session Autosave Hook - Mega Brain
4
+ Tracks tool usage for session persistence.
5
+ Called as PostToolUse hook for Bash, Write, Edit.
6
+
7
+ Usage: python3 session_autosave.py <TOOL_NAME> "<TOOL_INPUT>"
8
+ Exit codes: 0 = success, 1 = warning (non-blocking)
9
+ """
10
+
11
+ import sys
12
+ import json
13
+ import os
14
+ from datetime import datetime
15
+ from pathlib import Path
16
+
17
+ MEGA_BRAIN_ROOT = os.getenv("MEGA_BRAIN_ROOT", os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
18
+ SESSION_DIR = Path(MEGA_BRAIN_ROOT) / ".claude" / "sessions"
19
+ AUTOSAVE_LOG = SESSION_DIR / "autosave-activity.jsonl"
20
+
21
+
22
+ def main():
23
+ tool_name = sys.argv[1] if len(sys.argv) > 1 else "UNKNOWN"
24
+ tool_input = sys.argv[2] if len(sys.argv) > 2 else ""
25
+
26
+ try:
27
+ SESSION_DIR.mkdir(parents=True, exist_ok=True)
28
+
29
+ entry = {
30
+ "timestamp": datetime.now().isoformat(),
31
+ "tool": tool_name,
32
+ "input_preview": tool_input[:200] if tool_input else "",
33
+ }
34
+
35
+ with open(AUTOSAVE_LOG, "a", encoding="utf-8") as f:
36
+ f.write(json.dumps(entry, ensure_ascii=False) + "\n")
37
+
38
+ except Exception:
39
+ # Non-critical - never block execution
40
+ pass
41
+
42
+ sys.exit(0)
43
+
44
+
45
+ if __name__ == "__main__":
46
+ main()
@@ -0,0 +1,601 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ SKILL GENERATOR - Intelligence Layer v1.0
4
+ ==========================================
5
+ Converte frameworks extraidos do DNA em Skills executaveis (SKILL.md).
6
+
7
+ Pipeline: Framework DNA -> SKILL.md
8
+ Inspirado no NERO pipeline do MMOS (128+ skills de 11 personas).
9
+
10
+ Le DNA layers de personas, identifica frameworks/metodologias,
11
+ e converte cada um em SKILL.md executavel com workflow, evidencia, etc.
12
+
13
+ Dependencias: Sprint 4 completo (roles com weighted_score)
14
+ Inspiracao: MMOS NERO pipeline, formato SKILL.md do aios-core
15
+
16
+ Versao: 1.0.0
17
+ Data: 2026-02-26
18
+ """
19
+
20
+ import json
21
+ import re
22
+ import sys
23
+ import yaml
24
+ from pathlib import Path
25
+ from datetime import datetime, timezone
26
+ from collections import defaultdict
27
+
28
+ sys.path.insert(0, str(Path(__file__).parent))
29
+ from entity_normalizer import load_registry, save_registry, load_taxonomy
30
+
31
+ # ---------------------------------------------------------------------------
32
+ # PATHS
33
+ # ---------------------------------------------------------------------------
34
+ BASE_DIR = Path(__file__).parent.parent
35
+ INSIGHTS_DIR = BASE_DIR / "processing" / "insights"
36
+ CHUNKS_DIR = BASE_DIR / "processing" / "chunks"
37
+ SKILLS_OUTPUT_DIR = BASE_DIR / "knowledge" / "dna" / "skills"
38
+ SKILLS_REGISTRY_PATH = BASE_DIR / "knowledge" / "dna" / "_dna-skills-registry.yaml"
39
+
40
+ # ---------------------------------------------------------------------------
41
+ # FRAMEWORK EXTRACTION PATTERNS
42
+ # ---------------------------------------------------------------------------
43
+
44
+ # Patterns that indicate a framework or methodology in text
45
+ FRAMEWORK_INDICATORS = [
46
+ # Named frameworks (e.g., "The CLOSER Framework", "NEPQ Method")
47
+ r"(?:the\s+)?([A-Z][A-Z0-9\s-]{2,30})\s+(?:framework|method|model|system|process|approach|formula|technique|estrategia|metodo|processo|sistema)",
48
+ # Step-based patterns (e.g., "Step 1: ..., Step 2: ...")
49
+ r"(?:step|passo|etapa|fase)\s+[1-9][\s:.-]+([^\n]{10,80})",
50
+ # Numbered lists that look like methodology (3+ items)
51
+ r"(\d+)\)\s+([^\n]{10,80})",
52
+ # Acronym-based (e.g., "SPIN", "BANT", "MEDDIC")
53
+ r"\b([A-Z]{3,8})\b\s+(?:stands\s+for|significa|is\s+an?\s+(?:acronym|framework|method))",
54
+ # "Rule of" patterns
55
+ r"(?:rule|regra|lei)\s+(?:of|de|do|da)\s+(\w+(?:\s+\w+){0,3})",
56
+ # "X-Step" patterns (e.g., "7-Step Close", "3-Step Qualification")
57
+ r"(\d+)[-\s](?:step|passo|etapa)\s+(\w+(?:\s+\w+){0,3})",
58
+ ]
59
+
60
+ # Patterns for extracting steps within a framework
61
+ STEP_PATTERNS = [
62
+ r"(?:step|passo|etapa)\s+(\d+)[\s:.-]+([^\n]+)",
63
+ r"(\d+)[\)\.]\s+([^\n]+)",
64
+ r"(?:first|second|third|fourth|fifth|primeiro|segundo|terceiro|quarto|quinto)[\s:,]+([^\n]+)",
65
+ ]
66
+
67
+ # Skill type classification
68
+ SKILL_TYPE_KEYWORDS = {
69
+ "sequential": ["step", "passo", "etapa", "first", "then", "next", "depois", "apos"],
70
+ "parallel": ["simultaneously", "at the same time", "while", "ao mesmo tempo", "enquanto"],
71
+ "reference": ["guide", "reference", "checklist", "template", "guia", "referencia"],
72
+ }
73
+
74
+
75
+ # ---------------------------------------------------------------------------
76
+ # CORE: EXTRACT FRAMEWORKS
77
+ # ---------------------------------------------------------------------------
78
+ def extract_frameworks_from_text(text, source_id=None, persona=None):
79
+ """
80
+ Extract framework/methodology patterns from text.
81
+
82
+ Returns list of framework dicts with name, steps, evidence, etc.
83
+ """
84
+ frameworks = []
85
+ text_lower = text.lower()
86
+
87
+ # 1. Find named frameworks
88
+ for pattern in FRAMEWORK_INDICATORS[:3]:
89
+ for match in re.finditer(pattern, text, re.IGNORECASE):
90
+ name = match.group(1).strip() if match.group(1) else ""
91
+ if name and len(name) > 3 and not _is_noise(name):
92
+ ctx_start = max(0, match.start() - 200)
93
+ ctx_end = min(len(text), match.end() + 500)
94
+ context = text[ctx_start:ctx_end]
95
+
96
+ steps = _extract_steps_from_context(context)
97
+ fw = {
98
+ "name": _clean_framework_name(name),
99
+ "raw_name": name,
100
+ "steps": steps,
101
+ "step_count": len(steps),
102
+ "source_id": source_id,
103
+ "persona": persona,
104
+ "evidence": context[:300].strip(),
105
+ "layer": _classify_layer(context),
106
+ }
107
+ if not _is_duplicate_framework(fw, frameworks):
108
+ frameworks.append(fw)
109
+
110
+ # 2. Find step-sequence frameworks (unnamed but structured)
111
+ step_sequences = _find_step_sequences(text)
112
+ for seq in step_sequences:
113
+ if seq["step_count"] >= 3:
114
+ name = _infer_framework_name(seq["steps"], text)
115
+ fw = {
116
+ "name": name,
117
+ "raw_name": f"Unnamed {seq['step_count']}-step process",
118
+ "steps": seq["steps"],
119
+ "step_count": seq["step_count"],
120
+ "source_id": source_id,
121
+ "persona": persona,
122
+ "evidence": seq.get("context", "")[:300].strip(),
123
+ "layer": _classify_layer(seq.get("context", "")),
124
+ }
125
+ if not _is_duplicate_framework(fw, frameworks):
126
+ frameworks.append(fw)
127
+
128
+ # 3. Find acronym-based frameworks
129
+ for pattern in FRAMEWORK_INDICATORS[3:4]:
130
+ for match in re.finditer(pattern, text, re.IGNORECASE):
131
+ acronym = match.group(1).strip()
132
+ if len(acronym) >= 3 and not _is_noise(acronym):
133
+ ctx_start = max(0, match.start() - 100)
134
+ ctx_end = min(len(text), match.end() + 300)
135
+ context = text[ctx_start:ctx_end]
136
+ fw = {
137
+ "name": acronym,
138
+ "raw_name": acronym,
139
+ "steps": [],
140
+ "step_count": 0,
141
+ "source_id": source_id,
142
+ "persona": persona,
143
+ "evidence": context[:300].strip(),
144
+ "layer": "L3", # Acronyms are usually mental models
145
+ }
146
+ if not _is_duplicate_framework(fw, frameworks):
147
+ frameworks.append(fw)
148
+
149
+ return frameworks
150
+
151
+
152
+ def extract_frameworks_from_file(filepath):
153
+ """Extract frameworks from a chunk file."""
154
+ filepath = Path(filepath)
155
+ with open(filepath, "r", encoding="utf-8") as f:
156
+ data = json.load(f)
157
+
158
+ source_id = data.get("source_id", data.get("source_hash", filepath.stem))
159
+ persona = _detect_persona(source_id, data)
160
+
161
+ chunks = data.get("chunks", [data])
162
+ all_frameworks = []
163
+
164
+ for chunk in chunks:
165
+ text = chunk.get("content", "") or chunk.get("texto", "") or chunk.get("text", "")
166
+ if not text:
167
+ continue
168
+ frameworks = extract_frameworks_from_text(text, source_id=source_id, persona=persona)
169
+ all_frameworks.extend(frameworks)
170
+
171
+ return {
172
+ "source_id": source_id,
173
+ "persona": persona,
174
+ "frameworks_found": len(all_frameworks),
175
+ "frameworks": all_frameworks,
176
+ }
177
+
178
+
179
+ def scan_all_and_generate(registry=None, save=True):
180
+ """Scan all chunks, extract frameworks, generate SKILL.md files."""
181
+ if registry is None:
182
+ registry = load_registry()
183
+
184
+ # Phase 1: Extract all frameworks
185
+ persona_frameworks = defaultdict(list)
186
+ files_scanned = 0
187
+
188
+ for fpath in sorted(CHUNKS_DIR.glob("*.json")):
189
+ if fpath.name in ("CHUNKS-STATE.json", "_INDEX.json", "_rag_export.json"):
190
+ continue
191
+
192
+ result = extract_frameworks_from_file(fpath)
193
+ files_scanned += 1
194
+
195
+ persona = result["persona"] or "unknown"
196
+ persona_frameworks[persona].extend(result["frameworks"])
197
+
198
+ # Phase 2: Deduplicate frameworks per persona
199
+ for persona in persona_frameworks:
200
+ persona_frameworks[persona] = _deduplicate_frameworks(persona_frameworks[persona])
201
+
202
+ # Phase 3: Generate SKILL.md for each framework
203
+ total_skills = 0
204
+ skills_registry = {
205
+ "version": 1,
206
+ "generated_at": datetime.now(timezone.utc).isoformat(),
207
+ "total_skills": 0,
208
+ "personas": {},
209
+ }
210
+
211
+ for persona, frameworks in persona_frameworks.items():
212
+ persona_slug = _slugify(persona)
213
+ persona_skills = []
214
+
215
+ for fw in frameworks:
216
+ if fw["step_count"] < 2 and not fw["name"]:
217
+ continue # Skip frameworks without enough structure
218
+
219
+ skill_id = f"dna-{persona_slug}-{_slugify(fw['name'])}"
220
+ skill_type = _classify_skill_type(fw)
221
+
222
+ skill = {
223
+ "skill_id": skill_id,
224
+ "source_persona": persona,
225
+ "source_layer": fw.get("layer", "L3"),
226
+ "name": fw["name"],
227
+ "type": skill_type,
228
+ "workflow_steps": fw["steps"],
229
+ "step_count": fw["step_count"],
230
+ "evidence": fw.get("evidence", ""),
231
+ "source_id": fw.get("source_id", ""),
232
+ }
233
+
234
+ if save:
235
+ _save_skill_md(persona_slug, skill)
236
+
237
+ persona_skills.append(skill)
238
+ total_skills += 1
239
+
240
+ skills_registry["personas"][persona_slug] = {
241
+ "skills_count": len(persona_skills),
242
+ "skills": [s["skill_id"] for s in persona_skills],
243
+ }
244
+
245
+ skills_registry["total_skills"] = total_skills
246
+
247
+ if save:
248
+ _save_skills_registry(skills_registry)
249
+
250
+ return {
251
+ "files_scanned": files_scanned,
252
+ "personas_found": len(persona_frameworks),
253
+ "total_frameworks": sum(len(v) for v in persona_frameworks.values()),
254
+ "total_skills_generated": total_skills,
255
+ "per_persona": {
256
+ k: len(v) for k, v in persona_frameworks.items()
257
+ },
258
+ }
259
+
260
+
261
+ # ---------------------------------------------------------------------------
262
+ # SKILL MD GENERATION
263
+ # ---------------------------------------------------------------------------
264
+ def _save_skill_md(persona_slug, skill):
265
+ """Generate and save SKILL.md file."""
266
+ skill_dir = SKILLS_OUTPUT_DIR / persona_slug
267
+ skill_dir.mkdir(parents=True, exist_ok=True)
268
+
269
+ filename = f"{_slugify(skill['name'])}.md"
270
+ filepath = skill_dir / filename
271
+
272
+ lines = [
273
+ f"# {skill['name']}",
274
+ f"",
275
+ f"> **Skill ID:** {skill['skill_id']}",
276
+ f"> **Source:** DNA Layer {skill['source_layer']} - {skill['source_persona']}",
277
+ f"> **Type:** {skill['type']}",
278
+ f"> **Version:** 1.0.0 (auto-generated)",
279
+ f"",
280
+ ]
281
+
282
+ # When to Use
283
+ lines.extend([
284
+ f"## Quando Usar",
285
+ f"",
286
+ f"Framework aplicavel quando o contexto envolve {skill['source_persona']} "
287
+ f"e a situacao requer um processo estruturado de {skill['name'].lower()}.",
288
+ f"",
289
+ ])
290
+
291
+ # When NOT to Use
292
+ lines.extend([
293
+ f"## Quando NAO Usar",
294
+ f"",
295
+ f"- Contexto nao relacionado ao dominio original",
296
+ f"- Quando uma abordagem mais simples resolve",
297
+ f"- Quando o framework conflita com outro framework ativo",
298
+ f"",
299
+ ])
300
+
301
+ # Workflow
302
+ lines.extend([
303
+ f"## Workflow",
304
+ f"",
305
+ ])
306
+ if skill["workflow_steps"]:
307
+ for i, step in enumerate(skill["workflow_steps"], 1):
308
+ lines.append(f"{i}. {step}")
309
+ else:
310
+ lines.append(f"_Framework detectado mas steps nao extraidos automaticamente. "
311
+ f"Consultar evidencia original._")
312
+ lines.append("")
313
+
314
+ # Output
315
+ lines.extend([
316
+ f"## Output Esperado",
317
+ f"",
318
+ f"Resultado estruturado seguindo os {skill['step_count']} passos do framework.",
319
+ f"",
320
+ ])
321
+
322
+ # Evidence
323
+ lines.extend([
324
+ f"## Evidencia e Atribuicao",
325
+ f"",
326
+ f"**Source ID:** {skill['source_id']}",
327
+ f"",
328
+ f"```",
329
+ f"{skill['evidence'][:500]}",
330
+ f"```",
331
+ f"",
332
+ f"---",
333
+ f"Auto-gerado por Mega Brain Intelligence Layer | {datetime.now(timezone.utc).strftime('%Y-%m-%d')}",
334
+ ])
335
+
336
+ with open(filepath, "w", encoding="utf-8") as f:
337
+ f.write("\n".join(lines))
338
+
339
+
340
+ def _save_skills_registry(registry_data):
341
+ """Save _dna-skills-registry.yaml."""
342
+ SKILLS_REGISTRY_PATH.parent.mkdir(parents=True, exist_ok=True)
343
+ with open(SKILLS_REGISTRY_PATH, "w", encoding="utf-8") as f:
344
+ yaml.dump(registry_data, f, default_flow_style=False, allow_unicode=True)
345
+
346
+
347
+ # ---------------------------------------------------------------------------
348
+ # HELPERS
349
+ # ---------------------------------------------------------------------------
350
+ def _clean_framework_name(name):
351
+ """Clean and normalize framework name."""
352
+ name = re.sub(r"\s+", " ", name.strip())
353
+ # Remove common noise words at start
354
+ name = re.sub(r"^(?:the|a|an|o|a)\s+", "", name, flags=re.IGNORECASE)
355
+ return name.title() if name else "Unnamed Framework"
356
+
357
+
358
+ def _classify_layer(context):
359
+ """Classify which DNA layer a framework belongs to."""
360
+ ctx_lower = context.lower()
361
+ if any(kw in ctx_lower for kw in ["step", "passo", "process", "processo", "how to", "como"]):
362
+ return "L3" # Mental models / processes
363
+ if any(kw in ctx_lower for kw in ["believe", "acredit", "philosophy", "filosofia", "mindset"]):
364
+ return "L4" # Values / beliefs
365
+ if any(kw in ctx_lower for kw in ["always", "never", "rule", "regra", "principle", "principio"]):
366
+ return "L4" # Values / principles
367
+ if any(kw in ctx_lower for kw in ["feel", "emotion", "intuition", "gut", "instinto"]):
368
+ return "L2" # Recognition patterns
369
+ return "L3" # Default to mental models
370
+
371
+
372
+ def _classify_skill_type(fw):
373
+ """Classify skill as sequential, parallel, or reference."""
374
+ text = " ".join(fw.get("steps", [])).lower() + " " + fw.get("evidence", "").lower()
375
+
376
+ for skill_type, keywords in SKILL_TYPE_KEYWORDS.items():
377
+ if any(kw in text for kw in keywords):
378
+ return skill_type
379
+
380
+ if fw["step_count"] >= 3:
381
+ return "sequential"
382
+ return "reference"
383
+
384
+
385
+ def _extract_steps_from_context(context):
386
+ """Extract numbered/sequential steps from context text."""
387
+ steps = []
388
+ for pattern in STEP_PATTERNS:
389
+ matches = re.finditer(pattern, context, re.IGNORECASE)
390
+ for match in matches:
391
+ groups = match.groups()
392
+ step_text = groups[-1].strip() if groups else ""
393
+ if step_text and len(step_text) > 5 and not _is_noise(step_text):
394
+ steps.append(step_text[:200])
395
+
396
+ # Deduplicate while preserving order
397
+ seen = set()
398
+ unique_steps = []
399
+ for s in steps:
400
+ norm = s.lower()[:50]
401
+ if norm not in seen:
402
+ seen.add(norm)
403
+ unique_steps.append(s)
404
+
405
+ return unique_steps[:15] # Cap at 15 steps
406
+
407
+
408
+ def _find_step_sequences(text):
409
+ """Find sequences of numbered steps in text."""
410
+ sequences = []
411
+ lines = text.split("\n")
412
+
413
+ current_steps = []
414
+ current_start = 0
415
+
416
+ for i, line in enumerate(lines):
417
+ match = re.match(r"^\s*(\d+)[\)\.:\s]+(.{10,200})", line)
418
+ if match:
419
+ step_num = int(match.group(1))
420
+ step_text = match.group(2).strip()
421
+
422
+ if step_num == 1 or (current_steps and step_num == len(current_steps) + 1):
423
+ if step_num == 1 and current_steps:
424
+ # Save previous sequence
425
+ if len(current_steps) >= 3:
426
+ ctx_start = max(0, current_start - 100)
427
+ ctx_end = min(len(text), i * 80)
428
+ sequences.append({
429
+ "steps": current_steps,
430
+ "step_count": len(current_steps),
431
+ "context": text[ctx_start:ctx_end][:500],
432
+ })
433
+ current_steps = []
434
+ current_start = i
435
+
436
+ current_steps.append(step_text)
437
+ else:
438
+ if current_steps and len(current_steps) >= 3:
439
+ ctx_start = max(0, current_start - 100)
440
+ sequences.append({
441
+ "steps": current_steps,
442
+ "step_count": len(current_steps),
443
+ "context": "\n".join(lines[max(0, current_start - 2):i])[:500],
444
+ })
445
+ current_steps = []
446
+
447
+ # Don't forget last sequence
448
+ if current_steps and len(current_steps) >= 3:
449
+ sequences.append({
450
+ "steps": current_steps,
451
+ "step_count": len(current_steps),
452
+ "context": "\n".join(lines[-min(20, len(lines)):])[:500],
453
+ })
454
+
455
+ return sequences
456
+
457
+
458
+ def _infer_framework_name(steps, full_text):
459
+ """Try to infer a name for an unnamed framework from its steps."""
460
+ if not steps:
461
+ return "Unnamed Process"
462
+
463
+ # Look at the context right before the steps
464
+ first_step = steps[0]
465
+ idx = full_text.find(first_step)
466
+ if idx > 20:
467
+ before = full_text[max(0, idx - 200):idx].strip()
468
+ # Look for a title/header before the steps
469
+ lines = before.split("\n")
470
+ for line in reversed(lines):
471
+ line = line.strip()
472
+ if line and 5 < len(line) < 60 and not line[0].isdigit():
473
+ return line.rstrip(":").strip().title()
474
+
475
+ # Fallback: use verb from first step
476
+ first_word = steps[0].split()[0] if steps[0] else "Process"
477
+ return f"{first_word.title()} Framework ({len(steps)} Steps)"
478
+
479
+
480
+ def _is_duplicate_framework(new_fw, existing):
481
+ """Check if framework is duplicate of an existing one."""
482
+ new_name_lower = new_fw["name"].lower()
483
+ for fw in existing:
484
+ if fw["name"].lower() == new_name_lower:
485
+ return True
486
+ # Check if steps overlap significantly
487
+ if fw["steps"] and new_fw["steps"]:
488
+ overlap = len(set(s.lower()[:30] for s in fw["steps"]) &
489
+ set(s.lower()[:30] for s in new_fw["steps"]))
490
+ if overlap >= 3:
491
+ return True
492
+ return False
493
+
494
+
495
+ def _deduplicate_frameworks(frameworks):
496
+ """Deduplicate a list of frameworks."""
497
+ unique = []
498
+ for fw in frameworks:
499
+ if not _is_duplicate_framework(fw, unique):
500
+ unique.append(fw)
501
+ return unique
502
+
503
+
504
+ def _detect_persona(source_id, data):
505
+ """Detect which persona this content belongs to."""
506
+ # Check source_id for person name hints
507
+ if not source_id:
508
+ return None
509
+
510
+ source_lower = source_id.lower()
511
+ persona_hints = {
512
+ "hormozi": "Alex Hormozi",
513
+ "cole": "Cole Gordon",
514
+ "gordon": "Cole Gordon",
515
+ "sam": "Sam Oven",
516
+ "oven": "Sam Oven",
517
+ "jordan": "Jordan Lee",
518
+ "miner": "Jeremy Miner",
519
+ "haynes": "Jeremy Haynes",
520
+ "brunson": "Russell Brunson",
521
+ }
522
+
523
+ for hint, persona in persona_hints.items():
524
+ if hint in source_lower:
525
+ return persona
526
+
527
+ # Check metadata
528
+ meta_persona = data.get("persona", data.get("speaker", data.get("author")))
529
+ if meta_persona:
530
+ return meta_persona
531
+
532
+ return None
533
+
534
+
535
+ def _is_noise(text):
536
+ """Check if text is noise (too generic, stop words, etc.)."""
537
+ noise_words = {
538
+ "the", "a", "an", "this", "that", "these", "those",
539
+ "and", "or", "but", "if", "then", "so", "because",
540
+ "you", "your", "they", "them", "we", "our", "i", "my",
541
+ "it", "its", "is", "are", "was", "were", "be",
542
+ }
543
+ words = text.lower().split()
544
+ if len(words) <= 1:
545
+ return True
546
+ if all(w in noise_words for w in words):
547
+ return True
548
+ if len(text) < 4:
549
+ return True
550
+ return False
551
+
552
+
553
+ def _slugify(text):
554
+ """Convert text to slug format."""
555
+ if not text:
556
+ return "unknown"
557
+ text = text.lower().strip()
558
+ text = re.sub(r"[^\w\s-]", "", text)
559
+ text = re.sub(r"[\s]+", "-", text)
560
+ text = re.sub(r"-+", "-", text)
561
+ return text[:50].strip("-")
562
+
563
+
564
+ # ---------------------------------------------------------------------------
565
+ # CLI
566
+ # ---------------------------------------------------------------------------
567
+ def main():
568
+ if len(sys.argv) > 1 and sys.argv[1] == "--all":
569
+ print("\n=== SKILL GENERATOR v1.0: Full Scan ===\n")
570
+ result = scan_all_and_generate(save=True)
571
+ print(f"Files scanned: {result['files_scanned']}")
572
+ print(f"Personas found: {result['personas_found']}")
573
+ print(f"Total frameworks: {result['total_frameworks']}")
574
+ print(f"Skills generated: {result['total_skills_generated']}")
575
+
576
+ if result["per_persona"]:
577
+ print(f"\n--- Per Persona ---")
578
+ for persona, count in sorted(result["per_persona"].items(),
579
+ key=lambda x: -x[1]):
580
+ print(f" {persona:30s} {count} frameworks")
581
+
582
+ elif len(sys.argv) > 1:
583
+ filepath = sys.argv[1]
584
+ result = extract_frameworks_from_file(filepath)
585
+ print(f"\nSource: {result['source_id']}")
586
+ print(f"Persona: {result['persona']}")
587
+ print(f"Frameworks found: {result['frameworks_found']}")
588
+ for fw in result["frameworks"]:
589
+ print(f"\n [{fw.get('layer', '?')}] {fw['name']} ({fw['step_count']} steps)")
590
+ for i, step in enumerate(fw["steps"][:5], 1):
591
+ print(f" {i}. {step[:80]}")
592
+
593
+ else:
594
+ print("Uso:")
595
+ print(" python3 skill_generator.py --all # Scan all + generate skills")
596
+ print(" python3 skill_generator.py <filepath> # Extract from single file")
597
+ sys.exit(1)
598
+
599
+
600
+ if __name__ == "__main__":
601
+ main()