skill-base 2.0.1

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 (51) hide show
  1. package/README.md +141 -0
  2. package/bin/skill-base.js +53 -0
  3. package/data/.gitkeep +0 -0
  4. package/package.json +36 -0
  5. package/src/database.js +119 -0
  6. package/src/index.js +88 -0
  7. package/src/middleware/.gitkeep +0 -0
  8. package/src/middleware/admin.js +23 -0
  9. package/src/middleware/auth.js +96 -0
  10. package/src/middleware/error.js +23 -0
  11. package/src/models/.gitkeep +0 -0
  12. package/src/models/skill.js +57 -0
  13. package/src/models/user.js +130 -0
  14. package/src/models/version.js +57 -0
  15. package/src/routes/.gitkeep +0 -0
  16. package/src/routes/auth.js +173 -0
  17. package/src/routes/collaborators.js +260 -0
  18. package/src/routes/init.js +86 -0
  19. package/src/routes/publish.js +108 -0
  20. package/src/routes/skills.js +119 -0
  21. package/src/routes/users.js +169 -0
  22. package/src/utils/.gitkeep +0 -0
  23. package/src/utils/crypto.js +35 -0
  24. package/src/utils/permission.js +45 -0
  25. package/src/utils/zip.js +35 -0
  26. package/static/admin/users.html +593 -0
  27. package/static/cli-code.html +203 -0
  28. package/static/css/.gitkeep +0 -0
  29. package/static/css/style.css +1567 -0
  30. package/static/diff.html +466 -0
  31. package/static/file.html +443 -0
  32. package/static/index.html +251 -0
  33. package/static/js/.gitkeep +0 -0
  34. package/static/js/admin/users.js +346 -0
  35. package/static/js/app.js +508 -0
  36. package/static/js/auth.js +151 -0
  37. package/static/js/cli-code.js +184 -0
  38. package/static/js/collaborators.js +283 -0
  39. package/static/js/diff.js +540 -0
  40. package/static/js/file.js +619 -0
  41. package/static/js/i18n.js +739 -0
  42. package/static/js/index.js +168 -0
  43. package/static/js/publish.js +718 -0
  44. package/static/js/settings.js +124 -0
  45. package/static/js/setup.js +157 -0
  46. package/static/js/skill.js +808 -0
  47. package/static/login.html +82 -0
  48. package/static/publish.html +459 -0
  49. package/static/settings.html +163 -0
  50. package/static/setup.html +101 -0
  51. package/static/skill.html +851 -0
