@claudeflows/cli 0.1.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.
- package/LICENSE +21 -0
- package/README.md +57 -0
- package/bin/claudeflows.js +2 -0
- package/dist/commands/doctor.d.ts +3 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +111 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/init.d.ts +3 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +174 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/install.d.ts +3 -0
- package/dist/commands/install.d.ts.map +1 -0
- package/dist/commands/install.js +353 -0
- package/dist/commands/install.js.map +1 -0
- package/dist/commands/license.d.ts +3 -0
- package/dist/commands/license.d.ts.map +1 -0
- package/dist/commands/license.js +167 -0
- package/dist/commands/license.js.map +1 -0
- package/dist/commands/list.d.ts +3 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +97 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/login.d.ts +3 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +144 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/publish.d.ts +3 -0
- package/dist/commands/publish.d.ts.map +1 -0
- package/dist/commands/publish.js +121 -0
- package/dist/commands/publish.js.map +1 -0
- package/dist/commands/uninstall.d.ts +3 -0
- package/dist/commands/uninstall.d.ts.map +1 -0
- package/dist/commands/uninstall.js +66 -0
- package/dist/commands/uninstall.js.map +1 -0
- package/dist/commands/update.d.ts +3 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +167 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/verify.d.ts +3 -0
- package/dist/commands/verify.d.ts.map +1 -0
- package/dist/commands/verify.js +129 -0
- package/dist/commands/verify.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +28 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/config.d.ts +10 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +37 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/doctor.d.ts +14 -0
- package/dist/lib/doctor.d.ts.map +1 -0
- package/dist/lib/doctor.js +344 -0
- package/dist/lib/doctor.js.map +1 -0
- package/dist/lib/env-manager.d.ts +10 -0
- package/dist/lib/env-manager.d.ts.map +1 -0
- package/dist/lib/env-manager.js +60 -0
- package/dist/lib/env-manager.js.map +1 -0
- package/dist/lib/installer.d.ts +3 -0
- package/dist/lib/installer.d.ts.map +1 -0
- package/dist/lib/installer.js +43 -0
- package/dist/lib/installer.js.map +1 -0
- package/dist/lib/integrity.d.ts +42 -0
- package/dist/lib/integrity.d.ts.map +1 -0
- package/dist/lib/integrity.js +119 -0
- package/dist/lib/integrity.js.map +1 -0
- package/dist/lib/license.d.ts +39 -0
- package/dist/lib/license.d.ts.map +1 -0
- package/dist/lib/license.js +108 -0
- package/dist/lib/license.js.map +1 -0
- package/dist/lib/manifest.d.ts +74 -0
- package/dist/lib/manifest.d.ts.map +1 -0
- package/dist/lib/manifest.js +47 -0
- package/dist/lib/manifest.js.map +1 -0
- package/dist/lib/mcp-setup.d.ts +18 -0
- package/dist/lib/mcp-setup.d.ts.map +1 -0
- package/dist/lib/mcp-setup.js +92 -0
- package/dist/lib/mcp-setup.js.map +1 -0
- package/dist/lib/registry.d.ts +28 -0
- package/dist/lib/registry.d.ts.map +1 -0
- package/dist/lib/registry.js +77 -0
- package/dist/lib/registry.js.map +1 -0
- package/dist/lib/skill-linker.d.ts +13 -0
- package/dist/lib/skill-linker.d.ts.map +1 -0
- package/dist/lib/skill-linker.js +134 -0
- package/dist/lib/skill-linker.js.map +1 -0
- package/package.json +49 -0
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { readFile, writeFile, symlink, unlink, readlink, mkdir, stat } from 'node:fs/promises';
|
|
2
|
+
import { join, resolve } from 'node:path';
|
|
3
|
+
import { homedir } from 'node:os';
|
|
4
|
+
import { select } from '@inquirer/prompts';
|
|
5
|
+
function getSkillsDir() {
|
|
6
|
+
return join(homedir(), '.claude', 'skills');
|
|
7
|
+
}
|
|
8
|
+
function getSkillLinksPath(installDir) {
|
|
9
|
+
return join(installDir, '.skill-links.json');
|
|
10
|
+
}
|
|
11
|
+
async function loadSkillLinks(installDir) {
|
|
12
|
+
try {
|
|
13
|
+
const raw = await readFile(getSkillLinksPath(installDir), 'utf-8');
|
|
14
|
+
return JSON.parse(raw);
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
async function saveSkillLinks(installDir, data) {
|
|
21
|
+
await writeFile(getSkillLinksPath(installDir), JSON.stringify(data, null, 2) + '\n', 'utf-8');
|
|
22
|
+
}
|
|
23
|
+
async function fileExists(path) {
|
|
24
|
+
try {
|
|
25
|
+
await stat(path);
|
|
26
|
+
return true;
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
async function isSymlink(path) {
|
|
33
|
+
try {
|
|
34
|
+
await readlink(path);
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
export async function checkCollisions(targetName) {
|
|
42
|
+
const skillsDir = getSkillsDir();
|
|
43
|
+
const targetPath = join(skillsDir, targetName);
|
|
44
|
+
if (!(await fileExists(targetPath))) {
|
|
45
|
+
return { exists: false, isLink: false };
|
|
46
|
+
}
|
|
47
|
+
if (await isSymlink(targetPath)) {
|
|
48
|
+
const linkTarget = await readlink(targetPath);
|
|
49
|
+
return { exists: true, isLink: true, linkTarget };
|
|
50
|
+
}
|
|
51
|
+
return { exists: true, isLink: false };
|
|
52
|
+
}
|
|
53
|
+
export async function backupSkill(name) {
|
|
54
|
+
const skillsDir = getSkillsDir();
|
|
55
|
+
const original = join(skillsDir, name);
|
|
56
|
+
const backupName = `${name}.backup-${Date.now()}`;
|
|
57
|
+
const backupPath = join(skillsDir, backupName);
|
|
58
|
+
const { rename } = await import('node:fs/promises');
|
|
59
|
+
await rename(original, backupPath);
|
|
60
|
+
return backupName;
|
|
61
|
+
}
|
|
62
|
+
export async function linkSkills(workflowName, skills, installDir) {
|
|
63
|
+
const skillsDir = getSkillsDir();
|
|
64
|
+
await mkdir(skillsDir, { recursive: true });
|
|
65
|
+
const linked = [];
|
|
66
|
+
const skipped = [];
|
|
67
|
+
const links = [];
|
|
68
|
+
for (const skill of skills) {
|
|
69
|
+
const linkedName = `${workflowName}-${skill.name}`;
|
|
70
|
+
const linkPath = join(skillsDir, linkedName);
|
|
71
|
+
const targetPath = resolve(installDir, skill.path);
|
|
72
|
+
// Check for the target file
|
|
73
|
+
if (!(await fileExists(targetPath))) {
|
|
74
|
+
skipped.push(`${linkedName} (source not found: ${skill.path})`);
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
const collision = await checkCollisions(linkedName);
|
|
78
|
+
if (collision.exists) {
|
|
79
|
+
const action = await select({
|
|
80
|
+
message: `Skill "${linkedName}" already exists${collision.isLink ? ` (linked to ${collision.linkTarget})` : ''}. What should we do?`,
|
|
81
|
+
choices: [
|
|
82
|
+
{ value: 'replace', name: 'Replace (backup existing)' },
|
|
83
|
+
{ value: 'overwrite', name: 'Overwrite without backup' },
|
|
84
|
+
{ value: 'skip', name: 'Skip' },
|
|
85
|
+
],
|
|
86
|
+
});
|
|
87
|
+
if (action === 'skip') {
|
|
88
|
+
skipped.push(linkedName);
|
|
89
|
+
continue;
|
|
90
|
+
}
|
|
91
|
+
if (action === 'replace') {
|
|
92
|
+
await backupSkill(linkedName);
|
|
93
|
+
}
|
|
94
|
+
// Remove existing before creating new symlink
|
|
95
|
+
try {
|
|
96
|
+
await unlink(linkPath);
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
// Ignore if already gone
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
await symlink(targetPath, linkPath);
|
|
103
|
+
linked.push(linkedName);
|
|
104
|
+
links.push({ skillName: skill.name, linkedName, targetPath });
|
|
105
|
+
}
|
|
106
|
+
// Save link tracking file
|
|
107
|
+
const linksFile = { workflowName, links };
|
|
108
|
+
await saveSkillLinks(installDir, linksFile);
|
|
109
|
+
return { linked, skipped };
|
|
110
|
+
}
|
|
111
|
+
export async function unlinkSkills(workflowName, installDir) {
|
|
112
|
+
const linksData = await loadSkillLinks(installDir);
|
|
113
|
+
const removed = [];
|
|
114
|
+
if (!linksData) {
|
|
115
|
+
return removed;
|
|
116
|
+
}
|
|
117
|
+
const skillsDir = getSkillsDir();
|
|
118
|
+
for (const link of linksData.links) {
|
|
119
|
+
const linkPath = join(skillsDir, link.linkedName);
|
|
120
|
+
try {
|
|
121
|
+
// Verify it's a symlink pointing to our install before removing
|
|
122
|
+
const target = await readlink(linkPath);
|
|
123
|
+
if (resolve(target) === resolve(link.targetPath)) {
|
|
124
|
+
await unlink(linkPath);
|
|
125
|
+
removed.push(link.linkedName);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
catch {
|
|
129
|
+
// Link already gone — that's fine
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return removed;
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=skill-linker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-linker.js","sourceRoot":"","sources":["../../src/lib/skill-linker.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@claudeflows/cli",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "CLI tool for installing and managing Claude Code agentic workflows",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"claudeflows": "./bin/claudeflows.js"
|
|
8
|
+
},
|
|
9
|
+
"main": "./dist/index.js",
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"scripts": {
|
|
12
|
+
"build": "tsc",
|
|
13
|
+
"dev": "tsc --watch",
|
|
14
|
+
"lint": "tsc --noEmit",
|
|
15
|
+
"prepublishOnly": "npm run build"
|
|
16
|
+
},
|
|
17
|
+
"files": [
|
|
18
|
+
"dist/",
|
|
19
|
+
"bin/",
|
|
20
|
+
"README.md",
|
|
21
|
+
"LICENSE"
|
|
22
|
+
],
|
|
23
|
+
"repository": {
|
|
24
|
+
"type": "git",
|
|
25
|
+
"url": "https://github.com/mikethepurple/claudeflows"
|
|
26
|
+
},
|
|
27
|
+
"homepage": "https://github.com/mikethepurple/claudeflows",
|
|
28
|
+
"bugs": "https://github.com/mikethepurple/claudeflows/issues",
|
|
29
|
+
"dependencies": {
|
|
30
|
+
"commander": "^13.0.0",
|
|
31
|
+
"chalk": "^5.4.0",
|
|
32
|
+
"ora": "^8.2.0",
|
|
33
|
+
"inquirer": "^12.3.0",
|
|
34
|
+
"semver": "^7.6.0",
|
|
35
|
+
"ajv": "^8.17.0",
|
|
36
|
+
"tar": "^7.4.0"
|
|
37
|
+
},
|
|
38
|
+
"devDependencies": {
|
|
39
|
+
"@types/node": "^22.0.0",
|
|
40
|
+
"@types/semver": "^7.5.0",
|
|
41
|
+
"@types/inquirer": "^9.0.0",
|
|
42
|
+
"typescript": "^5.7.0"
|
|
43
|
+
},
|
|
44
|
+
"engines": {
|
|
45
|
+
"node": ">=18.0.0"
|
|
46
|
+
},
|
|
47
|
+
"keywords": ["claude", "workflows", "agentic", "marketplace", "cli"],
|
|
48
|
+
"license": "MIT"
|
|
49
|
+
}
|