sinapse-ai 9.3.0 → 9.5.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 (432) hide show
  1. package/.claude/CLAUDE.md +60 -341
  2. package/.claude/hooks/enforce-architecture-first.py +197 -197
  3. package/.claude/hooks/enforce-git-push-authority.sh +25 -4
  4. package/.claude/hooks/mind-clone-governance.py +193 -193
  5. package/.claude/hooks/read-protection.py +152 -152
  6. package/.claude/hooks/sql-governance.py +183 -183
  7. package/.claude/hooks/verify-packages.cjs +83 -0
  8. package/.claude/hooks/write-path-validation.py +195 -195
  9. package/.claude/rules/agent-authority.md +6 -0
  10. package/.claude/rules/agent-handoff.md +5 -0
  11. package/.claude/rules/cross-squad-routing.md +5 -0
  12. package/.claude/rules/hook-governance.md +7 -0
  13. package/.claude/rules/mandatory-delegation.md +24 -0
  14. package/.claude/rules/mcp-usage.md +3 -1
  15. package/.claude/rules/project-intelligence.md +63 -0
  16. package/.claude/rules/response-format.md +4 -0
  17. package/.claude/rules/safe-collaboration.md +14 -2
  18. package/.claude/rules/security-data-protection.md +27 -0
  19. package/.claude/rules/squad-awareness.md +96 -68
  20. package/.claude/rules/token-economy.md +148 -0
  21. package/.claude/rules/tool-examples.md +6 -0
  22. package/.claude/rules/workflow-execution.md +7 -0
  23. package/.codex/agents/analyst.md +342 -71
  24. package/.codex/agents/architect.md +533 -68
  25. package/.codex/agents/data-engineer.md +530 -106
  26. package/.codex/agents/developer.md +657 -0
  27. package/.codex/agents/devops.md +639 -69
  28. package/.codex/agents/product-lead.md +362 -0
  29. package/.codex/agents/project-lead.md +405 -0
  30. package/.codex/agents/quality-gate.md +538 -0
  31. package/.codex/agents/sinapse-orqx.md +9 -7
  32. package/.codex/agents/sprint-lead.md +315 -0
  33. package/.codex/agents/squad-creator.md +402 -0
  34. package/.codex/agents/ux-design-expert.md +523 -0
  35. package/.codex/delegation-matrix.json +756 -44
  36. package/.codex/handoff-packet.schema.json +30 -6
  37. package/.sinapse-ai/core/code-intel/registry-syncer.js +56 -3
  38. package/.sinapse-ai/core/doctor/checks/agent-memory.js +5 -1
  39. package/.sinapse-ai/core/doctor/checks/claude-md.js +4 -1
  40. package/.sinapse-ai/core/doctor/checks/code-intel.js +5 -1
  41. package/.sinapse-ai/core/doctor/checks/commands-count.js +4 -1
  42. package/.sinapse-ai/core/doctor/checks/constitution-consistency.js +4 -1
  43. package/.sinapse-ai/core/doctor/checks/core-config.js +4 -1
  44. package/.sinapse-ai/core/doctor/checks/entity-registry.js +6 -1
  45. package/.sinapse-ai/core/doctor/checks/git-hooks.js +5 -1
  46. package/.sinapse-ai/core/doctor/checks/graph-dashboard.js +4 -1
  47. package/.sinapse-ai/core/doctor/checks/hooks-claude-count.js +5 -1
  48. package/.sinapse-ai/core/doctor/checks/ide-sync.js +4 -1
  49. package/.sinapse-ai/core/doctor/checks/node-version.js +4 -1
  50. package/.sinapse-ai/core/doctor/checks/npm-packages.js +4 -1
  51. package/.sinapse-ai/core/doctor/checks/rules-files.js +4 -1
  52. package/.sinapse-ai/core/doctor/checks/settings-json.js +4 -1
  53. package/.sinapse-ai/core/doctor/checks/skills-count.js +4 -1
  54. package/.sinapse-ai/core/doctor/index.js +157 -50
  55. package/.sinapse-ai/core/ids/registry-updater.js +6 -1
  56. package/.sinapse-ai/core/logger/index.js +319 -0
  57. package/.sinapse-ai/core/orchestration/terminal-spawner.js +2 -2
  58. package/.sinapse-ai/core/telemetry/index.js +247 -0
  59. package/.sinapse-ai/data/entity-registry.yaml +1060 -808
  60. package/.sinapse-ai/development/agents/analyst.md +90 -0
  61. package/.sinapse-ai/development/agents/architect.md +78 -0
  62. package/.sinapse-ai/development/agents/data-engineer.md +38 -0
  63. package/.sinapse-ai/development/agents/developer.md +97 -0
  64. package/.sinapse-ai/development/agents/devops.md +121 -0
  65. package/.sinapse-ai/development/agents/product-lead.md +27 -0
  66. package/.sinapse-ai/development/agents/project-lead.md +28 -0
  67. package/.sinapse-ai/development/agents/quality-gate.md +89 -0
  68. package/.sinapse-ai/development/agents/sprint-lead/MEMORY.md +8 -0
  69. package/.sinapse-ai/development/agents/sprint-lead.md +28 -0
  70. package/.sinapse-ai/development/agents/squad-creator.md +58 -0
  71. package/.sinapse-ai/development/agents/ux-design-expert.md +28 -0
  72. package/.sinapse-ai/development/checklists/agent-quality-gate.md +27 -0
  73. package/.sinapse-ai/development/checklists/brownfield-compatibility-checklist.md +20 -0
  74. package/.sinapse-ai/development/checklists/code-review-checklist.md +106 -0
  75. package/.sinapse-ai/development/checklists/issue-triage-checklist.md +9 -0
  76. package/.sinapse-ai/development/checklists/memory-audit-checklist.md +16 -0
  77. package/.sinapse-ai/development/checklists/pr-quality-checklist.md +72 -0
  78. package/.sinapse-ai/development/checklists/security-deployment-checklist.md +54 -0
  79. package/.sinapse-ai/development/checklists/self-critique-checklist.md +19 -1
  80. package/.sinapse-ai/development/knowledge-base/agent-communication-protocol.md +127 -0
  81. package/.sinapse-ai/development/knowledge-base/database-scaling-patterns.md +374 -0
  82. package/.sinapse-ai/development/knowledge-base/environment-deployment-patterns.md +353 -0
  83. package/.sinapse-ai/development/knowledge-base/gotchas-patterns.md +224 -0
  84. package/.sinapse-ai/development/knowledge-base/infrastructure-decision-framework.md +221 -0
  85. package/.sinapse-ai/development/knowledge-base/security-pre-deploy-checklist.md +410 -0
  86. package/.sinapse-ai/development/knowledge-base/software-architecture-patterns.md +299 -0
  87. package/.sinapse-ai/development/knowledge-base/token-economy-guide.md +198 -0
  88. package/.sinapse-ai/development/scripts/populate-entity-registry.js +5 -1
  89. package/.sinapse-ai/development/skills/captcha-handler.md +82 -0
  90. package/.sinapse-ai/development/skills/chrome-brain.md +81 -0
  91. package/.sinapse-ai/development/skills/debug.md +57 -0
  92. package/.sinapse-ai/development/skills/deploy-readiness.md +93 -0
  93. package/.sinapse-ai/development/skills/fast-review.md +69 -0
  94. package/.sinapse-ai/development/skills/model-router.md +92 -0
  95. package/.sinapse-ai/development/skills/research-synthesis.md +77 -0
  96. package/.sinapse-ai/development/skills/security-scan.md +73 -0
  97. package/.sinapse-ai/development/skills/sinapse-methodology.md +175 -0
  98. package/.sinapse-ai/development/skills/story-fast-track.md +71 -0
  99. package/.sinapse-ai/development/skills/verify.md +53 -0
  100. package/.sinapse-ai/development/tasks/dev-develop-story.md +10 -0
  101. package/.sinapse-ai/development/tasks/environment-promotion-pipeline.md +582 -0
  102. package/.sinapse-ai/development/tasks/generate-agent-handoff.md +223 -0
  103. package/.sinapse-ai/development/tasks/infrastructure-assessment.md +432 -0
  104. package/.sinapse-ai/development/tasks/load-testing-setup.md +611 -0
  105. package/.sinapse-ai/development/tasks/observability-blueprint.md +562 -0
  106. package/.sinapse-ai/development/templates/legal/breach-notification-tmpl.md +113 -0
  107. package/.sinapse-ai/development/templates/legal/privacy-policy-tmpl.md +93 -0
  108. package/.sinapse-ai/development/templates/legal/terms-of-service-tmpl.md +85 -0
  109. package/.sinapse-ai/development/templates/service-template/README.md.hbs +159 -159
  110. package/.sinapse-ai/development/templates/service-template/__tests__/index.test.ts.hbs +238 -238
  111. package/.sinapse-ai/development/templates/service-template/client.ts.hbs +404 -404
  112. package/.sinapse-ai/development/templates/service-template/errors.ts.hbs +183 -183
  113. package/.sinapse-ai/development/templates/service-template/index.ts.hbs +121 -121
  114. package/.sinapse-ai/development/templates/service-template/package.json.hbs +88 -88
  115. package/.sinapse-ai/development/templates/service-template/types.ts.hbs +146 -146
  116. package/.sinapse-ai/development/templates/squad/agent-template.md +17 -4
  117. package/.sinapse-ai/development/templates/squad/checklist-template.md +13 -5
  118. package/.sinapse-ai/development/templates/squad/task-template.md +7 -0
  119. package/.sinapse-ai/development/templates/squad/workflow-template.yaml +7 -0
  120. package/.sinapse-ai/development/templates/squad-template/LICENSE +22 -22
  121. package/.sinapse-ai/development/workflows/fast-track.yaml +87 -0
  122. package/.sinapse-ai/development/workflows/story-development-cycle.yaml +40 -1
  123. package/.sinapse-ai/hooks/ids-post-commit.js +22 -0
  124. package/.sinapse-ai/infrastructure/contracts/compatibility/README.md +42 -0
  125. package/.sinapse-ai/infrastructure/contracts/compatibility/sinapse-current.yaml +35 -0
  126. package/.sinapse-ai/infrastructure/scripts/llm-routing/templates/claude-free-tracked.cmd +127 -127
  127. package/.sinapse-ai/infrastructure/scripts/llm-routing/templates/deepseek-proxy.cmd +71 -71
  128. package/.sinapse-ai/infrastructure/scripts/llm-routing/templates/deepseek-usage.cmd +51 -51
  129. package/.sinapse-ai/infrastructure/scripts/pr-review-ai.js +16 -13
  130. package/.sinapse-ai/infrastructure/scripts/setup-project-infra.js +128 -0
  131. package/.sinapse-ai/infrastructure/scripts/test-discovery.js +8 -3
  132. package/.sinapse-ai/infrastructure/scripts/validate-codex-delegation.js +3 -1
  133. package/.sinapse-ai/infrastructure/scripts/validate-manifest-parity.js +380 -0
  134. package/.sinapse-ai/infrastructure/scripts/validate-parity.js +76 -25
  135. package/.sinapse-ai/infrastructure/templates/coderabbit.yaml.template +280 -280
  136. package/.sinapse-ai/infrastructure/templates/config/env.example +16 -0
  137. package/.sinapse-ai/infrastructure/templates/config/gitignore-additions.tmpl +59 -0
  138. package/.sinapse-ai/infrastructure/templates/github/CODEOWNERS.template +12 -0
  139. package/.sinapse-ai/infrastructure/templates/github/PULL_REQUEST_TEMPLATE.md +29 -0
  140. package/.sinapse-ai/infrastructure/templates/github/ci-template.yml +77 -0
  141. package/.sinapse-ai/infrastructure/templates/github/issue-templates/bug_report.md +34 -0
  142. package/.sinapse-ai/infrastructure/templates/github/issue-templates/feature_request.md +19 -0
  143. package/.sinapse-ai/infrastructure/templates/github-workflows/ci.yml.template +170 -170
  144. package/.sinapse-ai/infrastructure/templates/github-workflows/pr-automation.yml.template +331 -331
  145. package/.sinapse-ai/infrastructure/templates/github-workflows/release.yml.template +197 -197
  146. package/.sinapse-ai/infrastructure/templates/gitignore/gitignore-brownfield-merge.tmpl +19 -19
  147. package/.sinapse-ai/infrastructure/templates/gitignore/gitignore-node.tmpl +86 -86
  148. package/.sinapse-ai/infrastructure/templates/gitignore/gitignore-python.tmpl +146 -146
  149. package/.sinapse-ai/infrastructure/templates/gitignore/gitignore-sinapse-base.tmpl +64 -64
  150. package/.sinapse-ai/infrastructure/templates/sinapse-sync.yaml.template +183 -183
  151. package/.sinapse-ai/install-manifest.yaml +333 -162
  152. package/.sinapse-ai/local-config.yaml.template +65 -65
  153. package/.sinapse-ai/monitor/hooks/lib/__init__.py +2 -2
  154. package/.sinapse-ai/monitor/hooks/lib/enrich.py +59 -59
  155. package/.sinapse-ai/monitor/hooks/lib/send_event.py +48 -48
  156. package/.sinapse-ai/monitor/hooks/notification.py +30 -30
  157. package/.sinapse-ai/monitor/hooks/post_tool_use.py +46 -46
  158. package/.sinapse-ai/monitor/hooks/pre_compact.py +30 -30
  159. package/.sinapse-ai/monitor/hooks/pre_tool_use.py +41 -41
  160. package/.sinapse-ai/monitor/hooks/stop.py +30 -30
  161. package/.sinapse-ai/monitor/hooks/subagent_stop.py +30 -30
  162. package/.sinapse-ai/monitor/hooks/user_prompt_submit.py +39 -39
  163. package/.sinapse-ai/product/templates/adr.hbs +126 -126
  164. package/.sinapse-ai/product/templates/dbdr.hbs +242 -242
  165. package/.sinapse-ai/product/templates/epic.hbs +213 -213
  166. package/.sinapse-ai/product/templates/pmdr.hbs +187 -187
  167. package/.sinapse-ai/product/templates/prd-v2.0.hbs +217 -217
  168. package/.sinapse-ai/product/templates/prd.hbs +202 -202
  169. package/.sinapse-ai/product/templates/story-tmpl.yaml +59 -0
  170. package/.sinapse-ai/product/templates/story.hbs +264 -264
  171. package/.sinapse-ai/product/templates/task.hbs +171 -171
  172. package/.sinapse-ai/product/templates/tmpl-comment-on-examples.sql +159 -159
  173. package/.sinapse-ai/product/templates/tmpl-migration-script.sql +92 -92
  174. package/.sinapse-ai/product/templates/tmpl-rls-granular-policies.sql +105 -105
  175. package/.sinapse-ai/product/templates/tmpl-rls-kiss-policy.sql +11 -11
  176. package/.sinapse-ai/product/templates/tmpl-rls-roles.sql +136 -136
  177. package/.sinapse-ai/product/templates/tmpl-rls-simple.sql +78 -78
  178. package/.sinapse-ai/product/templates/tmpl-rls-tenant.sql +153 -153
  179. package/.sinapse-ai/product/templates/tmpl-rollback-script.sql +78 -78
  180. package/.sinapse-ai/product/templates/tmpl-seed-data.sql +141 -141
  181. package/.sinapse-ai/product/templates/tmpl-smoke-test.sql +17 -17
  182. package/.sinapse-ai/product/templates/tmpl-staging-copy-merge.sql +140 -140
  183. package/.sinapse-ai/product/templates/tmpl-stored-proc.sql +141 -141
  184. package/.sinapse-ai/product/templates/tmpl-trigger.sql +153 -153
  185. package/.sinapse-ai/product/templates/tmpl-view-materialized.sql +134 -134
  186. package/.sinapse-ai/product/templates/tmpl-view.sql +178 -178
  187. package/.sinapse-ai/scripts/diagnostics/health-dashboard/package-lock.json +427 -355
  188. package/LICENSE +34 -34
  189. package/README.en.md +167 -20
  190. package/README.md +190 -22
  191. package/bin/cli.js +510 -196
  192. package/bin/postinstall.js +564 -0
  193. package/bin/sinapse-cli +283 -283
  194. package/bin/sinapse-graph.js +9 -0
  195. package/bin/sinapse-init.js +36 -4
  196. package/bin/sinapse-minimal.js +20 -9
  197. package/bin/sinapse.js +202 -122
  198. package/bin/utils/deprecation-warning.js +46 -0
  199. package/bin/utils/pre-push-safety.js +14 -0
  200. package/docs/TELEMETRY.md +131 -0
  201. package/docs/chrome-brain-upgrade-plan.md +624 -0
  202. package/docs/codex-integration-process.md +22 -0
  203. package/docs/codex-parity-program.md +27 -0
  204. package/docs/framework/orqx-plan.md +1 -1
  205. package/docs/ide-integration.md +36 -0
  206. package/docs/installation/chrome-brain.md +17 -7
  207. package/docs/mega-upgrade-orchestration-plan.md +71 -0
  208. package/docs/pt/contributing.md +20 -0
  209. package/docs/research-synthesis-for-upgrade.md +511 -0
  210. package/docs/security-audit-report.md +306 -0
  211. package/package.json +20 -8
  212. package/packages/installer/src/config/configure-environment.js +19 -44
  213. package/packages/installer/src/detection/detect-project-type.js +181 -63
  214. package/packages/installer/src/installer/manifest-signature.js +32 -17
  215. package/packages/installer/src/wizard/i18n.js +12 -0
  216. package/packages/installer/src/wizard/ide-config-generator.js +8 -39
  217. package/packages/installer/src/wizard/index.js +119 -14
  218. package/packages/installer/src/wizard/questions.js +2 -3
  219. package/packages/installer/tests/integration/environment-configuration.test.js +7 -5
  220. package/packages/installer/tests/unit/detection/detect-project-type.test.js +138 -1
  221. package/packages/installer/tests/unit/doctor/doctor-orchestrator.test.js +3 -3
  222. package/packages/sinapse-install/bin/edmcp.js +0 -0
  223. package/packages/sinapse-install/bin/sinapse-install.js +0 -0
  224. package/packages/sinapse-pro-cli/bin/sinapse-pro.js +0 -0
  225. package/scripts/check-markdown-links.py +353 -353
  226. package/scripts/coverage-report-summary.js +169 -0
  227. package/scripts/generate-install-manifest.js +6 -2
  228. package/scripts/release-readiness.js +169 -0
  229. package/scripts/test-install-matrix-local.sh +153 -0
  230. package/scripts/validate-install-docs.js +394 -0
  231. package/scripts/validate-no-external-refs.js +376 -0
  232. package/scripts/validate-squad-orqx.js +302 -0
  233. package/scripts/validate-story-meta.js +263 -0
  234. package/squads/claude-code-mastery/CHANGELOG.md +1 -1
  235. package/squads/claude-code-mastery/README.md +2 -2
  236. package/squads/claude-code-mastery/knowledge-base/claude-code-internals-reference.md +927 -0
  237. package/squads/claude-code-mastery/squad.yaml +1 -1
  238. package/squads/squad-artdir/README.md +90 -0
  239. package/squads/squad-artdir/agents/accessibility-guardian.md +184 -0
  240. package/squads/squad-artdir/agents/artdir-orqx.md +145 -0
  241. package/squads/squad-artdir/agents/color-psychologist.md +166 -0
  242. package/squads/squad-artdir/agents/cro-persuasion.md +161 -0
  243. package/squads/squad-artdir/agents/design-system-architect.md +100 -0
  244. package/squads/squad-artdir/agents/ia-architect.md +169 -0
  245. package/squads/squad-artdir/agents/interaction-designer.md +162 -0
  246. package/squads/squad-artdir/agents/layout-engineer.md +163 -0
  247. package/squads/squad-artdir/agents/motion-architect.md +185 -0
  248. package/squads/squad-artdir/agents/platform-aesthetic-director.md +84 -0
  249. package/squads/squad-artdir/agents/premium-packaging-strategist.md +107 -0
  250. package/squads/squad-artdir/agents/product-surface-director.md +86 -0
  251. package/squads/squad-artdir/agents/type-systemist.md +138 -0
  252. package/squads/squad-artdir/agents/visual-strategist.md +127 -0
  253. package/squads/squad-artdir/checklists/seven-pillars-validation-checklist.md +172 -0
  254. package/squads/squad-artdir/knowledge-base/case-nyo-ia-reference.md +289 -0
  255. package/squads/squad-artdir/knowledge-base/deliverables-templates.md +457 -0
  256. package/squads/squad-artdir/knowledge-base/motion-technique-catalog.md +247 -0
  257. package/squads/squad-artdir/knowledge-base/premium-packaging-principles.md +133 -0
  258. package/squads/squad-artdir/knowledge-base/psychological-toolkit.md +229 -0
  259. package/squads/squad-artdir/knowledge-base/saas-art-direction-canon.md +242 -0
  260. package/squads/squad-artdir/knowledge-base/seven-pillars-framework.md +289 -0
  261. package/squads/squad-artdir/knowledge-base/ten-pillars-framework.md +221 -0
  262. package/squads/squad-artdir/package.json +20 -0
  263. package/squads/squad-artdir/squad.yaml +271 -0
  264. package/squads/squad-artdir/tasks/audit-conversion.md +97 -0
  265. package/squads/squad-artdir/tasks/audit-drift-multi-surface.md +55 -0
  266. package/squads/squad-artdir/tasks/consult-saas-canon.md +54 -0
  267. package/squads/squad-artdir/tasks/create-art-direction-brief.md +110 -0
  268. package/squads/squad-artdir/tasks/create-premium-packaging-brief.md +61 -0
  269. package/squads/squad-artdir/tasks/create-wireflow.md +84 -0
  270. package/squads/squad-artdir/tasks/design-color-system.md +81 -0
  271. package/squads/squad-artdir/tasks/design-product-surface.md +60 -0
  272. package/squads/squad-artdir/tasks/design-token-system.md +58 -0
  273. package/squads/squad-artdir/tasks/diagnose-visual-language.md +92 -0
  274. package/squads/squad-artdir/tasks/first-5-minutes-choreography.md +65 -0
  275. package/squads/squad-artdir/tasks/specify-motion-system.md +84 -0
  276. package/squads/squad-artdir/tasks/validate-against-pillars.md +143 -0
  277. package/squads/squad-artdir/templates/art-direction-brief-template.md +215 -0
  278. package/squads/squad-artdir/workflows/conversion-audit-cycle.yaml +78 -0
  279. package/squads/squad-artdir/workflows/full-art-direction-cycle.yaml +98 -0
  280. package/squads/squad-artdir/workflows/saas-platform-art-direction-cycle.yaml +174 -0
  281. package/squads/squad-brand/knowledge-base/ai-visual-generation-canon.md +234 -0
  282. package/squads/squad-brand/knowledge-base/archetype-brand-mapping.md +12 -1
  283. package/squads/squad-brand/knowledge-base/brand-activism-cultural-branding.md +216 -0
  284. package/squads/squad-brand/knowledge-base/brand-audit-criteria.md +58 -0
  285. package/squads/squad-brand/knowledge-base/brand-digital-strategy.md +188 -0
  286. package/squads/squad-brand/knowledge-base/brand-legal-ip.md +222 -0
  287. package/squads/squad-brand/knowledge-base/brand-naming-framework.md +163 -0
  288. package/squads/squad-brand/knowledge-base/branding-master-reference.md +1001 -0
  289. package/squads/squad-brand/knowledge-base/color-psychology.md +25 -12
  290. package/squads/squad-brand/knowledge-base/employer-personal-branding.md +206 -0
  291. package/squads/squad-brand/knowledge-base/routing-catalog.md +34 -0
  292. package/squads/squad-brand/knowledge-base/sonic-branding-principles.md +6 -1
  293. package/squads/squad-brand/knowledge-base/typography-personality.md +34 -0
  294. package/squads/squad-brand/squad.yaml +20 -6
  295. package/squads/squad-claude/knowledge-base/context-window-optimization.md +334 -0
  296. package/squads/squad-claude/knowledge-base/knowledge-architecture-reference.md +403 -0
  297. package/squads/squad-claude/knowledge-base/memory-systems-reference.md +412 -0
  298. package/squads/squad-claude/knowledge-base/obsidian-claude-integration.md +423 -0
  299. package/squads/squad-claude/knowledge-base/retrieval-augmented-generation.md +320 -0
  300. package/squads/squad-claude/knowledge-base/skill-creation-patterns.md +380 -0
  301. package/squads/squad-claude/knowledge-base/swarm-orchestration-patterns.md +411 -0
  302. package/squads/squad-cloning/knowledge-base/clone-quality-assurance.md +211 -0
  303. package/squads/squad-cloning/knowledge-base/confidence-scoring.md +51 -0
  304. package/squads/squad-cloning/knowledge-base/cross-squad-deployment.md +47 -0
  305. package/squads/squad-cloning/knowledge-base/ethical-guidelines.md +237 -0
  306. package/squads/squad-cloning/knowledge-base/knowledge-graph-for-clones.md +295 -0
  307. package/squads/squad-cloning/knowledge-base/memory-architecture-for-clones.md +229 -0
  308. package/squads/squad-cloning/knowledge-base/multi-agent-deployment-patterns.md +320 -0
  309. package/squads/squad-cloning/knowledge-base/skill-standard-for-clones.md +262 -0
  310. package/squads/squad-cloning/knowledge-base/sop-extraction-guide.md +243 -0
  311. package/squads/squad-commercial/knowledge-base/account-based-selling.md +206 -0
  312. package/squads/squad-commercial/knowledge-base/ai-as-competitive-infrastructure.md +14 -0
  313. package/squads/squad-commercial/knowledge-base/ai-in-sales.md +199 -0
  314. package/squads/squad-commercial/knowledge-base/brazilian-sales-context.md +195 -0
  315. package/squads/squad-commercial/knowledge-base/customer-success-operations.md +83 -2
  316. package/squads/squad-commercial/knowledge-base/prospecting-pipeline-generation.md +69 -0
  317. package/squads/squad-commercial/knowledge-base/sales-enablement-playbook.md +260 -0
  318. package/squads/squad-commercial/knowledge-base/sales-methodology-comparison.md +185 -0
  319. package/squads/squad-commercial/knowledge-base/sales-revenue-master-reference.md +1123 -0
  320. package/squads/squad-content/knowledge-base/ai-native-content-loop.md +220 -0
  321. package/squads/squad-content/knowledge-base/brazilian-content-context.md +176 -0
  322. package/squads/squad-content/knowledge-base/competitor-analysis-methods.md +40 -1
  323. package/squads/squad-content/knowledge-base/content-architecture-taxonomy.md +206 -0
  324. package/squads/squad-content/knowledge-base/content-formats-encyclopedia.md +58 -1
  325. package/squads/squad-content/knowledge-base/content-references-bibliography.md +130 -0
  326. package/squads/squad-content/knowledge-base/content-strategy-master-reference.md +1097 -0
  327. package/squads/squad-content/knowledge-base/content-tech-stack.md +150 -0
  328. package/squads/squad-content/knowledge-base/copywriting-formulas-library.md +188 -0
  329. package/squads/squad-content/knowledge-base/email-newsletter-strategy.md +161 -0
  330. package/squads/squad-content/knowledge-base/platform-algorithm-intelligence.md +86 -1
  331. package/squads/squad-content/knowledge-base/signal-intelligence-v2.md +234 -0
  332. package/squads/squad-content/knowledge-base/social-algorithms-master-reference.md +1007 -0
  333. package/squads/squad-content/knowledge-base/task-ownership-map.md +235 -0
  334. package/squads/squad-content/knowledge-base/video-audio-content-playbook.md +218 -0
  335. package/squads/squad-content/squad.yaml +187 -27
  336. package/squads/squad-copy/knowledge-base/ai-copy-human-loop-canon.md +235 -0
  337. package/squads/squad-copy/knowledge-base/ai-copy-production.md +254 -0
  338. package/squads/squad-copy/knowledge-base/brazilian-copywriting-context.md +242 -0
  339. package/squads/squad-copy/knowledge-base/email-copywriting-system.md +299 -0
  340. package/squads/squad-copy/knowledge-base/landing-page-copy-architecture.md +267 -0
  341. package/squads/squad-copy/knowledge-base/power-words-catalog.md +205 -0
  342. package/squads/squad-copy/knowledge-base/seo-copywriting.md +255 -0
  343. package/squads/squad-copy/knowledge-base/video-script-copywriting.md +239 -0
  344. package/squads/squad-copy/squad.yaml +19 -4
  345. package/squads/squad-council/knowledge-base/brand-strategy-models.md +193 -0
  346. package/squads/squad-council/knowledge-base/growth-strategy-models.md +267 -0
  347. package/squads/squad-council/knowledge-base/innovation-disruption-frameworks.md +193 -0
  348. package/squads/squad-council/knowledge-base/market-analysis-frameworks.md +240 -0
  349. package/squads/squad-council/knowledge-base/organizational-leadership-models.md +212 -0
  350. package/squads/squad-council/knowledge-base/sales-strategy-models.md +215 -0
  351. package/squads/squad-courses/knowledge-base/course-launch-strategy.md +251 -0
  352. package/squads/squad-courses/knowledge-base/domain-advocacia-curriculum.md +385 -0
  353. package/squads/squad-courses/knowledge-base/domain-contabilidade-curriculum.md +266 -0
  354. package/squads/squad-courses/knowledge-base/platform-comparison.md +68 -0
  355. package/squads/squad-courses/knowledge-base/video-production-guide.md +70 -0
  356. package/squads/squad-cybersecurity/knowledge-base/cloud-security-reference.md +363 -0
  357. package/squads/squad-cybersecurity/knowledge-base/compliance-frameworks.md +273 -0
  358. package/squads/squad-cybersecurity/knowledge-base/database-security.md +438 -0
  359. package/squads/squad-cybersecurity/knowledge-base/incident-response-playbook.md +420 -0
  360. package/squads/squad-cybersecurity/knowledge-base/network-security-reference.md +477 -0
  361. package/squads/squad-cybersecurity/knowledge-base/penetration-testing-methodology.md +350 -0
  362. package/squads/squad-cybersecurity/knowledge-base/vulnerability-management.md +349 -0
  363. package/squads/squad-design/knowledge-base/brazilian-design-context.md +223 -0
  364. package/squads/squad-design/knowledge-base/component-api-patterns.md +208 -4
  365. package/squads/squad-design/knowledge-base/cross-surface-token-canon.md +209 -0
  366. package/squads/squad-design/knowledge-base/design-system-master-reference.md +1302 -0
  367. package/squads/squad-design/knowledge-base/design-systems-frameworks.md +91 -1
  368. package/squads/squad-design/knowledge-base/responsive-modern-css.md +96 -4
  369. package/squads/squad-design/knowledge-base/wcag-aria-reference.md +117 -5
  370. package/squads/squad-design/knowledge-base/web-performance-reference.md +127 -4
  371. package/squads/squad-design/squad.yaml +19 -4
  372. package/squads/squad-finance/knowledge-base/brazilian-taxation.md +263 -0
  373. package/squads/squad-finance/knowledge-base/contabilidade-master-reference.md +998 -0
  374. package/squads/squad-finance/knowledge-base/finance-master-reference.md +946 -0
  375. package/squads/squad-finance/knowledge-base/financial-reporting-analysis.md +316 -0
  376. package/squads/squad-finance/knowledge-base/fintech-brazilian-context.md +242 -0
  377. package/squads/squad-finance/knowledge-base/fpa-planning-frameworks.md +286 -0
  378. package/squads/squad-finance/knowledge-base/ma-and-transactions.md +285 -0
  379. package/squads/squad-finance/knowledge-base/risk-management.md +233 -0
  380. package/squads/squad-finance/knowledge-base/startups-venture-capital.md +337 -0
  381. package/squads/squad-growth/knowledge-base/ai-growth-playbook.md +216 -0
  382. package/squads/squad-growth/knowledge-base/attribution-models.md +78 -0
  383. package/squads/squad-growth/knowledge-base/brazilian-growth-context.md +208 -0
  384. package/squads/squad-growth/knowledge-base/community-led-growth.md +175 -0
  385. package/squads/squad-growth/knowledge-base/content-marketing-flywheel.md +190 -0
  386. package/squads/squad-growth/knowledge-base/email-lifecycle-framework.md +192 -0
  387. package/squads/squad-growth/knowledge-base/growth-frameworks-catalog.md +82 -0
  388. package/squads/squad-growth/knowledge-base/growth-master-reference.md +1168 -0
  389. package/squads/squad-growth/knowledge-base/routing-catalog.md +53 -11
  390. package/squads/squad-paidmedia/knowledge-base/audiences-segmentation-deep.md +285 -0
  391. package/squads/squad-paidmedia/knowledge-base/creative-strategy-deep.md +294 -0
  392. package/squads/squad-paidmedia/knowledge-base/google-ads-account-architecture.md +87 -0
  393. package/squads/squad-paidmedia/knowledge-base/meta-ads-campaign-architecture.md +76 -0
  394. package/squads/squad-paidmedia/knowledge-base/paid-media-metrics-reference.md +117 -0
  395. package/squads/squad-paidmedia/knowledge-base/paid-traffic-master-reference.md +1308 -0
  396. package/squads/squad-paidmedia/knowledge-base/routing-catalog.md +95 -18
  397. package/squads/squad-paidmedia/knowledge-base/traffic-masters-frameworks.md +71 -0
  398. package/squads/squad-product/knowledge-base/brazilian-product-context.md +284 -0
  399. package/squads/squad-product/knowledge-base/discovery-methodology-playbook.md +141 -0
  400. package/squads/squad-product/knowledge-base/pm-frameworks-reference.md +125 -9
  401. package/squads/squad-product/knowledge-base/product-analytics-formulas.md +72 -0
  402. package/squads/squad-product/knowledge-base/product-led-growth-reference.md +155 -13
  403. package/squads/squad-product/knowledge-base/product-market-fit-framework.md +222 -0
  404. package/squads/squad-product/knowledge-base/routing-catalog.md +32 -0
  405. package/squads/squad-research/knowledge-base/agentic-second-brain-reference.md +591 -0
  406. package/squads/squad-research/knowledge-base/ai-augmented-research.md +212 -0
  407. package/squads/squad-research/knowledge-base/brazilian-market-research-sources.md +197 -0
  408. package/squads/squad-research/knowledge-base/community-platforms-reference.md +786 -0
  409. package/squads/squad-research/knowledge-base/community-research-methods.md +194 -0
  410. package/squads/squad-research/knowledge-base/mixed-methods-research-design.md +168 -0
  411. package/squads/squad-research/knowledge-base/network-effects-analysis.md +192 -0
  412. package/squads/squad-research/knowledge-base/qualitative-research-deep-methods.md +202 -0
  413. package/squads/squad-research/knowledge-base/quantitative-research-methods.md +208 -0
  414. package/squads/squad-research/knowledge-base/research-frameworks-encyclopedia.md +40 -0
  415. package/squads/squad-research/knowledge-base/research-synthesis-frameworks.md +223 -0
  416. package/squads/squad-storytelling/knowledge-base/brand-mythology-framework.md +236 -0
  417. package/squads/squad-storytelling/knowledge-base/brazilian-storytelling-context.md +237 -0
  418. package/squads/squad-storytelling/knowledge-base/data-storytelling.md +232 -0
  419. package/squads/squad-storytelling/knowledge-base/improv-storytelling.md +226 -0
  420. package/squads/squad-storytelling/knowledge-base/persuasion-narrative-techniques.md +269 -0
  421. package/squads/squad-storytelling/knowledge-base/social-movement-narratives.md +191 -0
  422. package/squads/squad-storytelling/knowledge-base/video-storytelling.md +252 -0
  423. package/.sinapse-ai/core/registry/service-registry.json +0 -6346
  424. package/.sinapse-ai/data/registry-update-log.jsonl +0 -1307
  425. package/.sinapse-ai/manifests/agents.csv +0 -29
  426. package/.sinapse-ai/manifests/tasks.csv +0 -204
  427. package/.sinapse-ai/manifests/workers.csv +0 -196
  428. package/squads/claude-code-mastery/data/swarm-orchestration-patterns.yaml +0 -378
  429. package/squads/squad-animations/knowledge-base/framer-motion-complete-reference.md +0 -710
  430. package/squads/squad-animations/knowledge-base/web-animations-api-view-transitions.md +0 -478
  431. package/squads/squad-growth/tasks/calculate-sample-size.md +0 -121
  432. package/squads/squad-paidmedia/tasks/calculate-sample-size.md +0 -57
