sinapse-ai 1.24.0 → 1.25.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/.agents/skills/react-bits-frontend/SKILL.md +66 -0
- package/.agents/skills/react-bits-frontend/agents/openai.yaml +4 -0
- package/.agents/skills/react-bits-frontend/references/corpus-map.md +29 -0
- package/.agents/skills/sinapse/SKILL.md +10 -0
- package/.agents/skills/sinapse-agent/SKILL.md +22 -0
- package/{.codex → .agents}/skills/sinapse-claude/SKILL.md +1 -1
- package/.agents/skills/sinapse-loop/SKILL.md +35 -0
- package/.agents/skills/sinapse-orqx/SKILL.md +44 -0
- package/.agents/skills/sinapse-spec-driven/SKILL.md +35 -0
- package/.agents/skills/snps/SKILL.md +10 -0
- package/.agents/skills/snps-orqx/SKILL.md +10 -0
- package/.claude/agents/README.md +67 -0
- package/.claude/agents/sinapse-ad-copywriter.md +14 -0
- package/.claude/agents/sinapse-agent-forger.md +14 -0
- package/.claude/agents/sinapse-analyst.md +14 -0
- package/.claude/agents/sinapse-animation-interpreter.md +14 -0
- package/.claude/agents/sinapse-animation-performance-engineer.md +14 -0
- package/.claude/agents/sinapse-animations-orqx.md +14 -0
- package/.claude/agents/sinapse-architect.md +14 -0
- package/.claude/agents/sinapse-assessment-creator.md +14 -0
- package/.claude/agents/sinapse-audience-intelligence.md +14 -0
- package/.claude/agents/sinapse-blake-snyder.md +14 -0
- package/.claude/agents/sinapse-brand-archetype-strategist.md +14 -0
- package/.claude/agents/sinapse-brand-auditor.md +14 -0
- package/.claude/agents/sinapse-brand-collateral-designer.md +14 -0
- package/.claude/agents/sinapse-brand-compiler.md +14 -0
- package/.claude/agents/sinapse-brand-creative-engineer.md +14 -0
- package/.claude/agents/sinapse-brand-culture-architect.md +14 -0
- package/.claude/agents/sinapse-brand-growth-strategist.md +14 -0
- package/.claude/agents/sinapse-brand-identity-designer.md +14 -0
- package/.claude/agents/sinapse-brand-motion-vfx.md +14 -0
- package/.claude/agents/sinapse-brand-naming-specialist.md +14 -0
- package/.claude/agents/sinapse-brand-orqx.md +14 -0
- package/.claude/agents/sinapse-brand-positioning-strategist.md +14 -0
- package/.claude/agents/sinapse-brand-sonic-designer.md +14 -0
- package/.claude/agents/sinapse-brand-strategist.md +14 -0
- package/.claude/agents/sinapse-brand-system-architect.md +14 -0
- package/.claude/agents/sinapse-brand-voice-writer.md +14 -0
- package/.claude/agents/sinapse-brene-brown.md +14 -0
- package/.claude/agents/sinapse-budget-controller.md +14 -0
- package/.claude/agents/sinapse-campaign-analyst.md +14 -0
- package/.claude/agents/sinapse-charlie-munger.md +14 -0
- package/.claude/agents/sinapse-claude-mastery-chief.md +14 -0
- package/.claude/agents/sinapse-cloning-orqx.md +14 -0
- package/.claude/agents/sinapse-cloud-security-engineer.md +14 -0
- package/.claude/agents/sinapse-cognitive-extractor.md +14 -0
- package/.claude/agents/sinapse-commercial-orqx.md +14 -0
- package/.claude/agents/sinapse-competitive-intelligence.md +14 -0
- package/.claude/agents/sinapse-compliance-officer.md +14 -0
- package/.claude/agents/sinapse-config-engineer.md +14 -0
- package/.claude/agents/sinapse-content-analyst.md +14 -0
- package/.claude/agents/sinapse-content-capturer.md +14 -0
- package/.claude/agents/sinapse-content-engineer.md +14 -0
- package/.claude/agents/sinapse-content-governor.md +14 -0
- package/.claude/agents/sinapse-content-orqx.md +14 -0
- package/.claude/agents/sinapse-content-writer.md +14 -0
- package/.claude/agents/sinapse-conversion-writer.md +14 -0
- package/.claude/agents/sinapse-copy-editor.md +14 -0
- package/.claude/agents/sinapse-copy-orqx.md +14 -0
- package/.claude/agents/sinapse-copy-strategist.md +14 -0
- package/.claude/agents/sinapse-cost-optimizer.md +14 -0
- package/.claude/agents/sinapse-council-orqx.md +14 -0
- package/.claude/agents/sinapse-courses-orqx.md +14 -0
- package/.claude/agents/sinapse-creative-strategist.md +14 -0
- package/.claude/agents/sinapse-cro-persuasion.md +14 -0
- package/.claude/agents/sinapse-cro-specialist.md +14 -0
- package/.claude/agents/sinapse-cs-business-auditor.md +14 -0
- package/.claude/agents/sinapse-cs-client-success.md +14 -0
- package/.claude/agents/sinapse-cs-crm-specialist.md +14 -0
- package/.claude/agents/sinapse-cs-funnel-architect.md +14 -0
- package/.claude/agents/sinapse-cs-lead-generation-strategist.md +14 -0
- package/.claude/agents/sinapse-cs-offer-designer.md +14 -0
- package/.claude/agents/sinapse-cs-revops-analyst.md +14 -0
- package/.claude/agents/sinapse-cs-sales-closer.md +14 -0
- package/.claude/agents/sinapse-cs-sales-enablement.md +14 -0
- package/.claude/agents/sinapse-css-motion-artist.md +14 -0
- package/.claude/agents/sinapse-curriculum-designer.md +14 -0
- package/.claude/agents/sinapse-cyber-orqx.md +14 -0
- package/.claude/agents/sinapse-dan-harmon.md +14 -0
- package/.claude/agents/sinapse-data-engineer.md +14 -0
- package/.claude/agents/sinapse-data-synthesizer.md +14 -0
- package/.claude/agents/sinapse-deep-researcher.md +14 -0
- package/.claude/agents/sinapse-derek-sivers.md +14 -0
- package/.claude/agents/sinapse-design-orqx.md +14 -0
- package/.claude/agents/sinapse-design-system.md +14 -0
- package/.claude/agents/sinapse-developer.md +14 -0
- package/.claude/agents/sinapse-devops.md +14 -0
- package/.claude/agents/sinapse-direct-response-writer.md +14 -0
- package/.claude/agents/sinapse-dx-accessibility-specialist.md +14 -0
- package/.claude/agents/sinapse-dx-design-system-architect.md +14 -0
- package/.claude/agents/sinapse-dx-frontend-engineer.md +14 -0
- package/.claude/agents/sinapse-dx-interaction-designer.md +14 -0
- package/.claude/agents/sinapse-dx-performance-engineer.md +14 -0
- package/.claude/agents/sinapse-dx-ui-designer.md +14 -0
- package/.claude/agents/sinapse-dx-ux-strategist.md +14 -0
- package/.claude/agents/sinapse-editorial-strategist.md +14 -0
- package/.claude/agents/sinapse-email-sequence-strategist.md +14 -0
- package/.claude/agents/sinapse-finance-orqx.md +14 -0
- package/.claude/agents/sinapse-fiscal-compliance-br.md +14 -0
- package/.claude/agents/sinapse-forecast-strategist.md +14 -0
- package/.claude/agents/sinapse-funnel-copywriter.md +14 -0
- package/.claude/agents/sinapse-ga-analytics-engineer.md +14 -0
- package/.claude/agents/sinapse-ga-campaign-analyst.md +14 -0
- package/.claude/agents/sinapse-ga-cro-specialist.md +14 -0
- package/.claude/agents/sinapse-ga-data-analyst.md +14 -0
- package/.claude/agents/sinapse-ga-growth-hacker.md +14 -0
- package/.claude/agents/sinapse-ga-seo-strategist.md +14 -0
- package/.claude/agents/sinapse-generative-particle-engineer.md +14 -0
- package/.claude/agents/sinapse-google-ads-specialist.md +14 -0
- package/.claude/agents/sinapse-growth-orqx.md +14 -0
- package/.claude/agents/sinapse-headline-specialist.md +14 -0
- package/.claude/agents/sinapse-hooks-architect.md +14 -0
- package/.claude/agents/sinapse-incident-responder.md +14 -0
- package/.claude/agents/sinapse-joseph-campbell.md +14 -0
- package/.claude/agents/sinapse-kb-architect.md +14 -0
- package/.claude/agents/sinapse-keith-johnstone.md +14 -0
- package/.claude/agents/sinapse-kindra-hall.md +14 -0
- package/.claude/agents/sinapse-launch-strategist.md +14 -0
- package/.claude/agents/sinapse-lesson-architect.md +14 -0
- package/.claude/agents/sinapse-long-form-writer.md +14 -0
- package/.claude/agents/sinapse-market-analyst.md +14 -0
- package/.claude/agents/sinapse-marshall-ganz.md +14 -0
- package/.claude/agents/sinapse-mcp-integrator.md +14 -0
- package/.claude/agents/sinapse-meta-ads-specialist.md +14 -0
- package/.claude/agents/sinapse-mind-synthesizer.md +14 -0
- package/.claude/agents/sinapse-motion-choreographer.md +14 -0
- package/.claude/agents/sinapse-nancy-duarte.md +14 -0
- package/.claude/agents/sinapse-naval-ravikant.md +14 -0
- package/.claude/agents/sinapse-network-security-engineer.md +14 -0
- package/.claude/agents/sinapse-oren-klaff.md +14 -0
- package/.claude/agents/sinapse-paidmedia-orqx.md +14 -0
- package/.claude/agents/sinapse-park-howell.md +14 -0
- package/.claude/agents/sinapse-patrick-lencioni.md +14 -0
- package/.claude/agents/sinapse-penetration-tester.md +14 -0
- package/.claude/agents/sinapse-performance-engineer.md +14 -0
- package/.claude/agents/sinapse-persuasion-psychologist.md +14 -0
- package/.claude/agents/sinapse-peter-thiel.md +14 -0
- package/.claude/agents/sinapse-platform-aesthetic-director.md +14 -0
- package/.claude/agents/sinapse-platform-specialist.md +14 -0
- package/.claude/agents/sinapse-pm-creative-performance-analyst.md +14 -0
- package/.claude/agents/sinapse-pm-youtube-ads-specialist.md +14 -0
- package/.claude/agents/sinapse-premium-packaging-strategist.md +14 -0
- package/.claude/agents/sinapse-pricing-strategist.md +14 -0
- package/.claude/agents/sinapse-product-lead.md +14 -0
- package/.claude/agents/sinapse-product-orqx.md +14 -0
- package/.claude/agents/sinapse-product-surface-director.md +14 -0
- package/.claude/agents/sinapse-production-director.md +14 -0
- package/.claude/agents/sinapse-profitability-analyst.md +14 -0
- package/.claude/agents/sinapse-project-integrator.md +14 -0
- package/.claude/agents/sinapse-project-lead.md +14 -0
- package/.claude/agents/sinapse-proof-architect.md +14 -0
- package/.claude/agents/sinapse-ps-client-product-manager.md +14 -0
- package/.claude/agents/sinapse-ps-delivery-manager.md +14 -0
- package/.claude/agents/sinapse-ps-discovery-lead.md +14 -0
- package/.claude/agents/sinapse-ps-product-analyst.md +14 -0
- package/.claude/agents/sinapse-ps-product-ops-specialist.md +14 -0
- package/.claude/agents/sinapse-ps-product-strategist.md +14 -0
- package/.claude/agents/sinapse-quality-gate.md +14 -0
- package/.claude/agents/sinapse-ray-dalio.md +14 -0
- package/.claude/agents/sinapse-reid-hoffman.md +14 -0
- package/.claude/agents/sinapse-research-orqx.md +14 -0
- package/.claude/agents/sinapse-revenue-analyst.md +14 -0
- package/.claude/agents/sinapse-roadmap-sentinel.md +14 -0
- package/.claude/agents/sinapse-scroll-narrative-engineer.md +14 -0
- package/.claude/agents/sinapse-shader-artist.md +14 -0
- package/.claude/agents/sinapse-signal-intelligence.md +14 -0
- package/.claude/agents/sinapse-simon-sinek.md +14 -0
- package/.claude/agents/sinapse-skill-craftsman.md +14 -0
- package/.claude/agents/sinapse-slide-designer.md +14 -0
- package/.claude/agents/sinapse-snps-orqx.md +14 -0
- package/.claude/agents/sinapse-soc-analyst.md +14 -0
- package/.claude/agents/sinapse-sop-extractor.md +14 -0
- package/.claude/agents/sinapse-source-hunter.md +14 -0
- package/.claude/agents/sinapse-sprint-lead.md +14 -0
- package/.claude/agents/sinapse-squad-assembler.md +14 -0
- package/.claude/agents/sinapse-squad-creator.md +14 -0
- package/.claude/agents/sinapse-storytelling-orqx.md +14 -0
- package/.claude/agents/sinapse-swarm-orqx.md +14 -0
- package/.claude/agents/sinapse-threat-analyst.md +14 -0
- package/.claude/agents/sinapse-threejs-architect.md +14 -0
- package/.claude/agents/sinapse-trend-forecaster.md +14 -0
- package/.claude/agents/sinapse-ux-design-expert.md +14 -0
- package/.claude/agents/sinapse-ux-designer.md +14 -0
- package/.claude/agents/sinapse-yvon-chouinard.md +14 -0
- package/.claude/rules/software-engineering-applicability.md +13 -0
- package/.claude/settings.json +170 -0
- package/.claude/skill-manifest.json +41 -0
- package/.claude/skills/api-review.md +50 -0
- package/.claude/skills/component-check.md +47 -0
- package/.claude/skills/db-review.md +41 -0
- package/.claude/skills/sinapse/SKILL.md +11 -0
- package/.claude/skills/sinapse-agent/SKILL.md +11 -0
- package/.claude/skills/sinapse-analyst/SKILL.md +11 -0
- package/.claude/skills/sinapse-animations/SKILL.md +11 -0
- package/.claude/skills/sinapse-architect/SKILL.md +11 -0
- package/.claude/skills/sinapse-brand/SKILL.md +11 -0
- package/.claude/skills/sinapse-claude/SKILL.md +11 -0
- package/.claude/skills/sinapse-cloning/SKILL.md +11 -0
- package/.claude/skills/sinapse-commercial/SKILL.md +11 -0
- package/.claude/skills/sinapse-content/SKILL.md +11 -0
- package/.claude/skills/sinapse-copy/SKILL.md +11 -0
- package/.claude/skills/sinapse-council/SKILL.md +11 -0
- package/.claude/skills/sinapse-courses/SKILL.md +11 -0
- package/.claude/skills/sinapse-cyber/SKILL.md +11 -0
- package/.claude/skills/sinapse-data-engineer/SKILL.md +11 -0
- package/.claude/skills/sinapse-design/SKILL.md +11 -0
- package/.claude/skills/sinapse-dev/SKILL.md +11 -0
- package/.claude/skills/sinapse-devops/SKILL.md +11 -0
- package/.claude/skills/sinapse-finance/SKILL.md +11 -0
- package/.claude/skills/sinapse-growth/SKILL.md +11 -0
- package/.claude/skills/sinapse-loop/SKILL.md +11 -0
- package/.claude/skills/sinapse-orqx/SKILL.md +11 -0
- package/.claude/skills/sinapse-paidmedia/SKILL.md +11 -0
- package/.claude/skills/sinapse-pm/SKILL.md +11 -0
- package/.claude/skills/sinapse-po/SKILL.md +11 -0
- package/.claude/skills/sinapse-product/SKILL.md +11 -0
- package/.claude/skills/sinapse-qa/SKILL.md +11 -0
- package/.claude/skills/sinapse-research/SKILL.md +11 -0
- package/.claude/skills/sinapse-sm/SKILL.md +11 -0
- package/.claude/skills/sinapse-spec-driven/SKILL.md +11 -0
- package/.claude/skills/sinapse-squad-creator/SKILL.md +11 -0
- package/.claude/skills/sinapse-storytelling/SKILL.md +11 -0
- package/.claude/skills/sinapse-swarm/SKILL.md +11 -0
- package/.claude/skills/sinapse-ux-design-expert/SKILL.md +11 -0
- package/.claude/skills/snps/SKILL.md +11 -0
- package/.claude/skills/snps-orqx/SKILL.md +11 -0
- package/.claude/skills/story-update.md +52 -0
- package/.claude/skills/test-guard.md +41 -0
- package/.codex/agents/ad-copywriter.toml +3 -0
- package/.codex/agents/agent-forger.toml +3 -0
- package/.codex/agents/analyst.toml +3 -0
- package/.codex/agents/animation-interpreter.toml +3 -0
- package/.codex/agents/animation-performance-engineer.toml +3 -0
- package/.codex/agents/animations-orqx.toml +3 -0
- package/.codex/agents/architect.toml +3 -0
- package/.codex/agents/assessment-creator.toml +3 -0
- package/.codex/agents/audience-intelligence.toml +3 -0
- package/.codex/agents/blake-snyder.toml +3 -0
- package/.codex/agents/brand-archetype-strategist.toml +3 -0
- package/.codex/agents/brand-auditor.toml +3 -0
- package/.codex/agents/brand-collateral-designer.toml +3 -0
- package/.codex/agents/brand-compiler.toml +3 -0
- package/.codex/agents/brand-creative-engineer.toml +3 -0
- package/.codex/agents/brand-culture-architect.toml +3 -0
- package/.codex/agents/brand-growth-strategist.toml +3 -0
- package/.codex/agents/brand-identity-designer.toml +3 -0
- package/.codex/agents/brand-motion-vfx.toml +3 -0
- package/.codex/agents/brand-naming-specialist.toml +3 -0
- package/.codex/agents/brand-orqx.toml +3 -0
- package/.codex/agents/brand-positioning-strategist.toml +3 -0
- package/.codex/agents/brand-sonic-designer.toml +3 -0
- package/.codex/agents/brand-strategist.toml +3 -0
- package/.codex/agents/brand-system-architect.toml +3 -0
- package/.codex/agents/brand-voice-writer.toml +3 -0
- package/.codex/agents/brene-brown.toml +3 -0
- package/.codex/agents/budget-controller.toml +3 -0
- package/.codex/agents/campaign-analyst.toml +3 -0
- package/.codex/agents/charlie-munger.toml +3 -0
- package/.codex/agents/claude-mastery-chief.toml +3 -0
- package/.codex/agents/cloning-orqx.toml +3 -0
- package/.codex/agents/cloud-security-engineer.toml +3 -0
- package/.codex/agents/cognitive-extractor.toml +3 -0
- package/.codex/agents/commercial-orqx.toml +3 -0
- package/.codex/agents/competitive-intelligence.toml +3 -0
- package/.codex/agents/compliance-officer.toml +3 -0
- package/.codex/agents/config-engineer.toml +3 -0
- package/.codex/agents/content-analyst.toml +3 -0
- package/.codex/agents/content-capturer.toml +3 -0
- package/.codex/agents/content-engineer.toml +3 -0
- package/.codex/agents/content-governor.toml +3 -0
- package/.codex/agents/content-orqx.toml +3 -0
- package/.codex/agents/content-writer.toml +3 -0
- package/.codex/agents/conversion-writer.toml +3 -0
- package/.codex/agents/copy-editor.toml +3 -0
- package/.codex/agents/copy-orqx.toml +3 -0
- package/.codex/agents/copy-strategist.toml +3 -0
- package/.codex/agents/cost-optimizer.toml +3 -0
- package/.codex/agents/council-orqx.toml +3 -0
- package/.codex/agents/courses-orqx.toml +3 -0
- package/.codex/agents/creative-strategist.toml +3 -0
- package/.codex/agents/cro-persuasion.toml +3 -0
- package/.codex/agents/cro-specialist.toml +3 -0
- package/.codex/agents/cs-business-auditor.toml +3 -0
- package/.codex/agents/cs-client-success.toml +3 -0
- package/.codex/agents/cs-crm-specialist.toml +3 -0
- package/.codex/agents/cs-funnel-architect.toml +3 -0
- package/.codex/agents/cs-lead-generation-strategist.toml +3 -0
- package/.codex/agents/cs-offer-designer.toml +3 -0
- package/.codex/agents/cs-revops-analyst.toml +3 -0
- package/.codex/agents/cs-sales-closer.toml +3 -0
- package/.codex/agents/cs-sales-enablement.toml +3 -0
- package/.codex/agents/css-motion-artist.toml +3 -0
- package/.codex/agents/curriculum-designer.toml +3 -0
- package/.codex/agents/cyber-orqx.toml +3 -0
- package/.codex/agents/dan-harmon.toml +3 -0
- package/.codex/agents/data-engineer.toml +3 -0
- package/.codex/agents/data-synthesizer.toml +3 -0
- package/.codex/agents/deep-researcher.toml +3 -0
- package/.codex/agents/derek-sivers.toml +3 -0
- package/.codex/agents/design-orqx.toml +3 -0
- package/.codex/agents/design-system.toml +3 -0
- package/.codex/agents/developer.toml +3 -0
- package/.codex/agents/devops.toml +3 -0
- package/.codex/agents/direct-response-writer.toml +3 -0
- package/.codex/agents/dx-accessibility-specialist.toml +3 -0
- package/.codex/agents/dx-design-system-architect.toml +3 -0
- package/.codex/agents/dx-frontend-engineer.toml +3 -0
- package/.codex/agents/dx-interaction-designer.toml +3 -0
- package/.codex/agents/dx-performance-engineer.toml +3 -0
- package/.codex/agents/dx-ui-designer.toml +3 -0
- package/.codex/agents/dx-ux-strategist.toml +3 -0
- package/.codex/agents/editorial-strategist.toml +3 -0
- package/.codex/agents/email-sequence-strategist.toml +3 -0
- package/.codex/agents/finance-orqx.toml +3 -0
- package/.codex/agents/fiscal-compliance-br.toml +3 -0
- package/.codex/agents/forecast-strategist.toml +3 -0
- package/.codex/agents/funnel-copywriter.toml +3 -0
- package/.codex/agents/ga-analytics-engineer.toml +3 -0
- package/.codex/agents/ga-campaign-analyst.toml +3 -0
- package/.codex/agents/ga-cro-specialist.toml +3 -0
- package/.codex/agents/ga-data-analyst.toml +3 -0
- package/.codex/agents/ga-growth-hacker.toml +3 -0
- package/.codex/agents/ga-seo-strategist.toml +3 -0
- package/.codex/agents/generative-particle-engineer.toml +3 -0
- package/.codex/agents/google-ads-specialist.toml +3 -0
- package/.codex/agents/growth-orqx.toml +3 -0
- package/.codex/agents/headline-specialist.toml +3 -0
- package/.codex/agents/hooks-architect.toml +3 -0
- package/.codex/agents/incident-responder.toml +3 -0
- package/.codex/agents/joseph-campbell.toml +3 -0
- package/.codex/agents/kb-architect.toml +3 -0
- package/.codex/agents/keith-johnstone.toml +3 -0
- package/.codex/agents/kindra-hall.toml +3 -0
- package/.codex/agents/launch-strategist.toml +3 -0
- package/.codex/agents/lesson-architect.toml +3 -0
- package/.codex/agents/long-form-writer.toml +3 -0
- package/.codex/agents/market-analyst.toml +3 -0
- package/.codex/agents/marshall-ganz.toml +3 -0
- package/.codex/agents/mcp-integrator.toml +3 -0
- package/.codex/agents/meta-ads-specialist.toml +3 -0
- package/.codex/agents/mind-synthesizer.toml +3 -0
- package/.codex/agents/motion-choreographer.toml +3 -0
- package/.codex/agents/nancy-duarte.toml +3 -0
- package/.codex/agents/naval-ravikant.toml +3 -0
- package/.codex/agents/network-security-engineer.toml +3 -0
- package/.codex/agents/oren-klaff.toml +3 -0
- package/.codex/agents/paidmedia-orqx.toml +3 -0
- package/.codex/agents/park-howell.toml +3 -0
- package/.codex/agents/patrick-lencioni.toml +3 -0
- package/.codex/agents/penetration-tester.toml +3 -0
- package/.codex/agents/performance-engineer.toml +3 -0
- package/.codex/agents/persuasion-psychologist.toml +3 -0
- package/.codex/agents/peter-thiel.toml +3 -0
- package/.codex/agents/platform-aesthetic-director.toml +3 -0
- package/.codex/agents/platform-specialist.toml +3 -0
- package/.codex/agents/pm-creative-performance-analyst.toml +3 -0
- package/.codex/agents/pm-youtube-ads-specialist.toml +3 -0
- package/.codex/agents/premium-packaging-strategist.toml +3 -0
- package/.codex/agents/pricing-strategist.toml +3 -0
- package/.codex/agents/product-lead.toml +3 -0
- package/.codex/agents/product-orqx.toml +3 -0
- package/.codex/agents/product-surface-director.toml +3 -0
- package/.codex/agents/production-director.toml +3 -0
- package/.codex/agents/profitability-analyst.toml +3 -0
- package/.codex/agents/project-integrator.toml +3 -0
- package/.codex/agents/project-lead.toml +3 -0
- package/.codex/agents/proof-architect.toml +3 -0
- package/.codex/agents/ps-client-product-manager.toml +3 -0
- package/.codex/agents/ps-delivery-manager.toml +3 -0
- package/.codex/agents/ps-discovery-lead.toml +3 -0
- package/.codex/agents/ps-product-analyst.toml +3 -0
- package/.codex/agents/ps-product-ops-specialist.toml +3 -0
- package/.codex/agents/ps-product-strategist.toml +3 -0
- package/.codex/agents/quality-gate.toml +3 -0
- package/.codex/agents/ray-dalio.toml +3 -0
- package/.codex/agents/reid-hoffman.toml +3 -0
- package/.codex/agents/research-orqx.toml +3 -0
- package/.codex/agents/revenue-analyst.toml +3 -0
- package/.codex/agents/roadmap-sentinel.toml +3 -0
- package/.codex/agents/scroll-narrative-engineer.toml +3 -0
- package/.codex/agents/shader-artist.toml +3 -0
- package/.codex/agents/signal-intelligence.toml +3 -0
- package/.codex/agents/simon-sinek.toml +3 -0
- package/.codex/agents/skill-craftsman.toml +3 -0
- package/.codex/agents/slide-designer.toml +3 -0
- package/.codex/agents/snps-orqx.toml +3 -0
- package/.codex/agents/soc-analyst.toml +3 -0
- package/.codex/agents/sop-extractor.toml +3 -0
- package/.codex/agents/source-hunter.toml +3 -0
- package/.codex/agents/sprint-lead.toml +3 -0
- package/.codex/agents/squad-assembler.toml +3 -0
- package/.codex/agents/squad-creator.toml +3 -0
- package/.codex/agents/storytelling-orqx.toml +3 -0
- package/.codex/agents/swarm-orqx.toml +3 -0
- package/.codex/agents/threat-analyst.toml +3 -0
- package/.codex/agents/threejs-architect.toml +3 -0
- package/.codex/agents/trend-forecaster.toml +3 -0
- package/.codex/agents/ux-design-expert.toml +3 -0
- package/.codex/agents/ux-designer.toml +3 -0
- package/.codex/agents/yvon-chouinard.toml +3 -0
- package/.codex/catalog.json +20 -5
- package/.codex/command-registry.json +94 -0
- package/.codex/config.toml +8 -0
- package/.codex/delegation-matrix.json +39 -25
- package/.codex/delegation-parity.json +46 -41
- package/.codex/hooks/claude-compat.cjs +547 -0
- package/.codex/hooks.json +123 -0
- package/.codex/scripts/resolve-codex-agent.js +30 -1
- package/.codex/scripts/resolve-codex-workflow.js +283 -0
- package/.codex/scripts/sinapse-codex.js +304 -0
- package/.codex/scripts/sync-codex-native.js +581 -0
- package/.codex/scripts/validate-codex-native.js +277 -0
- package/.codex/tasks/onboard-sinapse-codex.md +1 -1
- package/.sinapse-ai/data/entity-registry.yaml +91 -39
- package/.sinapse-ai/install-manifest.yaml +5 -5
- package/.sinapse-ai/product/templates/statusline/agent-badges.json +37 -37
- package/AGENTS.md +5 -4
- package/CHANGELOG.md +23 -7
- package/README.en.md +1 -1
- package/README.md +25 -10
- package/bin/cli.js +8 -1
- package/bin/commands/help.js +3 -2
- package/bin/commands/install.js +79 -53
- package/bin/commands/status.js +4 -3
- package/bin/commands/uninstall.js +247 -29
- package/bin/commands/update.js +38 -23
- package/bin/lib/command-generator.js +25 -3
- package/bin/lib/global-provider-adapters.js +199 -0
- package/bin/lib/provider-parity.js +22 -0
- package/bin/postinstall.js +11 -11
- package/bin/utils/validate-publish.js +43 -10
- package/docs/framework/codex-parity/codex-integration-process.md +6 -7
- package/docs/framework/codex-parity/codex-native-runtime-v2.md +230 -0
- package/docs/framework/codex-parity/codex-parity-program.md +4 -4
- package/docs/framework/codex-parity/codex-total-parity-orchestration-plan.md +1 -1
- package/docs/framework/codex-parity/codex-workflow-task-parity.md +21 -7
- package/docs/framework/react-bits/animations.md +49 -0
- package/docs/framework/react-bits/audit-findings.md +103 -0
- package/docs/framework/react-bits/backgrounds.md +63 -0
- package/docs/framework/react-bits/catalog-summary.json +61 -0
- package/docs/framework/react-bits/components.md +58 -0
- package/docs/framework/react-bits/implementation-playbook.md +161 -0
- package/docs/framework/react-bits/index.md +130 -0
- package/docs/framework/react-bits/inventory.json +9333 -0
- package/docs/framework/react-bits/text-animations.md +41 -0
- package/docs/framework/software-engineering-applicability.md +31 -0
- package/docs/getting-started.md +6 -2
- package/docs/guides/codex-config.md +2 -2
- package/docs/guides/development-setup.md +1 -2
- package/docs/guides/ide-integration.md +6 -6
- package/docs/guides/quality-gates.md +2 -2
- package/docs/ide-integration.md +2 -2
- package/docs/installation/README.md +2 -2
- package/docs/installation/faq.md +1 -1
- package/docs/installation/troubleshooting.md +2 -2
- package/docs/installation/v4-quick-start.md +1 -1
- package/docs/pt/contributing.md +1 -1
- package/docs/pt/guides/development-setup.md +1 -2
- package/docs/pt/guides/quality-gates.md +2 -2
- package/docs/pt/ide-integration.md +6 -6
- package/docs/pt/installation/faq.md +1 -1
- package/docs/pt/installation/troubleshooting.md +2 -3
- package/docs/pt/installation/v4-quick-start.md +1 -2
- package/docs/pt/platforms/claude-code.md +4 -4
- package/docs/sinapse-agent-flows/analyst-system.md +1 -1
- package/docs/sinapse-agent-flows/architect-system.md +1 -1
- package/docs/sinapse-agent-flows/data-engineer-system.md +1 -1
- package/docs/sinapse-agent-flows/dev-system.md +1 -1
- package/docs/sinapse-agent-flows/pm-system.md +1 -1
- package/docs/sinapse-agent-flows/qa-system.md +1 -1
- package/docs/sinapse-agent-flows/sm-system.md +1 -1
- package/docs/sinapse-agent-flows/snps-orqx-system.md +1 -1
- package/docs/sinapse-agent-flows/squad-creator-system.md +2 -2
- package/docs/sinapse-agent-flows/ux-design-expert-system.md +1 -1
- package/package.json +37 -19
- package/packages/engineering-applicability/fixtures.json +52 -0
- package/packages/engineering-applicability/index.js +150 -0
- package/packages/installer/src/config/ide-configs.js +1 -1
- package/packages/installer/src/installer/sinapse-ai-installer.js +359 -2
- package/packages/installer/src/migrations/legacy-claude-agent-command-hashes.json +36 -0
- package/packages/installer/src/migrations/legacy-codex-native-skill-hashes.json +42 -0
- package/packages/installer/src/updater/index.js +51 -13
- package/packages/installer/src/wizard/feedback.js +1 -1
- package/packages/installer/src/wizard/ide-config-generator.js +22 -0
- package/packages/installer/src/wizard/index.js +106 -75
- package/scripts/gen-agent-badges.js +17 -1
- package/scripts/release-readiness.js +9 -3
- package/scripts/research/generate-react-bits-catalog.mjs +206 -0
- package/scripts/sync-provider-adapters.js +203 -0
- package/scripts/validate-codex-command-registry.js +101 -0
- package/scripts/validate-provider-adapters.js +243 -0
- package/squads/claude-code-mastery/agents/skill-craftsman.md +2 -2
- package/squads/claude-code-mastery/knowledge-base/skill-creation-patterns.md +1 -1
- package/squads/squad-animations/knowledge-base/react-bits-operational-guide.md +43 -0
- package/squads/squad-animations/squad.yaml +10 -5
- package/squads/squad-animations/tasks/orchestrate-react-bits-frontend.md +60 -0
- package/squads/squad-design/agents/ux-designer.md +1 -1
- package/.codex/skills/sinapse-orqx/SKILL.md +0 -25
- /package/{.codex → .agents}/skills/sinapse-analyst/SKILL.md +0 -0
- /package/{.codex → .agents}/skills/sinapse-animations/SKILL.md +0 -0
- /package/{.codex → .agents}/skills/sinapse-architect/SKILL.md +0 -0
- /package/{.codex → .agents}/skills/sinapse-brand/SKILL.md +0 -0
- /package/{.codex → .agents}/skills/sinapse-cloning/SKILL.md +0 -0
- /package/{.codex → .agents}/skills/sinapse-commercial/SKILL.md +0 -0
- /package/{.codex → .agents}/skills/sinapse-content/SKILL.md +0 -0
- /package/{.codex → .agents}/skills/sinapse-copy/SKILL.md +0 -0
- /package/{.codex → .agents}/skills/sinapse-council/SKILL.md +0 -0
- /package/{.codex → .agents}/skills/sinapse-courses/SKILL.md +0 -0
- /package/{.codex → .agents}/skills/sinapse-cyber/SKILL.md +0 -0
- /package/{.codex → .agents}/skills/sinapse-data-engineer/SKILL.md +0 -0
- /package/{.codex → .agents}/skills/sinapse-design/SKILL.md +0 -0
- /package/{.codex → .agents}/skills/sinapse-dev/SKILL.md +0 -0
- /package/{.codex → .agents}/skills/sinapse-devops/SKILL.md +0 -0
- /package/{.codex → .agents}/skills/sinapse-finance/SKILL.md +0 -0
- /package/{.codex → .agents}/skills/sinapse-growth/SKILL.md +0 -0
- /package/{.codex → .agents}/skills/sinapse-paidmedia/SKILL.md +0 -0
- /package/{.codex → .agents}/skills/sinapse-pm/SKILL.md +0 -0
- /package/{.codex → .agents}/skills/sinapse-po/SKILL.md +0 -0
- /package/{.codex → .agents}/skills/sinapse-product/SKILL.md +0 -0
- /package/{.codex → .agents}/skills/sinapse-qa/SKILL.md +0 -0
- /package/{.codex → .agents}/skills/sinapse-research/SKILL.md +0 -0
- /package/{.codex → .agents}/skills/sinapse-sm/SKILL.md +0 -0
- /package/{.codex → .agents}/skills/sinapse-squad-creator/SKILL.md +0 -0
- /package/{.codex → .agents}/skills/sinapse-storytelling/SKILL.md +0 -0
- /package/{.codex → .agents}/skills/sinapse-swarm/SKILL.md +0 -0
- /package/{.codex → .agents}/skills/sinapse-ux-design-expert/SKILL.md +0 -0
|
@@ -9,10 +9,29 @@
|
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
11
|
const fs = require('fs-extra');
|
|
12
|
+
const nativeFs = require('fs');
|
|
12
13
|
const path = require('path');
|
|
14
|
+
const crypto = require('crypto');
|
|
13
15
|
const ora = require('ora');
|
|
14
16
|
const { hashFile } = require('./file-hasher');
|
|
15
17
|
|
|
18
|
+
const NOFOLLOW_READ_FLAGS = nativeFs.constants.O_RDONLY | (nativeFs.constants.O_NOFOLLOW || 0);
|
|
19
|
+
|
|
20
|
+
async function readRegularFileNoFollow(filePath) {
|
|
21
|
+
let handle;
|
|
22
|
+
try {
|
|
23
|
+
handle = await nativeFs.promises.open(filePath, NOFOLLOW_READ_FLAGS);
|
|
24
|
+
const stat = await handle.stat();
|
|
25
|
+
if (!stat.isFile()) return null;
|
|
26
|
+
return await handle.readFile();
|
|
27
|
+
} catch (error) {
|
|
28
|
+
if (['ENOENT', 'ELOOP', 'EISDIR'].includes(error.code)) return null;
|
|
29
|
+
throw error;
|
|
30
|
+
} finally {
|
|
31
|
+
if (handle) await handle.close();
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
16
35
|
/**
|
|
17
36
|
* Get the path to the source .sinapse-ai directory in the package
|
|
18
37
|
* @returns {string} Absolute path to .sinapse-ai source
|
|
@@ -58,6 +77,86 @@ const ROOT_FILES_TO_COPY = [
|
|
|
58
77
|
'working-in-the-brownfield.md',
|
|
59
78
|
];
|
|
60
79
|
|
|
80
|
+
/** Project-local Codex payloads copied only when Codex support is selected. */
|
|
81
|
+
const CODEX_TOP_LEVEL_DIRS = ['.agents', '.codex'];
|
|
82
|
+
const CLAUDE_SUPPORT_DIRS = ['.claude/hooks', '.claude/rules'];
|
|
83
|
+
|
|
84
|
+
function getClaudeHookName(command) {
|
|
85
|
+
const match = String(command || '').replace(/\\/g, '/').match(/\.claude\/hooks\/([^"'\s]+)/);
|
|
86
|
+
return match ? match[1] : null;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
function getClaudeHookRegistrationKey(event, matcher, hookName) {
|
|
90
|
+
return JSON.stringify([event, matcher ?? null, hookName]);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/** Merge shipped SINAPSE hook registrations without replacing user settings. */
|
|
94
|
+
async function reconcileClaudeHookSettings(packageRoot, targetDir) {
|
|
95
|
+
const sourcePath = path.join(packageRoot, '.claude', 'settings.json');
|
|
96
|
+
if (!await fs.pathExists(sourcePath)) return null;
|
|
97
|
+
|
|
98
|
+
const targetPath = path.join(targetDir, '.claude', 'settings.local.json');
|
|
99
|
+
const source = await fs.readJson(sourcePath);
|
|
100
|
+
let target = {};
|
|
101
|
+
if (await fs.pathExists(targetPath)) {
|
|
102
|
+
try {
|
|
103
|
+
target = await fs.readJson(targetPath);
|
|
104
|
+
} catch (_error) {
|
|
105
|
+
// Preserve malformed user settings verbatim. The installer must not turn
|
|
106
|
+
// a recoverable configuration problem into data loss or a failed install.
|
|
107
|
+
return null;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
if (!target || typeof target !== 'object' || Array.isArray(target)) return null;
|
|
111
|
+
if (!target.hooks || typeof target.hooks !== 'object' || Array.isArray(target.hooks)) {
|
|
112
|
+
target.hooks = {};
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
const existingSettings = [target];
|
|
116
|
+
const projectSettingsPath = path.join(targetDir, '.claude', 'settings.json');
|
|
117
|
+
if (await fs.pathExists(projectSettingsPath)) {
|
|
118
|
+
try {
|
|
119
|
+
const projectSettings = await fs.readJson(projectSettingsPath);
|
|
120
|
+
if (projectSettings && typeof projectSettings === 'object' && !Array.isArray(projectSettings)) {
|
|
121
|
+
existingSettings.push(projectSettings);
|
|
122
|
+
}
|
|
123
|
+
} catch (_error) {
|
|
124
|
+
// An invalid sibling settings file cannot provide reliable registrations;
|
|
125
|
+
// ignore it while retaining its contents and merge into settings.local.
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
const registered = new Set();
|
|
129
|
+
for (const settings of existingSettings) {
|
|
130
|
+
for (const [event, groups] of Object.entries(settings.hooks || {})) {
|
|
131
|
+
for (const group of Array.isArray(groups) ? groups : []) {
|
|
132
|
+
for (const hook of Array.isArray(group.hooks) ? group.hooks : []) {
|
|
133
|
+
const hookName = getClaudeHookName(hook.command);
|
|
134
|
+
if (hookName) registered.add(getClaudeHookRegistrationKey(event, group.matcher, hookName));
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
for (const [event, groups] of Object.entries(source.hooks || {})) {
|
|
141
|
+
if (!Array.isArray(target.hooks[event])) target.hooks[event] = [];
|
|
142
|
+
for (const group of groups || []) {
|
|
143
|
+
for (const hook of group.hooks || []) {
|
|
144
|
+
const hookName = getClaudeHookName(hook.command);
|
|
145
|
+
const registrationKey = getClaudeHookRegistrationKey(event, group.matcher, hookName);
|
|
146
|
+
if (!hookName || registered.has(registrationKey)) continue;
|
|
147
|
+
const registration = { hooks: [hook] };
|
|
148
|
+
if (group.matcher) registration.matcher = group.matcher;
|
|
149
|
+
target.hooks[event].push(registration);
|
|
150
|
+
registered.add(registrationKey);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
await fs.ensureDir(path.dirname(targetPath));
|
|
156
|
+
await fs.writeJson(targetPath, target, { spaces: 2 });
|
|
157
|
+
return path.join('.claude', 'settings.local.json');
|
|
158
|
+
}
|
|
159
|
+
|
|
61
160
|
/**
|
|
62
161
|
* Replace {root} placeholder in file content
|
|
63
162
|
* @param {string} content - File content
|
|
@@ -116,15 +215,31 @@ async function generateVersionJson(options) {
|
|
|
116
215
|
version,
|
|
117
216
|
installedFiles,
|
|
118
217
|
mode = 'project-development',
|
|
218
|
+
providers = [],
|
|
219
|
+
targetDir = path.dirname(targetSinapseCore),
|
|
220
|
+
providerFiles = [],
|
|
221
|
+
providerSourceRoot = targetDir,
|
|
119
222
|
} = options;
|
|
120
223
|
|
|
121
224
|
const fileHashes = await generateFileHashes(targetSinapseCore, installedFiles);
|
|
225
|
+
const providerFileHashes = {};
|
|
226
|
+
for (const relativePath of providerFiles) {
|
|
227
|
+
const sourcePath = path.join(providerSourceRoot, relativePath);
|
|
228
|
+
const sourceContent = await readRegularFileNoFollow(sourcePath);
|
|
229
|
+
if (sourceContent !== null) {
|
|
230
|
+
const installedContent = replaceRootPlaceholder(sourceContent.toString('utf8'));
|
|
231
|
+
const digest = crypto.createHash('sha256').update(installedContent).digest('hex');
|
|
232
|
+
providerFileHashes[relativePath.replace(/\\/g, '/')] = `sha256:${digest}`;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
122
235
|
|
|
123
236
|
const versionJson = {
|
|
124
237
|
version,
|
|
125
238
|
installedAt: new Date().toISOString(),
|
|
126
239
|
mode,
|
|
240
|
+
providers: [...new Set(providers)].sort(),
|
|
127
241
|
fileHashes,
|
|
242
|
+
providerFileHashes,
|
|
128
243
|
customized: [],
|
|
129
244
|
};
|
|
130
245
|
|
|
@@ -156,6 +271,160 @@ function isUserOwnedL3(destPath) {
|
|
|
156
271
|
return false;
|
|
157
272
|
}
|
|
158
273
|
|
|
274
|
+
function getManagedCodexSkillPaths(packageRoot) {
|
|
275
|
+
const catalog = fs.readJsonSync(path.join(packageRoot, '.codex', 'catalog.json'));
|
|
276
|
+
return [...new Set([
|
|
277
|
+
...(catalog.expectedSkillIds || []),
|
|
278
|
+
...(catalog.publicAliasSkillIds || []),
|
|
279
|
+
catalog.genericAgentSkillId,
|
|
280
|
+
].filter(Boolean))]
|
|
281
|
+
.sort()
|
|
282
|
+
.map((skillId) => path.posix.join('.agents', 'skills', skillId, 'SKILL.md'));
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
function createCodexPreservePredicate(targetDir, packageRoot, previousProviderHashes = {}) {
|
|
286
|
+
const legacyRegistry = fs.readJsonSync(path.join(
|
|
287
|
+
packageRoot,
|
|
288
|
+
'packages',
|
|
289
|
+
'installer',
|
|
290
|
+
'src',
|
|
291
|
+
'migrations',
|
|
292
|
+
'legacy-codex-native-skill-hashes.json',
|
|
293
|
+
));
|
|
294
|
+
return (destPath) => {
|
|
295
|
+
const normalized = String(destPath).replace(/\\/g, '/');
|
|
296
|
+
if (normalized.endsWith('/.codex/config.toml') || normalized.endsWith('/.codex/hooks.json')) return true;
|
|
297
|
+
if (!/\/(?:\.codex|\.agents)\/skills\/[^/]+\/SKILL\.md$/.test(normalized)) return false;
|
|
298
|
+
if (!fs.existsSync(destPath)) return false;
|
|
299
|
+
const relativePath = path.relative(targetDir, destPath).replace(/\\/g, '/');
|
|
300
|
+
const digest = hashFile(destPath);
|
|
301
|
+
const previous = String(previousProviderHashes[relativePath] || '').replace(/^sha256:/, '');
|
|
302
|
+
const legacyHashes = legacyRegistry.files[relativePath] || [];
|
|
303
|
+
return digest !== previous && !legacyHashes.includes(digest);
|
|
304
|
+
};
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
async function reconcileLegacyCodexSkills(targetDir, packageRoot) {
|
|
308
|
+
const catalogPath = path.join(packageRoot, '.codex', 'catalog.json');
|
|
309
|
+
if (!await fs.pathExists(catalogPath)) return { removed: 0, migrated: 0, quarantined: 0, ambiguous: [] };
|
|
310
|
+
|
|
311
|
+
const catalog = await fs.readJson(catalogPath);
|
|
312
|
+
const managedIds = [...new Set([
|
|
313
|
+
...(catalog.expectedSkillIds || []),
|
|
314
|
+
...(catalog.publicAliasSkillIds || []),
|
|
315
|
+
catalog.genericAgentSkillId,
|
|
316
|
+
].filter((id) => /^[a-z0-9][a-z0-9-]*$/.test(String(id))))].sort();
|
|
317
|
+
const result = { removed: 0, migrated: 0, quarantined: 0, ambiguous: [] };
|
|
318
|
+
|
|
319
|
+
for (const skillId of managedIds) {
|
|
320
|
+
const legacyPath = path.join(targetDir, '.codex', 'skills', skillId, 'SKILL.md');
|
|
321
|
+
if (!await fs.pathExists(legacyPath)) continue;
|
|
322
|
+
const legacyContent = await readRegularFileNoFollow(legacyPath);
|
|
323
|
+
if (legacyContent === null) {
|
|
324
|
+
result.ambiguous.push(path.relative(targetDir, legacyPath));
|
|
325
|
+
continue;
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
const nativePath = path.join(targetDir, '.agents', 'skills', skillId, 'SKILL.md');
|
|
329
|
+
if (!await fs.pathExists(nativePath)) {
|
|
330
|
+
await fs.ensureDir(path.dirname(nativePath));
|
|
331
|
+
try {
|
|
332
|
+
await fs.writeFile(nativePath, legacyContent, { flag: 'wx' });
|
|
333
|
+
} catch (error) {
|
|
334
|
+
if (error.code === 'EEXIST') {
|
|
335
|
+
result.ambiguous.push(path.relative(targetDir, legacyPath));
|
|
336
|
+
continue;
|
|
337
|
+
}
|
|
338
|
+
throw error;
|
|
339
|
+
}
|
|
340
|
+
await fs.remove(legacyPath);
|
|
341
|
+
if ((await fs.readdir(path.dirname(legacyPath))).length === 0) {
|
|
342
|
+
await fs.remove(path.dirname(legacyPath));
|
|
343
|
+
}
|
|
344
|
+
result.migrated += 1;
|
|
345
|
+
continue;
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
const nativeContent = await readRegularFileNoFollow(nativePath);
|
|
349
|
+
if (nativeContent === null) {
|
|
350
|
+
result.ambiguous.push(path.relative(targetDir, legacyPath));
|
|
351
|
+
continue;
|
|
352
|
+
}
|
|
353
|
+
if (legacyContent.equals(nativeContent)) {
|
|
354
|
+
await fs.remove(legacyPath);
|
|
355
|
+
if ((await fs.readdir(path.dirname(legacyPath))).length === 0) {
|
|
356
|
+
await fs.remove(path.dirname(legacyPath));
|
|
357
|
+
}
|
|
358
|
+
result.removed += 1;
|
|
359
|
+
continue;
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
const digest = crypto.createHash('sha256').update(legacyContent).digest('hex').slice(0, 12);
|
|
363
|
+
const quarantinePath = path.join(
|
|
364
|
+
targetDir,
|
|
365
|
+
'.sinapse-ai',
|
|
366
|
+
'migrations',
|
|
367
|
+
'codex-skills',
|
|
368
|
+
`${skillId}.${digest}.legacy.md`,
|
|
369
|
+
);
|
|
370
|
+
await fs.ensureDir(path.dirname(quarantinePath));
|
|
371
|
+
try {
|
|
372
|
+
await fs.writeFile(quarantinePath, legacyContent, { flag: 'wx' });
|
|
373
|
+
} catch (error) {
|
|
374
|
+
if (error.code !== 'EEXIST') throw error;
|
|
375
|
+
const quarantinedContent = await readRegularFileNoFollow(quarantinePath);
|
|
376
|
+
if (quarantinedContent === null || !quarantinedContent.equals(legacyContent)) {
|
|
377
|
+
result.ambiguous.push(path.relative(targetDir, legacyPath));
|
|
378
|
+
continue;
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
await fs.remove(legacyPath);
|
|
382
|
+
if ((await fs.readdir(path.dirname(legacyPath))).length === 0) {
|
|
383
|
+
await fs.remove(path.dirname(legacyPath));
|
|
384
|
+
}
|
|
385
|
+
result.quarantined += 1;
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
return result;
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
async function reconcileLegacyClaudeAgentCommands(targetDir, packageRoot = path.join(__dirname, '..', '..', '..', '..')) {
|
|
392
|
+
const legacyDir = path.join(targetDir, '.claude', 'commands', 'SINAPSE', 'agents');
|
|
393
|
+
const result = { removed: 0, preserved: 0, ambiguous: [] };
|
|
394
|
+
if (!await fs.pathExists(legacyDir)) return result;
|
|
395
|
+
|
|
396
|
+
const registryPath = path.join(
|
|
397
|
+
packageRoot,
|
|
398
|
+
'packages',
|
|
399
|
+
'installer',
|
|
400
|
+
'src',
|
|
401
|
+
'migrations',
|
|
402
|
+
'legacy-claude-agent-command-hashes.json',
|
|
403
|
+
);
|
|
404
|
+
const registry = await fs.readJson(registryPath);
|
|
405
|
+
for (const entry of await fs.readdir(legacyDir, { withFileTypes: true })) {
|
|
406
|
+
const filePath = path.join(legacyDir, entry.name);
|
|
407
|
+
if (!entry.isFile()) {
|
|
408
|
+
result.preserved += 1;
|
|
409
|
+
result.ambiguous.push(path.relative(targetDir, filePath));
|
|
410
|
+
continue;
|
|
411
|
+
}
|
|
412
|
+
const content = await fs.readFile(filePath);
|
|
413
|
+
const digest = crypto.createHash('sha256').update(content).digest('hex');
|
|
414
|
+
const knownHashes = registry.files[entry.name] || [];
|
|
415
|
+
const isMarked = content.includes(Buffer.from('SINAPSE-MANAGED:claude-command'));
|
|
416
|
+
if (knownHashes.includes(digest) || isMarked) {
|
|
417
|
+
await fs.remove(filePath);
|
|
418
|
+
result.removed += 1;
|
|
419
|
+
} else {
|
|
420
|
+
result.preserved += 1;
|
|
421
|
+
result.ambiguous.push(path.relative(targetDir, filePath));
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
if ((await fs.readdir(legacyDir)).length === 0) await fs.remove(legacyDir);
|
|
425
|
+
return result;
|
|
426
|
+
}
|
|
427
|
+
|
|
159
428
|
async function copyFileWithRootReplacement(sourcePath, destPath, replaceRoot = true, preserveExisting = null) {
|
|
160
429
|
try {
|
|
161
430
|
// Preserve user-owned L3 files (core-config.yaml, agent MEMORY.md) when they
|
|
@@ -232,6 +501,43 @@ async function copyDirectoryWithRootReplacement(sourceDir, destDir, onProgress =
|
|
|
232
501
|
return copiedFiles;
|
|
233
502
|
}
|
|
234
503
|
|
|
504
|
+
async function deliverClaudeNativeAdapters(pkgRoot, targetDir, options = {}) {
|
|
505
|
+
const overwriteManaged = options.overwriteManaged === true;
|
|
506
|
+
const delivered = { agents: [], skills: [], manifest: null };
|
|
507
|
+
const sourceAgents = path.join(pkgRoot, '.claude', 'agents');
|
|
508
|
+
if (await fs.pathExists(sourceAgents)) {
|
|
509
|
+
for (const file of (await fs.readdir(sourceAgents)).filter((name) => /^sinapse-.+\.md$/.test(name))) {
|
|
510
|
+
const destination = path.join(targetDir, '.claude', 'agents', file);
|
|
511
|
+
if (!overwriteManaged && await fs.pathExists(destination)) continue;
|
|
512
|
+
if (await copyFileWithRootReplacement(path.join(sourceAgents, file), destination, true)) {
|
|
513
|
+
delivered.agents.push(path.join('.claude', 'agents', file));
|
|
514
|
+
}
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
const sourceSkills = path.join(pkgRoot, '.claude', 'skills');
|
|
519
|
+
if (await fs.pathExists(sourceSkills)) {
|
|
520
|
+
const entries = await fs.readdir(sourceSkills, { withFileTypes: true });
|
|
521
|
+
for (const entry of entries.filter((item) => item.isDirectory())) {
|
|
522
|
+
const source = path.join(sourceSkills, entry.name, 'SKILL.md');
|
|
523
|
+
if (!await fs.pathExists(source)) continue;
|
|
524
|
+
const relativePath = path.join('.claude', 'skills', entry.name, 'SKILL.md');
|
|
525
|
+
const destination = path.join(targetDir, relativePath);
|
|
526
|
+
if (!overwriteManaged && await fs.pathExists(destination)) continue;
|
|
527
|
+
if (await copyFileWithRootReplacement(source, destination, true)) delivered.skills.push(relativePath);
|
|
528
|
+
}
|
|
529
|
+
}
|
|
530
|
+
const manifestSource = path.join(pkgRoot, '.claude', 'skill-manifest.json');
|
|
531
|
+
if (await fs.pathExists(manifestSource)) {
|
|
532
|
+
const relativePath = path.join('.claude', 'skill-manifest.json');
|
|
533
|
+
const destination = path.join(targetDir, relativePath);
|
|
534
|
+
if ((overwriteManaged || !await fs.pathExists(destination)) && await copyFileWithRootReplacement(manifestSource, destination, true)) {
|
|
535
|
+
delivered.manifest = relativePath;
|
|
536
|
+
}
|
|
537
|
+
}
|
|
538
|
+
return delivered;
|
|
539
|
+
}
|
|
540
|
+
|
|
235
541
|
/**
|
|
236
542
|
* Codex CLI context files that live at the package ROOT (not under .codex/ or
|
|
237
543
|
* .sinapse-ai/), so the directory-copy loops never reach them. AGENTS.md is the
|
|
@@ -278,6 +584,8 @@ async function installSinapseCore(options = {}) {
|
|
|
278
584
|
targetDir = process.cwd(),
|
|
279
585
|
onProgress = null,
|
|
280
586
|
includeCodex = false,
|
|
587
|
+
includeClaude = false,
|
|
588
|
+
overwriteManagedAdapters = false,
|
|
281
589
|
} = options;
|
|
282
590
|
|
|
283
591
|
const result = {
|
|
@@ -292,6 +600,15 @@ async function installSinapseCore(options = {}) {
|
|
|
292
600
|
try {
|
|
293
601
|
const sourceDir = getSinapseCoreSourcePath();
|
|
294
602
|
const targetSinapseCore = path.join(targetDir, '.sinapse-ai');
|
|
603
|
+
const previousVersionPath = path.join(targetSinapseCore, 'version.json');
|
|
604
|
+
let previousProviderHashes = {};
|
|
605
|
+
if (await fs.pathExists(previousVersionPath)) {
|
|
606
|
+
try {
|
|
607
|
+
previousProviderHashes = (await fs.readJson(previousVersionPath)).providerFileHashes || {};
|
|
608
|
+
} catch (_error) {
|
|
609
|
+
previousProviderHashes = {};
|
|
610
|
+
}
|
|
611
|
+
}
|
|
295
612
|
|
|
296
613
|
// Check if source exists
|
|
297
614
|
if (!await fs.pathExists(sourceDir)) {
|
|
@@ -349,19 +666,45 @@ async function installSinapseCore(options = {}) {
|
|
|
349
666
|
// regenerated from squads/ + core by sync-codex-local-first.js.
|
|
350
667
|
const pkgRoot = path.dirname(sourceDir);
|
|
351
668
|
const topLevelDirs = ['squads'];
|
|
352
|
-
if (includeCodex) topLevelDirs.push(
|
|
669
|
+
if (includeCodex) topLevelDirs.push(...CODEX_TOP_LEVEL_DIRS);
|
|
670
|
+
if (includeClaude) topLevelDirs.push(...CLAUDE_SUPPORT_DIRS);
|
|
353
671
|
for (const dirName of topLevelDirs) {
|
|
354
672
|
const src = path.join(pkgRoot, dirName);
|
|
355
673
|
const dest = path.join(targetDir, dirName);
|
|
356
674
|
if (await fs.pathExists(src)) {
|
|
357
675
|
spinner.text = `Copying ${dirName}...`;
|
|
358
|
-
const
|
|
676
|
+
const preserveExisting = dirName === '.codex' || dirName === '.agents'
|
|
677
|
+
? createCodexPreservePredicate(targetDir, pkgRoot, previousProviderHashes)
|
|
678
|
+
: null;
|
|
679
|
+
const copied = await copyDirectoryWithRootReplacement(
|
|
680
|
+
src,
|
|
681
|
+
dest,
|
|
682
|
+
onProgress,
|
|
683
|
+
preserveExisting,
|
|
684
|
+
);
|
|
359
685
|
result.installedFiles.push(...copied.map((f) => path.join(dirName, f)));
|
|
360
686
|
if (dirName === '.codex') result.codexInstalledFiles = copied.length;
|
|
687
|
+
if (dirName === '.agents') result.codexNativeSkillFiles = copied.length;
|
|
361
688
|
if (dirName === 'squads') result.squadsInstalledFiles = copied.length;
|
|
362
689
|
}
|
|
363
690
|
}
|
|
364
691
|
|
|
692
|
+
if (includeClaude) {
|
|
693
|
+
result.claudeLegacyAgentCommandReconciliation = await reconcileLegacyClaudeAgentCommands(targetDir, pkgRoot);
|
|
694
|
+
const claude = await deliverClaudeNativeAdapters(pkgRoot, targetDir, { overwriteManaged: overwriteManagedAdapters });
|
|
695
|
+
result.claudeNativeAgentFiles = claude.agents.length;
|
|
696
|
+
result.claudeNativeSkillFiles = claude.skills.length;
|
|
697
|
+
result.installedFiles.push(...claude.agents, ...claude.skills);
|
|
698
|
+
if (claude.manifest) result.installedFiles.push(claude.manifest);
|
|
699
|
+
const claudeContextSource = path.join(pkgRoot, '.claude', 'CLAUDE.md');
|
|
700
|
+
const claudeContextDest = path.join(targetDir, '.claude', 'CLAUDE.md');
|
|
701
|
+
if (await fs.pathExists(claudeContextSource) && await copyFileWithRootReplacement(claudeContextSource, claudeContextDest, true)) {
|
|
702
|
+
result.installedFiles.push(path.join('.claude', 'CLAUDE.md'));
|
|
703
|
+
}
|
|
704
|
+
const claudeSettings = await reconcileClaudeHookSettings(pkgRoot, targetDir);
|
|
705
|
+
if (claudeSettings) result.installedFiles.push(claudeSettings);
|
|
706
|
+
}
|
|
707
|
+
|
|
365
708
|
// AGENTS.md is the Codex CLI's default context file (Imperator greeting +
|
|
366
709
|
// the full agent roster). It lives at the package ROOT (not under .codex/ or
|
|
367
710
|
// .sinapse-ai/), so neither loop above reaches it. Without it, a Codex user's
|
|
@@ -374,6 +717,7 @@ async function installSinapseCore(options = {}) {
|
|
|
374
717
|
result.installedFiles.push('AGENTS.md');
|
|
375
718
|
result.agentsMdInstalled = true;
|
|
376
719
|
}
|
|
720
|
+
result.codexLegacySkillReconciliation = await reconcileLegacyCodexSkills(targetDir, pkgRoot);
|
|
377
721
|
}
|
|
378
722
|
|
|
379
723
|
// Create install manifest
|
|
@@ -399,6 +743,10 @@ async function installSinapseCore(options = {}) {
|
|
|
399
743
|
version: packageVersion,
|
|
400
744
|
installedFiles: result.installedFiles,
|
|
401
745
|
mode: 'project-development',
|
|
746
|
+
providers: [includeClaude && 'claude-code', includeCodex && 'codex'].filter(Boolean),
|
|
747
|
+
targetDir,
|
|
748
|
+
providerFiles: includeCodex ? getManagedCodexSkillPaths(pkgRoot) : [],
|
|
749
|
+
providerSourceRoot: pkgRoot,
|
|
402
750
|
});
|
|
403
751
|
result.versionInfo = versionInfo;
|
|
404
752
|
|
|
@@ -520,10 +868,19 @@ module.exports = {
|
|
|
520
868
|
copyFileWithRootReplacement,
|
|
521
869
|
copyDirectoryWithRootReplacement,
|
|
522
870
|
isUserOwnedL3,
|
|
871
|
+
createCodexPreservePredicate,
|
|
872
|
+
getManagedCodexSkillPaths,
|
|
873
|
+
reconcileLegacyCodexSkills,
|
|
874
|
+
reconcileLegacyClaudeAgentCommands,
|
|
523
875
|
generateVersionJson,
|
|
524
876
|
generateFileHashes,
|
|
525
877
|
deliverCodexRootFiles,
|
|
878
|
+
deliverClaudeNativeAdapters,
|
|
879
|
+
getClaudeHookName,
|
|
880
|
+
reconcileClaudeHookSettings,
|
|
526
881
|
FOLDERS_TO_COPY,
|
|
527
882
|
ROOT_FILES_TO_COPY,
|
|
528
883
|
CODEX_ROOT_FILES,
|
|
884
|
+
CODEX_TOP_LEVEL_DIRS,
|
|
885
|
+
CLAUDE_SUPPORT_DIRS,
|
|
529
886
|
};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"algorithm": "sha256",
|
|
4
|
+
"files": {
|
|
5
|
+
"analyst.md": ["795b9209e7bc5bd31a736bb67ee5c0eeb1a95590afd47fb630c81de0dd87c126"],
|
|
6
|
+
"animations-orqx.md": ["f3cce5c6d75a6a872171593dba8bafeae657488950fad63c89f17e7e193e92e0"],
|
|
7
|
+
"architect.md": ["d2e8a9b7b4c7582870f08561f482fa6c51a0b347fdcc066bd88bda5575a2052f"],
|
|
8
|
+
"brand-orqx.md": ["a4afdbd9dc8fd118939be2e07377967a86748310b89c7f59b14818d84fbb10ad"],
|
|
9
|
+
"cloning-orqx.md": ["134d10224635b9898469d7bb3992f636ecdba375272e3ad1c24eb0215c1a85c0"],
|
|
10
|
+
"commercial-orqx.md": ["170288942d7c85c28fece5eef0256101eee0699a76a8f28b3e7ec5878d2f0b79"],
|
|
11
|
+
"content-orqx.md": ["f93bf397c8da352d10b884600ae339979a0c6c5190fb3b21daa1de6d3e7a2e45"],
|
|
12
|
+
"copy-orqx.md": ["86f70db676af7475d13face6468da78ee05e5c257b506fe484b62c0d1ca9439c"],
|
|
13
|
+
"council-orqx.md": ["d2ab7fcd71e71677d6fd15ae1565c35fb241e4b9558e79da0e030fc70a81efe4"],
|
|
14
|
+
"courses-orqx.md": ["236e69533c0155a42dfc762f563455244b71f127ae6459b70ffabad8ba081654"],
|
|
15
|
+
"cyber-orqx.md": ["8efff68f6e1441df8719b3d743dc27f9e6d0ce6d9f6e7128284a144d5c74ac63"],
|
|
16
|
+
"data-engineer.md": ["9c9faba56ad0bb8816e76117e0392e0727d8f4aba46413fa053c97d5aaf086bf"],
|
|
17
|
+
"design-orqx.md": ["e3b10fb943a64916826a11d13e0e57f61cc5e27e8966ea15924cae4e055aad64"],
|
|
18
|
+
"developer.md": ["b996b501f752b4f049367182d0c2c5a99019fddeab343c840a7da2f8ca1d70a4"],
|
|
19
|
+
"devops.md": ["18354e8a0e8b39786d48a5d9f8a7e532698e6fe49a65f3243be6a96eb6c73c42"],
|
|
20
|
+
"finance-orqx.md": ["f4ebeb70b7a0890c491608a00feedd31b9b4a9b872ed02d489b39a99fa01c537"],
|
|
21
|
+
"growth-orqx.md": ["b0f74d98f40fe384c81a22ab705007e4e40ab9f82bc6c23d2282a05aed17cbdf"],
|
|
22
|
+
"paidmedia-orqx.md": ["b68b91bc647fa6290c9109d621d98f6567b28967acb9e474cbf399442711c530"],
|
|
23
|
+
"product-lead.md": ["a62d2f6079b7deabe22d24cd66943375e82fbe9ea389e23bf9a7a9ea2fa55e08"],
|
|
24
|
+
"product-orqx.md": ["5df3d89096efdc1cabdcfaaf82b14571689d258a495981520ae0a0ea8fa04a92"],
|
|
25
|
+
"project-lead.md": ["0dd16d04f28c7614c025dadb557aa4b3eeb56c96fda8874afec40b8044db6e2b"],
|
|
26
|
+
"quality-gate.md": ["ed735180b28c51df2803933009f9b9bc6f5f497ac2b528919a4eed83e0ba1682"],
|
|
27
|
+
"research-orqx.md": ["9cf3c189b670ee4565329abec1a2c7d208a3013a9dba695208cbe617b4b0984b"],
|
|
28
|
+
"sinapse-orqx.md": ["36e704406c594a72cbf72eac52bb9ce22a636965a8c86a45c6560e4cc4fb67d6"],
|
|
29
|
+
"snps-orqx.md": ["0452d5291fd27239c0e6f79064d214c9755234e444daabbcea7cdd5e0f5a544d"],
|
|
30
|
+
"sprint-lead.md": ["3abfcccefb0e15765549cc54fabb8e398de135532c76f9ef8b16a57220dcac69"],
|
|
31
|
+
"squad-creator.md": ["1a92aeabebee66782dd906a75844451d3cb0fc0af59f7df266ab4106026ef657"],
|
|
32
|
+
"storytelling-orqx.md": ["45889421752caaecaff3ccc92d22e333235d675f65710f435b3b7224bbc0e022"],
|
|
33
|
+
"swarm-orqx.md": ["9eb519069dc7b9a10fd2ca677f4dfbed9ad3f966d0d65b2a73daf67b000b81c0"],
|
|
34
|
+
"ux-design-expert.md": ["f26f6935b95bd3c5d051a0b0a70394571f47fb1992e26ad17b25033b04f81048"]
|
|
35
|
+
}
|
|
36
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"algorithm": "sha256",
|
|
4
|
+
"files": {
|
|
5
|
+
".agents/skills/sinapse-agent/SKILL.md": ["122ddfefe2fc23579c54513953f2f8cb7e872708c3c2078aac1a72a5e8a55959"],
|
|
6
|
+
".agents/skills/sinapse-analyst/SKILL.md": ["3ff8b42481e23e847ebac3c255ff4437b984c715046e16fb61d0605fa1a5b677"],
|
|
7
|
+
".agents/skills/sinapse-animations/SKILL.md": ["78666bb951ea083f1df13d9960ed7cecaef304024cea4392b2fc3022251fdab5"],
|
|
8
|
+
".agents/skills/sinapse-architect/SKILL.md": ["05bbbaf7d493918cf4856feddd611b8f2e1f88924e7bba0f6ab9ce83ab7b6718"],
|
|
9
|
+
".agents/skills/sinapse-brand/SKILL.md": ["bfbdebaa0e3c9e2668025af01df88841646ea450e4b1e6cb5008ca02258206db"],
|
|
10
|
+
".agents/skills/sinapse-claude/SKILL.md": ["85f25d07838fa259cf48338ab526eeb6391c47ddbf10dba44aa6cc35421a90bf"],
|
|
11
|
+
".agents/skills/sinapse-cloning/SKILL.md": ["b9e6d9e6c87cb79f261c46b6f6e83fc1d10506bcb920ece4012b07020334dc2a"],
|
|
12
|
+
".agents/skills/sinapse-commercial/SKILL.md": ["b26cb18661293ffee078bd555677b7fa201718f1cdedf859dd358ae33b901e1e"],
|
|
13
|
+
".agents/skills/sinapse-content/SKILL.md": ["61f4cbb9b9a5de4dde5fbf7b3027898be20fb127a287b19d5955e34a832b3ba3"],
|
|
14
|
+
".agents/skills/sinapse-copy/SKILL.md": ["dddf3da31fe8807eb60450ad0dcdd73288ba32470b142d4d1c994277282dd1a2"],
|
|
15
|
+
".agents/skills/sinapse-council/SKILL.md": ["6692021c2578524513a5462b7271aa7eda7335961cea5d9d015f7b75f3dfd2a1"],
|
|
16
|
+
".agents/skills/sinapse-courses/SKILL.md": ["653a21c66dd78904b53b8924601778f1682db8b879ab5d50320d06452236687d"],
|
|
17
|
+
".agents/skills/sinapse-cyber/SKILL.md": ["55c12f9a6f35970b3bf0d6d6ab8208b6348a9390040df1d8d01df108a369b429"],
|
|
18
|
+
".agents/skills/sinapse-data-engineer/SKILL.md": ["5c8e31f9cba46f89fffbb5c83fe831725d951f75275b085b51ea48beab0291fa"],
|
|
19
|
+
".agents/skills/sinapse-design/SKILL.md": ["3c35efa3e905d636352f5f046d494665ebf9e33f4c896fddcfa112103877a00d"],
|
|
20
|
+
".agents/skills/sinapse-dev/SKILL.md": ["a2ff86c33e61efb1085e9388c8f1f6a58389b9dc8b74ecbe83c096b920f114db"],
|
|
21
|
+
".agents/skills/sinapse-devops/SKILL.md": ["9cf5ef12999568e292f4e5d302bd61831872a783d6ed9caaca7a1ac247c63c01"],
|
|
22
|
+
".agents/skills/sinapse-finance/SKILL.md": ["4b596578bbb950e8513eb96ea62200880c9184989bdfc91c7ecd1370f47b07ab"],
|
|
23
|
+
".agents/skills/sinapse-growth/SKILL.md": ["53d32adb439098528925425d4ff86458e8fb2efb3c8fd6b62e8c42de4f06873c"],
|
|
24
|
+
".agents/skills/sinapse-loop/SKILL.md": ["e5a33f9235c66e554e67d7668ac5e3255e1b6f9ed026f7bf3be666c169bf396a"],
|
|
25
|
+
".agents/skills/sinapse-orqx/SKILL.md": ["b522b867768f4f6cf9151978734611b1482ec6f35cbe8552e9e324c4bb16de50"],
|
|
26
|
+
".agents/skills/sinapse-paidmedia/SKILL.md": ["81ae19dae135dcd001703446131989ac51da1a299d8fab59ddc21596b1d462e2"],
|
|
27
|
+
".agents/skills/sinapse-pm/SKILL.md": ["ecf406f3a94c48defff97c9ef55410cdf82cfa445b3d1244df0c6dd66543b910"],
|
|
28
|
+
".agents/skills/sinapse-po/SKILL.md": ["56693d11a13cf51eb600883d26f232adfb6c0275015a1dfa0fd467387700667f"],
|
|
29
|
+
".agents/skills/sinapse-product/SKILL.md": ["50bae9a40dca95287b864a873fe578953b5f361239a3e6c2b70ae2cd38197eb7"],
|
|
30
|
+
".agents/skills/sinapse-qa/SKILL.md": ["54ac75619ae2cd28fa820e224abc5fc82163198652ce200d0706aa0734e98509"],
|
|
31
|
+
".agents/skills/sinapse-research/SKILL.md": ["ac98bc465c1c975d95d93ffc6a665c41ab679e1885882ab7a91c86501a34d181"],
|
|
32
|
+
".agents/skills/sinapse-sm/SKILL.md": ["408556e7cff08d5b84c724e55a3d35e7624e155984edfe697c7a9fe61e60a72f"],
|
|
33
|
+
".agents/skills/sinapse-spec-driven/SKILL.md": ["5216b2f651f88263323a07cabec78259036bb4ec23689d312c770cef216b26a1"],
|
|
34
|
+
".agents/skills/sinapse-squad-creator/SKILL.md": ["779a93754fb121d8f405667f2d3852faeb8945302129aec74c0d1f6b51f62ed3"],
|
|
35
|
+
".agents/skills/sinapse-storytelling/SKILL.md": ["65e2d8719eee6d0221bcfe758144c24575cf00c0aa988b785f98c69fc4982025"],
|
|
36
|
+
".agents/skills/sinapse-swarm/SKILL.md": ["8c98e9b1da2cb279ef7fa10ca4e81cb0a230ecdbfda4f890b0b94f1604626f00"],
|
|
37
|
+
".agents/skills/sinapse-ux-design-expert/SKILL.md": ["5a1c747c030113b50d98a431bfffc4418e38355cae72f7e5a088ee5bee8bc530"],
|
|
38
|
+
".agents/skills/sinapse/SKILL.md": ["fe017c091d1308eb937762ffe25f83518f778a266303cc3f028d0f468df0747f"],
|
|
39
|
+
".agents/skills/snps-orqx/SKILL.md": ["24f66470a5721fc086a52eca9907958d091d68c2de0a0b56a42e07e83fe00342"],
|
|
40
|
+
".agents/skills/snps/SKILL.md": ["9f9a0972a184a07234948f4e5dd8f7032835be3283608a00c8cbf8bbf68064a3"]
|
|
41
|
+
}
|
|
42
|
+
}
|
|
@@ -20,10 +20,29 @@ const fs = require('fs-extra');
|
|
|
20
20
|
const path = require('path');
|
|
21
21
|
const os = require('os');
|
|
22
22
|
const https = require('https');
|
|
23
|
-
const {
|
|
23
|
+
const { execFileSync } = require('child_process');
|
|
24
24
|
const { hashFile, hashesMatch } = require('../installer/file-hasher');
|
|
25
25
|
const { PostInstallValidator, formatReport: formatValidationReport } = require('../installer/post-install-validator');
|
|
26
26
|
const { _testing: { installGlobalAgents } } = require('../wizard/index');
|
|
27
|
+
const { installSinapseCore } = require('../installer/sinapse-ai-installer');
|
|
28
|
+
|
|
29
|
+
function detectInstalledProviders(projectRoot, recordedProviders = []) {
|
|
30
|
+
if (recordedProviders.length > 0) {
|
|
31
|
+
return {
|
|
32
|
+
includeClaude: recordedProviders.includes('claude-code'),
|
|
33
|
+
includeCodex: recordedProviders.includes('codex'),
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
const includeClaude = fs.existsSync(path.join(projectRoot, '.claude', 'skill-manifest.json'));
|
|
37
|
+
const hasCodexCatalog = fs.existsSync(path.join(projectRoot, '.codex', 'catalog.json'));
|
|
38
|
+
const hasNativeActivator = fs.existsSync(
|
|
39
|
+
path.join(projectRoot, '.agents', 'skills', 'sinapse-agent', 'SKILL.md'),
|
|
40
|
+
);
|
|
41
|
+
const hasLegacyActivator = fs.existsSync(
|
|
42
|
+
path.join(projectRoot, '.codex', 'skills', 'sinapse-agent', 'SKILL.md'),
|
|
43
|
+
);
|
|
44
|
+
return { includeClaude, includeCodex: hasCodexCatalog && (hasNativeActivator || hasLegacyActivator) };
|
|
45
|
+
}
|
|
27
46
|
|
|
28
47
|
/**
|
|
29
48
|
* Update status types
|
|
@@ -601,20 +620,33 @@ class SINAPSEUpdater {
|
|
|
601
620
|
|
|
602
621
|
try {
|
|
603
622
|
// Use npm to update the package
|
|
604
|
-
const
|
|
605
|
-
this.log(`Running: ${
|
|
623
|
+
const packageSpec = `sinapse-ai@${targetVersion}`;
|
|
624
|
+
this.log(`Running: npm install ${packageSpec} --save-exact`);
|
|
606
625
|
|
|
607
|
-
|
|
626
|
+
execFileSync(process.platform === 'win32' ? 'npm.cmd' : 'npm', ['install', packageSpec, '--save-exact'], {
|
|
608
627
|
cwd: this.projectRoot,
|
|
609
628
|
stdio: this.options.verbose ? 'inherit' : 'pipe',
|
|
610
629
|
timeout: 120000, // 2 minutes
|
|
611
630
|
});
|
|
612
631
|
|
|
613
|
-
|
|
614
|
-
|
|
632
|
+
const recordedProviders = Array.isArray(this.versionInfo?.providers)
|
|
633
|
+
? this.versionInfo.providers
|
|
634
|
+
: [];
|
|
635
|
+
const { includeClaude, includeCodex } = detectInstalledProviders(
|
|
636
|
+
this.projectRoot,
|
|
637
|
+
recordedProviders,
|
|
638
|
+
);
|
|
639
|
+
const delivery = await installSinapseCore({
|
|
640
|
+
targetDir: this.projectRoot,
|
|
641
|
+
includeClaude,
|
|
642
|
+
includeCodex,
|
|
643
|
+
overwriteManagedAdapters: true,
|
|
644
|
+
});
|
|
645
|
+
if (!delivery.success) throw new Error(`Framework payload reconciliation failed: ${delivery.errors.join('; ')}`);
|
|
615
646
|
|
|
616
|
-
|
|
617
|
-
|
|
647
|
+
result.success = true;
|
|
648
|
+
result.filesUpdated = 1 + delivery.installedFiles.length;
|
|
649
|
+
result.codexLegacySkillReconciliation = delivery.codexLegacySkillReconciliation || null;
|
|
618
650
|
|
|
619
651
|
return result;
|
|
620
652
|
} catch (error) {
|
|
@@ -637,6 +669,7 @@ class SINAPSEUpdater {
|
|
|
637
669
|
installedAt: new Date().toISOString(),
|
|
638
670
|
updatedAt: new Date().toISOString(),
|
|
639
671
|
mode: this.versionInfo?.mode || 'project-development',
|
|
672
|
+
providers: Array.isArray(this.versionInfo?.providers) ? this.versionInfo.providers : [],
|
|
640
673
|
fileHashes: {}, // Will be populated by file copy
|
|
641
674
|
};
|
|
642
675
|
|
|
@@ -764,14 +797,14 @@ class SINAPSEUpdater {
|
|
|
764
797
|
const installResult = await installGlobalAgents();
|
|
765
798
|
result.installed = installResult.count;
|
|
766
799
|
if (installResult.errors.length > 0) {
|
|
767
|
-
console.log(` Agent install warnings: ${installResult.errors.join(', ')}`);
|
|
800
|
+
console.log(` Agent install warnings: ${sanitizeLogText(installResult.errors.join(', '))}`);
|
|
768
801
|
}
|
|
769
802
|
|
|
770
803
|
result.migrated = true;
|
|
771
804
|
console.log(` v6 migration complete: ${result.removed} removed, ${result.installed} installed`);
|
|
772
805
|
} catch (error) {
|
|
773
806
|
// Migration errors should not block the update
|
|
774
|
-
console.log(` v6 migration warning: ${error.message}`);
|
|
807
|
+
console.log(` v6 migration warning: ${sanitizeLogText(error.message)}`);
|
|
775
808
|
}
|
|
776
809
|
|
|
777
810
|
return result;
|
|
@@ -788,13 +821,17 @@ class SINAPSEUpdater {
|
|
|
788
821
|
*/
|
|
789
822
|
log(message) {
|
|
790
823
|
if (this.options.verbose) {
|
|
791
|
-
|
|
792
|
-
const sanitized = String(message).replace(/[\x00-\x08\x0B-\x1F\x7F]/g, '');
|
|
824
|
+
const sanitized = sanitizeLogText(message);
|
|
793
825
|
console.log(`[SINAPSEUpdater] ${sanitized}`);
|
|
794
826
|
}
|
|
795
827
|
}
|
|
796
828
|
}
|
|
797
829
|
|
|
830
|
+
function sanitizeLogText(value) {
|
|
831
|
+
// eslint-disable-next-line no-control-regex
|
|
832
|
+
return String(value).replace(/[\x00-\x1F\x7F\u2028\u2029]/g, ' ');
|
|
833
|
+
}
|
|
834
|
+
|
|
798
835
|
/**
|
|
799
836
|
* Format update check result for console
|
|
800
837
|
*
|
|
@@ -920,5 +957,6 @@ module.exports = {
|
|
|
920
957
|
FileAction,
|
|
921
958
|
formatCheckResult,
|
|
922
959
|
formatUpdateResult,
|
|
960
|
+
sanitizeLogText,
|
|
961
|
+
detectInstalledProviders,
|
|
923
962
|
};
|
|
924
|
-
|
|
@@ -22,7 +22,7 @@ const { t } = require('./i18n');
|
|
|
22
22
|
* Do NOT inline these numbers elsewhere in this file — reference `ECOSYSTEM`
|
|
23
23
|
* so there is exactly one place to update when `sync:counts` changes.
|
|
24
24
|
*/
|
|
25
|
-
const ECOSYSTEM = Object.freeze({ squads: 17, agents: 172, tasks: '1,
|
|
25
|
+
const ECOSYSTEM = Object.freeze({ squads: 17, agents: 172, tasks: '1,411' });
|
|
26
26
|
|
|
27
27
|
/**
|
|
28
28
|
* Create and start a spinner with SINAPSE styling
|