sinapse-ai 1.25.2 → 1.26.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -14,6 +14,7 @@ const path = require('path');
14
14
  const crypto = require('crypto');
15
15
  const ora = require('ora');
16
16
  const { hashFile } = require('./file-hasher');
17
+ const { copyReactBitsCorpusSync } = require('./react-bits-corpus');
17
18
 
18
19
  const NOFOLLOW_READ_FLAGS = nativeFs.constants.O_RDONLY | (nativeFs.constants.O_NOFOLLOW || 0);
19
20
 
@@ -705,6 +706,13 @@ async function installSinapseCore(options = {}) {
705
706
  if (claudeSettings) result.installedFiles.push(claudeSettings);
706
707
  }
707
708
 
709
+ if (includeClaude || includeCodex) {
710
+ spinner.text = 'Copying React Bits corpus...';
711
+ const corpusFiles = copyReactBitsCorpusSync(pkgRoot, targetDir);
712
+ result.reactBitsCorpusFiles = corpusFiles.length;
713
+ result.installedFiles.push(...corpusFiles);
714
+ }
715
+
708
716
  // AGENTS.md is the Codex CLI's default context file (Imperator greeting +
709
717
  // the full agent roster). It lives at the package ROOT (not under .codex/ or
710
718
  // .sinapse-ai/), so neither loop above reaches it. Without it, a Codex user's
@@ -878,6 +886,7 @@ module.exports = {
878
886
  deliverClaudeNativeAdapters,
879
887
  getClaudeHookName,
880
888
  reconcileClaudeHookSettings,
889
+ copyReactBitsCorpusSync,
881
890
  FOLDERS_TO_COPY,
882
891
  ROOT_FILES_TO_COPY,
883
892
  CODEX_ROOT_FILES,
@@ -11,10 +11,12 @@ const {
11
11
  syncCodexNativeAgents,
12
12
  } = require('../.codex/scripts/sync-codex-native');
13
13
  const { resolveCodexAgent } = require('../.codex/scripts/resolve-codex-agent');
14
+ const { GLOBAL_SUPPLEMENTAL_PROVIDER_SKILL_IDS } = require('../bin/lib/provider-contract');
14
15
 
15
16
  const PROJECT_ROOT = path.resolve(__dirname, '..');
16
17
  const CLAUDE_AGENTS_DIR = '.claude/agents';
17
18
  const CLAUDE_SKILLS_DIR = '.claude/skills';
19
+ const SUPPLEMENTAL_PROVIDER_SKILL_IDS = GLOBAL_SUPPLEMENTAL_PROVIDER_SKILL_IDS;
18
20
 
19
21
  function writeFileAtomically(filePath, content) {
20
22
  const temporaryPath = `${filePath}.${process.pid}.${Date.now()}.tmp`;
@@ -136,11 +138,13 @@ function collectClaudeSkills(projectRoot = PROJECT_ROOT) {
136
138
  catalog.genericAgentSkillId,
137
139
  ])].sort();
138
140
 