@@ -0,0 +1,564 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * SINAPSE Postinstall Orchestrator
5
+ * @story A.1 - Postinstall Script & Runtime Dirs
6
+ * @story B.1 - Minimalist Install Output Design
7
+ *
8
+ * Runs automatically after `npm install` (global or local) unless:
9
+ * - SINAPSE_SKIP_POSTINSTALL=1 is set (explicit opt-out)
10
+ * - A known CI env var is present (GITHUB_ACTIONS, CI=true, etc.)
11
+ * - npm was invoked with --ignore-scripts (native npm behavior, nothing to do here)
12
+ *
13
+ * Execution order (see Story A.1 AC 4):
14
+ * 1. env guard (SINAPSE_SKIP_POSTINSTALL / CI)
15
+ * 2. npm run sync:ide -- --ide claude-code
16
+ * 3. mkdir -p .sinapse/handoffs
17
+ * 4. mkdir -p .sinapse/scratchpad
18
+ * 5. sinapse doctor --quiet (exit code 2 = abort, 0/1 = OK)
19
+ * 6. Minimalist summary (Story B.1): 6-8 lines, friendly PT-BR copy.
20
+ *
21
+ * Output modes (Story B.1):
22
+ * default ≤ 8 lines. Minimal, non-technical, Portuguese.
23
+ * --verbose Full legacy detailed output (step lines, doctor details).
24
+ * --json Single JSON object: { status, version, agents, squads, warnings, errors }.
25
+ *
26
+ * Exit codes:
27
+ * 0 success OR non-critical warning (framework operational)
28
+ * 2 critical failure (sync:ide failed, or doctor exit >= 2)
29
+ *
30
+ * Note: exit 1 is NOT used. npm treats any non-zero postinstall exit as
31
+ * `command failed`, which scares users when the install is actually operational.
32
+ * Partial installs (doctor WARN, permission fallback) print the "Instalação
33
+ * parcial" message and exit 0 so `npm install` completes cleanly. Callers that
34
+ * want strict behavior should parse `--json` output and check `status: warn`.
35
+ */
36
+
37
+ 'use strict';
38
+
39
+ const fs = require('fs');
40
+ const os = require('os');
41
+ const path = require('path');
42
+ const { spawnSync } = require('child_process');
43
+
44
+ const PROJECT_ROOT = path.resolve(__dirname, '..');
45
+
46
+ // ANSI colors (intentionally minimal — no chalk dep at postinstall time)
47
+ const c = {
48
+ reset: '\x1b[0m',
49
+ dim: '\x1b[2m',
50
+ bold: '\x1b[1m',
51
+ red: '\x1b[31m',
52
+ green: '\x1b[32m',
53
+ yellow: '\x1b[33m',
54
+ cyan: '\x1b[36m',
55
+ };
56
+
57
+ // ─── Flag detection ──────────────────────────────────────────────────────────
58
+ // Postinstall runs under npm, so CLI args come via:
59
+ // - process.argv (rare: node bin/postinstall.js --verbose)
60
+ // - npm_config_loglevel (npm install --verbose sets this to "verbose")
61
+ // - env opt-ins for testing: SINAPSE_VERBOSE=1, SINAPSE_JSON=1
62
+ //
63
+ // In --json mode ALL human-readable output is suppressed and a single JSON
64
+ // object is emitted on exit. In --verbose mode the legacy detailed lines are
65
+ // shown. Default mode prints only the 6-8 line minimalist summary.
66
+
67
+ function detectFlags(argv = process.argv.slice(2), env = process.env) {
68
+ const has = (name) => argv.includes(name);
69
+ const npmLogLevel = (env.npm_config_loglevel || '').toLowerCase();
70
+ const verbose =
71
+ has('--verbose')
72
+ || has('-v')
73
+ || env.SINAPSE_VERBOSE === '1'
74
+ || npmLogLevel === 'verbose'
75
+ || npmLogLevel === 'silly';
76
+ const json = has('--json') || env.SINAPSE_JSON === '1';
77
+ const quiet = has('--quiet') || has('-q') || env.SINAPSE_QUIET === '1';
78
+ return { verbose, json, quiet };
79
+ }
80
+
81
+ // ─── Dynamic counts (Story B.1 AC 1, AC 7) ───────────────────────────────────
82
+ // Source of truth is the real filesystem, not the manifest (manifest can drift
83
+ // — see Story A.4 G5). We count the actual agent definitions and squad dirs.
84
+
85
+ /**
86
+ * Count real agent definitions under .sinapse-ai/development/agents/*.md.
87
+ * Fails open (returns 0) on any filesystem error.
88
+ */
89
+ function countAgents() {
90
+ try {
91
+ const dir = path.join(PROJECT_ROOT, '.sinapse-ai', 'development', 'agents');
92
+ if (!fs.existsSync(dir)) return 0;
93
+ return fs
94
+ .readdirSync(dir, { withFileTypes: true })
95
+ .filter((d) => d.isFile() && d.name.endsWith('.md') && !d.name.startsWith('_'))
96
+ .length;
97
+ } catch {
98
+ return 0;
99
+ }
100
+ }
101
+
102
+ /**
103
+ * Count real squad directories under squads/* (skip dotfiles and .gitkeep).
104
+ * A squad is any subdirectory of squads/.
105
+ */
106
+ function countSquads() {
107
+ try {
108
+ const dir = path.join(PROJECT_ROOT, 'squads');
109
+ if (!fs.existsSync(dir)) return 0;
110
+ return fs
111
+ .readdirSync(dir, { withFileTypes: true })
112
+ .filter((d) => d.isDirectory() && !d.name.startsWith('.'))
113
+ .length;
114
+ } catch {
115
+ return 0;
116
+ }
117
+ }
118
+
119
+ /**
120
+ * Read the installed package version. Fails open with "unknown".
121
+ */
122
+ function readVersion() {
123
+ try {
124
+ return require(path.join(PROJECT_ROOT, 'package.json')).version || 'unknown';
125
+ } catch {
126
+ return 'unknown';
127
+ }
128
+ }
129
+
130
+ // ─── First-run detection (Story B.1 AC 5) ────────────────────────────────────
131
+ // The ~/.sinapse/.first-run-done flag is created on successful first install.
132
+ // On subsequent installs the welcome line is suppressed. Flag creation failures
133
+ // are non-fatal (welcome shows again on next install — acceptable degradation).
134
+
135
+ // NOTE: resolved dynamically so tests can redirect HOME/USERPROFILE between runs.
136
+ function sinapseHome() {
137
+ return path.join(os.homedir(), '.sinapse');
138
+ }
139
+ function firstRunFlag() {
140
+ return path.join(sinapseHome(), '.first-run-done');
141
+ }
142
+
143
+ function isFirstRun() {
144
+ try {
145
+ return !fs.existsSync(firstRunFlag());
146
+ } catch {
147
+ return false;
148
+ }
149
+ }
150
+
151
+ function markFirstRunDone() {
152
+ try {
153
+ const home = sinapseHome();
154
+ if (!fs.existsSync(home)) {
155
+ fs.mkdirSync(home, { recursive: true });
156
+ }
157
+ const flag = firstRunFlag();
158
+ if (!fs.existsSync(flag)) {
159
+ fs.writeFileSync(flag, `${new Date().toISOString()}\n`, 'utf8');
160
+ }
161
+ return true;
162
+ } catch {
163
+ return false; // silent — welcome will show again next install
164
+ }
165
+ }
166
+
167
+ // ─── Output sinks (flag-aware) ───────────────────────────────────────────────
168
+ // In --json mode, every human-readable call accumulates into jsonState instead
169
+ // of writing to stdout. In --verbose mode, step lines are shown. In default
170
+ // mode, only the final summary is printed.
171
+
172
+ const jsonState = {
173
+ status: 'success',
174
+ version: null,
175
+ agents: 0,
176
+ squads: 0,
177
+ warnings: [],
178
+ errors: [],
179
+ };
180
+
181
+ let FLAGS = { verbose: false, json: false, quiet: false };
182
+
183
+ function plain(s) {
184
+ // Strip ANSI for --json mode (we still want semantic text, no escape codes).
185
+ return String(s).replace(/\x1b\[[0-9;]*m/g, ''); // eslint-disable-line no-control-regex
186
+ }
187
+
188
+ function verboseLog(msg) {
189
+ if (FLAGS.json) return;
190
+ if (!FLAGS.verbose) return;
191
+ process.stdout.write(`${msg}\n`);
192
+ }
193
+
194
+ function warn(msg) {
195
+ if (FLAGS.json) {
196
+ jsonState.warnings.push(plain(msg));
197
+ if (jsonState.status === 'success') jsonState.status = 'warn';
198
+ return;
199
+ }
200
+ if (FLAGS.verbose) {
201
+ process.stdout.write(`${c.yellow}${msg}${c.reset}\n`);
202
+ }
203
+ }
204
+
205
+ function error(msg) {
206
+ if (FLAGS.json) {
207
+ jsonState.errors.push(plain(msg));
208
+ jsonState.status = 'error';
209
+ return;
210
+ }
211
+ // Errors are always shown (even in default minimal mode) because they
212
+ // indicate the install is broken and the user needs to know.
213
+ process.stderr.write(`${c.red}${msg}${c.reset}\n`);
214
+ }
215
+
216
+ /**
217
+ * Return true if we should skip postinstall entirely.
218
+ * Respects SINAPSE_SKIP_POSTINSTALL=1 and common CI signals.
219
+ */
220
+ function shouldSkip() {
221
+ if (process.env.SINAPSE_SKIP_POSTINSTALL === '1') {
222
+ return { skip: true, reason: 'SINAPSE_SKIP_POSTINSTALL=1' };
223
+ }
224
+ // Auto-skip on CI unless user explicitly opts in with SINAPSE_FORCE_POSTINSTALL=1.
225
+ // Rationale (Story A.1 Risks): CI pipelines should not have runtime side effects.
226
+ if (process.env.SINAPSE_FORCE_POSTINSTALL === '1') {
227
+ return { skip: false };
228
+ }
229
+ const ciSignals = ['CI', 'GITHUB_ACTIONS', 'GITLAB_CI', 'CIRCLECI', 'TRAVIS', 'JENKINS_URL'];
230
+ for (const key of ciSignals) {
231
+ if (process.env[key]) {
232
+ return { skip: true, reason: `CI detected (${key})` };
233
+ }
234
+ }
235
+ return { skip: false };
236
+ }
237
+
238
+ /**
239
+ * Ensure the project root looks like a real SINAPSE install before we touch anything.
240
+ * Returns false if we should bail out silently (e.g. running from a partial copy).
241
+ */
242
+ function isValidInstallRoot() {
243
+ try {
244
+ return fs.existsSync(path.join(PROJECT_ROOT, '.sinapse-ai'));
245
+ } catch {
246
+ return false;
247
+ }
248
+ }
249
+
250
+ /**
251
+ * Spawn a child process and return the raw result. Does NOT throw on non-zero exit.
252
+ * In --json/default mode, child stdio is piped (swallowed) to preserve the minimal
253
+ * output contract. In --verbose mode it is inherited so users see full details.
254
+ */
255
+ function run(command, args, opts = {}) {
256
+ const stdio = FLAGS.verbose ? 'inherit' : 'pipe';
257
+ const result = spawnSync(command, args, {
258
+ cwd: PROJECT_ROOT,
259
+ stdio,
260
+ shell: process.platform === 'win32',
261
+ ...opts,
262
+ });
263
+ return result;
264
+ }
265
+
266
+ /**
267
+ * Step 1: sync:ide --ide claude-code.
268
+ * Copies agent definitions to .claude/commands/SINAPSE/agents/ so Claude Code can resolve @developer, etc.
269
+ */
270
+ function stepSyncIde() {
271
+ verboseLog(`${c.cyan}›${c.reset} Sincronizando agents para Claude Code...`);
272
+ const result = run('npm', ['run', 'sync:ide', '--silent', '--', '--ide', 'claude-code', '--quiet']);
273
+ if (result.error) {
274
+ error(`sync:ide falhou ao iniciar: ${result.error.message}`);
275
+ return { ok: false, critical: true };
276
+ }
277
+ if (result.status !== 0) {
278
+ error(`sync:ide saiu com código ${result.status}`);
279
+ return { ok: false, critical: true };
280
+ }
281
+ verboseLog(`${c.green}✓${c.reset} Agents sincronizados`);
282
+ return { ok: true, critical: false };
283
+ }
284
+
285
+ /**
286
+ * Step 2 + 3: create runtime directories (.sinapse/handoffs and .sinapse/scratchpad).
287
+ * Idempotent — no-op if directories already exist.
288
+ * Permission errors are non-critical (warn, continue).
289
+ */
290
+ function stepCreateRuntimeDirs() {
291
+ const dirs = [
292
+ path.join(PROJECT_ROOT, '.sinapse', 'handoffs'),
293
+ path.join(PROJECT_ROOT, '.sinapse', 'scratchpad'),
294
+ ];
295
+ let softFailures = 0;
296
+ for (const dir of dirs) {
297
+ try {
298
+ fs.mkdirSync(dir, { recursive: true });
299
+ } catch (err) {
300
+ if (err.code === 'EACCES' || err.code === 'EPERM') {
301
+ warn(`Sem permissão para criar ${path.relative(PROJECT_ROOT, dir)} — SINAPSE vai tentar criar no primeiro uso.`);
302
+ softFailures += 1;
303
+ continue;
304
+ }
305
+ error(`Falha ao criar ${dir}: ${err.message}`);
306
+ return { ok: false, critical: true };
307
+ }
308
+ }
309
+ if (softFailures === 0) {
310
+ verboseLog(`${c.green}✓${c.reset} Diretórios de runtime prontos (.sinapse/handoffs, .sinapse/scratchpad)`);
311
+ }
312
+ return { ok: softFailures === 0, critical: false };
313
+ }
314
+
315
+ /**
316
+ * Step 4: sinapse doctor --quiet.
317
+ * Exit code semantics (per Story A.1 Dev Notes + Story A.3):
318
+ * 0 = PASS (ok)
319
+ * 1 = WARN only (ok, no abort)
320
+ * 2 = FAIL (critical — abort postinstall with non-zero exit)
321
+ */
322
+ function stepDoctor() {
323
+ verboseLog(`${c.cyan}›${c.reset} Verificando saúde da instalação...`);
324
+ const doctorBin = path.join(PROJECT_ROOT, 'bin', 'sinapse.js');
325
+ if (!fs.existsSync(doctorBin)) {
326
+ warn('bin/sinapse.js não encontrado — pulando doctor check');
327
+ return { ok: true, critical: false };
328
+ }
329
+ const result = run(process.execPath, [doctorBin, 'doctor', '--quiet']);
330
+ if (result.error) {
331
+ warn(`doctor falhou ao iniciar: ${result.error.message} — não-crítico`);
332
+ return { ok: false, critical: false };
333
+ }
334
+ if (result.status === 0) {
335
+ verboseLog(`${c.green}✓${c.reset} Saúde da instalação: PASS`);
336
+ return { ok: true, critical: false };
337
+ }
338
+ if (result.status === 1) {
339
+ warn("Saúde da instalação: WARN — rode 'sinapse doctor' para detalhes");
340
+ return { ok: false, critical: false };
341
+ }
342
+ // Exit code 2 or anything higher is treated as critical per Story A.1 Dev Notes.
343
+ error(`Saúde da instalação: FAIL (exit ${result.status}) — rode 'sinapse doctor' para detalhes`);
344
+ return { ok: false, critical: true };
345
+ }
346
+
347
+ /**
348
+ * Story B.1 — render the minimalist summary.
349
+ *
350
+ * Default output (≤ 8 lines — the blank lines count):
351
+ *
352
+ * [Bem-vindo ao SINAPSE! 🎉] ← only on first run
353
+ * SINAPSE {version} instalado ✓
354
+ * {N} agents · {M} squads prontos
355
+ *
356
+ * Teste: sinapse doctor
357
+ * Começar: @sinapse no Claude Code
358
+ *
359
+ * Docs: https://sinapse.club
360
+ *
361
+ * In --verbose mode the caller has already printed detailed step output, so we
362
+ * still render the minimal summary at the end as a recap.
363
+ *
364
+ * In --json mode this function populates jsonState and is a no-op on stdout;
365
+ * the caller will flush jsonState at process exit.
366
+ *
367
+ * @param {{ firstRun?: boolean }} [opts]
368
+ * @returns {{ lineCount: number, lines: string[] }}
369
+ */
370
+ function renderFinalSummary(opts = {}) {
371
+ const version = readVersion();
372
+ const agents = countAgents();
373
+ const squads = countSquads();
374
+ const firstRun = Boolean(opts.firstRun);
375
+
376
+ // Populate JSON state even if we'll never print human output.
377
+ jsonState.version = version;
378
+ jsonState.agents = agents;
379
+ jsonState.squads = squads;
380
+ jsonState.firstRun = firstRun;
381
+
382
+ if (FLAGS.json) {
383
+ return { lineCount: 0, lines: [] };
384
+ }
385
+ if (FLAGS.quiet) {
386
+ return { lineCount: 0, lines: [] };
387
+ }
388
+
389
+ // Pluralization: Portuguese "agent(s)" / "squad(s)". 1 is singular.
390
+ const agentsWord = agents === 1 ? 'agent' : 'agents';
391
+ const squadsWord = squads === 1 ? 'squad' : 'squads';
392
+ const prontosWord = squads === 1 && agents === 1 ? 'pronto' : 'prontos';
393
+
394
+ const lines = [];
395
+ if (firstRun) {
396
+ lines.push(`${c.bold}Bem-vindo ao SINAPSE!${c.reset} 🎉`);
397
+ }
398
+ lines.push(`${c.bold}SINAPSE ${version}${c.reset} instalado ${c.green}✓${c.reset}`);
399
+ lines.push(`${c.dim}${agents} ${agentsWord} · ${squads} ${squadsWord} ${prontosWord}${c.reset}`);
400
+ lines.push('');
401
+ lines.push(`Teste: ${c.cyan}sinapse doctor${c.reset}`);
402
+ lines.push(`Começar: ${c.cyan}@sinapse${c.reset} no Claude Code`);
403
+ lines.push('');
404
+ lines.push(`Docs: ${c.dim}https://sinapse.club${c.reset}`);
405
+
406
+ for (const line of lines) {
407
+ process.stdout.write(`${line}\n`);
408
+ }
409
+
410
+ return { lineCount: lines.length, lines };
411
+ }
412
+
413
+ /**
414
+ * Story C.1 AC 3 — Partial install user message.
415
+ *
416
+ * When postinstall exits with code 1 (warnings) or 2 (failure), show a single
417
+ * non-technical one-liner so the user knows SOMETHING is off and where to look.
418
+ * Suppressed in --quiet and --json modes (exit code alone signals the failure).
419
+ */
420
+ function renderPartialInstallMessage() {
421
+ if (FLAGS.json) return;
422
+ if (FLAGS.quiet) return;
423
+ const msg = `${c.yellow}Instalação parcial — rode 'sinapse doctor' pra ver o quê${c.reset}`;
424
+ try {
425
+ process.stdout.write(`${msg}\n`);
426
+ } catch {
427
+ /* ignore */
428
+ }
429
+ }
430
+
431
+ /**
432
+ * Flush the JSON state (single-object output). Safe to call multiple times.
433
+ */
434
+ let _jsonFlushed = false;
435
+ function flushJson() {
436
+ if (!FLAGS.json || _jsonFlushed) return;
437
+ _jsonFlushed = true;
438
+ try {
439
+ process.stdout.write(`${JSON.stringify(jsonState)}\n`);
440
+ } catch {
441
+ /* ignore */
442
+ }
443
+ }
444
+
445
+ function main(argvOverride) {
446
+ // Reset module-level state so repeated calls (from tests) are isolated.
447
+ FLAGS = detectFlags(argvOverride || process.argv.slice(2));
448
+ jsonState.status = 'success';
449
+ jsonState.version = null;
450
+ jsonState.agents = 0;
451
+ jsonState.squads = 0;
452
+ jsonState.warnings = [];
453
+ jsonState.errors = [];
454
+ jsonState.firstRun = false;
455
+ _jsonFlushed = false;
456
+
457
+ const skip = shouldSkip();
458
+ if (skip.skip) {
459
+ verboseLog(`Postinstall skipped (${skip.reason})`);
460
+ if (FLAGS.json) {
461
+ jsonState.status = 'skipped';
462
+ jsonState.skipReason = skip.reason;
463
+ flushJson();
464
+ }
465
+ return 0;
466
+ }
467
+
468
+ if (!isValidInstallRoot()) {
469
+ // Silently bail — package may be partially copied or invoked from an unexpected context.
470
+ if (FLAGS.json) {
471
+ jsonState.status = 'skipped';
472
+ jsonState.skipReason = 'not-sinapse-root';
473
+ flushJson();
474
+ }
475
+ return 0;
476
+ }
477
+
478
+ verboseLog(`${c.dim}SINAPSE postinstall — configurando ambiente...${c.reset}`);
479
+
480
+ const syncIde = stepSyncIde();
481
+ if (syncIde.critical) {
482
+ renderPartialInstallMessage();
483
+ if (FLAGS.json) flushJson();
484
+ return 2;
485
+ }
486
+
487
+ const runtimeDirs = stepCreateRuntimeDirs();
488
+ if (runtimeDirs.critical) {
489
+ renderPartialInstallMessage();
490
+ if (FLAGS.json) flushJson();
491
+ return 2;
492
+ }
493
+
494
+ const doctor = stepDoctor();
495
+ if (doctor.critical) {
496
+ renderPartialInstallMessage();
497
+ if (FLAGS.json) flushJson();
498
+ return 2;
499
+ }
500
+
501
+ // Capture first-run BEFORE creating the flag file so the welcome line shows
502
+ // on this install only.
503
+ const firstRun = isFirstRun();
504
+
505
+ // Render the minimalist summary (Story B.1 AC 1, AC 4, AC 7).
506
+ renderFinalSummary({ firstRun });
507
+
508
+ // Mark first-run AFTER the summary so a crash during rendering does not
509
+ // suppress the welcome line on the next attempt.
510
+ if (firstRun) {
511
+ markFirstRunDone();
512
+ }
513
+
514
+ // Non-critical warnings: show user the "partial install" message but exit 0
515
+ // so `npm install` does not report `command failed`. Critical failures have
516
+ // already returned 2 above. The `--json` output still carries `status: warn`
517
+ // for pipelines that want to act on it. [Story 10.39]
518
+ if (!syncIde.ok || !runtimeDirs.ok || !doctor.ok) {
519
+ renderPartialInstallMessage();
520
+ if (FLAGS.json) {
521
+ if (jsonState.status === 'success') jsonState.status = 'warn';
522
+ flushJson();
523
+ }
524
+ return 0;
525
+ }
526
+
527
+ if (FLAGS.json) flushJson();
528
+ return 0;
529
+ }
530
+
531
+ // Export for unit tests; only run if invoked directly.
532
+ module.exports = {
533
+ main,
534
+ detectFlags,
535
+ shouldSkip,
536
+ isValidInstallRoot,
537
+ stepSyncIde,
538
+ stepCreateRuntimeDirs,
539
+ stepDoctor,
540
+ renderFinalSummary,
541
+ renderPartialInstallMessage,
542
+ countAgents,
543
+ countSquads,
544
+ readVersion,
545
+ isFirstRun,
546
+ markFirstRunDone,
547
+ flushJson,
548
+ sinapseHome,
549
+ firstRunFlag,
550
+ _getJsonState: () => jsonState,
551
+ _getFlags: () => FLAGS,
552
+ _setFlags: (f) => { FLAGS = { ...FLAGS, ...f }; },
553
+ };
554
+
555
+ if (require.main === module) {
556
+ try {
557
+ const code = main();
558
+ process.exit(code);
559
+ } catch (err) {
560
+ error(`Postinstall falhou inesperadamente: ${err && err.stack ? err.stack : err}`);
561
+ // Non-critical — don't block the install on unexpected errors.
562
+ process.exit(0);
563
+ }
564
+ }