@yancyyu/openhermit 1.6.30 → 1.6.32
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.
- package/dist-renderer/assets/{ProjectEditorOverlay-DsQt4FHy.js → ProjectEditorOverlay-DwWYwUf8.js} +1 -1
- package/dist-renderer/assets/{TeamGraphOverlay-BjZC53xf.js → TeamGraphOverlay-BK6PUN3W.js} +1 -1
- package/dist-renderer/assets/{_basePickBy-CrWocIjq.js → _basePickBy-DdNwxEcj.js} +1 -1
- package/dist-renderer/assets/{_baseUniq-B6d8ysWi.js → _baseUniq-BKO88SUv.js} +1 -1
- package/dist-renderer/assets/{arc-DAIYCFP8.js → arc-8OCcRtx5.js} +1 -1
- package/dist-renderer/assets/{architectureDiagram-VXUJARFQ-B3UudXJh.js → architectureDiagram-VXUJARFQ-BaVzqHNU.js} +1 -1
- package/dist-renderer/assets/{blockDiagram-VD42YOAC-DbptKQ4W.js → blockDiagram-VD42YOAC-BlD3aS2M.js} +1 -1
- package/dist-renderer/assets/{c4Diagram-YG6GDRKO-C4WQuZpV.js → c4Diagram-YG6GDRKO-CWhysgWg.js} +1 -1
- package/dist-renderer/assets/channel-VSASRd7w.js +1 -0
- package/dist-renderer/assets/{chunk-4BX2VUAB-Dp7fVpI_.js → chunk-4BX2VUAB-39vXfQp7.js} +1 -1
- package/dist-renderer/assets/{chunk-55IACEB6-B8KGfbAy.js → chunk-55IACEB6-uCvPl6T8.js} +1 -1
- package/dist-renderer/assets/{chunk-B4BG7PRW-BG1oJrjA.js → chunk-B4BG7PRW-BrGj559B.js} +1 -1
- package/dist-renderer/assets/{chunk-DI55MBZ5-DRmxNjht.js → chunk-DI55MBZ5-Djfr1KmT.js} +1 -1
- package/dist-renderer/assets/{chunk-FMBD7UC4-D6VLvy16.js → chunk-FMBD7UC4-Cv2iCCiq.js} +1 -1
- package/dist-renderer/assets/{chunk-QN33PNHL-DZou1667.js → chunk-QN33PNHL-CXzDZbbd.js} +1 -1
- package/dist-renderer/assets/{chunk-QZHKN3VN-CghmasSh.js → chunk-QZHKN3VN-CRO6vWKS.js} +1 -1
- package/dist-renderer/assets/{chunk-TZMSLE5B-B7apcMPK.js → chunk-TZMSLE5B-D5Luxvqw.js} +1 -1
- package/dist-renderer/assets/classDiagram-2ON5EDUG-CZKOiI95.js +1 -0
- package/dist-renderer/assets/classDiagram-v2-WZHVMYZB-CZKOiI95.js +1 -0
- package/dist-renderer/assets/clone-CEVt7zS8.js +1 -0
- package/dist-renderer/assets/{cose-bilkent-S5V4N54A-05e5uQDp.js → cose-bilkent-S5V4N54A-BrIj9YHY.js} +1 -1
- package/dist-renderer/assets/{dagre-6UL2VRFP-B06bRykF.js → dagre-6UL2VRFP-BFPvK4JJ.js} +1 -1
- package/dist-renderer/assets/{diagram-PSM6KHXK-CY7VYQ7c.js → diagram-PSM6KHXK-CTyUB42n.js} +1 -1
- package/dist-renderer/assets/{diagram-QEK2KX5R-BjKEH7dD.js → diagram-QEK2KX5R-V9DMzwyh.js} +1 -1
- package/dist-renderer/assets/{diagram-S2PKOQOG-Bf4ELS1_.js → diagram-S2PKOQOG-D8fWNJWp.js} +1 -1
- package/dist-renderer/assets/{erDiagram-Q2GNP2WA-DJ753_L9.js → erDiagram-Q2GNP2WA-C69oTboq.js} +1 -1
- package/dist-renderer/assets/{flowDiagram-NV44I4VS-B71S-lC-.js → flowDiagram-NV44I4VS-C8MnYH3t.js} +1 -1
- package/dist-renderer/assets/{ganttDiagram-JELNMOA3-C_U42mSZ.js → ganttDiagram-JELNMOA3-DnRfBK-T.js} +1 -1
- package/dist-renderer/assets/{gitGraphDiagram-V2S2FVAM-DKUJU4Ns.js → gitGraphDiagram-V2S2FVAM-BzUxkq9s.js} +1 -1
- package/dist-renderer/assets/{graph-DY3qbzqj.js → graph-DUpjXmIN.js} +1 -1
- package/dist-renderer/assets/{index-C8B_nKOF.js → index-BnyC9eDn.js} +1 -1
- package/dist-renderer/assets/{index-BlOrAXp3.js → index-CP1a4BYJ.js} +569 -569
- package/dist-renderer/assets/index-CSt8DTcn.css +1 -0
- package/dist-renderer/assets/{index-Bs27J5gB.js → index-CWP6WvZl.js} +1 -1
- package/dist-renderer/assets/{index-DLKyDr4T.js → index-D_f0E90u.js} +1 -1
- package/dist-renderer/assets/{index-Dhsk3_DD.js → index-F0-beTLg.js} +1 -1
- package/dist-renderer/assets/{index-GpUvV2xs.js → index-pIDl3FPP.js} +1 -1
- package/dist-renderer/assets/{infoDiagram-HS3SLOUP-BNs0y3IG.js → infoDiagram-HS3SLOUP-B43WMCmB.js} +1 -1
- package/dist-renderer/assets/{journeyDiagram-XKPGCS4Q-CqPnw4UV.js → journeyDiagram-XKPGCS4Q-DjfJCd1x.js} +1 -1
- package/dist-renderer/assets/{kanban-definition-3W4ZIXB7-SLlzcUJ2.js → kanban-definition-3W4ZIXB7-CjRQqAUU.js} +1 -1
- package/dist-renderer/assets/{layout-BZLlNmbr.js → layout-DmcOdDIQ.js} +1 -1
- package/dist-renderer/assets/{linear-qz6v45xy.js → linear-DP0CqQZK.js} +1 -1
- package/dist-renderer/assets/{mindmap-definition-VGOIOE7T-B1-kmEWV.js → mindmap-definition-VGOIOE7T-BMvf_dPT.js} +1 -1
- package/dist-renderer/assets/{pieDiagram-ADFJNKIX-B8a02iNx.js → pieDiagram-ADFJNKIX-C2eg65Te.js} +1 -1
- package/dist-renderer/assets/{quadrantDiagram-AYHSOK5B-BKv1Xfou.js → quadrantDiagram-AYHSOK5B-DsWbG3ez.js} +1 -1
- package/dist-renderer/assets/{requirementDiagram-UZGBJVZJ-B3DUpZi2.js → requirementDiagram-UZGBJVZJ-DU1uyMjP.js} +1 -1
- package/dist-renderer/assets/{sankeyDiagram-TZEHDZUN-DmPzuTsy.js → sankeyDiagram-TZEHDZUN-DJVBJwOK.js} +1 -1
- package/dist-renderer/assets/{sequenceDiagram-WL72ISMW-Bo7RelRb.js → sequenceDiagram-WL72ISMW-CfRnIrs0.js} +1 -1
- package/dist-renderer/assets/{stateDiagram-FKZM4ZOC-1epX98gV.js → stateDiagram-FKZM4ZOC-cNHRId0N.js} +1 -1
- package/dist-renderer/assets/{stateDiagram-v2-4FDKWEC3-03Ym9PTr.js → stateDiagram-v2-4FDKWEC3-SBUDuLpP.js} +1 -1
- package/dist-renderer/assets/{timeline-definition-IT6M3QCI-r6isC62H.js → timeline-definition-IT6M3QCI-PwVrIKR_.js} +1 -1
- package/dist-renderer/assets/treemap-GDKQZRPO-Dtx0XOre.js +162 -0
- package/dist-renderer/assets/{xychartDiagram-PRI3JC2R-t4-rwdAw.js → xychartDiagram-PRI3JC2R-CqS3H24Y.js} +1 -1
- package/dist-renderer/index.html +2 -2
- package/package.json +1 -1
- package/src/renderer/components/extensions/ExtensionStoreView.tsx +4 -1
- package/src/renderer/components/extensions/mcp/McpServerDetailDialog.tsx +100 -15
- package/src/renderer/components/team/TeamDetailView.tsx +55 -139
- package/src/renderer/components/team/TeamListFilterPopover.tsx +0 -16
- package/src/renderer/components/team/TeamListView.tsx +7 -32
- package/src/renderer/components/team/dialogs/EditTeamDialog.tsx +283 -409
- package/src/renderer/components/team/dialogs/useTeamEditForm.ts +280 -0
- package/src/renderer/utils/multimodelProviderVisibility.ts +17 -0
- package/src/renderer/utils/openCodeRuntimeDeliveryDiagnostics.ts +29 -9
- package/dist-renderer/assets/channel-DbjZvWii.js +0 -1
- package/dist-renderer/assets/classDiagram-2ON5EDUG-D_FGxxsl.js +0 -1
- package/dist-renderer/assets/classDiagram-v2-WZHVMYZB-D_FGxxsl.js +0 -1
- package/dist-renderer/assets/clone-CJ1kxO2J.js +0 -1
- package/dist-renderer/assets/index-CmZPUEhS.css +0 -1
- package/dist-renderer/assets/treemap-GDKQZRPO-CGKpOUF2.js +0 -162
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{_ as a,A as ei,B as si,Z as Lt,Y as ni,C as ai,D as ri,I as Et,ae as oi,J as hi,a3 as li,ab as xt,aa as It,ac as ci,av as ui,N as gi,b7 as xi,aD as Tt}from"./index-
|
|
1
|
+
import{_ as a,A as ei,B as si,Z as Lt,Y as ni,C as ai,D as ri,I as Et,ae as oi,J as hi,a3 as li,ab as xt,aa as It,ac as ci,av as ui,N as gi,b7 as xi,aD as Tt}from"./index-CP1a4BYJ.js";import{i as di}from"./init-Gi6I4Gst.js";import{o as fi}from"./ordinal-Cboi1Yqb.js";import{l as Dt}from"./linear-DP0CqQZK.js";import"./splashScene-C8lWNnm4.js";import"./defaultLocale-DX6XiGOO.js";function pi(t,i,e){t=+t,i=+i,e=(n=arguments.length)<2?(i=t,t=0,1):n<3?1:+e;for(var s=-1,n=Math.max(0,Math.ceil((i-t)/e))|0,x=new Array(n);++s<n;)x[s]=t+s*e;return x}function ht(){var t=fi().unknown(void 0),i=t.domain,e=t.range,s=0,n=1,x,g,m=!1,S=0,D=0,v=.5;delete t.unknown;function w(){var y=i().length,E=n<s,T=E?n:s,P=E?s:n;x=(P-T)/Math.max(1,y-S+D*2),m&&(x=Math.floor(x)),T+=(P-T-x*(y-S))*v,g=x*(1-S),m&&(T=Math.round(T),g=Math.round(g));var I=pi(y).map(function(p){return T+x*p});return e(E?I.reverse():I)}return t.domain=function(y){return arguments.length?(i(y),w()):i()},t.range=function(y){return arguments.length?([s,n]=y,s=+s,n=+n,w()):[s,n]},t.rangeRound=function(y){return[s,n]=y,s=+s,n=+n,m=!0,w()},t.bandwidth=function(){return g},t.step=function(){return x},t.round=function(y){return arguments.length?(m=!!y,w()):m},t.padding=function(y){return arguments.length?(S=Math.min(1,D=+y),w()):S},t.paddingInner=function(y){return arguments.length?(S=Math.min(1,y),w()):S},t.paddingOuter=function(y){return arguments.length?(D=+y,w()):D},t.align=function(y){return arguments.length?(v=Math.max(0,Math.min(1,y)),w()):v},t.copy=function(){return ht(i(),[s,n]).round(m).paddingInner(S).paddingOuter(D).align(v)},di.apply(w(),arguments)}var lt=function(){var t=a(function(O,o,c,u){for(c=c||{},u=O.length;u--;c[O[u]]=o);return c},"o"),i=[1,10,12,14,16,18,19,21,23],e=[2,6],s=[1,3],n=[1,5],x=[1,6],g=[1,7],m=[1,5,10,12,14,16,18,19,21,23,34,35,36],S=[1,25],D=[1,26],v=[1,28],w=[1,29],y=[1,30],E=[1,31],T=[1,32],P=[1,33],I=[1,34],p=[1,35],_=[1,36],l=[1,37],W=[1,43],z=[1,42],U=[1,47],X=[1,50],h=[1,10,12,14,16,18,19,21,23,34,35,36],L=[1,10,12,14,16,18,19,21,23,24,26,27,28,34,35,36],C=[1,10,12,14,16,18,19,21,23,24,26,27,28,34,35,36,41,42,43,44,45,46,47,48,49,50],k=[1,64],$={trace:a(function(){},"trace"),yy:{},symbols_:{error:2,start:3,eol:4,XYCHART:5,chartConfig:6,document:7,CHART_ORIENTATION:8,statement:9,title:10,text:11,X_AXIS:12,parseXAxis:13,Y_AXIS:14,parseYAxis:15,LINE:16,plotData:17,BAR:18,acc_title:19,acc_title_value:20,acc_descr:21,acc_descr_value:22,acc_descr_multiline_value:23,SQUARE_BRACES_START:24,commaSeparatedNumbers:25,SQUARE_BRACES_END:26,NUMBER_WITH_DECIMAL:27,COMMA:28,xAxisData:29,bandData:30,ARROW_DELIMITER:31,commaSeparatedTexts:32,yAxisData:33,NEWLINE:34,SEMI:35,EOF:36,alphaNum:37,STR:38,MD_STR:39,alphaNumToken:40,AMP:41,NUM:42,ALPHA:43,PLUS:44,EQUALS:45,MULT:46,DOT:47,BRKT:48,MINUS:49,UNDERSCORE:50,$accept:0,$end:1},terminals_:{2:"error",5:"XYCHART",8:"CHART_ORIENTATION",10:"title",12:"X_AXIS",14:"Y_AXIS",16:"LINE",18:"BAR",19:"acc_title",20:"acc_title_value",21:"acc_descr",22:"acc_descr_value",23:"acc_descr_multiline_value",24:"SQUARE_BRACES_START",26:"SQUARE_BRACES_END",27:"NUMBER_WITH_DECIMAL",28:"COMMA",31:"ARROW_DELIMITER",34:"NEWLINE",35:"SEMI",36:"EOF",38:"STR",39:"MD_STR",41:"AMP",42:"NUM",43:"ALPHA",44:"PLUS",45:"EQUALS",46:"MULT",47:"DOT",48:"BRKT",49:"MINUS",50:"UNDERSCORE"},productions_:[0,[3,2],[3,3],[3,2],[3,1],[6,1],[7,0],[7,2],[9,2],[9,2],[9,2],[9,2],[9,2],[9,3],[9,2],[9,3],[9,2],[9,2],[9,1],[17,3],[25,3],[25,1],[13,1],[13,2],[13,1],[29,1],[29,3],[30,3],[32,3],[32,1],[15,1],[15,2],[15,1],[33,3],[4,1],[4,1],[4,1],[11,1],[11,1],[11,1],[37,1],[37,2],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1]],performAction:a(function(o,c,u,d,A,r,j){var f=r.length-1;switch(A){case 5:d.setOrientation(r[f]);break;case 9:d.setDiagramTitle(r[f].text.trim());break;case 12:d.setLineData({text:"",type:"text"},r[f]);break;case 13:d.setLineData(r[f-1],r[f]);break;case 14:d.setBarData({text:"",type:"text"},r[f]);break;case 15:d.setBarData(r[f-1],r[f]);break;case 16:this.$=r[f].trim(),d.setAccTitle(this.$);break;case 17:case 18:this.$=r[f].trim(),d.setAccDescription(this.$);break;case 19:this.$=r[f-1];break;case 20:this.$=[Number(r[f-2]),...r[f]];break;case 21:this.$=[Number(r[f])];break;case 22:d.setXAxisTitle(r[f]);break;case 23:d.setXAxisTitle(r[f-1]);break;case 24:d.setXAxisTitle({type:"text",text:""});break;case 25:d.setXAxisBand(r[f]);break;case 26:d.setXAxisRangeData(Number(r[f-2]),Number(r[f]));break;case 27:this.$=r[f-1];break;case 28:this.$=[r[f-2],...r[f]];break;case 29:this.$=[r[f]];break;case 30:d.setYAxisTitle(r[f]);break;case 31:d.setYAxisTitle(r[f-1]);break;case 32:d.setYAxisTitle({type:"text",text:""});break;case 33:d.setYAxisRangeData(Number(r[f-2]),Number(r[f]));break;case 37:this.$={text:r[f],type:"text"};break;case 38:this.$={text:r[f],type:"text"};break;case 39:this.$={text:r[f],type:"markdown"};break;case 40:this.$=r[f];break;case 41:this.$=r[f-1]+""+r[f];break}},"anonymous"),table:[t(i,e,{3:1,4:2,7:4,5:s,34:n,35:x,36:g}),{1:[3]},t(i,e,{4:2,7:4,3:8,5:s,34:n,35:x,36:g}),t(i,e,{4:2,7:4,6:9,3:10,5:s,8:[1,11],34:n,35:x,36:g}),{1:[2,4],9:12,10:[1,13],12:[1,14],14:[1,15],16:[1,16],18:[1,17],19:[1,18],21:[1,19],23:[1,20]},t(m,[2,34]),t(m,[2,35]),t(m,[2,36]),{1:[2,1]},t(i,e,{4:2,7:4,3:21,5:s,34:n,35:x,36:g}),{1:[2,3]},t(m,[2,5]),t(i,[2,7],{4:22,34:n,35:x,36:g}),{11:23,37:24,38:S,39:D,40:27,41:v,42:w,43:y,44:E,45:T,46:P,47:I,48:p,49:_,50:l},{11:39,13:38,24:W,27:z,29:40,30:41,37:24,38:S,39:D,40:27,41:v,42:w,43:y,44:E,45:T,46:P,47:I,48:p,49:_,50:l},{11:45,15:44,27:U,33:46,37:24,38:S,39:D,40:27,41:v,42:w,43:y,44:E,45:T,46:P,47:I,48:p,49:_,50:l},{11:49,17:48,24:X,37:24,38:S,39:D,40:27,41:v,42:w,43:y,44:E,45:T,46:P,47:I,48:p,49:_,50:l},{11:52,17:51,24:X,37:24,38:S,39:D,40:27,41:v,42:w,43:y,44:E,45:T,46:P,47:I,48:p,49:_,50:l},{20:[1,53]},{22:[1,54]},t(h,[2,18]),{1:[2,2]},t(h,[2,8]),t(h,[2,9]),t(L,[2,37],{40:55,41:v,42:w,43:y,44:E,45:T,46:P,47:I,48:p,49:_,50:l}),t(L,[2,38]),t(L,[2,39]),t(C,[2,40]),t(C,[2,42]),t(C,[2,43]),t(C,[2,44]),t(C,[2,45]),t(C,[2,46]),t(C,[2,47]),t(C,[2,48]),t(C,[2,49]),t(C,[2,50]),t(C,[2,51]),t(h,[2,10]),t(h,[2,22],{30:41,29:56,24:W,27:z}),t(h,[2,24]),t(h,[2,25]),{31:[1,57]},{11:59,32:58,37:24,38:S,39:D,40:27,41:v,42:w,43:y,44:E,45:T,46:P,47:I,48:p,49:_,50:l},t(h,[2,11]),t(h,[2,30],{33:60,27:U}),t(h,[2,32]),{31:[1,61]},t(h,[2,12]),{17:62,24:X},{25:63,27:k},t(h,[2,14]),{17:65,24:X},t(h,[2,16]),t(h,[2,17]),t(C,[2,41]),t(h,[2,23]),{27:[1,66]},{26:[1,67]},{26:[2,29],28:[1,68]},t(h,[2,31]),{27:[1,69]},t(h,[2,13]),{26:[1,70]},{26:[2,21],28:[1,71]},t(h,[2,15]),t(h,[2,26]),t(h,[2,27]),{11:59,32:72,37:24,38:S,39:D,40:27,41:v,42:w,43:y,44:E,45:T,46:P,47:I,48:p,49:_,50:l},t(h,[2,33]),t(h,[2,19]),{25:73,27:k},{26:[2,28]},{26:[2,20]}],defaultActions:{8:[2,1],10:[2,3],21:[2,2],72:[2,28],73:[2,20]},parseError:a(function(o,c){if(c.recoverable)this.trace(o);else{var u=new Error(o);throw u.hash=c,u}},"parseError"),parse:a(function(o){var c=this,u=[0],d=[],A=[null],r=[],j=this.table,f="",J=0,St=0,Zt=2,_t=1,Jt=r.slice.call(arguments,1),R=Object.create(this.lexer),Y={yy:{}};for(var nt in this.yy)Object.prototype.hasOwnProperty.call(this.yy,nt)&&(Y.yy[nt]=this.yy[nt]);R.setInput(o,Y.yy),Y.yy.lexer=R,Y.yy.parser=this,typeof R.yylloc>"u"&&(R.yylloc={});var at=R.yylloc;r.push(at);var ti=R.options&&R.options.ranges;typeof Y.yy.parseError=="function"?this.parseError=Y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function ii(V){u.length=u.length-2*V,A.length=A.length-V,r.length=r.length-V}a(ii,"popStack");function kt(){var V;return V=d.pop()||R.lex()||_t,typeof V!="number"&&(V instanceof Array&&(d=V,V=d.pop()),V=c.symbols_[V]||V),V}a(kt,"lex");for(var M,H,B,rt,q={},tt,F,Rt,it;;){if(H=u[u.length-1],this.defaultActions[H]?B=this.defaultActions[H]:((M===null||typeof M>"u")&&(M=kt()),B=j[H]&&j[H][M]),typeof B>"u"||!B.length||!B[0]){var ot="";it=[];for(tt in j[H])this.terminals_[tt]&&tt>Zt&&it.push("'"+this.terminals_[tt]+"'");R.showPosition?ot="Parse error on line "+(J+1)+`:
|
|
2
2
|
`+R.showPosition()+`
|
|
3
3
|
Expecting `+it.join(", ")+", got '"+(this.terminals_[M]||M)+"'":ot="Parse error on line "+(J+1)+": Unexpected "+(M==_t?"end of input":"'"+(this.terminals_[M]||M)+"'"),this.parseError(ot,{text:R.match,token:this.terminals_[M]||M,line:R.yylineno,loc:at,expected:it})}if(B[0]instanceof Array&&B.length>1)throw new Error("Parse Error: multiple actions possible at state: "+H+", token: "+M);switch(B[0]){case 1:u.push(M),A.push(R.yytext),r.push(R.yylloc),u.push(B[1]),M=null,St=R.yyleng,f=R.yytext,J=R.yylineno,at=R.yylloc;break;case 2:if(F=this.productions_[B[1]][1],q.$=A[A.length-F],q._$={first_line:r[r.length-(F||1)].first_line,last_line:r[r.length-1].last_line,first_column:r[r.length-(F||1)].first_column,last_column:r[r.length-1].last_column},ti&&(q._$.range=[r[r.length-(F||1)].range[0],r[r.length-1].range[1]]),rt=this.performAction.apply(q,[f,St,J,Y.yy,B[1],A,r].concat(Jt)),typeof rt<"u")return rt;F&&(u=u.slice(0,-1*F*2),A=A.slice(0,-1*F),r=r.slice(0,-1*F)),u.push(this.productions_[B[1]][0]),A.push(q.$),r.push(q._$),Rt=j[u[u.length-2]][u[u.length-1]],u.push(Rt);break;case 3:return!0}}return!0},"parse")},Ct=function(){var O={EOF:1,parseError:a(function(c,u){if(this.yy.parser)this.yy.parser.parseError(c,u);else throw new Error(c)},"parseError"),setInput:a(function(o,c){return this.yy=c||this.yy||{},this._input=o,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:a(function(){var o=this._input[0];this.yytext+=o,this.yyleng++,this.offset++,this.match+=o,this.matched+=o;var c=o.match(/(?:\r\n?|\n).*/g);return c?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),o},"input"),unput:a(function(o){var c=o.length,u=o.split(/(?:\r\n?|\n)/g);this._input=o+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-c),this.offset-=c;var d=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),u.length-1&&(this.yylineno-=u.length-1);var A=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:u?(u.length===d.length?this.yylloc.first_column:0)+d[d.length-u.length].length-u[0].length:this.yylloc.first_column-c},this.options.ranges&&(this.yylloc.range=[A[0],A[0]+this.yyleng-c]),this.yyleng=this.yytext.length,this},"unput"),more:a(function(){return this._more=!0,this},"more"),reject:a(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).
|
|
4
4
|
`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:a(function(o){this.unput(this.match.slice(o))},"less"),pastInput:a(function(){var o=this.matched.substr(0,this.matched.length-this.match.length);return(o.length>20?"...":"")+o.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:a(function(){var o=this.match;return o.length<20&&(o+=this._input.substr(0,20-o.length)),(o.substr(0,20)+(o.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:a(function(){var o=this.pastInput(),c=new Array(o.length+1).join("-");return o+this.upcomingInput()+`
|
package/dist-renderer/index.html
CHANGED
|
@@ -353,9 +353,9 @@
|
|
|
353
353
|
} catch (e) {}
|
|
354
354
|
})();
|
|
355
355
|
</script>
|
|
356
|
-
<script type="module" crossorigin src="/assets/index-
|
|
356
|
+
<script type="module" crossorigin src="/assets/index-CP1a4BYJ.js"></script>
|
|
357
357
|
<link rel="modulepreload" crossorigin href="/assets/splashScene-C8lWNnm4.js">
|
|
358
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
358
|
+
<link rel="stylesheet" crossorigin href="/assets/index-CSt8DTcn.css">
|
|
359
359
|
</head>
|
|
360
360
|
<body>
|
|
361
361
|
<div id="splash">
|
package/package.json
CHANGED
|
@@ -30,6 +30,7 @@ import { useExtensionsTabState } from '@renderer/hooks/useExtensionsTabState';
|
|
|
30
30
|
import { useStore } from '@renderer/store';
|
|
31
31
|
import { createLoadingMultimodelCliStatus } from '@renderer/store/slices/cliInstallerSlice';
|
|
32
32
|
import {
|
|
33
|
+
filterExtensionStoreProviders,
|
|
33
34
|
formatCliExtensionCapabilityStatus,
|
|
34
35
|
getVisibleMultimodelProviders,
|
|
35
36
|
isMultimodelRuntimeStatus,
|
|
@@ -291,7 +292,9 @@ export const ExtensionStoreView = (): React.JSX.Element => {
|
|
|
291
292
|
const isRefreshing = effectiveCliStatusLoading || mcpBrowseLoading || skillsLoading;
|
|
292
293
|
const cliStatusBanner = useMemo(() => {
|
|
293
294
|
const providers = effectiveCliStatus?.providers ?? [];
|
|
294
|
-
const visibleProviders =
|
|
295
|
+
const visibleProviders = filterExtensionStoreProviders(
|
|
296
|
+
getVisibleMultimodelProviders(providers)
|
|
297
|
+
);
|
|
295
298
|
const isMultimodel = isMultimodelRuntimeStatus(effectiveCliStatus);
|
|
296
299
|
const shouldShowMultimodelProviderCards =
|
|
297
300
|
isMultimodel && visibleProviders.length > 0 && effectiveCliStatus !== null;
|
|
@@ -15,6 +15,12 @@ import {
|
|
|
15
15
|
DialogHeader,
|
|
16
16
|
DialogTitle,
|
|
17
17
|
} from '@renderer/components/ui/dialog';
|
|
18
|
+
import {
|
|
19
|
+
Tooltip,
|
|
20
|
+
TooltipContent,
|
|
21
|
+
TooltipProvider,
|
|
22
|
+
TooltipTrigger,
|
|
23
|
+
} from '@renderer/components/ui/tooltip';
|
|
18
24
|
import { Input } from '@renderer/components/ui/input';
|
|
19
25
|
import { Label } from '@renderer/components/ui/label';
|
|
20
26
|
import {
|
|
@@ -26,6 +32,7 @@ import {
|
|
|
26
32
|
} from '@renderer/components/ui/select';
|
|
27
33
|
import { useStore } from '@renderer/store';
|
|
28
34
|
import {
|
|
35
|
+
getExtensionActionDisableReason,
|
|
29
36
|
getMcpInstallationSummaryLabel,
|
|
30
37
|
getMcpOperationKey,
|
|
31
38
|
getPreferredMcpInstallationEntry,
|
|
@@ -37,7 +44,7 @@ import {
|
|
|
37
44
|
isProjectScopedMcpScope,
|
|
38
45
|
isSharedMcpScope,
|
|
39
46
|
} from '@shared/utils/mcpScopes';
|
|
40
|
-
import { ExternalLink, Lock, Plus, Star, Trash2, Wrench } from 'lucide-react';
|
|
47
|
+
import { Check, ExternalLink, Loader2, Lock, Plus, Star, Trash2, Wrench } from 'lucide-react';
|
|
41
48
|
|
|
42
49
|
import { InstallButton } from '../common/InstallButton';
|
|
43
50
|
import { HarnessSelector } from '../common/HarnessSelector';
|
|
@@ -256,6 +263,18 @@ export const McpServerDetailDialog = ({
|
|
|
256
263
|
missingRequiredEnvVars ||
|
|
257
264
|
missingRequiredHeaders ||
|
|
258
265
|
scopeRequiresProjectPath;
|
|
266
|
+
const installCliDisableReason = getExtensionActionDisableReason({
|
|
267
|
+
isInstalled: false,
|
|
268
|
+
cliStatus,
|
|
269
|
+
cliStatusLoading: cliStatusLoading ?? false,
|
|
270
|
+
section: 'mcp',
|
|
271
|
+
});
|
|
272
|
+
const uninstallCliDisableReason = getExtensionActionDisableReason({
|
|
273
|
+
isInstalled: true,
|
|
274
|
+
cliStatus,
|
|
275
|
+
cliStatusLoading: cliStatusLoading ?? false,
|
|
276
|
+
section: 'mcp',
|
|
277
|
+
});
|
|
259
278
|
const diagnosticBadgeClass =
|
|
260
279
|
diagnostic?.status === 'connected'
|
|
261
280
|
? 'border-emerald-500/30 bg-emerald-500/10 text-emerald-400'
|
|
@@ -599,20 +618,86 @@ export const McpServerDetailDialog = ({
|
|
|
599
618
|
</div>
|
|
600
619
|
)}
|
|
601
620
|
|
|
602
|
-
{/* Install/Uninstall
|
|
603
|
-
<div className="flex justify-end pt-1">
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
621
|
+
{/* Install / Save & Restart / Uninstall */}
|
|
622
|
+
<div className="flex items-center justify-end gap-2 pt-1">
|
|
623
|
+
{isInstalledForScope ? (
|
|
624
|
+
<>
|
|
625
|
+
<Button
|
|
626
|
+
variant="ghost"
|
|
627
|
+
size="sm"
|
|
628
|
+
className="border-red-500/30 text-red-400 hover:bg-red-500/10"
|
|
629
|
+
data-testid="uninstall-button"
|
|
630
|
+
onClick={handleUninstall}
|
|
631
|
+
disabled={Boolean(uninstallCliDisableReason)}
|
|
632
|
+
>
|
|
633
|
+
<Trash2 className="size-3.5" />
|
|
634
|
+
<span className="ml-1.5">卸载</span>
|
|
635
|
+
</Button>
|
|
636
|
+
{installProgress === 'pending' ? (
|
|
637
|
+
<Button size="default" disabled>
|
|
638
|
+
<Loader2 className="size-3.5 animate-spin" />
|
|
639
|
+
<span className="ml-1.5">保存并重启中...</span>
|
|
640
|
+
</Button>
|
|
641
|
+
) : installProgress === 'success' ? (
|
|
642
|
+
<Button size="default" disabled className="text-green-400">
|
|
643
|
+
<Check className="size-3.5" />
|
|
644
|
+
<span className="ml-1.5">完成</span>
|
|
645
|
+
</Button>
|
|
646
|
+
) : installProgress === 'error' ? (
|
|
647
|
+
<div className="flex max-w-64 flex-col items-end gap-1">
|
|
648
|
+
<TooltipProvider>
|
|
649
|
+
<Tooltip>
|
|
650
|
+
<TooltipTrigger asChild>
|
|
651
|
+
<span tabIndex={0}>
|
|
652
|
+
<Button
|
|
653
|
+
size="default"
|
|
654
|
+
variant="outline"
|
|
655
|
+
className="border-red-500/30 text-red-400 hover:bg-red-500/10"
|
|
656
|
+
onClick={handleInstall}
|
|
657
|
+
disabled={installDisabled || Boolean(installCliDisableReason)}
|
|
658
|
+
>
|
|
659
|
+
保存并重启
|
|
660
|
+
</Button>
|
|
661
|
+
</span>
|
|
662
|
+
</TooltipTrigger>
|
|
663
|
+
{installError && (
|
|
664
|
+
<TooltipContent className="max-w-64 text-red-300">
|
|
665
|
+
{installError}
|
|
666
|
+
</TooltipContent>
|
|
667
|
+
)}
|
|
668
|
+
</Tooltip>
|
|
669
|
+
</TooltipProvider>
|
|
670
|
+
{installError && (
|
|
671
|
+
<p className="text-right text-[11px] leading-4 text-red-300">
|
|
672
|
+
{installError}
|
|
673
|
+
</p>
|
|
674
|
+
)}
|
|
675
|
+
</div>
|
|
676
|
+
) : (
|
|
677
|
+
<Button
|
|
678
|
+
size="default"
|
|
679
|
+
data-testid="save-restart-button"
|
|
680
|
+
onClick={handleInstall}
|
|
681
|
+
disabled={installDisabled || Boolean(installCliDisableReason)}
|
|
682
|
+
>
|
|
683
|
+
保存并重启
|
|
684
|
+
</Button>
|
|
685
|
+
)}
|
|
686
|
+
</>
|
|
687
|
+
) : (
|
|
688
|
+
<InstallButton
|
|
689
|
+
state={installProgress}
|
|
690
|
+
isInstalled={false}
|
|
691
|
+
section="mcp"
|
|
692
|
+
cliStatus={cliStatus}
|
|
693
|
+
cliStatusLoading={cliStatusLoading}
|
|
694
|
+
onInstall={handleInstall}
|
|
695
|
+
onUninstall={handleUninstall}
|
|
696
|
+
disabled={installDisabled}
|
|
697
|
+
size="default"
|
|
698
|
+
errorMessage={installError}
|
|
699
|
+
/>
|
|
700
|
+
)}
|
|
616
701
|
</div>
|
|
617
702
|
</div>
|
|
618
703
|
)}
|
|
@@ -22,6 +22,7 @@ import {
|
|
|
22
22
|
DialogHeader,
|
|
23
23
|
DialogTitle,
|
|
24
24
|
} from '@renderer/components/ui/dialog';
|
|
25
|
+
import { Popover, PopoverContent, PopoverTrigger } from '@renderer/components/ui/popover';
|
|
25
26
|
import { Tooltip, TooltipContent, TooltipTrigger } from '@renderer/components/ui/tooltip';
|
|
26
27
|
import { getTeamColorSet, getThemedBadge } from '@renderer/constants/teamColors';
|
|
27
28
|
import { useTabIdOptional } from '@renderer/contexts/useTabUIContext';
|
|
@@ -69,6 +70,7 @@ import {
|
|
|
69
70
|
Trash2,
|
|
70
71
|
Loader2,
|
|
71
72
|
MessageSquare,
|
|
73
|
+
MoreHorizontal,
|
|
72
74
|
Shield,
|
|
73
75
|
Users,
|
|
74
76
|
} from 'lucide-react';
|
|
@@ -883,22 +885,7 @@ export const TeamDetailView = ({
|
|
|
883
885
|
const [updatingRoleLoading, setUpdatingRoleLoading] = useState(false);
|
|
884
886
|
const [editDialogOpen, setEditDialogOpen] = useState(false);
|
|
885
887
|
const [envDialogOpen, setEnvDialogOpen] = useState(false);
|
|
886
|
-
const [
|
|
887
|
-
useEffect(() => {
|
|
888
|
-
if (!editDialogOpen || !teamName) return;
|
|
889
|
-
let cancelled = false;
|
|
890
|
-
void (async () => {
|
|
891
|
-
try {
|
|
892
|
-
const saved = await api.teams.getSavedRequest(teamName);
|
|
893
|
-
if (!cancelled) setSavedLaunchRequest(saved ?? null);
|
|
894
|
-
} catch {
|
|
895
|
-
if (!cancelled) setSavedLaunchRequest(null);
|
|
896
|
-
}
|
|
897
|
-
})();
|
|
898
|
-
return () => {
|
|
899
|
-
cancelled = true;
|
|
900
|
-
};
|
|
901
|
-
}, [editDialogOpen, teamName]);
|
|
888
|
+
const [headerMenuOpen, setHeaderMenuOpen] = useState(false);
|
|
902
889
|
const [launchDialogState, setLaunchDialogState] = useState<{
|
|
903
890
|
open: boolean;
|
|
904
891
|
mode: TeamLaunchDialogMode;
|
|
@@ -1643,11 +1630,7 @@ export const TeamDetailView = ({
|
|
|
1643
1630
|
|
|
1644
1631
|
const handleRestartTeamFromEdit = useCallback(async (): Promise<void> => {
|
|
1645
1632
|
await api.ccSettings.restart();
|
|
1646
|
-
|
|
1647
|
-
setTimeout(() => {
|
|
1648
|
-
void fetchTeams();
|
|
1649
|
-
void selectTeam(teamName);
|
|
1650
|
-
}, 3000);
|
|
1633
|
+
await Promise.all([fetchTeams(), selectTeam(teamName)]);
|
|
1651
1634
|
}, [fetchTeams, selectTeam, teamName]);
|
|
1652
1635
|
|
|
1653
1636
|
const handleSaveAndRestartFromEdit = useCallback(
|
|
@@ -2089,24 +2072,6 @@ export const TeamDetailView = ({
|
|
|
2089
2072
|
const headerColorSet = data.config.color
|
|
2090
2073
|
? getTeamColorSet(data.config.color)
|
|
2091
2074
|
: nameColorSet(data.config.name);
|
|
2092
|
-
const rawTeamSettings = (data.settings ?? {}) as Record<string, unknown>;
|
|
2093
|
-
const currentManagedSources =
|
|
2094
|
-
data.config.managedSources ??
|
|
2095
|
-
(typeof rawTeamSettings.admin_from === 'string' ? rawTeamSettings.admin_from : '*');
|
|
2096
|
-
const currentDisabledCommands =
|
|
2097
|
-
data.config.disabledCommands ??
|
|
2098
|
-
(Array.isArray(rawTeamSettings.disabled_commands)
|
|
2099
|
-
? rawTeamSettings.disabled_commands.filter(
|
|
2100
|
-
(entry): entry is string => typeof entry === 'string' && entry.trim().length > 0
|
|
2101
|
-
)
|
|
2102
|
-
: []);
|
|
2103
|
-
const currentPlatformAllowFrom =
|
|
2104
|
-
data.config.platformAllowFrom ??
|
|
2105
|
-
(typeof rawTeamSettings.platform_allow_from === 'object' &&
|
|
2106
|
-
rawTeamSettings.platform_allow_from !== null &&
|
|
2107
|
-
!Array.isArray(rawTeamSettings.platform_allow_from)
|
|
2108
|
-
? (rawTeamSettings.platform_allow_from as Record<string, string>)
|
|
2109
|
-
: {});
|
|
2110
2075
|
|
|
2111
2076
|
return (
|
|
2112
2077
|
<>
|
|
@@ -2158,52 +2123,55 @@ export const TeamDetailView = ({
|
|
|
2158
2123
|
</div>
|
|
2159
2124
|
</div>
|
|
2160
2125
|
<div className="flex shrink-0 items-center gap-1.5">
|
|
2161
|
-
|
|
2162
|
-
|
|
2163
|
-
|
|
2164
|
-
|
|
2165
|
-
|
|
2166
|
-
|
|
2167
|
-
|
|
2168
|
-
|
|
2169
|
-
|
|
2170
|
-
|
|
2171
|
-
|
|
2172
|
-
|
|
2173
|
-
<TooltipContent side="bottom">环境变量</TooltipContent>
|
|
2174
|
-
</Tooltip>
|
|
2175
|
-
)}
|
|
2176
|
-
<Tooltip>
|
|
2177
|
-
<TooltipTrigger asChild>
|
|
2126
|
+
<Button
|
|
2127
|
+
variant="outline"
|
|
2128
|
+
size="sm"
|
|
2129
|
+
className="h-7 gap-1.5 px-2.5 text-xs text-[var(--color-text-secondary)]"
|
|
2130
|
+
disabled={isTeamProvisioning}
|
|
2131
|
+
onClick={() => setEditDialogOpen(true)}
|
|
2132
|
+
>
|
|
2133
|
+
<Pencil size={12} />
|
|
2134
|
+
编辑
|
|
2135
|
+
</Button>
|
|
2136
|
+
<Popover open={headerMenuOpen} onOpenChange={setHeaderMenuOpen}>
|
|
2137
|
+
<PopoverTrigger asChild>
|
|
2178
2138
|
<Button
|
|
2179
2139
|
variant="ghost"
|
|
2180
2140
|
size="sm"
|
|
2181
|
-
className="h-7
|
|
2182
|
-
disabled={isTeamProvisioning}
|
|
2183
|
-
onClick={() => setEditDialogOpen(true)}
|
|
2141
|
+
className="h-7 w-7 px-0 text-[var(--color-text-muted)]"
|
|
2184
2142
|
>
|
|
2185
|
-
<
|
|
2143
|
+
<MoreHorizontal size={14} />
|
|
2186
2144
|
</Button>
|
|
2187
|
-
</
|
|
2188
|
-
<
|
|
2189
|
-
{
|
|
2190
|
-
|
|
2191
|
-
|
|
2192
|
-
|
|
2193
|
-
|
|
2194
|
-
|
|
2195
|
-
|
|
2196
|
-
|
|
2197
|
-
size="sm"
|
|
2198
|
-
className="h-7 gap-1 px-2 text-xs text-red-400 hover:bg-red-500/10 hover:text-red-300"
|
|
2199
|
-
onClick={handleDeleteTeam}
|
|
2145
|
+
</PopoverTrigger>
|
|
2146
|
+
<PopoverContent align="end" className="w-44 p-1">
|
|
2147
|
+
{data.config.projectPath && (
|
|
2148
|
+
<button
|
|
2149
|
+
type="button"
|
|
2150
|
+
className="flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-xs text-[var(--color-text-secondary)] hover:bg-[var(--color-surface-raised)] hover:text-[var(--color-text)]"
|
|
2151
|
+
onClick={() => {
|
|
2152
|
+
setHeaderMenuOpen(false);
|
|
2153
|
+
setEnvDialogOpen(true);
|
|
2154
|
+
}}
|
|
2200
2155
|
>
|
|
2201
|
-
<
|
|
2202
|
-
|
|
2203
|
-
|
|
2204
|
-
|
|
2205
|
-
|
|
2206
|
-
|
|
2156
|
+
<Shield size={13} />
|
|
2157
|
+
环境变量
|
|
2158
|
+
</button>
|
|
2159
|
+
)}
|
|
2160
|
+
{teamName !== 'default' && teamName !== 'my-project' && (
|
|
2161
|
+
<button
|
|
2162
|
+
type="button"
|
|
2163
|
+
className="flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-xs text-red-400 hover:bg-red-500/10"
|
|
2164
|
+
onClick={() => {
|
|
2165
|
+
setHeaderMenuOpen(false);
|
|
2166
|
+
handleDeleteTeam();
|
|
2167
|
+
}}
|
|
2168
|
+
>
|
|
2169
|
+
<Trash2 size={13} />
|
|
2170
|
+
删除团队
|
|
2171
|
+
</button>
|
|
2172
|
+
)}
|
|
2173
|
+
</PopoverContent>
|
|
2174
|
+
</Popover>
|
|
2207
2175
|
</div>
|
|
2208
2176
|
</div>
|
|
2209
2177
|
{data.config.description && (
|
|
@@ -2275,10 +2243,6 @@ export const TeamDetailView = ({
|
|
|
2275
2243
|
})()}
|
|
2276
2244
|
</div>
|
|
2277
2245
|
|
|
2278
|
-
{!data.isAlive && !isTeamProvisioning ? (
|
|
2279
|
-
<TeamOfflineStatusBanner teamName={teamName} onLaunch={handleStartCcConnectTeam} />
|
|
2280
|
-
) : null}
|
|
2281
|
-
|
|
2282
2246
|
<div ref={provisioningBannerRef}>
|
|
2283
2247
|
<TeamProvisioningBanner teamName={teamName} />
|
|
2284
2248
|
</div>
|
|
@@ -2616,62 +2580,6 @@ export const TeamDetailView = ({
|
|
|
2616
2580
|
}}
|
|
2617
2581
|
/>
|
|
2618
2582
|
|
|
2619
|
-
<EditTeamDialog
|
|
2620
|
-
open={editDialogOpen}
|
|
2621
|
-
teamName={teamName}
|
|
2622
|
-
currentName={data.config.name}
|
|
2623
|
-
currentDescription={data.config.description ?? ''}
|
|
2624
|
-
currentColor={data.config.color ?? ''}
|
|
2625
|
-
currentAgentType={data.config.agentType ?? data.harness ?? 'cursor'}
|
|
2626
|
-
currentWorkDir={data.workDir ?? data.config.projectPath ?? ''}
|
|
2627
|
-
currentPermissionMode={
|
|
2628
|
-
data.config.permissionMode ?? data.permissionMode ?? 'default'
|
|
2629
|
-
}
|
|
2630
|
-
currentLanguage={
|
|
2631
|
-
data.config.language ??
|
|
2632
|
-
(typeof rawTeamSettings.language === 'string' ? rawTeamSettings.language : 'zh')
|
|
2633
|
-
}
|
|
2634
|
-
currentShowContextIndicator={
|
|
2635
|
-
data.config.showContextIndicator ??
|
|
2636
|
-
(typeof rawTeamSettings.show_context_indicator === 'boolean'
|
|
2637
|
-
? rawTeamSettings.show_context_indicator
|
|
2638
|
-
: true)
|
|
2639
|
-
}
|
|
2640
|
-
currentReplyFooter={
|
|
2641
|
-
data.config.replyFooter ??
|
|
2642
|
-
(typeof rawTeamSettings.reply_footer === 'boolean'
|
|
2643
|
-
? rawTeamSettings.reply_footer
|
|
2644
|
-
: true)
|
|
2645
|
-
}
|
|
2646
|
-
currentInjectSender={
|
|
2647
|
-
data.config.injectSender ??
|
|
2648
|
-
(typeof rawTeamSettings.inject_sender === 'boolean'
|
|
2649
|
-
? rawTeamSettings.inject_sender
|
|
2650
|
-
: false)
|
|
2651
|
-
}
|
|
2652
|
-
currentManagedSources={currentManagedSources}
|
|
2653
|
-
currentDisabledCommands={currentDisabledCommands}
|
|
2654
|
-
currentPlatformAllowFrom={currentPlatformAllowFrom}
|
|
2655
|
-
currentProviderRefs={data.providerRefs ?? []}
|
|
2656
|
-
globalProviders={data.globalProviders ?? []}
|
|
2657
|
-
currentMembers={membersWithLiveBranches.filter((m) => !isLeadMember(m))}
|
|
2658
|
-
leadMember={membersWithLiveBranches.find((m) => isLeadMember(m)) ?? null}
|
|
2659
|
-
resolvedMemberColorMap={resolvedMemberColorMap}
|
|
2660
|
-
isTeamAlive={data.isAlive && !isTeamProvisioning}
|
|
2661
|
-
isTeamProvisioning={isTeamProvisioning}
|
|
2662
|
-
projectPath={data.config.projectPath}
|
|
2663
|
-
savedLaunchRequest={savedLaunchRequest}
|
|
2664
|
-
onClose={() => setEditDialogOpen(false)}
|
|
2665
|
-
onSaved={() => {
|
|
2666
|
-
void fetchTeams();
|
|
2667
|
-
void selectTeam(teamName);
|
|
2668
|
-
}}
|
|
2669
|
-
onDeleteTeam={
|
|
2670
|
-
teamName !== 'default' && teamName !== 'my-project' ? handleDeleteTeam : undefined
|
|
2671
|
-
}
|
|
2672
|
-
onRestartTeam={handleRestartTeamFromEdit}
|
|
2673
|
-
/>
|
|
2674
|
-
|
|
2675
2583
|
<Dialog open={envDialogOpen} onOpenChange={setEnvDialogOpen}>
|
|
2676
2584
|
<DialogContent className="max-h-[80vh] max-w-lg overflow-y-auto">
|
|
2677
2585
|
<DialogHeader>
|
|
@@ -2863,6 +2771,14 @@ export const TeamDetailView = ({
|
|
|
2863
2771
|
{teamAgentRuntimeWatcher}
|
|
2864
2772
|
{leadContextWatcher}
|
|
2865
2773
|
{renderBody()}
|
|
2774
|
+
<EditTeamDialog
|
|
2775
|
+
open={editDialogOpen}
|
|
2776
|
+
teamName={teamName}
|
|
2777
|
+
onClose={() => setEditDialogOpen(false)}
|
|
2778
|
+
onDeleteTeam={
|
|
2779
|
+
teamName !== 'default' && teamName !== 'my-project' ? handleDeleteTeam : undefined
|
|
2780
|
+
}
|
|
2781
|
+
/>
|
|
2866
2782
|
</>
|
|
2867
2783
|
);
|
|
2868
2784
|
};
|
|
@@ -79,10 +79,6 @@ export const TeamListFilterPopover = ({
|
|
|
79
79
|
() => teams.filter((t) => aliveSet.has(t.teamName)).length,
|
|
80
80
|
[teams, aliveSet]
|
|
81
81
|
);
|
|
82
|
-
const offlineCount = useMemo(
|
|
83
|
-
() => teams.filter((t) => !aliveSet.has(t.teamName)).length,
|
|
84
|
-
[teams, aliveSet]
|
|
85
|
-
);
|
|
86
82
|
|
|
87
83
|
return (
|
|
88
84
|
<Popover>
|
|
@@ -125,18 +121,6 @@ export const TeamListFilterPopover = ({
|
|
|
125
121
|
<span className="text-[var(--color-text-muted)]">({runningCount})</span>
|
|
126
122
|
</span>
|
|
127
123
|
</label>
|
|
128
|
-
{/* eslint-disable-next-line jsx-a11y/label-has-associated-control -- Radix Checkbox renders a button, not a native input */}
|
|
129
|
-
<label className="flex cursor-pointer items-center gap-2 rounded-md px-1 py-0.5 text-xs text-[var(--color-text-secondary)] hover:bg-[var(--color-surface-raised)]">
|
|
130
|
-
<Checkbox
|
|
131
|
-
checked={filter.selectedStatuses.has('offline')}
|
|
132
|
-
onCheckedChange={() => handleStatusToggle('offline')}
|
|
133
|
-
/>
|
|
134
|
-
<span className="flex items-center gap-1.5">
|
|
135
|
-
<span className="size-1.5 rounded-full bg-zinc-500" />
|
|
136
|
-
离线
|
|
137
|
-
<span className="text-[var(--color-text-muted)]">({offlineCount})</span>
|
|
138
|
-
</span>
|
|
139
|
-
</label>
|
|
140
124
|
</div>
|
|
141
125
|
</div>
|
|
142
126
|
|
|
@@ -85,7 +85,7 @@ function generateUniqueName(sourceName: string, existingNames: string[]): string
|
|
|
85
85
|
}
|
|
86
86
|
}
|
|
87
87
|
|
|
88
|
-
type TeamStatus = 'active' | 'idle' | 'provisioning'
|
|
88
|
+
type TeamStatus = 'active' | 'idle' | 'provisioning';
|
|
89
89
|
|
|
90
90
|
function getRecentProjects(team: TeamSummary): string[] {
|
|
91
91
|
const history = team.projectPathHistory;
|
|
@@ -162,7 +162,7 @@ function renderMemberChips(members: TeamSummaryMember[], isLight: boolean): Reac
|
|
|
162
162
|
|
|
163
163
|
function renderTeamRecentPaths(
|
|
164
164
|
team: TeamSummary,
|
|
165
|
-
status: TeamStatus,
|
|
165
|
+
status: TeamStatus | null,
|
|
166
166
|
matchesCurrentProject: boolean,
|
|
167
167
|
isLight: boolean
|
|
168
168
|
): React.JSX.Element | null {
|
|
@@ -211,7 +211,7 @@ function resolveTeamStatus(
|
|
|
211
211
|
aliveTeams: string[],
|
|
212
212
|
currentProgress: ReturnType<typeof getCurrentProvisioningProgressForTeam>,
|
|
213
213
|
leadActivityByTeam: Record<string, string>
|
|
214
|
-
): TeamStatus {
|
|
214
|
+
): TeamStatus | null {
|
|
215
215
|
if (aliveTeams.includes(teamName)) {
|
|
216
216
|
return leadActivityByTeam[teamName] === 'active' ? 'active' : 'idle';
|
|
217
217
|
}
|
|
@@ -223,10 +223,11 @@ function resolveTeamStatus(
|
|
|
223
223
|
) {
|
|
224
224
|
return 'provisioning';
|
|
225
225
|
}
|
|
226
|
-
return
|
|
226
|
+
return null;
|
|
227
227
|
}
|
|
228
228
|
|
|
229
|
-
const StatusBadge = ({ status }: { status: TeamStatus }): React.JSX.Element => {
|
|
229
|
+
const StatusBadge = ({ status }: { status: TeamStatus | null }): React.JSX.Element | null => {
|
|
230
|
+
if (!status) return null;
|
|
230
231
|
switch (status) {
|
|
231
232
|
case 'active':
|
|
232
233
|
return (
|
|
@@ -249,13 +250,6 @@ const StatusBadge = ({ status }: { status: TeamStatus }): React.JSX.Element => {
|
|
|
249
250
|
启动中...
|
|
250
251
|
</span>
|
|
251
252
|
);
|
|
252
|
-
case 'offline':
|
|
253
|
-
return (
|
|
254
|
-
<span className="inline-flex shrink-0 items-center gap-1 whitespace-nowrap rounded-full bg-zinc-500/15 px-2 py-0.5 text-[10px] font-medium text-zinc-500">
|
|
255
|
-
<span className="size-1.5 rounded-full bg-zinc-500" />
|
|
256
|
-
离线
|
|
257
|
-
</span>
|
|
258
|
-
);
|
|
259
253
|
}
|
|
260
254
|
};
|
|
261
255
|
|
|
@@ -436,9 +430,8 @@ export const TeamListView = (): React.JSX.Element => {
|
|
|
436
430
|
getCurrentProvisioningProgressForTeam(provisioningState, t.teamName),
|
|
437
431
|
leadActivityByTeam
|
|
438
432
|
);
|
|
439
|
-
const isRunning = status !==
|
|
433
|
+
const isRunning = status !== null;
|
|
440
434
|
if (filter.selectedStatuses.has('running') && isRunning) return true;
|
|
441
|
-
if (filter.selectedStatuses.has('offline') && !isRunning) return true;
|
|
442
435
|
return false;
|
|
443
436
|
});
|
|
444
437
|
}
|
|
@@ -1154,24 +1147,6 @@ export const TeamListView = (): React.JSX.Element => {
|
|
|
1154
1147
|
})()}
|
|
1155
1148
|
</div>
|
|
1156
1149
|
<div className="flex shrink-0 gap-1">
|
|
1157
|
-
{status === 'offline' && team.projectPath && (
|
|
1158
|
-
<Tooltip>
|
|
1159
|
-
<TooltipTrigger asChild>
|
|
1160
|
-
<button
|
|
1161
|
-
type="button"
|
|
1162
|
-
className="shrink-0 rounded p-1 text-[var(--color-text-muted)] opacity-0 transition-opacity hover:bg-emerald-500/10 hover:text-emerald-300 disabled:opacity-50 group-hover:opacity-100"
|
|
1163
|
-
onClick={(e) => handleLaunchTeam(team.teamName, team.projectPath, e)}
|
|
1164
|
-
disabled={launchingTeamName === team.teamName}
|
|
1165
|
-
aria-label="启动团队"
|
|
1166
|
-
>
|
|
1167
|
-
<Play size={14} fill="currentColor" />
|
|
1168
|
-
</button>
|
|
1169
|
-
</TooltipTrigger>
|
|
1170
|
-
<TooltipContent side="bottom">
|
|
1171
|
-
{launchingTeamName === team.teamName ? '启动中…' : '启动团队'}
|
|
1172
|
-
</TooltipContent>
|
|
1173
|
-
</Tooltip>
|
|
1174
|
-
)}
|
|
1175
1150
|
{!team.pendingCreate && (
|
|
1176
1151
|
<Tooltip>
|
|
1177
1152
|
<TooltipTrigger asChild>
|