reskill 1.11.2 → 1.13.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
@@ -75,7 +75,8 @@ npx reskill@latest <command> # Or use npx directly
75
75
  | `-f, --force` | `install` | Force reinstall even if already installed |
76
76
  | `-s, --skill <names...>` | `install` | Select specific skill(s) by name from a multi-skill repo |
77
77
  | `--list` | `install` | List available skills in the repository without installing |
78
- | `-r, --registry <url>` | `install` | Registry URL override for registry-based installs |
78
+ | `-r, --registry <url>` | `install`, `publish` | Registry URL override for registry-based installs |
79
+ | `-t, --token <token>` | `install` | Auth token for registry API requests (for CI/CD) |
79
80
  | `-j, --json` | `list`, `info`, `outdated`, `doctor` | Output as JSON |
80
81
 
81
82
  Run `reskill <command> --help` for complete options and detailed usage.
@@ -208,9 +209,12 @@ Skills are installed to `.skills/` by default and can be integrated with any age
208
209
  Publish your skills to the registry for others to use:
209
210
 
210
211
  ```bash
211
- # Login to the registry
212
+ # Interactive login (recommended for humans — guides you through token setup)
212
213
  reskill login
213
214
 
215
+ # Non-interactive login (for CI/CD — pass token directly)
216
+ reskill login --token <your-token>
217
+
214
218
  # Validate without publishing (dry run)
215
219
  reskill publish --dry-run
216
220
 
@@ -220,6 +224,21 @@ reskill publish
220
224
 
221
225
  For detailed publishing guidelines, see the [CLI Specification](./docs/cli-spec.md#publish).
222
226
 
227
+ ### Installing Private Skills
228
+
229
+ After logging in with `reskill login`, the token stored in `~/.reskillrc` is automatically used during `reskill install` to access private skills:
230
+
231
+ ```bash
232
+ # Token is automatically read from ~/.reskillrc (requires --registry to match)
233
+ reskill install @scope/private-skill --registry https://your-registry.com
234
+
235
+ # Or use RESKILL_TOKEN env var (works without --registry)
236
+ RESKILL_TOKEN=<token> reskill install @scope/private-skill
237
+
238
+ # Or pass token directly (for CI/CD)
239
+ reskill install @scope/private-skill --registry https://your-registry.com --token <token>
240
+ ```
241
+
223
242
  ## Environment Variables
224
243
 
225
244
  | Variable | Description | Default |
package/README.zh-CN.md CHANGED
@@ -75,7 +75,8 @@ npx reskill@latest <command> # 或直接使用 npx
75
75
  | `-f, --force` | `install` | 强制重新安装 |
76
76
  | `-s, --skill <names...>` | `install` | 从多 skill 仓库中选择指定 skill |
77
77
  | `--list` | `install` | 列出仓库中可用的 skills(不安装) |
78
- | `-r, --registry <url>` | `install` | 覆盖 registry URL(用于 registry 安装) |
78
+ | `-r, --registry <url>` | `install`, `publish` | 覆盖 registry URL(用于 registry 安装) |
79
+ | `-t, --token <token>` | `install` | 认证令牌(用于 CI/CD 访问私有 skill) |
79
80
  | `-j, --json` | `list`, `info`, `outdated`, `doctor` | JSON 格式输出 |
80
81
 
81
82
  运行 `reskill <command> --help` 查看完整选项和详细用法。
@@ -220,6 +221,21 @@ reskill publish
220
221
 
221
222
  详细的发布指南请参考 [CLI 规范](./docs/cli-spec.md#publish)。
222
223
 
224
+ ### 安装私有 Skills
225
+
226
+ 通过 `reskill login` 登录后,`reskill install` 会自动使用 `~/.reskillrc` 中的 token 访问私有 skill:
227
+
228
+ ```bash
229
+ # 自动从 ~/.reskillrc 读取 token(需配合 --registry 指定 registry)
230
+ reskill install @scope/private-skill --registry https://your-registry.com
231
+
232
+ # 或通过 RESKILL_TOKEN 环境变量(无需 --registry)
233
+ RESKILL_TOKEN=<token> reskill install @scope/private-skill
234
+
235
+ # 或直接传入 token(用于 CI/CD)
236
+ reskill install @scope/private-skill --registry https://your-registry.com --token <token>
237
+ ```
238
+
223
239
  ## 环境变量
224
240
 
225
241
  | 变量 | 说明 | 默认值 |
@@ -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;AAsyBpC;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,cAAc,SAoGvB,CAAC;AAEL,eAAe,cAAc,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;AA6yBpC;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,cAAc,SA8GvB,CAAC;AAEL,eAAe,cAAc,CAAC"}
@@ -1,10 +1,23 @@
1
1
  /**
2
2
  * login command - Authenticate with a reskill registry
3
3
  *
4
- * Token-only login: requires a pre-generated token from Web UI.
5
- * Logs in to the registry and stores the token in ~/.reskillrc
4
+ * Supports two modes:
5
+ * 1. Interactive: prompts user to paste token (default when no --token flag)
6
+ * 2. Non-interactive: uses --token flag directly (for CI/CD)
7
+ *
8
+ * Tokens are stored in ~/.reskillrc per registry.
6
9
  */
7
10
  import { Command } from 'commander';
11
+ /**
12
+ * Build the token settings page URL for a registry
13
+ */
14
+ export declare function getTokenPageUrl(registry: string): string;
15
+ /**
16
+ * Prompt user to paste their access token interactively.
17
+ * Shows a fixed-length mask on input for visual feedback without revealing token length.
18
+ * Retries on empty input, returns null only on explicit cancel (Ctrl+C).
19
+ */
20
+ export declare function promptForToken(registry: string): Promise<string | null>;
8
21
  export declare const loginCommand: Command;
9
22
  export default loginCommand;
10
23
  //# sourceMappingURL=login.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/login.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyFpC,eAAO,MAAM,YAAY,SAOH,CAAC;AAEvB,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/login.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmBpC;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGxD;AAiGD;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA6B7E;AA4ED,eAAO,MAAM,YAAY,SAOH,CAAC;AAEvB,eAAe,YAAY,CAAC"}
package/dist/cli/index.js CHANGED
@@ -3710,13 +3710,14 @@ class RegistryResolver {
3710
3710
  *
3711
3711
  * @param ref - Skill reference (e.g., "@kanyun/planning-with-files@2.4.5" or "my-skill@latest")
3712
3712
  * @param overrideRegistryUrl - Optional registry URL override (bypasses scope-based lookup)
3713
+ * @param token - Optional auth token for private skill access
3713
3714
  * @returns Resolved skill information including downloaded tarball
3714
3715
  *
3715
3716
  * @example
3716
3717
  * const result = await resolver.resolve('@kanyun/planning-with-files@2.4.5');
3717
3718
  * console.log(result.shortName); // 'planning-with-files'
3718
3719
  * console.log(result.version); // '2.4.5'
3719
- */ async resolve(ref, overrideRegistryUrl) {
3720
+ */ async resolve(ref, overrideRegistryUrl, token) {
3720
3721
  // 1. Parse skill identifier
3721
3722
  const parsed = parseSkillIdentifier(ref);
3722
3723
  const shortName = getShortName(parsed.fullName);
@@ -3724,7 +3725,8 @@ class RegistryResolver {
3724
3725
  const registryUrl = overrideRegistryUrl || getRegistryUrl(parsed.scope);
3725
3726
  // 3. Create client and resolve version
3726
3727
  const client = new RegistryClient({
3727
- registry: registryUrl
3728
+ registry: registryUrl,
3729
+ token
3728
3730
  });
3729
3731
  const version = await client.resolveVersion(parsed.fullName, parsed.version);
3730
3732
  // 4. Download tarball
@@ -4134,6 +4136,9 @@ class RegistryResolver {
4134
4136
  const locked = this.lockManager.get(parsed.name);
4135
4137
  if (locked?.registry) return locked.registry;
4136
4138
  // Slow path: probe configured registries (skip git hosts)
4139
+ // Note: token is intentionally NOT passed during probe to avoid leaking
4140
+ // credentials to unrelated registries. Token is only used after the
4141
+ // target registry is determined.
4137
4142
  const registries = this.config.getRegistries();
4138
4143
  for (const [name, url] of Object.entries(registries))if (!this.isGitHostRegistry(name, url)) try {
4139
4144
  const client = new RegistryClient({
@@ -4601,7 +4606,8 @@ class RegistryResolver {
4601
4606
  const parsed = parseSkillIdentifier(ref);
4602
4607
  const registryUrl = await this.resolveRegistryUrl(ref, options.registry);
4603
4608
  const client = new RegistryClient({
4604
- registry: registryUrl
4609
+ registry: registryUrl,
4610
+ token: options.token
4605
4611
  });
4606
4612
  // Query skill info to determine source_type
4607
4613
  let skillInfo;
@@ -4622,7 +4628,7 @@ class RegistryResolver {
4622
4628
  });
4623
4629
  // 1. Resolve registry skill (pass pre-resolved registryUrl)
4624
4630
  logger_logger["package"](`Resolving ${ref} from registry...`);
4625
- const resolved = await this.registryResolver.resolve(ref, registryUrl);
4631
+ const resolved = await this.registryResolver.resolve(ref, registryUrl, options.token);
4626
4632
  const { shortName, version, registryUrl: resolvedRegistryUrl, tarball, parsed: resolvedParsed } = resolved;
4627
4633
  // 2. Check if already installed (skip if --force)
4628
4634
  const skillPath = this.getSkillPath(shortName);
@@ -4832,7 +4838,8 @@ class RegistryResolver {
4832
4838
  const version = 'latest';
4833
4839
  // Download tarball via RegistryClient (handles auth + 302 redirect to signed URL)
4834
4840
  const client = new RegistryClient({
4835
- registry: registryUrl
4841
+ registry: registryUrl,
4842
+ token: options.token
4836
4843
  });
4837
4844
  const { tarball } = await client.downloadSkill(parsed.fullName, version);
4838
4845
  logger_logger["package"](`Installing ${shortName} from ${registryUrl} to ${targetAgents.length} agent(s)...`);
@@ -6136,6 +6143,133 @@ const DEFAULT_INSTALL_DIR = '.skills';
6136
6143
  // Display summary (use options.installDir directly since we just set it)
6137
6144
  displayConfigSummary(options.installDir);
6138
6145
  });
6146
+ /**
6147
+ * AuthManager - Handle authentication token management
6148
+ *
6149
+ * Manages tokens for registry authentication.
6150
+ * Tokens are stored in ~/.reskillrc or via RESKILL_TOKEN environment variable.
6151
+ */ // ============================================================================
6152
+ // Constants
6153
+ // ============================================================================
6154
+ const CONFIG_FILE_NAME = '.reskillrc';
6155
+ // ============================================================================
6156
+ // AuthManager Class
6157
+ // ============================================================================
6158
+ class AuthManager {
6159
+ configPath;
6160
+ constructor(){
6161
+ const home = process.env.HOME || process.env.USERPROFILE || '';
6162
+ this.configPath = __WEBPACK_EXTERNAL_MODULE_node_path__.join(home, CONFIG_FILE_NAME);
6163
+ }
6164
+ /**
6165
+ * Get the default registry URL from environment variable
6166
+ *
6167
+ * Returns undefined if no registry is configured - there is no hardcoded default
6168
+ * to prevent accidental publishing to unintended registries.
6169
+ */ getDefaultRegistry() {
6170
+ return process.env.RESKILL_REGISTRY;
6171
+ }
6172
+ /**
6173
+ * Get path to config file
6174
+ */ getConfigPath() {
6175
+ return this.configPath;
6176
+ }
6177
+ /**
6178
+ * Get token for a registry
6179
+ *
6180
+ * Priority:
6181
+ * 1. RESKILL_TOKEN environment variable
6182
+ * 2. Token from ~/.reskillrc for the specified registry
6183
+ */ getToken(registry) {
6184
+ // Check environment variable first
6185
+ const envToken = process.env.RESKILL_TOKEN;
6186
+ if (envToken) return envToken;
6187
+ // Read from config file
6188
+ const config = this.readConfig();
6189
+ if (!config?.registries) return;
6190
+ const targetRegistry = registry || this.getDefaultRegistry();
6191
+ if (!targetRegistry) return;
6192
+ const auth = config.registries[targetRegistry];
6193
+ return auth?.token;
6194
+ }
6195
+ /**
6196
+ * Check if token exists for a registry
6197
+ */ hasToken(registry) {
6198
+ return void 0 !== this.getToken(registry);
6199
+ }
6200
+ /**
6201
+ * Get email for a registry
6202
+ */ getEmail(registry) {
6203
+ const config = this.readConfig();
6204
+ if (!config?.registries) return;
6205
+ const targetRegistry = registry || this.getDefaultRegistry();
6206
+ if (!targetRegistry) return;
6207
+ const auth = config.registries[targetRegistry];
6208
+ return auth?.email;
6209
+ }
6210
+ /**
6211
+ * Get handle for a registry
6212
+ */ getHandle(registry) {
6213
+ const config = this.readConfig();
6214
+ if (!config?.registries) return;
6215
+ const targetRegistry = registry || this.getDefaultRegistry();
6216
+ if (!targetRegistry) return;
6217
+ const auth = config.registries[targetRegistry];
6218
+ return auth?.handle;
6219
+ }
6220
+ /**
6221
+ * Set token for a registry
6222
+ *
6223
+ * Note: When no registry is specified and RESKILL_REGISTRY env var is not set,
6224
+ * this method will throw an error. The calling code should ensure a registry
6225
+ * is always provided (either explicitly or via environment variable).
6226
+ */ setToken(token, registry, email, handle) {
6227
+ const config = this.readConfig() || {};
6228
+ const targetRegistry = registry || this.getDefaultRegistry();
6229
+ if (!targetRegistry) throw new Error('No registry specified. Set RESKILL_REGISTRY environment variable or provide registry explicitly.');
6230
+ if (!config.registries) config.registries = {};
6231
+ config.registries[targetRegistry] = {
6232
+ token,
6233
+ ...email && {
6234
+ email
6235
+ },
6236
+ ...handle && {
6237
+ handle
6238
+ }
6239
+ };
6240
+ this.writeConfig(config);
6241
+ }
6242
+ /**
6243
+ * Remove token for a registry
6244
+ */ removeToken(registry) {
6245
+ const config = this.readConfig();
6246
+ if (!config?.registries) return;
6247
+ const targetRegistry = registry || this.getDefaultRegistry();
6248
+ if (!targetRegistry) return;
6249
+ delete config.registries[targetRegistry];
6250
+ this.writeConfig(config);
6251
+ }
6252
+ /**
6253
+ * Read config file
6254
+ */ readConfig() {
6255
+ try {
6256
+ if (!external_node_fs_.existsSync(this.configPath)) return null;
6257
+ const content = external_node_fs_.readFileSync(this.configPath, 'utf-8');
6258
+ if (!content.trim()) return null;
6259
+ return JSON.parse(content);
6260
+ } catch {
6261
+ return null;
6262
+ }
6263
+ }
6264
+ /**
6265
+ * Write config file
6266
+ */ writeConfig(config) {
6267
+ const content = JSON.stringify(config, null, 2);
6268
+ external_node_fs_.writeFileSync(this.configPath, content, {
6269
+ mode: 384
6270
+ });
6271
+ }
6272
+ }
6139
6273
  // ============================================================================
6140
6274
  // Utility Functions
6141
6275
  // ============================================================================
@@ -6381,7 +6515,8 @@ const DEFAULT_INSTALL_DIR = '.skills';
6381
6515
  force: options.force,
6382
6516
  save: false,
6383
6517
  mode: installMode,
6384
- registry: options.registry
6518
+ registry: options.registry,
6519
+ token: options.token
6385
6520
  });
6386
6521
  const successCount = Array.from(results.values()).filter((r)=>r.success).length;
6387
6522
  totalInstalled += successCount;
@@ -6431,7 +6566,8 @@ const DEFAULT_INSTALL_DIR = '.skills';
6431
6566
  force: options.force,
6432
6567
  save: false !== options.save && !installGlobally,
6433
6568
  mode: installMode,
6434
- registry: options.registry
6569
+ registry: options.registry,
6570
+ token: options.token
6435
6571
  });
6436
6572
  spinner.stop('Installation complete');
6437
6573
  // Process and display results
@@ -6495,7 +6631,8 @@ const DEFAULT_INSTALL_DIR = '.skills';
6495
6631
  force: ctx.options.force,
6496
6632
  save: false !== ctx.options.save && !installGlobally,
6497
6633
  mode: installMode,
6498
- registry: ctx.options.registry
6634
+ registry: ctx.options.registry,
6635
+ token: ctx.options.token
6499
6636
  });
6500
6637
  spinner.stop('Installation complete');
6501
6638
  // listOnly is always false here (the listOnly path returns early above)
@@ -6555,6 +6692,7 @@ const DEFAULT_INSTALL_DIR = '.skills';
6555
6692
  force: options.force,
6556
6693
  save: false !== options.save && !installGlobally,
6557
6694
  registry: options.registry,
6695
+ token: options.token,
6558
6696
  mode: installMode
6559
6697
  });
6560
6698
  const successful = Array.from(results.values()).filter((r)=>r.success);
@@ -6681,12 +6819,18 @@ const DEFAULT_INSTALL_DIR = '.skills';
6681
6819
  * Behavior:
6682
6820
  * - Single skill install: Prompts for agents/mode (stored config as defaults)
6683
6821
  * - Reinstall all (no args): Uses stored config directly, no confirmation
6684
- */ 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').action(async (skills, options)=>{
6822
+ */ 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)=>{
6685
6823
  // Handle --all flag implications
6686
6824
  if (options.all) {
6687
6825
  options.yes = true;
6688
6826
  options.global = true;
6689
6827
  }
6828
+ // Resolve auth token: --token flag > RESKILL_TOKEN env > ~/.reskillrc
6829
+ if (!options.token) {
6830
+ const authManager = new AuthManager();
6831
+ const token = authManager.getToken(options.registry);
6832
+ if (token) options.token = token;
6833
+ }
6690
6834
  // Create execution context
6691
6835
  const ctx = createInstallContext(skills, options);
6692
6836
  // Print banner
@@ -6770,161 +6914,148 @@ const DEFAULT_INSTALL_DIR = '.skills';
6770
6914
  logger_logger.log(`Total: ${skills.length} skill(s)`);
6771
6915
  });
6772
6916
  /**
6773
- * AuthManager - Handle authentication token management
6917
+ * login command - Authenticate with a reskill registry
6774
6918
  *
6775
- * Manages tokens for registry authentication.
6776
- * Tokens are stored in ~/.reskillrc or via RESKILL_TOKEN environment variable.
6919
+ * Supports two modes:
6920
+ * 1. Interactive: prompts user to paste token (default when no --token flag)
6921
+ * 2. Non-interactive: uses --token flag directly (for CI/CD)
6922
+ *
6923
+ * Tokens are stored in ~/.reskillrc per registry.
6777
6924
  */ // ============================================================================
6778
- // Constants
6925
+ // Helpers
6779
6926
  // ============================================================================
6780
- const CONFIG_FILE_NAME = '.reskillrc';
6781
- // ============================================================================
6782
- // AuthManager Class
6783
- // ============================================================================
6784
- class AuthManager {
6785
- configPath;
6786
- constructor(){
6787
- const home = process.env.HOME || process.env.USERPROFILE || '';
6788
- this.configPath = __WEBPACK_EXTERNAL_MODULE_node_path__.join(home, CONFIG_FILE_NAME);
6789
- }
6790
- /**
6791
- * Get the default registry URL from environment variable
6792
- *
6793
- * Returns undefined if no registry is configured - there is no hardcoded default
6794
- * to prevent accidental publishing to unintended registries.
6795
- */ getDefaultRegistry() {
6796
- return process.env.RESKILL_REGISTRY;
6797
- }
6798
- /**
6799
- * Get path to config file
6800
- */ getConfigPath() {
6801
- return this.configPath;
6802
- }
6803
- /**
6804
- * Get token for a registry
6805
- *
6806
- * Priority:
6807
- * 1. RESKILL_TOKEN environment variable
6808
- * 2. Token from ~/.reskillrc for the specified registry
6809
- */ getToken(registry) {
6810
- // Check environment variable first
6811
- const envToken = process.env.RESKILL_TOKEN;
6812
- if (envToken) return envToken;
6813
- // Read from config file
6814
- const config = this.readConfig();
6815
- if (!config?.registries) return;
6816
- const targetRegistry = registry || this.getDefaultRegistry();
6817
- if (!targetRegistry) return;
6818
- const auth = config.registries[targetRegistry];
6819
- return auth?.token;
6820
- }
6821
- /**
6822
- * Check if token exists for a registry
6823
- */ hasToken(registry) {
6824
- return void 0 !== this.getToken(registry);
6825
- }
6826
- /**
6827
- * Get email for a registry
6828
- */ getEmail(registry) {
6829
- const config = this.readConfig();
6830
- if (!config?.registries) return;
6831
- const targetRegistry = registry || this.getDefaultRegistry();
6832
- if (!targetRegistry) return;
6833
- const auth = config.registries[targetRegistry];
6834
- return auth?.email;
6835
- }
6836
- /**
6837
- * Get handle for a registry
6838
- */ getHandle(registry) {
6839
- const config = this.readConfig();
6840
- if (!config?.registries) return;
6841
- const targetRegistry = registry || this.getDefaultRegistry();
6842
- if (!targetRegistry) return;
6843
- const auth = config.registries[targetRegistry];
6844
- return auth?.handle;
6845
- }
6846
- /**
6847
- * Set token for a registry
6848
- *
6849
- * Note: When no registry is specified and RESKILL_REGISTRY env var is not set,
6850
- * this method will throw an error. The calling code should ensure a registry
6851
- * is always provided (either explicitly or via environment variable).
6852
- */ setToken(token, registry, email, handle) {
6853
- const config = this.readConfig() || {};
6854
- const targetRegistry = registry || this.getDefaultRegistry();
6855
- if (!targetRegistry) throw new Error('No registry specified. Set RESKILL_REGISTRY environment variable or provide registry explicitly.');
6856
- if (!config.registries) config.registries = {};
6857
- config.registries[targetRegistry] = {
6858
- token,
6859
- ...email && {
6860
- email
6861
- },
6862
- ...handle && {
6863
- handle
6864
- }
6927
+ /**
6928
+ * Build the token settings page URL for a registry
6929
+ */ function getTokenPageUrl(registry) {
6930
+ const base = registry.endsWith('/') ? registry.slice(0, -1) : registry;
6931
+ return `${base}/skills/tokens`;
6932
+ }
6933
+ const MASK = '••••••••';
6934
+ const CANCELLED = Symbol('cancelled');
6935
+ /**
6936
+ * Erase N characters behind the cursor and clear to end of line.
6937
+ */ function eraseChars(count) {
6938
+ process.stdout.write(`\x1b[${count}D\x1b[0K`);
6939
+ }
6940
+ /**
6941
+ * Read a line from piped stdin (non-TTY).
6942
+ */ function readFromPipe() {
6943
+ return new Promise((resolve, reject)=>{
6944
+ const chunks = [];
6945
+ const onData = (chunk)=>chunks.push(chunk);
6946
+ const onEnd = ()=>{
6947
+ cleanup();
6948
+ const value = Buffer.concat(chunks).toString().trim();
6949
+ resolve(value || null);
6865
6950
  };
6866
- this.writeConfig(config);
6867
- }
6868
- /**
6869
- * Remove token for a registry
6870
- */ removeToken(registry) {
6871
- const config = this.readConfig();
6872
- if (!config?.registries) return;
6873
- const targetRegistry = registry || this.getDefaultRegistry();
6874
- if (!targetRegistry) return;
6875
- delete config.registries[targetRegistry];
6876
- this.writeConfig(config);
6877
- }
6878
- /**
6879
- * Read config file
6880
- */ readConfig() {
6881
- try {
6882
- if (!external_node_fs_.existsSync(this.configPath)) return null;
6883
- const content = external_node_fs_.readFileSync(this.configPath, 'utf-8');
6884
- if (!content.trim()) return null;
6885
- return JSON.parse(content);
6886
- } catch {
6887
- return null;
6888
- }
6889
- }
6890
- /**
6891
- * Write config file
6892
- */ writeConfig(config) {
6893
- const content = JSON.stringify(config, null, 2);
6894
- external_node_fs_.writeFileSync(this.configPath, content, {
6895
- mode: 384
6896
- });
6897
- }
6951
+ const onError = (err)=>{
6952
+ cleanup();
6953
+ reject(err);
6954
+ };
6955
+ const cleanup = ()=>{
6956
+ process.stdin.removeListener('data', onData);
6957
+ process.stdin.removeListener('end', onEnd);
6958
+ process.stdin.removeListener('error', onError);
6959
+ };
6960
+ process.stdin.on('data', onData);
6961
+ process.stdin.on('end', onEnd);
6962
+ process.stdin.on('error', onError);
6963
+ process.stdin.resume();
6964
+ });
6898
6965
  }
6899
6966
  /**
6900
- * login command - Authenticate with a reskill registry
6967
+ * Read token from TTY stdin in raw mode with fixed-length mask feedback.
6901
6968
  *
6902
- * Token-only login: requires a pre-generated token from Web UI.
6903
- * Logs in to the registry and stores the token in ~/.reskillrc
6904
- */ // ============================================================================
6969
+ * Returns:
6970
+ * - token string on valid input + Enter
6971
+ * - empty string on empty Enter (no input)
6972
+ * - CANCELLED symbol on Ctrl+C
6973
+ */ function readFromTTY() {
6974
+ return new Promise((resolve)=>{
6975
+ let input = '';
6976
+ let masked = false;
6977
+ process.stdin.setRawMode(true);
6978
+ process.stdin.resume();
6979
+ process.stdin.setEncoding('utf8');
6980
+ const finish = (value)=>{
6981
+ process.stdin.setRawMode(false);
6982
+ process.stdin.pause();
6983
+ process.stdin.removeAllListeners('data');
6984
+ process.stdout.write('\n');
6985
+ resolve(value);
6986
+ };
6987
+ process.stdin.on('data', (data)=>{
6988
+ for (const ch of data){
6989
+ if ('\r' === ch || '\n' === ch) return finish(input.trim());
6990
+ if ('\x03' === ch) return finish(CANCELLED);
6991
+ if ('\x7f' === ch || '\b' === ch) {
6992
+ // Fixed-length mask can't represent per-char deletion — clear all to let user retry
6993
+ if (input.length > 0) {
6994
+ input = '';
6995
+ if (masked) {
6996
+ eraseChars(MASK.length);
6997
+ masked = false;
6998
+ }
6999
+ }
7000
+ continue;
7001
+ }
7002
+ if (ch >= ' ') {
7003
+ input += ch;
7004
+ if (!masked) {
7005
+ process.stdout.write(MASK);
7006
+ masked = true;
7007
+ }
7008
+ }
7009
+ }
7010
+ });
7011
+ });
7012
+ }
7013
+ /**
7014
+ * Prompt user to paste their access token interactively.
7015
+ * Shows a fixed-length mask on input for visual feedback without revealing token length.
7016
+ * Retries on empty input, returns null only on explicit cancel (Ctrl+C).
7017
+ */ async function promptForToken(registry) {
7018
+ const tokenPageUrl = getTokenPageUrl(registry);
7019
+ logger_logger.newline();
7020
+ logger_logger.log(` Registry: ${registry}`);
7021
+ logger_logger.newline();
7022
+ logger_logger.log(' To get your access token:');
7023
+ logger_logger.log(` 1. Open ${tokenPageUrl}`);
7024
+ logger_logger.log(' 2. Login and generate an API token');
7025
+ logger_logger.log(' 3. Copy the token and paste it below');
7026
+ logger_logger.newline();
7027
+ if (!process.stdin.isTTY) return readFromPipe();
7028
+ while(true){
7029
+ process.stdout.write(' Paste your access token: ');
7030
+ const result = await readFromTTY();
7031
+ if (result === CANCELLED) return null;
7032
+ if (result.length > 0) return result;
7033
+ logger_logger.warn(' Token cannot be empty. Please try again.');
7034
+ }
7035
+ }
7036
+ // ============================================================================
6905
7037
  // Main Action
6906
7038
  // ============================================================================
6907
7039
  async function loginAction(options) {
6908
7040
  const registry = resolveRegistry(options.registry);
6909
7041
  const authManager = new AuthManager();
6910
- // Token is required (no email/password login)
6911
- if (!options.token) {
6912
- logger_logger.error('Token is required');
6913
- logger_logger.newline();
6914
- logger_logger.log('To get a token:');
6915
- logger_logger.log(' 1. Visit the Registry Web UI');
6916
- logger_logger.log(' 2. Login and generate an API token');
6917
- logger_logger.log(' 3. Run: reskill login --registry <url> --token <token>');
6918
- process.exit(1);
7042
+ let token;
7043
+ if (options.token) token = options.token;
7044
+ else {
7045
+ const prompted = await promptForToken(registry);
7046
+ if (!prompted) {
7047
+ logger_logger.warn('Login cancelled');
7048
+ process.exit(0);
7049
+ }
7050
+ token = prompted;
6919
7051
  }
6920
- await loginWithToken(options.token, registry, authManager);
7052
+ await loginWithToken(token, registry, authManager);
6921
7053
  }
6922
7054
  /**
6923
7055
  * Login with a pre-generated token from Web UI
6924
7056
  */ async function loginWithToken(token, registry, authManager) {
6925
7057
  logger_logger.log(`Verifying token with ${registry}...`);
6926
7058
  logger_logger.newline();
6927
- // Verify token by calling login-cli endpoint
6928
7059
  const client = new RegistryClient({
6929
7060
  registry,
6930
7061
  token
@@ -6935,7 +7066,6 @@ async function loginAction(options) {
6935
7066
  logger_logger.error(response.error || 'Token verification failed');
6936
7067
  process.exit(1);
6937
7068
  }
6938
- // Save token with handle and email
6939
7069
  authManager.setToken(token, registry, response.user.email, response.user.handle);
6940
7070
  logger_logger.log('✓ Token verified and saved!');
6941
7071
  logger_logger.newline();
@@ -6956,7 +7086,7 @@ async function loginAction(options) {
6956
7086
  // ============================================================================
6957
7087
  // Command Definition
6958
7088
  // ============================================================================
6959
- const loginCommand = new __WEBPACK_EXTERNAL_MODULE_commander__.Command('login').description('Authenticate with a reskill registry').option('-r, --registry <url>', 'Registry URL (or set RESKILL_REGISTRY env var, or defaults.publishRegistry in skills.json)').option('-t, --token <token>', 'API token from Web UI (required)').action(loginAction);
7089
+ const loginCommand = new __WEBPACK_EXTERNAL_MODULE_commander__.Command('login').description('Authenticate with a reskill registry').option('-r, --registry <url>', 'Registry URL (or set RESKILL_REGISTRY env var, or defaults.publishRegistry in skills.json)').option('-t, --token <token>', 'API token from Web UI (skips interactive prompt)').action(loginAction);
6960
7090
  /**
6961
7091
  * logout command - Log out from a reskill registry
6962
7092
  *
@@ -43,6 +43,7 @@ export declare class RegistryResolver {
43
43
  *
44
44
  * @param ref - Skill reference (e.g., "@kanyun/planning-with-files@2.4.5" or "my-skill@latest")
45
45
  * @param overrideRegistryUrl - Optional registry URL override (bypasses scope-based lookup)
46
+ * @param token - Optional auth token for private skill access
46
47
  * @returns Resolved skill information including downloaded tarball
47
48
  *
48
49
  * @example
@@ -50,7 +51,7 @@ export declare class RegistryResolver {
50
51
  * console.log(result.shortName); // 'planning-with-files'
51
52
  * console.log(result.version); // '2.4.5'
52
53
  */
53
- resolve(ref: string, overrideRegistryUrl?: string): Promise<RegistryResolveResult>;
54
+ resolve(ref: string, overrideRegistryUrl?: string, token?: string): Promise<RegistryResolveResult>;
54
55
  /**
55
56
  * Extract tarball to a target directory
56
57
  *
@@ -1 +1 @@
1
- {"version":3,"file":"registry-resolver.d.ts","sourceRoot":"","sources":["../../src/core/registry-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAGL,KAAK,qBAAqB,EAE3B,MAAM,4BAA4B,CAAC;AAQpC,MAAM,WAAW,qBAAqB;IACpC,8BAA8B;IAC9B,MAAM,EAAE,qBAAqB,CAAC;IAC9B,uCAAuC;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,uBAAuB;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,mBAAmB;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,gCAAgC;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,iCAAiC;IACjC,SAAS,EAAE,MAAM,CAAC;CACnB;AAMD,qBAAa,gBAAgB;IAC3B;;;;;;;;;;;;;OAaG;IACH,MAAM,CAAC,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAwC1C;;;;;;;;;;;OAWG;IACG,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,mBAAmB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC;IA+BxF;;;;;;OAMG;IACG,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAWjE"}
1
+ {"version":3,"file":"registry-resolver.d.ts","sourceRoot":"","sources":["../../src/core/registry-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAGL,KAAK,qBAAqB,EAE3B,MAAM,4BAA4B,CAAC;AAQpC,MAAM,WAAW,qBAAqB;IACpC,8BAA8B;IAC9B,MAAM,EAAE,qBAAqB,CAAC;IAC9B,uCAAuC;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,uBAAuB;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,mBAAmB;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,gCAAgC;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,iCAAiC;IACjC,SAAS,EAAE,MAAM,CAAC;CACnB;AAMD,qBAAa,gBAAgB;IAC3B;;;;;;;;;;;;;OAaG;IACH,MAAM,CAAC,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAwC1C;;;;;;;;;;;;OAYG;IACG,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,mBAAmB,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC;IA+BxG;;;;;;OAMG;IACG,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAWjE"}
@@ -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
@@ -3705,13 +3705,14 @@ class RegistryResolver {
3705
3705
  *
3706
3706
  * @param ref - Skill reference (e.g., "@kanyun/planning-with-files@2.4.5" or "my-skill@latest")
3707
3707
  * @param overrideRegistryUrl - Optional registry URL override (bypasses scope-based lookup)
3708
+ * @param token - Optional auth token for private skill access
3708
3709
  * @returns Resolved skill information including downloaded tarball
3709
3710
  *
3710
3711
  * @example
3711
3712
  * const result = await resolver.resolve('@kanyun/planning-with-files@2.4.5');
3712
3713
  * console.log(result.shortName); // 'planning-with-files'
3713
3714
  * console.log(result.version); // '2.4.5'
3714
- */ async resolve(ref, overrideRegistryUrl) {
3715
+ */ async resolve(ref, overrideRegistryUrl, token) {
3715
3716
  // 1. Parse skill identifier
3716
3717
  const parsed = parseSkillIdentifier(ref);
3717
3718
  const shortName = getShortName(parsed.fullName);
@@ -3719,7 +3720,8 @@ class RegistryResolver {
3719
3720
  const registryUrl = overrideRegistryUrl || getRegistryUrl(parsed.scope);
3720
3721
  // 3. Create client and resolve version
3721
3722
  const client = new RegistryClient({
3722
- registry: registryUrl
3723
+ registry: registryUrl,
3724
+ token
3723
3725
  });
3724
3726
  const version = await client.resolveVersion(parsed.fullName, parsed.version);
3725
3727
  // 4. Download tarball
@@ -4129,6 +4131,9 @@ class RegistryResolver {
4129
4131
  const locked = this.lockManager.get(parsed.name);
4130
4132
  if (locked?.registry) return locked.registry;
4131
4133
  // Slow path: probe configured registries (skip git hosts)
4134
+ // Note: token is intentionally NOT passed during probe to avoid leaking
4135
+ // credentials to unrelated registries. Token is only used after the
4136
+ // target registry is determined.
4132
4137
  const registries = this.config.getRegistries();
4133
4138
  for (const [name, url] of Object.entries(registries))if (!this.isGitHostRegistry(name, url)) try {
4134
4139
  const client = new RegistryClient({
@@ -4596,7 +4601,8 @@ class RegistryResolver {
4596
4601
  const parsed = parseSkillIdentifier(ref);
4597
4602
  const registryUrl = await this.resolveRegistryUrl(ref, options.registry);
4598
4603
  const client = new RegistryClient({
4599
- registry: registryUrl
4604
+ registry: registryUrl,
4605
+ token: options.token
4600
4606
  });
4601
4607
  // Query skill info to determine source_type
4602
4608
  let skillInfo;
@@ -4617,7 +4623,7 @@ class RegistryResolver {
4617
4623
  });
4618
4624
  // 1. Resolve registry skill (pass pre-resolved registryUrl)
4619
4625
  logger_logger["package"](`Resolving ${ref} from registry...`);
4620
- const resolved = await this.registryResolver.resolve(ref, registryUrl);
4626
+ const resolved = await this.registryResolver.resolve(ref, registryUrl, options.token);
4621
4627
  const { shortName, version, registryUrl: resolvedRegistryUrl, tarball, parsed: resolvedParsed } = resolved;
4622
4628
  // 2. Check if already installed (skip if --force)
4623
4629
  const skillPath = this.getSkillPath(shortName);
@@ -4827,7 +4833,8 @@ class RegistryResolver {
4827
4833
  const version = 'latest';
4828
4834
  // Download tarball via RegistryClient (handles auth + 302 redirect to signed URL)
4829
4835
  const client = new RegistryClient({
4830
- registry: registryUrl
4836
+ registry: registryUrl,
4837
+ token: options.token
4831
4838
  });
4832
4839
  const { tarball } = await client.downloadSkill(parsed.fullName, version);
4833
4840
  logger_logger["package"](`Installing ${shortName} from ${registryUrl} to ${targetAgents.length} agent(s)...`);
@@ -244,6 +244,8 @@ export interface InstallOptions {
244
244
  yes?: boolean;
245
245
  /** Registry URL override (for registry-based installs) */
246
246
  registry?: string;
247
+ /** Auth token for registry API requests (enables private skill access) */
248
+ token?: string;
247
249
  /** Registry context for web-published skills (carries registry name through Git/HTTP install) */
248
250
  registryContext?: RegistryInstallContext;
249
251
  }
@@ -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":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAMxE;;GAEG;AACH,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC;AAEvC;;GAEG;AACH,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAEvE;;GAEG;AACH,YAAY,EACV,WAAW,EACX,kBAAkB,GACnB,MAAM,yBAAyB,CAAC;AAMjC;;;;;;;;GAQG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC;AAEjC;;;;GAIG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC;AAE9B;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,kDAAkD;IAClD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yBAAyB;IACzB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,wCAAwC;IACxC,WAAW,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IACjC,sFAAsF;IACtF,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,sBAAsB;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,2BAA2B;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,4BAA4B;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+BAA+B;IAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACjC,oDAAoD;IACpD,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B,4BAA4B;IAC5B,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,mCAAmC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;CAC3C;AAMD;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,qCAAqC;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,uCAAuC;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,gEAAgE;IAChE,GAAG,EAAE,MAAM,CAAC;IACZ,wEAAwE;IACxE,QAAQ,EAAE,MAAM,CAAC;IACjB,wBAAwB;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,wBAAwB;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,wBAAwB;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,oBAAoB;IACpB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;CACrC;AAMD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;IAC3D,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,KAAK,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;CACxC;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,iBAAiB;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,qBAAqB;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uCAAuC;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6BAA6B;IAC7B,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,eAAe;IACf,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,6BAA6B;IAC7B,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B,0BAA0B;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACxC,6BAA6B;IAC7B,aAAa,CAAC,EAAE,kBAAkB,CAAC;CACpC;AAMD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,0CAA0C;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,yBAAyB;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,sBAAsB;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,6BAA6B;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,4BAA4B;IAC5B,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,gCAAgC;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,4CAA4C;IAC5C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4DAA4D;IAC5D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,MAAM,WAAW,GACnB,OAAO,GACP,QAAQ,GACR,OAAO,GACP,QAAQ,GACR,QAAQ,CAAC;AAEb;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,WAAW,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,iBAAiB;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,wBAAwB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,qBAAqB;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa;IACb,MAAM,EAAE,MAAM,CAAC;IACf,qBAAqB;IACrB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,qBAAqB;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,8DAA8D;IAC9D,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC;CACtB;AAMD;;;;;;;GAOG;AACH,MAAM,WAAW,sBAAsB;IACrC,mFAAmF;IACnF,SAAS,EAAE,MAAM,CAAC;IAClB,qGAAqG;IACrG,SAAS,EAAE,MAAM,CAAC;IAClB,4FAA4F;IAC5F,UAAU,EAAE,MAAM,CAAC;IACnB,4EAA4E;IAC5E,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,sBAAsB;IACtB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,0BAA0B;IAC1B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,0BAA0B;IAC1B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,yBAAyB;IACzB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,wCAAwC;IACxC,IAAI,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IAC1B,wBAAwB;IACxB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0EAA0E;IAC1E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iGAAiG;IACjG,eAAe,CAAC,EAAE,sBAAsB,CAAC;CAC1C;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,iBAAiB;IACjB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,yBAAyB;IACzB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAMD;;;;;;GAMG;AACH,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,YAAY,GAAG,OAAO,CAAC;AAE/F;;;GAGG;AACH,MAAM,WAAW,SAAS;IACxB,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,kBAAkB;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0DAA0D;IAC1D,WAAW,CAAC,EAAE,UAAU,CAAC;IACzB,yDAAyD;IACzD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wFAAwF;IACxF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mBAAmB;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yBAAyB;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4BAA4B;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "reskill",
3
- "version": "1.11.2",
3
+ "version": "1.13.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",