@snowlocked/dsh-k8s-console 0.3.1 → 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 +260 -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 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 ot=e=>tt(de({},"__esModule",{value:!0}),e);var ft={};et(ft,{apply:()=>bt,inject:()=>kt});var oe=E("react");var nt=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 b=a.textContent?.trim().toLowerCase()??"",c=`${a.getAttribute("aria-label")??""} ${a.title??""}`.toLowerCase();return e==="k8s"?b==="k8s"||c.includes("k8s"):b==="chat"||b==="\u5BF9\u8BDD"||c.includes("chat")||c.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{}},X={open(){ee||(ee=!0,ue=Pe,Se(),Ne()),we("k8s")},close(){ee=!1,ue=Ee,Se(),Ne(),we("chat")},toggle(){Ce?X.close():X.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 $e(e={}){let{wide:t=!0,t:o=(c=>c)}=e,n=o,a=(0,oe.useSyncExternalStore)(X.subscribe,X.getSnapshot,X.getSnapshot),b=(0,oe.useCallback)(()=>{X.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:b,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 ne=E("react"),Ve=E("react-dom/client");var z=E("react");var Te="/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(`${Te}${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(`${Te}${e}`,{...Ke(t),...n?{signal:n}:{}})}catch(m){throw n?.aborted?m:new U(`\u7F51\u7EDC\u8BF7\u6C42\u5931\u8D25\uFF1A${m instanceof Error?m.message:String(m)}`,0)}if(!a.ok||!a.body){let m=`HTTP ${a.status}`;try{let k=await a.json();k?.error&&(m=k.error)}catch{}throw new U(m,a.status)}let b=a.body.getReader(),c=new TextDecoder("utf-8"),P="";for(;;){let m;try{m=await b.read()}catch(h){throw n?.aborted?h:new U(`\u8BFB\u53D6\u6D41\u5931\u8D25\uFF1A${h instanceof Error?h.message:String(h)}`,0)}if(m.done)break;P+=c.decode(m.value,{stream:!0});let k;for(;(k=P.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 h=P.slice(0,k);if(P=P.slice(k+2),h.startsWith("data: ")){let T=h.slice(6).trim();if(!T)continue;try{o(JSON.parse(T))}catch{}}}}if(P.startsWith("data: ")){let m=P.slice(6).trim();if(m)try{o(JSON.parse(m))}catch{}}}var j={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 Me(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 ze(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 Re(e){let{kubeconfigs:t,busyList:o,refresh:n,onOpenSession:a,onFlash:b}=e,[c,P]=(0,H.useState)(fe),[m,k]=(0,H.useState)(null),h=e.stateInfo?.kubectl,T=(0,H.useRef)(null);(0,H.useEffect)(()=>{c.open&&c.mode==="paste"&&T.current?.focus()},[c.open,c.mode]);let g=(0,H.useCallback)(s=>{P(w=>({...w,...s}))},[]),K=(0,H.useCallback)(()=>{P(fe)},[]),M=(0,H.useCallback)(async()=>{if(c.busy)return;let s=c.name.trim();if(!s){g({error:"\u8BF7\u586B\u5199 kubeconfig \u540D\u79F0\uFF08\u663E\u793A\u7528\uFF09"});return}if(c.mode==="paste"&&c.content.trim()===""){g({error:"\u8BF7\u7C98\u8D34 kubeconfig \u5185\u5BB9\uFF0C\u6216\u6539\u7528\u201C\u672C\u673A\u6587\u4EF6\u5BFC\u5165\u201D"});return}if(c.mode==="path"&&c.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 j.save({name:s,content:c.mode==="paste"?c.content:void 0,filePath:c.mode==="path"?c.filePath:void 0}),K(),b("ok",`\u5DF2\u4FDD\u5B58 kubeconfig\u300C${s}\u300D`),n()}catch(w){g({error:await W(w)})}finally{g({busy:!1})}},[c,g,K,b,n]),R=(0,H.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`)){k(`rm:${s.id}`);try{let{ok:I}=await j.remove(s.id);I?(b("info",`\u5DF2\u5220\u9664\u300C${s.name}\u300D`),n()):b("error","\u5220\u9664\u5931\u8D25\uFF1A\u670D\u52A1\u7AEF\u672A\u786E\u8BA4")}catch(I){b("error",`\u5220\u9664\u5931\u8D25\uFF1A${await W(I)}`)}finally{k(null)}}},[b,n]),B=(0,H.useCallback)(async s=>{k(`check:${s.id}`);try{let w=await j.check(s.id);b(w.ok?"ok":"error",`\u300C${s.name}\u300D${w.ok?"\u2705 \u96C6\u7FA4\u53EF\u8FBE":"\u274C \u4E0D\u53EF\u8FBE"}\uFF1A${w.message}`)}catch(w){b("error",`\u300C${s.name}\u300D\u68C0\u67E5\u5931\u8D25\uFF1A${await W(w)}`)}finally{k(null),n()}},[b,n]),O=(0,H.useCallback)(async s=>{k(`copy:${s.id}`);try{let{content:w}=await j.raw(s.id);await navigator.clipboard.writeText(w),b("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(w){b("error",`\u590D\u5236\u5931\u8D25\uFF1A${await W(w)}`)}finally{k(null)}},[b]);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"})]}),h&&!h.present?(0,p.jsxs)("div",{className:"kc-warnbox",title:h.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:h.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(s=>{let w=m===`rm:${s.id}`||m===`check:${s.id}`||m===`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:()=>a(s),disabled:o,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 ${be(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:w,onClick:()=>void B(s),children:w&&m===`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:w,onClick:()=>void O(s),children:w&&m===`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 ${be(s.updatedAt)}\uFF09`,disabled:w,onClick:()=>void R(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",h?.present&&h.version?(0,p.jsxs)("div",{children:["kubectl ",h.version]}):null]})}),c.open?(0,p.jsx)("div",{className:"kc-modal-mask",onMouseDown:s=>{s.target===s.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:c.name,onChange:s=>g({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":c.mode==="paste",className:c.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":c.mode==="path",className:c.mode==="path"?"kc-seg-active":"",onClick:()=>g({mode:"path"}),children:"\u{1F4C1} \u5BFC\u5165\u672C\u673A\u6587\u4EF6"})]}),c.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:T,className:"kc-code-input",rows:10,value:c.content,onChange:s=>g({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:c.filePath,onChange:s=>g({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"})]}),c.error?(0,p.jsx)("div",{className:"kc-form-error",children:c.error}):null,(0,p.jsxs)("div",{className:"kc-modal-actions",children:[(0,p.jsx)("button",{onClick:K,disabled:c.busy,children:"\u53D6\u6D88"}),(0,p.jsx)("button",{className:"kc-btn-primary",onClick:()=>void M(),disabled:c.busy,children:c.busy?"\u4FDD\u5B58\u5E76\u89E3\u6790\u2026":"\u4FDD\u5B58"})]})]})}):null]})}var G=E("react");var N=E("react");var y=E("react/jsx-runtime"),Ie=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 Oe=(0,N.forwardRef)(function({kube:t},o){let[n,a]=(0,N.useState)(""),[b,c]=(0,N.useState)(""),[P,m]=(0,N.useState)(""),[k,h]=(0,N.useState)(!1),[T,g]=(0,N.useState)([]),[K,M]=(0,N.useState)(null),[R,B]=(0,N.useState)([]),[O,s]=(0,N.useState)(-1),[w,I]=(0,N.useState)(null),F=(0,N.useRef)(null),u=(0,N.useRef)(null),f=(0,N.useRef)(null),A=(0,N.useRef)(()=>{}),$=(0,N.useCallback)(r=>{g(l=>{let x=[...l,r];return x.length>Ie?x.slice(x.length-Ie):x})},[]);(0,N.useEffect)(()=>{let r=u.current;r&&(r.scrollTop=r.scrollHeight)},[T,k,K]);let V=(0,N.useCallback)(()=>{F.current?.abort()},[]),_=(0,N.useCallback)(async r=>{let l=r.trim();if(!l||k)return;let x=l.split(`
20
- `).filter(C=>C.trim()!==""&&!C.trim().startsWith("#")).join(`
21
- `).trim();if(!x)return;F.current=new AbortController;let L=F.current.signal;h(!0),M(null),s(-1),$({kind:"cmd",text:x}),B(C=>[...C.slice(-99),x]);let Ye=C=>{if(C.type==="start")$({kind:"sys",text:`\u25B6 ${String(C.command??`kubectl ${x}`)}`}),I(`\u6B63\u5728\u6267\u884C ${String(C.command??"")} \u2026\uFF08\u53EF\u968F\u65F6\u4E2D\u6B62\uFF09`);else if(C.type==="out"){let ie=C.channel==="stderr"?"stderr":"stdout",te=typeof C.text=="string"?C.text:"";te&&$({kind:"out",channel:ie,text:te})}else if(C.type==="exit"){let ie=typeof C.code=="number"?C.code:null,te=typeof C.signal=="string"?C.signal:null,Ue=typeof C.durationMs=="number"?C.durationMs:0,ve=C.truncated===!0,ce=typeof C.reason=="string"?C.reason:void 0;M({code:ie,signal:te,durationMs:Ue,truncated:ve,reason:ce});let le=st(ce);ve&&!le&&$({kind:"sys",text:"\u8F93\u51FA\u8D85\u8FC7\u4E0A\u9650\u5DF2\u622A\u65AD",tone:"err"}),le&&$({kind:"sys",text:le,tone:ce==="aborted"?"muted":"err"}),I(null)}else C.type==="error"&&($({kind:"err",text:String(C.message??"\u672A\u77E5\u9519\u8BEF")}),I(null))};try{await j.run({id:t.id,command:x,context:b,namespace:P},Ye,L),L.aborted&&($({kind:"sys",text:"\u5DF2\u4E2D\u6B62",tone:"muted"}),M(C=>C??{code:null,signal:null,durationMs:0,truncated:!1,reason:"aborted"}))}catch(C){L.aborted?$({kind:"sys",text:"\u5DF2\u4E2D\u6B62",tone:"muted"}):$({kind:"err",text:await W(C)}),I(null)}finally{h(!1),F.current=null}},[t.id,k,b,P,$]);A.current=_,(0,N.useImperativeHandle)(o,()=>({runText(r){a(r),f.current?.focus(),window.setTimeout(()=>{let l=A.current;l&&l(r)},0)}}),[]);let Y=(0,N.useCallback)(()=>{_(n)},[_,n]),q=(0,N.useCallback)(r=>{if(r.key==="Enter"&&!r.shiftKey&&!r.nativeEvent.isComposing){r.preventDefault(),Y();return}if(r.key==="ArrowUp"&&R.length>0){let l=O<0?R.length-1:Math.max(0,O-1);s(l),a(R[l]??""),r.preventDefault()}else if(r.key==="ArrowDown"&&O>=0){if(O>=R.length-1)s(-1),a("");else{let l=O+1;s(l),a(R[l]??"")}r.preventDefault()}},[R,O,Y]),ae=(0,N.useCallback)(()=>{g([]),M(null)},[]),se=(0,N.useCallback)(async()=>{let r=T.filter(l=>l.kind==="cmd"||l.kind==="out").map(l=>l.kind==="cmd"?`$ ${l.text}`:l.text).join("");try{await navigator.clipboard.writeText(r),I("\u5DF2\u590D\u5236\u8F93\u51FA"),window.setTimeout(()=>I(null),1500)}catch(l){I(`\u590D\u5236\u5931\u8D25\uFF1A${l instanceof Error?l.message:String(l)}`)}},[T]),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,y.jsxs)("div",{className:"kc-console",children:[(0,y.jsxs)("div",{className:"kc-console-toolbar",children:[(0,y.jsxs)("div",{className:"kc-console-env",children:[(0,y.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,y.jsxs)("select",{value:b,onChange:r=>c(r.target.value),disabled:k,children:[(0,y.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,y.jsx)("option",{value:r,children:r},r))]})]}),(0,y.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,y.jsx)("input",{value:P,onChange:r=>m(r.target.value),placeholder:"default",disabled:k,spellCheck:!1})]})]}),(0,y.jsx)("div",{className:"kc-grow"}),(0,y.jsx)("button",{className:"kc-btn-sm",onClick:ae,title:"\u6E05\u7A7A\u8F93\u51FA",children:"\u6E05\u7A7A"}),(0,y.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,y.jsx)("button",{className:"kc-btn-sm",onClick:()=>{a(at.join(`
22
- `)),f.current?.focus()},title:"\u586B\u5165\u5E38\u7528\u793A\u4F8B",children:"\u793A\u4F8B"})]}),(0,y.jsxs)("div",{className:"kc-console-input-row",children:[(0,y.jsx)("textarea",{ref:f,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
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
+ `).filter(S=>S.trim()!==""&&!S.trim().startsWith("#")).join(`
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}),k?(0,y.jsx)("button",{className:"kc-btn-primary kc-btn-stop",onClick:V,title:"\u4E2D\u6B62\u5F53\u524D\u547D\u4EE4",children:"\u25A0 \u4E2D\u6B62"}):(0,y.jsx)("button",{className:"kc-btn-primary",onClick:Y,disabled:n.trim()==="",title:"\u6267\u884C\uFF08Ctrl+Enter \u4EA6\u53EF\uFF09",children:"\u25B6 \u6267\u884C"})]}),w?(0,y.jsx)("div",{className:"kc-console-status",children:w}):null,(0,y.jsx)("div",{className:"kc-output",ref:u,children:T.length===0?(0,y.jsx)("div",{className:"kc-output-empty",children:(0,y.jsxs)("div",{className:"kc-muted",children:["\u8F93\u5165\u547D\u4EE4\u5F00\u59CB\uFF08",t.name,b?` \xB7 --context ${b}`:"",P?` \xB7 -n ${P}`:"","\uFF09\u3002",(0,y.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"]})}):T.map((r,l)=>r.kind==="cmd"?(0,y.jsxs)("div",{className:"kc-out-line kc-out-cmd",children:[(0,y.jsx)("span",{className:"kc-out-prompt",children:"$"})," ",r.text]},l):r.kind==="out"?(0,y.jsx)("pre",{className:`kc-out-line kc-out-${r.channel}${r.text.endsWith(`
26
- `),""}`,children:r.text},l):r.kind==="err"?(0,y.jsxs)("div",{className:"kc-out-line kc-out-err",children:["\u2715 ",r.text]},l):(0,y.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,y.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 ",i(K),K.truncated?" \xB7 \u26A0\uFE0F \u8F93\u51FA\u88AB\u622A\u65AD":"",k?" \xB7 \u8FD0\u884C\u4E2D":""]}):null]})});var S=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,S.useState)([]),[a,b]=(0,S.useState)(""),[c,P]=(0,S.useState)(!1),[m,k]=(0,S.useState)(null),[h,T]=(0,S.useState)(!1),[g,K]=(0,S.useState)(""),[M,R]=(0,S.useState)(null),B=(0,S.useRef)(null),O=(0,S.useRef)(null),s=(0,S.useRef)(null),w=(0,S.useCallback)(async()=>{T(!0);try{k(await j.aiModels())}catch(i){k(null),R(`\u6A21\u578B\u679A\u4E3E\u5931\u8D25\uFF1A${await W(i)}`)}finally{T(!1)}},[]);(0,S.useEffect)(()=>{w()},[w]);let I=(0,S.useMemo)(()=>m?Me(m):[],[m]),F=(0,S.useMemo)(()=>I.find(i=>i.key===g),[I,g]);(0,S.useEffect)(()=>{let i=O.current;i&&(i.scrollTop=i.scrollHeight)},[o]);let u=(0,S.useCallback)(i=>{n(r=>[...r,{...i,key:it()}])},[]),f=(0,S.useCallback)(i=>{n(r=>{if(r.length===0)return r;let l=r[r.length-1];if(l.role!=="assistant")return r;let x={...l,...i};i.content&&typeof i.content=="string"&&(x.content=l.content+i.content);let L=[...r];return L[L.length-1]=x,L})},[]),A=(0,S.useCallback)(()=>{B.current?.abort()},[]),$=(0,S.useCallback)(async()=>{let i=a.trim();if(!i||c)return;b(""),R(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:i}),u({role:"user",content:i}),u({role:"assistant",content:"",state:"streaming"}),P(!0),B.current=new AbortController;let l=B.current.signal;try{await j.chat({id:e.id,provider:F?.provider,model:F?.model,history:r.slice(-40)},x=>{x.type==="delta"&&typeof x.text=="string"?f({content:x.text}):x.type==="done"?f({state:"done",meta:{...typeof x.provider=="string"?{provider:x.provider}:{},...typeof x.model=="string"?{model:x.model}:{}}}):x.type==="aborted"?f({state:"done"}):x.type==="error"&&f({state:"error",content:`\u26A0\uFE0F ${String(x.message??"AI \u51FA\u9519")}`})},l)}catch(x){if(l.aborted)f({state:"done"});else{let L=await W(x);f({state:"error",content:`\u26A0\uFE0F ${L}`})}}finally{P(!1),B.current=null}},[a,c,o,F,e.id,u,f]),V=(0,S.useCallback)(i=>{i.key==="Enter"&&!i.shiftKey&&!i.nativeEvent.isComposing&&(i.preventDefault(),$())},[$]),_=(0,S.useCallback)(()=>{c&&A(),n([]),R(null)},[c,A]),Y=[...o].reverse().find(i=>i.role==="assistant"&&i.state==="done"),q=Y?ct(Y.content):null,ae=(0,S.useCallback)(async i=>{try{await navigator.clipboard.writeText(i)}catch{}},[]),se=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=lt(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,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)}),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:g,onChange:i=>K(i.target.value),disabled:c||h,children:[(0,d.jsx)("option",{value:"",children:"\u81EA\u52A8\uFF08\u7531 DSH \u9009\u62E9\uFF09"}),I.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 w(),disabled:h,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&&!c,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,"")}`:""]})]}),m&&!m.ok?(0,d.jsxs)("div",{className:"kc-chat-warn",children:["\u26A0\uFE0F ",m.message??"\u6CA1\u6709\u53EF\u7528\u6A21\u578B","\uFF08\u914D\u7F6E\u597D\u540E\u70B9\u201C\u21BB \u6A21\u578B\u201D\u5237\u65B0\uFF09"]}):null,M?(0,d.jsxs)("div",{className:"kc-chat-warn",children:["\u26A0\uFE0F ",M]}):null,(0,d.jsxs)("div",{className:"kc-chat-scroll",ref:O,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(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:[se(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)),q&&!c?(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:s,className:"kc-code-input kc-chat-input",value:a,onChange:i=>b(i.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}),c?(0,d.jsx)("button",{className:"kc-btn-primary kc-btn-stop",onClick:A,children:"\u25A0 \u505C\u6B62"}):(0,d.jsx)("button",{className:"kc-btn-primary",onClick:()=>void $(),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}),b=(0,G.useRef)(null),c=(0,G.useCallback)(k=>{o(k),a(h=>h[k]?h:{...h,[k]:!0})},[]),P=(0,G.useCallback)(k=>{c("console"),window.setTimeout(()=>{b.current?.runText(k)},0)},[c]),m=(k,h,T)=>(0,D.jsx)("button",{type:"button",role:"tab","aria-selected":t===k,title:T,className:t===k?"kc-seg-active":"",onClick:()=>c(k),children:h});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:[m("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"),m("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)(Oe,{ref:b,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:P})}):null]})]})}var v=E("react/jsx-runtime"),je=0;function dt(){return je+=1,`session_${Date.now().toString(36)}_${je}`}function ge(e={}){let[t,o]=(0,z.useState)([]),[n,a]=(0,z.useState)(null),[b,c]=(0,z.useState)(!1),[P,m]=(0,z.useState)(null),[k,h]=(0,z.useState)(null),T=(0,z.useRef)(!0),[g,K]=(0,z.useState)([]),[M,R]=(0,z.useState)(null),B=(0,z.useCallback)((u,f)=>{h({kind:u,text:f}),window.setTimeout(()=>h(A=>A?.text===f?null:A),u==="error"?6e3:2600)},[]),O=(0,z.useCallback)(async()=>{c(!0);try{let[u,{kubeconfigs:f}]=await Promise.all([j.state(!0),j.kubeconfigs()]);a(u),o(f),m(null)}catch(u){let f=await W(u);m(`\u65E0\u6CD5\u8FDE\u63A5\u63D2\u4EF6\u670D\u52A1\uFF1A${f}\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`),B("error",`\u52A0\u8F7D\u5931\u8D25\uFF1A${f}`)}finally{c(!1)}},[B]);(0,z.useEffect)(()=>{T.current&&(T.current=!1,O())},[O]),(0,z.useEffect)(()=>{let u=new Set(t.map(f=>f.id));K(f=>{let A=f.filter($=>u.has($.kube.id));return A.length===f.length?f:A})},[t]),(0,z.useEffect)(()=>{M!==null&&!g.some(u=>u.key===M)&&R(g.length>0?g[g.length-1].key:null)},[g,M]);let s=(0,z.useCallback)(u=>{let f={key:dt(),kube:u};K(A=>[...A,f]),R(f.key)},[]),w=(0,z.useCallback)(u=>{let f=g.findIndex(V=>V.key===u);if(K(V=>V.filter(_=>_.key!==u)),M!==u)return;let A=f>=0?g[f+1]:void 0,$=f>=0?g[f-1]:void 0;R((A??$)?.key??null)},[g,M]),I=(u,f)=>{let A=g.slice(0,f+1).filter(q=>q.kube.id===u.kube.id).length,$=g.filter(q=>q.kube.id===u.kube.id).length,V=u.kube.name,_=$>1?`${V} #${A}`:V,Y=u.kube.currentContext?` \xB7 ${u.kube.currentContext}`:"";return{title:_,sub:`${u.kube.name}${Y} \u2014 \u4F1A\u8BDD ${A}`}},F=u=>(0,v.jsx)(Le,{kube:u.kube},u.key);return(0,v.jsxs)("div",{className:"kc-app",children:[(0,v.jsxs)("div",{className:"kc-topbar",children:[(0,v.jsxs)("div",{className:"kc-title",children:[(0,v.jsx)("span",{className:"kc-logo",children:"K8s"})," K8s \u63A7\u5236\u53F0",(0,v.jsx)("span",{className:"kc-badge",children:"dsh-plugin-k8s"}),n?.kubectl.version?(0,v.jsxs)("span",{className:"kc-badge kc-badge-ok",children:["kubectl ",n.kubectl.version]}):null,n&&!n.kubectl.present?(0,v.jsx)("span",{className:"kc-badge kc-badge-bad",title:n.kubectl.missingReason,children:"kubectl \u672A\u627E\u5230"}):null]}),(0,v.jsx)("div",{className:"kc-grow"}),k?(0,v.jsx)("span",{className:`kc-notice kc-notice-${k.kind}`,title:k.text,children:k.text}):null,b?(0,v.jsx)("span",{className:"kc-muted",children:"\u2026"}):null,e.onClose?(0,v.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]}),P?(0,v.jsx)("div",{className:"kc-fatal",children:(0,v.jsxs)("div",{className:"kc-fatal-box",children:[(0,v.jsx)("div",{className:"kc-fatal-title",children:"\u26A0\uFE0F K8s \u63A7\u5236\u53F0\u6682\u65F6\u4E0D\u53EF\u7528"}),(0,v.jsx)("div",{className:"kc-fatal-text",children:P}),(0,v.jsx)("button",{onClick:()=>{m(null),O()},children:"\u91CD\u8BD5"})]})}):(0,v.jsxs)("div",{className:"kc-app-body",children:[(0,v.jsx)(Re,{kubeconfigs:t,busyList:b,refresh:O,onOpenSession:s,onFlash:B,stateInfo:n}),(0,v.jsxs)("div",{className:"kc-main",children:[(0,v.jsxs)("div",{className:"kc-tabbar",role:"tablist","aria-label":"\u5DF2\u6253\u5F00\u7684\u96C6\u7FA4\u4F1A\u8BDD",children:[g.length===0?(0,v.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,f)=>{let{title:A,sub:$}=I(u,f);return(0,v.jsxs)("div",{role:"tab","aria-selected":u.key===M,className:`kc-tab${u.key===M?" kc-tab-active":""}`,title:`${$} \u2014\u2014 \u70B9\u51FB\u5207\u6362\uFF0C\u2715 \u5173\u95ED`,onClick:()=>R(u.key),children:[(0,v.jsx)("span",{className:"kc-tab-icon",children:"\u2388"}),(0,v.jsx)("span",{className:"kc-tab-label",children:A}),(0,v.jsx)("span",{className:"kc-tab-close",title:"\u5173\u95ED",onClick:V=>{V.stopPropagation(),w(u.key)},children:"\u2715"})]},u.key)})]}),(0,v.jsx)("div",{className:"kc-tabpanes",children:g.length===0?(0,v.jsxs)("div",{className:"kc-empty",style:{flex:1},children:[(0,v.jsx)("div",{style:{fontSize:30,opacity:.5},children:"\u2388"}),(0,v.jsx)("div",{children:"\u8FD8\u6CA1\u6709\u6253\u5F00\u4EFB\u4F55\u96C6\u7FA4\u4F1A\u8BDD\u3002"}),(0,v.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,v.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,v.jsx)("div",{role:"tabpanel",className:"kc-pane","data-active":u.key===M?"true":void 0,style:u.key===M?void 0:{display:"none"},children:F(u)},u.key))})]})]})]})}var xe=E("react/jsx-runtime"),Q=null,Be=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),Be=(0,Ve.createRoot)(Q),Be.render((0,xe.jsx)(ge,{onClose:()=>X.close(),standalone:!1}))),Q}function Je(e){let t=(0,ne.useRef)(null);return(0,ne.useEffect)(()=>{let o=t.current;if(o===null)return;let n=pt(),a=o.closest("[data-phase]")??o.parentElement;return a!=null&&(X.setDocked(!0),n.style.display="flex",n.parentElement!==a&&a.appendChild(n)),()=>{X.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\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;
@@ -86,35 +134,27 @@ button.kc-sidebar-entry[data-active='true']:hover {
86
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
87
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
88
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 */
89
- #dsh-k8s-console {
90
- color: var(--kc-text);
91
- font-size: 13px;
92
- line-height: 1.5;
93
- box-sizing: border-box;
94
- }
95
- #dsh-k8s-console *,
96
- #dsh-k8s-console *::before,
97
- #dsh-k8s-console *::after {
98
- box-sizing: border-box;
99
- }
100
137
  #dsh-k8s-console input,
101
138
  #dsh-k8s-console select,
102
139
  #dsh-k8s-console textarea,
103
140
  #dsh-k8s-console button {
104
141
  font: inherit;
105
142
  color: var(--kc-text);
106
- background: var(--kc-panel-2);
107
- border: 1px solid var(--kc-border);
108
- border-radius: 6px;
143
+ background: transparent;
144
+ border: 1px solid color-mix(in srgb, var(--kc-border) 72%, transparent);
145
+ border-radius: 8px;
109
146
  }
110
147
  #dsh-k8s-console button {
111
148
  padding: 5px 11px;
112
149
  cursor: pointer;
113
- transition: background 0.12s, border-color 0.12s;
150
+ transition: background var(--kc-ease), border-color var(--kc-ease), color var(--kc-ease);
114
151
  }
115
152
  #dsh-k8s-console button:hover:not(:disabled) {
116
- border-color: var(--kc-accent);
117
- 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;
118
158
  }
119
159
  #dsh-k8s-console button:disabled {
120
160
  opacity: 0.45;
@@ -122,30 +162,33 @@ button.kc-sidebar-entry[data-active='true']:hover {
122
162
  }
123
163
  #dsh-k8s-console button.kc-btn-primary {
124
164
  background: var(--kc-accent);
125
- border-color: var(--kc-accent);
126
- color: #fff;
165
+ border-color: transparent;
166
+ color: var(--dsw-alias-label-primary-inverted, #fff);
167
+ font-weight: 600;
127
168
  }
128
169
  #dsh-k8s-console button.kc-btn-primary:hover:not(:disabled) {
129
- background: #63b8ff;
130
- border-color: #63b8ff;
170
+ background: color-mix(in srgb, var(--kc-accent) 86%, #fff);
131
171
  }
132
172
  #dsh-k8s-console button.kc-btn-stop {
133
- background: #c0392b;
134
- border-color: #c0392b;
173
+ background: var(--kc-err);
174
+ border-color: transparent;
175
+ color: var(--dsw-alias-label-primary-inverted, #fff);
135
176
  }
136
177
  #dsh-k8s-console button.kc-btn-stop:hover:not(:disabled) {
137
- background: #d9534a;
138
- border-color: #d9534a;
178
+ background: color-mix(in srgb, var(--kc-err) 86%, #fff);
139
179
  }
140
180
  #dsh-k8s-console button.kc-btn-sm {
141
181
  padding: 2px 8px;
142
182
  font-size: 12px;
143
- border-radius: 5px;
183
+ border-radius: 6px;
144
184
  }
