@auto-ai/agent 2.1.200 → 2.1.202

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 (81) hide show
  1. package/dist/safe-a/404/index.html +1 -1
  2. package/dist/safe-a/404.html +1 -1
  3. package/dist/safe-a/_next/static/chunks/00307121901a0bb9.js +1 -0
  4. package/dist/safe-a/_next/static/chunks/01bd042e327bca99.js +1 -0
  5. package/dist/safe-a/_next/static/chunks/1289fc2bb1119e18.js +1 -0
  6. package/dist/safe-a/_next/static/chunks/1c5adfc7c1c7d389.js +1 -0
  7. package/dist/safe-a/_next/static/chunks/1cdda0f50397fe52.js +1 -0
  8. package/dist/safe-a/_next/static/chunks/1ed40908b6f6169a.js +1 -0
  9. package/dist/safe-a/_next/static/chunks/{79e8fd2602ccb6b6.js → 40a2fb9cf3a7e6fd.js} +1 -1
  10. package/dist/safe-a/_next/static/chunks/461246e3ff85f221.js +1 -0
  11. package/dist/safe-a/_next/static/chunks/49faa314532847c5.css +1 -0
  12. package/dist/safe-a/_next/static/chunks/550b56a3434336c3.js +1 -0
  13. package/dist/safe-a/_next/static/chunks/{0fde2a8866dd02fc.js → 5798600d2ea8a3e8.js} +1 -1
  14. package/dist/safe-a/_next/static/chunks/6f3dea9281b00eb5.js +1 -0
  15. package/dist/safe-a/_next/static/chunks/72d507de2b27af4a.js +1 -0
  16. package/dist/safe-a/_next/static/chunks/7dd32128bdee61f7.js +1 -0
  17. package/dist/safe-a/_next/static/chunks/82614b5de9f78114.js +1 -0
  18. package/dist/safe-a/_next/static/chunks/{8085c74f26fa2c4e.js → 8989a60219113c80.js} +1 -1
  19. package/dist/safe-a/_next/static/chunks/{76ad71e591609488.js → 8be4fcbf0be681f0.js} +1 -1
  20. package/dist/safe-a/_next/static/chunks/{178385dc7308eb36.js → 8d49e72566260942.js} +1 -1
  21. package/dist/safe-a/_next/static/chunks/93f9fdbbd32e67ba.js +1 -0
  22. package/dist/safe-a/_next/static/chunks/9884401a1ada05a2.js +1 -0
  23. package/dist/safe-a/_next/static/chunks/bbaef90b0ce43019.js +1 -0
  24. package/dist/safe-a/_next/static/chunks/bbc5dbf5b7ca95b9.js +1 -0
  25. package/dist/safe-a/_next/static/chunks/cfd9aff2dcf3adb9.js +1 -0
  26. package/dist/safe-a/_next/static/chunks/d9b295c816662d1e.css +7 -0
  27. package/dist/safe-a/_next/static/chunks/f26b1d39b7d80da1.js +1 -0
  28. package/dist/safe-a/index.html +2 -2
  29. package/dist/safe-a/index.txt +12 -12
  30. package/dist/safe-a/manage/about/index.html +2 -2
  31. package/dist/safe-a/manage/about/index.txt +11 -11
  32. package/dist/safe-a/manage/env/index.html +2 -2
  33. package/dist/safe-a/manage/env/index.txt +13 -13
  34. package/dist/safe-a/manage/geelib/index.html +2 -2
  35. package/dist/safe-a/manage/geelib/index.txt +13 -13
  36. package/dist/safe-a/manage/general/index.html +2 -2
  37. package/dist/safe-a/manage/general/index.txt +11 -11
  38. package/dist/safe-a/manage/git/index.html +2 -2
  39. package/dist/safe-a/manage/git/index.txt +13 -13
  40. package/dist/safe-a/manage/im/index.html +2 -2
  41. package/dist/safe-a/manage/im/index.txt +13 -13
  42. package/dist/safe-a/manage/index.html +2 -2
  43. package/dist/safe-a/manage/index.txt +8 -8
  44. package/dist/safe-a/manage/library/index.html +2 -2
  45. package/dist/safe-a/manage/library/index.txt +11 -11
  46. package/dist/safe-a/manage/mcp/index.html +2 -2
  47. package/dist/safe-a/manage/mcp/index.txt +11 -11
  48. package/dist/safe-a/manage/permissions/index.html +2 -2
  49. package/dist/safe-a/manage/permissions/index.txt +11 -11
  50. package/dist/safe-a/manage/skills/index.html +2 -2
  51. package/dist/safe-a/manage/skills/index.txt +11 -11
  52. package/dist/safe-a/manage/task/index.html +2 -2
  53. package/dist/safe-a/manage/task/index.txt +11 -11
  54. package/dist/safe-a/manage/teams/index.html +2 -2
  55. package/dist/safe-a/manage/teams/index.txt +11 -11
  56. package/dist/safe-a/manage/tools/index.html +2 -2
  57. package/dist/safe-a/manage/tools/index.txt +11 -11
  58. package/package.json +6 -6
  59. package/dist/safe-a/_next/static/chunks/18e96a88f5f08332.js +0 -1
  60. package/dist/safe-a/_next/static/chunks/226a1a31a4fb9bfe.js +0 -1
  61. package/dist/safe-a/_next/static/chunks/4015dfbc67587781.css +0 -7
  62. package/dist/safe-a/_next/static/chunks/4cea3dc4bc693bae.js +0 -1
  63. package/dist/safe-a/_next/static/chunks/533f4a6fee15c104.js +0 -1
  64. package/dist/safe-a/_next/static/chunks/6ede5e68b521425a.js +0 -1
  65. package/dist/safe-a/_next/static/chunks/7b2661b7ec3fa4f6.js +0 -1
  66. package/dist/safe-a/_next/static/chunks/89ac60ccbd69e7d0.js +0 -1
  67. package/dist/safe-a/_next/static/chunks/94b5979f28d28841.js +0 -1
  68. package/dist/safe-a/_next/static/chunks/9edfab69bc0e5607.js +0 -1
  69. package/dist/safe-a/_next/static/chunks/b46207ccaa54a4c8.js +0 -1
  70. package/dist/safe-a/_next/static/chunks/c987866e1b5e538e.js +0 -1
  71. package/dist/safe-a/_next/static/chunks/cfe7d9b6ed958a07.js +0 -1
  72. package/dist/safe-a/_next/static/chunks/d4b8cc084b9746c8.js +0 -1
  73. package/dist/safe-a/_next/static/chunks/d9b7639801e15731.css +0 -1
  74. package/dist/safe-a/_next/static/chunks/d9d8a33623a1847b.js +0 -1
  75. package/dist/safe-a/_next/static/chunks/df782b0b8467faa1.js +0 -1
  76. package/dist/safe-a/_next/static/chunks/e49f12b147341b78.js +0 -1
  77. package/dist/safe-a/_next/static/chunks/f660a559fce684d3.js +0 -1
  78. package/dist/safe-a/_next/static/chunks/fddc8491e9085327.js +0 -1
  79. /package/dist/safe-a/_next/static/{V3cHGz5K103aMBkeSpQfj → oeWeEK58fAEFpbK6i70E_}/_buildManifest.js +0 -0
  80. /package/dist/safe-a/_next/static/{V3cHGz5K103aMBkeSpQfj → oeWeEK58fAEFpbK6i70E_}/_clientMiddlewareManifest.json +0 -0
  81. /package/dist/safe-a/_next/static/{V3cHGz5K103aMBkeSpQfj → oeWeEK58fAEFpbK6i70E_}/_ssgManifest.js +0 -0
