@axiomatic-labs/claudeflow 2.49.27 → 2.49.29

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 (2) hide show
  1. package/lib/install.js +15 -4
  2. package/package.json +1 -1
package/lib/install.js CHANGED
@@ -395,8 +395,8 @@ function pathHash(p) {
395
395
  return h.digest('hex');
396
396
  }
397
397
 
398
- function syncManagedGlobalDir(srcDir, dstDir, backupRoot, filter) {
399
- const out = { synced: 0, changed: 0, backups: 0, failed: 0 };
398
+ function syncManagedGlobalDir(srcDir, dstDir, backupRoot, filter, label) {
399
+ const out = { synced: 0, changed: 0, backups: 0, failed: 0, failures: [] };
400
400
  if (!fs.existsSync(srcDir)) return out;
401
401
  fs.mkdirSync(dstDir, { recursive: true });
402
402
  for (const e of fs.readdirSync(srcDir, { withFileTypes: true })) {
@@ -413,8 +413,9 @@ function syncManagedGlobalDir(srcDir, dstDir, backupRoot, filter) {
413
413
  const r = replaceManagedPath(s, d, backupRoot, dstDir);
414
414
  if (r.movedAside) out.backups++;
415
415
  out.changed++;
416
- } catch {
416
+ } catch (err) {
417
417
  out.failed++;
418
+ out.failures.push(`${label}:${e.name}:${err && err.code ? err.code : 'ERROR'}`);
418
419
  }
419
420
  }
420
421
  return out;
@@ -428,12 +429,14 @@ function syncGlobalClaudeArtifacts(src, homeDir = os.homedir()) {
428
429
  path.join(homeDir, '.claude', 'skills'),
429
430
  backupRoot,
430
431
  e => e.isDirectory() && e.name.startsWith('claudeflow-'),
432
+ 'global-skills',
431
433
  );
432
434
  const agentStats = syncManagedGlobalDir(
433
435
  path.join(src, '.claude', 'agents'),
434
436
  path.join(homeDir, '.claude', 'agents'),
435
437
  backupRoot,
436
438
  e => e.isFile() && e.name.startsWith('claudeflow-') && e.name.endsWith('.md'),
439
+ 'global-agents',
437
440
  );
438
441
  return {
439
442
  skills: skillStats.synced,
@@ -441,6 +444,7 @@ function syncGlobalClaudeArtifacts(src, homeDir = os.homedir()) {
441
444
  changed: skillStats.changed + agentStats.changed,
442
445
  backups: skillStats.backups + agentStats.backups,
443
446
  failed: skillStats.failed + agentStats.failed,
447
+ failures: [...skillStats.failures, ...agentStats.failures],
444
448
  };
445
449
  }
446
450
 
@@ -830,7 +834,10 @@ function installFromPayload(src, cwd, options = {}) {
830
834
  out.globalAgents = r.agents;
831
835
  out.globalChanged = r.changed;
832
836
  out.globalBackups = r.backups;
833
- if (r.failed) out.failed.push(`global-claude-artifacts:${r.failed}`);
837
+ if (r.failed) {
838
+ out.failed.push(`global-claude-artifacts:${r.failed}`);
839
+ for (const f of r.failures || []) out.failed.push(f);
840
+ }
834
841
  });
835
842
 
836
843
  // 4d) Codex skills — replace shipped claudeflow-* skills in .agents; preserve user skills.
@@ -1037,6 +1044,10 @@ async function run() {
1037
1044
  ui.warn(' Permission repair: one or more managed claudeflow paths are not writable by your user.');
1038
1045
  ui.warn(' From the project root, run once:');
1039
1046
  ui.warn(' sudo chown -R "$(whoami):$(id -gn)" .claudeflow scripts/claudeflow .claude/skills/claudeflow-* .claude/agents/claudeflow-* .agents/skills/claudeflow-* .codex/agents/claudeflow-* plugins/codexflow');
1047
+ if (summary.failed.some(f => /^global-(skills|agents):.*:(EACCES|EPERM)$/.test(f))) {
1048
+ ui.warn(' For personal Claude Code cache repair, also run once:');
1049
+ ui.warn(' sudo chown -R "$(whoami):$(id -gn)" ~/.claude/skills/claudeflow-* ~/.claude/agents/claudeflow-*');
1050
+ }
1040
1051
  ui.warn(' Then re-run: npx @axiomatic-labs/claudeflow@latest install');
1041
1052
  }
1042
1053
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@axiomatic-labs/claudeflow",
3
- "version": "2.49.27",
3
+ "version": "2.49.29",
4
4
  "description": "Claudeflow — AI-powered development toolkit for Claude Code and Codex. Skills, agents, hooks, and quality gates that ship production apps.",
5
5
  "bin": {
6
6
  "claudeflow": "./bin/cli.js"