@coralai/sps-cli 0.51.12 → 0.51.13

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.
@@ -543,7 +543,7 @@ ${g.join(`
543
543
  https://github.com/highlightjs/highlight.js/issues/2277`),Kt=he,ut=Ce),Ge===void 0&&(Ge=!0);const mn={code:ut,language:Kt};Rr("before:highlight",mn);const Qn=mn.result?mn.result:na(mn.language,mn.code,Ge);return Qn.code=mn.code,Rr("after:highlight",Qn),Qn}function na(he,Ce,Ge,ut){const Kt=Object.create(null);function mn(xe,ke){return xe.keywords[ke]}function Qn(){if(!Le.keywords){Vt.addText(ft);return}let xe=0;Le.keywordPatternRe.lastIndex=0;let ke=Le.keywordPatternRe.exec(ft),$e="";for(;ke;){$e+=ft.substring(xe,ke.index);const We=ln.case_insensitive?ke[0].toLowerCase():ke[0],Dt=mn(Le,We);if(Dt){const[ui,Zl]=Dt;if(Vt.addText($e),$e="",Kt[We]=(Kt[We]||0)+1,Kt[We]<=xs&&(La+=Zl),ui.startsWith("_"))$e+=ke[0];else{const zc=ln.classNameAliases[ui]||ui;Yn(ke[0],zc)}}else $e+=ke[0];xe=Le.keywordPatternRe.lastIndex,ke=Le.keywordPatternRe.exec(ft)}$e+=ft.substring(xe),Vt.addText($e)}function On(){if(ft==="")return;let xe=null;if(typeof Le.subLanguage=="string"){if(!re[Le.subLanguage]){Vt.addText(ft);return}xe=na(Le.subLanguage,ft,!0,Lc[Le.subLanguage]),Lc[Le.subLanguage]=xe._top}else xe=Es(ft,Le.subLanguage.length?Le.subLanguage:null);Le.relevance>0&&(La+=xe.relevance),Vt.__addSublanguage(xe._emitter,xe.language)}function _t(){Le.subLanguage!=null?On():Qn(),ft=""}function Yn(xe,ke){xe!==""&&(Vt.startScope(ke),Vt.addText(xe),Vt.endScope())}function jc(xe,ke){let $e=1;const We=ke.length-1;for(;$e<=We;){if(!xe._emit[$e]){$e++;continue}const Dt=ln.classNameAliases[xe[$e]]||xe[$e],ui=ke[$e];Dt?Yn(ui,Dt):(ft=ui,Qn(),ft=""),$e++}}function ws(xe,ke){return xe.scope&&typeof xe.scope=="string"&&Vt.openNode(ln.classNameAliases[xe.scope]||xe.scope),xe.beginScope&&(xe.beginScope._wrap?(Yn(ft,ln.classNameAliases[xe.beginScope._wrap]||xe.beginScope._wrap),ft=""):xe.beginScope._multi&&(jc(xe.beginScope,ke),ft="")),Le=Object.create(xe,{parent:{value:Le}}),Le}function Vl(xe,ke,$e){let We=T(xe.endRe,$e);if(We){if(xe["on:end"]){const Dt=new t(xe);xe["on:end"](ke,Dt),Dt.isMatchIgnored&&(We=!1)}if(We){for(;xe.endsParent&&xe.parent;)xe=xe.parent;return xe}}if(xe.endsWithParent)return Vl(xe.parent,ke,$e)}function _s(xe){return Le.matcher.regexIndex===0?(ft+=xe[0],1):(za=!0,0)}function rd(xe){const ke=xe[0],$e=xe.rule,We=new t($e),Dt=[$e.__beforeBegin,$e["on:begin"]];for(const ui of Dt)if(ui&&(ui(xe,We),We.isMatchIgnored))return _s(ke);return $e.skip?ft+=ke:($e.excludeBegin&&(ft+=ke),_t(),!$e.returnBegin&&!$e.excludeBegin&&(ft=ke)),ws($e,xe),$e.returnBegin?0:ke.length}function Rn(xe){const ke=xe[0],$e=Ce.substring(xe.index),We=Vl(Le,xe,$e);if(!We)return Cr;const Dt=Le;Le.endScope&&Le.endScope._wrap?(_t(),Yn(ke,Le.endScope._wrap)):Le.endScope&&Le.endScope._multi?(_t(),jc(Le.endScope,xe)):Dt.skip?ft+=ke:(Dt.returnEnd||Dt.excludeEnd||(ft+=ke),_t(),Dt.excludeEnd&&(ft=ke));do Le.scope&&Vt.closeNode(),!Le.skip&&!Le.subLanguage&&(La+=Le.relevance),Le=Le.parent;while(Le!==We.parent);return We.starts&&ws(We.starts,xe),Dt.returnEnd?0:ke.length}function Wl(){const xe=[];for(let ke=Le;ke!==ln;ke=ke.parent)ke.scope&&xe.unshift(ke.scope);xe.forEach(ke=>Vt.openNode(ke))}let Mr={};function ks(xe,ke){const $e=ke&&ke[0];if(ft+=xe,$e==null)return _t(),0;if(Mr.type==="begin"&&ke.type==="end"&&Mr.index===ke.index&&$e===""){if(ft+=Ce.slice(ke.index,ke.index+1),!Nt){const We=new Error(`0 width match regex (${he})`);throw We.languageName=he,We.badRule=Mr.rule,We}return 1}if(Mr=ke,ke.type==="begin")return rd(ke);if(ke.type==="illegal"&&!Ge){const We=new Error('Illegal lexeme "'+$e+'" for mode "'+(Le.scope||"<unnamed>")+'"');throw We.mode=Le,We}else if(ke.type==="end"){const We=Rn(ke);if(We!==Cr)return We}if(ke.type==="illegal"&&$e==="")return ft+=`
544
544
  `,1;if(Xl>1e5&&Xl>ke.index*3)throw new Error("potential infinite loop, way more iterations than matches");return ft+=$e,$e.length}const ln=Sn(he);if(!ln)throw jt(vt.replace("{}",he)),new Error('Unknown language: "'+he+'"');const Dc=sn(ln);let Ns="",Le=ut||Dc;const Lc={},Vt=new Se.__emitter(Se);Wl();let ft="",La=0,ra=0,Xl=0,za=!1;try{if(ln.__emitTokens)ln.__emitTokens(Ce,Vt);else{for(Le.matcher.considerAll();;){Xl++,za?za=!1:Le.matcher.considerAll(),Le.matcher.lastIndex=ra;const xe=Le.matcher.exec(Ce);if(!xe)break;const ke=Ce.substring(ra,xe.index),$e=ks(ke,xe);ra=xe.index+$e}ks(Ce.substring(ra))}return Vt.finalize(),Ns=Vt.toHTML(),{language:he,value:Ns,relevance:La,illegal:!1,_emitter:Vt,_top:Le}}catch(xe){if(xe.message&&xe.message.includes("Illegal"))return{language:he,value:En(Ce),illegal:!0,relevance:0,_illegalBy:{message:xe.message,index:ra,context:Ce.slice(ra-100,ra+100),mode:xe.mode,resultSoFar:Ns},_emitter:Vt};if(Nt)return{language:he,value:En(Ce),illegal:!1,relevance:0,errorRaised:xe,_emitter:Vt,_top:Le};throw xe}}function vs(he){const Ce={value:En(he),illegal:!1,relevance:0,_top:_e,_emitter:new Se.__emitter(Se)};return Ce._emitter.addText(he),Ce}function Es(he,Ce){Ce=Ce||Se.languages||Object.keys(re);const Ge=vs(he),ut=Ce.filter(Sn).filter(ja).map(_t=>na(_t,he,!1));ut.unshift(Ge);const Kt=ut.sort((_t,Yn)=>{if(_t.relevance!==Yn.relevance)return Yn.relevance-_t.relevance;if(_t.language&&Yn.language){if(Sn(_t.language).supersetOf===Yn.language)return 1;if(Sn(Yn.language).supersetOf===_t.language)return-1}return 0}),[mn,Qn]=Kt,On=mn;return On.secondBest=Qn,On}function Pi(he,Ce,Ge){const ut=Ce&&ve[Ce]||Ge;he.classList.add("hljs"),he.classList.add(`language-${ut}`)}function Ht(he){let Ce=null;const Ge=qt(he);if(ze(Ge))return;if(Rr("before:highlightElement",{el:he,language:Ge}),he.dataset.highlighted){console.log("Element previously highlighted. To highlight again, first unset `dataset.highlighted`.",he);return}if(he.children.length>0&&(Se.ignoreUnescapedHTML||(console.warn("One of your code blocks includes unescaped HTML. This is a potentially serious security risk."),console.warn("https://github.com/highlightjs/highlight.js/wiki/security"),console.warn("The element with unescaped HTML:"),console.warn(he)),Se.throwUnescapedHTML))throw new Fi("One of your code blocks includes unescaped HTML.",he.innerHTML);Ce=he;const ut=Ce.textContent,Kt=Ge?At(ut,{language:Ge,ignoreIllegals:!0}):Es(ut);he.innerHTML=Kt.value,he.dataset.highlighted="yes",Pi(he,Ge,Kt.language),he.result={language:Kt.language,re:Kt.relevance,relevance:Kt.relevance},Kt.secondBest&&(he.secondBest={language:Kt.secondBest.language,relevance:Kt.secondBest.relevance}),Rr("after:highlightElement",{el:he,result:Kt,text:ut})}function hn(he){Se=Ac(Se,he)}const Ma=()=>{Ss(),ne("10.6.0","initHighlighting() deprecated. Use highlightAll() now.")};function Ql(){Ss(),ne("10.6.0","initHighlightingOnLoad() deprecated. Use highlightAll() now.")}let Oc=!1;function Ss(){function he(){Ss()}if(document.readyState==="loading"){Oc||window.addEventListener("DOMContentLoaded",he,!1),Oc=!0;return}document.querySelectorAll(Se.cssSelector).forEach(Ht)}function Rc(he,Ce){let Ge=null;try{Ge=Ce(B)}catch(ut){if(jt("Language definition for '{}' could not be registered.".replace("{}",he)),Nt)jt(ut);else throw ut;Ge=_e}Ge.name||(Ge.name=he),re[he]=Ge,Ge.rawDefinition=Ce.bind(null,B),Ge.aliases&&ia(Ge.aliases,{languageName:he})}function Or(he){delete re[he];for(const Ce of Object.keys(ve))ve[Ce]===he&&delete ve[Ce]}function Yl(){return Object.keys(re)}function Sn(he){return he=(he||"").toLowerCase(),re[he]||re[ve[he]]}function ia(he,{languageName:Ce}){typeof he=="string"&&(he=[he]),he.forEach(Ge=>{ve[Ge.toLowerCase()]=Ce})}function ja(he){const Ce=Sn(he);return Ce&&!Ce.disableAutodetect}function Da(he){he["before:highlightBlock"]&&!he["before:highlightElement"]&&(he["before:highlightElement"]=Ce=>{he["before:highlightBlock"](Object.assign({block:Ce.el},Ce))}),he["after:highlightBlock"]&&!he["after:highlightElement"]&&(he["after:highlightElement"]=Ce=>{he["after:highlightBlock"](Object.assign({block:Ce.el},Ce))})}function Yt(he){Da(he),Ie.push(he)}function Mc(he){const Ce=Ie.indexOf(he);Ce!==-1&&Ie.splice(Ce,1)}function Rr(he,Ce){const Ge=he;Ie.forEach(function(ut){ut[Ge]&&ut[Ge](Ce)})}function aa(he){return ne("10.7.0","highlightBlock will be removed entirely in v12.0"),ne("10.7.0","Please use highlightElement now."),Ht(he)}Object.assign(B,{highlight:At,highlightAuto:Es,highlightAll:Ss,highlightElement:Ht,highlightBlock:aa,configure:hn,initHighlighting:Ma,initHighlightingOnLoad:Ql,registerLanguage:Rc,unregisterLanguage:Or,listLanguages:Yl,getLanguage:Sn,registerAliases:ia,autoDetection:ja,inherit:Ac,addPlugin:Yt,removePlugin:Mc}),B.debugMode=function(){Nt=!1},B.safeMode=function(){Nt=!0},B.versionString=ct,B.regex={concat:w,lookahead:x,either:_,optional:E,anyNumberOfTimes:v};for(const he in Re)typeof Re[he]=="object"&&e(Re[he]);return Object.assign(B,Re),B},An=Ar({});return An.newInstance=()=>Ar({}),Km=An,An.HighlightJS=An,An.default=An,Km}var uB=cB();const fB=Dp(uB),l1={},dB="hljs-";function hB(e){const t=fB.newInstance();return e&&o(e),{highlight:n,highlightAuto:a,listLanguages:s,register:o,registerAlias:c,registered:f};function n(h,m,b){const g=b||l1,x=typeof g.prefix=="string"?g.prefix:dB;if(!t.getLanguage(h))throw new Error("Unknown language: `"+h+"` is not registered");t.configure({__emitter:mB,classPrefix:x});const v=t.highlight(m,{ignoreIllegals:!0,language:h});if(v.errorRaised)throw new Error("Could not highlight with `Highlight.js`",{cause:v.errorRaised});const E=v._emitter.root,w=E.data;return w.language=v.language,w.relevance=v.relevance,E}function a(h,m){const g=(m||l1).subset||s();let x=-1,v=0,E;for(;++x<g.length;){const w=g[x];if(!t.getLanguage(w))continue;const k=n(w,h,m);k.data&&k.data.relevance!==void 0&&k.data.relevance>v&&(v=k.data.relevance,E=k)}return E||{type:"root",children:[],data:{language:void 0,relevance:v}}}function s(){return t.listLanguages()}function o(h,m){if(typeof h=="string")t.registerLanguage(h,m);else{let b;for(b in h)Object.hasOwn(h,b)&&t.registerLanguage(b,h[b])}}function c(h,m){if(typeof h=="string")t.registerAliases(typeof m=="string"?m:[...m],{languageName:h});else{let b;for(b in h)if(Object.hasOwn(h,b)){const g=h[b];t.registerAliases(typeof g=="string"?g:[...g],{languageName:b})}}}function f(h){return!!t.getLanguage(h)}}class mB{constructor(t){this.options=t,this.root={type:"root",children:[],data:{language:void 0,relevance:0}},this.stack=[this.root]}addText(t){if(t==="")return;const n=this.stack[this.stack.length-1],a=n.children[n.children.length-1];a&&a.type==="text"?a.value+=t:n.children.push({type:"text",value:t})}startScope(t){this.openNode(String(t))}endScope(){this.closeNode()}__addSublanguage(t,n){const a=this.stack[this.stack.length-1],s=t.root.children;n?a.children.push({type:"element",tagName:"span",properties:{className:[n]},children:s}):a.children.push(...s)}openNode(t){const n=this,a=t.split(".").map(function(c,f){return f?c+"_".repeat(f):n.options.classPrefix+c}),s=this.stack[this.stack.length-1],o={type:"element",tagName:"span",properties:{className:a},children:[]};s.children.push(o),this.stack.push(o)}closeNode(){this.stack.pop()}finalize(){}toHTML(){return""}}const pB={};function Bg(e){const t=e||pB,n=t.aliases,a=t.detect||!1,s=t.languages||oB,o=t.plainText,c=t.prefix,f=t.subset;let h="hljs";const m=hB(s);if(n&&m.registerAlias(n),c){const b=c.indexOf("-");h=b===-1?c:c.slice(0,b)}return function(b,g){ad(b,"element",function(x,v,E){if(x.tagName!=="code"||!E||E.type!=="element"||E.tagName!=="pre")return;const w=gB(x);if(w===!1||!w&&!a||w&&o&&o.includes(w))return;Array.isArray(x.properties.className)||(x.properties.className=[]),x.properties.className.includes(h)||x.properties.className.unshift(h);const k=LI(x,{whitespace:"pre"});let _;try{_=w?m.highlight(w,k,{prefix:c}):m.highlightAuto(k,{prefix:c,subset:f})}catch(A){const T=A;if(w&&/Unknown language/.test(T.message)){g.message("Cannot highlight as `"+w+"`, it’s not registered",{ancestors:[E,x],cause:T,place:x.position,ruleId:"missing-language",source:"rehype-highlight"});return}throw T}!w&&_.data&&_.data.language&&x.properties.className.push("language-"+_.data.language),_.children.length>0&&(x.children=_.children)})}}function gB(e){const t=e.properties.className;let n=-1;if(!Array.isArray(t))return;let a;for(;++n<t.length;){const s=String(t[n]);if(s==="no-highlight"||s==="nohighlight")return!1;!a&&s.slice(0,5)==="lang-"&&(a=s.slice(5)),!a&&s.slice(0,9)==="language-"&&(a=s.slice(9))}return a}function bB({name:e,projects:t,onClose:n,onChange:a}){const{confirm:s,alert:o}=li(),{data:c,isLoading:f,isError:h,error:m,refetch:b}=lt({queryKey:["skill",e],queryFn:()=>iR(e)});O.useEffect(()=>{const _=A=>{A.key==="Escape"&&n()};return window.addEventListener("keydown",_),()=>window.removeEventListener("keydown",_)},[n]);const g=async(_,A)=>{try{await A(),await b(),a()}catch(T){o({title:`${_}失败`,body:T instanceof Error?T.message:String(T)})}},x=_=>g("link",()=>rR(e,_)),v=async _=>{await s({title:`从 ${_} 移除 ${e}`,body:"skill 链接会被解除,项目后续运行时将无法使用该 skill。",confirm:"移除",danger:!0})&&await g("unlink",()=>sR(e,_))},E=_=>g("freeze",()=>lR(e,_)),w=async _=>{await s({title:`解冻 ${e} @ ${_}`,body:"本地对这个 skill 的改动会被覆盖,回到最新共享版本。",confirm:"解冻",danger:!0})&&await g("unfreeze",()=>oR(e,_))},k=new Map(((c==null?void 0:c.linkedProjects)??[]).map(_=>[_.project,_.state]));return d.jsx("div",{role:"dialog","aria-modal":"true",className:"fixed inset-0 z-40 flex items-start justify-center p-6 bg-black/30 overflow-auto",children:d.jsxs("div",{className:"nb-card mt-8 w-full max-w-4xl",children:[d.jsxs("header",{className:"flex items-start justify-between gap-4 mb-4",children:[d.jsxs("div",{children:[d.jsx("h2",{className:"font-[family-name:var(--font-heading)] text-3xl font-bold",children:e}),c&&d.jsxs("p",{className:"text-sm text-[var(--color-text-muted)] mt-1",children:[c.category," · ",c.origin||"local"]})]}),d.jsx("button",{onClick:n,className:"nb-btn nb-btn-mint p-2","aria-label":"关闭",type:"button",children:d.jsx(_i,{size:16,strokeWidth:3})})]}),f&&d.jsx("p",{children:"加载中…"}),h&&d.jsxs("p",{className:"text-[var(--color-crashed)]",children:["加载失败: ",m instanceof Error?m.message:String(m)]}),c&&d.jsxs("div",{className:"flex flex-col gap-4",children:[d.jsxs("div",{className:"nb-card bg-[var(--color-bg-cream)] p-4",children:[d.jsx("h3",{className:"font-[family-name:var(--font-heading)] text-sm font-bold mb-3 uppercase tracking-wider",children:"项目链接状态"}),d.jsxs("div",{className:"flex flex-col gap-2",children:[t.map(_=>{const A=k.get(_);return d.jsxs("div",{className:"flex items-center justify-between gap-3 p-2 bg-[var(--color-bg)] border-2 border-[var(--color-text)] rounded-lg",children:[d.jsxs("div",{className:"flex items-center gap-3",children:[d.jsx("span",{className:"font-[family-name:var(--font-mono)] font-bold text-sm",children:_}),A==="linked"&&d.jsx("span",{className:"nb-status",style:{background:"var(--color-running-bg)",color:"var(--color-running)"},children:"linked"}),A==="frozen"&&d.jsx("span",{className:"nb-status",style:{background:"var(--color-stuck-bg)",color:"var(--color-stuck)"},children:"frozen"}),!A&&d.jsx("span",{className:"nb-status",style:{background:"var(--color-idle-bg)",color:"var(--color-idle)"},children:"absent"})]}),d.jsxs("div",{className:"flex gap-2",children:[!A&&d.jsxs("button",{className:"nb-btn nb-btn-primary",style:{padding:"4px 10px",fontSize:11},onClick:()=>x(_),type:"button",children:[d.jsx(xC,{size:11})," link"]}),A==="linked"&&d.jsxs(d.Fragment,{children:[d.jsxs("button",{className:"nb-btn",style:{padding:"4px 10px",fontSize:11},onClick:()=>E(_),type:"button",children:[d.jsx(PC,{size:11})," freeze"]}),d.jsx("button",{className:"nb-btn nb-btn-danger",style:{padding:"4px 10px",fontSize:11},onClick:()=>v(_),type:"button",children:"unlink"})]}),A==="frozen"&&d.jsxs(d.Fragment,{children:[d.jsxs("button",{className:"nb-btn",style:{padding:"4px 10px",fontSize:11},onClick:()=>w(_),type:"button",children:[d.jsx(XT,{size:11})," unfreeze"]}),d.jsx("button",{className:"nb-btn nb-btn-danger",style:{padding:"4px 10px",fontSize:11},onClick:()=>v(_),type:"button",children:"unlink"})]})]})]},_)}),t.length===0&&d.jsx("p",{className:"text-sm text-[var(--color-text-muted)] italic",children:"还没有任何项目。先去创建一个项目。"})]})]}),d.jsxs("div",{children:[d.jsx("h3",{className:"font-[family-name:var(--font-heading)] text-sm font-bold mb-2 uppercase tracking-wider",children:"SKILL.md 预览"}),d.jsx("div",{className:"prose-chat bg-[var(--color-bg-cream)] border-2 border-[var(--color-text)] rounded-lg p-4 max-h-80 overflow-auto text-sm",children:c.body?d.jsx(Rg,{remarkPlugins:[Lg],rehypePlugins:[Bg],children:c.body}):d.jsx("p",{className:"text-[var(--color-text-muted)] italic",children:"(empty)"})})]}),c.references.length>0&&d.jsxs("div",{children:[d.jsx("h3",{className:"font-[family-name:var(--font-heading)] text-sm font-bold mb-2 uppercase tracking-wider",children:"References"}),d.jsx("ul",{className:"flex flex-col gap-2",children:c.references.map(_=>d.jsx(yB,{skillName:e,file:_.name,lines:_.lines},_.name))})]})]})]})})}function yB({skillName:e,file:t,lines:n}){const[a,s]=O.useState(!1),{data:o,isLoading:c,isError:f,error:h}=lt({queryKey:["skill-ref",e,t],queryFn:()=>aR(e,t),enabled:a,staleTime:1/0});return d.jsxs("li",{className:"border-2 border-[var(--color-text)] rounded-lg overflow-hidden bg-[var(--color-bg-cream)]",children:[d.jsxs("button",{type:"button",onClick:()=>s(m=>!m),"aria-label":`${a?"收起":"展开"} ${t}`,"aria-expanded":a,className:"w-full flex items-center gap-2 px-3 py-2 text-sm font-[family-name:var(--font-mono)] hover:bg-[var(--color-accent-yellow)] transition-colors",children:[d.jsx(Bf,{size:12,strokeWidth:3,className:["transition-transform",a?"rotate-90":""].join(" ")}),d.jsx(Ec,{size:12,strokeWidth:2.5}),d.jsx("span",{className:"flex-1 text-left font-bold",children:t}),d.jsxs("span",{className:"text-xs text-[var(--color-text-subtle)]",children:[n," lines"]})]}),a&&d.jsxs("div",{className:"px-4 py-3 border-t-2 border-[var(--color-text)] bg-[var(--color-bg)] max-h-96 overflow-auto",children:[c&&d.jsx("p",{className:"text-xs text-[var(--color-text-muted)]",children:"加载中…"}),f&&d.jsxs("p",{className:"text-xs text-[var(--color-crashed)]",children:["加载失败: ",h instanceof Error?h.message:String(h)]}),o&&d.jsx("div",{className:"prose-chat text-sm",children:d.jsx(Rg,{remarkPlugins:[Lg],rehypePlugins:[Bg],children:o.content})})]})]})}const xB=[{value:"all",label:"全部"},{value:"language",label:"language"},{value:"end",label:"end"},{value:"persona",label:"persona"},{value:"workflow",label:"workflow"},{value:"other",label:"other"}],vB={language:"var(--color-accent-purple)",end:"var(--color-secondary)",persona:"var(--color-primary)",workflow:"var(--color-accent-mint)",other:"var(--color-bg-cream)"};function EB(){var x;const[e,t]=O.useState("all"),[n,a]=O.useState(""),[s,o]=O.useState(null),c=Hn(),{data:f,isLoading:h}=lt({queryKey:["skills"],queryFn:()=>hg()}),m=lt({queryKey:["projects"],queryFn:_r}),b=O.useMemo(()=>((f==null?void 0:f.data)??[]).filter(E=>!(e!=="all"&&E.category!==e||n&&!E.name.toLowerCase().includes(n.toLowerCase()))),[f,e,n]),g=O.useMemo(()=>{const v=(f==null?void 0:f.data)??[],E={all:v.length};for(const w of v)E[w.category]=(E[w.category]??0)+1;return E},[f]);return d.jsxs("div",{className:"flex flex-col gap-4 max-w-full",children:[d.jsxs("header",{className:"flex items-center justify-between flex-wrap gap-3",children:[d.jsxs("div",{children:[d.jsx("h1",{className:"font-[family-name:var(--font-heading)] text-4xl font-bold",children:"Skills 🎯"}),d.jsx("p",{className:"text-sm text-[var(--color-text-muted)] mt-1",children:h?"加载中…":`${(f==null?void 0:f.data.length)??0} 个 user-level skill`})]}),d.jsx("div",{className:"flex gap-3 items-center",children:d.jsxs("button",{className:"nb-btn nb-btn-mint",onClick:async()=>{await cR(),c.invalidateQueries({queryKey:["skills"]})},type:"button",children:[d.jsx(Cl,{size:14,strokeWidth:2.5}),"Sync bundled"]})})]}),d.jsxs("div",{className:"flex items-center gap-3 flex-wrap",children:[d.jsxs("div",{className:"relative flex-1 max-w-md",children:[d.jsx(Sf,{size:14,className:"absolute left-3 top-1/2 -translate-y-1/2 text-[var(--color-text-subtle)]"}),d.jsx("input",{className:"nb-input pl-9 w-full",placeholder:"搜索 skill…",value:n,onChange:v=>a(v.target.value),"aria-label":"搜索 skill"})]}),d.jsx("div",{className:"flex gap-1 p-1 bg-[var(--color-bg)] border-[2px] border-[var(--color-text)] rounded-full shadow-[2px_2px_0_var(--color-text)]",children:xB.map(v=>d.jsxs("button",{type:"button",onClick:()=>t(v.value),className:["px-3 py-1 rounded-full text-xs font-bold font-[family-name:var(--font-body)]",e===v.value?"bg-[var(--color-text)] text-[var(--color-bg)]":"text-[var(--color-text-muted)] hover:text-[var(--color-text)]"].join(" "),children:[v.label," ",g[v.value]]},v.value))})]}),d.jsx("div",{className:"grid gap-4 grid-cols-[repeat(auto-fill,minmax(280px,1fr))]",children:b.map(v=>{var E;return d.jsx(SB,{skill:v,projectCount:((E=m.data)==null?void 0:E.data.length)??0,onOpen:()=>o(v.name)},v.name)})}),s&&d.jsx(bB,{name:s,projects:((x=m.data)==null?void 0:x.data.map(v=>v.name))??[],onClose:()=>o(null),onChange:()=>c.invalidateQueries({queryKey:["skills"]})})]})}function SB({skill:e,projectCount:t,onOpen:n}){const a=vB[e.category];return d.jsxs("article",{onClick:n,onKeyDown:s=>{(s.key==="Enter"||s.key===" ")&&(s.preventDefault(),n())},tabIndex:0,role:"button","aria-label":`Open ${e.name}`,className:"nb-card nb-card-interactive flex flex-col gap-3",children:[d.jsxs("div",{className:"flex items-center justify-between",children:[d.jsx("h3",{className:"font-[family-name:var(--font-heading)] font-bold text-lg",children:e.name}),d.jsx("span",{className:"nb-badge text-[10px]",style:{background:a},children:e.category})]}),d.jsx("p",{className:"text-sm text-[var(--color-text-muted)] leading-5 line-clamp-3",children:e.description||"(no description)"}),d.jsxs("div",{className:"flex items-center justify-between text-xs font-[family-name:var(--font-mono)] pt-2 border-t-[1.5px] border-dashed border-[var(--color-border-light)]",children:[d.jsx("span",{className:"font-bold",children:e.linkedProjects.length>0?`● linked in ${e.linkedProjects.length}`:"○ not linked"}),d.jsxs("span",{className:"text-[var(--color-text-subtle)]",children:[t," projects"]})]})]})}function wB(){var s;const e=lt({queryKey:["system-info"],queryFn:dE}),t=lt({queryKey:["system-env"],queryFn:rA}),[n,a]=O.useState(!1);return d.jsxs("div",{className:"flex flex-col gap-6 max-w-4xl",children:[d.jsx("header",{children:d.jsx("h1",{className:"font-[family-name:var(--font-heading)] text-4xl font-bold",children:"系统 ⚙️"})}),d.jsx(_B,{current:(s=e.data)==null?void 0:s.version}),d.jsxs("section",{className:"nb-card",children:[d.jsx("h2",{className:"font-[family-name:var(--font-heading)] text-xl font-bold mb-3",children:"运行时"}),e.data?d.jsxs("dl",{className:"grid grid-cols-[160px_1fr] gap-y-2 text-sm",children:[d.jsx("dt",{className:"font-bold",children:"Node"}),d.jsx("dd",{className:"font-[family-name:var(--font-mono)]",children:e.data.nodeVersion}),d.jsx("dt",{className:"font-bold",children:"Platform"}),d.jsx("dd",{className:"font-[family-name:var(--font-mono)]",children:e.data.platform}),d.jsx("dt",{className:"font-bold",children:"PID"}),d.jsx("dd",{className:"font-[family-name:var(--font-mono)]",children:e.data.pid??"—"}),d.jsx("dt",{className:"font-bold",children:"Uptime"}),d.jsx("dd",{className:"font-[family-name:var(--font-mono)]",children:CB(e.data.uptimeMs)})]}):d.jsx("p",{className:"text-[var(--color-text-muted)]",children:"加载中…"})]}),d.jsxs("section",{className:"nb-card",children:[d.jsxs("div",{className:"flex items-center justify-between mb-3",children:[d.jsxs("h2",{className:"font-[family-name:var(--font-heading)] text-xl font-bold",children:["全局配置 ",d.jsx("code",{className:"text-sm font-[family-name:var(--font-mono)] font-normal bg-[var(--color-bg-cream)] border-2 border-[var(--color-text)] px-2 py-0.5 rounded",children:"~/.coral/env"})]}),n?d.jsx("span",{className:"text-xs text-[var(--color-stuck)] font-bold",children:"⚠ 编辑模式"}):d.jsxs("button",{className:"nb-btn",style:{padding:"6px 12px",fontSize:12},onClick:()=>a(!0),type:"button","aria-label":"编辑 env 文件",children:[d.jsx(Vp,{size:12,strokeWidth:2.5})," 编辑"]})]}),n?d.jsx(kB,{onClose:()=>{a(!1),t.refetch()}}):t.data&&t.data.exists?d.jsx("dl",{className:"grid grid-cols-[220px_1fr] gap-y-1 text-sm font-[family-name:var(--font-mono)]",children:t.data.entries.map(o=>d.jsxs("div",{className:"contents",children:[d.jsxs("dt",{className:"font-bold flex items-center gap-2",children:[o.masked&&d.jsx("span",{className:"text-[var(--color-stuck)]",children:"🔒"}),o.key]}),d.jsx("dd",{className:"text-[var(--color-text-muted)] truncate",children:o.value})]},o.key))}):d.jsxs("p",{className:"text-[var(--color-text-muted)] text-sm",children:['env 文件不存在。点"编辑"或者终端运行 ',d.jsx("code",{className:"bg-[var(--color-bg-cream)] border-2 border-[var(--color-text)] px-2 py-0.5 rounded font-[family-name:var(--font-mono)]",children:"sps setup"}),"。"]})]}),d.jsx(NB,{})]})}function _B({current:e}){var E;const{confirm:t,alert:n}=li(),[a,s]=O.useState(!1),[o,c]=O.useState(null),f=lt({queryKey:["latest-version"],queryFn:oA,enabled:!1}),[h,m]=O.useState(null),[b,g]=O.useState("npm i -g @coralai/sps-cli@latest"),x=async()=>{var k;if(await t({title:"升级 sps-cli",body:`当前 ${e},升级到 ${(k=f.data)==null?void 0:k.latest}。要求所有 pipeline 已停止。升级后请重启 sps console 生效。`,confirm:"升级"})){s(!0),c(null),m(null);try{const _=await cA();if(c(_.output),m(_.installedVersion),g(_.command),_.ok)n({title:"升级完成",body:`装上了 v${_.installedVersion}。请 \`pkill -f "sps console"\` 再重启以生效。`});else{const A=_.installedVersion&&_.installedVersion===e?`npm 执行完毕但版本没变(仍 ${_.installedVersion})——多半是权限或 registry 问题。可复制下面的命令在终端手动跑。`:"npm 没装上新版本。可复制命令手动跑,或看下面日志定位。";n({title:"升级未生效",body:A})}}catch(_){c(_.message),n({title:"升级失败",body:_.message})}finally{s(!1)}}},v=async()=>{const w=f.data&&!f.data.upToDate?`npm i -g @coralai/sps-cli@${f.data.latest}`:b;try{await navigator.clipboard.writeText(w),n({title:"命令已复制",body:`粘贴到终端运行即可:
545
545
  ${w}`})}catch{n({title:"复制失败",body:`请手动复制:
546
- ${w}`})}};return d.jsxs("section",{className:"nb-card",children:[d.jsxs("div",{className:"flex items-center justify-between mb-3",children:[d.jsx("h2",{className:"font-[family-name:var(--font-heading)] text-xl font-bold",children:"版本"}),d.jsxs("button",{className:"nb-btn",style:{padding:"6px 12px",fontSize:12},onClick:()=>f.refetch(),disabled:f.isFetching||!e,type:"button","aria-label":"检查最新版本",children:[f.isFetching?d.jsx(zt,{size:12,strokeWidth:3,className:"animate-spin"}):d.jsx(Cl,{size:12,strokeWidth:2.5}),"检查更新"]})]}),d.jsxs("dl",{className:"grid grid-cols-[160px_1fr] gap-y-2 text-sm",children:[d.jsx("dt",{className:"font-bold",children:"sps-cli (当前)"}),d.jsx("dd",{className:"font-[family-name:var(--font-mono)]",children:e??"—"}),f.data&&d.jsxs(d.Fragment,{children:[d.jsx("dt",{className:"font-bold",children:"npm (最新)"}),d.jsxs("dd",{className:"font-[family-name:var(--font-mono)] flex items-center gap-2 flex-wrap",children:[f.data.latest,f.data.upToDate?d.jsx("span",{className:"nb-status",style:{background:"var(--color-running-bg)",color:"var(--color-running)"},children:"最新"}):d.jsxs(d.Fragment,{children:[d.jsxs("button",{className:"nb-btn nb-btn-primary",style:{padding:"3px 10px",fontSize:11},onClick:x,disabled:a,type:"button","aria-label":"升级到最新版本",children:[a?d.jsx(zt,{size:11,strokeWidth:3,className:"animate-spin"}):d.jsx(nE,{size:11,strokeWidth:2.5}),"升级"]}),d.jsxs("button",{className:"nb-btn",style:{padding:"3px 10px",fontSize:11},onClick:v,type:"button","aria-label":"复制升级命令",title:"自动升级失败时手动跑",children:[d.jsx(HT,{size:11,strokeWidth:2.5})," 复制命令"]})]})]})]}),h&&d.jsxs(d.Fragment,{children:[d.jsx("dt",{className:"font-bold",children:"已安装"}),d.jsxs("dd",{className:"font-[family-name:var(--font-mono)] flex items-center gap-2",children:[h,h===((E=f.data)==null?void 0:E.latest)?d.jsx("span",{className:"nb-status",style:{background:"var(--color-running-bg)",color:"var(--color-running)"},children:"已生效(重启 console 后可见)"}):h===e?d.jsx("span",{className:"nb-status",style:{background:"var(--color-stuck-bg)",color:"var(--color-stuck)"},children:"未升级成功"}):null]})]}),f.isError&&d.jsxs(d.Fragment,{children:[d.jsx("dt",{className:"font-bold",children:"检查"}),d.jsx("dd",{className:"text-[var(--color-crashed)] text-xs",children:f.error instanceof Error?f.error.message:String(f.error)})]})]}),o&&d.jsx("pre",{className:"mt-3 text-xs font-[family-name:var(--font-mono)] bg-[var(--color-bg-cream)] border-2 border-[var(--color-text)] rounded-lg p-3 max-h-40 overflow-auto whitespace-pre-wrap",children:o})]})}function kB({onClose:e}){const t=Hn(),{alert:n}=li(),a=lt({queryKey:["system-env-raw"],queryFn:sA}),[s,o]=O.useState(null),[c,f]=O.useState(null);O.useEffect(()=>{a.data&&s===null&&(o(a.data.content),f(a.data.etag))},[a.data,s]);const h=s!==null&&a.data&&s!==a.data.content,m=qn({mutationFn:()=>{if(s===null)throw new Error("no draft");return lA(s,c??"")},onSuccess:()=>{t.invalidateQueries({queryKey:["system-env"]}),t.invalidateQueries({queryKey:["system-env-raw"]}),e()},onError:b=>{const g=b.status;n({title:g===409?"env 被其他地方修改了":"保存失败",body:g===409?"请点取消后重开编辑。":b instanceof Error?b.message:String(b)})}});return a.isLoading?d.jsx("p",{className:"text-[var(--color-text-muted)]",children:"加载中…"}):d.jsxs("div",{children:[d.jsx("p",{className:"text-xs text-[var(--color-stuck)] font-bold mb-2",children:"⚠ 文件包含凭证明文。保存时保持 0600 权限。"}),d.jsx("textarea",{className:"nb-input w-full font-[family-name:var(--font-mono)] text-xs",style:{minHeight:320,resize:"vertical"},value:s??"",onChange:b=>o(b.target.value),spellCheck:!1,"aria-label":"env 文件编辑器"}),d.jsxs("div",{className:"flex items-center justify-between mt-3",children:[d.jsxs("span",{className:"text-xs text-[var(--color-text-muted)] font-[family-name:var(--font-mono)]",children:[c?`etag: ${c}`:"",h?" · ● 未保存":""]}),d.jsxs("div",{className:"flex gap-2",children:[d.jsxs("button",{className:"nb-btn",style:{padding:"6px 12px"},onClick:e,disabled:m.isPending,type:"button",children:[d.jsx(_i,{size:12,strokeWidth:3})," 取消"]}),d.jsxs("button",{className:"nb-btn nb-btn-primary",style:{padding:"6px 12px"},onClick:()=>m.mutate(),disabled:!h||m.isPending,type:"button","aria-label":"保存 env",children:[m.isPending?d.jsx(zt,{size:12,strokeWidth:3,className:"animate-spin"}):d.jsx(Uf,{size:12,strokeWidth:3}),"保存"]})]})]})]})}function NB(){var g;const{alert:e}=li(),t=lt({queryKey:["projects"],queryFn:_r}),[n,a]=O.useState({}),[s,o]=O.useState({}),[c,f]=O.useState({}),h=(((g=t.data)==null?void 0:g.data)??[]).map(x=>({project:x.name})),m=async(x,v)=>{o(E=>({...E,[x]:v?"fix":"check"}));try{const E=await uA(x,v);a(w=>({...w,[x]:E})),f(w=>({...w,[x]:!0}))}catch(E){e({title:`doctor ${v?"修复":"检查"}失败`,body:E instanceof Error?E.message:String(E)})}finally{o(E=>({...E,[x]:null}))}},b=async()=>{for(const x of h)await m(x.project,!1)};return d.jsxs("section",{className:"nb-card",children:[d.jsxs("div",{className:"flex items-center justify-between mb-3",children:[d.jsx("h2",{className:"font-[family-name:var(--font-heading)] text-xl font-bold",children:"项目健康检查"}),d.jsxs("button",{className:"nb-btn nb-btn-mint",style:{padding:"6px 12px",fontSize:12},onClick:()=>{b()},disabled:h.length===0||Object.values(s).some(Boolean),type:"button",children:[d.jsx(Cl,{size:12,strokeWidth:2.5}),"检查全部"]})]}),h.length===0?d.jsx("p",{className:"text-[var(--color-text-muted)] text-sm",children:"还没有项目。"}):d.jsx("ul",{className:"flex flex-col gap-2",children:h.map(x=>{const v=n[x.project],E=s[x.project],w=v?v.checks.filter(T=>T.status==="fail").length:0,k=v?v.checks.filter(T=>T.status==="warn").length:0,_=c[x.project]??!1,A=v!=null;return d.jsxs("li",{className:"bg-[var(--color-bg-cream)] border-2 border-[var(--color-text)] rounded-lg",children:[d.jsxs("div",{className:"flex items-center gap-3 px-3 py-2",children:[d.jsxs("button",{type:"button",onClick:()=>f(T=>({...T,[x.project]:!_})),disabled:!A,className:"flex items-center gap-2 flex-1 text-left min-w-0","aria-label":_?"折叠":"展开",children:[A&&v.ok?d.jsx(fp,{size:16,className:"text-[var(--color-running)] shrink-0",strokeWidth:2.5}):A?d.jsx(rc,{size:16,className:"text-[var(--color-stuck)] shrink-0",strokeWidth:2.5}):d.jsx(fp,{size:16,className:"text-[var(--color-text-subtle)] shrink-0",strokeWidth:2.5}),A&&(_?d.jsx(vc,{size:12}):d.jsx(Bf,{size:12})),d.jsx("span",{className:"font-bold font-[family-name:var(--font-mono)]",children:x.project}),A?v.ok?d.jsx("span",{className:"text-xs text-[var(--color-running)] font-semibold",children:"OK"}):d.jsxs("span",{className:"text-xs text-[var(--color-stuck)] font-semibold",children:[w," fail · ",k," warn"]}):d.jsx("span",{className:"text-xs text-[var(--color-text-muted)]",children:'点 "检查" 运行 sps doctor'})]}),d.jsxs("button",{className:"nb-btn",style:{padding:"4px 10px",fontSize:11},onClick:()=>{m(x.project,!1)},disabled:!!E,type:"button","aria-label":"检查",children:[E==="check"?d.jsx(zt,{size:11,strokeWidth:3,className:"animate-spin"}):d.jsx(Cl,{size:11,strokeWidth:2.5}),"检查"]}),d.jsxs("button",{className:"nb-btn nb-btn-primary",style:{padding:"4px 10px",fontSize:11},onClick:()=>{m(x.project,!0)},disabled:!!E||A&&v.ok,type:"button","aria-label":"自动修复",title:A&&v.ok?"已无可修问题":"调 sps doctor <proj> --fix:自动创建 .claude/hooks/stop.sh、state.json 等",children:[E==="fix"?d.jsx(zt,{size:11,strokeWidth:3,className:"animate-spin"}):d.jsx(fE,{size:11,strokeWidth:2.5}),"修复"]})]}),_&&A&&d.jsxs("div",{className:"border-t-2 border-dashed border-[var(--color-text)] px-3 py-2",children:[d.jsx("ul",{className:"flex flex-col gap-1 text-xs font-[family-name:var(--font-mono)]",children:v.checks.map((T,j)=>d.jsx(TB,{check:T},`${T.name}-${j}`))}),v.fixes.length>0&&d.jsxs("div",{className:"mt-3 bg-[var(--color-running-bg)] border-2 border-[var(--color-running)] rounded p-2",children:[d.jsx("div",{className:"text-xs font-bold text-[var(--color-running)] mb-1",children:"已修复"}),d.jsx("ul",{className:"text-xs list-disc pl-4",children:v.fixes.map((T,j)=>d.jsx("li",{children:T},j))})]})]})]},x.project)})})]})}function TB({check:e}){const t=e.status==="pass"?d.jsx(fp,{size:12,className:"text-[var(--color-running)]",strokeWidth:2.5}):e.status==="fail"?d.jsx(rc,{size:12,className:"text-[var(--color-crashed)]",strokeWidth:2.5}):e.status==="warn"?d.jsx(rc,{size:12,className:"text-[var(--color-stuck)]",strokeWidth:2.5}):d.jsx("span",{className:"w-3 h-3 rounded-full bg-[var(--color-text-subtle)] inline-block"});return d.jsxs("li",{className:"flex items-start gap-2",children:[d.jsx("span",{className:"pt-0.5 shrink-0",children:t}),d.jsx("span",{className:"font-bold w-32 shrink-0",children:e.name}),d.jsx("span",{className:"text-[var(--color-text-muted)] break-words",children:e.message})]})}function CB(e){const t=Math.floor(e/1e3),n=Math.floor(t/3600),a=Math.floor(t%3600/60),s=t%60;return n>0?`${n}h ${a}m ${s}s`:a>0?`${a}m ${s}s`:`${s}s`}function AB(){return Pt("/api/chat/sessions")}function OB(e){return Pt(`/api/chat/sessions/${e}`)}async function Gm(e={}){const t=await fetch("/api/chat/sessions",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!t.ok)throw new Error(`${t.status}: ${await t.text()}`);return await t.json()}async function RB(e){const t=await fetch(`/api/chat/sessions/${e}`,{method:"DELETE"});if(!t.ok)throw new Error(`${t.status}`)}async function MB(e,t,n){const a=await fetch(`/api/chat/sessions/${e}/messages`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({content:t,attachments:n})});if(!a.ok)throw new Error(`${a.status}: ${await a.text()}`);return await a.json()}async function jB(e){const t=await fetch(`/api/chat/sessions/${e}/interrupt`,{method:"POST"});if(!t.ok&&t.status!==204)throw new Error(`${t.status}: ${await t.text()}`)}function DB(e,t){const n=t?`?since=${encodeURIComponent(t)}`:"";return Pt(`/api/chat/sessions/${e}/messages${n}`)}function o1(){var q,ce,Y,ye,R,D,X,C,ge;const{sessionId:e}=K1(),t=wr(),n=Hn(),{confirm:a,alert:s}=li(),o=lt({queryKey:["chat-sessions"],queryFn:AB}),c=lt({queryKey:["chat-session",e],queryFn:()=>OB(e??""),enabled:!!e}),[f,h]=O.useState(null),[m,b]=O.useState(""),[g,x]=O.useState(!1),v=O.useRef(null),[E,w]=O.useState(!1),[k,_]=O.useState([]),[A,T]=O.useState(!1),[j,$]=O.useState(!1),[M,F]=O.useState(!1),[H,ee]=O.useState(null);O.useEffect(()=>{if(!e)return;const W=new EventSource(`/stream/chat/${encodeURIComponent(e)}`);let fe=!0;return W.addEventListener("open",()=>{if(fe){fe=!1;return}const K=n.getQueryData(["chat-session",e]),se=K!=null&&K.messages.length?K.messages[K.messages.length-1].ts:void 0;DB(e,se).then(de=>{de.data.length!==0&&n.setQueryData(["chat-session",e],Re=>{if(!Re)return Re;const mt=new Set(Re.messages.map(oi=>oi.id)),xt=de.data.filter(oi=>!mt.has(oi.id));return xt.length===0?Re:{...Re,messages:[...Re.messages,...xt],lastMessageAt:xt[xt.length-1].ts,messageCount:Re.messageCount+xt.length}})}).catch(()=>{})}),W.addEventListener("chat.message",K=>{try{const se=JSON.parse(K.data);n.setQueryData(["chat-session",e],de=>{if(!de||de.messages.some(xt=>xt.id===se.message.id))return de;const mt=de.messages.findIndex(xt=>xt.role==="user"&&xt.id.startsWith("optim-")&&xt.content===se.message.content);if(mt>=0){const xt=[...de.messages];return xt[mt]=se.message,{...de,messages:xt}}return{...de,messages:[...de.messages,se.message]}})}catch{}}),W.addEventListener("chat.message.pending",K=>{try{const se=JSON.parse(K.data);h({id:se.assistantId,blocks:[],done:!1,finalMessage:null})}catch{}}),W.addEventListener("chat.message.chunk.text",K=>{try{const se=JSON.parse(K.data);h(de=>{if(!de||de.id!==se.assistantId)return de;const Re=[...de.blocks],mt=Re[Re.length-1];return mt&&mt.type==="text"?Re[Re.length-1]={...mt,target:mt.target+se.text}:Re.push({type:"text",target:se.text,displayed:""}),{...de,blocks:Re}})}catch{}}),W.addEventListener("chat.message.chunk.tool_use",K=>{try{const se=JSON.parse(K.data);h(de=>!de||de.id!==se.assistantId?de:{...de,blocks:[...de.blocks,{type:"tool_use",id:se.id,title:se.title,kind:se.kind,status:se.status}]})}catch{}}),W.addEventListener("chat.message.chunk.tool_update",K=>{try{const se=JSON.parse(K.data);h(de=>!de||de.id!==se.assistantId?de:{...de,blocks:de.blocks.map(Re=>Re.type==="tool_use"&&Re.id===se.id?{...Re,status:se.status}:Re)})}catch{}}),W.addEventListener("chat.message.complete",K=>{try{const se=JSON.parse(K.data);h(de=>de&&de.id===se.assistantId?{...de,done:!0,finalMessage:se.message}:de)}catch{}}),()=>W.close()},[e,n]),O.useEffect(()=>{if(!f)return;const W=f.blocks.reduce((K,se)=>se.type==="text"?K+(se.target.length-se.displayed.length):K,0);if(W<=0){if(f.done&&f.finalMessage){const K=f.finalMessage;n.setQueryData(["chat-session",e],se=>!se||se.messages.some(de=>de.id===K.id)?se:{...se,messages:[...se.messages,K],lastMessageAt:K.ts,messageCount:se.messageCount+1}),n.invalidateQueries({queryKey:["chat-sessions"]}),h(null),x(!1)}return}const fe=setTimeout(()=>{h(K=>{if(!K)return K;let se=Math.max(1,Math.ceil(W/40));const de=K.blocks.map(Re=>{if(Re.type!=="text"||se<=0)return Re;const mt=Re.target.length-Re.displayed.length;if(mt<=0)return Re;const xt=Math.min(mt,se);return se-=xt,{...Re,displayed:Re.target.slice(0,Re.displayed.length+xt)}});return{...K,blocks:de}})},25);return()=>clearTimeout(fe)},[f,n,e]),O.useEffect(()=>{const W=v.current;W&&(W.scrollTop=W.scrollHeight)},[c.data,f]);const L=O.useCallback(async(W={})=>{var fe,K;try{const se=await Gm({cwd:((fe=W.cwd)==null?void 0:fe.trim())||void 0,title:((K=W.title)==null?void 0:K.trim())||void 0});n.invalidateQueries({queryKey:["chat-sessions"]}),t(`/chat/${se.id}`),w(!1)}catch(se){s({title:"新建对话失败",body:se instanceof Error?se.message:String(se)})}},[n,t,s]),J=O.useCallback(async()=>{const W=m.trim();if(!W&&k.length===0||g)return;let fe=e;if(!fe){const de=await Gm();n.invalidateQueries({queryKey:["chat-sessions"]}),fe=de.id,t(`/chat/${fe}`,{replace:!0})}const K=k.map(de=>de.path),se={id:`optim-${Date.now()}`,role:"user",content:W||"(附件)",ts:new Date().toISOString(),status:"complete",attachments:K.length>0?K:void 0};n.setQueryData(["chat-session",fe],de=>de?{...de,messages:[...de.messages,se],lastMessageAt:se.ts,messageCount:de.messageCount+1}:{id:fe,createdAt:se.ts,lastMessageAt:se.ts,title:W.slice(0,60)||"附件",project:null,messageCount:1,messages:[se]}),b(""),_([]),x(!0);try{await MB(fe,W||"(请查看附件)",K.length>0?K:void 0)}catch(de){x(!1),console.error("sendMessage failed",de),s({title:"发送失败",body:de instanceof Error?de.message:String(de)})}},[m,k,g,e,n,t,s]),ae=O.useCallback(async W=>{if(W.size>hE){s({title:"文件超过上限",body:`单文件上限 50 MB;当前 ${(W.size/1024/1024).toFixed(2)} MB(${W.name})`});return}let fe=e;if(!fe){const K=await Gm();n.invalidateQueries({queryKey:["chat-sessions"]}),fe=K.id,t(`/chat/${fe}`,{replace:!0})}T(!0);try{const K=await DA(fe,W);_(se=>[...se,{path:K.path,name:K.name}])}catch(K){s({title:"附件上传失败",body:K instanceof Error?K.message:String(K)})}finally{T(!1)}},[e,n,t,s]),be=O.useCallback(W=>{_(fe=>fe.filter(K=>K.path!==W))},[]),ue=O.useCallback(async W=>{await a({title:"删除对话",body:"对话记录会永久删除,不可恢复。",confirm:"删除",danger:!0})&&(await RB(W),n.invalidateQueries({queryKey:["chat-sessions"]}),e===W&&t("/chat"))},[n,e,t,a]),te=O.useCallback(async()=>{if(e)try{await jB(e)}catch(W){s({title:"中断失败",body:W instanceof Error?W.message:String(W)})}},[e,s]);return d.jsxs("div",{className:"grid grid-cols-[260px_1fr] gap-4 h-[calc(100vh-140px)]",children:[d.jsxs("aside",{className:"nb-card p-3 overflow-auto flex flex-col gap-2",children:[d.jsxs("button",{className:"nb-btn nb-btn-primary w-full justify-center",onClick:()=>w(!0),type:"button",children:[d.jsx(Ii,{size:14,strokeWidth:3}),"新建对话"]}),d.jsxs("div",{className:"mt-2 text-xs font-[family-name:var(--font-heading)] uppercase tracking-wider text-[var(--color-text-muted)] px-2",children:["历史 ",((q=o.data)==null?void 0:q.data.length)??0]}),d.jsxs("div",{className:"flex flex-col gap-1.5 mt-1",children:[(((ce=o.data)==null?void 0:ce.data)??[]).map(W=>d.jsxs("div",{className:["group flex items-start gap-2 p-2 rounded-lg border-2 border-transparent",e===W.id?"bg-[var(--color-accent-mint)] border-[var(--color-text)] shadow-[2px_2px_0_var(--color-text)]":"hover:bg-[var(--color-bg-cream)] hover:border-[var(--color-text)]"].join(" "),children:[d.jsxs("button",{type:"button","aria-label":`打开对话 ${W.title}${W.cwd?`(工作目录 ${W.cwd})`:""}`,onClick:()=>t(`/chat/${W.id}`),className:"flex items-start gap-2 flex-1 min-w-0 text-left",children:[d.jsx(Qv,{size:14,strokeWidth:2.5,className:"mt-0.5 flex-shrink-0"}),d.jsxs("div",{className:"flex-1 min-w-0",children:[d.jsxs("div",{className:"flex items-center gap-1.5 min-w-0",children:[d.jsx("p",{className:"text-sm font-semibold truncate flex-1",children:W.title}),W.source==="cli"&&d.jsx("span",{className:"flex-shrink-0 px-1.5 py-0 rounded-md bg-[var(--color-accent-purple)] border-2 border-[var(--color-text)] text-[9px] font-[family-name:var(--font-mono)] uppercase tracking-wider leading-tight",title:"该会话由 sps agent CLI 创建,从 Claude jsonl 实时读取(只读)",children:"CLI"})]}),d.jsxs("p",{className:"text-[10px] text-[var(--color-text-muted)] font-[family-name:var(--font-mono)] truncate",children:[W.messageCount," msg · ",Pw(W.lastMessageAt??W.createdAt)]}),W.cwd&&d.jsxs("p",{className:"text-[10px] text-[var(--color-text-subtle)] font-[family-name:var(--font-mono)] truncate flex items-center gap-1",title:W.cwd,children:[d.jsx(lc,{size:9,strokeWidth:2.5,className:"flex-shrink-0"}),d.jsx("span",{className:"truncate",dir:"rtl",children:W.cwd})]})]})]}),W.source!=="cli"&&d.jsx("button",{type:"button","aria-label":"删除对话",className:"opacity-0 group-hover:opacity-100 p-1 hover:text-[var(--color-crashed)]",onClick:fe=>{fe.stopPropagation(),ue(W.id)},children:d.jsx(zl,{size:12})})]},W.id)),(((Y=o.data)==null?void 0:Y.data)??[]).length===0&&d.jsx("p",{className:"text-xs text-[var(--color-text-subtle)] italic text-center py-4",children:"还没对话。点上面新建。"})]})]}),d.jsx("div",{className:"nb-card p-0 flex flex-col overflow-hidden",children:e?d.jsxs(d.Fragment,{children:[d.jsxs("header",{className:"px-4 py-3 border-b-2 border-[var(--color-text)] bg-[var(--color-bg-cream)]",children:[d.jsx("h2",{className:"font-[family-name:var(--font-heading)] font-bold text-lg",children:((ye=c.data)==null?void 0:ye.title)??"新对话"}),d.jsx("p",{className:"text-xs text-[var(--color-text-muted)] font-[family-name:var(--font-mono)]",children:e}),((R=c.data)==null?void 0:R.cwd)&&d.jsxs("p",{className:"text-xs text-[var(--color-text-muted)] font-[family-name:var(--font-mono)] flex items-center gap-1 mt-1",title:c.data.cwd,children:[d.jsx(lc,{size:11,strokeWidth:2.5,className:"flex-shrink-0"}),d.jsx("span",{className:"truncate",children:c.data.cwd})]})]}),d.jsxs("div",{ref:v,className:"flex-1 overflow-auto p-4 flex flex-col gap-4",children:[(((D=c.data)==null?void 0:D.messages)??[]).map(W=>d.jsx(IB,{msg:W,sessionId:e??null,onPreviewAttachment:fe=>ee(fe)},W.id)),f&&d.jsx(UB,{pending:f}),!c.isLoading&&(((X=c.data)==null?void 0:X.messages)??[]).length===0&&!f&&!g&&d.jsx("p",{className:"text-center text-[var(--color-text-subtle)] italic mt-12",children:"下方输入问题开始对话 · Enter 发送 · Shift+Enter 换行"})]}),((C=c.data)==null?void 0:C.source)==="cli"?d.jsxs("div",{className:"border-t-2 border-[var(--color-text)] p-4 bg-[var(--color-accent-purple)]",children:[d.jsxs("p",{className:"text-sm font-[family-name:var(--font-mono)] text-[var(--color-text-muted)] text-center",children:["这是 ",d.jsx("strong",{children:"CLI 会话"}),"(由 ",d.jsx("code",{children:"sps agent"})," 创建),Console 仅展示历史。续聊请在终端运行:"]}),d.jsxs("pre",{className:"mt-2 px-3 py-2 bg-[var(--color-bg)] border-2 border-[var(--color-text)] rounded-md text-xs font-[family-name:var(--font-mono)] overflow-x-auto",children:["sps agent --chat --name ",(e??"").replace(/^session-/,"")]})]}):d.jsxs("div",{className:["border-t-2 border-[var(--color-text)] p-3 bg-[var(--color-bg-cream)] transition-colors",M?"bg-[var(--color-accent-mint)]":""].join(" "),onDragOver:W=>{W.dataTransfer.types.includes("Files")&&(W.preventDefault(),W.dataTransfer.dropEffect="copy",M||F(!0))},onDragLeave:()=>F(!1),onDrop:W=>{if(!W.dataTransfer.types.includes("Files"))return;W.preventDefault(),F(!1);const fe=Array.from(W.dataTransfer.files??[]);for(const K of fe)ae(K)},children:[(k.length>0||A)&&d.jsxs("div",{className:"flex flex-wrap gap-2 mb-2",children:[k.map(W=>d.jsxs("button",{type:"button",className:"flex items-center gap-1.5 px-2 py-1 rounded-md bg-[var(--color-bg)] border-2 border-[var(--color-text)] text-xs font-[family-name:var(--font-mono)] hover:bg-[var(--color-accent-mint)] group",onClick:()=>ee(W.path),title:`${W.name}
546
+ ${w}`})}};return d.jsxs("section",{className:"nb-card",children:[d.jsxs("div",{className:"flex items-center justify-between mb-3",children:[d.jsx("h2",{className:"font-[family-name:var(--font-heading)] text-xl font-bold",children:"版本"}),d.jsxs("button",{className:"nb-btn",style:{padding:"6px 12px",fontSize:12},onClick:()=>f.refetch(),disabled:f.isFetching||!e,type:"button","aria-label":"检查最新版本",children:[f.isFetching?d.jsx(zt,{size:12,strokeWidth:3,className:"animate-spin"}):d.jsx(Cl,{size:12,strokeWidth:2.5}),"检查更新"]})]}),d.jsxs("dl",{className:"grid grid-cols-[160px_1fr] gap-y-2 text-sm",children:[d.jsx("dt",{className:"font-bold",children:"sps-cli (当前)"}),d.jsx("dd",{className:"font-[family-name:var(--font-mono)]",children:e??"—"}),f.data&&d.jsxs(d.Fragment,{children:[d.jsx("dt",{className:"font-bold",children:"npm (最新)"}),d.jsxs("dd",{className:"font-[family-name:var(--font-mono)] flex items-center gap-2 flex-wrap",children:[f.data.latest,f.data.upToDate?d.jsx("span",{className:"nb-status",style:{background:"var(--color-running-bg)",color:"var(--color-running)"},children:"最新"}):d.jsxs(d.Fragment,{children:[d.jsxs("button",{className:"nb-btn nb-btn-primary",style:{padding:"3px 10px",fontSize:11},onClick:x,disabled:a,type:"button","aria-label":"升级到最新版本",children:[a?d.jsx(zt,{size:11,strokeWidth:3,className:"animate-spin"}):d.jsx(nE,{size:11,strokeWidth:2.5}),"升级"]}),d.jsxs("button",{className:"nb-btn",style:{padding:"3px 10px",fontSize:11},onClick:v,type:"button","aria-label":"复制升级命令",title:"自动升级失败时手动跑",children:[d.jsx(HT,{size:11,strokeWidth:2.5})," 复制命令"]})]})]})]}),h&&d.jsxs(d.Fragment,{children:[d.jsx("dt",{className:"font-bold",children:"已安装"}),d.jsxs("dd",{className:"font-[family-name:var(--font-mono)] flex items-center gap-2",children:[h,h===((E=f.data)==null?void 0:E.latest)?d.jsx("span",{className:"nb-status",style:{background:"var(--color-running-bg)",color:"var(--color-running)"},children:"已生效(重启 console 后可见)"}):h===e?d.jsx("span",{className:"nb-status",style:{background:"var(--color-stuck-bg)",color:"var(--color-stuck)"},children:"未升级成功"}):null]})]}),f.isError&&d.jsxs(d.Fragment,{children:[d.jsx("dt",{className:"font-bold",children:"检查"}),d.jsx("dd",{className:"text-[var(--color-crashed)] text-xs",children:f.error instanceof Error?f.error.message:String(f.error)})]})]}),o&&d.jsx("pre",{className:"mt-3 text-xs font-[family-name:var(--font-mono)] bg-[var(--color-bg-cream)] border-2 border-[var(--color-text)] rounded-lg p-3 max-h-40 overflow-auto whitespace-pre-wrap",children:o})]})}function kB({onClose:e}){const t=Hn(),{alert:n}=li(),a=lt({queryKey:["system-env-raw"],queryFn:sA}),[s,o]=O.useState(null),[c,f]=O.useState(null);O.useEffect(()=>{a.data&&s===null&&(o(a.data.content),f(a.data.etag))},[a.data,s]);const h=s!==null&&a.data&&s!==a.data.content,m=qn({mutationFn:()=>{if(s===null)throw new Error("no draft");return lA(s,c??"")},onSuccess:()=>{t.invalidateQueries({queryKey:["system-env"]}),t.invalidateQueries({queryKey:["system-env-raw"]}),e()},onError:b=>{const g=b.status;n({title:g===409?"env 被其他地方修改了":"保存失败",body:g===409?"请点取消后重开编辑。":b instanceof Error?b.message:String(b)})}});return a.isLoading?d.jsx("p",{className:"text-[var(--color-text-muted)]",children:"加载中…"}):d.jsxs("div",{children:[d.jsx("p",{className:"text-xs text-[var(--color-stuck)] font-bold mb-2",children:"⚠ 文件包含凭证明文。保存时保持 0600 权限。"}),d.jsx("textarea",{className:"nb-input w-full font-[family-name:var(--font-mono)] text-xs",style:{minHeight:320,resize:"vertical"},value:s??"",onChange:b=>o(b.target.value),spellCheck:!1,"aria-label":"env 文件编辑器"}),d.jsxs("div",{className:"flex items-center justify-between mt-3",children:[d.jsxs("span",{className:"text-xs text-[var(--color-text-muted)] font-[family-name:var(--font-mono)]",children:[c?`etag: ${c}`:"",h?" · ● 未保存":""]}),d.jsxs("div",{className:"flex gap-2",children:[d.jsxs("button",{className:"nb-btn",style:{padding:"6px 12px"},onClick:e,disabled:m.isPending,type:"button",children:[d.jsx(_i,{size:12,strokeWidth:3})," 取消"]}),d.jsxs("button",{className:"nb-btn nb-btn-primary",style:{padding:"6px 12px"},onClick:()=>m.mutate(),disabled:!h||m.isPending,type:"button","aria-label":"保存 env",children:[m.isPending?d.jsx(zt,{size:12,strokeWidth:3,className:"animate-spin"}):d.jsx(Uf,{size:12,strokeWidth:3}),"保存"]})]})]})]})}function NB(){var g;const{alert:e}=li(),t=lt({queryKey:["projects"],queryFn:_r}),[n,a]=O.useState({}),[s,o]=O.useState({}),[c,f]=O.useState({}),h=(((g=t.data)==null?void 0:g.data)??[]).map(x=>({project:x.name})),m=async(x,v)=>{o(E=>({...E,[x]:v?"fix":"check"}));try{const E=await uA(x,v);a(w=>({...w,[x]:E})),f(w=>({...w,[x]:!0}))}catch(E){e({title:`doctor ${v?"修复":"检查"}失败`,body:E instanceof Error?E.message:String(E)})}finally{o(E=>({...E,[x]:null}))}},b=async()=>{for(const x of h)await m(x.project,!1)};return d.jsxs("section",{className:"nb-card",children:[d.jsxs("div",{className:"flex items-center justify-between mb-3",children:[d.jsx("h2",{className:"font-[family-name:var(--font-heading)] text-xl font-bold",children:"项目健康检查"}),d.jsxs("button",{className:"nb-btn nb-btn-mint",style:{padding:"6px 12px",fontSize:12},onClick:()=>{b()},disabled:h.length===0||Object.values(s).some(Boolean),type:"button",children:[d.jsx(Cl,{size:12,strokeWidth:2.5}),"检查全部"]})]}),h.length===0?d.jsx("p",{className:"text-[var(--color-text-muted)] text-sm",children:"还没有项目。"}):d.jsx("ul",{className:"flex flex-col gap-2",children:h.map(x=>{const v=n[x.project],E=s[x.project],w=v?v.checks.filter(T=>T.status==="fail").length:0,k=v?v.checks.filter(T=>T.status==="warn").length:0,_=c[x.project]??!1,A=v!=null;return d.jsxs("li",{className:"bg-[var(--color-bg-cream)] border-2 border-[var(--color-text)] rounded-lg",children:[d.jsxs("div",{className:"flex items-center gap-3 px-3 py-2",children:[d.jsxs("button",{type:"button",onClick:()=>f(T=>({...T,[x.project]:!_})),disabled:!A,className:"flex items-center gap-2 flex-1 text-left min-w-0","aria-label":_?"折叠":"展开",children:[A&&v.ok?d.jsx(fp,{size:16,className:"text-[var(--color-running)] shrink-0",strokeWidth:2.5}):A?d.jsx(rc,{size:16,className:"text-[var(--color-stuck)] shrink-0",strokeWidth:2.5}):d.jsx(fp,{size:16,className:"text-[var(--color-text-subtle)] shrink-0",strokeWidth:2.5}),A&&(_?d.jsx(vc,{size:12}):d.jsx(Bf,{size:12})),d.jsx("span",{className:"font-bold font-[family-name:var(--font-mono)]",children:x.project}),A?v.ok?d.jsx("span",{className:"text-xs text-[var(--color-running)] font-semibold",children:"OK"}):d.jsxs("span",{className:"text-xs text-[var(--color-stuck)] font-semibold",children:[w," fail · ",k," warn"]}):d.jsx("span",{className:"text-xs text-[var(--color-text-muted)]",children:'点 "检查" 运行 sps doctor'})]}),d.jsxs("button",{className:"nb-btn",style:{padding:"4px 10px",fontSize:11},onClick:()=>{m(x.project,!1)},disabled:!!E,type:"button","aria-label":"检查",children:[E==="check"?d.jsx(zt,{size:11,strokeWidth:3,className:"animate-spin"}):d.jsx(Cl,{size:11,strokeWidth:2.5}),"检查"]}),d.jsxs("button",{className:"nb-btn nb-btn-primary",style:{padding:"4px 10px",fontSize:11},onClick:()=>{m(x.project,!0)},disabled:!!E||A&&v.ok,type:"button","aria-label":"自动修复",title:A&&v.ok?"已无可修问题":"调 sps doctor <proj> --fix:自动创建 .claude/hooks/stop.sh、state.json 等",children:[E==="fix"?d.jsx(zt,{size:11,strokeWidth:3,className:"animate-spin"}):d.jsx(fE,{size:11,strokeWidth:2.5}),"修复"]})]}),_&&A&&d.jsxs("div",{className:"border-t-2 border-dashed border-[var(--color-text)] px-3 py-2",children:[d.jsx("ul",{className:"flex flex-col gap-1 text-xs font-[family-name:var(--font-mono)]",children:v.checks.map((T,j)=>d.jsx(TB,{check:T},`${T.name}-${j}`))}),v.fixes.length>0&&d.jsxs("div",{className:"mt-3 bg-[var(--color-running-bg)] border-2 border-[var(--color-running)] rounded p-2",children:[d.jsx("div",{className:"text-xs font-bold text-[var(--color-running)] mb-1",children:"已修复"}),d.jsx("ul",{className:"text-xs list-disc pl-4",children:v.fixes.map((T,j)=>d.jsx("li",{children:T},j))})]})]})]},x.project)})})]})}function TB({check:e}){const t=e.status==="pass"?d.jsx(fp,{size:12,className:"text-[var(--color-running)]",strokeWidth:2.5}):e.status==="fail"?d.jsx(rc,{size:12,className:"text-[var(--color-crashed)]",strokeWidth:2.5}):e.status==="warn"?d.jsx(rc,{size:12,className:"text-[var(--color-stuck)]",strokeWidth:2.5}):d.jsx("span",{className:"w-3 h-3 rounded-full bg-[var(--color-text-subtle)] inline-block"});return d.jsxs("li",{className:"flex items-start gap-2",children:[d.jsx("span",{className:"pt-0.5 shrink-0",children:t}),d.jsx("span",{className:"font-bold w-32 shrink-0",children:e.name}),d.jsx("span",{className:"text-[var(--color-text-muted)] break-words",children:e.message})]})}function CB(e){const t=Math.floor(e/1e3),n=Math.floor(t/3600),a=Math.floor(t%3600/60),s=t%60;return n>0?`${n}h ${a}m ${s}s`:a>0?`${a}m ${s}s`:`${s}s`}function AB(){return Pt("/api/chat/sessions")}function OB(e){return Pt(`/api/chat/sessions/${e}`)}async function Gm(e={}){const t=await fetch("/api/chat/sessions",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!t.ok)throw new Error(`${t.status}: ${await t.text()}`);return await t.json()}async function RB(e){const t=await fetch(`/api/chat/sessions/${e}`,{method:"DELETE"});if(!t.ok)throw new Error(`${t.status}`)}async function MB(e,t,n){const a=await fetch(`/api/chat/sessions/${e}/messages`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({content:t,attachments:n})});if(!a.ok)throw new Error(`${a.status}: ${await a.text()}`);return await a.json()}async function jB(e){const t=await fetch(`/api/chat/sessions/${e}/interrupt`,{method:"POST"});if(!t.ok&&t.status!==204)throw new Error(`${t.status}: ${await t.text()}`)}function DB(e,t){const n=t?`?since=${encodeURIComponent(t)}`:"";return Pt(`/api/chat/sessions/${e}/messages${n}`)}function o1(){var q,ce,Y,ye,R,D,X,C,ge;const{sessionId:e}=K1(),t=wr(),n=Hn(),{confirm:a,alert:s}=li(),o=lt({queryKey:["chat-sessions"],queryFn:AB}),c=lt({queryKey:["chat-session",e],queryFn:()=>OB(e??""),enabled:!!e}),[f,h]=O.useState(null),[m,b]=O.useState(""),[g,x]=O.useState(!1),v=O.useRef(null),[E,w]=O.useState(!1),[k,_]=O.useState([]),[A,T]=O.useState(!1),[j,$]=O.useState(!1),[M,F]=O.useState(!1),[H,ee]=O.useState(null);O.useEffect(()=>{if(!e)return;const W=new EventSource(`/stream/chat/${encodeURIComponent(e)}`);let fe=!0;return W.addEventListener("open",()=>{if(fe){fe=!1;return}const K=n.getQueryData(["chat-session",e]),se=K!=null&&K.messages.length?K.messages[K.messages.length-1].ts:void 0;DB(e,se).then(de=>{de.data.length!==0&&n.setQueryData(["chat-session",e],Re=>{if(!Re)return Re;const mt=new Set(Re.messages.map(oi=>oi.id)),xt=de.data.filter(oi=>!mt.has(oi.id));return xt.length===0?Re:{...Re,messages:[...Re.messages,...xt],lastMessageAt:xt[xt.length-1].ts,messageCount:Re.messageCount+xt.length}})}).catch(()=>{})}),W.addEventListener("chat.message",K=>{try{const se=JSON.parse(K.data);n.setQueryData(["chat-session",e],de=>{if(!de||de.messages.some(xt=>xt.id===se.message.id))return de;const mt=de.messages.findIndex(xt=>xt.role==="user"&&xt.id.startsWith("optim-")&&xt.content===se.message.content);if(mt>=0){const xt=[...de.messages];return xt[mt]=se.message,{...de,messages:xt}}return{...de,messages:[...de.messages,se.message]}})}catch{}}),W.addEventListener("chat.message.pending",K=>{try{const se=JSON.parse(K.data);h({id:se.assistantId,blocks:[],done:!1,finalMessage:null})}catch{}}),W.addEventListener("chat.message.chunk.text",K=>{try{const se=JSON.parse(K.data);h(de=>{if(!de||de.id!==se.assistantId)return de;const Re=[...de.blocks],mt=Re[Re.length-1];return mt&&mt.type==="text"?Re[Re.length-1]={...mt,target:mt.target+se.text}:Re.push({type:"text",target:se.text,displayed:""}),{...de,blocks:Re}})}catch{}}),W.addEventListener("chat.message.chunk.tool_use",K=>{try{const se=JSON.parse(K.data);h(de=>!de||de.id!==se.assistantId?de:{...de,blocks:[...de.blocks,{type:"tool_use",id:se.id,title:se.title,kind:se.kind,status:se.status}]})}catch{}}),W.addEventListener("chat.message.chunk.tool_update",K=>{try{const se=JSON.parse(K.data);h(de=>!de||de.id!==se.assistantId?de:{...de,blocks:de.blocks.map(Re=>Re.type==="tool_use"&&Re.id===se.id?{...Re,status:se.status}:Re)})}catch{}}),W.addEventListener("chat.message.complete",K=>{try{const se=JSON.parse(K.data);h(de=>de&&de.id===se.assistantId?{...de,done:!0,finalMessage:se.message}:de)}catch{}}),()=>W.close()},[e,n]),O.useEffect(()=>{if(!f)return;const W=f.blocks.reduce((K,se)=>se.type==="text"?K+(se.target.length-se.displayed.length):K,0);if(W<=0){if(f.done&&f.finalMessage){const K=f.finalMessage;n.setQueryData(["chat-session",e],se=>!se||se.messages.some(de=>de.id===K.id)?se:{...se,messages:[...se.messages,K],lastMessageAt:K.ts,messageCount:se.messageCount+1}),n.invalidateQueries({queryKey:["chat-sessions"]}),h(null),x(!1)}return}const fe=setTimeout(()=>{h(K=>{if(!K)return K;let se=Math.max(1,Math.ceil(W/40));const de=K.blocks.map(Re=>{if(Re.type!=="text"||se<=0)return Re;const mt=Re.target.length-Re.displayed.length;if(mt<=0)return Re;const xt=Math.min(mt,se);return se-=xt,{...Re,displayed:Re.target.slice(0,Re.displayed.length+xt)}});return{...K,blocks:de}})},25);return()=>clearTimeout(fe)},[f,n,e]),O.useEffect(()=>{const W=v.current;W&&(W.scrollTop=W.scrollHeight)},[c.data,f]);const L=O.useCallback(async(W={})=>{var fe,K;try{const se=await Gm({cwd:((fe=W.cwd)==null?void 0:fe.trim())||void 0,title:((K=W.title)==null?void 0:K.trim())||void 0});n.invalidateQueries({queryKey:["chat-sessions"]}),t(`/chat/${se.id}`),w(!1)}catch(se){s({title:"新建对话失败",body:se instanceof Error?se.message:String(se)})}},[n,t,s]),J=O.useCallback(async()=>{const W=m.trim();if(!W&&k.length===0||g)return;let fe=e;if(!fe){const de=await Gm();n.invalidateQueries({queryKey:["chat-sessions"]}),fe=de.id,t(`/chat/${fe}`,{replace:!0})}const K=k.map(de=>de.path),se={id:`optim-${Date.now()}`,role:"user",content:W||"(附件)",ts:new Date().toISOString(),status:"complete",attachments:K.length>0?K:void 0};n.setQueryData(["chat-session",fe],de=>de?{...de,messages:[...de.messages,se],lastMessageAt:se.ts,messageCount:de.messageCount+1}:{id:fe,createdAt:se.ts,lastMessageAt:se.ts,title:W.slice(0,60)||"附件",project:null,messageCount:1,messages:[se]}),b(""),_([]),x(!0);try{await MB(fe,W||"(请查看附件)",K.length>0?K:void 0)}catch(de){x(!1),console.error("sendMessage failed",de),s({title:"发送失败",body:de instanceof Error?de.message:String(de)})}},[m,k,g,e,n,t,s]),ae=O.useCallback(async W=>{if(W.size>hE){s({title:"文件超过上限",body:`单文件上限 50 MB;当前 ${(W.size/1024/1024).toFixed(2)} MB(${W.name})`});return}let fe=e;if(!fe){const K=await Gm();n.invalidateQueries({queryKey:["chat-sessions"]}),fe=K.id,t(`/chat/${fe}`,{replace:!0})}T(!0);try{const K=await DA(fe,W);_(se=>[...se,{path:K.path,name:K.name}])}catch(K){s({title:"附件上传失败",body:K instanceof Error?K.message:String(K)})}finally{T(!1)}},[e,n,t,s]),be=O.useCallback(W=>{_(fe=>fe.filter(K=>K.path!==W))},[]),ue=O.useCallback(async(W,fe)=>{await a({title:"删除对话",body:fe==="cli"?"会从 Console 列表移除(停 daemon 会话)。Claude CLI 在 ~/.claude/projects 下的对话存档会保留 —— 想恢复到终端继续聊就重新跑 sps agent --chat --name <名>。":"对话记录会永久删除,不可恢复。",confirm:"删除",danger:!0})&&(await RB(W),n.invalidateQueries({queryKey:["chat-sessions"]}),e===W&&t("/chat"))},[n,e,t,a]),te=O.useCallback(async()=>{if(e)try{await jB(e)}catch(W){s({title:"中断失败",body:W instanceof Error?W.message:String(W)})}},[e,s]);return d.jsxs("div",{className:"grid grid-cols-[260px_1fr] gap-4 h-[calc(100vh-140px)]",children:[d.jsxs("aside",{className:"nb-card p-3 overflow-auto flex flex-col gap-2",children:[d.jsxs("button",{className:"nb-btn nb-btn-primary w-full justify-center",onClick:()=>w(!0),type:"button",children:[d.jsx(Ii,{size:14,strokeWidth:3}),"新建对话"]}),d.jsxs("div",{className:"mt-2 text-xs font-[family-name:var(--font-heading)] uppercase tracking-wider text-[var(--color-text-muted)] px-2",children:["历史 ",((q=o.data)==null?void 0:q.data.length)??0]}),d.jsxs("div",{className:"flex flex-col gap-1.5 mt-1",children:[(((ce=o.data)==null?void 0:ce.data)??[]).map(W=>d.jsxs("div",{className:["group flex items-start gap-2 p-2 rounded-lg border-2 border-transparent",e===W.id?"bg-[var(--color-accent-mint)] border-[var(--color-text)] shadow-[2px_2px_0_var(--color-text)]":"hover:bg-[var(--color-bg-cream)] hover:border-[var(--color-text)]"].join(" "),children:[d.jsxs("button",{type:"button","aria-label":`打开对话 ${W.title}${W.cwd?`(工作目录 ${W.cwd})`:""}`,onClick:()=>t(`/chat/${W.id}`),className:"flex items-start gap-2 flex-1 min-w-0 text-left",children:[d.jsx(Qv,{size:14,strokeWidth:2.5,className:"mt-0.5 flex-shrink-0"}),d.jsxs("div",{className:"flex-1 min-w-0",children:[d.jsxs("div",{className:"flex items-center gap-1.5 min-w-0",children:[d.jsx("p",{className:"text-sm font-semibold truncate flex-1",children:W.title}),W.source==="cli"&&d.jsx("span",{className:"flex-shrink-0 px-1.5 py-0 rounded-md bg-[var(--color-accent-purple)] border-2 border-[var(--color-text)] text-[9px] font-[family-name:var(--font-mono)] uppercase tracking-wider leading-tight",title:"该会话由 sps agent CLI 创建,从 Claude jsonl 实时读取(只读)",children:"CLI"})]}),d.jsxs("p",{className:"text-[10px] text-[var(--color-text-muted)] font-[family-name:var(--font-mono)] truncate",children:[W.messageCount," msg · ",Pw(W.lastMessageAt??W.createdAt)]}),W.cwd&&d.jsxs("p",{className:"text-[10px] text-[var(--color-text-subtle)] font-[family-name:var(--font-mono)] truncate flex items-center gap-1",title:W.cwd,children:[d.jsx(lc,{size:9,strokeWidth:2.5,className:"flex-shrink-0"}),d.jsx("span",{className:"truncate",dir:"rtl",children:W.cwd})]})]})]}),d.jsx("button",{type:"button","aria-label":W.source==="cli"?"从 Console 移除该 CLI 会话(不影响 Claude jsonl 存档)":"删除对话",className:"opacity-0 group-hover:opacity-100 p-1 hover:text-[var(--color-crashed)]",onClick:fe=>{fe.stopPropagation(),ue(W.id,W.source)},children:d.jsx(zl,{size:12})})]},W.id)),(((Y=o.data)==null?void 0:Y.data)??[]).length===0&&d.jsx("p",{className:"text-xs text-[var(--color-text-subtle)] italic text-center py-4",children:"还没对话。点上面新建。"})]})]}),d.jsx("div",{className:"nb-card p-0 flex flex-col overflow-hidden",children:e?d.jsxs(d.Fragment,{children:[d.jsxs("header",{className:"px-4 py-3 border-b-2 border-[var(--color-text)] bg-[var(--color-bg-cream)]",children:[d.jsx("h2",{className:"font-[family-name:var(--font-heading)] font-bold text-lg",children:((ye=c.data)==null?void 0:ye.title)??"新对话"}),d.jsx("p",{className:"text-xs text-[var(--color-text-muted)] font-[family-name:var(--font-mono)]",children:e}),((R=c.data)==null?void 0:R.cwd)&&d.jsxs("p",{className:"text-xs text-[var(--color-text-muted)] font-[family-name:var(--font-mono)] flex items-center gap-1 mt-1",title:c.data.cwd,children:[d.jsx(lc,{size:11,strokeWidth:2.5,className:"flex-shrink-0"}),d.jsx("span",{className:"truncate",children:c.data.cwd})]})]}),d.jsxs("div",{ref:v,className:"flex-1 overflow-auto p-4 flex flex-col gap-4",children:[(((D=c.data)==null?void 0:D.messages)??[]).map(W=>d.jsx(IB,{msg:W,sessionId:e??null,onPreviewAttachment:fe=>ee(fe)},W.id)),f&&d.jsx(UB,{pending:f}),!c.isLoading&&(((X=c.data)==null?void 0:X.messages)??[]).length===0&&!f&&!g&&d.jsx("p",{className:"text-center text-[var(--color-text-subtle)] italic mt-12",children:"下方输入问题开始对话 · Enter 发送 · Shift+Enter 换行"})]}),((C=c.data)==null?void 0:C.source)==="cli"?d.jsxs("div",{className:"border-t-2 border-[var(--color-text)] p-4 bg-[var(--color-accent-purple)]",children:[d.jsxs("p",{className:"text-sm font-[family-name:var(--font-mono)] text-[var(--color-text-muted)] text-center",children:["这是 ",d.jsx("strong",{children:"CLI 会话"}),"(由 ",d.jsx("code",{children:"sps agent"})," 创建),Console 仅展示历史。续聊请在终端运行:"]}),d.jsxs("pre",{className:"mt-2 px-3 py-2 bg-[var(--color-bg)] border-2 border-[var(--color-text)] rounded-md text-xs font-[family-name:var(--font-mono)] overflow-x-auto",children:["sps agent --chat --name ",(e??"").replace(/^session-/,"")]})]}):d.jsxs("div",{className:["border-t-2 border-[var(--color-text)] p-3 bg-[var(--color-bg-cream)] transition-colors",M?"bg-[var(--color-accent-mint)]":""].join(" "),onDragOver:W=>{W.dataTransfer.types.includes("Files")&&(W.preventDefault(),W.dataTransfer.dropEffect="copy",M||F(!0))},onDragLeave:()=>F(!1),onDrop:W=>{if(!W.dataTransfer.types.includes("Files"))return;W.preventDefault(),F(!1);const fe=Array.from(W.dataTransfer.files??[]);for(const K of fe)ae(K)},children:[(k.length>0||A)&&d.jsxs("div",{className:"flex flex-wrap gap-2 mb-2",children:[k.map(W=>d.jsxs("button",{type:"button",className:"flex items-center gap-1.5 px-2 py-1 rounded-md bg-[var(--color-bg)] border-2 border-[var(--color-text)] text-xs font-[family-name:var(--font-mono)] hover:bg-[var(--color-accent-mint)] group",onClick:()=>ee(W.path),title:`${W.name}
547
547
  ${W.path}
548
548
  点击预览`,children:[jf(W.path)?d.jsx(hC,{size:11,strokeWidth:2.5,className:"flex-shrink-0"}):d.jsx(Ec,{size:11,strokeWidth:2.5,className:"flex-shrink-0"}),d.jsx("span",{className:"truncate max-w-[180px]",children:W.name}),d.jsx("span",{role:"button","aria-label":`移除 ${W.name}`,className:"ml-1 hover:text-[var(--color-crashed)] cursor-pointer",onClick:fe=>{fe.stopPropagation(),be(W.path)},children:d.jsx(_i,{size:11,strokeWidth:3})})]},W.path)),A&&d.jsxs("span",{className:"flex items-center gap-1.5 px-2 py-1 text-xs text-[var(--color-text-muted)] font-[family-name:var(--font-mono)]",children:[d.jsx(zt,{size:11,strokeWidth:2.5,className:"animate-spin"}),"上传中..."]})]}),d.jsxs("div",{className:"flex gap-2 items-end",children:[d.jsx("button",{type:"button",className:"nb-btn flex-shrink-0",onClick:()=>$(!0),disabled:g,"aria-label":"附加本地文件",title:"附加本地文件(也可拖拽 / 粘贴图片)",children:d.jsx(kC,{size:14,strokeWidth:2.5})}),d.jsx("textarea",{className:"nb-input flex-1 resize-none",placeholder:M?"松开鼠标以附加文件…":"说点什么… (Enter 发送,Shift+Enter 换行,可拖入文件 / 粘贴图片)",rows:2,value:m,onChange:W=>b(W.target.value),onKeyDown:W=>{W.key==="Enter"&&!W.shiftKey&&!W.nativeEvent.isComposing&&(W.preventDefault(),J())},onPaste:W=>{const K=Array.from(W.clipboardData.items??[]).filter(se=>se.kind==="file"&&se.type.startsWith("image/"));if(K.length!==0){W.preventDefault();for(const se of K){const de=se.getAsFile();de&&ae(de)}}},"aria-label":"消息输入"}),f?d.jsxs("button",{className:"nb-btn nb-btn-danger",onClick:te,type:"button","aria-label":"中断生成",children:[d.jsx(lE,{size:14,strokeWidth:3}),"中断"]}):d.jsxs("button",{className:"nb-btn nb-btn-primary",onClick:J,disabled:!m.trim()&&k.length===0||g,type:"button","aria-label":"发送",children:[g?d.jsx(zt,{size:14,strokeWidth:3,className:"animate-spin"}):d.jsx(IC,{size:14,strokeWidth:3}),"发送"]})]})]})]}):d.jsx("div",{className:"flex-1 flex items-center justify-center p-8",children:d.jsxs("div",{className:"text-center max-w-md",children:[d.jsx("div",{className:"w-20 h-20 rounded-2xl bg-[var(--color-accent-mint)] border-[3px] border-[var(--color-text)] shadow-[3px_3px_0_var(--color-text)] flex items-center justify-center mx-auto mb-4",children:d.jsx(Qv,{size:32,strokeWidth:2.5})}),d.jsx("h1",{className:"font-[family-name:var(--font-heading)] text-2xl font-bold mb-2",children:"对话 💬"}),d.jsx("p",{className:"text-sm text-[var(--color-text-muted)] mb-4",children:'点左上角"新建对话"开始一个 session。或直接在下方输入,会自动建 session。'}),d.jsx("p",{className:"text-xs text-[var(--color-text-subtle)] italic",children:"Enter 发送 · Shift+Enter 换行 · 内容流式返回"})]})})}),E&&d.jsx(zB,{onCancel:()=>w(!1),onCreate:W=>L(W)}),j&&d.jsx(Xp,{mode:"file",title:"选择附件文件",initialPath:((ge=c.data)==null?void 0:ge.cwd)??void 0,onCancel:()=>$(!1),onSelect:W=>{_(fe=>{if(fe.some(se=>se.path===W))return fe;const K=W.split(/[\\/]/).pop()||W;return[...fe,{path:W,name:K}]}),$(!1)}}),H&&e&&d.jsx(LB,{sessionId:e,path:H,onClose:()=>ee(null)})]})}function jf(e){return/\.(png|jpe?g|gif|webp|svg|avif)$/i.test(e)}function c1(e){return/\.pdf$/i.test(e)}function Qm(e){return/\.(txt|md|log|json|yaml|yml|csv|html|xml|tsx?|jsx?|css|sh|ya?ml|conf|toml|ini|env|gitignore|sql|py|rb|go|rs|java|kt|swift|c|cc|cpp|h|hpp)$/i.test(e)}function LB({sessionId:e,path:t,onClose:n}){const[a,s]=O.useState(null),[o,c]=O.useState(null);O.useEffect(()=>{const m=b=>{b.key==="Escape"&&(b.preventDefault(),n())};return window.addEventListener("keydown",m),()=>window.removeEventListener("keydown",m)},[n]),O.useEffect(()=>{if(!Qm(t))return;let m=!1;return fetch(hp(e,t)).then(async b=>{if(!b.ok)throw new Error(`${b.status}`);return b.text()}).then(b=>{m||s(b.length>2e5?b.slice(0,2e5)+`
549
549
 
@@ -7,7 +7,7 @@
7
7
  <link rel="preconnect" href="https://fonts.googleapis.com">
8
8
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
9
9
  <link href="https://fonts.googleapis.com/css2?family=Fredoka:wght@400;500;600;700&family=DM+Sans:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet">
10
- <script type="module" crossorigin src="/assets/index-C5yBUuEw.js"></script>
10
+ <script type="module" crossorigin src="/assets/index-Diuf9X57.js"></script>
11
11
  <link rel="stylesheet" crossorigin href="/assets/index-BPZgV2XB.css">
12
12
  </head>
13
13
  <body>
@@ -65,10 +65,16 @@ export interface CreateSessionInput {
65
65
  cwd?: string | null;
66
66
  }
67
67
  export interface ChatExecutor {
68
- /** 停止会话对应的 daemon worker(Delete 时清理) */
68
+ /** 停止会话对应的 daemon worker(Console 路径:会自动加 chat- 前缀) */
69
69
  stopSession(sessionId: string): Promise<void>;
70
70
  /** 中断正在进行的 assistant turn */
71
71
  cancelRun(sessionId: string): Promise<void>;
72
+ /**
73
+ * v0.51.13:按完整 slot 名停 daemon session(CLI 路径用)。
74
+ * 调用方已知 slot 名形如 `session-default` / `session-foo`,不需要再拼前缀。
75
+ * Slot 不存在或 daemon 未运行时静默 no-op。
76
+ */
77
+ stopExactSlot(slot: string): Promise<void>;
72
78
  }
73
79
  export interface ChatServiceDeps {
74
80
  readonly fs: FileSystem;
@@ -90,6 +96,11 @@ export declare class ChatService {
90
96
  total: number;
91
97
  }, DomainError>>;
92
98
  delete(id: string): Promise<Result<void, DomainError>>;
99
+ /**
100
+ * 从 daemon state.json 里把 slot 删掉,让 list() 不再返回。
101
+ * jsonl 文件刻意留着 —— 那是 Claude CLI 自己的存档,跨边界删除越权。
102
+ */
103
+ private removeDaemonSession;
93
104
  interrupt(id: string): Promise<Result<void, DomainError>>;
94
105
  private sessionPath;
95
106
  private summarize;
@@ -1 +1 @@
1
- {"version":3,"file":"ChatService.d.ts","sourceRoot":"","sources":["../../src/services/ChatService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ChatService.d.ts","sourceRoot":"","sources":["../../src/services/ChatService.ts"],"names":[],"mappings":"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"}
@@ -15,11 +15,10 @@
15
15
  */
16
16
  import { randomUUID } from 'node:crypto';
17
17
  import { resolve } from 'node:path';
18
- import { resolveSessionPaths } from '../core/paths.js';
19
18
  import { jsonlExists, parseJsonlMessages, summarizeJsonl, } from '../core/claudeJsonl.js';
20
19
  import { domainError } from '../shared/errors.js';
21
20
  import { err, ok } from '../shared/result.js';
22
- import { chatSessionsDir } from '../shared/runtimePaths.js';
21
+ import { chatSessionsDir, sessionsDir } from '../shared/runtimePaths.js';
23
22
  export class ChatService {
24
23
  deps;
25
24
  constructor(deps) {
@@ -83,7 +82,7 @@ export class ChatService {
83
82
  }
84
83
  /** 读 daemon state.json 取 sessions —— 文件不存在或损坏返回空数组 */
85
84
  readDaemonSessions() {
86
- const path = resolveSessionPaths().stateFile;
85
+ const path = resolve(sessionsDir(), 'state.json');
87
86
  if (!this.deps.fs.exists(path))
88
87
  return [];
89
88
  try {
@@ -173,11 +172,23 @@ export class ChatService {
173
172
  async delete(id) {
174
173
  if (!isValidSessionId(id))
175
174
  return err(invalidId());
176
- // CLI 会话只读:jsonl Claude CLI 自己的存档,Console 不该删。
175
+ // CLI 会话:停 daemon slot + 从 state.json 移除;保留 Claude jsonl 存档(Claude 自己的文件)。
177
176
  if (id.startsWith('session-')) {
178
- return err(domainError('validation', 'CHAT_CLI_READ_ONLY', 'CLI 会话只读 —— 用 sps agent close --name <名称> 来关闭', {
179
- details: { id },
180
- }));
177
+ if (this.deps.executor) {
178
+ try {
179
+ await this.deps.executor.stopExactSlot(id);
180
+ }
181
+ catch {
182
+ /* daemon 没起或 slot 已不在,照样推进 */
183
+ }
184
+ }
185
+ try {
186
+ this.removeDaemonSession(id);
187
+ }
188
+ catch (cause) {
189
+ return err(domainError('internal', 'CHAT_DELETE_FAIL', '从 daemon state 移除会话失败', { cause }));
190
+ }
191
+ return ok(undefined);
181
192
  }
182
193
  const path = this.sessionPath(id);
183
194
  if (this.deps.fs.exists(path)) {
@@ -199,6 +210,29 @@ export class ChatService {
199
210
  }
200
211
  return ok(undefined);
201
212
  }
213
+ /**
214
+ * 从 daemon state.json 里把 slot 删掉,让 list() 不再返回。
215
+ * jsonl 文件刻意留着 —— 那是 Claude CLI 自己的存档,跨边界删除越权。
216
+ */
217
+ removeDaemonSession(slot) {
218
+ const path = resolve(sessionsDir(), 'state.json');
219
+ if (!this.deps.fs.exists(path))
220
+ return;
221
+ let parsed;
222
+ try {
223
+ parsed = JSON.parse(this.deps.fs.readFile(path));
224
+ }
225
+ catch {
226
+ // 损坏的 state.json:交给 daemon 自己重建,这里不动
227
+ return;
228
+ }
229
+ if (!parsed.sessions || !parsed.sessions[slot])
230
+ return;
231
+ delete parsed.sessions[slot];
232
+ parsed.updatedAt = this.deps.clock.nowIso();
233
+ parsed.updatedBy = 'chat-service-delete';
234
+ this.deps.fs.writeFileAtomic(path, JSON.stringify(parsed, null, 2));
235
+ }
202
236
  async interrupt(id) {
203
237
  if (!isValidSessionId(id))
204
238
  return err(invalidId());
@@ -1 +1 @@
1
- {"version":3,"file":"ChatService.js","sourceRoot":"","sources":["../../src/services/ChatService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ChatService.js","sourceRoot":"","sources":["../../src/services/ChatService.ts"],"names":[],"mappings":"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"}
@@ -47,6 +47,7 @@ export declare class DefaultPipelineExecutor implements PipelineExecutor {
47
47
  export declare class DefaultChatExecutor implements ChatExecutor {
48
48
  stopSession(sessionId: string): Promise<void>;
49
49
  cancelRun(sessionId: string): Promise<void>;
50
+ stopExactSlot(slot: string): Promise<void>;
50
51
  }
51
52
  export declare class DefaultProjectInitExecutor implements ProjectInitExecutor {
52
53
  init(project: string, opts: ProjectInitOpts): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"executors.d.ts","sourceRoot":"","sources":["../../src/services/executors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAChF,OAAO,KAAK,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAChF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAIzD,qBAAa,qBAAsB,YAAW,cAAc;IACpD,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA2EnD,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAgCzD;AAQD,qBAAa,uBAAwB,YAAW,gBAAgB;IAClD,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,cAAc;IAE9C,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUpC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAYpE;;;;;;;;;OASG;IACG,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAkEtD;;;OAGG;YACW,iBAAiB;CAkBhC;AAMD,qBAAa,mBAAoB,YAAW,YAAY;IAChD,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAO7C,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAQlD;AAID,qBAAa,0BAA2B,YAAW,mBAAmB;IAC9D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;CAIlE"}
1
+ {"version":3,"file":"executors.d.ts","sourceRoot":"","sources":["../../src/services/executors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAChF,OAAO,KAAK,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAChF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAIzD,qBAAa,qBAAsB,YAAW,cAAc;IACpD,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA2EnD,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAgCzD;AAQD,qBAAa,uBAAwB,YAAW,gBAAgB;IAClD,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,cAAc;IAE9C,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUpC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAYpE;;;;;;;;;OASG;IACG,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAkEtD;;;OAGG;YACW,iBAAiB;CAkBhC;AAMD,qBAAa,mBAAoB,YAAW,YAAY;IAChD,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAO7C,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAS3C,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAMjD;AAID,qBAAa,0BAA2B,YAAW,mBAAmB;IAC9D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;CAIlE"}
@@ -232,6 +232,13 @@ export class DefaultChatExecutor {
232
232
  }
233
233
  await client.cancelRun(`${CHAT_SLOT_PREFIX}${sessionId}`);
234
234
  }
235
+ async stopExactSlot(slot) {
236
+ const { DaemonClient } = await import('../daemon/daemonClient.js');
237
+ const client = new DaemonClient();
238
+ if (!(await client.isRunning()))
239
+ return;
240
+ await client.stopSession(slot).catch(() => undefined);
241
+ }
235
242
  }
236
243
  // ─── ProjectInitExecutor —— 直接调 executeProjectInit ─────────────────
237
244
  export class DefaultProjectInitExecutor {
@@ -1 +1 @@
1
- {"version":3,"file":"executors.js","sourceRoot":"","sources":["../../src/services/executors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"executors.js","sourceRoot":"","sources":["../../src/services/executors.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@coralai/sps-cli",
3
- "version": "0.51.12",
3
+ "version": "0.51.13",
4
4
  "description": "SPS CLI — AI-driven development pipeline orchestrator",
5
5
  "type": "module",
6
6
  "main": "dist/main.js",