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.
Files changed (526) hide show
  1. package/.agents/skills/react-bits-frontend/SKILL.md +66 -0
  2. package/.agents/skills/react-bits-frontend/agents/openai.yaml +4 -0
  3. package/.agents/skills/react-bits-frontend/references/corpus-map.md +29 -0
  4. package/.agents/skills/sinapse/SKILL.md +10 -0
  5. package/.agents/skills/sinapse-agent/SKILL.md +22 -0
  6. package/{.codex → .agents}/skills/sinapse-claude/SKILL.md +1 -1
  7. package/.agents/skills/sinapse-loop/SKILL.md +35 -0
  8. package/.agents/skills/sinapse-orqx/SKILL.md +44 -0
  9. package/.agents/skills/sinapse-spec-driven/SKILL.md +35 -0
  10. package/.agents/skills/snps/SKILL.md +10 -0
  11. package/.agents/skills/snps-orqx/SKILL.md +10 -0
  12. package/.claude/agents/README.md +67 -0
  13. package/.claude/agents/sinapse-ad-copywriter.md +14 -0
  14. package/.claude/agents/sinapse-agent-forger.md +14 -0
  15. package/.claude/agents/sinapse-analyst.md +14 -0
  16. package/.claude/agents/sinapse-animation-interpreter.md +14 -0
  17. package/.claude/agents/sinapse-animation-performance-engineer.md +14 -0
  18. package/.claude/agents/sinapse-animations-orqx.md +14 -0
  19. package/.claude/agents/sinapse-architect.md +14 -0
  20. package/.claude/agents/sinapse-assessment-creator.md +14 -0
  21. package/.claude/agents/sinapse-audience-intelligence.md +14 -0
  22. package/.claude/agents/sinapse-blake-snyder.md +14 -0
  23. package/.claude/agents/sinapse-brand-archetype-strategist.md +14 -0
  24. package/.claude/agents/sinapse-brand-auditor.md +14 -0
  25. package/.claude/agents/sinapse-brand-collateral-designer.md +14 -0
  26. package/.claude/agents/sinapse-brand-compiler.md +14 -0
  27. package/.claude/agents/sinapse-brand-creative-engineer.md +14 -0
  28. package/.claude/agents/sinapse-brand-culture-architect.md +14 -0
  29. package/.claude/agents/sinapse-brand-growth-strategist.md +14 -0
  30. package/.claude/agents/sinapse-brand-identity-designer.md +14 -0
  31. package/.claude/agents/sinapse-brand-motion-vfx.md +14 -0
  32. package/.claude/agents/sinapse-brand-naming-specialist.md +14 -0
  33. package/.claude/agents/sinapse-brand-orqx.md +14 -0
  34. package/.claude/agents/sinapse-brand-positioning-strategist.md +14 -0
  35. package/.claude/agents/sinapse-brand-sonic-designer.md +14 -0
  36. package/.claude/agents/sinapse-brand-strategist.md +14 -0
  37. package/.claude/agents/sinapse-brand-system-architect.md +14 -0
  38. package/.claude/agents/sinapse-brand-voice-writer.md +14 -0
  39. package/.claude/agents/sinapse-brene-brown.md +14 -0
  40. package/.claude/agents/sinapse-budget-controller.md +14 -0
  41. package/.claude/agents/sinapse-campaign-analyst.md +14 -0
  42. package/.claude/agents/sinapse-charlie-munger.md +14 -0
  43. package/.claude/agents/sinapse-claude-mastery-chief.md +14 -0
  44. package/.claude/agents/sinapse-cloning-orqx.md +14 -0
  45. package/.claude/agents/sinapse-cloud-security-engineer.md +14 -0
  46. package/.claude/agents/sinapse-cognitive-extractor.md +14 -0
  47. package/.claude/agents/sinapse-commercial-orqx.md +14 -0
  48. package/.claude/agents/sinapse-competitive-intelligence.md +14 -0
  49. package/.claude/agents/sinapse-compliance-officer.md +14 -0
  50. package/.claude/agents/sinapse-config-engineer.md +14 -0
  51. package/.claude/agents/sinapse-content-analyst.md +14 -0
  52. package/.claude/agents/sinapse-content-capturer.md +14 -0
  53. package/.claude/agents/sinapse-content-engineer.md +14 -0
  54. package/.claude/agents/sinapse-content-governor.md +14 -0
  55. package/.claude/agents/sinapse-content-orqx.md +14 -0
  56. package/.claude/agents/sinapse-content-writer.md +14 -0
  57. package/.claude/agents/sinapse-conversion-writer.md +14 -0
  58. package/.claude/agents/sinapse-copy-editor.md +14 -0
  59. package/.claude/agents/sinapse-copy-orqx.md +14 -0
  60. package/.claude/agents/sinapse-copy-strategist.md +14 -0
  61. package/.claude/agents/sinapse-cost-optimizer.md +14 -0
  62. package/.claude/agents/sinapse-council-orqx.md +14 -0
  63. package/.claude/agents/sinapse-courses-orqx.md +14 -0
  64. package/.claude/agents/sinapse-creative-strategist.md +14 -0
  65. package/.claude/agents/sinapse-cro-persuasion.md +14 -0
  66. package/.claude/agents/sinapse-cro-specialist.md +14 -0
  67. package/.claude/agents/sinapse-cs-business-auditor.md +14 -0
  68. package/.claude/agents/sinapse-cs-client-success.md +14 -0
  69. package/.claude/agents/sinapse-cs-crm-specialist.md +14 -0
  70. package/.claude/agents/sinapse-cs-funnel-architect.md +14 -0
  71. package/.claude/agents/sinapse-cs-lead-generation-strategist.md +14 -0
  72. package/.claude/agents/sinapse-cs-offer-designer.md +14 -0
  73. package/.claude/agents/sinapse-cs-revops-analyst.md +14 -0
  74. package/.claude/agents/sinapse-cs-sales-closer.md +14 -0
  75. package/.claude/agents/sinapse-cs-sales-enablement.md +14 -0
  76. package/.claude/agents/sinapse-css-motion-artist.md +14 -0
  77. package/.claude/agents/sinapse-curriculum-designer.md +14 -0
  78. package/.claude/agents/sinapse-cyber-orqx.md +14 -0
  79. package/.claude/agents/sinapse-dan-harmon.md +14 -0
  80. package/.claude/agents/sinapse-data-engineer.md +14 -0
  81. package/.claude/agents/sinapse-data-synthesizer.md +14 -0
  82. package/.claude/agents/sinapse-deep-researcher.md +14 -0
  83. package/.claude/agents/sinapse-derek-sivers.md +14 -0
  84. package/.claude/agents/sinapse-design-orqx.md +14 -0
  85. package/.claude/agents/sinapse-design-system.md +14 -0
  86. package/.claude/agents/sinapse-developer.md +14 -0
  87. package/.claude/agents/sinapse-devops.md +14 -0
  88. package/.claude/agents/sinapse-direct-response-writer.md +14 -0
  89. package/.claude/agents/sinapse-dx-accessibility-specialist.md +14 -0
  90. package/.claude/agents/sinapse-dx-design-system-architect.md +14 -0
  91. package/.claude/agents/sinapse-dx-frontend-engineer.md +14 -0
  92. package/.claude/agents/sinapse-dx-interaction-designer.md +14 -0
  93. package/.claude/agents/sinapse-dx-performance-engineer.md +14 -0
  94. package/.claude/agents/sinapse-dx-ui-designer.md +14 -0
  95. package/.claude/agents/sinapse-dx-ux-strategist.md +14 -0
  96. package/.claude/agents/sinapse-editorial-strategist.md +14 -0
  97. package/.claude/agents/sinapse-email-sequence-strategist.md +14 -0
  98. package/.claude/agents/sinapse-finance-orqx.md +14 -0
  99. package/.claude/agents/sinapse-fiscal-compliance-br.md +14 -0
  100. package/.claude/agents/sinapse-forecast-strategist.md +14 -0
  101. package/.claude/agents/sinapse-funnel-copywriter.md +14 -0
  102. package/.claude/agents/sinapse-ga-analytics-engineer.md +14 -0
  103. package/.claude/agents/sinapse-ga-campaign-analyst.md +14 -0
  104. package/.claude/agents/sinapse-ga-cro-specialist.md +14 -0
  105. package/.claude/agents/sinapse-ga-data-analyst.md +14 -0
  106. package/.claude/agents/sinapse-ga-growth-hacker.md +14 -0
  107. package/.claude/agents/sinapse-ga-seo-strategist.md +14 -0
  108. package/.claude/agents/sinapse-generative-particle-engineer.md +14 -0
  109. package/.claude/agents/sinapse-google-ads-specialist.md +14 -0
  110. package/.claude/agents/sinapse-growth-orqx.md +14 -0
  111. package/.claude/agents/sinapse-headline-specialist.md +14 -0
  112. package/.claude/agents/sinapse-hooks-architect.md +14 -0
  113. package/.claude/agents/sinapse-incident-responder.md +14 -0
  114. package/.claude/agents/sinapse-joseph-campbell.md +14 -0
  115. package/.claude/agents/sinapse-kb-architect.md +14 -0
  116. package/.claude/agents/sinapse-keith-johnstone.md +14 -0
  117. package/.claude/agents/sinapse-kindra-hall.md +14 -0
  118. package/.claude/agents/sinapse-launch-strategist.md +14 -0
  119. package/.claude/agents/sinapse-lesson-architect.md +14 -0
  120. package/.claude/agents/sinapse-long-form-writer.md +14 -0
  121. package/.claude/agents/sinapse-market-analyst.md +14 -0
  122. package/.claude/agents/sinapse-marshall-ganz.md +14 -0
  123. package/.claude/agents/sinapse-mcp-integrator.md +14 -0
  124. package/.claude/agents/sinapse-meta-ads-specialist.md +14 -0
  125. package/.claude/agents/sinapse-mind-synthesizer.md +14 -0
  126. package/.claude/agents/sinapse-motion-choreographer.md +14 -0
  127. package/.claude/agents/sinapse-nancy-duarte.md +14 -0
  128. package/.claude/agents/sinapse-naval-ravikant.md +14 -0
  129. package/.claude/agents/sinapse-network-security-engineer.md +14 -0
  130. package/.claude/agents/sinapse-oren-klaff.md +14 -0
  131. package/.claude/agents/sinapse-paidmedia-orqx.md +14 -0
  132. package/.claude/agents/sinapse-park-howell.md +14 -0
  133. package/.claude/agents/sinapse-patrick-lencioni.md +14 -0
  134. package/.claude/agents/sinapse-penetration-tester.md +14 -0
  135. package/.claude/agents/sinapse-performance-engineer.md +14 -0
  136. package/.claude/agents/sinapse-persuasion-psychologist.md +14 -0
  137. package/.claude/agents/sinapse-peter-thiel.md +14 -0
  138. package/.claude/agents/sinapse-platform-aesthetic-director.md +14 -0
  139. package/.claude/agents/sinapse-platform-specialist.md +14 -0
  140. package/.claude/agents/sinapse-pm-creative-performance-analyst.md +14 -0
  141. package/.claude/agents/sinapse-pm-youtube-ads-specialist.md +14 -0
  142. package/.claude/agents/sinapse-premium-packaging-strategist.md +14 -0
  143. package/.claude/agents/sinapse-pricing-strategist.md +14 -0
  144. package/.claude/agents/sinapse-product-lead.md +14 -0
  145. package/.claude/agents/sinapse-product-orqx.md +14 -0
  146. package/.claude/agents/sinapse-product-surface-director.md +14 -0
  147. package/.claude/agents/sinapse-production-director.md +14 -0
  148. package/.claude/agents/sinapse-profitability-analyst.md +14 -0
  149. package/.claude/agents/sinapse-project-integrator.md +14 -0
  150. package/.claude/agents/sinapse-project-lead.md +14 -0
  151. package/.claude/agents/sinapse-proof-architect.md +14 -0
  152. package/.claude/agents/sinapse-ps-client-product-manager.md +14 -0
  153. package/.claude/agents/sinapse-ps-delivery-manager.md +14 -0
  154. package/.claude/agents/sinapse-ps-discovery-lead.md +14 -0
  155. package/.claude/agents/sinapse-ps-product-analyst.md +14 -0
  156. package/.claude/agents/sinapse-ps-product-ops-specialist.md +14 -0
  157. package/.claude/agents/sinapse-ps-product-strategist.md +14 -0
  158. package/.claude/agents/sinapse-quality-gate.md +14 -0
  159. package/.claude/agents/sinapse-ray-dalio.md +14 -0
  160. package/.claude/agents/sinapse-reid-hoffman.md +14 -0
  161. package/.claude/agents/sinapse-research-orqx.md +14 -0
  162. package/.claude/agents/sinapse-revenue-analyst.md +14 -0
  163. package/.claude/agents/sinapse-roadmap-sentinel.md +14 -0
  164. package/.claude/agents/sinapse-scroll-narrative-engineer.md +14 -0
  165. package/.claude/agents/sinapse-shader-artist.md +14 -0
  166. package/.claude/agents/sinapse-signal-intelligence.md +14 -0
  167. package/.claude/agents/sinapse-simon-sinek.md +14 -0
  168. package/.claude/agents/sinapse-skill-craftsman.md +14 -0
  169. package/.claude/agents/sinapse-slide-designer.md +14 -0
  170. package/.claude/agents/sinapse-snps-orqx.md +14 -0
  171. package/.claude/agents/sinapse-soc-analyst.md +14 -0
  172. package/.claude/agents/sinapse-sop-extractor.md +14 -0
  173. package/.claude/agents/sinapse-source-hunter.md +14 -0
  174. package/.claude/agents/sinapse-sprint-lead.md +14 -0
  175. package/.claude/agents/sinapse-squad-assembler.md +14 -0
  176. package/.claude/agents/sinapse-squad-creator.md +14 -0
  177. package/.claude/agents/sinapse-storytelling-orqx.md +14 -0
  178. package/.claude/agents/sinapse-swarm-orqx.md +14 -0
  179. package/.claude/agents/sinapse-threat-analyst.md +14 -0
  180. package/.claude/agents/sinapse-threejs-architect.md +14 -0
  181. package/.claude/agents/sinapse-trend-forecaster.md +14 -0
  182. package/.claude/agents/sinapse-ux-design-expert.md +14 -0
  183. package/.claude/agents/sinapse-ux-designer.md +14 -0
  184. package/.claude/agents/sinapse-yvon-chouinard.md +14 -0
  185. package/.claude/rules/software-engineering-applicability.md +13 -0
  186. package/.claude/settings.json +170 -0
  187. package/.claude/skill-manifest.json +41 -0
  188. package/.claude/skills/api-review.md +50 -0
  189. package/.claude/skills/component-check.md +47 -0
  190. package/.claude/skills/db-review.md +41 -0
  191. package/.claude/skills/sinapse/SKILL.md +11 -0
  192. package/.claude/skills/sinapse-agent/SKILL.md +11 -0
  193. package/.claude/skills/sinapse-analyst/SKILL.md +11 -0
  194. package/.claude/skills/sinapse-animations/SKILL.md +11 -0
  195. package/.claude/skills/sinapse-architect/SKILL.md +11 -0
  196. package/.claude/skills/sinapse-brand/SKILL.md +11 -0
  197. package/.claude/skills/sinapse-claude/SKILL.md +11 -0
  198. package/.claude/skills/sinapse-cloning/SKILL.md +11 -0
  199. package/.claude/skills/sinapse-commercial/SKILL.md +11 -0
  200. package/.claude/skills/sinapse-content/SKILL.md +11 -0
  201. package/.claude/skills/sinapse-copy/SKILL.md +11 -0
  202. package/.claude/skills/sinapse-council/SKILL.md +11 -0
  203. package/.claude/skills/sinapse-courses/SKILL.md +11 -0
  204. package/.claude/skills/sinapse-cyber/SKILL.md +11 -0
  205. package/.claude/skills/sinapse-data-engineer/SKILL.md +11 -0
  206. package/.claude/skills/sinapse-design/SKILL.md +11 -0
  207. package/.claude/skills/sinapse-dev/SKILL.md +11 -0
  208. package/.claude/skills/sinapse-devops/SKILL.md +11 -0
  209. package/.claude/skills/sinapse-finance/SKILL.md +11 -0
  210. package/.claude/skills/sinapse-growth/SKILL.md +11 -0
  211. package/.claude/skills/sinapse-loop/SKILL.md +11 -0
  212. package/.claude/skills/sinapse-orqx/SKILL.md +11 -0
  213. package/.claude/skills/sinapse-paidmedia/SKILL.md +11 -0
  214. package/.claude/skills/sinapse-pm/SKILL.md +11 -0
  215. package/.claude/skills/sinapse-po/SKILL.md +11 -0
  216. package/.claude/skills/sinapse-product/SKILL.md +11 -0
  217. package/.claude/skills/sinapse-qa/SKILL.md +11 -0
  218. package/.claude/skills/sinapse-research/SKILL.md +11 -0
  219. package/.claude/skills/sinapse-sm/SKILL.md +11 -0
  220. package/.claude/skills/sinapse-spec-driven/SKILL.md +11 -0
  221. package/.claude/skills/sinapse-squad-creator/SKILL.md +11 -0
  222. package/.claude/skills/sinapse-storytelling/SKILL.md +11 -0
  223. package/.claude/skills/sinapse-swarm/SKILL.md +11 -0
  224. package/.claude/skills/sinapse-ux-design-expert/SKILL.md +11 -0
  225. package/.claude/skills/snps/SKILL.md +11 -0
  226. package/.claude/skills/snps-orqx/SKILL.md +11 -0
  227. package/.claude/skills/story-update.md +52 -0
  228. package/.claude/skills/test-guard.md +41 -0
  229. package/.codex/agents/ad-copywriter.toml +3 -0
  230. package/.codex/agents/agent-forger.toml +3 -0
  231. package/.codex/agents/analyst.toml +3 -0
  232. package/.codex/agents/animation-interpreter.toml +3 -0
  233. package/.codex/agents/animation-performance-engineer.toml +3 -0
  234. package/.codex/agents/animations-orqx.toml +3 -0
  235. package/.codex/agents/architect.toml +3 -0
  236. package/.codex/agents/assessment-creator.toml +3 -0
  237. package/.codex/agents/audience-intelligence.toml +3 -0
  238. package/.codex/agents/blake-snyder.toml +3 -0
  239. package/.codex/agents/brand-archetype-strategist.toml +3 -0
  240. package/.codex/agents/brand-auditor.toml +3 -0
  241. package/.codex/agents/brand-collateral-designer.toml +3 -0
  242. package/.codex/agents/brand-compiler.toml +3 -0
  243. package/.codex/agents/brand-creative-engineer.toml +3 -0
  244. package/.codex/agents/brand-culture-architect.toml +3 -0
  245. package/.codex/agents/brand-growth-strategist.toml +3 -0
  246. package/.codex/agents/brand-identity-designer.toml +3 -0
  247. package/.codex/agents/brand-motion-vfx.toml +3 -0
  248. package/.codex/agents/brand-naming-specialist.toml +3 -0
  249. package/.codex/agents/brand-orqx.toml +3 -0
  250. package/.codex/agents/brand-positioning-strategist.toml +3 -0
  251. package/.codex/agents/brand-sonic-designer.toml +3 -0
  252. package/.codex/agents/brand-strategist.toml +3 -0
  253. package/.codex/agents/brand-system-architect.toml +3 -0
  254. package/.codex/agents/brand-voice-writer.toml +3 -0
  255. package/.codex/agents/brene-brown.toml +3 -0
  256. package/.codex/agents/budget-controller.toml +3 -0
  257. package/.codex/agents/campaign-analyst.toml +3 -0
  258. package/.codex/agents/charlie-munger.toml +3 -0
  259. package/.codex/agents/claude-mastery-chief.toml +3 -0
  260. package/.codex/agents/cloning-orqx.toml +3 -0
  261. package/.codex/agents/cloud-security-engineer.toml +3 -0
  262. package/.codex/agents/cognitive-extractor.toml +3 -0
  263. package/.codex/agents/commercial-orqx.toml +3 -0
  264. package/.codex/agents/competitive-intelligence.toml +3 -0
  265. package/.codex/agents/compliance-officer.toml +3 -0
  266. package/.codex/agents/config-engineer.toml +3 -0
  267. package/.codex/agents/content-analyst.toml +3 -0
  268. package/.codex/agents/content-capturer.toml +3 -0
  269. package/.codex/agents/content-engineer.toml +3 -0
  270. package/.codex/agents/content-governor.toml +3 -0
  271. package/.codex/agents/content-orqx.toml +3 -0
  272. package/.codex/agents/content-writer.toml +3 -0
  273. package/.codex/agents/conversion-writer.toml +3 -0
  274. package/.codex/agents/copy-editor.toml +3 -0
  275. package/.codex/agents/copy-orqx.toml +3 -0
  276. package/.codex/agents/copy-strategist.toml +3 -0
  277. package/.codex/agents/cost-optimizer.toml +3 -0
  278. package/.codex/agents/council-orqx.toml +3 -0
  279. package/.codex/agents/courses-orqx.toml +3 -0
  280. package/.codex/agents/creative-strategist.toml +3 -0
  281. package/.codex/agents/cro-persuasion.toml +3 -0
  282. package/.codex/agents/cro-specialist.toml +3 -0
  283. package/.codex/agents/cs-business-auditor.toml +3 -0
  284. package/.codex/agents/cs-client-success.toml +3 -0
  285. package/.codex/agents/cs-crm-specialist.toml +3 -0
  286. package/.codex/agents/cs-funnel-architect.toml +3 -0
  287. package/.codex/agents/cs-lead-generation-strategist.toml +3 -0
  288. package/.codex/agents/cs-offer-designer.toml +3 -0
  289. package/.codex/agents/cs-revops-analyst.toml +3 -0
  290. package/.codex/agents/cs-sales-closer.toml +3 -0
  291. package/.codex/agents/cs-sales-enablement.toml +3 -0
  292. package/.codex/agents/css-motion-artist.toml +3 -0
  293. package/.codex/agents/curriculum-designer.toml +3 -0
  294. package/.codex/agents/cyber-orqx.toml +3 -0
  295. package/.codex/agents/dan-harmon.toml +3 -0
  296. package/.codex/agents/data-engineer.toml +3 -0
  297. package/.codex/agents/data-synthesizer.toml +3 -0
  298. package/.codex/agents/deep-researcher.toml +3 -0
  299. package/.codex/agents/derek-sivers.toml +3 -0
  300. package/.codex/agents/design-orqx.toml +3 -0
  301. package/.codex/agents/design-system.toml +3 -0
  302. package/.codex/agents/developer.toml +3 -0
  303. package/.codex/agents/devops.toml +3 -0
  304. package/.codex/agents/direct-response-writer.toml +3 -0
  305. package/.codex/agents/dx-accessibility-specialist.toml +3 -0
  306. package/.codex/agents/dx-design-system-architect.toml +3 -0
  307. package/.codex/agents/dx-frontend-engineer.toml +3 -0
  308. package/.codex/agents/dx-interaction-designer.toml +3 -0
  309. package/.codex/agents/dx-performance-engineer.toml +3 -0
  310. package/.codex/agents/dx-ui-designer.toml +3 -0
  311. package/.codex/agents/dx-ux-strategist.toml +3 -0
  312. package/.codex/agents/editorial-strategist.toml +3 -0
  313. package/.codex/agents/email-sequence-strategist.toml +3 -0
  314. package/.codex/agents/finance-orqx.toml +3 -0
  315. package/.codex/agents/fiscal-compliance-br.toml +3 -0
  316. package/.codex/agents/forecast-strategist.toml +3 -0
  317. package/.codex/agents/funnel-copywriter.toml +3 -0
  318. package/.codex/agents/ga-analytics-engineer.toml +3 -0
  319. package/.codex/agents/ga-campaign-analyst.toml +3 -0
  320. package/.codex/agents/ga-cro-specialist.toml +3 -0
  321. package/.codex/agents/ga-data-analyst.toml +3 -0
  322. package/.codex/agents/ga-growth-hacker.toml +3 -0
  323. package/.codex/agents/ga-seo-strategist.toml +3 -0
  324. package/.codex/agents/generative-particle-engineer.toml +3 -0
  325. package/.codex/agents/google-ads-specialist.toml +3 -0
  326. package/.codex/agents/growth-orqx.toml +3 -0
  327. package/.codex/agents/headline-specialist.toml +3 -0
  328. package/.codex/agents/hooks-architect.toml +3 -0
  329. package/.codex/agents/incident-responder.toml +3 -0
  330. package/.codex/agents/joseph-campbell.toml +3 -0
  331. package/.codex/agents/kb-architect.toml +3 -0
  332. package/.codex/agents/keith-johnstone.toml +3 -0
  333. package/.codex/agents/kindra-hall.toml +3 -0
  334. package/.codex/agents/launch-strategist.toml +3 -0
  335. package/.codex/agents/lesson-architect.toml +3 -0
  336. package/.codex/agents/long-form-writer.toml +3 -0
  337. package/.codex/agents/market-analyst.toml +3 -0
  338. package/.codex/agents/marshall-ganz.toml +3 -0
  339. package/.codex/agents/mcp-integrator.toml +3 -0
  340. package/.codex/agents/meta-ads-specialist.toml +3 -0
  341. package/.codex/agents/mind-synthesizer.toml +3 -0
  342. package/.codex/agents/motion-choreographer.toml +3 -0
  343. package/.codex/agents/nancy-duarte.toml +3 -0
  344. package/.codex/agents/naval-ravikant.toml +3 -0
  345. package/.codex/agents/network-security-engineer.toml +3 -0
  346. package/.codex/agents/oren-klaff.toml +3 -0
  347. package/.codex/agents/paidmedia-orqx.toml +3 -0
  348. package/.codex/agents/park-howell.toml +3 -0
  349. package/.codex/agents/patrick-lencioni.toml +3 -0
  350. package/.codex/agents/penetration-tester.toml +3 -0
  351. package/.codex/agents/performance-engineer.toml +3 -0
  352. package/.codex/agents/persuasion-psychologist.toml +3 -0
  353. package/.codex/agents/peter-thiel.toml +3 -0
  354. package/.codex/agents/platform-aesthetic-director.toml +3 -0
  355. package/.codex/agents/platform-specialist.toml +3 -0
  356. package/.codex/agents/pm-creative-performance-analyst.toml +3 -0
  357. package/.codex/agents/pm-youtube-ads-specialist.toml +3 -0
  358. package/.codex/agents/premium-packaging-strategist.toml +3 -0
  359. package/.codex/agents/pricing-strategist.toml +3 -0
  360. package/.codex/agents/product-lead.toml +3 -0
  361. package/.codex/agents/product-orqx.toml +3 -0
  362. package/.codex/agents/product-surface-director.toml +3 -0
  363. package/.codex/agents/production-director.toml +3 -0
  364. package/.codex/agents/profitability-analyst.toml +3 -0
  365. package/.codex/agents/project-integrator.toml +3 -0
  366. package/.codex/agents/project-lead.toml +3 -0
  367. package/.codex/agents/proof-architect.toml +3 -0
  368. package/.codex/agents/ps-client-product-manager.toml +3 -0
  369. package/.codex/agents/ps-delivery-manager.toml +3 -0
  370. package/.codex/agents/ps-discovery-lead.toml +3 -0
  371. package/.codex/agents/ps-product-analyst.toml +3 -0
  372. package/.codex/agents/ps-product-ops-specialist.toml +3 -0
  373. package/.codex/agents/ps-product-strategist.toml +3 -0
  374. package/.codex/agents/quality-gate.toml +3 -0
  375. package/.codex/agents/ray-dalio.toml +3 -0
  376. package/.codex/agents/reid-hoffman.toml +3 -0
  377. package/.codex/agents/research-orqx.toml +3 -0
  378. package/.codex/agents/revenue-analyst.toml +3 -0
  379. package/.codex/agents/roadmap-sentinel.toml +3 -0
  380. package/.codex/agents/scroll-narrative-engineer.toml +3 -0
  381. package/.codex/agents/shader-artist.toml +3 -0
  382. package/.codex/agents/signal-intelligence.toml +3 -0
  383. package/.codex/agents/simon-sinek.toml +3 -0
  384. package/.codex/agents/skill-craftsman.toml +3 -0
  385. package/.codex/agents/slide-designer.toml +3 -0
  386. package/.codex/agents/snps-orqx.toml +3 -0
  387. package/.codex/agents/soc-analyst.toml +3 -0
  388. package/.codex/agents/sop-extractor.toml +3 -0
  389. package/.codex/agents/source-hunter.toml +3 -0
  390. package/.codex/agents/sprint-lead.toml +3 -0
  391. package/.codex/agents/squad-assembler.toml +3 -0
  392. package/.codex/agents/squad-creator.toml +3 -0
  393. package/.codex/agents/storytelling-orqx.toml +3 -0
  394. package/.codex/agents/swarm-orqx.toml +3 -0
  395. package/.codex/agents/threat-analyst.toml +3 -0
  396. package/.codex/agents/threejs-architect.toml +3 -0
  397. package/.codex/agents/trend-forecaster.toml +3 -0
  398. package/.codex/agents/ux-design-expert.toml +3 -0
  399. package/.codex/agents/ux-designer.toml +3 -0
  400. package/.codex/agents/yvon-chouinard.toml +3 -0
  401. package/.codex/catalog.json +20 -5
  402. package/.codex/command-registry.json +94 -0
  403. package/.codex/config.toml +8 -0
  404. package/.codex/delegation-matrix.json +39 -25
  405. package/.codex/delegation-parity.json +46 -41
  406. package/.codex/hooks/claude-compat.cjs +547 -0
  407. package/.codex/hooks.json +123 -0
  408. package/.codex/scripts/resolve-codex-agent.js +30 -1
  409. package/.codex/scripts/resolve-codex-workflow.js +283 -0
  410. package/.codex/scripts/sinapse-codex.js +304 -0
  411. package/.codex/scripts/sync-codex-native.js +581 -0
  412. package/.codex/scripts/validate-codex-native.js +277 -0
  413. package/.codex/tasks/onboard-sinapse-codex.md +1 -1
  414. package/.sinapse-ai/data/entity-registry.yaml +91 -39
  415. package/.sinapse-ai/install-manifest.yaml +5 -5
  416. package/.sinapse-ai/product/templates/statusline/agent-badges.json +37 -37
  417. package/AGENTS.md +5 -4
  418. package/CHANGELOG.md +23 -7
  419. package/README.en.md +1 -1
  420. package/README.md +25 -10
  421. package/bin/cli.js +8 -1
  422. package/bin/commands/help.js +3 -2
  423. package/bin/commands/install.js +79 -53
  424. package/bin/commands/status.js +4 -3
  425. package/bin/commands/uninstall.js +247 -29
  426. package/bin/commands/update.js +38 -23
  427. package/bin/lib/command-generator.js +25 -3
  428. package/bin/lib/global-provider-adapters.js +199 -0
  429. package/bin/lib/provider-parity.js +22 -0
  430. package/bin/postinstall.js +11 -11
  431. package/bin/utils/validate-publish.js +43 -10
  432. package/docs/framework/codex-parity/codex-integration-process.md +6 -7
  433. package/docs/framework/codex-parity/codex-native-runtime-v2.md +230 -0
  434. package/docs/framework/codex-parity/codex-parity-program.md +4 -4
  435. package/docs/framework/codex-parity/codex-total-parity-orchestration-plan.md +1 -1
  436. package/docs/framework/codex-parity/codex-workflow-task-parity.md +21 -7
  437. package/docs/framework/react-bits/animations.md +49 -0
  438. package/docs/framework/react-bits/audit-findings.md +103 -0
  439. package/docs/framework/react-bits/backgrounds.md +63 -0
  440. package/docs/framework/react-bits/catalog-summary.json +61 -0
  441. package/docs/framework/react-bits/components.md +58 -0
  442. package/docs/framework/react-bits/implementation-playbook.md +161 -0
  443. package/docs/framework/react-bits/index.md +130 -0
  444. package/docs/framework/react-bits/inventory.json +9333 -0
  445. package/docs/framework/react-bits/text-animations.md +41 -0
  446. package/docs/framework/software-engineering-applicability.md +31 -0
  447. package/docs/getting-started.md +6 -2
  448. package/docs/guides/codex-config.md +2 -2
  449. package/docs/guides/development-setup.md +1 -2
  450. package/docs/guides/ide-integration.md +6 -6
  451. package/docs/guides/quality-gates.md +2 -2
  452. package/docs/ide-integration.md +2 -2
  453. package/docs/installation/README.md +2 -2
  454. package/docs/installation/faq.md +1 -1
  455. package/docs/installation/troubleshooting.md +2 -2
  456. package/docs/installation/v4-quick-start.md +1 -1
  457. package/docs/pt/contributing.md +1 -1
  458. package/docs/pt/guides/development-setup.md +1 -2
  459. package/docs/pt/guides/quality-gates.md +2 -2
  460. package/docs/pt/ide-integration.md +6 -6
  461. package/docs/pt/installation/faq.md +1 -1
  462. package/docs/pt/installation/troubleshooting.md +2 -3
  463. package/docs/pt/installation/v4-quick-start.md +1 -2
  464. package/docs/pt/platforms/claude-code.md +4 -4
  465. package/docs/sinapse-agent-flows/analyst-system.md +1 -1
  466. package/docs/sinapse-agent-flows/architect-system.md +1 -1
  467. package/docs/sinapse-agent-flows/data-engineer-system.md +1 -1
  468. package/docs/sinapse-agent-flows/dev-system.md +1 -1
  469. package/docs/sinapse-agent-flows/pm-system.md +1 -1
  470. package/docs/sinapse-agent-flows/qa-system.md +1 -1
  471. package/docs/sinapse-agent-flows/sm-system.md +1 -1
  472. package/docs/sinapse-agent-flows/snps-orqx-system.md +1 -1
  473. package/docs/sinapse-agent-flows/squad-creator-system.md +2 -2
  474. package/docs/sinapse-agent-flows/ux-design-expert-system.md +1 -1
  475. package/package.json +37 -19
  476. package/packages/engineering-applicability/fixtures.json +52 -0
  477. package/packages/engineering-applicability/index.js +150 -0
  478. package/packages/installer/src/config/ide-configs.js +1 -1
  479. package/packages/installer/src/installer/sinapse-ai-installer.js +359 -2
  480. package/packages/installer/src/migrations/legacy-claude-agent-command-hashes.json +36 -0
  481. package/packages/installer/src/migrations/legacy-codex-native-skill-hashes.json +42 -0
  482. package/packages/installer/src/updater/index.js +51 -13
  483. package/packages/installer/src/wizard/feedback.js +1 -1
  484. package/packages/installer/src/wizard/ide-config-generator.js +22 -0
  485. package/packages/installer/src/wizard/index.js +106 -75
  486. package/scripts/gen-agent-badges.js +17 -1
  487. package/scripts/release-readiness.js +9 -3
  488. package/scripts/research/generate-react-bits-catalog.mjs +206 -0
  489. package/scripts/sync-provider-adapters.js +203 -0
  490. package/scripts/validate-codex-command-registry.js +101 -0
  491. package/scripts/validate-provider-adapters.js +243 -0
  492. package/squads/claude-code-mastery/agents/skill-craftsman.md +2 -2
  493. package/squads/claude-code-mastery/knowledge-base/skill-creation-patterns.md +1 -1
  494. package/squads/squad-animations/knowledge-base/react-bits-operational-guide.md +43 -0
  495. package/squads/squad-animations/squad.yaml +10 -5
  496. package/squads/squad-animations/tasks/orchestrate-react-bits-frontend.md +60 -0
  497. package/squads/squad-design/agents/ux-designer.md +1 -1
  498. package/.codex/skills/sinapse-orqx/SKILL.md +0 -25
  499. /package/{.codex → .agents}/skills/sinapse-analyst/SKILL.md +0 -0
  500. /package/{.codex → .agents}/skills/sinapse-animations/SKILL.md +0 -0
  501. /package/{.codex → .agents}/skills/sinapse-architect/SKILL.md +0 -0
  502. /package/{.codex → .agents}/skills/sinapse-brand/SKILL.md +0 -0
  503. /package/{.codex → .agents}/skills/sinapse-cloning/SKILL.md +0 -0
  504. /package/{.codex → .agents}/skills/sinapse-commercial/SKILL.md +0 -0
  505. /package/{.codex → .agents}/skills/sinapse-content/SKILL.md +0 -0
  506. /package/{.codex → .agents}/skills/sinapse-copy/SKILL.md +0 -0
  507. /package/{.codex → .agents}/skills/sinapse-council/SKILL.md +0 -0
  508. /package/{.codex → .agents}/skills/sinapse-courses/SKILL.md +0 -0
  509. /package/{.codex → .agents}/skills/sinapse-cyber/SKILL.md +0 -0
  510. /package/{.codex → .agents}/skills/sinapse-data-engineer/SKILL.md +0 -0
  511. /package/{.codex → .agents}/skills/sinapse-design/SKILL.md +0 -0
  512. /package/{.codex → .agents}/skills/sinapse-dev/SKILL.md +0 -0
  513. /package/{.codex → .agents}/skills/sinapse-devops/SKILL.md +0 -0
  514. /package/{.codex → .agents}/skills/sinapse-finance/SKILL.md +0 -0
  515. /package/{.codex → .agents}/skills/sinapse-growth/SKILL.md +0 -0
  516. /package/{.codex → .agents}/skills/sinapse-paidmedia/SKILL.md +0 -0
  517. /package/{.codex → .agents}/skills/sinapse-pm/SKILL.md +0 -0
  518. /package/{.codex → .agents}/skills/sinapse-po/SKILL.md +0 -0
  519. /package/{.codex → .agents}/skills/sinapse-product/SKILL.md +0 -0
  520. /package/{.codex → .agents}/skills/sinapse-qa/SKILL.md +0 -0
  521. /package/{.codex → .agents}/skills/sinapse-research/SKILL.md +0 -0
  522. /package/{.codex → .agents}/skills/sinapse-sm/SKILL.md +0 -0
  523. /package/{.codex → .agents}/skills/sinapse-squad-creator/SKILL.md +0 -0
  524. /package/{.codex → .agents}/skills/sinapse-storytelling/SKILL.md +0 -0
  525. /package/{.codex → .agents}/skills/sinapse-swarm/SKILL.md +0 -0
  526. /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('.codex');
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 copied = await copyDirectoryWithRootReplacement(src, dest, onProgress);
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 { execSync } = require('child_process');
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 cmd = `npm install sinapse-ai@${targetVersion} --save-exact`;
605
- this.log(`Running: ${cmd}`);
623
+ const packageSpec = `sinapse-ai@${targetVersion}`;
624
+ this.log(`Running: npm install ${packageSpec} --save-exact`);
606
625
 
607
- execSync(cmd, {
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
- result.success = true;
614
- result.filesUpdated = 1; // At least package updated
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
- // TODO: Copy new files from node_modules to .sinapse-ai
617
- // preserving customizedFiles
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
- // eslint-disable-next-line no-control-regex
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,200' });
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