reskill 1.18.1 → 1.19.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
@@ -65,22 +65,22 @@ npx reskill@latest <command> # Or use npx directly
65
65
 
66
66
  ### Common Options
67
67
 
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
- | `-t, --token <token>` | `install` | Auth token for registry API requests (for CI/CD) |
80
- | `-r, --registry <url>` | `install`, `group`, `publish` | Registry URL override for registry-enabled commands |
81
- | `-j, --json` | `list`, `info`, `outdated`, `doctor`, `group` | Output as JSON |
82
- | `-l, --limit <n>` | `find` | Maximum number of search results |
83
- | `--skip-network` | `doctor` | Skip network connectivity checks |
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
+ | `-t, --token <token>` | `install`, `find`, `group`, `publish`, `login` | Auth token for registry API requests (for CI/CD) |
80
+ | `-r, --registry <url>` | `install`, `find`, `group`, `publish`, `login`, `logout`, `whoami` | Registry URL override for registry-enabled commands |
81
+ | `-j, --json` | `list`, `info`, `outdated`, `doctor`, `group`, `find` | Output as JSON |
82
+ | `-l, --limit <n>` | `find` | Maximum number of search results |
83
+ | `--skip-network` | `doctor` | Skip network connectivity checks |
84
84
 
85
85
  Run `reskill <command> --help` for complete options and detailed usage.
86
86
 
@@ -222,14 +222,25 @@ git config --global url."https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.company.
222
222
 
223
223
  Skills are installed to `.skills/` by default and can be integrated with any agent:
224
224
 
225
- | Agent | Path |
226
- | -------------- | ------------------------------------- |
227
- | Cursor | `.cursor/rules/` or `.cursor/skills/` |
228
- | Claude Code | `.claude/skills/` |
229
- | Codex | `.codex/skills/` |
230
- | Windsurf | `.windsurf/skills/` |
231
- | GitHub Copilot | `.github/skills/` |
232
- | OpenCode | `.opencode/skills/` |
225
+ | Agent | Path |
226
+ | -------------- | ------------------ |
227
+ | Amp | `.agents/skills` |
228
+ | Antigravity | `.agent/skills` |
229
+ | Claude Code | `.claude/skills` |
230
+ | Clawdbot | `skills` |
231
+ | Codex | `.codex/skills` |
232
+ | Cursor | `.cursor/skills` |
233
+ | Droid | `.factory/skills` |
234
+ | Gemini CLI | `.gemini/skills` |
235
+ | GitHub Copilot | `.github/skills` |
236
+ | Goose | `.goose/skills` |
237
+ | Kilo Code | `.kilocode/skills` |
238
+ | Kiro CLI | `.kiro/skills` |
239
+ | Neovate | `.neovate/skills` |
240
+ | OpenCode | `.opencode/skills` |
241
+ | Roo Code | `.roo/skills` |
242
+ | Trae | `.trae/skills` |
243
+ | Windsurf | `.windsurf/skills` |
233
244
 
234
245
  ## Publishing Skills
235
246
 
package/README.zh-CN.md CHANGED
@@ -65,22 +65,22 @@ npx reskill@latest <command> # 或直接使用 npx
65
65
 
66
66
  ### 常用选项
67
67
 
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
- | `-t, --token <token>` | `install` | 认证令牌(用于 CI/CD 访问私有 skill) |
80
- | `-r, --registry <url>` | `install`, `group`, `publish` | 覆盖 registry URL(用于 registry 相关命令) |
81
- | `-j, --json` | `list`, `info`, `outdated`, `doctor`, `group` | JSON 格式输出 |
82
- | `-l, --limit <n>` | `find` | 限制搜索结果数量 |
83
- | `--skip-network` | `doctor` | 跳过网络连通性检查 |
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
+ | `-t, --token <token>` | `install`, `find`, `group`, `publish`, `login` | 认证令牌(用于 CI/CD 访问私有 skill) |
80
+ | `-r, --registry <url>` | `install`, `find`, `group`, `publish`, `login`, `logout`, `whoami` | 覆盖 registry URL(用于 registry 相关命令) |
81
+ | `-j, --json` | `list`, `info`, `outdated`, `doctor`, `group`, `find` | JSON 格式输出 |
82
+ | `-l, --limit <n>` | `find` | 限制搜索结果数量 |
83
+ | `--skip-network` | `doctor` | 跳过网络连通性检查 |
84
84
 
