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
@@ -3,80 +3,198 @@ const path = require('path');
3
3
 
4
4
  /**
5
5
  * Detects the type of project in the current directory
6
- *
7
- * Detection Priority Order:
8
- * 1. EXISTING_SINAPSE - .sinapse-ai/ directory exists
9
- * 2. GREENFIELD - directory is empty
10
- * 3. BROWNFIELD - package.json OR .git exists
11
- * 4. UNKNOWN - directory has files but no recognized markers
12
- *
6
+ *
13
7
  * @param {string} targetDir - Directory to analyze (defaults to process.cwd())
14
8
  * @returns {string} 'GREENFIELD' | 'BROWNFIELD' | 'EXISTING_SINAPSE' | 'UNKNOWN'
15
- * @throws {Error} If directory cannot be accessed
16
- *
17
- * @example
18
- * // Detect current directory
19
- * const type = detectProjectType();
20
- * console.log(type); // 'GREENFIELD'
21
- *
22
- * @example
23
- * // Detect specific directory
24
- * const type = detectProjectType('/path/to/project');
25
- * console.log(type); // 'BROWNFIELD'
26
9
  */
27
10
  function detectProjectType(targetDir = process.cwd()) {
11
+ return detectProjectTypeExtended(targetDir).type;
12
+ }
13
+
14
+ /**
15
+ * Enhanced project detection with tech stack, maturity score, and recommendations.
16
+ *
17
+ * @param {string} targetDir - Directory to analyze (defaults to process.cwd())
18
+ * @returns {{ type: string, techStack: object, maturityScore: number, recommendations: string[] }}
19
+ */
20
+ function detectProjectTypeExtended(targetDir = process.cwd()) {
21
+ if (!targetDir || typeof targetDir !== 'string') {
22
+ throw new Error('Failed to detect project type: Invalid targetDir parameter: must be a non-empty string');
23
+ }
24
+
25
+ const normalizedDir = path.resolve(targetDir);
26
+
27
+ if (!fs.existsSync(normalizedDir)) {
28
+ throw new Error(`Failed to detect project type: Directory does not exist: ${normalizedDir}`);
29
+ }
30
+
28
31
  try {
29
- // Validate targetDir parameter
30
- if (!targetDir || typeof targetDir !== 'string') {
31
- throw new Error('Invalid targetDir parameter: must be a non-empty string');
32
- }
33
-
34
- // Normalize path for cross-platform compatibility
35
- const normalizedDir = path.resolve(targetDir);
36
-
37
- // Check if directory exists before attempting to read
38
- if (!fs.existsSync(normalizedDir)) {
39
- throw new Error(`Directory does not exist: ${normalizedDir}`);
40
- }
41
-
42
- // Check for SINAPSE installation markers (use path.join for security)
43
- const hasSinapseCore = fs.existsSync(path.join(normalizedDir, '.sinapse-ai'));
44
-
45
- // If SINAPSE already installed, return immediately (highest priority)
46
- if (hasSinapseCore) {
47
- return 'EXISTING_SINAPSE';
48
- }
49
-
50
- // Check directory contents
51
- const dirContents = fs.readdirSync(normalizedDir);
52
- const isEmpty = dirContents.length === 0;
53
-
54
- // Empty directory = greenfield (second priority)
55
- if (isEmpty) {
56
- return 'GREENFIELD';
57
- }
58
-
59
- // Check for project markers (third priority)
60
- const hasPackageJson = fs.existsSync(path.join(normalizedDir, 'package.json'));
61
- const hasGit = fs.existsSync(path.join(normalizedDir, '.git'));
62
-
63
- // Existing project markers = brownfield
64
- if (hasPackageJson || hasGit) {
65
- return 'BROWNFIELD';
66
- }
67
-
68
- // Directory has files but no recognized markers = unknown
69
- return 'UNKNOWN';
32
+ const type = _detectType(normalizedDir);
33
+ const techStack = type === 'GREENFIELD' ? _emptyStack() : _detectTechStack(normalizedDir);
34
+ const maturityScore = type === 'GREENFIELD' ? 0 : _calcMaturity(normalizedDir);
35
+ const recommendations = _buildRecommendations(type, techStack, maturityScore, normalizedDir);
70
36
 
37
+ return { type, techStack, maturityScore, recommendations };
71
38
  } catch (error) {
72
- // Log error with context for debugging
39
+ if (error.message.startsWith('Failed to detect project type')) throw error;
73
40
  console.error(`[detect-project-type] Error detecting project type in '${targetDir}': ${error.message}`);
74
-
75
- // Re-throw with more context for caller to handle
76
41
  throw new Error(`Failed to detect project type: ${error.message}`);
77
42
  }
78
43
  }
