scrum-skills 0.2.7 → 0.2.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/assets/board/200.html +1 -1
  2. package/assets/board/404.html +1 -1
  3. package/assets/board/_nuxt/{KxQggkNX.js → B2IHsbSE.js} +1 -1
  4. package/assets/board/_nuxt/{o_84IzFk.js → B6Iz-Z6W.js} +1 -1
  5. package/assets/board/_nuxt/{BaqGLZhY.js → B6vVYM-p.js} +1 -1
  6. package/assets/board/_nuxt/{Cplt7ZnK.js → B8DfudjI.js} +1 -1
  7. package/assets/board/_nuxt/{DrZpfjBq.js → BO6qoy1z.js} +1 -1
  8. package/assets/board/_nuxt/{DNtz8Ent.js → BPk90EtV.js} +1 -1
  9. package/assets/board/_nuxt/{D7ufz00d.js → BTUFQZje.js} +1 -1
  10. package/assets/board/_nuxt/{Dc4dIyTM.js → Bx4QbBZW.js} +1 -1
  11. package/assets/board/_nuxt/{b2JYbYKt.js → C0MJr2p5.js} +1 -1
  12. package/assets/board/_nuxt/{M6ZOYZ8R.js → C71fhlb8.js} +1 -1
  13. package/assets/board/_nuxt/{f1ditBVp.js → CCu-GrP6.js} +1 -1
  14. package/assets/board/_nuxt/{q6p4rsh_.js → CEL9RA0c.js} +1 -1
  15. package/assets/board/_nuxt/{jtompfyX.js → CJztj5jW.js} +1 -1
  16. package/assets/board/_nuxt/{DUhdM-rb.js → C_TkjLEl.js} +1 -1
  17. package/assets/board/_nuxt/{CKtAvtay.js → CbWqy_D-.js} +1 -1
  18. package/assets/board/_nuxt/{CyG4hsVv.js → CcuuI9Sq.js} +1 -1
  19. package/assets/board/_nuxt/{CqTxogVu.js → CdUK5KDt.js} +1 -1
  20. package/assets/board/_nuxt/{BfBP16Im.js → Cdq1mu9k.js} +1 -1
  21. package/assets/board/_nuxt/{wRPvhAJz.js → CgsIgLAl.js} +1 -1
  22. package/assets/board/_nuxt/{z40PaBW1.js → D-o97j5o.js} +1 -1
  23. package/assets/board/_nuxt/{CTK2Sysu.js → D2y4OEzn.js} +1 -1
  24. package/assets/board/_nuxt/{CMt3SL3m.js → D7I69gaq.js} +15 -15
  25. package/assets/board/_nuxt/{DOdi2wDw.js → DLGnIg-4.js} +1 -1
  26. package/assets/board/_nuxt/{BWgbICJ-.js → DZyjheFK.js} +1 -1
  27. package/assets/board/_nuxt/{CXCIZbbz.js → D_ozsr87.js} +1 -1
  28. package/assets/board/_nuxt/Dchb4IZl.js +2 -0
  29. package/assets/board/_nuxt/{BbaAxZ2N.js → DiNoFn-l.js} +1 -1
  30. package/assets/board/_nuxt/{CmyOKc3S.js → Dx9JzdjR.js} +1 -1
  31. package/assets/board/_nuxt/{BetRVCu6.js → DzYai7fG.js} +1 -1
  32. package/assets/board/_nuxt/{BscJTep0.js → SHOVXANq.js} +1 -1
  33. package/assets/board/_nuxt/{DgbDcd9I.js → SW1IUsvK.js} +1 -1
  34. package/assets/board/_nuxt/{Cti_rGPY.js → Yl0W9gdf.js} +1 -1
  35. package/assets/board/_nuxt/{BC0YsiYy.js → _Cm6pyB6.js} +1 -1
  36. package/assets/board/_nuxt/{CcYp6rwI.js → a79OLqPB.js} +1 -1
  37. package/assets/board/_nuxt/builds/latest.json +1 -1
  38. package/assets/board/_nuxt/builds/meta/db579fb7-3d7f-417a-ab2b-7c3e33c91a0b.json +1 -0
  39. package/assets/board/_nuxt/{entry.CqnxzTAU.css → entry.Dx3CNA--.css} +1 -1
  40. package/assets/board/_nuxt/{C5MtlISK.js → k704SI9z.js} +1 -1
  41. package/assets/board/_nuxt/last-change.D5qqZdbS.css +1 -0
  42. package/assets/board/burndown/index.html +1 -1
  43. package/assets/board/epics/index.html +1 -1
  44. package/assets/board/gantt/index.html +1 -1
  45. package/assets/board/index.html +1 -1
  46. package/assets/board/last-change/index.html +1 -1
  47. package/assets/board/milestones/index.html +1 -1
  48. package/docs/ai-assistant-guide.md +1008 -0
  49. package/package.json +1 -1
  50. package/assets/board/_nuxt/Cj8KbSzE.js +0 -2
  51. package/assets/board/_nuxt/builds/meta/88de87b9-e62d-4466-a908-66ef1b011538.json +0 -1
  52. package/assets/board/_nuxt/last-change.B59xu_sV.css +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "scrum-skills",
3
- "version": "0.2.7",
3
+ "version": "0.2.8",
4
4
  "description": "结构化敏捷开发管理 skills + CLI:AI 对话产出结构化敏捷数据,TDD 驱动实施,Nuxt 看板可视化",
5
5
  "type": "module",
