sinapse-ai 1.8.0 → 1.9.1

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 (361) hide show
  1. package/.claude/hooks/mind-clone-governance.py +212 -212
  2. package/.claude/hooks/read-protection.py +152 -152
  3. package/.claude/hooks/slug-validation.py +175 -175
  4. package/.claude/hooks/sql-governance.py +183 -183
  5. package/.claude/rules/documentation-first.md +1 -1
  6. package/.claude/rules/hook-governance.md +1 -1
  7. package/.claude/rules/mandatory-delegation.md +1 -1
  8. package/.claude/rules/project-intelligence.md +1 -1
  9. package/.codex/agents/analyst.md +4 -371
  10. package/.codex/agents/animations-orqx.md +4 -57
  11. package/.codex/agents/architect.md +4 -560
  12. package/.codex/agents/brand-orqx.md +4 -95
  13. package/.codex/agents/claude-mastery-chief.md +4 -0
  14. package/.codex/agents/cloning-orqx.md +4 -70
  15. package/.codex/agents/commercial-orqx.md +4 -67
  16. package/.codex/agents/config-engineer.md +2 -2
  17. package/.codex/agents/content-orqx.md +4 -77
  18. package/.codex/agents/copy-orqx.md +4 -65
  19. package/.codex/agents/cost-optimizer.md +4 -0
  20. package/.codex/agents/council-orqx.md +4 -68
  21. package/.codex/agents/courses-orqx.md +4 -64
  22. package/.codex/agents/cro-persuasion.md +4 -0
  23. package/.codex/agents/cyber-orqx.md +4 -67
  24. package/.codex/agents/data-engineer.md +4 -542
  25. package/.codex/agents/design-orqx.md +4 -65
  26. package/.codex/agents/design-system.md +4 -210
  27. package/.codex/agents/developer.md +4 -666
  28. package/.codex/agents/devops.md +4 -668
  29. package/.codex/agents/finance-orqx.md +4 -57
  30. package/.codex/agents/fiscal-compliance-br.md +4 -0
  31. package/.codex/agents/forecast-strategist.md +4 -0
  32. package/.codex/agents/growth-orqx.md +4 -75
  33. package/.codex/agents/hooks-architect.md +2 -2
  34. package/.codex/agents/mcp-integrator.md +2 -2
  35. package/.codex/agents/paidmedia-orqx.md +4 -67
  36. package/.codex/agents/platform-aesthetic-director.md +4 -0
  37. package/.codex/agents/premium-packaging-strategist.md +4 -0
  38. package/.codex/agents/product-lead.md +4 -371
  39. package/.codex/agents/product-orqx.md +4 -57
  40. package/.codex/agents/product-surface-director.md +4 -0
  41. package/.codex/agents/project-integrator.md +2 -2
  42. package/.codex/agents/project-lead.md +4 -414
  43. package/.codex/agents/quality-gate.md +4 -547
  44. package/.codex/agents/research-orqx.md +4 -67
  45. package/.codex/agents/roadmap-sentinel.md +2 -2
  46. package/.codex/agents/skill-craftsman.md +2 -2
  47. package/.codex/agents/snps-orqx.md +4 -684
  48. package/.codex/agents/sop-extractor.md +4 -61
  49. package/.codex/agents/sprint-lead.md +4 -324
  50. package/.codex/agents/squad-creator.md +4 -402
  51. package/.codex/agents/storytelling-orqx.md +4 -65
  52. package/.codex/agents/swarm-orqx.md +4 -64
  53. package/.codex/agents/ux-design-expert.md +4 -532
  54. package/.codex/agents/ux-designer.md +4 -124
  55. package/.codex/command-registry.json +9 -9
  56. package/.codex/delegation-matrix.json +375 -839
  57. package/.codex/delegation-parity.json +658 -0
  58. package/.codex/handoff-packet.parity.schema.json +148 -0
  59. package/.codex/handoff-packet.template.json +26 -0
  60. package/.codex/instructions.md +8 -8
  61. package/.codex/scripts/resolve-codex-agent.js +482 -0
  62. package/.codex/scripts/resolve-codex-command.js +75 -12
  63. package/.codex/scripts/resolve-codex-delegation.js +131 -92
  64. package/.codex/skills/sinapse-claude/SKILL.md +3 -3
  65. package/.codex/skills/sinapse-po/SKILL.md +1 -1
  66. package/.codex/tasks/resolve-sinapse-conflict.md +1 -1
  67. package/.sinapse-ai/constitution.md +5 -5
  68. package/.sinapse-ai/core/doctor/checks/git-hooks.js +163 -19
  69. package/.sinapse-ai/core/events/dashboard-emitter.js +30 -9
  70. package/.sinapse-ai/core/execution/subagent-dispatcher.js +1 -1
  71. package/.sinapse-ai/core/synapse/engine.js +15 -0
  72. package/.sinapse-ai/core/ui/observability-panel.js +240 -0
  73. package/.sinapse-ai/core-config.yaml +0 -20
  74. package/.sinapse-ai/data/entity-registry.yaml +185 -236
  75. package/.sinapse-ai/development/agents/snps-orqx.md +16 -26
  76. package/.sinapse-ai/development/tasks/build-autonomous.md +11 -1
  77. package/.sinapse-ai/development/tasks/build-resume.md +8 -0
  78. package/.sinapse-ai/development/tasks/build-status.md +8 -0
  79. package/.sinapse-ai/development/tasks/build.md +8 -0
  80. package/.sinapse-ai/development/tasks/cleanup-worktrees.md +8 -1
  81. package/.sinapse-ai/development/tasks/gotcha.md +8 -0
  82. package/.sinapse-ai/development/tasks/gotchas.md +8 -0
  83. package/.sinapse-ai/development/tasks/ids-health.md +14 -6
  84. package/.sinapse-ai/development/tasks/list-mcps.md +15 -0
  85. package/.sinapse-ai/development/tasks/merge-worktree.md +8 -1
  86. package/.sinapse-ai/development/tasks/qa-review-build.md +18 -0
  87. package/.sinapse-ai/development/tasks/remove-mcp.md +8 -1
  88. package/.sinapse-ai/development/tasks/validate-agents.md +26 -14
  89. package/.sinapse-ai/development/templates/service-template/README.md.hbs +159 -159
  90. package/.sinapse-ai/development/templates/service-template/__tests__/index.test.ts.hbs +238 -238
  91. package/.sinapse-ai/development/templates/service-template/client.ts.hbs +404 -404
  92. package/.sinapse-ai/development/templates/service-template/errors.ts.hbs +183 -183
  93. package/.sinapse-ai/development/templates/service-template/index.ts.hbs +121 -121
  94. package/.sinapse-ai/development/templates/service-template/package.json.hbs +88 -88
  95. package/.sinapse-ai/development/templates/service-template/types.ts.hbs +146 -146
  96. package/.sinapse-ai/development/templates/squad-template/LICENSE +22 -22
  97. package/.sinapse-ai/git-hooks/lib/framework-guard.js +258 -0
  98. package/.sinapse-ai/git-hooks/lib/secret-scanner-core.js +355 -0
  99. package/.sinapse-ai/git-hooks/lib/staged-secret-scan.js +179 -0
  100. package/.sinapse-ai/git-hooks/lib/staged-sql-guard.js +204 -0
  101. package/.sinapse-ai/git-hooks/post-commit +28 -0
  102. package/.sinapse-ai/git-hooks/pre-commit +81 -0
  103. package/.sinapse-ai/git-hooks/pre-push +83 -0
  104. package/.sinapse-ai/hooks/ids-post-commit.js +13 -11
  105. package/.sinapse-ai/hooks/ids-pre-push.js +9 -7
  106. package/.sinapse-ai/infrastructure/scripts/codex-parity/resolve.js +161 -0
  107. package/.sinapse-ai/infrastructure/scripts/dashboard-status-writer.js +6 -2
  108. package/.sinapse-ai/infrastructure/scripts/ide-sync/index.js +65 -68
  109. package/.sinapse-ai/infrastructure/scripts/sync-codex-local-first.js +156 -1
  110. package/.sinapse-ai/infrastructure/scripts/validate-codex-delegation.js +1 -4
  111. package/.sinapse-ai/infrastructure/scripts/validate-codex-integration.js +41 -5
  112. package/.sinapse-ai/infrastructure/templates/coderabbit.yaml.template +280 -280
  113. package/.sinapse-ai/infrastructure/templates/config/env.example +16 -16
  114. package/.sinapse-ai/infrastructure/templates/config/gitignore-additions.tmpl +59 -59
  115. package/.sinapse-ai/infrastructure/templates/github/CODEOWNERS.template +12 -12
  116. package/.sinapse-ai/infrastructure/templates/github-workflows/ci.yml.template +170 -170
  117. package/.sinapse-ai/infrastructure/templates/github-workflows/pr-automation.yml.template +331 -331
  118. package/.sinapse-ai/infrastructure/templates/github-workflows/release.yml.template +197 -197
  119. package/.sinapse-ai/infrastructure/templates/gitignore/gitignore-brownfield-merge.tmpl +19 -19
  120. package/.sinapse-ai/infrastructure/templates/gitignore/gitignore-node.tmpl +86 -86
  121. package/.sinapse-ai/infrastructure/templates/gitignore/gitignore-python.tmpl +146 -146
  122. package/.sinapse-ai/infrastructure/templates/gitignore/gitignore-sinapse-base.tmpl +64 -64
  123. package/.sinapse-ai/infrastructure/templates/safe-collab/CODEOWNERS.template +16 -16
  124. package/.sinapse-ai/infrastructure/templates/sinapse-sync.yaml.template +183 -183
  125. package/.sinapse-ai/install-manifest.yaml +112 -164
  126. package/.sinapse-ai/local-config.yaml.template +65 -65
  127. package/.sinapse-ai/product/templates/adr.hbs +126 -126
  128. package/.sinapse-ai/product/templates/dbdr.hbs +242 -242
  129. package/.sinapse-ai/product/templates/epic.hbs +213 -213
  130. package/.sinapse-ai/product/templates/ide-rules/codex-rules.md +30 -0
  131. package/.sinapse-ai/product/templates/pmdr.hbs +187 -187
  132. package/.sinapse-ai/product/templates/prd-v2.0.hbs +217 -217
  133. package/.sinapse-ai/product/templates/prd.hbs +202 -202
  134. package/.sinapse-ai/product/templates/statusline/statusline-script.js +31 -8
  135. package/.sinapse-ai/product/templates/statusline/track-agent-clear.cjs +79 -0
  136. package/.sinapse-ai/product/templates/statusline/track-agent.cjs +218 -0
  137. package/.sinapse-ai/product/templates/story.hbs +264 -264
  138. package/.sinapse-ai/product/templates/task.hbs +171 -171
  139. package/.sinapse-ai/product/templates/tmpl-comment-on-examples.sql +159 -159
  140. package/.sinapse-ai/product/templates/tmpl-migration-script.sql +92 -92
  141. package/.sinapse-ai/product/templates/tmpl-rls-granular-policies.sql +105 -105
  142. package/.sinapse-ai/product/templates/tmpl-rls-kiss-policy.sql +11 -11
  143. package/.sinapse-ai/product/templates/tmpl-rls-roles.sql +136 -136
  144. package/.sinapse-ai/product/templates/tmpl-rls-simple.sql +78 -78
  145. package/.sinapse-ai/product/templates/tmpl-rls-tenant.sql +153 -153
  146. package/.sinapse-ai/product/templates/tmpl-rollback-script.sql +78 -78
  147. package/.sinapse-ai/product/templates/tmpl-seed-data.sql +141 -141
  148. package/.sinapse-ai/product/templates/tmpl-smoke-test.sql +17 -17
  149. package/.sinapse-ai/product/templates/tmpl-staging-copy-merge.sql +140 -140
  150. package/.sinapse-ai/product/templates/tmpl-stored-proc.sql +141 -141
  151. package/.sinapse-ai/product/templates/tmpl-trigger.sql +153 -153
  152. package/.sinapse-ai/product/templates/tmpl-view-materialized.sql +134 -134
  153. package/.sinapse-ai/product/templates/tmpl-view.sql +178 -178
  154. package/AGENTS.md +193 -0
  155. package/CHANGELOG.md +1247 -0
  156. package/LICENSE +63 -63
  157. package/README.en.md +17 -18
  158. package/README.md +18 -19
  159. package/bin/cli.js +1 -1
  160. package/bin/commands/install.js +194 -22
  161. package/bin/commands/status.js +14 -1
  162. package/bin/commands/uninstall.js +2 -2
  163. package/bin/commands/update.js +52 -0
  164. package/bin/lib/setup-statusline.js +191 -0
  165. package/bin/sinapse-init.js +11 -83
  166. package/bin/utils/framework-guard.js +17 -4
  167. package/bin/utils/secret-scanner-core.js +109 -7
  168. package/bin/utils/staged-sql-guard.js +204 -0
  169. package/bin/utils/validate-publish.js +63 -0
  170. package/docs/agent-reference-guide.md +5 -7
  171. package/docs/framework/agent-prefix-convention.md +58 -0
  172. package/docs/framework/architecture-overview.md +4 -4
  173. package/docs/framework/collaboration-activation.md +45 -0
  174. package/docs/framework/guiding-principles.md +9 -9
  175. package/docs/getting-started.md +1 -1
  176. package/docs/guides/agent-reference.md +1 -1
  177. package/docs/guides/codex-config.md +4 -5
  178. package/docs/pt/architecture/sub-orqx-pattern.md +20 -18
  179. package/docs/security/overview.md +1 -1
  180. package/package.json +16 -12
  181. package/packages/installer/src/index.js +26 -0
  182. package/packages/installer/src/installer/git-hooks-installer.js +211 -47
  183. package/packages/installer/src/installer/sinapse-ai-installer.js +71 -0
  184. package/packages/installer/src/wizard/feedback.js +1 -1
  185. package/packages/installer/src/wizard/ide-config-generator.js +26 -26
  186. package/packages/installer/src/wizard/index.js +53 -4
  187. package/packages/sinapse-install/bin/edmcp.js +0 -0
  188. package/packages/sinapse-install/bin/sinapse-install.js +0 -0
  189. package/scripts/audit-tasks.cjs +112 -91
  190. package/scripts/check-markdown-links.py +352 -352
  191. package/scripts/prepare-hooks.js +58 -0
  192. package/scripts/regenerate-orqx-stubs.ps1 +2 -3
  193. package/scripts/sync-counts.js +10 -2
  194. package/scripts/sync-squad-yaml-components.js +108 -6
  195. package/scripts/validate-agents-md.js +128 -0
  196. package/scripts/validate-all.js +1 -0
  197. package/scripts/validate-squad-orqx.js +19 -9
  198. package/sinapse/agents/sinapse-orqx.md +16 -26
  199. package/sinapse/agents/snps-orqx.md +15 -25
  200. package/sinapse/knowledge-base/routing-catalog.md +1 -1
  201. package/sinapse/tasks/diagnose-and-route.md +1 -1
  202. package/sinapse/tasks/squad-status-report.md +1 -1
  203. package/squads/claude-code-mastery/agents/claude-mastery-chief.md +1 -1
  204. package/squads/claude-code-mastery/agents/hooks-architect.md +60 -68
  205. package/squads/claude-code-mastery/knowledge-base/swarm-orchestration-patterns.md +1 -1
  206. package/squads/claude-code-mastery/squad.yaml +8 -0
  207. package/squads/claude-code-mastery/tasks/audit-setup.md +1 -1
  208. package/squads/claude-code-mastery/workflows/optimization-cycle.yaml +4 -4
  209. package/squads/claude-code-mastery/workflows/project-setup-cycle.yaml +4 -4
  210. package/squads/squad-animations/README.md +1 -1
  211. package/squads/squad-animations/squad.yaml +1 -1
  212. package/squads/squad-brand/squad.yaml +1 -1
  213. package/squads/squad-cloning/README.md +1 -1
  214. package/squads/squad-cloning/squad.yaml +1 -1
  215. package/squads/squad-commercial/README.md +1 -1
  216. package/squads/squad-commercial/squad.yaml +2 -3
  217. package/squads/squad-content/README.md +1 -1
  218. package/squads/squad-content/squad.yaml +1 -1
  219. package/squads/squad-copy/README.md +1 -1
  220. package/squads/squad-copy/squad.yaml +2 -3
  221. package/squads/squad-council/README.md +1 -1
  222. package/squads/squad-courses/README.md +1 -1
  223. package/squads/squad-courses/squad.yaml +1 -1
  224. package/squads/squad-cybersecurity/README.md +1 -1
  225. package/squads/squad-cybersecurity/squad.yaml +2 -3
  226. package/squads/squad-design/README.md +1 -1
  227. package/squads/{squad-artdir → squad-design}/agents/cro-persuasion.md +1 -1
  228. package/squads/{squad-artdir → squad-design}/agents/platform-aesthetic-director.md +2 -2
  229. package/squads/{squad-artdir → squad-design}/agents/premium-packaging-strategist.md +2 -2
  230. package/squads/{squad-artdir → squad-design}/agents/product-surface-director.md +3 -3
  231. package/squads/squad-design/squad.yaml +6 -3
  232. package/squads/squad-finance/README.md +1 -1
  233. package/squads/squad-finance/squad.yaml +7 -1
  234. package/squads/squad-growth/README.md +1 -1
  235. package/squads/squad-growth/squad.yaml +1 -1
  236. package/squads/squad-paidmedia/README.md +1 -1
  237. package/squads/squad-paidmedia/squad.yaml +2 -3
  238. package/squads/squad-product/README.md +1 -1
  239. package/squads/squad-product/squad.yaml +1 -1
  240. package/squads/squad-research/README.md +1 -1
  241. package/squads/squad-research/squad.yaml +2 -3
  242. package/squads/squad-storytelling/README.md +1 -1
  243. package/squads/squad-storytelling/squad.yaml +2 -3
  244. package/.codex/agents/brad-frost.md +0 -46
  245. package/.codex/agents/claude-orqx.md +0 -72
  246. package/.codex/agents/copy-chief.md +0 -162
  247. package/.codex/agents/cyber-chief.md +0 -169
  248. package/.codex/agents/dan-mall.md +0 -43
  249. package/.codex/agents/data-chief.md +0 -198
  250. package/.codex/agents/dave-malouf.md +0 -43
  251. package/.codex/agents/db-sage.md +0 -152
  252. package/.codex/agents/design-chief.md +0 -226
  253. package/.codex/agents/dev.md +0 -102
  254. package/.codex/agents/legal-chief.md +0 -199
  255. package/.codex/agents/nano-banana-generator.md +0 -42
  256. package/.codex/agents/pm.md +0 -81
  257. package/.codex/agents/po.md +0 -85
  258. package/.codex/agents/qa.md +0 -98
  259. package/.codex/agents/sm.md +0 -77
  260. package/.codex/agents/squad-chief.md +0 -1553
  261. package/.codex/agents/squad.md +0 -66
  262. package/.codex/agents/story-chief.md +0 -180
  263. package/.codex/agents/tools-orqx.md +0 -219
  264. package/.codex/agents/traffic-masters-chief.md +0 -211
  265. package/.sinapse-ai/core/memory/__tests__/active-modules.verify.js +0 -265
  266. package/.sinapse-ai/core/permissions/__tests__/permission-mode.test.js +0 -293
  267. package/.sinapse-ai/data/registry-update-log.jsonl +0 -158
  268. package/.sinapse-ai/infrastructure/scripts/ide-sync/gemini-commands.js +0 -298
  269. package/.sinapse-ai/infrastructure/scripts/ide-sync/transformers/antigravity.js +0 -121
  270. package/.sinapse-ai/infrastructure/scripts/ide-sync/transformers/cursor.js +0 -119
  271. package/.sinapse-ai/infrastructure/scripts/ide-sync/transformers/github-copilot.js +0 -191
  272. package/.sinapse-ai/infrastructure/scripts/ide-sync/transformers/kimi.js +0 -448
  273. package/.sinapse-ai/infrastructure/tests/project-status-loader.test.js +0 -569
  274. package/.sinapse-ai/infrastructure/tests/regression-suite-v2.md +0 -622
  275. package/.sinapse-ai/infrastructure/tests/validate-module.js +0 -98
  276. package/.sinapse-ai/infrastructure/tests/worktree-manager.test.js +0 -620
  277. package/.sinapse-ai/monitor/hooks/lib/__init__.py +0 -2
  278. package/.sinapse-ai/monitor/hooks/lib/enrich.py +0 -59
  279. package/.sinapse-ai/monitor/hooks/lib/send_event.py +0 -48
  280. package/.sinapse-ai/monitor/hooks/notification.py +0 -30
  281. package/.sinapse-ai/monitor/hooks/post_tool_use.py +0 -46
  282. package/.sinapse-ai/monitor/hooks/pre_compact.py +0 -30
  283. package/.sinapse-ai/monitor/hooks/pre_tool_use.py +0 -41
  284. package/.sinapse-ai/monitor/hooks/stop.py +0 -30
  285. package/.sinapse-ai/monitor/hooks/subagent_stop.py +0 -30
  286. package/.sinapse-ai/monitor/hooks/user_prompt_submit.py +0 -39
  287. package/.sinapse-ai/product/templates/statusline/track-agent.sh +0 -69
  288. package/.sinapse-ai/workflow-intelligence/__tests__/confidence-scorer.test.js +0 -335
  289. package/.sinapse-ai/workflow-intelligence/__tests__/integration.test.js +0 -340
  290. package/.sinapse-ai/workflow-intelligence/__tests__/suggestion-engine.test.js +0 -438
  291. package/.sinapse-ai/workflow-intelligence/__tests__/wave-analyzer.test.js +0 -448
  292. package/.sinapse-ai/workflow-intelligence/__tests__/workflow-registry.test.js +0 -303
  293. package/bin/sinapse-graph.js +0 -19
  294. package/docs/codex-integration-process.md +0 -22
  295. package/docs/codex-parity-program.md +0 -27
  296. package/packages/installer/src/__tests__/performance-benchmark.js +0 -383
  297. package/packages/installer/tests/integration/environment-configuration.test.js +0 -332
  298. package/packages/installer/tests/integration/wizard-detection.test.js +0 -352
  299. package/packages/installer/tests/unit/artifact-copy-pipeline/artifact-copy-pipeline.test.js +0 -383
  300. package/packages/installer/tests/unit/claude-md-template-v5/claude-md-template-v5.test.js +0 -193
  301. package/packages/installer/tests/unit/config-validator.test.js +0 -315
  302. package/packages/installer/tests/unit/detection/detect-project-type.test.js +0 -539
  303. package/packages/installer/tests/unit/doctor/doctor-checks.test.js +0 -636
  304. package/packages/installer/tests/unit/doctor/doctor-orchestrator.test.js +0 -192
  305. package/packages/installer/tests/unit/entity-registry-bootstrap.test.js +0 -186
  306. package/packages/installer/tests/unit/env-template.test.js +0 -187
  307. package/packages/installer/tests/unit/generate-settings-json/generate-settings-json.test.js +0 -310
  308. package/packages/installer/tests/unit/git-hooks-installer.test.js +0 -262
  309. package/packages/installer/tests/unit/ide-sync-integration/ide-sync-integration.test.js +0 -231
  310. package/packages/installer/tests/unit/merger/env-merger.test.js +0 -191
  311. package/packages/installer/tests/unit/merger/markdown-merger.test.js +0 -262
  312. package/packages/installer/tests/unit/merger/strategies.test.js +0 -154
  313. package/packages/installer/tests/unit/merger/yaml-merger.test.js +0 -328
  314. package/packages/sinapse-install/tests/unit/chrome-brain.smoke.test.js +0 -66
  315. package/scripts/install-monitor-hooks.sh +0 -82
  316. package/squads/squad-artdir/README.md +0 -90
  317. package/squads/squad-artdir/agents/accessibility-guardian.md +0 -184
  318. package/squads/squad-artdir/agents/artdir-orqx.md +0 -222
  319. package/squads/squad-artdir/agents/color-psychologist.md +0 -166
  320. package/squads/squad-artdir/agents/design-system-architect.md +0 -100
  321. package/squads/squad-artdir/agents/ia-architect.md +0 -169
  322. package/squads/squad-artdir/agents/interaction-designer.md +0 -162
  323. package/squads/squad-artdir/agents/layout-engineer.md +0 -163
  324. package/squads/squad-artdir/agents/motion-architect.md +0 -185
  325. package/squads/squad-artdir/agents/type-systemist.md +0 -138
  326. package/squads/squad-artdir/agents/visual-strategist.md +0 -127
  327. package/squads/squad-artdir/checklists/seven-pillars-validation-checklist.md +0 -172
  328. package/squads/squad-artdir/knowledge-base/case-nyo-ia-reference.md +0 -289
  329. package/squads/squad-artdir/knowledge-base/deliverables-templates.md +0 -457
  330. package/squads/squad-artdir/knowledge-base/motion-technique-catalog.md +0 -247
  331. package/squads/squad-artdir/knowledge-base/premium-packaging-principles.md +0 -133
  332. package/squads/squad-artdir/knowledge-base/psychological-toolkit.md +0 -229
  333. package/squads/squad-artdir/knowledge-base/saas-art-direction-canon.md +0 -242
  334. package/squads/squad-artdir/knowledge-base/seven-pillars-framework.md +0 -289
  335. package/squads/squad-artdir/knowledge-base/ten-pillars-framework.md +0 -221
  336. package/squads/squad-artdir/package.json +0 -20
  337. package/squads/squad-artdir/squad.yaml +0 -299
  338. package/squads/squad-artdir/tasks/audit-conversion.md +0 -97
  339. package/squads/squad-artdir/tasks/audit-drift-multi-surface.md +0 -55
  340. package/squads/squad-artdir/tasks/consult-saas-canon.md +0 -54
  341. package/squads/squad-artdir/tasks/create-art-direction-brief.md +0 -110
  342. package/squads/squad-artdir/tasks/create-premium-packaging-brief.md +0 -61
  343. package/squads/squad-artdir/tasks/create-wireflow.md +0 -84
  344. package/squads/squad-artdir/tasks/design-color-system.md +0 -81
  345. package/squads/squad-artdir/tasks/design-product-surface.md +0 -60
  346. package/squads/squad-artdir/tasks/design-token-system.md +0 -58
  347. package/squads/squad-artdir/tasks/diagnose-visual-language.md +0 -92
  348. package/squads/squad-artdir/tasks/first-5-minutes-choreography.md +0 -65
  349. package/squads/squad-artdir/tasks/specify-motion-system.md +0 -84
  350. package/squads/squad-artdir/tasks/validate-against-pillars.md +0 -143
  351. package/squads/squad-artdir/templates/art-direction-brief-template.md +0 -215
  352. package/squads/squad-artdir/workflows/conversion-audit-cycle.yaml +0 -142
  353. package/squads/squad-artdir/workflows/full-art-direction-cycle.yaml +0 -179
  354. package/squads/squad-artdir/workflows/saas-platform-art-direction-cycle.yaml +0 -338
  355. package/squads/squad-commercial/agents/legal-chief.md +0 -199
  356. package/squads/squad-copy/agents/copy-chief.md +0 -162
  357. package/squads/squad-cybersecurity/agents/cyber-chief.md +0 -169
  358. package/squads/squad-design/agents/design-chief.md +0 -226
  359. package/squads/squad-paidmedia/agents/traffic-masters-chief.md +0 -211
  360. package/squads/squad-research/agents/data-chief.md +0 -198
  361. package/squads/squad-storytelling/agents/story-chief.md +0 -180
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "sinapse-ai",
3
- "version": "1.8.0",
4
- "description": "SINAPSE AI: Framework de orquestracao de IA — 18 squads, 189 agentes especializados",
3
+ "version": "1.9.1",
4
+ "description": "SINAPSE AI: Framework de orquestracao de IA — 17 squads, 172 agentes especializados",
5
5
  "bin": {
6
6
  "sinapse": "bin/sinapse.js",
7
7
  "sinapse-ai": "bin/cli.js",
@@ -23,14 +23,17 @@
23
23
  ".codex/command-registry.json",
24
24
  ".codex/delegation-matrix.json",
25
25
  ".codex/handoff-packet.schema.json",
26
+ ".codex/handoff-packet.parity.schema.json",
27
+ ".codex/handoff-packet.template.json",
28
+ ".codex/delegation-parity.json",
26
29
  ".codex/instructions.md",
27
30
  ".codex/agents/",
28
31
  ".codex/scripts/",
29
32
  ".codex/skills/",
30
33
  ".codex/tasks/",
34
+ "AGENTS.md",
31
35
  "squads/squad-*/**",
32
36
  "squads/claude-code-mastery/**",
33
- "squads/sinapse/**",
34
37
  "sinapse/**",
35
38
  "docs/guides/",
36
39
  "docs/installation/",
@@ -48,11 +51,15 @@
48
51
  "docs/troubleshooting.md",
49
52
  "docs/ide-integration.md",
50
53
  "docs/agent-reference-guide.md",
51
- "docs/codex-integration-process.md",
52
- "docs/codex-parity-program.md",
53
54
  "docs/TELEMETRY.md",
54
55
  "README.md",
55
- "LICENSE"
56
+ "CHANGELOG.md",
57
+ "LICENSE",
58
+ "!**/__tests__/**",
59
+ "!**/tests/**",
60
+ "!**/*.test.js",
61
+ "!**/*.spec.js",
62
+ ".sinapse-ai/development/templates/**"
56
63
  ],
