reskill 0.14.0 → 0.15.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/README.md CHANGED
@@ -19,13 +19,13 @@ English | [简体中文](./README.zh-CN.md)
19
19
 
20
20
  ```bash
21
21
  # 1. Initialize project
22
- npx reskill init
22
+ npx reskill@latest init
23
23
 
24
24
  # 2. Install a skill
25
- npx reskill install github:anthropics/skills/frontend-design@latest
25
+ npx reskill@latest install github:anthropics/skills/frontend-design@latest
26
26
 
27
27
  # 3. List installed skills
28
- npx reskill list
28
+ npx reskill@latest list
29
29
  ```
30
30
 
31
31
  ## What is reskill?
@@ -76,35 +76,40 @@ When running `reskill update`:
76
76
  ## Installation
77
77
 
78
78
  ```bash
79
- # Global install
79
+ # Global install (recommended for regular use)
80
80
  npm install -g reskill
81
81
 
82
- # Or use npx
82
+ # Or use npx with @latest (recommended for ongoing skill management)
83
+ npx reskill@latest <command>
84
+
85
+ # For one-time use, npx reskill also works
83
86
  npx reskill <command>
84
87
  ```
85
88
 
89
+ > **Note:** When using `npx`, we recommend `npx reskill@latest` to ensure you always get the latest version. Without `@latest`, npx may use a cached older version.
90
+
86
91
  ## Usage
87
92
 
88
93
  ### Source Formats
89
94
 
90
95
  ```bash
91
96
  # GitHub shorthand
92
- npx reskill install github:user/skill@v1.0.0
97
+ npx reskill@latest install github:user/skill@v1.0.0
93
98
 
94
99
  # Full Git URL
95
- npx reskill install https://github.com/user/skill.git
100
+ npx reskill@latest install https://github.com/user/skill.git
96
101
 
97
102
  # GitHub web URL (with branch and subpath)
98
- npx reskill install https://github.com/vercel-labs/agent-skills/tree/main/skills/web-design-guidelines
103
+ npx reskill@latest install https://github.com/vercel-labs/agent-skills/tree/main/skills/web-design-guidelines
99
104
 
100
105
  # GitLab
101
- npx reskill install gitlab:group/skill@latest
106
+ npx reskill@latest install gitlab:group/skill@latest
102
107
 
103
108
  # Private registry
104
- npx reskill install gitlab.company.com:team/skill@v1.0.0
109
+ npx reskill@latest install gitlab.company.com:team/skill@v1.0.0
105
110
 
106
111
  # Default registry (from skills.json)
107
- npx reskill install user/skill@v1.0.0
112
+ npx reskill@latest install user/skill@v1.0.0
108
113
  ```
109
114
 
110
115
  ### Version Specification
@@ -119,37 +124,37 @@ npx reskill install user/skill@v1.0.0
119
124
 
120
125
  ## Commands
121
126
 
122
- You can use `npx reskill` directly without global installation:
127
+ You can use `npx reskill@latest` directly without global installation:
123
128
 
124
129
  ```bash
125
130
  # Initialize project
126
- npx reskill init
131
+ npx reskill@latest init
127
132
 
128
133
  # Install a skill from GitHub
129
- npx reskill install github:anthropics/skills/frontend-design@latest
134
+ npx reskill@latest install github:anthropics/skills/frontend-design@latest
130
135
 
131
136
  # Install from private GitLab
132
- npx reskill install gitlab.company.com:team/internal-skill@v1.0.0
137
+ npx reskill@latest install gitlab.company.com:team/internal-skill@v1.0.0
133
138
 
134
139
  # List installed skills
135
- npx reskill list
140
+ npx reskill@latest list
136
141
  ```
137
142
 
138
143
  ### Command Reference
139
144
 
140
145
  | Command | Description |
141
146
  |---------|-------------|
142
- | `npx reskill init` | Initialize `skills.json` in current directory |
143
- | `npx reskill install [skill]` | Install skills from `skills.json` or a specific skill |
144
- | `npx reskill list` | List installed skills |
145
- | `npx reskill info <skill>` | Show skill details |
146
- | `npx reskill update [skill]` | Update all or specific skill |
147
- | `npx reskill outdated` | Check for outdated skills |
148
- | `npx reskill uninstall <skill>` | Remove a skill |
149
- | `npx reskill link <path>` | Link local skill for development |
150
- | `npx reskill unlink <skill>` | Unlink a local skill |
151
-
152
- Run `npx reskill <command> --help` for detailed options.
147
+ | `npx reskill@latest init` | Initialize `skills.json` in current directory |
148
+ | `npx reskill@latest install [skill]` | Install skills from `skills.json` or a specific skill |
149
+ | `npx reskill@latest list` | List installed skills |
150
+ | `npx reskill@latest info <skill>` | Show skill details |
151
+ | `npx reskill@latest update [skill]` | Update all or specific skill |
152
+ | `npx reskill@latest outdated` | Check for outdated skills |
153
+ | `npx reskill@latest uninstall <skill>` | Remove a skill |
154
+ | `npx reskill@latest link <path>` | Link local skill for development |
155
+ | `npx reskill@latest unlink <skill>` | Unlink a local skill |
156
+
157
+ Run `npx reskill@latest <command> --help` for detailed options.
153
158
 
154
159
  ## Private GitLab Support
155
160
 
@@ -163,10 +168,10 @@ reskill uses your existing SSH configuration automatically:
163
168
 
164
169
  ```bash
165
170
  # Uses your ~/.ssh/id_rsa or ~/.ssh/id_ed25519 automatically
166
- npx reskill install gitlab.company.com:team/private-skill@v1.0.0
171
+ npx reskill@latest install gitlab.company.com:team/private-skill@v1.0.0
167
172
 
168
173
  # Or with explicit SSH URL
169
- npx reskill install git@gitlab.company.com:team/private-skill.git@v1.0.0
174
+ npx reskill@latest install git@gitlab.company.com:team/private-skill.git@v1.0.0
170
175
  ```
171
176
 
172
177
  Ensure your SSH key is added to GitLab and ssh-agent is running.
@@ -213,10 +218,10 @@ For self-hosted GitLab instances with custom domains:
213
218
 
214
219
  ```bash
215
220
  # Direct installation
216
- npx reskill install git.mycompany.io:team/skill@v1.0.0
221
+ npx reskill@latest install git.mycompany.io:team/skill@v1.0.0
217
222
 
218
223
  # With explicit SSH URL
219
- npx reskill install git@git.mycompany.io:team/skill.git@v1.0.0
224
+ npx reskill@latest install git@git.mycompany.io:team/skill.git@v1.0.0
220
225
  ```
221
226
 
222
227
  ## Configuration
package/README.zh-CN.md CHANGED
@@ -19,13 +19,13 @@
19
19
 
20
20
  ```bash
21
21
  # 1. 初始化项目
22
- npx reskill init
22
+ npx reskill@latest init
23
23
 
24
24
  # 2. 安装 skill
25
- npx reskill install github:anthropics/skills/frontend-design@latest
25
+ npx reskill@latest install github:anthropics/skills/frontend-design@latest
26
26
 
27
27
  # 3. 列出已安装的 skills
28
- npx reskill list
28
+ npx reskill@latest list
29
29
  ```
30
30
 
31
31
  ## 什么是 reskill?
@@ -77,35 +77,40 @@ reskill 提供**精细化的 skill 管理和同步方案**:
77
77
  ## 安装
78
78
 
79
79
  ```bash
80
- # 全局安装
80
+ # 全局安装(推荐常态化使用)
81
81
  npm install -g reskill
82
82
 
83
- # 或使用 npx
83
+ # 或使用 npx(推荐加 @latest 确保最新版本)
84
+ npx reskill@latest <command>
85
+
86
+ # 单次使用也可以直接 npx reskill
84
87
  npx reskill <command>
85
88
  ```
86
89
 
90
+ > **注意:** 使用 `npx` 时,建议使用 `npx reskill@latest` 以确保使用最新版本。不加 `@latest` 时,npx 可能会使用缓存的旧版本。
91
+
87
92
  ## 使用方式
88
93
 
89
94
  ### 源格式
90
95
 
91
96
  ```bash
92
97
  # GitHub 简写
93
- npx reskill install github:user/skill@v1.0.0
98
+ npx reskill@latest install github:user/skill@v1.0.0
94
99
 
95
100
  # 完整 Git URL
96
- npx reskill install https://github.com/user/skill.git
101
+ npx reskill@latest install https://github.com/user/skill.git
97
102
 
98
103
  # GitHub 网页 URL(支持分支和子路径)
99
- npx reskill install https://github.com/vercel-labs/agent-skills/tree/main/skills/web-design-guidelines
104
+ npx reskill@latest install https://github.com/vercel-labs/agent-skills/tree/main/skills/web-design-guidelines
100
105
 
101
106
  # GitLab
102
- npx reskill install gitlab:group/skill@latest
107
+ npx reskill@latest install gitlab:group/skill@latest
103
108
 
104
109
  # 私有 Registry
105
- npx reskill install gitlab.company.com:team/skill@v1.0.0
110
+ npx reskill@latest install gitlab.company.com:team/skill@v1.0.0
106
111
 
107
112
  # 默认 Registry(来自 skills.json)
108
- npx reskill install user/skill@v1.0.0
113
+ npx reskill@latest install user/skill@v1.0.0
109
114
  ```
