speccore 8.3.150 → 8.3.152
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.
- package/package.json +1 -1
- package/templates/html/speccore-ask-guide.html +1 -1
- package/templates/html/speccore-ask-pipeline.html +1 -1
- package/templates/html/speccore-ask-result.html +1 -1
- package/templates/html/speccore-dev.html +1 -1
- package/templates/html/speccore-help.html +1 -1
- package/templates/html/speccore-retro-T-001.html +1 -1
- package/templates/html/speccore-welcome.html +1 -1
- package/templates/verify-spec-example.yaml +92 -1
package/package.json
CHANGED
|
@@ -7,4 +7,4 @@
|
|
|
7
7
|
.match-result{padding:10px 0}.match-summary{font-weight:600;font-size:14px;margin-bottom:12px}.match-detail{color:var(--muted);font-size:12px;line-height:1.6}
|
|
8
8
|
/* Pipeline */
|
|
9
9
|
.pipeline-title{font-weight:600;margin-bottom:16px}.pipeline-steps{display:flex;flex-direction:column;gap:10px}.pipe-step{display:flex;gap:14px;padding:12px 14px;background:rgba(99,102,241,.04);border-left:2px solid var(--purple);border-radius:0 8px 8px 0}.pipe-step .pipe-num{font-family:Orbitron;font-size:20px;font-weight:900;color:var(--purple);min-width:36px}.pipe-step .pipe-cmd{font-weight:600;color:var(--green)}.pipe-step .pipe-args{color:var(--muted);font-size:11px}.pipe-step .pipe-desc{color:var(--muted);font-size:10px;margin-top:4px}.pipe-step .pipe-dep{font-size:9px;color:var(--orange);margin-top:4px}.confirm-bar{text-align:center;padding:14px;margin-top:16px;background:rgba(99,102,241,.08);border:1px dashed rgba(99,102,241,.2);border-radius:8px;color:var(--purple);font-size:12px}
|
|
10
|
-
.footer{text-align:center;color:var(--muted);font-size:10px;margin-top:24px;padding-top:16px;border-top:1px solid rgba(255,255,255,.04)}h1{text-shadow:0 0 20px rgba(14,165,233,.35),0 0 60px rgba(14,165,233,.12)!important}@keyframes cardGlow{0%,100%{opacity:.5;transform:scale(1)}50%{opacity:1;transform:scale(1.6)}}.card-bg{position:absolute;inset:0;pointer-events:none;z-index:0;background:radial-gradient(ellipse at 25% 10%,rgba(14,165,233,.25) 0%,transparent 70%);animation:cardGlow 3s ease-in-out infinite;transform-origin:top center}@keyframes titleGlow{0%,100%{text-shadow:0 0 20px rgba(14,165,233,.4),0 0 60px rgba(14,165,233,.15)}50%{text-shadow:0 0 30px rgba(14,165,233,.7),0 0 80px rgba(14,165,233,.3)}}h1,h2{text-shadow:0 0 20px rgba(14,165,233,.4),0 0 60px rgba(14,165,233,.15);animation:titleGlow 3s ease-in-out infinite}</style></head><body><div class="scanlines"></div><div class="card"><div class="card-bg"></div><div class="vline l"></div><div class="vline r"></div><h1>SPECCORE ASK</h1><div class="query">"我想做一个登录功能"</div><div class="badge">🗺️ 任务指引</div><div class="guide-title">已为你规划「新功能开发全流程」(8 步)</div><div class="guide-steps"><div class="guide-step"><div class="step-num">1</div><div class="step-body"><div class="step-cmd">speccore init</div><div class="step-desc">初始化项目(如果还没有)</div></div></div><div class="guide-step"><div class="step-num">2</div><div class="step-body"><div class="step-cmd">speccore doc2spec -f PRD.docx --iter {iteration}</div><div class="step-desc">导入 PRD 文档,AI 分析生成需求规格</div></div></div><div class="guide-step"><div class="step-num">3</div><div class="step-body"><div class="step-cmd">speccore analyze --iteration {iteration} --audit</div><div class="step-desc">AI 分析需求,生成审计报告</div></div></div><div class="guide-step"><div class="step-num">4</div><div class="step-body"><div class="step-cmd">speccore split -f REQUIREMENT.md</div><div class="step-desc">将需求拆分为独立开发任务</div></div></div><div class="guide-step"><div class="step-num">5</div><div class="step-body"><div class="step-cmd">speccore plan --all</div><div class="step-desc">生成任务执行计划,确定优先级和依赖</div></div></div><div class="guide-step"><div class="step-num">6</div><div class="step-body"><div class="step-cmd">speccore execute --auto</div><div class="step-desc">按计划依次执行开发任务</div></div></div><div class="guide-step"><div class="step-num">7</div><div class="step-body"><div class="step-cmd">speccore pr --auto</div><div class="step-desc">代码提交后创建 Pull Request</div></div></div><div class="guide-step"><div class="step-num">8</div><div class="step-body"><div class="step-cmd">speccore done --all</div><div class="step-desc">全部完成后归档收尾</div></div></div></div><div style="text-align:center;margin-top:16px"><a href="speccore-welcome.html" style="color:var(--cyan);font-size:11px;text-decoration:none">← 返回 ask 引导页</a></div><div class="footer">由 SpecCore 驱动 · v8.3.
|
|
10
|
+
.footer{text-align:center;color:var(--muted);font-size:10px;margin-top:24px;padding-top:16px;border-top:1px solid rgba(255,255,255,.04)}h1{text-shadow:0 0 20px rgba(14,165,233,.35),0 0 60px rgba(14,165,233,.12)!important}@keyframes cardGlow{0%,100%{opacity:.5;transform:scale(1)}50%{opacity:1;transform:scale(1.6)}}.card-bg{position:absolute;inset:0;pointer-events:none;z-index:0;background:radial-gradient(ellipse at 25% 10%,rgba(14,165,233,.25) 0%,transparent 70%);animation:cardGlow 3s ease-in-out infinite;transform-origin:top center}@keyframes titleGlow{0%,100%{text-shadow:0 0 20px rgba(14,165,233,.4),0 0 60px rgba(14,165,233,.15)}50%{text-shadow:0 0 30px rgba(14,165,233,.7),0 0 80px rgba(14,165,233,.3)}}h1,h2{text-shadow:0 0 20px rgba(14,165,233,.4),0 0 60px rgba(14,165,233,.15);animation:titleGlow 3s ease-in-out infinite}</style></head><body><div class="scanlines"></div><div class="card"><div class="card-bg"></div><div class="vline l"></div><div class="vline r"></div><h1>SPECCORE ASK</h1><div class="query">"我想做一个登录功能"</div><div class="badge">🗺️ 任务指引</div><div class="guide-title">已为你规划「新功能开发全流程」(8 步)</div><div class="guide-steps"><div class="guide-step"><div class="step-num">1</div><div class="step-body"><div class="step-cmd">speccore init</div><div class="step-desc">初始化项目(如果还没有)</div></div></div><div class="guide-step"><div class="step-num">2</div><div class="step-body"><div class="step-cmd">speccore doc2spec -f PRD.docx --iter {iteration}</div><div class="step-desc">导入 PRD 文档,AI 分析生成需求规格</div></div></div><div class="guide-step"><div class="step-num">3</div><div class="step-body"><div class="step-cmd">speccore analyze --iteration {iteration} --audit</div><div class="step-desc">AI 分析需求,生成审计报告</div></div></div><div class="guide-step"><div class="step-num">4</div><div class="step-body"><div class="step-cmd">speccore split -f REQUIREMENT.md</div><div class="step-desc">将需求拆分为独立开发任务</div></div></div><div class="guide-step"><div class="step-num">5</div><div class="step-body"><div class="step-cmd">speccore plan --all</div><div class="step-desc">生成任务执行计划,确定优先级和依赖</div></div></div><div class="guide-step"><div class="step-num">6</div><div class="step-body"><div class="step-cmd">speccore execute --auto</div><div class="step-desc">按计划依次执行开发任务</div></div></div><div class="guide-step"><div class="step-num">7</div><div class="step-body"><div class="step-cmd">speccore pr --auto</div><div class="step-desc">代码提交后创建 Pull Request</div></div></div><div class="guide-step"><div class="step-num">8</div><div class="step-body"><div class="step-cmd">speccore done --all</div><div class="step-desc">全部完成后归档收尾</div></div></div></div><div style="text-align:center;margin-top:16px"><a href="speccore-welcome.html" style="color:var(--cyan);font-size:11px;text-decoration:none">← 返回 ask 引导页</a></div><div class="footer">由 SpecCore 驱动 · v8.3.152 · 2026-08-31</div></div></body></html>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html lang="zh-CN" data-theme="ocean"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1.0"><title>SpecCore · ask --pipeline</title><style>@import url('https://fonts.googleapis.com/css2?family=Orbitron:wght@500;700;900&family=JetBrains+Mono:wght@400;600;700&display=swap');[data-theme="ocean"]{--cyan:#0ea5e9;--bg:#0b1929;--card:rgba(13,31,56,.95);--border:rgba(14,165,233,.15);--text:#bae6fd;--muted:#5b7fa5;--green:#14b8a6;--orange:#f97316;--purple:#6366f1}*{margin:0;padding:0;box-sizing:border-box}body{font-family:'JetBrains Mono',monospace;background:var(--bg);color:var(--text);min-height:100vh;display:flex;align-items:center;justify-content:center;padding:20px}.scanlines{position:fixed;inset:0;pointer-events:none;z-index:99;background:repeating-linear-gradient(0deg,transparent,transparent 2px,rgba(0,240,255,.01) 2px,rgba(0,240,255,.01) 4px)}.card{max-width:900px;width:100%;margin:0 auto;background:var(--card);border:1px solid var(--border);border-radius:16px;padding:32px;position:relative;overflow:hidden;z-index:1}.card::before{content:'';position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,var(--cyan),transparent);animation:scanX 3s linear infinite}.card::after{content:'';position:absolute;bottom:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,var(--cyan),transparent);animation:scanX-rev 3s linear infinite}@keyframes scanX{0%{transform:translateX(-100%)}100%{transform:translateX(100%)}}@keyframes scanX-rev{0%{transform:translateX(100%)}100%{transform:translateX(-100%)}}@keyframes scanY{0%{transform:translateY(-100%)}100%{transform:translateY(100%)}}@keyframes scanY-rev{0%{transform:translateY(100%)}100%{transform:translateY(-100%)}}.vline{position:absolute;top:0;width:1px;bottom:0;pointer-events:none}.vline.l{left:0;background:linear-gradient(180deg,transparent,var(--cyan),transparent);animation:scanY-rev 3s linear infinite}.vline.r{right:0;background:linear-gradient(180deg,transparent,var(--cyan),transparent);animation:scanY 3s linear infinite}.card-bg{position:absolute;inset:0;pointer-events:none;z-index:0;background:radial-gradient(ellipse at 25% 10%,rgba(14,165,233,.25) 0%,transparent 70%);animation:cardGlow 3s ease-in-out infinite;transform-origin:top center}@keyframes cardGlow{0%,100%{opacity:.5;transform:scale(1)}50%{opacity:1;transform:scale(1.6)}}.page-title{font-family:'Orbitron',sans-serif;font-size:22px;font-weight:700;text-align:center;color:var(--cyan);margin-bottom:32px;letter-spacing:1px;text-shadow:0 0 20px rgba(14,165,233,.4),0 0 60px rgba(14,165,233,.15);animation:titleGlow 3s ease-in-out infinite}@keyframes titleGlow{0%,100%{text-shadow:0 0 20px rgba(14,165,233,.4),0 0 60px rgba(14,165,233,.15)}50%{text-shadow:0 0 30px rgba(14,165,233,.7),0 0 80px rgba(14,165,233,.3)}}.page-title span{color:var(--text);font-weight:500}.flow-chart{display:flex;align-items:stretch;gap:0;margin-bottom:28px}.flow-node{flex:1;background:rgba(13,31,56,.7);border:1px solid;border-radius:10px;padding:14px 8px;text-align:center;position:relative}.flow-node .icon{font-size:18px;margin-bottom:6px}.flow-node .name{font-size:12px;font-weight:600;margin-bottom:4px}.flow-node .desc{font-size:10px;color:var(--muted)}.flow-node.n1{border-color:rgba(14,165,233,.4);color:var(--cyan)}.flow-node.n2{border-color:rgba(99,102,241,.4);color:var(--purple)}.flow-node.n3{border-color:rgba(14,165,233,.4);color:var(--cyan)}.flow-node.n4{border-color:rgba(20,184,166,.4);color:var(--green)}.flow-connector{width:24px;display:flex;align-items:center;justify-content:center}.flow-connector::after{content:'';width:100%;height:1px;background:linear-gradient(90deg,var(--border),var(--cyan),var(--border))}.example-box{border:1px dashed rgba(14,165,233,.3);border-radius:12px;padding:16px 20px;margin-bottom:24px;background:rgba(14,165,233,.03)}.example-label{font-size:13px;font-weight:600;color:var(--cyan);margin-bottom:8px}.example-query{font-family:'JetBrains Mono',monospace;font-size:14px;color:var(--text)}.example-query code{color:var(--green);font-weight:600}.steps{display:flex;flex-direction:column;gap:12px;margin-bottom:24px}.step{background:rgba(13,31,56,.8);border:1px solid rgba(14,165,233,.12);border-radius:10px;padding:14px 18px}.step-num{font-family:'Orbitron',sans-serif;font-size:14px;font-weight:700;color:var(--green);margin-bottom:6px}.step-cmd{font-family:'JetBrains Mono',monospace;font-size:14px;color:var(--text);margin-bottom:6px}.step-cmd .cmd-name{color:var(--green)}.step-cmd .cmd-args{color:var(--muted)}.step-parse{font-size:12px;color:var(--muted);line-height:1.5}.step-parse::before{content:'→ 解析:';color:var(--cyan)}.confirm-btn{display:block;width:100%;max-width:420px;margin:0 auto 16px;text-align:center;padding:16px;background:linear-gradient(135deg,var(--cyan),#0284c7);border:none;border-radius:40px;color:#fff;font-size:15px;font-weight:600;cursor:pointer;box-shadow:0 0 30px rgba(14,165,233,.3)}.legend{display:flex;justify-content:center;gap:20px;font-size:11px;color:var(--muted);margin-bottom:16px;flex-wrap:wrap}.legend-item{display:flex;align-items:center;gap:4px}.legend-dot{width:8px;height:8px;border-radius:50%;display:inline-block}.legend-dot.required{background:var(--cyan)}.legend-dot.generated{background:var(--green)}.legend-dot.pending{background:rgba(255,255,255,.3)}.back-link{text-align:center;margin-top:12px}.back-link a{color:var(--cyan);font-size:11px;text-decoration:none}.footer{text-align:center;color:var(--muted);font-size:10px;margin-top:20px}</style></head><body><div class="scanlines"></div><div class="card"><div class="card-bg"></div><div class="vline l"></div><div class="vline r"></div><div class="page-title">ask --pipeline <span>多步骤编排引擎</span></div><div class="flow-chart"><div class="flow-node n1"><div class="icon">🧠</div><div class="name">AI 意图分解</div><div class="desc">LLM 分解多步骤</div></div><div class="flow-connector"></div><div class="flow-node n2"><div class="icon">📐</div><div class="name">命令匹配</div><div class="desc">意图→命令图</div></div><div class="flow-connector"></div><div class="flow-node n3"><div class="icon">🔗</div><div class="name">依赖解析</div><div class="desc">顺序/并行/参数</div></div><div class="flow-connector"></div><div class="flow-node n4"><div class="icon">✅</div><div class="name">预览</div><div class="desc">展示给用户</div></div></div><div class="example-box"><div class="example-label">📋 示例:<span class="example-query"><code>/spec-ask "本期迭代:从 PRD 导入到代码提交,跑完整开发流程"</code></span></div></div><div class="steps"><div class="step"><div class="step-num">1.</div><div class="step-cmd"><span class="cmd-name">speccore doc2spec</span> <span class="cmd-args">-f PRD.docx --iter {iteration}</span></div><div class="step-parse">导入 PRD 文档,AI 分析生成需求规格说明书</div></div><div class="step"><div class="step-num">2.</div><div class="step-cmd"><span class="cmd-name">speccore analyze</span> <span class="cmd-args">--iteration {iteration} --audit</span></div><div class="step-parse">AI 深度分析需求,生成审计报告和可行性评估</div></div><div class="step"><div class="step-num">3.</div><div class="step-cmd"><span class="cmd-name">speccore split</span> <span class="cmd-args">-f REQUIREMENT.md</span></div><div class="step-parse">将需求拆分为独立开发任务,确定优先级和依赖关系</div></div><div class="step"><div class="step-num">4.</div><div class="step-cmd"><span class="cmd-name">speccore execute</span> <span class="cmd-args">--auto</span></div><div class="step-parse">按任务计划依次自动执行开发、测试和代码生成</div></div><div class="step"><div class="step-num">5.</div><div class="step-cmd"><span class="cmd-name">speccore pr</span> <span class="cmd-args">--auto</span></div><div class="step-parse">代码提交后自动创建 Pull Request,完成交付</div></div></div><div class="confirm-btn">确认执行? (y/N) 或修改参数</div><div class="legend"><div class="legend-item"><span class="legend-dot required"></span> = 必选步骤</div><div class="legend-item"><span class="legend-dot generated"></span> = 已生成</div><div class="legend-item"><span class="legend-dot pending"></span> = 待执行</div><div class="legend-item">→ = 依赖传递</div></div><div class="back-link"><a href="speccore-welcome.html">← 返回 ask 引导页</a></div><div class="footer">由 SpecCore 驱动 · v8.3.
|
|
1
|
+
<!DOCTYPE html><html lang="zh-CN" data-theme="ocean"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1.0"><title>SpecCore · ask --pipeline</title><style>@import url('https://fonts.googleapis.com/css2?family=Orbitron:wght@500;700;900&family=JetBrains+Mono:wght@400;600;700&display=swap');[data-theme="ocean"]{--cyan:#0ea5e9;--bg:#0b1929;--card:rgba(13,31,56,.95);--border:rgba(14,165,233,.15);--text:#bae6fd;--muted:#5b7fa5;--green:#14b8a6;--orange:#f97316;--purple:#6366f1}*{margin:0;padding:0;box-sizing:border-box}body{font-family:'JetBrains Mono',monospace;background:var(--bg);color:var(--text);min-height:100vh;display:flex;align-items:center;justify-content:center;padding:20px}.scanlines{position:fixed;inset:0;pointer-events:none;z-index:99;background:repeating-linear-gradient(0deg,transparent,transparent 2px,rgba(0,240,255,.01) 2px,rgba(0,240,255,.01) 4px)}.card{max-width:900px;width:100%;margin:0 auto;background:var(--card);border:1px solid var(--border);border-radius:16px;padding:32px;position:relative;overflow:hidden;z-index:1}.card::before{content:'';position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,var(--cyan),transparent);animation:scanX 3s linear infinite}.card::after{content:'';position:absolute;bottom:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,var(--cyan),transparent);animation:scanX-rev 3s linear infinite}@keyframes scanX{0%{transform:translateX(-100%)}100%{transform:translateX(100%)}}@keyframes scanX-rev{0%{transform:translateX(100%)}100%{transform:translateX(-100%)}}@keyframes scanY{0%{transform:translateY(-100%)}100%{transform:translateY(100%)}}@keyframes scanY-rev{0%{transform:translateY(100%)}100%{transform:translateY(-100%)}}.vline{position:absolute;top:0;width:1px;bottom:0;pointer-events:none}.vline.l{left:0;background:linear-gradient(180deg,transparent,var(--cyan),transparent);animation:scanY-rev 3s linear infinite}.vline.r{right:0;background:linear-gradient(180deg,transparent,var(--cyan),transparent);animation:scanY 3s linear infinite}.card-bg{position:absolute;inset:0;pointer-events:none;z-index:0;background:radial-gradient(ellipse at 25% 10%,rgba(14,165,233,.25) 0%,transparent 70%);animation:cardGlow 3s ease-in-out infinite;transform-origin:top center}@keyframes cardGlow{0%,100%{opacity:.5;transform:scale(1)}50%{opacity:1;transform:scale(1.6)}}.page-title{font-family:'Orbitron',sans-serif;font-size:22px;font-weight:700;text-align:center;color:var(--cyan);margin-bottom:32px;letter-spacing:1px;text-shadow:0 0 20px rgba(14,165,233,.4),0 0 60px rgba(14,165,233,.15);animation:titleGlow 3s ease-in-out infinite}@keyframes titleGlow{0%,100%{text-shadow:0 0 20px rgba(14,165,233,.4),0 0 60px rgba(14,165,233,.15)}50%{text-shadow:0 0 30px rgba(14,165,233,.7),0 0 80px rgba(14,165,233,.3)}}.page-title span{color:var(--text);font-weight:500}.flow-chart{display:flex;align-items:stretch;gap:0;margin-bottom:28px}.flow-node{flex:1;background:rgba(13,31,56,.7);border:1px solid;border-radius:10px;padding:14px 8px;text-align:center;position:relative}.flow-node .icon{font-size:18px;margin-bottom:6px}.flow-node .name{font-size:12px;font-weight:600;margin-bottom:4px}.flow-node .desc{font-size:10px;color:var(--muted)}.flow-node.n1{border-color:rgba(14,165,233,.4);color:var(--cyan)}.flow-node.n2{border-color:rgba(99,102,241,.4);color:var(--purple)}.flow-node.n3{border-color:rgba(14,165,233,.4);color:var(--cyan)}.flow-node.n4{border-color:rgba(20,184,166,.4);color:var(--green)}.flow-connector{width:24px;display:flex;align-items:center;justify-content:center}.flow-connector::after{content:'';width:100%;height:1px;background:linear-gradient(90deg,var(--border),var(--cyan),var(--border))}.example-box{border:1px dashed rgba(14,165,233,.3);border-radius:12px;padding:16px 20px;margin-bottom:24px;background:rgba(14,165,233,.03)}.example-label{font-size:13px;font-weight:600;color:var(--cyan);margin-bottom:8px}.example-query{font-family:'JetBrains Mono',monospace;font-size:14px;color:var(--text)}.example-query code{color:var(--green);font-weight:600}.steps{display:flex;flex-direction:column;gap:12px;margin-bottom:24px}.step{background:rgba(13,31,56,.8);border:1px solid rgba(14,165,233,.12);border-radius:10px;padding:14px 18px}.step-num{font-family:'Orbitron',sans-serif;font-size:14px;font-weight:700;color:var(--green);margin-bottom:6px}.step-cmd{font-family:'JetBrains Mono',monospace;font-size:14px;color:var(--text);margin-bottom:6px}.step-cmd .cmd-name{color:var(--green)}.step-cmd .cmd-args{color:var(--muted)}.step-parse{font-size:12px;color:var(--muted);line-height:1.5}.step-parse::before{content:'→ 解析:';color:var(--cyan)}.confirm-btn{display:block;width:100%;max-width:420px;margin:0 auto 16px;text-align:center;padding:16px;background:linear-gradient(135deg,var(--cyan),#0284c7);border:none;border-radius:40px;color:#fff;font-size:15px;font-weight:600;cursor:pointer;box-shadow:0 0 30px rgba(14,165,233,.3)}.legend{display:flex;justify-content:center;gap:20px;font-size:11px;color:var(--muted);margin-bottom:16px;flex-wrap:wrap}.legend-item{display:flex;align-items:center;gap:4px}.legend-dot{width:8px;height:8px;border-radius:50%;display:inline-block}.legend-dot.required{background:var(--cyan)}.legend-dot.generated{background:var(--green)}.legend-dot.pending{background:rgba(255,255,255,.3)}.back-link{text-align:center;margin-top:12px}.back-link a{color:var(--cyan);font-size:11px;text-decoration:none}.footer{text-align:center;color:var(--muted);font-size:10px;margin-top:20px}</style></head><body><div class="scanlines"></div><div class="card"><div class="card-bg"></div><div class="vline l"></div><div class="vline r"></div><div class="page-title">ask --pipeline <span>多步骤编排引擎</span></div><div class="flow-chart"><div class="flow-node n1"><div class="icon">🧠</div><div class="name">AI 意图分解</div><div class="desc">LLM 分解多步骤</div></div><div class="flow-connector"></div><div class="flow-node n2"><div class="icon">📐</div><div class="name">命令匹配</div><div class="desc">意图→命令图</div></div><div class="flow-connector"></div><div class="flow-node n3"><div class="icon">🔗</div><div class="name">依赖解析</div><div class="desc">顺序/并行/参数</div></div><div class="flow-connector"></div><div class="flow-node n4"><div class="icon">✅</div><div class="name">预览</div><div class="desc">展示给用户</div></div></div><div class="example-box"><div class="example-label">📋 示例:<span class="example-query"><code>/spec-ask "本期迭代:从 PRD 导入到代码提交,跑完整开发流程"</code></span></div></div><div class="steps"><div class="step"><div class="step-num">1.</div><div class="step-cmd"><span class="cmd-name">speccore doc2spec</span> <span class="cmd-args">-f PRD.docx --iter {iteration}</span></div><div class="step-parse">导入 PRD 文档,AI 分析生成需求规格说明书</div></div><div class="step"><div class="step-num">2.</div><div class="step-cmd"><span class="cmd-name">speccore analyze</span> <span class="cmd-args">--iteration {iteration} --audit</span></div><div class="step-parse">AI 深度分析需求,生成审计报告和可行性评估</div></div><div class="step"><div class="step-num">3.</div><div class="step-cmd"><span class="cmd-name">speccore split</span> <span class="cmd-args">-f REQUIREMENT.md</span></div><div class="step-parse">将需求拆分为独立开发任务,确定优先级和依赖关系</div></div><div class="step"><div class="step-num">4.</div><div class="step-cmd"><span class="cmd-name">speccore execute</span> <span class="cmd-args">--auto</span></div><div class="step-parse">按任务计划依次自动执行开发、测试和代码生成</div></div><div class="step"><div class="step-num">5.</div><div class="step-cmd"><span class="cmd-name">speccore pr</span> <span class="cmd-args">--auto</span></div><div class="step-parse">代码提交后自动创建 Pull Request,完成交付</div></div></div><div class="confirm-btn">确认执行? (y/N) 或修改参数</div><div class="legend"><div class="legend-item"><span class="legend-dot required"></span> = 必选步骤</div><div class="legend-item"><span class="legend-dot generated"></span> = 已生成</div><div class="legend-item"><span class="legend-dot pending"></span> = 待执行</div><div class="legend-item">→ = 依赖传递</div></div><div class="back-link"><a href="speccore-welcome.html">← 返回 ask 引导页</a></div><div class="footer">由 SpecCore 驱动 · v8.3.152 · 2026-08-31</div></div></body></html>
|
|
@@ -7,4 +7,4 @@
|
|
|
7
7
|
.match-result{padding:10px 0}.match-summary{font-weight:600;font-size:14px;margin-bottom:12px}.match-detail{color:var(--muted);font-size:12px;line-height:1.6}
|
|
8
8
|
/* Pipeline */
|
|
9
9
|
.pipeline-title{font-weight:600;margin-bottom:16px}.pipeline-steps{display:flex;flex-direction:column;gap:10px}.pipe-step{display:flex;gap:14px;padding:12px 14px;background:rgba(99,102,241,.04);border-left:2px solid var(--purple);border-radius:0 8px 8px 0}.pipe-step .pipe-num{font-family:Orbitron;font-size:20px;font-weight:900;color:var(--purple);min-width:36px}.pipe-step .pipe-cmd{font-weight:600;color:var(--green)}.pipe-step .pipe-args{color:var(--muted);font-size:11px}.pipe-step .pipe-desc{color:var(--muted);font-size:10px;margin-top:4px}.pipe-step .pipe-dep{font-size:9px;color:var(--orange);margin-top:4px}.confirm-bar{text-align:center;padding:14px;margin-top:16px;background:rgba(99,102,241,.08);border:1px dashed rgba(99,102,241,.2);border-radius:8px;color:var(--purple);font-size:12px}
|
|
10
|
-
.footer{text-align:center;color:var(--muted);font-size:10px;margin-top:24px;padding-top:16px;border-top:1px solid rgba(255,255,255,.04)}@keyframes cardGlow{0%,100%{opacity:.5;transform:scale(1)}50%{opacity:1;transform:scale(1.6)}}.card-bg{position:absolute;inset:0;pointer-events:none;z-index:0;background:radial-gradient(ellipse at 25% 10%,rgba(14,165,233,.25) 0%,transparent 70%);animation:cardGlow 3s ease-in-out infinite;transform-origin:top center}@keyframes titleGlow{0%,100%{text-shadow:0 0 20px rgba(14,165,233,.4),0 0 60px rgba(14,165,233,.15)}50%{text-shadow:0 0 30px rgba(14,165,233,.7),0 0 80px rgba(14,165,233,.3)}}h1,h2{text-shadow:0 0 20px rgba(14,165,233,.4),0 0 60px rgba(14,165,233,.15);animation:titleGlow 3s ease-in-out infinite}</style></head><body><div class="scanlines"></div><div class="card"><div class="card-bg"></div><div class="vline l"></div><div class="vline r"></div><h1>SPECCORE ASK</h1><div class="query">"dashboard"</div><div class="badge">🎯 意图匹配</div><div class="match-result"><div class="match-summary">✅ 推荐: dashboard</div><div class="match-detail">🎯 推荐命令: <code>speccore dashboard<br>项目仪表盘:期次状态/进度/健康度,--scope</code> global 全量视图<br><br>用法: <code>speccore dashboard</code> [--scope global|iteration] [--export html] [--health] [--lifecycle]<br><br>示例:<br> $ <code>speccore dashboard<br></code> $ <code>speccore dashboard</code> --scope global --export html</div></div><div class="footer">由 SpecCore 驱动 v8.3.
|
|
10
|
+
.footer{text-align:center;color:var(--muted);font-size:10px;margin-top:24px;padding-top:16px;border-top:1px solid rgba(255,255,255,.04)}@keyframes cardGlow{0%,100%{opacity:.5;transform:scale(1)}50%{opacity:1;transform:scale(1.6)}}.card-bg{position:absolute;inset:0;pointer-events:none;z-index:0;background:radial-gradient(ellipse at 25% 10%,rgba(14,165,233,.25) 0%,transparent 70%);animation:cardGlow 3s ease-in-out infinite;transform-origin:top center}@keyframes titleGlow{0%,100%{text-shadow:0 0 20px rgba(14,165,233,.4),0 0 60px rgba(14,165,233,.15)}50%{text-shadow:0 0 30px rgba(14,165,233,.7),0 0 80px rgba(14,165,233,.3)}}h1,h2{text-shadow:0 0 20px rgba(14,165,233,.4),0 0 60px rgba(14,165,233,.15);animation:titleGlow 3s ease-in-out infinite}</style></head><body><div class="scanlines"></div><div class="card"><div class="card-bg"></div><div class="vline l"></div><div class="vline r"></div><h1>SPECCORE ASK</h1><div class="query">"dashboard"</div><div class="badge">🎯 意图匹配</div><div class="match-result"><div class="match-summary">✅ 推荐: dashboard</div><div class="match-detail">🎯 推荐命令: <code>speccore dashboard<br>项目仪表盘:期次状态/进度/健康度,--scope</code> global 全量视图<br><br>用法: <code>speccore dashboard</code> [--scope global|iteration] [--export html] [--health] [--lifecycle]<br><br>示例:<br> $ <code>speccore dashboard<br></code> $ <code>speccore dashboard</code> --scope global --export html</div></div><div class="footer">由 SpecCore 驱动 v8.3.152 · 2026-08-31</div></div></body></html>
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
</div>
|
|
41
41
|
</div>
|
|
42
42
|
|
|
43
|
-
<div class="footer">由 SpecCore 驱动 v8.3.
|
|
43
|
+
<div class="footer">由 SpecCore 驱动 v8.3.152 | 2026-08-31</div>
|
|
44
44
|
|
|
45
45
|
<script>
|
|
46
46
|
const STATE = {"iteration":"期次-Q2","phases":[{"name":"初始化","key":"init","done":true,"icon":"🏗️","cmd":"init","description":"初始化 SpecCore 项目结构","args":""},{"name":"导入需求","key":"doc","done":false,"icon":"📝","cmd":"doc2spec","description":"导入 PRD 文档,AI 转换需求规格","args":"-f PRD.docx --iteration 期次-Q2"},{"name":"分析需求","key":"analyze","done":false,"icon":"🧠","cmd":"analyze","description":"AI 分析需求文档,生成审计报告","args":"--iteration=期次-Q2"},{"name":"拆分任务","key":"split","done":false,"icon":"📦","cmd":"split","description":"将需求拆分为独立开发任务","args":"-f REQUIREMENT.md"},{"name":"执行开发","key":"execute","done":false,"icon":"⚡","cmd":"execute","description":"按计划分批执行开发任务","args":"--auto"},{"name":"提交 PR","key":"pr","done":false,"icon":"🔀","cmd":"pr","description":"代码提交后创建 Pull Request","args":"--auto"},{"name":"归档收尾","key":"done","done":false,"icon":"✅","cmd":"done","description":"校验、同步、审计,归档记录","args":"--all"}],"currentIdx":1,"currentPhase":{"name":"导入需求","key":"doc","done":false,"icon":"📝","cmd":"doc2spec","description":"导入 PRD 文档,AI 转换需求规格","args":"-f PRD.docx --iteration 期次-Q2"}};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html lang="zh-CN" data-theme="ocean"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1.0"><title>SpecCore Help</title><style>@import url('https://fonts.googleapis.com/css2?family=Orbitron:wght@500;700;900&family=JetBrains+Mono:wght@400;600;700&display=swap');[data-theme="ocean"]{--cyan:#0ea5e9;--bg:#0b1929;--card:rgba(13,31,56,.95);--border:rgba(14,165,233,.15);--text:#bae6fd;--muted:#5b7fa5;--green:#14b8a6;--orange:#f97316;--purple:#6366f1}*{margin:0;padding:0;box-sizing:border-box}body{font-family:'JetBrains Mono',monospace;background:var(--bg);color:var(--text);min-height:100vh;display:flex;align-items:center;justify-content:center;padding:20px}.scanlines{position:fixed;inset:0;pointer-events:none;z-index:99;background:repeating-linear-gradient(0deg,transparent,transparent 2px,rgba(0,240,255,.01) 2px,rgba(0,240,255,.01) 4px)}.card{max-width:800px;width:100%;margin:0 auto;background:var(--card);border:1px solid var(--border);border-radius:16px;padding:24px;position:relative;overflow:hidden}.card::before{content:'';position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,var(--cyan),transparent);animation:scanX 3s linear infinite}.card::after{content:'';position:absolute;bottom:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,var(--cyan),transparent);animation:scanX-rev 3s linear infinite}@keyframes scanX{0%{transform:translateX(-100%)}100%{transform:translateX(100%)}}@keyframes scanX-rev{0%{transform:translateX(100%)}100%{transform:translateX(-100%)}}@keyframes scanY{0%{transform:translateY(-100%)}100%{transform:translateY(100%)}}@keyframes scanY-rev{0%{transform:translateY(100%)}100%{transform:translateY(-100%)}}.vline{position:absolute;top:0;width:1px;bottom:0;pointer-events:none}.vline.l{left:0;background:linear-gradient(180deg,transparent,var(--cyan),transparent);animation:scanY-rev 3s linear infinite}.vline.r{right:0;background:linear-gradient(180deg,transparent,var(--cyan),transparent);animation:scanY 3s linear infinite}h1{font-family:'Orbitron',sans-serif;font-size:24px;font-weight:900;background:linear-gradient(135deg,var(--cyan),var(--purple));-webkit-background-clip:text;-webkit-text-fill-color:transparent;letter-spacing:2px;margin-bottom:4px}.sub{color:var(--muted);font-size:11px;margin-bottom:20px}.cat{margin:12px 0;padding:12px;background:rgba(255,255,255,.02);border:1px solid rgba(255,255,255,.04);border-radius:10px}.cat-title{font-size:10px;font-weight:700;color:var(--cyan);text-transform:uppercase;letter-spacing:1px;margin-bottom:8px}.cat-cmds{display:flex;flex-wrap:wrap;gap:6px}.cmd-pill{padding:3px 10px;border-radius:4px;font-size:10px;background:rgba(14,165,233,.1);color:var(--cyan);border:1px solid rgba(14,165,233,.15)}.cmd-detail{padding:8px 0}.cmd-desc{font-size:13px;margin-bottom:16px}.param-list{margin:12px 0}.param{display:flex;gap:12px;padding:6px 0;border-bottom:1px solid rgba(255,255,255,.03)}.param-flag{color:var(--green);font-size:11px;min-width:160px}.param-meaning{color:var(--muted);font-size:11px}.example-list{margin:12px 0}.section-label{font-size:9px;color:var(--muted);text-transform:uppercase;letter-spacing:1px;margin-bottom:6px}code{display:block;background:rgba(14,165,233,.1);padding:4px 10px;border-radius:4px;color:var(--cyan);font-size:11px;margin:4px 0}.footer{text-align:center;color:var(--muted);font-size:10px;margin-top:24px;padding-top:16px;border-top:1px solid rgba(255,255,255,.04)}.grid-pattern{position:fixed;inset:0;pointer-events:none;z-index:0;background-image:linear-gradient(rgba(14,165,233,.03) 1px,transparent 1px),linear-gradient(90deg,rgba(14,165,233,.03) 1px,transparent 1px);background-size:60px 60px}@keyframes cardGlow{0%,100%{opacity:.5;transform:scale(1)}50%{opacity:1;transform:scale(1.6)}}.card-bg{position:absolute;inset:0;pointer-events:none;z-index:0;background:radial-gradient(ellipse at 25% 10%,rgba(14,165,233,.25) 0%,transparent 70%);animation:cardGlow 3s ease-in-out infinite;transform-origin:top center}@keyframes titleGlow{0%,100%{text-shadow:0 0 20px rgba(14,165,233,.4),0 0 60px rgba(14,165,233,.15)}50%{text-shadow:0 0 30px rgba(14,165,233,.7),0 0 80px rgba(14,165,233,.3)}}h1,h2{text-shadow:0 0 20px rgba(14,165,233,.4),0 0 60px rgba(14,165,233,.15);animation:titleGlow 3s ease-in-out infinite}</style></head><body><div class="scanlines"></div><div class="grid-pattern"></div><div class="card"><div class="card-bg"></div><div class="vline l"></div><div class="vline r"></div><h1>SPECCORE HELP</h1><div class="sub">SpecCore 命令参考 · v8.3.
|
|
1
|
+
<!DOCTYPE html><html lang="zh-CN" data-theme="ocean"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1.0"><title>SpecCore Help</title><style>@import url('https://fonts.googleapis.com/css2?family=Orbitron:wght@500;700;900&family=JetBrains+Mono:wght@400;600;700&display=swap');[data-theme="ocean"]{--cyan:#0ea5e9;--bg:#0b1929;--card:rgba(13,31,56,.95);--border:rgba(14,165,233,.15);--text:#bae6fd;--muted:#5b7fa5;--green:#14b8a6;--orange:#f97316;--purple:#6366f1}*{margin:0;padding:0;box-sizing:border-box}body{font-family:'JetBrains Mono',monospace;background:var(--bg);color:var(--text);min-height:100vh;display:flex;align-items:center;justify-content:center;padding:20px}.scanlines{position:fixed;inset:0;pointer-events:none;z-index:99;background:repeating-linear-gradient(0deg,transparent,transparent 2px,rgba(0,240,255,.01) 2px,rgba(0,240,255,.01) 4px)}.card{max-width:800px;width:100%;margin:0 auto;background:var(--card);border:1px solid var(--border);border-radius:16px;padding:24px;position:relative;overflow:hidden}.card::before{content:'';position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,var(--cyan),transparent);animation:scanX 3s linear infinite}.card::after{content:'';position:absolute;bottom:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,var(--cyan),transparent);animation:scanX-rev 3s linear infinite}@keyframes scanX{0%{transform:translateX(-100%)}100%{transform:translateX(100%)}}@keyframes scanX-rev{0%{transform:translateX(100%)}100%{transform:translateX(-100%)}}@keyframes scanY{0%{transform:translateY(-100%)}100%{transform:translateY(100%)}}@keyframes scanY-rev{0%{transform:translateY(100%)}100%{transform:translateY(-100%)}}.vline{position:absolute;top:0;width:1px;bottom:0;pointer-events:none}.vline.l{left:0;background:linear-gradient(180deg,transparent,var(--cyan),transparent);animation:scanY-rev 3s linear infinite}.vline.r{right:0;background:linear-gradient(180deg,transparent,var(--cyan),transparent);animation:scanY 3s linear infinite}h1{font-family:'Orbitron',sans-serif;font-size:24px;font-weight:900;background:linear-gradient(135deg,var(--cyan),var(--purple));-webkit-background-clip:text;-webkit-text-fill-color:transparent;letter-spacing:2px;margin-bottom:4px}.sub{color:var(--muted);font-size:11px;margin-bottom:20px}.cat{margin:12px 0;padding:12px;background:rgba(255,255,255,.02);border:1px solid rgba(255,255,255,.04);border-radius:10px}.cat-title{font-size:10px;font-weight:700;color:var(--cyan);text-transform:uppercase;letter-spacing:1px;margin-bottom:8px}.cat-cmds{display:flex;flex-wrap:wrap;gap:6px}.cmd-pill{padding:3px 10px;border-radius:4px;font-size:10px;background:rgba(14,165,233,.1);color:var(--cyan);border:1px solid rgba(14,165,233,.15)}.cmd-detail{padding:8px 0}.cmd-desc{font-size:13px;margin-bottom:16px}.param-list{margin:12px 0}.param{display:flex;gap:12px;padding:6px 0;border-bottom:1px solid rgba(255,255,255,.03)}.param-flag{color:var(--green);font-size:11px;min-width:160px}.param-meaning{color:var(--muted);font-size:11px}.example-list{margin:12px 0}.section-label{font-size:9px;color:var(--muted);text-transform:uppercase;letter-spacing:1px;margin-bottom:6px}code{display:block;background:rgba(14,165,233,.1);padding:4px 10px;border-radius:4px;color:var(--cyan);font-size:11px;margin:4px 0}.footer{text-align:center;color:var(--muted);font-size:10px;margin-top:24px;padding-top:16px;border-top:1px solid rgba(255,255,255,.04)}.grid-pattern{position:fixed;inset:0;pointer-events:none;z-index:0;background-image:linear-gradient(rgba(14,165,233,.03) 1px,transparent 1px),linear-gradient(90deg,rgba(14,165,233,.03) 1px,transparent 1px);background-size:60px 60px}@keyframes cardGlow{0%,100%{opacity:.5;transform:scale(1)}50%{opacity:1;transform:scale(1.6)}}.card-bg{position:absolute;inset:0;pointer-events:none;z-index:0;background:radial-gradient(ellipse at 25% 10%,rgba(14,165,233,.25) 0%,transparent 70%);animation:cardGlow 3s ease-in-out infinite;transform-origin:top center}@keyframes titleGlow{0%,100%{text-shadow:0 0 20px rgba(14,165,233,.4),0 0 60px rgba(14,165,233,.15)}50%{text-shadow:0 0 30px rgba(14,165,233,.7),0 0 80px rgba(14,165,233,.3)}}h1,h2{text-shadow:0 0 20px rgba(14,165,233,.4),0 0 60px rgba(14,165,233,.15);animation:titleGlow 3s ease-in-out infinite}</style></head><body><div class="scanlines"></div><div class="grid-pattern"></div><div class="card"><div class="card-bg"></div><div class="vline l"></div><div class="vline r"></div><h1>SPECCORE HELP</h1><div class="sub">SpecCore 命令参考 · v8.3.152</div><div class="cat"><div class="cat-title">🧠 AI 入口</div><div class="cat-cmds"><span class="cmd-pill">speccore ask</span><span class="cmd-pill">speccore welcome</span></div></div><div class="cat"><div class="cat-title">🏗️ 初始化</div><div class="cat-cmds"><span class="cmd-pill">speccore init</span></div></div><div class="cat"><div class="cat-title">📋 期次与任务</div><div class="cat-cmds"><span class="cmd-pill">speccore iteration</span><span class="cmd-pill">speccore task</span><span class="cmd-pill">speccore rename</span></div></div><div class="cat"><div class="cat-title">📝 文档转换</div><div class="cat-cmds"><span class="cmd-pill">speccore doc2spec</span><span class="cmd-pill">speccore spec2doc</span></div></div><div class="cat"><div class="cat-title">🔍 分析与计划</div><div class="cat-cmds"><span class="cmd-pill">speccore analyze</span><span class="cmd-pill">speccore plan</span><span class="cmd-pill">speccore split</span></div></div><div class="cat"><div class="cat-title">⚡ 执行与交付</div><div class="cat-cmds"><span class="cmd-pill">speccore execute</span><span class="cmd-pill">speccore pr</span><span class="cmd-pill">speccore done</span></div></div><div class="cat"><div class="cat-title">🔄 同步与变更</div><div class="cat-cmds"><span class="cmd-pill">speccore change</span><span class="cmd-pill">speccore sync</span><span class="cmd-pill">speccore retro</span><span class="cmd-pill">speccore ops</span></div></div><div class="cat"><div class="cat-title">📊 查看与验证</div><div class="cat-cmds"><span class="cmd-pill">speccore dashboard</span><span class="cmd-pill">speccore validate</span><span class="cmd-pill">speccore track</span><span class="cmd-pill">speccore search</span><span class="cmd-pill">speccore graph</span><span class="cmd-pill">speccore knowledge</span></div></div><div class="cat"><div class="cat-title">🤖 智能操作</div><div class="cat-cmds"><span class="cmd-pill">speccore dev</span></div></div><div class="cat"><div class="cat-title">🔧 维护与升级</div><div class="cat-cmds"><span class="cmd-pill">speccore update</span><span class="cmd-pill">speccore doctor</span><span class="cmd-pill">speccore config</span></div></div><div class="cat" onclick="window.location.href='speccore-prompts.html'" style="cursor:pointer"><div class="cat-title">📋 提示词库</div><div class="cat-cmds"><span class="cmd-pill">speccore prompts</span><span class="cmd-pill">查看全部 31 个提示词</span></div></div><div class="footer">由 SpecCore 驱动 v8.3.152 · 2026-08-31</div></div></body></html>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html lang="zh-CN"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1.0"><title>SpecCore Retro · T-001</title><style>@import url('https://fonts.googleapis.com/css2?family=Orbitron:wght@500;700;900&family=JetBrains+Mono:wght@400;600;700');body{margin:0;padding:20px;background:#0b1929;display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:100vh;font-family:'JetBrains Mono',monospace;box-sizing:border-box}.scanlines{position:fixed;inset:0;pointer-events:none;z-index:0;background:repeating-linear-gradient(0deg,transparent,transparent 2px,rgba(0,240,255,.015) 2px,rgba(0,240,255,.015) 4px)}.grid-pattern{position:fixed;inset:0;pointer-events:none;z-index:0;background-image:linear-gradient(rgba(14,165,233,.03) 1px,transparent 1px),linear-gradient(90deg,rgba(14,165,233,.03) 1px,transparent 1px);background-size:60px 60px}.card{max-width:800px;width:100%;background:rgba(13,31,56,.95);border:1px solid rgba(14,165,233,.15);border-radius:16px;padding:24px;position:relative;overflow:hidden;z-index:1}.card::before{content:'';position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,#0ea5e9,transparent);animation:scanX 3s linear infinite}.card::after{content:'';position:absolute;bottom:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,#0ea5e9,transparent);animation:scanX-rev 3s linear infinite}.vline{position:absolute;top:0;width:1px;bottom:0;pointer-events:none}.vline.l{left:0;background:linear-gradient(0deg,transparent,#0ea5e9,transparent);animation:scanY-rev 3s linear infinite}.vline.r{right:0;background:linear-gradient(0deg,transparent,#0ea5e9,transparent);animation:scanY 3s linear infinite}@keyframes scanX{0%{transform:translateX(-100%)}100%{transform:translateX(100%)}}@keyframes scanX-rev{0%{transform:translateX(100%)}100%{transform:translateX(-100%)}}@keyframes scanY{0%{transform:translateY(-100%)}100%{transform:translateY(100%)}}@keyframes scanY-rev{0%{transform:translateY(100%)}100%{transform:translateY(-100%)}}h1{font-family:'Orbitron',sans-serif;font-size:22px;font-weight:900;background:linear-gradient(135deg,#0ea5e9,#6366f1);-webkit-background-clip:text;-webkit-text-fill-color:transparent;letter-spacing:2px}.meta{color:#5b7fa5;font-size:11px;margin:8px 0 20px}.grid2{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin:16px 0}.stat{background:rgba(14,165,233,.06);border:1px solid rgba(14,165,233,.1);border-radius:8px;padding:12px;text-align:center}.stat .val{font-family:'Orbitron',sans-serif;font-size:20px;font-weight:900;color:#0ea5e9}.stat .lbl{font-size:10px;color:#5b7fa5;margin-top:4px}.score{text-align:center;margin:12px 0;display:flex;justify-content:center;gap:14px}.star-filled,.star-empty{display:inline-flex;width:42px;height:42px;align-items:center;justify-content:center}.summary{padding:12px;background:rgba(20,184,166,.06);border:1px solid rgba(20,184,166,.15);border-radius:8px;color:#bae6fd;font-size:12px;line-height:1.6;margin:12px 0}.improve{padding:12px;background:rgba(249,115,22,.06);border:1px solid rgba(249,115,22,.15);border-radius:8px;color:#f97316;font-size:11px}.pass{color:#14b8a6}.fail{color:#f97316}.ft{text-align:center;color:#5b7fa5;font-size:10px;margin-top:24px}@keyframes cardGlow{0%,100%{opacity:.5;transform:scale(1)}50%{opacity:1;transform:scale(1.6)}}.card-bg{position:absolute;inset:0;pointer-events:none;z-index:0;background:radial-gradient(ellipse at 25% 10%,rgba(14,165,233,.25) 0%,transparent 70%);animation:cardGlow 3s ease-in-out infinite;transform-origin:top center}@keyframes titleGlow{0%,100%{text-shadow:0 0 20px rgba(14,165,233,.4),0 0 60px rgba(14,165,233,.15)}50%{text-shadow:0 0 30px rgba(14,165,233,.7),0 0 80px rgba(14,165,233,.3)}}h1,h2{text-shadow:0 0 20px rgba(14,165,233,.4),0 0 60px rgba(14,165,233,.15);animation:titleGlow 3s ease-in-out infinite}</style></head><body><div class="scanlines"></div><div class="grid-pattern"></div><div class="card"><div class="card-bg"></div><div class="vline l"></div><div class="vline r"></div><h1>RETRO · T-001</h1><div class="meta">期次: :--- · 2026-08-31</div><div class="score"><i class="star-filled"><svg width="42" height="42" viewBox="0 0 24 24" style="filter:drop-shadow(0 0 8px rgba(251,191,36,.7)) drop-shadow(0 0 16px rgba(251,191,36,.4))"><defs><linearGradient id="sg" x1="0" y1="0" x2="1" y2="1"><stop stop-color="#fcd34d"/><stop offset="1" stop-color="#f59e0b"/></linearGradient></defs><path d="M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z" fill="url(#sg)" stroke="#fbbf24" stroke-width="0.5" stroke-linejoin="round"/></svg></i><i class="star-filled"><svg width="42" height="42" viewBox="0 0 24 24" style="filter:drop-shadow(0 0 8px rgba(251,191,36,.7)) drop-shadow(0 0 16px rgba(251,191,36,.4))"><defs><linearGradient id="sg" x1="0" y1="0" x2="1" y2="1"><stop stop-color="#fcd34d"/><stop offset="1" stop-color="#f59e0b"/></linearGradient></defs><path d="M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z" fill="url(#sg)" stroke="#fbbf24" stroke-width="0.5" stroke-linejoin="round"/></svg></i><i class="star-filled"><svg width="42" height="42" viewBox="0 0 24 24" style="filter:drop-shadow(0 0 8px rgba(251,191,36,.7)) drop-shadow(0 0 16px rgba(251,191,36,.4))"><defs><linearGradient id="sg" x1="0" y1="0" x2="1" y2="1"><stop stop-color="#fcd34d"/><stop offset="1" stop-color="#f59e0b"/></linearGradient></defs><path d="M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z" fill="url(#sg)" stroke="#fbbf24" stroke-width="0.5" stroke-linejoin="round"/></svg></i><i class="star-filled"><svg width="42" height="42" viewBox="0 0 24 24" style="filter:drop-shadow(0 0 8px rgba(251,191,36,.7)) drop-shadow(0 0 16px rgba(251,191,36,.4))"><defs><linearGradient id="sg" x1="0" y1="0" x2="1" y2="1"><stop stop-color="#fcd34d"/><stop offset="1" stop-color="#f59e0b"/></linearGradient></defs><path d="M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z" fill="url(#sg)" stroke="#fbbf24" stroke-width="0.5" stroke-linejoin="round"/></svg></i><i class="star-empty"><svg width="42" height="42" viewBox="0 0 24 24" style="filter:drop-shadow(0 0 4px rgba(51,65,85,.3))"><defs><linearGradient id="sg2" x1="0" y1="0" x2="1" y2="1"><stop stop-color="#475569"/><stop offset="1" stop-color="#0f172a"/></linearGradient></defs><path d="M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z" fill="url(#sg2)" stroke="#334155" stroke-width="0.5" stroke-linejoin="round"/></svg></i></div><div class="grid2"><div class="stat"><div class="val">0</div><div class="lbl">文件变更</div></div><div class="stat"><div class="val fail">❌</div><div class="lbl">验证</div></div></div><div class="summary">任务 T-001 已完成,共涉及 0 个文件变更</div><div class="improve">💡 任务粒度合适</div><div class="ft">SpecCore Retro v8.3.
|
|
1
|
+
<!DOCTYPE html><html lang="zh-CN"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1.0"><title>SpecCore Retro · T-001</title><style>@import url('https://fonts.googleapis.com/css2?family=Orbitron:wght@500;700;900&family=JetBrains+Mono:wght@400;600;700');body{margin:0;padding:20px;background:#0b1929;display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:100vh;font-family:'JetBrains Mono',monospace;box-sizing:border-box}.scanlines{position:fixed;inset:0;pointer-events:none;z-index:0;background:repeating-linear-gradient(0deg,transparent,transparent 2px,rgba(0,240,255,.015) 2px,rgba(0,240,255,.015) 4px)}.grid-pattern{position:fixed;inset:0;pointer-events:none;z-index:0;background-image:linear-gradient(rgba(14,165,233,.03) 1px,transparent 1px),linear-gradient(90deg,rgba(14,165,233,.03) 1px,transparent 1px);background-size:60px 60px}.card{max-width:800px;width:100%;background:rgba(13,31,56,.95);border:1px solid rgba(14,165,233,.15);border-radius:16px;padding:24px;position:relative;overflow:hidden;z-index:1}.card::before{content:'';position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,#0ea5e9,transparent);animation:scanX 3s linear infinite}.card::after{content:'';position:absolute;bottom:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,#0ea5e9,transparent);animation:scanX-rev 3s linear infinite}.vline{position:absolute;top:0;width:1px;bottom:0;pointer-events:none}.vline.l{left:0;background:linear-gradient(0deg,transparent,#0ea5e9,transparent);animation:scanY-rev 3s linear infinite}.vline.r{right:0;background:linear-gradient(0deg,transparent,#0ea5e9,transparent);animation:scanY 3s linear infinite}@keyframes scanX{0%{transform:translateX(-100%)}100%{transform:translateX(100%)}}@keyframes scanX-rev{0%{transform:translateX(100%)}100%{transform:translateX(-100%)}}@keyframes scanY{0%{transform:translateY(-100%)}100%{transform:translateY(100%)}}@keyframes scanY-rev{0%{transform:translateY(100%)}100%{transform:translateY(-100%)}}h1{font-family:'Orbitron',sans-serif;font-size:22px;font-weight:900;background:linear-gradient(135deg,#0ea5e9,#6366f1);-webkit-background-clip:text;-webkit-text-fill-color:transparent;letter-spacing:2px}.meta{color:#5b7fa5;font-size:11px;margin:8px 0 20px}.grid2{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin:16px 0}.stat{background:rgba(14,165,233,.06);border:1px solid rgba(14,165,233,.1);border-radius:8px;padding:12px;text-align:center}.stat .val{font-family:'Orbitron',sans-serif;font-size:20px;font-weight:900;color:#0ea5e9}.stat .lbl{font-size:10px;color:#5b7fa5;margin-top:4px}.score{text-align:center;margin:12px 0;display:flex;justify-content:center;gap:14px}.star-filled,.star-empty{display:inline-flex;width:42px;height:42px;align-items:center;justify-content:center}.summary{padding:12px;background:rgba(20,184,166,.06);border:1px solid rgba(20,184,166,.15);border-radius:8px;color:#bae6fd;font-size:12px;line-height:1.6;margin:12px 0}.improve{padding:12px;background:rgba(249,115,22,.06);border:1px solid rgba(249,115,22,.15);border-radius:8px;color:#f97316;font-size:11px}.pass{color:#14b8a6}.fail{color:#f97316}.ft{text-align:center;color:#5b7fa5;font-size:10px;margin-top:24px}@keyframes cardGlow{0%,100%{opacity:.5;transform:scale(1)}50%{opacity:1;transform:scale(1.6)}}.card-bg{position:absolute;inset:0;pointer-events:none;z-index:0;background:radial-gradient(ellipse at 25% 10%,rgba(14,165,233,.25) 0%,transparent 70%);animation:cardGlow 3s ease-in-out infinite;transform-origin:top center}@keyframes titleGlow{0%,100%{text-shadow:0 0 20px rgba(14,165,233,.4),0 0 60px rgba(14,165,233,.15)}50%{text-shadow:0 0 30px rgba(14,165,233,.7),0 0 80px rgba(14,165,233,.3)}}h1,h2{text-shadow:0 0 20px rgba(14,165,233,.4),0 0 60px rgba(14,165,233,.15);animation:titleGlow 3s ease-in-out infinite}</style></head><body><div class="scanlines"></div><div class="grid-pattern"></div><div class="card"><div class="card-bg"></div><div class="vline l"></div><div class="vline r"></div><h1>RETRO · T-001</h1><div class="meta">期次: :--- · 2026-08-31</div><div class="score"><i class="star-filled"><svg width="42" height="42" viewBox="0 0 24 24" style="filter:drop-shadow(0 0 8px rgba(251,191,36,.7)) drop-shadow(0 0 16px rgba(251,191,36,.4))"><defs><linearGradient id="sg" x1="0" y1="0" x2="1" y2="1"><stop stop-color="#fcd34d"/><stop offset="1" stop-color="#f59e0b"/></linearGradient></defs><path d="M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z" fill="url(#sg)" stroke="#fbbf24" stroke-width="0.5" stroke-linejoin="round"/></svg></i><i class="star-filled"><svg width="42" height="42" viewBox="0 0 24 24" style="filter:drop-shadow(0 0 8px rgba(251,191,36,.7)) drop-shadow(0 0 16px rgba(251,191,36,.4))"><defs><linearGradient id="sg" x1="0" y1="0" x2="1" y2="1"><stop stop-color="#fcd34d"/><stop offset="1" stop-color="#f59e0b"/></linearGradient></defs><path d="M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z" fill="url(#sg)" stroke="#fbbf24" stroke-width="0.5" stroke-linejoin="round"/></svg></i><i class="star-filled"><svg width="42" height="42" viewBox="0 0 24 24" style="filter:drop-shadow(0 0 8px rgba(251,191,36,.7)) drop-shadow(0 0 16px rgba(251,191,36,.4))"><defs><linearGradient id="sg" x1="0" y1="0" x2="1" y2="1"><stop stop-color="#fcd34d"/><stop offset="1" stop-color="#f59e0b"/></linearGradient></defs><path d="M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z" fill="url(#sg)" stroke="#fbbf24" stroke-width="0.5" stroke-linejoin="round"/></svg></i><i class="star-filled"><svg width="42" height="42" viewBox="0 0 24 24" style="filter:drop-shadow(0 0 8px rgba(251,191,36,.7)) drop-shadow(0 0 16px rgba(251,191,36,.4))"><defs><linearGradient id="sg" x1="0" y1="0" x2="1" y2="1"><stop stop-color="#fcd34d"/><stop offset="1" stop-color="#f59e0b"/></linearGradient></defs><path d="M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z" fill="url(#sg)" stroke="#fbbf24" stroke-width="0.5" stroke-linejoin="round"/></svg></i><i class="star-empty"><svg width="42" height="42" viewBox="0 0 24 24" style="filter:drop-shadow(0 0 4px rgba(51,65,85,.3))"><defs><linearGradient id="sg2" x1="0" y1="0" x2="1" y2="1"><stop stop-color="#475569"/><stop offset="1" stop-color="#0f172a"/></linearGradient></defs><path d="M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z" fill="url(#sg2)" stroke="#334155" stroke-width="0.5" stroke-linejoin="round"/></svg></i></div><div class="grid2"><div class="stat"><div class="val">0</div><div class="lbl">文件变更</div></div><div class="stat"><div class="val fail">❌</div><div class="lbl">验证</div></div></div><div class="summary">任务 T-001 已完成,共涉及 0 个文件变更</div><div class="improve">💡 任务粒度合适</div><div class="ft">SpecCore Retro v8.3.152 · 2026-08-31</div></div></body></html>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html lang="zh-CN" data-theme="ocean"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1.0"><title>SpecCore — 项目名片</title><style>@import url('https://fonts.googleapis.com/css2?family=Orbitron:wght@500;700;900&family=JetBrains+Mono:wght@400;600;700&display=swap');[data-theme="ocean"]{--cyan:#0ea5e9;--bg:#0b1929;--card:rgba(13,31,56,.95);--border:rgba(14,165,233,.15);--text:#bae6fd;--muted:#5b7fa5;--green:#14b8a6;--orange:#f97316;--purple:#6366f1}*{margin:0;padding:0;box-sizing:border-box}body{font-family:'JetBrains Mono',monospace;background:var(--bg);color:var(--text);min-height:100vh;display:flex;align-items:center;justify-content:center;padding:24px 20px}.scanlines{position:fixed;inset:0;pointer-events:none;z-index:99;background:repeating-linear-gradient(0deg,transparent,transparent 2px,rgba(0,240,255,.015) 2px,rgba(0,240,255,.015) 4px)}.stars{position:fixed;inset:0;pointer-events:none;background:radial-gradient(1px 1px at 20% 30%,rgba(255,255,255,.3),transparent),radial-gradient(1.5px 1.5px at 60% 70%,rgba(14,165,233,.4),transparent)}.card{max-width:800px;width:100%;margin:0 auto;background:var(--card);border:1px solid var(--border);border-radius:16px;padding:24px;position:relative;overflow:hidden;z-index:1}.card::before{content:'';position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,var(--cyan),transparent);animation:scanX 3s linear infinite}.card::after{content:'';position:absolute;bottom:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,var(--cyan),transparent);animation:scanX-rev 3s linear infinite}@keyframes scanX{0%{transform:translateX(-100%)}100%{transform:translateX(100%)}}@keyframes scanX-rev{0%{transform:translateX(100%)}100%{transform:translateX(-100%)}}@keyframes scanY{0%{transform:translateY(-100%)}100%{transform:translateY(100%)}}@keyframes scanY-rev{0%{transform:translateY(100%)}100%{transform:translateY(-100%)}}.vline{position:absolute;top:0;width:1px;bottom:0;pointer-events:none}.vline.l{left:0;background:linear-gradient(180deg,transparent,var(--cyan),transparent);animation:scanY-rev 3s linear infinite}.vline.r{right:0;background:linear-gradient(180deg,transparent,var(--cyan),transparent);animation:scanY 3s linear infinite}.center-node{width:90px;height:90px;border-radius:50%;border:2px solid var(--cyan);display:flex;align-items:center;justify-content:center;background:rgba(14,165,233,.08);margin:24px auto;font-family:Orbitron,sans-serif;font-size:20px;font-weight:900;background:linear-gradient(135deg,var(--cyan),var(--purple));-webkit-background-clip:text;-webkit-text-fill-color:transparent;position:relative;z-index:2}.modes-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin:20px 0}.mode-card{border-radius:10px;padding:14px;position:relative;overflow:hidden;background:rgba(255,255,255,.02)}.mode-card.m1{border:1.5px solid var(--green)}.mode-card.m2{border:1.5px solid var(--orange)}.mode-card.m3{border:1.5px solid var(--cyan)}.mode-card.m4{border:1.5px solid var(--purple)}.mode-card .mode-title{font-weight:600;margin:6px 0;font-size:13px}.mode-card.m1 .mode-title{color:var(--green)}.mode-card.m2 .mode-title{color:var(--orange)}.mode-card.m3 .mode-title{color:var(--cyan)}.mode-card.m4 .mode-title{color:var(--purple)}.mode-card .mode-icon{font-size:18px;margin-right:4px}.mode-card .mode-desc{font-size:10px;color:var(--muted);margin:4px 0}.mode-card .mode-tag{display:inline-block;padding:2px 8px;font-size:9px;border-radius:4px;background:rgba(20,184,166,.1);color:var(--green);margin-top:6px}.mode-card.m1 .mode-tag{background:rgba(20,184,166,.08);color:var(--green)}.mode-card.m2 .mode-tag{background:rgba(249,115,22,.08);color:var(--orange)}.mode-card.m3 .mode-tag{background:rgba(14,165,233,.08);color:var(--cyan)}.mode-card.m4 .mode-tag{background:rgba(99,102,241,.08);color:var(--purple)}.status-row{display:flex;align-items:center;gap:8px;margin:8px 0;padding:10px 14px;background:rgba(14,165,233,.04);border:1px solid rgba(14,165,233,.1);border-radius:8px}.flow{display:flex;gap:8px;align-items:center;flex-wrap:wrap;justify-content:flex-start}.flow-step{display:flex;flex-direction:row;align-items:center;gap:6px;padding:10px 8px;border-radius:10px;border:none}.flow-step.done{background:rgba(20,184,166,.1)}.flow-step.pending{background:rgba(255,255,255,.04)}.flow-dot{width:10px;height:10px;border-radius:50%;flex-shrink:0;border:none}.flow-dot.done{background:var(--green);box-shadow:0 0 8px var(--green)}.flow-dot.pending{background:rgba(255,255,255,.15)}.flow-label{font-size:11px;color:var(--muted);white-space:nowrap}.flow-label.done{color:var(--green)}.flow-arrow{color:var(--muted);font-size:12px;text-align:center;line-height:1}.cmd-row{display:flex;gap:6px;flex-wrap:wrap;margin-top:10px}.cmd-pill{padding:3px 10px;border-radius:4px;font-size:10px;background:rgba(14,165,233,.1);color:var(--cyan);border:1px solid rgba(14,165,233,.15)}.footer{text-align:center;color:var(--muted);font-size:10px;margin-top:24px;padding-top:16px;border-top:1px solid rgba(255,255,255,.04)}h1{font-family:'Orbitron',sans-serif;font-size:32px;font-weight:900;background:linear-gradient(135deg,var(--cyan),var(--purple));-webkit-background-clip:text;-webkit-text-fill-color:transparent;letter-spacing:2px;text-align:center}.sub{color:var(--muted);font-size:11px;letter-spacing:1px;text-align:center;margin-top:4px}.section-title{font-size:10px;font-weight:700;color:var(--cyan);text-transform:uppercase;letter-spacing:2px;margin:20px 0 10px}.confirm-bar{text-align:center;padding:18px;margin:24px 0 8px;background:linear-gradient(135deg,var(--cyan) 0%,#0284c7 100%);border-radius:40px;color:#fff;font-weight:600;font-size:14px;box-shadow:0 0 30px rgba(14,165,233,.3);cursor:pointer;letter-spacing:1px}.section{margin:14px 0;padding:14px;background:rgba(255,255,255,.02);border:1px solid rgba(255,255,255,.04);border-radius:10px}.grid-pattern{position:fixed;inset:0;pointer-events:none;z-index:0;background-image:linear-gradient(rgba(14,165,233,.03) 1px,transparent 1px),linear-gradient(90deg,rgba(14,165,233,.03) 1px,transparent 1px);background-size:60px 60px}@keyframes cardGlow{0%,100%{opacity:.5;transform:scale(1)}50%{opacity:1;transform:scale(1.6)}}.card-bg{position:absolute;inset:0;pointer-events:none;z-index:0;background:radial-gradient(ellipse at 50% 10%,rgba(14,165,233,.25) 0%,transparent 70%);animation:cardGlow 3s ease-in-out infinite;transform-origin:top center}@keyframes titleGlow{0%,100%{text-shadow:0 0 20px rgba(14,165,233,.4),0 0 60px rgba(14,165,233,.15)}50%{text-shadow:0 0 30px rgba(14,165,233,.7),0 0 80px rgba(14,165,233,.3)}}h1,h2{text-shadow:0 0 20px rgba(14,165,233,.4),0 0 60px rgba(14,165,233,.15);animation:titleGlow 3s ease-in-out infinite}</style></head><body><div class="scanlines"></div><div class="grid-pattern"></div><div class="stars"></div><div class="card"><div class="card-bg"></div><div class="vline l"></div><div class="vline r"></div><h1>SPECCORE</h1><div class="sub">Code by Spec, Not by Vibe · v8.3.150 · Q2</div><div class="status-row"><span>📍</span><div><div style="font-size:11px;font-weight:600">⚡ 执行中 (6 任务)</div><div style="font-size:9px;color:var(--muted)">当前迭代: Q2 · 6 任务</div></div></div><div class="section-title">🔄 核心流水线</div><div class="section"><div class="flow"><div class="flow-step done"><span class="flow-dot done"></span><span class="flow-label done">导入</span></div><div class="flow-arrow">→</div><div class="flow-step done"><span class="flow-dot done"></span><span class="flow-label done">分析</span></div><div class="flow-arrow">→</div><div class="flow-step done"><span class="flow-dot done"></span><span class="flow-label done">拆分</span></div><div class="flow-arrow">→</div><div class="flow-step done"><span class="flow-dot done"></span><span class="flow-label done">计划</span></div><div class="flow-arrow">→</div><div class="flow-step pending"><span class="flow-dot pending"></span><span class="flow-label ">执行</span></div><div class="flow-arrow">→</div><div class="flow-step pending"><span class="flow-dot pending"></span><span class="flow-label ">交付</span></div></div></div><div class="section-title">🧠 ask — SpecCore 万能 AI 入口</div><div class="modes-grid"><div class="mode-card m1" onclick="window.location.href='speccore-ask-explain.html'" style="cursor:pointer"><div class="mode-title"><span class="mode-icon">📖</span>命令解释</div><div class="mode-desc">"dashboard 怎么用"<br>"init 有哪些参数"</div><div class="mode-tag">知识库匹配 →</div></div><div class="mode-card m2" onclick="window.location.href='speccore-ask-guide.html'" style="cursor:pointer"><div class="mode-title"><span class="mode-icon">🗺️</span>任务指引</div><div class="mode-desc">"我想做一个登录功能"<br>"怎么开始新项目"</div><div class="mode-tag">工作流生成 →</div></div><div class="mode-card m3" onclick="window.location.href='speccore-ask-match.html'" style="cursor:pointer"><div class="mode-title"><span class="mode-icon">🎯</span>意图匹配</div><div class="mode-desc">"查看进度" → dashboard<br>"审查代码" → validate</div><div class="mode-tag">38意图 + AI →</div></div><div class="mode-card m4" onclick="window.location.href='speccore-ask-pipeline.html'" style="cursor:pointer"><div class="mode-title"><span class="mode-icon">⚡</span>复杂编排</div><div class="mode-desc">"计划所有任务晚8点分批"<br>"做完分析→拆分→PR"</div><div class="mode-tag">Pipeline 引擎 →</div></div></div><div class="confirm-bar" onclick="window.location.href='speccore-ask-onboarding.html'">确认进入 · 输入 <code style="background:rgba(255,255,255,.2);padding:2px 8px;border-radius:4px">speccore ask "你的需求"</code> 开始</div><div class="section-title">📋 提示词库</div><div class="section" onclick="window.location.href='speccore-prompts.html'" style="cursor:pointer"><div style="display:flex;align-items:center;gap:10px"><span style="font-size:24px">🎯</span><div><div style="font-size:13px;font-weight:600;color:var(--cyan)">SpecCore 提示词库</div><div style="font-size:11px;color:var(--muted);margin-top:2px">31 个预置提示词,按场景分类,一键复制 AI 说法 / 触发命令</div></div><span style="margin-left:auto;color:var(--cyan);font-size:12px">→</span></div></div><div class="section-title">━━ 常用命令 ━━</div><div class="cmd-row"><span class="cmd-pill">speccore dashboard</span><span class="cmd-pill">speccore dev --auto</span><span class="cmd-pill">speccore ask "描述"</span><span class="cmd-pill">speccore graph query "订单"</span><span class="cmd-pill">speccore help</span></div><div class="footer">由 SpecCore 驱动 v8.3.150 · 2026-08-31</div></div></body></html>
|
|
1
|
+
<!DOCTYPE html><html lang="zh-CN" data-theme="ocean"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1.0"><title>SpecCore — 项目名片</title><style>@import url('https://fonts.googleapis.com/css2?family=Orbitron:wght@500;700;900&family=JetBrains+Mono:wght@400;600;700&display=swap');[data-theme="ocean"]{--cyan:#0ea5e9;--bg:#0b1929;--card:rgba(13,31,56,.95);--border:rgba(14,165,233,.15);--text:#bae6fd;--muted:#5b7fa5;--green:#14b8a6;--orange:#f97316;--purple:#6366f1}*{margin:0;padding:0;box-sizing:border-box}body{font-family:'JetBrains Mono',monospace;background:var(--bg);color:var(--text);min-height:100vh;display:flex;align-items:center;justify-content:center;padding:24px 20px}.scanlines{position:fixed;inset:0;pointer-events:none;z-index:99;background:repeating-linear-gradient(0deg,transparent,transparent 2px,rgba(0,240,255,.015) 2px,rgba(0,240,255,.015) 4px)}.stars{position:fixed;inset:0;pointer-events:none;background:radial-gradient(1px 1px at 20% 30%,rgba(255,255,255,.3),transparent),radial-gradient(1.5px 1.5px at 60% 70%,rgba(14,165,233,.4),transparent)}.card{max-width:800px;width:100%;margin:0 auto;background:var(--card);border:1px solid var(--border);border-radius:16px;padding:24px;position:relative;overflow:hidden;z-index:1}.card::before{content:'';position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,var(--cyan),transparent);animation:scanX 3s linear infinite}.card::after{content:'';position:absolute;bottom:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,var(--cyan),transparent);animation:scanX-rev 3s linear infinite}@keyframes scanX{0%{transform:translateX(-100%)}100%{transform:translateX(100%)}}@keyframes scanX-rev{0%{transform:translateX(100%)}100%{transform:translateX(-100%)}}@keyframes scanY{0%{transform:translateY(-100%)}100%{transform:translateY(100%)}}@keyframes scanY-rev{0%{transform:translateY(100%)}100%{transform:translateY(-100%)}}.vline{position:absolute;top:0;width:1px;bottom:0;pointer-events:none}.vline.l{left:0;background:linear-gradient(180deg,transparent,var(--cyan),transparent);animation:scanY-rev 3s linear infinite}.vline.r{right:0;background:linear-gradient(180deg,transparent,var(--cyan),transparent);animation:scanY 3s linear infinite}.center-node{width:90px;height:90px;border-radius:50%;border:2px solid var(--cyan);display:flex;align-items:center;justify-content:center;background:rgba(14,165,233,.08);margin:24px auto;font-family:Orbitron,sans-serif;font-size:20px;font-weight:900;background:linear-gradient(135deg,var(--cyan),var(--purple));-webkit-background-clip:text;-webkit-text-fill-color:transparent;position:relative;z-index:2}.modes-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin:20px 0}.mode-card{border-radius:10px;padding:14px;position:relative;overflow:hidden;background:rgba(255,255,255,.02)}.mode-card.m1{border:1.5px solid var(--green)}.mode-card.m2{border:1.5px solid var(--orange)}.mode-card.m3{border:1.5px solid var(--cyan)}.mode-card.m4{border:1.5px solid var(--purple)}.mode-card .mode-title{font-weight:600;margin:6px 0;font-size:13px}.mode-card.m1 .mode-title{color:var(--green)}.mode-card.m2 .mode-title{color:var(--orange)}.mode-card.m3 .mode-title{color:var(--cyan)}.mode-card.m4 .mode-title{color:var(--purple)}.mode-card .mode-icon{font-size:18px;margin-right:4px}.mode-card .mode-desc{font-size:10px;color:var(--muted);margin:4px 0}.mode-card .mode-tag{display:inline-block;padding:2px 8px;font-size:9px;border-radius:4px;background:rgba(20,184,166,.1);color:var(--green);margin-top:6px}.mode-card.m1 .mode-tag{background:rgba(20,184,166,.08);color:var(--green)}.mode-card.m2 .mode-tag{background:rgba(249,115,22,.08);color:var(--orange)}.mode-card.m3 .mode-tag{background:rgba(14,165,233,.08);color:var(--cyan)}.mode-card.m4 .mode-tag{background:rgba(99,102,241,.08);color:var(--purple)}.status-row{display:flex;align-items:center;gap:8px;margin:8px 0;padding:10px 14px;background:rgba(14,165,233,.04);border:1px solid rgba(14,165,233,.1);border-radius:8px}.flow{display:flex;gap:8px;align-items:center;flex-wrap:wrap;justify-content:flex-start}.flow-step{display:flex;flex-direction:row;align-items:center;gap:6px;padding:10px 8px;border-radius:10px;border:none}.flow-step.done{background:rgba(20,184,166,.1)}.flow-step.pending{background:rgba(255,255,255,.04)}.flow-dot{width:10px;height:10px;border-radius:50%;flex-shrink:0;border:none}.flow-dot.done{background:var(--green);box-shadow:0 0 8px var(--green)}.flow-dot.pending{background:rgba(255,255,255,.15)}.flow-label{font-size:11px;color:var(--muted);white-space:nowrap}.flow-label.done{color:var(--green)}.flow-arrow{color:var(--muted);font-size:12px;text-align:center;line-height:1}.cmd-row{display:flex;gap:6px;flex-wrap:wrap;margin-top:10px}.cmd-pill{padding:3px 10px;border-radius:4px;font-size:10px;background:rgba(14,165,233,.1);color:var(--cyan);border:1px solid rgba(14,165,233,.15)}.footer{text-align:center;color:var(--muted);font-size:10px;margin-top:24px;padding-top:16px;border-top:1px solid rgba(255,255,255,.04)}h1{font-family:'Orbitron',sans-serif;font-size:32px;font-weight:900;background:linear-gradient(135deg,var(--cyan),var(--purple));-webkit-background-clip:text;-webkit-text-fill-color:transparent;letter-spacing:2px;text-align:center}.sub{color:var(--muted);font-size:11px;letter-spacing:1px;text-align:center;margin-top:4px}.section-title{font-size:10px;font-weight:700;color:var(--cyan);text-transform:uppercase;letter-spacing:2px;margin:20px 0 10px}.confirm-bar{text-align:center;padding:18px;margin:24px 0 8px;background:linear-gradient(135deg,var(--cyan) 0%,#0284c7 100%);border-radius:40px;color:#fff;font-weight:600;font-size:14px;box-shadow:0 0 30px rgba(14,165,233,.3);cursor:pointer;letter-spacing:1px}.section{margin:14px 0;padding:14px;background:rgba(255,255,255,.02);border:1px solid rgba(255,255,255,.04);border-radius:10px}.grid-pattern{position:fixed;inset:0;pointer-events:none;z-index:0;background-image:linear-gradient(rgba(14,165,233,.03) 1px,transparent 1px),linear-gradient(90deg,rgba(14,165,233,.03) 1px,transparent 1px);background-size:60px 60px}@keyframes cardGlow{0%,100%{opacity:.5;transform:scale(1)}50%{opacity:1;transform:scale(1.6)}}.card-bg{position:absolute;inset:0;pointer-events:none;z-index:0;background:radial-gradient(ellipse at 50% 10%,rgba(14,165,233,.25) 0%,transparent 70%);animation:cardGlow 3s ease-in-out infinite;transform-origin:top center}@keyframes titleGlow{0%,100%{text-shadow:0 0 20px rgba(14,165,233,.4),0 0 60px rgba(14,165,233,.15)}50%{text-shadow:0 0 30px rgba(14,165,233,.7),0 0 80px rgba(14,165,233,.3)}}h1,h2{text-shadow:0 0 20px rgba(14,165,233,.4),0 0 60px rgba(14,165,233,.15);animation:titleGlow 3s ease-in-out infinite}</style></head><body><div class="scanlines"></div><div class="grid-pattern"></div><div class="stars"></div><div class="card"><div class="card-bg"></div><div class="vline l"></div><div class="vline r"></div><h1>SPECCORE</h1><div class="sub">Code by Spec, Not by Vibe · v8.3.152 · Q2</div><div class="status-row"><span>📍</span><div><div style="font-size:11px;font-weight:600">⚡ 执行中 (6 任务)</div><div style="font-size:9px;color:var(--muted)">当前迭代: Q2 · 6 任务</div></div></div><div class="section-title">🔄 核心流水线</div><div class="section"><div class="flow"><div class="flow-step done"><span class="flow-dot done"></span><span class="flow-label done">导入</span></div><div class="flow-arrow">→</div><div class="flow-step done"><span class="flow-dot done"></span><span class="flow-label done">分析</span></div><div class="flow-arrow">→</div><div class="flow-step done"><span class="flow-dot done"></span><span class="flow-label done">拆分</span></div><div class="flow-arrow">→</div><div class="flow-step done"><span class="flow-dot done"></span><span class="flow-label done">计划</span></div><div class="flow-arrow">→</div><div class="flow-step pending"><span class="flow-dot pending"></span><span class="flow-label ">执行</span></div><div class="flow-arrow">→</div><div class="flow-step pending"><span class="flow-dot pending"></span><span class="flow-label ">交付</span></div></div></div><div class="section-title">🧠 ask — SpecCore 万能 AI 入口</div><div class="modes-grid"><div class="mode-card m1" onclick="window.location.href='speccore-ask-explain.html'" style="cursor:pointer"><div class="mode-title"><span class="mode-icon">📖</span>命令解释</div><div class="mode-desc">"dashboard 怎么用"<br>"init 有哪些参数"</div><div class="mode-tag">知识库匹配 →</div></div><div class="mode-card m2" onclick="window.location.href='speccore-ask-guide.html'" style="cursor:pointer"><div class="mode-title"><span class="mode-icon">🗺️</span>任务指引</div><div class="mode-desc">"我想做一个登录功能"<br>"怎么开始新项目"</div><div class="mode-tag">工作流生成 →</div></div><div class="mode-card m3" onclick="window.location.href='speccore-ask-match.html'" style="cursor:pointer"><div class="mode-title"><span class="mode-icon">🎯</span>意图匹配</div><div class="mode-desc">"查看进度" → dashboard<br>"审查代码" → validate</div><div class="mode-tag">38意图 + AI →</div></div><div class="mode-card m4" onclick="window.location.href='speccore-ask-pipeline.html'" style="cursor:pointer"><div class="mode-title"><span class="mode-icon">⚡</span>复杂编排</div><div class="mode-desc">"计划所有任务晚8点分批"<br>"做完分析→拆分→PR"</div><div class="mode-tag">Pipeline 引擎 →</div></div></div><div class="confirm-bar" onclick="window.location.href='speccore-ask-onboarding.html'">确认进入 · 输入 <code style="background:rgba(255,255,255,.2);padding:2px 8px;border-radius:4px">speccore ask "你的需求"</code> 开始</div><div class="section-title">📋 提示词库</div><div class="section" onclick="window.location.href='speccore-prompts.html'" style="cursor:pointer"><div style="display:flex;align-items:center;gap:10px"><span style="font-size:24px">🎯</span><div><div style="font-size:13px;font-weight:600;color:var(--cyan)">SpecCore 提示词库</div><div style="font-size:11px;color:var(--muted);margin-top:2px">31 个预置提示词,按场景分类,一键复制 AI 说法 / 触发命令</div></div><span style="margin-left:auto;color:var(--cyan);font-size:12px">→</span></div></div><div class="section-title">━━ 常用命令 ━━</div><div class="cmd-row"><span class="cmd-pill">speccore dashboard</span><span class="cmd-pill">speccore dev --auto</span><span class="cmd-pill">speccore ask "描述"</span><span class="cmd-pill">speccore graph query "订单"</span><span class="cmd-pill">speccore help</span></div><div class="footer">由 SpecCore 驱动 v8.3.152 · 2026-08-31</div></div></body></html>
|
|
@@ -8,6 +8,88 @@
|
|
|
8
8
|
#
|
|
9
9
|
# 本文件所有 value / selector 均为真实示例值,使用时替换为你的实际值即可。
|
|
10
10
|
# 选择器建议优先使用 data-testid(最稳定),其次 name / id,避免随机 class。
|
|
11
|
+
#
|
|
12
|
+
#
|
|
13
|
+
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
14
|
+
# 【重要】前端需要配合加 data-testid 吗?选择器怎么写最稳定?
|
|
15
|
+
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
16
|
+
#
|
|
17
|
+
# 问题: 像「点击保存按钮」这种操作,selector 写什么才不会因为前端改一下就失效?
|
|
18
|
+
#
|
|
19
|
+
# 稳定性排序(从高到低):
|
|
20
|
+
#
|
|
21
|
+
# 1. data-testid="xxx" ← 最稳定,专门给测试用的属性,前端不会随意改
|
|
22
|
+
# 前端写法: <button data-testid="save-profile-btn">保存</button>
|
|
23
|
+
# 测试写法: selector: '[data-testid="save-profile-btn"]'
|
|
24
|
+
#
|
|
25
|
+
# 2. id="xxx" / name="xxx" ← HTML 原生属性,较稳定,但可能有重复(name)
|
|
26
|
+
# 前端写法: <input id="username" name="username" />
|
|
27
|
+
# 测试写法: selector: '#username' 或 'input[name="username"]'
|
|
28
|
+
#
|
|
29
|
+
# 3. 稳定的 class ← 确保 class 名不会随构建变化
|
|
30
|
+
# 前端写法: <button class="save-btn primary">保存</button>
|
|
31
|
+
# 测试写法: selector: '.save-btn'
|
|
32
|
+
# ⚠️ 注意: 避免使用带随机后缀的 class(如 Vue scoped: .button__xx3a / React CSS Modules: .Button_module_abc123)
|
|
33
|
+
#
|
|
34
|
+
# 4. 文本内容定位 ← 当前端没给任何标识时的兜底方案
|
|
35
|
+
# 测试写法: selector: 'button:has-text("保存")' 或 'button >> text=保存'
|
|
36
|
+
# ⚠️ 注意: 多语言项目会失效,仅作兜底
|
|
37
|
+
#
|
|
38
|
+
# 5. 绝对不要用的 ← 这些选择器页面一改就失效
|
|
39
|
+
# ❌ div:nth-child(3) ← 布局变化就失效
|
|
40
|
+
# ❌ /html/body/div[1]/div[2] ← XPath 绝对路径
|
|
41
|
+
# ❌ .sc-xxx-123 ← styled-components 随机 class
|
|
42
|
+
# ❌ .v-xxx-456 ← Vue scoped CSS hash
|
|
43
|
+
# ❌ .Button_module_abc123 ← CSS Modules 随机 class
|
|
44
|
+
#
|
|
45
|
+
# 前端配合建议(最佳实践):
|
|
46
|
+
# 在关键交互元素上添加 data-testid,不影响业务逻辑,只用于测试:
|
|
47
|
+
# <input data-testid="login-username" name="username" />
|
|
48
|
+
# <input data-testid="login-password" type="password" />
|
|
49
|
+
# <button data-testid="login-submit">登录</button>
|
|
50
|
+
# <button data-testid="save-profile-btn">保存</button>
|
|
51
|
+
# <div data-testid="dashboard-container">...</div>
|
|
52
|
+
#
|
|
53
|
+
# 如果前端暂时不配合,测试脚本怎么写?
|
|
54
|
+
# 先用浏览器开发者工具(F12)→ Elements 面板 → 右键元素 → Copy → Copy selector
|
|
55
|
+
# 但复制出来的通常是绝对路径,不稳定。建议:
|
|
56
|
+
# 1. 优先找 name / id / 稳定的 class
|
|
57
|
+
# 2. 其次用属性选择器: [type="submit"] / [placeholder="请输入用户名"]
|
|
58
|
+
# 3. 最后才用层级组合: .form-group > button.primary
|
|
59
|
+
#
|
|
60
|
+
#
|
|
61
|
+
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
62
|
+
# 【重要】关于"需要登录的场景"怎么处理?
|
|
63
|
+
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
64
|
+
#
|
|
65
|
+
# 本文件场景1-9 是测试"登录功能本身"的,必须走完整的登录流程。
|
|
66
|
+
# 场景10-42 是测试"登录后的业务功能"(如个人资料、订单、购物车),这些场景默认已登录。
|
|
67
|
+
#
|
|
68
|
+
# 你有两种方式让"业务场景"拿到登录态:
|
|
69
|
+
#
|
|
70
|
+
# 方式A: Cookie/Token 注入(推荐,最简洁)
|
|
71
|
+
# 把「场景13: Token注入免登录」或「场景33: Cookie注入免登录」复制到业务场景前面,
|
|
72
|
+
# 作为第一个场景执行。注入后同一浏览器会话内后续场景共享登录态。
|
|
73
|
+
# 示例顺序:
|
|
74
|
+
# 1. Token注入免登录(注入 accessToken + refreshToken)
|
|
75
|
+
# 2. 个人资料修改
|
|
76
|
+
# 3. 商品列表浏览
|
|
77
|
+
# 4. 创建订单...
|
|
78
|
+
#
|
|
79
|
+
# 方式B: 每个业务场景自己注入(最独立,适合并行执行)
|
|
80
|
+
# 在每个需要登录的场景的 actions 开头加 cookie 或 localStorage 注入:
|
|
81
|
+
# actions:
|
|
82
|
+
# - type: localStorage
|
|
83
|
+
# selector: accessToken
|
|
84
|
+
# value: 'Bearer eyJhbGci...'
|
|
85
|
+
# - type: navigate
|
|
86
|
+
# value: /profile
|
|
87
|
+
#
|
|
88
|
+
# 方式C: 先执行登录场景,再执行业务场景(顺序依赖)
|
|
89
|
+
# 把「场景1: 账号密码登录」放第一个,登录成功后同一浏览器会话内后续场景共享登录态。
|
|
90
|
+
# 注意: 如果登录有验证码/短信,这种方式不稳定,建议用方式A。
|
|
91
|
+
#
|
|
92
|
+
# ⚠️ 每个 scenario 独立执行,但 cookie/localStorage 在同一浏览器会话内共享。
|
|
11
93
|
|
|
12
94
|
name: 示例项目冒烟测试
|
|
13
95
|
platform: h5-mobile
|
|
@@ -230,7 +312,14 @@ scenarios:
|
|
|
230
312
|
|
|
231
313
|
# ── 场景10: 修改个人资料 ──
|
|
232
314
|
# 说明: 修改昵称、性别、邮箱,点击保存
|
|
315
|
+
# ⚠️ 前置条件: 用户已登录。如需登录态,参考文件开头「方式A」把「场景13: Token注入」放第一个
|
|
233
316
|
# select 说明: value 填 option 的 value 属性(不是显示文本)
|
|
317
|
+
# 保存按钮 selector 写法示例(按稳定性排序):
|
|
318
|
+
# 1. '[data-testid="save-profile-btn"]' ← 最稳定,需前端配合添加 data-testid
|
|
319
|
+
# 2. '#save-profile-btn' ← 有 id 时用 id
|
|
320
|
+
# 3. '.save-profile-btn' ← 稳定的 class
|
|
321
|
+
# 4. 'button[type="submit"]' ← 页面只有一个提交按钮时可用
|
|
322
|
+
# 5. '.profile-form button:last-child' ← 兜底:表单内最后一个按钮
|
|
234
323
|
- name: 用户-修改个人资料
|
|
235
324
|
description: 模块:user 页面:/profile/edit
|
|
236
325
|
actions:
|
|
@@ -306,7 +395,8 @@ scenarios:
|
|
|
306
395
|
|
|
307
396
|
# ── 场景13: Token 注入免登录 ──
|
|
308
397
|
# 说明: 直接通过 localStorage 注入 JWT,跳过登录流程
|
|
309
|
-
#
|
|
398
|
+
# ⚠️ 核心用途: 作为「前置场景」放在业务场景(场景10-42)之前,为后续场景提供登录态
|
|
399
|
+
# 适用场景: 测试环境已有固定账号,不需重复测试登录。把这个场景放第一个,后面所有场景共享登录态
|
|
310
400
|
- name: 用户-Token注入免登录
|
|
311
401
|
description: 模块:user 页面:/profile Token注入方式
|
|
312
402
|
actions:
|
|
@@ -709,6 +799,7 @@ scenarios:
|
|
|
709
799
|
|
|
710
800
|
# ── 场景33: Cookie 注入免登录 ──
|
|
711
801
|
# 说明: 直接注入 session Cookie,跳过登录页,适合批量测试业务模块
|
|
802
|
+
# ⚠️ 核心用途: 作为「前置场景」放在业务场景(场景10-42)之前,为后续场景提供登录态
|
|
712
803
|
# 如何获取 Cookie: 在浏览器开发者工具 → Application → Cookies 中复制
|
|
713
804
|
- name: 通用-Cookie注入免登录
|
|
714
805
|
description: 模块:common Cookie注入跳过登录
|