itismyskillmarket 1.3.5 → 1.3.7

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.
Files changed (63) hide show
  1. package/README.md +10 -5
  2. package/dist/index.js +462 -13
  3. package/gui/app.js +415 -0
  4. package/gui/index.html +84 -0
  5. package/gui/style.css +454 -0
  6. package/package.json +6 -2
  7. package/.github/workflows/publish-npm.yml +0 -59
  8. package/.github/workflows/publish-skill.yml +0 -72
  9. package/5e51cb7aa8b8e60d49d86f4689f5d4d1.png +0 -0
  10. package/CHANGELOG.md +0 -549
  11. package/DEVELOPMENT.md +0 -376
  12. package/SKILLMARKET-GUIDE.md +0 -288
  13. package/docs/WEEKLY-UPDATE-2026-04-23.md +0 -43
  14. package/docs/plans/2026-04-01-skillmarket-design.md +0 -267
  15. package/docs/plans/2026-04-01-skillmarket-implementation.md +0 -1031
  16. package/docs/plans/2026-04-15-cross-platform-adapter-design.md +0 -416
  17. package/docs/plans/2026-04-15-cross-platform-adapter-plan.md +0 -833
  18. package/docs/plans/2026-04-16-keyword-search-design.md +0 -143
  19. package/docs/plans/2026-04-29-weekly-update.md +0 -57
  20. package/skills/README.md +0 -54
  21. package/skills/test-skill/SKILL.md +0 -25
  22. package/skills/test-skill/index.js +0 -66
  23. package/skills/test-skill/metadata.json +0 -9
  24. package/skills/test-skill/package.json +0 -19
  25. package/skills/test-skill-1/SKILL.md +0 -24
  26. package/skills/test-skill-1/index.js +0 -13
  27. package/skills/test-skill-1/metadata.json +0 -9
  28. package/skills/test-skill-1/package.json +0 -16
  29. package/skills/test-skill-2/SKILL.md +0 -25
  30. package/skills/test-skill-2/index.js +0 -13
  31. package/skills/test-skill-2/metadata.json +0 -9
  32. package/skills/test-skill-2/package.json +0 -16
  33. package/src/adapters/base.ts +0 -87
  34. package/src/adapters/claude.ts +0 -31
  35. package/src/adapters/hermes.test.ts +0 -39
  36. package/src/adapters/hermes.ts +0 -77
  37. package/src/adapters/index.ts +0 -11
  38. package/src/adapters/openclaw.test.ts +0 -40
  39. package/src/adapters/openclaw.ts +0 -69
  40. package/src/adapters/opencode.ts +0 -40
  41. package/src/adapters/registry.test.ts +0 -29
  42. package/src/adapters/registry.ts +0 -85
  43. package/src/adapters/vscode.ts +0 -62
  44. package/src/cli.ts +0 -454
  45. package/src/commands/github-install.ts +0 -538
  46. package/src/commands/info.ts +0 -143
  47. package/src/commands/install.ts +0 -312
  48. package/src/commands/ls.ts +0 -307
  49. package/src/commands/npm.ts +0 -353
  50. package/src/commands/registry.ts +0 -159
  51. package/src/commands/search.ts +0 -103
  52. package/src/commands/sync.ts +0 -137
  53. package/src/commands/uninstall.ts +0 -400
  54. package/src/commands/update.ts +0 -113
  55. package/src/constants.test.ts +0 -18
  56. package/src/constants.ts +0 -128
  57. package/src/index.ts +0 -62
  58. package/src/types.ts +0 -172
  59. package/src/utils/dirs.ts +0 -166
  60. package/src/utils/platform.ts +0 -139
  61. package/tsconfig.json +0 -10
  62. package/tsup.config.ts +0 -22
  63. package/wanxuchen-skillmarket-1.0.1.tgz +0 -0