110
115
 
111
116
  ### 版本规范
@@ -120,37 +125,37 @@ npx reskill install user/skill@v1.0.0
120
125
 
121
126
  ## 命令
122
127
 
123
- 无需全局安装,直接使用 `npx reskill`:
128
+ 无需全局安装,直接使用 `npx reskill@latest`:
124
129
 
125
130
  ```bash
126
131
  # 初始化项目
127
- npx reskill init
132
+ npx reskill@latest init
128
133
 
129
134
  # 从 GitHub 安装 skill
130
- npx reskill install github:anthropics/skills/frontend-design@latest
135
+ npx reskill@latest install github:anthropics/skills/frontend-design@latest
131
136
 
132
137
  # 从私有 GitLab 安装
133
- npx reskill install gitlab.company.com:team/internal-skill@v1.0.0
138
+ npx reskill@latest install gitlab.company.com:team/internal-skill@v1.0.0
134
139
 
135
140
  # 列出已安装的 skills
136
- npx reskill list
141
+ npx reskill@latest list
137
142
  ```
138
143
 
139
144
  ### 命令参考
140
145
 
141
146
  | 命令 | 说明 |
142
147
  |------|------|
143
- | `npx reskill init` | 在当前目录初始化 `skills.json` |
144
- | `npx reskill install [skill]` | 安装 `skills.json` 中的所有 skills 或指定 skill |
145
- | `npx reskill list` | 列出已安装的 skills |
146
- | `npx reskill info <skill>` | 查看 skill 详情 |
147
- | `npx reskill update [skill]` | 更新所有或指定 skill |
148
- | `npx reskill outdated` | 检查过期的 skills |
149
- | `npx reskill uninstall <skill>` | 卸载 skill |
150
- | `npx reskill link <path>` | 链接本地 skill(开发用) |
151
- | `npx reskill unlink <skill>` | 取消链接本地 skill |
152
-
153
- 运行 `npx reskill <command> --help` 查看详细选项。
148
+ | `npx reskill@latest init` | 在当前目录初始化 `skills.json` |
149
+ | `npx reskill@latest install [skill]` | 安装 `skills.json` 中的所有 skills 或指定 skill |
150
+ | `npx reskill@latest list` | 列出已安装的 skills |
151
+ | `npx reskill@latest info <skill>` | 查看 skill 详情 |
152
+ | `npx reskill@latest update [skill]` | 更新所有或指定 skill |
153
+ | `npx reskill@latest outdated` | 检查过期的 skills |
154
+ | `npx reskill@latest uninstall <skill>` | 卸载 skill |
155
+ | `npx reskill@latest link <path>` | 链接本地 skill(开发用) |
156
+ | `npx reskill@latest unlink <skill>` | 取消链接本地 skill |
157
+
158
+ 运行 `npx reskill@latest <command> --help` 查看详细选项。
154
159
 
155
160
  ## 私有 GitLab 支持
156
161
 
@@ -164,10 +169,10 @@ reskill 自动使用你已有的 SSH 配置:
164
169
 
165
170
  ```bash
166
171
  # 自动使用 ~/.ssh/id_rsa 或 ~/.ssh/id_ed25519
167
- npx reskill install gitlab.company.com:team/private-skill@v1.0.0
172
+ npx reskill@latest install gitlab.company.com:team/private-skill@v1.0.0
168
173
 
169
174
  # 或使用显式的 SSH URL
170
- npx reskill install git@gitlab.company.com:team/private-skill.git@v1.0.0
175
+ npx reskill@latest install git@gitlab.company.com:team/private-skill.git@v1.0.0
171
176
  ```
172
177
 
173
178
  确保你的 SSH key 已添加到 GitLab,并且 ssh-agent 正在运行。
@@ -214,10 +219,10 @@ before_script:
214
219
 
215
220
  ```bash
216
221
  # 直接安装
217
- npx reskill install git.mycompany.io:team/skill@v1.0.0
222
+ npx reskill@latest install git.mycompany.io:team/skill@v1.0.0
218
223
 
219
224
  # 使用显式的 SSH URL
220
- npx reskill install git@git.mycompany.io:team/skill.git@v1.0.0
225
+ npx reskill@latest install git@git.mycompany.io:team/skill.git@v1.0.0
221
226
  ```
222
227
 
223
228
  ## 配置
package/dist/cli/index.js CHANGED
@@ -4,10 +4,10 @@ import * as __WEBPACK_EXTERNAL_MODULE_node_path__ from "node:path";
4
4
  import * as __WEBPACK_EXTERNAL_MODULE_node_url__ from "node:url";
5
5
  import * as __WEBPACK_EXTERNAL_MODULE_commander__ from "commander";
6
6
  import * as __WEBPACK_EXTERNAL_MODULE_chalk__ from "chalk";
7
+ import * as __WEBPACK_EXTERNAL_MODULE_semver__ from "semver";
7
8
  import * as __WEBPACK_EXTERNAL_MODULE_node_os__ from "node:os";
8
9
  import * as __WEBPACK_EXTERNAL_MODULE_node_child_process__ from "node:child_process";
9
10
  import * as __WEBPACK_EXTERNAL_MODULE_node_util__ from "node:util";
10
- import * as __WEBPACK_EXTERNAL_MODULE_semver__ from "semver";
11
11
  import * as __WEBPACK_EXTERNAL_MODULE__clack_prompts__ from "@clack/prompts";
12
12
  import * as __WEBPACK_EXTERNAL_MODULE_ora__ from "ora";
