itismyskillmarket 1.3.24 → 1.3.25

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/dist/index.js CHANGED
@@ -2816,54 +2816,81 @@ SkillMarket CLI
2816
2816
  Usage: skm <command> [options]
2817
2817
 
2818
2818
  Commands:
2819
- ls [options] List available skills
2820
- --installed Show only installed skills
2821
- --updates Check for updates
2822
- --page <n> Page number (default: 1)
2823
- --limit <n> Items per page (default: 20)
2824
- -s, --search Search by keyword
2825
- info <skill-id> Display skill information
2826
- install <skill> Install a skill
2827
- @version Install specific version
2828
- --platform Target platforms (opencode,claude,vscode)
2829
- --force Overwrite if already installed
2830
- uninstall <skill> Remove an installed skill
2831
- --platform Target platforms
2832
- --all Uninstall ALL installed skills
2833
- --dry-run Preview without deleting
2834
- -y, --yes Skip confirmation
2835
- update [options] Update skills
2836
- --all Update all skills
2837
- sync Synchronize platform links
2838
- platforms Show available platforms
2839
- config View all configuration
2840
- config get <key> Get a config value
2841
- config set <key> Set a config value
2842
- config reset [key] Reset config to defaults
2819
+ ls [options] List available skills
2820
+ --installed Show only installed skills
2821
+ --updates Check for updates
2822
+ --page <n> Page number (default: 1)
2823
+ --limit <n> Items per page (default: 20)
2824
+ -s, --search Search by keyword
2825
+ search <keyword> Search skills from npm registry
2826
+ info <skill> Display skill information
2827
+ install <skill> Install a skill from npm or GitHub
2828
+ @<version> Install specific version
2829
+ --platform Target platforms (opencode,claude,...)
2830
+ --force Overwrite if already installed
2831
+ -b, --branch GitHub branch to install from
2832
+ -c, --commit GitHub commit to install from
2833
+ uninstall <skill> Remove an installed skill
2834
+ --platform Target platforms
2835
+ --all Uninstall ALL installed skills
2836
+ --dry-run Preview without deleting
2837
+ -y, --yes Skip confirmation
2838
+ update [skill] Update installed skills (all if no skill specified)
2839
+ --all Update all skills
2840
+ publish <skill> Publish a skill to npm
2841
+ -v, --version Specify version
2842
+ verify <skill> Verify skill integrity and format
2843
+ sync [skill] Synchronize platform links (or sync a skill to latest)
2844
+ platforms Show available platforms
2845
+ gui [port] Start SkillMarket GUI web interface
2846
+ config View and manage configuration
2847
+ config get <key> Get a config value
2848
+ config set <key> <val> Set a config value
2849
+ config reset [key] Reset config to defaults
2850
+ admin Admin: manage published skills
2851
+ admin ls List all published skills
2852
+ admin info <skill> Show detailed info for a published skill
2853
+ admin search <keyword> Search published skills
2854
+ admin stats Publishing statistics
2855
+ admin verify <skill> Verify a published skill
2856
+ admin deprecate <skill> Deprecate a skill (--version, --message)
2857
+ admin unpublish <skill> Unpublish a skill (--version, --force)
2858
+ admin tag set/tag rm/tag ls Manage dist-tags
2859
+ admin owner add/rm Manage package maintainers
2860
+ admin access <skill> Set package access (public|restricted)
2843
2861
 
2844
2862
  Examples:
2845
- skm ls List all available skills (page 1)
2846
- skm ls --page 2 Go to page 2
2847
- skm ls --limit 10 Show 10 items per page
2848
- skm ls --search brain Search skills by keyword
2849
- skm ls -s brain Search with short form
2850
- skm ls --installed Show installed skills only
2851
- skm ls --installed --search test Search installed skills
2852
- skm ls --installed --page 2
2853
- skm info brainstorming View skill details
2854
- skm install brainstorming Install to all platforms
2855
- skm install brainstorming --platform opencode Install to OpenCode only
2856
- skm install brainstorming --platform claude,vscode Install to multiple
2857
- skm uninstall brainstorming
2858
- skm uninstall --all Uninstall all skills (with confirmation)
2859
- skm uninstall --all --yes Force uninstall all without confirmation
2860
- skm uninstall brainstorming --dry-run Preview uninstall
2861
- skm platforms Show available platforms
2862
- skm config View all configuration
2863
- skm config get npmRegistry View specific config
2863
+ skm ls List available skills
2864
+ skm ls --page 2 --limit 10 Paginated listing
2865
+ skm ls --installed Show installed skills
2866
+ skm ls -s brain Search skills by keyword
2867
+ skm search test Search from registry
2868
+ skm info brainstorming View skill details
2869
+ skm install brainstorming Install to all detected platforms
2870
+ skm install brainstorming@1.0.0 Install specific version
2871
+ skm install owner/repo Install from GitHub
2872
+ skm install brainstorming --platform opencode Install to specific platform
2873
+ skm uninstall brainstorming Uninstall skill
2874
+ skm uninstall --all Uninstall all skills
2875
+ skm uninstall --all --yes Force uninstall all without confirmation
2876
+ skm uninstall --dry-run Preview uninstall
2877
+ skm update brainstorming Update specific skill
2878
+ skm update Update all skills
2879
+ skm publish my-skill Publish a skill
2880
+ skm publish my-skill --version 1.0.1 Publish specific version
2881
+ skm verify my-skill Verify skill integrity
2882
+ skm sync Sync platform links
2883
+ skm sync brainstorming Sync skill to latest version
2884
+ skm platforms Show available platforms
2885
+ skm gui Start GUI on default port 18770
2886
+ skm gui 18790 Start GUI on custom port
2887
+ skm config View all configuration
2888
+ skm config get npmRegistry View specific config
2864
2889
  skm config set npmRegistry https://registry.npmmirror.com Set mirror registry