139
- return skillIds.map((skillId) => {
141
+ return [...new Set([...skillIds, ...SUPPLEMENTAL_PROVIDER_SKILL_IDS])].sort().map((skillId) => {
140
142
  const nativePath = path.join(projectRoot, '.agents', 'skills', skillId, 'SKILL.md');
141
143
  const metadata = parseSkillMetadata(fs.readFileSync(nativePath, 'utf8'));
142
144
  let content;
143
- if (skillId === catalog.genericAgentSkillId) {
145
+ if (SUPPLEMENTAL_PROVIDER_SKILL_IDS.includes(skillId)) {
146
+ content = fs.readFileSync(nativePath, 'utf8');
147
+ } else if (skillId === catalog.genericAgentSkillId) {
144
148
  content = renderClaudeGenericSkill(skillId, metadata.description);
145
149
  } else if (skillId === 'sinapse-loop' || skillId === 'sinapse-spec-driven') {
146
150
  content = renderClaudeWorkflowSkill(skillId, metadata.description);
@@ -195,6 +199,7 @@ if (require.main === module) main();
195
199
  module.exports = {
196
200
  CLAUDE_AGENTS_DIR,
197
201
  CLAUDE_SKILLS_DIR,
202
+ SUPPLEMENTAL_PROVIDER_SKILL_IDS,
198
203
  claudeAgentFileName,
199
204
  renderClaudeAgent,
200
205
  collectClaudeSkills,
@@ -8,6 +8,11 @@ const yaml = require('js-yaml');
8
8
  const legacyClaudeCommandHashes = require('../packages/installer/src/migrations/legacy-claude-agent-command-hashes.json');
9
9
 
10
10
  const { validateNativeCodex } = require('../.codex/scripts/validate-codex-native');
11
+ const {
12
+ REACT_BITS_CORPUS_RELATIVE_PATH,
13
+ REQUIRED_REACT_BITS_CORPUS_FILES,
14
+ hasCompleteReactBitsCorpus,
15
+ } = require('../packages/installer/src/installer/react-bits-corpus');
11
16
 
12
17
  const PROJECT_ROOT = path.resolve(__dirname, '..');
13
18
 
@@ -125,10 +130,13 @@ function validateClaudeNative(projectRoot = PROJECT_ROOT) {
125
130
  try {
126
131
  const manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf8'));
127
132
  expectedSkills = (manifest.skillIds || []).map((skillId) => ({ skillId }));
128
- if (expectedSkills.length !== 36) errors.push(`Claude skill manifest must contain 36 IDs, found ${expectedSkills.length}`);
133
+ if (expectedSkills.length !== 37) errors.push(`Claude skill manifest must contain 37 IDs, found ${expectedSkills.length}`);
129
134
  for (const alias of ['sinapse', 'sinapse-orqx', 'snps', 'snps-orqx', 'sinapse-agent']) {
130
135
  if (!manifest.skillIds.includes(alias)) errors.push(`Claude skill manifest is missing public alias ${alias}`);
131
136
  }
137
+ if (!manifest.skillIds.includes('react-bits-frontend')) {
138
+ errors.push('Claude skill manifest is missing react-bits-frontend');
139
+ }
132
140
  } catch (error) {
133
141
  errors.push(`Claude skill manifest: ${error.message}`);
134
142
  }
@@ -209,6 +217,17 @@ function validateProviderAdapters(projectRoot = PROJECT_ROOT) {
209
217
  if (!pkg.files.includes(entry)) errors.push(`package.json files[] is missing ${entry}`);
210
218
  }
211
219
  if (pkg.files.includes('.codex/skills/')) errors.push('package.json must not publish the legacy .codex/skills root');
220
+ if (!hasCompleteReactBitsCorpus(projectRoot)) {
221
+ errors.push(`React Bits corpus is incomplete: expected ${REQUIRED_REACT_BITS_CORPUS_FILES.length} files under ${REACT_BITS_CORPUS_RELATIVE_PATH}`);
222
+ }
223
+ for (const relativePath of [
224
+ path.join('.agents', 'skills', 'react-bits-frontend', 'SKILL.md'),
225
+ path.join('.claude', 'skills', 'react-bits-frontend', 'SKILL.md'),
226
+ ]) {
227
+ if (!fs.existsSync(path.join(projectRoot, relativePath))) {
228
+ errors.push(`React Bits provider skill is missing: ${relativePath}`);
229
+ }
230
+ }
212
231
  return {
213
232
  ok: errors.length === 0,
214
233
  errors,
@@ -240,4 +259,5 @@ module.exports = {
240
259
  validateClaudeHookSettings,
241
260
  validateClaudeNative,
242
261
  validateProviderAdapters,
262
+ REQUIRED_REACT_BITS_CORPUS_FILES,
243
263
  };
@@ -28,6 +28,8 @@ Kinetic e o diretor da squad. Recebe os Animation Briefs do Decoder (animation-i
28
28
  - Garantir coesao entre animacoes de diferentes agentes
29
29
  - Orquestrar o workflow prompt-to-animation-cycle
30
30
  - Gerar relatorios de entrega
31
+ - Roteiar trabalho React Bits pelo task `orchestrate-react-bits-frontend` e pelo
32
+ corpus operacional antes de delegar implementacao
31
33
 
32
34
  ## Pipeline de Orquestracao
33
35
 
@@ -64,6 +66,7 @@ Kinetic → Review final → Entrega
64
66
  | Hover effects | css-motion-artist | shader-artist |
65
67
  | Loading animations | css-motion-artist | motion-choreographer |
66
68
  | Camera movements 3D | threejs-architect | motion-choreographer |
69
+ | React Bits frontend | orchestrate-react-bits-frontend | animation-performance-engineer |
67
70
 
68
71
  ## Criterios de Qualidade
69
72
 
@@ -86,6 +89,7 @@ Toda animacao deve passar por:
86
89
  | Definir timing e coreografia | motion-choreographer (Tempo) |
87
90
  | Implementar scroll animation | scroll-narrative-engineer (Parallax) |
88
91
  | Criar sistema de particulas | generative-particle-engineer (Cloud) |
92
+ | Orquestrar frontend React Bits | orchestrate-react-bits-frontend |
89
93
  | Otimizar performance | animation-performance-engineer (Benchmark) |
90
94
 
91
95
  ## NON-NEGOTIABLE: ORCHESTRATE, DON'T EXECUTE
@@ -135,6 +139,9 @@ integration:
135
139
  - agent: "animation-performance-engineer (Benchmark)"
136
140
  when: "Quality gate before delivery — perf audit, 60fps validation, mobile check"
137
141
  context_passed: "all built animations, target devices, perf budget"
142
+ - agent: "orchestrate-react-bits-frontend"
143
+ when: "Frontend request that needs React Bits discovery, selection, installation or implementation"
144
+ context_passed: "project stack, target surface, desired interaction, accessibility and performance constraints"
138
145
  receives_from:
139
146
  - agent: "@sinapse-orqx (Imperator)"
140
147
  when: "Animation/motion request routed from ecosystem"
@@ -23,7 +23,7 @@ metadata:
23
23
  total_files: 116
24
24
  agents: 9
25
25
  tasks: 76
26
- workflows: 0
26
+ workflows: 5
27
27
  knowledge_bases: 16
28
28
  checklists: 3
29
29
  templates: 5