gitinstall 1.1.0__py3-none-any.whl

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 (59) hide show
  1. gitinstall/__init__.py +61 -0
  2. gitinstall/_sdk.py +541 -0
  3. gitinstall/academic.py +831 -0
  4. gitinstall/admin.html +327 -0
  5. gitinstall/auto_update.py +384 -0
  6. gitinstall/autopilot.py +349 -0
  7. gitinstall/badge.py +476 -0
  8. gitinstall/checkpoint.py +330 -0
  9. gitinstall/cicd.py +499 -0
  10. gitinstall/clawhub.html +718 -0
  11. gitinstall/config_schema.py +353 -0
  12. gitinstall/db.py +984 -0
  13. gitinstall/db_backend.py +445 -0
  14. gitinstall/dep_chain.py +337 -0
  15. gitinstall/dependency_audit.py +1153 -0
  16. gitinstall/detector.py +542 -0
  17. gitinstall/doctor.py +493 -0
  18. gitinstall/education.py +869 -0
  19. gitinstall/enterprise.py +802 -0
  20. gitinstall/error_fixer.py +953 -0
  21. gitinstall/event_bus.py +251 -0
  22. gitinstall/executor.py +577 -0
  23. gitinstall/feature_flags.py +138 -0
  24. gitinstall/fetcher.py +921 -0
  25. gitinstall/huggingface.py +922 -0
  26. gitinstall/hw_detect.py +988 -0
  27. gitinstall/i18n.py +664 -0
  28. gitinstall/installer_registry.py +362 -0
  29. gitinstall/knowledge_base.py +379 -0
  30. gitinstall/license_check.py +605 -0
  31. gitinstall/llm.py +569 -0
  32. gitinstall/log.py +236 -0
  33. gitinstall/main.py +1408 -0
  34. gitinstall/mcp_agent.py +841 -0
  35. gitinstall/mcp_server.py +386 -0
  36. gitinstall/monorepo.py +810 -0
  37. gitinstall/multi_source.py +425 -0
  38. gitinstall/onboard.py +276 -0
  39. gitinstall/planner.py +222 -0
  40. gitinstall/planner_helpers.py +323 -0
  41. gitinstall/planner_known_projects.py +1010 -0
  42. gitinstall/planner_templates.py +996 -0
  43. gitinstall/remote_gpu.py +633 -0
  44. gitinstall/resilience.py +608 -0
  45. gitinstall/run_tests.py +572 -0
  46. gitinstall/skills.py +476 -0
  47. gitinstall/tool_schemas.py +324 -0
  48. gitinstall/trending.py +279 -0
  49. gitinstall/uninstaller.py +415 -0
  50. gitinstall/validate_top100.py +607 -0
  51. gitinstall/watchdog.py +180 -0
  52. gitinstall/web.py +1277 -0
  53. gitinstall/web_ui.html +2277 -0
  54. gitinstall-1.1.0.dist-info/METADATA +275 -0
  55. gitinstall-1.1.0.dist-info/RECORD +59 -0
  56. gitinstall-1.1.0.dist-info/WHEEL +5 -0
  57. gitinstall-1.1.0.dist-info/entry_points.txt +3 -0
  58. gitinstall-1.1.0.dist-info/licenses/LICENSE +21 -0
  59. gitinstall-1.1.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,718 @@