13
13
  var __webpack_modules__ = {
@@ -26,6 +26,81 @@ function __webpack_require__(moduleId) {
26
26
  return module.exports;
27
27
  }
28
28
  var external_node_fs_ = __webpack_require__("node:fs");
29
+ const logger_logger = {
30
+ info (message) {
31
+ console.log(__WEBPACK_EXTERNAL_MODULE_chalk__["default"].blue('ℹ'), message);
32
+ },
33
+ success (message) {
34
+ console.log(__WEBPACK_EXTERNAL_MODULE_chalk__["default"].green('✅'), message);
35
+ },
36
+ warn (message) {
37
+ console.log(__WEBPACK_EXTERNAL_MODULE_chalk__["default"].yellow('⚠️'), message);
38
+ },
39
+ error (message) {
40
+ console.error(__WEBPACK_EXTERNAL_MODULE_chalk__["default"].red('❌'), message);
41
+ },
42
+ debug (message) {
43
+ if (process.env.DEBUG || process.env.VERBOSE) console.log(__WEBPACK_EXTERNAL_MODULE_chalk__["default"].gray('🔍'), __WEBPACK_EXTERNAL_MODULE_chalk__["default"].gray(message));
44
+ },
45
+ package (message) {
46
+ console.log(__WEBPACK_EXTERNAL_MODULE_chalk__["default"].cyan('📦'), message);
47
+ },
48
+ log (message) {
49
+ console.log(message);
50
+ },
51
+ newline () {
52
+ console.log();
53
+ },
54
+ table (headers, rows) {
55
+ const widths = headers.map((h, i)=>{
56
+ const colValues = [
57
+ h,
58
+ ...rows.map((r)=>r[i] || '')
59
+ ];
60
+ return Math.max(...colValues.map((v)=>v.length));
61
+ });
62
+ const headerRow = headers.map((h, i)=>h.padEnd(widths[i])).join(' ');
63
+ console.log(__WEBPACK_EXTERNAL_MODULE_chalk__["default"].bold(headerRow));
64
+ for (const row of rows){
65
+ const rowStr = row.map((cell, i)=>(cell || '').padEnd(widths[i])).join(' ');
66
+ console.log(rowStr);
67
+ }
68
+ }
69
+ };
70
+ async function checkForUpdate(packageName, currentVersion, options = {}) {
71
+ const timeout = options.timeout ?? 3000;
72
+ try {
73
+ const controller = new AbortController();
74
+ const timeoutId = setTimeout(()=>controller.abort(), timeout);
75
+ const response = await fetch(`https://registry.npmjs.org/${packageName}`, {
76
+ signal: controller.signal
77
+ });
78
+ clearTimeout(timeoutId);
79
+ if (!response.ok) return null;
80
+ const data = await response.json();
81
+ const latest = data['dist-tags']?.latest;
82
+ if (!latest) return null;
83
+ const hasUpdate = __WEBPACK_EXTERNAL_MODULE_semver__["default"].gt(latest, currentVersion);
84
+ return {
85
+ current: currentVersion,
86
+ latest,
87
+ hasUpdate
88
+ };
89
+ } catch {
90
+ return null;
91
+ }
92
+ }
93
+ function formatUpdateMessage(result) {
94
+ if (!result.hasUpdate) return '';
95
+ return `
96
+ ┌────────────────────────────────────────────────────┐
97
+ │ │
98
+ │ Update available: ${result.current} → ${result.latest.padEnd(10)} │
99
+ │ Run: npm install -g reskill@latest │
100
+ │ │
101
+ └────────────────────────────────────────────────────┘
102
+ `;
103
+ }
29
104
  function exists(filePath) {
30
105
  return external_node_fs_.existsSync(filePath);
31
106
  }
@@ -112,47 +187,6 @@ function shortenPath(fullPath, cwd) {
112
187
  if (fullPath.startsWith(currentDir)) return `.${fullPath.slice(currentDir.length)}`;
113
188
  return fullPath;
114
189
  }
115
- const logger = {
116
- info (message) {
117
- console.log(__WEBPACK_EXTERNAL_MODULE_chalk__["default"].blue('ℹ'), message);
118
- },
119
- success (message) {
120
- console.log(__WEBPACK_EXTERNAL_MODULE_chalk__["default"].green('✅'), message);
121
- },
122
- warn (message) {
123
- console.log(__WEBPACK_EXTERNAL_MODULE_chalk__["default"].yellow('⚠️'), message);
124
- },
125
- error (message) {
126
- console.error(__WEBPACK_EXTERNAL_MODULE_chalk__["default"].red('❌'), message);
127
- },
128
- debug (message) {
129
- if (process.env.DEBUG || process.env.VERBOSE) console.log(__WEBPACK_EXTERNAL_MODULE_chalk__["default"].gray('🔍'), __WEBPACK_EXTERNAL_MODULE_chalk__["default"].gray(message));
130
- },
131
- package (message) {
132
- console.log(__WEBPACK_EXTERNAL_MODULE_chalk__["default"].cyan('📦'), message);
133
- },
134
- log (message) {
135
- console.log(message);
136
- },
137
- newline () {
138
- console.log();
139
- },
140
- table (headers, rows) {
141
- const widths = headers.map((h, i)=>{
142
- const colValues = [
143
- h,
144
- ...rows.map((r)=>r[i] || '')
145
- ];
146
- return Math.max(...colValues.map((v)=>v.length));
147
- });
148
- const headerRow = headers.map((h, i)=>h.padEnd(widths[i])).join(' ');
149
- console.log(__WEBPACK_EXTERNAL_MODULE_chalk__["default"].bold(headerRow));
150
- for (const row of rows){
151
- const rowStr = row.map((cell, i)=>(cell || '').padEnd(widths[i])).join(' ');
152
- console.log(rowStr);
153
- }
154
- }
155
- };
156
190
  const agent_registry_home = (0, __WEBPACK_EXTERNAL_MODULE_node_os__.homedir)();
157
191
  const agents = {
158
192
  amp: {
@@ -1141,6 +1175,7 @@ class LockManager {
1141
1175
  const lockedSkill = {
1142
1176
  source: options.source,
1143
1177
  version: options.version,
1178
+ ref: options.ref,
1144
1179
  resolved: options.resolved,
1145
1180
  commit: options.commit,
1146
1181
  installedAt: new Date().toISOString()
@@ -1220,35 +1255,43 @@ class SkillManager {
1220
1255
  const { force = false, save = true } = options;
1221
1256
  const resolved = await this.resolver.resolve(ref);
1222
1257
  const { parsed, repoUrl } = resolved;
1223
- const version = resolved.ref;
1258
+ const gitRef = resolved.ref;
1224
1259
  const skillName = parsed.subPath ? __WEBPACK_EXTERNAL_MODULE_node_path__.basename(parsed.subPath) : parsed.repo;
1225
1260
  const skillPath = this.getSkillPath(skillName);
1226
1261
  if (exists(skillPath) && !force) {
1227
1262
  const locked = this.lockManager.get(skillName);
1228
- if (locked && locked.version === version) {
1229
- logger.info(`${skillName}@${version} is already installed`);
1263
+ const lockedRef = locked?.ref || locked?.version;
1264
+ if (locked && lockedRef === gitRef) {
1265
+ logger_logger.info(`${skillName}@${gitRef} is already installed`);
1230
1266
  const installed = this.getInstalledSkill(skillName);
1231
1267
  if (installed) return installed;
1232
1268
  }
1233
1269
  if (!force) {
1234
- logger.warn(`${skillName} is already installed. Use --force to reinstall.`);
1270
+ logger_logger.warn(`${skillName} is already installed. Use --force to reinstall.`);
1235
1271
  const installed = this.getInstalledSkill(skillName);
1236
1272
  if (installed) return installed;
1237
1273
  }
1238
1274
  }
1239
- logger["package"](`Installing ${skillName}@${version}...`);
1240
- let cacheResult = await this.cache.get(parsed, version);
1241
- if (cacheResult) logger.debug(`Using cached ${skillName}@${version}`);
1275
+ logger_logger["package"](`Installing ${skillName}@${gitRef}...`);
1276
+ let cacheResult = await this.cache.get(parsed, gitRef);
1277
+ if (cacheResult) logger_logger.debug(`Using cached ${skillName}@${gitRef}`);
1242
1278
  else {
1243
- logger.debug(`Caching ${skillName}@${version} from ${repoUrl}`);
1244
- cacheResult = await this.cache.cache(repoUrl, parsed, version, version);
1279
+ logger_logger.debug(`Caching ${skillName}@${gitRef} from ${repoUrl}`);
1280
+ cacheResult = await this.cache.cache(repoUrl, parsed, gitRef, gitRef);
1245
1281
  }
1246
1282
  ensureDir(this.getInstallDir());
1247
1283
  if (exists(skillPath)) remove(skillPath);
1248
- await this.cache.copyTo(parsed, version, skillPath);
1284
+ await this.cache.copyTo(parsed, gitRef, skillPath);
1285
+ let semanticVersion = gitRef;
1286
+ const skillJsonPath = __WEBPACK_EXTERNAL_MODULE_node_path__.join(skillPath, 'skill.json');
1287
+ if (exists(skillJsonPath)) try {
1288
+ const skillJson = readJson(skillJsonPath);
1289
+ if (skillJson.version) semanticVersion = skillJson.version;
1290
+ } catch {}
1249
1291
  if (!this.isGlobal) this.lockManager.lockSkill(skillName, {
1250
1292
  source: `${parsed.registry}:${parsed.owner}/${parsed.repo}${parsed.subPath ? `/${parsed.subPath}` : ''}`,
1251
- version,
1293
+ version: semanticVersion,
1294
+ ref: gitRef,
1252
1295
  resolved: repoUrl,
1253
1296
  commit: cacheResult.commit
1254
1297
  });
@@ -1256,8 +1299,9 @@ class SkillManager {
1256
1299
  this.config.ensureExists();
1257
1300
  this.config.addSkill(skillName, ref);
1258
1301
  }
1302
+ const displayVersion = semanticVersion !== gitRef ? `${semanticVersion} (${gitRef})` : gitRef;
1259
1303
  const locationHint = this.isGlobal ? '(global)' : '';
1260
- logger.success(`Installed ${skillName}@${version} to ${skillPath} ${locationHint}`.trim());
1304
+ logger_logger.success(`Installed ${skillName}@${displayVersion} to ${skillPath} ${locationHint}`.trim());
1261
1305
  const installed = this.getInstalledSkill(skillName);
1262
1306
  if (!installed) throw new Error(`Failed to get installed skill info for ${skillName}`);
1263
1307
  return installed;
@@ -1272,7 +1316,7 @@ class SkillManager {
1272
1316
  });
1273
1317
  installed.push(skill);
1274
1318
  } catch (error) {
1275
- logger.error(`Failed to install ${name}: ${error.message}`);
1319
+ logger_logger.error(`Failed to install ${name}: ${error.message}`);
1276
1320
  }
1277
1321
  return installed;
1278
1322
  }
@@ -1280,14 +1324,14 @@ class SkillManager {
1280
1324
  const skillPath = this.getSkillPath(name);
1281
1325
  if (!exists(skillPath)) {
1282
1326
  const location = this.isGlobal ? '(global)' : '';
1283
- logger.warn(`Skill ${name} is not installed ${location}`.trim());
1327
+ logger_logger.warn(`Skill ${name} is not installed ${location}`.trim());
1284
1328
  return false;
1285
1329
  }
1286
1330
  remove(skillPath);
1287
1331
  if (!this.isGlobal) this.lockManager.remove(name);
1288
1332
  if (!this.isGlobal && this.config.exists()) this.config.removeSkill(name);
1289
1333
  const locationHint = this.isGlobal ? '(global)' : '';
1290
- logger.success(`Uninstalled ${name} ${locationHint}`.trim());
1334
+ logger_logger.success(`Uninstalled ${name} ${locationHint}`.trim());
1291
1335
  return true;
1292
1336
  }
1293
1337
  async update(name) {
@@ -1295,7 +1339,7 @@ class SkillManager {
1295
1339
  if (name) {
1296
1340
  const ref = this.config.getSkillRef(name);
1297
1341
  if (!ref) {
1298
- logger.error(`Skill ${name} not found in skills.json`);
1342
+ logger_logger.error(`Skill ${name} not found in skills.json`);
1299
1343
  return [];
1300
1344
  }
1301
1345
  const skill = await this.install(ref, {
@@ -1312,7 +1356,7 @@ class SkillManager {
1312
1356
  });
1313
1357
  updated.push(skill);
1314
1358
  } catch (error) {
1315
- logger.error(`Failed to update ${skillName}: ${error.message}`);
1359
+ logger_logger.error(`Failed to update ${skillName}: ${error.message}`);
1316
1360
  }
1317
1361
  }
1318
1362
  return updated;
@@ -1329,7 +1373,7 @@ class SkillManager {
1329
1373
  const linkPath = this.getSkillPath(skillName);
1330
1374
  ensureDir(__WEBPACK_EXTERNAL_MODULE_node_path__.dirname(linkPath));
1331
1375
  createSymlink(absolutePath, linkPath);
1332
- logger.success(`Linked ${skillName} → ${absolutePath}`);
1376
+ logger_logger.success(`Linked ${skillName} → ${absolutePath}`);
1333
1377
  return {
1334
1378
  name: skillName,
1335
1379
  path: linkPath,
@@ -1341,15 +1385,15 @@ class SkillManager {
1341
1385
  unlink(name) {
1342
1386
  const skillPath = this.getSkillPath(name);
1343
1387
  if (!exists(skillPath)) {
1344
- logger.warn(`Skill ${name} is not installed`);
1388
+ logger_logger.warn(`Skill ${name} is not installed`);
1345
1389
  return false;
1346
1390
  }
1347
1391
  if (!isSymlink(skillPath)) {
1348
- logger.warn(`Skill ${name} is not a linked skill`);
1392
+ logger_logger.warn(`Skill ${name} is not a linked skill`);
1349
1393
  return false;
1350
1394
  }
1351
1395
  remove(skillPath);
1352
- logger.success(`Unlinked ${name}`);
1396
+ logger_logger.success(`Unlinked ${name}`);
1353
1397
  return true;
1354
1398
  }
1355
1399
  list() {
@@ -1419,7 +1463,8 @@ class SkillManager {
1419
1463
  const skills = this.config.getSkills();
1420
1464
  for (const [name, ref] of Object.entries(skills))try {
1421
1465
  const locked = this.lockManager.get(name);
1422
- const current = locked?.version || 'unknown';
1466
+ const currentRef = locked?.ref || locked?.version || 'unknown';
1467
+ const currentVersion = locked?.version || 'unknown';
1423
1468
  const parsed = this.resolver.parseRef(ref);
1424
1469
  const repoUrl = this.resolver.buildRepoUrl(parsed);
1425
1470
  const latestResolved = await this.resolver.resolveVersion(repoUrl, {
@@ -1428,15 +1473,15 @@ class SkillManager {
1428
1473
  raw: 'latest'
1429
1474
  });
1430
1475
  const latest = latestResolved.ref;
1431
- const updateAvailable = current !== latest && 'unknown' !== current;
1476
+ const updateAvailable = currentRef !== latest && 'unknown' !== currentRef;
1432
1477
  results.push({
1433
1478
  name,
1434
- current,
1479
+ current: currentVersion !== currentRef ? `${currentVersion} (${currentRef})` : currentRef,
1435
1480
  latest,
1436
1481
  updateAvailable
1437
1482
  });
1438
1483
  } catch (error) {
1439
- logger.debug(`Failed to check ${name}: ${error.message}`);
1484
+ logger_logger.debug(`Failed to check ${name}: ${error.message}`);
1440
1485
  results.push({
1441
1486
  name,
1442
1487
  current: 'unknown',
@@ -1450,16 +1495,22 @@ class SkillManager {
1450
1495
  const { save = true, mode = 'symlink' } = options;
1451
1496
  const resolved = await this.resolver.resolve(ref);
1452
1497
  const { parsed, repoUrl } = resolved;
1453
- const version = resolved.ref;
1498
+ const gitRef = resolved.ref;
1454
1499
  const skillName = parsed.subPath ? __WEBPACK_EXTERNAL_MODULE_node_path__.basename(parsed.subPath) : parsed.repo;
1455
- logger["package"](`Installing ${skillName}@${version} to ${targetAgents.length} agent(s)...`);
1456
- let cacheResult = await this.cache.get(parsed, version);
1457
- if (cacheResult) logger.debug(`Using cached ${skillName}@${version}`);
1500
+ logger_logger["package"](`Installing ${skillName}@${gitRef} to ${targetAgents.length} agent(s)...`);
1501
+ let cacheResult = await this.cache.get(parsed, gitRef);
1502
+ if (cacheResult) logger_logger.debug(`Using cached ${skillName}@${gitRef}`);
1458
1503
  else {
1459
- logger.debug(`Caching ${skillName}@${version} from ${repoUrl}`);
1460
- cacheResult = await this.cache.cache(repoUrl, parsed, version, version);
1504
+ logger_logger.debug(`Caching ${skillName}@${gitRef} from ${repoUrl}`);
1505
+ cacheResult = await this.cache.cache(repoUrl, parsed, gitRef, gitRef);
1461
1506
  }
1462
- const sourcePath = this.cache.getCachePath(parsed, version);
1507
+ const sourcePath = this.cache.getCachePath(parsed, gitRef);
1508
+ let semanticVersion = gitRef;
1509
+ const skillJsonPath = __WEBPACK_EXTERNAL_MODULE_node_path__.join(sourcePath, 'skill.json');
1510
+ if (exists(skillJsonPath)) try {
1511
+ const skillJson = readJson(skillJsonPath);
1512
+ if (skillJson.version) semanticVersion = skillJson.version;
1513
+ } catch {}
1463
1514
  const installer = new Installer({
1464
1515
  cwd: this.projectRoot,
1465
1516
  global: this.isGlobal
@@ -1469,7 +1520,8 @@ class SkillManager {
1469
1520
  });
1470
1521
  if (!this.isGlobal) this.lockManager.lockSkill(skillName, {
1471
1522
  source: `${parsed.registry}:${parsed.owner}/${parsed.repo}${parsed.subPath ? `/${parsed.subPath}` : ''}`,
1472
- version,
1523
+ version: semanticVersion,
1524
+ ref: gitRef,
1473
1525
  resolved: repoUrl,
1474
1526
  commit: cacheResult.commit
1475
1527
  });
@@ -1479,12 +1531,13 @@ class SkillManager {
1479
1531
  }
1480
1532
  const successCount = Array.from(results.values()).filter((r)=>r.success).length;
1481
1533
  const failCount = results.size - successCount;
1482
- if (0 === failCount) logger.success(`Installed ${skillName}@${version} to ${successCount} agent(s)`);
1483
- else logger.warn(`Installed ${skillName}@${version} to ${successCount} agent(s), ${failCount} failed`);
1534
+ const displayVersion = semanticVersion !== gitRef ? `${semanticVersion} (${gitRef})` : gitRef;
1535
+ if (0 === failCount) logger_logger.success(`Installed ${skillName}@${displayVersion} to ${successCount} agent(s)`);
1536
+ else logger_logger.warn(`Installed ${skillName}@${displayVersion} to ${successCount} agent(s), ${failCount} failed`);
1484
1537
  const skill = {
1485
1538
  name: skillName,
1486
1539
  path: sourcePath,
1487
- version,
1540
+ version: semanticVersion,
1488
1541
  source: `${parsed.registry}:${parsed.owner}/${parsed.repo}${parsed.subPath ? `/${parsed.subPath}` : ''}`
1489
1542
  };
1490
1543
  return {
@@ -1524,7 +1577,7 @@ class SkillManager {
1524
1577
  if (!this.isGlobal) this.lockManager.remove(name);
1525
1578
  if (!this.isGlobal && this.config.exists()) this.config.removeSkill(name);
1526
1579
  const successCount = Array.from(results.values()).filter((r)=>r).length;
1527
- logger.success(`Uninstalled ${name} from ${successCount} agent(s)`);
1580
+ logger_logger.success(`Uninstalled ${name} from ${successCount} agent(s)`);
1528
1581
  return results;
1529
1582
  }
1530
1583
  }
@@ -1536,41 +1589,41 @@ const infoCommand = new __WEBPACK_EXTERNAL_MODULE_commander__.Command('info').de
1536
1589
  return;
1537
1590
  }
1538
1591
  if (!info.installed && !info.config) {
1539
- logger.error(`Skill ${skillName} not found`);
1592
+ logger_logger.error(`Skill ${skillName} not found`);
1540
1593
  process.exit(1);
1541
1594
  }
1542
- logger.log(`Skill: ${skillName}`);
1543
- logger.newline();
1595
+ logger_logger.log(`Skill: ${skillName}`);
1596
+ logger_logger.newline();
1544
1597
  if (info.config) {
1545
- logger.log("Configuration (skills.json):");
1546
- logger.log(` Reference: ${info.config}`);
1598
+ logger_logger.log("Configuration (skills.json):");
1599
+ logger_logger.log(` Reference: ${info.config}`);
1547
1600
  }
1548
1601
  if (info.locked) {
1549
- logger.log("Locked Version (skills.lock):");
1550
- logger.log(` Version: ${info.locked.version}`);
1551
- logger.log(` Source: ${info.locked.source}`);
1552
- logger.log(` Commit: ${info.locked.commit}`);
1553
- logger.log(` Installed: ${info.locked.installedAt}`);
1602
+ logger_logger.log("Locked Version (skills.lock):");
1603
+ logger_logger.log(` Version: ${info.locked.version}`);
1604
+ logger_logger.log(` Source: ${info.locked.source}`);
1605
+ logger_logger.log(` Commit: ${info.locked.commit}`);
1606
+ logger_logger.log(` Installed: ${info.locked.installedAt}`);
1554
1607
  }
1555
1608
  if (info.installed) {
1556
- logger.log("Installed:");
1557
- logger.log(` Path: ${info.installed.path}`);
1558
- logger.log(` Version: ${info.installed.version}`);
1559
- logger.log(` Linked: ${info.installed.isLinked ? 'Yes' : 'No'}`);
1609
+ logger_logger.log("Installed:");
1610
+ logger_logger.log(` Path: ${info.installed.path}`);
1611
+ logger_logger.log(` Version: ${info.installed.version}`);
1612
+ logger_logger.log(` Linked: ${info.installed.isLinked ? 'Yes' : 'No'}`);
1560
1613
  if (info.installed.metadata) {
1561
1614
  const meta = info.installed.metadata;
1562
- logger.log("Metadata (skill.json):");
1563
- if (meta.description) logger.log(` Description: ${meta.description}`);
1564
- if (meta.author) logger.log(` Author: ${meta.author}`);
1565
- if (meta.license) logger.log(` License: ${meta.license}`);
1566
- if (meta.keywords?.length) logger.log(` Keywords: ${meta.keywords.join(', ')}`);
1615
+ logger_logger.log("Metadata (skill.json):");
1616
+ if (meta.description) logger_logger.log(` Description: ${meta.description}`);
1617
+ if (meta.author) logger_logger.log(` Author: ${meta.author}`);
1618
+ if (meta.license) logger_logger.log(` License: ${meta.license}`);
1619
+ if (meta.keywords?.length) logger_logger.log(` Keywords: ${meta.keywords.join(', ')}`);
1567
1620
  }
1568
- } else logger.warn(`Skill ${skillName} is not installed`);
1621
+ } else logger_logger.warn(`Skill ${skillName} is not installed`);
1569
1622
  });
1570
1623
  const initCommand = new __WEBPACK_EXTERNAL_MODULE_commander__.Command('init').description('Initialize a new skills.json configuration').option('-n, --name <name>', 'Project name').option('-r, --registry <registry>', 'Default registry', 'github').option('-d, --install-dir <dir>', 'Skills installation directory', '.skills').option('-y, --yes', 'Skip prompts and use defaults').action(async (options)=>{
1571
1624
  const configLoader = new ConfigLoader();
1572
1625
  if (configLoader.exists()) {
1573
- logger.warn('skills.json already exists');
1626
+ logger_logger.warn('skills.json already exists');
1574
1627
  return;
1575
1628
  }
1576
1629
  const config = configLoader.create({
@@ -1580,16 +1633,16 @@ const initCommand = new __WEBPACK_EXTERNAL_MODULE_commander__.Command('init').de
1580
1633
  installDir: options.installDir
1581
1634
  }
1582
1635
  });
1583
- logger.success('Created skills.json');
1584
- logger.newline();
1585
- logger.log('Configuration:');
1586
- logger.log(` Name: ${config.name || '(not set)'}`);
1587
- logger.log(` Default registry: ${config.defaults?.registry}`);
1588
- logger.log(` Install directory: ${config.defaults?.installDir}`);
1589
- logger.newline();
1590
- logger.log('Next steps:');
1591
- logger.log(' reskill install <skill> Install a skill');
1592
- logger.log(' reskill list List installed skills');
1636
+ logger_logger.success('Created skills.json');
1637
+ logger_logger.newline();
1638
+ logger_logger.log('Configuration:');
1639
+ logger_logger.log(` Name: ${config.name || '(not set)'}`);
1640
+ logger_logger.log(` Default registry: ${config.defaults?.registry}`);
1641
+ logger_logger.log(` Install directory: ${config.defaults?.installDir}`);
1642
+ logger_logger.newline();
1643
+ logger_logger.log('Next steps:');
1644
+ logger_logger.log(' reskill install <skill> Install a skill');
1645
+ logger_logger.log(' reskill list List installed skills');
1593
1646
  });
1594
1647
  function formatAgentNames(agentTypes, maxShow = 5) {
1595
1648
  const names = agentTypes.map((a)=>agents[a].displayName);
@@ -1842,9 +1895,9 @@ const linkCmd = new __WEBPACK_EXTERNAL_MODULE_commander__.Command('link').descri
1842
1895
  const skillManager = new SkillManager();
1843
1896
  try {
1844
1897
  const linked = skillManager.link(localPath, options.name);
1845
- logger.log(`Linked skill available at: ${linked.path}`);
1898
+ logger_logger.log(`Linked skill available at: ${linked.path}`);
1846
1899
  } catch (error) {
1847
- logger.error(error.message);
1900
+ logger_logger.error(error.message);
1848
1901
  process.exit(1);
1849
1902
  }
1850
1903
  });
@@ -1863,7 +1916,7 @@ const listCommand = new __WEBPACK_EXTERNAL_MODULE_commander__.Command('list').al
1863
1916
  const skills = skillManager.list();
1864
1917
  if (0 === skills.length) {
1865
1918
  const location = isGlobal ? 'globally' : 'in this project';
1866
- logger.info(`No skills installed ${location}`);
1919
+ logger_logger.info(`No skills installed ${location}`);
1867
1920
  return;
1868
1921
  }
1869
1922
  if (options.json) {
@@ -1871,8 +1924,8 @@ const listCommand = new __WEBPACK_EXTERNAL_MODULE_commander__.Command('list').al
1871
1924
  return;
1872
1925
  }
1873
1926
  const locationLabel = isGlobal ? __WEBPACK_EXTERNAL_MODULE_chalk__["default"].dim(' (global)') : '';
1874
- logger.log(`Installed Skills (${skillManager.getInstallDir()})${locationLabel}:`);
1875
- logger.newline();
1927
+ logger_logger.log(`Installed Skills (${skillManager.getInstallDir()})${locationLabel}:`);
1928
+ logger_logger.newline();
1876
1929
  const headers = [
1877
1930
  'Name',
1878
1931
  'Version',
@@ -1883,19 +1936,19 @@ const listCommand = new __WEBPACK_EXTERNAL_MODULE_commander__.Command('list').al
1883
1936
  skill.isLinked ? `${skill.version} (linked)` : skill.version,
1884
1937
  skill.source || '-'
1885
1938
  ]);
1886
- logger.table(headers, rows);
1887
- logger.newline();
1888
- logger.log(`Total: ${skills.length} skill(s)`);
1939
+ logger_logger.table(headers, rows);
1940
+ logger_logger.newline();
1941
+ logger_logger.log(`Total: ${skills.length} skill(s)`);
1889
1942
  });
1890
1943
  const outdatedCommand = new __WEBPACK_EXTERNAL_MODULE_commander__.Command('outdated').description('Check for outdated skills').option('-j, --json', 'Output as JSON').action(async (options)=>{
1891
1944
  const configLoader = new ConfigLoader();
1892
1945
  if (!configLoader.exists()) {
1893
- logger.error("skills.json not found. Run 'reskill init' first.");
1946
+ logger_logger.error("skills.json not found. Run 'reskill init' first.");
1894
1947
  process.exit(1);
1895
1948
  }
1896
1949
  const skills = configLoader.getSkills();
1897
1950
  if (0 === Object.keys(skills).length) {
1898
- logger.info('No skills defined in skills.json');
1951
+ logger_logger.info('No skills defined in skills.json');
1899
1952
  return;
1900
1953
  }
1901
1954
  const skillManager = new SkillManager();
@@ -1909,11 +1962,11 @@ const outdatedCommand = new __WEBPACK_EXTERNAL_MODULE_commander__.Command('outda
1909
1962
  }
1910
1963
  const outdated = results.filter((r)=>r.updateAvailable);
1911
1964
  if (0 === outdated.length) {
1912
- logger.success('All skills are up to date!');
1965
+ logger_logger.success('All skills are up to date!');
1913
1966
  return;
1914
1967
  }
1915
- logger["package"]('Checking for updates...');
1916
- logger.newline();
1968
+ logger_logger["package"]('Checking for updates...');
1969
+ logger_logger.newline();
1917
1970
  const headers = [
1918
1971
  'Skill',
1919
1972
  'Current',
@@ -1926,15 +1979,15 @@ const outdatedCommand = new __WEBPACK_EXTERNAL_MODULE_commander__.Command('outda
1926
1979
  r.latest,
1927
1980
  r.updateAvailable ? __WEBPACK_EXTERNAL_MODULE_chalk__["default"].yellow('⬆️ Update available') : __WEBPACK_EXTERNAL_MODULE_chalk__["default"].green('✅ Up to date')
1928
1981
  ]);
1929
- logger.table(headers, rows);
1930
- logger.newline();
1982
+ logger_logger.table(headers, rows);
1983
+ logger_logger.newline();
1931
1984
  if (outdated.length > 0) {
1932
- logger.log(`Run ${__WEBPACK_EXTERNAL_MODULE_chalk__["default"].cyan('reskill update')} to update all skills`);
1933
- logger.log(`Or ${__WEBPACK_EXTERNAL_MODULE_chalk__["default"].cyan('reskill update <skill>')} to update a specific skill`);
1985
+ logger_logger.log(`Run ${__WEBPACK_EXTERNAL_MODULE_chalk__["default"].cyan('reskill update')} to update all skills`);
1986
+ logger_logger.log(`Or ${__WEBPACK_EXTERNAL_MODULE_chalk__["default"].cyan('reskill update <skill>')} to update a specific skill`);
1934
1987
  }
1935
1988
  } catch (error) {
1936
1989
  spinner.fail('Check failed');
1937
- logger.error(error.message);
1990
+ logger_logger.error(error.message);
1938
1991
  process.exit(1);
1939
1992
  }
1940
1993
  });
@@ -1949,7 +2002,7 @@ const uninstallCommand = new __WEBPACK_EXTERNAL_MODULE_commander__.Command('unin
1949
2002
  const updateCommand = new __WEBPACK_EXTERNAL_MODULE_commander__.Command('update').alias('up').description('Update installed skills').argument('[skill]', 'Skill name to update (updates all if not specified)').action(async (skill)=>{
1950
2003
  const configLoader = new ConfigLoader();
1951
2004
  if (!configLoader.exists()) {
1952
- logger.error("skills.json not found. Run 'reskill init' first.");
2005
+ logger_logger.error("skills.json not found. Run 'reskill init' first.");
1953
2006
  process.exit(1);
1954
2007
  }
1955
2008
  const skillManager = new SkillManager();
@@ -1958,14 +2011,14 @@ const updateCommand = new __WEBPACK_EXTERNAL_MODULE_commander__.Command('update'
1958
2011
  const updated = await skillManager.update(skill);
1959
2012
  spinner.stop();
1960
2013
  if (0 === updated.length) {
1961
- logger.info('No skills to update');
2014
+ logger_logger.info('No skills to update');
1962
2015
  return;
1963
2016
  }
1964
- logger.success(`Updated ${updated.length} skill(s):`);
1965
- for (const s of updated)logger.log(` - ${s.name}@${s.version}`);
2017
+ logger_logger.success(`Updated ${updated.length} skill(s):`);
2018
+ for (const s of updated)logger_logger.log(` - ${s.name}@${s.version}`);
1966
2019
  } catch (error) {
1967
2020
  spinner.fail('Update failed');
1968
- logger.error(error.message);
2021
+ logger_logger.error(error.message);
1969
2022
  process.exit(1);
1970
2023
  }
1971
2024
  });
@@ -1982,4 +2035,8 @@ program.addCommand(outdatedCommand);
1982
2035
  program.addCommand(uninstallCommand);
1983
2036
  program.addCommand(linkCommand);
1984
2037
  program.addCommand(unlinkCommand);
1985
- program.parse();
2038
+ const updateCheckPromise = checkForUpdate(packageJson.name, packageJson.version);
2039
+ program.parseAsync().then(async ()=>{
2040
+ const result = await updateCheckPromise;
2041
+ if (result?.hasUpdate) logger_logger.log(formatUpdateMessage(result));
2042
+ });
@@ -47,6 +47,7 @@ export declare class LockManager {
47
47
  lockSkill(name: string, options: {
48
48
  source: string;
49
49
  version: string;
50
+ ref: string;
50
51
  resolved: string;
51
52
  commit: string;
52
53
  }): LockedSkill;
@@ -1 +1 @@
1
- {"version":3,"file":"lock-manager.d.ts","sourceRoot":"","sources":["../../src/core/lock-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAQjE;;;;GAIG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAA2B;gBAE/B,WAAW,CAAC,EAAE,MAAM;IAKhC;;OAEG;IACH,WAAW,IAAI,MAAM;IAIrB;;OAEG;IACH,MAAM,IAAI,OAAO;IAIjB;;OAEG;IACH,IAAI,IAAI,UAAU;IAsBlB;;OAEG;IACH,MAAM,IAAI,UAAU;IAKpB;;OAEG;IACH,IAAI,CAAC,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI;IASnC;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAK1C;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI;IAM3C;;OAEG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAU7B;;OAEG;IACH,SAAS,CACP,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;QACP,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;KAChB,GACA,WAAW;IAad;;OAEG;IACH,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC;IAKrC;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAK1B;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO;IAQtD;;OAEG;IACH,KAAK,IAAI,IAAI;IAQb;;OAEG;IACH,MAAM,IAAI,IAAI;CAOf;AAED,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"lock-manager.d.ts","sourceRoot":"","sources":["../../src/core/lock-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAQjE;;;;GAIG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAA2B;gBAE/B,WAAW,CAAC,EAAE,MAAM;IAKhC;;OAEG;IACH,WAAW,IAAI,MAAM;IAIrB;;OAEG;IACH,MAAM,IAAI,OAAO;IAIjB;;OAEG;IACH,IAAI,IAAI,UAAU;IAsBlB;;OAEG;IACH,MAAM,IAAI,UAAU;IAKpB;;OAEG;IACH,IAAI,CAAC,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI;IASnC;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAK1C;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI;IAM3C;;OAEG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAU7B;;OAEG;IACH,SAAS,CACP,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;QACP,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,GAAG,EAAE,MAAM,CAAC;QACZ,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;KAChB,GACA,WAAW;IAcd;;OAEG;IACH,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC;IAKrC;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAK1B;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO;IAQtD;;OAEG;IACH,KAAK,IAAI,IAAI;IAQb;;OAEG;IACH,MAAM,IAAI,IAAI;CAOf;AAED,eAAe,WAAW,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"skill-manager.d.ts","sourceRoot":"","sources":["../../src/core/skill-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"skill-manager.d.ts","sourceRoot":"","sources":["../../src/core/skill-manager.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1127,6 +1127,7 @@ class LockManager {
1127
1127
  const lockedSkill = {
1128
1128
  source: options.source,
1129
1129
  version: options.version,
1130
+ ref: options.ref,
1130
1131
  resolved: options.resolved,
1131
1132
  commit: options.commit,
1132
1133
  installedAt: new Date().toISOString()
@@ -1164,7 +1165,7 @@ class LockManager {
1164
1165
  this.lockData = null;
1165
1166
  }
1166
1167
  }
1167
- const logger = {
1168
+ const logger_logger = {
1168
1169
  info (message) {
1169
1170
  console.log(__WEBPACK_EXTERNAL_MODULE_chalk__["default"].blue('ℹ'), message);
1170
1171
  },
@@ -1247,35 +1248,43 @@ class SkillManager {
1247
1248
  const { force = false, save = true } = options;
1248
1249
  const resolved = await this.resolver.resolve(ref);
1249
1250
  const { parsed, repoUrl } = resolved;
1250
- const version = resolved.ref;
1251
+ const gitRef = resolved.ref;
1251
1252
  const skillName = parsed.subPath ? __WEBPACK_EXTERNAL_MODULE_node_path__.basename(parsed.subPath) : parsed.repo;
1252
1253
  const skillPath = this.getSkillPath(skillName);
1253
1254
  if (exists(skillPath) && !force) {
1254
1255
  const locked = this.lockManager.get(skillName);
1255
- if (locked && locked.version === version) {
1256
- logger.info(`${skillName}@${version} is already installed`);
1256
+ const lockedRef = locked?.ref || locked?.version;
1257
+ if (locked && lockedRef === gitRef) {
1258
+ logger_logger.info(`${skillName}@${gitRef} is already installed`);
1257
1259
  const installed = this.getInstalledSkill(skillName);
1258
1260
  if (installed) return installed;
1259
1261
  }
1260
1262
  if (!force) {
1261
- logger.warn(`${skillName} is already installed. Use --force to reinstall.`);
1263
+ logger_logger.warn(`${skillName} is already installed. Use --force to reinstall.`);
1262
1264
  const installed = this.getInstalledSkill(skillName);
1263
1265
  if (installed) return installed;
1264
1266
  }
1265
1267
  }
1266
- logger["package"](`Installing ${skillName}@${version}...`);
1267
- let cacheResult = await this.cache.get(parsed, version);
1268
- if (cacheResult) logger.debug(`Using cached ${skillName}@${version}`);
1268
+ logger_logger["package"](`Installing ${skillName}@${gitRef}...`);
1269
+ let cacheResult = await this.cache.get(parsed, gitRef);
1270
+ if (cacheResult) logger_logger.debug(`Using cached ${skillName}@${gitRef}`);
1269
1271
  else {
1270
- logger.debug(`Caching ${skillName}@${version} from ${repoUrl}`);
1271
- cacheResult = await this.cache.cache(repoUrl, parsed, version, version);
1272
+ logger_logger.debug(`Caching ${skillName}@${gitRef} from ${repoUrl}`);
1273
+ cacheResult = await this.cache.cache(repoUrl, parsed, gitRef, gitRef);
1272
1274
  }
1273
1275
  ensureDir(this.getInstallDir());
1274
1276
  if (exists(skillPath)) remove(skillPath);
1275
- await this.cache.copyTo(parsed, version, skillPath);
1277
+ await this.cache.copyTo(parsed, gitRef, skillPath);
1278
+ let semanticVersion = gitRef;
1279
+ const skillJsonPath = __WEBPACK_EXTERNAL_MODULE_node_path__.join(skillPath, 'skill.json');
1280
+ if (exists(skillJsonPath)) try {
1281
+ const skillJson = readJson(skillJsonPath);
1282
+ if (skillJson.version) semanticVersion = skillJson.version;
1283
+ } catch {}
1276
1284
  if (!this.isGlobal) this.lockManager.lockSkill(skillName, {
1277
1285
  source: `${parsed.registry}:${parsed.owner}/${parsed.repo}${parsed.subPath ? `/${parsed.subPath}` : ''}`,
1278
- version,
1286
+ version: semanticVersion,
1287
+ ref: gitRef,
1279
1288
  resolved: repoUrl,
1280
1289
  commit: cacheResult.commit
1281
1290
  });
@@ -1283,8 +1292,9 @@ class SkillManager {
1283
1292
  this.config.ensureExists();
1284
1293
  this.config.addSkill(skillName, ref);
1285
1294
  }
1295
+ const displayVersion = semanticVersion !== gitRef ? `${semanticVersion} (${gitRef})` : gitRef;
1286
1296
  const locationHint = this.isGlobal ? '(global)' : '';
1287
- logger.success(`Installed ${skillName}@${version} to ${skillPath} ${locationHint}`.trim());
1297
+ logger_logger.success(`Installed ${skillName}@${displayVersion} to ${skillPath} ${locationHint}`.trim());
1288
1298
  const installed = this.getInstalledSkill(skillName);
1289
1299
  if (!installed) throw new Error(`Failed to get installed skill info for ${skillName}`);
1290
1300
  return installed;
@@ -1299,7 +1309,7 @@ class SkillManager {
1299
1309
  });
1300
1310
  installed.push(skill);
1301
1311
  } catch (error) {
1302
- logger.error(`Failed to install ${name}: ${error.message}`);
1312
+ logger_logger.error(`Failed to install ${name}: ${error.message}`);
1303
1313
  }
1304
1314
  return installed;
1305
1315
  }
@@ -1307,14 +1317,14 @@ class SkillManager {
1307
1317
  const skillPath = this.getSkillPath(name);
1308
1318
  if (!exists(skillPath)) {
1309
1319
  const location = this.isGlobal ? '(global)' : '';
1310
- logger.warn(`Skill ${name} is not installed ${location}`.trim());
1320
+ logger_logger.warn(`Skill ${name} is not installed ${location}`.trim());
1311
1321
  return false;
1312
1322
  }
1313
1323
  remove(skillPath);
1314
1324
  if (!this.isGlobal) this.lockManager.remove(name);
1315
1325
  if (!this.isGlobal && this.config.exists()) this.config.removeSkill(name);
1316
1326
  const locationHint = this.isGlobal ? '(global)' : '';
1317
- logger.success(`Uninstalled ${name} ${locationHint}`.trim());
1327
+ logger_logger.success(`Uninstalled ${name} ${locationHint}`.trim());
1318
1328
  return true;
1319
1329
  }
1320
1330
  async update(name) {
@@ -1322,7 +1332,7 @@ class SkillManager {
1322
1332
  if (name) {
1323
1333
  const ref = this.config.getSkillRef(name);
1324
1334
  if (!ref) {
1325
- logger.error(`Skill ${name} not found in skills.json`);
1335
+ logger_logger.error(`Skill ${name} not found in skills.json`);
1326
1336
  return [];
1327
1337
  }
1328
1338
  const skill = await this.install(ref, {
@@ -1339,7 +1349,7 @@ class SkillManager {
1339
1349
  });
1340
1350
  updated.push(skill);
1341
1351
  } catch (error) {
1342
- logger.error(`Failed to update ${skillName}: ${error.message}`);
1352
+ logger_logger.error(`Failed to update ${skillName}: ${error.message}`);
1343
1353
  }
1344
1354
  }
1345
1355
  return updated;
@@ -1356,7 +1366,7 @@ class SkillManager {
1356
1366
  const linkPath = this.getSkillPath(skillName);
1357
1367
  ensureDir(__WEBPACK_EXTERNAL_MODULE_node_path__.dirname(linkPath));
1358
1368
  createSymlink(absolutePath, linkPath);
1359
- logger.success(`Linked ${skillName} → ${absolutePath}`);
1369
+ logger_logger.success(`Linked ${skillName} → ${absolutePath}`);
1360
1370
  return {
1361
1371
  name: skillName,
1362
1372
  path: linkPath,
@@ -1368,15 +1378,15 @@ class SkillManager {
1368
1378
  unlink(name) {
1369
1379
  const skillPath = this.getSkillPath(name);
1370
1380
  if (!exists(skillPath)) {
1371
- logger.warn(`Skill ${name} is not installed`);
1381
+ logger_logger.warn(`Skill ${name} is not installed`);
1372
1382
  return false;
1373
1383
  }
1374
1384
  if (!isSymlink(skillPath)) {
1375
- logger.warn(`Skill ${name} is not a linked skill`);
1385
+ logger_logger.warn(`Skill ${name} is not a linked skill`);
1376
1386
  return false;
1377
1387
  }
1378
1388
  remove(skillPath);
1379
- logger.success(`Unlinked ${name}`);
1389
+ logger_logger.success(`Unlinked ${name}`);
1380
1390
  return true;
1381
1391
  }
1382
1392
  list() {
@@ -1446,7 +1456,8 @@ class SkillManager {
1446
1456
  const skills = this.config.getSkills();
1447
1457
  for (const [name, ref] of Object.entries(skills))try {
1448
1458
  const locked = this.lockManager.get(name);
1449
- const current = locked?.version || 'unknown';
1459
+ const currentRef = locked?.ref || locked?.version || 'unknown';
1460
+ const currentVersion = locked?.version || 'unknown';
1450
1461
  const parsed = this.resolver.parseRef(ref);
1451
1462
  const repoUrl = this.resolver.buildRepoUrl(parsed);
1452
1463
  const latestResolved = await this.resolver.resolveVersion(repoUrl, {
@@ -1455,15 +1466,15 @@ class SkillManager {
1455
1466
  raw: 'latest'
1456
1467
  });
1457
1468
  const latest = latestResolved.ref;
1458
- const updateAvailable = current !== latest && 'unknown' !== current;
1469
+ const updateAvailable = currentRef !== latest && 'unknown' !== currentRef;
1459
1470
  results.push({
1460
1471
  name,
1461
- current,
1472
+ current: currentVersion !== currentRef ? `${currentVersion} (${currentRef})` : currentRef,
1462
1473
  latest,
1463
1474
  updateAvailable
1464
1475
  });
1465
1476
  } catch (error) {
1466
- logger.debug(`Failed to check ${name}: ${error.message}`);
1477
+ logger_logger.debug(`Failed to check ${name}: ${error.message}`);
1467
1478
  results.push({
1468
1479
  name,
1469
1480
  current: 'unknown',
@@ -1477,16 +1488,22 @@ class SkillManager {
1477
1488
  const { save = true, mode = 'symlink' } = options;
1478
1489
  const resolved = await this.resolver.resolve(ref);
1479
1490
  const { parsed, repoUrl } = resolved;
1480
- const version = resolved.ref;
1491
+ const gitRef = resolved.ref;
1481
1492
  const skillName = parsed.subPath ? __WEBPACK_EXTERNAL_MODULE_node_path__.basename(parsed.subPath) : parsed.repo;
1482
- logger["package"](`Installing ${skillName}@${version} to ${targetAgents.length} agent(s)...`);
1483
- let cacheResult = await this.cache.get(parsed, version);
1484
- if (cacheResult) logger.debug(`Using cached ${skillName}@${version}`);
1493
+ logger_logger["package"](`Installing ${skillName}@${gitRef} to ${targetAgents.length} agent(s)...`);
1494
+ let cacheResult = await this.cache.get(parsed, gitRef);
1495
+ if (cacheResult) logger_logger.debug(`Using cached ${skillName}@${gitRef}`);
1485
1496
  else {
1486
- logger.debug(`Caching ${skillName}@${version} from ${repoUrl}`);
1487
- cacheResult = await this.cache.cache(repoUrl, parsed, version, version);
1497
+ logger_logger.debug(`Caching ${skillName}@${gitRef} from ${repoUrl}`);
1498
+ cacheResult = await this.cache.cache(repoUrl, parsed, gitRef, gitRef);
1488
1499
  }
1489
- const sourcePath = this.cache.getCachePath(parsed, version);
1500
+ const sourcePath = this.cache.getCachePath(parsed, gitRef);
1501
+ let semanticVersion = gitRef;
1502
+ const skillJsonPath = __WEBPACK_EXTERNAL_MODULE_node_path__.join(sourcePath, 'skill.json');
1503
+ if (exists(skillJsonPath)) try {
1504
+ const skillJson = readJson(skillJsonPath);
1505
+ if (skillJson.version) semanticVersion = skillJson.version;
1506
+ } catch {}
1490
1507
  const installer = new Installer({
1491
1508
  cwd: this.projectRoot,
1492
1509
  global: this.isGlobal
@@ -1496,7 +1513,8 @@ class SkillManager {
1496
1513
  });
1497
1514
  if (!this.isGlobal) this.lockManager.lockSkill(skillName, {
1498
1515
  source: `${parsed.registry}:${parsed.owner}/${parsed.repo}${parsed.subPath ? `/${parsed.subPath}` : ''}`,
1499
- version,
1516
+ version: semanticVersion,
1517
+ ref: gitRef,
1500
1518
  resolved: repoUrl,
1501
1519
  commit: cacheResult.commit
1502
1520
  });
@@ -1506,12 +1524,13 @@ class SkillManager {
1506
1524
  }
1507
1525
  const successCount = Array.from(results.values()).filter((r)=>r.success).length;
1508
1526
  const failCount = results.size - successCount;
1509
- if (0 === failCount) logger.success(`Installed ${skillName}@${version} to ${successCount} agent(s)`);
1510
- else logger.warn(`Installed ${skillName}@${version} to ${successCount} agent(s), ${failCount} failed`);
1527
+ const displayVersion = semanticVersion !== gitRef ? `${semanticVersion} (${gitRef})` : gitRef;
1528
+ if (0 === failCount) logger_logger.success(`Installed ${skillName}@${displayVersion} to ${successCount} agent(s)`);
1529
+ else logger_logger.warn(`Installed ${skillName}@${displayVersion} to ${successCount} agent(s), ${failCount} failed`);
1511
1530
  const skill = {
1512
1531
  name: skillName,
1513
1532
  path: sourcePath,
1514
- version,
1533
+ version: semanticVersion,
1515
1534
  source: `${parsed.registry}:${parsed.owner}/${parsed.repo}${parsed.subPath ? `/${parsed.subPath}` : ''}`
1516
1535
  };
1517
1536
  return {
@@ -1551,7 +1570,7 @@ class SkillManager {
1551
1570
  if (!this.isGlobal) this.lockManager.remove(name);
1552
1571
  if (!this.isGlobal && this.config.exists()) this.config.removeSkill(name);
1553
1572
  const successCount = Array.from(results.values()).filter((r)=>r).length;
1554
- logger.success(`Uninstalled ${name} from ${successCount} agent(s)`);
1573
+ logger_logger.success(`Uninstalled ${name} from ${successCount} agent(s)`);
1555
1574
  return results;
1556
1575
  }
1557
1576
  }
@@ -1698,4 +1717,4 @@ function generateSkillMd(skill) {
1698
1717
  frontmatter.push('');
1699
1718
  return frontmatter.join('\n') + skill.content;
1700
1719
  }
1701
- export { CacheManager, ConfigLoader, DEFAULT_REGISTRIES, GitResolver, Installer, LockManager, SkillManager, SkillValidationError, agents, detectInstalledAgents, generateSkillMd, getAgentConfig, getAgentSkillsDir, getAllAgentTypes, getCanonicalSkillPath, getCanonicalSkillsDir, hasValidSkillMd, isPathSafe, isValidAgentType, logger, parseSkillFromDir, parseSkillMd, parseSkillMdFile, sanitizeName, shortenPath, validateSkillDescription, validateSkillName };
1720
+ export { CacheManager, ConfigLoader, DEFAULT_REGISTRIES, GitResolver, Installer, LockManager, SkillManager, SkillValidationError, agents, detectInstalledAgents, generateSkillMd, getAgentConfig, getAgentSkillsDir, getAllAgentTypes, getCanonicalSkillPath, getCanonicalSkillsDir, hasValidSkillMd, isPathSafe, isValidAgentType, logger_logger as logger, parseSkillFromDir, parseSkillMd, parseSkillMdFile, sanitizeName, shortenPath, validateSkillDescription, validateSkillName };
@@ -85,8 +85,10 @@ export interface SkillsJson {
85
85
  export interface LockedSkill {
86
86
  /** Source, e.g., github:user/repo */
87
87
  source: string;
88
- /** Version number */
88
+ /** Semantic version from skill.json */
89
89
  version: string;
90
+ /** Git reference (tag, branch, commit) used for installation */
91
+ ref: string;
90
92
  /** Resolved full URL */
91
93
  resolved: string;
92
94
  /** Exact commit hash */
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  export * from './fs.js';
2
2
  export * from './git.js';
3
3
  export { logger } from './logger.js';
4
+ export * from './update-notifier.js';
4
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,cAAc,sBAAsB,CAAC"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Update Notifier - Check for CLI updates from npm registry
3
+ *
4
+ * Provides non-blocking update notifications to users when a newer version is available.
5
+ */
6
+ /**
7
+ * Update check result
8
+ */
9
+ export interface UpdateCheckResult {
10
+ /** Current installed version */
11
+ current: string;
12
+ /** Latest version on npm */
13
+ latest: string;
14
+ /** Whether an update is available */
15
+ hasUpdate: boolean;
16
+ }
17
+ /**
18
+ * Options for update check
19
+ */
20
+ export interface CheckOptions {
21
+ /** Timeout in milliseconds (default: 3000) */
22
+ timeout?: number;
23
+ }
24
+ /**
25
+ * Check for updates from npm registry
26
+ *
27
+ * @param packageName - Name of the package to check
28
+ * @param currentVersion - Current installed version
29
+ * @param options - Check options
30
+ * @returns Update check result, or null if check failed
31
+ */
32
+ export declare function checkForUpdate(packageName: string, currentVersion: string, options?: CheckOptions): Promise<UpdateCheckResult | null>;
33
+ /**
34
+ * Format update message for display
35
+ *
36
+ * @param result - Update check result
37
+ * @returns Formatted message string, or empty string if no update
38
+ */
39
+ export declare function formatUpdateMessage(result: UpdateCheckResult): string;
40
+ /**
41
+ * Check for updates and notify user if available
42
+ *
43
+ * This function is designed to be non-blocking and silent on errors.
44
+ *
45
+ * @param packageName - Name of the package to check
46
+ * @param currentVersion - Current installed version
47
+ */
48
+ export declare function notifyUpdate(packageName: string, currentVersion: string): Promise<void>;
49
+ //# sourceMappingURL=update-notifier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-notifier.d.ts","sourceRoot":"","sources":["../../src/utils/update-notifier.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,gCAAgC;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,4BAA4B;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,qCAAqC;IACrC,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,8CAA8C;IAC9C,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;GAOG;AACH,wBAAsB,cAAc,CAClC,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,MAAM,EACtB,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAmCnC;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAarE;AAED;;;;;;;GAOG;AACH,wBAAsB,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAW7F"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "reskill",
3
- "version": "0.14.0",
3
+ "version": "0.15.0",
4
4
  "description": "AI Skills Package Manager - Git-based skills management for AI agents",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",