aios-core 4.2.14 → 4.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 (288) hide show
  1. package/.aios-core/cli/commands/validate/index.js +1 -1
  2. package/.aios-core/core/code-intel/helpers/creation-helper.js +183 -0
  3. package/.aios-core/core/code-intel/helpers/devops-helper.js +166 -0
  4. package/.aios-core/core/code-intel/helpers/planning-helper.js +248 -0
  5. package/.aios-core/core/code-intel/helpers/qa-helper.js +187 -0
  6. package/.aios-core/core/code-intel/helpers/story-helper.js +146 -0
  7. package/.aios-core/core/config/schemas/framework-config.schema.json +155 -7
  8. package/.aios-core/core/config/schemas/project-config.schema.json +329 -15
  9. package/.aios-core/core/config/template-overrides.js +84 -0
  10. package/.aios-core/core/docs/troubleshooting-guide.md +1 -1
  11. package/.aios-core/core/doctor/checks/agent-memory.js +63 -0
  12. package/.aios-core/core/doctor/checks/claude-md.js +56 -0
  13. package/.aios-core/core/doctor/checks/code-intel.js +57 -0
  14. package/.aios-core/core/doctor/checks/commands-count.js +81 -0
  15. package/.aios-core/core/doctor/checks/core-config.js +53 -0
  16. package/.aios-core/core/doctor/checks/entity-registry.js +53 -0
  17. package/.aios-core/core/doctor/checks/git-hooks.js +50 -0
  18. package/.aios-core/core/doctor/checks/graph-dashboard.js +48 -0
  19. package/.aios-core/core/doctor/checks/hooks-claude-count.js +107 -0
  20. package/.aios-core/core/doctor/checks/ide-sync.js +68 -0
  21. package/.aios-core/core/doctor/checks/index.js +46 -0
  22. package/.aios-core/core/doctor/checks/node-version.js +33 -0
  23. package/.aios-core/core/doctor/checks/npm-packages.js +35 -0
  24. package/.aios-core/core/doctor/checks/rules-files.js +61 -0
  25. package/.aios-core/core/doctor/checks/settings-json.js +121 -0
  26. package/.aios-core/core/doctor/checks/skills-count.js +72 -0
  27. package/.aios-core/core/doctor/fix-handler.js +165 -0
  28. package/.aios-core/core/doctor/formatters/json.js +14 -0
  29. package/.aios-core/core/doctor/formatters/text.js +59 -0
  30. package/.aios-core/core/doctor/index.js +94 -0
  31. package/.aios-core/core/graph-dashboard/cli.js +361 -0
  32. package/.aios-core/core/graph-dashboard/data-sources/code-intel-source.js +234 -0
  33. package/.aios-core/core/graph-dashboard/data-sources/metrics-source.js +95 -0
  34. package/.aios-core/core/graph-dashboard/data-sources/registry-source.js +106 -0
  35. package/.aios-core/core/graph-dashboard/formatters/dot-formatter.js +45 -0
  36. package/.aios-core/core/graph-dashboard/formatters/html-formatter.js +1437 -0
  37. package/.aios-core/core/graph-dashboard/formatters/json-formatter.js +13 -0
  38. package/.aios-core/core/graph-dashboard/formatters/mermaid-formatter.js +59 -0
  39. package/.aios-core/core/graph-dashboard/index.js +21 -0
  40. package/.aios-core/core/graph-dashboard/renderers/stats-renderer.js +217 -0
  41. package/.aios-core/core/graph-dashboard/renderers/status-renderer.js +125 -0
  42. package/.aios-core/core/graph-dashboard/renderers/tree-renderer.js +119 -0
  43. package/.aios-core/core/health-check/base-check.js +1 -1
  44. package/.aios-core/core/health-check/check-registry.js +1 -1
  45. package/.aios-core/core/health-check/checks/deployment/build-config.js +1 -1
  46. package/.aios-core/core/health-check/checks/deployment/ci-config.js +1 -1
  47. package/.aios-core/core/health-check/checks/deployment/deployment-readiness.js +1 -1
  48. package/.aios-core/core/health-check/checks/deployment/docker-config.js +1 -1
  49. package/.aios-core/core/health-check/checks/deployment/env-file.js +1 -1
  50. package/.aios-core/core/health-check/checks/deployment/index.js +1 -1
  51. package/.aios-core/core/health-check/checks/index.js +1 -1
  52. package/.aios-core/core/health-check/checks/local/disk-space.js +1 -1
  53. package/.aios-core/core/health-check/checks/local/environment-vars.js +1 -1
  54. package/.aios-core/core/health-check/checks/local/git-install.js +1 -1
  55. package/.aios-core/core/health-check/checks/local/ide-detection.js +1 -1
  56. package/.aios-core/core/health-check/checks/local/index.js +1 -1
  57. package/.aios-core/core/health-check/checks/local/memory.js +1 -1
  58. package/.aios-core/core/health-check/checks/local/network.js +1 -1
  59. package/.aios-core/core/health-check/checks/local/npm-install.js +1 -1
  60. package/.aios-core/core/health-check/checks/local/shell-environment.js +1 -1
  61. package/.aios-core/core/health-check/checks/project/agent-config.js +1 -1
  62. package/.aios-core/core/health-check/checks/project/aios-directory.js +1 -1
  63. package/.aios-core/core/health-check/checks/project/dependencies.js +1 -1
  64. package/.aios-core/core/health-check/checks/project/framework-config.js +1 -1
  65. package/.aios-core/core/health-check/checks/project/index.js +1 -1
  66. package/.aios-core/core/health-check/checks/project/node-version.js +1 -1
  67. package/.aios-core/core/health-check/checks/project/package-json.js +1 -1
  68. package/.aios-core/core/health-check/checks/project/task-definitions.js +1 -1
  69. package/.aios-core/core/health-check/checks/project/workflow-dependencies.js +1 -1
  70. package/.aios-core/core/health-check/checks/repository/branch-protection.js +1 -1
  71. package/.aios-core/core/health-check/checks/repository/commit-history.js +1 -1
  72. package/.aios-core/core/health-check/checks/repository/conflicts.js +1 -1
  73. package/.aios-core/core/health-check/checks/repository/git-repo.js +1 -1
  74. package/.aios-core/core/health-check/checks/repository/git-status.js +1 -1
  75. package/.aios-core/core/health-check/checks/repository/gitignore.js +1 -1
  76. package/.aios-core/core/health-check/checks/repository/index.js +1 -1
  77. package/.aios-core/core/health-check/checks/repository/large-files.js +1 -1
  78. package/.aios-core/core/health-check/checks/repository/lockfile-integrity.js +1 -1
  79. package/.aios-core/core/health-check/checks/services/api-endpoints.js +1 -1
  80. package/.aios-core/core/health-check/checks/services/claude-code.js +1 -1
  81. package/.aios-core/core/health-check/checks/services/gemini-cli.js +1 -1
  82. package/.aios-core/core/health-check/checks/services/github-cli.js +1 -1
  83. package/.aios-core/core/health-check/checks/services/index.js +1 -1
  84. package/.aios-core/core/health-check/checks/services/mcp-integration.js +1 -1
  85. package/.aios-core/core/health-check/engine.js +1 -1
  86. package/.aios-core/core/health-check/healers/backup-manager.js +1 -1
  87. package/.aios-core/core/health-check/healers/index.js +1 -1
  88. package/.aios-core/core/health-check/index.js +9 -2
  89. package/.aios-core/core/health-check/reporters/console.js +1 -1
  90. package/.aios-core/core/health-check/reporters/index.js +1 -1
  91. package/.aios-core/core/health-check/reporters/json.js +1 -1
  92. package/.aios-core/core/health-check/reporters/markdown.js +1 -1
  93. package/.aios-core/core/ids/layer-classifier.js +65 -0
  94. package/.aios-core/core/ids/registry-updater.js +49 -0
  95. package/.aios-core/core/index.esm.js +1 -1
  96. package/.aios-core/core/index.js +1 -1
  97. package/.aios-core/core/session/context-detector.js +2 -7
  98. package/.aios-core/core/synapse/context/context-tracker.js +9 -1
  99. package/.aios-core/core/synapse/engine.js +33 -13
  100. package/.aios-core/core/synapse/runtime/hook-runtime.js +40 -2
  101. package/.aios-core/core/synapse/session/session-manager.js +3 -2
  102. package/.aios-core/core/synapse/utils/atomic-write.js +79 -0
  103. package/.aios-core/core-config.yaml +34 -1
  104. package/.aios-core/data/aios-kb.md +2 -2
  105. package/.aios-core/data/capability-detection.js +290 -0
  106. package/.aios-core/data/entity-registry.yaml +10424 -2127
  107. package/.aios-core/data/mcp-discipline.js +166 -0
  108. package/.aios-core/data/mcp-tool-examples.yaml +215 -0
  109. package/.aios-core/data/tok2-validation.js +168 -0
  110. package/.aios-core/data/tok3-token-comparison.js +123 -0
  111. package/.aios-core/data/tool-registry.yaml +648 -0
  112. package/.aios-core/data/tool-search-validation.js +174 -0
  113. package/.aios-core/development/agents/analyst/MEMORY.md +33 -0
  114. package/.aios-core/development/agents/architect/MEMORY.md +39 -0
  115. package/.aios-core/development/agents/data-engineer/MEMORY.md +32 -0
  116. package/.aios-core/development/agents/dev/MEMORY.md +46 -0
  117. package/.aios-core/development/agents/dev.md +1 -1
  118. package/.aios-core/development/agents/devops/MEMORY.md +39 -0
  119. package/.aios-core/development/agents/devops.md +22 -0
  120. package/.aios-core/development/agents/pm/MEMORY.md +38 -0
  121. package/.aios-core/development/agents/po/MEMORY.md +45 -0
  122. package/.aios-core/development/agents/qa/MEMORY.md +42 -0
  123. package/.aios-core/development/agents/qa.md +1 -1
  124. package/.aios-core/development/agents/sm/MEMORY.md +31 -0
  125. package/.aios-core/development/agents/ux/MEMORY.md +31 -0
  126. package/.aios-core/development/checklists/issue-triage-checklist.md +35 -0
  127. package/.aios-core/development/checklists/memory-audit-checklist.md +53 -0
  128. package/.aios-core/development/scripts/issue-triage.js +171 -0
  129. package/.aios-core/development/scripts/populate-entity-registry.js +412 -19
  130. package/.aios-core/development/scripts/unified-activation-pipeline.js +31 -10
  131. package/.aios-core/development/tasks/analyze-project-structure.md +48 -0
  132. package/.aios-core/development/tasks/brownfield-create-epic.md +41 -0
  133. package/.aios-core/development/tasks/create-doc.md +44 -0
  134. package/.aios-core/development/tasks/create-next-story.md +10 -0
  135. package/.aios-core/development/tasks/dev-develop-story.md +1 -1
  136. package/.aios-core/development/tasks/github-devops-github-pr-automation.md +49 -0
  137. package/.aios-core/development/tasks/github-devops-pre-push-quality-gate.md +63 -0
  138. package/.aios-core/development/tasks/github-issue-triage.md +118 -0
  139. package/.aios-core/development/tasks/health-check.yaml +206 -171
  140. package/.aios-core/development/tasks/kb-mode-interaction.md +3 -3
  141. package/.aios-core/development/tasks/plan-create-context.md +47 -1
  142. package/.aios-core/development/tasks/plan-create-implementation.md +55 -0
  143. package/.aios-core/development/tasks/pr-automation.md +5 -5
  144. package/.aios-core/development/tasks/qa-gate.md +48 -0
  145. package/.aios-core/development/tasks/qa-review-story.md +24 -1
  146. package/.aios-core/development/tasks/resolve-github-issue.md +608 -0
  147. package/.aios-core/development/tasks/review-contributor-pr.md +152 -0
  148. package/.aios-core/development/tasks/setup-llm-routing.md +1 -1
  149. package/.aios-core/development/tasks/spec-research-dependencies.md +4 -0
  150. package/.aios-core/development/tasks/triage-github-issues.md +356 -0
  151. package/.aios-core/development/tasks/validate-agents.md +4 -0
  152. package/.aios-core/development/tasks/validate-next-story.md +10 -0
  153. package/.aios-core/development/templates/agent-handoff-tmpl.yaml +48 -0
  154. package/.aios-core/development/templates/code-intel-integration-pattern.md +199 -0
  155. package/.aios-core/development/templates/ptc-entity-validation.md +113 -0
  156. package/.aios-core/development/templates/ptc-qa-gate.md +100 -0
  157. package/.aios-core/development/templates/ptc-research-aggregation.md +94 -0
  158. package/.aios-core/development/templates/service-template/README.md.hbs +158 -158
  159. package/.aios-core/development/templates/service-template/__tests__/index.test.ts.hbs +237 -237
  160. package/.aios-core/development/templates/service-template/client.ts.hbs +403 -403
  161. package/.aios-core/development/templates/service-template/errors.ts.hbs +182 -182
  162. package/.aios-core/development/templates/service-template/index.ts.hbs +120 -120
  163. package/.aios-core/development/templates/service-template/package.json.hbs +87 -87
  164. package/.aios-core/development/templates/service-template/types.ts.hbs +145 -145
  165. package/.aios-core/development/templates/squad/agent-template.md +11 -0
  166. package/.aios-core/development/templates/squad/task-template.md +21 -0
  167. package/.aios-core/development/templates/squad-template/LICENSE +21 -21
  168. package/.aios-core/docs/standards/AIOS-LIVRO-DE-OURO-V2.1-COMPLETE.md +1 -1
  169. package/.aios-core/docs/standards/AIOS-LIVRO-DE-OURO-V2.2-SUMMARY.md +1 -1
  170. package/.aios-core/framework-config.yaml +8 -0
  171. package/.aios-core/index.esm.js +1 -1
  172. package/.aios-core/index.js +1 -1
  173. package/.aios-core/infrastructure/integrations/ai-providers/index.js +1 -1
  174. package/.aios-core/infrastructure/schemas/task-v3-schema.json +6 -0
  175. package/.aios-core/infrastructure/scripts/collect-tool-usage.js +311 -0
  176. package/.aios-core/infrastructure/scripts/generate-optimization-report.js +497 -0
  177. package/.aios-core/infrastructure/scripts/generate-settings-json.js +300 -0
  178. package/.aios-core/infrastructure/scripts/git-config-detector.js +65 -9
  179. package/.aios-core/infrastructure/scripts/ide-sync/index.js +3 -1
  180. package/.aios-core/infrastructure/scripts/ide-sync/transformers/github-copilot.js +184 -0
  181. package/.aios-core/infrastructure/scripts/repository-detector.js +3 -3
  182. package/.aios-core/infrastructure/templates/aios-sync.yaml.template +182 -182
  183. package/.aios-core/infrastructure/templates/coderabbit.yaml.template +279 -279
  184. package/.aios-core/infrastructure/templates/github-workflows/ci.yml.template +169 -169
  185. package/.aios-core/infrastructure/templates/github-workflows/pr-automation.yml.template +330 -330
  186. package/.aios-core/infrastructure/templates/github-workflows/release.yml.template +196 -196
  187. package/.aios-core/infrastructure/templates/gitignore/gitignore-aios-base.tmpl +63 -63
  188. package/.aios-core/infrastructure/templates/gitignore/gitignore-brownfield-merge.tmpl +18 -18
  189. package/.aios-core/infrastructure/templates/gitignore/gitignore-node.tmpl +85 -85
  190. package/.aios-core/infrastructure/templates/gitignore/gitignore-python.tmpl +145 -145
  191. package/.aios-core/install-manifest.yaml +541 -249
  192. package/.aios-core/lib/build.json +1 -0
  193. package/.aios-core/local-config.yaml.template +71 -71
  194. package/.aios-core/monitor/hooks/lib/__init__.py +1 -1
  195. package/.aios-core/monitor/hooks/lib/enrich.py +58 -58
  196. package/.aios-core/monitor/hooks/lib/send_event.py +47 -47
  197. package/.aios-core/monitor/hooks/notification.py +29 -29
  198. package/.aios-core/monitor/hooks/post_tool_use.py +45 -45
  199. package/.aios-core/monitor/hooks/pre_compact.py +29 -29
  200. package/.aios-core/monitor/hooks/pre_tool_use.py +40 -40
  201. package/.aios-core/monitor/hooks/stop.py +29 -29
  202. package/.aios-core/monitor/hooks/subagent_stop.py +29 -29
  203. package/.aios-core/monitor/hooks/user_prompt_submit.py +38 -38
  204. package/.aios-core/product/templates/adr.hbs +125 -125
  205. package/.aios-core/product/templates/dbdr.hbs +241 -241
  206. package/.aios-core/product/templates/epic.hbs +212 -212
  207. package/.aios-core/product/templates/ide-rules/claude-rules.md +77 -0
  208. package/.aios-core/product/templates/pmdr.hbs +186 -186
  209. package/.aios-core/product/templates/prd-v2.0.hbs +216 -216
  210. package/.aios-core/product/templates/prd.hbs +201 -201
  211. package/.aios-core/product/templates/story.hbs +263 -263
  212. package/.aios-core/product/templates/task.hbs +170 -170
  213. package/.aios-core/product/templates/tmpl-comment-on-examples.sql +158 -158
  214. package/.aios-core/product/templates/tmpl-migration-script.sql +91 -91
  215. package/.aios-core/product/templates/tmpl-rls-granular-policies.sql +104 -104
  216. package/.aios-core/product/templates/tmpl-rls-kiss-policy.sql +10 -10
  217. package/.aios-core/product/templates/tmpl-rls-roles.sql +135 -135
  218. package/.aios-core/product/templates/tmpl-rls-simple.sql +77 -77
  219. package/.aios-core/product/templates/tmpl-rls-tenant.sql +152 -152
  220. package/.aios-core/product/templates/tmpl-rollback-script.sql +77 -77
  221. package/.aios-core/product/templates/tmpl-seed-data.sql +140 -140
  222. package/.aios-core/product/templates/tmpl-smoke-test.sql +16 -16
  223. package/.aios-core/product/templates/tmpl-staging-copy-merge.sql +139 -139
  224. package/.aios-core/product/templates/tmpl-stored-proc.sql +140 -140
  225. package/.aios-core/product/templates/tmpl-trigger.sql +152 -152
  226. package/.aios-core/product/templates/tmpl-view-materialized.sql +133 -133
  227. package/.aios-core/product/templates/tmpl-view.sql +177 -177
  228. package/.aios-core/scripts/pm.sh +0 -0
  229. package/.aios-core/user-guide.md +15 -15
  230. package/.aios-core/utils/filters/constants.js +10 -0
  231. package/.aios-core/utils/filters/content-filter.js +223 -0
  232. package/.aios-core/utils/filters/field-filter.js +126 -0
  233. package/.aios-core/utils/filters/index.js +180 -0
  234. package/.aios-core/utils/filters/schema-filter.js +157 -0
  235. package/.claude/CLAUDE.md +62 -0
  236. package/.claude/hooks/enforce-architecture-first.py +196 -196
  237. package/.claude/hooks/enforce-git-push-authority.sh +33 -0
  238. package/.claude/hooks/mind-clone-governance.py +192 -192
  239. package/.claude/hooks/read-protection.py +151 -151
  240. package/.claude/hooks/slug-validation.py +176 -176
  241. package/.claude/hooks/sql-governance.py +182 -182
  242. package/.claude/hooks/synapse-engine.cjs +28 -5
  243. package/.claude/hooks/write-path-validation.py +194 -194
  244. package/.claude/rules/agent-authority.md +105 -0
  245. package/.claude/rules/agent-handoff.md +97 -0
  246. package/.claude/rules/agent-memory-imports.md +15 -0
  247. package/.claude/rules/coderabbit-integration.md +101 -0
  248. package/.claude/rules/ids-principles.md +119 -0
  249. package/.claude/rules/story-lifecycle.md +145 -0
  250. package/.claude/rules/tool-examples.md +64 -0
  251. package/.claude/rules/tool-response-filtering.md +57 -0
  252. package/.claude/rules/workflow-execution.md +150 -0
  253. package/LICENSE +33 -33
  254. package/bin/aios-graph.js +9 -0
  255. package/bin/aios-init.js +2 -2
  256. package/bin/aios-minimal.js +0 -0
  257. package/bin/aios.js +17 -221
  258. package/bin/utils/detect-fsmonitor.js +70 -0
  259. package/bin/utils/framework-guard.js +238 -0
  260. package/bin/utils/validate-publish.js +108 -0
  261. package/package.json +6 -3
  262. package/packages/aios-install/bin/aios-install.js +0 -0
  263. package/packages/aios-install/bin/edmcp.js +0 -0
  264. package/packages/aios-pro-cli/bin/aios-pro.js +2 -0
  265. package/packages/installer/src/installer/brownfield-upgrader.js +68 -5
  266. package/packages/installer/src/merger/index.js +3 -0
  267. package/packages/installer/src/merger/strategies/index.js +6 -0
  268. package/packages/installer/src/merger/strategies/yaml-merger.js +181 -0
  269. package/packages/installer/src/updater/index.js +4 -4
  270. package/packages/installer/src/wizard/i18n.js +321 -3
  271. package/packages/installer/src/wizard/ide-config-generator.js +152 -25
  272. package/packages/installer/src/wizard/index.js +119 -1
  273. package/packages/installer/src/wizard/pro-setup.js +137 -121
  274. package/packages/installer/tests/unit/artifact-copy-pipeline/artifact-copy-pipeline.test.js +261 -0
  275. package/packages/installer/tests/unit/claude-md-template-v5/claude-md-template-v5.test.js +192 -0
  276. package/packages/installer/tests/unit/doctor/doctor-checks.test.js +551 -0
  277. package/packages/installer/tests/unit/doctor/doctor-orchestrator.test.js +134 -0
  278. package/packages/installer/tests/unit/entity-registry-bootstrap.test.js +186 -0
  279. package/packages/installer/tests/unit/generate-settings-json/generate-settings-json.test.js +309 -0
  280. package/packages/installer/tests/unit/ide-sync-integration/ide-sync-integration.test.js +230 -0
  281. package/packages/installer/tests/unit/merger/strategies.test.js +2 -2
  282. package/packages/installer/tests/unit/merger/yaml-merger.test.js +327 -0
  283. package/scripts/check-markdown-links.py +352 -352
  284. package/scripts/dashboard-parallel-dev.sh +0 -0
  285. package/scripts/dashboard-parallel-phase3.sh +0 -0
  286. package/scripts/dashboard-parallel-phase4.sh +0 -0
  287. package/scripts/install-monitor-hooks.sh +0 -0
  288. package/scripts/package-synapse.js +2 -1
