sinapse-ai 9.3.0 → 9.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/CLAUDE.md +60 -341
- package/.claude/hooks/enforce-architecture-first.py +197 -197
- package/.claude/hooks/enforce-git-push-authority.sh +25 -4
- package/.claude/hooks/mind-clone-governance.py +193 -193
- package/.claude/hooks/read-protection.py +152 -152
- package/.claude/hooks/sql-governance.py +183 -183
- package/.claude/hooks/verify-packages.cjs +83 -0
- package/.claude/hooks/write-path-validation.py +195 -195
- package/.claude/rules/agent-authority.md +6 -0
- package/.claude/rules/agent-handoff.md +5 -0
- package/.claude/rules/cross-squad-routing.md +5 -0
- package/.claude/rules/hook-governance.md +7 -0
- package/.claude/rules/mandatory-delegation.md +24 -0
- package/.claude/rules/mcp-usage.md +3 -1
- package/.claude/rules/project-intelligence.md +63 -0
- package/.claude/rules/response-format.md +4 -0
- package/.claude/rules/safe-collaboration.md +14 -2
- package/.claude/rules/security-data-protection.md +27 -0
- package/.claude/rules/squad-awareness.md +96 -68
- package/.claude/rules/token-economy.md +148 -0
- package/.claude/rules/tool-examples.md +6 -0
- package/.claude/rules/workflow-execution.md +7 -0
- package/.codex/agents/analyst.md +342 -71
- package/.codex/agents/architect.md +533 -68
- package/.codex/agents/data-engineer.md +530 -106
- package/.codex/agents/developer.md +657 -0
- package/.codex/agents/devops.md +639 -69
- package/.codex/agents/product-lead.md +362 -0
- package/.codex/agents/project-lead.md +405 -0
- package/.codex/agents/quality-gate.md +538 -0
- package/.codex/agents/sinapse-orqx.md +9 -7
- package/.codex/agents/sprint-lead.md +315 -0
- package/.codex/agents/squad-creator.md +402 -0
- package/.codex/agents/ux-design-expert.md +523 -0
- package/.codex/delegation-matrix.json +756 -44
- package/.codex/handoff-packet.schema.json +30 -6
- package/.sinapse-ai/core/code-intel/registry-syncer.js +56 -3
- package/.sinapse-ai/core/doctor/checks/agent-memory.js +5 -1
- package/.sinapse-ai/core/doctor/checks/claude-md.js +4 -1
- package/.sinapse-ai/core/doctor/checks/code-intel.js +5 -1
- package/.sinapse-ai/core/doctor/checks/commands-count.js +4 -1
- package/.sinapse-ai/core/doctor/checks/constitution-consistency.js +4 -1
- package/.sinapse-ai/core/doctor/checks/core-config.js +4 -1
- package/.sinapse-ai/core/doctor/checks/entity-registry.js +6 -1
- package/.sinapse-ai/core/doctor/checks/git-hooks.js +5 -1
- package/.sinapse-ai/core/doctor/checks/graph-dashboard.js +4 -1
- package/.sinapse-ai/core/doctor/checks/hooks-claude-count.js +5 -1
- package/.sinapse-ai/core/doctor/checks/ide-sync.js +4 -1
- package/.sinapse-ai/core/doctor/checks/node-version.js +4 -1
- package/.sinapse-ai/core/doctor/checks/npm-packages.js +4 -1
- package/.sinapse-ai/core/doctor/checks/rules-files.js +4 -1
- package/.sinapse-ai/core/doctor/checks/settings-json.js +4 -1
- package/.sinapse-ai/core/doctor/checks/skills-count.js +4 -1
- package/.sinapse-ai/core/doctor/index.js +157 -50
- package/.sinapse-ai/core/ids/registry-updater.js +6 -1
- package/.sinapse-ai/core/logger/index.js +319 -0
- package/.sinapse-ai/core/orchestration/terminal-spawner.js +2 -2
- package/.sinapse-ai/core/telemetry/index.js +247 -0
- package/.sinapse-ai/data/entity-registry.yaml +1060 -808
- package/.sinapse-ai/development/agents/analyst.md +90 -0
- package/.sinapse-ai/development/agents/architect.md +78 -0
- package/.sinapse-ai/development/agents/data-engineer.md +38 -0
- package/.sinapse-ai/development/agents/developer.md +97 -0
- package/.sinapse-ai/development/agents/devops.md +121 -0
- package/.sinapse-ai/development/agents/product-lead.md +27 -0
- package/.sinapse-ai/development/agents/project-lead.md +28 -0
- package/.sinapse-ai/development/agents/quality-gate.md +89 -0
- package/.sinapse-ai/development/agents/sprint-lead/MEMORY.md +8 -0
- package/.sinapse-ai/development/agents/sprint-lead.md +28 -0
- package/.sinapse-ai/development/agents/squad-creator.md +58 -0
- package/.sinapse-ai/development/agents/ux-design-expert.md +28 -0
- package/.sinapse-ai/development/checklists/agent-quality-gate.md +27 -0
- package/.sinapse-ai/development/checklists/brownfield-compatibility-checklist.md +20 -0
- package/.sinapse-ai/development/checklists/code-review-checklist.md +106 -0
- package/.sinapse-ai/development/checklists/issue-triage-checklist.md +9 -0
- package/.sinapse-ai/development/checklists/memory-audit-checklist.md +16 -0
- package/.sinapse-ai/development/checklists/pr-quality-checklist.md +72 -0
- package/.sinapse-ai/development/checklists/security-deployment-checklist.md +54 -0
- package/.sinapse-ai/development/checklists/self-critique-checklist.md +19 -1
- package/.sinapse-ai/development/knowledge-base/agent-communication-protocol.md +127 -0
- package/.sinapse-ai/development/knowledge-base/database-scaling-patterns.md +374 -0
- package/.sinapse-ai/development/knowledge-base/environment-deployment-patterns.md +353 -0
- package/.sinapse-ai/development/knowledge-base/gotchas-patterns.md +224 -0
- package/.sinapse-ai/development/knowledge-base/infrastructure-decision-framework.md +221 -0
- package/.sinapse-ai/development/knowledge-base/security-pre-deploy-checklist.md +410 -0
- package/.sinapse-ai/development/knowledge-base/software-architecture-patterns.md +299 -0
- package/.sinapse-ai/development/knowledge-base/token-economy-guide.md +198 -0
- package/.sinapse-ai/development/scripts/populate-entity-registry.js +5 -1
- package/.sinapse-ai/development/skills/captcha-handler.md +82 -0
- package/.sinapse-ai/development/skills/chrome-brain.md +81 -0
- package/.sinapse-ai/development/skills/debug.md +57 -0
- package/.sinapse-ai/development/skills/deploy-readiness.md +93 -0
- package/.sinapse-ai/development/skills/fast-review.md +69 -0
- package/.sinapse-ai/development/skills/model-router.md +92 -0
- package/.sinapse-ai/development/skills/research-synthesis.md +77 -0
- package/.sinapse-ai/development/skills/security-scan.md +73 -0
- package/.sinapse-ai/development/skills/sinapse-methodology.md +175 -0
- package/.sinapse-ai/development/skills/story-fast-track.md +71 -0
- package/.sinapse-ai/development/skills/verify.md +53 -0
- package/.sinapse-ai/development/tasks/dev-develop-story.md +10 -0
- package/.sinapse-ai/development/tasks/environment-promotion-pipeline.md +582 -0
- package/.sinapse-ai/development/tasks/generate-agent-handoff.md +223 -0
- package/.sinapse-ai/development/tasks/infrastructure-assessment.md +432 -0
- package/.sinapse-ai/development/tasks/load-testing-setup.md +611 -0
- package/.sinapse-ai/development/tasks/observability-blueprint.md +562 -0
- package/.sinapse-ai/development/templates/legal/breach-notification-tmpl.md +113 -0
- package/.sinapse-ai/development/templates/legal/privacy-policy-tmpl.md +93 -0
- package/.sinapse-ai/development/templates/legal/terms-of-service-tmpl.md +85 -0
- 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/agent-template.md +17 -4
- package/.sinapse-ai/development/templates/squad/checklist-template.md +13 -5
- package/.sinapse-ai/development/templates/squad/task-template.md +7 -0
- package/.sinapse-ai/development/templates/squad/workflow-template.yaml +7 -0
- package/.sinapse-ai/development/templates/squad-template/LICENSE +22 -22
- package/.sinapse-ai/development/workflows/fast-track.yaml +87 -0
- package/.sinapse-ai/development/workflows/story-development-cycle.yaml +40 -1
- package/.sinapse-ai/hooks/ids-post-commit.js +22 -0
- package/.sinapse-ai/infrastructure/contracts/compatibility/README.md +42 -0
- package/.sinapse-ai/infrastructure/contracts/compatibility/sinapse-current.yaml +35 -0
- package/.sinapse-ai/infrastructure/scripts/llm-routing/templates/claude-free-tracked.cmd +127 -127
- package/.sinapse-ai/infrastructure/scripts/llm-routing/templates/deepseek-proxy.cmd +71 -71
- package/.sinapse-ai/infrastructure/scripts/llm-routing/templates/deepseek-usage.cmd +51 -51
- package/.sinapse-ai/infrastructure/scripts/pr-review-ai.js +16 -13
- package/.sinapse-ai/infrastructure/scripts/setup-project-infra.js +128 -0
- package/.sinapse-ai/infrastructure/scripts/test-discovery.js +8 -3
- package/.sinapse-ai/infrastructure/scripts/validate-codex-delegation.js +3 -1
- package/.sinapse-ai/infrastructure/scripts/validate-manifest-parity.js +380 -0
- package/.sinapse-ai/infrastructure/scripts/validate-parity.js +76 -25
- package/.sinapse-ai/infrastructure/templates/coderabbit.yaml.template +280 -280
- package/.sinapse-ai/infrastructure/templates/config/env.example +16 -0
- package/.sinapse-ai/infrastructure/templates/config/gitignore-additions.tmpl +59 -0
- package/.sinapse-ai/infrastructure/templates/github/CODEOWNERS.template +12 -0
- package/.sinapse-ai/infrastructure/templates/github/PULL_REQUEST_TEMPLATE.md +29 -0
- package/.sinapse-ai/infrastructure/templates/github/ci-template.yml +77 -0
- package/.sinapse-ai/infrastructure/templates/github/issue-templates/bug_report.md +34 -0
- package/.sinapse-ai/infrastructure/templates/github/issue-templates/feature_request.md +19 -0
- 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/sinapse-sync.yaml.template +183 -183
- package/.sinapse-ai/install-manifest.yaml +333 -162
- package/.sinapse-ai/local-config.yaml.template +65 -65
- package/.sinapse-ai/monitor/hooks/lib/__init__.py +2 -2
- package/.sinapse-ai/monitor/hooks/lib/enrich.py +59 -59
- package/.sinapse-ai/monitor/hooks/lib/send_event.py +48 -48
- package/.sinapse-ai/monitor/hooks/notification.py +30 -30
- package/.sinapse-ai/monitor/hooks/post_tool_use.py +46 -46
- package/.sinapse-ai/monitor/hooks/pre_compact.py +30 -30
- package/.sinapse-ai/monitor/hooks/pre_tool_use.py +41 -41
- package/.sinapse-ai/monitor/hooks/stop.py +30 -30
- package/.sinapse-ai/monitor/hooks/subagent_stop.py +30 -30
- package/.sinapse-ai/monitor/hooks/user_prompt_submit.py +39 -39
- 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/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/story-tmpl.yaml +59 -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/.sinapse-ai/scripts/diagnostics/health-dashboard/package-lock.json +427 -355
- package/LICENSE +34 -34
- package/README.en.md +167 -20
- package/README.md +190 -22
- package/bin/cli.js +510 -196
- package/bin/postinstall.js +564 -0
- package/bin/sinapse-cli +283 -283
- package/bin/sinapse-graph.js +9 -0
- package/bin/sinapse-init.js +36 -4
- package/bin/sinapse-minimal.js +20 -9
- package/bin/sinapse.js +202 -122
- package/bin/utils/deprecation-warning.js +46 -0
- package/bin/utils/pre-push-safety.js +14 -0
- package/docs/TELEMETRY.md +131 -0
- package/docs/chrome-brain-upgrade-plan.md +624 -0
- package/docs/codex-integration-process.md +22 -0
- package/docs/codex-parity-program.md +27 -0
- package/docs/framework/orqx-plan.md +1 -1
- package/docs/ide-integration.md +36 -0
- package/docs/installation/chrome-brain.md +17 -7
- package/docs/mega-upgrade-orchestration-plan.md +71 -0
- package/docs/pt/contributing.md +20 -0
- package/docs/research-synthesis-for-upgrade.md +511 -0
- package/docs/security-audit-report.md +306 -0
- package/package.json +20 -8
- package/packages/installer/src/config/configure-environment.js +19 -44
- package/packages/installer/src/detection/detect-project-type.js +181 -63
- package/packages/installer/src/installer/manifest-signature.js +32 -17
- package/packages/installer/src/wizard/i18n.js +12 -0
- package/packages/installer/src/wizard/ide-config-generator.js +8 -39
- package/packages/installer/src/wizard/index.js +119 -14
- package/packages/installer/src/wizard/questions.js +2 -3
- package/packages/installer/tests/integration/environment-configuration.test.js +7 -5
- package/packages/installer/tests/unit/detection/detect-project-type.test.js +138 -1
- package/packages/installer/tests/unit/doctor/doctor-orchestrator.test.js +3 -3
- package/packages/sinapse-install/bin/edmcp.js +0 -0
- package/packages/sinapse-install/bin/sinapse-install.js +0 -0
- package/packages/sinapse-pro-cli/bin/sinapse-pro.js +0 -0
- package/scripts/check-markdown-links.py +353 -353
- package/scripts/coverage-report-summary.js +169 -0
- package/scripts/generate-install-manifest.js +6 -2
- package/scripts/release-readiness.js +169 -0
- package/scripts/test-install-matrix-local.sh +153 -0
- package/scripts/validate-install-docs.js +394 -0
- package/scripts/validate-no-external-refs.js +376 -0
- package/scripts/validate-squad-orqx.js +302 -0
- package/scripts/validate-story-meta.js +263 -0
- package/squads/claude-code-mastery/CHANGELOG.md +1 -1
- package/squads/claude-code-mastery/README.md +2 -2
- package/squads/claude-code-mastery/knowledge-base/claude-code-internals-reference.md +927 -0
- package/squads/claude-code-mastery/squad.yaml +1 -1
- package/squads/squad-artdir/README.md +90 -0
- package/squads/squad-artdir/agents/accessibility-guardian.md +184 -0
- package/squads/squad-artdir/agents/artdir-orqx.md +145 -0
- package/squads/squad-artdir/agents/color-psychologist.md +166 -0
- package/squads/squad-artdir/agents/cro-persuasion.md +161 -0
- package/squads/squad-artdir/agents/design-system-architect.md +100 -0
- package/squads/squad-artdir/agents/ia-architect.md +169 -0
- package/squads/squad-artdir/agents/interaction-designer.md +162 -0
- package/squads/squad-artdir/agents/layout-engineer.md +163 -0
- package/squads/squad-artdir/agents/motion-architect.md +185 -0
- package/squads/squad-artdir/agents/platform-aesthetic-director.md +84 -0
- package/squads/squad-artdir/agents/premium-packaging-strategist.md +107 -0
- package/squads/squad-artdir/agents/product-surface-director.md +86 -0
- package/squads/squad-artdir/agents/type-systemist.md +138 -0
- package/squads/squad-artdir/agents/visual-strategist.md +127 -0
- package/squads/squad-artdir/checklists/seven-pillars-validation-checklist.md +172 -0
- package/squads/squad-artdir/knowledge-base/case-nyo-ia-reference.md +289 -0
- package/squads/squad-artdir/knowledge-base/deliverables-templates.md +457 -0
- package/squads/squad-artdir/knowledge-base/motion-technique-catalog.md +247 -0
- package/squads/squad-artdir/knowledge-base/premium-packaging-principles.md +133 -0
- package/squads/squad-artdir/knowledge-base/psychological-toolkit.md +229 -0
- package/squads/squad-artdir/knowledge-base/saas-art-direction-canon.md +242 -0
- package/squads/squad-artdir/knowledge-base/seven-pillars-framework.md +289 -0
- package/squads/squad-artdir/knowledge-base/ten-pillars-framework.md +221 -0
- package/squads/squad-artdir/package.json +20 -0
- package/squads/squad-artdir/squad.yaml +271 -0
- package/squads/squad-artdir/tasks/audit-conversion.md +97 -0
- package/squads/squad-artdir/tasks/audit-drift-multi-surface.md +55 -0
- package/squads/squad-artdir/tasks/consult-saas-canon.md +54 -0
- package/squads/squad-artdir/tasks/create-art-direction-brief.md +110 -0
- package/squads/squad-artdir/tasks/create-premium-packaging-brief.md +61 -0
- package/squads/squad-artdir/tasks/create-wireflow.md +84 -0
- package/squads/squad-artdir/tasks/design-color-system.md +81 -0
- package/squads/squad-artdir/tasks/design-product-surface.md +60 -0
- package/squads/squad-artdir/tasks/design-token-system.md +58 -0
- package/squads/squad-artdir/tasks/diagnose-visual-language.md +92 -0
- package/squads/squad-artdir/tasks/first-5-minutes-choreography.md +65 -0
- package/squads/squad-artdir/tasks/specify-motion-system.md +84 -0
- package/squads/squad-artdir/tasks/validate-against-pillars.md +143 -0
- package/squads/squad-artdir/templates/art-direction-brief-template.md +215 -0
- package/squads/squad-artdir/workflows/conversion-audit-cycle.yaml +78 -0
- package/squads/squad-artdir/workflows/full-art-direction-cycle.yaml +98 -0
- package/squads/squad-artdir/workflows/saas-platform-art-direction-cycle.yaml +174 -0
- package/squads/squad-brand/knowledge-base/ai-visual-generation-canon.md +234 -0
- package/squads/squad-brand/knowledge-base/archetype-brand-mapping.md +12 -1
- package/squads/squad-brand/knowledge-base/brand-activism-cultural-branding.md +216 -0
- package/squads/squad-brand/knowledge-base/brand-audit-criteria.md +58 -0
- package/squads/squad-brand/knowledge-base/brand-digital-strategy.md +188 -0
- package/squads/squad-brand/knowledge-base/brand-legal-ip.md +222 -0
- package/squads/squad-brand/knowledge-base/brand-naming-framework.md +163 -0
- package/squads/squad-brand/knowledge-base/branding-master-reference.md +1001 -0
- package/squads/squad-brand/knowledge-base/color-psychology.md +25 -12
- package/squads/squad-brand/knowledge-base/employer-personal-branding.md +206 -0
- package/squads/squad-brand/knowledge-base/routing-catalog.md +34 -0
- package/squads/squad-brand/knowledge-base/sonic-branding-principles.md +6 -1
- package/squads/squad-brand/knowledge-base/typography-personality.md +34 -0
- package/squads/squad-brand/squad.yaml +20 -6
- package/squads/squad-claude/knowledge-base/context-window-optimization.md +334 -0
- package/squads/squad-claude/knowledge-base/knowledge-architecture-reference.md +403 -0
- package/squads/squad-claude/knowledge-base/memory-systems-reference.md +412 -0
- package/squads/squad-claude/knowledge-base/obsidian-claude-integration.md +423 -0
- package/squads/squad-claude/knowledge-base/retrieval-augmented-generation.md +320 -0
- package/squads/squad-claude/knowledge-base/skill-creation-patterns.md +380 -0
- package/squads/squad-claude/knowledge-base/swarm-orchestration-patterns.md +411 -0
- package/squads/squad-cloning/knowledge-base/clone-quality-assurance.md +211 -0
- package/squads/squad-cloning/knowledge-base/confidence-scoring.md +51 -0
- package/squads/squad-cloning/knowledge-base/cross-squad-deployment.md +47 -0
- package/squads/squad-cloning/knowledge-base/ethical-guidelines.md +237 -0
- package/squads/squad-cloning/knowledge-base/knowledge-graph-for-clones.md +295 -0
- package/squads/squad-cloning/knowledge-base/memory-architecture-for-clones.md +229 -0
- package/squads/squad-cloning/knowledge-base/multi-agent-deployment-patterns.md +320 -0
- package/squads/squad-cloning/knowledge-base/skill-standard-for-clones.md +262 -0
- package/squads/squad-cloning/knowledge-base/sop-extraction-guide.md +243 -0
- package/squads/squad-commercial/knowledge-base/account-based-selling.md +206 -0
- package/squads/squad-commercial/knowledge-base/ai-as-competitive-infrastructure.md +14 -0
- package/squads/squad-commercial/knowledge-base/ai-in-sales.md +199 -0
- package/squads/squad-commercial/knowledge-base/brazilian-sales-context.md +195 -0
- package/squads/squad-commercial/knowledge-base/customer-success-operations.md +83 -2
- package/squads/squad-commercial/knowledge-base/prospecting-pipeline-generation.md +69 -0
- package/squads/squad-commercial/knowledge-base/sales-enablement-playbook.md +260 -0
- package/squads/squad-commercial/knowledge-base/sales-methodology-comparison.md +185 -0
- package/squads/squad-commercial/knowledge-base/sales-revenue-master-reference.md +1123 -0
- package/squads/squad-content/knowledge-base/ai-native-content-loop.md +220 -0
- package/squads/squad-content/knowledge-base/brazilian-content-context.md +176 -0
- package/squads/squad-content/knowledge-base/competitor-analysis-methods.md +40 -1
- package/squads/squad-content/knowledge-base/content-architecture-taxonomy.md +206 -0
- package/squads/squad-content/knowledge-base/content-formats-encyclopedia.md +58 -1
- package/squads/squad-content/knowledge-base/content-references-bibliography.md +130 -0
- package/squads/squad-content/knowledge-base/content-strategy-master-reference.md +1097 -0
- package/squads/squad-content/knowledge-base/content-tech-stack.md +150 -0
- package/squads/squad-content/knowledge-base/copywriting-formulas-library.md +188 -0
- package/squads/squad-content/knowledge-base/email-newsletter-strategy.md +161 -0
- package/squads/squad-content/knowledge-base/platform-algorithm-intelligence.md +86 -1
- package/squads/squad-content/knowledge-base/signal-intelligence-v2.md +234 -0
- package/squads/squad-content/knowledge-base/social-algorithms-master-reference.md +1007 -0
- package/squads/squad-content/knowledge-base/task-ownership-map.md +235 -0
- package/squads/squad-content/knowledge-base/video-audio-content-playbook.md +218 -0
- package/squads/squad-content/squad.yaml +187 -27
- package/squads/squad-copy/knowledge-base/ai-copy-human-loop-canon.md +235 -0
- package/squads/squad-copy/knowledge-base/ai-copy-production.md +254 -0
- package/squads/squad-copy/knowledge-base/brazilian-copywriting-context.md +242 -0
- package/squads/squad-copy/knowledge-base/email-copywriting-system.md +299 -0
- package/squads/squad-copy/knowledge-base/landing-page-copy-architecture.md +267 -0
- package/squads/squad-copy/knowledge-base/power-words-catalog.md +205 -0
- package/squads/squad-copy/knowledge-base/seo-copywriting.md +255 -0
- package/squads/squad-copy/knowledge-base/video-script-copywriting.md +239 -0
- package/squads/squad-copy/squad.yaml +19 -4
- package/squads/squad-council/knowledge-base/brand-strategy-models.md +193 -0
- package/squads/squad-council/knowledge-base/growth-strategy-models.md +267 -0
- package/squads/squad-council/knowledge-base/innovation-disruption-frameworks.md +193 -0
- package/squads/squad-council/knowledge-base/market-analysis-frameworks.md +240 -0
- package/squads/squad-council/knowledge-base/organizational-leadership-models.md +212 -0
- package/squads/squad-council/knowledge-base/sales-strategy-models.md +215 -0
- package/squads/squad-courses/knowledge-base/course-launch-strategy.md +251 -0
- package/squads/squad-courses/knowledge-base/domain-advocacia-curriculum.md +385 -0
- package/squads/squad-courses/knowledge-base/domain-contabilidade-curriculum.md +266 -0
- package/squads/squad-courses/knowledge-base/platform-comparison.md +68 -0
- package/squads/squad-courses/knowledge-base/video-production-guide.md +70 -0
- package/squads/squad-cybersecurity/knowledge-base/cloud-security-reference.md +363 -0
- package/squads/squad-cybersecurity/knowledge-base/compliance-frameworks.md +273 -0
- package/squads/squad-cybersecurity/knowledge-base/database-security.md +438 -0
- package/squads/squad-cybersecurity/knowledge-base/incident-response-playbook.md +420 -0
- package/squads/squad-cybersecurity/knowledge-base/network-security-reference.md +477 -0
- package/squads/squad-cybersecurity/knowledge-base/penetration-testing-methodology.md +350 -0
- package/squads/squad-cybersecurity/knowledge-base/vulnerability-management.md +349 -0
- package/squads/squad-design/knowledge-base/brazilian-design-context.md +223 -0
- package/squads/squad-design/knowledge-base/component-api-patterns.md +208 -4
- package/squads/squad-design/knowledge-base/cross-surface-token-canon.md +209 -0
- package/squads/squad-design/knowledge-base/design-system-master-reference.md +1302 -0
- package/squads/squad-design/knowledge-base/design-systems-frameworks.md +91 -1
- package/squads/squad-design/knowledge-base/responsive-modern-css.md +96 -4
- package/squads/squad-design/knowledge-base/wcag-aria-reference.md +117 -5
- package/squads/squad-design/knowledge-base/web-performance-reference.md +127 -4
- package/squads/squad-design/squad.yaml +19 -4
- package/squads/squad-finance/knowledge-base/brazilian-taxation.md +263 -0
- package/squads/squad-finance/knowledge-base/contabilidade-master-reference.md +998 -0
- package/squads/squad-finance/knowledge-base/finance-master-reference.md +946 -0
- package/squads/squad-finance/knowledge-base/financial-reporting-analysis.md +316 -0
- package/squads/squad-finance/knowledge-base/fintech-brazilian-context.md +242 -0
- package/squads/squad-finance/knowledge-base/fpa-planning-frameworks.md +286 -0
- package/squads/squad-finance/knowledge-base/ma-and-transactions.md +285 -0
- package/squads/squad-finance/knowledge-base/risk-management.md +233 -0
- package/squads/squad-finance/knowledge-base/startups-venture-capital.md +337 -0
- package/squads/squad-growth/knowledge-base/ai-growth-playbook.md +216 -0
- package/squads/squad-growth/knowledge-base/attribution-models.md +78 -0
- package/squads/squad-growth/knowledge-base/brazilian-growth-context.md +208 -0
- package/squads/squad-growth/knowledge-base/community-led-growth.md +175 -0
- package/squads/squad-growth/knowledge-base/content-marketing-flywheel.md +190 -0
- package/squads/squad-growth/knowledge-base/email-lifecycle-framework.md +192 -0
- package/squads/squad-growth/knowledge-base/growth-frameworks-catalog.md +82 -0
- package/squads/squad-growth/knowledge-base/growth-master-reference.md +1168 -0
- package/squads/squad-growth/knowledge-base/routing-catalog.md +53 -11
- package/squads/squad-paidmedia/knowledge-base/audiences-segmentation-deep.md +285 -0
- package/squads/squad-paidmedia/knowledge-base/creative-strategy-deep.md +294 -0
- package/squads/squad-paidmedia/knowledge-base/google-ads-account-architecture.md +87 -0
- package/squads/squad-paidmedia/knowledge-base/meta-ads-campaign-architecture.md +76 -0
- package/squads/squad-paidmedia/knowledge-base/paid-media-metrics-reference.md +117 -0
- package/squads/squad-paidmedia/knowledge-base/paid-traffic-master-reference.md +1308 -0
- package/squads/squad-paidmedia/knowledge-base/routing-catalog.md +95 -18
- package/squads/squad-paidmedia/knowledge-base/traffic-masters-frameworks.md +71 -0
- package/squads/squad-product/knowledge-base/brazilian-product-context.md +284 -0
- package/squads/squad-product/knowledge-base/discovery-methodology-playbook.md +141 -0
- package/squads/squad-product/knowledge-base/pm-frameworks-reference.md +125 -9
- package/squads/squad-product/knowledge-base/product-analytics-formulas.md +72 -0
- package/squads/squad-product/knowledge-base/product-led-growth-reference.md +155 -13
- package/squads/squad-product/knowledge-base/product-market-fit-framework.md +222 -0
- package/squads/squad-product/knowledge-base/routing-catalog.md +32 -0
- package/squads/squad-research/knowledge-base/agentic-second-brain-reference.md +591 -0
- package/squads/squad-research/knowledge-base/ai-augmented-research.md +212 -0
- package/squads/squad-research/knowledge-base/brazilian-market-research-sources.md +197 -0
- package/squads/squad-research/knowledge-base/community-platforms-reference.md +786 -0
- package/squads/squad-research/knowledge-base/community-research-methods.md +194 -0
- package/squads/squad-research/knowledge-base/mixed-methods-research-design.md +168 -0
- package/squads/squad-research/knowledge-base/network-effects-analysis.md +192 -0
- package/squads/squad-research/knowledge-base/qualitative-research-deep-methods.md +202 -0
- package/squads/squad-research/knowledge-base/quantitative-research-methods.md +208 -0
- package/squads/squad-research/knowledge-base/research-frameworks-encyclopedia.md +40 -0
- package/squads/squad-research/knowledge-base/research-synthesis-frameworks.md +223 -0
- package/squads/squad-storytelling/knowledge-base/brand-mythology-framework.md +236 -0
- package/squads/squad-storytelling/knowledge-base/brazilian-storytelling-context.md +237 -0
- package/squads/squad-storytelling/knowledge-base/data-storytelling.md +232 -0
- package/squads/squad-storytelling/knowledge-base/improv-storytelling.md +226 -0
- package/squads/squad-storytelling/knowledge-base/persuasion-narrative-techniques.md +269 -0
- package/squads/squad-storytelling/knowledge-base/social-movement-narratives.md +191 -0
- package/squads/squad-storytelling/knowledge-base/video-storytelling.md +252 -0
- package/.sinapse-ai/core/registry/service-registry.json +0 -6346
- package/.sinapse-ai/data/registry-update-log.jsonl +0 -1307
- package/.sinapse-ai/manifests/agents.csv +0 -29
- package/.sinapse-ai/manifests/tasks.csv +0 -204
- package/.sinapse-ai/manifests/workers.csv +0 -196
- package/squads/claude-code-mastery/data/swarm-orchestration-patterns.yaml +0 -378
- package/squads/squad-animations/knowledge-base/framer-motion-complete-reference.md +0 -710
- package/squads/squad-animations/knowledge-base/web-animations-api-view-transitions.md +0 -478
- package/squads/squad-growth/tasks/calculate-sample-size.md +0 -121
- package/squads/squad-paidmedia/tasks/calculate-sample-size.md +0 -57
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
# SINAPSE Framework Security Audit
|
|
2
|
+
|
|
3
|
+
**Date:** 2026-04-10
|
|
4
|
+
**Auditor:** Claude Opus 4.6 (automated code review)
|
|
5
|
+
**Scope:** SINAPSE framework code (.claude/hooks/, .sinapse-ai/core/, packages/installer/, bin/)
|
|
6
|
+
**Mode:** YOLO (framework governance)
|
|
7
|
+
|
|
8
|
+
## Executive Summary
|
|
9
|
+
|
|
10
|
+
**Overall Security Posture: GOOD**
|
|
11
|
+
|
|
12
|
+
The SINAPSE framework demonstrates a mature security posture with multiple defense layers: hook-based enforcement, secret scanning, SQL governance, path validation, and manifest signature verification. The codebase consistently follows fail-open/fail-closed patterns as documented, and no hardcoded secrets were found in production code. However, there are several medium-severity findings that should be addressed to reach enterprise-grade security.
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## Findings
|
|
17
|
+
|
|
18
|
+
### CRITICAL
|
|
19
|
+
|
|
20
|
+
**No critical security issues found.**
|
|
21
|
+
|
|
22
|
+
The framework has no exposed credentials, no arbitrary code execution from user input, and no exploitable injection vectors in its current form.
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
### HIGH
|
|
27
|
+
|
|
28
|
+
#### H-1: `eval()` usage in test-discovery.js (Code Injection Risk)
|
|
29
|
+
|
|
30
|
+
**File:** `.sinapse-ai/infrastructure/scripts/test-discovery.js:724`
|
|
31
|
+
**Code:**
|
|
32
|
+
```javascript
|
|
33
|
+
return eval('(' + match[1] + ')');
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
**Risk:** This `eval()` call parses `module.exports` from Jest config files. While the input comes from local project files (not external user input), it could execute arbitrary code if a malicious Jest config is present in the repository. An attacker who gains write access to `jest.config.js` could execute arbitrary code through this path.
|
|
37
|
+
|
|
38
|
+
**Recommendation:** Replace with `JSON.parse()`, `vm.runInNewContext()` with a frozen sandbox, or a dedicated config parser like `require()` with `Module._resolveFilename` validation.
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
#### H-2: Shell Command Injection in pr-review-ai.js
|
|
43
|
+
|
|
44
|
+
**File:** `.sinapse-ai/infrastructure/scripts/pr-review-ai.js:846`
|
|
45
|
+
**Code:**
|
|
46
|
+
```javascript
|
|
47
|
+
execSync(`gh pr comment ${prNumber} --body "${body.replace(/"/g, '\\"')}"`, { ... });
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
**Risk:** The `body` variable (derived from review content) is inserted into a shell command with only double-quote escaping. Characters like `$(...)`, backticks, `\n`, and `$()` can still break out of the quoting on Unix shells. The `prNumber` parameter is also interpolated without sanitization -- if sourced from user input, it could inject shell commands.
|
|
51
|
+
|
|
52
|
+
**Recommendation:**
|
|
53
|
+
- Use `execFileSync('gh', ['pr', 'comment', prNumber, '--body', body])` (array form avoids shell interpretation entirely).
|
|
54
|
+
- Apply the same fix to lines 853-854 (`gh pr review`).
|
|
55
|
+
- Validate `prNumber` is strictly numeric.
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
#### H-3: Shell Command Injection in terminal-spawner.js
|
|
60
|
+
|
|
61
|
+
**File:** `.sinapse-ai/core/orchestration/terminal-spawner.js:557`
|
|
62
|
+
**Code:**
|
|
63
|
+
```javascript
|
|
64
|
+
const result = execSync(`bash "${scriptPath}" ${args.join(' ')}`, { ... });
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
**Risk:** The `args` array is joined with spaces and interpolated directly into a shell command string. If any element of `args` contains shell metacharacters (`;`, `|`, `$()`, backticks), they will be interpreted by the shell.
|
|
68
|
+
|
|
69
|
+
**Recommendation:** Use `execFileSync('bash', [scriptPath, ...args])` to pass arguments as an array, preventing shell interpretation.
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
#### H-4: Manifest Signature Verification Uses Placeholder Key
|
|
74
|
+
|
|
75
|
+
**File:** `packages/installer/src/installer/manifest-signature.js:45`
|
|
76
|
+
**Code:**
|
|
77
|
+
```javascript
|
|
78
|
+
publicKey: 'REPLACE_WITH_ACTUAL_PUBLIC_KEY_BASE64_HERE',
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
**Risk:** The manifest signature verification system is fully implemented and well-designed, but the public key is still a placeholder. This means the signature verification chain provides zero assurance in its current state. While the code correctly detects and reports the placeholder, any code that calls `loadAndVerifyManifest()` with `requireSignature: false` (which appears to be the current behavior) bypasses verification entirely.
|
|
82
|
+
|
|
83
|
+
**Recommendation:** Generate an Ed25519 keypair, replace the placeholder with the actual public key, and set `requireSignature: true` in production flows.
|
|
84
|
+
|
|
85
|
+
---
|
|
86
|
+
|
|
87
|
+
### MEDIUM
|
|
88
|
+
|
|
89
|
+
#### M-1: Unsanitized Path Interpolation in symlink-manager.js
|
|
90
|
+
|
|
91
|
+
**File:** `.sinapse-ai/core/mcp/symlink-manager.js:66,103,315,383`
|
|
92
|
+
**Code:**
|
|
93
|
+
```javascript
|
|
94
|
+
execSync(`fsutil reparsepoint query "${linkPath}"`, { ... });
|
|
95
|
+
execSync(`mklink /J "${linkPath}" "${globalPath}"`, { ... });
|
|
96
|
+
execSync(`rmdir "${linkPath}"`, { ... });
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
**Risk:** `linkPath` and `globalPath` are interpolated into shell commands. On Windows, paths containing `"` or `&` characters could break out of the quoting. While these paths are typically derived from `path.join()` operations on project-controlled values (not direct user input), a crafted project directory name could theoretically exploit this.
|
|
100
|
+
|
|
101
|
+
**Recommendation:** Use `execFileSync('cmd', ['/c', 'mklink', '/J', linkPath, globalPath])` or validate paths against a strict character set before interpolation.
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
#### M-2: PATH Manipulation in cli.js Without Validation
|
|
106
|
+
|
|
107
|
+
**File:** `bin/cli.js:691`
|
|
108
|
+
**Code:**
|
|
109
|
+
```javascript
|
|
110
|
+
execSync(`setx PATH "${newPath}"`, { encoding: 'utf8', stdio: 'pipe' });
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
**Risk:** The `newPath` variable is constructed from the current PATH value plus a new segment. If the current PATH contains malicious content (unlikely but possible in a compromised environment), this could inject commands via the `setx` call.
|
|
114
|
+
|
|
115
|
+
**Recommendation:** Validate `newPath` against a strict pattern (only path separators, alphanumeric, and common path characters) before execution.
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
#### M-3: Git Command Injection in semantic-merge-engine.js
|
|
120
|
+
|
|
121
|
+
**File:** `.sinapse-ai/core/execution/semantic-merge-engine.js:1524,1534,1567`
|
|
122
|
+
**Code:**
|
|
123
|
+
```javascript
|
|
124
|
+
const fileList = execSync(`git ls-tree -r --name-only ${branch}`, { ... });
|
|
125
|
+
const content = execSync(`git show ${branch}:${filePath}`, { ... });
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
**Risk:** The `branch` and `filePath` variables are interpolated into shell commands. A branch name like `main; rm -rf /` or a file path with shell metacharacters could execute arbitrary commands.
|
|
129
|
+
|
|
130
|
+
**Recommendation:** Use `execFileSync('git', ['ls-tree', '-r', '--name-only', branch])` array form. Validate branch names against `^[a-zA-Z0-9/_.\-]+$`.
|
|
131
|
+
|
|
132
|
+
---
|
|
133
|
+
|
|
134
|
+
#### M-4: Git Command Injection in changelog-generator.js and diff-generator.js
|
|
135
|
+
|
|
136
|
+
**File:** `.sinapse-ai/infrastructure/scripts/changelog-generator.js:142,189`
|
|
137
|
+
**File:** `.sinapse-ai/infrastructure/scripts/diff-generator.js:52`
|
|
138
|
+
**Code:**
|
|
139
|
+
```javascript
|
|
140
|
+
const log = execSync(`git log ${since}..${until} --format="${format}" --no-merges`, { ... });
|
|
141
|
+
return execSync(`git diff ${fromCommit} ${toCommit}`, { encoding: 'utf-8' });
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
**Risk:** The `since`, `until`, `fromCommit`, `toCommit`, and `format` parameters are interpolated directly into shell command strings. These could contain shell metacharacters if sourced from branch names or tags with special characters.
|
|
145
|
+
|
|
146
|
+
**Recommendation:** Use `execFileSync` with array arguments.
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
150
|
+
#### M-5: enforce-git-push-authority.sh Fail-Closed with Potential Bypass
|
|
151
|
+
|
|
152
|
+
**File:** `.claude/hooks/enforce-git-push-authority.sh`
|
|
153
|
+
|
|
154
|
+
**Risk (Minor):** While the hook correctly blocks direct `git push`, `eval`/`exec` patterns, and pipe-to-shell patterns, there are some bypass vectors:
|
|
155
|
+
1. Using `xargs` to execute git push: `echo "push" | xargs git` would not be caught.
|
|
156
|
+
2. Aliased commands or functions defined in the command itself.
|
|
157
|
+
3. The `$()` subshell pattern: `$(git push origin main)` embedded in another command.
|
|
158
|
+
4. Using `env` or `command`: `env git push origin main` or `command git push`.
|
|
159
|
+
|
|
160
|
+
**Recommendation:** Consider adding checks for `xargs`, `env`, `command` prefixes, and `$(...)` subshell patterns containing push. Alternatively, use a deny-by-default approach that only allows known-safe git commands.
|
|
161
|
+
|
|
162
|
+
---
|
|
163
|
+
|
|
164
|
+
#### M-6: Large File Check Uses Unsanitized File Paths in Shell Commands
|
|
165
|
+
|
|
166
|
+
**File:** `.sinapse-ai/core/health-check/checks/repository/large-files.js:72`
|
|
167
|
+
**Code:**
|
|
168
|
+
```javascript
|
|
169
|
+
const _sizeOutput = execSync(`git ls-files -s "${file}"`, { ... });
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
**Risk:** `file` comes from `git ls-files` output. While git typically produces safe filenames, repositories can contain files with shell metacharacters in their names (e.g., files with `$`, backticks, or newlines).
|
|
173
|
+
|
|
174
|
+
**Recommendation:** Use `execFileSync('git', ['ls-files', '-s', file])`.
|
|
175
|
+
|
|
176
|
+
---
|
|
177
|
+
|
|
178
|
+
#### M-7: issue-triage.js Passes Unvalidated Input to gh CLI
|
|
179
|
+
|
|
180
|
+
**File:** `.sinapse-ai/development/scripts/issue-triage.js:23`
|
|
181
|
+
**Code:**
|
|
182
|
+
```javascript
|
|
183
|
+
return execSync(`gh ${cmd}`, { encoding: 'utf8', timeout: 60000 });
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
**Risk:** The `cmd` parameter is interpolated directly into a shell command. If `cmd` contains shell metacharacters, arbitrary command execution is possible.
|
|
187
|
+
|
|
188
|
+
**Recommendation:** Use `execFileSync('gh', cmd.split(' '))` or validate `cmd` strictly.
|
|
189
|
+
|
|
190
|
+
---
|
|
191
|
+
|
|
192
|
+
### LOW / INFORMATIONAL
|
|
193
|
+
|
|
194
|
+
#### L-1: Hooks Consistently Follow Fail-Open Pattern (POSITIVE)
|
|
195
|
+
|
|
196
|
+
All CJS/Python hooks correctly implement the documented fail-open behavior:
|
|
197
|
+
- `enforce-story-gate.cjs`: `process.exit(0)` on parse failure (line 159)
|
|
198
|
+
- `enforce-architecture-first.cjs`: `process.exit(0)` on parse failure (line 111)
|
|
199
|
+
- `enforce-delegation.cjs`: `process.exit(0)` on parse failure (line 89)
|
|
200
|
+
- `secret-scanning.cjs`: `process.exit(0)` on parse failure (line 115)
|
|
201
|
+
- `sql-governance.py`: `sys.exit(0)` on JSONDecodeError (line 127)
|
|
202
|
+
- `slug-validation.py`: `sys.exit(0)` on JSONDecodeError (line 108)
|
|
203
|
+
- `mind-clone-governance.py`: `sys.exit(0)` on JSONDecodeError (line 116)
|
|
204
|
+
- `read-protection.py`: `sys.exit(0)` on JSONDecodeError (line 97)
|
|
205
|
+
- `verify-packages.cjs`: `process.exit(0)` on crash (line 80)
|
|
206
|
+
|
|
207
|
+
**Exception:** `enforce-git-push-authority.sh` is intentionally **fail-closed** (blocks on parse failure, line 22-25). This is documented and appropriate since git push authority is the most security-critical hook.
|
|
208
|
+
|
|
209
|
+
#### L-2: stdin JSON Parsing Is Consistently Validated (POSITIVE)
|
|
210
|
+
|
|
211
|
+
All hooks read stdin JSON safely using `JSON.parse()` within try/catch blocks. No hook processes raw stdin without parsing first.
|
|
212
|
+
|
|
213
|
+
#### L-3: No Hardcoded Secrets in Production Code (POSITIVE)
|
|
214
|
+
|
|
215
|
+
Grep for API keys, tokens, passwords, and credentials found matches only in:
|
|
216
|
+
- Test files (intentional test fixtures)
|
|
217
|
+
- `.docker/llm-routing/config.yaml` (uses `os.environ/` pattern, not actual values)
|
|
218
|
+
- `.github/workflows/` (uses `${{ secrets.GITHUB_TOKEN }}` properly)
|
|
219
|
+
- `i18n.js` (UI strings mentioning "password", not actual passwords)
|
|
220
|
+
|
|
221
|
+
No real credentials were found in production code.
|
|
222
|
+
|
|
223
|
+
#### L-4: .gitignore Properly Covers Sensitive Files (POSITIVE)
|
|
224
|
+
|
|
225
|
+
`.env`, `.env.local`, `.env.*.local`, `.env.production`, `.env.development`, `.env.test` are all listed in `.gitignore`.
|
|
226
|
+
|
|
227
|
+
#### L-5: security-utils.js Is Well-Implemented (POSITIVE)
|
|
228
|
+
|
|
229
|
+
The `security-utils.js` module provides:
|
|
230
|
+
- Path traversal prevention with `..` and null byte detection
|
|
231
|
+
- Base path containment validation
|
|
232
|
+
- Input sanitization for filenames, identifiers, shell, and HTML
|
|
233
|
+
- JSON size and depth limits
|
|
234
|
+
- In-memory rate limiting
|
|
235
|
+
|
|
236
|
+
This module exists but is not consistently used across the codebase (see recommendations).
|
|
237
|
+
|
|
238
|
+
#### L-6: Hook Timeout Safety (POSITIVE)
|
|
239
|
+
|
|
240
|
+
`synapse-engine.cjs` has a 5s timeout, `precompact-session-digest.cjs` has a 9s timeout, and both wrappers (`synapse-wrapper.cjs`, `precompact-wrapper.cjs`) add process-level timeouts (8s, 12s respectively). This prevents hooks from blocking Claude Code indefinitely.
|
|
241
|
+
|
|
242
|
+
#### L-7: Cross-Platform Path Handling (POSITIVE)
|
|
243
|
+
|
|
244
|
+
Multiple files correctly normalize Windows backslashes to forward slashes (`filePath.replace(/\\/g, '/')`). The `relativize()` functions in hooks handle both path separator conventions.
|
|
245
|
+
|
|
246
|
+
#### L-8: openInBrowser() in graph-dashboard/cli.js
|
|
247
|
+
|
|
248
|
+
**File:** `.sinapse-ai/core/graph-dashboard/cli.js:155`
|
|
249
|
+
|
|
250
|
+
The `filePath` parameter is interpolated into a shell command (`start`, `open`, `xdg-open`). However, this path is always constructed by the framework itself (not user input), so the risk is minimal. Noted for completeness.
|
|
251
|
+
|
|
252
|
+
#### L-9: Duplicate Hook Implementations (Python + CJS)
|
|
253
|
+
|
|
254
|
+
Several hooks exist in both Python and CJS versions:
|
|
255
|
+
- `enforce-architecture-first.py` / `enforce-architecture-first.cjs`
|
|
256
|
+
- `write-path-validation.py` / `write-path-validation.cjs`
|
|
257
|
+
|
|
258
|
+
This duplication increases maintenance burden and the risk of behavioral divergence. Only one version per hook should be active (configured in settings.json).
|
|
259
|
+
|
|
260
|
+
---
|
|
261
|
+
|
|
262
|
+
## Recommendations
|
|
263
|
+
|
|
264
|
+
### Priority 1 (Fix Soon)
|
|
265
|
+
|
|
266
|
+
1. **Replace `eval()` in test-discovery.js** (H-1) with a safe config parser. This is the only actual `eval()` in production code.
|
|
267
|
+
|
|
268
|
+
2. **Fix shell injection in pr-review-ai.js** (H-2) by switching to `execFileSync` with array arguments for all `gh` CLI calls.
|
|
269
|
+
|
|
270
|
+
3. **Fix shell injection in terminal-spawner.js** (H-3) by switching to `execFileSync` array form.
|
|
271
|
+
|
|
272
|
+
4. **Activate manifest signature verification** (H-4) by generating and deploying the Ed25519 keypair.
|
|
273
|
+
|
|
274
|
+
### Priority 2 (Fix Next Sprint)
|
|
275
|
+
|
|
276
|
+
5. **Audit all `execSync` calls with string interpolation** and convert to `execFileSync` with array arguments. The pattern `execSync(\`command ${variable}\`)` should be considered a code smell. Priority files:
|
|
277
|
+
- `semantic-merge-engine.js` (M-3)
|
|
278
|
+
- `changelog-generator.js`, `diff-generator.js` (M-4)
|
|
279
|
+
- `symlink-manager.js` (M-1)
|
|
280
|
+
- `large-files.js` (M-6)
|
|
281
|
+
- `issue-triage.js` (M-7)
|
|
282
|
+
|
|
283
|
+
6. **Adopt `security-utils.js` consistently**: The path validation, input sanitization, and JSON validation utilities already exist in `.sinapse-ai/core/utils/security-utils.js` but are not imported by any of the files flagged above. Create a lint rule or ESLint plugin that flags `execSync` with template literals.
|
|
284
|
+
|
|
285
|
+
### Priority 3 (Harden)
|
|
286
|
+
|
|
287
|
+
7. **Add `xargs`, `env`, `command`, and `$(...)` bypass checks** to `enforce-git-push-authority.sh` (M-5).
|
|
288
|
+
|
|
289
|
+
8. **Remove duplicate Python hooks** (L-9) to reduce maintenance surface. The CJS versions are preferred for cross-platform portability.
|
|
290
|
+
|
|
291
|
+
9. **Add input validation for git branch names** across the codebase. A simple regex like `/^[a-zA-Z0-9/_.\-]+$/` would prevent most injection vectors through branch name parameters.
|
|
292
|
+
|
|
293
|
+
10. **Consider a centralized `safeExec()` wrapper** that validates arguments before executing shell commands, similar to how `security-utils.js` centralizes path validation. This would provide defense-in-depth for all `execSync` calls.
|
|
294
|
+
|
|
295
|
+
---
|
|
296
|
+
|
|
297
|
+
## Positive Security Patterns Observed
|
|
298
|
+
|
|
299
|
+
The framework demonstrates several mature security practices worth preserving:
|
|
300
|
+
|
|
301
|
+
1. **Defense in depth**: Multiple layers (hooks, settings.json deny rules, git pre-commit, framework guard) enforce the same security boundaries.
|
|
302
|
+
2. **Consistent fail-open**: All hooks except the intentionally fail-closed push authority hook follow the fail-open principle, preventing hook bugs from blocking development.
|
|
303
|
+
3. **Secret scanning at multiple layers**: Claude Code hooks (secret-scanning.cjs), git pre-commit (staged-secret-scan.js), and PR review (pr-review-ai.js) all independently scan for secrets.
|
|
304
|
+
4. **Manifest integrity**: The signature verification infrastructure is well-designed with DoS protections (file size limits), though the key needs activation.
|
|
305
|
+
5. **Atomic writes**: The `atomic-write.js` utility prevents file corruption during crashes.
|
|
306
|
+
6. **Security utilities module**: `security-utils.js` provides a solid foundation for input validation.
|
package/package.json
CHANGED
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sinapse-ai",
|
|
3
|
-
"version": "9.
|
|
3
|
+
"version": "9.5.0",
|
|
4
4
|
"description": "SINAPSE AI: Framework de orquestracao de IA — 18 squads, 186 agentes especializados",
|
|
5
5
|
"bin": {
|
|
6
6
|
"sinapse": "bin/sinapse.js",
|
|
7
|
-
"sinapse-ai": "bin/cli.js"
|
|
8
|
-
"sinapse-minimal": "bin/sinapse-minimal.js",
|
|
9
|
-
"sinapse-graph": "bin/sinapse-graph.js"
|
|
7
|
+
"sinapse-ai": "bin/cli.js"
|
|
10
8
|
},
|
|
11
9
|
"preferGlobal": false,
|
|
12
10
|
"workspaces": [
|
|
@@ -69,6 +67,7 @@
|
|
|
69
67
|
"release:test": "semantic-release --dry-run --no-ci || echo 'Config test complete - authentication errors are expected locally'",
|
|
70
68
|
"generate:manifest": "node scripts/generate-install-manifest.js",
|
|
71
69
|
"validate:manifest": "node scripts/validate-manifest.js",
|
|
70
|
+
"validate:manifest:parity": "node .sinapse-ai/infrastructure/scripts/validate-manifest-parity.js",
|
|
72
71
|
"validate:structure": "node .sinapse-ai/infrastructure/scripts/source-tree-guardian/index.js",
|
|
73
72
|
"validate:agents": "node .sinapse-ai/infrastructure/scripts/validate-agents.js",
|
|
74
73
|
"sync:ide": "node .sinapse-ai/infrastructure/scripts/ide-sync/index.js sync",
|
|
@@ -87,14 +86,21 @@
|
|
|
87
86
|
"validate:codex-skills": "node .sinapse-ai/infrastructure/scripts/codex-skills-sync/validate.js --strict",
|
|
88
87
|
"validate:paths": "node .sinapse-ai/infrastructure/scripts/validate-paths.js",
|
|
89
88
|
"validate:parity": "node .sinapse-ai/infrastructure/scripts/validate-parity.js",
|
|
89
|
+
"validate:parity:fast": "node .sinapse-ai/infrastructure/scripts/validate-parity.js --fast --quiet",
|
|
90
90
|
"collab:adopt": "node bin/utils/collab-start.js --adopt-current",
|
|
91
91
|
"collab:check": "node bin/utils/collab-start.js --check",
|
|
92
92
|
"collab:start": "node bin/utils/collab-start.js",
|
|
93
93
|
"validate:semantic-lint": "node scripts/semantic-lint.js",
|
|
94
|
+
"validate:docs": "node scripts/validate-install-docs.js",
|
|
95
|
+
"validate:no-external-refs": "node scripts/validate-no-external-refs.js",
|
|
96
|
+
"validate:story-meta": "node scripts/validate-story-meta.js",
|
|
97
|
+
"validate:squad-orqx": "node scripts/validate-squad-orqx.js",
|
|
98
|
+
"validate:release-readiness": "node scripts/release-readiness.js",
|
|
94
99
|
"manifest:ensure": "node scripts/ensure-manifest.js",
|
|
95
100
|
"validate:publish": "node bin/utils/validate-publish.js",
|
|
96
101
|
"brand": "node scripts/sinapse-patch.js",
|
|
97
102
|
"prepublishOnly": "node bin/utils/validate-publish.js && npm run generate:manifest && npm run validate:manifest",
|
|
103
|
+
"postinstall": "node bin/postinstall.js",
|
|
98
104
|
"prepare": "husky"
|
|
99
105
|
},
|
|
100
106
|
"dependencies": {
|
|
@@ -141,12 +147,12 @@
|
|
|
141
147
|
"license": "MIT",
|
|
142
148
|
"repository": {
|
|
143
149
|
"type": "git",
|
|
144
|
-
"url": "git+https://github.com/
|
|
150
|
+
"url": "git+https://github.com/caioimori/sinapse-ai.git"
|
|
145
151
|
},
|
|
146
152
|
"bugs": {
|
|
147
|
-
"url": "https://github.com/
|
|
153
|
+
"url": "https://github.com/caioimori/sinapse-ai/issues"
|
|
148
154
|
},
|
|
149
|
-
"homepage": "https://github.com/
|
|
155
|
+
"homepage": "https://github.com/caioimori/sinapse-ai#readme",
|
|
150
156
|
"engines": {
|
|
151
157
|
"node": ">=18.0.0",
|
|
152
158
|
"npm": ">=9.0.0"
|
|
@@ -179,10 +185,16 @@
|
|
|
179
185
|
],
|
|
180
186
|
".sinapse-ai/development/agents/*.md": [
|
|
181
187
|
"npm run sync:ide"
|
|
188
|
+
],
|
|
189
|
+
"docs/stories/*.story.md": [
|
|
190
|
+
"node scripts/validate-story-meta.js --staged"
|
|
182
191
|
]
|
|
183
192
|
},
|
|
184
193
|
"overrides": {
|
|
185
194
|
"tar": "^7.5.7",
|
|
186
|
-
"diff": "^8.0.3"
|
|
195
|
+
"diff": "^8.0.3",
|
|
196
|
+
"serialize-javascript": "^7.0.5",
|
|
197
|
+
"picomatch": "^4.0.4",
|
|
198
|
+
"brace-expansion": "^5.0.5"
|
|
187
199
|
}
|
|
188
200
|
}
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
|
|
13
13
|
const fs = require('fs-extra');
|
|
14
14
|
const path = require('path');
|
|
15
|
-
const { password
|
|
15
|
+
const { password } = require('@clack/prompts');
|
|
16
16
|
const { generateEnvContent, generateEnvExample } = require('./templates/env-template');
|
|
17
17
|
const { generateCoreConfig } = require('./templates/core-config-template');
|
|
18
18
|
const {
|
|
@@ -59,52 +59,29 @@ async function configureEnvironment(options = {}) {
|
|
|
59
59
|
};
|
|
60
60
|
|
|
61
61
|
try {
|
|
62
|
-
//
|
|
62
|
+
// Story 10.38: Merge-only policy for existing .env.
|
|
63
|
+
// Never prompt, never overwrite. If an existing .env is found, we always
|
|
64
|
+
// merge (preserving user values). If merge strategy is unavailable, we
|
|
65
|
+
// create a timestamped backup before writing. forceMerge/noMerge flags
|
|
66
|
+
// are kept as no-ops for backward compatibility.
|
|
67
|
+
void forceMerge;
|
|
68
|
+
void noMerge;
|
|
69
|
+
void skipPrompts;
|
|
70
|
+
void projectType;
|
|
63
71
|
const envPath = path.join(targetDir, '.env');
|
|
64
72
|
const envExists = await fs.pathExists(envPath);
|
|
65
|
-
let envAction = 'create'; // 'create'
|
|
66
|
-
const
|
|
67
|
-
const canMerge = !noMerge && hasMergeStrategy(envPath);
|
|
73
|
+
let envAction = 'create'; // 'create' | 'merge' | 'overwrite'
|
|
74
|
+
const canMerge = hasMergeStrategy(envPath);
|
|
68
75
|
|
|
69
76
|
if (envExists) {
|
|
70
|
-
|
|
71
|
-
if (forceMerge && canMerge) {
|
|
72
|
-
// --merge flag: Force merge without prompting
|
|
77
|
+
if (canMerge) {
|
|
73
78
|
envAction = 'merge';
|
|
74
|
-
console.log('🔀 Using merge mode (--merge flag)');
|
|
75
|
-
} else if (skipPrompts) {
|
|
76
|
-
// Quiet mode: default to merge for brownfield, overwrite for greenfield
|
|
77
|
-
envAction = isBrownfield && canMerge ? 'merge' : 'overwrite';
|
|
78
79
|
} else {
|
|
79
|
-
//
|
|
80
|
-
const
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
value: 'merge',
|
|
85
|
-
label: 'Merge (add new variables, keep existing)',
|
|
86
|
-
hint: isBrownfield ? 'recommended' : '',
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
choices.push(
|
|
91
|
-
{ value: 'backup', label: 'Backup and overwrite' },
|
|
92
|
-
{ value: 'overwrite', label: 'Overwrite completely' },
|
|
93
|
-
{ value: 'skip', label: 'Skip (keep existing)' },
|
|
94
|
-
);
|
|
95
|
-
|
|
96
|
-
envAction = await select({
|
|
97
|
-
message: 'Found existing .env file. What would you like to do?',
|
|
98
|
-
options: choices,
|
|
99
|
-
initialValue: isBrownfield && canMerge ? 'merge' : 'backup',
|
|
100
|
-
});
|
|
101
|
-
|
|
102
|
-
if (envAction === 'backup') {
|
|
103
|
-
const backupPath = path.join(targetDir, `.env.backup.${Date.now()}`);
|
|
104
|
-
await fs.copy(envPath, backupPath);
|
|
105
|
-
console.log(`✅ Backup created: ${backupPath}`);
|
|
106
|
-
envAction = 'overwrite';
|
|
107
|
-
}
|
|
80
|
+
// Safety net: back up the existing file before writing the new one.
|
|
81
|
+
const backupPath = path.join(targetDir, `.env.backup.${Date.now()}`);
|
|
82
|
+
await fs.copy(envPath, backupPath);
|
|
83
|
+
console.log(`📦 Existing .env backed up to ${path.basename(backupPath)}`);
|
|
84
|
+
envAction = 'overwrite';
|
|
108
85
|
}
|
|
109
86
|
}
|
|
110
87
|
|
|
@@ -127,9 +104,7 @@ async function configureEnvironment(options = {}) {
|
|
|
127
104
|
}
|
|
128
105
|
|
|
129
106
|
// Step 4: Write .env file based on action
|
|
130
|
-
if (envAction === '
|
|
131
|
-
console.log('⏭️ Skipped .env file (keeping existing)');
|
|
132
|
-
} else if (envAction === 'merge' && envExists) {
|
|
107
|
+
if (envAction === 'merge' && envExists) {
|
|
133
108
|
// Merge existing with new
|
|
134
109
|
const existingContent = await fs.readFile(envPath, 'utf8');
|
|
135
110
|
const merger = getMergeStrategy(envPath);
|