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.
- package/.claude/hooks/mind-clone-governance.py +212 -212
- package/.claude/hooks/read-protection.py +152 -152
- package/.claude/hooks/slug-validation.py +175 -175
- package/.claude/hooks/sql-governance.py +183 -183
- package/.claude/rules/documentation-first.md +1 -1
- package/.claude/rules/hook-governance.md +1 -1
- package/.claude/rules/mandatory-delegation.md +1 -1
- package/.claude/rules/project-intelligence.md +1 -1
- package/.codex/agents/analyst.md +4 -371
- package/.codex/agents/animations-orqx.md +4 -57
- package/.codex/agents/architect.md +4 -560
- package/.codex/agents/brand-orqx.md +4 -95
- package/.codex/agents/claude-mastery-chief.md +4 -0
- package/.codex/agents/cloning-orqx.md +4 -70
- package/.codex/agents/commercial-orqx.md +4 -67
- package/.codex/agents/config-engineer.md +2 -2
- package/.codex/agents/content-orqx.md +4 -77
- package/.codex/agents/copy-orqx.md +4 -65
- package/.codex/agents/cost-optimizer.md +4 -0
- package/.codex/agents/council-orqx.md +4 -68
- package/.codex/agents/courses-orqx.md +4 -64
- package/.codex/agents/cro-persuasion.md +4 -0
- package/.codex/agents/cyber-orqx.md +4 -67
- package/.codex/agents/data-engineer.md +4 -542
- package/.codex/agents/design-orqx.md +4 -65
- package/.codex/agents/design-system.md +4 -210
- package/.codex/agents/developer.md +4 -666
- package/.codex/agents/devops.md +4 -668
- package/.codex/agents/finance-orqx.md +4 -57
- package/.codex/agents/fiscal-compliance-br.md +4 -0
- package/.codex/agents/forecast-strategist.md +4 -0
- package/.codex/agents/growth-orqx.md +4 -75
- package/.codex/agents/hooks-architect.md +2 -2
- package/.codex/agents/mcp-integrator.md +2 -2
- package/.codex/agents/paidmedia-orqx.md +4 -67
- package/.codex/agents/platform-aesthetic-director.md +4 -0
- package/.codex/agents/premium-packaging-strategist.md +4 -0
- package/.codex/agents/product-lead.md +4 -371
- package/.codex/agents/product-orqx.md +4 -57
- package/.codex/agents/product-surface-director.md +4 -0
- package/.codex/agents/project-integrator.md +2 -2
- package/.codex/agents/project-lead.md +4 -414
- package/.codex/agents/quality-gate.md +4 -547
- package/.codex/agents/research-orqx.md +4 -67
- package/.codex/agents/roadmap-sentinel.md +2 -2
- package/.codex/agents/skill-craftsman.md +2 -2
- package/.codex/agents/snps-orqx.md +4 -684
- package/.codex/agents/sop-extractor.md +4 -61
- package/.codex/agents/sprint-lead.md +4 -324
- package/.codex/agents/squad-creator.md +4 -402
- package/.codex/agents/storytelling-orqx.md +4 -65
- package/.codex/agents/swarm-orqx.md +4 -64
- package/.codex/agents/ux-design-expert.md +4 -532
- package/.codex/agents/ux-designer.md +4 -124
- package/.codex/command-registry.json +9 -9
- package/.codex/delegation-matrix.json +375 -839
- package/.codex/delegation-parity.json +658 -0
- package/.codex/handoff-packet.parity.schema.json +148 -0
- package/.codex/handoff-packet.template.json +26 -0
- package/.codex/instructions.md +8 -8
- package/.codex/scripts/resolve-codex-agent.js +482 -0
- package/.codex/scripts/resolve-codex-command.js +75 -12
- package/.codex/scripts/resolve-codex-delegation.js +131 -92
- package/.codex/skills/sinapse-claude/SKILL.md +3 -3
- package/.codex/skills/sinapse-po/SKILL.md +1 -1
- package/.codex/tasks/resolve-sinapse-conflict.md +1 -1
- package/.sinapse-ai/constitution.md +5 -5
- package/.sinapse-ai/core/doctor/checks/git-hooks.js +163 -19
- package/.sinapse-ai/core/events/dashboard-emitter.js +30 -9
- package/.sinapse-ai/core/execution/subagent-dispatcher.js +1 -1
- package/.sinapse-ai/core/synapse/engine.js +15 -0
- package/.sinapse-ai/core/ui/observability-panel.js +240 -0
- package/.sinapse-ai/core-config.yaml +0 -20
- package/.sinapse-ai/data/entity-registry.yaml +185 -236
- package/.sinapse-ai/development/agents/snps-orqx.md +16 -26
- package/.sinapse-ai/development/tasks/build-autonomous.md +11 -1
- package/.sinapse-ai/development/tasks/build-resume.md +8 -0
- package/.sinapse-ai/development/tasks/build-status.md +8 -0
- package/.sinapse-ai/development/tasks/build.md +8 -0
- package/.sinapse-ai/development/tasks/cleanup-worktrees.md +8 -1
- package/.sinapse-ai/development/tasks/gotcha.md +8 -0
- package/.sinapse-ai/development/tasks/gotchas.md +8 -0
- package/.sinapse-ai/development/tasks/ids-health.md +14 -6
- package/.sinapse-ai/development/tasks/list-mcps.md +15 -0
- package/.sinapse-ai/development/tasks/merge-worktree.md +8 -1
- package/.sinapse-ai/development/tasks/qa-review-build.md +18 -0
- package/.sinapse-ai/development/tasks/remove-mcp.md +8 -1
- package/.sinapse-ai/development/tasks/validate-agents.md +26 -14
- package/.sinapse-ai/development/templates/service-template/README.md.hbs +159 -159
- package/.sinapse-ai/development/templates/service-template/__tests__/index.test.ts.hbs +238 -238
- package/.sinapse-ai/development/templates/service-template/client.ts.hbs +404 -404
- package/.sinapse-ai/development/templates/service-template/errors.ts.hbs +183 -183
- package/.sinapse-ai/development/templates/service-template/index.ts.hbs +121 -121
- package/.sinapse-ai/development/templates/service-template/package.json.hbs +88 -88
- package/.sinapse-ai/development/templates/service-template/types.ts.hbs +146 -146
- package/.sinapse-ai/development/templates/squad-template/LICENSE +22 -22
- package/.sinapse-ai/git-hooks/lib/framework-guard.js +258 -0
- package/.sinapse-ai/git-hooks/lib/secret-scanner-core.js +355 -0
- package/.sinapse-ai/git-hooks/lib/staged-secret-scan.js +179 -0
- package/.sinapse-ai/git-hooks/lib/staged-sql-guard.js +204 -0
- package/.sinapse-ai/git-hooks/post-commit +28 -0
- package/.sinapse-ai/git-hooks/pre-commit +81 -0
- package/.sinapse-ai/git-hooks/pre-push +83 -0
- package/.sinapse-ai/hooks/ids-post-commit.js +13 -11
- package/.sinapse-ai/hooks/ids-pre-push.js +9 -7
- package/.sinapse-ai/infrastructure/scripts/codex-parity/resolve.js +161 -0
- package/.sinapse-ai/infrastructure/scripts/dashboard-status-writer.js +6 -2
- package/.sinapse-ai/infrastructure/scripts/ide-sync/index.js +65 -68
- package/.sinapse-ai/infrastructure/scripts/sync-codex-local-first.js +156 -1
- package/.sinapse-ai/infrastructure/scripts/validate-codex-delegation.js +1 -4
- package/.sinapse-ai/infrastructure/scripts/validate-codex-integration.js +41 -5
- package/.sinapse-ai/infrastructure/templates/coderabbit.yaml.template +280 -280
- package/.sinapse-ai/infrastructure/templates/config/env.example +16 -16
- package/.sinapse-ai/infrastructure/templates/config/gitignore-additions.tmpl +59 -59
- package/.sinapse-ai/infrastructure/templates/github/CODEOWNERS.template +12 -12
- package/.sinapse-ai/infrastructure/templates/github-workflows/ci.yml.template +170 -170
- package/.sinapse-ai/infrastructure/templates/github-workflows/pr-automation.yml.template +331 -331
- package/.sinapse-ai/infrastructure/templates/github-workflows/release.yml.template +197 -197
- package/.sinapse-ai/infrastructure/templates/gitignore/gitignore-brownfield-merge.tmpl +19 -19
- package/.sinapse-ai/infrastructure/templates/gitignore/gitignore-node.tmpl +86 -86
- package/.sinapse-ai/infrastructure/templates/gitignore/gitignore-python.tmpl +146 -146
- package/.sinapse-ai/infrastructure/templates/gitignore/gitignore-sinapse-base.tmpl +64 -64
- package/.sinapse-ai/infrastructure/templates/safe-collab/CODEOWNERS.template +16 -16
- package/.sinapse-ai/infrastructure/templates/sinapse-sync.yaml.template +183 -183
- package/.sinapse-ai/install-manifest.yaml +112 -164
- package/.sinapse-ai/local-config.yaml.template +65 -65
- package/.sinapse-ai/product/templates/adr.hbs +126 -126
- package/.sinapse-ai/product/templates/dbdr.hbs +242 -242
- package/.sinapse-ai/product/templates/epic.hbs +213 -213
- package/.sinapse-ai/product/templates/ide-rules/codex-rules.md +30 -0
- package/.sinapse-ai/product/templates/pmdr.hbs +187 -187
- package/.sinapse-ai/product/templates/prd-v2.0.hbs +217 -217
- package/.sinapse-ai/product/templates/prd.hbs +202 -202
- package/.sinapse-ai/product/templates/statusline/statusline-script.js +31 -8
- package/.sinapse-ai/product/templates/statusline/track-agent-clear.cjs +79 -0
- package/.sinapse-ai/product/templates/statusline/track-agent.cjs +218 -0
- package/.sinapse-ai/product/templates/story.hbs +264 -264
- package/.sinapse-ai/product/templates/task.hbs +171 -171
- package/.sinapse-ai/product/templates/tmpl-comment-on-examples.sql +159 -159
- package/.sinapse-ai/product/templates/tmpl-migration-script.sql +92 -92
- package/.sinapse-ai/product/templates/tmpl-rls-granular-policies.sql +105 -105
- package/.sinapse-ai/product/templates/tmpl-rls-kiss-policy.sql +11 -11
- package/.sinapse-ai/product/templates/tmpl-rls-roles.sql +136 -136
- package/.sinapse-ai/product/templates/tmpl-rls-simple.sql +78 -78
- package/.sinapse-ai/product/templates/tmpl-rls-tenant.sql +153 -153
- package/.sinapse-ai/product/templates/tmpl-rollback-script.sql +78 -78
- package/.sinapse-ai/product/templates/tmpl-seed-data.sql +141 -141
- package/.sinapse-ai/product/templates/tmpl-smoke-test.sql +17 -17
- package/.sinapse-ai/product/templates/tmpl-staging-copy-merge.sql +140 -140
- package/.sinapse-ai/product/templates/tmpl-stored-proc.sql +141 -141
- package/.sinapse-ai/product/templates/tmpl-trigger.sql +153 -153
- package/.sinapse-ai/product/templates/tmpl-view-materialized.sql +134 -134
- package/.sinapse-ai/product/templates/tmpl-view.sql +178 -178
- package/AGENTS.md +193 -0
- package/CHANGELOG.md +1247 -0
- package/LICENSE +63 -63
- package/README.en.md +17 -18
- package/README.md +18 -19
- package/bin/cli.js +1 -1
- package/bin/commands/install.js +194 -22
- package/bin/commands/status.js +14 -1
- package/bin/commands/uninstall.js +2 -2
- package/bin/commands/update.js +52 -0
- package/bin/lib/setup-statusline.js +191 -0
- package/bin/sinapse-init.js +11 -83
- package/bin/utils/framework-guard.js +17 -4
- package/bin/utils/secret-scanner-core.js +109 -7
- package/bin/utils/staged-sql-guard.js +204 -0
- package/bin/utils/validate-publish.js +63 -0
- package/docs/agent-reference-guide.md +5 -7
- package/docs/framework/agent-prefix-convention.md +58 -0
- package/docs/framework/architecture-overview.md +4 -4
- package/docs/framework/collaboration-activation.md +45 -0
- package/docs/framework/guiding-principles.md +9 -9
- package/docs/getting-started.md +1 -1
- package/docs/guides/agent-reference.md +1 -1
- package/docs/guides/codex-config.md +4 -5
- package/docs/pt/architecture/sub-orqx-pattern.md +20 -18
- package/docs/security/overview.md +1 -1
- package/package.json +16 -12
- package/packages/installer/src/index.js +26 -0
- package/packages/installer/src/installer/git-hooks-installer.js +211 -47
- package/packages/installer/src/installer/sinapse-ai-installer.js +71 -0
- package/packages/installer/src/wizard/feedback.js +1 -1
- package/packages/installer/src/wizard/ide-config-generator.js +26 -26
- package/packages/installer/src/wizard/index.js +53 -4
- package/packages/sinapse-install/bin/edmcp.js +0 -0
- package/packages/sinapse-install/bin/sinapse-install.js +0 -0
- package/scripts/audit-tasks.cjs +112 -91
- package/scripts/check-markdown-links.py +352 -352
- package/scripts/prepare-hooks.js +58 -0
- package/scripts/regenerate-orqx-stubs.ps1 +2 -3
- package/scripts/sync-counts.js +10 -2
- package/scripts/sync-squad-yaml-components.js +108 -6
- package/scripts/validate-agents-md.js +128 -0
- package/scripts/validate-all.js +1 -0
- package/scripts/validate-squad-orqx.js +19 -9
- package/sinapse/agents/sinapse-orqx.md +16 -26
- package/sinapse/agents/snps-orqx.md +15 -25
- package/sinapse/knowledge-base/routing-catalog.md +1 -1
- package/sinapse/tasks/diagnose-and-route.md +1 -1
- package/sinapse/tasks/squad-status-report.md +1 -1
- package/squads/claude-code-mastery/agents/claude-mastery-chief.md +1 -1
- package/squads/claude-code-mastery/agents/hooks-architect.md +60 -68
- package/squads/claude-code-mastery/knowledge-base/swarm-orchestration-patterns.md +1 -1
- package/squads/claude-code-mastery/squad.yaml +8 -0
- package/squads/claude-code-mastery/tasks/audit-setup.md +1 -1
- package/squads/claude-code-mastery/workflows/optimization-cycle.yaml +4 -4
- package/squads/claude-code-mastery/workflows/project-setup-cycle.yaml +4 -4
- package/squads/squad-animations/README.md +1 -1
- package/squads/squad-animations/squad.yaml +1 -1
- package/squads/squad-brand/squad.yaml +1 -1
- package/squads/squad-cloning/README.md +1 -1
- package/squads/squad-cloning/squad.yaml +1 -1
- package/squads/squad-commercial/README.md +1 -1
- package/squads/squad-commercial/squad.yaml +2 -3
- package/squads/squad-content/README.md +1 -1
- package/squads/squad-content/squad.yaml +1 -1
- package/squads/squad-copy/README.md +1 -1
- package/squads/squad-copy/squad.yaml +2 -3
- package/squads/squad-council/README.md +1 -1
- package/squads/squad-courses/README.md +1 -1
- package/squads/squad-courses/squad.yaml +1 -1
- package/squads/squad-cybersecurity/README.md +1 -1
- package/squads/squad-cybersecurity/squad.yaml +2 -3
- package/squads/squad-design/README.md +1 -1
- package/squads/{squad-artdir → squad-design}/agents/cro-persuasion.md +1 -1
- package/squads/{squad-artdir → squad-design}/agents/platform-aesthetic-director.md +2 -2
- package/squads/{squad-artdir → squad-design}/agents/premium-packaging-strategist.md +2 -2
- package/squads/{squad-artdir → squad-design}/agents/product-surface-director.md +3 -3
- package/squads/squad-design/squad.yaml +6 -3
- package/squads/squad-finance/README.md +1 -1
- package/squads/squad-finance/squad.yaml +7 -1
- package/squads/squad-growth/README.md +1 -1
- package/squads/squad-growth/squad.yaml +1 -1
- package/squads/squad-paidmedia/README.md +1 -1
- package/squads/squad-paidmedia/squad.yaml +2 -3
- package/squads/squad-product/README.md +1 -1
- package/squads/squad-product/squad.yaml +1 -1
- package/squads/squad-research/README.md +1 -1
- package/squads/squad-research/squad.yaml +2 -3
- package/squads/squad-storytelling/README.md +1 -1
- package/squads/squad-storytelling/squad.yaml +2 -3
- package/.codex/agents/brad-frost.md +0 -46
- package/.codex/agents/claude-orqx.md +0 -72
- package/.codex/agents/copy-chief.md +0 -162
- package/.codex/agents/cyber-chief.md +0 -169
- package/.codex/agents/dan-mall.md +0 -43
- package/.codex/agents/data-chief.md +0 -198
- package/.codex/agents/dave-malouf.md +0 -43
- package/.codex/agents/db-sage.md +0 -152
- package/.codex/agents/design-chief.md +0 -226
- package/.codex/agents/dev.md +0 -102
- package/.codex/agents/legal-chief.md +0 -199
- package/.codex/agents/nano-banana-generator.md +0 -42
- package/.codex/agents/pm.md +0 -81
- package/.codex/agents/po.md +0 -85
- package/.codex/agents/qa.md +0 -98
- package/.codex/agents/sm.md +0 -77
- package/.codex/agents/squad-chief.md +0 -1553
- package/.codex/agents/squad.md +0 -66
- package/.codex/agents/story-chief.md +0 -180
- package/.codex/agents/tools-orqx.md +0 -219
- package/.codex/agents/traffic-masters-chief.md +0 -211
- package/.sinapse-ai/core/memory/__tests__/active-modules.verify.js +0 -265
- package/.sinapse-ai/core/permissions/__tests__/permission-mode.test.js +0 -293
- package/.sinapse-ai/data/registry-update-log.jsonl +0 -158
- package/.sinapse-ai/infrastructure/scripts/ide-sync/gemini-commands.js +0 -298
- package/.sinapse-ai/infrastructure/scripts/ide-sync/transformers/antigravity.js +0 -121
- package/.sinapse-ai/infrastructure/scripts/ide-sync/transformers/cursor.js +0 -119
- package/.sinapse-ai/infrastructure/scripts/ide-sync/transformers/github-copilot.js +0 -191
- package/.sinapse-ai/infrastructure/scripts/ide-sync/transformers/kimi.js +0 -448
- package/.sinapse-ai/infrastructure/tests/project-status-loader.test.js +0 -569
- package/.sinapse-ai/infrastructure/tests/regression-suite-v2.md +0 -622
- package/.sinapse-ai/infrastructure/tests/validate-module.js +0 -98
- package/.sinapse-ai/infrastructure/tests/worktree-manager.test.js +0 -620
- package/.sinapse-ai/monitor/hooks/lib/__init__.py +0 -2
- package/.sinapse-ai/monitor/hooks/lib/enrich.py +0 -59
- package/.sinapse-ai/monitor/hooks/lib/send_event.py +0 -48
- package/.sinapse-ai/monitor/hooks/notification.py +0 -30
- package/.sinapse-ai/monitor/hooks/post_tool_use.py +0 -46
- package/.sinapse-ai/monitor/hooks/pre_compact.py +0 -30
- package/.sinapse-ai/monitor/hooks/pre_tool_use.py +0 -41
- package/.sinapse-ai/monitor/hooks/stop.py +0 -30
- package/.sinapse-ai/monitor/hooks/subagent_stop.py +0 -30
- package/.sinapse-ai/monitor/hooks/user_prompt_submit.py +0 -39
- package/.sinapse-ai/product/templates/statusline/track-agent.sh +0 -69
- package/.sinapse-ai/workflow-intelligence/__tests__/confidence-scorer.test.js +0 -335
- package/.sinapse-ai/workflow-intelligence/__tests__/integration.test.js +0 -340
- package/.sinapse-ai/workflow-intelligence/__tests__/suggestion-engine.test.js +0 -438
- package/.sinapse-ai/workflow-intelligence/__tests__/wave-analyzer.test.js +0 -448
- package/.sinapse-ai/workflow-intelligence/__tests__/workflow-registry.test.js +0 -303
- package/bin/sinapse-graph.js +0 -19
- package/docs/codex-integration-process.md +0 -22
- package/docs/codex-parity-program.md +0 -27
- package/packages/installer/src/__tests__/performance-benchmark.js +0 -383
- package/packages/installer/tests/integration/environment-configuration.test.js +0 -332
- package/packages/installer/tests/integration/wizard-detection.test.js +0 -352
- package/packages/installer/tests/unit/artifact-copy-pipeline/artifact-copy-pipeline.test.js +0 -383
- package/packages/installer/tests/unit/claude-md-template-v5/claude-md-template-v5.test.js +0 -193
- package/packages/installer/tests/unit/config-validator.test.js +0 -315
- package/packages/installer/tests/unit/detection/detect-project-type.test.js +0 -539
- package/packages/installer/tests/unit/doctor/doctor-checks.test.js +0 -636
- package/packages/installer/tests/unit/doctor/doctor-orchestrator.test.js +0 -192
- package/packages/installer/tests/unit/entity-registry-bootstrap.test.js +0 -186
- package/packages/installer/tests/unit/env-template.test.js +0 -187
- package/packages/installer/tests/unit/generate-settings-json/generate-settings-json.test.js +0 -310
- package/packages/installer/tests/unit/git-hooks-installer.test.js +0 -262
- package/packages/installer/tests/unit/ide-sync-integration/ide-sync-integration.test.js +0 -231
- package/packages/installer/tests/unit/merger/env-merger.test.js +0 -191
- package/packages/installer/tests/unit/merger/markdown-merger.test.js +0 -262
- package/packages/installer/tests/unit/merger/strategies.test.js +0 -154
- package/packages/installer/tests/unit/merger/yaml-merger.test.js +0 -328
- package/packages/sinapse-install/tests/unit/chrome-brain.smoke.test.js +0 -66
- package/scripts/install-monitor-hooks.sh +0 -82
- package/squads/squad-artdir/README.md +0 -90
- package/squads/squad-artdir/agents/accessibility-guardian.md +0 -184
- package/squads/squad-artdir/agents/artdir-orqx.md +0 -222
- package/squads/squad-artdir/agents/color-psychologist.md +0 -166
- package/squads/squad-artdir/agents/design-system-architect.md +0 -100
- package/squads/squad-artdir/agents/ia-architect.md +0 -169
- package/squads/squad-artdir/agents/interaction-designer.md +0 -162
- package/squads/squad-artdir/agents/layout-engineer.md +0 -163
- package/squads/squad-artdir/agents/motion-architect.md +0 -185
- package/squads/squad-artdir/agents/type-systemist.md +0 -138
- package/squads/squad-artdir/agents/visual-strategist.md +0 -127
- package/squads/squad-artdir/checklists/seven-pillars-validation-checklist.md +0 -172
- package/squads/squad-artdir/knowledge-base/case-nyo-ia-reference.md +0 -289
- package/squads/squad-artdir/knowledge-base/deliverables-templates.md +0 -457
- package/squads/squad-artdir/knowledge-base/motion-technique-catalog.md +0 -247
- package/squads/squad-artdir/knowledge-base/premium-packaging-principles.md +0 -133
- package/squads/squad-artdir/knowledge-base/psychological-toolkit.md +0 -229
- package/squads/squad-artdir/knowledge-base/saas-art-direction-canon.md +0 -242
- package/squads/squad-artdir/knowledge-base/seven-pillars-framework.md +0 -289
- package/squads/squad-artdir/knowledge-base/ten-pillars-framework.md +0 -221
- package/squads/squad-artdir/package.json +0 -20
- package/squads/squad-artdir/squad.yaml +0 -299
- package/squads/squad-artdir/tasks/audit-conversion.md +0 -97
- package/squads/squad-artdir/tasks/audit-drift-multi-surface.md +0 -55
- package/squads/squad-artdir/tasks/consult-saas-canon.md +0 -54
- package/squads/squad-artdir/tasks/create-art-direction-brief.md +0 -110
- package/squads/squad-artdir/tasks/create-premium-packaging-brief.md +0 -61
- package/squads/squad-artdir/tasks/create-wireflow.md +0 -84
- package/squads/squad-artdir/tasks/design-color-system.md +0 -81
- package/squads/squad-artdir/tasks/design-product-surface.md +0 -60
- package/squads/squad-artdir/tasks/design-token-system.md +0 -58
- package/squads/squad-artdir/tasks/diagnose-visual-language.md +0 -92
- package/squads/squad-artdir/tasks/first-5-minutes-choreography.md +0 -65
- package/squads/squad-artdir/tasks/specify-motion-system.md +0 -84
- package/squads/squad-artdir/tasks/validate-against-pillars.md +0 -143
- package/squads/squad-artdir/templates/art-direction-brief-template.md +0 -215
- package/squads/squad-artdir/workflows/conversion-audit-cycle.yaml +0 -142
- package/squads/squad-artdir/workflows/full-art-direction-cycle.yaml +0 -179
- package/squads/squad-artdir/workflows/saas-platform-art-direction-cycle.yaml +0 -338
- package/squads/squad-commercial/agents/legal-chief.md +0 -199
- package/squads/squad-copy/agents/copy-chief.md +0 -162
- package/squads/squad-cybersecurity/agents/cyber-chief.md +0 -169
- package/squads/squad-design/agents/design-chief.md +0 -226
- package/squads/squad-paidmedia/agents/traffic-masters-chief.md +0 -211
- package/squads/squad-research/agents/data-chief.md +0 -198
- package/squads/squad-storytelling/agents/story-chief.md +0 -180
|
@@ -1,352 +0,0 @@
|
|
|
1
|
-
const fs = require('fs');
|
|
2
|
-
const path = require('path');
|
|
3
|
-
const { runWizard, getProjectType, confirmProjectType } = require('../../src/wizard/wizard');
|
|
4
|
-
const { detectProjectType } = require('../../src/detection/detect-project-type');
|
|
5
|
-
|
|
6
|
-
// Mock fs module
|
|
7
|
-
jest.mock('fs');
|
|
8
|
-
|
|
9
|
-
// Mock console methods to avoid test output pollution
|
|
10
|
-
global.console = {
|
|
11
|
-
...console,
|
|
12
|
-
log: jest.fn(),
|
|
13
|
-
error: jest.fn(),
|
|
14
|
-
};
|
|
15
|
-
|
|
16
|
-
describe('Wizard Integration with Project Type Detection', () => {
|
|
17
|
-
beforeEach(() => {
|
|
18
|
-
jest.clearAllMocks();
|
|
19
|
-
});
|
|
20
|
-
|
|
21
|
-
// ============================================================================
|
|
22
|
-
// Task 1.3.5.2: Test full wizard flow with GREENFIELD detection
|
|
23
|
-
// ============================================================================
|
|
24
|
-
describe('GREENFIELD Detection Flow', () => {
|
|
25
|
-
test('wizard correctly detects and processes GREENFIELD project', async () => {
|
|
26
|
-
// Setup: Empty directory (directory exists but no markers)
|
|
27
|
-
const targetPath = path.resolve('/test-greenfield');
|
|
28
|
-
fs.existsSync.mockImplementation((checkPath) => {
|
|
29
|
-
if (checkPath === targetPath) return true; // Directory exists
|
|
30
|
-
// No markers exist
|
|
31
|
-
if (checkPath.includes('.sinapse-ai')) return false;
|
|
32
|
-
if (checkPath.includes('package.json')) return false;
|
|
33
|
-
if (checkPath.includes('.git')) return false;
|
|
34
|
-
return false;
|
|
35
|
-
});
|
|
36
|
-
fs.readdirSync.mockReturnValue([]);
|
|
37
|
-
|
|
38
|
-
const result = await runWizard({ targetDir: '/test-greenfield' });
|
|
39
|
-
|
|
40
|
-
expect(result.projectType).toBe('GREENFIELD');
|
|
41
|
-
expect(result.targetDir).toBe('/test-greenfield');
|
|
42
|
-
// Output uses lowercase format for display
|
|
43
|
-
expect(console.log).toHaveBeenCalledWith(expect.stringContaining('greenfield'));
|
|
44
|
-
});
|
|
45
|
-
|
|
46
|
-
test('getProjectType helper returns GREENFIELD for empty directory', () => {
|
|
47
|
-
const targetPath = path.resolve('/test/empty');
|
|
48
|
-
fs.existsSync.mockImplementation((checkPath) => {
|
|
49
|
-
if (checkPath === targetPath) return true;
|
|
50
|
-
if (checkPath.includes('.sinapse-ai')) return false;
|
|
51
|
-
if (checkPath.includes('package.json')) return false;
|
|
52
|
-
if (checkPath.includes('.git')) return false;
|
|
53
|
-
return false;
|
|
54
|
-
});
|
|
55
|
-
fs.readdirSync.mockReturnValue([]);
|
|
56
|
-
|
|
57
|
-
const type = getProjectType('/test/empty');
|
|
58
|
-
|
|
59
|
-
expect(type).toBe('GREENFIELD');
|
|
60
|
-
});
|
|
61
|
-
});
|
|
62
|
-
|
|
63
|
-
// ============================================================================
|
|
64
|
-
// Task 1.3.5.3: Test full wizard flow with BROWNFIELD detection
|
|
65
|
-
// ============================================================================
|
|
66
|
-
describe('BROWNFIELD Detection Flow', () => {
|
|
67
|
-
test('wizard correctly detects and processes BROWNFIELD project with package.json', async () => {
|
|
68
|
-
// Setup: Directory with package.json
|
|
69
|
-
const targetPath = path.resolve('/test-brownfield');
|
|
70
|
-
fs.existsSync.mockImplementation((checkPath) => {
|
|
71
|
-
if (checkPath === targetPath) return true;
|
|
72
|
-
if (checkPath.includes('.sinapse-ai')) return false; // No SINAPSE
|
|
73
|
-
if (checkPath.includes('package.json')) return true; // Has package.json
|
|
74
|
-
if (checkPath.includes('.git')) return false;
|
|
75
|
-
return false;
|
|
76
|
-
});
|
|
77
|
-
fs.readdirSync.mockReturnValue(['package.json', 'src', 'README.md']);
|
|
78
|
-
|
|
79
|
-
const result = await runWizard({ targetDir: '/test-brownfield' });
|
|
80
|
-
|
|
81
|
-
expect(result.projectType).toBe('BROWNFIELD');
|
|
82
|
-
expect(result.targetDir).toBe('/test-brownfield');
|
|
83
|
-
expect(console.log).toHaveBeenCalledWith(expect.stringContaining('brownfield'));
|
|
84
|
-
});
|
|
85
|
-
|
|
86
|
-
test('wizard correctly detects and processes BROWNFIELD project with .git', async () => {
|
|
87
|
-
// Setup: Directory with .git
|
|
88
|
-
const targetPath = path.resolve('/test-git');
|
|
89
|
-
fs.existsSync.mockImplementation((checkPath) => {
|
|
90
|
-
if (checkPath === targetPath) return true;
|
|
91
|
-
if (checkPath.includes('.sinapse-ai')) return false; // No SINAPSE
|
|
92
|
-
if (checkPath.includes('package.json')) return false;
|
|
93
|
-
if (checkPath.includes('.git')) return true; // Has .git
|
|
94
|
-
return false;
|
|
95
|
-
});
|
|
96
|
-
fs.readdirSync.mockReturnValue(['.git', 'README.md']);
|
|
97
|
-
|
|
98
|
-
const result = await runWizard({ targetDir: '/test-git' });
|
|
99
|
-
|
|
100
|
-
expect(result.projectType).toBe('BROWNFIELD');
|
|
101
|
-
expect(console.log).toHaveBeenCalledWith(expect.stringContaining('brownfield'));
|
|
102
|
-
});
|
|
103
|
-
|
|
104
|
-
test('getProjectType helper returns BROWNFIELD for existing project', () => {
|
|
105
|
-
const targetPath = path.resolve('/test/brownfield');
|
|
106
|
-
fs.existsSync.mockImplementation((checkPath) => {
|
|
107
|
-
if (checkPath === targetPath) return true;
|
|
108
|
-
if (checkPath.includes('.sinapse-ai')) return false;
|
|
109
|
-
if (checkPath.includes('package.json')) return true;
|
|
110
|
-
if (checkPath.includes('.git')) return false;
|
|
111
|
-
return false;
|
|
112
|
-
});
|
|
113
|
-
fs.readdirSync.mockReturnValue(['package.json', 'src']);
|
|
114
|
-
|
|
115
|
-
const type = getProjectType('/test/brownfield');
|
|
116
|
-
|
|
117
|
-
expect(type).toBe('BROWNFIELD');
|
|
118
|
-
});
|
|
119
|
-
});
|
|
120
|
-
|
|
121
|
-
// ============================================================================
|
|
122
|
-
// Task 1.3.5.4: Test full wizard flow with EXISTING_SINAPSE detection
|
|
123
|
-
// ============================================================================
|
|
124
|
-
describe('EXISTING_SINAPSE Detection Flow', () => {
|
|
125
|
-
test('wizard correctly detects and processes EXISTING_SINAPSE installation', async () => {
|
|
126
|
-
// Setup: Directory with .sinapse-ai
|
|
127
|
-
fs.existsSync.mockImplementation((checkPath) => {
|
|
128
|
-
if (checkPath.includes('test-existing')) return true;
|
|
129
|
-
if (checkPath.endsWith('.sinapse-ai')) return true;
|
|
130
|
-
return true; // Other files exist
|
|
131
|
-
});
|
|
132
|
-
fs.readdirSync.mockReturnValue(['.sinapse-ai', 'package.json', '.git']);
|
|
133
|
-
|
|
134
|
-
const result = await runWizard({ targetDir: '/test-existing' });
|
|
135
|
-
|
|
136
|
-
expect(result.projectType).toBe('EXISTING_SINAPSE');
|
|
137
|
-
expect(result.targetDir).toBe('/test-existing');
|
|
138
|
-
// Output shows "brownfield" since EXISTING_SINAPSE is treated as brownfield update
|
|
139
|
-
expect(console.log).toHaveBeenCalledWith(expect.stringContaining('brownfield'));
|
|
140
|
-
});
|
|
141
|
-
|
|
142
|
-
test('confirmProjectType shows update/reinstall message for EXISTING_SINAPSE', async () => {
|
|
143
|
-
const confirmed = await confirmProjectType('EXISTING_SINAPSE');
|
|
144
|
-
|
|
145
|
-
expect(confirmed).toBe('EXISTING_SINAPSE');
|
|
146
|
-
expect(console.log).toHaveBeenCalledWith(
|
|
147
|
-
expect.stringContaining('update or reinstall'),
|
|
148
|
-
);
|
|
149
|
-
});
|
|
150
|
-
|
|
151
|
-
test('getProjectType helper returns EXISTING_SINAPSE when .sinapse-ai exists', () => {
|
|
152
|
-
fs.existsSync.mockImplementation((checkPath) => {
|
|
153
|
-
if (checkPath.includes('existing')) return true;
|
|
154
|
-
if (checkPath.endsWith('.sinapse-ai')) return true;
|
|
155
|
-
return false;
|
|
156
|
-
});
|
|
157
|
-
fs.readdirSync.mockReturnValue(['.sinapse-ai']);
|
|
158
|
-
|
|
159
|
-
const type = getProjectType('/test/existing');
|
|
160
|
-
|
|
161
|
-
expect(type).toBe('EXISTING_SINAPSE');
|
|
162
|
-
});
|
|
163
|
-
});
|
|
164
|
-
|
|
165
|
-
// ============================================================================
|
|
166
|
-
// Task 1.3.5.5: Test user override of detection result
|
|
167
|
-
// ============================================================================
|
|
168
|
-
describe('User Override Functionality', () => {
|
|
169
|
-
test('confirmProjectType accepts detected type', async () => {
|
|
170
|
-
const confirmed = await confirmProjectType('GREENFIELD');
|
|
171
|
-
|
|
172
|
-
expect(confirmed).toBe('GREENFIELD');
|
|
173
|
-
expect(console.log).toHaveBeenCalledWith(expect.stringContaining('GREENFIELD'));
|
|
174
|
-
});
|
|
175
|
-
|
|
176
|
-
test('confirmProjectType shows appropriate message for each type', async () => {
|
|
177
|
-
const types = ['GREENFIELD', 'BROWNFIELD', 'EXISTING_SINAPSE', 'UNKNOWN'];
|
|
178
|
-
|
|
179
|
-
for (const type of types) {
|
|
180
|
-
jest.clearAllMocks();
|
|
181
|
-
const confirmed = await confirmProjectType(type);
|
|
182
|
-
|
|
183
|
-
expect(confirmed).toBe(type);
|
|
184
|
-
expect(console.log).toHaveBeenCalledWith(expect.stringContaining(type));
|
|
185
|
-
}
|
|
186
|
-
});
|
|
187
|
-
|
|
188
|
-
test('confirmProjectType provides description for GREENFIELD', async () => {
|
|
189
|
-
await confirmProjectType('GREENFIELD');
|
|
190
|
-
|
|
191
|
-
expect(console.log).toHaveBeenCalledWith(
|
|
192
|
-
expect.stringContaining('New project'),
|
|
193
|
-
);
|
|
194
|
-
});
|
|
195
|
-
|
|
196
|
-
test('confirmProjectType provides description for BROWNFIELD', async () => {
|
|
197
|
-
await confirmProjectType('BROWNFIELD');
|
|
198
|
-
|
|
199
|
-
expect(console.log).toHaveBeenCalledWith(
|
|
200
|
-
expect.stringContaining('Existing project'),
|
|
201
|
-
);
|
|
202
|
-
});
|
|
203
|
-
});
|
|
204
|
-
|
|
205
|
-
// ============================================================================
|
|
206
|
-
// Task 1.3.5.6: Test error handling and fallback to manual selection
|
|
207
|
-
// ============================================================================
|
|
208
|
-
describe('Error Handling in Wizard Flow', () => {
|
|
209
|
-
test('wizard propagates detection errors correctly', async () => {
|
|
210
|
-
// Setup: Invalid directory
|
|
211
|
-
fs.existsSync.mockImplementation((checkPath) => {
|
|
212
|
-
if (checkPath.includes('invalid')) return false;
|
|
213
|
-
return false;
|
|
214
|
-
});
|
|
215
|
-
|
|
216
|
-
await expect(runWizard({ targetDir: '/invalid' })).rejects.toThrow(
|
|
217
|
-
'Directory does not exist',
|
|
218
|
-
);
|
|
219
|
-
});
|
|
220
|
-
|
|
221
|
-
test('wizard logs error message on detection failure', async () => {
|
|
222
|
-
// Setup: Permission error
|
|
223
|
-
fs.existsSync.mockImplementation(() => {
|
|
224
|
-
throw new Error('EACCES: permission denied');
|
|
225
|
-
});
|
|
226
|
-
|
|
227
|
-
await expect(runWizard({ targetDir: '/denied' })).rejects.toThrow();
|
|
228
|
-
// Check that console.error was called with the error message
|
|
229
|
-
const errorCalls = console.error.mock.calls;
|
|
230
|
-
const hasInstallationFailed = errorCalls.some(call =>
|
|
231
|
-
call.some(arg => String(arg).includes('Installation failed')),
|
|
232
|
-
);
|
|
233
|
-
expect(hasInstallationFailed).toBe(true);
|
|
234
|
-
});
|
|
235
|
-
|
|
236
|
-
test('confirmProjectType handles UNKNOWN type gracefully', async () => {
|
|
237
|
-
const confirmed = await confirmProjectType('UNKNOWN');
|
|
238
|
-
|
|
239
|
-
expect(confirmed).toBe('UNKNOWN');
|
|
240
|
-
expect(console.log).toHaveBeenCalledWith(
|
|
241
|
-
expect.stringContaining('Manual selection required'),
|
|
242
|
-
);
|
|
243
|
-
});
|
|
244
|
-
});
|
|
245
|
-
|
|
246
|
-
// ============================================================================
|
|
247
|
-
// Task 1.3.5.7: Verify detection result flows correctly to Story 1.4
|
|
248
|
-
// ============================================================================
|
|
249
|
-
describe('Integration with Downstream Stories', () => {
|
|
250
|
-
test('wizard returns configuration object with projectType for downstream use', async () => {
|
|
251
|
-
const targetPath = path.resolve('/test/downstream');
|
|
252
|
-
fs.existsSync.mockImplementation((checkPath) => {
|
|
253
|
-
if (checkPath === targetPath) return true;
|
|
254
|
-
if (checkPath.includes('.sinapse-ai')) return false;
|
|
255
|
-
if (checkPath.includes('package.json')) return false;
|
|
256
|
-
if (checkPath.includes('.git')) return false;
|
|
257
|
-
return false;
|
|
258
|
-
});
|
|
259
|
-
fs.readdirSync.mockReturnValue([]);
|
|
260
|
-
|
|
261
|
-
const config = await runWizard({ targetDir: '/test/downstream' });
|
|
262
|
-
|
|
263
|
-
// Verify config has required fields for downstream stories
|
|
264
|
-
expect(config).toHaveProperty('projectType');
|
|
265
|
-
expect(config).toHaveProperty('targetDir');
|
|
266
|
-
expect(config.projectType).toBe('GREENFIELD');
|
|
267
|
-
expect(config.targetDir).toBe('/test/downstream');
|
|
268
|
-
});
|
|
269
|
-
|
|
270
|
-
test('getProjectType can be called independently by downstream stories', () => {
|
|
271
|
-
const targetPath = path.resolve('/test/standalone');
|
|
272
|
-
fs.existsSync.mockImplementation((checkPath) => {
|
|
273
|
-
if (checkPath === targetPath) return true;
|
|
274
|
-
if (checkPath.includes('.sinapse-ai')) return false;
|
|
275
|
-
if (checkPath.includes('package.json')) return false;
|
|
276
|
-
if (checkPath.includes('.git')) return false;
|
|
277
|
-
return false;
|
|
278
|
-
});
|
|
279
|
-
fs.readdirSync.mockReturnValue([]);
|
|
280
|
-
|
|
281
|
-
// Story 1.4 (IDE Selection) can call this directly
|
|
282
|
-
const type = getProjectType('/test/standalone');
|
|
283
|
-
|
|
284
|
-
expect(type).toBe('GREENFIELD');
|
|
285
|
-
expect(typeof type).toBe('string');
|
|
286
|
-
});
|
|
287
|
-
|
|
288
|
-
test('detection result remains consistent across multiple calls', () => {
|
|
289
|
-
const targetPath = path.resolve('/test/consistent');
|
|
290
|
-
fs.existsSync.mockImplementation((checkPath) => {
|
|
291
|
-
if (checkPath === targetPath) return true;
|
|
292
|
-
if (checkPath.includes('.sinapse-ai')) return false;
|
|
293
|
-
if (checkPath.includes('package.json')) return true;
|
|
294
|
-
if (checkPath.includes('.git')) return false;
|
|
295
|
-
return false;
|
|
296
|
-
});
|
|
297
|
-
fs.readdirSync.mockReturnValue(['package.json']);
|
|
298
|
-
|
|
299
|
-
const type1 = getProjectType('/test/consistent');
|
|
300
|
-
const type2 = getProjectType('/test/consistent');
|
|
301
|
-
const type3 = detectProjectType('/test/consistent');
|
|
302
|
-
|
|
303
|
-
expect(type1).toBe(type2);
|
|
304
|
-
expect(type2).toBe(type3);
|
|
305
|
-
expect(type1).toBe('BROWNFIELD');
|
|
306
|
-
});
|
|
307
|
-
});
|
|
308
|
-
|
|
309
|
-
// ============================================================================
|
|
310
|
-
// Default Behavior Tests
|
|
311
|
-
// ============================================================================
|
|
312
|
-
describe('Default Wizard Behavior', () => {
|
|
313
|
-
test('wizard uses process.cwd() when no targetDir provided', async () => {
|
|
314
|
-
const mockCwd = process.cwd();
|
|
315
|
-
|
|
316
|
-
fs.existsSync.mockImplementation((checkPath) => {
|
|
317
|
-
if (checkPath === path.resolve(mockCwd)) return true;
|
|
318
|
-
return false;
|
|
319
|
-
});
|
|
320
|
-
fs.readdirSync.mockReturnValue([]);
|
|
321
|
-
|
|
322
|
-
const result = await runWizard();
|
|
323
|
-
|
|
324
|
-
expect(result.targetDir).toBe(mockCwd);
|
|
325
|
-
expect(result.projectType).toBe('GREENFIELD');
|
|
326
|
-
});
|
|
327
|
-
|
|
328
|
-
test('wizard displays welcome message', async () => {
|
|
329
|
-
fs.existsSync.mockImplementation(() => true);
|
|
330
|
-
fs.readdirSync.mockReturnValue([]);
|
|
331
|
-
|
|
332
|
-
await runWizard({ targetDir: '/test' });
|
|
333
|
-
|
|
334
|
-
expect(console.log).toHaveBeenCalledWith(
|
|
335
|
-
expect.stringContaining('Welcome to SINAPSE Installer'),
|
|
336
|
-
);
|
|
337
|
-
});
|
|
338
|
-
|
|
339
|
-
test('wizard displays detection step message', async () => {
|
|
340
|
-
fs.existsSync.mockImplementation(() => true);
|
|
341
|
-
fs.readdirSync.mockReturnValue([]);
|
|
342
|
-
|
|
343
|
-
await runWizard({ targetDir: '/test' });
|
|
344
|
-
|
|
345
|
-
expect(console.log).toHaveBeenCalledWith(
|
|
346
|
-
expect.stringContaining('Analyzing project directory'),
|
|
347
|
-
);
|
|
348
|
-
});
|
|
349
|
-
});
|
|
350
|
-
});
|
|
351
|
-
|
|
352
|
-
|