killer-skills 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. package/CHANGELOG.md +156 -0
  2. package/LICENSE +21 -0
  3. package/README.md +360 -0
  4. package/dist/commands/completion.d.ts +8 -0
  5. package/dist/commands/completion.d.ts.map +1 -0
  6. package/dist/commands/completion.js +242 -0
  7. package/dist/commands/completion.js.map +1 -0
  8. package/dist/commands/config.d.ts +24 -0
  9. package/dist/commands/config.d.ts.map +1 -0
  10. package/dist/commands/config.js +132 -0
  11. package/dist/commands/config.js.map +1 -0
  12. package/dist/commands/create.d.ts +9 -0
  13. package/dist/commands/create.d.ts.map +1 -0
  14. package/dist/commands/create.js +361 -0
  15. package/dist/commands/create.js.map +1 -0
  16. package/dist/commands/deps.d.ts +8 -0
  17. package/dist/commands/deps.d.ts.map +1 -0
  18. package/dist/commands/deps.js +144 -0
  19. package/dist/commands/deps.js.map +1 -0
  20. package/dist/commands/do.d.ts +13 -0
  21. package/dist/commands/do.d.ts.map +1 -0
  22. package/dist/commands/do.js +223 -0
  23. package/dist/commands/do.js.map +1 -0
  24. package/dist/commands/init.d.ts +8 -0
  25. package/dist/commands/init.d.ts.map +1 -0
  26. package/dist/commands/init.js +191 -0
  27. package/dist/commands/init.js.map +1 -0
  28. package/dist/commands/install.d.ts +13 -0
  29. package/dist/commands/install.d.ts.map +1 -0
  30. package/dist/commands/install.js +234 -0
  31. package/dist/commands/install.js.map +1 -0
  32. package/dist/commands/list.d.ts +9 -0
  33. package/dist/commands/list.d.ts.map +1 -0
  34. package/dist/commands/list.js +103 -0
  35. package/dist/commands/list.js.map +1 -0
  36. package/dist/commands/manage.d.ts +9 -0
  37. package/dist/commands/manage.d.ts.map +1 -0
  38. package/dist/commands/manage.js +132 -0
  39. package/dist/commands/manage.js.map +1 -0
  40. package/dist/commands/outdated.d.ts +9 -0
  41. package/dist/commands/outdated.d.ts.map +1 -0
  42. package/dist/commands/outdated.js +168 -0
  43. package/dist/commands/outdated.js.map +1 -0
  44. package/dist/commands/plugin.d.ts +8 -0
  45. package/dist/commands/plugin.d.ts.map +1 -0
  46. package/dist/commands/plugin.js +98 -0
  47. package/dist/commands/plugin.js.map +1 -0
  48. package/dist/commands/publish.d.ts +8 -0
  49. package/dist/commands/publish.d.ts.map +1 -0
  50. package/dist/commands/publish.js +199 -0
  51. package/dist/commands/publish.js.map +1 -0
  52. package/dist/commands/read.d.ts +9 -0
  53. package/dist/commands/read.d.ts.map +1 -0
  54. package/dist/commands/read.js +69 -0
  55. package/dist/commands/read.js.map +1 -0
  56. package/dist/commands/search.d.ts +8 -0
  57. package/dist/commands/search.d.ts.map +1 -0
  58. package/dist/commands/search.js +105 -0
  59. package/dist/commands/search.js.map +1 -0
  60. package/dist/commands/stats.d.ts +16 -0
  61. package/dist/commands/stats.d.ts.map +1 -0
  62. package/dist/commands/stats.js +137 -0
  63. package/dist/commands/stats.js.map +1 -0
  64. package/dist/commands/submit.d.ts +9 -0
  65. package/dist/commands/submit.d.ts.map +1 -0
  66. package/dist/commands/submit.js +245 -0
  67. package/dist/commands/submit.js.map +1 -0
  68. package/dist/commands/sync.d.ts +11 -0
  69. package/dist/commands/sync.d.ts.map +1 -0
  70. package/dist/commands/sync.js +134 -0
  71. package/dist/commands/sync.js.map +1 -0
  72. package/dist/commands/update.d.ts +9 -0
  73. package/dist/commands/update.d.ts.map +1 -0
  74. package/dist/commands/update.js +175 -0
  75. package/dist/commands/update.js.map +1 -0
  76. package/dist/config/claude.d.ts +2 -0
  77. package/dist/config/claude.d.ts.map +1 -0
  78. package/dist/config/claude.js +19 -0
  79. package/dist/config/claude.js.map +1 -0
  80. package/dist/config/cursor.d.ts +2 -0
  81. package/dist/config/cursor.d.ts.map +1 -0
  82. package/dist/config/cursor.js +18 -0
  83. package/dist/config/cursor.js.map +1 -0
  84. package/dist/config/ides.d.ts +19 -0
  85. package/dist/config/ides.d.ts.map +1 -0
  86. package/dist/config/ides.js +221 -0
  87. package/dist/config/ides.js.map +1 -0
  88. package/dist/index.d.ts +3 -0
  89. package/dist/index.d.ts.map +1 -0
  90. package/dist/index.js +57 -0
  91. package/dist/index.js.map +1 -0
  92. package/dist/mcp-server.d.ts +11 -0
  93. package/dist/mcp-server.d.ts.map +1 -0
  94. package/dist/mcp-server.js +264 -0
  95. package/dist/mcp-server.js.map +1 -0
  96. package/dist/registry.d.ts +8 -0
  97. package/dist/registry.d.ts.map +1 -0
  98. package/dist/registry.js +34 -0
  99. package/dist/registry.js.map +1 -0
  100. package/dist/types.d.ts +78 -0
  101. package/dist/types.d.ts.map +1 -0
  102. package/dist/types.js +7 -0
  103. package/dist/types.js.map +1 -0
  104. package/dist/utils/agents-md.d.ts +33 -0
  105. package/dist/utils/agents-md.d.ts.map +1 -0
  106. package/dist/utils/agents-md.js +137 -0
  107. package/dist/utils/agents-md.js.map +1 -0
  108. package/dist/utils/dependencies.d.ts +49 -0
  109. package/dist/utils/dependencies.d.ts.map +1 -0
  110. package/dist/utils/dependencies.js +141 -0
  111. package/dist/utils/dependencies.js.map +1 -0
  112. package/dist/utils/github.d.ts +58 -0
  113. package/dist/utils/github.d.ts.map +1 -0
  114. package/dist/utils/github.js +198 -0
  115. package/dist/utils/github.js.map +1 -0
  116. package/dist/utils/platform.d.ts +54 -0
  117. package/dist/utils/platform.d.ts.map +1 -0
  118. package/dist/utils/platform.js +154 -0
  119. package/dist/utils/platform.js.map +1 -0
  120. package/dist/utils/plugins.d.ts +50 -0
  121. package/dist/utils/plugins.d.ts.map +1 -0
  122. package/dist/utils/plugins.js +115 -0
  123. package/dist/utils/plugins.js.map +1 -0
  124. package/dist/utils/prompt-templates.d.ts +47 -0
  125. package/dist/utils/prompt-templates.d.ts.map +1 -0
  126. package/dist/utils/prompt-templates.js +160 -0
  127. package/dist/utils/prompt-templates.js.map +1 -0
  128. package/dist/utils/skill-metadata.d.ts +55 -0
  129. package/dist/utils/skill-metadata.d.ts.map +1 -0
  130. package/dist/utils/skill-metadata.js +82 -0
  131. package/dist/utils/skill-metadata.js.map +1 -0
  132. package/dist/utils/skills.d.ts +27 -0
  133. package/dist/utils/skills.d.ts.map +1 -0
  134. package/dist/utils/skills.js +163 -0
  135. package/dist/utils/skills.js.map +1 -0
  136. package/package.json +77 -0
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Platform Detection and Path Utilities
3
+ *
4
+ * Functions for detecting IDEs and creating installation paths.
5
+ * Converted from platform.js to TypeScript.
6
+ */
7
+ export interface PlatformInfo {
8
+ platform: NodeJS.Platform;
9
+ isWindows: boolean;
10
+ isMac: boolean;
11
+ isLinux: boolean;
12
+ homedir: string;
13
+ cwd: string;
14
+ }
15
+ export interface DetectedIDE {
16
+ ide: string;
17
+ name: string;
18
+ priority: number;
19
+ path: string;
20
+ method?: 'path' | 'env';
21
+ }
22
+ /**
23
+ * Get current platform info
24
+ */
25
+ export declare function getPlatformInfo(): PlatformInfo;
26
+ /**
27
+ * Detect which IDEs are available in the current project
28
+ */
29
+ export declare function detectProjectIDEs(projectPath?: string): DetectedIDE[];
30
+ /**
31
+ * Detect which IDEs are installed globally
32
+ */
33
+ export declare function detectGlobalIDEs(): DetectedIDE[];
34
+ /**
35
+ * Get the best IDE for the current context
36
+ */
37
+ export declare function getBestIDE(scope?: 'project' | 'global', projectPath?: string): string;
38
+ /**
39
+ * Ensure directory exists
40
+ */
41
+ export declare function ensureDir(dirPath: string): string;
42
+ /**
43
+ * Normalize path for current platform
44
+ */
45
+ export declare function normalizePath(inputPath: string): string;
46
+ /**
47
+ * Check if a path is a local path (file or directory)
48
+ */
49
+ export declare function isLocalPath(source: string): boolean;
50
+ /**
51
+ * Expand tilde to home directory
52
+ */
53
+ export declare function expandTilde(filePath: string): string;
54
+ //# sourceMappingURL=platform.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../../src/utils/platform.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,MAAM,WAAW,YAAY;IACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC1B,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;CAC3B;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,YAAY,CAS9C;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,SAAgB,GAAG,WAAW,EAAE,CAuB5E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,WAAW,EAAE,CAwDhD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,GAAE,SAAS,GAAG,QAAoB,EAAE,WAAW,SAAgB,GAAG,MAAM,CAevG;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAKjD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAOnD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAKpD"}
@@ -0,0 +1,154 @@
1
+ /**
2
+ * Platform Detection and Path Utilities
3
+ *
4
+ * Functions for detecting IDEs and creating installation paths.
5
+ * Converted from platform.js to TypeScript.
6
+ */
7
+ import os from 'os';
8
+ import fs from 'fs';
9
+ import path from 'path';
10
+ import { IDE_CONFIG, SUPPORTED_IDES } from '../config/ides.js';
11
+ /**
12
+ * Get current platform info
13
+ */
14
+ export function getPlatformInfo() {
15
+ return {
16
+ platform: process.platform,
17
+ isWindows: process.platform === 'win32',
18
+ isMac: process.platform === 'darwin',
19
+ isLinux: process.platform === 'linux',
20
+ homedir: os.homedir(),
21
+ cwd: process.cwd()
22
+ };
23
+ }
24
+ /**
25
+ * Detect which IDEs are available in the current project
26
+ */
27
+ export function detectProjectIDEs(projectPath = process.cwd()) {
28
+ const detected = [];
29
+ for (const ideKey of SUPPORTED_IDES) {
30
+ const config = IDE_CONFIG[ideKey];
31
+ if (!config.detectFiles)
32
+ continue;
33
+ for (const detectFile of config.detectFiles) {
34
+ const checkPath = path.join(projectPath, detectFile);
35
+ if (fs.existsSync(checkPath)) {
36
+ detected.push({
37
+ ide: ideKey,
38
+ name: config.name,
39
+ priority: config.priority,
40
+ path: checkPath
41
+ });
42
+ break;
43
+ }
44
+ }
45
+ }
46
+ // Sort by priority
47
+ return detected.sort((a, b) => a.priority - b.priority);
48
+ }
49
+ /**
50
+ * Detect which IDEs are installed globally
51
+ */
52
+ export function detectGlobalIDEs() {
53
+ const detected = [];
54
+ const platform = getPlatformInfo();
55
+ for (const ideKey of SUPPORTED_IDES) {
56
+ const config = IDE_CONFIG[ideKey];
57
+ let foundPath = null;
58
+ // Check global path
59
+ if (config.paths?.global && fs.existsSync(config.paths.global)) {
60
+ foundPath = config.paths.global;
61
+ }
62
+ // Check platform-specific paths on Mac
63
+ if (!foundPath && platform.isMac) {
64
+ const macPaths = {
65
+ claude: path.join(platform.homedir, '.claude'),
66
+ antigravity: path.join(platform.homedir, '.gemini/antigravity'),
67
+ cursor: path.join(platform.homedir, '.cursor'),
68
+ vscode: path.join(platform.homedir, '.vscode'),
69
+ windsurf: path.join(platform.homedir, '.windsurf'),
70
+ kiro: path.join(platform.homedir, '.kiro')
71
+ };
72
+ if (macPaths[ideKey] && fs.existsSync(macPaths[ideKey])) {
73
+ foundPath = macPaths[ideKey];
74
+ }
75
+ }
76
+ // Check environment variables
77
+ const envVars = {
78
+ vscode: ['VSCODE_GIT_IPC_HANDLE', 'TERM_PROGRAM'],
79
+ cursor: ['CURSOR_TRACE'],
80
+ claude: ['CLAUDE_CODE_ENTRYPOINT']
81
+ };
82
+ if (envVars[ideKey]) {
83
+ for (const envVar of envVars[ideKey]) {
84
+ if (process.env[envVar]) {
85
+ foundPath = foundPath || 'runtime-detected';
86
+ break;
87
+ }
88
+ }
89
+ }
90
+ if (foundPath) {
91
+ detected.push({
92
+ ide: ideKey,
93
+ name: config.name,
94
+ priority: config.priority,
95
+ path: foundPath,
96
+ method: foundPath === 'runtime-detected' ? 'env' : 'path'
97
+ });
98
+ }
99
+ }
100
+ return detected.sort((a, b) => a.priority - b.priority);
101
+ }
102
+ /**
103
+ * Get the best IDE for the current context
104
+ */
105
+ export function getBestIDE(scope = 'project', projectPath = process.cwd()) {
106
+ if (scope === 'project') {
107
+ const projectIDEs = detectProjectIDEs(projectPath);
108
+ if (projectIDEs.length > 0) {
109
+ return projectIDEs[0].ide;
110
+ }
111
+ }
112
+ const globalIDEs = detectGlobalIDEs();
113
+ if (globalIDEs.length > 0) {
114
+ return globalIDEs[0].ide;
115
+ }
116
+ // Default to Claude Code if nothing detected
117
+ return 'claude';
118
+ }
119
+ /**
120
+ * Ensure directory exists
121
+ */
122
+ export function ensureDir(dirPath) {
123
+ if (!fs.existsSync(dirPath)) {
124
+ fs.mkdirSync(dirPath, { recursive: true });
125
+ }
126
+ return dirPath;
127
+ }
128
+ /**
129
+ * Normalize path for current platform
130
+ */
131
+ export function normalizePath(inputPath) {
132
+ return path.normalize(inputPath);
133
+ }
134
+ /**
135
+ * Check if a path is a local path (file or directory)
136
+ */
137
+ export function isLocalPath(source) {
138
+ // Starts with /, ./, ../, or ~
139
+ return source.startsWith('/') ||
140
+ source.startsWith('./') ||
141
+ source.startsWith('../') ||
142
+ source.startsWith('~') ||
143
+ fs.existsSync(source);
144
+ }
145
+ /**
146
+ * Expand tilde to home directory
147
+ */
148
+ export function expandTilde(filePath) {
149
+ if (filePath.startsWith('~')) {
150
+ return path.join(os.homedir(), filePath.slice(1));
151
+ }
152
+ return filePath;
153
+ }
154
+ //# sourceMappingURL=platform.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform.js","sourceRoot":"","sources":["../../src/utils/platform.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Plugin System
3
+ *
4
+ * Enables third-party extensions for the CLI.
5
+ * Plugins can add new commands, IDE adapters, or post-install hooks.
6
+ */
7
+ export interface Plugin {
8
+ name: string;
9
+ version: string;
10
+ description: string;
11
+ type: PluginType;
12
+ entryPoint: string;
13
+ config?: Record<string, unknown>;
14
+ }
15
+ export type PluginType = 'command' | 'ide-adapter' | 'hook';
16
+ export interface PluginManifest {
17
+ name: string;
18
+ version: string;
19
+ description: string;
20
+ type: PluginType;
21
+ main: string;
22
+ config?: Record<string, unknown>;
23
+ }
24
+ /**
25
+ * Load all installed plugins
26
+ */
27
+ export declare function loadPlugins(): Promise<Plugin[]>;
28
+ /**
29
+ * Install a plugin from a path or URL
30
+ */
31
+ export declare function installPlugin(source: string): Promise<{
32
+ success: boolean;
33
+ message: string;
34
+ }>;
35
+ /**
36
+ * Uninstall a plugin
37
+ */
38
+ export declare function uninstallPlugin(name: string): Promise<{
39
+ success: boolean;
40
+ message: string;
41
+ }>;
42
+ /**
43
+ * Get plugin by name
44
+ */
45
+ export declare function getPlugin(name: string): Promise<Plugin | null>;
46
+ /**
47
+ * Execute plugin hooks
48
+ */
49
+ export declare function executeHooks(hookName: string, context: Record<string, unknown>): Promise<void>;
50
+ //# sourceMappingURL=plugins.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugins.d.ts","sourceRoot":"","sources":["../../src/utils/plugins.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,MAAM,WAAW,MAAM;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,UAAU,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,aAAa,GAAG,MAAM,CAAC;AAE5D,MAAM,WAAW,cAAc;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAiCrD;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CA4BlG;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAalG;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAGpE;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAepG"}
@@ -0,0 +1,115 @@
1
+ /**
2
+ * Plugin System
3
+ *
4
+ * Enables third-party extensions for the CLI.
5
+ * Plugins can add new commands, IDE adapters, or post-install hooks.
6
+ */
7
+ import fs from 'fs-extra';
8
+ import path from 'path';
9
+ import os from 'os';
10
+ const PLUGINS_DIR = path.join(os.homedir(), '.killer-skills', 'plugins');
11
+ /**
12
+ * Load all installed plugins
13
+ */
14
+ export async function loadPlugins() {
15
+ const plugins = [];
16
+ try {
17
+ await fs.ensureDir(PLUGINS_DIR);
18
+ const entries = await fs.readdir(PLUGINS_DIR, { withFileTypes: true });
19
+ for (const entry of entries) {
20
+ if (entry.isDirectory()) {
21
+ const manifestPath = path.join(PLUGINS_DIR, entry.name, 'plugin.json');
22
+ if (await fs.pathExists(manifestPath)) {
23
+ try {
24
+ const manifest = await fs.readJson(manifestPath);
25
+ plugins.push({
26
+ name: manifest.name,
27
+ version: manifest.version,
28
+ description: manifest.description,
29
+ type: manifest.type,
30
+ entryPoint: path.join(PLUGINS_DIR, entry.name, manifest.main),
31
+ config: manifest.config
32
+ });
33
+ }
34
+ catch {
35
+ // Invalid plugin, skip
36
+ }
37
+ }
38
+ }
39
+ }
40
+ }
41
+ catch {
42
+ // Plugins dir doesn't exist, that's fine
43
+ }
44
+ return plugins;
45
+ }
46
+ /**
47
+ * Install a plugin from a path or URL
48
+ */
49
+ export async function installPlugin(source) {
50
+ try {
51
+ await fs.ensureDir(PLUGINS_DIR);
52
+ // Local path
53
+ if (await fs.pathExists(source)) {
54
+ const manifestPath = path.join(source, 'plugin.json');
55
+ if (!await fs.pathExists(manifestPath)) {
56
+ return { success: false, message: 'Invalid plugin: missing plugin.json' };
57
+ }
58
+ const manifest = await fs.readJson(manifestPath);
59
+ const pluginDir = path.join(PLUGINS_DIR, manifest.name);
60
+ await fs.copy(source, pluginDir);
61
+ return { success: true, message: `Plugin "${manifest.name}" installed` };
62
+ }
63
+ // npm package (future)
64
+ if (source.startsWith('npm:')) {
65
+ return { success: false, message: 'npm plugins not yet supported' };
66
+ }
67
+ return { success: false, message: `Source not found: ${source}` };
68
+ }
69
+ catch (error) {
70
+ return { success: false, message: error.message };
71
+ }
72
+ }
73
+ /**
74
+ * Uninstall a plugin
75
+ */
76
+ export async function uninstallPlugin(name) {
77
+ try {
78
+ const pluginDir = path.join(PLUGINS_DIR, name);
79
+ if (!await fs.pathExists(pluginDir)) {
80
+ return { success: false, message: `Plugin not found: ${name}` };
81
+ }
82
+ await fs.remove(pluginDir);
83
+ return { success: true, message: `Plugin "${name}" uninstalled` };
84
+ }
85
+ catch (error) {
86
+ return { success: false, message: error.message };
87
+ }
88
+ }
89
+ /**
90
+ * Get plugin by name
91
+ */
92
+ export async function getPlugin(name) {
93
+ const plugins = await loadPlugins();
94
+ return plugins.find(p => p.name === name) || null;
95
+ }
96
+ /**
97
+ * Execute plugin hooks
98
+ */
99
+ export async function executeHooks(hookName, context) {
100
+ const plugins = await loadPlugins();
101
+ const hookPlugins = plugins.filter(p => p.type === 'hook');
102
+ for (const plugin of hookPlugins) {
103
+ try {
104
+ // Dynamic import of hook
105
+ const hook = await import(plugin.entryPoint);
106
+ if (typeof hook[hookName] === 'function') {
107
+ await hook[hookName](context);
108
+ }
109
+ }
110
+ catch {
111
+ // Hook failed, continue
112
+ }
113
+ }
114
+ }
115
+ //# sourceMappingURL=plugins.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugins.js","sourceRoot":"","sources":["../../src/utils/plugins.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Prompt Templates
3
+ *
4
+ * IDE-specific prompt templates for the sync command.
5
+ * Each IDE may have different preferred formats for skill discovery.
6
+ */
7
+ import type { SkillInfo } from './agents-md.js';
8
+ /**
9
+ * Template format types
10
+ */
11
+ export type PromptFormat = 'xml' | 'markdown' | 'yaml' | 'json';
12
+ /**
13
+ * Template configuration for each IDE
14
+ */
15
+ export interface PromptTemplate {
16
+ format: PromptFormat;
17
+ generate: (skills: SkillInfo[]) => string;
18
+ }
19
+ /**
20
+ * Default XML template (OpenSkills-compatible)
21
+ */
22
+ export declare function generateXmlPrompt(skills: SkillInfo[]): string;
23
+ /**
24
+ * Markdown template (simpler format)
25
+ */
26
+ export declare function generateMarkdownPrompt(skills: SkillInfo[]): string;
27
+ /**
28
+ * Cursor-optimized template
29
+ */
30
+ export declare function generateCursorPrompt(skills: SkillInfo[]): string;
31
+ /**
32
+ * Windsurf-optimized template
33
+ */
34
+ export declare function generateWindsurfPrompt(skills: SkillInfo[]): string;
35
+ /**
36
+ * Template registry
37
+ */
38
+ export declare const PROMPT_TEMPLATES: Record<string, PromptTemplate>;
39
+ /**
40
+ * Get the appropriate template for an IDE
41
+ */
42
+ export declare function getTemplateForIDE(ide: string): PromptTemplate;
43
+ /**
44
+ * Generate prompt for skills using IDE-specific template
45
+ */
46
+ export declare function generatePromptForIDE(ide: string, skills: SkillInfo[]): string;
47
+ //# sourceMappingURL=prompt-templates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-templates.d.ts","sourceRoot":"","sources":["../../src/utils/prompt-templates.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,UAAU,GAAG,MAAM,GAAG,MAAM,CAAC;AAEhE;;GAEG;AACH,MAAM,WAAW,cAAc;IAC3B,MAAM,EAAE,YAAY,CAAC;IACrB,QAAQ,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,MAAM,CAAC;CAC7C;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAoC7D;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAsBlE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAqBhE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAoBlE;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAoC3D,CAAC;AAEF;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,CAE7D;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAG7E"}
@@ -0,0 +1,160 @@
1
+ /**
2
+ * Prompt Templates
3
+ *
4
+ * IDE-specific prompt templates for the sync command.
5
+ * Each IDE may have different preferred formats for skill discovery.
6
+ */
7
+ /**
8
+ * Default XML template (OpenSkills-compatible)
9
+ */
10
+ export function generateXmlPrompt(skills) {
11
+ const skillTags = skills.map(s => `<skill>
12
+ <name>${s.name}</name>
13
+ <description>${s.description || 'No description'}</description>
14
+ <location>${s.location}</location>
15
+ </skill>`).join('\n\n');
16
+ return `<skills_system priority="1">
17
+
18
+ ## Available Skills
19
+
20
+ <!-- SKILLS_TABLE_START -->
21
+ <usage>
22
+ When users ask you to perform tasks, check if any of the available skills below can help complete the task more effectively. Skills provide specialized capabilities and domain knowledge.
23
+
24
+ How to use skills:
25
+ - Invoke: \`killer read <skill-name>\` (run in your shell)
26
+ - For multiple: \`killer read skill-one,skill-two\`
27
+ - The skill content will load with detailed instructions on how to complete the task
28
+ - Base directory provided in output for resolving bundled resources (references/, scripts/, assets/)
29
+
30
+ Usage notes:
31
+ - Only use skills listed in <available_skills> below
32
+ - Do not invoke a skill that is already loaded in your context
33
+ - Each skill invocation is stateless
34
+ </usage>
35
+
36
+ <available_skills>
37
+
38
+ ${skillTags}
39
+
40
+ </available_skills>
41
+ <!-- SKILLS_TABLE_END -->
42
+
43
+ </skills_system>
44
+ `;
45
+ }
46
+ /**
47
+ * Markdown template (simpler format)
48
+ */
49
+ export function generateMarkdownPrompt(skills) {
50
+ const skillList = skills.map(s => `- **${s.name}** (${s.location}): ${s.description || 'No description'}`).join('\n');
51
+ return `## Available Skills
52
+
53
+ The following skills are installed and can be invoked to help with specialized tasks.
54
+
55
+ ### Skills List
56
+
57
+ ${skillList}
58
+
59
+ ### How to Use
60
+
61
+ To use a skill, run: \`killer read <skill-name>\`
62
+
63
+ For multiple skills: \`killer read skill-one,skill-two\`
64
+
65
+ ---
66
+
67
+ `;
68
+ }
69
+ /**
70
+ * Cursor-optimized template
71
+ */
72
+ export function generateCursorPrompt(skills) {
73
+ const skillList = skills.map(s => ` - ${s.name}: ${s.description || 'No description'}`).join('\n');
74
+ return `# Cursor Rules - Skills Integration
75
+
76
+ ## Available Skills
77
+
78
+ ${skillList}
79
+
80
+ ## Skill Usage
81
+
82
+ When a task matches a skill's capability:
83
+ 1. Run \`killer read <skill-name>\` in the terminal
84
+ 2. Follow the skill's instructions
85
+ 3. Skills provide specialized knowledge and tools
86
+
87
+ ## Active Skills Count: ${skills.length}
88
+
89
+ `;
90
+ }
91
+ /**
92
+ * Windsurf-optimized template
93
+ */
94
+ export function generateWindsurfPrompt(skills) {
95
+ const skillList = skills.map(s => `| ${s.name} | ${s.description ? s.description.slice(0, 50) + '...' : 'No description'} | ${s.location} |`).join('\n');
96
+ return `# Windsurf Rules - Skills
97
+
98
+ ## Skills System
99
+
100
+ | Skill | Description | Location |
101
+ |-------|-------------|----------|
102
+ ${skillList}
103
+
104
+ ### Usage
105
+
106
+ Invoke skills with: \`killer read <skill-name>\`
107
+
108
+ Skills provide specialized capabilities for common development tasks.
109
+
110
+ `;
111
+ }
112
+ /**
113
+ * Template registry
114
+ */
115
+ export const PROMPT_TEMPLATES = {
116
+ // Default XML (OpenSkills-compatible)
117
+ default: {
118
+ format: 'xml',
119
+ generate: generateXmlPrompt
120
+ },
121
+ // Claude-specific (uses XML)
122
+ claude: {
123
+ format: 'xml',
124
+ generate: generateXmlPrompt
125
+ },
126
+ // Antigravity (uses XML)
127
+ antigravity: {
128
+ format: 'xml',
129
+ generate: generateXmlPrompt
130
+ },
131
+ // Cursor (markdown-based rules)
132
+ cursor: {
133
+ format: 'markdown',
134
+ generate: generateCursorPrompt
135
+ },
136
+ // Windsurf (markdown-based rules)
137
+ windsurf: {
138
+ format: 'markdown',
139
+ generate: generateWindsurfPrompt
140
+ },
141
+ // Generic markdown
142
+ markdown: {
143
+ format: 'markdown',
144
+ generate: generateMarkdownPrompt
145
+ }
146
+ };
147
+ /**
148
+ * Get the appropriate template for an IDE
149
+ */
150
+ export function getTemplateForIDE(ide) {
151
+ return PROMPT_TEMPLATES[ide] || PROMPT_TEMPLATES.default;
152
+ }
153
+ /**
154
+ * Generate prompt for skills using IDE-specific template
155
+ */
156
+ export function generatePromptForIDE(ide, skills) {
157
+ const template = getTemplateForIDE(ide);
158
+ return template.generate(skills);
159
+ }
160
+ //# sourceMappingURL=prompt-templates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-templates.js","sourceRoot":"","sources":["../../src/utils/prompt-templates.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAiBH;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAmB;IACjD,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9B,CAAC,CAAC,IAAI;eACC,CAAC,CAAC,WAAW,IAAI,gBAAgB;YACpC,CAAC,CAAC,QAAQ;SACb,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAEpB,OAAO;;;;;;;;;;;;;;;;;;;;;;EAsBT,SAAS;;;;;;CAMV,CAAC;AACF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAmB;IACtD,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAC7B,OAAO,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,QAAQ,MAAM,CAAC,CAAC,WAAW,IAAI,gBAAgB,EAAE,CAC1E,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,OAAO;;;;;;EAMT,SAAS;;;;;;;;;;CAUV,CAAC;AACF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAmB;IACpD,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAC7B,OAAO,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,WAAW,IAAI,gBAAgB,EAAE,CACxD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,OAAO;;;;EAIT,SAAS;;;;;;;;;0BASe,MAAM,CAAC,MAAM;;CAEtC,CAAC;AACF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAmB;IACtD,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAC7B,KAAK,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,gBAAgB,MAAM,CAAC,CAAC,QAAQ,IAAI,CAC7G,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,OAAO;;;;;;EAMT,SAAS;;;;;;;;CAQV,CAAC;AACF,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAmC;IAC5D,sCAAsC;IACtC,OAAO,EAAE;QACL,MAAM,EAAE,KAAK;QACb,QAAQ,EAAE,iBAAiB;KAC9B;IAED,6BAA6B;IAC7B,MAAM,EAAE;QACJ,MAAM,EAAE,KAAK;QACb,QAAQ,EAAE,iBAAiB;KAC9B;IAED,yBAAyB;IACzB,WAAW,EAAE;QACT,MAAM,EAAE,KAAK;QACb,QAAQ,EAAE,iBAAiB;KAC9B;IAED,gCAAgC;IAChC,MAAM,EAAE;QACJ,MAAM,EAAE,UAAU;QAClB,QAAQ,EAAE,oBAAoB;KACjC;IAED,kCAAkC;IAClC,QAAQ,EAAE;QACN,MAAM,EAAE,UAAU;QAClB,QAAQ,EAAE,sBAAsB;KACnC;IAED,mBAAmB;IACnB,QAAQ,EAAE;QACN,MAAM,EAAE,UAAU;QAClB,QAAQ,EAAE,sBAAsB;KACnC;CACJ,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAW;IACzC,OAAO,gBAAgB,CAAC,GAAG,CAAC,IAAI,gBAAgB,CAAC,OAAO,CAAC;AAC7D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,GAAW,EAAE,MAAmB;IACjE,MAAM,QAAQ,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACxC,OAAO,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACrC,CAAC"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Skill Metadata Management
3
+ *
4
+ * Tracks installation source for each skill, enabling:
5
+ * - One-command updates via `killer update`
6
+ * - Version tracking and change detection
7
+ * - Source transparency for users
8
+ */
9
+ export declare const SKILL_METADATA_FILE = ".killer-meta.json";
10
+ export type SkillSourceType = 'git' | 'local' | 'registry';
11
+ export interface SkillSourceMetadata {
12
+ /** Original source input (e.g., "anthropics/skills", "./my-skill") */
13
+ source: string;
14
+ /** Type of source */
15
+ sourceType: SkillSourceType;
16
+ /** Full repository URL for git sources */
17
+ repoUrl?: string;
18
+ /** Subpath within the repository */
19
+ subpath?: string;
20
+ /** Local filesystem path for local sources */
21
+ localPath?: string;
22
+ /** Registry skill name for registry sources */
23
+ registryName?: string;
24
+ /** ISO timestamp of installation */
25
+ installedAt: string;
26
+ /** Semantic version if available */
27
+ version?: string;
28
+ /** Git commit hash for precise tracking */
29
+ commitHash?: string;
30
+ }
31
+ /**
32
+ * Read skill metadata from a skill directory
33
+ */
34
+ export declare function readSkillMetadata(skillDir: string): SkillSourceMetadata | null;
35
+ /**
36
+ * Write skill metadata to a skill directory
37
+ */
38
+ export declare function writeSkillMetadata(skillDir: string, metadata: SkillSourceMetadata): void;
39
+ /**
40
+ * Check if a skill has metadata (indicating it was installed via killer-skills)
41
+ */
42
+ export declare function hasSkillMetadata(skillDir: string): boolean;
43
+ /**
44
+ * Build metadata for a git source
45
+ */
46
+ export declare function buildGitMetadata(source: string, repoUrl: string, subpath?: string, commitHash?: string): SkillSourceMetadata;
47
+ /**
48
+ * Build metadata for a local source
49
+ */
50
+ export declare function buildLocalMetadata(source: string, localPath: string): SkillSourceMetadata;
51
+ /**
52
+ * Build metadata for a registry source
53
+ */
54
+ export declare function buildRegistryMetadata(skillName: string, repoUrl: string, version?: string): SkillSourceMetadata;
55
+ //# sourceMappingURL=skill-metadata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-metadata.d.ts","sourceRoot":"","sources":["../../src/utils/skill-metadata.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,eAAO,MAAM,mBAAmB,sBAAsB,CAAC;AAEvD,MAAM,MAAM,eAAe,GAAG,KAAK,GAAG,OAAO,GAAG,UAAU,CAAC;AAE3D,MAAM,WAAW,mBAAmB;IAChC,sEAAsE;IACtE,MAAM,EAAE,MAAM,CAAC;IACf,qBAAqB;IACrB,UAAU,EAAE,eAAe,CAAC;IAC5B,0CAA0C;IAC1C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oCAAoC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8CAA8C;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+CAA+C;IAC/C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oCAAoC;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,oCAAoC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2CAA2C;IAC3C,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,mBAAmB,GAAG,IAAI,CAa9E;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,mBAAmB,GAAG,IAAI,CASxF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC5B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,MAAM,GACpB,mBAAmB,CASrB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,mBAAmB,CAOzF;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACjC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,GACjB,mBAAmB,CASrB"}