@swarmify/agents-cli 1.0.0 → 1.1.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.
package/dist/lib/git.js CHANGED
@@ -2,39 +2,126 @@ import simpleGit from 'simple-git';
2
2
  import * as fs from 'fs';
3
3
  import * as path from 'path';
4
4
  import { getRepoLocalPath, getPackageLocalPath } from './state.js';
5
+ /**
6
+ * Parse a source string into a GitSource object.
7
+ *
8
+ * Supported formats:
9
+ * gh:owner/repo -> https://github.com/owner/repo.git
10
+ * gh:owner/repo@branch -> https://github.com/owner/repo.git (ref: branch)
11
+ * owner/repo -> https://github.com/owner/repo.git
12
+ * owner/repo@branch -> https://github.com/owner/repo.git (ref: branch)
13
+ * github.com/owner/repo -> https://github.com/owner/repo.git
14
+ * github.com:owner/repo -> https://github.com/owner/repo.git
15
+ * github.com:owner/repo.git -> https://github.com/owner/repo.git
16
+ * git@github.com:owner/repo.git -> https://github.com/owner/repo.git
17
+ * https://github.com/owner/repo -> https://github.com/owner/repo.git
18
+ * https://github.com/owner/repo.git -> https://github.com/owner/repo.git
19
+ * /path/to/local -> local path
20
+ * ./relative/path -> local path
21
+ */
5
22
  export function parseSource(source) {
6
- if (source.startsWith('gh:')) {
7
- const rest = source.slice(3);
8
- const [repo, ref] = rest.split('@');
23
+ // Split off @ref suffix (but not from URLs with @ in them like git@)
24
+ let ref;
25
+ let cleanSource = source;
26
+ // Handle @ref suffix (only if it's at the end and not part of git@)
27
+ const atIndex = source.lastIndexOf('@');
28
+ if (atIndex > 0 && !source.startsWith('git@') && !source.slice(0, atIndex).includes('://')) {
29
+ // Check if what's after @ looks like a ref (no slashes, no dots except in branch names)
30
+ const possibleRef = source.slice(atIndex + 1);
31
+ if (possibleRef && !possibleRef.includes('/') && !possibleRef.includes(':')) {
32
+ ref = possibleRef;
33
+ cleanSource = source.slice(0, atIndex);
34
+ }
35
+ }
36
+ // gh:owner/repo shorthand
37
+ if (cleanSource.startsWith('gh:')) {
38
+ const repo = cleanSource.slice(3).replace(/\.git$/, '');
39
+ return {
40
+ type: 'github',
41
+ url: `https://github.com/${repo}.git`,
42
+ ref: ref || 'main',
43
+ };
44
+ }
45
+ // git@github.com:owner/repo.git (SSH URL)
46
+ if (cleanSource.startsWith('git@github.com:')) {
47
+ const repo = cleanSource.slice(15).replace(/\.git$/, '');
9
48
  return {
10
49
  type: 'github',
11
50
  url: `https://github.com/${repo}.git`,
12
51
  ref: ref || 'main',
13
52
  };
14
53
  }
15
- if (source.startsWith('http://') || source.startsWith('https://')) {
16
- const [url, ref] = source.split('@');
54
+ // github.com:owner/repo.git (SSH-style without git@)
55
+ if (cleanSource.startsWith('github.com:')) {
56
+ const repo = cleanSource.slice(11).replace(/\.git$/, '');
57
+ return {
58
+ type: 'github',
59
+ url: `https://github.com/${repo}.git`,
60
+ ref: ref || 'main',
61
+ };
62
+ }
63
+ // github.com/owner/repo (domain without protocol)
64
+ if (cleanSource.startsWith('github.com/')) {
65
+ const repo = cleanSource.slice(11).replace(/\.git$/, '');
66
+ return {
67
+ type: 'github',
68
+ url: `https://github.com/${repo}.git`,
69
+ ref: ref || 'main',
70
+ };
71
+ }
72
+ // https:// or http:// URLs
73
+ if (cleanSource.startsWith('http://') || cleanSource.startsWith('https://')) {
74
+ // Check if it's a GitHub URL
75
+ const githubMatch = cleanSource.match(/^https?:\/\/github\.com\/([^/]+\/[^/]+?)(?:\.git)?$/);
76
+ if (githubMatch) {
77
+ return {
78
+ type: 'github',
79
+ url: `https://github.com/${githubMatch[1]}.git`,
80
+ ref: ref || 'main',
81
+ };
82
+ }
83
+ // Generic URL
17
84
  return {
18
85
  type: 'url',
19
- url: url.endsWith('.git') ? url : `${url}.git`,
86
+ url: cleanSource.endsWith('.git') ? cleanSource : `${cleanSource}.git`,
20
87
  ref,
21
88
  };
22
89
  }
23
- if (fs.existsSync(source)) {
90
+ // Local path (absolute or relative)
91
+ if (cleanSource.startsWith('/') || cleanSource.startsWith('./') || cleanSource.startsWith('../')) {
92
+ if (fs.existsSync(cleanSource)) {
93
+ return {
94
+ type: 'local',
95
+ url: path.resolve(cleanSource),
96
+ };
97
+ }
98
+ }
99
+ // Check if it exists as a local path (could be a directory name without ./)
100
+ if (fs.existsSync(cleanSource)) {
24
101
  return {
25
102
  type: 'local',
26
- url: path.resolve(source),
103
+ url: path.resolve(cleanSource),
104
+ };
105
+ }
106
+ // Bare owner/repo format (assumes GitHub)
107
+ if (cleanSource.includes('/') && !cleanSource.includes(':') && !cleanSource.includes('.')) {
108
+ const repo = cleanSource.replace(/\.git$/, '');
109
+ return {
110
+ type: 'github',
111
+ url: `https://github.com/${repo}.git`,
112
+ ref: ref || 'main',
27
113
  };
28
114
  }
29
- if (source.includes('/') && !source.includes(':')) {
30
- const [repo, ref] = source.split('@');
115
+ // Last attempt: treat as GitHub if it looks like owner/repo (with possible .git)
116
+ if (/^[a-zA-Z0-9_-]+\/[a-zA-Z0-9_.-]+$/.test(cleanSource)) {
117
+ const repo = cleanSource.replace(/\.git$/, '');
31
118
  return {
32
119
  type: 'github',
33
120
  url: `https://github.com/${repo}.git`,
34
121
  ref: ref || 'main',
35
122
  };
36
123
  }
37
- throw new Error(`Invalid source: ${source}`);
124
+ throw new Error(`Invalid source: ${source}. Supported formats: gh:owner/repo, owner/repo, github.com/owner/repo, https://github.com/owner/repo, or local path`);
38
125
  }
39
126
  export async function cloneOrPull(source, targetDir) {
40
127
  const git = simpleGit();
@@ -1 +1 @@
1
- {"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/lib/git.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/lib/git.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { AgentId, InstalledHook } from './types.js';
2
+ export declare function listInstalledHooksWithScope(agentId: AgentId, cwd?: string): InstalledHook[];
3
+ export declare function installHooks(source: string, agents: AgentId[], options?: {
4
+ scope?: 'user' | 'project';
5
+ }): Promise<{
6
+ installed: string[];
7
+ errors: string[];
8
+ }>;
9
+ export declare function removeHook(name: string, agents: AgentId[]): Promise<{
10
+ removed: string[];
11
+ errors: string[];
12
+ }>;
13
+ export declare function promoteHookToUser(agentId: AgentId, name: string, cwd?: string): {
14
+ success: boolean;
15
+ error?: string;
16
+ };
17
+ export declare function discoverHooksFromRepo(repoPath: string): {
18
+ shared: string[];
19
+ agentSpecific: Record<AgentId, string[]>;
20
+ };
21
+ //# sourceMappingURL=hooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/lib/hooks.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAwIzD,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,OAAO,EAChB,GAAG,GAAE,MAAsB,GAC1B,aAAa,EAAE,CAiCjB;AAED,wBAAsB,YAAY,CAChC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,OAAO,EAAE,EACjB,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAO,GAC3C,OAAO,CAAC;IAAE,SAAS,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAsCpD;AAED,wBAAsB,UAAU,CAC9B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,OAAO,EAAE,GAChB,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CA0BlD;AAED,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,MAAM,EACZ,GAAG,GAAE,MAAsB,GAC1B;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAoBtC;AAED,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,MAAM,GACf;IAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,CAAA;CAAE,CAYhE"}
@@ -0,0 +1,234 @@
1
+ import * as fs from 'fs';
2
+ import * as path from 'path';
3
+ import { AGENTS, ALL_AGENT_IDS } from './agents.js';
4
+ const SCRIPT_EXTENSIONS = new Set([
5
+ '.sh',
6
+ '.bash',
7
+ '.zsh',
8
+ '.py',
9
+ '.js',
10
+ '.ts',
11
+ '.mjs',
12
+ '.cjs',
13
+ '.rb',
14
+ '.pl',
15
+ '.ps1',
16
+ '.cmd',
17
+ '.bat',
18
+ ]);
19
+ function isExecutable(mode) {
20
+ return (mode & 0o111) !== 0;
21
+ }
22
+ function getHooksDir(agentId) {
23
+ const agent = AGENTS[agentId];
24
+ return path.join(agent.configDir, agent.hooksDir);
25
+ }
26
+ function getProjectHooksDir(agentId, cwd) {
27
+ const agent = AGENTS[agentId];
28
+ return path.join(cwd, `.${agentId}`, agent.hooksDir);
29
+ }
30
+ function ensureDir(dir) {
31
+ if (!fs.existsSync(dir)) {
32
+ fs.mkdirSync(dir, { recursive: true });
33
+ }
34
+ }
35
+ function removeHookFiles(dir, name) {
36
+ if (!fs.existsSync(dir)) {
37
+ return;
38
+ }
39
+ const files = fs.readdirSync(dir);
40
+ for (const file of files) {
41
+ const ext = path.extname(file);
42
+ const base = path.basename(file, ext);
43
+ if (base === name) {
44
+ const fullPath = path.join(dir, file);
45
+ const stat = fs.statSync(fullPath);
46
+ if (stat.isFile()) {
47
+ fs.unlinkSync(fullPath);
48
+ }
49
+ }
50
+ }
51
+ }
52
+ function listHookEntriesFromDir(dir) {
53
+ if (!fs.existsSync(dir)) {
54
+ return [];
55
+ }
56
+ const files = [];
57
+ for (const file of fs.readdirSync(dir)) {
58
+ const fullPath = path.join(dir, file);
59
+ const stat = fs.statSync(fullPath);
60
+ if (!stat.isFile())
61
+ continue;
62
+ const ext = path.extname(file);
63
+ const base = path.basename(file, ext);
64
+ files.push({
65
+ name: file,
66
+ base,
67
+ ext,
68
+ fullPath,
69
+ isExec: isExecutable(stat.mode),
70
+ });
71
+ }
72
+ const grouped = new Map();
73
+ for (const file of files) {
74
+ const list = grouped.get(file.base) || [];
75
+ list.push(file);
76
+ grouped.set(file.base, list);
77
+ }
78
+ const entries = [];
79
+ for (const [base, group] of grouped) {
80
+ group.sort((a, b) => a.name.localeCompare(b.name));
81
+ const script = group.find((f) => f.isExec) ||
82
+ group.find((f) => SCRIPT_EXTENSIONS.has(f.ext.toLowerCase())) ||
83
+ group[0];
84
+ if (!script)
85
+ continue;
86
+ const data = group.find((f) => f !== script);
87
+ entries.push({
88
+ name: base,
89
+ scriptPath: script.fullPath,
90
+ dataFile: data ? data.fullPath : undefined,
91
+ });
92
+ }
93
+ entries.sort((a, b) => a.name.localeCompare(b.name));
94
+ return entries;
95
+ }
96
+ function buildHookMap(entries) {
97
+ const map = new Map();
98
+ for (const entry of entries) {
99
+ map.set(entry.name, entry);
100
+ }
101
+ return map;
102
+ }
103
+ function copyHook(entry, targetDir) {
104
+ ensureDir(targetDir);
105
+ removeHookFiles(targetDir, entry.name);
106
+ const scriptTarget = path.join(targetDir, path.basename(entry.scriptPath));
107
+ fs.copyFileSync(entry.scriptPath, scriptTarget);
108
+ const scriptStat = fs.statSync(entry.scriptPath);
109
+ fs.chmodSync(scriptTarget, scriptStat.mode);
110
+ if (entry.dataFile) {
111
+ const dataTarget = path.join(targetDir, path.basename(entry.dataFile));
112
+ fs.copyFileSync(entry.dataFile, dataTarget);
113
+ }
114
+ }
115
+ export function listInstalledHooksWithScope(agentId, cwd = process.cwd()) {
116
+ const agent = AGENTS[agentId];
117
+ if (!agent.supportsHooks) {
118
+ return [];
119
+ }
120
+ const results = [];
121
+ const userDir = getHooksDir(agentId);
122
+ const userHooks = listHookEntriesFromDir(userDir);
123
+ for (const hook of userHooks) {
124
+ results.push({
125
+ name: hook.name,
126
+ path: hook.scriptPath,
127
+ dataFile: hook.dataFile,
128
+ scope: 'user',
129
+ agent: agentId,
130
+ });
131
+ }
132
+ const projectDir = getProjectHooksDir(agentId, cwd);
133
+ const projectHooks = listHookEntriesFromDir(projectDir);
134
+ for (const hook of projectHooks) {
135
+ results.push({
136
+ name: hook.name,
137
+ path: hook.scriptPath,
138
+ dataFile: hook.dataFile,
139
+ scope: 'project',
140
+ agent: agentId,
141
+ });
142
+ }
143
+ return results;
144
+ }
145
+ export async function installHooks(source, agents, options = {}) {
146
+ const installed = [];
147
+ const errors = [];
148
+ const scope = options.scope || 'user';
149
+ const cwd = process.cwd();
150
+ const sharedDir = path.join(source, 'shared', 'hooks');
151
+ const sharedHooks = buildHookMap(listHookEntriesFromDir(sharedDir));
152
+ const uniqueAgents = Array.from(new Set(agents));
153
+ for (const agentId of uniqueAgents) {
154
+ const agent = AGENTS[agentId];
155
+ if (!agent || !agent.supportsHooks) {
156
+ errors.push(`${agentId}:Agent does not support hooks`);
157
+ continue;
158
+ }
159
+ const agentDir = path.join(source, agentId, agent.hooksDir);
160
+ const agentHooks = buildHookMap(listHookEntriesFromDir(agentDir));
161
+ const hooks = new Map(sharedHooks);
162
+ for (const [name, entry] of agentHooks) {
163
+ hooks.set(name, entry);
164
+ }
165
+ const targetDir = scope === 'project' ? getProjectHooksDir(agentId, cwd) : getHooksDir(agentId);
166
+ for (const entry of hooks.values()) {
167
+ try {
168
+ copyHook(entry, targetDir);
169
+ installed.push(`${entry.name}:${agentId}`);
170
+ }
171
+ catch (err) {
172
+ errors.push(`${entry.name}:${agentId}:${err.message}`);
173
+ }
174
+ }
175
+ }
176
+ return { installed, errors };
177
+ }
178
+ export async function removeHook(name, agents) {
179
+ const removed = [];
180
+ const errors = [];
181
+ const uniqueAgents = Array.from(new Set(agents));
182
+ for (const agentId of uniqueAgents) {
183
+ const agent = AGENTS[agentId];
184
+ if (!agent || !agent.supportsHooks) {
185
+ errors.push(`${agentId}:Agent does not support hooks`);
186
+ continue;
187
+ }
188
+ try {
189
+ const dir = getHooksDir(agentId);
190
+ const filesBefore = fs.existsSync(dir) ? fs.readdirSync(dir) : [];
191
+ removeHookFiles(dir, name);
192
+ const filesAfter = fs.existsSync(dir) ? fs.readdirSync(dir) : [];
193
+ if (filesBefore.length !== filesAfter.length) {
194
+ removed.push(`${name}:${agentId}`);
195
+ }
196
+ }
197
+ catch (err) {
198
+ errors.push(`${name}:${agentId}:${err.message}`);
199
+ }
200
+ }
201
+ return { removed, errors };
202
+ }
203
+ export function promoteHookToUser(agentId, name, cwd = process.cwd()) {
204
+ const agent = AGENTS[agentId];
205
+ if (!agent.supportsHooks) {
206
+ return { success: false, error: 'Agent does not support hooks' };
207
+ }
208
+ const projectDir = getProjectHooksDir(agentId, cwd);
209
+ const hooks = listHookEntriesFromDir(projectDir);
210
+ const hook = hooks.find((h) => h.name === name);
211
+ if (!hook) {
212
+ return { success: false, error: `Project hook '${name}' not found` };
213
+ }
214
+ try {
215
+ const userDir = getHooksDir(agentId);
216
+ copyHook(hook, userDir);
217
+ return { success: true };
218
+ }
219
+ catch (err) {
220
+ return { success: false, error: err.message };
221
+ }
222
+ }
223
+ export function discoverHooksFromRepo(repoPath) {
224
+ const sharedDir = path.join(repoPath, 'shared', 'hooks');
225
+ const shared = listHookEntriesFromDir(sharedDir).map((h) => h.name);
226
+ const agentSpecific = {};
227
+ for (const agentId of ALL_AGENT_IDS) {
228
+ const agent = AGENTS[agentId];
229
+ const agentDir = path.join(repoPath, agentId, agent.hooksDir);
230
+ agentSpecific[agentId] = listHookEntriesFromDir(agentDir).map((h) => h.name);
231
+ }
232
+ return { shared, agentSpecific };
233
+ }
234
+ //# sourceMappingURL=hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/lib/hooks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAKpD,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC;IAChC,KAAK;IACL,OAAO;IACP,MAAM;IACN,KAAK;IACL,KAAK;IACL,KAAK;IACL,MAAM;IACN,MAAM;IACN,KAAK;IACL,KAAK;IACL,MAAM;IACN,MAAM;IACN,MAAM;CACP,CAAC,CAAC;AAEH,SAAS,YAAY,CAAC,IAAY;IAChC,OAAO,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;AAC9B,CAAC;AAED,SAAS,WAAW,CAAC,OAAgB;IACnC,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IAC9B,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;AACpD,CAAC;AAED,SAAS,kBAAkB,CAAC,OAAgB,EAAE,GAAW;IACvD,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IAC9B,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,OAAO,EAAE,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;AACvD,CAAC;AAED,SAAS,SAAS,CAAC,GAAW;IAC5B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,GAAW,EAAE,IAAY;IAChD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO;IACT,CAAC;IACD,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAClC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACtC,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAClB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACtC,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACnC,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;gBAClB,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,sBAAsB,CAAC,GAAW;IACzC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,KAAK,GAML,EAAE,CAAC;IAET,KAAK,MAAM,IAAI,IAAI,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;QACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACtC,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACnC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAAE,SAAS;QAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACtC,KAAK,CAAC,IAAI,CAAC;YACT,IAAI,EAAE,IAAI;YACV,IAAI;YACJ,GAAG;YACH,QAAQ;YACR,MAAM,EAAE,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;SAChC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,GAAG,EAAwB,CAAC;IAChD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAC1C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED,MAAM,OAAO,GAAgB,EAAE,CAAC;IAChC,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,OAAO,EAAE,CAAC;QACpC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACnD,MAAM,MAAM,GACV,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;YAC3B,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;YAC7D,KAAK,CAAC,CAAC,CAAC,CAAC;QACX,IAAI,CAAC,MAAM;YAAE,SAAS;QACtB,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC;QAC7C,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,IAAI;YACV,UAAU,EAAE,MAAM,CAAC,QAAQ;YAC3B,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;SAC3C,CAAC,CAAC;IACL,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACrD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,YAAY,CAAC,OAAoB;IACxC,MAAM,GAAG,GAAG,IAAI,GAAG,EAAqB,CAAC;IACzC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,QAAQ,CAAC,KAAgB,EAAE,SAAiB;IACnD,SAAS,CAAC,SAAS,CAAC,CAAC;IACrB,eAAe,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IAEvC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;IAC3E,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;IAChD,MAAM,UAAU,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACjD,EAAE,CAAC,SAAS,CAAC,YAAY,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;IAE5C,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QACnB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;QACvE,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAC9C,CAAC;AACH,CAAC;AAED,MAAM,UAAU,2BAA2B,CACzC,OAAgB,EAChB,MAAc,OAAO,CAAC,GAAG,EAAE;IAE3B,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IAC9B,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;QACzB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,OAAO,GAAoB,EAAE,CAAC;IAEpC,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IACrC,MAAM,SAAS,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAClD,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC7B,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,UAAU;YACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,KAAK,EAAE,MAAM;YACb,KAAK,EAAE,OAAO;SACf,CAAC,CAAC;IACL,CAAC;IAED,MAAM,UAAU,GAAG,kBAAkB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACpD,MAAM,YAAY,GAAG,sBAAsB,CAAC,UAAU,CAAC,CAAC;IACxD,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;QAChC,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,UAAU;YACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,KAAK,EAAE,SAAS;YAChB,KAAK,EAAE,OAAO;SACf,CAAC,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,MAAc,EACd,MAAiB,EACjB,UAA0C,EAAE;IAE5C,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,MAAM,CAAC;IACtC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAE1B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IACvD,MAAM,WAAW,GAAG,YAAY,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC,CAAC;IAEpE,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;IACjD,KAAK,MAAM,OAAO,IAAI,YAAY,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;QAC9B,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;YACnC,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,+BAA+B,CAAC,CAAC;YACvD,SAAS;QACX,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC5D,MAAM,UAAU,GAAG,YAAY,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC,CAAC;QAClE,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC;QACnC,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,UAAU,EAAE,CAAC;YACvC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACzB,CAAC;QAED,MAAM,SAAS,GACb,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,kBAAkB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAEhF,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YACnC,IAAI,CAAC;gBACH,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;gBAC3B,SAAS,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,OAAO,EAAE,CAAC,CAAC;YAC7C,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,OAAO,IAAK,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;YACpE,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;AAC/B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,IAAY,EACZ,MAAiB;IAEjB,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;IACjD,KAAK,MAAM,OAAO,IAAI,YAAY,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;QAC9B,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;YACnC,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,+BAA+B,CAAC,CAAC;YACvD,SAAS;QACX,CAAC;QAED,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;YACjC,MAAM,WAAW,GAAG,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAClE,eAAe,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAC3B,MAAM,UAAU,GAAG,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACjE,IAAI,WAAW,CAAC,MAAM,KAAK,UAAU,CAAC,MAAM,EAAE,CAAC;gBAC7C,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,OAAO,EAAE,CAAC,CAAC;YACrC,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,OAAO,IAAK,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,OAAgB,EAChB,IAAY,EACZ,MAAc,OAAO,CAAC,GAAG,EAAE;IAE3B,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IAC9B,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;QACzB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,8BAA8B,EAAE,CAAC;IACnE,CAAC;IAED,MAAM,UAAU,GAAG,kBAAkB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACpD,MAAM,KAAK,GAAG,sBAAsB,CAAC,UAAU,CAAC,CAAC;IACjD,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IAChD,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,iBAAiB,IAAI,aAAa,EAAE,CAAC;IACvE,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;QACrC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACxB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAG,GAAa,CAAC,OAAO,EAAE,CAAC;IAC3D,CAAC;AACH,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,QAAgB;IAEhB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IACzD,MAAM,MAAM,GAAG,sBAAsB,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAEpE,MAAM,aAAa,GAAG,EAA+B,CAAC;IACtD,KAAK,MAAM,OAAO,IAAI,aAAa,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;QAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC9D,aAAa,CAAC,OAAO,CAAC,GAAG,sBAAsB,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC/E,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;AACnC,CAAC"}
@@ -0,0 +1,28 @@
1
+ import type { RegistryType, RegistryConfig, McpServerEntry, RegistrySearchResult, ResolvedPackage } from './types.js';
2
+ export declare function getRegistries(type: RegistryType): Record<string, RegistryConfig>;
3
+ export declare function getEnabledRegistries(type: RegistryType): Array<{
4
+ name: string;
5
+ config: RegistryConfig;
6
+ }>;
7
+ export declare function setRegistry(type: RegistryType, name: string, config: Partial<RegistryConfig>): void;
8
+ export declare function removeRegistry(type: RegistryType, name: string): boolean;
9
+ export declare function searchMcpRegistries(query: string, options?: {
10
+ registry?: string;
11
+ limit?: number;
12
+ }): Promise<RegistrySearchResult[]>;
13
+ export declare function getMcpServerInfo(serverName: string, registryName?: string): Promise<McpServerEntry | null>;
14
+ export declare function searchSkillRegistries(_query: string, _options?: {
15
+ registry?: string;
16
+ limit?: number;
17
+ }): Promise<RegistrySearchResult[]>;
18
+ export declare function search(query: string, options?: {
19
+ type?: RegistryType;
20
+ registry?: string;
21
+ limit?: number;
22
+ }): Promise<RegistrySearchResult[]>;
23
+ export declare function parsePackageIdentifier(identifier: string): {
24
+ type: RegistryType | 'git' | 'unknown';
25
+ name: string;
26
+ };
27
+ export declare function resolvePackage(identifier: string): Promise<ResolvedPackage | null>;
28
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/lib/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,cAAc,EACd,cAAc,EAGd,oBAAoB,EACpB,eAAe,EAChB,MAAM,YAAY,CAAC;AAIpB,wBAAgB,aAAa,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAOhF;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,YAAY,GAAG,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,cAAc,CAAA;CAAE,CAAC,CAKxG;AAED,wBAAgB,WAAW,CACzB,IAAI,EAAE,YAAY,EAClB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,GAC9B,IAAI,CAYN;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAQxE;AA4BD,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAC9C,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAyCjC;AAED,wBAAsB,gBAAgB,CACpC,UAAU,EAAE,MAAM,EAClB,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CA4BhC;AAED,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,MAAM,EACd,QAAQ,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAC/C,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAWjC;AAED,wBAAsB,MAAM,CAC1B,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,YAAY,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GACnE,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAcjC;AAED,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG;IAC1D,IAAI,EAAE,YAAY,GAAG,KAAK,GAAG,SAAS,CAAC;IACvC,IAAI,EAAE,MAAM,CAAC;CACd,CA4BA;AAED,wBAAsB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CA4CxF"}