@auto-ai/agent 2.1.120 → 2.1.122

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 (85) hide show
  1. package/.env.example +2 -1
  2. package/dist/404/index.html +1 -1
  3. package/dist/404.html +1 -1
  4. package/dist/_next/static/chunks/19aa69c07b3642d5.js +1 -0
  5. package/dist/_next/static/chunks/24459c7365a2b28b.js +1 -0
  6. package/dist/_next/static/chunks/{d3e2070a86378cfb.js → 33eeef286c328da0.js} +1 -1
  7. package/dist/_next/static/chunks/3407244006d6a98a.js +1 -0
  8. package/dist/_next/static/chunks/566e152e480b267a.js +1 -0
  9. package/dist/_next/static/chunks/6ad4268160f361a6.js +1 -0
  10. package/dist/_next/static/chunks/{d9a278a2a26e8ee5.js → 6f9a48a7f83e669a.js} +1 -1
  11. package/dist/_next/static/chunks/7658b5b9c2865eb1.js +1 -0
  12. package/dist/_next/static/chunks/7a5fd448b280dd64.js +1 -0
  13. package/dist/_next/static/chunks/{fa677aa06f1c0539.js → 98f0c5604e839ba2.js} +1 -1
  14. package/dist/_next/static/chunks/a38eccf0bb5ca1e9.js +1 -0
  15. package/dist/_next/static/chunks/b29a354245bfc377.css +1 -0
  16. package/dist/_next/static/chunks/b76778c5811ef7a1.js +1 -0
  17. package/dist/_next/static/chunks/c2bed9d5fa7be4bd.js +1 -0
  18. package/dist/_next/static/chunks/c5a4977aae6a008c.js +1 -0
  19. package/dist/_next/static/chunks/e7bd145455a541af.css +4 -0
  20. package/dist/_next/static/chunks/f2bb685629307d4d.js +1 -0
  21. package/dist/_next/static/chunks/f7e71ce1c236f806.js +1 -0
  22. package/dist/_next/static/chunks/{67acc15b8a448e1a.js → fc4be3bcf72559a0.js} +1 -1
  23. package/dist/index.html +1 -1
  24. package/dist/index.txt +16 -16
  25. package/dist/manage/about/index.html +2 -2
  26. package/dist/manage/about/index.txt +19 -19
  27. package/dist/manage/add-account/basic/index.html +2 -2
  28. package/dist/manage/add-account/basic/index.txt +23 -22
  29. package/dist/manage/add-account/index.html +2 -2
  30. package/dist/manage/add-account/index.txt +22 -23
  31. package/dist/manage/agent-teams/index.html +2 -2
  32. package/dist/manage/agent-teams/index.txt +21 -21
  33. package/dist/manage/env/index.html +2 -2
  34. package/dist/manage/env/index.txt +21 -21
  35. package/dist/manage/general/index.html +2 -2
  36. package/dist/manage/general/index.txt +19 -19
  37. package/dist/manage/index.html +1 -1
  38. package/dist/manage/index.txt +16 -16
  39. package/dist/manage/mcp/index.html +2 -2
  40. package/dist/manage/mcp/index.txt +21 -21
  41. package/dist/manage/permissions/index.html +2 -2
  42. package/dist/manage/permissions/index.txt +19 -19
  43. package/dist/manage/skills/index.html +2 -2
  44. package/dist/manage/skills/index.txt +21 -21
  45. package/dist/manage/task/index.html +2 -2
  46. package/dist/manage/task/index.txt +19 -19
  47. package/dist/manage/teams/index.html +2 -2
  48. package/dist/manage/teams/index.txt +19 -19
  49. package/dist/manage/tools/index.html +2 -2
  50. package/dist/manage/tools/index.txt +21 -21
  51. package/dist/ws-test.html +129 -191
  52. package/mcps-runtime/claude-geelib-channel/.mcp.json +18 -0
  53. package/mcps-runtime/claude-geelib-channel/server/boot.mjs +32 -0
  54. package/mcps-runtime/claude-geelib-channel/server/geelib-api.mjs +192 -0
  55. package/mcps-runtime/claude-geelib-channel/server/geelib-auth.mjs +147 -0
  56. package/mcps-runtime/claude-geelib-channel/server/geelib-client.mjs +63 -0
  57. package/mcps-runtime/claude-geelib-channel/server/index.mjs +451 -0
  58. package/mcps-runtime/claude-geelib-channel/server/poll.mjs +457 -0
  59. package/mcps-runtime/claude-geelib-channel/server/state.mjs +216 -0
  60. package/package.json +6 -6
  61. package/tools-runtime/code-tool/index.cjs +1 -0
  62. package/tools-runtime/code-tool/src/index.ts +7 -1
  63. package/tools-runtime/git-tool/index.cjs +69 -5
  64. package/tools-runtime/git-tool/src/workspace.ts +101 -4
  65. package/tools-runtime/git-tool/src/wsInit.ts +26 -3
  66. package/dist/_next/static/chunks/249606605eed1993.js +0 -1
  67. package/dist/_next/static/chunks/424d3f3f176d43d7.js +0 -1
  68. package/dist/_next/static/chunks/4302af16b34bf750.js +0 -1
  69. package/dist/_next/static/chunks/4a073924e062c459.css +0 -1
  70. package/dist/_next/static/chunks/6209b42cbfcf288a.js +0 -1
  71. package/dist/_next/static/chunks/83bf6e4bc0aad48b.css +0 -4
  72. package/dist/_next/static/chunks/8b34d657c6bbb8df.js +0 -1
  73. package/dist/_next/static/chunks/904ad158fd721117.js +0 -1
  74. package/dist/_next/static/chunks/99063f8d79783308.js +0 -1
  75. package/dist/_next/static/chunks/9cd912a1967f10df.js +0 -1
  76. package/dist/_next/static/chunks/c52dcbe269bb02d0.js +0 -1
  77. package/dist/_next/static/chunks/d01957b1055b357a.js +0 -1
  78. package/dist/_next/static/chunks/dacc94cf10289334.js +0 -1
  79. package/dist/_next/static/chunks/fff9d250e482f00e.js +0 -1
  80. package/skills-runtime/geelib/SKILL.md +0 -229
  81. package/skills-runtime/geelib/geelib-poller-state.json +0 -17
  82. package/skills-runtime/geelib/geelib.mjs +0 -762
  83. /package/dist/_next/static/{fg4nA8liSSLEgWV4WTZDt → pVB1xZbEW09ksdJlV12Zn}/_buildManifest.js +0 -0
  84. /package/dist/_next/static/{fg4nA8liSSLEgWV4WTZDt → pVB1xZbEW09ksdJlV12Zn}/_clientMiddlewareManifest.json +0 -0
  85. /package/dist/_next/static/{fg4nA8liSSLEgWV4WTZDt → pVB1xZbEW09ksdJlV12Zn}/_ssgManifest.js +0 -0
