agent-skills-cli 1.0.9 → 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 (94) hide show
  1. package/README.md +110 -14
  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/adapters/adapter.d.ts +51 -0
  19. package/dist/adapters/adapter.d.ts.map +1 -0
  20. package/dist/adapters/adapter.js +51 -0
  21. package/dist/adapters/adapter.js.map +1 -0
  22. package/dist/adapters/claude.d.ts +16 -0
  23. package/dist/adapters/claude.d.ts.map +1 -0
  24. package/dist/adapters/claude.js +30 -0
  25. package/dist/adapters/claude.js.map +1 -0
  26. package/dist/adapters/copilot.d.ts +16 -0
  27. package/dist/adapters/copilot.d.ts.map +1 -0
  28. package/dist/adapters/copilot.js +32 -0
  29. package/dist/adapters/copilot.js.map +1 -0
  30. package/dist/adapters/cursor.d.ts +17 -0
  31. package/dist/adapters/cursor.d.ts.map +1 -0
  32. package/dist/adapters/cursor.js +34 -0
  33. package/dist/adapters/cursor.js.map +1 -0
  34. package/dist/adapters/index.d.ts +11 -0
  35. package/dist/adapters/index.d.ts.map +1 -0
  36. package/dist/adapters/index.js +10 -0
  37. package/dist/adapters/index.js.map +1 -0
  38. package/dist/adapters/universal.d.ts +12 -0
  39. package/dist/adapters/universal.d.ts.map +1 -0
  40. package/dist/adapters/universal.js +16 -0
  41. package/dist/adapters/universal.js.map +1 -0
  42. package/dist/cli/agents.d.ts +11 -0
  43. package/dist/cli/agents.d.ts.map +1 -1
  44. package/dist/cli/agents.js +47 -0
  45. package/dist/cli/agents.js.map +1 -1
  46. package/dist/cli/commands/convert.d.ts.map +1 -1
  47. package/dist/cli/commands/convert.js +16 -65
  48. package/dist/cli/commands/convert.js.map +1 -1
  49. package/dist/cli/commands/export.d.ts.map +1 -1
  50. package/dist/cli/commands/export.js +15 -7
  51. package/dist/cli/commands/export.js.map +1 -1
  52. package/dist/cli/commands/install.d.ts +8 -0
  53. package/dist/cli/commands/install.d.ts.map +1 -1
  54. package/dist/cli/commands/install.js +203 -90
  55. package/dist/cli/commands/install.js.map +1 -1
  56. package/dist/cli/commands/score.d.ts +10 -0
  57. package/dist/cli/commands/score.d.ts.map +1 -0
  58. package/dist/cli/commands/score.js +91 -0
  59. package/dist/cli/commands/score.js.map +1 -0
  60. package/dist/cli/commands/show.d.ts.map +1 -1
  61. package/dist/cli/commands/show.js +8 -0
  62. package/dist/cli/commands/show.js.map +1 -1
  63. package/dist/cli/commands/submit-repo.d.ts +11 -0
  64. package/dist/cli/commands/submit-repo.d.ts.map +1 -0
  65. package/dist/cli/commands/submit-repo.js +133 -0
  66. package/dist/cli/commands/submit-repo.js.map +1 -0
  67. package/dist/cli/commands/submit.d.ts.map +1 -1
  68. package/dist/cli/commands/submit.js +10 -0
  69. package/dist/cli/commands/submit.js.map +1 -1
  70. package/dist/cli/index.js +4 -0
  71. package/dist/cli/index.js.map +1 -1
  72. package/dist/core/git-auth.d.ts +74 -0
  73. package/dist/core/git-auth.d.ts.map +1 -0
  74. package/dist/core/git-auth.js +299 -0
  75. package/dist/core/git-auth.js.map +1 -0
  76. package/dist/core/index.d.ts +6 -0
  77. package/dist/core/index.d.ts.map +1 -1
  78. package/dist/core/index.js +7 -1
  79. package/dist/core/index.js.map +1 -1
  80. package/dist/core/quality.d.ts +48 -0
  81. package/dist/core/quality.d.ts.map +1 -0
  82. package/dist/core/quality.js +241 -0
  83. package/dist/core/quality.js.map +1 -0
  84. package/dist/core/skill-lock.d.ts +1 -1
  85. package/dist/core/skill-lock.d.ts.map +1 -1
  86. package/dist/core/skillsrc.d.ts +65 -0
  87. package/dist/core/skillsrc.d.ts.map +1 -0
  88. package/dist/core/skillsrc.js +161 -0
  89. package/dist/core/skillsrc.js.map +1 -0
  90. package/dist/core/source-parser.d.ts +9 -1
  91. package/dist/core/source-parser.d.ts.map +1 -1
  92. package/dist/core/source-parser.js +85 -6
  93. package/dist/core/source-parser.js.map +1 -1
  94. package/package.json +9 -3
