agent-skills-cli 1.0.8 → 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 +18 -17
- 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/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/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +84 -2743
- 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 +6 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +6 -0
- package/dist/core/index.js.map +1 -1
- 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/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 +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scanner-rules.d.ts","sourceRoot":"","sources":["../../src/core/scanner-rules.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,QAAQ,GAAG,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;AAEvE,MAAM,WAAW,WAAW;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,QAAQ,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC;CACrE;AAED,MAAM,WAAW,WAAW;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,QAAQ,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACvB,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE;QACL,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;KACjB,CAAC;CACL;AAED;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,WAAW,EAwStC,CAAC;AAEF;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,EAAE,CAElE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAE/D;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,EAAE,CAExC;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,UAAU,CAalD"}
|
|
@@ -0,0 +1,335 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Scanner Rules - Security vulnerability detection rules
|
|
3
|
+
* Used by the audit command to scan skills for potential threats
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* All scanner rules organized by category
|
|
7
|
+
*/
|
|
8
|
+
export const SCANNER_RULES = [
|
|
9
|
+
// ═══════════════════════════════════════════
|
|
10
|
+
// PROMPT INJECTION (PI001-PI010)
|
|
11
|
+
// ═══════════════════════════════════════════
|
|
12
|
+
{
|
|
13
|
+
id: 'PI001',
|
|
14
|
+
category: 'prompt-injection',
|
|
15
|
+
severity: 'critical',
|
|
16
|
+
title: 'Direct prompt override attempt',
|
|
17
|
+
description: 'Attempts to override or ignore previous instructions',
|
|
18
|
+
pattern: /ignore\s+(all\s+)?previous\s+instructions/i,
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
id: 'PI002',
|
|
22
|
+
category: 'prompt-injection',
|
|
23
|
+
severity: 'critical',
|
|
24
|
+
title: 'System prompt override',
|
|
25
|
+
description: 'Attempts to set a new system prompt or role',
|
|
26
|
+
pattern: /you\s+are\s+now\s+(a|an|the)\s+/i,
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
id: 'PI003',
|
|
30
|
+
category: 'prompt-injection',
|
|
31
|
+
severity: 'high',
|
|
32
|
+
title: 'Role manipulation',
|
|
33
|
+
description: 'Attempts to change the AI agent\'s role or behavior',
|
|
34
|
+
pattern: /(act|behave|pretend|roleplay)\s+(as|like)\s+(a|an|the)\s+/i,
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
id: 'PI004',
|
|
38
|
+
category: 'prompt-injection',
|
|
39
|
+
severity: 'high',
|
|
40
|
+
title: 'Instruction bypass',
|
|
41
|
+
description: 'Attempts to bypass safety restrictions',
|
|
42
|
+
pattern: /(bypass|circumvent|override|disable)\s+(safety|restrictions?|filters?|guardrails?)/i,
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
id: 'PI005',
|
|
46
|
+
category: 'prompt-injection',
|
|
47
|
+
severity: 'medium',
|
|
48
|
+
title: 'Jailbreak attempt',
|
|
49
|
+
description: 'Known jailbreak patterns detected',
|
|
50
|
+
pattern: /(DAN|do\s+anything\s+now|STAN|jailbreak)/i,
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
id: 'PI006',
|
|
54
|
+
category: 'prompt-injection',
|
|
55
|
+
severity: 'medium',
|
|
56
|
+
title: 'Prompt leak request',
|
|
57
|
+
description: 'Attempts to extract system prompts or instructions',
|
|
58
|
+
pattern: /(reveal|show|print|output|display)\s+(your|the|system)\s+(prompt|instructions|rules)/i,
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
id: 'PI007',
|
|
62
|
+
category: 'prompt-injection',
|
|
63
|
+
severity: 'high',
|
|
64
|
+
title: 'Encoding-based injection',
|
|
65
|
+
description: 'Using base64 or hex encoding to hide instructions',
|
|
66
|
+
pattern: /(atob|btoa|Buffer\.from)\s*\(\s*['"`]/,
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
id: 'PI008',
|
|
70
|
+
category: 'prompt-injection',
|
|
71
|
+
severity: 'medium',
|
|
72
|
+
title: 'Delimiter manipulation',
|
|
73
|
+
description: 'Using special delimiters to break prompt boundaries',
|
|
74
|
+
pattern: /(```system|<\|im_start\|>|<\|endoftext\|>|<\/system>)/i,
|
|
75
|
+
},
|
|
76
|
+
// ═══════════════════════════════════════════
|
|
77
|
+
// COMMAND INJECTION (CI001-CI008)
|
|
78
|
+
// ═══════════════════════════════════════════
|
|
79
|
+
{
|
|
80
|
+
id: 'CI001',
|
|
81
|
+
category: 'command-injection',
|
|
82
|
+
severity: 'critical',
|
|
83
|
+
title: 'Destructive command',
|
|
84
|
+
description: 'Potentially destructive shell command',
|
|
85
|
+
pattern: /\b(rm\s+-rf\s+[\/~]|rmdir\s+\/s|del\s+\/f\s+\/s|format\s+[a-z]:)/i,
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
id: 'CI002',
|
|
89
|
+
category: 'command-injection',
|
|
90
|
+
severity: 'critical',
|
|
91
|
+
title: 'Remote code execution',
|
|
92
|
+
description: 'Piping remote content to shell execution',
|
|
93
|
+
pattern: /\b(curl|wget)\s+.*\|\s*(bash|sh|zsh|python|node|eval)/i,
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
id: 'CI003',
|
|
97
|
+
category: 'command-injection',
|
|
98
|
+
severity: 'high',
|
|
99
|
+
title: 'Shell eval usage',
|
|
100
|
+
description: 'Dynamic code evaluation which could execute arbitrary code',
|
|
101
|
+
pattern: /\b(eval|exec|execSync|spawnSync|child_process)\s*\(/,
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
id: 'CI004',
|
|
105
|
+
category: 'command-injection',
|
|
106
|
+
severity: 'high',
|
|
107
|
+
title: 'Dangerous chmod',
|
|
108
|
+
description: 'Setting overly permissive file permissions',
|
|
109
|
+
pattern: /chmod\s+(777|666|a\+[rwx])/,
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
id: 'CI005',
|
|
113
|
+
category: 'command-injection',
|
|
114
|
+
severity: 'medium',
|
|
115
|
+
title: 'Sudo usage',
|
|
116
|
+
description: 'Privilege escalation via sudo',
|
|
117
|
+
pattern: /\bsudo\s+/,
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
id: 'CI006',
|
|
121
|
+
category: 'command-injection',
|
|
122
|
+
severity: 'medium',
|
|
123
|
+
title: 'Network download',
|
|
124
|
+
description: 'Downloading content from external sources',
|
|
125
|
+
pattern: /\b(curl|wget|fetch)\s+https?:\/\//i,
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
id: 'CI007',
|
|
129
|
+
category: 'command-injection',
|
|
130
|
+
severity: 'high',
|
|
131
|
+
title: 'Shell script generation',
|
|
132
|
+
description: 'Dynamically creating and executing shell scripts',
|
|
133
|
+
pattern: />\s*\/tmp\/.*\.sh|echo\s+.*>\s+.*\.sh\s*&&\s*(bash|sh|chmod)/,
|
|
134
|
+
},
|
|
135
|
+
// ═══════════════════════════════════════════
|
|
136
|
+
// DATA EXFILTRATION (DE001-DE006)
|
|
137
|
+
// ═══════════════════════════════════════════
|
|
138
|
+
{
|
|
139
|
+
id: 'DE001',
|
|
140
|
+
category: 'data-exfiltration',
|
|
141
|
+
severity: 'critical',
|
|
142
|
+
title: 'Data exfiltration via webhook',
|
|
143
|
+
description: 'Sending data to external webhook or API endpoint',
|
|
144
|
+
pattern: /(fetch|axios|got|request)\s*\(\s*['"`](https?:\/\/[^'"]*?(webhook|exfil|ngrok|burp|requestbin))/i,
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
id: 'DE002',
|
|
148
|
+
category: 'data-exfiltration',
|
|
149
|
+
severity: 'high',
|
|
150
|
+
title: 'DNS exfiltration',
|
|
151
|
+
description: 'Using DNS queries to exfiltrate data',
|
|
152
|
+
pattern: /dns\.(resolve|lookup)\s*\(.*\$\{/,
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
id: 'DE003',
|
|
156
|
+
category: 'data-exfiltration',
|
|
157
|
+
severity: 'high',
|
|
158
|
+
title: 'Environment variable access',
|
|
159
|
+
description: 'Reading sensitive environment variables',
|
|
160
|
+
pattern: /process\.env\[(.*?(KEY|SECRET|TOKEN|PASSWORD|CREDENTIAL))/i,
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
id: 'DE004',
|
|
164
|
+
category: 'data-exfiltration',
|
|
165
|
+
severity: 'medium',
|
|
166
|
+
title: 'File read of sensitive paths',
|
|
167
|
+
description: 'Reading from sensitive system paths',
|
|
168
|
+
pattern: /readFile(Sync)?\s*\(\s*['"`](\/etc\/(passwd|shadow|ssh)|~\/\.ssh|~\/\.aws)/,
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
id: 'DE005',
|
|
172
|
+
category: 'data-exfiltration',
|
|
173
|
+
severity: 'high',
|
|
174
|
+
title: 'Base64 encoding of data',
|
|
175
|
+
description: 'Encoding data to base64 before transmission',
|
|
176
|
+
pattern: /Buffer\.from\(.*\)\.toString\(['"`]base64['"`]\)/,
|
|
177
|
+
},
|
|
178
|
+
// ═══════════════════════════════════════════
|
|
179
|
+
// TOOL ABUSE (TA001-TA008)
|
|
180
|
+
// ═══════════════════════════════════════════
|
|
181
|
+
{
|
|
182
|
+
id: 'TA001',
|
|
183
|
+
category: 'tool-abuse',
|
|
184
|
+
severity: 'high',
|
|
185
|
+
title: 'Filesystem traversal',
|
|
186
|
+
description: 'Accessing files outside project directory',
|
|
187
|
+
pattern: /\.\.\/(\.\.\/){2,}|path\.(join|resolve)\s*\(.*\.\.\//,
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
id: 'TA002',
|
|
191
|
+
category: 'tool-abuse',
|
|
192
|
+
severity: 'medium',
|
|
193
|
+
title: 'Unrestricted file write',
|
|
194
|
+
description: 'Writing to system or home directories',
|
|
195
|
+
pattern: /writeFile(Sync)?\s*\(\s*['"`](\/usr|\/etc|\/var|\/home|\/root)/,
|
|
196
|
+
},
|
|
197
|
+
{
|
|
198
|
+
id: 'TA003',
|
|
199
|
+
category: 'tool-abuse',
|
|
200
|
+
severity: 'medium',
|
|
201
|
+
title: 'Process spawning',
|
|
202
|
+
description: 'Spawning new processes from skill code',
|
|
203
|
+
pattern: /\b(spawn|fork|exec)\s*\(\s*['"`]/,
|
|
204
|
+
},
|
|
205
|
+
{
|
|
206
|
+
id: 'TA004',
|
|
207
|
+
category: 'tool-abuse',
|
|
208
|
+
severity: 'low',
|
|
209
|
+
title: 'Global npm install',
|
|
210
|
+
description: 'Installing packages globally',
|
|
211
|
+
pattern: /npm\s+install\s+(-g|--global)/,
|
|
212
|
+
},
|
|
213
|
+
// ═══════════════════════════════════════════
|
|
214
|
+
// HARDCODED SECRETS (HS001-HS008)
|
|
215
|
+
// ═══════════════════════════════════════════
|
|
216
|
+
{
|
|
217
|
+
id: 'HS001',
|
|
218
|
+
category: 'hardcoded-secrets',
|
|
219
|
+
severity: 'critical',
|
|
220
|
+
title: 'AWS access key',
|
|
221
|
+
description: 'Hardcoded AWS access key ID',
|
|
222
|
+
pattern: /AKIA[0-9A-Z]{16}/,
|
|
223
|
+
},
|
|
224
|
+
{
|
|
225
|
+
id: 'HS002',
|
|
226
|
+
category: 'hardcoded-secrets',
|
|
227
|
+
severity: 'critical',
|
|
228
|
+
title: 'API key pattern',
|
|
229
|
+
description: 'Possible hardcoded API key',
|
|
230
|
+
pattern: /(sk-[a-zA-Z0-9]{20,}|sk-proj-[a-zA-Z0-9]{20,}|ghp_[a-zA-Z0-9]{36}|gho_[a-zA-Z0-9]{36})/,
|
|
231
|
+
},
|
|
232
|
+
{
|
|
233
|
+
id: 'HS003',
|
|
234
|
+
category: 'hardcoded-secrets',
|
|
235
|
+
severity: 'high',
|
|
236
|
+
title: 'Generic secret assignment',
|
|
237
|
+
description: 'Variable named secret/password/token with hardcoded value',
|
|
238
|
+
pattern: /(password|secret|token|api_key|apikey|api[-_]?secret)\s*[:=]\s*['"`][A-Za-z0-9+/=]{8,}/i,
|
|
239
|
+
},
|
|
240
|
+
{
|
|
241
|
+
id: 'HS004',
|
|
242
|
+
category: 'hardcoded-secrets',
|
|
243
|
+
severity: 'high',
|
|
244
|
+
title: 'Private key block',
|
|
245
|
+
description: 'Embedded private key',
|
|
246
|
+
pattern: /-----BEGIN\s+(RSA\s+)?PRIVATE\s+KEY-----/,
|
|
247
|
+
},
|
|
248
|
+
{
|
|
249
|
+
id: 'HS005',
|
|
250
|
+
category: 'hardcoded-secrets',
|
|
251
|
+
severity: 'high',
|
|
252
|
+
title: 'JWT token',
|
|
253
|
+
description: 'Hardcoded JWT token',
|
|
254
|
+
pattern: /eyJ[A-Za-z0-9_-]{10,}\.eyJ[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}/,
|
|
255
|
+
},
|
|
256
|
+
{
|
|
257
|
+
id: 'HS006',
|
|
258
|
+
category: 'hardcoded-secrets',
|
|
259
|
+
severity: 'medium',
|
|
260
|
+
title: 'Database connection string',
|
|
261
|
+
description: 'Hardcoded database URL with credentials',
|
|
262
|
+
pattern: /(postgres|mysql|mongodb|redis):\/\/[^:]+:[^@]+@/,
|
|
263
|
+
},
|
|
264
|
+
// ═══════════════════════════════════════════
|
|
265
|
+
// UNICODE STEGANOGRAPHY (UC001-UC006)
|
|
266
|
+
// ═══════════════════════════════════════════
|
|
267
|
+
{
|
|
268
|
+
id: 'UC001',
|
|
269
|
+
category: 'unicode-steganography',
|
|
270
|
+
severity: 'high',
|
|
271
|
+
title: 'Zero-width characters',
|
|
272
|
+
description: 'Hidden zero-width characters that may contain embedded instructions',
|
|
273
|
+
pattern: /[\u200B\u200C\u200D\uFEFF\u200E\u200F]/,
|
|
274
|
+
},
|
|
275
|
+
{
|
|
276
|
+
id: 'UC002',
|
|
277
|
+
category: 'unicode-steganography',
|
|
278
|
+
severity: 'medium',
|
|
279
|
+
title: 'Right-to-left override',
|
|
280
|
+
description: 'Unicode RTL override that can disguise code direction',
|
|
281
|
+
pattern: /[\u202A\u202B\u202C\u202D\u202E\u2066\u2067\u2068\u2069]/,
|
|
282
|
+
},
|
|
283
|
+
{
|
|
284
|
+
id: 'UC003',
|
|
285
|
+
category: 'unicode-steganography',
|
|
286
|
+
severity: 'medium',
|
|
287
|
+
title: 'Homoglyph characters',
|
|
288
|
+
description: 'Characters that look like ASCII but are different Unicode codepoints',
|
|
289
|
+
pattern: /[\u0410\u0412\u0415\u041A\u041C\u041D\u041E\u0420\u0421\u0422\u0425]/,
|
|
290
|
+
},
|
|
291
|
+
{
|
|
292
|
+
id: 'UC004',
|
|
293
|
+
category: 'unicode-steganography',
|
|
294
|
+
severity: 'low',
|
|
295
|
+
title: 'Invisible separator characters',
|
|
296
|
+
description: 'Unicode separator characters that may hide content',
|
|
297
|
+
pattern: /[\u2028\u2029\u00A0\u2000-\u200A]/,
|
|
298
|
+
},
|
|
299
|
+
];
|
|
300
|
+
/**
|
|
301
|
+
* Get rules by category
|
|
302
|
+
*/
|
|
303
|
+
export function getRulesByCategory(category) {
|
|
304
|
+
return SCANNER_RULES.filter(r => r.category === category);
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* Get rule by ID
|
|
308
|
+
*/
|
|
309
|
+
export function getRuleById(id) {
|
|
310
|
+
return SCANNER_RULES.find(r => r.id === id);
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* Get all categories
|
|
314
|
+
*/
|
|
315
|
+
export function getCategories() {
|
|
316
|
+
return [...new Set(SCANNER_RULES.map(r => r.category))];
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
* Create empty scan result
|
|
320
|
+
*/
|
|
321
|
+
export function createEmptyScanResult() {
|
|
322
|
+
return {
|
|
323
|
+
findings: [],
|
|
324
|
+
filesScanned: 0,
|
|
325
|
+
summary: {
|
|
326
|
+
critical: 0,
|
|
327
|
+
high: 0,
|
|
328
|
+
medium: 0,
|
|
329
|
+
low: 0,
|
|
330
|
+
info: 0,
|
|
331
|
+
total: 0,
|
|
332
|
+
},
|
|
333
|
+
};
|
|
334
|
+
}
|
|
335
|
+
//# sourceMappingURL=scanner-rules.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scanner-rules.js","sourceRoot":"","sources":["../../src/core/scanner-rules.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,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agent-skills-cli",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.9",
|
|
4
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",
|