agent-skills-cli 1.0.7 → 1.0.9
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/README.md +43 -27
- package/dist/cli/agents.d.ts +10 -0
- package/dist/cli/agents.d.ts.map +1 -0
- package/dist/cli/agents.js +270 -0
- package/dist/cli/agents.js.map +1 -0
- package/dist/cli/commands/audit.d.ts +11 -0
- package/dist/cli/commands/audit.d.ts.map +1 -0
- package/dist/cli/commands/audit.js +168 -0
- package/dist/cli/commands/audit.js.map +1 -0
- package/dist/cli/commands/blueprint.d.ts +11 -0
- package/dist/cli/commands/blueprint.d.ts.map +1 -0
- package/dist/cli/commands/blueprint.js +210 -0
- package/dist/cli/commands/blueprint.js.map +1 -0
- package/dist/cli/commands/bootstrap.d.ts +11 -0
- package/dist/cli/commands/bootstrap.d.ts.map +1 -0
- package/dist/cli/commands/bootstrap.js +267 -0
- package/dist/cli/commands/bootstrap.js.map +1 -0
- package/dist/cli/commands/capture.d.ts +11 -0
- package/dist/cli/commands/capture.d.ts.map +1 -0
- package/dist/cli/commands/capture.js +109 -0
- package/dist/cli/commands/capture.js.map +1 -0
- package/dist/cli/commands/ci.d.ts +11 -0
- package/dist/cli/commands/ci.d.ts.map +1 -0
- package/dist/cli/commands/ci.js +144 -0
- package/dist/cli/commands/ci.js.map +1 -0
- package/dist/cli/commands/collab.d.ts +11 -0
- package/dist/cli/commands/collab.d.ts.map +1 -0
- package/dist/cli/commands/collab.js +196 -0
- package/dist/cli/commands/collab.js.map +1 -0
- package/dist/cli/commands/convert.d.ts +11 -0
- package/dist/cli/commands/convert.d.ts.map +1 -0
- package/dist/cli/commands/convert.js +219 -0
- package/dist/cli/commands/convert.js.map +1 -0
- package/dist/cli/commands/craft.d.ts +18 -0
- package/dist/cli/commands/craft.d.ts.map +1 -0
- package/dist/cli/commands/craft.js +205 -0
- package/dist/cli/commands/craft.js.map +1 -0
- package/dist/cli/commands/export.d.ts +9 -0
- package/dist/cli/commands/export.d.ts.map +1 -0
- package/dist/cli/commands/export.js +103 -0
- package/dist/cli/commands/export.js.map +1 -0
- package/dist/cli/commands/forge.d.ts +11 -0
- package/dist/cli/commands/forge.d.ts.map +1 -0
- package/dist/cli/commands/forge.js +152 -0
- package/dist/cli/commands/forge.js.map +1 -0
- package/dist/cli/commands/grid.d.ts +11 -0
- package/dist/cli/commands/grid.d.ts.map +1 -0
- package/dist/cli/commands/grid.js +217 -0
- package/dist/cli/commands/grid.js.map +1 -0
- package/dist/cli/commands/insight.d.ts +7 -0
- package/dist/cli/commands/insight.d.ts.map +1 -0
- package/dist/cli/commands/insight.js +71 -0
- package/dist/cli/commands/insight.js.map +1 -0
- package/dist/cli/commands/install.d.ts +6 -0
- package/dist/cli/commands/install.d.ts.map +1 -0
- package/dist/cli/commands/install.js +359 -0
- package/dist/cli/commands/install.js.map +1 -0
- package/dist/cli/commands/interactive.d.ts +7 -0
- package/dist/cli/commands/interactive.d.ts.map +1 -0
- package/dist/cli/commands/interactive.js +535 -0
- package/dist/cli/commands/interactive.js.map +1 -0
- package/dist/cli/commands/list.d.ts +6 -0
- package/dist/cli/commands/list.d.ts.map +1 -0
- package/dist/cli/commands/list.js +77 -0
- package/dist/cli/commands/list.js.map +1 -0
- package/dist/cli/commands/lockspec.d.ts +11 -0
- package/dist/cli/commands/lockspec.d.ts.map +1 -0
- package/dist/cli/commands/lockspec.js +179 -0
- package/dist/cli/commands/lockspec.js.map +1 -0
- package/dist/cli/commands/marketplace.d.ts +7 -0
- package/dist/cli/commands/marketplace.d.ts.map +1 -0
- package/dist/cli/commands/marketplace.js +417 -0
- package/dist/cli/commands/marketplace.js.map +1 -0
- package/dist/cli/commands/method.d.ts +7 -0
- package/dist/cli/commands/method.d.ts.map +1 -0
- package/dist/cli/commands/method.js +140 -0
- package/dist/cli/commands/method.js.map +1 -0
- package/dist/cli/commands/mine.d.ts +11 -0
- package/dist/cli/commands/mine.d.ts.map +1 -0
- package/dist/cli/commands/mine.js +254 -0
- package/dist/cli/commands/mine.js.map +1 -0
- package/dist/cli/commands/recall.d.ts +11 -0
- package/dist/cli/commands/recall.d.ts.map +1 -0
- package/dist/cli/commands/recall.js +201 -0
- package/dist/cli/commands/recall.js.map +1 -0
- package/dist/cli/commands/remove.d.ts +40 -0
- package/dist/cli/commands/remove.d.ts.map +1 -0
- package/dist/cli/commands/remove.js +161 -0
- package/dist/cli/commands/remove.js.map +1 -0
- package/dist/cli/commands/rule.d.ts +11 -0
- package/dist/cli/commands/rule.d.ts.map +1 -0
- package/dist/cli/commands/rule.js +230 -0
- package/dist/cli/commands/rule.js.map +1 -0
- package/dist/cli/commands/search.d.ts +6 -0
- package/dist/cli/commands/search.d.ts.map +1 -0
- package/dist/cli/commands/search.js +173 -0
- package/dist/cli/commands/search.js.map +1 -0
- package/dist/cli/commands/show.d.ts +6 -0
- package/dist/cli/commands/show.d.ts.map +1 -0
- package/dist/cli/commands/show.js +150 -0
- package/dist/cli/commands/show.js.map +1 -0
- package/dist/cli/commands/submit.d.ts +15 -0
- package/dist/cli/commands/submit.d.ts.map +1 -0
- package/dist/cli/commands/submit.js +151 -0
- package/dist/cli/commands/submit.js.map +1 -0
- package/dist/cli/commands/suggest.d.ts +11 -0
- package/dist/cli/commands/suggest.d.ts.map +1 -0
- package/dist/cli/commands/suggest.js +164 -0
- package/dist/cli/commands/suggest.js.map +1 -0
- package/dist/cli/commands/track.d.ts +11 -0
- package/dist/cli/commands/track.d.ts.map +1 -0
- package/dist/cli/commands/track.js +199 -0
- package/dist/cli/commands/track.js.map +1 -0
- package/dist/cli/commands/trigger.d.ts +11 -0
- package/dist/cli/commands/trigger.d.ts.map +1 -0
- package/dist/cli/commands/trigger.js +157 -0
- package/dist/cli/commands/trigger.js.map +1 -0
- package/dist/cli/commands/utils-commands.d.ts +9 -0
- package/dist/cli/commands/utils-commands.d.ts.map +1 -0
- package/dist/cli/commands/utils-commands.js +389 -0
- package/dist/cli/commands/utils-commands.js.map +1 -0
- package/dist/cli/commands/validate.d.ts +6 -0
- package/dist/cli/commands/validate.d.ts.map +1 -0
- package/dist/cli/commands/validate.js +40 -0
- package/dist/cli/commands/validate.js.map +1 -0
- package/dist/cli/fzf-search.d.ts +28 -0
- package/dist/cli/fzf-search.d.ts.map +1 -0
- package/dist/cli/fzf-search.js +211 -0
- package/dist/cli/fzf-search.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +87 -2537
- package/dist/cli/index.js.map +1 -1
- package/dist/core/audit.d.ts +24 -0
- package/dist/core/audit.d.ts.map +1 -0
- package/dist/core/audit.js +195 -0
- package/dist/core/audit.js.map +1 -0
- package/dist/core/index.d.ts +10 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +10 -0
- package/dist/core/index.js.map +1 -1
- package/dist/core/installer.d.ts +79 -0
- package/dist/core/installer.d.ts.map +1 -0
- package/dist/core/installer.js +142 -0
- package/dist/core/installer.js.map +1 -0
- package/dist/core/scanner-rules.d.ts +58 -0
- package/dist/core/scanner-rules.d.ts.map +1 -0
- package/dist/core/scanner-rules.js +335 -0
- package/dist/core/scanner-rules.js.map +1 -0
- package/dist/core/skill-lock.d.ts +114 -0
- package/dist/core/skill-lock.d.ts.map +1 -0
- package/dist/core/skill-lock.js +133 -0
- package/dist/core/skill-lock.js.map +1 -0
- package/dist/core/suggest.d.ts +51 -0
- package/dist/core/suggest.d.ts.map +1 -0
- package/dist/core/suggest.js +241 -0
- package/dist/core/suggest.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skill Lock File Module
|
|
3
|
+
* Tracks installed skills for check/update/remove operations
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Source type for installed skills
|
|
7
|
+
*/
|
|
8
|
+
export type SourceType = 'database' | 'github' | 'gitlab' | 'local';
|
|
9
|
+
/**
|
|
10
|
+
* Lock entry for a single installed skill
|
|
11
|
+
*/
|
|
12
|
+
export interface LockEntry {
|
|
13
|
+
/** Skill name */
|
|
14
|
+
name: string;
|
|
15
|
+
/** Scoped name like @author/skillname */
|
|
16
|
+
scopedName: string;
|
|
17
|
+
/** Source URL or path */
|
|
18
|
+
source: string;
|
|
19
|
+
/** Type of source */
|
|
20
|
+
sourceType: SourceType;
|
|
21
|
+
/** Version (commit SHA for git sources) */
|
|
22
|
+
version?: string;
|
|
23
|
+
/** Installation timestamp (ISO 8601) */
|
|
24
|
+
installedAt: string;
|
|
25
|
+
/** Last update timestamp (ISO 8601) */
|
|
26
|
+
updatedAt?: string;
|
|
27
|
+
/** List of agents this skill is installed to */
|
|
28
|
+
agents: string[];
|
|
29
|
+
/** Path to the canonical copy */
|
|
30
|
+
canonicalPath: string;
|
|
31
|
+
/** Whether this is a global or project installation */
|
|
32
|
+
isGlobal: boolean;
|
|
33
|
+
/** Project directory (for project installations) */
|
|
34
|
+
projectDir?: string;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Full lock file structure
|
|
38
|
+
*/
|
|
39
|
+
export interface SkillsLock {
|
|
40
|
+
/** Lock file format version */
|
|
41
|
+
version: '1';
|
|
42
|
+
/** Map of skill name to lock entry */
|
|
43
|
+
skills: Record<string, LockEntry>;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Get the lock file path
|
|
47
|
+
*/
|
|
48
|
+
export declare function getLockFilePath(): string;
|
|
49
|
+
/**
|
|
50
|
+
* Read the lock file (returns empty lock if doesn't exist)
|
|
51
|
+
*/
|
|
52
|
+
export declare function readLock(): Promise<SkillsLock>;
|
|
53
|
+
/**
|
|
54
|
+
* Write the lock file
|
|
55
|
+
*/
|
|
56
|
+
export declare function writeLock(lock: SkillsLock): Promise<void>;
|
|
57
|
+
/**
|
|
58
|
+
* Add or update a skill in the lock file
|
|
59
|
+
*/
|
|
60
|
+
export declare function addSkillToLock(entry: LockEntry): Promise<void>;
|
|
61
|
+
/**
|
|
62
|
+
* Remove a skill from the lock file
|
|
63
|
+
*/
|
|
64
|
+
export declare function removeSkillFromLock(skillName: string): Promise<void>;
|
|
65
|
+
/**
|
|
66
|
+
* Get a skill entry from the lock file
|
|
67
|
+
*/
|
|
68
|
+
export declare function getSkillFromLock(skillName: string): Promise<LockEntry | null>;
|
|
69
|
+
/**
|
|
70
|
+
* Options for listing installed skills
|
|
71
|
+
*/
|
|
72
|
+
export interface ListOptions {
|
|
73
|
+
/** Filter to global installations only */
|
|
74
|
+
global?: boolean;
|
|
75
|
+
/** Filter to specific agent */
|
|
76
|
+
agent?: string;
|
|
77
|
+
/** Filter to specific project directory */
|
|
78
|
+
projectDir?: string;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* List all installed skills, optionally filtered
|
|
82
|
+
*/
|
|
83
|
+
export declare function listInstalledSkills(options?: ListOptions): Promise<LockEntry[]>;
|
|
84
|
+
/**
|
|
85
|
+
* Check if a skill is installed
|
|
86
|
+
*/
|
|
87
|
+
export declare function isSkillInstalled(skillName: string): Promise<boolean>;
|
|
88
|
+
/**
|
|
89
|
+
* Get installed skill count
|
|
90
|
+
*/
|
|
91
|
+
export declare function getInstalledSkillCount(): Promise<number>;
|
|
92
|
+
/**
|
|
93
|
+
* Update a skill's version in the lock file
|
|
94
|
+
*/
|
|
95
|
+
export declare function updateSkillVersion(skillName: string, version: string): Promise<void>;
|
|
96
|
+
/**
|
|
97
|
+
* Update agents for an installed skill
|
|
98
|
+
*/
|
|
99
|
+
export declare function updateSkillAgents(skillName: string, agents: string[]): Promise<void>;
|
|
100
|
+
/**
|
|
101
|
+
* Create a lock entry for a newly installed skill
|
|
102
|
+
*/
|
|
103
|
+
export declare function createLockEntry(options: {
|
|
104
|
+
name: string;
|
|
105
|
+
scopedName: string;
|
|
106
|
+
source: string;
|
|
107
|
+
sourceType: SourceType;
|
|
108
|
+
version?: string;
|
|
109
|
+
agents: string[];
|
|
110
|
+
canonicalPath: string;
|
|
111
|
+
isGlobal: boolean;
|
|
112
|
+
projectDir?: string;
|
|
113
|
+
}): LockEntry;
|
|
114
|
+
//# sourceMappingURL=skill-lock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-lock.d.ts","sourceRoot":"","sources":["../../src/core/skill-lock.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skill Lock File Module
|
|
3
|
+
* Tracks installed skills for check/update/remove operations
|
|
4
|
+
*/
|
|
5
|
+
import { homedir } from 'os';
|
|
6
|
+
import { join, dirname } from 'path';
|
|
7
|
+
import { readFile, writeFile, mkdir } from 'fs/promises';
|
|
8
|
+
import { existsSync } from 'fs';
|
|
9
|
+
/**
|
|
10
|
+
* Lock file location (always in home, tracks both global and project skills)
|
|
11
|
+
*/
|
|
12
|
+
const LOCK_FILE = join(homedir(), '.skills', 'skills.lock');
|
|
13
|
+
/**
|
|
14
|
+
* Get the lock file path
|
|
15
|
+
*/
|
|
16
|
+
export function getLockFilePath() {
|
|
17
|
+
return LOCK_FILE;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Read the lock file (returns empty lock if doesn't exist)
|
|
21
|
+
*/
|
|
22
|
+
export async function readLock() {
|
|
23
|
+
try {
|
|
24
|
+
if (!existsSync(LOCK_FILE)) {
|
|
25
|
+
return { version: '1', skills: {} };
|
|
26
|
+
}
|
|
27
|
+
const content = await readFile(LOCK_FILE, 'utf-8');
|
|
28
|
+
return JSON.parse(content);
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
return { version: '1', skills: {} };
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Write the lock file
|
|
36
|
+
*/
|
|
37
|
+
export async function writeLock(lock) {
|
|
38
|
+
await mkdir(dirname(LOCK_FILE), { recursive: true });
|
|
39
|
+
await writeFile(LOCK_FILE, JSON.stringify(lock, null, 2));
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Add or update a skill in the lock file
|
|
43
|
+
*/
|
|
44
|
+
export async function addSkillToLock(entry) {
|
|
45
|
+
const lock = await readLock();
|
|
46
|
+
lock.skills[entry.name] = entry;
|
|
47
|
+
await writeLock(lock);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Remove a skill from the lock file
|
|
51
|
+
*/
|
|
52
|
+
export async function removeSkillFromLock(skillName) {
|
|
53
|
+
const lock = await readLock();
|
|
54
|
+
delete lock.skills[skillName];
|
|
55
|
+
await writeLock(lock);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Get a skill entry from the lock file
|
|
59
|
+
*/
|
|
60
|
+
export async function getSkillFromLock(skillName) {
|
|
61
|
+
const lock = await readLock();
|
|
62
|
+
return lock.skills[skillName] || null;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* List all installed skills, optionally filtered
|
|
66
|
+
*/
|
|
67
|
+
export async function listInstalledSkills(options) {
|
|
68
|
+
const lock = await readLock();
|
|
69
|
+
let skills = Object.values(lock.skills);
|
|
70
|
+
if (options?.global !== undefined) {
|
|
71
|
+
skills = skills.filter(s => s.isGlobal === options.global);
|
|
72
|
+
}
|
|
73
|
+
if (options?.agent) {
|
|
74
|
+
skills = skills.filter(s => s.agents.includes(options.agent));
|
|
75
|
+
}
|
|
76
|
+
if (options?.projectDir) {
|
|
77
|
+
skills = skills.filter(s => s.projectDir === options.projectDir);
|
|
78
|
+
}
|
|
79
|
+
return skills;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Check if a skill is installed
|
|
83
|
+
*/
|
|
84
|
+
export async function isSkillInstalled(skillName) {
|
|
85
|
+
const lock = await readLock();
|
|
86
|
+
return !!lock.skills[skillName];
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Get installed skill count
|
|
90
|
+
*/
|
|
91
|
+
export async function getInstalledSkillCount() {
|
|
92
|
+
const lock = await readLock();
|
|
93
|
+
return Object.keys(lock.skills).length;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Update a skill's version in the lock file
|
|
97
|
+
*/
|
|
98
|
+
export async function updateSkillVersion(skillName, version) {
|
|
99
|
+
const lock = await readLock();
|
|
100
|
+
if (lock.skills[skillName]) {
|
|
101
|
+
lock.skills[skillName].version = version;
|
|
102
|
+
lock.skills[skillName].updatedAt = new Date().toISOString();
|
|
103
|
+
await writeLock(lock);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Update agents for an installed skill
|
|
108
|
+
*/
|
|
109
|
+
export async function updateSkillAgents(skillName, agents) {
|
|
110
|
+
const lock = await readLock();
|
|
111
|
+
if (lock.skills[skillName]) {
|
|
112
|
+
lock.skills[skillName].agents = agents;
|
|
113
|
+
await writeLock(lock);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Create a lock entry for a newly installed skill
|
|
118
|
+
*/
|
|
119
|
+
export function createLockEntry(options) {
|
|
120
|
+
return {
|
|
121
|
+
name: options.name,
|
|
122
|
+
scopedName: options.scopedName,
|
|
123
|
+
source: options.source,
|
|
124
|
+
sourceType: options.sourceType,
|
|
125
|
+
version: options.version,
|
|
126
|
+
installedAt: new Date().toISOString(),
|
|
127
|
+
agents: options.agents,
|
|
128
|
+
canonicalPath: options.canonicalPath,
|
|
129
|
+
isGlobal: options.isGlobal,
|
|
130
|
+
projectDir: options.projectDir,
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=skill-lock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-lock.js","sourceRoot":"","sources":["../../src/core/skill-lock.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Suggest Engine - Project-aware skill recommendations
|
|
3
|
+
* Analyzes package.json and project files to recommend matching skills from our 67K+ DB
|
|
4
|
+
*/
|
|
5
|
+
export interface ProjectAnalysis {
|
|
6
|
+
languages: string[];
|
|
7
|
+
frameworks: string[];
|
|
8
|
+
libraries: string[];
|
|
9
|
+
testTools: string[];
|
|
10
|
+
buildTools: string[];
|
|
11
|
+
categories: string[];
|
|
12
|
+
}
|
|
13
|
+
export interface SuggestedSkill {
|
|
14
|
+
name: string;
|
|
15
|
+
author: string;
|
|
16
|
+
scopedName: string;
|
|
17
|
+
description: string;
|
|
18
|
+
score: number;
|
|
19
|
+
matchReasons: string[];
|
|
20
|
+
githubUrl: string;
|
|
21
|
+
stars: number;
|
|
22
|
+
}
|
|
23
|
+
export interface SuggestOptions {
|
|
24
|
+
limit?: number;
|
|
25
|
+
minScore?: number;
|
|
26
|
+
category?: string;
|
|
27
|
+
task?: string;
|
|
28
|
+
verbose?: boolean;
|
|
29
|
+
json?: boolean;
|
|
30
|
+
path?: string;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Analyze a project directory to detect tech stack
|
|
34
|
+
*/
|
|
35
|
+
export declare function analyzeProject(projectPath: string): Promise<ProjectAnalysis>;
|
|
36
|
+
/**
|
|
37
|
+
* Build search keywords from project analysis
|
|
38
|
+
*/
|
|
39
|
+
export declare function buildSearchKeywords(analysis: ProjectAnalysis, task?: string): string[];
|
|
40
|
+
/**
|
|
41
|
+
* Score a skill against project analysis
|
|
42
|
+
*/
|
|
43
|
+
export declare function scoreSkill(skill: {
|
|
44
|
+
name: string;
|
|
45
|
+
description: string;
|
|
46
|
+
stars: number;
|
|
47
|
+
}, analysis: ProjectAnalysis, keywords: string[]): {
|
|
48
|
+
score: number;
|
|
49
|
+
reasons: string[];
|
|
50
|
+
};
|
|
51
|
+
//# sourceMappingURL=suggest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"suggest.d.ts","sourceRoot":"","sources":["../../src/core/suggest.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,MAAM,WAAW,eAAe;IAC5B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,UAAU,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,cAAc;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AAsED;;GAEG;AACH,wBAAsB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAsGlF;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,eAAe,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAiBtF;AAED;;GAEG;AACH,wBAAgB,UAAU,CACtB,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAC3D,QAAQ,EAAE,eAAe,EACzB,QAAQ,EAAE,MAAM,EAAE,GACnB;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAyDtC"}
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Suggest Engine - Project-aware skill recommendations
|
|
3
|
+
* Analyzes package.json and project files to recommend matching skills from our 67K+ DB
|
|
4
|
+
*/
|
|
5
|
+
import { readFile } from 'fs/promises';
|
|
6
|
+
import { join } from 'path';
|
|
7
|
+
import { existsSync } from 'fs';
|
|
8
|
+
// Framework detection patterns
|
|
9
|
+
const FRAMEWORK_PATTERNS = {
|
|
10
|
+
'react': ['react', 'react-dom'],
|
|
11
|
+
'next.js': ['next'],
|
|
12
|
+
'vue': ['vue'],
|
|
13
|
+
'nuxt': ['nuxt'],
|
|
14
|
+
'angular': ['@angular/core'],
|
|
15
|
+
'svelte': ['svelte'],
|
|
16
|
+
'express': ['express'],
|
|
17
|
+
'fastify': ['fastify'],
|
|
18
|
+
'nest.js': ['@nestjs/core'],
|
|
19
|
+
'remix': ['@remix-run/react'],
|
|
20
|
+
'astro': ['astro'],
|
|
21
|
+
'gatsby': ['gatsby'],
|
|
22
|
+
'electron': ['electron'],
|
|
23
|
+
'react-native': ['react-native'],
|
|
24
|
+
'flutter': ['flutter'],
|
|
25
|
+
'django': ['django'],
|
|
26
|
+
'flask': ['flask'],
|
|
27
|
+
'fastapi': ['fastapi'],
|
|
28
|
+
'rails': ['rails'],
|
|
29
|
+
'spring': ['spring-boot'],
|
|
30
|
+
'laravel': ['laravel'],
|
|
31
|
+
};
|
|
32
|
+
const LIBRARY_PATTERNS = {
|
|
33
|
+
'tailwindcss': ['tailwindcss'],
|
|
34
|
+
'prisma': ['prisma', '@prisma/client'],
|
|
35
|
+
'drizzle': ['drizzle-orm'],
|
|
36
|
+
'typeorm': ['typeorm'],
|
|
37
|
+
'mongoose': ['mongoose'],
|
|
38
|
+
'zod': ['zod'],
|
|
39
|
+
'joi': ['joi'],
|
|
40
|
+
'redux': ['redux', '@reduxjs/toolkit'],
|
|
41
|
+
'zustand': ['zustand'],
|
|
42
|
+
'tanstack-query': ['@tanstack/react-query'],
|
|
43
|
+
'trpc': ['@trpc/server'],
|
|
44
|
+
'graphql': ['graphql', '@apollo/client'],
|
|
45
|
+
'stripe': ['stripe'],
|
|
46
|
+
'auth.js': ['next-auth', '@auth/core'],
|
|
47
|
+
'supabase': ['@supabase/supabase-js'],
|
|
48
|
+
'firebase': ['firebase', 'firebase-admin'],
|
|
49
|
+
'aws-sdk': ['aws-sdk', '@aws-sdk/client-s3'],
|
|
50
|
+
'docker': ['dockerode'],
|
|
51
|
+
'socket.io': ['socket.io'],
|
|
52
|
+
'three.js': ['three'],
|
|
53
|
+
};
|
|
54
|
+
const TEST_TOOL_PATTERNS = {
|
|
55
|
+
'jest': ['jest'],
|
|
56
|
+
'vitest': ['vitest'],
|
|
57
|
+
'mocha': ['mocha'],
|
|
58
|
+
'cypress': ['cypress'],
|
|
59
|
+
'playwright': ['@playwright/test', 'playwright'],
|
|
60
|
+
'testing-library': ['@testing-library/react', '@testing-library/jest-dom'],
|
|
61
|
+
'storybook': ['@storybook/react'],
|
|
62
|
+
};
|
|
63
|
+
const BUILD_TOOL_PATTERNS = {
|
|
64
|
+
'vite': ['vite'],
|
|
65
|
+
'webpack': ['webpack'],
|
|
66
|
+
'turbopack': ['@vercel/turbopack-next'],
|
|
67
|
+
'esbuild': ['esbuild'],
|
|
68
|
+
'tsup': ['tsup'],
|
|
69
|
+
'rollup': ['rollup'],
|
|
70
|
+
'parcel': ['parcel'],
|
|
71
|
+
};
|
|
72
|
+
/**
|
|
73
|
+
* Analyze a project directory to detect tech stack
|
|
74
|
+
*/
|
|
75
|
+
export async function analyzeProject(projectPath) {
|
|
76
|
+
const analysis = {
|
|
77
|
+
languages: [],
|
|
78
|
+
frameworks: [],
|
|
79
|
+
libraries: [],
|
|
80
|
+
testTools: [],
|
|
81
|
+
buildTools: [],
|
|
82
|
+
categories: [],
|
|
83
|
+
};
|
|
84
|
+
// Check package.json (Node.js/JS/TS projects)
|
|
85
|
+
const pkgPath = join(projectPath, 'package.json');
|
|
86
|
+
if (existsSync(pkgPath)) {
|
|
87
|
+
try {
|
|
88
|
+
const pkgContent = await readFile(pkgPath, 'utf-8');
|
|
89
|
+
const pkg = JSON.parse(pkgContent);
|
|
90
|
+
const allDeps = {
|
|
91
|
+
...pkg.dependencies,
|
|
92
|
+
...pkg.devDependencies,
|
|
93
|
+
...pkg.peerDependencies,
|
|
94
|
+
};
|
|
95
|
+
const depNames = Object.keys(allDeps || {});
|
|
96
|
+
// Detect language
|
|
97
|
+
if (depNames.includes('typescript') || existsSync(join(projectPath, 'tsconfig.json'))) {
|
|
98
|
+
analysis.languages.push('typescript');
|
|
99
|
+
}
|
|
100
|
+
analysis.languages.push('javascript');
|
|
101
|
+
// Detect frameworks
|
|
102
|
+
for (const [name, patterns] of Object.entries(FRAMEWORK_PATTERNS)) {
|
|
103
|
+
if (patterns.some(p => depNames.includes(p))) {
|
|
104
|
+
analysis.frameworks.push(name);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
// Detect libraries
|
|
108
|
+
for (const [name, patterns] of Object.entries(LIBRARY_PATTERNS)) {
|
|
109
|
+
if (patterns.some(p => depNames.includes(p))) {
|
|
110
|
+
analysis.libraries.push(name);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
// Detect test tools
|
|
114
|
+
for (const [name, patterns] of Object.entries(TEST_TOOL_PATTERNS)) {
|
|
115
|
+
if (patterns.some(p => depNames.includes(p))) {
|
|
116
|
+
analysis.testTools.push(name);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
// Detect build tools
|
|
120
|
+
for (const [name, patterns] of Object.entries(BUILD_TOOL_PATTERNS)) {
|
|
121
|
+
if (patterns.some(p => depNames.includes(p))) {
|
|
122
|
+
analysis.buildTools.push(name);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
catch {
|
|
127
|
+
// Ignore parse errors
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
// Check for Python projects
|
|
131
|
+
const pyprojectPath = join(projectPath, 'pyproject.toml');
|
|
132
|
+
const requirementsPath = join(projectPath, 'requirements.txt');
|
|
133
|
+
if (existsSync(pyprojectPath) || existsSync(requirementsPath)) {
|
|
134
|
+
analysis.languages.push('python');
|
|
135
|
+
}
|
|
136
|
+
// Check for Go projects
|
|
137
|
+
if (existsSync(join(projectPath, 'go.mod'))) {
|
|
138
|
+
analysis.languages.push('go');
|
|
139
|
+
}
|
|
140
|
+
// Check for Rust projects
|
|
141
|
+
if (existsSync(join(projectPath, 'Cargo.toml'))) {
|
|
142
|
+
analysis.languages.push('rust');
|
|
143
|
+
}
|
|
144
|
+
// Check for Java projects
|
|
145
|
+
if (existsSync(join(projectPath, 'pom.xml')) || existsSync(join(projectPath, 'build.gradle'))) {
|
|
146
|
+
analysis.languages.push('java');
|
|
147
|
+
}
|
|
148
|
+
// Build categories from detected stack
|
|
149
|
+
if (analysis.frameworks.some(f => ['react', 'vue', 'svelte', 'angular'].includes(f))) {
|
|
150
|
+
analysis.categories.push('frontend');
|
|
151
|
+
}
|
|
152
|
+
if (analysis.frameworks.some(f => ['express', 'fastify', 'nest.js', 'django', 'flask', 'fastapi'].includes(f))) {
|
|
153
|
+
analysis.categories.push('backend');
|
|
154
|
+
}
|
|
155
|
+
if (analysis.frameworks.some(f => ['next.js', 'nuxt', 'remix', 'astro'].includes(f))) {
|
|
156
|
+
analysis.categories.push('fullstack');
|
|
157
|
+
}
|
|
158
|
+
if (analysis.testTools.length > 0) {
|
|
159
|
+
analysis.categories.push('testing');
|
|
160
|
+
}
|
|
161
|
+
if (analysis.libraries.some(l => ['prisma', 'drizzle', 'typeorm', 'mongoose'].includes(l))) {
|
|
162
|
+
analysis.categories.push('database');
|
|
163
|
+
}
|
|
164
|
+
return analysis;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Build search keywords from project analysis
|
|
168
|
+
*/
|
|
169
|
+
export function buildSearchKeywords(analysis, task) {
|
|
170
|
+
const keywords = [];
|
|
171
|
+
// Add task-specific keywords first (highest priority)
|
|
172
|
+
if (task) {
|
|
173
|
+
keywords.push(...task.split(/\s+/).filter(w => w.length > 2));
|
|
174
|
+
}
|
|
175
|
+
// Add frameworks and libraries
|
|
176
|
+
keywords.push(...analysis.frameworks);
|
|
177
|
+
keywords.push(...analysis.libraries);
|
|
178
|
+
keywords.push(...analysis.testTools);
|
|
179
|
+
keywords.push(...analysis.languages);
|
|
180
|
+
keywords.push(...analysis.categories);
|
|
181
|
+
// Deduplicate
|
|
182
|
+
return [...new Set(keywords)];
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Score a skill against project analysis
|
|
186
|
+
*/
|
|
187
|
+
export function scoreSkill(skill, analysis, keywords) {
|
|
188
|
+
let score = 0;
|
|
189
|
+
const reasons = [];
|
|
190
|
+
const nameDesc = `${skill.name} ${skill.description}`.toLowerCase();
|
|
191
|
+
// Framework match (40 weight)
|
|
192
|
+
for (const fw of analysis.frameworks) {
|
|
193
|
+
if (nameDesc.includes(fw.toLowerCase())) {
|
|
194
|
+
score += 40;
|
|
195
|
+
reasons.push(`Matches framework: ${fw}`);
|
|
196
|
+
break; // Only count best framework match
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
// Library match (30 weight)
|
|
200
|
+
for (const lib of analysis.libraries) {
|
|
201
|
+
if (nameDesc.includes(lib.toLowerCase())) {
|
|
202
|
+
score += 30;
|
|
203
|
+
reasons.push(`Matches library: ${lib}`);
|
|
204
|
+
break;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
// Language match (15 weight)
|
|
208
|
+
for (const lang of analysis.languages) {
|
|
209
|
+
if (nameDesc.includes(lang.toLowerCase())) {
|
|
210
|
+
score += 15;
|
|
211
|
+
reasons.push(`Matches language: ${lang}`);
|
|
212
|
+
break;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
// Category match (10 weight)
|
|
216
|
+
for (const cat of analysis.categories) {
|
|
217
|
+
if (nameDesc.includes(cat.toLowerCase())) {
|
|
218
|
+
score += 10;
|
|
219
|
+
reasons.push(`Matches category: ${cat}`);
|
|
220
|
+
break;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
// Keyword match (5 per keyword, max 20)
|
|
224
|
+
let kwScore = 0;
|
|
225
|
+
for (const kw of keywords) {
|
|
226
|
+
if (nameDesc.includes(kw.toLowerCase()) && kwScore < 20) {
|
|
227
|
+
kwScore += 5;
|
|
228
|
+
reasons.push(`Keyword: ${kw}`);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
score += kwScore;
|
|
232
|
+
// Popularity bonus (up to 5 points)
|
|
233
|
+
if (skill.stars > 1000)
|
|
234
|
+
score += 5;
|
|
235
|
+
else if (skill.stars > 100)
|
|
236
|
+
score += 3;
|
|
237
|
+
else if (skill.stars > 10)
|
|
238
|
+
score += 1;
|
|
239
|
+
return { score: Math.min(score, 100), reasons };
|
|
240
|
+
}
|
|
241
|
+
//# sourceMappingURL=suggest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"suggest.js","sourceRoot":"","sources":["../../src/core/suggest.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agent-skills-cli",
|
|
3
|
-
"version": "1.0.
|
|
4
|
-
"description": "Universal CLI for Agent Skills - works with Cursor, Claude Code, GitHub Copilot,
|
|
3
|
+
"version": "1.0.9",
|
|
4
|
+
"description": "Universal CLI for Agent Skills - works with 42 AI agents including Cursor, Claude Code, GitHub Copilot, Windsurf, Cline, Zed, and more",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"types": "dist/index.d.ts",
|