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
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sinapse-ai",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"description": "SINAPSE AI: Framework de orquestracao de IA —
|
|
3
|
+
"version": "1.9.1",
|
|
4
|
+
"description": "SINAPSE AI: Framework de orquestracao de IA — 17 squads, 172 agentes especializados",
|
|
5
5
|
"bin": {
|
|
6
6
|
"sinapse": "bin/sinapse.js",
|
|
7
7
|
"sinapse-ai": "bin/cli.js",
|
|
@@ -23,14 +23,17 @@
|
|
|
23
23
|
".codex/command-registry.json",
|
|
24
24
|
".codex/delegation-matrix.json",
|
|
25
25
|
".codex/handoff-packet.schema.json",
|
|
26
|
+
".codex/handoff-packet.parity.schema.json",
|
|
27
|
+
".codex/handoff-packet.template.json",
|
|
28
|
+
".codex/delegation-parity.json",
|
|
26
29
|
".codex/instructions.md",
|
|
27
30
|
".codex/agents/",
|
|
28
31
|
".codex/scripts/",
|
|
29
32
|
".codex/skills/",
|
|
30
33
|
".codex/tasks/",
|
|
34
|
+
"AGENTS.md",
|
|
31
35
|
"squads/squad-*/**",
|
|
32
36
|
"squads/claude-code-mastery/**",
|
|
33
|
-
"squads/sinapse/**",
|
|
34
37
|
"sinapse/**",
|
|
35
38
|
"docs/guides/",
|
|
36
39
|
"docs/installation/",
|
|
@@ -48,11 +51,15 @@
|
|
|
48
51
|
"docs/troubleshooting.md",
|
|
49
52
|
"docs/ide-integration.md",
|
|
50
53
|
"docs/agent-reference-guide.md",
|
|
51
|
-
"docs/codex-integration-process.md",
|
|
52
|
-
"docs/codex-parity-program.md",
|
|
53
54
|
"docs/TELEMETRY.md",
|
|
54
55
|
"README.md",
|
|
55
|
-
"
|
|
56
|
+
"CHANGELOG.md",
|
|
57
|
+
"LICENSE",
|
|
58
|
+
"!**/__tests__/**",
|
|
59
|
+
"!**/tests/**",
|
|
60
|
+
"!**/*.test.js",
|
|
61
|
+
"!**/*.spec.js",
|
|
62
|
+
".sinapse-ai/development/templates/**"
|
|
56
63
|
],
|
|
57
64
|
"scripts": {
|
|
58
65
|
"format": "prettier --write \"**/*.md\"",
|
|
@@ -85,11 +92,6 @@
|
|
|
85
92
|
"sync:ide:claude": "node .sinapse-ai/infrastructure/scripts/ide-sync/index.js sync --ide claude-code",
|
|
86
93
|
"sync:ide:codex": "node .sinapse-ai/infrastructure/scripts/sync-codex-local-first.js",
|
|
87
94
|
"validate:claude-sync": "node .sinapse-ai/infrastructure/scripts/ide-sync/index.js validate --ide claude-code --strict",
|
|
88
|
-
"validate:gemini-sync": "node .sinapse-ai/infrastructure/scripts/ide-sync/index.js validate --ide gemini --strict",
|
|
89
|
-
"validate:cursor-sync": "node .sinapse-ai/infrastructure/scripts/ide-sync/index.js validate --ide cursor --strict",
|
|
90
|
-
"validate:antigravity-sync": "node .sinapse-ai/infrastructure/scripts/ide-sync/index.js validate --ide antigravity --strict",
|
|
91
|
-
"validate:copilot-sync": "node .sinapse-ai/infrastructure/scripts/ide-sync/index.js validate --ide github-copilot --strict",
|
|
92
|
-
"validate:kimi-sync": "node .sinapse-ai/infrastructure/scripts/ide-sync/index.js validate --ide kimi --strict",
|
|
93
95
|
"validate:claude-integration": "node .sinapse-ai/infrastructure/scripts/validate-claude-integration.js",
|
|
94
96
|
"validate:squad-schema": "node scripts/validate-squad-yaml.js",
|
|
95
97
|
"validate:squad-schema:strict": "node scripts/validate-squad-yaml.js --strict",
|
|
@@ -112,6 +114,8 @@
|
|
|
112
114
|
"validate:no-personal-leaks": "node scripts/validate-no-personal-leaks.js",
|
|
113
115
|
"validate:orqx-discipline": "node scripts/validate-orqx-discipline.js",
|
|
114
116
|
"validate:cross-refs": "node scripts/validate-cross-refs.js",
|
|
117
|
+
"validate:agents-md": "node scripts/validate-agents-md.js",
|
|
118
|
+
"validate:agents-md:fix": "node scripts/validate-agents-md.js --fix",
|
|
115
119
|
"validate:all": "node scripts/validate-all.js",
|
|
116
120
|
"sync:squad-yaml": "node scripts/sync-squad-yaml-components.js",
|
|
117
121
|
"validate:squad-yaml": "node scripts/sync-squad-yaml-components.js --check",
|
|
@@ -123,7 +127,7 @@
|
|
|
123
127
|
"brand": "node scripts/sinapse-patch.js",
|
|
124
128
|
"prepublishOnly": "node bin/utils/validate-publish.js && npm run generate:manifest && npm run validate:manifest",
|
|
125
129
|
"setup": "node bin/postinstall.js",
|
|
126
|
-
"prepare": "
|
|
130
|
+
"prepare": "node scripts/prepare-hooks.js"
|
|
127
131
|
},
|
|
128
132
|
"dependencies": {
|
|
129
133
|
"@clack/prompts": "^0.11.0",
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* @sinapse/installer entry point.
|
|
6
|
+
*
|
|
7
|
+
* Fixes the broken `main` / `bin.sinapse-installer` reference: package.json
|
|
8
|
+
* pointed here but the file did not exist. This re-exports the real wizard
|
|
9
|
+
* (src/wizard/index.js) for programmatic use, and runs it when invoked
|
|
10
|
+
* directly as a CLI (`sinapse-installer`).
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
const wizard = require('./wizard');
|
|
14
|
+
|
|
15
|
+
module.exports = wizard;
|
|
16
|
+
|
|
17
|
+
// CLI mode: run the wizard when this file is executed directly.
|
|
18
|
+
if (require.main === module) {
|
|
19
|
+
Promise.resolve()
|
|
20
|
+
.then(() => wizard.runWizard())
|
|
21
|
+
.catch((error) => {
|
|
22
|
+
// eslint-disable-next-line no-console
|
|
23
|
+
console.error('Installer failed:', error && error.message ? error.message : error);
|
|
24
|
+
process.exit(1);
|
|
25
|
+
});
|
|
26
|
+
}
|
|
@@ -51,22 +51,22 @@ const { runSafe } = require('../../../../.sinapse-ai/core/utils/spawn-safe');
|
|
|
51
51
|
const MANAGED_HOOKS_DIRNAME = path.join('.sinapse-ai', 'git-hooks');
|
|
52
52
|
|
|
53
53
|
/**
|
|
54
|
-
* Source
|
|
54
|
+
* Source guard files copied into `<hooksDir>/lib/` so the generated hook can
|
|
55
55
|
* `require` them with a stable relative path regardless of where the project
|
|
56
|
-
* lives.
|
|
56
|
+
* lives. All are self-contained (Node built-ins only) and bundle together.
|
|
57
57
|
* @constant {Array<{from: string, to: string}>}
|
|
58
58
|
*/
|
|
59
|
+
const BIN_UTILS = path.join(__dirname, '..', '..', '..', '..', 'bin', 'utils');
|
|
59
60
|
const SCANNER_SOURCES = [
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
to: 'staged-secret-scan.js',
|
|
63
|
-
},
|
|
61
|
+
// --- secret scan (3 guards share this bundle) ---
|
|
62
|
+
{ from: path.join(BIN_UTILS, 'staged-secret-scan.js'), to: 'staged-secret-scan.js' },
|
|
64
63
|
// staged-secret-scan.js requires secret-scanner-core.js via __dirname, so the
|
|
65
|
-
// core must travel with it into the lib/ bundle.
|
|
66
|
-
{
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
64
|
+
// core must travel with it into the lib/ bundle.
|
|
65
|
+
{ from: path.join(BIN_UTILS, 'secret-scanner-core.js'), to: 'secret-scanner-core.js' },
|
|
66
|
+
// --- destructive SQL DDL/DML guard (FASE C) ---
|
|
67
|
+
{ from: path.join(BIN_UTILS, 'staged-sql-guard.js'), to: 'staged-sql-guard.js' },
|
|
68
|
+
// --- framework boundary guard (FASE C; respects boundary.frameworkProtection) ---
|
|
69
|
+
{ from: path.join(BIN_UTILS, 'framework-guard.js'), to: 'framework-guard.js' },
|
|
70
70
|
];
|
|
71
71
|
|
|
72
72
|
/**
|
|
@@ -173,17 +173,23 @@ function copyScannerLib(hooksDir) {
|
|
|
173
173
|
/**
|
|
174
174
|
* Build the content of the managed `pre-commit` Node hook.
|
|
175
175
|
*
|
|
176
|
-
* The hook
|
|
177
|
-
*
|
|
178
|
-
*
|
|
179
|
-
*
|
|
180
|
-
*
|
|
181
|
-
*
|
|
182
|
-
*
|
|
176
|
+
* The hook runs THREE bundled guards in sequence (each a standalone module
|
|
177
|
+
* under ./lib that exits non-zero on a finding), then chains to a pre-existing
|
|
178
|
+
* husky hook:
|
|
179
|
+
* 1. staged-secret-scan.js — secret/.env/private-key/entropy leak (fail-CLOSED)
|
|
180
|
+
* 2. staged-sql-guard.js — destructive DDL/DML (DROP/TRUNCATE/DELETE-no-WHERE)
|
|
181
|
+
* 3. framework-guard.js — L1/L2 boundary (no-op unless boundary
|
|
182
|
+
* .frameworkProtection is true in core-config.yaml)
|
|
183
|
+
*
|
|
184
|
+
* Each guard is spawned as a child Node process (cwd = project root, where git
|
|
185
|
+
* already runs hooks) so it gets the same staged index and reuses its own
|
|
186
|
+
* exit/print semantics. A non-zero exit from ANY guard blocks the commit. If a
|
|
187
|
+
* guard process cannot even be spawned, the commit is blocked (fail-CLOSED) —
|
|
188
|
+
* a guard that silently disappears must never let a commit through unscanned.
|
|
183
189
|
*
|
|
184
190
|
* @param {Object} [options]
|
|
185
191
|
* @param {string|null} [options.chainHookRel] - Relative path (from project
|
|
186
|
-
* root) of a prior hook to chain to after the
|
|
192
|
+
* root) of a prior hook to chain to after the guards pass. When null, the
|
|
187
193
|
* hook auto-detects `.husky/pre-commit` at runtime.
|
|
188
194
|
* @returns {string} Hook file content.
|
|
189
195
|
*/
|
|
@@ -201,38 +207,40 @@ const fs = require('fs');
|
|
|
201
207
|
const { spawnSync } = require('child_process');
|
|
202
208
|
|
|
203
209
|
const projectRoot = process.cwd();
|
|
210
|
+
const libDir = path.join(__dirname, 'lib');
|
|
211
|
+
|
|
212
|
+
// --- 1-3. SINAPSE staged guards (each fail-CLOSED) ---------------------------
|
|
213
|
+
// Order: secret scan, then destructive-SQL guard, then framework-boundary guard.
|
|
214
|
+
// framework-guard self-disables when boundary.frameworkProtection is false.
|
|
215
|
+
const GUARDS = [
|
|
216
|
+
{ file: 'staged-secret-scan.js', label: 'Secret Scan' },
|
|
217
|
+
{ file: 'staged-sql-guard.js', label: 'SQL Guard' },
|
|
218
|
+
{ file: 'framework-guard.js', label: 'Framework Boundary' },
|
|
219
|
+
];
|
|
204
220
|
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
try {
|
|
219
|
-
const files = getStagedFiles();
|
|
220
|
-
const findings = scanStagedFiles(files);
|
|
221
|
-
if (findings.length > 0) {
|
|
222
|
-
process.stderr.write('\\nSINAPSE Secret Scan: commit blocked.\\n\\n');
|
|
223
|
-
for (const f of findings) {
|
|
224
|
-
process.stderr.write(' - ' + f.filePath + ': ' + f.reason + '\\n');
|
|
225
|
-
}
|
|
226
|
-
process.stderr.write('\\nRemove the sensitive content before committing.\\n\\n');
|
|
221
|
+
for (const guard of GUARDS) {
|
|
222
|
+
const guardPath = path.join(libDir, guard.file);
|
|
223
|
+
if (!fs.existsSync(guardPath)) {
|
|
224
|
+
// A bundled guard vanished — fail-CLOSED rather than skip silently.
|
|
225
|
+
process.stderr.write('SINAPSE ' + guard.label + ': guard missing at ' + guardPath + ' — blocking commit (fail-closed).\\n');
|
|
226
|
+
process.exit(1);
|
|
227
|
+
}
|
|
228
|
+
const res = spawnSync(process.execPath, [guardPath], { stdio: 'inherit', cwd: projectRoot });
|
|
229
|
+
if (res.error) {
|
|
230
|
+
process.stderr.write('SINAPSE ' + guard.label + ': guard failed to run — blocking commit (fail-closed).\\n');
|
|
231
|
+
process.stderr.write(' ' + res.error.message + '\\n');
|
|
227
232
|
process.exit(1);
|
|
228
233
|
}
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
234
|
+
if (typeof res.status === 'number' && res.status !== 0) {
|
|
235
|
+
// Non-zero from a guard = commit blocked. A clean guard prints its own
|
|
236
|
+
// reason; a crashed guard (e.g. corrupted lib) does not, so emit an
|
|
237
|
+
// explicit fail-closed line so the block is never silent.
|
|
238
|
+
process.stderr.write('SINAPSE ' + guard.label + ': blocking commit (fail-closed, exit ' + res.status + ').\\n');
|
|
239
|
+
process.exit(res.status);
|
|
240
|
+
}
|
|
233
241
|
}
|
|
234
242
|
|
|
235
|
-
// ---
|
|
243
|
+
// --- 4. Chain to a pre-existing hook (husky or backed-up prior hook) --------
|
|
236
244
|
const explicitChain = ${chainLiteral};
|
|
237
245
|
const candidates = [];
|
|
238
246
|
if (explicitChain) {
|
|
@@ -273,6 +281,150 @@ process.exit(0);
|
|
|
273
281
|
`;
|
|
274
282
|
}
|
|
275
283
|
|
|
284
|
+
/**
|
|
285
|
+
* Build the content of the managed `pre-push` Node hook.
|
|
286
|
+
*
|
|
287
|
+
* Runs the project's `validate:all` aggregate guard (the same set the prior
|
|
288
|
+
* husky pre-push ran) before allowing a push. It is best-effort about the exact
|
|
289
|
+
* script name: it picks the first of `validate:all` / `validate` that exists in
|
|
290
|
+
* the target's package.json `scripts`, and is a no-op (allow) when neither is
|
|
291
|
+
* present (so non-SINAPSE consumer repos are not blocked by a missing script).
|
|
292
|
+
*
|
|
293
|
+
* Then chains to a pre-existing `.husky/pre-push` so any project-specific push
|
|
294
|
+
* checks still run.
|
|
295
|
+
*
|
|
296
|
+
* @param {Object} [options]
|
|
297
|
+
* @param {string|null} [options.chainHookRel]
|
|
298
|
+
* @returns {string} Hook file content.
|
|
299
|
+
*/
|
|
300
|
+
function buildPrePushHook(options = {}) {
|
|
301
|
+
const chainHookRel = options.chainHookRel || null;
|
|
302
|
+
const chainLiteral = chainHookRel ? JSON.stringify(chainHookRel) : 'null';
|
|
303
|
+
|
|
304
|
+
return `#!/usr/bin/env node
|
|
305
|
+
'use strict';
|
|
306
|
+
/* ${MANAGED_MARKER} — Auto-generated by SINAPSE git-hooks-installer. Do not edit manually. */
|
|
307
|
+
/* Re-run \`sinapse init\` (or the greenfield bootstrap) to regenerate. */
|
|
308
|
+
|
|
309
|
+
const path = require('path');
|
|
310
|
+
const fs = require('fs');
|
|
311
|
+
const { spawnSync } = require('child_process');
|
|
312
|
+
|
|
313
|
+
const projectRoot = process.cwd();
|
|
314
|
+
|
|
315
|
+
// --- 1. Run validate:all (or validate) if the project defines it -----------
|
|
316
|
+
function pickValidateScript() {
|
|
317
|
+
try {
|
|
318
|
+
const pkgPath = path.join(projectRoot, 'package.json');
|
|
319
|
+
if (!fs.existsSync(pkgPath)) return null;
|
|
320
|
+
const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));
|
|
321
|
+
const scripts = (pkg && pkg.scripts) || {};
|
|
322
|
+
for (const name of ['validate:all', 'validate']) {
|
|
323
|
+
if (typeof scripts[name] === 'string' && scripts[name].length > 0) return name;
|
|
324
|
+
}
|
|
325
|
+
} catch {
|
|
326
|
+
// Unreadable package.json — treat as "no validate script" (allow).
|
|
327
|
+
}
|
|
328
|
+
return null;
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
const script = pickValidateScript();
|
|
332
|
+
if (script) {
|
|
333
|
+
const npmCmd = process.platform === 'win32' ? 'npm.cmd' : 'npm';
|
|
334
|
+
// shell:true on Windows — spawning npm.cmd without it throws EINVAL (CVE-2024-27980 /
|
|
335
|
+
// Node DEP0190). Args are fixed/literal here, so there is no shell-injection surface.
|
|
336
|
+
const res = spawnSync(npmCmd, ['run', '--silent', script], { stdio: 'inherit', cwd: projectRoot, shell: process.platform === 'win32' });
|
|
337
|
+
if (res.error) {
|
|
338
|
+
process.stderr.write('SINAPSE pre-push: could not run "npm run ' + script + '" — blocking push (fail-closed).\\n');
|
|
339
|
+
process.stderr.write(' ' + res.error.message + '\\n');
|
|
340
|
+
process.stderr.write(' Bypass (emergency only): git push --no-verify\\n');
|
|
341
|
+
process.exit(1);
|
|
342
|
+
}
|
|
343
|
+
if (typeof res.status === 'number' && res.status !== 0) {
|
|
344
|
+
process.stderr.write('\\nSINAPSE pre-push: validation failed (see output above). Push blocked.\\n');
|
|
345
|
+
process.stderr.write(' Bypass (emergency only): git push --no-verify\\n\\n');
|
|
346
|
+
process.exit(res.status);
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
// --- 2. Chain to a pre-existing pre-push hook ------------------------------
|
|
351
|
+
const explicitChain = ${chainLiteral};
|
|
352
|
+
const candidates = [];
|
|
353
|
+
if (explicitChain) {
|
|
354
|
+
candidates.push(path.resolve(projectRoot, explicitChain));
|
|
355
|
+
}
|
|
356
|
+
candidates.push(path.join(projectRoot, '.husky', 'pre-push'));
|
|
357
|
+
|
|
358
|
+
const selfPath = __filename;
|
|
359
|
+
for (const candidate of candidates) {
|
|
360
|
+
if (!candidate || !fs.existsSync(candidate)) continue;
|
|
361
|
+
if (path.resolve(candidate) === path.resolve(selfPath)) continue;
|
|
362
|
+
|
|
363
|
+
const isJs = candidate.endsWith('.js') || candidate.endsWith('.cjs');
|
|
364
|
+
const cmd = isJs ? process.execPath : candidate;
|
|
365
|
+
const args = isJs ? [candidate] : [];
|
|
366
|
+
const res = spawnSync(cmd, args, { stdio: 'inherit', cwd: projectRoot });
|
|
367
|
+
if (res.error) {
|
|
368
|
+
if (!isJs) {
|
|
369
|
+
const shRes = spawnSync('sh', [candidate], { stdio: 'inherit', cwd: projectRoot });
|
|
370
|
+
if (!shRes.error) {
|
|
371
|
+
if (typeof shRes.status === 'number' && shRes.status !== 0) process.exit(shRes.status);
|
|
372
|
+
break;
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
process.stderr.write('SINAPSE pre-push: failed to run chained hook ' + candidate + ': ' + res.error.message + '\\n');
|
|
376
|
+
process.exit(1);
|
|
377
|
+
}
|
|
378
|
+
if (typeof res.status === 'number' && res.status !== 0) process.exit(res.status);
|
|
379
|
+
break;
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
process.exit(0);
|
|
383
|
+
`;
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
/**
|
|
387
|
+
* Build the content of the managed `post-commit` Node hook.
|
|
388
|
+
*
|
|
389
|
+
* Preserves the prior husky post-commit behavior (cache-clear + IDS registry
|
|
390
|
+
* update) by delegating to the project's existing scripts when present. Both
|
|
391
|
+
* sub-scripts are non-blocking by design (any failure is swallowed) so a
|
|
392
|
+
* post-commit problem never breaks the commit that already happened.
|
|
393
|
+
*
|
|
394
|
+
* @returns {string} Hook file content.
|
|
395
|
+
*/
|
|
396
|
+
function buildPostCommitHook() {
|
|
397
|
+
return `#!/usr/bin/env node
|
|
398
|
+
'use strict';
|
|
399
|
+
/* ${MANAGED_MARKER} — Auto-generated by SINAPSE git-hooks-installer. Do not edit manually. */
|
|
400
|
+
/* Re-run \`sinapse init\` (or the greenfield bootstrap) to regenerate. */
|
|
401
|
+
|
|
402
|
+
const path = require('path');
|
|
403
|
+
const fs = require('fs');
|
|
404
|
+
const { spawnSync } = require('child_process');
|
|
405
|
+
|
|
406
|
+
const projectRoot = process.cwd();
|
|
407
|
+
|
|
408
|
+
// Migrated from .husky/post-commit (non-blocking, best-effort).
|
|
409
|
+
const POST_COMMIT_SCRIPTS = [
|
|
410
|
+
path.join('.sinapse-ai', 'infrastructure', 'scripts', 'git-hooks', 'post-commit.js'),
|
|
411
|
+
path.join('.sinapse-ai', 'hooks', 'ids-post-commit.js'),
|
|
412
|
+
];
|
|
413
|
+
|
|
414
|
+
for (const rel of POST_COMMIT_SCRIPTS) {
|
|
415
|
+
const abs = path.join(projectRoot, rel);
|
|
416
|
+
if (!fs.existsSync(abs)) continue;
|
|
417
|
+
try {
|
|
418
|
+
spawnSync(process.execPath, [abs], { stdio: 'ignore', cwd: projectRoot });
|
|
419
|
+
} catch {
|
|
420
|
+
// Never block on post-commit failures.
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
process.exit(0);
|
|
425
|
+
`;
|
|
426
|
+
}
|
|
427
|
+
|
|
276
428
|
/**
|
|
277
429
|
* Install the SINAPSE git guard into a project.
|
|
278
430
|
*
|
|
@@ -345,10 +497,20 @@ async function installGitHooks(options = {}) {
|
|
|
345
497
|
}
|
|
346
498
|
}
|
|
347
499
|
|
|
348
|
-
// Bundle the
|
|
500
|
+
// Bundle the guard lib and write the managed hooks (pre-commit, pre-push,
|
|
501
|
+
// post-commit). All three live under core.hooksPath so there is a single
|
|
502
|
+
// active hook system (no husky/hooksPath split).
|
|
349
503
|
copyScannerLib(hooksDir);
|
|
350
504
|
writeManagedHook(hooksDir, 'pre-commit', buildPreCommitHook({ chainHookRel: explicitChain }));
|
|
351
505
|
|
|
506
|
+
// pre-push: run validate:all, then chain to any prior .husky/pre-push.
|
|
507
|
+
const huskyPrePush = path.join(projectDir, '.husky', 'pre-push');
|
|
508
|
+
const prePushChain = fs.existsSync(huskyPrePush) ? path.join('.husky', 'pre-push') : null;
|
|
509
|
+
writeManagedHook(hooksDir, 'pre-push', buildPrePushHook({ chainHookRel: prePushChain }));
|
|
510
|
+
|
|
511
|
+
// post-commit: migrated cache-clear + IDS registry update (non-blocking).
|
|
512
|
+
writeManagedHook(hooksDir, 'post-commit', buildPostCommitHook());
|
|
513
|
+
|
|
352
514
|
// Point core.hooksPath at our managed dir (project-relative for portability).
|
|
353
515
|
const relHooksDir = MANAGED_HOOKS_DIRNAME.split(path.sep).join('/');
|
|
354
516
|
const set = await setCoreHooksPath(projectDir, relHooksDir);
|
|
@@ -379,6 +541,8 @@ module.exports = {
|
|
|
379
541
|
writeManagedHook,
|
|
380
542
|
copyScannerLib,
|
|
381
543
|
buildPreCommitHook,
|
|
544
|
+
buildPrePushHook,
|
|
545
|
+
buildPostCommitHook,
|
|
382
546
|
MANAGED_HOOKS_DIRNAME,
|
|
383
547
|
MANAGED_MARKER,
|
|
384
548
|
};
|
|
@@ -209,6 +209,35 @@ async function copyDirectoryWithRootReplacement(sourceDir, destDir, onProgress =
|
|
|
209
209
|
return copiedFiles;
|
|
210
210
|
}
|
|
211
211
|
|
|
212
|
+
/**
|
|
213
|
+
* Codex CLI context files that live at the package ROOT (not under .codex/ or
|
|
214
|
+
* .sinapse-ai/), so the directory-copy loops never reach them. AGENTS.md is the
|
|
215
|
+
* file Codex reads by default — it carries the Imperator greeting and the full
|
|
216
|
+
* agent roster. Delivered only when the user selects Codex.
|
|
217
|
+
* @constant {string[]}
|
|
218
|
+
*/
|
|
219
|
+
const CODEX_ROOT_FILES = ['AGENTS.md'];
|
|
220
|
+
|
|
221
|
+
/**
|
|
222
|
+
* Deliver the Codex root context files (AGENTS.md) into the target project.
|
|
223
|
+
* Idempotent: re-running overwrites the destination so it stays aligned with the
|
|
224
|
+
* shipped roster. Missing source files are skipped silently (never throws).
|
|
225
|
+
*
|
|
226
|
+
* @param {string} pkgRoot - Package root (where AGENTS.md ships)
|
|
227
|
+
* @param {string} targetDir - Destination project root
|
|
228
|
+
* @returns {Promise<string[]>} Relative paths actually delivered
|
|
229
|
+
*/
|
|
230
|
+
async function deliverCodexRootFiles(pkgRoot, targetDir) {
|
|
231
|
+
const delivered = [];
|
|
232
|
+
for (const name of CODEX_ROOT_FILES) {
|
|
233
|
+
const src = path.join(pkgRoot, name);
|
|
234
|
+
if (!await fs.pathExists(src)) continue;
|
|
235
|
+
const ok = await copyFileWithRootReplacement(src, path.join(targetDir, name));
|
|
236
|
+
if (ok) delivered.push(name);
|
|
237
|
+
}
|
|
238
|
+
return delivered;
|
|
239
|
+
}
|
|
240
|
+
|
|
212
241
|
/**
|
|
213
242
|
* Install .sinapse-ai content to target directory
|
|
214
243
|
*
|
|
@@ -225,6 +254,7 @@ async function installSinapseCore(options = {}) {
|
|
|
225
254
|
const {
|
|
226
255
|
targetDir = process.cwd(),
|
|
227
256
|
onProgress = null,
|
|
257
|
+
includeCodex = false,
|
|
228
258
|
} = options;
|
|
229
259
|
|
|
230
260
|
const result = {
|
|
@@ -283,6 +313,45 @@ async function installSinapseCore(options = {}) {
|
|
|
283
313
|
}
|
|
284
314
|
}
|
|
285
315
|
|
|
316
|
+
// Top-level payload dirs that live OUTSIDE .sinapse-ai (siblings at the
|
|
317
|
+
// package root), so the FOLDERS_TO_COPY loop above never reaches them:
|
|
318
|
+
// - squads/ : the 17 domain squads (160 specialists + orchestrators).
|
|
319
|
+
// Needed by BOTH IDEs — Claude syncs the squad orchestrators
|
|
320
|
+
// into .claude/commands, and Codex resolves the full 172-agent
|
|
321
|
+
// roster from here. Without it a project has only the 12 core
|
|
322
|
+
// agents, contradicting the shipped AGENTS.md.
|
|
323
|
+
// - .codex/ : Codex CLI payload (resolvers, tasks, JSON registries). Only
|
|
324
|
+
// when the user selected Codex; agents + skills are then
|
|
325
|
+
// regenerated from squads/ + core by sync-codex-local-first.js.
|
|
326
|
+
const pkgRoot = path.dirname(sourceDir);
|
|
327
|
+
const topLevelDirs = ['squads'];
|
|
328
|
+
if (includeCodex) topLevelDirs.push('.codex');
|
|
329
|
+
for (const dirName of topLevelDirs) {
|
|
330
|
+
const src = path.join(pkgRoot, dirName);
|
|
331
|
+
const dest = path.join(targetDir, dirName);
|
|
332
|
+
if (await fs.pathExists(src)) {
|
|
333
|
+
spinner.text = `Copying ${dirName}...`;
|
|
334
|
+
const copied = await copyDirectoryWithRootReplacement(src, dest, onProgress);
|
|
335
|
+
result.installedFiles.push(...copied.map((f) => path.join(dirName, f)));
|
|
336
|
+
if (dirName === '.codex') result.codexInstalledFiles = copied.length;
|
|
337
|
+
if (dirName === 'squads') result.squadsInstalledFiles = copied.length;
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
// AGENTS.md is the Codex CLI's default context file (Imperator greeting +
|
|
342
|
+
// the full agent roster). It lives at the package ROOT (not under .codex/ or
|
|
343
|
+
// .sinapse-ai/), so neither loop above reaches it. Without it, a Codex user's
|
|
344
|
+
// project has the .codex pointers/resolvers but no greeting and no roster —
|
|
345
|
+
// the parity built in the repo never reaches the user.
|
|
346
|
+
if (includeCodex) {
|
|
347
|
+
spinner.text = 'Copying AGENTS.md...';
|
|
348
|
+
const delivered = await deliverCodexRootFiles(pkgRoot, targetDir);
|
|
349
|
+
if (delivered.includes('AGENTS.md')) {
|
|
350
|
+
result.installedFiles.push('AGENTS.md');
|
|
351
|
+
result.agentsMdInstalled = true;
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
|
|
286
355
|
// Create install manifest
|
|
287
356
|
spinner.text = 'Creating installation manifest...';
|
|
288
357
|
const packageVersion = require('../../../../package.json').version;
|
|
@@ -428,6 +497,8 @@ module.exports = {
|
|
|
428
497
|
copyDirectoryWithRootReplacement,
|
|
429
498
|
generateVersionJson,
|
|
430
499
|
generateFileHashes,
|
|
500
|
+
deliverCodexRootFiles,
|
|
431
501
|
FOLDERS_TO_COPY,
|
|
432
502
|
ROOT_FILES_TO_COPY,
|
|
503
|
+
CODEX_ROOT_FILES,
|
|
433
504
|
};
|
|
@@ -139,7 +139,7 @@ function showWelcome() {
|
|
|
139
139
|
console.log(` ${t('welcomeMessage')}`);
|
|
140
140
|
console.log(` ${t('welcomeSubtitle')}`);
|
|
141
141
|
console.log('');
|
|
142
|
-
console.log('
|
|
142
|
+
console.log(' 17 squads · 172 agents · 1,200 tasks');
|
|
143
143
|
console.log(` ${t('welcomeDesc1')}`);
|
|
144
144
|
console.log(` ${t('welcomeDesc2')}`);
|
|
145
145
|
console.log('');
|
|
@@ -201,34 +201,13 @@ async function copyAgentFiles(projectRoot, agentFolder, ideConfig = null) {
|
|
|
201
201
|
|
|
202
202
|
for (const file of agentFiles) {
|
|
203
203
|
const sourcePath = path.join(sourceDir, file);
|
|
204
|
-
const agentName = file.replace('.md', '');
|
|
205
|
-
|
|
206
204
|
// Only copy if source is a file (not directory)
|
|
207
205
|
const stat = await fs.stat(sourcePath);
|
|
208
206
|
if (stat.isFile()) {
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
const copilotTransformer = require('../../../../.sinapse-ai/infrastructure/scripts/ide-sync/transformers/github-copilot');
|
|
214
|
-
const agentData = agentParser.parseAgentFile(sourcePath);
|
|
215
|
-
const content = copilotTransformer.transform(agentData);
|
|
216
|
-
const filename = copilotTransformer.getFilename(agentData);
|
|
217
|
-
const targetPath = path.join(targetDir, filename);
|
|
218
|
-
await fs.writeFile(targetPath, content, 'utf8');
|
|
219
|
-
copiedFiles.push(targetPath);
|
|
220
|
-
} catch (transformError) {
|
|
221
|
-
// Fallback: copy raw file with .agent.md extension
|
|
222
|
-
const targetPath = path.join(targetDir, `${agentName}.agent.md`);
|
|
223
|
-
await fs.copy(sourcePath, targetPath);
|
|
224
|
-
copiedFiles.push(targetPath);
|
|
225
|
-
}
|
|
226
|
-
} else {
|
|
227
|
-
// Normal copy for other IDEs
|
|
228
|
-
const targetPath = path.join(targetDir, file);
|
|
229
|
-
await fs.copy(sourcePath, targetPath);
|
|
230
|
-
copiedFiles.push(targetPath);
|
|
231
|
-
}
|
|
207
|
+
// Copy agent file (Claude Code + Codex only — secondary IDE adapters removed)
|
|
208
|
+
const targetPath = path.join(targetDir, file);
|
|
209
|
+
await fs.copy(sourcePath, targetPath);
|
|
210
|
+
copiedFiles.push(targetPath);
|
|
232
211
|
}
|
|
233
212
|
}
|
|
234
213
|
|
|
@@ -658,6 +637,19 @@ const HOOK_EVENT_MAP = {
|
|
|
658
637
|
matcher: null,
|
|
659
638
|
timeout: 5,
|
|
660
639
|
},
|
|
640
|
+
// Statusline agent/squad tracker (Cluster D — feedback visual).
|
|
641
|
+
// Detector writes the per-cwd session-cache the statusline reads;
|
|
642
|
+
// clear wipes it when the session ends. FAIL-OPEN: both exit 0 on error.
|
|
643
|
+
'track-agent.cjs': {
|
|
644
|
+
event: 'UserPromptSubmit',
|
|
645
|
+
matcher: null,
|
|
646
|
+
timeout: 10,
|
|
647
|
+
},
|
|
648
|
+
'track-agent-clear.cjs': {
|
|
649
|
+
event: 'Stop',
|
|
650
|
+
matcher: null,
|
|
651
|
+
timeout: 10,
|
|
652
|
+
},
|
|
661
653
|
};
|
|
662
654
|
|
|
663
655
|
/** Default event config for unmapped hooks (backwards compatible). */
|
|
@@ -937,7 +929,12 @@ async function linkGeminiExtension(projectRoot) {
|
|
|
937
929
|
return { status: 'skipped', reason: 'manifest-not-found' };
|
|
938
930
|
}
|
|
939
931
|
|
|
940
|
-
|
|
932
|
+
// On Windows, `gemini` is a .cmd/.ps1 shim — spawnSync without a shell throws
|
|
933
|
+
// EINVAL. Run through the shell on win32 so the shim resolves.
|
|
934
|
+
const versionCheck = spawnSync('gemini', ['--version'], {
|
|
935
|
+
encoding: 'utf8',
|
|
936
|
+
shell: process.platform === 'win32',
|
|
937
|
+
});
|
|
941
938
|
if (versionCheck.status !== 0) {
|
|
942
939
|
return { status: 'skipped', reason: 'gemini-cli-not-available' };
|
|
943
940
|
}
|
|
@@ -946,6 +943,7 @@ async function linkGeminiExtension(projectRoot) {
|
|
|
946
943
|
cwd: projectRoot,
|
|
947
944
|
encoding: 'utf8',
|
|
948
945
|
timeout: 30000,
|
|
946
|
+
shell: process.platform === 'win32',
|
|
949
947
|
});
|
|
950
948
|
|
|
951
949
|
if (linkResult.status === 0) {
|
|
@@ -960,6 +958,7 @@ async function linkGeminiExtension(projectRoot) {
|
|
|
960
958
|
cwd: projectRoot,
|
|
961
959
|
encoding: 'utf8',
|
|
962
960
|
timeout: 30000,
|
|
961
|
+
shell: process.platform === 'win32',
|
|
963
962
|
});
|
|
964
963
|
|
|
965
964
|
if (uninstall.status !== 0) {
|
|
@@ -970,6 +969,7 @@ async function linkGeminiExtension(projectRoot) {
|
|
|
970
969
|
cwd: projectRoot,
|
|
971
970
|
encoding: 'utf8',
|
|
972
971
|
timeout: 30000,
|
|
972
|
+
shell: process.platform === 'win32',
|
|
973
973
|
});
|
|
974
974
|
|
|
975
975
|
if (linkResult.status === 0) {
|