package/gui/style.css ADDED
@@ -0,0 +1,454 @@
1
+ /* =============================================================================
2
+ SkillMarket GUI - Styles
3
+ ============================================================================= */
4
+
5
+ :root {
6
+ --bg-primary: #1a1a2e;
7
+ --bg-secondary: #16213e;
8
+ --bg-card: #0f3460;
9
+ --bg-hover: #1a508b;
10
+ --text-primary: #e94560;
11
+ --text-secondary: #ffffff;
12
+ --text-muted: #a0a0a0;
13
+ --border-color: #0f3460;
14
+ --accent: #e94560;
15
+ --accent-hover: #ff6b81;
16
+ --success: #4caf50;
17
+ --warning: #ff9800;
18
+ --danger: #f44336;
19
+ }
20
+
21
+ * {
22
+ margin: 0;
23
+ padding: 0;
24
+ box-sizing: border-box;
25
+ }
26
+
27
+ body {
28
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
29
+ background: var(--bg-primary);
30
+ color: var(--text-secondary);
31
+ display: flex;
32
+ height: 100vh;
33
+ overflow: hidden;
34
+ }
35
+
36
+ /* -----------------------------------------------------------------------------
37
+ 侧边栏
38
+ ----------------------------------------------------------------------------- */
39
+
40
+ .sidebar {
41
+ width: 240px;
42
+ background: var(--bg-secondary);
43
+ border-right: 1px solid var(--border-color);
44
+ display: flex;
45
+ flex-direction: column;
46
+ padding: 20px 0;
47
+ }
48
+
49
+ .logo {
50
+ padding: 0 20px 20px;
51
+ border-bottom: 1px solid var(--border-color);
52
+ margin-bottom: 20px;
53
+ }
54
+
55
+ .logo h1 {
56
+ font-size: 1.2rem;
57
+ color: var(--accent);
58
+ }
59
+
60
+ nav {
61
+ flex: 1;
62
+ padding: 0 10px;
63
+ }
64
+
65
+ .nav-btn {
66
+ width: 100%;
67
+ padding: 12px 16px;
68
+ margin-bottom: 8px;
69
+ background: transparent;
70
+ border: none;
71
+ color: var(--text-secondary);
72
+ text-align: left;
73
+ cursor: pointer;
74
+ border-radius: 8px;
75
+ font-size: 0.95rem;
76
+ transition: all 0.2s;
77
+ display: flex;
78
+ align-items: center;
79
+ gap: 10px;
80
+ }
81
+
82
+ .nav-btn:hover {
83
+ background: var(--bg-hover);
84
+ }
85
+
86
+ .nav-btn.active {
87
+ background: var(--accent);
88
+ color: white;
89
+ }
90
+
91
+ .nav-btn .icon {
92
+ font-size: 1.2rem;
93
+ }
94
+
95
+ .sidebar-footer {
96
+ padding: 20px;
97
+ border-top: 1px solid var(--border-color);
98
+ }
99
+
100
+ .version {
101
+ color: var(--text-muted);
102
+ font-size: 0.85rem;
103
+ }
104
+
105
+ /* -----------------------------------------------------------------------------
106
+ 主内容区
107
+ ----------------------------------------------------------------------------- */
108
+
109
+ .main-content {
110
+ flex: 1;
111
+ overflow-y: auto;
112
+ padding: 30px;
113
+ }
114
+
115
+ .view {
116
+ display: none;
117
+ }
118
+
119
+ .view.active {
120
+ display: block;
121
+ }
122
+
123
+ .view-header {
124
+ display: flex;
125
+ justify-content: space-between;
126
+ align-items: center;
127
+ margin-bottom: 24px;
128
+ }
129
+
130
+ .view-header h2 {
131
+ font-size: 1.8rem;
132
+ color: var(--text-secondary);
133
+ }
134
+
135
+ .controls {
136
+ display: flex;
137
+ gap: 12px;
138
+ align-items: center;
139
+ }
140
+
141
+ .controls input,
142
+ .controls select {
143
+ padding: 8px 12px;
144
+ background: var(--bg-secondary);
145
+ border: 1px solid var(--border-color);
146
+ color: var(--text-secondary);
147
+ border-radius: 6px;
148
+ font-size: 0.9rem;
149
+ }
150
+
151
+ .controls input {
152
+ width: 250px;
153
+ }
154
+
155
+ /* -----------------------------------------------------------------------------
156
+ 按钮
157
+ ----------------------------------------------------------------------------- */
158
+
159
+ .btn {
160
+ padding: 8px 16px;
161
+ border: none;
162
+ border-radius: 6px;
163
+ cursor: pointer;
164
+ font-size: 0.9rem;
165
+ transition: all 0.2s;
166
+ }
167
+
168
+ .btn-primary {
169
+ background: var(--accent);
170
+ color: white;
171
+ }
172
+
173
+ .btn-primary:hover {
174
+ background: var(--accent-hover);
175
+ }
176
+
177
+ .btn-secondary {
178
+ background: var(--bg-card);
179
+ color: var(--text-secondary);
180
+ border: 1px solid var(--border-color);
181
+ }
182
+
183
+ .btn-secondary:hover {
184
+ background: var(--bg-hover);
185
+ }
186
+
187
+ .btn-success {
188
+ background: var(--success);
189
+ color: white;
190
+ }
191
+
192
+ .btn-danger {
193
+ background: var(--danger);
194
+ color: white;
195
+ }
196
+
197
+ .btn-sm {
198
+ padding: 6px 12px;
199
+ font-size: 0.85rem;
200
+ }
201
+
202
+ /* -----------------------------------------------------------------------------
203
+ Skills 网格
204
+ ----------------------------------------------------------------------------- */
205
+
206
+ .skills-grid {
207
+ display: grid;
208
+ grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
209
+ gap: 16px;
210
+ }
211
+
212
+ .skill-card {
213
+ background: var(--bg-secondary);
214
+ border: 1px solid var(--border-color);
215
+ border-radius: 10px;
216
+ padding: 20px;
217
+ transition: transform 0.2s, border-color 0.2s;
218
+ }
219
+
220
+ .skill-card:hover {
221
+ transform: translateY(-2px);
222
+ border-color: var(--accent);
223
+ }
224
+
225
+ .skill-card h3 {
226
+ font-size: 1.1rem;
227
+ margin-bottom: 8px;
228
+ color: var(--accent);
229
+ }
230
+
231
+ .skill-card .skill-id {
232
+ color: var(--text-muted);
233
+ font-size: 0.85rem;
234
+ margin-bottom: 8px;
235
+ }
236
+
237
+ .skill-card p {
238
+ color: var(--text-secondary);
239
+ font-size: 0.9rem;
240
+ line-height: 1.5;
241
+ margin-bottom: 12px;
242
+ }
243
+
244
+ .skill-card .platforms {
245
+ display: flex;
246
+ flex-wrap: wrap;
247
+ gap: 6px;
248
+ margin-bottom: 12px;
249
+ }
250
+
251
+ .platform-tag {
252
+ padding: 4px 8px;
253
+ background: var(--bg-card);
254
+ border-radius: 4px;
255
+ font-size: 0.8rem;
256
+ color: var(--text-muted);
257
+ }
258
+
259
+ .skill-card .actions {
260
+ display: flex;
261
+ gap: 8px;
262
+ }
263
+
264
+ /* -----------------------------------------------------------------------------
265
+ Platforms 列表
266
+ ----------------------------------------------------------------------------- */
267
+
268
+ .platforms-list {
269
+ display: flex;
270
+ flex-direction: column;
271
+ gap: 12px;
272
+ }
273
+
274
+ .platform-card {
275
+ background: var(--bg-secondary);
276
+ border: 1px solid var(--border-color);
277
+ border-radius: 10px;
278
+ padding: 20px;
279
+ display: flex;
280
+ justify-content: space-between;
281
+ align-items: center;
282
+ }
283
+
284
+ .platform-card h3 {
285
+ font-size: 1.1rem;
286
+ color: var(--text-secondary);
287
+ }
288
+
289
+ .platform-card .status {
290
+ display: flex;
291
+ align-items: center;
292
+ gap: 8px;
293
+ }
294
+
295
+ .status-available {
296
+ color: var(--success);
297
+ }
298
+
299
+ .status-unavailable {
300
+ color: var(--danger);
301
+ }
302
+
303
+ /* -----------------------------------------------------------------------------
304
+ 分页
305
+ ----------------------------------------------------------------------------- */
306
+
307
+ .pagination {
308
+ margin-top: 24px;
309
+ display: flex;
310
+ justify-content: center;
311
+ align-items: center;
312
+ gap: 8px;
313
+ }
314
+
315
+ .pagination button {
316
+ padding: 8px 12px;
317
+ background: var(--bg-secondary);
318
+ border: 1px solid var(--border-color);
319
+ color: var(--text-secondary);
320
+ border-radius: 6px;
321
+ cursor: pointer;
322
+ }
323
+
324
+ .pagination button:hover:not(:disabled) {
325
+ background: var(--bg-hover);
326
+ }
327
+
328
+ .pagination button:disabled {
329
+ opacity: 0.5;
330
+ cursor: not-allowed;
331
+ }
332
+
333
+ .pagination .page-info {
334
+ color: var(--text-muted);
335
+ }
336
+
337
+ /* -----------------------------------------------------------------------------
338
+ 模态框
339
+ ----------------------------------------------------------------------------- */
340
+
341
+ .modal {
342
+ position: fixed;
343
+ top: 0;
344
+ left: 0;
345
+ width: 100%;
346
+ height: 100%;
347
+ background: rgba(0, 0, 0, 0.7);
348
+ display: flex;
349
+ justify-content: center;
350
+ align-items: center;
351
+ z-index: 1000;
352
+ }
353
+
354
+ .modal.hidden {
355
+ display: none;
356
+ }
357
+
358
+ .modal-content {
359
+ background: var(--bg-secondary);
360
+ border: 1px solid var(--border-color);
361
+ border-radius: 12px;
362
+ padding: 30px;
363
+ max-width: 600px;
364
+ width: 90%;
365
+ max-height: 80vh;
366
+ overflow-y: auto;
367
+ position: relative;
368
+ }
369
+
370
+ .modal-close {
371
+ position: absolute;
372
+ top: 15px;
373
+ right: 15px;
374
+ background: none;
375
+ border: none;
376
+ color: var(--text-secondary);
377
+ font-size: 1.5rem;
378
+ cursor: pointer;
379
+ }
380
+
381
+ .modal-content h2 {
382
+ color: var(--accent);
383
+ margin-bottom: 16px;
384
+ }
385
+
386
+ .modal-content .detail-row {
387
+ margin-bottom: 12px;
388
+ }
389
+
390
+ .modal-content .detail-row strong {
391
+ color: var(--text-muted);
392
+ margin-right: 8px;
393
+ }
394
+
395
+ /* -----------------------------------------------------------------------------
396
+ Toast 通知
397
+ ----------------------------------------------------------------------------- */
398
+
399
+ .toast {
400
+ position: fixed;
401
+ bottom: 30px;
402
+ right: 30px;
403
+ padding: 16px 24px;
404
+ background: var(--bg-card);
405
+ border: 1px solid var(--border-color);
406
+ border-radius: 8px;
407
+ color: var(--text-secondary);
408
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
409
+ z-index: 2000;
410
+ transition: all 0.3s;
411
+ }
412
+
413
+ .toast.hidden {
414
+ display: none;
415
+ }
416
+
417
+ .toast.success {
418
+ border-color: var(--success);
419
+ }
420
+
421
+ .toast.error {
422
+ border-color: var(--danger);
423
+ }
424
+
425
+ /* -----------------------------------------------------------------------------
426
+ 加载动画
427
+ ----------------------------------------------------------------------------- */
428
+
429
+ .loading {
430
+ text-align: center;
431
+ padding: 40px;
432
+ color: var(--text-muted);
433
+ }
434
+
435
+ /* -----------------------------------------------------------------------------
436
+ 滚动条
437
+ ----------------------------------------------------------------------------- */
438
+
439
+ ::-webkit-scrollbar {
440
+ width: 8px;
441
+ }
442
+
443
+ ::-webkit-scrollbar-track {
444
+ background: var(--bg-primary);
445
+ }
446
+
447
+ ::-webkit-scrollbar-thumb {
448
+ background: var(--bg-card);
449
+ border-radius: 4px;
450
+ }
451
+
452
+ ::-webkit-scrollbar-thumb:hover {
453
+ background: var(--bg-hover);
454
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "itismyskillmarket",
3
- "version": "1.3.5",
3
+ "version": "1.3.7",
4
4
  "description": "Cross-platform skill manager for AI coding tools",
5
5
  "type": "module",
6
6
  "bin": {
@@ -20,5 +20,9 @@
20
20
  "tsup": "^8.0.0",
21
21
  "typescript": "^5.3.0",
22
22
  "vitest": "^1.2.0"
23
- }
23
+ },
24
+ "files": [
25
+ "dist",
26
+ "gui"
27
+ ]
24
28
  }
