@shawnstack/quickforge 1.7.6 → 1.7.7

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.
@@ -1 +1 @@
1
- import{i as e}from"./rolldown-runtime-DWdDZTNf.js";import{A as t,Nt as n,Rt as r,Wt as i,d as a,mt as o,qt as s,s as ee}from"./icons-2D18YbSI.js";import{i as c,n as l}from"./react-vendor-3UaA-C9W.js";import{t as u}from"./model-display-label-C6-0eDxF.js";import{n as d,t as te}from"./model-reference-o41fJ6jQ.js";import{$t as ne,Qt as re,Tt as ie,at as ae,fn as f,ln as p,mn as m,nn as oe,tn as se,yn as h}from"./index-BivLuZvX.js";import{i as ce,r as le,t as ue}from"./model-identity-CgA6_Pbm.js";var g=e(s(),1),de=c(),_=l(),fe=144,pe=82,me=4,v=8;function y(e){return JSON.stringify(d(e))}function b(e){if(!e)return{mode:`inherit`};try{return{mode:`fixed`,...JSON.parse(e)}}catch{return{mode:`inherit`}}}function x(e){return!e||e.mode!==`fixed`?``:e.source===`cloud`?JSON.stringify({version:1,source:`cloud`,catalogId:e.catalogId}):e.source===`custom`?JSON.stringify({version:1,source:`custom`,providerId:e.providerId,modelId:e.modelId}):JSON.stringify({version:1,source:`legacy-custom`,provider:e.provider,modelId:e.modelId,...e.api?{api:e.api}:{},...e.baseUrl?{baseUrl:e.baseUrl}:{}})}function S(){return{name:``,label:``,description:``,systemPrompt:``,allowedTools:[`read_file`,`grep_files`],maxRuntimeMs:`3600000`,maxToolCalls:`300`,enabledAsSubagent:!0,modelMode:`inherit`,fixedModelValue:``,thinkingLevel:`inherit`}}function he(e){return{name:e.name,label:e.label,description:e.description??``,systemPrompt:e.systemPrompt??``,allowedTools:e.allowedTools??[],maxRuntimeMs:String(e.maxRuntimeMs??36e5),maxToolCalls:String(e.maxToolCalls??300),enabledAsSubagent:e.enabledAsSubagent,modelMode:e.model?.mode===`fixed`?`fixed`:`inherit`,fixedModelValue:x(e.model),thinkingLevel:e.thinkingLevel??`inherit`}}function ge(e){return{name:e.name.trim().toLowerCase(),label:e.label.trim(),description:e.description.trim(),systemPrompt:e.systemPrompt.trim(),allowedTools:e.allowedTools,maxRuntimeMs:Number(e.maxRuntimeMs||36e5),maxToolCalls:Number(e.maxToolCalls||300),enabledAsSubagent:e.enabledAsSubagent,model:e.modelMode===`fixed`?b(e.fixedModelValue):{mode:`inherit`},thinkingLevel:e.thinkingLevel}}function C(e){return!!(e.name.trim()&&e.label.trim()&&e.allowedTools.length>0)}async function w(e,t){let n=await fetch(e,{...t,headers:{"content-type":`application/json`,...t?.headers}}),r=await n.json().catch(()=>null);if(!n.ok)throw Error(r?.error||`请求失败`);return r}function T(){let[e,s]=(0,g.useState)([]),[c,l]=(0,g.useState)([]),[T,E]=(0,g.useState)(!1),[D,O]=(0,g.useState)(null),[k,A]=(0,g.useState)(()=>S()),[j,M]=(0,g.useState)(!1),[N,P]=(0,g.useState)(``),[F,I]=(0,g.useState)(!1),[L,_e]=(0,g.useState)(),[R,ve]=(0,g.useState)([]),[ye,be]=(0,g.useState)(`off`),[z,B]=(0,g.useState)(``),[V,H]=(0,g.useState)(null),[U,W]=(0,g.useState)(null);async function xe(){let[e,t]=await Promise.all([w(`/api/agent-profiles`),w(`/api/agent-profiles/available-tools`)]);s(e.agents),l(t.tools)}(0,g.useEffect)(()=>{let e=!1;async function t(){try{let[t,n]=await Promise.all([w(`/api/agent-profiles`),w(`/api/agent-profiles/available-tools`)]);if(e)return;s(t.agents),l(n.tools)}catch(t){e||B(t instanceof Error?t.message:h(`requestFailed`))}}return t(),()=>{e=!0}},[]),(0,g.useEffect)(()=>{let e=!1;async function t(){try{let t=await se(),[n,r]=await Promise.all([ne(t),te().catch(()=>[])]),i=r.length?r:n;ve(i);let a=i.filter(p),o=await oe(t),s=(o.model&&p(o.model)?a.find(e=>ce(e,o.model)):void 0)??a[0];if(e)return;_e(s),be(o.thinkingLevel??re(s))}catch{}}return t(),()=>{e=!0}},[]),(0,g.useEffect)(()=>{if(!V)return;let e=()=>{H(null),W(null)},t=t=>{t.key===`Escape`&&e()};return window.addEventListener(`click`,e),window.addEventListener(`blur`,e),window.addEventListener(`resize`,e),window.addEventListener(`scroll`,e,!0),document.addEventListener(`keydown`,t),()=>{window.removeEventListener(`click`,e),window.removeEventListener(`blur`,e),window.removeEventListener(`resize`,e),window.removeEventListener(`scroll`,e,!0),document.removeEventListener(`keydown`,t)}},[V]);let G=(0,g.useMemo)(()=>e.find(e=>e.id===D)??null,[e,D]),K=(0,g.useMemo)(()=>e.find(e=>e.id===V)??null,[e,V]),q=!!G?.readonly,J=!!(G?.readonly&&!G?.builtin),Y=(0,g.useMemo)(()=>{let e=b(k.fixedModelValue);if(e.mode!==`fixed`)return;let t=x(e);return R.find(e=>y(e)===t)??(`provider`in e?R.find(t=>le(t,e)):void 0)},[k.fixedModelValue,R]),Se=(0,g.useMemo)(()=>R.filter(p),[R]),Ce=(0,g.useMemo)(()=>ue(Se,Y),[Se,Y]),we=Y?y(Y):k.fixedModelValue,X=k.modelMode===`fixed`&&!!Y&&Y?.reasoning!==!0;function Te(e,t){if(e.stopPropagation(),V===t){H(null),W(null);return}let n=e.currentTarget.getBoundingClientRect(),r=Math.max(v,Math.min(n.right-fe,window.innerWidth-fe-v)),i=n.bottom+me,a=n.top-me-pe;W({left:r,top:i+pe<=window.innerHeight-v?i:Math.max(v,a)}),H(t)}function Z(e,t){A(n=>({...n,[e]:t}))}function Ee(e){ae(Y??null,Ce,e=>Z(`fixedModelValue`,e?y(e):``),{anchor:e.currentTarget,noneLabel:h(`agentModelInherit`)})}function De(e){A(t=>({...t,allowedTools:t.allowedTools.includes(e)?t.allowedTools.filter(t=>t!==e):[...t.allowedTools,e]}))}function Oe(){O(null),A(S()),P(``),B(``),E(!0)}function Q(e){O(e.id),A(he(e)),P(``),B(``),E(!0)}function $(){j||F||(E(!1),O(null),A(S()),P(``))}async function ke(){let e=N.trim();if(!e){B(h(`aiFillAgentInputRequired`));return}if(!L){B(h(`aiFillAgentNoModel`));return}I(!0),B(``);try{let t=await w(`/api/agent-profiles/ai-fill`,{method:`POST`,body:JSON.stringify({instruction:e,modelRef:d(L),model:L,thinkingLevel:ye})});A(e=>({...e,name:t.agent.name,label:t.agent.label,description:t.agent.description,systemPrompt:t.agent.systemPrompt}))}catch(e){B(e instanceof Error?e.message:h(`aiFillAgentFailed`))}finally{I(!1)}}async function Ae(){if(!C(k))return;M(!0),B(``);let e=X&&k.thinkingLevel!==`inherit`?`off`:k.thinkingLevel;try{let t=G?.builtin?{model:k.modelMode===`fixed`?b(k.fixedModelValue):{mode:`inherit`},thinkingLevel:e}:ge({...k,thinkingLevel:e});D?await w(`/api/agent-profiles/${encodeURIComponent(D)}`,{method:`PATCH`,body:JSON.stringify(t)}):await w(`/api/agent-profiles`,{method:`POST`,body:JSON.stringify(t)}),$(),await xe()}catch(e){B(e instanceof Error?e.message:h(`requestFailed`))}finally{M(!1)}}async function je(e){if(e.builtin||e.readonly)return;let t=!e.enabledAsSubagent,n=e.enabledAsSubagent;s(n=>n.map(n=>n.id===e.id?{...n,enabledAsSubagent:t}:n)),H(null);try{await w(`/api/agent-profiles/${encodeURIComponent(e.id)}`,{method:`PATCH`,body:JSON.stringify({enabledAsSubagent:t})})}catch(t){s(t=>t.map(t=>t.id===e.id?{...t,enabledAsSubagent:n}:t)),B(t instanceof Error?t.message:h(`requestFailed`))}}async function Me(e){if(!(e.builtin||e.readonly)&&await ie({description:h(`confirmDeleteAgent`),confirmLabel:h(`confirmDelete`),cancelLabel:h(`cancel`),variant:`destructive`})){B(``);try{await w(`/api/agent-profiles/${encodeURIComponent(e.id)}`,{method:`DELETE`}),await xe()}catch(e){B(e instanceof Error?e.message:h(`requestFailed`))}}}return T?(0,_.jsxs)(`div`,{className:`quickforge-settings-stack`,children:[(0,_.jsx)(`div`,{className:`quickforge-settings-heading`,children:(0,_.jsxs)(`h3`,{className:`quickforge-settings-title`,children:[G?.builtin?h(`builtinAgentModelSettings`):h(G?`editAgent`:`createAgent`),(0,_.jsx)(f,{label:G?.builtin?h(`builtinAgentModelOnly`):G?.readonly?h(`readonlyAgentDescription`):h(`agentsDescription`)})]})}),(0,_.jsxs)(`section`,{className:`quickforge-settings-section`,"aria-label":h(G?`editAgent`:`createAgent`),children:[(0,_.jsxs)(`div`,{className:`quickforge-settings-toolbar`,children:[(0,_.jsxs)(`button`,{className:`quickforge-settings-button quickforge-settings-button-secondary`,type:`button`,onClick:$,disabled:j||F,children:[(0,_.jsx)(i,{className:`mr-2 size-4`}),h(`back`)]}),(0,_.jsxs)(`div`,{className:`quickforge-settings-row-main`,children:[(0,_.jsx)(`div`,{className:`quickforge-settings-row-title`,children:G?.builtin?h(`builtinAgentModelSettings`):h(G?`editAgent`:`createAgent`)}),G?.builtin?(0,_.jsx)(`div`,{className:`quickforge-settings-row-description`,children:h(`builtinAgentModelOnly`)}):G?.readonly?(0,_.jsx)(`div`,{className:`quickforge-settings-row-description`,children:h(`readonlyAgentDescription`)}):null]})]}),(0,_.jsx)(`div`,{className:`px-5 py-4`,children:(0,_.jsxs)(`div`,{className:`space-y-4`,children:[(0,_.jsxs)(`div`,{className:`rounded-2xl border border-border bg-muted/20 p-3`,children:[(0,_.jsxs)(`div`,{className:`mb-2 flex items-center gap-2 text-sm font-medium text-foreground`,children:[(0,_.jsx)(a,{className:`size-4 text-primary`}),h(`aiFillAgent`),(0,_.jsx)(f,{label:h(`aiFillAgentDescription`)})]}),(0,_.jsx)(`textarea`,{className:`min-h-20 w-full resize-y rounded-xl border border-input bg-background px-3 py-2 text-sm outline-none transition-colors placeholder:text-muted-foreground/65 focus:border-ring disabled:opacity-60`,value:N,disabled:q||F,onChange:e=>P(e.target.value),placeholder:h(`aiFillAgentPlaceholder`)}),(0,_.jsx)(`div`,{className:`mt-2 flex justify-end`,children:(0,_.jsxs)(m,{variant:`outline`,size:`sm`,onClick:()=>void ke(),disabled:q||F||!N.trim(),children:[(0,_.jsx)(a,{className:`mr-1 size-3.5`}),h(F?`aiFillAgentLoading`:`aiFillAgent`)]})})]}),(0,_.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:[(0,_.jsxs)(`label`,{className:`block text-sm font-medium text-foreground`,children:[h(`agentName`),(0,_.jsx)(`input`,{className:`mt-1 h-10 w-full rounded-md border border-input bg-background px-3 text-sm outline-none focus:border-ring disabled:opacity-60`,value:k.name,disabled:q,onChange:e=>Z(`name`,e.target.value),placeholder:`reviewer`})]}),(0,_.jsxs)(`label`,{className:`block text-sm font-medium text-foreground`,children:[h(`agentLabel`),(0,_.jsx)(`input`,{className:`mt-1 h-10 w-full rounded-md border border-input bg-background px-3 text-sm outline-none focus:border-ring disabled:opacity-60`,value:k.label,disabled:q,onChange:e=>Z(`label`,e.target.value),placeholder:h(`agentLabelPlaceholder`)})]})]}),G?(0,_.jsxs)(`div`,{className:`rounded-xl border border-border bg-muted/20 px-3 py-2 text-sm`,children:[(0,_.jsx)(`div`,{className:`text-xs font-medium text-muted-foreground`,children:h(`agentSourcePath`)}),(0,_.jsx)(`div`,{className:`mt-1 truncate font-mono text-xs text-foreground`,title:G.source?`${G.source}${G.relativePath?` · ${G.relativePath}`:``}`:void 0,children:G.source?`${G.source}${G.relativePath?` · ${G.relativePath}`:``}`:G.builtin?h(`builtinAgent`):`-`})]}):null,(0,_.jsxs)(`label`,{className:`block text-sm font-medium text-foreground`,children:[h(`agentDescription`),(0,_.jsx)(`input`,{className:`mt-1 h-10 w-full rounded-md border border-input bg-background px-3 text-sm outline-none focus:border-ring disabled:opacity-60`,value:k.description,disabled:q,onChange:e=>Z(`description`,e.target.value)})]}),(0,_.jsxs)(`label`,{className:`block text-sm font-medium text-foreground`,children:[h(`agentSystemPrompt`),(0,_.jsx)(`textarea`,{className:`mt-1 min-h-36 w-full resize-y rounded-xl border border-input bg-background px-3 py-2 text-sm outline-none focus:border-ring disabled:opacity-60`,value:k.systemPrompt,disabled:q,onChange:e=>Z(`systemPrompt`,e.target.value)})]}),(0,_.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:[(0,_.jsxs)(`label`,{className:`block text-sm font-medium text-foreground`,children:[h(`agentModelMode`),(0,_.jsxs)(`select`,{className:`mt-1 h-10 w-full rounded-md border border-input bg-background px-3 text-sm outline-none focus:border-ring disabled:opacity-60`,value:k.modelMode,disabled:J,onChange:e=>Z(`modelMode`,e.target.value),children:[(0,_.jsx)(`option`,{value:`inherit`,children:h(`agentModelInherit`)}),(0,_.jsx)(`option`,{value:`fixed`,children:h(`agentModelFixed`)})]})]}),(0,_.jsxs)(`label`,{className:`block text-sm font-medium text-foreground`,children:[h(`agentFixedModel`),(0,_.jsxs)(`select`,{className:`quickforge-model-select-desktop mt-1 h-10 w-full rounded-md border border-input bg-background px-3 text-sm outline-none focus:border-ring disabled:opacity-60`,value:we,disabled:J||k.modelMode!==`fixed`,onChange:e=>Z(`fixedModelValue`,e.target.value),children:[(0,_.jsx)(`option`,{value:``,children:h(`agentModelInherit`)}),Ce.map(e=>(0,_.jsx)(`option`,{value:y(e),children:u(e)},y(e)))]}),(0,_.jsxs)(`button`,{type:`button`,className:`quickforge-model-select-mobile mt-1 flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 text-sm text-left outline-none focus:border-ring disabled:opacity-60`,disabled:J||k.modelMode!==`fixed`,onClick:Ee,children:[(0,_.jsx)(`span`,{className:`truncate`,children:Y?u(Y):h(`agentModelInherit`)}),(0,_.jsx)(n,{className:`ml-2 size-4 shrink-0 text-muted-foreground`})]})]})]}),(0,_.jsxs)(`label`,{className:`block text-sm font-medium text-foreground`,children:[h(`agentThinkingLevel`),(0,_.jsxs)(`select`,{className:`mt-1 h-10 w-full rounded-md border border-input bg-background px-3 text-sm outline-none focus:border-ring disabled:opacity-60`,value:X&&k.thinkingLevel!==`inherit`?`off`:k.thinkingLevel,disabled:J||X,onChange:e=>Z(`thinkingLevel`,e.target.value),children:[(0,_.jsx)(`option`,{value:`inherit`,children:h(`agentThinkingInherit`)}),(0,_.jsx)(`option`,{value:`off`,children:h(`thinkingOff`)}),(0,_.jsx)(`option`,{value:`low`,children:h(`thinkingLow`)}),(0,_.jsx)(`option`,{value:`medium`,children:h(`thinkingMedium`)}),(0,_.jsx)(`option`,{value:`high`,children:h(`thinkingHigh`)}),(0,_.jsx)(`option`,{value:`xhigh`,children:h(`thinkingXHigh`)})]}),(0,_.jsx)(`span`,{className:`mt-1 block text-xs text-muted-foreground`,children:h(X?`agentThinkingUnsupported`:`agentThinkingDescription`)})]}),(0,_.jsxs)(`div`,{children:[(0,_.jsx)(`div`,{className:`mb-2 text-sm font-medium text-foreground`,children:h(`allowedTools`)}),(0,_.jsx)(`div`,{className:`grid gap-2 sm:grid-cols-2`,children:c.map(e=>(0,_.jsxs)(`label`,{className:`flex items-start gap-2 rounded-xl border border-border bg-muted/20 p-3 text-sm disabled:opacity-60`,children:[(0,_.jsx)(`input`,{type:`checkbox`,className:`mt-1`,disabled:q,checked:k.allowedTools.includes(e.name),onChange:()=>De(e.name)}),(0,_.jsxs)(`span`,{children:[(0,_.jsx)(`span`,{className:`font-medium text-foreground`,children:e.label}),(0,_.jsx)(`span`,{className:`ml-2 font-mono text-xs text-muted-foreground`,children:e.name}),e.riskLevel===`dangerous`?(0,_.jsx)(`span`,{className:`ml-2 rounded-full bg-amber-500/10 px-2 py-0.5 text-xs text-amber-700`,children:h(`highRiskTool`)}):null,(0,_.jsx)(`span`,{className:`mt-1 block text-xs text-muted-foreground`,children:e.description})]})]},e.name))})]}),(0,_.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:[(0,_.jsxs)(`label`,{className:`block text-sm font-medium text-foreground`,children:[h(`maxRuntimeMs`),(0,_.jsx)(`input`,{type:`number`,className:`mt-1 h-10 w-full rounded-md border border-input bg-background px-3 text-sm outline-none focus:border-ring disabled:opacity-60`,value:k.maxRuntimeMs,disabled:q,onChange:e=>Z(`maxRuntimeMs`,e.target.value)})]}),(0,_.jsxs)(`label`,{className:`block text-sm font-medium text-foreground`,children:[h(`maxToolCalls`),(0,_.jsx)(`input`,{type:`number`,className:`mt-1 h-10 w-full rounded-md border border-input bg-background px-3 text-sm outline-none focus:border-ring disabled:opacity-60`,value:k.maxToolCalls,disabled:q,onChange:e=>Z(`maxToolCalls`,e.target.value)})]})]}),(0,_.jsxs)(`label`,{className:`flex items-center gap-2 text-sm text-foreground`,children:[(0,_.jsx)(`input`,{type:`checkbox`,checked:k.enabledAsSubagent,disabled:q,onChange:e=>Z(`enabledAsSubagent`,e.target.checked)}),h(`enabledAsSubagent`)]}),z?(0,_.jsx)(`div`,{className:`rounded-md border border-destructive/30 bg-destructive/10 px-3 py-2 text-sm text-destructive`,children:z}):null]})}),(0,_.jsxs)(`div`,{className:`quickforge-settings-divider flex justify-end gap-2 px-5 py-4`,children:[(0,_.jsx)(m,{variant:`outline`,onClick:$,disabled:j||F,children:h(`cancel`)}),(0,_.jsx)(m,{onClick:Ae,disabled:j||F||J||!G?.builtin&&!C(k)||k.modelMode===`fixed`&&!k.fixedModelValue,children:h(`save`)})]})]})]}):(0,_.jsxs)(`div`,{className:`quickforge-settings-stack`,children:[(0,_.jsxs)(`section`,{className:`quickforge-settings-section`,"aria-label":h(`agentsTab`),children:[(0,_.jsxs)(`div`,{className:`quickforge-settings-toolbar`,children:[(0,_.jsxs)(`div`,{className:`quickforge-settings-row-main`,children:[(0,_.jsxs)(`div`,{className:`quickforge-settings-row-title`,children:[(0,_.jsx)(r,{className:`size-4 text-primary`}),h(`agentsTab`)]}),(0,_.jsx)(`div`,{className:`quickforge-settings-row-description`,children:h(`agentsDescription`)})]}),(0,_.jsx)(`button`,{className:`quickforge-settings-button quickforge-settings-button-primary`,type:`button`,onClick:Oe,children:h(`createAgent`)})]}),z?(0,_.jsx)(`div`,{className:`quickforge-settings-alert quickforge-settings-warning-attached`,children:z}):null,e.length===0?(0,_.jsx)(`div`,{className:`quickforge-settings-empty-row`,children:h(`loading`)}):e.map(e=>(0,_.jsxs)(`div`,{className:`quickforge-settings-list-item quickforge-agent-profile-row`,role:`button`,tabIndex:0,onClick:()=>Q(e),onKeyDown:t=>{t.target===t.currentTarget&&(t.key===`Enter`||t.key===` `)&&(t.preventDefault(),Q(e))},children:[(0,_.jsx)(`div`,{className:`quickforge-settings-list-item-main quickforge-agent-profile-row-main`,children:(0,_.jsxs)(`div`,{className:`quickforge-agent-profile-summary`,children:[(0,_.jsx)(`span`,{className:`quickforge-agent-profile-label`,title:e.label,children:e.label}),e.description?(0,_.jsx)(`span`,{className:`quickforge-agent-profile-description`,title:e.description,children:e.description}):null]})}),(0,_.jsxs)(`div`,{className:`quickforge-settings-list-item-actions`,onClick:e=>e.stopPropagation(),children:[(0,_.jsxs)(`label`,{className:`quickforge-settings-switch`,"aria-disabled":e.builtin||e.readonly?`true`:`false`,title:e.enabledAsSubagent?h(`disableAsSubagent`):h(`enableAsSubagent`),children:[(0,_.jsx)(`input`,{type:`checkbox`,checked:e.enabledAsSubagent,disabled:e.builtin||e.readonly,onChange:()=>void je(e)}),(0,_.jsx)(`span`,{"aria-hidden":`true`})]}),(0,_.jsx)(`button`,{className:`quickforge-settings-icon-action`,type:`button`,onClick:t=>Te(t,e.id),title:h(`moreActions`),"aria-label":h(`moreActions`),"aria-haspopup":`menu`,"aria-expanded":V===e.id,children:(0,_.jsx)(o,{className:`size-4`})})]})]},e.id))]}),K&&U?(0,de.createPortal)((0,_.jsxs)(`div`,{className:`fixed z-50 w-36 overflow-hidden rounded-xl border border-border bg-popover py-1 text-sm shadow-quickforge`,style:{left:U.left,top:U.top},role:`menu`,"aria-label":h(`moreActions`),onClick:e=>e.stopPropagation(),children:[(0,_.jsxs)(`button`,{className:`flex w-full items-center gap-2 px-3 py-2 text-left hover:bg-muted disabled:cursor-not-allowed disabled:opacity-50`,type:`button`,role:`menuitem`,disabled:K.readonly&&!K.builtin,onClick:()=>{H(null),W(null),Q(K)},children:[(0,_.jsx)(t,{className:`size-3.5`}),K.builtin?h(`builtinAgentModelSettings`):h(`editTask`)]}),(0,_.jsxs)(`button`,{className:`flex w-full items-center gap-2 px-3 py-2 text-left text-destructive hover:bg-muted disabled:cursor-not-allowed disabled:opacity-50`,type:`button`,role:`menuitem`,disabled:K.builtin||K.readonly,onClick:()=>{H(null),W(null),Me(K)},children:[(0,_.jsx)(ee,{className:`size-3.5`}),h(`delete`)]})]}),document.body):null]})}export{T as AgentProfilesPage};
1
+ import{i as e}from"./rolldown-runtime-DWdDZTNf.js";import{A as t,Nt as n,Rt as r,Wt as i,d as a,mt as o,qt as s,s as ee}from"./icons-2D18YbSI.js";import{i as c,n as l}from"./react-vendor-3UaA-C9W.js";import{t as u}from"./model-display-label-C6-0eDxF.js";import{n as d,t as te}from"./model-reference-o41fJ6jQ.js";import{$t as ne,Qt as re,Tt as ie,at as ae,fn as f,ln as p,mn as m,nn as oe,tn as se,yn as h}from"./index-BTPzyq7d.js";import{i as ce,r as le,t as ue}from"./model-identity-CgA6_Pbm.js";var g=e(s(),1),de=c(),_=l(),fe=144,pe=82,me=4,v=8;function y(e){return JSON.stringify(d(e))}function b(e){if(!e)return{mode:`inherit`};try{return{mode:`fixed`,...JSON.parse(e)}}catch{return{mode:`inherit`}}}function x(e){return!e||e.mode!==`fixed`?``:e.source===`cloud`?JSON.stringify({version:1,source:`cloud`,catalogId:e.catalogId}):e.source===`custom`?JSON.stringify({version:1,source:`custom`,providerId:e.providerId,modelId:e.modelId}):JSON.stringify({version:1,source:`legacy-custom`,provider:e.provider,modelId:e.modelId,...e.api?{api:e.api}:{},...e.baseUrl?{baseUrl:e.baseUrl}:{}})}function S(){return{name:``,label:``,description:``,systemPrompt:``,allowedTools:[`read_file`,`grep_files`],maxRuntimeMs:`3600000`,maxToolCalls:`300`,enabledAsSubagent:!0,modelMode:`inherit`,fixedModelValue:``,thinkingLevel:`inherit`}}function he(e){return{name:e.name,label:e.label,description:e.description??``,systemPrompt:e.systemPrompt??``,allowedTools:e.allowedTools??[],maxRuntimeMs:String(e.maxRuntimeMs??36e5),maxToolCalls:String(e.maxToolCalls??300),enabledAsSubagent:e.enabledAsSubagent,modelMode:e.model?.mode===`fixed`?`fixed`:`inherit`,fixedModelValue:x(e.model),thinkingLevel:e.thinkingLevel??`inherit`}}function ge(e){return{name:e.name.trim().toLowerCase(),label:e.label.trim(),description:e.description.trim(),systemPrompt:e.systemPrompt.trim(),allowedTools:e.allowedTools,maxRuntimeMs:Number(e.maxRuntimeMs||36e5),maxToolCalls:Number(e.maxToolCalls||300),enabledAsSubagent:e.enabledAsSubagent,model:e.modelMode===`fixed`?b(e.fixedModelValue):{mode:`inherit`},thinkingLevel:e.thinkingLevel}}function C(e){return!!(e.name.trim()&&e.label.trim()&&e.allowedTools.length>0)}async function w(e,t){let n=await fetch(e,{...t,headers:{"content-type":`application/json`,...t?.headers}}),r=await n.json().catch(()=>null);if(!n.ok)throw Error(r?.error||`请求失败`);return r}function T(){let[e,s]=(0,g.useState)([]),[c,l]=(0,g.useState)([]),[T,E]=(0,g.useState)(!1),[D,O]=(0,g.useState)(null),[k,A]=(0,g.useState)(()=>S()),[j,M]=(0,g.useState)(!1),[N,P]=(0,g.useState)(``),[F,I]=(0,g.useState)(!1),[L,_e]=(0,g.useState)(),[R,ve]=(0,g.useState)([]),[ye,be]=(0,g.useState)(`off`),[z,B]=(0,g.useState)(``),[V,H]=(0,g.useState)(null),[U,W]=(0,g.useState)(null);async function xe(){let[e,t]=await Promise.all([w(`/api/agent-profiles`),w(`/api/agent-profiles/available-tools`)]);s(e.agents),l(t.tools)}(0,g.useEffect)(()=>{let e=!1;async function t(){try{let[t,n]=await Promise.all([w(`/api/agent-profiles`),w(`/api/agent-profiles/available-tools`)]);if(e)return;s(t.agents),l(n.tools)}catch(t){e||B(t instanceof Error?t.message:h(`requestFailed`))}}return t(),()=>{e=!0}},[]),(0,g.useEffect)(()=>{let e=!1;async function t(){try{let t=await se(),[n,r]=await Promise.all([ne(t),te().catch(()=>[])]),i=r.length?r:n;ve(i);let a=i.filter(p),o=await oe(t),s=(o.model&&p(o.model)?a.find(e=>ce(e,o.model)):void 0)??a[0];if(e)return;_e(s),be(o.thinkingLevel??re(s))}catch{}}return t(),()=>{e=!0}},[]),(0,g.useEffect)(()=>{if(!V)return;let e=()=>{H(null),W(null)},t=t=>{t.key===`Escape`&&e()};return window.addEventListener(`click`,e),window.addEventListener(`blur`,e),window.addEventListener(`resize`,e),window.addEventListener(`scroll`,e,!0),document.addEventListener(`keydown`,t),()=>{window.removeEventListener(`click`,e),window.removeEventListener(`blur`,e),window.removeEventListener(`resize`,e),window.removeEventListener(`scroll`,e,!0),document.removeEventListener(`keydown`,t)}},[V]);let G=(0,g.useMemo)(()=>e.find(e=>e.id===D)??null,[e,D]),K=(0,g.useMemo)(()=>e.find(e=>e.id===V)??null,[e,V]),q=!!G?.readonly,J=!!(G?.readonly&&!G?.builtin),Y=(0,g.useMemo)(()=>{let e=b(k.fixedModelValue);if(e.mode!==`fixed`)return;let t=x(e);return R.find(e=>y(e)===t)??(`provider`in e?R.find(t=>le(t,e)):void 0)},[k.fixedModelValue,R]),Se=(0,g.useMemo)(()=>R.filter(p),[R]),Ce=(0,g.useMemo)(()=>ue(Se,Y),[Se,Y]),we=Y?y(Y):k.fixedModelValue,X=k.modelMode===`fixed`&&!!Y&&Y?.reasoning!==!0;function Te(e,t){if(e.stopPropagation(),V===t){H(null),W(null);return}let n=e.currentTarget.getBoundingClientRect(),r=Math.max(v,Math.min(n.right-fe,window.innerWidth-fe-v)),i=n.bottom+me,a=n.top-me-pe;W({left:r,top:i+pe<=window.innerHeight-v?i:Math.max(v,a)}),H(t)}function Z(e,t){A(n=>({...n,[e]:t}))}function Ee(e){ae(Y??null,Ce,e=>Z(`fixedModelValue`,e?y(e):``),{anchor:e.currentTarget,noneLabel:h(`agentModelInherit`)})}function De(e){A(t=>({...t,allowedTools:t.allowedTools.includes(e)?t.allowedTools.filter(t=>t!==e):[...t.allowedTools,e]}))}function Oe(){O(null),A(S()),P(``),B(``),E(!0)}function Q(e){O(e.id),A(he(e)),P(``),B(``),E(!0)}function $(){j||F||(E(!1),O(null),A(S()),P(``))}async function ke(){let e=N.trim();if(!e){B(h(`aiFillAgentInputRequired`));return}if(!L){B(h(`aiFillAgentNoModel`));return}I(!0),B(``);try{let t=await w(`/api/agent-profiles/ai-fill`,{method:`POST`,body:JSON.stringify({instruction:e,modelRef:d(L),model:L,thinkingLevel:ye})});A(e=>({...e,name:t.agent.name,label:t.agent.label,description:t.agent.description,systemPrompt:t.agent.systemPrompt}))}catch(e){B(e instanceof Error?e.message:h(`aiFillAgentFailed`))}finally{I(!1)}}async function Ae(){if(!C(k))return;M(!0),B(``);let e=X&&k.thinkingLevel!==`inherit`?`off`:k.thinkingLevel;try{let t=G?.builtin?{model:k.modelMode===`fixed`?b(k.fixedModelValue):{mode:`inherit`},thinkingLevel:e}:ge({...k,thinkingLevel:e});D?await w(`/api/agent-profiles/${encodeURIComponent(D)}`,{method:`PATCH`,body:JSON.stringify(t)}):await w(`/api/agent-profiles`,{method:`POST`,body:JSON.stringify(t)}),$(),await xe()}catch(e){B(e instanceof Error?e.message:h(`requestFailed`))}finally{M(!1)}}async function je(e){if(e.builtin||e.readonly)return;let t=!e.enabledAsSubagent,n=e.enabledAsSubagent;s(n=>n.map(n=>n.id===e.id?{...n,enabledAsSubagent:t}:n)),H(null);try{await w(`/api/agent-profiles/${encodeURIComponent(e.id)}`,{method:`PATCH`,body:JSON.stringify({enabledAsSubagent:t})})}catch(t){s(t=>t.map(t=>t.id===e.id?{...t,enabledAsSubagent:n}:t)),B(t instanceof Error?t.message:h(`requestFailed`))}}async function Me(e){if(!(e.builtin||e.readonly)&&await ie({description:h(`confirmDeleteAgent`),confirmLabel:h(`confirmDelete`),cancelLabel:h(`cancel`),variant:`destructive`})){B(``);try{await w(`/api/agent-profiles/${encodeURIComponent(e.id)}`,{method:`DELETE`}),await xe()}catch(e){B(e instanceof Error?e.message:h(`requestFailed`))}}}return T?(0,_.jsxs)(`div`,{className:`quickforge-settings-stack`,children:[(0,_.jsx)(`div`,{className:`quickforge-settings-heading`,children:(0,_.jsxs)(`h3`,{className:`quickforge-settings-title`,children:[G?.builtin?h(`builtinAgentModelSettings`):h(G?`editAgent`:`createAgent`),(0,_.jsx)(f,{label:G?.builtin?h(`builtinAgentModelOnly`):G?.readonly?h(`readonlyAgentDescription`):h(`agentsDescription`)})]})}),(0,_.jsxs)(`section`,{className:`quickforge-settings-section`,"aria-label":h(G?`editAgent`:`createAgent`),children:[(0,_.jsxs)(`div`,{className:`quickforge-settings-toolbar`,children:[(0,_.jsxs)(`button`,{className:`quickforge-settings-button quickforge-settings-button-secondary`,type:`button`,onClick:$,disabled:j||F,children:[(0,_.jsx)(i,{className:`mr-2 size-4`}),h(`back`)]}),(0,_.jsxs)(`div`,{className:`quickforge-settings-row-main`,children:[(0,_.jsx)(`div`,{className:`quickforge-settings-row-title`,children:G?.builtin?h(`builtinAgentModelSettings`):h(G?`editAgent`:`createAgent`)}),G?.builtin?(0,_.jsx)(`div`,{className:`quickforge-settings-row-description`,children:h(`builtinAgentModelOnly`)}):G?.readonly?(0,_.jsx)(`div`,{className:`quickforge-settings-row-description`,children:h(`readonlyAgentDescription`)}):null]})]}),(0,_.jsx)(`div`,{className:`px-5 py-4`,children:(0,_.jsxs)(`div`,{className:`space-y-4`,children:[(0,_.jsxs)(`div`,{className:`rounded-2xl border border-border bg-muted/20 p-3`,children:[(0,_.jsxs)(`div`,{className:`mb-2 flex items-center gap-2 text-sm font-medium text-foreground`,children:[(0,_.jsx)(a,{className:`size-4 text-primary`}),h(`aiFillAgent`),(0,_.jsx)(f,{label:h(`aiFillAgentDescription`)})]}),(0,_.jsx)(`textarea`,{className:`min-h-20 w-full resize-y rounded-xl border border-input bg-background px-3 py-2 text-sm outline-none transition-colors placeholder:text-muted-foreground/65 focus:border-ring disabled:opacity-60`,value:N,disabled:q||F,onChange:e=>P(e.target.value),placeholder:h(`aiFillAgentPlaceholder`)}),(0,_.jsx)(`div`,{className:`mt-2 flex justify-end`,children:(0,_.jsxs)(m,{variant:`outline`,size:`sm`,onClick:()=>void ke(),disabled:q||F||!N.trim(),children:[(0,_.jsx)(a,{className:`mr-1 size-3.5`}),h(F?`aiFillAgentLoading`:`aiFillAgent`)]})})]}),(0,_.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:[(0,_.jsxs)(`label`,{className:`block text-sm font-medium text-foreground`,children:[h(`agentName`),(0,_.jsx)(`input`,{className:`mt-1 h-10 w-full rounded-md border border-input bg-background px-3 text-sm outline-none focus:border-ring disabled:opacity-60`,value:k.name,disabled:q,onChange:e=>Z(`name`,e.target.value),placeholder:`reviewer`})]}),(0,_.jsxs)(`label`,{className:`block text-sm font-medium text-foreground`,children:[h(`agentLabel`),(0,_.jsx)(`input`,{className:`mt-1 h-10 w-full rounded-md border border-input bg-background px-3 text-sm outline-none focus:border-ring disabled:opacity-60`,value:k.label,disabled:q,onChange:e=>Z(`label`,e.target.value),placeholder:h(`agentLabelPlaceholder`)})]})]}),G?(0,_.jsxs)(`div`,{className:`rounded-xl border border-border bg-muted/20 px-3 py-2 text-sm`,children:[(0,_.jsx)(`div`,{className:`text-xs font-medium text-muted-foreground`,children:h(`agentSourcePath`)}),(0,_.jsx)(`div`,{className:`mt-1 truncate font-mono text-xs text-foreground`,title:G.source?`${G.source}${G.relativePath?` · ${G.relativePath}`:``}`:void 0,children:G.source?`${G.source}${G.relativePath?` · ${G.relativePath}`:``}`:G.builtin?h(`builtinAgent`):`-`})]}):null,(0,_.jsxs)(`label`,{className:`block text-sm font-medium text-foreground`,children:[h(`agentDescription`),(0,_.jsx)(`input`,{className:`mt-1 h-10 w-full rounded-md border border-input bg-background px-3 text-sm outline-none focus:border-ring disabled:opacity-60`,value:k.description,disabled:q,onChange:e=>Z(`description`,e.target.value)})]}),(0,_.jsxs)(`label`,{className:`block text-sm font-medium text-foreground`,children:[h(`agentSystemPrompt`),(0,_.jsx)(`textarea`,{className:`mt-1 min-h-36 w-full resize-y rounded-xl border border-input bg-background px-3 py-2 text-sm outline-none focus:border-ring disabled:opacity-60`,value:k.systemPrompt,disabled:q,onChange:e=>Z(`systemPrompt`,e.target.value)})]}),(0,_.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:[(0,_.jsxs)(`label`,{className:`block text-sm font-medium text-foreground`,children:[h(`agentModelMode`),(0,_.jsxs)(`select`,{className:`mt-1 h-10 w-full rounded-md border border-input bg-background px-3 text-sm outline-none focus:border-ring disabled:opacity-60`,value:k.modelMode,disabled:J,onChange:e=>Z(`modelMode`,e.target.value),children:[(0,_.jsx)(`option`,{value:`inherit`,children:h(`agentModelInherit`)}),(0,_.jsx)(`option`,{value:`fixed`,children:h(`agentModelFixed`)})]})]}),(0,_.jsxs)(`label`,{className:`block text-sm font-medium text-foreground`,children:[h(`agentFixedModel`),(0,_.jsxs)(`select`,{className:`quickforge-model-select-desktop mt-1 h-10 w-full rounded-md border border-input bg-background px-3 text-sm outline-none focus:border-ring disabled:opacity-60`,value:we,disabled:J||k.modelMode!==`fixed`,onChange:e=>Z(`fixedModelValue`,e.target.value),children:[(0,_.jsx)(`option`,{value:``,children:h(`agentModelInherit`)}),Ce.map(e=>(0,_.jsx)(`option`,{value:y(e),children:u(e)},y(e)))]}),(0,_.jsxs)(`button`,{type:`button`,className:`quickforge-model-select-mobile mt-1 flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 text-sm text-left outline-none focus:border-ring disabled:opacity-60`,disabled:J||k.modelMode!==`fixed`,onClick:Ee,children:[(0,_.jsx)(`span`,{className:`truncate`,children:Y?u(Y):h(`agentModelInherit`)}),(0,_.jsx)(n,{className:`ml-2 size-4 shrink-0 text-muted-foreground`})]})]})]}),(0,_.jsxs)(`label`,{className:`block text-sm font-medium text-foreground`,children:[h(`agentThinkingLevel`),(0,_.jsxs)(`select`,{className:`mt-1 h-10 w-full rounded-md border border-input bg-background px-3 text-sm outline-none focus:border-ring disabled:opacity-60`,value:X&&k.thinkingLevel!==`inherit`?`off`:k.thinkingLevel,disabled:J||X,onChange:e=>Z(`thinkingLevel`,e.target.value),children:[(0,_.jsx)(`option`,{value:`inherit`,children:h(`agentThinkingInherit`)}),(0,_.jsx)(`option`,{value:`off`,children:h(`thinkingOff`)}),(0,_.jsx)(`option`,{value:`low`,children:h(`thinkingLow`)}),(0,_.jsx)(`option`,{value:`medium`,children:h(`thinkingMedium`)}),(0,_.jsx)(`option`,{value:`high`,children:h(`thinkingHigh`)}),(0,_.jsx)(`option`,{value:`xhigh`,children:h(`thinkingXHigh`)})]}),(0,_.jsx)(`span`,{className:`mt-1 block text-xs text-muted-foreground`,children:h(X?`agentThinkingUnsupported`:`agentThinkingDescription`)})]}),(0,_.jsxs)(`div`,{children:[(0,_.jsx)(`div`,{className:`mb-2 text-sm font-medium text-foreground`,children:h(`allowedTools`)}),(0,_.jsx)(`div`,{className:`grid gap-2 sm:grid-cols-2`,children:c.map(e=>(0,_.jsxs)(`label`,{className:`flex items-start gap-2 rounded-xl border border-border bg-muted/20 p-3 text-sm disabled:opacity-60`,children:[(0,_.jsx)(`input`,{type:`checkbox`,className:`mt-1`,disabled:q,checked:k.allowedTools.includes(e.name),onChange:()=>De(e.name)}),(0,_.jsxs)(`span`,{children:[(0,_.jsx)(`span`,{className:`font-medium text-foreground`,children:e.label}),(0,_.jsx)(`span`,{className:`ml-2 font-mono text-xs text-muted-foreground`,children:e.name}),e.riskLevel===`dangerous`?(0,_.jsx)(`span`,{className:`ml-2 rounded-full bg-amber-500/10 px-2 py-0.5 text-xs text-amber-700`,children:h(`highRiskTool`)}):null,(0,_.jsx)(`span`,{className:`mt-1 block text-xs text-muted-foreground`,children:e.description})]})]},e.name))})]}),(0,_.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:[(0,_.jsxs)(`label`,{className:`block text-sm font-medium text-foreground`,children:[h(`maxRuntimeMs`),(0,_.jsx)(`input`,{type:`number`,className:`mt-1 h-10 w-full rounded-md border border-input bg-background px-3 text-sm outline-none focus:border-ring disabled:opacity-60`,value:k.maxRuntimeMs,disabled:q,onChange:e=>Z(`maxRuntimeMs`,e.target.value)})]}),(0,_.jsxs)(`label`,{className:`block text-sm font-medium text-foreground`,children:[h(`maxToolCalls`),(0,_.jsx)(`input`,{type:`number`,className:`mt-1 h-10 w-full rounded-md border border-input bg-background px-3 text-sm outline-none focus:border-ring disabled:opacity-60`,value:k.maxToolCalls,disabled:q,onChange:e=>Z(`maxToolCalls`,e.target.value)})]})]}),(0,_.jsxs)(`label`,{className:`flex items-center gap-2 text-sm text-foreground`,children:[(0,_.jsx)(`input`,{type:`checkbox`,checked:k.enabledAsSubagent,disabled:q,onChange:e=>Z(`enabledAsSubagent`,e.target.checked)}),h(`enabledAsSubagent`)]}),z?(0,_.jsx)(`div`,{className:`rounded-md border border-destructive/30 bg-destructive/10 px-3 py-2 text-sm text-destructive`,children:z}):null]})}),(0,_.jsxs)(`div`,{className:`quickforge-settings-divider flex justify-end gap-2 px-5 py-4`,children:[(0,_.jsx)(m,{variant:`outline`,onClick:$,disabled:j||F,children:h(`cancel`)}),(0,_.jsx)(m,{onClick:Ae,disabled:j||F||J||!G?.builtin&&!C(k)||k.modelMode===`fixed`&&!k.fixedModelValue,children:h(`save`)})]})]})]}):(0,_.jsxs)(`div`,{className:`quickforge-settings-stack`,children:[(0,_.jsxs)(`section`,{className:`quickforge-settings-section`,"aria-label":h(`agentsTab`),children:[(0,_.jsxs)(`div`,{className:`quickforge-settings-toolbar`,children:[(0,_.jsxs)(`div`,{className:`quickforge-settings-row-main`,children:[(0,_.jsxs)(`div`,{className:`quickforge-settings-row-title`,children:[(0,_.jsx)(r,{className:`size-4 text-primary`}),h(`agentsTab`)]}),(0,_.jsx)(`div`,{className:`quickforge-settings-row-description`,children:h(`agentsDescription`)})]}),(0,_.jsx)(`button`,{className:`quickforge-settings-button quickforge-settings-button-primary`,type:`button`,onClick:Oe,children:h(`createAgent`)})]}),z?(0,_.jsx)(`div`,{className:`quickforge-settings-alert quickforge-settings-warning-attached`,children:z}):null,e.length===0?(0,_.jsx)(`div`,{className:`quickforge-settings-empty-row`,children:h(`loading`)}):e.map(e=>(0,_.jsxs)(`div`,{className:`quickforge-settings-list-item quickforge-agent-profile-row`,role:`button`,tabIndex:0,onClick:()=>Q(e),onKeyDown:t=>{t.target===t.currentTarget&&(t.key===`Enter`||t.key===` `)&&(t.preventDefault(),Q(e))},children:[(0,_.jsx)(`div`,{className:`quickforge-settings-list-item-main quickforge-agent-profile-row-main`,children:(0,_.jsxs)(`div`,{className:`quickforge-agent-profile-summary`,children:[(0,_.jsx)(`span`,{className:`quickforge-agent-profile-label`,title:e.label,children:e.label}),e.description?(0,_.jsx)(`span`,{className:`quickforge-agent-profile-description`,title:e.description,children:e.description}):null]})}),(0,_.jsxs)(`div`,{className:`quickforge-settings-list-item-actions`,onClick:e=>e.stopPropagation(),children:[(0,_.jsxs)(`label`,{className:`quickforge-settings-switch`,"aria-disabled":e.builtin||e.readonly?`true`:`false`,title:e.enabledAsSubagent?h(`disableAsSubagent`):h(`enableAsSubagent`),children:[(0,_.jsx)(`input`,{type:`checkbox`,checked:e.enabledAsSubagent,disabled:e.builtin||e.readonly,onChange:()=>void je(e)}),(0,_.jsx)(`span`,{"aria-hidden":`true`})]}),(0,_.jsx)(`button`,{className:`quickforge-settings-icon-action`,type:`button`,onClick:t=>Te(t,e.id),title:h(`moreActions`),"aria-label":h(`moreActions`),"aria-haspopup":`menu`,"aria-expanded":V===e.id,children:(0,_.jsx)(o,{className:`size-4`})})]})]},e.id))]}),K&&U?(0,de.createPortal)((0,_.jsxs)(`div`,{className:`fixed z-50 w-36 overflow-hidden rounded-xl border border-border bg-popover py-1 text-sm shadow-quickforge`,style:{left:U.left,top:U.top},role:`menu`,"aria-label":h(`moreActions`),onClick:e=>e.stopPropagation(),children:[(0,_.jsxs)(`button`,{className:`flex w-full items-center gap-2 px-3 py-2 text-left hover:bg-muted disabled:cursor-not-allowed disabled:opacity-50`,type:`button`,role:`menuitem`,disabled:K.readonly&&!K.builtin,onClick:()=>{H(null),W(null),Q(K)},children:[(0,_.jsx)(t,{className:`size-3.5`}),K.builtin?h(`builtinAgentModelSettings`):h(`editTask`)]}),(0,_.jsxs)(`button`,{className:`flex w-full items-center gap-2 px-3 py-2 text-left text-destructive hover:bg-muted disabled:cursor-not-allowed disabled:opacity-50`,type:`button`,role:`menuitem`,disabled:K.builtin||K.readonly,onClick:()=>{H(null),W(null),Me(K)},children:[(0,_.jsx)(ee,{className:`size-3.5`}),h(`delete`)]})]}),document.body):null]})}export{T as AgentProfilesPage};
@@ -1,4 +1,4 @@
1
- import{i as e}from"./rolldown-runtime-DWdDZTNf.js";import{qt as t}from"./icons-2D18YbSI.js";import{n}from"./react-vendor-3UaA-C9W.js";import{d as r,p as i,t as a}from"./lit-vendor-DvaQX_UQ.js";import{g as o,h as s,y as c}from"./pi-web-ui-DV5jKjSg.js";import{n as l}from"./model-display-label-C6-0eDxF.js";import{r as u}from"./model-reference-o41fJ6jQ.js";import{At as d,Dt as f,Et as p,Gt as m,Jt as h,Kt as g,Ot as _,Wt as v,Xt as y,Yt as b,d as x,k as S,n as C,o as w,qt as T,r as E,rt as D,t as O,xt as ee,yn as k,z as te}from"./index-BivLuZvX.js";import{t as A}from"./plugin-api-Uu2xAB4d.js";import{n as j,r as M,t as N}from"./mermaid-renderer-jEbqFaTe.js";var P=e(t(),1);function F(e){return!!(e&&typeof e==`object`&&!Array.isArray(e))}function ne(e,t,n){if(!e||e.isError||t||!F(e.details))return``;let r=e.details.action,i=e.details.status,a=e.details.markdown;if(typeof a!=`string`)return``;if(r===`read`){if(a)return a;if(i===`empty`||i===void 0)return n(`memoryContentEmpty`)}return r===`write`&&(i===`saved`||i===void 0)?n(`memoryContentSaved`):``}function I(e){return!!(e&&typeof e==`object`&&!Array.isArray(e))}function re(e){let t=new Set;for(let n of e)!I(n)||n.role!==`assistant`||!Array.isArray(n.content)||n.content.forEach(e=>{I(e)&&e.type===`toolCall`&&typeof e.id==`string`&&t.add(e.id)});return e.filter(e=>I(e)&&(e.role===`assistant`||e.role===`toolResult`&&typeof e.toolCallId==`string`&&t.has(e.toolCallId)))}var ie=/^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}\.(?:png|jpg|webp|gif)$/i,ae=new Set([`image/png`,`image/jpeg`,`image/webp`,`image/gif`]);function oe(e){return!!(e&&typeof e==`object`&&!Array.isArray(e))}function se(e){if(!oe(e)||e.type!==`generated_image_result`||typeof e.sessionId!=`string`||!e.sessionId||typeof e.prompt!=`string`||typeof e.model!=`string`||!Array.isArray(e.assets))return null;let t=e.assets.flatMap(e=>!oe(e)||typeof e.assetId!=`string`||!ie.test(e.assetId)||typeof e.mimeType!=`string`||!ae.has(e.mimeType)||typeof e.size!=`number`||!Number.isFinite(e.size)||e.size<0?[]:[{assetId:e.assetId,mimeType:e.mimeType,size:e.size}]);return t.length?{type:`generated_image_result`,sessionId:e.sessionId,prompt:e.prompt,model:e.model,assets:t,...typeof e.text==`string`&&e.text?{text:e.text}:{}}:null}function ce(e,t,n=window.location.pathname){let r=n.match(/^\/share\/([^/]+)\/?$/)?.[1];return r?`/api/shared/${encodeURIComponent(decodeURIComponent(r))}/assets/${encodeURIComponent(t.assetId)}`:`/api/session-assets/${encodeURIComponent(e.sessionId)}/${encodeURIComponent(t.assetId)}`}var L={maxHeight:`28rem`,overflow:`auto`,border:`1px solid color-mix(in oklab, var(--border) 75%, transparent)`,borderRadius:`0.75rem`,background:`color-mix(in oklab, var(--muted) 28%, transparent)`,fontFamily:`var(--font-mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace)`,fontSize:`0.78rem`,lineHeight:`1.45`},le={minHeight:`1.35em`,padding:`0 0.75rem`,whiteSpace:`pre`},ue={display:`inline-flex`,alignItems:`center`,borderRadius:`999px`,padding:`0.05rem 0.45rem`,fontFamily:`var(--font-mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace)`,fontSize:`0.72rem`,fontWeight:`650`};function R(e,t){let n=V(e?.details)?e.details:void 0;return e?.isError||n?.aborted===!0||n?.timedOut===!0?`error`:t?`running`:e?`done`:`called`}function z(e){if(e==null)return``;if(typeof e==`string`)try{return JSON.stringify(JSON.parse(e),null,2)}catch{return e}try{return JSON.stringify(e,null,2)}catch{return String(e)}}function B(e){return e?.content?.filter(e=>e.type===`text`).map(e=>e.text??``).join(`
1
+ import{i as e}from"./rolldown-runtime-DWdDZTNf.js";import{qt as t}from"./icons-2D18YbSI.js";import{n}from"./react-vendor-3UaA-C9W.js";import{d as r,p as i,t as a}from"./lit-vendor-DvaQX_UQ.js";import{g as o,h as s,y as c}from"./pi-web-ui-DV5jKjSg.js";import{n as l}from"./model-display-label-C6-0eDxF.js";import{r as u}from"./model-reference-o41fJ6jQ.js";import{At as d,Dt as f,Et as p,Gt as m,Jt as h,Kt as g,Ot as _,Wt as v,Xt as y,Yt as b,d as x,k as S,n as C,o as w,qt as T,r as E,rt as D,t as O,xt as ee,yn as k,z as te}from"./index-BTPzyq7d.js";import{t as A}from"./plugin-api-Uu2xAB4d.js";import{n as j,r as M,t as N}from"./mermaid-renderer-jEbqFaTe.js";var P=e(t(),1);function F(e){return!!(e&&typeof e==`object`&&!Array.isArray(e))}function ne(e,t,n){if(!e||e.isError||t||!F(e.details))return``;let r=e.details.action,i=e.details.status,a=e.details.markdown;if(typeof a!=`string`)return``;if(r===`read`){if(a)return a;if(i===`empty`||i===void 0)return n(`memoryContentEmpty`)}return r===`write`&&(i===`saved`||i===void 0)?n(`memoryContentSaved`):``}function I(e){return!!(e&&typeof e==`object`&&!Array.isArray(e))}function re(e){let t=new Set;for(let n of e)!I(n)||n.role!==`assistant`||!Array.isArray(n.content)||n.content.forEach(e=>{I(e)&&e.type===`toolCall`&&typeof e.id==`string`&&t.add(e.id)});return e.filter(e=>I(e)&&(e.role===`assistant`||e.role===`toolResult`&&typeof e.toolCallId==`string`&&t.has(e.toolCallId)))}var ie=/^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}\.(?:png|jpg|webp|gif)$/i,ae=new Set([`image/png`,`image/jpeg`,`image/webp`,`image/gif`]);function oe(e){return!!(e&&typeof e==`object`&&!Array.isArray(e))}function se(e){if(!oe(e)||e.type!==`generated_image_result`||typeof e.sessionId!=`string`||!e.sessionId||typeof e.prompt!=`string`||typeof e.model!=`string`||!Array.isArray(e.assets))return null;let t=e.assets.flatMap(e=>!oe(e)||typeof e.assetId!=`string`||!ie.test(e.assetId)||typeof e.mimeType!=`string`||!ae.has(e.mimeType)||typeof e.size!=`number`||!Number.isFinite(e.size)||e.size<0?[]:[{assetId:e.assetId,mimeType:e.mimeType,size:e.size}]);return t.length?{type:`generated_image_result`,sessionId:e.sessionId,prompt:e.prompt,model:e.model,assets:t,...typeof e.text==`string`&&e.text?{text:e.text}:{}}:null}function ce(e,t,n=window.location.pathname){let r=n.match(/^\/share\/([^/]+)\/?$/)?.[1];return r?`/api/shared/${encodeURIComponent(decodeURIComponent(r))}/assets/${encodeURIComponent(t.assetId)}`:`/api/session-assets/${encodeURIComponent(e.sessionId)}/${encodeURIComponent(t.assetId)}`}var L={maxHeight:`28rem`,overflow:`auto`,border:`1px solid color-mix(in oklab, var(--border) 75%, transparent)`,borderRadius:`0.75rem`,background:`color-mix(in oklab, var(--muted) 28%, transparent)`,fontFamily:`var(--font-mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace)`,fontSize:`0.78rem`,lineHeight:`1.45`},le={minHeight:`1.35em`,padding:`0 0.75rem`,whiteSpace:`pre`},ue={display:`inline-flex`,alignItems:`center`,borderRadius:`999px`,padding:`0.05rem 0.45rem`,fontFamily:`var(--font-mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace)`,fontSize:`0.72rem`,fontWeight:`650`};function R(e,t){let n=V(e?.details)?e.details:void 0;return e?.isError||n?.aborted===!0||n?.timedOut===!0?`error`:t?`running`:e?`done`:`called`}function z(e){if(e==null)return``;if(typeof e==`string`)try{return JSON.stringify(JSON.parse(e),null,2)}catch{return e}try{return JSON.stringify(e,null,2)}catch{return String(e)}}function B(e){return e?.content?.filter(e=>e.type===`text`).map(e=>e.text??``).join(`
2
2
  `)??``}function V(e){return!!(e&&typeof e==`object`&&!Array.isArray(e))}function de(e,t){let n=V(e?.__quickforgeAcp)?e.__quickforgeAcp:void 0,r=V(t)?t:void 0;return(V(r?.__quickforgeAcp)?r.__quickforgeAcp:void 0)??n}function H(e){if(!e||!(`__quickforgeAcp`in e))return e;let{__quickforgeAcp:t,...n}=e;return n}function fe(e){if(!V(e)||!(`__quickforgeAcp`in e))return e;let{__quickforgeAcp:t,...n}=e;return n}function pe(e,t){if(e.running===!0||t)return`Status: running`;let n=[e.timedOut?`timed out`:null,e.aborted?`aborted`:null].filter(Boolean),r=n.length?` (${n.join(`, `)})`:``;return`Exit code: ${e.code??`unknown`}${typeof e.signal==`string`&&e.signal?`, signal: ${e.signal}`:``}${r}`}function me(e,t,n){let r=V(t)?t:void 0,i=typeof r?.command==`string`?r.command:typeof e?.command==`string`?e.command:``;if(!i||!r)return``;let a=typeof r?.stdout_preview==`string`?r.stdout_preview:typeof r?.stdout==`string`?r.stdout:``,o=typeof r?.stderr_preview==`string`?r.stderr_preview:typeof r?.stderr==`string`?r.stderr:``,s=!!(a||o),c=r.running===!0||r.code!==void 0||r.signal!==void 0||r.timedOut===!0||r.aborted===!0;return!s&&!c&&!n?``:[`Command: ${i}`,pe(r,n),``,`STDOUT:`,a||`(empty)`,``,`STDERR:`,o||`(empty)`].join(`
3
3
  `)}function U(e,t,n,r){let i=B(n);return e===`manage_global_memory`?ne(n,r,k)||i:i||(e===`run_command`?me(t,n?.details,r):``)}function he(e,t){return V(e)&&typeof e[t]==`string`?e[t]:``}function ge(e,t,n){if(!t&&!n?.details)return``;if(e===`run_command`&&typeof t?.command==`string`)return t.command;if(e===`generate_image`){let e=typeof t?.prompt==`string`?t.prompt.trim():``;return e.length>100?`${e.slice(0,100)}…`:e}if(e===`present_files`){let e=(Array.isArray(t?.files)?t.files:Array.isArray(n?.details&&n.details.files)?(n?.details).files:[]).map(e=>typeof e==`string`?e:V(e)&&typeof e.path==`string`?e.path:``).filter(Boolean);return e.length?e.slice(0,3).join(`, `)+(e.length>3?` +${e.length-3}`:``):``}if(e===`grep_files`){let e=typeof t?.query==`string`&&t.query?t.query:he(n?.details,`query`),r=typeof t?.path==`string`&&t.path?t.path:he(n?.details,`path`)||`.`,i=t?.regex||V(n?.details)&&V(n.details.searchOptions)&&n.details.searchOptions.regex?`regex`:`text`,a=r&&r!==`.`?` in ${r}`:` in current workspace`;return e?`${i}: ${e}${a}`:`searching${a}`}return e===`activate_skill`&&typeof t?.name==`string`?t.name:e===`read_skill_resource`&&typeof t?.path==`string`||t&&`path`in t&&typeof t.path==`string`?t.path:t&&`query`in t&&typeof t.query==`string`?t.query:t&&`search_query`in t&&typeof t.search_query==`string`?t.search_query:``}function _e(e){if(!e||typeof e!=`object`)return;let t=e.diff;if(!t||typeof t!=`object`)return;let n=t;return typeof n.text==`string`?n:void 0}function ve(e){if(!e||typeof e!=`object`)return e;let t=e,n=t.diff;if(!n||typeof n!=`object`)return e;let{text:r,...i}=n;return{...t,diff:i}}function ye(e){if(!e||typeof e!=`object`)return{};let t=e;return{sessionId:typeof t.sessionId==`string`?t.sessionId:void 0,toolCallId:typeof t.toolCallId==`string`?t.toolCallId:void 0}}async function be(e,t,n){let r=n.getAttribute(`aria-label`)||k(`terminateCommand`);n.disabled=!0,n.setAttribute(`aria-label`,k(`commandTerminateRequested`)),n.setAttribute(`title`,k(`commandTerminateRequested`));try{let n=await fetch(`/api/agents/${encodeURIComponent(e)}/abort-tool`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({toolCallId:t})});if(!n.ok)throw Error(`HTTP ${n.status}`)}catch{n.disabled=!1,n.setAttribute(`aria-label`,r),n.setAttribute(`title`,k(`terminateCommandTitle`))}}function xe(e){return e.startsWith(`+++`)||e.startsWith(`---`)?`quickforge-diff-file`:e.startsWith(`@@`)?`quickforge-diff-hunk`:e.startsWith(`+`)?`quickforge-diff-add`:e.startsWith(`-`)?`quickforge-diff-del`:`quickforge-diff-context`}function Se(e){return e.startsWith(`+++`)||e.startsWith(`---`)?{...le,background:`color-mix(in oklab, var(--muted) 48%, transparent)`,color:`color-mix(in oklab, var(--muted-foreground) 88%, transparent)`}:e.startsWith(`@@`)?{...le,background:`color-mix(in oklab, rgb(37 99 235) 10%, transparent)`,color:`rgb(37 99 235)`}:e.startsWith(`+`)?{...le,background:`color-mix(in oklab, rgb(34 197 94) 16%, transparent)`,color:`rgb(22 101 52)`}:e.startsWith(`-`)?{...le,background:`color-mix(in oklab, rgb(239 68 68) 14%, transparent)`,color:`rgb(153 27 27)`}:{...le,color:`var(--foreground)`}}function Ce(e,t){if(e!==`write_file`&&e!==`edit_file`||!t)return r;let n=Number(t.addedLines??0),o=Number(t.removedLines??0);return i`
4
4
  <span class="quickforge-tool-meta-hover shrink-0 inline-flex items-center gap-1" title="+${n} -${o}">
@@ -1 +1 @@
1
- import{i as e}from"./rolldown-runtime-DWdDZTNf.js";import{C as t,G as n,K as r,S as i,X as ee,_ as te,_t as ne,a as re,b as ie,c as ae,p as oe,pt as se,qt as a,xt as ce,yt as le}from"./icons-2D18YbSI.js";import{n as o}from"./react-vendor-3UaA-C9W.js";import{$ as ue,B as de,G as fe,H as s,J as pe,K as me,Q as he,Tt as c,U as ge,V as _e,W as ve,X as ye,Y as be,Z as xe,_n as Se,et as Ce,hn as we,mn as l,nt as u,q as Te,tt as Ee,vn as d,yn as f}from"./index-BivLuZvX.js";var p=e(a(),1);function m(e,t=`cloudRequestFailed`){return e instanceof s?e.code===`cloud_session_active`?f(`cloudSessionActiveGuidance`):e.code===`cloud_disabled`?f(`cloudDisabledError`):e.code===`cloud_local_only`?f(`cloudLocalOnlyError`):e.code===`cloud_configuration_error`||e.code===`cloud_not_configured`?f(`cloudConfigurationError`):e.code===`cloud_session_service_mismatch`?f(`cloudSessionServiceMismatch`):[`expired_token`,`device_code_expired`,`expired`].includes(e.code)?f(`cloudDeviceFlowExpiredError`):[`access_denied`,`authorization_declined`,`denied`].includes(e.code)?f(`cloudDeviceFlowDeniedError`):[`refresh_token_reused`,`installation_revoked`,`invalid_refresh_token`,`cloud_not_connected`].includes(e.code)?f(`cloudSessionExpired`):Se()===`en`&&e.message.trim()?e.message:e.status>0?f(`cloudRequestFailedWithStatus`,{status:e.status}):f(t):f(t)}var De={usage:void 0,installations:[],models:[],errors:{},loading:!1};function Oe(e,t){return t.type===`replace`?t.state:{...De,loading:t.type===`begin`}}async function ke(e,t){let[n,r,i]=await Promise.allSettled([e.usage(),e.installations(),e.models()]);return{usage:n.status===`fulfilled`?n.value:void 0,installations:r.status===`fulfilled`?r.value:[],models:i.status===`fulfilled`?i.value:[],errors:{...n.status===`rejected`?{usage:t(`usage`,n.reason)}:{},...r.status===`rejected`?{installations:t(`installations`,r.reason)}:{},...i.status===`rejected`?{models:t(`models`,i.reason)}:{}},loading:!1}}function Ae({loading:e,loadError:t,status:n,details:r}){if(e&&!n)return`loading`;if(t)return`load-error`;if(!n?.configured)return`unconfigured`;if(n.sessionServiceMismatch)return`session-mismatch`;if(n.pendingDeviceFlow)return n.hasSession?`connected`:`no-session`;if(!n.hasSession)return`no-session`;let i=Object.values(r.errors);return n.cloudAvailable===!1||i.length===3&&i.every(e=>e?.unavailable)?`cloud-unavailable`:i.length>0?`partial-details`:`connected`}function je(e){let t=e?.configured===!0,n=t&&e.hasSession===!0,r=n&&e.sessionServiceMismatch!==!0;return{showDeviceFlow:t&&!!e.pendingDeviceFlow,showDisconnectedActions:t&&!e.pendingDeviceFlow&&!n,showDetails:r}}function Me(e){return e===`starting`||e===`authorizing`}function Ne(e,t){return!!(e?.hasSession&&(t||e.sessionServiceMismatch))}async function Pe(e,t){await t.reset(),t.onIdentityReset?.();try{return{status:`success`,config:await t.save(e)}}catch(e){return{status:`url-save-failed`,error:e}}}var h=o();function g(e){if(!e)return f(`cloudNotAvailable`);let t=new Date(e);return Number.isNaN(t.getTime())?f(`cloudNotAvailable`):t.toLocaleString(d())}function _(e){let t=e.id||e.installationId;return typeof t==`string`?t:``}function v(e){let t=e.name||e.installationName;return typeof t==`string`&&t?t:f(`cloudUnnamedDevice`)}function Fe(e){return typeof e==`number`&&Number.isFinite(e)?e.toLocaleString(d()):f(`cloudNotAvailable`)}function Ie(e){return f(e===`saved`?`cloudConfigSourceSaved`:e===`env`?`cloudConfigSourceEnv`:`cloudConfigSourceDefault`)}function y(e){let t=String(e||``).toLowerCase();return t===`localhost`||t.endsWith(`.localhost`)||t.startsWith(`127.`)?!0:t===`::1`}function b(e){let t=e.trim();if(!t)return``;let n;try{n=new URL(t)}catch{return f(`cloudUrlInvalid`)}return n.protocol!==`https:`&&n.protocol!==`http:`?f(`cloudUrlInvalidProtocol`):y(n.hostname)&&n.port===`8081`?f(`cloudUrlAdminPort`):``}function x(e){if(!e||typeof e!=`object`)return f(`cloudConnectionUnknown`);let t=e;return t.ok===!0||t.status===`ok`||t.ready===!0?f(`cloudConnectionOk`):f(`cloudConnectionError`)}function S(e){if(!e||typeof e!=`object`)return!1;let t=e;return t.ok===!0||t.status===`ok`||t.ready===!0}function Le(e,t){let n=x(t);return(0,h.jsxs)(`span`,{className:we(`quickforge-settings-badge`,n===f(`cloudConnectionUnknown`)?`quickforge-settings-badge-muted`:S(t)?`quickforge-settings-badge-success`:`quickforge-settings-badge-danger`),children:[e,`: `,n]})}function Re(e){let t=e.quickforgeCapabilities;return[t?.tools?f(`cloudCapabilityTools`):void 0,t?.vision?f(`cloudCapabilityVision`):void 0,t?.reasoning?f(`cloudCapabilityReasoning`):void 0].filter(Boolean).join(` · `)||f(`cloudCapabilityText`)}function ze(e){return f(e?e===`disabled`?`cloudRemoteStatusDisabled`:e===`unavailable`?`cloudRemoteStatusUnavailable`:e===`stopped`?`cloudRemoteStatusStopped`:e===`starting`?`cloudRemoteStatusStarting`:e===`authorizing`?`cloudRemoteStatusAuthorizing`:e===`running`?`cloudRemoteStatusRunning`:e===`conflict`?`cloudRemoteStatusConflict`:`cloudRemoteStatusError`:`cloudRemoteStatusLoading`)}function Be(e,t){let n=e===`usage`?`cloudUsageLoadFailed`:e===`installations`?`cloudDevicesLoadFailed`:`cloudModelsLoadFailed`,r=m(t);return{message:r===f(`cloudRequestFailed`)?f(n):r,unavailable:!(`code`in Object(t))||[`cloud_request_failed`,`cloud_unavailable`].includes(String(t?.code||``))}}function C({error:e,onRetry:n,disabled:r}){return(0,h.jsxs)(`div`,{className:`p-4 text-sm`,children:[(0,h.jsx)(`div`,{className:`quickforge-settings-error`,children:e.message}),(0,h.jsxs)(l,{type:`button`,variant:`outline`,size:`sm`,className:`mt-3`,onClick:n,disabled:r,children:[(0,h.jsx)(t,{className:`mr-2 size-4`}),f(`retry`)]})]})}function w(){let[e,a]=(0,p.useState)(),[o,s]=(0,p.useState)(``),[Se,d]=(0,p.useState)(!1),[y,x]=(0,p.useState)(),[S,w]=(0,p.useState)(),[T,Ve]=(0,p.useState)(),[E,D]=(0,p.useReducer)(Oe,De),[O,He]=(0,p.useState)(!0),[k,A]=(0,p.useState)(``),[Ue,j]=(0,p.useState)(``),[M,N]=(0,p.useState)(``),[We,P]=(0,p.useState)(``),[Ge,Ke]=(0,p.useState)(0),F=(0,p.useRef)(0),I=(0,p.useRef)(0),L=S?.pendingDeviceFlow,R=L?Math.max(0,Math.ceil((L.expiresAt-Ge)/1e3)):0,z=(0,p.useCallback)(()=>D({type:`clear`}),[]),B=(0,p.useCallback)(async()=>{let e=++I.current;try{let t=await Te();e===I.current&&Ve(t)}catch{}},[]),V=(0,p.useCallback)(async(e=!0,t=!1,n=!0)=>{let r=++F.current;e&&He(!0),N(``),D({type:`begin`}),n&&B();try{let[e,n]=await Promise.all([ve(),pe()]);if(r!==F.current)return;if(a(e),t||s(e.cloudUrl),w(n),!e.enabled||!n.configured||!n.hasSession||n.sessionServiceMismatch){z();return}let i=await ke({usage:be,installations:fe,models:me},Be);if(r!==F.current)return;D({type:`replace`,state:i})}catch(e){if(r!==F.current)return;a(void 0),w(void 0),z(),N(m(e,`cloudLoadFailed`))}finally{r===F.current&&He(!1)}},[z,B]);(0,p.useEffect)(()=>{let e=window.setTimeout(()=>{V()},0);return()=>{window.clearTimeout(e),F.current+=1,I.current+=1}},[V]),(0,p.useEffect)(()=>{if(!e?.enabled||!Me(T?.status))return;let t=window.setInterval(()=>{B()},1750);return()=>window.clearInterval(t)},[e?.enabled,B,T?.status]),(0,p.useEffect)(()=>{let e=()=>{document.visibilityState===`visible`&&B()};return document.addEventListener(`visibilitychange`,e),()=>document.removeEventListener(`visibilitychange`,e)},[B]),(0,p.useEffect)(()=>{if(!e?.enabled||!S?.pendingDeviceFlow)return;let t=()=>Ke(Date.now()),n=window.setTimeout(t,0),r=window.setInterval(t,1e3);return()=>{window.clearTimeout(n),window.clearInterval(r)}},[e?.enabled,S?.pendingDeviceFlow]),(0,p.useEffect)(()=>{let t=S?.pendingDeviceFlow;if(!e?.enabled||!t||R>0)return;let n=window.setTimeout(()=>{V(!1)},0);return()=>window.clearTimeout(n)},[e?.enabled,R,V,S?.pendingDeviceFlow]),(0,p.useEffect)(()=>{let t=S?.pendingDeviceFlow;if(!e?.enabled||!t||k===`device-start`||k===`device-cancel`)return;let n=Math.max(1,Number(t.interval)||5)*1e3,r=window.setTimeout(async()=>{try{let e=await xe();w(e),e.deviceFlowResult===`success`?(window.dispatchEvent(new Event(_e)),N(``),j(f(`cloudDeviceFlowSucceeded`)),await Promise.all([V(!1,!1,!1),B()])):e.deviceFlowResult===`denied`?N(f(`cloudDeviceFlowDenied`)):e.deviceFlowResult===`expired`?N(f(`cloudDeviceFlowExpired`)):e.deviceFlowResult===`network`&&N(f(`cloudDeviceFlowNetwork`))}catch(e){N(m(e))}},n);return()=>window.clearTimeout(r)},[k,e?.enabled,V,B,S?.pendingDeviceFlow]);let H=()=>window.dispatchEvent(new Event(_e)),qe=async()=>{if(!k){if(b(o)){d(!0);return}A(`test`),j(``),N(``),x(void 0);try{let e=await Ee(o);s(e.cloudUrl),x(e),j(f(`cloudConnectionTestSucceeded`))}catch(e){N(m(e,`cloudConnectionFailed`))}finally{A(``)}}},Je=async()=>{if(!k){if(b(o)){d(!0);return}A(`save`),j(``),N(``);try{let e=await u({cloudUrl:o});a(e),s(e.cloudUrl),x(void 0),P(``),H(),j(f(`cloudConnectionSaved`)),await V(!1)}catch(e){N(m(e))}finally{A(``)}}},Ye=async t=>{if(!(k||!e||e.enabled===t)){A(`cloud-toggle`),j(``),N(``),P(``);try{let e=await u({enabled:t});a(e),s(e.cloudUrl),x(void 0),e.enabled||z(),H(),j(f(e.enabled?`cloudServiceEnabledSaved`:`cloudServiceDisabledSaved`)),await V(!1)}catch(e){N(m(e))}finally{A(``)}}},Xe=async()=>{let t=o.trim()||e?.cloudUrl||``;if(b(t)){d(!0);return}if(!(!await c({title:f(`cloudForceSwitchTitle`),description:f(`cloudForceSwitchDescription`),confirmLabel:f(`cloudForceSwitchConfirm`),cancelLabel:f(`cancel`),variant:`destructive`})||k||!t)){A(`force-switch`),j(``),N(``),P(``);try{let e=await Pe(t,{reset:he,save:e=>u({cloudUrl:e}),onIdentityReset:()=>{F.current+=1,w(e=>e&&{...e,mode:`local`,hasSession:!1,sessionServiceMismatch:!1}),z(),H()}});if(e.status===`url-save-failed`){let t=m(e.error);P(f(`cloudIdentityRebuiltUrlSaveFailed`)),await V(!1,!0),N(t);return}a(e.config),s(e.config.cloudUrl),x(void 0),H(),j(f(`cloudForceSwitchSucceeded`)),await V(!1)}catch(e){N(m(e))}finally{A(``)}}},Ze=async()=>{if(!k){A(`device-start`),j(``),N(``),P(``);try{w(await Ce()),H()}catch(e){N(m(e))}finally{A(``)}}},Qe=async()=>{if(!k){A(`device-cancel`),j(``),N(``);try{w(await ge()),j(f(`cloudDeviceFlowCancelled`))}catch(e){N(m(e))}finally{A(``)}}},$e=async()=>{let e=S?.pendingDeviceFlow?.userCode;if(e)try{await navigator.clipboard.writeText(e),j(f(`cloudDeviceCodeCopied`))}catch{N(f(`copyFailed`))}},et=async()=>{if(!(!await c({title:f(`cloudLogoutTitle`),description:f(`cloudLogoutDescription`),confirmLabel:f(`cloudLogout`),cancelLabel:f(`cancel`),variant:`destructive`})||k)){A(`logout`),j(``),N(``),P(``);try{await ye(),F.current+=1,z(),w(e=>e&&{...e,mode:`local`,hasSession:!1,sessionServiceMismatch:!1}),H(),j(f(`cloudLoggedOut`)),await V(!1)}catch(e){N(m(e))}finally{A(``)}}},tt=async e=>{let t=_(e);if(!(!t||t===S?.installationId||k)&&await c({description:f(`cloudRevokeDeviceConfirm`,{name:v(e)}),confirmLabel:f(`cloudRevokeDevice`),cancelLabel:f(`cancel`),variant:`destructive`})){A(t),j(``),N(``);try{await ue(t),D({type:`replace`,state:{...E,installations:E.installations.filter(e=>_(e)!==t)}}),j(f(`cloudDeviceRevoked`))}catch(e){N(m(e))}finally{A(``)}}},U=e?.enabled===!0,nt=!!(S?.configured&&S.hasSession),W=S?.sessionServiceMismatch===!0,G=nt&&!W,K=!!(e?.cloudUrl&&o.trim()&&e.cloudUrl!==o.trim()),q=b(o),J=!!(q&&Se),rt=Ae({loading:O,loadError:M,status:S,details:E}),Y=je(S),X=rt===`cloud-unavailable`,it=W?f(`cloudSessionMismatchLabel`):S?.mode===`account`?f(`cloudFormalAccount`):f(`cloudNotConnected`),at=ze(T?.status),ot=T?.status===`running`?`quickforge-settings-badge-success`:T?.status===`authorizing`||T?.status===`starting`?`quickforge-settings-badge-info`:T?.status===`error`||T?.status===`conflict`?`quickforge-settings-badge-warning`:`quickforge-settings-badge-muted`,st=U?S?.configured?f(W?`cloudSessionServiceMismatch`:G?X?`cloudUnavailableDescription`:`cloudConnectedDescription`:`cloudLocalOnlyDescription`):f(`cloudNotConfiguredDescription`):f(`cloudServiceDisabledDescription`),Z=()=>{V()},Q=O||E.loading,$=new Map;for(let e of E.installations){let t=v(e);$.set(t,($.get(t)??0)+1)}let ct=[...$.entries()].filter(([,e])=>e>1),lt=ct.reduce((e,[,t])=>e+t,0);return(0,h.jsxs)(`div`,{className:`quickforge-settings-stack`,children:[(0,h.jsxs)(`div`,{className:`quickforge-settings-heading`,children:[(0,h.jsx)(`div`,{children:(0,h.jsxs)(`h2`,{className:`quickforge-settings-title`,children:[(0,h.jsx)(ce,{className:`size-5`}),f(`cloudAccount`)]})}),(0,h.jsxs)(l,{variant:`outline`,size:`sm`,onClick:()=>void V(),disabled:O||!!k,className:`quickforge-settings-heading-action`,children:[(0,h.jsx)(t,{className:`mr-2 size-4 ${O?`animate-spin`:``}`}),f(`refresh`)]})]}),Ue?(0,h.jsx)(`div`,{className:`quickforge-settings-message`,children:Ue}):null,We?(0,h.jsx)(`div`,{className:`quickforge-settings-warning`,children:We}):null,M?(0,h.jsx)(`div`,{className:`quickforge-settings-error`,children:M}):null,(0,h.jsxs)(`div`,{className:`quickforge-settings-section`,children:[(0,h.jsxs)(`div`,{className:`quickforge-settings-list-header`,children:[(0,h.jsxs)(`div`,{className:`quickforge-settings-row-title`,children:[(0,h.jsx)(te,{className:`size-4`}),f(`cloudServiceConnection`)]}),(0,h.jsx)(`span`,{className:`quickforge-settings-badge quickforge-settings-badge-info shrink-0`,children:`QuickForge Cloud`})]}),(0,h.jsxs)(`div`,{className:`quickforge-settings-row`,children:[(0,h.jsxs)(`div`,{className:`quickforge-settings-row-main`,children:[(0,h.jsx)(`div`,{className:`quickforge-settings-row-title`,children:f(`cloudServiceEnabled`)}),(0,h.jsx)(`div`,{className:`quickforge-settings-row-description`,children:f(`cloudServiceEnabledDescription`)})]}),(0,h.jsx)(`div`,{className:`quickforge-settings-row-control`,children:(0,h.jsxs)(`label`,{className:`quickforge-settings-switch`,"aria-label":f(`cloudServiceEnabled`),children:[(0,h.jsx)(`input`,{type:`checkbox`,checked:U,disabled:!e||!!k,onChange:e=>{Ye(e.target.checked)}}),(0,h.jsx)(`span`,{"aria-hidden":`true`})]})})]}),(0,h.jsxs)(`div`,{className:`quickforge-settings-row items-start`,children:[(0,h.jsx)(`div`,{className:`quickforge-settings-row-main`,children:(0,h.jsx)(`label`,{className:`quickforge-settings-row-title h-9 whitespace-nowrap`,htmlFor:`quickforge-cloud-url`,children:f(`cloudUrl`)})}),(0,h.jsxs)(`div`,{className:`quickforge-settings-row-control w-full max-w-xl flex-col items-stretch gap-2`,children:[(0,h.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,h.jsx)(de,{id:`quickforge-cloud-url`,value:o,onChange:e=>s(e.target.value),onKeyDown:e=>{e.key===`Enter`&&o.trim()&&K&&!k&&(e.preventDefault(),Je())},placeholder:f(`cloudUrlPlaceholder`),inputMode:`url`,autoCapitalize:`none`,autoCorrect:`off`,spellCheck:!1,onBlur:()=>d(!0),"aria-invalid":J,className:we(`min-w-0 flex-1`,J?`border-destructive`:void 0),disabled:!!k}),(0,h.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2`,children:[(0,h.jsxs)(l,{variant:`outline`,size:`sm`,onClick:()=>void qe(),disabled:!o.trim()||!!q||!!k,children:[k===`test`?(0,h.jsx)(t,{className:`mr-2 size-4 animate-spin`}):(0,h.jsx)(ae,{className:`mr-2 size-4`}),f(`cloudTestConnection`)]}),(0,h.jsxs)(l,{size:`sm`,onClick:()=>void Je(),disabled:!o.trim()||!K||!!q||!!k,children:[k===`save`?(0,h.jsx)(t,{className:`mr-2 size-4 animate-spin`}):(0,h.jsx)(ie,{className:`mr-2 size-4`}),f(`saveChanges`)]})]})]}),J?(0,h.jsx)(`div`,{className:`text-xs text-destructive`,children:q}):null,(0,h.jsxs)(`div`,{className:`text-xs text-muted-foreground`,children:[f(`cloudConfigSource`),`: `,Ie(e?.source)]}),Ne(S,K)&&!q?(0,h.jsx)(`div`,{className:`quickforge-settings-cloud-force-switch flex justify-end`,children:(0,h.jsxs)(l,{variant:`destructive`,size:`sm`,onClick:()=>void Xe(),disabled:!!k,title:f(`cloudForceSwitchDescription`),children:[(0,h.jsx)(i,{className:`mr-2 size-4`}),f(`cloudForceSwitch`)]})}):null]})]}),e?.configurationError?(0,h.jsx)(`div`,{className:`quickforge-settings-error m-3`,children:f(`cloudConfigurationError`)}):null,y?(0,h.jsxs)(`div`,{className:`quickforge-settings-row`,children:[(0,h.jsxs)(`div`,{className:`quickforge-settings-row-main`,children:[(0,h.jsx)(`div`,{className:`quickforge-settings-row-title`,children:f(`cloudConnectionTestResult`)}),(0,h.jsx)(`div`,{className:`quickforge-settings-row-description break-all`,children:y.cloudUrl})]}),(0,h.jsxs)(`div`,{className:`quickforge-settings-row-control flex-wrap justify-end gap-1.5`,children:[Le(f(`cloudHealth`),y.health),Le(f(`cloudReady`),y.ready)]})]}):null]}),U?(0,h.jsxs)(`div`,{className:`quickforge-settings-section`,children:[(0,h.jsxs)(`div`,{className:`quickforge-settings-row`,children:[(0,h.jsxs)(`div`,{className:`quickforge-settings-row-main`,children:[(0,h.jsxs)(`div`,{className:`quickforge-settings-row-title`,children:[(0,h.jsx)(ee,{className:`size-4`}),f(`cloudRemoteAccess`)]}),(0,h.jsx)(`div`,{className:`quickforge-settings-row-description`,children:f(`cloudRemoteAccessDescription`)})]}),(0,h.jsx)(`div`,{className:`quickforge-settings-row-control`,children:(0,h.jsx)(`span`,{className:`quickforge-settings-badge ${ot}`,children:at})})]}),T?.serverUrl?(0,h.jsxs)(`div`,{className:`quickforge-settings-row`,children:[(0,h.jsx)(`div`,{className:`quickforge-settings-row-main`,children:(0,h.jsx)(`div`,{className:`quickforge-settings-row-title`,children:f(`cloudRemoteServerUrl`)})}),(0,h.jsx)(`div`,{className:`quickforge-settings-row-control break-all text-sm text-muted-foreground`,children:T.serverUrl})]}):null,T?.pid?(0,h.jsxs)(`div`,{className:`quickforge-settings-row`,children:[(0,h.jsx)(`div`,{className:`quickforge-settings-row-main`,children:(0,h.jsx)(`div`,{className:`quickforge-settings-row-title`,children:f(`cloudRemotePid`)})}),(0,h.jsx)(`div`,{className:`quickforge-settings-row-control text-sm font-medium`,children:T.pid})]}):null,T?.status===`authorizing`&&T.verificationUriComplete?(0,h.jsxs)(`div`,{className:`quickforge-settings-row`,children:[(0,h.jsx)(`div`,{className:`quickforge-settings-row-main`,children:(0,h.jsx)(`div`,{className:`quickforge-settings-row-title`,children:f(`cloudRemoteAuthorization`)})}),(0,h.jsx)(`div`,{className:`quickforge-settings-row-control`,children:(0,h.jsxs)(`a`,{className:`inline-flex items-center gap-1 text-sm text-primary hover:underline`,href:T.verificationUriComplete,target:`_blank`,rel:`noreferrer`,children:[f(`cloudRemoteOpenAuthorization`),(0,h.jsx)(se,{className:`size-3.5`})]})})]}):null,T?.error?(0,h.jsx)(`div`,{className:`quickforge-settings-warning quickforge-settings-warning-attached`,children:T.error}):null]}):null,(0,h.jsxs)(`div`,{className:`quickforge-settings-section`,children:[(0,h.jsxs)(`div`,{className:`quickforge-settings-row`,children:[(0,h.jsxs)(`div`,{className:`quickforge-settings-row-main`,children:[(0,h.jsxs)(`div`,{className:`quickforge-settings-row-title`,children:[(0,h.jsx)(oe,{className:`size-4`}),f(`cloudIdentityStatus`)]}),(0,h.jsx)(`div`,{className:`quickforge-settings-row-description`,children:st})]}),(0,h.jsx)(`div`,{className:`quickforge-settings-row-control`,children:(0,h.jsx)(`span`,{className:`quickforge-settings-badge ${G&&!X?`quickforge-settings-badge-success`:W||X?`quickforge-settings-badge-warning`:`quickforge-settings-badge-muted`}`,children:it})})]}),X?(0,h.jsx)(`div`,{className:`quickforge-settings-warning quickforge-settings-warning-attached`,children:f(`cloudUnavailableDescription`)}):null,W?(0,h.jsx)(`div`,{className:`quickforge-settings-warning quickforge-settings-warning-attached`,children:f(`cloudSessionServiceMismatch`)}):null,G?(0,h.jsxs)(h.Fragment,{children:[S?.mode===`account`?(0,h.jsxs)(h.Fragment,{children:[(0,h.jsxs)(`div`,{className:`quickforge-settings-row`,children:[(0,h.jsx)(`div`,{className:`quickforge-settings-row-main`,children:(0,h.jsx)(`div`,{className:`quickforge-settings-row-title`,children:f(`cloudAccountEmail`)})}),(0,h.jsx)(`div`,{className:`quickforge-settings-row-control text-sm font-medium`,children:S.account?.email||f(`cloudNotAvailable`)})]}),(0,h.jsxs)(`div`,{className:`quickforge-settings-row`,children:[(0,h.jsx)(`div`,{className:`quickforge-settings-row-main`,children:(0,h.jsx)(`div`,{className:`quickforge-settings-row-title`,children:f(`cloudAccountPlan`)})}),(0,h.jsx)(`div`,{className:`quickforge-settings-row-control text-sm font-medium`,children:S.account?.plan||f(`cloudNotAvailable`)})]})]}):null,U?E.errors.usage?(0,h.jsx)(C,{error:E.errors.usage,onRetry:Z,disabled:Q||!!k}):(0,h.jsxs)(h.Fragment,{children:[(0,h.jsxs)(`div`,{className:`quickforge-settings-row`,children:[(0,h.jsx)(`div`,{className:`quickforge-settings-row-main`,children:(0,h.jsx)(`div`,{className:`quickforge-settings-row-title`,children:f(`cloudRemainingQuota`)})}),(0,h.jsx)(`div`,{className:`quickforge-settings-row-control text-sm font-medium`,children:Fe(E.usage?.remaining)})]}),(0,h.jsxs)(`div`,{className:`quickforge-settings-row`,children:[(0,h.jsx)(`div`,{className:`quickforge-settings-row-main`,children:(0,h.jsx)(`div`,{className:`quickforge-settings-row-title`,children:f(`cloudQuotaExpiresAt`)})}),(0,h.jsx)(`div`,{className:`quickforge-settings-row-control text-sm text-muted-foreground`,children:g(E.usage?.resetsAt||E.usage?.expiresAt)})]})]}):null,(0,h.jsxs)(`div`,{className:`quickforge-settings-row`,children:[(0,h.jsxs)(`div`,{className:`quickforge-settings-row-main`,children:[(0,h.jsx)(`div`,{className:`quickforge-settings-row-title`,children:f(`cloudLogout`)}),(0,h.jsx)(`div`,{className:`quickforge-settings-row-description`,children:f(`cloudLogoutRowDescription`)})]}),(0,h.jsx)(`div`,{className:`quickforge-settings-row-control`,children:(0,h.jsxs)(l,{variant:`destructive`,className:`quickforge-settings-cloud-logout`,onClick:()=>void et(),disabled:!!k,children:[(0,h.jsx)(n,{className:`mr-2 size-4`}),f(`cloudLogout`)]})})]})]}):null]}),!U||!S?.configured?null:Y.showDeviceFlow&&L?(0,h.jsxs)(`div`,{className:`quickforge-settings-section`,children:[(0,h.jsxs)(`div`,{className:`quickforge-settings-list-header`,children:[(0,h.jsxs)(`div`,{className:`quickforge-settings-row-main`,children:[(0,h.jsxs)(`div`,{className:`quickforge-settings-row-title`,children:[(0,h.jsx)(re,{className:`size-4`}),f(`cloudDeviceFlowTitle`)]}),(0,h.jsx)(`div`,{className:`quickforge-settings-row-description`,children:f(`cloudDeviceFlowDescription`)})]}),(0,h.jsx)(`span`,{className:`quickforge-settings-badge quickforge-settings-badge-info`,children:f(`cloudDeviceFlowCountdown`,{seconds:R})})]}),(0,h.jsxs)(`div`,{className:`quickforge-settings-row items-start`,children:[(0,h.jsxs)(`div`,{className:`quickforge-settings-row-main`,children:[(0,h.jsx)(`div`,{className:`quickforge-settings-row-description`,children:f(`cloudDeviceCode`)}),(0,h.jsx)(`div`,{className:`mt-1 font-mono text-2xl font-semibold tracking-[0.18em] text-foreground`,children:L.userCode})]}),(0,h.jsxs)(`div`,{className:`quickforge-settings-row-control flex-wrap gap-2`,children:[(0,h.jsxs)(l,{variant:`outline`,size:`sm`,onClick:()=>void $e(),children:[(0,h.jsx)(le,{className:`mr-2 size-4`}),f(`copy`)]}),(0,h.jsxs)(l,{size:`sm`,onClick:()=>window.open(L.verificationUriComplete||L.verificationUri,`_blank`,`noopener,noreferrer`),children:[(0,h.jsx)(se,{className:`mr-2 size-4`}),f(`cloudOpenVerificationPage`)]}),(0,h.jsx)(l,{variant:`outline`,size:`sm`,onClick:()=>void Qe(),disabled:!!k,children:f(`cancel`)})]})]}),S.deviceFlowResult===`slow_down`?(0,h.jsx)(`div`,{className:`quickforge-settings-warning quickforge-settings-warning-attached`,children:f(`cloudDeviceFlowSlowDown`)}):null]}):Y.showDisconnectedActions?(0,h.jsx)(`div`,{className:`quickforge-settings-section`,children:(0,h.jsxs)(`div`,{className:`quickforge-settings-row`,children:[(0,h.jsxs)(`div`,{className:`quickforge-settings-row-main`,children:[(0,h.jsxs)(`div`,{className:`quickforge-settings-row-title`,children:[(0,h.jsx)(re,{className:`size-4`}),f(`cloudLoginOrRegister`)]}),(0,h.jsx)(`div`,{className:`quickforge-settings-row-description`,children:f(`cloudLoginOrRegisterDescription`)})]}),(0,h.jsx)(`div`,{className:`quickforge-settings-row-control`,children:(0,h.jsxs)(l,{onClick:()=>void Ze(),disabled:O||!!k,children:[(0,h.jsx)(r,{className:`mr-2 size-4`}),f(`cloudLoginOrRegister`)]})})]})}):Y.showDetails?(0,h.jsxs)(h.Fragment,{children:[(0,h.jsxs)(`div`,{className:`quickforge-settings-section`,children:[(0,h.jsx)(`div`,{className:`quickforge-settings-list-header`,children:(0,h.jsxs)(`div`,{className:`quickforge-settings-row-title`,children:[(0,h.jsx)(ne,{className:`size-4`}),f(`cloudModels`)]})}),E.errors.models?(0,h.jsx)(C,{error:E.errors.models,onRetry:Z,disabled:Q||!!k}):E.models.length===0?(0,h.jsx)(`div`,{className:`p-6 text-center text-sm text-muted-foreground`,children:f(Q?`loading`:`cloudNoModels`)}):E.models.map(e=>(0,h.jsx)(`div`,{className:`quickforge-settings-list-item`,children:(0,h.jsxs)(`div`,{className:`quickforge-settings-list-item-main`,children:[(0,h.jsx)(`div`,{className:`text-sm font-medium`,children:e.name||e.id}),(0,h.jsxs)(`div`,{className:`quickforge-settings-row-description`,children:[e.id,` · `,Re(e)]})]})},`${e.provider}:${e.id}`))]}),(0,h.jsxs)(`div`,{className:`quickforge-settings-section`,children:[(0,h.jsx)(`div`,{className:`quickforge-settings-list-header`,children:(0,h.jsxs)(`div`,{className:`quickforge-settings-row-title`,children:[(0,h.jsx)(ee,{className:`size-4`}),f(`cloudDevices`)]})}),lt>1?(0,h.jsx)(`div`,{className:`quickforge-settings-warning quickforge-settings-warning-attached`,children:f(`cloudDuplicateDevicesHint`,{count:lt,name:ct[0][0]})}):null,E.errors.installations?(0,h.jsx)(C,{error:E.errors.installations,onRetry:Z,disabled:Q||!!k}):E.installations.length===0?(0,h.jsx)(`div`,{className:`p-6 text-center text-sm text-muted-foreground`,children:f(Q?`loading`:`cloudNoDevices`)}):E.installations.map(e=>{let t=_(e),n=e.current===!0||t===S?.installationId;return(0,h.jsxs)(`div`,{className:`quickforge-settings-list-item`,children:[(0,h.jsxs)(`div`,{className:`quickforge-settings-list-item-main`,children:[(0,h.jsxs)(`div`,{className:`flex min-w-0 flex-wrap items-center gap-2`,children:[(0,h.jsx)(`div`,{className:`truncate text-sm font-medium`,children:v(e)}),n?(0,h.jsx)(`span`,{className:`quickforge-settings-badge quickforge-settings-badge-info`,children:f(`cloudCurrentDevice`)}):null]}),(0,h.jsx)(`div`,{className:`quickforge-settings-row-description`,children:[e.platform,e.createdAt?`${f(`cloudRegisteredAt`)} ${g(e.createdAt)}`:void 0,e.lastSeenAt?`${f(`cloudLastSeenAt`)} ${g(e.lastSeenAt)}`:void 0,t?`#${t.slice(0,8)}`:void 0].filter(Boolean).join(` · `)||f(`cloudNotAvailable`)})]}),(0,h.jsx)(`div`,{className:`quickforge-settings-list-item-actions`,children:(0,h.jsx)(l,{variant:`outline`,size:`sm`,onClick:()=>void tt(e),disabled:n||!!k,children:f(`cloudRevokeDevice`)})})]},t||v(e))})]})]}):null]})}export{w as CloudAccountSettingsPage};
1
+ import{i as e}from"./rolldown-runtime-DWdDZTNf.js";import{C as t,G as n,K as r,S as i,X as ee,_ as te,_t as ne,a as re,b as ie,c as ae,p as oe,pt as se,qt as a,xt as ce,yt as le}from"./icons-2D18YbSI.js";import{n as o}from"./react-vendor-3UaA-C9W.js";import{$ as ue,B as de,G as fe,H as s,J as pe,K as me,Q as he,Tt as c,U as ge,V as _e,W as ve,X as ye,Y as be,Z as xe,_n as Se,et as Ce,hn as we,mn as l,nt as u,q as Te,tt as Ee,vn as d,yn as f}from"./index-BTPzyq7d.js";var p=e(a(),1);function m(e,t=`cloudRequestFailed`){return e instanceof s?e.code===`cloud_session_active`?f(`cloudSessionActiveGuidance`):e.code===`cloud_disabled`?f(`cloudDisabledError`):e.code===`cloud_local_only`?f(`cloudLocalOnlyError`):e.code===`cloud_configuration_error`||e.code===`cloud_not_configured`?f(`cloudConfigurationError`):e.code===`cloud_session_service_mismatch`?f(`cloudSessionServiceMismatch`):[`expired_token`,`device_code_expired`,`expired`].includes(e.code)?f(`cloudDeviceFlowExpiredError`):[`access_denied`,`authorization_declined`,`denied`].includes(e.code)?f(`cloudDeviceFlowDeniedError`):[`refresh_token_reused`,`installation_revoked`,`invalid_refresh_token`,`cloud_not_connected`].includes(e.code)?f(`cloudSessionExpired`):Se()===`en`&&e.message.trim()?e.message:e.status>0?f(`cloudRequestFailedWithStatus`,{status:e.status}):f(t):f(t)}var De={usage:void 0,installations:[],models:[],errors:{},loading:!1};function Oe(e,t){return t.type===`replace`?t.state:{...De,loading:t.type===`begin`}}async function ke(e,t){let[n,r,i]=await Promise.allSettled([e.usage(),e.installations(),e.models()]);return{usage:n.status===`fulfilled`?n.value:void 0,installations:r.status===`fulfilled`?r.value:[],models:i.status===`fulfilled`?i.value:[],errors:{...n.status===`rejected`?{usage:t(`usage`,n.reason)}:{},...r.status===`rejected`?{installations:t(`installations`,r.reason)}:{},...i.status===`rejected`?{models:t(`models`,i.reason)}:{}},loading:!1}}function Ae({loading:e,loadError:t,status:n,details:r}){if(e&&!n)return`loading`;if(t)return`load-error`;if(!n?.configured)return`unconfigured`;if(n.sessionServiceMismatch)return`session-mismatch`;if(n.pendingDeviceFlow)return n.hasSession?`connected`:`no-session`;if(!n.hasSession)return`no-session`;let i=Object.values(r.errors);return n.cloudAvailable===!1||i.length===3&&i.every(e=>e?.unavailable)?`cloud-unavailable`:i.length>0?`partial-details`:`connected`}function je(e){let t=e?.configured===!0,n=t&&e.hasSession===!0,r=n&&e.sessionServiceMismatch!==!0;return{showDeviceFlow:t&&!!e.pendingDeviceFlow,showDisconnectedActions:t&&!e.pendingDeviceFlow&&!n,showDetails:r}}function Me(e){return e===`starting`||e===`authorizing`}function Ne(e,t){return!!(e?.hasSession&&(t||e.sessionServiceMismatch))}async function Pe(e,t){await t.reset(),t.onIdentityReset?.();try{return{status:`success`,config:await t.save(e)}}catch(e){return{status:`url-save-failed`,error:e}}}var h=o();function g(e){if(!e)return f(`cloudNotAvailable`);let t=new Date(e);return Number.isNaN(t.getTime())?f(`cloudNotAvailable`):t.toLocaleString(d())}function _(e){let t=e.id||e.installationId;return typeof t==`string`?t:``}function v(e){let t=e.name||e.installationName;return typeof t==`string`&&t?t:f(`cloudUnnamedDevice`)}function Fe(e){return typeof e==`number`&&Number.isFinite(e)?e.toLocaleString(d()):f(`cloudNotAvailable`)}function Ie(e){return f(e===`saved`?`cloudConfigSourceSaved`:e===`env`?`cloudConfigSourceEnv`:`cloudConfigSourceDefault`)}function y(e){let t=String(e||``).toLowerCase();return t===`localhost`||t.endsWith(`.localhost`)||t.startsWith(`127.`)?!0:t===`::1`}function b(e){let t=e.trim();if(!t)return``;let n;try{n=new URL(t)}catch{return f(`cloudUrlInvalid`)}return n.protocol!==`https:`&&n.protocol!==`http:`?f(`cloudUrlInvalidProtocol`):y(n.hostname)&&n.port===`8081`?f(`cloudUrlAdminPort`):``}function x(e){if(!e||typeof e!=`object`)return f(`cloudConnectionUnknown`);let t=e;return t.ok===!0||t.status===`ok`||t.ready===!0?f(`cloudConnectionOk`):f(`cloudConnectionError`)}function S(e){if(!e||typeof e!=`object`)return!1;let t=e;return t.ok===!0||t.status===`ok`||t.ready===!0}function Le(e,t){let n=x(t);return(0,h.jsxs)(`span`,{className:we(`quickforge-settings-badge`,n===f(`cloudConnectionUnknown`)?`quickforge-settings-badge-muted`:S(t)?`quickforge-settings-badge-success`:`quickforge-settings-badge-danger`),children:[e,`: `,n]})}function Re(e){let t=e.quickforgeCapabilities;return[t?.tools?f(`cloudCapabilityTools`):void 0,t?.vision?f(`cloudCapabilityVision`):void 0,t?.reasoning?f(`cloudCapabilityReasoning`):void 0].filter(Boolean).join(` · `)||f(`cloudCapabilityText`)}function ze(e){return f(e?e===`disabled`?`cloudRemoteStatusDisabled`:e===`unavailable`?`cloudRemoteStatusUnavailable`:e===`stopped`?`cloudRemoteStatusStopped`:e===`starting`?`cloudRemoteStatusStarting`:e===`authorizing`?`cloudRemoteStatusAuthorizing`:e===`running`?`cloudRemoteStatusRunning`:e===`conflict`?`cloudRemoteStatusConflict`:`cloudRemoteStatusError`:`cloudRemoteStatusLoading`)}function Be(e,t){let n=e===`usage`?`cloudUsageLoadFailed`:e===`installations`?`cloudDevicesLoadFailed`:`cloudModelsLoadFailed`,r=m(t);return{message:r===f(`cloudRequestFailed`)?f(n):r,unavailable:!(`code`in Object(t))||[`cloud_request_failed`,`cloud_unavailable`].includes(String(t?.code||``))}}function C({error:e,onRetry:n,disabled:r}){return(0,h.jsxs)(`div`,{className:`p-4 text-sm`,children:[(0,h.jsx)(`div`,{className:`quickforge-settings-error`,children:e.message}),(0,h.jsxs)(l,{type:`button`,variant:`outline`,size:`sm`,className:`mt-3`,onClick:n,disabled:r,children:[(0,h.jsx)(t,{className:`mr-2 size-4`}),f(`retry`)]})]})}function w(){let[e,a]=(0,p.useState)(),[o,s]=(0,p.useState)(``),[Se,d]=(0,p.useState)(!1),[y,x]=(0,p.useState)(),[S,w]=(0,p.useState)(),[T,Ve]=(0,p.useState)(),[E,D]=(0,p.useReducer)(Oe,De),[O,He]=(0,p.useState)(!0),[k,A]=(0,p.useState)(``),[Ue,j]=(0,p.useState)(``),[M,N]=(0,p.useState)(``),[We,P]=(0,p.useState)(``),[Ge,Ke]=(0,p.useState)(0),F=(0,p.useRef)(0),I=(0,p.useRef)(0),L=S?.pendingDeviceFlow,R=L?Math.max(0,Math.ceil((L.expiresAt-Ge)/1e3)):0,z=(0,p.useCallback)(()=>D({type:`clear`}),[]),B=(0,p.useCallback)(async()=>{let e=++I.current;try{let t=await Te();e===I.current&&Ve(t)}catch{}},[]),V=(0,p.useCallback)(async(e=!0,t=!1,n=!0)=>{let r=++F.current;e&&He(!0),N(``),D({type:`begin`}),n&&B();try{let[e,n]=await Promise.all([ve(),pe()]);if(r!==F.current)return;if(a(e),t||s(e.cloudUrl),w(n),!e.enabled||!n.configured||!n.hasSession||n.sessionServiceMismatch){z();return}let i=await ke({usage:be,installations:fe,models:me},Be);if(r!==F.current)return;D({type:`replace`,state:i})}catch(e){if(r!==F.current)return;a(void 0),w(void 0),z(),N(m(e,`cloudLoadFailed`))}finally{r===F.current&&He(!1)}},[z,B]);(0,p.useEffect)(()=>{let e=window.setTimeout(()=>{V()},0);return()=>{window.clearTimeout(e),F.current+=1,I.current+=1}},[V]),(0,p.useEffect)(()=>{if(!e?.enabled||!Me(T?.status))return;let t=window.setInterval(()=>{B()},1750);return()=>window.clearInterval(t)},[e?.enabled,B,T?.status]),(0,p.useEffect)(()=>{let e=()=>{document.visibilityState===`visible`&&B()};return document.addEventListener(`visibilitychange`,e),()=>document.removeEventListener(`visibilitychange`,e)},[B]),(0,p.useEffect)(()=>{if(!e?.enabled||!S?.pendingDeviceFlow)return;let t=()=>Ke(Date.now()),n=window.setTimeout(t,0),r=window.setInterval(t,1e3);return()=>{window.clearTimeout(n),window.clearInterval(r)}},[e?.enabled,S?.pendingDeviceFlow]),(0,p.useEffect)(()=>{let t=S?.pendingDeviceFlow;if(!e?.enabled||!t||R>0)return;let n=window.setTimeout(()=>{V(!1)},0);return()=>window.clearTimeout(n)},[e?.enabled,R,V,S?.pendingDeviceFlow]),(0,p.useEffect)(()=>{let t=S?.pendingDeviceFlow;if(!e?.enabled||!t||k===`device-start`||k===`device-cancel`)return;let n=Math.max(1,Number(t.interval)||5)*1e3,r=window.setTimeout(async()=>{try{let e=await xe();w(e),e.deviceFlowResult===`success`?(window.dispatchEvent(new Event(_e)),N(``),j(f(`cloudDeviceFlowSucceeded`)),await Promise.all([V(!1,!1,!1),B()])):e.deviceFlowResult===`denied`?N(f(`cloudDeviceFlowDenied`)):e.deviceFlowResult===`expired`?N(f(`cloudDeviceFlowExpired`)):e.deviceFlowResult===`network`&&N(f(`cloudDeviceFlowNetwork`))}catch(e){N(m(e))}},n);return()=>window.clearTimeout(r)},[k,e?.enabled,V,B,S?.pendingDeviceFlow]);let H=()=>window.dispatchEvent(new Event(_e)),qe=async()=>{if(!k){if(b(o)){d(!0);return}A(`test`),j(``),N(``),x(void 0);try{let e=await Ee(o);s(e.cloudUrl),x(e),j(f(`cloudConnectionTestSucceeded`))}catch(e){N(m(e,`cloudConnectionFailed`))}finally{A(``)}}},Je=async()=>{if(!k){if(b(o)){d(!0);return}A(`save`),j(``),N(``);try{let e=await u({cloudUrl:o});a(e),s(e.cloudUrl),x(void 0),P(``),H(),j(f(`cloudConnectionSaved`)),await V(!1)}catch(e){N(m(e))}finally{A(``)}}},Ye=async t=>{if(!(k||!e||e.enabled===t)){A(`cloud-toggle`),j(``),N(``),P(``);try{let e=await u({enabled:t});a(e),s(e.cloudUrl),x(void 0),e.enabled||z(),H(),j(f(e.enabled?`cloudServiceEnabledSaved`:`cloudServiceDisabledSaved`)),await V(!1)}catch(e){N(m(e))}finally{A(``)}}},Xe=async()=>{let t=o.trim()||e?.cloudUrl||``;if(b(t)){d(!0);return}if(!(!await c({title:f(`cloudForceSwitchTitle`),description:f(`cloudForceSwitchDescription`),confirmLabel:f(`cloudForceSwitchConfirm`),cancelLabel:f(`cancel`),variant:`destructive`})||k||!t)){A(`force-switch`),j(``),N(``),P(``);try{let e=await Pe(t,{reset:he,save:e=>u({cloudUrl:e}),onIdentityReset:()=>{F.current+=1,w(e=>e&&{...e,mode:`local`,hasSession:!1,sessionServiceMismatch:!1}),z(),H()}});if(e.status===`url-save-failed`){let t=m(e.error);P(f(`cloudIdentityRebuiltUrlSaveFailed`)),await V(!1,!0),N(t);return}a(e.config),s(e.config.cloudUrl),x(void 0),H(),j(f(`cloudForceSwitchSucceeded`)),await V(!1)}catch(e){N(m(e))}finally{A(``)}}},Ze=async()=>{if(!k){A(`device-start`),j(``),N(``),P(``);try{w(await Ce()),H()}catch(e){N(m(e))}finally{A(``)}}},Qe=async()=>{if(!k){A(`device-cancel`),j(``),N(``);try{w(await ge()),j(f(`cloudDeviceFlowCancelled`))}catch(e){N(m(e))}finally{A(``)}}},$e=async()=>{let e=S?.pendingDeviceFlow?.userCode;if(e)try{await navigator.clipboard.writeText(e),j(f(`cloudDeviceCodeCopied`))}catch{N(f(`copyFailed`))}},et=async()=>{if(!(!await c({title:f(`cloudLogoutTitle`),description:f(`cloudLogoutDescription`),confirmLabel:f(`cloudLogout`),cancelLabel:f(`cancel`),variant:`destructive`})||k)){A(`logout`),j(``),N(``),P(``);try{await ye(),F.current+=1,z(),w(e=>e&&{...e,mode:`local`,hasSession:!1,sessionServiceMismatch:!1}),H(),j(f(`cloudLoggedOut`)),await V(!1)}catch(e){N(m(e))}finally{A(``)}}},tt=async e=>{let t=_(e);if(!(!t||t===S?.installationId||k)&&await c({description:f(`cloudRevokeDeviceConfirm`,{name:v(e)}),confirmLabel:f(`cloudRevokeDevice`),cancelLabel:f(`cancel`),variant:`destructive`})){A(t),j(``),N(``);try{await ue(t),D({type:`replace`,state:{...E,installations:E.installations.filter(e=>_(e)!==t)}}),j(f(`cloudDeviceRevoked`))}catch(e){N(m(e))}finally{A(``)}}},U=e?.enabled===!0,nt=!!(S?.configured&&S.hasSession),W=S?.sessionServiceMismatch===!0,G=nt&&!W,K=!!(e?.cloudUrl&&o.trim()&&e.cloudUrl!==o.trim()),q=b(o),J=!!(q&&Se),rt=Ae({loading:O,loadError:M,status:S,details:E}),Y=je(S),X=rt===`cloud-unavailable`,it=W?f(`cloudSessionMismatchLabel`):S?.mode===`account`?f(`cloudFormalAccount`):f(`cloudNotConnected`),at=ze(T?.status),ot=T?.status===`running`?`quickforge-settings-badge-success`:T?.status===`authorizing`||T?.status===`starting`?`quickforge-settings-badge-info`:T?.status===`error`||T?.status===`conflict`?`quickforge-settings-badge-warning`:`quickforge-settings-badge-muted`,st=U?S?.configured?f(W?`cloudSessionServiceMismatch`:G?X?`cloudUnavailableDescription`:`cloudConnectedDescription`:`cloudLocalOnlyDescription`):f(`cloudNotConfiguredDescription`):f(`cloudServiceDisabledDescription`),Z=()=>{V()},Q=O||E.loading,$=new Map;for(let e of E.installations){let t=v(e);$.set(t,($.get(t)??0)+1)}let ct=[...$.entries()].filter(([,e])=>e>1),lt=ct.reduce((e,[,t])=>e+t,0);return(0,h.jsxs)(`div`,{className:`quickforge-settings-stack`,children:[(0,h.jsxs)(`div`,{className:`quickforge-settings-heading`,children:[(0,h.jsx)(`div`,{children:(0,h.jsxs)(`h2`,{className:`quickforge-settings-title`,children:[(0,h.jsx)(ce,{className:`size-5`}),f(`cloudAccount`)]})}),(0,h.jsxs)(l,{variant:`outline`,size:`sm`,onClick:()=>void V(),disabled:O||!!k,className:`quickforge-settings-heading-action`,children:[(0,h.jsx)(t,{className:`mr-2 size-4 ${O?`animate-spin`:``}`}),f(`refresh`)]})]}),Ue?(0,h.jsx)(`div`,{className:`quickforge-settings-message`,children:Ue}):null,We?(0,h.jsx)(`div`,{className:`quickforge-settings-warning`,children:We}):null,M?(0,h.jsx)(`div`,{className:`quickforge-settings-error`,children:M}):null,(0,h.jsxs)(`div`,{className:`quickforge-settings-section`,children:[(0,h.jsxs)(`div`,{className:`quickforge-settings-list-header`,children:[(0,h.jsxs)(`div`,{className:`quickforge-settings-row-title`,children:[(0,h.jsx)(te,{className:`size-4`}),f(`cloudServiceConnection`)]}),(0,h.jsx)(`span`,{className:`quickforge-settings-badge quickforge-settings-badge-info shrink-0`,children:`QuickForge Cloud`})]}),(0,h.jsxs)(`div`,{className:`quickforge-settings-row`,children:[(0,h.jsxs)(`div`,{className:`quickforge-settings-row-main`,children:[(0,h.jsx)(`div`,{className:`quickforge-settings-row-title`,children:f(`cloudServiceEnabled`)}),(0,h.jsx)(`div`,{className:`quickforge-settings-row-description`,children:f(`cloudServiceEnabledDescription`)})]}),(0,h.jsx)(`div`,{className:`quickforge-settings-row-control`,children:(0,h.jsxs)(`label`,{className:`quickforge-settings-switch`,"aria-label":f(`cloudServiceEnabled`),children:[(0,h.jsx)(`input`,{type:`checkbox`,checked:U,disabled:!e||!!k,onChange:e=>{Ye(e.target.checked)}}),(0,h.jsx)(`span`,{"aria-hidden":`true`})]})})]}),(0,h.jsxs)(`div`,{className:`quickforge-settings-row items-start`,children:[(0,h.jsx)(`div`,{className:`quickforge-settings-row-main`,children:(0,h.jsx)(`label`,{className:`quickforge-settings-row-title h-9 whitespace-nowrap`,htmlFor:`quickforge-cloud-url`,children:f(`cloudUrl`)})}),(0,h.jsxs)(`div`,{className:`quickforge-settings-row-control w-full max-w-xl flex-col items-stretch gap-2`,children:[(0,h.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,h.jsx)(de,{id:`quickforge-cloud-url`,value:o,onChange:e=>s(e.target.value),onKeyDown:e=>{e.key===`Enter`&&o.trim()&&K&&!k&&(e.preventDefault(),Je())},placeholder:f(`cloudUrlPlaceholder`),inputMode:`url`,autoCapitalize:`none`,autoCorrect:`off`,spellCheck:!1,onBlur:()=>d(!0),"aria-invalid":J,className:we(`min-w-0 flex-1`,J?`border-destructive`:void 0),disabled:!!k}),(0,h.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2`,children:[(0,h.jsxs)(l,{variant:`outline`,size:`sm`,onClick:()=>void qe(),disabled:!o.trim()||!!q||!!k,children:[k===`test`?(0,h.jsx)(t,{className:`mr-2 size-4 animate-spin`}):(0,h.jsx)(ae,{className:`mr-2 size-4`}),f(`cloudTestConnection`)]}),(0,h.jsxs)(l,{size:`sm`,onClick:()=>void Je(),disabled:!o.trim()||!K||!!q||!!k,children:[k===`save`?(0,h.jsx)(t,{className:`mr-2 size-4 animate-spin`}):(0,h.jsx)(ie,{className:`mr-2 size-4`}),f(`saveChanges`)]})]})]}),J?(0,h.jsx)(`div`,{className:`text-xs text-destructive`,children:q}):null,(0,h.jsxs)(`div`,{className:`text-xs text-muted-foreground`,children:[f(`cloudConfigSource`),`: `,Ie(e?.source)]}),Ne(S,K)&&!q?(0,h.jsx)(`div`,{className:`quickforge-settings-cloud-force-switch flex justify-end`,children:(0,h.jsxs)(l,{variant:`destructive`,size:`sm`,onClick:()=>void Xe(),disabled:!!k,title:f(`cloudForceSwitchDescription`),children:[(0,h.jsx)(i,{className:`mr-2 size-4`}),f(`cloudForceSwitch`)]})}):null]})]}),e?.configurationError?(0,h.jsx)(`div`,{className:`quickforge-settings-error m-3`,children:f(`cloudConfigurationError`)}):null,y?(0,h.jsxs)(`div`,{className:`quickforge-settings-row`,children:[(0,h.jsxs)(`div`,{className:`quickforge-settings-row-main`,children:[(0,h.jsx)(`div`,{className:`quickforge-settings-row-title`,children:f(`cloudConnectionTestResult`)}),(0,h.jsx)(`div`,{className:`quickforge-settings-row-description break-all`,children:y.cloudUrl})]}),(0,h.jsxs)(`div`,{className:`quickforge-settings-row-control flex-wrap justify-end gap-1.5`,children:[Le(f(`cloudHealth`),y.health),Le(f(`cloudReady`),y.ready)]})]}):null]}),U?(0,h.jsxs)(`div`,{className:`quickforge-settings-section`,children:[(0,h.jsxs)(`div`,{className:`quickforge-settings-row`,children:[(0,h.jsxs)(`div`,{className:`quickforge-settings-row-main`,children:[(0,h.jsxs)(`div`,{className:`quickforge-settings-row-title`,children:[(0,h.jsx)(ee,{className:`size-4`}),f(`cloudRemoteAccess`)]}),(0,h.jsx)(`div`,{className:`quickforge-settings-row-description`,children:f(`cloudRemoteAccessDescription`)})]}),(0,h.jsx)(`div`,{className:`quickforge-settings-row-control`,children:(0,h.jsx)(`span`,{className:`quickforge-settings-badge ${ot}`,children:at})})]}),T?.serverUrl?(0,h.jsxs)(`div`,{className:`quickforge-settings-row`,children:[(0,h.jsx)(`div`,{className:`quickforge-settings-row-main`,children:(0,h.jsx)(`div`,{className:`quickforge-settings-row-title`,children:f(`cloudRemoteServerUrl`)})}),(0,h.jsx)(`div`,{className:`quickforge-settings-row-control break-all text-sm text-muted-foreground`,children:T.serverUrl})]}):null,T?.pid?(0,h.jsxs)(`div`,{className:`quickforge-settings-row`,children:[(0,h.jsx)(`div`,{className:`quickforge-settings-row-main`,children:(0,h.jsx)(`div`,{className:`quickforge-settings-row-title`,children:f(`cloudRemotePid`)})}),(0,h.jsx)(`div`,{className:`quickforge-settings-row-control text-sm font-medium`,children:T.pid})]}):null,T?.status===`authorizing`&&T.verificationUriComplete?(0,h.jsxs)(`div`,{className:`quickforge-settings-row`,children:[(0,h.jsx)(`div`,{className:`quickforge-settings-row-main`,children:(0,h.jsx)(`div`,{className:`quickforge-settings-row-title`,children:f(`cloudRemoteAuthorization`)})}),(0,h.jsx)(`div`,{className:`quickforge-settings-row-control`,children:(0,h.jsxs)(`a`,{className:`inline-flex items-center gap-1 text-sm text-primary hover:underline`,href:T.verificationUriComplete,target:`_blank`,rel:`noreferrer`,children:[f(`cloudRemoteOpenAuthorization`),(0,h.jsx)(se,{className:`size-3.5`})]})})]}):null,T?.error?(0,h.jsx)(`div`,{className:`quickforge-settings-warning quickforge-settings-warning-attached`,children:T.error}):null]}):null,(0,h.jsxs)(`div`,{className:`quickforge-settings-section`,children:[(0,h.jsxs)(`div`,{className:`quickforge-settings-row`,children:[(0,h.jsxs)(`div`,{className:`quickforge-settings-row-main`,children:[(0,h.jsxs)(`div`,{className:`quickforge-settings-row-title`,children:[(0,h.jsx)(oe,{className:`size-4`}),f(`cloudIdentityStatus`)]}),(0,h.jsx)(`div`,{className:`quickforge-settings-row-description`,children:st})]}),(0,h.jsx)(`div`,{className:`quickforge-settings-row-control`,children:(0,h.jsx)(`span`,{className:`quickforge-settings-badge ${G&&!X?`quickforge-settings-badge-success`:W||X?`quickforge-settings-badge-warning`:`quickforge-settings-badge-muted`}`,children:it})})]}),X?(0,h.jsx)(`div`,{className:`quickforge-settings-warning quickforge-settings-warning-attached`,children:f(`cloudUnavailableDescription`)}):null,W?(0,h.jsx)(`div`,{className:`quickforge-settings-warning quickforge-settings-warning-attached`,children:f(`cloudSessionServiceMismatch`)}):null,G?(0,h.jsxs)(h.Fragment,{children:[S?.mode===`account`?(0,h.jsxs)(h.Fragment,{children:[(0,h.jsxs)(`div`,{className:`quickforge-settings-row`,children:[(0,h.jsx)(`div`,{className:`quickforge-settings-row-main`,children:(0,h.jsx)(`div`,{className:`quickforge-settings-row-title`,children:f(`cloudAccountEmail`)})}),(0,h.jsx)(`div`,{className:`quickforge-settings-row-control text-sm font-medium`,children:S.account?.email||f(`cloudNotAvailable`)})]}),(0,h.jsxs)(`div`,{className:`quickforge-settings-row`,children:[(0,h.jsx)(`div`,{className:`quickforge-settings-row-main`,children:(0,h.jsx)(`div`,{className:`quickforge-settings-row-title`,children:f(`cloudAccountPlan`)})}),(0,h.jsx)(`div`,{className:`quickforge-settings-row-control text-sm font-medium`,children:S.account?.plan||f(`cloudNotAvailable`)})]})]}):null,U?E.errors.usage?(0,h.jsx)(C,{error:E.errors.usage,onRetry:Z,disabled:Q||!!k}):(0,h.jsxs)(h.Fragment,{children:[(0,h.jsxs)(`div`,{className:`quickforge-settings-row`,children:[(0,h.jsx)(`div`,{className:`quickforge-settings-row-main`,children:(0,h.jsx)(`div`,{className:`quickforge-settings-row-title`,children:f(`cloudRemainingQuota`)})}),(0,h.jsx)(`div`,{className:`quickforge-settings-row-control text-sm font-medium`,children:Fe(E.usage?.remaining)})]}),(0,h.jsxs)(`div`,{className:`quickforge-settings-row`,children:[(0,h.jsx)(`div`,{className:`quickforge-settings-row-main`,children:(0,h.jsx)(`div`,{className:`quickforge-settings-row-title`,children:f(`cloudQuotaExpiresAt`)})}),(0,h.jsx)(`div`,{className:`quickforge-settings-row-control text-sm text-muted-foreground`,children:g(E.usage?.resetsAt||E.usage?.expiresAt)})]})]}):null,(0,h.jsxs)(`div`,{className:`quickforge-settings-row`,children:[(0,h.jsxs)(`div`,{className:`quickforge-settings-row-main`,children:[(0,h.jsx)(`div`,{className:`quickforge-settings-row-title`,children:f(`cloudLogout`)}),(0,h.jsx)(`div`,{className:`quickforge-settings-row-description`,children:f(`cloudLogoutRowDescription`)})]}),(0,h.jsx)(`div`,{className:`quickforge-settings-row-control`,children:(0,h.jsxs)(l,{variant:`destructive`,className:`quickforge-settings-cloud-logout`,onClick:()=>void et(),disabled:!!k,children:[(0,h.jsx)(n,{className:`mr-2 size-4`}),f(`cloudLogout`)]})})]})]}):null]}),!U||!S?.configured?null:Y.showDeviceFlow&&L?(0,h.jsxs)(`div`,{className:`quickforge-settings-section`,children:[(0,h.jsxs)(`div`,{className:`quickforge-settings-list-header`,children:[(0,h.jsxs)(`div`,{className:`quickforge-settings-row-main`,children:[(0,h.jsxs)(`div`,{className:`quickforge-settings-row-title`,children:[(0,h.jsx)(re,{className:`size-4`}),f(`cloudDeviceFlowTitle`)]}),(0,h.jsx)(`div`,{className:`quickforge-settings-row-description`,children:f(`cloudDeviceFlowDescription`)})]}),(0,h.jsx)(`span`,{className:`quickforge-settings-badge quickforge-settings-badge-info`,children:f(`cloudDeviceFlowCountdown`,{seconds:R})})]}),(0,h.jsxs)(`div`,{className:`quickforge-settings-row items-start`,children:[(0,h.jsxs)(`div`,{className:`quickforge-settings-row-main`,children:[(0,h.jsx)(`div`,{className:`quickforge-settings-row-description`,children:f(`cloudDeviceCode`)}),(0,h.jsx)(`div`,{className:`mt-1 font-mono text-2xl font-semibold tracking-[0.18em] text-foreground`,children:L.userCode})]}),(0,h.jsxs)(`div`,{className:`quickforge-settings-row-control flex-wrap gap-2`,children:[(0,h.jsxs)(l,{variant:`outline`,size:`sm`,onClick:()=>void $e(),children:[(0,h.jsx)(le,{className:`mr-2 size-4`}),f(`copy`)]}),(0,h.jsxs)(l,{size:`sm`,onClick:()=>window.open(L.verificationUriComplete||L.verificationUri,`_blank`,`noopener,noreferrer`),children:[(0,h.jsx)(se,{className:`mr-2 size-4`}),f(`cloudOpenVerificationPage`)]}),(0,h.jsx)(l,{variant:`outline`,size:`sm`,onClick:()=>void Qe(),disabled:!!k,children:f(`cancel`)})]})]}),S.deviceFlowResult===`slow_down`?(0,h.jsx)(`div`,{className:`quickforge-settings-warning quickforge-settings-warning-attached`,children:f(`cloudDeviceFlowSlowDown`)}):null]}):Y.showDisconnectedActions?(0,h.jsx)(`div`,{className:`quickforge-settings-section`,children:(0,h.jsxs)(`div`,{className:`quickforge-settings-row`,children:[(0,h.jsxs)(`div`,{className:`quickforge-settings-row-main`,children:[(0,h.jsxs)(`div`,{className:`quickforge-settings-row-title`,children:[(0,h.jsx)(re,{className:`size-4`}),f(`cloudLoginOrRegister`)]}),(0,h.jsx)(`div`,{className:`quickforge-settings-row-description`,children:f(`cloudLoginOrRegisterDescription`)})]}),(0,h.jsx)(`div`,{className:`quickforge-settings-row-control`,children:(0,h.jsxs)(l,{onClick:()=>void Ze(),disabled:O||!!k,children:[(0,h.jsx)(r,{className:`mr-2 size-4`}),f(`cloudLoginOrRegister`)]})})]})}):Y.showDetails?(0,h.jsxs)(h.Fragment,{children:[(0,h.jsxs)(`div`,{className:`quickforge-settings-section`,children:[(0,h.jsx)(`div`,{className:`quickforge-settings-list-header`,children:(0,h.jsxs)(`div`,{className:`quickforge-settings-row-title`,children:[(0,h.jsx)(ne,{className:`size-4`}),f(`cloudModels`)]})}),E.errors.models?(0,h.jsx)(C,{error:E.errors.models,onRetry:Z,disabled:Q||!!k}):E.models.length===0?(0,h.jsx)(`div`,{className:`p-6 text-center text-sm text-muted-foreground`,children:f(Q?`loading`:`cloudNoModels`)}):E.models.map(e=>(0,h.jsx)(`div`,{className:`quickforge-settings-list-item`,children:(0,h.jsxs)(`div`,{className:`quickforge-settings-list-item-main`,children:[(0,h.jsx)(`div`,{className:`text-sm font-medium`,children:e.name||e.id}),(0,h.jsxs)(`div`,{className:`quickforge-settings-row-description`,children:[e.id,` · `,Re(e)]})]})},`${e.provider}:${e.id}`))]}),(0,h.jsxs)(`div`,{className:`quickforge-settings-section`,children:[(0,h.jsx)(`div`,{className:`quickforge-settings-list-header`,children:(0,h.jsxs)(`div`,{className:`quickforge-settings-row-title`,children:[(0,h.jsx)(ee,{className:`size-4`}),f(`cloudDevices`)]})}),lt>1?(0,h.jsx)(`div`,{className:`quickforge-settings-warning quickforge-settings-warning-attached`,children:f(`cloudDuplicateDevicesHint`,{count:lt,name:ct[0][0]})}):null,E.errors.installations?(0,h.jsx)(C,{error:E.errors.installations,onRetry:Z,disabled:Q||!!k}):E.installations.length===0?(0,h.jsx)(`div`,{className:`p-6 text-center text-sm text-muted-foreground`,children:f(Q?`loading`:`cloudNoDevices`)}):E.installations.map(e=>{let t=_(e),n=e.current===!0||t===S?.installationId;return(0,h.jsxs)(`div`,{className:`quickforge-settings-list-item`,children:[(0,h.jsxs)(`div`,{className:`quickforge-settings-list-item-main`,children:[(0,h.jsxs)(`div`,{className:`flex min-w-0 flex-wrap items-center gap-2`,children:[(0,h.jsx)(`div`,{className:`truncate text-sm font-medium`,children:v(e)}),n?(0,h.jsx)(`span`,{className:`quickforge-settings-badge quickforge-settings-badge-info`,children:f(`cloudCurrentDevice`)}):null]}),(0,h.jsx)(`div`,{className:`quickforge-settings-row-description`,children:[e.platform,e.createdAt?`${f(`cloudRegisteredAt`)} ${g(e.createdAt)}`:void 0,e.lastSeenAt?`${f(`cloudLastSeenAt`)} ${g(e.lastSeenAt)}`:void 0,t?`#${t.slice(0,8)}`:void 0].filter(Boolean).join(` · `)||f(`cloudNotAvailable`)})]}),(0,h.jsx)(`div`,{className:`quickforge-settings-list-item-actions`,children:(0,h.jsx)(l,{variant:`outline`,size:`sm`,onClick:()=>void tt(e),disabled:n||!!k,children:f(`cloudRevokeDevice`)})})]},t||v(e))})]})]}):null]})}export{w as CloudAccountSettingsPage};
@@ -1 +1 @@
1
- import{i as e}from"./rolldown-runtime-DWdDZTNf.js";import{C as t,o as n,q as r,qt as i,w as a}from"./icons-2D18YbSI.js";import{n as o}from"./react-vendor-3UaA-C9W.js";import{yn as s}from"./index-BivLuZvX.js";import{n as c,r as l,t as u}from"./plugin-api-Uu2xAB4d.js";var d=e(i(),1),f=o();function p(e){switch(e){case`documents`:return{label:s(`pluginDocumentsName`),description:s(`pluginDocumentsDescription`)};case`spreadsheets`:return{label:s(`pluginSpreadsheetsName`),description:s(`pluginSpreadsheetsDescription`)};case`presentations`:return{label:s(`pluginPresentationsName`),description:s(`pluginPresentationsDescription`)};default:return null}}function m(e){return p(e.name)?.label||(e.displayName||e.name).replace(/^OpenAI\s+/i,``)}function h(e){return p(e.name)?.description||e.description||s(`noDescription`)}function g({onChanged:e}){let[i,o]=(0,d.useState)(null),[p,g]=(0,d.useState)(!0),[_,v]=(0,d.useState)(null),[y,b]=(0,d.useState)(null),x=(0,d.useCallback)(async(t=`load`)=>{b(null),g(!0);try{o(t===`reload`?await c():await u()),t===`reload`&&e?.()}catch(e){b(e instanceof Error?e.message:s(`pluginsLoadFailed`))}finally{g(!1)}},[e]);(0,d.useEffect)(()=>{let e=!1;return u().then(t=>{e||o(t)}).catch(t=>{e||b(t instanceof Error?t.message:s(`pluginsLoadFailed`))}).finally(()=>{e||g(!1)}),()=>{e=!0}},[]);let S=(0,d.useMemo)(()=>{let e=i?.plugins||[];return{total:e.length,enabled:e.filter(e=>e.enabled).length}},[i]),C=(0,d.useMemo)(()=>i?.plugins||[],[i]),w=async(t,n)=>{v(t),b(null);try{o(await l(t,n)),e?.()}catch(e){b(e instanceof Error?e.message:s(`pluginsSaveFailed`))}finally{v(null)}};return(0,f.jsx)(`div`,{className:`quickforge-settings-stack`,children:(0,f.jsxs)(`section`,{className:`quickforge-settings-section`,"aria-label":s(`plugins`),children:[(0,f.jsxs)(`div`,{className:`quickforge-settings-toolbar`,children:[(0,f.jsxs)(`div`,{className:`quickforge-settings-row-main`,children:[(0,f.jsxs)(`div`,{className:`quickforge-settings-row-title`,children:[(0,f.jsx)(a,{className:`size-4 text-primary`}),s(`plugins`)]}),(0,f.jsx)(`div`,{className:`quickforge-settings-row-description`,children:s(`pluginsDescription`)}),(0,f.jsx)(`div`,{className:`quickforge-settings-meta`,children:(0,f.jsx)(`span`,{className:`quickforge-settings-badge quickforge-settings-badge-muted`,children:s(`pluginsCount`,S)})})]}),(0,f.jsxs)(`button`,{className:`quickforge-settings-button quickforge-settings-button-secondary`,type:`button`,onClick:()=>void x(`reload`),disabled:p,children:[p?(0,f.jsx)(r,{className:`mr-2 size-4 animate-spin`}):(0,f.jsx)(t,{className:`mr-2 size-4`}),s(`pluginsReload`)]})]}),y?(0,f.jsx)(`div`,{className:`quickforge-settings-alert quickforge-settings-warning-attached`,children:y}):null,i?.errors?.length?(0,f.jsxs)(`div`,{className:`quickforge-settings-warning quickforge-settings-warning-attached`,children:[(0,f.jsxs)(`div`,{className:`mb-2 inline-flex items-center gap-2 font-medium`,children:[(0,f.jsx)(n,{className:`size-4`}),s(`pluginDiscoveryErrors`)]}),i.errors.map((e,t)=>(0,f.jsxs)(`div`,{className:`break-all text-sm`,children:[(0,f.jsx)(`code`,{className:`quickforge-settings-command-name`,children:e.dir}),`: `,e.error]},`${e.dir}-${t}`))]}):null,p&&!i?(0,f.jsxs)(`div`,{className:`quickforge-settings-empty-row inline-flex items-center gap-2`,children:[(0,f.jsx)(r,{className:`size-4 animate-spin`}),s(`loadingPlugins`)]}):null,!p&&i&&i.plugins.length===0?(0,f.jsxs)(`div`,{className:`quickforge-settings-empty-row`,children:[(0,f.jsx)(`div`,{className:`quickforge-settings-row-title`,children:s(`noPlugins`)}),(0,f.jsx)(`div`,{className:`quickforge-settings-row-description`,children:s(`noPluginsDescription`)}),(0,f.jsx)(`div`,{className:`quickforge-settings-meta`,children:(i.searchPaths||[]).map(e=>(0,f.jsx)(`code`,{className:`quickforge-settings-command-name`,children:e},e))})]}):null,C.map(e=>(0,f.jsx)(`article`,{className:`quickforge-settings-list-item quickforge-settings-list-item--column`,children:(0,f.jsxs)(`div`,{className:`quickforge-settings-list-item-header`,children:[(0,f.jsxs)(`span`,{className:`min-w-0 flex-1`,children:[(0,f.jsx)(`span`,{className:`quickforge-settings-row-title`,children:m(e)}),(0,f.jsx)(`span`,{className:`quickforge-settings-row-description`,children:h(e)}),e.error?(0,f.jsx)(`span`,{className:`quickforge-settings-alert mt-3 block`,children:e.error}):null]}),(0,f.jsx)(`div`,{className:`quickforge-settings-list-item-actions`,children:(0,f.jsxs)(`label`,{className:`quickforge-settings-switch`,"aria-disabled":_===e.name?`true`:`false`,children:[(0,f.jsx)(`input`,{type:`checkbox`,checked:e.enabled,disabled:_===e.name,onChange:t=>void w(e.name,t.target.checked)}),(0,f.jsx)(`span`,{"aria-hidden":`true`})]})})]})},e.name))]})})}export{g as PluginsPage};
1
+ import{i as e}from"./rolldown-runtime-DWdDZTNf.js";import{C as t,o as n,q as r,qt as i,w as a}from"./icons-2D18YbSI.js";import{n as o}from"./react-vendor-3UaA-C9W.js";import{yn as s}from"./index-BTPzyq7d.js";import{n as c,r as l,t as u}from"./plugin-api-Uu2xAB4d.js";var d=e(i(),1),f=o();function p(e){switch(e){case`documents`:return{label:s(`pluginDocumentsName`),description:s(`pluginDocumentsDescription`)};case`spreadsheets`:return{label:s(`pluginSpreadsheetsName`),description:s(`pluginSpreadsheetsDescription`)};case`presentations`:return{label:s(`pluginPresentationsName`),description:s(`pluginPresentationsDescription`)};default:return null}}function m(e){return p(e.name)?.label||(e.displayName||e.name).replace(/^OpenAI\s+/i,``)}function h(e){return p(e.name)?.description||e.description||s(`noDescription`)}function g({onChanged:e}){let[i,o]=(0,d.useState)(null),[p,g]=(0,d.useState)(!0),[_,v]=(0,d.useState)(null),[y,b]=(0,d.useState)(null),x=(0,d.useCallback)(async(t=`load`)=>{b(null),g(!0);try{o(t===`reload`?await c():await u()),t===`reload`&&e?.()}catch(e){b(e instanceof Error?e.message:s(`pluginsLoadFailed`))}finally{g(!1)}},[e]);(0,d.useEffect)(()=>{let e=!1;return u().then(t=>{e||o(t)}).catch(t=>{e||b(t instanceof Error?t.message:s(`pluginsLoadFailed`))}).finally(()=>{e||g(!1)}),()=>{e=!0}},[]);let S=(0,d.useMemo)(()=>{let e=i?.plugins||[];return{total:e.length,enabled:e.filter(e=>e.enabled).length}},[i]),C=(0,d.useMemo)(()=>i?.plugins||[],[i]),w=async(t,n)=>{v(t),b(null);try{o(await l(t,n)),e?.()}catch(e){b(e instanceof Error?e.message:s(`pluginsSaveFailed`))}finally{v(null)}};return(0,f.jsx)(`div`,{className:`quickforge-settings-stack`,children:(0,f.jsxs)(`section`,{className:`quickforge-settings-section`,"aria-label":s(`plugins`),children:[(0,f.jsxs)(`div`,{className:`quickforge-settings-toolbar`,children:[(0,f.jsxs)(`div`,{className:`quickforge-settings-row-main`,children:[(0,f.jsxs)(`div`,{className:`quickforge-settings-row-title`,children:[(0,f.jsx)(a,{className:`size-4 text-primary`}),s(`plugins`)]}),(0,f.jsx)(`div`,{className:`quickforge-settings-row-description`,children:s(`pluginsDescription`)}),(0,f.jsx)(`div`,{className:`quickforge-settings-meta`,children:(0,f.jsx)(`span`,{className:`quickforge-settings-badge quickforge-settings-badge-muted`,children:s(`pluginsCount`,S)})})]}),(0,f.jsxs)(`button`,{className:`quickforge-settings-button quickforge-settings-button-secondary`,type:`button`,onClick:()=>void x(`reload`),disabled:p,children:[p?(0,f.jsx)(r,{className:`mr-2 size-4 animate-spin`}):(0,f.jsx)(t,{className:`mr-2 size-4`}),s(`pluginsReload`)]})]}),y?(0,f.jsx)(`div`,{className:`quickforge-settings-alert quickforge-settings-warning-attached`,children:y}):null,i?.errors?.length?(0,f.jsxs)(`div`,{className:`quickforge-settings-warning quickforge-settings-warning-attached`,children:[(0,f.jsxs)(`div`,{className:`mb-2 inline-flex items-center gap-2 font-medium`,children:[(0,f.jsx)(n,{className:`size-4`}),s(`pluginDiscoveryErrors`)]}),i.errors.map((e,t)=>(0,f.jsxs)(`div`,{className:`break-all text-sm`,children:[(0,f.jsx)(`code`,{className:`quickforge-settings-command-name`,children:e.dir}),`: `,e.error]},`${e.dir}-${t}`))]}):null,p&&!i?(0,f.jsxs)(`div`,{className:`quickforge-settings-empty-row inline-flex items-center gap-2`,children:[(0,f.jsx)(r,{className:`size-4 animate-spin`}),s(`loadingPlugins`)]}):null,!p&&i&&i.plugins.length===0?(0,f.jsxs)(`div`,{className:`quickforge-settings-empty-row`,children:[(0,f.jsx)(`div`,{className:`quickforge-settings-row-title`,children:s(`noPlugins`)}),(0,f.jsx)(`div`,{className:`quickforge-settings-row-description`,children:s(`noPluginsDescription`)}),(0,f.jsx)(`div`,{className:`quickforge-settings-meta`,children:(i.searchPaths||[]).map(e=>(0,f.jsx)(`code`,{className:`quickforge-settings-command-name`,children:e},e))})]}):null,C.map(e=>(0,f.jsx)(`article`,{className:`quickforge-settings-list-item quickforge-settings-list-item--column`,children:(0,f.jsxs)(`div`,{className:`quickforge-settings-list-item-header`,children:[(0,f.jsxs)(`span`,{className:`min-w-0 flex-1`,children:[(0,f.jsx)(`span`,{className:`quickforge-settings-row-title`,children:m(e)}),(0,f.jsx)(`span`,{className:`quickforge-settings-row-description`,children:h(e)}),e.error?(0,f.jsx)(`span`,{className:`quickforge-settings-alert mt-3 block`,children:e.error}):null]}),(0,f.jsx)(`div`,{className:`quickforge-settings-list-item-actions`,children:(0,f.jsxs)(`label`,{className:`quickforge-settings-switch`,"aria-disabled":_===e.name?`true`:`false`,children:[(0,f.jsx)(`input`,{type:`checkbox`,checked:e.enabled,disabled:_===e.name,onChange:t=>void w(e.name,t.target.checked)}),(0,f.jsx)(`span`,{"aria-hidden":`true`})]})})]})},e.name))]})})}export{g as PluginsPage};
@@ -1,2 +1,2 @@
1
- import{i as e}from"./rolldown-runtime-DWdDZTNf.js";import{A as t,Dt as n,Lt as r,Rt as i,Tt as a,Wt as o,at as ee,d as te,ft as ne,mt as re,qt as s,s as ie,t as ae,y as oe}from"./icons-2D18YbSI.js";import{n as c}from"./react-vendor-3UaA-C9W.js";import{t as se}from"./model-display-label-C6-0eDxF.js";import{n as ce,r as le,t as ue}from"./model-reference-o41fJ6jQ.js";import{$t as de,Qt as l,Tt as fe,fn as pe,hn as u,ln as d,mn as f,nn as me,tn as he,yn as p}from"./index-BivLuZvX.js";import{i as m,n as h,t as ge}from"./model-identity-CgA6_Pbm.js";var g=e(s(),1),_=c(),_e=[{value:`off`,label:()=>p(`thinkingOff`)},{value:`low`,label:()=>p(`thinkingLow`)},{value:`medium`,label:()=>p(`thinkingMedium`)},{value:`high`,label:()=>p(`thinkingHigh`)},{value:`xhigh`,label:()=>p(`thinkingXHigh`)}];function ve(e,t){return m(e,t)}function v(e){return String(e).padStart(2,`0`)}function y(e){if(!e)return`-`;let t=new Date(e);return Number.isNaN(t.getTime())?`-`:`${t.getFullYear()}-${v(t.getMonth()+1)}-${v(t.getDate())} ${v(t.getHours())}:${v(t.getMinutes())}`}function ye(e,t=20){let n=String(e||``).trim();return n.length>t?`${n.slice(0,t)}...`:n}function be(){return{scheduleText:``,title:``,instruction:``,cronExpression:``,scheduleRule:``,nextRunAt:``,enabled:!0,agentId:``,executionMode:`serial`}}function b(){return{taskId:``,status:``,trigger:``,keyword:``,startedFrom:``,startedTo:``,page:1,pageSize:10}}function xe(e){return{scheduleText:[e.scheduleRule,e.instruction].filter(Boolean).join(`
1
+ import{i as e}from"./rolldown-runtime-DWdDZTNf.js";import{A as t,Dt as n,Lt as r,Rt as i,Tt as a,Wt as o,at as ee,d as te,ft as ne,mt as re,qt as s,s as ie,t as ae,y as oe}from"./icons-2D18YbSI.js";import{n as c}from"./react-vendor-3UaA-C9W.js";import{t as se}from"./model-display-label-C6-0eDxF.js";import{n as ce,r as le,t as ue}from"./model-reference-o41fJ6jQ.js";import{$t as de,Qt as l,Tt as fe,fn as pe,hn as u,ln as d,mn as f,nn as me,tn as he,yn as p}from"./index-BTPzyq7d.js";import{i as m,n as h,t as ge}from"./model-identity-CgA6_Pbm.js";var g=e(s(),1),_=c(),_e=[{value:`off`,label:()=>p(`thinkingOff`)},{value:`low`,label:()=>p(`thinkingLow`)},{value:`medium`,label:()=>p(`thinkingMedium`)},{value:`high`,label:()=>p(`thinkingHigh`)},{value:`xhigh`,label:()=>p(`thinkingXHigh`)}];function ve(e,t){return m(e,t)}function v(e){return String(e).padStart(2,`0`)}function y(e){if(!e)return`-`;let t=new Date(e);return Number.isNaN(t.getTime())?`-`:`${t.getFullYear()}-${v(t.getMonth()+1)}-${v(t.getDate())} ${v(t.getHours())}:${v(t.getMinutes())}`}function ye(e,t=20){let n=String(e||``).trim();return n.length>t?`${n.slice(0,t)}...`:n}function be(){return{scheduleText:``,title:``,instruction:``,cronExpression:``,scheduleRule:``,nextRunAt:``,enabled:!0,agentId:``,executionMode:`serial`}}function b(){return{taskId:``,status:``,trigger:``,keyword:``,startedFrom:``,startedTo:``,page:1,pageSize:10}}function xe(e){return{scheduleText:[e.scheduleRule,e.instruction].filter(Boolean).join(`
2
2
  `),title:e.title,instruction:e.instruction,cronExpression:e.cronExpression??``,scheduleRule:e.scheduleRule,nextRunAt:e.nextRunAt,enabled:e.status!==`paused`,agentId:e.agentId??``,executionMode:e.executionMode??`serial`}}function Se(e,t){return{...t,title:e.title,instruction:e.instruction,cronExpression:e.cronExpression??``,scheduleRule:e.scheduleRule,nextRunAt:e.nextRunAt,enabled:t.enabled}}function Ce(e){return{title:e.title.trim(),instruction:e.instruction.trim(),scheduleType:`cron`,scheduleRule:e.scheduleRule.trim()||e.cronExpression.trim(),cronExpression:e.cronExpression.trim(),nextRunAt:e.nextRunAt,enabled:e.enabled,agentId:e.agentId||null,executionMode:e.executionMode}}function x(e){return!!(e.currentRunId||e.currentRunIds?.length)}function we(e){return(e.executionMode??`serial`)===`parallel`||!x(e)}function Te(e){return p(e===`parallel`?`taskExecutionModeParallel`:`taskExecutionModeSerial`)}function Ee(e){return!!(e.title.trim()&&e.instruction.trim()&&e.cronExpression.trim())}function De(e){return p(e===`enabled`?`taskEnabled`:e===`running`?`taskRunning`:e===`paused`?`taskPaused`:e===`completed`?`taskFinished`:e===`success`?`executionSuccess`:`taskFailed`)}function Oe(e){return e===`enabled`||e===`success`?`bg-emerald-500/10 text-emerald-700`:e===`running`?`bg-blue-500/10 text-blue-700`:e===`paused`?`bg-amber-500/10 text-amber-700`:`bg-muted text-muted-foreground`}async function S(e,t){let n=await fetch(e,{...t,headers:{"content-type":`application/json`,...t?.headers}}),r=await n.json().catch(()=>null);if(!n.ok)throw Error(r?.error||`请求失败`);return r}function C({onOpenSession:e}){let[s,c]=(0,g.useState)([]),[m,v]=(0,g.useState)(`tasks`),[C,w]=(0,g.useState)(()=>be()),[T,ke]=(0,g.useState)(null),[E,D]=(0,g.useState)(null),[O,k]=(0,g.useState)(null),[A,j]=(0,g.useState)(!1),[M,N]=(0,g.useState)(null),[Ae,P]=(0,g.useState)(``),[F,I]=(0,g.useState)(!1),[L,R]=(0,g.useState)(``),[z,je]=(0,g.useState)([]),[B,V]=(0,g.useState)(),[Me,H]=(0,g.useState)(`off`),[Ne,Pe]=(0,g.useState)([]),[Fe,Ie]=(0,g.useState)(``),[U,W]=(0,g.useState)(()=>b()),[G,K]=(0,g.useState)(()=>b()),[q,Le]=(0,g.useState)({runs:[],total:0,page:1,pageSize:10}),[Re,ze]=(0,g.useState)(!1),[Be,Ve]=(0,g.useState)(null),[He,Ue]=(0,g.useState)([]),We=Ne[0]?.id??``;(0,g.useEffect)(()=>{if(!O)return;let e=()=>k(null);return window.addEventListener(`click`,e),window.addEventListener(`blur`,e),()=>{window.removeEventListener(`click`,e),window.removeEventListener(`blur`,e)}},[O]);async function Ge(){c((await S(`/api/scheduled-tasks`)).tasks)}async function J(e=G){ze(!0),R(``);try{let t=new URLSearchParams;t.set(`page`,String(e.page)),t.set(`pageSize`,String(e.pageSize)),e.taskId&&t.set(`taskId`,e.taskId),e.status&&t.set(`status`,e.status),e.trigger&&t.set(`trigger`,e.trigger),e.keyword.trim()&&t.set(`keyword`,e.keyword.trim()),e.startedFrom&&t.set(`startedFrom`,e.startedFrom),e.startedTo&&t.set(`startedTo`,e.startedTo),Le(await S(`/api/scheduled-tasks/runs?${t.toString()}`))}catch(e){R(e instanceof Error?e.message:p(`requestFailed`))}finally{ze(!1)}}(0,g.useEffect)(()=>{let e=!1;async function t(){try{let t=await S(`/api/project`);if(e)return;Pe(t.projects??[])}catch{}}return t(),()=>{e=!0}},[]),(0,g.useEffect)(()=>{let e=!1;async function t(){try{let t=await he(),[n,r]=await Promise.all([de(t),ue().catch(()=>[])]),i=r.length?r:n,a=i.filter(d),o=await me(t),ee=(o.model&&d(o.model)?a.find(e=>ve(e,o.model))||(le(o.model)?a.find(e=>e.quickforgeCatalogId===o.model.quickforgeCatalogId):void 0):void 0)??a[0];if(e)return;je(i),V(ee),H(o.thinkingLevel??l(ee))}catch(t){e||R(t instanceof Error?t.message:p(`requestFailed`))}}return t(),()=>{e=!0}},[]),(0,g.useEffect)(()=>{let e=!1,t=async()=>{try{let t=await S(`/api/scheduled-tasks`);e||c(t.tasks)}catch(t){e||R(t instanceof Error?t.message:p(`requestFailed`))}};t();let n=window.setInterval(t,10*1e3);return()=>{e=!0,window.clearInterval(n)}},[]),(0,g.useEffect)(()=>{let e=!1;async function t(){try{let t=await S(`/api/agent-profiles`);if(e)return;Ue(t.agents)}catch(t){e||R(t instanceof Error?t.message:p(`requestFailed`))}}return t(),()=>{e=!0}},[]);let Ke=(0,g.useMemo)(()=>s.find(e=>e.id===T),[T,s]),qe=(0,g.useMemo)(()=>z.filter(d),[z]),Je=(0,g.useMemo)(()=>ge(qe,B),[qe,B]),Y=(0,g.useMemo)(()=>s.find(e=>e.id===E)??null,[E,s]),Ye=(0,g.useMemo)(()=>s.filter(e=>e.status===`enabled`).length,[s]),Xe=Math.max(1,Math.ceil(q.total/q.pageSize));function Ze(e){return e?He.find(t=>t.id===e||t.name===e)?.label??e:p(`defaultAgent`)}function X(e,t){w(n=>({...n,[e]:t}))}function Z(e,t){W(n=>({...n,[e]:t}))}function Qe(){let e=z.find(d);ke(null),Ie(We),V(e),H(l(e)),w(be()),N(null),P(``),R(``)}function $e(){Qe(),j(!0)}function Q(){F||(j(!1),Qe())}function et(){let e={...U,page:1};W(e),K(e),J(e)}function tt(){let e=b();W(e),K(e),J(e)}function nt(e){let t=Math.min(Math.max(1,e),Xe),n={...G,page:t};W(n),K(n),J(n)}function rt(e){let t={...G,page:1,pageSize:e};W(t),K(t),J(t)}async function it(){let e=C.scheduleText.trim();if(e){I(!0),R(``);try{let t=await S(`/api/scheduled-tasks/parse`,{method:`POST`,body:JSON.stringify({instruction:e,modelRef:B?ce(B):void 0,model:B,thinkingLevel:Me})});if(t.needMoreInfo||!t.task){P(t.question||`请补充任务信息。`),N(null);return}let n=t.task;P(``),N(n),w(e=>Se(n,e))}catch(e){R(e instanceof Error?e.message:p(`requestFailed`))}finally{I(!1)}}}async function at(){if(Ee(C)){I(!0),R(``);try{let e=Ne.find(e=>e.id===Fe),t={task:Ce(C),modelRef:B?ce(B):void 0,model:B,thinkingLevel:Me,projectId:e?.id,projectName:e?.name};T?await S(`/api/scheduled-tasks/${encodeURIComponent(T)}`,{method:`PUT`,body:JSON.stringify(t)}):await S(`/api/scheduled-tasks`,{method:`POST`,body:JSON.stringify(t)}),Q(),await Ge(),m===`history`&&await J(G)}catch(e){R(e instanceof Error?e.message:p(`requestFailed`))}finally{I(!1)}}}function ot(e){k(null),ke(e.id),w(xe(e)),N(null),P(``),R(``),Ie(e.projectId??``),e.model&&V(e.model),e.thinkingLevel&&H(e.thinkingLevel),j(!0)}async function $(e,t){if(R(``),k(null),!(t===`delete`&&!await fe({description:p(`confirmDeleteTask`),confirmLabel:p(`confirmDelete`),cancelLabel:p(`cancel`),variant:`destructive`})))try{t===`delete`?(await S(`/api/scheduled-tasks/${encodeURIComponent(e)}`,{method:`DELETE`}),T===e&&Q(),E===e&&D(null)):await S(`/api/scheduled-tasks/${encodeURIComponent(e)}/${t}`,{method:`POST`}),await Ge(),m===`history`&&await J(G)}catch(e){R(e instanceof Error?e.message:p(`requestFailed`))}}function st(t){return(0,_.jsxs)(`div`,{className:`mt-2 space-y-2 text-xs text-muted-foreground`,children:[t.sessionId?(0,_.jsx)(f,{variant:`outline`,size:`sm`,onClick:()=>e?.(t.sessionId),children:p(`viewConversation`)}):null,(0,_.jsxs)(`div`,{children:[p(`executionAgent`),t.agentLabel||Ze(t.agentId)]}),t.warning?(0,_.jsx)(`div`,{className:`text-amber-600`,children:t.warning}):null,t.inputContent?(0,_.jsxs)(`div`,{children:[(0,_.jsx)(`div`,{className:`font-medium text-foreground`,children:p(`runInputContent`)}),(0,_.jsx)(`pre`,{className:`mt-1 max-h-32 overflow-auto whitespace-pre-wrap`,children:t.inputContent})]}):null,t.aiResult||t.result?(0,_.jsxs)(`div`,{children:[(0,_.jsx)(`div`,{className:`font-medium text-foreground`,children:p(`runAiResult`)}),(0,_.jsx)(`pre`,{className:`mt-1 max-h-48 overflow-auto whitespace-pre-wrap`,children:t.aiResult||t.result})]}):null,t.errorMessage?(0,_.jsx)(`div`,{className:`text-destructive`,children:t.errorMessage}):null,t.durationMs?(0,_.jsxs)(`div`,{children:[p(`runDuration`),t.durationMs,`ms`]}):null]})}return(0,_.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col overflow-hidden bg-background`,children:[(0,_.jsxs)(`div`,{className:`border-b border-border px-6 py-5`,children:[(0,_.jsx)(`div`,{className:`flex flex-wrap items-center justify-end gap-3`,children:A||Y?(0,_.jsxs)(f,{variant:`outline`,onClick:()=>{A?Q():D(null)},children:[(0,_.jsx)(o,{className:`mr-1 size-4`}),p(`back`)]}):(0,_.jsx)(f,{onClick:$e,children:p(`createTask`)})}),!A&&!Y?(0,_.jsxs)(`div`,{className:`mt-4 flex flex-wrap gap-2`,children:[(0,_.jsxs)(`button`,{type:`button`,className:u(`rounded-full px-4 py-2 text-sm font-medium transition-colors`,m===`tasks`?`bg-primary text-primary-foreground`:`bg-muted text-muted-foreground hover:text-foreground`),onClick:()=>v(`tasks`),children:[p(`taskListTab`),` `,(0,_.jsx)(`span`,{className:`opacity-80`,children:s.length})]}),(0,_.jsx)(`button`,{type:`button`,className:u(`rounded-full px-4 py-2 text-sm font-medium transition-colors`,m===`history`?`bg-primary text-primary-foreground`:`bg-muted text-muted-foreground hover:text-foreground`),onClick:()=>{v(`history`),J(G)},children:p(`executionHistoryTab`)})]}):null]}),(0,_.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto p-6`,children:(0,_.jsx)(`div`,{className:`mx-auto max-w-5xl space-y-5`,children:A?(0,_.jsxs)(_.Fragment,{children:[(0,_.jsxs)(`div`,{className:`rounded-xl border border-border bg-card p-5 space-y-4`,children:[(0,_.jsxs)(`h2`,{className:`inline-flex items-center gap-1.5 text-base font-semibold text-foreground`,children:[p(Ke?`editTask`:`createTask`),(0,_.jsx)(pe,{label:p(`quickAiParseTask`)})]}),(0,_.jsxs)(`label`,{className:`block text-sm font-medium text-foreground`,children:[p(`taskScheduleDescriptionLabel`),(0,_.jsx)(`textarea`,{className:`mt-1 min-h-24 w-full resize-y rounded-xl border border-input bg-background px-3 py-2 text-sm outline-none transition-colors placeholder:text-muted-foreground/65 focus:border-ring`,value:C.scheduleText,onChange:e=>X(`scheduleText`,e.target.value),placeholder:p(`taskScheduleDescriptionPlaceholder`)})]}),(0,_.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,_.jsxs)(f,{onClick:it,disabled:F||!B||!C.scheduleText.trim(),children:[(0,_.jsx)(te,{className:`mr-1 size-3.5`}),p(`aiParseTask`)]}),Ae?(0,_.jsx)(`span`,{className:`text-sm text-amber-600`,children:Ae}):null]}),(0,_.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:[(0,_.jsxs)(`label`,{className:`block text-sm font-medium text-foreground`,children:[p(`taskTitleLabel`),(0,_.jsx)(`input`,{className:`mt-1 h-10 w-full rounded-md border border-input bg-background px-3 text-sm outline-none focus:border-ring`,value:C.title,onChange:e=>X(`title`,e.target.value),placeholder:p(`taskTitlePlaceholder`)})]}),(0,_.jsxs)(`div`,{className:`block text-sm font-medium text-foreground`,children:[p(`executionRule`),(0,_.jsx)(`div`,{className:`mt-1 flex h-10 items-center rounded-md border border-input bg-muted/20 px-3 text-sm text-muted-foreground`,children:C.scheduleRule||`-`})]}),(0,_.jsxs)(`div`,{className:`block text-sm font-medium text-foreground`,children:[`cron`,(0,_.jsx)(`div`,{className:`mt-1 flex h-10 items-center rounded-md border border-input bg-muted/20 px-3 font-mono text-sm text-muted-foreground`,children:C.cronExpression||`-`})]}),(0,_.jsxs)(`div`,{className:`block text-sm font-medium text-foreground`,children:[p(`nextExecutionTime`),(0,_.jsx)(`div`,{className:`mt-1 flex h-10 items-center rounded-md border border-input bg-muted/20 px-3 text-sm text-muted-foreground`,children:y(C.nextRunAt)})]}),(0,_.jsxs)(`label`,{className:`block text-sm font-medium text-foreground sm:col-span-2`,children:[(0,_.jsxs)(`span`,{className:`inline-flex items-center gap-1.5`,children:[p(`taskExecutionMode`),(0,_.jsx)(pe,{label:p(`taskExecutionModeHelp`)})]}),(0,_.jsxs)(`select`,{className:`mt-1 h-10 w-full rounded-md border border-input bg-background px-3 text-sm text-foreground outline-none focus:border-ring`,value:C.executionMode,onChange:e=>X(`executionMode`,e.target.value),children:[(0,_.jsx)(`option`,{value:`serial`,children:p(`taskExecutionModeSerial`)}),(0,_.jsx)(`option`,{value:`parallel`,children:p(`taskExecutionModeParallel`)})]})]}),(0,_.jsxs)(`label`,{className:`block text-sm font-medium text-foreground sm:col-span-2`,children:[p(`promptContentLabel`),(0,_.jsx)(`textarea`,{className:`mt-1 min-h-28 w-full resize-y rounded-xl border border-input bg-background px-3 py-2 text-sm text-foreground outline-none transition-colors placeholder:text-muted-foreground/65 focus:border-ring`,value:C.instruction,onChange:e=>X(`instruction`,e.target.value),placeholder:p(`promptContentPlaceholder`)})]})]}),(0,_.jsxs)(`label`,{className:`flex items-center gap-2 text-sm text-foreground`,children:[(0,_.jsx)(`input`,{type:`checkbox`,checked:C.enabled,onChange:e=>X(`enabled`,e.target.checked)}),p(`taskEnabledSwitch`)]}),(0,_.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2 rounded-xl border border-border bg-muted/20 px-2 py-2`,children:[(0,_.jsxs)(`span`,{className:`relative inline-flex items-center`,children:[(0,_.jsx)(te,{className:`pointer-events-none absolute left-2 size-3.5 text-muted-foreground/70`}),(0,_.jsxs)(`select`,{className:`h-8 max-w-[240px] rounded-md border border-transparent bg-transparent pl-7 pr-2 text-xs text-muted-foreground outline-none hover:bg-background focus:border-ring`,value:B?h(B):``,onChange:e=>{let t=Je.find(t=>h(t)===e.target.value);V(t),H(l(t))},title:p(`taskModel`),children:[Je.length===0?(0,_.jsx)(`option`,{value:``,children:p(`noModelAvailable`)}):null,Je.map(e=>(0,_.jsxs)(`option`,{value:h(e),children:[se(e),ve(e,B)?` ✓`:``]},h(e)))]})]}),(0,_.jsxs)(`span`,{className:`relative inline-flex items-center`,children:[(0,_.jsx)(r,{className:`pointer-events-none absolute left-2 size-3.5 text-muted-foreground/70`}),(0,_.jsx)(`select`,{className:`h-8 rounded-md border border-transparent bg-transparent pl-7 pr-2 text-xs text-muted-foreground outline-none hover:bg-background focus:border-ring`,value:Me,onChange:e=>H(e.target.value),title:p(`taskThinking`),children:_e.map(e=>(0,_.jsx)(`option`,{value:e.value,children:e.label()},e.value))})]}),(0,_.jsxs)(`span`,{className:`relative inline-flex items-center`,children:[(0,_.jsx)(ee,{className:`pointer-events-none absolute left-2 size-3.5 text-muted-foreground/70`}),(0,_.jsxs)(`select`,{className:`h-8 max-w-[220px] rounded-md border border-transparent bg-transparent pl-7 pr-2 text-xs text-muted-foreground outline-none hover:bg-background focus:border-ring`,value:Fe,onChange:e=>Ie(e.target.value),title:p(`taskProjectLabel`),children:[(0,_.jsx)(`option`,{value:``,children:p(`noProjectBound`)}),Ne.map(e=>(0,_.jsx)(`option`,{value:e.id,children:e.name},e.id))]})]}),(0,_.jsxs)(`span`,{className:`relative inline-flex items-center`,children:[(0,_.jsx)(i,{className:`pointer-events-none absolute left-2 size-3.5 text-muted-foreground/70`}),(0,_.jsxs)(`select`,{className:`h-8 max-w-[220px] rounded-md border border-transparent bg-transparent pl-7 pr-2 text-xs text-muted-foreground outline-none hover:bg-background focus:border-ring`,value:C.agentId,onChange:e=>X(`agentId`,e.target.value),title:p(`executionAgent`),children:[(0,_.jsx)(`option`,{value:``,children:p(`defaultAgent`)}),He.map(e=>(0,_.jsx)(`option`,{value:e.id,children:e.label},e.id))]})]})]}),M?(0,_.jsxs)(`div`,{className:`rounded-xl border border-border bg-muted/30 p-3 text-sm`,children:[(0,_.jsxs)(`div`,{className:`mb-2 flex items-center gap-2 font-medium text-foreground`,children:[(0,_.jsx)(n,{className:`size-4 text-emerald-600`}),p(`aiParsed`)]}),(0,_.jsxs)(`div`,{className:`grid gap-2 text-muted-foreground sm:grid-cols-2`,children:[(0,_.jsxs)(`div`,{children:[p(`taskName`),(0,_.jsx)(`span`,{className:`text-foreground`,children:M.title})]}),(0,_.jsxs)(`div`,{children:[p(`executionRule`),(0,_.jsx)(`span`,{className:`text-foreground`,children:M.scheduleRule})]}),(0,_.jsxs)(`div`,{children:[`cron:`,(0,_.jsx)(`span`,{className:`font-mono text-foreground`,children:M.cronExpression??`-`})]}),(0,_.jsxs)(`div`,{children:[p(`nextExecutionTime`),(0,_.jsx)(`span`,{className:`text-foreground`,children:y(M.nextRunAt)})]}),(0,_.jsxs)(`div`,{className:`sm:col-span-2`,children:[p(`aiInstruction`),(0,_.jsx)(`span`,{className:`text-foreground`,children:M.instruction})]})]})]}):null,L?(0,_.jsx)(`div`,{className:`rounded-md border border-destructive/30 bg-destructive/10 px-3 py-2 text-sm text-destructive`,children:L}):null]}),(0,_.jsxs)(`div`,{className:`flex justify-end gap-2`,children:[(0,_.jsx)(f,{variant:`outline`,onClick:Q,disabled:F,children:p(`cancel`)}),(0,_.jsx)(f,{onClick:at,disabled:F||!B||!Ee(C),children:p(Ke?`saveTask`:`confirmCreate`)})]})]}):Y?(0,_.jsxs)(`div`,{className:`rounded-xl border border-border bg-card`,children:[(0,_.jsx)(`div`,{className:`flex flex-wrap items-start justify-between gap-3 border-b border-border px-5 py-4`,children:(0,_.jsxs)(`div`,{children:[(0,_.jsx)(`h2`,{className:`text-base font-semibold text-foreground`,children:Y.title}),(0,_.jsx)(`p`,{className:`mt-1 text-sm text-muted-foreground`,children:Y.scheduleRule})]})}),(0,_.jsx)(`div`,{className:`px-5 py-4`,children:(0,_.jsxs)(`div`,{className:`space-y-4 text-sm`,children:[(0,_.jsxs)(`div`,{children:[(0,_.jsx)(`div`,{className:`mb-1 font-medium text-foreground`,children:p(`taskContent`)}),(0,_.jsx)(`pre`,{className:`max-h-48 overflow-auto whitespace-pre-wrap rounded-xl border border-border bg-muted/20 p-3 text-muted-foreground`,children:Y.instruction})]}),(0,_.jsxs)(`div`,{className:`grid gap-3 text-muted-foreground sm:grid-cols-2`,children:[(0,_.jsxs)(`div`,{children:[p(`executionRule`),(0,_.jsx)(`span`,{className:`text-foreground`,children:Y.scheduleRule})]}),(0,_.jsxs)(`div`,{children:[p(`taskExecutionMode`),`:`,(0,_.jsx)(`span`,{className:`text-foreground`,children:Te(Y.executionMode)})]}),(0,_.jsxs)(`div`,{children:[`cron:`,(0,_.jsx)(`span`,{className:`font-mono text-foreground`,children:Y.cronExpression??`-`})]}),(0,_.jsxs)(`div`,{children:[p(`lastExecution`),(0,_.jsx)(`span`,{className:`text-foreground`,children:y(Y.lastRunAt)})]}),(0,_.jsxs)(`div`,{children:[p(`nextExecution`),(0,_.jsx)(`span`,{className:`text-foreground`,children:y(Y.nextRunAt)})]}),(0,_.jsxs)(`div`,{children:[p(`executionAgent`),(0,_.jsx)(`span`,{className:`text-foreground`,children:Ze(Y.agentId)})]}),Y.projectName?(0,_.jsxs)(`div`,{children:[p(`taskProject`),(0,_.jsx)(`span`,{className:`text-foreground`,children:Y.projectName})]}):null,Y.model?(0,_.jsxs)(`div`,{children:[p(`taskModel`),`:`,(0,_.jsx)(`span`,{className:`text-foreground`,children:se(Y.model)})]}):null,Y.thinkingLevel?(0,_.jsxs)(`div`,{children:[p(`taskThinkingLevel`),(0,_.jsx)(`span`,{className:`text-foreground`,children:_e.find(e=>e.value===Y.thinkingLevel)?.label()??Y.thinkingLevel})]}):null,(0,_.jsxs)(`div`,{children:[p(`createdAt`),`:`,(0,_.jsx)(`span`,{className:`text-foreground`,children:y(Y.createdAt)})]})]}),Y.runs?.length>0?(0,_.jsxs)(`div`,{children:[(0,_.jsx)(`div`,{className:`mb-2 font-medium text-foreground`,children:p(`recentExecutions`)}),(0,_.jsx)(`div`,{className:`space-y-2`,children:Y.runs.slice(0,5).map(e=>(0,_.jsxs)(`details`,{className:`rounded-lg border border-border bg-muted/20 p-2 text-xs text-muted-foreground`,children:[(0,_.jsxs)(`summary`,{className:`cursor-pointer text-foreground`,children:[y(e.startedAt),` · `,e.trigger===`manual`?p(`manualRun`):p(`autoRun`),` · `,De(e.status)]}),st(e)]},e.id))})]}):null]})}),(0,_.jsx)(`div`,{className:`border-t border-border px-5 py-4`,children:(0,_.jsxs)(`div`,{className:`flex flex-wrap justify-end gap-2`,children:[Y.lastSessionId?(0,_.jsx)(f,{variant:`outline`,onClick:()=>e?.(Y.lastSessionId),children:p(`viewConversation`)}):null,(0,_.jsxs)(f,{variant:`outline`,disabled:!we(Y),onClick:()=>void $(Y.id,`run`),children:[(0,_.jsx)(ae,{className:`mr-1 size-3.5`}),p(`executeNow`)]}),(0,_.jsxs)(f,{variant:`outline`,disabled:x(Y),onClick:()=>ot(Y),children:[(0,_.jsx)(t,{className:`mr-1 size-3.5`}),p(`editTask`)]}),(0,_.jsxs)(f,{variant:`destructive`,disabled:x(Y),onClick:()=>void $(Y.id,`delete`),children:[(0,_.jsx)(ie,{className:`mr-1 size-3.5`}),p(`deleteTask`)]})]})})]}):(0,_.jsxs)(_.Fragment,{children:[L?(0,_.jsx)(`div`,{className:`rounded-md border border-destructive/30 bg-destructive/10 px-3 py-2 text-sm text-destructive`,children:L}):null,m===`tasks`?(0,_.jsxs)(_.Fragment,{children:[(0,_.jsx)(`div`,{className:`rounded-xl border border-border bg-card p-4`,children:(0,_.jsx)(`div`,{className:`flex flex-wrap items-center justify-between gap-3`,children:(0,_.jsxs)(`div`,{children:[(0,_.jsx)(`h2`,{className:`text-base font-semibold text-foreground`,children:p(`taskList`)}),(0,_.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:p(`tasksCount`,{total:s.length,enabled:Ye})})]})})}),(0,_.jsx)(`div`,{className:`grid gap-4 md:grid-cols-2`,children:s.length===0?(0,_.jsx)(`div`,{className:`rounded-lg px-3 py-3 text-center text-xs text-muted-foreground/55 md:col-span-2`,children:p(`noScheduledTasks`)}):s.map(e=>{let n=e.status===`enabled`,r=e.status===`completed`,o=x(e);return(0,_.jsxs)(`div`,{className:`relative cursor-pointer rounded-xl border border-border bg-card p-4 transition-colors hover:bg-muted/15`,onClick:()=>D(e.id),children:[(0,_.jsxs)(`div`,{className:`flex items-start justify-between gap-3`,children:[(0,_.jsxs)(`div`,{className:`min-w-0`,children:[(0,_.jsx)(`div`,{className:`flex items-center gap-2`,children:(0,_.jsx)(`h3`,{className:`truncate text-sm font-medium text-foreground/90`,children:e.title})}),(0,_.jsx)(`p`,{className:`mt-2 text-sm text-muted-foreground`,children:ye(e.instruction,20)})]}),(0,_.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2`,onClick:e=>e.stopPropagation(),children:[(0,_.jsx)(`button`,{type:`button`,role:`switch`,"aria-checked":n,disabled:r,className:u(`relative h-6 w-11 rounded-full transition-colors disabled:cursor-not-allowed disabled:opacity-60`,n?`bg-emerald-500`:`bg-muted-foreground/30`),onClick:()=>void $(e.id,e.status===`paused`?`resume`:`pause`),title:e.status===`paused`?p(`enable`):p(`pauseTask`),children:(0,_.jsx)(`span`,{className:u(`absolute left-0.5 top-0.5 size-5 rounded-full bg-white shadow transition-transform`,n?`translate-x-5`:`translate-x-0`)})}),(0,_.jsxs)(`div`,{className:`relative`,children:[(0,_.jsx)(f,{variant:`ghost`,size:`icon`,onClick:()=>k(O===e.id?null:e.id),title:p(`moreActions`),children:(0,_.jsx)(re,{className:`size-4`})}),O===e.id?(0,_.jsxs)(`div`,{className:`absolute right-0 z-20 mt-1 w-36 overflow-hidden rounded-xl border border-border bg-popover py-1 text-sm shadow-quickforge`,children:[(0,_.jsxs)(`button`,{className:`flex w-full items-center gap-2 px-3 py-2 text-left hover:bg-muted disabled:cursor-not-allowed disabled:opacity-50`,disabled:!we(e),onClick:()=>void $(e.id,`run`),children:[(0,_.jsx)(ae,{className:`size-3.5`}),p(`executeNow`)]}),(0,_.jsxs)(`button`,{className:`flex w-full items-center gap-2 px-3 py-2 text-left hover:bg-muted disabled:cursor-not-allowed disabled:opacity-50`,disabled:o,onClick:()=>ot(e),children:[(0,_.jsx)(t,{className:`size-3.5`}),p(`editTask`)]}),(0,_.jsxs)(`button`,{className:`flex w-full items-center gap-2 px-3 py-2 text-left hover:bg-muted`,onClick:()=>{k(null),D(e.id)},children:[(0,_.jsx)(ne,{className:`size-3.5`}),p(`viewDetails`)]}),(0,_.jsxs)(`button`,{className:`flex w-full items-center gap-2 px-3 py-2 text-left text-destructive hover:bg-muted disabled:cursor-not-allowed disabled:opacity-50`,disabled:o,onClick:()=>void $(e.id,`delete`),children:[(0,_.jsx)(ie,{className:`size-3.5`}),p(`deleteTask`)]})]}):null]})]})]}),(0,_.jsxs)(`div`,{className:`mt-3 flex flex-wrap gap-x-4 gap-y-1 text-xs text-muted-foreground`,children:[(0,_.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[(0,_.jsx)(a,{className:`size-3`}),e.scheduleRule]}),(0,_.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[(0,_.jsx)(i,{className:`size-3`}),Ze(e.agentId)]}),(0,_.jsxs)(`span`,{children:[p(`taskExecutionMode`),`:`,Te(e.executionMode)]}),e.projectName?(0,_.jsxs)(`span`,{children:[p(`taskProject`),e.projectName]}):null]}),(0,_.jsxs)(`div`,{className:`mt-4 grid gap-2 border-t border-border pt-3 text-xs text-muted-foreground sm:grid-cols-2`,children:[(0,_.jsxs)(`span`,{children:[p(`lastExecution`),y(e.lastRunAt)]}),(0,_.jsxs)(`span`,{children:[p(`nextExecution`),y(e.nextRunAt)]})]})]},e.id)})})]}):(0,_.jsxs)(`div`,{className:`space-y-4`,children:[(0,_.jsxs)(`div`,{className:`rounded-xl border border-border bg-card p-4`,children:[(0,_.jsxs)(`div`,{className:`mb-3 flex items-center gap-2 text-sm font-medium text-foreground`,children:[(0,_.jsx)(oe,{className:`size-4`}),p(`historyFilters`)]}),(0,_.jsxs)(`div`,{className:`grid gap-3 md:grid-cols-3`,children:[(0,_.jsxs)(`label`,{className:`block text-xs font-medium text-muted-foreground`,children:[p(`taskName`),(0,_.jsxs)(`select`,{className:`mt-1 h-9 w-full rounded-md border border-input bg-background px-2 text-sm text-foreground`,value:U.taskId,onChange:e=>Z(`taskId`,e.target.value),children:[(0,_.jsx)(`option`,{value:``,children:p(`allTasks`)}),s.map(e=>(0,_.jsx)(`option`,{value:e.id,children:e.title},e.id))]})]}),(0,_.jsxs)(`label`,{className:`block text-xs font-medium text-muted-foreground`,children:[p(`status`),(0,_.jsxs)(`select`,{className:`mt-1 h-9 w-full rounded-md border border-input bg-background px-2 text-sm text-foreground`,value:U.status,onChange:e=>Z(`status`,e.target.value),children:[(0,_.jsx)(`option`,{value:``,children:p(`allStatuses`)}),(0,_.jsx)(`option`,{value:`running`,children:p(`executionRunning`)}),(0,_.jsx)(`option`,{value:`success`,children:p(`executionSuccess`)}),(0,_.jsx)(`option`,{value:`failed`,children:p(`taskFailed`)})]})]}),(0,_.jsxs)(`label`,{className:`block text-xs font-medium text-muted-foreground`,children:[p(`triggerType`),(0,_.jsxs)(`select`,{className:`mt-1 h-9 w-full rounded-md border border-input bg-background px-2 text-sm text-foreground`,value:U.trigger,onChange:e=>Z(`trigger`,e.target.value),children:[(0,_.jsx)(`option`,{value:``,children:p(`allTriggers`)}),(0,_.jsx)(`option`,{value:`schedule`,children:p(`autoRun`)}),(0,_.jsx)(`option`,{value:`manual`,children:p(`manualRun`)})]})]}),(0,_.jsxs)(`label`,{className:`block text-xs font-medium text-muted-foreground`,children:[p(`startTime`),(0,_.jsx)(`input`,{type:`datetime-local`,className:`mt-1 h-9 w-full rounded-md border border-input bg-background px-2 text-sm text-foreground`,value:U.startedFrom,onChange:e=>Z(`startedFrom`,e.target.value)})]}),(0,_.jsxs)(`label`,{className:`block text-xs font-medium text-muted-foreground`,children:[p(`endTime`),(0,_.jsx)(`input`,{type:`datetime-local`,className:`mt-1 h-9 w-full rounded-md border border-input bg-background px-2 text-sm text-foreground`,value:U.startedTo,onChange:e=>Z(`startedTo`,e.target.value)})]}),(0,_.jsxs)(`label`,{className:`block text-xs font-medium text-muted-foreground`,children:[p(`keyword`),(0,_.jsx)(`input`,{className:`mt-1 h-9 w-full rounded-md border border-input bg-background px-2 text-sm text-foreground`,value:U.keyword,onChange:e=>Z(`keyword`,e.target.value),placeholder:p(`keywordPlaceholder`)})]})]}),(0,_.jsxs)(`div`,{className:`mt-3 flex justify-end gap-2`,children:[(0,_.jsx)(f,{variant:`outline`,onClick:tt,children:p(`reset`)}),(0,_.jsx)(f,{onClick:et,children:p(`query`)})]})]}),(0,_.jsxs)(`div`,{className:`overflow-x-auto rounded-xl border border-border bg-card`,children:[(0,_.jsxs)(`div`,{className:`grid min-w-[600px] grid-cols-[1.3fr_0.7fr_0.7fr_1fr_0.7fr] gap-3 border-b border-border px-4 py-3 text-xs font-medium text-muted-foreground`,children:[(0,_.jsx)(`span`,{children:p(`taskName`)}),(0,_.jsx)(`span`,{children:p(`status`)}),(0,_.jsx)(`span`,{children:p(`triggerType`)}),(0,_.jsx)(`span`,{children:p(`startTime`)}),(0,_.jsx)(`span`,{children:p(`runDuration`)})]}),Re?(0,_.jsx)(`div`,{className:`p-8 text-center text-sm text-muted-foreground`,children:p(`loading`)}):q.runs.length===0?(0,_.jsx)(`div`,{className:`p-8 text-center text-sm text-muted-foreground`,children:p(`noExecutionHistory`)}):q.runs.map(e=>(0,_.jsxs)(`div`,{className:`border-b border-border last:border-b-0`,children:[(0,_.jsxs)(`button`,{type:`button`,className:`grid w-full min-w-[600px] grid-cols-[1.3fr_0.7fr_0.7fr_1fr_0.7fr] gap-3 px-4 py-3 text-left text-sm hover:bg-muted/40`,onClick:()=>Ve(Be===e.id?null:e.id),children:[(0,_.jsx)(`span`,{className:`min-w-0 truncate text-foreground`,children:e.taskTitle}),(0,_.jsx)(`span`,{children:(0,_.jsx)(`span`,{className:u(`rounded-full px-2 py-0.5 text-xs`,Oe(e.status)),children:De(e.status)})}),(0,_.jsx)(`span`,{className:`text-muted-foreground`,children:e.trigger===`manual`?p(`manualRun`):p(`autoRun`)}),(0,_.jsx)(`span`,{className:`text-muted-foreground`,children:y(e.startedAt)}),(0,_.jsx)(`span`,{className:`text-muted-foreground`,children:e.durationMs?`${e.durationMs}ms`:`-`})]}),Be===e.id?(0,_.jsx)(`div`,{className:`border-t border-border bg-muted/20 px-4 py-3`,children:st(e)}):null]},`${e.taskId}:${e.id}`)),(0,_.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-3 px-4 py-3 text-sm text-muted-foreground`,children:[(0,_.jsx)(`span`,{children:p(`paginationSummary`,{page:q.page,pages:Xe,total:q.total})}),(0,_.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,_.jsx)(`select`,{className:`h-8 rounded-md border border-input bg-background px-2 text-sm`,value:q.pageSize,onChange:e=>rt(Number(e.target.value)),children:[10,20,50,100].map(e=>(0,_.jsx)(`option`,{value:e,children:p(`pageSize`,{size:e})},e))}),(0,_.jsx)(f,{variant:`outline`,size:`sm`,disabled:q.page<=1,onClick:()=>nt(q.page-1),children:p(`previousPage`)}),(0,_.jsx)(f,{variant:`outline`,size:`sm`,disabled:q.page>=Xe,onClick:()=>nt(q.page+1),children:p(`nextPage`)})]})]})]})]})]})})})]})}export{C as ScheduledTasksPage};
@@ -1,5 +1,5 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/AgentProfilesPage-Dl5Peqov.js","assets/rolldown-runtime-DWdDZTNf.js","assets/index-BivLuZvX.js","assets/pi-ai-Cr2ee4a0.js","assets/dist-yDHbi5ux.js","assets/pi-web-ui-DV5jKjSg.js","assets/lit-vendor-DvaQX_UQ.js","assets/css-utils-31qzCXsk.js","assets/icons-2D18YbSI.js","assets/react-vendor-3UaA-C9W.js","assets/skills-dialog-BTJ7mzk_.js","assets/model-display-label-C6-0eDxF.js","assets/model-reference-o41fJ6jQ.js","assets/index-1ei6nhs-.css","assets/model-identity-CgA6_Pbm.js","assets/mcp-servers-dialog-BEV4_TXC.js","assets/PluginsPage-BDKYfLna.js","assets/plugin-api-Uu2xAB4d.js","assets/ScheduledTasksPage--GAki3lB.js","assets/ShareLinksSettingsPage-BQQMsvJo.js","assets/CloudAccountSettingsPage-BG5Nn3bq.js"])))=>i.map(i=>d[i]);
2
- import{i as e}from"./rolldown-runtime-DWdDZTNf.js";import{Ct as t,Gt as n,It as r,Lt as i,P as a,Q as o,Rt as s,Vt as c,Wt as ee,Y as l,_ as u,_t as d,f as te,gt as f,jt as ne,m as p,qt as m,u as h,w as g,xt as _,y as re,zt as v}from"./icons-2D18YbSI.js";import{n as y,r as ie}from"./react-vendor-3UaA-C9W.js";import{c as ae,d as oe,f as se,l as ce,p as b,u as le}from"./lit-vendor-DvaQX_UQ.js";import{m as x,x as S}from"./pi-web-ui-DV5jKjSg.js";import{J as C}from"./pi-ai-Cr2ee4a0.js";import{n as w,t as ue}from"./model-display-label-C6-0eDxF.js";import{t as de}from"./model-reference-o41fJ6jQ.js";import{Ct as fe,J as pe,K as me,Pt as he,Qt as ge,St as _e,Tt as T,V as ve,Zt as E,_n as ye,a as be,an as xe,bt as Se,c as Ce,ct as we,dt as Te,en as Ee,fn as De,ft as D,gn as Oe,hn as O,ht as ke,i as Ae,in as je,l as Me,lt as Ne,mn as Pe,nn as Fe,on as Ie,ot as Le,pt as k,rn as Re,s as ze,sn as Be,st as Ve,un as He,ut as Ue,vn as A,vt as We,wt as j,yn as M,yt as Ge}from"./index-BivLuZvX.js";var N=e(m(),1),Ke={openai:{name:`OpenAI`,baseUrl:`https://api.openai.com/v1`,protocol:`openai-completions`,modelId:`gpt-4o`,supportsImages:!0},deepseek:{name:`DeepSeek`,baseUrl:`https://api.deepseek.com/v1`,protocol:`openai-completions`,modelId:`deepseek-chat`},glm:{name:`Zhipu GLM`,baseUrl:`https://open.bigmodel.cn/api/paas/v4`,protocol:`openai-completions`,modelId:`glm-4-plus`},ollama:{name:`Ollama`,baseUrl:`http://localhost:11434/v1`,protocol:`openai-completions`,modelId:`llama3.1`},litellm:{name:E.name,baseUrl:E.baseUrl,protocol:`openai-completions`,modelId:E.modelId,supportsImages:E.supportsImages}},qe=[{key:`openai`,label:M(`presetOpenai`)},{key:`deepseek`,label:M(`presetDeepseek`)},{key:`glm`,label:M(`presetGlm`)},{key:`ollama`,label:M(`presetOllama`)},{key:`litellm`,label:M(`presetLitellm`)},{key:`custom`,label:M(`presetCustom`)}],P=()=>({modelId:``,contextWindow:E.contextWindow,maxTokens:E.maxTokens,reasoning:!0,supportsImages:!1,visibleInSelectors:!0,open:!1}),F=()=>({name:E.name,baseUrl:E.baseUrl,apiKey:``,headerRows:[],protocol:`openai-completions`,models:[P()]}),Je=class extends x{providers=[];form=F();editingProviderId;formOpen=!1;loading=!0;apiKeyVisible=!1;advancedOpen=!1;activePreset=``;testing=!1;testResult=`idle`;testError=``;autoEditProviderName=null;async connectedCallback(){if(super.connectedCallback(),await this.loadProviders(),this.autoEditProviderName){let e=this.providers.find(e=>e.name===this.autoEditProviderName);e&&await this.openEditForm(e),this.autoEditProviderName=null}}getTabName(){return M(`customModels`)}async loadProviders(){this.loading=!0,this.requestUpdate();try{this.providers=await S().customProviders.getAll()}catch(e){w.error(`Failed to load custom providers:`,e),this.providers=[]}finally{this.loading=!1,this.requestUpdate()}}resetTestState(){this.testing=!1,this.testResult=`idle`,this.testError=``}openAddForm(){this.editingProviderId=void 0,this.form=F(),this.apiKeyVisible=!1,this.advancedOpen=!1,this.activePreset=``,this.resetTestState(),this.formOpen=!0,this.requestUpdate()}async openEditForm(e){let t=await S().providerKeys.get(e.name)??e.apiKey??``,n=e.models??[],r=n.length>0?n.map(e=>({modelId:e.id,contextWindow:e.contextWindow??E.contextWindow,maxTokens:e.maxTokens??E.maxTokens,reasoning:e.reasoning===!0,supportsImages:e.input?.includes(`image`)===!0,visibleInSelectors:e.quickforgeHidden!==!0,open:!1})):[P()],i=n[0]?.headers??{},a=Object.entries(i).map(([e,t])=>({key:e,value:String(t)}));this.editingProviderId=e.id,this.form={providerId:e.id,id:e.id,name:e.name,baseUrl:e.baseUrl,apiKey:t,headerRows:a,protocol:e.type===`anthropic-messages`?`anthropic-messages`:`openai-completions`,models:r},this.apiKeyVisible=!1,this.advancedOpen=a.length>0||e.type===`anthropic-messages`,this.activePreset=``,this.resetTestState(),this.formOpen=!0,this.requestUpdate()}closeForm(){this.formOpen=!1,this.editingProviderId=void 0,this.form=F(),this.apiKeyVisible=!1,this.advancedOpen=!1,this.activePreset=``,this.resetTestState(),this.requestUpdate()}toggleApiKeyVisibility(){this.apiKeyVisible=!this.apiKeyVisible,this.requestUpdate()}updateForm(e,t){this.form={...this.form,[e]:t},(e===`name`||e===`baseUrl`)&&(this.activePreset=``),this.resetTestState(),this.requestUpdate()}updateModelField(e,t,n){let r=this.form.models.map((r,i)=>i===e?{...r,[t]:n}:r);this.form={...this.form,models:r},t===`modelId`&&(this.activePreset=``,this.resetTestState()),this.requestUpdate()}addModelRow(){this.form={...this.form,models:[...this.form.models,P()]},this.requestUpdate()}removeModelRow(e){let t=this.form.models.filter((t,n)=>n!==e);this.form={...this.form,models:t},this.requestUpdate()}toggleModelExpanded(e){let t=this.form.models.map((t,n)=>n===e?{...t,open:!t.open}:t);this.form={...this.form,models:t},this.requestUpdate()}addHeaderRow(){this.form={...this.form,headerRows:[...this.form.headerRows,{key:``,value:``}]},this.requestUpdate()}updateHeaderRow(e,t,n){let r=this.form.headerRows.map((r,i)=>i===e?{...r,[t]:n}:r);this.form={...this.form,headerRows:r},this.requestUpdate()}removeHeaderRow(e){let t=this.form.headerRows.filter((t,n)=>n!==e);this.form={...this.form,headerRows:t},this.requestUpdate()}applyPreset(e){if(this.activePreset=e,e===`custom`)this.form={...this.form,name:``,baseUrl:``,protocol:`openai-completions`,models:[P()]};else{let t=Ke[e];this.form={...this.form,name:t.name,baseUrl:t.baseUrl,protocol:t.protocol,models:[{...P(),modelId:t.modelId,supportsImages:t.supportsImages===!0,open:!1}]}}this.resetTestState(),this.requestUpdate()}buildHeadersFromRows(){let e={};for(let t of this.form.headerRows){let n=t.key.trim(),r=t.value.trim();n&&r&&(e[n]=r)}return e}buildModel(e,t){let n=this.form.name.trim(),r=this.form.baseUrl.trim(),i=e.reasoning===!0,a=e.supportsImages===!0?[`text`,`image`]:[`text`],o=r.includes(`api.deepseek.com`);return je({id:e.modelId,name:`${e.modelId} (${n})`,api:this.form.protocol,provider:n,baseUrl:r.replace(/\/$/,``),reasoning:i,input:a,quickforgeHidden:e.visibleInSelectors?void 0:!0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0},contextWindow:Number(e.contextWindow)||E.contextWindow,maxTokens:Number(e.maxTokens)||E.maxTokens,headers:Object.keys(t).length>0?t:void 0,thinkingLevelMap:o&&i?{low:`high`,medium:`high`,high:`high`,xhigh:`max`}:void 0,compat:this.form.protocol===`openai-completions`?{supportsStore:!1,supportsDeveloperRole:!1,supportsReasoningEffort:i,supportsUsageInStreaming:!1,supportsStrictMode:!1,maxTokensField:`max_tokens`,...o&&i?{requiresReasoningContentOnAssistantMessages:!0,thinkingFormat:`deepseek`}:{}}:void 0})}async testConnection(){let e=this.form.baseUrl.trim(),t=this.form.models.find(e=>e.modelId.trim());if(!e||!t){this.testing=!1,this.testResult=`fail`,this.testError=M(`testRequiresFields`),this.requestUpdate();return}let n=this.buildHeadersFromRows(),r=this.buildModel(t,n);this.testing=!0,this.testResult=`idle`,this.testError=``,this.requestUpdate();try{let e=await(await fetch(`/api/models/test-connection`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({model:r,apiKey:this.form.apiKey.trim()})})).json().catch(()=>({}));e?.ok?(this.testResult=`ok`,this.testError=``):(this.testResult=`fail`,this.testError=e?.error||M(`connectionFailed`))}catch(e){this.testResult=`fail`,this.testError=e?.message||M(`connectionFailed`)}finally{this.testing=!1,this.requestUpdate()}}async saveModel(){let e=this.form.name.trim(),t=this.form.baseUrl.trim();if(!e||!t){j(M(`fillProviderBaseUrlModel`));return}let n=this.form.models.filter(e=>e.modelId.trim());if(n.length===0){j(M(`atLeastOneModel`));return}let r=n.map(e=>e.modelId.trim());if(new Set(r).size!==r.length){j(M(`duplicateModelId`));return}let i=this.buildHeadersFromRows(),a=n.map(e=>this.buildModel(e,i)),o=this.form.apiKey.trim(),s=this.editingProviderId?this.providers.find(e=>e.id===this.editingProviderId):void 0,c={id:this.editingProviderId??Be(),name:e,type:this.form.protocol,baseUrl:a[0].baseUrl,apiKey:o||void 0,models:a};try{let e=S();await e.customProviders.set(c),s&&s.name!==c.name&&await e.providerKeys.delete(s.name),o?await e.providerKeys.set(c.name,o):await e.providerKeys.delete(c.name),He(),this.closeForm(),await this.loadProviders()}catch(e){w.error(`Failed to save custom model:`,e),j(M(`saveCustomModelFailed`))}}async deleteProvider(e){if(await T({description:M(`confirmDeleteProvider`,{name:e.name}),confirmLabel:M(`confirmDelete`),cancelLabel:M(`cancel`),variant:`destructive`}))try{let t=S();await t.customProviders.delete(e.id),await t.providerKeys.delete(e.name),He(),await this.loadProviders()}catch(e){w.error(`Failed to delete custom provider:`,e),j(M(`deleteFailed`))}}renderProvider(e){let t=e.models??[],n=t.length,r=e.type===`anthropic-messages`?`Anthropic Messages`:`OpenAI Compatible`;return b`
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/AgentProfilesPage-BfA_sQ3A.js","assets/rolldown-runtime-DWdDZTNf.js","assets/index-BTPzyq7d.js","assets/pi-ai-Cr2ee4a0.js","assets/dist-yDHbi5ux.js","assets/pi-web-ui-DV5jKjSg.js","assets/lit-vendor-DvaQX_UQ.js","assets/css-utils-31qzCXsk.js","assets/icons-2D18YbSI.js","assets/react-vendor-3UaA-C9W.js","assets/skills-dialog-C1fJ1Jl7.js","assets/model-display-label-C6-0eDxF.js","assets/model-reference-o41fJ6jQ.js","assets/index-BiCTgUlY.css","assets/model-identity-CgA6_Pbm.js","assets/mcp-servers-dialog-GY7sdfIr.js","assets/PluginsPage-CPE5tbbf.js","assets/plugin-api-Uu2xAB4d.js","assets/ScheduledTasksPage-PTxL_PPg.js","assets/ShareLinksSettingsPage-Bl8fP62X.js","assets/CloudAccountSettingsPage-qZh0lTUN.js"])))=>i.map(i=>d[i]);
2
+ import{i as e}from"./rolldown-runtime-DWdDZTNf.js";import{Ct as t,Gt as n,It as r,Lt as i,P as a,Q as o,Rt as s,Vt as c,Wt as ee,Y as l,_ as u,_t as d,f as te,gt as f,jt as ne,m as p,qt as m,u as h,w as g,xt as _,y as re,zt as v}from"./icons-2D18YbSI.js";import{n as y,r as ie}from"./react-vendor-3UaA-C9W.js";import{c as ae,d as oe,f as se,l as ce,p as b,u as le}from"./lit-vendor-DvaQX_UQ.js";import{m as x,x as S}from"./pi-web-ui-DV5jKjSg.js";import{J as C}from"./pi-ai-Cr2ee4a0.js";import{n as w,t as ue}from"./model-display-label-C6-0eDxF.js";import{t as de}from"./model-reference-o41fJ6jQ.js";import{Ct as fe,J as pe,K as me,Pt as he,Qt as ge,St as _e,Tt as T,V as ve,Zt as E,_n as ye,a as be,an as xe,bt as Se,c as Ce,ct as we,dt as Te,en as Ee,fn as De,ft as D,gn as Oe,hn as O,ht as ke,i as Ae,in as je,l as Me,lt as Ne,mn as Pe,nn as Fe,on as Ie,ot as Le,pt as k,rn as Re,s as ze,sn as Be,st as Ve,un as He,ut as Ue,vn as A,vt as We,wt as j,yn as M,yt as Ge}from"./index-BTPzyq7d.js";var N=e(m(),1),Ke={openai:{name:`OpenAI`,baseUrl:`https://api.openai.com/v1`,protocol:`openai-completions`,modelId:`gpt-4o`,supportsImages:!0},deepseek:{name:`DeepSeek`,baseUrl:`https://api.deepseek.com/v1`,protocol:`openai-completions`,modelId:`deepseek-chat`},glm:{name:`Zhipu GLM`,baseUrl:`https://open.bigmodel.cn/api/paas/v4`,protocol:`openai-completions`,modelId:`glm-4-plus`},ollama:{name:`Ollama`,baseUrl:`http://localhost:11434/v1`,protocol:`openai-completions`,modelId:`llama3.1`},litellm:{name:E.name,baseUrl:E.baseUrl,protocol:`openai-completions`,modelId:E.modelId,supportsImages:E.supportsImages}},qe=[{key:`openai`,label:M(`presetOpenai`)},{key:`deepseek`,label:M(`presetDeepseek`)},{key:`glm`,label:M(`presetGlm`)},{key:`ollama`,label:M(`presetOllama`)},{key:`litellm`,label:M(`presetLitellm`)},{key:`custom`,label:M(`presetCustom`)}],P=()=>({modelId:``,contextWindow:E.contextWindow,maxTokens:E.maxTokens,reasoning:!0,supportsImages:!1,visibleInSelectors:!0,open:!1}),F=()=>({name:E.name,baseUrl:E.baseUrl,apiKey:``,headerRows:[],protocol:`openai-completions`,models:[P()]}),Je=class extends x{providers=[];form=F();editingProviderId;formOpen=!1;loading=!0;apiKeyVisible=!1;advancedOpen=!1;activePreset=``;testing=!1;testResult=`idle`;testError=``;autoEditProviderName=null;async connectedCallback(){if(super.connectedCallback(),await this.loadProviders(),this.autoEditProviderName){let e=this.providers.find(e=>e.name===this.autoEditProviderName);e&&await this.openEditForm(e),this.autoEditProviderName=null}}getTabName(){return M(`customModels`)}async loadProviders(){this.loading=!0,this.requestUpdate();try{this.providers=await S().customProviders.getAll()}catch(e){w.error(`Failed to load custom providers:`,e),this.providers=[]}finally{this.loading=!1,this.requestUpdate()}}resetTestState(){this.testing=!1,this.testResult=`idle`,this.testError=``}openAddForm(){this.editingProviderId=void 0,this.form=F(),this.apiKeyVisible=!1,this.advancedOpen=!1,this.activePreset=``,this.resetTestState(),this.formOpen=!0,this.requestUpdate()}async openEditForm(e){let t=await S().providerKeys.get(e.name)??e.apiKey??``,n=e.models??[],r=n.length>0?n.map(e=>({modelId:e.id,contextWindow:e.contextWindow??E.contextWindow,maxTokens:e.maxTokens??E.maxTokens,reasoning:e.reasoning===!0,supportsImages:e.input?.includes(`image`)===!0,visibleInSelectors:e.quickforgeHidden!==!0,open:!1})):[P()],i=n[0]?.headers??{},a=Object.entries(i).map(([e,t])=>({key:e,value:String(t)}));this.editingProviderId=e.id,this.form={providerId:e.id,id:e.id,name:e.name,baseUrl:e.baseUrl,apiKey:t,headerRows:a,protocol:e.type===`anthropic-messages`?`anthropic-messages`:`openai-completions`,models:r},this.apiKeyVisible=!1,this.advancedOpen=a.length>0||e.type===`anthropic-messages`,this.activePreset=``,this.resetTestState(),this.formOpen=!0,this.requestUpdate()}closeForm(){this.formOpen=!1,this.editingProviderId=void 0,this.form=F(),this.apiKeyVisible=!1,this.advancedOpen=!1,this.activePreset=``,this.resetTestState(),this.requestUpdate()}toggleApiKeyVisibility(){this.apiKeyVisible=!this.apiKeyVisible,this.requestUpdate()}updateForm(e,t){this.form={...this.form,[e]:t},(e===`name`||e===`baseUrl`)&&(this.activePreset=``),this.resetTestState(),this.requestUpdate()}updateModelField(e,t,n){let r=this.form.models.map((r,i)=>i===e?{...r,[t]:n}:r);this.form={...this.form,models:r},t===`modelId`&&(this.activePreset=``,this.resetTestState()),this.requestUpdate()}addModelRow(){this.form={...this.form,models:[...this.form.models,P()]},this.requestUpdate()}removeModelRow(e){let t=this.form.models.filter((t,n)=>n!==e);this.form={...this.form,models:t},this.requestUpdate()}toggleModelExpanded(e){let t=this.form.models.map((t,n)=>n===e?{...t,open:!t.open}:t);this.form={...this.form,models:t},this.requestUpdate()}addHeaderRow(){this.form={...this.form,headerRows:[...this.form.headerRows,{key:``,value:``}]},this.requestUpdate()}updateHeaderRow(e,t,n){let r=this.form.headerRows.map((r,i)=>i===e?{...r,[t]:n}:r);this.form={...this.form,headerRows:r},this.requestUpdate()}removeHeaderRow(e){let t=this.form.headerRows.filter((t,n)=>n!==e);this.form={...this.form,headerRows:t},this.requestUpdate()}applyPreset(e){if(this.activePreset=e,e===`custom`)this.form={...this.form,name:``,baseUrl:``,protocol:`openai-completions`,models:[P()]};else{let t=Ke[e];this.form={...this.form,name:t.name,baseUrl:t.baseUrl,protocol:t.protocol,models:[{...P(),modelId:t.modelId,supportsImages:t.supportsImages===!0,open:!1}]}}this.resetTestState(),this.requestUpdate()}buildHeadersFromRows(){let e={};for(let t of this.form.headerRows){let n=t.key.trim(),r=t.value.trim();n&&r&&(e[n]=r)}return e}buildModel(e,t){let n=this.form.name.trim(),r=this.form.baseUrl.trim(),i=e.reasoning===!0,a=e.supportsImages===!0?[`text`,`image`]:[`text`],o=r.includes(`api.deepseek.com`);return je({id:e.modelId,name:`${e.modelId} (${n})`,api:this.form.protocol,provider:n,baseUrl:r.replace(/\/$/,``),reasoning:i,input:a,quickforgeHidden:e.visibleInSelectors?void 0:!0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0},contextWindow:Number(e.contextWindow)||E.contextWindow,maxTokens:Number(e.maxTokens)||E.maxTokens,headers:Object.keys(t).length>0?t:void 0,thinkingLevelMap:o&&i?{low:`high`,medium:`high`,high:`high`,xhigh:`max`}:void 0,compat:this.form.protocol===`openai-completions`?{supportsStore:!1,supportsDeveloperRole:!1,supportsReasoningEffort:i,supportsUsageInStreaming:!1,supportsStrictMode:!1,maxTokensField:`max_tokens`,...o&&i?{requiresReasoningContentOnAssistantMessages:!0,thinkingFormat:`deepseek`}:{}}:void 0})}async testConnection(){let e=this.form.baseUrl.trim(),t=this.form.models.find(e=>e.modelId.trim());if(!e||!t){this.testing=!1,this.testResult=`fail`,this.testError=M(`testRequiresFields`),this.requestUpdate();return}let n=this.buildHeadersFromRows(),r=this.buildModel(t,n);this.testing=!0,this.testResult=`idle`,this.testError=``,this.requestUpdate();try{let e=await(await fetch(`/api/models/test-connection`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({model:r,apiKey:this.form.apiKey.trim()})})).json().catch(()=>({}));e?.ok?(this.testResult=`ok`,this.testError=``):(this.testResult=`fail`,this.testError=e?.error||M(`connectionFailed`))}catch(e){this.testResult=`fail`,this.testError=e?.message||M(`connectionFailed`)}finally{this.testing=!1,this.requestUpdate()}}async saveModel(){let e=this.form.name.trim(),t=this.form.baseUrl.trim();if(!e||!t){j(M(`fillProviderBaseUrlModel`));return}let n=this.form.models.filter(e=>e.modelId.trim());if(n.length===0){j(M(`atLeastOneModel`));return}let r=n.map(e=>e.modelId.trim());if(new Set(r).size!==r.length){j(M(`duplicateModelId`));return}let i=this.buildHeadersFromRows(),a=n.map(e=>this.buildModel(e,i)),o=this.form.apiKey.trim(),s=this.editingProviderId?this.providers.find(e=>e.id===this.editingProviderId):void 0,c={id:this.editingProviderId??Be(),name:e,type:this.form.protocol,baseUrl:a[0].baseUrl,apiKey:o||void 0,models:a};try{let e=S();await e.customProviders.set(c),s&&s.name!==c.name&&await e.providerKeys.delete(s.name),o?await e.providerKeys.set(c.name,o):await e.providerKeys.delete(c.name),He(),this.closeForm(),await this.loadProviders()}catch(e){w.error(`Failed to save custom model:`,e),j(M(`saveCustomModelFailed`))}}async deleteProvider(e){if(await T({description:M(`confirmDeleteProvider`,{name:e.name}),confirmLabel:M(`confirmDelete`),cancelLabel:M(`cancel`),variant:`destructive`}))try{let t=S();await t.customProviders.delete(e.id),await t.providerKeys.delete(e.name),He(),await this.loadProviders()}catch(e){w.error(`Failed to delete custom provider:`,e),j(M(`deleteFailed`))}}renderProvider(e){let t=e.models??[],n=t.length,r=e.type===`anthropic-messages`?`Anthropic Messages`:`OpenAI Compatible`;return b`
3
3
  <div class="quickforge-settings-list-item">
4
4
  <div class="quickforge-settings-list-item-main">
5
5
  <div class="flex min-w-0 items-start gap-3">
@@ -647,7 +647,7 @@ import{i as e}from"./rolldown-runtime-DWdDZTNf.js";import{Ct as t,Gt as n,It as
647
647
  </div>
648
648
  <div class="quickforge-settings-row-description">${M(`displayLanguage`)}</div>
649
649
  </div>
650
- <div class="quickforge-settings-row-control">
650
+ <div class="quickforge-settings-row-control quickforge-settings-row-control-wide">
651
651
  <quickforge-settings-select
652
652
  .value=${this.selectedLanguage}
653
653
  .options=${this.languageOptions()}
@@ -662,7 +662,7 @@ import{i as e}from"./rolldown-runtime-DWdDZTNf.js";import{Ct as t,Gt as n,It as
662
662
  <div class="quickforge-settings-row-title">${M(`defaultHarness`)}</div>
663
663
  <div class="quickforge-settings-row-description">${M(`defaultHarnessDescription`)}</div>
664
664
  </div>
665
- <div class="quickforge-settings-row-control">
665
+ <div class="quickforge-settings-row-control quickforge-settings-row-control-wide">
666
666
  <quickforge-settings-select
667
667
  .value=${this.harness}
668
668
  .options=${this.harnessOptions()}
@@ -1693,4 +1693,4 @@ import{i as e}from"./rolldown-runtime-DWdDZTNf.js";import{Ct as t,Gt as n,It as
1693
1693
  ${this.message?b`<div class="quickforge-settings-message">${this.message}</div>`:null}
1694
1694
  ${this.error?b`<div class="quickforge-settings-alert">${this.error}</div>`:null}
1695
1695
  </div>
1696
- `}},un=`quickforge-channels-settings-tab`;customElements.get(un)||customElements.define(un,ln);function dn(){return document.createElement(un)}var fn=ie(),X=y(),pn=(0,N.lazy)(()=>C(()=>import(`./AgentProfilesPage-Dl5Peqov.js`).then(e=>({default:e.AgentProfilesPage})),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]))),mn=(0,N.lazy)(()=>C(()=>import(`./mcp-servers-dialog-BEV4_TXC.js`).then(e=>({default:e.McpServersPanel})),__vite__mapDeps([15,1,2,3,4,5,6,7,8,9,10,11,12,13]))),hn=(0,N.lazy)(()=>C(()=>import(`./skills-dialog-BTJ7mzk_.js`).then(e=>e.n).then(e=>({default:e.SkillsManagerPanel})),__vite__mapDeps([10,1,2,3,4,5,6,7,8,9,11,12,13]))),gn=(0,N.lazy)(()=>C(()=>import(`./PluginsPage-BDKYfLna.js`).then(e=>({default:e.PluginsPage})),__vite__mapDeps([16,1,2,3,4,5,6,7,8,9,10,11,12,13,17]))),_n=(0,N.lazy)(()=>C(()=>import(`./ScheduledTasksPage--GAki3lB.js`).then(e=>({default:e.ScheduledTasksPage})),__vite__mapDeps([18,1,2,3,4,5,6,7,8,9,10,11,12,13,14]))),vn=(0,N.lazy)(()=>C(()=>import(`./ShareLinksSettingsPage-BQQMsvJo.js`).then(e=>({default:e.ShareLinksSettingsPage})),__vite__mapDeps([19,1,2,3,4,5,6,7,8,9,10,11,12,13]))),yn=(0,N.lazy)(()=>C(()=>import(`./CloudAccountSettingsPage-BG5Nn3bq.js`).then(e=>({default:e.CloudAccountSettingsPage})),__vite__mapDeps([20,1,2,3,4,5,6,7,8,9,10,11,12,13]))),bn=class extends x{tabName=``;renderReact;root;getTabName(){return this.tabName}connectedCallback(){super.connectedCallback(),this.updateComplete.then(()=>this.mountReact())}disconnectedCallback(){this.root?.unmount(),this.root=void 0,super.disconnectedCallback()}render(){return b`<div class="quickforge-react-settings-tab h-full min-h-0"></div>`}mountReact(){let e=this.querySelector(`.quickforge-react-settings-tab`);!e||!this.renderReact||(this.root??=(0,fn.createRoot)(e),this.root.render(this.renderReact()))}},xn=`quickforge-react-settings-tab`;customElements.get(xn)||customElements.define(xn,bn);function Z(e,t){let n=document.createElement(xn);return n.tabName=e,n.renderReact=t,n}function Q({children:e}){return(0,X.jsx)(`div`,{className:`quickforge-settings-stack h-full min-h-[30rem]`,children:(0,X.jsx)(N.Suspense,{fallback:(0,X.jsx)(`div`,{className:`quickforge-settings-note`,children:M(`loading`)}),children:e})})}function Sn(e){window.dispatchEvent(new CustomEvent(`quickforge:open-session-from-settings`,{detail:{sessionId:e}}))}function Cn(){return Z(M(`agentsTab`),()=>(0,X.jsx)(Q,{children:(0,X.jsx)(pn,{})}))}function wn(){return Z(M(`skills`),()=>(0,X.jsx)(Q,{children:(0,X.jsx)(hn,{active:!0,scope:`global`,embedded:!0,onSaved:()=>void 0})}))}function Tn(){return Z(M(`mcpServers`),()=>(0,X.jsx)(Q,{children:(0,X.jsx)(mn,{active:!0})}))}function En(){return Z(M(`plugins`),()=>(0,X.jsx)(Q,{children:(0,X.jsx)(gn,{})}))}function Dn(){return Z(M(`scheduledTasks`),()=>(0,X.jsx)(Q,{children:(0,X.jsx)(_n,{onOpenSession:Sn})}))}function On(){return Z(M(`cloudAccount`),()=>(0,X.jsx)(Q,{children:(0,X.jsx)(yn,{})}))}function kn(){return Z(M(`shareLinks`),()=>(0,X.jsx)(Q,{children:(0,X.jsx)(vn,{})}))}function An(e){let t=[{key:`appearance`,tab:Qe(),getDescription:()=>M(`appearanceDescription`)},{key:`cloudAccount`,tab:On(),getDescription:()=>M(`cloudAccountDescription`)},{key:`defaults`,tab:vt(),getDescription:()=>M(`defaultOptionsDescription`)},{key:`memory`,tab:Tt(),getDescription:()=>M(`memoryDescription`)},{key:`customModels`,tab:Ye(e),getDescription:()=>M(`customModelsDescription`)},{key:`agents`,tab:Cn(),getDescription:()=>M(`agentsDescription`)},{key:`skills`,tab:wn(),getDescription:()=>M(`globalSkillsDescription`)},{key:`mcp`,tab:Tn(),getDescription:void 0},{key:`plugins`,tab:En(),getDescription:()=>M(`pluginsDescription`)},{key:`scheduledTasks`,tab:Dn(),getDescription:()=>M(`scheduledTasksDescription`)},{key:`projectCommands`,tab:on(),getDescription:()=>M(`projectCommandsDescription`)},{key:`backup`,tab:Ft(),getDescription:()=>M(`backupRestoreDescription`)},{key:`archivedConversations`,tab:Bt(),getDescription:()=>M(`archivedConversationsDescription`)},{key:`shareLinks`,tab:kn(),getDescription:()=>M(`shareLinksDescription`)},{key:`channels`,tab:dn(),getDescription:()=>M(`channelsDescription`)},{key:`lanAccess`,tab:Kt(),getDescription:()=>M(`lanAccessDescription`)},{key:`about`,tab:nn(),getDescription:()=>M(`aboutQuickForgeDescription`)}];return{items:[...t],tabs:t.map(e=>e.tab),indexOf:e=>t.findIndex(t=>t.key===e)}}var $={appearance:a,cloudAccount:_,defaults:te,memory:i,customModels:d,agents:s,skills:v,mcp:u,plugins:g,scheduledTasks:r,projectCommands:h,backup:t,archivedConversations:n,shareLinks:l,channels:p,lanAccess:f,about:o};function jn({tab:e}){let t=(0,N.useRef)(null);return(0,N.useEffect)(()=>{let n=t.current;if(n)return n.replaceChildren(e),()=>{e.parentNode===n&&n.removeChild(e)}},[e]),(0,X.jsx)(`div`,{ref:t,className:`quickforge-settings-tab-host min-h-0 flex-1`})}function Mn({initialTab:e,customProvider:t,onBack:n}){let r=(0,N.useMemo)(()=>An(t),[t]),i=Math.max(0,r.indexOf(e)),[a,o]=(0,N.useState)(),[s,l]=(0,N.useState)(null),u=a??i,[d,f]=(0,N.useState)(``),p=d.trim().toLowerCase(),m=(0,N.useMemo)(()=>r.items.map((e,t)=>({item:e,index:t})).filter(({item:e})=>p?[e.key,e.tab.getTabName(),e.getDescription?.()??``].join(` `).toLowerCase().includes(p):!0),[r.items,p]),h=(0,N.useMemo)(()=>{if(!p)return u;let e=m[0];return e?m.some(({index:e})=>e===u)?u:e.index:u},[u,m,p]),g=r.items[h]??r.items[0],_=g?.getDescription?.(),v=g?$[g.key]:void 0,y=(0,N.useRef)(null),[ie,ae]=(0,N.useState)(!1);return(0,N.useEffect)(()=>{y.current?.scrollTo({top:0})},[h,s]),(0,X.jsxs)(`div`,{className:`flex h-screen min-h-0 supports-[height:100dvh]:h-dvh bg-[var(--quickforge-sidebar-bg)] text-foreground`,children:[(0,X.jsxs)(`aside`,{className:`relative z-10 hidden w-80 shrink-0 overflow-hidden bg-[var(--quickforge-sidebar-bg)] md:flex md:min-h-0 md:flex-col`,children:[(0,X.jsxs)(`div`,{className:`shrink-0 px-3 pb-2 pt-3`,children:[(0,X.jsxs)(`button`,{type:`button`,className:`group relative flex w-full items-center gap-2 overflow-hidden rounded-lg px-2 py-1.5 text-left text-muted-foreground/72 transition-[background-color,color,box-shadow] duration-160 ease-out hover:bg-[var(--quickforge-sidebar-hover-bg)] hover:text-foreground/86 hover:shadow-[0_8px_20px_-18px_rgb(15_23_42_/_0.35)]`,onClick:n,"aria-label":`返回工作区`,children:[(0,X.jsx)(`span`,{className:`inline-flex size-6 shrink-0 items-center justify-center rounded-full text-muted-foreground/55 transition-colors group-hover:text-foreground/70`,children:(0,X.jsx)(ee,{className:`size-4`})}),(0,X.jsx)(`span`,{className:`truncate text-sm leading-5`,children:`返回工作区`})]}),(0,X.jsxs)(`div`,{className:`quickforge-settings-inline-field mt-3`,children:[(0,X.jsx)(re,{className:`pointer-events-none absolute left-3 top-1/2 size-4 -translate-y-1/2 text-muted-foreground/60`,"aria-hidden":`true`}),(0,X.jsx)(`input`,{value:d,onChange:e=>f(e.target.value),placeholder:M(`searchSettings`),"aria-label":M(`searchSettings`),className:`quickforge-settings-input`})]})]}),(0,X.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto px-3 pb-4 pt-4`,children:(0,X.jsxs)(`nav`,{className:`space-y-1`,"aria-label":M(`settings`),children:[m.map(({item:e,index:t})=>{let n=t===h,r=$[e.key];return(0,X.jsxs)(`button`,{type:`button`,className:O(`group relative flex w-full items-center gap-2.5 overflow-hidden rounded-lg px-2 py-1.5 text-left text-sm leading-5 transition-[background-color,color,box-shadow] duration-160 ease-out`,n?`bg-[var(--quickforge-sidebar-active-bg)] font-medium text-foreground/92 shadow-[0_8px_22px_-20px_rgb(15_23_42_/_0.32)]`:`text-muted-foreground/76 hover:bg-[var(--quickforge-sidebar-hover-bg)] hover:text-foreground/90 hover:shadow-[0_8px_20px_-18px_rgb(15_23_42_/_0.35)]`),onClick:()=>o(t),"aria-current":n?`page`:void 0,children:[(0,X.jsx)(`span`,{className:O(`inline-flex size-5 shrink-0 items-center justify-center transition-colors`,n?`text-foreground/72`:`text-muted-foreground/52 group-hover:text-foreground/68`),children:(0,X.jsx)(r,{className:`size-4`,"aria-hidden":`true`})}),(0,X.jsx)(`span`,{className:`truncate`,children:e.tab.getTabName()})]},e.key)}),m.length===0?(0,X.jsx)(`div`,{className:`px-2 py-3 text-sm text-muted-foreground/70`,children:M(`noSettingsResults`)}):null]})})]}),(0,X.jsxs)(`main`,{className:`relative flex min-w-0 flex-1 flex-col bg-[var(--quickforge-main-bg)] md:overflow-hidden md:rounded-tl-2xl`,children:[(0,X.jsxs)(`header`,{className:`flex h-14 shrink-0 items-center gap-2 border-b-[0.5px] border-[color-mix(in_oklab,var(--border)_34%,transparent)] px-3 pr-4 md:px-5`,children:[(0,X.jsx)(Pe,{variant:`ghost`,size:`icon`,className:`md:hidden`,onClick:s===null?n:()=>l(null),"aria-label":s===null?`返回工作区`:`返回设置`,children:(0,X.jsx)(ee,{className:`size-4`})}),(0,X.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,X.jsxs)(`div`,{className:O(`flex min-w-0 items-center gap-2`,s===null?`md:hidden`:`hidden`),children:[(0,X.jsx)(te,{className:`size-4 shrink-0 text-muted-foreground/65`,"aria-hidden":`true`}),(0,X.jsx)(`div`,{className:`min-w-0 truncate text-sm font-medium text-foreground/90`,children:M(`settings`)})]}),(0,X.jsxs)(`div`,{className:O(`flex min-w-0 items-center gap-2`,s===null&&`hidden md:flex`),children:[v?(0,X.jsx)(v,{className:`size-4 shrink-0 text-muted-foreground/65`,"aria-hidden":`true`}):null,(0,X.jsx)(`div`,{className:`min-w-0 truncate text-sm font-medium text-foreground/90`,children:g?.tab.getTabName()}),_?(0,X.jsx)(De,{label:_}):null]})]})]}),(0,X.jsxs)(`div`,{className:O(`flex min-h-0 flex-1 flex-col md:hidden`,s!==null&&`hidden`),children:[(0,X.jsx)(`div`,{className:`shrink-0 border-b-[0.5px] border-[color-mix(in_oklab,var(--border)_30%,transparent)] px-3 py-2`,children:(0,X.jsxs)(`div`,{className:`quickforge-settings-inline-field`,children:[(0,X.jsx)(re,{className:`pointer-events-none absolute left-3 top-1/2 size-4 -translate-y-1/2 text-muted-foreground/60`,"aria-hidden":`true`}),(0,X.jsx)(`input`,{value:d,onChange:e=>f(e.target.value),placeholder:M(`searchSettings`),"aria-label":M(`searchSettings`),className:`quickforge-settings-input`})]})}),(0,X.jsx)(`nav`,{className:`quickforge-settings-mobile-list`,"aria-label":M(`settings`),children:(0,X.jsxs)(`div`,{className:`quickforge-settings-mobile-list-card`,children:[m.map(({item:e,index:t})=>{let n=$[e.key];return(0,X.jsxs)(`button`,{type:`button`,className:`quickforge-settings-mobile-list-item`,onClick:()=>{o(t),l(t)},children:[(0,X.jsx)(`span`,{className:`quickforge-settings-mobile-list-icon`,children:(0,X.jsx)(n,{className:`size-4 shrink-0`,"aria-hidden":`true`})}),(0,X.jsx)(`span`,{className:`quickforge-settings-mobile-list-label`,children:e.tab.getTabName()}),(0,X.jsx)(ne,{className:`quickforge-settings-mobile-list-chevron size-4 shrink-0`,"aria-hidden":`true`})]},e.key)}),m.length===0?(0,X.jsx)(`div`,{className:`px-2 py-8 text-center text-sm text-muted-foreground/70`,children:M(`noSettingsResults`)}):null]})})]}),(0,X.jsx)(`section`,{ref:y,onScroll:()=>ae((y.current?.scrollTop??0)>160),className:O(`min-h-0 flex-1 overflow-y-auto px-4 py-5 md:px-8 md:py-7`,s===null&&`hidden md:block`),children:(0,X.jsx)(`div`,{className:`mx-auto flex min-h-full w-full max-w-5xl flex-col`,children:m.length===0?(0,X.jsx)(`div`,{className:`rounded-xl border border-dashed border-[color-mix(in_oklab,var(--border)_70%,transparent)] p-8 text-center text-sm text-muted-foreground/70`,children:M(`noSettingsResults`)}):g?(0,X.jsx)(jn,{tab:g.tab}):null})}),(0,X.jsx)(`button`,{type:`button`,onClick:()=>y.current?.scrollTo({top:0,behavior:`smooth`}),"aria-label":`返回顶部`,className:O(`absolute bottom-5 right-4 z-20 flex size-9 items-center justify-center rounded-[10px] border-[0.5px] border-[color-mix(in_oklab,var(--border)_65%,transparent)] bg-[var(--background)] text-muted-foreground/85 shadow-[0_10px_24px_-16px_rgb(15_23_42_/_0.55)] transition-opacity duration-160 md:hidden`,ie?`opacity-100`:`pointer-events-none opacity-0`,s===null&&`hidden`),children:(0,X.jsx)(c,{className:`size-4`})})]})]})}export{Mn as SettingsWorkspacePage};
1696
+ `}},un=`quickforge-channels-settings-tab`;customElements.get(un)||customElements.define(un,ln);function dn(){return document.createElement(un)}var fn=ie(),X=y(),pn=(0,N.lazy)(()=>C(()=>import(`./AgentProfilesPage-BfA_sQ3A.js`).then(e=>({default:e.AgentProfilesPage})),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]))),mn=(0,N.lazy)(()=>C(()=>import(`./mcp-servers-dialog-GY7sdfIr.js`).then(e=>({default:e.McpServersPanel})),__vite__mapDeps([15,1,2,3,4,5,6,7,8,9,10,11,12,13]))),hn=(0,N.lazy)(()=>C(()=>import(`./skills-dialog-C1fJ1Jl7.js`).then(e=>e.n).then(e=>({default:e.SkillsManagerPanel})),__vite__mapDeps([10,1,2,3,4,5,6,7,8,9,11,12,13]))),gn=(0,N.lazy)(()=>C(()=>import(`./PluginsPage-CPE5tbbf.js`).then(e=>({default:e.PluginsPage})),__vite__mapDeps([16,1,2,3,4,5,6,7,8,9,10,11,12,13,17]))),_n=(0,N.lazy)(()=>C(()=>import(`./ScheduledTasksPage-PTxL_PPg.js`).then(e=>({default:e.ScheduledTasksPage})),__vite__mapDeps([18,1,2,3,4,5,6,7,8,9,10,11,12,13,14]))),vn=(0,N.lazy)(()=>C(()=>import(`./ShareLinksSettingsPage-Bl8fP62X.js`).then(e=>({default:e.ShareLinksSettingsPage})),__vite__mapDeps([19,1,2,3,4,5,6,7,8,9,10,11,12,13]))),yn=(0,N.lazy)(()=>C(()=>import(`./CloudAccountSettingsPage-qZh0lTUN.js`).then(e=>({default:e.CloudAccountSettingsPage})),__vite__mapDeps([20,1,2,3,4,5,6,7,8,9,10,11,12,13]))),bn=class extends x{tabName=``;renderReact;root;getTabName(){return this.tabName}connectedCallback(){super.connectedCallback(),this.updateComplete.then(()=>this.mountReact())}disconnectedCallback(){this.root?.unmount(),this.root=void 0,super.disconnectedCallback()}render(){return b`<div class="quickforge-react-settings-tab h-full min-h-0"></div>`}mountReact(){let e=this.querySelector(`.quickforge-react-settings-tab`);!e||!this.renderReact||(this.root??=(0,fn.createRoot)(e),this.root.render(this.renderReact()))}},xn=`quickforge-react-settings-tab`;customElements.get(xn)||customElements.define(xn,bn);function Z(e,t){let n=document.createElement(xn);return n.tabName=e,n.renderReact=t,n}function Q({children:e}){return(0,X.jsx)(`div`,{className:`quickforge-settings-stack h-full min-h-[30rem]`,children:(0,X.jsx)(N.Suspense,{fallback:(0,X.jsx)(`div`,{className:`quickforge-settings-note`,children:M(`loading`)}),children:e})})}function Sn(e){window.dispatchEvent(new CustomEvent(`quickforge:open-session-from-settings`,{detail:{sessionId:e}}))}function Cn(){return Z(M(`agentsTab`),()=>(0,X.jsx)(Q,{children:(0,X.jsx)(pn,{})}))}function wn(){return Z(M(`skills`),()=>(0,X.jsx)(Q,{children:(0,X.jsx)(hn,{active:!0,scope:`global`,embedded:!0,onSaved:()=>void 0})}))}function Tn(){return Z(M(`mcpServers`),()=>(0,X.jsx)(Q,{children:(0,X.jsx)(mn,{active:!0})}))}function En(){return Z(M(`plugins`),()=>(0,X.jsx)(Q,{children:(0,X.jsx)(gn,{})}))}function Dn(){return Z(M(`scheduledTasks`),()=>(0,X.jsx)(Q,{children:(0,X.jsx)(_n,{onOpenSession:Sn})}))}function On(){return Z(M(`cloudAccount`),()=>(0,X.jsx)(Q,{children:(0,X.jsx)(yn,{})}))}function kn(){return Z(M(`shareLinks`),()=>(0,X.jsx)(Q,{children:(0,X.jsx)(vn,{})}))}function An(e){let t=[{key:`appearance`,tab:Qe(),getDescription:()=>M(`appearanceDescription`)},{key:`cloudAccount`,tab:On(),getDescription:()=>M(`cloudAccountDescription`)},{key:`defaults`,tab:vt(),getDescription:()=>M(`defaultOptionsDescription`)},{key:`memory`,tab:Tt(),getDescription:()=>M(`memoryDescription`)},{key:`customModels`,tab:Ye(e),getDescription:()=>M(`customModelsDescription`)},{key:`agents`,tab:Cn(),getDescription:()=>M(`agentsDescription`)},{key:`skills`,tab:wn(),getDescription:()=>M(`globalSkillsDescription`)},{key:`mcp`,tab:Tn(),getDescription:void 0},{key:`plugins`,tab:En(),getDescription:()=>M(`pluginsDescription`)},{key:`scheduledTasks`,tab:Dn(),getDescription:()=>M(`scheduledTasksDescription`)},{key:`projectCommands`,tab:on(),getDescription:()=>M(`projectCommandsDescription`)},{key:`backup`,tab:Ft(),getDescription:()=>M(`backupRestoreDescription`)},{key:`archivedConversations`,tab:Bt(),getDescription:()=>M(`archivedConversationsDescription`)},{key:`shareLinks`,tab:kn(),getDescription:()=>M(`shareLinksDescription`)},{key:`channels`,tab:dn(),getDescription:()=>M(`channelsDescription`)},{key:`lanAccess`,tab:Kt(),getDescription:()=>M(`lanAccessDescription`)},{key:`about`,tab:nn(),getDescription:()=>M(`aboutQuickForgeDescription`)}];return{items:[...t],tabs:t.map(e=>e.tab),indexOf:e=>t.findIndex(t=>t.key===e)}}var $={appearance:a,cloudAccount:_,defaults:te,memory:i,customModels:d,agents:s,skills:v,mcp:u,plugins:g,scheduledTasks:r,projectCommands:h,backup:t,archivedConversations:n,shareLinks:l,channels:p,lanAccess:f,about:o};function jn({tab:e}){let t=(0,N.useRef)(null);return(0,N.useEffect)(()=>{let n=t.current;if(n)return n.replaceChildren(e),()=>{e.parentNode===n&&n.removeChild(e)}},[e]),(0,X.jsx)(`div`,{ref:t,className:`quickforge-settings-tab-host min-h-0 flex-1`})}function Mn({initialTab:e,customProvider:t,onBack:n}){let r=(0,N.useMemo)(()=>An(t),[t]),i=Math.max(0,r.indexOf(e)),[a,o]=(0,N.useState)(),[s,l]=(0,N.useState)(null),u=a??i,[d,f]=(0,N.useState)(``),p=d.trim().toLowerCase(),m=(0,N.useMemo)(()=>r.items.map((e,t)=>({item:e,index:t})).filter(({item:e})=>p?[e.key,e.tab.getTabName(),e.getDescription?.()??``].join(` `).toLowerCase().includes(p):!0),[r.items,p]),h=(0,N.useMemo)(()=>{if(!p)return u;let e=m[0];return e?m.some(({index:e})=>e===u)?u:e.index:u},[u,m,p]),g=r.items[h]??r.items[0],_=g?.getDescription?.(),v=g?$[g.key]:void 0,y=(0,N.useRef)(null),[ie,ae]=(0,N.useState)(!1);return(0,N.useEffect)(()=>{y.current?.scrollTo({top:0})},[h,s]),(0,X.jsxs)(`div`,{className:`flex h-screen min-h-0 supports-[height:100dvh]:h-dvh bg-[var(--quickforge-sidebar-bg)] text-foreground`,children:[(0,X.jsxs)(`aside`,{className:`relative z-10 hidden w-80 shrink-0 overflow-hidden bg-[var(--quickforge-sidebar-bg)] md:flex md:min-h-0 md:flex-col`,children:[(0,X.jsxs)(`div`,{className:`shrink-0 px-3 pb-2 pt-3`,children:[(0,X.jsxs)(`button`,{type:`button`,className:`group relative flex w-full items-center gap-2 overflow-hidden rounded-lg px-2 py-1.5 text-left text-muted-foreground/72 transition-[background-color,color,box-shadow] duration-160 ease-out hover:bg-[var(--quickforge-sidebar-hover-bg)] hover:text-foreground/86 hover:shadow-[0_8px_20px_-18px_rgb(15_23_42_/_0.35)]`,onClick:n,"aria-label":`返回工作区`,children:[(0,X.jsx)(`span`,{className:`inline-flex size-6 shrink-0 items-center justify-center rounded-full text-muted-foreground/55 transition-colors group-hover:text-foreground/70`,children:(0,X.jsx)(ee,{className:`size-4`})}),(0,X.jsx)(`span`,{className:`truncate text-sm leading-5`,children:`返回工作区`})]}),(0,X.jsxs)(`div`,{className:`quickforge-settings-inline-field mt-3`,children:[(0,X.jsx)(re,{className:`pointer-events-none absolute left-3 top-1/2 size-4 -translate-y-1/2 text-muted-foreground/60`,"aria-hidden":`true`}),(0,X.jsx)(`input`,{value:d,onChange:e=>f(e.target.value),placeholder:M(`searchSettings`),"aria-label":M(`searchSettings`),className:`quickforge-settings-input`})]})]}),(0,X.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto px-3 pb-4 pt-4`,children:(0,X.jsxs)(`nav`,{className:`space-y-1`,"aria-label":M(`settings`),children:[m.map(({item:e,index:t})=>{let n=t===h,r=$[e.key];return(0,X.jsxs)(`button`,{type:`button`,className:O(`group relative flex w-full items-center gap-2.5 overflow-hidden rounded-lg px-2 py-1.5 text-left text-sm leading-5 transition-[background-color,color,box-shadow] duration-160 ease-out`,n?`bg-[var(--quickforge-sidebar-active-bg)] font-medium text-foreground/92 shadow-[0_8px_22px_-20px_rgb(15_23_42_/_0.32)]`:`text-muted-foreground/76 hover:bg-[var(--quickforge-sidebar-hover-bg)] hover:text-foreground/90 hover:shadow-[0_8px_20px_-18px_rgb(15_23_42_/_0.35)]`),onClick:()=>o(t),"aria-current":n?`page`:void 0,children:[(0,X.jsx)(`span`,{className:O(`inline-flex size-5 shrink-0 items-center justify-center transition-colors`,n?`text-foreground/72`:`text-muted-foreground/52 group-hover:text-foreground/68`),children:(0,X.jsx)(r,{className:`size-4`,"aria-hidden":`true`})}),(0,X.jsx)(`span`,{className:`truncate`,children:e.tab.getTabName()})]},e.key)}),m.length===0?(0,X.jsx)(`div`,{className:`px-2 py-3 text-sm text-muted-foreground/70`,children:M(`noSettingsResults`)}):null]})})]}),(0,X.jsxs)(`main`,{className:`relative flex min-w-0 flex-1 flex-col bg-[var(--quickforge-main-bg)] md:overflow-hidden md:rounded-tl-2xl`,children:[(0,X.jsxs)(`header`,{className:`flex h-14 shrink-0 items-center gap-2 border-b-[0.5px] border-[color-mix(in_oklab,var(--border)_34%,transparent)] px-3 pr-4 md:px-5`,children:[(0,X.jsx)(Pe,{variant:`ghost`,size:`icon`,className:`md:hidden`,onClick:s===null?n:()=>l(null),"aria-label":s===null?`返回工作区`:`返回设置`,children:(0,X.jsx)(ee,{className:`size-4`})}),(0,X.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,X.jsxs)(`div`,{className:O(`flex min-w-0 items-center gap-2`,s===null?`md:hidden`:`hidden`),children:[(0,X.jsx)(te,{className:`size-4 shrink-0 text-muted-foreground/65`,"aria-hidden":`true`}),(0,X.jsx)(`div`,{className:`min-w-0 truncate text-sm font-medium text-foreground/90`,children:M(`settings`)})]}),(0,X.jsxs)(`div`,{className:O(`flex min-w-0 items-center gap-2`,s===null&&`hidden md:flex`),children:[v?(0,X.jsx)(v,{className:`size-4 shrink-0 text-muted-foreground/65`,"aria-hidden":`true`}):null,(0,X.jsx)(`div`,{className:`min-w-0 truncate text-sm font-medium text-foreground/90`,children:g?.tab.getTabName()}),_?(0,X.jsx)(De,{label:_}):null]})]})]}),(0,X.jsxs)(`div`,{className:O(`flex min-h-0 flex-1 flex-col md:hidden`,s!==null&&`hidden`),children:[(0,X.jsx)(`div`,{className:`shrink-0 border-b-[0.5px] border-[color-mix(in_oklab,var(--border)_30%,transparent)] px-3 py-2`,children:(0,X.jsxs)(`div`,{className:`quickforge-settings-inline-field`,children:[(0,X.jsx)(re,{className:`pointer-events-none absolute left-3 top-1/2 size-4 -translate-y-1/2 text-muted-foreground/60`,"aria-hidden":`true`}),(0,X.jsx)(`input`,{value:d,onChange:e=>f(e.target.value),placeholder:M(`searchSettings`),"aria-label":M(`searchSettings`),className:`quickforge-settings-input`})]})}),(0,X.jsx)(`nav`,{className:`quickforge-settings-mobile-list`,"aria-label":M(`settings`),children:(0,X.jsxs)(`div`,{className:`quickforge-settings-mobile-list-card`,children:[m.map(({item:e,index:t})=>{let n=$[e.key];return(0,X.jsxs)(`button`,{type:`button`,className:`quickforge-settings-mobile-list-item`,onClick:()=>{o(t),l(t)},children:[(0,X.jsx)(`span`,{className:`quickforge-settings-mobile-list-icon`,children:(0,X.jsx)(n,{className:`size-4 shrink-0`,"aria-hidden":`true`})}),(0,X.jsx)(`span`,{className:`quickforge-settings-mobile-list-label`,children:e.tab.getTabName()}),(0,X.jsx)(ne,{className:`quickforge-settings-mobile-list-chevron size-4 shrink-0`,"aria-hidden":`true`})]},e.key)}),m.length===0?(0,X.jsx)(`div`,{className:`px-2 py-8 text-center text-sm text-muted-foreground/70`,children:M(`noSettingsResults`)}):null]})})]}),(0,X.jsx)(`section`,{ref:y,onScroll:()=>ae((y.current?.scrollTop??0)>160),className:O(`min-h-0 flex-1 overflow-y-auto px-4 py-5 md:px-8 md:py-7`,s===null&&`hidden md:block`),children:(0,X.jsx)(`div`,{className:`mx-auto flex min-h-full w-full max-w-5xl flex-col`,children:m.length===0?(0,X.jsx)(`div`,{className:`rounded-xl border border-dashed border-[color-mix(in_oklab,var(--border)_70%,transparent)] p-8 text-center text-sm text-muted-foreground/70`,children:M(`noSettingsResults`)}):g?(0,X.jsx)(jn,{tab:g.tab}):null})}),(0,X.jsx)(`button`,{type:`button`,onClick:()=>y.current?.scrollTo({top:0,behavior:`smooth`}),"aria-label":`返回顶部`,className:O(`absolute bottom-5 right-4 z-20 flex size-9 items-center justify-center rounded-[10px] border-[0.5px] border-[color-mix(in_oklab,var(--border)_65%,transparent)] bg-[var(--background)] text-muted-foreground/85 shadow-[0_10px_24px_-16px_rgb(15_23_42_/_0.55)] transition-opacity duration-160 md:hidden`,ie?`opacity-100`:`pointer-events-none opacity-0`,s===null&&`hidden`),children:(0,X.jsx)(c,{className:`size-4`})})]})]})}export{Mn as SettingsWorkspacePage};
@@ -1 +1 @@
1
- import{i as e}from"./rolldown-runtime-DWdDZTNf.js";import{A as t,C as n,T as r,Y as i,mt as a,pt as o,qt as s,s as c,y as l,yt as u}from"./icons-2D18YbSI.js";import{n as d}from"./react-vendor-3UaA-C9W.js";import{D as f,Dt as p,E as m,Tt as h,_ as g,b as _,g as v,mn as y,v as b,vn as x,w as S,x as C,y as w,yn as T}from"./index-BivLuZvX.js";var E=e(s(),1),D=d(),O=[{value:`1h`,hours:1},{value:`24h`,hours:24},{value:`7d`,hours:168},{value:`never`}];function k(e){return e.url||`${window.location.origin}/share/${encodeURIComponent(e.id)}`}function A(e){if(!e)return`-`;let t=new Date(e);return Number.isNaN(t.getTime())?`-`:t.toLocaleString(x())}function j(e){return T(e===`disabled`?`shareStatusDisabled`:e===`expired`?`shareStatusExpired`:`shareStatusActive`)}function M(e){return e===`disabled`?`quickforge-settings-badge-muted`:e===`expired`?`quickforge-settings-badge-warning`:`quickforge-settings-badge-success`}function N(e){let t=O.find(t=>t.value===e);return t&&`hours`in t?g(t.hours):void 0}function P({share:e,onClose:t,onSaved:r}){let[i,a]=(0,E.useState)(e.permission),[o,s]=(0,E.useState)(``),[l,u]=(0,E.useState)(!1),[d,f]=(0,E.useState)(e.allowCloudUsage===!0),[p,h]=(0,E.useState)(`keep`),[g,v]=(0,E.useState)(!1),[b,x]=(0,E.useState)(``),S=i===`operate`,C=l?!1:!!(e.hasPassword||o.trim()),w=async()=>{if(S&&!C){x(T(`operateRequiresPassword`));return}v(!0),x(``);try{let n=l?``:o?o.trim():void 0,a=p===`keep`?void 0:N(p);r((await m(e.id,{permission:i,password:n,expiresAt:a,allowCloudUsage:i===`operate`&&d})).share),t()}catch(e){x(e instanceof Error?e.message:T(`requestFailed`)),v(!1)}};return(0,D.jsx)(`div`,{className:`fixed inset-0 z-50 flex items-center justify-center bg-black/45 p-4`,onMouseDown:e=>{e.target===e.currentTarget&&t()},children:(0,D.jsxs)(`div`,{className:`flex max-h-[85vh] w-full max-w-md flex-col overflow-hidden rounded-2xl border border-border bg-background shadow-quickforge`,onMouseDown:e=>e.stopPropagation(),children:[(0,D.jsxs)(`div`,{className:`shrink-0 border-b border-border px-5 py-4`,children:[(0,D.jsx)(`h2`,{className:`text-base font-semibold`,children:T(`editShareTitle`)}),(0,D.jsx)(`p`,{className:`mt-1 truncate text-sm text-muted-foreground`,children:e.titleSnapshot||T(`untitledConversation`)})]}),(0,D.jsxs)(`div`,{className:`min-h-0 flex-1 space-y-4 overflow-y-auto px-5 py-4`,children:[(0,D.jsxs)(`div`,{children:[(0,D.jsx)(`div`,{className:`mb-2 text-sm font-medium`,children:T(`sharePermissionTitle`)}),(0,D.jsxs)(`div`,{className:`grid gap-2 sm:grid-cols-2`,children:[(0,D.jsxs)(`button`,{type:`button`,className:`rounded-xl border p-3 text-left text-sm ${i===`read`?`border-primary bg-primary/10`:`border-border`}`,onClick:()=>a(`read`),children:[(0,D.jsx)(`div`,{className:`font-medium`,children:T(`sharePermissionRead`)}),(0,D.jsx)(`div`,{className:`mt-1 text-xs text-muted-foreground`,children:T(`sharePermissionReadHint`)})]}),(0,D.jsxs)(`button`,{type:`button`,className:`rounded-xl border p-3 text-left text-sm ${i===`operate`?`border-red-400 bg-red-50 text-red-950`:`border-border`}`,onClick:()=>a(`operate`),children:[(0,D.jsx)(`div`,{className:`font-medium text-red-700`,children:T(`sharePermissionOperate`)}),(0,D.jsx)(`div`,{className:`mt-1 text-xs text-red-700`,children:T(`sharePermissionOperateHint`)})]})]})]}),i===`operate`?(0,D.jsxs)(`label`,{className:`flex items-start gap-2 rounded-xl border border-border bg-muted/20 p-3 text-xs font-medium`,children:[(0,D.jsx)(`input`,{type:`checkbox`,checked:d,onChange:e=>f(e.target.checked)}),(0,D.jsx)(`span`,{children:`允许该分享使用宿主机的 QuickForge Cloud 模型和额度。默认关闭。`})]}):null,(0,D.jsxs)(`div`,{className:`space-y-2`,children:[(0,D.jsx)(`label`,{className:`block text-sm font-medium`,children:T(`sharePasswordTitle`)}),(0,D.jsxs)(`div`,{className:`flex flex-col gap-3 sm:flex-row sm:items-center`,children:[(0,D.jsx)(`input`,{value:o,onChange:e=>s(e.target.value),disabled:l,className:`h-10 w-full min-w-0 rounded-md border border-input bg-background px-3 text-sm`,placeholder:e.hasPassword?T(`sharePasswordPlaceholderKeep`):T(`sharePasswordPlaceholderNone`),type:`text`,autoComplete:`new-password`}),(0,D.jsxs)(y,{variant:`outline`,className:`h-10 sm:shrink-0`,onClick:()=>{u(!1),s(_())},children:[(0,D.jsx)(n,{className:`mr-2 size-4`}),T(`generatePassword`)]})]}),l?(0,D.jsx)(`span`,{className:`block text-xs text-destructive`,children:T(`sharePasswordRemovalSelected`)}):(0,D.jsx)(`span`,{className:`block text-xs text-muted-foreground`,children:e.hasPassword?T(`sharePasswordEditHint`):T(`sharePasswordSetHint`)}),e.hasPassword&&!l?(0,D.jsxs)(y,{variant:`ghost`,size:`sm`,className:`h-8 text-destructive`,onClick:()=>{s(``),u(!0)},children:[(0,D.jsx)(c,{className:`mr-2 size-3.5`}),T(`removePassword`)]}):null]}),(0,D.jsxs)(`label`,{className:`block text-sm font-medium`,children:[T(`shareExpiresAt`),(0,D.jsxs)(`select`,{value:p,onChange:e=>h(e.target.value),className:`mt-2 h-10 w-full rounded-md border border-input bg-background px-3 text-sm`,children:[(0,D.jsx)(`option`,{value:`keep`,children:T(`keepCurrentExpiration`)}),(0,D.jsx)(`option`,{value:`1h`,children:T(`oneHour`)}),(0,D.jsx)(`option`,{value:`24h`,children:T(`twentyFourHours`)}),(0,D.jsx)(`option`,{value:`7d`,children:T(`sevenDays`)}),(0,D.jsx)(`option`,{value:`never`,children:T(`shareNeverExpires`)})]})]}),b?(0,D.jsx)(`div`,{className:`rounded-md border border-destructive/30 bg-destructive/10 px-3 py-2 text-sm text-destructive`,children:b}):null]}),(0,D.jsx)(`div`,{className:`shrink-0 border-t border-border px-5 py-4`,children:(0,D.jsxs)(`div`,{className:`flex justify-end gap-2`,children:[(0,D.jsx)(y,{variant:`outline`,onClick:t,disabled:g,children:T(`cancel`)}),(0,D.jsx)(y,{variant:i===`operate`?`destructive`:`default`,onClick:()=>void w(),disabled:g,children:T(`saveChanges`)})]})})]})})}function F({share:e,status:i,onClose:a,onAction:s}){let l=i===`active`;return(0,D.jsx)(`div`,{className:`fixed inset-0 z-50 flex items-end justify-center bg-black/45 sm:items-center`,onMouseDown:e=>{e.target===e.currentTarget&&a()},children:(0,D.jsxs)(`div`,{className:`w-full max-w-md rounded-t-2xl border border-border bg-background p-4 pb-[max(1rem,env(safe-area-inset-bottom))] shadow-quickforge sm:rounded-2xl sm:pb-4`,role:`dialog`,"aria-modal":`true`,"aria-label":T(`manageShare`),children:[(0,D.jsx)(`div`,{className:`truncate px-1 text-sm font-medium text-foreground`,children:e.titleSnapshot||T(`untitledConversation`)}),(0,D.jsx)(`div`,{className:`mt-1 truncate px-1 font-mono text-xs text-muted-foreground`,title:k(e),children:k(e)}),(0,D.jsxs)(`div`,{className:`mt-3 space-y-1`,children:[(0,D.jsxs)(y,{variant:`ghost`,className:`w-full justify-start`,onClick:()=>s(`copy`),children:[(0,D.jsx)(u,{className:`mr-2 size-4`}),T(`copyShareLink`)]}),(0,D.jsxs)(y,{variant:`ghost`,className:`w-full justify-start`,disabled:!l,onClick:()=>s(`open`),children:[(0,D.jsx)(o,{className:`mr-2 size-4`}),T(`openShareLink`)]}),i===`active`?(0,D.jsxs)(y,{variant:`ghost`,className:`w-full justify-start`,onClick:()=>s(`edit`),children:[(0,D.jsx)(t,{className:`mr-2 size-4`}),T(`editShare`)]}):null,i===`active`?(0,D.jsxs)(y,{variant:`ghost`,className:`w-full justify-start`,onClick:()=>s(`disable`),children:[(0,D.jsx)(r,{className:`mr-2 size-4`}),T(`disableShare`)]}):(0,D.jsxs)(y,{variant:`ghost`,className:`w-full justify-start`,onClick:()=>s(`restore`),children:[(0,D.jsx)(n,{className:`mr-2 size-4`}),T(`restoreShare`)]}),(0,D.jsxs)(y,{variant:`ghost`,className:`w-full justify-start hover:text-destructive`,onClick:()=>s(`delete`),children:[(0,D.jsx)(c,{className:`mr-2 size-4`}),T(`deleteShare`)]})]}),(0,D.jsx)(y,{variant:`outline`,className:`mt-3 w-full`,onClick:a,children:T(`cancel`)})]})})}function I(){let[e,s]=(0,E.useState)([]),[d,m]=(0,E.useState)(!0),[g,_]=(0,E.useState)(``),[x,O]=(0,E.useState)(``),[I,L]=(0,E.useState)({}),[R,z]=(0,E.useState)(null),[B,V]=(0,E.useState)(null),[H,U]=(0,E.useState)(``),[W,G]=(0,E.useState)(``),ee=async(e=!0)=>{e&&m(!0),G(``);try{s((await C()).shares)}catch(e){G(e instanceof Error?e.message:T(`shareLinksLoadFailed`))}finally{e&&m(!1)}};(0,E.useEffect)(()=>{let e=!1;return C().then(t=>{e||s(t.shares)}).catch(t=>{e||G(t instanceof Error?t.message:T(`shareLinksLoadFailed`))}).finally(()=>{e||m(!1)}),()=>{e=!0}},[]);let K=(0,E.useMemo)(()=>{let t=x.trim().toLowerCase();return t?e.filter(e=>`${e.titleSnapshot||``} ${e.id} ${e.projectId||``}`.toLowerCase().includes(t)):e},[x,e]),q=e=>{s(t=>t.map(t=>t.id===e.id?{...t,...e}:t))},J=async(e,t,n)=>{if(!g){_(e),U(``),G(``);try{q((await t()).share),U(n)}catch(e){G(e instanceof Error?e.message:T(`requestFailed`))}finally{_(``)}}},Y=async e=>{try{await p(k(e)),U(T(`shareLinkCopied`)),G(``)}catch{G(T(`copyFailed`))}},X=async e=>{await h({description:T(`disableShareConfirm`,{title:e.titleSnapshot||e.id}),confirmLabel:T(`disableShare`),cancelLabel:T(`cancel`),variant:`destructive`})&&await J(e.id,()=>w(e.id),T(`shareDisabled`))},Z=async e=>{let t=I[e.id]||`24h`;await J(e.id,()=>S(e.id,N(t)),T(`shareRestored`))},te=async e=>{let t=I[e.id]||`24h`;await J(e.id,()=>f(e.id,N(t)),T(`shareExpirationUpdated`))},Q=async e=>{if(!(!await h({description:T(`deleteShareConfirm`,{title:e.titleSnapshot||e.id}),confirmLabel:T(`confirmDelete`),cancelLabel:T(`cancel`),variant:`destructive`})||g)){_(e.id),U(``),G(``);try{await b(e.id),s(t=>t.filter(t=>t.id!==e.id)),U(T(`shareDeleted`))}catch(e){G(e instanceof Error?e.message:T(`requestFailed`))}finally{_(``)}}},ne=(e,t)=>{V(null),t===`copy`&&Y(e),t===`open`&&window.open(k(e),`_blank`,`noopener,noreferrer`),t===`edit`&&z(e),t===`disable`&&X(e),t===`restore`&&Z(e),t===`delete`&&Q(e)},re=R?v(R):null,$=B?v(B):null;return(0,D.jsxs)(`div`,{className:`quickforge-settings-stack`,children:[(0,D.jsxs)(`div`,{className:`quickforge-settings-heading`,children:[(0,D.jsxs)(`div`,{children:[(0,D.jsxs)(`h2`,{className:`quickforge-settings-title`,children:[(0,D.jsx)(i,{className:`size-5`}),T(`shareLinks`)]}),(0,D.jsx)(`p`,{className:`quickforge-settings-row-description`,children:T(`shareLinksDescription`)})]}),(0,D.jsxs)(y,{variant:`outline`,size:`sm`,onClick:()=>void ee(),disabled:d||!!g,children:[(0,D.jsx)(n,{className:`mr-2 size-4 ${d?`animate-spin`:``}`}),T(`refresh`)]})]}),(0,D.jsxs)(`div`,{className:`quickforge-settings-section`,children:[(0,D.jsxs)(`div`,{className:`quickforge-settings-toolbar`,children:[(0,D.jsxs)(`div`,{className:`quickforge-settings-inline-field max-w-md`,children:[(0,D.jsx)(l,{className:`pointer-events-none absolute left-3 top-1/2 size-4 -translate-y-1/2 text-muted-foreground/60`,"aria-hidden":`true`}),(0,D.jsx)(`input`,{value:x,onChange:e=>O(e.target.value),className:`quickforge-settings-input`,placeholder:T(`searchShareLinks`),"aria-label":T(`searchShareLinks`)})]}),(0,D.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:T(`shareLinksCount`,{count:K.length})})]}),H?(0,D.jsx)(`div`,{className:`quickforge-settings-note quickforge-share-links-message`,children:H}):null,W?(0,D.jsx)(`div`,{className:`quickforge-settings-error quickforge-share-links-message`,children:W}):null,d?(0,D.jsx)(`div`,{className:`p-6 text-center text-sm text-muted-foreground`,children:T(`loading`)}):K.length===0?(0,D.jsx)(`div`,{className:`p-8 text-center text-sm text-muted-foreground`,children:T(x?`noMatchingShareLinks`:`noShareLinks`)}):K.map(e=>{let i=v(e),s=g===e.id,l=i===`active`;return(0,D.jsxs)(`div`,{className:`quickforge-settings-list-item quickforge-share-link-item`,children:[(0,D.jsxs)(`div`,{className:`quickforge-settings-list-item-main`,children:[(0,D.jsxs)(`div`,{className:`flex min-w-0 flex-wrap items-center gap-2`,children:[(0,D.jsx)(`div`,{className:`truncate text-sm font-medium text-foreground`,children:e.titleSnapshot||T(`untitledConversation`)}),(0,D.jsx)(`span`,{className:`quickforge-settings-badge ${M(i)}`,children:j(i)}),(0,D.jsx)(`span`,{className:`quickforge-settings-badge quickforge-settings-badge-info`,children:e.permission===`operate`?T(`sharePermissionOperate`):T(`sharePermissionRead`)}),e.hasPassword?(0,D.jsx)(`span`,{className:`quickforge-settings-badge quickforge-settings-badge-muted`,children:T(`sharePasswordProtected`)}):null]}),(0,D.jsx)(`div`,{className:`quickforge-share-link-url`,title:k(e),children:k(e)}),(0,D.jsxs)(`div`,{className:`quickforge-settings-meta text-xs text-muted-foreground`,children:[(0,D.jsxs)(`span`,{children:[T(`shareCreatedAt`),`: `,A(e.createdAt)]}),(0,D.jsx)(`span`,{children:`·`}),(0,D.jsxs)(`span`,{children:[T(`shareExpiresAt`),`: `,e.expiresAt?A(e.expiresAt):T(`shareNeverExpires`)]}),(0,D.jsx)(`span`,{children:`·`}),(0,D.jsx)(`span`,{children:T(`shareAccessCount`,{count:e.accessCount||0})}),e.lastAccessedAt?(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(`span`,{children:`·`}),(0,D.jsxs)(`span`,{children:[T(`shareLastAccessedAt`),`: `,A(e.lastAccessedAt)]})]}):null]})]}),(0,D.jsxs)(`div`,{className:`quickforge-settings-list-item-actions quickforge-share-link-actions`,children:[(0,D.jsxs)(`div`,{className:`hidden flex-wrap items-center justify-end gap-2 md:flex`,children:[i===`active`?(0,D.jsxs)(D.Fragment,{children:[(0,D.jsxs)(`select`,{className:`quickforge-settings-select quickforge-share-expiration-select`,value:I[e.id]||`24h`,onChange:t=>L(n=>({...n,[e.id]:t.target.value})),"aria-label":T(`shareUpdateExpiration`),disabled:s,children:[(0,D.jsx)(`option`,{value:`1h`,children:T(`oneHour`)}),(0,D.jsx)(`option`,{value:`24h`,children:T(`twentyFourHours`)}),(0,D.jsx)(`option`,{value:`7d`,children:T(`sevenDays`)}),(0,D.jsx)(`option`,{value:`never`,children:T(`shareNeverExpires`)})]}),(0,D.jsx)(y,{variant:`outline`,size:`sm`,onClick:()=>void te(e),disabled:s,children:T(`updateShareExpiration`)})]}):null,(0,D.jsx)(y,{variant:`ghost`,size:`icon`,onClick:()=>void Y(e),"aria-label":T(`copyShareLink`),title:T(`copyShareLink`),children:(0,D.jsx)(u,{className:`size-4`})}),(0,D.jsx)(y,{variant:`ghost`,size:`icon`,onClick:()=>window.open(k(e),`_blank`,`noopener,noreferrer`),disabled:!l,"aria-label":T(`openShareLink`),title:T(`openShareLink`),children:(0,D.jsx)(o,{className:`size-4`})}),i===`active`?(0,D.jsxs)(D.Fragment,{children:[(0,D.jsxs)(y,{variant:`outline`,size:`sm`,onClick:()=>z(e),disabled:s,children:[(0,D.jsx)(t,{className:`mr-2 size-4`}),T(`editShare`)]}),(0,D.jsxs)(y,{variant:`outline`,size:`sm`,onClick:()=>void X(e),disabled:s,children:[(0,D.jsx)(r,{className:`mr-2 size-4`}),T(`disableShare`)]})]}):(0,D.jsxs)(y,{variant:`outline`,size:`sm`,onClick:()=>void Z(e),disabled:s,children:[(0,D.jsx)(n,{className:`mr-2 size-4`}),T(`restoreShare`)]}),(0,D.jsx)(y,{variant:`ghost`,size:`icon`,className:`hover:text-destructive`,onClick:()=>void Q(e),disabled:s,"aria-label":T(`deleteShare`),title:T(`deleteShare`),children:(0,D.jsx)(c,{className:`size-4`})})]}),(0,D.jsxs)(y,{variant:`outline`,size:`sm`,className:`md:hidden`,onClick:()=>V(e),disabled:s,children:[(0,D.jsx)(a,{className:`mr-2 size-4`}),T(`manageShare`)]})]})]},e.id)})]}),R&&re===`active`?(0,D.jsx)(P,{share:R,onClose:()=>z(null),onSaved:e=>{q(e),U(T(`shareUpdated`)),G(``)}},R.id):null,B&&$?(0,D.jsx)(F,{share:B,status:$,onClose:()=>V(null),onAction:e=>ne(B,e)}):null]})}export{I as ShareLinksSettingsPage};
1
+ import{i as e}from"./rolldown-runtime-DWdDZTNf.js";import{A as t,C as n,T as r,Y as i,mt as a,pt as o,qt as s,s as c,y as l,yt as u}from"./icons-2D18YbSI.js";import{n as d}from"./react-vendor-3UaA-C9W.js";import{D as f,Dt as p,E as m,Tt as h,_ as g,b as _,g as v,mn as y,v as b,vn as x,w as S,x as C,y as w,yn as T}from"./index-BTPzyq7d.js";var E=e(s(),1),D=d(),O=[{value:`1h`,hours:1},{value:`24h`,hours:24},{value:`7d`,hours:168},{value:`never`}];function k(e){return e.url||`${window.location.origin}/share/${encodeURIComponent(e.id)}`}function A(e){if(!e)return`-`;let t=new Date(e);return Number.isNaN(t.getTime())?`-`:t.toLocaleString(x())}function j(e){return T(e===`disabled`?`shareStatusDisabled`:e===`expired`?`shareStatusExpired`:`shareStatusActive`)}function M(e){return e===`disabled`?`quickforge-settings-badge-muted`:e===`expired`?`quickforge-settings-badge-warning`:`quickforge-settings-badge-success`}function N(e){let t=O.find(t=>t.value===e);return t&&`hours`in t?g(t.hours):void 0}function P({share:e,onClose:t,onSaved:r}){let[i,a]=(0,E.useState)(e.permission),[o,s]=(0,E.useState)(``),[l,u]=(0,E.useState)(!1),[d,f]=(0,E.useState)(e.allowCloudUsage===!0),[p,h]=(0,E.useState)(`keep`),[g,v]=(0,E.useState)(!1),[b,x]=(0,E.useState)(``),S=i===`operate`,C=l?!1:!!(e.hasPassword||o.trim()),w=async()=>{if(S&&!C){x(T(`operateRequiresPassword`));return}v(!0),x(``);try{let n=l?``:o?o.trim():void 0,a=p===`keep`?void 0:N(p);r((await m(e.id,{permission:i,password:n,expiresAt:a,allowCloudUsage:i===`operate`&&d})).share),t()}catch(e){x(e instanceof Error?e.message:T(`requestFailed`)),v(!1)}};return(0,D.jsx)(`div`,{className:`fixed inset-0 z-50 flex items-center justify-center bg-black/45 p-4`,onMouseDown:e=>{e.target===e.currentTarget&&t()},children:(0,D.jsxs)(`div`,{className:`flex max-h-[85vh] w-full max-w-md flex-col overflow-hidden rounded-2xl border border-border bg-background shadow-quickforge`,onMouseDown:e=>e.stopPropagation(),children:[(0,D.jsxs)(`div`,{className:`shrink-0 border-b border-border px-5 py-4`,children:[(0,D.jsx)(`h2`,{className:`text-base font-semibold`,children:T(`editShareTitle`)}),(0,D.jsx)(`p`,{className:`mt-1 truncate text-sm text-muted-foreground`,children:e.titleSnapshot||T(`untitledConversation`)})]}),(0,D.jsxs)(`div`,{className:`min-h-0 flex-1 space-y-4 overflow-y-auto px-5 py-4`,children:[(0,D.jsxs)(`div`,{children:[(0,D.jsx)(`div`,{className:`mb-2 text-sm font-medium`,children:T(`sharePermissionTitle`)}),(0,D.jsxs)(`div`,{className:`grid gap-2 sm:grid-cols-2`,children:[(0,D.jsxs)(`button`,{type:`button`,className:`rounded-xl border p-3 text-left text-sm ${i===`read`?`border-primary bg-primary/10`:`border-border`}`,onClick:()=>a(`read`),children:[(0,D.jsx)(`div`,{className:`font-medium`,children:T(`sharePermissionRead`)}),(0,D.jsx)(`div`,{className:`mt-1 text-xs text-muted-foreground`,children:T(`sharePermissionReadHint`)})]}),(0,D.jsxs)(`button`,{type:`button`,className:`rounded-xl border p-3 text-left text-sm ${i===`operate`?`border-red-400 bg-red-50 text-red-950`:`border-border`}`,onClick:()=>a(`operate`),children:[(0,D.jsx)(`div`,{className:`font-medium text-red-700`,children:T(`sharePermissionOperate`)}),(0,D.jsx)(`div`,{className:`mt-1 text-xs text-red-700`,children:T(`sharePermissionOperateHint`)})]})]})]}),i===`operate`?(0,D.jsxs)(`label`,{className:`flex items-start gap-2 rounded-xl border border-border bg-muted/20 p-3 text-xs font-medium`,children:[(0,D.jsx)(`input`,{type:`checkbox`,checked:d,onChange:e=>f(e.target.checked)}),(0,D.jsx)(`span`,{children:`允许该分享使用宿主机的 QuickForge Cloud 模型和额度。默认关闭。`})]}):null,(0,D.jsxs)(`div`,{className:`space-y-2`,children:[(0,D.jsx)(`label`,{className:`block text-sm font-medium`,children:T(`sharePasswordTitle`)}),(0,D.jsxs)(`div`,{className:`flex flex-col gap-3 sm:flex-row sm:items-center`,children:[(0,D.jsx)(`input`,{value:o,onChange:e=>s(e.target.value),disabled:l,className:`h-10 w-full min-w-0 rounded-md border border-input bg-background px-3 text-sm`,placeholder:e.hasPassword?T(`sharePasswordPlaceholderKeep`):T(`sharePasswordPlaceholderNone`),type:`text`,autoComplete:`new-password`}),(0,D.jsxs)(y,{variant:`outline`,className:`h-10 sm:shrink-0`,onClick:()=>{u(!1),s(_())},children:[(0,D.jsx)(n,{className:`mr-2 size-4`}),T(`generatePassword`)]})]}),l?(0,D.jsx)(`span`,{className:`block text-xs text-destructive`,children:T(`sharePasswordRemovalSelected`)}):(0,D.jsx)(`span`,{className:`block text-xs text-muted-foreground`,children:e.hasPassword?T(`sharePasswordEditHint`):T(`sharePasswordSetHint`)}),e.hasPassword&&!l?(0,D.jsxs)(y,{variant:`ghost`,size:`sm`,className:`h-8 text-destructive`,onClick:()=>{s(``),u(!0)},children:[(0,D.jsx)(c,{className:`mr-2 size-3.5`}),T(`removePassword`)]}):null]}),(0,D.jsxs)(`label`,{className:`block text-sm font-medium`,children:[T(`shareExpiresAt`),(0,D.jsxs)(`select`,{value:p,onChange:e=>h(e.target.value),className:`mt-2 h-10 w-full rounded-md border border-input bg-background px-3 text-sm`,children:[(0,D.jsx)(`option`,{value:`keep`,children:T(`keepCurrentExpiration`)}),(0,D.jsx)(`option`,{value:`1h`,children:T(`oneHour`)}),(0,D.jsx)(`option`,{value:`24h`,children:T(`twentyFourHours`)}),(0,D.jsx)(`option`,{value:`7d`,children:T(`sevenDays`)}),(0,D.jsx)(`option`,{value:`never`,children:T(`shareNeverExpires`)})]})]}),b?(0,D.jsx)(`div`,{className:`rounded-md border border-destructive/30 bg-destructive/10 px-3 py-2 text-sm text-destructive`,children:b}):null]}),(0,D.jsx)(`div`,{className:`shrink-0 border-t border-border px-5 py-4`,children:(0,D.jsxs)(`div`,{className:`flex justify-end gap-2`,children:[(0,D.jsx)(y,{variant:`outline`,onClick:t,disabled:g,children:T(`cancel`)}),(0,D.jsx)(y,{variant:i===`operate`?`destructive`:`default`,onClick:()=>void w(),disabled:g,children:T(`saveChanges`)})]})})]})})}function F({share:e,status:i,onClose:a,onAction:s}){let l=i===`active`;return(0,D.jsx)(`div`,{className:`fixed inset-0 z-50 flex items-end justify-center bg-black/45 sm:items-center`,onMouseDown:e=>{e.target===e.currentTarget&&a()},children:(0,D.jsxs)(`div`,{className:`w-full max-w-md rounded-t-2xl border border-border bg-background p-4 pb-[max(1rem,env(safe-area-inset-bottom))] shadow-quickforge sm:rounded-2xl sm:pb-4`,role:`dialog`,"aria-modal":`true`,"aria-label":T(`manageShare`),children:[(0,D.jsx)(`div`,{className:`truncate px-1 text-sm font-medium text-foreground`,children:e.titleSnapshot||T(`untitledConversation`)}),(0,D.jsx)(`div`,{className:`mt-1 truncate px-1 font-mono text-xs text-muted-foreground`,title:k(e),children:k(e)}),(0,D.jsxs)(`div`,{className:`mt-3 space-y-1`,children:[(0,D.jsxs)(y,{variant:`ghost`,className:`w-full justify-start`,onClick:()=>s(`copy`),children:[(0,D.jsx)(u,{className:`mr-2 size-4`}),T(`copyShareLink`)]}),(0,D.jsxs)(y,{variant:`ghost`,className:`w-full justify-start`,disabled:!l,onClick:()=>s(`open`),children:[(0,D.jsx)(o,{className:`mr-2 size-4`}),T(`openShareLink`)]}),i===`active`?(0,D.jsxs)(y,{variant:`ghost`,className:`w-full justify-start`,onClick:()=>s(`edit`),children:[(0,D.jsx)(t,{className:`mr-2 size-4`}),T(`editShare`)]}):null,i===`active`?(0,D.jsxs)(y,{variant:`ghost`,className:`w-full justify-start`,onClick:()=>s(`disable`),children:[(0,D.jsx)(r,{className:`mr-2 size-4`}),T(`disableShare`)]}):(0,D.jsxs)(y,{variant:`ghost`,className:`w-full justify-start`,onClick:()=>s(`restore`),children:[(0,D.jsx)(n,{className:`mr-2 size-4`}),T(`restoreShare`)]}),(0,D.jsxs)(y,{variant:`ghost`,className:`w-full justify-start hover:text-destructive`,onClick:()=>s(`delete`),children:[(0,D.jsx)(c,{className:`mr-2 size-4`}),T(`deleteShare`)]})]}),(0,D.jsx)(y,{variant:`outline`,className:`mt-3 w-full`,onClick:a,children:T(`cancel`)})]})})}function I(){let[e,s]=(0,E.useState)([]),[d,m]=(0,E.useState)(!0),[g,_]=(0,E.useState)(``),[x,O]=(0,E.useState)(``),[I,L]=(0,E.useState)({}),[R,z]=(0,E.useState)(null),[B,V]=(0,E.useState)(null),[H,U]=(0,E.useState)(``),[W,G]=(0,E.useState)(``),ee=async(e=!0)=>{e&&m(!0),G(``);try{s((await C()).shares)}catch(e){G(e instanceof Error?e.message:T(`shareLinksLoadFailed`))}finally{e&&m(!1)}};(0,E.useEffect)(()=>{let e=!1;return C().then(t=>{e||s(t.shares)}).catch(t=>{e||G(t instanceof Error?t.message:T(`shareLinksLoadFailed`))}).finally(()=>{e||m(!1)}),()=>{e=!0}},[]);let K=(0,E.useMemo)(()=>{let t=x.trim().toLowerCase();return t?e.filter(e=>`${e.titleSnapshot||``} ${e.id} ${e.projectId||``}`.toLowerCase().includes(t)):e},[x,e]),q=e=>{s(t=>t.map(t=>t.id===e.id?{...t,...e}:t))},J=async(e,t,n)=>{if(!g){_(e),U(``),G(``);try{q((await t()).share),U(n)}catch(e){G(e instanceof Error?e.message:T(`requestFailed`))}finally{_(``)}}},Y=async e=>{try{await p(k(e)),U(T(`shareLinkCopied`)),G(``)}catch{G(T(`copyFailed`))}},X=async e=>{await h({description:T(`disableShareConfirm`,{title:e.titleSnapshot||e.id}),confirmLabel:T(`disableShare`),cancelLabel:T(`cancel`),variant:`destructive`})&&await J(e.id,()=>w(e.id),T(`shareDisabled`))},Z=async e=>{let t=I[e.id]||`24h`;await J(e.id,()=>S(e.id,N(t)),T(`shareRestored`))},te=async e=>{let t=I[e.id]||`24h`;await J(e.id,()=>f(e.id,N(t)),T(`shareExpirationUpdated`))},Q=async e=>{if(!(!await h({description:T(`deleteShareConfirm`,{title:e.titleSnapshot||e.id}),confirmLabel:T(`confirmDelete`),cancelLabel:T(`cancel`),variant:`destructive`})||g)){_(e.id),U(``),G(``);try{await b(e.id),s(t=>t.filter(t=>t.id!==e.id)),U(T(`shareDeleted`))}catch(e){G(e instanceof Error?e.message:T(`requestFailed`))}finally{_(``)}}},ne=(e,t)=>{V(null),t===`copy`&&Y(e),t===`open`&&window.open(k(e),`_blank`,`noopener,noreferrer`),t===`edit`&&z(e),t===`disable`&&X(e),t===`restore`&&Z(e),t===`delete`&&Q(e)},re=R?v(R):null,$=B?v(B):null;return(0,D.jsxs)(`div`,{className:`quickforge-settings-stack`,children:[(0,D.jsxs)(`div`,{className:`quickforge-settings-heading`,children:[(0,D.jsxs)(`div`,{children:[(0,D.jsxs)(`h2`,{className:`quickforge-settings-title`,children:[(0,D.jsx)(i,{className:`size-5`}),T(`shareLinks`)]}),(0,D.jsx)(`p`,{className:`quickforge-settings-row-description`,children:T(`shareLinksDescription`)})]}),(0,D.jsxs)(y,{variant:`outline`,size:`sm`,onClick:()=>void ee(),disabled:d||!!g,children:[(0,D.jsx)(n,{className:`mr-2 size-4 ${d?`animate-spin`:``}`}),T(`refresh`)]})]}),(0,D.jsxs)(`div`,{className:`quickforge-settings-section`,children:[(0,D.jsxs)(`div`,{className:`quickforge-settings-toolbar`,children:[(0,D.jsxs)(`div`,{className:`quickforge-settings-inline-field max-w-md`,children:[(0,D.jsx)(l,{className:`pointer-events-none absolute left-3 top-1/2 size-4 -translate-y-1/2 text-muted-foreground/60`,"aria-hidden":`true`}),(0,D.jsx)(`input`,{value:x,onChange:e=>O(e.target.value),className:`quickforge-settings-input`,placeholder:T(`searchShareLinks`),"aria-label":T(`searchShareLinks`)})]}),(0,D.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:T(`shareLinksCount`,{count:K.length})})]}),H?(0,D.jsx)(`div`,{className:`quickforge-settings-note quickforge-share-links-message`,children:H}):null,W?(0,D.jsx)(`div`,{className:`quickforge-settings-error quickforge-share-links-message`,children:W}):null,d?(0,D.jsx)(`div`,{className:`p-6 text-center text-sm text-muted-foreground`,children:T(`loading`)}):K.length===0?(0,D.jsx)(`div`,{className:`p-8 text-center text-sm text-muted-foreground`,children:T(x?`noMatchingShareLinks`:`noShareLinks`)}):K.map(e=>{let i=v(e),s=g===e.id,l=i===`active`;return(0,D.jsxs)(`div`,{className:`quickforge-settings-list-item quickforge-share-link-item`,children:[(0,D.jsxs)(`div`,{className:`quickforge-settings-list-item-main`,children:[(0,D.jsxs)(`div`,{className:`flex min-w-0 flex-wrap items-center gap-2`,children:[(0,D.jsx)(`div`,{className:`truncate text-sm font-medium text-foreground`,children:e.titleSnapshot||T(`untitledConversation`)}),(0,D.jsx)(`span`,{className:`quickforge-settings-badge ${M(i)}`,children:j(i)}),(0,D.jsx)(`span`,{className:`quickforge-settings-badge quickforge-settings-badge-info`,children:e.permission===`operate`?T(`sharePermissionOperate`):T(`sharePermissionRead`)}),e.hasPassword?(0,D.jsx)(`span`,{className:`quickforge-settings-badge quickforge-settings-badge-muted`,children:T(`sharePasswordProtected`)}):null]}),(0,D.jsx)(`div`,{className:`quickforge-share-link-url`,title:k(e),children:k(e)}),(0,D.jsxs)(`div`,{className:`quickforge-settings-meta text-xs text-muted-foreground`,children:[(0,D.jsxs)(`span`,{children:[T(`shareCreatedAt`),`: `,A(e.createdAt)]}),(0,D.jsx)(`span`,{children:`·`}),(0,D.jsxs)(`span`,{children:[T(`shareExpiresAt`),`: `,e.expiresAt?A(e.expiresAt):T(`shareNeverExpires`)]}),(0,D.jsx)(`span`,{children:`·`}),(0,D.jsx)(`span`,{children:T(`shareAccessCount`,{count:e.accessCount||0})}),e.lastAccessedAt?(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(`span`,{children:`·`}),(0,D.jsxs)(`span`,{children:[T(`shareLastAccessedAt`),`: `,A(e.lastAccessedAt)]})]}):null]})]}),(0,D.jsxs)(`div`,{className:`quickforge-settings-list-item-actions quickforge-share-link-actions`,children:[(0,D.jsxs)(`div`,{className:`hidden flex-wrap items-center justify-end gap-2 md:flex`,children:[i===`active`?(0,D.jsxs)(D.Fragment,{children:[(0,D.jsxs)(`select`,{className:`quickforge-settings-select quickforge-share-expiration-select`,value:I[e.id]||`24h`,onChange:t=>L(n=>({...n,[e.id]:t.target.value})),"aria-label":T(`shareUpdateExpiration`),disabled:s,children:[(0,D.jsx)(`option`,{value:`1h`,children:T(`oneHour`)}),(0,D.jsx)(`option`,{value:`24h`,children:T(`twentyFourHours`)}),(0,D.jsx)(`option`,{value:`7d`,children:T(`sevenDays`)}),(0,D.jsx)(`option`,{value:`never`,children:T(`shareNeverExpires`)})]}),(0,D.jsx)(y,{variant:`outline`,size:`sm`,onClick:()=>void te(e),disabled:s,children:T(`updateShareExpiration`)})]}):null,(0,D.jsx)(y,{variant:`ghost`,size:`icon`,onClick:()=>void Y(e),"aria-label":T(`copyShareLink`),title:T(`copyShareLink`),children:(0,D.jsx)(u,{className:`size-4`})}),(0,D.jsx)(y,{variant:`ghost`,size:`icon`,onClick:()=>window.open(k(e),`_blank`,`noopener,noreferrer`),disabled:!l,"aria-label":T(`openShareLink`),title:T(`openShareLink`),children:(0,D.jsx)(o,{className:`size-4`})}),i===`active`?(0,D.jsxs)(D.Fragment,{children:[(0,D.jsxs)(y,{variant:`outline`,size:`sm`,onClick:()=>z(e),disabled:s,children:[(0,D.jsx)(t,{className:`mr-2 size-4`}),T(`editShare`)]}),(0,D.jsxs)(y,{variant:`outline`,size:`sm`,onClick:()=>void X(e),disabled:s,children:[(0,D.jsx)(r,{className:`mr-2 size-4`}),T(`disableShare`)]})]}):(0,D.jsxs)(y,{variant:`outline`,size:`sm`,onClick:()=>void Z(e),disabled:s,children:[(0,D.jsx)(n,{className:`mr-2 size-4`}),T(`restoreShare`)]}),(0,D.jsx)(y,{variant:`ghost`,size:`icon`,className:`hover:text-destructive`,onClick:()=>void Q(e),disabled:s,"aria-label":T(`deleteShare`),title:T(`deleteShare`),children:(0,D.jsx)(c,{className:`size-4`})})]}),(0,D.jsxs)(y,{variant:`outline`,size:`sm`,className:`md:hidden`,onClick:()=>V(e),disabled:s,children:[(0,D.jsx)(a,{className:`mr-2 size-4`}),T(`manageShare`)]})]})]},e.id)})]}),R&&re===`active`?(0,D.jsx)(P,{share:R,onClose:()=>z(null),onSaved:e=>{q(e),U(T(`shareUpdated`)),G(``)}},R.id):null,B&&$?(0,D.jsx)(F,{share:B,status:$,onClose:()=>V(null),onAction:e=>ne(B,e)}):null]})}export{I as ShareLinksSettingsPage};