agent-skills-cli 1.1.0 → 1.1.1

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 (40) hide show
  1. package/README.md +85 -13
  2. package/dist/__tests__/git-auth.test.d.ts +11 -0
  3. package/dist/__tests__/git-auth.test.d.ts.map +1 -0
  4. package/dist/__tests__/git-auth.test.js +160 -0
  5. package/dist/__tests__/git-auth.test.js.map +1 -0
  6. package/dist/__tests__/skill-lock.test.d.ts +8 -0
  7. package/dist/__tests__/skill-lock.test.d.ts.map +1 -0
  8. package/dist/__tests__/skill-lock.test.js +104 -0
  9. package/dist/__tests__/skill-lock.test.js.map +1 -0
  10. package/dist/__tests__/skillsrc.test.d.ts +11 -0
  11. package/dist/__tests__/skillsrc.test.d.ts.map +1 -0
  12. package/dist/__tests__/skillsrc.test.js +185 -0
  13. package/dist/__tests__/skillsrc.test.js.map +1 -0
  14. package/dist/__tests__/source-parser.test.d.ts +16 -0
  15. package/dist/__tests__/source-parser.test.d.ts.map +1 -0
  16. package/dist/__tests__/source-parser.test.js +231 -0
  17. package/dist/__tests__/source-parser.test.js.map +1 -0
  18. package/dist/cli/commands/install.d.ts +8 -0
  19. package/dist/cli/commands/install.d.ts.map +1 -1
  20. package/dist/cli/commands/install.js +203 -90
  21. package/dist/cli/commands/install.js.map +1 -1
  22. package/dist/core/git-auth.d.ts +74 -0
  23. package/dist/core/git-auth.d.ts.map +1 -0
  24. package/dist/core/git-auth.js +299 -0
  25. package/dist/core/git-auth.js.map +1 -0
  26. package/dist/core/index.d.ts +4 -0
  27. package/dist/core/index.d.ts.map +1 -1
  28. package/dist/core/index.js +5 -1
  29. package/dist/core/index.js.map +1 -1
  30. package/dist/core/skill-lock.d.ts +1 -1
  31. package/dist/core/skill-lock.d.ts.map +1 -1
  32. package/dist/core/skillsrc.d.ts +65 -0
  33. package/dist/core/skillsrc.d.ts.map +1 -0
  34. package/dist/core/skillsrc.js +161 -0
  35. package/dist/core/skillsrc.js.map +1 -0
  36. package/dist/core/source-parser.d.ts +9 -1
  37. package/dist/core/source-parser.d.ts.map +1 -1
  38. package/dist/core/source-parser.js +85 -6
  39. package/dist/core/source-parser.js.map +1 -1
  40. package/package.json +9 -3