@@ -1,59 +0,0 @@
1
- name: Publish to npm
2
-
3
- on:
4
- release:
5
- types: [created]
6
- workflow_dispatch:
7
- inputs:
8
- version:
9
- description: 'Version to publish (e.g., 1.0.6)'
10
- required: true
11
- type: string
12
-
13
- jobs:
14
- publish:
15
- runs-on: ubuntu-latest
16
- steps:
17
- - name: Checkout
18
- uses: actions/checkout@v4
19
-
20
- - name: Update version
21
- if: github.event_name == 'workflow_dispatch'
22
- run: |
23
- CURRENT_VERSION=$(node -p "require('./package.json').version")
24
- if [ "$CURRENT_VERSION" != "${{ github.event.inputs.version }}" ]; then
25
- npm version ${{ github.event.inputs.version }} --no-git-tag-version
26
- else
27
- echo "Version already set to ${{ github.event.inputs.version }}, skipping version update"
28
- fi
29
-
30
- - name: Setup Node
31
- uses: actions/setup-node@v4
32
- with:
33
- node-version: '20'
34
- registry-url: 'https://registry.npmjs.org'
35
-
36
- - name: Install dependencies
37
- run: npm install
38
-
39
- - name: Build
40
- run: npm run build
41
-
42
- - name: Publish to npm
43
- run: npm publish --access=public
44
- env:
45
- NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
46
-
47
- release:
48
- needs: publish
49
- if: github.event_name == 'workflow_dispatch'
50
- runs-on: ubuntu-latest
51
- permissions:
52
- contents: write
53
- steps:
54
- - name: Create GitHub Release
55
- uses: softprops/action-gh-release@v2
56
- with:
57
- tag_name: v${{ github.event.inputs.version }}
58
- name: Release v${{ github.event.inputs.version }}
59
- generate_release_notes: true
@@ -1,72 +0,0 @@
1
- name: Publish Skill
2
-
3
- on:
4
- workflow_dispatch:
5
- inputs:
6
- skill_name:
7
- description: 'Skill name (from skills/ directory)'
8
- required: true
9
- type: string
10
- version:
11
- description: 'Version (optional, defaults to patch)'
12
- required: false
13
- type: string
14
- default: ''
15
-
16
- jobs:
17
- publish:
18
- runs-on: ubuntu-latest
19
- steps:
20
- - name: Checkout
21
- uses: actions/checkout@v4
22
- with:
23
- fetch-depth: 0
24
-
25
- - name: Debug inputs
26
- run: |
27
- echo "skill_name input: '${{ github.event.inputs.skill_name }}'"
28
- echo "version input: '${{ github.event.inputs.version }}'"
29
- ls -la skills/
30
-
31
- - name: Validate skill exists
32
- run: |
33
- SKILL_NAME="${{ github.event.inputs.skill_name }}"
34
- echo "Skill name: $SKILL_NAME"
35
- if [ -z "$SKILL_NAME" ]; then
36
- echo "Error: skill_name is empty!"
37
- exit 1
38
- fi
39
- if [ ! -d "skills/$SKILL_NAME" ]; then
40
- echo "Error: Skill '$SKILL_NAME' not found in skills/ directory"
41
- ls -la skills/
42
- exit 1
43
- fi
44
- echo "Skill directory contents:"
45
- ls -la "skills/$SKILL_NAME/"
46
-
47
- - name: Setup Node
48
- uses: actions/setup-node@v4
49
- with:
50
- node-version: '20'
51
- registry-url: 'https://registry.npmjs.org'
52
-
53
- - name: Install dependencies
54
- run: |
55
- cd "skills/${{ github.event.inputs.skill_name }}"
56
- npm install
57
-
58
- - name: Update version
59
- run: |
60
- cd "skills/${{ github.event.inputs.skill_name }}"
61
- if [ -n "${{ github.event.inputs.version }}" ]; then
62
- npm version ${{ github.event.inputs.version }} --no-git-tag-version
63
- else
64
- npm version minor --no-git-tag-version
65
- fi
66
-
67
- - name: Publish to npm
68
- run: |
69
- cd "skills/${{ github.event.inputs.skill_name }}"
70
- npm publish --access=public
71
- env:
72
- NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}