@covro/covro 0.2.0 → 0.2.1-dev.1

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.
@@ -83,7 +83,7 @@ Error generating stack: `+e.message+`
83
83
  `)}\n/rename 必须提供名称,其他命令无需参数。输入 // 可发送以 / 开头的普通消息。`};if(n===`status`)return i.openStatus(),{message:`已打开状态诊断;可在面板中刷新或核对提交。`};if(i.project?.id!==t.project?.id||i.selectedId!==t.selectedId)return{error:!0,message:`当前项目或会话已切换,请重新选择命令。`};let a=yw(n,i);if(a)return{error:!0,message:a};if(n===`rename`){let e=Xe(r);if(e)return{error:!0,message:e}}let o=i.thread,s=`/api/threads/${encodeURIComponent(o?.id??``)}`;try{if(n===`export`){let{partial:e}=await i.exportThread(o.id);return{message:e?`已发起 Markdown 下载;存在未完成、状态待确认或截断内容,请查看文件内说明。`:`已发起已保存历史的 Markdown 下载。图片和内部记录的省略范围已在文件中说明。`}}let e;if(n===`new`)return{draftKey:i.openDraft(),message:`已打开新会话输入页,发送首条消息时创建会话。`};if(n===`fork`)e=await i.run(`fork`,o.id,`${s}/fork`,{settings:i.settings});else if(n===`review`)e=await i.run(`review`,o.id,`${s}/review`);else if(n===`rename`)e=await i.run(`rename`,o.id,`${s}/rename`,{name:r.trim()});else if(n===`resume`)i.onResumeAttempt(),e=await i.run(`resume`,o.id,`${s}/resume`),await i.refreshThread();else if(n===`compact`)e=await i.run(`compact`,o.id,`${s}/compact`);else{let t=o.turns.findLast(e=>kl(e.status));e=await i.run(`interrupt`,o.id,`${s}/interrupt`,{expectedTurnId:t.id})}return bw(n,e)}catch(e){return{error:!0,message:En(e)}}}}))}function Sw({textareaRef:e,inputId:t}){let[n,r]=(0,O.useState)({min:93,max:230,height:93}),[i,a]=(0,O.useState)(!1),o=(0,O.useRef)(n),s=(0,O.useRef)(null);function c(){s.current=null,a(!1),document.documentElement.classList.remove(`composer-resizing`)}function l(t){let n=e.current;if(!n)return;let i=Math.min(o.current.max,Math.max(o.current.min,t));n.style.height=`${i}px`,r(e=>({...e,height:i}))}return(0,O.useEffect)(()=>{let t=e.current,n=t?.closest(`.bottom-region`),i=n?.parentElement;if(!t||!n||!i)return;let a=0,s=()=>{let e=getComputedStyle(t),a=parseFloat(e.getPropertyValue(`--composer-min-height`)),s=parseFloat(e.getPropertyValue(`--composer-max-height`)),c=getComputedStyle(n).maxHeight,l=c.endsWith(`%`)?i.clientHeight*parseFloat(c)/100:parseFloat(c),u=i.querySelector(`.conversation-area`),d=Array.from(i.children).reduce((e,t)=>{let r=getComputedStyle(t);return t===n||r.position===`absolute`||r.position===`fixed`||r.display===`none`?e:e+(t===u?parseFloat(r.minHeight)||0:t.getBoundingClientRect().height)+(parseFloat(r.marginTop)||0)+(parseFloat(r.marginBottom)||0)},0),f=n.scrollHeight-t.getBoundingClientRect().height,p=window.visualViewport?.offsetTop??0,m=t.getBoundingClientRect().bottom-p-24,h=Math.max(a,Math.floor(Math.min(s,l-f,i.clientHeight-d-f,m)));t.style.setProperty(`--composer-available-height`,`${h}px`),t.style.height&&(t.style.height=`${Math.min(h,Math.max(a,parseFloat(t.style.height)))}px`);let g=t.getBoundingClientRect().height;o.current={min:a,max:h,height:g},r(e=>e.min===a&&e.max===h&&e.height===g?e:{min:a,max:h,height:g})};function l(){cancelAnimationFrame(a),a=requestAnimationFrame(s)}let u=new ResizeObserver(l);for(let e of[t,...i.children])u.observe(e);u.observe(i);let d=new MutationObserver(l);return d.observe(i,{childList:!0}),window.visualViewport?.addEventListener(`resize`,l),window.addEventListener(`blur`,c),s(),()=>{u.disconnect(),d.disconnect(),cancelAnimationFrame(a),window.visualViewport?.removeEventListener(`resize`,l),window.removeEventListener(`blur`,c),c()}},[e]),(0,W.jsx)(ol,{asChild:!0,suppressed:i,content:`向上拖动增高,向下拖动缩小;也可用方向键调整`,children:(0,W.jsx)(`button`,{type:`button`,className:`composer-resize-handle`,"data-resizing":i||void 0,role:`separator`,"aria-label":`调整输入框高度`,"aria-orientation":`horizontal`,"aria-controls":t,"aria-valuemin":Math.round(n.min),"aria-valuemax":Math.round(n.max),"aria-valuenow":Math.round(n.height),"aria-valuetext":`${Math.round(n.height)} 像素`,onPointerDown:t=>{t.isPrimary&&t.button===0&&e.current&&(t.preventDefault(),t.currentTarget.setPointerCapture(t.pointerId),s.current={pointerId:t.pointerId,y:t.clientY,height:e.current.getBoundingClientRect().height},document.documentElement.classList.add(`composer-resizing`),a(!0))},onPointerMove:e=>{s.current?.pointerId===e.pointerId&&(e.preventDefault(),l(s.current.height+s.current.y-e.clientY))},onPointerUp:e=>{s.current?.pointerId===e.pointerId&&(c(),e.currentTarget.releasePointerCapture(e.pointerId))},onPointerCancel:c,onLostPointerCapture:c,onKeyDown:t=>{let r=e.current?.getBoundingClientRect().height??n.height,i=t.shiftKey?40:10,a={ArrowUp:r+i,ArrowDown:r-i,Home:n.min,End:n.max}[t.key];a!==void 0&&(t.preventDefault(),l(a))},children:(0,W.jsx)(`svg`,{width:`32`,height:`32`,viewBox:`0 0 32 32`,fill:`none`,"aria-hidden":`true`,children:(0,W.jsx)(`path`,{d:`M21 3.5a7.5 7.5 0 0 1 7.5 7.5`})})})})}function Cw(e){let[t,n]=(0,O.useState)({}),r=(0,O.useRef)(t),i=(0,O.useId)(),a=(0,O.useRef)(!1);Cr(`composer`,()=>{if(a.current||Object.values(r.current).some(e=>e.images.some(e=>!e.dataUrl)))throw Error(`正在输入或读取图片,完成后会自动加载新版`);return r.current},e=>{r.current={...e,...r.current},n(r.current)});let o=(0,O.useRef)(-1/0),s=(0,O.useRef)(new Set),c=(0,O.useRef)(new Map),l=(0,O.useRef)(null),u=(0,O.useId)(),d=(0,O.useId)(),[f,p]=(0,O.useState)(!1),[m,h]=(0,O.useState)({key:``,text:``,selectedIndex:0,dismissed:!1}),[g,_]=(0,O.useState)({}),[v,y]=(0,O.useState)([]),b=e.draftKey,x=(0,O.useRef)(new WeakSet);(0,O.useEffect)(()=>{for(let t of Object.values(e.sentDrafts))x.current.has(t)||(x.current.add(t),c.current.get(t.key)?.text.replace(/^(\s*)\/\//,`$1/`)===t.text&&ee(t.key))},[e.sentDrafts]),(0,O.useEffect)(()=>{a.current=!1,o.current=-1/0,h({key:``,text:``,selectedIndex:0,dismissed:!1})},[b]);let S=t[b]??Yb,{text:C,images:w}=S,T=hw(C),E=gw(e.commands,C),D=m.key===b&&m.text===C?m:void 0,k=Math.min(D?.selectedIndex??0,Math.max(0,E.length-1)),A=!!(T&&f&&!D?.dismissed),j=A?E[k]:e.commands.find(e=>e.name===T?.name),M=v.includes(b);function N(e){h({key:b,text:C,selectedIndex:e,dismissed:!1})}function P(){h({key:b,text:C,selectedIndex:k,dismissed:!0})}async function F(t){if(s.current.has(b)||a.current)return;let n=r.current[b]??Yb,i=hw(n.text);if(!i)return;let o=t?`/${t.name}${i.arguments?` ${i.arguments}`:``}`:n.text,c=n.images.length?`Slash 命令不能附带图片。请先移除图片,或改为普通消息。`:_w(o,e.commands);if(c){_(e=>({...e,[b]:{message:c,error:!0}}));return}let l=e.commands.find(e=>e.name===hw(o)?.name);if(l){s.current.add(b),y(e=>[...e,b]),_(e=>({...e,[b]:{message:`正在执行 /${l.name}…`}})),P();try{let e=await l.run(hw(o)?.arguments);_(t=>({...t,[b]:e,[e.draftKey??b]:e})),e.error||L(b,e=>({...e,text:e.text===n.text?``:e.text}))}catch(e){_(t=>({...t,[b]:{error:!0,message:e instanceof Error?e.message:`命令执行失败,请重试。`}}))}finally{s.current.delete(b),y(e=>e.filter(e=>e!==b))}}}let I=w.some(e=>!e.dataUrl);function L(e,t){let i={...r.current,[e]:t(r.current[e]??Yb)};r.current=i,n(i)}function ee(e){let t=c.current.get(e);t&&(c.current.delete(e),L(e,e=>({text:e.text===t.text?``:e.text,images:e.images.filter(e=>!t.images.some(t=>t.id===e.id)),error:e.error===t.error?void 0:e.error})))}function te(e){if(e.defaultPrevented)return;let t=Array.from(e.clipboardData.files);if(!t.length)return;e.preventDefault();let n=Xb(t,(r.current[b]??Yb).images);if(n){L(b,e=>({...e,error:n}));return}let i=t.map(e=>({id:crypto.randomUUID(),name:e.name||`粘贴的图片`,size:e.size})),a=e.clipboardData.getData(`text/plain`),o=e.currentTarget.selectionStart,s=e.currentTarget.selectionEnd;L(b,e=>({text:a?(e.text.slice(0,o)+a+e.text.slice(s)).slice(0,1e5):e.text,images:[...e.images,...i]})),t.forEach((e,t)=>{let n=i[t].id;Zb(e).then(e=>L(b,t=>({...t,images:t.images.map(t=>t.id===n?{...t,dataUrl:e}:t)})),()=>L(b,e=>e.images.some(e=>e.id===n)?{...e,images:e.images.filter(e=>e.id!==n),error:`图片读取失败,请重新粘贴。`}:e))})}let R=!!(e.thread?.managed&&kl(e.thread.status)),ne=e.thread&&!e.thread.managed&&!e.thread.archived,re=ne?e.thread?.resumeError:void 0,ie=re?.code===`THREAD_IN_USE`,ae=!(!e.thread&&!e.projectId||e.threadLoading||ne||!C.trim()&&!w.length||I||e.disabled||e.submitting);async function oe(){if(T){await F(A?E[k]:void 0);return}if(!ae||s.current.has(b))return;let t=r.current[b]??Yb;if(!t.text.trim()&&!t.images.length||t.images.some(e=>!e.dataUrl))return;s.current.add(b),c.current.set(b,t);let n=t.text,i=t.images;try{await e.onSend(n.replace(/^(\s*)\/\//,`$1/`),R,i.length?i.map(e=>e.dataUrl):void 0)&&ee(b)}finally{s.current.delete(b)}}return(0,W.jsxs)(`div`,{className:`composer-region`,children:[e.submitting&&(0,W.jsxs)(`p`,{className:`composer-resume-status`,role:`status`,children:[(0,W.jsx)(J,{name:`refresh`,size:14}),e.thread?`正在提交消息…`:`正在创建会话并发送首条消息…`]}),ne&&e.resuming&&(0,W.jsxs)(`p`,{className:`composer-resume-status`,role:`status`,children:[(0,W.jsx)(J,{name:`refresh`,size:14}),`正在恢复会话…`]}),ne&&e.resumeAttempted&&!e.resuming&&!re&&e.canResume&&(0,W.jsx)(q,{size:`sm`,variant:`secondary`,onClick:e.onResume,children:`重试恢复`}),re&&!e.resuming&&(0,W.jsxs)(`div`,{className:`session-resume-notice`,role:`status`,children:[(0,W.jsx)(`strong`,{children:ie?`此会话正被其他进程使用`:`无法恢复会话`}),(0,W.jsx)(`p`,{children:ie?`可以 Fork 已保存的历史继续对话,或在原进程释放会话后重试。新会话使用同一项目目录。`:re.message}),ie&&(0,W.jsxs)(q,{size:`sm`,variant:`secondary`,disabled:!e.canFork,onClick:e.onFork,children:[(0,W.jsx)(J,{name:`fork`,size:14}),e.forking?`正在确认 Fork…`:`Fork 为新会话`]}),(0,W.jsx)(q,{size:`sm`,disabled:!e.canResume,onClick:e.onResume,children:`重试恢复`})]}),(0,W.jsxs)(`div`,{className:`composer-box`,children:[(0,W.jsx)(Sw,{textareaRef:l,inputId:u}),g[b]&&(0,W.jsx)(`p`,{className:`slash-feedback`,role:g[b].error?`alert`:`status`,children:g[b].message}),A&&(0,W.jsx)(mw,{id:d,commands:E,selectedIndex:k,onSelect:N,onExecute:e=>{l.current?.focus(),F(e)}}),w.length>0&&(0,W.jsx)(`ul`,{className:`composer-images`,"aria-label":`待发送的图片`,children:w.map((e,t)=>(0,W.jsxs)(`li`,{children:[e.dataUrl?(0,W.jsx)(`img`,{src:e.dataUrl,alt:`待发送的图片 ${t+1}`}):(0,W.jsx)(`span`,{role:`status`,children:`读取中…`}),(0,W.jsx)(ol,{asChild:!0,content:e.name,children:(0,W.jsx)(`span`,{className:`composer-image-name`,children:e.name})}),(0,W.jsx)(q,{variant:`secondary`,size:`sm`,"aria-label":`移除图片 ${t+1}`,onClick:()=>L(b,t=>({...t,error:void 0,images:t.images.filter(t=>t.id!==e.id)})),children:(0,W.jsx)(J,{name:`close`,size:13})})]},e.id))}),S.error&&(0,W.jsx)(`p`,{className:`composer-image-error`,role:`alert`,children:S.error}),(0,W.jsx)(`textarea`,{id:u,ref:l,"aria-label":R?`追加要求`:`任务内容`,"aria-haspopup":`listbox`,"aria-controls":A?d:void 0,"aria-autocomplete":`list`,"aria-activedescendant":A&&E[k]?`${d}-${E[k].name}`:void 0,value:C,readOnly:!!e.thread?.archived,placeholder:e.thread?.archived?`取消归档后可继续对话…`:R?`补充要求或调整方向…`:`描述任务、粘贴图片,或输入 / 查看命令…`,maxLength:1e5,onChange:e=>{L(b,t=>({...t,text:e.target.value})),h({key:b,text:e.target.value,selectedIndex:0,dismissed:!1}),_(e=>{let t={...e};return delete t[b],t})},onPaste:te,onFocus:()=>p(!0),onCompositionStart:()=>{a.current=!0},onCompositionEnd:()=>{a.current=!1,o.current=performance.now()},onBlur:()=>{p(!1),a.current=!1,o.current=-1/0},onKeyDown:e=>{if((!e.defaultPrevented||A&&e.key===`Escape`)&&!(e.nativeEvent.isComposing||e.nativeEvent.keyCode===229||a.current)){if(performance.now()-o.current<100)e.key===`Enter`&&!e.shiftKey&&e.preventDefault();else{if(A&&!e.shiftKey&&!e.altKey&&!e.metaKey&&!e.ctrlKey){if(e.key===`ArrowDown`||e.key===`ArrowUp`){e.preventDefault(),E.length&&N((k+(e.key===`ArrowDown`?1:-1)+E.length)%E.length);return}if(e.key===`Escape`){e.preventDefault(),P();return}}e.key!==`Enter`||e.shiftKey||(e.preventDefault(),!e.repeat&&oe())}}},onKeyUp:e=>{e.key===`Enter`&&(o.current=-1/0)},rows:3}),(0,W.jsxs)(pw,{settings:e.settings,projectName:e.projectName,models:e.models,onChange:e.onSettings,onSaveModelDefaults:e.onSaveModelDefaults,savingModelDefaults:e.savingModelDefaults,thread:e.thread,projectId:e.projectId,runtimeKey:e.runtimeKey,threadLoading:e.threadLoading,disabled:e.disabled||!!e.threadLoading||R||e.submitting||e.resuming||e.forking,children:[R&&(0,W.jsx)(ol,{content:`中断`,children:(0,W.jsxs)(q,{"aria-label":e.interrupting?`请求中…`:`中断`,variant:`secondary`,size:`sm`,onClick:e.onInterrupt,disabled:!e.canInterrupt||e.interrupting,children:[(0,W.jsx)(J,{name:`stop`,size:13}),(0,W.jsx)(`span`,{className:`composer-action-label`,children:e.interrupting?`请求中…`:`中断`})]})}),(0,W.jsx)(ol,{id:i,className:`composer-submit`,content:T?`Enter 执行命令 / Esc 关闭菜单`:`Enter 发送 / Shift + Enter 换行`,children:(0,W.jsxs)(q,{size:`sm`,"aria-label":T?M?`正在执行命令…`:`执行命令`:e.submitting?`正在提交…`:R?`追加要求`:`发送任务`,"aria-describedby":i,onPointerDown:e=>{T&&e.preventDefault()},onClick:()=>{oe()},disabled:T?M||!!j?.unavailableReason:!ae,children:[(0,W.jsx)(J,{name:`send`,size:14}),(0,W.jsx)(`span`,{className:`composer-action-label`,children:T?M?`正在执行…`:`执行命令`:e.submitting?`正在提交…`:R?`追加要求`:`发送任务`})]})})]})]}),(0,W.jsx)(`p`,{className:`composer-note`,children:R?`关闭页面不会停止任务。中断以 Codex 返回的实际状态为准。`:`Codex 使用服务器项目与权限执行,请核对操作和变更。`})]})}var ww={read:`读取`,write:`写入`,deny:`禁止访问`};function Tw({request:e}){let t=e.fileSystem,n=[...t?.read.map(e=>({path:e,access:`read`}))??[],...t?.write.map(e=>({path:e,access:`write`}))??[],...t?.entries??[]];return(0,W.jsxs)(`div`,{className:`permission-details`,children:[e.network!==void 0&&(0,W.jsxs)(`div`,{className:`permission-network`,children:[(0,W.jsx)(`strong`,{children:`网络访问`}),(0,W.jsx)(`span`,{children:e.network===!0?`允许访问网络`:e.network===!1?`不开放额外网络访问`:`未指定网络访问变更`})]}),n.length>0&&(0,W.jsxs)(`div`,{children:[(0,W.jsx)(`h4`,{children:`文件与目录`}),(0,W.jsx)(`ul`,{className:`permission-paths`,children:n.map((e,t)=>(0,W.jsxs)(`li`,{children:[(0,W.jsx)(`span`,{className:`permission-access permission-access-${e.access}`,children:ww[e.access]??e.access}),(0,W.jsx)(`code`,{children:e.path})]},`${e.access}-${e.path}-${t}`))})]}),t?.globScanMaxDepth!==void 0&&(0,W.jsxs)(`p`,{children:[`目录匹配搜索深度:`,t.globScanMaxDepth]}),e.network===void 0&&n.length===0&&(0,W.jsx)(`p`,{children:`未请求额外网络或文件访问权限。`})]})}var Ew=class extends Error{code;status;details;constructor(e,t,n=400,r){super(t),this.code=e,this.status=n,this.details=r,this.name=`AppError`}toJSON(e){return{code:this.code,message:this.message,...e?{clientOperationId:e}:{},...this.details===void 0?{}:{details:this.details}}}},Dw=e=>{throw new Ew(`VALIDATION_ERROR`,e)};function Ow(e){if(!/^\d{4}-\d{2}-\d{2}$/.test(e))return!1;let t=new Date(`${e}T00:00:00.000Z`);return Number.isFinite(t.getTime())&&t.toISOString().slice(0,10)===e}function kw(e,t){switch(e){case`email`:return/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(t);case`uri`:try{return!/\s/.test(t)&&!!new URL(t).protocol}catch{return!1}case`date`:return Ow(t);case`date-time`:{let e=/^(\d{4}-\d{2}-\d{2})[Tt](\d{2}):(\d{2}):(\d{2})(?:\.\d+)?(?:[Zz]|[+-](\d{2}):(\d{2}))$/.exec(t);return!!(e&&Ow(e[1])&&Number(e[2])<=23&&Number(e[3])<=59&&Number(e[4])<=59&&(e[5]===void 0||Number(e[5])<=23)&&(e[6]===void 0||Number(e[6])<=59)&&Number.isFinite(Date.parse(t)))}default:return!0}}function Aw(e,t){let n=()=>Dw(`“${e.title}”的回答不符合字段要求`);switch(e.type){case`string`:if(typeof t!=`string`)n();else{let r=[...t].length;(e.minLength!==void 0&&r<e.minLength||e.maxLength!==void 0&&r>e.maxLength||t.length>1e4||!kw(e.format,t))&&n()}break;case`number`:case`integer`:(typeof t!=`number`||!Number.isFinite(t)||e.type===`integer`&&!Number.isSafeInteger(t)||e.minimum!==void 0&&t<e.minimum||e.maximum!==void 0&&t>e.maximum)&&n();break;case`boolean`:typeof t!=`boolean`&&n();break;case`enum`:(typeof t!=`string`||t.length>1e4||!e.options?.some(e=>e.value===t))&&n();break;case`multiEnum`:(!Array.isArray(t)||t.some(t=>typeof t!=`string`||t.length>1e4||!e.options?.some(e=>e.value===t))||t.length>500||new Set(t).size!==t.length||e.minItems!==void 0&&t.length<e.minItems||e.maxItems!==void 0&&t.length>e.maxItems)&&n()}}function jw(e){switch(e){case`pending`:return`需要你处理`;case`responding`:return`正在提交…`;case`responded`:return`已处理`;case`expired`:return`请求已失效`}}function Mw(e){return Object.fromEntries(e.filter(e=>e.default!==void 0).map(e=>[e.name,typeof e.default==`number`?String(e.default):e.default]))}function Nw(e){let t=[];return e.type===`integer`&&t.push(`填写整数`),e.minimum!==void 0&&t.push(`最小 ${e.minimum}`),e.maximum!==void 0&&t.push(`最大 ${e.maximum}`),e.minLength!==void 0&&t.push(`至少 ${e.minLength} 个字符`),e.maxLength!==void 0&&t.push(`最多 ${e.maxLength} 个字符`),e.minItems!==void 0&&t.push(`至少选择 ${e.minItems} 项`),e.maxItems!==void 0&&t.push(`最多选择 ${e.maxItems} 项`),e.format===`date-time`&&t.push(`日期与时间需包含时区,例如 2026-10-14T12:30:00+08:00`),t.join(` · `)}function Pw(e,t){let n=Object.create(null),r=Object.create(null);for(let i of e){let e=Object.hasOwn(t,i.name)?t[i.name]:void 0;if(e===void 0||(i.type===`number`||i.type===`integer`)&&e===``){i.required&&(r[i.name]=`请填写此必填项。`);continue}let a=i.type===`number`||i.type===`integer`?Number(e):e;try{Aw(i,a),n[i.name]=a}catch(e){r[i.name]=e instanceof Error?e.message:`请检查此字段的填写要求。`}}return{content:n,errors:r}}function Fw(e){if(e)try{let t=new URL(e);return(t.protocol===`https:`||t.protocol===`http:`)&&!t.username&&!t.password?t.href:void 0}catch{return}}function Iw({request:e,actionId:t,status:n,disabled:r,onResolve:i}){let a=e.fields??[],o=n===`pending`?e.approval?`允许本次`:e.mode===`url`?`我已完成`:a.length===0?`确认继续`:a.every(e=>[`boolean`,`enum`,`multiEnum`].includes(e.type))?`确认选择`:`提交回答`:jw(n),[s,c]=(0,O.useState)(()=>Mw(a)),[l,u]=(0,O.useState)(!1),{content:d,errors:f}=Pw(a,s),p=Fw(e.url),m=e.schemaError||(e.mode===`url`&&!p?`此请求没有可安全打开的 HTTP 或 HTTPS 地址,无法确认完成。`:void 0),h=(e,t)=>c(n=>({...n,[e]:t}));return(0,W.jsxs)(`form`,{className:`elicitation-form`,noValidate:!0,onSubmit:t=>{t.preventDefault(),!(r||m)&&(u(!0),!(e.mode===`form`&&Object.keys(f).length>0)&&i(e.mode===`form`&&!e.approval?{decision:`accept`,content:d}:{decision:`accept`}))},children:[(0,W.jsxs)(`p`,{className:`elicitation-source`,children:[`来源:`,(0,W.jsx)(`strong`,{children:e.serverName})]}),e.approval?.allowSession&&(0,W.jsx)(`p`,{className:`elicitation-scope subtle`,children:`本会话允许仅适用于当前请求对应的工具或连接范围,并受审批策略约束;新会话需重新确认。`}),m&&(0,W.jsx)(`p`,{className:`elicitation-error`,role:`alert`,children:m}),e.mode===`url`?(0,W.jsxs)(`div`,{className:`elicitation-url`,children:[(0,W.jsx)(`span`,{children:`访问地址`}),(0,W.jsx)(`code`,{children:e.url??`未提供地址`}),p&&(0,W.jsx)(`a`,{href:p,target:`_blank`,rel:`noopener noreferrer`,referrerPolicy:`no-referrer`,children:`在新标签页打开`}),(0,W.jsx)(`p`,{children:`完成页面中的操作后,点击“我已完成”继续。`})]}):!m&&(0,W.jsx)(`div`,{className:`elicitation-fields`,children:a.map((e,n)=>{let i=`elicitation-${t}-${n}`,a=Nw(e),o=l?f[e.name]:void 0,c=Object.hasOwn(s,e.name)?s[e.name]:void 0,u=[e.description&&`${i}-description`,a&&`${i}-hint`,o&&`${i}-error`].filter(Boolean).join(` `)||void 0;return(0,W.jsxs)(`div`,{className:`elicitation-field`,children:[(0,W.jsxs)(`div`,{className:`elicitation-field-heading`,children:[(0,W.jsxs)(`label`,{id:`${i}-label`,htmlFor:e.type===`multiEnum`?void 0:i,children:[e.title,(0,W.jsx)(`span`,{className:`field-necessity`,"aria-hidden":`true`,children:e.required?`必填`:`可选`})]}),!e.required&&c!==void 0&&(0,W.jsxs)(`button`,{type:`button`,className:`field-unset`,disabled:r,onClick:()=>h(e.name,void 0),children:[`不填写`,(0,W.jsx)(`span`,{className:`sr-only`,children:e.title})]})]}),e.description&&(0,W.jsx)(`p`,{id:`${i}-description`,className:`field-description`,children:e.description}),e.type===`boolean`||e.type===`enum`?(0,W.jsxs)(`select`,{id:i,className:`text-input`,value:c===void 0?``:e.type===`boolean`?c?`true`:`false`:`option:${String(c)}`,disabled:r,"aria-required":e.required,"aria-invalid":!!o,"aria-describedby":u,onChange:t=>h(e.name,t.target.value===``?void 0:e.type===`boolean`?t.target.value===`true`:t.target.value.slice(7)),children:[(0,W.jsx)(`option`,{value:``,children:`请选择`}),e.type===`boolean`?(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(`option`,{value:`true`,children:`是`}),(0,W.jsx)(`option`,{value:`false`,children:`否`})]}):e.options?.map(e=>(0,W.jsx)(`option`,{value:`option:${e.value}`,children:e.label},e.value))]}):e.type===`multiEnum`?(0,W.jsx)(`div`,{role:`group`,"aria-labelledby":`${i}-label`,"aria-describedby":u,"aria-invalid":!!o,className:`elicitation-multi-options`,children:e.options?.map(t=>(0,W.jsxs)(`label`,{className:`question-option`,children:[(0,W.jsx)(`input`,{type:`checkbox`,disabled:r,checked:Array.isArray(c)&&c.includes(t.value),onChange:n=>{let r=Array.isArray(c)?c:[];h(e.name,n.target.checked?[...r,t.value]:r.filter(e=>e!==t.value))}}),(0,W.jsx)(`span`,{children:t.label})]},t.value))}):(0,W.jsx)(`input`,{id:i,className:`text-input`,type:e.type===`number`||e.type===`integer`?`number`:e.format===`email`?`email`:e.format===`uri`?`url`:e.format===`date`?`date`:`text`,value:typeof c==`string`?c:``,step:e.type===`integer`?1:`any`,min:e.minimum,max:e.maximum,disabled:r,"aria-required":e.required,"aria-invalid":!!o,"aria-describedby":u,placeholder:e.required?void 0:`未填写(可选)`,autoComplete:`off`,onChange:t=>h(e.name,t.target.value)}),a&&(0,W.jsx)(`p`,{id:`${i}-hint`,className:`field-hint`,children:a}),o&&(0,W.jsx)(`p`,{id:`${i}-error`,className:`elicitation-error`,role:`alert`,children:o})]},e.name)})}),l&&Object.keys(f).length>0&&!m&&(0,W.jsx)(`p`,{className:`elicitation-error`,role:`alert`,children:`请检查标出的字段后再提交。`}),(0,W.jsxs)(`div`,{className:`action-options`,children:[!m&&(0,W.jsx)(q,{type:`submit`,disabled:r,children:o}),!m&&e.approval?.allowSession&&(0,W.jsx)(q,{variant:`secondary`,disabled:r,onClick:()=>i({decision:`accept`,persist:`session`}),children:`本会话允许`}),(0,W.jsx)(q,{variant:`secondary`,disabled:r,onClick:()=>i({decision:`decline`}),children:`拒绝`}),(0,W.jsx)(q,{variant:`ghost`,disabled:r,onClick:()=>i({decision:`cancel`}),children:`取消`})]})]})}function Lw({action:e,disabled:t,onResolve:n}){let[r,i]=(0,O.useState)({}),[a,o]=(0,O.useState)({}),s=e.status===`pending`,c=e.questions??[],l=e=>r[e]===`__other__`?a[e]?.trim()??``:r[e]?.trim()??``,u=c.length>0&&c.every(e=>l(e.id)),d=c.length>0&&c.every(e=>e.options.length>0&&r[e.id]!==`__other__`);return(0,W.jsxs)(`section`,{className:`action-card${e.kind===`unsupported`?` action-card-unsupported`:``}`,"aria-label":e.title,children:[(0,W.jsxs)(`div`,{className:`action-heading`,children:[(0,W.jsx)(`span`,{className:`action-icon`,children:(0,W.jsx)(J,{name:e.kind===`questions`?`chat`:`alert`,size:17})}),(0,W.jsx)(`h3`,{children:e.title}),(0,W.jsx)(`span`,{className:`action-state`,children:e.kind===`unsupported`&&e.status===`expired`?`请求未能处理`:jw(e.status)})]}),e.reason&&(0,W.jsx)(`p`,{children:e.reason}),e.cwd&&(0,W.jsxs)(`p`,{className:`mono subtle action-cwd`,children:[(0,W.jsx)(`span`,{children:`工作目录:`}),e.cwd]}),e.command&&(0,W.jsx)(`pre`,{className:`command`,children:(0,W.jsx)(`code`,{children:e.command})}),e.kind===`permissions`&&e.permissionRequest&&(0,W.jsx)(Tw,{request:e.permissionRequest}),e.details!==void 0&&(0,W.jsxs)(`details`,{className:`raw-details`,open:e.kind===`network`||e.kind===`file`||void 0,children:[(0,W.jsx)(`summary`,{children:e.kind===`network`?`网络访问目标`:e.kind===`file`?`变更详情`:e.kind===`permissions`||e.kind===`elicitation`?`技术详情`:`请求详情`}),(0,W.jsx)(`pre`,{children:JSON.stringify(e.details,null,2)})]}),e.kind===`elicitation`&&e.elicitation?(0,W.jsx)(Iw,{request:e.elicitation,actionId:e.actionId,status:e.status,disabled:t||!s,onResolve:n}):e.kind===`questions`?(0,W.jsxs)(`form`,{onSubmit:e=>{e.preventDefault(),!t&&s&&u&&n({answers:Object.fromEntries(c.map(e=>[e.id,[l(e.id)]]))})},children:[c.map(n=>(0,W.jsxs)(`fieldset`,{disabled:t||!s,children:[(0,W.jsx)(`legend`,{children:n.header}),(0,W.jsx)(`p`,{children:n.question}),n.options.map((t,a)=>(0,W.jsxs)(`label`,{className:`question-option`,children:[(0,W.jsx)(`input`,{type:`radio`,name:`${e.actionId}-${n.id}`,value:t.label,checked:r[n.id]===t.label,onChange:()=>i(e=>({...e,[n.id]:t.label}))}),(0,W.jsxs)(`span`,{children:[(0,W.jsx)(`strong`,{children:t.label}),(0,W.jsx)(`small`,{children:t.description})]}),(0,W.jsx)(`span`,{className:`option-number`,children:a+1})]},t.label)),n.options.length>0&&n.isOther&&(0,W.jsxs)(`label`,{className:`question-option`,children:[(0,W.jsx)(`input`,{type:`radio`,name:`${e.actionId}-${n.id}`,checked:r[n.id]===`__other__`,onChange:()=>i(e=>({...e,[n.id]:`__other__`}))}),(0,W.jsx)(`span`,{children:`其他回答`})]}),(n.options.length===0||r[n.id]===`__other__`)&&(0,W.jsx)(`input`,{className:`text-input`,type:n.isSecret?`password`:`text`,"aria-label":`${n.header}:自由回答`,value:n.options.length===0?r[n.id]??``:a[n.id]??``,maxLength:1e4,onChange:e=>n.options.length===0?i(t=>({...t,[n.id]:e.target.value})):o(t=>({...t,[n.id]:e.target.value})),placeholder:`输入你的回答`,autoComplete:`off`})]},n.id)),(0,W.jsx)(q,{type:`submit`,disabled:t||!s||!u,children:s?d?`确认选择`:`提交回答`:jw(e.status)})]}):(0,W.jsx)(`div`,{className:`action-options`,children:e.options.map(e=>(0,W.jsx)(q,{variant:/decline|cancel|reject|deny/i.test(e.id)?`secondary`:`default`,disabled:t||!s,onClick:()=>n({decision:e.id}),children:e.label},e.id))}),e.kind===`unsupported`&&(0,W.jsx)(`p`,{className:`inline-error`,children:`当前版本不支持此交互请求,未发送批准。请查看兼容性诊断。`})]})}var Rw={connecting:`正在连接`,connected:`实时连接正常`,disconnected:`连接已断开`,authenticationRequired:`需要重新登录`},zw={accepted:`网关已接受`,dispatching:`等待上游确认`,acknowledged:`上游已确认提交`,failed:`提交失败`,unknown:`提交结果待核对`};function Bw({connection:e}){return(0,W.jsxs)(`span`,{className:`connection-badge connection-${e}`,children:[(0,W.jsx)(`span`,{className:`status-dot`}),Rw[e]]})}function Vw({entry:e,thread:t,onReconcile:n,onDiscardMissing:r,busy:i,refreshing:a}){let[o,s]=(0,O.useState)(!1),[c,l]=(0,O.useState)(!1),u=e.operation?.execution,d=e.kind===`fork`,f=!!(t&&kl(t.status)&&u?.threadId===t.id),p=!!(!d&&t&&kl(t.status)&&e.target===t.id);return(0,W.jsxs)(`div`,{className:`operation-card`,children:[(0,W.jsxs)(`div`,{className:`operation-title`,children:[(0,W.jsx)(`strong`,{children:zw[e.status]}),(0,W.jsx)(`span`,{children:Tn(e.createdAt)})]}),(0,W.jsxs)(`dl`,{children:[(0,W.jsx)(`dt`,{children:`操作`}),(0,W.jsx)(`dd`,{children:e.kind}),(0,W.jsx)(`dt`,{children:`目标`}),(0,W.jsx)(`dd`,{children:e.target}),(0,W.jsx)(`dt`,{children:`操作 ID`}),(0,W.jsx)(`dd`,{children:e.clientOperationId}),u&&(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(`dt`,{children:`会话`}),(0,W.jsx)(`dd`,{children:u.threadId}),(0,W.jsx)(`dt`,{children:`工作区`}),(0,W.jsx)(`dd`,{children:u.workspaceKey}),(0,W.jsx)(`dt`,{children:`运行状态`}),(0,W.jsx)(`dd`,{children:u.ended?`已经结束`:`尚未确认终结`})]})]}),(e.lookupError?.message||e.error)&&(0,W.jsx)(`p`,{className:`inline-error`,role:`alert`,children:e.lookupError?.message??e.error}),An(e)&&(0,W.jsxs)(`div`,{className:`reconcile`,children:[(0,W.jsx)(`p`,{children:`请先检查会话历史、会话列表和原执行环境。清理仅移除此浏览器的待核对记录,不会停止任务或重新提交。`}),p?(0,W.jsx)(`p`,{children:`当前会话仍在执行,请等待结束或正常中断后再核对。`}):(0,W.jsxs)(W.Fragment,{children:[(0,W.jsxs)(`label`,{children:[(0,W.jsx)(`input`,{type:`checkbox`,checked:c,onChange:e=>l(e.target.checked)}),`我已检查历史和原执行环境,确认无需继续核对这笔提交`]}),(0,W.jsx)(q,{variant:`secondary`,size:`sm`,disabled:!c||i||a,onClick:()=>r(e.clientOperationId),children:`清除此浏览器的待核对记录`})]})]}),e.kind===`confirmCompatibility`&&e.status===`unknown`&&(0,W.jsx)(`p`,{className:`subtle`,children:`兼容性确认结果待核对,请刷新状态。此记录不代表任务执行,也不会自动重新提交。`}),e.kind!==`confirmCompatibility`&&Nn(e)&&!e.lookupError?.missing&&!e.operation?.reconciliation&&(0,W.jsxs)(`div`,{className:`reconcile`,children:[(0,W.jsx)(`p`,{children:d?`请先刷新会话列表,检查是否已生成包含原历史的新会话。核对此次 Fork 不会停止原任务或改变原任务的执行状态。`:`不会自动重发任务。先检查会话历史和原执行环境,再核对这笔提交。`}),f?(0,W.jsx)(`p`,{children:`当前任务仍在执行,请使用输入区的中断按钮。`}):(0,W.jsxs)(W.Fragment,{children:[(0,W.jsxs)(`label`,{children:[(0,W.jsx)(`input`,{type:`checkbox`,checked:o,onChange:e=>s(e.target.checked)}),d?`我已检查会话列表和历史,核实此次 Fork 的结果`:`我已核实对应旧运行已经结束`]}),(0,W.jsx)(q,{variant:`secondary`,size:`sm`,disabled:!o||i||a,onClick:()=>n(e.clientOperationId),children:i?`正在提交核对…`:d?`核对此次 Fork`:`核对并解除旧占用`})]})]}),e.operation?.reconciliation&&(0,W.jsxs)(`p`,{className:`subtle`,children:[`已于 `,Tn(e.operation.reconciliation.at),` `,d?`人工核对 Fork 结果。原任务状态不变。`:`人工核对旧运行结束。`,`保留原始提交状态。`]})]})}function Hw({system:e,connection:t,operations:n,thread:r,selectedId:i,threadReadFailed:a,onRefresh:o,onReconcile:s,onDiscardMissing:c,busy:l,open:u,onOpenChange:d,refreshing:f}){let p=(0,O.useRef)(null);return(0,O.useEffect)(()=>{u&&p.current?.focus()},[u]),(0,W.jsxs)(`details`,{className:`diagnostics`,open:u,onToggle:e=>d(e.currentTarget.open),children:[(0,W.jsxs)(`summary`,{children:[(0,W.jsx)(J,{name:`settings`,size:16}),`状态诊断`,n.length>0&&(0,W.jsx)(`span`,{className:`count-badge`,children:n.length})]}),(0,W.jsxs)(`div`,{className:`diagnostics-panel`,id:`diagnostics-panel`,ref:p,tabIndex:-1,role:`region`,"aria-label":`状态诊断详情`,"aria-busy":f,children:[(0,W.jsxs)(`div`,{className:`diagnostics-heading`,children:[(0,W.jsx)(`h2`,{children:`运行状态`}),(0,W.jsxs)(q,{variant:`ghost`,size:`sm`,disabled:f,onClick:o,children:[(0,W.jsx)(J,{name:`refresh`,size:14}),f?`正在核对…`:`刷新状态`]})]}),(0,W.jsxs)(`section`,{className:`operation-section`,"aria-label":`当前会话信息`,children:[(0,W.jsx)(`h3`,{children:`当前会话`}),(0,W.jsxs)(`dl`,{children:[(0,W.jsx)(`dt`,{children:`Thread ID`}),(0,W.jsx)(`dd`,{children:(0,W.jsx)(Ml,{id:r?.id===i?r?.id:void 0,placeholder:i?a?`会话详情加载失败`:`正在加载会话详情…`:`会话尚未创建`})})]})]}),(0,W.jsxs)(`section`,{className:`operation-section`,children:[(0,W.jsx)(`h3`,{children:`操作与状态核对`}),(0,W.jsx)(`p`,{className:`subtle`,role:`status`,children:f?`正在核对会话历史和提交回执…`:r?.status===`unknown`?`会话状态仍待核对。请检查操作记录和原执行环境。`:n.length>0?`请查看提交记录;核对不会自动重发任务。`:`没有待核对的提交。`}),n.map(e=>(0,W.jsx)(Vw,{entry:e,thread:r,onReconcile:s,onDiscardMissing:c,busy:l.includes(`reconcile:${e.clientOperationId}`)||l.includes(`${e.kind}:${e.target}`),refreshing:f},e.clientOperationId))]}),(0,W.jsxs)(`dl`,{children:[(0,W.jsx)(`dt`,{children:`网页连接`}),(0,W.jsx)(`dd`,{children:Rw[t]}),(0,W.jsx)(`dt`,{children:`Codex`}),(0,W.jsx)(`dd`,{children:e?.ready?`已就绪`:e?.connection===`starting`?`启动中`:`不可用`}),(0,W.jsx)(`dt`,{children:`账户认证`}),(0,W.jsx)(`dd`,{children:e?.authenticated===!0?`可用`:e?.authenticated===!1?`需要在本机登录 Codex`:`尚未确认`}),(0,W.jsx)(`dt`,{children:`运行版本`}),(0,W.jsx)(`dd`,{children:e?.codexVersion??`未检测到`}),(0,W.jsx)(`dt`,{children:`已验证版本`}),(0,W.jsx)(`dd`,{children:e?.verifiedVersion??`读取中`}),(0,W.jsx)(`dt`,{children:`兼容性`}),(0,W.jsx)(`dd`,{children:e?.compatibility===`verified`?`版本已验证`:e?.compatibility===`unverified`?e.compatibilityConfirmation===`confirmed`?`当前版本未经验证 · 已确认继续`:`当前版本未经验证 · 待确认`:`不可用`}),(0,W.jsx)(`dt`,{children:`入口认证`}),(0,W.jsx)(`dd`,{children:e?.authMode===`cloudflare-access`?`Cloudflare Access`:`本机模式`})]}),e?.error&&(0,W.jsx)(`p`,{className:`inline-error`,children:e.error}),e&&(0,W.jsxs)(`details`,{className:`raw-details`,children:[(0,W.jsx)(`summary`,{children:`已支持能力`}),(0,W.jsx)(`p`,{children:e.capabilities.join(` · `)||`暂无`})]})]})]})}async function Uw(e){let t=await fetch(`/api/threads/${encodeURIComponent(e)}/export`,{credentials:`same-origin`,cache:`no-store`,headers:{Accept:`text/markdown`},signal:AbortSignal.timeout(35e3)}),n=t.headers.get(`content-type`)??``;if(!t.ok||!n.includes(`text/markdown`)){if(n.includes(`application/json`)){let e=await t.json();throw new Le(t.status,e.error??{code:`EXPORT_FAILED`,message:`无法读取会话历史,未下载文件。`})}throw new Le(t.status===200?401:t.status,{code:`AUTH_REQUIRED`,message:`登录已过期或历史接口未返回 Markdown,请重新登录后重试。`})}let r=/filename="(codex-thread-[A-Za-z0-9_-]+\.md)"/.exec(t.headers.get(`content-disposition`)??``)?.[1];if(!r)throw Error(`导出响应缺少有效文件名,未下载文件。`);let i=t.headers.get(`x-export-completeness`);if(i!==`partial`&&i!==`saved-history`)throw Error(`导出响应缺少历史完整性说明,未下载文件。`);let a=await t.blob(),o=URL.createObjectURL(a),s=document.createElement(`a`);s.href=o,s.download=r,document.body.append(s);try{s.click()}finally{s.remove(),setTimeout(()=>URL.revokeObjectURL(o),1e3)}return{partial:i===`partial`}}function Ww(e){let{system:t}=e,n=(0,O.useRef)(null),[r,i]=(0,O.useState)(),[a,o]=(0,O.useState)(),s=Vn(t),c=Un(t,r,a);(0,O.useEffect)(()=>{e.onOpenChange?.(c)},[c,e.onOpenChange]),(0,O.useEffect)(()=>{let e=n.current;if(e)return c&&!e.open?e.showModal():!c&&e.open&&e.close(),()=>{e.open&&e.close()}},[c]);function l(){i(s),o(void 0)}return(0,W.jsxs)(W.Fragment,{children:[t?.compatibility===`unverified`&&(0,W.jsxs)(`div`,{className:`compatibility-banner compatibility-notice`,role:`status`,children:[(0,W.jsxs)(`span`,{children:[`当前 Codex `,t.codexVersion,` 尚未验证兼容性,部分功能可能无法正常使用。`,t.compatibilityConfirmation===`confirmed`?` 已确认继续;这不代表版本已验证。`:` 使用前需要确认。`]}),t.compatibilityConfirmation===`required`&&(0,W.jsx)(q,{variant:`ghost`,size:`sm`,onClick:()=>o(s),children:`查看兼容性提示`})]}),(0,W.jsxs)(`dialog`,{ref:n,className:`compatibility-dialog`,"aria-labelledby":`compatibility-title`,"aria-describedby":`compatibility-description`,onCancel:e=>{e.preventDefault(),l()},children:[(0,W.jsxs)(`div`,{className:`compatibility-dialog-heading`,children:[(0,W.jsx)(J,{name:`alert`,size:22}),(0,W.jsx)(`h2`,{id:`compatibility-title`,children:`Codex 版本兼容性未经验证`})]}),(0,W.jsx)(`p`,{id:`compatibility-description`,children:`当前运行的 Codex 版本尚未验证,部分功能可能无法正常使用。确认继续后仍将保留兼容性提示。`}),(0,W.jsxs)(`dl`,{children:[(0,W.jsx)(`dt`,{children:`运行版本`}),(0,W.jsx)(`dd`,{children:t?.codexVersion??`未检测到`}),(0,W.jsx)(`dt`,{children:`已验证版本`}),(0,W.jsx)(`dd`,{children:t?.verifiedVersion??`读取中`})]}),t?.ready?!e.canConfirm&&(0,W.jsx)(`p`,{className:`subtle`,role:`status`,children:`请等待连接和 Codex 认证恢复后再确认。`}):(0,W.jsx)(`p`,{className:`inline-error`,role:`status`,children:`Codex 当前不可用,无法确认继续。请关闭此提示后查看状态诊断。`}),e.error&&(0,W.jsx)(`p`,{className:`inline-error`,role:`alert`,children:e.error}),e.uncertain&&(0,W.jsxs)(`div`,{className:`compatibility-uncertain`,role:`status`,children:[(0,W.jsx)(`p`,{children:`确认请求的结果尚待核对。可刷新状态,或重新确认当前运行版本的使用许可;不会重发任务。`}),(0,W.jsx)(q,{variant:`secondary`,size:`sm`,onClick:e.onRefresh,children:`刷新确认状态`}),t?.ready&&(0,W.jsx)(q,{variant:`secondary`,size:`sm`,disabled:!e.canConfirm||e.submitting,onClick:e.onReconfirm,children:`重新确认`})]}),(0,W.jsx)(`p`,{className:`subtle`,children:`关闭提示后仍可查看诊断或中断当前任务。确认不会自动发送任务,未发送的草稿会保留。`}),(0,W.jsxs)(`div`,{className:`compatibility-dialog-actions`,children:[(0,W.jsx)(q,{variant:`secondary`,autoFocus:!0,onClick:l,children:`暂不使用`}),t?.ready&&(0,W.jsx)(q,{disabled:!e.canConfirm||e.submitting||e.uncertain,onClick:e.onConfirm,children:e.submitting?`正在确认…`:`确认继续`})]})]})]})}function Gw(e){let t=(0,O.useRef)(null),n=(0,O.useRef)(!1),[r,i]=(0,O.useState)(``),[a,o]=(0,O.useState)(e.project?.name??``),[s,c]=(0,O.useState)(!1),[l,u]=(0,O.useState)(!1),[d,f]=(0,O.useState)(),p=e.disabled||l,m=s?`移除项目`:e.project?`管理项目`:`添加服务器项目`;(0,O.useEffect)(()=>{let e=t.current;return e?.showModal(),()=>e?.close()},[]);async function h(){if(!(p||n.current)){n.current=!0,u(!0),f(void 0);try{e.project?s?await e.onRemove(e.project.id):await e.onRename(e.project.id,a.trim()):await e.onAdd({path:r.trim(),...a.trim()?{name:a.trim()}:{}}),e.onClose()}catch(e){f(En(e))}finally{n.current=!1,u(!1)}}}return(0,W.jsxs)(`dialog`,{ref:t,className:`project-dialog`,"aria-labelledby":`project-dialog-title`,"aria-describedby":`project-dialog-description`,onCancel:t=>{t.preventDefault(),l||e.onClose()},children:[(0,W.jsxs)(`div`,{className:`project-dialog-heading`,children:[(0,W.jsxs)(`div`,{children:[(0,W.jsx)(J,{name:`folder`,size:20}),(0,W.jsx)(`h2`,{id:`project-dialog-title`,children:m})]}),(0,W.jsx)(q,{variant:`ghost`,size:`icon`,"aria-label":`关闭项目管理`,disabled:l,onClick:e.onClose,children:(0,W.jsx)(J,{name:`close`,size:17})})]}),(0,W.jsxs)(`form`,{onSubmit:e=>{e.preventDefault(),h()},children:[s?(0,W.jsxs)(W.Fragment,{children:[(0,W.jsxs)(`p`,{id:`project-dialog-description`,children:[`确定从工作空间移除「`,e.project?.name,`」?`]}),(0,W.jsxs)(`div`,{className:`project-removal-note`,children:[(0,W.jsx)(`p`,{children:`只移除项目列表中的记录,服务器上的文件和会话历史都会保留。`}),(0,W.jsx)(`p`,{children:`之后重新添加同一目录,即可继续访问原有会话。进行中的任务或未确认的操作需要先处理完成。`})]})]}):(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(`p`,{id:`project-dialog-description`,children:e.project?`为项目设置便于识别的名称,或从工作空间移除项目。`:`添加运行 Codex Web UI 的服务器上已有的目录。添加后即可查看历史会话并开始工作。`}),e.project?(0,W.jsxs)(`div`,{className:`project-directory`,children:[(0,W.jsx)(`span`,{children:`服务器目录`}),(0,W.jsx)(`code`,{children:e.project.rootPath})]}):(0,W.jsxs)(`label`,{className:`project-field`,children:[(0,W.jsx)(`span`,{children:`服务器目录`}),(0,W.jsx)(`input`,{autoFocus:!0,required:!0,autoComplete:`off`,spellCheck:!1,placeholder:`/home/you/code/my-project`,value:r,onChange:e=>i(e.target.value),"aria-describedby":`project-path-help`,"aria-label":`服务器目录`,disabled:p}),(0,W.jsx)(`small`,{id:`project-path-help`,children:`填写服务器上的绝对路径,不是当前浏览器所在设备的目录。目录需要已存在,且服务有权访问。`})]}),(0,W.jsxs)(`label`,{className:`project-field`,children:[(0,W.jsx)(`span`,{children:e.project?`项目名称`:`项目名称(可选)`}),(0,W.jsx)(`input`,{autoFocus:!!e.project,required:!!e.project,maxLength:100,placeholder:`默认使用目录名称`,value:a,onChange:e=>o(e.target.value),disabled:p})]})]}),d&&(0,W.jsx)(`p`,{className:`inline-error project-dialog-error`,role:`alert`,children:d}),e.disabled&&(0,W.jsx)(`p`,{className:`subtle`,children:`登录已过期,请重新登录后管理项目。`}),(0,W.jsxs)(`div`,{className:`project-dialog-actions`,children:[e.project&&!s&&(0,W.jsx)(q,{className:`project-remove-button`,variant:`ghost`,disabled:p,onClick:()=>{f(void 0),c(!0)},children:`移除项目…`}),(0,W.jsx)(q,{variant:`secondary`,disabled:l,onClick:()=>{s?(f(void 0),c(!1)):e.onClose()},children:s?`返回`:`取消`}),(0,W.jsx)(q,{type:`submit`,variant:s?`destructive`:`default`,disabled:p||!s&&(e.project?!a.trim():!r.trim()),children:l?s?`正在移除…`:`正在保存…`:s?`确认移除`:e.project?`保存名称`:`添加项目`})]})]})]})}function Kw({notifications:e,onClose:t}){let n=(0,O.useRef)(null);(0,O.useEffect)(()=>{let e=n.current;return e?.showModal(),()=>e?.close()},[]);let{enabled:r,access:i,requesting:a,error:o}=e,s=r&&i===`granted`,c={default:`尚未授权`,granted:`已授权`,denied:`已被浏览器阻止`,unsupported:`当前浏览器不支持`,insecure:`需要安全连接`}[i],l=![`default`,`granted`].includes(i);return(0,W.jsxs)(`dialog`,{ref:n,className:`project-dialog notification-dialog`,"aria-labelledby":`notification-dialog-title`,onCancel:e=>{e.preventDefault(),t()},children:[(0,W.jsxs)(`div`,{className:`project-dialog-heading`,children:[(0,W.jsxs)(`div`,{children:[(0,W.jsx)(I,{size:20,"aria-hidden":`true`}),(0,W.jsx)(`h2`,{id:`notification-dialog-title`,children:`工作完成通知`})]}),(0,W.jsx)(q,{variant:`ghost`,size:`icon`,"aria-label":`关闭通知设置`,onClick:t,children:(0,W.jsx)(J,{name:`close`,size:17})})]}),(0,W.jsx)(`p`,{children:`每轮工作结束时显示项目、会话及结果,点击通知可返回对应会话。`}),(0,W.jsxs)(`div`,{className:`notification-control`,children:[(0,W.jsxs)(`div`,{children:[(0,W.jsx)(`strong`,{children:`浏览器通知`}),(0,W.jsxs)(`span`,{role:`status`,children:[c,` · `,s?`已开启`:`未开启`]})]}),(0,W.jsx)(q,{role:`switch`,"aria-label":`浏览器通知`,"aria-checked":s,"aria-describedby":`notification-permission-help`,variant:s?`secondary`:`default`,size:`sm`,disabled:a||l,onClick:()=>void e.toggle(),children:a?`等待授权…`:s?`关闭通知`:`启用通知`})]}),(0,W.jsx)(`p`,{id:`notification-permission-help`,className:`notification-help`,children:i===`denied`?`请在浏览器的站点设置中允许通知,再回到此页面开启。`:i===`insecure`?`请使用 HTTPS 访问。localhost 或 127.0.0.1 可用于本机访问。`:i===`unsupported`?`请使用支持系统通知的桌面浏览器。页内状态与未读提示仍然可用。`:`只有点击启用后才会请求授权。此设置在当前浏览器的本站标签页间共享。`}),r&&i===`granted`&&(0,W.jsx)(q,{variant:`secondary`,size:`sm`,onClick:e.test,children:`发送测试通知`}),o&&(0,W.jsx)(`p`,{className:`inline-error`,role:`alert`,children:o}),(0,W.jsxs)(`section`,{className:`notification-background`,"aria-labelledby":`notification-background-title`,children:[(0,W.jsx)(`h3`,{id:`notification-background-title`,children:`后台通知与页面休眠`}),(0,W.jsx)(`p`,{children:`请保持页面和浏览器运行。普通后台状态可接收通知;页面被冻结或被回收期间,无法保证及时通知。恢复页面后会同步结果与未读提示。`}),(0,W.jsxs)(`details`,{children:[(0,W.jsx)(`summary`,{children:`如何让本站保持活跃`}),(0,W.jsxs)(`ul`,{children:[(0,W.jsxs)(`li`,{children:[`Chrome:设置 → 性能 → 始终保持这些网站活跃,添加本站。`,(0,W.jsx)(`a`,{href:`https://support.google.com/chrome/answer/12929150?hl=zh-Hans`,target:`_blank`,rel:`noreferrer`,children:`设置说明`})]}),(0,W.jsxs)(`li`,{children:[`Edge:设置 → 系统和性能 → 性能 → 始终保持这些网站活跃(或「从不将这些网站置于睡眠状态」),添加本站。`,(0,W.jsx)(`a`,{href:`https://support.microsoft.com/edge/learn-about-performance-features-in-microsoft-edge`,target:`_blank`,rel:`noreferrer`,children:`设置说明`})]})]}),(0,W.jsx)(`p`,{children:`需要在浏览器中手动设置,具体名称可能随版本变化。`})]})]})]})}var qw=1048576,Jw=e=>`0.0009765625–${e} MiB(最小 1 KiB)`;function Yw(e,t,n,r){return{key:e,label:`${t}(MiB)`,group:`advanced`,unit:`MiB`,maxMiB:n,help:`范围 ${Jw(n)},默认 ${r} MiB。支持精确对应整数字节的小数;1 MiB = 1024 × 1024 字节。`}}var Xw=e=>(e/qw).toFixed(20).replace(/\.?0+$/,``),Zw=[{key:`host`,label:`监听地址`,group:`network`,help:`本机模式使用 127.0.0.1、localhost 或 ::1。`},{key:`port`,label:`监听端口`,group:`network`,type:`number`,help:`范围 1–65535;修改后使用新端口访问。`},{key:`publicOrigin`,label:`允许访问地址`,group:`network`,multiline:!0,help:`每行一个完整的 HTTP(S) 地址,仅包含协议、主机和端口。`},{key:`issuer`,label:`Access 团队地址`,group:`network`,help:`例如 https://your-team.cloudflareaccess.com`},{key:`audience`,label:`Access 应用 AUD`,group:`network`,help:`填写 Cloudflare Access 应用的 Audience。`},{key:`binary`,label:`Codex 可执行文件`,group:`codex`,help:`可填写 codex 或服务器上的绝对路径。`},{key:`home`,label:`CODEX_HOME(可选)`,group:`codex`,help:`留空继承服务进程环境;指定时必须填写服务器上的绝对路径。`},{key:`requestTimeoutMs`,label:`请求超时(毫秒)`,group:`codex`,type:`number`,help:`范围 100–300000,默认 30000。`},Yw(`maxLineBytes`,`Codex 单行消息上限`,256,64),Yw(`eventBytes`,`事件缓冲上限`,64,16),Yw(`wsBytes`,`WebSocket 缓冲上限`,16,4),Yw(`itemBytes`,`单项内容上限`,8,2),{key:`developmentOrigins`,label:`开发环境来源`,group:`advanced`,multiline:!0,help:`每行一个本机 HTTP(S) 来源,仅在 --dev 模式使用。`}];function Qw(e){return{host:e.host,port:String(e.port),publicOrigin:e.publicOrigin.join(`
84
84
  `),developmentOrigins:e.developmentOrigins.join(`
85
85
  `),mode:e.auth.mode,issuer:e.auth.mode===`cloudflare-access`?e.auth.issuer:``,audience:e.auth.mode===`cloudflare-access`?e.auth.audience:``,binary:e.codex.binary,home:e.codex.home??``,requestTimeoutMs:String(e.codex.requestTimeoutMs),maxLineBytes:Xw(e.codex.maxLineBytes),eventBytes:Xw(e.limits.eventBytes),wsBytes:Xw(e.limits.wsBytes),itemBytes:Xw(e.limits.itemBytes)}}var $w=e=>e.split(`
86
- `).map(e=>e.trim()).filter(Boolean),eT=Zw.filter(e=>`unit`in e);function tT(e,t){let n=e=>({bytes:NaN,error:`${t.label}:${e}`}),r=e.trim();if(!r)return n(`请输入 MiB 数值。`);if(!/^[+-]?(?:\d+(?:\.\d*)?|\.\d+)$/.test(r)||!Number.isFinite(Number(r)))return n(`请输入有效的 MiB 数值,可使用小数。`);if(Number(r)<1/1024||Number(r)>t.maxMiB)return n(`范围为 ${Jw(t.maxMiB)}。`);let[i,a=``]=r.replace(/^\+/,``).split(`.`),o=a.replace(/0+$/,``),s=()=>n(`MiB 数值必须精确对应整数字节,请调整小数(不会自动舍入)。`);if(o.length>20)return s();let c=10n**BigInt(o.length),l=(BigInt(i||`0`)*c+BigInt(o||`0`))*BigInt(qw);return l<1024n*c||l>BigInt(t.maxMiB*qw)*c?n(`范围为 ${Jw(t.maxMiB)}。`):l%c===0n?{bytes:Number(l/c)}:s()}function nT(e){return Object.fromEntries(eT.flatMap(t=>{let{error:n}=tT(e[t.key],t);return n?[[t.key,n]]:[]}))}function rT(e,t){return`unit`in e?`${t} ${e.unit}`:t}function iT(e,t){let n=Object.fromEntries(eT.map(t=>[t.key,tT(e[t.key],t).bytes]));return{...t,host:e.host.trim(),port:Number(e.port),publicOrigin:$w(e.publicOrigin),developmentOrigins:$w(e.developmentOrigins),auth:e.mode===`local`?{mode:`local`}:{mode:e.mode,issuer:e.issuer.trim(),audience:e.audience.trim()},codex:{binary:e.binary.trim(),...e.home.trim()?{home:e.home.trim()}:{},requestTimeoutMs:Number(e.requestTimeoutMs),maxLineBytes:n.maxLineBytes},limits:{eventBytes:n.eventBytes,wsBytes:n.wsBytes,itemBytes:n.itemBytes}}}function aT(e,t){let n=Qw(e),r=Qw(t);return[...n.mode===r.mode?[]:[{label:`认证模式`,before:n.mode,after:r.mode}],...Zw.filter(e=>!([`issuer`,`audience`].includes(e.key)&&r.mode===`local`)&&n[e.key]!==r[e.key]).map(e=>({label:e.label,before:rT(e,n[e.key]),after:rT(e,r[e.key])}))]}var oT=e=>e instanceof Error?e.message:`操作失败,请重试。`;function sT({onClose:e}){let t=(0,O.useRef)(null),n=(0,O.useRef)(null),[r,i]=(0,O.useState)(),[a,o]=(0,O.useState)(),[s,c]=(0,O.useState)(),[l,u]=(0,O.useState)(),[d,f]=(0,O.useState)(!0),[p,m]=(0,O.useState)(``),[h,g]=(0,O.useState)(``),[_,v]=(0,O.useState)({}),[y,b]=(0,O.useState)(!1),[x,S]=(0,O.useState)(!1),C=!!r&&!!a&&JSON.stringify(iT(a,r.saved))!==JSON.stringify(r.saved);(0,O.useEffect)(()=>{t.current?.showModal();let e=new AbortController;return ze.gatewayConfig().then(t=>{e.signal.aborted||(i(t),o(Qw(t.saved)))}).catch(t=>{e.signal.aborted||m(oT(t))}).finally(()=>{e.signal.aborted||f(!1)}),()=>{e.abort(),t.current?.close()}},[]),(0,O.useEffect)(()=>{let e=e=>{C&&e.preventDefault()};return window.addEventListener(`beforeunload`,e),()=>window.removeEventListener(`beforeunload`,e)},[C]);let w=()=>{d||(C||l?S(!0):e())};async function T(e){f(!0),m(``),g(``);try{await e()}catch(e){m(oT(e)),e instanceof Le&&e.problem.code===`CONFIG_CONFLICT`&&b(!0)}finally{f(!1)}}async function E(){await T(async()=>{let e=await ze.gatewayConfig();i(e),o(Qw(e.saved)),v({}),c(void 0),u(void 0),b(!1)})}async function D(e){let t=e.target.files?.[0];e.target.value=``,t&&await T(async()=>{if(t.size>262144)throw Error(`配置文件不能超过 256 KiB。`);let e;try{e=JSON.parse(await t.text())}catch{throw Error(`无法解析 JSON,请检查配置文件格式。`)}u(await ze.importGatewayConfig(e)),c(void 0)})}async function k(){await T(async()=>{let e=await ze.exportGatewayConfig(),t=URL.createObjectURL(new Blob([`${JSON.stringify(e,null,2)}\n`],{type:`application/json`})),n=document.createElement(`a`);n.href=t,n.download=`codex-web-config.json`,document.body.append(n),n.click(),n.remove(),setTimeout(()=>URL.revokeObjectURL(t),1e3),g(`已导出配置文件中的已保存配置;未保存的编辑不包含在内。`)})}let A=r&&Qw(r.running),j=l?.config??s,M=r&&j?aT(r.saved,j):[];function N(e){if(!a||!A||[`issuer`,`audience`].includes(e.key)&&a.mode!==`cloudflare-access`)return null;let t={id:`gateway-${e.key}`,"aria-labelledby":`gateway-${e.key}-label`,"aria-describedby":`gateway-${e.key}-help${_[e.key]?` gateway-${e.key}-error`:``}`,"aria-invalid":!!_[e.key],value:a[e.key],disabled:d||!r?.writable,onChange:t=>{o({...a,[e.key]:t.target.value}),v(t=>({...t,[e.key]:void 0})),g(``)}};return(0,W.jsxs)(`label`,{className:`project-field`,htmlFor:t.id,children:[(0,W.jsx)(`span`,{id:`gateway-${e.key}-label`,children:e.label}),`multiline`in e?(0,W.jsx)(`textarea`,{...t,rows:3,spellCheck:!1}):(0,W.jsx)(`input`,{...t,type:`type`in e?e.type:`text`,inputMode:`unit`in e?`decimal`:void 0,spellCheck:!1}),(0,W.jsx)(`small`,{id:`gateway-${e.key}-help`,children:e.help}),_[e.key]&&(0,W.jsx)(`small`,{id:`gateway-${e.key}-error`,className:`gateway-error`,role:`alert`,children:_[e.key]}),a[e.key]!==A[e.key]&&(0,W.jsxs)(`small`,{className:`gateway-running`,children:[`当前运行:`,rT(e,A[e.key])||`未设置`]})]},e.key)}return(0,W.jsxs)(`dialog`,{ref:t,className:`project-dialog gateway-dialog`,"aria-labelledby":`gateway-title`,onCancel:e=>{e.preventDefault(),w()},children:[(0,W.jsxs)(`div`,{className:`project-dialog-heading`,children:[(0,W.jsxs)(`div`,{children:[(0,W.jsx)(be,{size:20,"aria-hidden":`true`}),(0,W.jsx)(`h2`,{id:`gateway-title`,children:`服务配置`})]}),(0,W.jsx)(q,{variant:`ghost`,size:`icon`,"aria-label":`关闭服务配置`,disabled:d,onClick:w,children:(0,W.jsx)(J,{name:`close`,size:17})})]}),(0,W.jsx)(`p`,{className:`gateway-intro`,children:`配置运行此网页服务的电脑。保存后需手动重启服务生效。`}),p&&(0,W.jsx)(`p`,{className:`gateway-error`,role:`alert`,children:p}),!r&&(0,W.jsx)(q,{variant:`secondary`,disabled:d,onClick:()=>void E(),children:d?`正在读取配置…`:`重新读取配置`}),r&&a&&(0,W.jsxs)(W.Fragment,{children:[(0,W.jsxs)(`div`,{className:`gateway-file`,children:[(0,W.jsx)(`span`,{children:`配置文件`}),(0,W.jsx)(`code`,{children:r.path})]}),(0,W.jsxs)(`div`,{className:`gateway-status`,role:`status`,"data-pending":r.restartRequired,children:[(0,W.jsx)(`strong`,{children:r.restartRequired?`已保存,待重启生效`:`已保存配置与当前运行配置一致`}),(0,W.jsx)(`span`,{children:`保存不会重启服务或中断当前任务。`})]}),!r.writable&&(0,W.jsx)(`p`,{className:`gateway-error`,children:r.readOnlyReason}),h&&(0,W.jsx)(`p`,{className:`gateway-notice`,role:`status`,children:h}),y&&(0,W.jsxs)(`div`,{className:`gateway-conflict`,children:[(0,W.jsx)(`p`,{children:`重新读取会丢弃当前编辑,并载入文件的最新内容。`}),(0,W.jsx)(q,{variant:`secondary`,disabled:d,onClick:()=>void E(),children:`丢弃编辑并重新读取`})]}),x?(0,W.jsxs)(`section`,{className:`gateway-review`,"aria-label":`放弃编辑确认`,children:[(0,W.jsx)(`h3`,{children:`放弃未保存的更改?`}),(0,W.jsx)(`p`,{children:`配置文件尚未修改。`}),(0,W.jsxs)(`div`,{className:`project-dialog-actions`,children:[(0,W.jsx)(q,{variant:`secondary`,onClick:()=>S(!1),children:`继续编辑`}),(0,W.jsx)(q,{variant:`destructive`,onClick:e,children:`放弃更改并关闭`})]})]}):j?(0,W.jsxs)(`section`,{className:`gateway-review`,"aria-label":l?`导入配置预览`:`保存配置预览`,children:[(0,W.jsx)(`h3`,{children:l?`预览导入配置`:`确认配置更改`}),(0,W.jsx)(`p`,{children:l?`应用到表单后仍需检查并保存,才会修改配置文件。导入将替换当前表单中的可编辑配置。`:`以下更改将在服务重启后生效。请确认新的访问地址和认证配置。`}),l&&(0,W.jsxs)(`p`,{children:[`保留当前数据目录和项目初始配置。`,l.preserved.length>0?`已忽略导入文件中的 ${l.preserved.join(`、`)}。`:``]}),M.length?(0,W.jsx)(`div`,{className:`gateway-changes`,children:M.map(e=>(0,W.jsxs)(`div`,{children:[(0,W.jsx)(`strong`,{children:e.label}),(0,W.jsxs)(`span`,{children:[`已保存:`,e.before||`未设置`]}),(0,W.jsxs)(`span`,{children:[`更改为:`,e.after||`未设置`]})]},e.label))}):(0,W.jsx)(`p`,{children:`与已保存配置没有差异。`}),(0,W.jsxs)(`details`,{className:`gateway-json`,children:[(0,W.jsx)(`summary`,{children:`查看完整 JSON`}),(0,W.jsx)(`pre`,{children:JSON.stringify(j,null,2)})]}),(0,W.jsxs)(`div`,{className:`project-dialog-actions`,children:[(0,W.jsx)(q,{variant:`secondary`,disabled:d,onClick:()=>{u(void 0),c(void 0)},children:`返回编辑`}),l?(0,W.jsx)(q,{disabled:d,onClick:()=>{o(Qw(l.config)),v({}),u(void 0),g(`导入配置已应用到表单,尚未保存。`)},children:`应用到表单`}):(0,W.jsx)(q,{disabled:d||y||!M.length,onClick:()=>void T(async()=>{let e=await ze.saveGatewayConfig(r.revision,j);i(e),o(Qw(e.saved)),c(void 0),g(e.restartRequired?`配置已保存。请在方便时手动重启服务。`:`配置已保存,与当前运行配置一致。`)}),children:d?`正在保存…`:`确认保存`})]})]}):(0,W.jsxs)(W.Fragment,{children:[(0,W.jsxs)(`div`,{className:`gateway-tools`,children:[(0,W.jsxs)(q,{variant:`secondary`,size:`sm`,disabled:d||!r.writable,onClick:()=>n.current?.click(),children:[(0,W.jsx)(we,{size:15,"aria-hidden":`true`}),`导入配置`]}),(0,W.jsxs)(q,{variant:`secondary`,size:`sm`,disabled:d,onClick:()=>void k(),children:[(0,W.jsx)(le,{size:15,"aria-hidden":`true`}),`导出已保存配置`]}),(0,W.jsx)(`input`,{ref:n,type:`file`,accept:`.json,application/json`,"aria-label":`选择配置文件`,hidden:!0,onChange:e=>void D(e)})]}),(0,W.jsx)(`p`,{className:`gateway-help`,children:`导入仅更新服务设置;导出包含文件中的项目初始配置,不包含页面注册项目、会话、数据库或登录凭据。`}),(0,W.jsxs)(`form`,{onSubmit:e=>{e.preventDefault();let t=nT(a);v(t);let n=Zw.find(e=>t[e.key]);n?requestAnimationFrame(()=>{let e=document.getElementById(`gateway-${n.key}`);e?.closest(`details`)?.setAttribute(`open`,``),e?.focus({preventScroll:!0}),e?.closest(`label`)?.scrollIntoView({block:`center`})}):T(async()=>{c((await ze.importGatewayConfig(iT(a,r.saved))).config)})},children:[(0,W.jsxs)(`fieldset`,{disabled:d||!r.writable,children:[(0,W.jsxs)(`section`,{className:`gateway-section`,children:[(0,W.jsx)(`h3`,{children:`网络与访问`}),(0,W.jsxs)(`div`,{className:`gateway-fields`,children:[Zw.filter(e=>e.group===`network`).map(N),(0,W.jsxs)(`label`,{className:`project-field`,children:[(0,W.jsx)(`span`,{children:`认证模式`}),(0,W.jsxs)(`select`,{"aria-label":`认证模式`,value:a.mode,onChange:e=>o({...a,mode:e.target.value}),children:[(0,W.jsx)(`option`,{value:`local`,children:`本机 / Tailscale(local)`}),(0,W.jsx)(`option`,{value:`cloudflare-access`,children:`Cloudflare Access`})]}),(0,W.jsx)(`small`,{children:`本机模式仅监听回环地址;公开互联网入口使用 Cloudflare Access。`}),a.mode!==A?.mode&&(0,W.jsxs)(`small`,{className:`gateway-running`,children:[`当前运行:`,A?.mode]})]})]})]}),(0,W.jsxs)(`section`,{className:`gateway-section`,children:[(0,W.jsx)(`h3`,{children:`Codex`}),(0,W.jsx)(`div`,{className:`gateway-fields`,children:Zw.filter(e=>e.group===`codex`).map(N)})]}),(0,W.jsxs)(`section`,{className:`gateway-section`,children:[(0,W.jsx)(`h3`,{children:`数据与项目`}),(0,W.jsxs)(`div`,{className:`gateway-file`,children:[(0,W.jsx)(`span`,{children:`数据目录(只读)`}),(0,W.jsx)(`code`,{children:r.saved.dataDir}),(0,W.jsx)(`span`,{children:`当前运行目录`}),(0,W.jsx)(`code`,{children:r.running.dataDir})]}),(0,W.jsx)(`p`,{className:`gateway-help`,children:`数据目录变更需要迁移数据库,请在服务停止后处理。项目请在侧栏添加、重命名或移除;此处不覆盖已保存的项目管理结果。`})]}),(0,W.jsxs)(`details`,{className:`gateway-section`,children:[(0,W.jsx)(`summary`,{children:`高级设置`}),(0,W.jsx)(`div`,{className:`gateway-fields`,children:Zw.filter(e=>e.group===`advanced`).map(N)})]})]}),(0,W.jsxs)(`div`,{className:`gateway-save-bar`,children:[(0,W.jsx)(`span`,{children:C?`有未保存的更改`:`没有未保存的更改`}),(0,W.jsx)(q,{type:`submit`,disabled:d||!C||!r.writable||y,children:d?`正在校验…`:`检查更改`})]})]})]})]})]})}var cT=[`stable`,`beta`,`dev`],lT=e=>!!(e&&[`installing`,`waiting`,`stopping`,`verifying`].includes(e.phase)),uT={stable:`稳定版`,beta:`预览版`,dev:`开发版`},dT={installing:`正在安装候选版本`,waiting:`等待任务空闲`,stopping:`正在备份并重启`,verifying:`正在验证新版`,succeeded:`升级成功`,rolledBack:`已恢复上一版本`,failed:`升级失败`},fT={verified:`已验证`,unverified:`尚未验证`,unsupported:`明确不支持`,unknown:`无法确认`};function pT({title:e,value:t}){return(0,W.jsxs)(`section`,{className:`update-codex`,"aria-label":e,"data-state":t.status,children:[(0,W.jsx)(`h3`,{children:e}),(0,W.jsxs)(`div`,{children:[(0,W.jsx)(`span`,{children:`Codex CLI`}),(0,W.jsx)(`strong`,{children:t.version??`未识别`}),(0,W.jsx)(`span`,{className:`update-codex-status`,children:fT[t.status]})]}),t.manifest&&(0,W.jsxs)(`p`,{className:`subtle`,children:[`推荐:`,t.manifest.recommended,` · 已验证:`,t.manifest.verified.join(`、`)]}),t.reason&&(0,W.jsx)(`p`,{children:t.reason})]})}function mT({updates:e,onClose:t}){let n=(0,O.useRef)(null),{status:r,busy:i,error:a,reloadError:o}=e,[s,c]=(0,O.useState)(),l=s??r?.settings.channel??`stable`,[u,d]=(0,O.useState)(!1),f=r?.available?.channel===l?r.available:void 0,p=lT(r?.run),m=f?.version===r?.version,[h,g]=(0,O.useState)(),_=JSON.stringify([l,f?.version,f?.codex]),v=h===_,y=f?.codex,b=!m&&y?.status===`unverified`,x=!m&&f&&(!y||y.status===`unknown`||y.status===`unsupported`||b&&!v);return(0,O.useEffect)(()=>{g(void 0)},[_]),(0,O.useEffect)(()=>{let e=n.current;return e?.showModal(),()=>e?.close()},[]),(0,W.jsxs)(`dialog`,{ref:n,className:`project-dialog update-dialog`,"aria-labelledby":`update-title`,onCancel:e=>{e.preventDefault(),t()},children:[(0,W.jsxs)(`div`,{className:`project-dialog-heading`,children:[(0,W.jsxs)(`div`,{children:[(0,W.jsx)(ae,{size:20,"aria-hidden":`true`}),(0,W.jsx)(`h2`,{id:`update-title`,children:`Covro 更新`})]}),(0,W.jsx)(q,{variant:`ghost`,size:`icon`,"aria-label":`关闭更新设置`,onClick:t,children:(0,W.jsx)(J,{name:`close`,size:17})})]}),(0,W.jsxs)(`div`,{className:`update-version`,children:[(0,W.jsx)(`span`,{children:`当前 Covro`}),(0,W.jsx)(`strong`,{children:r?.version??`读取中…`}),r?.commit&&(0,W.jsx)(`code`,{children:r.commit.slice(0,8)})]}),r?.codex&&(0,W.jsx)(pT,{title:`当前 Codex`,value:r.codex}),(0,W.jsxs)(`label`,{className:`update-channel`,children:[`版本渠道`,(0,W.jsx)(`select`,{"aria-label":`版本渠道`,value:l,disabled:i||p,onChange:t=>{let n=t.target.value;c(n),d(!1),g(void 0),e.check(n)},children:cT.map(e=>(0,W.jsx)(`option`,{value:e,children:uT[e]},e))})]}),(0,W.jsx)(`p`,{className:`subtle`,children:l===`stable`?`经过验证的正式版本,适合日常使用。`:l===`beta`?`提前体验准备发布的功能。`:`跟随通过检查的 main 提交,适合开发者体验和验证新功能。`}),(0,W.jsxs)(`div`,{className:`update-control`,children:[(0,W.jsxs)(`div`,{children:[(0,W.jsx)(`strong`,{children:`空闲时自动升级`}),(0,W.jsx)(`p`,{className:`subtle`,children:`定期检查当前渠道,已验证的 Codex 组合在任务结束后安装并重启。`})]}),(0,W.jsx)(q,{role:`switch`,"aria-label":`空闲时自动升级`,"aria-checked":r?.settings.automatic??!1,variant:`secondary`,size:`sm`,disabled:i||p||!r?.supported,onClick:()=>r&&void e.configure({...r.settings,automatic:!r.settings.automatic}),children:r?.settings.automatic?`已开启`:`已关闭`})]}),r&&l!==r.settings.channel&&(0,W.jsxs)(`p`,{className:`subtle`,children:[`当前订阅:`,uT[r.settings.channel],`。成功更新后切换到`,uT[l],`。`]}),f&&(0,W.jsxs)(`div`,{className:`update-available`,children:[(0,W.jsx)(`span`,{children:m?`此渠道已是当前版本`:f.downgrade?`目标版本`:`可用版本`}),(0,W.jsx)(`strong`,{children:f.version}),f.commit&&(0,W.jsx)(`code`,{children:f.commit.slice(0,8)})]}),f?.codex&&(0,W.jsx)(pT,{title:`目标版本兼容性`,value:f.codex}),b&&(0,W.jsxs)(`label`,{className:`update-downgrade update-codex-consent`,children:[(0,W.jsx)(`input`,{type:`checkbox`,"aria-label":`允许尝试未验证的 Codex 组合`,checked:v,disabled:i||p,onChange:e=>g(e.target.checked?_:void 0)}),`我确认尝试 Codex `,y?.version,` 与 Covro `,f?.version,` `,`的未验证组合;此确认仅用于本次升级。`]}),f&&!m&&f.channel===r?.settings.channel&&r.settings.automatic&&y?.status!==`verified`&&(0,W.jsx)(`p`,{className:`update-notice`,role:`status`,children:y?.status===`unverified`?`自动升级已暂停。可以调整 Codex 版本后重新检查,或勾选确认后手动尝试。`:`自动升级已暂停。请先恢复 Codex 连接、调整版本或等待含有效兼容声明的发行版,再重新检查。`}),(0,W.jsxs)(`div`,{className:`update-buttons`,children:[(0,W.jsx)(q,{variant:`secondary`,disabled:i||p,onClick:()=>void e.check(l),children:i?`正在处理…`:`检查更新`}),(0,W.jsx)(q,{disabled:i||p||!f||!r?.supported||!!x||f.downgrade&&!u||m&&l===r.settings.channel,onClick:()=>void e.start(l,u,b&&v&&f?.codex.version?{version:f.codex.version,target:f.version}:void 0),children:m?`使用此渠道`:f?.downgrade?`切换并重启`:`升级并重启`})]}),f?.downgrade&&(0,W.jsxs)(`label`,{className:`update-downgrade`,children:[(0,W.jsx)(`input`,{type:`checkbox`,checked:u,onChange:e=>d(e.target.checked)}),`允许降级;数据库不兼容时仍会阻止切换`]}),r?.run&&(0,W.jsxs)(`section`,{className:`update-progress`,"data-phase":r.run.phase,role:`status`,children:[(0,W.jsx)(`strong`,{children:dT[r.run.phase]}),(0,W.jsxs)(`span`,{children:[r.run.from,` → `,r.run.target]}),(0,W.jsx)(`p`,{children:r.run.message}),p&&(0,W.jsx)(`progress`,{"aria-label":`升级进度`})]}),(a||r?.checkError||o)&&(0,W.jsx)(`p`,{className:`inline-error`,role:`alert`,children:o??a??r?.checkError}),!r?.supported&&r?.unsupportedReason&&(0,W.jsx)(`p`,{className:`update-notice`,children:r.unsupportedReason}),(0,W.jsxs)(`p`,{className:`update-source`,children:[`版本来源:npm 官方 registry · `,l===`stable`?`latest`:l,(0,W.jsxs)(`a`,{href:`https://github.com/yuzheng14/codex-web-ui/releases`,target:`_blank`,rel:`noreferrer`,children:[`更新记录 `,(0,W.jsx)(de,{size:12,"aria-hidden":`true`})]})]}),(0,W.jsx)(`p`,{className:`subtle`,children:`升级保留配置、项目和会话记录。页面关闭也会继续处理,重启后自动恢复连接。`})]})}function hT(e,t){let n=new Map(t.map(e=>[e.id,e])),r=new Set(e.map(e=>e.id));return[...e.map(e=>n.get(e.id)??e),...t.filter(e=>!r.has(e.id))]}var gT=class{latest;chunks=[];constructor(e){this.latest=e}update(e){this.latest=e,(!e.history||e.history.olderCursor===null)&&(this.chunks.length=0)}get cursor(){return(this.chunks.length?this.chunks.at(-1).page:this.latest).history?.olderCursor??null}append(e,t){if(t.id!==this.latest.id||t.projectId!==this.latest.projectId)throw Error(`历史分片不属于当前会话。`);if(!(this.cursor!==e||this.chunks.some(t=>t.cursor===e))){if(t.history?.olderCursor&&(t.history.olderCursor===e||this.chunks.some(e=>e.cursor===t.history.olderCursor)))throw Error(`历史分页未前进,请重试同步会话。`);this.chunks.push({cursor:e,page:t})}}replace(e,t){let n=this.chunks.findIndex(t=>t.cursor===e);if(n<0)return this.append(e,t);if(t.id!==this.latest.id||t.projectId!==this.latest.projectId)throw Error(`历史分片不属于当前会话。`);let r=this.chunks[n];this.chunks[n]={cursor:e,page:t},r.page.history?.olderCursor!==t.history?.olderCursor&&this.chunks.splice(n+1)}getHistoryCursor(e){let t=t=>t.turns.some(t=>t.id===e||t.items.some(t=>t.id===e));if(!t(this.latest))return this.chunks.find(e=>t(e.page))?.cursor}get view(){let e=[];for(let t of this.chunks.slice().reverse())e=hT(e,t.page.turns);return{...this.latest,turns:hT(e,this.latest.turns),history:{olderCursor:this.cursor}}}};function _T(e){return{...e,managed:!1,status:`unknown`,actions:[],execution:void 0,resumeError:void 0,runtimeSettings:void 0,turns:e.turns.map(e=>({...e,status:[`running`,`waitingApproval`,`waitingInput`].includes(e.status)?`unknown`:e.status,reconnect:void 0,items:e.items.map(e=>({...e,status:[`running`,`inProgress`].includes(e.status??``)?`unknown`:e.status}))}))}}var vT=new or,yT=(e,t,n,r=`latest`)=>JSON.stringify([e,t,n,r]),bT=class{scope;constructor(e){this.scope=e}async read(e,t,n){let r=await vT.read(yT(this.scope,e,t,n));if(r&&r.id===t&&r.projectId===e&&Array.isArray(r.turns))try{return _T(r)}catch{return}}write(e,t){return vT.write(yT(this.scope,e.projectId,e.id,t),_T(e))}remove(e,t){return vT.remove(([n,r,i])=>n===this.scope&&r===e&&i===t)}};function xT(e,t,n){let{projectId:r,scope:i,forbidden:a}=n,o=(0,O.useMemo)(()=>i?new bT(i):void 0,[i]),s=(0,O.useRef)(void 0),c=(0,O.useRef)(void 0),l=(0,O.useRef)(!1),u=(0,O.useRef)(new Set),d=(0,O.useRef)(!1),f=(0,O.useRef)(void 0),p=(0,O.useRef)(void 0),[m,h]=(0,O.useState)({loading:!1,cached:!1}),g=(0,O.useCallback)((e=!1)=>{h({id:s.current?.latest.id,scope:i,thread:s.current?.view,loading:e,cached:l.current||u.current.size>0,cacheExhausted:d.current,error:p.current})},[i]);(0,O.useEffect)(()=>{c.current?.abort(),c.current=void 0,s.current=void 0,l.current=!1,u.current.clear(),d.current=!1,f.current=void 0,p.current=void 0,h({id:t,scope:i,loading:!1,cached:!1});let e=!0;return t&&!a&&o?.read(r,t).then(t=>{e&&t&&!s.current&&(s.current=new gT(t),l.current=!0,g())}),t&&a&&o?.remove(r,t),()=>{e=!1,c.current?.abort()}},[t,r,o,i,a,g]),(0,O.useEffect)(()=>{e&&e.id===t&&!a&&(s.current?.latest.id===e.id?s.current.update(e):s.current=new gT(e),l.current=!1,s.current.chunks.length||u.current.clear(),g(!!c.current))},[e,t,i,a,g]),(0,O.useEffect)(()=>{if(!e||a||e.id!==t)return;let n=setTimeout(()=>{o?.write(e)},e.status===`running`?750:0);return()=>clearTimeout(n)},[e,t,o,a]);let _=(0,O.useCallback)(async()=>{let e=s.current,t=f.current??e?.cursor;if(!e||!t||c.current||a)return;let n=new AbortController;c.current=n,p.current=void 0,g(!0);try{let i=await o?.read(r,e.latest.id,t);if(n.signal.aborted||s.current!==e)return;i&&e.cursor===t&&(e.append(t,i),u.current.add(t),g(!0));let a=AbortSignal.any([n.signal,AbortSignal.timeout(35e3)]);for(;t;){let r=await ze.threadHistory(e.latest.id,t,a);if(n.signal.aborted||s.current!==e)return;e.replace(t,r),u.current.delete(t);for(let t of u.current)e.chunks.some(e=>e.cursor===t)||u.current.delete(t);f.current=void 0,d.current=!1,o?.write(r,t),t=u.current.values().next().value,g(!!t)}}catch(i){!n.signal.aborted&&s.current===e&&(f.current=t,p.current=En(i),i instanceof Le&&[401,403,404].includes(i.status)&&(o?.remove(r,e.latest.id),s.current=void 0),g())}finally{c.current===n&&(c.current=void 0)}},[g,o,r,a]),v=(0,O.useCallback)(async()=>{let e=s.current,t=e?.cursor;if(!e||!t||!o||c.current||a)return;let n=new AbortController;c.current=n,g(!0);try{let i=await o.read(r,e.latest.id,t);if(n.signal.aborted||s.current!==e)return;i?(e.append(t,i),u.current.add(t)):d.current=!0,g()}finally{c.current===n&&(c.current=void 0)}},[o,r,a,g]),y=(0,O.useCallback)(e=>s.current?.getHistoryCursor(e),[]),b=!a&&m.id===t&&m.scope===i;return{...m,cached:b&&m.cached,loading:b&&m.loading,error:b?m.error:void 0,thread:b?m.thread:void 0,loadOlder:_,loadCachedOlder:v,getHistoryCursor:y}}function ST(){let[e,t]=(0,O.useState)(),[n,r]=(0,O.useState)(),[i,a]=(0,O.useState)(!1),[o,s]=(0,O.useState)(),c=(0,O.useRef)(!1),l=(0,O.useRef)(!0),u=(0,O.useRef)(0),d=(0,O.useCallback)(async e=>{if(l.current&&(t(e),r(void 0),e.version!==`unknown`&&e.version!==`0.2.0`&&!c.current&&(!e.run||e.run.committed||[`rolledBack`,`failed`].includes(e.run.phase)))){c.current=!0;try{await wr()}catch(e){c.current=!1,s(e instanceof Error?e.message:`草稿未能备份,暂缓重载页面`)}}},[]);(0,O.useEffect)(()=>{l.current=!0;let e=!0,t=!1,n=async()=>{if(t)return;t=!0;let n=u.current;try{let t=await Re(`/api/updates`);e&&n===u.current&&await d(t)}catch{e&&r(`连接暂时中断,正在等待服务恢复…`)}finally{t=!1}};n();let i=setInterval(()=>void n(),5e3);return()=>{l.current=!1,e=!1,clearInterval(i)}},[d]);let f=(0,O.useCallback)(async(e,t)=>{u.current++,a(!0),r(void 0);try{await d(await Re(e,t))}catch(e){r(e instanceof Error?e.message:`操作未能确认,请查看升级状态`)}finally{a(!1),u.current++}},[d]);return{status:e,error:n,busy:i,reloadError:o,check:e=>f(`/api/updates/check`,{channel:e}),configure:e=>f(`/api/updates/settings`,e),start:(e,t,n)=>f(`/api/updates/run`,{clientOperationId:crypto.randomUUID(),channel:e,allowDowngrade:t,codexConfirmation:n})}}function CT(e){let t=Object.values(e).filter(e=>typeof e==`number`);return Object.entries(e).filter(([e,n])=>t.indexOf(+e)===-1).map(([e,t])=>t)}function wT(e,t=`|`){return e.map(e=>JT(e)).join(t)}function TT(e,t){return typeof t==`bigint`?t.toString():t}var ET=class{constructor(e){this._getter=e,this._value=void 0}get value(){let e=this._getter;return e!==void 0&&(this._value=e(),this._getter=void 0),this._value}};function DT(e){return new ET(e)}function OT(e){return e==null}function kT(e){let t=+!!e.startsWith(`^`),n=e.endsWith(`$`)?e.length-1:e.length;return e.slice(t,n)}function AT(e,t,n){Object.defineProperty(e,t,{value:n,writable:!0,enumerable:!0,configurable:!0})}function jT(e){let t=Object.getOwnPropertyDescriptor(e,`shape`);return t?.get?t.get.raw:t?.value}function MT(e){return jT(e._zod.def)??e._zod.def.shape}function NT(e,t,n){Object.defineProperty(e,t,{get(){let e=n();return AT(this,t,e),e},enumerable:!0,configurable:!0})}function PT(e,t,n){t in e?AT(e,t,n):e[t]=n}function FT(e,t,n,r){let i=MT(t);for(let a of n){let n=Object.getOwnPropertyDescriptor(i,a);n.enumerable&&(n.get?NT(e,a,()=>{let e=t._zod.def.shape[a];return r?r(e,a):e}):PT(e,a,r?r(n.value,a):n.value))}}function IT(e,t){for(let n of Reflect.ownKeys(t)){let r=Object.getOwnPropertyDescriptor(t,n);r.enumerable&&(r.get?NT(e,n,()=>t[n]):PT(e,n,r.value))}}function LT(...e){let t={};for(let n of e){let e=Object.getOwnPropertyDescriptors(n);Object.assign(t,e)}return Object.defineProperties({},t)}function RT(e){return JSON.stringify(e)}function zT(e){return e.toLowerCase().trim().replace(/[^\w\s-]/g,``).replace(/[\s_-]+/g,`-`).replace(/^-+|-+$/g,``)}var BT=`captureStackTrace`in Error?Error.captureStackTrace:(...e)=>{};function VT(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}var HT=DT(()=>{if(RE.jitless||typeof navigator<`u`&&navigator?.userAgent?.includes(`Cloudflare`))return!1;try{return Function(``),!0}catch{return!1}});function UT(e){if(VT(e)===!1)return!1;let t=e.constructor;if(t===void 0||typeof t!=`function`)return!0;let n=t.prototype;return VT(n)!==!1&&Object.prototype.hasOwnProperty.call(n,`isPrototypeOf`)!==!1}function WT(e){return UT(e)?{...e}:Array.isArray(e)?[...e]:e instanceof Map?new Map(e):e instanceof Set?new Set(e):e}var GT=new Set([`string`,`number`,`symbol`]);function KT(e){return e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}function qT(e,t,n){let r=new e._zod.constr(t??e._zod.def);return(!t||n?.parent)&&(r._zod.parent=e),r}function Q(e){let t=e;if(!t)return{};if(typeof t==`string`)return{error:()=>t};if(t?.message!==void 0){if(t?.error!==void 0)throw Error("Cannot specify both `message` and `error` params");t.error=t.message}return delete t.message,typeof t.error==`string`?{...t,error:()=>t.error}:t}function JT(e){return typeof e==`bigint`?e.toString()+`n`:typeof e==`string`?`"${e}"`:`${e}`}function YT(e){return Object.keys(e).filter(t=>e[t]._zod.optin!==void 0&&e[t]._zod.optout===`optional`)}var XT={safeint:[-(2**53-1),2**53-1],int32:[-2147483648,2147483647],uint32:[0,4294967295],float32:[-34028234663852886e22,34028234663852886e22],float64:[-Number.MAX_VALUE,Number.MAX_VALUE]},ZT={int64:[BigInt(`-9223372036854775808`),BigInt(`9223372036854775807`)],uint64:[BigInt(0),BigInt(`18446744073709551615`)]};function QT(e,t){let n=e._zod.def,r=n.checks;if(r&&r.length>0)throw Error(`.pick() cannot be used on object schemas containing refinements`);let i={};return FT(i,e,$T(e,t)),qT(e,LT(n,{shape:i,checks:[]}))}function $T(e,t){let n=MT(e),r=[];for(let e of Reflect.ownKeys(t)){if(!Object.getOwnPropertyDescriptor(n,e)?.enumerable)throw Error(`Unrecognized key: "${String(e)}"`);t[e]&&r.push(e)}return r}function eE(e,t){let n=e._zod.def,r=n.checks;if(r&&r.length>0)throw Error(`.omit() cannot be used on object schemas containing refinements`);let i=new Set($T(e,t)),a={};return FT(a,e,Reflect.ownKeys(MT(e)).filter(e=>!i.has(e))),qT(e,LT(n,{shape:a,checks:[]}))}function tE(e,t){if(!UT(t))throw Error(`Invalid input to extend: expected a plain object`);let n=e._zod.def.checks;if(n&&n.length>0){let n=MT(e);for(let e of Reflect.ownKeys(t))if(Object.getOwnPropertyDescriptor(n,e)!==void 0)throw Error("Cannot overwrite keys on object schemas containing refinements. Use `.safeExtend()` instead.")}return qT(e,LT(e._zod.def,{shape:nE(e,t)}))}function nE(e,t){let n={};return FT(n,e,Reflect.ownKeys(MT(e))),IT(n,t),n}function rE(e,t){if(!UT(t))throw Error(`Invalid input to safeExtend: expected a plain object`);return qT(e,LT(e._zod.def,{shape:nE(e,t)}))}function iE(e,t){if(!t?._zod?.def)throw Error("Invalid input to merge: expected an object schema. To merge a plain shape, use `.extend()`.");if(e._zod.def.checks?.length)throw Error(`.merge() cannot be used on object schemas containing refinements. Use .safeExtend() instead.`);let n={};return FT(n,e,Reflect.ownKeys(MT(e))),FT(n,t,Reflect.ownKeys(MT(t))),qT(e,LT(e._zod.def,{shape:n,get catchall(){return t._zod.def.catchall},checks:t._zod.def.checks??[]}))}function aE(e,t,n,r=`partial`){let i=t._zod.def.checks;if(i&&i.length>0)throw Error(`.${r}() cannot be used on object schemas containing refinements`);let a=n?new Set($T(t,n)):void 0,o={};return FT(o,t,Reflect.ownKeys(MT(t)),e&&((t,n)=>a&&!a.has(n)?t:new e({type:`optional`,innerType:t}))),qT(t,LT(t._zod.def,{shape:o,checks:[]}))}function oE(e,t,n){let r=n?new Set($T(t,n)):void 0,i={};return FT(i,t,Reflect.ownKeys(MT(t)),(t,n)=>r&&!r.has(n)?t:new e({type:`nonoptional`,innerType:t})),qT(t,LT(t._zod.def,{shape:i}))}function sE(e,t=0){if(e.aborted===!0)return!0;for(let n=t;n<e.issues.length;n++)if(e.issues[n]?.continue!==!0)return!0;return!1}function cE(e,t=0){if(e.aborted===!0)return!0;for(let n=t;n<e.issues.length;n++)if(e.issues[n]?.continue===!1)return!0;return!1}function lE(e,t){return t.map(t=>{var n;return(n=t).path??(n.path=[]),t.path.unshift(e),t})}function uE(e){return typeof e==`string`?e:e?.message}function dE(e){let t=[];for(let n of e??[]){let e=n._zod.def;if(!/_(length|size)$|_equals$/.test(e.check))break;let r=e.maximum??e.length??e.size;r>=0&&t.push([r,n])}return t}function fE(e,t,n){var r;for(let i=t;i<e.length;i++)(r=e[i]).schema??(r.schema=n)}function pE(e,t,n){var r;let i=e.inst?._zod?.traits;i?.has(`$ZodType`)&&(i.has(`$ZodCheck`)?(r=e).schema??(r.schema=e.inst):e.schema=e.inst);let a=e.schema===e.inst?void 0:e.schema?._zod.def?.error,o=e.message?e.message:uE(e.inst?._zod.def?.error?.(e))??uE(a?.(e))??uE(t?.error?.(e))??uE(n.customError?.(e))??uE(n.localeError?.(e))??`Invalid input`,s={};for(let t of Object.keys(e))t!==`inst`&&t!==`schema`&&t!==`continue`&&t!==`input`&&t!==`__proto__`&&(s[t]=e[t]);return s.path??=[],s.message=o,t?.reportInput&&(s.input=e.input),s}var mE=/[\uD800-\uDBFF]/;function hE(e){let t=e.length;if(!mE.test(e))return t;let n=t;for(let r=0;r<t-1;r++)(e.charCodeAt(r)&64512)==55296&&(e.charCodeAt(r+1)&64512)==56320&&(n--,r++);return n}function gE(e){return Array.isArray(e)?`array`:typeof e==`string`?`string`:`unknown`}function _E(e){let t=typeof e;switch(t){case`number`:return Number.isNaN(e)?`nan`:`number`;case`object`:{if(e===null)return`null`;if(Array.isArray(e))return`array`;let t=e;if(t&&Object.getPrototypeOf(t)!==Object.prototype&&`constructor`in t&&t.constructor)return t.constructor.name}}return t}function vE(...e){let[t,n,r]=e;return typeof t==`string`?{message:t,code:`custom`,input:n,inst:r}:{...t}}function yE(e,t){for(let n in t){let r=Object.getOwnPropertyDescriptor(t,n);r.get?Object.defineProperty(e,n,{...r,enumerable:!1}):CE(e,n,r.value)}}function bE(e,t,n,r=!0){return Object.defineProperty(e,t,{configurable:!0,writable:!0,enumerable:r,value:n}),n}function xE(e,t,n){return bE(e,t,n,!1)}function SE(e,t){for(let n in e){let r=e[n];Object.defineProperty(t,n,{configurable:!0,enumerable:!0,get(){return bE(this,n,r(this))},set(e){bE(this,n,e)}})}return t}function CE(e,t,n){Object.defineProperty(e,t,{configurable:!0,get(){return this==null?n:bE(this,t,n.bind(this))},set(e){bE(this,t,e)}})}function wE(e,t){let n=Object.getPrototypeOf(e);return t in n?void 0:n}var TE,EE=!1,DE={configurable:!0,get(){EE=!0}};function OE(e,t,n){let r=Object.getPrototypeOf(e._zod);t in r&&TE!==e._zod?TE=void 0:(TE=e._zod,Object.defineProperty(r,t,{configurable:!0,get(){Object.defineProperty(this,t,DE);let e=EE;EE=!1;try{let r=n(this);return EE?delete this[t]:Object.defineProperty(this,t,{configurable:!0,writable:!0,value:r}),EE||=e,r}catch(n){throw delete this[t],EE||=e,n}},set(e){Object.defineProperty(this,t,{configurable:!0,writable:!0,value:e})}}))}function kE(e,t,n,r){let i=wE(e,t);i&&Object.defineProperty(i,t,{configurable:!0,get(){let e={configurable:!0,writable:!0,enumerable:r,value:void 0};return Object.defineProperty(this,t,e),e.value=n(this),Object.defineProperty(this,t,e),e.value},set(e){Object.defineProperty(this,t,{configurable:!0,writable:!0,enumerable:r,value:e})}})}var AE=`~constantCatch`;function jE(e){let t=()=>e;return t[AE]=!0,t}var ME,NE={value:void 0,enumerable:!1},PE=`captureStackTrace`in Error?Error:null;function FE(e){let t=PE;if(t){let n=t.stackTraceLimit;if(typeof n==`number`){try{t.stackTraceLimit=0}catch{return PE=null,new e}try{return new e}finally{t.stackTraceLimit=n}}}return new e}function $(e,t,n,r){let i={};function a(e){this.def=e,this.constr=d,this.traits=new Set}a.prototype=i;let o=n,s=o&&new WeakSet;function c(n,r){if(!n._zod){NE.value=new a(r);try{Object.defineProperty(n,"_zod",NE)}finally{NE.value=void 0}}else if(n._zod.traits.has(e))return;if(n._zod.traits.add(e),t(n,r),s){let e=Object.getPrototypeOf(n),t=n._zod.constr.prototype,r=e;for(;r&&r!==t;)r=Object.getPrototypeOf(r);let i=r??e;s.has(i)||(s.add(i),yE(i,o))}let i=d.prototype;for(let e in i)Object.prototype.hasOwnProperty.call(i,e)&&(e in n||(n[e]=i[e].bind(n)))}let l=r?.Parent??Object;class u extends l{}Object.defineProperty(u,"name",{value:e});function d(e){let t=r?.Parent?FE(u):this;c(t,e);let n=t._zod.deferred;if(n){for(let e of n)e();t._zod.deferred=void 0}let i=globalThis.__zod_globalConfig?.postProcessor;return i&&i(t),t}return Object.defineProperty(d,"init",{value:c}),Object.defineProperty(d,Symbol.hasInstance,{value:t=>r?.Parent&&t instanceof r.Parent?!0:t?._zod?.traits?.has(e)}),Object.defineProperty(d,"name",{value:e}),d}var IE=class extends Error{constructor(){super(`Encountered Promise during synchronous parse. Use .parseAsync() instead.`)}},LE=class extends Error{constructor(e){super(`Encountered unidirectional transform during encode: ${e}`),this.name=`ZodEncodeError`}};(ME=globalThis).__zod_globalConfig??(ME.__zod_globalConfig={});var RE=globalThis.__zod_globalConfig;function zE(e){return e&&Object.assign(RE,e),RE}function BE(){let e=this._zod;return e.message??=JSON.stringify(e.def,TT,2),e.message}function VE(e){this._zod.message=e}var HE={get:BE,set:VE,enumerable:!0,configurable:!0},UE={value:void 0,enumerable:!1},WE=new WeakSet([Object.prototype,Error.prototype]),GE=(e,t)=>{e.name=`$ZodError`,UE.value=t,Object.defineProperty(e,"issues",UE),UE.value=void 0,Object.defineProperty(e,"message",HE);let n=Object.getPrototypeOf(e);WE.has(n)||(WE.add(n),Object.defineProperty(n,"toString",{configurable:!0,enumerable:!1,get(){let e=()=>this.message;return Object.defineProperty(this,"toString",{value:e,configurable:!0,writable:!0}),e},set(e){Object.defineProperty(this,"toString",{value:e,configurable:!0,writable:!0})}}))},KE=$(`$ZodError`,GE);$(`$ZodError`,GE,void 0,{Parent:Error});function qE(e,t,n){return Object.prototype.hasOwnProperty.call(e,t)||(t===`__proto__`?Object.defineProperty(e,t,{value:n(),writable:!0,enumerable:!0,configurable:!0}):e[t]=n()),e[t]}function JE(e,t=e=>e.message){let n={},r=[];for(let i of e.issues)i.path.length>0?qE(n,i.path[0],()=>[]).push(t(i)):r.push(t(i));return{formErrors:r,fieldErrors:n}}function YE(e,t=e=>e.message){let n={_errors:[]},r=(e,i=[])=>{for(let a of e.issues)if(a.code===`invalid_union`&&a.errors.length)a.errors.map(e=>r({issues:e},[...i,...a.path]));else if(a.code===`invalid_key`)r({issues:a.issues},[...i,...a.path]);else if(a.code===`invalid_element`)r({issues:a.issues},[...i,...a.path]);else{let e=[...i,...a.path];if(e.length===0)n._errors.push(t(a));else{let r=n,i=0;for(;i<e.length;){let n=e[i],o=i===e.length-1;if(n===`_errors`){o&&r._errors.push(t(a)),i++;continue}Object.prototype.hasOwnProperty.call(r,n)||Object.defineProperty(r,n,{value:{_errors:[]},enumerable:!0,writable:!0,configurable:!0});let s=r[n];o&&s._errors.push(t(a)),r=s,i++}}}};return r(e),n}function XE(e,t){return{callee:t?.callee??e,Err:t?.Err}}var ZE=e=>{let t=(n,r,i,a)=>{let o=i?{...i,async:!1}:{async:!1},s=n._zod.run({value:r,issues:[]},o);if(s instanceof Promise)throw new IE;if(s.issues.length){let n=new((a?.Err)??e)(s.issues.map(e=>pE(e,o,zE())));throw BT(n,a?.callee??t),n}return s.value};return t},QE=e=>{let t=async(n,r,i,a)=>{let o=i?{...i,async:!0}:{async:!0},s=n._zod.run({value:r,issues:[]},o);if(s instanceof Promise&&(s=await s),s.issues.length){let n=new((a?.Err)??e)(s.issues.map(e=>pE(e,o,zE())));throw BT(n,a?.callee??t),n}return s.value};return t},$E=e=>(t,n,r)=>{let i=r?{...r,async:!1}:{async:!1},a=t._zod.run({value:n,issues:[]},i);if(a instanceof Promise)throw new IE;return a.issues.length?eD(e,a.issues,i):{success:!0,data:a.value}};function eD(e,t,n){let r;return{success:!1,get error(){return r||(r=new e(t.map(e=>pE(e,n,zE()))),t=void 0,n=void 0),r},set error(e){r=e,t=void 0,n=void 0}}}var tD=e=>async(t,n,r)=>{let i=r?{...r,async:!0}:{async:!0},a=t._zod.run({value:n,issues:[]},i);return a instanceof Promise&&(a=await a),a.issues.length?eD(e,a.issues,i):{success:!0,data:a.value}},nD=Symbol.for(`zod.compile.invalid`),rD=Symbol.for(`zod.compile.fallback`),iD=((e,t,n)=>{let r=e._zod.bag.validator;if(r!==void 0){if(r(t)!==nD)return!0;if(r.definite===!0&&n===void 0)return!1}return aD(e,t,n)});function aD(e,t,n){let r=n?{...n,async:!1,abortEarly:!0}:{async:!1,abortEarly:!0},i=e._zod.bag.fallbackRun,a;if(i?(r[rD]=!0,a=i({value:t,issues:[]},r)):a=e._zod.run({value:t,issues:[]},r),a instanceof Promise)throw new IE;return a.issues.length===0}var oD=async(e,t,n)=>{let r=n?{...n,async:!0,abortEarly:!0}:{async:!0,abortEarly:!0},i=e._zod.run({value:t,issues:[]},r);return i instanceof Promise&&(i=await i),i.issues.length===0},sD=e=>{let t=ZE(e),n=(e,r,i,a)=>{let o=i?{...i,direction:`backward`}:{direction:`backward`};return t(e,r,o,XE(n,a))};return n},cD=e=>{let t=ZE(e),n=(e,r,i,a)=>t(e,r,i,XE(n,a));return n},lD=e=>{let t=QE(e),n=async(e,r,i,a)=>{let o=i?{...i,direction:`backward`}:{direction:`backward`};return await t(e,r,o,XE(n,a))};return n},uD=e=>{let t=QE(e),n=async(e,r,i,a)=>await t(e,r,i,XE(n,a));return n},dD=e=>(t,n,r)=>{let i=r?{...r,direction:`backward`}:{direction:`backward`};return $E(e)(t,n,i)},fD=e=>(t,n,r)=>$E(e)(t,n,r),pD=e=>async(t,n,r)=>{let i=r?{...r,direction:`backward`}:{direction:`backward`};return tD(e)(t,n,i)},mD=e=>async(t,n,r)=>tD(e)(t,n,r),hD=/^[cC][0-9a-z]{6,}$/,gD=/^[0-9a-z]+$/,_D=/^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$/,vD=/^[0-9a-vA-V]{20}$/,yD=/^[A-Za-z0-9]{27}$/,bD=/^[a-zA-Z0-9_-]{21}$/;function xD(e){return RegExp(`^[a-zA-Z0-9_-]{${e}}$`)}var SD=/^P(?:(\d+W)|(?!.*W)(?=\d|T\d)(\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+([.,]\d+)?S)?)?)$/,CD=/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/,wD=e=>e?RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${e}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`):/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/,TD=/^(?:[A-Za-z0-9_'+\-]+\.)*[A-Za-z0-9_'+\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$/,ED=`^(?=[\\s\\S]*[\\p{Extended_Pictographic}\\p{Regional_Indicator}\\u20E3])[\\p{Extended_Pictographic}\\p{Emoji_Component}]+$`;function DD(){return new RegExp(ED,`u`)}var OD=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,kD=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$/,AD=/^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/([0-9]|[1-2][0-9]|3[0-2])$/,jD=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,MD=/^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/,ND=/^(?:[A-Za-z0-9_-]{4})*(?:[A-Za-z0-9_-]{2,3})?$/,PD=/^https?$/,FD=/^\+[1-9]\d{6,14}$/,ID=`(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))`;function LD(e){return RegExp(`^${e}$`)}var RD=LD(ID);function zD(e){let t=`(?:[01]\\d|2[0-3]):[0-5]\\d`;return typeof e.precision==`number`?e.precision===-1?`${t}`:e.precision===0?`${t}:[0-5]\\d`:`${t}:[0-5]\\d\\.\\d{${e.precision}}`:e.seconds?`${t}:[0-5]\\d(?:\\.\\d+)?`:`${t}(?::[0-5]\\d(?:\\.\\d+)?)?`}function BD(e){return RegExp(`^${zD(e)}$`)}function VD(e){let t=[`Z`];e.offset&&t.push(`([+-](?:[01]\\d|2[0-3]):[0-5]\\d)`);let n=`${zD({precision:e.precision,seconds:!0})}(?:${t.join(`|`)})`,r=e.local?`${n}|${zD({precision:e.precision})}`:n;return RegExp(`^${ID}T(?:${r})$`)}var HD=/^[\s\S]{0,}$/,UD=/^[^A-Z]*$/,WD=/^[^a-z]*$/,GD=$(`$ZodCheck`,(e,t)=>{var n;e._zod??={},e._zod.def=t,(n=e._zod).onattach??(n.onattach=[])}),KD=e=>{let t=e.value;return!OT(t)&&t.length!==void 0},qD=$(`$ZodCheckMaxLength`,(e,t)=>{var n;GD.init(e,t),(n=e._zod.def).when??(n.when=KD),e._zod.check=n=>{let r=n.value,i=r.length;if((typeof r==`string`&&i>t.maximum?hE(r):i)<=t.maximum)return;let a=gE(r);n.issues.push({origin:a,code:`too_big`,maximum:t.maximum,inclusive:!0,input:r,inst:e,continue:!t.abort})}}),JD=$(`$ZodCheckMinLength`,(e,t)=>{var n;GD.init(e,t),(n=e._zod.def).when??(n.when=KD),e._zod.check=n=>{let r=n.value,i=r.length;if((typeof r==`string`&&i>=t.minimum&&i<t.minimum*2?hE(r):i)>=t.minimum)return;let a=gE(r);n.issues.push({origin:a,code:`too_small`,minimum:t.minimum,inclusive:!0,input:r,inst:e,continue:!t.abort})}}),YD=$(`$ZodCheckLengthEquals`,(e,t)=>{var n;GD.init(e,t),(n=e._zod.def).when??(n.when=KD),e._zod.check=n=>{let r=n.value,i=r.length,a=typeof r==`string`&&i>=t.length&&i<=t.length*2?hE(r):i;if(a===t.length)return;let o=gE(r),s=a>t.length;n.issues.push({origin:o,...s?{code:`too_big`,maximum:t.length}:{code:`too_small`,minimum:t.length},inclusive:!0,exact:!0,input:n.value,inst:e,continue:!t.abort})}}),XD=$(`$ZodCheckStringFormat`,(e,t)=>{var n,r;GD.init(e,t),t.pattern?(n=e._zod).check??(n.check=n=>{t.pattern.lastIndex=0,!t.pattern.test(n.value)&&n.issues.push({origin:`string`,code:`invalid_format`,format:t.format,input:n.value,...t.pattern?{pattern:t.pattern.toString()}:{},inst:e,continue:!t.abort})}):(r=e._zod).check??(r.check=()=>{})}),ZD=$(`$ZodCheckRegex`,(e,t)=>{XD.init(e,t),e._zod.check=n=>{t.pattern.lastIndex=0,!t.pattern.test(n.value)&&n.issues.push({origin:`string`,code:`invalid_format`,format:`regex`,input:n.value,pattern:t.pattern.toString(),inst:e,continue:!t.abort})}}),QD=$(`$ZodCheckLowerCase`,(e,t)=>{t.pattern??=UD,XD.init(e,t)}),$D=$(`$ZodCheckUpperCase`,(e,t)=>{t.pattern??=WD,XD.init(e,t)}),eO=$(`$ZodCheckIncludes`,(e,t)=>{GD.init(e,t);let n=KT(t.includes);t.pattern=new RegExp(typeof t.position==`number`?`^.{${t.position},}${n}`:n),e._zod.check=n=>{n.value.includes(t.includes,t.position)||n.issues.push({origin:`string`,code:`invalid_format`,format:`includes`,includes:t.includes,input:n.value,inst:e,continue:!t.abort})}}),tO=$(`$ZodCheckStartsWith`,(e,t)=>{GD.init(e,t);let n=RegExp(`^${KT(t.prefix)}.*`);t.pattern??=n,e._zod.check=n=>{n.value.startsWith(t.prefix)||n.issues.push({origin:`string`,code:`invalid_format`,format:`starts_with`,prefix:t.prefix,input:n.value,inst:e,continue:!t.abort})}}),nO=$(`$ZodCheckEndsWith`,(e,t)=>{GD.init(e,t);let n=RegExp(`.*${KT(t.suffix)}$`);t.pattern??=n,e._zod.check=n=>{n.value.endsWith(t.suffix)||n.issues.push({origin:`string`,code:`invalid_format`,format:`ends_with`,suffix:t.suffix,input:n.value,inst:e,continue:!t.abort})}}),rO=$(`$ZodCheckOverwrite`,(e,t)=>{GD.init(e,t),e._zod.check=e=>{e.value=t.tx(e.value)}}),iO=class{constructor(e=[],t={}){this.content=[],this.indent=0,this.args=e,this.closed=t}indented(e){this.indent+=1;try{e(this)}finally{--this.indent}}write(e){if(typeof e==`function`){e(this,{execution:`sync`}),e(this,{execution:`async`});return}let t=e.split(`
86
+ `).map(e=>e.trim()).filter(Boolean),eT=Zw.filter(e=>`unit`in e);function tT(e,t){let n=e=>({bytes:NaN,error:`${t.label}:${e}`}),r=e.trim();if(!r)return n(`请输入 MiB 数值。`);if(!/^[+-]?(?:\d+(?:\.\d*)?|\.\d+)$/.test(r)||!Number.isFinite(Number(r)))return n(`请输入有效的 MiB 数值,可使用小数。`);if(Number(r)<1/1024||Number(r)>t.maxMiB)return n(`范围为 ${Jw(t.maxMiB)}。`);let[i,a=``]=r.replace(/^\+/,``).split(`.`),o=a.replace(/0+$/,``),s=()=>n(`MiB 数值必须精确对应整数字节,请调整小数(不会自动舍入)。`);if(o.length>20)return s();let c=10n**BigInt(o.length),l=(BigInt(i||`0`)*c+BigInt(o||`0`))*BigInt(qw);return l<1024n*c||l>BigInt(t.maxMiB*qw)*c?n(`范围为 ${Jw(t.maxMiB)}。`):l%c===0n?{bytes:Number(l/c)}:s()}function nT(e){return Object.fromEntries(eT.flatMap(t=>{let{error:n}=tT(e[t.key],t);return n?[[t.key,n]]:[]}))}function rT(e,t){return`unit`in e?`${t} ${e.unit}`:t}function iT(e,t){let n=Object.fromEntries(eT.map(t=>[t.key,tT(e[t.key],t).bytes]));return{...t,host:e.host.trim(),port:Number(e.port),publicOrigin:$w(e.publicOrigin),developmentOrigins:$w(e.developmentOrigins),auth:e.mode===`local`?{mode:`local`}:{mode:e.mode,issuer:e.issuer.trim(),audience:e.audience.trim()},codex:{binary:e.binary.trim(),...e.home.trim()?{home:e.home.trim()}:{},requestTimeoutMs:Number(e.requestTimeoutMs),maxLineBytes:n.maxLineBytes},limits:{eventBytes:n.eventBytes,wsBytes:n.wsBytes,itemBytes:n.itemBytes}}}function aT(e,t){let n=Qw(e),r=Qw(t);return[...n.mode===r.mode?[]:[{label:`认证模式`,before:n.mode,after:r.mode}],...Zw.filter(e=>!([`issuer`,`audience`].includes(e.key)&&r.mode===`local`)&&n[e.key]!==r[e.key]).map(e=>({label:e.label,before:rT(e,n[e.key]),after:rT(e,r[e.key])}))]}var oT=e=>e instanceof Error?e.message:`操作失败,请重试。`;function sT({onClose:e}){let t=(0,O.useRef)(null),n=(0,O.useRef)(null),[r,i]=(0,O.useState)(),[a,o]=(0,O.useState)(),[s,c]=(0,O.useState)(),[l,u]=(0,O.useState)(),[d,f]=(0,O.useState)(!0),[p,m]=(0,O.useState)(``),[h,g]=(0,O.useState)(``),[_,v]=(0,O.useState)({}),[y,b]=(0,O.useState)(!1),[x,S]=(0,O.useState)(!1),C=!!r&&!!a&&JSON.stringify(iT(a,r.saved))!==JSON.stringify(r.saved);(0,O.useEffect)(()=>{t.current?.showModal();let e=new AbortController;return ze.gatewayConfig().then(t=>{e.signal.aborted||(i(t),o(Qw(t.saved)))}).catch(t=>{e.signal.aborted||m(oT(t))}).finally(()=>{e.signal.aborted||f(!1)}),()=>{e.abort(),t.current?.close()}},[]),(0,O.useEffect)(()=>{let e=e=>{C&&e.preventDefault()};return window.addEventListener(`beforeunload`,e),()=>window.removeEventListener(`beforeunload`,e)},[C]);let w=()=>{d||(C||l?S(!0):e())};async function T(e){f(!0),m(``),g(``);try{await e()}catch(e){m(oT(e)),e instanceof Le&&e.problem.code===`CONFIG_CONFLICT`&&b(!0)}finally{f(!1)}}async function E(){await T(async()=>{let e=await ze.gatewayConfig();i(e),o(Qw(e.saved)),v({}),c(void 0),u(void 0),b(!1)})}async function D(e){let t=e.target.files?.[0];e.target.value=``,t&&await T(async()=>{if(t.size>262144)throw Error(`配置文件不能超过 256 KiB。`);let e;try{e=JSON.parse(await t.text())}catch{throw Error(`无法解析 JSON,请检查配置文件格式。`)}u(await ze.importGatewayConfig(e)),c(void 0)})}async function k(){await T(async()=>{let e=await ze.exportGatewayConfig(),t=URL.createObjectURL(new Blob([`${JSON.stringify(e,null,2)}\n`],{type:`application/json`})),n=document.createElement(`a`);n.href=t,n.download=`codex-web-config.json`,document.body.append(n),n.click(),n.remove(),setTimeout(()=>URL.revokeObjectURL(t),1e3),g(`已导出配置文件中的已保存配置;未保存的编辑不包含在内。`)})}let A=r&&Qw(r.running),j=l?.config??s,M=r&&j?aT(r.saved,j):[];function N(e){if(!a||!A||[`issuer`,`audience`].includes(e.key)&&a.mode!==`cloudflare-access`)return null;let t={id:`gateway-${e.key}`,"aria-labelledby":`gateway-${e.key}-label`,"aria-describedby":`gateway-${e.key}-help${_[e.key]?` gateway-${e.key}-error`:``}`,"aria-invalid":!!_[e.key],value:a[e.key],disabled:d||!r?.writable,onChange:t=>{o({...a,[e.key]:t.target.value}),v(t=>({...t,[e.key]:void 0})),g(``)}};return(0,W.jsxs)(`label`,{className:`project-field`,htmlFor:t.id,children:[(0,W.jsx)(`span`,{id:`gateway-${e.key}-label`,children:e.label}),`multiline`in e?(0,W.jsx)(`textarea`,{...t,rows:3,spellCheck:!1}):(0,W.jsx)(`input`,{...t,type:`type`in e?e.type:`text`,inputMode:`unit`in e?`decimal`:void 0,spellCheck:!1}),(0,W.jsx)(`small`,{id:`gateway-${e.key}-help`,children:e.help}),_[e.key]&&(0,W.jsx)(`small`,{id:`gateway-${e.key}-error`,className:`gateway-error`,role:`alert`,children:_[e.key]}),a[e.key]!==A[e.key]&&(0,W.jsxs)(`small`,{className:`gateway-running`,children:[`当前运行:`,rT(e,A[e.key])||`未设置`]})]},e.key)}return(0,W.jsxs)(`dialog`,{ref:t,className:`project-dialog gateway-dialog`,"aria-labelledby":`gateway-title`,onCancel:e=>{e.preventDefault(),w()},children:[(0,W.jsxs)(`div`,{className:`project-dialog-heading`,children:[(0,W.jsxs)(`div`,{children:[(0,W.jsx)(be,{size:20,"aria-hidden":`true`}),(0,W.jsx)(`h2`,{id:`gateway-title`,children:`服务配置`})]}),(0,W.jsx)(q,{variant:`ghost`,size:`icon`,"aria-label":`关闭服务配置`,disabled:d,onClick:w,children:(0,W.jsx)(J,{name:`close`,size:17})})]}),(0,W.jsx)(`p`,{className:`gateway-intro`,children:`配置运行此网页服务的电脑。保存后需手动重启服务生效。`}),p&&(0,W.jsx)(`p`,{className:`gateway-error`,role:`alert`,children:p}),!r&&(0,W.jsx)(q,{variant:`secondary`,disabled:d,onClick:()=>void E(),children:d?`正在读取配置…`:`重新读取配置`}),r&&a&&(0,W.jsxs)(W.Fragment,{children:[(0,W.jsxs)(`div`,{className:`gateway-file`,children:[(0,W.jsx)(`span`,{children:`配置文件`}),(0,W.jsx)(`code`,{children:r.path})]}),(0,W.jsxs)(`div`,{className:`gateway-status`,role:`status`,"data-pending":r.restartRequired,children:[(0,W.jsx)(`strong`,{children:r.restartRequired?`已保存,待重启生效`:`已保存配置与当前运行配置一致`}),(0,W.jsx)(`span`,{children:`保存不会重启服务或中断当前任务。`})]}),!r.writable&&(0,W.jsx)(`p`,{className:`gateway-error`,children:r.readOnlyReason}),h&&(0,W.jsx)(`p`,{className:`gateway-notice`,role:`status`,children:h}),y&&(0,W.jsxs)(`div`,{className:`gateway-conflict`,children:[(0,W.jsx)(`p`,{children:`重新读取会丢弃当前编辑,并载入文件的最新内容。`}),(0,W.jsx)(q,{variant:`secondary`,disabled:d,onClick:()=>void E(),children:`丢弃编辑并重新读取`})]}),x?(0,W.jsxs)(`section`,{className:`gateway-review`,"aria-label":`放弃编辑确认`,children:[(0,W.jsx)(`h3`,{children:`放弃未保存的更改?`}),(0,W.jsx)(`p`,{children:`配置文件尚未修改。`}),(0,W.jsxs)(`div`,{className:`project-dialog-actions`,children:[(0,W.jsx)(q,{variant:`secondary`,onClick:()=>S(!1),children:`继续编辑`}),(0,W.jsx)(q,{variant:`destructive`,onClick:e,children:`放弃更改并关闭`})]})]}):j?(0,W.jsxs)(`section`,{className:`gateway-review`,"aria-label":l?`导入配置预览`:`保存配置预览`,children:[(0,W.jsx)(`h3`,{children:l?`预览导入配置`:`确认配置更改`}),(0,W.jsx)(`p`,{children:l?`应用到表单后仍需检查并保存,才会修改配置文件。导入将替换当前表单中的可编辑配置。`:`以下更改将在服务重启后生效。请确认新的访问地址和认证配置。`}),l&&(0,W.jsxs)(`p`,{children:[`保留当前数据目录和项目初始配置。`,l.preserved.length>0?`已忽略导入文件中的 ${l.preserved.join(`、`)}。`:``]}),M.length?(0,W.jsx)(`div`,{className:`gateway-changes`,children:M.map(e=>(0,W.jsxs)(`div`,{children:[(0,W.jsx)(`strong`,{children:e.label}),(0,W.jsxs)(`span`,{children:[`已保存:`,e.before||`未设置`]}),(0,W.jsxs)(`span`,{children:[`更改为:`,e.after||`未设置`]})]},e.label))}):(0,W.jsx)(`p`,{children:`与已保存配置没有差异。`}),(0,W.jsxs)(`details`,{className:`gateway-json`,children:[(0,W.jsx)(`summary`,{children:`查看完整 JSON`}),(0,W.jsx)(`pre`,{children:JSON.stringify(j,null,2)})]}),(0,W.jsxs)(`div`,{className:`project-dialog-actions`,children:[(0,W.jsx)(q,{variant:`secondary`,disabled:d,onClick:()=>{u(void 0),c(void 0)},children:`返回编辑`}),l?(0,W.jsx)(q,{disabled:d,onClick:()=>{o(Qw(l.config)),v({}),u(void 0),g(`导入配置已应用到表单,尚未保存。`)},children:`应用到表单`}):(0,W.jsx)(q,{disabled:d||y||!M.length,onClick:()=>void T(async()=>{let e=await ze.saveGatewayConfig(r.revision,j);i(e),o(Qw(e.saved)),c(void 0),g(e.restartRequired?`配置已保存。请在方便时手动重启服务。`:`配置已保存,与当前运行配置一致。`)}),children:d?`正在保存…`:`确认保存`})]})]}):(0,W.jsxs)(W.Fragment,{children:[(0,W.jsxs)(`div`,{className:`gateway-tools`,children:[(0,W.jsxs)(q,{variant:`secondary`,size:`sm`,disabled:d||!r.writable,onClick:()=>n.current?.click(),children:[(0,W.jsx)(we,{size:15,"aria-hidden":`true`}),`导入配置`]}),(0,W.jsxs)(q,{variant:`secondary`,size:`sm`,disabled:d,onClick:()=>void k(),children:[(0,W.jsx)(le,{size:15,"aria-hidden":`true`}),`导出已保存配置`]}),(0,W.jsx)(`input`,{ref:n,type:`file`,accept:`.json,application/json`,"aria-label":`选择配置文件`,hidden:!0,onChange:e=>void D(e)})]}),(0,W.jsx)(`p`,{className:`gateway-help`,children:`导入仅更新服务设置;导出包含文件中的项目初始配置,不包含页面注册项目、会话、数据库或登录凭据。`}),(0,W.jsxs)(`form`,{onSubmit:e=>{e.preventDefault();let t=nT(a);v(t);let n=Zw.find(e=>t[e.key]);n?requestAnimationFrame(()=>{let e=document.getElementById(`gateway-${n.key}`);e?.closest(`details`)?.setAttribute(`open`,``),e?.focus({preventScroll:!0}),e?.closest(`label`)?.scrollIntoView({block:`center`})}):T(async()=>{c((await ze.importGatewayConfig(iT(a,r.saved))).config)})},children:[(0,W.jsxs)(`fieldset`,{disabled:d||!r.writable,children:[(0,W.jsxs)(`section`,{className:`gateway-section`,children:[(0,W.jsx)(`h3`,{children:`网络与访问`}),(0,W.jsxs)(`div`,{className:`gateway-fields`,children:[Zw.filter(e=>e.group===`network`).map(N),(0,W.jsxs)(`label`,{className:`project-field`,children:[(0,W.jsx)(`span`,{children:`认证模式`}),(0,W.jsxs)(`select`,{"aria-label":`认证模式`,value:a.mode,onChange:e=>o({...a,mode:e.target.value}),children:[(0,W.jsx)(`option`,{value:`local`,children:`本机 / Tailscale(local)`}),(0,W.jsx)(`option`,{value:`cloudflare-access`,children:`Cloudflare Access`})]}),(0,W.jsx)(`small`,{children:`本机模式仅监听回环地址;公开互联网入口使用 Cloudflare Access。`}),a.mode!==A?.mode&&(0,W.jsxs)(`small`,{className:`gateway-running`,children:[`当前运行:`,A?.mode]})]})]})]}),(0,W.jsxs)(`section`,{className:`gateway-section`,children:[(0,W.jsx)(`h3`,{children:`Codex`}),(0,W.jsx)(`div`,{className:`gateway-fields`,children:Zw.filter(e=>e.group===`codex`).map(N)})]}),(0,W.jsxs)(`section`,{className:`gateway-section`,children:[(0,W.jsx)(`h3`,{children:`数据与项目`}),(0,W.jsxs)(`div`,{className:`gateway-file`,children:[(0,W.jsx)(`span`,{children:`数据目录(只读)`}),(0,W.jsx)(`code`,{children:r.saved.dataDir}),(0,W.jsx)(`span`,{children:`当前运行目录`}),(0,W.jsx)(`code`,{children:r.running.dataDir})]}),(0,W.jsx)(`p`,{className:`gateway-help`,children:`数据目录变更需要迁移数据库,请在服务停止后处理。项目请在侧栏添加、重命名或移除;此处不覆盖已保存的项目管理结果。`})]}),(0,W.jsxs)(`details`,{className:`gateway-section`,children:[(0,W.jsx)(`summary`,{children:`高级设置`}),(0,W.jsx)(`div`,{className:`gateway-fields`,children:Zw.filter(e=>e.group===`advanced`).map(N)})]})]}),(0,W.jsxs)(`div`,{className:`gateway-save-bar`,children:[(0,W.jsx)(`span`,{children:C?`有未保存的更改`:`没有未保存的更改`}),(0,W.jsx)(q,{type:`submit`,disabled:d||!C||!r.writable||y,children:d?`正在校验…`:`检查更改`})]})]})]})]})]})}var cT=[`stable`,`beta`,`dev`],lT=e=>!!(e&&[`installing`,`waiting`,`stopping`,`verifying`].includes(e.phase)),uT={stable:`稳定版`,beta:`预览版`,dev:`开发版`},dT={installing:`正在安装候选版本`,waiting:`等待任务空闲`,stopping:`正在备份并重启`,verifying:`正在验证新版`,succeeded:`升级成功`,rolledBack:`已恢复上一版本`,failed:`升级失败`},fT={verified:`已验证`,unverified:`尚未验证`,unsupported:`明确不支持`,unknown:`无法确认`};function pT({title:e,value:t}){return(0,W.jsxs)(`section`,{className:`update-codex`,"aria-label":e,"data-state":t.status,children:[(0,W.jsx)(`h3`,{children:e}),(0,W.jsxs)(`div`,{children:[(0,W.jsx)(`span`,{children:`Codex CLI`}),(0,W.jsx)(`strong`,{children:t.version??`未识别`}),(0,W.jsx)(`span`,{className:`update-codex-status`,children:fT[t.status]})]}),t.manifest&&(0,W.jsxs)(`p`,{className:`subtle`,children:[`推荐:`,t.manifest.recommended,` · 已验证:`,t.manifest.verified.join(`、`)]}),t.reason&&(0,W.jsx)(`p`,{children:t.reason})]})}function mT({updates:e,onClose:t}){let n=(0,O.useRef)(null),{status:r,busy:i,error:a,reloadError:o}=e,[s,c]=(0,O.useState)(),l=s??r?.settings.channel??`stable`,[u,d]=(0,O.useState)(!1),f=r?.available?.channel===l?r.available:void 0,p=lT(r?.run),m=f?.version===r?.version,[h,g]=(0,O.useState)(),_=JSON.stringify([l,f?.version,f?.codex]),v=h===_,y=f?.codex,b=!m&&y?.status===`unverified`,x=!m&&f&&(!y||y.status===`unknown`||y.status===`unsupported`||b&&!v);return(0,O.useEffect)(()=>{g(void 0)},[_]),(0,O.useEffect)(()=>{let e=n.current;return e?.showModal(),()=>e?.close()},[]),(0,W.jsxs)(`dialog`,{ref:n,className:`project-dialog update-dialog`,"aria-labelledby":`update-title`,onCancel:e=>{e.preventDefault(),t()},children:[(0,W.jsxs)(`div`,{className:`project-dialog-heading`,children:[(0,W.jsxs)(`div`,{children:[(0,W.jsx)(ae,{size:20,"aria-hidden":`true`}),(0,W.jsx)(`h2`,{id:`update-title`,children:`Covro 更新`})]}),(0,W.jsx)(q,{variant:`ghost`,size:`icon`,"aria-label":`关闭更新设置`,onClick:t,children:(0,W.jsx)(J,{name:`close`,size:17})})]}),(0,W.jsxs)(`div`,{className:`update-version`,children:[(0,W.jsx)(`span`,{children:`当前 Covro`}),(0,W.jsx)(`strong`,{children:r?.version??`读取中…`}),r?.commit&&(0,W.jsx)(`code`,{children:r.commit.slice(0,8)})]}),r?.codex&&(0,W.jsx)(pT,{title:`当前 Codex`,value:r.codex}),(0,W.jsxs)(`label`,{className:`update-channel`,children:[`版本渠道`,(0,W.jsx)(`select`,{"aria-label":`版本渠道`,value:l,disabled:i||p,onChange:t=>{let n=t.target.value;c(n),d(!1),g(void 0),e.check(n)},children:cT.map(e=>(0,W.jsx)(`option`,{value:e,children:uT[e]},e))})]}),(0,W.jsx)(`p`,{className:`subtle`,children:l===`stable`?`经过验证的正式版本,适合日常使用。`:l===`beta`?`提前体验准备发布的功能。`:`跟随通过检查的 main 提交,适合开发者体验和验证新功能。`}),(0,W.jsxs)(`div`,{className:`update-control`,children:[(0,W.jsxs)(`div`,{children:[(0,W.jsx)(`strong`,{children:`空闲时自动升级`}),(0,W.jsx)(`p`,{className:`subtle`,children:`定期检查当前渠道,已验证的 Codex 组合在任务结束后安装并重启。`})]}),(0,W.jsx)(q,{role:`switch`,"aria-label":`空闲时自动升级`,"aria-checked":r?.settings.automatic??!1,variant:`secondary`,size:`sm`,disabled:i||p||!r?.supported,onClick:()=>r&&void e.configure({...r.settings,automatic:!r.settings.automatic}),children:r?.settings.automatic?`已开启`:`已关闭`})]}),r&&l!==r.settings.channel&&(0,W.jsxs)(`p`,{className:`subtle`,children:[`当前订阅:`,uT[r.settings.channel],`。成功更新后切换到`,uT[l],`。`]}),f&&(0,W.jsxs)(`div`,{className:`update-available`,children:[(0,W.jsx)(`span`,{children:m?`此渠道已是当前版本`:f.downgrade?`目标版本`:`可用版本`}),(0,W.jsx)(`strong`,{children:f.version}),f.commit&&(0,W.jsx)(`code`,{children:f.commit.slice(0,8)})]}),f?.codex&&(0,W.jsx)(pT,{title:`目标版本兼容性`,value:f.codex}),b&&(0,W.jsxs)(`label`,{className:`update-downgrade update-codex-consent`,children:[(0,W.jsx)(`input`,{type:`checkbox`,"aria-label":`允许尝试未验证的 Codex 组合`,checked:v,disabled:i||p,onChange:e=>g(e.target.checked?_:void 0)}),`我确认尝试 Codex `,y?.version,` 与 Covro `,f?.version,` `,`的未验证组合;此确认仅用于本次升级。`]}),f&&!m&&f.channel===r?.settings.channel&&r.settings.automatic&&y?.status!==`verified`&&(0,W.jsx)(`p`,{className:`update-notice`,role:`status`,children:y?.status===`unverified`?`自动升级已暂停。可以调整 Codex 版本后重新检查,或勾选确认后手动尝试。`:`自动升级已暂停。请先恢复 Codex 连接、调整版本或等待含有效兼容声明的发行版,再重新检查。`}),(0,W.jsxs)(`div`,{className:`update-buttons`,children:[(0,W.jsx)(q,{variant:`secondary`,disabled:i||p,onClick:()=>void e.check(l),children:i?`正在处理…`:`检查更新`}),(0,W.jsx)(q,{disabled:i||p||!f||!r?.supported||!!x||f.downgrade&&!u||m&&l===r.settings.channel,onClick:()=>void e.start(l,u,b&&v&&f?.codex.version?{version:f.codex.version,target:f.version}:void 0),children:m?`使用此渠道`:f?.downgrade?`切换并重启`:`升级并重启`})]}),f?.downgrade&&(0,W.jsxs)(`label`,{className:`update-downgrade`,children:[(0,W.jsx)(`input`,{type:`checkbox`,checked:u,onChange:e=>d(e.target.checked)}),`允许降级;数据库不兼容时仍会阻止切换`]}),r?.run&&(0,W.jsxs)(`section`,{className:`update-progress`,"data-phase":r.run.phase,role:`status`,children:[(0,W.jsx)(`strong`,{children:dT[r.run.phase]}),(0,W.jsxs)(`span`,{children:[r.run.from,` → `,r.run.target]}),(0,W.jsx)(`p`,{children:r.run.message}),p&&(0,W.jsx)(`progress`,{"aria-label":`升级进度`})]}),(a||r?.checkError||o)&&(0,W.jsx)(`p`,{className:`inline-error`,role:`alert`,children:o??a??r?.checkError}),!r?.supported&&r?.unsupportedReason&&(0,W.jsx)(`p`,{className:`update-notice`,children:r.unsupportedReason}),(0,W.jsxs)(`p`,{className:`update-source`,children:[`版本来源:npm 官方 registry · `,l===`stable`?`latest`:l,(0,W.jsxs)(`a`,{href:`https://github.com/yuzheng14/codex-web-ui/releases`,target:`_blank`,rel:`noreferrer`,children:[`更新记录 `,(0,W.jsx)(de,{size:12,"aria-hidden":`true`})]})]}),(0,W.jsx)(`p`,{className:`subtle`,children:`升级保留配置、项目和会话记录。页面关闭也会继续处理,重启后自动恢复连接。`})]})}function hT(e,t){let n=new Map(t.map(e=>[e.id,e])),r=new Set(e.map(e=>e.id));return[...e.map(e=>n.get(e.id)??e),...t.filter(e=>!r.has(e.id))]}var gT=class{latest;chunks=[];constructor(e){this.latest=e}update(e){this.latest=e,(!e.history||e.history.olderCursor===null)&&(this.chunks.length=0)}get cursor(){return(this.chunks.length?this.chunks.at(-1).page:this.latest).history?.olderCursor??null}append(e,t){if(t.id!==this.latest.id||t.projectId!==this.latest.projectId)throw Error(`历史分片不属于当前会话。`);if(!(this.cursor!==e||this.chunks.some(t=>t.cursor===e))){if(t.history?.olderCursor&&(t.history.olderCursor===e||this.chunks.some(e=>e.cursor===t.history.olderCursor)))throw Error(`历史分页未前进,请重试同步会话。`);this.chunks.push({cursor:e,page:t})}}replace(e,t){let n=this.chunks.findIndex(t=>t.cursor===e);if(n<0)return this.append(e,t);if(t.id!==this.latest.id||t.projectId!==this.latest.projectId)throw Error(`历史分片不属于当前会话。`);let r=this.chunks[n];this.chunks[n]={cursor:e,page:t},r.page.history?.olderCursor!==t.history?.olderCursor&&this.chunks.splice(n+1)}getHistoryCursor(e){let t=t=>t.turns.some(t=>t.id===e||t.items.some(t=>t.id===e));if(!t(this.latest))return this.chunks.find(e=>t(e.page))?.cursor}get view(){let e=[];for(let t of this.chunks.slice().reverse())e=hT(e,t.page.turns);return{...this.latest,turns:hT(e,this.latest.turns),history:{olderCursor:this.cursor}}}};function _T(e){return{...e,managed:!1,status:`unknown`,actions:[],execution:void 0,resumeError:void 0,runtimeSettings:void 0,turns:e.turns.map(e=>({...e,status:[`running`,`waitingApproval`,`waitingInput`].includes(e.status)?`unknown`:e.status,reconnect:void 0,items:e.items.map(e=>({...e,status:[`running`,`inProgress`].includes(e.status??``)?`unknown`:e.status}))}))}}var vT=new or,yT=(e,t,n,r=`latest`)=>JSON.stringify([e,t,n,r]),bT=class{scope;constructor(e){this.scope=e}async read(e,t,n){let r=await vT.read(yT(this.scope,e,t,n));if(r&&r.id===t&&r.projectId===e&&Array.isArray(r.turns))try{return _T(r)}catch{return}}write(e,t){return vT.write(yT(this.scope,e.projectId,e.id,t),_T(e))}remove(e,t){return vT.remove(([n,r,i])=>n===this.scope&&r===e&&i===t)}};function xT(e,t,n){let{projectId:r,scope:i,forbidden:a}=n,o=(0,O.useMemo)(()=>i?new bT(i):void 0,[i]),s=(0,O.useRef)(void 0),c=(0,O.useRef)(void 0),l=(0,O.useRef)(!1),u=(0,O.useRef)(new Set),d=(0,O.useRef)(!1),f=(0,O.useRef)(void 0),p=(0,O.useRef)(void 0),[m,h]=(0,O.useState)({loading:!1,cached:!1}),g=(0,O.useCallback)((e=!1)=>{h({id:s.current?.latest.id,scope:i,thread:s.current?.view,loading:e,cached:l.current||u.current.size>0,cacheExhausted:d.current,error:p.current})},[i]);(0,O.useEffect)(()=>{c.current?.abort(),c.current=void 0,s.current=void 0,l.current=!1,u.current.clear(),d.current=!1,f.current=void 0,p.current=void 0,h({id:t,scope:i,loading:!1,cached:!1});let e=!0;return t&&!a&&o?.read(r,t).then(t=>{e&&t&&!s.current&&(s.current=new gT(t),l.current=!0,g())}),t&&a&&o?.remove(r,t),()=>{e=!1,c.current?.abort()}},[t,r,o,i,a,g]),(0,O.useEffect)(()=>{e&&e.id===t&&!a&&(s.current?.latest.id===e.id?s.current.update(e):s.current=new gT(e),l.current=!1,s.current.chunks.length||u.current.clear(),g(!!c.current))},[e,t,i,a,g]),(0,O.useEffect)(()=>{if(!e||a||e.id!==t)return;let n=setTimeout(()=>{o?.write(e)},e.status===`running`?750:0);return()=>clearTimeout(n)},[e,t,o,a]);let _=(0,O.useCallback)(async()=>{let e=s.current,t=f.current??e?.cursor;if(!e||!t||c.current||a)return;let n=new AbortController;c.current=n,p.current=void 0,g(!0);try{let i=await o?.read(r,e.latest.id,t);if(n.signal.aborted||s.current!==e)return;i&&e.cursor===t&&(e.append(t,i),u.current.add(t),g(!0));let a=AbortSignal.any([n.signal,AbortSignal.timeout(35e3)]);for(;t;){let r=await ze.threadHistory(e.latest.id,t,a);if(n.signal.aborted||s.current!==e)return;e.replace(t,r),u.current.delete(t);for(let t of u.current)e.chunks.some(e=>e.cursor===t)||u.current.delete(t);f.current=void 0,d.current=!1,o?.write(r,t),t=u.current.values().next().value,g(!!t)}}catch(i){!n.signal.aborted&&s.current===e&&(f.current=t,p.current=En(i),i instanceof Le&&[401,403,404].includes(i.status)&&(o?.remove(r,e.latest.id),s.current=void 0),g())}finally{c.current===n&&(c.current=void 0)}},[g,o,r,a]),v=(0,O.useCallback)(async()=>{let e=s.current,t=e?.cursor;if(!e||!t||!o||c.current||a)return;let n=new AbortController;c.current=n,g(!0);try{let i=await o.read(r,e.latest.id,t);if(n.signal.aborted||s.current!==e)return;i?(e.append(t,i),u.current.add(t)):d.current=!0,g()}finally{c.current===n&&(c.current=void 0)}},[o,r,a,g]),y=(0,O.useCallback)(e=>s.current?.getHistoryCursor(e),[]),b=!a&&m.id===t&&m.scope===i;return{...m,cached:b&&m.cached,loading:b&&m.loading,error:b?m.error:void 0,thread:b?m.thread:void 0,loadOlder:_,loadCachedOlder:v,getHistoryCursor:y}}function ST(){let[e,t]=(0,O.useState)(),[n,r]=(0,O.useState)(),[i,a]=(0,O.useState)(!1),[o,s]=(0,O.useState)(),c=(0,O.useRef)(!1),l=(0,O.useRef)(!0),u=(0,O.useRef)(0),d=(0,O.useCallback)(async e=>{if(l.current&&(t(e),r(void 0),e.version!==`unknown`&&e.version!==`0.2.1-dev.1`&&!c.current&&(!e.run||e.run.committed||[`rolledBack`,`failed`].includes(e.run.phase)))){c.current=!0;try{await wr()}catch(e){c.current=!1,s(e instanceof Error?e.message:`草稿未能备份,暂缓重载页面`)}}},[]);(0,O.useEffect)(()=>{l.current=!0;let e=!0,t=!1,n=async()=>{if(t)return;t=!0;let n=u.current;try{let t=await Re(`/api/updates`);e&&n===u.current&&await d(t)}catch{e&&r(`连接暂时中断,正在等待服务恢复…`)}finally{t=!1}};n();let i=setInterval(()=>void n(),5e3);return()=>{l.current=!1,e=!1,clearInterval(i)}},[d]);let f=(0,O.useCallback)(async(e,t)=>{u.current++,a(!0),r(void 0);try{await d(await Re(e,t))}catch(e){r(e instanceof Error?e.message:`操作未能确认,请查看升级状态`)}finally{a(!1),u.current++}},[d]);return{status:e,error:n,busy:i,reloadError:o,check:e=>f(`/api/updates/check`,{channel:e}),configure:e=>f(`/api/updates/settings`,e),start:(e,t,n)=>f(`/api/updates/run`,{clientOperationId:crypto.randomUUID(),channel:e,allowDowngrade:t,codexConfirmation:n})}}function CT(e){let t=Object.values(e).filter(e=>typeof e==`number`);return Object.entries(e).filter(([e,n])=>t.indexOf(+e)===-1).map(([e,t])=>t)}function wT(e,t=`|`){return e.map(e=>JT(e)).join(t)}function TT(e,t){return typeof t==`bigint`?t.toString():t}var ET=class{constructor(e){this._getter=e,this._value=void 0}get value(){let e=this._getter;return e!==void 0&&(this._value=e(),this._getter=void 0),this._value}};function DT(e){return new ET(e)}function OT(e){return e==null}function kT(e){let t=+!!e.startsWith(`^`),n=e.endsWith(`$`)?e.length-1:e.length;return e.slice(t,n)}function AT(e,t,n){Object.defineProperty(e,t,{value:n,writable:!0,enumerable:!0,configurable:!0})}function jT(e){let t=Object.getOwnPropertyDescriptor(e,`shape`);return t?.get?t.get.raw:t?.value}function MT(e){return jT(e._zod.def)??e._zod.def.shape}function NT(e,t,n){Object.defineProperty(e,t,{get(){let e=n();return AT(this,t,e),e},enumerable:!0,configurable:!0})}function PT(e,t,n){t in e?AT(e,t,n):e[t]=n}function FT(e,t,n,r){let i=MT(t);for(let a of n){let n=Object.getOwnPropertyDescriptor(i,a);n.enumerable&&(n.get?NT(e,a,()=>{let e=t._zod.def.shape[a];return r?r(e,a):e}):PT(e,a,r?r(n.value,a):n.value))}}function IT(e,t){for(let n of Reflect.ownKeys(t)){let r=Object.getOwnPropertyDescriptor(t,n);r.enumerable&&(r.get?NT(e,n,()=>t[n]):PT(e,n,r.value))}}function LT(...e){let t={};for(let n of e){let e=Object.getOwnPropertyDescriptors(n);Object.assign(t,e)}return Object.defineProperties({},t)}function RT(e){return JSON.stringify(e)}function zT(e){return e.toLowerCase().trim().replace(/[^\w\s-]/g,``).replace(/[\s_-]+/g,`-`).replace(/^-+|-+$/g,``)}var BT=`captureStackTrace`in Error?Error.captureStackTrace:(...e)=>{};function VT(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}var HT=DT(()=>{if(RE.jitless||typeof navigator<`u`&&navigator?.userAgent?.includes(`Cloudflare`))return!1;try{return Function(``),!0}catch{return!1}});function UT(e){if(VT(e)===!1)return!1;let t=e.constructor;if(t===void 0||typeof t!=`function`)return!0;let n=t.prototype;return VT(n)!==!1&&Object.prototype.hasOwnProperty.call(n,`isPrototypeOf`)!==!1}function WT(e){return UT(e)?{...e}:Array.isArray(e)?[...e]:e instanceof Map?new Map(e):e instanceof Set?new Set(e):e}var GT=new Set([`string`,`number`,`symbol`]);function KT(e){return e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}function qT(e,t,n){let r=new e._zod.constr(t??e._zod.def);return(!t||n?.parent)&&(r._zod.parent=e),r}function Q(e){let t=e;if(!t)return{};if(typeof t==`string`)return{error:()=>t};if(t?.message!==void 0){if(t?.error!==void 0)throw Error("Cannot specify both `message` and `error` params");t.error=t.message}return delete t.message,typeof t.error==`string`?{...t,error:()=>t.error}:t}function JT(e){return typeof e==`bigint`?e.toString()+`n`:typeof e==`string`?`"${e}"`:`${e}`}function YT(e){return Object.keys(e).filter(t=>e[t]._zod.optin!==void 0&&e[t]._zod.optout===`optional`)}var XT={safeint:[-(2**53-1),2**53-1],int32:[-2147483648,2147483647],uint32:[0,4294967295],float32:[-34028234663852886e22,34028234663852886e22],float64:[-Number.MAX_VALUE,Number.MAX_VALUE]},ZT={int64:[BigInt(`-9223372036854775808`),BigInt(`9223372036854775807`)],uint64:[BigInt(0),BigInt(`18446744073709551615`)]};function QT(e,t){let n=e._zod.def,r=n.checks;if(r&&r.length>0)throw Error(`.pick() cannot be used on object schemas containing refinements`);let i={};return FT(i,e,$T(e,t)),qT(e,LT(n,{shape:i,checks:[]}))}function $T(e,t){let n=MT(e),r=[];for(let e of Reflect.ownKeys(t)){if(!Object.getOwnPropertyDescriptor(n,e)?.enumerable)throw Error(`Unrecognized key: "${String(e)}"`);t[e]&&r.push(e)}return r}function eE(e,t){let n=e._zod.def,r=n.checks;if(r&&r.length>0)throw Error(`.omit() cannot be used on object schemas containing refinements`);let i=new Set($T(e,t)),a={};return FT(a,e,Reflect.ownKeys(MT(e)).filter(e=>!i.has(e))),qT(e,LT(n,{shape:a,checks:[]}))}function tE(e,t){if(!UT(t))throw Error(`Invalid input to extend: expected a plain object`);let n=e._zod.def.checks;if(n&&n.length>0){let n=MT(e);for(let e of Reflect.ownKeys(t))if(Object.getOwnPropertyDescriptor(n,e)!==void 0)throw Error("Cannot overwrite keys on object schemas containing refinements. Use `.safeExtend()` instead.")}return qT(e,LT(e._zod.def,{shape:nE(e,t)}))}function nE(e,t){let n={};return FT(n,e,Reflect.ownKeys(MT(e))),IT(n,t),n}function rE(e,t){if(!UT(t))throw Error(`Invalid input to safeExtend: expected a plain object`);return qT(e,LT(e._zod.def,{shape:nE(e,t)}))}function iE(e,t){if(!t?._zod?.def)throw Error("Invalid input to merge: expected an object schema. To merge a plain shape, use `.extend()`.");if(e._zod.def.checks?.length)throw Error(`.merge() cannot be used on object schemas containing refinements. Use .safeExtend() instead.`);let n={};return FT(n,e,Reflect.ownKeys(MT(e))),FT(n,t,Reflect.ownKeys(MT(t))),qT(e,LT(e._zod.def,{shape:n,get catchall(){return t._zod.def.catchall},checks:t._zod.def.checks??[]}))}function aE(e,t,n,r=`partial`){let i=t._zod.def.checks;if(i&&i.length>0)throw Error(`.${r}() cannot be used on object schemas containing refinements`);let a=n?new Set($T(t,n)):void 0,o={};return FT(o,t,Reflect.ownKeys(MT(t)),e&&((t,n)=>a&&!a.has(n)?t:new e({type:`optional`,innerType:t}))),qT(t,LT(t._zod.def,{shape:o,checks:[]}))}function oE(e,t,n){let r=n?new Set($T(t,n)):void 0,i={};return FT(i,t,Reflect.ownKeys(MT(t)),(t,n)=>r&&!r.has(n)?t:new e({type:`nonoptional`,innerType:t})),qT(t,LT(t._zod.def,{shape:i}))}function sE(e,t=0){if(e.aborted===!0)return!0;for(let n=t;n<e.issues.length;n++)if(e.issues[n]?.continue!==!0)return!0;return!1}function cE(e,t=0){if(e.aborted===!0)return!0;for(let n=t;n<e.issues.length;n++)if(e.issues[n]?.continue===!1)return!0;return!1}function lE(e,t){return t.map(t=>{var n;return(n=t).path??(n.path=[]),t.path.unshift(e),t})}function uE(e){return typeof e==`string`?e:e?.message}function dE(e){let t=[];for(let n of e??[]){let e=n._zod.def;if(!/_(length|size)$|_equals$/.test(e.check))break;let r=e.maximum??e.length??e.size;r>=0&&t.push([r,n])}return t}function fE(e,t,n){var r;for(let i=t;i<e.length;i++)(r=e[i]).schema??(r.schema=n)}function pE(e,t,n){var r;let i=e.inst?._zod?.traits;i?.has(`$ZodType`)&&(i.has(`$ZodCheck`)?(r=e).schema??(r.schema=e.inst):e.schema=e.inst);let a=e.schema===e.inst?void 0:e.schema?._zod.def?.error,o=e.message?e.message:uE(e.inst?._zod.def?.error?.(e))??uE(a?.(e))??uE(t?.error?.(e))??uE(n.customError?.(e))??uE(n.localeError?.(e))??`Invalid input`,s={};for(let t of Object.keys(e))t!==`inst`&&t!==`schema`&&t!==`continue`&&t!==`input`&&t!==`__proto__`&&(s[t]=e[t]);return s.path??=[],s.message=o,t?.reportInput&&(s.input=e.input),s}var mE=/[\uD800-\uDBFF]/;function hE(e){let t=e.length;if(!mE.test(e))return t;let n=t;for(let r=0;r<t-1;r++)(e.charCodeAt(r)&64512)==55296&&(e.charCodeAt(r+1)&64512)==56320&&(n--,r++);return n}function gE(e){return Array.isArray(e)?`array`:typeof e==`string`?`string`:`unknown`}function _E(e){let t=typeof e;switch(t){case`number`:return Number.isNaN(e)?`nan`:`number`;case`object`:{if(e===null)return`null`;if(Array.isArray(e))return`array`;let t=e;if(t&&Object.getPrototypeOf(t)!==Object.prototype&&`constructor`in t&&t.constructor)return t.constructor.name}}return t}function vE(...e){let[t,n,r]=e;return typeof t==`string`?{message:t,code:`custom`,input:n,inst:r}:{...t}}function yE(e,t){for(let n in t){let r=Object.getOwnPropertyDescriptor(t,n);r.get?Object.defineProperty(e,n,{...r,enumerable:!1}):CE(e,n,r.value)}}function bE(e,t,n,r=!0){return Object.defineProperty(e,t,{configurable:!0,writable:!0,enumerable:r,value:n}),n}function xE(e,t,n){return bE(e,t,n,!1)}function SE(e,t){for(let n in e){let r=e[n];Object.defineProperty(t,n,{configurable:!0,enumerable:!0,get(){return bE(this,n,r(this))},set(e){bE(this,n,e)}})}return t}function CE(e,t,n){Object.defineProperty(e,t,{configurable:!0,get(){return this==null?n:bE(this,t,n.bind(this))},set(e){bE(this,t,e)}})}function wE(e,t){let n=Object.getPrototypeOf(e);return t in n?void 0:n}var TE,EE=!1,DE={configurable:!0,get(){EE=!0}};function OE(e,t,n){let r=Object.getPrototypeOf(e._zod);t in r&&TE!==e._zod?TE=void 0:(TE=e._zod,Object.defineProperty(r,t,{configurable:!0,get(){Object.defineProperty(this,t,DE);let e=EE;EE=!1;try{let r=n(this);return EE?delete this[t]:Object.defineProperty(this,t,{configurable:!0,writable:!0,value:r}),EE||=e,r}catch(n){throw delete this[t],EE||=e,n}},set(e){Object.defineProperty(this,t,{configurable:!0,writable:!0,value:e})}}))}function kE(e,t,n,r){let i=wE(e,t);i&&Object.defineProperty(i,t,{configurable:!0,get(){let e={configurable:!0,writable:!0,enumerable:r,value:void 0};return Object.defineProperty(this,t,e),e.value=n(this),Object.defineProperty(this,t,e),e.value},set(e){Object.defineProperty(this,t,{configurable:!0,writable:!0,enumerable:r,value:e})}})}var AE=`~constantCatch`;function jE(e){let t=()=>e;return t[AE]=!0,t}var ME,NE={value:void 0,enumerable:!1},PE=`captureStackTrace`in Error?Error:null;function FE(e){let t=PE;if(t){let n=t.stackTraceLimit;if(typeof n==`number`){try{t.stackTraceLimit=0}catch{return PE=null,new e}try{return new e}finally{t.stackTraceLimit=n}}}return new e}function $(e,t,n,r){let i={};function a(e){this.def=e,this.constr=d,this.traits=new Set}a.prototype=i;let o=n,s=o&&new WeakSet;function c(n,r){if(!n._zod){NE.value=new a(r);try{Object.defineProperty(n,"_zod",NE)}finally{NE.value=void 0}}else if(n._zod.traits.has(e))return;if(n._zod.traits.add(e),t(n,r),s){let e=Object.getPrototypeOf(n),t=n._zod.constr.prototype,r=e;for(;r&&r!==t;)r=Object.getPrototypeOf(r);let i=r??e;s.has(i)||(s.add(i),yE(i,o))}let i=d.prototype;for(let e in i)Object.prototype.hasOwnProperty.call(i,e)&&(e in n||(n[e]=i[e].bind(n)))}let l=r?.Parent??Object;class u extends l{}Object.defineProperty(u,"name",{value:e});function d(e){let t=r?.Parent?FE(u):this;c(t,e);let n=t._zod.deferred;if(n){for(let e of n)e();t._zod.deferred=void 0}let i=globalThis.__zod_globalConfig?.postProcessor;return i&&i(t),t}return Object.defineProperty(d,"init",{value:c}),Object.defineProperty(d,Symbol.hasInstance,{value:t=>r?.Parent&&t instanceof r.Parent?!0:t?._zod?.traits?.has(e)}),Object.defineProperty(d,"name",{value:e}),d}var IE=class extends Error{constructor(){super(`Encountered Promise during synchronous parse. Use .parseAsync() instead.`)}},LE=class extends Error{constructor(e){super(`Encountered unidirectional transform during encode: ${e}`),this.name=`ZodEncodeError`}};(ME=globalThis).__zod_globalConfig??(ME.__zod_globalConfig={});var RE=globalThis.__zod_globalConfig;function zE(e){return e&&Object.assign(RE,e),RE}function BE(){let e=this._zod;return e.message??=JSON.stringify(e.def,TT,2),e.message}function VE(e){this._zod.message=e}var HE={get:BE,set:VE,enumerable:!0,configurable:!0},UE={value:void 0,enumerable:!1},WE=new WeakSet([Object.prototype,Error.prototype]),GE=(e,t)=>{e.name=`$ZodError`,UE.value=t,Object.defineProperty(e,"issues",UE),UE.value=void 0,Object.defineProperty(e,"message",HE);let n=Object.getPrototypeOf(e);WE.has(n)||(WE.add(n),Object.defineProperty(n,"toString",{configurable:!0,enumerable:!1,get(){let e=()=>this.message;return Object.defineProperty(this,"toString",{value:e,configurable:!0,writable:!0}),e},set(e){Object.defineProperty(this,"toString",{value:e,configurable:!0,writable:!0})}}))},KE=$(`$ZodError`,GE);$(`$ZodError`,GE,void 0,{Parent:Error});function qE(e,t,n){return Object.prototype.hasOwnProperty.call(e,t)||(t===`__proto__`?Object.defineProperty(e,t,{value:n(),writable:!0,enumerable:!0,configurable:!0}):e[t]=n()),e[t]}function JE(e,t=e=>e.message){let n={},r=[];for(let i of e.issues)i.path.length>0?qE(n,i.path[0],()=>[]).push(t(i)):r.push(t(i));return{formErrors:r,fieldErrors:n}}function YE(e,t=e=>e.message){let n={_errors:[]},r=(e,i=[])=>{for(let a of e.issues)if(a.code===`invalid_union`&&a.errors.length)a.errors.map(e=>r({issues:e},[...i,...a.path]));else if(a.code===`invalid_key`)r({issues:a.issues},[...i,...a.path]);else if(a.code===`invalid_element`)r({issues:a.issues},[...i,...a.path]);else{let e=[...i,...a.path];if(e.length===0)n._errors.push(t(a));else{let r=n,i=0;for(;i<e.length;){let n=e[i],o=i===e.length-1;if(n===`_errors`){o&&r._errors.push(t(a)),i++;continue}Object.prototype.hasOwnProperty.call(r,n)||Object.defineProperty(r,n,{value:{_errors:[]},enumerable:!0,writable:!0,configurable:!0});let s=r[n];o&&s._errors.push(t(a)),r=s,i++}}}};return r(e),n}function XE(e,t){return{callee:t?.callee??e,Err:t?.Err}}var ZE=e=>{let t=(n,r,i,a)=>{let o=i?{...i,async:!1}:{async:!1},s=n._zod.run({value:r,issues:[]},o);if(s instanceof Promise)throw new IE;if(s.issues.length){let n=new((a?.Err)??e)(s.issues.map(e=>pE(e,o,zE())));throw BT(n,a?.callee??t),n}return s.value};return t},QE=e=>{let t=async(n,r,i,a)=>{let o=i?{...i,async:!0}:{async:!0},s=n._zod.run({value:r,issues:[]},o);if(s instanceof Promise&&(s=await s),s.issues.length){let n=new((a?.Err)??e)(s.issues.map(e=>pE(e,o,zE())));throw BT(n,a?.callee??t),n}return s.value};return t},$E=e=>(t,n,r)=>{let i=r?{...r,async:!1}:{async:!1},a=t._zod.run({value:n,issues:[]},i);if(a instanceof Promise)throw new IE;return a.issues.length?eD(e,a.issues,i):{success:!0,data:a.value}};function eD(e,t,n){let r;return{success:!1,get error(){return r||(r=new e(t.map(e=>pE(e,n,zE()))),t=void 0,n=void 0),r},set error(e){r=e,t=void 0,n=void 0}}}var tD=e=>async(t,n,r)=>{let i=r?{...r,async:!0}:{async:!0},a=t._zod.run({value:n,issues:[]},i);return a instanceof Promise&&(a=await a),a.issues.length?eD(e,a.issues,i):{success:!0,data:a.value}},nD=Symbol.for(`zod.compile.invalid`),rD=Symbol.for(`zod.compile.fallback`),iD=((e,t,n)=>{let r=e._zod.bag.validator;if(r!==void 0){if(r(t)!==nD)return!0;if(r.definite===!0&&n===void 0)return!1}return aD(e,t,n)});function aD(e,t,n){let r=n?{...n,async:!1,abortEarly:!0}:{async:!1,abortEarly:!0},i=e._zod.bag.fallbackRun,a;if(i?(r[rD]=!0,a=i({value:t,issues:[]},r)):a=e._zod.run({value:t,issues:[]},r),a instanceof Promise)throw new IE;return a.issues.length===0}var oD=async(e,t,n)=>{let r=n?{...n,async:!0,abortEarly:!0}:{async:!0,abortEarly:!0},i=e._zod.run({value:t,issues:[]},r);return i instanceof Promise&&(i=await i),i.issues.length===0},sD=e=>{let t=ZE(e),n=(e,r,i,a)=>{let o=i?{...i,direction:`backward`}:{direction:`backward`};return t(e,r,o,XE(n,a))};return n},cD=e=>{let t=ZE(e),n=(e,r,i,a)=>t(e,r,i,XE(n,a));return n},lD=e=>{let t=QE(e),n=async(e,r,i,a)=>{let o=i?{...i,direction:`backward`}:{direction:`backward`};return await t(e,r,o,XE(n,a))};return n},uD=e=>{let t=QE(e),n=async(e,r,i,a)=>await t(e,r,i,XE(n,a));return n},dD=e=>(t,n,r)=>{let i=r?{...r,direction:`backward`}:{direction:`backward`};return $E(e)(t,n,i)},fD=e=>(t,n,r)=>$E(e)(t,n,r),pD=e=>async(t,n,r)=>{let i=r?{...r,direction:`backward`}:{direction:`backward`};return tD(e)(t,n,i)},mD=e=>async(t,n,r)=>tD(e)(t,n,r),hD=/^[cC][0-9a-z]{6,}$/,gD=/^[0-9a-z]+$/,_D=/^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$/,vD=/^[0-9a-vA-V]{20}$/,yD=/^[A-Za-z0-9]{27}$/,bD=/^[a-zA-Z0-9_-]{21}$/;function xD(e){return RegExp(`^[a-zA-Z0-9_-]{${e}}$`)}var SD=/^P(?:(\d+W)|(?!.*W)(?=\d|T\d)(\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+([.,]\d+)?S)?)?)$/,CD=/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/,wD=e=>e?RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${e}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`):/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/,TD=/^(?:[A-Za-z0-9_'+\-]+\.)*[A-Za-z0-9_'+\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$/,ED=`^(?=[\\s\\S]*[\\p{Extended_Pictographic}\\p{Regional_Indicator}\\u20E3])[\\p{Extended_Pictographic}\\p{Emoji_Component}]+$`;function DD(){return new RegExp(ED,`u`)}var OD=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,kD=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$/,AD=/^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/([0-9]|[1-2][0-9]|3[0-2])$/,jD=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,MD=/^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/,ND=/^(?:[A-Za-z0-9_-]{4})*(?:[A-Za-z0-9_-]{2,3})?$/,PD=/^https?$/,FD=/^\+[1-9]\d{6,14}$/,ID=`(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))`;function LD(e){return RegExp(`^${e}$`)}var RD=LD(ID);function zD(e){let t=`(?:[01]\\d|2[0-3]):[0-5]\\d`;return typeof e.precision==`number`?e.precision===-1?`${t}`:e.precision===0?`${t}:[0-5]\\d`:`${t}:[0-5]\\d\\.\\d{${e.precision}}`:e.seconds?`${t}:[0-5]\\d(?:\\.\\d+)?`:`${t}(?::[0-5]\\d(?:\\.\\d+)?)?`}function BD(e){return RegExp(`^${zD(e)}$`)}function VD(e){let t=[`Z`];e.offset&&t.push(`([+-](?:[01]\\d|2[0-3]):[0-5]\\d)`);let n=`${zD({precision:e.precision,seconds:!0})}(?:${t.join(`|`)})`,r=e.local?`${n}|${zD({precision:e.precision})}`:n;return RegExp(`^${ID}T(?:${r})$`)}var HD=/^[\s\S]{0,}$/,UD=/^[^A-Z]*$/,WD=/^[^a-z]*$/,GD=$(`$ZodCheck`,(e,t)=>{var n;e._zod??={},e._zod.def=t,(n=e._zod).onattach??(n.onattach=[])}),KD=e=>{let t=e.value;return!OT(t)&&t.length!==void 0},qD=$(`$ZodCheckMaxLength`,(e,t)=>{var n;GD.init(e,t),(n=e._zod.def).when??(n.when=KD),e._zod.check=n=>{let r=n.value,i=r.length;if((typeof r==`string`&&i>t.maximum?hE(r):i)<=t.maximum)return;let a=gE(r);n.issues.push({origin:a,code:`too_big`,maximum:t.maximum,inclusive:!0,input:r,inst:e,continue:!t.abort})}}),JD=$(`$ZodCheckMinLength`,(e,t)=>{var n;GD.init(e,t),(n=e._zod.def).when??(n.when=KD),e._zod.check=n=>{let r=n.value,i=r.length;if((typeof r==`string`&&i>=t.minimum&&i<t.minimum*2?hE(r):i)>=t.minimum)return;let a=gE(r);n.issues.push({origin:a,code:`too_small`,minimum:t.minimum,inclusive:!0,input:r,inst:e,continue:!t.abort})}}),YD=$(`$ZodCheckLengthEquals`,(e,t)=>{var n;GD.init(e,t),(n=e._zod.def).when??(n.when=KD),e._zod.check=n=>{let r=n.value,i=r.length,a=typeof r==`string`&&i>=t.length&&i<=t.length*2?hE(r):i;if(a===t.length)return;let o=gE(r),s=a>t.length;n.issues.push({origin:o,...s?{code:`too_big`,maximum:t.length}:{code:`too_small`,minimum:t.length},inclusive:!0,exact:!0,input:n.value,inst:e,continue:!t.abort})}}),XD=$(`$ZodCheckStringFormat`,(e,t)=>{var n,r;GD.init(e,t),t.pattern?(n=e._zod).check??(n.check=n=>{t.pattern.lastIndex=0,!t.pattern.test(n.value)&&n.issues.push({origin:`string`,code:`invalid_format`,format:t.format,input:n.value,...t.pattern?{pattern:t.pattern.toString()}:{},inst:e,continue:!t.abort})}):(r=e._zod).check??(r.check=()=>{})}),ZD=$(`$ZodCheckRegex`,(e,t)=>{XD.init(e,t),e._zod.check=n=>{t.pattern.lastIndex=0,!t.pattern.test(n.value)&&n.issues.push({origin:`string`,code:`invalid_format`,format:`regex`,input:n.value,pattern:t.pattern.toString(),inst:e,continue:!t.abort})}}),QD=$(`$ZodCheckLowerCase`,(e,t)=>{t.pattern??=UD,XD.init(e,t)}),$D=$(`$ZodCheckUpperCase`,(e,t)=>{t.pattern??=WD,XD.init(e,t)}),eO=$(`$ZodCheckIncludes`,(e,t)=>{GD.init(e,t);let n=KT(t.includes);t.pattern=new RegExp(typeof t.position==`number`?`^.{${t.position},}${n}`:n),e._zod.check=n=>{n.value.includes(t.includes,t.position)||n.issues.push({origin:`string`,code:`invalid_format`,format:`includes`,includes:t.includes,input:n.value,inst:e,continue:!t.abort})}}),tO=$(`$ZodCheckStartsWith`,(e,t)=>{GD.init(e,t);let n=RegExp(`^${KT(t.prefix)}.*`);t.pattern??=n,e._zod.check=n=>{n.value.startsWith(t.prefix)||n.issues.push({origin:`string`,code:`invalid_format`,format:`starts_with`,prefix:t.prefix,input:n.value,inst:e,continue:!t.abort})}}),nO=$(`$ZodCheckEndsWith`,(e,t)=>{GD.init(e,t);let n=RegExp(`.*${KT(t.suffix)}$`);t.pattern??=n,e._zod.check=n=>{n.value.endsWith(t.suffix)||n.issues.push({origin:`string`,code:`invalid_format`,format:`ends_with`,suffix:t.suffix,input:n.value,inst:e,continue:!t.abort})}}),rO=$(`$ZodCheckOverwrite`,(e,t)=>{GD.init(e,t),e._zod.check=e=>{e.value=t.tx(e.value)}}),iO=class{constructor(e=[],t={}){this.content=[],this.indent=0,this.args=e,this.closed=t}indented(e){this.indent+=1;try{e(this)}finally{--this.indent}}write(e){if(typeof e==`function`){e(this,{execution:`sync`}),e(this,{execution:`async`});return}let t=e.split(`
87
87
  `).filter(e=>e),n=Math.min(...t.map(e=>e.length-e.trimStart().length)),r=t.map(e=>e.slice(n)).map(e=>` `.repeat(this.indent*2)+e);for(let e of r)this.content.push(e)}compile(){let e=Function,t=this?.content??[``];return new e(...Object.keys(this.closed),`return function (${this.args.join(`, `)}) {\n${t.join(`
88
88
  `)}\n};`)(...Object.values(this.closed))}},aO={major:4,minor:6,patch:6},oO=$(`$ZodType`,(e,t)=>{var n;e??={},e._zod.def=t,e._zod.bag=e._zod.bag||{},e._zod.version=aO;let r=e._zod.def.checks,i=e._zod.traits.has(`$ZodCheck`)?[e,...r??[]]:r?.length?[...r]:[];for(let t of i)for(let n of t._zod.onattach)n(e);if(i.length===0)(n=e._zod).deferred??(n.deferred=[]),e._zod.deferred?.push(()=>{e._zod.run=e._zod.parse});else{let t=(t,n,r)=>{if(t.memo)return t;let i=sE(t),a;for(let o of n){if(o._zod.def.when){if(cE(t)||!o._zod.def.when(t))continue}else if(i)continue;let n=t.issues.length,s=o._zod.check(t);if(s instanceof Promise&&r?.async===!1)throw new IE;if(a||s instanceof Promise)a=(a??Promise.resolve()).then(async()=>{await s,t.issues.length!==n&&(fE(t.issues,n,e),i||=sE(t,n))});else{if(t.issues.length===n)continue;fE(t.issues,n,e),i||=sE(t,n)}}return a?a.then(()=>t):t},n=(n,r,a)=>{if(sE(n))return n.aborted=!0,n;let o=t(r,i,a);if(o instanceof Promise){if(a.async===!1)throw new IE;return o.then(t=>e._zod.parse(t,a))}return e._zod.parse(o,a)};e._zod.run=(r,a)=>{if(a.skipChecks)return e._zod.parse(r,a);if(a.direction===`backward`){let t=e._zod.parse({value:r.value,issues:[]},{...a,skipChecks:!0});return t instanceof Promise?t.then(e=>n(e,r,a)):n(t,r,a)}let o=e._zod.parse(r,a);if(o instanceof Promise){if(a.async===!1)throw new IE;return o.then(e=>t(e,i,a))}return t(o,i,a)}}},{get"~standard"(){return xE(this,`~standard`,lO(this))},set"~standard"(e){bE(this,`~standard`,e)}}),sO=(e,t)=>e.issues.length?{issues:e.issues.map(e=>pE(e,t,zE()))}:{value:e.value};async function cO(e,t){let n={async:!0};return sO(await e._zod.run({value:t,issues:[]},n),n)}function lO(e){return{validate:t=>{let n={async:!1};try{let r=e._zod.run({value:t,issues:[]},n);if(!(r instanceof Promise))return sO(r,n)}catch{}return cO(e,t)},vendor:`zod`,version:1}}var uO=$(`$ZodString`,(e,t)=>{oO.init(e,t),e._zod.pattern=t.pattern??HD,e._zod.parse=(n,r)=>{if(t.coerce)try{n.value=String(n.value)}catch{}return typeof n.value==`string`||n.issues.push({expected:`string`,code:`invalid_type`,input:n.value,inst:e}),n}}),dO=$(`$ZodStringFormat`,(e,t)=>{XD.init(e,t),uO.init(e,t)}),fO=$(`$ZodGUID`,(e,t)=>{t.pattern??=CD,dO.init(e,t)}),pO=$(`$ZodUUID`,(e,t)=>{if(t.version){let e={v1:1,v2:2,v3:3,v4:4,v5:5,v6:6,v7:7,v8:8}[t.version];if(e===void 0)throw Error(`Invalid UUID version: "${t.version}"`);t.pattern??=wD(e)}else t.pattern??=wD();dO.init(e,t)}),mO=$(`$ZodEmail`,(e,t)=>{t.pattern??=TD,dO.init(e,t)});function hO(e){try{return typeof URL<`u`&&typeof URL.canParse==`function`?URL.canParse(e):(new URL(e),!0)}catch{return!1}}function gO(e,t){return!(`normalize`in t)&&!(`hostname`in t)&&!(`protocol`in t)?hO(e)||2:_O(e,t)}function _O(e,t){if(!t.normalize&&t.protocol?.source===PD.source&&!/^https?:\/\//i.test(e))return 1;try{if(typeof URL<`u`){let t=URL;if(typeof t.parse==`function`)return t.parse(e)??2}return new URL(e)}catch{return 2}}var vO=/[\t\n\r]/g;function yO(e){return e.replace(vO,``)}function bO(e,t){return t.lastIndex=0,t.test(e.hostname)}function xO(e,t){return t.lastIndex=0,t.test(e.protocol.endsWith(`:`)?e.protocol.slice(0,-1):e.protocol)}var SO=$(`$ZodURL`,(e,t)=>{dO.init(e,t),e._zod.check=n=>{try{let r=n.value.trim(),i=gO(r,t);if(i===1){n.issues.push({code:`invalid_format`,format:`url`,note:`Invalid URL format`,input:n.value,inst:e,continue:!t.abort});return}if(i===2){n.issues.push({code:`invalid_format`,format:`url`,input:n.value,inst:e,continue:!t.abort});return}if(i===!0){n.value=yO(r);return}t.hostname&&!bO(i,t.hostname)&&n.issues.push({code:`invalid_format`,format:`url`,note:`Invalid hostname`,pattern:t.hostname.source,input:n.value,inst:e,continue:!t.abort}),t.protocol&&!xO(i,t.protocol)&&n.issues.push({code:`invalid_format`,format:`url`,note:`Invalid protocol`,pattern:t.protocol.source,input:n.value,inst:e,continue:!t.abort}),n.value=t.normalize?i.href:yO(r);return}catch{n.issues.push({code:`invalid_format`,format:`url`,input:n.value,inst:e,continue:!t.abort})}}}),CO=$(`$ZodEmoji`,(e,t)=>{t.pattern??=DD(),dO.init(e,t)}),wO=$(`$ZodNanoID`,(e,t)=>{if(t.length!==void 0&&(!Number.isInteger(t.length)||t.length<1))throw Error(`Invalid nanoid length: ${t.length}`);t.pattern??=t.length===void 0?bD:xD(t.length),dO.init(e,t)}),TO=$(`$ZodCUID`,(e,t)=>{t.pattern??=hD,dO.init(e,t)}),EO=$(`$ZodCUID2`,(e,t)=>{t.pattern??=gD,dO.init(e,t)}),DO=$(`$ZodULID`,(e,t)=>{t.pattern??=_D,dO.init(e,t)}),OO=$(`$ZodXID`,(e,t)=>{t.pattern??=vD,dO.init(e,t)}),kO=$(`$ZodKSUID`,(e,t)=>{t.pattern??=yD,dO.init(e,t)}),AO=$(`$ZodISODateTime`,(e,t)=>{t.pattern??=VD(t),dO.init(e,t)}),jO=$(`$ZodISODate`,(e,t)=>{t.pattern??=RD,dO.init(e,t)}),MO=$(`$ZodISOTime`,(e,t)=>{t.pattern??=BD(t),dO.init(e,t)}),NO=$(`$ZodISODuration`,(e,t)=>{t.pattern??=SD,dO.init(e,t)}),PO=$(`$ZodIPv4`,(e,t)=>{t.pattern??=OD,dO.init(e,t)}),FO=/^[0-9a-fA-F:.]+$/;function IO(e){return FO.test(e)?hO(`http://[${e}]`):!1}var LO=$(`$ZodIPv6`,(e,t)=>{t.pattern??=kD,dO.init(e,t),e._zod.check=n=>{IO(n.value)||n.issues.push({code:`invalid_format`,format:`ipv6`,input:n.value,inst:e,continue:!t.abort})}}),RO=$(`$ZodCIDRv4`,(e,t)=>{t.pattern??=AD,dO.init(e,t)});function zO(e){let t=e.split(`/`);if(t.length!==2)return!1;let[n,r]=t;if(!r)return!1;let i=Number(r);return`${i}`!==r||i<0||i>128?!1:IO(n)}var BO=$(`$ZodCIDRv6`,(e,t)=>{t.pattern??=jD,dO.init(e,t),e._zod.check=n=>{zO(n.value)||n.issues.push({code:`invalid_format`,format:`cidrv6`,input:n.value,inst:e,continue:!t.abort})}});function VO(e){if(e===``)return!0;if(/\s/.test(e)||e.length%4!=0)return!1;try{return atob(e),!0}catch{return!1}}var HO=/^[0-9a-zA-Z+/]*={0,2}$/,UO=$(`$ZodBase64`,(e,t)=>{t.pattern??=HO,dO.init(e,t),e._zod.check=n=>{VO(n.value)||n.issues.push({code:`invalid_format`,format:`base64`,input:n.value,inst:e,continue:!t.abort})}}),WO=/^[A-Za-z0-9_-]*$/;function GO(e){if(!WO.test(e))return!1;let t=e.replace(/[-_]/g,e=>e===`-`?`+`:`/`);return VO(t.padEnd(Math.ceil(t.length/4)*4,`=`))}var KO=$(`$ZodBase64URL`,(e,t)=>{t.pattern??=WO,dO.init(e,t),e._zod.check=n=>{GO(n.value)||n.issues.push({code:`invalid_format`,format:`base64url`,input:n.value,inst:e,continue:!t.abort})}}),qO=$(`$ZodE164`,(e,t)=>{t.pattern??=FD,dO.init(e,t)});function JO(e,t=null){try{let n=e.split(`.`);if(n.length!==3)return!1;let[r]=n;if(!r)return!1;let i=JSON.parse(atob(r));return!(`typ`in i&&i?.typ!==`JWT`||!i.alg||t&&(!(`alg`in i)||i.alg!==t))}catch{return!1}}var YO=$(`$ZodJWT`,(e,t)=>{dO.init(e,t),e._zod.check=n=>{JO(n.value,t.alg)||n.issues.push({code:`invalid_format`,format:`jwt`,input:n.value,inst:e,continue:!t.abort})}}),XO=$(`$ZodUnknown`,(e,t)=>{oO.init(e,t),e._zod.parse=e=>e}),ZO=$(`$ZodNever`,(e,t)=>{oO.init(e,t),e._zod.parse=(t,n)=>(t.issues.push({expected:`never`,code:`invalid_type`,input:t.value,inst:e}),t)});function QO(e,t){let n=dE(e._zod.def.checks);if(!n.length)return;let r=Math.min(...n.map(e=>e[0])),i=e._zod.parse;e._zod.parse=(n,a)=>{let o=t(n.value);if(o>r&&!a?.skipChecks&&a?.direction!==`backward`){for(let[t,r]of dE(e._zod.def.checks))if(o>t&&r._zod.def.when(n)){let t=n.issues.length;return r._zod.check(n),n.issues[t].continue=!1,fE(n.issues,t,e),n}}return i(n,a)}}var $O=e=>Array.isArray(e)?e.length:-1;function ek(e,t,n){e.issues.length&&t.issues.push(...lE(n,e.issues)),t.value[n]=e.value}var tk=$(`$ZodArray`,(e,t)=>{oO.init(e,t);let n=RE.memoizer;n?.attach(e),e._zod.parse=(r,i)=>{let a=r.value;if(!Array.isArray(a))return r.issues.push({expected:`array`,code:`invalid_type`,input:a,inst:e}),r;r.value=n?n.alloc(e,r,Array(a.length),i):Array(a.length);let o=[],s=i?.abortEarly;for(let e=0;e<a.length;e++){let n=a[e],c=t.element._zod.run({value:n,issues:[]},i);if(c instanceof Promise)o.push(c.then(t=>ek(t,r,e)));else if(ek(c,r,e),s&&c.issues.length!==0&&sE(c))break}return o.length?Promise.all(o).then(()=>r):r},QO(e,$O)});function nk(e,t,n,r,i,a){let o=n in r,s=a===`optional`;if(o||!s||i!==`optional`){if(e.issues.length){if(i!==void 0&&s&&!o)return;t.issues.push(...lE(n,e.issues))}!o&&i===void 0?e.issues.length||t.issues.push({code:`invalid_type`,expected:`nonoptional`,input:void 0,path:[n]}):e.value===void 0?(o||i===`defaulted`&&!s)&&(t.value[n]=void 0):t.value[n]=e.value}}var rk=[];function ik(e){let t=Object.keys(e.shape),n=Object.getOwnPropertySymbols(e.shape),r=n.length?n:rk,i=r.length?[...t,...r]:t;for(let t of i)if(!e.shape?.[t]?._zod?.traits?.has(`$ZodType`))throw Error(`Invalid element at key "${String(t)}": expected a Zod schema`);let a=YT(e.shape);return{...e,allKeys:i,symbolKeys:r,keySet:new Set(t),numKeys:t.length,optionalKeys:new Set(a)}}function ak(e,t,n,r,i,a,o){let s=[],c=i.keySet,l=i.catchall._zod,u=l.def.type,d=l.optin,f=l.optout,p=0;for(let i in t){if(o&&n.issues.length!==p){if(sE(n,p))break;p=n.issues.length}if(c.has(i))continue;if(i===`__proto__`){u===`never`&&s.push(i);continue}if(u===`never`){s.push(i);continue}let a=l.run({value:t[i],issues:[]},r);a instanceof Promise?e.push(a.then(e=>nk(e,n,i,t,d,f))):nk(a,n,i,t,d,f)}return s.length&&n.issues.push({code:`unrecognized_keys`,keys:s,input:t,inst:a,continue:!0}),e.length?Promise.all(e).then(()=>n):n}var ok=$(`$ZodObject`,(e,t)=>{oO.init(e,t);let n=Object.getOwnPropertyDescriptor(t,`shape`),r=n?.get?n.get.raw:t.shape??{};if(r){let e=()=>{let n={...r};return Object.defineProperty(t,"shape",{value:n}),e.raw=n,n};e.raw=r,Object.defineProperty(t,"shape",{get:e})}let i=DT(()=>ik(t));OE(e,`propValues`,e=>{let t=e.def.shape,n={};for(let e in t){let r=t[e]._zod;if(r.values){Object.prototype.hasOwnProperty.call(n,e)||AT(n,e,new Set);for(let t of r.values)n[e].add(t);r.optin!==void 0&&n[e].add(void 0)}}return n});let a=VT,o=t.catchall,s,c=RE.memoizer;c?.attach(e),e._zod.parse=(t,n)=>{s??=i.value;let r=t.value;if(!a(r))return t.issues.push({expected:`object`,code:`invalid_type`,input:r,inst:e}),t;t.value=c?c.alloc(e,t,{},n):{};let l=[],u=s.shape,d=n?.abortEarly,f=t.issues.length;for(let e of s.allKeys){if(d&&t.issues.length!==f){if(sE(t,f))break;f=t.issues.length}if(e===`__proto__`)continue;let i=u[e],a=i._zod.optin,o=i._zod.optout,s=i._zod.run({value:r[e],issues:[]},n);s instanceof Promise?l.push(s.then(n=>nk(n,t,e,r,a,o))):nk(s,t,e,r,a,o)}return o?ak(l,r,t,n,i.value,e,d===!0):l.length?Promise.all(l).then(()=>t):t}}),sk=$(`$ZodObjectJIT`,(e,t)=>{ok.init(e,t);let n=e._zod.parse,r=DT(()=>ik(t)),i=RE.memoizer,a=t=>{let n=r.value,a=n.symbolKeys,o=new iO([`payload`,`ctx`],{shape:t,inst:e,memo:i,syms:a}),s=e=>`shape[${e}]._zod.run({ value: input[${e}], issues: [] }, ctx)`,c=(e,t)=>`
89
89
  let ${e}_ab = false;
@@ -6,7 +6,7 @@
6
6
  <meta name="theme-color" content="#f7f8fa" />
7
7
  <link rel="icon" type="image/svg+xml" href="/covro.svg" />
8
8
  <title>Covro · 工作空间</title>
9
- <script type="module" crossorigin src="/assets/index-B9_AU2Fw.js"></script>
9
+ <script type="module" crossorigin src="/assets/index-ycdL3pt0.js"></script>
10
10
  <link rel="stylesheet" crossorigin href="/assets/index-BmbPtei8.css">
11
11
  </head>
12
12
  <body>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@covro/covro",
3
- "version": "0.2.0",
3
+ "version": "0.2.1-dev.1",
4
4
  "description": "A self-hosted browser workspace for your local Codex",
5
5
  "bin": {
6
6
  "covro": "bin/covro.mjs"
@@ -88,9 +88,9 @@
88
88
  "unsupported": []
89
89
  },
90
90
  "covroCommit": "e65683ac5f2d4a235ed61ec8e642cb162da5f93f",
91
- "covroChannel": "stable",
91
+ "covroChannel": "dev",
92
92
  "covroRelease": {
93
- "runId": "39425684897",
93
+ "runId": "39425603284",
94
94
  "runAttempt": "1"
95
95
  }
96
96
  }