reskill 1.18.1 → 1.20.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 +47 -30
- package/README.zh-CN.md +47 -30
- package/dist/cli/commands/group.d.ts.map +1 -1
- package/dist/cli/commands/install.d.ts.map +1 -1
- package/dist/cli/index.js +80 -28
- package/dist/core/config-loader.d.ts +8 -0
- package/dist/core/config-loader.d.ts.map +1 -1
- package/dist/core/lock-manager.d.ts +8 -0
- package/dist/core/lock-manager.d.ts.map +1 -1
- package/dist/core/skill-manager.d.ts +7 -0
- package/dist/core/skill-manager.d.ts.map +1 -1
- package/dist/index.js +42 -2
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -65,22 +65,27 @@ npx reskill@latest <command> # Or use npx directly
|
|
|
65
65
|
|
|
66
66
|
### Common Options
|
|
67
67
|
|
|
68
|
-
| Option | Commands
|
|
69
|
-
| ------------------------- |
|
|
70
|
-
| `--no-save` | `install`
|
|
71
|
-
| `-g, --global` | `install`, `uninstall`, `list`
|
|
72
|
-
| `-a, --agent <agents...>` | `install`
|
|
73
|
-
| `--mode <mode>` | `install`
|
|
74
|
-
| `--all` | `install`
|
|
75
|
-
| `-y, --yes` | `install`, `uninstall`, `publish`
|
|
76
|
-
| `-f, --force` | `install`
|
|
77
|
-
| `-s, --skill <names...>` | `install`
|
|
78
|
-
| `--list` | `install`
|
|
79
|
-
|
|
|
80
|
-
| `-
|
|
81
|
-
| `-
|
|
82
|
-
|
|
|
83
|
-
| `--
|
|
68
|
+
| Option | Commands | Description |
|
|
69
|
+
| ------------------------- | ------------------------------------------------------------- | ------------------------------------------------------------- |
|
|
70
|
+
| `--no-save` | `install` | Install without saving to `skills.json` (for personal skills) |
|
|
71
|
+
| `-g, --global` | `install`, `uninstall`, `list` | Install/manage skills globally (user directory) |
|
|
72
|
+
| `-a, --agent <agents...>` | `install` | Specify target agents (e.g., `cursor`, `claude-code`) |
|
|
73
|
+
| `--mode <mode>` | `install` | Installation mode: `symlink` (default) or `copy` |
|
|
74
|
+
| `--all` | `install` | Install to all agents |
|
|
75
|
+
| `-y, --yes` | `install`, `uninstall`, `publish` | Skip confirmation prompts |
|
|
76
|
+
| `-f, --force` | `install` | Force reinstall even if already installed |
|
|
77
|
+
| `-s, --skill <names...>` | `install` | Select specific skill(s) by name from a multi-skill repo |
|
|
78
|
+
| `--list` | `install` | List available skills in the repository without installing |
|
|
79
|
+
| `--skip-manifest` | `install` | Skip all `skills.json` and `skills.lock` writes (for platform integration) |
|
|
80
|
+
| `-t, --token <token>` | `install`, `find`, `group`, `publish`, `login` | Auth token for registry API requests (for CI/CD) |
|
|
81
|
+
| `-r, --registry <url>` | `install`, `find`, `group`, `publish`, `login`, `logout`, `whoami` | Registry URL override for registry-enabled commands |
|
|
82
|
+
| `--tag <tag>` | `publish` | Git tag to publish |
|
|
83
|
+
| `--access <level>` | `publish` | Access level: `public` (default) or `restricted` |
|
|
84
|
+
| `-n, --dry-run` | `publish` | Validate without publishing |
|
|
85
|
+
| `-g, --group <path>` | `publish` | Publish skill into a group (e.g., `kanyun/frontend`) |
|
|
86
|
+
| `-j, --json` | `list`, `info`, `outdated`, `doctor`, `group`, `find` | Output as JSON |
|
|
87
|
+
| `-l, --limit <n>` | `find` | Maximum number of search results |
|
|
88
|
+
| `--skip-network` | `doctor` | Skip network connectivity checks |
|
|
84
89
|
|
|
85
90
|
Run `reskill <command> --help` for complete options and detailed usage.
|
|
86
91
|
|
|
@@ -222,14 +227,25 @@ git config --global url."https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.company.
|
|
|
222
227
|
|
|
223
228
|
Skills are installed to `.skills/` by default and can be integrated with any agent:
|
|
224
229
|
|
|
225
|
-
| Agent | Path
|
|
226
|
-
| -------------- |
|
|
227
|
-
|
|
|
228
|
-
|
|
|
229
|
-
|
|
|
230
|
-
|
|
|
231
|
-
|
|
|
232
|
-
|
|
|
230
|
+
| Agent | Path |
|
|
231
|
+
| -------------- | ------------------ |
|
|
232
|
+
| Amp | `.agents/skills` |
|
|
233
|
+
| Antigravity | `.agent/skills` |
|
|
234
|
+
| Claude Code | `.claude/skills` |
|
|
235
|
+
| Clawdbot | `skills` |
|
|
236
|
+
| Codex | `.codex/skills` |
|
|
237
|
+
| Cursor | `.cursor/skills` |
|
|
238
|
+
| Droid | `.factory/skills` |
|
|
239
|
+
| Gemini CLI | `.gemini/skills` |
|
|
240
|
+
| GitHub Copilot | `.github/skills` |
|
|
241
|
+
| Goose | `.goose/skills` |
|
|
242
|
+
| Kilo Code | `.kilocode/skills` |
|
|
243
|
+
| Kiro CLI | `.kiro/skills` |
|
|
244
|
+
| Neovate | `.neovate/skills` |
|
|
245
|
+
| OpenCode | `.opencode/skills` |
|
|
246
|
+
| Roo Code | `.roo/skills` |
|
|
247
|
+
| Trae | `.trae/skills` |
|
|
248
|
+
| Windsurf | `.windsurf/skills` |
|
|
233
249
|
|
|
234
250
|
## Publishing Skills
|
|
235
251
|
|
|
@@ -282,12 +298,13 @@ reskill install @scope/private-skill --registry https://your-registry.com --toke
|
|
|
282
298
|
|
|
283
299
|
| Variable | Description | Default |
|
|
284
300
|
| ------------------- | ----------------------------------------------- | ------------------------------ |
|
|
285
|
-
| `RESKILL_CACHE_DIR`
|
|
286
|
-
| `RESKILL_TOKEN`
|
|
287
|
-
| `RESKILL_REGISTRY`
|
|
288
|
-
| `
|
|
289
|
-
| `
|
|
290
|
-
| `
|
|
301
|
+
| `RESKILL_CACHE_DIR` | Global cache directory | `~/.reskill-cache` |
|
|
302
|
+
| `RESKILL_TOKEN` | Auth token (takes precedence over ~/.reskillrc) | - |
|
|
303
|
+
| `RESKILL_REGISTRY` | Default registry URL | `https://registry.reskill.dev` |
|
|
304
|
+
| `RESKILL_NO_MANIFEST` | Skip `skills.json` and `skills.lock` writes (set to `1` to enable) | - |
|
|
305
|
+
| `DEBUG` | Enable debug logging | - |
|
|
306
|
+
| `VERBOSE` | Enable debug logging (same effect as `DEBUG`) | - |
|
|
307
|
+
| `NO_COLOR` | Disable colored output | - |
|
|
291
308
|
|
|
292
309
|
reskill checks for newer versions in the background and shows an upgrade tip after command execution.
|
|
293
310
|
|
package/README.zh-CN.md
CHANGED
|
@@ -65,22 +65,27 @@ npx reskill@latest <command> # 或直接使用 npx
|
|
|
65
65
|
|
|
66
66
|
### 常用选项
|
|
67
67
|
|
|
68
|
-
| 选项 | 适用命令
|
|
69
|
-
| ------------------------- |
|
|
70
|
-
| `--no-save` | `install`
|
|
71
|
-
| `-g, --global` | `install`, `uninstall`, `list`
|
|
72
|
-
| `-a, --agent <agents...>` | `install`
|
|
73
|
-
| `--mode <mode>` | `install`
|
|
74
|
-
| `--all` | `install`
|
|
75
|
-
| `-y, --yes` | `install`, `uninstall`, `publish`
|
|
76
|
-
| `-f, --force` | `install`
|
|
77
|
-
| `-s, --skill <names...>` | `install`
|
|
78
|
-
| `--list` | `install`
|
|
79
|
-
|
|
|
80
|
-
| `-
|
|
81
|
-
| `-
|
|
82
|
-
|
|
|
83
|
-
| `--
|
|
68
|
+
| 选项 | 适用命令 | 说明 |
|
|
69
|
+
| ------------------------- | ------------------------------------------------------------- | -------------------------------------------- |
|
|
70
|
+
| `--no-save` | `install` | 安装时不保存到 `skills.json`(用于个人技能) |
|
|
71
|
+
| `-g, --global` | `install`, `uninstall`, `list` | 全局安装/管理技能(用户目录) |
|
|
72
|
+
| `-a, --agent <agents...>` | `install` | 指定目标 Agent(如 `cursor`, `claude-code`) |
|
|
73
|
+
| `--mode <mode>` | `install` | 安装模式:`symlink`(默认)或 `copy` |
|
|
74
|
+
| `--all` | `install` | 安装到所有 Agent |
|
|
75
|
+
| `-y, --yes` | `install`, `uninstall`, `publish` | 跳过确认提示 |
|
|
76
|
+
| `-f, --force` | `install` | 强制重新安装 |
|
|
77
|
+
| `-s, --skill <names...>` | `install` | 从多 skill 仓库中选择指定 skill |
|
|
78
|
+
| `--list` | `install` | 列出仓库中可用的 skills(不安装) |
|
|
79
|
+
| `--skip-manifest` | `install` | 跳过 `skills.json` 和 `skills.lock` 写入(用于平台集成) |
|
|
80
|
+
| `-t, --token <token>` | `install`, `find`, `group`, `publish`, `login` | 认证令牌(用于 CI/CD 访问私有 skill) |
|
|
81
|
+
| `-r, --registry <url>` | `install`, `find`, `group`, `publish`, `login`, `logout`, `whoami` | 覆盖 registry URL(用于 registry 相关命令) |
|
|
82
|
+
| `--tag <tag>` | `publish` | 发布的 Git tag |
|
|
83
|
+
| `--access <level>` | `publish` | 访问级别:`public`(默认)或 `restricted` |
|
|
84
|
+
| `-n, --dry-run` | `publish` | 仅验证不发布 |
|
|
85
|
+
| `-g, --group <path>` | `publish` | 发布到指定分组(如 `kanyun/frontend`) |
|
|
86
|
+
| `-j, --json` | `list`, `info`, `outdated`, `doctor`, `group`, `find` | JSON 格式输出 |
|
|
87
|
+
| `-l, --limit <n>` | `find` | 限制搜索结果数量 |
|
|
88
|
+
| `--skip-network` | `doctor` | 跳过网络连通性检查 |
|
|
84
89
|
|
|
85
90
|
运行 `reskill <command> --help` 查看完整选项和详细用法。
|
|
86
91
|
|
|
@@ -222,14 +227,25 @@ git config --global url."https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.company.
|
|
|
222
227
|
|
|
223
228
|
Skills 默认安装到 `.skills/`,可与任何 Agent 集成:
|
|
224
229
|
|
|
225
|
-
| Agent | 路径
|
|
226
|
-
| -------------- |
|
|
227
|
-
|
|
|
228
|
-
|
|
|
229
|
-
|
|
|
230
|
-
|
|
|
231
|
-
|
|
|
232
|
-
|
|
|
230
|
+
| Agent | 路径 |
|
|
231
|
+
| -------------- | ------------------ |
|
|
232
|
+
| Amp | `.agents/skills` |
|
|
233
|
+
| Antigravity | `.agent/skills` |
|
|
234
|
+
| Claude Code | `.claude/skills` |
|
|
235
|
+
| Clawdbot | `skills` |
|
|
236
|
+
| Codex | `.codex/skills` |
|
|
237
|
+
| Cursor | `.cursor/skills` |
|
|
238
|
+
| Droid | `.factory/skills` |
|
|
239
|
+
| Gemini CLI | `.gemini/skills` |
|
|
240
|
+
| GitHub Copilot | `.github/skills` |
|
|
241
|
+
| Goose | `.goose/skills` |
|
|
242
|
+
| Kilo Code | `.kilocode/skills` |
|
|
243
|
+
| Kiro CLI | `.kiro/skills` |
|
|
244
|
+
| Neovate | `.neovate/skills` |
|
|
245
|
+
| OpenCode | `.opencode/skills` |
|
|
246
|
+
| Roo Code | `.roo/skills` |
|
|
247
|
+
| Trae | `.trae/skills` |
|
|
248
|
+
| Windsurf | `.windsurf/skills` |
|
|
233
249
|
|
|
234
250
|
## 发布 Skills
|
|
235
251
|
|
|
@@ -282,12 +298,13 @@ reskill install @scope/private-skill --registry https://your-registry.com --toke
|
|
|
282
298
|
|
|
283
299
|
| 变量 | 说明 | 默认值 |
|
|
284
300
|
| ------------------- | ------------------------------- | ------------------------------ |
|
|
285
|
-
| `RESKILL_CACHE_DIR`
|
|
286
|
-
| `RESKILL_TOKEN`
|
|
287
|
-
| `RESKILL_REGISTRY`
|
|
288
|
-
| `
|
|
289
|
-
| `
|
|
290
|
-
| `
|
|
301
|
+
| `RESKILL_CACHE_DIR` | 全局缓存目录 | `~/.reskill-cache` |
|
|
302
|
+
| `RESKILL_TOKEN` | 认证令牌(优先于 ~/.reskillrc) | - |
|
|
303
|
+
| `RESKILL_REGISTRY` | 默认 registry URL | `https://registry.reskill.dev` |
|
|
304
|
+
| `RESKILL_NO_MANIFEST` | 跳过 `skills.json` 和 `skills.lock` 写入(设为 `1` 启用) | - |
|
|
305
|
+
| `DEBUG` | 启用调试日志 | - |
|
|
306
|
+
| `VERBOSE` | 启用调试日志(与 `DEBUG` 等效) | - |
|
|
307
|
+
| `NO_COLOR` | 禁用彩色输出 | - |
|
|
291
308
|
|
|
292
309
|
reskill 会在后台检查新版本,并在命令执行后提示升级信息。
|
|
293
310
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"group.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/group.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"group.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/group.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0fpC,eAAO,MAAM,YAAY,SAA0D,CAAC;AAyCpF,eAAe,YAAY,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/install.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/install.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAq6BpC;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,cAAc,SAuHvB,CAAC;AAEL,eAAe,cAAc,CAAC"}
|
package/dist/cli/index.js
CHANGED
|
@@ -2132,6 +2132,20 @@ ${CURSOR_BRIDGE_MARKER}
|
|
|
2132
2132
|
return __WEBPACK_EXTERNAL_MODULE_node_path__.join(this.projectRoot, installDir);
|
|
2133
2133
|
}
|
|
2134
2134
|
// ==========================================================================
|
|
2135
|
+
// No-Manifest Mode (platform integration)
|
|
2136
|
+
// ==========================================================================
|
|
2137
|
+
_noManifest = false;
|
|
2138
|
+
/**
|
|
2139
|
+
* Enable/disable no-manifest mode.
|
|
2140
|
+
* When enabled, all write operations (save, create, addSkill, updateDefaults,
|
|
2141
|
+
* addRegistry) become no-ops. Read operations are unaffected.
|
|
2142
|
+
*/ setNoManifest(enabled) {
|
|
2143
|
+
this._noManifest = enabled;
|
|
2144
|
+
}
|
|
2145
|
+
get noManifest() {
|
|
2146
|
+
return this._noManifest;
|
|
2147
|
+
}
|
|
2148
|
+
// ==========================================================================
|
|
2135
2149
|
// File Operations
|
|
2136
2150
|
// ==========================================================================
|
|
2137
2151
|
/**
|
|
@@ -2167,7 +2181,7 @@ ${CURSOR_BRIDGE_MARKER}
|
|
|
2167
2181
|
*/ save(config) {
|
|
2168
2182
|
const toSave = config ?? this.config;
|
|
2169
2183
|
if (!toSave) throw new Error('No config to save');
|
|
2170
|
-
writeJson(this.configPath, toSave);
|
|
2184
|
+
if (!this._noManifest) writeJson(this.configPath, toSave);
|
|
2171
2185
|
this.config = toSave;
|
|
2172
2186
|
}
|
|
2173
2187
|
/**
|
|
@@ -2175,6 +2189,7 @@ ${CURSOR_BRIDGE_MARKER}
|
|
|
2175
2189
|
*
|
|
2176
2190
|
* @returns true if file was created, false if it already existed
|
|
2177
2191
|
*/ ensureExists() {
|
|
2192
|
+
if (this._noManifest) return false;
|
|
2178
2193
|
if (this.exists()) return false;
|
|
2179
2194
|
this.create();
|
|
2180
2195
|
return true;
|
|
@@ -2237,6 +2252,7 @@ ${CURSOR_BRIDGE_MARKER}
|
|
|
2237
2252
|
*
|
|
2238
2253
|
* @param updates - Partial defaults to merge
|
|
2239
2254
|
*/ updateDefaults(updates) {
|
|
2255
|
+
if (this._noManifest) return;
|
|
2240
2256
|
this.ensureConfigLoaded();
|
|
2241
2257
|
if (this.config) {
|
|
2242
2258
|
this.config.defaults = {
|
|
@@ -2372,6 +2388,7 @@ ${CURSOR_BRIDGE_MARKER}
|
|
|
2372
2388
|
*
|
|
2373
2389
|
* Also auto-adds the registry to the registries field if it's a well-known registry.
|
|
2374
2390
|
*/ addSkill(name, ref) {
|
|
2391
|
+
if (this._noManifest) return;
|
|
2375
2392
|
this.ensureConfigLoaded();
|
|
2376
2393
|
if (this.config) {
|
|
2377
2394
|
this.config.skills[name] = ref;
|
|
@@ -2392,6 +2409,7 @@ ${CURSOR_BRIDGE_MARKER}
|
|
|
2392
2409
|
* @param name - Registry name (e.g., 'github', 'gitlab', 'internal')
|
|
2393
2410
|
* @param url - Registry URL (e.g., 'https://github.com')
|
|
2394
2411
|
*/ addRegistry(name, url) {
|
|
2412
|
+
if (this._noManifest) return;
|
|
2395
2413
|
if (!this.config) // Config not loaded - this is expected when called before load()/create()
|
|
2396
2414
|
// Callers like addSkill() ensure config is loaded before calling this
|
|
2397
2415
|
return;
|
|
@@ -2425,6 +2443,7 @@ ${CURSOR_BRIDGE_MARKER}
|
|
|
2425
2443
|
*
|
|
2426
2444
|
* @returns true if skill was removed, false if it didn't exist
|
|
2427
2445
|
*/ removeSkill(name) {
|
|
2446
|
+
if (this._noManifest) return false;
|
|
2428
2447
|
this.ensureConfigLoaded();
|
|
2429
2448
|
if (this.config?.skills[name]) {
|
|
2430
2449
|
delete this.config.skills[name];
|
|
@@ -3018,11 +3037,22 @@ ${CURSOR_BRIDGE_MARKER}
|
|
|
3018
3037
|
projectRoot;
|
|
3019
3038
|
lockPath;
|
|
3020
3039
|
lockData = null;
|
|
3040
|
+
_noManifest = false;
|
|
3021
3041
|
constructor(projectRoot){
|
|
3022
3042
|
this.projectRoot = projectRoot || process.cwd();
|
|
3023
3043
|
this.lockPath = getSkillsLockPath(this.projectRoot);
|
|
3024
3044
|
}
|
|
3025
3045
|
/**
|
|
3046
|
+
* Enable/disable no-manifest mode.
|
|
3047
|
+
* When enabled, disk write operations (save, set, remove) become no-ops.
|
|
3048
|
+
* lockSkill() still returns a LockedSkill but does not persist it.
|
|
3049
|
+
*/ setNoManifest(enabled) {
|
|
3050
|
+
this._noManifest = enabled;
|
|
3051
|
+
}
|
|
3052
|
+
get noManifest() {
|
|
3053
|
+
return this._noManifest;
|
|
3054
|
+
}
|
|
3055
|
+
/**
|
|
3026
3056
|
* Get lock file path
|
|
3027
3057
|
*/ getLockPath() {
|
|
3028
3058
|
return this.lockPath;
|
|
@@ -3060,6 +3090,7 @@ ${CURSOR_BRIDGE_MARKER}
|
|
|
3060
3090
|
/**
|
|
3061
3091
|
* Save lock file
|
|
3062
3092
|
*/ save(lockToSave) {
|
|
3093
|
+
if (this._noManifest) return;
|
|
3063
3094
|
const toSave = lockToSave || this.lockData;
|
|
3064
3095
|
if (!toSave) throw new Error('No lock to save');
|
|
3065
3096
|
writeJson(this.lockPath, toSave);
|
|
@@ -3076,11 +3107,12 @@ ${CURSOR_BRIDGE_MARKER}
|
|
|
3076
3107
|
*/ set(name, skill) {
|
|
3077
3108
|
const lock = this.load();
|
|
3078
3109
|
lock.skills[name] = skill;
|
|
3079
|
-
this.save();
|
|
3110
|
+
if (!this._noManifest) this.save();
|
|
3080
3111
|
}
|
|
3081
3112
|
/**
|
|
3082
3113
|
* Remove locked skill
|
|
3083
3114
|
*/ remove(name) {
|
|
3115
|
+
if (this._noManifest) return false;
|
|
3084
3116
|
const lock = this.load();
|
|
3085
3117
|
if (lock.skills[name]) {
|
|
3086
3118
|
delete lock.skills[name];
|
|
@@ -3966,6 +3998,14 @@ class RegistryResolver {
|
|
|
3966
3998
|
this.resolver = new GitResolver('github', void 0, (registryName)=>this.config.getRegistryUrl(registryName));
|
|
3967
3999
|
this.httpResolver = new HttpResolver();
|
|
3968
4000
|
this.registryResolver = new RegistryResolver();
|
|
4001
|
+
if (options?.noManifest ?? '1' === process.env.RESKILL_NO_MANIFEST) this.setNoManifest(true);
|
|
4002
|
+
}
|
|
4003
|
+
/**
|
|
4004
|
+
* Enable/disable no-manifest mode on both ConfigLoader and LockManager.
|
|
4005
|
+
* When enabled, no skills.json or skills.lock writes occur.
|
|
4006
|
+
*/ setNoManifest(enabled) {
|
|
4007
|
+
this.config.setNoManifest(enabled);
|
|
4008
|
+
this.lockManager.setNoManifest(enabled);
|
|
3969
4009
|
}
|
|
3970
4010
|
/**
|
|
3971
4011
|
* Check if in global mode
|
|
@@ -6717,13 +6757,18 @@ function assertValidGroupPath(path) {
|
|
|
6717
6757
|
// ============================================================================
|
|
6718
6758
|
// Client Factory
|
|
6719
6759
|
// ============================================================================
|
|
6720
|
-
function createClient(registry) {
|
|
6760
|
+
function createClient(registry, cliToken) {
|
|
6761
|
+
// --token flag takes highest priority
|
|
6762
|
+
if (cliToken) return new RegistryClient({
|
|
6763
|
+
registry,
|
|
6764
|
+
token: cliToken
|
|
6765
|
+
});
|
|
6721
6766
|
const authManager = new AuthManager();
|
|
6722
6767
|
const token = authManager.getToken(registry);
|
|
6723
6768
|
if (!token) {
|
|
6724
6769
|
logger_logger.error('Authentication required');
|
|
6725
6770
|
logger_logger.newline();
|
|
6726
|
-
logger_logger.log("Run 'reskill login' to authenticate
|
|
6771
|
+
logger_logger.log("Run 'reskill login' to authenticate, or pass --token <token>.");
|
|
6727
6772
|
process.exit(1);
|
|
6728
6773
|
}
|
|
6729
6774
|
return new RegistryClient({
|
|
@@ -6821,7 +6866,7 @@ function displayMemberList(members, groupPath, json) {
|
|
|
6821
6866
|
// ============================================================================
|
|
6822
6867
|
async function listAction(options) {
|
|
6823
6868
|
const registry = resolveRegistry(options.registry);
|
|
6824
|
-
const client = createClient(registry);
|
|
6869
|
+
const client = createClient(registry, options.token);
|
|
6825
6870
|
try {
|
|
6826
6871
|
const groups = await client.listGroups({
|
|
6827
6872
|
flat: Boolean(options.tree)
|
|
@@ -6848,7 +6893,7 @@ async function createAction(name, options) {
|
|
|
6848
6893
|
if (options.parent) {
|
|
6849
6894
|
const normalizedParent = normalizeGroupPath(options.parent);
|
|
6850
6895
|
assertValidGroupPath(normalizedParent);
|
|
6851
|
-
client = createClient(registry);
|
|
6896
|
+
client = createClient(registry, options.token);
|
|
6852
6897
|
try {
|
|
6853
6898
|
const parentGroup = await client.resolveGroup(normalizedParent);
|
|
6854
6899
|
parentId = parentGroup.id;
|
|
@@ -6859,7 +6904,7 @@ async function createAction(name, options) {
|
|
|
6859
6904
|
}
|
|
6860
6905
|
}
|
|
6861
6906
|
try {
|
|
6862
|
-
const ensuredClient = client ?? createClient(registry);
|
|
6907
|
+
const ensuredClient = client ?? createClient(registry, options.token);
|
|
6863
6908
|
const group = await ensuredClient.createGroup({
|
|
6864
6909
|
name,
|
|
6865
6910
|
slug,
|
|
@@ -6884,7 +6929,7 @@ async function infoAction(groupPath, options) {
|
|
|
6884
6929
|
const normalized = normalizeGroupPath(groupPath);
|
|
6885
6930
|
assertValidGroupPath(normalized);
|
|
6886
6931
|
const registry = resolveRegistry(options.registry);
|
|
6887
|
-
const client = createClient(registry);
|
|
6932
|
+
const client = createClient(registry, options.token);
|
|
6888
6933
|
try {
|
|
6889
6934
|
const detail = await client.resolveGroup(normalized);
|
|
6890
6935
|
displayGroupDetail(detail, options.json || false);
|
|
@@ -6900,7 +6945,7 @@ async function deleteAction(groupPath, options) {
|
|
|
6900
6945
|
const normalized = normalizeGroupPath(groupPath);
|
|
6901
6946
|
assertValidGroupPath(normalized);
|
|
6902
6947
|
const registry = resolveRegistry(options.registry);
|
|
6903
|
-
const client = createClient(registry);
|
|
6948
|
+
const client = createClient(registry, options.token);
|
|
6904
6949
|
try {
|
|
6905
6950
|
const detail = await client.resolveGroup(normalized);
|
|
6906
6951
|
if (options.dryRun) {
|
|
@@ -6945,7 +6990,7 @@ async function memberListAction(groupPath, options) {
|
|
|
6945
6990
|
const normalized = normalizeGroupPath(groupPath);
|
|
6946
6991
|
assertValidGroupPath(normalized);
|
|
6947
6992
|
const registry = resolveRegistry(options.registry);
|
|
6948
|
-
const client = createClient(registry);
|
|
6993
|
+
const client = createClient(registry, options.token);
|
|
6949
6994
|
try {
|
|
6950
6995
|
const detail = await client.resolveGroup(normalized);
|
|
6951
6996
|
const members = await client.listGroupMembers(detail.id);
|
|
@@ -6959,7 +7004,7 @@ async function memberAddAction(groupPath, userIds, options) {
|
|
|
6959
7004
|
const normalized = normalizeGroupPath(groupPath);
|
|
6960
7005
|
assertValidGroupPath(normalized);
|
|
6961
7006
|
const registry = resolveRegistry(options.registry);
|
|
6962
|
-
const client = createClient(registry);
|
|
7007
|
+
const client = createClient(registry, options.token);
|
|
6963
7008
|
const role = options.role || 'developer';
|
|
6964
7009
|
if (!validateRole(role)) {
|
|
6965
7010
|
logger_logger.error(`Invalid role "${role}". Must be one of: ${VALID_ROLES.join(', ')}`);
|
|
@@ -6978,7 +7023,7 @@ async function memberRemoveAction(groupPath, userId, options) {
|
|
|
6978
7023
|
const normalized = normalizeGroupPath(groupPath);
|
|
6979
7024
|
assertValidGroupPath(normalized);
|
|
6980
7025
|
const registry = resolveRegistry(options.registry);
|
|
6981
|
-
const client = createClient(registry);
|
|
7026
|
+
const client = createClient(registry, options.token);
|
|
6982
7027
|
try {
|
|
6983
7028
|
const detail = await client.resolveGroup(normalized);
|
|
6984
7029
|
await client.removeGroupMember(detail.id, userId);
|
|
@@ -6992,7 +7037,7 @@ async function memberRoleAction(groupPath, userId, role, options) {
|
|
|
6992
7037
|
const normalized = normalizeGroupPath(groupPath);
|
|
6993
7038
|
assertValidGroupPath(normalized);
|
|
6994
7039
|
const registry = resolveRegistry(options.registry);
|
|
6995
|
-
const client = createClient(registry);
|
|
7040
|
+
const client = createClient(registry, options.token);
|
|
6996
7041
|
if (!validateRole(role)) {
|
|
6997
7042
|
logger_logger.error(`Invalid role "${role}". Must be one of: ${VALID_ROLES.join(', ')}`);
|
|
6998
7043
|
process.exit(1);
|
|
@@ -7010,15 +7055,15 @@ async function memberRoleAction(groupPath, userId, role, options) {
|
|
|
7010
7055
|
// Command Definitions
|
|
7011
7056
|
// ============================================================================
|
|
7012
7057
|
const memberCommand = new __WEBPACK_EXTERNAL_MODULE_commander__.Command('member').description('Manage group members');
|
|
7013
|
-
memberCommand.command('list <path>').description('List members of a group').option('-r, --registry <url>', 'Registry URL').option('-j, --json', 'Output as JSON').action(memberListAction);
|
|
7014
|
-
memberCommand.command('add <path> <users...>').description('Add members to a group').option('-r, --registry <url>', 'Registry URL').option('--role <role>', 'Role to assign (owner|maintainer|developer)', 'developer').action(memberAddAction);
|
|
7015
|
-
memberCommand.command('remove <path> <user>').description('Remove a member from a group').option('-r, --registry <url>', 'Registry URL').action(memberRemoveAction);
|
|
7016
|
-
memberCommand.command('role <path> <user> <role>').description("Change a member's role").option('-r, --registry <url>', 'Registry URL').action(memberRoleAction);
|
|
7058
|
+
memberCommand.command('list <path>').description('List members of a group').option('-r, --registry <url>', 'Registry URL').option('-t, --token <token>', 'Auth token for registry API requests (for CI/CD)').option('-j, --json', 'Output as JSON').action(memberListAction);
|
|
7059
|
+
memberCommand.command('add <path> <users...>').description('Add members to a group').option('-r, --registry <url>', 'Registry URL').option('-t, --token <token>', 'Auth token for registry API requests (for CI/CD)').option('--role <role>', 'Role to assign (owner|maintainer|developer)', 'developer').action(memberAddAction);
|
|
7060
|
+
memberCommand.command('remove <path> <user>').description('Remove a member from a group').option('-r, --registry <url>', 'Registry URL').option('-t, --token <token>', 'Auth token for registry API requests (for CI/CD)').action(memberRemoveAction);
|
|
7061
|
+
memberCommand.command('role <path> <user> <role>').description("Change a member's role").option('-r, --registry <url>', 'Registry URL').option('-t, --token <token>', 'Auth token for registry API requests (for CI/CD)').action(memberRoleAction);
|
|
7017
7062
|
const groupCommand = new __WEBPACK_EXTERNAL_MODULE_commander__.Command('group').description('Manage skill groups');
|
|
7018
|
-
groupCommand.command('list').description('List visible groups').option('-r, --registry <url>', 'Registry URL').option('--tree', 'Render groups as a tree (requests flat group list)').option('-j, --json', 'Output as JSON').action(listAction);
|
|
7019
|
-
groupCommand.command('create <name>').description('Create a new group').option('-r, --registry <url>', 'Registry URL').option('-d, --description <text>', 'Group description').option('--visibility <level>', 'Visibility: public or private', 'public').option('--parent <path>', 'Parent group path (for sub groups)').option('-j, --json', 'Output as JSON').action(createAction);
|
|
7020
|
-
groupCommand.command('info <path>').description('Show group details').option('-r, --registry <url>', 'Registry URL').option('-j, --json', 'Output as JSON').action(infoAction);
|
|
7021
|
-
groupCommand.command('delete <path>').description('Delete a group').option('-r, --registry <url>', 'Registry URL').option('-n, --dry-run', 'Preview deletion without executing').option('-y, --yes', 'Skip confirmation').action(deleteAction);
|
|
7063
|
+
groupCommand.command('list').description('List visible groups').option('-r, --registry <url>', 'Registry URL').option('-t, --token <token>', 'Auth token for registry API requests (for CI/CD)').option('--tree', 'Render groups as a tree (requests flat group list)').option('-j, --json', 'Output as JSON').action(listAction);
|
|
7064
|
+
groupCommand.command('create <name>').description('Create a new group').option('-r, --registry <url>', 'Registry URL').option('-t, --token <token>', 'Auth token for registry API requests (for CI/CD)').option('-d, --description <text>', 'Group description').option('--visibility <level>', 'Visibility: public or private', 'public').option('--parent <path>', 'Parent group path (for sub groups)').option('-j, --json', 'Output as JSON').action(createAction);
|
|
7065
|
+
groupCommand.command('info <path>').description('Show group details').option('-r, --registry <url>', 'Registry URL').option('-t, --token <token>', 'Auth token for registry API requests (for CI/CD)').option('-j, --json', 'Output as JSON').action(infoAction);
|
|
7066
|
+
groupCommand.command('delete <path>').description('Delete a group').option('-r, --registry <url>', 'Registry URL').option('-t, --token <token>', 'Auth token for registry API requests (for CI/CD)').option('-n, --dry-run', 'Preview deletion without executing').option('-y, --yes', 'Skip confirmation').action(deleteAction);
|
|
7022
7067
|
groupCommand.addCommand(memberCommand);
|
|
7023
7068
|
/**
|
|
7024
7069
|
* info command - Show skill details
|
|
@@ -7162,7 +7207,8 @@ const DEFAULT_INSTALL_DIR = '.skills';
|
|
|
7162
7207
|
storedMode,
|
|
7163
7208
|
isReinstallAll: 0 === skills.length,
|
|
7164
7209
|
isBatchInstall: skills.length > 1,
|
|
7165
|
-
skipConfirm: options.yes ?? false
|
|
7210
|
+
skipConfirm: options.yes ?? false,
|
|
7211
|
+
skipManifest: options.skipManifest ?? false
|
|
7166
7212
|
};
|
|
7167
7213
|
}
|
|
7168
7214
|
// ============================================================================
|
|
@@ -7352,7 +7398,8 @@ const DEFAULT_INSTALL_DIR = '.skills';
|
|
|
7352
7398
|
// Execute installation (no confirmation for reinstall all)
|
|
7353
7399
|
spinner.start('Installing skills...');
|
|
7354
7400
|
const skillManager = new SkillManager(void 0, {
|
|
7355
|
-
global: false
|
|
7401
|
+
global: false,
|
|
7402
|
+
noManifest: ctx.skipManifest
|
|
7356
7403
|
});
|
|
7357
7404
|
let totalInstalled = 0;
|
|
7358
7405
|
let totalFailed = 0;
|
|
@@ -7387,7 +7434,8 @@ const DEFAULT_INSTALL_DIR = '.skills';
|
|
|
7387
7434
|
const skill = skills[0];
|
|
7388
7435
|
const cwd = process.cwd();
|
|
7389
7436
|
const skillManager = new SkillManager(void 0, {
|
|
7390
|
-
global: installGlobally
|
|
7437
|
+
global: installGlobally,
|
|
7438
|
+
noManifest: ctx.skipManifest
|
|
7391
7439
|
});
|
|
7392
7440
|
// Detect whether the ref points to a multi-skill directory
|
|
7393
7441
|
spinner.start('Resolving skill...');
|
|
@@ -7503,7 +7551,8 @@ const DEFAULT_INSTALL_DIR = '.skills';
|
|
|
7503
7551
|
* Multi-skill path: list or install selected skills from a single repo (--skill / --list)
|
|
7504
7552
|
*/ async function installMultiSkillFromRepo(ref, skillNames, listOnly, ctx, targetAgents, installGlobally, installMode, spinner) {
|
|
7505
7553
|
const skillManager = new SkillManager(void 0, {
|
|
7506
|
-
global: installGlobally
|
|
7554
|
+
global: installGlobally,
|
|
7555
|
+
noManifest: ctx.skipManifest
|
|
7507
7556
|
});
|
|
7508
7557
|
if (listOnly) {
|
|
7509
7558
|
spinner.start('Discovering skills...');
|
|
@@ -7596,7 +7645,8 @@ const DEFAULT_INSTALL_DIR = '.skills';
|
|
|
7596
7645
|
}
|
|
7597
7646
|
// Execute installation for all skills in parallel
|
|
7598
7647
|
const skillManager = new SkillManager(void 0, {
|
|
7599
|
-
global: installGlobally
|
|
7648
|
+
global: installGlobally,
|
|
7649
|
+
noManifest: ctx.skipManifest
|
|
7600
7650
|
});
|
|
7601
7651
|
const successfulSkills = [];
|
|
7602
7652
|
const failedSkills = [];
|
|
@@ -7735,7 +7785,7 @@ const DEFAULT_INSTALL_DIR = '.skills';
|
|
|
7735
7785
|
* Behavior:
|
|
7736
7786
|
* - Single skill install: Prompts for agents/mode (stored config as defaults)
|
|
7737
7787
|
* - Reinstall all (no args): Uses stored config directly, no confirmation
|
|
7738
|
-
*/ const installCommand = new __WEBPACK_EXTERNAL_MODULE_commander__.Command('install').alias('i').description('Install one or more skills, or all skills from skills.json').argument('[skills...]', 'Skill references (e.g., github:user/skill@v1.0.0 or git@github.com:user/repo.git)').option('-f, --force', 'Force reinstall even if already installed').option('-g, --global', 'Install globally to user home directory').option('--no-save', 'Do not save to skills.json').option('-a, --agent <agents...>', 'Specify target agents (e.g., cursor, claude-code)').option('--mode <mode>', 'Installation mode: symlink or copy').option('-y, --yes', 'Skip confirmation prompts').option('--all', 'Install to all agents (implies -y -g)').option('-s, --skill <names...>', 'Select specific skill(s) by name from a multi-skill repository').option('--list', 'List available skills in the repository without installing').option('-r, --registry <url>', 'Registry URL override for registry-based installs').option('-t, --token <token>', 'Auth token for registry API requests (for CI/CD)').action(async (skills, options)=>{
|
|
7788
|
+
*/ const installCommand = new __WEBPACK_EXTERNAL_MODULE_commander__.Command('install').alias('i').description('Install one or more skills, or all skills from skills.json').argument('[skills...]', 'Skill references (e.g., github:user/skill@v1.0.0 or git@github.com:user/repo.git)').option('-f, --force', 'Force reinstall even if already installed').option('-g, --global', 'Install globally to user home directory').option('--no-save', 'Do not save to skills.json').option('-a, --agent <agents...>', 'Specify target agents (e.g., cursor, claude-code)').option('--mode <mode>', 'Installation mode: symlink or copy').option('-y, --yes', 'Skip confirmation prompts').option('--all', 'Install to all agents (implies -y -g)').option('-s, --skill <names...>', 'Select specific skill(s) by name from a multi-skill repository').option('--list', 'List available skills in the repository without installing').option('-r, --registry <url>', 'Registry URL override for registry-based installs').option('-t, --token <token>', 'Auth token for registry API requests (for CI/CD)').option('--skip-manifest', 'Skip all skills.json and skills.lock writes (for platform integration)').action(async (skills, options)=>{
|
|
7739
7789
|
// Handle --all flag implications
|
|
7740
7790
|
if (options.all) {
|
|
7741
7791
|
options.yes = true;
|
|
@@ -7747,6 +7797,8 @@ const DEFAULT_INSTALL_DIR = '.skills';
|
|
|
7747
7797
|
const token = authManager.getToken(options.registry);
|
|
7748
7798
|
if (token) options.token = token;
|
|
7749
7799
|
}
|
|
7800
|
+
// Resolve skip-manifest mode: --skip-manifest flag > RESKILL_NO_MANIFEST env
|
|
7801
|
+
if (!options.skipManifest && '1' === process.env.RESKILL_NO_MANIFEST) options.skipManifest = true;
|
|
7750
7802
|
// Create execution context
|
|
7751
7803
|
const ctx = createInstallContext(skills, options);
|
|
7752
7804
|
// Print banner
|
|
@@ -9560,7 +9612,7 @@ async function publishAction(skillPath, options) {
|
|
|
9560
9612
|
// ============================================================================
|
|
9561
9613
|
// Command Definition
|
|
9562
9614
|
// ============================================================================
|
|
9563
|
-
const publishCommand = new __WEBPACK_EXTERNAL_MODULE_commander__.Command('publish').alias('pub').description('Publish a skill to the registry').argument('[path]', 'Path to skill directory', '.').option('-r, --registry <url>', 'Registry URL (or set RESKILL_REGISTRY env var, or defaults.publishRegistry in skills.json)').option('
|
|
9615
|
+
const publishCommand = new __WEBPACK_EXTERNAL_MODULE_commander__.Command('publish').alias('pub').description('Publish a skill to the registry').argument('[path]', 'Path to skill directory', '.').option('-r, --registry <url>', 'Registry URL (or set RESKILL_REGISTRY env var, or defaults.publishRegistry in skills.json)').option('--tag <tag>', 'Git tag to publish').option('--access <level>', 'Access level: public or restricted', 'public').option('-n, --dry-run', 'Validate without publishing').option('-y, --yes', 'Skip confirmation prompts').option('-g, --group <path>', 'Publish skill into a group (e.g., "kanyun/frontend")').option('-t, --token <token>', 'Auth token for registry API requests (for CI/CD)').action(publishAction);
|
|
9564
9616
|
/**
|
|
9565
9617
|
* uninstall command - Uninstall one or more skills
|
|
9566
9618
|
*/ const uninstallCommand = new __WEBPACK_EXTERNAL_MODULE_commander__.Command('uninstall').alias('un').alias('remove').alias('rm').description('Uninstall one or more skills').argument('<skills...>', 'Skill names to uninstall').option('-g, --global', 'Uninstall from global installation (~/.claude/skills)').option('-y, --yes', 'Skip confirmation prompts').action(async (skillNames, options)=>{
|
|
@@ -38,6 +38,14 @@ export declare class ConfigLoader {
|
|
|
38
38
|
* Get installation directory (resolved absolute path)
|
|
39
39
|
*/
|
|
40
40
|
getInstallDir(): string;
|
|
41
|
+
private _noManifest;
|
|
42
|
+
/**
|
|
43
|
+
* Enable/disable no-manifest mode.
|
|
44
|
+
* When enabled, all write operations (save, create, addSkill, updateDefaults,
|
|
45
|
+
* addRegistry) become no-ops. Read operations are unaffected.
|
|
46
|
+
*/
|
|
47
|
+
setNoManifest(enabled: boolean): void;
|
|
48
|
+
get noManifest(): boolean;
|
|
41
49
|
/**
|
|
42
50
|
* Check if configuration file exists
|
|
43
51
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-loader.d.ts","sourceRoot":"","sources":["../../src/core/config-loader.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAiCpE;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAGrD,CAAC;AAMF;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,MAAM,CAA2B;gBAE7B,WAAW,CAAC,EAAE,MAAM;IAShC;;OAEG;IACH,cAAc,IAAI,MAAM;IAIxB;;OAEG;IACH,aAAa,IAAI,MAAM;IAIvB;;OAEG;IACH,aAAa,IAAI,MAAM;IASvB;;OAEG;IACH,MAAM,IAAI,OAAO;IAIjB;;;;OAIG;IACH,IAAI,IAAI,UAAU;IAiBlB;;OAEG;IACH,MAAM,IAAI,UAAU;IAKpB;;;;;OAKG;IACH,IAAI,CAAC,MAAM,CAAC,EAAE,UAAU,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"config-loader.d.ts","sourceRoot":"","sources":["../../src/core/config-loader.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAiCpE;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAGrD,CAAC;AAMF;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,MAAM,CAA2B;gBAE7B,WAAW,CAAC,EAAE,MAAM;IAShC;;OAEG;IACH,cAAc,IAAI,MAAM;IAIxB;;OAEG;IACH,aAAa,IAAI,MAAM;IAIvB;;OAEG;IACH,aAAa,IAAI,MAAM;IASvB,OAAO,CAAC,WAAW,CAAS;IAE5B;;;;OAIG;IACH,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAIrC,IAAI,UAAU,IAAI,OAAO,CAExB;IAMD;;OAEG;IACH,MAAM,IAAI,OAAO;IAIjB;;;;OAIG;IACH,IAAI,IAAI,UAAU;IAiBlB;;OAEG;IACH,MAAM,IAAI,UAAU;IAKpB;;;;;OAKG;IACH,IAAI,CAAC,MAAM,CAAC,EAAE,UAAU,GAAG,IAAI;IAW/B;;;;OAIG;IACH,YAAY,IAAI,OAAO;IASvB;;;;OAIG;IACH,MAAM,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,UAAU;IAwBjD;;;;;;OAMG;IACH,WAAW,IAAI,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,iBAAiB,CAAC,GAAG;QACjE,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;KACrC;IAYD;;;;;;OAMG;IACH,kBAAkB,IAAI,MAAM,GAAG,SAAS;IAKxC;;;;;;OAMG;IACH,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,IAAI;IAiBtD;;OAEG;IACH,aAAa,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAQvC;;;;;;;OAOG;IACH,cAAc,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;IAiB5C;;;;;;;;OAQG;IACH,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IA2BnD;;;;;;;;;OASG;IACH,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAoBtC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAuCzB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA8B1B;;;;OAIG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAiBzC;;;;;;;;;;OAUG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAkB5C;;;;;;;OAOG;IACH,OAAO,CAAC,sBAAsB;IAa9B;;;;OAIG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAYlC;;OAEG;IACH,SAAS,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAUnC;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAK/B;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAS7C;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAU1B;;OAEG;IACH,OAAO,CAAC,kBAAkB;CAK3B;AAED,eAAe,YAAY,CAAC"}
|
|
@@ -12,7 +12,15 @@ export declare class LockManager {
|
|
|
12
12
|
private projectRoot;
|
|
13
13
|
private lockPath;
|
|
14
14
|
private lockData;
|
|
15
|
+
private _noManifest;
|
|
15
16
|
constructor(projectRoot?: string);
|
|
17
|
+
/**
|
|
18
|
+
* Enable/disable no-manifest mode.
|
|
19
|
+
* When enabled, disk write operations (save, set, remove) become no-ops.
|
|
20
|
+
* lockSkill() still returns a LockedSkill but does not persist it.
|
|
21
|
+
*/
|
|
22
|
+
setNoManifest(enabled: boolean): void;
|
|
23
|
+
get noManifest(): boolean;
|
|
16
24
|
/**
|
|
17
25
|
* Get lock file path
|
|
18
26
|
*/
|
|
@@ -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;AAGjE;;GAEG;AACH,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAElC;;;;GAIG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAA2B;
|
|
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;AAGjE;;GAEG;AACH,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAElC;;;;GAIG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAA2B;IAC3C,OAAO,CAAC,WAAW,CAAS;gBAEhB,WAAW,CAAC,EAAE,MAAM;IAKhC;;;;OAIG;IACH,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAIrC,IAAI,UAAU,IAAI,OAAO,CAExB;IAED;;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;IAUnC;;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;IAQ3C;;OAEG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAW7B;;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;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,GACA,WAAW;IAmBd;;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"}
|
|
@@ -9,6 +9,8 @@ import { type ParsedSkillWithPath } from './skill-parser.js';
|
|
|
9
9
|
export interface SkillManagerOptions {
|
|
10
10
|
/** Global mode, install to ~/.agents/skills/ */
|
|
11
11
|
global?: boolean;
|
|
12
|
+
/** Skip all skills.json and skills.lock writes (platform integration mode) */
|
|
13
|
+
noManifest?: boolean;
|
|
12
14
|
}
|
|
13
15
|
/**
|
|
14
16
|
* SkillManager - Core Skill management class
|
|
@@ -30,6 +32,11 @@ export declare class SkillManager {
|
|
|
30
32
|
private lockManager;
|
|
31
33
|
private isGlobal;
|
|
32
34
|
constructor(projectRoot?: string, options?: SkillManagerOptions);
|
|
35
|
+
/**
|
|
36
|
+
* Enable/disable no-manifest mode on both ConfigLoader and LockManager.
|
|
37
|
+
* When enabled, no skills.json or skills.lock writes occur.
|
|
38
|
+
*/
|
|
39
|
+
setNoManifest(enabled: boolean): void;
|
|
33
40
|
/**
|
|
34
41
|
* Check if in global mode
|
|
35
42
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-manager.d.ts","sourceRoot":"","sources":["../../src/core/skill-manager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,cAAc,EACd,cAAc,EAIf,MAAM,mBAAmB,CAAC;AAoB3B,OAAO,EACL,KAAK,SAAS,EAIf,MAAM,qBAAqB,CAAC;AAK7B,OAAO,EAGL,KAAK,WAAW,EAChB,KAAK,aAAa,EACnB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGhD,OAAO,EAGL,KAAK,mBAAmB,EAEzB,MAAM,mBAAmB,CAAC;AAE3B;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,gDAAgD;IAChD,MAAM,CAAC,EAAE,OAAO,CAAC;
|
|
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
|
@@ -2259,6 +2259,20 @@ ${CURSOR_BRIDGE_MARKER}
|
|
|
2259
2259
|
return __WEBPACK_EXTERNAL_MODULE_node_path__.join(this.projectRoot, installDir);
|
|
2260
2260
|
}
|
|
2261
2261
|
// ==========================================================================
|
|
2262
|
+
// No-Manifest Mode (platform integration)
|
|
2263
|
+
// ==========================================================================
|
|
2264
|
+
_noManifest = false;
|
|
2265
|
+
/**
|
|
2266
|
+
* Enable/disable no-manifest mode.
|
|
2267
|
+
* When enabled, all write operations (save, create, addSkill, updateDefaults,
|
|
2268
|
+
* addRegistry) become no-ops. Read operations are unaffected.
|
|
2269
|
+
*/ setNoManifest(enabled) {
|
|
2270
|
+
this._noManifest = enabled;
|
|
2271
|
+
}
|
|
2272
|
+
get noManifest() {
|
|
2273
|
+
return this._noManifest;
|
|
2274
|
+
}
|
|
2275
|
+
// ==========================================================================
|
|
2262
2276
|
// File Operations
|
|
2263
2277
|
// ==========================================================================
|
|
2264
2278
|
/**
|
|
@@ -2294,7 +2308,7 @@ ${CURSOR_BRIDGE_MARKER}
|
|
|
2294
2308
|
*/ save(config) {
|
|
2295
2309
|
const toSave = config ?? this.config;
|
|
2296
2310
|
if (!toSave) throw new Error('No config to save');
|
|
2297
|
-
writeJson(this.configPath, toSave);
|
|
2311
|
+
if (!this._noManifest) writeJson(this.configPath, toSave);
|
|
2298
2312
|
this.config = toSave;
|
|
2299
2313
|
}
|
|
2300
2314
|
/**
|
|
@@ -2302,6 +2316,7 @@ ${CURSOR_BRIDGE_MARKER}
|
|
|
2302
2316
|
*
|
|
2303
2317
|
* @returns true if file was created, false if it already existed
|
|
2304
2318
|
*/ ensureExists() {
|
|
2319
|
+
if (this._noManifest) return false;
|
|
2305
2320
|
if (this.exists()) return false;
|
|
2306
2321
|
this.create();
|
|
2307
2322
|
return true;
|
|
@@ -2364,6 +2379,7 @@ ${CURSOR_BRIDGE_MARKER}
|
|
|
2364
2379
|
*
|
|
2365
2380
|
* @param updates - Partial defaults to merge
|
|
2366
2381
|
*/ updateDefaults(updates) {
|
|
2382
|
+
if (this._noManifest) return;
|
|
2367
2383
|
this.ensureConfigLoaded();
|
|
2368
2384
|
if (this.config) {
|
|
2369
2385
|
this.config.defaults = {
|
|
@@ -2499,6 +2515,7 @@ ${CURSOR_BRIDGE_MARKER}
|
|
|
2499
2515
|
*
|
|
2500
2516
|
* Also auto-adds the registry to the registries field if it's a well-known registry.
|
|
2501
2517
|
*/ addSkill(name, ref) {
|
|
2518
|
+
if (this._noManifest) return;
|
|
2502
2519
|
this.ensureConfigLoaded();
|
|
2503
2520
|
if (this.config) {
|
|
2504
2521
|
this.config.skills[name] = ref;
|
|
@@ -2519,6 +2536,7 @@ ${CURSOR_BRIDGE_MARKER}
|
|
|
2519
2536
|
* @param name - Registry name (e.g., 'github', 'gitlab', 'internal')
|
|
2520
2537
|
* @param url - Registry URL (e.g., 'https://github.com')
|
|
2521
2538
|
*/ addRegistry(name, url) {
|
|
2539
|
+
if (this._noManifest) return;
|
|
2522
2540
|
if (!this.config) // Config not loaded - this is expected when called before load()/create()
|
|
2523
2541
|
// Callers like addSkill() ensure config is loaded before calling this
|
|
2524
2542
|
return;
|
|
@@ -2552,6 +2570,7 @@ ${CURSOR_BRIDGE_MARKER}
|
|
|
2552
2570
|
*
|
|
2553
2571
|
* @returns true if skill was removed, false if it didn't exist
|
|
2554
2572
|
*/ removeSkill(name) {
|
|
2573
|
+
if (this._noManifest) return false;
|
|
2555
2574
|
this.ensureConfigLoaded();
|
|
2556
2575
|
if (this.config?.skills[name]) {
|
|
2557
2576
|
delete this.config.skills[name];
|
|
@@ -3145,11 +3164,22 @@ ${CURSOR_BRIDGE_MARKER}
|
|
|
3145
3164
|
projectRoot;
|
|
3146
3165
|
lockPath;
|
|
3147
3166
|
lockData = null;
|
|
3167
|
+
_noManifest = false;
|
|
3148
3168
|
constructor(projectRoot){
|
|
3149
3169
|
this.projectRoot = projectRoot || process.cwd();
|
|
3150
3170
|
this.lockPath = getSkillsLockPath(this.projectRoot);
|
|
3151
3171
|
}
|
|
3152
3172
|
/**
|
|
3173
|
+
* Enable/disable no-manifest mode.
|
|
3174
|
+
* When enabled, disk write operations (save, set, remove) become no-ops.
|
|
3175
|
+
* lockSkill() still returns a LockedSkill but does not persist it.
|
|
3176
|
+
*/ setNoManifest(enabled) {
|
|
3177
|
+
this._noManifest = enabled;
|
|
3178
|
+
}
|
|
3179
|
+
get noManifest() {
|
|
3180
|
+
return this._noManifest;
|
|
3181
|
+
}
|
|
3182
|
+
/**
|
|
3153
3183
|
* Get lock file path
|
|
3154
3184
|
*/ getLockPath() {
|
|
3155
3185
|
return this.lockPath;
|
|
@@ -3187,6 +3217,7 @@ ${CURSOR_BRIDGE_MARKER}
|
|
|
3187
3217
|
/**
|
|
3188
3218
|
* Save lock file
|
|
3189
3219
|
*/ save(lockToSave) {
|
|
3220
|
+
if (this._noManifest) return;
|
|
3190
3221
|
const toSave = lockToSave || this.lockData;
|
|
3191
3222
|
if (!toSave) throw new Error('No lock to save');
|
|
3192
3223
|
writeJson(this.lockPath, toSave);
|
|
@@ -3203,11 +3234,12 @@ ${CURSOR_BRIDGE_MARKER}
|
|
|
3203
3234
|
*/ set(name, skill) {
|
|
3204
3235
|
const lock = this.load();
|
|
3205
3236
|
lock.skills[name] = skill;
|
|
3206
|
-
this.save();
|
|
3237
|
+
if (!this._noManifest) this.save();
|
|
3207
3238
|
}
|
|
3208
3239
|
/**
|
|
3209
3240
|
* Remove locked skill
|
|
3210
3241
|
*/ remove(name) {
|
|
3242
|
+
if (this._noManifest) return false;
|
|
3211
3243
|
const lock = this.load();
|
|
3212
3244
|
if (lock.skills[name]) {
|
|
3213
3245
|
delete lock.skills[name];
|
|
@@ -4351,6 +4383,14 @@ class RegistryResolver {
|
|
|
4351
4383
|
this.resolver = new GitResolver('github', void 0, (registryName)=>this.config.getRegistryUrl(registryName));
|
|
4352
4384
|
this.httpResolver = new HttpResolver();
|
|
4353
4385
|
this.registryResolver = new RegistryResolver();
|
|
4386
|
+
if (options?.noManifest ?? '1' === process.env.RESKILL_NO_MANIFEST) this.setNoManifest(true);
|
|
4387
|
+
}
|
|
4388
|
+
/**
|
|
4389
|
+
* Enable/disable no-manifest mode on both ConfigLoader and LockManager.
|
|
4390
|
+
* When enabled, no skills.json or skills.lock writes occur.
|
|
4391
|
+
*/ setNoManifest(enabled) {
|
|
4392
|
+
this.config.setNoManifest(enabled);
|
|
4393
|
+
this.lockManager.setNoManifest(enabled);
|
|
4354
4394
|
}
|
|
4355
4395
|
/**
|
|
4356
4396
|
* Check if in global mode
|