@@ -1,192 +1,192 @@
1
- #!/usr/bin/env python3
2
- """
3
- Hook: Mind Clone Governance
4
-
5
- REGRA: Agents baseados em pessoas reais (mind clones) DEVEM passar pelo
6
- pipeline de extração de DNA antes de serem criados.
7
-
8
- Este hook intercepta Write/Edit em squads/*/agents/*.md e verifica:
9
- 1. Se é um mind clone (baseado em pessoa real)
10
- 2. Se existe DNA extraído correspondente
11
-
12
- NÃO BLOQUEIA:
13
- - Orchestrators (nome contém 'chief', 'orchestrator', 'chair')
14
- - Tool agents (nome contém 'validator', 'calculator', 'generator')
15
- - Process agents (nome contém 'architect', 'mapper', 'designer')
16
- - Edição de arquivo existente (apenas criação é bloqueada)
17
-
18
- Exit Codes:
19
- - 0: Permitido
20
- - 2: Bloqueado (mind clone sem DNA)
21
- """
22
-
23
- import json
24
- import sys
25
- import os
26
- import re
27
- from pathlib import Path
28
-
29
- # =============================================================================
30
- # CONFIGURAÇÃO
31
- # =============================================================================
32
-
33
- # Padrões que indicam que NÃO é um mind clone (agents funcionais)
34
- FUNCTIONAL_AGENT_PATTERNS = [
35
- # Orchestrators
36
- r'.*-chief$',
37
- r'.*-orchestrator$',
38
- r'.*-chair$',
39
- r'^orchestrator$',
40
-
41
- # Tool agents
42
- r'.*-validator$',
43
- r'.*-calculator$',
44
- r'.*-generator$',
45
- r'.*-extractor$',
46
- r'.*-analyzer$',
47
-
48
- # Process agents
49
- r'.*-architect$',
50
- r'.*-mapper$',
51
- r'.*-designer$',
52
- r'.*-engineer$',
53
-
54
- # Generic functional
55
- r'^tools?-.*',
56
- r'^process-.*',
57
- r'^workflow-.*',
58
- ]
59
-
60
- # Locais onde DNA pode estar
61
- DNA_LOCATIONS = [
62
- "squads/{pack}/data/minds/{agent_id}_dna.yaml",
63
- "squads/{pack}/data/minds/{agent_id}_dna.md",
64
- "squads/{pack}/data/{agent_id}-dna.yaml",
65
- "outputs/minds/{agent_id}/",
66
- ]
67
-
68
- # =============================================================================
69
- # LÓGICA DO HOOK
70
- # =============================================================================
71
-
72
- def get_project_root():
73
- """Obtém o root do projeto via variável de ambiente ou cwd."""
74
- return os.environ.get("CLAUDE_PROJECT_DIR", os.getcwd())
75
-
76
- def extract_agent_info(file_path: str) -> tuple:
77
- """Extrai pack_name e agent_id do path."""
78
- # squads/{pack}/agents/{agent_id}.md
79
- match = re.match(r'.*/squads/([^/]+)/agents/([^/]+)\.md$', file_path)
80
- if match:
81
- return match.group(1), match.group(2)
82
- return None, None
83
-
84
- def is_functional_agent(agent_id: str) -> bool:
85
- """Verifica se o agent é funcional (não é mind clone)."""
86
- for pattern in FUNCTIONAL_AGENT_PATTERNS:
87
- if re.match(pattern, agent_id, re.IGNORECASE):
88
- return True
89
- return False
90
-
91
- def has_dna_extracted(project_root: str, pack_name: str, agent_id: str) -> tuple:
92
- """Verifica se existe DNA extraído para o agent."""
93
- for location_template in DNA_LOCATIONS:
94
- location = location_template.format(pack=pack_name, agent_id=agent_id)
95
- full_path = os.path.join(project_root, location)
96
-
97
- # Se é diretório, verificar se existe
98
- if location.endswith('/'):
99
- if os.path.isdir(full_path):
100
- return True, full_path
101
- # Se é arquivo, verificar se existe
102
- elif os.path.isfile(full_path):
103
- return True, full_path
104
-
105
- return False, None
106
-
107
- def file_already_exists(file_path: str) -> bool:
108
- """Verifica se o arquivo já existe (edit vs create)."""
109
- return os.path.isfile(file_path)
110
-
111
- def main():
112
- # Ler input do stdin
113
- try:
114
- input_data = json.load(sys.stdin)
115
- except json.JSONDecodeError:
116
- # Se não conseguir parsear, permitir (fail-open)
117
- sys.exit(0)
118
-
119
- tool_name = input_data.get("tool_name", "")
120
- tool_input = input_data.get("tool_input", {})
121
-
122
- # Só processar Write e Edit
123
- if tool_name not in ["Write", "Edit"]:
124
- sys.exit(0)
125
-
126
- file_path = tool_input.get("file_path", "")
127
- if not file_path:
128
- sys.exit(0)
129
-
130
- # Só processar arquivos em squads/*/agents/
131
- if "/squads/" not in file_path or "/agents/" not in file_path:
132
- sys.exit(0)
133
-
134
- if not file_path.endswith(".md"):
135
- sys.exit(0)
136
-
137
- project_root = get_project_root()
138
-
139
- # Extrair informações do path
140
- pack_name, agent_id = extract_agent_info(file_path)
141
- if not pack_name or not agent_id:
142
- sys.exit(0)
143
-
144
- # Se é edição de arquivo existente, permitir
145
- if file_already_exists(file_path):
146
- sys.exit(0)
147
-
148
- # Se é agent funcional (não mind clone), permitir
149
- if is_functional_agent(agent_id):
150
- sys.exit(0)
151
-
152
- # Verificar se existe DNA extraído
153
- has_dna, dna_path = has_dna_extracted(project_root, pack_name, agent_id)
154
-
155
- if has_dna:
156
- sys.exit(0)
157
-
158
- # BLOQUEAR: Tentando criar mind clone sem DNA
159
- error_message = f"""
160
- ╔══════════════════════════════════════════════════════════════════════════════╗
161
- ║ 🧬 MIND CLONE GOVERNANCE: DNA não encontrado ║
162
- ╠══════════════════════════════════════════════════════════════════════════════╣
163
- ║ ║
164
- ║ Agent: {agent_id:<60} ║
165
- ║ Pack: {pack_name:<60} ║
166
- ║ ║
167
- ║ PROBLEMA: Este parece ser um MIND CLONE (baseado em pessoa real), ║
168
- ║ mas não foi encontrado DNA extraído. ║
169
- ║ ║
170
- ║ Mind clones DEVEM passar pelo pipeline de extração: ║
171
- ║ 1. *collect-sources → Coletar fontes (livros, entrevistas, artigos) ║
172
- ║ 2. *extract-voice-dna → Extrair padrões linguísticos ║
173
- ║ 3. *extract-thinking-dna → Extrair frameworks e heurísticas ║
174
- ║ 4. *create-agent → Criar agent a partir do DNA ║
175
- ║ ║
176
- ║ LOCAIS VERIFICADOS: ║
177
- ║ • squads/{pack_name}/data/minds/{agent_id}_dna.yaml
178
- ║ • squads/{pack_name}/data/minds/{agent_id}_dna.md
179
- ║ • outputs/minds/{agent_id}/
180
- ║ ║
181
- ║ SOLUÇÕES: ║
182
- ║ 1. Execute o pipeline de clone: /squad-creator → *collect-sources ║
183
- ║ 2. OU se é agent FUNCIONAL, renomeie com sufixo: ║
184
- ║ -chief, -orchestrator, -validator, -architect, etc. ║
185
- ║ ║
186
- ╚══════════════════════════════════════════════════════════════════════════════╝
187
- """
188
- print(error_message, file=sys.stderr)
189
- sys.exit(2)
190
-
191
- if __name__ == "__main__":
192
- main()
1
+ #!/usr/bin/env python3
2
+ """
3
+ Hook: Mind Clone Governance
4
+
5
+ REGRA: Agents baseados em pessoas reais (mind clones) DEVEM passar pelo
6
+ pipeline de extração de DNA antes de serem criados.
7
+
8
+ Este hook intercepta Write/Edit em squads/*/agents/*.md e verifica:
9
+ 1. Se é um mind clone (baseado em pessoa real)
10
+ 2. Se existe DNA extraído correspondente
11
+
12
+ NÃO BLOQUEIA:
13
+ - Orchestrators (nome contém 'chief', 'orchestrator', 'chair')
14
+ - Tool agents (nome contém 'validator', 'calculator', 'generator')
15
+ - Process agents (nome contém 'architect', 'mapper', 'designer')
16
+ - Edição de arquivo existente (apenas criação é bloqueada)
17
+
18
+ Exit Codes:
19
+ - 0: Permitido
20
+ - 2: Bloqueado (mind clone sem DNA)
21
+ """
22
+
23
+ import json
24
+ import sys
25
+ import os
26
+ import re
27
+ from pathlib import Path
28
+
29
+ # =============================================================================
30
+ # CONFIGURAÇÃO
31
+ # =============================================================================
32
+
33
+ # Padrões que indicam que NÃO é um mind clone (agents funcionais)
34
+ FUNCTIONAL_AGENT_PATTERNS = [
35
+ # Orchestrators
36
+ r'.*-chief$',
37
+ r'.*-orchestrator$',
38
+ r'.*-chair$',
39
+ r'^orchestrator$',
40
+
41
+ # Tool agents
42
+ r'.*-validator$',
43
+ r'.*-calculator$',
44
+ r'.*-generator$',
45
+ r'.*-extractor$',
46
+ r'.*-analyzer$',
47
+
48
+ # Process agents
49
+ r'.*-architect$',
50
+ r'.*-mapper$',
51
+ r'.*-designer$',
52
+ r'.*-engineer$',
53
+
54
+ # Generic functional
55
+ r'^tools?-.*',
56
+ r'^process-.*',
57
+ r'^workflow-.*',
58
+ ]
59
+
60
+ # Locais onde DNA pode estar
61
+ DNA_LOCATIONS = [
62
+ "squads/{pack}/data/minds/{agent_id}_dna.yaml",
63
+ "squads/{pack}/data/minds/{agent_id}_dna.md",
64
+ "squads/{pack}/data/{agent_id}-dna.yaml",
65
+ "outputs/minds/{agent_id}/",
66
+ ]
67
+
68
+ # =============================================================================
69
+ # LÓGICA DO HOOK
70
+ # =============================================================================
71
+
72
+ def get_project_root():
73
+ """Obtém o root do projeto via variável de ambiente ou cwd."""
74
+ return os.environ.get("CLAUDE_PROJECT_DIR", os.getcwd())
75
+
76
+ def extract_agent_info(file_path: str) -> tuple:
77
+ """Extrai pack_name e agent_id do path."""
78
+ # squads/{pack}/agents/{agent_id}.md
79
+ match = re.match(r'.*/squads/([^/]+)/agents/([^/]+)\.md$', file_path)
80
+ if match:
81
+ return match.group(1), match.group(2)
82
+ return None, None
83
+
84
+ def is_functional_agent(agent_id: str) -> bool:
85
+ """Verifica se o agent é funcional (não é mind clone)."""
86
+ for pattern in FUNCTIONAL_AGENT_PATTERNS:
87
+ if re.match(pattern, agent_id, re.IGNORECASE):
88
+ return True
89
+ return False
90
+
91
+ def has_dna_extracted(project_root: str, pack_name: str, agent_id: str) -> tuple:
92
+ """Verifica se existe DNA extraído para o agent."""
93
+ for location_template in DNA_LOCATIONS:
94
+ location = location_template.format(pack=pack_name, agent_id=agent_id)
95
+ full_path = os.path.join(project_root, location)
96
+
97
+ # Se é diretório, verificar se existe
98
+ if location.endswith('/'):
99
+ if os.path.isdir(full_path):
100
+ return True, full_path
101
+ # Se é arquivo, verificar se existe
102
+ elif os.path.isfile(full_path):
103
+ return True, full_path
104
+
105
+ return False, None
106
+
107
+ def file_already_exists(file_path: str) -> bool:
108
+ """Verifica se o arquivo já existe (edit vs create)."""
109
+ return os.path.isfile(file_path)
110
+
111
+ def main():
112
+ # Ler input do stdin
113
+ try:
114
+ input_data = json.load(sys.stdin)
115
+ except json.JSONDecodeError:
116
+ # Se não conseguir parsear, permitir (fail-open)
117
+ sys.exit(0)
118
+
119
+ tool_name = input_data.get("tool_name", "")
120
+ tool_input = input_data.get("tool_input", {})
121
+
122
+ # Só processar Write e Edit
123
+ if tool_name not in ["Write", "Edit"]:
124
+ sys.exit(0)
125
+
126
+ file_path = tool_input.get("file_path", "")
127
+ if not file_path:
128
+ sys.exit(0)
129
+
130
+ # Só processar arquivos em squads/*/agents/
131
+ if "/squads/" not in file_path or "/agents/" not in file_path:
132
+ sys.exit(0)
133
+
134
+ if not file_path.endswith(".md"):
135
+ sys.exit(0)
136
+
137
+ project_root = get_project_root()
138
+
139
+ # Extrair informações do path
140
+ pack_name, agent_id = extract_agent_info(file_path)
141
+ if not pack_name or not agent_id:
142
+ sys.exit(0)
143
+
144
+ # Se é edição de arquivo existente, permitir
145
+ if file_already_exists(file_path):
146
+ sys.exit(0)
147
+
148
+ # Se é agent funcional (não mind clone), permitir
149
+ if is_functional_agent(agent_id):
150
+ sys.exit(0)
151
+
152
+ # Verificar se existe DNA extraído
153
+ has_dna, dna_path = has_dna_extracted(project_root, pack_name, agent_id)
154
+
155
+ if has_dna:
156
+ sys.exit(0)
157
+
158
+ # BLOQUEAR: Tentando criar mind clone sem DNA
159
+ error_message = f"""
160
+ ╔══════════════════════════════════════════════════════════════════════════════╗
161
+ ║ 🧬 MIND CLONE GOVERNANCE: DNA não encontrado ║
162
+ ╠══════════════════════════════════════════════════════════════════════════════╣
163
+ ║ ║
164
+ ║ Agent: {agent_id:<60} ║
165
+ ║ Pack: {pack_name:<60} ║
166
+ ║ ║
167
+ ║ PROBLEMA: Este parece ser um MIND CLONE (baseado em pessoa real), ║
168
+ ║ mas não foi encontrado DNA extraído. ║
169
+ ║ ║
170
+ ║ Mind clones DEVEM passar pelo pipeline de extração: ║
171
+ ║ 1. *collect-sources → Coletar fontes (livros, entrevistas, artigos) ║
172
+ ║ 2. *extract-voice-dna → Extrair padrões linguísticos ║
173
+ ║ 3. *extract-thinking-dna → Extrair frameworks e heurísticas ║
174
+ ║ 4. *create-agent → Criar agent a partir do DNA ║
175
+ ║ ║
176
+ ║ LOCAIS VERIFICADOS: ║
177
+ ║ • squads/{pack_name}/data/minds/{agent_id}_dna.yaml
178
+ ║ • squads/{pack_name}/data/minds/{agent_id}_dna.md
179
+ ║ • outputs/minds/{agent_id}/
180
+ ║ ║
181
+ ║ SOLUÇÕES: ║
182
+ ║ 1. Execute o pipeline de clone: /squad-creator → *collect-sources ║
183
+ ║ 2. OU se é agent FUNCIONAL, renomeie com sufixo: ║
184
+ ║ -chief, -orchestrator, -validator, -architect, etc. ║
185
+ ║ ║
186
+ ╚══════════════════════════════════════════════════════════════════════════════╝
187
+ """
188
+ print(error_message, file=sys.stderr)
189
+ sys.exit(2)
190
+
191
+ if __name__ == "__main__":
192
+ main()