skill-base 2.0.4 → 2.0.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 (46) hide show
  1. package/README.md +177 -115
  2. package/bin/skill-base.js +29 -3
  3. package/package.json +4 -1
  4. package/src/cappy.js +416 -0
  5. package/src/database.js +11 -0
  6. package/src/index.js +125 -25
  7. package/src/middleware/auth.js +96 -32
  8. package/src/routes/auth.js +1 -1
  9. package/src/routes/skills.js +10 -5
  10. package/src/utils/zip.js +15 -4
  11. package/static/android-chrome-192x192.png +0 -0
  12. package/static/android-chrome-512x512.png +0 -0
  13. package/static/apple-touch-icon.png +0 -0
  14. package/static/assets/index-BkwByEEp.css +1 -0
  15. package/static/assets/index-CB4Diul3.js +209 -0
  16. package/static/favicon-16x16.png +0 -0
  17. package/static/favicon-32x32.png +0 -0
  18. package/static/favicon.ico +0 -0
  19. package/static/favicon.svg +14 -0
  20. package/static/index.html +18 -248
  21. package/static/site.webmanifest +1 -0
  22. package/static/admin/users.html +0 -593
  23. package/static/cli-code.html +0 -203
  24. package/static/css/.gitkeep +0 -0
  25. package/static/css/style.css +0 -1567
  26. package/static/diff.html +0 -466
  27. package/static/file.html +0 -443
  28. package/static/js/.gitkeep +0 -0
  29. package/static/js/admin/users.js +0 -346
  30. package/static/js/app.js +0 -508
  31. package/static/js/auth.js +0 -151
  32. package/static/js/cli-code.js +0 -184
  33. package/static/js/collaborators.js +0 -283
  34. package/static/js/diff.js +0 -540
  35. package/static/js/file.js +0 -619
  36. package/static/js/i18n.js +0 -739
  37. package/static/js/index.js +0 -168
  38. package/static/js/publish.js +0 -718
  39. package/static/js/settings.js +0 -124
  40. package/static/js/setup.js +0 -157
  41. package/static/js/skill.js +0 -808
  42. package/static/login.html +0 -82
  43. package/static/publish.html +0 -459
  44. package/static/settings.html +0 -163
  45. package/static/setup.html +0 -101
  46. package/static/skill.html +0 -851