79
44
 
80
- module.exports = { detectProjectType };
45
+ /** Core type classification (original logic). */
46
+ function _detectType(dir) {
47
+ if (fs.existsSync(path.join(dir, '.sinapse-ai'))) return 'EXISTING_SINAPSE';
48
+
49
+ const dirContents = fs.readdirSync(dir);
50
+ if (dirContents.length === 0) return 'GREENFIELD';
51
+
52
+ const hasPackageJson = fs.existsSync(path.join(dir, 'package.json'));
53
+ const hasGit = fs.existsSync(path.join(dir, '.git'));
54
+ if (hasPackageJson || hasGit) return 'BROWNFIELD';
55
+
56
+ return 'UNKNOWN';
57
+ }
58
+
59
+ function _emptyStack() {
60
+ return { framework: null, language: null, database: null, testing: null, ci: null, containerized: false };
61
+ }
62
+
63
+ /** Detect tech stack from project files and package.json deps. */
64
+ function _detectTechStack(dir) {
65
+ const stack = _emptyStack();
66
+ const deps = _readDeps(dir);
67
+
68
+ // Framework detection (priority order)
69
+ const frameworkMap = [
70
+ ['next', 'next'], ['nuxt', 'nuxt'], ['@angular/core', 'angular'],
71
+ ['svelte', 'svelte'], ['vue', 'vue'], ['react', 'react'],
72
+ ['@nestjs/core', 'nest'], ['fastify', 'fastify'], ['express', 'express'],
73
+ ];
74
+ for (const [pkg, name] of frameworkMap) {
75
+ if (deps.has(pkg)) { stack.framework = name; break; }
76
+ }
77
+
78
+ // Language
79
+ stack.language = fs.existsSync(path.join(dir, 'tsconfig.json')) ? 'typescript' : 'javascript';
80
+
81
+ // Database
82
+ const dbMap = [['supabase', 'supabase'], ['prisma', 'prisma'], ['drizzle-orm', 'drizzle']];
83
+ for (const [pkg, name] of dbMap) {
84
+ if (deps.has(pkg) || deps.has(`@${pkg}/client`)) { stack.database = name; break; }
85
+ }
86
+ if (!stack.database && fs.existsSync(path.join(dir, 'supabase'))) stack.database = 'supabase';
87
+ if (!stack.database && fs.existsSync(path.join(dir, 'prisma'))) stack.database = 'prisma';
88
+ if (!stack.database && _existsGlob(dir, 'drizzle.config')) stack.database = 'drizzle';
89
+
90
+ // Testing
91
+ const testMap = [['vitest', 'vitest'], ['jest', 'jest'], ['mocha', 'mocha'], ['ava', 'ava']];
92
+ for (const [pkg, name] of testMap) {
93
+ if (deps.has(pkg)) { stack.testing = name; break; }
94
+ }
95
+ if (!stack.testing) {
96
+ if (_existsGlob(dir, 'vitest.config')) stack.testing = 'vitest';
97
+ else if (_existsGlob(dir, 'jest.config')) stack.testing = 'jest';
98
+ }
99
+
100
+ // CI
101
+ if (fs.existsSync(path.join(dir, '.github', 'workflows'))) stack.ci = 'github-actions';
102
+ else if (fs.existsSync(path.join(dir, '.gitlab-ci.yml'))) stack.ci = 'gitlab-ci';
103
+ else if (fs.existsSync(path.join(dir, '.circleci'))) stack.ci = 'circleci';
104
+
105
+ // Containers
106
+ stack.containerized = fs.existsSync(path.join(dir, 'Dockerfile'))
107
+ || fs.existsSync(path.join(dir, 'docker-compose.yml'))
108
+ || fs.existsSync(path.join(dir, 'docker-compose.yaml'));
109
+
110
+ return stack;
111
+ }
112
+
113
+ /** Calculate maturity score (0-10). */
114
+ function _calcMaturity(dir) {
115
+ let score = 0;
116
+ const has = (p) => fs.existsSync(path.join(dir, p));
117
+
118
+ // Tests (+2)
119
+ if (has('tests') || has('test') || has('__tests__') || has('src/__tests__')) score += 2;
120
+ // CI/CD (+2)
121
+ if (has('.github/workflows') || has('.gitlab-ci.yml') || has('.circleci')) score += 2;
122
+ // Env example (+1)
123
+ if (has('.env.example') || has('.env.local.example')) score += 1;
124
+ // README (+1)
125
+ if (has('README.md') || has('readme.md')) score += 1;
126
+ // Docs (+1)
127
+ if (has('docs')) score += 1;
128
+
129
+ // >50 files (+1)
130
+ try {
131
+ const count = _countFiles(dir, 0, 60);
132
+ if (count > 50) score += 1;
133
+ } catch { /* ignore */ }
134
+
135
+ // >10 commits (+1)
136
+ if (has('.git')) {
137
+ try {
138
+ const { execSync } = require('child_process');
139
+ const out = execSync('git rev-list --count HEAD', { cwd: dir, timeout: 3000, stdio: ['pipe', 'pipe', 'pipe'] });
140
+ if (parseInt(out.toString().trim(), 10) > 10) score += 1;
141
+ } catch { /* ignore — no git or shallow clone */ }
142
+ }
143
+
144
+ // Branch protection (+1) — check via GitHub API marker or CODEOWNERS
145
+ if (has('CODEOWNERS') || has('.github/CODEOWNERS')) score += 1;
146
+
147
+ return Math.min(score, 10);
148
+ }
81
149
 