145
185
  #dsh-k8s-console input,
146
186
  #dsh-k8s-console select,
147
187
  #dsh-k8s-console textarea {
148
188
  padding: 5px 9px;
189
+ background: var(--kc-panel);
190
+ border: 1px solid var(--kc-border);
191
+ transition: border-color var(--kc-ease);
149
192
  }
150
193
  #dsh-k8s-console input:focus,
151
194
  #dsh-k8s-console select:focus,
@@ -155,7 +198,7 @@ button.kc-sidebar-entry[data-active='true']:hover {
155
198
  }
156
199
  #dsh-k8s-console input::placeholder,
157
200
  #dsh-k8s-console textarea::placeholder {
158
- color: #5b6475;
201
+ color: var(--kc-faint);
159
202
  }
160
203
 
161
204
  .kc-grow { flex: 1 1 auto; }
@@ -168,16 +211,20 @@ button.kc-sidebar-entry[data-active='true']:hover {
168
211
  background: var(--kc-bg);
169
212
  }
170
213
 
171
- /* ---------- \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 */
172
217
  .kc-topbar {
173
218
  display: flex;
174
219
  align-items: center;
175
220
  gap: 10px;
176
- padding: 10px 14px;
177
- background: linear-gradient(180deg, #182130, #121825);
178
- border: 1px solid var(--kc-border);
179
- border-radius: var(--kc-radius);
180
- 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;
181
228
  }
182
229
  .kc-title {
183
230
  font-size: 14px;
@@ -188,29 +235,30 @@ button.kc-sidebar-entry[data-active='true']:hover {
188
235
  min-width: 0;
189
236
  }
190
237
  .kc-logo {
191
- width: 24px;
192
- height: 24px;
193
- border-radius: 6px;
194
- background: linear-gradient(135deg, #3fa7f7, #7b61ff);
238
+ width: 22px;
239
+ height: 22px;
240
+ border-radius: 7px;
241
+ background: var(--kc-accent);
195
242
  display: inline-flex;
196
243
  align-items: center;
197
244
  justify-content: center;
198
245
  font-size: 11px;
199
246
  font-weight: 800;
200
- color: #fff;
247
+ color: var(--dsw-alias-label-primary-inverted, #fff);
201
248
  letter-spacing: -0.5px;
202
249
  }
203
250
  .kc-badge {
204
251
  font-size: 11px;
205
252
  font-weight: 400;
206
253
  color: var(--kc-muted);
207
- border: 1px solid var(--kc-border);
254
+ border: 1px solid color-mix(in srgb, var(--kc-border) 80%, transparent);
208
255
  border-radius: 999px;
209
256
  padding: 1px 8px;
257
+ background: transparent;
210
258
  white-space: nowrap;
211
259
  }
212
- .kc-badge-ok { color: var(--kc-ok); border-color: rgba(55, 201, 120, 0.4); }
213
- .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); }
214
262
  .kc-notice {
215
263
  font-size: 12px;
216
264
  padding: 2px 10px;
@@ -220,8 +268,8 @@ button.kc-sidebar-entry[data-active='true']:hover {
220
268
  text-overflow: ellipsis;
221
269
  max-width: 46%;
222
270
  }
223
- .kc-notice-ok { color: var(--kc-ok); background: rgba(55, 201, 120, 0.12); }
224
- .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)); }
225
273
  .kc-notice-info { color: var(--kc-accent); background: var(--kc-accent-weak); }
