0&&n.push({type:`text`,value:`
-`}),n}function bN(e){let t=0,n=e.charCodeAt(t);for(;n===9||n===32;)t++,n=e.charCodeAt(t);return e.slice(t)}function xN(e,t){let n=hN(e,t),r=n.one(e,void 0),i=eN(n),a=Array.isArray(r)?{type:`root`,children:r}:r||{type:`root`,children:[]};return i&&(`children`in a,a.children.push({type:`text`,value:`
-`},i)),a}function SN(e,t){return e&&`run`in e?async function(n,r){let i=xN(n,{file:r,...t});await e.run(i,r)}:function(n,r){return xN(n,{file:r,...e||t})}}function CN(e){if(e)throw e}var wN=n(((e,t)=>{var n=Object.prototype.hasOwnProperty,r=Object.prototype.toString,i=Object.defineProperty,a=Object.getOwnPropertyDescriptor,o=function(e){return typeof Array.isArray==`function`?Array.isArray(e):r.call(e)===`[object Array]`},s=function(e){if(!e||r.call(e)!==`[object Object]`)return!1;var t=n.call(e,`constructor`),i=e.constructor&&e.constructor.prototype&&n.call(e.constructor.prototype,`isPrototypeOf`);if(e.constructor&&!t&&!i)return!1;for(var a in e);return a===void 0||n.call(e,a)},c=function(e,t){i&&t.name===`__proto__`?i(e,t.name,{enumerable:!0,configurable:!0,value:t.newValue,writable:!0}):e[t.name]=t.newValue},l=function(e,t){if(t===`__proto__`){if(!n.call(e,t))return;if(a)return a(e,t).value}return e[t]};t.exports=function e(){var t,n,r,i,a,u,d=arguments[0],f=1,p=arguments.length,m=!1;for(typeof d==`boolean`&&(m=d,d=arguments[1]||{},f=2),(d==null||typeof d!=`object`&&typeof d!=`function`)&&(d={});ft.length,o;r&&t.push(i);try{o=e.apply(this,t)}catch(e){let t=e;if(r&&n)throw t;return i(t)}r||(o&&o.then&&typeof o.then==`function`?o.then(a,i):o instanceof Error?i(o):a(o))}function i(e,...r){n||(n=!0,t(e,...r))}function a(e){i(null,e)}}var ON={basename:kN,dirname:AN,extname:jN,join:MN,sep:`/`};function kN(e,t){if(t!==void 0&&typeof t!=`string`)throw TypeError(`"ext" argument must be a string`);FN(e);let n=0,r=-1,i=e.length,a;if(t===void 0||t.length===0||t.length>e.length){for(;i--;)if(e.codePointAt(i)===47){if(a){n=i+1;break}}else r<0&&(a=!0,r=i+1);return r<0?``:e.slice(n,r)}if(t===e)return``;let o=-1,s=t.length-1;for(;i--;)if(e.codePointAt(i)===47){if(a){n=i+1;break}}else o<0&&(a=!0,o=i+1),s>-1&&(e.codePointAt(i)===t.codePointAt(s--)?s<0&&(r=i):(s=-1,r=o));return n===r?r=o:r<0&&(r=e.length),e.slice(n,r)}function AN(e){if(FN(e),e.length===0)return`.`;let t=-1,n=e.length,r;for(;--n;)if(e.codePointAt(n)===47){if(r){t=n;break}}else r||=!0;return t<0?e.codePointAt(0)===47?`/`:`.`:t===1&&e.codePointAt(0)===47?`//`:e.slice(0,t)}function jN(e){FN(e);let t=e.length,n=-1,r=0,i=-1,a=0,o;for(;t--;){let s=e.codePointAt(t);if(s===47){if(o){r=t+1;break}continue}n<0&&(o=!0,n=t+1),s===46?i<0?i=t:a!==1&&(a=1):i>-1&&(a=-1)}return i<0||n<0||a===0||a===1&&i===n-1&&i===r+1?``:e.slice(i,n)}function MN(...e){let t=-1,n;for(;++t0&&e.codePointAt(e.length-1)===47&&(n+=`/`),t?`/`+n:n}function PN(e,t){let n=``,r=0,i=-1,a=0,o=-1,s,c;for(;++o<=e.length;){if(o2){if(c=n.lastIndexOf(`/`),c!==n.length-1){c<0?(n=``,r=0):(n=n.slice(0,c),r=n.length-1-n.lastIndexOf(`/`)),i=o,a=0;continue}}else if(n.length>0){n=``,r=0,i=o,a=0;continue}}t&&(n=n.length>0?n+`/..`:`..`,r=2)}else n.length>0?n+=`/`+e.slice(i+1,o):n=e.slice(i+1,o),r=o-i-1}i=o,a=0}else s===46&&a>-1?a++:a=-1}return n}function FN(e){if(typeof e!=`string`)throw TypeError(`Path must be a string. Received `+JSON.stringify(e))}var IN={cwd:LN};function LN(){return`/`}function RN(e){return!!(typeof e==`object`&&e&&`href`in e&&e.href&&`protocol`in e&&e.protocol&&e.auth===void 0)}function zN(e){if(typeof e==`string`)e=new URL(e);else if(!RN(e)){let t=TypeError('The "path" argument must be of type string or an instance of URL. Received `'+e+"`");throw t.code=`ERR_INVALID_ARG_TYPE`,t}if(e.protocol!==`file:`){let e=TypeError(`The URL must be of scheme file`);throw e.code=`ERR_INVALID_URL_SCHEME`,e}return BN(e)}function BN(e){if(e.hostname!==``){let e=TypeError(`File URL host must be "localhost" or empty on darwin`);throw e.code=`ERR_INVALID_FILE_URL_HOST`,e}let t=e.pathname,n=-1;for(;++n0){let[r,...a]=t,o=n[i][1];TN(o)&&TN(r)&&(r=(0,JN.default)(!0,o,r)),n[i]=[e,r,...a]}}}}().freeze();function ZN(e,t){if(typeof t!=`function`)throw TypeError("Cannot `"+e+"` without `parser`")}function QN(e,t){if(typeof t!=`function`)throw TypeError("Cannot `"+e+"` without `compiler`")}function $N(e,t){if(t)throw Error("Cannot call `"+e+"` on a frozen processor.\nCreate a new processor first, by calling it: use `processor()` instead of `processor`.")}function eP(e){if(!TN(e)||typeof e.type!=`string`)throw TypeError("Expected node, got `"+e+"`")}function tP(e,t,n){if(!n)throw Error("`"+e+"` finished async. Use `"+t+"` instead")}function nP(e){return rP(e)?e:new HN(e)}function rP(e){return!!(e&&typeof e==`object`&&`message`in e&&`messages`in e)}function iP(e){return typeof e==`string`||aP(e)}function aP(e){return!!(e&&typeof e==`object`&&`byteLength`in e&&`byteOffset`in e)}var oP=[],sP={allowDangerousHtml:!0},cP=/^(https?|ircs?|mailto|xmpp)$/i,lP=[{from:`astPlugins`,id:`remove-buggy-html-in-markdown-parser`},{from:`allowDangerousHtml`,id:`remove-buggy-html-in-markdown-parser`},{from:`allowNode`,id:`replace-allownode-allowedtypes-and-disallowedtypes`,to:`allowElement`},{from:`allowedTypes`,id:`replace-allownode-allowedtypes-and-disallowedtypes`,to:`allowedElements`},{from:`className`,id:`remove-classname`},{from:`disallowedTypes`,id:`replace-allownode-allowedtypes-and-disallowedtypes`,to:`disallowedElements`},{from:`escapeHtml`,id:`remove-buggy-html-in-markdown-parser`},{from:`includeElementIndex`,id:`#remove-includeelementindex`},{from:`includeNodeIndex`,id:`change-includenodeindex-to-includeelementindex`},{from:`linkTarget`,id:`remove-linktarget`},{from:`plugins`,id:`change-plugins-to-remarkplugins`,to:`remarkPlugins`},{from:`rawSourcePos`,id:`#remove-rawsourcepos`},{from:`renderers`,id:`change-renderers-to-components`,to:`components`},{from:`source`,id:`change-source-to-children`,to:`children`},{from:`sourcePos`,id:`#remove-sourcepos`},{from:`transformImageUri`,id:`#add-urltransform`,to:`urlTransform`},{from:`transformLinkUri`,id:`#add-urltransform`,to:`urlTransform`}];function uP(e){let t=dP(e),n=fP(e);return pP(t.runSync(t.parse(n),n),e)}function dP(e){let t=e.rehypePlugins||oP,n=e.remarkPlugins||oP,r=e.remarkRehypeOptions?{...e.remarkRehypeOptions,...sP}:sP;return XN().use(sM).use(n).use(SN,r).use(t)}function fP(e){let t=e.children||``,n=new HN;return typeof t==`string`?n.value=t:``+t,n}function pP(e,t){let n=t.allowedElements,r=t.allowElement,i=t.components,a=t.disallowedElements,o=t.skipHtml,s=t.unwrapDisallowed,c=t.urlTransform||mP;for(let e of lP)Object.hasOwn(t,e.from)&&``+e.from+(e.to?"use `"+e.to+"` instead":`remove it`)+e.id;return fN(e,l),LO(e,{Fragment:K.Fragment,components:i,ignoreInvalidStyle:!0,jsx:K.jsx,jsxs:K.jsxs,passKeys:!0,passNode:!0});function l(e,t,i){if(e.type===`raw`&&i&&typeof t==`number`)return o?i.children.splice(t,1):i.children[t]={type:`text`,value:e.value},t;if(e.type===`element`){let t;for(t in ak)if(Object.hasOwn(ak,t)&&Object.hasOwn(e.properties,t)){let n=e.properties[t],r=ak[t];(r===null||r.includes(e.tagName))&&(e.properties[t]=c(String(n||``),t,e))}}if(e.type===`element`){let o=n?!n.includes(e.tagName):a?a.includes(e.tagName):!1;if(!o&&r&&typeof t==`number`&&(o=!r(e,t,i)),o&&i&&typeof t==`number`)return s&&e.children?i.children.splice(t,1,...e.children):i.children.splice(t,1),t}}}function mP(e){let t=e.indexOf(`:`),n=e.indexOf(`?`),r=e.indexOf(`#`),i=e.indexOf(`/`);return t===-1||i!==-1&&t>i||n!==-1&&t>n||r!==-1&&t>r||cP.test(e.slice(0,t))?e:``}function hP(e,t){let n=String(e);if(typeof t!=`string`)throw TypeError(`Expected character`);let r=0,i=n.indexOf(t);for(;i!==-1;)r++,i=n.indexOf(t,i+t.length);return r}function gP(e){if(typeof e!=`string`)throw TypeError(`Expected a string`);return e.replace(/[|\\{}()[\]^$+*?.]/g,`\\$&`).replace(/-/g,`\\x2d`)}function _P(e,t,n){let r=tN((n||{}).ignore||[]),i=vP(t),a=-1;for(;++a0?{type:`text`,value:a}:void 0),a===!1?r.lastIndex=n+1:(s!==n&&u.push({type:`text`,value:e.value.slice(s,n)}),Array.isArray(a)?u.push(...a):a&&u.push(a),s=n+d[0].length,l=!0),!r.global)break;d=r.exec(e.value)}return l?(s?\]}]+$/.exec(e);if(!t)return[e,void 0];e=e.slice(0,t.index);let n=t[0],r=n.indexOf(`)`),i=hP(e,`(`),a=hP(e,`)`);for(;r!==-1&&i>a;)e+=n.slice(0,r+1),n=n.slice(r+1),r=n.indexOf(`)`),a++;return[e,n]}function IP(e,t){let n=e.input.charCodeAt(e.index-1);return(e.index===0||Mk(n)||jk(n))&&(!t||n!==47)}KP.peek=GP;function LP(){this.buffer()}function RP(e){this.enter({type:`footnoteReference`,identifier:``,label:``},e)}function zP(){this.buffer()}function BP(e){this.enter({type:`footnoteDefinition`,identifier:``,label:``,children:[]},e)}function VP(e){let t=this.resume(),n=this.stack[this.stack.length-1];n.type,n.identifier=bk(this.sliceSerialize(e)).toLowerCase(),n.label=t}function HP(e){this.exit(e)}function UP(e){let t=this.resume(),n=this.stack[this.stack.length-1];n.type,n.identifier=bk(this.sliceSerialize(e)).toLowerCase(),n.label=t}function WP(e){this.exit(e)}function GP(){return`[`}function KP(e,t,n,r){let i=n.createTracker(r),a=i.move(`[^`),o=n.enter(`footnoteReference`),s=n.enter(`reference`);return a+=i.move(n.safe(n.associationId(e),{after:`]`,before:a})),s(),o(),a+=i.move(`]`),a}function qP(){return{enter:{gfmFootnoteCallString:LP,gfmFootnoteCall:RP,gfmFootnoteDefinitionLabelString:zP,gfmFootnoteDefinition:BP},exit:{gfmFootnoteCallString:VP,gfmFootnoteCall:HP,gfmFootnoteDefinitionLabelString:UP,gfmFootnoteDefinition:WP}}}function JP(e){let t=!1;return e&&e.firstLineBlank&&(t=!0),{handlers:{footnoteDefinition:n,footnoteReference:KP},unsafe:[{character:`[`,inConstruct:[`label`,`phrasing`,`reference`]}]};function n(e,n,r,i){let a=r.createTracker(i),o=a.move(`[^`),s=r.enter(`footnoteDefinition`),c=r.enter(`label`);return o+=a.move(r.safe(r.associationId(e),{before:o,after:`]`})),c(),o+=a.move(`]:`),e.children&&e.children.length>0&&(a.shift(4),o+=a.move((t?`
-`:` `)+r.indentLines(r.containerFlow(e,a.current()),t?XP:YP))),s(),o}}function YP(e,t,n){return t===0?e:XP(e,t,n)}function XP(e,t,n){return(n?``:` `)+e}var ZP=[`autolink`,`destinationLiteral`,`destinationRaw`,`reference`,`titleQuote`,`titleApostrophe`];nF.peek=rF;function QP(){return{canContainEols:[`delete`],enter:{strikethrough:eF},exit:{strikethrough:tF}}}function $P(){return{unsafe:[{character:`~`,inConstruct:`phrasing`,notInConstruct:ZP}],handlers:{delete:nF}}}function eF(e){this.enter({type:`delete`,children:[]},e)}function tF(e){this.exit(e)}function nF(e,t,n,r){let i=n.createTracker(r),a=n.enter(`strikethrough`),o=i.move(`~~`);return o+=n.containerPhrasing(e,{...i.current(),before:o,after:`~`}),o+=i.move(`~~`),a(),o}function rF(){return`~`}function iF(e){return e.length}function aF(e,t){let n=t||{},r=(n.align||[]).concat(),i=n.stringLength||iF,a=[],o=[],s=[],c=[],l=0,u=-1;for(;++ul&&(l=e[u].length);++ac[a])&&(c[a]=e)}t.push(o)}o[u]=t,s[u]=r}let d=-1;if(typeof r==`object`&&`length`in r)for(;++dc[d]&&(c[d]=i),p[d]=i),f[d]=o}o.splice(1,0,f),s.splice(1,0,p),u=-1;let m=[];for(;++u `),a.shift(2);let o=n.indentLines(n.containerFlow(e,a.current()),lF);return i(),o}function lF(e,t,n){return`>`+(n?``:` `)+e}function uF(e,t){return dF(e,t.inConstruct,!0)&&!dF(e,t.notInConstruct,!1)}function dF(e,t,n){if(typeof t==`string`&&(t=[t]),!t||t.length===0)return n;let r=-1;for(;++ro&&(o=a):a=1,i=r+t.length,r=n.indexOf(t,i);return o}function mF(e,t){return!!(t.options.fences===!1&&e.value&&!e.lang&&/[^ \r\n]/.test(e.value)&&!/^[\t ]*(?:[\r\n]|$)|(?:^|[\r\n])[\t ]*$/.test(e.value))}function hF(e){let t=e.options.fence||"`";if(t!=="`"&&t!==`~`)throw Error("Cannot serialize code with `"+t+"` for `options.fence`, expected `` ` `` or `~`");return t}function gF(e,t,n,r){let i=hF(n),a=e.value||``,o=i==="`"?`GraveAccent`:`Tilde`;if(mF(e,n)){let e=n.enter(`codeIndented`),t=n.indentLines(a,_F);return e(),t}let s=n.createTracker(r),c=i.repeat(Math.max(pF(a,i)+1,3)),l=n.enter(`codeFenced`),u=s.move(c);if(e.lang){let t=n.enter(`codeFencedLang${o}`);u+=s.move(n.safe(e.lang,{before:u,after:` `,encode:["`"],...s.current()})),t()}if(e.lang&&e.meta){let t=n.enter(`codeFencedMeta${o}`);u+=s.move(` `),u+=s.move(n.safe(e.meta,{before:u,after:`
-`,encode:["`"],...s.current()})),t()}return u+=s.move(`
-`),a&&(u+=s.move(a+`
-`)),u+=s.move(c),l(),u}function _F(e,t,n){return(n?``:` `)+e}function vF(e){let t=e.options.quote||`"`;if(t!==`"`&&t!==`'`)throw Error("Cannot serialize title with `"+t+"` for `options.quote`, expected `\"`, or `'`");return t}function yF(e,t,n,r){let i=vF(n),a=i===`"`?`Quote`:`Apostrophe`,o=n.enter(`definition`),s=n.enter(`label`),c=n.createTracker(r),l=c.move(`[`);return l+=c.move(n.safe(n.associationId(e),{before:l,after:`]`,...c.current()})),l+=c.move(`]: `),s(),!e.url||/[\0- \u007F]/.test(e.url)?(s=n.enter(`destinationLiteral`),l+=c.move(`<`),l+=c.move(n.safe(e.url,{before:l,after:`>`,...c.current()})),l+=c.move(`>`)):(s=n.enter(`destinationRaw`),l+=c.move(n.safe(e.url,{before:l,after:e.title?` `:`
-`,...c.current()}))),s(),e.title&&(s=n.enter(`title${a}`),l+=c.move(` `+i),l+=c.move(n.safe(e.title,{before:l,after:i,...c.current()})),l+=c.move(i),s()),o(),l}function bF(e){let t=e.options.emphasis||`*`;if(t!==`*`&&t!==`_`)throw Error("Cannot serialize emphasis with `"+t+"` for `options.emphasis`, expected `*`, or `_`");return t}function xF(e){return``+e.toString(16).toUpperCase()+`;`}function SF(e,t,n){let r=Hk(e),i=Hk(t);return r===void 0?i===void 0?n===`_`?{inside:!0,outside:!0}:{inside:!1,outside:!1}:i===1?{inside:!0,outside:!0}:{inside:!1,outside:!0}:r===1?i===void 0?{inside:!1,outside:!1}:i===1?{inside:!0,outside:!0}:{inside:!1,outside:!1}:i===void 0?{inside:!1,outside:!1}:i===1?{inside:!0,outside:!1}:{inside:!1,outside:!1}}CF.peek=wF;function CF(e,t,n,r){let i=bF(n),a=n.enter(`emphasis`),o=n.createTracker(r),s=o.move(i),c=o.move(n.containerPhrasing(e,{after:i,before:s,...o.current()})),l=c.charCodeAt(0),u=SF(r.before.charCodeAt(r.before.length-1),l,i);u.inside&&(c=xF(l)+c.slice(1));let d=c.charCodeAt(c.length-1),f=SF(r.after.charCodeAt(0),d,i);f.inside&&(c=c.slice(0,-1)+xF(d));let p=o.move(i);return a(),n.attentionEncodeSurroundingInfo={after:f.outside,before:u.outside},s+c+p}function wF(e,t,n){return n.options.emphasis||`*`}function TF(e,t){let n=!1;return fN(e,function(e){if(`value`in e&&/\r?\n|\r/.test(e.value)||e.type===`break`)return n=!0,!1}),!!((!e.depth||e.depth<3)&&sk(e)&&(t.options.setext||n))}function EF(e,t,n,r){let i=Math.max(Math.min(6,e.depth||1),1),a=n.createTracker(r);if(TF(e,n)){let t=n.enter(`headingSetext`),r=n.enter(`phrasing`),o=n.containerPhrasing(e,{...a.current(),before:`
-`,after:`
-`});return r(),t(),o+`
-`+(i===1?`=`:`-`).repeat(o.length-(Math.max(o.lastIndexOf(`\r`),o.lastIndexOf(`
-`))+1))}let o=`#`.repeat(i),s=n.enter(`headingAtx`),c=n.enter(`phrasing`);a.move(o+` `);let l=n.containerPhrasing(e,{before:`# `,after:`
-`,...a.current()});return/^[\t ]/.test(l)&&(l=xF(l.charCodeAt(0))+l.slice(1)),l=l?o+` `+l:o,n.options.closeAtx&&(l+=` `+o),c(),s(),l}DF.peek=OF;function DF(e){return e.value||``}function OF(){return`<`}kF.peek=AF;function kF(e,t,n,r){let i=vF(n),a=i===`"`?`Quote`:`Apostrophe`,o=n.enter(`image`),s=n.enter(`label`),c=n.createTracker(r),l=c.move(`![`);return l+=c.move(n.safe(e.alt,{before:l,after:`]`,...c.current()})),l+=c.move(`](`),s(),!e.url&&e.title||/[\0- \u007F]/.test(e.url)?(s=n.enter(`destinationLiteral`),l+=c.move(`<`),l+=c.move(n.safe(e.url,{before:l,after:`>`,...c.current()})),l+=c.move(`>`)):(s=n.enter(`destinationRaw`),l+=c.move(n.safe(e.url,{before:l,after:e.title?` `:`)`,...c.current()}))),s(),e.title&&(s=n.enter(`title${a}`),l+=c.move(` `+i),l+=c.move(n.safe(e.title,{before:l,after:i,...c.current()})),l+=c.move(i),s()),l+=c.move(`)`),o(),l}function AF(){return`!`}jF.peek=MF;function jF(e,t,n,r){let i=e.referenceType,a=n.enter(`imageReference`),o=n.enter(`label`),s=n.createTracker(r),c=s.move(`![`),l=n.safe(e.alt,{before:c,after:`]`,...s.current()});c+=s.move(l+`][`),o();let u=n.stack;n.stack=[],o=n.enter(`reference`);let d=n.safe(n.associationId(e),{before:c,after:`]`,...s.current()});return o(),n.stack=u,a(),i===`full`||!l||l!==d?c+=s.move(d+`]`):i===`shortcut`?c=c.slice(0,-1):c+=s.move(`]`),c}function MF(){return`!`}NF.peek=PF;function NF(e,t,n){let r=e.value||``,i="`",a=-1;for(;RegExp("(^|[^`])"+i+"([^`]|$)").test(r);)i+="`";for(/[^ \r\n]/.test(r)&&(/^[ \r\n]/.test(r)&&/[ \r\n]$/.test(r)||/^`|`$/.test(r))&&(r=` `+r+` `);++a\u007F]/.test(e.url))}IF.peek=LF;function IF(e,t,n,r){let i=vF(n),a=i===`"`?`Quote`:`Apostrophe`,o=n.createTracker(r),s,c;if(FF(e,n)){let t=n.stack;n.stack=[],s=n.enter(`autolink`);let r=o.move(`<`);return r+=o.move(n.containerPhrasing(e,{before:r,after:`>`,...o.current()})),r+=o.move(`>`),s(),n.stack=t,r}s=n.enter(`link`),c=n.enter(`label`);let l=o.move(`[`);return l+=o.move(n.containerPhrasing(e,{before:l,after:`](`,...o.current()})),l+=o.move(`](`),c(),!e.url&&e.title||/[\0- \u007F]/.test(e.url)?(c=n.enter(`destinationLiteral`),l+=o.move(`<`),l+=o.move(n.safe(e.url,{before:l,after:`>`,...o.current()})),l+=o.move(`>`)):(c=n.enter(`destinationRaw`),l+=o.move(n.safe(e.url,{before:l,after:e.title?` `:`)`,...o.current()}))),c(),e.title&&(c=n.enter(`title${a}`),l+=o.move(` `+i),l+=o.move(n.safe(e.title,{before:l,after:i,...o.current()})),l+=o.move(i),c()),l+=o.move(`)`),s(),l}function LF(e,t,n){return FF(e,n)?`<`:`[`}RF.peek=zF;function RF(e,t,n,r){let i=e.referenceType,a=n.enter(`linkReference`),o=n.enter(`label`),s=n.createTracker(r),c=s.move(`[`),l=n.containerPhrasing(e,{before:c,after:`]`,...s.current()});c+=s.move(l+`][`),o();let u=n.stack;n.stack=[],o=n.enter(`reference`);let d=n.safe(n.associationId(e),{before:c,after:`]`,...s.current()});return o(),n.stack=u,a(),i===`full`||!l||l!==d?c+=s.move(d+`]`):i===`shortcut`?c=c.slice(0,-1):c+=s.move(`]`),c}function zF(){return`[`}function BF(e){let t=e.options.bullet||`*`;if(t!==`*`&&t!==`+`&&t!==`-`)throw Error("Cannot serialize items with `"+t+"` for `options.bullet`, expected `*`, `+`, or `-`");return t}function VF(e){let t=BF(e),n=e.options.bulletOther;if(!n)return t===`*`?`-`:`*`;if(n!==`*`&&n!==`+`&&n!==`-`)throw Error("Cannot serialize items with `"+n+"` for `options.bulletOther`, expected `*`, `+`, or `-`");if(n===t)throw Error("Expected `bullet` (`"+t+"`) and `bulletOther` (`"+n+"`) to be different");return n}function HF(e){let t=e.options.bulletOrdered||`.`;if(t!==`.`&&t!==`)`)throw Error("Cannot serialize items with `"+t+"` for `options.bulletOrdered`, expected `.` or `)`");return t}function UF(e){let t=e.options.rule||`*`;if(t!==`*`&&t!==`-`&&t!==`_`)throw Error("Cannot serialize rules with `"+t+"` for `options.rule`, expected `*`, `-`, or `_`");return t}function WF(e,t,n,r){let i=n.enter(`list`),a=n.bulletCurrent,o=e.ordered?HF(n):BF(n),s=e.ordered?o===`.`?`)`:`.`:VF(n),c=t&&n.bulletLastUsed?o===n.bulletLastUsed:!1;if(!e.ordered){let t=e.children?e.children[0]:void 0;if((o===`*`||o===`-`)&&t&&(!t.children||!t.children[0])&&n.stack[n.stack.length-1]===`list`&&n.stack[n.stack.length-2]===`listItem`&&n.stack[n.stack.length-3]===`list`&&n.stack[n.stack.length-4]===`listItem`&&n.indexStack[n.indexStack.length-1]===0&&n.indexStack[n.indexStack.length-2]===0&&n.indexStack[n.indexStack.length-3]===0&&(c=!0),UF(n)===o&&t){let t=-1;for(;++t-1?t.start:1)+(n.options.incrementListMarker===!1?0:t.children.indexOf(e))+a);let o=a.length+1;(i===`tab`||i===`mixed`&&(t&&t.type===`list`&&t.spread||e.spread))&&(o=Math.ceil(o/4)*4);let s=n.createTracker(r);s.move(a+` `.repeat(o-a.length)),s.shift(o);let c=n.enter(`listItem`),l=n.indentLines(n.containerFlow(e,s.current()),u);return c(),l;function u(e,t,n){return t?(n?``:` `.repeat(o))+e:(n?a:a+` `.repeat(o-a.length))+e}}function qF(e,t,n,r){let i=n.enter(`paragraph`),a=n.enter(`phrasing`),o=n.containerPhrasing(e,r);return a(),i(),o}var JF=tN([`break`,`delete`,`emphasis`,`footnote`,`footnoteReference`,`image`,`imageReference`,`inlineCode`,`inlineMath`,`link`,`linkReference`,`mdxJsxTextElement`,`mdxTextExpression`,`strong`,`text`,`textDirective`]);function YF(e,t,n,r){return(e.children.some(function(e){return JF(e)})?n.containerPhrasing:n.containerFlow).call(n,e,r)}function XF(e){let t=e.options.strong||`*`;if(t!==`*`&&t!==`_`)throw Error("Cannot serialize strong with `"+t+"` for `options.strong`, expected `*`, or `_`");return t}ZF.peek=QF;function ZF(e,t,n,r){let i=XF(n),a=n.enter(`strong`),o=n.createTracker(r),s=o.move(i+i),c=o.move(n.containerPhrasing(e,{after:i,before:s,...o.current()})),l=c.charCodeAt(0),u=SF(r.before.charCodeAt(r.before.length-1),l,i);u.inside&&(c=xF(l)+c.slice(1));let d=c.charCodeAt(c.length-1),f=SF(r.after.charCodeAt(0),d,i);f.inside&&(c=c.slice(0,-1)+xF(d));let p=o.move(i+i);return a(),n.attentionEncodeSurroundingInfo={after:f.outside,before:u.outside},s+c+p}function QF(e,t,n){return n.options.strong||`*`}function $F(e,t,n,r){return n.safe(e.value,r)}function eI(e){let t=e.options.ruleRepetition||3;if(t<3)throw Error("Cannot serialize rules with repetition `"+t+"` for `options.ruleRepetition`, expected `3` or more");return t}function tI(e,t,n){let r=(UF(n)+(n.options.ruleSpaces?` `:``)).repeat(eI(n));return n.options.ruleSpaces?r.slice(0,-1):r}var nI={blockquote:cF,break:fF,code:gF,definition:yF,emphasis:CF,hardBreak:fF,heading:EF,html:DF,image:kF,imageReference:jF,inlineCode:NF,link:IF,linkReference:RF,list:WF,listItem:KF,paragraph:qF,root:YF,strong:ZF,text:$F,thematicBreak:tI};function rI(){return{enter:{table:iI,tableData:cI,tableHeader:cI,tableRow:oI},exit:{codeText:lI,table:aI,tableData:sI,tableHeader:sI,tableRow:sI}}}function iI(e){let t=e._align;this.enter({type:`table`,align:t.map(function(e){return e===`none`?null:e}),children:[]},e),this.data.inTable=!0}function aI(e){this.exit(e),this.data.inTable=void 0}function oI(e){this.enter({type:`tableRow`,children:[]},e)}function sI(e){this.exit(e)}function cI(e){this.enter({type:`tableCell`,children:[]},e)}function lI(e){let t=this.resume();this.data.inTable&&(t=t.replace(/\\([\\|])/g,uI));let n=this.stack[this.stack.length-1];n.type,n.value=t,this.exit(e)}function uI(e,t){return t===`|`?t:e}function dI(e){let t=e||{},n=t.tableCellPadding,r=t.tablePipeAlign,i=t.stringLength,a=n?` `:`|`;return{unsafe:[{character:`\r`,inConstruct:`tableCell`},{character:`
-`,inConstruct:`tableCell`},{atBreak:!0,character:`|`,after:`[ :-]`},{character:`|`,inConstruct:`tableCell`},{atBreak:!0,character:`:`,after:`-`},{atBreak:!0,character:`-`,after:`[:|-]`}],handlers:{inlineCode:f,table:o,tableCell:c,tableRow:s}};function o(e,t,n,r){return l(u(e,n,r),e.align)}function s(e,t,n,r){let i=l([d(e,n,r)]);return i.slice(0,i.indexOf(`
-`))}function c(e,t,n,r){let i=n.enter(`tableCell`),o=n.enter(`phrasing`),s=n.containerPhrasing(e,{...r,before:a,after:a});return o(),i(),s}function l(e,t){return aF(e,{align:t,alignDelimiters:r,padding:n,stringLength:i})}function u(e,t,n){let r=e.children,i=-1,a=[],o=t.enter(`table`);for(;++i0&&!n&&(e[e.length-1][1]._gfmAutolinkLiteralWalkedInto=!0),n}var UI={tokenize:ZI,partial:!0};function WI(){return{document:{91:{name:`gfmFootnoteDefinition`,tokenize:JI,continuation:{tokenize:YI},exit:XI}},text:{91:{name:`gfmFootnoteCall`,tokenize:qI},93:{name:`gfmPotentialFootnoteCall`,add:`after`,tokenize:GI,resolveTo:KI}}}}function GI(e,t,n){let r=this,i=r.events.length,a=r.parser.gfmFootnotes||(r.parser.gfmFootnotes=[]),o;for(;i--;){let e=r.events[i][1];if(e.type===`labelImage`){o=e;break}if(e.type===`gfmFootnoteCall`||e.type===`labelLink`||e.type===`label`||e.type===`image`||e.type===`link`)break}return s;function s(i){if(!o||!o._balanced)return n(i);let s=bk(r.sliceSerialize({start:o.end,end:r.now()}));return s.codePointAt(0)!==94||!a.includes(s.slice(1))?n(i):(e.enter(`gfmFootnoteCallLabelMarker`),e.consume(i),e.exit(`gfmFootnoteCallLabelMarker`),t(i))}}function KI(e,t){let n=e.length;for(;n--;)if(e[n][1].type===`labelImage`&&e[n][0]===`enter`){e[n][1];break}e[n+1][1].type=`data`,e[n+3][1].type=`gfmFootnoteCallLabelMarker`;let r={type:`gfmFootnoteCall`,start:Object.assign({},e[n+3][1].start),end:Object.assign({},e[e.length-1][1].end)},i={type:`gfmFootnoteCallMarker`,start:Object.assign({},e[n+3][1].end),end:Object.assign({},e[n+3][1].end)};i.end.column++,i.end.offset++,i.end._bufferIndex++;let a={type:`gfmFootnoteCallString`,start:Object.assign({},i.end),end:Object.assign({},e[e.length-1][1].start)},o={type:`chunkString`,contentType:`string`,start:Object.assign({},a.start),end:Object.assign({},a.end)},s=[e[n+1],e[n+2],[`enter`,r,t],e[n+3],e[n+4],[`enter`,i,t],[`exit`,i,t],[`enter`,a,t],[`enter`,o,t],[`exit`,o,t],[`exit`,a,t],e[e.length-2],e[e.length-1],[`exit`,r,t]];return e.splice(n,e.length-n+1,...s),e}function qI(e,t,n){let r=this,i=r.parser.gfmFootnotes||(r.parser.gfmFootnotes=[]),a=0,o;return s;function s(t){return e.enter(`gfmFootnoteCall`),e.enter(`gfmFootnoteCallLabelMarker`),e.consume(t),e.exit(`gfmFootnoteCallLabelMarker`),c}function c(t){return t===94?(e.enter(`gfmFootnoteCallMarker`),e.consume(t),e.exit(`gfmFootnoteCallMarker`),e.enter(`gfmFootnoteCallString`),e.enter(`chunkString`).contentType=`string`,l):n(t)}function l(s){if(a>999||s===93&&!o||s===null||s===91||kk(s))return n(s);if(s===93){e.exit(`chunkString`);let a=e.exit(`gfmFootnoteCallString`);return i.includes(bk(r.sliceSerialize(a)))?(e.enter(`gfmFootnoteCallLabelMarker`),e.consume(s),e.exit(`gfmFootnoteCallLabelMarker`),e.exit(`gfmFootnoteCall`),t):n(s)}return kk(s)||(o=!0),a++,e.consume(s),s===92?u:l}function u(t){return t===91||t===92||t===93?(e.consume(t),a++,l):l(t)}}function JI(e,t,n){let r=this,i=r.parser.gfmFootnotes||(r.parser.gfmFootnotes=[]),a,o=0,s;return c;function c(t){return e.enter(`gfmFootnoteDefinition`)._container=!0,e.enter(`gfmFootnoteDefinitionLabel`),e.enter(`gfmFootnoteDefinitionLabelMarker`),e.consume(t),e.exit(`gfmFootnoteDefinitionLabelMarker`),l}function l(t){return t===94?(e.enter(`gfmFootnoteDefinitionMarker`),e.consume(t),e.exit(`gfmFootnoteDefinitionMarker`),e.enter(`gfmFootnoteDefinitionLabelString`),e.enter(`chunkString`).contentType=`string`,u):n(t)}function u(t){if(o>999||t===93&&!s||t===null||t===91||kk(t))return n(t);if(t===93){e.exit(`chunkString`);let n=e.exit(`gfmFootnoteDefinitionLabelString`);return a=bk(r.sliceSerialize(n)),e.enter(`gfmFootnoteDefinitionLabelMarker`),e.consume(t),e.exit(`gfmFootnoteDefinitionLabelMarker`),e.exit(`gfmFootnoteDefinitionLabel`),f}return kk(t)||(s=!0),o++,e.consume(t),t===92?d:u}function d(t){return t===91||t===92||t===93?(e.consume(t),o++,u):u(t)}function f(t){return t===58?(e.enter(`definitionMarker`),e.consume(t),e.exit(`definitionMarker`),i.includes(a)||i.push(a),Fk(e,p,`gfmFootnoteDefinitionWhitespace`)):n(t)}function p(e){return t(e)}}function YI(e,t,n){return e.check(Xk,t,e.attempt(UI,t,n))}function XI(e){e.exit(`gfmFootnoteDefinition`)}function ZI(e,t,n){let r=this;return Fk(e,i,`gfmFootnoteDefinitionIndent`,5);function i(e){let i=r.events[r.events.length-1];return i&&i[1].type===`gfmFootnoteDefinitionIndent`&&i[2].sliceSerialize(i[1],!0).length===4?t(e):n(e)}}function QI(e){let t=(e||{}).singleTilde,n={name:`strikethrough`,tokenize:i,resolveAll:r};return t??=!0,{text:{126:n},insideSpan:{null:[n]},attentionMarkers:{null:[126]}};function r(e,t){let n=-1;for(;++n1?r(a):(e.consume(a),o++,c);if(o<2&&!t)return r(a);let l=e.exit(`strikethroughSequenceTemporary`),u=Hk(a);return l._open=!u||u===2&&!!s,l._close=!s||s===2&&!!u,n(a)}}}var $I=class{constructor(){this.map=[]}add(e,t,n){eL(this,e,t,n)}consume(e){if(this.map.sort(function(e,t){return e[0]-t[0]}),this.map.length===0)return;let t=this.map.length,n=[];for(;t>0;)--t,n.push(e.slice(this.map[t][0]+this.map[t][1]),this.map[t][2]),e.length=this.map[t][0];n.push(e.slice()),e.length=0;let r=n.pop();for(;r;){for(let t of r)e.push(t);r=n.pop()}this.map.length=0}};function eL(e,t,n,r){let i=0;if(n!==0||r.length!==0){for(;i-1;){let e=r.events[t][1].type;if(e===`lineEnding`||e===`linePrefix`)t--;else break}let i=t>-1?r.events[t][1].type:null,a=i===`tableHead`||i===`tableRow`?S:c;return a===S&&r.parser.lazy[r.now().line]?n(e):a(e)}function c(t){return e.enter(`tableHead`),e.enter(`tableRow`),l(t)}function l(e){return e===124?u(e):(o=!0,a+=1,u(e))}function u(t){return t===null?n(t):Ok(t)?a>1?(a=0,r.interrupt=!0,e.exit(`tableRow`),e.enter(`lineEnding`),e.consume(t),e.exit(`lineEnding`),p):n(t):Ak(t)?Fk(e,u,`whitespace`)(t):(a+=1,o&&(o=!1,i+=1),t===124?(e.enter(`tableCellDivider`),e.consume(t),e.exit(`tableCellDivider`),o=!0,u):(e.enter(`data`),d(t)))}function d(t){return t===null||t===124||kk(t)?(e.exit(`data`),u(t)):(e.consume(t),t===92?f:d)}function f(t){return t===92||t===124?(e.consume(t),d):d(t)}function p(t){return r.interrupt=!1,r.parser.lazy[r.now().line]?n(t):(e.enter(`tableDelimiterRow`),o=!1,Ak(t)?Fk(e,m,`linePrefix`,r.parser.constructs.disable.null.includes(`codeIndented`)?void 0:4)(t):m(t))}function m(t){return t===45||t===58?g(t):t===124?(o=!0,e.enter(`tableCellDivider`),e.consume(t),e.exit(`tableCellDivider`),h):x(t)}function h(t){return Ak(t)?Fk(e,g,`whitespace`)(t):g(t)}function g(t){return t===58?(a+=1,o=!0,e.enter(`tableDelimiterMarker`),e.consume(t),e.exit(`tableDelimiterMarker`),_):t===45?(a+=1,_(t)):t===null||Ok(t)?b(t):x(t)}function _(t){return t===45?(e.enter(`tableDelimiterFiller`),v(t)):x(t)}function v(t){return t===45?(e.consume(t),v):t===58?(o=!0,e.exit(`tableDelimiterFiller`),e.enter(`tableDelimiterMarker`),e.consume(t),e.exit(`tableDelimiterMarker`),y):(e.exit(`tableDelimiterFiller`),y(t))}function y(t){return Ak(t)?Fk(e,b,`whitespace`)(t):b(t)}function b(n){return n===124?m(n):n===null||Ok(n)?!o||i!==a?x(n):(e.exit(`tableDelimiterRow`),e.exit(`tableHead`),t(n)):x(n)}function x(e){return n(e)}function S(t){return e.enter(`tableRow`),C(t)}function C(n){return n===124?(e.enter(`tableCellDivider`),e.consume(n),e.exit(`tableCellDivider`),C):n===null||Ok(n)?(e.exit(`tableRow`),t(n)):Ak(n)?Fk(e,C,`whitespace`)(n):(e.enter(`data`),w(n))}function w(t){return t===null||t===124||kk(t)?(e.exit(`data`),C(t)):(e.consume(t),t===92?T:w)}function T(t){return t===92||t===124?(e.consume(t),w):w(t)}}function iL(e,t){let n=-1,r=!0,i=0,a=[0,0,0,0],o=[0,0,0,0],s=!1,c=0,l,u,d,f=new $I;for(;++nn[2]+1){let t=n[2]+1,r=n[3]-n[2]-1;e.add(t,r,[])}}e.add(n[3]+1,0,[[`exit`,o,t]])}return i!==void 0&&(a.end=Object.assign({},sL(t.events,i)),e.add(i,0,[[`exit`,a,t]]),a=void 0),a}function oL(e,t,n,r,i){let a=[],o=sL(t.events,n);i&&(i.end=Object.assign({},o),a.push([`exit`,i,t])),r.end=Object.assign({},o),a.push([`exit`,r,t]),e.add(n+1,0,a)}function sL(e,t){let n=e[t],r=n[0]===`enter`?`start`:`end`;return n[1][r]}var cL={name:`tasklistCheck`,tokenize:uL};function lL(){return{text:{91:cL}}}function uL(e,t,n){let r=this;return i;function i(t){return r.previous!==null||!r._gfmTasklistFirstContentOfListItem?n(t):(e.enter(`taskListCheck`),e.enter(`taskListCheckMarker`),e.consume(t),e.exit(`taskListCheckMarker`),a)}function a(t){return kk(t)?(e.enter(`taskListCheckValueUnchecked`),e.consume(t),e.exit(`taskListCheckValueUnchecked`),o):t===88||t===120?(e.enter(`taskListCheckValueChecked`),e.consume(t),e.exit(`taskListCheckValueChecked`),o):n(t)}function o(t){return t===93?(e.enter(`taskListCheckMarker`),e.consume(t),e.exit(`taskListCheckMarker`),e.exit(`taskListCheck`),s):n(t)}function s(r){return Ok(r)?t(r):Ak(r)?e.check({tokenize:dL},t,n)(r):n(r)}}function dL(e,t,n){return Fk(e,r,`whitespace`);function r(e){return e===null?n(e):t(e)}}function fL(e){return gk([OI(),WI(),QI(e),nL(),lL()])}var pL={};function mL(e){let t=this,n=e||pL,r=t.data(),i=r.micromarkExtensions||=[],a=r.fromMarkdownExtensions||=[],o=r.toMarkdownExtensions||=[];i.push(fL(n)),a.push(_I()),o.push(vI(n))}function hL(e){let t=e.match(/^---\r?\n([\s\S]*?)\r?\n---(?:\r?\n|$)/);return t?{frontmatter:t[1].trim(),markdown:e.slice(t[0].length)}:{frontmatter:``,markdown:e}}function gL({content:e}){let{frontmatter:t,markdown:n}=hL(e);return(0,K.jsxs)(`div`,{className:`markdown-preview-shell`,children:[t&&(0,K.jsxs)(`details`,{className:`markdown-frontmatter`,children:[(0,K.jsx)(`summary`,{children:`文档元数据`}),(0,K.jsx)(xb,{code:t,language:`yaml`,filename:`frontmatter.yaml`,showLineNumbers:!1,wrap:!0})]}),(0,K.jsx)(`article`,{className:`markdown-preview`,children:(0,K.jsx)(uP,{remarkPlugins:[mL],components:{pre:({children:e})=>(0,K.jsx)(K.Fragment,{children:e}),code:({className:e,children:t,...n})=>{let r=/language-([\w-]+)/.exec(e||``)?.[1];return r?(0,K.jsx)(xb,{code:String(t).replace(/\n$/,``),language:r,showLineNumbers:!1}):(0,K.jsx)(`code`,{className:e,...n,children:t})},table:({children:e,...t})=>(0,K.jsx)(`div`,{className:`markdown-table-scroll`,children:(0,K.jsx)(`table`,{...t,children:e})}),a:({children:e,...t})=>(0,K.jsx)(`a`,{...t,target:`_blank`,rel:`noreferrer noopener`,children:e})},children:n})})]})}function _L(e){let t=Number(e||0);return t<1024?`${t} B`:t<1048576?`${(t/1024).toFixed(1)} KiB`:`${(t/1024/1024).toFixed(1)} MiB`}async function vL(e,t){let n=await e.text().catch(()=>``);try{return JSON.parse(n)?.error?.message||`${t}(${e.status})`}catch{return`${t}(${e.status})`}}function yL(e){return{bash:`bash`,c:`c`,cpp:`cpp`,css:`css`,go:`go`,h:`c`,html:`markup`,java:`java`,js:`javascript`,json:`json`,jsx:`jsx`,md:`markdown`,mjs:`javascript`,py:`python`,rs:`rust`,sh:`bash`,toml:`toml`,ts:`typescript`,tsx:`tsx`,xml:`markup`,yaml:`yaml`,yml:`yaml`}[e.split(`.`).pop()?.toLowerCase()||``]||`text`}function bL(e){let t={name:``,path:``,directory:!0,children:[]};for(let n of e){let e=n.path.split(`/`).filter(Boolean),r=t;e.forEach((t,i)=>{let a=e.slice(0,i+1).join(`/`),o=ie.name===t&&e.directory===o);s||(s={name:t,path:a,directory:o,file:o?void 0:n,children:[]},r.children.push(s)),r=s})}let n=e=>{e.sort((e,t)=>Number(t.directory)-Number(e.directory)||e.name.localeCompare(t.name)),e.forEach(e=>n(e.children))};return n(t.children),t.children}function xL({files:e,selected:t,onSelect:n}){let r=(0,s.useMemo)(()=>bL(e),[e]),[i,a]=(0,s.useState)(new Set),o=(e,r=0)=>e.map(e=>{let s={"--skill-depth":r};if(e.directory){let t=i.has(e.path);return(0,K.jsxs)(`div`,{role:`none`,children:[(0,K.jsxs)(`button`,{className:`skill-tree-row directory`,type:`button`,role:`treeitem`,style:s,"aria-expanded":!t,onClick:()=>a(t=>{let n=new Set(t);return n.has(e.path)?n.delete(e.path):n.add(e.path),n}),children:[t?(0,K.jsx)(H,{size:13}):(0,K.jsx)(B,{size:13}),(0,K.jsx)(xe,{size:14}),(0,K.jsx)(`span`,{title:e.name,children:e.name})]}),!t&&(0,K.jsx)(`div`,{role:`group`,children:o(e.children,r+1)})]},`dir:${e.path}`)}let c=e.file?.kind===`script`?ve:ye;return(0,K.jsxs)(`button`,{className:`skill-tree-row file${t===e.path?` active`:``}`,type:`button`,role:`treeitem`,"aria-selected":t===e.path,style:s,onClick:()=>n(e.path),children:[(0,K.jsx)(`span`,{className:`skill-tree-spacer`}),(0,K.jsx)(c,{size:14}),(0,K.jsx)(`span`,{title:e.path,children:e.name})]},`file:${e.path}`)});return(0,K.jsx)(`div`,{className:`skill-file-tree`,role:`tree`,"aria-label":`Skill 文件树`,children:o(r)})}function SL({title:e,endpoint:t,onClose:n}){let[r,i]=(0,s.useState)([]),[a,o]=(0,s.useState)(``),[c,l]=(0,s.useState)(null),[u,d]=(0,s.useState)(!0),[f,p]=(0,s.useState)(!1),[m,h]=(0,s.useState)(``),[_,v]=(0,s.useState)(``),y=(0,s.useRef)(0);return(0,s.useEffect)(()=>{let e=new AbortController;return d(!0),h(``),i([]),o(``),l(null),g(t,{signal:e.signal}).then(async e=>{if(!e.ok)throw Error(await vL(e,`Skill 文件读取失败`));return e.json()}).then(e=>{let t=e.files||[];i(t),o(t.find(e=>e.path===`SKILL.md`)?.path||t[0]?.path||``)}).catch(e=>{e?.name!==`AbortError`&&h(e.message||`Skill 文件读取失败`)}).finally(()=>{e.signal.aborted||d(!1)}),()=>e.abort()},[t]),(0,s.useEffect)(()=>{if(!a){l(null),p(!1);return}let e=new AbortController,n=++y.current;return l(null),p(!0),v(``),g(`${t}?${new URLSearchParams({path:a})}`,{signal:e.signal}).then(async e=>{if(!e.ok)throw Error(await vL(e,`Skill 文件读取失败`));return e.json()}).then(e=>{y.current===n&&l(e)}).catch(e=>{e?.name!==`AbortError`&&y.current===n&&v(e.message||`Skill 文件读取失败`)}).finally(()=>{!e.signal.aborted&&y.current===n&&p(!1)}),()=>e.abort()},[t,a]),(0,K.jsx)(DD,{title:`${e} · 文件`,subtitle:`${r.length} 个文件;只读预览,不会执行脚本。`,wide:!0,onClose:n,children:(0,K.jsxs)(`div`,{className:`skill-preview-layout`,children:[(0,K.jsxs)(`aside`,{className:`skill-preview-sidebar`,children:[u&&(0,K.jsx)(`div`,{className:`skill-file-state`,children:`正在读取目录…`}),!u&&m&&(0,K.jsx)(OD,{kind:`error`,title:`无法读取 Skill 文件`,message:m}),!u&&!m&&r.length===0&&(0,K.jsx)(`div`,{className:`skill-file-state`,children:`Skill 中没有可预览的文件。`}),!u&&!m&&r.length>0&&(0,K.jsx)(xL,{files:r,selected:a,onSelect:o})]}),(0,K.jsxs)(`section`,{className:`skill-preview-pane`,"aria-live":`polite`,children:[(c||a)&&(0,K.jsxs)(`header`,{className:`skill-preview-header`,children:[(0,K.jsx)(`strong`,{title:c?.path||a,children:c?.path||a}),c&&(0,K.jsxs)(`span`,{children:[c.kind,` · `,_L(c.size||0)]})]}),(0,K.jsxs)(`div`,{className:`skill-preview-content`,children:[f&&(0,K.jsx)(`div`,{className:`skill-file-state`,children:`正在读取文件…`}),!f&&_&&(0,K.jsx)(OD,{kind:`error`,title:`无法预览文件`,message:_}),!f&&!_&&c?.kind===`markdown`&&(0,K.jsx)(gL,{content:c.content||``}),!f&&!_&&[`script`,`text`].includes(c?.kind||``)&&(0,K.jsx)(xb,{code:c?.content||``,language:yL(c?.path||a),filename:c?.path||a,showLineNumbers:!0}),!f&&!_&&c?.kind===`binary`&&(0,K.jsx)(`div`,{className:`skill-file-state`,children:`二进制文件不提供内容预览。`}),!f&&!_&&!c&&!a&&(0,K.jsx)(`div`,{className:`skill-file-state`,children:`选择一个文件查看内容。`})]}),c?.truncated&&(0,K.jsx)(`div`,{className:`skill-preview-truncated`,children:`文件较大,仅显示前 512 KiB。`})]})]})})}var CL=new Map([[`avif`,`image/avif`],[`bmp`,`image/bmp`],[`css`,`text/css`],[`csv`,`text/csv`],[`doc`,`application/msword`],[`docx`,`application/vnd.openxmlformats-officedocument.wordprocessingml.document`],[`gif`,`image/gif`],[`gz`,`application/gzip`],[`htm`,`text/html`],[`html`,`text/html`],[`ico`,`image/x-icon`],[`jpeg`,`image/jpeg`],[`jpg`,`image/jpeg`],[`js`,`application/javascript`],[`json`,`application/json`],[`md`,`text/markdown`],[`mjs`,`application/javascript`],[`mp3`,`audio/mpeg`],[`mp4`,`video/mp4`],[`ogg`,`audio/ogg`],[`pdf`,`application/pdf`],[`png`,`image/png`],[`ppt`,`application/powerpoint`],[`pptx`,`application/vnd.openxmlformats-officedocument.presentationml.presentation`],[`svg`,`image/svg+xml`],[`tif`,`image/tiff`],[`tiff`,`image/tiff`],[`txt`,`text/plain`],[`wasm`,`application/wasm`],[`wav`,`audio/x-wav`],[`weba`,`audio/webm`],[`webm`,`video/webm`],[`webp`,`image/webp`],[`xls`,`application/vnd.ms-excel`],[`xlsx`,`application/vnd.openxmlformats-officedocument.spreadsheetml.sheet`],[`xml`,`application/xml`],[`zip`,`application/zip`]]),wL=class extends Error{constructor(e){super(`DataTransferItem is not a file`),this.item=e,this.name=`UnexpectedObjectError`}};function TL(e,t,n){let r=e,{webkitRelativePath:i}=e,a=typeof t==`string`?t:typeof i==`string`&&i.length>0?i:`./${e.name}`;return typeof r.path!=`string`&&DL(r,`path`,a),n!==void 0&&Object.defineProperty(r,"handle",{value:n,writable:!1,configurable:!1,enumerable:!0}),DL(r,`relativePath`,a),r}function EL(e,t=CL){let{name:n}=e;if(n&&n.lastIndexOf(`.`)!==-1&&!e.type){let r=n.split(`.`).pop().toLowerCase(),i=t.get(r);i&&Object.defineProperty(e,"type",{value:i,writable:!1,configurable:!1,enumerable:!0})}return e}function DL(e,t,n){Object.defineProperty(e,t,{value:n,writable:!1,configurable:!1,enumerable:!0})}var OL=[`.DS_Store`,`Thumbs.db`];async function kL(e,{mimeTypes:t=CL}={}){return(await AL(e)).map(e=>e instanceof File?EL(e,t):e)}async function AL(e){return PL(e)&&jL(e.dataTransfer)?LL(e.dataTransfer,e.type):ML(e)?RL(e.clipboardData):NL(e)?FL(e):Array.isArray(e)&&e.every(e=>`getFile`in e&&typeof e.getFile==`function`)?IL(e):[]}function jL(e){return PL(e)}function ML(e){return PL(e)&&jL(e.clipboardData)}function NL(e){return PL(e)&&PL(e.target)}function PL(e){return typeof e==`object`&&!!e}function FL(e){return BL(e.target.files).map(e=>TL(e))}async function IL(e){return(await Promise.all(e.map(e=>e.getFile()))).map(e=>TL(e))}async function LL(e,t){let n=BL(e.items).filter(e=>e.kind===`file`);return t===`drop`?zL(HL(await Promise.all(n.map(VL)))):n}function RL(e){let t=BL(e.items).filter(e=>e.kind===`file`).map(e=>e.getAsFile()).filter(e=>e!==null);return zL((t.length>0?t:BL(e.files)).map(e=>TL(e)))}function zL(e){return e.filter(e=>OL.indexOf(e.name)===-1)}function BL(e){return e===null?[]:Array.from(e)}async function VL(e){if(typeof e.webkitGetAsEntry!=`function`)return UL(e);let t=e.webkitGetAsEntry();if(t?.isDirectory){let n=await WL(e);return n?.kind===`directory`?GL(n,`/${n.name}`):qL(t)}return UL(e,t)}function HL(e){let t=[];for(let n of e)Array.isArray(n)?t.push(...HL(n)):t.push(n);return t}async function UL(e,t){let n=e.getAsFile(),r=await WL(e);if(r!=null){let e=n??await r.getFile();return e.handle=r,TL(e)}if(!n)throw new wL(e);return TL(n,t?.fullPath??void 0)}async function WL(e){if(globalThis.isSecureContext&&typeof e.getAsFileSystemHandle==`function`)return e.getAsFileSystemHandle()}async function GL(e,t){let n=[];for await(let r of e.values()){let e=`${t}/${r.name}`;if(r.kind===`directory`)n.push(...await GL(r,e));else{let t=await r.getFile();n.push(TL(t,e,r))}}return n}async function KL(e){return e.isDirectory?qL(e):JL(e)}function qL(e){let t=e.createReader();return new Promise((e,n)=>{let r=[];function i(){t.readEntries(async t=>{if(t.length){let e=Promise.all(t.map(KL));r.push(e),i()}else try{e(await Promise.all(r))}catch(e){n(e)}},e=>{n(e)})}i()})}async function JL(e){return new Promise((t,n)=>{e.file(n=>{t(TL(n,e.fullPath))},e=>{n(e)})})}var YL=t(n((e=>{e.__esModule=!0,e.default=function(e,t){if(e&&t){var n=Array.isArray(t)?t:t.split(`,`);if(n.length===0)return!0;var r=e.name||``,i=(e.type||``).toLowerCase(),a=i.replace(/\/.*$/,``);return n.some(function(e){var t=e.trim().toLowerCase();return t.charAt(0)===`.`?r.toLowerCase().endsWith(t):t.endsWith(`/*`)?a===t.replace(/\/.*$/,``):i===t})}return!0}}))(),1),XL=typeof YL.default==`function`?YL.default:YL.default.default,ZL=`file-invalid-type`,QL=`file-too-large`,$L=`file-too-small`,eR=`too-many-files`;function tR(e=``){let t=e.split(`,`);return{code:ZL,message:`File type must be ${t.length>1?`one of ${t.join(`, `)}`:t[0]}`}}var nR=[`KB`,`MB`,`GB`,`TB`,`PB`];function rR(e){if(e<1024)return`${e} ${e===1?`byte`:`bytes`}`;let t=e/1024,n=0;for(;t>=1024&&nn)return[!1,iR(n)];if(e.sizen)return[!1,iR(n)]}return[!0,null]}function uR(e){return e!=null}function dR(e){return e!=null&&typeof e.then==`function`}function fR({files:e,accept:t,minSize:n,maxSize:r,multiple:i,maxFiles:a=0,validator:o,getErrorMessage:s}){let c=[],l=[],u=(e,t)=>s&&typeof File<`u`&&t instanceof File?{...e,message:s(e,t)}:e;e.forEach(e=>{let[i,a]=cR(e,t),[o,s]=lR(e,n,r);i&&o?c.push(e):l.push({file:e,errors:[a,s].filter(e=>e!=null).map(t=>u(t,e))})});let d=i?a>=1?a:1/0:1;return c.length>d&&c.slice(d).forEach(e=>{l.push({file:e,errors:[u(oR,e)]})}),l.length>0?{verdict:`reject`,rejections:l}:{verdict:o?`unknown`:`accept`,rejections:l}}function pR(e){return typeof e.isPropagationStopped==`function`?e.isPropagationStopped():e.cancelBubble!==void 0&&e.cancelBubble}function mR(e){let t=e.dataTransfer??e.clipboardData;return t?Array.prototype.some.call(t.types,e=>e===`Files`||e===`application/x-moz-file`)||Array.prototype.some.call(t.items??[],hR):!!e.target&&!!e.target.files}function hR(e){return typeof e==`object`&&!!e&&e.kind===`file`}function gR(e){e.preventDefault()}function _R(e){return e.indexOf(`MSIE`)!==-1||e.indexOf(`Trident/`)!==-1}function vR(e){return e.indexOf(`Edge/`)!==-1}function yR(e=window.navigator.userAgent){return _R(e)||vR(e)}function bR(...e){return(t,...n)=>e.some(e=>(!pR(t)&&e&&e(t,...n),pR(t)))}function xR(){return`showOpenFilePicker`in window}function SR(e){return Array.isArray(e)?e:typeof e==`string`?[e]:[]}function CR(e){if(uR(e))return Array.isArray(e)?e.filter(e=>uR(e)&&uR(e.accept)):[{accept:e}]}function wR(e){let t=[],n=Object.keys(e);for(let n of Object.values(e))for(let e of SR(n))t.includes(e)||t.push(e);return t.length>0?t.join(`, `):n.length>0?n.join(`, `):`Files`}function TR(e){let t=CR(e);if(!uR(t))return;let n={};for(let e of t)for(let[t,r]of Object.entries(e.accept)){let e=n[t]??(n[t]=[]);for(let t of SR(r))e.includes(t)||e.push(t)}return n}function ER(e){let t=CR(e);if(!uR(t))return;let n=t.map(e=>{let t=Object.entries(e.accept).filter(([e,t])=>{let n=!0;return jR(e)||(console.warn(`Skipped "${e}" because it is not a valid MIME type. Check https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types for a list of valid MIME types.`),n=!1),(!(Array.isArray(t)||typeof t==`string`)||!SR(t).every(NR))&&(console.warn(`Skipped "${e}" because an invalid file extension was provided.`),n=!1),n}).reduce((e,[t,n])=>(e[t]=SR(n),e),{});return{description:uR(e.description)&&e.description!==``?e.description:wR(t),accept:t}}).filter(e=>Object.keys(e.accept).length>0);return n.length>0?n:void 0}function DR(e,{omitWildcardMimeTypesWithExtensions:t=!1}={}){if(uR(e))return Object.entries(e).reduce((e,[n,r])=>{let i=SR(r);return t&&MR(n)&&i.some(NR)?e.push(...i):e.push(n,...i),e},[]).filter(e=>jR(e)||NR(e)).join(`,`)}function OR(e){return e instanceof DOMException&&(e.name===`AbortError`||e.code===e.ABORT_ERR)}function kR(e){return e instanceof DOMException&&(e.name===`SecurityError`||e.code===e.SECURITY_ERR)}function AR(e){return e instanceof DOMException&&e.name===`NotAllowedError`}function jR(e){return e===`audio/*`||e===`video/*`||e===`image/*`||e===`text/*`||e===`application/*`||/\w+\/[-+.\w]+/g.test(e)}function MR(e){return e.endsWith(`/*`)}function NR(e){return/^.*\.[\w]+$/.test(e)}var PR=(0,s.forwardRef)(({children:e,...t},n)=>{let{open:r,...i}=IR(t);return(0,s.useImperativeHandle)(n,()=>({open:r}),[r]),(0,K.jsx)(K.Fragment,{children:e?.({...i,open:r})})});PR.displayName=`Dropzone`;var FR={isFocused:!1,isFileDialogActive:!1,isDragActive:!1,isDragAccept:!1,isDragReject:!1,isDragUnknown:!1,isDragGlobal:!1,isProcessing:!1,acceptedFiles:[],fileRejections:[],dragFileRejections:[]};function IR(e={}){let{accept:t,disabled:n=!1,getFilesFromEvent:r=kL,maxSize:i=1/0,minSize:a=0,multiple:o=!0,maxFiles:c=0,onDragEnter:l,onDragLeave:u,onDragOver:d,onDrop:f,onDropAccepted:p,onDropRejected:m,onFileDialogCancel:h,onFileDialogOpen:g,useFsAccessApi:_=!1,autoFocus:v=!1,preventDropOnDocument:y=!0,noClick:b=!1,noKeyboard:x=!1,noDrag:S=!1,noDragEventsBubbling:C=!1,noPaste:w=!1,onError:T,validator:E,getErrorMessage:D}=e,O=(0,s.useMemo)(()=>TR(t),[t]),k=(0,s.useMemo)(()=>DR(O),[O]),A=(0,s.useMemo)(()=>DR(O,{omitWildcardMimeTypesWithExtensions:!0}),[O]),j=(0,s.useMemo)(()=>ER(t),[t]),M=(0,s.useMemo)(()=>typeof g==`function`?g:RR,[g]),N=(0,s.useMemo)(()=>typeof h==`function`?h:RR,[h]),P=(0,s.useRef)(null),F=(0,s.useRef)(null),[I,L]=(0,s.useReducer)(LR,FR),{isFocused:R,isFileDialogActive:z}=I,B=(0,s.useRef)(z);B.current=z;let V=(0,s.useRef)(null),H=(0,s.useCallback)(()=>{V.current?.abort();let e=new AbortController;return V.current=e,L({type:`setProcessing`,isProcessing:!0}),e.signal},[]),ee=(0,s.useCallback)(e=>{e.aborted||L({type:`setProcessing`,isProcessing:!1})},[]),U=(0,s.useRef)(typeof window<`u`&&window.isSecureContext&&_&&xR()),te=()=>{!U.current&&z&&setTimeout(()=>{if(F.current){let{files:e}=F.current;e?.length||(L({type:`closeDialog`}),N())}},300)};(0,s.useEffect)(()=>(window.addEventListener(`focus`,te,!1),()=>{window.removeEventListener(`focus`,te,!1)}),[F,z,N,U]);let W=(0,s.useRef)([]),ne=(0,s.useRef)([]),re=e=>{P.current&&e.target&&P.current.contains(e.target)&&e.defaultPrevented||(e.preventDefault(),W.current=[])};(0,s.useEffect)(()=>(y&&(document.addEventListener(`dragover`,gR,!1),document.addEventListener(`drop`,re,!1)),()=>{y&&(document.removeEventListener(`dragover`,gR),document.removeEventListener(`drop`,re))}),[P,y]),(0,s.useEffect)(()=>{let e=e=>{e.target&&(ne.current=[...ne.current,e.target]),mR(e)&&L({isDragGlobal:!0,type:`setDragGlobal`})},t=e=>{ne.current=ne.current.filter(t=>t!==e.target&&t!==null),!(ne.current.length>0)&&L({isDragGlobal:!1,type:`setDragGlobal`})},n=()=>{ne.current=[],L({isDragGlobal:!1,type:`setDragGlobal`})},r=()=>{ne.current=[],L({isDragGlobal:!1,type:`setDragGlobal`})};return document.addEventListener(`dragenter`,e,!1),document.addEventListener(`dragleave`,t,!1),document.addEventListener(`dragend`,n,!1),document.addEventListener(`drop`,r,!1),()=>{document.removeEventListener(`dragenter`,e),document.removeEventListener(`dragleave`,t),document.removeEventListener(`dragend`,n),document.removeEventListener(`drop`,r)}},[P]),(0,s.useEffect)(()=>(!n&&v&&P.current&&P.current.focus(),()=>{}),[P,v,n]);let G=(0,s.useCallback)(e=>{T?T(e):console.error(e)},[T]),ie=(0,s.useCallback)(e=>{e.preventDefault(),e.persist?.(),ye(e),!B.current&&(W.current=[...W.current,e.target],mR(e)&&Promise.resolve(r(e)).then(t=>{if(pR(e)&&!C)return;let n=t.length>0?fR({files:t,accept:k,minSize:a,maxSize:i,multiple:o,maxFiles:c,validator:E,getErrorMessage:D}):null;L({isDragAccept:n?.verdict===`accept`,isDragReject:n?.verdict===`reject`,isDragUnknown:n?.verdict===`unknown`,isDragActive:!0,dragFileRejections:n?.rejections??[],type:`setDraggedFiles`}),l&&l(e)}).catch(e=>G(e)))},[r,l,G,C,k,a,i,o,c,E,D]),ae=(0,s.useCallback)(e=>{if(e.preventDefault(),e.persist?.(),ye(e),B.current)return!1;let t=mR(e);if(t&&e.dataTransfer)try{e.dataTransfer.dropEffect=`copy`}catch{}return t&&d&&d(e),!1},[d,C]),oe=(0,s.useCallback)(e=>{e.preventDefault(),e.persist?.(),ye(e);let t=W.current.filter(e=>P.current?.contains(e)),n=t.indexOf(e.target);n!==-1&&t.splice(n,1),W.current=t,!(t.length>0)&&(L({type:`setDraggedFiles`,isDragActive:!1,isDragAccept:!1,isDragReject:!1,isDragUnknown:!1,dragFileRejections:[]}),mR(e)&&u&&u(e))},[P,u,C]),se=(0,s.useCallback)(async(e,t,n)=>{let r=(e,t)=>D?{...e,message:D(e,t)}:e,s=e=>{let n=[],i=[];e.forEach(({file:e,accepted:t,acceptError:a,sizeMatch:o,sizeError:s,customErrors:c})=>{if(t&&o&&!c)n.push(e);else{let t=[a,s];c&&(t=t.concat(c)),i.push({file:e,errors:t.filter(e=>e!=null).map(t=>r(t,e))})}});let a=o?c>=1?c:1/0:1;n.length>a&&n.splice(a).forEach(e=>{i.push({file:e,errors:[r(oR,e)]})}),L({acceptedFiles:n,fileRejections:i,type:`setFiles`}),f&&f(n,i,t),i.length>0&&m&&m(i,t),n.length>0&&p&&p(n,t)},l=e.map(e=>{let[t,n]=cR(e,A),[r,o]=lR(e,a,i);return{file:e,accepted:t,acceptError:n,sizeMatch:r,sizeError:o,customErrors:E?E(e):null}});if(!l.some(({customErrors:e})=>dR(e))){s(l);return}let u;try{u=await Promise.all(l.map(async({customErrors:e,...t})=>({...t,customErrors:await e})))}catch(e){n.aborted||(ee(n),G(e));return}n.aborted||s(u)},[L,o,A,a,i,c,f,p,m,E,D,G,ee]),ce=(0,s.useCallback)(e=>{if(e.preventDefault(),e.persist?.(),ye(e),W.current=[],!(B.current&&e.dataTransfer)&&(L({type:`reset`}),mR(e))){let t=H();Promise.resolve(r(e)).then(n=>{if(!t.aborted){if(pR(e)&&!C){ee(t);return}return se(n,e,t)}}).catch(e=>{t.aborted||(ee(t),G(e))})}},[r,se,G,C,H,ee]),le=(0,s.useCallback)(e=>{if(!mR(e))return;e.preventDefault(),e.persist?.(),ye(e);let t=H();Promise.resolve(r(e)).then(n=>{if(!t.aborted){if(pR(e)&&!C){ee(t);return}return se(n,e,t)}}).catch(e=>{t.aborted||(ee(t),G(e))})},[r,se,G,C,H,ee]),ue=(0,s.useCallback)(()=>{if(U.current){L({type:`openDialog`}),M();let e={multiple:o,types:j},t;window.showOpenFilePicker(e).then(e=>(t=H(),r(e))).then(e=>{if(L({type:`closeDialog`}),!t.aborted)return se(e,null,t)}).catch(e=>{t&&ee(t),OR(e)?(N(e),L({type:`closeDialog`})):kR(e)||AR(e)?(U.current=!1,F.current?(F.current.value=``,F.current.click()):G(Error(`Cannot open the file picker because the https://developer.mozilla.org/en-US/docs/Web/API/File_System_Access_API is not supported and no was provided.`))):G(e)});return}F.current&&(L({type:`openDialog`}),M(),F.current.value=``,F.current.click())},[L,M,N,_,se,G,j,o,H,ee]),de=(0,s.useCallback)(e=>{P.current?.isEqualNode(e.target)&&(e.key===` `||e.key===`Enter`||e.keyCode===32||e.keyCode===13)&&(e.preventDefault(),ue())},[P,ue]),fe=(0,s.useCallback)(()=>{L({type:`focus`})},[]),pe=(0,s.useCallback)(()=>{L({type:`blur`})},[]),me=(0,s.useCallback)(()=>{b||(yR()?setTimeout(ue,0):ue())},[b,ue]),he=e=>n?null:e,ge=e=>x?null:he(e),_e=e=>S?null:he(e),ve=e=>w?null:he(e),ye=e=>{C&&e.stopPropagation()},be=(0,s.useMemo)(()=>({refKey:e=`ref`,role:t,onKeyDown:r,onFocus:i,onBlur:a,onClick:o,onDragEnter:s,onDragOver:c,onDragLeave:l,onDrop:u,onPaste:d,...f}={})=>({onKeyDown:ge(bR(r,de)),onFocus:ge(bR(i,fe)),onBlur:ge(bR(a,pe)),onClick:he(bR(o,me)),onDragEnter:_e(bR(s,ie)),onDragOver:_e(bR(c,ae)),onDragLeave:_e(bR(l,oe)),onDrop:_e(bR(u,ce)),onPaste:ve(bR(d,le)),role:typeof t==`string`&&t!==``?t:`presentation`,[e]:P,...!n&&!x?{tabIndex:0}:{},...n?{"aria-disabled":!0}:{},...f}),[P,de,fe,pe,me,ie,ae,oe,ce,le,x,S,w,n]),xe=(0,s.useCallback)(e=>{e.stopPropagation()},[]),Se=(0,s.useMemo)(()=>({refKey:e=`ref`,onChange:t,onClick:n,...r}={})=>({accept:A,multiple:o,type:`file`,"aria-label":`file upload`,style:{border:0,display:`block`,height:0,margin:0,opacity:0,overflow:`hidden`,padding:0,width:0},onChange:he(bR(t,ce)),onClick:he(bR(n,xe)),tabIndex:-1,[e]:F,...r}),[F,t,o,ce,n]);return{...I,isFocused:R&&!n,getRootProps:be,getInputProps:Se,rootRef:P,inputRef:F,open:he(ue)}}function LR(e,t){switch(t.type){case`focus`:return{...e,isFocused:!0};case`blur`:return{...e,isFocused:!1};case`openDialog`:return{...FR,isFileDialogActive:!0};case`closeDialog`:return{...e,isFileDialogActive:!1};case`setDraggedFiles`:return{...e,isDragActive:t.isDragActive,isDragAccept:t.isDragAccept,isDragReject:t.isDragReject,isDragUnknown:t.isDragUnknown,dragFileRejections:t.dragFileRejections};case`setProcessing`:return{...e,isProcessing:t.isProcessing};case`setFiles`:return{...e,acceptedFiles:t.acceptedFiles,fileRejections:t.fileRejections,dragFileRejections:[],isProcessing:!1,isDragReject:!1,isDragUnknown:!1};case`setDragGlobal`:return{...e,isDragGlobal:t.isDragGlobal};case`reset`:return{...FR};default:return e}}function RR(){}function zR(e){return e<1024?`${e} B`:e<1048576?`${(e/1024).toFixed(+(e<10240))} KiB`:`${(e/1048576).toFixed(1)} MiB`}function BR(e){let t=e.errors[0]?.code;return t===`file-invalid-type`?`文件类型不受支持,请重新选择。`:t===`file-too-large`?`文件超过允许大小,请重新选择。`:t===`too-many-files`?`一次只能选择一个文件。`:e.errors[0]?.message||`文件无法读取,请重新选择。`}function VR({accept:e,maxSize:t,file:n,onFile:r,onError:i,ariaLabel:a=`选择文件`,hint:o=`拖放文件到这里,或点击选择`}){let{getRootProps:s,getInputProps:c,isDragActive:l,isDragReject:u,open:d}=IR({accept:e,maxSize:t,multiple:!1,noClick:!!n,onDropAccepted:e=>{i(``),r(e[0]||null)},onDropRejected:e=>{r(null),i(BR(e[0]))}});return(0,K.jsxs)(`div`,{...s({className:`studio-file-dropzone${l?` dragging`:``}${u?` rejected`:``}${n?` has-file`:``}`}),children:[(0,K.jsx)(`input`,{...c({"aria-label":a})}),n?(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(`span`,{className:`studio-file-icon`,children:(0,K.jsx)(ve,{size:20})}),(0,K.jsxs)(`span`,{className:`studio-file-copy`,children:[(0,K.jsx)(`strong`,{title:n.name,children:n.name}),(0,K.jsxs)(`small`,{children:[zR(n.size),` · 已准备检查`]})]}),(0,K.jsxs)(`span`,{className:`studio-file-actions`,children:[(0,K.jsx)(`button`,{className:`icon-button tertiary`,type:`button`,"aria-label":`替换 ${n.name}`,title:`替换文件`,onClick:e=>{e.stopPropagation(),d()},children:(0,K.jsx)(Je,{size:14})}),(0,K.jsx)(`button`,{className:`icon-button tertiary`,type:`button`,"aria-label":`移除 ${n.name}`,title:`移除文件`,onClick:e=>{e.stopPropagation(),r(null)},children:(0,K.jsx)(mt,{size:15})})]})]}):(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(`span`,{className:`studio-file-icon`,children:(0,K.jsx)(be,{size:20})}),(0,K.jsxs)(`span`,{className:`studio-file-copy`,children:[(0,K.jsx)(`strong`,{children:l?`松开即可选择`:o}),(0,K.jsx)(`small`,{children:`文件只会先做只读检查,确认后才写入 Catalog。`})]})]})]})}var HR=`def query_order(
- order_id: str,
- include_history: bool = False,
-) -> dict[str, object]:
- """查询订单状态,并按需返回流转记录。"""
- result: dict[str, object] = {
- "order_id": order_id,
- "status": "processing",
- }
- if include_history:
- result["history"] = ["created", "paid"]
- return result
-`;function UR(){let[e,t]=(0,s.useState)(!1),n=(0,s.useId)();return(0,K.jsxs)(`section`,{className:`python-tool-example`,"aria-label":`Python Tool 编写帮助`,children:[(0,K.jsxs)(`button`,{className:`python-tool-example-trigger`,type:`button`,"aria-label":e?`收起编写示例`:`查看编写示例`,"aria-expanded":e,"aria-controls":n,onClick:()=>t(e=>!e),children:[(0,K.jsx)(M,{size:17,"aria-hidden":`true`}),(0,K.jsxs)(`span`,{children:[(0,K.jsx)(`strong`,{children:`Python Tool 怎么写?`}),(0,K.jsx)(`small`,{children:`查看可复制的函数样例与约定`})]}),(0,K.jsx)(B,{className:`python-tool-example-chevron`,size:17,"aria-hidden":`true`})]}),e&&(0,K.jsxs)(`div`,{id:n,className:`python-tool-example-panel`,role:`region`,"aria-label":`Python Tool 编写示例`,children:[(0,K.jsx)(xb,{code:HR,language:`python`,filename:`tool_example.py`,wrap:!0,showLineNumbers:!0}),(0,K.jsxs)(`ul`,{className:`python-tool-example-rules`,children:[(0,K.jsx)(`li`,{children:`公开函数需定义在模块顶层,同步与异步函数均可。`}),(0,K.jsx)(`li`,{children:`建议提供类型注解和 docstring,方便生成清晰的 Tool Contract。`}),(0,K.jsx)(`li`,{children:`返回值应可 JSON 序列化;模块导入阶段不要执行有副作用的逻辑。`})]})]})]})}var WR=JT().trim().min(1,`请填写显示名称`).max(128,`显示名称不能超过 128 个字符`),GR=JT().trim().min(2,`资源标识至少填写 2 个字符`).max(128,`资源标识不能超过 128 个字符`).regex(/^[a-z][a-z0-9._-]*$/,`资源标识只能包含小写字母、数字、点、下划线和连字符`),KR=JT().trim().min(1,`请填写 Python 标识`).max(128,`Python 标识不能超过 128 个字符`).regex(/^[A-Za-z_][A-Za-z0-9_]*$/,`请输入有效的 Python 标识`),qR=JT().trim().url(`请输入有效的接口地址`).max(1024,`接口地址不能超过 1024 个字符`),JR=JT().trim().max(512,`凭证引用不能超过 512 个字符`).regex(/^env:\/\/[A-Za-z_][A-Za-z0-9_]*$/,`凭证引用需使用 env://环境变量名`),YR=JT().trim().max(4096,`描述不能超过 4096 个字符`).default(``),XR=OE({name:GR,displayName:WR,model:JT().trim().min(1,`请填写模型 ID`).max(256,`模型 ID 不能超过 256 个字符`),endpointUrl:qR,credentialRef:JR,description:YR.optional(),apiKey:JT().max(16384,`API Key 不能超过 16384 个字符`).default(``),temperature:oD().min(0,`temperature 需在 0-2 之间`).max(2,`temperature 需在 0-2 之间`).default(.2),maxTokens:oD().int(`max_tokens 需为 1-131072 的整数`).min(1,`max_tokens 需为 1-131072 的整数`).max(131072,`max_tokens 需为 1-131072 的整数`).default(2048),addressMode:PE([`endpoint`,`base`]).default(`endpoint`),wireApi:PE([``,`chat`,`responses`]).default(``)}),ZR=OE({displayName:WR,name:GR,transport:PE([`stdio`,`sse`,`http`,`streamable-http`]),endpointUrl:JT().trim().max(1024,`Server URL 不能超过 1024 个字符`).default(``),command:JT().trim().max(4096,`Command 不能超过 4096 个字符`).default(``),args:JT().trim().max(8192,`Arguments 不能超过 8192 个字符`).default(``),apiKeyName:AE([IE(``),JT().trim().regex(/^[A-Za-z_][A-Za-z0-9_]*$/,`环境变量名需为合法标识符`)]).default(``),apiKeyValue:JT().max(16384,`API Key 不能超过 16384 个字符`).default(``),description:YR}).superRefine((e,t)=>{if(e.transport===`stdio`){e.command||t.addIssue({code:`custom`,path:[`command`],message:`请填写 Command`});return}if(!e.endpointUrl){t.addIssue({code:`custom`,path:[`endpointUrl`],message:`请填写 Server URL`});return}eE().safeParse(e.endpointUrl).success||t.addIssue({code:`custom`,path:[`endpointUrl`],message:`请输入有效的 Server URL`})}),QR=OE({displayName:WR,name:KR,callableName:KR,description:JT().trim().max(1024,`描述不能超过 1024 个字符`).default(``),sourceMode:PE([`upload`,`workspace`]).default(`upload`),sourcePath:JT().trim().max(4096,`工作区路径不能超过 4096 个字符`).default(``)}).superRefine((e,t)=>{e.sourceMode===`workspace`&&!e.sourcePath&&t.addIssue({code:`custom`,path:[`sourcePath`],message:`请填写工作区 Python 文件`})}),$R=OE({value:JT().max(16384,`API Key 不能超过 16384 个字符`)}),ez=OE({sandbox:PE([`read-only`,`read_only`,`workspace-write`,`workspace-write-auto`,`full-access`]),buildAfterCreate:bE(),codexProxy:PE([`auto`,`forced`,`direct`]),cloudRegion:JT().trim().max(128,`Region 不能超过 128 个字符`).default(``),cloudBucket:JT().trim().max(128,`KS3 Bucket 不能超过 128 个字符`).default(``),cloudAccessKey:JT().trim().max(256,`Access Key 不能超过 256 个字符`).default(``),cloudSecretKey:JT().trim().max(256,`Secret Key 不能超过 256 个字符`).default(``),cloudAccountId:JT().trim().max(128,`Account ID 不能超过 128 个字符`).default(``)});function tz(e){return e.status===`ready`||e.status===`conflict`}function nz(e){return new Set(e.filter(tz).map(e=>e.candidateId))}async function rz({candidates:e,selectedIds:t,overwriteIds:n,commit:r,onResult:i}){let a=e.filter(e=>t.has(e.candidateId)&&tz(e)),o=[];for(let e of a){let t;try{let i=await r(e,n.has(e.candidateId));t={candidateId:e.candidateId,status:`succeeded`,value:i}}catch(n){t={candidateId:e.candidateId,status:`failed`,error:n instanceof Error?n.message:String(n)}}o.push(t),i?.(t,o.length,a.length)}return{results:o,succeededIds:o.filter(e=>e.status===`succeeded`).map(e=>e.candidateId),failedIds:o.filter(e=>e.status===`failed`).map(e=>e.candidateId)}}var iz={model:{title:`模型`,description:`管理模型端点和凭据引用。`,addLabel:`配置模型`,headings:[`发现来源`,`上下文窗口`,`输入模态`],icon:fe},tool:{title:`Tool`,description:`管理结构化 Tool Contract、权限和审批策略。`,addLabel:`添加 Python Tool`,headings:[`来源`,`Tool 分组`,`权限 / 边界`],icon:pt},mcp:{title:`MCP`,description:`连接、探测并复用 MCP Server。`,addLabel:`添加资源`,headings:[`来源`,`版本`,`说明`],icon:Le},skill:{title:`Skill`,description:`安装版本化 Skill,并在构建时锁定内容摘要。`,addLabel:`发现 Skill`,headings:[`来源`,`版本`,`说明`],icon:nt}},az={provider:`模型服务`,builtin:`ksadk 内置`,local:`工作区自定义`,market:`市场`},oz=20;async function sz(e,t){let n=await e.text().catch(()=>``);try{return JSON.parse(n)?.error?.message||`${t}(${e.status})`}catch{return`${t}(${e.status})`}}function cz(e){return e.requiredSecretRefs?.[0]||e.contract?.credentialRef||``}function lz(e){return e.replace(/^env:\/\//,``)}function uz(e){let t=Number(e||0);return t<1024?`${t} B`:t<1048576?`${(t/1024).toFixed(1)} KiB`:`${(t/1024/1024).toFixed(1)} MiB`}function dz({kind:e,onKindChange:t,refreshTick:n}){let[r,i]=(0,s.useState)([]),[a,o]=(0,s.useState)(``),c=(0,s.useDeferredValue)(a),[l,u]=(0,s.useState)(``),[d,f]=(0,s.useState)(``),[p,m]=(0,s.useState)(`default`),[h,_]=(0,s.useState)(oz),[v,y]=(0,s.useState)(0),[b,x]=(0,s.useState)([null]),[S,C]=(0,s.useState)(null),[w,T]=(0,s.useState)(0),[E,D]=(0,s.useState)(!0),[O,k]=(0,s.useState)(``),[A,j]=(0,s.useState)(null),[M,N]=(0,s.useState)(!1),[P,F]=(0,s.useState)(!1),[I,L]=(0,s.useState)(null),[R,z]=(0,s.useState)(null),[B,V]=(0,s.useState)(!1),[H,ee]=(0,s.useState)(!1),[U,te]=(0,s.useState)(null),[W,ne]=(0,s.useState)(!1),re=(0,s.useRef)(0),G=(0,s.useCallback)(async t=>{let n=++re.current,r=new URLSearchParams({kind:e,limit:String(h),sort:p});c.trim()&&r.set(`query`,c.trim()),l&&r.set(`status`,l),d&&r.set(`source`,d),t&&r.set(`cursor`,t),D(!0),k(``);try{let e=await g(`/api/v1/catalog/resources?${r}`);if(!e.ok)throw Error(await sz(e,`资源加载失败`));let t=await e.json();if(re.current!==n)return;i(t.items||[]),C(t.nextCursor||null),T(Number(t.total)||0)}catch(e){if(re.current!==n)return;i([]),C(null),T(0),k(e instanceof Error?e.message:`资源加载失败`)}finally{re.current===n&&D(!1)}},[c,e,h,p,d,l]),ie=(0,s.useCallback)(()=>{x([null]),y(0),G(null)},[G]),ae=(0,s.useCallback)(()=>{G(b[v]||null)},[b,G,v]);(0,s.useEffect)(()=>{ie()},[n,ie]);let oe=(0,s.useCallback)(async e=>{try{let t=await g(`/api/v1/catalog/mcp-servers/${encodeURIComponent(e.resourceId)}:probe?timeoutSeconds=15`,{method:`POST`});if(!t.ok)throw Error(await sz(t,`MCP 探测失败`));let n=await t.json();ae(),Y(`MCP 探测完成`,`已发现 ${n.health?.toolCount||0} 个 Tool。`)}catch(e){ae(),Y(`MCP 探测失败`,e.message,`error`)}},[ae]);async function se(){if(U){ne(!0);try{let e=await g(`/api/v1/catalog/resources/${encodeURIComponent(U.resourceId)}`,{method:`DELETE`});if(!e.ok)throw Error(await sz(e,`删除失败`));if(te(null),r.length===1&&v>0){let e=v-1;y(e),await G(b[e]||null)}else await G(b[v]||null);Y(`资源已删除`,`${U.displayName||U.name} 已从工作区移除。`)}catch(e){Y(`删除失败`,e.message,`error`)}ne(!1)}}function ce(){if(e===`model`){N(!0);return}if(e===`mcp`){F(!0);return}if(e===`skill`){V(!0);return}ee(!0)}let le=iz[e],ue=(0,s.useMemo)(()=>[{id:`name`,header:`名称`,minWidth:190,className:`resource-name-column`,headerClassName:`resource-name-column`,cell:e=>(0,K.jsx)(fz,{item:e})},{id:`source`,header:le.headings[0],minWidth:120,className:`resource-source-column`,headerClassName:`resource-source-column`,cell:e=>az[e.source]||e.source},{id:`detail`,header:le.headings[1],minWidth:110,className:`resource-detail-column`,headerClassName:`resource-detail-column`,cell:e=>(0,K.jsx)(pz,{item:e})},{id:`capability`,header:le.headings[2],minWidth:180,className:`capability-cell resource-capability-column`,headerClassName:`resource-capability-column`,cell:e=>(0,K.jsx)(mz,{item:e})},{id:`status`,header:`状态`,minWidth:92,className:`resource-status-column`,headerClassName:`resource-status-column`,cell:e=>(0,K.jsx)(hz,{item:e})},{id:`actions`,header:`操作`,minWidth:108,className:`actions-column resource-actions-column`,headerClassName:`actions-column resource-actions-column`,cell:e=>(0,K.jsx)(gz,{item:e,onConfigure:()=>j(e),onView:()=>e.kind===`mcp`?L(e):z(e),onProbe:()=>oe(e),onDelete:()=>te(e)})}],[le.headings,oe]),de=(0,s.useCallback)(()=>{if(v<=0)return;let e=v-1;y(e),G(b[e]||null)},[b,G,v]),fe=(0,s.useCallback)(()=>{if(!S)return;let e=v+1;x(t=>{let n=t.slice(0,e);return n[e]=S,n}),y(e),G(S)},[G,S,v]);return(0,K.jsxs)(`div`,{className:`page-container resources-page`,"data-layout":`data`,children:[(0,K.jsx)(gd,{children:(0,K.jsxs)(`button`,{className:`button accent`,type:`button`,onClick:ce,children:[(0,K.jsx)(qe,{size:15}),(0,K.jsx)(`span`,{children:le.addLabel})]})}),(0,K.jsxs)(`div`,{className:`data-page-body table-data-body`,children:[(0,K.jsx)(`div`,{className:`page-tabs`,role:`tablist`,"aria-label":`资源类型`,children:Object.keys(iz).map(n=>(0,K.jsxs)(`button`,{type:`button`,role:`tab`,"aria-selected":e===n,onClick:()=>t(n),children:[iz[n].title,e===n&&(0,K.jsx)(`span`,{className:`n`,children:w})]},n))}),(0,K.jsxs)(`div`,{className:`section-toolbar`,children:[(0,K.jsxs)(`div`,{className:`search-field`,children:[(0,K.jsx)(Ye,{size:14}),(0,K.jsx)(`input`,{type:`search`,placeholder:`搜索资源`,value:a,onChange:e=>o(e.target.value)})]}),(0,K.jsx)(kh,{className:`compact-select`,ariaLabel:`筛选资源状态`,value:l||`__all__`,options:[{value:`__all__`,label:`全部状态`},{value:`ready`,label:`可用`},{value:`missing-secret`,label:`缺少凭证`},{value:`unhealthy`,label:`异常`},{value:`unresolved`,label:`未解析`}],onValueChange:e=>u(e===`__all__`?``:e)}),(0,K.jsx)(kh,{className:`compact-select`,ariaLabel:`筛选资源来源`,value:d||`__all__`,options:[{value:`__all__`,label:`全部来源`},{value:`provider`,label:`模型服务`},{value:`builtin`,label:`ksadk 内置`},{value:`local`,label:`工作区自定义`},{value:`market`,label:`市场`}],onValueChange:e=>f(e===`__all__`?``:e)}),(0,K.jsx)(kh,{className:`compact-select`,ariaLabel:`资源排序`,value:p,options:[{value:`default`,label:`默认排序`},{value:`displayName:asc`,label:`名称升序`},{value:`displayName:desc`,label:`名称降序`}],onValueChange:m}),(0,K.jsx)(kh,{className:`compact-select`,ariaLabel:`每页显示数量`,value:String(h),options:[{value:`20`,label:`每页 20 条`},{value:`50`,label:`每页 50 条`},{value:`100`,label:`每页 100 条`}],onValueChange:e=>_(Number(e))})]}),(0,K.jsx)(dm,{columns:ue,data:r,getRowId:e=>e.resourceId,caption:`${le.title}资源列表`,minWidth:0,loading:E,error:O,onRetry:ae,empty:{icon:(0,K.jsx)(pe,{size:20}),title:`没有匹配的资源`,description:`调整筛选条件,或添加一个新的工程资源。`},pagination:{pageIndex:v,pageSize:h,total:w,hasNextPage:!!S,onPreviousPage:de,onNextPage:fe}})]}),A&&(0,K.jsx)(_z,{model:A,onClose:()=>j(null),onChanged:ie}),M&&(0,K.jsx)(vz,{onClose:()=>N(!1),onAdded:()=>{N(!1),ie()}}),P&&(0,K.jsx)(yz,{onClose:()=>F(!1),onConnected:()=>{F(!1),ie()}}),I&&(0,K.jsx)(bz,{item:I,onClose:()=>L(null)}),R&&(0,K.jsx)(xz,{item:R,onClose:()=>z(null)}),B&&(0,K.jsx)(Sz,{onClose:()=>V(!1),onCatalogChanged:ie}),H&&(0,K.jsx)(Cz,{onClose:()=>ee(!1),onAdded:()=>{ee(!1),ie()}}),U&&(0,K.jsx)(Ca,{title:`确认删除资源「${U.displayName||U.name}」?`,description:`删除后已绑定该资源的 Agent 不会自动更新,需手动重新编辑。`,confirmText:`确认删除`,busy:W,onConfirm:se,onCancel:()=>te(null)})]})}function fz({item:e}){let t=iz[e.kind]?.icon||pe,n=e.name&&e.name!==e.displayName;return(0,K.jsxs)(`div`,{className:`agent-cell`,children:[(0,K.jsx)(`span`,{className:`capability-icon`,children:(0,K.jsx)(t,{size:15})}),(0,K.jsxs)(`div`,{className:`agent-cell-copy`,children:[(0,K.jsx)(`strong`,{children:e.displayName}),n&&(0,K.jsx)(`span`,{children:e.name})]})]})}function pz({item:e}){if(e.kind===`model`){let t=e.contract?.metadata||{},n=Number(t.context_window_tokens||0),r=e.contract?.discovery?.contextWindow===`provider`?`服务返回`:`ksadk 默认`,i=n>=1e6?`${(n/1e6).toFixed(n%1e6?1:0)}M`:n>=1e3?`${Math.round(n/1e3)}K`:`${n||`-`}`;return(0,K.jsx)(`strong`,{title:`上下文窗口来源:${r}`,children:i})}return e.kind===`tool`?(0,K.jsx)(`span`,{className:`tag`,children:e.contract?.group||e.category||`general`}):(0,K.jsx)(`span`,{className:`mono`,children:e.version})}function mz({item:e}){if(e.kind===`model`){let t=e.contract?.metadata?.capabilities||{},n=[`文字`];t.multimodal_input_image&&n.push(`图片`),t.multimodal_input_video&&n.push(`视频`),t.multimodal_input_file&&n.push(`文件`);let r=e.contract?.discovery?.inputModalities===`provider`?`服务返回`:`ksadk 默认`;return(0,K.jsx)(`span`,{title:`输入模态来源:${r}`,children:n.join(` + `)})}if(e.kind===`tool`){let t=e.contract?.approval===`always`?`需审批`:`无需审批`,n=e.contract?.boundary||`ksadk-runtime`;return(0,K.jsxs)(K.Fragment,{children:[t,(0,K.jsx)(`span`,{className:`resource-origin`,children:n})]})}let t=e.description||`未提供说明`;return(0,K.jsx)(`span`,{className:`cell-clamp`,title:t,children:t})}function hz({item:e}){if(e.kind===`model`){let t=e.status===`ready`;return(0,K.jsx)(`span`,{className:`badge`,"data-state":t?`ready`:`pending`,children:t?`凭证已配置`:`凭证未配置`})}let t=e.status===`ready`?`可用`:e.status===`failed`||e.status===`unhealthy`?`异常`:e.status===`unresolved`?`未解析`:e.status===`missing-secret`?`缺少凭证`:e.status;return(0,K.jsx)(`span`,{className:`badge`,"data-state":e.status===`ready`?`ready`:e.status===`failed`||e.status===`unhealthy`?`failed`:`pending`,children:t})}function gz({item:e,onConfigure:t,onView:n,onProbe:r,onDelete:i}){let a=e.kind===`mcp`?[{label:`重新探测`,onSelect:r,disabled:e.source!==`local`},...e.source===`local`?[{label:`删除`,danger:!0,onSelect:i}]:[]]:[{label:`查看详情`,onSelect:n},...e.source===`local`?[{label:`删除`,danger:!0,onSelect:i}]:[]];return(0,K.jsxs)(`div`,{className:`row-actions`,children:[(0,K.jsx)(`button`,{className:`button secondary small`,type:`button`,onClick:e.kind===`model`?t:n,children:e.kind===`model`?`配置凭证`:`查看`}),(0,K.jsx)(pd,{label:`${e.displayName} 的更多操作`,items:a})]})}function _z({model:e,onClose:t,onChanged:n}){let r=cz(e),i=lz(r),[a,o]=(0,s.useState)(null),c=p_({resolver:C_($R),defaultValues:{value:``}}),[l,u]=(0,s.useState)(null),[d,f]=(0,s.useState)(``);(0,s.useEffect)(()=>{g(`/api/v1/credentials/${encodeURIComponent(i)}`).then(e=>e.json()).then(o).catch(()=>o({configured:!1,source:`missing`}))},[i]);let p=!!a?.configured,m=a?.source||`missing`,h=a==null?`正在检查凭证`:p?`模型凭证已配置`:`模型凭证未配置`,_=a==null?`检查当前 Runtime 是否已经获得模型凭证。`:m===`session`?`凭证已持久保存到工作区,重启后仍生效,所有 Agent 可复用。`:m===`environment`?`凭证由 Studio 启动环境变量提供,可以用新的会话凭证临时覆盖。`:`输入 API Key 后即可在本地运行当前模型。`;async function v(r,a){if(u(null),!a.value&&!p){c.setError(`value`,{type:`manual`,message:`当前模型还没有可用凭证,请输入 API Key。`});return}f(r?`test`:`save`);let o=!1;try{if(a.value){let e=await g(`/api/v1/credentials/${encodeURIComponent(i)}`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({value:a.value,persistence:`session`})});if(!e.ok)throw Error(await sz(e,`凭证保存失败`));o=!0}let s=null;if(r){let t=await g(`/api/v1/model-profiles/${encodeURIComponent(e.resourceId)}:test`,{method:`POST`}),n=await t.text().catch(()=>``),r={};try{r=JSON.parse(n)}catch{}if(!t.ok||r.ok===!1)throw Error(r?.error?.message||`HTTP ${t.status}`);s=r.latencyMs??0}n?.(),t(),Y(r?`模型连接测试通过`:`模型凭证已保存`,r?`${e.displayName} · ${s} ms`:`凭证已持久保存到工作区,所有 Agent 可复用。`)}catch(e){u({title:o?`凭证已保存,但连接测试失败`:`模型凭证配置失败`,message:e.message}),o&&n?.()}f(``)}async function y(){u(null),f(`remove`);try{let r=await g(`/api/v1/credentials/${encodeURIComponent(i)}`,{method:`DELETE`});if(!r.ok)throw Error(await sz(r,`凭证清除失败`));n?.(),Y(`会话凭证已清除`,e.displayName),t()}catch(e){u({title:`凭证清除失败`,message:e.message})}f(``)}return(0,K.jsx)(Fg,{...c,children:(0,K.jsxs)(DD,{title:`配置模型凭证`,subtitle:`凭证只保存在当前 Studio 会话,不写入 Agent 或 Bundle。`,onClose:t,footer:(0,K.jsxs)(K.Fragment,{children:[m===`session`&&(0,K.jsx)(`button`,{className:`button secondary`,type:`button`,onClick:y,disabled:d!==``,children:d===`remove`?`正在清除`:`清除会话凭证`}),(0,K.jsx)(`span`,{className:`drawer-footer-spacer`}),(0,K.jsx)(`button`,{className:`button secondary`,type:`button`,onClick:t,children:`取消`}),(0,K.jsx)(`button`,{className:`button secondary`,type:`button`,onClick:c.handleSubmit(e=>v(!1,e)),disabled:d!==``,children:d===`save`?`正在保存`:`仅保存`}),(0,K.jsxs)(`button`,{className:`button accent`,type:`button`,onClick:c.handleSubmit(e=>v(!0,e)),disabled:d!==``,children:[(0,K.jsx)(z,{size:15}),(0,K.jsx)(`span`,{children:d===`test`?`正在测试`:`保存并测试`})]})]}),children:[(0,K.jsxs)(`div`,{className:`credential-profile`,children:[(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`span`,{children:`模型`}),(0,K.jsx)(`strong`,{children:e.displayName})]}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`span`,{children:`Provider`}),(0,K.jsx)(`strong`,{children:e.contract?.provider||`openai-compatible`})]}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`span`,{children:`Endpoint`}),(0,K.jsx)(`code`,{children:e.contract?.endpointUrl||e.contract?.baseUrl||`-`})]}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`span`,{children:`凭证引用`}),(0,K.jsx)(`code`,{children:r||`-`})]})]}),(0,K.jsxs)(`div`,{className:`credential-status ${p?`configured`:`missing`}`,children:[(0,K.jsx)(`span`,{className:`status-dot ${a==null?`warning`:p?`success`:`warning`}`}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`strong`,{children:h}),(0,K.jsx)(`p`,{children:_})]})]}),(0,K.jsx)(X,{label:`API Key`,requirement:p?`optional`:`required`,htmlFor:`modelCredValue`,hint:`保存后立即生效;关闭 Studio 后自动清除,需要持久化时可通过启动环境变量注入。`,error:c.formState.errors.value?.message,children:(0,K.jsx)(`input`,{id:`modelCredValue`,type:`password`,autoComplete:`new-password`,maxLength:16384,placeholder:p?`输入新的 API Key 以覆盖当前凭证`:`输入新的 API Key`,...c.register(`value`)})}),l&&(0,K.jsx)(OD,{kind:`error`,title:l.title,message:l.message})]})})}function vz({onClose:e,onAdded:t}){let n=p_({resolver:C_(XR),defaultValues:{name:``,displayName:``,model:``,endpointUrl:``,credentialRef:`env://MODEL_API_KEY`,description:``,apiKey:``,temperature:.2,maxTokens:2048,addressMode:`endpoint`,wireApi:``}}),{name:r,displayName:i,model:a,endpointUrl:o,credentialRef:c,apiKey:l,temperature:u,maxTokens:d,addressMode:f,wireApi:p}=n.watch(),m=c.replace(/^env:\/\//,``),[h,_]=(0,s.useState)(!1),[v,y]=(0,s.useState)(``),[b,x]=(0,s.useState)(!1),[S,C]=(0,s.useState)([]),[w,T]=(0,s.useState)([]),[E,D]=(0,s.useState)([]);(0,s.useEffect)(()=>{g(`/api/v1/catalog/models`).then(e=>e.json()).then(e=>{D((e.items||[]).map(e=>e.name).filter(Boolean))}).catch(()=>{})},[]);async function O(){if(!o.trim()){y(`请先填写接口地址再探测`);return}x(!0),y(``),C([]),T([]);try{let e={url:o.trim()};m.trim()&&(e.credentialRef=`env://${m.trim()}`),l.trim()&&(e.apiKey=l.trim());let t=await g(`/api/v1/model-endpoints:probe`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)});if(!t.ok)throw Error(await sz(t,`探测失败`));let r=await t.json();C(r.attempts||[]),T(r.models||[]),r.recommended?(n.setValue(`wireApi`,r.recommended.wireApi||`chat`),n.setValue(`addressMode`,`endpoint`),n.setValue(`endpointUrl`,r.recommended.endpointUrl,{shouldValidate:!0}),r.recommended.status===`auth_required`&&y(`端点可达,但需要有效凭证(401/403);配置 API Key 后可正常使用`)):y(`未能识别可用协议,请检查地址或网络`)}catch(e){y(e.message)}x(!1)}let k=[...new Set([...w,...E])];async function A(e){_(!0),y(``);try{let r=e.credentialRef.replace(/^env:\/\//,``);if(e.apiKey.trim()){let t=await g(`/api/v1/credentials/${encodeURIComponent(r)}`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({value:e.apiKey.trim(),persistence:`session`})});if(!t.ok)throw Error(await sz(t,`凭证保存失败`))}let i={provider:`openai-compatible`,model:e.model.trim(),credentialRef:e.credentialRef,parameters:{temperature:e.temperature,max_tokens:e.maxTokens}};e.wireApi&&(i.wireApi=e.wireApi),e.addressMode===`endpoint`?i.endpointUrl=e.endpointUrl.trim():i.baseUrl=e.endpointUrl.trim();let a=await g(`/api/v1/catalog/model-profiles`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({name:e.name.trim(),displayName:e.displayName.trim(),version:`1.0.0`,description:e.description||``,spec:i})});if(!a.ok){let e=await a.json().catch(()=>null);if(Db(e,n.setError)){_(!1);return}throw Error(e?.error?.message||`创建失败(${a.status})`)}Y(`模型已创建`,`${e.displayName.trim()} · ${e.model.trim()}`),t()}catch(e){y(e.message)}_(!1)}let j=e=>`${e.protocol===`chat`?`Chat`:`Responses`} · ${e.status===`ok`?`可用 ${e.latencyMs}ms`:e.status===`auth_required`?`需凭证`:e.status===`recognized`?`可识别`:e.status===`unavailable`?`不存在`:e.status===`unreachable`?`不可达`:`错误`}`,M=e=>e.status===`ok`?`ready`:e.status===`unavailable`||e.status===`unreachable`?`failed`:`pending`;return(0,K.jsx)(Fg,{...n,children:(0,K.jsxs)(DD,{title:`添加模型`,subtitle:`接入 OpenAI 兼容模型端点。`,wide:!0,onClose:e,footer:(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(`button`,{className:`button secondary`,type:`button`,onClick:e,children:`取消`}),(0,K.jsxs)(`button`,{className:`button accent`,type:`button`,onClick:n.handleSubmit(A),disabled:h,children:[(0,K.jsx)(z,{size:15}),(0,K.jsx)(`span`,{children:h?`创建中…`:`创建模型`})]})]}),children:[(0,K.jsxs)(`div`,{className:`form-grid two-columns`,children:[(0,K.jsx)(X,{label:`名称(Slug)`,requirement:`required`,htmlFor:`amName`,error:n.formState.errors.name?.message,children:(0,K.jsx)(`input`,{id:`amName`,className:`mono`,placeholder:`my-model`,...n.register(`name`)})}),(0,K.jsx)(X,{label:`显示名称`,requirement:`required`,htmlFor:`amDisplayName`,error:n.formState.errors.displayName?.message,children:(0,K.jsx)(`input`,{id:`amDisplayName`,placeholder:`我的模型`,...n.register(`displayName`)})})]}),(0,K.jsx)(X,{label:`模型 ID`,requirement:`required`,htmlFor:`amModelId`,error:n.formState.errors.model?.message,children:(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`input`,{id:`amModelId`,className:`mono`,placeholder:`glm-5.1 / gpt-4o-mini / …`,list:`am-model-suggestions`,...n.register(`model`)}),(0,K.jsx)(`datalist`,{id:`am-model-suggestions`,children:k.map(e=>(0,K.jsx)(`option`,{value:e},e))}),k.length>0&&(0,K.jsxs)(`span`,{className:`helper`,children:[`可输入或从 `,k.length,` 个可用模型中选择(自动补全)。`]})]})}),(0,K.jsx)(X,{label:`接口地址`,requirement:`required`,htmlFor:`amEndpoint`,hint:`支持主机、/v1、Chat Completions 或 Responses 地址;智能探测会自动归一化。`,error:n.formState.errors.endpointUrl?.message,children:(0,K.jsxs)(`div`,{children:[p&&(0,K.jsx)(`span`,{className:`tag`,children:p===`responses`?`Responses 协议`:`Chat 协议`}),(0,K.jsxs)(`div`,{style:{display:`flex`,gap:8,marginBottom:10,alignItems:`center`},children:[(0,K.jsxs)(`div`,{className:`segmented-control`,children:[(0,K.jsx)(`button`,{type:`button`,className:f===`endpoint`?`selected`:``,onClick:()=>n.setValue(`addressMode`,`endpoint`),children:`完整 endpointUrl`}),(0,K.jsx)(`button`,{type:`button`,className:f===`base`?`selected`:``,onClick:()=>n.setValue(`addressMode`,`base`),children:`baseUrl`})]}),(0,K.jsxs)(`button`,{className:`button secondary small`,type:`button`,onClick:O,disabled:b||!o.trim(),children:[(0,K.jsx)(ht,{size:14}),(0,K.jsx)(`span`,{children:b?`探测中…`:`智能探测`})]})]}),(0,K.jsx)(`input`,{id:`amEndpoint`,className:`mono`,placeholder:f===`endpoint`?`https://host/v1/chat/completions`:`https://host/v1`,...n.register(`endpointUrl`)}),S.length>0&&(0,K.jsx)(`div`,{style:{display:`flex`,flexWrap:`wrap`,gap:6,marginTop:10},children:S.map((e,t)=>(0,K.jsx)(`span`,{className:`badge`,"data-state":M(e),title:e.endpointUrl,children:j(e)},t))})]})}),(0,K.jsxs)(`div`,{className:`form-grid two-columns`,children:[(0,K.jsx)(X,{label:`凭证环境变量名`,requirement:`required`,htmlFor:`amEnvName`,error:n.formState.errors.credentialRef?.message,children:(0,K.jsx)(`input`,{id:`amEnvName`,className:`mono`,value:m,onChange:e=>n.setValue(`credentialRef`,`env://${e.target.value}`,{shouldDirty:!0,shouldValidate:!0}),placeholder:`MY_MODEL_API_KEY`})}),(0,K.jsx)(X,{label:`API Key 值`,requirement:`optional`,htmlFor:`amApiKey`,hint:`仅保存到当前 Studio 会话;留空则从启动环境读取。`,error:n.formState.errors.apiKey?.message,children:(0,K.jsx)(`input`,{id:`amApiKey`,type:`password`,autoComplete:`new-password`,placeholder:`留空则从环境读取`,...n.register(`apiKey`)})})]}),(0,K.jsxs)(`div`,{className:`form-grid two-columns`,children:[(0,K.jsx)(X,{label:`temperature`,requirement:`optional`,htmlFor:`amTemp`,error:n.formState.errors.temperature?.message,children:(0,K.jsx)(`input`,{id:`amTemp`,type:`number`,step:`0.1`,min:0,max:2,...n.register(`temperature`,{valueAsNumber:!0})})}),(0,K.jsx)(X,{label:`max_tokens`,requirement:`optional`,htmlFor:`amMaxTokens`,error:n.formState.errors.maxTokens?.message,children:(0,K.jsx)(`input`,{id:`amMaxTokens`,type:`number`,min:1,max:131072,...n.register(`maxTokens`,{valueAsNumber:!0})})})]}),v&&(0,K.jsx)(OD,{kind:`error`,title:`添加模型`,message:v})]})})}function yz({onClose:e,onConnected:t}){let n=(0,s.useRef)(null),r=p_({resolver:C_(ZR),defaultValues:{displayName:``,name:``,transport:`http`,command:``,args:``,endpointUrl:``,apiKeyName:``,apiKeyValue:``,description:``}}),{transport:i}=r.watch(),[a,o]=(0,s.useState)(``),[c,l]=(0,s.useState)(!1);function u(){let e=n.current?.value.trim();if(!e)return;let t;try{t=JSON.parse(e)}catch{Y(`配置解析失败`,`请粘贴有效的 JSON`,`error`);return}let i=t.mcpServers||t.mcp_servers||t,a=Object.keys(i)[0],o=i[a];if(!o||typeof o!=`object`){Y(`配置解析失败`,`未找到 MCP server 定义`,`error`);return}r.setValue(`name`,a,{shouldValidate:!0}),r.setValue(`displayName`,o.name||a,{shouldValidate:!0}),o.description&&r.setValue(`description`,o.description);let s=String(o.type||o.transport||``).toLowerCase();s.includes(`http`)||o.url?(r.setValue(`transport`,s===`sse`?`sse`:`http`),o.url&&r.setValue(`endpointUrl`,o.url,{shouldValidate:!0})):(r.setValue(`transport`,`stdio`),o.command&&r.setValue(`command`,o.command,{shouldValidate:!0}),Array.isArray(o.args)&&r.setValue(`args`,o.args.join(` `)));let c=o.headers||{},l=c.Authorization||c.authorization;if(l){let e=String(l).match(/\$\{?([A-Za-z0-9_]+)\}?/);e&&r.setValue(`apiKeyName`,e[1],{shouldValidate:!0})}else o.env_key&&r.setValue(`apiKeyName`,o.env_key,{shouldValidate:!0})}async function d(e){o(``),l(!0);try{if(e.apiKeyName.trim()&&e.apiKeyValue.trim()){let t=await g(`/api/v1/credentials/${encodeURIComponent(e.apiKeyName.trim())}`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({value:e.apiKeyValue.trim(),persistence:`session`})});if(!t.ok)throw Error(await sz(t,`凭证保存失败`))}let n=e.transport===`streamable-http`?`http`:e.transport,i=n===`stdio`?e.apiKeyName.trim():`Authorization`,a={name:e.name.trim(),version:`1.0.0`,transport:n,args:n===`stdio`?e.args.trim().split(/\s+/).filter(Boolean):[],envRefs:e.apiKeyName.trim()?{[i]:`env://${e.apiKeyName.trim()}`}:{}};n===`stdio`?a.command=e.command.trim():a.endpointUrl=e.endpointUrl.trim();let o=await g(`/api/v1/catalog/mcp-servers`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({displayName:e.displayName.trim(),description:e.description.trim(),server:a})}),s=await o.json().catch(()=>null);if(!o.ok){if(Db(s,r.setError)){l(!1);return}throw Error(s?.error?.message||`保存失败(${o.status})`)}let c=await g(`/api/v1/catalog/mcp-servers/${encodeURIComponent(s.resourceId)}:probe?timeoutSeconds=15`,{method:`POST`});if(!c.ok)throw Error(await sz(c,`探测失败`));Y(`MCP 已连接`,`已发现 ${(await c.json()).health?.toolCount||0} 个 Tool。`),t()}catch(e){o(e.message)}l(!1)}return(0,K.jsx)(Fg,{...r,children:(0,K.jsxs)(DD,{title:`连接 MCP Server`,subtitle:`保存后执行探测,再回到 Agent 能力选择。`,onClose:e,footer:(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(`button`,{className:`button secondary`,type:`button`,onClick:e,children:`取消`}),(0,K.jsxs)(`button`,{className:`button accent`,type:`button`,onClick:r.handleSubmit(d),disabled:c,children:[(0,K.jsx)(Le,{size:15}),(0,K.jsx)(`span`,{children:c?`正在探测`:`保存并探测`})]})]}),children:[(0,K.jsx)(X,{label:`粘贴 MCP 配置`,requirement:`optional`,htmlFor:`mcpPaste`,hint:`粘贴 JSON 后会自动填充下方字段。`,children:(0,K.jsx)(`textarea`,{id:`mcpPaste`,ref:n,rows:5,placeholder:'{"mcpServers":{"metaso":{"type":"streamable-http","url":"https://...","headers":{"Authorization":"Bearer ${KSC_AIPRO_API_KEY}"}}}}',onPaste:()=>window.setTimeout(u,0)})}),(0,K.jsxs)(`div`,{className:`form-grid two-columns`,children:[(0,K.jsx)(X,{label:`显示名称`,requirement:`required`,htmlFor:`mcpDisplayName`,error:r.formState.errors.displayName?.message,children:(0,K.jsx)(`input`,{id:`mcpDisplayName`,placeholder:`Web Research MCP`,...r.register(`displayName`)})}),(0,K.jsx)(X,{label:`Server 名称`,requirement:`required`,htmlFor:`mcpName`,error:r.formState.errors.name?.message,children:(0,K.jsx)(`input`,{id:`mcpName`,className:`mono`,placeholder:`web-research`,...r.register(`name`)})})]}),(0,K.jsx)(X,{label:`Transport`,requirement:`required`,htmlFor:`mcpTransport`,error:r.formState.errors.transport?.message,children:(0,K.jsx)(kh,{id:`mcpTransport`,ariaLabel:`Transport`,value:i,options:[{value:`http`,label:`Streamable HTTP`},{value:`stdio`,label:`STDIO(本地命令)`},{value:`sse`,label:`SSE`}],onValueChange:e=>r.setValue(`transport`,e,{shouldDirty:!0,shouldValidate:!0})})}),i===`stdio`&&(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(X,{label:`Command`,requirement:`required`,htmlFor:`mcpCommand`,error:r.formState.errors.command?.message,children:(0,K.jsx)(`input`,{id:`mcpCommand`,className:`mono`,placeholder:`npx`,...r.register(`command`)})}),(0,K.jsx)(X,{label:`Arguments`,requirement:`optional`,htmlFor:`mcpArgs`,error:r.formState.errors.args?.message,children:(0,K.jsx)(`input`,{id:`mcpArgs`,className:`mono`,placeholder:`-y @your-org/web-research-mcp`,...r.register(`args`)})})]}),i!==`stdio`&&(0,K.jsx)(X,{label:`Server URL`,requirement:`required`,htmlFor:`mcpEndpoint`,error:r.formState.errors.endpointUrl?.message,children:(0,K.jsx)(`input`,{id:`mcpEndpoint`,className:`mono`,placeholder:`https://mcp.example.com/mcp`,...r.register(`endpointUrl`)})}),(0,K.jsx)(X,{label:`API Key 环境变量名`,requirement:`optional`,htmlFor:`mcpApiKey`,error:r.formState.errors.apiKeyName?.message,children:(0,K.jsx)(`input`,{id:`mcpApiKey`,className:`mono`,placeholder:`KSC_AIPRO_API_KEY`,...r.register(`apiKeyName`)})}),(0,K.jsx)(X,{label:`API Key 值`,requirement:`optional`,htmlFor:`mcpApiKeyValue`,hint:`仅保存到当前 Studio 会话;留空则从环境变量读取。`,error:r.formState.errors.apiKeyValue?.message,children:(0,K.jsx)(`input`,{id:`mcpApiKeyValue`,type:`password`,autoComplete:`new-password`,placeholder:`留空则从环境变量读取`,...r.register(`apiKeyValue`)})}),(0,K.jsx)(X,{label:`说明`,requirement:`optional`,htmlFor:`mcpDescription`,error:r.formState.errors.description?.message,children:(0,K.jsx)(`textarea`,{id:`mcpDescription`,rows:2,placeholder:`提供 Web 搜索和页面抓取能力`,...r.register(`description`)})}),a&&(0,K.jsx)(OD,{kind:`error`,title:`连接失败`,message:a})]})})}function bz({item:e,onClose:t}){let n=e.contract||{},r=e.health||{},i=n.discoveredTools||r.discoveredTools||[],a=[[`Resource ID`,e.resourceId],[`Transport`,n.transport||`-`],[`Endpoint`,n.endpointUrl||n.command||`-`],[`状态`,r.status||e.status],[`工具数`,r.toolCount??i.length],[`凭证`,(e.requiredSecretRefs||[]).join(`、`)||`无`]];return(0,K.jsxs)(DD,{title:e.displayName||e.name,subtitle:`${e.name} · ${e.version} · ${n.transport||``}`,onClose:t,children:[(0,K.jsx)(`dl`,{className:`trace-detail-grid`,children:a.map(([e,t])=>(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`dt`,{children:e}),(0,K.jsx)(`dd`,{children:String(t)})]},e))}),(0,K.jsx)(`div`,{className:`inspector-title inspector-title-spaced`,children:`已发现工具`}),(0,K.jsx)(`div`,{className:`resource-detail-list`,children:i.length===0?(0,K.jsx)(`div`,{className:`resource-detail-item`,children:(0,K.jsxs)(`span`,{className:`resource-detail-item-copy`,children:[(0,K.jsx)(`strong`,{children:`未发现工具`}),(0,K.jsx)(`span`,{children:`点击“重新探测”以加载工具列表`})]})}):i.map(e=>(0,K.jsxs)(`div`,{className:`resource-detail-item`,children:[(0,K.jsx)(`span`,{className:`capability-icon`,children:(0,K.jsx)(pt,{size:15})}),(0,K.jsxs)(`span`,{className:`resource-detail-item-copy`,children:[(0,K.jsx)(`strong`,{children:e.name}),(0,K.jsx)(`span`,{children:e.description||``})]})]},e.name))})]})}function xz({item:e,onClose:t}){let[n,r]=(0,s.useState)(!1),i=e.contract||{},a=[[`Resource ID`,e.resourceId],[`来源`,az[e.source]||e.source],[`版本`,e.version||`-`],[`状态`,e.kind===`model`?e.status===`ready`?`凭证已配置`:`凭证未配置`:e.status]];return e.kind===`tool`&&(a.push([`Tool 分组`,i.group||e.category||`general`]),a.push([`审批`,i.approval===`always`?`需审批`:`无需审批`]),a.push([`边界`,i.boundary||`ksadk-runtime`]),i.sourcePath&&a.push([`源码`,`${i.sourcePath} · ${i.callableName||`-`}()`])),e.kind===`skill`&&i?.contentSha256&&a.push([`内容摘要`,i.contentSha256]),(0,K.jsxs)(DD,{title:e.displayName||e.name,subtitle:`${e.name} · ${e.version}`,onClose:t,children:[(0,K.jsx)(`dl`,{className:`trace-detail-grid`,children:a.map(([e,t])=>(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`dt`,{children:e}),(0,K.jsx)(`dd`,{children:String(t)})]},e))}),(0,K.jsx)(`div`,{className:`inspector-title inspector-title-spaced`,children:`说明`}),(0,K.jsx)(`p`,{style:{margin:0,color:`var(--text-secondary)`,fontSize:`var(--font-size-meta)`,lineHeight:`var(--line-height-body)`},children:e.description||i.description||`未提供说明`}),e.kind===`skill`&&e.source===`local`&&(0,K.jsxs)(`button`,{className:`button secondary skill-files-open`,type:`button`,onClick:()=>r(!0),children:[(0,K.jsx)(ge,{size:15}),(0,K.jsx)(`span`,{children:`查看 Skill 文件`})]}),n&&(0,K.jsx)(SL,{title:e.displayName||e.name,endpoint:`/api/v1/catalog/skills/${encodeURIComponent(e.resourceId)}/files`,onClose:()=>r(!1)})]})}function Sz({onClose:e,onCatalogChanged:t}){let[n,r]=(0,s.useState)(``),[i,a]=(0,s.useState)(null),[o,c]=(0,s.useState)(new Set),[l,u]=(0,s.useState)({}),[d,f]=(0,s.useState)(null),[p,m]=(0,s.useState)({completed:0,total:0}),[h,_]=(0,s.useState)(``),[v,y]=(0,s.useState)(``),[b,x]=(0,s.useState)(!1),[S,C]=(0,s.useState)(!1),[w,T]=(0,s.useState)(null),[E,D]=(0,s.useState)(null),O=i?.candidates||[];function k(){c(new Set),u({}),f(null),m({completed:0,total:0}),_(``),T(null)}async function A(){y(``),x(!0);try{let e=n.split(`,`).map(e=>e.trim()).filter(Boolean),t=await g(`/api/v1/catalog/skills:discover`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({scanPaths:e})});if(!t.ok)throw Error(await sz(t,`Skill 发现失败`));let r=await t.json();a(r),k()}catch(e){y(e.message)}x(!1)}function j(e){S||l[e]?.status===`succeeded`||c(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})}function M(){let e=nz(O);for(let[t,n]of Object.entries(l))n.status===`succeeded`&&e.delete(t);c(e)}async function N(e){let n=i?.inspectionToken;if(!o.size||!n||S)return;let r=new Set(o),a=O.filter(e=>r.has(e.candidateId)&&(e.status===`ready`||e.status===`conflict`)).length;y(``),f(null),u({}),m({completed:0,total:a}),C(!0);try{let i=await rz({candidates:O,selectedIds:r,overwriteIds:e,commit:async(e,t)=>{_(e.candidateId);let r=await g(`/api/v1/catalog/skills/discoveries/${encodeURIComponent(n)}:commit`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({candidateId:e.candidateId,overwrite:t})});if(!r.ok)throw Error(await sz(r,`Skill 导入失败`));return r.json()},onResult:(e,t,n)=>{u(t=>({...t,[e.candidateId]:e})),m({completed:t,total:n})}});f(i),c(new Set(i.failedIds)),i.succeededIds.length&&await t(),i.failedIds.length?Y(`Skill 批量导入完成`,`已导入 ${i.succeededIds.length} 个,${i.failedIds.length} 个失败。`,`error`):Y(`Skill 批量导入完成`,`已导入 ${i.succeededIds.length} 个 Skill。`)}catch(e){y(e.message)}_(``),C(!1)}function P(){let e=O.filter(e=>o.has(e.candidateId)&&e.status===`conflict`);if(e.length){T(e);return}N(new Set)}let F=o.size;return(0,K.jsxs)(DD,{title:`发现本地 Skill`,subtitle:`默认扫描工作区及允许的 Claude、Codex、Agent 用户目录;扫描只产生候选,确认后才导入。`,wide:!0,closeDisabled:S,onClose:e,footer:(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(`button`,{className:`button secondary`,type:`button`,onClick:e,disabled:S,children:`取消`}),(0,K.jsxs)(`button`,{className:`button accent`,type:`button`,onClick:P,disabled:!F||S,children:[(0,K.jsx)(z,{size:15}),(0,K.jsx)(`span`,{children:S?`正在导入 ${p.completed}/${p.total}`:`导入所选 ${F} 个`})]})]}),children:[(0,K.jsxs)(`div`,{className:`field`,children:[(0,K.jsx)(`label`,{htmlFor:`skillScanPaths`,children:`扫描目录(逗号分隔;留空扫描安全默认目录)`}),(0,K.jsx)(`input`,{id:`skillScanPaths`,value:n,onChange:e=>r(e.target.value),placeholder:`skills, .claude/skills, user:codex`}),(0,K.jsx)(`span`,{className:`helper`,children:`用户目录仅支持 user:agents、user:codex、user:claude;不支持任意本机路径扫描。`})]}),(0,K.jsxs)(`button`,{className:`button secondary`,type:`button`,onClick:A,disabled:b||S,children:[(0,K.jsx)(Ye,{size:15}),(0,K.jsx)(`span`,{children:b?`正在扫描`:`扫描候选`})]}),O.length>0&&(0,K.jsxs)(`div`,{className:`skill-selection-toolbar`,children:[(0,K.jsxs)(`span`,{children:[`已选择 `,F,` / `,nz(O).size]}),(0,K.jsxs)(`span`,{className:`skill-selection-actions`,children:[(0,K.jsx)(`button`,{className:`button tertiary small`,type:`button`,onClick:M,disabled:S,children:`全选可导入`}),(0,K.jsx)(`button`,{className:`button tertiary small`,type:`button`,onClick:()=>c(new Set),disabled:!F||S,children:`清空选择`})]})]}),(0,K.jsx)(`div`,{className:`skill-discovery-list`,style:{marginTop:16},children:O.length===0?(0,K.jsx)(`div`,{className:`trace-stage-empty compact`,children:(0,K.jsx)(`p`,{children:i?`安全默认目录中没有发现 Skill。`:`点击扫描候选。`})}):O.map(e=>{let t=e.risk||{},n=[`ready`,`conflict`].includes(e.status),r=l[e.candidateId],i=r?.status===`succeeded`,a=e.status===`ready`?`可导入`:e.status===`conflict`?`已安装`:`无效`,s=e.diagnostics?.map(e=>e.message).join(`;`)||`${e.fileCount||0} 个文件 · ${uz(e.totalBytes||0)}`,c=r?.status===`succeeded`?`已导入`:r?.status===`failed`?`导入失败:${r.error||`未知错误`}`:h===e.candidateId?`正在导入`:S&&o.has(e.candidateId)?`等待导入`:``;return(0,K.jsxs)(`div`,{className:`skill-candidate${n?``:` invalid`}`,children:[(0,K.jsx)(`input`,{type:`checkbox`,"aria-label":`选择 ${e.displayName||e.name}`,disabled:!n||S||i,checked:o.has(e.candidateId),onChange:()=>j(e.candidateId)}),(0,K.jsx)(`span`,{className:`capability-icon`,children:(0,K.jsx)(nt,{size:15})}),(0,K.jsxs)(`span`,{className:`skill-candidate-copy`,children:[(0,K.jsx)(`strong`,{children:e.displayName||e.name}),(0,K.jsxs)(`span`,{children:[e.path,` · `,e.version||`版本无效`]}),(0,K.jsx)(`small`,{children:s}),c&&(0,K.jsx)(`small`,{className:`skill-import-state ${r?.status||`pending`}`,children:c})]}),(0,K.jsxs)(`span`,{className:`badge`,"data-state":e.status===`ready`?`ready`:`pending`,children:[a,t.requiresReview?` · 需复核`:``]}),n&&(0,K.jsxs)(`button`,{className:`button tertiary small skill-preview-button`,type:`button`,onClick:()=>D(e),children:[(0,K.jsx)(ge,{size:14}),(0,K.jsx)(`span`,{children:`查看详情`})]})]},e.candidateId)})}),d&&(0,K.jsx)(OD,{kind:d.failedIds.length?`warning`:`success`,title:d.failedIds.length?`已导入 ${d.succeededIds.length} 个,${d.failedIds.length} 个失败`:`已导入 ${d.succeededIds.length} 个 Skill`,message:d.failedIds.length?`失败项已保留选择,可修复后再次导入。`:`资源目录已刷新。`}),v&&(0,K.jsx)(OD,{kind:`error`,title:`Skill 发现或导入失败`,message:v}),w&&(0,K.jsx)(Ca,{title:`所选 Skill 中有 ${w.length} 个已安装`,description:`${w.map(e=>e.displayName||e.name).join(`、`)} 将被覆盖;旧版本会移入回收位置,可手工恢复。`,confirmText:`覆盖并继续`,danger:!1,onCancel:()=>T(null),onConfirm:()=>{let e=new Set(w.map(e=>e.candidateId));T(null),N(e)}}),E&&i?.inspectionToken&&(0,K.jsx)(SL,{title:E.displayName||E.name||`Skill`,endpoint:`/api/v1/catalog/skills/discoveries/${encodeURIComponent(i.inspectionToken)}/candidates/${encodeURIComponent(E.candidateId)}/files`,onClose:()=>D(null)})]})}function Cz({onClose:e,onAdded:t}){let n=p_({resolver:C_(QR),defaultValues:{displayName:``,name:``,callableName:``,description:``,sourceMode:`upload`,sourcePath:``}}),{sourceMode:r,name:i,callableName:a}=n.watch(),[o,c]=(0,s.useState)(null),[l,u]=(0,s.useState)(null),[d,f]=(0,s.useState)(``),[p,m]=(0,s.useState)(!1);async function h(){if(!o){f(`请先选择 Python 文件`);return}m(!0),f(``);try{let e=new FormData;e.append(`file`,o);let t=await g(`/api/v1/catalog/python-tools:inspect`,{method:`POST`,body:e});if(!t.ok)throw Error(await sz(t,`Python Tool 检查失败`));let r=await t.json(),i=r.callables?.[0];u(r);let a=o.name.replace(/\.py$/i,``).replace(/[^A-Za-z0-9_]+/g,`_`).replace(/^[^A-Za-z_]+/,`tool_`)||`python_tool`;n.setValue(`callableName`,i?.name||``,{shouldValidate:!0}),n.getValues(`name`)||n.setValue(`name`,a,{shouldValidate:!0}),n.getValues(`displayName`)||n.setValue(`displayName`,a,{shouldValidate:!0}),n.getValues(`description`)||n.setValue(`description`,i?.description||``)}catch(e){u(null),f(e.message||`Python Tool 检查失败`)}finally{m(!1)}}async function _(e){if(e.sourceMode===`upload`&&!l){n.setError(`callableName`,{type:`manual`,message:`请先完成 Python 文件检查`});return}m(!0),f(``);try{let r=e.sourceMode===`upload`?await g(`/api/v1/catalog/python-tools/${encodeURIComponent(l.inspectionToken)}:commit`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({displayName:e.displayName.trim(),name:e.name.trim(),callableName:e.callableName.trim(),description:e.description.trim()})}):await g(`/api/v1/catalog/tools`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({displayName:e.displayName.trim(),category:`custom`,contract:{name:e.name.trim(),version:`1.0.0`,description:e.description.trim(),inputSchema:{type:`object`,properties:{}},outputSchema:{},approval:`policy`,sideEffect:`none`,executor:`python`,sourcePath:e.sourcePath.trim(),callableName:e.callableName.trim()}})}),i=await r.json().catch(()=>null);if(!r.ok){if(Db(i,n.setError)){m(!1);return}throw Error(i?.error?.message||`Tool 添加失败(${r.status})`)}Y(`Python Tool 已保存`,`${i.displayName||e.displayName.trim()} · SHA-256 已锁定`),t()}catch(e){f(e.message)}m(!1)}return(0,K.jsx)(Fg,{...n,children:(0,K.jsxs)(DD,{title:`添加 Python Tool`,subtitle:`源码先复制进 Catalog 并锁定 SHA-256,构建时进入不可变 Runtime 快照。`,onClose:e,footer:(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(`button`,{className:`button secondary`,type:`button`,onClick:e,children:`取消`}),(0,K.jsxs)(`button`,{className:`button accent`,type:`button`,onClick:n.handleSubmit(_),disabled:p,children:[(0,K.jsx)(z,{size:15}),(0,K.jsx)(`span`,{children:p?`正在保存`:`保存 Tool`})]})]}),children:[(0,K.jsxs)(`div`,{className:`segmented-control python-tool-source-mode`,"aria-label":`Python Tool 源码方式`,children:[(0,K.jsx)(`button`,{className:r===`upload`?`selected`:``,type:`button`,onClick:()=>{n.setValue(`sourceMode`,`upload`,{shouldValidate:!0}),f(``)},children:`上传文件`}),(0,K.jsx)(`button`,{className:r===`workspace`?`selected`:``,type:`button`,onClick:()=>{n.setValue(`sourceMode`,`workspace`,{shouldValidate:!0}),f(``)},children:`工作区路径`})]}),(0,K.jsx)(UR,{}),r===`upload`?(0,K.jsx)(X,{label:`Python 文件`,requirement:`required`,hint:`拖放 .py 文件,或点击选择;检查只解析 AST,不会执行脚本。`,children:(0,K.jsxs)(`div`,{children:[(0,K.jsx)(VR,{ariaLabel:`选择 Python Tool 文件`,accept:{"text/x-python":[`.py`],"text/plain":[`.py`]},maxSize:1048576,file:o,onFile:e=>{c(e),u(null),n.setValue(`callableName`,``)},onError:f}),(0,K.jsxs)(`button`,{className:`button secondary`,type:`button`,onClick:h,disabled:!o||p,children:[(0,K.jsx)(Ye,{size:15}),(0,K.jsx)(`span`,{children:p?`检查中`:`只读检查 Callable`})]}),l&&(0,K.jsxs)(`div`,{className:`python-tool-inspection-summary`,children:[(0,K.jsx)(z,{size:15}),(0,K.jsxs)(`span`,{children:[`SHA-256 `,l.sha256.slice(0,12),`… · 发现 `,l.callables.length,` 个公开函数`]})]})]})}):(0,K.jsx)(X,{label:`工作区 Python 文件`,requirement:`required`,htmlFor:`ptSource`,hint:`仅允许当前工作区内的普通 .py 文件;符号链接会被拒绝。`,error:n.formState.errors.sourcePath?.message,children:(0,K.jsx)(`input`,{id:`ptSource`,placeholder:`tools/my_tool.py`,...n.register(`sourcePath`)})}),(0,K.jsxs)(`div`,{className:`form-grid two-columns`,children:[(0,K.jsx)(X,{label:`显示名称`,requirement:`required`,htmlFor:`ptDisplayName`,error:n.formState.errors.displayName?.message,children:(0,K.jsx)(`input`,{id:`ptDisplayName`,placeholder:`例如:订单查询`,...n.register(`displayName`)})}),(0,K.jsx)(X,{label:`Tool 标识`,requirement:`required`,htmlFor:`ptName`,error:n.formState.errors.name?.message,children:(0,K.jsx)(`input`,{id:`ptName`,className:`mono`,...n.register(`name`)})}),(0,K.jsx)(X,{label:`Callable`,requirement:`required`,htmlFor:`ptCallable`,error:n.formState.errors.callableName?.message,children:r===`upload`?(0,K.jsx)(kh,{id:`ptCallable`,ariaLabel:`Callable`,value:a,placeholder:l?`选择公开函数`:`请先检查文件`,disabled:!l,options:(l?.callables||[]).map(e=>({value:e.name,label:`${e.async?`async `:``}${e.name}(${e.parameters.join(`, `)})`,description:e.description||void 0})),onValueChange:e=>{n.setValue(`callableName`,e,{shouldDirty:!0,shouldValidate:!0});let t=l?.callables?.find(t=>t.name===e);t?.description&&n.setValue(`description`,t.description)}}):(0,K.jsx)(`input`,{id:`ptCallable`,className:`mono`,...n.register(`callableName`)})})]}),(0,K.jsx)(X,{label:`说明`,requirement:`optional`,htmlFor:`ptDesc`,error:n.formState.errors.description?.message,children:(0,K.jsx)(`textarea`,{id:`ptDesc`,rows:3,...n.register(`description`)})}),d&&(0,K.jsx)(OD,{kind:`error`,title:`Tool 添加失败`,message:d})]})})}function wz(e){let t=e?e():new Uint8Array(4);if(!e&&globalThis.crypto?.getRandomValues)globalThis.crypto.getRandomValues(t);else if(!e)for(let e=0;ee.toString(16).padStart(2,`0`)).join(``)}`}function Tz({value:e,onChange:t,error:n,generate:r=wz,id:i=`agent-slug`,label:a=`本地标识`}){return(0,K.jsx)(X,{htmlFor:i,label:a,requirement:`generated`,hint:`默认生成唯一的本地 ID;可手动修改,云端 AgentId 由部署服务另行映射。`,error:n,children:(0,K.jsxs)(`div`,{className:`generated-id-control`,children:[(0,K.jsx)(`input`,{id:i,value:e,onChange:e=>t(e.target.value),pattern:`[a-z][a-z0-9-]{2,62}`,maxLength:63,spellCheck:!1,autoComplete:`off`}),(0,K.jsx)(`button`,{className:`icon-button tertiary`,type:`button`,"aria-label":`重新生成本地标识`,title:`重新生成`,onClick:()=>t(r()),children:(0,K.jsx)(Je,{size:15})})]})})}var Ez={resolving_model:{text:`正在理解你的需求…`,tip:`分析对话内容,确定 Agent 的框架与能力`},generating:{text:`正在理解你的需求…`,tip:`分析对话内容,确定 Agent 的框架与能力`},codex_writing:{text:`Codex 正在编写 Agent 配置…`,tip:`AI 编程助手正在沙箱中编写 agentkit.yaml,通常需要 1-3 分钟,质量优先`},validating:{text:`正在校验配置…`,tip:`检查配置完整性:名称、模型、运行时与提示词`},correcting:{text:`正在修正配置…`,tip:`发现少量问题,正在按校验意见修正后重新生成`},done:{text:`方案生成完成`,tip:``},failed:{text:`生成失败`,tip:``}};function Dz(e){return e&&Ez[e]?.text||Ez.resolving_model.text}function Oz(e){return e&&Ez[e]?.tip||Ez.resolving_model.tip}function kz(e){if(e<60)return`${e}s`;let t=Math.floor(e/60),n=e%60;return n?`${t}m${n}s`:`${t}m`}function Az({stage:e,startedAt:t,testId:n=`authoring-stage-shimmer`}){let[r,i]=(0,s.useState)(()=>Date.now());(0,s.useEffect)(()=>{if(!t||e===`done`||e===`failed`)return;let n=window.setInterval(()=>i(Date.now()),1e3);return()=>window.clearInterval(n)},[t,e]);let a=Oz(e),o=t?kz(Math.max(0,Math.floor((r-t)/1e3))):null,c=e===`done`||e===`failed`;return(0,K.jsxs)(`span`,{className:`authoring-stage`,"data-testid":n,"data-stage":e||`unknown`,children:[(0,K.jsx)(`span`,{className:`text-shimmer`,children:Dz(e)}),o&&!c&&(0,K.jsxs)(`span`,{className:`authoring-stage-elapsed`,children:[`已等待 `,o]}),a&&!c&&(0,K.jsx)(`span`,{className:`authoring-stage-tip`,children:a})]})}var jz=`agentkit.studio.agentDraft.v1`;function Mz(e){return e?.requiredSecretRefs?.[0]||e?.contract?.credentialRef||e?.contract?.credential_ref||e?.contract?.requiredSecretRefs?.[0]||e?.contract?.required_secret_refs?.[0]||``}var Nz={loose:{title:`宽松权限策略`,description:`本地 Tool 全部自动允许,外部操作仍需审批。`},strict:{title:`严格权限策略`,description:`只读 Tool 自动允许,外部或写入操作需要审批。`},custom:{title:`自定义权限策略`,description:`沿用每个 Tool Contract 中配置的审批策略。`}},Pz=[{value:`codex`,label:`Codex · ManagedRuntime`},{value:`adk`,label:`Google ADK · Python source`},{value:`langgraph`,label:`LangGraph · Python graph`}],Fz=[[`定义 Agent`,`模板与系统提示词`],[`绑定能力`,`Model · Tool · MCP · Skill`],[`Prompt 与策略`,`检查并调整`],[`检查并创建`,`构建与打开会话`]],Iz=new Set([`SUCCEEDED`,`FAILED`,`CANCELLED`,`TIMED_OUT`]),Lz=[`deepseek`,`glm`,`kimi`,`minimax`,`qwen`];function Rz(e){let t=String(e.contract?.model||e.name||``).toLowerCase(),n=t.includes(`/`)?t.split(`/`,2)[1]:t,r=n.replaceAll(`.`,`-`),i=Lz.findIndex(e=>r===e||r.startsWith(e===`qwen`?e:`${e}-`)),a=(n.match(/\d+/g)||[]).slice(0,8).map(e=>-Number(e));for(;a.length<8;)a.push(0);return[i<0?Lz.length:i,a,n]}function zz(e,t){let[n,r,i]=Rz(e),[a,o,s]=Rz(t);if(n!==a)return n-a;for(let e=0;enull);if(!t.ok)throw Error(n?.error?.message||`构建状态获取失败(${t.status})`);if(Iz.has(n?.status)){if(n.status!==`SUCCEEDED`)throw Error(n.error?.message||`构建未完成`);return n}await new Promise(e=>window.setTimeout(e,200))}throw Error(`构建等待超时`)}function Wz({editingAgentId:e,viewportMode:t,onCreated:n,onAgentsChanged:r}){let[i,a]=(0,s.useState)(`quick`),[o,c]=(0,s.useState)(!1),[l,u]=(0,s.useState)(`尚未保存`),[d,f]=(0,s.useState)([]),[p,m]=(0,s.useState)({}),[h,_]=(0,s.useState)(1),[v,y]=(0,s.useState)(1),b=p_({resolver:C_(mD),defaultValues:{name:`New Agent`,slug:wz(),runtimeType:`codex`,template:`blank`,prompt:``,description:``,audience:`产品与技术负责人`,language:`zh-CN`,depth:`deep`,format:`report`,systemPrompt:``,taskPrompt:``,buildAfterCreate:!0}}),{name:x,slug:S,runtimeType:C,template:w,description:T,prompt:E,audience:D,language:O,depth:k,format:M,systemPrompt:P,taskPrompt:F,buildAfterCreate:I}=b.watch(),[L,R]=(0,s.useState)([]),[B,V]=(0,s.useState)([]),[H,ee]=(0,s.useState)([]),[te,W]=(0,s.useState)([]),[ne,re]=(0,s.useState)(`strict`),[G,ie]=(0,s.useState)(`auto`),[ae,oe]=(0,s.useState)(`shadow`),[se,ce]=(0,s.useState)(!1),[le,ue]=(0,s.useState)(`shadow`),de=(0,s.useMemo)(()=>{let e={value:`auto`,label:`自动(推荐)`,description:`根据 Runtime 能力选择安全模式`};return C===`codex`?[e,{value:`native`,label:`原生 Runtime 管理`,description:`由 Codex 等原生 Runtime 管理最终上下文`}]:C===`langgraph`?[e,{value:`framework`,label:`框架管理`,description:`保留 LangGraph 原有行为`},{value:`ksadk`,label:`KsADK 管理`,description:`统一编译 Prompt 并规划上下文`}]:[e,{value:`framework`,label:`框架管理`,description:`保留 ADK 原有行为`}]},[C]),[pe,me]=(0,s.useState)(`idle`),[he,ge]=(0,s.useState)(`compose`),[_e,ve]=(0,s.useState)(``),[ye,be]=(0,s.useState)(!1),[xe,Ce]=(0,s.useState)(!1),[we,Te]=(0,s.useState)(null),[Ee,De]=(0,s.useState)(!1),Oe=(0,s.useRef)(null),ke=(0,s.useRef)(null),Ae=(0,s.useRef)(0),je=(0,s.useRef)(!1);(0,s.useEffect)(()=>{de.some(e=>e.value===G)||ie(`auto`)},[G,de]);let[Me,Pe]=(0,s.useState)([]),[Fe,Ie]=(0,s.useState)(``),[Re,Be]=(0,s.useState)(``),[Ve,Ue]=(0,s.useState)([]),[We,Ge]=(0,s.useState)([]),[Ke,Ze]=(0,s.useState)([]),[Qe,$e]=(0,s.useState)([]),[tt,rt]=(0,s.useState)(null),it=p_({resolver:C_(gD),defaultValues:{name:``,slug:wz(),runtimeType:`codex`,prompt:``,description:``,modelProfileId:void 0}}),[at,ot]=(0,s.useState)(!1),[st,ct]=(0,s.useState)(``),[lt,ut]=(0,s.useState)(``),[ft,mt]=(0,s.useState)(null),[gt,_t]=(0,s.useState)(null),[vt,yt]=(0,s.useState)(!1),bt=(0,s.useRef)(null);(0,s.useEffect)(()=>()=>bt.current?.abort(),[]);let[q,xt]=(0,s.useState)(null),[St,Ct]=(0,s.useState)(null),wt=p_({resolver:C_(_D),defaultValues:{name:``,slug:wz()}}),[Tt,Et]=(0,s.useState)(null),Dt=p_({resolver:C_(vD),defaultValues:{name:``,slug:wz(),path:`.`}}),Ot=Dt.watch(`path`),[kt,At]=(0,s.useState)(!1),[jt,Mt]=(0,s.useState)(``),Nt=(0,s.useCallback)(async()=>{try{let[e,t]=await Promise.all([g(`/api/v1/catalog/resources?limit=200`).then(e=>e.json()),g(`/api/v1/catalog/models`).then(e=>e.json()).catch(()=>null)]),n=e.items||[],r=n.filter(e=>e.kind===`model`&&(e.source===`local`||e.source===`market`)),i=t?.items?.length?[...r,...t.items]:n.filter(e=>e.kind===`model`);f([...i,...n.filter(e=>e.kind!==`model`)]);let a=[...new Set(i.map(Mz).filter(e=>e.startsWith(`env://`)))],o=await Promise.all(a.map(async e=>{let t=e.slice(6);try{let n=await g(`/api/v1/credentials/${encodeURIComponent(t)}`);return[e,n.ok?await n.json():{configured:!1}]}catch{return[e,{configured:!1}]}}));m(Object.fromEntries(o))}catch{}},[]);(0,s.useEffect)(()=>{Nt()},[Nt]);let Pt=(0,s.useMemo)(()=>d.filter(e=>e.kind===`model`&&[`ready`,`missing-secret`].includes(e.status)).sort(zz),[d]),Ft=(0,s.useMemo)(()=>d.filter(e=>e.kind===`tool`&&e.status===`ready`),[d]),It=(0,s.useMemo)(()=>d.filter(e=>e.kind===`mcp`),[d]),Lt=(0,s.useMemo)(()=>d.filter(e=>e.kind===`skill`&&e.status===`ready`),[d]),Rt=(0,s.useCallback)(e=>d.find(t=>t.resourceId===e),[d]),zt=(0,s.useCallback)(e=>{let t=Mz(e);return t?p[t]:void 0},[p]),Bt=(0,s.useCallback)(e=>e?zt(e)?.configured??e.status===`ready`:!1,[zt]),Vt=it.watch(`runtimeType`),Ht=(0,s.useMemo)(()=>Pt.map(e=>({value:e.resourceId,label:e.displayName,description:`${e.contract?.model||e.name} · ${Bt(e)?`凭证已配置`:`需配置凭证`}`})),[Bt,Pt]),Ut=(0,s.useMemo)(()=>Pt.find(e=>String(e.contract?.model||e.name).toLowerCase()===`deepseek-v4-flash`)?.resourceId||Pt[0]?.resourceId||``,[Pt]);(0,s.useEffect)(()=>{if(i!==`conversation`){je.current=!1;return}je.current||!Ut||(je.current=!0,Re||Be(Ut),Ve.length||Ue([Ut]))},[Ve.length,Re,i,Ut]);function Wt(e){let t=new Set(e),n=Pt.map(e=>e.resourceId).filter(e=>t.has(e));Ue(n),it.setValue(`modelProfileId`,n[0]||``,{shouldDirty:!0,shouldValidate:!0})}function Gt(){return`${jz}:local-workspace`}function Kt(){try{window.localStorage.setItem(Gt(),JSON.stringify({version:1,savedAt:new Date().toISOString(),mode:i,wizard:{step:h,maxStep:v,template:w,runtime:C,depth:k,selectedTools:B,selectedSkills:te,selectedMcp:H,selectedModels:L,policy:ne,contextOwnership:G,contextEngineRollout:ae,memoryEnabled:se,memoryWriteRollout:le},fields:{name:x,slug:S,description:T,prompt:E,audience:D,language:O,format:M,systemPrompt:P,taskPrompt:F,buildAfterCreate:I}})),u(`已保存 ${new Intl.DateTimeFormat(`zh-CN`,{hour:`2-digit`,minute:`2-digit`}).format(new Date)}`)}catch{}}function qt(){u(`有未保存更改`)}let Jt=(0,s.useCallback)(()=>({prompt:``,goal:E,description:T,taskPrompt:F,audience:D,language:O,depth:k,outputFormat:M,modelProfileId:L[0]||null,modelProfileIds:L,toolResourceIds:B,skillResourceIds:te,mcpResourceIds:H,policyTemplate:ne,executionStrategy:w===`research`?`plan-act-observe`:`direct`,maxSteps:w===`research`?28:12,timeoutSeconds:w===`research`?900:120}),[E,T,F,w,D,O,k,M,L,B,te,H,ne]),Yt=(0,s.useCallback)(async({preservePrompt:e=!0}={})=>{let t=++Ae.current;ge(`compose`),me(`composing`);try{let n=await g(`/api/v1/agent-templates/${w}:compose`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(Jt())}),r=await n.json();if(!n.ok)throw Error(r?.error?.message||`生成 Agent 配置失败(${n.status})`);if(t!==Ae.current)return;Oe.current=r;let i=r.spec?.bindings||{};V(C===`codex`?[]:(i.tools||[]).map(e=>e.resourceId)),W((i.skills||[]).map(e=>e.resourceId)),ee((i.mcpServers||[]).map(e=>e.resourceId));let a=i.modelProfileIds?.length?i.modelProfileIds:i.modelProfileId?[i.modelProfileId]:[];a.length&&R(a),(!e||!P.trim())&&b.setValue(`systemPrompt`,r.spec?.instructions?.system||E.trim(),{shouldDirty:!0}),(!e||!F.trim())&&b.setValue(`taskPrompt`,r.spec?.instructions?.task||``,{shouldDirty:!0}),me(`done`)}catch(e){t===Ae.current&&(me(`idle`),ve(e.message||`生成 Agent 配置失败`))}},[w,Jt,C,P,F,b]),Xt=(0,s.useCallback)(async()=>{let e=L[0];if(!e){ve(`请先选择用于优化 Prompt 的模型。`);return}let t=++Ae.current;ve(``),ge(`optimize`),me(`composing`);try{let n=[`请在不改变业务目标、Runtime 和已选能力的前提下,重写并增强这个 Agent 的角色与任务契约。`,`system 必须明确角色、目标、事实边界、失败处理和回答原则;task 必须明确每次请求的执行步骤、约束和交付结构。`,`不要返回解释,只生成可审查的 Agent Draft Patch。`,`Agent 名称:${x.trim()||`未命名 Agent`}`,`业务描述:${T.trim()||`未填写`}`,`原始目标:${E.trim()}`,`当前角色与系统提示词:${P.trim()||`未生成`}`,`当前任务契约:${F.trim()||`未生成`}`].join(`
-
-`),r=`quick-optimize-${Date.now()}-${Math.random().toString(36).slice(2,10)}`,i=await g(`/api/v1/authoring/conversations:compose`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({messages:[{role:`user`,content:n}],modelProfileId:e,runtimeType:C,agentModelProfileIds:L,agentDefaultModelProfileId:e,toolResourceIds:C===`codex`?[]:B,mcpResourceIds:H,skillResourceIds:te,requestId:r})}),a=await i.json().catch(()=>null);if(!i.ok)throw Error(a?.error?.message||`优化 Prompt 失败(${i.status})`);if(t!==Ae.current)return;if(a?.fallback?.active)throw Error(`生成模型暂时不可用,已保留当前角色与任务契约,请稍后重试。`);let o=a?.proposal?.spec||{},s=String(o.instructions?.system||a?.proposal?.instructions?.system||``).trim(),c=String(o.instructions?.task||a?.proposal?.instructions?.task||``).trim();if(!s||!c)throw Error(`生成模型没有同时返回角色提示词与任务契约,已保留当前内容。`);b.setValue(`systemPrompt`,s,{shouldDirty:!0,shouldValidate:!0}),b.setValue(`taskPrompt`,c,{shouldDirty:!0,shouldValidate:!0}),Oe.current?.spec&&(Oe.current={...Oe.current,spec:{...Oe.current.spec,instructions:{system:s,task:c}}}),qt(),me(`done`)}catch(e){t===Ae.current&&(me(`done`),ve(e.message||`优化 Prompt 失败,已保留当前内容。`))}},[T,x,E,b,C,H,L,te,B,P,F]);async function Zt(e){if(!(e<1||e>4)){if(e>h){if(h===1&&!await b.trigger([`name`,`slug`,`runtimeType`,`prompt`,`audience`],{shouldFocus:!0})){ve(`请修正标记字段后继续。`);return}if(h===2&&!L.length){ve(`请至少选择一个模型后继续。`);return}}ve(``),e===3&&pe===`idle`&&Yt({preservePrompt:!0}),_(e),y(t=>Math.max(t,e)),qt()}}async function Qt(e){ve(``),be(!0);try{if(Oe.current||await Yt({preservePrompt:!1}),!Oe.current)throw Error(`未能生成 Agent 配置,请检查模板和能力绑定后重试。`);let t=JSON.parse(JSON.stringify(Oe.current?.spec||{}));t.instructions={system:e.systemPrompt.trim(),task:e.taskPrompt.trim()},t.description=e.description.trim()||t.description,t.context={...t.context||{},ownership:G,promptOwnership:G===`ksadk`?`ksadk`:G===`framework`?`framework`:t.context?.promptOwnership||`framework`,rollout:{...t.context?.rollout||{},contextEngine:ae,memoryWrite:se?le:`off`}},t.memory={...t.memory||{},enabled:se,recall:{...t.memory?.recall||{},enabled:se}};let r=await g(`/api/v1/authoring/quick`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({name:e.name.trim(),slug:e.slug.trim(),runtimeType:e.runtimeType,description:t.description,template:e.template,spec:t})}),i=await r.json().catch(()=>null);if(!r.ok){if(Db(i,b.setError)){_(1);return}throw Error(i?.error?.message||`创建失败(${r.status})`)}let a=String(i?.metadata?.id||``);if(!a)throw Error(`创建响应未返回 Agent 标识`);if(e.buildAfterCreate){let e=Number(i?.metadata?.revision||1),t=await g(`/api/v1/agents/${encodeURIComponent(a)}/builds`,{method:`POST`,headers:{"Content-Type":`application/json`,"Idempotency-Key":`build-${a}-r${e}-${Date.now()}`},body:JSON.stringify({revision:e,runEvaluation:!1})}),n=await t.json().catch(()=>null);if(!t.ok)throw Error(n?.error?.message||`构建提交失败(${t.status})`);let r=String(n?.id||``);if(!r)throw Error(`构建响应未返回操作标识`);await Uz(r)}try{window.localStorage.removeItem(Gt())}catch{}n(a,e.buildAfterCreate)}catch(e){ve(e.message||`创建失败`)}finally{be(!1)}}async function $t(){let e=Fe.trim();if(!e||!Re||!Ve.length){ct(`请输入需求并选择用于构建的模型。`);return}if(at)return;ct(``),ut(``);let t=[...Me,{role:`user`,content:e}];Pe(t),Ie(``),ot(!0),_t(Date.now());let n=`conv-${Date.now()}-${Math.random().toString(36).slice(2,10)}`;mt(`resolving_model`),en(n);try{let e=await g(`/api/v1/authoring/conversations:compose`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({messages:t,modelProfileId:Re,runtimeType:Vt,agentModelProfileIds:Ve,agentDefaultModelProfileId:Ve[0]||null,toolResourceIds:Vt===`codex`?[]:We,mcpResourceIds:Ke,skillResourceIds:Qe,requestId:n})}),r=await e.json();if(!e.ok)throw Error(r?.error?.message||`生成失败(${e.status})`);mt(`done`),r?.fallback?.active&&ut(`所选生成模型暂时未能返回可用草稿。Studio 已按当前对话和你选定的 Runtime、模型与能力资源生成可编辑的本地兜底草稿;确认创建前请检查并补全。`),rt(r.proposal),yt(!1);let i=r.proposal.spec||{description:r.proposal.description||``,instructions:r.proposal.instructions||{}};it.reset({name:r.proposal.name||``,slug:wz(),runtimeType:Vt,prompt:i.instructions?.system||``,description:i.description||r.proposal.description||``,modelProfileId:i.bindings?.modelProfileId||Ve[0]}),Pe([...t,{role:`assistant`,content:JSON.stringify(Vz(r.proposal))}])}catch(e){mt(`failed`),ct(e.message||`对话构建失败`)}finally{bt.current?.abort(),bt.current=null,ot(!1)}}function en(e){let t=new AbortController;return bt.current?.abort(),bt.current=t,(async()=>{for(;!t.signal.aborted;){if(await new Promise(e=>window.setTimeout(e,800)),t.signal.aborted)return;try{let n=await g(`/api/v1/authoring/conversations:status/${encodeURIComponent(e)}`,{signal:t.signal});if(!n.ok)continue;let r=await n.json();r?.stage&&mt(String(r.stage))}catch{return}}})(),t}async function tn(e){if(tt){ot(!0),ct(``);try{let t=tt.spec||{description:tt.description||``,instructions:tt.instructions||{}},r=Ve[0]||e.modelProfileId||null,i=Ve.length?Ve:r?[r]:[],a=e.runtimeType===`codex`?[]:We,o=Hz(t,{description:e.description?.trim()||t.description||tt.description||``,runtime:null,model:null,instructions:{system:e.prompt.trim(),task:t.instructions?.task||``},bindings:{modelProfileId:r,modelProfileIds:i,modelParameters:null,policyTemplate:`strict`,tools:a.map(e=>({resourceId:e})),mcpServers:Ke.map(e=>({resourceId:e})),skills:Qe.map(e=>({resourceId:e}))}}),s=await g(`/api/v1/authoring/quick`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({name:e.name.trim(),slug:e.slug.trim(),runtimeType:e.runtimeType,description:o.description,spec:o})}),c=await s.json().catch(()=>null);if(!s.ok){if(Db(c,it.setError))return;throw Error(c?.error?.message||`创建失败(${s.status})`)}n(c?.metadata?.id)}catch(e){ct(e.message||`创建失败`)}finally{ot(!1)}}}async function nn(){if(q){At(!0),Mt(``);try{let e=new FormData;e.append(`file`,q);let t=await g(`/api/v1/authoring/imports:inspect`,{method:`POST`,body:e}),n=await t.json();if(!t.ok)throw Error(n?.error?.message||`检查失败(${t.status})`);Ct(n),wt.reset({name:n.displayName||``,slug:wz()})}catch(e){Mt(e.message)}finally{At(!1)}}}async function rn(e){if(St){At(!0),Mt(``);try{let t=await g(`/api/v1/authoring/imports/${encodeURIComponent(St.inspectionToken)}:commit`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({name:e.name.trim(),slug:e.slug.trim()||void 0})}),r=await t.json();if(!t.ok){if(Db(r,wt.setError))return;throw Error(r?.error?.message||`导入失败(${t.status})`)}n(r?.metadata?.id)}catch(e){Mt(e.message)}finally{At(!1)}}}async function an(){if(await Dt.trigger(`path`)){At(!0),Mt(``);try{let e=await g(`/api/v1/authoring/projects:inspect`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({path:Ot.trim()})}),t=await e.json();if(!e.ok)throw Error(t?.error?.message||`检测失败(${e.status})`);Et(t),Dt.reset({name:t.name||`Detected Agent`,slug:wz(),path:Ot})}catch(e){Mt(e.message)}finally{At(!1)}}}async function on(e){if(Tt){At(!0),Mt(``);try{let t=await g(`/api/v1/authoring/projects/${encodeURIComponent(Tt.inspectionToken)}:commit`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({name:e.name.trim(),slug:e.slug.trim()||void 0,modelProfileId:Pt[0]?.resourceId||null})}),r=await t.json();if(!t.ok){if(Db(r,Dt.setError))return;throw Error(r?.error?.message||`创建失败(${t.status})`)}n(r?.metadata?.id)}catch(e){Mt(e.message)}finally{At(!1)}}}let sn=w===`research`?`深度调研`:`空白 Agent`,cn={codex:`Codex`,adk:`ADK`,langgraph:`LangGraph`}[C]||C,ln=Nz[ne],un=L.map(e=>Rt(e)?.displayName||e).join(`、`)||`待选择`,dn=L.map(Rt).filter(e=>!!e),fn=dn.length===0?`未选择模型;Agent 可以先构建,但运行前需要配置。`:dn.every(Bt)?`已选 ${dn.length} 个模型 · 凭证已配置`:`部分模型凭证未配置;Agent 可以先构建,但运行前需要配置 API Key。`,pn=dn.some(e=>!Bt(e)),mn=C===`codex`,hn=mn?[...Fz.slice(0,3),[`检查并创建`,`校验声明与打开会话`]]:Fz,gn=(0,s.useCallback)((e=!1)=>{c(!1),e&&requestAnimationFrame(()=>ke.current?.focus())},[]);(0,s.useEffect)(()=>{t!==`compact`&&gn()},[gn,t]);function _n(e){a(e),t===`compact`&&gn(!0)}let vn=[{id:`quick`,icon:ht,label:`快速创建`,sub:`配置 YAML Revision`},{id:`conversation`,icon:Ne,label:`对话构建`,sub:`多轮生成 Draft Patch`},{id:`import`,icon:dt,label:`导入`,sub:`YAML / Agent ZIP`},{id:`project`,icon:Se,label:`项目识别`,sub:`检测 ADK / LangGraph`}],yn=!e&&i===`conversation`?`workbench`:`document`,bn=t=>(0,K.jsxs)(`div`,{className:`create-rail-panel`,children:[t&&(0,K.jsx)(`div`,{className:`create-rail-label`,children:`创建方式`}),!e&&(0,K.jsx)(`nav`,{className:`authoring-mode-tabs`,"aria-label":`创建方式`,role:`tablist`,children:vn.map(e=>{let t=e.icon;return(0,K.jsxs)(`button`,{id:`authoring-tab-${e.id}`,className:i===e.id?`active`:``,type:`button`,role:`tab`,"aria-selected":i===e.id,"aria-controls":`authoring-panel-${e.id}`,title:`${e.label}:${e.sub}`,onClick:()=>_n(e.id),children:[(0,K.jsx)(t,{size:16}),(0,K.jsxs)(`span`,{children:[(0,K.jsx)(`strong`,{children:e.label}),(0,K.jsx)(`small`,{children:e.sub})]})]},e.id)})}),(e||i===`quick`)&&(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(`div`,{className:`create-rail-divider`}),(0,K.jsx)(`div`,{className:`create-rail-label wizard-step-label`,children:`配置步骤`}),(0,K.jsx)(`nav`,{className:`wizard-steps`,"aria-label":`创建步骤`,children:hn.map((t,n)=>{let r=n+1,i=!e&&rv,onClick:()=>Zt(r),children:[(0,K.jsx)(`span`,{className:`step-number`,children:i?(0,K.jsx)(z,{size:13,strokeWidth:3}):r}),(0,K.jsxs)(`span`,{children:[(0,K.jsx)(`strong`,{children:t[0]}),(0,K.jsx)(`small`,{children:t[1]})]})]},r)})})]})]});return(0,K.jsxs)(`div`,{className:`create-shell page-container`,"data-layout":yn,"data-authoring-mode":i,"data-editing":e?`true`:`false`,children:[(0,K.jsxs)(gd,{children:[!e&&t===`compact`&&(0,K.jsx)(`button`,{ref:ke,className:`icon-button compact-create-rail-trigger`,type:`button`,"aria-label":`查看创建入口与配置步骤`,title:`查看创建入口与配置步骤`,"aria-expanded":o,"aria-controls":`createRail`,onClick:()=>c(e=>!e),children:(0,K.jsx)(He,{size:16})}),!e&&i===`quick`&&(0,K.jsx)(`span`,{className:`tag`,children:l})]}),(0,K.jsxs)(`div`,{className:`create-workbench`,children:[!e&&t!==`compact`&&(0,K.jsx)(`aside`,{id:`createRail`,className:`create-rail`,"aria-label":`创建方式与步骤`,children:bn(!0)}),!e&&t===`compact`&&o&&(0,K.jsx)(Sa,{open:!0,compact:!0,title:`创建方式`,subtitle:`切换创建入口,或查看当前配置步骤。`,onOpenChange:e=>{e||gn(!0)},children:(0,K.jsx)(`div`,{id:`createRail`,children:bn(!1)})}),(0,K.jsxs)(`div`,{className:`create-stage`,children:[e&&(0,K.jsx)(ED,{agentId:e,catalog:d,onSaved:(e,t)=>n(e,t),onAppearanceSaved:r}),!e&&i===`conversation`&&(0,K.jsxs)(`section`,{id:`authoring-panel-conversation`,className:`authoring-mode-panel`,role:`tabpanel`,"aria-labelledby":`authoring-tab-conversation`,children:[(0,K.jsxs)(`div`,{className:`authoring-panel-heading conversation-panel-heading`,children:[(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`span`,{className:`eyebrow`,children:`Conversation authoring`}),(0,K.jsx)(`h2`,{children:`对话创建 Agent`}),(0,K.jsx)(`p`,{children:`描述目标,逐轮完善;准备好后再检查并确认草稿。`})]}),(0,K.jsx)(`span`,{className:`tag`,children:`不会自动创建`})]}),(0,K.jsxs)(`div`,{className:`conversation-authoring-layout`,"data-draft-state":tt?vt?`review`:`summary`:`empty`,children:[(0,K.jsxs)(`section`,{className:`conversation-chat`,"aria-label":`对话创建`,children:[(0,K.jsxs)(`div`,{className:`conversation-chat-header`,children:[(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`strong`,{children:`从需求开始`}),(0,K.jsx)(`p`,{children:`像对话一样说明要做什么;后续可以继续补充边界和能力。`})]}),(0,K.jsx)(`span`,{className:`conversation-context-state`,children:Me.length?`${Math.ceil(Me.length/2)} 轮上下文`:`持续保留上下文`})]}),(0,K.jsxs)(`div`,{className:`conversation-transcript`,"aria-live":`polite`,children:[Me.length===0&&(0,K.jsxs)(`div`,{className:`conversation-empty-state`,children:[(0,K.jsx)(nt,{size:18,"aria-hidden":`true`}),(0,K.jsx)(`strong`,{children:`从一句需求开始`}),(0,K.jsx)(`p`,{children:`例如:帮我做一个销售日报 Agent,能汇总群聊记录并标出待跟进事项。`})]}),Me.map((e,t)=>{let n=e.role===`user`?null:Bz(e.content);return(0,K.jsx)(`div`,{className:`conversation-message ${e.role===`user`?`user`:`assistant`}`,children:e.role===`user`?(0,K.jsx)(`p`,{children:e.content}):(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(`strong`,{children:n?.title}),(0,K.jsx)(`p`,{children:n?.body})]})},t)}),at&&(0,K.jsxs)(`div`,{className:`conversation-thinking`,role:`status`,children:[(0,K.jsxs)(`span`,{className:`conversation-thinking-orb`,"aria-hidden":`true`,children:[(0,K.jsx)(`i`,{}),(0,K.jsx)(`i`,{}),(0,K.jsx)(`i`,{})]}),(0,K.jsx)(Az,{stage:ft,startedAt:gt})]})]}),st&&(0,K.jsxs)(`div`,{className:`inline-alert error`,children:[(0,K.jsx)(U,{size:16}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`strong`,{children:`对话构建失败`}),(0,K.jsx)(`p`,{children:st})]})]}),lt&&(0,K.jsxs)(`div`,{className:`inline-alert warning`,role:`status`,children:[(0,K.jsx)(U,{size:16}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`strong`,{children:`已生成本地兜底草稿`}),(0,K.jsx)(`p`,{children:lt})]})]}),(0,K.jsxs)(`form`,{className:`conversation-composer`,onSubmit:e=>{e.preventDefault(),$t()},children:[(0,K.jsx)(`textarea`,{rows:3,placeholder:`描述你想创建或调整的 Agent…`,value:Fe,onChange:e=>Ie(e.target.value),onKeyDown:e=>{let t=e.nativeEvent;e.key===`Enter`&&!e.shiftKey&&!t.isComposing&&t.keyCode!==229&&(e.preventDefault(),$t())}}),(0,K.jsxs)(`div`,{className:`conversation-composer-footer`,children:[(0,K.jsxs)(`span`,{children:[`Enter 发送 `,(0,K.jsx)(`b`,{children:`·`}),` Shift + Enter 换行`]}),(0,K.jsx)(`button`,{className:`conversation-send-button`,type:`submit`,disabled:at||!Fe.trim(),"aria-label":at?`正在生成`:`生成方案`,title:at?`正在生成`:`生成方案`,children:(0,K.jsx)(Xe,{size:16,"aria-hidden":`true`})})]})]}),(0,K.jsxs)(`details`,{className:`conversation-settings`,children:[(0,K.jsxs)(`summary`,{children:[(0,K.jsx)(`span`,{children:`部署配置`}),(0,K.jsxs)(`small`,{children:[Pz.find(e=>e.value===Vt)?.label.split(` · `)[0]||`Runtime`,` · `,Ve.length||0,` 个模型 · `,Qe.length+Ke.length+(Vt===`codex`?0:We.length),` 项能力`]})]}),(0,K.jsxs)(`div`,{className:`conversation-settings-body`,children:[(0,K.jsx)(X,{label:`生成模型 Profile`,className:`authoring-model-field`,footer:(0,K.jsx)(`span`,{children:`只决定本次如何生成草稿;默认 DeepSeek V4 Flash。`}),children:(0,K.jsx)(kh,{ariaLabel:`选择用于生成草稿的模型`,value:Re,options:Ht,onValueChange:Be})}),(0,K.jsx)(X,{label:`Runtime`,requirement:`required`,htmlFor:`conversationRuntime`,error:it.formState.errors.runtimeType?.message,children:(0,K.jsx)(kh,{id:`conversationRuntime`,ariaLabel:`Runtime`,value:Vt,options:Pz,onValueChange:e=>it.setValue(`runtimeType`,e,{shouldDirty:!0,shouldValidate:!0})})}),(0,K.jsx)(X,{label:`Agent 可用模型`,className:`authoring-model-field`,footer:(0,K.jsx)(`span`,{children:`可多选;按目录中最新的模型作为运行默认值。`}),children:(0,K.jsx)(yb,{ariaLabel:`选择对话 Agent 模型`,items:Pt,selectedIds:Ve,getId:e=>e.resourceId,getLabel:e=>e.displayName,getDescription:e=>`${e.contract?.model||e.name} · ${Bt(e)?`凭证已配置`:`需配置凭证`}`,onChange:Wt,searchPlaceholder:`搜索 Agent 模型`,emptyMessage:`没有可用模型`})}),(0,K.jsx)(X,{label:`Skill`,className:`authoring-model-field`,children:(0,K.jsx)(yb,{ariaLabel:`选择对话 Agent Skill`,items:Lt,selectedIds:Qe,getId:e=>e.resourceId,getLabel:e=>e.displayName,getDescription:e=>`${e.version} · ${e.description||`版本化 Skill`}`,onChange:$e,searchPlaceholder:`搜索 Skill`,emptyMessage:`没有已安装的 Skill`})}),(0,K.jsx)(X,{label:`MCP Server`,className:`authoring-model-field`,children:(0,K.jsx)(yb,{ariaLabel:`选择对话 Agent MCP Server`,items:It,selectedIds:Ke,getId:e=>e.resourceId,getLabel:e=>e.displayName,getDescription:e=>`${e.description||`MCP Server`} · ${e.health?.toolCount||0} Tool`,onChange:Ze,searchPlaceholder:`搜索 MCP Server`,emptyMessage:`没有已连接的 MCP Server`})}),Vt===`codex`?(0,K.jsx)(`p`,{className:`helper conversation-runtime-note`,children:`Codex 使用原生工具、MCP 和 Skill;KsADK Tool 仅绑定到 ADK / LangGraph 通用 Agent。`}):(0,K.jsx)(X,{label:`KsADK Tool`,className:`authoring-model-field`,children:(0,K.jsx)(yb,{ariaLabel:`选择对话 Agent Tool`,items:Ft,selectedIds:We,getId:e=>e.resourceId,getLabel:e=>e.displayName,getDescription:e=>`${e.version} · ${e.description||`本地 Tool`}`,onChange:Ge,searchPlaceholder:`搜索 Tool`,emptyMessage:`没有可用 Tool`})})]})]})]}),(0,K.jsx)(Fg,{...it,children:(0,K.jsxs)(`aside`,{className:`conversation-draft-rail${tt?vt?` is-reviewing`:``:` is-empty`}`,"aria-label":`Draft Patch`,children:[(0,K.jsxs)(`div`,{className:`conversation-draft-rail-heading`,children:[(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`strong`,{children:`Draft Patch`}),(0,K.jsx)(`p`,{children:tt?`草稿已随对话更新`:`对话后生成,可随时检查`})]}),(0,K.jsx)(`span`,{className:`badge`,"data-state":tt?`ready`:`pending`,children:tt?`已更新`:`待生成`})]}),tt?vt?(0,K.jsxs)(`form`,{className:`conversation-review-form`,onSubmit:it.handleSubmit(tn),noValidate:!0,children:[(0,K.jsxs)(`div`,{className:`conversation-review-heading`,children:[(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`strong`,{children:`检查并确认`}),(0,K.jsx)(`p`,{children:`编辑名称、提示词或打开左侧部署配置;确认后才会创建 Revision。`})]}),(0,K.jsx)(`button`,{type:`button`,className:`button secondary`,onClick:()=>yt(!1),children:`收起`})]}),(0,K.jsxs)(`div`,{className:`form-grid two-columns`,children:[(0,K.jsx)(X,{label:`显示名称`,requirement:`required`,htmlFor:`conversationName`,error:it.formState.errors.name?.message,children:(0,K.jsx)(`input`,{id:`conversationName`,...it.register(`name`)})}),(0,K.jsx)(Tz,{id:`conversationSlug`,value:it.watch(`slug`),onChange:e=>it.setValue(`slug`,e,{shouldDirty:!0,shouldValidate:!0}),error:it.formState.errors.slug?.message})]}),(0,K.jsx)(X,{label:`系统提示词`,requirement:`required`,htmlFor:`conversationPrompt`,error:it.formState.errors.prompt?.message,children:(0,K.jsx)(`textarea`,{id:`conversationPrompt`,rows:8,...it.register(`prompt`)})}),(0,K.jsx)(`div`,{className:`authoring-card-actions`,children:(0,K.jsxs)(`button`,{className:`button accent`,type:`submit`,disabled:at,children:[(0,K.jsx)(z,{size:16}),(0,K.jsx)(`span`,{children:`确认并创建 Revision`})]})})]}):(0,K.jsxs)(`div`,{className:`conversation-draft-summary`,children:[(0,K.jsxs)(`div`,{className:`conversation-draft-title`,children:[(0,K.jsx)(N,{size:18,"aria-hidden":`true`}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`strong`,{children:it.watch(`name`)||tt.name}),(0,K.jsx)(`p`,{children:it.watch(`description`)||tt.description||`已生成可编辑的 Agent 草稿`})]})]}),(0,K.jsxs)(`div`,{className:`conversation-preview-section`,children:[(0,K.jsx)(`span`,{children:`角色与系统提示词`}),(0,K.jsx)(`p`,{children:it.watch(`prompt`)||tt?.spec?.instructions?.system||`尚未生成`})]}),(0,K.jsxs)(`div`,{className:`conversation-preview-section`,children:[(0,K.jsx)(`span`,{children:`任务契约`}),(0,K.jsx)(`p`,{children:tt?.spec?.instructions?.task||`根据对话目标完成任务。`})]}),(0,K.jsxs)(`div`,{className:`conversation-draft-tags`,children:[(0,K.jsx)(`span`,{children:Pz.find(e=>e.value===Vt)?.label.split(` · `)[0]||`Runtime`}),(0,K.jsxs)(`span`,{children:[Ve.length,` 个模型`]}),Qe.length+Ke.length+(Vt===`codex`?0:We.length)>0&&(0,K.jsxs)(`span`,{children:[Qe.length+Ke.length+(Vt===`codex`?0:We.length),` 项能力`]})]}),(0,K.jsxs)(`button`,{className:`button accent`,type:`button`,onClick:()=>yt(!0),children:[(0,K.jsx)(He,{size:16}),(0,K.jsx)(`span`,{children:`编辑并创建`})]})]}):(0,K.jsxs)(`div`,{className:`conversation-draft-empty`,children:[(0,K.jsx)(N,{size:20,"aria-hidden":`true`}),(0,K.jsx)(`strong`,{children:`从对话开始`}),(0,K.jsx)(`p`,{children:`先描述目标。草稿会在这里显示摘要,不会自动创建 Agent。`})]})]})})]})]}),!e&&i===`import`&&(0,K.jsxs)(`section`,{id:`authoring-panel-import`,className:`authoring-mode-panel`,role:`tabpanel`,"aria-labelledby":`authoring-tab-import`,children:[(0,K.jsxs)(`div`,{className:`authoring-panel-heading`,children:[(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`span`,{className:`eyebrow`,children:`Agent import`}),(0,K.jsx)(`h2`,{children:`检查并导入 Agent`}),(0,K.jsx)(`p`,{children:`先解析格式、Runtime、文件清单和 SHA-256,确认后再写入。`})]}),(0,K.jsx)(`span`,{className:`tag`,children:`YAML / ZIP`})]}),(0,K.jsxs)(`div`,{className:`authoring-inspect-grid`,children:[(0,K.jsxs)(`form`,{className:`authoring-input-card`,onSubmit:e=>{e.preventDefault(),nn()},children:[(0,K.jsxs)(`div`,{className:`authoring-section-heading`,children:[(0,K.jsx)(`span`,{className:`authoring-section-index`,children:`01`}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`strong`,{children:`选择 Agent 文件`}),(0,K.jsx)(`p`,{children:`支持 YAML 或 ZIP;检查过程不会写入 Catalog。`})]})]}),(0,K.jsx)(X,{label:`Agent 文件`,requirement:`required`,hint:`拖放 Agent YAML / ZIP,或点击选择`,children:(0,K.jsx)(`div`,{children:(0,K.jsx)(VR,{ariaLabel:`选择 Agent YAML 或 ZIP`,accept:{"application/zip":[`.zip`],"application/yaml":[`.yaml`,`.yml`],"text/yaml":[`.yaml`,`.yml`]},maxSize:104857600,file:q,onFile:e=>{xt(e),Ct(null)},onError:Mt})})}),(0,K.jsx)(`div`,{className:`authoring-card-actions`,children:(0,K.jsxs)(`button`,{className:`button accent`,type:`submit`,disabled:kt,children:[(0,K.jsx)(Ye,{size:16}),(0,K.jsx)(`span`,{children:kt?`检查中`:`只读检查`})]})})]}),(0,K.jsx)(Fg,{...wt,children:(0,K.jsxs)(`form`,{className:`authoring-inspection-card`,onSubmit:wt.handleSubmit(rn),noValidate:!0,children:[(0,K.jsxs)(`div`,{className:`authoring-section-heading`,children:[(0,K.jsx)(`span`,{className:`authoring-section-index`,children:`02`}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`strong`,{children:`检查并确认`}),(0,K.jsx)(`p`,{children:`核对解析结果、警告与 RuntimeRef,再执行导入。`})]}),(0,K.jsx)(`span`,{className:`badge`,"data-state":St?`ready`:`pending`,"aria-live":`polite`,children:St?`检查完成`:`等待检查`})]}),(0,K.jsxs)(`div`,{className:`form-grid two-columns`,children:[(0,K.jsx)(X,{label:`显示名称`,requirement:`required`,htmlFor:`importName`,error:wt.formState.errors.name?.message,children:(0,K.jsx)(`input`,{id:`importName`,...wt.register(`name`)})}),(0,K.jsx)(Tz,{id:`importSlug`,value:wt.watch(`slug`),onChange:e=>wt.setValue(`slug`,e,{shouldDirty:!0,shouldValidate:!0}),error:wt.formState.errors.slug?.message})]}),(0,K.jsx)(xb,{code:St?JSON.stringify(St,null,2):`选择文件并检查后显示解析结果、警告和 RuntimeRef。`,language:St?`json`:`text`,filename:`agent-import-inspection.json`,showLineNumbers:!!St,wrap:!St}),(0,K.jsx)(`div`,{className:`authoring-card-actions`,children:(0,K.jsxs)(`button`,{className:`button accent`,type:`submit`,disabled:!St||kt,children:[(0,K.jsx)(z,{size:16}),(0,K.jsx)(`span`,{children:`确认导入`})]})})]})})]}),jt&&(0,K.jsxs)(`div`,{className:`inline-alert error`,children:[(0,K.jsx)(U,{size:16}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`strong`,{children:`操作失败`}),(0,K.jsx)(`p`,{children:jt})]})]})]}),!e&&i===`project`&&(0,K.jsxs)(`section`,{id:`authoring-panel-project`,className:`authoring-mode-panel`,role:`tabpanel`,"aria-labelledby":`authoring-tab-project`,children:[(0,K.jsxs)(`div`,{className:`authoring-panel-heading`,children:[(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`span`,{className:`eyebrow`,children:`Project detection`}),(0,K.jsx)(`h2`,{children:`识别现有项目`}),(0,K.jsx)(`p`,{children:`复用 FrameworkDetector 展示证据和置信度;确认前不修改源码。`})]}),(0,K.jsx)(`span`,{className:`tag`,children:`Workspace only`})]}),(0,K.jsx)(Fg,{...Dt,children:(0,K.jsxs)(`div`,{className:`authoring-inspect-grid`,children:[(0,K.jsxs)(`form`,{className:`authoring-input-card`,onSubmit:e=>{e.preventDefault(),an()},children:[(0,K.jsxs)(`div`,{className:`authoring-section-heading`,children:[(0,K.jsx)(`span`,{className:`authoring-section-index`,children:`01`}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`strong`,{children:`指定项目路径`}),(0,K.jsx)(`p`,{children:`仅识别当前工作区内的目录,不会修改项目源码。`})]})]}),(0,K.jsx)(X,{label:`工作区相对路径`,requirement:`required`,htmlFor:`projectPath`,hint:`仅检查当前工作区内的目录,不会修改项目源码。`,error:Dt.formState.errors.path?.message,children:(0,K.jsx)(`input`,{id:`projectPath`,...Dt.register(`path`)})}),(0,K.jsx)(`div`,{className:`authoring-card-actions`,children:(0,K.jsxs)(`button`,{className:`button accent`,type:`submit`,disabled:kt,children:[(0,K.jsx)(Ye,{size:16}),(0,K.jsx)(`span`,{children:kt?`检测中`:`检测项目`})]})})]}),(0,K.jsxs)(`form`,{className:`authoring-inspection-card`,onSubmit:Dt.handleSubmit(on),noValidate:!0,children:[(0,K.jsxs)(`div`,{className:`authoring-section-heading`,children:[(0,K.jsx)(`span`,{className:`authoring-section-index`,children:`02`}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`strong`,{children:`检查并确认`}),(0,K.jsx)(`p`,{children:`核对 FrameworkDetector 证据与置信度,再创建 Revision。`})]}),(0,K.jsx)(`span`,{className:`badge`,"data-state":Tt?`ready`:`pending`,"aria-live":`polite`,children:Tt?`检测完成`:`等待检测`})]}),(0,K.jsxs)(`div`,{className:`form-grid two-columns`,children:[(0,K.jsx)(X,{label:`显示名称`,requirement:`required`,htmlFor:`projectName`,error:Dt.formState.errors.name?.message,children:(0,K.jsx)(`input`,{id:`projectName`,...Dt.register(`name`)})}),(0,K.jsx)(Tz,{id:`projectSlug`,value:Dt.watch(`slug`),onChange:e=>Dt.setValue(`slug`,e,{shouldDirty:!0,shouldValidate:!0}),error:Dt.formState.errors.slug?.message})]}),(0,K.jsx)(xb,{code:Tt?JSON.stringify(Tt,null,2):`输入本地项目路径后显示 FrameworkDetector 证据。`,language:Tt?`json`:`text`,filename:`project-inspection.json`,showLineNumbers:!!Tt,wrap:!Tt}),(0,K.jsx)(`div`,{className:`authoring-card-actions`,children:(0,K.jsxs)(`button`,{className:`button accent`,type:`submit`,disabled:!Tt||kt,children:[(0,K.jsx)(z,{size:16}),(0,K.jsx)(`span`,{children:`确认创建 Revision`})]})})]})]})}),jt&&(0,K.jsxs)(`div`,{className:`inline-alert error`,children:[(0,K.jsx)(U,{size:16}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`strong`,{children:`操作失败`}),(0,K.jsx)(`p`,{children:jt})]})]})]}),!e&&i===`quick`&&(0,K.jsxs)(`div`,{id:`authoring-panel-quick`,className:`wizard-layout`,role:`tabpanel`,"aria-labelledby":`authoring-tab-quick`,children:[(0,K.jsx)(Fg,{...b,children:(0,K.jsxs)(`form`,{id:`quickAgentForm`,className:`wizard-content`,onSubmit:b.handleSubmit(Qt),noValidate:!0,children:[(0,K.jsxs)(`section`,{className:`wizard-panel${h===1?` active`:``}`,hidden:h!==1,children:[(0,K.jsxs)(`div`,{className:`panel-heading`,children:[(0,K.jsx)(`span`,{className:`panel-index`,children:`01`}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`h2`,{children:`定义 Agent 的角色`}),(0,K.jsx)(`p`,{children:`选择起点,并说明 Agent 的职责、边界和期望行为。`})]})]}),(0,K.jsxs)(`div`,{className:`field`,children:[(0,K.jsx)(`label`,{children:`创建方式`}),(0,K.jsxs)(`div`,{className:`template-grid`,children:[(0,K.jsxs)(`button`,{className:`template-card${w===`blank`?` selected`:``}`,type:`button`,onClick:()=>{b.setValue(`template`,`blank`,{shouldDirty:!0}),qt()},children:[(0,K.jsx)(`span`,{className:`template-icon`,children:(0,K.jsx)(N,{size:18})}),(0,K.jsxs)(`span`,{children:[(0,K.jsx)(`strong`,{children:`空白 Agent`}),(0,K.jsx)(`small`,{children:`输入系统提示词,自主选择能力和执行策略`})]}),(0,K.jsx)(`span`,{className:`choice-check`,children:(0,K.jsx)(z,{size:14})})]}),(0,K.jsxs)(`button`,{className:`template-card${w===`research`?` selected`:``}`,type:`button`,onClick:()=>{b.setValue(`template`,`research`,{shouldDirty:!0}),qt()},children:[(0,K.jsx)(`span`,{className:`template-icon`,children:(0,K.jsx)(Ye,{size:18})}),(0,K.jsxs)(`span`,{children:[(0,K.jsx)(`strong`,{children:`深度调研`}),(0,K.jsx)(`small`,{children:`预置问题拆解、来源验证和引用报告方法`})]}),(0,K.jsx)(`span`,{className:`choice-check`,children:(0,K.jsx)(z,{size:14})})]})]})]}),(0,K.jsxs)(`div`,{className:`form-grid two-columns`,children:[(0,K.jsx)(X,{label:`Agent 名称`,requirement:`required`,htmlFor:`quickAgentName`,error:b.formState.errors.name?.message,children:(0,K.jsx)(`input`,{id:`quickAgentName`,maxLength:128,placeholder:`例如:技术支持助手`,...b.register(`name`,{onChange:qt})})}),(0,K.jsx)(Tz,{value:S,onChange:e=>{b.setValue(`slug`,e,{shouldDirty:!0,shouldValidate:!0}),qt()},error:b.formState.errors.slug?.message})]}),(0,K.jsx)(X,{label:`Runtime`,requirement:`required`,htmlFor:`quickRuntime`,hint:`由所选 RuntimeAdapter 运行;Codex 支持 OpenAI Responses 与兼容代理。`,error:b.formState.errors.runtimeType?.message,children:(0,K.jsx)(kh,{id:`quickRuntime`,ariaLabel:`Runtime`,value:C,options:Pz,onValueChange:e=>{b.setValue(`runtimeType`,e,{shouldDirty:!0,shouldValidate:!0}),qt()}})}),(0,K.jsx)(X,{label:`描述`,requirement:`optional`,htmlFor:`quickDescription`,error:b.formState.errors.description?.message,children:(0,K.jsx)(`input`,{id:`quickDescription`,maxLength:1024,placeholder:`简要说明这个 Agent 解决什么问题`,...b.register(`description`,{onChange:qt})})}),(0,K.jsx)(X,{label:`Agent 目标与要求`,requirement:`required`,htmlFor:`quickPrompt`,hint:`写清角色、目标、工作边界和回答方式。`,error:b.formState.errors.prompt?.message,footer:(0,K.jsxs)(`div`,{className:`field-footer`,children:[(0,K.jsx)(`span`,{children:`角色 · 目标 · 边界 · 回答方式`}),(0,K.jsxs)(`span`,{children:[E.length,` / 32768`]})]}),children:(0,K.jsx)(`textarea`,{id:`quickPrompt`,rows:7,maxLength:32768,placeholder:`例如:你是一名企业技术支持助手。先识别问题类型,再结合知识库给出准确、可执行的处理步骤;信息不足时先提问,不要编造事实。`,...b.register(`prompt`,{onChange:qt})})}),w===`research`&&(0,K.jsxs)(`div`,{className:`template-specific`,children:[(0,K.jsxs)(`div`,{className:`form-grid two-columns`,children:[(0,K.jsx)(X,{label:`目标读者`,requirement:`required`,htmlFor:`researchAudience`,error:b.formState.errors.audience?.message,children:(0,K.jsx)(`input`,{id:`researchAudience`,maxLength:256,...b.register(`audience`)})}),(0,K.jsx)(X,{label:`输出语言`,requirement:`required`,htmlFor:`researchLanguage`,children:(0,K.jsx)(kh,{id:`researchLanguage`,ariaLabel:`输出语言`,value:O,options:[{value:`zh-CN`,label:`简体中文`},{value:`en-US`,label:`English`}],onValueChange:e=>b.setValue(`language`,e,{shouldDirty:!0,shouldValidate:!0})})})]}),(0,K.jsxs)(`div`,{className:`field`,children:[(0,K.jsx)(`label`,{children:`调研深度`}),(0,K.jsx)(`div`,{className:`choice-grid`,children:[{value:`focused`,label:`聚焦`,desc:`8 个步骤,适合快速事实核验`,time:`约 3 分钟`},{value:`standard`,label:`标准`,desc:`16 个步骤,兼顾范围和深度`,time:`约 8 分钟`},{value:`deep`,label:`深度`,desc:`28 个步骤,多来源交叉验证`,time:`约 15 分钟`}].map(e=>(0,K.jsxs)(`button`,{className:`choice-card${k===e.value?` selected`:``}`,type:`button`,onClick:()=>b.setValue(`depth`,e.value,{shouldDirty:!0}),children:[(0,K.jsx)(`span`,{className:`choice-check`,children:(0,K.jsx)(z,{size:14})}),(0,K.jsx)(`strong`,{children:e.label}),(0,K.jsx)(`span`,{children:e.desc}),(0,K.jsx)(`small`,{children:e.time})]},e.value))})]}),(0,K.jsx)(X,{label:`默认输出`,requirement:`required`,htmlFor:`researchFormat`,children:(0,K.jsx)(kh,{id:`researchFormat`,ariaLabel:`默认输出`,value:M,options:[{value:`report`,label:`结构化研究报告`},{value:`brief`,label:`决策简报`},{value:`evidence-table`,label:`证据矩阵与结论`}],onValueChange:e=>b.setValue(`format`,e,{shouldDirty:!0,shouldValidate:!0})})})]})]}),(0,K.jsxs)(`section`,{className:`wizard-panel${h===2?` active`:``}`,hidden:h!==2,children:[(0,K.jsxs)(`div`,{className:`panel-heading`,children:[(0,K.jsx)(`span`,{className:`panel-index`,children:`02`}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`h2`,{children:`选择 Agent 可以使用的能力`}),(0,K.jsx)(`p`,{children:`所有依赖都会在构建时锁定版本和摘要,并由权限策略控制调用。`})]})]}),C===`codex`&&(0,K.jsxs)(`div`,{className:`inline-alert warning codex-capability-notice`,children:[(0,K.jsx)(U,{size:16}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`strong`,{children:`ManagedRuntime 不绑定 ksadk Tool`}),(0,K.jsx)(`p`,{children:`codex CLI 自身提供工具能力,ksadk Tool 不会绑定到 codex Agent。MCP(streamable-http)与 Skill 可绑定:MCP 经 codex config_overrides 注入,Skill 以原生 SkillInput 注入。模型仍需选择并配置凭证。`})]})]}),(0,K.jsxs)(`div`,{className:`capability-section`,children:[(0,K.jsxs)(`div`,{className:`capability-heading`,children:[(0,K.jsx)(`span`,{className:`capability-icon`,children:(0,K.jsx)(fe,{size:15})}),(0,K.jsxs)(`div`,{children:[(0,K.jsxs)(`h3`,{children:[`模型 `,(0,K.jsx)(`span`,{className:`studio-field-requirement required`,"aria-hidden":`true`,children:`*`}),(0,K.jsx)(`span`,{className:`sr-only`,children:`必填`})]}),(0,K.jsx)(`p`,{children:`至少选择一个;支持多选`})]})]}),pn&&(0,K.jsx)(`div`,{className:`model-profile-control`,children:(0,K.jsx)(`button`,{className:`button secondary`,type:`button`,onClick:()=>Te(dn[0]||null),children:`配置凭证`})}),(0,K.jsx)(yb,{ariaLabel:`选择模型`,items:Pt,selectedIds:L,getId:e=>e.resourceId,getLabel:e=>e.displayName,getDescription:e=>`${e.contract?.model||e.name} · ${Bt(e)?`凭证已配置`:`需配置凭证`}`,onChange:e=>{R(e),qt()},searchPlaceholder:`搜索模型`,emptyMessage:`没有可用模型`}),(0,K.jsx)(`span`,{className:`helper`,children:fn})]}),C!==`codex`&&(0,K.jsxs)(`div`,{className:`capability-section`,children:[(0,K.jsxs)(`div`,{className:`capability-heading`,children:[(0,K.jsx)(`span`,{className:`capability-icon`,children:(0,K.jsx)(pt,{size:15})}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`h3`,{children:`Tool 与权限`}),(0,K.jsx)(`p`,{children:`选择本地 Tool,并设置默认审批级别`})]})]}),(0,K.jsx)(`div`,{className:`segmented-control`,"aria-label":`Tool 权限模板`,children:[`loose`,`strict`,`custom`].map(e=>(0,K.jsx)(`button`,{className:ne===e?`selected`:``,type:`button`,onClick:()=>{re(e),qt()},children:{loose:`宽松`,strict:`严格`,custom:`自定义`}[e]},e))}),(0,K.jsx)(`p`,{className:`policy-description`,children:ln.description}),(0,K.jsx)(yb,{ariaLabel:`选择 Tool`,items:Ft,selectedIds:B,getId:e=>e.resourceId,getLabel:e=>e.displayName,getDescription:e=>`${e.version} · ${e.description||`本地 Tool`}`,onChange:e=>{V(e),qt()},searchPlaceholder:`搜索 Tool`,emptyMessage:`没有可用 Tool`})]}),(0,K.jsxs)(`div`,{className:`capability-section`,children:[(0,K.jsxs)(`div`,{className:`capability-heading`,children:[(0,K.jsx)(`span`,{className:`capability-icon`,children:(0,K.jsx)(Le,{size:15})}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`h3`,{children:`MCP Server`}),(0,K.jsx)(`p`,{children:`连接外部服务并提供可发现的 Tool;codex 经 config_overrides 注入 streamable-http MCP`})]}),(0,K.jsxs)(`button`,{className:`button secondary small`,type:`button`,onClick:()=>De(!0),children:[(0,K.jsx)(qe,{size:14}),(0,K.jsx)(`span`,{children:`连接 MCP`})]})]}),(0,K.jsx)(yb,{ariaLabel:`选择 MCP Server`,items:It,selectedIds:H,getId:e=>e.resourceId,getLabel:e=>e.displayName,getDescription:e=>`${e.description||`MCP Server`} · ${e.health?.toolCount||0} Tool · ${e.status===`ready`?`Ready`:e.status}`,onChange:e=>{ee(e),qt()},searchPlaceholder:`搜索 MCP Server`,emptyMessage:`没有已连接的 MCP Server`})]}),(0,K.jsxs)(`div`,{className:`capability-section`,children:[(0,K.jsxs)(`div`,{className:`capability-heading`,children:[(0,K.jsx)(`span`,{className:`capability-icon`,children:(0,K.jsx)(nt,{size:15})}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`h3`,{children:`Skill`}),(0,K.jsx)(`p`,{children:`按需注入可复用的方法、知识和任务约束`})]})]}),(0,K.jsx)(yb,{ariaLabel:`选择 Skill`,items:Lt,selectedIds:te,getId:e=>e.resourceId,getLabel:e=>e.displayName,getDescription:e=>`${e.version} · ${e.description||`版本化 Skill`}`,onChange:e=>{W(e),qt()},searchPlaceholder:`搜索 Skill`,emptyMessage:`没有已安装的 Skill`})]})]}),(0,K.jsxs)(`section`,{className:`wizard-panel${h===3?` active`:``}`,hidden:h!==3,children:[(0,K.jsxs)(`div`,{className:`panel-heading`,children:[(0,K.jsx)(`span`,{className:`panel-index`,children:`03`}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`h2`,{children:`检查系统提示词与任务契约`}),(0,K.jsx)(`p`,{children:`保存前可以继续编辑,创建时会完整写入 Agent Draft。`})]}),(0,K.jsxs)(`button`,{className:`button secondary small`,type:`button`,disabled:pe===`composing`,onClick:Xt,children:[(0,K.jsx)(Je,{size:14}),(0,K.jsx)(`span`,{children:pe===`composing`?he===`optimize`?`正在优化`:`正在生成`:`一键优化 Prompt`})]})]}),(0,K.jsxs)(`div`,{className:`prompt-status`,children:[(0,K.jsx)(`span`,{className:`status-dot ${pe===`done`?`success`:`info`}`}),(0,K.jsx)(`span`,{children:pe===`composing`?he===`optimize`?`正在使用生成模型优化角色与任务契约`:`正在根据模板与能力生成角色与任务契约`:pe===`done`?`角色与任务契约已根据当前选择生成`:`进入此步骤后生成 Prompt`})]}),(0,K.jsx)(X,{label:`角色与系统提示词`,requirement:`required`,htmlFor:`composedSystemPrompt`,hint:`定义角色、目标、工作边界和回答原则`,error:b.formState.errors.systemPrompt?.message,children:(0,K.jsx)(`textarea`,{id:`composedSystemPrompt`,className:`prompt-editor`,rows:16,...b.register(`systemPrompt`,{onChange:qt})})}),(0,K.jsx)(X,{label:`任务契约`,requirement:`optional`,htmlFor:`composedTaskPrompt`,hint:`约束每次请求的执行步骤、工具使用和交付结构`,error:b.formState.errors.taskPrompt?.message,children:(0,K.jsx)(`textarea`,{id:`composedTaskPrompt`,className:`prompt-editor`,rows:10,...b.register(`taskPrompt`,{onChange:qt})})}),(0,K.jsxs)(`details`,{className:`pcm-policy-card`,children:[(0,K.jsx)(`summary`,{children:(0,K.jsxs)(`span`,{children:[(0,K.jsx)(`strong`,{children:`上下文与记忆策略`}),(0,K.jsx)(`small`,{children:`按 Runtime 能力控制 Prompt 归属、上下文优化和长期记忆`})]})}),(0,K.jsxs)(`div`,{className:`pcm-policy-body form-grid two-columns`,children:[(0,K.jsx)(X,{label:`上下文责任边界`,requirement:`optional`,htmlFor:`contextOwnership`,hint:`决定由平台、框架或原生 Runtime 负责最终输入。`,children:(0,K.jsx)(kh,{id:`contextOwnership`,ariaLabel:`上下文责任边界`,value:G,options:de,onValueChange:e=>{ie(e),qt()}})}),(0,K.jsx)(X,{label:`上下文优化`,requirement:`optional`,htmlFor:`contextEngineRollout`,hint:`控制预算规划、压缩和降载能力的启用阶段。`,children:(0,K.jsx)(kh,{id:`contextEngineRollout`,ariaLabel:`上下文优化`,value:ae,options:[{value:`off`,label:`Runtime 默认`,description:`不启用平台上下文优化`},{value:`shadow`,label:`仅观察`,description:`记录规划证据但不接管输入`},{value:`enabled`,label:`正式启用`,description:`按预算规划并组装上下文`}],onValueChange:e=>{oe(e),qt()}})}),(0,K.jsxs)(`label`,{className:`post-create-option`,children:[(0,K.jsx)(`input`,{type:`checkbox`,checked:se,onChange:e=>{ce(e.target.checked),qt()}}),(0,K.jsxs)(`span`,{children:[(0,K.jsx)(`strong`,{children:`启用长期记忆`}),(0,K.jsx)(`small`,{children:`按 Agent 和用户作用域召回相关事实;凭证不会写入 Agent 配置。`})]})]}),(0,K.jsx)(X,{label:`记忆写入`,requirement:`optional`,htmlFor:`memoryWriteRollout`,hint:`关闭记忆时固定为不写入。`,children:(0,K.jsx)(kh,{id:`memoryWriteRollout`,ariaLabel:`记忆写入`,value:se?le:`off`,disabled:!se,options:[{value:`off`,label:`不写入`},{value:`shadow`,label:`仅生成候选`},{value:`enabled`,label:`允许写入`}],onValueChange:e=>{ue(e),qt()}})})]})]})]}),(0,K.jsxs)(`section`,{className:`wizard-panel${h===4?` active`:``}`,hidden:h!==4,children:[(0,K.jsxs)(`div`,{className:`panel-heading`,children:[(0,K.jsx)(`span`,{className:`panel-index`,children:`04`}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`h2`,{children:`检查配置并创建`}),(0,K.jsx)(`p`,{children:`确认 Agent 身份、能力依赖和创建后的动作。`})]})]}),(0,K.jsxs)(`div`,{className:`review-block`,children:[(0,K.jsxs)(`div`,{className:`review-title`,children:[(0,K.jsx)(`span`,{children:`Agent`}),(0,K.jsx)(`button`,{className:`text-button`,type:`button`,onClick:()=>Zt(1),children:`编辑`})]}),(0,K.jsxs)(`div`,{className:`review-agent`,children:[(0,K.jsx)(`span`,{className:`agent-avatar`,children:w===`research`?(0,K.jsx)(Ye,{size:16}):(0,K.jsx)(N,{size:16})}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`strong`,{children:x}),(0,K.jsxs)(`span`,{children:[S,` · `,C,` · `,sn]}),(0,K.jsx)(`p`,{children:E||`等待填写系统提示词`})]})]})]}),(0,K.jsxs)(`div`,{className:`review-block`,children:[(0,K.jsxs)(`div`,{className:`review-title`,children:[(0,K.jsx)(`span`,{children:`能力绑定`}),(0,K.jsx)(`button`,{className:`text-button`,type:`button`,onClick:()=>Zt(2),children:`编辑`})]}),(0,K.jsxs)(`div`,{className:`review-capabilities`,children:[(0,K.jsxs)(`div`,{className:`review-capability`,children:[(0,K.jsx)(fe,{size:16}),(0,K.jsx)(`div`,{children:(0,K.jsx)(`strong`,{children:dn[0]?.displayName||`模型`})})]}),(0,K.jsxs)(`div`,{className:`review-capability`,children:[(0,K.jsx)(pt,{size:16}),(0,K.jsxs)(`div`,{children:[(0,K.jsxs)(`strong`,{children:[B.length,` 个 Tool`]}),(0,K.jsx)(`span`,{children:ln.title})]})]}),(0,K.jsxs)(`div`,{className:`review-capability`,children:[(0,K.jsx)(Le,{size:16}),(0,K.jsxs)(`div`,{children:[(0,K.jsxs)(`strong`,{children:[H.length,` 个 MCP`]}),(0,K.jsx)(`span`,{children:H.length?`已连接外部服务`:`未绑定`})]})]}),(0,K.jsxs)(`div`,{className:`review-capability`,children:[(0,K.jsx)(nt,{size:16}),(0,K.jsxs)(`div`,{children:[(0,K.jsxs)(`strong`,{children:[te.length,` 个 Skill`]}),(0,K.jsx)(`span`,{children:te.length?`已注入版本化能力`:`未绑定`})]})]})]})]}),(0,K.jsxs)(`div`,{className:`review-block`,children:[(0,K.jsxs)(`div`,{className:`review-title`,children:[(0,K.jsx)(`span`,{children:`Prompt`}),(0,K.jsx)(`button`,{className:`text-button`,type:`button`,onClick:()=>Zt(3),children:`编辑`})]}),(0,K.jsx)(`div`,{className:`prompt-preview`,children:P||E||`等待生成`})]}),(0,K.jsxs)(`label`,{className:`post-create-option`,children:[(0,K.jsx)(`input`,{type:`checkbox`,...b.register(`buildAfterCreate`)}),(0,K.jsxs)(`span`,{children:[(0,K.jsx)(`strong`,{children:mn?`创建后立即校验 YAML 声明并打开会话`:`创建后立即构建并打开会话`}),(0,K.jsx)(`small`,{children:mn?`只冻结 YAML 和 runtime 摘要;部署时不会上传代码包。`:`生成不可变 AgentBundle,完成后进入 Chat 工作台`})]})]})]}),_e&&(0,K.jsxs)(`div`,{className:`inline-alert error wizard-error-summary`,role:`alert`,children:[(0,K.jsx)(U,{size:16}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`strong`,{children:`需要处理一项配置`}),(0,K.jsx)(`p`,{children:_e})]})]}),(0,K.jsxs)(`footer`,{className:`wizard-actions`,children:[(0,K.jsxs)(`button`,{className:`button secondary`,type:`button`,disabled:h===1,onClick:()=>Zt(h-1),children:[(0,K.jsx)(A,{size:16}),(0,K.jsx)(`span`,{children:`上一步`})]}),(0,K.jsxs)(`span`,{className:`wizard-progress`,children:[`第 `,h,` 步,共 4 步`]}),(0,K.jsxs)(`dl`,{className:`summary-chips`,"aria-label":`配置摘要`,children:[(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`dt`,{children:`模板`}),(0,K.jsx)(`dd`,{children:sn})]}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`dt`,{children:`Runtime`}),(0,K.jsx)(`dd`,{children:cn})]}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`dt`,{children:`模型`}),(0,K.jsx)(`dd`,{children:un})]}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`dt`,{children:`Tool`}),(0,K.jsx)(`dd`,{children:B.length})]}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`dt`,{children:`MCP`}),(0,K.jsx)(`dd`,{children:H.length})]}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`dt`,{children:`Skill`}),(0,K.jsx)(`dd`,{children:te.length})]})]}),(0,K.jsxs)(`button`,{className:`button tertiary summary-toggle`,type:`button`,"aria-expanded":xe,onClick:()=>Ce(e=>!e),children:[(0,K.jsx)(He,{size:16}),(0,K.jsx)(`span`,{children:`完整摘要`})]}),(0,K.jsxs)(`div`,{className:`wizard-flow-actions`,children:[(0,K.jsx)(`button`,{className:`button secondary`,type:`button`,onClick:Kt,children:`保存草稿`}),h<4?(0,K.jsxs)(`button`,{className:`button accent`,type:`button`,onClick:()=>Zt(h+1),children:[(0,K.jsx)(`span`,{children:`继续`}),(0,K.jsx)(j,{size:16})]}):(0,K.jsxs)(`button`,{className:`button accent`,type:`submit`,disabled:ye,children:[(0,K.jsx)(qe,{size:16}),(0,K.jsx)(`span`,{children:ye?`正在创建`:`创建 Agent`})]})]})]})]})}),(0,K.jsx)(Sa,{open:xe,compact:!0,title:`配置摘要`,subtitle:`检查本轮创建使用的 Runtime、模型、能力与权限策略。`,onOpenChange:Ce,children:(0,K.jsxs)(`div`,{className:`wizard-summary-content`,children:[(0,K.jsxs)(`dl`,{children:[(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`dt`,{children:`模板`}),(0,K.jsx)(`dd`,{children:sn})]}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`dt`,{children:`Runtime`}),(0,K.jsx)(`dd`,{children:cn})]}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`dt`,{children:`模型`}),(0,K.jsx)(`dd`,{children:un})]}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`dt`,{children:`Skill`}),(0,K.jsx)(`dd`,{children:te.length})]}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`dt`,{children:`MCP`}),(0,K.jsx)(`dd`,{children:H.length})]}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`dt`,{children:`Tool`}),(0,K.jsx)(`dd`,{children:B.length})]}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`dt`,{children:`策略`}),(0,K.jsx)(`dd`,{children:w===`research`?`Plan-Act-Observe`:`Direct`})]})]}),(0,K.jsx)(`div`,{className:`summary-divider`}),(0,K.jsxs)(`div`,{className:`summary-note`,children:[(0,K.jsx)(et,{size:16}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`strong`,{children:ln.title}),(0,K.jsx)(`p`,{children:ln.description})]})]}),(0,K.jsxs)(`div`,{className:`summary-note`,children:[(0,K.jsx)(ze,{size:16}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`strong`,{children:mn?`声明校验`:`不可变构建`}),(0,K.jsx)(`p`,{children:mn?`冻结 YAML 与 runtime 摘要;云端部署不使用代码包。`:`Skill、MCP 和 Tool 将锁定版本与摘要。`})]})]})]})})]})]})]}),we&&(0,K.jsx)(_z,{model:we,onClose:()=>Te(null),onChanged:Nt}),Ee&&(0,K.jsx)(yz,{onClose:()=>De(!1),onConnected:()=>{De(!1),Nt()}})]})}function Gz(e,t){let n=new URLSearchParams({buildId:e});return t&&n.set(`agentId`,t),`#/deployments/new?${n.toString()}`}function Kz(e){return`#/deployments/${encodeURIComponent(e)}`}function qz(e){if(window.location.hash===e){window.dispatchEvent(new HashChangeEvent(`hashchange`));return}window.location.hash=e}function Jz(e,t=28){return e.length>t?`${e.slice(0,t)}…`:e}function Yz({detail:e,catalog:t,buildId:n,onClose:r}){let[i,a]=(0,s.useState)(`curl`),o=e.draft,c=o.metadata.labels||{},l=o.spec.bindings?.modelProfileId||o.spec.bindings?.modelProfileIds?.[0]||``,u=t.find(e=>e.resourceId===l),d=c[`agentkit.ksyun.com/template`]||`blank`,f={model:u?.contract?.model||u?.name||c[`agentkit.ksyun.com/model`]||`glm-5.1`,input:[{role:`user`,content:[{type:`input_text`,text:d===`research`?`调研 Agent 工程平台的核心能力`:`请根据你的职责处理这个请求`}]}],metadata:{agent_id:o.metadata.id},stream:!0},p=i===`curl`?[`curl -X POST "${window.location.origin}/v1/responses" \\`,` -H "Content-Type: application/json" \\`,` -H "Authorization: Bearer " \\`,` -d '${JSON.stringify(f,null,2)}'`].join(`
-`):[`const response = await fetch("${window.location.origin}/v1/responses", {`,` method: "POST",`,` headers: {`,` "Content-Type": "application/json",`,' "Authorization": `Bearer ${runtimeApiKey}`',` },`,` body: JSON.stringify(${JSON.stringify(f,null,2)})`,`});`].join(`
-`);return(0,K.jsxs)(DD,{title:`调用 Agent`,subtitle:`使用统一 Runtime 的 OpenAI Responses API;本地与云端请求体一致。`,onClose:r,children:[(0,K.jsxs)(`div`,{className:`callout`,children:[(0,K.jsx)(et,{size:16}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`strong`,{children:`标准接入协议`}),(0,K.jsx)(`p`,{children:`本地 Studio 仅监听 loopback;部署后由云端网关校验 Runtime API Key,不暴露 Studio Session 或 CSRF Token。`})]})]}),(0,K.jsxs)(`div`,{className:`code-tabs`,children:[(0,K.jsx)(`button`,{className:i===`curl`?`active`:``,type:`button`,onClick:()=>a(`curl`),children:`cURL`}),(0,K.jsx)(`button`,{className:i===`javascript`?`active`:``,type:`button`,onClick:()=>a(`javascript`),children:`JavaScript`})]}),(0,K.jsx)(xb,{code:p,language:i===`curl`?`bash`:`javascript`,filename:i===`curl`?`invoke-agent.sh`:`invoke-agent.js`,wrap:!0}),(0,K.jsxs)(`div`,{className:`api-contract`,children:[(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`span`,{children:`Endpoint`}),(0,K.jsx)(`code`,{children:`POST /v1/responses`})]}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`span`,{children:`本地 Build`}),(0,K.jsx)(`code`,{children:n||`尚未构建`})]}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`span`,{children:`Conversation`}),(0,K.jsx)(`code`,{children:`首次调用可省略`})]})]})]})}function Xz({agentId:e,onBack:t,onChat:n,onBuild:r,onEdit:i,onChanged:a}){let[o,c]=(0,s.useState)(null),[l,u]=(0,s.useState)([]),[d,f]=(0,s.useState)([]),[p,m]=(0,s.useState)(!1),[h,_]=(0,s.useState)(!1),[v,y]=(0,s.useState)(!1),[b,x]=(0,s.useState)(``);(0,s.useEffect)(()=>{g(`/api/v1/agents/${encodeURIComponent(e)}`).then(e=>e.json()).then(c).catch(()=>c(null)),g(`/api/v1/catalog/resources?limit=200`).then(e=>e.json()).then(e=>u(e.items||[])).catch(()=>{}),g(`/api/v1/deployments`).then(e=>e.json()).then(e=>f(e.items||[])).catch(()=>{})},[e]);async function S(){y(!0),x(``);try{let n=await g(`/api/v1/agents/${encodeURIComponent(e)}`,{method:`DELETE`});if(!n.ok){let e=await n.json().catch(()=>null);throw Error(e?.error?.message||`删除失败(${n.status})`)}m(!1),a(),t()}catch(e){x(e.message)}finally{y(!1)}}if(!o)return(0,K.jsx)(`div`,{className:`page-container`,"data-layout":`document`,children:(0,K.jsx)(`p`,{style:{color:`var(--text-tertiary)`},children:`正在加载 Agent 配置…`})});let C=o.draft,w=C.spec.bindings||{},T=C.metadata.labels||{},E=String(T[`agentkit.ksyun.com/models`]||``).split(`,`).map(e=>e.trim()).filter(Boolean),D=w.modelProfileIds?.length?w.modelProfileIds:w.modelProfileId?[w.modelProfileId]:E.length?E:T[`agentkit.ksyun.com/model`]?[T[`agentkit.ksyun.com/model`]]:[],O=(o.builds||[]).find(e=>e.status===`SUCCEEDED`),k=O?d.find(e=>e.buildId===O.id):void 0,A=k?.status===`READY`,j=e=>l.find(t=>t.resourceId===e)?.displayName||Jz(e),M=(w.tools||[]).map(e=>typeof e==`string`?e:e.resourceId),N=[[`Model`,D],[`Skill`,(w.skills||[]).map(e=>e.resourceId)],[`MCP`,(w.mcpServers||[]).map(e=>e.resourceId)],[`Tool`,M]].filter(([,e])=>e.length>0);function P(){O&&qz(k?Kz(k.id):Gz(O.id,C.metadata.id))}return(0,K.jsxs)(`div`,{className:`page-container`,"data-layout":`document`,children:[(0,K.jsxs)(gd,{children:[(0,K.jsxs)(`button`,{className:`button accent`,type:`button`,onClick:()=>n(e),children:[(0,K.jsx)(Ne,{size:15}),(0,K.jsx)(`span`,{children:`打开会话`})]}),(0,K.jsxs)(`button`,{className:`button secondary`,type:`button`,onClick:()=>i(e),children:[(0,K.jsx)(rt,{size:15}),(0,K.jsx)(`span`,{children:`编辑`})]}),(0,K.jsxs)(`button`,{className:`button secondary`,type:`button`,onClick:r,children:[(0,K.jsx)(ze,{size:15}),(0,K.jsx)(`span`,{children:`校验并构建`})]}),(0,K.jsxs)(`button`,{className:`button secondary`,type:`button`,onClick:P,disabled:!O,children:[(0,K.jsx)(oe,{size:15}),(0,K.jsx)(`span`,{children:k?`查看云端部署`:`部署到云端`})]}),(0,K.jsx)(pd,{label:`${C.metadata.name} 的更多操作`,items:[{label:`编辑`,onSelect:()=>i(e)},{label:`校验并构建`,onSelect:r},{label:k?`查看云端部署`:`部署到云端`,onSelect:P,disabled:!O},{label:`调用方式`,onSelect:()=>_(!0)},{label:`删除 Agent`,danger:!0,onSelect:()=>m(!0)}]})]}),b&&(0,K.jsx)(`div`,{className:`form-error`,style:{marginBottom:16},children:b}),(0,K.jsxs)(`div`,{className:`detail-layout`,children:[(0,K.jsxs)(`div`,{className:`detail-main`,children:[(0,K.jsxs)(`section`,{className:`detail-section block`,children:[(0,K.jsx)(`div`,{className:`section-heading`,children:(0,K.jsx)(`h2`,{children:`角色与任务`})}),(0,K.jsxs)(`div`,{className:`readonly-field`,children:[(0,K.jsx)(`span`,{children:`系统提示词`}),(0,K.jsx)(`pre`,{children:C.spec.instructions?.system||``})]}),(0,K.jsxs)(`div`,{className:`readonly-field`,children:[(0,K.jsx)(`span`,{children:`任务契约`}),(0,K.jsx)(`pre`,{children:C.spec.instructions?.task||`未配置任务契约`})]})]}),(0,K.jsxs)(`section`,{className:`detail-section block`,children:[(0,K.jsx)(`div`,{className:`section-heading`,children:(0,K.jsx)(`h2`,{children:`能力绑定`})}),N.length?(0,K.jsx)(`div`,{className:`binding-groups`,children:N.map(([e,t])=>(0,K.jsxs)(`div`,{className:`binding-group`,children:[(0,K.jsx)(`span`,{children:e}),(0,K.jsx)(`div`,{className:`binding-items`,children:t.map(e=>(0,K.jsxs)(`span`,{className:`compact-resource`,children:[(0,K.jsx)(z,{size:13}),j(e)]},e))})]},e))}):(0,K.jsxs)(`div`,{className:`capability-empty-state`,children:[(0,K.jsx)(`span`,{children:`当前 Agent 尚未绑定模型、Tool、MCP 或 Skill。`}),(0,K.jsx)(`button`,{className:`button secondary small`,type:`button`,onClick:()=>i(e),children:`绑定能力`})]})]})]}),(0,K.jsxs)(`aside`,{className:`detail-aside block`,children:[(0,K.jsx)(`div`,{className:`aside-title`,children:`运行摘要`}),(0,K.jsxs)(`dl`,{children:[(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`dt`,{children:`Revision`}),(0,K.jsxs)(`dd`,{children:[`r`,C.metadata.revision]})]}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`dt`,{children:`Runtime`}),(0,K.jsx)(`dd`,{children:C.spec.runtime?.type||T[`agentkit.ksyun.com/framework`]||`adk`})]}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`dt`,{children:`策略`}),(0,K.jsx)(`dd`,{children:C.spec.execution?.strategy||`-`})]}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`dt`,{children:`最大步骤`}),(0,K.jsx)(`dd`,{children:C.spec.execution?.maxSteps??`-`})]}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`dt`,{children:`超时`}),(0,K.jsx)(`dd`,{children:C.spec.execution?.timeoutSeconds?`${C.spec.execution.timeoutSeconds}s`:`-`})]})]}),(0,K.jsx)(`div`,{className:`aside-divider`}),(0,K.jsx)(`div`,{className:`build-state notice`,"data-state":O?`ready`:`idle`,children:O?(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(`span`,{className:`status-dot success`}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`strong`,{children:`部署声明已就绪`}),(0,K.jsx)(`span`,{children:Jz(O.bundleDigest||O.id)})]})]}):(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(`span`,{className:`status-dot neutral`}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`strong`,{children:`尚未构建`}),(0,K.jsx)(`span`,{children:`校验 YAML 声明后即可部署或本地对话`})]})]})}),k&&(0,K.jsxs)(`div`,{className:`build-state notice`,"data-state":A?`ready`:`idle`,children:[(0,K.jsx)(`span`,{className:`status-dot ${A?`success`:`neutral`}`}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`strong`,{children:A?`云端实例运行中`:`云端部署:${k.status}`}),(0,K.jsx)(`span`,{children:k.agentId||k.instanceId||k.id})]})]})]})]}),p&&(0,K.jsx)(Ca,{title:`确认删除 Agent「${C.metadata.name}」?`,description:`Agent ID:${C.metadata.id}。删除后其配置与 Revision 将移除,此操作不可撤销。`,confirmText:`确认删除`,busy:v,onConfirm:S,onCancel:()=>m(!1)}),h&&(0,K.jsx)(Yz,{detail:o,catalog:l,buildId:O?.id,onClose:()=>_(!1)})]})}var Zz=new Set([`SUCCEEDED`,`FAILED`,`CANCELLED`,`TIMED_OUT`]);function Qz(e){return e===`SUCCEEDED`?`ready`:[`FAILED`,`CANCELLED`,`TIMED_OUT`].includes(e)?`failed`:e===`IDLE`?`idle`:`pending`}function $z(e){return{IDLE:`尚未构建`,QUEUED:`排队中`,RUNNING:`构建中`,SUCCEEDED:`构建完成`,FAILED:`构建失败`,CANCELLED:`已取消`,TIMED_OUT:`已超时`}[e]||e}function eB(e,t=42){return e.length>t?`${e.slice(0,t)}…`:e}function tB(e){return e.split(/\r?\n\r?\n/).filter(Boolean).map(e=>{let t=e.split(/\r?\n/),n=Number(t.find(e=>e.startsWith(`id:`))?.slice(3).trim()),r=t.find(e=>e.startsWith(`event:`))?.slice(6).trim()||``,i=t.filter(e=>e.startsWith(`data:`)).map(e=>e.slice(5).trimStart()).join(`
-`);if(!Number.isFinite(n)||n<=0||!r||!i)return null;try{let e=JSON.parse(i);return{id:n,type:r,data:e&&typeof e==`object`?e:{}}}catch{return null}}).filter(e=>e!==null)}async function nB(e){let t=await g(`/api/v1${e}`);return t.ok?tB(await t.text()):[]}function rB({currentAgentId:e,agents:t,onSelectAgent:n,onCreate:r}){let[i,a]=(0,s.useState)(null),[o,c]=(0,s.useState)(`IDLE`),[l,u]=(0,s.useState)(`选择 Agent 后开始本地构建。
-`),[d,f]=(0,s.useState)(``),[p,m]=(0,s.useState)(!1),h=(0,s.useRef)(null),_=(0,s.useRef)(0),v=(0,s.useCallback)(async()=>{if(!e){a(null);return}try{let t=await g(`/api/v1/agents/${encodeURIComponent(e)}`);if(!t.ok)throw Error(`Agent detail is unavailable`);a(await t.json())}catch{a(null)}},[e]);(0,s.useEffect)(()=>{v()},[v]);let y=i?.draft,b=i?.builds||[],x=b.find(e=>e.status===`SUCCEEDED`)||b[0],S=x?.status===`SUCCEEDED`&&!p,C=t.find(t=>t.metadata.id===e),w=y?.metadata?.labels?.[`agentkit.ksyun.com/artifact-type`],T=w===`ManagedRuntime`||!w&&y?.spec?.runtime?.type===`codex`,E=e=>T?{IDLE:`尚未校验`,QUEUED:`校验排队中`,RUNNING:`正在校验`,SUCCEEDED:`声明已校验`,FAILED:`校验失败`,CANCELLED:`已取消`,TIMED_OUT:`校验超时`}[e]||e:$z(e);(0,s.useEffect)(()=>{p||(c(x?.status||`IDLE`),f(``),u(x?[`${T?`Declaration`:`Build`} ${x.id}`,`Revision ${x.sourceRevision??y?.metadata?.revision??`-`}`,`${T?`YAML digest`:`Bundle`} ${x.bundleDigest||`-`}`,`Resolved ${x.resolvedDigest||`-`}`,`Status ${x.status}`].join(`
-`):T?`选择 YAML Agent 后校验声明。
-`:`选择 Agent 后开始本地构建。
-`))},[p,y?.metadata?.revision,T,x]);function D(e){u(t=>`${t}${e}`),requestAnimationFrame(()=>{h.current&&(h.current.scrollTop=h.current.scrollHeight)})}function O(){!e||!S||(n(e),qz(Gz(x.id,e)))}async function k(){if(!y||p)return;let e=++_.current;m(!0),c(`QUEUED`),f(`提交中`),u(T?`提交 YAML 声明校验…
-`:`提交本地构建…
-`);try{let t=await g(`/api/v1/agents/${encodeURIComponent(y.metadata.id)}/builds`,{method:`POST`,headers:{"Content-Type":`application/json`,"Idempotency-Key":`build-${y.metadata.id}-r${y.metadata.revision}-${Date.now()}`},body:JSON.stringify({revision:y.metadata.revision,runEvaluation:!1})});if(!t.ok)throw Error(`构建提交失败(${t.status})`);let n=await t.json();f(n.id);let r=0,i=null;for(let t=0;t<1200;t+=1){if(_.current!==e)return;let t=await nB(`/operations/${encodeURIComponent(n.id)}/events?after=${r}`);t.length&&(r=Math.max(r,...t.map(e=>Number(e.id)||0)),D(t.map(e=>`${String(e.id).padStart(2,`0`)} ${e.type}`).join(`
-`)+`
-`));let a=await g(`/api/v1/operations/${encodeURIComponent(n.id)}`).then(e=>e.json());if(c(a.status||`QUEUED`),Zz.has(a.status)){i=a;break}await new Promise(e=>setTimeout(e,200))}if(!i)throw Error(`构建操作等待超时`);if(i.status!==`SUCCEEDED`)throw Error(i.error?.message||`构建未完成`);await v(),Y(T?`YAML 声明已校验`:`不可变 Bundle 已构建`,i.resourceId||`构建完成`)}catch(t){_.current===e&&(c(`FAILED`),D(`${t?.message||`构建失败`}\n`),Y(`构建失败`,t?.message||`未知错误`,`error`))}finally{_.current===e&&m(!1)}}let A=Qz(o),j=x?.runtimeName?`${x.runtimeName} ${x.runtimeVersion||``}`.trim():y?.spec?.runtime?.type||`未选择`;return(0,K.jsxs)(`div`,{className:`delivery-page`,"data-layout":`document`,children:[(0,K.jsx)(gd,{children:(0,K.jsxs)(`button`,{className:`button accent`,type:`button`,onClick:k,disabled:!y||p,children:[(0,K.jsx)(ze,{size:15}),(0,K.jsx)(`span`,{children:p?T?`校验中`:`构建中`:T?`校验 YAML 声明`:`构建当前 Agent`})]})}),(0,K.jsxs)(`div`,{className:`delivery-intro`,children:[(0,K.jsx)(`h2`,{children:T?`ManagedRuntime 声明`:`Code Bundle`}),(0,K.jsx)(`span`,{className:`delivery-status-badge`,"data-state":A,children:E(o)})]}),t.length===0?(0,K.jsxs)(`div`,{className:`delivery-empty-state`,children:[(0,K.jsx)(ze,{size:24}),(0,K.jsx)(`h2`,{children:`还没有可构建的 Agent`}),(0,K.jsx)(`p`,{children:`先创建 Agent,再生成可部署到云端的交付记录。`}),(0,K.jsxs)(`button`,{className:`button accent`,type:`button`,onClick:r,children:[(0,K.jsx)(qe,{size:15}),(0,K.jsx)(`span`,{children:`创建 Agent`})]})]}):(0,K.jsxs)(K.Fragment,{children:[(0,K.jsxs)(`section`,{className:`delivery-stat-strip compact-delivery-summary`,"aria-label":`构建摘要`,children:[(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`span`,{className:`stat-label`,children:`Agent`}),(0,K.jsx)(`strong`,{title:e||``,children:C?.metadata.name||y?.metadata?.name||`未选择`})]}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`span`,{className:`stat-label`,children:`Revision`}),(0,K.jsx)(`strong`,{children:y?`r${y.metadata.revision}`:`-`})]}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`span`,{className:`stat-label`,children:`Runtime`}),(0,K.jsx)(`strong`,{children:j})]}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`span`,{className:`stat-label`,children:T?`YAML 摘要`:`Bundle`}),(0,K.jsx)(`strong`,{className:`mono`,children:eB(x?.bundleDigest||`-`)})]})]}),(0,K.jsxs)(`section`,{className:`delivery-next-step`,"data-state":S?`ready`:A,"aria-label":`构建下一步`,children:[(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`span`,{children:`下一步`}),(0,K.jsx)(`strong`,{children:S?`构建完成,下一步可部署到云端`:`等待构建完成`})]}),S&&(0,K.jsxs)(`button`,{className:`button secondary compact`,type:`button`,onClick:O,children:[(0,K.jsx)(oe,{size:15}),`部署到云端`]})]}),(0,K.jsxs)(`details`,{className:`delivery-block delivery-detail-disclosure`,children:[(0,K.jsx)(`summary`,{children:T?`声明详情`:`构建详情`}),(0,K.jsx)(`p`,{children:T?`校验 YAML 声明并锁定 Runtime、模型与能力摘要,生成可追溯的托管运行时制品。`:`查看不可变 Bundle、输入 Revision 与交付记录。`}),(0,K.jsxs)(`div`,{className:`delivery-fact-chain`,children:[(0,K.jsxs)(`div`,{className:`delivery-fact-step`,"data-state":y?`ready`:`idle`,children:[(0,K.jsx)(`span`,{children:T?`输入 YAML Revision`:`输入 Revision`}),(0,K.jsx)(`strong`,{children:y?`r${y.metadata.revision}`:`未选择`}),(0,K.jsx)(`code`,{children:y?.metadata?.id||`-`})]}),(0,K.jsxs)(`div`,{className:`delivery-fact-step`,"data-state":A,children:[(0,K.jsx)(`span`,{children:T?`声明摘要`:`不可变 Bundle`}),(0,K.jsx)(`strong`,{children:x?.status===`SUCCEEDED`?T?`已校验`:`已生成`:E(o)}),(0,K.jsx)(`code`,{children:x?.bundleDigest||`尚无 digest`})]})]})]}),(0,K.jsxs)(`details`,{className:`delivery-block`,open:p,children:[(0,K.jsxs)(`summary`,{children:[T?`声明校验日志`:`构建技术日志`,` `,d?`· ${eB(d,28)}`:``]}),(0,K.jsx)(`pre`,{ref:h,children:l})]})]})]})}var iB=new Set([`hermes`,`openclaw`]);function aB(e){if(!e)return!1;let t=e.sessionEventChat??e.SessionEventChat??e.session_event_chat;if(t===!0)return!0;if(!t||typeof t!=`object`)return!1;let n=t;return n.enabled===!0||n.Enabled===!0||n.supported===!0||n.Supported===!0}function oB(e){if(e.chatTransport)return{kind:e.chatTransport,reason:e.chatRoutingReason||(e.chatTransport===`official-dashboard`?`native-runtime-without-session-event-chat-capability`:`studio-compatible-framework`)};if(aB(e.capabilities))return{kind:`studio-session-events`,reason:`declared-session-event-chat-capability`};let t=String(e.runtimeType||e.framework||``).trim().toLowerCase();return iB.has(t)?{kind:`official-dashboard`,reason:`native-runtime-without-session-event-chat-capability`}:{kind:`studio-session-events`,reason:`studio-compatible-framework`}}var sB={READY:5,DEPLOYING:4,ADMITTING:3,FAILED:2,ROLLED_BACK:1};function cB(e,t=new Map){let n=new Map;for(let r of e){let e=r.agentId?.trim();if(!e)continue;let i=n.get(e),a=t.get(e)?.trim(),o=!!(a&&r.versionId===a),s=!!(a&&i?.versionId===a),c=sB[r.status||``]||0,l=sB[i?.status||``]||0;(!i||o&&!s||o===s&&c>l)&&n.set(e,r)}return[...n.values()]}function lB(e,t){let n=new Map;for(let e of t){let t=e.agentId?.trim();t&&!n.has(t)&&n.set(t,e)}let r=cB(e,new Map([...n.entries()].flatMap(([e,t])=>t.versionId?.trim()?[[e,t.versionId.trim()]]:[]))).map(e=>{let t=n.get(e.agentId?.trim()||``);return{...e,agentName:t?.name||e.agentName,status:t?.status||e.status,endpoint:t?.endpoint||e.endpoint,framework:t?.framework||e.framework,runtimeType:t?.runtimeType||e.runtimeType,capabilities:t?.capabilities||e.capabilities,chatTransport:t?.chatTransport||e.chatTransport,chatRoutingReason:t?.chatRoutingReason||e.chatRoutingReason,versionId:t?.versionId||e.versionId,updatedAt:t?.updatedAt||e.updatedAt,creatorName:t?.creatorName||e.creatorName,source:`receipt`}}),i=new Set(r.map(e=>e.agentId)),a=[...n.values()].flatMap(e=>{let t=e.agentId?.trim();return!t||i.has(t)?[]:[{id:`account:${t}`,agentId:t,agentName:e.name||t,status:e.status,endpoint:e.endpoint,framework:e.framework,runtimeType:e.runtimeType,capabilities:e.capabilities,chatTransport:e.chatTransport,chatRoutingReason:e.chatRoutingReason,versionId:e.versionId,updatedAt:e.updatedAt,creatorName:e.creatorName,source:`account`}]});return[...r,...a]}var uB=new Set([`SUCCEEDED`,`FAILED`,`CANCELLED`,`TIMED_OUT`,`INTERRUPTED`]),dB=`agentkit-studio:deployment-operation-attempts:v2`,fB=500,pB=new Set([403,404,410]),mB=new Map,hB={},gB=class extends Error{status;constructor(e,t){super(e),this.status=t,this.name=`OperationStatusError`}};function _B(){try{return typeof document>`u`?void 0:document.defaultView?.localStorage}catch{return}}function vB(e,t){return t?g(e,{signal:t}):g(e)}function yB(e,t){return t?{...e,status:String(t.status||e.status).toUpperCase(),agentName:t.name||e.agentName,endpoint:t.endpoint||e.endpoint,framework:t.framework||e.framework,runtimeType:t.runtimeType||e.runtimeType,capabilities:t.capabilities||e.capabilities,chatTransport:t.chatTransport||e.chatTransport,chatRoutingReason:t.chatRoutingReason||e.chatRoutingReason,versionId:t.versionId||e.versionId,updatedAt:t.updatedAt||e.updatedAt,creatorName:t.creatorName||e.creatorName}:e}function bB(e){try{let t=_B();if(!t)return{...hB[e]||{}};let n=JSON.parse(t.getItem(e)||`{}`);return n&&typeof n==`object`?n:{}}catch{return{...hB[e]||{}}}}function xB(e,t){hB={...hB,[e]:{...t}};try{_B()?.setItem(e,JSON.stringify(t))}catch{}}function SB(e){return`studio-${e}-${globalThis.crypto?.randomUUID?.()||`${Math.random().toString(36).slice(2)}-${Date.now().toString(36)}`}`}function CB(e,t,n){let r=bB(e),i=r[t];if(i?.idempotencyKey)return i;let a={actionKey:t,idempotencyKey:SB(n),operationId:``};return r[t]=a,xB(e,r),a}function wB(e,t,n){let r={...t,operationId:n},i=bB(e);return i[t.actionKey]=r,xB(e,i),r}function TB(e,t){let n=bB(e),r=n[t.actionKey];!r||r.idempotencyKey!==t.idempotencyKey||(delete n[t.actionKey],xB(e,n))}function EB(e){return e instanceof DOMException&&e.name===`AbortError`}function DB(e){if(e.aborted)throw new DOMException(`Operation aborted`,`AbortError`)}async function OB(e,t){DB(t),await new Promise((n,r)=>{let i=window.setTimeout(()=>{t.removeEventListener(`abort`,a),n()},e),a=()=>{window.clearTimeout(i),r(new DOMException(`Operation aborted`,`AbortError`))};t.addEventListener(`abort`,a,{once:!0})})}async function kB(e,t){let n=mB.get(e)||Promise.resolve(),r,i=new Promise(e=>{r=e}),a=n.then(()=>i);mB.set(e,a),await n;try{return await t()}finally{r(),mB.get(e)===a&&mB.delete(e)}}async function AB(e,t,n){DB(t);let r=navigator.locks;return r?r.request(e,{mode:`exclusive`,signal:t},async()=>n()):kB(e,async()=>(DB(t),n()))}async function jB(e){let t=await g(`/api/v1/system/bootstrap`,{signal:e});if(!t.ok)throw Error(`读取部署操作作用域失败(${t.status})`);let n=(await t.json())?.operationScope,r=String(n?.workspace||``).trim(),i=String(n?.cloudCredential||``).trim();if(!r||!i)throw Error(`部署操作作用域不可用,请刷新 Studio`);return`${dB}:${encodeURIComponent(r)}:${encodeURIComponent(i)}`}async function MB(e,t,n){for(;;){await OB(fB,n);let r=await g(`/api/v1/operations/${encodeURIComponent(e)}`,{signal:n});if(!r.ok)throw new gB(`${t}状态读取失败(${r.status})`,r.status);let i=await r.json();if(uB.has(i.status))return i}}async function NB(e,t,n,r,i,a){let o=`${e}:${t}`,s=await AB(o,i,async()=>{let o=CB(e,t,n);if(!o.operationId){let t=await a(o.idempotencyKey,i);if(!t.ok)throw t.status<500&&TB(e,o),Error(`${r}提交失败(${t.status})`);let n=await t.json(),s=String(n?.id||``).trim();if(!s)throw TB(e,o),Error(`${r}提交结果缺少 operation_id`);o=wB(e,o,s)}return o}),c;try{c=await MB(s.operationId,r,i)}catch(t){throw t instanceof gB&&pB.has(t.status)&&await AB(o,i,async()=>{TB(e,s)}),t}return await AB(o,i,async()=>{TB(e,s)}),c}function PB(e){return[`READY`,`RUNNING`].includes(e)?`ready`:[`FAILED`,`ROLLED_BACK`,`ERROR`,`TERMINATED`].includes(e)?`failed`:[`ADMITTING`,`DEPLOYING`,`CREATING`,`UPDATING`].includes(e)?`pending`:`idle`}function FB(e){return{ADMITTING:`准入中`,DEPLOYING:`部署中`,READY:`已就绪`,FAILED:`部署失败`,ROLLED_BACK:`已回滚`,RUNNING:`运行中`,CREATING:`创建中`,UPDATING:`更新中`,ERROR:`异常`,TERMINATED:`已终止`}[e]||`状态未知`}function IB(e,t=28){return e.length>t?`${e.slice(0,t)}…`:e}function LB(){let e=window.location.hash.match(/^#\/deployments\/([^/?]+)(?:\?.*)?$/),t=e?decodeURIComponent(e[1]):``;return t===`new`?``:t}function RB(){let e=window.location.hash.match(/^#\/deployments\/new(?:\?(.*))?$/);if(!e)return null;let t=new URLSearchParams(e[1]||``);return{buildId:t.get(`buildId`)?.trim()||``,agentId:t.get(`agentId`)?.trim()||``}}function zB(e){if(!e)return`—`;let t=new Date(e);return Number.isNaN(t.getTime())?e:t.toLocaleString(`zh-CN`,{hour12:!1})}function BB({onCreate:e,onOpenChat:t,onSelectBuild:n}){let[r,i]=(0,s.useState)([]),[a,o]=(0,s.useState)(!0),[c,l]=(0,s.useState)(``),[u,d]=(0,s.useState)(new Set),[f,p]=(0,s.useState)(``),[m,h]=(0,s.useState)(!1),[_,v]=(0,s.useState)(!1),[y,b]=(0,s.useState)(null),[x,S]=(0,s.useState)(!1),[C,w]=(0,s.useState)(null),[T,E]=(0,s.useState)(!1),[D,O]=(0,s.useState)(()=>RB()),[k,j]=(0,s.useState)([]),[M,N]=(0,s.useState)(()=>RB()?.buildId||``),[P,F]=(0,s.useState)(``),[I,L]=(0,s.useState)(!1),[R,z]=(0,s.useState)(!1),[B,V]=(0,s.useState)(``),H=(0,s.useRef)(new Set);(0,s.useEffect)(()=>()=>{for(let e of H.current)e.abort();H.current.clear()},[]);function ee(){let e=new AbortController;return H.current.add(e),e}function U(e){H.current.delete(e)}let te=(0,s.useCallback)(async e=>{o(!0),l(``);try{let[t,n]=await Promise.all([vB(`/api/v1/deployments`,e),vB(`/api/v1/cloud-agents?size=100`,e)]);if(!t.ok)throw Error(`读取部署记录失败(${t.status})`);let r=await t.json(),a=n.ok?await n.json():{items:[]},o=Array.isArray(r.items)?r.items:[],s=[...new Set(o.flatMap(e=>e.agentId?.trim()?[e.agentId.trim()]:[]))],c=await Promise.all(s.map(t=>Promise.resolve().then(()=>vB(`/api/v1/cloud-agents/${encodeURIComponent(t)}`,e)).then(async e=>e.ok?await e.json():null).catch(e=>{if(EB(e))throw e;return null}))),l=Array.isArray(a.items)?a.items:[],u=new Map(l.flatMap(e=>e.agentId?[[e.agentId,e]]:[]));for(let e of c)e?.agentId&&u.set(e.agentId,{...u.get(e.agentId),...e});let d=[...u.values()],f=new Map(o.map(e=>[e.id,e])),p=lB(o,d).map(e=>{if(e.source===`receipt`)return{...f.get(e.id),...e,id:e.id,source:`receipt`};let t=d.find(t=>t.agentId===e.agentId);return{id:e.id,buildId:``,bundleDigest:``,versionId:String(e.versionId||t?.versionId||``),status:String(e.status||t?.status||`UNKNOWN`).toUpperCase(),target:{region:String(t?.region||``),environment:`cloud`},agentId:e.agentId,agentName:e.agentName,endpoint:e.endpoint,framework:String(e.framework||t?.framework||``),runtimeType:String(e.runtimeType||t?.runtimeType||``),capabilities:e.capabilities||t?.capabilities,chatTransport:e.chatTransport||t?.chatTransport,chatRoutingReason:e.chatRoutingReason||t?.chatRoutingReason,updatedAt:String(e.updatedAt||t?.updatedAt||``),creatorName:e.creatorName||t?.creatorName,source:`account`}});e?.aborted||i(p)}catch(t){!EB(t)&&!e?.aborted&&l(t?.message||`部署记录不可用`)}finally{e?.aborted||o(!1)}},[]);(0,s.useEffect)(()=>{let e=new AbortController;return te(e.signal),()=>e.abort()},[te]),(0,s.useEffect)(()=>{let e=()=>{let e=RB();if(O(e),e){N(e.buildId),b(null);return}let t=LB();if(!t){b(null);return}let n=r.find(e=>e.id===t);n&&y?.deployment.id!==t&&ae(n,!1)};return e(),window.addEventListener(`popstate`,e),window.addEventListener(`hashchange`,e),()=>{window.removeEventListener(`popstate`,e),window.removeEventListener(`hashchange`,e)}},[r,y?.deployment.id]),(0,s.useEffect)(()=>{if(!D)return;let e=!1;return L(!0),V(``),(async()=>{try{let[t,n]=await Promise.all([g(`/api/v1/agents?limit=100`),g(`/api/v1/system/settings`)]);if(!t.ok)throw Error(`读取可部署 Build 失败(${t.status})`);let r=await t.json(),i=n.ok?await n.json():{},a=Array.isArray(r.items)?r.items:[],o=(await Promise.all(a.map(async e=>{let t=String(e?.metadata?.id||``).trim();if(!t)return null;let n=await g(`/api/v1/agents/${encodeURIComponent(t)}`);return n.ok?n.json():null}))).flatMap(e=>{if(!e)return[];let t=String(e?.draft?.metadata?.id||``).trim(),n=String(e?.draft?.metadata?.name||t||`未命名 Agent`),r=String(e?.draft?.spec?.runtime?.type||``),i=String(e?.draft?.metadata?.labels?.[`agentkit.ksyun.com/artifact-type`]||(r===`codex`?`ManagedRuntime`:`Code`));return(Array.isArray(e.builds)?e.builds:[]).filter(e=>e.status===`SUCCEEDED`).map(e=>({...e,agentId:t,agentName:n,runtimeName:e.runtimeName||r,artifactType:i}))}).sort((e,t)=>String(t.createdAt||``).localeCompare(String(e.createdAt||``)));if(D.buildId&&!o.some(e=>e.id===D.buildId)){let e=await g(`/api/v1/builds/${encodeURIComponent(D.buildId)}`);if(e.ok){let t=await e.json(),n=String(t.agentId||D.agentId||``).trim(),r=n?await g(`/api/v1/agents/${encodeURIComponent(n)}`):null,i=r?.ok?await r.json():null;if(String(t.status||``)===`SUCCEEDED`&&n){let e=String(i?.draft?.spec?.runtime?.type||t.runtimeName||``);o=[{...t,agentId:n,agentName:String(i?.draft?.metadata?.name||n),runtimeName:t.runtimeName||e,artifactType:String(i?.draft?.metadata?.labels?.[`agentkit.ksyun.com/artifact-type`]||(e===`codex`?`ManagedRuntime`:`Code`))},...o]}}}if(e)return;if(F(String(i.cloudRegion||``).trim()),j(o),D.buildId){if(!o.some(e=>e.id===D.buildId))throw Error(`Build ${D.buildId} 不存在或尚未成功`);N(D.buildId)}else N(e=>o.some(t=>t.id===e)?e:``)}catch(t){e||V(t?.message||`可部署 Build 不可用`)}finally{e||L(!1)}})(),()=>{e=!0}},[D?.agentId,D?.buildId]);let W=(0,s.useMemo)(()=>({ready:r.filter(e=>PB(e.status)===`ready`).length,pending:r.filter(e=>PB(e.status)===`pending`).length,failed:r.filter(e=>PB(e.status)===`failed`).length}),[r]);async function ne(e){d(t=>new Set(t).add(e.id));try{let t=e.source===`account`?await g(`/api/v1/cloud-agents/${encodeURIComponent(e.agentId||``)}`):await g(`/api/v1/deployments/${encodeURIComponent(e.id)}`);if(!t.ok)throw Error(`状态刷新失败(${t.status})`);let n=await t.json(),r=e.source===`account`?yB(e,n):{...e,...n,source:`receipt`};if(e.source===`receipt`&&r.agentId){let e=await g(`/api/v1/cloud-agents/${encodeURIComponent(r.agentId)}`).catch(()=>null);e?.ok&&(r=yB(r,await e.json()))}i(t=>t.map(t=>t.id===e.id?r:t))}catch(t){l(`${e.instanceId||e.id}:${t?.message||`状态未知`}`)}finally{d(t=>{let n=new Set(t);return n.delete(e.id),n})}}async function re(){await Promise.all(r.map(e=>ne(e)))}async function G(e){l(``);try{let t=await g(oB(e).kind===`official-dashboard`||e.source===`account`?`/api/v1/cloud-agents/${encodeURIComponent(e.agentId||``)}:dashboard`:`/api/v1/deployments/${encodeURIComponent(e.id)}:dashboard`,{method:`POST`});if(!t.ok)throw Error(`创建云端 UI 访问链接失败(${t.status})`);let n=await t.json(),r=String(n?.accessUrl||n?.access_url||``).trim();if(!r)throw Error(`云端未返回 Agent UI 地址`);window.open(r,`_blank`,`noopener,noreferrer`)}catch(t){l(`${e.instanceId||e.id}:${t?.message||`无法打开云端 UI`}`)}}async function ie(e,t){let n=await vB(`/api/v1/cloud-agents/${encodeURIComponent(e)}/versions?page=1&size=100`,t);if(!n.ok)throw Error(`读取云端版本失败(${n.status})`);let r=await n.json(),i=r.items||r.versions||r.Versions||[];return{items:(Array.isArray(i)?i:[]).map(e=>({versionId:String(e.versionId||e.version_id||e.VersionId||``),versionName:String(e.versionName||e.version_name||e.VersionName||``),tag:String(e.tag||e.Tag||``),status:String(e.status||e.Status||``),trafficPercentage:Number(e.trafficPercentage??e.traffic_percentage??e.TrafficPercentage??0),createdAt:e.createdAt||e.created_at||e.CreatedAt,createdBy:e.createdBy||e.created_by||e.CreatedBy,canRollback:!!(e.canRollback??e.can_rollback??e.CanRollback),rollbackDisabledReason:String(e.rollbackDisabledReason||e.rollback_disabled_reason||e.RollbackDisabledReason||``)})).filter(e=>e.versionId),currentVersionId:String(r.currentVersionId||r.current_version_id||r.CurrentVersionId||``)}}async function ae(e,t=!0,n){if(n?.aborted)return;t&&window.history.pushState(null,``,`#/deployments/${encodeURIComponent(e.id)}`),b({deployment:e,sourceAgentId:``,sourceAgentName:``,builds:[],versions:[],currentVersionId:``,loading:!0,error:``}),p(``),h(!1);let r=e.agentId?ie(e.agentId,n):Promise.resolve({items:[],currentVersionId:``});try{if(e.source===`account`){let t=await vB(`/api/v1/cloud-agents/${encodeURIComponent(e.agentId||``)}`,n);if(!t.ok)throw Error(`刷新云端 Agent 状态失败(${t.status})`);let a=await t.json(),o={...e,agentName:String(a.name||e.agentName||e.agentId||`云端 Agent`),status:String(a.status||e.status).toUpperCase(),endpoint:a.endpoint||e.endpoint,framework:a.framework||e.framework,runtimeType:a.runtimeType||e.runtimeType,capabilities:a.capabilities||e.capabilities,chatTransport:a.chatTransport||e.chatTransport,chatRoutingReason:a.chatRoutingReason||e.chatRoutingReason,versionId:a.versionId||e.versionId,updatedAt:a.updatedAt||e.updatedAt,creatorName:a.creatorName||e.creatorName},s=await r;if(n?.aborted)return;i(t=>t.map(t=>t.id===e.id?o:t)),b({deployment:o,sourceAgentId:``,sourceAgentName:o.agentName||o.agentId||`账号云端 Agent`,builds:[],versions:s.items,currentVersionId:s.currentVersionId,loading:!1,error:``});return}let t=await vB(`/api/v1/deployments/${encodeURIComponent(e.id)}`,n);if(!t.ok)throw Error(`刷新云端 Agent 状态失败(${t.status})`);let a={...e,...await t.json(),source:`receipt`},o=a;if(a.agentId){let e=await vB(`/api/v1/cloud-agents/${encodeURIComponent(a.agentId)}`,n).catch(e=>{if(EB(e))throw e;return null});e?.ok&&(o=yB(a,await e.json()))}if(n?.aborted)return;i(t=>t.map(t=>t.id===e.id?o:t));let s=await vB(`/api/v1/builds/${encodeURIComponent(o.buildId)}`,n);if(!s.ok)throw Error(`读取当前 Build 失败(${s.status})`);let c=await s.json(),l=String(c.agentId||``).trim();if(!l)throw Error(`当前部署缺少本地 Agent 关联`);let u=await vB(`/api/v1/agents/${encodeURIComponent(l)}`,n);if(!u.ok)throw Error(`读取本地 Build 历史失败(${u.status})`);let d=await u.json(),f=(Array.isArray(d.builds)?d.builds:[]).filter(e=>e.status===`SUCCEEDED`).sort((e,t)=>String(t.createdAt||``).localeCompare(String(e.createdAt||``))),p=await r;if(n?.aborted)return;b({deployment:o,sourceAgentId:l,sourceAgentName:String(d?.draft?.metadata?.name||l),builds:f,versions:p.items,currentVersionId:p.currentVersionId,loading:!1,error:``})}catch(e){if(EB(e)||n?.aborted)return;let t=await r.catch(()=>({items:[],currentVersionId:``}));b(n=>n?{...n,versions:t.items,currentVersionId:t.currentVersionId,loading:!1,error:e?.message||`云端 Agent 详情不可用`}:null)}}async function se(){if(!M||R)return;let e=k.find(e=>e.id===M);if(!e){V(`请选择一个已成功的 Build`);return}if(!P){V(`请先在 Studio 设置中配置云端 Region`);return}z(!0),V(``);let t=`deploy:${M}:${P}`,n=ee();try{let r=await NB(await jB(n.signal),t,`deploy`,`部署`,n.signal,(e,t)=>g(`/api/v1/builds/${encodeURIComponent(M)}/deployments`,{method:`POST`,headers:{"Content-Type":`application/json`,"Idempotency-Key":e},body:JSON.stringify({target:{region:P,environment:`cloud`},releasePolicy:{strategy:`rolling`,approval:`none`}}),signal:t}));if(r.status!==`SUCCEEDED`)throw Error(r.error?.message||`部署未完成`);DB(n.signal),await te(n.signal),DB(n.signal);let i=String(r.resourceId||``).trim();qz(i?Kz(i):`#/deployments`),Y(`已提交云端部署`,`${e.agentName||e.agentId} · ${e.id}`)}catch(e){!EB(e)&&!n.signal.aborted&&V(e?.message||`部署失败`)}finally{U(n),n.signal.aborted||z(!1)}}function ce(){b(null),p(``),h(!1),window.history.pushState(null,``,`#/deployments`)}async function le(e,t){if(!t||x)return;S(!0),l(``);let n=`update:${e.agentId||e.id}:${t}`,r=ee();try{let i=await NB(await jB(r.signal),n,`update`,`更新`,r.signal,(n,r)=>g(`/api/v1/builds/${encodeURIComponent(t)}/deployments`,{method:`POST`,headers:{"Content-Type":`application/json`,"Idempotency-Key":n},body:JSON.stringify({target:e.target,releasePolicy:{strategy:`rolling`,approval:`none`}}),signal:r}));if(i.status!==`SUCCEEDED`)throw Error(i.error?.message||`更新未完成`);DB(r.signal),b(null),await te(r.signal),DB(r.signal),Y(`已提交云端更新`,`Build ${t}`)}catch(e){!EB(e)&&!r.signal.aborted&&l(e?.message||`更新失败`)}finally{U(r),r.signal.aborted||S(!1)}}async function ue(){if(!C||T)return;let e=C;E(!0),l(``);try{let t=await g(e.source===`account`?`/api/v1/cloud-agents/${encodeURIComponent(e.agentId||``)}`:`/api/v1/deployments/${encodeURIComponent(e.id)}`,{method:`DELETE`});if(!t.ok)throw Error(`删除云端 Agent 失败(${t.status})`);let n=await t.json();w(null),b(null),await te(),Y(`云端 Agent 已删除`,String(n.agentId||e.agentId||``))}catch(e){l(e?.message||`删除云端 Agent 失败`)}finally{E(!1)}}async function de(){if(!y||!f||_)return;let e=y.deployment,t=String(e.agentId||``).trim(),n=f,r=y.versions.find(e=>e.versionId===n),i=n===y.currentVersionId||r?.status.toLowerCase()===`current`;if(!t||!r?.canRollback||i)return;v(!0),b(e=>e&&{...e,error:``});let a=`rollback:${t}:${n}`,o=ee();try{let r=await NB(await jB(o.signal),a,`rollback`,`回滚`,o.signal,(e,r)=>g(`/api/v1/cloud-agents/${encodeURIComponent(t)}:rollback-version`,{method:`POST`,headers:{"Content-Type":`application/json`,"Idempotency-Key":e},body:JSON.stringify({versionId:n}),signal:r}));if(r.status!==`SUCCEEDED`)throw Error(r.error?.message||`回滚未完成`);DB(o.signal),h(!1),p(``),await te(o.signal),await ae(e,!1,o.signal),DB(o.signal),Y(`已提交版本回滚`,`云端版本 ${n}`)}catch(e){!EB(e)&&!o.signal.aborted&&(h(!1),b(t=>t&&{...t,error:e?.message||`回滚失败`}))}finally{U(o),o.signal.aborted||v(!1)}}if(D){let e=k.find(e=>e.id===M);return(0,K.jsxs)(`div`,{className:`delivery-page deployment-create-page`,"data-layout":`document`,children:[(0,K.jsxs)(gd,{children:[(0,K.jsxs)(`button`,{className:`button secondary`,type:`button`,onClick:()=>qz(`#/deployments`),children:[(0,K.jsx)(A,{size:15}),(0,K.jsx)(`span`,{children:`返回云端 Agent`})]}),(0,K.jsxs)(`button`,{className:`button accent`,type:`button`,onClick:()=>void se(),disabled:!e||R||I,children:[(0,K.jsx)(oe,{size:15}),(0,K.jsx)(`span`,{children:R?`部署中…`:`部署到云端`})]})]}),(0,K.jsx)(`div`,{className:`delivery-intro`,children:(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`h2`,{children:`部署到云端`}),(0,K.jsx)(`p`,{children:`选择一个已成功的 Build,由 Studio 提交统一云端部署操作。`})]})}),B&&(0,K.jsx)(`div`,{className:`form-error`,role:`alert`,children:B}),(0,K.jsxs)(`section`,{className:`delivery-block`,"aria-label":`选择部署 Build`,children:[(0,K.jsx)(`h2`,{children:`选择 Build`}),(0,K.jsx)(`p`,{children:`ManagedRuntime 使用已校验声明;ADK、LangGraph 等代码 Agent 使用不可变 Code Bundle。`}),I?(0,K.jsx)(`p`,{children:`正在读取可部署 Build…`}):k.length?(0,K.jsx)(`div`,{className:`deployment-version-list`,role:`radiogroup`,"aria-label":`可部署 Build`,children:k.map(e=>(0,K.jsxs)(`button`,{type:`button`,role:`radio`,"aria-checked":e.id===M,"aria-label":`${e.agentName||e.agentId||`Agent`} ${e.id}`,className:`deployment-version-option`,"data-selected":e.id===M,onClick:()=>N(e.id),children:[(0,K.jsx)(`strong`,{className:`deployment-version-name`,children:e.agentName||e.agentId||`未命名 Agent`}),(0,K.jsx)(`span`,{className:`deployment-version-state`,"data-state":`available`,children:e.artifactType===`ManagedRuntime`?`托管声明`:`代码 Bundle`}),(0,K.jsx)(`code`,{title:e.id,children:IB(e.id,24)}),(0,K.jsx)(`time`,{className:`deployment-version-time`,dateTime:e.createdAt||void 0,children:zB(e.createdAt)})]},e.id))}):(0,K.jsxs)(`div`,{className:`delivery-empty-state`,children:[(0,K.jsx)(ze,{size:24}),(0,K.jsx)(`h2`,{children:`没有可部署的 Build`}),(0,K.jsx)(`p`,{children:`请先完成 Agent 构建或 ManagedRuntime 声明校验。`}),(0,K.jsx)(`button`,{className:`button secondary`,type:`button`,onClick:n,children:`前往构建`})]}),e&&(0,K.jsxs)(`div`,{className:`api-contract`,"aria-label":`部署提交摘要`,children:[(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`span`,{children:`Agent`}),(0,K.jsx)(`strong`,{children:e.agentName||e.agentId})]}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`span`,{children:`Build`}),(0,K.jsx)(`code`,{children:e.id})]}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`span`,{children:`制品`}),(0,K.jsx)(`strong`,{children:e.artifactType===`ManagedRuntime`?`ManagedRuntime 声明`:`Code Bundle`})]}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`span`,{children:`目标`}),(0,K.jsx)(`strong`,{children:`云端`})]})]})]})]})}if(y){let e=y.builds[0],n=y.versions.find(e=>e.versionId===f&&e.canRollback&&e.versionId!==y.currentVersionId&&e.status.toLowerCase()!==`current`),r=y.versions.find(e=>e.versionId===y.currentVersionId||e.status.toLowerCase()===`current`),i=y.deployment.source===`receipt`,a=i&&y.deployment.artifactId===`managed-runtime`&&!!e&&e.id!==y.deployment.buildId,o=oB(y.deployment);return(0,K.jsxs)(`div`,{className:`delivery-page deployment-detail-page`,"data-layout":`document`,children:[(0,K.jsxs)(gd,{children:[(0,K.jsxs)(`button`,{className:`button secondary`,type:`button`,onClick:ce,children:[(0,K.jsx)(A,{size:15}),(0,K.jsx)(`span`,{children:`返回云端 Agent`})]}),!!y.deployment.agentId&&(0,K.jsx)(`button`,{className:`button secondary`,type:`button`,onClick:()=>h(!0),disabled:!n?.canRollback||x||_,children:_?`回滚中…`:n?`回滚到所选版本`:`选择版本回滚`}),a&&(0,K.jsx)(`button`,{className:`button secondary`,type:`button`,onClick:()=>void le(y.deployment,e.id),disabled:x,children:x?`更新中…`:`部署最新 Build`}),PB(y.deployment.status)===`ready`&&(0,K.jsx)(`button`,{className:`button accent`,type:`button`,onClick:()=>o.kind===`official-dashboard`?void G(y.deployment):t(y.deployment),disabled:x,children:o.kind===`official-dashboard`?(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(he,{size:15}),`链接`]}):(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(Ne,{size:15}),`进入会话`]})})]}),(0,K.jsxs)(`div`,{className:`delivery-intro deployment-detail-heading`,children:[(0,K.jsx)(`button`,{className:`button tertiary compact`,type:`button`,onClick:ce,"aria-label":`返回云端 Agent`,children:(0,K.jsx)(A,{size:16})}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`h2`,{children:y.deployment.agentName||y.sourceAgentName||`云端 Agent`}),(0,K.jsx)(`p`,{children:y.deployment.agentId||y.deployment.id})]})]}),y.error&&(0,K.jsx)(`div`,{className:`form-error`,role:`alert`,children:y.error}),(0,K.jsxs)(`section`,{className:`delivery-block`,"aria-label":`云端 Agent 详情`,children:[(0,K.jsxs)(`div`,{className:`api-contract`,"aria-label":`云端部署事实`,children:[(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`span`,{children:`名称`}),(0,K.jsx)(`strong`,{children:y.deployment.agentName||y.sourceAgentName})]}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`span`,{children:`来源`}),(0,K.jsx)(`strong`,{children:i?`Studio 部署记录`:`账号云端 Agent`})]}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`span`,{children:`创建子账号`}),(0,K.jsx)(`strong`,{children:y.deployment.creatorName||`-`})]}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`span`,{children:`状态`}),(0,K.jsx)(`strong`,{children:FB(y.deployment.status)})]}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`span`,{children:`云端 Agent`}),(0,K.jsx)(`code`,{children:y.deployment.agentId||`尚未返回`})]}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`span`,{children:`类型`}),(0,K.jsx)(`code`,{children:y.deployment.framework||y.deployment.artifactId||`尚未返回`})]}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`span`,{children:`Endpoint`}),(0,K.jsx)(`code`,{children:y.deployment.endpoint||`尚未返回`})]}),y.deployment.instanceId&&(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`span`,{children:`实例`}),(0,K.jsx)(`code`,{children:y.deployment.instanceId})]}),i&&(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`span`,{children:`当前 Build`}),(0,K.jsx)(`code`,{children:y.deployment.buildId})]}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`span`,{children:`当前版本`}),(0,K.jsx)(`code`,{title:r?.versionId||y.deployment.versionId||void 0,children:r?.versionName||r?.tag||y.deployment.versionId||`尚未返回`})]}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`span`,{children:`更新时间`}),(0,K.jsx)(`code`,{children:zB(y.deployment.updatedAt)})]}),i&&(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`span`,{children:`Bundle`}),(0,K.jsx)(`code`,{title:y.deployment.bundleDigest,children:y.deployment.bundleDigest})]})]}),y.deployment.agentId?(0,K.jsxs)(`section`,{className:`deployment-version-history`,"aria-label":`云端版本历史`,children:[(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`h3`,{children:`云端版本历史`}),(0,K.jsx)(`p`,{children:`版本状态与可回滚性来自云端 Server`})]}),y.loading?(0,K.jsx)(`p`,{children:`正在读取版本…`}):(0,K.jsxs)(`div`,{className:`deployment-version-list`,role:`radiogroup`,"aria-label":`选择回滚版本`,children:[(0,K.jsxs)(`div`,{className:`deployment-version-header`,"aria-hidden":`true`,children:[(0,K.jsx)(`span`,{children:`版本`}),(0,K.jsx)(`span`,{children:`状态`}),(0,K.jsx)(`span`,{children:`流量`}),(0,K.jsx)(`span`,{children:`创建时间`})]}),y.versions.length?y.versions.map(e=>{let t=e.versionId===y.currentVersionId||e.status.toLowerCase()===`current`,n=t?`当前`:e.canRollback?`可回滚`:`不可回滚`;return(0,K.jsxs)(`button`,{type:`button`,role:`radio`,"aria-checked":e.versionId===f,"aria-label":`${t?`当前版本`:e.canRollback?`可回滚版本`:`不可回滚版本`} ${e.versionName||e.tag||`未命名`}`,className:`deployment-version-option`,"data-current":t,"data-selected":e.versionId===f,disabled:t||!e.canRollback||x||_,onClick:()=>p(e.versionId),children:[(0,K.jsx)(`strong`,{className:`deployment-version-name`,children:e.versionName||e.tag||`未命名版本`}),(0,K.jsx)(`span`,{className:`deployment-version-state`,"data-state":t?`current`:e.canRollback?`available`:`disabled`,children:n}),(0,K.jsxs)(`span`,{className:`deployment-version-traffic`,children:[e.trafficPercentage,`%`]}),(0,K.jsx)(`time`,{className:`deployment-version-time`,dateTime:e.createdAt||void 0,children:zB(e.createdAt)})]},e.versionId)}):(0,K.jsx)(`p`,{className:`deployment-version-empty`,children:`云端暂未返回版本记录。`})]})]}):(0,K.jsx)(`div`,{className:`callout`,children:(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`strong`,{children:`缺少云端 Agent ID`}),(0,K.jsx)(`p`,{children:`当前记录无法查询 Server 版本历史,因此不开放版本回滚。`})]})})]}),m&&n&&(0,K.jsx)(Ca,{title:`确认回滚云端 Agent?`,description:`当前云端版本 ${r?.versionName||y.deployment.versionId||`未知`}(${r?.versionId||y.deployment.versionId||`未知`})将回滚到 ${n.versionName||n.tag||`目标版本`}(${n.versionId})。系统将调用 Server RollbackVersion,并在提交后重新读取 Agent 与版本列表。`,confirmText:`确认回滚`,danger:!1,busy:_,onConfirm:()=>void de(),onCancel:()=>h(!1)})]})}return(0,K.jsxs)(`div`,{className:`delivery-page`,"data-layout":`document`,children:[(0,K.jsxs)(gd,{children:[(0,K.jsxs)(`button`,{className:`button accent`,type:`button`,onClick:()=>qz(`#/deployments/new`),children:[(0,K.jsx)(oe,{size:15}),(0,K.jsx)(`span`,{children:`部署 Agent`})]}),(0,K.jsxs)(`button`,{className:`button secondary`,type:`button`,onClick:()=>void re(),disabled:!r.length||u.size>0,children:[(0,K.jsx)(Je,{size:15}),(0,K.jsx)(`span`,{children:`刷新全部状态`})]})]}),c&&(0,K.jsx)(`div`,{className:`form-error`,role:`alert`,children:c}),(0,K.jsxs)(`section`,{className:`delivery-stat-strip compact-delivery-summary`,"aria-label":`部署摘要`,children:[(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`span`,{className:`stat-label`,title:`同一 Agent 的多次部署按 Agent 聚合`,children:`云端 Agent`}),(0,K.jsx)(`strong`,{children:r.length})]}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`span`,{className:`stat-label`,children:`运行中`}),(0,K.jsx)(`strong`,{children:W.ready})]}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`span`,{className:`stat-label`,children:`部署中`}),(0,K.jsx)(`strong`,{children:W.pending})]}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`span`,{className:`stat-label`,children:`异常`}),(0,K.jsx)(`strong`,{children:W.failed})]})]}),a?(0,K.jsx)(`div`,{className:`delivery-empty-state`,children:(0,K.jsx)(`p`,{children:`正在读取云端 Agent…`})}):r.length?(0,K.jsxs)(`section`,{className:`delivery-block`,"aria-label":`云端 Agent 列表`,children:[(0,K.jsxs)(`div`,{className:`delivery-section-heading`,children:[(0,K.jsx)(`h2`,{children:`Agent 列表`}),(0,K.jsxs)(`span`,{children:[r.length,` 个`]})]}),(0,K.jsx)(`div`,{className:`delivery-table-scroll`,children:(0,K.jsxs)(`table`,{className:`delivery-table`,children:[(0,K.jsx)(`thead`,{children:(0,K.jsxs)(`tr`,{children:[(0,K.jsx)(`th`,{children:`Agent`}),(0,K.jsx)(`th`,{children:`状态`}),(0,K.jsx)(`th`,{children:`类型`}),(0,K.jsx)(`th`,{children:`创建子账号`}),(0,K.jsx)(`th`,{children:`版本`}),(0,K.jsx)(`th`,{children:`更新时间`}),(0,K.jsx)(`th`,{children:(0,K.jsx)(`span`,{className:`sr-only`,children:`操作`})})]})}),(0,K.jsx)(`tbody`,{children:r.map(e=>{let n=u.has(e.id),r=oB(e);return(0,K.jsxs)(`tr`,{children:[(0,K.jsx)(`td`,{children:(0,K.jsxs)(`button`,{className:`delivery-agent-identity`,type:`button`,"aria-label":`查看 ${e.agentName||e.agentId||`云端 Agent`} 详情`,onClick:()=>void ae(e),children:[(0,K.jsx)(`strong`,{children:e.agentName||e.agentId||`云端 Agent`}),(0,K.jsx)(`code`,{title:e.agentId||e.id,children:IB(e.agentId||e.id,24)})]})}),(0,K.jsx)(`td`,{children:(0,K.jsx)(`span`,{className:`delivery-status-badge`,"data-state":PB(e.status),children:FB(e.status)})}),(0,K.jsxs)(`td`,{children:[(0,K.jsx)(`strong`,{children:e.framework||(e.artifactId===`managed-runtime`?`YAML Agent`:`高代码 Agent`)}),e.source===`receipt`&&(0,K.jsx)(`small`,{children:`Studio 部署记录`})]}),(0,K.jsx)(`td`,{children:e.creatorName||`-`}),(0,K.jsx)(`td`,{children:(0,K.jsx)(`code`,{title:e.versionId||``,children:IB(e.versionId||`—`,20)})}),(0,K.jsx)(`td`,{children:(0,K.jsx)(`span`,{className:`delivery-updated-at`,children:zB(e.updatedAt)})}),(0,K.jsxs)(`td`,{className:`delivery-row-actions`,children:[PB(e.status)===`ready`&&e.agentId&&(0,K.jsx)(`button`,{className:`button secondary compact`,type:`button`,"aria-label":r.kind===`official-dashboard`?`打开官方 Dashboard`:`打开云端 Agent 会话`,onClick:()=>r.kind===`official-dashboard`?void G(e):t(e),children:r.kind===`official-dashboard`?(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(he,{size:15}),(0,K.jsx)(`span`,{children:`链接`})]}):(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(Ne,{size:15}),(0,K.jsx)(`span`,{children:`会话`})]})}),(0,K.jsx)(pd,{label:`${e.agentName||e.agentId||e.id} 的更多操作`,items:[{label:n?`正在刷新状态`:`刷新状态`,disabled:n,onSelect:()=>void ne(e)},...PB(e.status)===`ready`&&e.agentId?[{label:`在 Hosted UI 中打开`,onSelect:()=>void G(e)}]:[],...e.source===`receipt`?[{label:`版本管理`,onSelect:()=>void ae(e)}]:[],...e.agentId?[{label:`删除云端 Agent`,danger:!0,onSelect:()=>w(e)}]:[]]})]})]},e.id)})})]})})]}):(0,K.jsxs)(`div`,{className:`delivery-empty-state`,children:[(0,K.jsx)(oe,{size:24}),(0,K.jsx)(`h2`,{children:`还没有云端 Agent`}),(0,K.jsx)(`p`,{children:`可以从 Agent 详情构建并部署到云端。`}),(0,K.jsxs)(`div`,{className:`delivery-empty-actions`,children:[(0,K.jsx)(`button`,{className:`button accent`,type:`button`,onClick:()=>qz(`#/deployments/new`),children:`部署 Agent`}),(0,K.jsx)(`button`,{className:`button secondary`,type:`button`,onClick:e,children:`创建 Agent`})]})]}),C&&(0,K.jsx)(Ca,{title:`删除云端 Agent?`,description:`将删除 ${C.agentId||C.id} 的云端实例和本地部署记录。此操作不会删除本地 Agent 与 Build。`,confirmText:`删除云端 Agent`,busy:T,onConfirm:()=>void ue(),onCancel:()=>w(null)})]})}var VB=e=>typeof e==`boolean`||e instanceof Boolean,HB=e=>typeof e==`number`||e instanceof Number,UB=e=>typeof e==`bigint`||e instanceof BigInt,WB=e=>!!e&&e instanceof Date,GB=e=>typeof e==`string`||e instanceof String,KB=e=>Array.isArray(e),qB=e=>typeof e==`object`&&!!e,JB=e=>!!e&&e instanceof Object&&typeof e==`function`;function YB(e,t){return t===void 0&&(t=!1),!e||t?`"${e}"`:e}function XB(e,t,n){return n?JSON.stringify(e):t?`"${e}"`:e}function ZB(e){let{field:t,value:n,data:r,lastElement:i,openBracket:a,closeBracket:o,level:c,style:l,shouldExpandNode:u,clickToExpandNode:d,outerRef:f,beforeExpandChange:p}=e,m=(0,s.useRef)(!1),[h,g]=(0,s.useState)(()=>u(c,n,t)),_=(0,s.useRef)(null);(0,s.useEffect)(()=>{m.current?g(u(c,n,t)):m.current=!0},[u]);let v=(0,s.useId)();if(r.length===0)return QB({field:t,openBracket:a,closeBracket:o,lastElement:i,style:l});let y=h?l.collapseIcon:l.expandIcon,b=h?l.ariaLables.collapseJson:l.ariaLables.expandJson,x=c+1,S=r.length-1,C=e=>{h!==e&&(!p||p({level:c,value:n,field:t,newExpandValue:e}))&&g(e)},w=e=>{if(e.key===`ArrowRight`||e.key===`ArrowLeft`)e.preventDefault(),C(e.key===`ArrowRight`);else if(e.key===`ArrowUp`||e.key===`ArrowDown`){e.preventDefault();let t=e.key===`ArrowUp`?-1:1;if(!f.current)return;let n=f.current.querySelectorAll(`[role=button]`),r=-1;for(let e=0;e{C(!h);let e=_.current;if(!e)return;let t=f.current?.querySelector(`[role=button][tabindex="0"]`);t&&(t.tabIndex=-1),e.tabIndex=0,e.focus()};return(0,s.createElement)(`div`,{className:l.basicChildStyle,role:`treeitem`,"aria-expanded":h,"aria-selected":void 0},(0,s.createElement)(`span`,{className:y,onClick:T,onKeyDown:w,role:`button`,"aria-label":b,"aria-expanded":h,"aria-controls":h?v:void 0,ref:_,tabIndex:c===0?0:-1}),(t||t===``)&&(d?(0,s.createElement)(`span`,{className:l.clickableLabel,onClick:T,onKeyDown:w},YB(t,l.quotesForFieldNames),`:`):(0,s.createElement)(`span`,{className:l.label},YB(t,l.quotesForFieldNames),`:`)),(0,s.createElement)(`span`,{className:l.punctuation},a),h?(0,s.createElement)(`ul`,{id:v,role:`group`,className:l.childFieldsContainer},r.map((e,t)=>(0,s.createElement)(nV,{key:e[0]||t,field:e[0],value:e[1],style:l,lastElement:t===S,level:x,shouldExpandNode:u,clickToExpandNode:d,beforeExpandChange:p,outerRef:f}))):(0,s.createElement)(`span`,{className:l.collapsedContent,onClick:T,onKeyDown:w}),(0,s.createElement)(`span`,{className:l.punctuation},o),!i&&(0,s.createElement)(`span`,{className:l.punctuation},`,`))}function QB(e){let{field:t,openBracket:n,closeBracket:r,lastElement:i,style:a}=e;return(0,s.createElement)(`div`,{className:a.basicChildStyle,role:`treeitem`,"aria-selected":void 0},(t||t===``)&&(0,s.createElement)(`span`,{className:a.label},YB(t,a.quotesForFieldNames),`:`),(0,s.createElement)(`span`,{className:a.punctuation},n),(0,s.createElement)(`span`,{className:a.punctuation},r),!i&&(0,s.createElement)(`span`,{className:a.punctuation},`,`))}function $B(e){let{field:t,value:n,style:r,lastElement:i,shouldExpandNode:a,clickToExpandNode:o,level:s,outerRef:c,beforeExpandChange:l}=e;return ZB({field:t,value:n,lastElement:i||!1,level:s,openBracket:`{`,closeBracket:`}`,style:r,shouldExpandNode:a,clickToExpandNode:o,data:Object.keys(n).map(e=>[e,n[e]]),outerRef:c,beforeExpandChange:l})}function eV(e){let{field:t,value:n,style:r,lastElement:i,level:a,shouldExpandNode:o,clickToExpandNode:s,outerRef:c,beforeExpandChange:l}=e;return ZB({field:t,value:n,lastElement:i||!1,level:a,openBracket:`[`,closeBracket:`]`,style:r,shouldExpandNode:o,clickToExpandNode:s,data:n.map(e=>[void 0,e]),outerRef:c,beforeExpandChange:l})}function tV(e){let{field:t,value:n,style:r,lastElement:i}=e,a,o=r.otherValue;return n===null?(a=`null`,o=r.nullValue):n===void 0?(a=`undefined`,o=r.undefinedValue):GB(n)?(a=XB(n,!r.noQuotesForStringValues,r.stringifyStringValues),o=r.stringValue):VB(n)?(a=n?`true`:`false`,o=r.booleanValue):HB(n)?(a=n.toString(),o=r.numberValue):UB(n)?(a=`${n.toString()}n`,o=r.numberValue):a=WB(n)?n.toISOString():JB(n)?`function() { }`:n.toString(),(0,s.createElement)(`div`,{className:r.basicChildStyle,role:`treeitem`,"aria-selected":void 0},(t||t===``)&&(0,s.createElement)(`span`,{className:r.label},YB(t,r.quotesForFieldNames),`:`),(0,s.createElement)(`span`,{className:o},a),!i&&(0,s.createElement)(`span`,{className:r.punctuation},`,`))}function nV(e){let t=e.value;return KB(t)?(0,s.createElement)(eV,Object.assign({},e)):qB(t)&&!WB(t)&&!JB(t)?(0,s.createElement)($B,Object.assign({},e)):(0,s.createElement)(tV,Object.assign({},e))}var rV={"container-base":`_GzYRV`,"punctuation-base":`_3eOF8`,pointer:`_1MFti`,"expander-base":`_f10Tu _1MFti`,"expand-icon":`_1UmXx`,"collapse-icon":`_1LId0`,"collapsed-content-base":`_1pNG9 _1MFti`,"container-light":`_2IvMF _GzYRV`,"basic-element-style":`_2bkNM`,"child-fields-container":`_1BXBN`,"label-light":`_1MGIk`,"clickable-label-light":`_2YKJg _1MGIk _1MFti`,"punctuation-light":`_3uHL6 _3eOF8`,"value-null-light":`_2T6PJ`,"value-undefined-light":`_1Gho6`,"value-string-light":`_vGjyY`,"value-number-light":`_1bQdo`,"value-boolean-light":`_3zQKs`,"value-other-light":`_1xvuR`,"collapse-icon-light":`_oLqym _f10Tu _1MFti _1LId0`,"expand-icon-light":`_2AXVT _f10Tu _1MFti _1UmXx`,"collapsed-content-light":`_2KJWg _1pNG9 _1MFti`,"container-dark":`_11RoI _GzYRV`,"expand-icon-dark":`_17H2C _f10Tu _1MFti _1UmXx`,"collapse-icon-dark":`_3QHg2 _f10Tu _1MFti _1LId0`,"collapsed-content-dark":`_3fDAz _1pNG9 _1MFti`,"label-dark":`_2bSDX`,"clickable-label-dark":`_1RQEj _2bSDX _1MFti`,"punctuation-dark":`_gsbQL _3eOF8`,"value-null-dark":`_LaAZe`,"value-undefined-dark":`_GTKgm`,"value-string-dark":`_Chy1W`,"value-number-dark":`_2bveF`,"value-boolean-dark":`_2vRm-`,"value-other-dark":`_1prJR`},iV={container:rV[`container-light`],basicChildStyle:rV[`basic-element-style`],childFieldsContainer:rV[`child-fields-container`],label:rV[`label-light`],clickableLabel:rV[`clickable-label-light`],nullValue:rV[`value-null-light`],undefinedValue:rV[`value-undefined-light`],stringValue:rV[`value-string-light`],booleanValue:rV[`value-boolean-light`],numberValue:rV[`value-number-light`],otherValue:rV[`value-other-light`],punctuation:rV[`punctuation-light`],collapseIcon:rV[`collapse-icon-light`],expandIcon:rV[`expand-icon-light`],collapsedContent:rV[`collapsed-content-light`],noQuotesForStringValues:!1,quotesForFieldNames:!1,ariaLables:{collapseJson:`collapse JSON`,expandJson:`expand JSON`},stringifyStringValues:!1};rV[`container-dark`],rV[`basic-element-style`],rV[`child-fields-container`],rV[`label-dark`],rV[`clickable-label-dark`],rV[`value-null-dark`],rV[`value-undefined-dark`],rV[`value-string-dark`],rV[`value-boolean-dark`],rV[`value-number-dark`],rV[`value-other-dark`],rV[`punctuation-dark`],rV[`collapse-icon-dark`],rV[`expand-icon-dark`],rV[`collapsed-content-dark`];var aV=()=>!0,oV=e=>e<1,sV=e=>{let{data:t,style:n=iV,shouldExpandNode:r=aV,clickToExpandNode:i=!1,beforeExpandChange:a,compactTopLevel:o,...c}=e,l=(0,s.useRef)(null);return(0,s.createElement)(`div`,Object.assign({"aria-label":`JSON view`},c,{className:n.container,ref:l,role:`tree`}),o&&qB(t)?Object.entries(t).map(e=>{let[t,o]=e;return(0,s.createElement)(nV,{key:t,field:t,value:o,style:{...iV,...n},lastElement:!0,level:1,shouldExpandNode:r,clickToExpandNode:i,beforeExpandChange:a,outerRef:l})}):(0,s.createElement)(nV,{value:t,style:{...iV,...n},lastElement:!0,level:0,shouldExpandNode:r,clickToExpandNode:i,outerRef:l,beforeExpandChange:a}))};function cV(e){return e===`failed`||e===`canceled`||e===`cancelled`||e===`interrupted`?3:e===`completed`?2:+(e===`running`)}function lV(e,t){let n=[...e?.sourceEvents||[],t].sort((e,t)=>e.seqId-t.seqId),r=n[0],i=n[n.length-1],a={...e?.details||{},...t.details},o=t.details.text,s=t.type.startsWith(`reasoning.`),c=t.type.startsWith(`text.`),l=t.category===`assistant`;if((s||c)&&typeof o==`string`){let n=s?`reasoning`:`output`,r=e?.details[n];a[n]=t.type.endsWith(`.delta`)&&t.details.replace!==!0&&typeof r==`string`?r+o:o,a.text=a[n]}t.type===`usage.reported`&&(a.usage={...t.details});let u=cV(t.status)>=cV(e?.status||null)?t.status??e?.status??null:e?.status??null,d=!!(u&&cV(u)>=2)||/\.(end|completed|resolved)$/.test(t.type),f=r.timestamp,p=d?i.timestamp:e?.endedAt??null,m=p!==null&&n.length>1&&p>f?(p-f)*1e3:null;return{...e||t,...t,type:l?`assistant.message`:t.type,summary:l?`Message`:t.summary,status:u,durationMs:t.durationMs??e?.durationMs??m,details:a,sourceEvents:n,firstSeqId:r.seqId,lastSeqId:i.seqId,startedAt:f,endedAt:p}}function uV(e,t){let n=e.byRecordId.get(t.recordId);if(n===void 0){e.byRecordId.set(t.recordId,e.items.length),e.items.push(lV(void 0,t));return}e.items[n]=lV(e.items[n],t)}function dV(e){return{...e,items:[...e.items],bySeq:new Map(e.bySeq),byRecordId:new Map(e.byRecordId)}}function fV(e=[],t=!1){let n={items:[],bySeq:new Map,byRecordId:new Map,lastSeqId:0,gap:null,hasMore:t,followTail:!0};for(let t of[...e].sort((e,t)=>e.seqId-t.seqId))n.bySeq.has(t.seqId)||(n.bySeq.set(t.seqId,t),uV(n,t),n.lastSeqId=t.seqId);return n}function pV(e,t,n=!0){if(e.bySeq.has(t.seqId))return e;let r=dV(e);if(r.bySeq.set(t.seqId,t),t.seqId<=r.lastSeqId)return r;if(!n)return uV(r,t),r.lastSeqId=t.seqId,r.gap=null,r;if(t.seqId>r.lastSeqId+1)return r.gap={afterSeqId:r.lastSeqId,beforeSeqId:t.seqId},r;let i=t;for(;i;)uV(r,i),r.lastSeqId=i.seqId,i=r.bySeq.get(r.lastSeqId+1);let a=[...r.bySeq.keys()].filter(e=>e>r.lastSeqId).sort((e,t)=>e-t)[0];return r.gap=a===void 0?null:{afterSeqId:r.lastSeqId,beforeSeqId:a},r}function mV(e,t,n){let r=new Map(e.bySeq);for(let e of t)r.has(e.seqId)||r.set(e.seqId,e);let i=fV([...r.values()],n);return i.followTail=e.followTail,i}function hV(e){return e===null||Number.isNaN(e)?`不可用`:e<1e3?`${Math.round(e)} ms`:`${(e/1e3).toFixed(e<1e4?2:1)} s`}function gV(e){return e===`tool`?(0,K.jsx)(pt,{size:15}):e===`assistant`?(0,K.jsx)(N,{size:15}):e===`context`?(0,K.jsx)(F,{size:15}):e===`user`?(0,K.jsx)(Me,{size:15}):e===`approval`?(0,K.jsx)(et,{size:15}):e===`artifact`?(0,K.jsx)(_e,{size:15}):(0,K.jsx)(ne,{size:15})}function _V(e){return[yV(e),e.status||`未上报`,hV(e.durationMs)].join(` · `)}function vV(e){return typeof e==`object`&&e&&!Array.isArray(e)?e:{}}function yV(e){let t=e.details.name??e.details.model;return typeof t==`string`&&t?t:e.summary}function bV(e,t){let n=vV(e.details.usage)[t];return typeof n==`number`?String(n):`-`}function xV(e){return{user:`User`,context:`Context`,assistant:`Assistant`,tool:`Tool`,approval:`Approval`,artifact:`Artifact`,system:`System`}[e]}function SV(e){return e.category===`user`||e.category===`context`?`input`:e.category===`assistant`?`model`:e.category===`tool`?`tools`:null}function CV(e,t){let n=new URLSearchParams({limit:`100`});return t&&n.set(`invocationId`,t),`/api/v1/sessions/${encodeURIComponent(e)}/events?${n}`}function wV({record:e}){let[t,n]=(0,s.useState)(e.category===`system`?`source`:`summary`);return(0,K.jsxs)(`div`,{className:`trajectory-detail`,children:[(0,K.jsxs)(`header`,{className:`trajectory-detail-heading`,children:[(0,K.jsx)(`strong`,{children:yV(e)}),(0,K.jsxs)(`span`,{children:[xV(e.category),` · `,e.status||`未上报`]})]}),(0,K.jsx)(`div`,{className:`trajectory-detail-tabs`,role:`tablist`,"aria-label":`节点详情`,children:[`summary`,`preview`,`raw`,`source`].map(e=>(0,K.jsx)(`button`,{type:`button`,role:`tab`,"aria-selected":t===e,onClick:()=>n(e),children:e===`summary`?`Summary`:e===`preview`?`Preview`:e===`raw`?`Raw Events`:`Source`},e))}),t===`summary`&&(0,K.jsxs)(K.Fragment,{children:[(0,K.jsxs)(`section`,{children:[(0,K.jsx)(`h3`,{children:`Timing`}),(0,K.jsx)(`pre`,{children:JSON.stringify({status:e.status,durationMs:e.durationMs,ttftMs:e.details.ttft_ms??null,startedAt:e.startedAt,endedAt:e.endedAt},null,2)})]}),e.details.usage!==void 0&&(0,K.jsxs)(`section`,{children:[(0,K.jsx)(`h3`,{children:`Usage`}),(0,K.jsx)(`pre`,{children:JSON.stringify(e.details.usage,null,2)})]})]}),t===`preview`&&(0,K.jsxs)(K.Fragment,{children:[(0,K.jsxs)(`section`,{children:[(0,K.jsx)(`h3`,{children:`Input`}),(0,K.jsx)(`pre`,{children:JSON.stringify(e.details.args??e.details.input??(e.category===`user`?e.details.text:null),null,2)})]}),(0,K.jsxs)(`section`,{children:[(0,K.jsx)(`h3`,{children:`Output`}),(0,K.jsx)(`pre`,{children:JSON.stringify(e.details.result??e.details.output??null,null,2)})]}),(0,K.jsxs)(`section`,{children:[(0,K.jsx)(`h3`,{children:`Reasoning`}),(0,K.jsx)(`pre`,{children:JSON.stringify(e.details.reasoning??null,null,2)})]})]}),t===`raw`&&(0,K.jsxs)(`section`,{children:[(0,K.jsx)(`h3`,{children:`Raw Events`}),(0,K.jsx)(`pre`,{children:JSON.stringify(e.sourceEvents.map(e=>e.source??e),null,2)})]}),t===`source`&&(0,K.jsxs)(`section`,{children:[(0,K.jsx)(`h3`,{children:`Source`}),(0,K.jsx)(`pre`,{children:JSON.stringify({recordId:e.recordId,eventIds:e.sourceEvents.map(e=>e.eventId),seqIds:e.sourceEvents.map(e=>e.seqId),turnId:e.turnId,stepId:e.stepId},null,2)})]})]})}function TV({sessionId:e,invocationId:t,onSelectionChange:n}){let[r,i]=(0,s.useState)(()=>fV()),[a,o]=(0,s.useState)(!0),[c,l]=(0,s.useState)(!0),[u,d]=(0,s.useState)(!0),[f,p]=(0,s.useState)(!1),[m,h]=(0,s.useState)(null),[_,v]=(0,s.useState)(!0),[y,b]=(0,s.useState)(``),x=(0,s.useRef)(null);(0,s.useEffect)(()=>{let n=!1,r=null;return v(!0),b(``),i(fV()),h(null),g(CV(e,t)).then(async e=>{if(!e.ok)throw Error(`轨迹加载失败(${e.status})`);return e.json()}).then(a=>{if(n)return;let o=fV(a.items||[],!!a.page?.hasMore);i(o),v(!1);let s=new URLSearchParams({afterSeqId:String(o.lastSeqId)});t&&s.set(`invocationId`,t),r=new EventSource(`/api/v1/sessions/${encodeURIComponent(e)}/events/stream?${s}`),r.addEventListener(`runtime_event`,e=>{try{let n=JSON.parse(e.data);i(e=>pV(e,n,!t))}catch{b(`实时轨迹包含无法解析的事件`)}})}).catch(e=>{n||(v(!1),b(e instanceof Error?e.message:`轨迹加载失败`))}),()=>{n=!0,r?.close()}},[t,e]),(0,s.useEffect)(()=>{if(!r.gap)return;let n=!1,a=r.gap,o=new URLSearchParams({limit:`500`,beforeSeqId:String(a.beforeSeqId)});return t&&o.set(`invocationId`,t),g(`/api/v1/sessions/${encodeURIComponent(e)}/events?${o}`).then(e=>{if(!e.ok)throw Error(`轨迹补拉失败(${e.status})`);return e.json()}).then(e=>{if(n)return;let t=(e.items||[]).filter(e=>e.seqId>a.afterSeqId).sort((e,t)=>e.seqId-t.seqId);i(e=>t.reduce((e,t)=>pV(e,t),e))}).catch(()=>{n||b(`实时轨迹存在序号缺口,补拉失败`)}),()=>{n=!0}},[t,e,r.gap]),(0,s.useEffect)(()=>{let e=x.current;e&&r.followTail&&(e.scrollTop=e.scrollHeight)},[r.followTail,r.items]);let S=(0,s.useCallback)(async()=>{let n=Math.min(...r.bySeq.keys());if(!Number.isFinite(n))return;let a=new URLSearchParams({limit:`100`,beforeSeqId:String(n)});t&&a.set(`invocationId`,t);let o=await g(`/api/v1/sessions/${encodeURIComponent(e)}/events?${a}`);if(!o.ok){b(`更早轨迹加载失败`);return}let s=await o.json();i(e=>mV(e,s.items||[],s.page.hasMore))},[t,e,r.bySeq]),C=(0,s.useMemo)(()=>{let e=new Map,t=new Map;for(let n of r.items){if(n.recordId.startsWith(`turn:`)&&n.turnId){let t=n.details.turn_index;e.set(n.turnId,typeof t==`number`?`Turn ${t}`:n.summary)}if(n.recordId.startsWith(`step:`)&&n.stepId){let e=n.details.step_index;t.set(n.stepId,typeof e==`number`?`Step ${e}`:n.summary)}}let n=r.items.filter(e=>e.category!==`system`),i=u?n:n.filter(e=>e.category!==`tool`),a=new Map;for(let t of i){let n=t.turnId||`run`,r=t.turnId?e.get(t.turnId)||`Turn`:`Run`,i=a.get(n)||{id:n,label:r,items:[]};i.items.push(t),a.set(n,i)}let o=Math.max(0,...r.items.map(e=>e.durationMs||0));return{groups:[...a.values()],semanticItems:n,systemItems:r.items.filter(e=>e.category===`system`),steps:t,turns:e.size,hasUsage:n.some(e=>Object.keys(vV(e.details.usage)).length>0),duration:o,calls:n.filter(e=>e.category===`tool`).length}},[u,r.items]),w=m&&r.items.find(e=>e.recordId===m)||null;(0,s.useEffect)(()=>{n?.(w)},[n,w]);let T=(0,s.useMemo)(()=>{let e=C.semanticItems.filter(e=>SV(e)&&(u||e.category!==`tool`)),t=Math.min(...e.map(e=>e.startedAt)),n=Math.max(...e.map(e=>e.endedAt??e.startedAt));return{items:e,start:t,span:Math.max(n-t,.001)}},[u,C.semanticItems]);return(0,K.jsxs)(`section`,{className:`trajectory-view`,"aria-label":`实时轨迹`,children:[(0,K.jsxs)(`header`,{className:`trajectory-toolbar`,children:[(0,K.jsxs)(`div`,{className:`segmented-control`,"aria-label":`轨迹显示控制`,children:[(0,K.jsx)(`button`,{type:`button`,className:a?`selected`:``,"aria-pressed":a,disabled:T.items.length<=1,onClick:()=>o(e=>!e),children:`Duration`}),(0,K.jsx)(`button`,{type:`button`,className:c?`selected`:``,"aria-pressed":c,onClick:()=>l(e=>!e),children:`Turns`}),(0,K.jsx)(`button`,{type:`button`,className:u?`selected`:``,"aria-pressed":u,disabled:C.calls===0,onClick:()=>d(e=>!e),children:`Calls`})]}),(0,K.jsxs)(`strong`,{className:`trajectory-summary-value`,children:[C.turns,` Turn · `,C.calls,` Call · `,hV(C.duration)]}),r.hasMore&&(0,K.jsxs)(`button`,{className:`button tertiary small`,type:`button`,onClick:()=>void S(),children:[(0,K.jsx)(ee,{size:14}),(0,K.jsx)(`span`,{children:`加载更早`})]})]}),y&&(0,K.jsx)(`div`,{className:`trajectory-status error`,children:y}),_&&(0,K.jsx)(`div`,{className:`trajectory-status`,children:`正在读取轨迹...`}),!_&&!C.semanticItems.length&&!C.systemItems.length&&(0,K.jsx)(`div`,{className:`trajectory-status`,children:`当前 Session 没有轨迹事件。`}),!!T.items.length&&(0,K.jsx)(`div`,{className:`trajectory-timeline`,"aria-label":`轨迹时间带`,"data-mode":a?`duration`:`equal`,children:[`input`,`model`,`tools`].map(e=>(0,K.jsxs)(`div`,{className:`trajectory-lane`,children:[(0,K.jsx)(`span`,{children:e===`input`?`Input`:e===`model`?`Model`:`Tools`}),(0,K.jsx)(`div`,{children:T.items.filter(t=>SV(t)===e).map((e,t,n)=>{let r=a?(e.startedAt-T.start)/T.span*100:t/Math.max(n.length,1)*100,i=a?Math.max(2,((e.endedAt??e.startedAt)-e.startedAt)/T.span*100):100/Math.max(n.length,1);return(0,K.jsx)(`i`,{"data-category":e.category,title:yV(e),style:{left:`${r}%`,width:`${Math.min(i,100-r)}%`}},e.recordId)})})]},e))}),(0,K.jsxs)(`div`,{ref:x,className:`trajectory-ledger`,role:`log`,"aria-label":`轨迹事件`,onScroll:e=>{let t=e.currentTarget,n=t.scrollHeight-t.scrollTop-t.clientHeight<48;i(e=>e.followTail===n?e:{...e,followTail:n})},children:[!!C.semanticItems.length&&(0,K.jsxs)(`div`,{className:`trajectory-column-header`,"data-usage":C.hasUsage,"aria-hidden":`true`,children:[(0,K.jsx)(`span`,{children:`Event`}),C.hasUsage&&(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(`span`,{children:`Input Tokens`}),(0,K.jsx)(`span`,{children:`Output Tokens`}),(0,K.jsx)(`span`,{children:`Think`})]}),(0,K.jsx)(`span`,{children:`Time`})]}),C.groups.map(e=>(0,K.jsxs)(s.Fragment,{children:[(0,K.jsxs)(`div`,{className:`trajectory-turn-header`,children:[(0,K.jsx)(`strong`,{children:e.label}),(0,K.jsxs)(`span`,{children:[e.items.length,` nodes`]})]}),c&&e.items.map((t,n)=>{let r=t.stepId?C.steps.get(t.stepId)||`Step`:``,i=n>0?e.items[n-1]:null,a=i?.stepId?C.steps.get(i.stepId)||`Step`:``;return(0,K.jsxs)(s.Fragment,{children:[r&&r!==a&&(0,K.jsxs)(`div`,{className:`trajectory-group-label`,children:[e.label,` · `,r]}),(0,K.jsxs)(`button`,{type:`button`,className:`trajectory-row`,"data-usage":C.hasUsage,"data-category":t.category,"data-status":t.status||`unknown`,"aria-pressed":t.recordId===m,"aria-label":_V(t),onClick:()=>h(t.recordId),children:[(0,K.jsx)(`span`,{className:`trajectory-row-icon`,children:gV(t.category)}),(0,K.jsxs)(`span`,{className:`trajectory-row-copy`,children:[(0,K.jsx)(`strong`,{children:yV(t)}),(0,K.jsxs)(`small`,{children:[xV(t.category),` · `,t.status||`未上报`]})]}),C.hasUsage&&(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(`span`,{className:`trajectory-row-metric`,children:bV(t,`input_tokens`)}),(0,K.jsx)(`span`,{className:`trajectory-row-metric`,children:bV(t,`output_tokens`)}),(0,K.jsx)(`span`,{className:`trajectory-row-metric`,children:bV(t,`reasoning_tokens`)})]}),(0,K.jsx)(`span`,{className:`trajectory-row-duration`,children:hV(t.durationMs)})]})]},t.recordId)})]},e.id)),!!C.systemItems.length&&(0,K.jsxs)(`div`,{className:`trajectory-system-events`,children:[(0,K.jsxs)(`button`,{type:`button`,onClick:()=>p(e=>!e),"aria-expanded":f,children:[(0,K.jsx)(k,{size:14}),`System Events (`,C.systemItems.length,`)`]}),f&&C.systemItems.map(e=>(0,K.jsxs)(`button`,{type:`button`,className:`trajectory-system-row`,"aria-pressed":e.recordId===m,onClick:()=>h(e.recordId),children:[e.type,` · #`,e.lastSeqId]},e.recordId))]})]}),!r.followTail&&(0,K.jsx)(`button`,{className:`button secondary small trajectory-latest`,type:`button`,onClick:()=>{let e=x.current;e&&(e.scrollTop=e.scrollHeight),i(e=>({...e,followTail:!0}))},children:`回到最新`})]})}function EV(e,t=18){let n=String(e||``);return n.length>t?`${n.slice(0,t)}…`:n}function DV(e,t=`-`){return e==null||e===``?t:String(e)}function OV(e){let t=String(e||``).toUpperCase();return t===`COMPLETED`||t===`SUCCEEDED`||t===`OK`?`成功`:t===`RUNNING`?`运行中`:t===`PAUSED`?`已暂停`:t===`FAILED`||t===`ERROR`||t===`INTERNAL`?`失败`:t===`CANCELLED`?`已取消`:t||`未知`}function kV(e){if(e==null||Number.isNaN(Number(e)))return`未上报`;let t=Number(e);return t<1?`${t.toFixed(3)} ms`:t<1e3?`${Math.round(t)} ms`:`${(t/1e3).toFixed(t<1e4?2:1)} s`}function AV(e){return e==null?`未上报`:new Intl.NumberFormat(`zh-CN`).format(Number(e))}function jV(e){if(e==null||typeof e==`boolean`)return null;let t=Number(e);return Number.isFinite(t)&&t>=0?t:null}function MV(e){let t=jV(e.totalTokens);if(t!==null&&e.usageCompleteness?.totalTokens!==!1)return t;let n=jV(e.inputTokens),r=jV(e.outputTokens);return n!==null&&r!==null&&e.usageCompleteness?.inputTokens!==!1&&e.usageCompleteness?.outputTokens!==!1?n+r:null}function NV(e){return[e.inputTokens,e.outputTokens,e.totalTokens].some(e=>jV(e)!==null)}function PV(e){let t=MV(e);return t===null?NV(e)?`部分上报`:`未上报`:AV(t)}function FV(e){let t=jV(e.inputTokens),n=jV(e.outputTokens);return`${t===null?`—`:`${e.usageCompleteness?.inputTokens===!1?`≥`:``}${AV(t)}`} 输入 · ${n===null?`—`:`${e.usageCompleteness?.outputTokens===!1?`≥`:``}${AV(n)}`} 输出`}function IV(e){let t=MV(e);if(t!==null)return AV(t);if(jV(e.totalTokens)!==null)return`部分上报`;let n=jV(e.inputTokens),r=jV(e.outputTokens);return n!==null&&r!==null||n!==null&&e.usageCompleteness?.inputTokens===!1||r!==null&&e.usageCompleteness?.outputTokens===!1?`部分上报`:n===null?r===null?`未上报`:`${AV(r)} 输出`:`${AV(n)} 输入`}function LV(e){try{let t=Number(BigInt(String(e||`0`))/1000000n);return t?new Date(t).toISOString():`-`}catch{return`-`}}function RV(e){if(!e)return`刚刚`;let t=new Date(e);return Number.isNaN(t.getTime())?`未知时间`:new Intl.DateTimeFormat(`zh-CN`,{month:`2-digit`,day:`2-digit`,hour:`2-digit`,minute:`2-digit`}).format(t)}function zV(e){try{return JSON.stringify(e,(e,t)=>typeof t==`bigint`?t.toString():t,2)}catch{return String(e)}}function BV(e){return e==null?`-`:typeof e==`object`?zV(e):String(e)}var VV={container:`otlp-json`,childFieldsContainer:`otlp-json-children`,basicChildStyle:`otlp-json-row`,collapseIcon:`otlp-json-toggle otlp-json-collapse`,expandIcon:`otlp-json-toggle otlp-json-expand`,collapsedContent:`otlp-json-collapsed`,label:`otlp-json-key`,clickableLabel:`otlp-json-key otlp-json-key-clickable`,nullValue:`otlp-json-null`,undefinedValue:`otlp-json-null`,numberValue:`otlp-json-number`,stringValue:`otlp-json-string`,booleanValue:`otlp-json-boolean`,otherValue:`otlp-json-other`,punctuation:`otlp-json-punctuation`,quotesForFieldNames:!0,stringifyStringValues:!0,ariaLables:{collapseJson:`收起 JSON 节点`,expandJson:`展开 JSON 节点`}},HV=[`agentkit.event.text`,`agentkit.event.delta`,`agentkit.event.content`,`agentkit.event.output`,`agentkit.event.args`,`agentkit.event.command`,`agentkit.event.input`,`agentkit.event.prompt`];function UV(e){if(!e)return``;for(let t of HV){let n=e[t];if(typeof n==`string`&&n.trim())return n;if(typeof n==`number`||typeof n==`boolean`)return String(n)}return``}function WV(e){let t=[],n=``,r=null,i=0,a=(e=!1)=>{r&&n.trim()&&t.push({kind:r,text:n,segments:i,final:e}),n=``,i=0},o={};for(let t of e||[]){let e=UV(t.attributes);if(t.name===`thinking.delta`||t.name===`message.delta`){let o=t.name===`thinking.delta`?`thinking`:`message`;r!==o&&(a(),r=o),n+=e,i+=1}else if(t.name===`thinking.completed`||t.name===`message.completed`){let n=t.name===`thinking.completed`?`thinking`:`message`;e&&(o[n]=e)}}a();for(let e of[`thinking`,`message`]){let n=o[e];if(!n)continue;let r=t.findIndex(t=>t.kind===e);r>=0?t[r]={kind:e,text:n,segments:t[r].segments,final:!0}:t.push({kind:e,text:n,segments:1,final:!0})}return t}async function GV(e){try{await navigator.clipboard.writeText(e);return}catch{}let t=document.createElement(`textarea`);t.value=e,document.body.appendChild(t),t.select();try{document.execCommand(`copy`)}catch{}t.remove()}function KV({text:e,className:t}){let[n,r]=(0,s.useState)(!1);return(0,K.jsx)(`button`,{type:`button`,className:`copy-btn ${t||``}`,title:`复制`,onClick:t=>{t.stopPropagation(),GV(e),r(!0),setTimeout(()=>r(!1),1500)},children:n?(0,K.jsx)(z,{size:12,style:{color:`var(--success)`}}):(0,K.jsx)(ue,{size:12})})}function qV({label:e,text:t,tone:n,icon:r,meta:i}){let[a,o]=(0,s.useState)(!1),c=t.length>600,l=a||!c?t:`${t.slice(0,600)}…`;return(0,K.jsxs)(`div`,{className:`io-block io-${n}`,children:[(0,K.jsxs)(`div`,{className:`io-head`,children:[(0,K.jsxs)(`span`,{className:`io-label`,children:[r,e]}),i&&(0,K.jsx)(`span`,{className:`io-meta`,children:i}),(0,K.jsx)(`span`,{style:{flex:1}}),(0,K.jsx)(KV,{text:t,className:`copy-visible`})]}),(0,K.jsx)(`div`,{className:`io-text`,children:l}),c&&(0,K.jsx)(`button`,{type:`button`,className:`io-expand`,onClick:()=>o(!a),children:a?`收起`:`展开全文(${t.length} 字符)`})]})}function JV({span:e}){let t=e.attributes||{},n=t[`agentkit.tool.input`],r=t[`agentkit.tool.output`],i=WV(e.events||[]);return n!=null&&n!==``||r!=null&&r!==``||i.length>0?(0,K.jsxs)(`div`,{className:`io-stack`,children:[n!=null&&n!==``&&(0,K.jsx)(qV,{label:`工具输入`,text:BV(n),tone:`tool`}),r!=null&&r!==``&&(0,K.jsx)(qV,{label:`工具输出`,text:BV(r),tone:`tool`}),i.map((e,t)=>(0,K.jsx)(qV,{label:e.kind===`message`?`模型输出`:`思考过程`,text:e.text,tone:e.kind,icon:e.kind===`message`?(0,K.jsx)(Me,{size:12}):(0,K.jsx)(L,{size:12}),meta:e.final?`完整`:`${e.segments} 段增量`},t))]}):(0,K.jsx)(`div`,{className:`trace-stage-empty compact`,children:(0,K.jsx)(`p`,{children:`该 Span 没有捕获内容(可在 设置 → 可观测 开启 Trace 内容记录)。`})})}function YV({values:e}){let t=Object.entries(e||{}).sort(([e],[t])=>e.localeCompare(t));return t.length?(0,K.jsx)(`dl`,{className:`trace-kv-list`,children:t.map(([e,t])=>(0,K.jsxs)(`div`,{className:`trace-kv-row`,children:[(0,K.jsx)(`dt`,{className:`trace-kv-key`,children:e}),(0,K.jsx)(`dd`,{className:`trace-kv-value`,children:BV(t)}),(0,K.jsx)(KV,{text:BV(t),className:`trace-kv-copy`})]},e))}):(0,K.jsx)(`div`,{className:`trace-stage-empty compact`,children:(0,K.jsx)(`p`,{children:`没有可展示的字段。`})})}var XV=[{id:`spans`,label:`Spans`},{id:`trajectory`,label:`轨迹`},{id:`attributes`,label:`Attributes`},{id:`events`,label:`Events`},{id:`resource`,label:`Resource`},{id:`raw`,label:`Raw OTLP`}],ZV=50;function QV({refreshTick:e}){let[t,n]=(0,s.useState)([]),[r,i]=(0,s.useState)([]),[a,o]=(0,s.useState)(``),[c,l]=(0,s.useState)(``),[u,d]=(0,s.useState)(``),[f,p]=(0,s.useState)(`24h`),[m,h]=(0,s.useState)(null),[_,v]=(0,s.useState)(null),[y,b]=(0,s.useState)(null),[x,S]=(0,s.useState)(`spans`),[C,w]=(0,s.useState)(null),[T,E]=(0,s.useState)(null),[D,j]=(0,s.useState)(!1),[M,N]=(0,s.useState)(!0),[P,F]=(0,s.useState)(!1),[I,L]=(0,s.useState)(!1),[R,z]=(0,s.useState)(0),[V,H]=(0,s.useState)([null]),[U,te]=(0,s.useState)(null),[W,ne]=(0,s.useState)(0),[re,G]=(0,s.useState)(!0),[ie,ae]=(0,s.useState)(``),oe=(0,s.useRef)(0),se=(0,s.useRef)(0);(0,s.useEffect)(()=>{g(`/api/v1/agents?limit=100`).then(e=>e.json()).then(e=>{i((e.items||[]).map(e=>({id:e.metadata.id,name:e.metadata.name,appearance:e.metadata.appearance})))}).catch(()=>{})},[e]);let ce=(0,s.useCallback)(async e=>{let t=++oe.current;try{let n=await g(`/api/v1/traces/${encodeURIComponent(e)}`).then(e=>e.json());if(oe.current!==t)return;v(n),b(n.rootSpanId||n.spans?.[0]?.spanId||null),S(`spans`),w(null),E(null),N(!0),F(!1),L(!1)}catch{}},[]),le=(0,s.useCallback)(async e=>{let t=++se.current,r=new URLSearchParams({limit:String(ZV),sort:`startedAt:desc`});c&&r.set(`agentId`,c),u&&r.set(`status`,u),a.trim()&&r.set(`query`,a.trim()),e&&r.set(`cursor`,e),G(!0),ae(``);try{let e=await g(`/api/v1/traces?${r}`);if(!e.ok)throw Error(`Trace 列表加载失败(${e.status})`);let i=await e.json();if(se.current!==t)return;let a=i.items||[];n(a),te(i.nextCursor||null),ne(Number(i.total)||0)}catch(e){if(se.current!==t)return;n([]),te(null),ne(0),ae(e instanceof Error?e.message:`Trace 列表加载失败`)}finally{se.current===t&&G(!1)}},[c,a,u]);(0,s.useEffect)(()=>{H([null]),z(0),le(null)},[le,e]),(0,s.useEffect)(()=>{let e=new URLSearchParams({range:f});c&&e.set(`agentId`,c),u&&e.set(`status`,u),g(`/api/v1/traces/overview?${e}`).then(e=>e.ok?e.json():Promise.reject(Error())).then(h).catch(()=>h(null))},[c,f,e,u]),(0,s.useEffect)(()=>{if(x!==`raw`||!_||T)return;let e=_.traceId;j(!0),g(`/api/v1/traces/${encodeURIComponent(e)}/otlp`).then(e=>e.json()).then(e=>{E(e),j(!1)}).catch(()=>j(!1))},[x,_,T]);let de=_?.spans?.find(e=>e.spanId===y)||null,fe=(0,s.useMemo)(()=>{let e=_?.spans||[],t=new Map;e.forEach(e=>{let n=e.parentSpanId||``;t.has(n)||t.set(n,[]),t.get(n).push(e)}),t.forEach(e=>e.sort((e,t)=>{try{return Number(BigInt(e.startTimeUnixNano||`0`)-BigInt(t.startTimeUnixNano||`0`))}catch{return 0}}));let n=[],r=new Set,i=(e,a)=>{!e||r.has(e.spanId)||(r.add(e.spanId),n.push({span:e,depth:a}),(t.get(e.spanId)||[]).forEach(e=>i(e,a+1)))};return i(e.find(e=>e.spanId===_?.rootSpanId)||e.find(e=>!e.parentSpanId),0),e.forEach(e=>i(e,+!!e.parentSpanId)),n},[_]),pe=fe.find(e=>e.span.spanId===_?.rootSpanId)?.span||fe[0]?.span,me=(0,s.useMemo)(()=>{if(!pe)return{start:0n,duration:1};try{let e=BigInt(pe.startTimeUnixNano||`0`),t=BigInt(pe.endTimeUnixNano||pe.startTimeUnixNano||`0`);return{start:e,duration:Number(t>e?t-e:1n)}}catch{return{start:0n,duration:1}}},[pe]),he=_?.metrics||{durationMs:_?.durationMs,inputTokens:_?.inputTokens,outputTokens:_?.outputTokens,totalTokens:_?.totalTokens,usageReported:_?.usageReported},ge=r.find(e=>e.id===_?.agentId),_e=(0,s.useMemo)(()=>[{id:`status`,header:`状态`,width:130,cell:e=>(0,K.jsxs)(`span`,{className:`trace-table-status ${e.status}`,title:e.status,children:[(0,K.jsx)(`span`,{className:`trace-list-status ${e.status}`}),OV(e.status)]})},{id:`identity`,header:`Agent / Run`,minWidth:270,cell:e=>{let t=r.find(t=>t.id===e.agentId),n=t?.name||e.agentId||`unknown-agent`;return(0,K.jsxs)(`button`,{type:`button`,className:`trace-table-open trace-table-agent`,onClick:()=>ce(e.traceId),children:[(0,K.jsx)(_t,{name:n,appearance:t?.appearance,size:`xs`}),(0,K.jsxs)(`span`,{children:[(0,K.jsx)(`strong`,{children:n}),(0,K.jsx)(`small`,{children:EV(e.runId||e.traceId,32)})]})]})}},{id:`startedAt`,header:`开始时间`,minWidth:140,cell:e=>RV(e.startedAt)},{id:`duration`,header:`耗时`,width:110,cell:e=>kV(e.durationMs)},{id:`model`,header:`模型`,minWidth:140,cell:e=>e.model||`-`},{id:`tokens`,header:`Token`,width:110,cell:e=>IV(e)},{id:`spans`,header:`Span`,width:80,cell:e=>e.spanCount||0},{id:`actions`,header:(0,K.jsx)(`span`,{className:`sr-only`,children:`操作`}),width:110,className:`actions-column`,headerClassName:`actions-column`,cell:e=>(0,K.jsx)(`button`,{type:`button`,className:`button tertiary small`,onClick:()=>ce(e.traceId),children:`查看详情`})}],[r,ce]),ve=(0,s.useCallback)(()=>{if(_?.traceId){ce(_.traceId);return}le(V[R]||null)},[_?.traceId,V,R,le,ce]),ye=(0,s.useCallback)(()=>{if(R<=0)return;let e=R-1;z(e),le(V[e]||null)},[V,R,le]),be=(0,s.useCallback)(()=>{if(!U)return;let e=R+1;H(t=>{let n=t.slice(0,e);return n[e]=U,n}),z(e),le(U)},[R,le,U]);async function xe(){!_?.traceId||!_.rootSpanId||(await GV(`00-${_.traceId}-${_.rootSpanId}-01`),Y(`traceparent 已复制`,EV(_.traceId,24)))}async function Se(){if(!_)return;let e=T;e||(e=await g(`/api/v1/traces/${encodeURIComponent(_.traceId)}/otlp`).then(e=>e.json()).catch(()=>null),e&&E(e)),e&&(await GV(JSON.stringify(e,null,2)),Y(`Raw OTLP 已复制`,EV(_.traceId,24)))}async function Ce(){if(!_?.sessionId)return;let e=window.showSaveFilePicker;if(!e){Y(`浏览器不支持导出`,`请使用支持文件保存的 Chromium 浏览器。`,`error`);return}let t;try{t=await e({suggestedName:`${_.sessionId}-${_.runId||`session`}-session-log.jsonl`,types:[{description:`Session Log`,accept:{"application/x-ndjson":[`.jsonl`]}}]})}catch(e){if(e instanceof DOMException&&e.name===`AbortError`)return;Y(`Session Log 导出失败`,e instanceof Error?e.message:`无法选择保存位置`,`error`);return}try{let e=await g(`/api/v1/sessions/${encodeURIComponent(_.sessionId)}:export`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({filename:t.name,invocationId:_.runId||void 0,download:!0})});if(!e.ok)throw Error(`导出失败(${e.status})`);let n=await t.createWritable();await n.write(await e.blob()),await n.close();let r=e.headers.get(`X-Session-Event-Count`)||`0`;Y(`Session Log 已导出`,`${t.name} · ${r} 条事件`)}catch(e){Y(`Session Log 导出失败`,e instanceof Error?e.message:`未知错误`,`error`)}}return(0,K.jsxs)(`div`,{className:`page-container observability-page`,id:`traceExplorer`,"data-layout":`workbench`,children:[(0,K.jsxs)(hd,{children:[(0,K.jsxs)(`div`,{className:`search-field header-search-field`,children:[(0,K.jsx)(Ye,{size:14}),(0,K.jsx)(`input`,{type:`search`,"aria-label":`搜索 Trace、Run 或 Session`,placeholder:`搜索 Trace、Run 或 Session`,value:a,onChange:e=>o(e.target.value)})]}),(0,K.jsxs)(`div`,{className:`segmented-control compact`,"aria-label":`可观测时间范围`,children:[(0,K.jsx)(`button`,{type:`button`,className:f===`24h`?`selected`:``,onClick:()=>p(`24h`),children:`24 小时`}),(0,K.jsx)(`button`,{type:`button`,className:f===`7d`?`selected`:``,onClick:()=>p(`7d`),children:`7 天`})]})]}),_&&(0,K.jsxs)(gd,{children:[(0,K.jsxs)(`button`,{className:`button tertiary`,type:`button`,onClick:()=>void Ce(),children:[(0,K.jsx)(k,{size:15}),(0,K.jsx)(`span`,{children:`导出 Session Log`})]}),(0,K.jsxs)(`button`,{className:`button tertiary`,type:`button`,onClick:()=>{oe.current+=1,v(null),b(null),F(!1),L(!1)},children:[(0,K.jsx)(A,{size:15}),(0,K.jsx)(`span`,{children:`返回 Trace 列表`})]})]}),(0,K.jsxs)(`div`,{className:`data-page-body observability-body`,children:[(0,K.jsx)($V,{overview:m,range:f}),!_&&(0,K.jsxs)(`div`,{className:`trace-toolbar`,"aria-label":`Trace 筛选`,children:[(0,K.jsx)(kh,{className:`compact-select`,ariaLabel:`按 Agent 筛选`,value:c||`__all__`,options:[{value:`__all__`,label:`全部 Agent`},...r.map(e=>({value:e.id,label:e.name}))],onValueChange:e=>l(e===`__all__`?``:e)}),(0,K.jsx)(kh,{className:`compact-select`,ariaLabel:`按状态筛选`,value:u||`__all__`,options:[{value:`__all__`,label:`全部状态`},{value:`COMPLETED`,label:`成功`},{value:`FAILED`,label:`失败`},{value:`CANCELLED`,label:`已取消`}],onValueChange:e=>d(e===`__all__`?``:e)})]}),_&&(0,K.jsxs)(`section`,{className:`stat-strip`,"aria-label":`Trace 指标`,children:[(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`span`,{children:`Trace 状态`}),(0,K.jsx)(`strong`,{children:_?OV(_.status):`未选择`}),(0,K.jsx)(`small`,{children:_?`${_.spans?.length||0} Span · ${_.target?.name||`本地工作区`}`:`选择一条 Trace 查看`})]}),(0,K.jsxs)(`div`,{className:`emphasis`,"data-state":_?.status===`FAILED`?`failed`:_?.status===`COMPLETED`?`ready`:`running`,children:[(0,K.jsx)(`span`,{children:`总耗时`}),(0,K.jsx)(`strong`,{children:_?kV(he.durationMs):`未上报`}),(0,K.jsx)(`small`,{children:_?he.durationMs===null||he.durationMs===void 0?`Runtime 未上报`:he.durationSource===`runtime`?`Runtime 精确上报`:`Studio 时钟回退`:`等待 Runtime 上报`})]}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`span`,{children:`Token`}),(0,K.jsx)(`strong`,{children:_?PV(he):`未上报`}),(0,K.jsx)(`small`,{children:_&&NV(he)?FV(he):`输入 / 输出`})]}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`span`,{children:`模型`}),(0,K.jsx)(`strong`,{children:_?.model||`-`}),(0,K.jsx)(`small`,{children:_?`${_.runtimeType||`unknown`} · ${he.usageSource||`Usage 未上报`}`:`Runtime`})]})]}),!_&&(0,K.jsxs)(`section`,{className:`trace-list-page`,"aria-label":`Trace 列表`,children:[(0,K.jsx)(`header`,{className:`trace-list-page-header`,children:(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`strong`,{children:`Trace`}),(0,K.jsxs)(`span`,{children:[W,` 条`]})]})}),(0,K.jsx)(dm,{columns:_e,data:t,getRowId:e=>e.traceId,caption:`Trace 列表`,minWidth:1060,loading:re,error:ie,onRetry:ve,onRowActivate:e=>ce(e.traceId),rowAriaLabel:e=>`${e.agentId||`Agent`} ${e.runId||e.traceId}`,empty:{icon:(0,K.jsx)(O,{size:20}),title:`还没有 Trace`,description:`运行一次 Agent 后在这里查看调用链,或调整筛选条件。`},pagination:{pageIndex:R,pageSize:ZV,total:W,hasNextPage:!!U,onPreviousPage:ye,onNextPage:be}})]}),_&&(0,K.jsxs)(`div`,{className:`trace-workbench detail-route${P?` detail-expanded`:``}${I?` detail-collapsed`:``}`,children:[(0,K.jsxs)(`aside`,{className:`trace-run-panel`,"aria-label":`本页 Trace`,children:[(0,K.jsx)(`div`,{className:`trace-panel-header`,children:(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`strong`,{children:`Traces`}),(0,K.jsxs)(`span`,{children:[W,` 条结果`]})]})}),(0,K.jsx)(`div`,{className:`trace-run-list`,children:t.map(e=>{let t=r.find(t=>t.id===e.agentId);return(0,K.jsxs)(`button`,{type:`button`,className:e.traceId===_.traceId?`active`:``,onClick:()=>ce(e.traceId),children:[(0,K.jsxs)(`span`,{className:`trace-run-identity`,children:[(0,K.jsx)(_t,{name:t?.name||e.agentId||`Agent`,appearance:t?.appearance,size:`xs`}),(0,K.jsxs)(`span`,{children:[(0,K.jsx)(`strong`,{children:t?.name||e.agentId||`Agent`}),(0,K.jsx)(`small`,{children:EV(e.runId||e.traceId,22)})]})]}),(0,K.jsxs)(`span`,{className:`trace-run-meta`,children:[(0,K.jsx)(`span`,{className:`mono`,children:kV(e.durationMs)}),(0,K.jsx)(`span`,{className:`badge`,"data-state":e.status===`FAILED`?`failed`:e.status===`COMPLETED`?`ready`:`running`,title:e.status,children:OV(e.status)})]})]},e.traceId)})})]}),(0,K.jsxs)(`section`,{className:`trace-span-panel`,"aria-label":`Span 时间瀑布`,children:[(0,K.jsxs)(`div`,{className:`trace-panel-header trace-span-header`,children:[(0,K.jsx)(_t,{name:ge?.name||_.agentId||`Agent`,appearance:ge?.appearance,size:`sm`}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`strong`,{children:_?`${ge?.name||_.agentId||`Agent`} · ${_.runId||`Run`}`:`选择一条 Trace`}),(0,K.jsx)(`span`,{className:`mono`,children:_?.traceId||`-`})]}),(0,K.jsxs)(`button`,{className:`button tertiary small`,type:`button`,disabled:!_,onClick:xe,children:[(0,K.jsx)(ue,{size:14}),(0,K.jsx)(`span`,{children:`复制 traceparent`})]}),I&&(0,K.jsxs)(`button`,{className:`button secondary small trace-detail-reopen`,type:`button`,onClick:()=>L(!1),children:[(0,K.jsx)(ee,{size:14}),(0,K.jsx)(`span`,{children:`展开右侧详情`})]})]}),(0,K.jsxs)(`div`,{className:`trace-axis`,"aria-hidden":`true`,children:[(0,K.jsx)(`span`,{children:`Span`}),(0,K.jsx)(`span`,{children:`0%`}),(0,K.jsx)(`span`,{children:`50%`}),(0,K.jsx)(`span`,{children:`100%`}),(0,K.jsx)(`span`,{children:`耗时`})]}),(0,K.jsx)(`div`,{className:`trace-span-tree`,children:fe.length===0?(0,K.jsxs)(`div`,{className:`trace-stage-empty`,children:[(0,K.jsx)(Le,{size:20}),(0,K.jsx)(`p`,{children:_?`该 OTLP Trace 没有 Span。`:`选择左侧 Trace,查看 Agent、模型和 Tool 的父子关系与耗时。`})]}):fe.map(({span:e,depth:t})=>{let n=0,r=0;try{let t=BigInt(e.startTimeUnixNano||`0`),i=BigInt(e.endTimeUnixNano||e.startTimeUnixNano||`0`);n=Math.max(0,Math.min(100,Number(t-me.start)/me.duration*100)),r=Math.max(0,Math.min(100-n,Number(i-t)/me.duration*100))}catch{}return(0,K.jsxs)(`button`,{type:`button`,className:`trace-span-row${e.spanId===y?` active`:``}`,"data-kind":e.kind,"data-status":e.status,onClick:()=>{b(e.spanId),S(`spans`)},children:[(0,K.jsxs)(`span`,{className:`trace-span-name`,children:[(0,K.jsx)(`span`,{className:`trace-span-guides`,children:Array.from({length:t},(e,t)=>(0,K.jsx)(`span`,{className:`trace-span-guide`},t))}),(0,K.jsx)(`span`,{className:`trace-span-status ${e.status}`}),(0,K.jsxs)(`span`,{className:`trace-span-name-copy`,children:[(0,K.jsx)(`strong`,{children:e.name}),(0,K.jsxs)(`span`,{children:[e.kind,` · `,EV(e.spanId,16)]})]})]}),(0,K.jsx)(`span`,{className:`trace-waterfall-track`,children:(0,K.jsx)(`span`,{className:`trace-waterfall-bar`,style:{"--span-left":`${n.toFixed(3)}%`,"--span-width":`${r.toFixed(3)}%`}})}),(0,K.jsx)(`span`,{className:`trace-span-duration`,children:kV(e.durationMs)})]},e.spanId)})})]}),(0,K.jsxs)(`aside`,{className:`trace-detail-panel${I?` is-collapsed`:``}`,"aria-label":`Span 详情`,children:[(0,K.jsxs)(`div`,{className:`trace-panel-header`,children:[(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`strong`,{children:de?DV(de.name):`Span 详情`}),(0,K.jsx)(`span`,{children:de?`${DV(de.kind)} · ${OV(de.status)}`:`尚未选择 Span`})]}),(0,K.jsxs)(`div`,{className:`trace-detail-actions`,children:[!I&&(0,K.jsxs)(K.Fragment,{children:[(0,K.jsxs)(`button`,{className:`button tertiary small`,type:`button`,disabled:!_,onClick:Se,children:[(0,K.jsx)(ue,{size:14}),(0,K.jsx)(`span`,{children:`复制 Raw OTLP`})]}),(0,K.jsxs)(`button`,{className:`button tertiary small trace-detail-expand`,type:`button`,"aria-pressed":P,title:P?`退出放大详情`:`放大详情`,onClick:()=>F(!P),children:[P?(0,K.jsx)(Pe,{size:14}):(0,K.jsx)(Ae,{size:14}),(0,K.jsx)(`span`,{children:P?`退出放大`:`放大详情`})]})]}),(0,K.jsxs)(`button`,{className:`button tertiary small trace-detail-collapse`,type:`button`,"aria-expanded":!I,title:I?`展开 Trace 详情`:`收起 Trace 详情`,onClick:()=>{L(e=>!e),I||F(!1)},children:[I?(0,K.jsx)(ee,{size:14}):(0,K.jsx)(B,{size:14}),(0,K.jsx)(`span`,{children:I?`展开详情`:`收起详情`})]})]})]}),!I&&(0,K.jsx)(`div`,{className:`trace-tabs`,role:`tablist`,"aria-label":`Trace 详情分类`,children:XV.map(e=>(0,K.jsx)(`button`,{type:`button`,role:`tab`,"aria-selected":x===e.id,className:x===e.id?`active`:``,onClick:()=>S(e.id),children:e.label},e.id))}),!I&&(0,K.jsxs)(`div`,{className:`trace-detail-body${x===`raw`?` raw-active`:``}`,children:[x===`trajectory`&&(0,K.jsxs)(`div`,{className:`trace-trajectory-layout`,children:[(0,K.jsx)(TV,{sessionId:_.sessionId,invocationId:_.runId||void 0,onSelectionChange:w}),(0,K.jsx)(`aside`,{className:`trajectory-selection`,"aria-label":`轨迹详情`,children:C?(0,K.jsx)(wV,{record:C}):(0,K.jsx)(`div`,{className:`trace-stage-empty compact`,children:(0,K.jsx)(`p`,{children:`选择一条轨迹事件查看详情。`})})})]}),x!==`raw`&&x!==`trajectory`&&(0,K.jsxs)(`div`,{children:[!de&&(0,K.jsx)(`div`,{className:`trace-stage-empty compact`,children:(0,K.jsx)(`p`,{children:`选择一个 Span 查看标准属性。`})}),de&&x===`spans`&&(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(JV,{span:de}),(0,K.jsxs)(`dl`,{className:`trace-detail-grid`,style:{marginTop:14},children:[(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`dt`,{children:`Trace ID`}),(0,K.jsx)(`dd`,{children:_?.traceId})]}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`dt`,{children:`Span ID`}),(0,K.jsx)(`dd`,{children:de.spanId})]}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`dt`,{children:`Parent`}),(0,K.jsx)(`dd`,{children:de.parentSpanId||`Root`})]}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`dt`,{children:`Kind`}),(0,K.jsx)(`dd`,{children:de.kind})]}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`dt`,{children:`状态`}),(0,K.jsx)(`dd`,{title:de.status,children:OV(de.status)})]}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`dt`,{children:`开始`}),(0,K.jsx)(`dd`,{children:LV(de.startTimeUnixNano)})]}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`dt`,{children:`耗时`}),(0,K.jsx)(`dd`,{children:kV(de.durationMs)})]})]})]}),de&&x===`attributes`&&(0,K.jsx)(YV,{values:de.attributes||{}}),de&&x===`events`&&(0,K.jsx)(nH,{events:de.events||[]}),de&&x===`resource`&&(0,K.jsx)(YV,{values:{..._?.resource||{},"otel.scope.name":_?.scope?.name,"otel.scope.version":_?.scope?.version}})]}),(0,K.jsxs)(`div`,{className:`trace-raw`,hidden:x!==`raw`,children:[x===`raw`&&!D&&T&&(0,K.jsxs)(`div`,{className:`trace-raw-toolbar`,children:[(0,K.jsx)(`span`,{children:`JSON Tree`}),(0,K.jsxs)(`div`,{role:`group`,"aria-label":`JSON 展开控制`,children:[(0,K.jsx)(`button`,{type:`button`,className:M?``:`active`,onClick:()=>N(!1),children:`全部收起`}),(0,K.jsx)(`button`,{type:`button`,className:M?`active`:``,onClick:()=>N(!0),children:`全部展开`})]})]}),x===`raw`&&D&&(0,K.jsx)(`div`,{className:`trace-raw-loading`,children:`正在读取 OTLP JSON…`}),x===`raw`&&!D&&T&&(0,K.jsx)(`div`,{className:`trace-raw-tree`,children:(0,K.jsx)(sV,{"aria-label":`Raw OTLP JSON`,data:T,style:VV,shouldExpandNode:M?aV:oV,clickToExpandNode:!0})}),x===`raw`&&!D&&!T&&(0,K.jsx)(`div`,{className:`trace-raw-loading`,children:`没有可显示的 OTLP JSON。`})]})]})]})]})]})]})}function $V({overview:e,range:t}){let n=e?.total||0,r=e?.completed||0,i=e?.successRate==null?`—`:`${Math.round(e.successRate*100)}%`,a=e?.averageDurationMs==null?`—`:kV(e.averageDurationMs),o=e?.totalTokens||0,s=e?.inputTokens||0,c=e?.outputTokens||0,l=e?.buckets||[],u=l.some(e=>e.runs>0);return(0,K.jsxs)(`section`,{className:`observability-overview${u?` has-trend`:``}`,"aria-label":`运行概览`,children:[(0,K.jsxs)(`div`,{className:`overview-metric-grid`,children:[(0,K.jsx)(eH,{icon:(0,K.jsx)(O,{size:15}),label:t===`7d`?`近 7 天运行`:`近 24 小时运行`,value:String(n)}),(0,K.jsx)(eH,{icon:(0,K.jsx)(te,{size:15}),label:`成功率`,value:i,note:n?`${r} / ${n}`:void 0,tone:`success`}),(0,K.jsx)(eH,{icon:(0,K.jsx)(ae,{size:15}),label:`平均耗时`,value:a,note:r?`${r} 个完成运行`:void 0}),(0,K.jsx)(eH,{icon:(0,K.jsx)(le,{size:15}),label:`Token`,value:n?o?AV(o):`未上报`:`—`,note:o?`${AV(s)} 输入 · ${AV(c)} 输出`:void 0})]}),u&&(0,K.jsxs)(`div`,{className:`overview-chart-card`,children:[(0,K.jsx)(`div`,{className:`overview-chart-header`,children:(0,K.jsx)(`strong`,{children:`运行趋势`})}),(0,K.jsx)(tH,{buckets:l,range:t}),(0,K.jsxs)(`div`,{className:`overview-chart-legend`,children:[(0,K.jsx)(`span`,{className:`legend-runs`}),`运行数`,(0,K.jsx)(`span`,{className:`legend-success`}),`成功数`]})]})]})}function eH({icon:e,label:t,value:n,note:r,tone:i=`neutral`}){return(0,K.jsxs)(`article`,{className:`overview-metric-card ${i}`,children:[(0,K.jsxs)(`div`,{className:`overview-metric-label`,children:[(0,K.jsx)(`span`,{children:e}),(0,K.jsx)(`small`,{children:t})]}),(0,K.jsx)(`strong`,{children:n}),r&&(0,K.jsx)(`p`,{children:r})]})}function tH({buckets:e,range:t}){let n=e.map(e=>{let n=new Date(e.startedAt),r=t===`7d`?`${n.getMonth()+1}/${n.getDate()}`:`${String(n.getHours()).padStart(2,`0`)}:00`;return{...e,label:r,success:e.completed}});if(!n.length||!n.some(e=>e.runs>0))return(0,K.jsx)(`div`,{className:`trace-stage-empty compact`,children:(0,K.jsx)(`p`,{children:`暂无运行数据`})});let r=Math.max(1,...n.map(e=>e.runs)),i={l:30,r:10,t:10,b:22},a=800-i.l-i.r,o=118-i.t-i.b,s=a/Math.max(1,n.length-1),c=e=>i.t+o-e/r*o,l=n.map((e,t)=>`${i.l+t*s},${c(e.runs)}`).join(` `),u=n.map((e,t)=>`${i.l+t*s},${c(e.success)}`).join(` `),d=`M ${i.l},${i.t+o} L ${l.split(` `).join(` L `)} L ${i.l+(n.length-1)*s},${i.t+o} Z`,f=Math.ceil(n.length/6);return(0,K.jsxs)(`svg`,{className:`overview-chart`,viewBox:`0 0 800 118`,preserveAspectRatio:`none`,"aria-label":`运行趋势曲线`,children:[[0,.25,.5,.75,1].map(e=>{let t=i.t+o-e*o;return(0,K.jsx)(`line`,{x1:i.l,y1:t,x2:800-i.r,y2:t,stroke:`var(--border)`,strokeWidth:`1`,strokeDasharray:e===0?`0`:`3 3`},e)}),(0,K.jsx)(`path`,{d,fill:`var(--accent-soft)`,opacity:`0.6`}),(0,K.jsx)(`polyline`,{points:l,fill:`none`,stroke:`var(--accent)`,strokeWidth:`2`,strokeLinejoin:`round`,strokeLinecap:`round`}),(0,K.jsx)(`polyline`,{points:u,fill:`none`,stroke:`var(--success)`,strokeWidth:`2`,strokeLinejoin:`round`,strokeLinecap:`round`,strokeDasharray:`4 3`}),n.map((e,t)=>(0,K.jsx)(`circle`,{cx:i.l+t*s,cy:c(e.runs),r:`2.5`,fill:`var(--accent)`,children:(0,K.jsx)(`title`,{children:`${e.label}:${e.runs} 次运行,${e.success} 次成功`})},e.startedAt)),n.map((e,t)=>(t%f===0||t===n.length-1)&&(0,K.jsx)(`text`,{x:i.l+t*s,y:110,textAnchor:`middle`,fill:`var(--text-tertiary)`,fontSize:`11`,children:e.label},`label-${e.startedAt}`))]})}function nH({events:e}){let t=(0,s.useMemo)(()=>{let t=[],n=``,r=null,i=0,a=()=>{r&&n.trim()&&t.push({type:`card`,card:{kind:r,text:n,segments:i,final:!1}}),n=``,i=0,r=null};for(let o of e)if(o.name===`thinking.delta`||o.name===`message.delta`){let e=o.name===`thinking.delta`?`thinking`:`message`;r!==e&&a(),r=e,n+=UV(o.attributes),i+=1}else o.name===`thinking.completed`||o.name===`message.completed`||(a(),t.push({type:`event`,event:o}));return a(),t},[e]);return e.length?(0,K.jsx)(`div`,{className:`io-stack`,children:t.map((e,t)=>e.type===`card`?(0,K.jsx)(qV,{label:e.card.kind===`message`?`模型输出流`:`思考流`,text:e.card.text,tone:e.card.kind,icon:e.card.kind===`message`?(0,K.jsx)(Me,{size:12}):(0,K.jsx)(L,{size:12}),meta:`${e.card.segments} 段增量`},t):(0,K.jsxs)(`article`,{className:`trace-event-card`,children:[(0,K.jsx)(`strong`,{children:e.event.name}),(0,K.jsx)(`span`,{children:LV(e.event.timeUnixNano)}),(0,K.jsx)(YV,{values:e.event.attributes||{}})]},t))}):(0,K.jsx)(`div`,{className:`trace-stage-empty compact`,children:(0,K.jsx)(`p`,{children:`该 Span 没有 Events。`})})}var rH=[{kind:`model`,label:`模型`,icon:fe},{kind:`tool`,label:`Tool`,icon:pt},{kind:`mcp`,label:`MCP Server`,icon:Le},{kind:`skill`,label:`Skill`,icon:nt}];function iH(e){return e===`ready`?`可用`:e===`missing-secret`?`缺少凭证`:e===`unhealthy`||e===`failed`?`异常`:e===`unresolved`?`未解析`:e||`未知`}function aH(e){return e.requiredSecretRefs?.[0]||e.contract?.credentialRef||``}function oH({refreshTick:e,onOpenResources:t}){let[n,r]=(0,s.useState)([]),[i,a]=(0,s.useState)({}),[o,c]=(0,s.useState)(0),[l,u]=(0,s.useState)(``),[d,f]=(0,s.useState)(null),[p,m]=(0,s.useState)(`24h`),[h,_]=(0,s.useState)(null),[v,y]=(0,s.useState)([]),[b,x]=(0,s.useState)(``),S=(0,s.useCallback)(async()=>{let[e,t,n,i,o,s]=await Promise.all([g(`/api/v1/catalog/resources?limit=200`).then(e=>e.json()).catch(()=>({items:[]})),g(`/api/v1/catalog/models`).then(e=>e.json()).catch(()=>null),g(`/api/v1/runs?limit=200`).then(e=>e.json()).catch(()=>({items:[]})),g(`/api/v1/system/bootstrap`).then(e=>e.json()).catch(()=>null),g(`/api/v1/traces/overview?range=${p}`).then(e=>e.ok?e.json():null).catch(()=>null),g(`/api/v1/deployments`).then(e=>e.ok?e.json():{items:[]}).catch(()=>({items:[]}))]),l=e.items||[];t?.items?.length&&(l=[...l.filter(e=>e.kind!==`model`||e.source===`local`||e.source===`market`),...t.items]),r(l),c((n.items||[]).length),u(i?.workspace?.path||``),f(!!i?.workspace),_(o),y(Array.isArray(s?.items)?s.items:[]);let d=[...new Set(l.filter(e=>e.kind===`model`).map(aH).filter(Boolean))],m=await Promise.all(d.map(async e=>{try{return[e,await(await g(`/api/v1/credentials/${encodeURIComponent(e.replace(/^env:\/\//,``))}`)).json()]}catch{return[e,{configured:!1}]}}));a(Object.fromEntries(m))},[p]);(0,s.useEffect)(()=>{S()},[S,e]);let C=e=>e.kind===`model`?i[aH(e)]?.configured?`ready`:`missing-secret`:e.status,w=n.filter(e=>e.kind===`model`).filter(e=>C(e)===`ready`),T=n.filter(e=>[`tool`,`mcp`,`skill`].includes(e.kind)).filter(e=>C(e)===`ready`),E=d==null?`pending`:d?`ready`:`failed`,D=d==null?`检查中`:d?`运行正常`:`连接失败`,O=h?.buckets||[],k=O.length>1&&O.some(e=>e.runs>0),A=Math.max(1,...O.map(e=>e.runs)),M=k?O.find(e=>e.runs===A):void 0,N=b.trim().toLocaleLowerCase(),P=(0,s.useMemo)(()=>n.filter(e=>C(e)!==`ready`).length,[i,n]),F=v.filter(e=>e.status===`READY`).length,I=v.filter(e=>[`ADMITTING`,`DEPLOYING`].includes(String(e.status))).length,L=F?`ready`:I?`pending`:`idle`,R=F?`${F} 已就绪`:I?`${I} 部署中`:`尚未部署`;return(0,K.jsxs)(`div`,{className:`page-container runtime-resource-page`,"data-layout":`document`,children:[(0,K.jsx)(hd,{children:(0,K.jsxs)(`div`,{className:`segmented-control compact`,role:`tablist`,"aria-label":`运行趋势时间范围`,children:[(0,K.jsx)(`button`,{type:`button`,role:`tab`,"aria-selected":p===`24h`,onClick:()=>m(`24h`),children:`24 小时`}),(0,K.jsx)(`button`,{type:`button`,role:`tab`,"aria-selected":p===`7d`,onClick:()=>m(`7d`),children:`7 天`})]})}),(0,K.jsxs)(`div`,{className:`data-page-body`,children:[(0,K.jsxs)(`section`,{className:`runtime-status-summary`,"aria-label":`运行状态`,children:[(0,K.jsxs)(`div`,{title:l||`本地工作区`,"data-state":E,children:[(0,K.jsx)(`span`,{className:`stat-label`,children:`本地 Runtime`}),(0,K.jsxs)(`strong`,{className:`stat-value`,children:[(0,K.jsx)(`span`,{className:`summary-status-dot`}),D]}),E===`failed`&&(0,K.jsxs)(`button`,{className:`text-button`,type:`button`,onClick:()=>void S(),children:[(0,K.jsx)(Je,{size:13}),`重新检查`]})]}),(0,K.jsxs)(`div`,{"data-state":L,children:[(0,K.jsx)(`span`,{className:`stat-label`,children:`云端部署`}),(0,K.jsx)(`strong`,{className:`stat-value`,children:R})]})]}),(0,K.jsxs)(`div`,{className:`stat-strip compact-summary runtime-metric-summary`,children:[(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`span`,{className:`stat-label`,children:`可用模型`}),(0,K.jsx)(`strong`,{className:`stat-value`,children:w.length})]}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`span`,{className:`stat-label`,children:`能力资源`}),(0,K.jsx)(`strong`,{className:`stat-value`,children:T.length})]}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`span`,{className:`stat-label`,children:p===`24h`?`近 24 小时运行`:`近 7 天运行`}),(0,K.jsx)(`strong`,{className:`stat-value`,children:h?.total??o})]})]}),(0,K.jsxs)(`section`,{className:`runtime-trend block${k?``:` is-empty`}`,children:[(0,K.jsxs)(`div`,{className:`block-head`,children:[(0,K.jsx)(`strong`,{children:`运行量趋势`}),M&&(0,K.jsx)(`span`,{className:`head-actions`,children:(0,K.jsxs)(`span`,{className:`tag`,children:[`峰值 `,A]})})]}),k?(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(`div`,{className:`runtime-trend-bars`,"aria-label":`运行量趋势`,children:O.map((e,t)=>(0,K.jsx)(`span`,{className:`runtime-trend-bar`,"data-peak":e.runs===A||void 0,style:{height:`${Math.max(4,Math.round(e.runs/A*100))}%`},title:`${e.startedAt} · ${e.runs} 次运行`},`${e.startedAt}-${t}`))}),(0,K.jsxs)(`div`,{className:`chart-axis`,children:[(0,K.jsx)(`span`,{children:`开始`}),(0,K.jsx)(`span`,{children:p===`24h`?`12:00`:`中段`}),(0,K.jsx)(`span`,{children:`现在`})]})]}):(0,K.jsx)(`div`,{className:`runtime-trend-empty`,children:(0,K.jsx)(`strong`,{children:O.length===1?`继续运行后即可形成趋势`:`运行 Agent 后即可查看趋势`})})]}),(0,K.jsxs)(`section`,{className:`runtime-resource-section block`,children:[(0,K.jsxs)(`div`,{className:`section-heading`,children:[(0,K.jsx)(`h2`,{title:`优先展示异常资源,每类最多展示 5 项`,children:`本地能力概览`}),(0,K.jsx)(`span`,{className:`badge`,"data-state":P?`warning`:`ready`,children:P?`${P} 项需处理`:`全部可用`})]}),(0,K.jsx)(`div`,{className:`section-toolbar runtime-resource-toolbar`,children:(0,K.jsxs)(`div`,{className:`search-field`,children:[(0,K.jsx)(Ye,{size:14}),(0,K.jsx)(`input`,{type:`search`,"aria-label":`搜索运行资源`,placeholder:`搜索资源`,value:b,onChange:e=>x(e.target.value)})]})}),(0,K.jsx)(`div`,{className:`runtime-resource-groups`,children:rH.map(e=>{let r=n.filter(t=>t.kind===e.kind),i=r.filter(e=>!N||`${e.displayName} ${e.name}`.toLocaleLowerCase().includes(N)).sort((e,t)=>Number(C(e)===`ready`)-Number(C(t)===`ready`)).slice(0,5),a=e.icon;return(0,K.jsxs)(`article`,{className:`runtime-resource-group block`,children:[(0,K.jsxs)(`header`,{children:[(0,K.jsx)(`span`,{className:`runtime-group-icon`,children:(0,K.jsx)(a,{size:15})}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`strong`,{children:e.label}),(0,K.jsx)(`small`,{children:r.length})]}),r.length>0&&(0,K.jsxs)(`button`,{className:`text-button`,type:`button`,onClick:()=>t(e.kind),children:[`查看全部 `,(0,K.jsx)(j,{size:13})]})]}),(0,K.jsx)(`div`,{className:`runtime-resource-list`,children:i.length===0?(0,K.jsx)(`div`,{className:`runtime-resource-empty`,children:`暂无资源`}):i.map(e=>{let t=C(e);return(0,K.jsxs)(`div`,{className:`runtime-resource-row`,children:[(0,K.jsx)(`span`,{className:`resource-state ${t===`ready`?`ready`:`warning`}`}),(0,K.jsxs)(`span`,{children:[(0,K.jsx)(`strong`,{children:e.displayName}),(0,K.jsx)(`small`,{children:e.version||e.source||e.name})]}),(0,K.jsx)(`span`,{className:`badge`,"data-state":t===`ready`?`ready`:`pending`,children:iH(t)})]},e.resourceId)})})]},e.kind)})})]})]})]})}function sH(e){if(typeof e==`string`||typeof e==`number`)return``+e;let t=``;if(Array.isArray(e))for(let n=0,r;n{}};function lH(){for(var e=0,t=arguments.length,n={},r;e=0&&(n=e.slice(r+1),e=e.slice(0,r)),e&&!t.hasOwnProperty(e))throw Error(`unknown type: `+e);return{type:e,name:n}})}uH.prototype=lH.prototype={constructor:uH,on:function(e,t){var n=this._,r=dH(e+``,n),i,a=-1,o=r.length;if(arguments.length<2){for(;++a0)for(var n=Array(i),r=0,i,a;r=0&&(t=e.slice(0,n))!==`xmlns`&&(e=e.slice(n+1)),mH.hasOwnProperty(t)?{space:mH[t],local:e}:e}function gH(e){return function(){var t=this.ownerDocument,n=this.namespaceURI;return n===`http://www.w3.org/1999/xhtml`&&t.documentElement.namespaceURI===`http://www.w3.org/1999/xhtml`?t.createElement(e):t.createElementNS(n,e)}}function _H(e){return function(){return this.ownerDocument.createElementNS(e.space,e.local)}}function vH(e){var t=hH(e);return(t.local?_H:gH)(t)}function yH(){}function bH(e){return e==null?yH:function(){return this.querySelector(e)}}function xH(e){typeof e!=`function`&&(e=bH(e));for(var t=this._groups,n=t.length,r=Array(n),i=0;i=v&&(v=_+1);!(b=g[v])&&++v=0;)(o=r[i])&&(a&&o.compareDocumentPosition(a)^4&&a.parentNode.insertBefore(o,a),a=o);return this}function ZH(e){e||=QH;function t(t,n){return t&&n?e(t.__data__,n.__data__):!t-!n}for(var n=this._groups,r=n.length,i=Array(r),a=0;at?1:e>=t?0:NaN}function $H(){var e=arguments[0];return arguments[0]=this,e.apply(null,arguments),this}function eU(){return Array.from(this)}function tU(){for(var e=this._groups,t=0,n=e.length;t1?this.each((t==null?pU:typeof t==`function`?hU:mU)(e,t,n??``)):_U(this.node(),e)}function _U(e,t){return e.style.getPropertyValue(t)||fU(e).getComputedStyle(e,null).getPropertyValue(t)}function vU(e){return function(){delete this[e]}}function yU(e,t){return function(){this[e]=t}}function bU(e,t){return function(){var n=t.apply(this,arguments);n==null?delete this[e]:this[e]=n}}function xU(e,t){return arguments.length>1?this.each((t==null?vU:typeof t==`function`?bU:yU)(e,t)):this.node()[e]}function SU(e){return e.trim().split(/^|\s+/)}function CU(e){return e.classList||new wU(e)}function wU(e){this._node=e,this._names=SU(e.getAttribute(`class`)||``)}wU.prototype={add:function(e){this._names.indexOf(e)<0&&(this._names.push(e),this._node.setAttribute(`class`,this._names.join(` `)))},remove:function(e){var t=this._names.indexOf(e);t>=0&&(this._names.splice(t,1),this._node.setAttribute(`class`,this._names.join(` `)))},contains:function(e){return this._names.indexOf(e)>=0}};function TU(e,t){for(var n=CU(e),r=-1,i=t.length;++r=0&&(t=e.slice(n+1),e=e.slice(0,n)),{type:e,name:t}})}function eW(e){return function(){var t=this.__on;if(t){for(var n=0,r=-1,i=t.length,a;n()=>e;function SW(e,{sourceEvent:t,subject:n,target:r,identifier:i,active:a,x:o,y:s,dx:c,dy:l,dispatch:u}){Object.defineProperties(this,{type:{value:e,enumerable:!0,configurable:!0},sourceEvent:{value:t,enumerable:!0,configurable:!0},subject:{value:n,enumerable:!0,configurable:!0},target:{value:r,enumerable:!0,configurable:!0},identifier:{value:i,enumerable:!0,configurable:!0},active:{value:a,enumerable:!0,configurable:!0},x:{value:o,enumerable:!0,configurable:!0},y:{value:s,enumerable:!0,configurable:!0},dx:{value:c,enumerable:!0,configurable:!0},dy:{value:l,enumerable:!0,configurable:!0},_:{value:u}})}SW.prototype.on=function(){var e=this._.on.apply(this._,arguments);return e===this._?this:e};function CW(e){return!e.ctrlKey&&!e.button}function wW(){return this.parentNode}function TW(e,t){return t??{x:e.x,y:e.y}}function EW(){return navigator.maxTouchPoints||`ontouchstart`in this}function DW(){var e=CW,t=wW,n=TW,r=EW,i={},a=lH(`start`,`drag`,`end`),o=0,s,c,l,u,d=0;function f(e){e.on(`mousedown.drag`,p).filter(r).on(`touchstart.drag`,g).on(`touchmove.drag`,_,hW).on(`touchend.drag touchcancel.drag`,v).style(`touch-action`,`none`).style(`-webkit-tap-highlight-color`,`rgba(0,0,0,0)`)}function p(n,r){if(!(u||!e.call(this,n,r))){var i=y(this,t.call(this,n,r),n,r,`mouse`);i&&(fW(n.view).on(`mousemove.drag`,m,gW).on(`mouseup.drag`,h,gW),yW(n.view),_W(n),l=!1,s=n.clientX,c=n.clientY,i(`start`,n))}}function m(e){if(vW(e),!l){var t=e.clientX-s,n=e.clientY-c;l=t*t+n*n>d}i.mouse(`drag`,e)}function h(e){fW(e.view).on(`mousemove.drag mouseup.drag`,null),bW(e.view,l),vW(e),i.mouse(`end`,e)}function g(n,r){if(e.call(this,n,r)){var i=n.changedTouches,a=t.call(this,n,r),o=i.length,s,c;for(s=0;s>8&15|t>>4&240,t>>4&15|t&240,(t&15)<<4|t&15,1):n===8?XW(t>>24&255,t>>16&255,t>>8&255,(t&255)/255):n===4?XW(t>>12&15|t>>8&240,t>>8&15|t>>4&240,t>>4&15|t&240,((t&15)<<4|t&15)/255):null):(t=LW.exec(e))?new $W(t[1],t[2],t[3],1):(t=RW.exec(e))?new $W(t[1]*255/100,t[2]*255/100,t[3]*255/100,1):(t=zW.exec(e))?XW(t[1],t[2],t[3],t[4]):(t=BW.exec(e))?XW(t[1]*255/100,t[2]*255/100,t[3]*255/100,t[4]):(t=VW.exec(e))?oG(t[1],t[2]/100,t[3]/100,1):(t=HW.exec(e))?oG(t[1],t[2]/100,t[3]/100,t[4]):UW.hasOwnProperty(e)?YW(UW[e]):e===`transparent`?new $W(NaN,NaN,NaN,0):null}function YW(e){return new $W(e>>16&255,e>>8&255,e&255,1)}function XW(e,t,n,r){return r<=0&&(e=t=n=NaN),new $W(e,t,n,r)}function ZW(e){return e instanceof AW||(e=JW(e)),e?(e=e.rgb(),new $W(e.r,e.g,e.b,e.opacity)):new $W}function QW(e,t,n,r){return arguments.length===1?ZW(e):new $W(e,t,n,r??1)}function $W(e,t,n,r){this.r=+e,this.g=+t,this.b=+n,this.opacity=+r}OW($W,QW,kW(AW,{brighter(e){return e=e==null?MW:MW**+e,new $W(this.r*e,this.g*e,this.b*e,this.opacity)},darker(e){return e=e==null?jW:jW**+e,new $W(this.r*e,this.g*e,this.b*e,this.opacity)},rgb(){return this},clamp(){return new $W(iG(this.r),iG(this.g),iG(this.b),rG(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:eG,formatHex:eG,formatHex8:tG,formatRgb:nG,toString:nG}));function eG(){return`#${aG(this.r)}${aG(this.g)}${aG(this.b)}`}function tG(){return`#${aG(this.r)}${aG(this.g)}${aG(this.b)}${aG((isNaN(this.opacity)?1:this.opacity)*255)}`}function nG(){let e=rG(this.opacity);return`${e===1?`rgb(`:`rgba(`}${iG(this.r)}, ${iG(this.g)}, ${iG(this.b)}${e===1?`)`:`, ${e})`}`}function rG(e){return isNaN(e)?1:Math.max(0,Math.min(1,e))}function iG(e){return Math.max(0,Math.min(255,Math.round(e)||0))}function aG(e){return e=iG(e),(e<16?`0`:``)+e.toString(16)}function oG(e,t,n,r){return r<=0?e=t=n=NaN:n<=0||n>=1?e=t=NaN:t<=0&&(e=NaN),new lG(e,t,n,r)}function sG(e){if(e instanceof lG)return new lG(e.h,e.s,e.l,e.opacity);if(e instanceof AW||(e=JW(e)),!e)return new lG;if(e instanceof lG)return e;e=e.rgb();var t=e.r/255,n=e.g/255,r=e.b/255,i=Math.min(t,n,r),a=Math.max(t,n,r),o=NaN,s=a-i,c=(a+i)/2;return s?(o=t===a?(n-r)/s+(n0&&c<1?0:o,new lG(o,s,c,e.opacity)}function cG(e,t,n,r){return arguments.length===1?sG(e):new lG(e,t,n,r??1)}function lG(e,t,n,r){this.h=+e,this.s=+t,this.l=+n,this.opacity=+r}OW(lG,cG,kW(AW,{brighter(e){return e=e==null?MW:MW**+e,new lG(this.h,this.s,this.l*e,this.opacity)},darker(e){return e=e==null?jW:jW**+e,new lG(this.h,this.s,this.l*e,this.opacity)},rgb(){var e=this.h%360+(this.h<0)*360,t=isNaN(e)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*t,i=2*n-r;return new $W(fG(e>=240?e-240:e+120,i,r),fG(e,i,r),fG(e<120?e+240:e-120,i,r),this.opacity)},clamp(){return new lG(uG(this.h),dG(this.s),dG(this.l),rG(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){let e=rG(this.opacity);return`${e===1?`hsl(`:`hsla(`}${uG(this.h)}, ${dG(this.s)*100}%, ${dG(this.l)*100}%${e===1?`)`:`, ${e})`}`}}));function uG(e){return e=(e||0)%360,e<0?e+360:e}function dG(e){return Math.max(0,Math.min(1,e||0))}function fG(e,t,n){return(e<60?t+(n-t)*e/60:e<180?n:e<240?t+(n-t)*(240-e)/60:t)*255}var pG=e=>()=>e;function mG(e,t){return function(n){return e+n*t}}function hG(e,t,n){return e**=+n,t=t**+n-e,n=1/n,function(r){return(e+r*t)**+n}}function gG(e){return(e=+e)==1?_G:function(t,n){return n-t?hG(t,n,e):pG(isNaN(t)?n:t)}}function _G(e,t){var n=t-e;return n?mG(e,n):pG(isNaN(e)?t:e)}var vG=(function e(t){var n=gG(t);function r(e,t){var r=n((e=QW(e)).r,(t=QW(t)).r),i=n(e.g,t.g),a=n(e.b,t.b),o=_G(e.opacity,t.opacity);return function(t){return e.r=r(t),e.g=i(t),e.b=a(t),e.opacity=o(t),e+``}}return r.gamma=e,r})(1);function yG(e,t){t||=[];var n=e?Math.min(t.length,e.length):0,r=t.slice(),i;return function(a){for(i=0;i