2865
- skm config reset npmScope Reset config to default
2866
- skm config reset --all Reset all config
2890
+ skm config reset npmScope Reset config to default
2891
+ skm config reset --all Reset all config
2892
+ skm admin ls List all published skills
2893
+ skm admin deprecate my-skill --message "Use v2" Deprecate a skill
2867
2894
  `);
2868
2895
  process.exit(0);
2869
2896
  }
package/gui/app.js CHANGED
@@ -92,6 +92,11 @@ const translations = {
92
92
  'status.unavailable': '❌ Not detected',
93
93
  'status.skillsInstalled': '{count} skills installed',
94
94
 
95
+ // Platform 详情
96
+ 'platform.id': 'Platform ID',
97
+ 'platform.installedSkills': 'Installed Skills ({count})',
98
+ 'platform.noSkills': 'No skills installed on this platform.',
99
+
95
100
  // 详情视图
96
101
  'detail.description': 'Description',
97
102
  'detail.details': 'Details',
@@ -248,10 +253,21 @@ const translations = {
248
253
  // 搜索
249
254
  'search.placeholder': '🔍 搜索技能...',
250
255
 
256
+ // 排序
257
+ 'sort.nameAsc': '名称 A-Z',
258
+ 'sort.nameDesc': '名称 Z-A',
259
+ 'sort.recentlyUpdated': '最近更新',
260
+ 'sort.leastUpdated': '最早更新',
261
+
262
+ // 筛选
263
+ 'filter.allPlatforms': '所有平台',
264
+
251
265
  // 分页
252
266
  'pagination.prev': '← 上一页',
253
267
  'pagination.next': '下一页 →',
254
268
  'pagination.pageInfo': '第 {page} 页 / 共 {totalPages} 页',
269
+ 'pagination.goTo': '跳转到',
270
+ 'pagination.go': '跳转',
255
271
 
256
272
  // 每页数量
257
273
  'pageSize.10': '每页 10 条',
@@ -263,6 +279,11 @@ const translations = {
263
279
  'status.unavailable': '❌ 未检测到',
264
280
  'status.skillsInstalled': '已安装 {count} 个技能',
265
281
 
282
+ // Platform 详情
283
+ 'platform.id': '平台 ID',
284
+ 'platform.installedSkills': '已安装技能({count} 个)',
285
+ 'platform.noSkills': '该平台未安装任何技能',
286
+
266
287
  // 详情视图
267
288
  'detail.description': '描述',
268
289
  'detail.details': '详细信息',
@@ -471,6 +492,28 @@ function applyI18nToStaticElements() {
471
492
  `;
472
493
  }
473
494
 
495
+ // sort-select 排序选项
496
+ const sortSelect = document.getElementById('sort-select');
497
+ if (sortSelect) {
498
+ const currentSort = sortSelect.value || state.sortBy;
499
+ sortSelect.innerHTML = `
500
+ <option value="name"${currentSort === 'name' ? ' selected' : ''}>${t('sort.nameAsc')}</option>
501
+ <option value="-name"${currentSort === '-name' ? ' selected' : ''}>${t('sort.nameDesc')}</option>
502
+ <option value="-updated"${currentSort === '-updated' ? ' selected' : ''}>${t('sort.recentlyUpdated')}</option>
503
+ <option value="updated"${currentSort === 'updated' ? ' selected' : ''}>${t('sort.leastUpdated')}</option>
504
+ `;
505
+ }
506
+
507
+ // platform-filter 默认选项(后续由 updatePlatformFilterOptions 补充完整列表)
508
+ const platformFilter = document.getElementById('platform-filter');
509
+ if (platformFilter && platformFilter.options.length <= 1) {
510
+ const currentFilter = platformFilter.value;
511
+ platformFilter.innerHTML = `
512
+ <option value="">${t('filter.allPlatforms')}</option>
513
+ `;
514
+ if (currentFilter) platformFilter.value = currentFilter;
515
+ }
516
+
474
517
  // 按钮文本