226
274
 
227
275
  .kc-fatal {
@@ -234,18 +282,19 @@ button.kc-sidebar-entry[data-active='true']:hover {
234
282
  .kc-fatal-box {
235
283
  max-width: 560px;
236
284
  background: var(--kc-panel);
237
- border: 1px solid var(--kc-border-strong);
238
- border-radius: 10px;
285
+ border: 1px solid var(--kc-border);
286
+ border-radius: var(--kc-radius);
239
287
  padding: 20px 22px;
240
288
  }
241
289
  .kc-fatal-title { font-weight: 600; margin-bottom: 8px; color: var(--kc-err); }
242
290
  .kc-fatal-text { color: var(--kc-muted); margin-bottom: 14px; white-space: pre-wrap; }
243
291
 
244
- /* ---------- \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 */
245
294
  .kc-app-body {
246
295
  display: flex;
247
- gap: 10px;
248
- padding: 10px;
296
+ gap: 0;
297
+ padding: 0;
249
298
  flex: 1;
250
299
  min-height: 0;
251
300
  }
@@ -255,9 +304,10 @@ button.kc-sidebar-entry[data-active='true']:hover {
255
304
  display: flex;
256
305
  flex-direction: column;
257
306
  min-height: 0;
258
- background: var(--kc-panel);
259
- border: 1px solid var(--kc-border);
260
- border-radius: var(--kc-radius);
307
+ background: transparent;
308
+ border: 0;
309
+ border-right: 1px solid var(--kc-border);
310
+ border-radius: 0;
261
311
  overflow: hidden;
262
312
  }
263
313
  .kc-main {
@@ -265,48 +315,67 @@ button.kc-sidebar-entry[data-active='true']:hover {
265
315
  min-width: 0;
266
316
  display: flex;
267
317
  flex-direction: column;
268
- background: var(--kc-panel);
269
- border: 1px solid var(--kc-border);
270
- border-radius: var(--kc-radius);
318
+ background: transparent;
319
+ border: 0;
320
+ border-radius: 0;
271
321
  overflow: hidden;
272
322
  }
273
323
 
274
- /* ---------- 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 */
275
326
  .kc-tabbar {
276
327
  display: flex;
277
- align-items: center;
328
+ align-items: stretch;
278
329
  gap: 4px;
279
- padding: 8px 10px 0;
330
+ height: calc(var(--kc-tabbar-h, 32px) - 1px);
331
+ padding: 0 10px;
280
332
  overflow-x: auto;
333
+ overflow-y: hidden;
281
334
  scrollbar-width: thin;
335
+ scrollbar-color: var(--kc-border-strong) transparent;
282
336
  border-bottom: 1px solid var(--kc-border);
283
- background: linear-gradient(180deg, #1a2230, #151b28);
337
+ background: transparent;
284
338
  flex: 0 0 auto;
285
339
  }
286
340
  .kc-tab {
341
+ position: relative;
287
342
  display: inline-flex;
288
343
  align-items: center;
289
344
  gap: 6px;
290
345
  flex: 0 0 auto;
346
+ height: 100%;
291
347
  max-width: 240px;
292
- padding: 5px 10px;
293
- background: var(--kc-panel-2);
294
- border: 1px solid var(--kc-border);
295
- border-bottom: 0;
296
- border-radius: 8px 8px 0 0;
348
+ min-width: 0;
349
+ padding: 0 6px;
350
+ background: transparent;
351
+ border: 0;
352
+ border-radius: 0;
297
353
  color: var(--kc-muted);
298
354
  cursor: pointer;
299
- font-size: 12px;
355
+ font-size: 12.5px;
300
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;
301
369
  }
302
370
  .kc-tab:hover { color: var(--kc-text); }
303
371
  .kc-tab-active {
304
- background: var(--kc-panel);
305
- border-color: var(--kc-border-strong);
306
- border-bottom-color: var(--kc-panel);
307
- color: var(--kc-text);
308
- margin-bottom: -1px;
372
+ background: transparent;
373
+ border: 0;
374
+ color: var(--kc-accent);
375
+ font-weight: 600;
376
+ margin-bottom: 0;
309
377
  }
378
+ .kc-tab-active::after { background: var(--kc-accent); }
310
379
  .kc-tab-icon { opacity: 0.8; }
311
380
  .kc-tab-label {
312
381
  overflow: hidden;
@@ -315,11 +384,17 @@ button.kc-sidebar-entry[data-active='true']:hover {
315
384
  }
316
385
  .kc-tab-close {
317
386
  padding: 0 3px;
387
+ border: 0;
318
388
  border-radius: 4px;
319
389
  color: var(--kc-muted);
320
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;
321
397
  }
322
- .kc-tab-close:hover { color: var(--kc-err); background: rgba(255, 95, 86, 0.12); }
323
398
  .kc-tabpanes { flex: 1; min-height: 0; position: relative; }
324
399
  .kc-pane {
325
400
  position: absolute;
@@ -349,16 +424,16 @@ button.kc-sidebar-entry[data-active='true']:hover {
349
424
  .kc-nav-count {
350
425
  font-size: 11px;
351
426
  color: var(--kc-muted);
352
- border: 1px solid var(--kc-border);
427
+ border: 1px solid color-mix(in srgb, var(--kc-border) 80%, transparent);
353
428
  border-radius: 999px;
354
429
  padding: 0 7px;
355
430
  }
356
431
  .kc-warnbox {
357
432
  margin: 0 10px 8px;
358
433
  padding: 8px 10px;
359
- border: 1px solid rgba(224, 179, 65, 0.4);
360
- background: rgba(224, 179, 65, 0.08);
361
- border-radius: 6px;
434
+ border: 0;
435
+ background: var(--dsw-alias-state-warn-secondary, rgba(224, 179, 65, 0.12));
436
+ border-radius: 8px;
362
437
  font-size: 12px;
363
438
  }
364
439
  .kc-warnbox-title { color: var(--kc-warn); font-weight: 600; margin-bottom: 2px; }
@@ -367,10 +442,12 @@ button.kc-sidebar-entry[data-active='true']:hover {
367
442
  flex: 1;
368
443
  min-height: 0;
369
444
  overflow-y: auto;
370
- padding: 0 6px 6px;
445
+ padding: 0 8px 8px;
371
446
  display: flex;
372
447
  flex-direction: column;
373
448
  gap: 4px;
449
+ scrollbar-width: thin;
450
+ scrollbar-color: var(--kc-border-strong) transparent;
374
451
  }
375
452
  .kc-nav-empty {
376
453
  color: var(--kc-muted);
@@ -379,13 +456,14 @@ button.kc-sidebar-entry[data-active='true']:hover {
379
456
  padding: 14px 10px;
380
457
  }
381
458
  .kc-conn {
382
- border: 1px solid var(--kc-border);
459
+ border: 1px solid transparent;
383
460
  border-radius: 8px;
384
461
  overflow: hidden;
385
462
  display: flex;
386
463
  align-items: stretch;
464
+ transition: background var(--kc-ease), border-color var(--kc-ease);
387
465
  }
388
- .kc-conn:hover { border-color: var(--kc-border-strong); }
466
+ .kc-conn:hover { border-color: color-mix(in srgb, var(--kc-border) 72%, transparent); }
389
467
  .kc-conn-main {
390
468
  flex: 1;
391
469
  min-width: 0;
@@ -395,11 +473,14 @@ button.kc-sidebar-entry[data-active='true']:hover {
395
473
  gap: 2px;
396
474
  padding: 7px 10px;
397
475
  text-align: left;
398
- background: var(--kc-panel-2);
476
+ background: transparent;
399
477
  border: 0;
400
478
  border-radius: 0;
401
479
  }
402
- .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
+ }
403
484
  .kc-conn-name {
404
485
  font-weight: 600;
405
486
  color: var(--kc-text);
@@ -416,7 +497,7 @@ button.kc-sidebar-entry[data-active='true']:hover {
416
497
  }
417
498
  .kc-conn-server {
418
499
  font-size: 10px;
419
- color: #5b6475;
500
+ color: var(--kc-faint);
420
501
  font-family: var(--kc-mono);
421
502
  overflow: hidden;
422
503
  text-overflow: ellipsis;
@@ -434,8 +515,8 @@ button.kc-sidebar-entry[data-active='true']:hover {
434
515
  justify-content: center;
435
516
  gap: 4px;
436
517
  padding: 4px 6px;
437
- background: var(--kc-panel-2);
438
- border-left: 1px solid var(--kc-border);
518
+ background: transparent;
519
+ border-left: 1px solid color-mix(in srgb, var(--kc-border) 60%, transparent);
439
520
  }
440
521
  .kc-icon-btn {
441
522
  width: 26px;
@@ -445,9 +526,15 @@ button.kc-sidebar-entry[data-active='true']:hover {
445
526
  align-items: center;
446
527
  justify-content: center;
447
528
  font-size: 12px;
448
- border-radius: 5px;
529
+ border-radius: 6px;
530
+ border-color: transparent;
531
+ color: var(--kc-muted);
449
532
  }
450
- .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); }
451
538
  .kc-nav-foot {
452
539
  padding: 8px 10px;
453
540
  border-top: 1px solid var(--kc-border);
@@ -463,7 +550,7 @@ button.kc-sidebar-entry[data-active='true']:hover {
463
550
  display: flex;
464
551
  align-items: center;
465
552
  justify-content: center;
466
- background: rgba(4, 8, 14, 0.6);
553
+ background: var(--dsw-alias-bg-mask-1, rgba(4, 8, 14, 0.6));
467
554
  backdrop-filter: blur(2px);
468
555
  }
469
556
  .kc-modal {
@@ -471,10 +558,10 @@ button.kc-sidebar-entry[data-active='true']:hover {
471
558
  max-height: 88%;
472
559
  overflow-y: auto;
473
560
  background: var(--kc-panel);
474
- border: 1px solid var(--kc-border-strong);
561
+ border: 1px solid var(--kc-border);
475
562
  border-radius: 12px;
476
563
  padding: 16px 18px;
477
- 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));
478
565
  display: flex;
479
566
  flex-direction: column;
480
567
  gap: 12px;
@@ -484,9 +571,9 @@ button.kc-sidebar-entry[data-active='true']:hover {
484
571
  .kc-field label { font-size: 12px; color: var(--kc-muted); }
485
572
  .kc-form-error {
486
573
  color: var(--kc-err);
487
- background: rgba(255, 95, 86, 0.1);
488
- border: 1px solid rgba(255, 95, 86, 0.3);
489
- border-radius: 6px;
574
+ background: var(--dsw-alias-state-error-secondary, rgba(255, 95, 86, 0.12));
575
+ border: 0;
576
+ border-radius: 8px;
490
577
  padding: 6px 9px;
491
578
  font-size: 12px;
492
579
  white-space: pre-wrap;
@@ -502,33 +589,34 @@ button.kc-sidebar-entry[data-active='true']:hover {
502
589
  display: inline-flex;
503
590
  align-items: center;
504
591
  gap: 2px;
505
- background: var(--kc-panel-2);
506
- border: 1px solid var(--kc-border);
507
- 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;
508
595
  padding: 2px;
509
596
  }
510
597
  .kc-seg button {
511
- padding: 4px 12px;
598
+ padding: 3px 11px;
512
599
  font-size: 12px;
513
600
  border: 0;
514
- border-radius: 5px;
601
+ border-radius: 999px;
515
602
  background: transparent;
516
603
  color: var(--kc-muted);
517
604
  white-space: nowrap;
518
605
  }
519
- .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; }
520
607
  .kc-seg button.kc-seg-active {
521
- background: var(--kc-accent);
522
- color: #fff;
608
+ background: var(--kc-accent-weak);
609
+ color: var(--kc-accent);
610
+ font-weight: 600;
523
611
  }
524
- .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); }
525
613
 
526
614
  /* ---------- \u4EE3\u7801\u8F93\u5165/\u8F93\u51FA ---------- */
527
615
  .kc-code-input {
528
616
  font-family: var(--kc-mono);
529
617
  font-size: 12px;
530
618
  line-height: 1.55;
531
- background: #0b0f16;
619
+ background: var(--kc-panel);
532
620
  resize: vertical;
533
621
  tab-size: 2;
534
622
  }
@@ -539,16 +627,16 @@ button.kc-sidebar-entry[data-active='true']:hover {
539
627
  display: flex;
540
628
  align-items: center;
541
629
  gap: 8px;
542
- padding: 8px 12px;
630
+ padding: 6px 12px;
543
631
  border-bottom: 1px solid var(--kc-border);
544
- background: #121825;
632
+ background: transparent;
545
633
  flex: 0 0 auto;
546
634
  }
547
635
  .kc-ws-meta-name { font-weight: 600; font-size: 13px; }
548
636
  .kc-ws-meta-chip {
549
637
  font-size: 11px;
550
638
  color: var(--kc-muted);
551
- border: 1px solid var(--kc-border);
639
+ border: 1px solid color-mix(in srgb, var(--kc-border) 80%, transparent);
552
640
  border-radius: 999px;
553
641
  padding: 1px 8px;
554
642
  max-width: 320px;
@@ -611,13 +699,15 @@ button.kc-sidebar-entry[data-active='true']:hover {
611
699
  flex: 1;
612
700
  min-height: 0;
613
701
  overflow-y: auto;
614
- background: #0a0e15;
615
- border: 1px solid var(--kc-border);
702
+ background: var(--kc-bg);
703
+ border: 1px solid color-mix(in srgb, var(--kc-border) 60%, transparent);
616
704
  border-radius: 8px;
617
705
  padding: 8px 0;
618
706
  font-family: var(--kc-mono);
619
707
  font-size: 12px;
620
708
  line-height: 1.5;
709
+ scrollbar-width: thin;
710
+ scrollbar-color: var(--kc-border-strong) transparent;
621
711
  }
622
712
  .kc-output-empty {
623
713
  padding: 10px 14px;
@@ -632,23 +722,23 @@ button.kc-sidebar-entry[data-active='true']:hover {
632
722
  font-family: var(--kc-mono);
633
723
  }
634
724
  .kc-out-cmd {
635
- color: #9ccbff;
636
- background: rgba(63, 167, 247, 0.07);
725
+ color: var(--kc-accent);
726
+ background: var(--kc-accent-weak);
637
727
  border-left: 2px solid var(--kc-accent);
638
728
  padding-top: 2px;
639
729
  padding-bottom: 2px;
640
730
  }
641
731
  .kc-out-prompt { color: var(--kc-accent); user-select: none; }
642
- .kc-out-stdout { color: #d6dde8; }
643
- .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)); }
644
734
  .kc-out-err { color: var(--kc-err); }
645
735
  .kc-out-sys { color: var(--kc-muted); font-size: 11px; }
646
- .kc-out-muted { color: #6b7484; }
736
+ .kc-out-muted { color: var(--kc-faint); }
647
737
  .kc-exitbar {
648
738
  flex: 0 0 auto;
649
739
  font-size: 12px;
650
740
  color: var(--kc-ok);
651
- border-top: 1px solid var(--kc-border);
741
+ border-top: 1px solid color-mix(in srgb, var(--kc-border) 60%, transparent);
652
742
  padding: 5px 4px 0;
653
743
  }
654
744
  .kc-exitbar-err { color: var(--kc-err); }
@@ -689,9 +779,9 @@ button.kc-sidebar-entry[data-active='true']:hover {
689
779
  .kc-chat-warn {
690
780
  font-size: 12px;
691
781
  color: var(--kc-warn);
692
- background: rgba(224, 179, 65, 0.1);
693
- border: 1px solid rgba(224, 179, 65, 0.35);
694
- border-radius: 6px;
782
+ background: var(--dsw-alias-state-warn-secondary, rgba(224, 179, 65, 0.12));
783
+ border: 0;
784
+ border-radius: 8px;
695
785
  padding: 6px 9px;
696
786
  white-space: pre-wrap;
697
787
  }
@@ -703,6 +793,8 @@ button.kc-sidebar-entry[data-active='true']:hover {
703
793
  flex-direction: column;
704
794
  gap: 10px;
705
795
  padding: 4px 2px;
796
+ scrollbar-width: thin;
797
+ scrollbar-color: var(--kc-border-strong) transparent;
706
798
  }
707
799
  .kc-chat-empty {
708
800
  flex: 1;
@@ -723,8 +815,8 @@ button.kc-sidebar-entry[data-active='true']:hover {
723
815
  align-items: center;
724
816
  justify-content: center;
725
817
  border-radius: 50%;
726
- background: var(--kc-panel-2);
727
- border: 1px solid var(--kc-border);
818
+ background: var(--kc-panel);
819
+ border: 1px solid color-mix(in srgb, var(--kc-border) 80%, transparent);
728
820
  font-size: 14px;
729
821
  user-select: none;
730
822
  }
@@ -737,11 +829,11 @@ button.kc-sidebar-entry[data-active='true']:hover {
737
829
  }
738
830
  .kc-chat-user .kc-chat-bubble {
739
831
  background: var(--kc-accent-weak);
740
- border: 1px solid rgba(63, 167, 247, 0.25);
832
+ border: 1px solid color-mix(in srgb, var(--kc-accent) 30%, transparent);
741
833
  }
742
834
  .kc-chat-assistant .kc-chat-bubble {
743
- background: var(--kc-panel-2);
744
- border: 1px solid var(--kc-border);
835
+ background: var(--kc-panel);
836
+ border: 1px solid color-mix(in srgb, var(--kc-border) 70%, transparent);
745
837
  }
746
838
  .kc-chat-user-text { white-space: pre-wrap; }
747
839
  .kc-chat-ai-text { white-space: normal; }
@@ -760,7 +852,7 @@ button.kc-sidebar-entry[data-active='true']:hover {
760
852
  .kc-chat-meta {
761
853
  margin-top: 6px;
762
854
  font-size: 10px;
763
- color: #5b6475;
855
+ color: var(--kc-faint);
764
856
  text-align: right;
765
857
  }
766
858
  .kc-chat-quickrun {
@@ -768,16 +860,16 @@ button.kc-sidebar-entry[data-active='true']:hover {
768
860
  align-items: center;
769
861
  gap: 8px;
770
862
  padding: 6px 10px;
771
- border: 1px dashed var(--kc-border-strong);
863
+ border: 1px dashed color-mix(in srgb, var(--kc-border-strong) 80%, transparent);
772
864
  border-radius: 8px;
773
865
  font-size: 12px;
774
866
  color: var(--kc-muted);
775
- background: #101623;
867
+ background: var(--kc-panel);
776
868
  }
777
869
  .kc-chat-quickrun code {
778
870
  font-family: var(--kc-mono);
779
871
  font-size: 11px;
780
- color: #9ccbff;
872
+ color: var(--kc-accent);
781
873
  overflow: hidden;
782
874
  text-overflow: ellipsis;
783
875
  white-space: nowrap;
@@ -790,18 +882,18 @@ button.kc-sidebar-entry[data-active='true']:hover {
790
882
  /* ---------- \u4EE3\u7801\u5757\uFF08AI \u56DE\u590D\u5185\uFF09 ---------- */
791
883
  .kc-codebox {
792
884
  margin: 6px 0;
793
- border: 1px solid var(--kc-border);
885
+ border: 1px solid color-mix(in srgb, var(--kc-border) 70%, transparent);
794
886
  border-radius: 8px;
795
887
  overflow: hidden;
796
- background: #0a0e15;
888
+ background: var(--kc-bg);
797
889
  }
798
890
  .kc-codebox-head {
799
891
  display: flex;
800
892
  align-items: center;
801
893
  gap: 6px;
802
894
  padding: 3px 6px 3px 10px;
803
- background: #111827;
804
- 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);
805
897
  }
806
898
  .kc-codebox-lang {
807
899
  font-size: 11px;
@@ -816,16 +908,21 @@ button.kc-sidebar-entry[data-active='true']:hover {
816
908
  line-height: 1.55;
817
909
  white-space: pre-wrap;
818
910
  word-break: break-word;
819
- color: #d6dde8;
911
+ color: var(--kc-text);
820
912
  max-height: 320px;
821
913
  overflow-y: auto;
914
+ scrollbar-width: thin;
915
+ scrollbar-color: var(--kc-border-strong) transparent;
822
916
  }
823
917
 
824
- /* ---------- \u6EDA\u52A8\u6761 ---------- */
918
+ /* ---------- \u6EDA\u52A8\u6761\uFF08WebKit \u56DE\u843D\uFF1B\u73B0\u4EE3\u6D4F\u89C8\u5668\u8D70 scrollbar-width/color\uFF09 ---------- */
825
919
  #dsh-k8s-console *::-webkit-scrollbar { width: 8px; height: 8px; }
826
- #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
+ }
827
924
  #dsh-k8s-console *::-webkit-scrollbar-track { background: transparent; }
828
- `;var Xe="dsh-k8s-console-style";function Fe(){if(typeof document>"u")return()=>{};let e=document.getElementById(Xe);if(e!==null&&e.isConnected)return()=>{};let t=document.createElement("style");return t.id=Xe,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}),b=Fe(),c=t.inject("sidebar.footer.action",()=>t.register({name:"sidebar.footer.action",id:"k8s-console",order:-9,locale:"k8s",label:()=>n("sidebar.label")},$e)),P=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(),c(),P(),b()},"dsh-plugin-k8s: plugin teardown")}return ot(ft);})();
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);})();
829
926
  return __dsh_k8s_module__;
830
927
  },
831
928
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@snowlocked/dsh-k8s-console",
3
- "version": "0.3.1",
3
+ "version": "0.3.2",
4
4
  "description": "DSH K8s 控制台插件:管理 kubeconfig,点击即开会话 Tab(同一集群可开多个),每个会话含「kubectl 命令控制台」与「AI 对话」两个子页;AI 复用 DSH 自身模型配置。",
5
5
  "license": "MIT",
6
6
  "type": "module",