@auto-ai/agent 2.1.128 → 2.1.130

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/dist/404/index.html +1 -1
  2. package/dist/404.html +1 -1
  3. package/dist/_next/static/chunks/{b76778c5811ef7a1.js → 0eeaf05fe8e92617.js} +1 -1
  4. package/dist/_next/static/chunks/14114800ef3e692e.js +1 -0
  5. package/dist/_next/static/chunks/{67ed23cd064b3759.js → 1d51ed7830318474.js} +1 -1
  6. package/dist/_next/static/chunks/{11e6ca4bf89238c8.js → 1ffb3acecdbda566.js} +1 -1
  7. package/dist/_next/static/chunks/292d0b687a419387.js +1 -0
  8. package/dist/_next/static/chunks/48bc54794d1c3561.js +1 -0
  9. package/dist/_next/static/chunks/5534f66638e5a2e8.js +1 -0
  10. package/dist/_next/static/chunks/{3407244006d6a98a.js → 61676890ad8fe194.js} +1 -1
  11. package/dist/_next/static/chunks/{f7e71ce1c236f806.js → 950875832bab2141.js} +1 -1
  12. package/dist/_next/static/chunks/a8e06ee8243e3389.js +1 -0
  13. package/dist/_next/static/chunks/d3af8988bf25a7de.js +1 -0
  14. package/dist/_next/static/chunks/d504c4e2ebc5319a.js +1 -0
  15. package/dist/index.html +2 -1
  16. package/dist/index.txt +4 -4
  17. package/dist/manage/about/index.html +2 -2
  18. package/dist/manage/about/index.txt +8 -8
  19. package/dist/manage/add-account/basic/index.html +2 -2
  20. package/dist/manage/add-account/basic/index.txt +11 -10
  21. package/dist/manage/add-account/index.html +2 -2
  22. package/dist/manage/add-account/index.txt +10 -11
  23. package/dist/manage/env/index.html +2 -2
  24. package/dist/manage/env/index.txt +10 -10
  25. package/dist/manage/general/index.html +2 -2
  26. package/dist/manage/general/index.txt +8 -8
  27. package/dist/manage/index.html +2 -1
  28. package/dist/manage/index.txt +4 -4
  29. package/dist/manage/mcp/index.html +2 -2
  30. package/dist/manage/mcp/index.txt +9 -11
  31. package/dist/manage/permissions/index.html +2 -2
  32. package/dist/manage/permissions/index.txt +8 -8
  33. package/dist/manage/skills/index.html +2 -2
  34. package/dist/manage/skills/index.txt +9 -11
  35. package/dist/manage/task/index.html +2 -2
  36. package/dist/manage/task/index.txt +7 -7
  37. package/dist/manage/teams/index.html +2 -2
  38. package/dist/manage/teams/index.txt +7 -7
  39. package/dist/manage/tools/index.html +2 -2
  40. package/dist/manage/tools/index.txt +9 -11
  41. package/dist/ws-test.html +29 -1
  42. package/package.json +6 -6
  43. package/dist/_next/static/chunks/1601f801b0efe2b7.js +0 -1
  44. package/dist/_next/static/chunks/6f004c225e10839e.js +0 -1
  45. package/dist/_next/static/chunks/848159b04d61ef38.js +0 -1
  46. package/dist/_next/static/chunks/9724f0d9ea70a30f.js +0 -1
  47. package/dist/_next/static/chunks/98f0c5604e839ba2.js +0 -1
  48. package/dist/_next/static/chunks/c2bed9d5fa7be4bd.js +0 -1
  49. package/dist/_next/static/chunks/d059ec9b9c0efd14.js +0 -1
  50. package/dist/_next/static/chunks/fb29f7b061918c67.js +0 -1
  51. package/dist/manage/agent-teams/index.html +0 -2
  52. package/dist/manage/agent-teams/index.txt +0 -37
  53. /package/dist/_next/static/{dOWHotWZcTuV50_vyRSGI → mDIzKji-qQhRRLbZUHK6V}/_buildManifest.js +0 -0
  54. /package/dist/_next/static/{dOWHotWZcTuV50_vyRSGI → mDIzKji-qQhRRLbZUHK6V}/_clientMiddlewareManifest.json +0 -0
  55. /package/dist/_next/static/{dOWHotWZcTuV50_vyRSGI → mDIzKji-qQhRRLbZUHK6V}/_ssgManifest.js +0 -0