85
85
  运行 `reskill <command> --help` 查看完整选项和详细用法。
86
86
 
@@ -222,14 +222,25 @@ git config --global url."https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.company.
222
222
 
223
223
  Skills 默认安装到 `.skills/`,可与任何 Agent 集成:
224
224
 
225
- | Agent | 路径 |
226
- | -------------- | ------------------------------------- |
227
- | Cursor | `.cursor/rules/` 或 `.cursor/skills/` |
228
- | Claude Code | `.claude/skills/` |
229
- | Codex | `.codex/skills/` |
230
- | Windsurf | `.windsurf/skills/` |
231
- | GitHub Copilot | `.github/skills/` |
232
- | OpenCode | `.opencode/skills/` |
225
+ | Agent | 路径 |
226
+ | -------------- | ------------------ |
227
+ | Amp | `.agents/skills` |
228
+ | Antigravity | `.agent/skills` |
229
+ | Claude Code | `.claude/skills` |
230
+ | Clawdbot | `skills` |
231
+ | Codex | `.codex/skills` |
232
+ | Cursor | `.cursor/skills` |
233
+ | Droid | `.factory/skills` |
234
+ | Gemini CLI | `.gemini/skills` |
235
+ | GitHub Copilot | `.github/skills` |
236
+ | Goose | `.goose/skills` |
237
+ | Kilo Code | `.kilocode/skills` |
238
+ | Kiro CLI | `.kiro/skills` |
239
+ | Neovate | `.neovate/skills` |
240
+ | OpenCode | `.opencode/skills` |
241
+ | Roo Code | `.roo/skills` |
242
+ | Trae | `.trae/skills` |
243
+ | Windsurf | `.windsurf/skills` |
233
244
 
234
245
  ## 发布 Skills
235
246
 
