@emmraan/ai-skills 0.0.3 → 1.0.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 +41 -0
- package/dist/commands/install.d.ts +10 -1
- package/dist/commands/install.d.ts.map +1 -1
- package/dist/commands/install.js +123 -5
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/remove.d.ts +10 -1
- package/dist/commands/remove.d.ts.map +1 -1
- package/dist/commands/remove.js +126 -6
- package/dist/commands/remove.js.map +1 -1
- package/dist/core/config.d.ts +13 -2
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +28 -4
- package/dist/core/config.js.map +1 -1
- package/dist/core/installer.d.ts +3 -2
- package/dist/core/installer.d.ts.map +1 -1
- package/dist/core/installer.js +10 -8
- package/dist/core/installer.js.map +1 -1
- package/dist/core/lockfile.d.ts +1 -0
- package/dist/core/lockfile.d.ts.map +1 -1
- package/dist/core/lockfile.js +10 -0
- package/dist/core/lockfile.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +30 -8
- package/dist/index.js.map +1 -1
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +5 -4
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/ui.d.ts +9 -0
- package/dist/utils/ui.d.ts.map +1 -0
- package/dist/utils/ui.js +48 -0
- package/dist/utils/ui.js.map +1 -0
- package/package.json +6 -1
- package/src/commands/install.ts +149 -5
- package/src/commands/remove.ts +156 -6
- package/src/core/config.ts +50 -4
- package/src/core/installer.ts +18 -9
- package/src/core/lockfile.ts +15 -0
- package/src/index.ts +31 -8
- package/src/utils/logger.ts +6 -4
- package/src/utils/ui.ts +57 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 md εmrαη
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -6,11 +6,52 @@ Install framework-agnostic `SKILLS.md` files for AI agents.
|
|
|
6
6
|
|
|
7
7
|
- `npx @emmraan/ai-skills react` - Install React skill
|
|
8
8
|
- `npx @emmraan/ai-skills install react` - Install React skill (explicit command)
|
|
9
|
+
- `npx @emmraan/ai-skills react --local` - Install to local project (`process.cwd()`)
|
|
10
|
+
- `npx @emmraan/ai-skills react --platform claude,gemini` - Install globally to selected platforms
|
|
11
|
+
- `npx @emmraan/ai-skills react --local --platform claude,gemini` - Install locally to selected platforms
|
|
12
|
+
- `npx @emmraan/ai-skills react --global --all` - Install globally to all platforms
|
|
9
13
|
- `npx @emmraan/ai-skills list` - List available and installed skills
|
|
10
14
|
- `npx @emmraan/ai-skills update` - Update all installed skills
|
|
11
15
|
- `npx @emmraan/ai-skills remove react` - Remove React skill
|
|
16
|
+
- `npx @emmraan/ai-skills remove react --local --platform claude` - Remove from selected local platforms
|
|
17
|
+
- `npx @emmraan/ai-skills remove react --global --all` - Remove from all global platforms
|
|
12
18
|
- `npx @emmraan/ai-skills generate-local` - Run local backend generator
|
|
13
19
|
|
|
20
|
+
## Interactive flow
|
|
21
|
+
|
|
22
|
+
When you run `npx @emmraan/ai-skills <skill>` without install flags, the CLI prompts for:
|
|
23
|
+
|
|
24
|
+
1. Install location: Local (current project) or Global (agent platforms)
|
|
25
|
+
2. Install target: All platforms or specific platforms (for both Local and Global)
|
|
26
|
+
|
|
27
|
+
When you run `npx @emmraan/ai-skills remove <skill>` without remove flags, the CLI prompts for:
|
|
28
|
+
|
|
29
|
+
1. Remove location: Local (current project) or Global (agent platforms)
|
|
30
|
+
2. Remove target: All platforms or specific platforms (for both Local and Global)
|
|
31
|
+
|
|
32
|
+
Supported non-interactive install flags:
|
|
33
|
+
|
|
34
|
+
- `--local`
|
|
35
|
+
- `--global`
|
|
36
|
+
- `--platform <name[,name]>`
|
|
37
|
+
- `--all`
|
|
38
|
+
|
|
39
|
+
Supported non-interactive remove flags:
|
|
40
|
+
|
|
41
|
+
- `--local`
|
|
42
|
+
- `--global`
|
|
43
|
+
- `--platform <name[,name]>`
|
|
44
|
+
- `--all`
|
|
45
|
+
|
|
46
|
+
Default behavior remains global + all platforms.
|
|
47
|
+
|
|
48
|
+
## UX improvements
|
|
49
|
+
|
|
50
|
+
- Subtle welcome banner in TTY sessions
|
|
51
|
+
- Colored logs for info/success/warn/error states
|
|
52
|
+
- Spinners during install/remove operations
|
|
53
|
+
- Interactive prompts via `inquirer`
|
|
54
|
+
|
|
14
55
|
## Publish to npm
|
|
15
56
|
|
|
16
57
|
This package is the publishable CLI package for the `ai-skills` command.
|
|
@@ -1,2 +1,11 @@
|
|
|
1
|
-
|
|
1
|
+
import { type InstallOptions } from '../core/config.js';
|
|
2
|
+
export interface CliInstallFlags {
|
|
3
|
+
local?: boolean;
|
|
4
|
+
global?: boolean;
|
|
5
|
+
all?: boolean;
|
|
6
|
+
platforms?: string[];
|
|
7
|
+
}
|
|
8
|
+
export declare function parseInstallFlags(args: string[]): CliInstallFlags;
|
|
9
|
+
export declare function resolveInstallOptionsFromFlags(flags: CliInstallFlags, interactive: boolean): Promise<InstallOptions>;
|
|
10
|
+
export declare function install(skillName: string, options?: InstallOptions): Promise<boolean>;
|
|
2
11
|
//# sourceMappingURL=install.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAGA,OAAO,EAAmB,KAAK,cAAc,EAAwB,MAAM,mBAAmB,CAAC;AAM/F,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,eAAe,CA0BjE;AAED,wBAAsB,8BAA8B,CAClD,KAAK,EAAE,eAAe,EACtB,WAAW,EAAE,OAAO,GACnB,OAAO,CAAC,cAAc,CAAC,CAyCzB;AAyDD,wBAAsB,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,OAAO,CAAC,CA6B/F"}
|
package/dist/commands/install.js
CHANGED
|
@@ -1,26 +1,144 @@
|
|
|
1
1
|
import { fetchSkill, fetchRegistryIndex } from '../core/downloader.js';
|
|
2
2
|
import { installSkill } from '../core/installer.js';
|
|
3
3
|
import { addSkillToLockfile } from '../core/lockfile.js';
|
|
4
|
+
import { AGENT_PLATFORMS } from '../core/config.js';
|
|
4
5
|
import { sha256 } from '../utils/hash.js';
|
|
5
|
-
import { error, success
|
|
6
|
-
|
|
6
|
+
import { error, success } from '../utils/logger.js';
|
|
7
|
+
import inquirer from 'inquirer';
|
|
8
|
+
import { ui } from '../utils/ui.js';
|
|
9
|
+
export function parseInstallFlags(args) {
|
|
10
|
+
const flags = {};
|
|
11
|
+
for (let i = 0; i < args.length; i++) {
|
|
12
|
+
const arg = args[i];
|
|
13
|
+
if (arg === '--local') {
|
|
14
|
+
flags.local = true;
|
|
15
|
+
}
|
|
16
|
+
else if (arg === '--global') {
|
|
17
|
+
flags.global = true;
|
|
18
|
+
}
|
|
19
|
+
else if (arg === '--all') {
|
|
20
|
+
flags.all = true;
|
|
21
|
+
}
|
|
22
|
+
else if (arg === '--platform') {
|
|
23
|
+
const value = args[i + 1];
|
|
24
|
+
if (!value || value.startsWith('--')) {
|
|
25
|
+
throw new Error('Missing value for --platform. Example: --platform claude,gemini');
|
|
26
|
+
}
|
|
27
|
+
i++;
|
|
28
|
+
const parsed = value
|
|
29
|
+
.split(',')
|
|
30
|
+
.map((p) => p.trim())
|
|
31
|
+
.filter(Boolean);
|
|
32
|
+
flags.platforms = [...(flags.platforms ?? []), ...parsed];
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return flags;
|
|
36
|
+
}
|
|
37
|
+
export async function resolveInstallOptionsFromFlags(flags, interactive) {
|
|
38
|
+
if (flags.local && flags.global) {
|
|
39
|
+
throw new Error('Use only one of --local or --global');
|
|
40
|
+
}
|
|
41
|
+
const hasAnyFlag = Boolean(flags.local || flags.global || flags.all || (flags.platforms ?? []).length);
|
|
42
|
+
if (flags.local) {
|
|
43
|
+
return {
|
|
44
|
+
location: 'local',
|
|
45
|
+
all: flags.all || !flags.platforms || flags.platforms.length === 0,
|
|
46
|
+
platforms: flags.platforms,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
if (flags.global) {
|
|
50
|
+
return {
|
|
51
|
+
location: 'global',
|
|
52
|
+
all: flags.all || !flags.platforms || flags.platforms.length === 0,
|
|
53
|
+
platforms: flags.platforms,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
if ((flags.platforms ?? []).length > 0 || flags.all) {
|
|
57
|
+
return {
|
|
58
|
+
location: 'global',
|
|
59
|
+
all: flags.all,
|
|
60
|
+
platforms: flags.platforms,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
if (!hasAnyFlag) {
|
|
64
|
+
if (interactive && process.stdin.isTTY && process.stdout.isTTY) {
|
|
65
|
+
return promptInstallOptions();
|
|
66
|
+
}
|
|
67
|
+
return { location: 'global', all: true };
|
|
68
|
+
}
|
|
69
|
+
return { location: 'global', all: true };
|
|
70
|
+
}
|
|
71
|
+
async function promptInstallOptions() {
|
|
72
|
+
const { location } = await inquirer.prompt([
|
|
73
|
+
{
|
|
74
|
+
type: 'list',
|
|
75
|
+
name: 'location',
|
|
76
|
+
message: 'Install location',
|
|
77
|
+
choices: [
|
|
78
|
+
{ name: 'Local (current project)', value: 'local' },
|
|
79
|
+
{ name: 'Global (agent platforms)', value: 'global' },
|
|
80
|
+
],
|
|
81
|
+
default: 'global',
|
|
82
|
+
},
|
|
83
|
+
]);
|
|
84
|
+
const { target } = await inquirer.prompt([
|
|
85
|
+
{
|
|
86
|
+
type: 'list',
|
|
87
|
+
name: 'target',
|
|
88
|
+
message: `${location === 'local' ? 'Local' : 'Global'} install target`,
|
|
89
|
+
choices: [
|
|
90
|
+
{ name: 'All platforms', value: 'all' },
|
|
91
|
+
{ name: 'Specific platforms', value: 'specific' },
|
|
92
|
+
],
|
|
93
|
+
default: 'all',
|
|
94
|
+
},
|
|
95
|
+
]);
|
|
96
|
+
if (target === 'all') {
|
|
97
|
+
return { location, all: true };
|
|
98
|
+
}
|
|
99
|
+
const platformChoices = AGENT_PLATFORMS.map((platform) => {
|
|
100
|
+
const value = platform.replace(/^\./, '');
|
|
101
|
+
return { name: value, value };
|
|
102
|
+
});
|
|
103
|
+
const { platforms } = await inquirer.prompt([
|
|
104
|
+
{
|
|
105
|
+
type: 'checkbox',
|
|
106
|
+
name: 'platforms',
|
|
107
|
+
message: 'Select target platforms',
|
|
108
|
+
choices: platformChoices,
|
|
109
|
+
pageSize: 10,
|
|
110
|
+
validate: (value) => value.length > 0 ? true : 'Please select at least one platform.',
|
|
111
|
+
},
|
|
112
|
+
]);
|
|
113
|
+
return {
|
|
114
|
+
location,
|
|
115
|
+
all: false,
|
|
116
|
+
platforms,
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
export async function install(skillName, options = {}) {
|
|
7
120
|
try {
|
|
8
|
-
|
|
121
|
+
ui.startSpinner(`Fetching ${skillName}...`);
|
|
9
122
|
const skillContent = await fetchSkill(skillName);
|
|
123
|
+
ui.stopSpinnerSuccess(`Fetched ${skillName}`);
|
|
10
124
|
const hash = sha256(skillContent);
|
|
11
|
-
|
|
12
|
-
const installPaths = await installSkill(skillName, skillContent);
|
|
125
|
+
ui.startSpinner(`Installing ${skillName}...`);
|
|
126
|
+
const installPaths = await installSkill(skillName, skillContent, options);
|
|
127
|
+
ui.stopSpinnerSuccess(`Installed files for ${skillName}`);
|
|
13
128
|
if (installPaths.length === 0) {
|
|
14
129
|
error(`Failed to install ${skillName} to any location`);
|
|
15
130
|
return false;
|
|
16
131
|
}
|
|
132
|
+
ui.startSpinner(`Updating lockfile for ${skillName}...`);
|
|
17
133
|
const index = await fetchRegistryIndex();
|
|
18
134
|
const skillVersion = index.skills[skillName]?.version || 'unknown';
|
|
19
135
|
await addSkillToLockfile(skillName, skillVersion, hash, installPaths);
|
|
136
|
+
ui.stopSpinnerSuccess(`Updated lockfile for ${skillName}`);
|
|
20
137
|
success(`Installed ${skillName} (${skillVersion}) to ${installPaths.length} location(s)`);
|
|
21
138
|
return true;
|
|
22
139
|
}
|
|
23
140
|
catch (err) {
|
|
141
|
+
ui.stopSpinner();
|
|
24
142
|
error(`Failed to install ${skillName}: ${err instanceof Error ? err.message : String(err)}`);
|
|
25
143
|
return false;
|
|
26
144
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,11 @@
|
|
|
1
|
-
|
|
1
|
+
import { type InstallOptions } from '../core/config.js';
|
|
2
|
+
export interface CliRemoveFlags {
|
|
3
|
+
local?: boolean;
|
|
4
|
+
global?: boolean;
|
|
5
|
+
all?: boolean;
|
|
6
|
+
platforms?: string[];
|
|
7
|
+
}
|
|
8
|
+
export declare function parseRemoveFlags(args: string[]): CliRemoveFlags;
|
|
9
|
+
export declare function resolveRemoveOptionsFromFlags(flags: CliRemoveFlags, interactive: boolean): Promise<InstallOptions>;
|
|
10
|
+
export declare function remove(skillName: string, options?: InstallOptions): Promise<boolean>;
|
|
2
11
|
//# sourceMappingURL=remove.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remove.d.ts","sourceRoot":"","sources":["../../src/commands/remove.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"remove.d.ts","sourceRoot":"","sources":["../../src/commands/remove.ts"],"names":[],"mappings":"AAMA,OAAO,EAAyC,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAK/F,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,cAAc,CA0B/D;AAED,wBAAsB,6BAA6B,CACjD,KAAK,EAAE,cAAc,EACrB,WAAW,EAAE,OAAO,GACnB,OAAO,CAAC,cAAc,CAAC,CAyCzB;AAuDD,wBAAsB,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,OAAO,CAAC,CA0B9F"}
|
package/dist/commands/remove.js
CHANGED
|
@@ -1,20 +1,140 @@
|
|
|
1
1
|
import { removeSkill } from '../core/installer.js';
|
|
2
|
-
import { removeSkillFromLockfile, getSkillEntry } from '../core/lockfile.js';
|
|
2
|
+
import { removeSkillFromLockfile, getSkillEntry, updateSkillInstallPathsInLockfile, } from '../core/lockfile.js';
|
|
3
|
+
import { AGENT_PLATFORMS } from '../core/config.js';
|
|
3
4
|
import { error, success, info } from '../utils/logger.js';
|
|
4
|
-
|
|
5
|
+
import { ui } from '../utils/ui.js';
|
|
6
|
+
import inquirer from 'inquirer';
|
|
7
|
+
export function parseRemoveFlags(args) {
|
|
8
|
+
const flags = {};
|
|
9
|
+
for (let i = 0; i < args.length; i++) {
|
|
10
|
+
const arg = args[i];
|
|
11
|
+
if (arg === '--local') {
|
|
12
|
+
flags.local = true;
|
|
13
|
+
}
|
|
14
|
+
else if (arg === '--global') {
|
|
15
|
+
flags.global = true;
|
|
16
|
+
}
|
|
17
|
+
else if (arg === '--all') {
|
|
18
|
+
flags.all = true;
|
|
19
|
+
}
|
|
20
|
+
else if (arg === '--platform') {
|
|
21
|
+
const value = args[i + 1];
|
|
22
|
+
if (!value || value.startsWith('--')) {
|
|
23
|
+
throw new Error('Missing value for --platform. Example: --platform claude,gemini');
|
|
24
|
+
}
|
|
25
|
+
i++;
|
|
26
|
+
const parsed = value
|
|
27
|
+
.split(',')
|
|
28
|
+
.map((p) => p.trim())
|
|
29
|
+
.filter(Boolean);
|
|
30
|
+
flags.platforms = [...(flags.platforms ?? []), ...parsed];
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return flags;
|
|
34
|
+
}
|
|
35
|
+
export async function resolveRemoveOptionsFromFlags(flags, interactive) {
|
|
36
|
+
if (flags.local && flags.global) {
|
|
37
|
+
throw new Error('Use only one of --local or --global');
|
|
38
|
+
}
|
|
39
|
+
const hasAnyFlag = Boolean(flags.local || flags.global || flags.all || (flags.platforms ?? []).length);
|
|
40
|
+
if (flags.local) {
|
|
41
|
+
return {
|
|
42
|
+
location: 'local',
|
|
43
|
+
all: flags.all || !flags.platforms || flags.platforms.length === 0,
|
|
44
|
+
platforms: flags.platforms,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
if (flags.global) {
|
|
48
|
+
return {
|
|
49
|
+
location: 'global',
|
|
50
|
+
all: flags.all || !flags.platforms || flags.platforms.length === 0,
|
|
51
|
+
platforms: flags.platforms,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
if ((flags.platforms ?? []).length > 0 || flags.all) {
|
|
55
|
+
return {
|
|
56
|
+
location: 'global',
|
|
57
|
+
all: flags.all,
|
|
58
|
+
platforms: flags.platforms,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
if (!hasAnyFlag) {
|
|
62
|
+
if (interactive && process.stdin.isTTY && process.stdout.isTTY) {
|
|
63
|
+
return promptRemoveOptions();
|
|
64
|
+
}
|
|
65
|
+
return { location: 'global', all: true };
|
|
66
|
+
}
|
|
67
|
+
return { location: 'global', all: true };
|
|
68
|
+
}
|
|
69
|
+
async function promptRemoveOptions() {
|
|
70
|
+
const { location } = await inquirer.prompt([
|
|
71
|
+
{
|
|
72
|
+
type: 'list',
|
|
73
|
+
name: 'location',
|
|
74
|
+
message: 'Remove from location',
|
|
75
|
+
choices: [
|
|
76
|
+
{ name: 'Local (current project)', value: 'local' },
|
|
77
|
+
{ name: 'Global (agent platforms)', value: 'global' },
|
|
78
|
+
],
|
|
79
|
+
default: 'global',
|
|
80
|
+
},
|
|
81
|
+
]);
|
|
82
|
+
const { target } = await inquirer.prompt([
|
|
83
|
+
{
|
|
84
|
+
type: 'list',
|
|
85
|
+
name: 'target',
|
|
86
|
+
message: `${location === 'local' ? 'Local' : 'Global'} remove target`,
|
|
87
|
+
choices: [
|
|
88
|
+
{ name: 'All platforms', value: 'all' },
|
|
89
|
+
{ name: 'Specific platforms', value: 'specific' },
|
|
90
|
+
],
|
|
91
|
+
default: 'all',
|
|
92
|
+
},
|
|
93
|
+
]);
|
|
94
|
+
if (target === 'all') {
|
|
95
|
+
return { location, all: true };
|
|
96
|
+
}
|
|
97
|
+
const platformChoices = AGENT_PLATFORMS.map((platform) => {
|
|
98
|
+
const value = platform.replace(/^\./, '');
|
|
99
|
+
return { name: value, value };
|
|
100
|
+
});
|
|
101
|
+
const { platforms } = await inquirer.prompt([
|
|
102
|
+
{
|
|
103
|
+
type: 'checkbox',
|
|
104
|
+
name: 'platforms',
|
|
105
|
+
message: 'Select target platforms',
|
|
106
|
+
choices: platformChoices,
|
|
107
|
+
pageSize: 10,
|
|
108
|
+
},
|
|
109
|
+
]);
|
|
110
|
+
return {
|
|
111
|
+
location,
|
|
112
|
+
all: platforms.length === 0,
|
|
113
|
+
platforms,
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
export async function remove(skillName, options = {}) {
|
|
5
117
|
try {
|
|
6
118
|
const entry = await getSkillEntry(skillName);
|
|
7
119
|
if (!entry) {
|
|
8
120
|
info(`${skillName} is not installed`);
|
|
9
121
|
return true;
|
|
10
122
|
}
|
|
11
|
-
|
|
12
|
-
await removeSkill(skillName);
|
|
13
|
-
|
|
14
|
-
|
|
123
|
+
ui.startSpinner(`Removing ${skillName}...`);
|
|
124
|
+
const removedPaths = await removeSkill(skillName, options);
|
|
125
|
+
const remaining = entry.installPaths.filter((p) => !removedPaths.includes(p));
|
|
126
|
+
if (remaining.length === 0) {
|
|
127
|
+
await removeSkillFromLockfile(skillName);
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
await updateSkillInstallPathsInLockfile(skillName, remaining);
|
|
131
|
+
}
|
|
132
|
+
ui.stopSpinnerSuccess(`Removed files for ${skillName}`);
|
|
133
|
+
success(`Removed ${skillName} from ${removedPaths.length} location(s)`);
|
|
15
134
|
return true;
|
|
16
135
|
}
|
|
17
136
|
catch (err) {
|
|
137
|
+
ui.stopSpinner();
|
|
18
138
|
error(`Failed to remove ${skillName}: ${err instanceof Error ? err.message : String(err)}`);
|
|
19
139
|
return false;
|
|
20
140
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remove.js","sourceRoot":"","sources":["../../src/commands/remove.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,
|
|
1
|
+
{"version":3,"file":"remove.js","sourceRoot":"","sources":["../../src/commands/remove.ts"],"names":[],"mappings":"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"}
|
package/dist/core/config.d.ts
CHANGED
|
@@ -1,9 +1,20 @@
|
|
|
1
1
|
export declare const REGISTRY_URL = "https://raw.githubusercontent.com/Emmraan/ai-skills/main/packages/skills-registry";
|
|
2
2
|
export declare const REGISTRY_INDEX_URL = "https://raw.githubusercontent.com/Emmraan/ai-skills/main/packages/skills-registry/skills/.index.json";
|
|
3
3
|
export declare const AGENT_PLATFORMS: string[];
|
|
4
|
+
export type InstallLocation = 'local' | 'global';
|
|
5
|
+
export interface InstallOptions {
|
|
6
|
+
location?: InstallLocation;
|
|
7
|
+
platforms?: string[];
|
|
8
|
+
all?: boolean;
|
|
9
|
+
}
|
|
10
|
+
export interface ResolvedInstallOptions {
|
|
11
|
+
location: InstallLocation;
|
|
12
|
+
platforms: string[];
|
|
13
|
+
}
|
|
4
14
|
export declare function getAgentPlatformDirs(): string[];
|
|
15
|
+
export declare function resolveInstallOptions(options?: InstallOptions): ResolvedInstallOptions;
|
|
5
16
|
export declare function getLockfilePath(): string;
|
|
6
|
-
export declare function getSkillInstallPaths(skillName: string): string[];
|
|
7
|
-
export declare function getSkillMetadataPaths(skillName: string): string[];
|
|
17
|
+
export declare function getSkillInstallPaths(skillName: string, options?: InstallOptions): string[];
|
|
18
|
+
export declare function getSkillMetadataPaths(skillName: string, options?: InstallOptions): string[];
|
|
8
19
|
export declare const IS_WINDOWS: boolean;
|
|
9
20
|
//# sourceMappingURL=config.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,YAAY,sFAC4D,CAAC;AAEtF,eAAO,MAAM,kBAAkB,yGAAuC,CAAC;AAEvE,eAAO,MAAM,eAAe,UAAsE,CAAC;AAEnG,wBAAgB,oBAAoB,IAAI,MAAM,EAAE,CAG/C;AAED,wBAAgB,eAAe,IAAI,MAAM,CAGxC;AAED,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,YAAY,sFAC4D,CAAC;AAEtF,eAAO,MAAM,kBAAkB,yGAAuC,CAAC;AAEvE,eAAO,MAAM,eAAe,UAAsE,CAAC;AAEnG,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEjD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,eAAe,CAAC;IAC1B,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,wBAAgB,oBAAoB,IAAI,MAAM,EAAE,CAG/C;AAED,wBAAgB,qBAAqB,CAAC,OAAO,GAAE,cAAmB,GAAG,sBAAsB,CAiB1F;AAYD,wBAAgB,eAAe,IAAI,MAAM,CAGxC;AAED,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,MAAM,EAAE,CAG9F;AAED,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,MAAM,EAAE,CAK/F;AAED,eAAO,MAAM,UAAU,SAAyB,CAAC"}
|
package/dist/core/config.js
CHANGED
|
@@ -7,15 +7,39 @@ export function getAgentPlatformDirs() {
|
|
|
7
7
|
const home = homedir();
|
|
8
8
|
return AGENT_PLATFORMS.map((p) => join(home, p, 'skills'));
|
|
9
9
|
}
|
|
10
|
+
export function resolveInstallOptions(options = {}) {
|
|
11
|
+
const location = options.location ?? 'global';
|
|
12
|
+
const normalized = (options.platforms ?? []).map((p) => normalizePlatformName(p));
|
|
13
|
+
const unique = [...new Set(normalized)];
|
|
14
|
+
if (options.all || unique.length === 0) {
|
|
15
|
+
return { location, platforms: [...AGENT_PLATFORMS] };
|
|
16
|
+
}
|
|
17
|
+
for (const p of unique) {
|
|
18
|
+
if (!AGENT_PLATFORMS.includes(p)) {
|
|
19
|
+
throw new Error(`Unknown platform: ${p}. Supported: ${AGENT_PLATFORMS.join(', ')}`);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
return { location, platforms: unique };
|
|
23
|
+
}
|
|
24
|
+
function normalizePlatformName(name) {
|
|
25
|
+
const trimmed = name.trim();
|
|
26
|
+
return trimmed.startsWith('.') ? trimmed : `.${trimmed}`;
|
|
27
|
+
}
|
|
28
|
+
function getSelectedPlatformDirs(resolved) {
|
|
29
|
+
const baseDir = resolved.location === 'local' ? process.cwd() : homedir();
|
|
30
|
+
return resolved.platforms.map((p) => join(baseDir, p, 'skills'));
|
|
31
|
+
}
|
|
10
32
|
export function getLockfilePath() {
|
|
11
33
|
const home = homedir();
|
|
12
34
|
return join(home, '.ai-skills', '.skill-lock.json');
|
|
13
35
|
}
|
|
14
|
-
export function getSkillInstallPaths(skillName) {
|
|
15
|
-
|
|
36
|
+
export function getSkillInstallPaths(skillName, options = {}) {
|
|
37
|
+
const resolved = resolveInstallOptions(options);
|
|
38
|
+
return getSelectedPlatformDirs(resolved).map((dir) => join(dir, skillName, 'SKILLS.md'));
|
|
16
39
|
}
|
|
17
|
-
export function getSkillMetadataPaths(skillName) {
|
|
18
|
-
|
|
40
|
+
export function getSkillMetadataPaths(skillName, options = {}) {
|
|
41
|
+
const resolved = resolveInstallOptions(options);
|
|
42
|
+
return getSelectedPlatformDirs(resolved).map((dir) => join(dir, skillName, '.skill-metadata.json'));
|
|
19
43
|
}
|
|
20
44
|
export const IS_WINDOWS = platform() === 'win32';
|
|
21
45
|
//# sourceMappingURL=config.js.map
|
package/dist/core/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,MAAM,CAAC,MAAM,YAAY,GACvB,mFAAmF,CAAC;AAEtF,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,YAAY,qBAAqB,CAAC;AAEvE,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"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"}
|
package/dist/core/installer.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
export declare function
|
|
1
|
+
import { type InstallOptions } from './config.js';
|
|
2
|
+
export declare function installSkill(skillName: string, skillContent: string, options?: InstallOptions): Promise<string[]>;
|
|
3
|
+
export declare function removeSkill(skillName: string, options?: InstallOptions): Promise<string[]>;
|
|
3
4
|
export declare function skillExists(skillName: string): Promise<boolean>;
|
|
4
5
|
export declare function readSkill(skillName: string): Promise<string | null>;
|
|
5
6
|
//# sourceMappingURL=installer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"installer.d.ts","sourceRoot":"","sources":["../../src/core/installer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"installer.d.ts","sourceRoot":"","sources":["../../src/core/installer.ts"],"names":[],"mappings":"AAEA,OAAO,EAA+C,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAI/F,wBAAsB,YAAY,CAChC,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,MAAM,EAAE,CAAC,CA4CnB;AAED,wBAAsB,WAAW,CAC/B,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,MAAM,EAAE,CAAC,CAqBnB;AAED,wBAAsB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAarE;AAED,wBAAsB,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAYzE"}
|
package/dist/core/installer.js
CHANGED
|
@@ -3,9 +3,9 @@ import { dirname } from 'path';
|
|
|
3
3
|
import { getSkillInstallPaths, getSkillMetadataPaths } from './config.js';
|
|
4
4
|
import { sha256 } from '../utils/hash.js';
|
|
5
5
|
import { info, warn } from '../utils/logger.js';
|
|
6
|
-
export async function installSkill(skillName, skillContent) {
|
|
7
|
-
const installPaths = getSkillInstallPaths(skillName);
|
|
8
|
-
const metadataPaths = getSkillMetadataPaths(skillName);
|
|
6
|
+
export async function installSkill(skillName, skillContent, options = {}) {
|
|
7
|
+
const installPaths = getSkillInstallPaths(skillName, options);
|
|
8
|
+
const metadataPaths = getSkillMetadataPaths(skillName, options);
|
|
9
9
|
const installedPaths = [];
|
|
10
10
|
const installedMetadataPaths = [];
|
|
11
11
|
const hash = sha256(skillContent);
|
|
@@ -36,21 +36,23 @@ export async function installSkill(skillName, skillContent) {
|
|
|
36
36
|
}
|
|
37
37
|
return installedPaths;
|
|
38
38
|
}
|
|
39
|
-
export async function removeSkill(skillName) {
|
|
40
|
-
const installPaths = getSkillInstallPaths(skillName);
|
|
41
|
-
const metadataPaths = getSkillMetadataPaths(skillName);
|
|
39
|
+
export async function removeSkill(skillName, options = {}) {
|
|
40
|
+
const installPaths = getSkillInstallPaths(skillName, options);
|
|
41
|
+
const metadataPaths = getSkillMetadataPaths(skillName, options);
|
|
42
42
|
const removedPaths = [];
|
|
43
43
|
for (let i = 0; i < installPaths.length; i++) {
|
|
44
44
|
const skillPath = installPaths[i];
|
|
45
45
|
const metadataPath = metadataPaths[i];
|
|
46
|
+
const skillDir = dirname(skillPath);
|
|
46
47
|
try {
|
|
47
48
|
await rm(skillPath, { force: true });
|
|
48
49
|
await rm(metadataPath, { force: true });
|
|
50
|
+
await rm(skillDir, { recursive: true, force: true });
|
|
49
51
|
removedPaths.push(skillPath);
|
|
50
|
-
info(`Removed ${
|
|
52
|
+
info(`Removed ${skillDir}`);
|
|
51
53
|
}
|
|
52
54
|
catch (err) {
|
|
53
|
-
warn(`Failed to remove ${
|
|
55
|
+
warn(`Failed to remove ${skillDir}: ${err instanceof Error ? err.message : String(err)}`);
|
|
54
56
|
}
|
|
55
57
|
}
|
|
56
58
|
return removedPaths;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"installer.js","sourceRoot":"","sources":["../../src/core/installer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,
|
|
1
|
+
{"version":3,"file":"installer.js","sourceRoot":"","sources":["../../src/core/installer.ts"],"names":[],"mappings":"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"}
|
package/dist/core/lockfile.d.ts
CHANGED
|
@@ -13,6 +13,7 @@ export declare function readLockfile(): Promise<Lockfile>;
|
|
|
13
13
|
export declare function writeLockfile(lockfile: Lockfile): Promise<void>;
|
|
14
14
|
export declare function addSkillToLockfile(skillName: string, version: string, hash: string, installPaths: string[]): Promise<void>;
|
|
15
15
|
export declare function removeSkillFromLockfile(skillName: string): Promise<void>;
|
|
16
|
+
export declare function updateSkillInstallPathsInLockfile(skillName: string, installPaths: string[]): Promise<void>;
|
|
16
17
|
export declare function getInstalledSkills(): Promise<LockfileEntry[]>;
|
|
17
18
|
export declare function getSkillEntry(skillName: string): Promise<LockfileEntry | null>;
|
|
18
19
|
//# sourceMappingURL=lockfile.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lockfile.d.ts","sourceRoot":"","sources":["../../src/core/lockfile.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,CAAC,CAAC;IACX,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;CAChD;AAOD,wBAAsB,YAAY,IAAI,OAAO,CAAC,QAAQ,CAAC,CAQtD;AAED,wBAAsB,aAAa,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAIrE;AAED,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,EAAE,GACrB,OAAO,CAAC,IAAI,CAAC,CAUf;AAED,wBAAsB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAI9E;AAED,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC,CAGnE;AAED,wBAAsB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAGpF"}
|
|
1
|
+
{"version":3,"file":"lockfile.d.ts","sourceRoot":"","sources":["../../src/core/lockfile.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,CAAC,CAAC;IACX,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;CAChD;AAOD,wBAAsB,YAAY,IAAI,OAAO,CAAC,QAAQ,CAAC,CAQtD;AAED,wBAAsB,aAAa,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAIrE;AAED,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,EAAE,GACrB,OAAO,CAAC,IAAI,CAAC,CAUf;AAED,wBAAsB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAI9E;AAED,wBAAsB,iCAAiC,CACrD,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EAAE,GACrB,OAAO,CAAC,IAAI,CAAC,CAUf;AAED,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC,CAGnE;AAED,wBAAsB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAGpF"}
|
package/dist/core/lockfile.js
CHANGED
|
@@ -36,6 +36,16 @@ export async function removeSkillFromLockfile(skillName) {
|
|
|
36
36
|
delete lockfile.installedSkills[skillName];
|
|
37
37
|
await writeLockfile(lockfile);
|
|
38
38
|
}
|
|
39
|
+
export async function updateSkillInstallPathsInLockfile(skillName, installPaths) {
|
|
40
|
+
const lockfile = await readLockfile();
|
|
41
|
+
const entry = lockfile.installedSkills[skillName];
|
|
42
|
+
if (!entry) {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
entry.installPaths = installPaths;
|
|
46
|
+
entry.timestamp = new Date().toISOString();
|
|
47
|
+
await writeLockfile(lockfile);
|
|
48
|
+
}
|
|
39
49
|
export async function getInstalledSkills() {
|
|
40
50
|
const lockfile = await readLockfile();
|
|
41
51
|
return Object.values(lockfile.installedSkills);
|