150
+ /** Build actionable recommendations based on gaps. */
151
+ function _buildRecommendations(type, stack, maturity, dir) {
152
+ if (type === 'GREENFIELD') return ['Initialize project with SINAPSE scaffolding'];
153
+ const recs = [];
154
+ const has = (p) => fs.existsSync(path.join(dir, p));
155
+
156
+ if (stack.database === 'supabase') recs.push('Add RLS policies to Supabase tables');
157
+ if (!stack.testing) recs.push('Add a testing framework (Jest or Vitest recommended)');
158
+ if (!stack.ci) recs.push('Set up CI/CD with GitHub Actions');
159
+ if (!has('.env.example') && !has('.env.local.example')) recs.push('Create .env.example with placeholder values');
160
+ if (!has('README.md') && !has('readme.md')) recs.push('Add a README.md');
161
+ if (!has('docs')) recs.push('Create a docs/ directory for project documentation');
162
+ if (!has('CODEOWNERS') && !has('.github/CODEOWNERS')) recs.push('Set up CODEOWNERS for branch protection');
163
+ if (stack.language === 'javascript' && !has('tsconfig.json')) recs.push('Consider migrating to TypeScript');
164
+
165
+ return recs;
166
+ }
167
+
168
+ // ── Helpers ──────────────────────────────────────────────────────────────────
169
+
170
+ /** Read combined deps + devDeps from package.json as a Set. */
171
+ function _readDeps(dir) {
172
+ const pkgPath = path.join(dir, 'package.json');
173
+ if (!fs.existsSync(pkgPath)) return new Set();
174
+ try {
175
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));
176
+ return new Set([...Object.keys(pkg.dependencies || {}), ...Object.keys(pkg.devDependencies || {})]);
177
+ } catch { return new Set(); }
178
+ }
179
+
180
+ /** Check if a config file exists with common extensions. */
181
+ function _existsGlob(dir, baseName) {
182
+ return ['.js', '.ts', '.mjs', '.cjs', '.json', '.yaml', '.yml', ''].some(
183
+ (ext) => fs.existsSync(path.join(dir, `${baseName}${ext}`)),
184
+ );
185
+ }
186
+
187
+ /** Recursively count files up to a limit (early exit). */
188
+ function _countFiles(dir, current, limit) {
189
+ const entries = fs.readdirSync(dir, { withFileTypes: true });
190
+ for (const entry of entries) {
191
+ if (entry.name.startsWith('.') || entry.name === 'node_modules') continue;
192
+ current += 1;
193
+ if (current > limit) return current;
194
+ if (entry.isDirectory()) current = _countFiles(path.join(dir, entry.name), current, limit);
195
+ if (current > limit) return current;
196
+ }
197
+ return current;
198
+ }
82
199
 
