@zonease/aiworker-cli 0.4.0 → 0.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zonease/aiworker-cli",
3
- "version": "0.4.0",
3
+ "version": "0.4.2",
4
4
  "description": "AIWorker fleet CLI — gateway / worker / operator 单一二进制",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -25,6 +25,6 @@ Error generating stack: `+e.message+`
25
25
  ${e.left}px ${e.top}px
26
26
  )`}return(0,H.jsx)(`div`,{ref:t,role:`presentation`,"data-base-ui-inert":``,...r,style:{position:`fixed`,inset:0,userSelect:`none`,WebkitUserSelect:`none`,clipPath:i}})}),xv=V.forwardRef(function(e,t){let{keepMounted:n=!1,...r}=e,{store:i}=Y_(),a=i.useState(`mounted`),o=i.useState(`modal`);return a||n?(0,H.jsx)(sv.Provider,{value:n,children:(0,H.jsxs)(Ff,{ref:t,...r,children:[a&&o===!0&&(0,H.jsx)(bv,{ref:i.context.internalBackdropRef,inert:pg(!open)}),e.children]})}):null}),Sv={},Cv={},wv=``;function Tv(e){if(typeof document>`u`)return!1;let t=Jd(e);return Hc(t).innerWidth-t.documentElement.clientWidth>0}function Ev(e){let t=Jd(e),n=t.documentElement,r=t.body,i=Jc(n)?n:r,a=i.style.overflow;return i.style.overflow=`hidden`,()=>{i.style.overflow=a}}function Dv(e){let t=Jd(e),n=t.documentElement,r=t.body,i=Hc(n),a=0,o=0,s=Kd.create(),c=typeof CSS<`u`&&CSS.supports?.(`scrollbar-gutter`,`stable`);if(xl&&(i.visualViewport?.scale??1)!==1)return()=>{};function l(){let e=i.getComputedStyle(n),t=i.getComputedStyle(r),s=(e.scrollbarGutter||``).includes(`both-edges`)?`stable both-edges`:`stable`;a=n.scrollTop,o=n.scrollLeft,Sv={scrollbarGutter:n.style.scrollbarGutter,overflowY:n.style.overflowY,overflowX:n.style.overflowX},wv=n.style.scrollBehavior,Cv={position:r.style.position,height:r.style.height,width:r.style.width,boxSizing:r.style.boxSizing,overflowY:r.style.overflowY,overflowX:r.style.overflowX,scrollBehavior:r.style.scrollBehavior};let l=n.scrollHeight>n.clientHeight,u=n.scrollWidth>n.clientWidth,d=e.overflowY===`scroll`||t.overflowY===`scroll`,f=e.overflowX===`scroll`||t.overflowX===`scroll`,p=Math.max(0,i.innerWidth-n.clientWidth),m=Math.max(0,i.innerHeight-n.clientHeight),h=parseFloat(t.marginTop)+parseFloat(t.marginBottom),g=parseFloat(t.marginLeft)+parseFloat(t.marginRight),_=Jc(n)?n:r;if(c){n.style.scrollbarGutter=s,_.style.overflowY=`hidden`,_.style.overflowX=`hidden`;return}Object.assign(n.style,{scrollbarGutter:s,overflowY:`hidden`,overflowX:`hidden`}),(l||d)&&(n.style.overflowY=`scroll`),(u||f)&&(n.style.overflowX=`scroll`),Object.assign(r.style,{position:`relative`,height:h||m?`calc(100dvh - ${h+m}px)`:`100dvh`,width:g||p?`calc(100vw - ${g+p}px)`:`100vw`,boxSizing:`border-box`,overflow:`hidden`,scrollBehavior:`unset`}),r.scrollTop=a,r.scrollLeft=o,n.setAttribute(`data-base-ui-scroll-locked`,``),n.style.scrollBehavior=`unset`}function u(){Object.assign(n.style,Sv),Object.assign(r.style,Cv),c||(n.scrollTop=a,n.scrollLeft=o,n.removeAttribute(`data-base-ui-scroll-locked`),n.style.scrollBehavior=wv)}function d(){u(),s.request(l)}return l(),i.addEventListener(`resize`,d),()=>{s.cancel(),u(),typeof i.removeEventListener==`function`&&i.removeEventListener(`resize`,d)}}var Ov=new class{lockCount=0;restore=null;timeoutLock=Rc.create();timeoutUnlock=Rc.create();acquire(e){return this.lockCount+=1,this.lockCount===1&&this.restore===null&&this.timeoutLock.start(0,()=>this.lock(e)),this.release}release=()=>{--this.lockCount,this.lockCount===0&&this.restore&&this.timeoutUnlock.start(0,this.unlock)};unlock=()=>{this.lockCount===0&&this.restore&&(this.restore?.(),this.restore=null)};lock(e){if(this.lockCount===0||this.restore!==null)return;let t=Jd(e).documentElement,n=Hc(t).getComputedStyle(t).overflowY;if(n===`hidden`||n===`clip`){this.restore=_d;return}let r=Sl||!Tv(e);this.restore=r?Ev(e):Dv(e)}};function kv(e=!0,t=null){kc(()=>{if(e)return Ov.acquire(t)},[e,t])}function Av(e){let t=V.useRef(``),n=V.useCallback(n=>{n.defaultPrevented||(t.current=n.pointerType,e(n,n.pointerType))},[e]);return{onClick:V.useCallback(n=>{if(n.detail===0){e(n,`keyboard`);return}`pointerType`in n&&e(n,n.pointerType),e(n,t.current),t.current=``},[e]),onPointerDown:n}}function jv(e){let[t,n]=V.useState(null),r=K((t,r)=>{e||n(r)}),i=V.useCallback(()=>{n(null)},[]),{onClick:a,onPointerDown:o}=Av(r);return V.useMemo(()=>({openMethod:t,reset:i,triggerProps:{onClick:a,onPointerDown:o}}),[t,i,a,o])}function Mv(e){let{store:t,parentContext:n,actionsRef:r}=e,i=t.useState(`open`),a=t.useState(`disablePointerDismissal`),o=t.useState(`modal`),s=t.useState(`popupElement`),{openMethod:c,triggerProps:l,reset:u}=jv(i);Wm(t);let{forceUnmount:d}=Gm(i,t,()=>{u()}),f=K(e=>{let n=jd(e);return n.preventUnmountOnClose=()=>{t.set(`preventUnmountingOnClose`,!0)},n}),p=V.useCallback(()=>{t.setOpen(!1,f(Ad))},[t,f]);V.useImperativeHandle(r,()=>({unmount:d,close:p}),[d,p]);let m=Qm({popupStore:t,onOpenChange:t.setOpen,treatPopupAsFloatingElement:!0,noEmit:!0}),[h,g]=V.useState(0),_=h===0,v=hh(m),y=sm(m,{outsidePressEvent(){return t.context.internalBackdropRef.current||t.context.backdropRef.current?`intentional`:{mouse:o===`trap-focus`?`sloppy`:`intentional`,touch:`sloppy`}},outsidePress(e){if(`button`in e&&e.button!==0||`touches`in e&&e.touches.length!==1)return!1;let n=Pl(e);if(_&&!a){let e=n;return o&&(t.context.internalBackdropRef.current||t.context.backdropRef.current)?t.context.internalBackdropRef.current===e||t.context.backdropRef.current===e||Nl(e,s)&&!e?.hasAttribute(`data-base-ui-portal`):!0}return!1},escapeKey:_});kv(i&&o===!0,s);let{getReferenceProps:b,getFloatingProps:x,getTriggerProps:S}=dh([v,y]);t.useContextCallback(`onNestedDialogOpen`,e=>{g(e+1)}),t.useContextCallback(`onNestedDialogClose`,()=>{g(0)}),V.useEffect(()=>(n?.onNestedDialogOpen&&i&&n.onNestedDialogOpen(h),n?.onNestedDialogClose&&!i&&n.onNestedDialogClose(),()=>{n?.onNestedDialogClose&&i&&n.onNestedDialogClose()}),[i,n,h]);let C=V.useMemo(()=>b(l),[b,l]),w=V.useMemo(()=>S(l),[S,l]),T=V.useMemo(()=>x(),[x]);t.useSyncedValues({openMethod:c,activeTriggerProps:C,inactiveTriggerProps:w,popupProps:T,floatingRootContext:m,nestedOpenDialogCount:h})}var Nv={...Ym,modal:km(e=>e.modal),nested:km(e=>e.nested),nestedOpenDialogCount:km(e=>e.nestedOpenDialogCount),disablePointerDismissal:km(e=>e.disablePointerDismissal),openMethod:km(e=>e.openMethod),descriptionElementId:km(e=>e.descriptionElementId),titleElementId:km(e=>e.titleElementId),viewportElement:km(e=>e.viewportElement),role:km(e=>e.role)},Pv=class extends Im{constructor(e){super(Fv(e),{popupRef:V.createRef(),backdropRef:V.createRef(),internalBackdropRef:V.createRef(),triggerElements:new Km,onOpenChange:void 0,onOpenChangeComplete:void 0},Nv)}setOpen=(e,t)=>{if(t.preventUnmountOnClose=()=>{this.set(`preventUnmountingOnClose`,!0)},!e&&t.trigger==null&&this.state.activeTriggerId!=null&&(t.trigger=this.state.activeTriggerElement??void 0),this.context.onOpenChange?.(e,t),t.isCanceled)return;let n={open:e,nativeEvent:t.event,reason:t.reason,nested:this.state.nested};this.state.floatingRootContext.context.events?.emit(`openchange`,n);let r={open:e},i=t.trigger?.id??null;(i||e)&&(r.activeTriggerId=i,r.activeTriggerElement=t.trigger??null),this.update(r)}};function Fv(e={}){return{...Jm(),modal:!0,disablePointerDismissal:!1,popupElement:null,viewportElement:null,descriptionElementId:void 0,titleElementId:void 0,openMethod:null,nested:!1,nestedOpenDialogCount:0,role:`dialog`,...e}}function Iv(e){let{children:t,open:n,defaultOpen:r=!1,onOpenChange:i,onOpenChangeComplete:a,disablePointerDismissal:o=!1,modal:s=!0,actionsRef:c,handle:l,triggerId:u,defaultTriggerId:d=null}=e,f=Y_(!0),p=!!f,m=Pc(()=>l?.store??new Pv({open:n??r,activeTriggerId:u===void 0?d:u,modal:s,disablePointerDismissal:o,nested:p})).current;m.useControlledProp(`open`,n,r),m.useControlledProp(`activeTriggerId`,u,d),m.useSyncedValues({disablePointerDismissal:o,nested:p,modal:s}),m.useContextCallback(`onOpenChange`,i),m.useContextCallback(`onOpenChangeComplete`,a);let h=m.useState(`payload`);Mv({store:m,actionsRef:c,parentContext:f?.store.context,onOpenChange:i,triggerIdProp:u});let g=V.useMemo(()=>({store:m}),[m]);return(0,H.jsx)(J_.Provider,{value:g,children:typeof t==`function`?t({payload:h}):t})}var Lv=V.forwardRef(function(e,t){let{render:n,className:r,id:i,...a}=e,{store:o}=Y_(),s=Ih(i);return o.useSyncedValueWithCleanup(`titleElementId`,s),Df(`h2`,e,{ref:t,props:[{id:s},a]})}),Rv=Iv,zv=rv,Bv=xv;function Vv({className:e,...t}){return(0,H.jsx)(Z_,{className:Cc(`fixed inset-0 z-50 bg-background/80 backdrop-blur-sm data-[ending-style]:opacity-0 data-[starting-style]:opacity-0 transition-opacity duration-150`,e),...t})}function Hv({className:e,children:t,showCloseButton:n=!0,...r}){return(0,H.jsxs)(Bv,{children:[(0,H.jsx)(Vv,{}),(0,H.jsxs)(yv,{className:Cc(`fixed left-1/2 top-1/2 z-50 grid w-full max-w-lg -translate-x-1/2 -translate-y-1/2 gap-4 border bg-background p-6 shadow-lg outline-none sm:rounded-lg`,`data-[ending-style]:opacity-0 data-[starting-style]:opacity-0 data-[ending-style]:scale-95 data-[starting-style]:scale-95 transition-[opacity,transform] duration-150`,e),...r,children:[t,n&&(0,H.jsx)(zv,{className:`absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2`,"aria-label":`Close dialog`,children:(0,H.jsx)(Xo,{className:`size-4`})})]})]})}function Uv({className:e,...t}){return(0,H.jsx)(`div`,{className:Cc(`flex flex-col space-y-1.5 text-left`,e),...t})}function Wv({className:e,...t}){return(0,H.jsx)(`div`,{className:Cc(`flex flex-col-reverse gap-2 sm:flex-row sm:justify-end`,e),...t})}function Gv({className:e,...t}){return(0,H.jsx)(Lv,{className:Cc(`text-lg font-semibold leading-none tracking-tight`,e),...t})}function Kv({className:e,...t}){return(0,H.jsx)(iv,{className:Cc(`text-sm text-muted-foreground`,e),...t})}function qv({className:e,...t}){return(0,H.jsx)(`div`,{className:Cc(`animate-pulse rounded-md bg-muted`,e),...t})}function Jv(){let e=m_(),t=h_(),n=g_(),[r,i]=(0,V.useState)(null),[a,o]=(0,V.useState)(null),[s,c]=(0,V.useState)(null);async function l(){if(a){c(null);try{await n.mutateAsync(a),o(null)}catch(e){c(e instanceof Eg?e.message:`删除失败。`)}}}return(0,H.jsxs)(`div`,{className:`flex max-w-3xl flex-col gap-6`,children:[(0,H.jsxs)(`header`,{className:`flex items-start justify-between gap-4`,children:[(0,H.jsxs)(`div`,{children:[(0,H.jsx)(`h1`,{className:`text-2xl font-semibold tracking-tight`,children:`Secrets`}),(0,H.jsx)(`p`,{className:`mt-1 text-sm text-muted-foreground`,children:`常规 secret 通过配置编辑器管理;这里用于 out-of-band 轮换 / 应急处置。`})]}),(0,H.jsxs)(Oc,{onClick:()=>i({kind:`add`}),children:[(0,H.jsx)(Ro,{className:`size-4`}),`添加 secret`]})]}),e.isLoading?(0,H.jsx)(qv,{className:`h-40`}):e.isError?(0,H.jsxs)(`p`,{role:`alert`,className:`rounded-md border border-destructive/40 bg-destructive/10 p-3 text-sm text-destructive`,children:[`加载 secrets 失败:`,e.error instanceof Error?e.error.message:`未知错误`]}):e.data?.keys.length===0?(0,H.jsx)(`p`,{className:`rounded-md border border-dashed p-6 text-center text-sm text-muted-foreground`,children:`尚无 secret。`}):(0,H.jsx)(`ul`,{className:`flex flex-col gap-2`,children:e.data?.keys.map(e=>(0,H.jsxs)(`li`,{className:`flex items-center justify-between gap-2 rounded-md border bg-card px-4 py-2`,children:[(0,H.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,H.jsx)(Ao,{className:`size-4 text-muted-foreground`}),(0,H.jsx)(`code`,{className:`font-mono text-sm`,children:e})]}),(0,H.jsxs)(`div`,{className:`flex gap-2`,children:[(0,H.jsx)(Oc,{type:`button`,variant:`outline`,size:`sm`,onClick:()=>i({kind:`replace`,key:e}),children:`替换`}),(0,H.jsx)(Oc,{type:`button`,variant:`ghost`,size:`icon`,"aria-label":`Delete secret ${e}`,onClick:()=>o(e),children:(0,H.jsx)(qo,{className:`size-4`})})]})]},e))}),s&&(0,H.jsx)(`p`,{role:`alert`,className:`rounded-md border border-destructive/40 bg-destructive/10 p-3 text-sm text-destructive`,children:s}),r&&(0,H.jsx)(Yv,{existingKeys:e.data?.keys??[],mode:r,submitting:t.isPending,onClose:()=>i(null),onSubmit:async({key:e,value:n})=>{c(null);try{await t.mutateAsync({key:e,value:n}),i(null)}catch(e){c(e instanceof Eg?e.message:`保存失败。`)}}},r.kind===`add`?`__add`:`__replace_${r.key}`),(0,H.jsx)(Rv,{open:a!==null,onOpenChange:e=>!e&&o(null),children:(0,H.jsxs)(Hv,{className:`sm:max-w-md`,children:[(0,H.jsxs)(Uv,{children:[(0,H.jsx)(Gv,{children:`删除该 secret?`}),(0,H.jsxs)(Kv,{children:[`将从 worker vault 移除`,` `,(0,H.jsx)(`code`,{className:`rounded bg-muted px-1 font-mono text-xs`,children:a}),`;config 里引用它的字段在替换前会加载失败。`]})]}),(0,H.jsxs)(Wv,{children:[(0,H.jsx)(Oc,{variant:`outline`,onClick:()=>o(null),children:`取消`}),(0,H.jsx)(Oc,{variant:`destructive`,onClick:l,disabled:n.isPending,children:n.isPending?`删除中…`:`删除`})]})]})})]})}function Yv({mode:e,existingKeys:t,submitting:n,onClose:r,onSubmit:i}){let a=(0,V.useId)(),o=(0,V.useId)(),[s,c]=(0,V.useState)(e.kind===`replace`?e.key:``),[l,u]=(0,V.useState)(``),[d,f]=(0,V.useState)(!1),[p,m]=(0,V.useState)(null);async function h(n){n.preventDefault(),m(null);let r=s.trim();if(r.length===0){m(`key 必填。`);return}if(l.length===0){m(`value 必填。`);return}if(e.kind===`add`&&t.includes(r)){m(`该 key 已存在;改用「替换」。`);return}await i({key:r,value:l}),u(``)}return(0,H.jsx)(Rv,{open:!0,onOpenChange:e=>!e&&r(),children:(0,H.jsx)(Hv,{className:`sm:max-w-md`,children:(0,H.jsxs)(`form`,{onSubmit:h,children:[(0,H.jsxs)(Uv,{children:[(0,H.jsx)(Gv,{children:e.kind===`add`?`添加 secret`:`替换 ${e.key}`}),(0,H.jsx)(Kv,{children:`value 加密存入 worker vault,之后绝不再回传 UI。`})]}),(0,H.jsxs)(`div`,{className:`grid gap-4 py-4`,children:[(0,H.jsxs)(`div`,{className:`grid gap-1.5`,children:[(0,H.jsx)(B_,{htmlFor:a,children:`Key`}),(0,H.jsx)(z_,{id:a,value:s,onChange:e=>c(e.target.value),disabled:e.kind===`replace`,autoFocus:e.kind===`add`,spellCheck:!1})]}),(0,H.jsxs)(`div`,{className:`grid gap-1.5`,children:[(0,H.jsx)(B_,{htmlFor:o,children:`Value`}),(0,H.jsxs)(`div`,{className:`flex gap-2`,children:[(0,H.jsx)(z_,{id:o,type:d?`text`:`password`,value:l,onChange:e=>u(e.target.value),autoComplete:`off`,spellCheck:!1,autoFocus:e.kind===`replace`}),(0,H.jsx)(Oc,{type:`button`,variant:`outline`,size:`icon`,"aria-label":d?`Hide value`:`Show value`,onClick:()=>f(e=>!e),children:d?(0,H.jsx)(Oo,{className:`size-4`}):(0,H.jsx)(ko,{className:`size-4`})})]})]}),p&&(0,H.jsx)(`p`,{role:`alert`,className:`text-xs text-destructive`,children:p})]}),(0,H.jsxs)(Wv,{children:[(0,H.jsx)(Oc,{type:`button`,variant:`outline`,onClick:r,children:`取消`}),(0,H.jsxs)(Oc,{type:`submit`,disabled:n,children:[n?(0,H.jsx)(jo,{className:`size-4 animate-spin`}):null,n?`保存中…`:`保存`]})]})]})})})}var Xv=Ri(`/secrets`)({component:Jv}),Zv=[`web`,`line`,`telegram`,`lark`,`whatsapp`];function Qv(){let e=b_(),t=x_(),n=S_(),r=C_(),[i,a]=(0,V.useState)(null),[o,s]=(0,V.useState)(null),[c,l]=(0,V.useState)(null);async function u(e){l(null);try{await n.mutateAsync({id:e.id,patch:{enabled:!e.enabled}})}catch(e){l(e instanceof Eg?e.message:`更新失败。`)}}async function d(){if(o){l(null);try{await r.mutateAsync(o.id),s(null)}catch(e){l(e instanceof Eg?e.message:`删除失败。`)}}}let f=e.data?.jobs??[];return(0,H.jsxs)(`div`,{className:`flex max-w-4xl flex-col gap-6`,children:[(0,H.jsxs)(`header`,{className:`flex items-start justify-between gap-4`,children:[(0,H.jsxs)(`div`,{children:[(0,H.jsx)(`h1`,{className:`text-2xl font-semibold tracking-tight`,children:`Cron`}),(0,H.jsx)(`p`,{className:`mt-1 text-sm text-muted-foreground`,children:`按 cron 表达式定期触发的 prompt 任务。结果通过指定 channel 发出。`})]}),(0,H.jsxs)(Oc,{onClick:()=>a({kind:`add`}),children:[(0,H.jsx)(Ro,{className:`size-4`}),`添加`]})]}),c&&(0,H.jsx)(`p`,{role:`alert`,className:`rounded-md border border-destructive/40 bg-destructive/10 p-3 text-sm text-destructive`,children:c}),e.isLoading?(0,H.jsx)(qv,{className:`h-40`}):e.isError?(0,H.jsxs)(`p`,{role:`alert`,className:`rounded-md border border-destructive/40 bg-destructive/10 p-3 text-sm text-destructive`,children:[`加载 cron 列表失败:`,e.error instanceof Error?e.error.message:`未知错误`]}):f.length===0?(0,H.jsx)(`p`,{className:`rounded-md border border-dashed p-6 text-center text-sm text-muted-foreground`,children:`尚无 cron。`}):(0,H.jsx)(`ul`,{className:`flex flex-col gap-3`,children:f.map(e=>(0,H.jsx)(`li`,{className:`flex flex-col gap-2 rounded-md border bg-card p-4`,children:(0,H.jsxs)(`div`,{className:`flex items-start justify-between gap-3`,children:[(0,H.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,H.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,H.jsx)(`code`,{className:`font-mono text-sm`,children:e.expression}),(0,H.jsx)(`span`,{className:`rounded bg-muted px-1.5 py-0.5 text-[11px] uppercase tracking-wide text-muted-foreground`,children:e.channel}),!e.enabled&&(0,H.jsx)(`span`,{className:`rounded bg-amber-500/10 px-1.5 py-0.5 text-[11px] font-medium text-amber-700 dark:text-amber-400`,children:`disabled`})]}),(0,H.jsx)(`p`,{className:`mt-1 truncate text-sm text-muted-foreground`,title:e.prompt,children:e.prompt}),(0,H.jsxs)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:[`chatId`,(0,H.jsx)(`code`,{className:`ml-1 font-mono`,children:e.chatId}),(0,H.jsx)(`span`,{className:`mx-2`,children:`·`}),`account`,(0,H.jsx)(`code`,{className:`ml-1 font-mono`,children:e.accountId}),(0,H.jsx)(`span`,{className:`mx-2`,children:`·`}),`next`,(0,H.jsx)(`code`,{className:`ml-1 font-mono`,children:e.nextRunAt??`—`}),(0,H.jsx)(`span`,{className:`mx-2`,children:`·`}),`last`,(0,H.jsx)(`code`,{className:`ml-1 font-mono`,children:e.lastRunAt??`—`})]})]}),(0,H.jsxs)(`div`,{className:`flex shrink-0 gap-1`,children:[(0,H.jsx)(Oc,{type:`button`,variant:`ghost`,size:`icon`,"aria-label":e.enabled?`暂停`:`启用`,onClick:()=>void u(e),disabled:n.isPending,children:e.enabled?(0,H.jsx)(Fo,{className:`size-4`}):(0,H.jsx)(Lo,{className:`size-4`})}),(0,H.jsx)(Oc,{type:`button`,variant:`ghost`,size:`icon`,"aria-label":`编辑`,onClick:()=>a({kind:`edit`,job:e}),children:(0,H.jsx)(Io,{className:`size-4`})}),(0,H.jsx)(Oc,{type:`button`,variant:`ghost`,size:`icon`,"aria-label":`删除`,onClick:()=>s(e),children:(0,H.jsx)(qo,{className:`size-4`})})]})]})},e.id))}),i&&(0,H.jsx)($v,{mode:i,submitting:t.isPending||n.isPending,onClose:()=>a(null),onSubmit:async e=>{l(null);try{i.kind===`add`?await t.mutateAsync(e):await n.mutateAsync({id:i.job.id,patch:e}),a(null)}catch(e){l(e instanceof Eg?e.message:`保存失败。`)}}},i.kind===`add`?`__add`:`__edit_${i.job.id}`),(0,H.jsx)(Rv,{open:o!==null,onOpenChange:e=>!e&&s(null),children:(0,H.jsxs)(Hv,{className:`sm:max-w-md`,children:[(0,H.jsxs)(Uv,{children:[(0,H.jsx)(Gv,{children:`删除该 cron?`}),(0,H.jsxs)(Kv,{children:[`将立即停止`,` `,(0,H.jsx)(`code`,{className:`rounded bg-muted px-1 font-mono text-xs`,children:o?.id}),` `,`的调度。`]})]}),(0,H.jsxs)(Wv,{children:[(0,H.jsx)(Oc,{variant:`outline`,onClick:()=>s(null),children:`取消`}),(0,H.jsx)(Oc,{variant:`destructive`,onClick:d,disabled:r.isPending,children:r.isPending?`删除中…`:`删除`})]})]})})]})}function $v({mode:e,submitting:t,onClose:n,onSubmit:r}){let i=(0,V.useId)(),a=(0,V.useId)(),o=(0,V.useId)(),s=(0,V.useId)(),[c,l]=(0,V.useState)((0,V.useMemo)(()=>e.kind===`edit`?{expression:e.job.expression,prompt:e.job.prompt,channel:e.job.channel,chatId:e.job.chatId,accountId:e.job.accountId,enabled:e.job.enabled}:{expression:`0 9 * * *`,prompt:``,channel:`web`,chatId:``,accountId:``,enabled:!0},[e])),[u,d]=(0,V.useState)(null);function f(e,t){l(n=>({...n,[e]:t}))}async function p(e){if(e.preventDefault(),d(null),!c.expression.trim()||!c.prompt.trim()||!c.chatId.trim()){d(`expression / prompt / chatId 必填。`);return}let t={expression:c.expression.trim(),prompt:c.prompt.trim(),channel:c.channel,chatId:c.chatId.trim(),enabled:c.enabled};c.accountId.trim().length>0&&(t.accountId=c.accountId.trim()),await r(t)}return(0,H.jsx)(Rv,{open:!0,onOpenChange:e=>!e&&n(),children:(0,H.jsx)(Hv,{className:`sm:max-w-lg`,children:(0,H.jsxs)(`form`,{onSubmit:p,children:[(0,H.jsxs)(Uv,{children:[(0,H.jsx)(Gv,{children:e.kind===`add`?`添加 cron`:`编辑 ${e.job.id}`}),(0,H.jsx)(Kv,{children:`cron 表达式遵循 5 字段标准(分 时 日 月 周)。`})]}),(0,H.jsxs)(`div`,{className:`grid gap-3 py-4`,children:[(0,H.jsxs)(`div`,{className:`grid gap-1.5`,children:[(0,H.jsx)(B_,{htmlFor:i,children:`Expression`}),(0,H.jsx)(z_,{id:i,value:c.expression,onChange:e=>f(`expression`,e.target.value),className:`font-mono`})]}),(0,H.jsxs)(`div`,{className:`grid gap-1.5`,children:[(0,H.jsx)(B_,{htmlFor:a,children:`Prompt`}),(0,H.jsx)(`textarea`,{id:a,className:`min-h-[80px] rounded-md border bg-background px-3 py-2 text-sm`,value:c.prompt,onChange:e=>f(`prompt`,e.target.value)})]}),(0,H.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:[(0,H.jsxs)(`div`,{className:`grid gap-1.5`,children:[(0,H.jsx)(B_,{children:`Channel`}),(0,H.jsx)(`select`,{className:`h-9 rounded-md border bg-background px-3 text-sm`,value:c.channel,onChange:e=>f(`channel`,e.target.value),children:Zv.map(e=>(0,H.jsx)(`option`,{value:e,children:e},e))})]}),(0,H.jsxs)(`div`,{className:`grid gap-1.5`,children:[(0,H.jsx)(B_,{htmlFor:o,children:`chatId`}),(0,H.jsx)(z_,{id:o,value:c.chatId,onChange:e=>f(`chatId`,e.target.value)})]}),(0,H.jsxs)(`div`,{className:`grid gap-1.5 sm:col-span-2`,children:[(0,H.jsx)(B_,{htmlFor:s,children:"accountId(留空 = `sys:cron`)"}),(0,H.jsx)(z_,{id:s,value:c.accountId,onChange:e=>f(`accountId`,e.target.value)})]}),(0,H.jsxs)(`label`,{className:`flex items-center gap-2 text-sm sm:col-span-2`,children:[(0,H.jsx)(`input`,{type:`checkbox`,checked:c.enabled,onChange:e=>f(`enabled`,e.target.checked)}),`启用`]})]}),u&&(0,H.jsx)(`p`,{role:`alert`,className:`text-xs text-destructive`,children:u})]}),(0,H.jsxs)(Wv,{children:[(0,H.jsx)(Oc,{type:`button`,variant:`outline`,onClick:n,children:`取消`}),(0,H.jsxs)(Oc,{type:`submit`,disabled:t,children:[t?(0,H.jsx)(jo,{className:`size-4 animate-spin`}):null,t?`保存中…`:`保存`]})]})]})})})}var ey=Ri(`/cron`)({component:Qv});function ty(e){return{id:`brain-${e}`,type:`filesystem`,priority:100,readOnly:!1,config:{}}}function ny(e){return{id:`brain-${e}`,type:`cloud-gateway`,priority:100,readOnly:!1,config:{url:``,token:``}}}function ry({brains:e,brainWriteTarget:t,brainRetrieval:n,onChange:r}){function i(t,n){let i=e.slice();i[t]=n,r({brains:i})}function a(n){let i=e[n],a=e.filter((e,t)=>t!==n),o={brains:a};i&&t===i.id&&(o.brainWriteTarget=a[0]?.id??``),r(o)}function o(t){let n=t===`filesystem`?ty(e.length+1):ny(e.length+1);r({brains:[...e,n]})}return(0,H.jsxs)(`section`,{className:`flex flex-col gap-4 rounded-lg border bg-card p-6`,children:[(0,H.jsxs)(`header`,{className:`flex items-start justify-between gap-4`,children:[(0,H.jsxs)(`div`,{children:[(0,H.jsx)(`h2`,{className:`text-lg font-semibold`,children:`Brain sources`}),(0,H.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`知识与记忆后端。Secret 字段留空表示沿用旧值。`})]}),(0,H.jsxs)(`div`,{className:`flex gap-2`,children:[(0,H.jsxs)(Oc,{type:`button`,variant:`outline`,size:`sm`,onClick:()=>o(`filesystem`),children:[(0,H.jsx)(Ro,{className:`size-3.5`}),`Filesystem`]}),(0,H.jsxs)(Oc,{type:`button`,variant:`outline`,size:`sm`,onClick:()=>o(`cloud-gateway`),children:[(0,H.jsx)(Ro,{className:`size-3.5`}),`Cloud gateway`]})]})]}),e.length===0&&(0,H.jsx)(`p`,{className:`rounded-md border border-dashed p-4 text-center text-sm text-muted-foreground`,children:`尚未配置 brain source。至少加一个才能启用 retrieval。`}),(0,H.jsx)(`ul`,{className:`flex flex-col gap-3`,children:e.map((e,t)=>(0,H.jsx)(iy,{source:e,onChange:e=>i(t,e),onRemove:()=>a(t)},e.id))}),e.length>0&&(0,H.jsxs)(`div`,{className:`grid gap-4 sm:grid-cols-2`,children:[(0,H.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,H.jsx)(B_,{children:`Write target`}),(0,H.jsxs)(`select`,{className:`h-9 rounded-md border bg-background px-3 text-sm`,value:t,onChange:e=>r({brainWriteTarget:e.target.value}),children:[(0,H.jsx)(`option`,{value:``,children:`— none —`}),e.map(e=>(0,H.jsx)(`option`,{value:e.id,children:e.id},e.id))]}),(0,H.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`接收`,` `,(0,H.jsx)(`code`,{className:`font-mono text-[11px]`,children:`writeMemory`}),` `,`调用的 source。`]})]}),(0,H.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,H.jsx)(B_,{children:`Retrieval mode`}),(0,H.jsxs)(`select`,{className:`h-9 rounded-md border bg-background px-3 text-sm`,value:n,onChange:e=>r({brainRetrieval:e.target.value}),children:[(0,H.jsx)(`option`,{value:`merge-by-priority`,children:`merge-by-priority`}),(0,H.jsx)(`option`,{value:`first-match`,children:`first-match`})]})]})]})]})}function iy({source:e,onChange:t,onRemove:n}){function r(n){t({...e,...n})}function i(n){n!==e.type&&t(n===`filesystem`?{id:e.id,type:`filesystem`,priority:e.priority,readOnly:e.readOnly,config:{}}:{id:e.id,type:`cloud-gateway`,priority:e.priority,readOnly:e.readOnly,config:{url:``,token:``}})}return(0,H.jsxs)(`li`,{className:`flex flex-col gap-3 rounded-md border bg-background p-4`,children:[(0,H.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-[minmax(0,1fr)_minmax(0,160px)_minmax(0,120px)_auto]`,children:[(0,H.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,H.jsx)(B_,{children:`Id`}),(0,H.jsx)(z_,{value:e.id,onChange:e=>r({id:e.target.value}),"aria-label":`Brain source id`})]}),(0,H.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,H.jsx)(B_,{children:`Type`}),(0,H.jsxs)(`select`,{className:`h-9 rounded-md border bg-background px-3 text-sm`,value:e.type,onChange:e=>i(e.target.value),"aria-label":`Brain source type`,children:[(0,H.jsx)(`option`,{value:`filesystem`,children:`filesystem`}),(0,H.jsx)(`option`,{value:`cloud-gateway`,children:`cloud-gateway`})]})]}),(0,H.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,H.jsx)(B_,{children:`Priority`}),(0,H.jsx)(z_,{type:`number`,value:e.priority,onChange:e=>r({priority:Number.parseInt(e.target.value,10)||0})})]}),(0,H.jsxs)(`div`,{className:`flex flex-col items-end gap-2`,children:[(0,H.jsxs)(`label`,{className:`flex items-center gap-2 text-xs text-muted-foreground`,children:[(0,H.jsx)(`input`,{type:`checkbox`,checked:e.readOnly,onChange:e=>r({readOnly:e.target.checked})}),`read-only`]}),(0,H.jsx)(Oc,{type:`button`,variant:`ghost`,size:`icon`,"aria-label":`Remove brain source`,onClick:n,children:(0,H.jsx)(qo,{className:`size-4`})})]})]}),e.type===`filesystem`?(0,H.jsx)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:(0,H.jsx)(ay,{label:`home (optional — 默认 ~/.aiworker/workers/<id>/brain)`,children:(0,H.jsx)(z_,{value:e.config.home??``,onChange:n=>t({...e,config:{...e.config,home:n.target.value||void 0}})})})}):(0,H.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:[(0,H.jsx)(ay,{label:`url`,children:(0,H.jsx)(z_,{value:e.config.url,onChange:n=>t({...e,config:{...e.config,url:n.target.value}})})}),(0,H.jsx)(oy,{label:`token`,value:e.config.token,onChange:n=>t({...e,config:{...e.config,token:n}})}),(0,H.jsx)(ay,{label:`defaultCategory (optional)`,children:(0,H.jsx)(z_,{value:e.config.defaultCategory??``,onChange:n=>t({...e,config:{...e.config,defaultCategory:n.target.value}})})}),(0,H.jsx)(ay,{label:`defaultTypeId (optional)`,children:(0,H.jsx)(z_,{value:e.config.defaultTypeId??``,onChange:n=>t({...e,config:{...e.config,defaultTypeId:n.target.value}})})})]})]})}function ay({label:e,children:t}){return(0,H.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,H.jsx)(B_,{children:e}),t]})}function oy({label:e,value:t,onChange:n,placeholder:r=`(unchanged)`}){let[i,a]=(0,V.useState)(!1);return(0,H.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,H.jsx)(B_,{children:e}),(0,H.jsxs)(`div`,{className:`flex gap-2`,children:[(0,H.jsx)(z_,{type:i?`text`:`password`,value:t,onChange:e=>n(e.target.value),placeholder:r,autoComplete:`off`,spellCheck:!1}),(0,H.jsx)(Oc,{type:`button`,variant:`outline`,size:`icon`,"aria-label":i?`Hide ${e}`:`Show ${e}`,onClick:()=>a(e=>!e),children:i?(0,H.jsx)(Oo,{className:`size-4`}):(0,H.jsx)(ko,{className:`size-4`})})]}),(0,H.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:`留空保留 vault 里旧值。`})]})}var sy=[`web`,`line`,`telegram`,`lark`,`whatsapp`];function cy(){let e=new Uint8Array(24);crypto.getRandomValues(e);let t=``;for(let n of e)t+=String.fromCharCode(n);return btoa(t).replace(/\+/g,`-`).replace(/\//g,`_`).replace(/=+$/,``)}function ly(e){switch(e){case`web`:return{channel:`web`,inboundToken:``};case`line`:return{channel:`line`,channelSecret:``,channelAccessToken:``};case`telegram`:return{channel:`telegram`,botToken:``};case`lark`:return{channel:`lark`,appId:``,appSecret:``,encryptKey:``,verificationToken:``};case`whatsapp`:return{channel:`whatsapp`,phoneNumberId:``,accessToken:``,appSecret:``,verifyToken:``}}}function uy(e){return{channel:e,enabled:!1,credentials:ly(e)}}function dy(e,t,n){let r=0;for(let i=0;i<n;i+=1)t[i]?.channel===e&&(r+=1);return r===0?e:`${e}#${r}`}function fy({channels:e,info:t,onChange:n}){function r(t,r){let i=e.slice();i[t]=r,n(i)}function i(t){n(e.filter((e,n)=>n!==t))}function a(t){n([...e,uy(t)])}return(0,H.jsxs)(`section`,{className:`flex flex-col gap-4 rounded-lg border bg-card p-6`,children:[(0,H.jsxs)(`header`,{className:`flex items-start justify-between gap-4`,children:[(0,H.jsxs)(`div`,{children:[(0,H.jsx)(`h2`,{className:`text-lg font-semibold`,children:`Channels`}),(0,H.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`入站消息源。把卡片里的 webhook URL 粘到对应平台后台。`})]}),(0,H.jsx)(`div`,{className:`flex flex-wrap justify-end gap-2`,children:sy.map(e=>(0,H.jsxs)(Oc,{type:`button`,variant:`outline`,size:`sm`,onClick:()=>a(e),children:[(0,H.jsx)(Ro,{className:`size-3.5`}),e]},e))})]}),e.length===0&&(0,H.jsx)(`p`,{className:`rounded-md border border-dashed p-4 text-center text-sm text-muted-foreground`,children:`尚未绑定 channel。`}),(0,H.jsx)(`ul`,{className:`flex flex-col gap-3`,children:e.map((n,a)=>(0,H.jsx)(py,{binding:n,webhookUrl:t?.channels.find(e=>e.channel===n.channel)?.webhookUrl,onChange:e=>r(a,e),onRemove:()=>i(a)},dy(n.channel,e,a)))})]})}function py({binding:e,webhookUrl:t,onChange:n,onRemove:r}){function i(t){n({...e,credentials:t})}function a(t){t!==e.channel&&n({channel:t,enabled:e.enabled,credentials:ly(t)})}return(0,H.jsxs)(`li`,{className:`flex flex-col gap-3 rounded-md border bg-background p-4`,children:[(0,H.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-3`,children:[(0,H.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,H.jsx)(`select`,{className:`h-9 rounded-md border bg-background px-3 text-sm`,value:e.channel,onChange:e=>a(e.target.value),"aria-label":`Channel type`,children:sy.map(e=>(0,H.jsx)(`option`,{value:e,children:e},e))}),(0,H.jsxs)(`label`,{className:`flex items-center gap-2 text-sm`,children:[(0,H.jsx)(`input`,{type:`checkbox`,checked:e.enabled,onChange:t=>n({...e,enabled:t.target.checked})}),`enabled`]})]}),(0,H.jsx)(Oc,{type:`button`,variant:`ghost`,size:`icon`,"aria-label":`Remove ${e.channel} channel`,onClick:r,children:(0,H.jsx)(qo,{className:`size-4`})})]}),t&&(0,H.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,H.jsx)(B_,{children:`Webhook URL(只读,粘进平台后台即可)`}),(0,H.jsx)(z_,{value:t,readOnly:!0,className:`font-mono text-xs`})]}),(0,H.jsx)(my,{credentials:e.credentials,onChange:i})]})}function my({credentials:e,onChange:t}){switch(e.channel){case`web`:return(0,H.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,H.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-[minmax(0,1fr)_auto] sm:items-end`,children:[(0,H.jsx)(oy,{label:`inboundToken`,value:e.inboundToken??``,onChange:n=>t({...e,inboundToken:n}),placeholder:`(unchanged — 留空沿用旧 token)`}),(0,H.jsx)(Oc,{type:`button`,variant:`outline`,size:`sm`,onClick:()=>t({...e,inboundToken:cy()}),children:`Generate`})]}),(0,H.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`必填:调用`,` `,(0,H.jsx)(`code`,{className:`font-mono text-[11px]`,children:`POST /web/webhook`}),` `,`的客户端必须发`,` `,(0,H.jsx)(`code`,{className:`font-mono text-[11px]`,children:`Authorization: Bearer <inboundToken>`}),`。空 token = 拒绝所有入站(fail-closed)。`]})]});case`line`:return(0,H.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:[(0,H.jsx)(oy,{label:`channelSecret`,value:e.channelSecret,onChange:n=>t({...e,channelSecret:n})}),(0,H.jsx)(oy,{label:`channelAccessToken`,value:e.channelAccessToken,onChange:n=>t({...e,channelAccessToken:n})})]});case`telegram`:return(0,H.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:[(0,H.jsx)(oy,{label:`botToken`,value:e.botToken,onChange:n=>t({...e,botToken:n})}),(0,H.jsx)(oy,{label:`webhookSecretToken (optional)`,value:e.webhookSecretToken??``,onChange:n=>t({...e,webhookSecretToken:n||void 0})})]});case`lark`:return(0,H.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:[(0,H.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,H.jsx)(B_,{children:`appId`}),(0,H.jsx)(z_,{value:e.appId,onChange:n=>t({...e,appId:n.target.value})})]}),(0,H.jsx)(oy,{label:`appSecret`,value:e.appSecret,onChange:n=>t({...e,appSecret:n})}),(0,H.jsx)(oy,{label:`encryptKey`,value:e.encryptKey,onChange:n=>t({...e,encryptKey:n})}),(0,H.jsx)(oy,{label:`verificationToken`,value:e.verificationToken,onChange:n=>t({...e,verificationToken:n})})]});case`whatsapp`:return(0,H.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:[(0,H.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,H.jsx)(B_,{children:`phoneNumberId`}),(0,H.jsx)(z_,{value:e.phoneNumberId,onChange:n=>t({...e,phoneNumberId:n.target.value})})]}),(0,H.jsx)(oy,{label:`accessToken`,value:e.accessToken,onChange:n=>t({...e,accessToken:n})}),(0,H.jsx)(oy,{label:`appSecret`,value:e.appSecret,onChange:n=>t({...e,appSecret:n})}),(0,H.jsx)(oy,{label:`verifyToken`,value:e.verifyToken,onChange:n=>t({...e,verifyToken:n})})]})}}function hy(e){let t=new Map;if(!e)return t;for(let n of e){let e=n.agent?`${n.kind}:${n.agent}`:n.kind;t.set(e,n)}return t}function gy(e,t){let n=e.get(t);if(n)return n.status;let r=[...e.values()].filter(e=>e.kind===t);if(r.length!==0)return r.some(e=>e.status===`ready`)?`ready`:r.every(e=>e.status===`not-found`)?`not-found`:`login-required`}var _y;(function(e){e.assertEqual=e=>{};function t(e){}e.assertIs=t;function n(e){throw Error()}e.assertNever=n,e.arrayToEnum=e=>{let t={};for(let n of e)t[n]=n;return t},e.getValidEnumValues=t=>{let n=e.objectKeys(t).filter(e=>typeof t[t[e]]!=`number`),r={};for(let e of n)r[e]=t[e];return e.objectValues(r)},e.objectValues=t=>e.objectKeys(t).map(function(e){return t[e]}),e.objectKeys=typeof Object.keys==`function`?e=>Object.keys(e):e=>{let t=[];for(let n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.push(n);return t},e.find=(e,t)=>{for(let n of e)if(t(n))return n},e.isInteger=typeof Number.isInteger==`function`?e=>Number.isInteger(e):e=>typeof e==`number`&&Number.isFinite(e)&&Math.floor(e)===e;function r(e,t=` | `){return e.map(e=>typeof e==`string`?`'${e}'`:e).join(t)}e.joinValues=r,e.jsonStringifyReplacer=(e,t)=>typeof t==`bigint`?t.toString():t})(_y||={});var vy;(function(e){e.mergeShapes=(e,t)=>({...e,...t})})(vy||={});var q=_y.arrayToEnum([`string`,`nan`,`number`,`integer`,`float`,`boolean`,`date`,`bigint`,`symbol`,`function`,`undefined`,`null`,`array`,`object`,`unknown`,`promise`,`void`,`never`,`map`,`set`]),yy=e=>{switch(typeof e){case`undefined`:return q.undefined;case`string`:return q.string;case`number`:return Number.isNaN(e)?q.nan:q.number;case`boolean`:return q.boolean;case`function`:return q.function;case`bigint`:return q.bigint;case`symbol`:return q.symbol;case`object`:return Array.isArray(e)?q.array:e===null?q.null:e.then&&typeof e.then==`function`&&e.catch&&typeof e.catch==`function`?q.promise:typeof Map<`u`&&e instanceof Map?q.map:typeof Set<`u`&&e instanceof Set?q.set:typeof Date<`u`&&e instanceof Date?q.date:q.object;default:return q.unknown}},J=_y.arrayToEnum([`invalid_type`,`invalid_literal`,`custom`,`invalid_union`,`invalid_union_discriminator`,`invalid_enum_value`,`unrecognized_keys`,`invalid_arguments`,`invalid_return_type`,`invalid_date`,`invalid_string`,`too_small`,`too_big`,`invalid_intersection_types`,`not_multiple_of`,`not_finite`]),by=class e extends Error{get errors(){return this.issues}constructor(e){super(),this.issues=[],this.addIssue=e=>{this.issues=[...this.issues,e]},this.addIssues=(e=[])=>{this.issues=[...this.issues,...e]};let t=new.target.prototype;Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,this.name=`ZodError`,this.issues=e}format(e){let t=e||function(e){return e.message},n={_errors:[]},r=e=>{for(let i of e.issues)if(i.code===`invalid_union`)i.unionErrors.map(r);else if(i.code===`invalid_return_type`)r(i.returnTypeError);else if(i.code===`invalid_arguments`)r(i.argumentsError);else if(i.path.length===0)n._errors.push(t(i));else{let e=n,r=0;for(;r<i.path.length;){let n=i.path[r];r===i.path.length-1?(e[n]=e[n]||{_errors:[]},e[n]._errors.push(t(i))):e[n]=e[n]||{_errors:[]},e=e[n],r++}}};return r(this),n}static assert(t){if(!(t instanceof e))throw Error(`Not a ZodError: ${t}`)}toString(){return this.message}get message(){return JSON.stringify(this.issues,_y.jsonStringifyReplacer,2)}get isEmpty(){return this.issues.length===0}flatten(e=e=>e.message){let t={},n=[];for(let r of this.issues)if(r.path.length>0){let n=r.path[0];t[n]=t[n]||[],t[n].push(e(r))}else n.push(e(r));return{formErrors:n,fieldErrors:t}}get formErrors(){return this.flatten()}};by.create=e=>new by(e);var xy=(e,t)=>{let n;switch(e.code){case J.invalid_type:n=e.received===q.undefined?`Required`:`Expected ${e.expected}, received ${e.received}`;break;case J.invalid_literal:n=`Invalid literal value, expected ${JSON.stringify(e.expected,_y.jsonStringifyReplacer)}`;break;case J.unrecognized_keys:n=`Unrecognized key(s) in object: ${_y.joinValues(e.keys,`, `)}`;break;case J.invalid_union:n=`Invalid input`;break;case J.invalid_union_discriminator:n=`Invalid discriminator value. Expected ${_y.joinValues(e.options)}`;break;case J.invalid_enum_value:n=`Invalid enum value. Expected ${_y.joinValues(e.options)}, received '${e.received}'`;break;case J.invalid_arguments:n=`Invalid function arguments`;break;case J.invalid_return_type:n=`Invalid function return type`;break;case J.invalid_date:n=`Invalid date`;break;case J.invalid_string:typeof e.validation==`object`?`includes`in e.validation?(n=`Invalid input: must include "${e.validation.includes}"`,typeof e.validation.position==`number`&&(n=`${n} at one or more positions greater than or equal to ${e.validation.position}`)):`startsWith`in e.validation?n=`Invalid input: must start with "${e.validation.startsWith}"`:`endsWith`in e.validation?n=`Invalid input: must end with "${e.validation.endsWith}"`:_y.assertNever(e.validation):n=e.validation===`regex`?`Invalid`:`Invalid ${e.validation}`;break;case J.too_small:n=e.type===`array`?`Array must contain ${e.exact?`exactly`:e.inclusive?`at least`:`more than`} ${e.minimum} element(s)`:e.type===`string`?`String must contain ${e.exact?`exactly`:e.inclusive?`at least`:`over`} ${e.minimum} character(s)`:e.type===`number`||e.type===`bigint`?`Number must be ${e.exact?`exactly equal to `:e.inclusive?`greater than or equal to `:`greater than `}${e.minimum}`:e.type===`date`?`Date must be ${e.exact?`exactly equal to `:e.inclusive?`greater than or equal to `:`greater than `}${new Date(Number(e.minimum))}`:`Invalid input`;break;case J.too_big:n=e.type===`array`?`Array must contain ${e.exact?`exactly`:e.inclusive?`at most`:`less than`} ${e.maximum} element(s)`:e.type===`string`?`String must contain ${e.exact?`exactly`:e.inclusive?`at most`:`under`} ${e.maximum} character(s)`:e.type===`number`?`Number must be ${e.exact?`exactly`:e.inclusive?`less than or equal to`:`less than`} ${e.maximum}`:e.type===`bigint`?`BigInt must be ${e.exact?`exactly`:e.inclusive?`less than or equal to`:`less than`} ${e.maximum}`:e.type===`date`?`Date must be ${e.exact?`exactly`:e.inclusive?`smaller than or equal to`:`smaller than`} ${new Date(Number(e.maximum))}`:`Invalid input`;break;case J.custom:n=`Invalid input`;break;case J.invalid_intersection_types:n=`Intersection results could not be merged`;break;case J.not_multiple_of:n=`Number must be a multiple of ${e.multipleOf}`;break;case J.not_finite:n=`Number must be finite`;break;default:n=t.defaultError,_y.assertNever(e)}return{message:n}},Sy=xy;function Cy(){return Sy}var wy=e=>{let{data:t,path:n,errorMaps:r,issueData:i}=e,a=[...n,...i.path||[]],o={...i,path:a};if(i.message!==void 0)return{...i,path:a,message:i.message};let s=``,c=r.filter(e=>!!e).slice().reverse();for(let e of c)s=e(o,{data:t,defaultError:s}).message;return{...i,path:a,message:s}};function Y(e,t){let n=Cy(),r=wy({issueData:t,data:e.data,path:e.path,errorMaps:[e.common.contextualErrorMap,e.schemaErrorMap,n,n===xy?void 0:xy].filter(e=>!!e)});e.common.issues.push(r)}var Ty=class e{constructor(){this.value=`valid`}dirty(){this.value===`valid`&&(this.value=`dirty`)}abort(){this.value!==`aborted`&&(this.value=`aborted`)}static mergeArray(e,t){let n=[];for(let r of t){if(r.status===`aborted`)return X;r.status===`dirty`&&e.dirty(),n.push(r.value)}return{status:e.value,value:n}}static async mergeObjectAsync(t,n){let r=[];for(let e of n){let t=await e.key,n=await e.value;r.push({key:t,value:n})}return e.mergeObjectSync(t,r)}static mergeObjectSync(e,t){let n={};for(let r of t){let{key:t,value:i}=r;if(t.status===`aborted`||i.status===`aborted`)return X;t.status===`dirty`&&e.dirty(),i.status===`dirty`&&e.dirty(),t.value!==`__proto__`&&(i.value!==void 0||r.alwaysSet)&&(n[t.value]=i.value)}return{status:e.value,value:n}}},X=Object.freeze({status:`aborted`}),Ey=e=>({status:`dirty`,value:e}),Dy=e=>({status:`valid`,value:e}),Oy=e=>e.status===`aborted`,ky=e=>e.status===`dirty`,Ay=e=>e.status===`valid`,jy=e=>typeof Promise<`u`&&e instanceof Promise,Z;(function(e){e.errToObj=e=>typeof e==`string`?{message:e}:e||{},e.toString=e=>typeof e==`string`?e:e?.message})(Z||={});var My=class{constructor(e,t,n,r){this._cachedPath=[],this.parent=e,this.data=t,this._path=n,this._key=r}get path(){return this._cachedPath.length||(Array.isArray(this._key)?this._cachedPath.push(...this._path,...this._key):this._cachedPath.push(...this._path,this._key)),this._cachedPath}},Ny=(e,t)=>{if(Ay(t))return{success:!0,data:t.value};if(!e.common.issues.length)throw Error(`Validation failed but no issues detected.`);return{success:!1,get error(){if(this._error)return this._error;let t=new by(e.common.issues);return this._error=t,this._error}}};function Q(e){if(!e)return{};let{errorMap:t,invalid_type_error:n,required_error:r,description:i}=e;if(t&&(n||r))throw Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);return t?{errorMap:t,description:i}:{errorMap:(t,i)=>{let{message:a}=e;return t.code===`invalid_enum_value`?{message:a??i.defaultError}:i.data===void 0?{message:a??r??i.defaultError}:t.code===`invalid_type`?{message:a??n??i.defaultError}:{message:i.defaultError}},description:i}}var Py=class{get description(){return this._def.description}_getType(e){return yy(e.data)}_getOrReturnCtx(e,t){return t||{common:e.parent.common,data:e.data,parsedType:yy(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}_processInputParams(e){return{status:new Ty,ctx:{common:e.parent.common,data:e.data,parsedType:yy(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}}_parseSync(e){let t=this._parse(e);if(jy(t))throw Error(`Synchronous parse encountered promise.`);return t}_parseAsync(e){let t=this._parse(e);return Promise.resolve(t)}parse(e,t){let n=this.safeParse(e,t);if(n.success)return n.data;throw n.error}safeParse(e,t){let n={common:{issues:[],async:t?.async??!1,contextualErrorMap:t?.errorMap},path:t?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:yy(e)};return Ny(n,this._parseSync({data:e,path:n.path,parent:n}))}"~validate"(e){let t={common:{issues:[],async:!!this[`~standard`].async},path:[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:yy(e)};if(!this[`~standard`].async)try{let n=this._parseSync({data:e,path:[],parent:t});return Ay(n)?{value:n.value}:{issues:t.common.issues}}catch(e){e?.message?.toLowerCase()?.includes(`encountered`)&&(this[`~standard`].async=!0),t.common={issues:[],async:!0}}return this._parseAsync({data:e,path:[],parent:t}).then(e=>Ay(e)?{value:e.value}:{issues:t.common.issues})}async parseAsync(e,t){let n=await this.safeParseAsync(e,t);if(n.success)return n.data;throw n.error}async safeParseAsync(e,t){let n={common:{issues:[],contextualErrorMap:t?.errorMap,async:!0},path:t?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:yy(e)},r=this._parse({data:e,path:n.path,parent:n});return Ny(n,await(jy(r)?r:Promise.resolve(r)))}refine(e,t){let n=e=>typeof t==`string`||t===void 0?{message:t}:typeof t==`function`?t(e):t;return this._refinement((t,r)=>{let i=e(t),a=()=>r.addIssue({code:J.custom,...n(t)});return typeof Promise<`u`&&i instanceof Promise?i.then(e=>e?!0:(a(),!1)):i?!0:(a(),!1)})}refinement(e,t){return this._refinement((n,r)=>e(n)?!0:(r.addIssue(typeof t==`function`?t(n,r):t),!1))}_refinement(e){return new Lb({schema:this,typeName:$.ZodEffects,effect:{type:`refinement`,refinement:e}})}superRefine(e){return this._refinement(e)}constructor(e){this.spa=this.safeParseAsync,this._def=e,this.parse=this.parse.bind(this),this.safeParse=this.safeParse.bind(this),this.parseAsync=this.parseAsync.bind(this),this.safeParseAsync=this.safeParseAsync.bind(this),this.spa=this.spa.bind(this),this.refine=this.refine.bind(this),this.refinement=this.refinement.bind(this),this.superRefine=this.superRefine.bind(this),this.optional=this.optional.bind(this),this.nullable=this.nullable.bind(this),this.nullish=this.nullish.bind(this),this.array=this.array.bind(this),this.promise=this.promise.bind(this),this.or=this.or.bind(this),this.and=this.and.bind(this),this.transform=this.transform.bind(this),this.brand=this.brand.bind(this),this.default=this.default.bind(this),this.catch=this.catch.bind(this),this.describe=this.describe.bind(this),this.pipe=this.pipe.bind(this),this.readonly=this.readonly.bind(this),this.isNullable=this.isNullable.bind(this),this.isOptional=this.isOptional.bind(this),this[`~standard`]={version:1,vendor:`zod`,validate:e=>this[`~validate`](e)}}optional(){return Rb.create(this,this._def)}nullable(){return zb.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return vb.create(this)}promise(){return Ib.create(this,this._def)}or(e){return xb.create([this,e],this._def)}and(e){return Tb.create(this,e,this._def)}transform(e){return new Lb({...Q(this._def),schema:this,typeName:$.ZodEffects,effect:{type:`transform`,transform:e}})}default(e){let t=typeof e==`function`?e:()=>e;return new Bb({...Q(this._def),innerType:this,defaultValue:t,typeName:$.ZodDefault})}brand(){return new Ub({typeName:$.ZodBranded,type:this,...Q(this._def)})}catch(e){let t=typeof e==`function`?e:()=>e;return new Vb({...Q(this._def),innerType:this,catchValue:t,typeName:$.ZodCatch})}describe(e){let t=this.constructor;return new t({...this._def,description:e})}pipe(e){return Wb.create(this,e)}readonly(){return Gb.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}},Fy=/^c[^\s-]{8,}$/i,Iy=/^[0-9a-z]+$/,Ly=/^[0-9A-HJKMNP-TV-Z]{26}$/i,Ry=/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/i,zy=/^[a-z0-9_-]{21}$/i,By=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/,Vy=/^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/,Hy=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,Uy=`^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$`,Wy,Gy=/^(?:(?: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])$/,Ky=/^(?:(?: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])\/(3[0-2]|[12]?[0-9])$/,qy=/^(([0-9a-fA-F]{1,4}:){7,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}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/,Jy=/^(([0-9a-fA-F]{1,4}:){7,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}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,Yy=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,Xy=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,Zy=`((\\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])))`,Qy=RegExp(`^${Zy}$`);function $y(e){let t=`[0-5]\\d`;e.precision?t=`${t}\\.\\d{${e.precision}}`:e.precision??(t=`${t}(\\.\\d+)?`);let n=e.precision?`+`:`?`;return`([01]\\d|2[0-3]):[0-5]\\d(:${t})${n}`}function eb(e){return RegExp(`^${$y(e)}$`)}function tb(e){let t=`${Zy}T${$y(e)}`,n=[];return n.push(e.local?`Z?`:`Z`),e.offset&&n.push(`([+-]\\d{2}:?\\d{2})`),t=`${t}(${n.join(`|`)})`,RegExp(`^${t}$`)}function nb(e,t){return!!((t===`v4`||!t)&&Gy.test(e)||(t===`v6`||!t)&&qy.test(e))}function rb(e,t){if(!By.test(e))return!1;try{let[n]=e.split(`.`);if(!n)return!1;let r=n.replace(/-/g,`+`).replace(/_/g,`/`).padEnd(n.length+(4-n.length%4)%4,`=`),i=JSON.parse(atob(r));return!(typeof i!=`object`||!i||`typ`in i&&i?.typ!==`JWT`||!i.alg||t&&i.alg!==t)}catch{return!1}}function ib(e,t){return!!((t===`v4`||!t)&&Ky.test(e)||(t===`v6`||!t)&&Jy.test(e))}var ab=class e extends Py{_parse(e){if(this._def.coerce&&(e.data=String(e.data)),this._getType(e)!==q.string){let t=this._getOrReturnCtx(e);return Y(t,{code:J.invalid_type,expected:q.string,received:t.parsedType}),X}let t=new Ty,n;for(let r of this._def.checks)if(r.kind===`min`)e.data.length<r.value&&(n=this._getOrReturnCtx(e,n),Y(n,{code:J.too_small,minimum:r.value,type:`string`,inclusive:!0,exact:!1,message:r.message}),t.dirty());else if(r.kind===`max`)e.data.length>r.value&&(n=this._getOrReturnCtx(e,n),Y(n,{code:J.too_big,maximum:r.value,type:`string`,inclusive:!0,exact:!1,message:r.message}),t.dirty());else if(r.kind===`length`){let i=e.data.length>r.value,a=e.data.length<r.value;(i||a)&&(n=this._getOrReturnCtx(e,n),i?Y(n,{code:J.too_big,maximum:r.value,type:`string`,inclusive:!0,exact:!0,message:r.message}):a&&Y(n,{code:J.too_small,minimum:r.value,type:`string`,inclusive:!0,exact:!0,message:r.message}),t.dirty())}else if(r.kind===`email`)Hy.test(e.data)||(n=this._getOrReturnCtx(e,n),Y(n,{validation:`email`,code:J.invalid_string,message:r.message}),t.dirty());else if(r.kind===`emoji`)Wy||=new RegExp(Uy,`u`),Wy.test(e.data)||(n=this._getOrReturnCtx(e,n),Y(n,{validation:`emoji`,code:J.invalid_string,message:r.message}),t.dirty());else if(r.kind===`uuid`)Ry.test(e.data)||(n=this._getOrReturnCtx(e,n),Y(n,{validation:`uuid`,code:J.invalid_string,message:r.message}),t.dirty());else if(r.kind===`nanoid`)zy.test(e.data)||(n=this._getOrReturnCtx(e,n),Y(n,{validation:`nanoid`,code:J.invalid_string,message:r.message}),t.dirty());else if(r.kind===`cuid`)Fy.test(e.data)||(n=this._getOrReturnCtx(e,n),Y(n,{validation:`cuid`,code:J.invalid_string,message:r.message}),t.dirty());else if(r.kind===`cuid2`)Iy.test(e.data)||(n=this._getOrReturnCtx(e,n),Y(n,{validation:`cuid2`,code:J.invalid_string,message:r.message}),t.dirty());else if(r.kind===`ulid`)Ly.test(e.data)||(n=this._getOrReturnCtx(e,n),Y(n,{validation:`ulid`,code:J.invalid_string,message:r.message}),t.dirty());else if(r.kind===`url`)try{new URL(e.data)}catch{n=this._getOrReturnCtx(e,n),Y(n,{validation:`url`,code:J.invalid_string,message:r.message}),t.dirty()}else r.kind===`regex`?(r.regex.lastIndex=0,r.regex.test(e.data)||(n=this._getOrReturnCtx(e,n),Y(n,{validation:`regex`,code:J.invalid_string,message:r.message}),t.dirty())):r.kind===`trim`?e.data=e.data.trim():r.kind===`includes`?e.data.includes(r.value,r.position)||(n=this._getOrReturnCtx(e,n),Y(n,{code:J.invalid_string,validation:{includes:r.value,position:r.position},message:r.message}),t.dirty()):r.kind===`toLowerCase`?e.data=e.data.toLowerCase():r.kind===`toUpperCase`?e.data=e.data.toUpperCase():r.kind===`startsWith`?e.data.startsWith(r.value)||(n=this._getOrReturnCtx(e,n),Y(n,{code:J.invalid_string,validation:{startsWith:r.value},message:r.message}),t.dirty()):r.kind===`endsWith`?e.data.endsWith(r.value)||(n=this._getOrReturnCtx(e,n),Y(n,{code:J.invalid_string,validation:{endsWith:r.value},message:r.message}),t.dirty()):r.kind===`datetime`?tb(r).test(e.data)||(n=this._getOrReturnCtx(e,n),Y(n,{code:J.invalid_string,validation:`datetime`,message:r.message}),t.dirty()):r.kind===`date`?Qy.test(e.data)||(n=this._getOrReturnCtx(e,n),Y(n,{code:J.invalid_string,validation:`date`,message:r.message}),t.dirty()):r.kind===`time`?eb(r).test(e.data)||(n=this._getOrReturnCtx(e,n),Y(n,{code:J.invalid_string,validation:`time`,message:r.message}),t.dirty()):r.kind===`duration`?Vy.test(e.data)||(n=this._getOrReturnCtx(e,n),Y(n,{validation:`duration`,code:J.invalid_string,message:r.message}),t.dirty()):r.kind===`ip`?nb(e.data,r.version)||(n=this._getOrReturnCtx(e,n),Y(n,{validation:`ip`,code:J.invalid_string,message:r.message}),t.dirty()):r.kind===`jwt`?rb(e.data,r.alg)||(n=this._getOrReturnCtx(e,n),Y(n,{validation:`jwt`,code:J.invalid_string,message:r.message}),t.dirty()):r.kind===`cidr`?ib(e.data,r.version)||(n=this._getOrReturnCtx(e,n),Y(n,{validation:`cidr`,code:J.invalid_string,message:r.message}),t.dirty()):r.kind===`base64`?Yy.test(e.data)||(n=this._getOrReturnCtx(e,n),Y(n,{validation:`base64`,code:J.invalid_string,message:r.message}),t.dirty()):r.kind===`base64url`?Xy.test(e.data)||(n=this._getOrReturnCtx(e,n),Y(n,{validation:`base64url`,code:J.invalid_string,message:r.message}),t.dirty()):_y.assertNever(r);return{status:t.value,value:e.data}}_regex(e,t,n){return this.refinement(t=>e.test(t),{validation:t,code:J.invalid_string,...Z.errToObj(n)})}_addCheck(t){return new e({...this._def,checks:[...this._def.checks,t]})}email(e){return this._addCheck({kind:`email`,...Z.errToObj(e)})}url(e){return this._addCheck({kind:`url`,...Z.errToObj(e)})}emoji(e){return this._addCheck({kind:`emoji`,...Z.errToObj(e)})}uuid(e){return this._addCheck({kind:`uuid`,...Z.errToObj(e)})}nanoid(e){return this._addCheck({kind:`nanoid`,...Z.errToObj(e)})}cuid(e){return this._addCheck({kind:`cuid`,...Z.errToObj(e)})}cuid2(e){return this._addCheck({kind:`cuid2`,...Z.errToObj(e)})}ulid(e){return this._addCheck({kind:`ulid`,...Z.errToObj(e)})}base64(e){return this._addCheck({kind:`base64`,...Z.errToObj(e)})}base64url(e){return this._addCheck({kind:`base64url`,...Z.errToObj(e)})}jwt(e){return this._addCheck({kind:`jwt`,...Z.errToObj(e)})}ip(e){return this._addCheck({kind:`ip`,...Z.errToObj(e)})}cidr(e){return this._addCheck({kind:`cidr`,...Z.errToObj(e)})}datetime(e){return typeof e==`string`?this._addCheck({kind:`datetime`,precision:null,offset:!1,local:!1,message:e}):this._addCheck({kind:`datetime`,precision:e?.precision===void 0?null:e?.precision,offset:e?.offset??!1,local:e?.local??!1,...Z.errToObj(e?.message)})}date(e){return this._addCheck({kind:`date`,message:e})}time(e){return typeof e==`string`?this._addCheck({kind:`time`,precision:null,message:e}):this._addCheck({kind:`time`,precision:e?.precision===void 0?null:e?.precision,...Z.errToObj(e?.message)})}duration(e){return this._addCheck({kind:`duration`,...Z.errToObj(e)})}regex(e,t){return this._addCheck({kind:`regex`,regex:e,...Z.errToObj(t)})}includes(e,t){return this._addCheck({kind:`includes`,value:e,position:t?.position,...Z.errToObj(t?.message)})}startsWith(e,t){return this._addCheck({kind:`startsWith`,value:e,...Z.errToObj(t)})}endsWith(e,t){return this._addCheck({kind:`endsWith`,value:e,...Z.errToObj(t)})}min(e,t){return this._addCheck({kind:`min`,value:e,...Z.errToObj(t)})}max(e,t){return this._addCheck({kind:`max`,value:e,...Z.errToObj(t)})}length(e,t){return this._addCheck({kind:`length`,value:e,...Z.errToObj(t)})}nonempty(e){return this.min(1,Z.errToObj(e))}trim(){return new e({...this._def,checks:[...this._def.checks,{kind:`trim`}]})}toLowerCase(){return new e({...this._def,checks:[...this._def.checks,{kind:`toLowerCase`}]})}toUpperCase(){return new e({...this._def,checks:[...this._def.checks,{kind:`toUpperCase`}]})}get isDatetime(){return!!this._def.checks.find(e=>e.kind===`datetime`)}get isDate(){return!!this._def.checks.find(e=>e.kind===`date`)}get isTime(){return!!this._def.checks.find(e=>e.kind===`time`)}get isDuration(){return!!this._def.checks.find(e=>e.kind===`duration`)}get isEmail(){return!!this._def.checks.find(e=>e.kind===`email`)}get isURL(){return!!this._def.checks.find(e=>e.kind===`url`)}get isEmoji(){return!!this._def.checks.find(e=>e.kind===`emoji`)}get isUUID(){return!!this._def.checks.find(e=>e.kind===`uuid`)}get isNANOID(){return!!this._def.checks.find(e=>e.kind===`nanoid`)}get isCUID(){return!!this._def.checks.find(e=>e.kind===`cuid`)}get isCUID2(){return!!this._def.checks.find(e=>e.kind===`cuid2`)}get isULID(){return!!this._def.checks.find(e=>e.kind===`ulid`)}get isIP(){return!!this._def.checks.find(e=>e.kind===`ip`)}get isCIDR(){return!!this._def.checks.find(e=>e.kind===`cidr`)}get isBase64(){return!!this._def.checks.find(e=>e.kind===`base64`)}get isBase64url(){return!!this._def.checks.find(e=>e.kind===`base64url`)}get minLength(){let e=null;for(let t of this._def.checks)t.kind===`min`&&(e===null||t.value>e)&&(e=t.value);return e}get maxLength(){let e=null;for(let t of this._def.checks)t.kind===`max`&&(e===null||t.value<e)&&(e=t.value);return e}};ab.create=e=>new ab({checks:[],typeName:$.ZodString,coerce:e?.coerce??!1,...Q(e)});function ob(e,t){let n=(e.toString().split(`.`)[1]||``).length,r=(t.toString().split(`.`)[1]||``).length,i=n>r?n:r;return Number.parseInt(e.toFixed(i).replace(`.`,``))%Number.parseInt(t.toFixed(i).replace(`.`,``))/10**i}var sb=class e extends Py{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte,this.step=this.multipleOf}_parse(e){if(this._def.coerce&&(e.data=Number(e.data)),this._getType(e)!==q.number){let t=this._getOrReturnCtx(e);return Y(t,{code:J.invalid_type,expected:q.number,received:t.parsedType}),X}let t,n=new Ty;for(let r of this._def.checks)r.kind===`int`?_y.isInteger(e.data)||(t=this._getOrReturnCtx(e,t),Y(t,{code:J.invalid_type,expected:`integer`,received:`float`,message:r.message}),n.dirty()):r.kind===`min`?(r.inclusive?e.data<r.value:e.data<=r.value)&&(t=this._getOrReturnCtx(e,t),Y(t,{code:J.too_small,minimum:r.value,type:`number`,inclusive:r.inclusive,exact:!1,message:r.message}),n.dirty()):r.kind===`max`?(r.inclusive?e.data>r.value:e.data>=r.value)&&(t=this._getOrReturnCtx(e,t),Y(t,{code:J.too_big,maximum:r.value,type:`number`,inclusive:r.inclusive,exact:!1,message:r.message}),n.dirty()):r.kind===`multipleOf`?ob(e.data,r.value)!==0&&(t=this._getOrReturnCtx(e,t),Y(t,{code:J.not_multiple_of,multipleOf:r.value,message:r.message}),n.dirty()):r.kind===`finite`?Number.isFinite(e.data)||(t=this._getOrReturnCtx(e,t),Y(t,{code:J.not_finite,message:r.message}),n.dirty()):_y.assertNever(r);return{status:n.value,value:e.data}}gte(e,t){return this.setLimit(`min`,e,!0,Z.toString(t))}gt(e,t){return this.setLimit(`min`,e,!1,Z.toString(t))}lte(e,t){return this.setLimit(`max`,e,!0,Z.toString(t))}lt(e,t){return this.setLimit(`max`,e,!1,Z.toString(t))}setLimit(t,n,r,i){return new e({...this._def,checks:[...this._def.checks,{kind:t,value:n,inclusive:r,message:Z.toString(i)}]})}_addCheck(t){return new e({...this._def,checks:[...this._def.checks,t]})}int(e){return this._addCheck({kind:`int`,message:Z.toString(e)})}positive(e){return this._addCheck({kind:`min`,value:0,inclusive:!1,message:Z.toString(e)})}negative(e){return this._addCheck({kind:`max`,value:0,inclusive:!1,message:Z.toString(e)})}nonpositive(e){return this._addCheck({kind:`max`,value:0,inclusive:!0,message:Z.toString(e)})}nonnegative(e){return this._addCheck({kind:`min`,value:0,inclusive:!0,message:Z.toString(e)})}multipleOf(e,t){return this._addCheck({kind:`multipleOf`,value:e,message:Z.toString(t)})}finite(e){return this._addCheck({kind:`finite`,message:Z.toString(e)})}safe(e){return this._addCheck({kind:`min`,inclusive:!0,value:-(2**53-1),message:Z.toString(e)})._addCheck({kind:`max`,inclusive:!0,value:2**53-1,message:Z.toString(e)})}get minValue(){let e=null;for(let t of this._def.checks)t.kind===`min`&&(e===null||t.value>e)&&(e=t.value);return e}get maxValue(){let e=null;for(let t of this._def.checks)t.kind===`max`&&(e===null||t.value<e)&&(e=t.value);return e}get isInt(){return!!this._def.checks.find(e=>e.kind===`int`||e.kind===`multipleOf`&&_y.isInteger(e.value))}get isFinite(){let e=null,t=null;for(let n of this._def.checks)if(n.kind===`finite`||n.kind===`int`||n.kind===`multipleOf`)return!0;else n.kind===`min`?(t===null||n.value>t)&&(t=n.value):n.kind===`max`&&(e===null||n.value<e)&&(e=n.value);return Number.isFinite(t)&&Number.isFinite(e)}};sb.create=e=>new sb({checks:[],typeName:$.ZodNumber,coerce:e?.coerce||!1,...Q(e)});var cb=class e extends Py{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte}_parse(e){if(this._def.coerce)try{e.data=BigInt(e.data)}catch{return this._getInvalidInput(e)}if(this._getType(e)!==q.bigint)return this._getInvalidInput(e);let t,n=new Ty;for(let r of this._def.checks)r.kind===`min`?(r.inclusive?e.data<r.value:e.data<=r.value)&&(t=this._getOrReturnCtx(e,t),Y(t,{code:J.too_small,type:`bigint`,minimum:r.value,inclusive:r.inclusive,message:r.message}),n.dirty()):r.kind===`max`?(r.inclusive?e.data>r.value:e.data>=r.value)&&(t=this._getOrReturnCtx(e,t),Y(t,{code:J.too_big,type:`bigint`,maximum:r.value,inclusive:r.inclusive,message:r.message}),n.dirty()):r.kind===`multipleOf`?e.data%r.value!==BigInt(0)&&(t=this._getOrReturnCtx(e,t),Y(t,{code:J.not_multiple_of,multipleOf:r.value,message:r.message}),n.dirty()):_y.assertNever(r);return{status:n.value,value:e.data}}_getInvalidInput(e){let t=this._getOrReturnCtx(e);return Y(t,{code:J.invalid_type,expected:q.bigint,received:t.parsedType}),X}gte(e,t){return this.setLimit(`min`,e,!0,Z.toString(t))}gt(e,t){return this.setLimit(`min`,e,!1,Z.toString(t))}lte(e,t){return this.setLimit(`max`,e,!0,Z.toString(t))}lt(e,t){return this.setLimit(`max`,e,!1,Z.toString(t))}setLimit(t,n,r,i){return new e({...this._def,checks:[...this._def.checks,{kind:t,value:n,inclusive:r,message:Z.toString(i)}]})}_addCheck(t){return new e({...this._def,checks:[...this._def.checks,t]})}positive(e){return this._addCheck({kind:`min`,value:BigInt(0),inclusive:!1,message:Z.toString(e)})}negative(e){return this._addCheck({kind:`max`,value:BigInt(0),inclusive:!1,message:Z.toString(e)})}nonpositive(e){return this._addCheck({kind:`max`,value:BigInt(0),inclusive:!0,message:Z.toString(e)})}nonnegative(e){return this._addCheck({kind:`min`,value:BigInt(0),inclusive:!0,message:Z.toString(e)})}multipleOf(e,t){return this._addCheck({kind:`multipleOf`,value:e,message:Z.toString(t)})}get minValue(){let e=null;for(let t of this._def.checks)t.kind===`min`&&(e===null||t.value>e)&&(e=t.value);return e}get maxValue(){let e=null;for(let t of this._def.checks)t.kind===`max`&&(e===null||t.value<e)&&(e=t.value);return e}};cb.create=e=>new cb({checks:[],typeName:$.ZodBigInt,coerce:e?.coerce??!1,...Q(e)});var lb=class extends Py{_parse(e){if(this._def.coerce&&(e.data=!!e.data),this._getType(e)!==q.boolean){let t=this._getOrReturnCtx(e);return Y(t,{code:J.invalid_type,expected:q.boolean,received:t.parsedType}),X}return Dy(e.data)}};lb.create=e=>new lb({typeName:$.ZodBoolean,coerce:e?.coerce||!1,...Q(e)});var ub=class e extends Py{_parse(e){if(this._def.coerce&&(e.data=new Date(e.data)),this._getType(e)!==q.date){let t=this._getOrReturnCtx(e);return Y(t,{code:J.invalid_type,expected:q.date,received:t.parsedType}),X}if(Number.isNaN(e.data.getTime()))return Y(this._getOrReturnCtx(e),{code:J.invalid_date}),X;let t=new Ty,n;for(let r of this._def.checks)r.kind===`min`?e.data.getTime()<r.value&&(n=this._getOrReturnCtx(e,n),Y(n,{code:J.too_small,message:r.message,inclusive:!0,exact:!1,minimum:r.value,type:`date`}),t.dirty()):r.kind===`max`?e.data.getTime()>r.value&&(n=this._getOrReturnCtx(e,n),Y(n,{code:J.too_big,message:r.message,inclusive:!0,exact:!1,maximum:r.value,type:`date`}),t.dirty()):_y.assertNever(r);return{status:t.value,value:new Date(e.data.getTime())}}_addCheck(t){return new e({...this._def,checks:[...this._def.checks,t]})}min(e,t){return this._addCheck({kind:`min`,value:e.getTime(),message:Z.toString(t)})}max(e,t){return this._addCheck({kind:`max`,value:e.getTime(),message:Z.toString(t)})}get minDate(){let e=null;for(let t of this._def.checks)t.kind===`min`&&(e===null||t.value>e)&&(e=t.value);return e==null?null:new Date(e)}get maxDate(){let e=null;for(let t of this._def.checks)t.kind===`max`&&(e===null||t.value<e)&&(e=t.value);return e==null?null:new Date(e)}};ub.create=e=>new ub({checks:[],coerce:e?.coerce||!1,typeName:$.ZodDate,...Q(e)});var db=class extends Py{_parse(e){if(this._getType(e)!==q.symbol){let t=this._getOrReturnCtx(e);return Y(t,{code:J.invalid_type,expected:q.symbol,received:t.parsedType}),X}return Dy(e.data)}};db.create=e=>new db({typeName:$.ZodSymbol,...Q(e)});var fb=class extends Py{_parse(e){if(this._getType(e)!==q.undefined){let t=this._getOrReturnCtx(e);return Y(t,{code:J.invalid_type,expected:q.undefined,received:t.parsedType}),X}return Dy(e.data)}};fb.create=e=>new fb({typeName:$.ZodUndefined,...Q(e)});var pb=class extends Py{_parse(e){if(this._getType(e)!==q.null){let t=this._getOrReturnCtx(e);return Y(t,{code:J.invalid_type,expected:q.null,received:t.parsedType}),X}return Dy(e.data)}};pb.create=e=>new pb({typeName:$.ZodNull,...Q(e)});var mb=class extends Py{constructor(){super(...arguments),this._any=!0}_parse(e){return Dy(e.data)}};mb.create=e=>new mb({typeName:$.ZodAny,...Q(e)});var hb=class extends Py{constructor(){super(...arguments),this._unknown=!0}_parse(e){return Dy(e.data)}};hb.create=e=>new hb({typeName:$.ZodUnknown,...Q(e)});var gb=class extends Py{_parse(e){let t=this._getOrReturnCtx(e);return Y(t,{code:J.invalid_type,expected:q.never,received:t.parsedType}),X}};gb.create=e=>new gb({typeName:$.ZodNever,...Q(e)});var _b=class extends Py{_parse(e){if(this._getType(e)!==q.undefined){let t=this._getOrReturnCtx(e);return Y(t,{code:J.invalid_type,expected:q.void,received:t.parsedType}),X}return Dy(e.data)}};_b.create=e=>new _b({typeName:$.ZodVoid,...Q(e)});var vb=class e extends Py{_parse(e){let{ctx:t,status:n}=this._processInputParams(e),r=this._def;if(t.parsedType!==q.array)return Y(t,{code:J.invalid_type,expected:q.array,received:t.parsedType}),X;if(r.exactLength!==null){let e=t.data.length>r.exactLength.value,i=t.data.length<r.exactLength.value;(e||i)&&(Y(t,{code:e?J.too_big:J.too_small,minimum:i?r.exactLength.value:void 0,maximum:e?r.exactLength.value:void 0,type:`array`,inclusive:!0,exact:!0,message:r.exactLength.message}),n.dirty())}if(r.minLength!==null&&t.data.length<r.minLength.value&&(Y(t,{code:J.too_small,minimum:r.minLength.value,type:`array`,inclusive:!0,exact:!1,message:r.minLength.message}),n.dirty()),r.maxLength!==null&&t.data.length>r.maxLength.value&&(Y(t,{code:J.too_big,maximum:r.maxLength.value,type:`array`,inclusive:!0,exact:!1,message:r.maxLength.message}),n.dirty()),t.common.async)return Promise.all([...t.data].map((e,n)=>r.type._parseAsync(new My(t,e,t.path,n)))).then(e=>Ty.mergeArray(n,e));let i=[...t.data].map((e,n)=>r.type._parseSync(new My(t,e,t.path,n)));return Ty.mergeArray(n,i)}get element(){return this._def.type}min(t,n){return new e({...this._def,minLength:{value:t,message:Z.toString(n)}})}max(t,n){return new e({...this._def,maxLength:{value:t,message:Z.toString(n)}})}length(t,n){return new e({...this._def,exactLength:{value:t,message:Z.toString(n)}})}nonempty(e){return this.min(1,e)}};vb.create=(e,t)=>new vb({type:e,minLength:null,maxLength:null,exactLength:null,typeName:$.ZodArray,...Q(t)});function yb(e){if(e instanceof bb){let t={};for(let n in e.shape){let r=e.shape[n];t[n]=Rb.create(yb(r))}return new bb({...e._def,shape:()=>t})}else if(e instanceof vb)return new vb({...e._def,type:yb(e.element)});else if(e instanceof Rb)return Rb.create(yb(e.unwrap()));else if(e instanceof zb)return zb.create(yb(e.unwrap()));else if(e instanceof Eb)return Eb.create(e.items.map(e=>yb(e)));else return e}var bb=class e extends Py{constructor(){super(...arguments),this._cached=null,this.nonstrict=this.passthrough,this.augment=this.extend}_getCached(){if(this._cached!==null)return this._cached;let e=this._def.shape(),t=_y.objectKeys(e);return this._cached={shape:e,keys:t},this._cached}_parse(e){if(this._getType(e)!==q.object){let t=this._getOrReturnCtx(e);return Y(t,{code:J.invalid_type,expected:q.object,received:t.parsedType}),X}let{status:t,ctx:n}=this._processInputParams(e),{shape:r,keys:i}=this._getCached(),a=[];if(!(this._def.catchall instanceof gb&&this._def.unknownKeys===`strip`))for(let e in n.data)i.includes(e)||a.push(e);let o=[];for(let e of i){let t=r[e],i=n.data[e];o.push({key:{status:`valid`,value:e},value:t._parse(new My(n,i,n.path,e)),alwaysSet:e in n.data})}if(this._def.catchall instanceof gb){let e=this._def.unknownKeys;if(e===`passthrough`)for(let e of a)o.push({key:{status:`valid`,value:e},value:{status:`valid`,value:n.data[e]}});else if(e===`strict`)a.length>0&&(Y(n,{code:J.unrecognized_keys,keys:a}),t.dirty());else if(e!==`strip`)throw Error(`Internal ZodObject error: invalid unknownKeys value.`)}else{let e=this._def.catchall;for(let t of a){let r=n.data[t];o.push({key:{status:`valid`,value:t},value:e._parse(new My(n,r,n.path,t)),alwaysSet:t in n.data})}}return n.common.async?Promise.resolve().then(async()=>{let e=[];for(let t of o){let n=await t.key,r=await t.value;e.push({key:n,value:r,alwaysSet:t.alwaysSet})}return e}).then(e=>Ty.mergeObjectSync(t,e)):Ty.mergeObjectSync(t,o)}get shape(){return this._def.shape()}strict(t){return Z.errToObj,new e({...this._def,unknownKeys:`strict`,...t===void 0?{}:{errorMap:(e,n)=>{let r=this._def.errorMap?.(e,n).message??n.defaultError;return e.code===`unrecognized_keys`?{message:Z.errToObj(t).message??r}:{message:r}}}})}strip(){return new e({...this._def,unknownKeys:`strip`})}passthrough(){return new e({...this._def,unknownKeys:`passthrough`})}extend(t){return new e({...this._def,shape:()=>({...this._def.shape(),...t})})}merge(t){return new e({unknownKeys:t._def.unknownKeys,catchall:t._def.catchall,shape:()=>({...this._def.shape(),...t._def.shape()}),typeName:$.ZodObject})}setKey(e,t){return this.augment({[e]:t})}catchall(t){return new e({...this._def,catchall:t})}pick(t){let n={};for(let e of _y.objectKeys(t))t[e]&&this.shape[e]&&(n[e]=this.shape[e]);return new e({...this._def,shape:()=>n})}omit(t){let n={};for(let e of _y.objectKeys(this.shape))t[e]||(n[e]=this.shape[e]);return new e({...this._def,shape:()=>n})}deepPartial(){return yb(this)}partial(t){let n={};for(let e of _y.objectKeys(this.shape)){let r=this.shape[e];t&&!t[e]?n[e]=r:n[e]=r.optional()}return new e({...this._def,shape:()=>n})}required(t){let n={};for(let e of _y.objectKeys(this.shape))if(t&&!t[e])n[e]=this.shape[e];else{let t=this.shape[e];for(;t instanceof Rb;)t=t._def.innerType;n[e]=t}return new e({...this._def,shape:()=>n})}keyof(){return Nb(_y.objectKeys(this.shape))}};bb.create=(e,t)=>new bb({shape:()=>e,unknownKeys:`strip`,catchall:gb.create(),typeName:$.ZodObject,...Q(t)}),bb.strictCreate=(e,t)=>new bb({shape:()=>e,unknownKeys:`strict`,catchall:gb.create(),typeName:$.ZodObject,...Q(t)}),bb.lazycreate=(e,t)=>new bb({shape:e,unknownKeys:`strip`,catchall:gb.create(),typeName:$.ZodObject,...Q(t)});var xb=class extends Py{_parse(e){let{ctx:t}=this._processInputParams(e),n=this._def.options;function r(e){for(let t of e)if(t.result.status===`valid`)return t.result;for(let n of e)if(n.result.status===`dirty`)return t.common.issues.push(...n.ctx.common.issues),n.result;let n=e.map(e=>new by(e.ctx.common.issues));return Y(t,{code:J.invalid_union,unionErrors:n}),X}if(t.common.async)return Promise.all(n.map(async e=>{let n={...t,common:{...t.common,issues:[]},parent:null};return{result:await e._parseAsync({data:t.data,path:t.path,parent:n}),ctx:n}})).then(r);{let e,r=[];for(let i of n){let n={...t,common:{...t.common,issues:[]},parent:null},a=i._parseSync({data:t.data,path:t.path,parent:n});if(a.status===`valid`)return a;a.status===`dirty`&&!e&&(e={result:a,ctx:n}),n.common.issues.length&&r.push(n.common.issues)}if(e)return t.common.issues.push(...e.ctx.common.issues),e.result;let i=r.map(e=>new by(e));return Y(t,{code:J.invalid_union,unionErrors:i}),X}}get options(){return this._def.options}};xb.create=(e,t)=>new xb({options:e,typeName:$.ZodUnion,...Q(t)});var Sb=e=>e instanceof jb?Sb(e.schema):e instanceof Lb?Sb(e.innerType()):e instanceof Mb?[e.value]:e instanceof Pb?e.options:e instanceof Fb?_y.objectValues(e.enum):e instanceof Bb?Sb(e._def.innerType):e instanceof fb?[void 0]:e instanceof pb?[null]:e instanceof Rb?[void 0,...Sb(e.unwrap())]:e instanceof zb?[null,...Sb(e.unwrap())]:e instanceof Ub||e instanceof Gb?Sb(e.unwrap()):e instanceof Vb?Sb(e._def.innerType):[],Cb=class e extends Py{_parse(e){let{ctx:t}=this._processInputParams(e);if(t.parsedType!==q.object)return Y(t,{code:J.invalid_type,expected:q.object,received:t.parsedType}),X;let n=this.discriminator,r=t.data[n],i=this.optionsMap.get(r);return i?t.common.async?i._parseAsync({data:t.data,path:t.path,parent:t}):i._parseSync({data:t.data,path:t.path,parent:t}):(Y(t,{code:J.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[n]}),X)}get discriminator(){return this._def.discriminator}get options(){return this._def.options}get optionsMap(){return this._def.optionsMap}static create(t,n,r){let i=new Map;for(let e of n){let n=Sb(e.shape[t]);if(!n.length)throw Error(`A discriminator value for key \`${t}\` could not be extracted from all schema options`);for(let r of n){if(i.has(r))throw Error(`Discriminator property ${String(t)} has duplicate value ${String(r)}`);i.set(r,e)}}return new e({typeName:$.ZodDiscriminatedUnion,discriminator:t,options:n,optionsMap:i,...Q(r)})}};function wb(e,t){let n=yy(e),r=yy(t);if(e===t)return{valid:!0,data:e};if(n===q.object&&r===q.object){let n=_y.objectKeys(t),r=_y.objectKeys(e).filter(e=>n.indexOf(e)!==-1),i={...e,...t};for(let n of r){let r=wb(e[n],t[n]);if(!r.valid)return{valid:!1};i[n]=r.data}return{valid:!0,data:i}}else if(n===q.array&&r===q.array){if(e.length!==t.length)return{valid:!1};let n=[];for(let r=0;r<e.length;r++){let i=e[r],a=t[r],o=wb(i,a);if(!o.valid)return{valid:!1};n.push(o.data)}return{valid:!0,data:n}}else if(n===q.date&&r===q.date&&+e==+t)return{valid:!0,data:e};else return{valid:!1}}var Tb=class extends Py{_parse(e){let{status:t,ctx:n}=this._processInputParams(e),r=(e,r)=>{if(Oy(e)||Oy(r))return X;let i=wb(e.value,r.value);return i.valid?((ky(e)||ky(r))&&t.dirty(),{status:t.value,value:i.data}):(Y(n,{code:J.invalid_intersection_types}),X)};return n.common.async?Promise.all([this._def.left._parseAsync({data:n.data,path:n.path,parent:n}),this._def.right._parseAsync({data:n.data,path:n.path,parent:n})]).then(([e,t])=>r(e,t)):r(this._def.left._parseSync({data:n.data,path:n.path,parent:n}),this._def.right._parseSync({data:n.data,path:n.path,parent:n}))}};Tb.create=(e,t,n)=>new Tb({left:e,right:t,typeName:$.ZodIntersection,...Q(n)});var Eb=class e extends Py{_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==q.array)return Y(n,{code:J.invalid_type,expected:q.array,received:n.parsedType}),X;if(n.data.length<this._def.items.length)return Y(n,{code:J.too_small,minimum:this._def.items.length,inclusive:!0,exact:!1,type:`array`}),X;!this._def.rest&&n.data.length>this._def.items.length&&(Y(n,{code:J.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:`array`}),t.dirty());let r=[...n.data].map((e,t)=>{let r=this._def.items[t]||this._def.rest;return r?r._parse(new My(n,e,n.path,t)):null}).filter(e=>!!e);return n.common.async?Promise.all(r).then(e=>Ty.mergeArray(t,e)):Ty.mergeArray(t,r)}get items(){return this._def.items}rest(t){return new e({...this._def,rest:t})}};Eb.create=(e,t)=>{if(!Array.isArray(e))throw Error(`You must pass an array of schemas to z.tuple([ ... ])`);return new Eb({items:e,typeName:$.ZodTuple,rest:null,...Q(t)})};var Db=class e extends Py{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==q.object)return Y(n,{code:J.invalid_type,expected:q.object,received:n.parsedType}),X;let r=[],i=this._def.keyType,a=this._def.valueType;for(let e in n.data)r.push({key:i._parse(new My(n,e,n.path,e)),value:a._parse(new My(n,n.data[e],n.path,e)),alwaysSet:e in n.data});return n.common.async?Ty.mergeObjectAsync(t,r):Ty.mergeObjectSync(t,r)}get element(){return this._def.valueType}static create(t,n,r){return n instanceof Py?new e({keyType:t,valueType:n,typeName:$.ZodRecord,...Q(r)}):new e({keyType:ab.create(),valueType:t,typeName:$.ZodRecord,...Q(n)})}},Ob=class extends Py{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==q.map)return Y(n,{code:J.invalid_type,expected:q.map,received:n.parsedType}),X;let r=this._def.keyType,i=this._def.valueType,a=[...n.data.entries()].map(([e,t],a)=>({key:r._parse(new My(n,e,n.path,[a,`key`])),value:i._parse(new My(n,t,n.path,[a,`value`]))}));if(n.common.async){let e=new Map;return Promise.resolve().then(async()=>{for(let n of a){let r=await n.key,i=await n.value;if(r.status===`aborted`||i.status===`aborted`)return X;(r.status===`dirty`||i.status===`dirty`)&&t.dirty(),e.set(r.value,i.value)}return{status:t.value,value:e}})}else{let e=new Map;for(let n of a){let r=n.key,i=n.value;if(r.status===`aborted`||i.status===`aborted`)return X;(r.status===`dirty`||i.status===`dirty`)&&t.dirty(),e.set(r.value,i.value)}return{status:t.value,value:e}}}};Ob.create=(e,t,n)=>new Ob({valueType:t,keyType:e,typeName:$.ZodMap,...Q(n)});var kb=class e extends Py{_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.parsedType!==q.set)return Y(n,{code:J.invalid_type,expected:q.set,received:n.parsedType}),X;let r=this._def;r.minSize!==null&&n.data.size<r.minSize.value&&(Y(n,{code:J.too_small,minimum:r.minSize.value,type:`set`,inclusive:!0,exact:!1,message:r.minSize.message}),t.dirty()),r.maxSize!==null&&n.data.size>r.maxSize.value&&(Y(n,{code:J.too_big,maximum:r.maxSize.value,type:`set`,inclusive:!0,exact:!1,message:r.maxSize.message}),t.dirty());let i=this._def.valueType;function a(e){let n=new Set;for(let r of e){if(r.status===`aborted`)return X;r.status===`dirty`&&t.dirty(),n.add(r.value)}return{status:t.value,value:n}}let o=[...n.data.values()].map((e,t)=>i._parse(new My(n,e,n.path,t)));return n.common.async?Promise.all(o).then(e=>a(e)):a(o)}min(t,n){return new e({...this._def,minSize:{value:t,message:Z.toString(n)}})}max(t,n){return new e({...this._def,maxSize:{value:t,message:Z.toString(n)}})}size(e,t){return this.min(e,t).max(e,t)}nonempty(e){return this.min(1,e)}};kb.create=(e,t)=>new kb({valueType:e,minSize:null,maxSize:null,typeName:$.ZodSet,...Q(t)});var Ab=class e extends Py{constructor(){super(...arguments),this.validate=this.implement}_parse(e){let{ctx:t}=this._processInputParams(e);if(t.parsedType!==q.function)return Y(t,{code:J.invalid_type,expected:q.function,received:t.parsedType}),X;function n(e,n){return wy({data:e,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,Cy(),xy].filter(e=>!!e),issueData:{code:J.invalid_arguments,argumentsError:n}})}function r(e,n){return wy({data:e,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,Cy(),xy].filter(e=>!!e),issueData:{code:J.invalid_return_type,returnTypeError:n}})}let i={errorMap:t.common.contextualErrorMap},a=t.data;if(this._def.returns instanceof Ib){let e=this;return Dy(async function(...t){let o=new by([]),s=await e._def.args.parseAsync(t,i).catch(e=>{throw o.addIssue(n(t,e)),o}),c=await Reflect.apply(a,this,s);return await e._def.returns._def.type.parseAsync(c,i).catch(e=>{throw o.addIssue(r(c,e)),o})})}else{let e=this;return Dy(function(...t){let o=e._def.args.safeParse(t,i);if(!o.success)throw new by([n(t,o.error)]);let s=Reflect.apply(a,this,o.data),c=e._def.returns.safeParse(s,i);if(!c.success)throw new by([r(s,c.error)]);return c.data})}}parameters(){return this._def.args}returnType(){return this._def.returns}args(...t){return new e({...this._def,args:Eb.create(t).rest(hb.create())})}returns(t){return new e({...this._def,returns:t})}implement(e){return this.parse(e)}strictImplement(e){return this.parse(e)}static create(t,n,r){return new e({args:t||Eb.create([]).rest(hb.create()),returns:n||hb.create(),typeName:$.ZodFunction,...Q(r)})}},jb=class extends Py{get schema(){return this._def.getter()}_parse(e){let{ctx:t}=this._processInputParams(e);return this._def.getter()._parse({data:t.data,path:t.path,parent:t})}};jb.create=(e,t)=>new jb({getter:e,typeName:$.ZodLazy,...Q(t)});var Mb=class extends Py{_parse(e){if(e.data!==this._def.value){let t=this._getOrReturnCtx(e);return Y(t,{received:t.data,code:J.invalid_literal,expected:this._def.value}),X}return{status:`valid`,value:e.data}}get value(){return this._def.value}};Mb.create=(e,t)=>new Mb({value:e,typeName:$.ZodLiteral,...Q(t)});function Nb(e,t){return new Pb({values:e,typeName:$.ZodEnum,...Q(t)})}var Pb=class e extends Py{_parse(e){if(typeof e.data!=`string`){let t=this._getOrReturnCtx(e),n=this._def.values;return Y(t,{expected:_y.joinValues(n),received:t.parsedType,code:J.invalid_type}),X}if(this._cache||=new Set(this._def.values),!this._cache.has(e.data)){let t=this._getOrReturnCtx(e),n=this._def.values;return Y(t,{received:t.data,code:J.invalid_enum_value,options:n}),X}return Dy(e.data)}get options(){return this._def.values}get enum(){let e={};for(let t of this._def.values)e[t]=t;return e}get Values(){let e={};for(let t of this._def.values)e[t]=t;return e}get Enum(){let e={};for(let t of this._def.values)e[t]=t;return e}extract(t,n=this._def){return e.create(t,{...this._def,...n})}exclude(t,n=this._def){return e.create(this.options.filter(e=>!t.includes(e)),{...this._def,...n})}};Pb.create=Nb;var Fb=class extends Py{_parse(e){let t=_y.getValidEnumValues(this._def.values),n=this._getOrReturnCtx(e);if(n.parsedType!==q.string&&n.parsedType!==q.number){let e=_y.objectValues(t);return Y(n,{expected:_y.joinValues(e),received:n.parsedType,code:J.invalid_type}),X}if(this._cache||=new Set(_y.getValidEnumValues(this._def.values)),!this._cache.has(e.data)){let e=_y.objectValues(t);return Y(n,{received:n.data,code:J.invalid_enum_value,options:e}),X}return Dy(e.data)}get enum(){return this._def.values}};Fb.create=(e,t)=>new Fb({values:e,typeName:$.ZodNativeEnum,...Q(t)});var Ib=class extends Py{unwrap(){return this._def.type}_parse(e){let{ctx:t}=this._processInputParams(e);return t.parsedType!==q.promise&&t.common.async===!1?(Y(t,{code:J.invalid_type,expected:q.promise,received:t.parsedType}),X):Dy((t.parsedType===q.promise?t.data:Promise.resolve(t.data)).then(e=>this._def.type.parseAsync(e,{path:t.path,errorMap:t.common.contextualErrorMap})))}};Ib.create=(e,t)=>new Ib({type:e,typeName:$.ZodPromise,...Q(t)});var Lb=class extends Py{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===$.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(e){let{status:t,ctx:n}=this._processInputParams(e),r=this._def.effect||null,i={addIssue:e=>{Y(n,e),e.fatal?t.abort():t.dirty()},get path(){return n.path}};if(i.addIssue=i.addIssue.bind(i),r.type===`preprocess`){let e=r.transform(n.data,i);if(n.common.async)return Promise.resolve(e).then(async e=>{if(t.value===`aborted`)return X;let r=await this._def.schema._parseAsync({data:e,path:n.path,parent:n});return r.status===`aborted`?X:r.status===`dirty`||t.value===`dirty`?Ey(r.value):r});{if(t.value===`aborted`)return X;let r=this._def.schema._parseSync({data:e,path:n.path,parent:n});return r.status===`aborted`?X:r.status===`dirty`||t.value===`dirty`?Ey(r.value):r}}if(r.type===`refinement`){let e=e=>{let t=r.refinement(e,i);if(n.common.async)return Promise.resolve(t);if(t instanceof Promise)throw Error(`Async refinement encountered during synchronous parse operation. Use .parseAsync instead.`);return e};if(n.common.async===!1){let r=this._def.schema._parseSync({data:n.data,path:n.path,parent:n});return r.status===`aborted`?X:(r.status===`dirty`&&t.dirty(),e(r.value),{status:t.value,value:r.value})}else return this._def.schema._parseAsync({data:n.data,path:n.path,parent:n}).then(n=>n.status===`aborted`?X:(n.status===`dirty`&&t.dirty(),e(n.value).then(()=>({status:t.value,value:n.value}))))}if(r.type===`transform`)if(n.common.async===!1){let e=this._def.schema._parseSync({data:n.data,path:n.path,parent:n});if(!Ay(e))return X;let a=r.transform(e.value,i);if(a instanceof Promise)throw Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`);return{status:t.value,value:a}}else return this._def.schema._parseAsync({data:n.data,path:n.path,parent:n}).then(e=>Ay(e)?Promise.resolve(r.transform(e.value,i)).then(e=>({status:t.value,value:e})):X);_y.assertNever(r)}};Lb.create=(e,t,n)=>new Lb({schema:e,typeName:$.ZodEffects,effect:t,...Q(n)}),Lb.createWithPreprocess=(e,t,n)=>new Lb({schema:t,effect:{type:`preprocess`,transform:e},typeName:$.ZodEffects,...Q(n)});var Rb=class extends Py{_parse(e){return this._getType(e)===q.undefined?Dy(void 0):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};Rb.create=(e,t)=>new Rb({innerType:e,typeName:$.ZodOptional,...Q(t)});var zb=class extends Py{_parse(e){return this._getType(e)===q.null?Dy(null):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};zb.create=(e,t)=>new zb({innerType:e,typeName:$.ZodNullable,...Q(t)});var Bb=class extends Py{_parse(e){let{ctx:t}=this._processInputParams(e),n=t.data;return t.parsedType===q.undefined&&(n=this._def.defaultValue()),this._def.innerType._parse({data:n,path:t.path,parent:t})}removeDefault(){return this._def.innerType}};Bb.create=(e,t)=>new Bb({innerType:e,typeName:$.ZodDefault,defaultValue:typeof t.default==`function`?t.default:()=>t.default,...Q(t)});var Vb=class extends Py{_parse(e){let{ctx:t}=this._processInputParams(e),n={...t,common:{...t.common,issues:[]}},r=this._def.innerType._parse({data:n.data,path:n.path,parent:{...n}});return jy(r)?r.then(e=>({status:`valid`,value:e.status===`valid`?e.value:this._def.catchValue({get error(){return new by(n.common.issues)},input:n.data})})):{status:`valid`,value:r.status===`valid`?r.value:this._def.catchValue({get error(){return new by(n.common.issues)},input:n.data})}}removeCatch(){return this._def.innerType}};Vb.create=(e,t)=>new Vb({innerType:e,typeName:$.ZodCatch,catchValue:typeof t.catch==`function`?t.catch:()=>t.catch,...Q(t)});var Hb=class extends Py{_parse(e){if(this._getType(e)!==q.nan){let t=this._getOrReturnCtx(e);return Y(t,{code:J.invalid_type,expected:q.nan,received:t.parsedType}),X}return{status:`valid`,value:e.data}}};Hb.create=e=>new Hb({typeName:$.ZodNaN,...Q(e)});var Ub=class extends Py{_parse(e){let{ctx:t}=this._processInputParams(e),n=t.data;return this._def.type._parse({data:n,path:t.path,parent:t})}unwrap(){return this._def.type}},Wb=class e extends Py{_parse(e){let{status:t,ctx:n}=this._processInputParams(e);if(n.common.async)return(async()=>{let e=await this._def.in._parseAsync({data:n.data,path:n.path,parent:n});return e.status===`aborted`?X:e.status===`dirty`?(t.dirty(),Ey(e.value)):this._def.out._parseAsync({data:e.value,path:n.path,parent:n})})();{let e=this._def.in._parseSync({data:n.data,path:n.path,parent:n});return e.status===`aborted`?X:e.status===`dirty`?(t.dirty(),{status:`dirty`,value:e.value}):this._def.out._parseSync({data:e.value,path:n.path,parent:n})}}static create(t,n){return new e({in:t,out:n,typeName:$.ZodPipeline})}},Gb=class extends Py{_parse(e){let t=this._def.innerType._parse(e),n=e=>(Ay(e)&&(e.value=Object.freeze(e.value)),e);return jy(t)?t.then(e=>n(e)):n(t)}unwrap(){return this._def.innerType}};Gb.create=(e,t)=>new Gb({innerType:e,typeName:$.ZodReadonly,...Q(t)}),bb.lazycreate;var $;(function(e){e.ZodString=`ZodString`,e.ZodNumber=`ZodNumber`,e.ZodNaN=`ZodNaN`,e.ZodBigInt=`ZodBigInt`,e.ZodBoolean=`ZodBoolean`,e.ZodDate=`ZodDate`,e.ZodSymbol=`ZodSymbol`,e.ZodUndefined=`ZodUndefined`,e.ZodNull=`ZodNull`,e.ZodAny=`ZodAny`,e.ZodUnknown=`ZodUnknown`,e.ZodNever=`ZodNever`,e.ZodVoid=`ZodVoid`,e.ZodArray=`ZodArray`,e.ZodObject=`ZodObject`,e.ZodUnion=`ZodUnion`,e.ZodDiscriminatedUnion=`ZodDiscriminatedUnion`,e.ZodIntersection=`ZodIntersection`,e.ZodTuple=`ZodTuple`,e.ZodRecord=`ZodRecord`,e.ZodMap=`ZodMap`,e.ZodSet=`ZodSet`,e.ZodFunction=`ZodFunction`,e.ZodLazy=`ZodLazy`,e.ZodLiteral=`ZodLiteral`,e.ZodEnum=`ZodEnum`,e.ZodEffects=`ZodEffects`,e.ZodNativeEnum=`ZodNativeEnum`,e.ZodOptional=`ZodOptional`,e.ZodNullable=`ZodNullable`,e.ZodDefault=`ZodDefault`,e.ZodCatch=`ZodCatch`,e.ZodPromise=`ZodPromise`,e.ZodBranded=`ZodBranded`,e.ZodPipeline=`ZodPipeline`,e.ZodReadonly=`ZodReadonly`})($||={});var Kb=ab.create,qb=sb.create;Hb.create,cb.create;var Jb=lb.create;ub.create,db.create,fb.create,pb.create,mb.create,hb.create,gb.create,_b.create;var Yb=vb.create,Xb=bb.create;bb.strictCreate,xb.create,Cb.create,Tb.create,Eb.create;var Zb=Db.create;Ob.create,kb.create,Ab.create,jb.create,Mb.create;var Qb=Pb.create;Fb.create,Ib.create,Lb.create,Rb.create,zb.create,Lb.createWithPreprocess,Wb.create;var $b=`__custom__`,ex=[],tx={};function nx({schema:e,value:t,secretFields:n=ex,fieldHints:r=tx,onChange:i}){let a=e.shape,o=new Set(n);function s(e,n){let r={...t};n===void 0?delete r[e]:r[e]=n,i(r)}return(0,H.jsx)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:Object.entries(a).map(([e,n])=>(0,H.jsx)(ix,{name:e,schema:n,value:t[e],isSecret:o.has(e),hintValues:r[e],onChange:t=>s(e,t)},e))})}function rx(e){return e instanceof Rb||e instanceof zb?{inner:e._def.innerType,optional:!0}:{inner:e,optional:!1}}function ix({name:e,schema:t,value:n,isSecret:r,hintValues:i,onChange:a}){let{inner:o,optional:s}=rx(t),c=s?` (optional)`:``;if(o instanceof ab){let t=typeof n==`string`?n:``;return r?(0,H.jsx)(oy,{label:`${e}${c}`,value:t,onChange:e=>a(e||(s?void 0:``))}):i&&i.length>0?(0,H.jsx)(cx,{name:`${e}${c}`,fieldName:e,presets:i,optional:s,value:t,onChange:a}):(0,H.jsx)(sx,{label:`${e}${c}`,value:t,onChange:e=>a(e||(s?void 0:``))})}if(o instanceof sb){let t=typeof n==`number`?n:0;return(0,H.jsx)(lx,{label:`${e}${c}`,value:t,onChange:e=>a(e)})}if(o instanceof lb)return(0,H.jsxs)(`label`,{className:`flex items-center gap-2 text-sm`,children:[(0,H.jsx)(`input`,{type:`checkbox`,checked:n===!0,onChange:e=>a(e.target.checked)}),e]});if(o instanceof Pb){let t=o._def.values??o.options??[],r=typeof n==`string`?n:s?``:t[0]??``;return(0,H.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,H.jsx)(B_,{children:`${e}${c}`}),(0,H.jsxs)(`select`,{className:`h-9 rounded-md border bg-background px-3 text-sm`,value:r,onChange:e=>a(e.target.value||(s?void 0:t[0])),children:[s&&(0,H.jsx)(`option`,{value:``,children:`— unset —`}),t.map(e=>(0,H.jsx)(`option`,{value:e,children:e},e))]})]})}if(o instanceof vb){let t=Array.isArray(n)?n.filter(e=>typeof e==`string`):[];return(0,H.jsx)(sx,{label:`${e}${c} (空白或 , 分隔)`,value:t.join(` `),onChange:e=>{let t=e.split(/[\s,]+/).map(e=>e.trim()).filter(Boolean);t.length===0?a(s?void 0:[]):a(t)}})}if(o instanceof Db){let t=typeof n==`object`&&n?Object.fromEntries(Object.entries(n).filter(([,e])=>typeof e==`string`)):{},r=Object.entries(t).map(([e,t])=>`${e}=${t}`).join(`
27
27
  `);return(0,H.jsxs)(`div`,{className:`sm:col-span-2 flex flex-col gap-1.5`,children:[(0,H.jsx)(B_,{children:`${e}${c} (KEY=value 每行一条)`}),(0,H.jsx)(`textarea`,{className:`min-h-[80px] rounded-md border bg-background px-3 py-2 text-sm font-mono`,value:r,onChange:e=>{let t=[];for(let n of e.target.value.split(`
28
- `)){let e=n.indexOf(`=`);if(e<=0)continue;let r=n.slice(0,e).trim(),i=n.slice(e+1);r.length>0&&t.push([r,i])}t.length===0?a(s?void 0:{}):a(Object.fromEntries(t))}})]})}return(0,H.jsxs)(`div`,{className:`sm:col-span-2 flex flex-col gap-1.5`,children:[(0,H.jsx)(B_,{children:`${e}${c} (JSON)`}),(0,H.jsx)(ox,{value:n,onChange:a,optional:s})]})}function ax(e){if(e==null)return``;try{return JSON.stringify(e,null,2)}catch{return``}}function ox({value:e,onChange:t,optional:n}){return(0,H.jsx)(`textarea`,{className:`min-h-[80px] rounded-md border bg-background px-3 py-2 text-sm font-mono`,defaultValue:ax(e),onBlur:e=>{let r=e.target.value.trim();if(r.length===0){t(n?void 0:null);return}try{t(JSON.parse(r))}catch{}}})}function sx({label:e,value:t,onChange:n}){return(0,H.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,H.jsx)(B_,{children:e}),(0,H.jsx)(z_,{value:t,onChange:e=>n(e.target.value)})]})}function cx({name:e,fieldName:t,presets:n,optional:r,value:i,onChange:a}){let o=i.length>0&&n.includes(i),[s,c]=(0,V.useState)(()=>i.length===0||o?`preset`:`custom`);function l(e){e.length===0?a(r?void 0:``):a(e)}function u(e){if(e===$b){c(`custom`);return}c(`preset`),l(e)}if(s===`custom`)return(0,H.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,H.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,H.jsx)(B_,{children:e}),(0,H.jsx)(`button`,{type:`button`,className:`text-xs text-muted-foreground underline decoration-dotted underline-offset-2 hover:text-foreground`,onClick:()=>{c(`preset`),n.includes(i)||l(``)},children:`选预设…`})]}),(0,H.jsx)(z_,{"data-testid":`field-${t}-input`,placeholder:n[0]??``,value:i,onChange:e=>l(e.target.value)})]});let d=o?i:``;return(0,H.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,H.jsx)(B_,{htmlFor:`field-${t}-select`,children:e}),(0,H.jsxs)(`select`,{id:`field-${t}-select`,"data-testid":`field-${t}-select`,className:`h-9 rounded-md border bg-background px-3 text-sm`,value:d,onChange:e=>u(e.target.value),children:[r&&(0,H.jsx)(`option`,{value:``,children:`— unset —`}),!r&&d===``&&(0,H.jsx)(`option`,{value:``,disabled:!0,children:`— 选 model —`}),n.map(e=>(0,H.jsx)(`option`,{value:e,children:e},e)),(0,H.jsx)(`option`,{value:$b,children:`Custom…`})]})]})}function lx({label:e,value:t,onChange:n}){return(0,H.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,H.jsx)(B_,{children:e}),(0,H.jsx)(z_,{type:`number`,value:t,onChange:e=>{let t=Number.parseInt(e.target.value,10);n(Number.isNaN(t)?0:t)}})]})}var ux=Xb({baseUrl:Kb(),apiKey:Kb(),model:Kb(),timeoutMs:qb().int().positive()}),dx={secretFields:[`apiKey`]},fx=Xb({url:Kb(),token:Kb(),defaultModel:Kb().optional(),tools:Yb(Kb()).optional(),timeoutMs:qb().int().positive().optional()}),px=Xb({command:Kb(),args:Yb(Kb()),cwd:Kb().optional(),env:Zb(Kb()).optional(),timeoutMs:qb().int().positive().optional(),sandbox:Jb().optional()}),mx=Xb({model:Kb().optional(),cliVersion:Kb().optional(),extraArgs:Yb(Kb()).optional(),env:Zb(Kb()).optional(),workspaceRoot:Kb().optional(),timeoutMs:qb().int().positive().optional(),permissionPolicy:Qb([`auto`,`supervised`,`plan`]).optional()}),hx=Xb({agent:Qb([`gemini`,`qwen`]),model:Kb().optional(),cliVersion:Kb().optional(),extraArgs:Yb(Kb()).optional(),env:Zb(Kb()).optional(),timeoutMs:qb().int().positive().optional()}),gx=Xb({model:Kb().optional(),timeoutMs:qb().int().positive().optional()}),_x=Xb({model:Kb().optional(),timeoutMs:qb().int().positive().optional()}),vx=[`gpt-4o-mini`,`gpt-4o`,`gpt-5`,`gpt-5-mini`,`o3-mini`],yx=[`gemini-2.5-flash`,`gemini-2.5-pro`,`gemini-2.0-flash`],bx=[`deepseek-chat`,`deepseek-reasoner`],xx=[`Qwen/Qwen2.5-7B-Instruct`,`Qwen/Qwen2.5-72B-Instruct`,`deepseek-ai/DeepSeek-V3`],Sx=[`anthropic/claude-sonnet-4.5`,`openai/gpt-5`,`openai/gpt-4o-mini`,`google/gemini-2.5-flash`],Cx=[`sonnet`,`opus`,`haiku`],wx=[`gemini-2.5-pro`,`gemini-2.5-flash`,`gemini-2.0-flash`],Tx=[`qwen3-coder-plus`,`qwen3-max`,`qwen3-72b`],Ex=[`gpt-5.2-codex`,`gpt-5.2`,`gpt-5.1-codex-fast`,`gpt-5`],Dx=[`auto`,`claude-sonnet-4.5`,`gpt-5`,`gemini-2.5-pro`],Ox={http:{label:`HTTP (OpenAI-compatible)`,description:`Generic chat-completions endpoint that speaks the OpenAI wire format.`,variants:{default:{label:`Default`,description:`Empty preset — fill in baseUrl, apiKey, model.`,schema:ux,...dx,fieldHints:{model:vx}},"gemini-openai-compat":{label:`Gemini (OpenAI-compat)`,description:`generativelanguage.googleapis.com OpenAI compatibility endpoint.`,schema:ux,...dx,fieldHints:{model:yx}},deepseek:{label:`DeepSeek`,description:`api.deepseek.com — model defaults to deepseek-chat.`,schema:ux,...dx,fieldHints:{model:bx}},siliconflow:{label:`SiliconFlow`,description:`api.siliconflow.cn/v1 — Chinese OpenAI-compatible aggregator.`,schema:ux,...dx,fieldHints:{model:xx}},openrouter:{label:`OpenRouter`,description:`openrouter.ai/api/v1 — fanout to 100+ provider models.`,schema:ux,...dx,fieldHints:{model:Sx}}}},mcp:{label:`MCP (tool source)`,description:`Model Context Protocol streamable-http server. Exposes tools, not chat.`,variants:{default:{label:`Default`,description:`MCP server with bearer auth.`,schema:fx,secretFields:[`token`]}}},cli:{label:`Generic CLI`,description:`Spawn an arbitrary CLI per turn. Reserved for stub / debug use.`,variants:{default:{label:`Default`,description:`Manual command + args.`,schema:px}}},"claude-code":{label:`Claude Code`,description:`Anthropic Claude Code CLI in stream-json mode (FEAT-012).`,variants:{default:{label:`Default (sonnet)`,description:`Auto-approve, sonnet model, 120s turn timeout.`,schema:mx,fieldHints:{model:Cx}},"opus-plan":{label:`Opus + Plan policy`,description:`Opus model with plan-mode permission policy, 180s turn timeout.`,schema:mx,fieldHints:{model:Cx}}}},acp:{label:`ACP (Gemini / Qwen)`,description:`Agent Client Protocol harness — variant key selects the CLI agent.`,variants:{gemini:{label:`Gemini CLI`,description:`google-gemini/gemini-cli with --experimental-acp + --yolo.`,schema:hx,fieldHints:{model:wx}},qwen:{label:`Qwen Code`,description:`qwenlm/qwen-code with --acp + --yolo.`,schema:hx,fieldHints:{model:Tx}}}},codex:{label:`Codex`,description:`OpenAI @openai/codex app-server via JSON-RPC over stdio (FEAT-016).`,variants:{default:{label:`Default (gpt-5.2-codex)`,description:`Auto-approve (approval_policy=never), 120s turn timeout.`,schema:gx,fieldHints:{model:Ex}}}},cursor:{label:`Cursor Agent`,description:`Cursor CLI in stream-json mode — no npm fallback (install cursor-agent) (FEAT-016).`,variants:{default:{label:`Default (auto model)`,description:`cursor-agent -p --output-format=stream-json, 120s turn timeout.`,schema:_x,fieldHints:{model:Dx}}}}};function kx(){return Object.keys(Ox)}function Ax(e){return Object.keys(Ox[e].variants)}function jx(e){let t=Ax(e);return{engine:e,variant:t.includes(`default`)?`default`:t[0]}}var Mx={ready:`ready`,"login-required":`login required`,"not-found":`not installed`},Nx={ready:`bg-emerald-500`,"login-required":`bg-amber-500`,"not-found":`bg-muted-foreground/40`},Px={ready:`text-emerald-700 dark:text-emerald-400`,"login-required":`text-amber-700 dark:text-amber-400`,"not-found":`text-muted-foreground`};function Fx({status:e,label:t,testId:n}){return e?(0,H.jsxs)(`span`,{className:`inline-flex items-center gap-1.5 text-xs ${Px[e]}`,"data-testid":n,"data-status":e,children:[(0,H.jsx)(`span`,{className:`inline-block h-2 w-2 rounded-full ${Nx[e]}`}),t??Mx[e]]}):(0,H.jsxs)(`span`,{className:`inline-flex items-center gap-1.5 text-xs text-muted-foreground`,"data-testid":n,children:[(0,H.jsx)(`span`,{className:`inline-block h-2 w-2 rounded-full bg-muted-foreground/30`}),`unknown`]})}function Ix({executor:e,onChange:t}){let n=Ox[e.engine],r=n.variants[e.variant],[i,a]=(0,V.useState)(!1),o=f_(),s=hy(o.data?.engines),c=p_(),[l,u]=(0,V.useState)(!1);async function d(){u(!0);try{await c()}finally{u(!1)}}function f(n){if(n===e.engine)return;let r=Ax(n).includes(e.variant)?e.variant:void 0;t(r?{engine:n,variant:r}:jx(n))}function p(n){n!==e.variant&&t({engine:e.engine,variant:n})}function m(n){if(!n||Object.keys(n).length===0){let{overrides:n,...r}=e;t(r);return}t({...e,overrides:n})}function h(t){let n=e.overrides?.cmd,r={...t};n&&Object.keys(n).length>0&&(r.cmd=n),m(r)}function g(t){let{cmd:n,...r}=e.overrides??{};if(!t||Object.keys(t).length===0){m(r);return}m({...r,cmd:t})}function _(n){let r={...e};n.modelId===void 0||n.modelId===``?delete r.modelId:r.modelId=n.modelId,n.reasoningId===void 0||n.reasoningId===``?delete r.reasoningId:r.reasoningId=n.reasoningId,n.permissionPolicy===void 0?delete r.permissionPolicy:r.permissionPolicy=n.permissionPolicy,t(r)}let{cmd:v,...y}=e.overrides??{},b=gy(s,e.engine),x=e.engine===`acp`?s.get(`acp:${e.variant}`):s.get(e.engine);return(0,H.jsxs)(`section`,{className:`flex flex-col gap-4 rounded-lg border bg-card p-6`,children:[(0,H.jsxs)(`header`,{className:`flex flex-wrap items-start justify-between gap-3`,children:[(0,H.jsxs)(`div`,{children:[(0,H.jsx)(`h2`,{className:`text-lg font-semibold`,children:`Executor`}),(0,H.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`选 engine + variant,仅 override 想改的字段。`})]}),(0,H.jsxs)(`button`,{type:`button`,onClick:d,disabled:l||o.isFetching,"aria-label":`Refresh engine availability`,"data-testid":`refresh-engines-btn`,className:`inline-flex items-center gap-1 rounded-md border px-2 py-1 text-xs text-muted-foreground hover:bg-muted disabled:opacity-60`,children:[(0,H.jsx)(zo,{className:`size-3.5 ${l?`animate-spin`:``}`}),`Refresh`]})]}),s.size>0&&(0,H.jsx)(`div`,{className:`flex flex-wrap gap-2 rounded-md border bg-muted/30 p-2 text-xs`,children:kx().map(e=>{let t=gy(s,e);return(0,H.jsxs)(`span`,{className:`inline-flex items-center gap-2 rounded border bg-background px-2 py-0.5`,"data-testid":`engine-availability-${e}`,children:[(0,H.jsx)(`span`,{className:`font-medium`,children:Ox[e].label}),(0,H.jsx)(Fx,{status:t,testId:`engine-availability-badge-${e}`})]},e)})}),(0,H.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:[(0,H.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,H.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,H.jsx)(B_,{htmlFor:`executor-engine`,children:`Engine`}),(0,H.jsx)(Fx,{status:b,testId:`engine-selected-badge`})]}),(0,H.jsx)(`select`,{id:`executor-engine`,className:`h-9 rounded-md border bg-background px-3 text-sm`,value:e.engine,onChange:e=>f(e.target.value),children:kx().map(e=>{let t=gy(s,e),n=t?` — ${Mx[t]}`:``;return(0,H.jsxs)(`option`,{value:e,children:[Ox[e].label,n]},e)})}),(0,H.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:n.description})]}),(0,H.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,H.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,H.jsx)(B_,{htmlFor:`executor-variant`,children:`Variant`}),e.engine===`acp`&&(0,H.jsx)(Fx,{status:x?.status,testId:`variant-selected-badge`})]}),(0,H.jsx)(`select`,{id:`executor-variant`,className:`h-9 rounded-md border bg-background px-3 text-sm`,value:e.variant,onChange:e=>p(e.target.value),children:Ax(e.engine).map(t=>{let r=e.engine===`acp`?s.get(`acp:${t}`)?.status:void 0,i=r?` — ${Mx[r]}`:``;return(0,H.jsxs)(`option`,{value:t,children:[n.variants[t].label,i]},t)})}),r?.description&&(0,H.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:r.description})]})]}),b===`not-found`&&(0,H.jsx)(Lx,{engine:e.engine}),b===`login-required`&&(0,H.jsx)(Rx,{engine:e.engine}),r&&(0,H.jsx)(nx,{schema:r.schema,value:y,secretFields:r.secretFields,fieldHints:r.fieldHints,onChange:h}),(0,H.jsxs)(`div`,{className:`border-t pt-4`,children:[(0,H.jsxs)(`button`,{type:`button`,className:`text-sm font-medium text-muted-foreground hover:text-foreground`,onClick:()=>a(e=>!e),"aria-expanded":i,children:[i?`▾`:`▸`,` `,`Advanced (per-request + cmd overrides)`]}),i&&(0,H.jsxs)(`div`,{className:`mt-3 flex flex-col gap-4`,children:[(0,H.jsx)(Bx,{modelId:e.modelId,reasoningId:e.reasoningId,permissionPolicy:e.permissionPolicy,onChange:_}),(0,H.jsx)(Vx,{cmd:v,onChange:g})]})]})]})}function Lx({engine:e}){let t=zx(e);return(0,H.jsxs)(`div`,{role:`alert`,"data-testid":`engine-install-callout`,className:`rounded-md border border-amber-500/40 bg-amber-500/10 p-3 text-sm`,children:[(0,H.jsx)(`p`,{className:`font-medium`,children:`本 worker 没有该 engine 对应的 CLI。`}),(0,H.jsxs)(`p`,{className:`mt-1 text-muted-foreground`,children:[`进 worker 容器装 / 登录后点 Refresh。具体步骤见`,` `,(0,H.jsxs)(`a`,{className:`underline decoration-dotted underline-offset-2 hover:text-foreground`,href:`/docs/executor-engines.md${t}`,target:`_blank`,rel:`noreferrer`,children:[`docs/executor-engines.md`,t]}),`。`]})]})}function Rx({engine:e}){let t=zx(e);return(0,H.jsxs)(`div`,{role:`status`,"data-testid":`engine-login-callout`,className:`rounded-md border border-amber-500/30 bg-amber-500/5 p-3 text-sm`,children:[(0,H.jsx)(`p`,{className:`font-medium`,children:`CLI 已装但缺登录态。`}),(0,H.jsxs)(`p`,{className:`mt-1 text-muted-foreground`,children:[`在 worker 容器跑对应 CLI 的 login 命令(见`,` `,(0,H.jsxs)(`a`,{className:`underline decoration-dotted underline-offset-2 hover:text-foreground`,href:`/docs/executor-engines.md${t}`,target:`_blank`,rel:`noreferrer`,children:[`docs/executor-engines.md`,t]}),`)后 Refresh。`]})]})}function zx(e){switch(e){case`claude-code`:return`#claude-code`;case`acp`:return`#acp`;case`codex`:return`#codex`;case`cursor`:return`#cursor`;default:return``}}function Bx({modelId:e,reasoningId:t,permissionPolicy:n,onChange:r}){return(0,H.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-3`,children:[(0,H.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,H.jsx)(B_,{children:`modelId (per-request override)`}),(0,H.jsx)(z_,{value:e??``,onChange:e=>r({modelId:e.target.value,reasoningId:t,permissionPolicy:n})})]}),(0,H.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,H.jsx)(B_,{children:`reasoningId`}),(0,H.jsx)(z_,{value:t??``,onChange:t=>r({modelId:e,reasoningId:t.target.value,permissionPolicy:n})})]}),(0,H.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,H.jsx)(B_,{children:`permissionPolicy`}),(0,H.jsxs)(`select`,{className:`h-9 rounded-md border bg-background px-3 text-sm`,value:n??``,onChange:n=>{let i=n.target.value;r({modelId:e,reasoningId:t,...i?{permissionPolicy:i}:{}})},children:[(0,H.jsx)(`option`,{value:``,children:`— unset —`}),(0,H.jsx)(`option`,{value:`auto`,children:`auto`}),(0,H.jsx)(`option`,{value:`supervised`,children:`supervised`}),(0,H.jsx)(`option`,{value:`plan`,children:`plan`})]})]})]})}function Vx({cmd:e,onChange:t}){function n(e){let n={};e.binary&&e.binary.length>0&&(n.binary=e.binary),e.extraArgs&&e.extraArgs.length>0&&(n.extraArgs=e.extraArgs),e.env&&Object.keys(e.env).length>0&&(n.env=e.env),e.cliVersion&&e.cliVersion.length>0&&(n.cliVersion=e.cliVersion),t(Object.keys(n).length>0?n:void 0)}let r=(e?.extraArgs??[]).join(` `),i=Object.entries(e?.env??{}).map(([e,t])=>`${e}=${t}`).join(`
28
+ `)){let e=n.indexOf(`=`);if(e<=0)continue;let r=n.slice(0,e).trim(),i=n.slice(e+1);r.length>0&&t.push([r,i])}t.length===0?a(s?void 0:{}):a(Object.fromEntries(t))}})]})}return(0,H.jsxs)(`div`,{className:`sm:col-span-2 flex flex-col gap-1.5`,children:[(0,H.jsx)(B_,{children:`${e}${c} (JSON)`}),(0,H.jsx)(ox,{value:n,onChange:a,optional:s})]})}function ax(e){if(e==null)return``;try{return JSON.stringify(e,null,2)}catch{return``}}function ox({value:e,onChange:t,optional:n}){return(0,H.jsx)(`textarea`,{className:`min-h-[80px] rounded-md border bg-background px-3 py-2 text-sm font-mono`,defaultValue:ax(e),onBlur:e=>{let r=e.target.value.trim();if(r.length===0){t(n?void 0:null);return}try{t(JSON.parse(r))}catch{}}})}function sx({label:e,value:t,onChange:n}){return(0,H.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,H.jsx)(B_,{children:e}),(0,H.jsx)(z_,{value:t,onChange:e=>n(e.target.value)})]})}function cx({name:e,fieldName:t,presets:n,optional:r,value:i,onChange:a}){let o=i.length>0&&n.includes(i),[s,c]=(0,V.useState)(()=>i.length===0||o?`preset`:`custom`);function l(e){e.length===0?a(r?void 0:``):a(e)}function u(e){if(e===$b){c(`custom`);return}c(`preset`),l(e)}if(s===`custom`)return(0,H.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,H.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,H.jsx)(B_,{children:e}),(0,H.jsx)(`button`,{type:`button`,className:`text-xs text-muted-foreground underline decoration-dotted underline-offset-2 hover:text-foreground`,onClick:()=>{c(`preset`),n.includes(i)||l(``)},children:`选预设…`})]}),(0,H.jsx)(z_,{"data-testid":`field-${t}-input`,placeholder:n[0]??``,value:i,onChange:e=>l(e.target.value)})]});let d=o?i:``;return(0,H.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,H.jsx)(B_,{htmlFor:`field-${t}-select`,children:e}),(0,H.jsxs)(`select`,{id:`field-${t}-select`,"data-testid":`field-${t}-select`,className:`h-9 rounded-md border bg-background px-3 text-sm`,value:d,onChange:e=>u(e.target.value),children:[r&&(0,H.jsx)(`option`,{value:``,children:`— unset —`}),!r&&d===``&&(0,H.jsx)(`option`,{value:``,disabled:!0,children:`— 选 model —`}),n.map(e=>(0,H.jsx)(`option`,{value:e,children:e},e)),(0,H.jsx)(`option`,{value:$b,children:`Custom…`})]})]})}function lx({label:e,value:t,onChange:n}){return(0,H.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,H.jsx)(B_,{children:e}),(0,H.jsx)(z_,{type:`number`,value:t,onChange:e=>{let t=Number.parseInt(e.target.value,10);n(Number.isNaN(t)?0:t)}})]})}var ux=Xb({baseUrl:Kb(),apiKey:Kb(),model:Kb(),timeoutMs:qb().int().positive()}),dx={secretFields:[`apiKey`]},fx=Xb({url:Kb(),token:Kb(),defaultModel:Kb().optional(),tools:Yb(Kb()).optional(),timeoutMs:qb().int().positive().optional()}),px=Xb({command:Kb(),args:Yb(Kb()),cwd:Kb().optional(),env:Zb(Kb()).optional(),timeoutMs:qb().int().positive().optional(),sandbox:Jb().optional()}),mx=Xb({model:Kb().optional(),cliVersion:Kb().optional(),extraArgs:Yb(Kb()).optional(),env:Zb(Kb()).optional(),workspaceRoot:Kb().optional(),timeoutMs:qb().int().positive().optional(),permissionPolicy:Qb([`auto`,`supervised`,`plan`]).optional()}),hx=Xb({agent:Qb([`gemini`,`qwen`]),model:Kb().optional(),cliVersion:Kb().optional(),extraArgs:Yb(Kb()).optional(),env:Zb(Kb()).optional(),timeoutMs:qb().int().positive().optional()}),gx=Xb({model:Kb().optional(),timeoutMs:qb().int().positive().optional()}),_x=Xb({model:Kb().optional(),timeoutMs:qb().int().positive().optional()}),vx=[`gpt-4o-mini`,`gpt-4o`,`gpt-5`,`gpt-5-mini`,`o3-mini`],yx=[`gemini-2.5-flash`,`gemini-2.5-pro`,`gemini-2.0-flash`],bx=[`deepseek-chat`,`deepseek-reasoner`],xx=[`Qwen/Qwen2.5-7B-Instruct`,`Qwen/Qwen2.5-72B-Instruct`,`deepseek-ai/DeepSeek-V3`],Sx=[`anthropic/claude-sonnet-4.5`,`openai/gpt-5`,`openai/gpt-4o-mini`,`google/gemini-2.5-flash`],Cx=[`sonnet`,`opus`,`haiku`],wx=[`gemini-2.5-pro`,`gemini-2.5-flash`,`gemini-2.0-flash`],Tx=[`qwen3-coder-plus`,`qwen3-max`,`qwen3-72b`],Ex=[`gpt-5.5`,`gpt-5.4`,`gpt-5.4-mini`,`gpt-5.3-codex`,`gpt-5.2`],Dx=[`auto`,`claude-sonnet-4.5`,`gpt-5`,`gemini-2.5-pro`],Ox={http:{label:`HTTP (OpenAI-compatible)`,description:`Generic chat-completions endpoint that speaks the OpenAI wire format.`,variants:{default:{label:`Default`,description:`Empty preset — fill in baseUrl, apiKey, model.`,schema:ux,...dx,fieldHints:{model:vx}},"gemini-openai-compat":{label:`Gemini (OpenAI-compat)`,description:`generativelanguage.googleapis.com OpenAI compatibility endpoint.`,schema:ux,...dx,fieldHints:{model:yx}},deepseek:{label:`DeepSeek`,description:`api.deepseek.com — model defaults to deepseek-chat.`,schema:ux,...dx,fieldHints:{model:bx}},siliconflow:{label:`SiliconFlow`,description:`api.siliconflow.cn/v1 — Chinese OpenAI-compatible aggregator.`,schema:ux,...dx,fieldHints:{model:xx}},openrouter:{label:`OpenRouter`,description:`openrouter.ai/api/v1 — fanout to 100+ provider models.`,schema:ux,...dx,fieldHints:{model:Sx}}}},mcp:{label:`MCP (tool source)`,description:`Model Context Protocol streamable-http server. Exposes tools, not chat.`,variants:{default:{label:`Default`,description:`MCP server with bearer auth.`,schema:fx,secretFields:[`token`]}}},cli:{label:`Generic CLI`,description:`Spawn an arbitrary CLI per turn. Reserved for stub / debug use.`,variants:{default:{label:`Default`,description:`Manual command + args.`,schema:px}}},"claude-code":{label:`Claude Code`,description:`Anthropic Claude Code CLI in stream-json mode (FEAT-012).`,variants:{default:{label:`Default (sonnet)`,description:`Auto-approve, sonnet model, 120s turn timeout.`,schema:mx,fieldHints:{model:Cx}},"opus-plan":{label:`Opus + Plan policy`,description:`Opus model with plan-mode permission policy, 180s turn timeout.`,schema:mx,fieldHints:{model:Cx}}}},acp:{label:`ACP (Gemini / Qwen)`,description:`Agent Client Protocol harness — variant key selects the CLI agent.`,variants:{gemini:{label:`Gemini CLI`,description:`google-gemini/gemini-cli with --experimental-acp + --yolo.`,schema:hx,fieldHints:{model:wx}},qwen:{label:`Qwen Code`,description:`qwenlm/qwen-code with --acp + --yolo.`,schema:hx,fieldHints:{model:Tx}}}},codex:{label:`Codex`,description:`OpenAI @openai/codex app-server via JSON-RPC over stdio (FEAT-016).`,variants:{default:{label:`Default (gpt-5.5)`,description:`Codex app-server, 120s turn timeout.`,schema:gx,fieldHints:{model:Ex}}}},cursor:{label:`Cursor Agent`,description:`Cursor CLI in stream-json mode — no npm fallback (install cursor-agent) (FEAT-016).`,variants:{default:{label:`Default (auto model)`,description:`cursor-agent -p --output-format=stream-json, 120s turn timeout.`,schema:_x,fieldHints:{model:Dx}}}}};function kx(){return Object.keys(Ox)}function Ax(e){return Object.keys(Ox[e].variants)}function jx(e){let t=Ax(e);return{engine:e,variant:t.includes(`default`)?`default`:t[0]}}var Mx={ready:`ready`,"login-required":`login required`,"not-found":`not installed`},Nx={ready:`bg-emerald-500`,"login-required":`bg-amber-500`,"not-found":`bg-muted-foreground/40`},Px={ready:`text-emerald-700 dark:text-emerald-400`,"login-required":`text-amber-700 dark:text-amber-400`,"not-found":`text-muted-foreground`};function Fx({status:e,label:t,testId:n}){return e?(0,H.jsxs)(`span`,{className:`inline-flex items-center gap-1.5 text-xs ${Px[e]}`,"data-testid":n,"data-status":e,children:[(0,H.jsx)(`span`,{className:`inline-block h-2 w-2 rounded-full ${Nx[e]}`}),t??Mx[e]]}):(0,H.jsxs)(`span`,{className:`inline-flex items-center gap-1.5 text-xs text-muted-foreground`,"data-testid":n,children:[(0,H.jsx)(`span`,{className:`inline-block h-2 w-2 rounded-full bg-muted-foreground/30`}),`unknown`]})}function Ix({executor:e,onChange:t}){let n=Ox[e.engine],r=n.variants[e.variant],[i,a]=(0,V.useState)(!1),o=f_(),s=hy(o.data?.engines),c=p_(),[l,u]=(0,V.useState)(!1);async function d(){u(!0);try{await c()}finally{u(!1)}}function f(n){if(n===e.engine)return;let r=Ax(n).includes(e.variant)?e.variant:void 0;t(r?{engine:n,variant:r}:jx(n))}function p(n){n!==e.variant&&t({engine:e.engine,variant:n})}function m(n){if(!n||Object.keys(n).length===0){let{overrides:n,...r}=e;t(r);return}t({...e,overrides:n})}function h(t){let n=e.overrides?.cmd,r={...t};n&&Object.keys(n).length>0&&(r.cmd=n),m(r)}function g(t){let{cmd:n,...r}=e.overrides??{};if(!t||Object.keys(t).length===0){m(r);return}m({...r,cmd:t})}function _(n){let r={...e};n.modelId===void 0||n.modelId===``?delete r.modelId:r.modelId=n.modelId,n.reasoningId===void 0||n.reasoningId===``?delete r.reasoningId:r.reasoningId=n.reasoningId,n.permissionPolicy===void 0?delete r.permissionPolicy:r.permissionPolicy=n.permissionPolicy,t(r)}let{cmd:v,...y}=e.overrides??{},b=gy(s,e.engine),x=e.engine===`acp`?s.get(`acp:${e.variant}`):s.get(e.engine);return(0,H.jsxs)(`section`,{className:`flex flex-col gap-4 rounded-lg border bg-card p-6`,children:[(0,H.jsxs)(`header`,{className:`flex flex-wrap items-start justify-between gap-3`,children:[(0,H.jsxs)(`div`,{children:[(0,H.jsx)(`h2`,{className:`text-lg font-semibold`,children:`Executor`}),(0,H.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`选 engine + variant,仅 override 想改的字段。`})]}),(0,H.jsxs)(`button`,{type:`button`,onClick:d,disabled:l||o.isFetching,"aria-label":`Refresh engine availability`,"data-testid":`refresh-engines-btn`,className:`inline-flex items-center gap-1 rounded-md border px-2 py-1 text-xs text-muted-foreground hover:bg-muted disabled:opacity-60`,children:[(0,H.jsx)(zo,{className:`size-3.5 ${l?`animate-spin`:``}`}),`Refresh`]})]}),s.size>0&&(0,H.jsx)(`div`,{className:`flex flex-wrap gap-2 rounded-md border bg-muted/30 p-2 text-xs`,children:kx().map(e=>{let t=gy(s,e);return(0,H.jsxs)(`span`,{className:`inline-flex items-center gap-2 rounded border bg-background px-2 py-0.5`,"data-testid":`engine-availability-${e}`,children:[(0,H.jsx)(`span`,{className:`font-medium`,children:Ox[e].label}),(0,H.jsx)(Fx,{status:t,testId:`engine-availability-badge-${e}`})]},e)})}),(0,H.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:[(0,H.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,H.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,H.jsx)(B_,{htmlFor:`executor-engine`,children:`Engine`}),(0,H.jsx)(Fx,{status:b,testId:`engine-selected-badge`})]}),(0,H.jsx)(`select`,{id:`executor-engine`,className:`h-9 rounded-md border bg-background px-3 text-sm`,value:e.engine,onChange:e=>f(e.target.value),children:kx().map(e=>{let t=gy(s,e),n=t?` — ${Mx[t]}`:``;return(0,H.jsxs)(`option`,{value:e,children:[Ox[e].label,n]},e)})}),(0,H.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:n.description})]}),(0,H.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,H.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,H.jsx)(B_,{htmlFor:`executor-variant`,children:`Variant`}),e.engine===`acp`&&(0,H.jsx)(Fx,{status:x?.status,testId:`variant-selected-badge`})]}),(0,H.jsx)(`select`,{id:`executor-variant`,className:`h-9 rounded-md border bg-background px-3 text-sm`,value:e.variant,onChange:e=>p(e.target.value),children:Ax(e.engine).map(t=>{let r=e.engine===`acp`?s.get(`acp:${t}`)?.status:void 0,i=r?` — ${Mx[r]}`:``;return(0,H.jsxs)(`option`,{value:t,children:[n.variants[t].label,i]},t)})}),r?.description&&(0,H.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:r.description})]})]}),b===`not-found`&&(0,H.jsx)(Lx,{engine:e.engine}),b===`login-required`&&(0,H.jsx)(Rx,{engine:e.engine}),r&&(0,H.jsx)(nx,{schema:r.schema,value:y,secretFields:r.secretFields,fieldHints:r.fieldHints,onChange:h}),(0,H.jsxs)(`div`,{className:`border-t pt-4`,children:[(0,H.jsxs)(`button`,{type:`button`,className:`text-sm font-medium text-muted-foreground hover:text-foreground`,onClick:()=>a(e=>!e),"aria-expanded":i,children:[i?`▾`:`▸`,` `,`Advanced (per-request + cmd overrides)`]}),i&&(0,H.jsxs)(`div`,{className:`mt-3 flex flex-col gap-4`,children:[(0,H.jsx)(Bx,{modelId:e.modelId,reasoningId:e.reasoningId,permissionPolicy:e.permissionPolicy,onChange:_}),(0,H.jsx)(Vx,{cmd:v,onChange:g})]})]})]})}function Lx({engine:e}){let t=zx(e);return(0,H.jsxs)(`div`,{role:`alert`,"data-testid":`engine-install-callout`,className:`rounded-md border border-amber-500/40 bg-amber-500/10 p-3 text-sm`,children:[(0,H.jsx)(`p`,{className:`font-medium`,children:`本 worker 没有该 engine 对应的 CLI。`}),(0,H.jsxs)(`p`,{className:`mt-1 text-muted-foreground`,children:[`进 worker 容器装 / 登录后点 Refresh。具体步骤见`,` `,(0,H.jsxs)(`a`,{className:`underline decoration-dotted underline-offset-2 hover:text-foreground`,href:`/docs/executor-engines.md${t}`,target:`_blank`,rel:`noreferrer`,children:[`docs/executor-engines.md`,t]}),`。`]})]})}function Rx({engine:e}){let t=zx(e);return(0,H.jsxs)(`div`,{role:`status`,"data-testid":`engine-login-callout`,className:`rounded-md border border-amber-500/30 bg-amber-500/5 p-3 text-sm`,children:[(0,H.jsx)(`p`,{className:`font-medium`,children:`CLI 已装但缺登录态。`}),(0,H.jsxs)(`p`,{className:`mt-1 text-muted-foreground`,children:[`在 worker 容器跑对应 CLI 的 login 命令(见`,` `,(0,H.jsxs)(`a`,{className:`underline decoration-dotted underline-offset-2 hover:text-foreground`,href:`/docs/executor-engines.md${t}`,target:`_blank`,rel:`noreferrer`,children:[`docs/executor-engines.md`,t]}),`)后 Refresh。`]})]})}function zx(e){switch(e){case`claude-code`:return`#claude-code`;case`acp`:return`#acp`;case`codex`:return`#codex`;case`cursor`:return`#cursor`;default:return``}}function Bx({modelId:e,reasoningId:t,permissionPolicy:n,onChange:r}){return(0,H.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-3`,children:[(0,H.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,H.jsx)(B_,{children:`modelId (per-request override)`}),(0,H.jsx)(z_,{value:e??``,onChange:e=>r({modelId:e.target.value,reasoningId:t,permissionPolicy:n})})]}),(0,H.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,H.jsx)(B_,{children:`reasoningId`}),(0,H.jsx)(z_,{value:t??``,onChange:t=>r({modelId:e,reasoningId:t.target.value,permissionPolicy:n})})]}),(0,H.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,H.jsx)(B_,{children:`permissionPolicy`}),(0,H.jsxs)(`select`,{className:`h-9 rounded-md border bg-background px-3 text-sm`,value:n??``,onChange:n=>{let i=n.target.value;r({modelId:e,reasoningId:t,...i?{permissionPolicy:i}:{}})},children:[(0,H.jsx)(`option`,{value:``,children:`— unset —`}),(0,H.jsx)(`option`,{value:`auto`,children:`auto`}),(0,H.jsx)(`option`,{value:`supervised`,children:`supervised`}),(0,H.jsx)(`option`,{value:`plan`,children:`plan`})]})]})]})}function Vx({cmd:e,onChange:t}){function n(e){let n={};e.binary&&e.binary.length>0&&(n.binary=e.binary),e.extraArgs&&e.extraArgs.length>0&&(n.extraArgs=e.extraArgs),e.env&&Object.keys(e.env).length>0&&(n.env=e.env),e.cliVersion&&e.cliVersion.length>0&&(n.cliVersion=e.cliVersion),t(Object.keys(n).length>0?n:void 0)}let r=(e?.extraArgs??[]).join(` `),i=Object.entries(e?.env??{}).map(([e,t])=>`${e}=${t}`).join(`
29
29
  `);return(0,H.jsxs)(`div`,{className:`flex flex-col gap-3 rounded-md border bg-muted/30 p-3`,children:[(0,H.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`cmd overrides 仅对 spawn 二进制的 engine(cli / claude-code / acp)生效。`}),(0,H.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:[(0,H.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,H.jsx)(B_,{children:`cmd.binary`}),(0,H.jsx)(z_,{value:e?.binary??``,onChange:t=>n({...e,binary:t.target.value})})]}),(0,H.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,H.jsx)(B_,{children:`cmd.cliVersion`}),(0,H.jsx)(z_,{value:e?.cliVersion??``,onChange:t=>n({...e,cliVersion:t.target.value})})]}),(0,H.jsxs)(`div`,{className:`flex flex-col gap-1.5 sm:col-span-2`,children:[(0,H.jsx)(B_,{children:`cmd.extraArgs (空白分隔)`}),(0,H.jsx)(z_,{value:r,onChange:t=>{let r=t.target.value.split(/\s+/).filter(Boolean);n({...e,extraArgs:r})}})]}),(0,H.jsxs)(`div`,{className:`flex flex-col gap-1.5 sm:col-span-2`,children:[(0,H.jsx)(B_,{children:`cmd.env (KEY=value 每行)`}),(0,H.jsx)(`textarea`,{className:`min-h-[80px] rounded-md border bg-background px-3 py-2 text-sm font-mono`,value:i,onChange:t=>{let r=[];for(let e of t.target.value.split(`
30
30
  `)){let t=e.indexOf(`=`);if(t<=0)continue;let n=e.slice(0,t).trim(),i=e.slice(t+1);n.length>0&&r.push([n,i])}n({...e,env:Object.fromEntries(r)})}})]})]})]})}function Hx(){let e=u_(),t=l_(),[n,r]=(0,V.useState)(0);return e.isLoading?(0,H.jsxs)(`div`,{className:`space-y-3`,children:[(0,H.jsx)(qv,{className:`h-8 w-48`}),(0,H.jsx)(qv,{className:`h-40`}),(0,H.jsx)(qv,{className:`h-40`})]}):e.isError||!e.data?(0,H.jsxs)(`div`,{className:`rounded-md border border-destructive/40 bg-destructive/5 p-4 text-sm text-destructive`,children:[`加载 worker config 失败:`,` `,e.error instanceof Error?e.error.message:`未知错误`,` `,(0,H.jsx)(Oc,{type:`button`,variant:`outline`,size:`sm`,onClick:()=>void e.refetch(),children:`重试`})]}):(0,H.jsx)(Ux,{initial:e.data.config,initialVersion:e.data.version,info:t.data,onReload:()=>{r(e=>e+1),e.refetch()}},n)}function Ux({initial:e,initialVersion:t,info:n,onReload:r}){let[i,a]=(0,V.useState)(e),[o,s]=(0,V.useState)(t),[c,l]=(0,V.useState)(null),[u,d]=(0,V.useState)(null),[f,p]=(0,V.useState)(null),m=d_();function h(e){a(t=>({...t,...e}))}function g(e){a(t=>({...t,executor:e}))}function _(e){a(t=>({...t,channels:e}))}function v(e){a(t=>({...t,evolution:e}))}function y(){if(i.brains.length>0&&i.brainWriteTarget.length===0)return`配置了 brain source 后必须选 write target,或者删光所有 brain。`;if(i.brains.length>0&&!i.brains.some(e=>e.id===i.brainWriteTarget))return`brainWriteTarget "${i.brainWriteTarget}" 不在已配置的 brain id 列表里。`;let e=new Set;for(let t of i.brains){if(t.id.length===0)return`每个 brain source 必须有 id。`;if(e.has(t.id))return`重复的 brain id:${t.id}`;e.add(t.id)}return null}async function b(){l(null),d(null);let e=y();if(e){l(e);return}try{let e=await m.mutateAsync({config:i,ifMatchVersion:o});p(e.runtimeReload===`ok`?`已保存(version ${e.version})。`:`已保存(version ${e.version}),但 runtime reload 失败——重启 worker 才能让新 config 真正生效。`),a(e.config),s(e.version)}catch(e){if(e instanceof Eg&&e.code===`version-conflict`){d({expected:e.expectedVersion,actual:e.actualVersion});return}if(e instanceof Eg&&e.code===`invalid-config`){l(`worker 拒绝了 config:${e.message}`);return}l(e instanceof Error?e.message:`保存失败。`)}}return(0,H.jsxs)(`form`,{className:`flex flex-col gap-6 pb-24`,onSubmit:e=>{e.preventDefault(),b()},children:[(0,H.jsxs)(`div`,{children:[(0,H.jsx)(`h1`,{className:`text-2xl font-semibold tracking-tight`,children:`Configuration`}),(0,H.jsxs)(`p`,{className:`text-sm text-muted-foreground`,children:[`Version`,` `,(0,H.jsx)(`span`,{className:`font-mono`,children:o}),`。Secret 字段渲染为占位,留空保留旧值。`]})]}),u&&(0,H.jsxs)(`div`,{role:`alert`,className:`flex items-start gap-3 rounded-md border border-amber-500/40 bg-amber-500/10 p-4 text-sm`,children:[(0,H.jsx)(Jo,{className:`mt-0.5 size-4 text-amber-600 dark:text-amber-400`}),(0,H.jsxs)(`div`,{className:`flex-1`,children:[(0,H.jsx)(`p`,{className:`font-medium`,children:`Version 冲突`}),(0,H.jsxs)(`p`,{className:`text-muted-foreground`,children:[`你基于 version`,` `,(0,H.jsx)(`code`,{className:`font-mono`,children:u.expected??o}),` `,`做了改动,但当前 stored version 是`,` `,(0,H.jsx)(`code`,{className:`font-mono`,children:u.actual??`?`}),`。期间另一方已经保存了新版本。`]})]}),(0,H.jsx)(Oc,{type:`button`,variant:`outline`,size:`sm`,onClick:r,children:`Reload 重新编辑`})]}),c&&(0,H.jsx)(`p`,{role:`alert`,className:`rounded-md border border-destructive/40 bg-destructive/10 p-3 text-sm text-destructive`,children:c}),f&&(0,H.jsx)(`p`,{role:`status`,className:`rounded-md border border-emerald-500/40 bg-emerald-500/10 p-3 text-sm`,children:f}),(0,H.jsx)(ry,{brains:i.brains,brainWriteTarget:i.brainWriteTarget,brainRetrieval:i.brainRetrieval,onChange:h}),(0,H.jsx)(Ix,{executor:i.executor,onChange:g}),(0,H.jsx)(fy,{channels:i.channels,info:n,onChange:_}),(0,H.jsxs)(`section`,{className:`flex flex-col gap-3 rounded-lg border bg-card p-6`,children:[(0,H.jsx)(`h2`,{className:`text-lg font-semibold`,children:`Evolution (L3)`}),(0,H.jsxs)(`label`,{className:`flex items-center gap-2 text-sm`,children:[(0,H.jsx)(`input`,{type:`checkbox`,checked:i.evolution.enabled,onChange:e=>v({...i.evolution,enabled:e.target.checked})}),`启用 evolution observer`]}),(0,H.jsxs)(`div`,{className:`flex flex-col gap-1.5 max-w-[240px]`,children:[(0,H.jsx)(`label`,{className:`text-sm font-medium`,children:`Observation 保留天数`}),(0,H.jsx)(`input`,{type:`number`,min:0,className:`h-9 rounded-md border bg-background px-3 text-sm`,value:i.evolution.observationRetentionDays,onChange:e=>v({...i.evolution,observationRetentionDays:Number.parseInt(e.target.value,10)||0})})]})]}),(0,H.jsx)(`div`,{className:`sticky bottom-0 -mx-6 border-t bg-background/95 px-6 py-3 backdrop-blur`,children:(0,H.jsxs)(`div`,{className:`flex items-center justify-between gap-4`,children:[(0,H.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`保存使用`,` `,(0,H.jsx)(`code`,{className:`font-mono`,children:`If-Match: ${o}`}),`——若 stored version 已前移则返 409。`]}),(0,H.jsxs)(Oc,{type:`submit`,disabled:m.isPending,children:[m.isPending?(0,H.jsx)(jo,{className:`size-4 animate-spin`}):(0,H.jsx)(Bo,{className:`size-4`}),m.isPending?`保存中…`:`保存配置`]})]})})]})}var Wx=Ri(`/config`)({component:Hx});function Gx(){let e=D_(),[t,n]=(0,V.useState)(null),r=t??e.data?.conversations[0]?.id??null,i=O_(r??void 0),a=E_(),o=k_(),s=A_(),[c,l]=(0,V.useState)(``),[u,d]=(0,V.useState)(null),[f,p]=(0,V.useState)(null),m=(0,V.useId)(),h=(0,V.useRef)(null);(0,V.useEffect)(()=>()=>{h.current?.abort()},[]);async function g(){let e=c.trim();if(!(e.length===0||a.isPending)){d(null);try{let t=await a.mutateAsync(e);l(``),h.current?.abort();let r=new AbortController;h.current=r,p({taskId:t.id,conversationId:null,text:``,done:!1}),Kx(r,t.id,{onConversation:e=>{n(e),p(n=>!n||n.taskId!==t.id?n:{...n,conversationId:e})},onDelta:e=>{p(n=>!n||n.taskId!==t.id?n:{...n,text:n.text+e})},onDone:e=>{p(e=>e&&e.taskId===t.id?{...e,done:!0}:e),s(),e&&o(e)},onError:e=>{d(e),p(null)}})}catch(e){d(e instanceof Eg?e.message:`提交失败。`)}}}return(0,H.jsxs)(`div`,{className:`grid h-[calc(100vh-200px)] min-h-[420px] grid-cols-[280px_1fr] gap-4`,children:[(0,H.jsxs)(`aside`,{className:`flex min-h-0 flex-col gap-2 overflow-y-auto rounded-md border bg-card p-3`,children:[(0,H.jsx)(`h2`,{className:`px-1 text-sm font-semibold`,children:`Conversations`}),e.isLoading?(0,H.jsx)(qv,{className:`h-20`}):(e.data?.conversations??[]).length===0?(0,H.jsx)(`p`,{className:`px-1 text-xs text-muted-foreground`,children:`尚无会话。`}):(0,H.jsx)(`ul`,{className:`flex flex-col gap-1`,children:e.data?.conversations.map(e=>(0,H.jsx)(`li`,{children:(0,H.jsxs)(`button`,{type:`button`,onClick:()=>n(e.id),className:`flex w-full flex-col rounded-md px-2 py-1.5 text-left text-xs transition-colors ${r===e.id?`bg-accent text-accent-foreground`:`hover:bg-accent/50`}`,children:[(0,H.jsxs)(`span`,{className:`font-mono text-[11px]`,children:[e.channel,`:`,e.chatId]}),(0,H.jsx)(`span`,{className:`text-[10px] text-muted-foreground`,children:new Date(e.lastActiveAt).toLocaleString()})]})},e.id))})]}),(0,H.jsxs)(`section`,{className:`flex min-h-0 flex-col gap-3 rounded-md border bg-card p-4`,children:[(0,H.jsxs)(`div`,{className:`flex flex-1 flex-col gap-2 overflow-y-auto`,children:[r?i.isLoading?(0,H.jsx)(qv,{className:`h-40`}):i.isError?(0,H.jsxs)(`p`,{role:`alert`,className:`rounded-md border border-destructive/40 bg-destructive/10 p-3 text-sm text-destructive`,children:[`加载消息失败:`,i.error instanceof Error?i.error.message:`未知错误`]}):(i.data?.messages??[]).map(e=>(0,H.jsxs)(`div`,{className:`max-w-[80%] rounded-md p-3 text-sm ${e.role===`user`?`self-end bg-primary text-primary-foreground`:`self-start bg-muted`}`,children:[(0,H.jsx)(`p`,{className:`whitespace-pre-wrap break-words`,children:e.content}),(0,H.jsxs)(`p`,{className:`mt-1 text-[10px] opacity-70`,children:[e.role,` · `,new Date(e.createdAt).toLocaleString()]})]},e.id)):(0,H.jsx)(`p`,{className:`rounded-md border border-dashed p-6 text-center text-sm text-muted-foreground`,children:`发一条消息会创建新会话。`}),f&&f.text.length>0&&(0,H.jsxs)(`div`,{className:`max-w-[80%] self-start rounded-md bg-muted p-3 text-sm`,children:[(0,H.jsx)(`p`,{className:`whitespace-pre-wrap break-words`,children:f.text}),!f.done&&(0,H.jsxs)(`p`,{className:`mt-1 text-[10px] text-muted-foreground`,children:[(0,H.jsx)(jo,{className:`inline size-3 animate-spin`}),` streaming…`]})]})]}),u&&(0,H.jsx)(`p`,{role:`alert`,className:`rounded-md border border-destructive/40 bg-destructive/10 p-2 text-xs text-destructive`,children:u}),(0,H.jsxs)(`form`,{className:`flex gap-2`,onSubmit:e=>{e.preventDefault(),g()},children:[(0,H.jsx)(`label`,{htmlFor:m,className:`sr-only`,children:`Prompt`}),(0,H.jsx)(`textarea`,{id:m,className:`min-h-[60px] flex-1 resize-none rounded-md border bg-background px-3 py-2 text-sm`,placeholder:`给 worker 发一条消息(Cmd/Ctrl + Enter 发送)`,value:c,onChange:e=>l(e.target.value),onKeyDown:e=>{(e.metaKey||e.ctrlKey)&&e.key===`Enter`&&(e.preventDefault(),g())}}),(0,H.jsxs)(Oc,{type:`submit`,disabled:a.isPending||c.trim().length===0,children:[a.isPending?(0,H.jsx)(jo,{className:`size-4 animate-spin`}):(0,H.jsx)(Vo,{className:`size-4`}),`发送`]})]})]})]})}async function Kx(e,t,n){let r=null,i=`task:${t}`;function a(e){r!==e&&(r=e,n.onConversation(e))}try{await Xg(e.signal,o=>{let s=o.data,c=typeof s.taskId==`string`?s.taskId:null;if(o.type===`conversation.created`&&(!c||c===t)&&(s.chatId===i||c===t)&&typeof s.conversationId==`string`){a(s.conversationId);return}let l=typeof s.conversationId==`string`?s.conversationId:null;if(!(c&&c!==t)&&!(!r&&c!==t)&&!(r&&l&&l!==r)){if(!r&&l&&o.type.startsWith(`orchestrator.`)&&a(l),o.type===`orchestrator.text`){let e=typeof s.delta==`string`?s.delta:``;e.length>0&&n.onDelta(e)}else if(o.type===`orchestrator.finished`)n.onDone(r),e.abort();else if(o.type===`orchestrator.error`){let t=typeof s.error==`string`?s.error:`事件流返回执行错误。`;n.onError(t),e.abort()}}})}catch(t){if(e.signal.aborted)return;n.onError(t instanceof Error?t.message:`事件流中断。`)}}var qx=Ri(`/chat`)({component:Gx});function Jx(){let e=w_(),t=T_(),[n,r]=(0,V.useState)(null),i=(0,V.useMemo)(()=>e.data?.approvals??[],[e.data]);async function a(e,n){r(null);try{await t.mutateAsync({taskId:e.taskId,toolCallId:e.toolCallId,decision:n})}catch(e){r(e instanceof Eg?e.message:`提交失败。`)}}return(0,H.jsxs)(`div`,{className:`flex max-w-4xl flex-col gap-6`,children:[(0,H.jsxs)(`header`,{children:[(0,H.jsx)(`h1`,{className:`text-2xl font-semibold tracking-tight`,children:`Approvals`}),(0,H.jsx)(`p`,{className:`mt-1 text-sm text-muted-foreground`,children:"orchestrator 命中 toolPolicy `ask` 规则时挂起的工具调用。批准前 60s 内未处理视同 deny。"})]}),i.length>0&&(0,H.jsxs)(`div`,{role:`alert`,className:`flex items-start gap-3 rounded-md border border-amber-500/40 bg-amber-500/10 p-3 text-sm`,children:[(0,H.jsx)(Ho,{className:`mt-0.5 size-4 text-amber-700 dark:text-amber-400`}),(0,H.jsxs)(`div`,{className:`flex-1`,children:[(0,H.jsxs)(`p`,{className:`font-medium`,children:[i.length,` `,`个 pending approval`]}),(0,H.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`超时(默认 60s)未处理 = deny。`})]})]}),n&&(0,H.jsx)(`p`,{role:`alert`,className:`rounded-md border border-destructive/40 bg-destructive/10 p-3 text-sm text-destructive`,children:n}),e.isLoading?(0,H.jsx)(qv,{className:`h-40`}):e.isError?(0,H.jsxs)(`p`,{role:`alert`,className:`rounded-md border border-destructive/40 bg-destructive/10 p-3 text-sm text-destructive`,children:[`加载失败:`,e.error instanceof Error?e.error.message:`未知错误`]}):i.length===0?(0,H.jsx)(`p`,{className:`rounded-md border border-dashed p-6 text-center text-sm text-muted-foreground`,children:`当前没有 pending approval。`}):(0,H.jsx)(`ul`,{className:`flex flex-col gap-3`,children:i.map(e=>(0,H.jsxs)(`li`,{className:`flex flex-col gap-3 rounded-md border bg-card p-4`,children:[(0,H.jsxs)(`div`,{className:`flex flex-wrap items-start justify-between gap-3`,children:[(0,H.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,H.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,H.jsx)(`code`,{className:`font-mono text-sm`,children:e.toolName}),(0,H.jsx)(Yx,{at:e.expiresAt})]}),(0,H.jsxs)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:[`task`,(0,H.jsx)(`code`,{className:`ml-1 font-mono`,children:e.taskId}),(0,H.jsx)(`span`,{className:`mx-2`,children:`·`}),`tool call`,(0,H.jsx)(`code`,{className:`ml-1 font-mono`,children:e.toolCallId})]})]}),(0,H.jsxs)(`div`,{className:`flex shrink-0 gap-2`,children:[(0,H.jsxs)(Oc,{type:`button`,variant:`outline`,size:`sm`,onClick:()=>void a(e,`deny`),disabled:t.isPending,children:[(0,H.jsx)(Xo,{className:`size-4`}),`Deny`]}),(0,H.jsxs)(Oc,{type:`button`,size:`sm`,onClick:()=>void a(e,`allow`),disabled:t.isPending,children:[t.isPending?(0,H.jsx)(jo,{className:`size-4 animate-spin`}):(0,H.jsx)(wo,{className:`size-4`}),`Allow`]})]})]}),(0,H.jsxs)(`details`,{className:`text-xs`,children:[(0,H.jsx)(`summary`,{className:`cursor-pointer text-muted-foreground`,children:`查看 params`}),(0,H.jsx)(`pre`,{className:`mt-1 overflow-x-auto rounded bg-muted p-2 text-foreground`,children:JSON.stringify(e.params,null,2)})]})]},`${e.taskId}:${e.toolCallId}`))})]})}function Yx({at:e}){let t=e-Date.now();if(t<=0)return(0,H.jsxs)(`span`,{className:`inline-flex items-center gap-1 text-[11px] text-destructive`,children:[(0,H.jsx)(Eo,{className:`size-3`}),`expired`]});let n=Math.max(0,Math.round(t/1e3));return(0,H.jsxs)(`span`,{className:`inline-flex items-center gap-1 text-[11px] text-muted-foreground`,children:[(0,H.jsx)(Eo,{className:`size-3`}),`剩`,n,`s`]})}var Xx=Ri(`/approvals`)({component:Jx});function Zx(){let e=c_(),t=l_(),n=b_(),r=w_();return(0,H.jsxs)(`section`,{className:`flex max-w-5xl flex-col gap-6`,children:[(0,H.jsxs)(`header`,{children:[(0,H.jsx)(`h1`,{className:`text-2xl font-semibold tracking-tight`,children:`概览`}),(0,H.jsxs)(`p`,{className:`text-sm text-muted-foreground`,children:[`单 worker 自管面板。所有数据通道走本进程的`,` `,(0,H.jsx)(`code`,{className:`font-mono text-xs`,children:`/api/worker/*`}),`,绝不依赖 gateway。`]})]}),(0,H.jsxs)(`div`,{className:`grid gap-4 sm:grid-cols-2 lg:grid-cols-3`,children:[(0,H.jsx)(Qx,{title:`Worker 健康`,icon:So,loading:e.isLoading,error:e.error,children:e.data&&(0,H.jsxs)(`ul`,{className:`space-y-1 text-sm`,children:[(0,H.jsx)($x,{label:`status`,value:e.data.status}),(0,H.jsx)($x,{label:`config`,value:`v${e.data.configVersion}`}),(0,H.jsx)($x,{label:`brain`,value:e.data.brain?e.data.brain.status:`unknown`}),(0,H.jsx)($x,{label:`executor`,value:e.data.executor?e.data.executor.status:`unknown`})]})}),(0,H.jsx)(Qx,{title:`Brain`,icon:Co,loading:t.isLoading,error:t.error,actionTo:`/config`,actionLabel:`改配置`,children:t.data&&(0,H.jsx)(`ul`,{className:`space-y-1 text-sm`,children:t.data.brains.length===0?(0,H.jsx)(`li`,{className:`text-muted-foreground`,children:`未配置 brain。`}):t.data.brains.map(e=>(0,H.jsxs)(`li`,{className:`flex items-center justify-between`,children:[(0,H.jsx)(`code`,{className:`font-mono text-xs`,children:e.id}),(0,H.jsxs)(`span`,{className:`text-xs text-muted-foreground`,children:[e.type,` · `,e.status]})]},e.id))})}),(0,H.jsx)(Qx,{title:`Executor`,icon:Do,loading:t.isLoading,error:t.error,actionTo:`/test`,actionLabel:`探测`,children:t.data&&(0,H.jsxs)(`ul`,{className:`space-y-1 text-sm`,children:[(0,H.jsx)($x,{label:`type`,value:t.data.executor.type}),t.data.executor.model&&(0,H.jsx)($x,{label:`model`,value:t.data.executor.model}),(0,H.jsx)($x,{label:`status`,value:t.data.executor.status})]})}),(0,H.jsx)(Qx,{title:`Cron 调度`,icon:Ko,loading:n.isLoading,error:n.error,actionTo:`/cron`,actionLabel:`管理`,children:n.data&&(0,H.jsxs)(`p`,{className:`text-sm text-muted-foreground`,children:[`共`,` `,(0,H.jsx)(`span`,{className:`font-medium text-foreground`,children:n.data.jobs.length}),` `,`个;`,` `,(0,H.jsx)(`span`,{className:`font-medium text-foreground`,children:n.data.jobs.filter(e=>e.enabled).length}),` `,`启用中。`]})}),(0,H.jsx)(Qx,{title:`Approvals`,icon:Uo,loading:r.isLoading,error:r.error,actionTo:`/approvals`,actionLabel:r.data?.approvals.length?`处理`:`查看`,children:r.data&&(0,H.jsx)(`p`,{className:`text-sm`,children:(0,H.jsxs)(`span`,{className:r.data.approvals.length>0?`font-semibold text-amber-700 dark:text-amber-400`:`text-muted-foreground`,children:[r.data.approvals.length,` `,`pending`]})})}),(0,H.jsx)(Qx,{title:`Chat`,icon:Mo,loading:!1,actionTo:`/chat`,actionLabel:`打开`,children:(0,H.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`发条消息给 worker,检查 orchestrator 端到端通路。`})})]})]})}function Qx({title:e,icon:t,loading:n,error:r,actionTo:i,actionLabel:a,children:o}){return(0,H.jsxs)(`article`,{className:`flex flex-col gap-2 rounded-lg border bg-card p-4`,children:[(0,H.jsxs)(`header`,{className:`flex items-center justify-between gap-2`,children:[(0,H.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,H.jsx)(t,{className:`size-4 text-muted-foreground`}),(0,H.jsx)(`h3`,{className:`text-sm font-semibold`,children:e})]}),i&&(0,H.jsx)(j_,{to:i,className:`text-xs text-muted-foreground underline decoration-dotted underline-offset-2 hover:text-foreground`,children:a??`前往`})]}),n?(0,H.jsx)(qv,{className:`h-16`}):r?(0,H.jsx)(`p`,{className:`text-xs text-destructive`,children:r instanceof Error?r.message:`加载失败`}):o]})}function $x({label:e,value:t}){return(0,H.jsxs)(`li`,{className:`flex items-center justify-between`,children:[(0,H.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:e}),(0,H.jsx)(`code`,{className:`font-mono text-xs`,children:t})]})}var eS=Ri(`/`)({component:Zx}),tS=q_.update({id:`/test`,path:`/test`,getParentRoute:()=>I_}),nS=Xv.update({id:`/secrets`,path:`/secrets`,getParentRoute:()=>I_}),rS=ey.update({id:`/cron`,path:`/cron`,getParentRoute:()=>I_}),iS=Wx.update({id:`/config`,path:`/config`,getParentRoute:()=>I_}),aS=qx.update({id:`/chat`,path:`/chat`,getParentRoute:()=>I_}),oS=Xx.update({id:`/approvals`,path:`/approvals`,getParentRoute:()=>I_}),sS={IndexRoute:eS.update({id:`/`,path:`/`,getParentRoute:()=>I_}),ApprovalsRoute:oS,ChatRoute:aS,ConfigRoute:iS,CronRoute:rS,SecretsRoute:nS,TestRoute:tS},cS=I_._addFileChildren(sS)._addFileTypes();Za(`worker`),co();var lS=$i({routeTree:cS,basepath:no(`worker`),defaultPreload:`intent`,defaultPreloadStaleTime:0,scrollRestoration:!0}),uS=document.getElementById(`root`);if(!uS)throw Error(`Root element not found`);(0,oa.createRoot)(uS).render((0,H.jsx)(V.StrictMode,{children:(0,H.jsxs)(Le,{client:eo,children:[(0,H.jsx)(Qa,{scope:`worker`}),(0,H.jsx)(na,{router:lS}),(0,H.jsx)($a,{}),(0,H.jsx)($e,{initialIsOpen:!1})]})}));
@@ -5,7 +5,7 @@
5
5
  <link rel="icon" type="image/svg+xml" href="/admin/favicon.svg" />
6
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
7
  <title>AIWorker · Worker</title>
8
- <script type="module" crossorigin src="/admin/assets/index-ZLEe-oRM.js"></script>
8
+ <script type="module" crossorigin src="/admin/assets/index-UA_D2MZv.js"></script>
9
9
  <link rel="stylesheet" crossorigin href="/admin/assets/index-BPew1ixe.css">
10
10
  </head>
11
11
  <body>