@@ -0,0 +1 @@
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,98183,(e,t,r)=>{"use strict";function n(e){let t={};for(let[r,n]of e.entries()){let e=t[r];void 0===e?t[r]=n:Array.isArray(e)?e.push(n):t[r]=[e,n]}return t}function s(e){return"string"==typeof e?e:("number"!=typeof e||isNaN(e))&&"boolean"!=typeof e?"":String(e)}function a(e){let t=new URLSearchParams;for(let[r,n]of Object.entries(e))if(Array.isArray(n))for(let e of n)t.append(r,s(e));else t.set(r,s(n));return t}function l(e){for(var t=arguments.length,r=Array(t>1?t-1:0),n=1;n<t;n++)r[n-1]=arguments[n];for(let t of r){for(let r of t.keys())e.delete(r);for(let[r,n]of t.entries())e.append(r,n)}return e}Object.defineProperty(r,"__esModule",{value:!0}),!function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(r,{assign:function(){return l},searchParamsToUrlQuery:function(){return n},urlQueryToSearchParams:function(){return a}})},95057,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),!function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(r,{formatUrl:function(){return a},formatWithValidation:function(){return i},urlObjectKeys:function(){return l}});let n=e.r(90809)._(e.r(98183)),s=/https?|ftp|gopher|file/;function a(e){let{auth:t,hostname:r}=e,a=e.protocol||"",l=e.pathname||"",i=e.hash||"",o=e.query||"",c=!1;t=t?encodeURIComponent(t).replace(/%3A/i,":")+"@":"",e.host?c=t+e.host:r&&(c=t+(~r.indexOf(":")?"["+r+"]":r),e.port&&(c+=":"+e.port)),o&&"object"==typeof o&&(o=String(n.urlQueryToSearchParams(o)));let u=e.search||o&&"?"+o||"";return a&&!a.endsWith(":")&&(a+=":"),e.slashes||(!a||s.test(a))&&!1!==c?(c="//"+(c||""),l&&"/"!==l[0]&&(l="/"+l)):c||(c=""),i&&"#"!==i[0]&&(i="#"+i),u&&"?"!==u[0]&&(u="?"+u),""+a+c+(l=l.replace(/[?#]/g,encodeURIComponent))+(u=u.replace("#","%23"))+i}let l=["auth","hash","host","hostname","href","path","pathname","port","protocol","query","search","slashes"];function i(e){return a(e)}},18581,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"useMergedRef",{enumerable:!0,get:function(){return s}});let n=e.r(71645);function s(e,t){let r=(0,n.useRef)(null),s=(0,n.useRef)(null);return(0,n.useCallback)(n=>{if(null===n){let e=r.current;e&&(r.current=null,e());let t=s.current;t&&(s.current=null,t())}else e&&(r.current=a(e,n)),t&&(s.current=a(t,n))},[e,t])}function a(e,t){if("function"!=typeof e)return e.current=t,()=>{e.current=null};{let r=e(t);return"function"==typeof r?r:()=>e(null)}}("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},18967,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),!function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(r,{DecodeError:function(){return h},MiddlewareNotFoundError:function(){return v},MissingStaticPage:function(){return b},NormalizeError:function(){return x},PageNotFoundError:function(){return g},SP:function(){return m},ST:function(){return f},WEB_VITALS:function(){return n},execOnce:function(){return s},getDisplayName:function(){return c},getLocationOrigin:function(){return i},getURL:function(){return o},isAbsoluteUrl:function(){return l},isResSent:function(){return u},loadGetInitialProps:function(){return p},normalizeRepeatedSlashes:function(){return d},stringifyError:function(){return y}});let n=["CLS","FCP","FID","INP","LCP","TTFB"];function s(e){let t,r=!1;return function(){for(var n=arguments.length,s=Array(n),a=0;a<n;a++)s[a]=arguments[a];return r||(r=!0,t=e(...s)),t}}let a=/^[a-zA-Z][a-zA-Z\d+\-.]*?:/,l=e=>a.test(e);function i(){let{protocol:e,hostname:t,port:r}=window.location;return e+"//"+t+(r?":"+r:"")}function o(){let{href:e}=window.location,t=i();return e.substring(t.length)}function c(e){return"string"==typeof e?e:e.displayName||e.name||"Unknown"}function u(e){return e.finished||e.headersSent}function d(e){let t=e.split("?");return t[0].replace(/\\/g,"/").replace(/\/\/+/g,"/")+(t[1]?"?"+t.slice(1).join("?"):"")}async function p(e,t){let r=t.res||t.ctx&&t.ctx.res;if(!e.getInitialProps)return t.ctx&&t.Component?{pageProps:await p(t.Component,t.ctx)}:{};let n=await e.getInitialProps(t);if(r&&u(r))return n;if(!n)throw Object.defineProperty(Error('"'+c(e)+'.getInitialProps()" should resolve to an object. But found "'+n+'" instead.'),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0});return n}let m="undefined"!=typeof performance,f=m&&["mark","measure","getEntriesByName"].every(e=>"function"==typeof performance[e]);class h extends Error{}class x extends Error{}class g extends Error{constructor(e){super(),this.code="ENOENT",this.name="PageNotFoundError",this.message="Cannot find module for page: "+e}}class b extends Error{constructor(e,t){super(),this.message="Failed to load static file for page: "+e+" "+t}}class v extends Error{constructor(){super(),this.code="ENOENT",this.message="Cannot find the middleware module"}}function y(e){return JSON.stringify({message:e.message,stack:e.stack})}},73668,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"isLocalURL",{enumerable:!0,get:function(){return a}});let n=e.r(18967),s=e.r(52817);function a(e){if(!(0,n.isAbsoluteUrl)(e))return!0;try{let t=(0,n.getLocationOrigin)(),r=new URL(e,t);return r.origin===t&&(0,s.hasBasePath)(r.pathname)}catch(e){return!1}}},84508,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"errorOnce",{enumerable:!0,get:function(){return n}});let n=e=>{}},22016,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),!function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(r,{default:function(){return x},useLinkStatus:function(){return b}});let n=e.r(90809),s=e.r(18050),a=n._(e.r(71645)),l=e.r(95057),i=e.r(8372),o=e.r(18581),c=e.r(18967),u=e.r(84395);e.r(33525);let d=e.r(91949),p=e.r(73668),m=e.r(99781);e.r(84508);let f=e.r(65165);function h(e){return"string"==typeof e?e:(0,l.formatUrl)(e)}function x(e){var t;let r,n,l,[x,b]=(0,a.useOptimistic)(d.IDLE_LINK_STATUS),v=(0,a.useRef)(null),{href:y,as:j,children:N,prefetch:S=null,passHref:C,replace:w,shallow:T,scroll:k,onClick:A,onMouseEnter:I,onTouchStart:M,legacyBehavior:P=!1,onNavigate:E,ref:D,unstable_dynamicOnHover:_,...O}=e;r=N,P&&("string"==typeof r||"number"==typeof r)&&(r=(0,s.jsx)("a",{children:r}));let F=a.default.useContext(i.AppRouterContext),U=!1!==S,L=!1!==S?null===(t=S)||"auto"===t?f.FetchStrategy.PPR:f.FetchStrategy.Full:f.FetchStrategy.PPR,{href:R,as:V}=a.default.useMemo(()=>{let e=h(y);return{href:e,as:j?h(j):e}},[y,j]);P&&(n=a.default.Children.only(r));let z=P?n&&"object"==typeof n&&n.ref:D,B=a.default.useCallback(e=>(null!==F&&(v.current=(0,d.mountLinkInstance)(e,R,F,L,U,b)),()=>{v.current&&((0,d.unmountLinkForCurrentNavigation)(v.current),v.current=null),(0,d.unmountPrefetchableInstance)(e)}),[U,R,F,L,b]),K={ref:(0,o.useMergedRef)(B,z),onClick(e){P||"function"!=typeof A||A(e),P&&n.props&&"function"==typeof n.props.onClick&&n.props.onClick(e),F&&(e.defaultPrevented||function(e,t,r,n,s,l,i){let{nodeName:o}=e.currentTarget;if(!("A"===o.toUpperCase()&&function(e){let t=e.currentTarget.getAttribute("target");return t&&"_self"!==t||e.metaKey||e.ctrlKey||e.shiftKey||e.altKey||e.nativeEvent&&2===e.nativeEvent.which}(e)||e.currentTarget.hasAttribute("download"))){if(!(0,p.isLocalURL)(t)){s&&(e.preventDefault(),location.replace(t));return}if(e.preventDefault(),i){let e=!1;if(i({preventDefault:()=>{e=!0}}),e)return}a.default.startTransition(()=>{(0,m.dispatchNavigateAction)(r||t,s?"replace":"push",null==l||l,n.current)})}}(e,R,V,v,w,k,E))},onMouseEnter(e){P||"function"!=typeof I||I(e),P&&n.props&&"function"==typeof n.props.onMouseEnter&&n.props.onMouseEnter(e),F&&U&&(0,d.onNavigationIntent)(e.currentTarget,!0===_)},onTouchStart:function(e){P||"function"!=typeof M||M(e),P&&n.props&&"function"==typeof n.props.onTouchStart&&n.props.onTouchStart(e),F&&U&&(0,d.onNavigationIntent)(e.currentTarget,!0===_)}};return(0,c.isAbsoluteUrl)(V)?K.href=V:P&&!C&&("a"!==n.type||"href"in n.props)||(K.href=(0,u.addBasePath)(V)),l=P?a.default.cloneElement(n,K):(0,s.jsx)("a",{...O,...K,children:r}),(0,s.jsx)(g.Provider,{value:x,children:l})}let g=(0,a.createContext)(d.IDLE_LINK_STATUS),b=()=>(0,a.useContext)(g);("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},20291,e=>{"use strict";e.s(["TaskView",()=>F],20291);var t=e.i(18050),r=e.i(71645),n=e.i(56708),s=e.i(19455),a=e.i(72064),l=e.i(53145),i=e.i(57428),o=e.i(87676),c=e.i(76639),u=e.i(93479),d=e.i(10204),p=e.i(67489),m=e.i(24687),f=e.i(46798),h=e.i(13354),x=e.i(87243),g=e.i(92413),b=e.i(75157),v=e.i(65934);let y=[{id:"delay",label:"单次延时",description:"在指定时间后执行一次"},{id:"cron",label:"Cron 定时",description:"按照 Cron 表达式定时执行"}],j=[{value:"minutes",label:"分钟"},{value:"hours",label:"小时"}],N=[{value:"Asia/Shanghai",label:"(UTC+8) 北京,重庆,香港特别行政区,乌鲁木齐"},{value:"UTC",label:"(UTC+0) 协调世界时"}];var S=e.i(29250),C=e.i(36845);async function w(e,t,r){return(0,S.get)((0,C.buildSchedulesUrl)(e,t,r))}async function T(e,t,r,n){return(0,S.del)((0,C.buildScheduleDeleteUrl)(e,t,r,n))}async function k(e,t,r,n){return(0,S.post)((0,C.buildSchedulesUrl)(e,t,r),n)}function A(e){let{children:r,hint:n,className:a}=e;return(0,t.jsxs)("div",{className:(0,b.cn)("mb-2 flex items-center gap-1.5",a),children:[(0,t.jsx)(d.Label,{className:"text-sm font-medium text-[var(--ds-text)]",children:r}),n?(0,t.jsx)(f.TooltipProvider,{delayDuration:150,children:(0,t.jsxs)(f.Tooltip,{children:[(0,t.jsx)(f.TooltipTrigger,{asChild:!0,children:(0,t.jsx)(s.Button,{type:"button",variant:"plain",size:"icon-xs",className:"inline-flex size-5 cursor-pointer items-center justify-center rounded-full p-0 text-[var(--ds-muted)] hover:bg-transparent hover:text-[var(--ds-text)]","aria-label":n})}),(0,t.jsx)(f.TooltipContent,{side:"top",className:"max-w-[240px]",children:n})]})}):null]})}function I(e){let{open:n,onOpenChange:f,onCreated:S}=e,C=(0,v.useAppStore)(e=>e.wsUrl),w=(0,v.useAppStore)(e=>e.apiBase),T=(0,v.useAppStore)(e=>e.sessionId),{currentAgent:I,loadSessions:M}=(0,x.useSession)(),[P,E]=(0,r.useState)(!1),[D,_]=(0,r.useState)([]),O=(0,r.useRef)(M);(0,r.useEffect)(()=>{O.current=M},[M]);let F=I(),U=(0,l.useForm)({defaultValues:{sessionId:"",templateId:"inspect",prompt:"",triggerMode:"interval",delayMinutes:"5",recurring:!1,cron:"*/5 * * * *",intervalValue:"5",intervalUnit:"minutes",startAt:"",stopMode:"permanent",endAt:"",timezone:"Asia/Shanghai"},mode:"onChange"}),L=U.watch("sessionId"),R=U.watch("triggerMode"),V=U.watch("delayMinutes"),z=U.watch("cron"),B=U.watch("intervalValue"),K=U.watch("intervalUnit"),W=U.watch("startAt"),H=U.watch("stopMode"),q=U.watch("endAt"),Q=U.watch("timezone"),Z=(0,r.useMemo)(()=>(function(e,t){let r=t.trim();return e.length>0||!r?e:[{sessionId:r}]})(D,L.trim()||T.trim()),[D,L,T]),G=(0,r.useCallback)(()=>{U.reset({sessionId:"",templateId:"inspect",prompt:"",triggerMode:"delay",delayMinutes:"5",recurring:!1,cron:"*/5 * * * *",intervalValue:"5",intervalUnit:"minutes",startAt:"",stopMode:"permanent",endAt:"",timezone:"Asia/Shanghai"})},[U]);(0,r.useEffect)(()=>{if(!n)return;let e=!1;return G(),_([]),(async()=>{var t;if(await O.current(),e)return;let r=v.useAppStore.getState().lastSessions;_(r);let n=v.useAppStore.getState().sessionId.trim(),s=(n&&r.some(e=>e.sessionId===n)?n:"")||(null==(t=r[0])?void 0:t.sessionId)||"";s&&U.setValue("sessionId",s,{shouldDirty:!1})})(),()=>{e=!0}},[n,G,U]);let J=(0,r.useCallback)(()=>{f(!1)},[f]),X=(0,r.useCallback)(async e=>{let t,r=e.sessionId.trim(),n=e.prompt.trim();if(!r)return void h.appToast.error("请选择关联会话");if(!n)return void h.appToast.error("请填写执行指令");try{t=function(e){let t={sessionId:e.sessionId.trim(),prompt:e.prompt.trim(),recurring:!1};if("cron"===e.triggerMode){let r=e.cron.trim();if(!r)throw Error("请填写 Cron 表达式");return{...t,cron:r,recurring:!0}}let r=Number(e.delayMinutes);if(!Number.isFinite(r)||r<1)throw Error("delayMinutes 必须是 >= 1 的整数");return{...t,delayMinutes:Math.floor(r),recurring:!1}}({sessionId:r,prompt:n,delayMinutes:e.delayMinutes,..."cron"===e.triggerMode&&{cron:e.cron},recurring:e.recurring})}catch(e){h.appToast.error(e instanceof Error?e.message:String(e));return}E(!0);try{await k(C,w,F,t),h.appToast.success("定时任务已创建"),J(),await (null==S?void 0:S())}catch(e){h.appToast.error("创建失败:".concat(e instanceof Error?e.message:String(e)))}finally{E(!1)}},[C,w,F,J,S]),Y=(0,r.useMemo)(()=>{let e=Number(B);return!Number.isFinite(e)||e<1?5:"hours"===K?60*e:e},[B,K]);return(0,t.jsx)(c.Dialog,{open:n,onOpenChange:f,children:(0,t.jsxs)(c.DialogContent,{className:"max-w-[720px]","aria-labelledby":"create-schedule-title",children:[(0,t.jsxs)(c.DialogHeader,{className:"items-start gap-3",children:[(0,t.jsx)("div",{className:"flex min-w-0 flex-1 items-start gap-3",children:(0,t.jsxs)("div",{className:"min-w-0",children:[(0,t.jsx)(c.DialogTitle,{id:"create-schedule-title",children:"新建定时任务"}),(0,t.jsx)(c.DialogDescription,{className:"mt-1",children:"用于自动巡检、定期追问与会话自动执行"})]})}),(0,t.jsx)(c.DialogClose,{"aria-label":"关闭"})]}),(0,t.jsx)(o.Form,{...U,children:(0,t.jsxs)("form",{onSubmit:U.handleSubmit(X),children:[(0,t.jsxs)(c.DialogBody,{className:"max-h-[min(68vh,640px)] overflow-y-auto !px-5 !py-4",children:[(0,t.jsxs)("section",{className:"mb-5",children:[(0,t.jsx)(A,{children:"关联会话"}),(0,t.jsx)(o.FormField,{control:U.control,name:"sessionId",render:e=>{let{field:r}=e;return(0,t.jsxs)(o.FormItem,{className:"min-w-0",children:[Z.length>1?(0,t.jsxs)(p.Select,{value:r.value,onValueChange:r.onChange,children:[(0,t.jsx)(o.FormControl,{children:(0,t.jsx)(p.SelectTrigger,{className:"mb-2 h-8 w-full",children:(0,t.jsx)(p.SelectValue,{placeholder:"选择会话"})})}),(0,t.jsx)(p.SelectContent,{children:Z.map(e=>(0,t.jsx)(p.SelectItem,{value:e.sessionId,children:(0,g.sessionTitle)(e)},e.sessionId))})]}):null,(0,t.jsx)(o.FormMessage,{})]})}})]}),(0,t.jsxs)("section",{className:"mb-5",children:[(0,t.jsx)(A,{children:"执行指令"}),(0,t.jsx)(o.FormField,{control:U.control,name:"prompt",render:e=>{let{field:r}=e;return(0,t.jsxs)(o.FormItem,{className:"min-w-0",children:[(0,t.jsx)(o.FormControl,{children:(0,t.jsx)(m.Textarea,{...r,maxLength:2e3,placeholder:"请描述 Agent 需要在每次执行时完成的具体任务、输出内容与注意事项。",className:"min-h-[120px] border-[var(--green-dark)] focus-visible:border-[var(--green-dark)]"})}),(0,t.jsx)(o.FormMessage,{})]})}})]}),(0,t.jsxs)("section",{children:[(0,t.jsx)(A,{className:"mb-0 shrink-0",children:"触发方式"}),(0,t.jsx)("div",{className:"mb-4 mt-2 grid grid-cols-1 gap-2 sm:grid-cols-2",children:y.map(e=>{let r=R===e.id,n="delay"===e.id?"Delay":"Cron";return(0,t.jsxs)(s.Button,{type:"button",variant:"plain-outline",onClick:()=>U.setValue("triggerMode",e.id,{shouldDirty:!0}),className:(0,b.cn)("relative h-auto cursor-pointer !rounded-md border bg-white p-3 !px-3 !py-3 text-left transition-colors",r?"!border-[var(--green-dark)] shadow-[var(--shadow-sm)] hover:bg-transparent":"border-[var(--ds-border)] hover:border-[var(--green-dark)] hover:bg-transparent"),children:[r?(0,t.jsx)("span",{className:"absolute bottom-2 right-2 text-[var(--green-dark)] [&_svg_path]:!fill-none",children:(0,t.jsx)(a.default,{name:"Check",className:"size-4 text-[var(--green-dark)]",strokeWidth:2.5})}):null,(0,t.jsx)(a.default,{name:n,className:(0,b.cn)("mb-2 mr-2 size-8",r?"text-[var(--green-dark)]":"text-[var(--ds-muted)]"),strokeWidth:1.5}),(0,t.jsxs)("div",{children:[(0,t.jsx)("p",{className:"mt-0 text-sm font-medium text-[var(--ds-text)]",children:e.label}),(0,t.jsx)("p",{className:"mb-0 mt-0.5 text-xs text-[var(--ds-muted)]",children:e.description})]})]},e.id)})}),(0,t.jsx)(o.FormField,{control:U.control,name:"recurring",render:e=>{let{field:r}=e;return(0,t.jsxs)(o.FormItem,{className:"flex flex-row items-center gap-2 space-y-0",children:[(0,t.jsx)(o.FormControl,{children:(0,t.jsx)(i.Checkbox,{checked:r.value,onChange:e=>r.onChange(e.target.checked)})}),(0,t.jsx)(o.FormLabel,{className:"cursor-pointer text-sm font-normal",children:"循环执行"})]})}}),(0,t.jsx)("div",{className:"flex flex-wrap items-center justify-between gap-3 rounded-xl border border-[var(--ds-border)] bg-[var(--surface-1)] py-4",children:(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)(d.Label,{className:"shrink-0 text-sm",children:"延迟分钟"}),(0,t.jsx)(u.Input,{type:"number",min:1,max:10080,value:V,onChange:e=>U.setValue("delayMinutes",e.target.value,{shouldDirty:!0}),className:"w-[140px]"}),(0,t.jsx)("span",{className:"text-sm text-[var(--ds-muted)]",children:"(1~10080)"})]})}),"cron"===R?(0,t.jsx)("div",{className:"space-y-3 rounded-xl border border-[var(--ds-border)] bg-[var(--surface-1)] py-4",children:(0,t.jsxs)("div",{children:[(0,t.jsx)(d.Label,{className:"mb-2 block text-sm",children:"Cron(5 段,本地时区)"}),(0,t.jsx)(u.Input,{value:z,onChange:e=>U.setValue("cron",e.target.value,{shouldDirty:!0}),placeholder:"30 9 * * *"}),(0,t.jsx)("span",{className:"text-sm text-[var(--ds-muted)]",children:"格式:分 时 日 月 星期"})]})}):null,"interval"===R?(0,t.jsxs)("div",{className:"space-y-4 rounded-xl border border-[var(--ds-border)] bg-[var(--surface-1)] p-4",children:[(0,t.jsxs)("div",{className:"flex flex-wrap items-end gap-3",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)(d.Label,{className:"mb-2 block text-sm",children:"巡检间隔"}),(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)(u.Input,{type:"number",min:1,value:B,onChange:e=>U.setValue("intervalValue",e.target.value,{shouldDirty:!0}),className:"w-20"}),(0,t.jsxs)(p.Select,{value:K,onValueChange:e=>U.setValue("intervalUnit",e,{shouldDirty:!0}),children:[(0,t.jsx)(p.SelectTrigger,{className:"h-8 w-[88px]",children:(0,t.jsx)(p.SelectValue,{})}),(0,t.jsx)(p.SelectContent,{children:j.map(e=>(0,t.jsx)(p.SelectItem,{value:e.value,children:e.label},e.value))})]})]})]}),(0,t.jsxs)("div",{className:"min-w-[220px] flex-1",children:[(0,t.jsx)(d.Label,{className:"mb-2 block text-sm",children:"生效时间(开始时间)"}),(0,t.jsx)(u.Input,{type:"datetime-local",value:W,onChange:e=>U.setValue("startAt",e.target.value,{shouldDirty:!0})})]})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)(d.Label,{className:"mb-2 block text-sm",children:"停止条件"}),(0,t.jsxs)("div",{className:"flex flex-wrap items-center gap-4 text-sm",children:[(0,t.jsxs)("label",{className:"inline-flex cursor-pointer items-center gap-2",children:[(0,t.jsx)("input",{type:"radio",name:"scheduleStopMode",checked:"permanent"===H,onChange:()=>U.setValue("stopMode","permanent",{shouldDirty:!0}),className:"accent-[var(--green-dark)]"}),"永久运行"]}),(0,t.jsxs)("label",{className:"inline-flex cursor-pointer items-center gap-2",children:[(0,t.jsx)("input",{type:"radio",name:"scheduleStopMode",checked:"endTime"===H,onChange:()=>U.setValue("stopMode","endTime",{shouldDirty:!0}),className:"accent-[var(--green-dark)]"}),"截止时间"]}),(0,t.jsx)(u.Input,{type:"datetime-local",value:q,onChange:e=>U.setValue("endAt",e.target.value,{shouldDirty:!0}),disabled:"endTime"!==H,className:"h-8 max-w-[220px]"}),(0,t.jsxs)("label",{className:"inline-flex cursor-pointer items-center gap-2",children:[(0,t.jsx)("input",{type:"radio",name:"scheduleStopMode",checked:"condition"===H,onChange:()=>U.setValue("stopMode","condition",{shouldDirty:!0}),className:"accent-[var(--green-dark)]"}),"达成条件后停止"]}),(0,t.jsx)(s.Button,{type:"button",variant:"outline",size:"sm",disabled:"condition"!==H,className:"cursor-pointer",children:"配置条件"})]}),"permanent"!==H?(0,t.jsx)("p",{className:"mt-2 text-xs text-[var(--ds-muted)]",children:"停止条件仅作展示,当前版本创建任务时按循环 Cron 提交。"}):null]}),(0,t.jsxs)("div",{children:[(0,t.jsx)(d.Label,{className:"mb-2 block text-sm",children:"时区"}),(0,t.jsxs)(p.Select,{value:Q,onValueChange:e=>U.setValue("timezone",e,{shouldDirty:!0}),children:[(0,t.jsx)(p.SelectTrigger,{className:"h-8 w-full",children:(0,t.jsx)(p.SelectValue,{})}),(0,t.jsx)(p.SelectContent,{children:N.map(e=>(0,t.jsx)(p.SelectItem,{value:e.value,children:e.label},e.value))})]})]}),(0,t.jsxs)("div",{className:"rounded-lg bg-[var(--green-light)] px-3 py-2 text-sm text-[var(--green-dark)]",children:["下次执行预览:",function(e){let t=new Date(Date.now()+6e4*e),r=String(t.getHours()).padStart(2,"0"),n=String(t.getMinutes()).padStart(2,"0");return"今天 ".concat(r,":").concat(n," (UTC+8)")}(Y),W?" · 计划开始:".concat(W.replace("T"," ")):""]})]}):null]})]}),(0,t.jsxs)("div",{className:"flex shrink-0 justify-end gap-2 border-t border-[var(--ds-border)] bg-[var(--ds-sidebar)] px-5 py-3",children:[(0,t.jsx)(s.Button,{type:"button",variant:"plain-outline",onClick:J,size:"lg",disabled:P,className:"cursor-pointer",children:"取消"}),(0,t.jsx)(s.Button,{type:"submit",variant:"default",size:"lg",disabled:P||!L,className:"cursor-pointer",children:P?"创建中…":"创建任务"})]})]})})]})})}var M=e.i(22016),P=e.i(92715),E=e.i(94197),D=e.i(68499),_=e.i(97249);function O(e){let{schedule:n}=e,l=(0,v.useAppStore)(e=>e.wsUrl),i=(0,v.useAppStore)(e=>e.apiBase),o=(0,v.useAppStore)(e=>e.lastSessions),{currentAgent:c}=(0,x.useSession)(),{tasks:u,timezone:d,loading:p,error:m,deletingId:y,setDeletingId:j,loadScheduleTasks:N}=n,S=c(),C=(0,r.useMemo)(()=>"时区: ".concat(d||"local"),[d]),w=(0,r.useCallback)(()=>{N()},[N]),k=(0,r.useCallback)(async e=>{if(await (0,D.confirmAlertDialog)({title:"确认删除定时任务?",description:"任务 ID:".concat(e),confirmText:"删除",cancelText:"取消"})){j(e);try{await T(l,i,c(),e),h.appToast.success("已删除定时任务"),await N()}catch(e){h.appToast.error("删除失败:".concat(e instanceof Error?e.message:String(e)))}finally{j(null)}}},[l,i,c,N,j]),A=(0,r.useCallback)(e=>(0,_.buildAppNavHref)("/",{ensureAgent:!0,agent:S,sessionId:e,preserveSessionId:!0}),[S]),I=[{key:"id",title:"ID",headerClassName:"w-[120px]",cellClassName:"w-[120px] font-mono",render:e=>e.id},{key:"session",title:"会话",headerClassName:"w-[140px]",cellClassName:"w-[140px]",render:e=>(0,t.jsx)(M.default,{href:A(e.sessionId),title:e.sessionId,prefetch:!1,className:(0,b.cn)("cursor-pointer text-[var(--ds-ok)] underline-offset-4 hover:underline"),children:function(e,t){let r=String(e||"").trim();if(!r)return"—";let n=t.find(e=>e.sessionId===r);return n?(0,g.sessionTitle)(n):(0,g.shortUuidTitle)(r)}(e.sessionId,o)})},{key:"cron",title:"Cron",headerClassName:"w-[120px]",cellClassName:"w-[120px]",render:e=>e.cron||"—"},{key:"nextFireAt",title:"下次执行",headerClassName:"w-[160px]",cellClassName:"w-[160px]",render:e=>(function(e){if("number"!=typeof e||!Number.isFinite(e))return"—";try{return new Date(e).toLocaleString()}catch(t){return String(e)}})(e.nextFireAt)},{key:"prompt",title:"Prompt",cellClassName:"max-w-[280px] truncate",render:e=>{var r;return(0,t.jsx)("span",{title:null!=(r=e.prompt)?r:"",children:e.prompt||""})}},{key:"type",title:"类型",headerClassName:"w-[80px]",cellClassName:"w-[80px]",render:e=>e.recurring?"循环":"一次性"},{key:"actions",title:"操作",headerClassName:"w-[120px] text-right",cellClassName:"w-[120px] text-right",render:e=>(0,t.jsx)(E.IconTooltipButton,{icon:"Trash2",label:"删除任务",tone:"danger",disabled:y===e.id,ariaLabel:"删除 ".concat(e.id),iconClassName:"text-red-500",onClick:()=>void k(e.id)})}];return(0,t.jsxs)("div",{className:"flex min-h-0 flex-1 flex-col rounded-xl border border-[var(--ds-border)] bg-white shadow-[var(--shadow-sm)]",children:[(0,t.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-3 border-b border-[var(--ds-border)] px-4 py-3",children:[(0,t.jsx)("p",{className:"text-sm text-[var(--ds-muted)]",children:C}),(0,t.jsx)(f.TooltipProvider,{delayDuration:150,children:(0,t.jsx)("span",{className:"inline-flex justify-end",children:(0,t.jsxs)(f.Tooltip,{children:[(0,t.jsx)(f.TooltipTrigger,{asChild:!0,children:(0,t.jsx)(s.Button,{type:"button",variant:"plain-outline",size:"icon",onClick:w,disabled:p,className:"cursor-pointer",children:(0,t.jsx)(a.default,{name:"Refresh",size:20,className:"shrink-0"})})}),(0,t.jsx)(f.TooltipContent,{side:"bottom",align:"center",children:"刷新任务"})]})})})]}),(0,t.jsx)("div",{className:"min-h-0 flex-1 overflow-auto p-4",children:p?(0,t.jsx)("div",{className:"flex min-h-[200px] items-center justify-center text-sm text-[var(--ds-muted)]",role:"status","aria-live":"polite",children:"加载中…"}):m?(0,t.jsxs)("div",{className:"flex min-h-[200px] flex-col items-center justify-center gap-3 text-sm text-destructive",role:"alert",children:[(0,t.jsxs)("span",{children:["加载失败:",m]}),(0,t.jsx)(s.Button,{type:"button",variant:"outline",size:"sm",onClick:w,children:"重试"})]}):(0,t.jsx)(P.AppTable,{rows:u.filter(e=>!!(null==e?void 0:e.id)),columns:I,getRowKey:e=>e.id,className:"border-0",headerRowClassName:"bg-transparent hover:bg-transparent",emptyText:"暂无定时任务"})})]})}function F(){let[e,l]=(0,r.useState)(!1),i=function(){let e=(0,v.useAppStore)(e=>e.wsUrl),t=(0,v.useAppStore)(e=>e.apiBase),n=(0,v.useAppStore)(e=>e.agentId),s=(0,v.useAppStore)(e=>e.agentSelectionResolved),a=(0,v.useAppStore)(e=>e.agentSelectionError),{loadSessions:l}=(0,x.useSession)(),[i,o]=(0,r.useState)([]),[c,u]=(0,r.useState)("local"),[d,p]=(0,r.useState)(!0),[m,f]=(0,r.useState)(null),[g,b]=(0,r.useState)(null),y=(0,r.useCallback)(async()=>{p(!0),f(null);try{let r=v.useAppStore.getState().agentId.trim()||"qihoo",n=await w(e,t,r);o(Array.isArray(n.tasks)?n.tasks:[]),u("string"==typeof n.timezone?n.timezone:"local")}catch(t){let e=t instanceof Error?t.message:String(t);o([]),f(e),h.appToast.error("加载失败:".concat(e))}finally{p(!1)}},[e,t]);return(0,r.useEffect)(()=>{if(!(0,_.isAgentUrlStoreSyncPending)(n)){if(!s){a&&(o([]),f(a),p(!1));return}(async()=>{await l(),await y()})()}},[n,s,a,l,y]),{tasks:i,timezone:c,loading:d,error:m,deletingId:g,setDeletingId:b,loadScheduleTasks:y}}(),o=(0,r.useCallback)(()=>{l(!0)},[]);return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.ManageChromeHeaderActions,{children:(0,t.jsx)("div",{className:"flex flex-wrap items-center",children:(0,t.jsxs)(s.Button,{type:"button",variant:"default",size:"lg",onClick:o,className:"mr-[12px]",children:[(0,t.jsx)(a.default,{name:"Create",size:16,className:"align-middle"}),"新建定时任务"]})})}),(0,t.jsx)(O,{schedule:i}),(0,t.jsx)(I,{open:e,onOpenChange:l,onCreated:i.loadScheduleTasks})]})}}]);
@@ -0,0 +1 @@
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,50711,e=>{"use strict";e.s(["usePersistAgentConfig",()=>i,"usePersistAgentConfigField",()=>a]);var t=e.i(71645),n=e.i(65934),r=e.i(67327),s=e.i(13354),o=e.i(82136);function i(){let e=(0,n.useAppStore)(e=>e.wsUrl),i=(0,n.useAppStore)(e=>e.apiBase),{sendReloadAgentConfig:a}=(0,r.useWebSocketSender)(),l=(0,t.useCallback)(()=>n.useAppStore.getState().agentId.trim()||"qihoo",[]);return(0,t.useCallback)(async t=>{let r=!!(null==t?void 0:t.silent),c=n.useAppStore.getState();try{await (0,o.saveAgentConfig)(e,i,l(),(0,o.prepareAgentConfigForSave)(c.agentConfig));let t=n.useAppStore.getState();t.wsConnected&&a(),r?(t.appendLog("agent-config","已写入 agent.json"),t.setStatus("agent.json 已保存".concat(t.wsConnected?",已请求同步 worker":"(未连接 WS 则下次连上后 reload)"),t.bridgeReady?"ready":"")):s.appToast.success(t.wsConnected?"已保存并已请求 worker 重新加载 agent.md + agent.json。":"已保存。重连 WebSocket 后生效。")}catch(e){s.appToast.error("保存失败:".concat(e instanceof Error?e.message:String(e)))}},[e,i,a,l])}function a(e){let i=(0,n.useAppStore)(e=>e.wsUrl),a=(0,n.useAppStore)(e=>e.apiBase),{sendReloadAgentConfig:l}=(0,r.useWebSocketSender)(),c=(0,t.useCallback)(()=>n.useAppStore.getState().agentId.trim()||"qihoo",[]);return(0,t.useCallback)(async(t,r)=>{let u=!!(null==r?void 0:r.silent),d=n.useAppStore.getState();try{await (0,o.saveAgentConfig)(i,a,c(),(0,o.prepareAgentConfigForSave)(d.agentConfig,{[e]:t}));let r=n.useAppStore.getState();r.wsConnected&&l(),u?(r.appendLog("agent-config","已写入 agent.json"),r.setStatus("agent.json 已保存".concat(r.wsConnected?",已请求同步 worker":"(未连接 WS 则下次连上后 reload)"),r.bridgeReady?"ready":"")):s.appToast.success(r.wsConnected?"已保存并已请求 worker 重新加载 agent.md + agent.json。":"已保存。重连 WebSocket 后生效。")}catch(e){s.appToast.error("保存失败:".concat(e instanceof Error?e.message:String(e)))}},[i,a,l,c,e])}},67327,20090,e=>{"use strict";e.s(["useWebSocketSender",()=>l],67327);var t=e.i(71645),n=e.i(65934);e.s(["clearActiveWebSocket",()=>i,"isWebSocketOpen",()=>s,"sendActiveWebSocketJson",()=>a,"setActiveWebSocket",()=>o],20090);let r=null;function s(e){return null!==e&&e.readyState===WebSocket.OPEN}function o(e){r=e}function i(e){r===e&&(r=null)}function a(e){let t=r;return!!s(t)&&(t.send(JSON.stringify(e)),!0)}function l(){let e=(0,t.useCallback)(e=>{let t=a(e);return t&&n.useAppStore.getState().appendLog("→",e),t},[]),r=(0,t.useCallback)(()=>e({type:"reloadAgentConfig"}),[e]),s=(0,t.useCallback)(()=>e({type:"reloadAgentPrompt"}),[e]),o=(0,t.useCallback)((t,n)=>{let r=String(t||"").trim();return!!r&&e({type:"permission.response",requestId:r,behavior:n})},[e]);return{sendJson:e,sendReloadAgentConfig:r,sendReloadAgentPrompt:s,sendPermissionResponse:o}}},3404,e=>{"use strict";e.s(["REASONS",()=>_],3404),e.s(["cancelOpen",()=>L,"chipRemovePress",()=>u,"clearPress",()=>c,"closePress",()=>a,"closeWatcher",()=>b,"dayPress",()=>O,"decrementPress",()=>g,"disabled",()=>j,"drag",()=>T,"escapeKey",()=>y,"focusOut",()=>A,"imperativeAction",()=>x,"incrementPress",()=>p,"inputBlur",()=>h,"inputChange",()=>f,"inputClear",()=>m,"inputPaste",()=>v,"inputPress",()=>S,"itemPress",()=>i,"keyboard",()=>C,"linkPress",()=>l,"listNavigation",()=>w,"monthChange",()=>N,"none",()=>t,"outsidePress",()=>o,"pointer",()=>k,"scrub",()=>E,"siblingOpen",()=>F,"swipe",()=>I,"trackPress",()=>d,"triggerFocus",()=>s,"triggerHover",()=>r,"triggerPress",()=>n,"valuePropChange",()=>R,"wheel",()=>P,"windowResize",()=>U],16162);let t="none",n="trigger-press",r="trigger-hover",s="trigger-focus",o="outside-press",i="item-press",a="close-press",l="link-press",c="clear-press",u="chip-remove-press",d="track-press",p="increment-press",g="decrement-press",f="input-change",m="input-clear",h="input-blur",v="input-paste",S="input-press",A="focus-out",y="escape-key",b="close-watcher",w="list-navigation",C="keyboard",k="pointer",T="drag",P="wheel",E="scrub",L="cancel-open",F="sibling-open",j="disabled",x="imperative-action",I="swipe",U="window-resize",O="day-press",N="month-change",R="value-prop-change";var _=e.i(16162)},94349,83799,89879,5963,e=>{"use strict";e.s(["useControlled",()=>n],94349),e.i(47167);var t=e.i(71645);function n(e){let{controlled:n,default:r,name:s,state:o="value"}=e,{current:i}=t.useRef(void 0!==n),[a,l]=t.useState(r),c=t.useCallback(e=>{i||l(e)},[]);return[i?n:a,c]}e.s(["useBaseUiId",()=>a],89879),e.s(["useId",()=>i],83799);let r={...t},s=0,o=r.useId;function i(e,n){if(void 0!==o){let t=o();return null!=e?e:n?"".concat(n,"-").concat(t):t}return function(e){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"mui",[r,o]=t.useState(e),i=e||r;return t.useEffect(()=>{null==r&&(s+=1,o("".concat(n,"-").concat(s)))},[r,n]),i}(e,n)}function a(e){return i(e,"base-ui")}e.s(["createChangeEventDetails",()=>c],5963);var l=e.i(17514);function c(e,t,n,r){let s=!1,o=!1,i=null!=r?r:l.EMPTY_OBJECT;return{reason:e,event:null!=t?t:new Event("base-ui"),cancel(){s=!0},allowPropagation(){o=!0},get isCanceled(){return s},get isPropagationAllowed(){return o},trigger:n,...i}}},46798,e=>{"use strict";e.s(["Tooltip",()=>c,"TooltipContent",()=>d,"TooltipProvider",()=>l,"TooltipTrigger",()=>u]);var t=e.i(18050),n=e.i(71645),r=e.i(74080),s=e.i(75157);let o=n.createContext(null),i=n.createContext({delayDuration:0,side:"bottom",align:"center"});function a(){let e=n.useContext(o);if(!e)throw Error("Tooltip components must be used inside <Tooltip>.");return e}function l(e){let{delayDuration:n=0,side:r="bottom",align:s="center",children:o}=e;return(0,t.jsx)(i.Provider,{value:{delayDuration:n,side:r,align:s},children:o})}function c(e){let{children:r}=e,{delayDuration:s}=n.useContext(i),[a,l]=n.useState(!1),c=n.useRef(null),u=n.useRef(null),d=n.useId(),p=n.useCallback(()=>{null!==c.current&&(window.clearTimeout(c.current),c.current=null),l(!1)},[]),g=n.useCallback(()=>{if(null!==c.current&&(window.clearTimeout(c.current),c.current=null),s<=0)return void l(!0);c.current=window.setTimeout(()=>{l(!0),c.current=null},s)},[s]);return n.useEffect(()=>()=>{null!==c.current&&window.clearTimeout(c.current)},[]),(0,t.jsx)(o.Provider,{value:{open:a,delayDuration:s,contentId:d,triggerRef:u,openWithDelay:g,close:p},children:(0,t.jsx)("span",{ref:u,"data-slot":"tooltip",className:"inline-flex",children:r})})}function u(e){let{asChild:r,children:s,...o}=e,{open:i,contentId:l,openWithDelay:c,close:u}=a(),d={"aria-describedby":i?l:void 0};if(r&&n.isValidElement(s)){let e=s.props;return n.cloneElement(s,{...o,...e,...d,onMouseEnter:t=>{var n,r;null==(n=e.onMouseEnter)||n.call(e,t),null==(r=o.onMouseEnter)||r.call(o,t),t.defaultPrevented||c()},onMouseLeave:t=>{var n,r;null==(n=e.onMouseLeave)||n.call(e,t),null==(r=o.onMouseLeave)||r.call(o,t),t.defaultPrevented||u()},onFocus:t=>{var n,r;null==(n=e.onFocus)||n.call(e,t),null==(r=o.onFocus)||r.call(o,t),t.defaultPrevented||c()},onBlur:t=>{var n,r;null==(n=e.onBlur)||n.call(e,t),null==(r=o.onBlur)||r.call(o,t),t.defaultPrevented||u()}})}return(0,t.jsx)("span",{"data-slot":"tooltip-trigger",...o,...d,onMouseEnter:e=>{var t;null==(t=o.onMouseEnter)||t.call(o,e),e.defaultPrevented||c()},onMouseLeave:e=>{var t;null==(t=o.onMouseLeave)||t.call(o,e),e.defaultPrevented||u()},onFocus:e=>{var t;null==(t=o.onFocus)||t.call(o,e),e.defaultPrevented||c()},onBlur:e=>{var t;null==(t=o.onBlur)||t.call(o,e),e.defaultPrevented||u()},children:s})}function d(e){let{className:o,side:l,align:c,sideOffset:u=8,...d}=e,{open:p,contentId:g,triggerRef:f}=a(),{side:m,align:h}=n.useContext(i),v=null!=l?l:m,S=null!=c?c:h,[A,y]=n.useState({});return(n.useLayoutEffect(()=>{let e=()=>{let e=f.current;if(!e)return;let t=e.getBoundingClientRect(),n=0,r=0,s="",o="";"top"===v||"bottom"===v?("start"===S&&(r=t.left),"center"===S&&(r=t.left+t.width/2,s="-50%"),"end"===S&&(r=t.right)):("start"===S&&(n=t.top),"center"===S&&(n=t.top+t.height/2,o="-50%"),"end"===S&&(n=t.bottom)),"bottom"===v&&(n=t.bottom+u),"top"===v&&(n=t.top-u,o="-100%"),"right"===v&&(r=t.right+u),"left"===v&&(r=t.left-u,s="-100%"),y({position:"fixed",top:n,left:r,transform:[s&&"translateX(".concat(s,")"),o&&"translateY(".concat(o,")")].filter(Boolean).join(" ")||void 0})};return e(),window.addEventListener("resize",e),window.addEventListener("scroll",e,!0),()=>{window.removeEventListener("resize",e),window.removeEventListener("scroll",e,!0)}},[p,v,S,u,f]),p&&"undefined"!=typeof document)?(0,r.createPortal)((0,t.jsx)("div",{id:g,role:"tooltip","data-slot":"tooltip-content",className:(0,s.cn)("pointer-events-none z-[10050]","w-max max-w-[300px] rounded-md bg-black/70 px-3 py-1 text-xs text-white shadow-md","animate-in fade-in-0 zoom-in-95",o),style:A,...d}),document.body):null}},62372,19904,e=>{"use strict";e.s(["visuallyHidden",()=>n,"visuallyHiddenInput",()=>r],62372);let t={clipPath:"inset(50%)",overflow:"hidden",whiteSpace:"nowrap",border:0,padding:0,width:1,height:1,margin:-1},n={...t,position:"fixed",top:0,left:0},r={...t,position:"absolute"};e.s(["useValueChanged",()=>a],19904);var s=e.i(71645),o=e.i(977),i=e.i(76477);function a(e,t){let n=s.useRef(e),r=(0,i.useStableCallback)(t);(0,o.useIsoLayoutEffect)(()=>{n.current!==e&&r(n.current)},[e,r]),(0,o.useIsoLayoutEffect)(()=>{n.current=e},[e])}},92413,e=>{"use strict";function t(e){return(e.summary||e.firstPrompt||e.sessionId||"(无标题)").slice(0,120)}function n(e){let t=new Map;for(let n of e){let e=function(e){let t=new Date(e.lastModified||e.createdAt||0);if(!Number.isFinite(t.getTime()))return"未知日期";let n=t.getFullYear(),r=String(t.getMonth()+1).padStart(2,"0");return"".concat(n,"-").concat(r)}(n),r=t.get(e);r?r.push(n):t.set(e,[n])}return[...t.keys()].sort((e,t)=>t.localeCompare(e)).map(e=>{var n;return{key:e,items:null!=(n=t.get(e))?n:[]}})}function r(e){let t=e.split("-"),n=t[0]&&/^[0-9a-fA-F]{8}$/.test(t[0])?t[0]:e.slice(0,8);return"".concat(n,"...")}function s(e){return String(e).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}e.s(["escapeHtml",()=>s,"groupSessionsByMonth",()=>n,"sessionTitle",()=>t,"shortUuidTitle",()=>r])},94606,e=>{"use strict";e.s(["confirmDiscardFlyoutChanges",()=>a,"isLeavingFlyoutGuardRoute",()=>o,"resolveAppRouterPathname",()=>s,"shouldConfirmFlyoutRouteChange",()=>i]);var t=e.i(68499),n=e.i(97249);let r={title:"放弃未保存的更改?",description:"编辑的信息尚未提交,确定要放弃并离开吗?",confirmText:"放弃",cancelText:"继续编辑"};function s(e){var t;let r=null!=(t=e.split("?")[0])?t:e;if(n.BASE_PATH){let e=n.BASE_PATH.replace(/\/+$/,"");e&&r.startsWith(e)&&(r=r.slice(e.length)||"/")}return(0,n.normalizeAppPathname)(r)}function o(e,t,n){if(!e)return!1;let r=s(e),o=s(t),i=s(n);return o===r&&i!==r}function i(e,t,n,r){return o(e,t,n)&&r}async function a(e){return(0,t.confirmAlertDialog)({...r,...e})}},43084,e=>{"use strict";e.s(["clamp",()=>c,"createCoords",()=>a,"evaluate",()=>u,"floor",()=>i,"getAlignment",()=>p,"getAlignmentAxis",()=>h,"getAlignmentSides",()=>v,"getAxisLength",()=>f,"getExpandedPlacements",()=>S,"getOppositeAlignmentPlacement",()=>A,"getOppositeAxis",()=>g,"getOppositeAxisPlacements",()=>k,"getOppositePlacement",()=>T,"getPaddingObject",()=>P,"getSide",()=>d,"getSideAxis",()=>m,"max",()=>s,"min",()=>r,"placements",()=>n,"rectToClientRect",()=>E,"round",()=>o,"sides",()=>t]);let t=["top","right","bottom","left"],n=t.reduce((e,t)=>e.concat(t,t+"-start",t+"-end"),[]),r=Math.min,s=Math.max,o=Math.round,i=Math.floor,a=e=>({x:e,y:e}),l={left:"right",right:"left",bottom:"top",top:"bottom"};function c(e,t,n){return s(e,r(t,n))}function u(e,t){return"function"==typeof e?e(t):e}function d(e){return e.split("-")[0]}function p(e){return e.split("-")[1]}function g(e){return"x"===e?"y":"x"}function f(e){return"y"===e?"height":"width"}function m(e){let t=e[0];return"t"===t||"b"===t?"y":"x"}function h(e){return g(m(e))}function v(e,t,n){void 0===n&&(n=!1);let r=p(e),s=h(e),o=f(s),i="x"===s?r===(n?"end":"start")?"right":"left":"start"===r?"bottom":"top";return t.reference[o]>t.floating[o]&&(i=T(i)),[i,T(i)]}function S(e){let t=T(e);return[A(e),t,A(t)]}function A(e){return e.includes("start")?e.replace("start","end"):e.replace("end","start")}let y=["left","right"],b=["right","left"],w=["top","bottom"],C=["bottom","top"];function k(e,t,n,r){let s=p(e),o=function(e,t,n){switch(e){case"top":case"bottom":if(n)return t?b:y;return t?y:b;case"left":case"right":return t?w:C;default:return[]}}(d(e),"start"===n,r);return s&&(o=o.map(e=>e+"-"+s),t&&(o=o.concat(o.map(A)))),o}function T(e){let t=d(e);return l[t]+e.slice(t.length)}function P(e){return"number"!=typeof e?{top:0,right:0,bottom:0,left:0,...e}:{top:e,right:e,bottom:e,left:e}}function E(e){let{x:t,y:n,width:r,height:s}=e;return{width:r,height:s,top:n,left:t,right:t+r,bottom:n+s,x:t,y:n}}},55227,e=>{"use strict";e.s(["deleteSession",()=>s,"listSessions",()=>r,"listWorkspaceFiles",()=>l,"loadSessionOverrides",()=>o,"loadSessionReplay",()=>i,"saveSessionOverrides",()=>a]);var t=e.i(29250),n=e.i(36845);async function r(e,r,s){return(0,t.get)((0,n.buildSessionsListUrl)(e,r,s))}async function s(e,r,s,o){return(0,t.del)((0,n.buildSessionDeleteUrl)(e,r,s,o))}async function o(e,r,s,o){return(0,t.get)((0,n.buildSessionOverridesUrl)(e,r,s,o))}async function i(e,r,s,o){let i=await (0,t.get)((0,n.buildSessionReplayUrl)(e,r,s,o));return{envelopes:Array.isArray(i.envelopes)?i.envelopes:[],messageCount:"number"==typeof i.messageCount?i.messageCount:void 0}}async function a(e,r,s,o,i){await (0,t.patch)((0,n.buildSessionOverridesUrl)(e,r,s,o),i)}async function l(e,r,s,o){return(0,t.get)((0,n.buildWorkspaceFilesListUrl)(e,r,s,o))}},82136,e=>{"use strict";e.s(["loadAgentConfig",()=>a,"prepareAgentConfigForSave",()=>i,"saveAgentConfig",()=>l]);var t=e.i(29250),n=e.i(36845),r=e.i(75675);function s(e){var t;let n={},s=null==e?void 0:e.env;if(s&&"object"==typeof s&&!Array.isArray(s))for(let[e,t]of Object.entries(s))"string"==typeof e&&e.trim()&&(n[e]=null==t?"":String(t));return{tools:Array.isArray(null==e?void 0:e.tools)?e.tools.map(String):[...r.DEFAULT_AGENT_CONFIG.tools],disallowedTools:Array.isArray(null==e?void 0:e.disallowedTools)?e.disallowedTools.map(String):[...r.DEFAULT_AGENT_CONFIG.disallowedTools],mcpServers:Array.isArray(null==e?void 0:e.mcpServers)?e.mcpServers.map(String):[...r.DEFAULT_AGENT_CONFIG.mcpServers],skills:Array.isArray(null==e?void 0:e.skills)?e.skills.map(String):[...r.DEFAULT_AGENT_CONFIG.skills],model:"string"==typeof(null==e?void 0:e.model)?e.model:r.DEFAULT_AGENT_CONFIG.model,agentTeams:Array.isArray(null==e?void 0:e.agentTeams)?e.agentTeams.map(String):[...r.DEFAULT_AGENT_CONFIG.agentTeams],rules:Array.isArray(null==e?void 0:e.rules)?e.rules.map(String):[...r.DEFAULT_AGENT_CONFIG.rules],env:n,effort:"string"==typeof(t=null==e?void 0:e.effort)||"number"==typeof t||null==t?t:r.DEFAULT_AGENT_CONFIG.effort,background:(null==e?void 0:e.background)===!0||r.DEFAULT_AGENT_CONFIG.background,isolation:(null==e?void 0:e.isolation)==="worktree"||(null==e?void 0:e.isolation)==="remote"?e.isolation:"",whentouse:"string"==typeof(null==e?void 0:e.whentouse)?e.whentouse:r.DEFAULT_AGENT_CONFIG.whentouse}}function o(e){var t,n,r,s,o,i,a;return{...e,tools:(null!=(t=e.tools)?t:[]).slice(),disallowedTools:(null!=(n=e.disallowedTools)?n:[]).slice(),mcpServers:(null!=(r=e.mcpServers)?r:[]).slice(),skills:(null!=(s=e.skills)?s:[]).slice(),agentTeams:(null!=(o=e.agentTeams)?o:[]).slice(),rules:(null!=(i=e.rules)?i:[]).slice(),env:{...null!=(a=e.env)?a:{}}}}function i(e,t){return o({...s(e),...t})}async function a(e,r,o){var i,a,l;let c=await (0,t.get)((0,n.buildAgentApiUrl)(e,r,o));return{agentType:"string"==typeof(null==(i=c.agent)?void 0:i.agentType)&&c.agent.agentType.trim()?c.agent.agentType.trim():"string"==typeof(null==(a=c.agent)?void 0:a.name)?c.agent.name.trim():"",config:s(null==(l=c.agent)?void 0:l.config)}}async function l(e,r,s,i){await (0,t.patch)((0,n.buildAgentApiUrl)(e,r,s),{config:o(i)})}},87243,e=>{"use strict";e.s(["useSession",()=>l]);var t=e.i(71645),n=e.i(29250),r=e.i(68499),s=e.i(13354),o=e.i(65934),i=e.i(82136),a=e.i(55227);function l(){let e=(0,o.useAppStore)(e=>e.wsUrl),l=(0,o.useAppStore)(e=>e.apiBase),c=(0,o.useAppStore)(e=>e.agentId),u=(0,t.useCallback)(async t=>{let n=o.useAppStore.getState(),r=n.agentId.trim()||"qihoo";n.setSessionsMeta("加载中…");try{let c=await (0,a.listSessions)(e,l,r),u=c.sessions||[],d=null!=c.agent?String(c.agent):r;if(n.setBrandAgent(d),n.setLastSessions(u,"".concat(u.length,"个会话 · agent: ").concat(d)),(null==t?void 0:t.activateFirstIfEmpty)&&!o.useAppStore.getState().sessionId.trim()&&u.length>0){var s,i;let e=null==(i=u[0])||null==(s=i.sessionId)?void 0:s.trim();e&&o.useAppStore.getState().selectSession(e,"history")}}catch(e){n.resetSessions("加载失败: ".concat(e)),n.appendLog("sessions",String(e))}},[e,l]),d=(0,t.useCallback)(async()=>{let t=o.useAppStore.getState(),r=t.agentId.trim()||"qihoo";try{let n=await (0,i.loadAgentConfig)(e,l,r);t.setAgentConfig(n.config)}catch(e){t.resetAgentConfig(),t.appendLog("agent-config","load failed ".concat(e instanceof n.ApiError?e.message:String(e)))}},[e,l]),p=(0,t.useCallback)(async t=>{let r=String(t||"").trim();if(!r)return;let s=o.useAppStore.getState(),i=c.trim()||"qihoo";try{let t=await (0,a.loadSessionOverrides)(e,l,i,r),n=t.overrides&&"object"==typeof t.overrides?t.overrides:{};if("string"==typeof n.model){let e={...s.agentConfig,model:n.model};s.setAgentConfig(e)}}catch(e){s.appendLog("session-overrides","load failed ".concat(e instanceof n.ApiError?e.message||e.status:String(e)))}},[e,l,c]),g=(0,t.useCallback)(async t=>{if(!t||!await (0,r.confirmAlertDialog)({title:"确认删除会话?",description:"将删除磁盘上的 transcript 与相关目录,不可恢复。\n\n".concat(t),confirmText:"删除",cancelText:"取消"}))return!1;let i=o.useAppStore.getState().sessionId.trim()===t,d=c.trim()||"qihoo";try{let n=await (0,a.deleteSession)(e,l,d,t);if(o.useAppStore.getState().appendLog("sessions-delete",n),i){let e=o.useAppStore.getState();e.startDraftSession(),e.resetChat(),e.clearLog()}return await u(),i}catch(e){return e instanceof n.ApiError?(o.useAppStore.getState().appendLog("sessions-delete",{error:!0,status:e.status,body:e.body}),s.appToast.error("删除失败: ".concat(e.message))):(o.useAppStore.getState().appendLog("sessions-delete",String(e)),s.appToast.error("删除请求失败: ".concat(e))),!1}},[e,l,c,u]);return{loadSessions:u,loadAgentConfig:d,loadSessionOverrides:p,deleteSessionById:g,currentAgent:(0,t.useCallback)(()=>o.useAppStore.getState().agentId.trim()||"qihoo",[])}}},97249,e=>{"use strict";e.s(["BASE_PATH",()=>n,"buildAppNavHref",()=>u,"buildSettingsHref",()=>p,"getSettingsRouteByPathname",()=>m,"getSettingsSlugFromSegments",()=>f,"isAgentUrlStoreSyncPending",()=>i,"isSettingsRoutePath",()=>h,"normalizeAppPathname",()=>c,"readAgentFromLocationSearch",()=>s,"replaceRuntimeAgentInUrl",()=>o,"syncRuntimeAgentWithUrl",()=>a],97249);var t=e.i(47167);let n=function(){var e;let n=null==(e=t.default.env.NEXT_PUBLIC_BASE_PATH)?void 0:e.trim();return n&&n.length>0?n.replace(/\/+$/,"")||"":"/app"}(),r="qihoo";function s(){var e,t;let n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:window.location.search;return null!=(t=null==(e=new URLSearchParams(n).get("agent"))?void 0:e.trim())?t:""}function o(e){try{let t=e.trim();if(!t)return;let n=new URL(window.location.href);if(n.searchParams.get("agent")===t)return;n.searchParams.set("agent",t),window.history.replaceState(window.history.state,"","".concat(n.pathname).concat(n.search).concat(n.hash))}catch(e){}}function i(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:s(),n=t.trim();return!!n&&n!==(e.trim()||r)}function a(e,t){try{let n=s(),o=e.trim();if(n){n!==o&&t(n);return}let i=o||r,a=new URL(window.location.href);if(a.searchParams.get("agent")===i)return;a.searchParams.set("agent",i),window.history.replaceState(window.history.state,"","".concat(a.pathname).concat(a.search).concat(a.hash))}catch(e){}}let l="/index.html";function c(e){let t=function(e){let t=g(e);return t.endsWith(l)?t.slice(0,-l.length)||"/":t}(e);return"/"===t?"/":g(t.split("/").map((e,t)=>0!==t&&e&&e.replace(/\.[A-Za-z0-9]+$/,"")||e).join("/"))}function u(e,t,n){var r,s,o,i,a,l;let c=function(e){var t;if(!e||"/"===e)return e;let n="/manage";return!(e===n||e.startsWith("".concat(n,"/")))||e.endsWith("/")||(null!=(t=e.split("/").pop())?t:"").includes(".")?e:"".concat(e,"/")}(function(e,t){let n="/"===e?"/":e.startsWith("/")?e:"/".concat(e);return n}(e)),u=function(e){if(e instanceof URLSearchParams||"string"==typeof e)return new URLSearchParams(e);if(e){let t=new URLSearchParams;return Object.entries(e).forEach(e=>{let[n,r]=e;"string"==typeof r&&r?t.set(n,r):Array.isArray(r)&&r[0]&&t.set(n,r[0])}),t}return new URLSearchParams(window.location.search)}(n),d="/"===e||""===e;if(null==t?void 0:t.ensureAgent){let e=(null!=(s=null!=(r=t.agent)?r:u.get("agent"))?s:"").trim()||"qihoo";u.set("agent",e)}else{let e=(null!=(i=null!=(o=null==t?void 0:t.agent)?o:u.get("agent"))?i:"").trim();e?u.set("agent",e):u.delete("agent")}if(d&&(null==t?void 0:t.preserveSessionId)!==!1){let e=(null!=(l=null!=(a=null==t?void 0:t.sessionId)?a:u.get("sessionId"))?l:"").trim();e?u.set("sessionId",e):u.delete("sessionId")}else u.delete("sessionId");let p=u.toString();return p?"".concat(c,"?").concat(p):c}let d="/manage";function p(e){return"".concat(d,"/").concat(e)}function g(e){return e.replace(/\/+$/,"")||"/"}function f(e){if(!(null==e?void 0:e.length))return null;let t="index.html"===e.at(-1)?e.slice(0,-1):e;return t.length?t.join("/"):null}function m(e,t){let n=c(e);return t.find(e=>g(e.href)===n)}function h(e,t){if(!e)return!1;let n=c(e);return n===d||t.some(e=>{let t=g(e.href);return n===t||n.startsWith("".concat(t,"/"))})}},72234,e=>{e.v(t=>Promise.all(["static/chunks/61676890ad8fe194.js","static/chunks/d504c4e2ebc5319a.js"].map(t=>e.l(t))).then(()=>t(37991)))},58332,e=>{e.v(t=>Promise.all(["static/chunks/950875832bab2141.js","static/chunks/d504c4e2ebc5319a.js"].map(t=>e.l(t))).then(()=>t(19573)))},48583,e=>{e.v(t=>Promise.all(["static/chunks/1ffb3acecdbda566.js","static/chunks/d504c4e2ebc5319a.js"].map(t=>e.l(t))).then(()=>t(39721)))},2578,e=>{e.v(t=>Promise.all(["static/chunks/bcefc2c679f3ada6.js","static/chunks/eba0719a42605421.js","static/chunks/0eeaf05fe8e92617.js"].map(t=>e.l(t))).then(()=>t(31862)))},94065,e=>{e.v(t=>Promise.all(["static/chunks/d3af8988bf25a7de.js","static/chunks/48bc54794d1c3561.js","static/chunks/c1cfc60c17638a73.js","static/chunks/cb4dec27441d471a.js"].map(t=>e.l(t))).then(()=>t(20291)))},34116,e=>{e.v(t=>Promise.all(["static/chunks/0bb72b120dc81a85.js","static/chunks/c1cfc60c17638a73.js","static/chunks/a79654d570ac30eb.js","static/chunks/cb4dec27441d471a.js"].map(t=>e.l(t))).then(()=>t(86404)))},1861,e=>{e.v(t=>Promise.all(["static/chunks/98a41a7efbe71682.js","static/chunks/cb4dec27441d471a.js"].map(t=>e.l(t))).then(()=>t(62849)))}]);
@@ -1 +1 @@
1
- (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,55242,e=>{"use strict";e.s(["AppDialog",()=>l]);var t=e.i(18050),a=e.i(71645),s=e.i(76639),r=e.i(75157);function l(e){let{open:l,onOpenChange:n,title:i,children:c,footer:o,width:d="max-w-3xl",minHeight:p}=e,u=(0,a.useId)();return(0,t.jsx)(s.Dialog,{open:l,onOpenChange:n,children:(0,t.jsxs)(s.DialogContent,{"aria-labelledby":u,className:(0,r.cn)(d,p?"!min-h-[--min-h]":""),style:p?{"--min-h":p}:void 0,children:[(0,t.jsxs)(s.DialogHeader,{children:[(0,t.jsx)(s.DialogTitle,{id:u,children:i}),(0,t.jsx)(s.DialogClose,{"aria-label":"关闭"})]}),(0,t.jsx)(s.DialogBody,{className:"!px-4 !py-3",children:c}),o?(0,t.jsx)("div",{className:"flex flex-shrink-0 justify-end gap-2 border-t border-[var(--ds-border)] bg-[var(--ds-sidebar)] px-4 py-3",children:o}):null]})})}},89530,e=>{"use strict";e.s(["McpManageView",()=>w],89530);var t=e.i(18050),a=e.i(71645),s=e.i(65934),r=e.i(87243),l=e.i(13354),n=e.i(50711),i=e.i(51419),c=e.i(55242),o=e.i(92715),d=e.i(19455),p=e.i(94055),u=e.i(94197);function m(e){let{items:a,saveBusy:s,onToggleStatus:r,onEdit:l,className:n}=e,i=[{key:"name",title:"名称",headerClassName:"text-base",cellClassName:"text-base",render:e=>e.label||e.name},{key:"description",title:"详情",headerClassName:"text-base",cellClassName:"text-base",render:e=>e.description||"-"},{key:"source",title:"来源",headerClassName:"text-base",cellClassName:"text-base",render:()=>"远程"},{key:"status",title:"状态",headerClassName:"text-base",cellClassName:"whitespace-nowrap py-2 align-middle",render:e=>r?(0,t.jsx)("span",{className:"inline-flex items-center justify-end gap-2 text-base text-[var(--ds-text)]",children:(0,t.jsx)(p.AccentSwitch,{checked:!e.disabled,disabled:s,onCheckedChange:t=>{r(e.name,t)},"aria-label":"".concat(e.disabled?"启用":"禁用"," ").concat(e.name)})}):(0,t.jsx)("span",{className:"text-base text-[var(--ds-text)]",children:e.installed?"已安装":"未安装"})},...l?[{key:"actions",title:"操作",headerClassName:"w-[72px] text-base",cellClassName:"w-[72px]",render:e=>(0,t.jsx)("div",{className:"inline-flex justify-end",children:(0,t.jsx)(u.IconTooltipButton,{icon:"Edit",label:"编辑 MCP 配置",ariaLabel:"编辑 ".concat(e.name),disabled:s,onClick:()=>l(e.name)})})}]:[]];return(0,t.jsx)(o.AppTable,{rows:a,columns:i,getRowKey:e=>"mcp:".concat(e.name),className:n})}var x=e.i(36845),b=e.i(53925);function g(e){let{open:a,onOpenChange:s,wsUrl:r,apiBase:l,agent:n}=e;return(0,t.jsx)(b.ResourceImportDialog,{open:a,onOpenChange:s,title:"导入 MCP zip",description:"选择一个 zip 文件并导入到 mcp-runtime。",uploadUrl:(0,x.buildMcpRuntimeImportUrl)(r,l,n),resetKey:n})}var f=e.i(62427);function h(e){return(null!=e.packageId?String(e.packageId).trim():"")||e.id}function v(e){let{open:s,onOpenChange:r,itemId:n,source:i,wsUrl:o,apiBase:p,agent:u,onSaved:m}=e,[x,b]=(0,a.useState)(""),[g,h]=(0,a.useState)(!1),[v,C]=(0,a.useState)(!1),y="remote"===i?"remote":"runtime";(0,a.useEffect)(()=>{if(!s||!n.trim())return;let e=!1;return h(!0),b("加载中…"),(0,f.loadRuntimeMcpItemConfig)(o,p,u,n,y).then(t=>{if(e)return;let a=t.overlay;a&&"object"==typeof a&&!Array.isArray(a)?b(JSON.stringify(a,null,2)):b("{}")}).catch(t=>{e||(l.appToast.error("加载 MCP 配置失败:".concat(t instanceof Error?t.message:String(t))),r(!1))}).finally(()=>{e||h(!1)}),()=>{e=!0}},[s,n,o,p,u,y,r]);let S=(0,a.useCallback)(async()=>{let e;if(!n.trim())return;let t=x.trim();try{e=t?JSON.parse(t):{}}catch(e){l.appToast.error("JSON 解析失败:".concat(e instanceof Error?e.message:String(e)));return}if(!e||"object"!=typeof e||Array.isArray(e))return void l.appToast.error("配置必须是 JSON 对象");if("mcpServers"in e&&null!=e.mcpServers)return void l.appToast.error("请填写标准 server 配置(command/args/env),不要嵌套 mcpServers");let a=0===Object.keys(e).length;C(!0);try{a?await (0,f.clearRuntimeMcpItemConfig)(o,p,u,n,y):await (0,f.saveRuntimeMcpItemConfig)(o,p,u,n,y,e),l.appToast.success("MCP 配置已保存"),r(!1),null==m||m()}catch(e){l.appToast.error("保存失败:".concat(e instanceof Error?e.message:String(e)))}finally{C(!1)}},[n,x,o,p,u,y,r,m]);return(0,t.jsx)(c.AppDialog,{open:s,onOpenChange:r,title:"编辑 MCP 配置 · ".concat(n),width:"max-w-4xl",minHeight:"420px",footer:(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(d.Button,{type:"button",variant:"plain-outline",size:"lg",disabled:v,onClick:()=>r(!1),children:"取消"}),(0,t.jsx)(d.Button,{type:"button",size:"lg",disabled:v||g,onClick:()=>void S(),children:"保存"})]}),children:(0,t.jsx)("textarea",{className:"focus-visible:ring-[var(--ds-accent)]/30 min-h-[320px] w-full resize-y rounded-md border border-[var(--ds-border)] bg-[var(--ds-bg)] p-3 font-mono text-sm leading-6 text-[var(--ds-text)] outline-none focus-visible:ring-2",spellCheck:!1,value:x,disabled:g,onChange:e=>b(e.target.value)})})}var C=e.i(68499),y=e.i(72064),S=e.i(56708);let j=[{value:"basic",label:"本地MCP"},{value:"installed",label:"远程MCP"}];function w(){let e=(0,s.useAppStore)(e=>e.wsUrl),x=(0,s.useAppStore)(e=>e.apiBase),b=(0,s.useAppStore)(e=>e.agentConfig),w=(0,s.useAppStore)(e=>e.setAgentConfig),{currentAgent:N,loadAgentConfig:k}=(0,r.useSession)(),M=(0,n.usePersistAgentConfigField)("mcpServers"),T=b.mcpServers,A=(0,a.useMemo)(()=>[...T].sort().join("\0"),[T]),[O,P]=(0,a.useState)([]),[B,I]=(0,a.useState)([]),[E,R]=(0,a.useState)(!1),[J,z]=(0,a.useState)(!1),[D,U]=(0,a.useState)("basic"),[K,F]=(0,a.useState)(!1),[H,L]=(0,a.useState)(!1),[V,_]=(0,a.useState)(""),[q,G]=(0,a.useState)(!1),[Q,W]=(0,a.useState)(""),[X,Y]=(0,a.useState)(),[Z,$]=(0,a.useState)(!1);(0,a.useEffect)(()=>{k()},[k]);let ee=(0,a.useCallback)(async(e,t)=>{z(!0);try{await M(e,{silent:t})}finally{z(!1)}},[M]),et=(0,a.useCallback)(e=>O.find(t=>t.id===e),[O]),ea=(0,a.useCallback)(e=>{let t=et(e);W(e),Y(null==t?void 0:t.source),$(!0)},[et]),es=(0,a.useCallback)(async()=>{P([]),R(!0);try{var t;let a=await (0,f.listMcpServers)(e,x,N());P((null!=(t=a.servers)?t:[]).map(e=>{var t,a,s;return{...e,id:e.name,label:e.name+(e.disabled?"(已禁用)":""),description:null!=(a=null!=(t=e.description)?t:e.source)?a:"",source:null!=(s=e.source)?s:"",installed:!!e.installed,packageId:e.packageId}}))}catch(e){P([]),l.appToast.error("加载失败:".concat(e instanceof Error?e.message:String(e)))}finally{R(!1)}},[e,x,N]),er=(0,a.useCallback)(async t=>{var a;let s=et(t),r=null!=(a=null==s?void 0:s.source)?a:"";if("runtime"!==r&&"remote"!==r)return void l.appToast.error("基础MCP不可删除");if(await (0,C.confirmAlertDialog)({title:"确认删除 MCP?",description:"服务器名:".concat(t),confirmText:"删除",cancelText:"取消"}))try{if("remote"===r){let a=await (0,f.loadRemoteMcpJson)(e,x,N()),s={};try{s=JSON.parse(String(a.content||"{}"))}catch(e){s={mcpServers:{}}}(!s.mcpServers||Array.isArray(s.mcpServers)||"object"!=typeof s.mcpServers)&&(s.mcpServers={}),delete s.mcpServers[t],await (0,f.saveRemoteMcpJson)(e,x,N(),JSON.stringify(s,null,2))}else{let a=s?h(s):t;await (0,f.deleteRuntimeMcp)(e,x,N(),a)}let a=T.filter(e=>e!==t);I(e=>e.filter(e=>e!==t)),w({...b,mcpServers:a}),await ee(a,!0),await es()}catch(e){l.appToast.error("删除失败:".concat(e instanceof Error?e.message:String(e)))}},[et,e,x,N,T,b,w,ee,es]);(0,a.useEffect)(()=>{("basic"===D||"installed"===D)&&es()},[D,es]),(0,a.useEffect)(()=>{("basic"===D||"installed"===D)&&I([...T])},[D,T,A]);let el=(0,a.useCallback)(async e=>{let t=[...new Set(e)].sort();w({...b,mcpServers:t}),await ee(t,!0)},[b,w,ee]),en=(0,a.useCallback)(async(e,t)=>{let a=t?[...new Set([...B,e])]:B.filter(t=>t!==e);I(a);try{await el(a)}catch(e){I(B),l.appToast.error("切换启用状态失败: ".concat(e))}},[B,el]),ei=(0,a.useMemo)(()=>O.filter(e=>"remote"!==e.source).slice().sort((e,t)=>e.id.localeCompare(t.id)),[O]),ec=(0,a.useMemo)(()=>O.filter(e=>"remote"===e.source).slice().sort((e,t)=>{let a=+!B.includes(e.id),s=+!B.includes(t.id);return a!==s?a-s:e.id.localeCompare(t.id)}).map(e=>({...e,name:e.id,label:e.label,description:e.description||"",installed:!0,source:e.source,disabled:!B.includes(e.id)})),[O,B]),eo=(0,a.useCallback)(t=>{window.open((0,f.exportRuntimeMcpUrl)(e,x,N(),h(t)),"_blank","noopener")},[e,x,N]),ed=(0,a.useCallback)(async(e,t)=>{let a=t?[...new Set([...B,e])]:B.filter(t=>t!==e);I(a);try{await el(a)}catch(e){I(B),l.appToast.error("切换启用状态失败: ".concat(e))}},[B,el]),ep=(0,a.useCallback)(()=>{L(!0),_(""),(0,f.loadRemoteMcpJson)(e,x,N()).then(e=>{_("string"==typeof e.content?e.content:'{\n "mcpServers": {}\n}\n')}).catch(e=>{l.appToast.error("加载 mcp.json 失败:".concat(e instanceof Error?e.message:String(e))),L(!1)})},[e,x,N]),eu=(0,a.useCallback)(async()=>{let t=function(e){let t,a=e.trim();if(!a)return"请输入 JSON 配置内容";try{t=JSON.parse(a)}catch(e){return"JSON 解析失败:".concat(e instanceof Error?e.message:String(e))}if(!t||"object"!=typeof t||Array.isArray(t))return"JSON 根节点必须是对象";let s=t.mcpServers;if(!s||"object"!=typeof s||Array.isArray(s))return"mcpServers 不能为空,且需包含至少一个 server";let r=Object.keys(s).filter(e=>e.trim());if(!r.length)return"mcpServers 不能为空,且需包含至少一个 server";let l=new Set;for(let e of r){let t=e.trim();!t||l.has(t)||l.add(t)}return l.size?null:"未解析到有效的 server 名称"}(V);if(t)return void l.appToast.error(t);G(!0);try{await (0,f.saveRemoteMcpJson)(e,x,N(),V.trim()),l.appToast.success("已保存全局 mcp.json。"),L(!1),await es()}catch(e){l.appToast.error("保存 mcp.json 失败:".concat(e instanceof Error?e.message:String(e)))}finally{G(!1)}},[e,x,N,V,es]),em=[{key:"name",title:"名称",headerClassName:"text-base text-[var(--ds-muted)]",cellClassName:"text-base text-[var(--ds-text)]",render:e=>e.label},{key:"description",title:"详情",headerClassName:"text-base text-[var(--ds-muted)]",cellClassName:"text-base text-[var(--ds-text)]",render:e=>e.description||"-"},{key:"enabled",title:"启用/未启用",headerClassName:"w-14 w-[112px] text-right text-base text-[var(--ds-muted)]",cellClassName:"w-[112px] py-2 text-right align-middle",render:e=>(0,t.jsx)("span",{className:"inline-flex justify-end",children:(0,t.jsx)(p.AccentSwitch,{checked:B.includes(e.id),disabled:J,onCheckedChange:t=>{en(e.id,t)},"aria-label":"选择 ".concat(e.label)})})},{key:"actions",title:"操作",headerClassName:"w-[168px] text-base text-[var(--ds-muted)]",cellClassName:"w-[168px]",render:e=>{var a;let s=null!=(a=e.source)?a:"",r="runtime"===s,l="runtime"===s||"remote"===s;return(0,t.jsxs)("div",{className:"inline-flex items-center justify-end gap-1",children:[(0,t.jsx)(u.IconTooltipButton,{icon:"Download",label:r?"导出":"仅 runtime MCP 支持导出",ariaLabel:"导出 ".concat(e.label),disabled:J||!r,onClick:()=>eo(e)}),(0,t.jsx)(u.IconTooltipButton,{icon:"Edit",label:"编辑 MCP 配置",ariaLabel:"编辑 ".concat(e.label),disabled:J,onClick:()=>ea(e.id)}),(0,t.jsx)(u.IconTooltipButton,{icon:"Trash2",label:l?"删除":"基础MCP不可删除",tone:"danger",ariaLabel:"删除 ".concat(e.label),disabled:J||!l,onClick:()=>{er(e.id)},iconClassName:"text-red-500"})]})}}];return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(S.ManageChromeHeaderActions,{children:(0,t.jsxs)("div",{className:"flex flex-wrap items-center",children:[(0,t.jsxs)(d.Button,{type:"button",variant:"plain-outline",size:"lg",onClick:ep,className:"mr-[12px]",children:[(0,t.jsx)(y.default,{name:"Edit",size:16,className:"align-middle"}),"编辑全局MCP"]}),(0,t.jsxs)(d.Button,{id:"btnAgentImportMcp",type:"button",variant:"plain-outline",size:"lg",className:"inline-flex items-center justify-center gap-1.5",onClick:()=>F(!0),children:[(0,t.jsx)(y.default,{name:"Import",size:16,className:"align-middle"}),"导入MCP"]})]})}),(0,t.jsxs)(i.AppTabs,{tabs:j,value:D,listVariant:"line",onChange:e=>U(e),children:[(0,t.jsx)(i.AppTabsPanel,{value:"basic",children:(0,t.jsx)("div",{className:"flex min-h-0 flex-1 flex-col gap-3",children:(0,t.jsx)("div",{className:"min-h-0",children:E?(0,t.jsx)("p",{className:"px-3 py-6 text-center text-base text-[var(--ds-muted)]",children:"加载中…"}):(0,t.jsx)(o.AppTable,{rows:ei,columns:em,getRowKey:e=>e.id})})})}),(0,t.jsx)(i.AppTabsPanel,{value:"installed",children:(0,t.jsx)(m,{items:ec,saveBusy:J,onToggleStatus:ed,onEdit:ea})})]}),(0,t.jsx)(g,{open:K,onOpenChange:e=>{F(e),e||es()},wsUrl:e,apiBase:x,agent:N()}),(0,t.jsx)(v,{open:Z,onOpenChange:$,itemId:Q,source:X,wsUrl:e,apiBase:x,agent:N(),onSaved:()=>{es(),ee(b.mcpServers,!0)}}),(0,t.jsx)(c.AppDialog,{open:H,onOpenChange:L,title:"编辑全局MCP",width:"max-w-4xl",minHeight:"420px",footer:(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(d.Button,{type:"button",variant:"plain-outline",size:"lg",disabled:q,onClick:()=>L(!1),children:"取消"}),(0,t.jsx)(d.Button,{type:"button",size:"lg",disabled:q,onClick:()=>void eu(),children:"保存"})]}),children:(0,t.jsx)("textarea",{className:"focus-visible:ring-[var(--ds-accent)]/30 min-h-[320px] w-full resize-y rounded-md border border-[var(--ds-border)] bg-[var(--ds-bg)] p-3 text-base leading-6 text-[var(--ds-text)] outline-none focus-visible:ring-2",spellCheck:!1,value:V,onChange:e=>_(e.target.value)})})]})}}]);
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,55242,e=>{"use strict";e.s(["AppDialog",()=>l]);var t=e.i(18050),a=e.i(71645),s=e.i(76639),r=e.i(75157);function l(e){let{open:l,onOpenChange:n,title:i,children:c,footer:o,width:d="max-w-3xl",minHeight:p}=e,u=(0,a.useId)();return(0,t.jsx)(s.Dialog,{open:l,onOpenChange:n,children:(0,t.jsxs)(s.DialogContent,{"aria-labelledby":u,className:(0,r.cn)(d,p?"!min-h-[--min-h]":""),style:p?{"--min-h":p}:void 0,children:[(0,t.jsxs)(s.DialogHeader,{children:[(0,t.jsx)(s.DialogTitle,{id:u,children:i}),(0,t.jsx)(s.DialogClose,{"aria-label":"关闭"})]}),(0,t.jsx)(s.DialogBody,{className:"!px-4 !py-3",children:c}),o?(0,t.jsx)("div",{className:"flex flex-shrink-0 justify-end gap-2 border-t border-[var(--ds-border)] bg-[var(--ds-sidebar)] px-4 py-3",children:o}):null]})})}},37991,e=>{"use strict";e.s(["McpManageView",()=>w],37991);var t=e.i(18050),a=e.i(71645),s=e.i(65934),r=e.i(87243),l=e.i(13354),n=e.i(50711),i=e.i(51419),c=e.i(55242),o=e.i(92715),d=e.i(19455),p=e.i(94055),u=e.i(94197);function m(e){let{items:a,saveBusy:s,onToggleStatus:r,onEdit:l,className:n}=e,i=[{key:"name",title:"名称",headerClassName:"text-base",cellClassName:"text-base",render:e=>e.label||e.name},{key:"description",title:"详情",headerClassName:"text-base",cellClassName:"text-base",render:e=>e.description||"-"},{key:"source",title:"来源",headerClassName:"text-base",cellClassName:"text-base",render:()=>"远程"},{key:"status",title:"状态",headerClassName:"text-base",cellClassName:"whitespace-nowrap py-2 align-middle",render:e=>r?(0,t.jsx)("span",{className:"inline-flex items-center justify-end gap-2 text-base text-[var(--ds-text)]",children:(0,t.jsx)(p.AccentSwitch,{checked:!e.disabled,disabled:s,onCheckedChange:t=>{r(e.name,t)},"aria-label":"".concat(e.disabled?"启用":"禁用"," ").concat(e.name)})}):(0,t.jsx)("span",{className:"text-base text-[var(--ds-text)]",children:e.installed?"已安装":"未安装"})},...l?[{key:"actions",title:"操作",headerClassName:"w-[72px] text-base",cellClassName:"w-[72px]",render:e=>(0,t.jsx)("div",{className:"inline-flex justify-end",children:(0,t.jsx)(u.IconTooltipButton,{icon:"Edit",label:"编辑 MCP 配置",ariaLabel:"编辑 ".concat(e.name),disabled:s,onClick:()=>l(e.name)})})}]:[]];return(0,t.jsx)(o.AppTable,{rows:a,columns:i,getRowKey:e=>"mcp:".concat(e.name),className:n})}var x=e.i(36845),b=e.i(53925);function g(e){let{open:a,onOpenChange:s,wsUrl:r,apiBase:l,agent:n}=e;return(0,t.jsx)(b.ResourceImportDialog,{open:a,onOpenChange:s,title:"导入 MCP zip",description:"选择一个 zip 文件并导入到 mcp-runtime。",uploadUrl:(0,x.buildMcpRuntimeImportUrl)(r,l,n),resetKey:n})}var f=e.i(62427);function h(e){return(null!=e.packageId?String(e.packageId).trim():"")||e.id}function v(e){let{open:s,onOpenChange:r,itemId:n,source:i,wsUrl:o,apiBase:p,agent:u,onSaved:m}=e,[x,b]=(0,a.useState)(""),[g,h]=(0,a.useState)(!1),[v,C]=(0,a.useState)(!1),y="remote"===i?"remote":"runtime";(0,a.useEffect)(()=>{if(!s||!n.trim())return;let e=!1;return h(!0),b("加载中…"),(0,f.loadRuntimeMcpItemConfig)(o,p,u,n,y).then(t=>{if(e)return;let a=t.overlay;a&&"object"==typeof a&&!Array.isArray(a)?b(JSON.stringify(a,null,2)):b("{}")}).catch(t=>{e||(l.appToast.error("加载 MCP 配置失败:".concat(t instanceof Error?t.message:String(t))),r(!1))}).finally(()=>{e||h(!1)}),()=>{e=!0}},[s,n,o,p,u,y,r]);let S=(0,a.useCallback)(async()=>{let e;if(!n.trim())return;let t=x.trim();try{e=t?JSON.parse(t):{}}catch(e){l.appToast.error("JSON 解析失败:".concat(e instanceof Error?e.message:String(e)));return}if(!e||"object"!=typeof e||Array.isArray(e))return void l.appToast.error("配置必须是 JSON 对象");if("mcpServers"in e&&null!=e.mcpServers)return void l.appToast.error("请填写标准 server 配置(command/args/env),不要嵌套 mcpServers");let a=0===Object.keys(e).length;C(!0);try{a?await (0,f.clearRuntimeMcpItemConfig)(o,p,u,n,y):await (0,f.saveRuntimeMcpItemConfig)(o,p,u,n,y,e),l.appToast.success("MCP 配置已保存"),r(!1),null==m||m()}catch(e){l.appToast.error("保存失败:".concat(e instanceof Error?e.message:String(e)))}finally{C(!1)}},[n,x,o,p,u,y,r,m]);return(0,t.jsx)(c.AppDialog,{open:s,onOpenChange:r,title:"编辑 MCP 配置 · ".concat(n),width:"max-w-4xl",minHeight:"420px",footer:(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(d.Button,{type:"button",variant:"plain-outline",size:"lg",disabled:v,onClick:()=>r(!1),children:"取消"}),(0,t.jsx)(d.Button,{type:"button",size:"lg",disabled:v||g,onClick:()=>void S(),children:"保存"})]}),children:(0,t.jsx)("textarea",{className:"focus-visible:ring-[var(--ds-accent)]/30 min-h-[320px] w-full resize-y rounded-md border border-[var(--ds-border)] bg-[var(--ds-bg)] p-3 font-mono text-sm leading-6 text-[var(--ds-text)] outline-none focus-visible:ring-2",spellCheck:!1,value:x,disabled:g,onChange:e=>b(e.target.value)})})}var C=e.i(68499),y=e.i(72064),S=e.i(56708);let j=[{value:"basic",label:"本地MCP"},{value:"installed",label:"远程MCP"}];function w(){let e=(0,s.useAppStore)(e=>e.wsUrl),x=(0,s.useAppStore)(e=>e.apiBase),b=(0,s.useAppStore)(e=>e.agentConfig),w=(0,s.useAppStore)(e=>e.setAgentConfig),{currentAgent:N,loadAgentConfig:k}=(0,r.useSession)(),M=(0,n.usePersistAgentConfigField)("mcpServers"),T=b.mcpServers,A=(0,a.useMemo)(()=>[...T].sort().join("\0"),[T]),[O,P]=(0,a.useState)([]),[B,I]=(0,a.useState)([]),[E,R]=(0,a.useState)(!1),[J,z]=(0,a.useState)(!1),[D,U]=(0,a.useState)("basic"),[K,F]=(0,a.useState)(!1),[H,L]=(0,a.useState)(!1),[V,_]=(0,a.useState)(""),[q,G]=(0,a.useState)(!1),[Q,W]=(0,a.useState)(""),[X,Y]=(0,a.useState)(),[Z,$]=(0,a.useState)(!1);(0,a.useEffect)(()=>{k()},[k]);let ee=(0,a.useCallback)(async(e,t)=>{z(!0);try{await M(e,{silent:t})}finally{z(!1)}},[M]),et=(0,a.useCallback)(e=>O.find(t=>t.id===e),[O]),ea=(0,a.useCallback)(e=>{let t=et(e);W(e),Y(null==t?void 0:t.source),$(!0)},[et]),es=(0,a.useCallback)(async()=>{P([]),R(!0);try{var t;let a=await (0,f.listMcpServers)(e,x,N());P((null!=(t=a.servers)?t:[]).map(e=>{var t,a,s;return{...e,id:e.name,label:e.name+(e.disabled?"(已禁用)":""),description:null!=(a=null!=(t=e.description)?t:e.source)?a:"",source:null!=(s=e.source)?s:"",installed:!!e.installed,packageId:e.packageId}}))}catch(e){P([]),l.appToast.error("加载失败:".concat(e instanceof Error?e.message:String(e)))}finally{R(!1)}},[e,x,N]),er=(0,a.useCallback)(async t=>{var a;let s=et(t),r=null!=(a=null==s?void 0:s.source)?a:"";if("runtime"!==r&&"remote"!==r)return void l.appToast.error("基础MCP不可删除");if(await (0,C.confirmAlertDialog)({title:"确认删除 MCP?",description:"服务器名:".concat(t),confirmText:"删除",cancelText:"取消"}))try{if("remote"===r){let a=await (0,f.loadRemoteMcpJson)(e,x,N()),s={};try{s=JSON.parse(String(a.content||"{}"))}catch(e){s={mcpServers:{}}}(!s.mcpServers||Array.isArray(s.mcpServers)||"object"!=typeof s.mcpServers)&&(s.mcpServers={}),delete s.mcpServers[t],await (0,f.saveRemoteMcpJson)(e,x,N(),JSON.stringify(s,null,2))}else{let a=s?h(s):t;await (0,f.deleteRuntimeMcp)(e,x,N(),a)}let a=T.filter(e=>e!==t);I(e=>e.filter(e=>e!==t)),w({...b,mcpServers:a}),await ee(a,!0),await es()}catch(e){l.appToast.error("删除失败:".concat(e instanceof Error?e.message:String(e)))}},[et,e,x,N,T,b,w,ee,es]);(0,a.useEffect)(()=>{("basic"===D||"installed"===D)&&es()},[D,es]),(0,a.useEffect)(()=>{("basic"===D||"installed"===D)&&I([...T])},[D,T,A]);let el=(0,a.useCallback)(async e=>{let t=[...new Set(e)].sort();w({...b,mcpServers:t}),await ee(t,!0)},[b,w,ee]),en=(0,a.useCallback)(async(e,t)=>{let a=t?[...new Set([...B,e])]:B.filter(t=>t!==e);I(a);try{await el(a)}catch(e){I(B),l.appToast.error("切换启用状态失败: ".concat(e))}},[B,el]),ei=(0,a.useMemo)(()=>O.filter(e=>"remote"!==e.source).slice().sort((e,t)=>e.id.localeCompare(t.id)),[O]),ec=(0,a.useMemo)(()=>O.filter(e=>"remote"===e.source).slice().sort((e,t)=>{let a=+!B.includes(e.id),s=+!B.includes(t.id);return a!==s?a-s:e.id.localeCompare(t.id)}).map(e=>({...e,name:e.id,label:e.label,description:e.description||"",installed:!0,source:e.source,disabled:!B.includes(e.id)})),[O,B]),eo=(0,a.useCallback)(t=>{window.open((0,f.exportRuntimeMcpUrl)(e,x,N(),h(t)),"_blank","noopener")},[e,x,N]),ed=(0,a.useCallback)(async(e,t)=>{let a=t?[...new Set([...B,e])]:B.filter(t=>t!==e);I(a);try{await el(a)}catch(e){I(B),l.appToast.error("切换启用状态失败: ".concat(e))}},[B,el]),ep=(0,a.useCallback)(()=>{L(!0),_(""),(0,f.loadRemoteMcpJson)(e,x,N()).then(e=>{_("string"==typeof e.content?e.content:'{\n "mcpServers": {}\n}\n')}).catch(e=>{l.appToast.error("加载 mcp.json 失败:".concat(e instanceof Error?e.message:String(e))),L(!1)})},[e,x,N]),eu=(0,a.useCallback)(async()=>{let t=function(e){let t,a=e.trim();if(!a)return"请输入 JSON 配置内容";try{t=JSON.parse(a)}catch(e){return"JSON 解析失败:".concat(e instanceof Error?e.message:String(e))}if(!t||"object"!=typeof t||Array.isArray(t))return"JSON 根节点必须是对象";let s=t.mcpServers;if(!s||"object"!=typeof s||Array.isArray(s))return"mcpServers 不能为空,且需包含至少一个 server";let r=Object.keys(s).filter(e=>e.trim());if(!r.length)return"mcpServers 不能为空,且需包含至少一个 server";let l=new Set;for(let e of r){let t=e.trim();!t||l.has(t)||l.add(t)}return l.size?null:"未解析到有效的 server 名称"}(V);if(t)return void l.appToast.error(t);G(!0);try{await (0,f.saveRemoteMcpJson)(e,x,N(),V.trim()),l.appToast.success("已保存全局 mcp.json。"),L(!1),await es()}catch(e){l.appToast.error("保存 mcp.json 失败:".concat(e instanceof Error?e.message:String(e)))}finally{G(!1)}},[e,x,N,V,es]),em=[{key:"name",title:"名称",headerClassName:"text-base text-[var(--ds-muted)]",cellClassName:"text-base text-[var(--ds-text)]",render:e=>e.label},{key:"description",title:"详情",headerClassName:"text-base text-[var(--ds-muted)]",cellClassName:"text-base text-[var(--ds-text)]",render:e=>e.description||"-"},{key:"enabled",title:"启用/未启用",headerClassName:"w-14 w-[112px] text-right text-base text-[var(--ds-muted)]",cellClassName:"w-[112px] py-2 text-right align-middle",render:e=>(0,t.jsx)("span",{className:"inline-flex justify-end",children:(0,t.jsx)(p.AccentSwitch,{checked:B.includes(e.id),disabled:J,onCheckedChange:t=>{en(e.id,t)},"aria-label":"选择 ".concat(e.label)})})},{key:"actions",title:"操作",headerClassName:"w-[168px] text-base text-[var(--ds-muted)]",cellClassName:"w-[168px]",render:e=>{var a;let s=null!=(a=e.source)?a:"",r="runtime"===s,l="runtime"===s||"remote"===s;return(0,t.jsxs)("div",{className:"inline-flex items-center justify-end gap-1",children:[(0,t.jsx)(u.IconTooltipButton,{icon:"Download",label:r?"导出":"仅 runtime MCP 支持导出",ariaLabel:"导出 ".concat(e.label),disabled:J||!r,onClick:()=>eo(e)}),(0,t.jsx)(u.IconTooltipButton,{icon:"Edit",label:"编辑 MCP 配置",ariaLabel:"编辑 ".concat(e.label),disabled:J,onClick:()=>ea(e.id)}),(0,t.jsx)(u.IconTooltipButton,{icon:"Trash2",label:l?"删除":"基础MCP不可删除",tone:"danger",ariaLabel:"删除 ".concat(e.label),disabled:J||!l,onClick:()=>{er(e.id)},iconClassName:"text-red-500"})]})}}];return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(S.ManageChromeHeaderActions,{children:(0,t.jsxs)("div",{className:"flex flex-wrap items-center",children:[(0,t.jsxs)(d.Button,{type:"button",variant:"plain-outline",size:"lg",onClick:ep,className:"mr-[12px]",children:[(0,t.jsx)(y.default,{name:"Edit",size:16,className:"align-middle"}),"编辑全局MCP"]}),(0,t.jsxs)(d.Button,{id:"btnAgentImportMcp",type:"button",variant:"plain-outline",size:"lg",className:"inline-flex items-center justify-center gap-1.5",onClick:()=>F(!0),children:[(0,t.jsx)(y.default,{name:"Import",size:16,className:"align-middle"}),"导入MCP"]})]})}),(0,t.jsxs)(i.AppTabs,{tabs:j,value:D,listVariant:"line",onChange:e=>U(e),children:[(0,t.jsx)(i.AppTabsPanel,{value:"basic",children:(0,t.jsx)("div",{className:"flex min-h-0 flex-1 flex-col gap-3",children:(0,t.jsx)("div",{className:"min-h-0",children:E?(0,t.jsx)("p",{className:"px-3 py-6 text-center text-base text-[var(--ds-muted)]",children:"加载中…"}):(0,t.jsx)(o.AppTable,{rows:ei,columns:em,getRowKey:e=>e.id})})})}),(0,t.jsx)(i.AppTabsPanel,{value:"installed",children:(0,t.jsx)(m,{items:ec,saveBusy:J,onToggleStatus:ed,onEdit:ea})})]}),(0,t.jsx)(g,{open:K,onOpenChange:e=>{F(e),e||es()},wsUrl:e,apiBase:x,agent:N()}),(0,t.jsx)(v,{open:Z,onOpenChange:$,itemId:Q,source:X,wsUrl:e,apiBase:x,agent:N(),onSaved:()=>{es(),ee(b.mcpServers,!0)}}),(0,t.jsx)(c.AppDialog,{open:H,onOpenChange:L,title:"编辑全局MCP",width:"max-w-4xl",minHeight:"420px",footer:(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(d.Button,{type:"button",variant:"plain-outline",size:"lg",disabled:q,onClick:()=>L(!1),children:"取消"}),(0,t.jsx)(d.Button,{type:"button",size:"lg",disabled:q,onClick:()=>void eu(),children:"保存"})]}),children:(0,t.jsx)("textarea",{className:"focus-visible:ring-[var(--ds-accent)]/30 min-h-[320px] w-full resize-y rounded-md border border-[var(--ds-border)] bg-[var(--ds-bg)] p-3 text-base leading-6 text-[var(--ds-text)] outline-none focus-visible:ring-2",spellCheck:!1,value:V,onChange:e=>_(e.target.value)})})]})}}]);
@@ -1 +1 @@
1
- (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,28583,e=>{"use strict";e.s(["ToolsManageView",()=>y],28583);var a=e.i(18050),t=e.i(71645),n=e.i(65934),l=e.i(87243),s=e.i(13354),i=e.i(50711),o=e.i(19455),r=e.i(94055),c=e.i(94197),p=e.i(92715);function m(e){let{items:t,saveBusy:n,onToggle:l,onExport:s,onRemove:i,className:o}=e,m=[{key:"name",title:"名称",headerClassName:"text-base",cellClassName:"text-base",render:e=>e.label||e.name},{key:"description",title:"详情",headerClassName:"text-base",cellClassName:"text-base",render:e=>e.description||"-"},{key:"enabled",title:"启用/未启用",headerClassName:"text-base",cellClassName:"whitespace-nowrap text-base text-[var(--ds-text)]",render:e=>(0,a.jsx)("span",{className:"inline-flex items-center gap-2",children:(0,a.jsx)(r.AccentSwitch,{checked:!!e.enabled,disabled:n,onCheckedChange:a=>l(e.name,a),"aria-label":"".concat(e.enabled?"禁用":"启用"," ").concat(e.name)})})},{key:"actions",title:"操作",headerClassName:"w-[128px] text-base",cellClassName:"w-[128px]",render:e=>{let t=!0===e.canManage;return(0,a.jsxs)("div",{className:"inline-flex items-center justify-end gap-1",children:[(0,a.jsx)(c.IconTooltipButton,{icon:"Download",label:t?"导出":"系统内置工具不可导出",ariaLabel:"导出 ".concat(e.label||e.name),disabled:n||!t,onClick:()=>s(e.name)}),(0,a.jsx)(c.IconTooltipButton,{icon:"Trash2",label:t?"删除":"系统内置工具不可删除",tone:"danger",ariaLabel:"删除 ".concat(e.label||e.name),disabled:n||!t,onClick:()=>{i(e.name)}})]})}}];return(0,a.jsx)(p.AppTable,{rows:t,columns:m,getRowKey:e=>"tools:".concat(e.name),className:o})}var d=e.i(36845),u=e.i(53925);function g(e){let{open:t,onOpenChange:n,wsUrl:l,apiBase:s,agent:i}=e;return(0,a.jsx)(u.ResourceImportDialog,{open:t,onOpenChange:n,title:"导入工具 zip",description:"选择一个 zip 文件并导入到 tools-runtime。",uploadUrl:(0,d.buildToolsRuntimeImportUrl)(l,s,i),resetKey:i})}var b=e.i(68499),x=e.i(72064),f=e.i(56708),k=e.i(62427);function C(e){return(null!=e.packageId?String(e.packageId).trim():"")||e.name}function h(e){let a=null!=e.packageId?String(e.packageId).trim():"";return!0===e.deletable&&a.length>0}function y(){let e=(0,n.useAppStore)(e=>e.wsUrl),r=(0,n.useAppStore)(e=>e.apiBase),c=(0,n.useAppStore)(e=>e.agentConfig),p=(0,n.useAppStore)(e=>e.patchAgentConfig),{currentAgent:d,loadAgentConfig:u}=(0,l.useSession)(),y=(0,i.usePersistAgentConfigField)("tools"),N=c.tools,[T,w]=(0,t.useState)([]),[j,S]=(0,t.useState)(!1),[I,v]=(0,t.useState)(!1),[A,B]=(0,t.useState)(!1);(0,t.useEffect)(()=>{u()},[u]);let R=(0,t.useCallback)(async(e,a)=>{v(!0);try{await y(e,{silent:a})}finally{v(!1)}},[y]),U=(0,t.useCallback)(async()=>{w([]),S(!0);try{var a;let t=await (0,k.listInstalledTools)(e,r,d());w(null!=(a=t.tools)?a:[])}catch(e){w([]),s.appToast.error("加载失败:".concat(e instanceof Error?e.message:String(e)))}finally{S(!1)}},[e,r,d]);(0,t.useEffect)(()=>{U()},[U]);let E=(0,t.useCallback)(e=>T.find(a=>a.name===e),[T]),M=(0,t.useMemo)(()=>T.slice().sort((e,a)=>e.name.localeCompare(a.name)).map(e=>(function(e,a){var t,n;let l=null!=e.packageName?String(e.packageName).trim():"";return{name:e.name,label:(e.displayName&&e.displayName!==e.name?"".concat(e.displayName," · "):"")+e.name+("system"===(n=e.layer)?" [系统]":"agent"===n?" [Agent]":""),description:null!=(t=e.searchHint)?t:"",enabled:a,packageId:l,canManage:h({deletable:e.deletable,packageId:l})}})(e,N.includes(e.name))),[T,N]),z=(0,t.useCallback)(async a=>{let t=E(a);if(!t||!h({deletable:t.deletable,packageId:t.packageName}))return void s.appToast.error("系统内置工具不可删除");if(await (0,b.confirmAlertDialog)({title:"确认删除工具包?",description:"工具名:".concat(a),confirmText:"删除",cancelText:"取消"}))try{await (0,k.deleteRuntimeTool)(e,r,d(),C({packageId:t.packageName,name:t.name}));let n=N.filter(e=>e!==a);p({tools:n}),await R(n,!0),await U()}catch(e){s.appToast.error("删除失败:".concat(e instanceof Error?e.message:String(e)))}},[E,e,r,d,N,p,R,U]),K=(0,t.useCallback)(a=>{let t=E(a);if(!t||!h({deletable:t.deletable,packageId:t.packageName}))return void s.appToast.error("系统内置工具不可导出");window.open((0,k.exportRuntimeToolUrl)(e,r,d(),C({packageId:t.packageName,name:t.name})),"_blank","noopener")},[E,e,r,d]),O=(0,t.useCallback)((e,a)=>{let t=a?[...new Set([...N,e])].sort():N.filter(a=>a!==e).sort();p({tools:t}),R(t,!0)},[N,p,R]);return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(f.ManageChromeHeaderActions,{children:(0,a.jsxs)(o.Button,{id:"btnAgentPickerToolImport",type:"button",variant:"plain-outline",size:"lg",className:"inline-flex items-center justify-center gap-1.5",onClick:()=>B(!0),children:[(0,a.jsx)(x.default,{name:"Import",size:16,className:"align-middle"}),"导入自定义工具"]})}),j?(0,a.jsx)("p",{className:"px-3 py-6 text-center text-base text-[var(--ds-muted)]",children:"加载中…"}):(0,a.jsx)(m,{items:M,saveBusy:I,onToggle:O,onExport:K,onRemove:z}),(0,a.jsx)(g,{open:A,onOpenChange:e=>{B(e),e||U()},wsUrl:e,apiBase:r,agent:d()})]})}}]);
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,19573,e=>{"use strict";e.s(["ToolsManageView",()=>y],19573);var a=e.i(18050),t=e.i(71645),n=e.i(65934),l=e.i(87243),s=e.i(13354),i=e.i(50711),o=e.i(19455),r=e.i(94055),c=e.i(94197),p=e.i(92715);function m(e){let{items:t,saveBusy:n,onToggle:l,onExport:s,onRemove:i,className:o}=e,m=[{key:"name",title:"名称",headerClassName:"text-base",cellClassName:"text-base",render:e=>e.label||e.name},{key:"description",title:"详情",headerClassName:"text-base",cellClassName:"text-base",render:e=>e.description||"-"},{key:"enabled",title:"启用/未启用",headerClassName:"text-base",cellClassName:"whitespace-nowrap text-base text-[var(--ds-text)]",render:e=>(0,a.jsx)("span",{className:"inline-flex items-center gap-2",children:(0,a.jsx)(r.AccentSwitch,{checked:!!e.enabled,disabled:n,onCheckedChange:a=>l(e.name,a),"aria-label":"".concat(e.enabled?"禁用":"启用"," ").concat(e.name)})})},{key:"actions",title:"操作",headerClassName:"w-[128px] text-base",cellClassName:"w-[128px]",render:e=>{let t=!0===e.canManage;return(0,a.jsxs)("div",{className:"inline-flex items-center justify-end gap-1",children:[(0,a.jsx)(c.IconTooltipButton,{icon:"Download",label:t?"导出":"系统内置工具不可导出",ariaLabel:"导出 ".concat(e.label||e.name),disabled:n||!t,onClick:()=>s(e.name)}),(0,a.jsx)(c.IconTooltipButton,{icon:"Trash2",label:t?"删除":"系统内置工具不可删除",tone:"danger",ariaLabel:"删除 ".concat(e.label||e.name),disabled:n||!t,onClick:()=>{i(e.name)}})]})}}];return(0,a.jsx)(p.AppTable,{rows:t,columns:m,getRowKey:e=>"tools:".concat(e.name),className:o})}var d=e.i(36845),u=e.i(53925);function g(e){let{open:t,onOpenChange:n,wsUrl:l,apiBase:s,agent:i}=e;return(0,a.jsx)(u.ResourceImportDialog,{open:t,onOpenChange:n,title:"导入工具 zip",description:"选择一个 zip 文件并导入到 tools-runtime。",uploadUrl:(0,d.buildToolsRuntimeImportUrl)(l,s,i),resetKey:i})}var b=e.i(68499),x=e.i(72064),f=e.i(56708),k=e.i(62427);function C(e){return(null!=e.packageId?String(e.packageId).trim():"")||e.name}function h(e){let a=null!=e.packageId?String(e.packageId).trim():"";return!0===e.deletable&&a.length>0}function y(){let e=(0,n.useAppStore)(e=>e.wsUrl),r=(0,n.useAppStore)(e=>e.apiBase),c=(0,n.useAppStore)(e=>e.agentConfig),p=(0,n.useAppStore)(e=>e.patchAgentConfig),{currentAgent:d,loadAgentConfig:u}=(0,l.useSession)(),y=(0,i.usePersistAgentConfigField)("tools"),N=c.tools,[T,w]=(0,t.useState)([]),[j,S]=(0,t.useState)(!1),[I,v]=(0,t.useState)(!1),[A,B]=(0,t.useState)(!1);(0,t.useEffect)(()=>{u()},[u]);let R=(0,t.useCallback)(async(e,a)=>{v(!0);try{await y(e,{silent:a})}finally{v(!1)}},[y]),U=(0,t.useCallback)(async()=>{w([]),S(!0);try{var a;let t=await (0,k.listInstalledTools)(e,r,d());w(null!=(a=t.tools)?a:[])}catch(e){w([]),s.appToast.error("加载失败:".concat(e instanceof Error?e.message:String(e)))}finally{S(!1)}},[e,r,d]);(0,t.useEffect)(()=>{U()},[U]);let E=(0,t.useCallback)(e=>T.find(a=>a.name===e),[T]),M=(0,t.useMemo)(()=>T.slice().sort((e,a)=>e.name.localeCompare(a.name)).map(e=>(function(e,a){var t,n;let l=null!=e.packageName?String(e.packageName).trim():"";return{name:e.name,label:(e.displayName&&e.displayName!==e.name?"".concat(e.displayName," · "):"")+e.name+("system"===(n=e.layer)?" [系统]":"agent"===n?" [Agent]":""),description:null!=(t=e.searchHint)?t:"",enabled:a,packageId:l,canManage:h({deletable:e.deletable,packageId:l})}})(e,N.includes(e.name))),[T,N]),z=(0,t.useCallback)(async a=>{let t=E(a);if(!t||!h({deletable:t.deletable,packageId:t.packageName}))return void s.appToast.error("系统内置工具不可删除");if(await (0,b.confirmAlertDialog)({title:"确认删除工具包?",description:"工具名:".concat(a),confirmText:"删除",cancelText:"取消"}))try{await (0,k.deleteRuntimeTool)(e,r,d(),C({packageId:t.packageName,name:t.name}));let n=N.filter(e=>e!==a);p({tools:n}),await R(n,!0),await U()}catch(e){s.appToast.error("删除失败:".concat(e instanceof Error?e.message:String(e)))}},[E,e,r,d,N,p,R,U]),K=(0,t.useCallback)(a=>{let t=E(a);if(!t||!h({deletable:t.deletable,packageId:t.packageName}))return void s.appToast.error("系统内置工具不可导出");window.open((0,k.exportRuntimeToolUrl)(e,r,d(),C({packageId:t.packageName,name:t.name})),"_blank","noopener")},[E,e,r,d]),O=(0,t.useCallback)((e,a)=>{let t=a?[...new Set([...N,e])].sort():N.filter(a=>a!==e).sort();p({tools:t}),R(t,!0)},[N,p,R]);return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(f.ManageChromeHeaderActions,{children:(0,a.jsxs)(o.Button,{id:"btnAgentPickerToolImport",type:"button",variant:"plain-outline",size:"lg",className:"inline-flex items-center justify-center gap-1.5",onClick:()=>B(!0),children:[(0,a.jsx)(x.default,{name:"Import",size:16,className:"align-middle"}),"导入自定义工具"]})}),j?(0,a.jsx)("p",{className:"px-3 py-6 text-center text-base text-[var(--ds-muted)]",children:"加载中…"}):(0,a.jsx)(m,{items:M,saveBusy:I,onToggle:O,onExport:K,onRemove:z}),(0,a.jsx)(g,{open:A,onOpenChange:e=>{B(e),e||U()},wsUrl:e,apiBase:r,agent:d()})]})}}]);
@@ -0,0 +1 @@
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,55242,e=>{"use strict";e.s(["AppDialog",()=>n]);var t=e.i(18050),a=e.i(71645),l=e.i(76639),s=e.i(75157);function n(e){let{open:n,onOpenChange:r,title:i,children:o,footer:c,width:d="max-w-3xl",minHeight:u}=e,p=(0,a.useId)();return(0,t.jsx)(l.Dialog,{open:n,onOpenChange:r,children:(0,t.jsxs)(l.DialogContent,{"aria-labelledby":p,className:(0,s.cn)(d,u?"!min-h-[--min-h]":""),style:u?{"--min-h":u}:void 0,children:[(0,t.jsxs)(l.DialogHeader,{children:[(0,t.jsx)(l.DialogTitle,{id:p,children:i}),(0,t.jsx)(l.DialogClose,{"aria-label":"关闭"})]}),(0,t.jsx)(l.DialogBody,{className:"!px-4 !py-3",children:o}),c?(0,t.jsx)("div",{className:"flex flex-shrink-0 justify-end gap-2 border-t border-[var(--ds-border)] bg-[var(--ds-sidebar)] px-4 py-3",children:c}):null]})})}},93479,e=>{"use strict";e.s(["Input",()=>l]);var t=e.i(18050),a=e.i(75157);function l(e){let{className:l,type:s="text",size:n="default",...r}=e;return(0,t.jsx)("input",{type:s,"data-slot":"input","data-size":n,className:(0,a.cn)("h-9 w-full appearance-none rounded-md border border-solid border-border bg-transparent px-3 text-base outline-none transition-[color,box-shadow,border-color] duration-150 ease-in-out placeholder:text-muted-foreground hover:border-[#e0e0e0] focus-visible:border-[var(--border-focus)] focus-visible:[box-shadow:var(--ring-focus-sm)] read-only:focus-visible:border-border read-only:focus-visible:[box-shadow:none] disabled:cursor-not-allowed disabled:opacity-50 disabled:focus-visible:border-border disabled:focus-visible:[box-shadow:none] data-[size=default]:h-9 data-[size=lg]:h-10 data-[size=sm]:h-7",l),...r})}},20783,e=>{"use strict";e.s(["composeRefs",()=>l,"useComposedRefs",()=>s]);var t=e.i(71645);function a(e,t){if("function"==typeof e)return e(t);null!=e&&(e.current=t)}function l(){for(var e=arguments.length,t=Array(e),l=0;l<e;l++)t[l]=arguments[l];return e=>{let l=!1,s=t.map(t=>{let s=a(t,e);return l||"function"!=typeof s||(l=!0),s});if(l)return()=>{for(let e=0;e<s.length;e++){let l=s[e];"function"==typeof l?l():a(t[e],null)}}}}function s(){for(var e=arguments.length,a=Array(e),s=0;s<e;s++)a[s]=arguments[s];return t.useCallback(l(...a),a)}},57428,e=>{"use strict";e.s(["Checkbox",()=>n]);var t=e.i(18050),a=e.i(71645),l=e.i(72064),s=e.i(75157);let n=a.forwardRef(function(e,n){let{className:r,size:i="default",checked:o,defaultChecked:c,disabled:d,id:u,onChange:p,...m}=e,x=void 0!==o,[f,g]=a.useState(!!c),b=x?!!o:f;return(0,t.jsxs)("span",{"data-slot":"checkbox","data-size":i,"data-checked":b?"true":"false",className:(0,s.cn)("relative inline-flex shrink-0 items-center justify-center rounded-sm border border-solid border-border bg-transparent outline-none transition-[color,box-shadow,border-color,background-color] duration-150 ease-in-out","has-[:focus-visible]:border-[var(--border-focus)] has-[:focus-visible]:[box-shadow:var(--ring-focus-sm)]","has-[:disabled]:cursor-not-allowed has-[:disabled]:opacity-50","data-[size=default]:size-4 data-[size=sm]:size-3.5",b?"border-[var(--ds-accent)] bg-[var(--ds-accent)]":"bg-transparent",r),children:[b?(0,t.jsx)(l.default,{name:"Check",className:(0,s.cn)("pointer-events-none text-[var(--surface-1)] [&_path]:!fill-none","sm"===i?"size-3":"size-3.5"),strokeWidth:2.25,"aria-hidden":"true"}):null,(0,t.jsx)("input",{ref:n,id:u,type:"checkbox",checked:x?o:void 0,defaultChecked:x?void 0:c,disabled:d,className:"absolute inset-0 m-0 size-full cursor-pointer opacity-0 disabled:cursor-not-allowed",onChange:e=>{x||g(e.target.checked),null==p||p(e)},...m})]})})},19573,e=>{"use strict";e.s(["ToolsManageView",()=>k],19573);var t=e.i(18050),a=e.i(71645),l=e.i(65934),s=e.i(87243),n=e.i(13354),r=e.i(50711),i=e.i(19455),o=e.i(94055),c=e.i(94197),d=e.i(92715);function u(e){let{items:a,saveBusy:l,onToggle:s,onExport:n,onRemove:r,className:i}=e,u=[{key:"name",title:"名称",headerClassName:"text-base",cellClassName:"text-base",render:e=>e.label||e.name},{key:"description",title:"详情",headerClassName:"text-base",cellClassName:"text-base",render:e=>e.description||"-"},{key:"enabled",title:"启用/未启用",headerClassName:"text-base",cellClassName:"whitespace-nowrap text-base text-[var(--ds-text)]",render:e=>(0,t.jsx)("span",{className:"inline-flex items-center gap-2",children:(0,t.jsx)(o.AccentSwitch,{checked:!!e.enabled,disabled:l,onCheckedChange:t=>s(e.name,t),"aria-label":"".concat(e.enabled?"禁用":"启用"," ").concat(e.name)})})},{key:"actions",title:"操作",headerClassName:"w-[128px] text-base",cellClassName:"w-[128px]",render:e=>{let a=!0===e.canManage;return(0,t.jsxs)("div",{className:"inline-flex items-center justify-end gap-1",children:[(0,t.jsx)(c.IconTooltipButton,{icon:"Download",label:a?"导出":"系统内置工具不可导出",ariaLabel:"导出 ".concat(e.label||e.name),disabled:l||!a,onClick:()=>n(e.name)}),(0,t.jsx)(c.IconTooltipButton,{icon:"Trash2",label:a?"删除":"系统内置工具不可删除",tone:"danger",ariaLabel:"删除 ".concat(e.label||e.name),disabled:l||!a,onClick:()=>{r(e.name)}})]})}}];return(0,t.jsx)(d.AppTable,{rows:a,columns:u,getRowKey:e=>"tools:".concat(e.name),className:i})}var p=e.i(36845),m=e.i(53925);function x(e){let{open:a,onOpenChange:l,wsUrl:s,apiBase:n,agent:r}=e;return(0,t.jsx)(m.ResourceImportDialog,{open:a,onOpenChange:l,title:"导入工具 zip",description:"选择一个 zip 文件并导入到 tools-runtime。",uploadUrl:(0,p.buildToolsRuntimeImportUrl)(s,n,r),resetKey:r})}var f=e.i(68499),g=e.i(72064),b=e.i(56708),h=e.i(62427);function v(e){return(null!=e.packageId?String(e.packageId).trim():"")||e.name}function y(e){let t=null!=e.packageId?String(e.packageId).trim():"";return!0===e.deletable&&t.length>0}function k(){let e=(0,l.useAppStore)(e=>e.wsUrl),o=(0,l.useAppStore)(e=>e.apiBase),c=(0,l.useAppStore)(e=>e.agentConfig),d=(0,l.useAppStore)(e=>e.patchAgentConfig),{currentAgent:p,loadAgentConfig:m}=(0,s.useSession)(),k=(0,r.usePersistAgentConfigField)("tools"),C=c.tools,[j,S]=(0,a.useState)([]),[N,w]=(0,a.useState)(!1),[A,T]=(0,a.useState)(!1),[M,I]=(0,a.useState)(!1);(0,a.useEffect)(()=>{m()},[m]);let E=(0,a.useCallback)(async(e,t)=>{T(!0);try{await k(e,{silent:t})}finally{T(!1)}},[k]),z=(0,a.useCallback)(async()=>{S([]),w(!0);try{var t;let a=await (0,h.listInstalledTools)(e,o,p());S(null!=(t=a.tools)?t:[])}catch(e){S([]),n.appToast.error("加载失败:".concat(e instanceof Error?e.message:String(e)))}finally{w(!1)}},[e,o,p]);(0,a.useEffect)(()=>{z()},[z]);let B=(0,a.useCallback)(e=>j.find(t=>t.name===e),[j]),R=(0,a.useMemo)(()=>j.slice().sort((e,t)=>e.name.localeCompare(t.name)).map(e=>(function(e,t){var a,l;let s=null!=e.packageName?String(e.packageName).trim():"";return{name:e.name,label:(e.displayName&&e.displayName!==e.name?"".concat(e.displayName," · "):"")+e.name+("system"===(l=e.layer)?" [系统]":"agent"===l?" [Agent]":""),description:null!=(a=e.searchHint)?a:"",enabled:t,packageId:s,canManage:y({deletable:e.deletable,packageId:s})}})(e,C.includes(e.name))),[j,C]),P=(0,a.useCallback)(async t=>{let a=B(t);if(!a||!y({deletable:a.deletable,packageId:a.packageName}))return void n.appToast.error("系统内置工具不可删除");if(await (0,f.confirmAlertDialog)({title:"确认删除工具包?",description:"工具名:".concat(t),confirmText:"删除",cancelText:"取消"}))try{await (0,h.deleteRuntimeTool)(e,o,p(),v({packageId:a.packageName,name:a.name}));let l=C.filter(e=>e!==t);d({tools:l}),await E(l,!0),await z()}catch(e){n.appToast.error("删除失败:".concat(e instanceof Error?e.message:String(e)))}},[B,e,o,p,C,d,E,z]),O=(0,a.useCallback)(t=>{let a=B(t);if(!a||!y({deletable:a.deletable,packageId:a.packageName}))return void n.appToast.error("系统内置工具不可导出");window.open((0,h.exportRuntimeToolUrl)(e,o,p(),v({packageId:a.packageName,name:a.name})),"_blank","noopener")},[B,e,o,p]),D=(0,a.useCallback)((e,t)=>{let a=t?[...new Set([...C,e])].sort():C.filter(t=>t!==e).sort();d({tools:a}),E(a,!0)},[C,d,E]);return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(b.ManageChromeHeaderActions,{children:(0,t.jsxs)(i.Button,{id:"btnAgentPickerToolImport",type:"button",variant:"plain-outline",size:"lg",className:"inline-flex items-center justify-center gap-1.5",onClick:()=>I(!0),children:[(0,t.jsx)(g.default,{name:"Import",size:16,className:"align-middle"}),"导入自定义工具"]})}),N?(0,t.jsx)("p",{className:"px-3 py-6 text-center text-base text-[var(--ds-muted)]",children:"加载中…"}):(0,t.jsx)(u,{items:R,saveBusy:A,onToggle:D,onExport:O,onRemove:P}),(0,t.jsx)(x,{open:M,onOpenChange:e=>{I(e),e||z()},wsUrl:e,apiBase:o,agent:p()})]})}},37991,e=>{"use strict";e.s(["McpManageView",()=>S],37991);var t=e.i(18050),a=e.i(71645),l=e.i(65934),s=e.i(87243),n=e.i(13354),r=e.i(50711),i=e.i(51419),o=e.i(55242),c=e.i(92715),d=e.i(19455),u=e.i(94055),p=e.i(94197);function m(e){let{items:a,saveBusy:l,onToggleStatus:s,onEdit:n,className:r}=e,i=[{key:"name",title:"名称",headerClassName:"text-base",cellClassName:"text-base",render:e=>e.label||e.name},{key:"description",title:"详情",headerClassName:"text-base",cellClassName:"text-base",render:e=>e.description||"-"},{key:"source",title:"来源",headerClassName:"text-base",cellClassName:"text-base",render:()=>"远程"},{key:"status",title:"状态",headerClassName:"text-base",cellClassName:"whitespace-nowrap py-2 align-middle",render:e=>s?(0,t.jsx)("span",{className:"inline-flex items-center justify-end gap-2 text-base text-[var(--ds-text)]",children:(0,t.jsx)(u.AccentSwitch,{checked:!e.disabled,disabled:l,onCheckedChange:t=>{s(e.name,t)},"aria-label":"".concat(e.disabled?"启用":"禁用"," ").concat(e.name)})}):(0,t.jsx)("span",{className:"text-base text-[var(--ds-text)]",children:e.installed?"已安装":"未安装"})},...n?[{key:"actions",title:"操作",headerClassName:"w-[72px] text-base",cellClassName:"w-[72px]",render:e=>(0,t.jsx)("div",{className:"inline-flex justify-end",children:(0,t.jsx)(p.IconTooltipButton,{icon:"Edit",label:"编辑 MCP 配置",ariaLabel:"编辑 ".concat(e.name),disabled:l,onClick:()=>n(e.name)})})}]:[]];return(0,t.jsx)(c.AppTable,{rows:a,columns:i,getRowKey:e=>"mcp:".concat(e.name),className:r})}var x=e.i(36845),f=e.i(53925);function g(e){let{open:a,onOpenChange:l,wsUrl:s,apiBase:n,agent:r}=e;return(0,t.jsx)(f.ResourceImportDialog,{open:a,onOpenChange:l,title:"导入 MCP zip",description:"选择一个 zip 文件并导入到 mcp-runtime。",uploadUrl:(0,x.buildMcpRuntimeImportUrl)(s,n,r),resetKey:r})}var b=e.i(62427);function h(e){return(null!=e.packageId?String(e.packageId).trim():"")||e.id}function v(e){let{open:l,onOpenChange:s,itemId:r,source:i,wsUrl:c,apiBase:u,agent:p,onSaved:m}=e,[x,f]=(0,a.useState)(""),[g,h]=(0,a.useState)(!1),[v,y]=(0,a.useState)(!1),k="remote"===i?"remote":"runtime";(0,a.useEffect)(()=>{if(!l||!r.trim())return;let e=!1;return h(!0),f("加载中…"),(0,b.loadRuntimeMcpItemConfig)(c,u,p,r,k).then(t=>{if(e)return;let a=t.overlay;a&&"object"==typeof a&&!Array.isArray(a)?f(JSON.stringify(a,null,2)):f("{}")}).catch(t=>{e||(n.appToast.error("加载 MCP 配置失败:".concat(t instanceof Error?t.message:String(t))),s(!1))}).finally(()=>{e||h(!1)}),()=>{e=!0}},[l,r,c,u,p,k,s]);let C=(0,a.useCallback)(async()=>{let e;if(!r.trim())return;let t=x.trim();try{e=t?JSON.parse(t):{}}catch(e){n.appToast.error("JSON 解析失败:".concat(e instanceof Error?e.message:String(e)));return}if(!e||"object"!=typeof e||Array.isArray(e))return void n.appToast.error("配置必须是 JSON 对象");if("mcpServers"in e&&null!=e.mcpServers)return void n.appToast.error("请填写标准 server 配置(command/args/env),不要嵌套 mcpServers");let a=0===Object.keys(e).length;y(!0);try{a?await (0,b.clearRuntimeMcpItemConfig)(c,u,p,r,k):await (0,b.saveRuntimeMcpItemConfig)(c,u,p,r,k,e),n.appToast.success("MCP 配置已保存"),s(!1),null==m||m()}catch(e){n.appToast.error("保存失败:".concat(e instanceof Error?e.message:String(e)))}finally{y(!1)}},[r,x,c,u,p,k,s,m]);return(0,t.jsx)(o.AppDialog,{open:l,onOpenChange:s,title:"编辑 MCP 配置 · ".concat(r),width:"max-w-4xl",minHeight:"420px",footer:(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(d.Button,{type:"button",variant:"plain-outline",size:"lg",disabled:v,onClick:()=>s(!1),children:"取消"}),(0,t.jsx)(d.Button,{type:"button",size:"lg",disabled:v||g,onClick:()=>void C(),children:"保存"})]}),children:(0,t.jsx)("textarea",{className:"focus-visible:ring-[var(--ds-accent)]/30 min-h-[320px] w-full resize-y rounded-md border border-[var(--ds-border)] bg-[var(--ds-bg)] p-3 font-mono text-sm leading-6 text-[var(--ds-text)] outline-none focus-visible:ring-2",spellCheck:!1,value:x,disabled:g,onChange:e=>f(e.target.value)})})}var y=e.i(68499),k=e.i(72064),C=e.i(56708);let j=[{value:"basic",label:"本地MCP"},{value:"installed",label:"远程MCP"}];function S(){let e=(0,l.useAppStore)(e=>e.wsUrl),x=(0,l.useAppStore)(e=>e.apiBase),f=(0,l.useAppStore)(e=>e.agentConfig),S=(0,l.useAppStore)(e=>e.setAgentConfig),{currentAgent:N,loadAgentConfig:w}=(0,s.useSession)(),A=(0,r.usePersistAgentConfigField)("mcpServers"),T=f.mcpServers,M=(0,a.useMemo)(()=>[...T].sort().join("\0"),[T]),[I,E]=(0,a.useState)([]),[z,B]=(0,a.useState)([]),[R,P]=(0,a.useState)(!1),[O,D]=(0,a.useState)(!1),[U,L]=(0,a.useState)("basic"),[_,F]=(0,a.useState)(!1),[H,J]=(0,a.useState)(!1),[K,V]=(0,a.useState)(""),[q,W]=(0,a.useState)(!1),[Z,G]=(0,a.useState)(""),[Y,$]=(0,a.useState)(),[Q,X]=(0,a.useState)(!1);(0,a.useEffect)(()=>{w()},[w]);let ee=(0,a.useCallback)(async(e,t)=>{D(!0);try{await A(e,{silent:t})}finally{D(!1)}},[A]),et=(0,a.useCallback)(e=>I.find(t=>t.id===e),[I]),ea=(0,a.useCallback)(e=>{let t=et(e);G(e),$(null==t?void 0:t.source),X(!0)},[et]),el=(0,a.useCallback)(async()=>{E([]),P(!0);try{var t;let a=await (0,b.listMcpServers)(e,x,N());E((null!=(t=a.servers)?t:[]).map(e=>{var t,a,l;return{...e,id:e.name,label:e.name+(e.disabled?"(已禁用)":""),description:null!=(a=null!=(t=e.description)?t:e.source)?a:"",source:null!=(l=e.source)?l:"",installed:!!e.installed,packageId:e.packageId}}))}catch(e){E([]),n.appToast.error("加载失败:".concat(e instanceof Error?e.message:String(e)))}finally{P(!1)}},[e,x,N]),es=(0,a.useCallback)(async t=>{var a;let l=et(t),s=null!=(a=null==l?void 0:l.source)?a:"";if("runtime"!==s&&"remote"!==s)return void n.appToast.error("基础MCP不可删除");if(await (0,y.confirmAlertDialog)({title:"确认删除 MCP?",description:"服务器名:".concat(t),confirmText:"删除",cancelText:"取消"}))try{if("remote"===s){let a=await (0,b.loadRemoteMcpJson)(e,x,N()),l={};try{l=JSON.parse(String(a.content||"{}"))}catch(e){l={mcpServers:{}}}(!l.mcpServers||Array.isArray(l.mcpServers)||"object"!=typeof l.mcpServers)&&(l.mcpServers={}),delete l.mcpServers[t],await (0,b.saveRemoteMcpJson)(e,x,N(),JSON.stringify(l,null,2))}else{let a=l?h(l):t;await (0,b.deleteRuntimeMcp)(e,x,N(),a)}let a=T.filter(e=>e!==t);B(e=>e.filter(e=>e!==t)),S({...f,mcpServers:a}),await ee(a,!0),await el()}catch(e){n.appToast.error("删除失败:".concat(e instanceof Error?e.message:String(e)))}},[et,e,x,N,T,f,S,ee,el]);(0,a.useEffect)(()=>{("basic"===U||"installed"===U)&&el()},[U,el]),(0,a.useEffect)(()=>{("basic"===U||"installed"===U)&&B([...T])},[U,T,M]);let en=(0,a.useCallback)(async e=>{let t=[...new Set(e)].sort();S({...f,mcpServers:t}),await ee(t,!0)},[f,S,ee]),er=(0,a.useCallback)(async(e,t)=>{let a=t?[...new Set([...z,e])]:z.filter(t=>t!==e);B(a);try{await en(a)}catch(e){B(z),n.appToast.error("切换启用状态失败: ".concat(e))}},[z,en]),ei=(0,a.useMemo)(()=>I.filter(e=>"remote"!==e.source).slice().sort((e,t)=>e.id.localeCompare(t.id)),[I]),eo=(0,a.useMemo)(()=>I.filter(e=>"remote"===e.source).slice().sort((e,t)=>{let a=+!z.includes(e.id),l=+!z.includes(t.id);return a!==l?a-l:e.id.localeCompare(t.id)}).map(e=>({...e,name:e.id,label:e.label,description:e.description||"",installed:!0,source:e.source,disabled:!z.includes(e.id)})),[I,z]),ec=(0,a.useCallback)(t=>{window.open((0,b.exportRuntimeMcpUrl)(e,x,N(),h(t)),"_blank","noopener")},[e,x,N]),ed=(0,a.useCallback)(async(e,t)=>{let a=t?[...new Set([...z,e])]:z.filter(t=>t!==e);B(a);try{await en(a)}catch(e){B(z),n.appToast.error("切换启用状态失败: ".concat(e))}},[z,en]),eu=(0,a.useCallback)(()=>{J(!0),V(""),(0,b.loadRemoteMcpJson)(e,x,N()).then(e=>{V("string"==typeof e.content?e.content:'{\n "mcpServers": {}\n}\n')}).catch(e=>{n.appToast.error("加载 mcp.json 失败:".concat(e instanceof Error?e.message:String(e))),J(!1)})},[e,x,N]),ep=(0,a.useCallback)(async()=>{let t=function(e){let t,a=e.trim();if(!a)return"请输入 JSON 配置内容";try{t=JSON.parse(a)}catch(e){return"JSON 解析失败:".concat(e instanceof Error?e.message:String(e))}if(!t||"object"!=typeof t||Array.isArray(t))return"JSON 根节点必须是对象";let l=t.mcpServers;if(!l||"object"!=typeof l||Array.isArray(l))return"mcpServers 不能为空,且需包含至少一个 server";let s=Object.keys(l).filter(e=>e.trim());if(!s.length)return"mcpServers 不能为空,且需包含至少一个 server";let n=new Set;for(let e of s){let t=e.trim();!t||n.has(t)||n.add(t)}return n.size?null:"未解析到有效的 server 名称"}(K);if(t)return void n.appToast.error(t);W(!0);try{await (0,b.saveRemoteMcpJson)(e,x,N(),K.trim()),n.appToast.success("已保存全局 mcp.json。"),J(!1),await el()}catch(e){n.appToast.error("保存 mcp.json 失败:".concat(e instanceof Error?e.message:String(e)))}finally{W(!1)}},[e,x,N,K,el]),em=[{key:"name",title:"名称",headerClassName:"text-base text-[var(--ds-muted)]",cellClassName:"text-base text-[var(--ds-text)]",render:e=>e.label},{key:"description",title:"详情",headerClassName:"text-base text-[var(--ds-muted)]",cellClassName:"text-base text-[var(--ds-text)]",render:e=>e.description||"-"},{key:"enabled",title:"启用/未启用",headerClassName:"w-14 w-[112px] text-right text-base text-[var(--ds-muted)]",cellClassName:"w-[112px] py-2 text-right align-middle",render:e=>(0,t.jsx)("span",{className:"inline-flex justify-end",children:(0,t.jsx)(u.AccentSwitch,{checked:z.includes(e.id),disabled:O,onCheckedChange:t=>{er(e.id,t)},"aria-label":"选择 ".concat(e.label)})})},{key:"actions",title:"操作",headerClassName:"w-[168px] text-base text-[var(--ds-muted)]",cellClassName:"w-[168px]",render:e=>{var a;let l=null!=(a=e.source)?a:"",s="runtime"===l,n="runtime"===l||"remote"===l;return(0,t.jsxs)("div",{className:"inline-flex items-center justify-end gap-1",children:[(0,t.jsx)(p.IconTooltipButton,{icon:"Download",label:s?"导出":"仅 runtime MCP 支持导出",ariaLabel:"导出 ".concat(e.label),disabled:O||!s,onClick:()=>ec(e)}),(0,t.jsx)(p.IconTooltipButton,{icon:"Edit",label:"编辑 MCP 配置",ariaLabel:"编辑 ".concat(e.label),disabled:O,onClick:()=>ea(e.id)}),(0,t.jsx)(p.IconTooltipButton,{icon:"Trash2",label:n?"删除":"基础MCP不可删除",tone:"danger",ariaLabel:"删除 ".concat(e.label),disabled:O||!n,onClick:()=>{es(e.id)},iconClassName:"text-red-500"})]})}}];return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(C.ManageChromeHeaderActions,{children:(0,t.jsxs)("div",{className:"flex flex-wrap items-center",children:[(0,t.jsxs)(d.Button,{type:"button",variant:"plain-outline",size:"lg",onClick:eu,className:"mr-[12px]",children:[(0,t.jsx)(k.default,{name:"Edit",size:16,className:"align-middle"}),"编辑全局MCP"]}),(0,t.jsxs)(d.Button,{id:"btnAgentImportMcp",type:"button",variant:"plain-outline",size:"lg",className:"inline-flex items-center justify-center gap-1.5",onClick:()=>F(!0),children:[(0,t.jsx)(k.default,{name:"Import",size:16,className:"align-middle"}),"导入MCP"]})]})}),(0,t.jsxs)(i.AppTabs,{tabs:j,value:U,listVariant:"line",onChange:e=>L(e),children:[(0,t.jsx)(i.AppTabsPanel,{value:"basic",children:(0,t.jsx)("div",{className:"flex min-h-0 flex-1 flex-col gap-3",children:(0,t.jsx)("div",{className:"min-h-0",children:R?(0,t.jsx)("p",{className:"px-3 py-6 text-center text-base text-[var(--ds-muted)]",children:"加载中…"}):(0,t.jsx)(c.AppTable,{rows:ei,columns:em,getRowKey:e=>e.id})})})}),(0,t.jsx)(i.AppTabsPanel,{value:"installed",children:(0,t.jsx)(m,{items:eo,saveBusy:O,onToggleStatus:ed,onEdit:ea})})]}),(0,t.jsx)(g,{open:_,onOpenChange:e=>{F(e),e||el()},wsUrl:e,apiBase:x,agent:N()}),(0,t.jsx)(v,{open:Q,onOpenChange:X,itemId:Z,source:Y,wsUrl:e,apiBase:x,agent:N(),onSaved:()=>{el(),ee(f.mcpServers,!0)}}),(0,t.jsx)(o.AppDialog,{open:H,onOpenChange:J,title:"编辑全局MCP",width:"max-w-4xl",minHeight:"420px",footer:(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(d.Button,{type:"button",variant:"plain-outline",size:"lg",disabled:q,onClick:()=>J(!1),children:"取消"}),(0,t.jsx)(d.Button,{type:"button",size:"lg",disabled:q,onClick:()=>void ep(),children:"保存"})]}),children:(0,t.jsx)("textarea",{className:"focus-visible:ring-[var(--ds-accent)]/30 min-h-[320px] w-full resize-y rounded-md border border-[var(--ds-border)] bg-[var(--ds-bg)] p-3 text-base leading-6 text-[var(--ds-text)] outline-none focus-visible:ring-2",spellCheck:!1,value:K,onChange:e=>V(e.target.value)})})]})}},18900,69051,e=>{"use strict";function t(e){let t=null==e?"":String(e);return""===t?'""':/[\s#"'\\\n]/.test(t)||t!==t.trim()?'"'.concat(t.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\n/g,"\\n"),'"'):t}function a(e){let t=String(e).split(/\r?\n/),a={},l=/^\s*(?:export\s+)?([A-Za-z_][A-Za-z0-9_]*)\s*=\s*(.*)$/;for(let e=0;e<t.length;e++){let s=t[e],n=l.exec(s);n&&(a[n[1]]=function(e){let t=e.trimEnd();return t.length>=2&&'"'===t[0]&&'"'===t[t.length-1]?t.slice(1,-1).replace(/\\(.)/g,(e,t)=>"n"===t?"\n":'"'===t?'"':"\\"===t?"\\":"\\".concat(t)):t.length>=2&&"'"===t[0]&&"'"===t[t.length-1]?t.slice(1,-1):e}(n[2]))}return a}function l(e,a){let l=Array.isArray(e)?e:[],s=new Set;for(let e=0;e<l.length;e++){let t=l[e];t&&"object"==typeof t&&"string"==typeof t.key&&s.add(t.key)}let n=[];for(let e=0;e<l.length;e++){let s=l[e];if(!s||"object"!=typeof s||"string"!=typeof s.key)continue;let r=s.key;if(!Object.prototype.hasOwnProperty.call(a,r))continue;let i=a[r];null!=i&&""!==String(i).trim()&&n.push("".concat(r,"=").concat(t(String(i))))}let r=Object.keys(a).filter(e=>!s.has(e)).sort();for(let e=0;e<r.length;e++){let l=r[e],s=a[l];null!=s&&""!==String(s).trim()&&n.push("".concat(l,"=").concat(t(String(s))))}let i=n.join("\n");return i.length>0?"".concat(i,"\n"):""}e.s(["buildEnvFileContentFromForm",()=>l,"parseEnvContentToMap",()=>a],18900),e.s(["loadDemoSingleMessage",()=>c,"loadSystemEnv",()=>r,"saveSystemEnv",()=>i,"saveSystemMcpJson",()=>o],69051);var s=e.i(29250),n=e.i(36845);async function r(e,t,a){return(0,s.get)((0,n.buildSystemEnvApiUrl)(e,t,a))}async function i(e,t,a,l){await (0,s.patch)((0,n.buildSystemEnvApiUrl)(e,t,a),{content:l})}async function o(e,t,a,l){await (0,s.patch)((0,n.buildSystemMcpJsonApiUrl)(e,t,a),{content:l})}async function c(){return(0,s.get)("/api/demo/single-message")}},62849,e=>{"use strict";e.s(["EnvManageView",()=>B],62849);var t=e.i(18050),a=e.i(71645),l=e.i(56708),s=e.i(19455),n=e.i(72064),r=e.i(51419),i=e.i(76639),o=e.i(93479),c=e.i(67489),d=e.i(13354),u=e.i(87243),p=e.i(67327);let m=["llm","git","geelib","tutui","system"],x={llm:"llm设置",git:"git设置",geelib:"geelib设置",tutui:"tutui设置",system:"系统设置"};function f(e){let t={...x};if(!e||"object"!=typeof e)return t;for(let a of m){let l=e[a];"string"==typeof l&&l.trim()&&(t[a]=l.trim())}return t}var g=e.i(18900),b=e.i(94606),h=e.i(75157),v=e.i(82136),y=e.i(69051),k=e.i(65934);let C=[{key:"name",name:"名称",required:!0},{key:"description",name:"备注"},{key:"ANTHROPIC_BASE_URL",name:"接口地址",required:!0},{key:"ANTHROPIC_AUTH_TOKEN",name:"认证变量"},{key:"ANTHROPIC_API_KEY",name:"API秘钥",required:!0},{key:"model",name:"模型映射"}],j=[{label:"主模型",required:!0,value:"main",placeholder:"Model ID"},{value:"haiku",label:"Haiku模型",placeholder:"与主模型相同"},{value:"sonnet",label:"Sonnet模型",placeholder:"与主模型相同"},{value:"opus",label:"Opus模型",placeholder:"与主模型相同"}];function S(e){return"MODEL_".concat(e.toUpperCase())}function N(){return Object.fromEntries(j.map(e=>[e.value,""]))}let w="custom",A=new Set(["name","description"]),T="model",M="__empty__",I=[{value:"anthropic",label:"anthropic"},{value:"openai",label:"openai"}];function E(){return Object.fromEntries(C.filter(e=>e.key!==T).map(e=>[e.key,""]))}function z(e){let{open:l,onOpenChange:n,onSaved:x}=e,z=(0,a.useId)(),B=(0,k.useAppStore)(e=>e.wsUrl),R=(0,k.useAppStore)(e=>e.apiBase),P=(0,k.useAppStore)(e=>e.agentConfig),O=(0,k.useAppStore)(e=>e.setAgentConfig),D=(0,k.useAppStore)(e=>e.bridgeReady),U=(0,k.useAppStore)(e=>e.setStatus),{currentAgent:L,loadAgentConfig:_}=(0,u.useSession)(),{sendReloadAgentConfig:F}=(0,p.useWebSocketSender)(),[H,J]=(0,a.useState)(!0),[K,V]=(0,a.useState)(!1),[q,W]=(0,a.useState)(!1),[Z,G]=(0,a.useState)([]),[Y,$]=(0,a.useState)(f(void 0)),[Q,X]=(0,a.useState)({}),[ee,et]=(0,a.useState)({}),[ea,el]=(0,a.useState)(E),[es,en]=(0,a.useState)(N),er=(0,a.useMemo)(()=>new Set(Z.map(e=>e.key)),[Z]),ei=(0,a.useMemo)(()=>(function(e){let t={};for(let e of m)t[e]=[];for(let a of e)m.includes(a.group)&&t[a.group].push(a);return t})(Z),[Z]),eo=(0,a.useMemo)(()=>{let e=[{value:w,label:"自定义设置"}];for(let t of m)ei[t].length&&e.push({value:t,label:Y[t]});return e},[ei,Y]),ec=(0,a.useCallback)(e=>{et(function(e,t,a){let l={};for(let s of t){let t=e[s.key];if("string"==typeof t&&t.length>0){l[s.key]=t;continue}let n=a[s.key];l[s.key]="string"==typeof n?n:""}return l}(e,Z,Q));let t=E();for(let a of C)A.has(a.key)||a.key===T||"string"==typeof e[a.key]&&(t[a.key]=e[a.key]);let a=N();for(let t of j){let l=S(t.value);"string"==typeof e[l]&&(a[t.value]=e[l])}el(t),en(a),W(!1)},[Z,Q]),ed=(0,a.useCallback)(async()=>{try{let e=await (0,y.loadSystemEnv)(B,R,L()),t="string"==typeof e.content?e.content:"",a=function(e){if(!Array.isArray(e))return[];let t=[];for(let a of e){if(!a||"object"!=typeof a)continue;let e="string"==typeof a.key?a.key.trim():"",l="string"==typeof a.group?a.group.trim():"";e&&m.includes(l)&&t.push({key:e,group:l,label:"string"==typeof a.label&&a.label.trim()?a.label.trim():e,placeholder:"string"==typeof a.placeholder?a.placeholder:""})}return t}(e.schema),l=(0,g.parseEnvContentToMap)(t);G(a),$(f(e.groupLabels)),X(function(e,t){let a={};for(let s of e){var l;a[s.key]=null!=(l=t[s.key])?l:""}return a}(a,l))}catch(e){d.appToast.error("加载环境变量表单配置失败:".concat(e instanceof Error?e.message:String(e))),G([]),X({})}},[B,R,L]);(0,a.useEffect)(()=>{l&&(J(!0),Promise.all([_(),ed()]).finally(()=>{J(!1)}))},[l,_,ed]),(0,a.useEffect)(()=>{l&&!H&&ec({...P.env})},[l,P.env,ec,H]);let eu=(0,a.useCallback)((e,t)=>{W(!0),et(a=>({...a,[e]:t}))},[]),ep=(0,a.useCallback)((e,t)=>{W(!0),el(a=>({...a,[e]:t}))},[]),em=(0,a.useCallback)((e,t)=>{W(!0),en(a=>({...a,[e]:t}))},[]),ex=(0,a.useCallback)(async e=>{if(e)return void n(!0);(!q||await (0,b.confirmDiscardFlyoutChanges)())&&n(!1)},[q,n]),ef=(0,a.useCallback)(async()=>{let e=function(e,t){var a,l;for(let t of C)if(t.key!==T&&t.required&&!String(null!=(a=e[t.key])?a:"").trim())return{ok:!1,message:"请填写".concat(t.name)};for(let e of j)if("required"in e&&e.required&&!String(null!=(l=t[e.value])?l:"").trim())return{ok:!1,message:"请填写".concat(e.label)};return{ok:!0}}(ea,es);if(!e.ok)return void d.appToast.info(e.message);let t=function(e,t){let a={};for(let l of t){let t=Object.prototype.hasOwnProperty.call(e,l.key)?e[l.key]:"",s=String(null!=t?t:"").trim();s&&(a[l.key]=s)}return a}(ee,Z),a=function(e,t,a){var l,s;let n={};for(let t of C){if(A.has(t.key)||t.key===T)continue;let s=t.key.trim(),r=String(null!=(l=e[t.key])?l:"");if(r.trim()){if(a.has(s))return{ok:!1,message:"自定义变量不能与固定表单重复:".concat(s)};n[s]=r}}for(let e of j){let l=S(e.value),r=String(null!=(s=t[e.value])?s:"");if(r.trim()){if(a.has(l))return{ok:!1,message:"自定义变量不能与固定表单重复:".concat(l)};n[l]=r}}return{ok:!0,env:n}}(ea,es,er);if(!a.ok)return void d.appToast.info(a.message);let l={...t,...a.env};V(!0);try{var s,r,i,o;let e=k.useAppStore.getState();await (0,v.saveAgentConfig)(B,R,L(),{tools:e.agentConfig.tools.slice(),disallowedTools:e.agentConfig.disallowedTools.slice(),mcpServers:e.agentConfig.mcpServers.slice(),skills:e.agentConfig.skills.slice(),agentTeams:e.agentConfig.agentTeams.slice(),model:e.agentConfig.model,rules:e.agentConfig.rules.slice(),effort:null!=(s=e.agentConfig.effort)?s:null,background:null!=(r=e.agentConfig.background)&&r,isolation:null!=(i=e.agentConfig.isolation)?i:"",whentouse:null!=(o=e.agentConfig.whentouse)?o:"",env:l}),O({...e.agentConfig,env:{...l}}),k.useAppStore.getState().wsConnected&&F(),U("环境变量已保存"+(k.useAppStore.getState().wsConnected?",已请求 worker 重新加载配置":""),D?"ready":""),d.appToast.success(k.useAppStore.getState().wsConnected?"已保存到 agent.json,并已请求 worker 重新加载配置。":"已保存到 agent.json。重连 WebSocket 后子进程环境将同步。"),W(!1),await (null==x?void 0:x()),n(!1)}catch(e){d.appToast.error("保存环境变量失败:".concat(e instanceof Error?e.message:String(e)))}finally{V(!1)}},[ee,Z,ea,es,er,B,R,L,O,F,U,D,n,x]);return(0,t.jsx)(i.Dialog,{open:l,onOpenChange:e=>void ex(e),children:(0,t.jsxs)(i.DialogContent,{"aria-labelledby":z,className:"max-w-4xl",children:[(0,t.jsxs)(i.DialogHeader,{children:[(0,t.jsx)("div",{className:"min-w-0 flex-1",children:(0,t.jsx)(i.DialogTitle,{id:z,children:"添加服务商"})}),(0,t.jsx)(i.DialogClose,{"aria-label":"关闭"})]}),(0,t.jsx)(i.DialogBody,{className:"flex min-h-[420px] flex-col overflow-hidden !py-4",children:H?(0,t.jsx)("div",{className:"py-8 text-center text-base text-[var(--ds-muted)]",children:"加载中…"}):(0,t.jsxs)(r.AppTabs,{tabs:eo,defaultValue:w,listVariant:"line",className:"min-h-0 flex-1",contentClassName:"min-h-0 overflow-y-auto",children:[(0,t.jsx)(r.AppTabsPanel,{value:w,children:(0,t.jsx)("div",{className:"divide-y divide-[var(--ds-border)]",children:C.map(e=>{if(e.key===T)return(0,t.jsxs)("div",{className:"flex flex-col gap-3 py-4 first:pt-0",children:[(0,t.jsx)("span",{className:"text-basic text-[var(--ds-text)]",children:e.name}),(0,t.jsx)("div",{className:"grid grid-cols-2 gap-x-4 gap-y-4",children:j.map(e=>{let a="custom-env-model-".concat(e.value),l="string"==typeof es[e.value]?es[e.value]:"";return(0,t.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,t.jsxs)("label",{className:"text-basic text-[var(--ds-text)]",htmlFor:a,children:[e.label,"required"in e&&e.required?(0,t.jsx)("span",{className:"ml-0.5 text-destructive",children:"*"}):null]}),(0,t.jsx)(o.Input,{id:a,type:"text",spellCheck:!1,autoComplete:"off",placeholder:e.placeholder,className:"border-[var(--ds-border)] bg-[var(--ds-bg)] text-base placeholder:text-[var(--text-placeholder)]",value:l,onChange:t=>em(e.value,t.target.value)})]},e.value)})})]},e.key);let a="custom-env-field-".concat(e.key),l="string"==typeof ea[e.key]?ea[e.key]:"";return(0,t.jsxs)("div",{className:"flex flex-col gap-2 py-4 first:pt-0",children:[(0,t.jsxs)("label",{className:"text-base text-[var(--ds-text)]",htmlFor:a,children:[e.name,e.required?(0,t.jsx)("span",{className:"ml-0.5 text-destructive",children:"*"}):null]}),(0,t.jsx)(o.Input,{id:a,type:"text",spellCheck:!1,autoComplete:"off",placeholder:"请输入".concat(e.name),className:(0,h.cn)("border-[var(--ds-border)] bg-[var(--ds-bg)] text-base placeholder:text-[var(--text-placeholder)]",e.className),value:l,onChange:t=>ep(e.key,t.target.value)})]},e.key)})})}),m.map(e=>{let a=ei[e];return a.length?(0,t.jsx)(r.AppTabsPanel,{value:e,children:(0,t.jsx)("div",{className:"divide-y divide-[var(--ds-border)]",children:a.map(e=>(e=>{let a="agent-env-field-".concat(e.key),l="string"==typeof ee[e.key]?ee[e.key]:"";if("LLM_PROVIDER"===e.key){let s="anthropic"===l||"openai"===l?l:"";return(0,t.jsxs)("div",{className:"flex flex-col gap-2 first:pt-0",children:[(0,t.jsx)("label",{className:"text-basic text-[var(--ds-text)]",htmlFor:a,children:e.label}),(0,t.jsxs)(c.Select,{value:s||M,onValueChange:t=>eu(e.key,t===M?"":t),children:[(0,t.jsx)(c.SelectTrigger,{id:a,className:(0,h.cn)("h-10 w-full border-[var(--ds-border)] bg-[var(--ds-bg)] text-base",!s&&"text-[var(--text-placeholder)]"),children:(0,t.jsx)(c.SelectValue,{placeholder:"请选择"})}),(0,t.jsxs)(c.SelectContent,{children:[(0,t.jsx)(c.SelectItem,{value:M,children:"请选择"}),I.map(e=>(0,t.jsx)(c.SelectItem,{value:e.value,children:e.label},e.value))]})]})]},e.key)}return(0,t.jsxs)("div",{className:"flex flex-col gap-2 py-4 first:pt-0",children:[(0,t.jsx)("label",{className:"text-base text-[var(--ds-text)]",htmlFor:a,children:e.label}),(0,t.jsx)(o.Input,{id:a,type:"text",spellCheck:!1,autoComplete:"off",placeholder:e.placeholder,className:"h-10 border-[var(--ds-border)] bg-[var(--ds-bg)] text-base placeholder:text-[var(--text-placeholder)]",value:l,onChange:t=>eu(e.key,t.target.value)})]},e.key)})(e))})},e):null})]})}),(0,t.jsxs)("div",{className:"flex shrink-0 justify-end gap-2 border-t border-[var(--ds-border)] bg-[var(--ds-sidebar)] px-4 py-3",children:[(0,t.jsx)(s.Button,{type:"button",variant:"plain-outline",size:"lg",disabled:H||K,onClick:()=>void ex(!1),className:"cursor-pointer",children:"取消"}),(0,t.jsx)(s.Button,{type:"button",size:"lg",disabled:H||K,onClick:()=>void ef(),className:"cursor-pointer",children:K?"保存中…":"保存"})]})]})})}function B(){let[e,r]=(0,a.useState)(!1);return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(l.ManageChromeHeaderActions,{children:(0,t.jsx)("div",{className:"flex flex-wrap items-center",children:(0,t.jsxs)(s.Button,{type:"button",variant:"plain-outline",size:"lg",onClick:()=>r(!0),className:"mr-[12px]",children:[(0,t.jsx)(n.default,{name:"Create",size:16,className:"align-middle"}),"添加服务商"]})})}),(0,t.jsx)(z,{open:e,onOpenChange:r})]})}},39721,e=>{"use strict";e.s(["SkillsManageView",()=>I],39721);var t=e.i(18050),a=e.i(71645),l=e.i(65934),s=e.i(87243),n=e.i(13354),r=e.i(50711),i=e.i(51419),o=e.i(92715),c=e.i(19455),d=e.i(94055),u=e.i(94197),p=e.i(72064),m=e.i(93479),x=e.i(75157);function f(e){let{className:a,...l}=e;return(0,t.jsx)("nav",{role:"navigation","aria-label":"pagination","data-slot":"pagination",className:(0,x.cn)("flex w-full justify-end",a),...l})}let g=a.forwardRef((e,a)=>{let{className:l,...s}=e;return(0,t.jsx)("ul",{ref:a,"data-slot":"pagination-content",className:(0,x.cn)("flex flex-row flex-wrap items-center justify-end gap-1",l),...s})});g.displayName="PaginationContent";let b=a.forwardRef((e,a)=>{let{className:l,...s}=e;return(0,t.jsx)("li",{ref:a,"data-slot":"pagination-item",className:(0,x.cn)("",l),...s})});b.displayName="PaginationItem",a.forwardRef((e,a)=>{let{className:l,isActive:s,size:n="icon",...r}=e;return(0,t.jsx)("a",{ref:a,"aria-current":s?"page":void 0,"data-slot":"pagination-link","data-active":s?"true":void 0,className:(0,x.cn)((0,c.buttonVariants)({variant:s?"outline":"ghost",size:n}),l),...r})}).displayName="PaginationLink";var h=e.i(62427);function v(e){let{active:l,wsUrl:s,apiBase:r,agent:i,onAfterInstall:d,className:u}=e,[x,v]=(0,a.useState)(""),[y,k]=(0,a.useState)(1),[C,j]=(0,a.useState)(0),[S,N]=(0,a.useState)([]),[w,A]=(0,a.useState)(!1),[T,M]=(0,a.useState)(""),[I,E]=(0,a.useState)({}),z=(0,a.useRef)(0),B=(0,a.useCallback)(async()=>{let e=++z.current;A(!0),M("");try{let t=await (0,h.listCloudSkillCatalog)(s,r,i,x,y,10);if(e!==z.current)return;let a=Array.isArray(t.items)?t.items:[],l=[];for(let e of a)e&&"object"==typeof e&&e.id&&l.push({id:String(e.id),title:String(e.title||""),skillName:String(e.skillName||""),description:"string"==typeof e.description?e.description:"",installed:!!e.installed});N(l),j(t.totalPages)}catch(t){if(e!==z.current)return;N([]),j(0),M(t instanceof Error?t.message:String(t))}finally{e===z.current&&A(!1)}},[s,r,i,x,y]);(0,a.useEffect)(()=>{if(!l){v(""),k(1),j(0),N([]),M(""),E({}),z.current+=1;return}B()},[l,B]);let R=(0,a.useMemo)(()=>{if(w)return"加载中…";if(T)return"加载失败:".concat(T);let e=S.reduce((e,t)=>e+ +!!t.installed,0);return"已安装 ".concat(e," 项")},[w,T,S]),P=(0,a.useCallback)(async(e,t)=>{E(t=>({...t,[e]:!0}));try{await (0,h.installCloudSkill)(s,r,i,e),n.appToast.success("云端技能已安装:".concat(t)),await B(),null==d||d()}catch(e){n.appToast.error("安装失败:".concat(e instanceof Error?e.message:String(e)))}finally{E(t=>{let a={...t};return delete a[e],a})}},[s,r,i,B,d]),O=(0,a.useCallback)(e=>{k(1),v(e)},[]);if(!l)return null;let D=C>0?"第 ".concat(y,"/").concat(C," 页"):"第 0/0 页",U=w||y<=1,L=w||C<=0||y>=C,_=[{key:"name",title:"名称",headerClassName:"text-base",cellClassName:"text-base text-[var(--ds-text)]",render:e=>e.skillName?"".concat(e.skillName):e.id},{key:"description",title:"详情",headerClassName:"text-base",cellClassName:"text-base text-[var(--ds-text)]",render:e=>(0,t.jsxs)(t.Fragment,{children:[e.title,e.description?" — ".concat(e.description):""]})},{key:"status",title:"状态",headerClassName:"text-base",cellClassName:"whitespace-nowrap text-base text-[var(--ds-text)]",render:e=>e.installed?"已安装":"未安装"},{key:"actions",title:"操作",headerClassName:"w-[96px] text-right text-base",cellClassName:"w-[116px] text-right",render:e=>{let a=!!I[e.id],l=!!e.installed;return!a&&l?"-":(0,t.jsx)(c.Button,{type:"button",size:"sm",variant:"outline",disabled:a||l,onClick:()=>void P(e.id,e.title||e.skillName||e.id),children:a?"安装中…":l?"已安装":"安装"})}}];return(0,t.jsx)("div",{className:u,children:(0,t.jsxs)("div",{className:"flex flex-col gap-3",children:[(0,t.jsx)(m.Input,{type:"search",value:x,onChange:e=>O(e.target.value),placeholder:"搜索云端技能…",className:"h-10 border-[var(--ds-border)] bg-[var(--ds-bg)] text-base"}),(0,t.jsx)("div",{className:"text-sm text-[var(--ds-muted)]",children:R}),(0,t.jsx)(o.AppTable,{rows:S,columns:_,getRowKey:e=>e.id,className:"min-h-0 flex-1 rounded-md",bodyProps:{viewportPaginationReserve:64},emptyNode:w?(0,t.jsx)("p",{className:"text-center text-base",children:"加载中…"}):void 0}),(0,t.jsx)(f,{className:"mx-0 w-full",children:(0,t.jsxs)(g,{className:"w-full flex-wrap justify-end gap-2",children:[(0,t.jsx)(b,{children:(0,t.jsxs)(c.Button,{type:"button",variant:"outline",size:"sm",disabled:U,className:"gap-1",onClick:()=>k(e=>Math.max(1,e-1)),"aria-label":"上一页",children:[(0,t.jsx)(p.default,{name:"ChevronLeft",size:16,className:"shrink-0"}),"上一页"]})}),(0,t.jsx)(b,{children:(0,t.jsx)("span",{className:"flex h-9 min-w-[6.5rem] items-center justify-center text-sm text-[var(--ds-muted)]",children:D})}),(0,t.jsx)(b,{children:(0,t.jsxs)(c.Button,{type:"button",variant:"outline",size:"sm",disabled:L,className:"gap-1",onClick:()=>k(e=>e+1),"aria-label":"下一页",children:["下一页",(0,t.jsx)(p.default,{name:"ChevronRight",size:16,className:"shrink-0",strokeWidth:1})]})})]})})]})})}var y=e.i(36845),k=e.i(53925);function C(e){let{open:a,onOpenChange:l,wsUrl:s,apiBase:n,agent:r}=e;return(0,t.jsx)(k.ResourceImportDialog,{open:a,onOpenChange:l,title:"导入 Skill zip",description:"选择一个 zip 文件并导入到 skills-runtime。",uploadUrl:(0,y.buildSkillsRuntimeImportUrl)(s,n,r),resetKey:r})}var j=e.i(55242);function S(e){let{open:l,onOpenChange:s,skillName:r,wsUrl:i,apiBase:o,agent:d,onSaved:u}=e,[p,m]=(0,a.useState)(""),[x,f]=(0,a.useState)(!1),[g,b]=(0,a.useState)(!1);(0,a.useEffect)(()=>{if(!l||!r.trim())return;let e=!1;return f(!0),m(""),(0,h.loadBaseSkillMd)(i,o,d,r).then(t=>{e||m("string"==typeof t.content?t.content:"")}).catch(t=>{e||(n.appToast.error("加载 SKILL.md 失败:".concat(t instanceof Error?t.message:String(t))),s(!1))}).finally(()=>{e||f(!1)}),()=>{e=!0}},[l,r,i,o,d,s]);let v=(0,a.useCallback)(async()=>{if(r.trim()){b(!0);try{await (0,h.saveBaseSkillMd)(i,o,d,r,p),n.appToast.success("SKILL.md 已保存"),s(!1),null==u||u()}catch(e){n.appToast.error("保存失败:".concat(e instanceof Error?e.message:String(e)))}finally{b(!1)}}},[r,i,o,d,p,s,u]);return(0,t.jsx)(j.AppDialog,{open:l,onOpenChange:s,title:"编辑 SKILL.md · /".concat(r),width:"max-w-4xl",minHeight:"420px",footer:(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(c.Button,{type:"button",variant:"plain-outline",size:"lg",disabled:x||g,onClick:()=>s(!1),children:"取消"}),(0,t.jsx)(c.Button,{type:"button",size:"lg",disabled:x||g,onClick:()=>void v(),children:"保存"})]}),children:x?(0,t.jsx)("p",{className:"py-6 text-center text-base text-[var(--ds-muted)]",children:"加载中…"}):(0,t.jsx)("textarea",{className:"focus-visible:ring-[var(--ds-accent)]/30 min-h-[320px] w-full resize-y rounded-md border border-[var(--ds-border)] bg-[var(--ds-bg)] p-3 text-base leading-6 text-[var(--ds-text)] outline-none focus-visible:ring-2",spellCheck:!1,value:p,placeholder:"Markdown 源码…",onChange:e=>m(e.target.value)})})}function N(e){let{items:a,saveBusy:l,onToggleEnabled:s,onExport:n,onRemove:r,className:i}=e,c=[{key:"name",title:"名称",headerClassName:"text-base",cellClassName:"text-base",render:e=>"/".concat(e.name)},{key:"description",title:"详情",headerClassName:"text-base",cellClassName:"text-base",render:e=>e.description||"-"},{key:"status",title:"状态",headerClassName:"w-[160px] text-base",cellClassName:"w-[160px] text-base text-[var(--ds-text)]",render:()=>"已安装"},{key:"enabled",title:"启用/未启用",headerClassName:"w-[160px] text-right text-base",cellClassName:"w-[160px] py-2 text-right align-middle",render:e=>(0,t.jsx)("span",{className:"inline-flex items-center justify-end gap-2",children:(0,t.jsx)(d.AccentSwitch,{checked:e.enabled,disabled:l,onCheckedChange:t=>s(e.name,t),"aria-label":"".concat(e.enabled?"禁用":"启用"," ").concat(e.name)})})},{key:"actions",title:"操作",headerClassName:"w-[128px] text-base",cellClassName:"w-[128px]",render:e=>(0,t.jsxs)("div",{className:"inline-flex items-center justify-end gap-1",children:[(0,t.jsx)(u.IconTooltipButton,{icon:"Download",label:"导出",ariaLabel:"导出 ".concat(e.name),disabled:l,onClick:()=>n(e.name)}),(0,t.jsx)(u.IconTooltipButton,{icon:"Trash2",label:"删除",tone:"danger",ariaLabel:"删除 ".concat(e.name),disabled:l,onClick:()=>{r(e.name)}})]})}];return(0,t.jsx)(o.AppTable,{rows:a,columns:c,getRowKey:e=>"skills:".concat(e.name),className:i})}var w=e.i(68499),A=e.i(56708);function T(e,t){var a,l,s;let n=(s=null!=(l=null!=(a=e.description)?a:e.whenToUse)?l:"")?s.length>100?s.slice(0,100):s:"";return{...e,id:e.name,label:"/".concat(e.name),description:n,isRuntime:t,canManage:e.canManage}}let M=[{value:"basic",label:"基础Skill"},{value:"installed",label:"已安装Skill"},{value:"cloud_catalog",label:"Skill商店"}];function I(){let e=(0,l.useAppStore)(e=>e.wsUrl),m=(0,l.useAppStore)(e=>e.apiBase),x=(0,l.useAppStore)(e=>e.agentConfig),f=(0,l.useAppStore)(e=>e.patchAgentConfig),{currentAgent:g,loadAgentConfig:b}=(0,s.useSession)(),y=(0,r.usePersistAgentConfigField)("skills"),k=x.skills,j=(0,a.useMemo)(()=>[...k].sort().join("\0"),[k]),[I,E]=(0,a.useState)([]),[z,B]=(0,a.useState)([]),[R,P]=(0,a.useState)([]),[O,D]=(0,a.useState)(!1),[U,L]=(0,a.useState)(!1),[_,F]=(0,a.useState)(!1),[H,J]=(0,a.useState)("basic"),[K,V]=(0,a.useState)(!1),[q,W]=(0,a.useState)(""),[Z,G]=(0,a.useState)(!1);(0,a.useEffect)(()=>{b()},[b]);let Y=(0,a.useCallback)(async(e,t)=>{F(!0);try{await y(e,{silent:t})}finally{F(!1)}},[y]),$=(0,a.useCallback)(async()=>{E([]),D(!0);try{var t;let a=await (0,h.listBaseSkills)(e,m,g());E((null!=(t=a.skills)?t:[]).map(e=>T(e,!1)))}catch(e){E([]),n.appToast.error("加载失败:".concat(e instanceof Error?e.message:String(e)))}finally{D(!1)}},[e,m,g]),Q=(0,a.useCallback)(async()=>{B([]),L(!0);try{var t;let a=await (0,h.listInstalledSkills)(e,m,g());B((null!=(t=a.skills)?t:[]).map(e=>T(e,!0)))}catch(e){B([]),n.appToast.error("加载失败:".concat(e instanceof Error?e.message:String(e)))}finally{L(!1)}},[e,m,g]),X=(0,a.useCallback)(async()=>{await Promise.all([$(),Q()])},[$,Q]),ee=(0,a.useCallback)(async t=>{if(await (0,w.confirmAlertDialog)({title:"确认删除 Skill 包?",description:"Skill:".concat(t),confirmText:"删除",cancelText:"取消"}))try{await (0,h.deleteRuntimeSkill)(e,m,g(),t);let a=k.filter(e=>e!==t);P(e=>e.filter(e=>e!==t)),f({skills:a}),await Y(a,!0),await X()}catch(e){n.appToast.error("删除失败:".concat(e instanceof Error?e.message:String(e)))}},[e,m,g,k,f,Y,X]);(0,a.useEffect)(()=>{"basic"===H&&$(),"installed"===H&&Q()},[H,$,Q]);let et=(0,a.useCallback)(()=>{X()},[X]);(0,a.useEffect)(()=>{"basic"===H&&P([...k])},[H,k,j]);let ea=(0,a.useCallback)(e=>{let t=[...new Set(e)].sort();f({skills:t}),Y(t,!0)},[f,Y]),el=(0,a.useMemo)(()=>z.slice().sort((e,t)=>e.label.localeCompare(t.label)).map(e=>({name:e.id,installed:!0,description:e.description||"",enabled:k.includes(e.id)})),[z,k]),es=(0,a.useCallback)((e,t)=>{let a=t?[...new Set([...k,e])].sort():k.filter(t=>t!==e);f({skills:a}),P(a),Y(a,!0)},[k,f,Y]),en=(0,a.useCallback)(t=>{window.open((0,h.exportRuntimeSkillUrl)(e,m,g(),t),"_blank","noopener")},[e,m,g]),er=(0,a.useCallback)(e=>{W(e.id),G(!0)},[]),ei=[{key:"name",title:"名称",headerClassName:"text-base text-[var(--ds-muted)]",cellClassName:"text-base text-[var(--ds-text)]",render:e=>e.label},{key:"description",title:"详情",headerClassName:"text-base text-[var(--ds-muted)]",cellClassName:"text-base text-[var(--ds-text)]",render:e=>e.description||"-"},{key:"enabled",title:"启用/未启用",headerClassName:"w-[102px] text-right text-base text-[var(--ds-muted)]",cellClassName:"w-[102px] py-2 text-right align-middle",render:e=>(0,t.jsx)("span",{className:"inline-flex justify-end",children:(0,t.jsx)(d.AccentSwitch,{checked:R.includes(e.id),disabled:_,onCheckedChange:t=>{let a=t?[...new Set([...R,e.id])]:R.filter(t=>t!==e.id);P(a),ea(a)},"aria-label":"选择 ".concat(e.label)})})},{key:"actions",title:"操作",headerClassName:"w-[104px] text-right text-base text-[var(--ds-muted)]",cellClassName:"w-[104px] py-2 text-right align-middle",render:e=>(0,t.jsxs)("span",{className:"inline-flex justify-end gap-1",children:[(0,t.jsx)(u.IconTooltipButton,{icon:"Edit",label:"编辑",disabled:_,ariaLabel:"编辑 ".concat(e.label),onClick:()=>er(e)}),(0,t.jsx)(u.IconTooltipButton,{icon:"Trash2",label:"系统技能不可删除",tone:"danger",disabled:!0,ariaLabel:"删除 ".concat(e.label)})]})}];return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(A.ManageChromeHeaderActions,{children:(0,t.jsxs)(c.Button,{id:"btnAgentImportSkill",type:"button",variant:"plain-outline",size:"lg",className:"inline-flex items-center justify-center gap-1.5",onClick:()=>V(!0),children:[(0,t.jsx)(p.default,{name:"Import",size:16,className:"align-middle"}),"导入Skill"]})}),(0,t.jsxs)(i.AppTabs,{tabs:M,value:H,listVariant:"line",onChange:e=>J(e),children:[(0,t.jsx)(i.AppTabsPanel,{value:"basic",children:(0,t.jsx)("div",{className:"flex min-h-0 flex-1 flex-col gap-3",children:(0,t.jsx)("div",{className:"min-h-0",children:O?(0,t.jsx)("p",{className:"px-3 py-6 text-center text-base text-[var(--ds-muted)]",children:"加载中…"}):(0,t.jsx)(o.AppTable,{rows:I,columns:ei,getRowKey:e=>e.id})})})}),(0,t.jsx)(i.AppTabsPanel,{value:"installed",children:U?(0,t.jsx)("p",{className:"px-3 py-6 text-center text-base text-[var(--ds-muted)]",children:"加载中…"}):(0,t.jsx)(N,{items:el,saveBusy:_,onToggleEnabled:es,onExport:en,onRemove:ee})}),(0,t.jsx)(i.AppTabsPanel,{value:"cloud_catalog",className:"flex min-h-0 flex-1 flex-col",children:(0,t.jsx)(v,{active:"cloud_catalog"===H,wsUrl:e,apiBase:m,agent:g(),onAfterInstall:et,className:"min-h-0 flex-1"})})]}),(0,t.jsx)(C,{open:K,onOpenChange:e=>{V(e),e||X()},wsUrl:e,apiBase:m,agent:g()}),(0,t.jsx)(S,{open:Z,onOpenChange:G,skillName:q,wsUrl:e,apiBase:m,agent:g(),onSaved:()=>void X()})]})}},69230,e=>{"use strict";e.s(["SettingsRouteBoundary",()=>i]);var t=e.i(18050),a=e.i(22016),l=e.i(18566),s=e.i(82787),n=e.i(97249),r=e.i(65934);function i(e){let{children:i}=e,o=(0,l.usePathname)(),c=(0,r.useAppStore)(e=>e.agentId),d=(0,n.buildAppNavHref)(s.MANAGE_DEFAULT_HREF,{ensureAgent:!0,agent:c});return o&&!(0,s.isManageRouteEnabled)((0,n.normalizeAppPathname)(o))?(0,t.jsxs)("div",{className:"manage-page-wrap flex min-h-0 flex-1 flex-col",children:[(0,t.jsx)("div",{className:"manage-page-header flex shrink-0 items-start justify-between gap-4 pb-4",children:(0,t.jsxs)("div",{className:"manage-page-title-block",children:[(0,t.jsx)("h1",{className:"manage-page-title",children:"页面不可用"}),(0,t.jsx)("p",{className:"manage-page-desc",children:"当前设置页未开放或已被禁用。"})]})}),(0,t.jsx)("div",{className:"manage-page-body flex min-h-0 min-w-0 flex-1 flex-col items-center justify-center gap-3 text-sm text-[var(--ds-muted)]",children:(0,t.jsx)(a.default,{className:"text-zinc-900 underline underline-offset-4",href:d,prefetch:!1,children:"返回默认设置页"})})]}):(0,t.jsx)(t.Fragment,{children:i})}}]);
@@ -0,0 +1 @@
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,56708,e=>{"use strict";e.s(["ManageChromeHeaderActions",()=>n,"ManageFeatureChrome",()=>o]);var r=e.i(18050),t=e.i(71645),a=e.i(74080),s=e.i(72064);let l=(0,t.createContext)(null);function o(e){let{title:a,description:o,children:n,showTitle:i=!0,headerIcon:d}=e,[c,u]=(0,t.useState)(null);return(0,r.jsxs)("div",{className:"manage-page-wrap flex min-h-0 flex-1 flex-col",children:[(0,r.jsxs)("div",{className:"manage-page-header flex shrink-0 items-start justify-between gap-[var(--space-4)] pb-[var(--space-4)]",children:[i?(0,r.jsxs)("div",{className:"manage-page-title-block flex items-center",children:[d&&(0,r.jsx)("div",{className:"mr-3 rounded-md bg-[var(--green-light)] px-4 py-3",children:(0,r.jsx)(s.default,{name:d,size:24,className:"text-[var(--green-dark)]",strokeWidth:1.5})}),(0,r.jsxs)("div",{className:"pt-3",children:[(0,r.jsx)("h1",{className:"manage-page-title",children:a}),(0,r.jsx)("p",{className:"manage-page-desc",children:o})]})]}):null,(0,r.jsx)("div",{ref:u,className:"manage-page-header-actions self-start"})]}),(0,r.jsx)("div",{className:"manage-page-body flex min-h-0 min-w-0 flex-1 flex-col",children:(0,r.jsx)(l.Provider,{value:c,children:n})})]})}function n(e){let{children:r}=e,s=(0,t.useContext)(l);return(0,t.useSyncExternalStore)(()=>()=>{},()=>!0,()=>!1)&&s?(0,a.createPortal)(r,s):null}},94197,e=>{"use strict";e.s(["IconTooltipButton",()=>n]);var r=e.i(18050),t=e.i(72064),a=e.i(19455),s=e.i(46798),l=e.i(75157);let o={muted:"text-[var(--ds-muted)] hover:text-[var(--ds-text)]",danger:"text-red-600 hover:text-red-800 [&_svg]:!text-red-600 hover:[&_svg]:!text-red-800"};function n(e){let{icon:n,label:i,ariaLabel:d,tone:c="muted",disabled:u,className:b,iconClassName:f,onClick:m}=e;return(0,r.jsx)(s.TooltipProvider,{delayDuration:150,children:(0,r.jsxs)(s.Tooltip,{children:[(0,r.jsx)(s.TooltipTrigger,{asChild:!0,children:(0,r.jsx)(a.Button,{type:"button",variant:"plain",size:"icon",className:(0,l.cn)("icon-tooltip-btn","h-4 w-4",o[c],b),disabled:u,"aria-label":null!=d?d:i,onClick:m,children:(0,r.jsx)(t.default,{name:n,size:16,className:f})})}),(0,r.jsx)(s.TooltipContent,{side:"bottom",align:"center",className:"text-base",children:i})]})})}},92715,e=>{"use strict";e.s(["AppTable",()=>b],92715);var r=e.i(18050),t=e.i(75157),a=e.i(72064);function s(e){let{text:s="暂无数据",className:l}=e;return(0,r.jsxs)("div",{className:(0,t.cn)("flex min-h-[180px] w-full flex-col items-center justify-center gap-2 py-4 text-base text-[var(--ds-muted)]",l),role:"status","aria-live":"polite",children:[(0,r.jsx)(a.default,{name:"NoData",size:80,color:"var(--ds-muted)",className:"opacity-90"}),(0,r.jsx)("span",{children:s})]})}var l=e.i(71645);let o=l.forwardRef((e,a)=>{let{className:s,...l}=e;return(0,r.jsx)("div",{className:"relative w-full overflow-auto",children:(0,r.jsx)("table",{ref:a,className:(0,t.cn)("w-full caption-bottom border-collapse text-sm",s),...l})})});o.displayName="Table";let n=l.forwardRef((e,a)=>{let{className:s,...l}=e;return(0,r.jsx)("thead",{ref:a,className:(0,t.cn)("[&_tr]:table [&_tr]:w-full [&_tr]:table-fixed [&_tr]:border-b",s),...l})});n.displayName="TableHeader";let i=l.forwardRef((e,a)=>{let{className:s,viewportFit:o=!0,viewportReserveBottom:n=16,viewportPaginationReserve:i=0,style:d,...c}=e,u=l.useRef(null),b=l.useCallback(e=>{u.current=e,"function"==typeof a?a(e):a&&(a.current=e)},[a]),[f,m]=l.useState(void 0);return l.useLayoutEffect(()=>{var e,r;if(!o)return void m(void 0);let t=()=>{var e,r;let t=u.current;if(!t)return;let a=t.getBoundingClientRect().top;m(Math.max(80,Math.floor((null!=(r=null==(e=window.visualViewport)?void 0:e.height)?r:window.innerHeight)-a-(n+i))))};t();let a=new ResizeObserver(()=>{t()});try{a.observe(document.body)}catch(e){}return window.addEventListener("resize",t),null==(e=window.visualViewport)||e.addEventListener("resize",t),null==(r=window.visualViewport)||r.addEventListener("scroll",t),window.addEventListener("scroll",t,!0),()=>{var e,r;a.disconnect(),window.removeEventListener("resize",t),null==(e=window.visualViewport)||e.removeEventListener("resize",t),null==(r=window.visualViewport)||r.removeEventListener("scroll",t),window.removeEventListener("scroll",t,!0)}},[o,n,i]),(0,r.jsx)("tbody",{ref:b,className:(0,t.cn)("block overflow-y-auto [&_tr:last-child]:border-b-0 [&_tr:last-child_td]:border-b-0 [&_tr]:table [&_tr]:w-full [&_tr]:table-fixed",s),style:o&&void 0!==f?{...d,maxHeight:f}:d,...c})});i.displayName="TableBody";let d=l.forwardRef((e,a)=>{let{className:s,hoverable:l=!0,...o}=e;return(0,r.jsx)("tr",{ref:a,className:(0,t.cn)("border-b transition-colors [&>td]:transition-colors data-[state=selected]:[&>td]:!bg-[var(--ds-item-active)]",l&&"group/table-row",s),...o})});d.displayName="TableRow";let c=l.forwardRef((e,a)=>{let{className:s,...l}=e;return(0,r.jsx)("th",{ref:a,className:(0,t.cn)("h-10 border-b border-[var(--border-subtle)] bg-[var(--surface-2)] px-3 text-left align-middle text-[14px] font-medium !text-[var(--ds-text)] text-muted-foreground",s),...l})});c.displayName="TableHead";let u=l.forwardRef((e,a)=>{let{className:s,...l}=e;return(0,r.jsx)("td",{ref:a,className:(0,t.cn)("border-x-0 border-b border-t-0 border-solid border-[var(--border-subtle)] p-3 align-middle text-base transition-colors group-has-[td:hover]/table-row:!bg-[var(--ds-item-hover)]",s),...l})});function b(e){let{rows:a,columns:l,getRowKey:b,className:f,rowClassName:m,headerRowClassName:v,emptyText:h,emptyNode:x,bodyProps:p}=e;return(0,r.jsx)("div",{className:(0,t.cn)("overflow-hidden border border-[var(--ds-border)]",f),children:(0,r.jsxs)(o,{children:[(0,r.jsx)(n,{children:(0,r.jsx)(d,{className:(0,t.cn)("bg-[var(--ds-main-tint)] hover:bg-[var(--ds-main-tint)]",v),children:l.map(e=>(0,r.jsx)(c,{className:e.headerClassName,children:e.title},e.key))})}),(0,r.jsx)(i,{...p,children:a.length?a.map(e=>(0,r.jsx)(d,{className:"function"==typeof m?m(e):m,children:l.map(t=>(0,r.jsx)(u,{className:t.cellClassName,children:t.render(e)},t.key))},b(e))):(0,r.jsx)(d,{hoverable:!1,children:(0,r.jsx)(u,{colSpan:l.length,className:"py-6",children:null!=x?x:(0,r.jsx)(s,{text:h})})})})]})})}u.displayName="TableCell"},93479,e=>{"use strict";e.s(["Input",()=>a]);var r=e.i(18050),t=e.i(75157);function a(e){let{className:a,type:s="text",size:l="default",...o}=e;return(0,r.jsx)("input",{type:s,"data-slot":"input","data-size":l,className:(0,t.cn)("h-9 w-full appearance-none rounded-md border border-solid border-border bg-transparent px-3 text-base outline-none transition-[color,box-shadow,border-color] duration-150 ease-in-out placeholder:text-muted-foreground hover:border-[#e0e0e0] focus-visible:border-[var(--border-focus)] focus-visible:[box-shadow:var(--ring-focus-sm)] read-only:focus-visible:border-border read-only:focus-visible:[box-shadow:none] disabled:cursor-not-allowed disabled:opacity-50 disabled:focus-visible:border-border disabled:focus-visible:[box-shadow:none] data-[size=default]:h-9 data-[size=lg]:h-10 data-[size=sm]:h-7",a),...o})}},20783,e=>{"use strict";e.s(["composeRefs",()=>a,"useComposedRefs",()=>s]);var r=e.i(71645);function t(e,r){if("function"==typeof e)return e(r);null!=e&&(e.current=r)}function a(){for(var e=arguments.length,r=Array(e),a=0;a<e;a++)r[a]=arguments[a];return e=>{let a=!1,s=r.map(r=>{let s=t(r,e);return a||"function"!=typeof s||(a=!0),s});if(a)return()=>{for(let e=0;e<s.length;e++){let a=s[e];"function"==typeof a?a():t(r[e],null)}}}}function s(){for(var e=arguments.length,t=Array(e),s=0;s<e;s++)t[s]=arguments[s];return r.useCallback(a(...t),t)}},57428,e=>{"use strict";e.s(["Checkbox",()=>l]);var r=e.i(18050),t=e.i(71645),a=e.i(72064),s=e.i(75157);let l=t.forwardRef(function(e,l){let{className:o,size:n="default",checked:i,defaultChecked:d,disabled:c,id:u,onChange:b,...f}=e,m=void 0!==i,[v,h]=t.useState(!!d),x=m?!!i:v;return(0,r.jsxs)("span",{"data-slot":"checkbox","data-size":n,"data-checked":x?"true":"false",className:(0,s.cn)("relative inline-flex shrink-0 items-center justify-center rounded-sm border border-solid border-border bg-transparent outline-none transition-[color,box-shadow,border-color,background-color] duration-150 ease-in-out","has-[:focus-visible]:border-[var(--border-focus)] has-[:focus-visible]:[box-shadow:var(--ring-focus-sm)]","has-[:disabled]:cursor-not-allowed has-[:disabled]:opacity-50","data-[size=default]:size-4 data-[size=sm]:size-3.5",x?"border-[var(--ds-accent)] bg-[var(--ds-accent)]":"bg-transparent",o),children:[x?(0,r.jsx)(a.default,{name:"Check",className:(0,s.cn)("pointer-events-none text-[var(--surface-1)] [&_path]:!fill-none","sm"===n?"size-3":"size-3.5"),strokeWidth:2.25,"aria-hidden":"true"}):null,(0,r.jsx)("input",{ref:l,id:u,type:"checkbox",checked:m?i:void 0,defaultChecked:m?void 0:d,disabled:c,className:"absolute inset-0 m-0 size-full cursor-pointer opacity-0 disabled:cursor-not-allowed",onChange:e=>{m||h(e.target.checked),null==b||b(e)},...f})]})})}]);
@@ -0,0 +1 @@
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,56708,e=>{"use strict";e.s(["ManageChromeHeaderActions",()=>s,"ManageFeatureChrome",()=>i]);var t=e.i(18050),r=e.i(71645),l=e.i(74080),a=e.i(72064);let n=(0,r.createContext)(null);function i(e){let{title:l,description:i,children:s,showTitle:o=!0,headerIcon:d}=e,[c,u]=(0,r.useState)(null);return(0,t.jsxs)("div",{className:"manage-page-wrap flex min-h-0 flex-1 flex-col",children:[(0,t.jsxs)("div",{className:"manage-page-header flex shrink-0 items-start justify-between gap-[var(--space-4)] pb-[var(--space-4)]",children:[o?(0,t.jsxs)("div",{className:"manage-page-title-block flex items-center",children:[d&&(0,t.jsx)("div",{className:"mr-3 rounded-md bg-[var(--green-light)] px-4 py-3",children:(0,t.jsx)(a.default,{name:d,size:24,className:"text-[var(--green-dark)]",strokeWidth:1.5})}),(0,t.jsxs)("div",{className:"pt-3",children:[(0,t.jsx)("h1",{className:"manage-page-title",children:l}),(0,t.jsx)("p",{className:"manage-page-desc",children:i})]})]}):null,(0,t.jsx)("div",{ref:u,className:"manage-page-header-actions self-start"})]}),(0,t.jsx)("div",{className:"manage-page-body flex min-h-0 min-w-0 flex-1 flex-col",children:(0,t.jsx)(n.Provider,{value:c,children:s})})]})}function s(e){let{children:t}=e,a=(0,r.useContext)(n);return(0,r.useSyncExternalStore)(()=>()=>{},()=>!0,()=>!1)&&a?(0,l.createPortal)(t,a):null}},94197,e=>{"use strict";e.s(["IconTooltipButton",()=>s]);var t=e.i(18050),r=e.i(72064),l=e.i(19455),a=e.i(46798),n=e.i(75157);let i={muted:"text-[var(--ds-muted)] hover:text-[var(--ds-text)]",danger:"text-red-600 hover:text-red-800 [&_svg]:!text-red-600 hover:[&_svg]:!text-red-800"};function s(e){let{icon:s,label:o,ariaLabel:d,tone:c="muted",disabled:u,className:f,iconClassName:m,onClick:p}=e;return(0,t.jsx)(a.TooltipProvider,{delayDuration:150,children:(0,t.jsxs)(a.Tooltip,{children:[(0,t.jsx)(a.TooltipTrigger,{asChild:!0,children:(0,t.jsx)(l.Button,{type:"button",variant:"plain",size:"icon",className:(0,n.cn)("icon-tooltip-btn","h-4 w-4",i[c],f),disabled:u,"aria-label":null!=d?d:o,onClick:p,children:(0,t.jsx)(r.default,{name:s,size:16,className:m})})}),(0,t.jsx)(a.TooltipContent,{side:"bottom",align:"center",className:"text-base",children:o})]})})}},92715,e=>{"use strict";e.s(["AppTable",()=>f],92715);var t=e.i(18050),r=e.i(75157),l=e.i(72064);function a(e){let{text:a="暂无数据",className:n}=e;return(0,t.jsxs)("div",{className:(0,r.cn)("flex min-h-[180px] w-full flex-col items-center justify-center gap-2 py-4 text-base text-[var(--ds-muted)]",n),role:"status","aria-live":"polite",children:[(0,t.jsx)(l.default,{name:"NoData",size:80,color:"var(--ds-muted)",className:"opacity-90"}),(0,t.jsx)("span",{children:a})]})}var n=e.i(71645);let i=n.forwardRef((e,l)=>{let{className:a,...n}=e;return(0,t.jsx)("div",{className:"relative w-full overflow-auto",children:(0,t.jsx)("table",{ref:l,className:(0,r.cn)("w-full caption-bottom border-collapse text-sm",a),...n})})});i.displayName="Table";let s=n.forwardRef((e,l)=>{let{className:a,...n}=e;return(0,t.jsx)("thead",{ref:l,className:(0,r.cn)("[&_tr]:table [&_tr]:w-full [&_tr]:table-fixed [&_tr]:border-b",a),...n})});s.displayName="TableHeader";let o=n.forwardRef((e,l)=>{let{className:a,viewportFit:i=!0,viewportReserveBottom:s=16,viewportPaginationReserve:o=0,style:d,...c}=e,u=n.useRef(null),f=n.useCallback(e=>{u.current=e,"function"==typeof l?l(e):l&&(l.current=e)},[l]),[m,p]=n.useState(void 0);return n.useLayoutEffect(()=>{var e,t;if(!i)return void p(void 0);let r=()=>{var e,t;let r=u.current;if(!r)return;let l=r.getBoundingClientRect().top;p(Math.max(80,Math.floor((null!=(t=null==(e=window.visualViewport)?void 0:e.height)?t:window.innerHeight)-l-(s+o))))};r();let l=new ResizeObserver(()=>{r()});try{l.observe(document.body)}catch(e){}return window.addEventListener("resize",r),null==(e=window.visualViewport)||e.addEventListener("resize",r),null==(t=window.visualViewport)||t.addEventListener("scroll",r),window.addEventListener("scroll",r,!0),()=>{var e,t;l.disconnect(),window.removeEventListener("resize",r),null==(e=window.visualViewport)||e.removeEventListener("resize",r),null==(t=window.visualViewport)||t.removeEventListener("scroll",r),window.removeEventListener("scroll",r,!0)}},[i,s,o]),(0,t.jsx)("tbody",{ref:f,className:(0,r.cn)("block overflow-y-auto [&_tr:last-child]:border-b-0 [&_tr:last-child_td]:border-b-0 [&_tr]:table [&_tr]:w-full [&_tr]:table-fixed",a),style:i&&void 0!==m?{...d,maxHeight:m}:d,...c})});o.displayName="TableBody";let d=n.forwardRef((e,l)=>{let{className:a,hoverable:n=!0,...i}=e;return(0,t.jsx)("tr",{ref:l,className:(0,r.cn)("border-b transition-colors [&>td]:transition-colors data-[state=selected]:[&>td]:!bg-[var(--ds-item-active)]",n&&"group/table-row",a),...i})});d.displayName="TableRow";let c=n.forwardRef((e,l)=>{let{className:a,...n}=e;return(0,t.jsx)("th",{ref:l,className:(0,r.cn)("h-10 border-b border-[var(--border-subtle)] bg-[var(--surface-2)] px-3 text-left align-middle text-[14px] font-medium !text-[var(--ds-text)] text-muted-foreground",a),...n})});c.displayName="TableHead";let u=n.forwardRef((e,l)=>{let{className:a,...n}=e;return(0,t.jsx)("td",{ref:l,className:(0,r.cn)("border-x-0 border-b border-t-0 border-solid border-[var(--border-subtle)] p-3 align-middle text-base transition-colors group-has-[td:hover]/table-row:!bg-[var(--ds-item-hover)]",a),...n})});function f(e){let{rows:l,columns:n,getRowKey:f,className:m,rowClassName:p,headerRowClassName:v,emptyText:b,emptyNode:h,bodyProps:x}=e;return(0,t.jsx)("div",{className:(0,r.cn)("overflow-hidden border border-[var(--ds-border)]",m),children:(0,t.jsxs)(i,{children:[(0,t.jsx)(s,{children:(0,t.jsx)(d,{className:(0,r.cn)("bg-[var(--ds-main-tint)] hover:bg-[var(--ds-main-tint)]",v),children:n.map(e=>(0,t.jsx)(c,{className:e.headerClassName,children:e.title},e.key))})}),(0,t.jsx)(o,{...x,children:l.length?l.map(e=>(0,t.jsx)(d,{className:"function"==typeof p?p(e):p,children:n.map(r=>(0,t.jsx)(u,{className:r.cellClassName,children:r.render(e)},r.key))},f(e))):(0,t.jsx)(d,{hoverable:!1,children:(0,t.jsx)(u,{colSpan:n.length,className:"py-6",children:null!=h?h:(0,t.jsx)(a,{text:b})})})})]})})}u.displayName="TableCell"},62427,e=>{"use strict";e.s(["clearRuntimeMcpItemConfig",()=>w,"deleteRuntimeMcp",()=>f,"deleteRuntimeSkill",()=>j,"deleteRuntimeTool",()=>u,"exportRuntimeMcpUrl",()=>p,"exportRuntimeSkillUrl",()=>N,"exportRuntimeToolUrl",()=>m,"importRuntimeMcp",()=>b,"importRuntimeTool",()=>v,"installCloudSkill",()=>C,"listBaseSkills",()=>n,"listCloudSkillCatalog",()=>k,"listInstalledSkills",()=>i,"listInstalledTools",()=>a,"listMcpServers",()=>l,"listRuntimeMcpPackages",()=>c,"listRuntimeTools",()=>d,"loadBaseSkillMd",()=>s,"loadRemoteMcpJson",()=>h,"loadRuntimeMcpItemConfig",()=>g,"saveBaseSkillMd",()=>o,"saveRemoteMcpJson",()=>x,"saveRuntimeMcpItemConfig",()=>y]);var t=e.i(29250),r=e.i(36845);async function l(e,l,a){let n=await (0,t.get)((0,r.buildMcpServersListUrl)(e,l,a));return{servers:Array.isArray(n.servers)?n.servers:[]}}async function a(e,l,a){let n=await (0,t.get)((0,r.buildToolInstalledListUrl)(e,l,a));return{tools:Array.isArray(n.tools)?n.tools:[]}}async function n(e,l,a){let n=await (0,t.get)((0,r.buildSkillBaseListUrl)(e,l,a));return{skills:Array.isArray(n.skills)?n.skills:[]}}async function i(e,l,a){let n=await (0,t.get)((0,r.buildSkillInstalledListUrl)(e,l,a));return{skills:Array.isArray(n.skills)?n.skills:[]}}async function s(e,l,a,n){return(0,t.get)((0,r.buildBaseSkillMdUrl)(e,l,a,n))}async function o(e,l,a,n,i){await (0,t.put)((0,r.buildBaseSkillMdUrl)(e,l,a,n),{content:i})}async function d(e,l,a){let n=await (0,t.get)((0,r.buildToolsRuntimeFilesUrl)(e,l,a));return{runtimeToolsDir:"string"==typeof n.runtimeToolsDir?n.runtimeToolsDir:"",items:Array.isArray(n.items)?n.items.filter(e=>!!(e&&e.id)):[]}}async function c(e,l,a){let n=await (0,t.get)((0,r.buildMcpRuntimeFilesUrl)(e,l,a));return{mcpRuntimeDir:"string"==typeof n.mcpRuntimeDir?n.mcpRuntimeDir:"",items:Array.isArray(n.items)?n.items.filter(e=>!!(e&&e.id)):[]}}async function u(e,l,a,n){return(0,t.del)((0,r.buildToolsRuntimeDeleteUrl)(e,l,a,n))}async function f(e,l,a,n){return(0,t.del)((0,r.buildMcpRuntimeDeleteUrl)(e,l,a,n))}function m(e,t,l,a){return(0,r.buildToolsRuntimeExportUrl)(e,t,l,a)}function p(e,t,l,a){return(0,r.buildMcpRuntimeExportUrl)(e,t,l,a)}async function v(e,l,a,n){let i=new FormData;return i.append("file",n),(0,t.post)((0,r.buildToolsRuntimeImportUrl)(e,l,a),i,{type:"file"})}async function b(e,l,a,n){let i=new FormData;return i.append("file",n),(0,t.post)((0,r.buildMcpRuntimeImportUrl)(e,l,a),i,{type:"file"})}async function h(e,l,a){return(0,t.get)((0,r.buildRemoteMcpJsonUrl)(e,l,a))}async function x(e,l,a,n){await (0,t.post)((0,r.buildRemoteMcpJsonUrl)(e,l,a),{content:n})}async function g(e,l,a,n,i){return(0,t.get)((0,r.buildRuntimeMcpItemConfigUrl)(e,l,a,n,i))}async function y(e,l,a,n,i,s){await (0,t.put)((0,r.buildRuntimeMcpItemConfigUrl)(e,l,a,n,i),{server:s})}async function w(e,l,a,n,i){await (0,t.del)((0,r.buildRuntimeMcpItemConfigUrl)(e,l,a,n,i))}async function j(e,l,a,n){return(0,t.del)((0,r.buildSkillsRuntimeDeleteUrl)(e,l,a,n))}function N(e,t,l,a){return(0,r.buildSkillsRuntimeExportUrl)(e,t,l,a)}async function k(e,l,a,n,i,s){let o=await (0,t.get)((0,r.buildCloudSkillCatalogUrl)(e,l,a,n,i,s));return{items:Array.isArray(o.items)?o.items:[],totalPages:Number(o.totalPages||0)}}async function C(e,l,a,n){await (0,t.post)((0,r.buildCloudSkillInstallUrl)(e,l,a),{id:n})}},94055,53925,e=>{"use strict";e.s(["AccentSwitch",()=>I],94055);var t=e.i(18050);e.s(["Root",()=>S,"Thumb",()=>O],39606),e.s([],37751),e.i(37751),e.i(47167);var r=e.i(71645),l=e.i(94349),a=e.i(76477),n=e.i(26292),i=e.i(977),s=e.i(62372),o=e.i(17514),d=e.i(27601),c=e.i(19805),u=e.i(89879),f=e.i(91730),m=e.i(67805);let p=r.createContext(void 0),v=function(e){return e.disabled="data-disabled",e.valid="data-valid",e.invalid="data-invalid",e.touched="data-touched",e.dirty="data-dirty",e.filled="data-filled",e.focused="data-focused",e}({}),b={valid:null,touched:!1,dirty:!1,filled:!1,focused:!1},h={disabled:!1,...b},x=function(e){return e.checked="data-checked",e.unchecked="data-unchecked",e.disabled="data-disabled",e.readonly="data-readonly",e.required="data-required",e.valid="data-valid",e.invalid="data-invalid",e.touched="data-touched",e.dirty="data-dirty",e.filled="data-filled",e.focused="data-focused",e}({}),g={valid:e=>null===e?null:e?{[v.valid]:""}:{[v.invalid]:""},checked:e=>e?{[x.checked]:""}:{[x.unchecked]:""}},y=r.createContext({invalid:void 0,name:void 0,validityData:{state:{badInput:!1,customError:!1,patternMismatch:!1,rangeOverflow:!1,rangeUnderflow:!1,stepMismatch:!1,tooLong:!1,tooShort:!1,typeMismatch:!1,valid:null,valueMissing:!1},errors:[],error:"",value:"",initialValue:null},setValidityData:o.NOOP,disabled:void 0,touched:b.touched,setTouched:o.NOOP,dirty:b.dirty,setDirty:o.NOOP,filled:b.filled,setFilled:o.NOOP,focused:b.focused,setFocused:o.NOOP,validate:()=>null,validationMode:"onSubmit",validationDebounceTime:0,shouldValidateOnChange:()=>!1,state:h,markedDirtyRef:{current:!1},registerFieldControl:o.NOOP,validation:{getValidationProps:function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:o.EMPTY_OBJECT;return e},getInputValidationProps:function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:o.EMPTY_OBJECT;return e},inputRef:{current:null},commit:async()=>{}}});function w(){let e=!(arguments.length>0)||void 0===arguments[0]||arguments[0],t=r.useContext(y);if(t.setValidityData===o.NOOP&&!e)throw Error((0,m.default)(28));return t}let j=r.createContext({formRef:{current:{fields:new Map}},errors:{},clearErrors:o.NOOP,validationMode:"onSubmit",submitAttemptedRef:{current:!1}}),N=r.createContext({controlId:void 0,registerControlId:o.NOOP,labelId:void 0,setLabelId:o.NOOP,messageIds:[],setMessageIds:o.NOOP,getDescriptionProps:e=>e});function k(){return r.useContext(N)}var C=e.i(30628),R=e.i(29315),T=e.i(5963),M=e.i(3404),E=e.i(19904);let S=r.forwardRef(function(e,m){let{checked:v,className:b,defaultChecked:h,"aria-labelledby":x,form:y,id:N,inputRef:S,name:O,nativeButton:U=!1,onCheckedChange:D,readOnly:P=!1,required:I=!1,disabled:B=!1,render:L,uncheckedValue:A,value:z,style:_,...F}=e,{clearErrors:V}=r.useContext(j),{state:H,setTouched:K,setDirty:J,validityData:W,setFilled:q,setFocused:Y,shouldValidateOnChange:X,validationMode:G,disabled:Q,name:Z,validation:$}=w(),{labelId:ee}=k(),et=Q||B,er=null!=Z?Z:O,el=(0,a.useStableCallback)(D),ea=r.useRef(null),en=(0,n.useMergedRefs)(ea,S,$.inputRef),ei=r.useRef(null),es=(0,u.useBaseUiId)(),eo=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{id:t,implicit:l=!1,controlRef:n}=e,{controlId:s,registerControlId:d}=k(),c=(0,u.useBaseUiId)(t),f=l?s:void 0,m=(0,C.useRefWithInit)(()=>Symbol("labelable-control")),p=r.useRef(!1),v=r.useRef(null!=t),b=(0,a.useStableCallback)(()=>{p.current&&d!==o.NOOP&&(p.current=!1,d(m.current,void 0))});return(0,i.useIsoLayoutEffect)(()=>{let e;if(d!==o.NOOP){if(l){let r=null==n?void 0:n.current;e=(0,R.isElement)(r)&&null!=r.closest("label")?null!=t?t:null:null!=f?f:c}else if(null!=t)v.current=!0,e=t;else{if(!v.current)return void b();e=c}if(void 0===e)return void b();p.current=!0,d(m.current,e)}},[t,n,f,d,l,c,m,b]),r.useEffect(()=>b,[b]),null!=s?s:c}({id:N,implicit:!1,controlRef:ei}),ed=U?void 0:eo,[ec,eu]=(0,l.useControlled)({controlled:v,default:!!h,name:"Switch",state:"checked"});!function(e,t){let{enabled:l=!0,getValue:a,id:n,value:s}=t,{registerFieldControl:o}=w(),d=r.useRef(null);d.current||(d.current=Symbol()),(0,i.useIsoLayoutEffect)(()=>{let t=d.current;if(t&&l)return o(t,{controlRef:e,getValue:a,id:n,value:s}),()=>{o(t,void 0)}},[e,l,a,n,o,s])}(ei,{id:es,value:ec}),(0,i.useIsoLayoutEffect)(()=>{ea.current&&q(ea.current.checked)},[ea,q]),(0,E.useValueChanged)(ec,()=>{V(er),J(ec!==W.initialValue),q(ec),X()?$.commit(ec):$.commit(ec,!0)});let{getButtonProps:ef,buttonRef:em}=(0,f.useButton)({disabled:et,native:U}),ep=function(e,t,l){var a;let n=!(arguments.length>3)||void 0===arguments[3]||arguments[3],s=arguments.length>4?arguments[4]:void 0,[o,d]=r.useState(),c=(0,u.useBaseUiId)(s?"".concat(s,"-label"):void 0),f=null!=(a=null!=e?e:t)?a:o;return(0,i.useIsoLayoutEffect)(()=>{let r=e||t||!n?void 0:function(e,t){let r=function(e){if(!e)return;let t=e.parentElement;if(t&&"LABEL"===t.tagName)return t;let r=e.id;if(r){let t=e.nextElementSibling;if(t&&t.htmlFor===r)return t}let l=e.labels;return l&&l[0]}(e);if(r)return!r.id&&t&&(r.id=t),r.id||void 0}(l.current,c);o!==r&&d(r)}),f}(x,ee,ea,!U,ed),ev=r.useMemo(()=>(0,c.mergeProps)({checked:ec,disabled:et,form:y,id:ed,name:er,required:I,style:er?s.visuallyHiddenInput:s.visuallyHidden,tabIndex:-1,type:"checkbox","aria-hidden":!0,ref:en,onChange(e){if(e.nativeEvent.defaultPrevented)return;if(P)return void e.preventDefault();let t=e.currentTarget.checked,r=(0,T.createChangeEventDetails)(M.REASONS.none,e.nativeEvent);null==el||el(t,r),r.isCanceled||eu(t)},onFocus(){var e;null==(e=ei.current)||e.focus()}},$.getInputValidationProps,void 0!==z?{value:z}:o.EMPTY_OBJECT),[ec,et,y,en,ed,er,el,P,I,eu,$,z]),eb=r.useMemo(()=>({...H,checked:ec,disabled:et,readOnly:P,required:I}),[H,ec,et,P,I]),eh=(0,d.useRenderElement)("span",e,{state:eb,ref:[m,ei,em],props:[{id:U?eo:es,role:"switch","aria-checked":ec,"aria-readonly":P||void 0,"aria-required":I||void 0,"aria-labelledby":ep,onFocus(){et||Y(!0)},onBlur(){let e=ea.current;e&&!et&&(K(!0),Y(!1),"onBlur"===G&&$.commit(e.checked))},onClick(e){var t;P||et||(e.preventDefault(),null==(t=ea.current)||t.dispatchEvent(new PointerEvent("click",{bubbles:!0,shiftKey:e.shiftKey,ctrlKey:e.ctrlKey,altKey:e.altKey,metaKey:e.metaKey})))}},$.getValidationProps,F,ef],stateAttributesMapping:g});return(0,t.jsxs)(p.Provider,{value:eb,children:[eh,!ec&&er&&void 0!==A&&(0,t.jsx)("input",{type:"hidden",form:y,name:er,value:A}),(0,t.jsx)("input",{...ev,suppressHydrationWarning:!0})]})}),O=r.forwardRef(function(e,t){let{render:l,className:a,style:n,...i}=e,{state:s}=w(),o=function(){let e=r.useContext(p);if(void 0===e)throw Error((0,m.default)(63));return e}(),c={...s,...o};return(0,d.useRenderElement)("span",e,{state:c,ref:t,stateAttributesMapping:g,props:i})});var U=e.i(39606),U=U,D=e.i(75157);function P(e){let{className:r,thumbClassName:l,...a}=e;return(0,t.jsx)(U.Root,{"data-slot":"switch",className:(0,D.cn)("shadow-xs focus-visible:ring-ring/50 dark:data-[unchecked]:bg-input/80 peer inline-flex h-5 w-9 shrink-0 cursor-pointer items-center rounded-full border border-transparent bg-input outline-none transition-colors focus-visible:border-ring focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[checked]:bg-primary",r),...a,children:(0,t.jsx)(U.Thumb,{className:(0,D.cn)("pointer-events-none block size-4 rounded-full bg-background ring-0 transition-transform will-change-transform data-[checked]:translate-x-4 data-[unchecked]:translate-x-0.5 data-[checked]:bg-primary-foreground",l)})})}function I(e){let{className:r,thumbClassName:l,...a}=e;return(0,t.jsx)(P,{className:(0,D.cn)("focus-visible:border-[var(--ds-accent)]/50 focus-visible:ring-[var(--ds-accent)]/35 data-[checked]:border-[var(--ds-accent)] data-[checked]:bg-[var(--ds-accent)]",r),thumbClassName:(0,D.cn)("data-[checked]:bg-white",l),...a})}e.s(["ResourceImportDialog",()=>H],53925);var B=e.i(72064),L=e.i(19455);function A(e){return e<1024?"".concat(e," B"):e<1048576?"".concat((e/1024).toFixed(1)," KB"):"".concat((e/1048576).toFixed(1)," MB")}function z(e){let{uploadUrl:l,accept:a,disabled:n=!1,multiple:i=!1,maxFileSize:s=0x3200000,autoUpload:o=!1,method:d="POST",transport:c="xhr",fieldName:u="file",headers:f,extraFormData:m,autoRetryTimes:p=0,autoRetryDelayMs:v=800,selectionOnly:b=!1,className:h,emptyTitle:x="点击或拖拽文件到此处",emptyHint:g="支持上传文件",onFilesChange:y,onUploadSuccess:w,onUploadError:j,onValidationError:N}=e,k=r.useId(),C=r.useRef(null),R=r.useRef(new Map),T=r.useRef(new Map),M=r.useRef([]),[E,S]=r.useState(!1),[O,U]=r.useState([]),P=r.useMemo(()=>a?a.split(",").map(e=>e.trim().toLowerCase()).filter(Boolean):[],[a]);r.useEffect(()=>{M.current=O,null==y||y(O)},[O,y]),r.useEffect(()=>()=>{for(let e of R.current.values())e.abort();for(let e of T.current.values())e.abort();for(let e of M.current)e.previewUrl&&URL.revokeObjectURL(e.previewUrl)},[]);let I=r.useCallback((e,t)=>{U(r=>r.map(r=>r.id===e?{...r,...t}:r))},[]),z=r.useCallback(async(e,t)=>{let r=M.current.find(t=>t.id===e);if(!r||n)return;I(e,{status:t>0?"retrying":"uploading",progress:0,error:"",retryCount:t});let a=new FormData;if(m)for(let[e,t]of Object.entries(m))a.append(e,t);a.append(u,r.file);try{let t="";if("fetch"===c){let r=new AbortController;T.current.set(e,r);let n=await fetch(l,{method:d,headers:f,body:a,signal:r.signal}),i=await n.text();try{t=i?JSON.parse(i):""}catch(e){t=i}if(!n.ok)throw Error("上传失败:".concat(n.status," ").concat(n.statusText))}else t=await new Promise((t,r)=>{let n=new XMLHttpRequest;if(R.current.set(e,n),n.open(d,l,!0),f)for(let[e,t]of Object.entries(f))n.setRequestHeader(e,t);n.upload.onprogress=t=>{if(!t.lengthComputable)return;let r=Math.min(100,Math.round(t.loaded/t.total*100));I(e,{progress:r})},n.onerror=()=>r(Error("网络异常,上传失败")),n.onabort=()=>r(Error("__ABORTED__")),n.onload=()=>{n.status>=200&&n.status<300?t(function(e){let t=e.responseText||"";try{return JSON.parse(t)}catch(e){return t}}(n)):r(Error("上传失败:".concat(n.status," ").concat(n.statusText)))},n.send(a)});I(e,{status:"success",progress:100,error:""});let r=M.current.find(t=>t.id===e);r&&(null==w||w(r,t))}catch(a){let r=a instanceof Error?a.message:String(a);if("__ABORTED__"===r)return void I(e,{status:"selected",progress:0,error:""});if(t<p){I(e,{status:"retrying",error:"重试中(".concat(t+1,"/").concat(p,")")}),await new Promise(e=>window.setTimeout(e,v)),await z(e,t+1);return}I(e,{status:"error",error:r});let l=M.current.find(t=>t.id===e);l&&(null==j||j(l,r))}finally{R.current.delete(e),T.current.delete(e)}},[v,p,n,m,u,f,d,j,w,c,I,l]),_=r.useCallback(e=>{z(e,0)},[z]),F=r.useCallback(e=>{var t,r;null==(t=R.current.get(e))||t.abort(),null==(r=T.current.get(e))||r.abort()},[]),V=r.useCallback(()=>{for(let e of M.current)("selected"===e.status||"error"===e.status)&&_(e.id)},[_]),H=r.useCallback(e=>{if(n||!e.length)return;let t=new Set(M.current.map(e=>"".concat(e.file.name,"::").concat(e.file.size))),r=[];for(let l of e){let e="".concat(l.name,"::").concat(l.size);if(!t.has(e)){if(!function(e,t){if(!t.length)return!0;let r=e.name.toLowerCase(),l=(e.type||"").toLowerCase();return t.some(e=>e.startsWith(".")?r.endsWith(e):e.endsWith("/*")?l.startsWith("".concat(e.slice(0,-1))):l===e)}(l,P)){null==N||N("文件类型不支持:".concat(l.name));continue}if(l.size>s){null==N||N("文件过大(最大 ".concat(A(s),"):").concat(l.name));continue}t.add(e),r.push({id:"".concat(Date.now(),"-").concat(Math.random().toString(36).slice(2,8)),file:l,status:"selected",progress:0,error:"",retryCount:0,previewUrl:l.type.startsWith("image/")?URL.createObjectURL(l):""})}}if(!r.length)return;let l=i?[...M.current,...r]:[r[r.length-1]];if(!i)for(let e of M.current)e.previewUrl&&URL.revokeObjectURL(e.previewUrl);if(U(l),o&&!b)for(let e of r)_(e.id)},[P,o,n,s,i,N,b,_]),K=r.useCallback(e=>{let t=e.target.files;t&&(H(Array.from(t)),e.target.value="")},[H]),J=r.useCallback(e=>{var t;e.preventDefault(),e.stopPropagation(),S(!1),n||H(Array.from(null!=(t=e.dataTransfer.files)?t:[]))},[H,n]);return(0,t.jsxs)("div",{className:(0,D.cn)("flex min-h-0 w-full flex-col gap-3",h),children:[(0,t.jsx)("input",{ref:C,id:k,type:"file",hidden:!0,accept:a,multiple:i,disabled:n,onChange:K}),(0,t.jsxs)("label",{htmlFor:k,onDragOver:e=>{e.preventDefault(),n||S(!0)},onDragLeave:e=>{e.preventDefault(),S(!1)},onDrop:J,className:(0,D.cn)("flex min-h-[124px] cursor-pointer flex-col items-center justify-center gap-1 rounded-lg border border-dashed border-[var(--ds-border)] px-4 py-6 text-center transition-colors hover:border-[var(--ds-border-hover)] hover:bg-[var(--ds-main-tint)]",E&&"bg-[var(--ds-accent)]/5 border-[var(--ds-accent)]",n&&"cursor-not-allowed opacity-60"),children:[(0,t.jsx)(B.default,{name:"Upload",size:20,className:"text-[var(--ds-muted)]"}),(0,t.jsx)("div",{className:"text-base text-[var(--ds-text)]",children:x}),(0,t.jsx)("div",{className:"text-sm text-[var(--ds-muted)]",children:g})]}),O.length?(0,t.jsx)("div",{className:"space-y-2",children:O.map(e=>(0,t.jsx)("div",{className:"rounded-md border border-[var(--ds-border)] p-2.5",children:(0,t.jsxs)("div",{className:"flex items-start justify-between gap-3",children:[(0,t.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,t.jsx)("div",{className:"truncate text-base text-[var(--ds-text)]",children:e.file.name}),(0,t.jsx)("div",{className:"text-sm text-[var(--ds-muted)]",children:A(e.file.size)}),e.previewUrl?(0,t.jsx)("img",{src:e.previewUrl,alt:e.file.name,className:"mt-2 h-14 w-14 rounded object-cover"}):null,"uploading"===e.status||"retrying"===e.status?(0,t.jsx)("div",{className:"mt-2 h-1.5 w-full overflow-hidden rounded bg-[var(--ds-main-tint)]",children:(0,t.jsx)("div",{className:"h-full bg-[var(--ds-accent)] transition-all",style:{width:"".concat(e.progress,"%")}})}):null,"error"===e.status?(0,t.jsx)("div",{className:"mt-1 text-sm text-[var(--ds-danger)]",children:e.error||"上传失败"}):null]}),b?null:(0,t.jsxs)("div",{className:"flex items-center gap-1",children:["success"===e.status?(0,t.jsx)(B.default,{name:"CheckCircle2",size:16,className:"text-[var(--ds-accent)]"}):null,"selected"===e.status||"error"===e.status?(0,t.jsxs)(L.Button,{type:"button",size:"sm",variant:"outline",disabled:n,onClick:()=>_(e.id),children:["error"===e.status?(0,t.jsx)(B.default,{name:"RefreshCw",size:14,className:"mr-1"}):null,"error"===e.status?"重试":"上传"]}):null,"uploading"===e.status||"retrying"===e.status?(0,t.jsxs)(L.Button,{type:"button",size:"sm",variant:"outline",onClick:()=>F(e.id),children:[(0,t.jsx)(B.default,{name:"XCircle",size:14,className:"mr-1"}),"取消"]}):null]})]})},e.id))}):null,!b&&!o&&O.some(e=>"selected"===e.status||"error"===e.status)?(0,t.jsx)("div",{className:"flex justify-end",children:(0,t.jsx)(L.Button,{type:"button",size:"sm",onClick:V,disabled:n,children:"上传"})}):null]})}var _=e.i(76639),F=e.i(13354),V=e.i(29250);function H(e){let{open:l,onOpenChange:a,title:n,description:i,uploadUrl:s,resetKey:o}=e,[d,c]=(0,r.useState)(!1),[u,f]=(0,r.useState)(null),m=(0,r.useCallback)(()=>{a(!1),f(null)},[a]),p=(0,r.useCallback)(async()=>{if(!u)return void F.appToast.info("请先选择 zip 文件");let e=new FormData;e.append("file",u),c(!0);try{let t=await (0,V.bridgeFetch)(s,{method:"POST",body:e}),r=Number(t.imported||0),l=Number(t.overwritten||0),a=Array.isArray(t.rejected)?t.rejected.length:0;F.appToast.success("导入完成:导入 ".concat(r,",覆盖 ").concat(l)+(a>0?",拒绝 ".concat(a):"")),m()}catch(e){F.appToast.error("导入失败:".concat(e instanceof Error?e.message:String(e)))}finally{c(!1)}},[m,u,s]);return(0,t.jsx)(_.Dialog,{open:l,onOpenChange:e=>{a(e),e||f(null)},children:(0,t.jsxs)(_.DialogContent,{className:"flex min-h-[320px] max-w-[560px] flex-col",children:[(0,t.jsxs)(_.DialogHeader,{children:[(0,t.jsxs)("div",{children:[(0,t.jsx)(_.DialogTitle,{children:n}),(0,t.jsx)(_.DialogDescription,{children:i})]}),(0,t.jsx)(_.DialogClose,{className:"sidebar-icon-btn","aria-label":"关闭",onClick:m,children:"✕"})]}),(0,t.jsxs)("div",{className:"m-3 flex flex-1 flex-col gap-3",children:[(0,t.jsx)(z,{uploadUrl:s,accept:".zip,application/zip",maxFileSize:0x3200000,multiple:!1,disabled:d,selectionOnly:!0,emptyTitle:"点击或拖拽 zip 文件到此处",emptyHint:"支持 .zip 格式,最大 50MB",onFilesChange:e=>{var t,r;f(null!=(r=null==(t=e[0])?void 0:t.file)?r:null)},onValidationError:e=>{F.appToast.info(e)}},"".concat(l?"open":"closed","-").concat(null!=o?o:s)),(0,t.jsxs)("div",{className:"mt-auto flex justify-end pt-2",children:[(0,t.jsx)(L.Button,{className:"mr-[12px]",type:"button",variant:"plain-outline",size:"lg",onClick:m,children:"取消"}),(0,t.jsx)(L.Button,{type:"button",size:"lg",variant:"default",disabled:d||null==u,onClick:()=>void p(),children:d?"导入中…":"确定"})]})]})]})})}}]);