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.
Files changed (158) hide show
  1. package/README.md +43 -27
  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/remove.d.ts +40 -0
  87. package/dist/cli/commands/remove.d.ts.map +1 -0
  88. package/dist/cli/commands/remove.js +161 -0
  89. package/dist/cli/commands/remove.js.map +1 -0
  90. package/dist/cli/commands/rule.d.ts +11 -0
  91. package/dist/cli/commands/rule.d.ts.map +1 -0
  92. package/dist/cli/commands/rule.js +230 -0
  93. package/dist/cli/commands/rule.js.map +1 -0
  94. package/dist/cli/commands/search.d.ts +6 -0
  95. package/dist/cli/commands/search.d.ts.map +1 -0
  96. package/dist/cli/commands/search.js +173 -0
  97. package/dist/cli/commands/search.js.map +1 -0
  98. package/dist/cli/commands/show.d.ts +6 -0
  99. package/dist/cli/commands/show.d.ts.map +1 -0
  100. package/dist/cli/commands/show.js +150 -0
  101. package/dist/cli/commands/show.js.map +1 -0
  102. package/dist/cli/commands/submit.d.ts +15 -0
  103. package/dist/cli/commands/submit.d.ts.map +1 -0
  104. package/dist/cli/commands/submit.js +151 -0
  105. package/dist/cli/commands/submit.js.map +1 -0
  106. package/dist/cli/commands/suggest.d.ts +11 -0
  107. package/dist/cli/commands/suggest.d.ts.map +1 -0
  108. package/dist/cli/commands/suggest.js +164 -0
  109. package/dist/cli/commands/suggest.js.map +1 -0
  110. package/dist/cli/commands/track.d.ts +11 -0
  111. package/dist/cli/commands/track.d.ts.map +1 -0
  112. package/dist/cli/commands/track.js +199 -0
  113. package/dist/cli/commands/track.js.map +1 -0
  114. package/dist/cli/commands/trigger.d.ts +11 -0
  115. package/dist/cli/commands/trigger.d.ts.map +1 -0
  116. package/dist/cli/commands/trigger.js +157 -0
  117. package/dist/cli/commands/trigger.js.map +1 -0
  118. package/dist/cli/commands/utils-commands.d.ts +9 -0
  119. package/dist/cli/commands/utils-commands.d.ts.map +1 -0
  120. package/dist/cli/commands/utils-commands.js +389 -0
  121. package/dist/cli/commands/utils-commands.js.map +1 -0
  122. package/dist/cli/commands/validate.d.ts +6 -0
  123. package/dist/cli/commands/validate.d.ts.map +1 -0
  124. package/dist/cli/commands/validate.js +40 -0
  125. package/dist/cli/commands/validate.js.map +1 -0
  126. package/dist/cli/fzf-search.d.ts +28 -0
  127. package/dist/cli/fzf-search.d.ts.map +1 -0
  128. package/dist/cli/fzf-search.js +211 -0
  129. package/dist/cli/fzf-search.js.map +1 -0
  130. package/dist/cli/index.d.ts +3 -0
  131. package/dist/cli/index.d.ts.map +1 -1
  132. package/dist/cli/index.js +87 -2537
  133. package/dist/cli/index.js.map +1 -1
  134. package/dist/core/audit.d.ts +24 -0
  135. package/dist/core/audit.d.ts.map +1 -0
  136. package/dist/core/audit.js +195 -0
  137. package/dist/core/audit.js.map +1 -0
  138. package/dist/core/index.d.ts +10 -0
  139. package/dist/core/index.d.ts.map +1 -1
  140. package/dist/core/index.js +10 -0
  141. package/dist/core/index.js.map +1 -1
  142. package/dist/core/installer.d.ts +79 -0
  143. package/dist/core/installer.d.ts.map +1 -0
  144. package/dist/core/installer.js +142 -0
  145. package/dist/core/installer.js.map +1 -0
  146. package/dist/core/scanner-rules.d.ts +58 -0
  147. package/dist/core/scanner-rules.d.ts.map +1 -0
  148. package/dist/core/scanner-rules.js +335 -0
  149. package/dist/core/scanner-rules.js.map +1 -0
  150. package/dist/core/skill-lock.d.ts +114 -0
  151. package/dist/core/skill-lock.d.ts.map +1 -0
  152. package/dist/core/skill-lock.js +133 -0
  153. package/dist/core/skill-lock.js.map +1 -0
  154. package/dist/core/suggest.d.ts +51 -0
  155. package/dist/core/suggest.d.ts.map +1 -0
  156. package/dist/core/suggest.js +241 -0
  157. package/dist/core/suggest.js.map +1 -0
  158. package/package.json +2 -2
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Skill Installer Module
3
+ * Handles symlink-based installation of skills to agent directories
4
+ */
5
+ /**
6
+ * Agent configuration interface
7
+ */
8
+ export interface AgentConfig {
9
+ name: string;
10
+ displayName: string;
11
+ projectDir: string;
12
+ globalDir: string;
13
+ }
14
+ /**
15
+ * Installation options
16
+ */
17
+ export interface InstallOptions {
18
+ global: boolean;
19
+ agents: string[];
20
+ cwd: string;
21
+ }
22
+ /**
23
+ * Information about an installed skill
24
+ */
25
+ export interface InstalledSkillInfo {
26
+ name: string;
27
+ canonicalPath: string;
28
+ agents: string[];
29
+ linkedPaths: string[];
30
+ method: 'symlink' | 'copy';
31
+ }
32
+ /**
33
+ * Get the canonical skills storage directory
34
+ * - Global: ~/.skills/
35
+ * - Project: .skills/
36
+ */
37
+ export declare function getCanonicalSkillsDir(global: boolean, cwd: string): string;
38
+ /**
39
+ * Get the canonical path for a specific skill
40
+ */
41
+ export declare function getCanonicalPath(skillName: string, options: {
42
+ global: boolean;
43
+ cwd: string;
44
+ }): string;
45
+ /**
46
+ * Get the agent skill directory path
47
+ */
48
+ export declare function getAgentSkillPath(skillName: string, agentConfig: AgentConfig, options: {
49
+ global: boolean;
50
+ cwd: string;
51
+ }): string;
52
+ /**
53
+ * Check if a path is a symlink
54
+ */
55
+ export declare function isSymlink(path: string): Promise<boolean>;
56
+ /**
57
+ * Install a skill with symlinks to each agent
58
+ *
59
+ * @param sourcePath - Path to downloaded skill (temp directory)
60
+ * @param skillName - Name of the skill
61
+ * @param agents - Map of agent configs to install to
62
+ * @param options - Install options
63
+ */
64
+ export declare function installSkillWithSymlinks(sourcePath: string, skillName: string, agentConfigs: Record<string, AgentConfig>, targetAgents: string[], options: InstallOptions): Promise<InstalledSkillInfo>;
65
+ /**
66
+ * Remove a skill from all its installed locations
67
+ */
68
+ export declare function removeSkillInstallation(skillName: string, agentConfigs: Record<string, AgentConfig>, agents: string[], options: {
69
+ global: boolean;
70
+ cwd: string;
71
+ }): Promise<void>;
72
+ /**
73
+ * Check if a skill is installed via symlink or copy
74
+ */
75
+ export declare function getSkillInstallMethod(skillName: string, agentConfig: AgentConfig, options: {
76
+ global: boolean;
77
+ cwd: string;
78
+ }): Promise<'symlink' | 'copy' | 'none'>;
79
+ //# sourceMappingURL=installer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"installer.d.ts","sourceRoot":"","sources":["../../src/core/installer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH;;GAEG;AACH,MAAM,WAAW,WAAW;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC3B,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,MAAM,EAAE,SAAS,GAAG,MAAM,CAAC;CAC9B;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAI1E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC5B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAC1C,MAAM,CAER;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC7B,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAC1C,MAAM,CAKR;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAO9D;AA8BD;;;;;;;GAOG;AACH,wBAAsB,wBAAwB,CAC1C,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,EACzC,YAAY,EAAE,MAAM,EAAE,EACtB,OAAO,EAAE,cAAc,GACxB,OAAO,CAAC,kBAAkB,CAAC,CAuC7B;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CACzC,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,EACzC,MAAM,EAAE,MAAM,EAAE,EAChB,OAAO,EAAE;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAC1C,OAAO,CAAC,IAAI,CAAC,CAkBf;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACvC,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAC1C,OAAO,CAAC,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC,CAYtC"}
@@ -0,0 +1,142 @@
1
+ /**
2
+ * Skill Installer Module
3
+ * Handles symlink-based installation of skills to agent directories
4
+ */
5
+ import { homedir } from 'os';
6
+ import { join, dirname } from 'path';
7
+ import { mkdir, cp, rm, symlink, lstat } from 'fs/promises';
8
+ import { existsSync } from 'fs';
9
+ /**
10
+ * Get the canonical skills storage directory
11
+ * - Global: ~/.skills/
12
+ * - Project: .skills/
13
+ */
14
+ export function getCanonicalSkillsDir(global, cwd) {
15
+ return global
16
+ ? join(homedir(), '.skills')
17
+ : join(cwd, '.skills');
18
+ }
19
+ /**
20
+ * Get the canonical path for a specific skill
21
+ */
22
+ export function getCanonicalPath(skillName, options) {
23
+ return join(getCanonicalSkillsDir(options.global, options.cwd), skillName);
24
+ }
25
+ /**
26
+ * Get the agent skill directory path
27
+ */
28
+ export function getAgentSkillPath(skillName, agentConfig, options) {
29
+ const baseDir = options.global
30
+ ? agentConfig.globalDir
31
+ : join(options.cwd, agentConfig.projectDir);
32
+ return join(baseDir, skillName);
33
+ }
34
+ /**
35
+ * Check if a path is a symlink
36
+ */
37
+ export async function isSymlink(path) {
38
+ try {
39
+ const stats = await lstat(path);
40
+ return stats.isSymbolicLink();
41
+ }
42
+ catch {
43
+ return false;
44
+ }
45
+ }
46
+ /**
47
+ * Create a symlink, falling back to copy if symlinks fail (Windows)
48
+ */
49
+ async function createSymlinkOrCopy(source, target) {
50
+ try {
51
+ // Remove existing target if any
52
+ if (existsSync(target)) {
53
+ await rm(target, { recursive: true, force: true });
54
+ }
55
+ // Ensure parent directory exists
56
+ await mkdir(dirname(target), { recursive: true });
57
+ // Try creating symlink
58
+ await symlink(source, target, 'junction'); // 'junction' works on Windows without admin
59
+ return 'symlink';
60
+ }
61
+ catch (err) {
62
+ // Symlink failed, fall back to copy
63
+ console.warn(`Symlink failed, using copy: ${err.message}`);
64
+ await mkdir(dirname(target), { recursive: true });
65
+ await cp(source, target, { recursive: true });
66
+ return 'copy';
67
+ }
68
+ }
69
+ /**
70
+ * Install a skill with symlinks to each agent
71
+ *
72
+ * @param sourcePath - Path to downloaded skill (temp directory)
73
+ * @param skillName - Name of the skill
74
+ * @param agents - Map of agent configs to install to
75
+ * @param options - Install options
76
+ */
77
+ export async function installSkillWithSymlinks(sourcePath, skillName, agentConfigs, targetAgents, options) {
78
+ const canonicalPath = getCanonicalPath(skillName, options);
79
+ // 1. Create canonical directory and copy skill
80
+ await mkdir(dirname(canonicalPath), { recursive: true });
81
+ // Remove existing canonical copy if any
82
+ if (existsSync(canonicalPath)) {
83
+ await rm(canonicalPath, { recursive: true, force: true });
84
+ }
85
+ // Copy to canonical location
86
+ await cp(sourcePath, canonicalPath, { recursive: true });
87
+ // 2. Create symlinks/copies for each agent
88
+ const linkedPaths = [];
89
+ let method = 'symlink';
90
+ for (const agentName of targetAgents) {
91
+ const agentConfig = agentConfigs[agentName];
92
+ if (!agentConfig)
93
+ continue;
94
+ const agentSkillPath = getAgentSkillPath(skillName, agentConfig, options);
95
+ const linkMethod = await createSymlinkOrCopy(canonicalPath, agentSkillPath);
96
+ if (linkMethod === 'copy') {
97
+ method = 'copy'; // If any fails, mark as copy
98
+ }
99
+ linkedPaths.push(agentSkillPath);
100
+ }
101
+ return {
102
+ name: skillName,
103
+ canonicalPath,
104
+ agents: targetAgents,
105
+ linkedPaths,
106
+ method
107
+ };
108
+ }
109
+ /**
110
+ * Remove a skill from all its installed locations
111
+ */
112
+ export async function removeSkillInstallation(skillName, agentConfigs, agents, options) {
113
+ // Remove from each agent directory
114
+ for (const agentName of agents) {
115
+ const agentConfig = agentConfigs[agentName];
116
+ if (!agentConfig)
117
+ continue;
118
+ const agentSkillPath = getAgentSkillPath(skillName, agentConfig, options);
119
+ if (existsSync(agentSkillPath)) {
120
+ await rm(agentSkillPath, { recursive: true, force: true });
121
+ }
122
+ }
123
+ // Remove canonical copy
124
+ const canonicalPath = getCanonicalPath(skillName, options);
125
+ if (existsSync(canonicalPath)) {
126
+ await rm(canonicalPath, { recursive: true, force: true });
127
+ }
128
+ }
129
+ /**
130
+ * Check if a skill is installed via symlink or copy
131
+ */
132
+ export async function getSkillInstallMethod(skillName, agentConfig, options) {
133
+ const agentSkillPath = getAgentSkillPath(skillName, agentConfig, options);
134
+ if (!existsSync(agentSkillPath)) {
135
+ return 'none';
136
+ }
137
+ if (await isSymlink(agentSkillPath)) {
138
+ return 'symlink';
139
+ }
140
+ return 'copy';
141
+ }
142
+ //# sourceMappingURL=installer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"installer.js","sourceRoot":"","sources":["../../src/core/installer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Scanner Rules - Security vulnerability detection rules
3
+ * Used by the audit command to scan skills for potential threats
4
+ */
5
+ export type Severity = 'critical' | 'high' | 'medium' | 'low' | 'info';
6
+ export interface ScannerRule {
7
+ id: string;
8
+ category: string;
9
+ severity: Severity;
10
+ title: string;
11
+ description: string;
12
+ pattern: RegExp;
13
+ falsePositiveCheck?: (line: string, context: string[]) => boolean;
14
+ }
15
+ export interface ScanFinding {
16
+ ruleId: string;
17
+ category: string;
18
+ severity: Severity;
19
+ title: string;
20
+ description: string;
21
+ file: string;
22
+ line: number;
23
+ lineContent: string;
24
+ column?: number;
25
+ }
26
+ export interface ScanResult {
27
+ findings: ScanFinding[];
28
+ filesScanned: number;
29
+ summary: {
30
+ critical: number;
31
+ high: number;
32
+ medium: number;
33
+ low: number;
34
+ info: number;
35
+ total: number;
36
+ };
37
+ }
38
+ /**
39
+ * All scanner rules organized by category
40
+ */
41
+ export declare const SCANNER_RULES: ScannerRule[];
42
+ /**
43
+ * Get rules by category
44
+ */
45
+ export declare function getRulesByCategory(category: string): ScannerRule[];
46
+ /**
47
+ * Get rule by ID
48
+ */
49
+ export declare function getRuleById(id: string): ScannerRule | undefined;
50
+ /**
51
+ * Get all categories
52
+ */
53
+ export declare function getCategories(): string[];
54
+ /**
55
+ * Create empty scan result
56
+ */
57
+ export declare function createEmptyScanResult(): ScanResult;
58
+ //# sourceMappingURL=scanner-rules.d.ts.map
@@ -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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"}