sinapse-ai 1.8.0 → 1.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (361) hide show
  1. package/.claude/hooks/mind-clone-governance.py +212 -212
  2. package/.claude/hooks/read-protection.py +152 -152
  3. package/.claude/hooks/slug-validation.py +175 -175
  4. package/.claude/hooks/sql-governance.py +183 -183
  5. package/.claude/rules/documentation-first.md +1 -1
  6. package/.claude/rules/hook-governance.md +1 -1
  7. package/.claude/rules/mandatory-delegation.md +1 -1
  8. package/.claude/rules/project-intelligence.md +1 -1
  9. package/.codex/agents/analyst.md +4 -371
  10. package/.codex/agents/animations-orqx.md +4 -57
  11. package/.codex/agents/architect.md +4 -560
  12. package/.codex/agents/brand-orqx.md +4 -95
  13. package/.codex/agents/claude-mastery-chief.md +4 -0
  14. package/.codex/agents/cloning-orqx.md +4 -70
  15. package/.codex/agents/commercial-orqx.md +4 -67
  16. package/.codex/agents/config-engineer.md +2 -2
  17. package/.codex/agents/content-orqx.md +4 -77
  18. package/.codex/agents/copy-orqx.md +4 -65
  19. package/.codex/agents/cost-optimizer.md +4 -0
  20. package/.codex/agents/council-orqx.md +4 -68
  21. package/.codex/agents/courses-orqx.md +4 -64
  22. package/.codex/agents/cro-persuasion.md +4 -0
  23. package/.codex/agents/cyber-orqx.md +4 -67
  24. package/.codex/agents/data-engineer.md +4 -542
  25. package/.codex/agents/design-orqx.md +4 -65
  26. package/.codex/agents/design-system.md +4 -210
  27. package/.codex/agents/developer.md +4 -666
  28. package/.codex/agents/devops.md +4 -668
  29. package/.codex/agents/finance-orqx.md +4 -57
  30. package/.codex/agents/fiscal-compliance-br.md +4 -0
  31. package/.codex/agents/forecast-strategist.md +4 -0
  32. package/.codex/agents/growth-orqx.md +4 -75
  33. package/.codex/agents/hooks-architect.md +2 -2
  34. package/.codex/agents/mcp-integrator.md +2 -2
  35. package/.codex/agents/paidmedia-orqx.md +4 -67
  36. package/.codex/agents/platform-aesthetic-director.md +4 -0
  37. package/.codex/agents/premium-packaging-strategist.md +4 -0
  38. package/.codex/agents/product-lead.md +4 -371
  39. package/.codex/agents/product-orqx.md +4 -57
  40. package/.codex/agents/product-surface-director.md +4 -0
  41. package/.codex/agents/project-integrator.md +2 -2
  42. package/.codex/agents/project-lead.md +4 -414
  43. package/.codex/agents/quality-gate.md +4 -547
  44. package/.codex/agents/research-orqx.md +4 -67
  45. package/.codex/agents/roadmap-sentinel.md +2 -2
  46. package/.codex/agents/skill-craftsman.md +2 -2
  47. package/.codex/agents/snps-orqx.md +4 -684
  48. package/.codex/agents/sop-extractor.md +4 -61
  49. package/.codex/agents/sprint-lead.md +4 -324
  50. package/.codex/agents/squad-creator.md +4 -402
  51. package/.codex/agents/storytelling-orqx.md +4 -65
  52. package/.codex/agents/swarm-orqx.md +4 -64
  53. package/.codex/agents/ux-design-expert.md +4 -532
  54. package/.codex/agents/ux-designer.md +4 -124
  55. package/.codex/command-registry.json +9 -9
  56. package/.codex/delegation-matrix.json +375 -839
  57. package/.codex/delegation-parity.json +658 -0
  58. package/.codex/handoff-packet.parity.schema.json +148 -0
  59. package/.codex/handoff-packet.template.json +26 -0
  60. package/.codex/instructions.md +8 -8
  61. package/.codex/scripts/resolve-codex-agent.js +482 -0
  62. package/.codex/scripts/resolve-codex-command.js +75 -12
  63. package/.codex/scripts/resolve-codex-delegation.js +131 -92
  64. package/.codex/skills/sinapse-claude/SKILL.md +3 -3
  65. package/.codex/skills/sinapse-po/SKILL.md +1 -1
  66. package/.codex/tasks/resolve-sinapse-conflict.md +1 -1
  67. package/.sinapse-ai/constitution.md +5 -5
  68. package/.sinapse-ai/core/doctor/checks/git-hooks.js +163 -19
  69. package/.sinapse-ai/core/events/dashboard-emitter.js +30 -9
  70. package/.sinapse-ai/core/execution/subagent-dispatcher.js +1 -1
  71. package/.sinapse-ai/core/synapse/engine.js +15 -0
  72. package/.sinapse-ai/core/ui/observability-panel.js +240 -0
  73. package/.sinapse-ai/core-config.yaml +0 -20
  74. package/.sinapse-ai/data/entity-registry.yaml +185 -236
  75. package/.sinapse-ai/development/agents/snps-orqx.md +16 -26
  76. package/.sinapse-ai/development/tasks/build-autonomous.md +11 -1
  77. package/.sinapse-ai/development/tasks/build-resume.md +8 -0
  78. package/.sinapse-ai/development/tasks/build-status.md +8 -0
  79. package/.sinapse-ai/development/tasks/build.md +8 -0
  80. package/.sinapse-ai/development/tasks/cleanup-worktrees.md +8 -1
  81. package/.sinapse-ai/development/tasks/gotcha.md +8 -0
  82. package/.sinapse-ai/development/tasks/gotchas.md +8 -0
  83. package/.sinapse-ai/development/tasks/ids-health.md +14 -6
  84. package/.sinapse-ai/development/tasks/list-mcps.md +15 -0
  85. package/.sinapse-ai/development/tasks/merge-worktree.md +8 -1
  86. package/.sinapse-ai/development/tasks/qa-review-build.md +18 -0
  87. package/.sinapse-ai/development/tasks/remove-mcp.md +8 -1
  88. package/.sinapse-ai/development/tasks/validate-agents.md +26 -14
  89. package/.sinapse-ai/development/templates/service-template/README.md.hbs +159 -159
  90. package/.sinapse-ai/development/templates/service-template/__tests__/index.test.ts.hbs +238 -238
  91. package/.sinapse-ai/development/templates/service-template/client.ts.hbs +404 -404
  92. package/.sinapse-ai/development/templates/service-template/errors.ts.hbs +183 -183
  93. package/.sinapse-ai/development/templates/service-template/index.ts.hbs +121 -121
  94. package/.sinapse-ai/development/templates/service-template/package.json.hbs +88 -88
  95. package/.sinapse-ai/development/templates/service-template/types.ts.hbs +146 -146
  96. package/.sinapse-ai/development/templates/squad-template/LICENSE +22 -22
  97. package/.sinapse-ai/git-hooks/lib/framework-guard.js +258 -0
  98. package/.sinapse-ai/git-hooks/lib/secret-scanner-core.js +355 -0
  99. package/.sinapse-ai/git-hooks/lib/staged-secret-scan.js +179 -0
  100. package/.sinapse-ai/git-hooks/lib/staged-sql-guard.js +204 -0
  101. package/.sinapse-ai/git-hooks/post-commit +28 -0
  102. package/.sinapse-ai/git-hooks/pre-commit +81 -0
  103. package/.sinapse-ai/git-hooks/pre-push +83 -0
  104. package/.sinapse-ai/hooks/ids-post-commit.js +13 -11
  105. package/.sinapse-ai/hooks/ids-pre-push.js +9 -7
  106. package/.sinapse-ai/infrastructure/scripts/codex-parity/resolve.js +161 -0
  107. package/.sinapse-ai/infrastructure/scripts/dashboard-status-writer.js +6 -2
  108. package/.sinapse-ai/infrastructure/scripts/ide-sync/index.js +65 -68
  109. package/.sinapse-ai/infrastructure/scripts/sync-codex-local-first.js +156 -1
  110. package/.sinapse-ai/infrastructure/scripts/validate-codex-delegation.js +1 -4
  111. package/.sinapse-ai/infrastructure/scripts/validate-codex-integration.js +41 -5
  112. package/.sinapse-ai/infrastructure/templates/coderabbit.yaml.template +280 -280
  113. package/.sinapse-ai/infrastructure/templates/config/env.example +16 -16
  114. package/.sinapse-ai/infrastructure/templates/config/gitignore-additions.tmpl +59 -59
  115. package/.sinapse-ai/infrastructure/templates/github/CODEOWNERS.template +12 -12
  116. package/.sinapse-ai/infrastructure/templates/github-workflows/ci.yml.template +170 -170
  117. package/.sinapse-ai/infrastructure/templates/github-workflows/pr-automation.yml.template +331 -331
  118. package/.sinapse-ai/infrastructure/templates/github-workflows/release.yml.template +197 -197
  119. package/.sinapse-ai/infrastructure/templates/gitignore/gitignore-brownfield-merge.tmpl +19 -19
  120. package/.sinapse-ai/infrastructure/templates/gitignore/gitignore-node.tmpl +86 -86
  121. package/.sinapse-ai/infrastructure/templates/gitignore/gitignore-python.tmpl +146 -146
  122. package/.sinapse-ai/infrastructure/templates/gitignore/gitignore-sinapse-base.tmpl +64 -64
  123. package/.sinapse-ai/infrastructure/templates/safe-collab/CODEOWNERS.template +16 -16
  124. package/.sinapse-ai/infrastructure/templates/sinapse-sync.yaml.template +183 -183
  125. package/.sinapse-ai/install-manifest.yaml +112 -164
  126. package/.sinapse-ai/local-config.yaml.template +65 -65
  127. package/.sinapse-ai/product/templates/adr.hbs +126 -126
  128. package/.sinapse-ai/product/templates/dbdr.hbs +242 -242
  129. package/.sinapse-ai/product/templates/epic.hbs +213 -213
  130. package/.sinapse-ai/product/templates/ide-rules/codex-rules.md +30 -0
  131. package/.sinapse-ai/product/templates/pmdr.hbs +187 -187
  132. package/.sinapse-ai/product/templates/prd-v2.0.hbs +217 -217
  133. package/.sinapse-ai/product/templates/prd.hbs +202 -202
  134. package/.sinapse-ai/product/templates/statusline/statusline-script.js +31 -8
  135. package/.sinapse-ai/product/templates/statusline/track-agent-clear.cjs +79 -0
  136. package/.sinapse-ai/product/templates/statusline/track-agent.cjs +218 -0
  137. package/.sinapse-ai/product/templates/story.hbs +264 -264
  138. package/.sinapse-ai/product/templates/task.hbs +171 -171
  139. package/.sinapse-ai/product/templates/tmpl-comment-on-examples.sql +159 -159
  140. package/.sinapse-ai/product/templates/tmpl-migration-script.sql +92 -92
  141. package/.sinapse-ai/product/templates/tmpl-rls-granular-policies.sql +105 -105
  142. package/.sinapse-ai/product/templates/tmpl-rls-kiss-policy.sql +11 -11
  143. package/.sinapse-ai/product/templates/tmpl-rls-roles.sql +136 -136
  144. package/.sinapse-ai/product/templates/tmpl-rls-simple.sql +78 -78
  145. package/.sinapse-ai/product/templates/tmpl-rls-tenant.sql +153 -153
  146. package/.sinapse-ai/product/templates/tmpl-rollback-script.sql +78 -78
  147. package/.sinapse-ai/product/templates/tmpl-seed-data.sql +141 -141
  148. package/.sinapse-ai/product/templates/tmpl-smoke-test.sql +17 -17
  149. package/.sinapse-ai/product/templates/tmpl-staging-copy-merge.sql +140 -140
  150. package/.sinapse-ai/product/templates/tmpl-stored-proc.sql +141 -141
  151. package/.sinapse-ai/product/templates/tmpl-trigger.sql +153 -153
  152. package/.sinapse-ai/product/templates/tmpl-view-materialized.sql +134 -134
  153. package/.sinapse-ai/product/templates/tmpl-view.sql +178 -178
  154. package/AGENTS.md +193 -0
  155. package/CHANGELOG.md +1247 -0
  156. package/LICENSE +63 -63
  157. package/README.en.md +17 -18
  158. package/README.md +18 -19
  159. package/bin/cli.js +1 -1
  160. package/bin/commands/install.js +194 -22
  161. package/bin/commands/status.js +14 -1
  162. package/bin/commands/uninstall.js +2 -2
  163. package/bin/commands/update.js +52 -0
  164. package/bin/lib/setup-statusline.js +191 -0
  165. package/bin/sinapse-init.js +11 -83
  166. package/bin/utils/framework-guard.js +17 -4
  167. package/bin/utils/secret-scanner-core.js +109 -7
  168. package/bin/utils/staged-sql-guard.js +204 -0
  169. package/bin/utils/validate-publish.js +63 -0
  170. package/docs/agent-reference-guide.md +5 -7
  171. package/docs/framework/agent-prefix-convention.md +58 -0
  172. package/docs/framework/architecture-overview.md +4 -4
  173. package/docs/framework/collaboration-activation.md +45 -0
  174. package/docs/framework/guiding-principles.md +9 -9
  175. package/docs/getting-started.md +1 -1
  176. package/docs/guides/agent-reference.md +1 -1
  177. package/docs/guides/codex-config.md +4 -5
  178. package/docs/pt/architecture/sub-orqx-pattern.md +20 -18
  179. package/docs/security/overview.md +1 -1
  180. package/package.json +16 -12
  181. package/packages/installer/src/index.js +26 -0
  182. package/packages/installer/src/installer/git-hooks-installer.js +211 -47
  183. package/packages/installer/src/installer/sinapse-ai-installer.js +71 -0
  184. package/packages/installer/src/wizard/feedback.js +1 -1
  185. package/packages/installer/src/wizard/ide-config-generator.js +26 -26
  186. package/packages/installer/src/wizard/index.js +53 -4
  187. package/packages/sinapse-install/bin/edmcp.js +0 -0
  188. package/packages/sinapse-install/bin/sinapse-install.js +0 -0
  189. package/scripts/audit-tasks.cjs +112 -91
  190. package/scripts/check-markdown-links.py +352 -352
  191. package/scripts/prepare-hooks.js +58 -0
  192. package/scripts/regenerate-orqx-stubs.ps1 +2 -3
  193. package/scripts/sync-counts.js +10 -2
  194. package/scripts/sync-squad-yaml-components.js +108 -6
  195. package/scripts/validate-agents-md.js +128 -0
  196. package/scripts/validate-all.js +1 -0
  197. package/scripts/validate-squad-orqx.js +19 -9
  198. package/sinapse/agents/sinapse-orqx.md +16 -26
  199. package/sinapse/agents/snps-orqx.md +15 -25
  200. package/sinapse/knowledge-base/routing-catalog.md +1 -1
  201. package/sinapse/tasks/diagnose-and-route.md +1 -1
  202. package/sinapse/tasks/squad-status-report.md +1 -1
  203. package/squads/claude-code-mastery/agents/claude-mastery-chief.md +1 -1
  204. package/squads/claude-code-mastery/agents/hooks-architect.md +60 -68
  205. package/squads/claude-code-mastery/knowledge-base/swarm-orchestration-patterns.md +1 -1
  206. package/squads/claude-code-mastery/squad.yaml +8 -0
  207. package/squads/claude-code-mastery/tasks/audit-setup.md +1 -1
  208. package/squads/claude-code-mastery/workflows/optimization-cycle.yaml +4 -4
  209. package/squads/claude-code-mastery/workflows/project-setup-cycle.yaml +4 -4
  210. package/squads/squad-animations/README.md +1 -1
  211. package/squads/squad-animations/squad.yaml +1 -1
  212. package/squads/squad-brand/squad.yaml +1 -1
  213. package/squads/squad-cloning/README.md +1 -1
  214. package/squads/squad-cloning/squad.yaml +1 -1
  215. package/squads/squad-commercial/README.md +1 -1
  216. package/squads/squad-commercial/squad.yaml +2 -3
  217. package/squads/squad-content/README.md +1 -1
  218. package/squads/squad-content/squad.yaml +1 -1
  219. package/squads/squad-copy/README.md +1 -1
  220. package/squads/squad-copy/squad.yaml +2 -3
  221. package/squads/squad-council/README.md +1 -1
  222. package/squads/squad-courses/README.md +1 -1
  223. package/squads/squad-courses/squad.yaml +1 -1
  224. package/squads/squad-cybersecurity/README.md +1 -1
  225. package/squads/squad-cybersecurity/squad.yaml +2 -3
  226. package/squads/squad-design/README.md +1 -1
  227. package/squads/{squad-artdir → squad-design}/agents/cro-persuasion.md +1 -1
  228. package/squads/{squad-artdir → squad-design}/agents/platform-aesthetic-director.md +2 -2
  229. package/squads/{squad-artdir → squad-design}/agents/premium-packaging-strategist.md +2 -2
  230. package/squads/{squad-artdir → squad-design}/agents/product-surface-director.md +3 -3
  231. package/squads/squad-design/squad.yaml +6 -3
  232. package/squads/squad-finance/README.md +1 -1
  233. package/squads/squad-finance/squad.yaml +7 -1
  234. package/squads/squad-growth/README.md +1 -1
  235. package/squads/squad-growth/squad.yaml +1 -1
  236. package/squads/squad-paidmedia/README.md +1 -1
  237. package/squads/squad-paidmedia/squad.yaml +2 -3
  238. package/squads/squad-product/README.md +1 -1
  239. package/squads/squad-product/squad.yaml +1 -1
  240. package/squads/squad-research/README.md +1 -1
  241. package/squads/squad-research/squad.yaml +2 -3
  242. package/squads/squad-storytelling/README.md +1 -1
  243. package/squads/squad-storytelling/squad.yaml +2 -3
  244. package/.codex/agents/brad-frost.md +0 -46
  245. package/.codex/agents/claude-orqx.md +0 -72
  246. package/.codex/agents/copy-chief.md +0 -162
  247. package/.codex/agents/cyber-chief.md +0 -169
  248. package/.codex/agents/dan-mall.md +0 -43
  249. package/.codex/agents/data-chief.md +0 -198
  250. package/.codex/agents/dave-malouf.md +0 -43
  251. package/.codex/agents/db-sage.md +0 -152
  252. package/.codex/agents/design-chief.md +0 -226
  253. package/.codex/agents/dev.md +0 -102
  254. package/.codex/agents/legal-chief.md +0 -199
  255. package/.codex/agents/nano-banana-generator.md +0 -42
  256. package/.codex/agents/pm.md +0 -81
  257. package/.codex/agents/po.md +0 -85
  258. package/.codex/agents/qa.md +0 -98
  259. package/.codex/agents/sm.md +0 -77
  260. package/.codex/agents/squad-chief.md +0 -1553
  261. package/.codex/agents/squad.md +0 -66
  262. package/.codex/agents/story-chief.md +0 -180
  263. package/.codex/agents/tools-orqx.md +0 -219
  264. package/.codex/agents/traffic-masters-chief.md +0 -211
  265. package/.sinapse-ai/core/memory/__tests__/active-modules.verify.js +0 -265
  266. package/.sinapse-ai/core/permissions/__tests__/permission-mode.test.js +0 -293
  267. package/.sinapse-ai/data/registry-update-log.jsonl +0 -158
  268. package/.sinapse-ai/infrastructure/scripts/ide-sync/gemini-commands.js +0 -298
  269. package/.sinapse-ai/infrastructure/scripts/ide-sync/transformers/antigravity.js +0 -121
  270. package/.sinapse-ai/infrastructure/scripts/ide-sync/transformers/cursor.js +0 -119
  271. package/.sinapse-ai/infrastructure/scripts/ide-sync/transformers/github-copilot.js +0 -191
  272. package/.sinapse-ai/infrastructure/scripts/ide-sync/transformers/kimi.js +0 -448
  273. package/.sinapse-ai/infrastructure/tests/project-status-loader.test.js +0 -569
  274. package/.sinapse-ai/infrastructure/tests/regression-suite-v2.md +0 -622
  275. package/.sinapse-ai/infrastructure/tests/validate-module.js +0 -98
  276. package/.sinapse-ai/infrastructure/tests/worktree-manager.test.js +0 -620
  277. package/.sinapse-ai/monitor/hooks/lib/__init__.py +0 -2
  278. package/.sinapse-ai/monitor/hooks/lib/enrich.py +0 -59
  279. package/.sinapse-ai/monitor/hooks/lib/send_event.py +0 -48
  280. package/.sinapse-ai/monitor/hooks/notification.py +0 -30
  281. package/.sinapse-ai/monitor/hooks/post_tool_use.py +0 -46
  282. package/.sinapse-ai/monitor/hooks/pre_compact.py +0 -30
  283. package/.sinapse-ai/monitor/hooks/pre_tool_use.py +0 -41
  284. package/.sinapse-ai/monitor/hooks/stop.py +0 -30
  285. package/.sinapse-ai/monitor/hooks/subagent_stop.py +0 -30
  286. package/.sinapse-ai/monitor/hooks/user_prompt_submit.py +0 -39
  287. package/.sinapse-ai/product/templates/statusline/track-agent.sh +0 -69
  288. package/.sinapse-ai/workflow-intelligence/__tests__/confidence-scorer.test.js +0 -335
  289. package/.sinapse-ai/workflow-intelligence/__tests__/integration.test.js +0 -340
  290. package/.sinapse-ai/workflow-intelligence/__tests__/suggestion-engine.test.js +0 -438
  291. package/.sinapse-ai/workflow-intelligence/__tests__/wave-analyzer.test.js +0 -448
  292. package/.sinapse-ai/workflow-intelligence/__tests__/workflow-registry.test.js +0 -303
  293. package/bin/sinapse-graph.js +0 -19
  294. package/docs/codex-integration-process.md +0 -22
  295. package/docs/codex-parity-program.md +0 -27
  296. package/packages/installer/src/__tests__/performance-benchmark.js +0 -383
  297. package/packages/installer/tests/integration/environment-configuration.test.js +0 -332
  298. package/packages/installer/tests/integration/wizard-detection.test.js +0 -352
  299. package/packages/installer/tests/unit/artifact-copy-pipeline/artifact-copy-pipeline.test.js +0 -383
  300. package/packages/installer/tests/unit/claude-md-template-v5/claude-md-template-v5.test.js +0 -193
  301. package/packages/installer/tests/unit/config-validator.test.js +0 -315
  302. package/packages/installer/tests/unit/detection/detect-project-type.test.js +0 -539
  303. package/packages/installer/tests/unit/doctor/doctor-checks.test.js +0 -636
  304. package/packages/installer/tests/unit/doctor/doctor-orchestrator.test.js +0 -192
  305. package/packages/installer/tests/unit/entity-registry-bootstrap.test.js +0 -186
  306. package/packages/installer/tests/unit/env-template.test.js +0 -187
  307. package/packages/installer/tests/unit/generate-settings-json/generate-settings-json.test.js +0 -310
  308. package/packages/installer/tests/unit/git-hooks-installer.test.js +0 -262
  309. package/packages/installer/tests/unit/ide-sync-integration/ide-sync-integration.test.js +0 -231
  310. package/packages/installer/tests/unit/merger/env-merger.test.js +0 -191
  311. package/packages/installer/tests/unit/merger/markdown-merger.test.js +0 -262
  312. package/packages/installer/tests/unit/merger/strategies.test.js +0 -154
  313. package/packages/installer/tests/unit/merger/yaml-merger.test.js +0 -328
  314. package/packages/sinapse-install/tests/unit/chrome-brain.smoke.test.js +0 -66
  315. package/scripts/install-monitor-hooks.sh +0 -82
  316. package/squads/squad-artdir/README.md +0 -90
  317. package/squads/squad-artdir/agents/accessibility-guardian.md +0 -184
  318. package/squads/squad-artdir/agents/artdir-orqx.md +0 -222
  319. package/squads/squad-artdir/agents/color-psychologist.md +0 -166
  320. package/squads/squad-artdir/agents/design-system-architect.md +0 -100
  321. package/squads/squad-artdir/agents/ia-architect.md +0 -169
  322. package/squads/squad-artdir/agents/interaction-designer.md +0 -162
  323. package/squads/squad-artdir/agents/layout-engineer.md +0 -163
  324. package/squads/squad-artdir/agents/motion-architect.md +0 -185
  325. package/squads/squad-artdir/agents/type-systemist.md +0 -138
  326. package/squads/squad-artdir/agents/visual-strategist.md +0 -127
  327. package/squads/squad-artdir/checklists/seven-pillars-validation-checklist.md +0 -172
  328. package/squads/squad-artdir/knowledge-base/case-nyo-ia-reference.md +0 -289
  329. package/squads/squad-artdir/knowledge-base/deliverables-templates.md +0 -457
  330. package/squads/squad-artdir/knowledge-base/motion-technique-catalog.md +0 -247
  331. package/squads/squad-artdir/knowledge-base/premium-packaging-principles.md +0 -133
  332. package/squads/squad-artdir/knowledge-base/psychological-toolkit.md +0 -229
  333. package/squads/squad-artdir/knowledge-base/saas-art-direction-canon.md +0 -242
  334. package/squads/squad-artdir/knowledge-base/seven-pillars-framework.md +0 -289
  335. package/squads/squad-artdir/knowledge-base/ten-pillars-framework.md +0 -221
  336. package/squads/squad-artdir/package.json +0 -20
  337. package/squads/squad-artdir/squad.yaml +0 -299
  338. package/squads/squad-artdir/tasks/audit-conversion.md +0 -97
  339. package/squads/squad-artdir/tasks/audit-drift-multi-surface.md +0 -55
  340. package/squads/squad-artdir/tasks/consult-saas-canon.md +0 -54
  341. package/squads/squad-artdir/tasks/create-art-direction-brief.md +0 -110
  342. package/squads/squad-artdir/tasks/create-premium-packaging-brief.md +0 -61
  343. package/squads/squad-artdir/tasks/create-wireflow.md +0 -84
  344. package/squads/squad-artdir/tasks/design-color-system.md +0 -81
  345. package/squads/squad-artdir/tasks/design-product-surface.md +0 -60
  346. package/squads/squad-artdir/tasks/design-token-system.md +0 -58
  347. package/squads/squad-artdir/tasks/diagnose-visual-language.md +0 -92
  348. package/squads/squad-artdir/tasks/first-5-minutes-choreography.md +0 -65
  349. package/squads/squad-artdir/tasks/specify-motion-system.md +0 -84
  350. package/squads/squad-artdir/tasks/validate-against-pillars.md +0 -143
  351. package/squads/squad-artdir/templates/art-direction-brief-template.md +0 -215
  352. package/squads/squad-artdir/workflows/conversion-audit-cycle.yaml +0 -142
  353. package/squads/squad-artdir/workflows/full-art-direction-cycle.yaml +0 -179
  354. package/squads/squad-artdir/workflows/saas-platform-art-direction-cycle.yaml +0 -338
  355. package/squads/squad-commercial/agents/legal-chief.md +0 -199
  356. package/squads/squad-copy/agents/copy-chief.md +0 -162
  357. package/squads/squad-cybersecurity/agents/cyber-chief.md +0 -169
  358. package/squads/squad-design/agents/design-chief.md +0 -226
  359. package/squads/squad-paidmedia/agents/traffic-masters-chief.md +0 -211
  360. package/squads/squad-research/agents/data-chief.md +0 -198
  361. package/squads/squad-storytelling/agents/story-chief.md +0 -180