57
64
  "scripts": {
58
65
  "format": "prettier --write \"**/*.md\"",
@@ -85,11 +92,6 @@
85
92
  "sync:ide:claude": "node .sinapse-ai/infrastructure/scripts/ide-sync/index.js sync --ide claude-code",
86
93
  "sync:ide:codex": "node .sinapse-ai/infrastructure/scripts/sync-codex-local-first.js",
87
94
  "validate:claude-sync": "node .sinapse-ai/infrastructure/scripts/ide-sync/index.js validate --ide claude-code --strict",
88
- "validate:gemini-sync": "node .sinapse-ai/infrastructure/scripts/ide-sync/index.js validate --ide gemini --strict",
89
- "validate:cursor-sync": "node .sinapse-ai/infrastructure/scripts/ide-sync/index.js validate --ide cursor --strict",
90
- "validate:antigravity-sync": "node .sinapse-ai/infrastructure/scripts/ide-sync/index.js validate --ide antigravity --strict",
91
- "validate:copilot-sync": "node .sinapse-ai/infrastructure/scripts/ide-sync/index.js validate --ide github-copilot --strict",
92
- "validate:kimi-sync": "node .sinapse-ai/infrastructure/scripts/ide-sync/index.js validate --ide kimi --strict",
93
95
  "validate:claude-integration": "node .sinapse-ai/infrastructure/scripts/validate-claude-integration.js",
94
96
  "validate:squad-schema": "node scripts/validate-squad-yaml.js",
95
97
  "validate:squad-schema:strict": "node scripts/validate-squad-yaml.js --strict",
@@ -112,6 +114,8 @@
112
114
  "validate:no-personal-leaks": "node scripts/validate-no-personal-leaks.js",
113
115
  "validate:orqx-discipline": "node scripts/validate-orqx-discipline.js",
114
116
  "validate:cross-refs": "node scripts/validate-cross-refs.js",
117
+ "validate:agents-md": "node scripts/validate-agents-md.js",
118
+ "validate:agents-md:fix": "node scripts/validate-agents-md.js --fix",
115
119
  "validate:all": "node scripts/validate-all.js",
116
120
  "sync:squad-yaml": "node scripts/sync-squad-yaml-components.js",
117
121
  "validate:squad-yaml": "node scripts/sync-squad-yaml-components.js --check",
@@ -123,7 +127,7 @@
123
127
  "brand": "node scripts/sinapse-patch.js",
124
128
  "prepublishOnly": "node bin/utils/validate-publish.js && npm run generate:manifest && npm run validate:manifest",
125
129
  "setup": "node bin/postinstall.js",
126
- "prepare": "husky"
130
+ "prepare": "node scripts/prepare-hooks.js"
127
131
  },