200
+ module.exports = { detectProjectType, detectProjectTypeExtended };
@@ -29,36 +29,48 @@ const SignatureLimits = {
29
29
  };
30
30
 
31
31
  /**
32
- * PINNED PUBLIC KEY - MUST BE HARDCODED
33
- * This is the root of trust for manifest verification.
32
+ * Signature verification feature flag.
33
+ * Set to true AND provide SINAPSE_MANIFEST_PUBLIC_KEY env var (or replace
34
+ * the pinned key below) to enable manifest signature verification.
35
+ */
36
+ const SIGNATURE_VERIFICATION_ENABLED = false;
37
+
38
+ /**
39
+ * PINNED PUBLIC KEY - Root of trust for manifest verification.
34
40
  * Generated with: minisign -G -p sinapse-ai.pub -s sinapse-ai.key
35
41
  *
36
- * Format: base64-encoded Ed25519 public key
37
- * DO NOT load this from external files or environment variables.
42
+ * When SIGNATURE_VERIFICATION_ENABLED is true, the public key MUST be set.
43
+ * It can be provided via:
44
+ * 1. SINAPSE_MANIFEST_PUBLIC_KEY environment variable (base64-encoded Ed25519)
45
+ * 2. Hardcoded below (replace null with the actual key)
46
+ *
47
+ * Format: base64-encoded Ed25519 public key (32 bytes)
38
48
  */
39
49
  const PINNED_PUBLIC_KEY = {
40
50
  // Key ID (8 bytes, base64 encoded) - opaque identifier, not UTF-8 text
41
51
  // This is compared as raw bytes against the signature's key ID
42
52
  keyId: Buffer.from('SINAPSE0001').toString('base64'), // 'QUlPUzAwMDE='
43
53
  // Ed25519 public key (32 bytes, base64 encoded)
44
- // TODO: Replace with actual generated public key before production
45
- publicKey: 'REPLACE_WITH_ACTUAL_PUBLIC_KEY_BASE64_HERE',
54
+ // Set via env var SINAPSE_MANIFEST_PUBLIC_KEY or hardcode here when production key is generated
55
+ publicKey: process.env.SINAPSE_MANIFEST_PUBLIC_KEY || null,
46
56
  // Algorithm identifier
47
57
  algorithm: 'Ed25519',
48
58
  };
49
59
 
50
60
  /**
51
- * Placeholder key identifier - used to detect uninitialized keys
52
- * @constant {string}
61
+ * Check if signature verification is properly configured
62
+ * @returns {boolean} True if verification is enabled and a key is set
53
63
  */
54
- const PLACEHOLDER_KEY = 'REPLACE_WITH_ACTUAL_PUBLIC_KEY_BASE64_HERE';
64
+ function isVerificationConfigured() {
65
+ return SIGNATURE_VERIFICATION_ENABLED && PINNED_PUBLIC_KEY.publicKey != null;
66
+ }
55
67
 
56
68
  /**
57
- * Check if the pinned public key is still the placeholder
58
- * @returns {boolean} True if key needs to be replaced
69
+ * Check if the pinned public key is still the placeholder (legacy compat)
70
+ * @returns {boolean} True if key is not configured
59
71
  */
60
72
  function isPlaceholderKey() {
61
- return PINNED_PUBLIC_KEY.publicKey === PLACEHOLDER_KEY;
73
+ return !PINNED_PUBLIC_KEY.publicKey;
62
74
  }
63
75
 