package/static/file.html DELETED
@@ -1,443 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="">
3
- <head>
4
- <meta charset="UTF-8">
5
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title data-i18n="file.title">文件预览 - Skill Base</title>
7
- <link rel="stylesheet" href="/css/style.css">
8
- <!-- highlight.js 样式 -->
9
- <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/highlight.js@11.9.0/styles/github-dark.min.css">
10
- <style>
11
- /* 面包屑导航 */
12
- .breadcrumb {
13
- display: flex;
14
- align-items: center;
15
- gap: var(--spacing-sm);
16
- font-size: 0.875rem;
17
- color: var(--text-secondary);
18
- margin-bottom: var(--spacing-lg);
19
- flex-wrap: wrap;
20
- }
21
-
22
- .breadcrumb a {
23
- color: var(--text-secondary);
24
- }
25
-
26
- .breadcrumb a:hover {
27
- color: var(--primary-color);
28
- }
29
-
30
- .breadcrumb-separator {
31
- color: var(--text-muted);
32
- }
33
-
34
- .breadcrumb-current {
35
- color: var(--text-color);
36
- font-weight: 500;
37
- }
38
-
39
- /* 版本信息栏 */
40
- .version-bar {
41
- background-color: var(--white);
42
- border-radius: var(--radius);
43
- box-shadow: var(--shadow);
44
- padding: var(--spacing-md) var(--spacing-lg);
45
- margin-bottom: var(--spacing-lg);
46
- display: flex;
47
- align-items: center;
48
- justify-content: space-between;
49
- flex-wrap: wrap;
50
- gap: var(--spacing-md);
51
- }
52
-
53
- .version-info {
54
- display: flex;
55
- align-items: center;
56
- gap: var(--spacing-md);
57
- font-size: 0.875rem;
58
- color: var(--text-secondary);
59
- }
60
-
61
- .version-info .version-tag {
62
- font-size: 0.875rem;
63
- }
64
-
65
- /* 左右分栏布局 */
66
- .file-layout {
67
- display: grid;
68
- grid-template-columns: 280px 1fr;
69
- gap: var(--spacing-lg);
70
- margin-bottom: var(--spacing-lg);
71
- }
72
-
73
- /* 文件树面板 */
74
- .file-tree-panel {
75
- background-color: var(--white);
76
- border-radius: var(--radius);
77
- box-shadow: var(--shadow);
78
- padding: var(--spacing-md);
79
- max-height: calc(100vh - 280px);
80
- overflow-y: auto;
81
- }
82
-
83
- .file-tree-panel-title {
84
- font-size: 0.875rem;
85
- font-weight: 600;
86
- color: var(--text-color);
87
- margin-bottom: var(--spacing-md);
88
- padding-bottom: var(--spacing-sm);
89
- border-bottom: 1px solid var(--border-color);
90
- }
91
-
92
- /* 文件内容面板 */
93
- .file-content-panel {
94
- background-color: var(--white);
95
- border-radius: var(--radius);
96
- box-shadow: var(--shadow);
97
- min-height: 500px;
98
- display: flex;
99
- flex-direction: column;
100
- }
101
-
102
- .file-content-header {
103
- padding: var(--spacing-md) var(--spacing-lg);
104
- border-bottom: 1px solid var(--border-color);
105
- display: flex;
106
- align-items: center;
107
- justify-content: space-between;
108
- gap: var(--spacing-md);
109
- }
110
-
111
- .file-content-path {
112
- font-family: 'SF Mono', Monaco, 'Courier New', monospace;
113
- font-size: 0.875rem;
114
- color: var(--text-secondary);
115
- word-break: break-all;
116
- }
117
-
118
- .file-content-body {
119
- flex: 1;
120
- padding: var(--spacing-lg);
121
- overflow: auto;
122
- }
123
-
124
- .file-content-body pre {
125
- margin: 0;
126
- padding: var(--spacing-md);
127
- background-color: var(--bg-color);
128
- border-radius: var(--radius);
129
- overflow-x: auto;
130
- }
131
-
132
- .file-content-body code {
133
- font-family: 'SF Mono', Monaco, 'Courier New', monospace;
134
- font-size: 0.8125rem;
135
- line-height: 1.6;
136
- }
137
-
138
- /* 代码行号 */
139
- .code-with-lines {
140
- display: table;
141
- width: 100%;
142
- }
143
-
144
- .code-line {
145
- display: table-row;
146
- }
147
-
148
- .code-line-number {
149
- display: table-cell;
150
- width: 50px;
151
- padding-right: var(--spacing-md);
152
- text-align: right;
153
- color: var(--text-muted);
154
- user-select: none;
155
- border-right: 1px solid var(--border-color);
156
- vertical-align: top;
157
- }
158
-
159
- .code-line-content {
160
- display: table-cell;
161
- padding-left: var(--spacing-md);
162
- white-space: pre;
163
- }
164
-
165
- /* Markdown 预览样式 */
166
- .markdown-body {
167
- line-height: 1.8;
168
- }
169
-
170
- .markdown-body h1,
171
- .markdown-body h2,
172
- .markdown-body h3,
173
- .markdown-body h4 {
174
- margin-top: 1.5em;
175
- margin-bottom: 0.5em;
176
- font-weight: 600;
177
- }
178
-
179
- .markdown-body h1 { font-size: 1.5rem; }
180
- .markdown-body h2 { font-size: 1.25rem; }
181
- .markdown-body h3 { font-size: 1.125rem; }
182
-
183
- .markdown-body p {
184
- margin-bottom: 1em;
185
- }
186
-
187
- .markdown-body ul,
188
- .markdown-body ol {
189
- padding-left: 2em;
190
- margin-bottom: 1em;
191
- }
192
-
193
- .markdown-body li {
194
- list-style: disc;
195
- margin-bottom: 0.25em;
196
- }
197
-
198
- .markdown-body ol li {
199
- list-style: decimal;
200
- }
201
-
202
- .markdown-body code {
203
- background-color: var(--bg-color);
204
- padding: 0.125em 0.375em;
205
- border-radius: var(--radius-sm);
206
- font-size: 0.875em;
207
- }
208
-
209
- .markdown-body pre code {
210
- background: none;
211
- padding: 0;
212
- }
213
-
214
- .markdown-body blockquote {
215
- border-left: 4px solid var(--border-color);
216
- padding-left: 1em;
217
- color: var(--text-secondary);
218
- margin: 1em 0;
219
- }
220
-
221
- .markdown-body table {
222
- width: 100%;
223
- border-collapse: collapse;
224
- margin: 1em 0;
225
- }
226
-
227
- .markdown-body th,
228
- .markdown-body td {
229
- border: 1px solid var(--border-color);
230
- padding: 0.5em 1em;
231
- text-align: left;
232
- }
233
-
234
- .markdown-body th {
235
- background-color: var(--bg-color);
236
- }
237
-
238
- /* 底部操作栏 */
239
- .action-bar {
240
- background-color: var(--white);
241
- border-radius: var(--radius);
242
- box-shadow: var(--shadow);
243
- padding: var(--spacing-md) var(--spacing-lg);
244
- display: flex;
245
- align-items: center;
246
- justify-content: space-between;
247
- flex-wrap: wrap;
248
- gap: var(--spacing-md);
249
- }
250
-
251
- .action-bar-left,
252
- .action-bar-right {
253
- display: flex;
254
- align-items: center;
255
- gap: var(--spacing-sm);
256
- }
257
-
258
- /* 空状态 */
259
- .empty-preview {
260
- display: flex;
261
- flex-direction: column;
262
- align-items: center;
263
- justify-content: center;
264
- height: 100%;
265
- min-height: 300px;
266
- color: var(--text-muted);
267
- }
268
-
269
- .empty-preview-icon {
270
- font-size: 3rem;
271
- margin-bottom: var(--spacing-md);
272
- opacity: 0.5;
273
- }
274
-
275
- /* 二进制文件提示 */
276
- .binary-notice {
277
- text-align: center;
278
- padding: var(--spacing-xl);
279
- color: var(--text-secondary);
280
- }
281
-
282
- .binary-notice-icon {
283
- font-size: 3rem;
284
- margin-bottom: var(--spacing-md);
285
- }
286
-
287
- /* 大文件警告 */
288
- .large-file-warning {
289
- background-color: var(--warning-light);
290
- color: var(--warning-color);
291
- padding: var(--spacing-md);
292
- border-radius: var(--radius);
293
- margin-bottom: var(--spacing-md);
294
- display: flex;
295
- align-items: center;
296
- gap: var(--spacing-sm);
297
- }
298
-
299
- /* Loading */
300
- .loading-content {
301
- display: flex;
302
- align-items: center;
303
- justify-content: center;
304
- min-height: 200px;
305
- }
306
-
307
- @media (max-width: 768px) {
308
- .file-layout {
309
- grid-template-columns: 1fr;
310
- }
311
-
312
- .file-tree-panel {
313
- max-height: 300px;
314
- }
315
-
316
- .version-bar {
317
- flex-direction: column;
318
- align-items: flex-start;
319
- }
320
-
321
- .action-bar {
322
- flex-direction: column;
323
- align-items: stretch;
324
- }
325
-
326
- .action-bar-left,
327
- .action-bar-right {
328
- justify-content: center;
329
- }
330
- }
331
- </style>
332
- </head>
333
- <body class="app-devtools">
334
- <!-- 导航栏 -->
335
- <nav class="navbar">
336
- <div class="container">
337
- <a href="/" class="navbar-brand">
338
- <svg class="navbar-brand-icon" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true"><path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"/><polyline points="3.27 6.96 12 12.01 20.73 6.96"/><line x1="12" y1="22.08" x2="12" y2="12"/></svg>
339
- <span>Skill Base</span>
340
- </a>
341
- <div class="navbar-nav">
342
- <a href="/" data-i18n="nav.home">首页</a>
343
- <a href="/publish.html" class="hide-mobile" data-i18n="nav.publish">发布</a>
344
- </div>
345
- </div>
346
- </nav>
347
-
348
- <!-- 页面内容 -->
349
- <main class="page-content">
350
- <div class="container">
351
- <!-- 面包屑导航 -->
352
- <nav class="breadcrumb">
353
- <a href="/" data-i18n="skill.breadcrumbHome">首页</a>
354
- <span class="breadcrumb-separator">›</span>
355
- <a href="#" id="breadcrumb-skill" data-i18n="state.loading">加载中...</a>
356
- <span class="breadcrumb-separator">›</span>
357
- <span id="breadcrumb-file" class="breadcrumb-current" data-i18n="file.breadcrumbFile">文件</span>
358
- </nav>
359
-
360
- <!-- 版本信息栏 -->
361
- <div class="version-bar">
362
- <div class="version-info">
363
- <span data-i18n="file.currentVersion">当前版本:</span>
364
- <span id="current-version" class="version-tag current">-</span>
365
- </div>
366
- <div class="version-info">
367
- <span id="file-size" class="text-muted">-</span>
368
- </div>
369
- </div>
370
-
371
- <!-- 左右分栏:目录树 + 文件内容 -->
372
- <section class="file-layout">
373
- <!-- 文件树面板 -->
374
- <div class="file-tree-panel">
375
- <div class="file-tree-panel-title" data-i18n="file.fileDir">文件目录</div>
376
- <div id="file-tree" class="file-tree">
377
- <div class="loading-content">
378
- <div class="spinner spinner-sm"></div>
379
- </div>
380
- </div>
381
- </div>
382
-
383
- <!-- 文件内容面板 -->
384
- <div class="file-content-panel">
385
- <div class="file-content-header">
386
- <span id="file-path" class="file-content-path" data-i18n="file.selectFile">选择文件以预览</span>
387
- </div>
388
- <div id="file-content" class="file-content-body">
389
- <div class="empty-preview">
390
- <div class="empty-preview-icon">📄</div>
391
- <p data-i18n="file.clickFile">点击左侧文件查看内容</p>
392
- </div>
393
- </div>
394
- </div>
395
- </section>
396
-
397
- <!-- 底部操作栏 -->
398
- <div class="action-bar">
399
- <div class="action-bar-left">
400
- <button class="btn btn-primary" onclick="downloadCurrentVersion()">
401
- <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
402
- <path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/>
403
- <polyline points="7 10 12 15 17 10"/>
404
- <line x1="12" y1="15" x2="12" y2="3"/>
405
- </svg>
406
- <span data-i18n="file.download">下载当前版本</span>
407
- </button>
408
- <select id="version-select" class="version-select" onchange="onVersionChange(this.value)" style="min-width: 150px;">
409
- <option value="" data-i18n="file.selectOtherVersion">选择其他版本...</option>
410
- </select>
411
- </div>
412
- <div class="action-bar-right">
413
- <button class="btn btn-secondary" onclick="goToDiff()">
414
- <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
415
- <line x1="18" y1="20" x2="18" y2="10"/>
416
- <line x1="12" y1="20" x2="12" y2="4"/>
417
- <line x1="6" y1="20" x2="6" y2="14"/>
418
- </svg>
419
- <span data-i18n="file.compare">对比版本</span>
420
- </button>
421
- <button class="btn btn-secondary" onclick="goToSkillDetail()">
422
- <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
423
- <line x1="19" y1="12" x2="5" y2="12"/>
424
- <polyline points="12 19 5 12 12 5"/>
425
- </svg>
426
- <span data-i18n="file.back">返回详情页</span>
427
- </button>
428
- </div>
429
- </div>
430
- </div>
431
- </main>
432
-
433
- <!-- CDN 库 -->
434
- <script src="https://cdn.jsdelivr.net/npm/jszip@3.10.1/dist/jszip.min.js"></script>
435
- <script src="https://cdn.jsdelivr.net/npm/marked@11.1.1/marked.min.js"></script>
436
- <script src="https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.9.0/build/highlight.min.js"></script>
437
-
438
- <!-- 引入 JS -->
439
- <script src="/js/i18n.js"></script>
440
- <script src="/js/app.js"></script>
441
- <script src="/js/file.js"></script>
442
- </body>
443
- </html>
File without changes