@@ -0,0 +1,299 @@
1
+ /**
2
+ * Git Authentication Module
3
+ * Resolves credentials for private Git repositories across platforms
4
+ *
5
+ * Supports:
6
+ * - Environment variables (GIT_TOKEN, GITLAB_TOKEN, BITBUCKET_TOKEN, GH_TOKEN)
7
+ * - SSH key detection
8
+ * - Git credential helper
9
+ * - Interactive token prompt (fallback)
10
+ */
11
+ import { exec } from 'child_process';
12
+ import { promisify } from 'util';
13
+ import { existsSync } from 'fs';
14
+ import { readFile } from 'fs/promises';
15
+ import { join } from 'path';
16
+ import { homedir } from 'os';
17
+ const execAsync = promisify(exec);
18
+ // ─── Host Detection ──────────────────────────────────────────────────
19
+ /**
20
+ * Detect the Git hosting provider from a URL
21
+ */
22
+ export function detectGitHost(url) {
23
+ const lower = url.toLowerCase();
24
+ if (lower.includes('github.com') || lower.includes('github'))
25
+ return 'github';
26
+ if (lower.includes('gitlab.com') || lower.includes('gitlab'))
27
+ return 'gitlab';
28
+ if (lower.includes('bitbucket.org') || lower.includes('bitbucket'))
29
+ return 'bitbucket';
30
+ return 'custom';
31
+ }
32
+ // ─── Token Resolution ────────────────────────────────────────────────
33
+ /**
34
+ * Map of environment variables to check for each host type
35
+ */
36
+ const HOST_ENV_VARS = {
37
+ github: ['GH_TOKEN', 'GITHUB_TOKEN', 'GIT_TOKEN'],
38
+ gitlab: ['GITLAB_TOKEN', 'GL_TOKEN', 'GIT_TOKEN'],
39
+ bitbucket: ['BITBUCKET_TOKEN', 'BB_TOKEN', 'GIT_TOKEN'],
40
+ custom: ['GIT_TOKEN', 'GITLAB_TOKEN', 'GH_TOKEN'],
41
+ };
42
+ /**
43
+ * Try to resolve a token from environment variables
44
+ */
45
+ function resolveTokenFromEnv(host) {
46
+ const vars = HOST_ENV_VARS[host];
47
+ for (const envVar of vars) {
48
+ const value = process.env[envVar];
49
+ if (value && value.trim()) {
50
+ return value.trim();
51
+ }
52
+ }
53
+ return undefined;
54
+ }
55
+ /**
56
+ * Check if SSH keys are available via ssh-agent
57
+ */
58
+ async function checkSshAvailable() {
59
+ try {
60
+ const { stdout } = await execAsync('ssh-add -l', { timeout: 5000 });
61
+ // ssh-add -l returns identities if any are loaded
62
+ return !stdout.includes('no identities');
63
+ }
64
+ catch {
65
+ // Also check if SSH key files exist
66
+ const sshDir = join(homedir(), '.ssh');
67
+ return (existsSync(join(sshDir, 'id_rsa')) ||
68
+ existsSync(join(sshDir, 'id_ed25519')) ||
69
+ existsSync(join(sshDir, 'id_ecdsa')));
70
+ }
71
+ }
72
+ /**
73
+ * Try to resolve a token from Git credential helper
74
+ */
75
+ async function resolveFromCredentialHelper(hostname) {
76
+ try {
77
+ // Check if a credential helper is configured
78
+ const { stdout: helper } = await execAsync('git config credential.helper', { timeout: 3000 });
79
+ if (!helper.trim())
80
+ return undefined;
81
+ // Try to get credentials using a script that writes to stdin and reads stdout
82
+ const { stdout } = await execAsync(`printf 'protocol=https\nhost=${hostname}\n\n' | git credential fill`, {
83
+ timeout: 3000,
84
+ env: {
85
+ ...process.env,
86
+ GIT_TERMINAL_PROMPT: '0',
87
+ },
88
+ });
89
+ const passwordMatch = stdout.match(/password=(.+)/);
90
+ if (passwordMatch) {
91
+ return passwordMatch[1].trim();
92
+ }
93
+ }
94
+ catch {
95
+ // Credential helper not available or failed
96
+ }
97
+ return undefined;
98
+ }
99
+ /**
100
+ * Try to resolve credentials from .netrc file
101
+ */
102
+ async function resolveFromNetrc(hostname) {
103
+ const netrcPath = join(homedir(), process.platform === 'win32' ? '_netrc' : '.netrc');
104
+ if (!existsSync(netrcPath))
105
+ return undefined;
106
+ try {
107
+ const content = await readFile(netrcPath, 'utf-8');
108
+ // Simple .netrc parser — find machine entry for this host
109
+ const machineRegex = new RegExp(`machine\\s+${hostname.replace('.', '\\.')}[\\s\\S]*?password\\s+(\\S+)`, 'i');
110
+ const match = content.match(machineRegex);
111
+ if (match)
112
+ return match[1];
113
+ }
114
+ catch {
115
+ // .netrc not readable
116
+ }
117
+ return undefined;
118
+ }
119
+ // ─── Main Auth Resolution ────────────────────────────────────────────
120
+ /**
121
+ * Extract hostname from a Git URL
122
+ */
123
+ function extractHostname(url) {
124
+ // SSH format: git@hostname:path
125
+ const sshMatch = url.match(/^git@([^:]+):/);
126
+ if (sshMatch)
127
+ return sshMatch[1];
128
+ // HTTPS format
129
+ try {
130
+ const parsed = new URL(url);
131
+ return parsed.hostname;
132
+ }
133
+ catch {
134
+ // Try extracting from path-like URLs
135
+ const match = url.match(/^https?:\/\/([^/:]+)/);
136
+ if (match)
137
+ return match[1];
138
+ }
139
+ return url;
140
+ }
141
+ /**
142
+ * Resolve Git authentication for a given URL
143
+ *
144
+ * Resolution priority:
145
+ * 1. Environment variables (host-specific)
146
+ * 2. SSH key availability (for SSH URLs)
147
+ * 3. Git credential helper
148
+ * 4. .netrc file
149
+ * 5. None (public repo or will fail)
150
+ */
151
+ export async function resolveGitAuth(url, explicitToken) {
152
+ const host = detectGitHost(url);
153
+ const hostname = extractHostname(url);
154
+ // Explicit token takes priority
155
+ if (explicitToken) {
156
+ return { method: 'token', token: explicitToken, host };
157
+ }
158
+ // 1. Environment variables
159
+ const envToken = resolveTokenFromEnv(host);
160
+ if (envToken) {
161
+ return { method: 'token', token: envToken, host };
162
+ }
163
+ // 2. SSH availability (for SSH URLs)
164
+ const isSshUrl = url.startsWith('git@') || url.includes('ssh://');
165
+ if (isSshUrl) {
166
+ const sshAvailable = await checkSshAvailable();
167
+ if (sshAvailable) {
168
+ return { method: 'ssh', sshAvailable: true, host };
169
+ }
170
+ }
171
+ // 3. Git credential helper
172
+ const credToken = await resolveFromCredentialHelper(hostname);
173
+ if (credToken) {
174
+ return { method: 'credential-helper', token: credToken, host };
175
+ }
176
+ // 4. .netrc
177
+ const netrcToken = await resolveFromNetrc(hostname);
178
+ if (netrcToken) {
179
+ return { method: 'netrc', token: netrcToken, host };
180
+ }
181
+ // 5. No auth found — will attempt without authentication
182
+ return { method: 'none', host };
183
+ }
184
+ // ─── URL Manipulation ────────────────────────────────────────────────
185
+ /**
186
+ * Build an authenticated HTTPS URL by injecting a token
187
+ *
188
+ * Input: https://gitlab.com/team/repo.git + token "abc123"
189
+ * Output: https://oauth2:abc123@gitlab.com/team/repo.git
190
+ */
191
+ export function buildAuthenticatedUrl(url, token) {
192
+ try {
193
+ const parsed = new URL(url);
194
+ parsed.username = 'oauth2';
195
+ parsed.password = token;
196
+ return parsed.toString();
197
+ }
198
+ catch {
199
+ // Fallback: inject after protocol
200
+ return url.replace(/^(https?:\/\/)/, `$1oauth2:${token}@`);
201
+ }
202
+ }
203
+ /**
204
+ * Convert an SSH URL to HTTPS URL for token-based auth
205
+ * git@github.com:owner/repo.git → https://github.com/owner/repo.git
206
+ */
207
+ export function sshToHttps(url) {
208
+ const match = url.match(/^git@([^:]+):(.+?)(?:\.git)?$/);
209
+ if (match) {
210
+ return `https://${match[1]}/${match[2]}.git`;
211
+ }
212
+ return url;
213
+ }
214
+ /**
215
+ * Normalize a Git URL for cloning
216
+ * Ensures URL has .git suffix and proper protocol
217
+ */
218
+ export function normalizeGitUrl(url) {
219
+ // Already an SSH URL — leave as-is
220
+ if (url.startsWith('git@') || url.startsWith('ssh://')) {
221
+ return url;
222
+ }
223
+ // Ensure HTTPS prefix
224
+ if (!url.startsWith('http://') && !url.startsWith('https://')) {
225
+ url = `https://${url}`;
226
+ }
227
+ // Ensure .git suffix
228
+ if (!url.endsWith('.git')) {
229
+ url = `${url}.git`;
230
+ }
231
+ return url;
232
+ }
233
+ // ─── Clone with Auth ─────────────────────────────────────────────────
234
+ /**
235
+ * Clone a Git repository with automatic authentication
236
+ *
237
+ * Handles SSH, HTTPS+token, and public repos transparently.
238
+ */
239
+ export async function cloneWithAuth(url, destDir, options) {
240
+ const { ref, depth = 1, token } = options || {};
241
+ // Resolve authentication
242
+ const auth = await resolveGitAuth(url, token);
243
+ // Build the clone URL
244
+ let cloneUrl;
245
+ if (auth.method === 'ssh' || (auth.method === 'none' && url.startsWith('git@'))) {
246
+ // Use SSH URL directly
247
+ cloneUrl = url;
248
+ }
249
+ else if (auth.token) {
250
+ // Convert SSH to HTTPS if needed, then inject token
251
+ const httpsUrl = url.startsWith('git@') ? sshToHttps(url) : normalizeGitUrl(url);
252
+ cloneUrl = buildAuthenticatedUrl(httpsUrl, auth.token);
253
+ }
254
+ else {
255
+ // No auth — try public access
256
+ cloneUrl = normalizeGitUrl(url);
257
+ }
258
+ // Build clone command
259
+ const args = ['git', 'clone'];
260
+ if (depth)
261
+ args.push('--depth', String(depth));
262
+ if (ref)
263
+ args.push('--branch', ref);
264
+ args.push(cloneUrl, '.');
265
+ try {
266
+ await execAsync(args.join(' '), {
267
+ cwd: destDir,
268
+ timeout: 60000, // 60s timeout
269
+ env: {
270
+ ...process.env,
271
+ // Suppress interactive prompts in CI
272
+ GIT_TERMINAL_PROMPT: '0',
273
+ },
274
+ });
275
+ }
276
+ catch (err) {
277
+ // Clean error message (strip token from output)
278
+ const message = (err.stderr || err.message || 'Unknown error')
279
+ .replace(/oauth2:[^@]+@/g, 'oauth2:***@')
280
+ .trim();
281
+ if (message.includes('Authentication failed') || message.includes('403') || message.includes('401')) {
282
+ const host = detectGitHost(url);
283
+ const envVars = HOST_ENV_VARS[host].join(' or ');
284
+ throw new Error(`Authentication failed for ${url}\n` +
285
+ `Set ${envVars} environment variable, or use --token flag.\n` +
286
+ `For SSH, ensure your key is added: ssh-add ~/.ssh/id_ed25519`);
287
+ }
288
+ throw new Error(`Git clone failed: ${message}`);
289
+ }
290
+ }
291
+ /**
292
+ * Get the display-safe version of a URL (strips tokens)
293
+ */
294
+ export function sanitizeUrl(url) {
295
+ return url
296
+ .replace(/oauth2:[^@]+@/g, 'oauth2:***@')
297
+ .replace(/(https?:\/\/)[^:]+:[^@]+@/g, '$1***:***@');
298
+ }
299
+ //# sourceMappingURL=git-auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-auth.js","sourceRoot":"","sources":["../../src/core/git-auth.ts"],"names":[],"mappings":"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"}
@@ -15,6 +15,8 @@ export type { AssetEntry, AssetFile } from './assets.js';
15
15
  export { track, trackInstall, trackSearch, trackCommand, setVersion } from './telemetry.js';