64
76
  /**
@@ -185,12 +197,13 @@ function verifyManifestSignature(manifestContent, signatureContent, options = {}
185
197
  };
186
198
 
187
199
  try {
188
- // SECURITY: Check for placeholder key before any verification
200
+ // SECURITY: Check if verification is properly configured
189
201
  const pubKey = options.publicKey || PINNED_PUBLIC_KEY;
190
- if (!options.publicKey && isPlaceholderKey()) {
191
- result.error =
192
- 'SECURITY ERROR: Public key has not been configured. ' +
193
- 'Replace PINNED_PUBLIC_KEY in manifest-signature.js with the actual Ed25519 public key.';
202
+ if (!options.publicKey && !isVerificationConfigured()) {
203
+ result.error = 'Signature verification not configured: ' +
204
+ (SIGNATURE_VERIFICATION_ENABLED
205
+ ? 'Set SINAPSE_MANIFEST_PUBLIC_KEY env var or hardcode the Ed25519 public key.'
206
+ : 'SIGNATURE_VERIFICATION_ENABLED is false. Enable when production key is ready.');
194
207
  return result;
195
208
  }
196
209
 
@@ -372,8 +385,10 @@ module.exports = {
372
385
  signatureExists,
373
386
  loadAndVerifyManifest,
374
387
  isPlaceholderKey,
388
+ isVerificationConfigured,
375
389
  parseMinisignSignature,
376
390
  PINNED_PUBLIC_KEY,
391
+ SIGNATURE_VERIFICATION_ENABLED,
377
392
  SignatureLimits,
378
393
  };
379
394
 
@@ -33,6 +33,12 @@ const TRANSLATIONS = {
33
33
  greenfieldDesc: 'new project from scratch',
34
34
  brownfield: 'Brownfield',
35
35
  brownfieldDesc: 'existing project',
36
+ detectedProjectType: 'Detected: {type} project',
37
+ detectedProjectTypeWithStack: 'Detected: {type} project ({stack})',
38
+ detectedUpgrade: 'Detected: Existing SINAPSE project (upgrade)',
39
+ infraApplied: 'Infrastructure templates applied',
40
+ infraSkipped: 'Infrastructure templates skipped',
41
+ agentsMdCreated: 'AGENTS.md created',
36
42
 
37
43
  // IDE selection
38
44
  ideQuestion: 'Select IDE(s):',
@@ -210,6 +216,12 @@ const TRANSLATIONS = {
210
216
  greenfieldDesc: 'projeto novo do zero',
211
217
  brownfield: 'Brownfield',
212
218
  brownfieldDesc: 'projeto existente',
219
+ detectedProjectType: 'Detectado: projeto {type}',
220
+ detectedProjectTypeWithStack: 'Detectado: projeto {type} ({stack})',
221
+ detectedUpgrade: 'Detectado: projeto SINAPSE existente (upgrade)',
222
+ infraApplied: 'Templates de infraestrutura aplicados',
223
+ infraSkipped: 'Templates de infraestrutura ignorados',
224
+ agentsMdCreated: 'AGENTS.md criado',
213
225
 
214
226
  // IDE selection
215
227
  ideQuestion: 'Selecione IDE(s):',
@@ -10,7 +10,6 @@
10
10
  const fs = require('fs-extra');
11
11
  const path = require('path');
12
12
  const yaml = require('js-yaml');
13
- const inquirer = require('inquirer');
14
13
  const ora = require('ora');
15
14
  const { spawnSync } = require('child_process');
16
15
  const { getIDEConfig } = require('../config/ide-configs');
@@ -80,46 +79,16 @@ async function backupFile(filePath) {
80
79
  * @param {boolean} options.noMerge - If true, don't offer merge option
81
80
  * @returns {Promise<string>} Action: 'merge', 'overwrite', 'skip', or 'backup'
82
81
  */
