gitlink-cli/doc/demo.html

357 lines
22 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>GitLink CLI 项目综合演示</title>
<script src="https://cdn.jsdelivr.net/npm/mermaid@10/dist/mermaid.min.js"></script>
<style>
*{margin:0;padding:0;box-sizing:border-box;font-family:'Segoe UI',-apple-system,sans-serif}
body{background:#0f172a;color:#e2e8f0;overflow-x:hidden}
.hero{background:linear-gradient(135deg,#0f172a,#1e3a5f);padding:50px 30px 40px;text-align:center;border-bottom:3px solid #3b82f6}
.hero h1{font-size:32px;font-weight:700;background:linear-gradient(135deg,#38bdf8,#818cf8);-webkit-background-clip:text;-webkit-text-fill-color:transparent}
.hero .sub{color:#94a3b8;font-size:14px;margin-top:8px}
.hero .team{color:#64748b;font-size:12px;margin-top:4px}
.hero .stats-row{display:flex;justify-content:center;gap:30px;margin-top:20px;flex-wrap:wrap}
.hero .stat{text-align:center}
.hero .stat .num{font-size:28px;font-weight:700;color:#38bdf8}
.hero .stat .lbl{font-size:11px;color:#64748b}
.nav-bar{display:flex;background:#1e293b;border-bottom:1px solid #334155;overflow-x:auto;position:sticky;top:0;z-index:100}
.nav-btn{padding:12px 20px;font-size:13px;color:#94a3b8;cursor:pointer;border:none;background:transparent;white-space:nowrap;border-bottom:2px solid transparent;transition:all .2s}
.nav-btn:hover{color:#e2e8f0;background:#334155}
.nav-btn.active{color:#38bdf8;border-bottom-color:#38bdf8;background:rgba(56,189,248,.1)}
.content{max-width:1100px;margin:0 auto;padding:20px}
.section{display:none}
.section.active{display:block}
.section h2{font-size:22px;font-weight:600;margin-bottom:4px;color:#f1f5f9}
.section .desc{color:#94a3b8;font-size:13px;margin-bottom:16px}
.card-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:14px;margin-bottom:20px}
.card{background:#1e293b;border:1px solid #334155;border-radius:10px;padding:18px;transition:border-color .2s}
.card:hover{border-color:#3b82f6}
.card h3{font-size:14px;font-weight:600;color:#f1f5f9;margin-bottom:6px;display:flex;align-items:center;gap:8px}
.card h3 .badge{font-size:10px;background:#334155;padding:2px 8px;border-radius:8px;color:#94a3b8;font-weight:400}
.card p, .card li{font-size:12px;color:#94a3b8;line-height:1.6}
.card ul{padding-left:16px}
.card .cmd{background:#0f172a;color:#38bdf8;padding:8px 12px;border-radius:6px;font-family:'Consolas','Courier New',monospace;font-size:11px;margin:8px 0;overflow-x:auto;display:flex;justify-content:space-between;align-items:flex-start;gap:8px}
.card .cmd code{white-space:pre-wrap;word-break:break-all;flex:1}
.card .cmd .copy-btn{flex-shrink:0;background:#334155;border:none;color:#94a3b8;padding:2px 8px;border-radius:4px;cursor:pointer;font-size:10px;transition:all .2s}
.card .cmd .copy-btn:hover{background:#3b82f6;color:#fff}
.card .output{border-left:3px solid #3b82f6;padding:8px 12px;margin:8px 0;background:#0f172a;border-radius:0 6px 6px 0;font-size:11px;color:#94a3b8;font-family:'Consolas',monospace;white-space:pre-wrap;max-height:200px;overflow-y:auto}
.stat-bar{display:flex;gap:10px;margin:8px 0;flex-wrap:wrap}
.stat-bar .item{flex:1;min-width:80px;background:#0f172a;border-radius:6px;padding:10px;text-align:center}
.stat-bar .item .num{font-size:20px;font-weight:700;color:#38bdf8;display:block}
.stat-bar .item .lbl{font-size:10px;color:#64748b}
.table-wrap{overflow-x:auto;margin:10px 0}
table{width:100%;border-collapse:collapse;font-size:12px}
th{background:#334155;color:#e2e8f0;padding:8px 10px;text-align:left;font-weight:600;border:1px solid #1e293b}
td{padding:7px 10px;border:1px solid #1e293b;color:#94a3b8}
tr:nth-child(even) td{background:#162032}
.tag{display:inline-block;padding:2px 8px;border-radius:6px;font-size:10px;font-weight:500}
.tag-blue{background:#1e3a5f;color:#38bdf8}
.tag-green{background:#14331e;color:#22c55e}
.tag-purple{background:#241b3d;color:#a78bfa}
.tag-orange{background:#3d2415;color:#fb923c}
.tag-red{background:#3d1515;color:#f87171}
.mermaid-wrap{background:#0f172a;border-radius:10px;padding:20px;margin:12px 0;overflow:auto;border:1px solid #334155}
.footer{text-align:center;padding:30px;color:#475569;font-size:12px;border-top:1px solid #1e293b;margin-top:20px}
@media(max-width:640px){.hero h1{font-size:24px}.hero .stats-row{gap:15px}.card-grid{grid-template-columns:1fr}.nav-btn{padding:10px 14px;font-size:12px}}
</style>
</head>
<body>
<div class="hero">
<h1>GitLink 智能化能力提升项目</h1>
<div class="sub">gitlink-cli 命令行工具 · AI Agent Skills · 端到端工作流 · 科研辅助</div>
<div class="team">刘焱 · 赵昌 · 曾蔚然(组长) | 2026-06-30</div>
<div class="stats-row">
<div class="stat"><div class="num">31</div><div class="lbl">命令组</div></div>
<div class="stat"><div class="num">181+</div><div class="lbl">子命令</div></div>
<div class="stat"><div class="num">11</div><div class="lbl">Claude Skills</div></div>
<div class="stat"><div class="num">9</div><div class="lbl">工作流脚本</div></div>
<div class="stat"><div class="num">47</div><div class="lbl">交付文件</div></div>
<div class="stat"><div class="num">5.8k</div><div class="lbl">代码行数</div></div>
</div>
</div>
<div class="nav-bar" id="navBar">
<button class="nav-btn active" data-tab="overview">📋 总览</button>
<button class="nav-btn" data-tab="cli">💻 CLI 扩展</button>
<button class="nav-btn" data-tab="skills">🧠 AI Skills</button>
<button class="nav-btn" data-tab="workflow">⚙️ 工作流</button>
<button class="nav-btn" data-tab="research">🔬 科研辅助</button>
<button class="nav-btn" data-tab="team">👥 团队</button>
</div>
<div class="content">
<div id="tab-overview" class="section active">
<h2>项目总览</h2>
<div class="desc">围绕 gitlink-cli 命令行工具,四大子任务全面提升 GitLink 平台智能化能力</div>
<div class="card-grid">
<div class="card"><h3>💻 CLI 能力扩展 <span class="badge">子任务一 · 50%</span></h3><p>新增 23 个 Shortcut 命令组、181+ 个子命令REPL 交互模式4 平台包管理20 个单元测试文件。</p></div>
<div class="card"><h3>🧠 AI Agent Skills <span class="badge">子任务二 · 20%</span></h3><p>11 个 Claude Code Skills涵盖 Issue 分拣、代码审查、健康度报告、Release 管理、合规检查等。</p></div>
<div class="card"><h3>⚙️ 端到端工作流 <span class="badge">子任务三 · 20%</span></h3><p>社区运营自动化3 阶段和代码质量看门人4 阶段门禁),共 9 个可复现脚本。</p></div>
<div class="card"><h3>🔬 科研辅助 <span class="badge">子任务四 · 加分</span></h3><p>科研项目洞悉8 维采集 + 4 维评分)和热点追踪(交互式 HTML 知识图谱)。</p></div>
</div>
<div class="mermaid-wrap">
<pre class="mermaid" style="background:transparent">
flowchart LR
subgraph 子任务一["子任务一CLI 扩展"]
S1["31 命令组<br/>181+ 命令"] --> S2["REPL 交互"]
S1 --> S3["20 测试文件"]
end
subgraph 子任务二["子任务二Skills"]
SK1["Issue 分拣"] --> SK2["代码审查"]
SK2 --> SK3["健康度报告"]
end
subgraph 子任务三["子任务三:工作流"]
W1["社区运营"] --> W2["质量门禁"]
end
subgraph 子任务四["子任务四:科研"]
R1["项目洞悉"] --> R2["热点追踪"]
end
style 子任务一 fill:#1e3a5f,stroke:#3b82f6,color:#fff
style 子任务二 fill:#241b3d,stroke:#a78bfa,color:#fff
style 子任务三 fill:#3d2415,stroke:#fb923c,color:#fff
style 子任务四 fill:#14331e,stroke:#22c55e,color:#fff
</pre>
</div>
</div>
<div id="tab-cli" class="section">
<h2>子任务一CLI 能力扩展</h2>
<div class="desc">新增 23 个 Shortcut 命令组、181+ 个子命令,优化输出格式和交互体验</div>
<div class="stat-bar">
<div class="item"><span class="num">31</span><span class="lbl">命令组</span></div>
<div class="item"><span class="num">181+</span><span class="lbl">子命令</span></div>
<div class="item"><span class="num">23</span><span class="lbl">新增 Shortcut 组</span></div>
<div class="item"><span class="num">20</span><span class="lbl">测试文件</span></div>
<div class="item"><span class="num">4</span><span class="lbl">包管理平台</span></div>
</div>
<div class="card-grid">
<div class="card"><h3>📦 命令组一览</h3>
<div style="display:flex;flex-wrap:wrap;gap:4px;margin-top:6px">
<span class="tag tag-blue">repo(29)</span><span class="tag tag-blue">issue(12)</span><span class="tag tag-blue">pr(15)</span>
<span class="tag tag-blue">user(24)</span><span class="tag tag-blue">branch(9)</span><span class="tag tag-blue">ci(12)</span>
<span class="tag tag-blue">release(6)</span><span class="tag tag-blue">webhook(8)</span><span class="tag tag-blue">wiki(7)</span>
<span class="tag tag-blue">snippet(4)</span><span class="tag tag-blue">commit(5)</span><span class="tag tag-blue">file(11)</span>
<span class="tag tag-blue">milestone(6)</span><span class="tag tag-blue">collaborator(6)</span><span class="tag tag-blue">org(7)</span>
<span class="tag tag-blue">search(2)</span><span class="tag tag-blue">label(7)</span><span class="tag tag-blue">tag(3)</span>
<span class="tag tag-blue">dataset(4)</span><span class="tag tag-blue">template(5)</span>
</div>
</div>
<div class="card"><h3>🏗️ 三层架构</h3>
<p><strong>Shortcuts</strong> gitlink-cli &lt;group&gt; +&lt;verb&gt; 高频快捷接口</p>
<p><strong>API Commands</strong> 元数据驱动封装,统一认证/错误/输出</p>
<p><strong>Raw API</strong> gitlink-cli api &lt;METHOD&gt; &lt;PATH&gt; 灵活扩展</p>
</div>
<div class="card"><h3>🔧 工程化</h3>
<ul><li>DevOps CI 流水线GitLink 平台)</li><li>GitHub Actions CI + Release</li><li>npm / Homebrew / Scoop / Chocolatey 包管理</li><li>REPL 交互模式(命令面板/输出视口)</li></ul>
</div>
</div>
<div class="card"><h3>💻 命令示例</h3>
<div class="cmd"><code>gitlink-cli repo +info --owner z2_cc --repo gitlink-cli --format json</code><button class="copy-btn" onclick="copyCmd(this)">复制</button></div>
<div class="cmd"><code>gitlink-cli issue +list --state open --format json</code><button class="copy-btn" onclick="copyCmd(this)">复制</button></div>
<div class="cmd"><code>gitlink-cli pr +review --id 5 --status approved --content "LGTM"</code><button class="copy-btn" onclick="copyCmd(this)">复制</button></div>
<div class="cmd"><code>gitlink-cli commit +list --limit 10 --format json</code><button class="copy-btn" onclick="copyCmd(this)">复制</button></div>
</div>
</div>
<div id="tab-skills" class="section">
<h2>子任务二AI Agent Skills</h2>
<div class="desc">11 个 Claude Code Skills在 Claude Code 平台端到端实测验证</div>
<div class="card-grid">
<div class="card"><h3>📋 Skills 清单</h3>
<div style="margin-top:6px">
<div style="display:flex;justify-content:space-between;padding:6px 0;border-bottom:1px solid #1e293b;font-size:12px"><span style="color:#38bdf8">issue-triage</span><span style="color:#94a3b8">v2.0.0 · Issue 自动分拣</span></div>
<div style="display:flex;justify-content:space-between;padding:6px 0;border-bottom:1px solid #1e293b;font-size:12px"><span style="color:#38bdf8">code-review</span><span style="color:#94a3b8">v1.0.0 · PR 代码审查</span></div>
<div style="display:flex;justify-content:space-between;padding:6px 0;border-bottom:1px solid #1e293b;font-size:12px"><span style="color:#38bdf8">project-health</span><span style="color:#94a3b8">v2.0.0 · 健康度报告</span></div>
<div style="display:flex;justify-content:space-between;padding:6px 0;border-bottom:1px solid #1e293b;font-size:12px"><span style="color:#38bdf8">release-auto</span><span style="color:#94a3b8">v2.0.0 · 自动 Release</span></div>
<div style="display:flex;justify-content:space-between;padding:6px 0;border-bottom:1px solid #1e293b;font-size:12px"><span style="color:#38bdf8">compliance</span><span style="color:#94a3b8">v1.0.0 · 合规检查</span></div>
<div style="display:flex;justify-content:space-between;padding:6px 0;font-size:12px"><span style="color:#38bdf8">pr-deep-review / newcomer / duplicate / etc.</span><span style="color:#94a3b8">共 11 个</span></div>
</div>
</div>
<div class="card"><h3>🔍 关键词权重分类issue-triage</h3>
<div class="table-wrap"><table><tr><th>类别</th><th>关键词</th><th>权重分</th></tr>
<tr><td>Bug</td><td>bug/错误/crash</td><td>≥15 → bug</td></tr>
<tr><td>功能需求</td><td>建议/希望/feature</td><td>≥12 → enhancement</td></tr>
<tr><td>文档</td><td>文档/README/拼写</td><td>≥10 → documentation</td></tr>
<tr><td>安全</td><td>漏洞/安全/泄露</td><td>≥12 → security</td></tr>
<tr><td>紧急度评估</td><td>Bug×1.5 + 安全×2.0</td><td>P0-P3 四级</td></tr>
</table></div>
</div>
<div class="card"><h3>📊 健康度评分模型</h3>
<p>综合得分 = Issue×30% + PR×30% + 活跃度×25% + 里程碑×15%</p>
<p>9-10 🟢优秀 · 7-8 🟢良好 · 5-6 🟡一般 · 3-4 🔴堪忧 · 0-2 🔴危险</p>
</div>
<div class="card"><h3>📝 Semantic Release</h3>
<p>BREAKING CHANGE → 主版本+1feat → 次版本+1fix → 修订号+1</p>
<p>自动分类 feat/fix/docs/refactor/perf/test/chore/revert</p>
</div>
</div>
</div>
<div id="tab-workflow" class="section">
<h2>子任务三:端到端自动化工作流</h2>
<div class="desc">串联多个 CLI 命令和 Skills构建可复现的完整自动化解决方案</div>
<div class="card-grid">
<div class="card"><h3>🌐 社区运营自动化</h3>
<div class="stat-bar"><div class="item"><span class="num">3</span><span class="lbl">阶段</span></div><div class="item"><span class="num">4</span><span class="lbl">脚本</span></div><div class="item"><span class="num">2</span><span class="lbl">分析引擎</span></div></div>
<p><strong>Phase 1</strong> Issue 自动分拣(关键词权重 + 标签 + 评论)</p>
<p><strong>Phase 2</strong> 社区周报Issue/PR/Commit 多维分析)</p>
<p><strong>Phase 3</strong> Release NotesConventional Commits 分类)</p>
<div class="cmd"><code>DRY_RUN=true bash skills/gitlink-community-ops/scripts/community-ops-full.sh z2_cc gitlink-cli</code><button class="copy-btn" onclick="copyCmd(this)">复制</button></div>
</div>
<div class="card"><h3>🛡️ 代码质量看门人</h3>
<div class="stat-bar"><div class="item"><span class="num">4</span><span class="lbl">阶段</span></div><div class="item"><span class="num">5</span><span class="lbl">脚本</span></div></div>
<p><strong>Phase 1</strong> PR 采集</p>
<p><strong>Phase 2</strong> 深度审查pr +view/files/version-diff</p>
<p><strong>Phase 3</strong> CI 检查</p>
<p><strong>Phase 4</strong> 门禁决策≥70 分自动合并)</p>
<div class="cmd"><code>DRY_RUN=true bash skills/gitlink-quality-gate/scripts/quality-gate-full.sh z2_cc gitlink-cli</code><button class="copy-btn" onclick="copyCmd(this)">复制</button></div>
</div>
<div class="card"><h3>📐 质量评分模型</h3>
<p style="font-size:16px;text-align:center;padding:10px;background:#0f172a;border-radius:6px;color:#38bdf8;font-weight:600">总分 = CodeReview×40% + CI×30% + 设计一致性×30%</p>
<p>门槛:≥ 70 分 且 CI 通过 → 自动合并</p>
<p>每个 Critical -20 分 · Warning -10 分 · Suggestion -3 分</p>
</div>
<div class="card"><h3>📊 真实输出:周报</h3>
<div class="output"># 📊 社区健康度周报
**综合评分:** 3.5/10 🔴 堪忧
Issue 总数19打开 15 / 关闭 4
关闭率21% · PR 总数2
贡献者1 人 · 平均响应24.3 天</div>
</div>
<div class="card"><h3>📊 真实输出Release Notes</h3>
<div class="output">## v0.1.0 (2026-06-30)
包含 100 次提交 · 204 个文件
+16483 / -3644 行 · 7 位贡献者
✨ 新功能 20 · 🐛 修复 19
📝 文档 44 · ✅ 测试 3 · 🔧 工程 2</div>
</div>
</div>
</div>
<div id="tab-research" class="section">
<h2>子任务四:科研辅助</h2>
<div class="desc">利用 gitlink-cli 数据能力,面向科研工作者提供智能化分析服务</div>
<div class="card-grid">
<div class="card"><h3>🔬 科研项目洞悉</h3>
<div class="stat-bar"><div class="item"><span class="num">8</span><span class="lbl">数据维度</span></div><div class="item"><span class="num">4</span><span class="lbl">评分维度</span></div></div>
<p><strong>数据采集:</strong> repo+info / topics / languages / contributors / commits / issues / prs / collaborators</p>
<p><strong>评分模型:</strong> 成熟度×25% + 文档质量×20% + 贡献模式×30% + 社区健康度×25%</p>
<div class="cmd"><code>bash skills/gitlink-research-insight/scripts/research-insight-full.sh z2_cc gitlink-cli</code><button class="copy-btn" onclick="copyCmd(this)">复制</button></div>
</div>
<div class="card"><h3>🌐 热点追踪与知识图谱</h3>
<div class="stat-bar"><div class="item"><span class="num">33</span><span class="lbl">仓库</span></div><div class="item"><span class="num">19</span><span class="lbl">主题</span></div><div class="item"><span class="num">11</span><span class="lbl">语言</span></div></div>
<p><strong>流程:</strong> 多关键词搜索 → 去重汇总 → 实体提取 → 交互式 HTML 图谱</p>
<p><strong>关系:</strong> topic · uses · belongs_to · related</p>
<div class="cmd"><code>bash skills/gitlink-research-hotspot/scripts/hotspot-tracker-full.sh "machine learning" "深度学习"</code><button class="copy-btn" onclick="copyCmd(this)">复制</button></div>
</div>
<div class="card"><h3>📈 趋势报告示例</h3>
<div class="table-wrap"><table><tr><th>排名</th><th>主题</th><th>仓库数</th><th>占比</th></tr>
<tr><td>1</td><td>python</td><td>10</td><td>30%</td></tr>
<tr><td>2</td><td>c</td><td>7</td><td>21%</td></tr>
<tr><td>3</td><td>c++</td><td>7</td><td>21%</td></tr>
<tr><td>4</td><td>shell</td><td>4</td><td>12%</td></tr>
<tr><td>5</td><td>人工智能</td><td>2</td><td>6%</td></tr>
</table></div>
</div>
</div>
<div class="card"><h3>🕸️ 知识图谱可视化</h3>
<div class="mermaid-wrap">
<pre class="mermaid" style="background:transparent">
flowchart LR
subgraph P["🔬 研究项目"]
P1["Edge-Computing-Engine"]
P2["mirrors/Paddle"]
P3["shenyan/machineLearningTemplate"]
end
subgraph T["📚 主题"]
T1["python"]
T2["c++"]
T3["shell"]
end
subgraph L["💻 技术栈"]
L1["Python"]
L2["C++"]
end
subgraph O["🏛️ 组织"]
O1["mirrors"]
O2["datawhalechina"]
end
P1 -->|topic| T2
P2 -->|topic| T1
P2 -->|belongs_to| O1
P3 -->|uses| L1
P3 -->|topic| T3
P1 -->|related| P2
classDef project fill:#1e3a5f,stroke:#3b82f6,color:#fff
classDef topic fill:#241b3d,stroke:#a78bfa,color:#fff
classDef tech fill:#14331e,stroke:#22c55e,color:#fff
classDef org fill:#3d2415,stroke:#fb923c,color:#fff
class P1,P2,P3 project
class T1,T2,T3 topic
class L1,L2 tech
class O1,O2 org
</pre>
</div>
<p style="font-size:12px;color:#64748b;text-align:center">完整交互式图谱(含缩放/拖拽/高亮)通过 Hotspot Skill 自动生成 HTML 文件</p>
</div>
</div>
<div id="tab-team" class="section">
<h2>团队贡献</h2>
<div class="desc">三人协作完成全部四个子任务</div>
<div class="card-grid">
<div class="card"><h3>👤 刘焱</h3>
<div class="stat-bar"><div class="item"><span class="num">78</span><span class="lbl">commits</span></div></div>
<p>CLI 底层架构设计与实现、23 组 Shortcut 命令开发、REPL 交互模式、输出格式优化、20 个单元测试、compliance/insight Skills、包管理配置</p>
</div>
<div class="card"><h3>👤 赵昌</h3>
<div class="stat-bar"><div class="item"><span class="num">46</span><span class="lbl">commits</span></div></div>
<p>Webhook/Wiki/Snippet Shortcut 命令及单测、issue-triage/project-health/release-auto Skills、端到端工作流脚本社区运营+质量门禁)、科研模块(洞察+热点追踪)、报告文档</p>
</div>
<div class="card"><h3>👤 曾蔚然 <span class="badge">组长</span></h3>
<div class="stat-bar"><div class="item"><span class="num">9</span><span class="lbl">commits</span></div></div>
<p>DevOps CI/CD 流水线配置、pr-deep-review/duplicate-detector Skills 开发、issue-triage/code-review Skill 完善、代码审查与合并管理</p>
</div>
</div>
<div class="card" style="text-align:center"><h3>📊 项目统计</h3>
<div class="stat-bar">
<div class="item"><span class="num">47</span><span class="lbl">交付文件</span></div>
<div class="item"><span class="num">5.8k</span><span class="lbl">代码行</span></div>
<div class="item"><span class="num">14</span><span class="lbl">迭代轮次</span></div>
<div class="item"><span class="num">133</span><span class="lbl">总 commits</span></div>
<div class="item"><span class="num">100%</span><span class="lbl">验证通过</span></div>
</div>
</div>
</div>
</div>
<div class="footer">GitLink 智能化能力提升项目 · 《软件演化与运维》 · 2026</div>
<script>
mermaid.initialize({startOnLoad:true,theme:'dark',
themeVariables:{primaryColor:'#1e3a5f',primaryBorderColor:'#3b82f6',primaryTextColor:'#e2e8f0',lineColor:'#475569',tertiaryColor:'#0f172a'}
});
document.querySelectorAll('.nav-btn').forEach(btn => {
btn.addEventListener('click', () => {
document.querySelectorAll('.nav-btn').forEach(b => b.classList.remove('active'));
document.querySelectorAll('.section').forEach(s => s.classList.remove('active'));
btn.classList.add('active');
document.getElementById('tab-' + btn.dataset.tab).classList.add('active');
});
});
function copyCmd(btn) {
const text = btn.parentElement.querySelector('code').textContent;
navigator.clipboard.writeText(text).then(() => {
btn.textContent = '已复制';
setTimeout(() => btn.textContent = '复制', 1500);
});
}
</script>
</body>
</html>