128
132
  "dependencies": {
129
133
  "@clack/prompts": "^0.11.0",
@@ -0,0 +1,26 @@
1
+ #!/usr/bin/env node
2
+ 'use strict';
3
+
4
+ /**
5
+ * @sinapse/installer entry point.
6
+ *
7
+ * Fixes the broken `main` / `bin.sinapse-installer` reference: package.json
8
+ * pointed here but the file did not exist. This re-exports the real wizard
9
+ * (src/wizard/index.js) for programmatic use, and runs it when invoked
10
+ * directly as a CLI (`sinapse-installer`).
11
+ */
12
+
13
+ const wizard = require('./wizard');
14
+
15
+ module.exports = wizard;
16
+
17
+ // CLI mode: run the wizard when this file is executed directly.
18
+ if (require.main === module) {
19
+ Promise.resolve()
20
+ .then(() => wizard.runWizard())
21
+ .catch((error) => {
22
+ // eslint-disable-next-line no-console
23
+ console.error('Installer failed:', error && error.message ? error.message : error);
24
+ process.exit(1);
25
+ });
26
+ }
@@ -51,22 +51,22 @@ const { runSafe } = require('../../../../.sinapse-ai/core/utils/spawn-safe');
51
51
  const MANAGED_HOOKS_DIRNAME = path.join('.sinapse-ai', 'git-hooks');
52
52
 
53
53
  /**
54
- * Source scanner files copied into `<hooksDir>/lib/` so the generated hook can
54
+ * Source guard files copied into `<hooksDir>/lib/` so the generated hook can
55
55
  * `require` them with a stable relative path regardless of where the project
56
- * lives. `staged-secret-scan.js` is self-contained (only `child_process`).
56
+ * lives. All are self-contained (Node built-ins only) and bundle together.
57
57
  * @constant {Array<{from: string, to: string}>}
58
58
  */
59
+ const BIN_UTILS = path.join(__dirname, '..', '..', '..', '..', 'bin', 'utils');
59
60
  const SCANNER_SOURCES = [
60
- {
61
- from: path.join(__dirname, '..', '..', '..', '..', 'bin', 'utils', 'staged-secret-scan.js'),
62
- to: 'staged-secret-scan.js',
63
- },
61
+ // --- secret scan (3 guards share this bundle) ---
62
+ { from: path.join(BIN_UTILS, 'staged-secret-scan.js'), to: 'staged-secret-scan.js' },
64
63
  // staged-secret-scan.js requires secret-scanner-core.js via __dirname, so the
65
- // core must travel with it into the lib/ bundle. Both files use only Node built-ins.
66
- {
67
- from: path.join(__dirname, '..', '..', '..', '..', 'bin', 'utils', 'secret-scanner-core.js'),
68
- to: 'secret-scanner-core.js',
69
- },
64
+ // core must travel with it into the lib/ bundle.
65
+ { from: path.join(BIN_UTILS, 'secret-scanner-core.js'), to: 'secret-scanner-core.js' },
66
+ // --- destructive SQL DDL/DML guard (FASE C) ---
67
+ { from: path.join(BIN_UTILS, 'staged-sql-guard.js'), to: 'staged-sql-guard.js' },
68
+ // --- framework boundary guard (FASE C; respects boundary.frameworkProtection) ---
69
+ { from: path.join(BIN_UTILS, 'framework-guard.js'), to: 'framework-guard.js' },
70
70
  ];
71
71
 
72
72
  /**
@@ -173,17 +173,23 @@ function copyScannerLib(hooksDir) {
173
173
  /**
174
174
  * Build the content of the managed `pre-commit` Node hook.
175
175
  *
176
- * The hook:
177
- * 1. Runs the bundled staged-secret-scan against the staged index.
178
- * 2. Blocks the commit (exit 1) on any finding, printing redacted reasons.
179
- * 3. Fail-CLOSED: if the scanner cannot be loaded/run, the commit is blocked
180
- * (a broken guard must never silently allow secrets through).
181
- * 4. Chains to a pre-existing `.husky/pre-commit` (or a backed-up prior hook)
182
- * so the project's own hooks still run.
176
+ * The hook runs THREE bundled guards in sequence (each a standalone module
177
+ * under ./lib that exits non-zero on a finding), then chains to a pre-existing
178
+ * husky hook:
179
+ * 1. staged-secret-scan.js — secret/.env/private-key/entropy leak (fail-CLOSED)
180
+ * 2. staged-sql-guard.js — destructive DDL/DML (DROP/TRUNCATE/DELETE-no-WHERE)
181
+ * 3. framework-guard.js — L1/L2 boundary (no-op unless boundary
182
+ * .frameworkProtection is true in core-config.yaml)
183
+ *
184
+ * Each guard is spawned as a child Node process (cwd = project root, where git
185
+ * already runs hooks) so it gets the same staged index and reuses its own
186
+ * exit/print semantics. A non-zero exit from ANY guard blocks the commit. If a
187
+ * guard process cannot even be spawned, the commit is blocked (fail-CLOSED) —
188
+ * a guard that silently disappears must never let a commit through unscanned.
183
189
  *
184
190
  * @param {Object} [options]
185
191
  * @param {string|null} [options.chainHookRel] - Relative path (from project
186
- * root) of a prior hook to chain to after the scan passes. When null, the
192
+ * root) of a prior hook to chain to after the guards pass. When null, the
187
193
  * hook auto-detects `.husky/pre-commit` at runtime.
188
194
  * @returns {string} Hook file content.
189
195
  */
@@ -201,38 +207,40 @@ const fs = require('fs');
201
207
  const { spawnSync } = require('child_process');
202
208
 
203
209
  const projectRoot = process.cwd();
210
+ const libDir = path.join(__dirname, 'lib');
211
+
212
+ // --- 1-3. SINAPSE staged guards (each fail-CLOSED) ---------------------------
213
+ // Order: secret scan, then destructive-SQL guard, then framework-boundary guard.
214
+ // framework-guard self-disables when boundary.frameworkProtection is false.
215
+ const GUARDS = [
216
+ { file: 'staged-secret-scan.js', label: 'Secret Scan' },
217
+ { file: 'staged-sql-guard.js', label: 'SQL Guard' },
218
+ { file: 'framework-guard.js', label: 'Framework Boundary' },
219
+ ];
204
220
 
205
- // --- 1. SINAPSE staged secret scan (fail-CLOSED) ----------------------------
206
- let scanStagedFiles;
207
- let getStagedFiles;
208
- try {
209
- // The scanner is bundled next to this hook under ./lib so the require path is
210
- // stable no matter where the project lives.
211
- ({ scanStagedFiles, getStagedFiles } = require(path.join(__dirname, 'lib', 'staged-secret-scan.js')));
212
- } catch (loadErr) {
213
- process.stderr.write('SINAPSE Secret Scan: scanner could not be loaded — blocking commit (fail-closed).\\n');
214
- process.stderr.write(' ' + (loadErr && loadErr.message ? loadErr.message : String(loadErr)) + '\\n');
215
- process.exit(1);
216
- }
217
-
218
- try {
219
- const files = getStagedFiles();
220
- const findings = scanStagedFiles(files);
221
- if (findings.length > 0) {
222
- process.stderr.write('\\nSINAPSE Secret Scan: commit blocked.\\n\\n');
223
- for (const f of findings) {
224
- process.stderr.write(' - ' + f.filePath + ': ' + f.reason + '\\n');
225
- }
226
- process.stderr.write('\\nRemove the sensitive content before committing.\\n\\n');
221
+ for (const guard of GUARDS) {
222
+ const guardPath = path.join(libDir, guard.file);
223
+ if (!fs.existsSync(guardPath)) {
224
+ // A bundled guard vanished — fail-CLOSED rather than skip silently.
225
+ process.stderr.write('SINAPSE ' + guard.label + ': guard missing at ' + guardPath + ' blocking commit (fail-closed).\\n');
226
+ process.exit(1);
227
+ }
228
+ const res = spawnSync(process.execPath, [guardPath], { stdio: 'inherit', cwd: projectRoot });
229
+ if (res.error) {
230
+ process.stderr.write('SINAPSE ' + guard.label + ': guard failed to run — blocking commit (fail-closed).\\n');
231
+ process.stderr.write(' ' + res.error.message + '\\n');
227
232
  process.exit(1);
228
233
  }
229
- } catch (scanErr) {
230
- process.stderr.write('SINAPSE Secret Scan: scan failed blocking commit (fail-closed).\\n');
231
- process.stderr.write(' ' + (scanErr && scanErr.message ? scanErr.message : String(scanErr)) + '\\n');
232
- process.exit(1);
234
+ if (typeof res.status === 'number' && res.status !== 0) {
235
+ // Non-zero from a guard = commit blocked. A clean guard prints its own
236
+ // reason; a crashed guard (e.g. corrupted lib) does not, so emit an
237
+ // explicit fail-closed line so the block is never silent.
238
+ process.stderr.write('SINAPSE ' + guard.label + ': blocking commit (fail-closed, exit ' + res.status + ').\\n');
239
+ process.exit(res.status);
240
+ }
233
241
  }
234
242
 
235
- // --- 2. Chain to a pre-existing hook (husky or backed-up prior hook) --------
243
+ // --- 4. Chain to a pre-existing hook (husky or backed-up prior hook) --------
236
244
  const explicitChain = ${chainLiteral};
237
245
  const candidates = [];
238
246
  if (explicitChain) {
@@ -273,6 +281,150 @@ process.exit(0);
273
281
  `;
274
282
  }
275
283
 
284
+ /**
285
+ * Build the content of the managed `pre-push` Node hook.
286
+ *
287
+ * Runs the project's `validate:all` aggregate guard (the same set the prior
288
+ * husky pre-push ran) before allowing a push. It is best-effort about the exact
289
+ * script name: it picks the first of `validate:all` / `validate` that exists in
290
+ * the target's package.json `scripts`, and is a no-op (allow) when neither is
291
+ * present (so non-SINAPSE consumer repos are not blocked by a missing script).
292
+ *
293
+ * Then chains to a pre-existing `.husky/pre-push` so any project-specific push
294
+ * checks still run.
295
+ *
296
+ * @param {Object} [options]
297
+ * @param {string|null} [options.chainHookRel]
298
+ * @returns {string} Hook file content.
299
+ */
300
+ function buildPrePushHook(options = {}) {
301
+ const chainHookRel = options.chainHookRel || null;
302
+ const chainLiteral = chainHookRel ? JSON.stringify(chainHookRel) : 'null';
303
+
304
+ return `#!/usr/bin/env node
305
+ 'use strict';
306
+ /* ${MANAGED_MARKER} — Auto-generated by SINAPSE git-hooks-installer. Do not edit manually. */
307
+ /* Re-run \`sinapse init\` (or the greenfield bootstrap) to regenerate. */
308
+
309
+ const path = require('path');
310
+ const fs = require('fs');
311
+ const { spawnSync } = require('child_process');
312
+
313
+ const projectRoot = process.cwd();
314
+
315
+ // --- 1. Run validate:all (or validate) if the project defines it -----------
316
+ function pickValidateScript() {
317
+ try {
318
+ const pkgPath = path.join(projectRoot, 'package.json');
319
+ if (!fs.existsSync(pkgPath)) return null;
320
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));
321
+ const scripts = (pkg && pkg.scripts) || {};
322
+ for (const name of ['validate:all', 'validate']) {
323
+ if (typeof scripts[name] === 'string' && scripts[name].length > 0) return name;
324
+ }
325
+ } catch {
326
+ // Unreadable package.json — treat as "no validate script" (allow).
327
+ }
328
+ return null;
329
+ }
330
+
331
+ const script = pickValidateScript();
332
+ if (script) {
333
+ const npmCmd = process.platform === 'win32' ? 'npm.cmd' : 'npm';
334
+ // shell:true on Windows — spawning npm.cmd without it throws EINVAL (CVE-2024-27980 /
335
+ // Node DEP0190). Args are fixed/literal here, so there is no shell-injection surface.
336
+ const res = spawnSync(npmCmd, ['run', '--silent', script], { stdio: 'inherit', cwd: projectRoot, shell: process.platform === 'win32' });
337
+ if (res.error) {
338
+ process.stderr.write('SINAPSE pre-push: could not run "npm run ' + script + '" — blocking push (fail-closed).\\n');
339
+ process.stderr.write(' ' + res.error.message + '\\n');
340
+ process.stderr.write(' Bypass (emergency only): git push --no-verify\\n');
341
+ process.exit(1);
342
+ }
343
+ if (typeof res.status === 'number' && res.status !== 0) {
344
+ process.stderr.write('\\nSINAPSE pre-push: validation failed (see output above). Push blocked.\\n');
345
+ process.stderr.write(' Bypass (emergency only): git push --no-verify\\n\\n');
346
+ process.exit(res.status);
347
+ }
348
+ }
349
+
350
+ // --- 2. Chain to a pre-existing pre-push hook ------------------------------
351
+ const explicitChain = ${chainLiteral};
352
+ const candidates = [];
353
+ if (explicitChain) {
354
+ candidates.push(path.resolve(projectRoot, explicitChain));
355
+ }
356
+ candidates.push(path.join(projectRoot, '.husky', 'pre-push'));
357
+
358
+ const selfPath = __filename;
359
+ for (const candidate of candidates) {
360
+ if (!candidate || !fs.existsSync(candidate)) continue;
361
+ if (path.resolve(candidate) === path.resolve(selfPath)) continue;
362
+
363
+ const isJs = candidate.endsWith('.js') || candidate.endsWith('.cjs');
364
+ const cmd = isJs ? process.execPath : candidate;
365
+ const args = isJs ? [candidate] : [];
366
+ const res = spawnSync(cmd, args, { stdio: 'inherit', cwd: projectRoot });
367
+ if (res.error) {
368
+ if (!isJs) {
369
+ const shRes = spawnSync('sh', [candidate], { stdio: 'inherit', cwd: projectRoot });
370
+ if (!shRes.error) {
371
+ if (typeof shRes.status === 'number' && shRes.status !== 0) process.exit(shRes.status);
372
+ break;
373
+ }
374
+ }
375
+ process.stderr.write('SINAPSE pre-push: failed to run chained hook ' + candidate + ': ' + res.error.message + '\\n');
376
+ process.exit(1);
377
+ }
378
+ if (typeof res.status === 'number' && res.status !== 0) process.exit(res.status);
379
+ break;
380
+ }
381
+
382
+ process.exit(0);
383
+ `;
384
+ }
385
+
386
+ /**
387
+ * Build the content of the managed `post-commit` Node hook.
388
+ *
389
+ * Preserves the prior husky post-commit behavior (cache-clear + IDS registry
390
+ * update) by delegating to the project's existing scripts when present. Both
391
+ * sub-scripts are non-blocking by design (any failure is swallowed) so a
392
+ * post-commit problem never breaks the commit that already happened.
393
+ *
394
+ * @returns {string} Hook file content.
395
+ */
396
+ function buildPostCommitHook() {
397
+ return `#!/usr/bin/env node
398
+ 'use strict';
399
+ /* ${MANAGED_MARKER} — Auto-generated by SINAPSE git-hooks-installer. Do not edit manually. */
400
+ /* Re-run \`sinapse init\` (or the greenfield bootstrap) to regenerate. */
401
+
402
+ const path = require('path');
403
+ const fs = require('fs');
404
+ const { spawnSync } = require('child_process');
405
+
406
+ const projectRoot = process.cwd();
407
+
408
+ // Migrated from .husky/post-commit (non-blocking, best-effort).
409
+ const POST_COMMIT_SCRIPTS = [
410
+ path.join('.sinapse-ai', 'infrastructure', 'scripts', 'git-hooks', 'post-commit.js'),
411
+ path.join('.sinapse-ai', 'hooks', 'ids-post-commit.js'),
412
+ ];
413
+
414
+ for (const rel of POST_COMMIT_SCRIPTS) {
415
+ const abs = path.join(projectRoot, rel);
416
+ if (!fs.existsSync(abs)) continue;
417
+ try {
418
+ spawnSync(process.execPath, [abs], { stdio: 'ignore', cwd: projectRoot });
419
+ } catch {
420
+ // Never block on post-commit failures.
421
+ }
422
+ }
423
+
424
+ process.exit(0);
425
+ `;
426
+ }
427
+
276
428
  /**
277
429
  * Install the SINAPSE git guard into a project.
278
430
  *
@@ -345,10 +497,20 @@ async function installGitHooks(options = {}) {
345
497
  }
346
498
  }
347
499
 
348
- // Bundle the scanner lib and write the managed pre-commit hook.
500
+ // Bundle the guard lib and write the managed hooks (pre-commit, pre-push,
501
+ // post-commit). All three live under core.hooksPath so there is a single
502
+ // active hook system (no husky/hooksPath split).
349
503
  copyScannerLib(hooksDir);
350
504
  writeManagedHook(hooksDir, 'pre-commit', buildPreCommitHook({ chainHookRel: explicitChain }));
351
505
 
506
+ // pre-push: run validate:all, then chain to any prior .husky/pre-push.
507
+ const huskyPrePush = path.join(projectDir, '.husky', 'pre-push');
508
+ const prePushChain = fs.existsSync(huskyPrePush) ? path.join('.husky', 'pre-push') : null;
509
+ writeManagedHook(hooksDir, 'pre-push', buildPrePushHook({ chainHookRel: prePushChain }));
510
+
511
+ // post-commit: migrated cache-clear + IDS registry update (non-blocking).
512
+ writeManagedHook(hooksDir, 'post-commit', buildPostCommitHook());
513
+
352
514
  // Point core.hooksPath at our managed dir (project-relative for portability).
353
515
  const relHooksDir = MANAGED_HOOKS_DIRNAME.split(path.sep).join('/');
354
516
  const set = await setCoreHooksPath(projectDir, relHooksDir);
@@ -379,6 +541,8 @@ module.exports = {
379
541
  writeManagedHook,
380
542
  copyScannerLib,
381
543
  buildPreCommitHook,
544
+ buildPrePushHook,
545
+ buildPostCommitHook,
382
546
  MANAGED_HOOKS_DIRNAME,
383
547
  MANAGED_MARKER,
384
548
  };
@@ -209,6 +209,35 @@ async function copyDirectoryWithRootReplacement(sourceDir, destDir, onProgress =
209
209
  return copiedFiles;
210
210
  }
211
211
 
212
+ /**
213
+ * Codex CLI context files that live at the package ROOT (not under .codex/ or
214
+ * .sinapse-ai/), so the directory-copy loops never reach them. AGENTS.md is the
215
+ * file Codex reads by default — it carries the Imperator greeting and the full
216
+ * agent roster. Delivered only when the user selects Codex.
217
+ * @constant {string[]}
218
+ */
219
+ const CODEX_ROOT_FILES = ['AGENTS.md'];
220
+
221
+ /**
222
+ * Deliver the Codex root context files (AGENTS.md) into the target project.
223
+ * Idempotent: re-running overwrites the destination so it stays aligned with the
224
+ * shipped roster. Missing source files are skipped silently (never throws).
225
+ *
226
+ * @param {string} pkgRoot - Package root (where AGENTS.md ships)
227
+ * @param {string} targetDir - Destination project root
228
+ * @returns {Promise<string[]>} Relative paths actually delivered
229
+ */
230
+ async function deliverCodexRootFiles(pkgRoot, targetDir) {
231
+ const delivered = [];
232
+ for (const name of CODEX_ROOT_FILES) {
233
+ const src = path.join(pkgRoot, name);
234
+ if (!await fs.pathExists(src)) continue;
235
+ const ok = await copyFileWithRootReplacement(src, path.join(targetDir, name));
236
+ if (ok) delivered.push(name);
237
+ }
238
+ return delivered;
239
+ }
240
+
212
241
  /**
213
242
  * Install .sinapse-ai content to target directory
214
243
  *
@@ -225,6 +254,7 @@ async function installSinapseCore(options = {}) {
225
254
  const {
226
255
  targetDir = process.cwd(),
227
256
  onProgress = null,
257
+ includeCodex = false,
228
258
  } = options;
229
259
 
230
260
  const result = {
@@ -283,6 +313,45 @@ async function installSinapseCore(options = {}) {
283
313
  }
284
314
  }
285
315
 
316
+ // Top-level payload dirs that live OUTSIDE .sinapse-ai (siblings at the
317
+ // package root), so the FOLDERS_TO_COPY loop above never reaches them:
318
+ // - squads/ : the 17 domain squads (160 specialists + orchestrators).
319
+ // Needed by BOTH IDEs — Claude syncs the squad orchestrators
320
+ // into .claude/commands, and Codex resolves the full 172-agent
321
+ // roster from here. Without it a project has only the 12 core
322
+ // agents, contradicting the shipped AGENTS.md.
323
+ // - .codex/ : Codex CLI payload (resolvers, tasks, JSON registries). Only
324
+ // when the user selected Codex; agents + skills are then
325
+ // regenerated from squads/ + core by sync-codex-local-first.js.
326
+ const pkgRoot = path.dirname(sourceDir);
327
+ const topLevelDirs = ['squads'];
328
+ if (includeCodex) topLevelDirs.push('.codex');
329
+ for (const dirName of topLevelDirs) {
330
+ const src = path.join(pkgRoot, dirName);
331
+ const dest = path.join(targetDir, dirName);
332
+ if (await fs.pathExists(src)) {
333
+ spinner.text = `Copying ${dirName}...`;
334
+ const copied = await copyDirectoryWithRootReplacement(src, dest, onProgress);
335
+ result.installedFiles.push(...copied.map((f) => path.join(dirName, f)));
336
+ if (dirName === '.codex') result.codexInstalledFiles = copied.length;
337
+ if (dirName === 'squads') result.squadsInstalledFiles = copied.length;
338
+ }
339
+ }
340
+
341
+ // AGENTS.md is the Codex CLI's default context file (Imperator greeting +
342
+ // the full agent roster). It lives at the package ROOT (not under .codex/ or
343
+ // .sinapse-ai/), so neither loop above reaches it. Without it, a Codex user's
344
+ // project has the .codex pointers/resolvers but no greeting and no roster —
345
+ // the parity built in the repo never reaches the user.
346
+ if (includeCodex) {
347
+ spinner.text = 'Copying AGENTS.md...';
348
+ const delivered = await deliverCodexRootFiles(pkgRoot, targetDir);
349
+ if (delivered.includes('AGENTS.md')) {
350
+ result.installedFiles.push('AGENTS.md');
351
+ result.agentsMdInstalled = true;
352
+ }
353
+ }
354
+
286
355
  // Create install manifest
287
356
  spinner.text = 'Creating installation manifest...';
288
357
  const packageVersion = require('../../../../package.json').version;
@@ -428,6 +497,8 @@ module.exports = {
428
497
  copyDirectoryWithRootReplacement,
429
498
  generateVersionJson,
430
499
  generateFileHashes,
500
+ deliverCodexRootFiles,
431
501
  FOLDERS_TO_COPY,
432
502
  ROOT_FILES_TO_COPY,
503
+ CODEX_ROOT_FILES,
433
504
  };
@@ -139,7 +139,7 @@ function showWelcome() {
139
139
  console.log(` ${t('welcomeMessage')}`);
140
140
  console.log(` ${t('welcomeSubtitle')}`);
141
141
  console.log('');
142
- console.log(' 18 squads · 189 agents · 1,213 tasks');
142
+ console.log(' 17 squads · 172 agents · 1,200 tasks');
143
143
  console.log(` ${t('welcomeDesc1')}`);
144
144
  console.log(` ${t('welcomeDesc2')}`);
145
145
  console.log('');
@@ -201,34 +201,13 @@ async function copyAgentFiles(projectRoot, agentFolder, ideConfig = null) {
201
201
 
202
202
  for (const file of agentFiles) {
203
203
  const sourcePath = path.join(sourceDir, file);
204
- const agentName = file.replace('.md', '');
205
-
206
204
  // Only copy if source is a file (not directory)
207
205
  const stat = await fs.stat(sourcePath);
208
206
  if (stat.isFile()) {
209
- if (ideConfig && ideConfig.agentFolder && ideConfig.agentFolder.includes('.github')) {
210
- // GitHub Copilot: apply transformer for .agent.md format with YAML frontmatter
211
- try {
212
- const agentParser = require('../../../../.sinapse-ai/infrastructure/scripts/ide-sync/agent-parser');
213
- const copilotTransformer = require('../../../../.sinapse-ai/infrastructure/scripts/ide-sync/transformers/github-copilot');
214
- const agentData = agentParser.parseAgentFile(sourcePath);
215
- const content = copilotTransformer.transform(agentData);
216
- const filename = copilotTransformer.getFilename(agentData);
217
- const targetPath = path.join(targetDir, filename);
218
- await fs.writeFile(targetPath, content, 'utf8');
219
- copiedFiles.push(targetPath);
220
- } catch (transformError) {
221
- // Fallback: copy raw file with .agent.md extension
222
- const targetPath = path.join(targetDir, `${agentName}.agent.md`);
223
- await fs.copy(sourcePath, targetPath);
224
- copiedFiles.push(targetPath);
225
- }
226
- } else {
227
- // Normal copy for other IDEs
228
- const targetPath = path.join(targetDir, file);
229
- await fs.copy(sourcePath, targetPath);
230
- copiedFiles.push(targetPath);
231
- }
207
+ // Copy agent file (Claude Code + Codex only — secondary IDE adapters removed)
208
+ const targetPath = path.join(targetDir, file);
209
+ await fs.copy(sourcePath, targetPath);
210
+ copiedFiles.push(targetPath);
232
211
  }
233
212
  }
234
213
 
@@ -658,6 +637,19 @@ const HOOK_EVENT_MAP = {
658
637
  matcher: null,
659
638
  timeout: 5,
660
639
  },
640
+ // Statusline agent/squad tracker (Cluster D — feedback visual).
641
+ // Detector writes the per-cwd session-cache the statusline reads;
642
+ // clear wipes it when the session ends. FAIL-OPEN: both exit 0 on error.
643
+ 'track-agent.cjs': {
644
+ event: 'UserPromptSubmit',
645
+ matcher: null,
646
+ timeout: 10,
647
+ },
648
+ 'track-agent-clear.cjs': {
649
+ event: 'Stop',
650
+ matcher: null,
651
+ timeout: 10,
652
+ },
661
653
  };
662
654
 
663
655
  /** Default event config for unmapped hooks (backwards compatible). */
@@ -937,7 +929,12 @@ async function linkGeminiExtension(projectRoot) {
937
929
  return { status: 'skipped', reason: 'manifest-not-found' };
938
930
  }
939
931
 
940
- const versionCheck = spawnSync('gemini', ['--version'], { encoding: 'utf8' });
932
+ // On Windows, `gemini` is a .cmd/.ps1 shim — spawnSync without a shell throws
933
+ // EINVAL. Run through the shell on win32 so the shim resolves.
934
+ const versionCheck = spawnSync('gemini', ['--version'], {
935
+ encoding: 'utf8',
936
+ shell: process.platform === 'win32',
937
+ });
941
938
  if (versionCheck.status !== 0) {
942
939
  return { status: 'skipped', reason: 'gemini-cli-not-available' };
943
940
  }
@@ -946,6 +943,7 @@ async function linkGeminiExtension(projectRoot) {
946
943
  cwd: projectRoot,
947
944
  encoding: 'utf8',
948
945
  timeout: 30000,
946
+ shell: process.platform === 'win32',
949
947
  });
950
948
 
951
949
  if (linkResult.status === 0) {
@@ -960,6 +958,7 @@ async function linkGeminiExtension(projectRoot) {
960
958
  cwd: projectRoot,
961
959
  encoding: 'utf8',
962
960
  timeout: 30000,
961
+ shell: process.platform === 'win32',
963
962
  });
964
963
 
965
964
  if (uninstall.status !== 0) {
@@ -970,6 +969,7 @@ async function linkGeminiExtension(projectRoot) {
970
969
  cwd: projectRoot,
971
970
  encoding: 'utf8',
972
971
  timeout: 30000,
972
+ shell: process.platform === 'win32',
973
973
  });
974
974
 
975
975
  if (linkResult.status === 0) {