itismyskillmarket 1.3.13 → 1.3.15

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
@@ -83,12 +83,86 @@ skm verify <skill-name>
83
83
  skm gui
84
84
  skm gui 18790 # Custom port
85
85
 
86
- # Admin: manage published skills
86
+ # Admin: manage published skills (read-only)
87
87
  skm admin ls # List all published skills
88
88
  skm admin info <skill> # View skill details
89
89
  skm admin search <keyword> # Search published skills
90
90
  skm admin stats # Publishing statistics
91
91
  skm admin verify <skill> # Verify published skill
92
+
93
+ # Admin: manage published skills (write operations)
94
+ skm admin deprecate <skill> # Deprecate a skill (--version, --message)
95
+ skm admin unpublish <skill> # Unpublish a skill (--version, --force)
96
+ skm admin tag set <skill> <tag> <v> # Set a dist-tag
97
+ skm admin tag rm <skill> <tag> # Remove a dist-tag
98
+ skm admin tag ls <skill> # List all dist-tags
99
+ skm admin owner add <skill> <user> # Add package maintainer
100
+ skm admin owner rm <skill> <user> # Remove package maintainer
101
+ skm admin access <skill> <level> # Set access (public|restricted)
102
+ ```
103
+
104
+ ## Admin: Cloud Skill Management
105
+
106
+ SkillMarket provides a comprehensive admin command group (`skm admin`) for managing published skills on the npm registry. All write operations use your npm credentials.
107
+
108
+ ### Read-Only Commands
109
+
110
+ | Command | Description |
111
+ |---------|-------------|
112
+ | `skm admin ls` | List all published skills |
113
+ | `skm admin info <skill>` | View full skill details (versions, dist-tags, metadata) |
114
+ | `skm admin search <keyword>` | Search published skills |
115
+ | `skm admin stats` | Publishing statistics dashboard |
116
+ | `skm admin verify <skill>` | Validate published skill structure and metadata |
117
+
118
+ ### Write Operations (Management)
119
+
120
+ | Command | Description |
121
+ |---------|-------------|
122
+ | `skm admin deprecate <skill>` | Mark skill as deprecated (--version, --message) |
123
+ | `skm admin unpublish <skill>` | Remove skill from npm (--version, --force) |
124
+ | `skm admin tag set <skill> <tag> <ver>` | Set a distribution tag (e.g. `beta`, `next`) |
125
+ | `skm admin tag rm <skill> <tag>` | Remove a distribution tag |
126
+ | `skm admin tag ls <skill>` | List all distribution tags |
127
+ | `skm admin owner add <skill> <user>` | Add an npm user as package maintainer |
128
+ | `skm admin owner rm <skill> <user>` | Remove a package maintainer |
129
+ | `skm admin access <skill> <level>` | Set package visibility (public\|restricted) |
130
+
131
+ ### Admin Examples
132
+
133
+ ```bash
134
+ # Deprecate a skill with custom message
135
+ skm admin deprecate brainstorming --message "Use v2 instead"
136
+
137
+ # Unpublish a specific version
138
+ skm admin unpublish my-skill --version 1.0.0
139
+
140
+ # Unpublish entire package (requires --force)
141
+ skm admin unpublish my-skill --force
142
+
143
+ # Manage dist-tags
144
+ skm admin tag set my-skill beta 2.0.0-beta.1
145
+ skm admin tag ls my-skill
146
+ skm admin tag rm my-skill beta
147
+
148
+ # Manage maintainers
149
+ skm admin owner add my-skill collaborator-npm-username
150
+ skm admin owner rm my-skill old-maintainer
151
+
152
+ # Set package to private
153
+ skm admin access my-skill restricted
154
+ ```
155
+
156
+ ### GUI Admin Dashboard
157
+
158
+ The `skm gui` web interface includes an **Admin** view with:
159
+ - **Statistics cards**: Published skills, total/average versions, metadata coverage, total size, platform coverage
160
+ - **Skill management list**: All published skills with inline actions for deprecate, unpublish, tag, owner, and access management
161
+ - **Modal dialogs**: Confirmation dialogs for each management operation
162
+
163
+ ```bash
164
+ # Start GUI and navigate to Admin view
165
+ skm gui
92
166
  ```
93
167
 
94
168
  ## Environment Variables
package/gui/app.js CHANGED
@@ -21,9 +21,23 @@ const state = {
21
21
  document.addEventListener('DOMContentLoaded', () => {
22
22
  initializeNavigation();
23
23
  initializeControls();
24
+ initializeCollapsibleSections();
24
25
  loadSkills();
25
26
  });
26
27
 
28
+ // -----------------------------------------------------------------------------
29
+ // 可折叠侧边栏分组
30
+ // -----------------------------------------------------------------------------
31
+
32
+ function initializeCollapsibleSections() {
33
+ // 默认全部展开
34
+ }
35
+
36
+ function toggleSection(header) {
37
+ const group = header.parentElement;
38
+ group.classList.toggle('collapsed');
39
+ }
40
+
27
41
  // -----------------------------------------------------------------------------
28
42
  // 导航切换
29
43
  // -----------------------------------------------------------------------------
package/gui/index.html CHANGED
@@ -14,24 +14,50 @@
14
14
  <h1>📦 SkillMarket</h1>
15
15
  </div>
16
16
  <nav>
17
- <button class="nav-btn active" data-view="skills">
18
- <span class="icon">📋</span> Skills
19
- </button>
20
- <button class="nav-btn" data-view="installed">
21
- <span class="icon">✅</span> Installed
22
- </button>
23
- <button class="nav-btn" data-view="platforms">
24
- <span class="icon">💻</span> Platforms
25
- </button>
26
- <button class="nav-btn" data-view="help">
27
- <span class="icon">📖</span> Help
28
- </button>
29
- <button class="nav-btn" data-view="admin">
30
- <span class="icon">⚙️</span> Admin
31
- </button>
17
+ <div class="nav-group">
18
+ <div class="nav-section" onclick="toggleSection(this)">
19
+ <span>Browse</span>
20
+ <span class="nav-arrow">▼</span>
21
+ </div>
22
+ <div class="nav-items">
23
+ <button class="nav-btn active" data-view="skills">
24
+ <span class="icon">📋</span> Skills
25
+ </button>
26
+ <button class="nav-btn" data-view="installed">
27
+ <span class="icon">✅</span> Installed
28
+ </button>
29
+ <button class="nav-btn" data-view="platforms">
30
+ <span class="icon">💻</span> Platforms
31
+ </button>
32
+ </div>
33
+ </div>
34
+
35
+ <div class="nav-group">
36
+ <div class="nav-section" onclick="toggleSection(this)">
37
+ <span>Manage</span>
38
+ <span class="nav-arrow">▼</span>
39
+ </div>
40
+ <div class="nav-items">
41
+ <button class="nav-btn" data-view="admin">
42
+ <span class="icon">⚙️</span> Admin
43
+ </button>
44
+ </div>
45
+ </div>
46
+
47
+ <div class="nav-group">
48
+ <div class="nav-section" onclick="toggleSection(this)">
49
+ <span>Support</span>
50
+ <span class="nav-arrow">▼</span>
51
+ </div>
52
+ <div class="nav-items">
53
+ <button class="nav-btn" data-view="help">
54
+ <span class="icon">📖</span> Help
55
+ </button>
56
+ </div>
57
+ </div>
32
58
  </nav>
33
59
  <div class="sidebar-footer">
34
- <span class="version" id="gui-version">v1.3.13</span>
60
+ <span class="version" id="gui-version">v1.3.15</span>
35
61
  </div>
36
62
  </aside>
37
63
 
package/gui/style.css CHANGED
@@ -43,13 +43,13 @@ body {
43
43
  border-right: 1px solid var(--border-color);
44
44
  display: flex;
45
45
  flex-direction: column;
46
- padding: 20px 0;
46
+ padding: 12px 0;
47
47
  }
48
48
 
49
49
  .logo {
50
- padding: 0 20px 20px;
50
+ padding: 0 16px 12px;
51
51
  border-bottom: 1px solid var(--border-color);
52
- margin-bottom: 20px;
52
+ margin-bottom: 8px;
53
53
  }
54
54
 
55
55
  .logo h1 {
@@ -62,17 +62,57 @@ nav {
62
62
  padding: 0 10px;
63
63
  }
64
64
 
65
+ .nav-group {
66
+ margin-bottom: 2px;
67
+ }
68
+
69
+ .nav-group + .nav-group {
70
+ margin-top: 4px;
71
+ }
72
+
73
+ .nav-section {
74
+ display: flex;
75
+ justify-content: space-between;
76
+ align-items: center;
77
+ padding: 10px 12px 4px;
78
+ font-size: 0.7rem;
79
+ font-weight: 600;
80
+ color: var(--text-muted);
81
+ text-transform: uppercase;
82
+ letter-spacing: 1px;
83
+ cursor: pointer;
84
+ user-select: none;
85
+ transition: color 0.2s;
86
+ }
87
+
88
+ .nav-section:hover {
89
+ color: var(--text-secondary);
90
+ }
91
+
92
+ .nav-arrow {
93
+ font-size: 0.55rem;
94
+ transition: transform 0.2s;
95
+ }
96
+
97
+ .nav-group.collapsed .nav-arrow {
98
+ transform: rotate(-90deg);
99
+ }
100
+
101
+ .nav-group.collapsed .nav-items {
102
+ display: none;
103
+ }
104
+
65
105
  .nav-btn {
66
106
  width: 100%;
67
- padding: 12px 16px;
68
- margin-bottom: 8px;
107
+ padding: 10px 14px;
108
+ margin-bottom: 2px;
69
109
  background: transparent;
70
110
  border: none;
71
111
  color: var(--text-secondary);
72
112
  text-align: left;
73
113
  cursor: pointer;
74
- border-radius: 8px;
75
- font-size: 0.95rem;
114
+ border-radius: 6px;
115
+ font-size: 0.9rem;
76
116
  transition: all 0.2s;
77
117
  display: flex;
78
118
  align-items: center;
@@ -89,7 +129,7 @@ nav {
89
129
  }
90
130
 
91
131
  .nav-btn .icon {
92
- font-size: 1.2rem;
132
+ font-size: 1.1rem;
93
133
  }
94
134
 
95
135
  .sidebar-footer {
@@ -110,7 +150,7 @@ nav {
110
150
  flex: 1;
111
151
  overflow-y: auto;
112
152
  min-height: 0; /* flex 子项必须显式允许收缩 */
113
- padding: 30px;
153
+ padding: 20px 28px;
114
154
  }
115
155
 
116
156
  .view {
@@ -127,11 +167,11 @@ nav {
127
167
  display: flex;
128
168
  justify-content: space-between;
129
169
  align-items: center;
130
- margin-bottom: 24px;
170
+ margin-bottom: 16px;
131
171
  }
132
172
 
133
173
  .view-header h2 {
134
- font-size: 1.8rem;
174
+ font-size: 1.5rem;
135
175
  color: var(--text-secondary);
136
176
  }
137
177
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "itismyskillmarket",
3
- "version": "1.3.13",
3
+ "version": "1.3.15",
4
4
  "description": "Cross-platform skill manager for AI coding tools",
5
5
  "type": "module",
6
6
  "bin": {