mdk-skills 2.3.13 → 2.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.
@@ -0,0 +1 @@
1
+ .status-bar[data-v-bc9519f9]{background:#fff;border-bottom:1px solid #e5e7eb;flex-wrap:wrap;align-items:center;gap:12px;padding:10px 24px;display:flex}.status-item[data-v-bc9519f9]{color:#555;align-items:center;gap:6px;font-size:13px;display:flex}.status-item.clickable[data-v-bc9519f9]{cursor:pointer}.status-item.clickable[data-v-bc9519f9]:hover{color:#2080f0}.status-divider[data-v-bc9519f9]{background:#e0e0e0;width:1px;height:20px}[data-theme=dark] .status-bar{background:#1a1a2e;border-bottom-color:#333}[data-theme=dark] .status-item{color:#aaa}[data-theme=dark] .status-divider{background:#333}*{box-sizing:border-box;margin:0;padding:0}html,body,#app{background:#f5f7fa;height:100%}body{overflow-y:auto}*{scrollbar-width:none;-ms-overflow-style:none}::-webkit-scrollbar{display:none}.app-layout{flex-direction:column;min-height:100vh;padding-top:56px;display:flex}.app-header{z-index:100;background:#fff;border-bottom:1px solid #e5e7eb;align-items:center;height:56px;padding:0 24px;display:flex;position:fixed;top:0;left:0;right:0}.header-inner{justify-content:space-between;align-items:center;width:100%;display:flex}.header-left{align-items:center;gap:32px;display:flex}.logo{color:#1a1a1a;white-space:nowrap;font-size:18px;font-weight:700}.app-content{flex:1;width:100%;max-width:1000px;margin:0 auto;padding:24px}.markdown-content{color:#333;word-wrap:break-word;font-size:14px;line-height:1.7}.markdown-content>:first-child{margin-top:0!important}.markdown-content>:last-child{margin-bottom:0!important}.markdown-content h1{border-bottom:1px solid #eee;margin:20px 0 12px;padding-bottom:8px;font-size:22px;font-weight:700}.markdown-content h2{border-bottom:1px solid #eee;margin:18px 0 10px;padding-bottom:6px;font-size:18px;font-weight:700}.markdown-content h3{margin:16px 0 8px;font-size:16px;font-weight:600}.markdown-content h4{margin:14px 0 6px;font-size:14px;font-weight:600}.markdown-content h5,.markdown-content h6{margin:12px 0 6px;font-size:13px;font-weight:600}.markdown-content p{margin:8px 0}.markdown-content ul,.markdown-content ol{margin:8px 0;padding-left:24px}.markdown-content li{margin:4px 0}.markdown-content blockquote{color:#555;background:#f0f7ff;border-left:4px solid #2080f0;margin:10px 0;padding:8px 16px}.markdown-content blockquote p{margin:4px 0}.markdown-content a{color:#2080f0;text-decoration:none}.markdown-content a:hover{text-decoration:underline}.markdown-content hr{border:none;border-top:1px solid #e0e0e0;margin:16px 0}.markdown-content table{border-collapse:collapse;width:100%;margin:12px 0;font-size:13px}.markdown-content th,.markdown-content td{text-align:left;border:1px solid #e0e0e0;padding:8px 12px}.markdown-content th{background:#f5f7fa;font-weight:600}.markdown-content tr:nth-child(2n) td{background:#fafafa}.markdown-content img{border-radius:4px;max-width:100%;margin:8px 0}.markdown-content code{color:#d63384;background:#f0f0f0;border-radius:3px;padding:2px 6px;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;font-size:13px}.markdown-content pre{border:1px solid #e8e8e8;border-radius:6px;margin:12px 0;padding:0;position:relative;overflow:hidden}.markdown-content pre code{color:#333;tab-size:2;background:#f8f9fa;padding:14px 16px;font-size:13px;line-height:1.5;display:block;overflow-x:auto}.markdown-content pre .copy-btn{color:#999;cursor:pointer;opacity:0;background:#fff;border:1px solid #e0e0e0;border-radius:4px;padding:3px 8px;font-size:11px;transition:opacity .2s;position:absolute;top:6px;right:6px}.readme-fold{border:1px solid #e5e7eb;border-radius:6px;margin-bottom:20px;overflow:hidden}.fold-header{cursor:pointer;-webkit-user-select:none;user-select:none;background:#fafafa;align-items:center;gap:6px;padding:10px 16px;font-size:14px;font-weight:600;display:flex}.fold-header:hover{background:#f0f0f0}.fold-arrow{color:#999;font-size:11px;transition:transform .2s}.fold-arrow.open{transform:rotate(90deg)}.fold-body{padding:0 16px 16px}.markdown-content pre:hover .copy-btn{opacity:1}.markdown-content pre .copy-btn:hover{color:#2080f0;border-color:#2080f0}.header-right{align-items:center;gap:8px;display:flex}[data-theme=dark] html,[data-theme=dark] body,[data-theme=dark] #app{background:#1a1a2e}[data-theme=dark] .app-header{background:#1a1a2e;border-bottom-color:#333}[data-theme=dark] .app-content{background:0 0}[data-theme=dark] .readme-fold{border-color:#333}[data-theme=dark] .fold-header{color:#e0e0e0;background:#252538}[data-theme=dark] .fold-header:hover{background:#2a2a40}[data-theme=dark] .fold-body{background:#1e1e32}[data-theme=dark] .fold-arrow{color:#888}[data-theme=dark] .markdown-content{color:#ccc}[data-theme=dark] .markdown-content h1,[data-theme=dark] .markdown-content h2{color:#eee;border-bottom-color:#333}[data-theme=dark] .markdown-content h3,[data-theme=dark] .markdown-content h4{color:#eee}[data-theme=dark] .markdown-content code{color:#e06c9f;background:#2a2a40}[data-theme=dark] .markdown-content pre{border-color:#333}[data-theme=dark] .markdown-content pre code{color:#d4d4d4;background:#1e1e2e}[data-theme=dark] .markdown-content blockquote{color:#bbb;background:#252538;border-left-color:#4a6cf7}[data-theme=dark] .markdown-content a{color:#6a8cff}[data-theme=dark] .markdown-content th{background:#252538}[data-theme=dark] .markdown-content td{border-color:#333}[data-theme=dark] .markdown-content tr:nth-child(2n) td{background:#222238}[data-theme=dark] .markdown-content hr{border-top-color:#333}[data-theme=dark] .markdown-content img{filter:brightness(.85)}[data-theme=dark] .page-header h2{color:#e0e0e0}[data-theme=dark] .scene-desc{color:#aaa}.fade-enter-active,.fade-leave-active{transition:opacity .9s,transform .9s}.fade-enter-from{opacity:0;transform:translateY(6px)}.fade-leave-to{opacity:0}.skill-card[data-v-f2c0de50]{cursor:pointer;margin-bottom:12px;transition:box-shadow .2s}.skill-card[data-v-f2c0de50]:hover{box-shadow:0 2px 8px #00000014}.skill-meta[data-v-f2c0de50]{align-items:center;gap:8px;margin-bottom:8px;display:flex}.skill-version[data-v-f2c0de50]{color:#888;font-family:monospace;font-size:12px}.skill-desc[data-v-f2c0de50]{color:#666;text-overflow:ellipsis;white-space:nowrap;margin:0;font-size:13px;overflow:hidden}.modal-overlay[data-v-12c196d8]{z-index:2000;background:#00000073;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.modal-card[data-v-12c196d8]{background:#fff;border-radius:8px;flex-direction:column;width:90%;max-height:85vh;display:flex;box-shadow:0 8px 32px #0000001f}.modal-header[data-v-12c196d8]{justify-content:space-between;align-items:center;padding:14px 20px 0;display:flex}.modal-title[data-v-12c196d8]{color:#333;font-size:16px;font-weight:600}.modal-close[data-v-12c196d8]{color:#999;cursor:pointer;background:0 0;border:none;border-radius:4px;justify-content:center;align-items:center;width:28px;height:28px;font-size:20px;line-height:1;transition:background .15s,color .15s;display:flex}.modal-close[data-v-12c196d8]:hover{color:#333;background:#f0f0f0}.modal-body[data-v-12c196d8]{padding:16px 20px;overflow-y:auto}.modal-footer[data-v-12c196d8]{border-top:1px solid #f0f0f0;justify-content:flex-end;gap:8px;padding:12px 20px 16px;display:flex}.modal-fade-enter-active[data-v-12c196d8]{transition:opacity .2s}.modal-fade-leave-active[data-v-12c196d8]{transition:opacity .15s}.modal-fade-enter-from[data-v-12c196d8],.modal-fade-leave-to[data-v-12c196d8]{opacity:0}[data-theme=dark] .modal-card{background:#252538;box-shadow:0 8px 32px #0006}[data-theme=dark] .modal-title{color:#e0e0e0}[data-theme=dark] .modal-close{color:#777}[data-theme=dark] .modal-close:hover{color:#e0e0e0;background:#2a2a40}[data-theme=dark] .modal-footer{border-top-color:#333}[data-theme=dark] .modal-overlay{background:#0009}.dashboard[data-v-17417773]{overflow-anchor:auto}.page-header[data-v-17417773]{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px;margin-bottom:4px;display:flex}.page-header h2[data-v-17417773]{font-size:20px;font-weight:600}.header-actions[data-v-17417773]{align-items:center;gap:8px;display:flex}.tag-filter[data-v-17417773]{flex-wrap:wrap;align-items:center;gap:6px;margin-bottom:16px;display:flex}.detail-status[data-v-17417773]{justify-content:center;padding:40px 0;display:flex}.detail-body[data-v-17417773]{max-height:65vh;overflow-y:auto}.edit-panel[data-v-17417773]{margin-bottom:4px}.edit-row[data-v-17417773]{align-items:flex-start;gap:10px;margin-bottom:10px;display:flex}.edit-label[data-v-17417773]{color:#888;flex-shrink:0;width:50px;font-size:13px;line-height:30px}.update-count-hint[data-v-17417773]{color:#e68a00;margin-left:8px;font-family:monospace;font-size:12px}.pull-modal-body[data-v-17417773]{min-height:100px}.pull-status[data-v-17417773]{color:#666;justify-content:center;align-items:center;gap:10px;padding:24px 0;font-size:13px;display:flex}.preview-result[data-v-17417773]{margin-top:8px}.preview-info[data-v-17417773]{color:#555;align-items:center;gap:8px;margin-bottom:10px;font-size:13px;display:flex}.preview-list[data-v-17417773]{background:#00000005;border-radius:6px;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:6px;max-height:300px;margin-bottom:14px;padding:10px;display:grid;overflow-y:auto}.preview-actions[data-v-17417773]{justify-content:flex-end;gap:8px;display:flex}.pull-section[data-v-17417773]{margin-top:12px}.pull-input-row[data-v-17417773]{gap:8px;margin-bottom:8px;display:flex}.pull-input-row .n-input[data-v-17417773]{flex:1}.pull-error[data-v-17417773]{margin-bottom:8px}.pull-result[data-v-17417773]{margin-top:8px}.pull-result-line[data-v-17417773]{flex-wrap:wrap;align-items:center;gap:4px;margin-bottom:8px;font-size:13px;display:flex}.pull-result-label[data-v-17417773]{color:#888;flex-shrink:0}.pull-result-hint[data-v-17417773]{color:#999;font-size:12px}.install-panel[data-v-17417773]{background:#00000005;border-radius:6px;margin-top:12px;padding:12px}.install-panel-label[data-v-17417773]{color:#666;margin-bottom:8px;font-size:13px}.install-check-list[data-v-17417773]{margin-bottom:10px}.install-btn[data-v-17417773]{float:right}.edit-actions[data-v-17417773]{justify-content:flex-end;gap:8px;display:flex}.skill-group[data-v-17417773]{margin-bottom:4px}.group-header[data-v-17417773]{cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:4px;align-items:center;gap:8px;padding:8px 4px;display:flex}.group-header[data-v-17417773]:hover{background:#00000008}.fold-arrow[data-v-17417773]{color:#999;flex-shrink:0;font-size:10px;transition:transform .2s}.fold-arrow.open[data-v-17417773]{transform:rotate(90deg)}.group-label[data-v-17417773]{color:inherit;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-size:13px;font-weight:600;overflow:hidden}.group-count[data-v-17417773]{color:#999;flex-shrink:0;font-size:12px}.group-update-btn[data-v-17417773]{flex-shrink:0}.group-body[data-v-17417773]{padding-left:4px}.source-info[data-v-17417773]{margin-bottom:4px}.source-row[data-v-17417773]{align-items:center;gap:10px;margin-bottom:6px;font-size:13px;display:flex}.source-label[data-v-17417773]{color:#888;flex-shrink:0;width:70px}.source-value[data-v-17417773]{word-break:break-all}.local-tag[data-v-17417773]{color:#2e7d32;background:#e8f5e9;border-radius:3px;padding:1px 8px;font-size:12px;display:inline-block}.path-text[data-v-17417773]{color:#666;font-family:monospace;font-size:12px}.source-actions[data-v-17417773]{gap:8px;margin-top:8px;display:flex}.local-hint[data-v-17417773]{color:#999;background:#00000005;border-radius:4px;margin-top:8px;padding:8px;font-size:12px;line-height:1.5}.siblings-body[data-v-17417773]{min-height:60px}.siblings-desc[data-v-17417773]{margin-bottom:12px;font-size:13px;line-height:1.6}.siblings-list[data-v-17417773]{flex-direction:column;gap:8px;margin-bottom:16px;display:flex}.siblings-actions[data-v-17417773]{justify-content:flex-end;gap:8px;display:flex}.batch-modal-body[data-v-17417773]{min-height:60px}.batch-desc[data-v-17417773]{margin-bottom:16px;font-size:13px;line-height:1.6}.batch-actions[data-v-17417773]{justify-content:flex-end;gap:8px;display:flex}.batch-executing[data-v-17417773]{color:#666;justify-content:center;align-items:center;gap:12px;padding:24px 0;font-size:13px;display:flex}.batch-result[data-v-17417773]{margin-bottom:16px}.batch-result-line[data-v-17417773]{flex-wrap:wrap;align-items:center;gap:6px;margin-bottom:10px;font-size:13px;display:flex}.batch-result-label[data-v-17417773]{color:#888;flex-shrink:0}.page-header[data-v-46e4fa8d]{justify-content:space-between;align-items:center;margin-bottom:20px;display:flex}.page-header h2[data-v-46e4fa8d]{font-size:20px;font-weight:600}.scene-grid[data-v-46e4fa8d]{grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:16px;margin:2px;display:grid}.scene-card[data-v-46e4fa8d]{transition:box-shadow .2s}.scene-card.active[data-v-46e4fa8d]{box-shadow:0 0 0 2px #2080f0}.scene-desc[data-v-46e4fa8d]{color:#666;margin:0;font-size:13px}.scene-footer[data-v-46e4fa8d]{justify-content:space-between;align-items:center;display:flex}.hint-text[data-v-46e4fa8d]{color:#999;font-size:12px}.modal-skill-groups[data-v-46e4fa8d]{max-height:50vh;overflow-y:auto}.skill-group[data-v-46e4fa8d]{margin-bottom:2px}.skill-group-header[data-v-46e4fa8d]{cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:4px;align-items:center;gap:6px;padding:6px 4px;font-size:13px;display:flex}.skill-group-header[data-v-46e4fa8d]:hover{background:#00000008}.fold-arrow[data-v-46e4fa8d]{color:#999;flex-shrink:0;font-size:10px;transition:transform .2s}.fold-arrow.open[data-v-46e4fa8d]{transform:rotate(90deg)}.skill-group-label[data-v-46e4fa8d]{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-weight:600;overflow:hidden}.skill-group-count[data-v-46e4fa8d]{color:#999;flex-shrink:0;font-size:12px}.skill-group-body[data-v-46e4fa8d]{padding:4px 0 4px 16px}.page-header[data-v-c7da8635]{margin-bottom:20px}.page-header h2[data-v-c7da8635]{font-size:20px;font-weight:600}.section[data-v-c7da8635]{margin-bottom:20px}.init-alert[data-v-c7da8635]{margin-bottom:12px}.missing-list[data-v-c7da8635]{flex-direction:column;gap:4px;display:flex}.missing-item[data-v-c7da8635]{font-size:13px;line-height:1.6}.missing-item code[data-v-c7da8635]{background:#0000000f;border-radius:3px;padding:1px 6px;font-size:12px}.skill-tag[data-v-c7da8635]{margin:1px 2px;display:inline-block}.missing-hint[data-v-c7da8635]{opacity:.7;margin-top:4px;font-size:12px}.source-status[data-v-c7da8635]{margin-bottom:16px}.source-actions[data-v-c7da8635]{flex-direction:column;gap:12px;display:flex}.action-buttons[data-v-c7da8635]{gap:8px;display:flex}.healthy-text[data-v-c7da8635]{color:#18a058;font-size:13px}.issue-text[data-v-c7da8635]{color:#d03050;font-size:13px}.readme-dialog-desc[data-v-c7da8635]{color:#555;margin-bottom:16px;font-size:14px}.readme-checkbox[data-v-c7da8635]{align-items:flex-start;margin-bottom:12px;display:flex}.readme-checkbox-content[data-v-c7da8635]{flex-direction:column;gap:2px;display:flex}.readme-checkbox-title[data-v-c7da8635]{font-size:14px;font-weight:500}.readme-checkbox-desc[data-v-c7da8635]{color:#999;font-size:12px}.page-header[data-v-97d38fe1]{justify-content:space-between;align-items:center;margin-bottom:20px;display:flex}.page-header h2[data-v-97d38fe1]{font-size:20px;font-weight:600}.fade-enter-active[data-v-97d38fe1],.fade-leave-active[data-v-97d38fe1]{transition:opacity .2s}.fade-enter-from[data-v-97d38fe1],.fade-leave-to[data-v-97d38fe1]{opacity:0}pre code.hljs{padding:1em;display:block;overflow-x:auto}code.hljs{padding:3px 5px}.hljs{color:#24292e;background:#fff}.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language_{color:#d73a49}.hljs-title,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-title.function_{color:#6f42c1}.hljs-attr,.hljs-attribute,.hljs-literal,.hljs-meta,.hljs-number,.hljs-operator,.hljs-variable,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id{color:#005cc5}.hljs-regexp,.hljs-string,.hljs-meta .hljs-string{color:#032f62}.hljs-built_in,.hljs-symbol{color:#e36209}.hljs-comment,.hljs-code,.hljs-formula{color:#6a737d}.hljs-name,.hljs-quote,.hljs-selector-tag,.hljs-selector-pseudo{color:#22863a}.hljs-subst{color:#24292e}.hljs-section{color:#005cc5;font-weight:700}.hljs-bullet{color:#735c0f}.hljs-emphasis{color:#24292e;font-style:italic}.hljs-strong{color:#24292e;font-weight:700}.hljs-addition{color:#22863a;background-color:#f0fff4}.hljs-deletion{color:#b31d28;background-color:#ffeef0}
@@ -4,8 +4,8 @@
4
4
  <meta charset="UTF-8" />
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
6
  <title>mdk-skills 管理面板</title>
7
- <script type="module" crossorigin src="/assets/index-pHDOtonU.js"></script>
8
- <link rel="stylesheet" crossorigin href="/assets/index-DdbAYqm7.css">
7
+ <script type="module" crossorigin src="/assets/index-C6k2A_yN.js"></script>
8
+ <link rel="stylesheet" crossorigin href="/assets/index-DMXEF3CD.css">
9
9
  </head>
10
10
  <body>
11
11
  <div id="app"></div>
@@ -525,6 +525,18 @@ async function handleApi(req, res) {
525
525
  return sendJSON(res, { ok: true, imported, skipped });
526
526
  }
527
527
 
528
+ // POST /api/skills/pull-cancel — 取消预览,清理缓存和临时目录
529
+ if (method === "POST" && pathname === "/api/skills/pull-cancel") {
530
+ const body = await parseBody(req);
531
+ const url = (body.url || "").trim();
532
+ if (url && pullCache.has(url)) {
533
+ const entry = pullCache.get(url);
534
+ pullCache.delete(url);
535
+ try { fs.rmSync(entry.tmpDir, { recursive: true, force: true }); } catch {}
536
+ }
537
+ return sendJSON(res, { ok: true });
538
+ }
539
+
528
540
  // GET /api/skills/:name/source — 查询技能来源
529
541
  const sourceMatch = pathname.match(/^\/api\/skills\/([^/]+)\/source$/);
530
542
  if (method === "GET" && sourceMatch) {
@@ -116,6 +116,13 @@ export function pullSkills(url, names = []) {
116
116
  });
117
117
  }