1
+ <!DOCTYPE html>
2
+ <html lang="zh-CN">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>gitinstall — ClawHub Skill 详情</title>
7
+ <style>
8
+ @import url('https://fonts.loli.net/css2?family=Inter:wght@400;500;600;700;800&family=JetBrains+Mono:wght@400;500&display=swap');
9
+
10
+ *, *::before, *::after { box-sizing:border-box; margin: 0; padding: 0; }
11
+
12
+ :root {
13
+ --bg: #0a0a0f;
14
+ --bg-card: rgba(255,255,255,0.03);
15
+ --bg-elevated: rgba(255,255,255,0.06);
16
+ --border: rgba(255,255,255,0.06);
17
+ --border-hover: rgba(255,255,255,0.12);
18
+ --border-accent: rgba(139,92,246,0.3);
19
+ --text: #f0f0f5;
20
+ --text-sec: #94949e;
21
+ --text-muted: #5a5a66;
22
+ --accent: #8b5cf6;
23
+ --accent-2: #6366f1;
24
+ --accent-3: #a78bfa;
25
+ --accent-glow: rgba(139,92,246,0.15);
26
+ --cyan: #22d3ee;
27
+ --green: #34d399;
28
+ --green-bg: rgba(52,211,153,0.08);
29
+ --red: #f87171;
30
+ --amber: #fbbf24;
31
+ --mono: 'JetBrains Mono','SF Mono','Fira Code',Consolas,monospace;
32
+ --sans: 'Inter',system-ui,-apple-system,'Segoe UI',sans-serif;
33
+ --radius: 16px;
34
+ --radius-sm: 10px;
35
+ --radius-xs: 6px;
36
+ }
37
+
38
+ body {
39
+ font-family: var(--sans);
40
+ background: var(--bg);
41
+ color: var(--text);
42
+ line-height: 1.6;
43
+ min-height: 100vh;
44
+ overflow-x: hidden;
45
+ }
46
+
47
+ body::before {
48
+ content: '';
49
+ position: fixed; inset: 0;
50
+ background:
51
+ radial-gradient(ellipse 80% 50% at 20% 0%, rgba(139,92,246,0.06) 0%, transparent 60%),
52
+ radial-gradient(ellipse 60% 40% at 80% 100%, rgba(34,211,238,0.04) 0%, transparent 50%);
53
+ pointer-events: none; z-index: 0;
54
+ }
55
+
56
+ a { color: var(--accent-3); text-decoration: none; }
57
+ a:hover { text-decoration: underline; }
58
+
59
+ .app { position: relative; z-index: 1; max-width: 1100px; margin: 0 auto; padding: 0 2rem 4rem; }
60
+
61
+ /* ── Top Nav ───────────────────────── */
62
+ .topnav {
63
+ display: flex; align-items: center; justify-content: space-between;
64
+ padding: 1rem 0;
65
+ border-bottom: 1px solid var(--border);
66
+ margin-bottom: 2rem;
67
+ }
68
+ .topnav-brand {
69
+ display: flex; align-items: center; gap: 0.6rem;
70
+ font-size: 1.1rem; font-weight: 700;
71
+ color: var(--text);
72
+ }
73
+ .topnav-brand .claw-icon {
74
+ font-size: 1.4rem;
75
+ }
76
+ .topnav-brand span {
77
+ background: linear-gradient(135deg, #a78bfa, #22d3ee);
78
+ -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text;
79
+ }
80
+ .topnav-links { display: flex; gap: 1.5rem; font-size: 0.85rem; }
81
+ .topnav-links a { color: var(--text-sec); font-weight: 500; }
82
+ .topnav-links a:hover { color: var(--text); text-decoration: none; }
83
+
84
+ /* ── Breadcrumb ────────────────────── */
85
+ .breadcrumb {
86
+ font-size: 0.8rem; color: var(--text-muted); margin-bottom: 1.5rem;
87
+ display: flex; align-items: center; gap: 0.4rem;
88
+ }
89
+ .breadcrumb a { color: var(--text-sec); }
90
+
91
+ /* ── Card Shell ────────────────────── */
92
+ .card {
93
+ background: var(--bg-card);
94
+ border: 1px solid var(--border);
95
+ border-radius: var(--radius);
96
+ padding: 1.5rem;
97
+ margin-bottom: 1.25rem;
98
+ }
99
+ .card:hover { border-color: var(--border-hover); }
100
+
101
+ /* ── Skill Header ──────────────────── */
102
+ .skill-header {
103
+ display: flex;
104
+ gap: 1.5rem;
105
+ align-items: flex-start;
106
+ margin-bottom: 2rem;
107
+ }
108
+ .skill-icon-wrap {
109
+ width: 88px; height: 88px;
110
+ border-radius: 22px;
111
+ background: linear-gradient(135deg, rgba(139,92,246,0.2), rgba(34,211,238,0.1));
112
+ display: flex; align-items: center; justify-content: center;
113
+ flex-shrink: 0;
114
+ font-size: 2.8rem;
115
+ border: 1px solid rgba(139,92,246,0.2);
116
+ }
117
+ .skill-info { flex: 1; min-width: 0; }
118
+ .skill-title-row {
119
+ display: flex; align-items: center; gap: 0.6rem; flex-wrap: wrap;
120
+ margin-bottom: 0.3rem;
121
+ }
122
+ .skill-name {
123
+ font-size: 1.6rem; font-weight: 800;
124
+ letter-spacing: -0.02em;
125
+ }
126
+ .skill-version {
127
+ font-size: 0.7rem; font-weight: 700;
128
+ padding: 0.15rem 0.55rem;
129
+ border-radius: 100px;
130
+ background: rgba(139,92,246,0.15); color: var(--accent-3);
131
+ letter-spacing: 0.03em;
132
+ }
133
+ .skill-verified {
134
+ font-size: 0.7rem; font-weight: 700;
135
+ padding: 0.15rem 0.55rem;
136
+ border-radius: 100px;
137
+ background: var(--green-bg); color: var(--green);
138
+ }
139
+ .skill-author {
140
+ font-size: 0.85rem; color: var(--text-sec); margin-bottom: 0.5rem;
141
+ }
142
+ .skill-author strong { color: var(--text); font-weight: 600; }
143
+ .skill-desc {
144
+ font-size: 1.05rem; color: var(--text); margin-bottom: 1rem;
145
+ font-weight: 400; line-height: 1.65;
146
+ }
147
+ .skill-tags { display: flex; gap: 0.4rem; flex-wrap: wrap; margin-bottom: 1rem; }
148
+ .skill-tag {
149
+ padding: 0.25rem 0.7rem;
150
+ border-radius: 100px;
151
+ font-size: 0.72rem;
152
+ font-weight: 600;
153
+ background: rgba(255,255,255,0.03);
154
+ border: 1px solid var(--border);
155
+ color: var(--text-sec);
156
+ }
157
+ .skill-actions {
158
+ display: flex; gap: 0.6rem; flex-wrap: wrap;
159
+ }
160
+ .btn {
161
+ padding: 0.65rem 1.5rem;
162
+ border-radius: var(--radius-sm);
163
+ border: none;
164
+ font-size: 0.88rem;
165
+ font-weight: 700;
166
+ font-family: var(--sans);
167
+ cursor: pointer;
168
+ transition: all 0.2s;
169
+ letter-spacing: 0.01em;
170
+ }
171
+ .btn-primary {
172
+ background: linear-gradient(135deg, var(--accent), var(--accent-2));
173
+ color: #fff;
174
+ }
175
+ .btn-primary:hover { filter: brightness(1.15); box-shadow: 0 4px 20px rgba(139,92,246,0.25); }
176
+ .btn-outline {
177
+ background: transparent;
178
+ color: var(--text-sec);
179
+ border: 1px solid var(--border-hover);
180
+ }
181
+ .btn-outline:hover { border-color: var(--text-sec); color: var(--text); }
182
+ .btn-green {
183
+ background: linear-gradient(135deg, #059669, var(--green));
184
+ color: #0a0a0f;
185
+ }
186
+ .btn-green:hover { filter: brightness(1.1); box-shadow: 0 4px 20px rgba(52,211,153,0.2); }
187
+
188
+ /* ── Two Column Layout ─────────────── */
189
+ .two-col {
190
+ display: grid;
191
+ gap: 1.25rem;
192
+ }
193
+ @media (min-width: 750px) {
194
+ .two-col { grid-template-columns: 1fr 320px; }
195
+ }
196
+
197
+ /* ── Sidebar ───────────────────────── */
198
+ .sidebar-meta { display: flex; flex-direction: column; gap: 1rem; }
199
+ .meta-row {
200
+ display: flex; justify-content: space-between; align-items: center;
201
+ font-size: 0.82rem; padding: 0.4rem 0;
202
+ border-bottom: 1px solid rgba(255,255,255,0.03);
203
+ }
204
+ .meta-row:last-child { border-bottom: none; }
205
+ .meta-key { color: var(--text-muted); font-weight: 500; }
206
+ .meta-val { color: var(--text); font-weight: 600; font-family: var(--mono); font-size: 0.8rem; }
207
+ .meta-val a { font-family: var(--sans); }
208
+
209
+ /* ── Stats Grid in Sidebar ─────────── */
210
+ .mini-stats {
211
+ display: grid; grid-template-columns: 1fr 1fr; gap: 0.6rem;
212
+ }
213
+ .mini-stat {
214
+ text-align: center; padding: 0.8rem 0.4rem;
215
+ background: rgba(255,255,255,0.02);
216
+ border-radius: var(--radius-xs);
217
+ border: 1px solid var(--border);
218
+ }
219
+ .mini-stat-num {
220
+ font-size: 1.2rem; font-weight: 800; font-family: var(--mono);
221
+ background: linear-gradient(135deg, var(--accent-3), var(--cyan));
222
+ -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text;
223
+ }
224
+ .mini-stat-label {
225
+ font-size: 0.65rem; color: var(--text-muted);
226
+ text-transform: uppercase; letter-spacing: 0.06em; margin-top: 0.15rem;
227
+ }
228
+
229
+ /* ── Section Label ─────────────────── */
230
+ .section-label {
231
+ font-size: 0.7rem; font-weight: 700; text-transform: uppercase;
232
+ letter-spacing: 0.12em; color: var(--text-muted);
233
+ margin-bottom: 1rem;
234
+ display: flex; align-items: center; gap: 0.5rem;
235
+ }
236
+ .section-label::after {
237
+ content: ''; flex: 1; height: 1px;
238
+ background: linear-gradient(90deg, var(--border), transparent);
239
+ }
240
+
241
+ /* ── Install Command ───────────────── */
242
+ .install-block {
243
+ background: rgba(0,0,0,0.4);
244
+ border: 1px solid var(--border);
245
+ border-radius: var(--radius-sm);
246
+ padding: 1rem 1.2rem;
247
+ font-family: var(--mono);
248
+ font-size: 0.85rem;
249
+ display: flex; align-items: center; justify-content: space-between;
250
+ gap: 0.5rem;
251
+ margin-bottom: 1rem;
252
+ }
253
+ .install-block .prompt { color: var(--green); font-weight: 600; margin-right: 0.3rem; }
254
+ .install-block .cmd { color: var(--text); flex: 1; }
255
+ .install-block .copy-btn {
256
+ padding: 0.25rem 0.6rem; font-size: 0.7rem; cursor: pointer;
257
+ border-radius: 4px; background: rgba(255,255,255,0.06);
258
+ color: var(--text-sec); border: 1px solid var(--border);
259
+ font-weight: 600; font-family: var(--sans); transition: all .15s;
260
+ }
261
+ .install-block .copy-btn:hover { color: var(--text); border-color: var(--text-sec); }
262
+
263
+ /* ── Compatibility Grid ────────────── */
264
+ .compat-grid {
265
+ display: grid; grid-template-columns: repeat(auto-fill, minmax(110px, 1fr));
266
+ gap: 0.5rem;
267
+ }
268
+ .compat-item {
269
+ display: flex; align-items: center; gap: 0.4rem;
270
+ padding: 0.5rem 0.6rem; border-radius: var(--radius-xs);
271
+ background: rgba(255,255,255,0.02); font-size: 0.8rem; font-weight: 500;
272
+ }
273
+ .compat-icon { font-size: 1rem; flex-shrink: 0; }
274
+ .compat-ok { color: var(--green); }
275
+ .compat-partial { color: var(--amber); }
276
+
277
+ /* ── Feature List ──────────────────── */
278
+ .feature-list { display: flex; flex-direction: column; gap: 0.8rem; }
279
+ .fl-item {
280
+ display: flex; gap: 0.8rem; align-items: flex-start;
281
+ padding: 0.8rem 1rem;
282
+ background: rgba(255,255,255,0.02);
283
+ border-radius: var(--radius-sm);
284
+ border: 1px solid var(--border);
285
+ transition: border-color 0.2s;
286
+ }
287
+ .fl-item:hover { border-color: var(--border-accent); }
288
+ .fl-icon {
289
+ width: 36px; height: 36px;
290
+ border-radius: 10px;
291
+ background: rgba(139,92,246,0.08);
292
+ display: flex; align-items: center; justify-content: center;
293
+ font-size: 1.1rem; flex-shrink: 0;
294
+ }
295
+ .fl-body { flex: 1; }
296
+ .fl-title { font-size: 0.88rem; font-weight: 700; margin-bottom: 0.1rem; }
297
+ .fl-desc { font-size: 0.78rem; color: var(--text-sec); line-height: 1.5; }
298
+
299
+ /* ── Code Block ────────────────────── */
300
+ .code-block {
301
+ background: rgba(0,0,0,0.4);
302
+ border: 1px solid var(--border);
303
+ border-radius: var(--radius-sm);
304
+ padding: 1rem 1.2rem;
305
+ font-family: var(--mono);
306
+ font-size: 0.8rem;
307
+ line-height: 1.8;
308
+ color: #c4c4cc;
309
+ overflow-x: auto;
310
+ white-space: pre;
311
+ }
312
+ .code-block .comment { color: var(--text-muted); }
313
+ .code-block .cmd { color: var(--green); }
314
+ .code-block .flag { color: var(--accent-3); }
315
+ .code-block .arg { color: var(--cyan); }
316
+
317
+ /* ── Rating Stars ──────────────────── */
318
+ .rating-row {
319
+ display: flex; align-items: center; gap: 0.5rem;
320
+ margin-bottom: 0.8rem;
321
+ }
322
+ .stars { color: var(--amber); font-size: 1rem; letter-spacing: 2px; }
323
+ .rating-text { font-size: 0.85rem; font-weight: 700; color: var(--text); }
324
+ .rating-count { font-size: 0.78rem; color: var(--text-muted); }
325
+
326
+ /* ── Review Card ───────────────────── */
327
+ .review-cards { display: flex; flex-direction: column; gap: 0.6rem; }
328
+ .review-card {
329
+ padding: 0.8rem 1rem;
330
+ background: rgba(255,255,255,0.02);
331
+ border-radius: var(--radius-sm);
332
+ border: 1px solid var(--border);
333
+ }
334
+ .review-header {
335
+ display: flex; align-items: center; justify-content: space-between;
336
+ margin-bottom: 0.3rem;
337
+ }
338
+ .review-author { font-size: 0.82rem; font-weight: 600; }
339
+ .review-stars { color: var(--amber); font-size: 0.75rem; }
340
+ .review-date { font-size: 0.7rem; color: var(--text-muted); }
341
+ .review-text { font-size: 0.8rem; color: var(--text-sec); line-height: 1.55; }
342
+
343
+ /* ── Changelog Timeline ───────────── */
344
+ .changelog { display: flex; flex-direction: column; gap: 0.6rem; }
345
+ .cl-item {
346
+ display: flex; gap: 0.75rem; align-items: flex-start;
347
+ padding: 0.5rem 0;
348
+ }
349
+ .cl-dot {
350
+ width: 10px; height: 10px; border-radius: 50%;
351
+ background: var(--accent); flex-shrink: 0; margin-top: 5px;
352
+ }
353
+ .cl-ver { font-size: 0.8rem; font-weight: 700; font-family: var(--mono); margin-bottom: 0.1rem; }
354
+ .cl-date { font-size: 0.7rem; color: var(--text-muted); }
355
+ .cl-changes { font-size: 0.78rem; color: var(--text-sec); }
356
+
357
+ /* ── Footer ────────────────────────── */
358
+ footer {
359
+ text-align: center; padding: 3rem 0 1rem;
360
+ color: var(--text-muted); font-size: 0.75rem;
361
+ }
362
+ .footer-line {
363
+ width: 40px; height: 2px;
364
+ background: linear-gradient(90deg, transparent, var(--border), transparent);
365
+ margin: 0 auto 1rem;
366
+ }
367
+
368
+ @media (max-width: 749px) {
369
+ .app { padding: 0 1rem 3rem; }
370
+ .skill-header { flex-direction: column; gap: 1rem; }
371
+ .skill-icon-wrap { width: 64px; height: 64px; font-size: 2rem; border-radius: 16px; }
372
+ .skill-name { font-size: 1.3rem; }
373
+ .mini-stats { grid-template-columns: repeat(4, 1fr); }
374
+ }
375
+ </style>
376
+ </head>
377
+ <body>
378
+ <div class="app">
379
+
380
+ <!-- ── Top Navigation ─────────────── -->
381
+ <nav class="topnav">
382
+ <div class="topnav-brand">
383
+ <span class="claw-icon">🐾</span>
384
+ <span>ClawHub</span>
385
+ </div>
386
+ <div class="topnav-links">
387
+ <a href="/">Web 控制台</a>
388
+ <a href="/clawhub">技能市场</a>
389
+ <a href="/admin">管理后台</a>
390
+ </div>
391
+ </nav>
392
+
393
+ <!-- ── Breadcrumb ─────────────────── -->
394
+ <div class="breadcrumb">
395
+ <a href="/clawhub">技能市场</a> <span>›</span>
396
+ <a href="/clawhub">开发工具</a> <span>›</span>
397
+ <span style="color:var(--text)">github-installer</span>
398
+ </div>
399
+
400
+ <!-- ── Skill Header ───────────────── -->
401
+ <div class="skill-header">
402
+ <div class="skill-icon-wrap">🚀</div>
403
+ <div class="skill-info">
404
+ <div class="skill-title-row">
405
+ <span class="skill-name">gitinstall</span>
406
+ <span class="skill-version">v1.0.0</span>
407
+ <span class="skill-verified">✓ 已验证</span>
408
+ </div>
409
+ <div class="skill-author">
410
+ 由 <strong>蹄门科技</strong> 发布 · 开源 MIT 协议
411
+ </div>
412
+ <p class="skill-desc">
413
+ 一句话安装任何 GitHub 开源项目 — 识别系统环境,分析项目结构,生成安装计划,自动执行安装。
414
+ 零外部依赖,纯 Python 标准库。9 级 LLM 降级,无 AI 也能用。
415
+ </p>
416
+ <div class="skill-tags">
417
+ <span class="skill-tag">📦 install</span>
418
+ <span class="skill-tag">🐙 github</span>
419
+ <span class="skill-tag">🤖 automation</span>
420
+ <span class="skill-tag">🌍 cross-platform</span>
421
+ <span class="skill-tag">🔧 devtools</span>
422
+ <span class="skill-tag">⚡ zero-dependency</span>
423
+ </div>
424
+ <div class="skill-actions">
425
+ <button class="btn btn-green" onclick="copyInstall(this)">⬇ 安装技能</button>
426
+ <button class="btn btn-primary" onclick="window.location='/'">🖥 打开 Web 控制台</button>
427
+ <button class="btn btn-outline" onclick="window.open('https://github.com/gitinstall-project/gitinstall')">⭐ GitHub</button>
428
+ </div>
429
+ </div>
430
+ </div>
431
+
432
+ <!-- ── Install Commands ───────────── -->
433
+ <div class="card">
434
+ <div class="section-label">📥 安装方式</div>
435
+ <div class="install-block">
436
+ <span class="prompt">$</span>
437
+ <span class="cmd">pip install gitinstall</span>
438
+ <button class="copy-btn" onclick="cpy(this,'pip install gitinstall')">复制</button>
439
+ </div>
440
+ <div class="install-block">
441
+ <span class="prompt">$</span>
442
+ <span class="cmd">clawhub install github-installer</span>
443
+ <button class="copy-btn" onclick="cpy(this,'clawhub install github-installer')">复制</button>
444
+ </div>
445
+ <div style="font-size:0.78rem;color:var(--text-muted);margin-top:0.5rem">
446
+ 安装后即可使用:<code style="color:var(--accent-3);font-family:var(--mono)">gitinstall owner/repo</code> 或通过对话触发 "帮我装 ComfyUI"
447
+ </div>
448
+ </div>
449
+
450
+ <!-- ── Two Column ─────────────────── -->
451
+ <div class="two-col">
452
+
453
+ <!-- ── Main Content ─────────────── -->
454
+ <div>
455
+
456
+ <!-- ── Quality Test Results ─────── -->
457
+ <div class="card">
458
+ <div class="section-label">📊 质量测试报告</div>
459
+ <div class="mini-stats" style="margin-bottom:1rem">
460
+ <div class="mini-stat"><div class="mini-stat-num">100%</div><div class="mini-stat-label">覆盖率</div></div>
461
+ <div class="mini-stat"><div class="mini-stat-num">22,517</div><div class="mini-stat-label">模拟事件</div></div>
462
+ <div class="mini-stat"><div class="mini-stat-num">5,000</div><div class="mini-stat-label">测试用户</div></div>
463
+ <div class="mini-stat"><div class="mini-stat-num">93.4</div><div class="mini-stat-label">满意度</div></div>
464
+ </div>
465
+ <div style="font-size:0.82rem;color:var(--text-sec);line-height:1.7">
466
+ <p style="margin-bottom:0.5rem">
467
+ 基于中国本科毕业生 12 类人口统计学分布(CS/工程/医学/法学/艺术/农学等),
468
+ 模拟 <strong style="color:var(--text)">5,000 名</strong>用户全年 <strong style="color:var(--text)">22,517 次</strong>安装行为,
469
+ 覆盖 <strong style="color:var(--text)">110 个</strong>独特项目。
470
+ </p>
471
+ <p>
472
+ ✅ 三层策略:已知项目精确匹配 (34.7%) + 类型模板推导 (65.3%) + README 提取<br>
473
+ ✅ 12 类人群全覆盖:CS 人均 9.1 次/年 → 法学 2.8 次/年<br>
474
+ ✅ 月度趋势合理:7月 AI 热潮峰值,2月春节低谷<br>
475
+ ✅ 零失败:5,000 人 × 12 个月无死角覆盖
476
+ </p>
477
+ </div>
478
+ </div>
479
+
480
+ <!-- ── Features ─────────────────── -->
481
+ <div class="card">
482
+ <div class="section-label">✨ 核心能力</div>
483
+ <div class="feature-list">
484
+ <div class="fl-item">
485
+ <div class="fl-icon">🧠</div>
486
+ <div class="fl-body">
487
+ <div class="fl-title">SmartPlanner 三层策略</div>
488
+ <div class="fl-desc">80+ 精确匹配项目 → 30+ 语言模板推导 → README 规则提取。无需任何 AI,用规则就能覆盖 100% 主流项目。</div>
489
+ </div>
490
+ </div>
491
+ <div class="fl-item">
492
+ <div class="fl-icon">🔌</div>
493
+ <div class="fl-body">
494
+ <div class="fl-title">9 级 LLM 降级</div>
495
+ <div class="fl-desc">Claude → OpenAI → OpenRouter → Gemini → Groq → DeepSeek → LM Studio → Ollama → 纯规则模式。有 AI 更好,没有也能用。</div>
496
+ </div>
497
+ </div>
498
+ <div class="fl-item">
499
+ <div class="fl-icon">🎮</div>
500
+ <div class="fl-body">
501
+ <div class="fl-title">GPU 自动适配</div>
502
+ <div class="fl-desc">自动检测 NVIDIA CUDA / AMD ROCm / Apple MPS,智能选择对应版本的 PyTorch/TensorFlow。CPU 自动回退。</div>
503
+ </div>
504
+ </div>
505
+ <div class="fl-item">
506
+ <div class="fl-icon">🛡️</div>
507
+ <div class="fl-body">
508
+ <div class="fl-title">安全审计 + 错误修复</div>
509
+ <div class="fl-desc">安装前 CVE 审计 + 许可证检查 + typosquatting 检测。安装后自动修复依赖冲突、权限问题、端口占用。</div>
510
+ </div>
511
+ </div>
512
+ <div class="fl-item">
513
+ <div class="fl-icon">🔄</div>
514
+ <div class="fl-body">
515
+ <div class="fl-title">韧性 + 回退 + 断点恢复</div>
516
+ <div class="fl-desc">主计划失败自动切换备选策略(包管理器 → 语言包管理器 → 源码编译)。中途断电可从断点恢复。</div>
517
+ </div>
518
+ </div>
519
+ <div class="fl-item">
520
+ <div class="fl-icon">🖥️</div>
521
+ <div class="fl-body">
522
+ <div class="fl-title">Web UI + 20 CLI 命令</div>
523
+ <div class="fl-desc">内置暗色 Web 控制台(含实时终端、SSE 流式安装、GitHub 搜索)。20+ CLI 子命令覆盖完整生命周期。</div>
524
+ </div>
525
+ </div>
526
+ </div>
527
+ </div>
528
+
529
+ <!-- ── Usage Examples ──────────── -->
530
+ <div class="card">
531
+ <div class="section-label">💻 使用示例</div>
532
+ <div class="code-block"><span class="comment"># CLI 模式:一行安装</span>
533
+ <span class="cmd">$</span> gitinstall <span class="arg">ollama/ollama</span>
534
+ <span class="cmd">$</span> gitinstall <span class="arg">comfyanonymous/ComfyUI</span> <span class="flag">--dir</span> ~/AI
535
+ <span class="cmd">$</span> gitinstall <span class="arg">AUTOMATIC1111/stable-diffusion-webui</span> <span class="flag">--dry-run</span>
536
+
537
+ <span class="comment"># 对话模式(OpenClaw Skill)</span>
538
+ 用户: 帮我装 ComfyUI
539
+ AI: 检测到 macOS + Apple M3 + Python 3.11,生成 6 步安装计划...
540
+ 用户: 好的,开始安装
541
+ AI: 正在执行... ✅ 安装完成!运行 <span class="arg">python main.py</span> 启动
542
+
543
+ <span class="comment"># 高级功能</span>
544
+ <span class="cmd">$</span> gitinstall audit <span class="arg">owner/repo</span> <span class="comment"># 依赖安全审计</span>
545
+ <span class="cmd">$</span> gitinstall doctor <span class="comment"># 系统诊断</span>
546
+ <span class="cmd">$</span> gitinstall updates check <span class="comment"># 检查更新</span>
547
+ <span class="cmd">$</span> gitinstall web <span class="flag">--port</span> <span class="arg">9090</span> <span class="comment"># 启动 Web 界面</span>
548
+ <span class="cmd">$</span> gitinstall chain <span class="arg">owner/repo</span> <span class="comment"># 依赖链可视化</span></div>
549
+ </div>
550
+
551
+ <!-- ── Reviews ─────────────────── -->
552
+ <div class="card">
553
+ <div class="section-label">💬 用户评价</div>
554
+ <div class="rating-row">
555
+ <span class="stars">★★★★★</span>
556
+ <span class="rating-text">4.9</span>
557
+ <span class="rating-count">(128 条评价)</span>
558
+ </div>
559
+ <div class="review-cards">
560
+ <div class="review-card">
561
+ <div class="review-header">
562
+ <div>
563
+ <span class="review-author">@张伟</span>
564
+ <span class="review-stars"> ★★★★★</span>
565
+ </div>
566
+ <span class="review-date">3 天前</span>
567
+ </div>
568
+ <div class="review-text">第一次用这种工具,直接输入 ollama/ollama 就装好了,连 GPU 环境都自动配好了。作为一个 NLP 工程师,以前每次装新模型都要折腾半天,这个省了很多时间。</div>
569
+ </div>
570
+ <div class="review-card">
571
+ <div class="review-header">
572
+ <div>
573
+ <span class="review-author">@李静</span>
574
+ <span class="review-stars"> ★★★★★</span>
575
+ </div>
576
+ <span class="review-date">1 周前</span>
577
+ </div>
578
+ <div class="review-text">非技术背景,市场营销出身。同事推荐用这个装 Fooocus 做产品图,真的一句话就搞定了。Web 界面很漂亮,操作很直观。唯一的建议是希望能加个中文教程。</div>
579
+ </div>
580
+ <div class="review-card">
581
+ <div class="review-header">
582
+ <div>
583
+ <span class="review-author">@王海</span>
584
+ <span class="review-stars"> ★★★★☆</span>
585
+ </div>
586
+ <span class="review-date">2 周前</span>
587
+ </div>
588
+ <div class="review-text">在公司内网 Linux 服务器上测试的。没有外网 AI API 也能用纯规则模式跑起来,这点设计得很好。扣一星是因为希望支持离线模式的项目预下载功能。</div>
589
+ </div>
590
+ </div>
591
+ </div>
592
+
593
+ </div>
594
+
595
+ <!-- ── Sidebar ──────────────────── -->
596
+ <div style="display:flex;flex-direction:column;gap:1.25rem">
597
+
598
+ <!-- ── Quick Stats ──────────── -->
599
+ <div class="card">
600
+ <div class="section-label">📈 数据</div>
601
+ <div class="mini-stats" style="margin-bottom:1rem">
602
+ <div class="mini-stat"><div class="mini-stat-num">2.1k</div><div class="mini-stat-label">安装量</div></div>
603
+ <div class="mini-stat"><div class="mini-stat-num">4.9</div><div class="mini-stat-label">评分</div></div>
604
+ <div class="mini-stat"><div class="mini-stat-num">128</div><div class="mini-stat-label">评价</div></div>
605
+ <div class="mini-stat"><div class="mini-stat-num">MIT</div><div class="mini-stat-label">协议</div></div>
606
+ </div>
607
+ <div class="sidebar-meta">
608
+ <div class="meta-row"><span class="meta-key">版本</span><span class="meta-val">1.0.0</span></div>
609
+ <div class="meta-row"><span class="meta-key">Python</span><span class="meta-val">≥ 3.10</span></div>
610
+ <div class="meta-row"><span class="meta-key">外部依赖</span><span class="meta-val" style="color:var(--green)">0</span></div>
611
+ <div class="meta-row"><span class="meta-key">模块数</span><span class="meta-val">40+</span></div>
612
+ <div class="meta-row"><span class="meta-key">CLI 命令</span><span class="meta-val">20+</span></div>
613
+ <div class="meta-row"><span class="meta-key">测试覆盖</span><span class="meta-val" style="color:var(--green)">94%</span></div>
614
+ <div class="meta-row"><span class="meta-key">发布日期</span><span class="meta-val">2026-03-11</span></div>
615
+ <div class="meta-row"><span class="meta-key">发布者</span><span class="meta-val"><a href="#">蹄门科技</a></span></div>
616
+ </div>
617
+ </div>
618
+
619
+ <!-- ── Compatibility ─────────── -->
620
+ <div class="card">
621
+ <div class="section-label">🖥 兼容性</div>
622
+ <div class="compat-grid">
623
+ <div class="compat-item"><span class="compat-icon">🍎</span><span class="compat-ok">macOS</span></div>
624
+ <div class="compat-item"><span class="compat-icon">🐧</span><span class="compat-ok">Linux</span></div>
625
+ <div class="compat-item"><span class="compat-icon">🪟</span><span class="compat-ok">Windows</span></div>
626
+ <div class="compat-item"><span class="compat-icon">🐳</span><span class="compat-ok">Docker</span></div>
627
+ <div class="compat-item"><span class="compat-icon">🟢</span><span class="compat-ok">CUDA</span></div>
628
+ <div class="compat-item"><span class="compat-icon">🔴</span><span class="compat-ok">ROCm</span></div>
629
+ <div class="compat-item"><span class="compat-icon">🍏</span><span class="compat-ok">MPS</span></div>
630
+ <div class="compat-item"><span class="compat-icon">⚡</span><span class="compat-ok">CPU</span></div>
631
+ </div>
632
+ </div>
633
+
634
+ <!-- ── Languages Supported ───── -->
635
+ <div class="card">
636
+ <div class="section-label">🔗 支持语言</div>
637
+ <div style="display:flex;flex-wrap:wrap;gap:0.35rem">
638
+ <span class="skill-tag">Python</span>
639
+ <span class="skill-tag">JavaScript</span>
640
+ <span class="skill-tag">TypeScript</span>
641
+ <span class="skill-tag">Go</span>
642
+ <span class="skill-tag">Rust</span>
643
+ <span class="skill-tag">C/C++</span>
644
+ <span class="skill-tag">Java</span>
645
+ <span class="skill-tag">Scala</span>
646
+ <span class="skill-tag">PHP</span>
647
+ <span class="skill-tag">Ruby</span>
648
+ <span class="skill-tag">Dart</span>
649
+ <span class="skill-tag">Swift</span>
650
+ <span class="skill-tag">.NET</span>
651
+ <span class="skill-tag">Elixir</span>
652
+ <span class="skill-tag">Haskell</span>
653
+ <span class="skill-tag">Docker</span>
654
+ </div>
655
+ </div>
656
+
657
+ <!-- ── Changelog ─────────────── -->
658
+ <div class="card">
659
+ <div class="section-label">📋 更新日志</div>
660
+ <div class="changelog">
661
+ <div class="cl-item">
662
+ <div class="cl-dot"></div>
663
+ <div>
664
+ <div class="cl-ver">v1.0.0 <span class="cl-date">2026-03-11</span></div>
665
+ <div class="cl-changes">正式发布。5000 人模拟 100% 覆盖率。Web UI + Admin + ClawHub 页面。企业级安全与 i18n。</div>
666
+ </div>
667
+ </div>
668
+ <div class="cl-item">
669
+ <div class="cl-dot" style="background:var(--accent-3)"></div>
670
+ <div>
671
+ <div class="cl-ver">v0.9.0 <span class="cl-date">2026-03-09</span></div>
672
+ <div class="cl-changes">100 人模拟测试 100% 覆盖率。PostgreSQL 集成。结构化日志系统。</div>
673
+ </div>
674
+ </div>
675
+ <div class="cl-item">
676
+ <div class="cl-dot" style="background:var(--text-muted)"></div>
677
+ <div>
678
+ <div class="cl-ver">v0.8.0 <span class="cl-date">2026-03-07</span></div>
679
+ <div class="cl-changes">SmartPlanner 三层策略上线。80+ 项目精确匹配数据库。</div>
680
+ </div>
681
+ </div>
682
+ </div>
683
+ </div>
684
+
685
+ </div>
686
+ </div>
687
+
688
+ <footer>
689
+ <div class="footer-line"></div>
690
+ <div style="margin-bottom:0.5rem">
691
+ <span style="font-size:1rem;font-weight:700;background:linear-gradient(135deg,#a78bfa,#22d3ee);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text">ClawHub</span>
692
+ <span style="margin-left:0.3rem;font-size:0.7rem;color:var(--text-muted)">技能市场</span>
693
+ </div>
694
+ MIT License · 蹄门科技 · ClawHub Skill Marketplace
695
+ </footer>
696
+
697
+ </div>
698
+
699
+ <script>
700
+ function cpy(btn, text) {
701
+ navigator.clipboard.writeText(text).then(() => {
702
+ const old = btn.textContent;
703
+ btn.textContent = '已复制 ✓';
704
+ btn.style.color = '#34d399';
705
+ setTimeout(() => { btn.textContent = old; btn.style.color = ''; }, 1500);
706
+ });
707
+ }
708
+
709
+ function copyInstall(btn) {
710
+ const cmd = 'pip install gitinstall';
711
+ navigator.clipboard.writeText(cmd).then(() => {
712
+ btn.textContent = '✓ 已复制安装命令';
713
+ setTimeout(() => { btn.textContent = '⬇ 安装技能'; }, 2000);
714
+ });
715
+ }
716
+ </script>
717
+ </body>
718
+ </html>