@@ -1 +0,0 @@
1
- (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,93479,e=>{"use strict";e.s(["Input",()=>l]);var t=e.i(18050),a=e.i(75157);function l(e){let{className:l,type:r="text",size:s="default",...i}=e;return(0,t.jsx)("input",{type:r,"data-slot":"input","data-size":s,className:(0,a.cn)("h-8 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-8 data-[size=lg]:h-10 data-[size=sm]:h-7",l),...i})}},53925,e=>{"use strict";e.s(["ResourceImportDialog",()=>u],53925);var t=e.i(18050),a=e.i(71645),l=e.i(72064),r=e.i(75157),s=e.i(19455);function i(e){return e<1024?"".concat(e," B"):e<1048576?"".concat((e/1024).toFixed(1)," KB"):"".concat((e/1048576).toFixed(1)," MB")}function n(e){let{uploadUrl:n,accept:o,disabled:d=!1,multiple:c=!1,maxFileSize:u=0x3200000,autoUpload:m=!1,method:f="POST",transport:p="xhr",fieldName:x="file",headers:b,extraFormData:h,autoRetryTimes:v=0,autoRetryDelayMs:g=800,selectionOnly:y=!1,className:w,emptyTitle:j="点击或拖拽文件到此处",emptyHint:N="支持上传文件",onFilesChange:k,onUploadSuccess:C,onUploadError:R,onValidationError:S}=e,T=a.useId(),E=a.useRef(null),A=a.useRef(new Map),O=a.useRef(new Map),M=a.useRef([]),[P,U]=a.useState(!1),[D,z]=a.useState([]),B=a.useMemo(()=>o?o.split(",").map(e=>e.trim().toLowerCase()).filter(Boolean):[],[o]);a.useEffect(()=>{M.current=D,null==k||k(D)},[D,k]),a.useEffect(()=>()=>{for(let e of A.current.values())e.abort();for(let e of O.current.values())e.abort();for(let e of M.current)e.previewUrl&&URL.revokeObjectURL(e.previewUrl)},[]);let L=a.useCallback((e,t)=>{z(a=>a.map(a=>a.id===e?{...a,...t}:a))},[]),I=a.useCallback(async(e,t)=>{let a=M.current.find(t=>t.id===e);if(!a||d)return;L(e,{status:t>0?"retrying":"uploading",progress:0,error:"",retryCount:t});let l=new FormData;if(h)for(let[e,t]of Object.entries(h))l.append(e,t);l.append(x,a.file);try{let t="";if("fetch"===p){let a=new AbortController;O.current.set(e,a);let r=await fetch(n,{method:f,headers:b,body:l,signal:a.signal}),s=await r.text();try{t=s?JSON.parse(s):""}catch(e){t=s}if(!r.ok)throw Error("上传失败:".concat(r.status," ").concat(r.statusText))}else t=await new Promise((t,a)=>{let r=new XMLHttpRequest;if(A.current.set(e,r),r.open(f,n,!0),b)for(let[e,t]of Object.entries(b))r.setRequestHeader(e,t);r.upload.onprogress=t=>{if(!t.lengthComputable)return;let a=Math.min(100,Math.round(t.loaded/t.total*100));L(e,{progress:a})},r.onerror=()=>a(Error("网络异常,上传失败")),r.onabort=()=>a(Error("__ABORTED__")),r.onload=()=>{r.status>=200&&r.status<300?t(function(e){let t=e.responseText||"";try{return JSON.parse(t)}catch(e){return t}}(r)):a(Error("上传失败:".concat(r.status," ").concat(r.statusText)))},r.send(l)});L(e,{status:"success",progress:100,error:""});let a=M.current.find(t=>t.id===e);a&&(null==C||C(a,t))}catch(r){let a=r instanceof Error?r.message:String(r);if("__ABORTED__"===a)return void L(e,{status:"selected",progress:0,error:""});if(t<v){L(e,{status:"retrying",error:"重试中(".concat(t+1,"/").concat(v,")")}),await new Promise(e=>window.setTimeout(e,g)),await I(e,t+1);return}L(e,{status:"error",error:a});let l=M.current.find(t=>t.id===e);l&&(null==R||R(l,a))}finally{A.current.delete(e),O.current.delete(e)}},[g,v,d,h,x,b,f,R,C,p,L,n]),_=a.useCallback(e=>{I(e,0)},[I]),F=a.useCallback(e=>{var t,a;null==(t=A.current.get(e))||t.abort(),null==(a=O.current.get(e))||a.abort()},[]),V=a.useCallback(()=>{for(let e of M.current)("selected"===e.status||"error"===e.status)&&_(e.id)},[_]),K=a.useCallback(e=>{if(d||!e.length)return;let t=new Set(M.current.map(e=>"".concat(e.file.name,"::").concat(e.file.size))),a=[];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 a=e.name.toLowerCase(),l=(e.type||"").toLowerCase();return t.some(e=>e.startsWith(".")?a.endsWith(e):e.endsWith("/*")?l.startsWith("".concat(e.slice(0,-1))):l===e)}(l,B)){null==S||S("文件类型不支持:".concat(l.name));continue}if(l.size>u){null==S||S("文件过大(最大 ".concat(i(u),"):").concat(l.name));continue}t.add(e),a.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(!a.length)return;let l=c?[...M.current,...a]:[a[a.length-1]];if(!c)for(let e of M.current)e.previewUrl&&URL.revokeObjectURL(e.previewUrl);if(z(l),m&&!y)for(let e of a)_(e.id)},[B,m,d,u,c,S,y,_]),H=a.useCallback(e=>{let t=e.target.files;t&&(K(Array.from(t)),e.target.value="")},[K]),J=a.useCallback(e=>{var t;e.preventDefault(),e.stopPropagation(),U(!1),d||K(Array.from(null!=(t=e.dataTransfer.files)?t:[]))},[K,d]);return(0,t.jsxs)("div",{className:(0,r.cn)("flex min-h-0 w-full flex-col gap-3",w),children:[(0,t.jsx)("input",{ref:E,id:T,type:"file",hidden:!0,accept:o,multiple:c,disabled:d,onChange:H}),(0,t.jsxs)("label",{htmlFor:T,onDragOver:e=>{e.preventDefault(),d||U(!0)},onDragLeave:e=>{e.preventDefault(),U(!1)},onDrop:J,className:(0,r.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)]",P&&"bg-[var(--ds-accent)]/5 border-[var(--ds-accent)]",d&&"cursor-not-allowed opacity-60"),children:[(0,t.jsx)(l.default,{name:"Upload",size:20,className:"text-[var(--ds-muted)]"}),(0,t.jsx)("div",{className:"text-base text-[var(--ds-text)]",children:j}),(0,t.jsx)("div",{className:"text-sm text-[var(--ds-muted)]",children:N})]}),D.length?(0,t.jsx)("div",{className:"space-y-2",children:D.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:i(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]}),y?null:(0,t.jsxs)("div",{className:"flex items-center gap-1",children:["success"===e.status?(0,t.jsx)(l.default,{name:"CheckCircle2",size:16,className:"text-[var(--ds-accent)]"}):null,"selected"===e.status||"error"===e.status?(0,t.jsxs)(s.Button,{type:"button",size:"sm",variant:"outline",disabled:d,onClick:()=>_(e.id),children:["error"===e.status?(0,t.jsx)(l.default,{name:"RefreshCw",size:14,className:"mr-1"}):null,"error"===e.status?"重试":"上传"]}):null,"uploading"===e.status||"retrying"===e.status?(0,t.jsxs)(s.Button,{type:"button",size:"sm",variant:"outline",onClick:()=>F(e.id),children:[(0,t.jsx)(l.default,{name:"XCircle",size:14,className:"mr-1"}),"取消"]}):null]})]})},e.id))}):null,!y&&!m&&D.some(e=>"selected"===e.status||"error"===e.status)?(0,t.jsx)("div",{className:"flex justify-end",children:(0,t.jsx)(s.Button,{type:"button",size:"sm",onClick:V,disabled:d,children:"上传"})}):null]})}var o=e.i(76639),d=e.i(13354),c=e.i(29250);function u(e){let{open:l,onOpenChange:r,title:i,description:u,uploadUrl:m,resetKey:f}=e,[p,x]=(0,a.useState)(!1),[b,h]=(0,a.useState)(null),v=(0,a.useCallback)(()=>{r(!1),h(null)},[r]),g=(0,a.useCallback)(async()=>{if(!b)return void d.appToast.info("请先选择 zip 文件");let e=new FormData;e.append("file",b),x(!0);try{let t=await (0,c.bridgeFetch)(m,{method:"POST",body:e}),a=Number(t.imported||0),l=Number(t.overwritten||0),r=Array.isArray(t.rejected)?t.rejected.length:0;d.appToast.success("导入完成:导入 ".concat(a,",覆盖 ").concat(l)+(r>0?",拒绝 ".concat(r):"")),v()}catch(e){d.appToast.error("导入失败:".concat(e instanceof Error?e.message:String(e)))}finally{x(!1)}},[v,b,m]);return(0,t.jsx)(o.Dialog,{open:l,onOpenChange:e=>{r(e),e||h(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:i}),(0,t.jsx)(o.DialogDescription,{children:u})]}),(0,t.jsx)(o.DialogClose,{className:"sidebar-icon-btn","aria-label":"关闭",onClick:v,children:"✕"})]}),(0,t.jsxs)("div",{className:"m-3 flex flex-1 flex-col gap-3",children:[(0,t.jsx)(n,{uploadUrl:m,accept:".zip,application/zip",maxFileSize:0x3200000,multiple:!1,disabled:p,selectionOnly:!0,emptyTitle:"点击或拖拽 zip 文件到此处",emptyHint:"支持 .zip 格式,最大 50MB",onFilesChange:e=>{var t,a;h(null!=(a=null==(t=e[0])?void 0:t.file)?a:null)},onValidationError:e=>{d.appToast.info(e)}},"".concat(l?"open":"closed","-").concat(null!=f?f:m)),(0,t.jsxs)("div",{className:"mt-auto flex justify-end pt-2",children:[(0,t.jsx)(s.Button,{className:"mr-[12px]",type:"button",variant:"plain-outline",size:"lg",onClick:v,children:"取消"}),(0,t.jsx)(s.Button,{type:"button",size:"lg",variant:"default",disabled:p||null==b,onClick:()=>void g(),children:p?"导入中…":"确定"})]})]})]})})}},94197,e=>{"use strict";e.s(["IconTooltipButton",()=>n]);var t=e.i(18050),a=e.i(72064),l=e.i(19455),r=e.i(46798),s=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 n(e){let{icon:n,label:o,ariaLabel:d,tone:c="muted",disabled:u,className:m,iconClassName:f,onClick:p}=e;return(0,t.jsx)(r.TooltipProvider,{delayDuration:150,children:(0,t.jsxs)(r.Tooltip,{children:[(0,t.jsx)(r.TooltipTrigger,{asChild:!0,children:(0,t.jsx)(l.Button,{type:"button",variant:"plain",size:"icon",className:(0,s.cn)("h-4 w-4",i[c],m),disabled:u,"aria-label":null!=d?d:o,onClick:p,children:(0,t.jsx)(a.default,{name:n,size:16,className:f})})}),(0,t.jsx)(r.TooltipContent,{side:"bottom",align:"center",className:"text-base",children:o})]})})}},56708,e=>{"use strict";e.s(["ManageChromeHeaderActions",()=>n,"ManageFeatureChrome",()=>i]);var t=e.i(18050),a=e.i(71645),l=e.i(74080),r=e.i(72064);let s=(0,a.createContext)(null);function i(e){let{title:l,description:i,children:n,showTitle:o=!0,headerIcon:d}=e,[c,u]=(0,a.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)(r.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)(s.Provider,{value:c,children:n})})]})}function n(e){let{children:t}=e,r=(0,a.useContext)(s);return(0,a.useSyncExternalStore)(()=>()=>{},()=>!0,()=>!1)&&r?(0,l.createPortal)(t,r):null}},92715,85413,e=>{"use strict";e.s(["AppTable",()=>m],92715);var t=e.i(18050);e.s(["Empty",()=>r],85413);var a=e.i(75157),l=e.i(72064);function r(e){let{text:r="暂无数据",className:s}=e;return(0,t.jsxs)("div",{className:(0,a.cn)("flex min-h-[180px] w-full flex-col items-center justify-center gap-2 py-4 text-base text-[var(--ds-muted)]",s),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:r})]})}var s=e.i(71645);let i=s.forwardRef((e,l)=>{let{className:r,...s}=e;return(0,t.jsx)("div",{className:"relative w-full overflow-auto",children:(0,t.jsx)("table",{ref:l,className:(0,a.cn)("w-full caption-bottom border-collapse text-sm",r),...s})})});i.displayName="Table";let n=s.forwardRef((e,l)=>{let{className:r,...s}=e;return(0,t.jsx)("thead",{ref:l,className:(0,a.cn)("[&_tr]:table [&_tr]:w-full [&_tr]:table-fixed [&_tr]:border-b",r),...s})});n.displayName="TableHeader";let o=s.forwardRef((e,l)=>{let{className:r,viewportFit:i=!0,viewportReserveBottom:n=16,viewportPaginationReserve:o=0,style:d,...c}=e,u=s.useRef(null),m=s.useCallback(e=>{u.current=e,"function"==typeof l?l(e):l&&(l.current=e)},[l]),[f,p]=s.useState(void 0);return s.useLayoutEffect(()=>{var e,t;if(!i)return void p(void 0);let a=()=>{var e,t;let a=u.current;if(!a)return;let l=a.getBoundingClientRect().top;p(Math.max(80,Math.floor((null!=(t=null==(e=window.visualViewport)?void 0:e.height)?t:window.innerHeight)-l-(n+o))))};a();let l=new ResizeObserver(()=>{a()});try{l.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;l.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)}},[i,n,o]),(0,t.jsx)("tbody",{ref:m,className:(0,a.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:i&&void 0!==f?{...d,maxHeight:f}:d,...c})});o.displayName="TableBody";let d=s.forwardRef((e,l)=>{let{className:r,hoverable:s=!0,...i}=e;return(0,t.jsx)("tr",{ref:l,className:(0,a.cn)("border-b transition-colors [&>td]:transition-colors data-[state=selected]:[&>td]:!bg-[var(--ds-item-active)]",s&&"group/table-row",r),...i})});d.displayName="TableRow";let c=s.forwardRef((e,l)=>{let{className:r,...s}=e;return(0,t.jsx)("th",{ref:l,className:(0,a.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",r),...s})});c.displayName="TableHead";let u=s.forwardRef((e,l)=>{let{className:r,...s}=e;return(0,t.jsx)("td",{ref:l,className:(0,a.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)]",r),...s})});function m(e){let{rows:l,columns:s,getRowKey:m,className:f,rowClassName:p,headerRowClassName:x,emptyText:b,emptyNode:h,bodyProps:v}=e;return(0,t.jsx)("div",{className:(0,a.cn)("overflow-hidden border border-[var(--ds-border)]",f),children:(0,t.jsxs)(i,{children:[(0,t.jsx)(n,{children:(0,t.jsx)(d,{className:(0,a.cn)("bg-[var(--ds-main-tint)] hover:bg-[var(--ds-main-tint)]",x),children:s.map(e=>(0,t.jsx)(c,{className:e.headerClassName,children:e.title},e.key))})}),(0,t.jsx)(o,{...v,children:l.length?l.map(e=>(0,t.jsx)(d,{className:"function"==typeof p?p(e):p,children:s.map(a=>(0,t.jsx)(u,{className:a.cellClassName,children:a.render(e)},a.key))},m(e))):(0,t.jsx)(d,{hoverable:!1,children:(0,t.jsx)(u,{colSpan:s.length,className:"py-6",children:null!=h?h:(0,t.jsx)(r,{text:b})})})})]})})}u.displayName="TableCell"},62427,e=>{"use strict";e.s(["deleteRuntimeMcp",()=>c,"deleteRuntimeSkill",()=>h,"deleteRuntimeTool",()=>d,"exportRuntimeMcpUrl",()=>m,"exportRuntimeSkillUrl",()=>v,"exportRuntimeToolUrl",()=>u,"importRuntimeMcp",()=>p,"importRuntimeTool",()=>f,"installCloudSkill",()=>y,"listAgentTeams",()=>i,"listCloudSkillCatalog",()=>g,"listMcpServers",()=>l,"listRuntimeMcpPackages",()=>o,"listRuntimeTools",()=>n,"listSkills",()=>s,"listTools",()=>r,"loadRemoteMcpJson",()=>x,"saveRemoteMcpJson",()=>b]);var t=e.i(29250),a=e.i(36845);async function l(e,l,r){let s=await (0,t.get)((0,a.buildMcpServersListUrl)(e,l,r));return{servers:Array.isArray(s.servers)?s.servers:[]}}async function r(e,l,r){let s=await (0,t.get)((0,a.buildToolsListUrl)(e,l,r));return{tools:Array.isArray(s.tools)?s.tools:[]}}async function s(e,l,r){let s=await (0,t.get)((0,a.getSkillsList)(e,l,r));return{skills:Array.isArray(s.skills)?s.skills:[]}}async function i(e,l,r){let s=await (0,t.get)((0,a.buildAgentTeamsListUrl)(e,l,r));return{teamAgentTypes:Array.isArray(s.teamAgentTypes)?s.teamAgentTypes:[],agentTeams:Array.isArray(s.agentTeams)?s.agentTeams:[]}}async function n(e,l,r){let s=await (0,t.get)((0,a.buildToolsRuntimeFilesUrl)(e,l,r));return{runtimeToolsDir:"string"==typeof s.runtimeToolsDir?s.runtimeToolsDir:"",items:Array.isArray(s.items)?s.items.filter(e=>!!(e&&e.id)):[]}}async function o(e,l,r){let s=await (0,t.get)((0,a.buildMcpRuntimeFilesUrl)(e,l,r));return{mcpRuntimeDir:"string"==typeof s.mcpRuntimeDir?s.mcpRuntimeDir:"",items:Array.isArray(s.items)?s.items.filter(e=>!!(e&&e.id)):[]}}async function d(e,l,r,s){return(0,t.del)((0,a.buildToolsRuntimeDeleteUrl)(e,l,r,s))}async function c(e,l,r,s){return(0,t.del)((0,a.buildMcpRuntimeDeleteUrl)(e,l,r,s))}function u(e,t,l,r){return(0,a.buildToolsRuntimeExportUrl)(e,t,l,r)}function m(e,t,l,r){return(0,a.buildMcpRuntimeExportUrl)(e,t,l,r)}async function f(e,l,r,s){let i=new FormData;return i.append("file",s),(0,t.post)((0,a.buildToolsRuntimeImportUrl)(e,l,r),i,{type:"file"})}async function p(e,l,r,s){let i=new FormData;return i.append("file",s),(0,t.post)((0,a.buildMcpRuntimeImportUrl)(e,l,r),i,{type:"file"})}async function x(e,l,r){return(0,t.get)((0,a.buildRemoteMcpJsonUrl)(e,l,r))}async function b(e,l,r,s){await (0,t.post)((0,a.buildRemoteMcpJsonUrl)(e,l,r),{content:s})}async function h(e,l,r,s){return(0,t.del)((0,a.buildSkillsRuntimeDeleteUrl)(e,l,r,s))}function v(e,t,l,r){return(0,a.buildSkillsRuntimeExportUrl)(e,t,l,r)}async function g(e,l,r,s,i,n){let o=await (0,t.get)((0,a.buildCloudSkillCatalogUrl)(e,l,r,s,i,n));return{items:Array.isArray(o.items)?o.items:[],totalPages:Number(o.totalPages||0)}}async function y(e,l,r,s){await (0,t.post)((0,a.buildCloudSkillInstallUrl)(e,l,r),{id:s})}},94055,e=>{"use strict";e.s(["AccentSwitch",()=>D],94055);var t=e.i(18050);e.s(["Root",()=>A,"Thumb",()=>O],39606),e.s([],37751),e.i(37751),e.i(47167);var a=e.i(71645),l=e.i(94349),r=e.i(76477),s=e.i(26292),i=e.i(977),n=e.i(62372),o=e.i(17514),d=e.i(27601),c=e.i(19805),u=e.i(89879),m=e.i(91730),f=e.i(67805);let p=a.createContext(void 0),x=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},v=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?{[x.valid]:""}:{[x.invalid]:""},checked:e=>e?{[v.checked]:""}:{[v.unchecked]:""}},y=a.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=a.useContext(y);if(t.setValidityData===o.NOOP&&!e)throw Error((0,f.default)(28));return t}let j=a.createContext({formRef:{current:{fields:new Map}},errors:{},clearErrors:o.NOOP,validationMode:"onSubmit",submitAttemptedRef:{current:!1}}),N=a.createContext({controlId:void 0,registerControlId:o.NOOP,labelId:void 0,setLabelId:o.NOOP,messageIds:[],setMessageIds:o.NOOP,getDescriptionProps:e=>e});function k(){return a.useContext(N)}var C=e.i(30628),R=e.i(29315),S=e.i(5963),T=e.i(3404),E=e.i(19904);let A=a.forwardRef(function(e,f){let{checked:x,className:b,defaultChecked:h,"aria-labelledby":v,form:y,id:N,inputRef:A,name:O,nativeButton:M=!1,onCheckedChange:P,readOnly:U=!1,required:D=!1,disabled:z=!1,render:B,uncheckedValue:L,value:I,style:_,...F}=e,{clearErrors:V}=a.useContext(j),{state:K,setTouched:H,setDirty:J,validityData:W,setFilled:q,setFocused:Y,shouldValidateOnChange:X,validationMode:G,disabled:Q,name:Z,validation:$}=w(),{labelId:ee}=k(),et=Q||z,ea=null!=Z?Z:O,el=(0,r.useStableCallback)(P),er=a.useRef(null),es=(0,s.useMergedRefs)(er,A,$.inputRef),ei=a.useRef(null),en=(0,u.useBaseUiId)(),eo=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{id:t,implicit:l=!1,controlRef:s}=e,{controlId:n,registerControlId:d}=k(),c=(0,u.useBaseUiId)(t),m=l?n:void 0,f=(0,C.useRefWithInit)(()=>Symbol("labelable-control")),p=a.useRef(!1),x=a.useRef(null!=t),b=(0,r.useStableCallback)(()=>{p.current&&d!==o.NOOP&&(p.current=!1,d(f.current,void 0))});return(0,i.useIsoLayoutEffect)(()=>{let e;if(d!==o.NOOP){if(l){let a=null==s?void 0:s.current;e=(0,R.isElement)(a)&&null!=a.closest("label")?null!=t?t:null:null!=m?m:c}else if(null!=t)x.current=!0,e=t;else{if(!x.current)return void b();e=c}if(void 0===e)return void b();p.current=!0,d(f.current,e)}},[t,s,m,d,l,c,f,b]),a.useEffect(()=>b,[b]),null!=n?n:c}({id:N,implicit:!1,controlRef:ei}),ed=M?void 0:eo,[ec,eu]=(0,l.useControlled)({controlled:x,default:!!h,name:"Switch",state:"checked"});!function(e,t){let{enabled:l=!0,getValue:r,id:s,value:n}=t,{registerFieldControl:o}=w(),d=a.useRef(null);d.current||(d.current=Symbol()),(0,i.useIsoLayoutEffect)(()=>{let t=d.current;if(t&&l)return o(t,{controlRef:e,getValue:r,id:s,value:n}),()=>{o(t,void 0)}},[e,l,r,s,o,n])}(ei,{id:en,value:ec}),(0,i.useIsoLayoutEffect)(()=>{er.current&&q(er.current.checked)},[er,q]),(0,E.useValueChanged)(ec,()=>{V(ea),J(ec!==W.initialValue),q(ec),X()?$.commit(ec):$.commit(ec,!0)});let{getButtonProps:em,buttonRef:ef}=(0,m.useButton)({disabled:et,native:M}),ep=function(e,t,l){var r;let s=!(arguments.length>3)||void 0===arguments[3]||arguments[3],n=arguments.length>4?arguments[4]:void 0,[o,d]=a.useState(),c=(0,u.useBaseUiId)(n?"".concat(n,"-label"):void 0),m=null!=(r=null!=e?e:t)?r:o;return(0,i.useIsoLayoutEffect)(()=>{let a=e||t||!s?void 0:function(e,t){let a=function(e){if(!e)return;let t=e.parentElement;if(t&&"LABEL"===t.tagName)return t;let a=e.id;if(a){let t=e.nextElementSibling;if(t&&t.htmlFor===a)return t}let l=e.labels;return l&&l[0]}(e);if(a)return!a.id&&t&&(a.id=t),a.id||void 0}(l.current,c);o!==a&&d(a)}),m}(v,ee,er,!M,ed),ex=a.useMemo(()=>(0,c.mergeProps)({checked:ec,disabled:et,form:y,id:ed,name:ea,required:D,style:ea?n.visuallyHiddenInput:n.visuallyHidden,tabIndex:-1,type:"checkbox","aria-hidden":!0,ref:es,onChange(e){if(e.nativeEvent.defaultPrevented)return;if(U)return void e.preventDefault();let t=e.currentTarget.checked,a=(0,S.createChangeEventDetails)(T.REASONS.none,e.nativeEvent);null==el||el(t,a),a.isCanceled||eu(t)},onFocus(){var e;null==(e=ei.current)||e.focus()}},$.getInputValidationProps,void 0!==I?{value:I}:o.EMPTY_OBJECT),[ec,et,y,es,ed,ea,el,U,D,eu,$,I]),eb=a.useMemo(()=>({...K,checked:ec,disabled:et,readOnly:U,required:D}),[K,ec,et,U,D]),eh=(0,d.useRenderElement)("span",e,{state:eb,ref:[f,ei,ef],props:[{id:M?eo:en,role:"switch","aria-checked":ec,"aria-readonly":U||void 0,"aria-required":D||void 0,"aria-labelledby":ep,onFocus(){et||Y(!0)},onBlur(){let e=er.current;e&&!et&&(H(!0),Y(!1),"onBlur"===G&&$.commit(e.checked))},onClick(e){var t;U||et||(e.preventDefault(),null==(t=er.current)||t.dispatchEvent(new PointerEvent("click",{bubbles:!0,shiftKey:e.shiftKey,ctrlKey:e.ctrlKey,altKey:e.altKey,metaKey:e.metaKey})))}},$.getValidationProps,F,em],stateAttributesMapping:g});return(0,t.jsxs)(p.Provider,{value:eb,children:[eh,!ec&&ea&&void 0!==L&&(0,t.jsx)("input",{type:"hidden",form:y,name:ea,value:L}),(0,t.jsx)("input",{...ex,suppressHydrationWarning:!0})]})}),O=a.forwardRef(function(e,t){let{render:l,className:r,style:s,...i}=e,{state:n}=w(),o=function(){let e=a.useContext(p);if(void 0===e)throw Error((0,f.default)(63));return e}(),c={...n,...o};return(0,d.useRenderElement)("span",e,{state:c,ref:t,stateAttributesMapping:g,props:i})});var M=e.i(39606),M=M,P=e.i(75157);function U(e){let{className:a,thumbClassName:l,...r}=e;return(0,t.jsx)(M.Root,{"data-slot":"switch",className:(0,P.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",a),...r,children:(0,t.jsx)(M.Thumb,{className:(0,P.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 D(e){let{className:a,thumbClassName:l,...r}=e;return(0,t.jsx)(U,{className:(0,P.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)]",a),thumbClassName:(0,P.cn)("data-[checked]:bg-white",l),...r})}},47079,e=>{"use strict";e.s(["SkillsManageView",()=>S],47079);var t=e.i(18050),a=e.i(71645),l=e.i(65934),r=e.i(87243),s=e.i(13354),i=e.i(50711),n=e.i(51419),o=e.i(92715),d=e.i(19455),c=e.i(94055),u=e.i(94197),m=e.i(72064),f=e.i(93479),p=e.i(75157);function x(e){let{className:a,...l}=e;return(0,t.jsx)("nav",{role:"navigation","aria-label":"pagination","data-slot":"pagination",className:(0,p.cn)("flex w-full justify-end",a),...l})}let b=a.forwardRef((e,a)=>{let{className:l,...r}=e;return(0,t.jsx)("ul",{ref:a,"data-slot":"pagination-content",className:(0,p.cn)("flex flex-row flex-wrap items-center justify-end gap-1",l),...r})});b.displayName="PaginationContent";let h=a.forwardRef((e,a)=>{let{className:l,...r}=e;return(0,t.jsx)("li",{ref:a,"data-slot":"pagination-item",className:(0,p.cn)("",l),...r})});h.displayName="PaginationItem",a.forwardRef((e,a)=>{let{className:l,isActive:r,size:s="icon",...i}=e;return(0,t.jsx)("a",{ref:a,"aria-current":r?"page":void 0,"data-slot":"pagination-link","data-active":r?"true":void 0,className:(0,p.cn)((0,d.buttonVariants)({variant:r?"outline":"ghost",size:s}),l),...i})}).displayName="PaginationLink";var v=e.i(62427);function g(e){let{active:l,wsUrl:r,apiBase:i,agent:n,onAfterInstall:c,className:u}=e,[p,g]=(0,a.useState)(""),[y,w]=(0,a.useState)(1),[j,N]=(0,a.useState)(0),[k,C]=(0,a.useState)([]),[R,S]=(0,a.useState)(!1),[T,E]=(0,a.useState)(""),[A,O]=(0,a.useState)({}),M=(0,a.useRef)(0),P=(0,a.useCallback)(async()=>{let e=++M.current;S(!0),E("");try{let t=await (0,v.listCloudSkillCatalog)(r,i,n,p,y,10);if(e!==M.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});C(l),N(t.totalPages)}catch(t){if(e!==M.current)return;C([]),N(0),E(t instanceof Error?t.message:String(t))}finally{e===M.current&&S(!1)}},[r,i,n,p,y]);(0,a.useEffect)(()=>{if(!l){g(""),w(1),N(0),C([]),E(""),O({}),M.current+=1;return}P()},[l,P]);let U=(0,a.useMemo)(()=>{if(R)return"加载中…";if(T)return"加载失败:".concat(T);let e=k.reduce((e,t)=>e+ +!!t.installed,0);return"已安装 ".concat(e," 项")},[R,T,k]),D=(0,a.useCallback)(async(e,t)=>{O(t=>({...t,[e]:!0}));try{await (0,v.installCloudSkill)(r,i,n,e),s.appToast.success("云端技能已安装:".concat(t)),await P(),null==c||c()}catch(e){s.appToast.error("安装失败:".concat(e instanceof Error?e.message:String(e)))}finally{O(t=>{let a={...t};return delete a[e],a})}},[r,i,n,P,c]),z=(0,a.useCallback)(e=>{w(1),g(e)},[]);if(!l)return null;let B=j>0?"第 ".concat(y,"/").concat(j," 页"):"第 0/0 页",L=R||y<=1,I=R||j<=0||y>=j,_=[{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=!!A[e.id],l=!!e.installed;return!a&&l?"-":(0,t.jsx)(d.Button,{type:"button",size:"sm",variant:"outline",disabled:a||l,onClick:()=>void D(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)(f.Input,{type:"search",value:p,onChange:e=>z(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:U}),(0,t.jsx)(o.AppTable,{rows:k,columns:_,getRowKey:e=>e.id,className:"min-h-0 flex-1 rounded-md",bodyProps:{viewportPaginationReserve:64},emptyNode:R?(0,t.jsx)("p",{className:"text-center text-base",children:"加载中…"}):void 0}),(0,t.jsx)(x,{className:"mx-0 w-full",children:(0,t.jsxs)(b,{className:"w-full flex-wrap justify-end gap-2",children:[(0,t.jsx)(h,{children:(0,t.jsxs)(d.Button,{type:"button",variant:"outline",size:"sm",disabled:L,className:"gap-1",onClick:()=>w(e=>Math.max(1,e-1)),"aria-label":"上一页",children:[(0,t.jsx)(m.default,{name:"ChevronLeft",size:16,className:"shrink-0"}),"上一页"]})}),(0,t.jsx)(h,{children:(0,t.jsx)("span",{className:"flex h-9 min-w-[6.5rem] items-center justify-center text-sm text-[var(--ds-muted)]",children:B})}),(0,t.jsx)(h,{children:(0,t.jsxs)(d.Button,{type:"button",variant:"outline",size:"sm",disabled:I,className:"gap-1",onClick:()=>w(e=>e+1),"aria-label":"下一页",children:["下一页",(0,t.jsx)(m.default,{name:"ChevronRight",size:16,className:"shrink-0",strokeWidth:1})]})})]})})]})})}var y=e.i(36845),w=e.i(53925);function j(e){let{open:a,onOpenChange:l,wsUrl:r,apiBase:s,agent:i}=e;return(0,t.jsx)(w.ResourceImportDialog,{open:a,onOpenChange:l,title:"导入 Skill zip",description:"选择一个 zip 文件并导入到 skills-runtime。",uploadUrl:(0,y.buildSkillsRuntimeImportUrl)(r,s,i),resetKey:i})}function N(e){let{items:a,saveBusy:l,onToggleEnabled:r,onExport:s,onRemove:i,className:n}=e,d=[{key:"name",title:"名称",headerClassName:"text-base",cellClassName:"text-base",render:e=>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)(c.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] 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:()=>s(e.name)}),(0,t.jsx)(u.IconTooltipButton,{icon:"Trash2",label:"删除",tone:"danger",ariaLabel:"删除 ".concat(e.name),disabled:l,onClick:()=>{i(e.name)}})]})}];return(0,t.jsx)(o.AppTable,{rows:a,columns:d,getRowKey:e=>"skills:".concat(e.name),className:n})}var k=e.i(68499),C=e.i(56708);let R=[{value:"basic",label:"基础Skill"},{value:"installed",label:"已安装Skill"},{value:"cloud_catalog",label:"Skill商店"}];function S(){let e=(0,l.useAppStore)(e=>e.wsUrl),f=(0,l.useAppStore)(e=>e.apiBase),p=(0,l.useAppStore)(e=>e.agentConfig),x=(0,l.useAppStore)(e=>e.setAgentConfig),{currentAgent:b,loadAgentConfig:h}=(0,r.useSession)(),y=(0,i.usePersistAgentConfigField)("skills"),w=p.skills,S=(0,a.useMemo)(()=>[...w].sort().join("\0"),[w]),[T,E]=(0,a.useState)([]),[A,O]=(0,a.useState)([]),[M,P]=(0,a.useState)(!1),[U,D]=(0,a.useState)(!1),[z,B]=(0,a.useState)("basic"),[L,I]=(0,a.useState)(!1);(0,a.useEffect)(()=>{h()},[h]);let _=(0,a.useCallback)(async(e,t)=>{D(!0);try{await y(e,{silent:t})}finally{D(!1)}},[y]),F=(0,a.useCallback)(async()=>{E([]),P(!0);try{var t;let a=null!=(t=(await (0,v.listSkills)(e,f,b())).skills)?t:[];E(a.map(e=>{var t,a;return{...e,id:e.name,label:"".concat(e.name),description:null!=(a=null!=(t=e.description)?t:e.whenToUse)?a:"",isRuntime:!!e.isRuntime}}))}catch(e){E([]),s.appToast.error("加载失败:".concat(e instanceof Error?e.message:String(e)))}finally{P(!1)}},[e,f,b]),V=(0,a.useCallback)(async t=>{let a=T.find(e=>e.id===t);if(!(null==a?void 0:a.isRuntime))return void s.appToast.info("仅 skills-runtime 中的技能可删除");if(await (0,k.confirmAlertDialog)({title:"确认删除 Skill 包?",description:"Skill:".concat(t),confirmText:"删除",cancelText:"取消"}))try{await (0,v.deleteRuntimeSkill)(e,f,b(),t);let a=w.filter(e=>e!==t);O(e=>e.filter(e=>e!==t)),x({...p,skills:a}),await _(a,!0),await F()}catch(e){s.appToast.error("删除失败:".concat(e instanceof Error?e.message:String(e)))}},[T,e,f,b,w,p,x,_,F]);(0,a.useEffect)(()=>{("basic"===z||"installed"===z)&&F()},[z,F]);let K=(0,a.useCallback)(()=>{F()},[F]);(0,a.useEffect)(()=>{"basic"===z&&O([...w])},[z,w,S]);let H=(0,a.useCallback)(e=>{let t=[...new Set(e)].sort();x({...p,skills:t}),_(t,!0)},[p,x,_]),J=(0,a.useMemo)(()=>T.filter(e=>!e.isRuntime),[T]),W=(0,a.useMemo)(()=>T.filter(e=>!0===e.isRuntime).slice().sort((e,t)=>e.label.localeCompare(t.label)).map(e=>({name:e.id,installed:!0,description:e.description||"",enabled:w.includes(e.id)})),[T,w]),q=(0,a.useCallback)((e,t)=>{let a=t?[...new Set([...w,e])].sort():w.filter(t=>t!==e);x({...p,skills:a}),O(a),_(a,!0)},[w,p,x,_]),Y=(0,a.useCallback)(t=>{window.open((0,v.exportRuntimeSkillUrl)(e,f,b(),t),"_blank","noopener")},[e,f,b]),X=[{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-[72px] text-right text-base text-[var(--ds-muted)]",cellClassName:"w-[72px] py-2 text-right align-middle",render:e=>(0,t.jsx)("span",{className:"inline-flex justify-end",children:(0,t.jsx)(c.AccentSwitch,{checked:A.includes(e.id),disabled:U,onCheckedChange:t=>{let a=t?[...new Set([...A,e.id])]:A.filter(t=>t!==e.id);O(a),H(a)},"aria-label":"选择 ".concat(e.label)})})},{key:"actions",title:"操作",headerClassName:"w-[72px] text-right text-base text-[var(--ds-muted)]",cellClassName:"w-[72px] py-2 text-right align-middle",render:e=>(0,t.jsx)("span",{className:"inline-flex justify-end",children:(0,t.jsx)(u.IconTooltipButton,{icon:"Trash2",label:"删除",tone:"danger",disabled:U,ariaLabel:"删除 ".concat(e.label),onClick:()=>{V(e.id)}})})}];return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(C.ManageChromeHeaderActions,{children:(0,t.jsxs)(d.Button,{id:"btnAgentImportSkill",type:"button",variant:"plain-outline",size:"lg",className:"inline-flex items-center justify-center gap-1.5",onClick:()=>I(!0),children:[(0,t.jsx)(m.default,{name:"Import",size:16,className:"align-middle"}),"导入Skill"]})}),(0,t.jsxs)(n.AppTabs,{tabs:R,value:z,listVariant:"line",onChange:e=>B(e),children:[(0,t.jsx)(n.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:M?(0,t.jsx)("p",{className:"px-3 py-6 text-center text-base text-[var(--ds-muted)]",children:"加载中…"}):(0,t.jsx)(o.AppTable,{rows:J,columns:X,getRowKey:e=>e.id})})})}),(0,t.jsx)(n.AppTabsPanel,{value:"installed",children:(0,t.jsx)(N,{items:W,saveBusy:U,onToggleEnabled:q,onExport:Y,onRemove:V})}),(0,t.jsx)(n.AppTabsPanel,{value:"cloud_catalog",className:"flex min-h-0 flex-1 flex-col",children:(0,t.jsx)(g,{active:"cloud_catalog"===z,wsUrl:e,apiBase:f,agent:b(),onAfterInstall:K,className:"min-h-0 flex-1"})})]}),(0,t.jsx)(j,{open:L,onOpenChange:e=>{I(e),e||F()},wsUrl:e,apiBase:f,agent:b()})]})}}]);
@@ -1 +0,0 @@
1
- (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,53925,e=>{"use strict";e.s(["ResourceImportDialog",()=>u],53925);var t=e.i(18050),a=e.i(71645),r=e.i(72064),l=e.i(75157),n=e.i(19455);function i(e){return e<1024?"".concat(e," B"):e<1048576?"".concat((e/1024).toFixed(1)," KB"):"".concat((e/1048576).toFixed(1)," MB")}function s(e){let{uploadUrl:s,accept:o,disabled:c=!1,multiple:d=!1,maxFileSize:u=0x3200000,autoUpload:m=!1,method:f="POST",transport:p="xhr",fieldName:b="file",headers:v,extraFormData:x,autoRetryTimes:h=0,autoRetryDelayMs:g=800,selectionOnly:y=!1,className:w,emptyTitle:j="点击或拖拽文件到此处",emptyHint:N="支持上传文件",onFilesChange:C,onUploadSuccess:k,onUploadError:T,onValidationError:R}=e,S=a.useId(),E=a.useRef(null),A=a.useRef(new Map),O=a.useRef(new Map),M=a.useRef([]),[U,D]=a.useState(!1),[P,B]=a.useState([]),L=a.useMemo(()=>o?o.split(",").map(e=>e.trim().toLowerCase()).filter(Boolean):[],[o]);a.useEffect(()=>{M.current=P,null==C||C(P)},[P,C]),a.useEffect(()=>()=>{for(let e of A.current.values())e.abort();for(let e of O.current.values())e.abort();for(let e of M.current)e.previewUrl&&URL.revokeObjectURL(e.previewUrl)},[]);let z=a.useCallback((e,t)=>{B(a=>a.map(a=>a.id===e?{...a,...t}:a))},[]),I=a.useCallback(async(e,t)=>{let a=M.current.find(t=>t.id===e);if(!a||c)return;z(e,{status:t>0?"retrying":"uploading",progress:0,error:"",retryCount:t});let r=new FormData;if(x)for(let[e,t]of Object.entries(x))r.append(e,t);r.append(b,a.file);try{let t="";if("fetch"===p){let a=new AbortController;O.current.set(e,a);let l=await fetch(s,{method:f,headers:v,body:r,signal:a.signal}),n=await l.text();try{t=n?JSON.parse(n):""}catch(e){t=n}if(!l.ok)throw Error("上传失败:".concat(l.status," ").concat(l.statusText))}else t=await new Promise((t,a)=>{let l=new XMLHttpRequest;if(A.current.set(e,l),l.open(f,s,!0),v)for(let[e,t]of Object.entries(v))l.setRequestHeader(e,t);l.upload.onprogress=t=>{if(!t.lengthComputable)return;let a=Math.min(100,Math.round(t.loaded/t.total*100));z(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(r)});z(e,{status:"success",progress:100,error:""});let a=M.current.find(t=>t.id===e);a&&(null==k||k(a,t))}catch(l){let a=l instanceof Error?l.message:String(l);if("__ABORTED__"===a)return void z(e,{status:"selected",progress:0,error:""});if(t<h){z(e,{status:"retrying",error:"重试中(".concat(t+1,"/").concat(h,")")}),await new Promise(e=>window.setTimeout(e,g)),await I(e,t+1);return}z(e,{status:"error",error:a});let r=M.current.find(t=>t.id===e);r&&(null==T||T(r,a))}finally{A.current.delete(e),O.current.delete(e)}},[g,h,c,x,b,v,f,T,k,p,z,s]),_=a.useCallback(e=>{I(e,0)},[I]),F=a.useCallback(e=>{var t,a;null==(t=A.current.get(e))||t.abort(),null==(a=O.current.get(e))||a.abort()},[]),V=a.useCallback(()=>{for(let e of M.current)("selected"===e.status||"error"===e.status)&&_(e.id)},[_]),H=a.useCallback(e=>{if(c||!e.length)return;let t=new Set(M.current.map(e=>"".concat(e.file.name,"::").concat(e.file.size))),a=[];for(let r of e){let e="".concat(r.name,"::").concat(r.size);if(!t.has(e)){if(!function(e,t){if(!t.length)return!0;let a=e.name.toLowerCase(),r=(e.type||"").toLowerCase();return t.some(e=>e.startsWith(".")?a.endsWith(e):e.endsWith("/*")?r.startsWith("".concat(e.slice(0,-1))):r===e)}(r,L)){null==R||R("文件类型不支持:".concat(r.name));continue}if(r.size>u){null==R||R("文件过大(最大 ".concat(i(u),"):").concat(r.name));continue}t.add(e),a.push({id:"".concat(Date.now(),"-").concat(Math.random().toString(36).slice(2,8)),file:r,status:"selected",progress:0,error:"",retryCount:0,previewUrl:r.type.startsWith("image/")?URL.createObjectURL(r):""})}}if(!a.length)return;let r=d?[...M.current,...a]:[a[a.length-1]];if(!d)for(let e of M.current)e.previewUrl&&URL.revokeObjectURL(e.previewUrl);if(B(r),m&&!y)for(let e of a)_(e.id)},[L,m,c,u,d,R,y,_]),K=a.useCallback(e=>{let t=e.target.files;t&&(H(Array.from(t)),e.target.value="")},[H]),J=a.useCallback(e=>{var t;e.preventDefault(),e.stopPropagation(),D(!1),c||H(Array.from(null!=(t=e.dataTransfer.files)?t:[]))},[H,c]);return(0,t.jsxs)("div",{className:(0,l.cn)("flex min-h-0 w-full flex-col gap-3",w),children:[(0,t.jsx)("input",{ref:E,id:S,type:"file",hidden:!0,accept:o,multiple:d,disabled:c,onChange:K}),(0,t.jsxs)("label",{htmlFor:S,onDragOver:e=>{e.preventDefault(),c||D(!0)},onDragLeave:e=>{e.preventDefault(),D(!1)},onDrop:J,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)]",U&&"bg-[var(--ds-accent)]/5 border-[var(--ds-accent)]",c&&"cursor-not-allowed opacity-60"),children:[(0,t.jsx)(r.default,{name:"Upload",size:20,className:"text-[var(--ds-muted)]"}),(0,t.jsx)("div",{className:"text-base text-[var(--ds-text)]",children:j}),(0,t.jsx)("div",{className:"text-sm text-[var(--ds-muted)]",children:N})]}),P.length?(0,t.jsx)("div",{className:"space-y-2",children:P.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:i(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]}),y?null:(0,t.jsxs)("div",{className:"flex items-center gap-1",children:["success"===e.status?(0,t.jsx)(r.default,{name:"CheckCircle2",size:16,className:"text-[var(--ds-accent)]"}):null,"selected"===e.status||"error"===e.status?(0,t.jsxs)(n.Button,{type:"button",size:"sm",variant:"outline",disabled:c,onClick:()=>_(e.id),children:["error"===e.status?(0,t.jsx)(r.default,{name:"RefreshCw",size:14,className:"mr-1"}):null,"error"===e.status?"重试":"上传"]}):null,"uploading"===e.status||"retrying"===e.status?(0,t.jsxs)(n.Button,{type:"button",size:"sm",variant:"outline",onClick:()=>F(e.id),children:[(0,t.jsx)(r.default,{name:"XCircle",size:14,className:"mr-1"}),"取消"]}):null]})]})},e.id))}):null,!y&&!m&&P.some(e=>"selected"===e.status||"error"===e.status)?(0,t.jsx)("div",{className:"flex justify-end",children:(0,t.jsx)(n.Button,{type:"button",size:"sm",onClick:V,disabled:c,children:"上传"})}):null]})}var o=e.i(76639),c=e.i(13354),d=e.i(29250);function u(e){let{open:r,onOpenChange:l,title:i,description:u,uploadUrl:m,resetKey:f}=e,[p,b]=(0,a.useState)(!1),[v,x]=(0,a.useState)(null),h=(0,a.useCallback)(()=>{l(!1),x(null)},[l]),g=(0,a.useCallback)(async()=>{if(!v)return void c.appToast.info("请先选择 zip 文件");let e=new FormData;e.append("file",v),b(!0);try{let t=await (0,d.bridgeFetch)(m,{method:"POST",body:e}),a=Number(t.imported||0),r=Number(t.overwritten||0),l=Array.isArray(t.rejected)?t.rejected.length:0;c.appToast.success("导入完成:导入 ".concat(a,",覆盖 ").concat(r)+(l>0?",拒绝 ".concat(l):"")),h()}catch(e){c.appToast.error("导入失败:".concat(e instanceof Error?e.message:String(e)))}finally{b(!1)}},[h,v,m]);return(0,t.jsx)(o.Dialog,{open:r,onOpenChange:e=>{l(e),e||x(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:i}),(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)(s,{uploadUrl:m,accept:".zip,application/zip",maxFileSize:0x3200000,multiple:!1,disabled:p,selectionOnly:!0,emptyTitle:"点击或拖拽 zip 文件到此处",emptyHint:"支持 .zip 格式,最大 50MB",onFilesChange:e=>{var t,a;x(null!=(a=null==(t=e[0])?void 0:t.file)?a:null)},onValidationError:e=>{c.appToast.info(e)}},"".concat(r?"open":"closed","-").concat(null!=f?f:m)),(0,t.jsxs)("div",{className:"mt-auto flex justify-end pt-2",children:[(0,t.jsx)(n.Button,{className:"mr-[12px]",type:"button",variant:"plain-outline",size:"lg",onClick:h,children:"取消"}),(0,t.jsx)(n.Button,{type:"button",size:"lg",variant:"default",disabled:p||null==v,onClick:()=>void g(),children:p?"导入中…":"确定"})]})]})]})})}},94197,e=>{"use strict";e.s(["IconTooltipButton",()=>s]);var t=e.i(18050),a=e.i(72064),r=e.i(19455),l=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:c,tone:d="muted",disabled:u,className:m,iconClassName:f,onClick:p}=e;return(0,t.jsx)(l.TooltipProvider,{delayDuration:150,children:(0,t.jsxs)(l.Tooltip,{children:[(0,t.jsx)(l.TooltipTrigger,{asChild:!0,children:(0,t.jsx)(r.Button,{type:"button",variant:"plain",size:"icon",className:(0,n.cn)("h-4 w-4",i[d],m),disabled:u,"aria-label":null!=c?c:o,onClick:p,children:(0,t.jsx)(a.default,{name:s,size:16,className:f})})}),(0,t.jsx)(l.TooltipContent,{side:"bottom",align:"center",className:"text-base",children:o})]})})}},56708,e=>{"use strict";e.s(["ManageChromeHeaderActions",()=>s,"ManageFeatureChrome",()=>i]);var t=e.i(18050),a=e.i(71645),r=e.i(74080),l=e.i(72064);let n=(0,a.createContext)(null);function i(e){let{title:r,description:i,children:s,showTitle:o=!0,headerIcon:c}=e,[d,u]=(0,a.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:[c&&(0,t.jsx)("div",{className:"mr-3 rounded-md bg-[var(--green-light)] px-4 py-3",children:(0,t.jsx)(l.default,{name:c,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:r}),(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:d,children:s})})]})}function s(e){let{children:t}=e,l=(0,a.useContext)(n);return(0,a.useSyncExternalStore)(()=>()=>{},()=>!0,()=>!1)&&l?(0,r.createPortal)(t,l):null}},92715,85413,e=>{"use strict";e.s(["AppTable",()=>m],92715);var t=e.i(18050);e.s(["Empty",()=>l],85413);var a=e.i(75157),r=e.i(72064);function l(e){let{text:l="暂无数据",className:n}=e;return(0,t.jsxs)("div",{className:(0,a.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)(r.default,{name:"NoData",size:80,color:"var(--ds-muted)",className:"opacity-90"}),(0,t.jsx)("span",{children:l})]})}var n=e.i(71645);let i=n.forwardRef((e,r)=>{let{className:l,...n}=e;return(0,t.jsx)("div",{className:"relative w-full overflow-auto",children:(0,t.jsx)("table",{ref:r,className:(0,a.cn)("w-full caption-bottom border-collapse text-sm",l),...n})})});i.displayName="Table";let s=n.forwardRef((e,r)=>{let{className:l,...n}=e;return(0,t.jsx)("thead",{ref:r,className:(0,a.cn)("[&_tr]:table [&_tr]:w-full [&_tr]:table-fixed [&_tr]:border-b",l),...n})});s.displayName="TableHeader";let o=n.forwardRef((e,r)=>{let{className:l,viewportFit:i=!0,viewportReserveBottom:s=16,viewportPaginationReserve:o=0,style:c,...d}=e,u=n.useRef(null),m=n.useCallback(e=>{u.current=e,"function"==typeof r?r(e):r&&(r.current=e)},[r]),[f,p]=n.useState(void 0);return n.useLayoutEffect(()=>{var e,t;if(!i)return void p(void 0);let a=()=>{var e,t;let a=u.current;if(!a)return;let r=a.getBoundingClientRect().top;p(Math.max(80,Math.floor((null!=(t=null==(e=window.visualViewport)?void 0:e.height)?t:window.innerHeight)-r-(s+o))))};a();let r=new ResizeObserver(()=>{a()});try{r.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;r.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)}},[i,s,o]),(0,t.jsx)("tbody",{ref:m,className:(0,a.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",l),style:i&&void 0!==f?{...c,maxHeight:f}:c,...d})});o.displayName="TableBody";let c=n.forwardRef((e,r)=>{let{className:l,hoverable:n=!0,...i}=e;return(0,t.jsx)("tr",{ref:r,className:(0,a.cn)("border-b transition-colors [&>td]:transition-colors data-[state=selected]:[&>td]:!bg-[var(--ds-item-active)]",n&&"group/table-row",l),...i})});c.displayName="TableRow";let d=n.forwardRef((e,r)=>{let{className:l,...n}=e;return(0,t.jsx)("th",{ref:r,className:(0,a.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",l),...n})});d.displayName="TableHead";let u=n.forwardRef((e,r)=>{let{className:l,...n}=e;return(0,t.jsx)("td",{ref:r,className:(0,a.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)]",l),...n})});function m(e){let{rows:r,columns:n,getRowKey:m,className:f,rowClassName:p,headerRowClassName:b,emptyText:v,emptyNode:x,bodyProps:h}=e;return(0,t.jsx)("div",{className:(0,a.cn)("overflow-hidden border border-[var(--ds-border)]",f),children:(0,t.jsxs)(i,{children:[(0,t.jsx)(s,{children:(0,t.jsx)(c,{className:(0,a.cn)("bg-[var(--ds-main-tint)] hover:bg-[var(--ds-main-tint)]",b),children:n.map(e=>(0,t.jsx)(d,{className:e.headerClassName,children:e.title},e.key))})}),(0,t.jsx)(o,{...h,children:r.length?r.map(e=>(0,t.jsx)(c,{className:"function"==typeof p?p(e):p,children:n.map(a=>(0,t.jsx)(u,{className:a.cellClassName,children:a.render(e)},a.key))},m(e))):(0,t.jsx)(c,{hoverable:!1,children:(0,t.jsx)(u,{colSpan:n.length,className:"py-6",children:null!=x?x:(0,t.jsx)(l,{text:v})})})})]})})}u.displayName="TableCell"},62427,e=>{"use strict";e.s(["deleteRuntimeMcp",()=>d,"deleteRuntimeSkill",()=>x,"deleteRuntimeTool",()=>c,"exportRuntimeMcpUrl",()=>m,"exportRuntimeSkillUrl",()=>h,"exportRuntimeToolUrl",()=>u,"importRuntimeMcp",()=>p,"importRuntimeTool",()=>f,"installCloudSkill",()=>y,"listAgentTeams",()=>i,"listCloudSkillCatalog",()=>g,"listMcpServers",()=>r,"listRuntimeMcpPackages",()=>o,"listRuntimeTools",()=>s,"listSkills",()=>n,"listTools",()=>l,"loadRemoteMcpJson",()=>b,"saveRemoteMcpJson",()=>v]);var t=e.i(29250),a=e.i(36845);async function r(e,r,l){let n=await (0,t.get)((0,a.buildMcpServersListUrl)(e,r,l));return{servers:Array.isArray(n.servers)?n.servers:[]}}async function l(e,r,l){let n=await (0,t.get)((0,a.buildToolsListUrl)(e,r,l));return{tools:Array.isArray(n.tools)?n.tools:[]}}async function n(e,r,l){let n=await (0,t.get)((0,a.getSkillsList)(e,r,l));return{skills:Array.isArray(n.skills)?n.skills:[]}}async function i(e,r,l){let n=await (0,t.get)((0,a.buildAgentTeamsListUrl)(e,r,l));return{teamAgentTypes:Array.isArray(n.teamAgentTypes)?n.teamAgentTypes:[],agentTeams:Array.isArray(n.agentTeams)?n.agentTeams:[]}}async function s(e,r,l){let n=await (0,t.get)((0,a.buildToolsRuntimeFilesUrl)(e,r,l));return{runtimeToolsDir:"string"==typeof n.runtimeToolsDir?n.runtimeToolsDir:"",items:Array.isArray(n.items)?n.items.filter(e=>!!(e&&e.id)):[]}}async function o(e,r,l){let n=await (0,t.get)((0,a.buildMcpRuntimeFilesUrl)(e,r,l));return{mcpRuntimeDir:"string"==typeof n.mcpRuntimeDir?n.mcpRuntimeDir:"",items:Array.isArray(n.items)?n.items.filter(e=>!!(e&&e.id)):[]}}async function c(e,r,l,n){return(0,t.del)((0,a.buildToolsRuntimeDeleteUrl)(e,r,l,n))}async function d(e,r,l,n){return(0,t.del)((0,a.buildMcpRuntimeDeleteUrl)(e,r,l,n))}function u(e,t,r,l){return(0,a.buildToolsRuntimeExportUrl)(e,t,r,l)}function m(e,t,r,l){return(0,a.buildMcpRuntimeExportUrl)(e,t,r,l)}async function f(e,r,l,n){let i=new FormData;return i.append("file",n),(0,t.post)((0,a.buildToolsRuntimeImportUrl)(e,r,l),i,{type:"file"})}async function p(e,r,l,n){let i=new FormData;return i.append("file",n),(0,t.post)((0,a.buildMcpRuntimeImportUrl)(e,r,l),i,{type:"file"})}async function b(e,r,l){return(0,t.get)((0,a.buildRemoteMcpJsonUrl)(e,r,l))}async function v(e,r,l,n){await (0,t.post)((0,a.buildRemoteMcpJsonUrl)(e,r,l),{content:n})}async function x(e,r,l,n){return(0,t.del)((0,a.buildSkillsRuntimeDeleteUrl)(e,r,l,n))}function h(e,t,r,l){return(0,a.buildSkillsRuntimeExportUrl)(e,t,r,l)}async function g(e,r,l,n,i,s){let o=await (0,t.get)((0,a.buildCloudSkillCatalogUrl)(e,r,l,n,i,s));return{items:Array.isArray(o.items)?o.items:[],totalPages:Number(o.totalPages||0)}}async function y(e,r,l,n){await (0,t.post)((0,a.buildCloudSkillInstallUrl)(e,r,l),{id:n})}},94055,e=>{"use strict";e.s(["AccentSwitch",()=>P],94055);var t=e.i(18050);e.s(["Root",()=>A,"Thumb",()=>O],39606),e.s([],37751),e.i(37751),e.i(47167);var a=e.i(71645),r=e.i(94349),l=e.i(76477),n=e.i(26292),i=e.i(977),s=e.i(62372),o=e.i(17514),c=e.i(27601),d=e.i(19805),u=e.i(89879),m=e.i(91730),f=e.i(67805);let p=a.createContext(void 0),b=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}({}),v={valid:null,touched:!1,dirty:!1,filled:!1,focused:!1},x={disabled:!1,...v},h=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?{[b.valid]:""}:{[b.invalid]:""},checked:e=>e?{[h.checked]:""}:{[h.unchecked]:""}},y=a.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:v.touched,setTouched:o.NOOP,dirty:v.dirty,setDirty:o.NOOP,filled:v.filled,setFilled:o.NOOP,focused:v.focused,setFocused:o.NOOP,validate:()=>null,validationMode:"onSubmit",validationDebounceTime:0,shouldValidateOnChange:()=>!1,state:x,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=a.useContext(y);if(t.setValidityData===o.NOOP&&!e)throw Error((0,f.default)(28));return t}let j=a.createContext({formRef:{current:{fields:new Map}},errors:{},clearErrors:o.NOOP,validationMode:"onSubmit",submitAttemptedRef:{current:!1}}),N=a.createContext({controlId:void 0,registerControlId:o.NOOP,labelId:void 0,setLabelId:o.NOOP,messageIds:[],setMessageIds:o.NOOP,getDescriptionProps:e=>e});function C(){return a.useContext(N)}var k=e.i(30628),T=e.i(29315),R=e.i(5963),S=e.i(3404),E=e.i(19904);let A=a.forwardRef(function(e,f){let{checked:b,className:v,defaultChecked:x,"aria-labelledby":h,form:y,id:N,inputRef:A,name:O,nativeButton:M=!1,onCheckedChange:U,readOnly:D=!1,required:P=!1,disabled:B=!1,render:L,uncheckedValue:z,value:I,style:_,...F}=e,{clearErrors:V}=a.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}=C(),et=Q||B,ea=null!=Z?Z:O,er=(0,l.useStableCallback)(U),el=a.useRef(null),en=(0,n.useMergedRefs)(el,A,$.inputRef),ei=a.useRef(null),es=(0,u.useBaseUiId)(),eo=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{id:t,implicit:r=!1,controlRef:n}=e,{controlId:s,registerControlId:c}=C(),d=(0,u.useBaseUiId)(t),m=r?s:void 0,f=(0,k.useRefWithInit)(()=>Symbol("labelable-control")),p=a.useRef(!1),b=a.useRef(null!=t),v=(0,l.useStableCallback)(()=>{p.current&&c!==o.NOOP&&(p.current=!1,c(f.current,void 0))});return(0,i.useIsoLayoutEffect)(()=>{let e;if(c!==o.NOOP){if(r){let a=null==n?void 0:n.current;e=(0,T.isElement)(a)&&null!=a.closest("label")?null!=t?t:null:null!=m?m:d}else if(null!=t)b.current=!0,e=t;else{if(!b.current)return void v();e=d}if(void 0===e)return void v();p.current=!0,c(f.current,e)}},[t,n,m,c,r,d,f,v]),a.useEffect(()=>v,[v]),null!=s?s:d}({id:N,implicit:!1,controlRef:ei}),ec=M?void 0:eo,[ed,eu]=(0,r.useControlled)({controlled:b,default:!!x,name:"Switch",state:"checked"});!function(e,t){let{enabled:r=!0,getValue:l,id:n,value:s}=t,{registerFieldControl:o}=w(),c=a.useRef(null);c.current||(c.current=Symbol()),(0,i.useIsoLayoutEffect)(()=>{let t=c.current;if(t&&r)return o(t,{controlRef:e,getValue:l,id:n,value:s}),()=>{o(t,void 0)}},[e,r,l,n,o,s])}(ei,{id:es,value:ed}),(0,i.useIsoLayoutEffect)(()=>{el.current&&q(el.current.checked)},[el,q]),(0,E.useValueChanged)(ed,()=>{V(ea),J(ed!==W.initialValue),q(ed),X()?$.commit(ed):$.commit(ed,!0)});let{getButtonProps:em,buttonRef:ef}=(0,m.useButton)({disabled:et,native:M}),ep=function(e,t,r){var l;let n=!(arguments.length>3)||void 0===arguments[3]||arguments[3],s=arguments.length>4?arguments[4]:void 0,[o,c]=a.useState(),d=(0,u.useBaseUiId)(s?"".concat(s,"-label"):void 0),m=null!=(l=null!=e?e:t)?l:o;return(0,i.useIsoLayoutEffect)(()=>{let a=e||t||!n?void 0:function(e,t){let a=function(e){if(!e)return;let t=e.parentElement;if(t&&"LABEL"===t.tagName)return t;let a=e.id;if(a){let t=e.nextElementSibling;if(t&&t.htmlFor===a)return t}let r=e.labels;return r&&r[0]}(e);if(a)return!a.id&&t&&(a.id=t),a.id||void 0}(r.current,d);o!==a&&c(a)}),m}(h,ee,el,!M,ec),eb=a.useMemo(()=>(0,d.mergeProps)({checked:ed,disabled:et,form:y,id:ec,name:ea,required:P,style:ea?s.visuallyHiddenInput:s.visuallyHidden,tabIndex:-1,type:"checkbox","aria-hidden":!0,ref:en,onChange(e){if(e.nativeEvent.defaultPrevented)return;if(D)return void e.preventDefault();let t=e.currentTarget.checked,a=(0,R.createChangeEventDetails)(S.REASONS.none,e.nativeEvent);null==er||er(t,a),a.isCanceled||eu(t)},onFocus(){var e;null==(e=ei.current)||e.focus()}},$.getInputValidationProps,void 0!==I?{value:I}:o.EMPTY_OBJECT),[ed,et,y,en,ec,ea,er,D,P,eu,$,I]),ev=a.useMemo(()=>({...H,checked:ed,disabled:et,readOnly:D,required:P}),[H,ed,et,D,P]),ex=(0,c.useRenderElement)("span",e,{state:ev,ref:[f,ei,ef],props:[{id:M?eo:es,role:"switch","aria-checked":ed,"aria-readonly":D||void 0,"aria-required":P||void 0,"aria-labelledby":ep,onFocus(){et||Y(!0)},onBlur(){let e=el.current;e&&!et&&(K(!0),Y(!1),"onBlur"===G&&$.commit(e.checked))},onClick(e){var t;D||et||(e.preventDefault(),null==(t=el.current)||t.dispatchEvent(new PointerEvent("click",{bubbles:!0,shiftKey:e.shiftKey,ctrlKey:e.ctrlKey,altKey:e.altKey,metaKey:e.metaKey})))}},$.getValidationProps,F,em],stateAttributesMapping:g});return(0,t.jsxs)(p.Provider,{value:ev,children:[ex,!ed&&ea&&void 0!==z&&(0,t.jsx)("input",{type:"hidden",form:y,name:ea,value:z}),(0,t.jsx)("input",{...eb,suppressHydrationWarning:!0})]})}),O=a.forwardRef(function(e,t){let{render:r,className:l,style:n,...i}=e,{state:s}=w(),o=function(){let e=a.useContext(p);if(void 0===e)throw Error((0,f.default)(63));return e}(),d={...s,...o};return(0,c.useRenderElement)("span",e,{state:d,ref:t,stateAttributesMapping:g,props:i})});var M=e.i(39606),M=M,U=e.i(75157);function D(e){let{className:a,thumbClassName:r,...l}=e;return(0,t.jsx)(M.Root,{"data-slot":"switch",className:(0,U.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",a),...l,children:(0,t.jsx)(M.Thumb,{className:(0,U.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",r)})})}function P(e){let{className:a,thumbClassName:r,...l}=e;return(0,t.jsx)(D,{className:(0,U.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)]",a),thumbClassName:(0,U.cn)("data-[checked]:bg-white",r),...l})}},28583,e=>{"use strict";e.s(["ToolsManageView",()=>w],28583);var t=e.i(18050),a=e.i(71645),r=e.i(65934),l=e.i(87243),n=e.i(13354),i=e.i(50711),s=e.i(19455),o=e.i(94055),c=e.i(94197),d=e.i(51419),u=e.i(92715);function m(e){let{items:a,saveBusy:r,onToggle:l,onExport:n,onRemove:i,className:s}=e,d=[{key:"name",title:"名称",headerClassName:"text-base",cellClassName:"text-base",render:e=>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:r,onCheckedChange:t=>l(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)(c.IconTooltipButton,{icon:"Download",label:"导出",ariaLabel:"导出 ".concat(e.name),disabled:r,onClick:()=>n(e.name)}),(0,t.jsx)(c.IconTooltipButton,{icon:"Trash2",label:"删除",tone:"danger",ariaLabel:"删除 ".concat(e.name),disabled:r,onClick:()=>{i(e.name)}})]})}];return(0,t.jsx)(u.AppTable,{rows:a,columns:d,getRowKey:e=>"tools:".concat(e.name),className:s})}var f=e.i(36845),p=e.i(53925);function b(e){let{open:a,onOpenChange:r,wsUrl:l,apiBase:n,agent:i}=e;return(0,t.jsx)(p.ResourceImportDialog,{open:a,onOpenChange:r,title:"导入工具 zip",description:"选择一个 zip 文件并导入到 tools-runtime。",uploadUrl:(0,f.buildToolsRuntimeImportUrl)(l,n,i),resetKey:i})}var v=e.i(68499),x=e.i(72064),h=e.i(56708),g=e.i(62427);let y=[{value:"basic",label:"系统工具"},{value:"installed",label:"自定义工具"}];function w(){let e=(0,r.useAppStore)(e=>e.wsUrl),f=(0,r.useAppStore)(e=>e.apiBase),p=(0,r.useAppStore)(e=>e.agentConfig),w=(0,r.useAppStore)(e=>e.setAgentConfig),{currentAgent:j,loadAgentConfig:N}=(0,l.useSession)(),C=(0,i.usePersistAgentConfigField)("tools"),k=p.tools,T=(0,a.useMemo)(()=>[...k].sort().join("\0"),[k]),[R,S]=(0,a.useState)([]),[E,A]=(0,a.useState)([]),[O,M]=(0,a.useState)(!1),[U,D]=(0,a.useState)(!1),[P,B]=(0,a.useState)("basic"),[L,z]=(0,a.useState)(!1);(0,a.useEffect)(()=>{N()},[N]);let I=(0,a.useCallback)(async(e,t)=>{D(!0);try{await C(e,{silent:t})}finally{D(!1)}},[C]),_=(0,a.useCallback)(async()=>{S([]),M(!0);try{var t;let a=null!=(t=(await (0,g.listTools)(e,f,j())).tools)?t:[];S(a.map(e=>{var t,a;return{...e,id:e.name,label:(e.displayName&&e.displayName!==e.name?"".concat(e.displayName," · "):"")+e.name,description:null!=(a=null!=(t=e.description)?t:e.searchHint)?a:""}}))}catch(e){S([]),n.appToast.error("加载失败:".concat(e instanceof Error?e.message:String(e)))}finally{M(!1)}},[e,f,j]),F=(0,a.useCallback)(async t=>{if(await (0,v.confirmAlertDialog)({title:"确认删除工具包?",description:"工具名:".concat(t),confirmText:"删除",cancelText:"取消"}))try{await (0,g.deleteRuntimeTool)(e,f,j(),t);let a=k.filter(e=>e!==t);A(e=>e.filter(e=>e!==t)),w({...p,tools:a}),await I(a,!0),await _()}catch(e){n.appToast.error("删除失败:".concat(e instanceof Error?e.message:String(e)))}},[e,f,j,k,p,w,I,_]),V=(0,a.useCallback)(t=>{window.open((0,g.exportRuntimeToolUrl)(e,f,j(),t),"_blank","noopener")},[e,f,j]);(0,a.useEffect)(()=>{("basic"===P||"installed"===P)&&_()},[P,_]),(0,a.useEffect)(()=>{"basic"===P&&A([...k])},[P,k,T]);let H=(0,a.useCallback)(e=>{let t=[...new Set(e)].sort();w({...p,tools:t}),I(t,!0)},[p,w,I]),K=(0,a.useCallback)((e,t)=>{let a=t?[...new Set([...k,e])].sort():k.filter(t=>t!==e).sort();w({...p,tools:a}),I(a,!0)},[k,p,w,I]),J=(0,a.useMemo)(()=>R.filter(e=>!0===e.isRuntime).slice().sort((e,t)=>e.label.localeCompare(t.label)).map(e=>({name:e.id,description:e.description||"",enabled:k.includes(e.id)})),[R,k]),W=[{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-base text-[var(--ds-muted)]",cellClassName:"w-[112px] align-middle",render:e=>(0,t.jsx)("span",{className:"inline-flex justify-end",children:(0,t.jsx)(o.AccentSwitch,{checked:E.includes(e.id),disabled:U,onCheckedChange:t=>{let a=t?[...new Set([...E,e.id])]:E.filter(t=>t!==e.id);A(a),H(a)},"aria-label":"选择 ".concat(e.label)})})},{key:"actions",title:"操作",headerClassName:"w-14 w-[72px] text-base text-[var(--ds-muted)]",cellClassName:"w-[72px] align-middle",render:e=>(0,t.jsx)("span",{className:"inline-flex justify-end",children:(0,t.jsx)(c.IconTooltipButton,{icon:"Trash2",label:"删除",tone:"danger",disabled:U,ariaLabel:"删除 ".concat(e.label),onClick:()=>F(e.id)})})}];return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(h.ManageChromeHeaderActions,{children:(0,t.jsxs)(s.Button,{id:"btnAgentPickerToolImport",type:"button",variant:"plain-outline",size:"lg",className:"inline-flex items-center justify-center gap-1.5",onClick:()=>z(!0),children:[(0,t.jsx)(x.default,{name:"Import",size:16,className:"align-middle"}),"导入自定义工具"]})}),(0,t.jsxs)(d.AppTabs,{tabs:y,value:P,listVariant:"line",onChange:e=>B(e),children:[(0,t.jsx)(d.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)(u.AppTable,{rows:R,columns:W,getRowKey:e=>e.id})})})}),(0,t.jsx)(d.AppTabsPanel,{value:"installed",children:(0,t.jsx)(m,{items:J,saveBusy:U,onToggle:K,onExport:V,onRemove:F})})]}),(0,t.jsx)(b,{open:L,onOpenChange:e=>{z(e),e||_()},wsUrl:e,apiBase:f,agent:j()})]})}}]);
@@ -1 +0,0 @@
1
- (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,93479,e=>{"use strict";e.s(["Input",()=>l]);var t=e.i(18050),r=e.i(75157);function l(e){let{className:l,type:n="text",size:i="default",...s}=e;return(0,t.jsx)("input",{type:n,"data-slot":"input","data-size":i,className:(0,r.cn)("h-8 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-8 data-[size=lg]:h-10 data-[size=sm]:h-7",l),...s})}},20783,e=>{"use strict";e.s(["composeRefs",()=>l,"useComposedRefs",()=>n]);var t=e.i(71645);function r(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,n=t.map(t=>{let n=r(t,e);return l||"function"!=typeof n||(l=!0),n});if(l)return()=>{for(let e=0;e<n.length;e++){let l=n[e];"function"==typeof l?l():r(t[e],null)}}}}function n(){for(var e=arguments.length,r=Array(e),n=0;n<e;n++)r[n]=arguments[n];return t.useCallback(l(...r),r)}},92715,85413,e=>{"use strict";e.s(["AppTable",()=>m],92715);var t=e.i(18050);e.s(["Empty",()=>n],85413);var r=e.i(75157),l=e.i(72064);function n(e){let{text:n="暂无数据",className:i}=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)]",i),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:n})]})}var i=e.i(71645);let s=i.forwardRef((e,l)=>{let{className:n,...i}=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",n),...i})})});s.displayName="Table";let a=i.forwardRef((e,l)=>{let{className:n,...i}=e;return(0,t.jsx)("thead",{ref:l,className:(0,r.cn)("[&_tr]:table [&_tr]:w-full [&_tr]:table-fixed [&_tr]:border-b",n),...i})});a.displayName="TableHeader";let o=i.forwardRef((e,l)=>{let{className:n,viewportFit:s=!0,viewportReserveBottom:a=16,viewportPaginationReserve:o=0,style:d,...u}=e,c=i.useRef(null),m=i.useCallback(e=>{c.current=e,"function"==typeof l?l(e):l&&(l.current=e)},[l]),[p,f]=i.useState(void 0);return i.useLayoutEffect(()=>{var e,t;if(!s)return void f(void 0);let r=()=>{var e,t;let r=c.current;if(!r)return;let l=r.getBoundingClientRect().top;f(Math.max(80,Math.floor((null!=(t=null==(e=window.visualViewport)?void 0:e.height)?t:window.innerHeight)-l-(a+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)}},[s,a,o]),(0,t.jsx)("tbody",{ref:m,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",n),style:s&&void 0!==p?{...d,maxHeight:p}:d,...u})});o.displayName="TableBody";let d=i.forwardRef((e,l)=>{let{className:n,hoverable:i=!0,...s}=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)]",i&&"group/table-row",n),...s})});d.displayName="TableRow";let u=i.forwardRef((e,l)=>{let{className:n,...i}=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",n),...i})});u.displayName="TableHead";let c=i.forwardRef((e,l)=>{let{className:n,...i}=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)]",n),...i})});function m(e){let{rows:l,columns:i,getRowKey:m,className:p,rowClassName:f,headerRowClassName:b,emptyText:y,emptyNode:v,bodyProps:g}=e;return(0,t.jsx)("div",{className:(0,r.cn)("overflow-hidden border border-[var(--ds-border)]",p),children:(0,t.jsxs)(s,{children:[(0,t.jsx)(a,{children:(0,t.jsx)(d,{className:(0,r.cn)("bg-[var(--ds-main-tint)] hover:bg-[var(--ds-main-tint)]",b),children:i.map(e=>(0,t.jsx)(u,{className:e.headerClassName,children:e.title},e.key))})}),(0,t.jsx)(o,{...g,children:l.length?l.map(e=>(0,t.jsx)(d,{className:"function"==typeof f?f(e):f,children:i.map(r=>(0,t.jsx)(c,{className:r.cellClassName,children:r.render(e)},r.key))},m(e))):(0,t.jsx)(d,{hoverable:!1,children:(0,t.jsx)(c,{colSpan:i.length,className:"py-6",children:null!=v?v:(0,t.jsx)(n,{text:y})})})})]})})}c.displayName="TableCell"},62427,e=>{"use strict";e.s(["deleteRuntimeMcp",()=>u,"deleteRuntimeSkill",()=>v,"deleteRuntimeTool",()=>d,"exportRuntimeMcpUrl",()=>m,"exportRuntimeSkillUrl",()=>g,"exportRuntimeToolUrl",()=>c,"importRuntimeMcp",()=>f,"importRuntimeTool",()=>p,"installCloudSkill",()=>x,"listAgentTeams",()=>s,"listCloudSkillCatalog",()=>h,"listMcpServers",()=>l,"listRuntimeMcpPackages",()=>o,"listRuntimeTools",()=>a,"listSkills",()=>i,"listTools",()=>n,"loadRemoteMcpJson",()=>b,"saveRemoteMcpJson",()=>y]);var t=e.i(29250),r=e.i(36845);async function l(e,l,n){let i=await (0,t.get)((0,r.buildMcpServersListUrl)(e,l,n));return{servers:Array.isArray(i.servers)?i.servers:[]}}async function n(e,l,n){let i=await (0,t.get)((0,r.buildToolsListUrl)(e,l,n));return{tools:Array.isArray(i.tools)?i.tools:[]}}async function i(e,l,n){let i=await (0,t.get)((0,r.getSkillsList)(e,l,n));return{skills:Array.isArray(i.skills)?i.skills:[]}}async function s(e,l,n){let i=await (0,t.get)((0,r.buildAgentTeamsListUrl)(e,l,n));return{teamAgentTypes:Array.isArray(i.teamAgentTypes)?i.teamAgentTypes:[],agentTeams:Array.isArray(i.agentTeams)?i.agentTeams:[]}}async function a(e,l,n){let i=await (0,t.get)((0,r.buildToolsRuntimeFilesUrl)(e,l,n));return{runtimeToolsDir:"string"==typeof i.runtimeToolsDir?i.runtimeToolsDir:"",items:Array.isArray(i.items)?i.items.filter(e=>!!(e&&e.id)):[]}}async function o(e,l,n){let i=await (0,t.get)((0,r.buildMcpRuntimeFilesUrl)(e,l,n));return{mcpRuntimeDir:"string"==typeof i.mcpRuntimeDir?i.mcpRuntimeDir:"",items:Array.isArray(i.items)?i.items.filter(e=>!!(e&&e.id)):[]}}async function d(e,l,n,i){return(0,t.del)((0,r.buildToolsRuntimeDeleteUrl)(e,l,n,i))}async function u(e,l,n,i){return(0,t.del)((0,r.buildMcpRuntimeDeleteUrl)(e,l,n,i))}function c(e,t,l,n){return(0,r.buildToolsRuntimeExportUrl)(e,t,l,n)}function m(e,t,l,n){return(0,r.buildMcpRuntimeExportUrl)(e,t,l,n)}async function p(e,l,n,i){let s=new FormData;return s.append("file",i),(0,t.post)((0,r.buildToolsRuntimeImportUrl)(e,l,n),s,{type:"file"})}async function f(e,l,n,i){let s=new FormData;return s.append("file",i),(0,t.post)((0,r.buildMcpRuntimeImportUrl)(e,l,n),s,{type:"file"})}async function b(e,l,n){return(0,t.get)((0,r.buildRemoteMcpJsonUrl)(e,l,n))}async function y(e,l,n,i){await (0,t.post)((0,r.buildRemoteMcpJsonUrl)(e,l,n),{content:i})}async function v(e,l,n,i){return(0,t.del)((0,r.buildSkillsRuntimeDeleteUrl)(e,l,n,i))}function g(e,t,l,n){return(0,r.buildSkillsRuntimeExportUrl)(e,t,l,n)}async function h(e,l,n,i,s,a){let o=await (0,t.get)((0,r.buildCloudSkillCatalogUrl)(e,l,n,i,s,a));return{items:Array.isArray(o.items)?o.items:[],totalPages:Number(o.totalPages||0)}}async function x(e,l,n,i){await (0,t.post)((0,r.buildCloudSkillInstallUrl)(e,l,n),{id:i})}},55242,e=>{"use strict";e.s(["AppDialog",()=>i]);var t=e.i(18050),r=e.i(71645),l=e.i(76639),n=e.i(75157);function i(e){let{open:i,onOpenChange:s,title:a,children:o,footer:d,width:u="max-w-3xl",minHeight:c}=e,m=(0,r.useId)();return(0,t.jsx)(l.Dialog,{open:i,onOpenChange:s,children:(0,t.jsxs)(l.DialogContent,{"aria-labelledby":m,className:(0,n.cn)(u,c?"!min-h-[--min-h]":""),style:c?{"--min-h":c}:void 0,children:[(0,t.jsxs)(l.DialogHeader,{children:[(0,t.jsx)(l.DialogTitle,{id:m,children:a}),(0,t.jsx)(l.DialogClose,{"aria-label":"关闭"})]}),(0,t.jsx)(l.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]})})}},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 r(e){let t=String(e).split(/\r?\n/),r={},l=/^\s*(?:export\s+)?([A-Za-z_][A-Za-z0-9_]*)\s*=\s*(.*)$/;for(let e=0;e<t.length;e++){let n=t[e],i=l.exec(n);i&&(r[i[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}(i[2]))}return r}function l(e,r){let l=Array.isArray(e)?e:[],n=new Set;for(let e=0;e<l.length;e++){let t=l[e];t&&"object"==typeof t&&"string"==typeof t.key&&n.add(t.key)}let i=[];for(let e=0;e<l.length;e++){let n=l[e];if(!n||"object"!=typeof n||"string"!=typeof n.key)continue;let s=n.key;if(!Object.prototype.hasOwnProperty.call(r,s))continue;let a=r[s];null!=a&&""!==String(a).trim()&&i.push("".concat(s,"=").concat(t(String(a))))}let s=Object.keys(r).filter(e=>!n.has(e)).sort();for(let e=0;e<s.length;e++){let l=s[e],n=r[l];null!=n&&""!==String(n).trim()&&i.push("".concat(l,"=").concat(t(String(n))))}let a=i.join("\n");return a.length>0?"".concat(a,"\n"):""}e.s(["buildEnvFileContentFromForm",()=>l,"parseEnvContentToMap",()=>r],18900),e.s(["loadDemoSingleMessage",()=>d,"loadSystemEnv",()=>s,"saveSystemEnv",()=>a,"saveSystemMcpJson",()=>o],69051);var n=e.i(29250),i=e.i(36845);async function s(e,t,r){return(0,n.get)((0,i.buildSystemEnvApiUrl)(e,t,r))}async function a(e,t,r,l){await (0,n.patch)((0,i.buildSystemEnvApiUrl)(e,t,r),{content:l})}async function o(e,t,r,l){await (0,n.patch)((0,i.buildSystemMcpJsonApiUrl)(e,t,r),{content:l})}async function d(){return(0,n.get)("/api/demo/single-message")}}]);
@@ -1,229 +0,0 @@
1
- ---
2
- name: geelib
3
- description: GeeLib 工作项 CLI;项目、工作项、状态、评论的查询与更新
4
- argument-hint: "[list-matters | get-matter | update-matter | poll | ...]"
5
- user-invocable: true
6
- allowed-tools: Bash(node:*)
7
- ---
8
-
9
- # geelib — GeeLib 工作项 CLI
10
-
11
- 通过内嵌 CLI 操作 GeeLib。**数据必须来自 CLI 的 JSON 输出**;禁止 MCP、禁止浏览器、禁止编造。
12
-
13
- ## 使用方式
14
-
15
- Skill 工具注入本说明并放开 `Bash(node:*)`。**Skill 不执行 CLI、不返回 GeeLib 数据**。
16
-
17
- 收到本说明后:
18
-
19
- 1. 根据用户意图选择子命令(见下方命令参考)
20
- 2. 用 `Bash` 执行 `node ${CLAUDE_SKILL_DIR}/geelib.mjs <command> [options]`
21
- 3. 解析 stdout JSON(成功时通常 `errno === 2000`)
22
- 4. 仅基于 CLI 返回组织回复;失败或无数据时如实说明
23
-
24
- **禁止** Glob/Read 去找 SKILL.md(本说明已在上下文中)。
25
-
26
- `$ARGUMENTS` 是自然语言描述,需映射为 CLI 子命令与 `--flag`,不要原样当作 shell 命令。
27
-
28
- ## 进行中项目(Skill 加载时自动刷新)
29
-
30
- 以下列表在加载本 Skill 时从 GeeLib 拉取(`is_archive=0`)。选择 `--sub-id` 时优先使用下表,无需再 Glob/Read SKILL 或重复 `list-projects` 全量 JSON。
31
-
32
- !`node ${CLAUDE_SKILL_DIR}/geelib.mjs list-active-projects`
33
-
34
- ## CLI 基础
35
-
36
- ```bash
37
- node ${CLAUDE_SKILL_DIR}/geelib.mjs <command> [options]
38
- node ${CLAUDE_SKILL_DIR}/geelib.mjs help
39
- ```
40
-
41
- - `${CLAUDE_SKILL_DIR}`:skill 根目录,仅用打包产物 `geelib.mjs`
42
- - 参数:`--key=value` 或 `--key value`;缺必填参数时 CLI 报错退出
43
- - 输出:stdout 一般为 JSON(`list-active-projects` 为 Markdown 表格文本);stderr 以 `[geelib-cli]` 开头表示 CLI 级错误
44
-
45
- ### 环境变量
46
-
47
- | 变量 | 必填 | 说明 |
48
- |------|------|------|
49
- | `GEELIB_USER` | 是 | SSO 用户名 |
50
- | `GEELIB_PASSWD` | 是 | SSO 密码 |
51
- | `GEELIB_BASE_URL` | 否 | 默认 `https://geelib.qihoo.net` |
52
-
53
- ### 常见依赖关系
54
-
55
- 多数工作项操作需要先拿到 `sub_id`(项目)和 `type_id`(工作项类型)。**用户说的「8520」等版本号是项目名称,不是 `--sub-id`**;从上文「进行中项目」表或 `list-projects --query=8520` 解析真实 sub_id。
56
-
57
- ```bash
58
- node ${CLAUDE_SKILL_DIR}/geelib.mjs list-projects [--query=关键词]
59
- node ${CLAUDE_SKILL_DIR}/geelib.mjs list-matter-types --sub-id=<sub_id>
60
- # 后续命令使用 --sub-id 与 --type-id
61
- ```
62
-
63
- CLI 无通用日期/版本筛选参数;若用户按时间、版本等条件过滤,在 `list-matters` 返回的 `data.matterList[]` 中按 `create_time` 自行筛选。总数见 `data.total`;需要更多结果时递增 `--page`。
64
-
65
- ## CLI 命令参考
66
-
67
- ### get-user-info
68
-
69
- ```bash
70
- node ${CLAUDE_SKILL_DIR}/geelib.mjs get-user-info
71
- ```
72
-
73
- 关键字段:`data.id` 或 `data.user_id`。
74
-
75
- ### list-projects
76
-
77
- ```bash
78
- node ${CLAUDE_SKILL_DIR}/geelib.mjs list-projects
79
- node ${CLAUDE_SKILL_DIR}/geelib.mjs list-projects --query=关键词
80
- ```
81
-
82
- 列表在 `data.list` 或 `data`;项目 ID 取 `id` 或 `sub_id` → `--sub-id`。
83
-
84
- ### list-active-projects
85
-
86
- 输出进行中项目摘要表(纯文本,供 Skill 加载注入;见上文「进行中项目」)。
87
-
88
- ```bash
89
- node ${CLAUDE_SKILL_DIR}/geelib.mjs list-active-projects
90
- ```
91
-
92
- ### get-project-detail
93
-
94
- ```bash
95
- node ${CLAUDE_SKILL_DIR}/geelib.mjs get-project-detail --sub-id=123
96
- ```
97
-
98
- ### list-project-members
99
-
100
- ```bash
101
- node ${CLAUDE_SKILL_DIR}/geelib.mjs list-project-members --sub-id=123
102
- ```
103
-
104
- ### list-matter-types
105
-
106
- ```bash
107
- node ${CLAUDE_SKILL_DIR}/geelib.mjs list-matter-types --sub-id=123
108
- ```
109
-
110
- 关键字段:`data[]` 为数组;类型 ID 取 `id`(即 `--type-id`);名称在 `type_name` 或 `name`。
111
-
112
- ### list-matter-statuses
113
-
114
- ```bash
115
- node ${CLAUDE_SKILL_DIR}/geelib.mjs list-matter-statuses --sub-id=123 --type-id=456
116
- ```
117
-
118
- 状态 ID 取 `status_id` 或 `matterStatus.id` 或 `id`;名称在 `matterStatus.status_name` 或 `name`。
119
-
120
- ### list-matters
121
-
122
- 分页查询工作项列表。
123
-
124
- ```bash
125
- node ${CLAUDE_SKILL_DIR}/geelib.mjs list-matters --sub-id=123 --type-id=456
126
- node ${CLAUDE_SKILL_DIR}/geelib.mjs list-matters --sub-id=123 --type-id=456 --page=1 --page-size=20
127
- node ${CLAUDE_SKILL_DIR}/geelib.mjs list-matters --sub-id=123 --type-id=456 --keyword=标题关键词
128
- node ${CLAUDE_SKILL_DIR}/geelib.mjs list-matters --sub-id=123 --type-id=456 --status-id=5 --assignee-id=789
129
- ```
130
-
131
- | 参数 | 必填 | 说明 |
132
- |------|------|------|
133
- | `--sub-id` | 是 | 项目 ID |
134
- | `--type-id` | 是 | 工作项类型 ID |
135
- | `--page` | 否 | 页码,默认 1 |
136
- | `--page-size` | 否 | 每页条数,默认 20 |
137
- | `--keyword` | 否 | 标题模糊搜索 |
138
- | `--status-id` | 否 | 按状态过滤 |
139
- | `--assignee-id` | 否 | 按执行人过滤 |
140
-
141
- 列表在 `data.matterList`(数组);总条数 `data.total`。单条 ID 取 `id` 或 `matter_id`;创建时间 `create_time`;标题 `title`;状态名 `status_name`。
142
-
143
- **不要用 `data.list` 或 `data.data`**(API 不返回这两个字段)。
144
-
145
- ### get-matter
146
-
147
- ```bash
148
- node ${CLAUDE_SKILL_DIR}/geelib.mjs get-matter --sub-id=123 --matter-id=999
149
- ```
150
-
151
- 常用字段(均在 `data` 下):
152
-
153
- | 字段 | 含义 |
154
- |------|------|
155
- | `title` | 标题 |
156
- | `content` | 描述/正文 |
157
- | `matter_status` | 当前状态 ID |
158
- | `status_name` | 当前状态名称 |
159
- | `matterCustomAttributes` | 自定义字段 |
160
-
161
- ### update-matter
162
-
163
- ```bash
164
- node ${CLAUDE_SKILL_DIR}/geelib.mjs update-matter --sub-id=123 --matter-id=999 --status-id=5
165
- node ${CLAUDE_SKILL_DIR}/geelib.mjs update-matter --sub-id=123 --matter-id=999 --title="新标题" --description="新描述"
166
- node ${CLAUDE_SKILL_DIR}/geelib.mjs update-matter --sub-id=123 --matter-id=999 --assignee-id=789 --priority=high --progress=100
167
- ```
168
-
169
- | 参数 | 必填 | 说明 |
170
- |------|------|------|
171
- | `--sub-id` | 是 | 项目 ID |
172
- | `--matter-id` | 是 | 工作项 ID |
173
- | `--title` | 否 | 标题 |
174
- | `--description` | 否 | 描述(映射为 API `content`) |
175
- | `--status-id` | 否 | 目标状态 ID |
176
- | `--assignee-id` | 否 | 执行人用户 ID |
177
- | `--priority` | 否 | `low` / `medium` / `high` / `urgent` |
178
- | `--progress` | 否 | 0–100 |
179
- | `--sprint-id` | 否 | 迭代 ID |
180
-
181
- 含 `--status-id` 时 CLI 会回查验证;API 成功但状态未变更时,`errmsg` 含未填必填字段等信息。
182
-
183
- ### get-comments / add-comment
184
-
185
- ```bash
186
- node ${CLAUDE_SKILL_DIR}/geelib.mjs get-comments --sub-id=123 --matter-id=999
187
- node ${CLAUDE_SKILL_DIR}/geelib.mjs add-comment --sub-id=123 --matter-id=999 --content="说明"
188
- ```
189
-
190
- ### poll
191
-
192
- 拉取当前用户、本地尚未 `mark-processed` 的最新一条待办工作项(定时巡检入口)。**不是通用列表查询**;查多条工作项用 `list-matters`。
193
-
194
- ```bash
195
- node ${CLAUDE_SKILL_DIR}/geelib.mjs poll
196
- node ${CLAUDE_SKILL_DIR}/geelib.mjs poll --sub-id=123 --type-id=456
197
- node ${CLAUDE_SKILL_DIR}/geelib.mjs poll --cwd=/path/to/workspace
198
- ```
199
-
200
- | 参数 | 必填 | 说明 |
201
- |------|------|------|
202
- | `--sub-id` | 否 | 固定项目;省略则自动发现 |
203
- | `--type-id` | 否 | 固定类型;省略则优先选名称含「任务」的类型 |
204
- | `--cwd` | 否 | 状态文件目录,默认 `process.cwd()` |
205
-
206
- 返回:`hasNew`、`matter`、`mattersTotal`、`discovered`(含 `sub_id`、`type_id`、`done_status_id`)。`poll` 只更新 `lastPollAt`,不自动 mark。
207
-
208
- ### mark-processed
209
-
210
- 将已闭环的工作项记入本地已处理列表(配合 `poll` 去重)。
211
-
212
- ```bash
213
- node ${CLAUDE_SKILL_DIR}/geelib.mjs mark-processed --matter-id=999
214
- node ${CLAUDE_SKILL_DIR}/geelib.mjs mark-processed --matter-id=999 --cwd=/path/to/workspace
215
- ```
216
-
217
- 仅在 `update-matter` 状态变更确认成功后调用。
218
-
219
- ## poll 巡检闭环
220
-
221
- 仅当用户明确要求「巡检 / /geelib poll」,或 Skill args 仅为 `poll` 时:
222
-
223
- 1. `poll` 拉取一条待办;`hasNew === false` 则回复无新任务
224
- 2. `get-matter` 读描述与验收标准,执行工程工作
225
- 3. `update-matter` 回写状态(`done_status_id` 见 `poll` 返回的 `discovered`)
226
- 4. `add-comment` 写交付说明,再次 `get-matter` 验证
227
- 5. 状态回写成功则 `mark-processed`;失败则 `add-comment` 记录阻塞原因,不 mark
228
-
229
- 状态文件:`<agentCwd>/geelib-poller-state.json`(`poll` / `mark-processed` 自动读写)。
@@ -1,17 +0,0 @@
1
- {
2
- "lastPollAt": 1779680910834,
3
- "processedMatterIds": [],
4
- "discovered": {
5
- "sub_id": 6451,
6
- "type_id": 18783,
7
- "pending_status_ids": [
8
- 1,
9
- 46,
10
- 47,
11
- 3,
12
- 24,
13
- 45
14
- ],
15
- "done_status_id": 23
16
- }
17
- }