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.
Files changed (142) hide show
  1. package/README.md +18 -17
  2. package/dist/cli/agents.d.ts +10 -0
  3. package/dist/cli/agents.d.ts.map +1 -0
  4. package/dist/cli/agents.js +270 -0
  5. package/dist/cli/agents.js.map +1 -0
  6. package/dist/cli/commands/audit.d.ts +11 -0
  7. package/dist/cli/commands/audit.d.ts.map +1 -0
  8. package/dist/cli/commands/audit.js +168 -0
  9. package/dist/cli/commands/audit.js.map +1 -0
  10. package/dist/cli/commands/blueprint.d.ts +11 -0
  11. package/dist/cli/commands/blueprint.d.ts.map +1 -0
  12. package/dist/cli/commands/blueprint.js +210 -0
  13. package/dist/cli/commands/blueprint.js.map +1 -0
  14. package/dist/cli/commands/bootstrap.d.ts +11 -0
  15. package/dist/cli/commands/bootstrap.d.ts.map +1 -0
  16. package/dist/cli/commands/bootstrap.js +267 -0
  17. package/dist/cli/commands/bootstrap.js.map +1 -0
  18. package/dist/cli/commands/capture.d.ts +11 -0
  19. package/dist/cli/commands/capture.d.ts.map +1 -0
  20. package/dist/cli/commands/capture.js +109 -0
  21. package/dist/cli/commands/capture.js.map +1 -0
  22. package/dist/cli/commands/ci.d.ts +11 -0
  23. package/dist/cli/commands/ci.d.ts.map +1 -0
  24. package/dist/cli/commands/ci.js +144 -0
  25. package/dist/cli/commands/ci.js.map +1 -0
  26. package/dist/cli/commands/collab.d.ts +11 -0
  27. package/dist/cli/commands/collab.d.ts.map +1 -0
  28. package/dist/cli/commands/collab.js +196 -0
  29. package/dist/cli/commands/collab.js.map +1 -0
  30. package/dist/cli/commands/convert.d.ts +11 -0
  31. package/dist/cli/commands/convert.d.ts.map +1 -0
  32. package/dist/cli/commands/convert.js +219 -0
  33. package/dist/cli/commands/convert.js.map +1 -0
  34. package/dist/cli/commands/craft.d.ts +18 -0
  35. package/dist/cli/commands/craft.d.ts.map +1 -0
  36. package/dist/cli/commands/craft.js +205 -0
  37. package/dist/cli/commands/craft.js.map +1 -0
  38. package/dist/cli/commands/export.d.ts +9 -0
  39. package/dist/cli/commands/export.d.ts.map +1 -0
  40. package/dist/cli/commands/export.js +103 -0
  41. package/dist/cli/commands/export.js.map +1 -0
  42. package/dist/cli/commands/forge.d.ts +11 -0
  43. package/dist/cli/commands/forge.d.ts.map +1 -0
  44. package/dist/cli/commands/forge.js +152 -0
  45. package/dist/cli/commands/forge.js.map +1 -0
  46. package/dist/cli/commands/grid.d.ts +11 -0
  47. package/dist/cli/commands/grid.d.ts.map +1 -0
  48. package/dist/cli/commands/grid.js +217 -0
  49. package/dist/cli/commands/grid.js.map +1 -0
  50. package/dist/cli/commands/insight.d.ts +7 -0
  51. package/dist/cli/commands/insight.d.ts.map +1 -0
  52. package/dist/cli/commands/insight.js +71 -0
  53. package/dist/cli/commands/insight.js.map +1 -0
  54. package/dist/cli/commands/install.d.ts +6 -0
  55. package/dist/cli/commands/install.d.ts.map +1 -0
  56. package/dist/cli/commands/install.js +359 -0
  57. package/dist/cli/commands/install.js.map +1 -0
  58. package/dist/cli/commands/interactive.d.ts +7 -0
  59. package/dist/cli/commands/interactive.d.ts.map +1 -0
  60. package/dist/cli/commands/interactive.js +535 -0
  61. package/dist/cli/commands/interactive.js.map +1 -0
  62. package/dist/cli/commands/list.d.ts +6 -0
  63. package/dist/cli/commands/list.d.ts.map +1 -0
  64. package/dist/cli/commands/list.js +77 -0
  65. package/dist/cli/commands/list.js.map +1 -0
  66. package/dist/cli/commands/lockspec.d.ts +11 -0
  67. package/dist/cli/commands/lockspec.d.ts.map +1 -0
  68. package/dist/cli/commands/lockspec.js +179 -0
  69. package/dist/cli/commands/lockspec.js.map +1 -0
  70. package/dist/cli/commands/marketplace.d.ts +7 -0
  71. package/dist/cli/commands/marketplace.d.ts.map +1 -0
  72. package/dist/cli/commands/marketplace.js +417 -0
  73. package/dist/cli/commands/marketplace.js.map +1 -0
  74. package/dist/cli/commands/method.d.ts +7 -0
  75. package/dist/cli/commands/method.d.ts.map +1 -0
  76. package/dist/cli/commands/method.js +140 -0
  77. package/dist/cli/commands/method.js.map +1 -0
  78. package/dist/cli/commands/mine.d.ts +11 -0
  79. package/dist/cli/commands/mine.d.ts.map +1 -0
  80. package/dist/cli/commands/mine.js +254 -0
  81. package/dist/cli/commands/mine.js.map +1 -0
  82. package/dist/cli/commands/recall.d.ts +11 -0
  83. package/dist/cli/commands/recall.d.ts.map +1 -0
  84. package/dist/cli/commands/recall.js +201 -0
  85. package/dist/cli/commands/recall.js.map +1 -0
  86. package/dist/cli/commands/rule.d.ts +11 -0
  87. package/dist/cli/commands/rule.d.ts.map +1 -0
  88. package/dist/cli/commands/rule.js +230 -0
  89. package/dist/cli/commands/rule.js.map +1 -0
  90. package/dist/cli/commands/search.d.ts +6 -0
  91. package/dist/cli/commands/search.d.ts.map +1 -0
  92. package/dist/cli/commands/search.js +173 -0
  93. package/dist/cli/commands/search.js.map +1 -0
  94. package/dist/cli/commands/show.d.ts +6 -0
  95. package/dist/cli/commands/show.d.ts.map +1 -0
  96. package/dist/cli/commands/show.js +150 -0
  97. package/dist/cli/commands/show.js.map +1 -0
  98. package/dist/cli/commands/submit.d.ts +15 -0
  99. package/dist/cli/commands/submit.d.ts.map +1 -0
  100. package/dist/cli/commands/submit.js +151 -0
  101. package/dist/cli/commands/submit.js.map +1 -0
  102. package/dist/cli/commands/suggest.d.ts +11 -0
  103. package/dist/cli/commands/suggest.d.ts.map +1 -0
  104. package/dist/cli/commands/suggest.js +164 -0
  105. package/dist/cli/commands/suggest.js.map +1 -0
  106. package/dist/cli/commands/track.d.ts +11 -0
  107. package/dist/cli/commands/track.d.ts.map +1 -0
  108. package/dist/cli/commands/track.js +199 -0
  109. package/dist/cli/commands/track.js.map +1 -0
  110. package/dist/cli/commands/trigger.d.ts +11 -0
  111. package/dist/cli/commands/trigger.d.ts.map +1 -0
  112. package/dist/cli/commands/trigger.js +157 -0
  113. package/dist/cli/commands/trigger.js.map +1 -0
  114. package/dist/cli/commands/utils-commands.d.ts +9 -0
  115. package/dist/cli/commands/utils-commands.d.ts.map +1 -0
  116. package/dist/cli/commands/utils-commands.js +389 -0
  117. package/dist/cli/commands/utils-commands.js.map +1 -0
  118. package/dist/cli/commands/validate.d.ts +6 -0
  119. package/dist/cli/commands/validate.d.ts.map +1 -0
  120. package/dist/cli/commands/validate.js +40 -0
  121. package/dist/cli/commands/validate.js.map +1 -0
  122. package/dist/cli/index.d.ts +3 -0
  123. package/dist/cli/index.d.ts.map +1 -1
  124. package/dist/cli/index.js +84 -2743
  125. package/dist/cli/index.js.map +1 -1
  126. package/dist/core/audit.d.ts +24 -0
  127. package/dist/core/audit.d.ts.map +1 -0
  128. package/dist/core/audit.js +195 -0
  129. package/dist/core/audit.js.map +1 -0
  130. package/dist/core/index.d.ts +6 -0
  131. package/dist/core/index.d.ts.map +1 -1
  132. package/dist/core/index.js +6 -0
  133. package/dist/core/index.js.map +1 -1
  134. package/dist/core/scanner-rules.d.ts +58 -0
  135. package/dist/core/scanner-rules.d.ts.map +1 -0
  136. package/dist/core/scanner-rules.js +335 -0
  137. package/dist/core/scanner-rules.js.map +1 -0
  138. package/dist/core/suggest.d.ts +51 -0
  139. package/dist/core/suggest.d.ts.map +1 -0
  140. package/dist/core/suggest.js +241 -0
  141. package/dist/core/suggest.js.map +1 -0
  142. 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.8",
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",