118
118
 
119
+ export function cancelPull(url) {
120
+ return request("/skills/pull-cancel", {
121
+ method: "POST",
122
+ body: JSON.stringify({ url }),
123
+ });
124
+ }
125
+
119
126
  export function deleteSkill(name) {
120
127
  return request("/skills/" + encodeURIComponent(name), {
121
128
  method: "DELETE",
@@ -151,4 +151,32 @@ onUnmounted(() => {
151
151
  .modal-fade-leave-to {
152
152
  opacity: 0;
153
153
  }
154
+ </style>
155
+
156
+ <style>
157
+ [data-theme="dark"] .modal-card {
158
+ background: #252538;
159
+ box-shadow: 0 8px 32px rgba(0, 0, 0, 0.4);
160
+ }
161
+
162
+ [data-theme="dark"] .modal-title {
163
+ color: #e0e0e0;
164
+ }
165
+
166
+ [data-theme="dark"] .modal-close {
167
+ color: #777;
168
+ }
169
+
170
+ [data-theme="dark"] .modal-close:hover {
171
+ background: #2a2a40;
172
+ color: #e0e0e0;
173
+ }
174
+
175
+ [data-theme="dark"] .modal-footer {
176
+ border-top-color: #333;
177
+ }
178
+
179
+ [data-theme="dark"] .modal-overlay {
180
+ background: rgba(0, 0, 0, 0.6);
181
+ }
154
182
  </style>
@@ -80,6 +80,14 @@ body {
80
80
  word-wrap: break-word;
81
81
  }
82
82
 
83
+ .markdown-content > :first-child {
84
+ margin-top: 0 !important;
85
+ }
86
+
87
+ .markdown-content > :last-child {
88
+ margin-bottom: 0 !important;
89
+ }
90
+
83
91
  .markdown-content h1 { font-size: 22px; font-weight: 700; margin: 20px 0 12px; padding-bottom: 8px; border-bottom: 1px solid #eee; }
84
92
  .markdown-content h2 { font-size: 18px; font-weight: 700; margin: 18px 0 10px; padding-bottom: 6px; border-bottom: 1px solid #eee; }
85
93
  .markdown-content h3 { font-size: 16px; font-weight: 600; margin: 16px 0 8px; }
@@ -172,7 +172,7 @@
172
172
  title="从远程仓库拉取"
173
173
  width="600px"
174
174
  :mask-closable="true"
175
- @update:show="(v) => { if (!v) { showPullModal = false; pulling = false; previewing = false; cancelTask(); } }"
175
+ @update:show="(v) => { if (!v) { showPullModal = false; pulling = false; previewing = false; cancelTask(); cancelPull(pullUrl).catch(() => {}); } }"
176
176
  >
177
177
  <div class="pull-modal-body">
178
178
  <!-- URL 输入 -->
@@ -328,7 +328,7 @@ import { marked } from "marked";
328
328
  import hljs from "highlight.js";
329
329
  import SkillCard from "../components/SkillCard.vue";
330
330
  import ModalComp from "../components/ModalComp.vue";
331
- import { getSkills, getReadme, getSkillReadme, updateSkillMeta, deleteSkill, pullSkills, installSkills, getSkillSource, updateSkill, batchUpdateSkills, openSkillDir, cancelTask } from "../api/skills";
331
+ import { getSkills, getReadme, getSkillReadme, updateSkillMeta, deleteSkill, pullSkills, cancelPull, installSkills, getSkillSource, updateSkill, batchUpdateSkills, openSkillDir, cancelTask } from "../api/skills";
332
332
  import { sortSkills, getUsageMap, recordUsage } from "../utils/usage";
333
333
 
334
334
  // marked 配置:代码高亮 + 外链安全
@@ -1 +0,0 @@
1
- .status-bar[data-v-bc9519f9]{background:#fff;border-bottom:1px solid #e5e7eb;flex-wrap:wrap;align-items:center;gap:12px;padding:10px 24px;display:flex}.status-item[data-v-bc9519f9]{color:#555;align-items:center;gap:6px;font-size:13px;display:flex}.status-item.clickable[data-v-bc9519f9]{cursor:pointer}.status-item.clickable[data-v-bc9519f9]:hover{color:#2080f0}.status-divider[data-v-bc9519f9]{background:#e0e0e0;width:1px;height:20px}[data-theme=dark] .status-bar{background:#1a1a2e;border-bottom-color:#333}[data-theme=dark] .status-item{color:#aaa}[data-theme=dark] .status-divider{background:#333}*{box-sizing:border-box;margin:0;padding:0}html,body,#app{background:#f5f7fa;height:100%}body{overflow-y:auto}*{scrollbar-width:none;-ms-overflow-style:none}::-webkit-scrollbar{display:none}.app-layout{flex-direction:column;min-height:100vh;padding-top:56px;display:flex}.app-header{z-index:100;background:#fff;border-bottom:1px solid #e5e7eb;align-items:center;height:56px;padding:0 24px;display:flex;position:fixed;top:0;left:0;right:0}.header-inner{justify-content:space-between;align-items:center;width:100%;display:flex}.header-left{align-items:center;gap:32px;display:flex}.logo{color:#1a1a1a;white-space:nowrap;font-size:18px;font-weight:700}.app-content{flex:1;width:100%;max-width:1000px;margin:0 auto;padding:24px}.markdown-content{color:#333;word-wrap:break-word;font-size:14px;line-height:1.7}.markdown-content h1{border-bottom:1px solid #eee;margin:20px 0 12px;padding-bottom:8px;font-size:22px;font-weight:700}.markdown-content h2{border-bottom:1px solid #eee;margin:18px 0 10px;padding-bottom:6px;font-size:18px;font-weight:700}.markdown-content h3{margin:16px 0 8px;font-size:16px;font-weight:600}.markdown-content h4{margin:14px 0 6px;font-size:14px;font-weight:600}.markdown-content h5,.markdown-content h6{margin:12px 0 6px;font-size:13px;font-weight:600}.markdown-content p{margin:8px 0}.markdown-content ul,.markdown-content ol{margin:8px 0;padding-left:24px}.markdown-content li{margin:4px 0}.markdown-content blockquote{color:#555;background:#f0f7ff;border-left:4px solid #2080f0;margin:10px 0;padding:8px 16px}.markdown-content blockquote p{margin:4px 0}.markdown-content a{color:#2080f0;text-decoration:none}.markdown-content a:hover{text-decoration:underline}.markdown-content hr{border:none;border-top:1px solid #e0e0e0;margin:16px 0}.markdown-content table{border-collapse:collapse;width:100%;margin:12px 0;font-size:13px}.markdown-content th,.markdown-content td{text-align:left;border:1px solid #e0e0e0;padding:8px 12px}.markdown-content th{background:#f5f7fa;font-weight:600}.markdown-content tr:nth-child(2n) td{background:#fafafa}.markdown-content img{border-radius:4px;max-width:100%;margin:8px 0}.markdown-content code{color:#d63384;background:#f0f0f0;border-radius:3px;padding:2px 6px;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;font-size:13px}.markdown-content pre{border:1px solid #e8e8e8;border-radius:6px;margin:12px 0;padding:0;position:relative;overflow:hidden}.markdown-content pre code{color:#333;tab-size:2;background:#f8f9fa;padding:14px 16px;font-size:13px;line-height:1.5;display:block;overflow-x:auto}.markdown-content pre .copy-btn{color:#999;cursor:pointer;opacity:0;background:#fff;border:1px solid #e0e0e0;border-radius:4px;padding:3px 8px;font-size:11px;transition:opacity .2s;position:absolute;top:6px;right:6px}.readme-fold{border:1px solid #e5e7eb;border-radius:6px;margin-bottom:20px;overflow:hidden}.fold-header{cursor:pointer;-webkit-user-select:none;user-select:none;background:#fafafa;align-items:center;gap:6px;padding:10px 16px;font-size:14px;font-weight:600;display:flex}.fold-header:hover{background:#f0f0f0}.fold-arrow{color:#999;font-size:11px;transition:transform .2s}.fold-arrow.open{transform:rotate(90deg)}.fold-body{padding:0 16px 16px}.markdown-content pre:hover .copy-btn{opacity:1}.markdown-content pre .copy-btn:hover{color:#2080f0;border-color:#2080f0}.header-right{align-items:center;gap:8px;display:flex}[data-theme=dark] html,[data-theme=dark] body,[data-theme=dark] #app{background:#1a1a2e}[data-theme=dark] .app-header{background:#1a1a2e;border-bottom-color:#333}[data-theme=dark] .app-content{background:0 0}[data-theme=dark] .readme-fold{border-color:#333}[data-theme=dark] .fold-header{color:#e0e0e0;background:#252538}[data-theme=dark] .fold-header:hover{background:#2a2a40}[data-theme=dark] .fold-body{background:#1e1e32}[data-theme=dark] .fold-arrow{color:#888}[data-theme=dark] .markdown-content{color:#ccc}[data-theme=dark] .markdown-content h1,[data-theme=dark] .markdown-content h2{color:#eee;border-bottom-color:#333}[data-theme=dark] .markdown-content h3,[data-theme=dark] .markdown-content h4{color:#eee}[data-theme=dark] .markdown-content code{color:#e06c9f;background:#2a2a40}[data-theme=dark] .markdown-content pre{border-color:#333}[data-theme=dark] .markdown-content pre code{color:#d4d4d4;background:#1e1e2e}[data-theme=dark] .markdown-content blockquote{color:#bbb;background:#252538;border-left-color:#4a6cf7}[data-theme=dark] .markdown-content a{color:#6a8cff}[data-theme=dark] .markdown-content th{background:#252538}[data-theme=dark] .markdown-content td{border-color:#333}[data-theme=dark] .markdown-content tr:nth-child(2n) td{background:#222238}[data-theme=dark] .markdown-content hr{border-top-color:#333}[data-theme=dark] .markdown-content img{filter:brightness(.85)}[data-theme=dark] .page-header h2{color:#e0e0e0}[data-theme=dark] .scene-desc{color:#aaa}.fade-enter-active,.fade-leave-active{transition:opacity .9s,transform .9s}.fade-enter-from{opacity:0;transform:translateY(6px)}.fade-leave-to{opacity:0}.skill-card[data-v-f2c0de50]{cursor:pointer;margin-bottom:12px;transition:box-shadow .2s}.skill-card[data-v-f2c0de50]:hover{box-shadow:0 2px 8px #00000014}.skill-meta[data-v-f2c0de50]{align-items:center;gap:8px;margin-bottom:8px;display:flex}.skill-version[data-v-f2c0de50]{color:#888;font-family:monospace;font-size:12px}.skill-desc[data-v-f2c0de50]{color:#666;text-overflow:ellipsis;white-space:nowrap;margin:0;font-size:13px;overflow:hidden}.modal-overlay[data-v-aa861984]{z-index:2000;background:#00000073;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.modal-card[data-v-aa861984]{background:#fff;border-radius:8px;flex-direction:column;width:90%;max-height:85vh;display:flex;box-shadow:0 8px 32px #0000001f}.modal-header[data-v-aa861984]{justify-content:space-between;align-items:center;padding:14px 20px 0;display:flex}.modal-title[data-v-aa861984]{color:#333;font-size:16px;font-weight:600}.modal-close[data-v-aa861984]{color:#999;cursor:pointer;background:0 0;border:none;border-radius:4px;justify-content:center;align-items:center;width:28px;height:28px;font-size:20px;line-height:1;transition:background .15s,color .15s;display:flex}.modal-close[data-v-aa861984]:hover{color:#333;background:#f0f0f0}.modal-body[data-v-aa861984]{padding:16px 20px;overflow-y:auto}.modal-footer[data-v-aa861984]{border-top:1px solid #f0f0f0;justify-content:flex-end;gap:8px;padding:12px 20px 16px;display:flex}.modal-fade-enter-active[data-v-aa861984]{transition:opacity .2s}.modal-fade-leave-active[data-v-aa861984]{transition:opacity .15s}.modal-fade-enter-from[data-v-aa861984],.modal-fade-leave-to[data-v-aa861984]{opacity:0}.dashboard[data-v-feb79240]{overflow-anchor:auto}.page-header[data-v-feb79240]{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px;margin-bottom:4px;display:flex}.page-header h2[data-v-feb79240]{font-size:20px;font-weight:600}.header-actions[data-v-feb79240]{align-items:center;gap:8px;display:flex}.tag-filter[data-v-feb79240]{flex-wrap:wrap;align-items:center;gap:6px;margin-bottom:16px;display:flex}.detail-status[data-v-feb79240]{justify-content:center;padding:40px 0;display:flex}.detail-body[data-v-feb79240]{max-height:65vh;overflow-y:auto}.edit-panel[data-v-feb79240]{margin-bottom:4px}.edit-row[data-v-feb79240]{align-items:flex-start;gap:10px;margin-bottom:10px;display:flex}.edit-label[data-v-feb79240]{color:#888;flex-shrink:0;width:50px;font-size:13px;line-height:30px}.update-count-hint[data-v-feb79240]{color:#e68a00;margin-left:8px;font-family:monospace;font-size:12px}.pull-modal-body[data-v-feb79240]{min-height:100px}.pull-status[data-v-feb79240]{color:#666;justify-content:center;align-items:center;gap:10px;padding:24px 0;font-size:13px;display:flex}.preview-result[data-v-feb79240]{margin-top:8px}.preview-info[data-v-feb79240]{color:#555;align-items:center;gap:8px;margin-bottom:10px;font-size:13px;display:flex}.preview-list[data-v-feb79240]{background:#00000005;border-radius:6px;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:6px;max-height:300px;margin-bottom:14px;padding:10px;display:grid;overflow-y:auto}.preview-actions[data-v-feb79240]{justify-content:flex-end;gap:8px;display:flex}.pull-section[data-v-feb79240]{margin-top:12px}.pull-input-row[data-v-feb79240]{gap:8px;margin-bottom:8px;display:flex}.pull-input-row .n-input[data-v-feb79240]{flex:1}.pull-error[data-v-feb79240]{margin-bottom:8px}.pull-result[data-v-feb79240]{margin-top:8px}.pull-result-line[data-v-feb79240]{flex-wrap:wrap;align-items:center;gap:4px;margin-bottom:8px;font-size:13px;display:flex}.pull-result-label[data-v-feb79240]{color:#888;flex-shrink:0}.pull-result-hint[data-v-feb79240]{color:#999;font-size:12px}.install-panel[data-v-feb79240]{background:#00000005;border-radius:6px;margin-top:12px;padding:12px}.install-panel-label[data-v-feb79240]{color:#666;margin-bottom:8px;font-size:13px}.install-check-list[data-v-feb79240]{margin-bottom:10px}.install-btn[data-v-feb79240]{float:right}.edit-actions[data-v-feb79240]{justify-content:flex-end;gap:8px;display:flex}.skill-group[data-v-feb79240]{margin-bottom:4px}.group-header[data-v-feb79240]{cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:4px;align-items:center;gap:8px;padding:8px 4px;display:flex}.group-header[data-v-feb79240]:hover{background:#00000008}.fold-arrow[data-v-feb79240]{color:#999;flex-shrink:0;font-size:10px;transition:transform .2s}.fold-arrow.open[data-v-feb79240]{transform:rotate(90deg)}.group-label[data-v-feb79240]{color:inherit;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-size:13px;font-weight:600;overflow:hidden}.group-count[data-v-feb79240]{color:#999;flex-shrink:0;font-size:12px}.group-update-btn[data-v-feb79240]{flex-shrink:0}.group-body[data-v-feb79240]{padding-left:4px}.source-info[data-v-feb79240]{margin-bottom:4px}.source-row[data-v-feb79240]{align-items:center;gap:10px;margin-bottom:6px;font-size:13px;display:flex}.source-label[data-v-feb79240]{color:#888;flex-shrink:0;width:70px}.source-value[data-v-feb79240]{word-break:break-all}.local-tag[data-v-feb79240]{color:#2e7d32;background:#e8f5e9;border-radius:3px;padding:1px 8px;font-size:12px;display:inline-block}.path-text[data-v-feb79240]{color:#666;font-family:monospace;font-size:12px}.source-actions[data-v-feb79240]{gap:8px;margin-top:8px;display:flex}.local-hint[data-v-feb79240]{color:#999;background:#00000005;border-radius:4px;margin-top:8px;padding:8px;font-size:12px;line-height:1.5}.siblings-body[data-v-feb79240]{min-height:60px}.siblings-desc[data-v-feb79240]{margin-bottom:12px;font-size:13px;line-height:1.6}.siblings-list[data-v-feb79240]{flex-direction:column;gap:8px;margin-bottom:16px;display:flex}.siblings-actions[data-v-feb79240]{justify-content:flex-end;gap:8px;display:flex}.batch-modal-body[data-v-feb79240]{min-height:60px}.batch-desc[data-v-feb79240]{margin-bottom:16px;font-size:13px;line-height:1.6}.batch-actions[data-v-feb79240]{justify-content:flex-end;gap:8px;display:flex}.batch-executing[data-v-feb79240]{color:#666;justify-content:center;align-items:center;gap:12px;padding:24px 0;font-size:13px;display:flex}.batch-result[data-v-feb79240]{margin-bottom:16px}.batch-result-line[data-v-feb79240]{flex-wrap:wrap;align-items:center;gap:6px;margin-bottom:10px;font-size:13px;display:flex}.batch-result-label[data-v-feb79240]{color:#888;flex-shrink:0}.page-header[data-v-46e4fa8d]{justify-content:space-between;align-items:center;margin-bottom:20px;display:flex}.page-header h2[data-v-46e4fa8d]{font-size:20px;font-weight:600}.scene-grid[data-v-46e4fa8d]{grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:16px;margin:2px;display:grid}.scene-card[data-v-46e4fa8d]{transition:box-shadow .2s}.scene-card.active[data-v-46e4fa8d]{box-shadow:0 0 0 2px #2080f0}.scene-desc[data-v-46e4fa8d]{color:#666;margin:0;font-size:13px}.scene-footer[data-v-46e4fa8d]{justify-content:space-between;align-items:center;display:flex}.hint-text[data-v-46e4fa8d]{color:#999;font-size:12px}.modal-skill-groups[data-v-46e4fa8d]{max-height:50vh;overflow-y:auto}.skill-group[data-v-46e4fa8d]{margin-bottom:2px}.skill-group-header[data-v-46e4fa8d]{cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:4px;align-items:center;gap:6px;padding:6px 4px;font-size:13px;display:flex}.skill-group-header[data-v-46e4fa8d]:hover{background:#00000008}.fold-arrow[data-v-46e4fa8d]{color:#999;flex-shrink:0;font-size:10px;transition:transform .2s}.fold-arrow.open[data-v-46e4fa8d]{transform:rotate(90deg)}.skill-group-label[data-v-46e4fa8d]{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-weight:600;overflow:hidden}.skill-group-count[data-v-46e4fa8d]{color:#999;flex-shrink:0;font-size:12px}.skill-group-body[data-v-46e4fa8d]{padding:4px 0 4px 16px}.page-header[data-v-c7da8635]{margin-bottom:20px}.page-header h2[data-v-c7da8635]{font-size:20px;font-weight:600}.section[data-v-c7da8635]{margin-bottom:20px}.init-alert[data-v-c7da8635]{margin-bottom:12px}.missing-list[data-v-c7da8635]{flex-direction:column;gap:4px;display:flex}.missing-item[data-v-c7da8635]{font-size:13px;line-height:1.6}.missing-item code[data-v-c7da8635]{background:#0000000f;border-radius:3px;padding:1px 6px;font-size:12px}.skill-tag[data-v-c7da8635]{margin:1px 2px;display:inline-block}.missing-hint[data-v-c7da8635]{opacity:.7;margin-top:4px;font-size:12px}.source-status[data-v-c7da8635]{margin-bottom:16px}.source-actions[data-v-c7da8635]{flex-direction:column;gap:12px;display:flex}.action-buttons[data-v-c7da8635]{gap:8px;display:flex}.healthy-text[data-v-c7da8635]{color:#18a058;font-size:13px}.issue-text[data-v-c7da8635]{color:#d03050;font-size:13px}.readme-dialog-desc[data-v-c7da8635]{color:#555;margin-bottom:16px;font-size:14px}.readme-checkbox[data-v-c7da8635]{align-items:flex-start;margin-bottom:12px;display:flex}.readme-checkbox-content[data-v-c7da8635]{flex-direction:column;gap:2px;display:flex}.readme-checkbox-title[data-v-c7da8635]{font-size:14px;font-weight:500}.readme-checkbox-desc[data-v-c7da8635]{color:#999;font-size:12px}.page-header[data-v-97d38fe1]{justify-content:space-between;align-items:center;margin-bottom:20px;display:flex}.page-header h2[data-v-97d38fe1]{font-size:20px;font-weight:600}.fade-enter-active[data-v-97d38fe1],.fade-leave-active[data-v-97d38fe1]{transition:opacity .2s}.fade-enter-from[data-v-97d38fe1],.fade-leave-to[data-v-97d38fe1]{opacity:0}pre code.hljs{padding:1em;display:block;overflow-x:auto}code.hljs{padding:3px 5px}.hljs{color:#24292e;background:#fff}.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language_{color:#d73a49}.hljs-title,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-title.function_{color:#6f42c1}.hljs-attr,.hljs-attribute,.hljs-literal,.hljs-meta,.hljs-number,.hljs-operator,.hljs-variable,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id{color:#005cc5}.hljs-regexp,.hljs-string,.hljs-meta .hljs-string{color:#032f62}.hljs-built_in,.hljs-symbol{color:#e36209}.hljs-comment,.hljs-code,.hljs-formula{color:#6a737d}.hljs-name,.hljs-quote,.hljs-selector-tag,.hljs-selector-pseudo{color:#22863a}.hljs-subst{color:#24292e}.hljs-section{color:#005cc5;font-weight:700}.hljs-bullet{color:#735c0f}.hljs-emphasis{color:#24292e;font-style:italic}.hljs-strong{color:#24292e;font-weight:700}.hljs-addition{color:#22863a;background-color:#f0fff4}.hljs-deletion{color:#b31d28;background-color:#ffeef0}