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
package/bin/sinapse.js
CHANGED
|
@@ -10,6 +10,14 @@ const path = require('path');
|
|
|
10
10
|
const fs = require('fs');
|
|
11
11
|
const os = require('os');
|
|
12
12
|
const { execSync } = require('child_process');
|
|
13
|
+
const { emitDeprecationWarning } = require('./utils/deprecation-warning');
|
|
14
|
+
|
|
15
|
+
// Story A.2 — unified logger. Levels: error/warn/info/debug.
|
|
16
|
+
// Flags: --verbose, --debug, --quiet, --json. Default level: warn.
|
|
17
|
+
// sinapse.js does NOT render the ASCII header itself (cli.js owns it), so it
|
|
18
|
+
// only imports getLogger. shouldShowHeader / markFirstRunDone stay in cli.js.
|
|
19
|
+
const { getLogger } = require('../.sinapse-ai/core/logger');
|
|
20
|
+
const logger = getLogger();
|
|
13
21
|
|
|
14
22
|
// Read package.json for version
|
|
15
23
|
const packageJsonPath = path.join(__dirname, '..', 'package.json');
|
|
@@ -29,7 +37,7 @@ async function runWizard(options = {}) {
|
|
|
29
37
|
const legacyScript = path.join(__dirname, 'sinapse-init.js');
|
|
30
38
|
if (fs.existsSync(legacyScript)) {
|
|
31
39
|
if (!options.quiet) {
|
|
32
|
-
|
|
40
|
+
logger.always('⚠️ Using legacy wizard (src/wizard not found)');
|
|
33
41
|
}
|
|
34
42
|
// Legacy wizard doesn't support options, pass via env vars
|
|
35
43
|
process.env.SINAPSE_INSTALL_FORCE = options.force ? '1' : '';
|
|
@@ -38,8 +46,8 @@ async function runWizard(options = {}) {
|
|
|
38
46
|
require(legacyScript);
|
|
39
47
|
return;
|
|
40
48
|
}
|
|
41
|
-
|
|
42
|
-
|
|
49
|
+
logger.error('❌ Initialization wizard not found');
|
|
50
|
+
logger.error('Please ensure SINAPSE-FullStack is installed correctly.');
|
|
43
51
|
process.exit(1);
|
|
44
52
|
}
|
|
45
53
|
|
|
@@ -48,14 +56,14 @@ async function runWizard(options = {}) {
|
|
|
48
56
|
const { runWizard: executeWizard } = require(wizardPath);
|
|
49
57
|
await executeWizard(options);
|
|
50
58
|
} catch (error) {
|
|
51
|
-
|
|
59
|
+
logger.error('❌ Wizard error:', error.message);
|
|
52
60
|
process.exit(1);
|
|
53
61
|
}
|
|
54
62
|
}
|
|
55
63
|
|
|
56
64
|
// Helper: Show help
|
|
57
65
|
function showHelp() {
|
|
58
|
-
|
|
66
|
+
logger.always(`
|
|
59
67
|
SINAPSE-FullStack v${packageJson.version}
|
|
60
68
|
AI-Orchestrated System for Full Stack Development
|
|
61
69
|
|
|
@@ -69,6 +77,9 @@ USAGE:
|
|
|
69
77
|
sinapse validate # Validate installation integrity
|
|
70
78
|
sinapse info # Show system info
|
|
71
79
|
sinapse doctor # Run diagnostics
|
|
80
|
+
sinapse telemetry status # Show telemetry state (disabled by default)
|
|
81
|
+
sinapse telemetry enable # Opt in to anonymized telemetry
|
|
82
|
+
sinapse telemetry disable # Opt out of telemetry
|
|
72
83
|
sinapse qa run # Run quality gate pipeline
|
|
73
84
|
sinapse qa run --layer=1 # Run specific layer
|
|
74
85
|
sinapse qa status # Show gate status
|
|
@@ -131,13 +142,13 @@ async function showVersion() {
|
|
|
131
142
|
|
|
132
143
|
if (!isDetailed) {
|
|
133
144
|
// Simple version output (backwards compatible)
|
|
134
|
-
|
|
145
|
+
logger.always(packageJson.version);
|
|
135
146
|
return;
|
|
136
147
|
}
|
|
137
148
|
|
|
138
149
|
// Detailed version output (Story 7.2: Version Tracking)
|
|
139
|
-
|
|
140
|
-
|
|
150
|
+
logger.always(`SINAPSE-FullStack v${packageJson.version}`);
|
|
151
|
+
logger.always('Package: sinapse-ai');
|
|
141
152
|
|
|
142
153
|
// Check for local installation
|
|
143
154
|
const localVersionPath = path.join(process.cwd(), '.sinapse-ai', 'version.json');
|
|
@@ -145,61 +156,61 @@ async function showVersion() {
|
|
|
145
156
|
if (fs.existsSync(localVersionPath)) {
|
|
146
157
|
try {
|
|
147
158
|
const versionInfo = JSON.parse(fs.readFileSync(localVersionPath, 'utf8'));
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
159
|
+
logger.always('\n📦 Local Installation:');
|
|
160
|
+
logger.always(` Version: ${versionInfo.version}`);
|
|
161
|
+
logger.always(` Mode: ${versionInfo.mode || 'unknown'}`);
|
|
151
162
|
|
|
152
163
|
if (versionInfo.installedAt) {
|
|
153
164
|
const installedDate = new Date(versionInfo.installedAt);
|
|
154
|
-
|
|
165
|
+
logger.always(` Installed: ${installedDate.toLocaleDateString()}`);
|
|
155
166
|
}
|
|
156
167
|
|
|
157
168
|
if (versionInfo.updatedAt) {
|
|
158
169
|
const updatedDate = new Date(versionInfo.updatedAt);
|
|
159
|
-
|
|
170
|
+
logger.always(` Updated: ${updatedDate.toLocaleDateString()}`);
|
|
160
171
|
}
|
|
161
172
|
|
|
162
173
|
if (versionInfo.fileHashes) {
|
|
163
174
|
const fileCount = Object.keys(versionInfo.fileHashes).length;
|
|
164
|
-
|
|
175
|
+
logger.always(` Files: ${fileCount} tracked`);
|
|
165
176
|
}
|
|
166
177
|
|
|
167
178
|
if (versionInfo.customized && versionInfo.customized.length > 0) {
|
|
168
|
-
|
|
179
|
+
logger.always(` Customized: ${versionInfo.customized.length} files`);
|
|
169
180
|
}
|
|
170
181
|
|
|
171
182
|
// Version comparison
|
|
172
183
|
if (versionInfo.version !== packageJson.version) {
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
184
|
+
logger.always('\n⚠️ Version mismatch!');
|
|
185
|
+
logger.always(` Local: ${versionInfo.version}`);
|
|
186
|
+
logger.always(` Latest: ${packageJson.version}`);
|
|
187
|
+
logger.always(' Run \'npx sinapse-ai update\' to update.');
|
|
177
188
|
} else {
|
|
178
|
-
|
|
189
|
+
logger.always('\n✅ Up to date');
|
|
179
190
|
}
|
|
180
191
|
} catch (error) {
|
|
181
|
-
|
|
192
|
+
logger.always(`\n⚠️ Could not read version.json: ${error.message}`);
|
|
182
193
|
}
|
|
183
194
|
} else {
|
|
184
|
-
|
|
185
|
-
|
|
195
|
+
logger.always('\n📭 No local installation found');
|
|
196
|
+
logger.always(' Run \'npx sinapse-ai install\' to install SINAPSE in this project.');
|
|
186
197
|
}
|
|
187
198
|
}
|
|
188
199
|
|
|
189
200
|
// Helper: Show system info
|
|
190
201
|
function showInfo() {
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
202
|
+
logger.always('📊 SINAPSE-FullStack System Information\n');
|
|
203
|
+
logger.always(`Version: ${packageJson.version}`);
|
|
204
|
+
logger.always(`Platform: ${process.platform}`);
|
|
205
|
+
logger.always(`Node.js: ${process.version}`);
|
|
206
|
+
logger.always(`Architecture: ${process.arch}`);
|
|
207
|
+
logger.always(`Working Directory: ${process.cwd()}`);
|
|
208
|
+
logger.always(`Install Location: ${path.join(__dirname, '..')}`);
|
|
198
209
|
|
|
199
210
|
// Check if .sinapse-ai exists
|
|
200
211
|
const sinapseCoreDir = path.join(__dirname, '..', '.sinapse-ai');
|
|
201
212
|
if (fs.existsSync(sinapseCoreDir)) {
|
|
202
|
-
|
|
213
|
+
logger.always('\n✓ SINAPSE Core installed');
|
|
203
214
|
|
|
204
215
|
// Count components
|
|
205
216
|
const countFiles = (dir) => {
|
|
@@ -213,19 +224,19 @@ function showInfo() {
|
|
|
213
224
|
const devDir = path.join(sinapseCoreDir, 'development');
|
|
214
225
|
const componentBase = fs.existsSync(devDir) ? devDir : sinapseCoreDir;
|
|
215
226
|
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
227
|
+
logger.always(` - Agents: ${countFiles(path.join(componentBase, 'agents'))}`);
|
|
228
|
+
logger.always(` - Tasks: ${countFiles(path.join(componentBase, 'tasks'))}`);
|
|
229
|
+
logger.always(` - Templates: ${countFiles(path.join(componentBase, 'templates'))}`);
|
|
230
|
+
logger.always(` - Workflows: ${countFiles(path.join(componentBase, 'workflows'))}`);
|
|
220
231
|
|
|
221
232
|
} else {
|
|
222
|
-
|
|
233
|
+
logger.always('\n⚠️ SINAPSE Core not found');
|
|
223
234
|
}
|
|
224
235
|
|
|
225
236
|
// Check SINAPSE Pro status (Task 5.1)
|
|
226
237
|
const proDir = path.join(__dirname, '..', 'pro');
|
|
227
238
|
if (fs.existsSync(proDir)) {
|
|
228
|
-
|
|
239
|
+
logger.always('\n✓ SINAPSE Pro installed');
|
|
229
240
|
|
|
230
241
|
try {
|
|
231
242
|
const { featureGate } = require(path.join(proDir, 'license', 'feature-gate'));
|
|
@@ -239,14 +250,14 @@ function showInfo() {
|
|
|
239
250
|
'Not Activated': '➖',
|
|
240
251
|
};
|
|
241
252
|
|
|
242
|
-
|
|
253
|
+
logger.always(` - License: ${stateEmoji[state] || ''} ${state}`);
|
|
243
254
|
|
|
244
255
|
if (info && info.features) {
|
|
245
256
|
const availableCount = featureGate.listAvailable().length;
|
|
246
|
-
|
|
257
|
+
logger.always(` - Features: ${availableCount} available`);
|
|
247
258
|
}
|
|
248
259
|
} catch {
|
|
249
|
-
|
|
260
|
+
logger.always(' - License: Unable to check status');
|
|
250
261
|
}
|
|
251
262
|
}
|
|
252
263
|
}
|
|
@@ -264,7 +275,7 @@ async function runValidate() {
|
|
|
264
275
|
await validateCmd.parseAsync(['node', 'sinapse', ...validateArgs]);
|
|
265
276
|
} catch (_error) {
|
|
266
277
|
// Fallback: Run quick validation inline
|
|
267
|
-
|
|
278
|
+
logger.always('Running installation validation...\n');
|
|
268
279
|
|
|
269
280
|
try {
|
|
270
281
|
const validatorPath = path.join(
|
|
@@ -282,7 +293,7 @@ async function runValidate() {
|
|
|
282
293
|
const validator = new PostInstallValidator(projectRoot, path.join(__dirname, '..'));
|
|
283
294
|
const report = await validator.validate();
|
|
284
295
|
|
|
285
|
-
|
|
296
|
+
logger.always(formatReport(report, { colors: true }));
|
|
286
297
|
|
|
287
298
|
if (
|
|
288
299
|
report.status === 'failed' ||
|
|
@@ -292,9 +303,9 @@ async function runValidate() {
|
|
|
292
303
|
process.exit(1);
|
|
293
304
|
}
|
|
294
305
|
} catch (validatorError) {
|
|
295
|
-
|
|
306
|
+
logger.error(`❌ Validation error: ${validatorError.message}`);
|
|
296
307
|
if (args.includes('--verbose') || args.includes('-v')) {
|
|
297
|
-
|
|
308
|
+
logger.error(validatorError.stack);
|
|
298
309
|
}
|
|
299
310
|
process.exit(2);
|
|
300
311
|
}
|
|
@@ -313,8 +324,8 @@ async function runUpdate() {
|
|
|
313
324
|
const updaterPath = path.join(__dirname, '..', 'packages', 'installer', 'src', 'updater', 'index.js');
|
|
314
325
|
|
|
315
326
|
if (!fs.existsSync(updaterPath)) {
|
|
316
|
-
|
|
317
|
-
|
|
327
|
+
logger.error('❌ Updater module not found');
|
|
328
|
+
logger.error('Please ensure SINAPSE-FullStack is installed correctly.');
|
|
318
329
|
process.exit(1);
|
|
319
330
|
}
|
|
320
331
|
|
|
@@ -327,44 +338,45 @@ async function runUpdate() {
|
|
|
327
338
|
|
|
328
339
|
if (isCheck) {
|
|
329
340
|
// Check only mode
|
|
330
|
-
|
|
341
|
+
logger.always('🔍 Checking for updates...\n');
|
|
331
342
|
const result = await updater.checkForUpdates();
|
|
332
|
-
|
|
343
|
+
logger.always(formatCheckResult(result, { colors: true }));
|
|
333
344
|
|
|
334
345
|
if (result.status === 'check_failed') {
|
|
335
346
|
process.exit(1);
|
|
336
347
|
}
|
|
337
348
|
} else {
|
|
338
349
|
// Update mode
|
|
339
|
-
|
|
350
|
+
logger.always('🔄 SINAPSE Update\n');
|
|
340
351
|
|
|
341
352
|
const result = await updater.update({
|
|
342
353
|
dryRun: isDryRun,
|
|
343
354
|
onProgress: (phase, message) => {
|
|
344
355
|
if (isVerbose) {
|
|
345
|
-
|
|
356
|
+
logger.always(`[${phase}] ${message}`);
|
|
346
357
|
}
|
|
347
358
|
},
|
|
348
359
|
});
|
|
349
360
|
|
|
350
|
-
|
|
361
|
+
logger.always(formatUpdateResult(result, { colors: true }));
|
|
351
362
|
|
|
352
363
|
if (!result.success && result.error !== 'Already up to date') {
|
|
353
364
|
process.exit(1);
|
|
354
365
|
}
|
|
355
366
|
}
|
|
356
367
|
} catch (error) {
|
|
357
|
-
|
|
368
|
+
logger.error(`❌ Update error: ${error.message}`);
|
|
358
369
|
if (args.includes('--verbose') || args.includes('-v')) {
|
|
359
|
-
|
|
370
|
+
logger.error(error.stack);
|
|
360
371
|
}
|
|
361
372
|
process.exit(1);
|
|
362
373
|
}
|
|
363
374
|
}
|
|
364
375
|
|
|
365
|
-
// Helper: Run doctor diagnostics (v2.
|
|
376
|
+
// Helper: Run doctor diagnostics (v2.1 — delegates to modular doctor)
|
|
377
|
+
// Story A.3: exit code mapping is now 0 PASS | 1 WARN only | 2 FAIL | 3 internal error.
|
|
366
378
|
async function runDoctor(options = {}) {
|
|
367
|
-
const { runDoctorChecks } = require(path.join(__dirname, '..', '.sinapse-ai', 'core', 'doctor'));
|
|
379
|
+
const { runDoctorChecks, resolveExitCode } = require(path.join(__dirname, '..', '.sinapse-ai', 'core', 'doctor'));
|
|
368
380
|
|
|
369
381
|
const result = await runDoctorChecks({
|
|
370
382
|
fix: options.fix || false,
|
|
@@ -375,11 +387,14 @@ async function runDoctor(options = {}) {
|
|
|
375
387
|
projectRoot: process.cwd(),
|
|
376
388
|
});
|
|
377
389
|
|
|
378
|
-
|
|
390
|
+
logger.always(result.formatted);
|
|
379
391
|
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
392
|
+
const code = typeof resolveExitCode === 'function'
|
|
393
|
+
? resolveExitCode(result)
|
|
394
|
+
: (result && result.data && result.data.summary && result.data.summary.fail > 0 ? 2 : 0);
|
|
395
|
+
|
|
396
|
+
if (code !== 0) {
|
|
397
|
+
process.exit(code);
|
|
383
398
|
}
|
|
384
399
|
}
|
|
385
400
|
|
|
@@ -428,7 +443,7 @@ function cleanGitignore(gitignorePath) {
|
|
|
428
443
|
|
|
429
444
|
// Helper: Show uninstall help
|
|
430
445
|
function showUninstallHelp() {
|
|
431
|
-
|
|
446
|
+
logger.always(`
|
|
432
447
|
Usage: npx sinapse-ai uninstall [options]
|
|
433
448
|
|
|
434
449
|
Remove SINAPSE from the current project.
|
|
@@ -503,17 +518,17 @@ function runBrand() {
|
|
|
503
518
|
const patchPath = path.join(__dirname, '..', 'scripts', 'sinapse-patch.js');
|
|
504
519
|
|
|
505
520
|
if (!fs.existsSync(patchPath)) {
|
|
506
|
-
|
|
507
|
-
|
|
521
|
+
logger.error('❌ Patch script not found at:', patchPath);
|
|
522
|
+
logger.error('Please ensure SINAPSE-FullStack is installed correctly.');
|
|
508
523
|
process.exit(1);
|
|
509
524
|
}
|
|
510
525
|
|
|
511
|
-
|
|
526
|
+
logger.always('◆ Applying SINAPSE branding to Claude Code...\n');
|
|
512
527
|
|
|
513
528
|
try {
|
|
514
529
|
execSync(`node "${patchPath}"`, { stdio: 'inherit' });
|
|
515
530
|
} catch (error) {
|
|
516
|
-
|
|
531
|
+
logger.error('❌ Branding patch failed:', error.message);
|
|
517
532
|
process.exit(1);
|
|
518
533
|
}
|
|
519
534
|
}
|
|
@@ -523,8 +538,8 @@ function launchSinapse(extraArgs) {
|
|
|
523
538
|
// 1. Check if Claude Code is installed
|
|
524
539
|
const cliPath = findClaudeCliPath();
|
|
525
540
|
if (!cliPath) {
|
|
526
|
-
|
|
527
|
-
|
|
541
|
+
logger.error('❌ Claude Code not found. Install it first:');
|
|
542
|
+
logger.error(' npm install -g @anthropic-ai/claude-code');
|
|
528
543
|
process.exit(1);
|
|
529
544
|
}
|
|
530
545
|
|
|
@@ -532,12 +547,12 @@ function launchSinapse(extraArgs) {
|
|
|
532
547
|
if (!isBrandingApplied()) {
|
|
533
548
|
const patchPath = path.join(__dirname, '..', 'scripts', 'sinapse-patch.js');
|
|
534
549
|
if (fs.existsSync(patchPath)) {
|
|
535
|
-
|
|
550
|
+
logger.always('◆ First run — applying SINAPSE branding...\n');
|
|
536
551
|
try {
|
|
537
552
|
execSync(`node "${patchPath}"`, { stdio: 'inherit' });
|
|
538
|
-
|
|
553
|
+
logger.always('');
|
|
539
554
|
} catch {
|
|
540
|
-
|
|
555
|
+
logger.error('⚠️ Branding patch failed, launching without branding...\n');
|
|
541
556
|
}
|
|
542
557
|
}
|
|
543
558
|
}
|
|
@@ -576,7 +591,7 @@ function launchSinapse(extraArgs) {
|
|
|
576
591
|
|
|
577
592
|
// Helper: Show doctor help
|
|
578
593
|
function showDoctorHelp() {
|
|
579
|
-
|
|
594
|
+
logger.always(`
|
|
580
595
|
Usage: npx sinapse-ai doctor [options]
|
|
581
596
|
|
|
582
597
|
Run health checks on your SINAPSE installation.
|
|
@@ -639,7 +654,7 @@ async function runUninstall(options = {}) {
|
|
|
639
654
|
);
|
|
640
655
|
|
|
641
656
|
if (existingItems.length === 0) {
|
|
642
|
-
|
|
657
|
+
logger.always('ℹ️ No SINAPSE installation found in this directory.');
|
|
643
658
|
return;
|
|
644
659
|
}
|
|
645
660
|
|
|
@@ -683,27 +698,27 @@ async function runUninstall(options = {}) {
|
|
|
683
698
|
|
|
684
699
|
// Show what will be removed
|
|
685
700
|
if (!quiet) {
|
|
686
|
-
|
|
701
|
+
logger.always('\n📋 Items to be removed:\n');
|
|
687
702
|
for (const item of itemSizes) {
|
|
688
703
|
const sizeStr = item.size > 0 ? ` (${formatBytes(item.size)})` : '';
|
|
689
|
-
|
|
704
|
+
logger.always(` • ${item.path}/${sizeStr} - ${item.description}`);
|
|
690
705
|
}
|
|
691
|
-
|
|
706
|
+
logger.always(`\n Total: ${formatBytes(totalSize)}`);
|
|
692
707
|
|
|
693
708
|
// Check for .gitignore cleanup
|
|
694
709
|
const gitignorePath = path.join(cwd, '.gitignore');
|
|
695
710
|
if (fs.existsSync(gitignorePath)) {
|
|
696
711
|
const content = fs.readFileSync(gitignorePath, 'utf8');
|
|
697
712
|
if (content.includes('# SINAPSE') || content.includes('# Added by SINAPSE')) {
|
|
698
|
-
|
|
713
|
+
logger.always(' • .gitignore SINAPSE entries will be cleaned');
|
|
699
714
|
}
|
|
700
715
|
}
|
|
701
|
-
|
|
716
|
+
logger.always('');
|
|
702
717
|
}
|
|
703
718
|
|
|
704
719
|
// Dry run - stop here
|
|
705
720
|
if (dryRun) {
|
|
706
|
-
|
|
721
|
+
logger.always('🔍 Dry run - no changes made.');
|
|
707
722
|
return;
|
|
708
723
|
}
|
|
709
724
|
|
|
@@ -721,21 +736,21 @@ async function runUninstall(options = {}) {
|
|
|
721
736
|
rl.close();
|
|
722
737
|
|
|
723
738
|
if (answer.toLowerCase() !== 'y' && answer.toLowerCase() !== 'yes') {
|
|
724
|
-
|
|
739
|
+
logger.always('❌ Uninstall cancelled.');
|
|
725
740
|
process.exit(1);
|
|
726
741
|
}
|
|
727
742
|
}
|
|
728
743
|
|
|
729
744
|
// Perform removal
|
|
730
|
-
if (!quiet)
|
|
745
|
+
if (!quiet) logger.always('\n🗑️ Removing SINAPSE components...\n');
|
|
731
746
|
|
|
732
747
|
for (const item of existingItems) {
|
|
733
748
|
const itemPath = path.join(cwd, item.path);
|
|
734
749
|
try {
|
|
735
750
|
fs.rmSync(itemPath, { recursive: true, force: true });
|
|
736
|
-
if (!quiet)
|
|
751
|
+
if (!quiet) logger.always(` ✓ Removed ${item.path}/`);
|
|
737
752
|
} catch (error) {
|
|
738
|
-
|
|
753
|
+
logger.error(` ✗ Failed to remove ${item.path}: ${error.message}`);
|
|
739
754
|
}
|
|
740
755
|
}
|
|
741
756
|
|
|
@@ -749,10 +764,10 @@ async function runUninstall(options = {}) {
|
|
|
749
764
|
const sinapseAgents = globalFiles.filter((f) => f.endsWith(orqxSuffix));
|
|
750
765
|
for (const file of sinapseAgents) {
|
|
751
766
|
fs.rmSync(path.join(globalAgentsDir, file), { force: true });
|
|
752
|
-
if (!quiet)
|
|
767
|
+
if (!quiet) logger.always(` ✓ Removed global agent: ~/.claude/agents/${file}`);
|
|
753
768
|
}
|
|
754
769
|
} catch (error) {
|
|
755
|
-
if (!quiet)
|
|
770
|
+
if (!quiet) logger.warn(` ⚠ Could not clean global agents: ${error.message}`);
|
|
756
771
|
}
|
|
757
772
|
}
|
|
758
773
|
|
|
@@ -760,40 +775,42 @@ async function runUninstall(options = {}) {
|
|
|
760
775
|
const gitignorePath = path.join(cwd, '.gitignore');
|
|
761
776
|
const gitignoreResult = cleanGitignore(gitignorePath);
|
|
762
777
|
if (gitignoreResult.removed && !quiet) {
|
|
763
|
-
|
|
778
|
+
logger.always(` ✓ Cleaned ${gitignoreResult.lines} SINAPSE entries from .gitignore`);
|
|
764
779
|
}
|
|
765
780
|
|
|
766
781
|
// Summary
|
|
767
782
|
if (!quiet) {
|
|
768
|
-
|
|
783
|
+
logger.always('\n✅ SINAPSE has been uninstalled.');
|
|
769
784
|
if (keepData) {
|
|
770
|
-
|
|
785
|
+
logger.always(' Your project data in .sinapse/ has been preserved.');
|
|
771
786
|
}
|
|
772
|
-
|
|
787
|
+
logger.always('\n To reinstall: npx sinapse-ai install');
|
|
773
788
|
}
|
|
774
789
|
}
|
|
775
790
|
|
|
776
791
|
// Helper: Show install help
|
|
777
792
|
function showInstallHelp() {
|
|
778
|
-
|
|
793
|
+
logger.always(`
|
|
779
794
|
Usage: npx sinapse-ai install [options]
|
|
780
795
|
|
|
781
796
|
Install SINAPSE in the current directory.
|
|
782
797
|
|
|
783
798
|
Options:
|
|
784
|
-
--force Overwrite existing SINAPSE installation
|
|
799
|
+
--force Overwrite existing SINAPSE installation (destructive, opt-in)
|
|
785
800
|
--quiet Minimal output (no banner, no prompts) - ideal for CI/CD
|
|
786
801
|
--dry-run Simulate installation without modifying files
|
|
787
|
-
--merge Auto-merge existing config files (brownfield mode)
|
|
788
|
-
--no-merge Disable merge option, use legacy overwrite behavior
|
|
789
802
|
-h, --help Show this help message
|
|
790
803
|
|
|
791
|
-
|
|
804
|
+
Safe Merge (Always On):
|
|
792
805
|
When installing in a project with existing config files (.env, CLAUDE.md),
|
|
793
|
-
SINAPSE
|
|
806
|
+
SINAPSE ALWAYS merges — your customizations are never overwritten.
|
|
794
807
|
|
|
795
808
|
- .env files: Adds new variables, preserves existing values
|
|
796
809
|
- CLAUDE.md: Updates SINAPSE sections, keeps your custom rules
|
|
810
|
+
- Unknown file types: Backed up automatically before any change
|
|
811
|
+
|
|
812
|
+
This behavior is non-negotiable and replaces the old --merge / --no-merge
|
|
813
|
+
flags (which are accepted as no-ops for backward compatibility).
|
|
797
814
|
|
|
798
815
|
Exit Codes:
|
|
799
816
|
0 Installation successful
|
|
@@ -806,9 +823,6 @@ Examples:
|
|
|
806
823
|
# Force reinstall without prompts
|
|
807
824
|
npx sinapse-ai install --force
|
|
808
825
|
|
|
809
|
-
# Brownfield: merge configs automatically
|
|
810
|
-
npx sinapse-ai install --merge
|
|
811
|
-
|
|
812
826
|
# Silent install for CI/CD
|
|
813
827
|
npx sinapse-ai install --quiet --force
|
|
814
828
|
|
|
@@ -820,7 +834,7 @@ Examples:
|
|
|
820
834
|
// Helper: Create new project
|
|
821
835
|
// Helper: Show init help
|
|
822
836
|
function showInitHelp() {
|
|
823
|
-
|
|
837
|
+
logger.always(`
|
|
824
838
|
Usage: npx sinapse-ai init <project-name> [options]
|
|
825
839
|
|
|
826
840
|
Create a new SINAPSE project with the specified name.
|
|
@@ -865,8 +879,8 @@ async function initProject() {
|
|
|
865
879
|
if (templateIndex !== -1) {
|
|
866
880
|
template = initArgs[templateIndex + 1];
|
|
867
881
|
if (!template || template.startsWith('-')) {
|
|
868
|
-
|
|
869
|
-
|
|
882
|
+
logger.error('❌ --template requires a template name');
|
|
883
|
+
logger.error('Available templates: default, minimal, enterprise');
|
|
870
884
|
process.exit(1);
|
|
871
885
|
}
|
|
872
886
|
}
|
|
@@ -874,8 +888,8 @@ async function initProject() {
|
|
|
874
888
|
// Validate template
|
|
875
889
|
const validTemplates = ['default', 'minimal', 'enterprise'];
|
|
876
890
|
if (!validTemplates.includes(template)) {
|
|
877
|
-
|
|
878
|
-
|
|
891
|
+
logger.error(`❌ Unknown template: ${template}`);
|
|
892
|
+
logger.error(`Available templates: ${validTemplates.join(', ')}`);
|
|
879
893
|
process.exit(1);
|
|
880
894
|
}
|
|
881
895
|
|
|
@@ -889,9 +903,9 @@ async function initProject() {
|
|
|
889
903
|
});
|
|
890
904
|
|
|
891
905
|
if (!projectName) {
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
906
|
+
logger.error('❌ Project name is required');
|
|
907
|
+
logger.always('\nUsage: npx sinapse-ai init <project-name> [options]');
|
|
908
|
+
logger.always('Run with --help for more information.');
|
|
895
909
|
process.exit(1);
|
|
896
910
|
}
|
|
897
911
|
|
|
@@ -904,28 +918,28 @@ async function initProject() {
|
|
|
904
918
|
if (fs.existsSync(targetPath) && !isCurrentDir) {
|
|
905
919
|
const contents = fs.readdirSync(targetPath).filter((f) => !f.startsWith('.'));
|
|
906
920
|
if (contents.length > 0 && !isForce) {
|
|
907
|
-
|
|
908
|
-
|
|
921
|
+
logger.error(`❌ Directory already exists and is not empty: ${projectName}`);
|
|
922
|
+
logger.error('Use --force to overwrite.');
|
|
909
923
|
process.exit(1);
|
|
910
924
|
}
|
|
911
925
|
if (contents.length > 0 && isForce) {
|
|
912
|
-
|
|
926
|
+
logger.always(`⚠️ Using --force: overwriting existing directory: ${projectName}`);
|
|
913
927
|
} else {
|
|
914
|
-
|
|
928
|
+
logger.always(`✓ Using existing empty directory: ${projectName}`);
|
|
915
929
|
}
|
|
916
930
|
} else if (!fs.existsSync(targetPath)) {
|
|
917
931
|
fs.mkdirSync(targetPath, { recursive: true });
|
|
918
|
-
|
|
932
|
+
logger.always(`✓ Created directory: ${projectName}`);
|
|
919
933
|
}
|
|
920
934
|
|
|
921
|
-
|
|
935
|
+
logger.always(`Creating new SINAPSE project: ${displayName}`);
|
|
922
936
|
if (template !== 'default') {
|
|
923
|
-
|
|
937
|
+
logger.always(`Template: ${template}`);
|
|
924
938
|
}
|
|
925
939
|
if (skipInstall) {
|
|
926
|
-
|
|
940
|
+
logger.always('Skip install: enabled');
|
|
927
941
|
}
|
|
928
|
-
|
|
942
|
+
logger.always('');
|
|
929
943
|
|
|
930
944
|
// 7. Change to project directory (if not already there)
|
|
931
945
|
if (!isCurrentDir) {
|
|
@@ -942,6 +956,14 @@ async function initProject() {
|
|
|
942
956
|
|
|
943
957
|
// Command routing (async main function)
|
|
944
958
|
async function main() {
|
|
959
|
+
// Story 10.13 — emit deprecation notice when the legacy `sinapse` binary
|
|
960
|
+
// is used for the canonical subcommands. The warning goes to stderr so it
|
|
961
|
+
// does NOT interfere with pipes, does NOT change the exit code, and does
|
|
962
|
+
// NOT block execution (backward compat preserved for one major version).
|
|
963
|
+
if (command === 'install' || command === 'update' || command === 'uninstall') {
|
|
964
|
+
emitDeprecationWarning('sinapse', command);
|
|
965
|
+
}
|
|
966
|
+
|
|
945
967
|
switch (command) {
|
|
946
968
|
case 'workers':
|
|
947
969
|
// Service Discovery CLI - Story 2.7
|
|
@@ -949,7 +971,7 @@ async function main() {
|
|
|
949
971
|
const { run } = require('../.sinapse-ai/cli/index.js');
|
|
950
972
|
await run(process.argv);
|
|
951
973
|
} catch (error) {
|
|
952
|
-
|
|
974
|
+
logger.error(`❌ Workers command error: ${error.message}`);
|
|
953
975
|
process.exit(1);
|
|
954
976
|
}
|
|
955
977
|
break;
|
|
@@ -960,7 +982,7 @@ async function main() {
|
|
|
960
982
|
const { run } = require('../.sinapse-ai/cli/index.js');
|
|
961
983
|
await run(process.argv);
|
|
962
984
|
} catch (error) {
|
|
963
|
-
|
|
985
|
+
logger.error(`❌ Config command error: ${error.message}`);
|
|
964
986
|
process.exit(1);
|
|
965
987
|
}
|
|
966
988
|
break;
|
|
@@ -971,7 +993,7 @@ async function main() {
|
|
|
971
993
|
const { run } = require('../.sinapse-ai/cli/index.js');
|
|
972
994
|
await run(process.argv);
|
|
973
995
|
} catch (error) {
|
|
974
|
-
|
|
996
|
+
logger.error(`❌ Pro command error: ${error.message}`);
|
|
975
997
|
process.exit(1);
|
|
976
998
|
}
|
|
977
999
|
break;
|
|
@@ -983,7 +1005,7 @@ async function main() {
|
|
|
983
1005
|
const { runChromeBrain } = require('./modules/chrome-brain-installer');
|
|
984
1006
|
await runChromeBrain(chromeBrainArgs);
|
|
985
1007
|
} catch (error) {
|
|
986
|
-
|
|
1008
|
+
logger.error(`Error in chrome-brain: ${error.message}`);
|
|
987
1009
|
process.exit(1);
|
|
988
1010
|
}
|
|
989
1011
|
break;
|
|
@@ -996,15 +1018,25 @@ async function main() {
|
|
|
996
1018
|
showInstallHelp();
|
|
997
1019
|
break;
|
|
998
1020
|
}
|
|
1021
|
+
// Story A.2 — expose verbosity flags on the wizard options so the wizard
|
|
1022
|
+
// can pipe them down to sub-steps that still use raw console.
|
|
999
1023
|
const installOptions = {
|
|
1000
1024
|
force: installArgs.includes('--force'),
|
|
1001
|
-
quiet: installArgs.includes('--quiet'),
|
|
1025
|
+
quiet: installArgs.includes('--quiet') || logger._flags?.quiet,
|
|
1026
|
+
verbose: installArgs.includes('--verbose') || logger._flags?.verbose,
|
|
1027
|
+
debug: installArgs.includes('--debug') || logger._flags?.debug,
|
|
1028
|
+
json: installArgs.includes('--json') || logger._flags?.json,
|
|
1002
1029
|
dryRun: installArgs.includes('--dry-run'),
|
|
1003
1030
|
forceMerge: installArgs.includes('--merge'),
|
|
1004
1031
|
noMerge: installArgs.includes('--no-merge'),
|
|
1005
1032
|
};
|
|
1006
|
-
|
|
1007
|
-
|
|
1033
|
+
// Story A.2 AC 9 — json mode: record metadata so flush() emits a
|
|
1034
|
+
// structured summary at process exit.
|
|
1035
|
+
if (installOptions.json) {
|
|
1036
|
+
logger.setVersion(packageJson.version);
|
|
1037
|
+
}
|
|
1038
|
+
if (!installOptions.quiet && !installOptions.json) {
|
|
1039
|
+
logger.always('SINAPSE-FullStack Installation\n');
|
|
1008
1040
|
}
|
|
1009
1041
|
await runWizard(installOptions);
|
|
1010
1042
|
break;
|
|
@@ -1055,6 +1087,54 @@ async function main() {
|
|
|
1055
1087
|
break;
|
|
1056
1088
|
}
|
|
1057
1089
|
|
|
1090
|
+
case 'telemetry': {
|
|
1091
|
+
// Story C.1 — Opt-in telemetry (disabled by default).
|
|
1092
|
+
// Subcommands: enable | disable | status
|
|
1093
|
+
const sub = args[1];
|
|
1094
|
+
const telemetry = require(path.join(__dirname, '..', '.sinapse-ai', 'core', 'telemetry'));
|
|
1095
|
+
if (sub === 'enable') {
|
|
1096
|
+
const ok = telemetry.enable();
|
|
1097
|
+
if (ok) {
|
|
1098
|
+
logger.always('Telemetria ativada. Obrigado por ajudar a melhorar o SINAPSE!');
|
|
1099
|
+
logger.always('Política de privacidade: docs/TELEMETRY.md');
|
|
1100
|
+
} else {
|
|
1101
|
+
logger.error(`Falha ao gravar ${telemetry.configPath()} — telemetria não ativada.`);
|
|
1102
|
+
process.exit(1);
|
|
1103
|
+
}
|
|
1104
|
+
} else if (sub === 'disable') {
|
|
1105
|
+
const ok = telemetry.disable();
|
|
1106
|
+
if (ok) {
|
|
1107
|
+
logger.always('Telemetria desativada.');
|
|
1108
|
+
} else {
|
|
1109
|
+
logger.error(`Falha ao gravar ${telemetry.configPath()} — estado não alterado.`);
|
|
1110
|
+
process.exit(1);
|
|
1111
|
+
}
|
|
1112
|
+
} else if (sub === 'status' || sub === undefined) {
|
|
1113
|
+
const enabled = telemetry.isEnabled();
|
|
1114
|
+
const envOverride = process.env.SINAPSE_TELEMETRY;
|
|
1115
|
+
logger.always(`Telemetria: ${enabled ? 'ATIVADA' : 'DESATIVADA (padrão)'}`);
|
|
1116
|
+
if (envOverride === '1' || envOverride === 'true') {
|
|
1117
|
+
logger.always(' (forçada por SINAPSE_TELEMETRY env var)');
|
|
1118
|
+
} else if (envOverride === '0' || envOverride === 'false') {
|
|
1119
|
+
logger.always(' (forçada desativada por SINAPSE_TELEMETRY env var)');
|
|
1120
|
+
} else {
|
|
1121
|
+
logger.always(` Config: ${telemetry.configPath()}`);
|
|
1122
|
+
}
|
|
1123
|
+
logger.always('');
|
|
1124
|
+
logger.always('Comandos:');
|
|
1125
|
+
logger.always(' sinapse telemetry enable Ativar telemetria (opt-in)');
|
|
1126
|
+
logger.always(' sinapse telemetry disable Desativar telemetria');
|
|
1127
|
+
logger.always(' sinapse telemetry status Ver estado atual');
|
|
1128
|
+
logger.always('');
|
|
1129
|
+
logger.always('Política de privacidade: docs/TELEMETRY.md');
|
|
1130
|
+
} else {
|
|
1131
|
+
logger.error(`Subcomando desconhecido: telemetry ${sub}`);
|
|
1132
|
+
logger.always('Use: sinapse telemetry [enable|disable|status]');
|
|
1133
|
+
process.exit(1);
|
|
1134
|
+
}
|
|
1135
|
+
break;
|
|
1136
|
+
}
|
|
1137
|
+
|
|
1058
1138
|
case 'validate':
|
|
1059
1139
|
// Post-installation validation - Story 6.19
|
|
1060
1140
|
await runValidate();
|
|
@@ -1087,7 +1167,7 @@ async function main() {
|
|
|
1087
1167
|
const { run } = require('../.sinapse-ai/cli/index.js');
|
|
1088
1168
|
await run(process.argv);
|
|
1089
1169
|
} catch (error) {
|
|
1090
|
-
|
|
1170
|
+
logger.error(`❌ QA command error: ${error.message}`);
|
|
1091
1171
|
process.exit(1);
|
|
1092
1172
|
}
|
|
1093
1173
|
break;
|
|
@@ -1141,6 +1221,6 @@ async function main() {
|
|
|
1141
1221
|
|
|
1142
1222
|
// Execute main function
|
|
1143
1223
|
main().catch((error) => {
|
|
1144
|
-
|
|
1224
|
+
logger.error('❌ Fatal error:', error.message);
|
|
1145
1225
|
process.exit(1);
|
|
1146
1226
|
});
|