@snowlocked/dsh-k8s-console 0.3.0 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/lib/client.js +263 -163
  2. package/package.json +1 -1
package/lib/client.js CHANGED
@@ -5,73 +5,121 @@ window.__ModuleLoader__.load({
5
5
  var __dsh_k8s_internal = { exports: {} };
6
6
  var __dsh_k8s_exports = __dsh_k8s_internal.exports;
7
7
  Object.defineProperty(__dsh_k8s_exports, Symbol.toStringTag, { value: "Module" });
8
- "use strict";var __dsh_k8s_module__=(()=>{var pe=Object.defineProperty;var Ye=Object.getOwnPropertyDescriptor;var Ue=Object.getOwnPropertyNames;var Ge=Object.prototype.hasOwnProperty;var T=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,n)=>(typeof require<"u"?require:t)[n]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var Qe=(e,t)=>{for(var n in t)pe(e,n,{get:t[n],enumerable:!0})},Ze=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let c of Ue(t))!Ge.call(e,c)&&c!==n&&pe(e,c,{get:()=>t[c],enumerable:!(o=Ye(t,c))||o.enumerable});return e};var et=e=>Ze(pe({},"__esModule",{value:!0}),e);var ut={};Qe(ut,{apply:()=>pt,inject:()=>lt});var ae=T("react");var re=T("react");var Pe=T("react");var Ne="dsh-k8s-console.persist.v1";function ue(){try{let e=window.localStorage.getItem(Ne);if(!e)return{};let t=JSON.parse(e);return t&&typeof t=="object"?t:{}}catch{return{}}}function Se(e){try{let t={...ue(),...e};window.localStorage.setItem(Ne,JSON.stringify(t))}catch{}}var Y=ue().panelOpen===!0,be=new Set,ke=()=>{for(let e of be)e()},me=Object.freeze({panelOpen:!0}),ge=Object.freeze({panelOpen:!1}),oe=Y?me:ge,fe=()=>{try{Se({panelOpen:Y})}catch{}},X={open(){Y||(Y=!0,oe=me,fe(),ke())},close(){Y&&(Y=!1,oe=ge,fe(),ke())},toggle(){Y=!Y,oe=Y?me:ge,fe(),ke()},getSnapshot:()=>oe,subscribe(e){return be.add(e),()=>be.delete(e)}};function Ee(){return(0,Pe.useSyncExternalStore)(X.subscribe,X.getSnapshot,X.getSnapshot)}var V=T("react/jsx-runtime"),tt=(0,V.jsxs)("svg",{viewBox:"0 0 16 16",width:"16",height:"16",fill:"none",stroke:"currentColor",strokeWidth:1.4,strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[(0,V.jsx)("circle",{cx:"8",cy:"8",r:"1.4",fill:"currentColor",stroke:"none"}),(0,V.jsx)("circle",{cx:"8",cy:"2.6",r:"1.05",fill:"currentColor",stroke:"none"}),(0,V.jsx)("circle",{cx:"8",cy:"13.4",r:"1.05",fill:"currentColor",stroke:"none"}),(0,V.jsx)("circle",{cx:"2.6",cy:"8",r:"1.05",fill:"currentColor",stroke:"none"}),(0,V.jsx)("circle",{cx:"13.4",cy:"8",r:"1.05",fill:"currentColor",stroke:"none"}),(0,V.jsx)("path",{d:"M8 4v2.6M8 9.4V12M4.6 6.6l2.2 1.4M9.2 8l2.2 1.4M4.6 9.4l2.2-1.4M9.2 8l2.2-1.4"})]});function Te(e={}){let{wide:t=!0,t:n=(a=>a)}=e,o=n,c=(0,re.useSyncExternalStore)(X.subscribe,X.getSnapshot,X.getSnapshot),x=(0,re.useCallback)(()=>{X.toggle()},[]);return(0,V.jsxs)("button",{type:"button","data-d-sh-plugin":"k8s-console","data-active":c.panelOpen||void 0,"aria-label":o("sidebar.aria"),title:o("sidebar.title"),onClick:x,className:"kc-sidebar-entry",children:[(0,V.jsx)("span",{className:"kc-sidebar-entry-icon","aria-hidden":"true",children:tt}),t?(0,V.jsx)("span",{className:"kc-sidebar-entry-label",children:o("sidebar.label")}):null]})}var U=T("react");var R=T("react");var Ae="/api/dsh-plugin-k8s",Q=class extends Error{status;code;constructor(t,n,o){super(t),this.status=n,this.code=o}};async function F(e){return e instanceof Q||e instanceof Error?e.message:typeof e=="string"?e:JSON.stringify(e)}function Ke(e){return{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(e??{})}}async function ee(e,t){let n;try{n=await fetch(`${Ae}${e}`,Ke(t))}catch(c){throw new Q(`\u7F51\u7EDC\u8BF7\u6C42\u5931\u8D25\uFF1A${c instanceof Error?c.message:String(c)}`,0)}let o=null;try{o=await n.json()}catch{o=null}if(!n.ok){let c=o&&typeof o=="object"?o:{};throw new Q(String(c.error??`HTTP ${n.status}`),n.status,String(c.code??""))}return o}async function $e(e,t,n,o){let c;try{c=await fetch(`${Ae}${e}`,{...Ke(t),...o?{signal:o}:{}})}catch(u){throw o?.aborted?u:new Q(`\u7F51\u7EDC\u8BF7\u6C42\u5931\u8D25\uFF1A${u instanceof Error?u.message:String(u)}`,0)}if(!c.ok||!c.body){let u=`HTTP ${c.status}`;try{let f=await c.json();f?.error&&(u=f.error)}catch{}throw new Q(u,c.status)}let x=c.body.getReader(),a=new TextDecoder("utf-8"),m="";for(;;){let u;try{u=await x.read()}catch(y){throw o?.aborted?y:new Q(`\u8BFB\u53D6\u6D41\u5931\u8D25\uFF1A${y instanceof Error?y.message:String(y)}`,0)}if(u.done)break;m+=a.decode(u.value,{stream:!0});let f;for(;(f=m.indexOf(`
8
+ "use strict";var __dsh_k8s_module__=(()=>{var de=Object.defineProperty;var Ge=Object.getOwnPropertyDescriptor;var Qe=Object.getOwnPropertyNames;var Ze=Object.prototype.hasOwnProperty;var E=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,o)=>(typeof require<"u"?require:t)[o]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var et=(e,t)=>{for(var o in t)de(e,o,{get:t[o],enumerable:!0})},tt=(e,t,o,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of Qe(t))!Ze.call(e,a)&&a!==o&&de(e,a,{get:()=>t[a],enumerable:!(n=Ge(t,a))||n.enumerable});return e};var nt=e=>tt(de({},"__esModule",{value:!0}),e);var ft={};et(ft,{apply:()=>bt,inject:()=>kt});var ne=E("react");var ot=E("react");var he="dsh-k8s-console.persist.v1";function pe(){try{let e=window.localStorage.getItem(he);if(!e)return{};let t=JSON.parse(e);return t&&typeof t=="object"?t:{}}catch{return{}}}function ye(e){try{let t={...pe(),...e};window.localStorage.setItem(he,JSON.stringify(t))}catch{}}var ee=pe().panelOpen===!0,ke=new Set,we=e=>{if(typeof document>"u")return;let t=0,o=()=>{let n=Array.from(document.querySelectorAll('[role="tab"]')).filter(a=>a.closest("#dsh-k8s-console")===null).filter(a=>a.closest("#dsh-database-console")===null).find(a=>{let k=a.textContent?.trim().toLowerCase()??"",s=`${a.getAttribute("aria-label")??""} ${a.title??""}`.toLowerCase();return e==="k8s"?k==="k8s"||s.includes("k8s"):k==="chat"||k==="\u5BF9\u8BDD"||s.includes("chat")||s.includes("\u5BF9\u8BDD")});if(n!==void 0){n.click();return}++t<8&&setTimeout(o,16)};o()},Ne=()=>{for(let e of ke)e()},Ce=!1,Pe=Object.freeze({panelOpen:!0}),Ee=Object.freeze({panelOpen:!1}),ue=ee?Pe:Ee,Se=()=>{try{ye({panelOpen:ee})}catch{}},F={open(){ee||(ee=!0,ue=Pe,Se(),Ne()),we("k8s")},close(){ee=!1,ue=Ee,Se(),Ne(),we("chat")},toggle(){Ce?F.close():F.open()},setDocked(e){Ce=e},getSnapshot:()=>ue,subscribe(e){return ke.add(e),()=>ke.delete(e)}};var J=E("react/jsx-runtime"),rt=(0,J.jsxs)("svg",{viewBox:"0 0 16 16",width:"16",height:"16",fill:"none",stroke:"currentColor",strokeWidth:1.4,strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[(0,J.jsx)("circle",{cx:"8",cy:"8",r:"1.4",fill:"currentColor",stroke:"none"}),(0,J.jsx)("circle",{cx:"8",cy:"2.6",r:"1.05",fill:"currentColor",stroke:"none"}),(0,J.jsx)("circle",{cx:"8",cy:"13.4",r:"1.05",fill:"currentColor",stroke:"none"}),(0,J.jsx)("circle",{cx:"2.6",cy:"8",r:"1.05",fill:"currentColor",stroke:"none"}),(0,J.jsx)("circle",{cx:"13.4",cy:"8",r:"1.05",fill:"currentColor",stroke:"none"}),(0,J.jsx)("path",{d:"M8 4v2.6M8 9.4V12M4.6 6.6l2.2 1.4M9.2 8l2.2 1.4M4.6 9.4l2.2-1.4M9.2 8l2.2-1.4"})]});function Te(e={}){let{wide:t=!0,t:o=(s=>s)}=e,n=o,a=(0,ne.useSyncExternalStore)(F.subscribe,F.getSnapshot,F.getSnapshot),k=(0,ne.useCallback)(()=>{F.toggle()},[]);return(0,J.jsxs)("button",{type:"button","data-d-sh-plugin":"k8s-console","data-active":a.panelOpen||void 0,"aria-label":n("sidebar.aria"),title:n("sidebar.title"),onClick:k,className:"kc-sidebar-entry",children:[(0,J.jsx)("span",{className:"kc-sidebar-entry-icon","aria-hidden":"true",children:rt}),t?(0,J.jsx)("span",{className:"kc-sidebar-entry-label",children:n("sidebar.label")}):null]})}var oe=E("react"),Ve=E("react-dom/client");var R=E("react");var $e="/api/dsh-plugin-k8s",U=class extends Error{status;code;constructor(t,o,n){super(t),this.status=o,this.code=n}};async function W(e){return e instanceof U||e instanceof Error?e.message:typeof e=="string"?e:JSON.stringify(e)}function Ke(e){return{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(e??{})}}async function Z(e,t){let o;try{o=await fetch(`${$e}${e}`,Ke(t))}catch(a){throw new U(`\u7F51\u7EDC\u8BF7\u6C42\u5931\u8D25\uFF1A${a instanceof Error?a.message:String(a)}`,0)}let n=null;try{n=await o.json()}catch{n=null}if(!o.ok){let a=n&&typeof n=="object"?n:{};throw new U(String(a.error??`HTTP ${o.status}`),o.status,String(a.code??""))}return n}async function Ae(e,t,o,n){let a;try{a=await fetch(`${$e}${e}`,{...Ke(t),...n?{signal:n}:{}})}catch(f){throw n?.aborted?f:new U(`\u7F51\u7EDC\u8BF7\u6C42\u5931\u8D25\uFF1A${f instanceof Error?f.message:String(f)}`,0)}if(!a.ok||!a.body){let f=`HTTP ${a.status}`;try{let b=await a.json();b?.error&&(f=b.error)}catch{}throw new U(f,a.status)}let k=a.body.getReader(),s=new TextDecoder("utf-8"),v="";for(;;){let f;try{f=await k.read()}catch(y){throw n?.aborted?y:new U(`\u8BFB\u53D6\u6D41\u5931\u8D25\uFF1A${y instanceof Error?y.message:String(y)}`,0)}if(f.done)break;v+=s.decode(f.value,{stream:!0});let b;for(;(b=v.indexOf(`
9
9
 
10
- `))>=0;){let y=m.slice(0,f);if(m=m.slice(f+2),y.startsWith("data: ")){let $=y.slice(6).trim();if(!$)continue;try{n(JSON.parse($))}catch{}}}}if(m.startsWith("data: ")){let u=m.slice(6).trim();if(u)try{n(JSON.parse(u))}catch{}}}var B={state:e=>ee("/state",e?{refresh:!0}:{}),kubeconfigs:()=>ee("/kubeconfigs/list"),save:e=>ee("/kubeconfigs/save",e),remove:e=>ee("/kubeconfig/remove",{id:e}),raw:e=>ee("/kubeconfig/raw",{id:e}),check:e=>ee("/kubeconfigs/check",{id:e}),aiModels:()=>ee("/ai/models"),run:(e,t,n)=>$e("/run",e,t,n),chat:(e,t,n)=>$e("/ai/chat",e,t,n)};function Me(e){let t=[];for(let n of e.providers)if(n.models.length===0)t.push({key:`p:${n.provider}`,provider:n.provider,label:n.label??n.provider});else for(let o of n.models)t.push({key:`m:${n.provider}/${o.id}`,provider:n.provider,model:o.id,label:o.label??`${n.provider} \xB7 ${o.id}`});return t}function ze(e){return e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/(1024*1024)).toFixed(1)} MB`}function xe(e){if(!e)return"\u2014";let t=new Date(e);return Number.isNaN(t.getTime())?e:t.toLocaleString("zh-CN",{hour12:!1})}var L=T("react");var p=T("react/jsx-runtime"),ve={open:!1,name:"",mode:"paste",content:"",filePath:"",busy:!1,error:null};function Re(e){let{kubeconfigs:t,busyList:n,refresh:o,onOpenSession:c,onFlash:x}=e,[a,m]=(0,L.useState)(ve),[u,f]=(0,L.useState)(null),y=e.stateInfo?.kubectl,$=(0,L.useRef)(null);(0,L.useEffect)(()=>{a.open&&a.mode==="paste"&&$.current?.focus()},[a.open,a.mode]);let b=(0,L.useCallback)(s=>{m(C=>({...C,...s}))},[]),E=(0,L.useCallback)(()=>{m(ve)},[]),A=(0,L.useCallback)(async()=>{if(a.busy)return;let s=a.name.trim();if(!s){b({error:"\u8BF7\u586B\u5199 kubeconfig \u540D\u79F0\uFF08\u663E\u793A\u7528\uFF09"});return}if(a.mode==="paste"&&a.content.trim()===""){b({error:"\u8BF7\u7C98\u8D34 kubeconfig \u5185\u5BB9\uFF0C\u6216\u6539\u7528\u201C\u672C\u673A\u6587\u4EF6\u5BFC\u5165\u201D"});return}if(a.mode==="path"&&a.filePath.trim()===""){b({error:"\u8BF7\u586B\u5199\u672C\u673A kubeconfig \u6587\u4EF6\u8DEF\u5F84\uFF08\u5982 D:\\path\\dev.yaml\uFF09"});return}b({busy:!0,error:null});try{await B.save({name:s,content:a.mode==="paste"?a.content:void 0,filePath:a.mode==="path"?a.filePath:void 0}),E(),x("ok",`\u5DF2\u4FDD\u5B58 kubeconfig\u300C${s}\u300D`),o()}catch(C){b({error:await F(C)})}finally{b({busy:!1})}},[a,b,E,x,o]),z=(0,L.useCallback)(async s=>{if(window.confirm(`\u5220\u9664 kubeconfig\u300C${s.name}\u300D\uFF1F
10
+ `))>=0;){let y=v.slice(0,b);if(v=v.slice(b+2),y.startsWith("data: ")){let A=y.slice(6).trim();if(!A)continue;try{o(JSON.parse(A))}catch{}}}}if(v.startsWith("data: ")){let f=v.slice(6).trim();if(f)try{o(JSON.parse(f))}catch{}}}var B={state:e=>Z("/state",e?{refresh:!0}:{}),kubeconfigs:()=>Z("/kubeconfigs/list"),save:e=>Z("/kubeconfigs/save",e),remove:e=>Z("/kubeconfig/remove",{id:e}),raw:e=>Z("/kubeconfig/raw",{id:e}),check:e=>Z("/kubeconfigs/check",{id:e}),aiModels:()=>Z("/ai/models"),run:(e,t,o)=>Ae("/run",e,t,o),chat:(e,t,o)=>Ae("/ai/chat",e,t,o)};function ze(e){let t=[];for(let o of e.providers)if(o.models.length===0)t.push({key:`p:${o.provider}`,provider:o.provider,label:o.label??o.provider});else for(let n of o.models)t.push({key:`m:${o.provider}/${n.id}`,provider:o.provider,model:n.id,label:n.label??`${o.provider} \xB7 ${n.id}`});return t}function Re(e){return e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/(1024*1024)).toFixed(1)} MB`}function be(e){if(!e)return"\u2014";let t=new Date(e);return Number.isNaN(t.getTime())?e:t.toLocaleString("zh-CN",{hour12:!1})}var H=E("react");var p=E("react/jsx-runtime"),fe={open:!1,name:"",mode:"paste",content:"",filePath:"",busy:!1,error:null};function Me(e){let{kubeconfigs:t,busyList:o,refresh:n,onOpenSession:a,onFlash:k}=e,[s,v]=(0,H.useState)(fe),[f,b]=(0,H.useState)(null),y=e.stateInfo?.kubectl,A=(0,H.useRef)(null);(0,H.useEffect)(()=>{s.open&&s.mode==="paste"&&A.current?.focus()},[s.open,s.mode]);let g=(0,H.useCallback)(i=>{v(N=>({...N,...i}))},[]),K=(0,H.useCallback)(()=>{v(fe)},[]),z=(0,H.useCallback)(async()=>{if(s.busy)return;let i=s.name.trim();if(!i){g({error:"\u8BF7\u586B\u5199 kubeconfig \u540D\u79F0\uFF08\u663E\u793A\u7528\uFF09"});return}if(s.mode==="paste"&&s.content.trim()===""){g({error:"\u8BF7\u7C98\u8D34 kubeconfig \u5185\u5BB9\uFF0C\u6216\u6539\u7528\u201C\u672C\u673A\u6587\u4EF6\u5BFC\u5165\u201D"});return}if(s.mode==="path"&&s.filePath.trim()===""){g({error:"\u8BF7\u586B\u5199\u672C\u673A kubeconfig \u6587\u4EF6\u8DEF\u5F84\uFF08\u5982 D:\\path\\dev.yaml\uFF09"});return}g({busy:!0,error:null});try{await B.save({name:i,content:s.mode==="paste"?s.content:void 0,filePath:s.mode==="path"?s.filePath:void 0}),K(),k("ok",`\u5DF2\u4FDD\u5B58 kubeconfig\u300C${i}\u300D`),n()}catch(N){g({error:await W(N)})}finally{g({busy:!1})}},[s,g,K,k,n]),M=(0,H.useCallback)(async i=>{if(window.confirm(`\u5220\u9664 kubeconfig\u300C${i.name}\u300D\uFF1F
11
11
 
12
- \u8BE5\u64CD\u4F5C\u4F1A\u79FB\u9664\u672C\u5730\u4FDD\u5B58\u7684\u6587\u4EF6\u526F\u672C\uFF08\u542B\u8BBF\u95EE\u51ED\u636E\uFF09\uFF0C\u5E76\u5173\u95ED\u5B83\u7684\u6240\u6709\u4F1A\u8BDD Tab\u3002`)){f(`rm:${s.id}`);try{let{ok:O}=await B.remove(s.id);O?(x("info",`\u5DF2\u5220\u9664\u300C${s.name}\u300D`),o()):x("error","\u5220\u9664\u5931\u8D25\uFF1A\u670D\u52A1\u7AEF\u672A\u786E\u8BA4")}catch(O){x("error",`\u5220\u9664\u5931\u8D25\uFF1A${await F(O)}`)}finally{f(null)}}},[x,o]),I=(0,L.useCallback)(async s=>{f(`check:${s.id}`);try{let C=await B.check(s.id);x(C.ok?"ok":"error",`\u300C${s.name}\u300D${C.ok?"\u2705 \u96C6\u7FA4\u53EF\u8FBE":"\u274C \u4E0D\u53EF\u8FBE"}\uFF1A${C.message}`)}catch(C){x("error",`\u300C${s.name}\u300D\u68C0\u67E5\u5931\u8D25\uFF1A${await F(C)}`)}finally{f(null),o()}},[x,o]),D=(0,L.useCallback)(async s=>{f(`copy:${s.id}`);try{let{content:C}=await B.raw(s.id);await navigator.clipboard.writeText(C),x("ok",`\u5DF2\u590D\u5236\u300C${s.name}\u300D\u5B8C\u6574 kubeconfig \u5230\u526A\u8D34\u677F\uFF08\u542B\u51ED\u636E\uFF0C\u6CE8\u610F\u4FDD\u7BA1\uFF09`)}catch(C){x("error",`\u590D\u5236\u5931\u8D25\uFF1A${await F(C)}`)}finally{f(null)}},[x]);return(0,p.jsxs)("div",{className:"kc-nav",children:[(0,p.jsxs)("div",{className:"kc-nav-head",children:[(0,p.jsx)("span",{className:"kc-nav-title",children:"kubeconfig"}),(0,p.jsx)("span",{className:"kc-nav-count",children:t.length}),(0,p.jsx)("span",{className:"kc-grow"}),(0,p.jsx)("button",{className:"kc-btn-sm",onClick:()=>{b({...ve,open:!0})},title:"\u6DFB\u52A0 kubeconfig\uFF08\u7C98\u8D34\u5185\u5BB9\u6216\u5BFC\u5165\u672C\u673A\u6587\u4EF6\uFF09",children:"\u2795 \u6DFB\u52A0"}),(0,p.jsx)("button",{className:"kc-btn-sm",onClick:()=>void o(),disabled:n,title:"\u5237\u65B0\u5217\u8868",children:"\u21BB"})]}),y&&!y.present?(0,p.jsxs)("div",{className:"kc-warnbox",title:y.missingReason,children:[(0,p.jsx)("div",{className:"kc-warnbox-title",children:"\u26A0\uFE0F kubectl \u4E0D\u53EF\u7528"}),(0,p.jsx)("div",{className:"kc-warnbox-text",children:y.missingReason})]}):null,(0,p.jsxs)("div",{className:"kc-nav-list",children:[t.length===0?(0,p.jsx)("div",{className:"kc-nav-empty",children:n?"\u52A0\u8F7D\u4E2D\u2026":`\u8FD8\u6CA1\u6709 kubeconfig\u3002
13
- \u70B9\u53F3\u4E0A\u89D2 \u2795 \u6DFB\u52A0\uFF08\u7C98\u8D34\u5185\u5BB9\u6216\u5BFC\u5165\u672C\u673A\u6587\u4EF6\uFF09\u3002`}):null,t.map(s=>{let C=u===`rm:${s.id}`||u===`check:${s.id}`||u===`copy:${s.id}`;return(0,p.jsxs)("div",{className:"kc-conn",title:"\u70B9\u51FB\u65B0\u5EFA\u4F1A\u8BDD\uFF08\u540C\u4E00\u96C6\u7FA4\u53EF\u5F00\u591A\u4E2A\uFF09",children:[(0,p.jsxs)("button",{type:"button",className:"kc-conn-main",onClick:()=>c(s),disabled:n,children:[(0,p.jsx)("span",{className:"kc-conn-name",children:s.name}),(0,p.jsxs)("span",{className:"kc-conn-sub",children:[s.currentContext??s.contextNames[0]??"\uFF08\u65E0 context\uFF09",s.contextNames.length>1?`\uFF08\u5171 ${s.contextNames.length} \u4E2A context\uFF09`:""]}),(0,p.jsx)("span",{className:"kc-conn-server",title:"API server",children:s.server??""}),s.lastCheckError?(0,p.jsx)("span",{className:"kc-conn-state kc-conn-state-bad",title:`\u4E0A\u6B21\u68C0\u67E5\u5931\u8D25\uFF1A${s.lastCheckError}`,children:"\u2715"}):s.lastCheckedAt?(0,p.jsx)("span",{className:"kc-conn-state kc-conn-state-ok",title:`\u4E0A\u6B21\u68C0\u67E5 ${xe(s.lastCheckedAt)}`,children:"\u2713"}):null]}),(0,p.jsxs)("span",{className:"kc-conn-actions",children:[(0,p.jsx)("button",{className:"kc-icon-btn",title:"\u6D4B\u8BD5\u8FDE\u901A\uFF08kubectl get --raw=/version\uFF09",disabled:C,onClick:()=>void I(s),children:C&&u===`check:${s.id}`?"\u2026":"\u6D4B"}),(0,p.jsx)("button",{className:"kc-icon-btn",title:"\u590D\u5236\u5B8C\u6574 kubeconfig\uFF08\u542B\u51ED\u636E\uFF09",disabled:C,onClick:()=>void D(s),children:C&&u===`copy:${s.id}`?"\u2026":"\u29C9"}),(0,p.jsx)("button",{className:"kc-icon-btn kc-icon-btn-danger",title:`\u5220\u9664\uFF08${ze(s.size)}\uFF0C\u66F4\u65B0\u4E8E ${xe(s.updatedAt)}\uFF09`,disabled:C,onClick:()=>void z(s),children:"\u2715"})]})]},s.id)})]}),(0,p.jsx)("div",{className:"kc-nav-foot",children:(0,p.jsxs)("div",{className:"kc-muted",style:{fontSize:11,lineHeight:1.6},children:["\u6570\u636E\u76EE\u5F55\uFF1A",e.stateInfo?.dataDir??"\u2026",y?.present&&y.version?(0,p.jsxs)("div",{children:["kubectl ",y.version]}):null]})}),a.open?(0,p.jsx)("div",{className:"kc-modal-mask",onMouseDown:s=>{s.target===s.currentTarget&&E()},children:(0,p.jsxs)("div",{className:"kc-modal",children:[(0,p.jsx)("div",{className:"kc-modal-title",children:"\u2795 \u6DFB\u52A0 kubeconfig"}),(0,p.jsxs)("div",{className:"kc-field",children:[(0,p.jsx)("label",{children:"\u540D\u79F0\uFF08\u663E\u793A\u7528\uFF09"}),(0,p.jsx)("input",{value:a.name,onChange:s=>b({name:s.target.value,error:null}),placeholder:"\u4F8B\u5982\uFF1Adevelopment / dev",autoFocus:!0})]}),(0,p.jsxs)("div",{className:"kc-seg",role:"tablist",children:[(0,p.jsx)("button",{type:"button",role:"tab","aria-selected":a.mode==="paste",className:a.mode==="paste"?"kc-seg-active":"",onClick:()=>b({mode:"paste"}),children:"\u{1F4CB} \u7C98\u8D34\u5185\u5BB9"}),(0,p.jsx)("button",{type:"button",role:"tab","aria-selected":a.mode==="path",className:a.mode==="path"?"kc-seg-active":"",onClick:()=>b({mode:"path"}),children:"\u{1F4C1} \u5BFC\u5165\u672C\u673A\u6587\u4EF6"})]}),a.mode==="paste"?(0,p.jsxs)("div",{className:"kc-field",children:[(0,p.jsx)("label",{children:"kubeconfig \u5185\u5BB9\uFF08YAML\uFF09"}),(0,p.jsx)("textarea",{ref:$,className:"kc-code-input",rows:10,value:a.content,onChange:s=>b({content:s.target.value,error:null}),placeholder:`apiVersion: v1
12
+ \u8BE5\u64CD\u4F5C\u4F1A\u79FB\u9664\u672C\u5730\u4FDD\u5B58\u7684\u6587\u4EF6\u526F\u672C\uFF08\u542B\u8BBF\u95EE\u51ED\u636E\uFF09\uFF0C\u5E76\u5173\u95ED\u5B83\u7684\u6240\u6709\u4F1A\u8BDD Tab\u3002`)){b(`rm:${i.id}`);try{let{ok:O}=await B.remove(i.id);O?(k("info",`\u5DF2\u5220\u9664\u300C${i.name}\u300D`),n()):k("error","\u5220\u9664\u5931\u8D25\uFF1A\u670D\u52A1\u7AEF\u672A\u786E\u8BA4")}catch(O){k("error",`\u5220\u9664\u5931\u8D25\uFF1A${await W(O)}`)}finally{b(null)}}},[k,n]),j=(0,H.useCallback)(async i=>{b(`check:${i.id}`);try{let N=await B.check(i.id);k(N.ok?"ok":"error",`\u300C${i.name}\u300D${N.ok?"\u2705 \u96C6\u7FA4\u53EF\u8FBE":"\u274C \u4E0D\u53EF\u8FBE"}\uFF1A${N.message}`)}catch(N){k("error",`\u300C${i.name}\u300D\u68C0\u67E5\u5931\u8D25\uFF1A${await W(N)}`)}finally{b(null),n()}},[k,n]),I=(0,H.useCallback)(async i=>{b(`copy:${i.id}`);try{let{content:N}=await B.raw(i.id);await navigator.clipboard.writeText(N),k("ok",`\u5DF2\u590D\u5236\u300C${i.name}\u300D\u5B8C\u6574 kubeconfig \u5230\u526A\u8D34\u677F\uFF08\u542B\u51ED\u636E\uFF0C\u6CE8\u610F\u4FDD\u7BA1\uFF09`)}catch(N){k("error",`\u590D\u5236\u5931\u8D25\uFF1A${await W(N)}`)}finally{b(null)}},[k]);return(0,p.jsxs)("div",{className:"kc-nav",children:[(0,p.jsxs)("div",{className:"kc-nav-head",children:[(0,p.jsx)("span",{className:"kc-nav-title",children:"kubeconfig"}),(0,p.jsx)("span",{className:"kc-nav-count",children:t.length}),(0,p.jsx)("span",{className:"kc-grow"}),(0,p.jsx)("button",{className:"kc-btn-sm",onClick:()=>{g({...fe,open:!0})},title:"\u6DFB\u52A0 kubeconfig\uFF08\u7C98\u8D34\u5185\u5BB9\u6216\u5BFC\u5165\u672C\u673A\u6587\u4EF6\uFF09",children:"\u2795 \u6DFB\u52A0"}),(0,p.jsx)("button",{className:"kc-btn-sm",onClick:()=>void n(),disabled:o,title:"\u5237\u65B0\u5217\u8868",children:"\u21BB"})]}),y&&!y.present?(0,p.jsxs)("div",{className:"kc-warnbox",title:y.missingReason,children:[(0,p.jsx)("div",{className:"kc-warnbox-title",children:"\u26A0\uFE0F kubectl \u4E0D\u53EF\u7528"}),(0,p.jsx)("div",{className:"kc-warnbox-text",children:y.missingReason})]}):null,(0,p.jsxs)("div",{className:"kc-nav-list",children:[t.length===0?(0,p.jsx)("div",{className:"kc-nav-empty",children:o?"\u52A0\u8F7D\u4E2D\u2026":`\u8FD8\u6CA1\u6709 kubeconfig\u3002
13
+ \u70B9\u53F3\u4E0A\u89D2 \u2795 \u6DFB\u52A0\uFF08\u7C98\u8D34\u5185\u5BB9\u6216\u5BFC\u5165\u672C\u673A\u6587\u4EF6\uFF09\u3002`}):null,t.map(i=>{let N=f===`rm:${i.id}`||f===`check:${i.id}`||f===`copy:${i.id}`;return(0,p.jsxs)("div",{className:"kc-conn",title:"\u70B9\u51FB\u65B0\u5EFA\u4F1A\u8BDD\uFF08\u540C\u4E00\u96C6\u7FA4\u53EF\u5F00\u591A\u4E2A\uFF09",children:[(0,p.jsxs)("button",{type:"button",className:"kc-conn-main",onClick:()=>a(i),disabled:o,children:[(0,p.jsx)("span",{className:"kc-conn-name",children:i.name}),(0,p.jsxs)("span",{className:"kc-conn-sub",children:[i.currentContext??i.contextNames[0]??"\uFF08\u65E0 context\uFF09",i.contextNames.length>1?`\uFF08\u5171 ${i.contextNames.length} \u4E2A context\uFF09`:""]}),(0,p.jsx)("span",{className:"kc-conn-server",title:"API server",children:i.server??""}),i.lastCheckError?(0,p.jsx)("span",{className:"kc-conn-state kc-conn-state-bad",title:`\u4E0A\u6B21\u68C0\u67E5\u5931\u8D25\uFF1A${i.lastCheckError}`,children:"\u2715"}):i.lastCheckedAt?(0,p.jsx)("span",{className:"kc-conn-state kc-conn-state-ok",title:`\u4E0A\u6B21\u68C0\u67E5 ${be(i.lastCheckedAt)}`,children:"\u2713"}):null]}),(0,p.jsxs)("span",{className:"kc-conn-actions",children:[(0,p.jsx)("button",{className:"kc-icon-btn",title:"\u6D4B\u8BD5\u8FDE\u901A\uFF08kubectl get --raw=/version\uFF09",disabled:N,onClick:()=>void j(i),children:N&&f===`check:${i.id}`?"\u2026":"\u6D4B"}),(0,p.jsx)("button",{className:"kc-icon-btn",title:"\u590D\u5236\u5B8C\u6574 kubeconfig\uFF08\u542B\u51ED\u636E\uFF09",disabled:N,onClick:()=>void I(i),children:N&&f===`copy:${i.id}`?"\u2026":"\u29C9"}),(0,p.jsx)("button",{className:"kc-icon-btn kc-icon-btn-danger",title:`\u5220\u9664\uFF08${Re(i.size)}\uFF0C\u66F4\u65B0\u4E8E ${be(i.updatedAt)}\uFF09`,disabled:N,onClick:()=>void M(i),children:"\u2715"})]})]},i.id)})]}),(0,p.jsx)("div",{className:"kc-nav-foot",children:(0,p.jsxs)("div",{className:"kc-muted",style:{fontSize:11,lineHeight:1.6},children:["\u6570\u636E\u76EE\u5F55\uFF1A",e.stateInfo?.dataDir??"\u2026",y?.present&&y.version?(0,p.jsxs)("div",{children:["kubectl ",y.version]}):null]})}),s.open?(0,p.jsx)("div",{className:"kc-modal-mask",onMouseDown:i=>{i.target===i.currentTarget&&K()},children:(0,p.jsxs)("div",{className:"kc-modal",children:[(0,p.jsx)("div",{className:"kc-modal-title",children:"\u2795 \u6DFB\u52A0 kubeconfig"}),(0,p.jsxs)("div",{className:"kc-field",children:[(0,p.jsx)("label",{children:"\u540D\u79F0\uFF08\u663E\u793A\u7528\uFF09"}),(0,p.jsx)("input",{value:s.name,onChange:i=>g({name:i.target.value,error:null}),placeholder:"\u4F8B\u5982\uFF1Adevelopment / dev",autoFocus:!0})]}),(0,p.jsxs)("div",{className:"kc-seg",role:"tablist",children:[(0,p.jsx)("button",{type:"button",role:"tab","aria-selected":s.mode==="paste",className:s.mode==="paste"?"kc-seg-active":"",onClick:()=>g({mode:"paste"}),children:"\u{1F4CB} \u7C98\u8D34\u5185\u5BB9"}),(0,p.jsx)("button",{type:"button",role:"tab","aria-selected":s.mode==="path",className:s.mode==="path"?"kc-seg-active":"",onClick:()=>g({mode:"path"}),children:"\u{1F4C1} \u5BFC\u5165\u672C\u673A\u6587\u4EF6"})]}),s.mode==="paste"?(0,p.jsxs)("div",{className:"kc-field",children:[(0,p.jsx)("label",{children:"kubeconfig \u5185\u5BB9\uFF08YAML\uFF09"}),(0,p.jsx)("textarea",{ref:A,className:"kc-code-input",rows:10,value:s.content,onChange:i=>g({content:i.target.value,error:null}),placeholder:`apiVersion: v1
14
14
  kind: Config
15
15
  clusters:
16
16
  - name: "dev"
17
17
  cluster:
18
18
  server: "https://\u2026"
19
- \u2026`,spellCheck:!1})]}):(0,p.jsxs)("div",{className:"kc-field",children:[(0,p.jsx)("label",{children:"\u672C\u673A\u6587\u4EF6\u8DEF\u5F84"}),(0,p.jsx)("input",{value:a.filePath,onChange:s=>b({filePath:s.target.value,error:null}),placeholder:"D:\\Users\\wuzan\\.kube\\configs\\dev.yaml",spellCheck:!1}),(0,p.jsx)("div",{className:"kc-muted",style:{fontSize:11,marginTop:4},children:"\u8BFB\u53D6\u8BE5\u8DEF\u5F84\u7684\u5185\u5BB9\u5E76\u4FDD\u5B58\u526F\u672C\u5230\u63D2\u4EF6\u6570\u636E\u76EE\u5F55\uFF08\u652F\u6301 .yaml/.yml/.config\uFF09\u3002\u4FEE\u6539\u539F\u6587\u4EF6\u4E0D\u4F1A\u540C\u6B65 \u2014\u2014 \u60F3\u7528\u65B0\u7248\u8BF7\u5220\u9664\u540E\u91CD\u65B0\u5BFC\u5165\u3002"})]}),a.error?(0,p.jsx)("div",{className:"kc-form-error",children:a.error}):null,(0,p.jsxs)("div",{className:"kc-modal-actions",children:[(0,p.jsx)("button",{onClick:E,disabled:a.busy,children:"\u53D6\u6D88"}),(0,p.jsx)("button",{className:"kc-btn-primary",onClick:()=>void A(),disabled:a.busy,children:a.busy?"\u4FDD\u5B58\u5E76\u89E3\u6790\u2026":"\u4FDD\u5B58"})]})]})}):null]})}var Z=T("react");var N=T("react");var w=T("react/jsx-runtime"),Oe=800,nt=["get pods -A","get nodes -o wide","get all -n default","logs deploy/xxx -n <ns> --tail=100","describe pod <name> -n <ns>","get events -n <ns> --sort-by=.lastTimestamp"];function ot(e){switch(e){case"timeout":return"\u5DF2\u8D85\u65F6\u88AB\u7EC8\u6B62";case"bytes":return"\u8F93\u51FA\u8D85\u8FC7\u4E0A\u9650\u5DF2\u88AB\u622A\u65AD";case"aborted":return"\u5DF2\u624B\u52A8\u4E2D\u6B62";default:return""}}var Ie=(0,N.forwardRef)(function({kube:t},n){let[o,c]=(0,N.useState)(""),[x,a]=(0,N.useState)(""),[m,u]=(0,N.useState)(""),[f,y]=(0,N.useState)(!1),[$,b]=(0,N.useState)([]),[E,A]=(0,N.useState)(null),[z,I]=(0,N.useState)([]),[D,s]=(0,N.useState)(-1),[C,O]=(0,N.useState)(null),W=(0,N.useRef)(null),k=(0,N.useRef)(null),g=(0,N.useRef)(null),M=(0,N.useRef)(()=>{}),K=(0,N.useCallback)(r=>{b(l=>{let v=[...l,r];return v.length>Oe?v.slice(v.length-Oe):v})},[]);(0,N.useEffect)(()=>{let r=k.current;r&&(r.scrollTop=r.scrollHeight)},[$,f,E]);let J=(0,N.useCallback)(()=>{W.current?.abort()},[]),q=(0,N.useCallback)(async r=>{let l=r.trim();if(!l||f)return;let v=l.split(`
19
+ \u2026`,spellCheck:!1})]}):(0,p.jsxs)("div",{className:"kc-field",children:[(0,p.jsx)("label",{children:"\u672C\u673A\u6587\u4EF6\u8DEF\u5F84"}),(0,p.jsx)("input",{value:s.filePath,onChange:i=>g({filePath:i.target.value,error:null}),placeholder:"D:\\Users\\wuzan\\.kube\\configs\\dev.yaml",spellCheck:!1}),(0,p.jsx)("div",{className:"kc-muted",style:{fontSize:11,marginTop:4},children:"\u8BFB\u53D6\u8BE5\u8DEF\u5F84\u7684\u5185\u5BB9\u5E76\u4FDD\u5B58\u526F\u672C\u5230\u63D2\u4EF6\u6570\u636E\u76EE\u5F55\uFF08\u652F\u6301 .yaml/.yml/.config\uFF09\u3002\u4FEE\u6539\u539F\u6587\u4EF6\u4E0D\u4F1A\u540C\u6B65 \u2014\u2014 \u60F3\u7528\u65B0\u7248\u8BF7\u5220\u9664\u540E\u91CD\u65B0\u5BFC\u5165\u3002"})]}),s.error?(0,p.jsx)("div",{className:"kc-form-error",children:s.error}):null,(0,p.jsxs)("div",{className:"kc-modal-actions",children:[(0,p.jsx)("button",{onClick:K,disabled:s.busy,children:"\u53D6\u6D88"}),(0,p.jsx)("button",{className:"kc-btn-primary",onClick:()=>void z(),disabled:s.busy,children:s.busy?"\u4FDD\u5B58\u5E76\u89E3\u6790\u2026":"\u4FDD\u5B58"})]})]})}):null]})}var G=E("react");var C=E("react");var w=E("react/jsx-runtime"),Oe=800,at=["get pods -A","get nodes -o wide","get all -n default","logs deploy/xxx -n <ns> --tail=100","describe pod <name> -n <ns>","get events -n <ns> --sort-by=.lastTimestamp"];function st(e){switch(e){case"timeout":return"\u5DF2\u8D85\u65F6\u88AB\u7EC8\u6B62";case"bytes":return"\u8F93\u51FA\u8D85\u8FC7\u4E0A\u9650\u5DF2\u88AB\u622A\u65AD";case"aborted":return"\u5DF2\u624B\u52A8\u4E2D\u6B62";default:return""}}var Ie=(0,C.forwardRef)(function({kube:t},o){let[n,a]=(0,C.useState)(""),[k,s]=(0,C.useState)(""),[v,f]=(0,C.useState)(""),[b,y]=(0,C.useState)(!1),[A,g]=(0,C.useState)([]),[K,z]=(0,C.useState)(null),[M,j]=(0,C.useState)([]),[I,i]=(0,C.useState)(-1),[N,O]=(0,C.useState)(null),X=(0,C.useRef)(null),u=(0,C.useRef)(null),m=(0,C.useRef)(null),$=(0,C.useRef)(()=>{}),T=(0,C.useCallback)(r=>{g(l=>{let x=[...l,r];return x.length>Oe?x.slice(x.length-Oe):x})},[]);(0,C.useEffect)(()=>{let r=u.current;r&&(r.scrollTop=r.scrollHeight)},[A,b,K]);let V=(0,C.useCallback)(()=>{X.current?.abort()},[]),_=(0,C.useCallback)(async r=>{let l=r.trim();if(!l||b)return;let x=l.split(`
20
20
  `).filter(S=>S.trim()!==""&&!S.trim().startsWith("#")).join(`
21
- `).trim();if(!v)return;W.current=new AbortController;let j=W.current.signal;y(!0),A(null),s(-1),K({kind:"cmd",text:v}),I(S=>[...S.slice(-99),v]);let qe=S=>{if(S.type==="start")K({kind:"sys",text:`\u25B6 ${String(S.command??`kubectl ${v}`)}`}),O(`\u6B63\u5728\u6267\u884C ${String(S.command??"")} \u2026\uFF08\u53EF\u968F\u65F6\u4E2D\u6B62\uFF09`);else if(S.type==="out"){let ce=S.channel==="stderr"?"stderr":"stdout",ne=typeof S.text=="string"?S.text:"";ne&&K({kind:"out",channel:ce,text:ne})}else if(S.type==="exit"){let ce=typeof S.code=="number"?S.code:null,ne=typeof S.signal=="string"?S.signal:null,_e=typeof S.durationMs=="number"?S.durationMs:0,Ce=S.truncated===!0,le=typeof S.reason=="string"?S.reason:void 0;A({code:ce,signal:ne,durationMs:_e,truncated:Ce,reason:le});let de=ot(le);Ce&&!de&&K({kind:"sys",text:"\u8F93\u51FA\u8D85\u8FC7\u4E0A\u9650\u5DF2\u622A\u65AD",tone:"err"}),de&&K({kind:"sys",text:de,tone:le==="aborted"?"muted":"err"}),O(null)}else S.type==="error"&&(K({kind:"err",text:String(S.message??"\u672A\u77E5\u9519\u8BEF")}),O(null))};try{await B.run({id:t.id,command:v,context:x,namespace:m},qe,j),j.aborted&&(K({kind:"sys",text:"\u5DF2\u4E2D\u6B62",tone:"muted"}),A(S=>S??{code:null,signal:null,durationMs:0,truncated:!1,reason:"aborted"}))}catch(S){j.aborted?K({kind:"sys",text:"\u5DF2\u4E2D\u6B62",tone:"muted"}):K({kind:"err",text:await F(S)}),O(null)}finally{y(!1),W.current=null}},[t.id,f,x,m,K]);M.current=q,(0,N.useImperativeHandle)(n,()=>({runText(r){c(r),g.current?.focus(),window.setTimeout(()=>{let l=M.current;l&&l(r)},0)}}),[]);let G=(0,N.useCallback)(()=>{q(o)},[q,o]),_=(0,N.useCallback)(r=>{if(r.key==="Enter"&&!r.shiftKey&&!r.nativeEvent.isComposing){r.preventDefault(),G();return}if(r.key==="ArrowUp"&&z.length>0){let l=D<0?z.length-1:Math.max(0,D-1);s(l),c(z[l]??""),r.preventDefault()}else if(r.key==="ArrowDown"&&D>=0){if(D>=z.length-1)s(-1),c("");else{let l=D+1;s(l),c(z[l]??"")}r.preventDefault()}},[z,D,G]),se=(0,N.useCallback)(()=>{b([]),A(null)},[]),ie=(0,N.useCallback)(async()=>{let r=$.filter(l=>l.kind==="cmd"||l.kind==="out").map(l=>l.kind==="cmd"?`$ ${l.text}`:l.text).join("");try{await navigator.clipboard.writeText(r),O("\u5DF2\u590D\u5236\u8F93\u51FA"),window.setTimeout(()=>O(null),1500)}catch(l){O(`\u590D\u5236\u5931\u8D25\uFF1A${l instanceof Error?l.message:String(l)}`)}},[$]),i=r=>{let l=[];return r.reason==="aborted"?l.push("\u5DF2\u4E2D\u6B62"):r.code===0?l.push("\u6210\u529F"):r.code!==null&&l.push(`\u9000\u51FA\u7801 ${r.code}`),r.signal&&l.push(`signal ${r.signal}`),l.push(`${(r.durationMs/1e3).toFixed(2)}s`),l.join(" \xB7 ")};return(0,w.jsxs)("div",{className:"kc-console",children:[(0,w.jsxs)("div",{className:"kc-console-toolbar",children:[(0,w.jsxs)("div",{className:"kc-console-env",children:[(0,w.jsxs)("label",{title:"\u5728\u8BE5 kubeconfig \u7684\u54EA\u4E9B context \u4E0A\u6267\u884C\uFF08\u7A7A = \u4F7F\u7528\u6587\u4EF6\u5F53\u524D\u4E0A\u4E0B\u6587\uFF09",children:["context",(0,w.jsxs)("select",{value:x,onChange:r=>a(r.target.value),disabled:f,children:[(0,w.jsx)("option",{value:"",children:t.currentContext?`${t.currentContext}\uFF08\u9ED8\u8BA4\uFF09`:"\uFF08\u9ED8\u8BA4\uFF09"}),t.contextNames.filter(r=>r!==t.currentContext).map(r=>(0,w.jsx)("option",{value:r,children:r},r))]})]}),(0,w.jsxs)("label",{title:"\u7ED9\u547D\u4EE4\u9644\u52A0 -n <namespace>\uFF08\u547D\u4EE4\u91CC\u81EA\u5E26 -n \u65F6\u4EE5\u547D\u4EE4\u91CC\u7684\u4E3A\u51C6\uFF09",children:["namespace",(0,w.jsx)("input",{value:m,onChange:r=>u(r.target.value),placeholder:"default",disabled:f,spellCheck:!1})]})]}),(0,w.jsx)("div",{className:"kc-grow"}),(0,w.jsx)("button",{className:"kc-btn-sm",onClick:se,title:"\u6E05\u7A7A\u8F93\u51FA",children:"\u6E05\u7A7A"}),(0,w.jsx)("button",{className:"kc-btn-sm",onClick:()=>void ie(),title:"\u590D\u5236\u5168\u90E8\u547D\u4EE4\u4E0E\u8F93\u51FA",children:"\u590D\u5236\u8F93\u51FA"}),(0,w.jsx)("button",{className:"kc-btn-sm",onClick:()=>{c(nt.join(`
22
- `)),g.current?.focus()},title:"\u586B\u5165\u5E38\u7528\u793A\u4F8B",children:"\u793A\u4F8B"})]}),(0,w.jsxs)("div",{className:"kc-console-input-row",children:[(0,w.jsx)("textarea",{ref:g,className:"kc-code-input kc-command-input",value:o,onChange:r=>c(r.target.value),onKeyDown:_,placeholder:`kubectl \u547D\u4EE4\uFF08\u53EF\u7701\u7565\u524D\u7F00 kubectl\uFF09
21
+ `).trim();if(!x)return;X.current=new AbortController;let L=X.current.signal;y(!0),z(null),i(-1),T({kind:"cmd",text:x}),j(S=>[...S.slice(-99),x]);let Ye=S=>{if(S.type==="start")T({kind:"sys",text:`\u25B6 ${String(S.command??`kubectl ${x}`)}`}),O(`\u6B63\u5728\u6267\u884C ${String(S.command??"")} \u2026\uFF08\u53EF\u968F\u65F6\u4E2D\u6B62\uFF09`);else if(S.type==="out"){let ie=S.channel==="stderr"?"stderr":"stdout",te=typeof S.text=="string"?S.text:"";te&&T({kind:"out",channel:ie,text:te})}else if(S.type==="exit"){let ie=typeof S.code=="number"?S.code:null,te=typeof S.signal=="string"?S.signal:null,Ue=typeof S.durationMs=="number"?S.durationMs:0,ve=S.truncated===!0,ce=typeof S.reason=="string"?S.reason:void 0;z({code:ie,signal:te,durationMs:Ue,truncated:ve,reason:ce});let le=st(ce);ve&&!le&&T({kind:"sys",text:"\u8F93\u51FA\u8D85\u8FC7\u4E0A\u9650\u5DF2\u622A\u65AD",tone:"err"}),le&&T({kind:"sys",text:le,tone:ce==="aborted"?"muted":"err"}),O(null)}else S.type==="error"&&(T({kind:"err",text:String(S.message??"\u672A\u77E5\u9519\u8BEF")}),O(null))};try{await B.run({id:t.id,command:x,context:k,namespace:v},Ye,L),L.aborted&&(T({kind:"sys",text:"\u5DF2\u4E2D\u6B62",tone:"muted"}),z(S=>S??{code:null,signal:null,durationMs:0,truncated:!1,reason:"aborted"}))}catch(S){L.aborted?T({kind:"sys",text:"\u5DF2\u4E2D\u6B62",tone:"muted"}):T({kind:"err",text:await W(S)}),O(null)}finally{y(!1),X.current=null}},[t.id,b,k,v,T]);$.current=_,(0,C.useImperativeHandle)(o,()=>({runText(r){a(r),m.current?.focus(),window.setTimeout(()=>{let l=$.current;l&&l(r)},0)}}),[]);let Y=(0,C.useCallback)(()=>{_(n)},[_,n]),q=(0,C.useCallback)(r=>{if(r.key==="Enter"&&!r.shiftKey&&!r.nativeEvent.isComposing){r.preventDefault(),Y();return}if(r.key==="ArrowUp"&&M.length>0){let l=I<0?M.length-1:Math.max(0,I-1);i(l),a(M[l]??""),r.preventDefault()}else if(r.key==="ArrowDown"&&I>=0){if(I>=M.length-1)i(-1),a("");else{let l=I+1;i(l),a(M[l]??"")}r.preventDefault()}},[M,I,Y]),ae=(0,C.useCallback)(()=>{g([]),z(null)},[]),se=(0,C.useCallback)(async()=>{let r=A.filter(l=>l.kind==="cmd"||l.kind==="out").map(l=>l.kind==="cmd"?`$ ${l.text}`:l.text).join("");try{await navigator.clipboard.writeText(r),O("\u5DF2\u590D\u5236\u8F93\u51FA"),window.setTimeout(()=>O(null),1500)}catch(l){O(`\u590D\u5236\u5931\u8D25\uFF1A${l instanceof Error?l.message:String(l)}`)}},[A]),c=r=>{let l=[];return r.reason==="aborted"?l.push("\u5DF2\u4E2D\u6B62"):r.code===0?l.push("\u6210\u529F"):r.code!==null&&l.push(`\u9000\u51FA\u7801 ${r.code}`),r.signal&&l.push(`signal ${r.signal}`),l.push(`${(r.durationMs/1e3).toFixed(2)}s`),l.join(" \xB7 ")};return(0,w.jsxs)("div",{className:"kc-console",children:[(0,w.jsxs)("div",{className:"kc-console-toolbar",children:[(0,w.jsxs)("div",{className:"kc-console-env",children:[(0,w.jsxs)("label",{title:"\u5728\u8BE5 kubeconfig \u7684\u54EA\u4E9B context \u4E0A\u6267\u884C\uFF08\u7A7A = \u4F7F\u7528\u6587\u4EF6\u5F53\u524D\u4E0A\u4E0B\u6587\uFF09",children:["context",(0,w.jsxs)("select",{value:k,onChange:r=>s(r.target.value),disabled:b,children:[(0,w.jsx)("option",{value:"",children:t.currentContext?`${t.currentContext}\uFF08\u9ED8\u8BA4\uFF09`:"\uFF08\u9ED8\u8BA4\uFF09"}),t.contextNames.filter(r=>r!==t.currentContext).map(r=>(0,w.jsx)("option",{value:r,children:r},r))]})]}),(0,w.jsxs)("label",{title:"\u7ED9\u547D\u4EE4\u9644\u52A0 -n <namespace>\uFF08\u547D\u4EE4\u91CC\u81EA\u5E26 -n \u65F6\u4EE5\u547D\u4EE4\u91CC\u7684\u4E3A\u51C6\uFF09",children:["namespace",(0,w.jsx)("input",{value:v,onChange:r=>f(r.target.value),placeholder:"default",disabled:b,spellCheck:!1})]})]}),(0,w.jsx)("div",{className:"kc-grow"}),(0,w.jsx)("button",{className:"kc-btn-sm",onClick:ae,title:"\u6E05\u7A7A\u8F93\u51FA",children:"\u6E05\u7A7A"}),(0,w.jsx)("button",{className:"kc-btn-sm",onClick:()=>void se(),title:"\u590D\u5236\u5168\u90E8\u547D\u4EE4\u4E0E\u8F93\u51FA",children:"\u590D\u5236\u8F93\u51FA"}),(0,w.jsx)("button",{className:"kc-btn-sm",onClick:()=>{a(at.join(`
22
+ `)),m.current?.focus()},title:"\u586B\u5165\u5E38\u7528\u793A\u4F8B",children:"\u793A\u4F8B"})]}),(0,w.jsxs)("div",{className:"kc-console-input-row",children:[(0,w.jsx)("textarea",{ref:m,className:"kc-code-input kc-command-input",value:n,onChange:r=>a(r.target.value),onKeyDown:q,placeholder:`kubectl \u547D\u4EE4\uFF08\u53EF\u7701\u7565\u524D\u7F00 kubectl\uFF09
23
23
  \u4F8B\u5982\uFF1Aget pods -A
24
24
 
25
- Enter \u6267\u884C \xB7 Shift+Enter \u6362\u884C \xB7 \u2191/\u2193 \u5386\u53F2 \xB7 \u975E\u4EA4\u4E92\uFF08logs -f \u7B49\u957F\u547D\u4EE4\u8BF7\u7528\u4E2D\u6B62\u6309\u94AE\uFF09`,spellCheck:!1,rows:3}),f?(0,w.jsx)("button",{className:"kc-btn-primary kc-btn-stop",onClick:J,title:"\u4E2D\u6B62\u5F53\u524D\u547D\u4EE4",children:"\u25A0 \u4E2D\u6B62"}):(0,w.jsx)("button",{className:"kc-btn-primary",onClick:G,disabled:o.trim()==="",title:"\u6267\u884C\uFF08Ctrl+Enter \u4EA6\u53EF\uFF09",children:"\u25B6 \u6267\u884C"})]}),C?(0,w.jsx)("div",{className:"kc-console-status",children:C}):null,(0,w.jsx)("div",{className:"kc-output",ref:k,children:$.length===0?(0,w.jsx)("div",{className:"kc-output-empty",children:(0,w.jsxs)("div",{className:"kc-muted",children:["\u8F93\u5165\u547D\u4EE4\u5F00\u59CB\uFF08",t.name,x?` \xB7 --context ${x}`:"",m?` \xB7 -n ${m}`:"","\uFF09\u3002",(0,w.jsx)("br",{}),"\u53EA\u8BFB\u5EFA\u8BAE\uFF1Aget / describe / logs / top / explain\u3002\u7834\u574F\u6027\u547D\u4EE4\u8BF7\u81EA\u884C\u786E\u8BA4\u5F71\u54CD\u3002"]})}):$.map((r,l)=>r.kind==="cmd"?(0,w.jsxs)("div",{className:"kc-out-line kc-out-cmd",children:[(0,w.jsx)("span",{className:"kc-out-prompt",children:"$"})," ",r.text]},l):r.kind==="out"?(0,w.jsx)("pre",{className:`kc-out-line kc-out-${r.channel}${r.text.endsWith(`
26
- `),""}`,children:r.text},l):r.kind==="err"?(0,w.jsxs)("div",{className:"kc-out-line kc-out-err",children:["\u2715 ",r.text]},l):(0,w.jsx)("div",{className:`kc-out-line kc-out-sys${r.tone==="err"?" kc-out-err":""}${r.tone==="muted"?" kc-out-muted":""}`,children:r.text},l))}),E?(0,w.jsxs)("div",{className:`kc-exitbar${E.reason==="aborted"?" kc-exitbar-muted":E.code===0?"":" kc-exitbar-err"}`,children:[E.reason==="aborted"?"\u23F9 ":E.code===0?"\u2713 ":"\u2715 ",i(E),E.truncated?" \xB7 \u26A0\uFE0F \u8F93\u51FA\u88AB\u622A\u65AD":"",f?" \xB7 \u8FD0\u884C\u4E2D":""]}):null]})});var P=T("react");var d=T("react/jsx-runtime"),De=0,rt=()=>(De+=1,De);function at(e){let t=/```(?:bash|sh|shell|kubectl|console)?\s*\n([\s\S]*?)```/g,n;for(;(n=t.exec(e))!==null;){let o=n[1]??"",c=he(o);if(c)return c}return he(e)}function he(e){for(let t of e.split(`
27
- `)){let n=t.replace(/^\s*[$>]\s*/,"").trim();if(!(!n||n.startsWith("#"))&&/^kubectl\b/u.test(n))return n}return null}function st(e){let t=[],n=/```([\w+-]*)\s*\n([\s\S]*?)```/g,o=0,c;for(;(c=n.exec(e))!==null;)c.index>o&&t.push({kind:"text",text:e.slice(o,c.index)}),t.push({kind:"code",lang:c[1]||void 0,text:c[2]??""}),o=n.lastIndex;return o<e.length&&t.push({kind:"text",text:e.slice(o)}),t}function He({kube:e,onRunCommand:t}){let[n,o]=(0,P.useState)([]),[c,x]=(0,P.useState)(""),[a,m]=(0,P.useState)(!1),[u,f]=(0,P.useState)(null),[y,$]=(0,P.useState)(!1),[b,E]=(0,P.useState)(""),[A,z]=(0,P.useState)(null),I=(0,P.useRef)(null),D=(0,P.useRef)(null),s=(0,P.useRef)(null),C=(0,P.useCallback)(async()=>{$(!0);try{f(await B.aiModels())}catch(i){f(null),z(`\u6A21\u578B\u679A\u4E3E\u5931\u8D25\uFF1A${await F(i)}`)}finally{$(!1)}},[]);(0,P.useEffect)(()=>{C()},[C]);let O=(0,P.useMemo)(()=>u?Me(u):[],[u]),W=(0,P.useMemo)(()=>O.find(i=>i.key===b),[O,b]);(0,P.useEffect)(()=>{let i=D.current;i&&(i.scrollTop=i.scrollHeight)},[n]);let k=(0,P.useCallback)(i=>{o(r=>[...r,{...i,key:rt()}])},[]),g=(0,P.useCallback)(i=>{o(r=>{if(r.length===0)return r;let l=r[r.length-1];if(l.role!=="assistant")return r;let v={...l,...i};i.content&&typeof i.content=="string"&&(v.content=l.content+i.content);let j=[...r];return j[j.length-1]=v,j})},[]),M=(0,P.useCallback)(()=>{I.current?.abort()},[]),K=(0,P.useCallback)(async()=>{let i=c.trim();if(!i||a)return;x(""),z(null);let r=n.filter(v=>v.role==="user"||v.state==="done").map(v=>({role:v.role,content:v.content}));r.push({role:"user",content:i}),k({role:"user",content:i}),k({role:"assistant",content:"",state:"streaming"}),m(!0),I.current=new AbortController;let l=I.current.signal;try{await B.chat({id:e.id,provider:W?.provider,model:W?.model,history:r.slice(-40)},v=>{v.type==="delta"&&typeof v.text=="string"?g({content:v.text}):v.type==="done"?g({state:"done",meta:{...typeof v.provider=="string"?{provider:v.provider}:{},...typeof v.model=="string"?{model:v.model}:{}}}):v.type==="aborted"?g({state:"done"}):v.type==="error"&&g({state:"error",content:`\u26A0\uFE0F ${String(v.message??"AI \u51FA\u9519")}`})},l)}catch(v){if(l.aborted)g({state:"done"});else{let j=await F(v);g({state:"error",content:`\u26A0\uFE0F ${j}`})}}finally{m(!1),I.current=null}},[c,a,n,W,e.id,k,g]),J=(0,P.useCallback)(i=>{i.key==="Enter"&&!i.shiftKey&&!i.nativeEvent.isComposing&&(i.preventDefault(),K())},[K]),q=(0,P.useCallback)(()=>{a&&M(),o([]),z(null)},[a,M]),G=[...n].reverse().find(i=>i.role==="assistant"&&i.state==="done"),_=G?at(G.content):null,se=(0,P.useCallback)(async i=>{try{await navigator.clipboard.writeText(i)}catch{}},[]),ie=i=>{if(i.role==="user")return(0,d.jsx)("div",{className:"kc-chat-user-text",children:i.content});if(i.state==="error")return(0,d.jsx)("div",{className:"kc-chat-error-text",children:i.content});let r=st(i.content);return(0,d.jsxs)("div",{className:"kc-chat-ai-text",children:[r.length===0?i.state==="streaming"?(0,d.jsx)("span",{className:"kc-chat-cursor",children:"\u258D"}):(0,d.jsx)("span",{className:"kc-muted",children:"\uFF08\u7A7A\u56DE\u590D\uFF09"}):r.map((l,v)=>{if(l.kind==="text")return(0,d.jsx)("span",{className:"kc-chat-text-span",children:l.text},v);let j=l.lang===void 0||/^(bash|sh|shell|kubectl|console)$/u.test(l.lang)?he(l.text):null;return(0,d.jsxs)("div",{className:"kc-codebox",children:[(0,d.jsxs)("div",{className:"kc-codebox-head",children:[(0,d.jsx)("span",{className:"kc-codebox-lang",children:l.lang||"code"}),(0,d.jsx)("span",{className:"kc-grow"}),(0,d.jsx)("button",{className:"kc-btn-sm",onClick:()=>void se(l.text),children:"\u590D\u5236"}),j?(0,d.jsx)("button",{className:"kc-btn-sm",onClick:()=>t(j),title:`\u53D1\u9001\u5230\u547D\u4EE4\u63A7\u5236\u53F0\u6267\u884C\uFF1A${j}`,children:"\u25B6 \u8FD0\u884C"}):null]}),(0,d.jsx)("pre",{className:"kc-codebox-body",children:l.text})]},v)}),i.state==="streaming"&&r.length>0?(0,d.jsx)("span",{className:"kc-chat-cursor",children:"\u258D"}):null]})};return(0,d.jsxs)("div",{className:"kc-chat",children:[(0,d.jsxs)("div",{className:"kc-chat-toolbar",children:[(0,d.jsxs)("label",{title:"\u590D\u7528 DSH \u5DF2\u914D\u7F6E\u7684\u6A21\u578B\uFF1B\u7A7A = \u8BA9 DSH \u81EA\u52A8\u9009\u62E9",children:["AI \u6A21\u578B",(0,d.jsxs)("select",{value:b,onChange:i=>E(i.target.value),disabled:a||y,children:[(0,d.jsx)("option",{value:"",children:"\u81EA\u52A8\uFF08\u7531 DSH \u9009\u62E9\uFF09"}),O.map(i=>(0,d.jsx)("option",{value:i.key,children:i.label??i.key},i.key))]})]}),(0,d.jsx)("button",{className:"kc-btn-sm",onClick:()=>void C(),disabled:y,title:"\u91CD\u65B0\u679A\u4E3E DSH \u6A21\u578B",children:"\u21BB \u6A21\u578B"}),(0,d.jsx)("button",{className:"kc-btn-sm",onClick:q,disabled:n.length===0&&!a,title:"\u6E05\u7A7A\u672C\u4F1A\u8BDD\u5BF9\u8BDD",children:"\u6E05\u7A7A\u5BF9\u8BDD"}),(0,d.jsx)("span",{className:"kc-grow"}),(0,d.jsxs)("span",{className:"kc-chat-cluster",title:"AI \u7CFB\u7EDF\u63D0\u793A\u4E2D\u4F1A\u643A\u5E26\u8BE5\u96C6\u7FA4\u4FE1\u606F",children:["\u2388 ",e.name," \xB7 ",e.currentContext??"",e.server?` \xB7 ${e.server.replace(/^https?:\/\//u,"")}`:""]})]}),u&&!u.ok?(0,d.jsxs)("div",{className:"kc-chat-warn",children:["\u26A0\uFE0F ",u.message??"\u6CA1\u6709\u53EF\u7528\u6A21\u578B","\uFF08\u914D\u7F6E\u597D\u540E\u70B9\u201C\u21BB \u6A21\u578B\u201D\u5237\u65B0\uFF09"]}):null,A?(0,d.jsxs)("div",{className:"kc-chat-warn",children:["\u26A0\uFE0F ",A]}):null,(0,d.jsxs)("div",{className:"kc-chat-scroll",ref:D,children:[n.length===0?(0,d.jsx)("div",{className:"kc-chat-empty",children:(0,d.jsxs)("div",{className:"kc-muted",style:{maxWidth:460},children:["\u9488\u5BF9\u5F53\u524D\u96C6\u7FA4\uFF08",e.name,"\uFF09\u63D0\u95EE\uFF0C\u4F8B\u5982\uFF1A",(0,d.jsx)("br",{}),"\xB7 \u201C\u67E5\u770B default \u547D\u540D\u7A7A\u95F4\u4E0B\u6240\u6709 deployment \u53CA\u5176\u72B6\u6001\u201D",(0,d.jsx)("br",{}),"\xB7 \u201C\u627E\u51FA ImagePullBackOff \u7684 pod\uFF0C\u5E76\u89E3\u91CA\u600E\u4E48\u6392\u67E5\u201D",(0,d.jsx)("br",{}),"\xB7 \u201C\u751F\u6210\u628A myapp \u7F29\u5230 2 \u526F\u672C\u7684\u547D\u4EE4\u201D",(0,d.jsx)("br",{}),"\xB7 \u201C\u7C98\u8D34\u4E00\u6761 kubectl \u62A5\u9519\uFF0C\u5E2E\u6211\u89E3\u91CA\u539F\u56E0\u201D",(0,d.jsx)("br",{}),(0,d.jsx)("br",{}),"AI \u751F\u6210\u7684\u53EF\u6267\u884C\u547D\u4EE4\u4F1A\u5728\u4EE3\u7801\u5757\u4E0B\u65B9\u63D0\u4F9B ",(0,d.jsx)("b",{children:"\u25B6 \u8FD0\u884C"}),"\uFF0C\u70B9\u51FB\u540E\u5207\u5230\u547D\u4EE4\u63A7\u5236\u53F0\u76F4\u63A5\u6267\u884C\u3002"]})}):n.map(i=>(0,d.jsxs)("div",{className:`kc-chat-row kc-chat-${i.role}`,children:[(0,d.jsx)("div",{className:"kc-chat-avatar",children:i.role==="user"?"\u{1F9D1}":"\u{1F916}"}),(0,d.jsxs)("div",{className:"kc-chat-bubble",children:[ie(i),i.state==="done"&&i.meta&&(i.meta.provider||i.meta.model)?(0,d.jsxs)("div",{className:"kc-chat-meta",children:[i.meta.provider,"/",i.meta.model]}):null]})]},i.key)),_&&!a?(0,d.jsxs)("div",{className:"kc-chat-quickrun",children:["\u{1F4A1} \u53EF\u7528\u547D\u4EE4\uFF1A",(0,d.jsx)("code",{children:_}),(0,d.jsx)("button",{className:"kc-btn-sm",onClick:()=>t(_),children:"\u25B6 \u53D1\u9001\u5230\u63A7\u5236\u53F0\u6267\u884C"})]}):null]}),(0,d.jsxs)("div",{className:"kc-chat-input-row",children:[(0,d.jsx)("textarea",{ref:s,className:"kc-code-input kc-chat-input",value:c,onChange:i=>x(i.target.value),onKeyDown:J,placeholder:"\u95EE AI\uFF1A\u751F\u6210 kubectl \u547D\u4EE4 / \u89E3\u91CA\u8F93\u51FA / \u6392\u67E5\u62A5\u9519\u2026\uFF08Enter \u53D1\u9001\uFF0CShift+Enter \u6362\u884C\uFF09",spellCheck:!1,rows:2}),a?(0,d.jsx)("button",{className:"kc-btn-primary kc-btn-stop",onClick:M,children:"\u25A0 \u505C\u6B62"}):(0,d.jsx)("button",{className:"kc-btn-primary",onClick:()=>void K(),disabled:c.trim()==="",children:"\u53D1\u9001"})]})]})}var H=T("react/jsx-runtime");function Le({kube:e}){let[t,n]=(0,Z.useState)("console"),[o,c]=(0,Z.useState)({console:!0,chat:!1}),x=(0,Z.useRef)(null),a=(0,Z.useCallback)(f=>{n(f),c(y=>y[f]?y:{...y,[f]:!0})},[]),m=(0,Z.useCallback)(f=>{a("console"),window.setTimeout(()=>{x.current?.runText(f)},0)},[a]),u=(f,y,$)=>(0,H.jsx)("button",{type:"button",role:"tab","aria-selected":t===f,title:$,className:t===f?"kc-seg-active":"",onClick:()=>a(f),children:y});return(0,H.jsxs)("div",{className:"kc-workspace",children:[(0,H.jsxs)("div",{className:"kc-ws-meta",children:[(0,H.jsxs)("span",{className:"kc-ws-meta-name",title:`kubeconfig \u6587\u4EF6\uFF1A${e.fileName}`,children:["\u2388 ",e.name]}),(0,H.jsx)("span",{className:"kc-ws-meta-chip",title:"\u5F53\u524D\u4E0A\u4E0B\u6587",children:e.currentContext??e.contextNames.join(", ")??"\uFF08\u65E0\uFF09"}),e.server?(0,H.jsx)("span",{className:"kc-ws-meta-chip kc-ws-meta-server",title:"API server",children:e.server}):null,(0,H.jsx)("span",{className:"kc-grow"}),(0,H.jsxs)("div",{className:"kc-seg",role:"tablist","aria-label":"\u4F1A\u8BDD\u5B50\u9875",children:[u("console","\u2328\uFE0F \u547D\u4EE4\u63A7\u5236\u53F0","\u76F4\u63A5\u6267\u884C kubectl \u547D\u4EE4\uFF08\u4F7F\u7528\u672C\u4F1A\u8BDD\u9009\u62E9\u7684 context / namespace\uFF09"),u("chat","\u{1F4AC} AI \u5BF9\u8BDD","\u591A\u8F6E\u5BF9\u8BDD\uFF1A\u751F\u6210 kubectl \u547D\u4EE4 / \u89E3\u91CA\u8F93\u51FA\u7ED3\u679C\uFF1B\u6A21\u578B\u8DDF\u968F DSH \u914D\u7F6E")]})]}),(0,H.jsxs)("div",{className:"kc-ws-body",children:[o.console?(0,H.jsx)("div",{className:"kc-ws-pane","data-active":t==="console"?"true":void 0,style:t==="console"?void 0:{display:"none"},children:(0,H.jsx)(Ie,{ref:x,kube:e})}):null,o.chat?(0,H.jsx)("div",{className:"kc-ws-pane","data-active":t==="chat"?"true":void 0,style:t==="chat"?void 0:{display:"none"},children:(0,H.jsx)(He,{kube:e,onRunCommand:m})}):null]})]})}var h=T("react/jsx-runtime"),je=0;function it(){return je+=1,`session_${Date.now().toString(36)}_${je}`}function ye(e={}){let[t,n]=(0,R.useState)([]),[o,c]=(0,R.useState)(null),[x,a]=(0,R.useState)(!1),[m,u]=(0,R.useState)(null),[f,y]=(0,R.useState)(null),$=(0,R.useRef)(!0),[b,E]=(0,R.useState)([]),[A,z]=(0,R.useState)(null),I=(0,R.useCallback)((k,g)=>{y({kind:k,text:g}),window.setTimeout(()=>y(M=>M?.text===g?null:M),k==="error"?6e3:2600)},[]),D=(0,R.useCallback)(async()=>{a(!0);try{let[k,{kubeconfigs:g}]=await Promise.all([B.state(!0),B.kubeconfigs()]);c(k),n(g),u(null)}catch(k){let g=await F(k);u(`\u65E0\u6CD5\u8FDE\u63A5\u63D2\u4EF6\u670D\u52A1\uFF1A${g}\u3002\u8BF7\u786E\u8BA4\u5DF2\u5728 DSH \u4E2D\u5B89\u88C5\u5E76\u542F\u7528 dsh-plugin-k8s\uFF08\u91CD\u542F dsh web \u540E\u751F\u6548\uFF09\u3002`),I("error",`\u52A0\u8F7D\u5931\u8D25\uFF1A${g}`)}finally{a(!1)}},[I]);(0,R.useEffect)(()=>{$.current&&($.current=!1,D())},[D]),(0,R.useEffect)(()=>{let k=new Set(t.map(g=>g.id));E(g=>{let M=g.filter(K=>k.has(K.kube.id));return M.length===g.length?g:M})},[t]),(0,R.useEffect)(()=>{A!==null&&!b.some(k=>k.key===A)&&z(b.length>0?b[b.length-1].key:null)},[b,A]);let s=(0,R.useCallback)(k=>{let g={key:it(),kube:k};E(M=>[...M,g]),z(g.key)},[]),C=(0,R.useCallback)(k=>{let g=b.findIndex(J=>J.key===k);if(E(J=>J.filter(q=>q.key!==k)),A!==k)return;let M=g>=0?b[g+1]:void 0,K=g>=0?b[g-1]:void 0;z((M??K)?.key??null)},[b,A]),O=(k,g)=>{let M=b.slice(0,g+1).filter(_=>_.kube.id===k.kube.id).length,K=b.filter(_=>_.kube.id===k.kube.id).length,J=k.kube.name,q=K>1?`${J} #${M}`:J,G=k.kube.currentContext?` \xB7 ${k.kube.currentContext}`:"";return{title:q,sub:`${k.kube.name}${G} \u2014 \u4F1A\u8BDD ${M}`}},W=k=>(0,h.jsx)(Le,{kube:k.kube},k.key);return(0,h.jsxs)("div",{className:"kc-app",children:[(0,h.jsxs)("div",{className:"kc-topbar",children:[(0,h.jsxs)("div",{className:"kc-title",children:[(0,h.jsx)("span",{className:"kc-logo",children:"K8s"})," K8s \u63A7\u5236\u53F0",(0,h.jsx)("span",{className:"kc-badge",children:"dsh-plugin-k8s"}),o?.kubectl.version?(0,h.jsxs)("span",{className:"kc-badge kc-badge-ok",children:["kubectl ",o.kubectl.version]}):null,o&&!o.kubectl.present?(0,h.jsx)("span",{className:"kc-badge kc-badge-bad",title:o.kubectl.missingReason,children:"kubectl \u672A\u627E\u5230"}):null]}),(0,h.jsx)("div",{className:"kc-grow"}),f?(0,h.jsx)("span",{className:`kc-notice kc-notice-${f.kind}`,title:f.text,children:f.text}):null,x?(0,h.jsx)("span",{className:"kc-muted",children:"\u2026"}):null,e.onClose?(0,h.jsx)("button",{onClick:e.onClose,title:"\u5173\u95ED\u9762\u677F\uFF0C\u56DE\u5230\u5BF9\u8BDD",children:e.standalone?"\u2715 \u5173\u95ED":"\u2715 \u56DE\u5230\u5BF9\u8BDD"}):null]}),m?(0,h.jsx)("div",{className:"kc-fatal",children:(0,h.jsxs)("div",{className:"kc-fatal-box",children:[(0,h.jsx)("div",{className:"kc-fatal-title",children:"\u26A0\uFE0F K8s \u63A7\u5236\u53F0\u6682\u65F6\u4E0D\u53EF\u7528"}),(0,h.jsx)("div",{className:"kc-fatal-text",children:m}),(0,h.jsx)("button",{onClick:()=>{u(null),D()},children:"\u91CD\u8BD5"})]})}):(0,h.jsxs)("div",{className:"kc-app-body",children:[(0,h.jsx)(Re,{kubeconfigs:t,busyList:x,refresh:D,onOpenSession:s,onFlash:I,stateInfo:o}),(0,h.jsxs)("div",{className:"kc-main",children:[(0,h.jsxs)("div",{className:"kc-tabbar",role:"tablist","aria-label":"\u5DF2\u6253\u5F00\u7684\u96C6\u7FA4\u4F1A\u8BDD",children:[b.length===0?(0,h.jsx)("span",{className:"kc-muted",style:{padding:"0 10px",whiteSpace:"nowrap"},children:"\u70B9\u51FB\u5DE6\u4FA7 kubeconfig \u65B0\u5EFA\u4F1A\u8BDD\uFF08\u540C\u4E00\u96C6\u7FA4\u53EF\u5F00\u591A\u4E2A\u72EC\u7ACB\u4F1A\u8BDD\uFF09\u3002"}):null,b.map((k,g)=>{let{title:M,sub:K}=O(k,g);return(0,h.jsxs)("div",{role:"tab","aria-selected":k.key===A,className:`kc-tab${k.key===A?" kc-tab-active":""}`,title:`${K} \u2014\u2014 \u70B9\u51FB\u5207\u6362\uFF0C\u2715 \u5173\u95ED`,onClick:()=>z(k.key),children:[(0,h.jsx)("span",{className:"kc-tab-icon",children:"\u2388"}),(0,h.jsx)("span",{className:"kc-tab-label",children:M}),(0,h.jsx)("span",{className:"kc-tab-close",title:"\u5173\u95ED",onClick:J=>{J.stopPropagation(),C(k.key)},children:"\u2715"})]},k.key)})]}),(0,h.jsx)("div",{className:"kc-tabpanes",children:b.length===0?(0,h.jsxs)("div",{className:"kc-empty",style:{flex:1},children:[(0,h.jsx)("div",{style:{fontSize:30,opacity:.5},children:"\u2388"}),(0,h.jsx)("div",{children:"\u8FD8\u6CA1\u6709\u6253\u5F00\u4EFB\u4F55\u96C6\u7FA4\u4F1A\u8BDD\u3002"}),(0,h.jsxs)("div",{style:{marginTop:6,fontSize:12},className:"kc-muted",children:["\u5DE6\u4FA7\u70B9\u51FB kubeconfig \u5373\u53EF\u65B0\u5EFA\u4F1A\u8BDD Tab\uFF08\u91CD\u590D\u70B9\u51FB\u540C\u4E00\u96C6\u7FA4\u4F1A\u518D\u5F00\u4E00\u4E2A\u72EC\u7ACB\u4F1A\u8BDD\uFF09\uFF1B",(0,h.jsx)("br",{}),"\u6BCF\u4E2A\u4F1A\u8BDD\u5185\u542B\u300C\u2328\uFE0F \u547D\u4EE4\u63A7\u5236\u53F0\u300D\u4E0E\u300C\u{1F4AC} AI \u5BF9\u8BDD\u300D\u4E24\u4E2A\u5B50\u9875\uFF0C\u5404\u81EA\u72EC\u7ACB\u4FDD\u6301\u72B6\u6001\u3002"]})]}):b.map(k=>(0,h.jsx)("div",{role:"tabpanel",className:"kc-pane","data-active":k.key===A?"true":void 0,style:k.key===A?void 0:{display:"none"},children:W(k)},k.key))})]})]})]})}var we=T("react/jsx-runtime");function Be(e){let[t,n]=(0,U.useState)({left:0,right:0}),o=(0,U.useRef)(null),c=(0,U.useRef)(e.onClose);c.current=e.onClose;let x=!e.hidden;return(0,U.useLayoutEffect)(()=>{if(typeof document>"u")return;let a=null,m=null,u=0,f=()=>{u===0&&(u=requestAnimationFrame(()=>{u=0,$()}))},y=()=>{(a===null||!a.isConnected)&&(a=document.querySelector('[class*="sidebarCol"]'),a!==null&&b.observe(a)),(m===null||!m.isConnected)&&(m=document.querySelector('[class*="detailsCol"]'),m!==null&&b.observe(m))},$=()=>{y();let A=a!==null?a.getBoundingClientRect().width:0,z=m!==null?m.getBoundingClientRect().width:0;n(I=>Math.abs(I.left-A)<.5&&Math.abs(I.right-z)<.5?I:{left:Math.max(0,A),right:Math.max(0,z)})},b=new ResizeObserver(f);$();let E=o.current?.closest('[class*="frame"]')??o.current?.parentElement;return E!=null&&b.observe(E),window.addEventListener("resize",f),()=>{window.removeEventListener("resize",f),b.disconnect(),u!==0&&cancelAnimationFrame(u)}},[]),(0,U.useEffect)(()=>{if(!x||e.standalone)return;let a=m=>{if(!(m.target instanceof Element))return;let u=o.current;u!==null&&(u.contains(m.target)||m.target.closest('[role="dialog"], [role="menu"], [role="listbox"]')||m.target.closest('[data-d-sh-plugin="k8s-console"]')||c.current())};return document.addEventListener("pointerdown",a,!0),()=>document.removeEventListener("pointerdown",a,!0)},[x,e.standalone]),(0,we.jsx)("div",{id:"dsh-k8s-console",ref:o,"data-hidden":e.hidden?"true":void 0,style:{position:"absolute",left:Math.max(0,Math.round(t.left)),top:0,right:Math.max(0,Math.round(t.right)),bottom:0,background:"var(--kc-bg)",display:e.hidden?"none":"flex",flexDirection:"column",overflow:"hidden",zIndex:1},children:(0,we.jsx)(ye,{onClose:e.onClose,standalone:e.standalone})})}var Je=`/* dsh-plugin-k8s \u5BA2\u6237\u7AEF\u6837\u5F0F\uFF08\u6697\u8272\u4E3B\u9898\uFF0C\u96F6\u5916\u90E8\u4F9D\u8D56\uFF0C\u5168\u90E8\u9650\u5B9A\u5728 #dsh-k8s-console\uFF09 */
25
+ Enter \u6267\u884C \xB7 Shift+Enter \u6362\u884C \xB7 \u2191/\u2193 \u5386\u53F2 \xB7 \u975E\u4EA4\u4E92\uFF08logs -f \u7B49\u957F\u547D\u4EE4\u8BF7\u7528\u4E2D\u6B62\u6309\u94AE\uFF09`,spellCheck:!1,rows:3}),b?(0,w.jsx)("button",{className:"kc-btn-primary kc-btn-stop",onClick:V,title:"\u4E2D\u6B62\u5F53\u524D\u547D\u4EE4",children:"\u25A0 \u4E2D\u6B62"}):(0,w.jsx)("button",{className:"kc-btn-primary",onClick:Y,disabled:n.trim()==="",title:"\u6267\u884C\uFF08Ctrl+Enter \u4EA6\u53EF\uFF09",children:"\u25B6 \u6267\u884C"})]}),N?(0,w.jsx)("div",{className:"kc-console-status",children:N}):null,(0,w.jsx)("div",{className:"kc-output",ref:u,children:A.length===0?(0,w.jsx)("div",{className:"kc-output-empty",children:(0,w.jsxs)("div",{className:"kc-muted",children:["\u8F93\u5165\u547D\u4EE4\u5F00\u59CB\uFF08",t.name,k?` \xB7 --context ${k}`:"",v?` \xB7 -n ${v}`:"","\uFF09\u3002",(0,w.jsx)("br",{}),"\u53EA\u8BFB\u5EFA\u8BAE\uFF1Aget / describe / logs / top / explain\u3002\u7834\u574F\u6027\u547D\u4EE4\u8BF7\u81EA\u884C\u786E\u8BA4\u5F71\u54CD\u3002"]})}):A.map((r,l)=>r.kind==="cmd"?(0,w.jsxs)("div",{className:"kc-out-line kc-out-cmd",children:[(0,w.jsx)("span",{className:"kc-out-prompt",children:"$"})," ",r.text]},l):r.kind==="out"?(0,w.jsx)("pre",{className:`kc-out-line kc-out-${r.channel}${r.text.endsWith(`
26
+ `),""}`,children:r.text},l):r.kind==="err"?(0,w.jsxs)("div",{className:"kc-out-line kc-out-err",children:["\u2715 ",r.text]},l):(0,w.jsx)("div",{className:`kc-out-line kc-out-sys${r.tone==="err"?" kc-out-err":""}${r.tone==="muted"?" kc-out-muted":""}`,children:r.text},l))}),K?(0,w.jsxs)("div",{className:`kc-exitbar${K.reason==="aborted"?" kc-exitbar-muted":K.code===0?"":" kc-exitbar-err"}`,children:[K.reason==="aborted"?"\u23F9 ":K.code===0?"\u2713 ":"\u2715 ",c(K),K.truncated?" \xB7 \u26A0\uFE0F \u8F93\u51FA\u88AB\u622A\u65AD":"",b?" \xB7 \u8FD0\u884C\u4E2D":""]}):null]})});var P=E("react");var d=E("react/jsx-runtime"),De=0,it=()=>(De+=1,De);function ct(e){let t=/```(?:bash|sh|shell|kubectl|console)?\s*\n([\s\S]*?)```/g,o;for(;(o=t.exec(e))!==null;){let n=o[1]??"",a=me(n);if(a)return a}return me(e)}function me(e){for(let t of e.split(`
27
+ `)){let o=t.replace(/^\s*[$>]\s*/,"").trim();if(!(!o||o.startsWith("#"))&&/^kubectl\b/u.test(o))return o}return null}function lt(e){let t=[],o=/```([\w+-]*)\s*\n([\s\S]*?)```/g,n=0,a;for(;(a=o.exec(e))!==null;)a.index>n&&t.push({kind:"text",text:e.slice(n,a.index)}),t.push({kind:"code",lang:a[1]||void 0,text:a[2]??""}),n=o.lastIndex;return n<e.length&&t.push({kind:"text",text:e.slice(n)}),t}function He({kube:e,onRunCommand:t}){let[o,n]=(0,P.useState)([]),[a,k]=(0,P.useState)(""),[s,v]=(0,P.useState)(!1),[f,b]=(0,P.useState)(null),[y,A]=(0,P.useState)(!1),[g,K]=(0,P.useState)(""),[z,M]=(0,P.useState)(null),j=(0,P.useRef)(null),I=(0,P.useRef)(null),i=(0,P.useRef)(null),N=(0,P.useCallback)(async()=>{A(!0);try{b(await B.aiModels())}catch(c){b(null),M(`\u6A21\u578B\u679A\u4E3E\u5931\u8D25\uFF1A${await W(c)}`)}finally{A(!1)}},[]);(0,P.useEffect)(()=>{N()},[N]);let O=(0,P.useMemo)(()=>f?ze(f):[],[f]),X=(0,P.useMemo)(()=>O.find(c=>c.key===g),[O,g]);(0,P.useEffect)(()=>{let c=I.current;c&&(c.scrollTop=c.scrollHeight)},[o]);let u=(0,P.useCallback)(c=>{n(r=>[...r,{...c,key:it()}])},[]),m=(0,P.useCallback)(c=>{n(r=>{if(r.length===0)return r;let l=r[r.length-1];if(l.role!=="assistant")return r;let x={...l,...c};c.content&&typeof c.content=="string"&&(x.content=l.content+c.content);let L=[...r];return L[L.length-1]=x,L})},[]),$=(0,P.useCallback)(()=>{j.current?.abort()},[]),T=(0,P.useCallback)(async()=>{let c=a.trim();if(!c||s)return;k(""),M(null);let r=o.filter(x=>x.role==="user"||x.state==="done").map(x=>({role:x.role,content:x.content}));r.push({role:"user",content:c}),u({role:"user",content:c}),u({role:"assistant",content:"",state:"streaming"}),v(!0),j.current=new AbortController;let l=j.current.signal;try{await B.chat({id:e.id,provider:X?.provider,model:X?.model,history:r.slice(-40)},x=>{x.type==="delta"&&typeof x.text=="string"?m({content:x.text}):x.type==="done"?m({state:"done",meta:{...typeof x.provider=="string"?{provider:x.provider}:{},...typeof x.model=="string"?{model:x.model}:{}}}):x.type==="aborted"?m({state:"done"}):x.type==="error"&&m({state:"error",content:`\u26A0\uFE0F ${String(x.message??"AI \u51FA\u9519")}`})},l)}catch(x){if(l.aborted)m({state:"done"});else{let L=await W(x);m({state:"error",content:`\u26A0\uFE0F ${L}`})}}finally{v(!1),j.current=null}},[a,s,o,X,e.id,u,m]),V=(0,P.useCallback)(c=>{c.key==="Enter"&&!c.shiftKey&&!c.nativeEvent.isComposing&&(c.preventDefault(),T())},[T]),_=(0,P.useCallback)(()=>{s&&$(),n([]),M(null)},[s,$]),Y=[...o].reverse().find(c=>c.role==="assistant"&&c.state==="done"),q=Y?ct(Y.content):null,ae=(0,P.useCallback)(async c=>{try{await navigator.clipboard.writeText(c)}catch{}},[]),se=c=>{if(c.role==="user")return(0,d.jsx)("div",{className:"kc-chat-user-text",children:c.content});if(c.state==="error")return(0,d.jsx)("div",{className:"kc-chat-error-text",children:c.content});let r=lt(c.content);return(0,d.jsxs)("div",{className:"kc-chat-ai-text",children:[r.length===0?c.state==="streaming"?(0,d.jsx)("span",{className:"kc-chat-cursor",children:"\u258D"}):(0,d.jsx)("span",{className:"kc-muted",children:"\uFF08\u7A7A\u56DE\u590D\uFF09"}):r.map((l,x)=>{if(l.kind==="text")return(0,d.jsx)("span",{className:"kc-chat-text-span",children:l.text},x);let L=l.lang===void 0||/^(bash|sh|shell|kubectl|console)$/u.test(l.lang)?me(l.text):null;return(0,d.jsxs)("div",{className:"kc-codebox",children:[(0,d.jsxs)("div",{className:"kc-codebox-head",children:[(0,d.jsx)("span",{className:"kc-codebox-lang",children:l.lang||"code"}),(0,d.jsx)("span",{className:"kc-grow"}),(0,d.jsx)("button",{className:"kc-btn-sm",onClick:()=>void ae(l.text),children:"\u590D\u5236"}),L?(0,d.jsx)("button",{className:"kc-btn-sm",onClick:()=>t(L),title:`\u53D1\u9001\u5230\u547D\u4EE4\u63A7\u5236\u53F0\u6267\u884C\uFF1A${L}`,children:"\u25B6 \u8FD0\u884C"}):null]}),(0,d.jsx)("pre",{className:"kc-codebox-body",children:l.text})]},x)}),c.state==="streaming"&&r.length>0?(0,d.jsx)("span",{className:"kc-chat-cursor",children:"\u258D"}):null]})};return(0,d.jsxs)("div",{className:"kc-chat",children:[(0,d.jsxs)("div",{className:"kc-chat-toolbar",children:[(0,d.jsxs)("label",{title:"\u590D\u7528 DSH \u5DF2\u914D\u7F6E\u7684\u6A21\u578B\uFF1B\u7A7A = \u8BA9 DSH \u81EA\u52A8\u9009\u62E9",children:["AI \u6A21\u578B",(0,d.jsxs)("select",{value:g,onChange:c=>K(c.target.value),disabled:s||y,children:[(0,d.jsx)("option",{value:"",children:"\u81EA\u52A8\uFF08\u7531 DSH \u9009\u62E9\uFF09"}),O.map(c=>(0,d.jsx)("option",{value:c.key,children:c.label??c.key},c.key))]})]}),(0,d.jsx)("button",{className:"kc-btn-sm",onClick:()=>void N(),disabled:y,title:"\u91CD\u65B0\u679A\u4E3E DSH \u6A21\u578B",children:"\u21BB \u6A21\u578B"}),(0,d.jsx)("button",{className:"kc-btn-sm",onClick:_,disabled:o.length===0&&!s,title:"\u6E05\u7A7A\u672C\u4F1A\u8BDD\u5BF9\u8BDD",children:"\u6E05\u7A7A\u5BF9\u8BDD"}),(0,d.jsx)("span",{className:"kc-grow"}),(0,d.jsxs)("span",{className:"kc-chat-cluster",title:"AI \u7CFB\u7EDF\u63D0\u793A\u4E2D\u4F1A\u643A\u5E26\u8BE5\u96C6\u7FA4\u4FE1\u606F",children:["\u2388 ",e.name," \xB7 ",e.currentContext??"",e.server?` \xB7 ${e.server.replace(/^https?:\/\//u,"")}`:""]})]}),f&&!f.ok?(0,d.jsxs)("div",{className:"kc-chat-warn",children:["\u26A0\uFE0F ",f.message??"\u6CA1\u6709\u53EF\u7528\u6A21\u578B","\uFF08\u914D\u7F6E\u597D\u540E\u70B9\u201C\u21BB \u6A21\u578B\u201D\u5237\u65B0\uFF09"]}):null,z?(0,d.jsxs)("div",{className:"kc-chat-warn",children:["\u26A0\uFE0F ",z]}):null,(0,d.jsxs)("div",{className:"kc-chat-scroll",ref:I,children:[o.length===0?(0,d.jsx)("div",{className:"kc-chat-empty",children:(0,d.jsxs)("div",{className:"kc-muted",style:{maxWidth:460},children:["\u9488\u5BF9\u5F53\u524D\u96C6\u7FA4\uFF08",e.name,"\uFF09\u63D0\u95EE\uFF0C\u4F8B\u5982\uFF1A",(0,d.jsx)("br",{}),"\xB7 \u201C\u67E5\u770B default \u547D\u540D\u7A7A\u95F4\u4E0B\u6240\u6709 deployment \u53CA\u5176\u72B6\u6001\u201D",(0,d.jsx)("br",{}),"\xB7 \u201C\u627E\u51FA ImagePullBackOff \u7684 pod\uFF0C\u5E76\u89E3\u91CA\u600E\u4E48\u6392\u67E5\u201D",(0,d.jsx)("br",{}),"\xB7 \u201C\u751F\u6210\u628A myapp \u7F29\u5230 2 \u526F\u672C\u7684\u547D\u4EE4\u201D",(0,d.jsx)("br",{}),"\xB7 \u201C\u7C98\u8D34\u4E00\u6761 kubectl \u62A5\u9519\uFF0C\u5E2E\u6211\u89E3\u91CA\u539F\u56E0\u201D",(0,d.jsx)("br",{}),(0,d.jsx)("br",{}),"AI \u751F\u6210\u7684\u53EF\u6267\u884C\u547D\u4EE4\u4F1A\u5728\u4EE3\u7801\u5757\u4E0B\u65B9\u63D0\u4F9B ",(0,d.jsx)("b",{children:"\u25B6 \u8FD0\u884C"}),"\uFF0C\u70B9\u51FB\u540E\u5207\u5230\u547D\u4EE4\u63A7\u5236\u53F0\u76F4\u63A5\u6267\u884C\u3002"]})}):o.map(c=>(0,d.jsxs)("div",{className:`kc-chat-row kc-chat-${c.role}`,children:[(0,d.jsx)("div",{className:"kc-chat-avatar",children:c.role==="user"?"\u{1F9D1}":"\u{1F916}"}),(0,d.jsxs)("div",{className:"kc-chat-bubble",children:[se(c),c.state==="done"&&c.meta&&(c.meta.provider||c.meta.model)?(0,d.jsxs)("div",{className:"kc-chat-meta",children:[c.meta.provider,"/",c.meta.model]}):null]})]},c.key)),q&&!s?(0,d.jsxs)("div",{className:"kc-chat-quickrun",children:["\u{1F4A1} \u53EF\u7528\u547D\u4EE4\uFF1A",(0,d.jsx)("code",{children:q}),(0,d.jsx)("button",{className:"kc-btn-sm",onClick:()=>t(q),children:"\u25B6 \u53D1\u9001\u5230\u63A7\u5236\u53F0\u6267\u884C"})]}):null]}),(0,d.jsxs)("div",{className:"kc-chat-input-row",children:[(0,d.jsx)("textarea",{ref:i,className:"kc-code-input kc-chat-input",value:a,onChange:c=>k(c.target.value),onKeyDown:V,placeholder:"\u95EE AI\uFF1A\u751F\u6210 kubectl \u547D\u4EE4 / \u89E3\u91CA\u8F93\u51FA / \u6392\u67E5\u62A5\u9519\u2026\uFF08Enter \u53D1\u9001\uFF0CShift+Enter \u6362\u884C\uFF09",spellCheck:!1,rows:2}),s?(0,d.jsx)("button",{className:"kc-btn-primary kc-btn-stop",onClick:$,children:"\u25A0 \u505C\u6B62"}):(0,d.jsx)("button",{className:"kc-btn-primary",onClick:()=>void T(),disabled:a.trim()==="",children:"\u53D1\u9001"})]})]})}var D=E("react/jsx-runtime");function Le({kube:e}){let[t,o]=(0,G.useState)("console"),[n,a]=(0,G.useState)({console:!0,chat:!1}),k=(0,G.useRef)(null),s=(0,G.useCallback)(b=>{o(b),a(y=>y[b]?y:{...y,[b]:!0})},[]),v=(0,G.useCallback)(b=>{s("console"),window.setTimeout(()=>{k.current?.runText(b)},0)},[s]),f=(b,y,A)=>(0,D.jsx)("button",{type:"button",role:"tab","aria-selected":t===b,title:A,className:t===b?"kc-seg-active":"",onClick:()=>s(b),children:y});return(0,D.jsxs)("div",{className:"kc-workspace",children:[(0,D.jsxs)("div",{className:"kc-ws-meta",children:[(0,D.jsxs)("span",{className:"kc-ws-meta-name",title:`kubeconfig \u6587\u4EF6\uFF1A${e.fileName}`,children:["\u2388 ",e.name]}),(0,D.jsx)("span",{className:"kc-ws-meta-chip",title:"\u5F53\u524D\u4E0A\u4E0B\u6587",children:e.currentContext??e.contextNames.join(", ")??"\uFF08\u65E0\uFF09"}),e.server?(0,D.jsx)("span",{className:"kc-ws-meta-chip kc-ws-meta-server",title:"API server",children:e.server}):null,(0,D.jsx)("span",{className:"kc-grow"}),(0,D.jsxs)("div",{className:"kc-seg",role:"tablist","aria-label":"\u4F1A\u8BDD\u5B50\u9875",children:[f("console","\u2328\uFE0F \u547D\u4EE4\u63A7\u5236\u53F0","\u76F4\u63A5\u6267\u884C kubectl \u547D\u4EE4\uFF08\u4F7F\u7528\u672C\u4F1A\u8BDD\u9009\u62E9\u7684 context / namespace\uFF09"),f("chat","\u{1F4AC} AI \u5BF9\u8BDD","\u591A\u8F6E\u5BF9\u8BDD\uFF1A\u751F\u6210 kubectl \u547D\u4EE4 / \u89E3\u91CA\u8F93\u51FA\u7ED3\u679C\uFF1B\u6A21\u578B\u8DDF\u968F DSH \u914D\u7F6E")]})]}),(0,D.jsxs)("div",{className:"kc-ws-body",children:[n.console?(0,D.jsx)("div",{className:"kc-ws-pane","data-active":t==="console"?"true":void 0,style:t==="console"?void 0:{display:"none"},children:(0,D.jsx)(Ie,{ref:k,kube:e})}):null,n.chat?(0,D.jsx)("div",{className:"kc-ws-pane","data-active":t==="chat"?"true":void 0,style:t==="chat"?void 0:{display:"none"},children:(0,D.jsx)(He,{kube:e,onRunCommand:v})}):null]})]})}var h=E("react/jsx-runtime"),Be=0;function dt(){return Be+=1,`session_${Date.now().toString(36)}_${Be}`}function ge(e={}){let[t,o]=(0,R.useState)([]),[n,a]=(0,R.useState)(null),[k,s]=(0,R.useState)(!1),[v,f]=(0,R.useState)(null),[b,y]=(0,R.useState)(null),A=(0,R.useRef)(!0),[g,K]=(0,R.useState)([]),[z,M]=(0,R.useState)(null),j=(0,R.useCallback)((u,m)=>{y({kind:u,text:m}),window.setTimeout(()=>y($=>$?.text===m?null:$),u==="error"?6e3:2600)},[]),I=(0,R.useCallback)(async()=>{s(!0);try{let[u,{kubeconfigs:m}]=await Promise.all([B.state(!0),B.kubeconfigs()]);a(u),o(m),f(null)}catch(u){let m=await W(u);f(`\u65E0\u6CD5\u8FDE\u63A5\u63D2\u4EF6\u670D\u52A1\uFF1A${m}\u3002\u8BF7\u786E\u8BA4\u5DF2\u5728 DSH \u4E2D\u5B89\u88C5\u5E76\u542F\u7528 dsh-plugin-k8s\uFF08\u91CD\u542F dsh web \u540E\u751F\u6548\uFF09\u3002`),j("error",`\u52A0\u8F7D\u5931\u8D25\uFF1A${m}`)}finally{s(!1)}},[j]);(0,R.useEffect)(()=>{A.current&&(A.current=!1,I())},[I]),(0,R.useEffect)(()=>{let u=new Set(t.map(m=>m.id));K(m=>{let $=m.filter(T=>u.has(T.kube.id));return $.length===m.length?m:$})},[t]),(0,R.useEffect)(()=>{z!==null&&!g.some(u=>u.key===z)&&M(g.length>0?g[g.length-1].key:null)},[g,z]);let i=(0,R.useCallback)(u=>{let m={key:dt(),kube:u};K($=>[...$,m]),M(m.key)},[]),N=(0,R.useCallback)(u=>{let m=g.findIndex(V=>V.key===u);if(K(V=>V.filter(_=>_.key!==u)),z!==u)return;let $=m>=0?g[m+1]:void 0,T=m>=0?g[m-1]:void 0;M(($??T)?.key??null)},[g,z]),O=(u,m)=>{let $=g.slice(0,m+1).filter(q=>q.kube.id===u.kube.id).length,T=g.filter(q=>q.kube.id===u.kube.id).length,V=u.kube.name,_=T>1?`${V} #${$}`:V,Y=u.kube.currentContext?` \xB7 ${u.kube.currentContext}`:"";return{title:_,sub:`${u.kube.name}${Y} \u2014 \u4F1A\u8BDD ${$}`}},X=u=>(0,h.jsx)(Le,{kube:u.kube},u.key);return(0,h.jsxs)("div",{className:"kc-app",children:[(0,h.jsxs)("div",{className:"kc-topbar",children:[(0,h.jsxs)("div",{className:"kc-title",children:[(0,h.jsx)("span",{className:"kc-logo",children:"K8s"})," K8s \u63A7\u5236\u53F0",(0,h.jsx)("span",{className:"kc-badge",children:"dsh-plugin-k8s"}),n?.kubectl.version?(0,h.jsxs)("span",{className:"kc-badge kc-badge-ok",children:["kubectl ",n.kubectl.version]}):null,n&&!n.kubectl.present?(0,h.jsx)("span",{className:"kc-badge kc-badge-bad",title:n.kubectl.missingReason,children:"kubectl \u672A\u627E\u5230"}):null]}),(0,h.jsx)("div",{className:"kc-grow"}),b?(0,h.jsx)("span",{className:`kc-notice kc-notice-${b.kind}`,title:b.text,children:b.text}):null,k?(0,h.jsx)("span",{className:"kc-muted",children:"\u2026"}):null,e.onClose?(0,h.jsx)("button",{onClick:e.onClose,title:"\u5173\u95ED\u9762\u677F\uFF0C\u56DE\u5230\u5BF9\u8BDD",children:e.standalone?"\u2715 \u5173\u95ED":"\u2715 \u56DE\u5230\u5BF9\u8BDD"}):null]}),v?(0,h.jsx)("div",{className:"kc-fatal",children:(0,h.jsxs)("div",{className:"kc-fatal-box",children:[(0,h.jsx)("div",{className:"kc-fatal-title",children:"\u26A0\uFE0F K8s \u63A7\u5236\u53F0\u6682\u65F6\u4E0D\u53EF\u7528"}),(0,h.jsx)("div",{className:"kc-fatal-text",children:v}),(0,h.jsx)("button",{onClick:()=>{f(null),I()},children:"\u91CD\u8BD5"})]})}):(0,h.jsxs)("div",{className:"kc-app-body",children:[(0,h.jsx)(Me,{kubeconfigs:t,busyList:k,refresh:I,onOpenSession:i,onFlash:j,stateInfo:n}),(0,h.jsxs)("div",{className:"kc-main",children:[(0,h.jsxs)("div",{className:"kc-tabbar",role:"tablist","aria-label":"\u5DF2\u6253\u5F00\u7684\u96C6\u7FA4\u4F1A\u8BDD",children:[g.length===0?(0,h.jsx)("span",{className:"kc-muted",style:{padding:"0 10px",whiteSpace:"nowrap"},children:"\u70B9\u51FB\u5DE6\u4FA7 kubeconfig \u65B0\u5EFA\u4F1A\u8BDD\uFF08\u540C\u4E00\u96C6\u7FA4\u53EF\u5F00\u591A\u4E2A\u72EC\u7ACB\u4F1A\u8BDD\uFF09\u3002"}):null,g.map((u,m)=>{let{title:$,sub:T}=O(u,m);return(0,h.jsxs)("div",{role:"tab","aria-selected":u.key===z,className:`kc-tab${u.key===z?" kc-tab-active":""}`,title:`${T} \u2014\u2014 \u70B9\u51FB\u5207\u6362\uFF0C\u2715 \u5173\u95ED`,onClick:()=>M(u.key),children:[(0,h.jsx)("span",{className:"kc-tab-icon",children:"\u2388"}),(0,h.jsx)("span",{className:"kc-tab-label",children:$}),(0,h.jsx)("span",{className:"kc-tab-close",title:"\u5173\u95ED",onClick:V=>{V.stopPropagation(),N(u.key)},children:"\u2715"})]},u.key)})]}),(0,h.jsx)("div",{className:"kc-tabpanes",children:g.length===0?(0,h.jsxs)("div",{className:"kc-empty",style:{flex:1},children:[(0,h.jsx)("div",{style:{fontSize:30,opacity:.5},children:"\u2388"}),(0,h.jsx)("div",{children:"\u8FD8\u6CA1\u6709\u6253\u5F00\u4EFB\u4F55\u96C6\u7FA4\u4F1A\u8BDD\u3002"}),(0,h.jsxs)("div",{style:{marginTop:6,fontSize:12},className:"kc-muted",children:["\u5DE6\u4FA7\u70B9\u51FB kubeconfig \u5373\u53EF\u65B0\u5EFA\u4F1A\u8BDD Tab\uFF08\u91CD\u590D\u70B9\u51FB\u540C\u4E00\u96C6\u7FA4\u4F1A\u518D\u5F00\u4E00\u4E2A\u72EC\u7ACB\u4F1A\u8BDD\uFF09\uFF1B",(0,h.jsx)("br",{}),"\u6BCF\u4E2A\u4F1A\u8BDD\u5185\u542B\u300C\u2328\uFE0F \u547D\u4EE4\u63A7\u5236\u53F0\u300D\u4E0E\u300C\u{1F4AC} AI \u5BF9\u8BDD\u300D\u4E24\u4E2A\u5B50\u9875\uFF0C\u5404\u81EA\u72EC\u7ACB\u4FDD\u6301\u72B6\u6001\u3002"]})]}):g.map(u=>(0,h.jsx)("div",{role:"tabpanel",className:"kc-pane","data-active":u.key===z?"true":void 0,style:u.key===z?void 0:{display:"none"},children:X(u)},u.key))})]})]})]})}var xe=E("react/jsx-runtime"),Q=null,je=null;function pt(){return Q!==null||(Q=document.createElement("div"),Q.id="dsh-k8s-console",Q.style.cssText=["position:absolute","inset:0","z-index:30","display:none","flex-direction:column","overflow:hidden","background:var(--kc-bg)"].join(";"),document.body.appendChild(Q),je=(0,Ve.createRoot)(Q),je.render((0,xe.jsx)(ge,{onClose:()=>F.close(),standalone:!1}))),Q}function Je(e){let t=(0,oe.useRef)(null);return(0,oe.useEffect)(()=>{let o=t.current;if(o===null)return;let n=pt(),a=o.closest("[data-phase]")??o.parentElement,k,s=v=>{Number.isFinite(v)&&v>=32&&n.style.setProperty("--kc-shell-header-h",`${v}px`)};if(a!=null){let v=a.querySelector("header");v!==null&&(k=new ResizeObserver(f=>{for(let b of f){let y=b.borderBoxSize,A=Array.isArray(y)?y[0]?.blockSize:void 0;s(A??v.getBoundingClientRect().height)}}),k.observe(v),s(v.getBoundingClientRect().height))}return a!=null&&(F.setDocked(!0),n.style.display="flex",n.parentElement!==a&&a.appendChild(n)),()=>{k?.disconnect(),F.setDocked(!1),n.parentElement!==document.body&&document.body.appendChild(n),n.style.display="none"}},[]),(0,xe.jsx)("div",{ref:t,style:{height:0,overflow:"hidden"}})}var We=`/* dsh-plugin-k8s \u5BA2\u6237\u7AEF\u6837\u5F0F\uFF08\u96F6\u5916\u90E8\u4F9D\u8D56\uFF0C\u5168\u90E8\u9650\u5B9A\u5728 #dsh-k8s-console\uFF09
28
+ *
29
+ * \u4E3B\u9898\u7B56\u7565\uFF08\u5BF9\u9F50\u756A\u8304\u5DE5\u4F5C\u53F0 / \u6570\u636E\u5E93\u5DE5\u4F5C\u53F0\uFF09\uFF1A
30
+ * \u989C\u8272\u4E00\u5F8B\u5F15\u7528 DSH Web \u7684\u4E3B\u9898 token\uFF08--dsw-alias-* / --ds-*\uFF09\uFF0C\u8DDF\u968F DSH
31
+ * \u914D\u7F6E\u7684\u4E3B\u9898\uFF08\u660E\u6697 / \u6362\u80A4\uFF09\u81EA\u52A8\u53D8\u5316\uFF1Btoken \u62FF\u4E0D\u5230\u65F6\u56DE\u843D\u5230\u5185\u7F6E\u6697\u8272\u503C\u3002
32
+ *
33
+ * \u5E03\u5C40\u7B56\u7565\uFF1A
34
+ * \u5DE5\u4F5C\u53F0\u56DB\u8FB9\u4E0D\u7559 margin\uFF0C\u533A\u57DF\u4E4B\u95F4\u7528 1px hairline \u5206\u5272\u7EBF\uFF08--kc-border\uFF09\u5206\u5F00\uFF1B
35
+ * \u9762\u677F\u4E0D\u518D\u81EA\u5E26\u63CF\u8FB9\u4E0E\u5E95\u8272\uFF0C\u5C3D\u91CF\u5C11\u8FB9\u6846\uFF1B\u9876\u680F + TabBar \u603B\u9AD8\u4E0E\u5BBF\u4E3B\u5BF9\u8BDD\u5934\u90E8
36
+ * \u5BF9\u9F50\uFF08\u9AD8\u5EA6\u7531 overlay.tsx \u5B9E\u6D4B\u5199\u5165 --kc-shell-header-h\uFF09\u3002
37
+ */
28
38
  :root {
29
- --kc-bg: #0d1117;
30
- --kc-panel: #141a23;
31
- --kc-panel-2: #1b2230;
32
- --kc-border: #2a3345;
33
- --kc-border-strong: #3a4660;
34
- --kc-text: #e6e9ef;
35
- --kc-muted: #8b93a3;
36
- --kc-accent: #3fa7f7;
37
- --kc-accent-weak: rgba(63, 167, 247, 0.14);
38
- --kc-ok: #37c978;
39
- --kc-warn: #e0b341;
40
- --kc-err: #ff5f56;
41
- --kc-radius: 8px;
39
+ --kc-bg: var(--dsw-alias-bg-base, #12141a);
40
+ --kc-panel: var(--dsw-alias-bg-layer-1, #171a21);
41
+ --kc-panel-2: var(--dsw-alias-bg-layer-2, #1d212b);
42
+ --kc-border: var(--dsw-alias-border-l2, rgba(136, 148, 168, 0.24));
43
+ --kc-border-strong: var(--dsw-alias-border-l3, rgba(136, 148, 168, 0.38));
44
+ --kc-text: var(--dsw-alias-label-primary, #e6e9ef);
45
+ --kc-muted: var(--dsw-alias-label-secondary, #8b93a3);
46
+ --kc-faint: var(--dsw-alias-label-tertiary, #6b7383);
47
+ --kc-accent: var(--dsw-alias-state-business-primary, #3fa7f7);
48
+ --kc-accent-weak: color-mix(in srgb, var(--kc-accent) 12%, transparent);
49
+ --kc-ok: var(--dsw-alias-state-success-primary, #37c978);
50
+ --kc-warn: var(--dsw-alias-state-warn-primary, #e0b341);
51
+ --kc-err: var(--dsw-alias-state-error-primary, #ff5f56);
52
+ --kc-radius: 10px;
42
53
  --kc-mono: "Cascadia Code", "JetBrains Mono", Consolas, "Courier New", monospace;
54
+ --kc-ease: var(--ds-transition-duration-fast, 120ms) var(--ds-ease-in-out, ease);
55
+ /* \u5BBF\u4E3B\u5BF9\u8BDD\u5934\u90E8\u5B9E\u6D4B\u9AD8\u5EA6\uFF08overlay.tsx \u7528 ResizeObserver \u5199\u5165\uFF09\uFF1B\u62FF\u4E0D\u5230\u65F6\u56DE\u843D 76px\u3002
56
+ \u9876\u680F + TabBar \u9AD8\u5EA6\u4E4B\u548C\u8DDF\u968F\u5B83\uFF0C\u4E0E\u5BBF\u4E3B\u5934\u90E8\u5E95\u8FB9\u7CBE\u786E\u5BF9\u9F50\u3002 */
57
+ --kc-shell-header-h: 76px;
58
+ --kc-tabbar-h: 32px;
43
59
  }
44
60
 
45
- /* ---------- \u4FA7\u8FB9\u680F\u5165\u53E3\uFF08\u4F4D\u4E8E DSH \u4FA7\u680F\uFF0C\u4E0D\u5728\u9762\u677F\u5185\uFF0C\u9700\u5168\u5C40\u53EF\u89C1\uFF09 ---------- */
61
+ /* token \u91CD\u58F0\u660E\uFF1ADSH \u7684 --dsw-alias-* \u82E5\u4E0D\u662F\u6302\u5728 :root \u800C\u662F\u6302\u5728\u5E94\u7528\u5BB9\u5668\u4E0A\uFF0C
62
+ \u8FD9\u91CC\u5728\u5BB9\u5668\u81EA\u8EAB\u518D\u6C42\u503C\u4E00\u6B21\uFF0C\u4FDD\u8BC1\u63A7\u5236\u53F0\u53D6\u5230\u6B63\u786E\u4E3B\u9898\u8272\u3002 */
63
+ #dsh-k8s-console {
64
+ --kc-bg: var(--dsw-alias-bg-base, #12141a);
65
+ --kc-panel: var(--dsw-alias-bg-layer-1, #171a21);
66
+ --kc-panel-2: var(--dsw-alias-bg-layer-2, #1d212b);
67
+ --kc-border: var(--dsw-alias-border-l2, rgba(136, 148, 168, 0.24));
68
+ --kc-border-strong: var(--dsw-alias-border-l3, rgba(136, 148, 168, 0.38));
69
+ --kc-text: var(--dsw-alias-label-primary, #e6e9ef);
70
+ --kc-muted: var(--dsw-alias-label-secondary, #8b93a3);
71
+ --kc-faint: var(--dsw-alias-label-tertiary, #6b7383);
72
+ --kc-accent: var(--dsw-alias-state-business-primary, #3fa7f7);
73
+ --kc-ok: var(--dsw-alias-state-success-primary, #37c978);
74
+ --kc-warn: var(--dsw-alias-state-warn-primary, #e0b341);
75
+ --kc-err: var(--dsw-alias-state-error-primary, #ff5f56);
76
+
77
+ color: var(--kc-text);
78
+ font-size: 13px;
79
+ line-height: 1.5;
80
+ font-family: var(--dsw-font-family, inherit);
81
+ box-sizing: border-box;
82
+ }
83
+ #dsh-k8s-console *,
84
+ #dsh-k8s-console *::before,
85
+ #dsh-k8s-console *::after {
86
+ box-sizing: border-box;
87
+ }
88
+
89
+ /* ---------- \u4FA7\u8FB9\u680F\u5165\u53E3\uFF08\u4F4D\u4E8E DSH \u4FA7\u680F\uFF0C\u4E0D\u5728\u9762\u677F\u5185\uFF0C\u76F4\u63A5\u7528 DSW token\uFF09 ---------- */
46
90
  button.kc-sidebar-entry {
47
91
  display: flex;
48
92
  align-items: center;
49
93
  gap: 8px;
50
94
  width: 100%;
51
95
  min-width: 0;
52
- padding: 6px 10px;
53
- color: var(--kc-muted);
96
+ padding: 8px 12px;
97
+ margin: 0;
98
+ color: var(--dsw-alias-label-secondary);
54
99
  background: transparent;
55
100
  border: 0;
56
101
  border-radius: 8px;
57
102
  cursor: pointer;
58
103
  font: inherit;
59
104
  font-size: 13px;
105
+ line-height: 1;
60
106
  text-align: left;
61
- transition: background 0.12s, color 0.12s;
107
+ transition: background var(--kc-ease), color var(--kc-ease);
62
108
  }
63
109
  button.kc-sidebar-entry:hover {
64
- background: var(--kc-accent-weak);
65
- color: var(--kc-text);
110
+ background: var(--dsw-alias-interactive-bg-hover, var(--kc-accent-weak));
111
+ color: var(--dsw-alias-label-secondary);
66
112
  }
67
113
  button.kc-sidebar-entry[data-active='true'],
68
114
  button.kc-sidebar-entry[data-active='true']:hover {
69
- background: var(--kc-accent-weak);
70
- color: var(--kc-accent);
115
+ background: var(--dsw-alias-interactive-bg-active);
116
+ color: var(--dsw-alias-label-primary);
117
+ font-weight: 600;
71
118
  }
72
119
  .kc-sidebar-entry-icon {
73
120
  display: inline-flex;
74
121
  flex: 0 0 auto;
122
+ color: inherit;
75
123
  }
76
124
  .kc-sidebar-entry-icon svg {
77
125
  display: block;
@@ -82,36 +130,31 @@ button.kc-sidebar-entry[data-active='true']:hover {
82
130
  white-space: nowrap;
83
131
  }
84
132
 
85
- /* ---------- \u9762\u677F\u6839 ---------- */
86
- #dsh-k8s-console {
87
- color: var(--kc-text);
88
- font-size: 13px;
89
- line-height: 1.5;
90
- box-sizing: border-box;
91
- }
92
- #dsh-k8s-console *,
93
- #dsh-k8s-console *::before,
94
- #dsh-k8s-console *::after {
95
- box-sizing: border-box;
96
- }
133
+ /* ---------- \u9762\u677F\u6839 ----------
134
+ \u4E2D\u680F\u63A5\u7BA1\u8BF4\u660E\uFF1A\u5DE5\u4F5C\u53F0\u6253\u5F00\u65F6\u7531 overlay.tsx \u628A\u6301\u4E45\u5BB9\u5668\uFF08#dsh-k8s-console\uFF09
135
+ \u4EE5 absolute inset:0 \u8986\u76D6\u5230 Conversation \u6839\u8282\u70B9\u4E0A\uFF08\u53C2\u8003\u756A\u8304\u5DE5\u4F5C\u53F0/\u6570\u636E\u5E93\u5DE5\u4F5C\u53F0\uFF09\uFF0C
136
+ \u4E0D\u9690\u85CF\u3001\u4E0D\u4FEE\u6539\u4EFB\u4F55\u5BBF\u4E3B\u5143\u7D20\uFF0C\u56E0\u6B64\u8FD9\u91CC\u6CA1\u6709\u4EFB\u4F55\u9488\u5BF9\u5BBF\u4E3B\uFF08\u5934\u90E8/composer\uFF09\u7684\u89C4\u5219\u3002 */
97
137
  #dsh-k8s-console input,
98
138
  #dsh-k8s-console select,
99
139
  #dsh-k8s-console textarea,
100
140
  #dsh-k8s-console button {
101
141
  font: inherit;
102
142
  color: var(--kc-text);
103
- background: var(--kc-panel-2);
104
- border: 1px solid var(--kc-border);
105
- border-radius: 6px;
143
+ background: transparent;
144
+ border: 1px solid color-mix(in srgb, var(--kc-border) 72%, transparent);
145
+ border-radius: 8px;
106
146
  }
107
147
  #dsh-k8s-console button {
108
148
  padding: 5px 11px;
109
149
  cursor: pointer;
110
- transition: background 0.12s, border-color 0.12s;
150
+ transition: background var(--kc-ease), border-color var(--kc-ease), color var(--kc-ease);
111
151
  }
112
152
  #dsh-k8s-console button:hover:not(:disabled) {
113
- border-color: var(--kc-accent);
114
- background: var(--kc-accent-weak);
153
+ background: var(--dsw-alias-interactive-bg-hover, var(--kc-accent-weak));
154
+ }
155
+ #dsh-k8s-console button:focus-visible {
156
+ outline: 2px solid var(--kc-accent);
157
+ outline-offset: 1px;
115
158
  }
116
159
  #dsh-k8s-console button:disabled {
117
160
  opacity: 0.45;
@@ -119,30 +162,33 @@ button.kc-sidebar-entry[data-active='true']:hover {
119
162
  }
120
163
  #dsh-k8s-console button.kc-btn-primary {
121
164
  background: var(--kc-accent);
122
- border-color: var(--kc-accent);
123
- color: #fff;
165
+ border-color: transparent;
166
+ color: var(--dsw-alias-label-primary-inverted, #fff);
167
+ font-weight: 600;
124
168
  }
125
169
  #dsh-k8s-console button.kc-btn-primary:hover:not(:disabled) {
126
- background: #63b8ff;
127
- border-color: #63b8ff;
170
+ background: color-mix(in srgb, var(--kc-accent) 86%, #fff);
128
171
  }
129
172
  #dsh-k8s-console button.kc-btn-stop {
130
- background: #c0392b;
131
- border-color: #c0392b;
173
+ background: var(--kc-err);
174
+ border-color: transparent;
175
+ color: var(--dsw-alias-label-primary-inverted, #fff);
132
176
  }
133
177
  #dsh-k8s-console button.kc-btn-stop:hover:not(:disabled) {
134
- background: #d9534a;
135
- border-color: #d9534a;
178
+ background: color-mix(in srgb, var(--kc-err) 86%, #fff);
136
179
  }
137
180
  #dsh-k8s-console button.kc-btn-sm {
138
181
  padding: 2px 8px;
139
182
  font-size: 12px;
140
- border-radius: 5px;
183
+ border-radius: 6px;
141
184
  }
142
185
  #dsh-k8s-console input,
143
186
  #dsh-k8s-console select,
144
187
  #dsh-k8s-console textarea {
145
188
  padding: 5px 9px;
189
+ background: var(--kc-panel);
190
+ border: 1px solid var(--kc-border);
191
+ transition: border-color var(--kc-ease);
146
192
  }
147
193
  #dsh-k8s-console input:focus,
148
194
  #dsh-k8s-console select:focus,
@@ -152,7 +198,7 @@ button.kc-sidebar-entry[data-active='true']:hover {
152
198
  }
153
199
  #dsh-k8s-console input::placeholder,
154
200
  #dsh-k8s-console textarea::placeholder {
155
- color: #5b6475;
201
+ color: var(--kc-faint);
156
202
  }
157
203
 
158
204
  .kc-grow { flex: 1 1 auto; }
@@ -165,16 +211,20 @@ button.kc-sidebar-entry[data-active='true']:hover {
165
211
  background: var(--kc-bg);
166
212
  }
167
213
 
168
- /* ---------- \u9876\u680F ---------- */
214
+ /* ---------- \u9876\u680F ----------
215
+ \u9AD8\u5EA6 = \u5BBF\u4E3B\u5BF9\u8BDD\u5934\u90E8\u9AD8\u5EA6 - TabBar \u9AD8\u5EA6\uFF0C\u4F7F\u300C\u9876\u680F+TabBar\u300D\u5E95\u90E8\u5206\u5272\u7EBF\u4E0E
216
+ \u5BBF\u4E3B\u5934\u90E8\u5E95\u8FB9\u7CBE\u786E\u5BF9\u9F50\u3002\u65E0\u5916\u8FB9\u8DDD\u3001\u65E0\u5706\u89D2\u63CF\u8FB9\uFF0C\u4EC5\u4E00\u6761\u5E95\u90E8\u5206\u5272\u7EBF\u3002 */
169
217
  .kc-topbar {
170
218
  display: flex;
171
219
  align-items: center;
172
220
  gap: 10px;
173
- padding: 10px 14px;
174
- background: linear-gradient(180deg, #182130, #121825);
175
- border: 1px solid var(--kc-border);
176
- border-radius: var(--kc-radius);
177
- margin: 10px 10px 0;
221
+ height: calc(var(--kc-shell-header-h, 76px) - var(--kc-tabbar-h, 32px));
222
+ min-height: 40px;
223
+ padding: 0 20px;
224
+ margin: 0;
225
+ border: 0;
226
+ border-bottom: 1px solid var(--kc-border);
227
+ background: transparent;
178
228
  }
179
229
  .kc-title {
180
230
  font-size: 14px;
@@ -185,29 +235,30 @@ button.kc-sidebar-entry[data-active='true']:hover {
185
235
  min-width: 0;
186
236
  }
187
237
  .kc-logo {
188
- width: 24px;
189
- height: 24px;
190
- border-radius: 6px;
191
- background: linear-gradient(135deg, #3fa7f7, #7b61ff);
238
+ width: 22px;
239
+ height: 22px;
240
+ border-radius: 7px;
241
+ background: var(--kc-accent);
192
242
  display: inline-flex;
193
243
  align-items: center;
194
244
  justify-content: center;
195
245
  font-size: 11px;
196
246
  font-weight: 800;
197
- color: #fff;
247
+ color: var(--dsw-alias-label-primary-inverted, #fff);
198
248
  letter-spacing: -0.5px;
199
249
  }
200
250
  .kc-badge {
201
251
  font-size: 11px;
202
252
  font-weight: 400;
203
253
  color: var(--kc-muted);
204
- border: 1px solid var(--kc-border);
254
+ border: 1px solid color-mix(in srgb, var(--kc-border) 80%, transparent);
205
255
  border-radius: 999px;
206
256
  padding: 1px 8px;
257
+ background: transparent;
207
258
  white-space: nowrap;
208
259
  }
209
- .kc-badge-ok { color: var(--kc-ok); border-color: rgba(55, 201, 120, 0.4); }
210
- .kc-badge-bad { color: var(--kc-err); border-color: rgba(255, 95, 86, 0.4); }
260
+ .kc-badge-ok { color: var(--kc-ok); border-color: color-mix(in srgb, var(--kc-ok) 40%, transparent); }
261
+ .kc-badge-bad { color: var(--kc-err); border-color: color-mix(in srgb, var(--kc-err) 40%, transparent); }
211
262
  .kc-notice {
212
263
  font-size: 12px;
213
264
  padding: 2px 10px;
@@ -217,8 +268,8 @@ button.kc-sidebar-entry[data-active='true']:hover {
217
268
  text-overflow: ellipsis;
218
269
  max-width: 46%;
219
270
  }
220
- .kc-notice-ok { color: var(--kc-ok); background: rgba(55, 201, 120, 0.12); }
221
- .kc-notice-error { color: var(--kc-err); background: rgba(255, 95, 86, 0.12); }
271
+ .kc-notice-ok { color: var(--kc-ok); background: var(--dsw-alias-state-success-secondary, rgba(55, 201, 120, 0.12)); }
272
+ .kc-notice-error { color: var(--kc-err); background: var(--dsw-alias-state-error-secondary, rgba(255, 95, 86, 0.12)); }
222
273
  .kc-notice-info { color: var(--kc-accent); background: var(--kc-accent-weak); }
223
274
 
224
275
  .kc-fatal {
@@ -231,18 +282,19 @@ button.kc-sidebar-entry[data-active='true']:hover {
231
282
  .kc-fatal-box {
232
283
  max-width: 560px;
233
284
  background: var(--kc-panel);
234
- border: 1px solid var(--kc-border-strong);
235
- border-radius: 10px;
285
+ border: 1px solid var(--kc-border);
286
+ border-radius: var(--kc-radius);
236
287
  padding: 20px 22px;
237
288
  }
238
289
  .kc-fatal-title { font-weight: 600; margin-bottom: 8px; color: var(--kc-err); }
239
290
  .kc-fatal-text { color: var(--kc-muted); margin-bottom: 14px; white-space: pre-wrap; }
240
291
 
241
- /* ---------- \u4E3B\u4F53\u5E03\u5C40 ---------- */
292
+ /* ---------- \u4E3B\u4F53\u5E03\u5C40 ----------
293
+ \u533A\u57DF\u95F4\u53EA\u9760\u5206\u5272\u7EBF\uFF1A\u5DE6\u5BFC\u822A\u53F3\u4FA7\u4E00\u6761 hairline\uFF0C\u65E0 margin\u3001\u65E0 gap\u3001\u65E0\u9762\u677F\u63CF\u8FB9\u3002 */
242
294
  .kc-app-body {
243
295
  display: flex;
244
- gap: 10px;
245
- padding: 10px;
296
+ gap: 0;
297
+ padding: 0;
246
298
  flex: 1;
247
299
  min-height: 0;
248
300
  }
@@ -252,9 +304,10 @@ button.kc-sidebar-entry[data-active='true']:hover {
252
304
  display: flex;
253
305
  flex-direction: column;
254
306
  min-height: 0;
255
- background: var(--kc-panel);
256
- border: 1px solid var(--kc-border);
257
- border-radius: var(--kc-radius);
307
+ background: transparent;
308
+ border: 0;
309
+ border-right: 1px solid var(--kc-border);
310
+ border-radius: 0;
258
311
  overflow: hidden;
259
312
  }
260
313
  .kc-main {
@@ -262,48 +315,67 @@ button.kc-sidebar-entry[data-active='true']:hover {
262
315
  min-width: 0;
263
316
  display: flex;
264
317
  flex-direction: column;
265
- background: var(--kc-panel);
266
- border: 1px solid var(--kc-border);
267
- border-radius: var(--kc-radius);
318
+ background: transparent;
319
+ border: 0;
320
+ border-radius: 0;
268
321
  overflow: hidden;
269
322
  }
270
323
 
271
- /* ---------- TabBar\uFF08\u4F1A\u8BDD\uFF09 ---------- */
324
+ /* ---------- TabBar\uFF08\u4F1A\u8BDD\uFF09----------
325
+ \u756A\u8304\u5DE5\u4F5C\u53F0 pageTabs \u540C\u6B3E\uFF1A\u6587\u5B57 Tab + \u4E3B\u9898\u8272\u4E0B\u5212\u7EBF\u6307\u793A\uFF1B\u5E95\u90E8\u4E00\u6761\u5206\u5272\u7EBF\u3002 */
272
326
  .kc-tabbar {
273
327
  display: flex;
274
- align-items: center;
328
+ align-items: stretch;
275
329
  gap: 4px;
276
- padding: 8px 10px 0;
330
+ height: calc(var(--kc-tabbar-h, 32px) - 1px);
331
+ padding: 0 10px;
277
332
  overflow-x: auto;
333
+ overflow-y: hidden;
278
334
  scrollbar-width: thin;
335
+ scrollbar-color: var(--kc-border-strong) transparent;
279
336
  border-bottom: 1px solid var(--kc-border);
280
- background: linear-gradient(180deg, #1a2230, #151b28);
337
+ background: transparent;
281
338
  flex: 0 0 auto;
282
339
  }
283
340
  .kc-tab {
341
+ position: relative;
284
342
  display: inline-flex;
285
343
  align-items: center;
286
344
  gap: 6px;
287
345
  flex: 0 0 auto;
346
+ height: 100%;
288
347
  max-width: 240px;
289
- padding: 5px 10px;
290
- background: var(--kc-panel-2);
291
- border: 1px solid var(--kc-border);
292
- border-bottom: 0;
293
- border-radius: 8px 8px 0 0;
348
+ min-width: 0;
349
+ padding: 0 6px;
350
+ background: transparent;
351
+ border: 0;
352
+ border-radius: 0;
294
353
  color: var(--kc-muted);
295
354
  cursor: pointer;
296
- font-size: 12px;
355
+ font-size: 12.5px;
297
356
  user-select: none;
357
+ white-space: nowrap;
358
+ transition: color var(--kc-ease);
359
+ }
360
+ .kc-tab::after {
361
+ content: '';
362
+ position: absolute;
363
+ right: 2px;
364
+ bottom: -1px;
365
+ left: 2px;
366
+ height: 2px;
367
+ border-radius: 2px;
368
+ background: transparent;
298
369
  }
299
370
  .kc-tab:hover { color: var(--kc-text); }
300
371
  .kc-tab-active {
301
- background: var(--kc-panel);
302
- border-color: var(--kc-border-strong);
303
- border-bottom-color: var(--kc-panel);
304
- color: var(--kc-text);
305
- margin-bottom: -1px;
372
+ background: transparent;
373
+ border: 0;
374
+ color: var(--kc-accent);
375
+ font-weight: 600;
376
+ margin-bottom: 0;
306
377
  }
378
+ .kc-tab-active::after { background: var(--kc-accent); }
307
379
  .kc-tab-icon { opacity: 0.8; }
308
380
  .kc-tab-label {
309
381
  overflow: hidden;
@@ -312,11 +384,17 @@ button.kc-sidebar-entry[data-active='true']:hover {
312
384
  }
313
385
  .kc-tab-close {
314
386
  padding: 0 3px;
387
+ border: 0;
315
388
  border-radius: 4px;
316
389
  color: var(--kc-muted);
317
390
  font-size: 11px;
391
+ opacity: 0.55;
392
+ }
393
+ .kc-tab-close:hover {
394
+ color: var(--kc-err);
395
+ background: color-mix(in srgb, var(--kc-err) 18%, transparent);
396
+ opacity: 1;
318
397
  }
319
- .kc-tab-close:hover { color: var(--kc-err); background: rgba(255, 95, 86, 0.12); }
320
398
  .kc-tabpanes { flex: 1; min-height: 0; position: relative; }
321
399
  .kc-pane {
322
400
  position: absolute;
@@ -346,16 +424,16 @@ button.kc-sidebar-entry[data-active='true']:hover {
346
424
  .kc-nav-count {
347
425
  font-size: 11px;
348
426
  color: var(--kc-muted);
349
- border: 1px solid var(--kc-border);
427
+ border: 1px solid color-mix(in srgb, var(--kc-border) 80%, transparent);
350
428
  border-radius: 999px;
351
429
  padding: 0 7px;
352
430
  }
353
431
  .kc-warnbox {
354
432
  margin: 0 10px 8px;
355
433
  padding: 8px 10px;
356
- border: 1px solid rgba(224, 179, 65, 0.4);
357
- background: rgba(224, 179, 65, 0.08);
358
- border-radius: 6px;
434
+ border: 0;
435
+ background: var(--dsw-alias-state-warn-secondary, rgba(224, 179, 65, 0.12));
436
+ border-radius: 8px;
359
437
  font-size: 12px;
360
438
  }
361
439
  .kc-warnbox-title { color: var(--kc-warn); font-weight: 600; margin-bottom: 2px; }
@@ -364,10 +442,12 @@ button.kc-sidebar-entry[data-active='true']:hover {
364
442
  flex: 1;
365
443
  min-height: 0;
366
444
  overflow-y: auto;
367
- padding: 0 6px 6px;
445
+ padding: 0 8px 8px;
368
446
  display: flex;
369
447
  flex-direction: column;
370
448
  gap: 4px;
449
+ scrollbar-width: thin;
450
+ scrollbar-color: var(--kc-border-strong) transparent;
371
451
  }
372
452
  .kc-nav-empty {
373
453
  color: var(--kc-muted);
@@ -376,13 +456,14 @@ button.kc-sidebar-entry[data-active='true']:hover {
376
456
  padding: 14px 10px;
377
457
  }
378
458
  .kc-conn {
379
- border: 1px solid var(--kc-border);
459
+ border: 1px solid transparent;
380
460
  border-radius: 8px;
381
461
  overflow: hidden;
382
462
  display: flex;
383
463
  align-items: stretch;
464
+ transition: background var(--kc-ease), border-color var(--kc-ease);
384
465
  }
385
- .kc-conn:hover { border-color: var(--kc-border-strong); }
466
+ .kc-conn:hover { border-color: color-mix(in srgb, var(--kc-border) 72%, transparent); }
386
467
  .kc-conn-main {
387
468
  flex: 1;
388
469
  min-width: 0;
@@ -392,11 +473,14 @@ button.kc-sidebar-entry[data-active='true']:hover {
392
473
  gap: 2px;
393
474
  padding: 7px 10px;
394
475
  text-align: left;
395
- background: var(--kc-panel-2);
476
+ background: transparent;
396
477
  border: 0;
397
478
  border-radius: 0;
398
479
  }
399
- .kc-conn-main:hover { background: var(--kc-accent-weak); border-color: transparent; }
480
+ .kc-conn-main:hover {
481
+ background: var(--dsw-alias-interactive-bg-hover, var(--kc-accent-weak));
482
+ border-color: transparent;
483
+ }
400
484
  .kc-conn-name {
401
485
  font-weight: 600;
402
486
  color: var(--kc-text);
@@ -413,7 +497,7 @@ button.kc-sidebar-entry[data-active='true']:hover {
413
497
  }
414
498
  .kc-conn-server {
415
499
  font-size: 10px;
416
- color: #5b6475;
500
+ color: var(--kc-faint);
417
501
  font-family: var(--kc-mono);
418
502
  overflow: hidden;
419
503
  text-overflow: ellipsis;
@@ -431,8 +515,8 @@ button.kc-sidebar-entry[data-active='true']:hover {
431
515
  justify-content: center;
432
516
  gap: 4px;
433
517
  padding: 4px 6px;
434
- background: var(--kc-panel-2);
435
- border-left: 1px solid var(--kc-border);
518
+ background: transparent;
519
+ border-left: 1px solid color-mix(in srgb, var(--kc-border) 60%, transparent);
436
520
  }
437
521
  .kc-icon-btn {
438
522
  width: 26px;
@@ -442,9 +526,15 @@ button.kc-sidebar-entry[data-active='true']:hover {
442
526
  align-items: center;
443
527
  justify-content: center;
444
528
  font-size: 12px;
445
- border-radius: 5px;
529
+ border-radius: 6px;
530
+ border-color: transparent;
531
+ color: var(--kc-muted);
446
532
  }
447
- .kc-icon-btn-danger:hover:not(:disabled) { color: var(--kc-err); border-color: var(--kc-err); }
533
+ .kc-icon-btn:hover:not(:disabled) {
534
+ color: var(--kc-accent);
535
+ background: var(--dsw-alias-interactive-bg-hover, var(--kc-accent-weak));
536
+ }
537
+ .kc-icon-btn-danger:hover:not(:disabled) { color: var(--kc-err); }
448
538
  .kc-nav-foot {
449
539
  padding: 8px 10px;
450
540
  border-top: 1px solid var(--kc-border);
@@ -460,7 +550,7 @@ button.kc-sidebar-entry[data-active='true']:hover {
460
550
  display: flex;
461
551
  align-items: center;
462
552
  justify-content: center;
463
- background: rgba(4, 8, 14, 0.6);
553
+ background: var(--dsw-alias-bg-mask-1, rgba(4, 8, 14, 0.6));
464
554
  backdrop-filter: blur(2px);
465
555
  }
466
556
  .kc-modal {
@@ -468,10 +558,10 @@ button.kc-sidebar-entry[data-active='true']:hover {
468
558
  max-height: 88%;
469
559
  overflow-y: auto;
470
560
  background: var(--kc-panel);
471
- border: 1px solid var(--kc-border-strong);
561
+ border: 1px solid var(--kc-border);
472
562
  border-radius: 12px;
473
563
  padding: 16px 18px;
474
- box-shadow: 0 18px 48px rgba(0, 0, 0, 0.5);
564
+ box-shadow: var(--dsw-shadow-lv3, 0 18px 48px rgba(0, 0, 0, 0.5));
475
565
  display: flex;
476
566
  flex-direction: column;
477
567
  gap: 12px;
@@ -481,9 +571,9 @@ button.kc-sidebar-entry[data-active='true']:hover {
481
571
  .kc-field label { font-size: 12px; color: var(--kc-muted); }
482
572
  .kc-form-error {
483
573
  color: var(--kc-err);
484
- background: rgba(255, 95, 86, 0.1);
485
- border: 1px solid rgba(255, 95, 86, 0.3);
486
- border-radius: 6px;
574
+ background: var(--dsw-alias-state-error-secondary, rgba(255, 95, 86, 0.12));
575
+ border: 0;
576
+ border-radius: 8px;
487
577
  padding: 6px 9px;
488
578
  font-size: 12px;
489
579
  white-space: pre-wrap;
@@ -499,33 +589,34 @@ button.kc-sidebar-entry[data-active='true']:hover {
499
589
  display: inline-flex;
500
590
  align-items: center;
501
591
  gap: 2px;
502
- background: var(--kc-panel-2);
503
- border: 1px solid var(--kc-border);
504
- border-radius: 7px;
592
+ background: var(--kc-panel);
593
+ border: 1px solid color-mix(in srgb, var(--kc-border) 72%, transparent);
594
+ border-radius: 999px;
505
595
  padding: 2px;
506
596
  }
507
597
  .kc-seg button {
508
- padding: 4px 12px;
598
+ padding: 3px 11px;
509
599
  font-size: 12px;
510
600
  border: 0;
511
- border-radius: 5px;
601
+ border-radius: 999px;
512
602
  background: transparent;
513
603
  color: var(--kc-muted);
514
604
  white-space: nowrap;
515
605
  }
516
- .kc-seg button:hover:not(:disabled) { color: var(--kc-text); background: rgba(255, 255, 255, 0.05); border: 0; }
606
+ .kc-seg button:hover:not(:disabled) { color: var(--kc-text); background: transparent; border: 0; }
517
607
  .kc-seg button.kc-seg-active {
518
- background: var(--kc-accent);
519
- color: #fff;
608
+ background: var(--kc-accent-weak);
609
+ color: var(--kc-accent);
610
+ font-weight: 600;
520
611
  }
521
- .kc-seg button.kc-seg-active:hover:not(:disabled) { background: #63b8ff; color: #fff; }
612
+ .kc-seg button.kc-seg-active:hover:not(:disabled) { background: var(--kc-accent-weak); color: var(--kc-accent); }
522
613
 
523
614
  /* ---------- \u4EE3\u7801\u8F93\u5165/\u8F93\u51FA ---------- */
524
615
  .kc-code-input {
525
616
  font-family: var(--kc-mono);
526
617
  font-size: 12px;
527
618
  line-height: 1.55;
528
- background: #0b0f16;
619
+ background: var(--kc-panel);
529
620
  resize: vertical;
530
621
  tab-size: 2;
531
622
  }
@@ -536,16 +627,16 @@ button.kc-sidebar-entry[data-active='true']:hover {
536
627
  display: flex;
537
628
  align-items: center;
538
629
  gap: 8px;
539
- padding: 8px 12px;
630
+ padding: 6px 12px;
540
631
  border-bottom: 1px solid var(--kc-border);
541
- background: #121825;
632
+ background: transparent;
542
633
  flex: 0 0 auto;
543
634
  }
544
635
  .kc-ws-meta-name { font-weight: 600; font-size: 13px; }
545
636
  .kc-ws-meta-chip {
546
637
  font-size: 11px;
547
638
  color: var(--kc-muted);
548
- border: 1px solid var(--kc-border);
639
+ border: 1px solid color-mix(in srgb, var(--kc-border) 80%, transparent);
549
640
  border-radius: 999px;
550
641
  padding: 1px 8px;
551
642
  max-width: 320px;
@@ -608,13 +699,15 @@ button.kc-sidebar-entry[data-active='true']:hover {
608
699
  flex: 1;
609
700
  min-height: 0;
610
701
  overflow-y: auto;
611
- background: #0a0e15;
612
- border: 1px solid var(--kc-border);
702
+ background: var(--kc-bg);
703
+ border: 1px solid color-mix(in srgb, var(--kc-border) 60%, transparent);
613
704
  border-radius: 8px;
614
705
  padding: 8px 0;
615
706
  font-family: var(--kc-mono);
616
707
  font-size: 12px;
617
708
  line-height: 1.5;
709
+ scrollbar-width: thin;
710
+ scrollbar-color: var(--kc-border-strong) transparent;
618
711
  }
619
712
  .kc-output-empty {
620
713
  padding: 10px 14px;
@@ -629,23 +722,23 @@ button.kc-sidebar-entry[data-active='true']:hover {
629
722
  font-family: var(--kc-mono);
630
723
  }
631
724
  .kc-out-cmd {
632
- color: #9ccbff;
633
- background: rgba(63, 167, 247, 0.07);
725
+ color: var(--kc-accent);
726
+ background: var(--kc-accent-weak);
634
727
  border-left: 2px solid var(--kc-accent);
635
728
  padding-top: 2px;
636
729
  padding-bottom: 2px;
637
730
  }
638
731
  .kc-out-prompt { color: var(--kc-accent); user-select: none; }
639
- .kc-out-stdout { color: #d6dde8; }
640
- .kc-out-stderr { color: #ffb3a8; }
732
+ .kc-out-stdout { color: var(--kc-text); }
733
+ .kc-out-stderr { color: color-mix(in srgb, var(--kc-err) 72%, var(--kc-text)); }
641
734
  .kc-out-err { color: var(--kc-err); }
642
735
  .kc-out-sys { color: var(--kc-muted); font-size: 11px; }
643
- .kc-out-muted { color: #6b7484; }
736
+ .kc-out-muted { color: var(--kc-faint); }
644
737
  .kc-exitbar {
645
738
  flex: 0 0 auto;
646
739
  font-size: 12px;
647
740
  color: var(--kc-ok);
648
- border-top: 1px solid var(--kc-border);
741
+ border-top: 1px solid color-mix(in srgb, var(--kc-border) 60%, transparent);
649
742
  padding: 5px 4px 0;
650
743
  }
651
744
  .kc-exitbar-err { color: var(--kc-err); }
@@ -686,9 +779,9 @@ button.kc-sidebar-entry[data-active='true']:hover {
686
779
  .kc-chat-warn {
687
780
  font-size: 12px;
688
781
  color: var(--kc-warn);
689
- background: rgba(224, 179, 65, 0.1);
690
- border: 1px solid rgba(224, 179, 65, 0.35);
691
- border-radius: 6px;
782
+ background: var(--dsw-alias-state-warn-secondary, rgba(224, 179, 65, 0.12));
783
+ border: 0;
784
+ border-radius: 8px;
692
785
  padding: 6px 9px;
693
786
  white-space: pre-wrap;
694
787
  }
@@ -700,6 +793,8 @@ button.kc-sidebar-entry[data-active='true']:hover {
700
793
  flex-direction: column;
701
794
  gap: 10px;
702
795
  padding: 4px 2px;
796
+ scrollbar-width: thin;
797
+ scrollbar-color: var(--kc-border-strong) transparent;
703
798
  }
704
799
  .kc-chat-empty {
705
800
  flex: 1;
@@ -720,8 +815,8 @@ button.kc-sidebar-entry[data-active='true']:hover {
720
815
  align-items: center;
721
816
  justify-content: center;
722
817
  border-radius: 50%;
723
- background: var(--kc-panel-2);
724
- border: 1px solid var(--kc-border);
818
+ background: var(--kc-panel);
819
+ border: 1px solid color-mix(in srgb, var(--kc-border) 80%, transparent);
725
820
  font-size: 14px;
726
821
  user-select: none;
727
822
  }
@@ -734,11 +829,11 @@ button.kc-sidebar-entry[data-active='true']:hover {
734
829
  }
735
830
  .kc-chat-user .kc-chat-bubble {
736
831
  background: var(--kc-accent-weak);
737
- border: 1px solid rgba(63, 167, 247, 0.25);
832
+ border: 1px solid color-mix(in srgb, var(--kc-accent) 30%, transparent);
738
833
  }
739
834
  .kc-chat-assistant .kc-chat-bubble {
740
- background: var(--kc-panel-2);
741
- border: 1px solid var(--kc-border);
835
+ background: var(--kc-panel);
836
+ border: 1px solid color-mix(in srgb, var(--kc-border) 70%, transparent);
742
837
  }
743
838
  .kc-chat-user-text { white-space: pre-wrap; }
744
839
  .kc-chat-ai-text { white-space: normal; }
@@ -757,7 +852,7 @@ button.kc-sidebar-entry[data-active='true']:hover {
757
852
  .kc-chat-meta {
758
853
  margin-top: 6px;
759
854
  font-size: 10px;
760
- color: #5b6475;
855
+ color: var(--kc-faint);
761
856
  text-align: right;
762
857
  }
763
858
  .kc-chat-quickrun {
@@ -765,16 +860,16 @@ button.kc-sidebar-entry[data-active='true']:hover {
765
860
  align-items: center;
766
861
  gap: 8px;
767
862
  padding: 6px 10px;
768
- border: 1px dashed var(--kc-border-strong);
863
+ border: 1px dashed color-mix(in srgb, var(--kc-border-strong) 80%, transparent);
769
864
  border-radius: 8px;
770
865
  font-size: 12px;
771
866
  color: var(--kc-muted);
772
- background: #101623;
867
+ background: var(--kc-panel);
773
868
  }
774
869
  .kc-chat-quickrun code {
775
870
  font-family: var(--kc-mono);
776
871
  font-size: 11px;
777
- color: #9ccbff;
872
+ color: var(--kc-accent);
778
873
  overflow: hidden;
779
874
  text-overflow: ellipsis;
780
875
  white-space: nowrap;
@@ -787,18 +882,18 @@ button.kc-sidebar-entry[data-active='true']:hover {
787
882
  /* ---------- \u4EE3\u7801\u5757\uFF08AI \u56DE\u590D\u5185\uFF09 ---------- */
788
883
  .kc-codebox {
789
884
  margin: 6px 0;
790
- border: 1px solid var(--kc-border);
885
+ border: 1px solid color-mix(in srgb, var(--kc-border) 70%, transparent);
791
886
  border-radius: 8px;
792
887
  overflow: hidden;
793
- background: #0a0e15;
888
+ background: var(--kc-bg);
794
889
  }
795
890
  .kc-codebox-head {
796
891
  display: flex;
797
892
  align-items: center;
798
893
  gap: 6px;
799
894
  padding: 3px 6px 3px 10px;
800
- background: #111827;
801
- border-bottom: 1px solid var(--kc-border);
895
+ background: var(--kc-panel);
896
+ border-bottom: 1px solid color-mix(in srgb, var(--kc-border) 60%, transparent);
802
897
  }
803
898
  .kc-codebox-lang {
804
899
  font-size: 11px;
@@ -813,16 +908,21 @@ button.kc-sidebar-entry[data-active='true']:hover {
813
908
  line-height: 1.55;
814
909
  white-space: pre-wrap;
815
910
  word-break: break-word;
816
- color: #d6dde8;
911
+ color: var(--kc-text);
817
912
  max-height: 320px;
818
913
  overflow-y: auto;
914
+ scrollbar-width: thin;
915
+ scrollbar-color: var(--kc-border-strong) transparent;
819
916
  }
820
917
 
821
- /* ---------- \u6EDA\u52A8\u6761 ---------- */
918
+ /* ---------- \u6EDA\u52A8\u6761\uFF08WebKit \u56DE\u843D\uFF1B\u73B0\u4EE3\u6D4F\u89C8\u5668\u8D70 scrollbar-width/color\uFF09 ---------- */
822
919
  #dsh-k8s-console *::-webkit-scrollbar { width: 8px; height: 8px; }
823
- #dsh-k8s-console *::-webkit-scrollbar-thumb { background: #2f3a4e; border-radius: 4px; }
920
+ #dsh-k8s-console *::-webkit-scrollbar-thumb {
921
+ background: color-mix(in srgb, var(--kc-border-strong) 85%, transparent);
922
+ border-radius: 4px;
923
+ }
824
924
  #dsh-k8s-console *::-webkit-scrollbar-track { background: transparent; }
825
- `;var Ve="dsh-k8s-console-style";function Fe(){if(typeof document>"u")return()=>{};let e=document.getElementById(Ve);if(e!==null&&e.isConnected)return()=>{};let t=document.createElement("style");return t.id=Ve,t.setAttribute("data-plugin","dsh-plugin-k8s"),t.textContent=Je,document.head.appendChild(t),()=>{t.isConnected&&t.remove()}}var We={"sidebar.label":"K8s","sidebar.aria":"K8s \u63A7\u5236\u53F0","sidebar.title":"\u6253\u5F00 K8s \u63A7\u5236\u53F0","overlay.close":"\u56DE\u5230\u5BF9\u8BDD"},Xe={"sidebar.label":"K8s","sidebar.aria":"K8s console","sidebar.title":"Open K8s console","overlay.close":"Back to conversation"};var lt=["slots","locale"];function dt({renderSlot:e,standalone:t=!1}){let n=Ee(),o=(0,ae.useRef)(!1);if((0,ae.useEffect)(()=>{n.panelOpen&&(o.current=!0)},[n.panelOpen]),!n.panelOpen&&!t&&!o.current)return null;let c=n.panelOpen||t;return e("k8s.console",{onClose:()=>X.close(),standalone:t,hidden:!c})}function pt(e){let t=e?.slots,n=e?.locale;if(!t||!n)return;let o=n.bind("k8s"),c=n.register("k8s",{zh:We,en:Xe}),x=Fe(),a=t.inject("sidebar.footer.action",()=>t.register({name:"sidebar.footer.action",id:"k8s-console",order:-9,locale:"k8s",label:()=>o("sidebar.label")},Te)),m=t.inject("k8s.console",()=>t.register({name:"k8s.console",id:"dsh",order:0,locale:"k8s",label:()=>o("sidebar.aria")},Be)),u=t.inject("shell.overlay",()=>t.register({name:"shell.overlay",id:"k8s.console",order:70,locale:"k8s",label:()=>o("sidebar.aria"),children:{"k8s.console":{kind:"single",scope:"root"}}},dt));e?.effect&&e.effect(()=>()=>{c(),a(),m(),u(),x()},"dsh-plugin-k8s: plugin teardown")}return et(ut);})();
925
+ `;var Fe="dsh-k8s-console-style";function Xe(){if(typeof document>"u")return()=>{};let e=document.getElementById(Fe);if(e!==null&&e.isConnected)return()=>{};let t=document.createElement("style");return t.id=Fe,t.setAttribute("data-plugin","dsh-plugin-k8s"),t.textContent=We,document.head.appendChild(t),()=>{t.isConnected&&t.remove()}}var _e={"sidebar.label":"K8s","sidebar.aria":"K8s \u63A7\u5236\u53F0","sidebar.title":"\u6253\u5F00 K8s \u63A7\u5236\u53F0","overlay.close":"\u56DE\u5230\u5BF9\u8BDD"},qe={"sidebar.label":"K8s","sidebar.aria":"K8s console","sidebar.title":"Open K8s console","overlay.close":"Back to conversation"};var kt=["slots","locale"];function bt(e){let t=e?.slots,o=e?.locale;if(!t||!o)return;let n=o.bind("k8s"),a=o.register("k8s",{zh:_e,en:qe}),k=Xe(),s=t.inject("sidebar.footer.action",()=>t.register({name:"sidebar.footer.action",id:"k8s-console",order:-9,locale:"k8s",label:()=>n("sidebar.label")},Te)),v=t.inject("conversation.view",()=>t.register({name:"conversation.view",id:"k8s",order:65,locale:"k8s",label:()=>n("sidebar.label")},Je));e?.effect&&e.effect(()=>()=>{a(),s(),v(),k()},"dsh-plugin-k8s: plugin teardown")}return nt(ft);})();
826
926
  return __dsh_k8s_module__;
827
927
  },
828
928
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@snowlocked/dsh-k8s-console",
3
- "version": "0.3.0",
3
+ "version": "0.3.2",
4
4
  "description": "DSH K8s 控制台插件:管理 kubeconfig,点击即开会话 Tab(同一集群可开多个),每个会话含「kubectl 命令控制台」与「AI 对话」两个子页;AI 复用 DSH 自身模型配置。",
5
5
  "license": "MIT",
6
6
  "type": "module",