16
16
  export { parseSource, getOwnerRepo, getSourceTypeDisplay } from './source-parser.js';
17
17
  export type { ParsedSource } from './source-parser.js';
18
+ export { detectGitHost, resolveGitAuth, buildAuthenticatedUrl, sshToHttps, normalizeGitUrl, cloneWithAuth, sanitizeUrl, } from './git-auth.js';
19
+ export type { GitHost, GitAuthResult, CloneOptions } from './git-auth.js';
18
20
  export { getCanonicalSkillsDir, getCanonicalPath, getAgentSkillPath, isSymlink, installSkillWithSymlinks, removeSkillInstallation, getSkillInstallMethod } from './installer.js';
19
21
  export type { AgentConfig, InstallOptions, InstalledSkillInfo } from './installer.js';
20
22
  export { getLockFilePath, readLock, writeLock, addSkillToLock, removeSkillFromLock, getSkillFromLock, listInstalledSkills, isSkillInstalled, getInstalledSkillCount, updateSkillVersion, updateSkillAgents, createLockEntry } from './skill-lock.js';
@@ -25,6 +27,8 @@ export { runAudit, shouldFail, toSARIF, } from './audit.js';
25
27
  export type { AuditOptions, } from './audit.js';
26
28
  export { SCANNER_RULES, getRulesByCategory, getRuleById, getCategories, createEmptyScanResult, } from './scanner-rules.js';
