@axiomatic-labs/claudeflow 2.49.32 → 2.49.34
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/lib/install.js +55 -6
- package/package.json +1 -1
package/lib/install.js
CHANGED
|
@@ -42,6 +42,13 @@ const GITIGNORE_LINES = [
|
|
|
42
42
|
];
|
|
43
43
|
const SHARED_CONFIGS = ['playbook-map.json', 'agent-map.json']; // always refreshed (shared system)
|
|
44
44
|
const CODEX_DOCS = ['claudeflow-codex-migration.md', 'codexflow-codex-native-workflow.md', 'codexflow-local-actions.md'];
|
|
45
|
+
const OBSOLETE_LOCAL_PATHS = [
|
|
46
|
+
'.claude/agents/claudeflow-implementer.md',
|
|
47
|
+
'.codex/agents/claudeflow-implementer.toml',
|
|
48
|
+
];
|
|
49
|
+
const OBSOLETE_GLOBAL_CLAUDE_PATHS = [
|
|
50
|
+
'.claude/agents/claudeflow-implementer.md',
|
|
51
|
+
];
|
|
45
52
|
|
|
46
53
|
function rmrf(p) { fs.rmSync(p, { recursive: true, force: true }); }
|
|
47
54
|
|
|
@@ -339,6 +346,30 @@ function replaceManagedPath(src, dst, backupRoot, relBase) {
|
|
|
339
346
|
return { movedAside };
|
|
340
347
|
}
|
|
341
348
|
|
|
349
|
+
function removeObsoleteManagedPaths(paths, backupRoot, relBase, label) {
|
|
350
|
+
const out = { removed: 0, backups: 0, failed: 0, failures: [] };
|
|
351
|
+
for (const rel of paths) {
|
|
352
|
+
const target = path.join(relBase, rel);
|
|
353
|
+
if (!fs.existsSync(target)) continue;
|
|
354
|
+
try {
|
|
355
|
+
moveAsideManagedPath(target, backupRoot, relBase);
|
|
356
|
+
out.removed++;
|
|
357
|
+
out.backups++;
|
|
358
|
+
} catch (err) {
|
|
359
|
+
try {
|
|
360
|
+
makeWritableTree(target);
|
|
361
|
+
moveAsideManagedPath(target, backupRoot, relBase);
|
|
362
|
+
out.removed++;
|
|
363
|
+
out.backups++;
|
|
364
|
+
} catch (err2) {
|
|
365
|
+
out.failed++;
|
|
366
|
+
out.failures.push(`${label}:${rel}:${err2 && err2.code ? err2.code : 'ERROR'}`);
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
return out;
|
|
371
|
+
}
|
|
372
|
+
|
|
342
373
|
function chownTree(target, uid, gid) {
|
|
343
374
|
if (!fs.existsSync(target)) return 0;
|
|
344
375
|
let count = 0;
|
|
@@ -436,6 +467,12 @@ function syncManagedGlobalDir(srcDir, dstDir, backupRoot, filter, label) {
|
|
|
436
467
|
function syncGlobalClaudeArtifacts(src, homeDir = os.homedir()) {
|
|
437
468
|
const stamp = new Date().toISOString().replace(/\D/g, '').slice(0, 14) + '-' + process.pid;
|
|
438
469
|
const backupRoot = path.join(homeDir, '.claude', 'backup', `claudeflow-install-${stamp}`);
|
|
470
|
+
const obsoleteStats = removeObsoleteManagedPaths(
|
|
471
|
+
OBSOLETE_GLOBAL_CLAUDE_PATHS,
|
|
472
|
+
backupRoot,
|
|
473
|
+
homeDir,
|
|
474
|
+
'global-obsolete',
|
|
475
|
+
);
|
|
439
476
|
const skillStats = syncManagedGlobalDir(
|
|
440
477
|
path.join(src, '.claude', 'skills'),
|
|
441
478
|
path.join(homeDir, '.claude', 'skills'),
|
|
@@ -453,10 +490,10 @@ function syncGlobalClaudeArtifacts(src, homeDir = os.homedir()) {
|
|
|
453
490
|
return {
|
|
454
491
|
skills: skillStats.synced,
|
|
455
492
|
agents: agentStats.synced,
|
|
456
|
-
changed: skillStats.changed + agentStats.changed,
|
|
457
|
-
backups: skillStats.backups + agentStats.backups,
|
|
458
|
-
failed: skillStats.failed + agentStats.failed,
|
|
459
|
-
failures: [...skillStats.failures, ...agentStats.failures],
|
|
493
|
+
changed: skillStats.changed + agentStats.changed + obsoleteStats.removed,
|
|
494
|
+
backups: skillStats.backups + agentStats.backups + obsoleteStats.backups,
|
|
495
|
+
failed: skillStats.failed + agentStats.failed + obsoleteStats.failed,
|
|
496
|
+
failures: [...skillStats.failures, ...agentStats.failures, ...obsoleteStats.failures],
|
|
460
497
|
};
|
|
461
498
|
}
|
|
462
499
|
|
|
@@ -775,6 +812,7 @@ function installFromPayload(src, cwd, options = {}) {
|
|
|
775
812
|
globalBackups: 0,
|
|
776
813
|
globalMcpPruned: 0,
|
|
777
814
|
localBackups: 0,
|
|
815
|
+
obsoleteRemoved: 0,
|
|
778
816
|
ownershipRepaired: 0,
|
|
779
817
|
codexSkills: 0,
|
|
780
818
|
codexAgents: 0,
|
|
@@ -930,6 +968,17 @@ function installFromPayload(src, cwd, options = {}) {
|
|
|
930
968
|
}
|
|
931
969
|
});
|
|
932
970
|
|
|
971
|
+
// 4f) Removed managed artifacts — no compatibility path for the old named implementer.
|
|
972
|
+
step('obsolete-artifacts', () => {
|
|
973
|
+
const r = removeObsoleteManagedPaths(OBSOLETE_LOCAL_PATHS, backupRoot, cwd, 'obsolete');
|
|
974
|
+
out.obsoleteRemoved += r.removed;
|
|
975
|
+
out.localBackups += r.backups;
|
|
976
|
+
if (r.failed) {
|
|
977
|
+
out.failed.push(`obsolete-artifacts:${r.failed}`);
|
|
978
|
+
for (const f of r.failures || []) out.failed.push(f);
|
|
979
|
+
}
|
|
980
|
+
});
|
|
981
|
+
|
|
933
982
|
// 5) settings.json — MERGE the shipped hooks + env (add-if-absent) into the user's settings (never clobber).
|
|
934
983
|
// ALWAYS runs (isolated above) — this is what wires CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS et al.
|
|
935
984
|
step('settings', () => {
|
|
@@ -957,7 +1006,7 @@ function installFromPayload(src, cwd, options = {}) {
|
|
|
957
1006
|
}
|
|
958
1007
|
});
|
|
959
1008
|
|
|
960
|
-
// 7b) Optional semantic-code MCP. Serena is useful for
|
|
1009
|
+
// 7b) Optional semantic-code MCP. Serena is useful for large/unfamiliar code surfaces, but it must not become a hidden
|
|
961
1010
|
// dependency. The real install auto-registers it only when a `serena` executable already exists (or the caller
|
|
962
1011
|
// passes an explicit command); tests/direct installFromPayload stay deterministic unless configureSerena=true.
|
|
963
1012
|
step('serena-mcp', () => {
|
|
@@ -1120,7 +1169,7 @@ async function run() {
|
|
|
1120
1169
|
ui.warn(' Then re-run: npx @axiomatic-labs/claudeflow@latest install');
|
|
1121
1170
|
}
|
|
1122
1171
|
}
|
|
1123
|
-
ui.done(`Describe a change
|
|
1172
|
+
ui.done(`Describe a change; claudeflow will route code work through an implementation fork running ${ui.BOLD}Skill(claudeflow-implement)${ui.RESET}.`);
|
|
1124
1173
|
}
|
|
1125
1174
|
|
|
1126
1175
|
module.exports = run;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@axiomatic-labs/claudeflow",
|
|
3
|
-
"version": "2.49.
|
|
3
|
+
"version": "2.49.34",
|
|
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"
|