@@ -1 +0,0 @@
1
- (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,31862,e=>{"use strict";let t;e.s(["TeamsView",()=>X],31862);var a=e.i(18050),r=e.i(71645),s=e.i(56708),l=e.i(19455),n=e.i(72064),i=e.i(53145),o=e.i(74080),d=e.i(94197),c=e.i(13354),m=e.i(24687),u=e.i(75157);let x={expand:!0,copy:!0};function p(e){let{value:t,onChange:s,minLines:l,placeholder:n,readOnly:i,className:o}=e,d=(0,r.useRef)(null),c=(0,r.useRef)(null),x=Math.max(t.split("\n").length,l),p=(0,r.useCallback)(()=>{d.current&&c.current&&(c.current.scrollTop=d.current.scrollTop)},[]);return(0,a.jsxs)("div",{className:(0,u.cn)("flex min-h-0 flex-1",o),children:[(0,a.jsx)("div",{ref:c,"aria-hidden":!0,className:"w-10 shrink-0 overflow-hidden border-r border-[var(--ds-border)] bg-[#fafafa] py-3 text-right font-mono text-base leading-[1.5] text-[var(--ds-muted)]",children:Array.from({length:x},(e,t)=>(0,a.jsx)("div",{className:"px-2",children:t+1},t))}),(0,a.jsx)(m.Textarea,{ref:d,spellCheck:!1,readOnly:i,value:t,onChange:e=>s(e.target.value),onScroll:p,placeholder:n,className:"agent-md-editor min-h-0 flex-1 resize-none rounded-none border-0 bg-white px-4 py-3 shadow-none focus-visible:ring-0"})]})}function h(e){let{actions:t,copyDisabled:r,onCopy:s,className:l}=e;return t.copy?(0,a.jsx)("div",{className:(0,u.cn)("flex items-center gap-0.5",l),children:(0,a.jsx)(d.IconTooltipButton,{icon:"Copy",label:"复制内容",disabled:r,onClick:s})}):null}function b(e){let{show:t,expanded:r,onToggleExpand:s,className:l}=e;return t?(0,a.jsx)("div",{className:(0,u.cn)("flex items-center",l),children:(0,a.jsx)(d.IconTooltipButton,{icon:r?"Minimize2":"Maximize2",label:r?"收起编辑器":"展开编辑器",onClick:s})}):null}function f(e){let{value:t,onChange:s,minLines:l=20,className:n,placeholder:i="编辑 Markdown 内容",readOnly:d=!1,actions:m,expandTitle:f="编辑 Markdown",copySuccessMessage:v="已复制到剪贴板",copyEmptyMessage:g="暂无内容可复制"}=e,[j,N]=(0,r.useState)(!1),w=!1===m?{expand:!1,copy:!1}:{...x,...m},y=(0,r.useCallback)(()=>{if(!t.trim())return void c.appToast.error(g);("undefined"!=typeof navigator&&navigator.clipboard&&"function"==typeof navigator.clipboard.writeText?navigator.clipboard.writeText(t):"undefined"==typeof document?Promise.reject(Error("Clipboard unavailable")):new Promise((e,a)=>{let r=document.createElement("textarea");r.value=t,r.setAttribute("readonly",""),r.style.position="fixed",r.style.top="-9999px",r.style.opacity="0",document.body.appendChild(r),r.focus(),r.select();let s=document.execCommand("copy");if(document.body.removeChild(r),s)return void e();a(Error("Clipboard copy failed"))})).then(()=>{c.appToast.success(v)},()=>{c.appToast.error("复制失败,请手动选择复制")})},[t,v,g]),C=(0,r.useCallback)(()=>{N(e=>!e)},[]);(0,r.useEffect)(()=>{if(!j)return;let e=e=>{"Escape"===e.key&&N(!1)};return document.addEventListener("keydown",e),()=>document.removeEventListener("keydown",e)},[j]);let k=(0,u.cn)("relative flex min-h-[320px] flex-1 flex-col overflow-hidden rounded-lg border border-[var(--ds-border)] bg-white",n),T=!t.trim()||d,S=(0,a.jsxs)("div",{className:k,children:[(0,a.jsx)(h,{actions:w,copyDisabled:T,onCopy:y,className:"absolute right-2 top-2 z-[1]"}),(0,a.jsx)(p,{value:t,onChange:s,minLines:l,placeholder:i,readOnly:d}),(0,a.jsx)(b,{show:w.expand,expanded:!1,onToggleExpand:C,className:"absolute bottom-2 right-2 z-[1]"})]}),A=j&&"undefined"!=typeof document?(0,o.createPortal)((0,a.jsxs)("div",{className:"fixed inset-0 z-[100] flex flex-col bg-[var(--surface-2)]",role:"dialog","aria-modal":"true","aria-label":f,children:[(0,a.jsx)("header",{className:"flex shrink-0 items-center border-b border-[var(--ds-border)] px-5 py-4",children:(0,a.jsx)("h2",{className:"truncate text-lg font-semibold text-[var(--ds-text)]",children:f})}),(0,a.jsx)("div",{className:"flex min-h-0 flex-1 flex-col p-5",children:(0,a.jsxs)("div",{className:"relative flex min-h-0 flex-1 flex-col overflow-hidden rounded-lg border border-[var(--ds-border)] bg-white",children:[(0,a.jsx)(h,{actions:w,copyDisabled:T,onCopy:y,className:"absolute right-2 top-2 z-[1]"}),(0,a.jsx)(p,{value:t,onChange:s,minLines:l,placeholder:i,readOnly:d,className:"min-h-0 flex-1"}),(0,a.jsx)(b,{show:w.expand,expanded:!0,onToggleExpand:C,className:"absolute bottom-2 right-2 z-[1]"})]})})]}),document.body):null;return(0,a.jsxs)(a.Fragment,{children:[S,A]})}var v=e.i(51419),g=e.i(87676),j=e.i(93479),N=e.i(65934),w=e.i(61196),y=e.i(52727);let C=/^[a-zA-Z0-9_-]{1,64}$/,k=[{id:"all",label:"全部"},{id:"joined_other",label:"已加入其他团队"}];function T(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:80,a=String(e||"").replace(/\s+/g," ").trim();return a?a.length<=t?a:"".concat(a.slice(0,t-1),"…"):"暂无使用说明"}var S=e.i(46798),A=e.i(8279);let z={sm:"h-7 w-7 text-xs",md:"h-9 w-9 "};function F(e){let{label:t,size:r="md",className:s}=e,l=(0,A.initialsFromLabel)(t);return(0,a.jsx)(S.TooltipProvider,{delayDuration:150,children:(0,a.jsxs)(S.Tooltip,{children:[(0,a.jsx)(S.TooltipTrigger,{asChild:!0,children:(0,a.jsx)("span",{className:(0,u.cn)("inline-flex shrink-0 cursor-default items-center justify-center rounded-full font-semibold text-white",z[r],s),style:{background:(0,A.avatarBgForLabel)(t)},"aria-label":t,children:l})}),(0,a.jsx)(S.TooltipContent,{side:"bottom",align:"center",className:"",children:t})]})})}let D=[{value:"agents",label:"AGENTS"}];function E(e){let{mode:t,editAgentId:s,onClose:o,onSaved:d}=e,x=(0,N.useAppStore)(e=>e.wsUrl),p=(0,N.useAppStore)(e=>e.apiBase),h=(0,w.useStageThreadFlyoutStore)(e=>e.setFlyoutDirty),b=(0,w.useStageThreadFlyoutStore)(e=>e.requestCloseFlyout),k="edit"===t,[T,S]=(0,r.useState)(!1),[A,z]=(0,r.useState)(k),[E,M]=(0,r.useState)(null),[B,I]=(0,r.useState)("basic"),_=(0,r.useRef)(null),O=(0,i.useForm)({defaultValues:{id:"",whentouse:"",prompt:""},mode:"onChange"}),{isDirty:R}=(0,i.useFormState)({control:O.control}),L=O.watch("id"),P=k?"编辑 Agent · ".concat(null!=s?s:L):"新建Agent",H=T?k?"保存中…":"创建中…":k?"保存":"创建",U=(0,r.useCallback)(async()=>{let e=null==s?void 0:s.trim();if(e){z(!0),M(null);try{let t=await (0,y.getAgentDetail)(x,p,e);_.current=t.config,O.reset({id:t.id,whentouse:t.whentouse,prompt:t.prompt})}catch(t){let e=t instanceof Error?t.message:String(t);M(e),c.appToast.error("加载失败:".concat(e))}finally{z(!1)}}},[s,x,p,O]);(0,r.useEffect)(()=>{k&&U()},[k,U]),(0,r.useEffect)(()=>(h(R),()=>h(!1)),[R,h]);let G=(0,r.useCallback)(()=>{b()},[b]),V=(0,r.useCallback)(async e=>{let t=(k&&null!=s?s:e.id).trim();if(t){if(!k&&!C.test(String(t||"").trim()))return void c.appToast.error("Agent ID 仅支持字母、数字、下划线和中划线,长度 1~64");S(!0);try{k?(await (0,y.updateAgent)(x,p,{id:t,prompt:e.prompt,whentouse:e.whentouse,baseConfig:_.current}),c.appToast.success("已保存")):(await (0,y.createAgent)(x,p,{id:t,whentouse:e.whentouse,prompt:e.prompt}),c.appToast.success("已创建")),await (null==d?void 0:d()),o()}catch(t){let e=k?"保存":"创建";c.appToast.error("".concat(e,"失败:").concat(t instanceof Error?t.message:String(t)))}finally{S(!1)}}},[k,s,x,p,o,d]);return(0,a.jsx)(g.Form,{...O,children:(0,a.jsxs)("form",{className:"flex h-full min-h-0 flex-col bg-[var(--surface-2)]",onSubmit:O.handleSubmit(V),children:[(0,a.jsx)("header",{className:"shrink-0 border-b border-[var(--ds-border)] bg-[var(--surface-2)] px-5 pb-4 pt-5",children:(0,a.jsxs)("div",{className:"flex items-start justify-between gap-4",children:[(0,a.jsxs)("div",{className:"flex min-w-0 flex-1 items-center",children:[(0,a.jsx)(l.Button,{type:"button",variant:"plain",size:"icon",onClick:G,disabled:T,className:"shrink-0 cursor-pointer px-2 text-[var(--ds-text)] hover:bg-transparent hover:text-[color:var(--ds-accent)] [&_svg_path]:!fill-current","aria-label":"返回",children:(0,a.jsx)(n.default,{name:"Back",size:16})}),(0,a.jsx)("h2",{className:"truncate text-lg font-semibold text-[var(--ds-text)]",children:P})]}),(0,a.jsx)(l.Button,{type:"submit",variant:"default",size:"lg",disabled:T||A||!!E,className:"shrink-0 cursor-pointer rounded-lg bg-[#111] px-5 hover:bg-[#333]",children:H})]})}),(0,a.jsx)("div",{className:"flex min-h-0 flex-1 flex-col overflow-y-auto px-5 py-4",children:A?(0,a.jsx)("div",{className:"flex min-h-[240px] flex-1 items-center justify-center text-[var(--ds-muted)]",role:"status","aria-live":"polite",children:"加载中…"}):E?(0,a.jsxs)("div",{className:"flex min-h-[240px] flex-1 flex-col items-center justify-center gap-3 text-destructive",role:"alert",children:[(0,a.jsxs)("span",{children:["加载失败:",E]}),(0,a.jsx)(l.Button,{type:"button",variant:"outline",size:"sm",onClick:()=>void U(),children:"重试"})]}):"basic"===B?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("section",{className:"rounded-xl border border-[var(--ds-border)] bg-white p-4",children:(0,a.jsxs)("div",{className:"flex gap-4",children:[(0,a.jsx)("div",{className:"flex shrink-0 flex-col items-center gap-2",children:(0,a.jsx)("div",{className:"relative",children:(0,a.jsx)(F,{label:L.trim()||"Agent",className:"h-16 w-16 text-lg"})})}),(0,a.jsxs)("div",{className:"min-w-0 flex-1 space-y-3",children:[(0,a.jsx)(g.FormField,{control:O.control,name:"id",render:e=>{let{field:t}=e;return(0,a.jsxs)(g.FormItem,{children:[(0,a.jsx)(g.FormControl,{children:(0,a.jsx)(j.Input,{...t,readOnly:k,spellCheck:!1,placeholder:"例如 my-agent,agent名称是唯一标识",autoComplete:"off",className:(0,u.cn)("h-10 rounded-md border-[var(--ds-border)] bg-[var(--ds-bg)]",k&&"cursor-default text-[var(--ds-muted)]")})}),(0,a.jsx)(g.FormMessage,{})]})}}),(0,a.jsx)(g.FormField,{control:O.control,name:"whentouse",render:e=>{let{field:t}=e;return(0,a.jsxs)(g.FormItem,{children:[(0,a.jsx)(g.FormControl,{children:(0,a.jsx)(m.Textarea,{...t,spellCheck:!1,placeholder:"用一句话说明它的身份 + 它主要帮你做什么",className:"min-h-[88px] resize-none rounded-md border-[var(--ds-border)] bg-[var(--ds-bg)] leading-relaxed"})}),(0,a.jsx)(g.FormMessage,{})]})}})]})]})}),(0,a.jsx)(v.AppTabs,{tabs:D,defaultValue:"agents",listVariant:"line",listClassName:"mt-4",className:"min-h-0 flex-1",children:(0,a.jsx)(v.AppTabsPanel,{value:"agents",className:"mt-4 flex min-h-0 flex-1 flex-col",children:(0,a.jsx)(g.FormField,{control:O.control,name:"prompt",render:e=>{let{field:t}=e;return(0,a.jsxs)(g.FormItem,{className:"flex min-h-0 flex-1 flex-col",children:[(0,a.jsx)(g.FormControl,{children:(0,a.jsx)(f,{value:t.value,onChange:t.onChange,className:"min-h-[320px]",placeholder:"编辑 Agent 提示词(agent.md)",expandTitle:"编辑 (agent.md)"})}),(0,a.jsx)(g.FormMessage,{})]})}})})})]}):(0,a.jsx)("div",{className:"flex flex-1 items-center justify-center text-[var(--ds-muted)]",children:"敬请期待"})})]})})}var M=e.i(68499),B=e.i(55146),I=e.i(97249);function _(e){let{label:t,hint:r,icon:s,onClick:l}=e,i=(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.default,{name:s,size:14,className:"shrink-0 text-[var(--ds-muted)]"}),(0,a.jsx)("span",{children:r})]}),o=(0,u.cn)("inline-flex min-h-9 w-fit max-w-full items-center justify-center gap-1.5 rounded-lg border border-dashed border-[var(--ds-border)] !bg-transparent px-3 text-[var(--ds-muted)]",l&&"cursor-pointer hover:border-[color:var(--ds-border-hover)] hover:bg-[var(--ds-main-tint)]");return l?(0,a.jsx)("button",{type:"button",className:o,onClick:l,"aria-label":t,children:i}):(0,a.jsx)("div",{className:o,"aria-label":t,children:i})}let O=r.forwardRef(function(e,t){let{className:s,size:l="default",checked:i,defaultChecked:o,disabled:d,id:c,onChange:m,...x}=e,p=void 0!==i,[h,b]=r.useState(!!o),f=p?!!i:h;return(0,a.jsxs)("span",{"data-slot":"checkbox","data-size":l,"data-checked":f?"true":"false",className:(0,u.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",f?"border-[var(--ds-accent)] bg-[var(--ds-accent)]":"bg-transparent",s),children:[f?(0,a.jsx)(n.default,{name:"Check",className:(0,u.cn)("pointer-events-none text-[var(--surface-1)] [&_path]:!fill-none","sm"===l?"size-3":"size-3.5"),strokeWidth:2.25,"aria-hidden":"true"}):null,(0,a.jsx)("input",{ref:t,id:c,type:"checkbox",checked:p?i:void 0,defaultChecked:p?void 0:o,disabled:d,className:"absolute inset-0 m-0 size-full cursor-pointer opacity-0 disabled:cursor-not-allowed",onChange:e=>{p||b(e.target.checked),null==m||m(e)},...x})]})});var R=e.i(76639);let L={captain:null,members:[]};function P(e){return{id:e.id,displayName:e.displayName.trim()||e.id}}function H(e,t,a,r){for(let l of a){var s;if(l.id===t)continue;let a=r(l.id);if((null==(s=a.captain)?void 0:s.id)===e||a.members.some(t=>t.id===e))return l.id}return null}function U(e){let{member:t,subtitle:r,onRemove:s,badge:l}=e;return(0,a.jsxs)("div",{className:"flex items-center gap-2 rounded-lg border border-[var(--ds-border)] bg-[var(--ds-bg)] p-2.5",children:[(0,a.jsx)(F,{label:t.displayName,size:"sm"}),(0,a.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,a.jsx)("p",{className:"mb-0 truncate text-base font-medium text-[var(--ds-text)]",children:t.displayName}),(0,a.jsx)("p",{className:"mb-0 truncate text-[12px] text-[var(--ds-muted)]",children:r})]}),l?(0,a.jsx)("span",{className:"shrink-0 rounded bg-[var(--green-light)] px-1.5 py-0.5 text-[10px] font-medium text-[var(--green-dark)]",children:l}):null,s?(0,a.jsx)(d.IconTooltipButton,{icon:"Close",label:"移除agent",className:"!h-7 !w-7 shrink-0 bg-transparent text-[var(--ds-muted)] hover:bg-transparent hover:text-[color:var(--ds-accent)]",iconClassName:"!size-3.5",onClick:s}):null]})}function G(e){let{open:t,onOpenChange:s,team:i,allAgents:o,rosters:d,onConfirm:m,onAgentsRefresh:x}=e,p=(0,N.useAppStore)(e=>e.wsUrl),h=(0,N.useAppStore)(e=>e.apiBase),b=i.id,f=d.getRoster,[v,g]=(0,r.useState)(""),[w,C]=(0,r.useState)("all"),[S,A]=(0,r.useState)([]),[z,D]=(0,r.useState)(!1),E=(0,r.useMemo)(()=>P(i),[i]);(0,r.useEffect)(()=>{if(!t)return;let e=f(b);g(""),C("all"),A(e.members.filter(e=>e.id!==b).map(e=>e.id))},[t,b,f]);let M=(0,r.useMemo)(()=>S.map(e=>o.find(t=>t.id===e)).filter(e=>null!=e).map(P),[S,o]),B=(0,r.useMemo)(()=>o.filter(e=>{if(!function(e,t){let a=t.trim().toLowerCase();return!a||"".concat(e.id," ").concat(e.displayName," ").concat(e.whentouse).toLowerCase().includes(a)}(e,v))return!1;let t=e.id===b,a=H(e.id,b,o,f);return"available"===w?!t:"joined_other"===w?!!a:"recommended"!==w||!a&&!t}),[o,v,w,b,f]),I=(0,r.useCallback)((e,t)=>{e!==b&&A(a=>t?a.includes(e)?a:[...a,e]:a.filter(t=>t!==e))},[b]),_=(0,r.useCallback)(()=>{A([])},[]),L=(0,r.useCallback)(()=>{s(!1)},[s]),G=(0,r.useCallback)(()=>{(async()=>{let e=b.trim();if(!e||z)return;let t=f(b).members.map(e=>e.id),a=S.filter(e=>!t.includes(e)),r=t.filter(e=>!S.includes(e));if(0===a.length&&0===r.length)return L();D(!0);try{for(let t of r)await (0,y.removeTeamMember)(p,h,e,t);for(let t of a)await (0,y.addTeamMember)(p,h,e,t);await (null==x?void 0:x()),m({captain:E,members:M}),a.length>0&&0===r.length?c.appToast.success(1===a.length?"已添加队员 ".concat(a[0]):"已添加 ".concat(a.length," 名队员")):c.appToast.success("已更新队员"),L()}catch(e){c.appToast.error("添加队员失败:".concat(e instanceof Error?e.message:String(e)))}finally{D(!1)}})()},[b,z,f,S,p,h,x,m,E,M,L]);return(0,a.jsx)(R.Dialog,{open:t,onOpenChange:s,children:(0,a.jsxs)(R.DialogContent,{className:"max-w-[920px]","aria-labelledby":"add-team-members-title",children:[(0,a.jsxs)(R.DialogHeader,{className:"items-start gap-3",children:[(0,a.jsx)(R.DialogTitle,{id:"add-team-members-title",className:"text-lg",children:"添加队员"}),(0,a.jsx)(R.DialogClose,{"aria-label":"关闭"})]}),(0,a.jsx)(R.DialogBody,{className:"!p-0",children:(0,a.jsxs)("div",{className:"flex h-[min(68vh,520px)] min-h-0 flex-col px-[24px] md:flex-row",children:[(0,a.jsxs)("div",{className:"mr-[16px] flex min-h-0 min-w-0 flex-1 flex-col overflow-hidden border-b border-[var(--ds-border)] md:border-b-0 md:border-r",children:[(0,a.jsxs)("div",{className:"shrink-0 space-y-3 border-b border-[var(--ds-border)] pb-4",children:[(0,a.jsxs)("div",{className:"relative",children:[(0,a.jsx)(n.default,{name:"Search",size:16,className:"pointer-events-none absolute left-2.5 top-1/2 -translate-y-1/2 text-[var(--ds-muted)]"}),(0,a.jsx)(j.Input,{value:v,onChange:e=>g(e.target.value),placeholder:"搜索成员名称 / 能力 / 标签",className:"h-8 pl-8"})]}),(0,a.jsx)("div",{className:"flex flex-wrap gap-2",children:k.map(e=>{let t=w===e.id;return(0,a.jsx)(l.Button,{type:"button",variant:"plain-outline",size:"sm",className:(0,u.cn)("cursor-pointer rounded-full px-3",t&&"border-[color:var(--ds-accent)] bg-[var(--green-light)] text-[var(--green-dark)] hover:bg-[var(--green-light)]"),onClick:()=>C(e.id),children:e.label},e.id)})})]}),(0,a.jsx)("ul",{className:"m-0 min-h-0 flex-1 list-none space-y-4 overflow-y-auto",role:"listbox","aria-label":"可选队员",children:B.map(e=>{let t=e.id===b,r=S.includes(e.id),s=H(e.id,b,o,f),l=function(e){let t=T(e,24);return"暂无使用说明"===t?[]:t.split(/[,,、\s]+/).filter(Boolean).slice(0,2)}(e.whentouse),i=T(e.whentouse,32);return(0,a.jsx)("li",{children:(0,a.jsxs)("label",{className:(0,u.cn)("flex cursor-pointer items-center gap-3 rounded-lg border border-solid bg-[var(--ds-bg)] px-2 py-2.5 transition-[border-color,background-color]","border-[color:var(--ds-border)]",t?"cursor-not-allowed opacity-60":"hover:border-[color:var(--ds-border-hover)] hover:bg-[var(--ds-main-tint)]",r&&!t&&"bg-[var(--green-light)]/40 border-[color:var(--ds-accent)]"),children:[(0,a.jsx)(O,{checked:!t&&r,disabled:t,onChange:t=>I(e.id,t.target.checked),"aria-label":"选择 ".concat(e.displayName)}),(0,a.jsx)(F,{label:e.displayName,size:"md"}),(0,a.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,a.jsxs)("p",{className:"mb-0 truncate font-medium text-[var(--ds-text)]",children:[e.displayName,t?(0,a.jsx)("span",{className:"ml-1 text-xs font-normal text-[var(--ds-muted)]",children:"(当前团队)"}):null]}),(0,a.jsx)("p",{className:"mb-0 mt-0.5 truncate text-[var(--ds-muted)]",children:i}),l.length>0?(0,a.jsx)("div",{className:"mt-1 flex flex-wrap gap-1",children:l.map(e=>(0,a.jsx)("span",{className:"rounded bg-[var(--surface-2)] px-1.5 py-0.5 text-[10px] text-[var(--ds-muted)]",children:e},e))}):null]}),(0,a.jsx)("div",{className:"shrink-0 text-right",children:t?(0,a.jsx)("span",{className:"text-xs text-[var(--ds-muted)]",children:"不可选"}):s?(0,a.jsxs)("span",{className:"inline-flex items-center gap-1 text-xs text-amber-600",children:[(0,a.jsx)(n.default,{name:"Info",size:14}),"已加入其他团队"]}):(0,a.jsxs)("span",{className:"inline-flex items-center gap-1 text-xs text-[var(--green-dark)]",children:[(0,a.jsx)("span",{className:"size-1.5 rounded-full bg-[var(--ds-accent)]"}),"可用 Agent"]})})]})},e.id)})}),(0,a.jsxs)("div",{className:"shrink-0 border-t border-[var(--ds-border)] px-4 py-2.5 text-[var(--ds-muted)]",children:["已选择 ",S.length," 名队员"]})]}),(0,a.jsx)("div",{className:"flex min-h-0 w-full shrink-0 flex-col overflow-hidden bg-[var(--ds-log-bg)] md:w-[300px]",children:(0,a.jsx)("div",{className:"flex min-h-0 flex-1 flex-col overflow-hidden p-4",children:(0,a.jsxs)("div",{className:"flex min-h-0 flex-1 flex-col overflow-hidden",children:[(0,a.jsxs)("div",{className:"mb-2 flex shrink-0 items-center justify-between gap-2",children:[(0,a.jsxs)("span",{className:"font-medium text-[var(--ds-text)]",children:["已选成员(",M.length,")"]}),(0,a.jsx)(l.Button,{type:"button",variant:"plain",size:"sm",disabled:0===M.length,className:"h-auto cursor-pointer !px-1 text-base text-[var(--ds-accent)] hover:bg-transparent hover:text-[var(--ds-text)] disabled:cursor-not-allowed",onClick:_,children:"清空"})]}),(0,a.jsx)("div",{className:"min-h-0 flex-1 overflow-y-auto",children:M.length>0?(0,a.jsx)("div",{className:"space-y-4",children:M.map(e=>{let t=o.find(t=>t.id===e.id),r=t?T(t.whentouse,28):e.id;return(0,a.jsx)(U,{member:e,subtitle:r,onRemove:()=>I(e.id,!1)},e.id)})}):(0,a.jsx)("p",{className:"mb-0 text-xs text-[var(--ds-muted)]",children:"请从左侧勾选队员"})})]})})})]})}),(0,a.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,a.jsx)(l.Button,{type:"button",variant:"plain-outline",size:"lg",onClick:L,className:"cursor-pointer",children:"取消"}),(0,a.jsx)(l.Button,{type:"button",variant:"default",size:"lg",onClick:G,disabled:z,className:"cursor-pointer disabled:cursor-not-allowed",children:z?"添加中…":"确认添加"})]})]})})}function V(e){let{open:t,onOpenChange:s,title:n,description:i,candidates:o,onPick:d}=e,[c,m]=(0,r.useState)("");(0,r.useEffect)(()=>{t&&m("")},[t]);let x=(0,r.useCallback)(()=>{s(!1)},[s]),p=(0,r.useCallback)(()=>{let e=o.find(e=>e.id===c);e&&(d(e),x())},[o,c,d,x]),h=(0,r.useMemo)(()=>o.length>0?null:"暂无可选 Agent",[o.length]);return(0,a.jsx)(R.Dialog,{open:t,onOpenChange:s,children:(0,a.jsxs)(R.DialogContent,{className:"max-w-[480px]","aria-labelledby":"pick-team-member-title",children:[(0,a.jsxs)(R.DialogHeader,{className:"items-start gap-3",children:[(0,a.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,a.jsx)(R.DialogTitle,{id:"pick-team-member-title",children:n}),(0,a.jsx)(R.DialogDescription,{className:"mt-1",children:i})]}),(0,a.jsx)(R.DialogClose,{"aria-label":"关闭"})]}),(0,a.jsx)(R.DialogBody,{className:"max-h-[min(50vh,360px)] overflow-y-auto !px-5 !py-4",children:h?(0,a.jsx)("p",{className:"mb-0 text-center text-[var(--ds-muted)]",children:h}):(0,a.jsx)("ul",{className:"m-0 list-none space-y-1 p-0",role:"listbox",children:o.map(e=>{let t=c===e.id,r=P(e);return(0,a.jsx)("li",{children:(0,a.jsxs)("button",{type:"button",role:"option","aria-selected":t,className:(0,u.cn)("flex w-full cursor-pointer items-center gap-3 rounded-lg border border-solid px-3 py-2.5 text-left transition-colors",t?"border-[color:var(--ds-accent)] bg-[var(--green-light)]":"border-[color:var(--ds-border)] bg-[var(--ds-bg)] hover:bg-[var(--ds-main-tint)]"),onClick:()=>m(e.id),children:[(0,a.jsx)(F,{label:r.displayName,size:"md"}),(0,a.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,a.jsx)("p",{className:"mb-0 truncate font-medium text-[var(--ds-text)]",children:r.displayName}),(0,a.jsx)("p",{className:"mb-0 mt-0.5 truncate text-xs text-[var(--ds-muted)]",children:e.id})]})]})},e.id)})})}),(0,a.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,a.jsx)(l.Button,{type:"button",variant:"plain-outline",size:"lg",onClick:x,className:"cursor-pointer",children:"取消"}),(0,a.jsx)(l.Button,{type:"button",variant:"default",size:"lg",disabled:!c,onClick:p,className:"cursor-pointer",children:"确定"})]})]})})}function W(e){let{member:t,displayName:r}=e;return(0,a.jsxs)("span",{className:"relative inline-flex w-fit items-center rounded-full",children:[(0,a.jsx)(F,{label:t.displayName,size:"sm"}),r?(0,a.jsx)("span",{className:"ml-2 whitespace-nowrap text-[var(--ds-text)]",children:r}):null]})}function q(e){let{members:t}=e,[s,l]=(0,r.useState)(!1),n=(0,r.useRef)(null),i=(0,r.useCallback)(()=>{n.current&&(clearTimeout(n.current),n.current=null),l(!0)},[]),o=(0,r.useCallback)(()=>{n.current&&clearTimeout(n.current),n.current=setTimeout(()=>l(!1),120)},[]);return(0,a.jsxs)(B.DropdownMenu,{open:s,onOpenChange:l,children:[(0,a.jsxs)(B.DropdownMenuTrigger,{type:"button",className:"inline-flex shrink-0 cursor-default items-center rounded-full border border-solid border-[color:var(--ds-border)] bg-[var(--surface-2)] px-2.5 py-1 font-medium text-[var(--ds-muted)] hover:bg-[var(--surface-2)]","aria-label":"还有 ".concat(t.length," 名队员"),onMouseEnter:i,onMouseLeave:o,children:["+",t.length]}),(0,a.jsxs)(B.DropdownMenuContent,{align:"start",side:"bottom",sideOffset:6,className:(0,u.cn)("min-w-[200px] max-w-[min(100vw-32px,320px)] p-3"),onMouseEnter:i,onMouseLeave:o,children:[(0,a.jsxs)("p",{className:"mb-2 px-1 text-xs text-[var(--ds-muted)]",children:["其余队员(",t.length,")"]}),(0,a.jsx)("div",{className:"flex max-h-[240px] flex-col gap-2 overflow-y-auto",children:t.map(e=>(0,a.jsx)(W,{member:e,displayName:e.displayName},e.id))})]})]})}function K(e){let{members:t,className:r}=e,s=t.slice(0,6),l=t.slice(6);return(0,a.jsxs)("div",{className:(0,u.cn)("flex min-w-0 max-w-full flex-wrap items-center gap-1",r),children:[s.map(e=>(0,a.jsx)(W,{member:e},e.id)),l.length>0?(0,a.jsx)(q,{members:l}):null]})}function Y(e){let{onEdit:t,onDelete:s,deleting:l=!1}=e,[i,o]=(0,r.useState)(!1);return(0,a.jsxs)(B.DropdownMenu,{open:i,onOpenChange:o,children:[(0,a.jsx)(B.DropdownMenuTrigger,{type:"button",className:"inline-flex h-8 w-8 shrink-0 cursor-pointer items-center justify-center rounded-md border-0 bg-transparent p-0 text-[var(--ds-muted)] hover:bg-transparent hover:text-[color:var(--ds-accent)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--ds-accent)]","aria-label":"更多",onClick:e=>{e.stopPropagation()},children:(0,a.jsx)(n.default,{name:"More",size:20})}),(0,a.jsxs)(B.DropdownMenuContent,{align:"end",side:"bottom",sideOffset:6,className:"w-[172px] min-w-[172px] rounded-[var(--ds-radius-sm)] border border-[var(--ds-border)] bg-[var(--ds-bg)] p-1.5",children:[(0,a.jsxs)(B.DropdownMenuItem,{className:"h-9 rounded-xl px-2.5 text-[var(--ds-text)] hover:bg-[var(--ds-item-active)] focus:bg-[var(--ds-item-hover)]",onClick:()=>{o(!1),t()},children:[(0,a.jsx)(n.default,{name:"Edit",size:16,className:"text-[var(--ds-muted)]"}),"编辑 Agent"]}),(0,a.jsx)(B.DropdownMenuSeparator,{className:"mx-1 my-1 bg-[var(--ds-border)]"}),(0,a.jsxs)(B.DropdownMenuItem,{variant:"destructive",disabled:l,className:"h-9 rounded-xl px-2.5 hover:bg-[#fff1f1] focus:bg-[#fff1f1]",onClick:()=>{o(!1),s()},children:[(0,a.jsx)(n.default,{name:"Trash2",size:16}),"删除 Agent"]})]})]})}function $(e){let{team:s,allAgents:l,rosters:n,onAgentSaved:i}=e,o=(0,N.useAppStore)(e=>e.agentId),m=(0,N.useAppStore)(e=>e.wsUrl),x=(0,N.useAppStore)(e=>e.apiBase),p=o.trim()||"qihoo",h=s.id===p,b=n.getRoster(s.id),f=T(s.whentouse),v=(0,A.initialsFromLabel)(s.id).slice(0,1),[g,j]=(0,r.useState)(!1),[C,k]=(0,r.useState)(!1),[S,z]=(0,r.useState)(!1),F=n.getAvailableCandidates(s.id,l),D=(0,r.useCallback)(e=>{n.setCaptain(s.id,P(e))},[n,s.id]),B=(0,r.useCallback)(e=>{n.applyRoster(s.id,e)},[n,s.id]),O=(0,r.useCallback)(()=>{let e=s.id.trim();if(!e||e===p)return;let t=(0,I.buildAppNavHref)("/",{ensureAgent:!0,agent:e}),a=I.BASE_PATH.replace(/\/+$/,""),r="".concat(window.location.origin).concat(a).concat(t);window.open(r,"_blank","noopener")},[s.id,p]),R=(0,r.useCallback)(()=>{!function(e){var r;let s=e.agentId.trim();if(!s)return;let{openFlyout:l,closeFlyout:n}=w.useStageThreadFlyoutStore.getState(),i=null!=(r=e.onSaved)?r:t;l({width:w.CREATE_AGENT_FLYOUT_WIDTH,hideHeader:!0,bodyClassName:"!p-0 overflow-hidden",navigationGuard:!0,content:(0,a.jsx)(E,{mode:"edit",editAgentId:s,onClose:n,onSaved:i})})}({agentId:s.id,onSaved:i})},[s.id,i]),L=(0,r.useCallback)(async()=>{let e=s.id.trim();if(e&&await (0,M.confirmAlertDialog)({title:"确定删除 Agent?",description:"Agent「".concat(e,"」将被永久删除,此操作不可恢复。"),confirmText:"删除",cancelText:"取消"})){z(!0);try{await (0,y.deleteAgentItem)(m,x,e),c.appToast.success("已删除"),await (null==i?void 0:i())}catch(e){c.appToast.error("删除失败:".concat(e instanceof Error?e.message:String(e)))}finally{z(!1)}}},[s.id,m,x,i]);return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("div",{className:(0,u.cn)("flex w-full flex-wrap items-center gap-4 rounded-xl border border-solid bg-[var(--ds-bg)] px-4 py-3 lg:flex-nowrap","border-[color:var(--ds-border)] transition-[border-color,box-shadow]","hover:shadow-[0_2px_12px_rgba(0,0,0,0.06)]"),children:[(0,a.jsxs)("div",{className:"flex min-w-[200px] flex-1 items-center gap-4",children:[(0,a.jsx)("span",{className:"inline-flex h-11 w-11 shrink-0 items-center justify-center rounded-lg text-lg font-semibold text-white",style:{background:(0,A.avatarBgForLabel)(s.id)},"aria-hidden":!0,children:v}),(0,a.jsxs)("div",{className:"min-w-0 flex-1 text-left",children:[(0,a.jsx)("button",{type:"button",onClick:O,disabled:h,className:(0,u.cn)("mb-0 block w-full truncate border-0 bg-transparent p-0 text-left text-base font-semibold text-[var(--ds-text)]",h?"cursor-default":"cursor-pointer hover:text-[color:var(--ds-accent)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--ds-accent)]"),"aria-current":h?"true":void 0,"aria-label":h?"当前 Agent:".concat(s.id):"在新标签页切换到 Agent ".concat(s.id),children:s.id}),(0,a.jsx)("p",{className:"mb-0 mt-1 truncate text-sm text-[var(--ds-muted)]",children:f})]})]}),(0,a.jsx)("div",{className:"flex min-w-0 max-w-full flex-1 flex-col gap-1.5",children:(0,a.jsx)("div",{className:(0,u.cn)("flex min-w-0 max-w-full flex-wrap items-center gap-2",""),children:(0,a.jsxs)("div",{className:"flex w-fit justify-end gap-2 rounded-xl border border-solid border-[color:var(--ds-border)] bg-[var(--ds-bg)] p-2",children:[b.members.length>0?(0,a.jsx)(K,{members:b.members,className:""}):(0,a.jsx)(_,{label:"队员列表",hint:"暂无队员",icon:"Team"}),(0,a.jsx)(d.IconTooltipButton,{icon:"Create",label:"添加队员",disabled:l.length<=1,className:(0,u.cn)("h-8 w-8 shrink-0 border border-dashed border-[color:var(--ds-border)] hover:border-[color:var(--ds-accent)] hover:text-[color:var(--ds-accent)]",l.length>1&&"text-[var(--ds-accent)] hover:bg-[var(--green-light)]"),iconClassName:"!size-4",onClick:()=>k(!0)})]})})}),(0,a.jsx)(Y,{onEdit:R,onDelete:()=>void L(),deleting:S})]}),(0,a.jsx)(V,{open:g,onOpenChange:j,title:"设置队长",description:"从可选 Agent 中选择一名作为队长",candidates:F,onPick:D}),(0,a.jsx)(G,{open:C,onOpenChange:k,team:s,allAgents:l,rosters:n,onConfirm:B,onAgentsRefresh:i})]})}function Z(e){let{agentsState:t}=e,{agents:s,loading:l,error:n}=t,i=function(e){let[t,a]=(0,r.useState)({});(0,r.useEffect)(()=>{a(t=>{let a={...t};for(let s of e){var r;let l=null!=(r=t[s.id])?r:L;a[s.id]={captain:l.captain,members:function(e,t){return e.agentTeamMembers.map(e=>{let a=t.find(t=>t.id===e.agentType);return{id:e.agentType,displayName:(null==a?void 0:a.displayName.trim())||e.agentType}})}(s,e)}}return a})},[e]);let s=(0,r.useCallback)(e=>{var a;return null!=(a=t[e])?a:L},[t]),l=(0,r.useCallback)((e,t)=>{a(a=>{var r;let s=(null!=(r=a[e])?r:L).members.filter(e=>e.id!==t.id);return{...a,[e]:{captain:t,members:s}}})},[]),n=(0,r.useCallback)(e=>{a(t=>{var a;let r=null!=(a=t[e])?a:L;return{...t,[e]:{...r,captain:null}}})},[]),i=(0,r.useCallback)((e,t)=>{a(a=>{var r,s;let l=null!=(s=a[e])?s:L;return(null==(r=l.captain)?void 0:r.id)===t.id||l.members.some(e=>e.id===t.id)?a:{...a,[e]:{...l,members:[...l.members,t]}}})},[]),o=(0,r.useCallback)((e,t)=>{a(a=>{var r;let s=null!=(r=a[e])?r:L;return{...a,[e]:{...s,members:s.members.filter(e=>e.id!==t)}}})},[]);return{getRoster:s,setCaptain:l,removeCaptain:n,addMember:i,removeMember:o,applyRoster:(0,r.useCallback)((e,t)=>{let r=t.captain,s=t.members.filter(e=>e.id!==(null==r?void 0:r.id));a(t=>({...t,[e]:{captain:r,members:s}}))},[]),getAvailableCandidates:(0,r.useCallback)((e,a)=>{var r;let s=null!=(r=t[e])?r:L,l=new Set([e,...s.captain?[s.captain.id]:[],...s.members.map(e=>e.id)]);return a.filter(e=>!l.has(e.id))},[t])}}(s);return(0,a.jsx)("div",{className:"flex min-h-0 flex-1 flex-col rounded-xl border border-[var(--ds-border)] bg-[var(--ds-bg)] shadow-[var(--shadow-sm)]",children:(0,a.jsx)("div",{className:"min-h-0 flex-1 overflow-y-auto p-[16px]",children:l?(0,a.jsx)("div",{className:"flex min-h-[200px] items-center justify-center text-[var(--ds-muted)]",children:"加载中…"}):n?(0,a.jsxs)("div",{className:"flex min-h-[200px] items-center justify-center px-4 text-center text-red-600",children:["加载失败:",n]}):0===s.length?(0,a.jsx)("div",{className:"flex min-h-[200px] items-center justify-center px-4 text-center text-[var(--ds-muted)]",children:"暂无 Agent,点击右上角「新建 Agent」创建"}):(0,a.jsx)("ul",{className:"m-0 list-none space-y-4 p-0",role:"list",children:s.map(e=>(0,a.jsx)("li",{children:(0,a.jsx)($,{team:e,allAgents:s,rosters:i,onAgentSaved:t.loadAgents})},e.id))})})})}function J(e){let{label:t,value:r,hint:s,icon:l}=e;return(0,a.jsxs)("div",{className:"mt-2 flex min-w-0 flex-1 items-center gap-4 rounded-xl border border-[var(--ds-border)] bg-white px-4 py-3.5 shadow-[var(--shadow-sm)]",children:[(0,a.jsx)("span",{className:"flex size-10 shrink-0 items-center justify-center rounded-full bg-[var(--ds-border)]","aria-hidden":!0,children:(0,a.jsx)(n.default,{name:l,size:20,className:"text-[var(--ds-text)]"})}),(0,a.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,a.jsx)("span",{className:"block text-[var(--ds-text)]",children:t}),(0,a.jsx)("span",{className:"mt-1 block text-2xl font-semibold leading-none text-[var(--ds-text)]",children:r}),(0,a.jsx)("span",{className:"mt-1 block text-sm text-[var(--ds-muted)]",children:s})]})]})}function Q(e){let{agents:t,className:s}=e,l=(0,r.useMemo)(()=>{let e=t.length;return[{label:"团队总数",value:t.filter(e=>e.agentTeamMembers.length>=1).length,icon:"Teams",hint:"队员数大于 1 的 Agent 编组"},{label:"成员总数",value:e,icon:"Agent",hint:"角色、能力和工具的智能执行体"}]},[t]);return(0,a.jsx)("div",{className:(0,u.cn)("flex flex-wrap gap-3",s),children:l.map(e=>(0,a.jsx)(J,{...e},e.label))})}function X(){let e=function(){let e=(0,N.useAppStore)(e=>e.wsUrl),t=(0,N.useAppStore)(e=>e.apiBase),[a,s]=(0,r.useState)([]),[l,n]=(0,r.useState)(!0),[i,o]=(0,r.useState)(null),d=(0,r.useCallback)(async()=>{n(!0),o(null);try{let a=await (0,y.listAgentsForManage)(e,t);s(a)}catch(t){let e=t instanceof Error?t.message:String(t);s([]),o(e),c.appToast.error("加载失败:".concat(e))}finally{n(!1)}},[e,t]);return(0,r.useEffect)(()=>{d()},[d]),{agents:a,loading:l,error:i,loadAgents:d}}();(0,r.useEffect)(()=>(t=e.loadAgents,()=>{t=void 0}),[e.loadAgents]);let i=(0,r.useCallback)(()=>{!function(){var e;let r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{openFlyout:s,closeFlyout:l}=w.useStageThreadFlyoutStore.getState(),n=null!=(e=r.onSaved)?e:t;s({width:w.CREATE_AGENT_FLYOUT_WIDTH,hideHeader:!0,bodyClassName:"!p-0 overflow-hidden",navigationGuard:!0,content:(0,a.jsx)(E,{mode:"create",onClose:l,onSaved:n})})}()},[]);return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(s.ManageChromeHeaderActions,{children:(0,a.jsx)("div",{className:"flex flex-wrap items-center",children:(0,a.jsxs)(l.Button,{type:"button",variant:"default",size:"lg",onClick:i,className:"mr-[12px] cursor-pointer",children:[(0,a.jsx)(n.default,{name:"Create",size:16,className:"align-middle"}),"新建 Agent"]})})}),(0,a.jsx)(Q,{agents:e.agents,className:"mb-4"}),(0,a.jsx)(Z,{agentsState:e})]})}}]);
@@ -1 +0,0 @@
1
- (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,20783,e=>{"use strict";e.s(["composeRefs",()=>n,"useComposedRefs",()=>o]);var t=e.i(71645);function r(e,t){if("function"==typeof e)return e(t);null!=e&&(e.current=t)}function n(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];return e=>{let n=!1,o=t.map(t=>{let o=r(t,e);return n||"function"!=typeof o||(n=!0),o});if(n)return()=>{for(let e=0;e<o.length;e++){let n=o[e];"function"==typeof n?n():r(t[e],null)}}}}function o(){for(var e=arguments.length,r=Array(e),o=0;o<e;o++)r[o]=arguments[o];return t.useCallback(n(...r),r)}},24687,e=>{"use strict";e.s(["Textarea",()=>n]);var t=e.i(18050),r=e.i(75157);function n(e){let{className:n,...o}=e;return(0,t.jsx)("textarea",{"data-slot":"textarea",className:(0,r.cn)("flex min-h-20 w-full rounded-md border border-solid border-border bg-transparent px-3 py-2 text-base outline-none transition-[color,box-shadow,border-color] duration-150 ease-in-out placeholder:text-muted-foreground hover:border-[var(--border-hover)] 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]",n),...o})}},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 o(e){return"string"==typeof e?e:("number"!=typeof e||isNaN(e))&&"boolean"!=typeof e?"":String(e)}function u(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,o(e));else t.set(r,o(n));return t}function i(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 i},searchParamsToUrlQuery:function(){return n},urlQueryToSearchParams:function(){return u}})},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 u},formatWithValidation:function(){return a},urlObjectKeys:function(){return i}});let n=e.r(90809)._(e.r(98183)),o=/https?|ftp|gopher|file/;function u(e){let{auth:t,hostname:r}=e,u=e.protocol||"",i=e.pathname||"",a=e.hash||"",s=e.query||"",l=!1;t=t?encodeURIComponent(t).replace(/%3A/i,":")+"@":"",e.host?l=t+e.host:r&&(l=t+(~r.indexOf(":")?"["+r+"]":r),e.port&&(l+=":"+e.port)),s&&"object"==typeof s&&(s=String(n.urlQueryToSearchParams(s)));let c=e.search||s&&"?"+s||"";return u&&!u.endsWith(":")&&(u+=":"),e.slashes||(!u||o.test(u))&&!1!==l?(l="//"+(l||""),i&&"/"!==i[0]&&(i="/"+i)):l||(l=""),a&&"#"!==a[0]&&(a="#"+a),c&&"?"!==c[0]&&(c="?"+c),""+u+l+(i=i.replace(/[?#]/g,encodeURIComponent))+(c=c.replace("#","%23"))+a}let i=["auth","hash","host","hostname","href","path","pathname","port","protocol","query","search","slashes"];function a(e){return u(e)}},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 b},MiddlewareNotFoundError:function(){return v},MissingStaticPage:function(){return m},NormalizeError:function(){return y},PageNotFoundError:function(){return g},SP:function(){return p},ST:function(){return h},WEB_VITALS:function(){return n},execOnce:function(){return o},getDisplayName:function(){return l},getLocationOrigin:function(){return a},getURL:function(){return s},isAbsoluteUrl:function(){return i},isResSent:function(){return c},loadGetInitialProps:function(){return d},normalizeRepeatedSlashes:function(){return f},stringifyError:function(){return P}});let n=["CLS","FCP","FID","INP","LCP","TTFB"];function o(e){let t,r=!1;return function(){for(var n=arguments.length,o=Array(n),u=0;u<n;u++)o[u]=arguments[u];return r||(r=!0,t=e(...o)),t}}let u=/^[a-zA-Z][a-zA-Z\d+\-.]*?:/,i=e=>u.test(e);function a(){let{protocol:e,hostname:t,port:r}=window.location;return e+"//"+t+(r?":"+r:"")}function s(){let{href:e}=window.location,t=a();return e.substring(t.length)}function l(e){return"string"==typeof e?e:e.displayName||e.name||"Unknown"}function c(e){return e.finished||e.headersSent}function f(e){let t=e.split("?");return t[0].replace(/\\/g,"/").replace(/\/\/+/g,"/")+(t[1]?"?"+t.slice(1).join("?"):"")}async function d(e,t){let r=t.res||t.ctx&&t.ctx.res;if(!e.getInitialProps)return t.ctx&&t.Component?{pageProps:await d(t.Component,t.ctx)}:{};let n=await e.getInitialProps(t);if(r&&c(r))return n;if(!n)throw Object.defineProperty(Error('"'+l(e)+'.getInitialProps()" should resolve to an object. But found "'+n+'" instead.'),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0});return n}let p="undefined"!=typeof performance,h=p&&["mark","measure","getEntriesByName"].every(e=>"function"==typeof performance[e]);class b extends Error{}class y extends Error{}class g extends Error{constructor(e){super(),this.code="ENOENT",this.name="PageNotFoundError",this.message="Cannot find module for page: "+e}}class m 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 P(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 u}});let n=e.r(18967),o=e.r(52817);function u(e){if(!(0,n.isAbsoluteUrl)(e))return!0;try{let t=(0,n.getLocationOrigin)(),r=new URL(e,t);return r.origin===t&&(0,o.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 y},useLinkStatus:function(){return m}});let n=e.r(90809),o=e.r(18050),u=n._(e.r(71645)),i=e.r(95057),a=e.r(8372),s=e.r(18581),l=e.r(18967),c=e.r(84395);e.r(33525);let f=e.r(91949),d=e.r(73668),p=e.r(99781);e.r(84508);let h=e.r(65165);function b(e){return"string"==typeof e?e:(0,i.formatUrl)(e)}function y(e){var t;let r,n,i,[y,m]=(0,u.useOptimistic)(f.IDLE_LINK_STATUS),v=(0,u.useRef)(null),{href:P,as:x,children:E,prefetch:O=null,passHref:T,replace:_,shallow:j,scroll:S,onClick:C,onMouseEnter:A,onTouchStart:N,legacyBehavior:R=!1,onNavigate:w,ref:L,unstable_dynamicOnHover:U,...I}=e;r=E,R&&("string"==typeof r||"number"==typeof r)&&(r=(0,o.jsx)("a",{children:r}));let M=u.default.useContext(a.AppRouterContext),k=!1!==O,F=!1!==O?null===(t=O)||"auto"===t?h.FetchStrategy.PPR:h.FetchStrategy.Full:h.FetchStrategy.PPR,{href:D,as:K}=u.default.useMemo(()=>{let e=b(P);return{href:e,as:x?b(x):e}},[P,x]);R&&(n=u.default.Children.only(r));let B=R?n&&"object"==typeof n&&n.ref:L,z=u.default.useCallback(e=>(null!==M&&(v.current=(0,f.mountLinkInstance)(e,D,M,F,k,m)),()=>{v.current&&((0,f.unmountLinkForCurrentNavigation)(v.current),v.current=null),(0,f.unmountPrefetchableInstance)(e)}),[k,D,M,F,m]),Q={ref:(0,s.useMergedRef)(z,B),onClick(e){R||"function"!=typeof C||C(e),R&&n.props&&"function"==typeof n.props.onClick&&n.props.onClick(e),M&&(e.defaultPrevented||function(e,t,r,n,o,i,a){let{nodeName:s}=e.currentTarget;if(!("A"===s.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,d.isLocalURL)(t)){o&&(e.preventDefault(),location.replace(t));return}if(e.preventDefault(),a){let e=!1;if(a({preventDefault:()=>{e=!0}}),e)return}u.default.startTransition(()=>{(0,p.dispatchNavigateAction)(r||t,o?"replace":"push",null==i||i,n.current)})}}(e,D,K,v,_,S,w))},onMouseEnter(e){R||"function"!=typeof A||A(e),R&&n.props&&"function"==typeof n.props.onMouseEnter&&n.props.onMouseEnter(e),M&&k&&(0,f.onNavigationIntent)(e.currentTarget,!0===U)},onTouchStart:function(e){R||"function"!=typeof N||N(e),R&&n.props&&"function"==typeof n.props.onTouchStart&&n.props.onTouchStart(e),M&&k&&(0,f.onNavigationIntent)(e.currentTarget,!0===U)}};return(0,l.isAbsoluteUrl)(K)?Q.href=K:R&&!T&&("a"!==n.type||"href"in n.props)||(Q.href=(0,c.addBasePath)(K)),i=R?u.default.cloneElement(n,Q):(0,o.jsx)("a",{...I,...Q,children:r}),(0,o.jsx)(g.Provider,{value:y,children:i})}let g=(0,u.createContext)(f.IDLE_LINK_STATUS),m=()=>(0,u.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)}]);
@@ -1 +0,0 @@
1
- (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,92715,e=>{"use strict";e.s(["AppTable",()=>u],92715);var t=e.i(18050),a=e.i(85413),s=e.i(71645),l=e.i(75157);let r=s.forwardRef((e,a)=>{let{className:s,...r}=e;return(0,t.jsx)("div",{className:"relative w-full overflow-auto",children:(0,t.jsx)("table",{ref:a,className:(0,l.cn)("w-full caption-bottom border-collapse",s),...r})})});r.displayName="Table";let n=s.forwardRef((e,a)=>{let{className:s,...r}=e;return(0,t.jsx)("thead",{ref:a,className:(0,l.cn)("[&_tr]:table [&_tr]:w-full [&_tr]:table-fixed [&_tr]:border-b",s),...r})});n.displayName="TableHeader";let i=s.forwardRef((e,a)=>{let{className:r,viewportFit:n=!0,viewportReserveBottom:i=16,viewportPaginationReserve:o=0,style:d,...c}=e,u=s.useRef(null),m=s.useCallback(e=>{u.current=e,"function"==typeof a?a(e):a&&(a.current=e)},[a]),[p,x]=s.useState(void 0);return s.useLayoutEffect(()=>{var e,t;if(!n)return void x(void 0);let a=()=>{var e,t;let a=u.current;if(!a)return;let s=a.getBoundingClientRect().top;x(Math.max(80,Math.floor((null!=(t=null==(e=window.visualViewport)?void 0:e.height)?t:window.innerHeight)-s-(i+o))))};a();let s=new ResizeObserver(()=>{a()});try{s.observe(document.body)}catch(e){}return window.addEventListener("resize",a),null==(e=window.visualViewport)||e.addEventListener("resize",a),null==(t=window.visualViewport)||t.addEventListener("scroll",a),window.addEventListener("scroll",a,!0),()=>{var e,t;s.disconnect(),window.removeEventListener("resize",a),null==(e=window.visualViewport)||e.removeEventListener("resize",a),null==(t=window.visualViewport)||t.removeEventListener("scroll",a),window.removeEventListener("scroll",a,!0)}},[n,i,o]),(0,t.jsx)("tbody",{ref:m,className:(0,l.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",r),style:n&&void 0!==p?{...d,maxHeight:p}:d,...c})});i.displayName="TableBody";let o=s.forwardRef((e,a)=>{let{className:s,hoverable:r=!0,...n}=e;return(0,t.jsx)("tr",{ref:a,className:(0,l.cn)("border-b transition-colors [&>td]:transition-colors data-[state=selected]:[&>td]:!bg-[var(--ds-item-active)]",r&&"group/table-row",s),...n})});o.displayName="TableRow";let d=s.forwardRef((e,a)=>{let{className:s,...r}=e;return(0,t.jsx)("th",{ref:a,className:(0,l.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),...r})});d.displayName="TableHead";let c=s.forwardRef((e,a)=>{let{className:s,...r}=e;return(0,t.jsx)("td",{ref:a,className:(0,l.cn)("border-x-0 border-b border-t-0 border-solid border-[var(--border-subtle)] p-3 align-middle transition-colors group-has-[td:hover]/table-row:!bg-[var(--ds-item-hover)]",s),...r})});function u(e){let{rows:s,columns:u,getRowKey:m,className:p,rowClassName:x,headerRowClassName:f,emptyText:g,emptyNode:b,bodyProps:h}=e;return(0,t.jsx)("div",{className:(0,l.cn)("overflow-hidden border border-[var(--ds-border)]",p),children:(0,t.jsxs)(r,{children:[(0,t.jsx)(n,{children:(0,t.jsx)(o,{className:(0,l.cn)("bg-[var(--ds-main-tint)] hover:bg-[var(--ds-main-tint)]",f),children:u.map(e=>(0,t.jsx)(d,{className:e.headerClassName,children:e.title},e.key))})}),(0,t.jsx)(i,{...h,children:s.length?s.map(e=>(0,t.jsx)(o,{className:"function"==typeof x?x(e):x,children:u.map(a=>(0,t.jsx)(c,{className:a.cellClassName,children:a.render(e)},a.key))},m(e))):(0,t.jsx)(o,{hoverable:!1,children:(0,t.jsx)(c,{colSpan:u.length,className:"py-6",children:null!=b?b:(0,t.jsx)(a.Empty,{text:g})})})})]})})}c.displayName="TableCell"},55242,e=>{"use strict";e.s(["AppDialog",()=>r]);var t=e.i(18050),a=e.i(71645),s=e.i(76639),l=e.i(75157);function r(e){let{open:r,onOpenChange:n,title:i,children:o,footer:d,width:c="max-w-3xl",minHeight:u}=e,m=(0,a.useId)();return(0,t.jsx)(s.Dialog,{open:r,onOpenChange:n,children:(0,t.jsxs)(s.DialogContent,{"aria-labelledby":m,className:(0,l.cn)(c,u?"!min-h-[--min-h]":""),style:u?{"--min-h":u}:void 0,children:[(0,t.jsxs)(s.DialogHeader,{children:[(0,t.jsx)(s.DialogTitle,{id:m,children:i}),(0,t.jsx)(s.DialogClose,{"aria-label":"关闭"})]}),(0,t.jsx)(s.DialogBody,{className:"!px-4 !py-3",children:o}),d?(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:d}):null]})})}},62427,e=>{"use strict";e.s(["clearRuntimeMcpItemConfig",()=>y,"deleteRuntimeMcp",()=>m,"deleteRuntimeSkill",()=>w,"deleteRuntimeTool",()=>u,"exportRuntimeMcpUrl",()=>x,"exportRuntimeSkillUrl",()=>N,"exportRuntimeToolUrl",()=>p,"importRuntimeMcp",()=>g,"importRuntimeTool",()=>f,"installCloudSkill",()=>C,"listBaseSkills",()=>r,"listCloudSkillCatalog",()=>k,"listInstalledSkills",()=>n,"listInstalledTools",()=>l,"listMcpServers",()=>s,"listRuntimeMcpPackages",()=>c,"listRuntimeTools",()=>d,"loadBaseSkillMd",()=>i,"loadRemoteMcpJson",()=>b,"loadRuntimeMcpItemConfig",()=>v,"saveBaseSkillMd",()=>o,"saveRemoteMcpJson",()=>h,"saveRuntimeMcpItemConfig",()=>j]);var t=e.i(29250),a=e.i(36845);async function s(e,s,l){let r=await (0,t.get)((0,a.buildMcpServersListUrl)(e,s,l));return{servers:Array.isArray(r.servers)?r.servers:[]}}async function l(e,s,l){let r=await (0,t.get)((0,a.buildToolInstalledListUrl)(e,s,l));return{tools:Array.isArray(r.tools)?r.tools:[]}}async function r(e,s,l){let r=await (0,t.get)((0,a.buildSkillBaseListUrl)(e,s,l));return{skills:Array.isArray(r.skills)?r.skills:[]}}async function n(e,s,l){let r=await (0,t.get)((0,a.buildSkillInstalledListUrl)(e,s,l));return{skills:Array.isArray(r.skills)?r.skills:[]}}async function i(e,s,l,r){return(0,t.get)((0,a.buildBaseSkillMdUrl)(e,s,l,r))}async function o(e,s,l,r,n){await (0,t.put)((0,a.buildBaseSkillMdUrl)(e,s,l,r),{content:n})}async function d(e,s,l){let r=await (0,t.get)((0,a.buildToolsRuntimeFilesUrl)(e,s,l));return{runtimeToolsDir:"string"==typeof r.runtimeToolsDir?r.runtimeToolsDir:"",items:Array.isArray(r.items)?r.items.filter(e=>!!(e&&e.id)):[]}}async function c(e,s,l){let r=await (0,t.get)((0,a.buildMcpRuntimeFilesUrl)(e,s,l));return{mcpRuntimeDir:"string"==typeof r.mcpRuntimeDir?r.mcpRuntimeDir:"",items:Array.isArray(r.items)?r.items.filter(e=>!!(e&&e.id)):[]}}async function u(e,s,l,r){return(0,t.del)((0,a.buildToolsRuntimeDeleteUrl)(e,s,l,r))}async function m(e,s,l,r){return(0,t.del)((0,a.buildMcpRuntimeDeleteUrl)(e,s,l,r))}function p(e,t,s,l){return(0,a.buildToolsRuntimeExportUrl)(e,t,s,l)}function x(e,t,s,l){return(0,a.buildMcpRuntimeExportUrl)(e,t,s,l)}async function f(e,s,l,r){let n=new FormData;return n.append("file",r),(0,t.post)((0,a.buildToolsRuntimeImportUrl)(e,s,l),n,{type:"file"})}async function g(e,s,l,r){let n=new FormData;return n.append("file",r),(0,t.post)((0,a.buildMcpRuntimeImportUrl)(e,s,l),n,{type:"file"})}async function b(e,s,l){return(0,t.get)((0,a.buildRemoteMcpJsonUrl)(e,s,l))}async function h(e,s,l,r){await (0,t.post)((0,a.buildRemoteMcpJsonUrl)(e,s,l),{content:r})}async function v(e,s,l,r,n){return(0,t.get)((0,a.buildRuntimeMcpItemConfigUrl)(e,s,l,r,n))}async function j(e,s,l,r,n,i){await (0,t.put)((0,a.buildRuntimeMcpItemConfigUrl)(e,s,l,r,n),{server:i})}async function y(e,s,l,r,n){await (0,t.del)((0,a.buildRuntimeMcpItemConfigUrl)(e,s,l,r,n))}async function w(e,s,l,r){return(0,t.del)((0,a.buildSkillsRuntimeDeleteUrl)(e,s,l,r))}function N(e,t,s,l){return(0,a.buildSkillsRuntimeExportUrl)(e,t,s,l)}async function k(e,s,l,r,n,i){let o=await (0,t.get)((0,a.buildCloudSkillCatalogUrl)(e,s,l,r,n,i));return{items:Array.isArray(o.items)?o.items:[],totalPages:Number(o.totalPages||0)}}async function C(e,s,l,r){await (0,t.post)((0,a.buildCloudSkillInstallUrl)(e,s,l),{id:r})}},53925,e=>{"use strict";e.s(["ResourceImportDialog",()=>u],53925);var t=e.i(18050),a=e.i(71645),s=e.i(72064),l=e.i(75157),r=e.i(19455);function n(e){return e<1024?"".concat(e," B"):e<1048576?"".concat((e/1024).toFixed(1)," KB"):"".concat((e/1048576).toFixed(1)," MB")}function i(e){let{uploadUrl:i,accept:o,disabled:d=!1,multiple:c=!1,maxFileSize:u=0x3200000,autoUpload:m=!1,method:p="POST",transport:x="xhr",fieldName:f="file",headers:g,extraFormData:b,autoRetryTimes:h=0,autoRetryDelayMs:v=800,selectionOnly:j=!1,className:y,emptyTitle:w="点击或拖拽文件到此处",emptyHint:N="支持上传文件",onFilesChange:k,onUploadSuccess:C,onUploadError:T,onValidationError:R}=e,S=a.useId(),U=a.useRef(null),M=a.useRef(new Map),D=a.useRef(new Map),A=a.useRef([]),[E,L]=a.useState(!1),[z,I]=a.useState([]),B=a.useMemo(()=>o?o.split(",").map(e=>e.trim().toLowerCase()).filter(Boolean):[],[o]);a.useEffect(()=>{A.current=z,null==k||k(z)},[z,k]),a.useEffect(()=>()=>{for(let e of M.current.values())e.abort();for(let e of D.current.values())e.abort();for(let e of A.current)e.previewUrl&&URL.revokeObjectURL(e.previewUrl)},[]);let O=a.useCallback((e,t)=>{I(a=>a.map(a=>a.id===e?{...a,...t}:a))},[]),_=a.useCallback(async(e,t)=>{let a=A.current.find(t=>t.id===e);if(!a||d)return;O(e,{status:t>0?"retrying":"uploading",progress:0,error:"",retryCount:t});let s=new FormData;if(b)for(let[e,t]of Object.entries(b))s.append(e,t);s.append(f,a.file);try{let t="";if("fetch"===x){let a=new AbortController;D.current.set(e,a);let l=await fetch(i,{method:p,headers:g,body:s,signal:a.signal}),r=await l.text();try{t=r?JSON.parse(r):""}catch(e){t=r}if(!l.ok)throw Error("上传失败:".concat(l.status," ").concat(l.statusText))}else t=await new Promise((t,a)=>{let l=new XMLHttpRequest;if(M.current.set(e,l),l.open(p,i,!0),g)for(let[e,t]of Object.entries(g))l.setRequestHeader(e,t);l.upload.onprogress=t=>{if(!t.lengthComputable)return;let a=Math.min(100,Math.round(t.loaded/t.total*100));O(e,{progress:a})},l.onerror=()=>a(Error("网络异常,上传失败")),l.onabort=()=>a(Error("__ABORTED__")),l.onload=()=>{l.status>=200&&l.status<300?t(function(e){let t=e.responseText||"";try{return JSON.parse(t)}catch(e){return t}}(l)):a(Error("上传失败:".concat(l.status," ").concat(l.statusText)))},l.send(s)});O(e,{status:"success",progress:100,error:""});let a=A.current.find(t=>t.id===e);a&&(null==C||C(a,t))}catch(l){let a=l instanceof Error?l.message:String(l);if("__ABORTED__"===a)return void O(e,{status:"selected",progress:0,error:""});if(t<h){O(e,{status:"retrying",error:"重试中(".concat(t+1,"/").concat(h,")")}),await new Promise(e=>window.setTimeout(e,v)),await _(e,t+1);return}O(e,{status:"error",error:a});let s=A.current.find(t=>t.id===e);s&&(null==T||T(s,a))}finally{M.current.delete(e),D.current.delete(e)}},[v,h,d,b,f,g,p,T,C,x,O,i]),P=a.useCallback(e=>{_(e,0)},[_]),F=a.useCallback(e=>{var t,a;null==(t=M.current.get(e))||t.abort(),null==(a=D.current.get(e))||a.abort()},[]),W=a.useCallback(()=>{for(let e of A.current)("selected"===e.status||"error"===e.status)&&P(e.id)},[P]),H=a.useCallback(e=>{if(d||!e.length)return;let t=new Set(A.current.map(e=>"".concat(e.file.name,"::").concat(e.file.size))),a=[];for(let s of e){let e="".concat(s.name,"::").concat(s.size);if(!t.has(e)){if(!function(e,t){if(!t.length)return!0;let a=e.name.toLowerCase(),s=(e.type||"").toLowerCase();return t.some(e=>e.startsWith(".")?a.endsWith(e):e.endsWith("/*")?s.startsWith("".concat(e.slice(0,-1))):s===e)}(s,B)){null==R||R("文件类型不支持:".concat(s.name));continue}if(s.size>u){null==R||R("文件过大(最大 ".concat(n(u),"):").concat(s.name));continue}t.add(e),a.push({id:"".concat(Date.now(),"-").concat(Math.random().toString(36).slice(2,8)),file:s,status:"selected",progress:0,error:"",retryCount:0,previewUrl:s.type.startsWith("image/")?URL.createObjectURL(s):""})}}if(!a.length)return;let s=c?[...A.current,...a]:[a[a.length-1]];if(!c)for(let e of A.current)e.previewUrl&&URL.revokeObjectURL(e.previewUrl);if(I(s),m&&!j)for(let e of a)P(e.id)},[B,m,d,u,c,R,j,P]),J=a.useCallback(e=>{let t=e.target.files;t&&(H(Array.from(t)),e.target.value="")},[H]),V=a.useCallback(e=>{var t;e.preventDefault(),e.stopPropagation(),L(!1),d||H(Array.from(null!=(t=e.dataTransfer.files)?t:[]))},[H,d]);return(0,t.jsxs)("div",{className:(0,l.cn)("flex min-h-0 w-full flex-col gap-3",y),children:[(0,t.jsx)("input",{ref:U,id:S,type:"file",hidden:!0,accept:o,multiple:c,disabled:d,onChange:J}),(0,t.jsxs)("label",{htmlFor:S,onDragOver:e=>{e.preventDefault(),d||L(!0)},onDragLeave:e=>{e.preventDefault(),L(!1)},onDrop:V,className:(0,l.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)]",d&&"cursor-not-allowed opacity-60"),children:[(0,t.jsx)(s.default,{name:"Upload",size:20,className:"text-[var(--ds-muted)]"}),(0,t.jsx)("div",{className:"text-[var(--ds-text)]",children:w}),(0,t.jsx)("div",{className:"text-[var(--ds-muted)]",children:N})]}),z.length?(0,t.jsx)("div",{className:"space-y-2",children:z.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-[var(--ds-text)]",children:e.file.name}),(0,t.jsx)("div",{className:"text-[var(--ds-muted)]",children:n(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-[var(--ds-danger)]",children:e.error||"上传失败"}):null]}),j?null:(0,t.jsxs)("div",{className:"flex items-center gap-1",children:["success"===e.status?(0,t.jsx)(s.default,{name:"CheckCircle2",size:16,className:"text-[var(--ds-accent)]"}):null,"selected"===e.status||"error"===e.status?(0,t.jsxs)(r.Button,{type:"button",size:"sm",variant:"outline",disabled:d,onClick:()=>P(e.id),children:["error"===e.status?(0,t.jsx)(s.default,{name:"RefreshCw",size:14,className:"mr-1"}):null,"error"===e.status?"重试":"上传"]}):null,"uploading"===e.status||"retrying"===e.status?(0,t.jsxs)(r.Button,{type:"button",size:"sm",variant:"outline",onClick:()=>F(e.id),children:[(0,t.jsx)(s.default,{name:"XCircle",size:14,className:"mr-1"}),"取消"]}):null]})]})},e.id))}):null,!j&&!m&&z.some(e=>"selected"===e.status||"error"===e.status)?(0,t.jsx)("div",{className:"flex justify-end",children:(0,t.jsx)(r.Button,{type:"button",size:"sm",onClick:W,disabled:d,children:"上传"})}):null]})}var o=e.i(76639),d=e.i(13354),c=e.i(29250);function u(e){let{open:s,onOpenChange:l,title:n,description:u,uploadUrl:m,resetKey:p}=e,[x,f]=(0,a.useState)(!1),[g,b]=(0,a.useState)(null),h=(0,a.useCallback)(()=>{l(!1),b(null)},[l]),v=(0,a.useCallback)(async()=>{if(!g)return void d.appToast.info("请先选择 zip 文件");let e=new FormData;e.append("file",g),f(!0);try{let t=await (0,c.bridgeFetch)(m,{method:"POST",body:e}),a=Number(t.imported||0),s=Number(t.overwritten||0),l=Array.isArray(t.rejected)?t.rejected.length:0;d.appToast.success("导入完成:导入 ".concat(a,",覆盖 ").concat(s)+(l>0?",拒绝 ".concat(l):"")),h()}catch(e){d.appToast.error("导入失败:".concat(e instanceof Error?e.message:String(e)))}finally{f(!1)}},[h,g,m]);return(0,t.jsx)(o.Dialog,{open:s,onOpenChange:e=>{l(e),e||b(null)},children:(0,t.jsxs)(o.DialogContent,{className:"flex min-h-[320px] max-w-[560px] flex-col",children:[(0,t.jsxs)(o.DialogHeader,{children:[(0,t.jsxs)("div",{children:[(0,t.jsx)(o.DialogTitle,{children:n}),(0,t.jsx)(o.DialogDescription,{children:u})]}),(0,t.jsx)(o.DialogClose,{className:"sidebar-icon-btn","aria-label":"关闭",onClick:h,children:"✕"})]}),(0,t.jsxs)("div",{className:"m-3 flex flex-1 flex-col gap-3",children:[(0,t.jsx)(i,{uploadUrl:m,accept:".zip,application/zip",maxFileSize:0x3200000,multiple:!1,disabled:x,selectionOnly:!0,emptyTitle:"点击或拖拽 zip 文件到此处",emptyHint:"支持 .zip 格式,最大 50MB",onFilesChange:e=>{var t,a;b(null!=(a=null==(t=e[0])?void 0:t.file)?a:null)},onValidationError:e=>{d.appToast.info(e)}},"".concat(s?"open":"closed","-").concat(null!=p?p:m)),(0,t.jsxs)("div",{className:"mt-auto flex justify-end pt-2",children:[(0,t.jsx)(r.Button,{className:"mr-[12px]",type:"button",variant:"plain-outline",size:"lg",onClick:h,children:"取消"}),(0,t.jsx)(r.Button,{type:"button",size:"lg",variant:"default",disabled:x||null==g,onClick:()=>void v(),children:x?"导入中…":"确定"})]})]})]})})}},19573,e=>{"use strict";e.s(["ToolsManageView",()=>U],19573);var t=e.i(18050),a=e.i(71645),s=e.i(65934),l=e.i(87243),r=e.i(13354),n=e.i(50711),i=e.i(19455),o=e.i(2839),d=e.i(94055),c=e.i(94197),u=e.i(92715),m=e.i(36413),p=e.i(72064),x=e.i(93479);function f(e){let{items:s,saveBusy:l,onToggle:r,onExport:n,onRemove:i,className:o}=e,[f,g]=(0,a.useState)(""),b=(0,a.useMemo)(()=>s.filter(e=>(function(e,t){var a,s;let l=t.trim().toLowerCase();if(!l)return!0;let r="system"===e.layer?"系统":"agent"===e.layer?"Agent":"";return"".concat(e.name," ").concat(null!=(a=e.label)?a:""," ").concat(null!=(s=e.description)?s:""," ").concat(r).toLowerCase().includes(l)})(e,f)),[s,f]),h=[{key:"name",title:"名称",headerClassName:"",cellClassName:"",render:e=>{let a=e.label||e.name;return(0,t.jsxs)("span",{className:"inline-flex items-center gap-2",children:[(0,t.jsx)("span",{children:a}),(0,t.jsx)(m.StatusBadge,{tone:e.enabled?"success":"default",children:e.enabled?"启用":"未启用"})]})}},{key:"layer",title:"层级",headerClassName:"w-[88px]",cellClassName:"w-[88px] whitespace-nowrap text-[var(--ds-text)]",render:e=>"system"===e.layer?"系统":"agent"===e.layer?"Agent":"-"},{key:"description",title:"详情",headerClassName:"",cellClassName:"",render:e=>e.description||"-"},{key:"enabled",title:"启用/未启用",headerClassName:"",cellClassName:"whitespace-nowrap text-[var(--ds-text)]",render:e=>(0,t.jsx)("span",{className:"inline-flex items-center gap-2",children:(0,t.jsx)(d.AccentSwitch,{checked:!!e.enabled,disabled:l,onCheckedChange:t=>r(e.name,t),"aria-label":"".concat(e.enabled?"禁用":"启用"," ").concat(e.name)})})},{key:"actions",title:"操作",headerClassName:"w-[128px] ",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:()=>{i(e.name)}})]})}}],v=f.trim();return(0,t.jsxs)("div",{className:"flex flex-col gap-3",children:[(0,t.jsxs)("div",{className:"relative max-w-md",children:[(0,t.jsx)(x.Input,{type:"search",value:f,onChange:e=>g(e.target.value),placeholder:"搜索名称 / 详情 / 层级",className:"h-8 pl-8","aria-label":"搜索工具"}),(0,t.jsx)(p.default,{name:"Search",size:16,className:"pointer-events-none absolute left-2.5 top-1/2 -translate-y-1/2 text-[var(--ds-muted)]"})]}),(0,t.jsx)(u.AppTable,{rows:b,columns:h,getRowKey:e=>"tools:".concat(e.name),className:o,emptyText:v?"未找到匹配工具":void 0})]})}var g=e.i(36845),b=e.i(53925);function h(e){let{open:a,onOpenChange:s,wsUrl:l,apiBase:r,agent:n}=e;return(0,t.jsx)(b.ResourceImportDialog,{open:a,onOpenChange:s,title:"导入工具 zip",description:"选择一个 zip 文件并导入到 tools-runtime。",uploadUrl:(0,g.buildToolsRuntimeImportUrl)(l,r,n),resetKey:n})}var v=e.i(55242);let j=[["name","稳定工具名,与 agent.json.tools 白名单对应"],["call","工具执行入口"],["inputSchema","Zod schema,定义 LLM 入参"],["description","工具描述,可为 async 函数"],["prompt","返回给模型的使用说明,可为 async 函数"],["mapToolResultToToolResultBlockParam","将执行结果映射为 API tool_result 块"]],y=["包目录位于 tools-runtime/<package-name>/,包名使用 kebab-case","包根目录存在 index.js / index.cjs / index.mjs 之一,宿主不会加载源码 TS","入口导出 Tool 对象,工具 name 稳定且唯一","initWsSession 正确处理 ready / skipped / failed",'agent.json.tools 包含工具名或 "*",且未被 disallowedTools 禁用',"GET /api/tools?agent=<id> 中工具 enabled: true 且 readiness: ready"];function w(e){let{index:a,title:s,children:l,className:r}=e;return(0,t.jsxs)("section",{className:"rounded-xl border border-[var(--ds-border)] bg-[var(--surface-1)] p-4 ".concat(null!=r?r:""),children:[(0,t.jsxs)("div",{className:"mb-3 flex items-center gap-3",children:[(0,t.jsx)("span",{className:"flex size-7 shrink-0 items-center justify-center rounded-full bg-[var(--ds-accent)] text-base font-semibold text-[var(--surface-1)]",children:a}),(0,t.jsx)("h3",{className:"text-base font-semibold text-[var(--ds-text)]",children:s})]}),l]})}function N(e){let{open:a,onOpenChange:s}=e;return(0,t.jsx)(v.AppDialog,{open:a,onOpenChange:s,title:"工具接入说明",width:"max-w-4xl",footer:(0,t.jsx)(i.Button,{type:"button",variant:"plain-outline",size:"lg",onClick:()=>s(!1),children:"我知道了"}),children:(0,t.jsxs)("div",{className:"flex max-h-[72vh] flex-col gap-4 overflow-y-auto pr-1 text-sm text-[var(--ds-text)]",children:[(0,t.jsx)(w,{index:1,title:"概念",children:(0,t.jsxs)("div",{className:"flex items-start gap-3",children:[(0,t.jsx)("span",{className:"bg-[var(--ds-accent)]/10 mt-0.5 flex size-9 shrink-0 items-center justify-center rounded-lg text-[var(--ds-accent)]",children:(0,t.jsx)(p.default,{name:"Wrench",size:18})}),(0,t.jsxs)("p",{className:"min-w-0 leading-6 text-[var(--ds-muted)]",children:["Runtime Tool 是磁盘上的独立工具包,放在",(0,t.jsx)("code",{className:"mx-1 rounded bg-[var(--ds-sidebar)] px-1.5 py-0.5",children:"tools-runtime/<package-name>/"}),"下。宿主与工具包只通过编译入口的导出契约通信,互不 import 对方源码。"]})]})}),(0,t.jsxs)(w,{index:2,title:"存放路径",children:[(0,t.jsx)("pre",{className:"overflow-x-auto rounded-lg bg-[var(--ds-sidebar)] p-3 text-xs leading-5 text-[var(--ds-text)]",children:"<WS_AGENTS_ROOT>/tools-runtime/<package-name>/\n index.cjs # 必选:编译后的单文件入口\n package.json # 可选\n build.ts # 可选\n src/ # 可选,宿主不加载"}),(0,t.jsxs)("p",{className:"mt-3 leading-6 text-[var(--ds-muted)]",children:["默认 WS_AGENTS_ROOT 为项目下的",(0,t.jsx)("code",{className:"mx-1 rounded bg-[var(--ds-sidebar)] px-1.5 py-0.5",children:".ws-agents"}),",宿主按",(0,t.jsx)("code",{className:"mx-1 rounded bg-[var(--ds-sidebar)] px-1.5 py-0.5",children:".js > .cjs > .mjs"}),"优先级加载入口。agent 层同名包会覆盖 system 层包。"]})]}),(0,t.jsx)(w,{index:3,title:"接入方式",children:(0,t.jsxs)("div",{className:"space-y-3 text-[var(--ds-muted)]",children:[(0,t.jsxs)("p",{children:[(0,t.jsx)("span",{className:"font-medium text-[var(--ds-text)]",children:"手工放置:"}),"在 .ws-agents/tools-runtime/ 下创建包目录并完成构建,重启会话或触发 reloadDynamicTools。"]}),(0,t.jsxs)("p",{children:[(0,t.jsx)("span",{className:"font-medium text-[var(--ds-text)]",children:"Zip 导入:"}),"zip 内必须是单根目录结构,例如 my-tool/index.cjs。"]}),(0,t.jsxs)("p",{children:[(0,t.jsx)("span",{className:"font-medium text-[var(--ds-text)]",children:"内置 system 包:"}),"发布到 packages/agent/tools-runtime,用户可用 agent 层同名包覆盖。"]})]})}),(0,t.jsxs)(w,{index:4,title:"包内必须实现的契约",children:[(0,t.jsx)("p",{className:"mt-2 leading-6 text-[var(--ds-muted)]",children:"入口模块需导出至少一个 Tool 对象,可使用 default、tools 数组或命名导出。"}),(0,t.jsx)("div",{className:"mt-3 grid gap-2",children:j.map(e=>{let[a,s]=e;return(0,t.jsxs)("div",{className:"rounded-lg border border-[var(--ds-border)] bg-[var(--surface-1)] px-3 py-2",children:[(0,t.jsx)("code",{className:"text-base font-semibold text-[var(--ds-accent)]",children:a}),(0,t.jsx)("p",{className:"mt-1 text-base leading-5 text-[var(--ds-muted)]",children:s})]},a)})}),(0,t.jsx)("div",{className:"mt-4 rounded-lg border border-[var(--ds-border)] bg-[var(--ds-sidebar)] p-3",children:(0,t.jsxs)("p",{className:"leading-6 text-[var(--ds-muted)]",children:["生产包推荐实现",(0,t.jsx)("code",{className:"mx-1 rounded bg-[var(--surface-1)] px-1.5 py-0.5",children:"initWsSession"}),",返回 ready 才会进入 LLM 工具列表;skipped 或 failed 不会暴露。未实现时默认 ready。"]})})]}),(0,t.jsx)(w,{index:5,title:"最小示例",children:(0,t.jsxs)("p",{className:"leading-6 text-[var(--ds-muted)]",children:["最小包通常包含 package.json、build.ts 和 src/index.ts,构建后在包根目录产出",(0,t.jsx)("code",{className:"mx-1 rounded bg-[var(--ds-sidebar)] px-1.5 py-0.5",children:"index.cjs"}),"。若 package.json 使用",(0,t.jsx)("code",{className:"mx-1 rounded bg-[var(--ds-sidebar)] px-1.5 py-0.5",children:"type: module"}),",优先产出 index.cjs,避免 ESM/CJS 冲突。"]})}),(0,t.jsxs)(w,{index:6,title:"在 agent 中启用",children:[(0,t.jsx)("pre",{className:"overflow-x-auto rounded-lg bg-[var(--ds-sidebar)] p-3 text-base leading-5 text-[var(--ds-text)]",children:'{\n "tools": ["HelloTool"]\n}'}),(0,t.jsxs)("p",{className:"mt-3 leading-6 text-[var(--ds-muted)]",children:[(0,t.jsx)("code",{className:"mx-1 rounded bg-[var(--ds-sidebar)] px-1.5 py-0.5",children:'"*"'}),"暴露全部已加载且 ready 的 runtime 工具;",(0,t.jsx)("code",{className:"mx-1 rounded bg-[var(--ds-sidebar)] px-1.5 py-0.5",children:"[]"}),"不暴露任何 runtime 工具。MCP 工具由 mcpServers 单独控制。"]})]}),(0,t.jsxs)(w,{index:7,title:"宿主加载流程",children:[(0,t.jsx)("div",{className:"rounded-lg bg-[var(--ds-sidebar)] p-3 text-base leading-6 text-[var(--ds-muted)]",children:"discoverRuntimePackages → dynamic import index.* → initWsSession → extractToolsFromModule → agent.json.tools 白名单过滤 → LLM 可见工具列表"}),(0,t.jsx)("p",{className:"mt-3 leading-6 text-[var(--ds-muted)]",children:"触发时机包括 WS 会话 init、reloadDynamicTools,以及带 agent 参数的 GET /api/tools。 可通过 CLAUDE_CODE_RUNTIME_TOOLS_ENABLED=0 关闭 runtime 工具。"})]}),(0,t.jsx)(w,{index:8,title:"参考实现",children:(0,t.jsxs)("div",{className:"space-y-2 leading-6 text-[var(--ds-muted)]",children:[(0,t.jsx)("p",{children:"schedule-tool:会话级 init、agent 白名单、文件持久化。"}),(0,t.jsx)("p",{children:"git-tool:环境变量驱动、ready / skipped / failed 状态。"}),(0,t.jsx)("p",{children:"code-tool:通过 buildSessionAppend 追加会话上下文。"})]})}),(0,t.jsx)(w,{index:9,title:"验收清单",children:(0,t.jsx)("ul",{className:"grid gap-2",children:y.map(e=>(0,t.jsxs)("li",{className:"flex gap-2 leading-6 text-[var(--ds-muted)]",children:[(0,t.jsx)(p.default,{name:"CheckCircle2",size:16,className:"mt-1 shrink-0 text-[var(--ds-accent)]"}),(0,t.jsx)("span",{children:e})]},e))})}),(0,t.jsx)(w,{index:10,title:"常见问题",children:(0,t.jsxs)("div",{className:"space-y-2 leading-6 text-[var(--ds-muted)]",children:[(0,t.jsx)("p",{children:"放了包但工具不可见:确认已构建 index.*、initWsSession 返回 ready、白名单包含工具名。"}),(0,t.jsx)("p",{children:"installed-list 有但会话 disabled:通常是 init 返回 skipped/failed,或未通过 agent 白名单。"}),(0,t.jsx)("p",{children:"同名工具冲突:agent 层覆盖 system 层;同一层内工具 name 重复时后者会被去重丢弃。"})]})})]})})}var k=e.i(68499),C=e.i(56708),T=e.i(62427);function R(e){return(null!=e.packageId?String(e.packageId).trim():"")||e.name}function S(e){let t=null!=e.packageId?String(e.packageId).trim():"";return!0===e.deletable&&t.length>0}function U(){let e=(0,s.useAppStore)(e=>e.wsUrl),d=(0,s.useAppStore)(e=>e.apiBase),c=(0,s.useAppStore)(e=>e.agentConfig),u=(0,s.useAppStore)(e=>e.patchAgentConfig),{currentAgent:m,loadAgentConfig:x}=(0,l.useSession)(),g=(0,n.usePersistAgentConfigField)("tools"),b=c.tools,[v,j]=(0,a.useState)([]),[y,w]=(0,a.useState)(!1),[U,M]=(0,a.useState)(!1),[D,A]=(0,a.useState)(!1),[E,L]=(0,a.useState)(!1);(0,a.useEffect)(()=>{x()},[x]);let z=(0,a.useCallback)(async(e,t)=>{M(!0);try{await g(e,{silent:t})}finally{M(!1)}},[g]),I=(0,a.useCallback)(async()=>{j([]),w(!0);try{var t;let a=await (0,T.listInstalledTools)(e,d,m());j(null!=(t=a.tools)?t:[])}catch(e){j([]),r.appToast.error("加载失败:".concat(e instanceof Error?e.message:String(e)))}finally{w(!1)}},[e,d,m]);(0,a.useEffect)(()=>{I()},[I]);let B=(0,a.useCallback)(e=>v.find(t=>t.name===e),[v]),O=(0,a.useMemo)(()=>v.slice().sort((e,t)=>e.name.localeCompare(t.name)).map(e=>(function(e,t){var a;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,description:null!=(a=e.searchHint)?a:"",enabled:t,packageId:s,canManage:S({deletable:e.deletable,packageId:s}),layer:e.layer}})(e,b.includes(e.name))),[v,b]),_=(0,a.useCallback)(async t=>{let a=B(t);if(!a||!S({deletable:a.deletable,packageId:a.packageName}))return void r.appToast.error("系统内置工具不可删除");if(await (0,k.confirmAlertDialog)({title:"确认删除工具包?",description:"工具名:".concat(t),confirmText:"删除",cancelText:"取消"}))try{await (0,T.deleteRuntimeTool)(e,d,m(),R({packageId:a.packageName,name:a.name}));let s=b.filter(e=>e!==t);u({tools:s}),await z(s,!0),await I()}catch(e){r.appToast.error("删除失败:".concat(e instanceof Error?e.message:String(e)))}},[B,e,d,m,b,u,z,I]),P=(0,a.useCallback)(t=>{let a=B(t);if(!a||!S({deletable:a.deletable,packageId:a.packageName}))return void r.appToast.error("系统内置工具不可导出");window.open((0,T.exportRuntimeToolUrl)(e,d,m(),R({packageId:a.packageName,name:a.name})),"_blank","noopener")},[B,e,d,m]),F=(0,a.useCallback)((e,t)=>{let a=t?[...new Set([...b,e])].sort():b.filter(t=>t!==e).sort();u({tools:a}),z(a,!0)},[b,u,z]);return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(C.ManageChromeHeaderActions,{children:(0,t.jsxs)("div",{className:"flex flex-wrap items-center gap-3",children:[(0,t.jsxs)(i.Button,{type:"button",variant:"plain-outline",size:"lg",className:"inline-flex items-center justify-center gap-1.5",onClick:()=>A(!0),children:[(0,t.jsx)(p.default,{name:"Info",size:16,className:"align-middle"}),"工具说明"]}),(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:()=>L(!0),children:[(0,t.jsx)(p.default,{name:"Import",size:16,className:"align-middle"}),"导入自定义工具"]})]})}),y?(0,t.jsx)(o.Loading,{text:"加载中…",className:"min-h-[200px]"}):(0,t.jsx)(f,{items:O,saveBusy:U,onToggle:F,onExport:P,onRemove:_}),(0,t.jsx)(h,{open:E,onOpenChange:e=>{L(e),e||I()},wsUrl:e,apiBase:d,agent:m()}),(0,t.jsx)(N,{open:D,onOpenChange:A})]})}}]);