@@ -1,569 +0,0 @@
1
- /**
2
- * @jest-environment node
3
- */
4
-
5
- const fs = require('fs').promises;
6
- const path = require('path');
7
- const os = require('os');
8
- const yaml = require('js-yaml');
9
- const { ProjectStatusLoader } = require('../scripts/project-status-loader');
10
-
11
- describe('ProjectStatusLoader', () => {
12
- let loader;
13
- let testRoot;
14
- let cacheFile;
15
-
16
- beforeEach(async () => {
17
- // Use OS temp directory to ensure complete isolation from parent git repo
18
- testRoot = await fs.mkdtemp(path.join(os.tmpdir(), 'sinapse-test-'));
19
- loader = new ProjectStatusLoader(testRoot);
20
- cacheFile = path.join(testRoot, '.sinapse', 'project-status.yaml');
21
- });
22
-
23
- afterEach(async () => {
24
- // Cleanup test directory
25
- try {
26
- await fs.rm(testRoot, { recursive: true, force: true });
27
- } catch (error) {
28
- // Ignore cleanup errors
29
- }
30
- });
31
-
32
- describe('isGitRepository', () => {
33
- it('should return false for non-git directory', async () => {
34
- // testRoot already created by mkdtemp in beforeEach
35
- const isGit = await loader.isGitRepository();
36
- expect(isGit).toBe(false);
37
- });
38
-
39
- it('should return true for git repository', async () => {
40
- // This test requires actual git - skip in CI if git not available
41
- // testRoot already created by mkdtemp in beforeEach
42
-
43
- // Try to initialize git
44
- try {
45
- const { execa } = require('execa');
46
- await execa('git', ['init'], { cwd: testRoot });
47
- const isGit = await loader.isGitRepository();
48
- expect(isGit).toBe(true);
49
- } catch (error) {
50
- console.warn('Git not available, skipping test');
51
- expect(true).toBe(true); // Skip test gracefully
52
- }
53
- });
54
- });
55
-
56
- describe('getGitBranch', () => {
57
- it('should return unknown on error', async () => {
58
- // testRoot already created by mkdtemp in beforeEach
59
- const branch = await loader.getGitBranch();
60
- expect(branch).toBe('unknown');
61
- });
62
-
63
- it('should detect git branch', async () => {
64
- // testRoot already created by mkdtemp in beforeEach
65
-
66
- try {
67
- const { execa } = require('execa');
68
- await execa('git', ['init'], { cwd: testRoot });
69
-
70
- // Create initial commit
71
- await fs.writeFile(path.join(testRoot, 'test.txt'), 'test');
72
- await execa('git', ['config', 'user.email', 'test@test.com'], { cwd: testRoot });
73
- await execa('git', ['config', 'user.name', 'Test User'], { cwd: testRoot });
74
- await execa('git', ['add', '.'], { cwd: testRoot });
75
- await execa('git', ['commit', '-m', 'Initial commit'], { cwd: testRoot });
76
-
77
- const branch = await loader.getGitBranch();
78
- expect(['main', 'master']).toContain(branch);
79
- } catch (error) {
80
- console.warn('Git not available, skipping test');
81
- expect(true).toBe(true);
82
- }
83
- });
84
- });
85
-
86
- describe('getModifiedFiles', () => {
87
- it('should return empty result for non-git repo', async () => {
88
- // testRoot already created by mkdtemp in beforeEach
89
- const result = await loader.getModifiedFiles();
90
- // Implementation returns { files: [], totalCount: 0 } for non-git repos
91
- expect(result.files || result).toEqual([]);
92
- });
93
-
94
- it('should detect modified files', async () => {
95
- // testRoot already created by mkdtemp in beforeEach
96
-
97
- try {
98
- const { execa } = require('execa');
99
- await execa('git', ['init'], { cwd: testRoot });
100
- await execa('git', ['config', 'user.email', 'test@test.com'], { cwd: testRoot });
101
- await execa('git', ['config', 'user.name', 'Test User'], { cwd: testRoot });
102
-
103
- // Create and commit initial file
104
- await fs.writeFile(path.join(testRoot, 'existing.txt'), 'existing');
105
- await execa('git', ['add', '.'], { cwd: testRoot });
106
- await execa('git', ['commit', '-m', 'Initial'], { cwd: testRoot });
107
-
108
- // Modify file
109
- await fs.writeFile(path.join(testRoot, 'existing.txt'), 'modified');
110
-
111
- const files = await loader.getModifiedFiles();
112
- expect(files).toContain('existing.txt');
113
- } catch (error) {
114
- console.warn('Git not available, skipping test');
115
- expect(true).toBe(true);
116
- }
117
- });
118
-
119
- it('should limit to 5 files maximum', async () => {
120
- // testRoot already created by mkdtemp in beforeEach
121
-
122
- try {
123
- const { execa } = require('execa');
124
- await execa('git', ['init'], { cwd: testRoot });
125
- await execa('git', ['config', 'user.email', 'test@test.com'], { cwd: testRoot });
126
- await execa('git', ['config', 'user.name', 'Test User'], { cwd: testRoot });
127
-
128
- // Create 7 files
129
- for (let i = 0; i < 7; i++) {
130
- await fs.writeFile(path.join(testRoot, `file${i}.txt`), 'content');
131
- }
132
-
133
- const files = await loader.getModifiedFiles();
134
- expect(files.length).toBeLessThanOrEqual(5);
135
- } catch (error) {
136
- console.warn('Git not available, skipping test');
137
- expect(true).toBe(true);
138
- }
139
- });
140
- });
141
-
142
- describe('getRecentCommits', () => {
143
- it('should return empty array for non-git repo', async () => {
144
- // testRoot already created by mkdtemp in beforeEach
145
- const commits = await loader.getRecentCommits();
146
- expect(commits).toEqual([]);
147
- });
148
-
149
- it('should return empty array for repo with no commits', async () => {
150
- // testRoot already created by mkdtemp in beforeEach
151
-
152
- try {
153
- const { execa } = require('execa');
154
- await execa('git', ['init'], { cwd: testRoot });
155
-
156
- const commits = await loader.getRecentCommits();
157
- expect(commits).toEqual([]);
158
- } catch (error) {
159
- console.warn('Git not available, skipping test');
160
- expect(true).toBe(true);
161
- }
162
- });
163
-
164
- it('should limit to 2 commits', async () => {
165
- // testRoot already created by mkdtemp in beforeEach
166
-
167
- try {
168
- const { execa } = require('execa');
169
- await execa('git', ['init'], { cwd: testRoot });
170
- await execa('git', ['config', 'user.email', 'test@test.com'], { cwd: testRoot });
171
- await execa('git', ['config', 'user.name', 'Test User'], { cwd: testRoot });
172
-
173
- // Create 3 commits
174
- for (let i = 0; i < 3; i++) {
175
- await fs.writeFile(path.join(testRoot, `file${i}.txt`), 'content');
176
- await execa('git', ['add', '.'], { cwd: testRoot });
177
- await execa('git', ['commit', '-m', `Commit ${i}`], { cwd: testRoot });
178
- }
179
-
180
- const commits = await loader.getRecentCommits();
181
- expect(commits.length).toBeLessThanOrEqual(2);
182
- } catch (error) {
183
- console.warn('Git not available, skipping test');
184
- expect(true).toBe(true);
185
- }
186
- });
187
- });
188
-
189
- describe('getCurrentStoryInfo', () => {
190
- it('should return null when stories directory missing', async () => {
191
- // testRoot already created by mkdtemp in beforeEach
192
- const info = await loader.getCurrentStoryInfo();
193
- expect(info).toEqual({ story: null, epic: null });
194
- });
195
-
196
- it('should detect InProgress story', async () => {
197
- await fs.mkdir(path.join(testRoot, 'docs', 'stories'), { recursive: true });
198
-
199
- const storyContent = `# Story 6.1.2.4
200
-
201
- **Story ID:** STORY-6.1.2.4
202
- **Epic:** Epic 6.1 - Agent Identity
203
- **Status:** InProgress
204
-
205
- ## Description
206
- Test story
207
- `;
208
-
209
- await fs.writeFile(path.join(testRoot, 'docs', 'stories', 'story-6.1.2.4.md'), storyContent);
210
-
211
- const info = await loader.getCurrentStoryInfo();
212
- expect(info.story).toBe('STORY-6.1.2.4');
213
- expect(info.epic).toContain('Epic 6.1');
214
- });
215
-
216
- it('should handle multiple story files correctly', async () => {
217
- await fs.mkdir(path.join(testRoot, 'docs', 'stories'), { recursive: true });
218
-
219
- // Create one completed story
220
- await fs.writeFile(
221
- path.join(testRoot, 'docs', 'stories', 'story-1.md'),
222
- '**Status:** Completed',
223
- );
224
-
225
- // Create one in progress story
226
- await fs.writeFile(
227
- path.join(testRoot, 'docs', 'stories', 'story-2.md'),
228
- '**Status:** InProgress\n**Story ID:** STORY-2',
229
- );
230
-
231
- const info = await loader.getCurrentStoryInfo();
232
- expect(info.story).toBe('STORY-2');
233
- });
234
- });
235
-
236
- describe('Cache Management', () => {
237
- it('should create cache file on first load', async () => {
238
- // testRoot already created by mkdtemp in beforeEach
239
-
240
- const status = await loader.loadProjectStatus();
241
-
242
- // Check cache file exists
243
- const cacheExists = await fs
244
- .access(cacheFile)
245
- .then(() => true)
246
- .catch(() => false);
247
-
248
- expect(cacheExists).toBe(true);
249
- });
250
-
251
- it('should return cached status within TTL', async () => {
252
- // testRoot already created by mkdtemp in beforeEach
253
-
254
- // First load
255
- const status1 = await loader.loadProjectStatus();
256
- const time1 = status1.lastUpdate;
257
-
258
- // Immediate second load (within TTL)
259
- const status2 = await loader.loadProjectStatus();
260
- const time2 = status2.lastUpdate;
261
-
262
- // Should return same cached status
263
- expect(time1).toBe(time2);
264
- });
265
-
266
- it('should invalidate cache after TTL expires', async () => {
267
- // testRoot already created by mkdtemp in beforeEach
268
-
269
- // Override TTL to 0 seconds for testing
270
- loader.cacheTTL = 0;
271
-
272
- // First load
273
- const status1 = await loader.loadProjectStatus();
274
- const time1 = status1.lastUpdate;
275
-
276
- // Wait 10ms
277
- await new Promise((resolve) => setTimeout(resolve, 10));
278
-
279
- // Second load (after TTL)
280
- const status2 = await loader.loadProjectStatus();
281
- const time2 = status2.lastUpdate;
282
-
283
- // Should be different timestamps
284
- expect(time1).not.toBe(time2);
285
- });
286
-
287
- it('should clear cache successfully', async () => {
288
- // testRoot already created by mkdtemp in beforeEach
289
-
290
- // Create cache
291
- await loader.loadProjectStatus();
292
-
293
- // Clear cache
294
- const cleared = await loader.clearCache();
295
- expect(cleared).toBe(true);
296
-
297
- // Check cache file deleted
298
- const cacheExists = await fs
299
- .access(cacheFile)
300
- .then(() => true)
301
- .catch(() => false);
302
-
303
- expect(cacheExists).toBe(false);
304
- });
305
- });
306
-
307
- describe('Edge Cases', () => {
308
- it('should handle detached HEAD state', async () => {
309
- // testRoot already created by mkdtemp in beforeEach
310
-
311
- try {
312
- const { execa } = require('execa');
313
- await execa('git', ['init'], { cwd: testRoot });
314
- await execa('git', ['config', 'user.email', 'test@test.com'], { cwd: testRoot });
315
- await execa('git', ['config', 'user.name', 'Test User'], { cwd: testRoot });
316
-
317
- // Create commit
318
- await fs.writeFile(path.join(testRoot, 'test.txt'), 'test');
319
- await execa('git', ['add', '.'], { cwd: testRoot });
320
- await execa('git', ['commit', '-m', 'Initial'], { cwd: testRoot });
321
-
322
- // Get commit hash
323
- const { stdout: hash } = await execa('git', ['rev-parse', 'HEAD'], { cwd: testRoot });
324
-
325
- // Checkout detached HEAD
326
- await execa('git', ['checkout', hash.trim()], { cwd: testRoot });
327
-
328
- const branch = await loader.getGitBranch();
329
- expect(typeof branch).toBe('string');
330
- } catch (error) {
331
- console.warn('Git not available, skipping test');
332
- expect(true).toBe(true);
333
- }
334
- });
335
-
336
- it('should gracefully handle non-git project', async () => {
337
- // testRoot already created by mkdtemp in beforeEach
338
-
339
- const status = await loader.loadProjectStatus();
340
-
341
- expect(status.isGitRepo).toBe(false);
342
- expect(status.branch).toBeNull();
343
- expect(status.modifiedFiles).toEqual([]);
344
- expect(status.recentCommits).toEqual([]);
345
- });
346
- });
347
-
348
- describe('formatStatusDisplay', () => {
349
- it('should format git status correctly', () => {
350
- const status = {
351
- isGitRepo: true,
352
- branch: 'main',
353
- modifiedFiles: ['file1.md', 'file2.js'],
354
- recentCommits: ['chore: cleanup', 'feat: new feature'],
355
- currentStory: 'STORY-123',
356
- lastUpdate: new Date().toISOString(),
357
- };
358
-
359
- const display = loader.formatStatusDisplay(status);
360
-
361
- expect(display).toContain('Branch: main');
362
- expect(display).toContain('Modified: file1.md, file2.js');
363
- expect(display).toContain('Recent: chore: cleanup, feat: new feature');
364
- expect(display).toContain('Story: STORY-123');
365
- });
366
-
367
- it('should handle non-git repo message', () => {
368
- const status = {
369
- isGitRepo: false,
370
- branch: null,
371
- modifiedFiles: [],
372
- recentCommits: [],
373
- currentStory: null,
374
- lastUpdate: new Date().toISOString(),
375
- };
376
-
377
- const display = loader.formatStatusDisplay(status);
378
- expect(display).toContain('Not a git repository');
379
- });
380
-
381
- it('should handle clean repository', () => {
382
- const status = {
383
- isGitRepo: true,
384
- branch: 'main',
385
- modifiedFiles: [],
386
- recentCommits: [],
387
- currentStory: null,
388
- lastUpdate: new Date().toISOString(),
389
- };
390
-
391
- const display = loader.formatStatusDisplay(status);
392
- expect(display).toContain('Branch: main');
393
- });
394
-
395
- // Story 1.5: Worktree Status Integration tests
396
- it('should display worktrees summary in status', () => {
397
- const status = {
398
- isGitRepo: true,
399
- branch: 'main',
400
- modifiedFiles: [],
401
- recentCommits: [],
402
- currentStory: null,
403
- lastUpdate: new Date().toISOString(),
404
- worktrees: {
405
- 'STORY-42': {
406
- path: '.sinapse/worktrees/STORY-42',
407
- branch: 'auto-claude/STORY-42',
408
- createdAt: '2026-01-28T10:00:00Z',
409
- lastActivity: '2026-01-28T12:30:00Z',
410
- uncommittedChanges: 3,
411
- status: 'active',
412
- },
413
- 'STORY-43': {
414
- path: '.sinapse/worktrees/STORY-43',
415
- branch: 'auto-claude/STORY-43',
416
- createdAt: '2026-01-27T10:00:00Z',
417
- lastActivity: '2026-01-27T12:30:00Z',
418
- uncommittedChanges: 0,
419
- status: 'active',
420
- },
421
- },
422
- };
423
-
424
- const display = loader.formatStatusDisplay(status);
425
- expect(display).toContain('Worktrees:');
426
- expect(display).toContain('2/2 active');
427
- expect(display).toContain('1 with changes');
428
- });
429
-
430
- it('should not display worktrees section when empty', () => {
431
- const status = {
432
- isGitRepo: true,
433
- branch: 'main',
434
- modifiedFiles: [],
435
- recentCommits: [],
436
- currentStory: null,
437
- lastUpdate: new Date().toISOString(),
438
- worktrees: {},
439
- };
440
-
441
- const display = loader.formatStatusDisplay(status);
442
- expect(display).not.toContain('Worktrees:');
443
- });
444
-
445
- it('should not display worktrees section when undefined', () => {
446
- const status = {
447
- isGitRepo: true,
448
- branch: 'main',
449
- modifiedFiles: [],
450
- recentCommits: [],
451
- currentStory: null,
452
- lastUpdate: new Date().toISOString(),
453
- };
454
-
455
- const display = loader.formatStatusDisplay(status);
456
- expect(display).not.toContain('Worktrees:');
457
- });
458
- });
459
-
460
- // Story 1.5: Worktree Status Integration
461
- describe('getWorktreesStatus', () => {
462
- it('should return null when no worktrees exist', async () => {
463
- // testRoot already created by mkdtemp in beforeEach
464
-
465
- const worktrees = await loader.getWorktreesStatus();
466
- expect(worktrees).toBeNull();
467
- });
468
-
469
- it('should return worktree info with required fields', async () => {
470
- // testRoot already created by mkdtemp in beforeEach
471
-
472
- try {
473
- const { execa } = require('execa');
474
- await execa('git', ['init'], { cwd: testRoot });
475
- await execa('git', ['config', 'user.email', 'test@test.com'], { cwd: testRoot });
476
- await execa('git', ['config', 'user.name', 'Test User'], { cwd: testRoot });
477
-
478
- // Create initial commit (required for worktree)
479
- await fs.writeFile(path.join(testRoot, 'test.txt'), 'test');
480
- await execa('git', ['add', '.'], { cwd: testRoot });
481
- await execa('git', ['commit', '-m', 'Initial commit'], { cwd: testRoot });
482
-
483
- // Create worktree manually
484
- const worktreePath = path.join(testRoot, '.sinapse', 'worktrees', 'STORY-TEST');
485
- await execa('git', ['worktree', 'add', worktreePath, '-b', 'auto-claude/STORY-TEST'], {
486
- cwd: testRoot,
487
- });
488
-
489
- const worktrees = await loader.getWorktreesStatus();
490
-
491
- expect(worktrees).not.toBeNull();
492
- expect(worktrees['STORY-TEST']).toBeDefined();
493
- expect(worktrees['STORY-TEST'].path).toContain('STORY-TEST');
494
- expect(worktrees['STORY-TEST'].branch).toBe('auto-claude/STORY-TEST');
495
- expect(worktrees['STORY-TEST'].createdAt).toBeDefined();
496
- expect(worktrees['STORY-TEST'].lastActivity).toBeDefined();
497
- expect(typeof worktrees['STORY-TEST'].uncommittedChanges).toBe('number');
498
- expect(['active', 'stale']).toContain(worktrees['STORY-TEST'].status);
499
-
500
- // Cleanup worktree
501
- await execa('git', ['worktree', 'remove', worktreePath, '--force'], { cwd: testRoot });
502
- await execa('git', ['branch', '-D', 'auto-claude/STORY-TEST'], { cwd: testRoot });
503
- } catch (error) {
504
- console.warn('Git not available, skipping test:', error.message);
505
- expect(true).toBe(true);
506
- }
507
- });
508
- });
509
-
510
- describe('generateStatus with worktrees', () => {
511
- it('should include worktrees in generated status', async () => {
512
- // testRoot already created by mkdtemp in beforeEach
513
-
514
- try {
515
- const { execa } = require('execa');
516
- await execa('git', ['init'], { cwd: testRoot });
517
- await execa('git', ['config', 'user.email', 'test@test.com'], { cwd: testRoot });
518
- await execa('git', ['config', 'user.name', 'Test User'], { cwd: testRoot });
519
-
520
- // Create initial commit
521
- await fs.writeFile(path.join(testRoot, 'test.txt'), 'test');
522
- await execa('git', ['add', '.'], { cwd: testRoot });
523
- await execa('git', ['commit', '-m', 'Initial commit'], { cwd: testRoot });
524
-
525
- // Create worktree
526
- const worktreePath = path.join(testRoot, '.sinapse', 'worktrees', 'STORY-GEN');
527
- await execa('git', ['worktree', 'add', worktreePath, '-b', 'auto-claude/STORY-GEN'], {
528
- cwd: testRoot,
529
- });
530
-
531
- const status = await loader.generateStatus();
532
-
533
- expect(status.worktrees).toBeDefined();
534
- expect(status.worktrees['STORY-GEN']).toBeDefined();
535
-
536
- // Cleanup
537
- await execa('git', ['worktree', 'remove', worktreePath, '--force'], { cwd: testRoot });
538
- await execa('git', ['branch', '-D', 'auto-claude/STORY-GEN'], { cwd: testRoot });
539
- } catch (error) {
540
- console.warn('Git not available, skipping test:', error.message);
541
- expect(true).toBe(true);
542
- }
543
- });
544
-
545
- it('should not include worktrees key when none exist', async () => {
546
- // testRoot already created by mkdtemp in beforeEach
547
-
548
- try {
549
- const { execa } = require('execa');
550
- await execa('git', ['init'], { cwd: testRoot });
551
- await execa('git', ['config', 'user.email', 'test@test.com'], { cwd: testRoot });
552
- await execa('git', ['config', 'user.name', 'Test User'], { cwd: testRoot });
553
-
554
- await fs.writeFile(path.join(testRoot, 'test.txt'), 'test');
555
- await execa('git', ['add', '.'], { cwd: testRoot });
556
- await execa('git', ['commit', '-m', 'Initial commit'], { cwd: testRoot });
557
-
558
- const status = await loader.generateStatus();
559
-
560
- // worktrees should be undefined (not included) when none exist
561
- expect(status.worktrees).toBeUndefined();
562
- } catch (error) {
563
- console.warn('Git not available, skipping test:', error.message);
564
- expect(true).toBe(true);
565
- }
566
- });
567
- });
568
- });
569
-