6
6
  "keywords": [
@@ -1,2 +0,0 @@
1
- import{D as e,E as t,Ht as n,On as r,T as i,Zn as a,_ as o,b as s,bt as c,ct as l,er as ee,g as u,it as d,k as te,mt as f,o as p,qt as m,tr as h,tt as ne,u as re,v as g,vn as _,y as v}from"./DZo3dYLJ.js";import{w as ie}from"./51OWHj8c.js";import{t as ae}from"./CJ2mz0WY.js";import{t as oe}from"./DrZpfjBq.js";import{O as y,i as b,s as se}from"#entry";var ce={class:`rule-top`},le={class:`rule-ic`},ue={class:`rule-state`},de={class:`mono`},fe={key:0},pe={class:`rule-cases`},me={class:`case-when`},he={class:`case-then`},ge={key:1,class:`lc-hist-bar`},_e={class:`hist-badge`},ve={class:`hist-readonly mono`},ye=[`title`,`disabled`,`onClick`],be={key:2,class:`card lc-empty`},xe={class:`em-ic`},Se={key:3,class:`lc`},Ce={class:`lc-hero`},we={class:`hero-body`},Te={class:`hero-kicker`},Ee={class:`k-date mono`},De={key:0,class:`k-time mono`},Oe={key:1,class:`k-today`},ke=[`title`],Ae={class:`hero-title`},je={key:0,class:`hero-sum`},Me={class:`hero-meta`},x={class:`hero-aside`},Ne={class:`ring-in`},Pe={class:`card sec`},Fe={class:`s-hd`},Ie={class:`s-ic`},Le={class:`s-count`},Re={key:0,class:`sec-empty dim`},ze={key:1,class:`tbl-wrap`},Be={class:`tbl lc-tbl`},Ve={class:`ent`},He={class:`ent-top`},Ue={key:0,class:`ent-title`},We={key:0,class:`flow mono`},Ge={class:`fl`},Ke={class:`fl`},qe={class:`cell-note`},Je={class:`chips`},Ye=[`title`],Xe={key:0,class:`dim`},Ze={class:`two`},Qe={class:`card sec`},$e={class:`s-hd`},et={class:`s-ic`},tt={class:`s-count`},nt={class:`sec-bd lc-extras`},rt={key:0,class:`dim`},it={class:`x-body`},at={class:`x-title`},ot={key:0,class:`x-detail`},st={key:1,class:`chips x-files`},ct=[`title`],lt={class:`card sec`},ut={class:`s-hd`},dt={class:`s-ic tone-mint`},ft={class:`s-count`},pt={class:`sec-bd lc-checks`},mt={key:0,class:`dim`},ht={class:`v-body`},gt={class:`v-what`},_t={key:0,class:`v-detail`},vt={key:0,class:`card sec lc-access`},yt={class:`s-hd`},bt={class:`s-ic tone-sky`},xt={class:`sec-bd acc-grid`},St={key:0,class:`acc-col`},Ct={class:`u-head`},wt=[`href`],Tt={class:`u-label`},Et=[`onClick`],Dt={class:`u-url mono`},Ot={key:0,class:`u-note`},kt={key:1,class:`acc-col`},At={class:`a-head`},jt={key:0,class:`a-role`},Mt={class:`a-user mono`},Nt=[`onClick`],Pt={class:`a-line`},Ft={key:0,class:`a-pass mono`},It={key:1,class:`a-none dim`},Lt={key:0,class:`a-note`},Rt={key:1,class:`card sec lc-prep`},zt={class:`s-hd`},Bt={class:`s-ic tone-amber`},Vt={class:`s-count`},Ht={class:`steps`},Ut={class:`step-bd`},Wt={class:`step-text`},Gt={key:0,class:`cmd-row`},Kt={class:`cmd mono`},qt=[`onClick`],Jt={key:1,class:`step-note`},Yt={class:`lc-sc-sec`},Xt={class:`s-hd solo`},Zt={class:`s-ic tone-mint`},S={class:`s-count`},Qt={key:0,class:`dim sec-empty`},$t={key:1,class:`lc-sc-grid`},en={class:`sc-hd`},tn={class:`sc-id mono`},nn={class:`sc-title`},rn={key:0,class:`sc-body`},an={class:`lc-sc-steps`},on={class:`sc-acc`},sn={class:`sc-acc-h`},cn={class:`sc-acc-t`},ln={key:0,class:`sc-foot`},un={key:0},dn={key:1,class:`sc-ids`},fn={class:`two`},pn={class:`card sec`},mn={class:`s-hd`},hn={class:`s-ic`},gn={class:`sec-bd`},_n={key:0,class:`dim`},vn={key:1,class:`lc-notes`},yn={key:0,class:`card sec sec-warn`},bn={class:`s-hd`},xn={class:`s-ic`},Sn={class:`s-count`},Cn={class:`sec-bd`},wn={class:`lc-notes warn`},Tn={class:`lc-hist`,role:`dialog`,"aria-modal":`true`,"aria-labelledby":`lc-hist-title`},En={class:`lc-hist-hd`},Dn={class:`lc-hist-hd-txt`},On={class:`lc-hist-sub`},kn={key:0,class:`lc-hist-err`},An={key:1,class:`lc-hist-hint dim`},jn={key:2,class:`lc-hist-list`},Mn=[`disabled`,`onClick`],Nn={class:`hist-item-main`},Pn={class:`mono`},Fn={class:`mono hist-item-hash`},In={key:0,class:`lc-hist-hint dim`},Ln={class:`lc-hist-ft`},C=b(te({__name:`last-change`,setup(te){let{lastChange:b,lastChangeGit:C}=se(),w=_(null),T=u(()=>w.value?.doc?.lastChange??b.value),E=u(()=>C.value),D=_([]),O=_(!1),k=_(!1),A=_(``),j=_(!1),Rn=u(()=>w.value?[w.value]:[]);async function zn(){if(!k.value){k.value=!0,A.value=``;try{let e=await y(`/api/agile/last-change/history`);D.value=e.entries??[]}catch(e){A.value=e?.data?.error||e?.message||`读不到 git 历史`}finally{k.value=!1}}}async function M(){O.value=!0,D.value.length||await zn()}async function N(e){if(!j.value){j.value=!0,A.value=``;try{w.value=await y(`/api/agile/last-change/revision`,{query:{hash:e.hash}}),O.value=!1,window.scrollTo({top:0,behavior:`smooth`})}catch(e){A.value=e?.data?.error||e?.message||`取不到这个版本`}finally{j.value=!1}}}function Bn(){w.value=null,window.scrollTo({top:0,behavior:`smooth`})}let P=_(null);n(w,async()=>{await ne(),P.value?.querySelector(`.hist-tab.on`)?.scrollIntoView({inline:`nearest`,block:`nearest`})});function F(e){e.key===`Escape`&&O.value&&(O.value=!1)}l(()=>window.addEventListener(`keydown`,F)),d(()=>window.removeEventListener(`keydown`,F));let I={committed:{text:`已提交`,tone:`ok`},dirty:{text:`未提交改动`,tone:`warn`},untracked:{text:`未纳入版本库`,tone:`warn`},"no-git":{text:`非 git 仓库`,tone:`neutral`},missing:{text:`尚未生成`,tone:`neutral`}},L=u(()=>I[E.value?.state??`missing`]??I.missing),Vn=[{key:`committed`,when:`已提交`,then:`下次写入整份覆盖;上一版留在 git 历史里,点「查看历史」随时翻回来`},{key:`pending`,when:`未提交`,then:`下次写入合并:新交付接在旧记录后面,不冲掉还没入库的内容`}],Hn=u(()=>{let e=E.value?.state;return e===`committed`?`committed`:e===`dirty`||e===`untracked`||e===`no-git`?`pending`:``}),Un=u(()=>(T.value?.mergedFrom?.length??0)+1),Wn=u(()=>(T.value?.mergedFrom??[]).map(e=>`${e.at??``} ${e.title??``}`.trim()).filter(Boolean).join(`
2
- `)),Gn={added:`新增`,updated:`状态变更`,removed:`移除`},Kn={story:`故事`,task:`任务`},qn={pass:`通过`,fail:`失败`,partial:`部分`,skipped:`未跑`},Jn={pass:`i-lucide-check`,fail:`i-lucide-x`,partial:`i-lucide-minus`,skipped:`i-lucide-minus`},R=u(()=>T.value?.changes??[]),z=u(()=>T.value?.extras??[]),B=u(()=>T.value?.verification??[]),V=u(()=>T.value?.scenarios??[]),H=u(()=>T.value?.preparation??[]),U=u(()=>T.value?.notes??[]),W=u(()=>T.value?.open??[]),G=u(()=>T.value?.access?.urls??[]),K=u(()=>T.value?.access?.accounts??[]),q=u(()=>B.value.filter(e=>e.result===`pass`).length),J=u(()=>B.value.length>0&&q.value===B.value.length),Yn=u(()=>B.value.length?Math.round(q.value/B.value.length*100):0),Xn=u(()=>[...new Set([...R.value.flatMap(e=>e.files??[]),...z.value.flatMap(e=>e.files??[])])]),Zn=e=>e.kind===`story`?e.id:e.id.replace(/-T\d+$/,``),Y=new Date,Qn=`${Y.getFullYear()}-${String(Y.getMonth()+1).padStart(2,`0`)}-${String(Y.getDate()).padStart(2,`0`)}`,X=u(()=>(T.value?.at??``).slice(0,10)),Z=u(()=>{let e=(T.value?.at??``).slice(10).replace(/^[T ]/,``);return/^\d{2}:\d{2}/.test(e)?e:``}),$n=u(()=>!!X.value&&X.value===Qn),Q=_(``);async function $(e,t){try{await navigator.clipboard.writeText(e),Q.value=t,setTimeout(()=>{Q.value===t&&(Q.value=``)},1600)}catch{Q.value=``}}return(n,l)=>{let u=oe,d=ae;return f(),s(p,null,[r(w)?(f(),s(`div`,ge,[o(`span`,_e,[e(u,{name:`i-lucide-history`,class:`hist-badge-ic`}),l[7]||=t(`历史版本`,-1)]),o(`span`,ve,[t(`只读 · `+h(r(w).short),1),r(w).date?(f(),s(p,{key:0},[t(` · `+h(r(w).date),1)],64)):v(``,!0)]),o(`div`,{ref_key:`tabsRef`,ref:P,class:`lc-hist-tabs`},[o(`button`,{class:`hist-tab`,onClick:Bn},`最新`),(f(!0),s(p,null,c(r(Rn),e=>(f(),s(`button`,{key:e.hash,class:a([`hist-tab`,{on:r(w)?.hash===e.hash}]),title:`${e.date} ${e.subject??``}`,disabled:r(j),onClick:t=>N(e)},[t(h(e.short),1),o(`i`,null,h(e.date.slice(5,16)),1)],10,ye))),128))],512),o(`button`,{class:`rule-btn`,onClick:M},[e(u,{name:`i-lucide-list`,class:`rule-btn-ic`}),l[8]||=t(`选择历史…`,-1)])])):(f(),s(`div`,{key:0,class:a([`lc-rule`,`is-${r(L).tone}`])},[o(`div`,ce,[o(`span`,le,[e(u,{name:`i-lucide-git-branch`,class:`rule-svg`})]),l[5]||=o(`b`,{class:`rule-title`},`写入规则`,-1),l[6]||=o(`span`,{class:`rule-file mono`},`agile/last-change.json`,-1),o(`span`,ue,[o(`i`,{class:a([`rule-dot`,`tone-${r(L).tone}`])},null,2),t(` 当前 `+h(r(L).text),1),r(E)?.state===`committed`&&r(E).hash?(f(),s(p,{key:0},[l[3]||=t(` · `,-1),o(`span`,de,h(r(E).hash),1)],64)):v(``,!0)]),o(`button`,{class:`rule-btn`,onClick:M},[e(u,{name:`i-lucide-history`,class:`rule-btn-ic`}),l[4]||=t(`查看历史 `,-1),r(D).length?(f(),s(`i`,fe,h(r(D).length),1)):v(``,!0)])]),o(`ul`,pe,[(f(),s(p,null,c(Vn,t=>o(`li`,{key:t.key,class:a([`rule-case`,{on:r(Hn)===t.key}])},[o(`span`,me,h(t.when),1),e(u,{name:`i-lucide-arrow-right`,class:`case-arrow`}),o(`span`,he,h(t.then),1)],2)),64))])],2)),r(T)?(f(),s(`div`,Se,[o(`header`,Ce,[o(`div`,we,[o(`p`,Te,[l[10]||=o(`span`,{class:`k-dot`},null,-1),l[11]||=t(`最近一次交付 `,-1),l[12]||=o(`span`,{class:`k-sep`},null,-1),o(`span`,Ee,h(r(X)),1),r(Z)?(f(),s(`span`,De,h(r(Z)),1)):v(``,!0),r($n)?(f(),s(`span`,Oe,`今天`)):v(``,!0),r(T).merged?(f(),s(`span`,{key:2,class:`k-merged`,title:r(Wn)},`合并记录 · `+h(r(Un))+` 次交付`,9,ke)):v(``,!0)]),o(`h2`,Ae,h(r(T).title),1),r(T).summary?(f(),s(`p`,je,h(r(T).summary),1)):v(``,!0),o(`div`,Me,[o(`span`,null,[o(`b`,null,h(r(R).length),1),l[13]||=t(` 处变更`,-1)]),l[18]||=o(`i`,{class:`meta-sep`},null,-1),o(`span`,null,[o(`b`,null,h(r(Xn).length),1),l[14]||=t(` 个文件`,-1)]),l[19]||=o(`i`,{class:`meta-sep`},null,-1),o(`span`,null,[o(`b`,null,h(r(V).length),1),l[15]||=t(` 条测试场景`,-1)]),r(z).length?(f(),s(p,{key:0},[l[17]||=o(`i`,{class:`meta-sep`},null,-1),o(`span`,null,[o(`b`,null,h(r(z).length),1),l[16]||=t(` 项额外工作`,-1)])],64)):v(``,!0)])]),o(`div`,x,[o(`div`,{class:a([`ring`,{warn:r(B).length&&!r(J)}]),style:ee({"--pct":r(Yn)})},[o(`div`,Ne,[o(`b`,null,[t(h(r(q)),1),o(`small`,null,`/`+h(r(B).length||0),1)]),o(`span`,null,h(r(B).length?r(J)?`验证全通过`:`有未通过项`:`无验证记录`),1)])],6)])]),o(`section`,Pe,[o(`div`,Fe,[o(`span`,Ie,[e(u,{name:`i-lucide-git-commit-horizontal`,class:`s-svg`})]),l[20]||=o(`h2`,{class:`s-title`},`变更清单`,-1),o(`span`,Le,h(r(R).length),1),l[21]||=o(`span`,{class:`s-hint`},`故事与任务各自是新增还是状态变更、动过哪些文件`,-1)]),r(R).length?(f(),s(`div`,ze,[o(`table`,Be,[l[23]||=o(`colgroup`,null,[o(`col`,{class:`c-ent`}),o(`col`,{class:`c-act`}),o(`col`),o(`col`,{class:`c-file`})],-1),l[24]||=o(`thead`,null,[o(`tr`,null,[o(`th`,null,`条目`),o(`th`,null,`变更`),o(`th`,null,`变更内容`),o(`th`,null,`涉及文件`)])],-1),o(`tbody`,null,[(f(!0),s(p,null,c(r(R),(n,r)=>(f(),s(`tr`,{key:`${n.kind}-${n.id}-${r}`},[o(`td`,null,[o(`div`,Ve,[o(`div`,He,[o(`span`,{class:a([`kind`,`kind-${n.kind}`])},h(Kn[n.kind]??n.kind),3),e(d,{to:`/story/${Zn(n)}`,class:`ent-id mono`},{default:m(()=>[t(h(n.id),1)]),_:2},1032,[`to`])]),n.title?(f(),s(`p`,Ue,h(n.title),1)):v(``,!0)])]),o(`td`,null,[o(`span`,{class:a([`act`,`act-${n.action}`])},h(Gn[n.action]??n.action),3),n.from||n.to?(f(),s(`p`,We,[o(`span`,Ge,h(n.from??`—`),1),l[22]||=o(`i`,null,`→`,-1),o(`span`,Ke,h(n.to??`—`),1)])):v(``,!0)]),o(`td`,qe,h(n.note??`—`),1),o(`td`,null,[o(`div`,Je,[(f(!0),s(p,null,c(n.files,e=>(f(),s(`span`,{key:e,class:`fchip mono`,title:e},h(e),9,Ye))),128)),n.files?.length?v(``,!0):(f(),s(`span`,Xe,`—`))])])]))),128))])])])):(f(),s(`p`,Re,`这次没有涉及任何故事或任务。`))]),o(`div`,Ze,[o(`section`,Qe,[o(`div`,$e,[o(`span`,et,[e(u,{name:`i-lucide-sparkles`,class:`s-svg`})]),l[25]||=o(`h2`,{class:`s-title`},`额外做的事`,-1),o(`span`,tt,h(r(z).length),1)]),o(`div`,nt,[r(z).length?v(``,!0):(f(),s(`p`,rt,`没有计划外的改动。`)),(f(!0),s(p,null,c(r(z),(e,t)=>(f(),s(`article`,{key:t,class:`x-item`},[l[26]||=o(`span`,{class:`x-mark`},null,-1),o(`div`,it,[o(`p`,at,h(e.title),1),e.detail?(f(),s(`p`,ot,h(e.detail),1)):v(``,!0),e.files?.length?(f(),s(`div`,st,[(f(!0),s(p,null,c(e.files,e=>(f(),s(`span`,{key:e,class:`fchip mono`,title:e},h(e),9,ct))),128))])):v(``,!0)])]))),128))])]),o(`section`,lt,[o(`div`,ut,[o(`span`,dt,[e(u,{name:`i-lucide-badge-check`,class:`s-svg`})]),l[27]||=o(`h2`,{class:`s-title`},`验证结果`,-1),o(`span`,ft,h(r(q))+`/`+h(r(B).length),1)]),o(`div`,pt,[r(B).length?v(``,!0):(f(),s(`p`,mt,`这次没有留下验证记录。`)),(f(!0),s(p,null,c(r(B),(t,n)=>(f(),s(`div`,{key:n,class:`v-item`},[o(`span`,{class:a([`v-ic`,`v-${t.result}`])},[e(u,{name:Jn[t.result]??`i-lucide-circle`,class:`v-svg`},null,8,[`name`])],2),o(`div`,ht,[o(`p`,gt,h(t.what),1),t.detail?(f(),s(`p`,_t,h(t.detail),1)):v(``,!0)]),o(`span`,{class:a([`v-res`,`v-${t.result}`])},h(qn[t.result]??t.result),3)]))),128))])])]),r(G).length||r(K).length?(f(),s(`section`,vt,[o(`div`,yt,[o(`span`,bt,[e(u,{name:`i-lucide-key-round`,class:`s-svg`})]),l[28]||=o(`h2`,{class:`s-title`},`调试入口与账号`,-1),l[29]||=o(`span`,{class:`s-hint`},`照着这一栏就能自己跑起来点一遍`,-1)]),o(`div`,xt,[r(G).length?(f(),s(`div`,St,[l[30]||=o(`p`,{class:`micro`},`访问地址`,-1),(f(!0),s(p,null,c(r(G),(n,i)=>(f(),s(`div`,{key:i,class:`u-item`},[o(`div`,Ct,[o(`a`,{href:n.url,target:`_blank`,rel:`noreferrer`,class:`u-link`},[o(`span`,Tt,h(n.label??`入口`),1),e(u,{name:`i-lucide-arrow-up-right`,class:`u-go`})],8,wt),o(`button`,{class:a([`cpy`,{ok:r(Q)===`url-${i}`}]),onClick:e=>$(n.url,`url-${i}`)},[e(u,{name:r(Q)===`url-${i}`?`i-lucide-check`:`i-lucide-copy`,class:`cpy-ic`},null,8,[`name`]),t(` `+h(r(Q)===`url-${i}`?`已复制`:`复制`),1)],10,Et)]),o(`p`,Dt,h(n.url),1),n.note?(f(),s(`p`,Ot,h(n.note),1)):v(``,!0)]))),128))])):v(``,!0),r(K).length?(f(),s(`div`,kt,[l[32]||=o(`p`,{class:`micro`},`账号密码`,-1),(f(!0),s(p,null,c(r(K),(n,i)=>(f(),s(`div`,{key:i,class:`a-item`},[o(`div`,At,[n.role?(f(),s(`span`,jt,h(n.role),1)):v(``,!0),o(`span`,Mt,h(n.username),1),o(`button`,{class:a([`cpy`,{ok:r(Q)===`acc-${i}`}]),onClick:e=>$(n.password?`账号:${n.username}\n密码:${n.password}`:n.username,`acc-${i}`)},[e(u,{name:r(Q)===`acc-${i}`?`i-lucide-check`:`i-lucide-copy`,class:`cpy-ic`},null,8,[`name`]),t(` `+h(r(Q)===`acc-${i}`?`已复制`:`复制`),1)],10,Nt)]),o(`div`,Pt,[l[31]||=o(`span`,{class:`a-key`},`密码`,-1),n.password?(f(),s(`span`,Ft,h(n.password),1)):(f(),s(`span`,It,`无密码 / 走单点登录`))]),n.note?(f(),s(`p`,Lt,h(n.note),1)):v(``,!0)]))),128))])):v(``,!0)])])):v(``,!0),r(H).length?(f(),s(`section`,Rt,[o(`div`,zt,[o(`span`,Bt,[e(u,{name:`i-lucide-terminal-square`,class:`s-svg`})]),l[33]||=o(`h2`,{class:`s-title`},`测试前准备`,-1),o(`span`,Vt,h(r(H).length),1),l[34]||=o(`span`,{class:`s-hint`},`按顺序做完这些再开始点,命令可直接复制`,-1)]),o(`ol`,Ht,[(f(!0),s(p,null,c(r(H),(n,i)=>(f(),s(`li`,{key:i},[o(`div`,Ut,[o(`p`,Wt,h(n.step),1),n.command?(f(),s(`div`,Gt,[o(`code`,Kt,h(n.command),1),o(`button`,{class:a([`cpy`,{ok:r(Q)===`cmd-${i}`}]),onClick:e=>$(n.command??``,`cmd-${i}`)},[e(u,{name:r(Q)===`cmd-${i}`?`i-lucide-check`:`i-lucide-copy`,class:`cpy-ic`},null,8,[`name`]),t(` `+h(r(Q)===`cmd-${i}`?`已复制`:`复制`),1)],10,qt)])):v(``,!0),n.note?(f(),s(`p`,Jt,h(n.note),1)):v(``,!0)])]))),128))])])):v(``,!0),o(`section`,Yt,[o(`div`,Xt,[o(`span`,Zt,[e(u,{name:`i-lucide-flask-conical`,class:`s-svg`})]),l[35]||=o(`h2`,{class:`s-title`},`测试场景`,-1),o(`span`,S,h(r(V).length),1),l[36]||=o(`span`,{class:`s-hint`},`一条一段:照着步骤走,末尾那句就是验收标准`,-1)]),r(V).length?(f(),s(`div`,$t,[(f(!0),s(p,null,c(r(V),(n,r)=>(f(),s(`article`,{key:n.id??r,class:`sc lc-sc`},[o(`header`,en,[o(`span`,tn,h(n.id??`TC-${r+1}`),1),o(`h3`,nn,h(n.title),1)]),n.steps?.length?(f(),s(`div`,rn,[l[37]||=o(`p`,{class:`micro`},`测试步骤`,-1),o(`ol`,an,[(f(!0),s(p,null,c(n.steps,(e,t)=>(f(),s(`li`,{key:t},h(e),1))),128))])])):v(``,!0),o(`div`,on,[o(`p`,sn,[e(u,{name:`i-lucide-badge-check`,class:`sc-acc-ic`}),l[38]||=t(`验收标准`,-1)]),o(`p`,cn,h(n.expect),1),n.acceptance||n.storyIds?.length?(f(),s(`div`,ln,[n.acceptance?(f(),s(`span`,un,`对应验收:`+h(n.acceptance),1)):v(``,!0),n.storyIds?.length?(f(),s(`span`,dn,[(f(!0),s(p,null,c(n.storyIds,e=>(f(),g(d,{key:e,to:`/story/${e}`,class:`ent-id mono`},{default:m(()=>[t(h(e),1)]),_:2},1032,[`to`]))),128))])):v(``,!0)])):v(``,!0)])]))),128))])):(f(),s(`p`,Qt,`这次没有单独列测试场景。`))]),o(`div`,fn,[o(`section`,pn,[o(`div`,mn,[o(`span`,hn,[e(u,{name:`i-lucide-message-square-more`,class:`s-svg`})]),l[39]||=o(`h2`,{class:`s-title`},`说明`,-1)]),o(`div`,gn,[r(U).length?(f(),s(`ul`,vn,[(f(!0),s(p,null,c(r(U),(e,t)=>(f(),s(`li`,{key:t},h(e),1))),128))])):(f(),s(`p`,_n,`没有额外说明。`))])]),r(W).length?(f(),s(`section`,yn,[o(`div`,bn,[o(`span`,xn,[e(u,{name:`i-lucide-list-todo`,class:`s-svg`})]),l[40]||=o(`h2`,{class:`s-title`},`还没做的`,-1),o(`span`,Sn,h(r(W).length),1)]),o(`div`,Cn,[o(`ul`,wn,[(f(!0),s(p,null,c(r(W),(e,t)=>(f(),s(`li`,{key:t},h(e),1))),128))])])])):v(``,!0)])])):(f(),s(`div`,be,[o(`span`,xe,[e(u,{name:`i-lucide-clipboard-list`,class:`em-svg`})]),l[9]||=i(`<h2 class="em-title" data-v-777e3d28>还没有交付记录</h2><p class="em-sub" data-v-777e3d28> 每完成一项功能,AI 都要把「改了哪些故事与任务、额外做了什么、验了什么、怎么测」 写进下面这个文件,这一页就会自动排出来。 </p><p class="em-path mono" data-v-777e3d28>agile/last-change.json</p><p class="em-note" data-v-777e3d28> 每次只保留最近一次(覆盖写,不追加)· 格式见 <span class="mono" data-v-777e3d28>.agents/skills/scrum-planning/references/schema.md</span> 第 4 节 </p>`,4)])),(f(),g(re,{to:`body`},[r(O)?(f(),s(`div`,{key:0,class:`lc-hist-mask`,onClick:l[2]||=ie(e=>O.value=!1,[`self`])},[o(`div`,Tn,[o(`header`,En,[o(`div`,Dn,[l[44]||=o(`h3`,{id:`lc-hist-title`,class:`lc-hist-title`},`历史版本`,-1),o(`p`,On,[l[41]||=t(` 从 git 里读 `,-1),l[42]||=o(`span`,{class:`mono`},`agile/last-change.json`,-1),l[43]||=t(` 的提交记录 `,-1),r(D).length?(f(),s(p,{key:0},[t(`· 共 `+h(r(D).length)+` 版`,1)],64)):v(``,!0)])]),o(`button`,{class:`lc-hist-x`,"aria-label":`关闭`,onClick:l[0]||=e=>O.value=!1},[e(u,{name:`i-lucide-x`,class:`lc-hist-x-ic`})])]),r(A)?(f(),s(`p`,kn,h(r(A)),1)):r(k)?(f(),s(`div`,An,`正在读 git 历史…`)):(f(),s(`div`,jn,[(f(!0),s(p,null,c(r(D),(e,t)=>(f(),s(`button`,{key:e.hash,class:a([`hist-item`,{on:r(w)?.hash===e.hash}]),disabled:r(j),onClick:t=>N(e)},[o(`span`,{class:a([`hist-item-dot`,{live:t===0}])},null,2),o(`span`,Nn,[o(`b`,null,h(e.subject||`(没有提交说明)`),1),o(`i`,Pn,h(e.date),1)]),o(`span`,Fn,h(e.short),1)],10,Mn))),128)),r(D).length?v(``,!0):(f(),s(`p`,In,` 这个文件还没有提交记录 —— 先 commit 一次,历史里才会出现版本。 `))])),o(`footer`,Ln,[l[45]||=o(`span`,{class:`dim`},`选一个版本即可在页面上只读查看,不会改动文件。`,-1),o(`button`,{class:`hist-close`,onClick:l[1]||=e=>O.value=!1},`关闭`)])])])):v(``,!0)]))],64)}}}),[[`__scopeId`,`data-v-777e3d28`]]);export{C as default};
@@ -1 +0,0 @@
1
- {"id":"88de87b9-e62d-4466-a908-66ef1b011538","timestamp":1793101797289,"prerendered":[]}
@@ -1 +0,0 @@
1
- .lc[data-v-777e3d28]{gap:14px;display:grid}.lc-rule[data-v-777e3d28]{border:1px solid var(--line);box-shadow:var(--shadow-1);background:linear-gradient(#fbfaff,#fff);border-radius:14px;gap:7px;margin-bottom:14px;padding:10px 13px 11px;display:grid}.rule-top[data-v-777e3d28]{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.rule-ic[data-v-777e3d28]{border:1px solid var(--violet-line);background:var(--violet-soft);width:26px;height:26px;color:var(--violet-ink);border-radius:9px;flex:none;place-items:center;display:grid}.rule-svg[data-v-777e3d28]{width:14px;height:14px}.rule-title[data-v-777e3d28]{letter-spacing:.01em;color:var(--ink);font-size:12px;font-weight:680}.rule-file[data-v-777e3d28]{color:var(--ink-4);font-size:10px}.rule-state[data-v-777e3d28]{border:1px solid var(--line-2);height:22px;color:var(--ink-2);white-space:nowrap;background:#fff;border-radius:999px;align-items:center;gap:5px;margin-left:auto;padding:0 9px;font-size:10.4px;font-weight:640;display:inline-flex}.rule-state .mono[data-v-777e3d28]{color:var(--ink-3);font-size:9.8px;font-weight:560}.rule-dot[data-v-777e3d28]{background:var(--ink-4);border-radius:999px;flex:none;width:6px;height:6px}.rule-dot.tone-ok[data-v-777e3d28]{background:#74a53c;box-shadow:0 0 0 3px #74a53c24}.rule-dot.tone-warn[data-v-777e3d28]{background:#d79a2b;box-shadow:0 0 0 3px #d79a2b24}.rule-dot.tone-neutral[data-v-777e3d28]{background:#b3b1aa;box-shadow:0 0 0 3px #b3b1aa24}.rule-cases[data-v-777e3d28]{gap:3px;margin:0;padding:0;list-style:none;display:grid}.rule-case[data-v-777e3d28]{color:var(--ink-3);border:1px solid #0000;border-radius:9px;align-items:baseline;gap:7px;padding:4px 9px;font-size:11.2px;line-height:1.55;display:flex}.rule-case.on[data-v-777e3d28]{color:var(--ink-2);background:var(--sunken)}.case-when[data-v-777e3d28]{flex:none;min-width:40px;font-weight:680}.rule-case.on .case-when[data-v-777e3d28]{color:var(--ink)}.case-arrow[data-v-777e3d28]{width:11px;height:11px;color:var(--ink-4);flex:none;align-self:center}.rule-case.on .case-arrow[data-v-777e3d28]{color:var(--ink-3)}.case-then[data-v-777e3d28],.hero-body[data-v-777e3d28],.two[data-v-777e3d28]>*{min-width:0}.is-ok .rule-ic[data-v-777e3d28]{color:#4f6f24;background:#f0fbdf;border-color:#dcf0bb}.is-ok .rule-case.on[data-v-777e3d28]{background:#f4fbea;border-color:#dcf0bb}.is-warn .rule-ic[data-v-777e3d28]{color:#8a6116;background:#fdf4e2;border-color:#f3e2b8}.is-warn .rule-case.on[data-v-777e3d28]{background:#fdf6e8;border-color:#f3e2b8}.sec[data-v-777e3d28]{border-radius:20px;overflow:hidden}.two[data-v-777e3d28]{flex-wrap:wrap;align-items:stretch;gap:14px;display:flex}.two[data-v-777e3d28]>*{flex:336px}.s-hd[data-v-777e3d28]{align-items:center;gap:9px;padding:13px 18px 12px;display:flex}.s-hd.solo[data-v-777e3d28]{padding:2px 2px 0}.s-ic[data-v-777e3d28]{border:1px solid var(--violet-line);background:var(--violet-soft);width:26px;height:26px;color:var(--violet-ink);border-radius:9px;flex:none;place-items:center;display:grid}.s-ic.tone-mint[data-v-777e3d28]{color:#4f6f24;background:#f0fbdf;border-color:#dcf0bb}.s-ic.tone-amber[data-v-777e3d28]{color:#8a6116;background:#fdf4e2;border-color:#f3e2b8}.s-ic.tone-sky[data-v-777e3d28]{color:#2c5f96;background:#eef5fd;border-color:#d7e6f9}.s-svg[data-v-777e3d28]{width:14px;height:14px}.s-title[data-v-777e3d28]{letter-spacing:-.012em;white-space:nowrap;font-size:14px;font-weight:650}.s-count[data-v-777e3d28]{border:1px solid var(--line-2);background:var(--sunken);color:var(--ink-3);border-radius:999px;flex:none;padding:0 6px;font-size:10px;font-weight:660;line-height:16px}.s-hint[data-v-777e3d28]{color:var(--ink-4);text-align:right;margin-left:auto;font-size:11px}.sec-bd[data-v-777e3d28],.sec-empty[data-v-777e3d28]{padding:0 18px 16px}.sec-empty[data-v-777e3d28]{font-size:12px}.micro[data-v-777e3d28]{letter-spacing:.1em;text-transform:uppercase;color:var(--ink-4);font-size:9.6px;font-weight:660}.lc-hero[data-v-777e3d28]{isolation:isolate;background:radial-gradient(120% 150% at 0 0,#fdfbff,#fff0 52%),radial-gradient(100% 140% at 100% 110%,#ece1ff,#ece1ff00 60%),linear-gradient(152deg,#f8f4ff,#f1eaff 64%,#faf7ff);border:1px solid #e6dcfb;border-radius:24px;align-items:center;gap:26px;padding:20px 22px;display:flex;position:relative;overflow:hidden}.lc-hero[data-v-777e3d28]:after{content:"";filter:blur(6px);z-index:-1;background:radial-gradient(circle,#8b68f229,#8b68f200 70%);border-radius:50%;width:240px;height:240px;position:absolute;bottom:-90px;right:-70px}.hero-body[data-v-777e3d28]{flex:1}.hero-kicker[data-v-777e3d28]{letter-spacing:.1em;text-transform:uppercase;color:#7a63b8;align-items:center;gap:8px;font-size:10px;font-weight:680;display:flex}.k-dot[data-v-777e3d28]{background:var(--violet);border-radius:999px;width:6px;height:6px;box-shadow:0 0 0 3px #6d4ff024}.k-sep[data-v-777e3d28]{background:#dbd0f6;width:1px;height:10px}.k-date[data-v-777e3d28]{text-transform:none;color:#6f5aa8;font-size:10.6px;font-weight:600}.k-date[data-v-777e3d28],.k-time[data-v-777e3d28]{letter-spacing:.02em}.k-time[data-v-777e3d28]{color:var(--ink-3);font-variant-numeric:tabular-nums;align-items:center;gap:5px;font-size:10.4px;font-weight:620;display:inline-flex}.k-time[data-v-777e3d28]:before{content:"";background:#c9bce6;border-radius:999px;width:3px;height:3px}.k-today[data-v-777e3d28]{border:1px solid var(--violet-line);letter-spacing:.06em;color:var(--violet-ink);background:#fff}.k-merged[data-v-777e3d28],.k-today[data-v-777e3d28]{border-radius:999px;padding:0 6px;font-size:9.4px;line-height:15px}.k-merged[data-v-777e3d28]{color:#8a6116;letter-spacing:.03em;text-transform:none;cursor:help;background:#fdf4e2;border:1px solid #f3e2b8}.hero-title[data-v-777e3d28]{letter-spacing:-.026em;color:#241b3f;margin:9px 0 0;font-size:21px;font-weight:665;line-height:1.34}.hero-sum[data-v-777e3d28]{color:#574c72;max-width:92ch;margin-top:7px;font-size:12.8px;line-height:1.68}.hero-meta[data-v-777e3d28]{color:#6b5f85;flex-wrap:wrap;align-items:center;gap:11px;margin-top:13px;font-size:11.4px;display:flex}.hero-meta b[data-v-777e3d28]{color:#2c2246;margin-right:2px;font-weight:690}.meta-sep[data-v-777e3d28]{background:#c3b4e2;border-radius:999px;width:3px;height:3px}.hero-aside[data-v-777e3d28]{flex:none;justify-items:center;display:grid}.ring[data-v-777e3d28]{--pct:0;background:conic-gradient(from -90deg,#7f5cf2 calc(var(--pct) * 1%),#e7dffa 0);border-radius:50%;place-items:center;width:98px;height:98px;display:grid;box-shadow:0 10px 26px -18px #5836ba8c}.ring.warn[data-v-777e3d28]{background:conic-gradient(from -90deg,#dfa437 calc(var(--pct) * 1%),#f4e8d2 0)}.ring-in[data-v-777e3d28]{text-align:center;background:#fff;border-radius:50%;place-content:center;gap:1px;width:78px;height:78px;display:grid}.ring-in b[data-v-777e3d28]{letter-spacing:-.03em;color:#2a1f47;font-size:17px;font-weight:680;line-height:1.15}.ring-in b small[data-v-777e3d28]{letter-spacing:0;color:var(--ink-4);font-size:10.5px;font-weight:600}.ring-in span[data-v-777e3d28]{letter-spacing:.04em;color:var(--ink-3);white-space:nowrap;font-size:9.2px}.tbl-wrap[data-v-777e3d28]{padding:0 8px 8px;overflow-x:auto}.lc-tbl[data-v-777e3d28]{min-width:640px}.lc-tbl .c-ent[data-v-777e3d28]{width:246px}.lc-tbl .c-act[data-v-777e3d28]{width:92px}.lc-tbl .c-file[data-v-777e3d28]{width:218px}.lc-tbl thead th[data-v-777e3d28]{border-bottom:1px solid var(--line);letter-spacing:.1em;padding:6px 12px 8px;font-size:9.4px;font-weight:660}.lc-tbl tbody tr[data-v-777e3d28]{cursor:default}.lc-tbl tbody td[data-v-777e3d28]{border-top:0;border-bottom:1px solid var(--line);vertical-align:top;padding:11px 12px 12px}.lc-tbl tbody tr:last-child td[data-v-777e3d28]{border-bottom:0}.lc-tbl tbody tr:hover td[data-v-777e3d28]{background:#fbfaff}.ent-top[data-v-777e3d28]{align-items:center;gap:6px;display:flex}.kind[data-v-777e3d28]{letter-spacing:.03em;border-radius:5px;flex:none;padding:0 5px;font-size:9.4px;font-weight:680;line-height:15px}.kind-story[data-v-777e3d28]{color:#5433cf;background:#efe9fe}.kind-task[data-v-777e3d28]{color:#6b6f77;background:#f1f1ee}.ent-id[data-v-777e3d28]{color:#6d5aa8;white-space:nowrap;font-size:10.6px}.ent-id[data-v-777e3d28]:hover{color:var(--violet-ink);text-underline-offset:2px;text-decoration:underline}.ent-title[data-v-777e3d28]{color:var(--ink);margin-top:4px;font-size:12.5px;font-weight:590;line-height:1.5}.act[data-v-777e3d28]{white-space:nowrap;border-radius:999px;padding:0 7px;font-size:10px;font-weight:660;line-height:17px;display:inline-block}.act-added[data-v-777e3d28]{color:#46742a;background:#e9f8dd}.act-updated[data-v-777e3d28]{color:#2a5f9e;background:#e8f1fd}.act-removed[data-v-777e3d28]{color:#a83a32;background:#fdeae9}.flow[data-v-777e3d28]{color:var(--ink-3);flex-wrap:wrap;align-items:center;gap:3px;margin-top:5px;font-size:10px;line-height:1.4;display:flex}.fchip[data-v-777e3d28],.fl[data-v-777e3d28],.u-url[data-v-777e3d28]{white-space:nowrap}.flow i[data-v-777e3d28]{color:var(--ink-4);font-style:normal}.cell-note[data-v-777e3d28]{color:var(--ink-2);font-size:12.1px;line-height:1.62}.chips[data-v-777e3d28]{flex-wrap:wrap;gap:4px;display:flex}.fchip[data-v-777e3d28]{border:1px solid var(--line-2);background:var(--sunken);max-width:100%;color:var(--ink-2);text-overflow:ellipsis;border-radius:5px;padding:0 5px;font-size:9.9px;line-height:16px;overflow:hidden}.lc-extras[data-v-777e3d28]{display:grid}.x-item[data-v-777e3d28]{border-top:1px dashed var(--line-2);gap:9px;padding:11px 0;display:flex}.x-item[data-v-777e3d28]:first-child{border-top:0;padding-top:0}.x-mark[data-v-777e3d28]{background:#b9a5f5;border-radius:999px;flex:none;width:5px;height:5px;margin-top:7px;box-shadow:0 0 0 3px #b9a5f529}.step-bd[data-v-777e3d28],.u-link[data-v-777e3d28],.v-body[data-v-777e3d28],.x-body[data-v-777e3d28]{min-width:0}.x-title[data-v-777e3d28]{font-size:12.4px;font-weight:600;line-height:1.55}.x-detail[data-v-777e3d28]{color:var(--ink-2);margin-top:3px;font-size:11.8px;line-height:1.62}.x-files[data-v-777e3d28]{margin-top:6px}.lc-checks[data-v-777e3d28]{display:grid}.v-item[data-v-777e3d28]{border-top:1px dashed var(--line-2);align-items:flex-start;gap:9px;padding:10px 0;display:flex}.v-item[data-v-777e3d28]:first-child{border-top:0;padding-top:0}.v-ic[data-v-777e3d28]{border-radius:7px;flex:none;place-items:center;width:20px;height:20px;margin-top:1px;display:grid}.u-go[data-v-777e3d28],.v-svg[data-v-777e3d28]{width:12px;height:12px}.v-ic.v-pass[data-v-777e3d28]{color:#4b7a2c;background:#e9f8dd}.v-ic.v-fail[data-v-777e3d28]{color:#ab3a32;background:#fdeae9}.v-ic.v-partial[data-v-777e3d28]{color:#8a6116;background:#fdf3dd}.v-ic.v-skipped[data-v-777e3d28]{color:#82868e;background:#f1f1ee}.v-body[data-v-777e3d28]{flex:1}.v-what[data-v-777e3d28]{word-break:break-word;font-size:12.2px;font-weight:590;line-height:1.5}.v-detail[data-v-777e3d28]{color:var(--ink-3);margin-top:2px;font-size:11.4px;line-height:1.55}.v-res[data-v-777e3d28]{letter-spacing:.02em;flex:none;margin-top:2px;font-size:10.2px;font-weight:660}.v-res.v-pass[data-v-777e3d28]{color:#4b7a2c}.v-res.v-fail[data-v-777e3d28]{color:#ab3a32}.v-res.v-partial[data-v-777e3d28]{color:#8a6116}.v-res.v-skipped[data-v-777e3d28]{color:#82868e}.acc-grid[data-v-777e3d28]{grid-template-columns:repeat(auto-fit,minmax(320px,1fr));align-items:start;gap:16px 22px;display:grid}.acc-col[data-v-777e3d28]{align-content:start;gap:9px;display:grid}.a-item[data-v-777e3d28],.u-item[data-v-777e3d28]{border-radius:var(--r-md);border:1px solid var(--line);background:var(--sunken-2);padding:10px 12px;transition:border-color .14s,background .14s}.a-item[data-v-777e3d28]:hover,.u-item[data-v-777e3d28]:hover{border-color:var(--line-3);background:#fff}.a-head[data-v-777e3d28],.u-head[data-v-777e3d28]{align-items:center;gap:6px;display:flex}.u-link[data-v-777e3d28]{align-items:center;gap:4px;display:inline-flex}.u-label[data-v-777e3d28]{font-size:12.2px;font-weight:640}.u-go[data-v-777e3d28]{color:var(--violet);flex:none;transition:transform .14s}.u-link:hover .u-go[data-v-777e3d28]{transform:translate(1px,-1px)}.u-link:hover .u-label[data-v-777e3d28]{color:var(--violet-ink)}.u-url[data-v-777e3d28]{color:var(--sky);text-overflow:ellipsis;margin-top:3px;font-size:11.3px;overflow:hidden}.u-note[data-v-777e3d28]{color:var(--ink-3);margin-top:3px;font-size:10.9px;line-height:1.5}.a-role[data-v-777e3d28]{border:1px solid var(--violet-line);background:var(--violet-soft);color:var(--violet-ink);letter-spacing:.03em;border-radius:999px;padding:0 6px;font-size:9.6px;font-weight:680;line-height:16px}.a-user[data-v-777e3d28]{color:var(--ink);font-size:11.8px}.a-line[data-v-777e3d28]{align-items:center;gap:8px;margin-top:6px;display:flex}.a-key[data-v-777e3d28]{letter-spacing:.1em;text-transform:uppercase;color:var(--ink-4);font-size:9.4px;font-weight:660}.a-pass[data-v-777e3d28]{border:1px solid var(--line-2);color:var(--ink);background:#fff;border-radius:6px;padding:1px 7px;font-size:11.4px}.a-none[data-v-777e3d28]{font-size:11.2px}.a-note[data-v-777e3d28]{margin-top:5px;font-size:10.9px}.a-note[data-v-777e3d28],.cpy[data-v-777e3d28]{color:var(--ink-3)}.cpy[data-v-777e3d28]{cursor:pointer;background:0 0;border:1px solid #0000;border-radius:7px;flex:none;align-items:center;gap:4px;height:23px;margin-left:auto;padding:0 8px;font-size:10.6px;font-weight:600;transition:background .14s,border-color .14s,color .14s;display:inline-flex}.cpy[data-v-777e3d28]:hover{border-color:var(--line-2);color:var(--ink);background:#fff}.cpy.ok[data-v-777e3d28]{color:#47762b;background:#e9f8dd;border-color:#d5efc2}.cpy-ic[data-v-777e3d28]{width:11px;height:11px}.steps[data-v-777e3d28]{counter-reset:st;gap:13px;margin:0;padding:2px 18px 16px;list-style:none;display:grid}.steps>li[data-v-777e3d28]{counter-increment:st;padding-left:33px;position:relative}.steps>li[data-v-777e3d28]:before{content:counter(st);border:1px solid var(--violet-line);width:22px;height:22px;color:var(--violet-ink);background:#fff;border-radius:999px;place-items:center;font-size:10.4px;font-weight:700;display:grid;position:absolute;top:0;left:0}.steps>li[data-v-777e3d28]:not(:last-child):after{content:"";background:linear-gradient(#ded2fb,#efeaf9);width:1px;position:absolute;top:26px;bottom:-13px;left:10.5px}.step-text[data-v-777e3d28]{padding-top:1px;font-size:12.5px;font-weight:590;line-height:1.5}.cmd-row[data-v-777e3d28]{flex-wrap:wrap;align-items:center;gap:8px;margin-top:6px;display:flex}.cmd[data-v-777e3d28]{color:#f4f3ef;white-space:pre-wrap;word-break:break-all;background:#1b1c20;border-radius:7px;padding:4px 9px;font-size:11.1px;line-height:1.5}.cmd-row .cpy[data-v-777e3d28]{margin-left:0}.step-note[data-v-777e3d28]{color:var(--ink-3);margin-top:4px;font-size:11.2px;line-height:1.55}.lc-sc-sec[data-v-777e3d28]{gap:11px;display:grid}.lc-sc-grid[data-v-777e3d28]{flex-wrap:wrap;align-items:stretch;gap:12px;display:flex}.lc-sc-grid[data-v-777e3d28]>*{flex:330px;min-width:0}.sc[data-v-777e3d28]{border-radius:var(--r-lg);border:1px solid var(--line);box-shadow:var(--shadow-1);background:#fff;flex-direction:column;transition:transform .16s,box-shadow .16s,border-color .16s;display:flex;overflow:hidden}.sc[data-v-777e3d28]:hover{border-color:#e3d9f8;transform:translateY(-1px);box-shadow:0 16px 34px -26px #231a3d73}.sc-hd[data-v-777e3d28]{align-items:flex-start;gap:8px;padding:12px 14px 9px;display:flex}.sc-id[data-v-777e3d28]{border:1px solid var(--line-2);background:var(--sunken);color:var(--ink-3);border-radius:5px;flex:none;margin-top:1px;padding:0 5px;font-size:9.6px;font-weight:660;line-height:16px}.sc-title[data-v-777e3d28]{letter-spacing:-.008em;font-size:12.9px;font-weight:630;line-height:1.45}.sc-body[data-v-777e3d28]{padding:0 14px 10px}.lc-sc-steps[data-v-777e3d28]{counter-reset:ss;gap:5px;margin:6px 0 0;padding:0;list-style:none;display:grid}.lc-sc-steps li[data-v-777e3d28]{counter-increment:ss;color:var(--ink-2);padding-left:19px;font-size:12px;line-height:1.55;position:relative}.lc-sc-steps li[data-v-777e3d28]:before{content:counter(ss) ".";color:#a58cf8;font-variant-numeric:tabular-nums;font-size:10.6px;font-weight:680;position:absolute;top:0;left:0}.sc-acc[data-v-777e3d28]{border-top:1px dashed var(--line-2);background:linear-gradient(#fbfdf6,#fff);margin-top:auto;padding:10px 14px 12px}.sc-acc-h[data-v-777e3d28]{letter-spacing:.1em;text-transform:uppercase;color:#6b7a45;align-items:center;gap:4px;font-size:9.4px;font-weight:700;display:flex}.sc-acc-ic[data-v-777e3d28]{flex:none;width:11px;height:11px}.sc-acc-t[data-v-777e3d28]{color:#33401c;margin-top:4px;font-size:12px;line-height:1.62}.sc-foot[data-v-777e3d28]{color:var(--ink-4);flex-wrap:wrap;align-items:center;gap:10px;margin-top:7px;font-size:10.6px;display:flex}.sc-ids[data-v-777e3d28]{gap:6px;display:flex}.lc-notes[data-v-777e3d28]{gap:8px;margin:0;padding:0;list-style:none;display:grid}.lc-notes li[data-v-777e3d28]{color:var(--ink-2);padding-left:13px;font-size:12.1px;line-height:1.66;position:relative}.lc-notes li[data-v-777e3d28]:before{content:"";background:#c3b2f7;border-radius:999px;width:4.5px;height:4.5px;position:absolute;top:7.5px;left:1px}.lc-notes.warn li[data-v-777e3d28]:before{background:#e8bb5e}.sec-warn .s-ic[data-v-777e3d28]{color:#8a6116;background:#fdf4e2;border-color:#f3e2b8}.lc-empty[data-v-777e3d28]{text-align:center;border-radius:24px;justify-items:center;gap:9px;padding:52px 24px 46px;display:grid}.em-ic[data-v-777e3d28]{background:var(--grad-lilac);width:48px;height:48px;color:var(--violet-ink);border:1px solid #dbcdfb;border-radius:16px;place-items:center;display:grid}.em-svg[data-v-777e3d28]{width:21px;height:21px}.em-title[data-v-777e3d28]{letter-spacing:-.02em;margin-top:2px;font-size:16px;font-weight:660}.em-sub[data-v-777e3d28]{max-width:54ch;font-size:12.6px;line-height:1.7}.em-path[data-v-777e3d28],.em-sub[data-v-777e3d28]{color:var(--ink-2)}.em-path[data-v-777e3d28]{border:1px dashed var(--line-3);background:var(--sunken);border-radius:999px;margin-top:3px;padding:4px 12px;font-size:11.4px}.em-note[data-v-777e3d28]{color:var(--ink-4);font-size:11px}.rule-btn[data-v-777e3d28]{border:1px solid var(--line-2);height:24px;color:var(--ink-2);cursor:pointer;background:#fff;border-radius:999px;flex:none;align-items:center;gap:4px;padding:0 9px;font-size:10.8px;font-weight:620;transition:border-color .14s,color .14s,background .14s;display:inline-flex}.rule-btn[data-v-777e3d28]:hover{border-color:var(--violet-line);background:var(--violet-soft);color:var(--violet-ink)}.rule-btn i[data-v-777e3d28]{background:var(--sunken);color:var(--ink-3);border-radius:999px;padding:0 4px;font-size:9.4px;font-style:normal;line-height:15px}.hist-badge-ic[data-v-777e3d28],.rule-btn-ic[data-v-777e3d28]{width:12px;height:12px}.lc-hist-bar[data-v-777e3d28]{box-shadow:var(--shadow-1);background:linear-gradient(#faf7ff,#fff);border-radius:14px;flex-wrap:wrap;gap:10px;margin-bottom:14px;padding:9px 12px;display:flex}.hist-badge[data-v-777e3d28],.lc-hist-bar[data-v-777e3d28]{border:1px solid var(--violet-line);align-items:center}.hist-badge[data-v-777e3d28]{background:var(--violet-soft);color:var(--violet-ink);border-radius:999px;flex:none;gap:4px;padding:1px 8px;font-size:10.4px;font-weight:680;line-height:18px;display:inline-flex}.hist-readonly[data-v-777e3d28]{color:var(--ink-4);flex:none;font-size:10.2px}.lc-hist-tabs[data-v-777e3d28]{flex:1;align-items:center;gap:4px;min-width:0;padding:1px 0;display:flex;overflow-x:auto}.lc-hist-tabs[data-v-777e3d28]::-webkit-scrollbar{height:3px}.lc-hist-tabs[data-v-777e3d28]::-webkit-scrollbar-thumb{background:#dcd8ef;border-radius:999px}.hist-tab[data-v-777e3d28]{border:1px solid var(--line-2);height:24px;color:var(--ink-2);cursor:pointer;white-space:nowrap;background:#fff;border-radius:999px;flex:none;align-items:center;gap:4px;padding:0 9px;font-size:10.6px;font-weight:620;transition:background .14s,border-color .14s,color .14s;display:inline-flex}.hist-tab[data-v-777e3d28]:hover{border-color:var(--violet-line);color:var(--violet-ink)}.hist-tab.on[data-v-777e3d28]{border-color:var(--violet);background:var(--violet-soft);color:var(--violet-ink);font-weight:680}.hist-tab i[data-v-777e3d28]{color:var(--ink-4);font-size:9.2px;font-style:normal;font-weight:560}.hist-tab.on i[data-v-777e3d28]{color:#7a63b8}.lc-hist-mask[data-v-777e3d28]{z-index:1000;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);background:#14121e6b;place-items:center;padding:24px;animation:.14s lc-fade-777e3d28;display:grid;position:fixed;inset:0}.lc-hist[data-v-777e3d28]{border:1px solid var(--line);background:#fff;border-radius:20px;flex-direction:column;width:min(680px,100%);max-height:calc(min(76vh,720px));animation:.16s lc-pop-777e3d28;display:flex;overflow:hidden;box-shadow:0 40px 80px -40px #14121e8c}@keyframes lc-fade-777e3d28{0%{opacity:0}to{opacity:1}}@keyframes lc-pop-777e3d28{0%{opacity:0;transform:translateY(6px)scale(.99)}to{opacity:1;transform:none}}.lc-hist-hd[data-v-777e3d28]{border-bottom:1px solid var(--line);align-items:flex-start;gap:12px;padding:16px 18px 12px;display:flex}.lc-hist-hd-txt[data-v-777e3d28]{min-width:0}.lc-hist-title[data-v-777e3d28]{letter-spacing:-.015em;font-size:15px;font-weight:660}.lc-hist-sub[data-v-777e3d28]{color:var(--ink-3);margin-top:3px;font-size:11.2px}.lc-hist-x[data-v-777e3d28]{width:26px;height:26px;color:var(--ink-3);cursor:pointer;border-radius:9px;flex:none;place-items:center;margin-left:auto;transition:background .14s,color .14s;display:grid}.lc-hist-x[data-v-777e3d28]:hover{background:var(--sunken);color:var(--ink)}.lc-hist-x-ic[data-v-777e3d28]{width:14px;height:14px}.lc-hist-list[data-v-777e3d28]{gap:2px;padding:8px;display:grid;overflow-y:auto}.hist-item[data-v-777e3d28]{text-align:left;cursor:pointer;background:0 0;border:1px solid #0000;border-radius:10px;align-items:center;gap:10px;width:100%;padding:9px 11px;transition:background .14s,border-color .14s;display:flex}.hist-item[data-v-777e3d28]:hover{background:var(--sunken-2);border-color:var(--line)}.hist-item.on[data-v-777e3d28]{background:var(--violet-soft);border-color:var(--violet-line)}.hist-item[data-v-777e3d28]:disabled{opacity:.6;cursor:wait}.hist-item-dot[data-v-777e3d28]{background:#d3cfe6;border-radius:999px;flex:none;width:6px;height:6px}.hist-item-dot.live[data-v-777e3d28]{background:#6aa844;box-shadow:0 0 0 3px #6aa84429}.hist-item-main[data-v-777e3d28]{flex:1;gap:2px;min-width:0;display:grid}.hist-item-main b[data-v-777e3d28]{text-overflow:ellipsis;white-space:nowrap;font-size:12.4px;font-weight:600;overflow:hidden}.hist-item-main i[data-v-777e3d28]{color:var(--ink-4);font-size:10.2px;font-style:normal}.hist-item-hash[data-v-777e3d28]{border:1px solid var(--line-2);color:var(--ink-3);background:#fff;border-radius:6px;flex:none;padding:0 6px;font-size:9.8px;line-height:16px}.lc-hist-hint[data-v-777e3d28]{text-align:center;padding:18px 12px;font-size:12px}.lc-hist-err[data-v-777e3d28]{border-radius:var(--r-md);color:#a5382f;background:#fdeae7;border:1px solid #f6d2cb;margin:12px 18px;padding:9px 11px;font-size:11.8px}.lc-hist-ft[data-v-777e3d28]{border-top:1px solid var(--line);justify-content:space-between;align-items:center;gap:12px;padding:11px 18px;font-size:10.8px;display:flex}.hist-close[data-v-777e3d28]{border:1px solid var(--ink-card);background:var(--ink-card);color:#fff;cursor:pointer;border-radius:999px;flex:none;height:26px;padding:0 12px;font-size:11px;font-weight:620}.hist-close[data-v-777e3d28]:hover{background:#000}@media (width<=900px){.lc-hero[data-v-777e3d28]{grid-template-columns:minmax(0,1fr) auto;align-items:start;gap:4px 14px;padding:18px;display:grid}.hero-body[data-v-777e3d28]{grid-column:1}.hero-aside[data-v-777e3d28]{grid-area:1/2}.ring[data-v-777e3d28]{width:72px;height:72px}.ring-in[data-v-777e3d28]{width:58px;height:58px}.ring-in b[data-v-777e3d28]{font-size:14px}.ring-in span[data-v-777e3d28]{font-size:8.2px}.s-hint[data-v-777e3d28]{display:none}.s-hd[data-v-777e3d28]{padding:12px 14px 10px}.sec-bd[data-v-777e3d28],.sec-empty[data-v-777e3d28],.steps[data-v-777e3d28]{padding-left:14px;padding-right:14px}}@media (width<=700px){.hist-readonly[data-v-777e3d28]{display:none}.lc-hist-bar .rule-btn[data-v-777e3d28]{order:2;margin-left:auto}.lc-hist-tabs[data-v-777e3d28]{flex-basis:100%;order:3}}@media (width<=560px){.lc-rule[data-v-777e3d28]{padding:10px 12px}.ring-in span[data-v-777e3d28],.rule-file[data-v-777e3d28]{display:none}.lc-hero[data-v-777e3d28]{gap:4px 10px;padding:15px}.hero-title[data-v-777e3d28]{letter-spacing:-.02em;font-size:17.5px}.hero-sum[data-v-777e3d28]{font-size:12.2px;line-height:1.62}.hero-meta[data-v-777e3d28]{gap:8px;margin-top:10px;font-size:10.8px}.ring[data-v-777e3d28]{width:56px;height:56px}.ring-in[data-v-777e3d28]{width:46px;height:46px}.ring-in b[data-v-777e3d28]{font-size:12.5px}.s-title[data-v-777e3d28]{font-size:13.2px}}