83
- async function promptFileExists(filePath, options = {}) {
84
- const { projectType, forceMerge, noMerge } = options;
85
- const canMerge = !noMerge && hasMergeStrategy(filePath);
86
- const isBrownfield = projectType === 'BROWNFIELD' || projectType === 'EXISTING_SINAPSE';
87
-
88
- // If force merge is set and merge is available, return merge directly
89
- if (forceMerge && canMerge) {
82
+ async function promptFileExists(filePath, _options = {}) {
83
+ // Story 10.38: Merge-only policy. Users who are not developers must never
84
+ // be able to destroy their own config by choosing "overwrite" in a prompt.
85
+ // If the file has a registered merge strategy, merge unconditionally.
86
+ // Otherwise, fall back to a timestamped backup + overwrite (never plain
87
+ // overwrite, never skip, never prompt).
88
+ if (hasMergeStrategy(filePath)) {
90
89
  return 'merge';
91
90
  }
92
-
93
- // Build choices based on available options
94
- const choices = [];
95
-
96
- if (canMerge) {
97
- choices.push({
98
- name: 'Merge (complement existing)',
99
- value: 'merge',
100
- });
101
- }
102
-
103
- choices.push(
104
- { name: 'Overwrite completely', value: 'overwrite' },
105
- { name: 'Create backup and overwrite', value: 'backup' },
106
- { name: 'Skip', value: 'skip' },
107
- );
108
-
109
- // Default to merge for brownfield if available, otherwise backup
110
- const defaultChoice = isBrownfield && canMerge ? 'merge' : 'backup';
111
-
112
- const { action } = await inquirer.prompt([
113
- {
114
- type: 'list',
115
- name: 'action',
116
- message: `File ${path.basename(filePath)} already exists. What would you like to do?`,
117
- choices,
118
- default: defaultChoice,
119
- },
120
- ]);
121
-
122
- return action;
91
+ return 'backup';
123
92
  }
124
93
 
125
94
  /**
@@ -21,8 +21,9 @@ const {
21
21
  getIDEQuestions,
22
22
  getTechPresetQuestion,
23
23
  } = require('./questions');
24
- const { setLanguage, t } = require('./i18n');
24
+ const { setLanguage, t, tf } = require('./i18n');
25
25
  const yaml = require('js-yaml');
26
+ const { detectProjectTypeExtended } = require('../detection/detect-project-type');
26
27
  const { showWelcome, showCompletion, showCancellation } = require('./feedback');
27
28
  const { generateIDEConfigs, showSuccessSummary, copySkillFiles, copyExtraCommandFiles } = require('./ide-config-generator');
28
29
  const {
@@ -121,6 +122,19 @@ async function writeClaudeSettings(language, projectDir = process.cwd()) {
121
122
  }
122
123
  }
123
124
 
125
+ /** Detect system locale and return wizard language code. */
126
+ function detectSystemLocale() {
127
+ try {
128
+ const locale = Intl.DateTimeFormat().resolvedOptions().locale || '';
129
+ if (locale.startsWith('pt')) return 'pt';
130
+ if (locale.startsWith('en')) return 'en';
131
+ } catch (_e) { /* Intl not available */ }
132
+ const envLocale = process.env.LANG || process.env.LC_ALL || process.env.LC_MESSAGES || '';
133
+ if (envLocale.startsWith('pt')) return 'pt';
134
+ if (envLocale.startsWith('en')) return 'en';
135
+ return null;
136
+ }
137
+
124
138
  /**
125
139
  * Get existing language from Claude Code settings.json (Story ACT-12 - Idempotency)
126
140
  * Returns the existing language code if found, null otherwise.
@@ -201,20 +215,32 @@ function setupCancellationHandler() {
201
215
  sigintHandlerAdded = true;
202
216
  }
203
217
 
204
- /**
205
- * Auto-detect project type based on filesystem markers
206
- *
207
- * @param {string} [cwd] - Working directory to inspect
208
- * @returns {string} 'upgrade' | 'brownfield' | 'greenfield'
209
- */
210
- function detectProjectType(cwd = process.cwd()) {
211
- if (fse.existsSync(path.join(cwd, '.sinapse-ai'))) {
212
- return 'upgrade';
213
- }
214
- if (fse.existsSync(path.join(cwd, 'package.json'))) {
215
- return 'brownfield';
218
+ /** Rich project type detection with tech stack info. */
219
+ function detectProjectTypeFull(cwd = process.cwd()) {
220
+ try {
221
+ const extended = detectProjectTypeExtended(cwd);
222
+ const typeMap = { EXISTING_SINAPSE: 'upgrade', BROWNFIELD: 'brownfield', GREENFIELD: 'greenfield', UNKNOWN: 'greenfield' };
223
+ const type = typeMap[extended.type] || 'greenfield';
224
+ let label = '';
225
+ if (extended.techStack) {
226
+ const parts = [];
227
+ if (extended.techStack.framework) parts.push(extended.techStack.framework.charAt(0).toUpperCase() + extended.techStack.framework.slice(1));
228
+ if (extended.techStack.language === 'typescript') parts.push('TypeScript');
229
+ if (extended.techStack.database) parts.push(extended.techStack.database.charAt(0).toUpperCase() + extended.techStack.database.slice(1));
230
+ if (extended.techStack.testing) parts.push(extended.techStack.testing);
231
+ label = parts.join(' + ');
232
+ }
233
+ return { type, techStack: extended.techStack, label };
234
+ } catch (_err) {
235
+ if (fse.existsSync(path.join(cwd, '.sinapse-ai'))) return { type: 'upgrade', techStack: null, label: '' };
236
+ if (fse.existsSync(path.join(cwd, 'package.json'))) return { type: 'brownfield', techStack: null, label: '' };
237
+ return { type: 'greenfield', techStack: null, label: '' };
216
238
  }
217
- return 'greenfield';
239
+ }
240
+
241
+ /** Simple project type string (backward compat). */
242
+ function detectProjectType(cwd = process.cwd()) {
243
+ return detectProjectTypeFull(cwd).type;
218
244
  }
219
245
 
220
246
  /**
@@ -400,6 +426,45 @@ async function installGlobalAgents() {
400
426
  * const answers = await runWizard();
401
427
  * console.log(answers.projectType); // 'greenfield', 'brownfield', or 'upgrade'
402
428
  */
429
+
430
+ /** Generate AGENTS.md at project root. */
431
+ async function generateAgentsMd(targetDir = process.cwd()) {
432
+ const agentsPath = path.join(targetDir, 'AGENTS.md');
433
+ if (await fse.pathExists(agentsPath)) return false;
434
+ const lines = [
435
+ '# AGENTS.md', '', 'Universal agent reference for AI-powered development tools.', '',
436
+ '## Available Agents', '', '| Agent | Persona | Scope |', '|-------|---------|-------|',
437
+ '| `@developer` | Pixel | Code implementation |',
438
+ '| `@quality-gate` | Litmus | Testing and quality |',
439
+ '| `@architect` | Stratum | Architecture and technical design |',
440
+ '| `@project-lead` | Beacon | Product Management |',
441
+ '| `@product-lead` | Axis | Product Owner, stories/epics |',
442
+ '| `@sprint-lead` | Sync | Scrum Master |',
443
+ '| `@analyst` | Scope | Research and analysis |',
444
+ '| `@data-engineer` | Tensor | Database design |',
445
+ '| `@ux-design-expert` | Mosaic | UX/UI design |',
446
+ '| `@devops` | Pipeline | CI/CD, deployment |', '',
447
+ '## Commands', '', 'Use prefix `*` for agent commands:',
448
+ '- `*help` - Show available commands',
449
+ '- `*create-story` - Create a development story', '',
450
+ '---', '*Generated by SINAPSE AI*', '',
451
+ ];
452
+ try { await fse.writeFile(agentsPath, lines.join('\n'), 'utf8'); return true; } catch (_e) { return false; }
453
+ }
454
+
455
+ /** Apply project infrastructure templates (never overwrites existing). */
456
+ function applyInfraTemplates(targetDir = process.cwd()) {
457
+ try {
458
+ const infraScript = path.join(__dirname, '..', '..', '..', '..', '.sinapse-ai', 'infrastructure', 'scripts', 'setup-project-infra.js');
459
+ if (!fse.existsSync(infraScript)) return { success: false, error: 'script not found' };
460
+ const { run } = require(infraScript);
461
+ run(targetDir);
462
+ return { success: true };
463
+ } catch (error) {
464
+ return { success: false, error: error.message };
465
+ }
466
+ }
467
+
403
468
  async function runWizard(options = {}) {
404
469
  try {
405
470
  // Setup graceful cancellation
@@ -455,6 +520,14 @@ async function runWizard(options = {}) {
455
520
  };
456
521
  }
457
522
 
523
+ // Display auto-detected project type (informational)
524
+ if (detectedProjectType === 'upgrade') {
525
+ console.log(`\n${colors.primary(t('detectedUpgrade'))}`);
526
+ } else {
527
+ const typeLabel = detectedProjectType.charAt(0).toUpperCase() + detectedProjectType.slice(1);
528
+ console.log(`\n${colors.primary(t('detectedProjectType').replace('{type}', typeLabel))}`);
529
+ }
530
+
458
531
  // Story 1.4: Install SINAPSE core framework (agents, tasks, workflows, templates)
459
532
  console.log('\nšŸ“¦ Installing SINAPSE core framework...');
460
533
  let sinapseCoreResult = null;
@@ -1126,6 +1199,34 @@ async function runWizard(options = {}) {
1126
1199
  }
1127
1200
  }
1128
1201
 
1202
+ // Generate AGENTS.md at project root (universal format for Claude Code + Codex)
1203
+ try {
1204
+ const agentsCreated = await generateAgentsMd(process.cwd());
1205
+ if (agentsCreated) {
1206
+ console.log(`\nāœ… ${t('agentsMdCreated')}`);
1207
+ }
1208
+ answers.agentsMdCreated = agentsCreated;
1209
+ } catch (_agentsErr) {
1210
+ answers.agentsMdCreated = false;
1211
+ }
1212
+
1213
+ // Create docs/stories/ directory for story-driven development
1214
+ const storiesDir = path.join(process.cwd(), 'docs', 'stories');
1215
+ if (!await fse.pathExists(storiesDir)) {
1216
+ await fse.ensureDir(storiesDir);
1217
+ }
1218
+
1219
+ // Apply infrastructure templates (PR template, issue templates, CI, CODEOWNERS)
1220
+ try {
1221
+ const infraResult = applyInfraTemplates(process.cwd());
1222
+ if (infraResult.success) {
1223
+ console.log(`āœ… ${t('infraApplied')}`);
1224
+ }
1225
+ answers.infraApplied = infraResult.success;
1226
+ } catch (_infraErr) {
1227
+ answers.infraApplied = false;
1228
+ }
1229
+
1129
1230
  // Show completion with LLM label
1130
1231
  showCompletion({ llmLabel: llmLabel(answers.selectedLLM), llmValue: answers.selectedLLM });
1131
1232
 
@@ -1171,11 +1272,15 @@ module.exports = {
1171
1272
  getExistingLanguage,
1172
1273
  LANGUAGE_MAP,
1173
1274
  detectProjectType,
1275
+ detectProjectTypeFull,
1174
1276
  detectTechPreset,
1277
+ detectSystemLocale,
1175
1278
  llmToIDEs,
1176
1279
  llmLabel,
1177
1280
  installGlobalAgents,
1178
1281
  buildAgentTemplate,
1282
+ generateAgentsMd,
1283
+ applyInfraTemplates,
1179
1284
  GLOBAL_AGENTS,
1180
1285
  },
1181
1286
  };
@@ -82,7 +82,7 @@ function getLLMQuestion() {
82
82
 
83
83
  /**
84
84
  * Get project type question (Story 1.3)
85
- * Uses i18n for translation
85
+ * @deprecated Project type is now auto-detected. Kept for backward compat.
86
86
  *
87
87
  * @returns {Object} Inquirer question object
88
88
  */
@@ -317,8 +317,7 @@ function buildQuestionSequence(_context = {}) {
317
317
  // Language selection (first question)
318
318
  questions.push(getLanguageQuestion());
319
319
 
320
- // Story 1.2: Foundation (project type only)
321
- questions.push(getProjectTypeQuestion());
320
+ // Story 1.2: Project type is auto-detected (question removed from flow)
322
321
 
323
322
  // Story 1.4: IDE Selection
324
323
  questions.push(...getIDEQuestions());