sinapse-ai 1.19.2 → 1.20.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/CLAUDE.md +2 -2
- package/.claude/hooks/enforce-delegation.cjs +32 -36
- package/.claude/rules/agent-handoff.md +10 -21
- package/.claude/rules/mandatory-delegation.md +1 -1
- package/.claude/rules/token-economy.md +12 -5
- package/.sinapse-ai/constitution.md +2 -0
- package/.sinapse-ai/core/atlas/flows-pt.js +6 -0
- package/.sinapse-ai/core/atlas/flows.js +7 -0
- package/.sinapse-ai/core/atlas/render-html.js +10 -8
- package/.sinapse-ai/core/atlas/render-markdown.js +8 -0
- package/.sinapse-ai/core/doctor/checks/constitution-consistency.js +7 -0
- package/.sinapse-ai/core/execution/autonomous-build-loop.js +10 -4
- package/.sinapse-ai/core/execution/build-orchestrator.js +73 -2
- package/.sinapse-ai/core/execution/rate-limit-manager.js +2 -0
- package/.sinapse-ai/core/execution/result-aggregator.js +2 -0
- package/.sinapse-ai/core/health-check/checks/project/constitution-consistency.js +12 -1
- package/.sinapse-ai/core/orchestration/cli-commands.js +121 -4
- package/.sinapse-ai/core/orchestration/executors/epic-4-executor.js +10 -2
- package/.sinapse-ai/core/orchestration/executors/epic-6-executor.js +53 -2
- package/.sinapse-ai/core/orchestration/index.js +3 -0
- package/.sinapse-ai/core/orchestration/master-orchestrator.js +116 -18
- package/.sinapse-ai/core/registry/service-registry.json +2 -32
- package/.sinapse-ai/core/synapse/context/context-tracker.js +118 -11
- package/.sinapse-ai/core/synapse/engine.js +18 -3
- package/.sinapse-ai/core/synapse/layers/l0-constitution.js +189 -8
- package/.sinapse-ai/core/synapse/output/formatter.js +65 -25
- package/.sinapse-ai/core-config.yaml +8 -1
- package/.sinapse-ai/data/entity-registry.yaml +492 -246
- package/.sinapse-ai/development/agents/analyst.md +18 -34
- package/.sinapse-ai/development/agents/architect.md +18 -34
- package/.sinapse-ai/development/agents/data-engineer.md +15 -28
- package/.sinapse-ai/development/agents/developer.md +18 -40
- package/.sinapse-ai/development/agents/devops.md +15 -28
- package/.sinapse-ai/development/agents/product-lead.md +18 -34
- package/.sinapse-ai/development/agents/project-lead.md +18 -34
- package/.sinapse-ai/development/agents/quality-gate.md +18 -34
- package/.sinapse-ai/development/agents/snps-orqx.md +5 -5
- package/.sinapse-ai/development/agents/sprint-lead.md +20 -36
- package/.sinapse-ai/development/agents/squad-creator.md +15 -27
- package/.sinapse-ai/development/agents/ux-design-expert.md +15 -27
- package/.sinapse-ai/development/scripts/agent-exit-hooks.js +13 -4
- package/.sinapse-ai/development/scripts/populate-entity-registry.js +3 -0
- package/.sinapse-ai/development/tasks/execute-epic-plan.md +0 -4
- package/.sinapse-ai/development/workflows/epic-orchestration.yaml +0 -1
- package/.sinapse-ai/git-hooks/lib/staged-secret-scan.js +3 -1
- package/.sinapse-ai/infrastructure/integrations/ai-providers/README.md +2 -2
- package/.sinapse-ai/install-manifest.yaml +94 -126
- package/.sinapse-ai/product/templates/activation-instructions-template.md +72 -185
- package/.sinapse-ai/product/templates/ide-rules/claude-rules.md +45 -274
- package/.sinapse-ai/product/templates/personalized-agent-template.md +3 -5
- package/.sinapse-ai/product/templates/statusline/agent-badges.json +2 -2
- package/.sinapse-ai/product/templates/statusline/statusline-script.js +5 -3
- package/.sinapse-ai/workflow-intelligence/index.js +3 -21
- package/AGENTS.md +2 -2
- package/CHANGELOG.md +50 -2
- package/README.md +10 -0
- package/bin/cli.js +29 -0
- package/bin/commands/help.js +5 -0
- package/bin/commands/install.js +5 -4
- package/bin/commands/uninstall.js +5 -0
- package/bin/lib/command-generator.js +4 -4
- package/bin/lib/fs-utils.js +18 -0
- package/bin/lib/setup-statusline.js +3 -1
- package/bin/modules/chrome-brain-installer.js +5 -3
- package/bin/modules/mcp-installer.js +3 -6
- package/bin/postinstall.js +9 -1
- package/bin/sinapse-init.js +8 -9
- package/bin/sinapse.js +152 -2
- package/bin/utils/staged-secret-scan.js +3 -1
- package/docs/framework/atlas/OPERATING-ATLAS.md +3 -3
- package/docs/framework/atlas/atlas-data.json +27 -27
- package/docs/framework/atlas/atlas.html +12 -10
- package/docs/framework/source-tree.md +2 -3
- package/docs/framework/workflow-engine-status.md +70 -0
- package/docs/guides/ade-guide.md +4 -2
- package/docs/guides/api-reference.md +2 -0
- package/docs/guides/permission-modes.md +2 -0
- package/docs/guides/user-guide.md +21 -7
- package/docs/guides/workflows/AUTO-WORKTREE-WORKFLOW.md +2 -2
- package/docs/pt/architecture/ade-architecture.md +2 -0
- package/docs/pt/architecture/high-level-architecture.md +1 -1
- package/docs/pt/guides/ade-guide.md +4 -2
- package/docs/pt/guides/api-reference.md +2 -0
- package/docs/pt/guides/permission-modes.md +2 -0
- package/docs/pt/guides/user-guide.md +21 -7
- package/docs/pt/platforms/claude-code.md +2 -2
- package/docs/sinapse-workflows/auto-worktree-workflow.md +2 -2
- package/package.json +1 -1
- package/packages/installer/src/config/configure-environment.js +14 -6
- package/packages/installer/src/config/templates/core-config-template.js +43 -1
- package/packages/installer/src/installer/brownfield-upgrader.js +5 -3
- package/packages/installer/src/installer/file-hasher.js +29 -21
- package/packages/installer/src/installer/manifest-signature.js +61 -49
- package/packages/installer/src/installer/post-install-validator.js +24 -17
- package/packages/installer/src/installer/synapse-runtime-installer.js +148 -0
- package/packages/installer/src/merger/parsers/markdown-section-parser.js +3 -2
- package/packages/installer/src/updater/index.js +7 -1
- package/packages/installer/src/utils/atomic-write.js +35 -0
- package/packages/installer/src/wizard/i18n.js +294 -0
- package/packages/installer/src/wizard/index.js +31 -3
- package/packages/installer/src/wizard/validation/troubleshooting-system.js +60 -131
- package/packages/sinapse-install/src/capabilities/chrome-brain.js +5 -3
- package/packages/sinapse-install/src/installer.js +3 -1
- package/packages/sinapse-install/src/utils/atomic-write.js +67 -0
- package/scripts/apply-persona-disclaimer.js +2 -1
- package/scripts/bracket-report.js +103 -0
- package/scripts/sinapse-patch.js +2 -1
- package/scripts/sync-squad-yaml-components.js +2 -1
- package/scripts/validate-agent-codenames.js +168 -37
- package/scripts/validate-agents-md.js +2 -1
- package/scripts/validate-article-xi.js +10 -8
- package/scripts/validate-install-docs.js +23 -2
- package/scripts/validate-no-external-refs.js +14 -8
- package/sinapse/agents/sinapse-orqx.md +3 -3
- package/sinapse/agents/snps-orqx.md +3 -3
- package/sinapse/knowledge-base/routing-catalog.md +1 -1
- package/sinapse/tasks/diagnose-and-route.md +1 -1
- package/squads/claude-code-mastery/CHANGELOG.md +1 -1
- package/squads/claude-code-mastery/README.md +6 -6
- package/squads/claude-code-mastery/agents/claude-mastery-chief.md +10 -15
- package/squads/claude-code-mastery/agents/config-engineer.md +5 -12
- package/squads/claude-code-mastery/agents/hooks-architect.md +5 -11
- package/squads/claude-code-mastery/agents/mcp-integrator.md +5 -12
- package/squads/claude-code-mastery/agents/project-integrator.md +5 -12
- package/squads/claude-code-mastery/agents/roadmap-sentinel.md +14 -21
- package/squads/claude-code-mastery/agents/skill-craftsman.md +5 -11
- package/squads/claude-code-mastery/agents/swarm-orqx.md +20 -33
- package/squads/claude-code-mastery/data/claude-code-quick-ref.yaml +1 -1
- package/squads/claude-code-mastery/knowledge-base/claude-code-internals-deep.md +4 -4
- package/squads/claude-code-mastery/knowledge-base/claude-code-internals-reference.md +4 -4
- package/squads/claude-code-mastery/tasks/create-agent-definition.md +6 -6
- package/squads/claude-code-mastery/tasks/create-team-topology.md +3 -3
- package/squads/claude-code-mastery/tasks/diagnose.md +1 -1
- package/squads/claude-code-mastery/tasks/parallel-decomposition.md +1 -1
- package/squads/claude-code-mastery/tasks/worktree-strategy.md +1 -1
- package/squads/squad-animations/README.md +1 -1
- package/squads/squad-animations/agents/animation-interpreter.md +5 -5
- package/squads/squad-animations/agents/animations-orqx.md +6 -6
- package/squads/squad-animations/squad.yaml +1 -1
- package/squads/squad-animations/tasks/analyze-reference-animation.md +1 -1
- package/squads/squad-animations/tasks/build-animation-brief.md +1 -1
- package/squads/squad-animations/tasks/create-animation-storyboard.md +1 -1
- package/squads/squad-animations/tasks/cross-reference-brand-system.md +1 -1
- package/squads/squad-animations/tasks/extract-animation-intent.md +1 -1
- package/squads/squad-animations/tasks/generate-motion-vocabulary.md +1 -1
- package/squads/squad-animations/tasks/identify-website-animation.md +1 -1
- package/squads/squad-animations/tasks/interpret-animation-prompt.md +1 -1
- package/squads/squad-animations/tasks/refine-animation-specification.md +1 -1
- package/squads/squad-animations/tasks/translate-feeling-to-parameters.md +1 -1
- package/squads/squad-animations/tasks/validate-animation-feasibility.md +1 -1
- package/squads/squad-animations/workflows/prompt-to-animation-cycle.yaml +2 -2
- package/squads/squad-brand/agents/brand-auditor.md +1 -1
- package/squads/squad-brand/agents/brand-compiler.md +1 -1
- package/squads/squad-brand/agents/brand-motion-vfx.md +5 -5
- package/squads/squad-brand/agents/brand-orqx.md +2 -2
- package/squads/squad-brand/agents/brand-sonic-designer.md +1 -1
- package/squads/squad-brand/squad.yaml +1 -1
- package/squads/squad-brand/tasks/create-animation-library.md +1 -1
- package/squads/squad-brand/tasks/create-brand-characters.md +2 -2
- package/squads/squad-brand/tasks/create-event-branding.md +2 -2
- package/squads/squad-brand/tasks/create-micro-interactions.md +1 -1
- package/squads/squad-brand/tasks/create-page-transitions.md +1 -1
- package/squads/squad-brand/tasks/create-video-templates.md +1 -1
- package/squads/squad-brand/tasks/create-web-templates.md +1 -1
- package/squads/squad-brand/tasks/define-motion-language.md +1 -1
- package/squads/squad-brand/tasks/design-dynamic-identity-system.md +2 -2
- package/squads/squad-brand/tasks/design-illustration-system.md +1 -1
- package/squads/squad-commercial/README.md +3 -3
- package/squads/squad-commercial/agents/commercial-orqx.md +8 -8
- package/squads/squad-commercial/agents/cs-crm-specialist.md +3 -3
- package/squads/squad-commercial/agents/cs-revops-analyst.md +3 -3
- package/squads/squad-commercial/agents/cs-sales-closer.md +1 -1
- package/squads/squad-commercial/knowledge-base/commercial-analytics-reporting.md +7 -7
- package/squads/squad-commercial/knowledge-base/sales-revenue-master-reference.md +1 -1
- package/squads/squad-commercial/squad.yaml +3 -3
- package/squads/squad-commercial/tasks/analyze-revenue-leaks.md +2 -2
- package/squads/squad-commercial/tasks/audit-commercial-tech-stack.md +1 -1
- package/squads/squad-commercial/tasks/audit-crm-data.md +1 -1
- package/squads/squad-commercial/tasks/build-deal-scoring-model.md +1 -1
- package/squads/squad-commercial/tasks/build-forecasting-model.md +1 -1
- package/squads/squad-commercial/tasks/build-pipeline-dashboard.md +2 -2
- package/squads/squad-commercial/tasks/build-unit-economics-model.md +1 -1
- package/squads/squad-commercial/tasks/conduct-commercial-retrospective.md +2 -2
- package/squads/squad-commercial/tasks/conduct-deal-review.md +1 -1
- package/squads/squad-commercial/tasks/conduct-win-loss-analysis.md +1 -1
- package/squads/squad-commercial/tasks/configure-activity-tracking.md +1 -1
- package/squads/squad-commercial/tasks/configure-crm-integrations.md +1 -1
- package/squads/squad-commercial/tasks/configure-pipeline-stages.md +1 -1
- package/squads/squad-commercial/tasks/coordinate-revenue-cycle.md +1 -1
- package/squads/squad-commercial/tasks/create-commercial-brief.md +2 -2
- package/squads/squad-commercial/tasks/create-revenue-dashboard.md +1 -1
- package/squads/squad-commercial/tasks/design-lead-routing.md +1 -1
- package/squads/squad-commercial/tasks/design-quota-model.md +1 -1
- package/squads/squad-commercial/tasks/execute-save-play.md +1 -1
- package/squads/squad-commercial/tasks/manage-commercial-handoffs.md +1 -1
- package/squads/squad-commercial/tasks/manage-pipeline-forecast.md +3 -3
- package/squads/squad-commercial/tasks/monitor-pipeline-health.md +1 -1
- package/squads/squad-commercial/tasks/monitor-saas-metrics.md +1 -1
- package/squads/squad-commercial/tasks/plan-sales-capacity.md +1 -1
- package/squads/squad-commercial/tasks/plan-territory-mapping.md +1 -1
- package/squads/squad-commercial/tasks/review-revenue-architecture.md +2 -2
- package/squads/squad-commercial/tasks/run-quarterly-commercial-review.md +3 -3
- package/squads/squad-commercial/tasks/select-commercial-workflow.md +1 -1
- package/squads/squad-commercial/tasks/setup-outreach-sequences.md +1 -1
- package/squads/squad-commercial/templates/offer-brief-template.md +2 -2
- package/squads/squad-commercial/workflows/new-offer-launch.yaml +2 -2
- package/squads/squad-commercial/workflows/quarterly-commercial-review.yaml +1 -1
- package/squads/squad-commercial/workflows/revenue-forecasting-cycle.yaml +2 -2
- package/squads/squad-content/README.md +1 -1
- package/squads/squad-content/agents/content-analyst.md +4 -4
- package/squads/squad-content/agents/content-engineer.md +2 -2
- package/squads/squad-content/agents/content-governor.md +1 -1
- package/squads/squad-content/agents/content-orqx.md +6 -6
- package/squads/squad-content/agents/editorial-strategist.md +5 -5
- package/squads/squad-content/agents/platform-specialist.md +1 -1
- package/squads/squad-content/agents/signal-intelligence.md +4 -4
- package/squads/squad-content/checklists/editorial-planning-checklist.md +1 -1
- package/squads/squad-content/checklists/onboarding-setup-checklist.md +2 -2
- package/squads/squad-content/knowledge-base/ai-native-content-loop.md +2 -2
- package/squads/squad-content/knowledge-base/content-governance-principles.md +2 -2
- package/squads/squad-content/knowledge-base/cross-squad-integration-protocol.md +1 -1
- package/squads/squad-content/knowledge-base/signal-intelligence-v2.md +1 -1
- package/squads/squad-content/knowledge-base/task-ownership-map.md +5 -5
- package/squads/squad-content/squad.yaml +2 -2
- package/squads/squad-content/tasks/alert-opportunity-windows.md +6 -6
- package/squads/squad-content/tasks/analyze-content-performance.md +2 -2
- package/squads/squad-content/tasks/batch-content-production.md +1 -1
- package/squads/squad-content/tasks/benchmark-against-competitors.md +1 -1
- package/squads/squad-content/tasks/coordinate-cross-squad.md +1 -1
- package/squads/squad-content/tasks/create-content-governance.md +1 -1
- package/squads/squad-content/tasks/create-editorial-calendar.md +1 -1
- package/squads/squad-content/tasks/curate-ugc-signals.md +2 -2
- package/squads/squad-content/tasks/define-big-idea.md +1 -1
- package/squads/squad-content/tasks/define-content-kpis.md +1 -1
- package/squads/squad-content/tasks/flag-content-for-amplification.md +2 -2
- package/squads/squad-content/tasks/generate-content-report.md +3 -3
- package/squads/squad-content/tasks/manage-content-sprint.md +1 -1
- package/squads/squad-content/tasks/measure-content-roi.md +3 -3
- package/squads/squad-content/tasks/orchestrate-content-pipeline.md +2 -2
- package/squads/squad-content/tasks/plan-content-sprint.md +3 -3
- package/squads/squad-content/tasks/predict-content-performance.md +2 -2
- package/squads/squad-content/tasks/scan-daily-signals.md +2 -2
- package/squads/squad-content/tasks/triage-content-requests.md +1 -1
- package/squads/squad-content/tasks/triage-urgent-signal.md +1 -1
- package/squads/squad-content/templates/signal-alert-template.md +2 -2
- package/squads/squad-content/templates/weekly-briefing-template.md +1 -1
- package/squads/squad-content/workflows/content-audit-cycle.yaml +1 -1
- package/squads/squad-content/workflows/content-creation-cycle.yaml +3 -3
- package/squads/squad-content/workflows/editorial-planning-cycle.yaml +3 -3
- package/squads/squad-content/workflows/onboarding-content-cycle.yaml +3 -3
- package/squads/squad-content/workflows/performance-feedback-loop.yaml +3 -3
- package/squads/squad-content/workflows/signal-to-content-cycle.yaml +5 -5
- package/squads/squad-copy/README.md +4 -4
- package/squads/squad-copy/agents/ad-copywriter.md +4 -4
- package/squads/squad-copy/agents/copy-orqx.md +3 -3
- package/squads/squad-copy/agents/copy-strategist.md +5 -5
- package/squads/squad-copy/agents/direct-response-writer.md +3 -3
- package/squads/squad-copy/agents/email-sequence-strategist.md +1 -1
- package/squads/squad-copy/agents/funnel-copywriter.md +3 -3
- package/squads/squad-copy/agents/headline-specialist.md +1 -1
- package/squads/squad-copy/agents/proof-architect.md +3 -3
- package/squads/squad-copy/squad.yaml +3 -3
- package/squads/squad-copy/tasks/build-proof-stack.md +3 -3
- package/squads/squad-copy/tasks/craft-cta-variations.md +2 -2
- package/squads/squad-copy/tasks/craft-email-nurture-sequence.md +2 -2
- package/squads/squad-copy/tasks/craft-objection-handlers.md +1 -1
- package/squads/squad-copy/tasks/craft-social-media-hooks.md +1 -1
- package/squads/squad-copy/tasks/create-cart-abandonment-sequence.md +2 -2
- package/squads/squad-copy/tasks/create-customer-story.md +2 -2
- package/squads/squad-copy/tasks/create-email-campaign.md +2 -2
- package/squads/squad-copy/tasks/create-mechanism-copy.md +4 -4
- package/squads/squad-copy/tasks/create-opening-hooks.md +1 -1
- package/squads/squad-copy/tasks/create-ugc-script.md +2 -2
- package/squads/squad-copy/tasks/create-urgency-scarcity-framework.md +1 -1
- package/squads/squad-copy/tasks/create-welcome-sequence.md +2 -2
- package/squads/squad-copy/tasks/design-headline-ab-tests.md +1 -1
- package/squads/squad-copy/tasks/design-trigger-sequence.md +1 -1
- package/squads/squad-copy/tasks/design-welcome-series.md +2 -2
- package/squads/squad-copy/tasks/optimize-existing-copy.md +2 -2
- package/squads/squad-copy/tasks/optimize-funnel-conversion-copy.md +2 -2
- package/squads/squad-copy/tasks/optimize-pricing-framing.md +2 -2
- package/squads/squad-copy/tasks/write-ad-copy-google.md +2 -2
- package/squads/squad-copy/tasks/write-ad-copy-social.md +2 -2
- package/squads/squad-copy/tasks/write-ad-copy-variations.md +4 -4
- package/squads/squad-copy/tasks/write-case-study.md +2 -2
- package/squads/squad-copy/tasks/write-comparison-piece.md +2 -2
- package/squads/squad-copy/tasks/write-email-sequence.md +1 -1
- package/squads/squad-copy/tasks/write-email-subject-lines.md +1 -1
- package/squads/squad-copy/tasks/write-funnel-copy-sequence.md +4 -4
- package/squads/squad-copy/tasks/write-landing-page-copy.md +2 -2
- package/squads/squad-copy/tasks/write-launch-sequence.md +2 -2
- package/squads/squad-copy/tasks/write-opt-in-page.md +2 -2
- package/squads/squad-copy/tasks/write-product-narrative.md +2 -2
- package/squads/squad-copy/tasks/write-retargeting-copy.md +2 -2
- package/squads/squad-copy/tasks/write-sales-letter.md +1 -1
- package/squads/squad-copy/tasks/write-social-proof-section.md +1 -1
- package/squads/squad-copy/tasks/write-subheadlines-and-deck-copy.md +1 -1
- package/squads/squad-copy/tasks/write-upsell-copy.md +2 -2
- package/squads/squad-copy/tasks/write-vsl-script.md +3 -3
- package/squads/squad-copy/tasks/write-whitepaper-persuasive.md +2 -2
- package/squads/squad-copy/workflows/campaign-copy-cycle.yaml +4 -4
- package/squads/squad-copy/workflows/conversion-copy-sprint.yaml +6 -6
- package/squads/squad-copy/workflows/sales-copy-pipeline.yaml +4 -4
- package/squads/squad-design/README.md +6 -6
- package/squads/squad-design/agents/cro-persuasion.md +3 -3
- package/squads/squad-design/agents/design-orqx.md +17 -17
- package/squads/squad-design/agents/dx-accessibility-specialist.md +5 -5
- package/squads/squad-design/agents/dx-design-system-architect.md +8 -8
- package/squads/squad-design/agents/dx-frontend-engineer.md +7 -7
- package/squads/squad-design/agents/dx-interaction-designer.md +6 -6
- package/squads/squad-design/agents/dx-performance-engineer.md +3 -3
- package/squads/squad-design/agents/dx-ui-designer.md +7 -7
- package/squads/squad-design/agents/dx-ux-strategist.md +7 -7
- package/squads/squad-design/agents/platform-aesthetic-director.md +11 -11
- package/squads/squad-design/agents/premium-packaging-strategist.md +2 -2
- package/squads/squad-design/agents/product-surface-director.md +1 -1
- package/squads/squad-design/squad.yaml +6 -6
- package/squads/squad-design/tasks/analyze-javascript-bundles.md +1 -1
- package/squads/squad-design/tasks/audit-core-web-vitals.md +1 -1
- package/squads/squad-design/tasks/audit-design-system-health.md +1 -1
- package/squads/squad-design/tasks/audit-motion-performance.md +1 -1
- package/squads/squad-design/tasks/certify-accessibility-compliance.md +2 -2
- package/squads/squad-design/tasks/compose-screen-layouts.md +3 -3
- package/squads/squad-design/tasks/conduct-competitive-ux-analysis.md +1 -1
- package/squads/squad-design/tasks/conduct-dx-quality-gate.md +3 -3
- package/squads/squad-design/tasks/conduct-usability-heuristic-review.md +1 -1
- package/squads/squad-design/tasks/conduct-visual-qa.md +1 -1
- package/squads/squad-design/tasks/conduct-wcag-audit.md +1 -1
- package/squads/squad-design/tasks/configure-cdn-strategy.md +1 -1
- package/squads/squad-design/tasks/configure-token-export-pipeline.md +1 -1
- package/squads/squad-design/tasks/create-a11y-remediation-plan.md +4 -4
- package/squads/squad-design/tasks/create-color-system.md +2 -2
- package/squads/squad-design/tasks/create-component-governance.md +1 -1
- package/squads/squad-design/tasks/create-component-tokens.md +2 -2
- package/squads/squad-design/tasks/create-dark-light-themes.md +3 -3
- package/squads/squad-design/tasks/create-easing-curve-library.md +1 -1
- package/squads/squad-design/tasks/create-empty-error-states.md +1 -1
- package/squads/squad-design/tasks/create-error-boundary-patterns.md +1 -1
- package/squads/squad-design/tasks/create-illustration-style.md +1 -1
- package/squads/squad-design/tasks/create-mobile-first-designs.md +2 -2
- package/squads/squad-design/tasks/create-motion-documentation.md +1 -1
- package/squads/squad-design/tasks/create-motion-tokens.md +2 -2
- package/squads/squad-design/tasks/create-primitive-tokens.md +1 -1
- package/squads/squad-design/tasks/create-responsive-grid-system.md +1 -1
- package/squads/squad-design/tasks/create-screen-reader-specs.md +1 -1
- package/squads/squad-design/tasks/create-scroll-animation-patterns.md +1 -1
- package/squads/squad-design/tasks/create-semantic-tokens.md +1 -1
- package/squads/squad-design/tasks/create-storybook-documentation-standards.md +1 -1
- package/squads/squad-design/tasks/create-user-personas.md +1 -1
- package/squads/squad-design/tasks/create-ux-principles.md +1 -1
- package/squads/squad-design/tasks/create-wireframe-brief.md +2 -2
- package/squads/squad-design/tasks/define-atomic-hierarchy.md +2 -2
- package/squads/squad-design/tasks/define-content-hierarchy.md +2 -2
- package/squads/squad-design/tasks/define-motion-principles.md +4 -4
- package/squads/squad-design/tasks/define-performance-budgets.md +1 -1
- package/squads/squad-design/tasks/define-token-taxonomy.md +2 -2
- package/squads/squad-design/tasks/design-accessible-form-patterns.md +2 -2
- package/squads/squad-design/tasks/design-component-api-contracts.md +3 -3
- package/squads/squad-design/tasks/design-component-visual-states.md +4 -4
- package/squads/squad-design/tasks/design-dashboard-layouts.md +1 -1
- package/squads/squad-design/tasks/design-duration-scale.md +1 -1
- package/squads/squad-design/tasks/design-feedback-animations.md +2 -2
- package/squads/squad-design/tasks/design-focus-management.md +1 -1
- package/squads/squad-design/tasks/design-form-patterns.md +2 -2
- package/squads/squad-design/tasks/design-icon-system.md +1 -1
- package/squads/squad-design/tasks/design-information-architecture.md +2 -2
- package/squads/squad-design/tasks/design-landing-page-ui.md +3 -3
- package/squads/squad-design/tasks/design-loading-choreography.md +1 -1
- package/squads/squad-design/tasks/design-multi-brand-theming.md +1 -1
- package/squads/squad-design/tasks/design-page-transitions.md +1 -1
- package/squads/squad-design/tasks/design-spacing-scale.md +3 -3
- package/squads/squad-design/tasks/design-typography-scale.md +3 -3
- package/squads/squad-design/tasks/design-user-flows.md +2 -2
- package/squads/squad-design/tasks/design-visual-hierarchy.md +2 -2
- package/squads/squad-design/tasks/eliminate-render-blocking.md +1 -1
- package/squads/squad-design/tasks/extract-critical-css.md +1 -1
- package/squads/squad-design/tasks/govern-third-party-scripts.md +1 -1
- package/squads/squad-design/tasks/implement-authentication-ui.md +1 -1
- package/squads/squad-design/tasks/implement-component-library.md +4 -4
- package/squads/squad-design/tasks/implement-form-system.md +2 -2
- package/squads/squad-design/tasks/implement-reduced-motion.md +3 -3
- package/squads/squad-design/tasks/implement-responsive-layouts.md +1 -1
- package/squads/squad-design/tasks/implement-routing-strategy.md +1 -1
- package/squads/squad-design/tasks/map-dark-mode-tokens.md +3 -3
- package/squads/squad-design/tasks/map-user-journeys.md +2 -2
- package/squads/squad-design/tasks/migrate-legacy-design-system.md +1 -1
- package/squads/squad-design/tasks/monitor-performance-regression.md +1 -1
- package/squads/squad-design/tasks/optimize-font-loading.md +1 -1
- package/squads/squad-design/tasks/optimize-image-pipeline.md +1 -1
- package/squads/squad-design/tasks/orchestrate-dx-pipeline.md +2 -2
- package/squads/squad-design/tasks/plan-ux-research-sprint.md +1 -1
- package/squads/squad-design/tasks/produce-design-handoff-specs.md +4 -4
- package/squads/squad-design/tasks/review-aria-patterns.md +1 -1
- package/squads/squad-design/tasks/setup-performance-ci-gates.md +1 -1
- package/squads/squad-design/tasks/setup-storybook-integration.md +1 -1
- package/squads/squad-design/tasks/spec-gesture-interactions.md +1 -1
- package/squads/squad-design/tasks/spec-micro-interactions.md +2 -2
- package/squads/squad-design/tasks/synthesize-user-research.md +2 -2
- package/squads/squad-design/tasks/test-keyboard-navigation.md +1 -1
- package/squads/squad-design/tasks/validate-ux-with-testing.md +1 -1
- package/squads/squad-design/tasks/verify-color-contrast.md +2 -2
- package/squads/squad-design/templates/a11y-audit-report-template.md +1 -1
- package/squads/squad-design/templates/design-handoff-template.md +1 -1
- package/squads/squad-design/templates/performance-budget-template.md +1 -1
- package/squads/squad-design/templates/ux-research-plan-template.md +1 -1
- package/squads/squad-design/workflows/a11y-compliance-cycle.yaml +8 -8
- package/squads/squad-design/workflows/design-system-build-cycle.yaml +12 -12
- package/squads/squad-design/workflows/landing-page-sprint.yaml +10 -10
- package/squads/squad-design/workflows/performance-remediation-cycle.yaml +6 -6
- package/squads/squad-design/workflows/ux-research-sprint.yaml +8 -8
- package/squads/squad-design/workflows/zero-to-digital-product-cycle.yaml +16 -16
- package/squads/squad-finance/README.md +1 -1
- package/squads/squad-finance/agents/budget-controller.md +1 -1
- package/squads/squad-finance/agents/cost-optimizer.md +2 -2
- package/squads/squad-finance/agents/finance-orqx.md +4 -4
- package/squads/squad-finance/agents/fiscal-compliance-br.md +4 -4
- package/squads/squad-finance/agents/forecast-strategist.md +6 -6
- package/squads/squad-finance/agents/pricing-strategist.md +3 -3
- package/squads/squad-finance/agents/profitability-analyst.md +1 -1
- package/squads/squad-finance/agents/revenue-analyst.md +1 -1
- package/squads/squad-finance/checklists/monthly-close-checklist.md +1 -1
- package/squads/squad-finance/checklists/quarterly-review-checklist.md +1 -1
- package/squads/squad-finance/squad.yaml +2 -2
- package/squads/squad-finance/tasks/analyze-price-sensitivity.md +1 -1
- package/squads/squad-finance/tasks/benchmark-competitor-pricing.md +1 -1
- package/squads/squad-finance/tasks/calculate-rate-card.md +1 -1
- package/squads/squad-finance/tasks/coordinate-quarterly-review.md +2 -2
- package/squads/squad-finance/tasks/create-proposal-pricing.md +1 -1
- package/squads/squad-finance/tasks/design-service-tiers.md +1 -1
- package/squads/squad-finance/tasks/design-value-based-pricing.md +1 -1
- package/squads/squad-finance/tasks/manage-financial-calendar.md +1 -1
- package/squads/squad-finance/tasks/model-pricing-scenario.md +1 -1
- package/squads/squad-finance/tasks/optimize-rate-realization.md +1 -1
- package/squads/squad-finance/tasks/simulate-pricing-impact.md +1 -1
- package/squads/squad-finance/tasks/track-pricing-performance.md +1 -1
- package/squads/squad-paidmedia/README.md +4 -4
- package/squads/squad-paidmedia/agents/campaign-analyst.md +6 -6
- package/squads/squad-paidmedia/agents/creative-strategist.md +2 -2
- package/squads/squad-paidmedia/agents/cro-specialist.md +5 -5
- package/squads/squad-paidmedia/agents/google-ads-specialist.md +2 -2
- package/squads/squad-paidmedia/agents/meta-ads-specialist.md +6 -6
- package/squads/squad-paidmedia/agents/paidmedia-orqx.md +6 -6
- package/squads/squad-paidmedia/agents/performance-engineer.md +2 -2
- package/squads/squad-paidmedia/agents/pm-creative-performance-analyst.md +2 -2
- package/squads/squad-paidmedia/knowledge-base/routing-catalog.md +21 -21
- package/squads/squad-paidmedia/squad.yaml +4 -4
- package/squads/squad-paidmedia/tasks/allocate-cross-channel-budget.md +1 -1
- package/squads/squad-paidmedia/tasks/allocate-meta-budget.md +2 -2
- package/squads/squad-paidmedia/tasks/analyze-audience-performance.md +1 -1
- package/squads/squad-paidmedia/tasks/analyze-content-performance.md +1 -1
- package/squads/squad-paidmedia/tasks/analyze-conversion-funnel.md +2 -2
- package/squads/squad-paidmedia/tasks/analyze-creative-effectiveness.md +1 -1
- package/squads/squad-paidmedia/tasks/analyze-keyword-rankings.md +1 -1
- package/squads/squad-paidmedia/tasks/analyze-landing-page.md +1 -1
- package/squads/squad-paidmedia/tasks/analyze-local-keywords.md +1 -1
- package/squads/squad-paidmedia/tasks/analyze-local-market.md +1 -1
- package/squads/squad-paidmedia/tasks/analyze-reviews-strategy.md +1 -1
- package/squads/squad-paidmedia/tasks/analyze-top-pages.md +1 -1
- package/squads/squad-paidmedia/tasks/analyze-traffic-sources.md +1 -1
- package/squads/squad-paidmedia/tasks/analyze-user-behavior.md +1 -1
- package/squads/squad-paidmedia/tasks/audit-conversion-tracking.md +1 -1
- package/squads/squad-paidmedia/tasks/audit-gmb-location.md +1 -1
- package/squads/squad-paidmedia/tasks/audit-meta-ads-account.md +1 -1
- package/squads/squad-paidmedia/tasks/audit-sitemap-health.md +1 -1
- package/squads/squad-paidmedia/tasks/build-audience-architecture.md +2 -2
- package/squads/squad-paidmedia/tasks/build-creative-scorecard.md +1 -1
- package/squads/squad-paidmedia/tasks/calculate-sample-size.md +1 -1
- package/squads/squad-paidmedia/tasks/check-indexing-status.md +1 -1
- package/squads/squad-paidmedia/tasks/create-scaling-roadmap.md +1 -1
- package/squads/squad-paidmedia/tasks/design-campaign-structure.md +2 -2
- package/squads/squad-paidmedia/tasks/design-progressive-profiling.md +1 -1
- package/squads/squad-paidmedia/tasks/detect-creative-fatigue.md +1 -1
- package/squads/squad-paidmedia/tasks/execute-launch-checklist.md +1 -1
- package/squads/squad-paidmedia/tasks/generate-monthly-report.md +1 -1
- package/squads/squad-paidmedia/tasks/generate-search-performance-overview.md +1 -1
- package/squads/squad-paidmedia/tasks/generate-weekly-summary.md +1 -1
- package/squads/squad-paidmedia/tasks/manage-pixel-capi-health.md +1 -1
- package/squads/squad-paidmedia/tasks/manage-scaling-roadmap.md +1 -1
- package/squads/squad-paidmedia/tasks/measure-activation-rate.md +1 -1
- package/squads/squad-paidmedia/tasks/optimize-ad-set-targeting.md +2 -2
- package/squads/squad-paidmedia/tasks/optimize-form-conversion.md +1 -1
- package/squads/squad-paidmedia/tasks/optimize-onboarding-activation.md +1 -1
- package/squads/squad-paidmedia/tasks/optimize-page-conversion.md +1 -1
- package/squads/squad-paidmedia/tasks/optimize-signup-flow.md +1 -1
- package/squads/squad-paidmedia/tasks/plan-customer-engagement.md +1 -1
- package/squads/squad-paidmedia/tasks/run-ab-test.md +1 -1
- package/squads/squad-paidmedia/tasks/run-creative-test.md +1 -1
- package/squads/squad-paidmedia/tasks/track-gmb-performance-trends.md +1 -1
- package/squads/squad-paidmedia/tasks/triage-campaign-issues.md +1 -1
- package/squads/squad-product/README.md +2 -2
- package/squads/squad-product/agents/product-orqx.md +4 -4
- package/squads/squad-product/agents/ps-delivery-manager.md +2 -2
- package/squads/squad-product/agents/ps-product-ops-specialist.md +2 -2
- package/squads/squad-product/squad.yaml +2 -2
- package/squads/squad-product/tasks/audit-product-tool-stack.md +1 -1
- package/squads/squad-product/tasks/build-product-knowledge-base.md +1 -1
- package/squads/squad-product/tasks/calculate-sprint-velocity.md +1 -1
- package/squads/squad-product/tasks/configure-feature-flag-rollout.md +1 -1
- package/squads/squad-product/tasks/create-product-artifact-template.md +1 -1
- package/squads/squad-product/tasks/create-product-onboarding-runbook.md +3 -3
- package/squads/squad-product/tasks/create-product-playbook.md +2 -2
- package/squads/squad-product/tasks/document-product-process.md +1 -1
- package/squads/squad-product/tasks/execute-feature-launch-checklist.md +1 -1
- package/squads/squad-product/tasks/facilitate-sprint-retrospective.md +1 -1
- package/squads/squad-product/tasks/generate-product-health-report.md +2 -2
- package/squads/squad-product/tasks/maintain-decision-log-system.md +1 -1
- package/squads/squad-product/tasks/manage-sprint-capacity-planning.md +1 -1
- package/squads/squad-product/tasks/map-cross-functional-dependencies.md +1 -1
- package/squads/squad-product/tasks/prepare-product-handoff-package.md +4 -4
- package/squads/squad-product/tasks/run-product-operations-audit.md +1 -1
- package/squads/squad-product/tasks/run-shape-up-betting-table.md +1 -1
- package/squads/squad-product/tasks/run-sprint-planning-session.md +1 -1
- package/squads/squad-product/tasks/scope-agency-mvp.md +1 -1
- package/squads/squad-product/tasks/setup-new-client-product-operations.md +1 -1
- package/squads/squad-product/tasks/standardize-cross-client-metrics.md +1 -1
- package/squads/squad-product/tasks/triage-technical-debt-backlog.md +1 -1
- package/squads/squad-product/tasks/write-release-notes.md +1 -1
- package/squads/squad-research/README.md +3 -3
- package/squads/squad-research/agents/audience-intelligence.md +9 -9
- package/squads/squad-research/agents/competitive-intelligence.md +1 -1
- package/squads/squad-research/agents/data-synthesizer.md +11 -11
- package/squads/squad-research/agents/deep-researcher.md +2 -2
- package/squads/squad-research/agents/market-analyst.md +9 -9
- package/squads/squad-research/agents/research-orqx.md +4 -4
- package/squads/squad-research/agents/trend-forecaster.md +2 -2
- package/squads/squad-research/knowledge-base/agentic-second-brain-reference.md +1 -1
- package/squads/squad-research/knowledge-base/community-platforms-reference.md +1 -1
- package/squads/squad-research/knowledge-base/cross-squad-integration-protocol.md +1 -1
- package/squads/squad-research/knowledge-base/multi-agent-research-methodology.md +3 -3
- package/squads/squad-research/squad.yaml +3 -3
- package/squads/squad-research/tasks/analyze-audience-behavior.md +2 -2
- package/squads/squad-research/tasks/analyze-audience-psychographics.md +2 -2
- package/squads/squad-research/tasks/analyze-competitor-pricing.md +1 -1
- package/squads/squad-research/tasks/analyze-industry-trends.md +2 -2
- package/squads/squad-research/tasks/analyze-macro-forces.md +1 -1
- package/squads/squad-research/tasks/analyze-pricing-landscape.md +2 -2
- package/squads/squad-research/tasks/analyze-social-listening.md +2 -2
- package/squads/squad-research/tasks/analyze-value-chain.md +2 -2
- package/squads/squad-research/tasks/answer-strategic-question.md +1 -1
- package/squads/squad-research/tasks/assess-market-maturity.md +2 -2
- package/squads/squad-research/tasks/build-audience-persona.md +2 -2
- package/squads/squad-research/tasks/build-data-narrative.md +2 -2
- package/squads/squad-research/tasks/compile-competitive-dossier.md +2 -2
- package/squads/squad-research/tasks/conduct-deep-research.md +1 -1
- package/squads/squad-research/tasks/conduct-jobs-to-be-done.md +2 -2
- package/squads/squad-research/tasks/create-empathy-map.md +2 -2
- package/squads/squad-research/tasks/create-executive-briefing.md +2 -2
- package/squads/squad-research/tasks/create-insight-deck.md +2 -2
- package/squads/squad-research/tasks/create-research-dossier.md +1 -1
- package/squads/squad-research/tasks/create-research-repository.md +2 -2
- package/squads/squad-research/tasks/create-swot-analysis.md +4 -4
- package/squads/squad-research/tasks/design-survey.md +2 -2
- package/squads/squad-research/tasks/evaluate-market-entry.md +2 -2
- package/squads/squad-research/tasks/evaluate-regulatory-landscape.md +2 -2
- package/squads/squad-research/tasks/forecast-industry-trends.md +2 -2
- package/squads/squad-research/tasks/forecast-market-growth.md +2 -2
- package/squads/squad-research/tasks/generate-actionable-recommendations.md +2 -2
- package/squads/squad-research/tasks/identify-market-segments.md +3 -3
- package/squads/squad-research/tasks/map-audience-ecosystem.md +2 -2
- package/squads/squad-research/tasks/map-audience-journey.md +2 -2
- package/squads/squad-research/tasks/map-industry-ecosystem.md +2 -2
- package/squads/squad-research/tasks/map-market-opportunity.md +2 -2
- package/squads/squad-research/tasks/map-pain-gain-matrix.md +2 -2
- package/squads/squad-research/tasks/map-strategic-implications.md +2 -2
- package/squads/squad-research/tasks/orchestrate-research-pipeline.md +4 -4
- package/squads/squad-research/tasks/predict-market-shifts.md +1 -1
- package/squads/squad-research/tasks/profile-ideal-customer.md +2 -2
- package/squads/squad-research/tasks/run-porter-five-forces.md +1 -1
- package/squads/squad-research/tasks/run-scenario-planning.md +1 -1
- package/squads/squad-research/tasks/segment-audience.md +2 -2
- package/squads/squad-research/tasks/size-market-tam-sam-som.md +2 -2
- package/squads/squad-research/tasks/synthesize-multi-source.md +1 -1
- package/squads/squad-research/tasks/synthesize-research-report.md +2 -2
- package/squads/squad-research/tasks/validate-persona-with-data.md +2 -2
- package/squads/squad-research/tasks/visualize-research-data.md +2 -2
- package/squads/squad-research/templates/audience-persona-template.md +1 -1
- package/squads/squad-research/templates/competitive-dossier-template.md +1 -1
- package/squads/squad-research/templates/market-analysis-template.md +1 -1
- package/squads/squad-research/workflows/audience-intelligence-cycle.yaml +12 -12
- package/squads/squad-research/workflows/competitive-intelligence-cycle.yaml +2 -2
- package/squads/squad-research/workflows/deep-research-cycle.yaml +2 -2
- package/squads/squad-research/workflows/full-research-sprint.yaml +8 -8
- package/squads/squad-research/workflows/market-analysis-cycle.yaml +12 -12
- package/squads/squad-research/workflows/trend-forecasting-cycle.yaml +2 -2
- package/.sinapse-ai/core/execution/context-injector.js +0 -537
- package/.sinapse-ai/core/execution/parallel-executor.js +0 -299
- package/.sinapse-ai/core/execution/parallel-monitor.js +0 -430
- package/.sinapse-ai/core/execution/semantic-merge-engine.js +0 -1748
- package/.sinapse-ai/core/execution/wave-executor.js +0 -401
- package/.sinapse-ai/development/tasks/waves.md +0 -205
- package/.sinapse-ai/lib/build.json +0 -1
- package/.sinapse-ai/workflow-intelligence/engine/wave-analyzer.js +0 -684
|
@@ -62,24 +62,29 @@ function removeBOM(content) {
|
|
|
62
62
|
* @throws {Error} - If file cannot be read
|
|
63
63
|
*/
|
|
64
64
|
function hashFile(filePath) {
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
65
|
+
// SECURITY [TOCTOU]: single read — the hashed bytes are exactly what was
|
|
66
|
+
// read, with no exists/stat/read window for a concurrent writer to exploit.
|
|
67
|
+
let raw;
|
|
68
|
+
try {
|
|
69
|
+
raw = fs.readFileSync(filePath);
|
|
70
|
+
} catch (error) {
|
|
71
|
+
if (error.code === 'ENOENT') {
|
|
72
|
+
throw new Error(`File not found: ${filePath}`);
|
|
73
|
+
}
|
|
74
|
+
if (error.code === 'EISDIR') {
|
|
75
|
+
throw new Error(`Cannot hash directory: ${filePath}`);
|
|
76
|
+
}
|
|
77
|
+
throw error;
|
|
72
78
|
}
|
|
73
79
|
|
|
74
80
|
let content;
|
|
75
81
|
|
|
76
82
|
if (isBinaryFile(filePath)) {
|
|
77
83
|
// Binary files: hash raw bytes
|
|
78
|
-
content =
|
|
84
|
+
content = raw;
|
|
79
85
|
} else {
|
|
80
86
|
// Text files: normalize line endings and remove BOM
|
|
81
|
-
const
|
|
82
|
-
const withoutBOM = removeBOM(rawContent);
|
|
87
|
+
const withoutBOM = removeBOM(raw.toString('utf8'));
|
|
83
88
|
const normalized = normalizeLineEndings(withoutBOM);
|
|
84
89
|
content = Buffer.from(normalized, 'utf8');
|
|
85
90
|
}
|
|
@@ -96,25 +101,28 @@ function hashFile(filePath) {
|
|
|
96
101
|
* @throws {Error} - If file cannot be read
|
|
97
102
|
*/
|
|
98
103
|
async function hashFileAsync(filePath) {
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
104
|
+
// SECURITY [TOCTOU]: single read (see hashFile) — no exists/stat/read window.
|
|
105
|
+
let raw;
|
|
106
|
+
try {
|
|
107
|
+
raw = await fs.readFile(filePath);
|
|
108
|
+
} catch (error) {
|
|
109
|
+
if (error.code === 'ENOENT') {
|
|
110
|
+
throw new Error(`File not found: ${filePath}`);
|
|
111
|
+
}
|
|
112
|
+
if (error.code === 'EISDIR') {
|
|
113
|
+
throw new Error(`Cannot hash directory: ${filePath}`);
|
|
114
|
+
}
|
|
115
|
+
throw error;
|
|
107
116
|
}
|
|
108
117
|
|
|
109
118
|
let content;
|
|
110
119
|
|
|
111
120
|
if (isBinaryFile(filePath)) {
|
|
112
121
|
// Binary files: hash raw bytes
|
|
113
|
-
content =
|
|
122
|
+
content = raw;
|
|
114
123
|
} else {
|
|
115
124
|
// Text files: normalize line endings and remove BOM
|
|
116
|
-
const
|
|
117
|
-
const withoutBOM = removeBOM(rawContent);
|
|
125
|
+
const withoutBOM = removeBOM(raw.toString('utf8'));
|
|
118
126
|
const normalized = normalizeLineEndings(withoutBOM);
|
|
119
127
|
content = Buffer.from(normalized, 'utf8');
|
|
120
128
|
}
|
|
@@ -285,82 +285,94 @@ function signatureExists(manifestPath) {
|
|
|
285
285
|
* @param {Object} [options.publicKey] - Override public key (testing only)
|
|
286
286
|
* @returns {Object} { content: Buffer, verified: boolean, error: string|null }
|
|
287
287
|
*/
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
288
|
+
/**
|
|
289
|
+
* Open + fstat + read on a SINGLE file descriptor.
|
|
290
|
+
*
|
|
291
|
+
* SECURITY [TOCTOU]: size check (DoS guard) and read happen on the same open
|
|
292
|
+
* fd, so a concurrent writer cannot swap the file between the check and the
|
|
293
|
+
* use — the buffer verified downstream is exactly the bytes that were sized.
|
|
294
|
+
*
|
|
295
|
+
* @param {string} filePath - File to read
|
|
296
|
+
* @param {number} maxSize - Maximum allowed size in bytes
|
|
297
|
+
* @param {string} label - Human label used in error messages (e.g. "Manifest file")
|
|
298
|
+
* @returns {{content: Buffer|null, error: string|null, missing: boolean}}
|
|
299
|
+
*/
|
|
300
|
+
function readFileCapped(filePath, maxSize, label) {
|
|
301
|
+
let fd;
|
|
302
|
+
try {
|
|
303
|
+
fd = fs.openSync(filePath, 'r');
|
|
304
|
+
} catch (error) {
|
|
294
305
|
return {
|
|
295
306
|
content: null,
|
|
296
|
-
|
|
297
|
-
|
|
307
|
+
error: `Cannot read ${label.toLowerCase()}: ${error.message}`,
|
|
308
|
+
missing: error.code === 'ENOENT',
|
|
298
309
|
};
|
|
299
310
|
}
|
|
300
|
-
|
|
301
|
-
// SECURITY [DOS-1]: Check manifest file size BEFORE reading into memory
|
|
302
|
-
// This prevents DoS attacks via oversized manifest files
|
|
303
|
-
let manifestStat;
|
|
304
311
|
try {
|
|
305
|
-
|
|
312
|
+
const stat = fs.fstatSync(fd);
|
|
313
|
+
if (stat.size > maxSize) {
|
|
314
|
+
return {
|
|
315
|
+
content: null,
|
|
316
|
+
error: `${label} exceeds maximum size (${maxSize} bytes)`,
|
|
317
|
+
missing: false,
|
|
318
|
+
};
|
|
319
|
+
}
|
|
320
|
+
const content = Buffer.alloc(stat.size);
|
|
321
|
+
fs.readSync(fd, content, 0, stat.size, 0);
|
|
322
|
+
return { content, error: null, missing: false };
|
|
306
323
|
} catch (error) {
|
|
307
324
|
return {
|
|
308
325
|
content: null,
|
|
309
|
-
|
|
310
|
-
|
|
326
|
+
error: `Cannot read ${label.toLowerCase()}: ${error.message}`,
|
|
327
|
+
missing: false,
|
|
311
328
|
};
|
|
329
|
+
} finally {
|
|
330
|
+
fs.closeSync(fd);
|
|
312
331
|
}
|
|
332
|
+
}
|
|
313
333
|
|
|
314
|
-
|
|
334
|
+
function loadAndVerifyManifest(manifestPath, options = {}) {
|
|
335
|
+
const requireSignature = options.requireSignature !== false;
|
|
336
|
+
const signaturePath = manifestPath + '.minisig';
|
|
337
|
+
|
|
338
|
+
// SECURITY [DOS-1] + [TOCTOU]: size is validated on the same fd that is
|
|
339
|
+
// read, so the verified buffer cannot be swapped after the check.
|
|
340
|
+
const manifest = readFileCapped(manifestPath, SignatureLimits.MAX_MANIFEST_SIZE, 'Manifest file');
|
|
341
|
+
if (manifest.content === null) {
|
|
315
342
|
return {
|
|
316
343
|
content: null,
|
|
317
344
|
verified: false,
|
|
318
|
-
error:
|
|
345
|
+
error: manifest.missing ? 'Manifest file not found' : manifest.error,
|
|
319
346
|
};
|
|
320
347
|
}
|
|
321
348
|
|
|
322
|
-
//
|
|
323
|
-
|
|
324
|
-
|
|
349
|
+
// SECURITY [DOS-2] + [TOCTOU]: same single-fd pattern for the signature
|
|
350
|
+
const signature = readFileCapped(signaturePath, SignatureLimits.MAX_SIGNATURE_SIZE, 'Signature file');
|
|
351
|
+
if (signature.content === null) {
|
|
352
|
+
if (signature.missing) {
|
|
353
|
+
if (requireSignature) {
|
|
354
|
+
return {
|
|
355
|
+
content: null,
|
|
356
|
+
verified: false,
|
|
357
|
+
error: 'Manifest signature file not found (.minisig)',
|
|
358
|
+
};
|
|
359
|
+
}
|
|
360
|
+
// Allow unsigned in dev mode (requireSignature=false)
|
|
325
361
|
return {
|
|
326
|
-
content:
|
|
362
|
+
content: manifest.content,
|
|
327
363
|
verified: false,
|
|
328
|
-
error:
|
|
364
|
+
error: null,
|
|
329
365
|
};
|
|
330
366
|
}
|
|
331
|
-
// Allow unsigned in dev mode (requireSignature=false)
|
|
332
|
-
// Size already validated above
|
|
333
|
-
return {
|
|
334
|
-
content: fs.readFileSync(manifestPath),
|
|
335
|
-
verified: false,
|
|
336
|
-
error: null,
|
|
337
|
-
};
|
|
338
|
-
}
|
|
339
|
-
|
|
340
|
-
// SECURITY [DOS-2]: Check signature file size BEFORE reading
|
|
341
|
-
// Signature files should be small (~200 bytes typical)
|
|
342
|
-
let signatureStat;
|
|
343
|
-
try {
|
|
344
|
-
signatureStat = fs.statSync(signaturePath);
|
|
345
|
-
} catch (error) {
|
|
346
|
-
return {
|
|
347
|
-
content: null,
|
|
348
|
-
verified: false,
|
|
349
|
-
error: `Cannot stat signature file: ${error.message}`,
|
|
350
|
-
};
|
|
351
|
-
}
|
|
352
|
-
|
|
353
|
-
if (signatureStat.size > SignatureLimits.MAX_SIGNATURE_SIZE) {
|
|
354
367
|
return {
|
|
355
368
|
content: null,
|
|
356
369
|
verified: false,
|
|
357
|
-
error:
|
|
370
|
+
error: signature.error,
|
|
358
371
|
};
|
|
359
372
|
}
|
|
360
373
|
|
|
361
|
-
|
|
362
|
-
const
|
|
363
|
-
const signatureContent = fs.readFileSync(signaturePath, 'utf8');
|
|
374
|
+
const manifestContent = manifest.content;
|
|
375
|
+
const signatureContent = signature.content.toString('utf8');
|
|
364
376
|
|
|
365
377
|
// Verify signature BEFORE any parsing
|
|
366
378
|
const verifyResult = verifyManifestSignature(manifestContent, signatureContent, options);
|
|
@@ -456,21 +456,30 @@ class PostInstallValidator {
|
|
|
456
456
|
// Development mode: signature not required (NOT for production)
|
|
457
457
|
this.log('WARNING: Signature verification disabled - development mode only');
|
|
458
458
|
try {
|
|
459
|
-
// SECURITY [DOS-3]:
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
459
|
+
// SECURITY [DOS-3] + [TOCTOU]: fstat + read on the same open fd, so the
|
|
460
|
+
// size check and the parsed bytes refer to the same file version.
|
|
461
|
+
const fd = fs.openSync(manifestPath, 'r');
|
|
462
|
+
let content;
|
|
463
|
+
try {
|
|
464
|
+
const manifestStat = fs.fstatSync(fd);
|
|
465
|
+
if (manifestStat.size > SecurityLimits.MAX_MANIFEST_SIZE) {
|
|
466
|
+
this.issues.push({
|
|
467
|
+
type: IssueType.INVALID_MANIFEST,
|
|
468
|
+
severity: Severity.CRITICAL,
|
|
469
|
+
message: 'Manifest file exceeds maximum size',
|
|
470
|
+
details: `Size: ${manifestStat.size} bytes, Max: ${SecurityLimits.MAX_MANIFEST_SIZE} bytes`,
|
|
471
|
+
remediation: 'Use a valid manifest file from the official source',
|
|
472
|
+
relativePath: null,
|
|
473
|
+
});
|
|
474
|
+
return null;
|
|
475
|
+
}
|
|
472
476
|
|
|
473
|
-
|
|
477
|
+
const buf = Buffer.alloc(manifestStat.size);
|
|
478
|
+
fs.readSync(fd, buf, 0, manifestStat.size, 0);
|
|
479
|
+
content = buf.toString('utf8');
|
|
480
|
+
} finally {
|
|
481
|
+
fs.closeSync(fd);
|
|
482
|
+
}
|
|
474
483
|
return this.parseManifestContent(content);
|
|
475
484
|
} catch (error) {
|
|
476
485
|
this.issues.push({
|
|
@@ -1394,9 +1403,7 @@ class PostInstallValidator {
|
|
|
1394
1403
|
*/
|
|
1395
1404
|
function formatReport(report, options = {}) {
|
|
1396
1405
|
const useColors = options.colors !== false;
|
|
1397
|
-
// Note: detailed
|
|
1398
|
-
// eslint-disable-next-line no-unused-vars
|
|
1399
|
-
const detailed = options.detailed === true;
|
|
1406
|
+
// Note: options.detailed is parsed from CLI but the detailed view is handled by the caller
|
|
1400
1407
|
|
|
1401
1408
|
const c = {
|
|
1402
1409
|
reset: useColors ? '\x1b[0m' : '',
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SYNAPSE Context-Engine Runtime Installer
|
|
3
|
+
*
|
|
4
|
+
* Story onda2-p9 (DEC-01 option A) — activates the context engine for every
|
|
5
|
+
* installed project. The synapse-engine.cjs hook is ALREADY copied + registered
|
|
6
|
+
* by every install (wizard/ide-config-generator.js HOOKS_TO_COPY + HOOK_EVENT_MAP),
|
|
7
|
+
* but it dies on an early-return when `<project>/.synapse/` does not exist
|
|
8
|
+
* (.sinapse-ai/core/synapse/runtime/hook-runtime.js — `if (!fs.existsSync(synapsePath)) return null;`).
|
|
9
|
+
* This module closes that gap on the CANONICAL install path (install + init)
|
|
10
|
+
* by generating the `.synapse/` runtime in the target project:
|
|
11
|
+
*
|
|
12
|
+
* .synapse/constitution — L0 domain (KEY=VALUE), generated from the target's
|
|
13
|
+
* own .sinapse-ai/constitution.md by the EXISTING
|
|
14
|
+
* generator (core/synapse/scripts/generate-constitution.js
|
|
15
|
+
* — reused via main({ projectRoot }), never duplicated)
|
|
16
|
+
* .synapse/sessions/ — per-session state (session-manager also auto-creates)
|
|
17
|
+
* .synapse/metrics/ — engine injection metrics
|
|
18
|
+
*
|
|
19
|
+
* FAIL-OPEN CONTRACT (NON-NEGOTIABLE for this step): any error here must NEVER
|
|
20
|
+
* break the installation. The function never throws — it returns
|
|
21
|
+
* { success: false, error } and the caller logs a warning and continues.
|
|
22
|
+
* This is safe because the hook itself is fail-safe by design: in the absence
|
|
23
|
+
* of .synapse/ (or of a readable constitution) hook-runtime.js returns null and
|
|
24
|
+
* NOTHING is injected — the engine simply stays dormant, exactly the pre-P9
|
|
25
|
+
* behavior. Worst case of a generation failure = status quo ante.
|
|
26
|
+
*
|
|
27
|
+
* @module installer/synapse-runtime-installer
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
const fs = require('fs');
|
|
31
|
+
const path = require('path');
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Relative path (from a project root) to the constitution generator that ships
|
|
35
|
+
* inside the framework core.
|
|
36
|
+
* @constant {string[]}
|
|
37
|
+
*/
|
|
38
|
+
const GENERATOR_REL_PATH = [
|
|
39
|
+
'.sinapse-ai', 'core', 'synapse', 'scripts', 'generate-constitution.js',
|
|
40
|
+
];
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Resolve the generate-constitution.js module to use for a given target.
|
|
44
|
+
*
|
|
45
|
+
* Preference order:
|
|
46
|
+
* 1. The TARGET's own copy (installed by installSinapseCore just before this
|
|
47
|
+
* step) — version-matched with the .sinapse-ai/ payload the project got.
|
|
48
|
+
* In framework-dev mode (target === package root) this IS the source copy.
|
|
49
|
+
* 2. The package's own copy — fallback for partial copies.
|
|
50
|
+
*
|
|
51
|
+
* @param {string} targetDir - Target project root
|
|
52
|
+
* @returns {string|null} Absolute path to the generator, or null if none found
|
|
53
|
+
*/
|
|
54
|
+
function resolveGeneratorPath(targetDir) {
|
|
55
|
+
const targetCopy = path.join(targetDir, ...GENERATOR_REL_PATH);
|
|
56
|
+
if (fs.existsSync(targetCopy)) return targetCopy;
|
|
57
|
+
|
|
58
|
+
// packages/installer/src/installer/ → package root
|
|
59
|
+
const packageCopy = path.join(__dirname, '..', '..', '..', '..', ...GENERATOR_REL_PATH);
|
|
60
|
+
if (fs.existsSync(packageCopy)) return packageCopy;
|
|
61
|
+
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Generate the `.synapse/` context-engine runtime in the target project.
|
|
67
|
+
*
|
|
68
|
+
* Never throws. Silences the generator's own console.log and preserves
|
|
69
|
+
* process.exitCode (the underlying generator sets exitCode=1 on a miss, which
|
|
70
|
+
* must not leak into the installer's exit semantics — same protection the
|
|
71
|
+
* repo-source wrapper scripts/generate-synapse-runtime.js applies).
|
|
72
|
+
*
|
|
73
|
+
* @param {Object} [options]
|
|
74
|
+
* @param {string} [options.targetDir=process.cwd()] - Target project root
|
|
75
|
+
* @param {string} [options.generatorPath] - Override generator module (tests)
|
|
76
|
+
* @returns {{success: boolean, articles?: number, rules?: number, outputPath?: string, error?: string, sessionsDir?: string, metricsDir?: string}}
|
|
77
|
+
*/
|
|
78
|
+
function installSynapseRuntime(options = {}) {
|
|
79
|
+
const { targetDir = process.cwd() } = options;
|
|
80
|
+
const savedExitCode = process.exitCode;
|
|
81
|
+
const origLog = console.log;
|
|
82
|
+
const origError = console.error;
|
|
83
|
+
|
|
84
|
+
try {
|
|
85
|
+
const generatorPath = options.generatorPath || resolveGeneratorPath(targetDir);
|
|
86
|
+
if (!generatorPath) {
|
|
87
|
+
return {
|
|
88
|
+
success: false,
|
|
89
|
+
error: 'generate-constitution.js not found (target and package copies missing)',
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// Silence the generator's console output ("Constitution generated…" /
|
|
94
|
+
// "Constitution not found…") — the wizard prints its own summary line.
|
|
95
|
+
console.log = () => {};
|
|
96
|
+
console.error = () => {};
|
|
97
|
+
|
|
98
|
+
let result;
|
|
99
|
+
try {
|
|
100
|
+
const { main } = require(generatorPath);
|
|
101
|
+
if (typeof main !== 'function') {
|
|
102
|
+
return { success: false, error: 'generator module has no main() export' };
|
|
103
|
+
}
|
|
104
|
+
result = main({ projectRoot: targetDir });
|
|
105
|
+
} finally {
|
|
106
|
+
console.log = origLog;
|
|
107
|
+
console.error = origError;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
if (!result || !result.success) {
|
|
111
|
+
return {
|
|
112
|
+
success: false,
|
|
113
|
+
error: (result && result.error) || 'constitution generation failed',
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
// sessions/ + metrics/ — mirrors the repo-source .synapse/ layout. The
|
|
118
|
+
// session-manager also mkdir -p's sessions/ lazily, but creating them here
|
|
119
|
+
// gives the installed project the complete structure from prompt zero.
|
|
120
|
+
const sessionsDir = path.join(targetDir, '.synapse', 'sessions');
|
|
121
|
+
const metricsDir = path.join(targetDir, '.synapse', 'metrics');
|
|
122
|
+
fs.mkdirSync(sessionsDir, { recursive: true });
|
|
123
|
+
fs.mkdirSync(metricsDir, { recursive: true });
|
|
124
|
+
|
|
125
|
+
return {
|
|
126
|
+
success: true,
|
|
127
|
+
articles: result.articles,
|
|
128
|
+
rules: result.rules,
|
|
129
|
+
outputPath: result.outputPath,
|
|
130
|
+
sessionsDir,
|
|
131
|
+
metricsDir,
|
|
132
|
+
};
|
|
133
|
+
} catch (err) {
|
|
134
|
+
return { success: false, error: (err && err.message) || String(err) };
|
|
135
|
+
} finally {
|
|
136
|
+
// The generator sets process.exitCode = 1 on a miss; restore whatever the
|
|
137
|
+
// installer process had (fail-open: a dormant engine is not an install error).
|
|
138
|
+
process.exitCode = savedExitCode;
|
|
139
|
+
console.log = origLog;
|
|
140
|
+
console.error = origError;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
module.exports = {
|
|
145
|
+
installSynapseRuntime,
|
|
146
|
+
resolveGeneratorPath,
|
|
147
|
+
GENERATOR_REL_PATH,
|
|
148
|
+
};
|
|
@@ -140,8 +140,9 @@ function parseMarkdownSections(content) {
|
|
|
140
140
|
result.preamble.push(line);
|
|
141
141
|
} else if (currentSection) {
|
|
142
142
|
currentSection.lines.push(line);
|
|
143
|
-
} else
|
|
144
|
-
// Content after an SINAPSE section but before next section
|
|
143
|
+
} else {
|
|
144
|
+
// Content after an SINAPSE section but before next section (sinapseSection
|
|
145
|
+
// is always null here — the in-section branch above `continue`s).
|
|
145
146
|
// This shouldn't happen in well-formed files, but handle it
|
|
146
147
|
result.preamble.push(line);
|
|
147
148
|
}
|
|
@@ -780,11 +780,17 @@ class SINAPSEUpdater {
|
|
|
780
780
|
/**
|
|
781
781
|
* Log if verbose
|
|
782
782
|
*
|
|
783
|
+
* Messages may interpolate error text or npm registry responses; control
|
|
784
|
+
* characters (ANSI escapes, CR) are stripped so external data cannot forge
|
|
785
|
+
* log lines in the user's terminal (CWE-117).
|
|
786
|
+
*
|
|
783
787
|
* @param {string} message - Message
|
|
784
788
|
*/
|
|
785
789
|
log(message) {
|
|
786
790
|
if (this.options.verbose) {
|
|
787
|
-
|
|
791
|
+
// eslint-disable-next-line no-control-regex
|
|
792
|
+
const sanitized = String(message).replace(/[\x00-\x08\x0B-\x1F\x7F]/g, '');
|
|
793
|
+
console.log(`[SINAPSEUpdater] ${sanitized}`);
|
|
788
794
|
}
|
|
789
795
|
}
|
|
790
796
|
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Atomic write bridge — Onda B2 (AF-20260703)
|
|
3
|
+
*
|
|
4
|
+
* Thin pointer to the canonical tmp+rename util in
|
|
5
|
+
* `.sinapse-ai/core/synapse/utils/atomic-write.js` (ships in the same npm
|
|
6
|
+
* package as this workspace). Fail-open: if the canonical util can't be
|
|
7
|
+
* resolved, fall back to a plain write (the pre-hardening behavior) rather
|
|
8
|
+
* than breaking the installer.
|
|
9
|
+
*
|
|
10
|
+
* @module src/utils/atomic-write
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
'use strict';
|
|
14
|
+
|
|
15
|
+
const fs = require('fs');
|
|
16
|
+
const path = require('path');
|
|
17
|
+
|
|
18
|
+
let _atomicWriteSync = null;
|
|
19
|
+
try {
|
|
20
|
+
// packages/installer/src/utils → repo/package root is 4 levels up
|
|
21
|
+
_atomicWriteSync = require(path.join(
|
|
22
|
+
__dirname, '..', '..', '..', '..',
|
|
23
|
+
'.sinapse-ai', 'core', 'synapse', 'utils', 'atomic-write',
|
|
24
|
+
)).atomicWriteSync;
|
|
25
|
+
} catch { /* fallback below */ }
|
|
26
|
+
|
|
27
|
+
function atomicWriteFileSync(filePath, data, encoding = 'utf8') {
|
|
28
|
+
if (_atomicWriteSync) {
|
|
29
|
+
_atomicWriteSync(filePath, data, encoding);
|
|
30
|
+
} else {
|
|
31
|
+
fs.writeFileSync(filePath, data, encoding);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
module.exports = { atomicWriteFileSync };
|