@@ -0,0 +1,203 @@
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="cliCode.title">CLI 验证码 - Skill Base</title>
7
+ <link rel="stylesheet" href="/css/style.css">
8
+ <style>
9
+ .cli-code-card {
10
+ max-width: 480px;
11
+ margin: 0 auto;
12
+ text-align: center;
13
+ }
14
+
15
+ .cli-code-header {
16
+ margin-bottom: var(--spacing-lg);
17
+ }
18
+
19
+ .cli-code-title {
20
+ font-size: 1.5rem;
21
+ font-weight: 600;
22
+ color: var(--text-color);
23
+ margin-bottom: var(--spacing-xs);
24
+ }
25
+
26
+ .cli-code-subtitle {
27
+ font-size: 0.875rem;
28
+ color: var(--text-secondary);
29
+ }
30
+
31
+ .cli-code-display {
32
+ background-color: #0f172a;
33
+ border: 1px solid var(--border-color);
34
+ border-radius: var(--radius);
35
+ padding: var(--spacing-xl);
36
+ margin-bottom: var(--spacing-lg);
37
+ }
38
+
39
+ .cli-code-value {
40
+ font-family: 'JetBrains Mono', ui-monospace, monospace;
41
+ font-size: 2.5rem;
42
+ font-weight: 700;
43
+ color: #22c55e;
44
+ letter-spacing: 0.1em;
45
+ user-select: all;
46
+ }
47
+
48
+ .cli-code-timer {
49
+ display: flex;
50
+ align-items: center;
51
+ justify-content: center;
52
+ gap: var(--spacing-sm);
53
+ margin-top: var(--spacing-md);
54
+ font-size: 0.875rem;
55
+ color: var(--text-secondary);
56
+ }
57
+
58
+ .cli-code-timer.expiring {
59
+ color: var(--warning-color);
60
+ }
61
+
62
+ .cli-code-timer.expired {
63
+ color: var(--error-color);
64
+ }
65
+
66
+ .cli-code-timer-icon {
67
+ width: 16px;
68
+ height: 16px;
69
+ }
70
+
71
+ .cli-code-actions {
72
+ display: flex;
73
+ gap: var(--spacing-md);
74
+ justify-content: center;
75
+ }
76
+
77
+ .cli-code-actions .btn {
78
+ min-width: 120px;
79
+ }
80
+
81
+ .cli-code-hint {
82
+ margin-top: var(--spacing-lg);
83
+ padding: var(--spacing-md);
84
+ background-color: rgba(56, 189, 248, 0.1);
85
+ border: 1px solid rgba(56, 189, 248, 0.2);
86
+ border-radius: var(--radius);
87
+ font-size: 0.8125rem;
88
+ color: var(--text-secondary);
89
+ text-align: left;
90
+ }
91
+
92
+ .cli-code-hint code {
93
+ font-family: 'JetBrains Mono', ui-monospace, monospace;
94
+ background-color: rgba(0, 0, 0, 0.3);
95
+ padding: 0.125rem 0.375rem;
96
+ border-radius: 3px;
97
+ color: #7dd3fc;
98
+ }
99
+
100
+ .cli-code-loading {
101
+ display: flex;
102
+ flex-direction: column;
103
+ align-items: center;
104
+ gap: var(--spacing-md);
105
+ padding: var(--spacing-xl);
106
+ }
107
+
108
+ .cli-code-loading-text {
109
+ color: var(--text-secondary);
110
+ font-size: 0.875rem;
111
+ }
112
+
113
+ @media (max-width: 480px) {
114
+ .cli-code-value {
115
+ font-size: 1.75rem;
116
+ }
117
+
118
+ .cli-code-actions {
119
+ flex-direction: column;
120
+ }
121
+
122
+ .cli-code-actions .btn {
123
+ width: 100%;
124
+ }
125
+ }
126
+ </style>
127
+ </head>
128
+ <body class="app-devtools">
129
+ <!-- 导航栏 -->
130
+ <nav class="navbar">
131
+ <div class="container">
132
+ <a href="/" class="navbar-brand">
133
+ <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>
134
+ <span>Skill Base</span>
135
+ </a>
136
+ <div class="navbar-nav">
137
+ <a href="/" data-i18n="nav.home">首页</a>
138
+ <a href="/publish.html" class="hide-mobile" data-i18n="nav.publish">发布</a>
139
+ </div>
140
+ <!-- 用户区域由 JS 动态渲染 -->
141
+ </div>
142
+ </nav>
143
+
144
+ <!-- 页面内容 -->
145
+ <main class="page-content">
146
+ <div class="container">
147
+ <div class="card cli-code-card">
148
+ <div class="cli-code-header">
149
+ <h1 class="cli-code-title" data-i18n="cliCode.heading">CLI 验证码</h1>
150
+ <p class="cli-code-subtitle" data-i18n="cliCode.subtitle">在命令行工具中输入此验证码完成登录</p>
151
+ </div>
152
+
153
+ <!-- 加载状态 -->
154
+ <div id="loadingState" class="cli-code-loading">
155
+ <div class="spinner"></div>
156
+ <div class="cli-code-loading-text" data-i18n="cliCode.generating">正在生成验证码...</div>
157
+ </div>
158
+
159
+ <!-- 验证码显示区域 -->
160
+ <div id="codeDisplay" class="hidden">
161
+ <div class="cli-code-display">
162
+ <div id="codeValue" class="cli-code-value">----</div>
163
+ <div id="codeTimer" class="cli-code-timer">
164
+ <svg class="cli-code-timer-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
165
+ <circle cx="12" cy="12" r="10"/>
166
+ <polyline points="12 6 12 12 16 14"/>
167
+ </svg>
168
+ <span id="timerText">5:00 后过期</span>
169
+ </div>
170
+ </div>
171
+
172
+ <div class="cli-code-actions">
173
+ <button id="copyBtn" class="btn btn-primary" onclick="copyCode()">
174
+ <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
175
+ <rect x="9" y="9" width="13" height="13" rx="2" ry="2"/>
176
+ <path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"/>
177
+ </svg>
178
+ <span data-i18n="cliCode.copyBtn">复制验证码</span>
179
+ </button>
180
+ <button id="regenerateBtn" class="btn btn-secondary" onclick="regenerateCode()">
181
+ <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
182
+ <polyline points="23 4 23 10 17 10"/>
183
+ <path d="M20.49 15a9 9 0 1 1-2.12-9.36L23 10"/>
184
+ </svg>
185
+ <span data-i18n="cliCode.regenerate">重新生成</span>
186
+ </button>
187
+ </div>
188
+ </div>
189
+
190
+ <div class="cli-code-hint">
191
+ <strong data-i18n="cliCode.hintTitle">使用方法:</strong><br>
192
+ <span data-i18n-html="cliCode.hintText">在终端运行 <code>skb login</code>,然后输入上方验证码即可完成 CLI 登录。</span>
193
+ </div>
194
+ </div>
195
+ </div>
196
+ </main>
197
+
198
+ <!-- 引入 JS -->
199
+ <script src="/js/i18n.js"></script>
200
+ <script src="/js/app.js"></script>
201
+ <script src="/js/cli-code.js"></script>
202
+ </body>
203
+ </html>
File without changes