475
518
  const refreshSkills = document.getElementById('refresh-skills');
476
519
  const refreshAdmin = document.getElementById('refresh-admin');
@@ -817,13 +860,14 @@ function updatePlatformFilterOptions(skills) {
817
860
  const currentVal = select.value;
818
861
  const sortedPlatforms = [...allPlatforms].sort();
819
862
 
820
- // 只有当平台列表有变化时才重新渲染
863
+ // 当平台列表或当前语言变化时才重新渲染
821
864
  const currentOptions = Array.from(select.options).slice(1).map(o => o.value).sort().join(',');
822
865
  const newOptions = sortedPlatforms.join(',');
823
- if (currentOptions === newOptions) return;
866
+ const currentAllText = select.options[0]?.textContent || '';
867
+ if (currentOptions === newOptions && currentAllText === t('filter.allPlatforms')) return;
824
868
 
825
869
  select.innerHTML = `
826
- <option value="">All Platforms</option>
870
+ <option value="">${t('filter.allPlatforms')}</option>
827
871
  ${sortedPlatforms.map(p => `<option value="${p}"${currentVal === p ? ' selected' : ''}>${p}</option>`).join('')}
828
872
  `;
829
873
  select.value = currentVal && allPlatforms.has(currentVal) ? currentVal : '';
@@ -844,10 +888,10 @@ function renderPagination(currentPage, totalPages) {
844
888
  <button ${currentPage <= 1 ? 'disabled' : ''} onclick="changePage(${currentPage - 1})">${t('pagination.prev')}</button>
845
889
  <span class="page-info">${t('pagination.pageInfo', { page: currentPage, totalPages: totalPages })}</span>
846
890
  <span class="page-jump">
847
- <label>Go to</label>
891
+ <label>${t('pagination.goTo')}</label>
848
892
  <input type="number" id="page-jump-input" min="1" max="${totalPages}" value="${currentPage}"
849
893
  onkeydown="if(event.key==='Enter')jumpToPage()">
850
- <button onclick="jumpToPage()">Go</button>
894
+ <button onclick="jumpToPage()">${t('pagination.go')}</button>
851
895
  </span>
852
896
  <button ${currentPage >= totalPages ? 'disabled' : ''} onclick="changePage(${currentPage + 1})">${t('pagination.next')}</button>
853
897
  `;
@@ -910,7 +954,7 @@ function renderPlatforms(platforms, container) {
910
954
  </div>
911
955
  </div>
912
956
  <div>
913
- ${platform.installedCount ? `<span>${t('status.skillsInstalled', { count: platform.installedCount })}</span>` : '<span style="color: var(--text-muted); font-size: 0.85rem;">0 installed</span>'}
957
+ ${platform.installedCount ? `<span>${t('status.skillsInstalled', { count: platform.installedCount })}</span>` : `<span style="color: var(--text-muted); font-size: 0.85rem;">${t('status.skillsInstalled', { count: 0 })}</span>`}
914
958
  </div>
915
959
  </div>
916
960
  `).join('');
@@ -956,13 +1000,13 @@ async function showPlatformDetail(platformId) {
956
1000
  </div>
957
1001
  </div>
958
1002
  <div class="admin-skill-row" style="background: var(--bg-card); padding: 10px 16px; margin-bottom: 12px;">
959
- <span style="color: var(--text-muted); font-size: 0.85rem;">Platform ID</span>
1003
+ <span style="color: var(--text-muted); font-size: 0.85rem;">${t('platform.id')}</span>
960
1004
  <span style="color: var(--text-secondary); font-size: 0.9rem; font-family: monospace;">${platform.id}</span>
961
1005
  </div>
962
1006
  <h3 style="color: var(--text-secondary); margin-bottom: 10px; font-size: 1rem;">
963
- Installed Skills (${skills.length})
1007
+ ${t('platform.installedSkills', { count: skills.length })}
964
1008
  </h3>
965
- ${skills.length === 0 ? '<div class="loading" style="padding: 20px;">No skills installed on this platform.</div>' : `
1009
+ ${skills.length === 0 ? `<div class="loading" style="padding: 20px;">${t('platform.noSkills')}</div>` : `
966
1010
  <div style="display: flex; flex-direction: column; gap: 6px;">
967
1011
  ${skills.map((skill, i) => `
968
1012
  <div class="admin-skill-row" style="cursor: pointer;" onclick="showSkillDetail('${skill.id}')">
@@ -1083,16 +1127,32 @@ skm config reset --all # 全部恢复默认</pre>
1083
1127
  <tbody>
1084
1128
  <tr><td><code>skm ls</code></td><td>列出可用 skills</td></tr>
1085
1129
  <tr><td><code>skm ls --installed</code></td><td>列出已安装 skills</td></tr>
1130
+ <tr><td><code>skm search &lt;keyword&gt;</code></td><td>搜索 skills</td></tr>
1131
+ <tr><td><code>skm info &lt;skill&gt;</code></td><td>查看 skill 详情</td></tr>
1086
1132
  <tr><td><code>skm install &lt;skill&gt;</code></td><td>安装 skill 到所有平台</td></tr>
1133
+ <tr><td><code>skm install &lt;skill&gt;@&lt;ver&gt;</code></td><td>安装指定版本</td></tr>
1087
1134
  <tr><td><code>skm install &lt;skill&gt; --platform opencode</code></td><td>安装到指定平台</td></tr>
1135
+ <tr><td><code>skm install &lt;skill&gt; --force</code></td><td>强制覆盖安装</td></tr>
1136
+ <tr><td><code>skm install owner/repo</code></td><td>从 GitHub 安装</td></tr>
1088
1137
  <tr><td><code>skm uninstall &lt;skill&gt;</code></td><td>卸载 skill</td></tr>
1089
- <tr><td><code>skm update &lt;skill&gt;</code></td><td>更新 skill</td></tr>
1138
+ <tr><td><code>skm uninstall --all</code></td><td>卸载所有 skills</td></tr>
1139
+ <tr><td><code>skm update [skill]</code></td><td>更新 skill(不指定则更新全部)</td></tr>
1090
1140
  <tr><td><code>skm update --all</code></td><td>更新所有 skills</td></tr>
1141
+ <tr><td><code>skm publish &lt;skill&gt;</code></td><td>发布 skill 到 npm</td></tr>
1142
+ <tr><td><code>skm verify &lt;skill&gt;</code></td><td>验证 skill 完整性</td></tr>
1091
1143
  <tr><td><code>skm platforms</code></td><td>查看可用平台</td></tr>
1144
+ <tr><td><code>skm sync</code></td><td>同步平台链接</td></tr>
1145
+ <tr><td><code>skm sync &lt;skill&gt;</code></td><td>同步指定 skill 到最新</td></tr>
1092
1146
  <tr><td><code>skm gui</code></td><td>启动图形界面</td></tr>
1093
1147
  <tr><td><code>skm gui 18790</code></td><td>指定端口启动 GUI</td></tr>
1094
1148
  <tr><td><code>skm config</code></td><td>查看所有配置项</td></tr>
1095
- <tr><td><code>skm config set npmRegistry https://...</code></td><td>设置 registry 镜像</td></tr>
1149
+ <tr><td><code>skm config get &lt;key&gt;</code></td><td>查看指定配置</td></tr>
1150
+ <tr><td><code>skm config set &lt;key&gt; &lt;value&gt;</code></td><td>设置配置值</td></tr>
1151
+ <tr><td><code>skm config reset [key]</code></td><td>恢复配置为默认值</td></tr>
1152
+ <tr><td><code>skm admin ls</code></td><td>列出所有已发布 skills</td></tr>
1153
+ <tr><td><code>skm admin info &lt;skill&gt;</code></td><td>查看已发布 skill 详情</td></tr>
1154
+ <tr><td><code>skm admin deprecate &lt;skill&gt;</code></td><td>废弃 skill</td></tr>
1155
+ <tr><td><code>skm admin unpublish &lt;skill&gt;</code></td><td>取消发布 skill</td></tr>
1096
1156
  </tbody>
1097
1157
  </table>
1098
1158
  </div>
package/gui/index.html CHANGED
@@ -37,15 +37,8 @@
37
37
  <h2>Available Skills</h2>
38
38
  <div class="controls">
39
39
  <input type="text" id="search-input" placeholder="🔍 Search skills...">
40
- <select id="sort-select">
41
- <option value="name">Name A-Z</option>
42
- <option value="-name">Name Z-A</option>
43
- <option value="-updated">Recently Updated</option>
44
- <option value="updated">Least Recently Updated</option>
45
- </select>
46
- <select id="platform-filter">
47
- <option value="">All Platforms</option>
48
- </select>
40
+ <select id="sort-select"></select>
41
+ <select id="platform-filter"></select>
49
42
  <select id="page-size">
50
43
  <option value="10">10 per page</option>
51
44
  <option value="20" selected>20 per page</option>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "itismyskillmarket",
3
- "version": "1.3.24",
3
+ "version": "1.3.25",
4
4
  "description": "Cross-platform skill manager for AI coding tools",
5
5
  "type": "module",
6
6
  "bin": {