package/README.md CHANGED
@@ -1,12 +1,14 @@
1
1
  # Agent Skills CLI 🚀
2
2
 
3
- > **One CLI. 100,000+ skills. 42 AI agents.**
3
+ > **One CLI. 175,000+ skills. 42 AI agents.**
4
4
 
5
5
  [![npm version](https://img.shields.io/npm/v/agent-skills-cli)](https://www.npmjs.com/package/agent-skills-cli)
6
6
  [![license](https://img.shields.io/npm/l/agent-skills-cli)](LICENSE)
7
7
 
8
8
  Install skills from the world's largest marketplace and sync them to **42 AI agents** including Cursor, Claude Code, GitHub Copilot, Windsurf, Cline, Gemini CLI, Zed, and more — all with a single command.
9
9
 
10
+ **What's new in v1.1.0:** Private Git repos (GitLab, Bitbucket, SSH, self-hosted), npm packages, `.skillsrc` config files, and automatic credential resolution.
11
+
10
12
  🌐 **Website:** [agentskills.in](https://agentskills.in)
11
13
 
12
14
  ```bash
@@ -18,9 +20,15 @@ skills install @anthropic/xlsx
18
20
 
19
21
  ## ✨ Features
20
22
 
21
- - **100,000+ Skills** — Access the largest collection of AI agent skills
23
+ - **175,000+ Skills** — Access the largest collection of AI agent skills
22
24
  - **FZF Interactive Search** — Real-time search with keyboard navigation: `skills search -i`
23
25
  - **42 AI Agents** — Cursor, Claude, Copilot, Windsurf, Cline, Gemini CLI, Zed, and 35+ more
26
+ - **Private Git Repos** — GitLab, Bitbucket, SSH, self-hosted Git with auto-auth: `skills install git@host:team/repo`
27
+ - **npm Packages** — Install skills from npm registries: `skills install npm:@scope/package`
28
+ - **`.skillsrc` Config** — Enterprise config files for custom registries, tokens, and defaults
29
+ - **Quality Scoring** — 4-dimension skill scoring (0–100): `skills score`
30
+ - **Repo Auto-Index** — Submit entire repos to the marketplace: `skills submit-repo owner/repo`
31
+ - **Adapter Architecture** — Formal adapter pattern for clean multi-agent support
24
32
  - **Lock File Tracking** — Track all installations in `~/.skills/skills.lock`
25
33
  - **Git URL Support** — Install from GitHub, GitLab, or repos: `skills add owner/repo@skill`
26
34
  - **Platform Targeting** — Install to specific platforms with `-t claude,cursor`
@@ -48,6 +56,14 @@ skills install @facebook/verify
48
56
  # ⭐ Install from a GitHub repo
49
57
  skills add vercel-labs/agent-skills
50
58
 
59
+ # ⭐ Install from private Git (auto-detects credentials)
60
+ skills install git@gitlab.com:team/internal-skills.git
61
+ skills install https://git.company.com/team/skills --token $GIT_TOKEN
62
+
63
+ # ⭐ Install from npm registry
64
+ skills install npm:@company/skills
65
+ skills install npm:@company/skills --registry https://npm.company.com
66
+
51
67
  # Install to specific platforms
52
68
  skills install @facebook/verify -a claude,cursor
53
69
 
@@ -74,9 +90,6 @@ skills update --all
74
90
 
75
91
  # Search and install skills interactively
76
92
  skills search python
77
-
78
- # Search with JSON output (non-interactive)
79
- skills search react --json
80
93
  ```
81
94
 
82
95
  ---
@@ -94,6 +107,8 @@ skills search react --json
94
107
  | `skills check` | Check installed skills with source and version info |
95
108
  | `skills update` | Update skills from their source repos |
96
109
  | `skills remove` | Remove installed skills (interactive multi-select) |
110
+ | `skills score [path]` | Score skill quality (0–100, grades F–A) |
111
+ | `skills submit-repo <repo>` | Submit a GitHub repo for marketplace auto-indexing |
97
112
  | `skills doctor` | Diagnose issues |
98
113
 
99
114
  ### Install Options
@@ -112,7 +127,7 @@ skills add @facebook/verify -a cursor # 'add' is an alias for 'install'
112
127
 
113
128
  ```bash
114
129
  skills add owner/repo # GitHub shorthand
115
- skills add owner/repo@skill-name # NEW: Install specific skill directly
130
+ skills add owner/repo@skill-name # Install specific skill directly
116
131
  skills add https://github.com/user/repo # Full URL
117
132
  skills add https://gitlab.com/org/repo # GitLab
118
133
  skills add owner/repo --list # List skills in repo
@@ -120,6 +135,40 @@ skills add owner/repo -s skill-name # Install specific skill
120
135
  skills add owner/repo -y -g # Non-interactive, global
121
136
  ```
122
137
 
138
+ ### Private Git Repos
139
+
140
+ ```bash
141
+ # SSH (auto-detects SSH keys)
142
+ skills install git@github.com:team/private-repo.git
143
+ skills install git@gitlab.com:team/internal-skills.git
144
+
145
+ # HTTPS with token
146
+ skills install https://git.company.com/team/repo --token=xxx
147
+
148
+ # Token from environment variable
149
+ GITLAB_TOKEN=xxx skills install https://gitlab.com/team/repo
150
+ BITBUCKET_TOKEN=xxx skills install https://bitbucket.org/team/repo
151
+
152
+ # Bitbucket
153
+ skills install https://bitbucket.org/team/skills-repo
154
+ ```
155
+
156
+ **Auth resolution order:** `--token` flag → env vars (`GH_TOKEN`, `GITLAB_TOKEN`, `BITBUCKET_TOKEN`, `GIT_TOKEN`) → SSH keys → git credential helper → `.netrc`
157
+
158
+ ### npm Packages
159
+
160
+ ```bash
161
+ # Public npm packages
162
+ skills install npm:chalk
163
+ skills install npm:@anthropic/skills
164
+
165
+ # Scoped package with version
166
+ skills install npm:@company/skills@1.1.1
167
+
168
+ # Private npm registry
169
+ skills install npm:@company/skills --registry https://npm.company.com
170
+ ```
171
+
123
172
  ### Other Commands
124
173
 
125
174
  ```bash
@@ -130,6 +179,23 @@ skills sync # Sync to Antigravity workflows
130
179
  skills info # Show installation status
131
180
  ```
132
181
 
182
+ ### Quality Scoring
183
+
184
+ ```bash
185
+ skills score ./my-skill # Score a skill (0–100, grade F–A)
186
+ skills score ./my-skill --verbose # Show individual check details
187
+ skills score ./my-skill --json # Machine-readable output
188
+ ```
189
+
190
+ **Dimensions:** Structure (30%), Clarity (30%), Specificity (30%), Advanced (10%)
191
+
192
+ ### Submit Repos to Marketplace
193
+
194
+ ```bash
195
+ skills submit-repo Jeffallan/claude-skills # Auto-index all skills in repo
196
+ skills submit-repo vercel-labs/agent-skills # Skills appear on marketplace
197
+ ```
198
+
133
199
  ---
134
200
 
135
201
  ## 🤖 Supported Platforms (42 Agents)
@@ -151,16 +217,46 @@ skills info # Show installation status
151
217
 
152
218
  ---
153
219
 
154
- ## 🔒 Privacy & Telemetry
220
+ ## ⚙️ Configuration (`.skillsrc`)
221
+
222
+ Create a `.skillsrc` or `.skillsrc.json` file in your project root or home directory to configure private sources and defaults:
223
+
224
+ ```json
225
+ {
226
+ "sources": [
227
+ {
228
+ "name": "company-gitlab",
229
+ "type": "git",
230
+ "url": "https://gitlab.company.com",
231
+ "auth_env": "COMPANY_GIT_TOKEN"
232
+ },
233
+ {
234
+ "name": "company-npm",
235
+ "type": "npm",
236
+ "registry": "https://npm.company.com",
237
+ "scope": "@company"
238
+ }
239
+ ],
240
+ "defaults": {
241
+ "agent": "cursor",
242
+ "global": false
243
+ }
244
+ }
245
+ ```
155
246
 
156
- The CLI collects anonymous usage data to improve the product. **No personal data is collected.**
247
+ Config is loaded from: project `.skillsrc` home `~/.skillsrc` (first found wins).
157
248
 
158
- ```bash
159
- # Opt out of telemetry
160
- export DISABLE_TELEMETRY=1
161
- # or
162
- export DO_NOT_TRACK=1
163
- ```
249
+ ---
250
+
251
+ ## 🔐 Environment Variables
252
+
253
+ | Variable | Purpose |
254
+ |----------|---------|
255
+ | `GH_TOKEN` / `GITHUB_TOKEN` | GitHub private repo authentication |
256
+ | `GITLAB_TOKEN` / `GL_TOKEN` | GitLab private repo authentication |
257
+ | `BITBUCKET_TOKEN` / `BB_TOKEN` | Bitbucket private repo authentication |
258
+ | `GIT_TOKEN` | Generic Git authentication (any host) |
259
+ | `DISABLE_TELEMETRY` / `DO_NOT_TRACK` | Opt out of anonymous telemetry |
164
260
 
165
261
  Telemetry is automatically disabled in CI environments.
166
262
 
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Tests for git-auth.ts
3
+ *
4
+ * Validates:
5
+ * - Host detection from URLs
6
+ * - Token resolution from env vars
7
+ * - URL manipulation (SSH→HTTPS, token injection, normalization)
8
+ * - URL sanitization (token stripping)
9
+ */
10
+ export {};
11
+ //# sourceMappingURL=git-auth.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-auth.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/git-auth.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}
@@ -0,0 +1,160 @@
1
+ /**
2
+ * Tests for git-auth.ts
3
+ *
4
+ * Validates:
5
+ * - Host detection from URLs
6
+ * - Token resolution from env vars
7
+ * - URL manipulation (SSH→HTTPS, token injection, normalization)
8
+ * - URL sanitization (token stripping)
9
+ */
10
+ import { describe, it, expect, afterEach } from 'vitest';
11
+ import { detectGitHost, buildAuthenticatedUrl, sshToHttps, normalizeGitUrl, sanitizeUrl, resolveGitAuth, } from '../core/git-auth.js';
12
+ // ─── Host Detection ──────────────────────────────────────────────────
13
+ describe('detectGitHost', () => {
14
+ it('should detect GitHub', () => {
15
+ expect(detectGitHost('https://github.com/owner/repo')).toBe('github');
16
+ expect(detectGitHost('git@github.com:owner/repo.git')).toBe('github');
17
+ });
18
+ it('should detect GitLab', () => {
19
+ expect(detectGitHost('https://gitlab.com/owner/repo')).toBe('gitlab');
20
+ expect(detectGitHost('git@gitlab.com:owner/repo.git')).toBe('gitlab');
21
+ });
22
+ it('should detect Bitbucket', () => {
23
+ expect(detectGitHost('https://bitbucket.org/owner/repo')).toBe('bitbucket');
24
+ expect(detectGitHost('git@bitbucket.org:owner/repo.git')).toBe('bitbucket');
25
+ });
26
+ it('should detect custom hosts', () => {
27
+ expect(detectGitHost('https://git.company.com/team/repo')).toBe('custom');
28
+ expect(detectGitHost('git@git.internal.io:team/repo.git')).toBe('custom');
29
+ });
30
+ });
31
+ // ─── URL Manipulation ────────────────────────────────────────────────
32
+ describe('buildAuthenticatedUrl', () => {
33
+ it('should inject token into HTTPS URL', () => {
34
+ const result = buildAuthenticatedUrl('https://github.com/owner/repo.git', 'mytoken123');
35
+ expect(result).toContain('oauth2:mytoken123@');
36
+ expect(result).toContain('github.com');
37
+ });
38
+ it('should inject token into GitLab URL', () => {
39
+ const result = buildAuthenticatedUrl('https://gitlab.com/team/repo.git', 'gltoken');
40
+ expect(result).toContain('oauth2:gltoken@');
41
+ expect(result).toContain('gitlab.com');
42
+ });
43
+ it('should handle URL with port', () => {
44
+ const result = buildAuthenticatedUrl('https://git.company.com:8443/team/repo.git', 'token');
45
+ expect(result).toContain('oauth2:token@');
46
+ });
47
+ });
48
+ describe('sshToHttps', () => {
49
+ it('should convert SSH to HTTPS', () => {
50
+ expect(sshToHttps('git@github.com:owner/repo.git')).toBe('https://github.com/owner/repo.git');
51
+ });
52
+ it('should convert SSH without .git suffix', () => {
53
+ expect(sshToHttps('git@gitlab.com:team/project')).toBe('https://gitlab.com/team/project.git');
54
+ });
55
+ it('should return non-SSH URLs unchanged', () => {
56
+ const url = 'https://github.com/owner/repo.git';
57
+ expect(sshToHttps(url)).toBe(url);
58
+ });
59
+ });
60
+ describe('normalizeGitUrl', () => {
61
+ it('should add https prefix if missing', () => {
62
+ const result = normalizeGitUrl('github.com/owner/repo');
63
+ expect(result).toMatch(/^https:\/\//);
64
+ });
65
+ it('should add .git suffix if missing', () => {
66
+ const result = normalizeGitUrl('https://github.com/owner/repo');
67
+ expect(result).toMatch(/\.git$/);
68
+ });
69
+ it('should leave SSH URLs unchanged', () => {
70
+ const url = 'git@github.com:owner/repo.git';
71
+ expect(normalizeGitUrl(url)).toBe(url);
72
+ });
73
+ it('should not double-add .git', () => {
74
+ const result = normalizeGitUrl('https://github.com/owner/repo.git');
75
+ expect(result).not.toContain('.git.git');
76
+ });
77
+ });
78
+ // ─── URL Sanitization ────────────────────────────────────────────────
79
+ describe('sanitizeUrl', () => {
80
+ it('should strip oauth2 tokens', () => {
81
+ const url = 'https://oauth2:mysecrettoken123@github.com/owner/repo.git';
82
+ const result = sanitizeUrl(url);
83
+ expect(result).not.toContain('mysecrettoken123');
84
+ expect(result).toContain('github.com');
85
+ });
86
+ it('should strip basic auth tokens', () => {
87
+ const url = 'https://user:password123@gitlab.com/team/repo.git';
88
+ const result = sanitizeUrl(url);
89
+ expect(result).not.toContain('password123');
90
+ });
91
+ it('should leave clean URLs unchanged', () => {
92
+ const url = 'https://github.com/owner/repo.git';
93
+ expect(sanitizeUrl(url)).toBe(url);
94
+ });
95
+ });
96
+ // ─── Auth Resolution ─────────────────────────────────────────────────
97
+ describe('resolveGitAuth', () => {
98
+ const originalEnv = { ...process.env };
99
+ afterEach(() => {
100
+ // Restore environment
101
+ process.env = { ...originalEnv };
102
+ });
103
+ it('should prioritize explicit token', async () => {
104
+ const result = await resolveGitAuth('https://github.com/owner/repo', 'explicit-token');
105
+ expect(result.method).toBe('token');
106
+ expect(result.token).toBe('explicit-token');
107
+ });
108
+ it('should resolve GH_TOKEN for GitHub', async () => {
109
+ process.env.GH_TOKEN = 'gh-test-token';
110
+ const result = await resolveGitAuth('https://github.com/owner/repo');
111
+ expect(result.method).toBe('token');
112
+ expect(result.token).toBe('gh-test-token');
113
+ delete process.env.GH_TOKEN;
114
+ });
115
+ it('should resolve GITLAB_TOKEN for GitLab', async () => {
116
+ process.env.GITLAB_TOKEN = 'gl-test-token';
117
+ const result = await resolveGitAuth('https://gitlab.com/team/repo');
118
+ expect(result.method).toBe('token');
119
+ expect(result.token).toBe('gl-test-token');
120
+ delete process.env.GITLAB_TOKEN;
121
+ });
122
+ it('should resolve BITBUCKET_TOKEN for Bitbucket', async () => {
123
+ process.env.BITBUCKET_TOKEN = 'bb-test-token';
124
+ const result = await resolveGitAuth('https://bitbucket.org/team/repo');
125
+ expect(result.method).toBe('token');
126
+ expect(result.token).toBe('bb-test-token');
127
+ delete process.env.BITBUCKET_TOKEN;
128
+ });
129
+ it('should resolve GIT_TOKEN as fallback for custom hosts', async () => {
130
+ process.env.GIT_TOKEN = 'generic-token';
131
+ const result = await resolveGitAuth('https://git.company.com/team/repo');
132
+ expect(result.method).toBe('token');
133
+ expect(result.token).toBe('generic-token');
134
+ delete process.env.GIT_TOKEN;
135
+ });
136
+ it('should detect correct host type', async () => {
137
+ const github = await resolveGitAuth('https://github.com/owner/repo', 'tok');
138
+ expect(github.host).toBe('github');
139
+ const gitlab = await resolveGitAuth('https://gitlab.com/team/repo', 'tok');
140
+ expect(gitlab.host).toBe('gitlab');
141
+ const bitbucket = await resolveGitAuth('https://bitbucket.org/team/repo', 'tok');
142
+ expect(bitbucket.host).toBe('bitbucket');
143
+ const custom = await resolveGitAuth('https://git.company.com/team/repo', 'tok');
144
+ expect(custom.host).toBe('custom');
145
+ });
146
+ it('should return none when no auth available', async () => {
147
+ // Clear all possible tokens
148
+ delete process.env.GH_TOKEN;
149
+ delete process.env.GITHUB_TOKEN;
150
+ delete process.env.GIT_TOKEN;
151
+ delete process.env.GITLAB_TOKEN;
152
+ delete process.env.GL_TOKEN;
153
+ delete process.env.BITBUCKET_TOKEN;
154
+ delete process.env.BB_TOKEN;
155
+ const result = await resolveGitAuth('https://git.example.com/team/repo');
156
+ // Could be 'none', 'ssh', or 'credential-helper' depending on machine
157
+ expect(['none', 'ssh', 'credential-helper', 'netrc']).toContain(result.method);
158
+ }, 15000); // Increased timeout for credential helper probing
159
+ });
160
+ //# sourceMappingURL=git-auth.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-auth.test.js","sourceRoot":"","sources":["../../src/__tests__/git-auth.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Tests for skill-lock.ts
3
+ *
4
+ * Validates the expanded SourceType union and lock file operations
5
+ * with the new source types (bitbucket, npm, private-git)
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=skill-lock.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-lock.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/skill-lock.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -0,0 +1,104 @@
1
+ /**
2
+ * Tests for skill-lock.ts
3
+ *
4
+ * Validates the expanded SourceType union and lock file operations
5
+ * with the new source types (bitbucket, npm, private-git)
6
+ */
7
+ import { describe, it, expect } from 'vitest';
8
+ import { createLockEntry, } from '../core/skill-lock.js';
9
+ // ─── SourceType Expansion ────────────────────────────────────────────
10
+ describe('SourceType - Expanded Types', () => {
11
+ it('should accept all original source types', () => {
12
+ const types = ['database', 'github', 'gitlab', 'local'];
13
+ expect(types).toHaveLength(4);
14
+ });
15
+ it('should accept new source types', () => {
16
+ const types = ['bitbucket', 'npm', 'private-git'];
17
+ expect(types).toHaveLength(3);
18
+ });
19
+ it('should accept all source types together', () => {
20
+ const types = [
21
+ 'database', 'github', 'gitlab', 'bitbucket', 'npm', 'private-git', 'local',
22
+ ];
23
+ expect(types).toHaveLength(7);
24
+ });
25
+ });
26
+ // ─── Lock Entry Creation ─────────────────────────────────────────────
27
+ describe('createLockEntry - New Source Types', () => {
28
+ it('should create lock entry for Bitbucket source', () => {
29
+ const entry = createLockEntry({
30
+ name: 'my-skill',
31
+ scopedName: 'team/repo/my-skill',
32
+ source: 'https://bitbucket.org/team/repo.git',
33
+ sourceType: 'bitbucket',
34
+ version: 'abc123',
35
+ agents: ['cursor', 'claude'],
36
+ canonicalPath: '/path/to/skills',
37
+ isGlobal: false,
38
+ });
39
+ expect(entry.sourceType).toBe('bitbucket');
40
+ expect(entry.source).toBe('https://bitbucket.org/team/repo.git');
41
+ expect(entry.name).toBe('my-skill');
42
+ expect(entry.agents).toEqual(['cursor', 'claude']);
43
+ expect(entry.installedAt).toBeDefined();
44
+ });
45
+ it('should create lock entry for npm source', () => {
46
+ const entry = createLockEntry({
47
+ name: 'company-skills',
48
+ scopedName: 'npm:@company/skills/company-skills',
49
+ source: 'npm:@company/skills',
50
+ sourceType: 'npm',
51
+ version: '1.2.3',
52
+ agents: ['cursor'],
53
+ canonicalPath: '/path/to/skills',
54
+ isGlobal: true,
55
+ });
56
+ expect(entry.sourceType).toBe('npm');
57
+ expect(entry.source).toBe('npm:@company/skills');
58
+ expect(entry.version).toBe('1.2.3');
59
+ expect(entry.isGlobal).toBe(true);
60
+ });
61
+ it('should create lock entry for private-git source', () => {
62
+ const entry = createLockEntry({
63
+ name: 'internal-skill',
64
+ scopedName: 'team/skills/internal-skill',
65
+ source: 'https://git.company.com/team/skills.git',
66
+ sourceType: 'private-git',
67
+ version: 'def456',
68
+ agents: ['claude'],
69
+ canonicalPath: '/path/to/skills',
70
+ isGlobal: false,
71
+ });
72
+ expect(entry.sourceType).toBe('private-git');
73
+ expect(entry.source).toContain('git.company.com');
74
+ });
75
+ it('should create lock entry for ssh private-git source', () => {
76
+ const entry = createLockEntry({
77
+ name: 'ssh-skill',
78
+ scopedName: 'team/repo/ssh-skill',
79
+ source: 'git@git.company.com:team/repo.git',
80
+ sourceType: 'private-git',
81
+ agents: ['cursor', 'claude'],
82
+ canonicalPath: '/path/to/skills',
83
+ isGlobal: false,
84
+ });
85
+ expect(entry.sourceType).toBe('private-git');
86
+ expect(entry.source).toContain('git@');
87
+ });
88
+ it('should include timestamp on creation', () => {
89
+ const before = new Date().toISOString();
90
+ const entry = createLockEntry({
91
+ name: 'test',
92
+ scopedName: 'test',
93
+ source: 'npm:test',
94
+ sourceType: 'npm',
95
+ agents: ['cursor'],
96
+ canonicalPath: '/tmp',
97
+ isGlobal: false,
98
+ });
99
+ const after = new Date().toISOString();
100
+ expect(entry.installedAt >= before).toBe(true);
101
+ expect(entry.installedAt <= after).toBe(true);
102
+ });
103
+ });
104
+ //# sourceMappingURL=skill-lock.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-lock.test.js","sourceRoot":"","sources":["../../src/__tests__/skill-lock.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Tests for skillsrc.ts
3
+ *
4
+ * Validates:
5
+ * - JSON config parsing
6
+ * - Source filtering by type
7
+ * - Registry lookup by scope
8
+ * - Auth env var resolution
9
+ */
10
+ export {};
11
+ //# sourceMappingURL=skillsrc.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skillsrc.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/skillsrc.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}