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,251 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Memory Hints Injector v1.0 (Mega Brain) - Bracket-Aware Agent Memory Enhancement
4
+
5
+ Implements MIS (Memory Integration System) for bracket-aware memory injection
6
+ that adapts to context window usage.
7
+
8
+ Adapted from: aios-core/.claude/hooks/memory_hints_injector.py
9
+
10
+ BRACKETS:
11
+ FRESH (60-100% context remaining) -> No extra memory needed
12
+ MODERATE (40-60%) -> Brief memory reminder (~50 tokens)
13
+ DEPLETED (25-40%) -> Extended memory reinforcement (~200 tokens)
14
+ CRITICAL (0-25%) -> Full memory + handoff warning (~1000 tokens)
15
+
16
+ INTEGRATION:
17
+ - Runs at UserPromptSubmit, AFTER skill_router.py
18
+ - Tracks prompt_count in STATE.json (mis.prompt_count)
19
+ - Reads from .claude/agent-memory/ (our existing data store)
20
+ - Returns feedback with memory hints when bracket warrants it
21
+
22
+ FAIL-OPEN: Never blocks user input. Returns {"continue": true} on any error.
23
+
24
+ Hook Type: UserPromptSubmit
25
+ """
26
+
27
+ import json
28
+ import sys
29
+ import os
30
+ import time
31
+ from pathlib import Path
32
+
33
+ PROJECT_ROOT = Path(os.environ.get('CLAUDE_PROJECT_DIR', '.'))
34
+ STATE_DIR = PROJECT_ROOT / ".claude" / "jarvis"
35
+ STATE_FILE = STATE_DIR / "STATE.json"
36
+ AGENT_MEMORY_DIR = PROJECT_ROOT / ".claude" / "agent-memory"
37
+
38
+ # Context Brackets
39
+ BRACKET_LAYER_MAP = {
40
+ "FRESH": {"layer": 0, "max_tokens": 0, "max_lines": 0},
41
+ "MODERATE": {"layer": 1, "max_tokens": 50, "max_lines": 5},
42
+ "DEPLETED": {"layer": 2, "max_tokens": 200, "max_lines": 20},
43
+ "CRITICAL": {"layer": 3, "max_tokens": 1000, "max_lines": 50},
44
+ }
45
+
46
+ DEFAULTS = {
47
+ "avg_tokens_per_prompt": 1500,
48
+ "max_context": 200000,
49
+ }
50
+
51
+ INTERNAL_TIMEOUT_MS = 80
52
+
53
+
54
+ def calculate_bracket(context_percent):
55
+ """Calculate context bracket from remaining context percentage."""
56
+ if not isinstance(context_percent, (int, float)):
57
+ return "CRITICAL"
58
+ if context_percent >= 60:
59
+ return "FRESH"
60
+ if context_percent >= 40:
61
+ return "MODERATE"
62
+ if context_percent >= 25:
63
+ return "DEPLETED"
64
+ return "CRITICAL"
65
+
66
+
67
+ def estimate_context_percent(prompt_count, avg_tokens=None, max_context=None):
68
+ """Estimate percentage of context remaining based on prompt count."""
69
+ avg = avg_tokens or DEFAULTS["avg_tokens_per_prompt"]
70
+ mx = max_context or DEFAULTS["max_context"]
71
+
72
+ if not isinstance(prompt_count, (int, float)) or prompt_count < 0:
73
+ return 100
74
+ if mx <= 0:
75
+ return 0
76
+
77
+ used = prompt_count * avg
78
+ percent = 100 - (used / mx * 100)
79
+ return max(0.0, min(100.0, percent))
80
+
81
+
82
+ def load_state():
83
+ """Load STATE.json safely."""
84
+ if not STATE_FILE.exists():
85
+ return {}
86
+ try:
87
+ with open(STATE_FILE, "r", encoding="utf-8") as f:
88
+ return json.load(f)
89
+ except (json.JSONDecodeError, IOError):
90
+ return {}
91
+
92
+
93
+ def save_state(state):
94
+ """Save STATE.json safely."""
95
+ try:
96
+ STATE_DIR.mkdir(parents=True, exist_ok=True)
97
+ with open(STATE_FILE, "w", encoding="utf-8") as f:
98
+ json.dump(state, f, indent=2, ensure_ascii=False)
99
+ except Exception:
100
+ pass
101
+
102
+
103
+ def get_active_agent(state):
104
+ """Get active agent slug from state."""
105
+ session = state.get("session", {})
106
+ agent = session.get("agent_active")
107
+ if agent and isinstance(agent, str) and agent.strip():
108
+ return agent.strip()
109
+ return None
110
+
111
+
112
+ def estimate_tokens(text):
113
+ """Rough token estimation (~4 chars per token)."""
114
+ if not text:
115
+ return 0
116
+ return max(1, len(text) // 4)
117
+
118
+
119
+ def read_agent_memory_hints(agent_slug, max_lines, max_tokens):
120
+ """
121
+ Read memory hints from agent's MEMORY.md, respecting token budget.
122
+ Reads from the END of the file (most recent entries) working backwards.
123
+ """
124
+ memory_path = AGENT_MEMORY_DIR / agent_slug / "MEMORY.md"
125
+ if not memory_path.exists():
126
+ return ""
127
+
128
+ try:
129
+ content = memory_path.read_text(encoding="utf-8")
130
+ except Exception:
131
+ return ""
132
+
133
+ lines = content.split("\n")
134
+ if len(lines) < 10:
135
+ return ""
136
+
137
+ useful_lines = []
138
+ tokens_used = 0
139
+
140
+ for line in reversed(lines):
141
+ stripped = line.strip()
142
+
143
+ if not stripped:
144
+ if useful_lines:
145
+ useful_lines.insert(0, "")
146
+ continue
147
+
148
+ if stripped.startswith("# ") and len(useful_lines) == 0:
149
+ continue
150
+ if stripped.startswith("> ") and len(useful_lines) == 0:
151
+ continue
152
+
153
+ line_tokens = estimate_tokens(stripped)
154
+
155
+ if tokens_used + line_tokens > max_tokens:
156
+ break
157
+ if len(useful_lines) >= max_lines:
158
+ break
159
+
160
+ useful_lines.insert(0, line)
161
+ tokens_used += line_tokens
162
+
163
+ result = "\n".join(useful_lines).strip()
164
+
165
+ while result.startswith("---"):
166
+ result = result[3:].strip()
167
+
168
+ return result
169
+
170
+
171
+ def main():
172
+ """Main hook execution."""
173
+ start_time = time.time()
174
+
175
+ try:
176
+ input_data = sys.stdin.read()
177
+
178
+ state = load_state()
179
+ if not state:
180
+ print(json.dumps({"continue": True}))
181
+ return
182
+
183
+ # MIS Prompt Counter
184
+ session_id = state.get("session_id", "")
185
+ mis = state.setdefault("mis", {})
186
+
187
+ if mis.get("session_id") != session_id:
188
+ mis["session_id"] = session_id
189
+ mis["prompt_count"] = 0
190
+
191
+ prompt_count = mis.get("prompt_count", 0) + 1
192
+ mis["prompt_count"] = prompt_count
193
+
194
+ # Calculate Bracket
195
+ context_percent = estimate_context_percent(prompt_count)
196
+ bracket = calculate_bracket(context_percent)
197
+ mis["bracket"] = bracket
198
+ mis["context_percent"] = round(context_percent, 1)
199
+
200
+ save_state(state)
201
+
202
+ # Check if memory hints needed
203
+ layer_config = BRACKET_LAYER_MAP.get(bracket, BRACKET_LAYER_MAP["FRESH"])
204
+ max_tokens = layer_config["max_tokens"]
205
+ max_lines = layer_config["max_lines"]
206
+
207
+ if max_tokens <= 0:
208
+ print(json.dumps({"continue": True}))
209
+ return
210
+
211
+ # Timeout check
212
+ elapsed_ms = (time.time() - start_time) * 1000
213
+ if elapsed_ms > INTERNAL_TIMEOUT_MS * 0.5:
214
+ print(json.dumps({"continue": True}))
215
+ return
216
+
217
+ # Get active agent
218
+ raw_slug = get_active_agent(state)
219
+ if not raw_slug:
220
+ print(json.dumps({"continue": True}))
221
+ return
222
+
223
+ agent_slug = raw_slug
224
+
225
+ # Read memory hints
226
+ hints = read_agent_memory_hints(agent_slug, max_lines, max_tokens)
227
+
228
+ # Final timeout check
229
+ elapsed_ms = (time.time() - start_time) * 1000
230
+ if elapsed_ms > INTERNAL_TIMEOUT_MS:
231
+ print(json.dumps({"continue": True}))
232
+ return
233
+
234
+ # Return feedback
235
+ if hints:
236
+ if bracket == "CRITICAL":
237
+ prefix = f"[MIS:{bracket}] Context at {round(context_percent)}%. Memory reinforcement for @{agent_slug}:"
238
+ else:
239
+ prefix = f"[MIS:{bracket}] @{agent_slug} memory:"
240
+
241
+ feedback = f"{prefix}\n{hints}"
242
+ print(json.dumps({"continue": True, "feedback": feedback}))
243
+ else:
244
+ print(json.dumps({"continue": True}))
245
+
246
+ except Exception:
247
+ print(json.dumps({"continue": True}))
248
+
249
+
250
+ if __name__ == "__main__":
251
+ main()
@@ -0,0 +1,202 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ JARVIS Memory Updater Hook
4
+ Atualiza JARVIS-MEMORY.md automaticamente.
5
+
6
+ Triggers:
7
+ - Decisoes importantes detectadas
8
+ - Preferencias demonstradas
9
+ - Final de sessao
10
+ - Padroes de comportamento observados
11
+ """
12
+
13
+ import json
14
+ import sys
15
+ import os
16
+ import re
17
+ from datetime import datetime
18
+ from pathlib import Path
19
+
20
+ def get_project_dir():
21
+ """Obtem o diretorio do projeto."""
22
+ return os.environ.get('CLAUDE_PROJECT_DIR', os.getcwd())
23
+
24
+ def load_memory():
25
+ """Carrega JARVIS-MEMORY.md atual."""
26
+ project_dir = get_project_dir()
27
+ memory_path = Path(project_dir) / '.claude' / 'jarvis' / 'JARVIS-MEMORY.md'
28
+
29
+ if memory_path.exists():
30
+ with open(memory_path, 'r', encoding='utf-8') as f:
31
+ return f.read()
32
+ return None
33
+
34
+ def detect_decision(message):
35
+ """Detecta se a mensagem contem uma decisao importante."""
36
+ decision_patterns = [
37
+ r'decid[io]',
38
+ r'escolh[eo]',
39
+ r'prefer[eo]',
40
+ r'vamos (usar|fazer|implementar)',
41
+ r'aprovo',
42
+ r'confirmo',
43
+ r'sim,?\s*(pode|faz|continua)',
44
+ r'nao,?\s*(nao pode|nao faz)',
45
+ ]
46
+
47
+ message_lower = message.lower()
48
+ for pattern in decision_patterns:
49
+ if re.search(pattern, message_lower):
50
+ return True
51
+ return False
52
+
53
+ def detect_preference(message):
54
+ """Detecta se a mensagem demonstra uma preferencia."""
55
+ preference_patterns = [
56
+ r'gosto (de|quando)',
57
+ r'prefiro',
58
+ r'sempre (quero|faz)',
59
+ r'nunca (quero|faz)',
60
+ r'melhor (assim|dessa forma)',
61
+ r'perfeito',
62
+ ]
63
+
64
+ message_lower = message.lower()
65
+ for pattern in preference_patterns:
66
+ if re.search(pattern, message_lower):
67
+ return True
68
+ return False
69
+
70
+ def extract_decision_summary(message):
71
+ """Extrai um resumo da decisao."""
72
+ # Limitar a 100 caracteres
73
+ summary = message[:100]
74
+ if len(message) > 100:
75
+ summary += "..."
76
+ return summary
77
+
78
+ def update_memory_file(section, content):
79
+ """Atualiza uma secao especifica do JARVIS-MEMORY.md."""
80
+ project_dir = get_project_dir()
81
+ memory_path = Path(project_dir) / '.claude' / 'jarvis' / 'JARVIS-MEMORY.md'
82
+
83
+ if not memory_path.exists():
84
+ return False
85
+
86
+ with open(memory_path, 'r', encoding='utf-8') as f:
87
+ memory = f.read()
88
+
89
+ # Encontrar secao de decisoes e adicionar
90
+ if section == 'decisions':
91
+ # Procurar por "### Decisoes Importantes"
92
+ if '### Decisoes Importantes' in memory:
93
+ # Adicionar nova decisao
94
+ date_str = datetime.now().strftime('%Y-%m-%d')
95
+ new_entry = f"\n{date_str}:\n├─ {content}\n"
96
+
97
+ # Inserir apos o header da secao
98
+ parts = memory.split('### Decisoes Importantes')
99
+ if len(parts) == 2:
100
+ # Encontrar o bloco de codigo
101
+ if '```' in parts[1]:
102
+ code_start = parts[1].find('```')
103
+ code_end = parts[1].find('```', code_start + 3)
104
+ if code_end > code_start:
105
+ # Inserir antes do fechamento do bloco
106
+ before = parts[1][:code_end]
107
+ after = parts[1][code_end:]
108
+ parts[1] = before + new_entry + after
109
+ memory = '### Decisoes Importantes'.join(parts)
110
+
111
+ # Atualizar timestamp
112
+ memory = re.sub(
113
+ r'\*Ultima atualizacao: \d{4}-\d{2}-\d{2}\*',
114
+ f'*Ultima atualizacao: {datetime.now().strftime("%Y-%m-%d")}*',
115
+ memory
116
+ )
117
+
118
+ # Incrementar contador de interacoes
119
+ match = re.search(r'\*Interacoes registradas: (\d+)\*', memory)
120
+ if match:
121
+ count = int(match.group(1)) + 1
122
+ memory = re.sub(
123
+ r'\*Interacoes registradas: \d+\*',
124
+ f'*Interacoes registradas: {count}*',
125
+ memory
126
+ )
127
+
128
+ with open(memory_path, 'w', encoding='utf-8') as f:
129
+ f.write(memory)
130
+
131
+ return True
132
+
133
+ def log_update(update_type, content):
134
+ """Loga a atualizacao de memoria."""
135
+ project_dir = get_project_dir()
136
+ log_path = Path(project_dir) / 'logs' / 'memory_updates.jsonl'
137
+ log_path.parent.mkdir(parents=True, exist_ok=True)
138
+
139
+ log_entry = {
140
+ 'timestamp': datetime.now().isoformat(),
141
+ 'type': update_type,
142
+ 'content': content[:200]
143
+ }
144
+
145
+ with open(log_path, 'a', encoding='utf-8') as f:
146
+ f.write(json.dumps(log_entry, ensure_ascii=False) + '\n')
147
+
148
+ def main():
149
+ """Funcao principal do hook."""
150
+ try:
151
+ # Ler input do hook
152
+ input_data = sys.stdin.read()
153
+ if not input_data:
154
+ print(json.dumps({'continue': True}))
155
+ return
156
+
157
+ hook_input = json.loads(input_data)
158
+
159
+ # Extrair mensagem do usuario (se disponivel)
160
+ message = hook_input.get('message', '')
161
+ if not message:
162
+ # Tentar extrair de outros campos
163
+ message = hook_input.get('content', '')
164
+ if not message:
165
+ message = hook_input.get('text', '')
166
+
167
+ if not message:
168
+ print(json.dumps({'continue': True}))
169
+ return
170
+
171
+ updated = False
172
+
173
+ # Detectar decisoes
174
+ if detect_decision(message):
175
+ summary = extract_decision_summary(message)
176
+ if update_memory_file('decisions', summary):
177
+ log_update('decision', summary)
178
+ updated = True
179
+
180
+ # Detectar preferencias
181
+ if detect_preference(message):
182
+ summary = extract_decision_summary(message)
183
+ log_update('preference', summary)
184
+ updated = True
185
+
186
+ # Output
187
+ output = {
188
+ 'continue': True,
189
+ 'memory_updated': updated
190
+ }
191
+
192
+ print(json.dumps(output))
193
+
194
+ except Exception as e:
195
+ # Nao bloquear em caso de erro
196
+ print(json.dumps({
197
+ 'continue': True,
198
+ 'error': str(e)
199
+ }))
200
+
201
+ if __name__ == '__main__':
202
+ main()
@@ -0,0 +1,115 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ NOTIFICATION SYSTEM
4
+ ===================
5
+ Envia notificações do sistema quando Claude precisa de input ou completa tarefas.
6
+
7
+ Baseado no workflow Boris Cherny: "I use system notifications to know when a Claude needs input"
8
+
9
+ Platforms:
10
+ - macOS: osascript (native notifications)
11
+ - Terminal: bell + print
12
+
13
+ Usage:
14
+ python3 notification_system.py "Title" "Message" [type]
15
+
16
+ Types:
17
+ - info: Informational (default)
18
+ - success: Task completed
19
+ - warning: Needs attention
20
+ - error: Something failed
21
+ """
22
+
23
+ import sys
24
+ import os
25
+ import subprocess
26
+ from datetime import datetime
27
+ from pathlib import Path
28
+
29
+ # Fix Windows cp1252 encoding — emojis crash without this
30
+ if sys.platform == 'win32':
31
+ sys.stdout.reconfigure(encoding='utf-8', errors='replace')
32
+ sys.stderr.reconfigure(encoding='utf-8', errors='replace')
33
+
34
+ PROJECT_ROOT = Path(os.environ.get('CLAUDE_PROJECT_DIR', '.'))
35
+ LOGS_PATH = PROJECT_ROOT / 'logs' / 'notifications'
36
+ LOGS_PATH.mkdir(parents=True, exist_ok=True)
37
+
38
+ def send_macos_notification(title: str, message: str, sound: str = "default"):
39
+ """Send native macOS notification"""
40
+ script = f'''
41
+ display notification "{message}" with title "{title}" sound name "{sound}"
42
+ '''
43
+ try:
44
+ subprocess.run(['osascript', '-e', script], capture_output=True, timeout=5)
45
+ return True
46
+ except Exception:
47
+ return False
48
+
49
+ def send_terminal_bell():
50
+ """Send terminal bell character"""
51
+ print('\a', end='', flush=True)
52
+
53
+ def log_notification(title: str, message: str, notif_type: str):
54
+ """Log notification"""
55
+ log_file = LOGS_PATH / 'notifications.jsonl'
56
+ import json
57
+ entry = {
58
+ 'timestamp': datetime.now().isoformat(),
59
+ 'title': title,
60
+ 'message': message,
61
+ 'type': notif_type
62
+ }
63
+ with open(log_file, 'a') as f:
64
+ f.write(json.dumps(entry) + '\n')
65
+
66
+ def get_sound_for_type(notif_type: str) -> str:
67
+ """Get appropriate sound for notification type"""
68
+ sounds = {
69
+ 'info': 'Pop',
70
+ 'success': 'Glass',
71
+ 'warning': 'Basso',
72
+ 'error': 'Sosumi'
73
+ }
74
+ return sounds.get(notif_type, 'default')
75
+
76
+ def main():
77
+ import json as json_module
78
+
79
+ if len(sys.argv) < 3:
80
+ print(json_module.dumps({"continue": True, "feedback": "notification_system: missing args"}))
81
+ sys.exit(0)
82
+
83
+ title = sys.argv[1]
84
+ message = sys.argv[2]
85
+ notif_type = sys.argv[3] if len(sys.argv) > 3 else 'info'
86
+
87
+ log_notification(title, message, notif_type)
88
+
89
+ sound = get_sound_for_type(notif_type)
90
+ send_macos_notification(title, message, sound)
91
+ send_terminal_bell()
92
+
93
+ # Output valid JSON for Claude Code hooks
94
+ print(json_module.dumps({"continue": True, "feedback": f"[{title}] {message}"}))
95
+ sys.exit(0)
96
+
97
+ # Convenience functions for direct import
98
+ def notify_needs_input(context: str = ""):
99
+ """Notify that Claude needs user input"""
100
+ msg = f"Claude needs your input{': ' + context if context else ''}"
101
+ send_macos_notification("🤖 JARVIS", msg, "Basso")
102
+ send_terminal_bell()
103
+
104
+ def notify_task_complete(task: str = ""):
105
+ """Notify that a task completed"""
106
+ msg = f"Task completed{': ' + task if task else ''}"
107
+ send_macos_notification("✅ JARVIS", msg, "Glass")
108
+
109
+ def notify_error(error: str = ""):
110
+ """Notify about an error"""
111
+ msg = f"Error{': ' + error if error else ''}"
112
+ send_macos_notification("❌ JARVIS", msg, "Sosumi")
113
+
114
+ if __name__ == '__main__':
115
+ main()