chainlesschain 0.45.79 → 0.45.81
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/bin/chainlesschain.js +0 -0
- package/package.json +1 -1
- package/src/assets/web-panel/.build-hash +1 -1
- package/src/assets/web-panel/assets/{Analytics-CoH0P1ux.js → Analytics-C1AnPdMx.js} +2 -2
- package/src/assets/web-panel/assets/{AppLayout-Dk1eV3Xp.js → AppLayout-YdvJBMHH.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-Cv97eAjW.js → Backup-D31iZX3l.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-DSbYaPuD.js → Chat-DiXJ3TuK.js} +1 -1
- package/src/assets/web-panel/assets/Cowork-BnrHWwZw.js +7 -0
- package/src/assets/web-panel/assets/Cowork-CcSoS3eX.css +1 -0
- package/src/assets/web-panel/assets/{Cron-BcH0ckxq.js → Cron-DBt1ueXh.js} +2 -2
- package/src/assets/web-panel/assets/Dashboard-BS-tzGNj.css +1 -0
- package/src/assets/web-panel/assets/{Dashboard-DSOE-azo.js → Dashboard-HPh9FcPt.js} +2 -2
- package/src/assets/web-panel/assets/{Git-zd3CuuXJ.js → Git-hwQ1oZHj.js} +2 -2
- package/src/assets/web-panel/assets/{Logs-BUKXg48N.js → Logs-4D9p6PRM.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-WVxDlw0C.js → McpTools-CyAUjbbs.js} +1 -1
- package/src/assets/web-panel/assets/{Memory-BLFTgTpY.js → Memory-BMqOR7S-.js} +2 -2
- package/src/assets/web-panel/assets/{Notes-CFypT876.js → Notes-Cmas8i4E.js} +2 -2
- package/src/assets/web-panel/assets/{Organization-BOOqeyu_.js → Organization-DnSa58Tl.js} +4 -4
- package/src/assets/web-panel/assets/{P2P-D9xrbb8q.js → P2P-BxksIBWs.js} +2 -2
- package/src/assets/web-panel/assets/{Permissions-CidrpFWd.js → Permissions-Bq5Qn2s3.js} +4 -4
- package/src/assets/web-panel/assets/{Projects-D3Ycn8xG.js → Projects-B7EM0uPg.js} +1 -1
- package/src/assets/web-panel/assets/{Providers-D0kMUvHz.js → Providers-DAwgG5KV.js} +2 -2
- package/src/assets/web-panel/assets/{RssFeed-OQLesJxb.js → RssFeed-HSZoRXvS.js} +2 -2
- package/src/assets/web-panel/assets/{Security-BR4hAAkF.js → Security-Cz17qBny.js} +3 -3
- package/src/assets/web-panel/assets/{Services-BFMDfXE5.js → Services-D2EsLq-v.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-BAf_mFKw.js → Skills-C9v-f3vZ.js} +1 -1
- package/src/assets/web-panel/assets/{Tasks-DuNOWfjU.js → Tasks-yMEcU0n7.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-buh__Yll.js → Templates-l7SvlKuB.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-vgS5USvW.js → Wallet-BHWhLWn9.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-BoL2UJ5Z.js → WebAuthn-kWhFYaUK.js} +4 -4
- package/src/assets/web-panel/assets/{antd-BQNxIyr-.js → antd-D6h4fDFf.js} +82 -82
- package/src/assets/web-panel/assets/{chat-BwUxWn7i.js → chat-BYmuDvol.js} +1 -1
- package/src/assets/web-panel/assets/{index-CCRLEutJ.js → index-ByUk2Wmr.js} +2 -2
- package/src/assets/web-panel/assets/{markdown-BeVIhIzs.js → markdown-BZsB-Dsv.js} +1 -1
- package/src/assets/web-panel/assets/ws-Dma34ig_.js +1 -0
- package/src/assets/web-panel/index.html +2 -2
- package/src/gateways/ws/action-protocol.js +101 -0
- package/src/gateways/ws/message-dispatcher.js +3 -0
- package/src/gateways/ws/session-protocol.js +2 -0
- package/src/gateways/ws/ws-agent-handler.js +1 -0
- package/src/gateways/ws/ws-server.js +18 -0
- package/src/gateways/ws/ws-session-gateway.js +1 -0
- package/src/lib/cowork-task-runner.js +55 -3
- package/src/lib/cowork-task-templates.js +105 -0
- package/src/lib/sub-agent-context.js +26 -0
- package/src/runtime/agent-core.js +6 -1
- package/src/runtime/coding-agent-shell-policy.cjs +16 -1
- package/src/assets/web-panel/assets/Cowork-CPqYhoMI.css +0 -1
- package/src/assets/web-panel/assets/Cowork-DY0Jcql7.js +0 -48
- package/src/assets/web-panel/assets/Dashboard-CKeMmCoT.css +0 -1
- package/src/assets/web-panel/assets/ws-B4fo9ew1.js +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import{u as Ie}from"./ws-
|
|
2
|
-
`);for(const v of n){const b=v.trim();if(!b||b.startsWith("─")||b.startsWith("No "))continue;const d=b.split(/\s*[|│]\s*/);d.length>=2&&e.push({key:e.length,id:d[0]||"-",name:d[1]||"-",type:d[2]||"public-key",createdAt:d[3]||"-",lastUsed:d[4]||"-"})}return e}async function pe(){const t=D.value.trim();if(!t){u.warning("请输入凭证名称");return}B.value=!0;try{const e=t.replace(/"/g,'\\"'),{output:n}=await x.execute(`webauthn register --name "${e}" --json`,3e4);n.includes("error")||n.includes("失败")?u.error("注册失败: "+n.slice(0,120)):(u.success("WebAuthn 凭证已注册"),$.value=!1,D.value="",await
|
|
3
|
-
`);for(const v of n){const b=v.trim().match(/^(.+?)\s*[:=:]\s*(.+)$/);if(b){const d=b[1].toLowerCase(),C=b[2].trim();d.includes("provider")?p.value.provider=C:d.includes("client")&&d.includes("id")?p.value.clientId=C:d.includes("redirect")||d.includes("callback")?p.value.redirectUrl=C:(d.includes("status")||d.includes("enabled"))&&(p.value.enabled=/true|enabled|active|已启用/i.test(C))}}}J.value=[{label:"提供商",value:p.value.provider||"未配置",color:p.value.provider?"#1677ff":"#999"},{label:"状态",value:p.value.enabled?"已启用":"未启用",color:p.value.enabled?"#52c41a":"#faad14"}],q.value=!0}catch{p.value={provider:"",clientId:"",redirectUrl:"",enabled:!1},J.value=[{label:"提供商",value:"未配置",color:"#999"},{label:"状态",value:"未启用",color:"#faad14"}],q.value=!0}finally{V.value=!1}}async function ve(){if(!f.value.provider){u.warning("请选择 SSO 提供商");return}if(!f.value.clientId.trim()){u.warning("请输入 Client ID");return}F.value=!0;try{const t=[`config set sso.provider ${f.value.provider}`,`config set sso.clientId ${f.value.clientId.trim()}`];f.value.clientSecret.trim()&&t.push(`config set sso.clientSecret ${f.value.clientSecret.trim()}`),f.value.issuerUrl.trim()&&t.push(`config set sso.issuerUrl ${f.value.issuerUrl.trim()}`);for(const e of t)await x.execute(e,1e4);u.success("SSO 配置已保存"),
|
|
1
|
+
import{u as Ie}from"./ws-Dma34ig_.js";import{_ as Oe}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{J as u,p as le,N as Te,a3 as ze,K as ne,a7 as Le,L as oe}from"./antd-D6h4fDFf.js";import{o as $e,a3 as y,a1 as g,k as a,Z as l,f as r,X as s,Y as i,G as c,u as k,W as I,a5 as m,a4 as h,F as j,a7 as se}from"./vendor-CN0Iv_qZ.js";const De={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Ne={key:0,style:{"text-align":"center",padding:"60px"}},Pe=["title"],We={key:1,style:{color:"var(--text-primary)"}},Re={key:3,style:{color:"var(--text-secondary)","font-size":"12px"}},je={key:4,style:{color:"var(--text-secondary)","font-size":"12px"}},Ke={key:0,style:{"text-align":"center",padding:"60px"}},Me={style:{color:"#e0e0e0","font-family":"monospace","font-size":"12px"}},Be={style:{color:"var(--text-secondary)","font-size":"12px"}},Ve={style:{"margin-top":"16px"}},qe={key:0,style:{"text-align":"center",padding:"60px"}},Fe={style:{display:"flex","align-items":"center",gap:"16px","margin-bottom":"16px"}},Je={key:0,style:{"margin-top":"16px"}},Ee={style:{"white-space":"pre-wrap","word-break":"break-all",color:"#52c41a","font-size":"11px",background:"var(--bg-base)",padding:"12px","border-radius":"6px",border:"1px solid var(--border-color)"}},Ye={key:0,style:{"margin-top":"16px"}},Ze={style:{background:"var(--bg-base)",padding:"16px","border-radius":"6px",border:"1px solid var(--border-color)"}},Ge={__name:"WebAuthn",setup(Xe){const x=Ie(),O=r("webauthn"),K=r(!1);async function re(){K.value=!0;try{O.value==="webauthn"?await N():O.value==="sso"?await E():O.value==="2fa"&&await ee()}finally{K.value=!1}}function ie(t){t==="sso"&&!q.value&&E(),t==="2fa"&&!Z.value&&ee()}function T(t){try{return JSON.parse(t)}catch{return null}}function ue(t){return t?t.length<=16?t:t.slice(0,8)+"..."+t.slice(-8):"-"}const M=r(!1),B=r(!1),L=r([]),$=r(!1),D=r(""),de=[{title:"ID",key:"id",dataIndex:"id",width:"180px"},{title:"名称",key:"name",dataIndex:"name",width:"160px"},{title:"类型",key:"type",dataIndex:"type",width:"120px"},{title:"创建时间",key:"createdAt",dataIndex:"createdAt",width:"180px"},{title:"最后使用",key:"lastUsed",dataIndex:"lastUsed",width:"180px"},{title:"操作",key:"actions",width:"100px",fixed:"right"}];async function N(){M.value=!0;try{const{output:t}=await x.execute("webauthn list --json",15e3),e=T(t);e&&Array.isArray(e)?L.value=e.map((n,v)=>({key:n.id||v,id:n.id||"-",name:n.name||n.displayName||"-",type:n.type||"public-key",createdAt:n.createdAt||n.created||"-",lastUsed:n.lastUsed||n.lastAuthentication||"-"})):e&&e.credentials?L.value=e.credentials.map((n,v)=>({key:n.id||v,id:n.id||"-",name:n.name||n.displayName||"-",type:n.type||"public-key",createdAt:n.createdAt||n.created||"-",lastUsed:n.lastUsed||n.lastAuthentication||"-"})):L.value=ce(t)}catch(t){u.error("加载 WebAuthn 凭证失败: "+t.message)}finally{M.value=!1}}function ce(t){const e=[],n=t.split(`
|
|
2
|
+
`);for(const v of n){const b=v.trim();if(!b||b.startsWith("─")||b.startsWith("No "))continue;const d=b.split(/\s*[|│]\s*/);d.length>=2&&e.push({key:e.length,id:d[0]||"-",name:d[1]||"-",type:d[2]||"public-key",createdAt:d[3]||"-",lastUsed:d[4]||"-"})}return e}async function pe(){const t=D.value.trim();if(!t){u.warning("请输入凭证名称");return}B.value=!0;try{const e=t.replace(/"/g,'\\"'),{output:n}=await x.execute(`webauthn register --name "${e}" --json`,3e4);n.includes("error")||n.includes("失败")?u.error("注册失败: "+n.slice(0,120)):(u.success("WebAuthn 凭证已注册"),$.value=!1,D.value="",await N())}catch(e){u.error("注册失败: "+e.message)}finally{B.value=!1}}async function fe(t){try{const{output:e}=await x.execute(`webauthn delete "${t.id}"`,15e3);e.includes("error")||e.includes("失败")?u.error("删除失败: "+e.slice(0,120)):(u.success("凭证已删除"),await N())}catch(e){u.error("删除失败: "+e.message)}}const V=r(!1),q=r(!1),F=r(!1),P=r(!1),p=r({provider:"",clientId:"",redirectUrl:"",enabled:!1}),f=r({provider:void 0,clientId:"",clientSecret:"",issuerUrl:""}),J=r([]);async function E(){V.value=!0;try{const{output:t}=await x.execute("sso status --json",15e3),e=T(t);if(e)p.value={provider:e.provider||"",clientId:e.clientId||e.client_id||"",redirectUrl:e.redirectUrl||e.redirect_url||e.callbackUrl||"",enabled:e.enabled||e.active||!1};else{const n=t.split(`
|
|
3
|
+
`);for(const v of n){const b=v.trim().match(/^(.+?)\s*[:=:]\s*(.+)$/);if(b){const d=b[1].toLowerCase(),C=b[2].trim();d.includes("provider")?p.value.provider=C:d.includes("client")&&d.includes("id")?p.value.clientId=C:d.includes("redirect")||d.includes("callback")?p.value.redirectUrl=C:(d.includes("status")||d.includes("enabled"))&&(p.value.enabled=/true|enabled|active|已启用/i.test(C))}}}J.value=[{label:"提供商",value:p.value.provider||"未配置",color:p.value.provider?"#1677ff":"#999"},{label:"状态",value:p.value.enabled?"已启用":"未启用",color:p.value.enabled?"#52c41a":"#faad14"}],q.value=!0}catch{p.value={provider:"",clientId:"",redirectUrl:"",enabled:!1},J.value=[{label:"提供商",value:"未配置",color:"#999"},{label:"状态",value:"未启用",color:"#faad14"}],q.value=!0}finally{V.value=!1}}async function ve(){if(!f.value.provider){u.warning("请选择 SSO 提供商");return}if(!f.value.clientId.trim()){u.warning("请输入 Client ID");return}F.value=!0;try{const t=[`config set sso.provider ${f.value.provider}`,`config set sso.clientId ${f.value.clientId.trim()}`];f.value.clientSecret.trim()&&t.push(`config set sso.clientSecret ${f.value.clientSecret.trim()}`),f.value.issuerUrl.trim()&&t.push(`config set sso.issuerUrl ${f.value.issuerUrl.trim()}`);for(const e of t)await x.execute(e,1e4);u.success("SSO 配置已保存"),P.value=!1,await E()}catch(t){u.error("保存失败: "+t.message)}finally{F.value=!1}}const Y=r(!1),Z=r(!1),w=r(!1),U=r(!1),A=r(""),G=r(!1),S=r([]);async function ee(){Y.value=!0;try{const{output:t}=await x.execute("auth 2fa status --json",15e3),e=T(t);e?w.value=e.enabled||e.active||!1:w.value=/enabled|已启用|active/i.test(t),Z.value=!0}catch{w.value=!1,Z.value=!0}finally{Y.value=!1}}async function ye(){U.value=!0,A.value="";try{const{output:t}=await x.execute("auth 2fa enable --type totp --json",2e4);if(t.includes("error")||t.includes("失败"))u.error("启用失败: "+t.slice(0,120));else{const e=T(t);e&&e.secret?A.value=`TOTP Secret: ${e.secret}
|
|
4
4
|
OTP Auth URL: ${e.otpAuthUrl||e.uri||""}`:A.value=t,w.value=!0,u.success("TOTP 已启用")}}catch(t){u.error("启用失败: "+t.message)}finally{U.value=!1}}async function me(){U.value=!0,A.value="";try{const{output:t}=await x.execute("auth 2fa disable",15e3);t.includes("error")||t.includes("失败")?u.error("禁用失败: "+t.slice(0,120)):(w.value=!1,u.success("双因素认证已禁用"))}catch(t){u.error("禁用失败: "+t.message)}finally{U.value=!1}}async function be(){G.value=!0,S.value=[];try{const{output:t}=await x.execute("auth 2fa recovery-codes --json",15e3),e=T(t);if(e&&Array.isArray(e.codes))S.value=e.codes;else if(e&&Array.isArray(e))S.value=e;else{const n=t.split(`
|
|
5
|
-
`).map(v=>v.trim()).filter(v=>v&&/^[A-Za-z0-9-]{6,}$/.test(v));S.value=n.length>0?n:[t.trim()||"无法生成恢复码"]}S.value.length>0&&S.value[0]!=="无法生成恢复码"&&u.success("恢复码已生成")}catch(t){u.error("生成恢复码失败: "+t.message)}finally{G.value=!1}}return $e(()=>{
|
|
5
|
+
`).map(v=>v.trim()).filter(v=>v&&/^[A-Za-z0-9-]{6,}$/.test(v));S.value=n.length>0?n:[t.trim()||"无法生成恢复码"]}S.value.length>0&&S.value[0]!=="无法生成恢复码"&&u.success("恢复码已生成")}catch(t){u.error("生成恢复码失败: "+t.message)}finally{G.value=!1}}return $e(()=>{N()}),(t,e)=>{const n=s("a-button"),v=s("a-space"),b=s("a-spin"),d=s("a-tag"),C=s("a-popconfirm"),ge=s("a-empty"),_e=s("a-table"),X=s("a-input"),z=s("a-form-item"),te=s("a-form"),ae=s("a-modal"),H=s("a-tab-pane"),xe=s("a-statistic"),W=s("a-card"),ke=s("a-col"),we=s("a-row"),R=s("a-descriptions-item"),Se=s("a-descriptions"),Q=s("a-select-option"),he=s("a-select"),Ce=s("a-input-password"),Ue=s("a-alert"),Ae=s("a-tabs");return i(),y("div",null,[g("div",De,[e[11]||(e[11]=g("div",null,[g("h2",{class:"page-title"},"认证管理"),g("p",{class:"page-sub"},"WebAuthn / SSO / 双因素认证")],-1)),a(n,{type:"primary",ghost:"",loading:K.value,onClick:re},{icon:l(()=>[a(k(le))]),default:l(()=>[e[10]||(e[10]=c(" 刷新 ",-1))]),_:1},8,["loading"])]),a(Ae,{activeKey:O.value,"onUpdate:activeKey":e[9]||(e[9]=o=>O.value=o),type:"card",onChange:ie},{default:l(()=>[a(H,{key:"webauthn"},{tab:l(()=>[a(k(ne)),e[12]||(e[12]=c(" WebAuthn ",-1))]),default:l(()=>[a(v,{style:{"margin-bottom":"16px"}},{default:l(()=>[a(n,{type:"primary",onClick:e[0]||(e[0]=o=>$.value=!0)},{icon:l(()=>[a(k(Te))]),default:l(()=>[e[13]||(e[13]=c(" 注册新凭证 ",-1))]),_:1})]),_:1}),M.value?(i(),y("div",Ne,[a(b,{size:"large"})])):(i(),I(_e,{key:1,columns:de,"data-source":L.value,pagination:{pageSize:20,showTotal:o=>`共 ${o} 条`},size:"small",style:{background:"var(--bg-card)"},"row-class-name":()=>"auth-row"},{bodyCell:l(({column:o,record:_})=>[o.key==="id"?(i(),y("span",{key:0,style:{color:"#e0e0e0","font-family":"monospace","font-size":"12px"},title:_.id},m(ue(_.id)),9,Pe)):h("",!0),o.key==="name"?(i(),y("span",We,m(_.name),1)):h("",!0),o.key==="type"?(i(),I(d,{key:2,color:"blue"},{default:l(()=>[c(m(_.type||"public-key"),1)]),_:2},1024)):h("",!0),o.key==="createdAt"?(i(),y("span",Re,m(_.createdAt||"-"),1)):h("",!0),o.key==="lastUsed"?(i(),y("span",je,m(_.lastUsed||"-"),1)):h("",!0),o.key==="actions"?(i(),I(C,{key:5,title:"确定要删除此凭证吗?","ok-text":"确定","cancel-text":"取消",onConfirm:He=>fe(_)},{default:l(()=>[a(n,{type:"link",danger:"",size:"small"},{icon:l(()=>[a(k(ze))]),default:l(()=>[e[14]||(e[14]=c(" 删除 ",-1))]),_:1})]),_:1},8,["onConfirm"])):h("",!0)]),emptyText:l(()=>[a(ge,{description:"暂无 WebAuthn 凭证,点击「注册新凭证」添加"})]),_:1},8,["data-source","pagination"])),a(ae,{open:$.value,"onUpdate:open":e[2]||(e[2]=o=>$.value=o),title:"注册 WebAuthn 凭证","confirm-loading":B.value,onOk:pe,"ok-text":"注册","cancel-text":"取消"},{default:l(()=>[a(te,{"label-col":{span:6},"wrapper-col":{span:18},style:{"margin-top":"16px"}},{default:l(()=>[a(z,{label:"凭证名称",required:""},{default:l(()=>[a(X,{value:D.value,"onUpdate:value":e[1]||(e[1]=o=>D.value=o),placeholder:"例如:YubiKey-5, TouchID"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"])]),_:1}),a(H,{key:"sso"},{tab:l(()=>[a(k(Le)),e[15]||(e[15]=c(" SSO 配置 ",-1))]),default:l(()=>[V.value?(i(),y("div",Ke,[a(b,{size:"large"})])):(i(),y(j,{key:1},[a(we,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:l(()=>[(i(!0),y(j,null,se(J.value,o=>(i(),I(ke,{xs:12,sm:6,key:o.label},{default:l(()=>[a(W,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"},size:"small"},{default:l(()=>[a(xe,{title:o.label,value:o.value,"value-style":{color:o.color,fontSize:"20px"}},null,8,["title","value","value-style"])]),_:2},1024)]),_:2},1024))),128))]),_:1}),a(W,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"},title:"当前 SSO 配置"},{default:l(()=>[a(Se,{column:{xs:1,sm:2},bordered:"",size:"small",style:{background:"var(--bg-card)"}},{default:l(()=>[a(R,{label:"提供商"},{default:l(()=>[a(d,{color:p.value.provider?"blue":"default"},{default:l(()=>[c(m(p.value.provider||"未配置"),1)]),_:1},8,["color"])]),_:1}),a(R,{label:"Client ID"},{default:l(()=>[g("span",Me,m(p.value.clientId||"-"),1)]),_:1}),a(R,{label:"Redirect URL"},{default:l(()=>[g("span",Be,m(p.value.redirectUrl||"-"),1)]),_:1}),a(R,{label:"状态"},{default:l(()=>[a(d,{color:p.value.enabled?"green":"default"},{default:l(()=>[c(m(p.value.enabled?"已启用":"未启用"),1)]),_:1},8,["color"])]),_:1})]),_:1}),g("div",Ve,[a(n,{type:"primary",onClick:e[3]||(e[3]=o=>P.value=!0)},{icon:l(()=>[a(k(ne))]),default:l(()=>[e[16]||(e[16]=c(" 配置 SSO ",-1))]),_:1})])]),_:1})],64)),a(ae,{open:P.value,"onUpdate:open":e[8]||(e[8]=o=>P.value=o),title:"配置 SSO","confirm-loading":F.value,onOk:ve,"ok-text":"保存","cancel-text":"取消",width:"520px"},{default:l(()=>[a(te,{"label-col":{span:6},"wrapper-col":{span:18},style:{"margin-top":"16px"}},{default:l(()=>[a(z,{label:"提供商",required:""},{default:l(()=>[a(he,{value:f.value.provider,"onUpdate:value":e[4]||(e[4]=o=>f.value.provider=o),placeholder:"选择 SSO 提供商"},{default:l(()=>[a(Q,{value:"OIDC"},{default:l(()=>[...e[17]||(e[17]=[c("OIDC",-1)])]),_:1}),a(Q,{value:"SAML"},{default:l(()=>[...e[18]||(e[18]=[c("SAML",-1)])]),_:1}),a(Q,{value:"LDAP"},{default:l(()=>[...e[19]||(e[19]=[c("LDAP",-1)])]),_:1})]),_:1},8,["value"])]),_:1}),a(z,{label:"Client ID",required:""},{default:l(()=>[a(X,{value:f.value.clientId,"onUpdate:value":e[5]||(e[5]=o=>f.value.clientId=o),placeholder:"输入 Client ID"},null,8,["value"])]),_:1}),a(z,{label:"Client Secret"},{default:l(()=>[a(Ce,{value:f.value.clientSecret,"onUpdate:value":e[6]||(e[6]=o=>f.value.clientSecret=o),placeholder:"输入 Client Secret"},null,8,["value"])]),_:1}),a(z,{label:"Issuer URL"},{default:l(()=>[a(X,{value:f.value.issuerUrl,"onUpdate:value":e[7]||(e[7]=o=>f.value.issuerUrl=o),placeholder:"https://sso.example.com"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"])]),_:1}),a(H,{key:"2fa"},{tab:l(()=>[a(k(oe)),e[20]||(e[20]=c(" 双因素认证 ",-1))]),default:l(()=>[Y.value?(i(),y("div",qe,[a(b,{size:"large"})])):(i(),y(j,{key:1},[a(W,{style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"},title:"TOTP 双因素认证"},{default:l(()=>[g("div",Fe,[e[21]||(e[21]=g("span",{style:{color:"var(--text-primary)","font-size":"14px"}},"状态:",-1)),a(d,{color:w.value?"green":"default",style:{"font-size":"13px"}},{default:l(()=>[c(m(w.value?"已启用":"未启用"),1)]),_:1},8,["color"])]),a(v,null,{default:l(()=>[w.value?(i(),I(C,{key:1,title:"确定要禁用双因素认证吗?这会降低账户安全性。","ok-text":"确定禁用","cancel-text":"取消",onConfirm:me},{default:l(()=>[a(n,{danger:"",loading:U.value},{default:l(()=>[...e[23]||(e[23]=[c(" 禁用 ",-1)])]),_:1},8,["loading"])]),_:1})):(i(),I(n,{key:0,type:"primary",loading:U.value,onClick:ye},{icon:l(()=>[a(k(oe))]),default:l(()=>[e[22]||(e[22]=c(" 启用 TOTP ",-1))]),_:1},8,["loading"]))]),_:1}),A.value?(i(),y("div",Je,[g("pre",Ee,m(A.value),1)])):h("",!0)]),_:1}),a(W,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"},title:"恢复码"},{default:l(()=>[e[25]||(e[25]=g("p",{style:{color:"var(--text-secondary)","margin-bottom":"12px"}}," 恢复码可在丢失 TOTP 设备时用于登录。请妥善保管。 ",-1)),a(n,{loading:G.value,onClick:be},{icon:l(()=>[a(k(le))]),default:l(()=>[e[24]||(e[24]=c(" 生成恢复码 ",-1))]),_:1},8,["loading"]),S.value.length>0?(i(),y("div",Ye,[a(Ue,{type:"warning","show-icon":"",style:{"margin-bottom":"12px"},message:"请立即保存这些恢复码,关闭后将无法再次查看。"}),g("div",Ze,[(i(!0),y(j,null,se(S.value,(o,_)=>(i(),y("div",{key:_,style:{"font-family":"monospace","font-size":"14px",color:"#e0e0e0",padding:"4px 0","letter-spacing":"2px"}},m(_+1)+". "+m(o),1))),128))])])):h("",!0)]),_:1})],64))]),_:1})]),_:1},8,["activeKey"])])}}},lt=Oe(Ge,[["__scopeId","data-v-a4bec262"]]);export{lt as default};
|