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 +72 -45
- package/gui/app.js +71 -11
- package/gui/index.html +2 -9
- package/package.json +1 -1
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]
|
|
2820
|
-
|
|
2821
|
-
|
|
2822
|
-
|
|
2823
|
-
|
|
2824
|
-
|
|
2825
|
-
|
|
2826
|
-
|
|
2827
|
-
|
|
2828
|
-
|
|
2829
|
-
|
|
2830
|
-
|
|
2831
|
-
|
|
2832
|
-
|
|
2833
|
-
|
|
2834
|
-
|
|
2835
|
-
|
|
2836
|
-
|
|
2837
|
-
|
|
2838
|
-
|
|
2839
|
-
|
|
2840
|
-
|
|
2841
|
-
|
|
2842
|
-
|
|
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
|
|
2846
|
-
skm ls --page 2
|
|
2847
|
-
skm ls --
|
|
2848
|
-
skm ls
|
|
2849
|
-
skm
|
|
2850
|
-
skm
|
|
2851
|
-
skm
|
|
2852
|
-
skm
|
|
2853
|
-
skm
|
|
2854
|
-
skm install brainstorming Install to
|
|
2855
|
-
skm
|
|
2856
|
-
skm
|
|
2857
|
-
skm uninstall
|
|
2858
|
-
skm uninstall --
|
|
2859
|
-
skm
|
|
2860
|
-
skm
|
|
2861
|
-
skm
|
|
2862
|
-
skm
|
|
2863
|
-
skm
|
|
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
|
|
2866
|
-
skm config reset --all
|
|
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
|
-
|
|
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=""
|
|
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
|
|
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()"
|
|
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>` :
|
|
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;"
|
|
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
|
-
|
|
1007
|
+
${t('platform.installedSkills', { count: skills.length })}
|
|
964
1008
|
</h3>
|
|
965
|
-
${skills.length === 0 ?
|
|
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 <keyword></code></td><td>搜索 skills</td></tr>
|
|
1131
|
+
<tr><td><code>skm info <skill></code></td><td>查看 skill 详情</td></tr>
|
|
1086
1132
|
<tr><td><code>skm install <skill></code></td><td>安装 skill 到所有平台</td></tr>
|
|
1133
|
+
<tr><td><code>skm install <skill>@<ver></code></td><td>安装指定版本</td></tr>
|
|
1087
1134
|
<tr><td><code>skm install <skill> --platform opencode</code></td><td>安装到指定平台</td></tr>
|
|
1135
|
+
<tr><td><code>skm install <skill> --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 <skill></code></td><td>卸载 skill</td></tr>
|
|
1089
|
-
<tr><td><code>skm
|
|
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 <skill></code></td><td>发布 skill 到 npm</td></tr>
|
|
1142
|
+
<tr><td><code>skm verify <skill></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 <skill></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
|
|
1149
|
+
<tr><td><code>skm config get <key></code></td><td>查看指定配置</td></tr>
|
|
1150
|
+
<tr><td><code>skm config set <key> <value></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 <skill></code></td><td>查看已发布 skill 详情</td></tr>
|
|
1154
|
+
<tr><td><code>skm admin deprecate <skill></code></td><td>废弃 skill</td></tr>
|
|
1155
|
+
<tr><td><code>skm admin unpublish <skill></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
|
-
|
|
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>
|