@@ -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;AAgfpC,eAAO,MAAM,YAAY,SAA0D,CAAC;AAqCpF,eAAe,YAAY,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"}
package/dist/cli/index.js CHANGED
@@ -6717,13 +6717,18 @@ function assertValidGroupPath(path) {
6717
6717
  // ============================================================================
6718
6718
  // Client Factory
6719
6719
  // ============================================================================
6720
- function createClient(registry) {
6720
+ function createClient(registry, cliToken) {
6721
+ // --token flag takes highest priority
6722
+ if (cliToken) return new RegistryClient({
6723
+ registry,
6724
+ token: cliToken
6725
+ });
6721
6726
  const authManager = new AuthManager();
6722
6727
  const token = authManager.getToken(registry);
6723
6728
  if (!token) {
6724
6729
  logger_logger.error('Authentication required');
6725
6730
  logger_logger.newline();
6726
- logger_logger.log("Run 'reskill login' to authenticate.");
6731
+ logger_logger.log("Run 'reskill login' to authenticate, or pass --token <token>.");
6727
6732
  process.exit(1);
6728
6733
  }
6729
6734
  return new RegistryClient({
@@ -6821,7 +6826,7 @@ function displayMemberList(members, groupPath, json) {
6821
6826
  // ============================================================================
6822
6827
  async function listAction(options) {
6823
6828
  const registry = resolveRegistry(options.registry);
6824
- const client = createClient(registry);
6829
+ const client = createClient(registry, options.token);
6825
6830
  try {
6826
6831
  const groups = await client.listGroups({
6827
6832
  flat: Boolean(options.tree)
@@ -6848,7 +6853,7 @@ async function createAction(name, options) {
6848
6853
  if (options.parent) {
6849
6854
  const normalizedParent = normalizeGroupPath(options.parent);
6850
6855
  assertValidGroupPath(normalizedParent);
6851
- client = createClient(registry);
6856
+ client = createClient(registry, options.token);
6852
6857
  try {
6853
6858
  const parentGroup = await client.resolveGroup(normalizedParent);
6854
6859
  parentId = parentGroup.id;
@@ -6859,7 +6864,7 @@ async function createAction(name, options) {
6859
6864
  }
6860
6865
  }
6861
6866
  try {
6862
- const ensuredClient = client ?? createClient(registry);
6867
+ const ensuredClient = client ?? createClient(registry, options.token);
6863
6868
  const group = await ensuredClient.createGroup({
6864
6869
  name,
6865
6870
  slug,
@@ -6884,7 +6889,7 @@ async function infoAction(groupPath, options) {
6884
6889
  const normalized = normalizeGroupPath(groupPath);
6885
6890
  assertValidGroupPath(normalized);
6886
6891
  const registry = resolveRegistry(options.registry);
6887
- const client = createClient(registry);
6892
+ const client = createClient(registry, options.token);
6888
6893
  try {
6889
6894
  const detail = await client.resolveGroup(normalized);
6890
6895
  displayGroupDetail(detail, options.json || false);
@@ -6900,7 +6905,7 @@ async function deleteAction(groupPath, options) {
6900
6905
  const normalized = normalizeGroupPath(groupPath);
6901
6906
  assertValidGroupPath(normalized);
6902
6907
  const registry = resolveRegistry(options.registry);
6903
- const client = createClient(registry);
6908
+ const client = createClient(registry, options.token);
6904
6909
  try {
6905
6910
  const detail = await client.resolveGroup(normalized);
6906
6911
  if (options.dryRun) {
@@ -6945,7 +6950,7 @@ async function memberListAction(groupPath, options) {
6945
6950
  const normalized = normalizeGroupPath(groupPath);
6946
6951
  assertValidGroupPath(normalized);
6947
6952
  const registry = resolveRegistry(options.registry);
6948
- const client = createClient(registry);
6953
+ const client = createClient(registry, options.token);
6949
6954
  try {
6950
6955
  const detail = await client.resolveGroup(normalized);
6951
6956
  const members = await client.listGroupMembers(detail.id);
@@ -6959,7 +6964,7 @@ async function memberAddAction(groupPath, userIds, options) {
6959
6964
  const normalized = normalizeGroupPath(groupPath);
6960
6965
  assertValidGroupPath(normalized);
6961
6966
  const registry = resolveRegistry(options.registry);
6962
- const client = createClient(registry);
6967
+ const client = createClient(registry, options.token);
6963
6968
  const role = options.role || 'developer';
6964
6969
  if (!validateRole(role)) {
6965
6970
  logger_logger.error(`Invalid role "${role}". Must be one of: ${VALID_ROLES.join(', ')}`);
@@ -6978,7 +6983,7 @@ async function memberRemoveAction(groupPath, userId, options) {
6978
6983
  const normalized = normalizeGroupPath(groupPath);
6979
6984
  assertValidGroupPath(normalized);
6980
6985
  const registry = resolveRegistry(options.registry);
6981
- const client = createClient(registry);
6986
+ const client = createClient(registry, options.token);
6982
6987
  try {
6983
6988
  const detail = await client.resolveGroup(normalized);
6984
6989
  await client.removeGroupMember(detail.id, userId);
@@ -6992,7 +6997,7 @@ async function memberRoleAction(groupPath, userId, role, options) {
6992
6997
  const normalized = normalizeGroupPath(groupPath);
6993
6998
  assertValidGroupPath(normalized);
6994
6999
  const registry = resolveRegistry(options.registry);
6995
- const client = createClient(registry);
7000
+ const client = createClient(registry, options.token);
6996
7001
  if (!validateRole(role)) {
6997
7002
  logger_logger.error(`Invalid role "${role}". Must be one of: ${VALID_ROLES.join(', ')}`);
6998
7003
  process.exit(1);
@@ -7010,15 +7015,15 @@ async function memberRoleAction(groupPath, userId, role, options) {
7010
7015
  // Command Definitions
7011
7016
  // ============================================================================
7012
7017
  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);
7018
+ 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);
7019
+ 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);
7020
+ 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);
7021
+ 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
7022
  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);
7023
+ 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);
7024
+ 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);
7025
+ 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);
7026
+ 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
7027
  groupCommand.addCommand(memberCommand);
7023
7028
  /**
7024
7029
  * info command - Show skill details
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "reskill",
3
- "version": "1.18.1",
3
+ "version": "1.19.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",