27
29
  export type { ScannerRule, ScanFinding, ScanResult, Severity, } from './scanner-rules.js';
30
+ export { loadSkillsRC, getSourcesByType, getRegistryForScope, getAuthEnvVar, } from './skillsrc.js';
31
+ export type { SkillsRC, SkillsRCSource, SkillsRCDefaults, } from './skillsrc.js';
28
32
  export { assessQuality, formatScoreBar, getScoreColor, } from './quality.js';
29
33
  export type { QualityScore, ScoreDetail, } from './quality.js';
30
34
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"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"}
@@ -18,8 +18,10 @@ export { fetchFromDB, getSkillByScoped, searchSkillsDB, getSkillsByAuthor, parse
18
18
  export { getSkillBaseUrl, getAssetUrl, parseRawUrl, fetchAssetManifest, listAssetsFromGitHub, fetchAsset, fetchAssetBinary, getSkillAssets, getAssetUrlFromEntry } from './assets.js';
19
19
  // Telemetry (anonymous usage tracking with opt-out)
20
20
  export { track, trackInstall, trackSearch, trackCommand, setVersion } from './telemetry.js';
21
- // Source parser (GitHub, GitLab, local paths, direct URLs)
21
+ // Source parser (GitHub, GitLab, Bitbucket, SSH, npm, local paths, direct URLs)
22
22
  export { parseSource, getOwnerRepo, getSourceTypeDisplay } from './source-parser.js';
23
+ // Git authentication (private repos, SSH, tokens)
24
+ export { detectGitHost, resolveGitAuth, buildAuthenticatedUrl, sshToHttps, normalizeGitUrl, cloneWithAuth, sanitizeUrl, } from './git-auth.js';
23
25
  // Installer (symlink-based installation)
24
26
  export { getCanonicalSkillsDir, getCanonicalPath, getAgentSkillPath, isSymlink, installSkillWithSymlinks, removeSkillInstallation, getSkillInstallMethod } from './installer.js';
25
27
  // Skill Lock (installation tracking)
@@ -30,6 +32,8 @@ export { analyzeProject, buildSearchKeywords, scoreSkill, } from './suggest.js';
30
32
  export { runAudit, shouldFail, toSARIF, } from './audit.js';
31
33
  // Scanner rules (security rule definitions)
32
34
  export { SCANNER_RULES, getRulesByCategory, getRuleById, getCategories, createEmptyScanResult, } from './scanner-rules.js';
35
+ // .skillsrc configuration file support
36
+ export { loadSkillsRC, getSourcesByType, getRegistryForScope, getAuthEnvVar, } from './skillsrc.js';
33
37
  // Quality scoring (4-dimension skill assessment)
34
38
  export { assessQuality, formatScoreBar, getScoreColor, } from './quality.js';
35
39
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAgBH,mBAAmB;AACnB,OAAO,EACH,cAAc,EACd,SAAS,EACT,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,mBAAmB,EACtB,MAAM,aAAa,CAAC;AAErB,sBAAsB;AACtB,OAAO,EACH,gBAAgB,EAChB,YAAY,EACZ,sBAAsB,EACzB,MAAM,gBAAgB,CAAC;AAExB,qBAAqB;AACrB,OAAO,EACH,uBAAuB,EACvB,6BAA6B,EAC7B,+BAA+B,EAC/B,yBAAyB,EAC5B,MAAM,eAAe,CAAC;AAEvB,qBAAqB;AACrB,OAAO,EACH,aAAa,EACb,YAAY,EACZ,WAAW,EACd,MAAM,eAAe,CAAC;AAEvB,wBAAwB;AACxB,OAAO,EACH,UAAU,EACV,UAAU,EACV,cAAc,EACd,iBAAiB,EACjB,qBAAqB,EACrB,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,kBAAkB,EAClB,gBAAgB,EACnB,MAAM,kBAAkB,CAAC;AAE1B,8DAA8D;AAC9D,OAAO,EACH,WAAW,EACX,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACvB,MAAM,eAAe,CAAC;AAWvB,2BAA2B;AAC3B,OAAO,EACH,eAAe,EACf,WAAW,EACX,WAAW,EACX,kBAAkB,EAClB,oBAAoB,EACpB,UAAU,EACV,gBAAgB,EAChB,cAAc,EACd,oBAAoB,EACvB,MAAM,aAAa,CAAC;AAOrB,oDAAoD;AACpD,OAAO,EACH,KAAK,EACL,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,UAAU,EACb,MAAM,gBAAgB,CAAC;AAExB,2DAA2D;AAC3D,OAAO,EACH,WAAW,EACX,YAAY,EACZ,oBAAoB,EACvB,MAAM,oBAAoB,CAAC;AAI5B,yCAAyC;AACzC,OAAO,EACH,qBAAqB,EACrB,gBAAgB,EAChB,iBAAiB,EACjB,SAAS,EACT,wBAAwB,EACxB,uBAAuB,EACvB,qBAAqB,EACxB,MAAM,gBAAgB,CAAC;AAQxB,qCAAqC;AACrC,OAAO,EACH,eAAe,EACf,QAAQ,EACR,SAAS,EACT,cAAc,EACd,mBAAmB,EACnB,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,sBAAsB,EACtB,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EAClB,MAAM,iBAAiB,CAAC;AASzB,iDAAiD;AACjD,OAAO,EACH,cAAc,EACd,mBAAmB,EACnB,UAAU,GACb,MAAM,cAAc,CAAC;AAQtB,mCAAmC;AACnC,OAAO,EACH,QAAQ,EACR,UAAU,EACV,OAAO,GACV,MAAM,YAAY,CAAC;AAMpB,4CAA4C;AAC5C,OAAO,EACH,aAAa,EACb,kBAAkB,EAClB,WAAW,EACX,aAAa,EACb,qBAAqB,GACxB,MAAM,oBAAoB,CAAC;AAS5B,iDAAiD;AACjD,OAAO,EACH,aAAa,EACb,cAAc,EACd,aAAa,GAChB,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAgBH,mBAAmB;AACnB,OAAO,EACH,cAAc,EACd,SAAS,EACT,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,mBAAmB,EACtB,MAAM,aAAa,CAAC;AAErB,sBAAsB;AACtB,OAAO,EACH,gBAAgB,EAChB,YAAY,EACZ,sBAAsB,EACzB,MAAM,gBAAgB,CAAC;AAExB,qBAAqB;AACrB,OAAO,EACH,uBAAuB,EACvB,6BAA6B,EAC7B,+BAA+B,EAC/B,yBAAyB,EAC5B,MAAM,eAAe,CAAC;AAEvB,qBAAqB;AACrB,OAAO,EACH,aAAa,EACb,YAAY,EACZ,WAAW,EACd,MAAM,eAAe,CAAC;AAEvB,wBAAwB;AACxB,OAAO,EACH,UAAU,EACV,UAAU,EACV,cAAc,EACd,iBAAiB,EACjB,qBAAqB,EACrB,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,kBAAkB,EAClB,gBAAgB,EACnB,MAAM,kBAAkB,CAAC;AAE1B,8DAA8D;AAC9D,OAAO,EACH,WAAW,EACX,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACvB,MAAM,eAAe,CAAC;AAWvB,2BAA2B;AAC3B,OAAO,EACH,eAAe,EACf,WAAW,EACX,WAAW,EACX,kBAAkB,EAClB,oBAAoB,EACpB,UAAU,EACV,gBAAgB,EAChB,cAAc,EACd,oBAAoB,EACvB,MAAM,aAAa,CAAC;AAOrB,oDAAoD;AACpD,OAAO,EACH,KAAK,EACL,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,UAAU,EACb,MAAM,gBAAgB,CAAC;AAExB,gFAAgF;AAChF,OAAO,EACH,WAAW,EACX,YAAY,EACZ,oBAAoB,EACvB,MAAM,oBAAoB,CAAC;AAI5B,kDAAkD;AAClD,OAAO,EACH,aAAa,EACb,cAAc,EACd,qBAAqB,EACrB,UAAU,EACV,eAAe,EACf,aAAa,EACb,WAAW,GACd,MAAM,eAAe,CAAC;AAIvB,yCAAyC;AACzC,OAAO,EACH,qBAAqB,EACrB,gBAAgB,EAChB,iBAAiB,EACjB,SAAS,EACT,wBAAwB,EACxB,uBAAuB,EACvB,qBAAqB,EACxB,MAAM,gBAAgB,CAAC;AAQxB,qCAAqC;AACrC,OAAO,EACH,eAAe,EACf,QAAQ,EACR,SAAS,EACT,cAAc,EACd,mBAAmB,EACnB,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,sBAAsB,EACtB,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EAClB,MAAM,iBAAiB,CAAC;AASzB,iDAAiD;AACjD,OAAO,EACH,cAAc,EACd,mBAAmB,EACnB,UAAU,GACb,MAAM,cAAc,CAAC;AAQtB,mCAAmC;AACnC,OAAO,EACH,QAAQ,EACR,UAAU,EACV,OAAO,GACV,MAAM,YAAY,CAAC;AAMpB,4CAA4C;AAC5C,OAAO,EACH,aAAa,EACb,kBAAkB,EAClB,WAAW,EACX,aAAa,EACb,qBAAqB,GACxB,MAAM,oBAAoB,CAAC;AAS5B,uCAAuC;AACvC,OAAO,EACH,YAAY,EACZ,gBAAgB,EAChB,mBAAmB,EACnB,aAAa,GAChB,MAAM,eAAe,CAAC;AAQvB,iDAAiD;AACjD,OAAO,EACH,aAAa,EACb,cAAc,EACd,aAAa,GAChB,MAAM,cAAc,CAAC"}
@@ -5,7 +5,7 @@
5
5
  /**
6
6
  * Source type for installed skills
7
7
  */
8
- export type SourceType = 'database' | 'github' | 'gitlab' | 'local';
8
+ export type SourceType = 'database' | 'github' | 'gitlab' | 'bitbucket' | 'npm' | 'private-git' | 'local';
9
9
  /**
10
10
  * Lock entry for a single installed skill
11
11
  */
@@ -1 +1 @@
1
- {"version":3,"file":"skill-lock.d.ts","sourceRoot":"","sources":["../../src/core/skill-lock.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"skill-lock.d.ts","sourceRoot":"","sources":["../../src/core/skill-lock.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * .skillsrc Configuration File Module
3
+ *
4
+ * Supports project-level and user-level configuration for skill sources,
5
+ * registries, and installation defaults.
6
+ *
7
+ * Search order:
8
+ * 1. cwd/.skillsrc (YAML/JSON)
9
+ * 2. cwd/.skillsrc.json
10
+ * 3. ~/.skillsrc
11
+ * 4. ~/.skillsrc.json
12
+ */
13
+ export interface SkillsRCSource {
14
+ /** Source type */
15
+ type: 'git' | 'npm';
16
+ /** Git URL (for git sources) */
17
+ url?: string;
18
+ /** npm registry URL (for npm sources) */
19
+ registry?: string;
20
+ /** npm scope (e.g. "@company") */
21
+ scope?: string;
22
+ /** Auth method hint */
23
+ auth?: 'token' | 'ssh' | 'env';
24
+ /** Environment variable name containing auth token */
25
+ envVar?: string;
26
+ /** Optional label for display */
27
+ name?: string;
28
+ }
29
+ export interface SkillsRCDefaults {
30
+ /** Default agents to install to */
31
+ agents?: string[];
32
+ /** Whether to install globally by default */
33
+ global?: boolean;
34
+ }
35
+ export interface SkillsRC {
36
+ /** Pre-configured skill sources */
37
+ sources?: SkillsRCSource[];
38
+ /** Installation defaults */
39
+ defaults?: SkillsRCDefaults;
40
+ }
41
+ /**
42
+ * Load .skillsrc configuration from project or user directory
43
+ *
44
+ * Searches in order:
45
+ * 1. cwd/.skillsrc
46
+ * 2. cwd/.skillsrc.json
47
+ * 3. ~/.skillsrc
48
+ * 4. ~/.skillsrc.json
49
+ *
50
+ * Returns the first valid config found, or null if none exist.
51
+ */
52
+ export declare function loadSkillsRC(cwd?: string): Promise<SkillsRC | null>;
53
+ /**
54
+ * Get all configured sources from .skillsrc, optionally filtered by type
55
+ */
56
+ export declare function getSourcesByType(config: SkillsRC, type: 'git' | 'npm'): SkillsRCSource[];
57
+ /**
58
+ * Get the npm registry URL for a given scope from .skillsrc
59
+ */
60
+ export declare function getRegistryForScope(config: SkillsRC, scope: string): string | undefined;
61
+ /**
62
+ * Get the auth env var for a given source URL
63
+ */
64
+ export declare function getAuthEnvVar(config: SkillsRC, url: string): string | undefined;
65
+ //# sourceMappingURL=skillsrc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skillsrc.d.ts","sourceRoot":"","sources":["../../src/core/skillsrc.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AASH,MAAM,WAAW,cAAc;IAC3B,kBAAkB;IAClB,IAAI,EAAE,KAAK,GAAG,KAAK,CAAC;IACpB,gCAAgC;IAChC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,yCAAyC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kCAAkC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uBAAuB;IACvB,IAAI,CAAC,EAAE,OAAO,GAAG,KAAK,GAAG,KAAK,CAAC;IAC/B,sDAAsD;IACtD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iCAAiC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC7B,mCAAmC;IACnC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,6CAA6C;IAC7C,MAAM,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,QAAQ;IACrB,mCAAmC;IACnC,OAAO,CAAC,EAAE,cAAc,EAAE,CAAC;IAC3B,4BAA4B;IAC5B,QAAQ,CAAC,EAAE,gBAAgB,CAAC;CAC/B;AA0GD;;;;;;;;;;GAUG;AACH,wBAAsB,YAAY,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAmBzE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,GAAG,KAAK,GAAG,cAAc,EAAE,CAExF;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAKvF;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAK/E"}
@@ -0,0 +1,161 @@
1
+ /**
2
+ * .skillsrc Configuration File Module
3
+ *
4
+ * Supports project-level and user-level configuration for skill sources,
5
+ * registries, and installation defaults.
6
+ *
7
+ * Search order:
8
+ * 1. cwd/.skillsrc (YAML/JSON)
9
+ * 2. cwd/.skillsrc.json
10
+ * 3. ~/.skillsrc
11
+ * 4. ~/.skillsrc.json
12
+ */
13
+ import { readFile } from 'fs/promises';
14
+ import { existsSync } from 'fs';
15
+ import { join } from 'path';
16
+ import { homedir } from 'os';
17
+ // ─── Config File Loading ─────────────────────────────────────────────
18
+ /**
19
+ * Try to parse a file as JSON or simple YAML-like key-value format
20
+ */
21
+ async function parseConfigFile(filePath) {
22
+ try {
23
+ const content = await readFile(filePath, 'utf-8');
24
+ const trimmed = content.trim();
25
+ // Try JSON first
26
+ if (trimmed.startsWith('{') || trimmed.startsWith('[')) {
27
+ return JSON.parse(trimmed);
28
+ }
29
+ // Try JSON (sometimes files don't start with { if they have comments)
30
+ try {
31
+ return JSON.parse(trimmed);
32
+ }
33
+ catch {
34
+ // Not JSON — try simple YAML-like format
35
+ }
36
+ // Simple YAML-like parsing (handles common cases)
37
+ return parseSimpleYaml(trimmed);
38
+ }
39
+ catch {
40
+ return null;
41
+ }
42
+ }
43
+ /**
44
+ * Parse a simple YAML-like format for .skillsrc files
45
+ * Handles nested objects and arrays with basic indentation
46
+ */
47
+ function parseSimpleYaml(content) {
48
+ try {
49
+ const result = {};
50
+ const lines = content.split('\n').filter(l => l.trim() && !l.trim().startsWith('#'));
51
+ let currentSection = null;
52
+ let currentSource = null;
53
+ for (const line of lines) {
54
+ const trimmed = line.trim();
55
+ const indent = line.length - line.trimStart().length;
56
+ // Top-level section
57
+ if (indent === 0 && trimmed.endsWith(':')) {
58
+ currentSection = trimmed.slice(0, -1);
59
+ if (currentSection === 'sources') {
60
+ result.sources = result.sources || [];
61
+ }
62
+ else if (currentSection === 'defaults') {
63
+ result.defaults = result.defaults || {};
64
+ }
65
+ currentSource = null;
66
+ continue;
67
+ }
68
+ // Array item (- prefix)
69
+ if (trimmed.startsWith('- ') && currentSection === 'sources') {
70
+ if (currentSource && Object.keys(currentSource).length > 0) {
71
+ result.sources.push(currentSource);
72
+ }
73
+ currentSource = {};
74
+ const kv = trimmed.slice(2).trim();
75
+ if (kv.includes(':')) {
76
+ const [key, ...rest] = kv.split(':');
77
+ const value = rest.join(':').trim();
78
+ currentSource[key.trim()] = value;
79
+ }
80
+ continue;
81
+ }
82
+ // Key-value pair within current context
83
+ if (trimmed.includes(':') && !trimmed.startsWith('#')) {
84
+ const [key, ...rest] = trimmed.split(':');
85
+ const value = rest.join(':').trim();
86
+ if (currentSource && indent >= 4) {
87
+ currentSource[key.trim()] = value === 'true' ? true : value === 'false' ? false : value;
88
+ }
89
+ else if (currentSection === 'defaults' && result.defaults) {
90
+ const k = key.trim();
91
+ if (k === 'global') {
92
+ result.defaults.global = value === 'true';
93
+ }
94
+ else if (k === 'agents') {
95
+ result.defaults.agents = value.split(',').map(a => a.trim()).filter(Boolean);
96
+ }
97
+ }
98
+ }
99
+ }
100
+ // Push last source
101
+ if (currentSource && Object.keys(currentSource).length > 0) {
102
+ result.sources = result.sources || [];
103
+ result.sources.push(currentSource);
104
+ }
105
+ return Object.keys(result).length > 0 ? result : null;
106
+ }
107
+ catch {
108
+ return null;
109
+ }
110
+ }
111
+ // ─── Main API ────────────────────────────────────────────────────────
112
+ /**
113
+ * Load .skillsrc configuration from project or user directory
114
+ *
115
+ * Searches in order:
116
+ * 1. cwd/.skillsrc
117
+ * 2. cwd/.skillsrc.json
118
+ * 3. ~/.skillsrc
119
+ * 4. ~/.skillsrc.json
120
+ *
121
+ * Returns the first valid config found, or null if none exist.
122
+ */
123
+ export async function loadSkillsRC(cwd) {
124
+ const searchDirs = [
125
+ cwd || process.cwd(),
126
+ homedir(),
127
+ ];
128
+ const fileNames = ['.skillsrc', '.skillsrc.json'];
129
+ for (const dir of searchDirs) {
130
+ for (const fileName of fileNames) {
131
+ const filePath = join(dir, fileName);
132
+ if (existsSync(filePath)) {
133
+ const config = await parseConfigFile(filePath);
134
+ if (config)
135
+ return config;
136
+ }
137
+ }
138
+ }
139
+ return null;
140
+ }
141
+ /**
142
+ * Get all configured sources from .skillsrc, optionally filtered by type
143
+ */
144
+ export function getSourcesByType(config, type) {
145
+ return (config.sources || []).filter(s => s.type === type);
146
+ }
147
+ /**
148
+ * Get the npm registry URL for a given scope from .skillsrc
149
+ */
150
+ export function getRegistryForScope(config, scope) {
151
+ const source = (config.sources || []).find(s => s.type === 'npm' && s.scope === scope);
152
+ return source?.registry;
153
+ }
154
+ /**
155
+ * Get the auth env var for a given source URL
156
+ */
157
+ export function getAuthEnvVar(config, url) {
158
+ const source = (config.sources || []).find(s => s.url && url.includes(s.url));
159
+ return source?.envVar;
160
+ }
161
+ //# sourceMappingURL=skillsrc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skillsrc.js","sourceRoot":"","sources":["../../src/core/skillsrc.ts"],"names":[],"mappings":"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"}