comisai 1.0.24 → 1.0.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. package/node_modules/@comis/agent/package.json +1 -1
  2. package/node_modules/@comis/channels/package.json +1 -1
  3. package/node_modules/@comis/cli/package.json +1 -1
  4. package/node_modules/@comis/core/dist/bootstrap.js +5 -0
  5. package/node_modules/@comis/core/dist/config/env-layer.d.ts +31 -0
  6. package/node_modules/@comis/core/dist/config/env-layer.js +41 -0
  7. package/node_modules/@comis/core/dist/config/layered.d.ts +9 -0
  8. package/node_modules/@comis/core/dist/config/layered.js +11 -0
  9. package/node_modules/@comis/core/package.json +1 -1
  10. package/node_modules/@comis/daemon/dist/daemon.js +3 -0
  11. package/node_modules/@comis/daemon/package.json +1 -1
  12. package/node_modules/@comis/gateway/package.json +1 -1
  13. package/node_modules/@comis/infra/package.json +1 -1
  14. package/node_modules/@comis/memory/package.json +1 -1
  15. package/node_modules/@comis/scheduler/package.json +1 -1
  16. package/node_modules/@comis/shared/package.json +1 -1
  17. package/node_modules/@comis/skills/package.json +1 -1
  18. package/node_modules/@comis/web/dist/assets/{agent-detail-BG9MGWWj.js → agent-detail-ru-AhppM.js} +270 -270
  19. package/node_modules/@comis/web/dist/assets/agent-editor-hjwRuFVp.js +2173 -0
  20. package/node_modules/@comis/web/dist/assets/{agent-list-LHCJ4rw2.js → agent-list-6Uotjatr.js} +170 -170
  21. package/node_modules/@comis/web/dist/assets/{approvals-q9VH_IKr.js → approvals-C-K6hN2U.js} +13 -13
  22. package/node_modules/@comis/web/dist/assets/billing-view-CxysXH0p.js +375 -0
  23. package/node_modules/@comis/web/dist/assets/{channel-detail-CaInesJM.js → channel-detail-BBCKtmne.js} +265 -265
  24. package/node_modules/@comis/web/dist/assets/channel-list-FkfeOLBQ.js +323 -0
  25. package/node_modules/@comis/web/dist/assets/{chat-console-CNmzl0JW.js → chat-console-BumBaIgO.js} +243 -246
  26. package/node_modules/@comis/web/dist/assets/{config-editor-DX4ITw6y.js → config-editor-C9BSwHGy.js} +477 -477
  27. package/node_modules/@comis/web/dist/assets/{context-dag-browser-BwiaF5tf.js → context-dag-browser-BHm00mJD.js} +105 -105
  28. package/node_modules/@comis/web/dist/assets/{context-engine-BZ5Am6hA.js → context-engine-BENY3pWE.js} +136 -136
  29. package/node_modules/@comis/web/dist/assets/decorate-BvWYovGE.js +38 -0
  30. package/node_modules/@comis/web/dist/assets/{delivery-view-OfBZof-m.js → delivery-view-BCnkPsAp.js} +134 -134
  31. package/node_modules/@comis/web/dist/assets/{diagnostics-view-YFwCxgr2.js → diagnostics-view-C_jQFG2H.js} +82 -82
  32. package/node_modules/@comis/web/dist/assets/directive-BOYXJ-K-.js +1 -0
  33. package/node_modules/@comis/web/dist/assets/{extract-variables-BM5qyK-s.js → extract-variables-B7-Doo7l.js} +39 -39
  34. package/node_modules/@comis/web/dist/assets/{ic-array-editor-B7m6x7-S.js → ic-array-editor-BLoEyeLS.js} +29 -29
  35. package/node_modules/@comis/web/dist/assets/{ic-breadcrumb-CUMpp3BL.js → ic-breadcrumb-DqN6G3gc.js} +16 -16
  36. package/node_modules/@comis/web/dist/assets/{ic-budget-segment-bar-BtJ6x5mN.js → ic-budget-segment-bar-zLsMzjDO.js} +20 -20
  37. package/node_modules/@comis/web/dist/assets/ic-chat-message-FdQcZsSQ.js +352 -0
  38. package/node_modules/@comis/web/dist/assets/{ic-confirm-dialog-CCDbB04e.js → ic-confirm-dialog-DGlPbV1T.js} +26 -26
  39. package/node_modules/@comis/web/dist/assets/{ic-connection-dot-CnT1b8xr.js → ic-connection-dot-BgYiK2N4.js} +13 -13
  40. package/node_modules/@comis/web/dist/assets/ic-data-table-CKIvr-ag.js +277 -0
  41. package/node_modules/@comis/web/dist/assets/ic-delivery-row-B3YwjjuM.js +67 -0
  42. package/node_modules/@comis/web/dist/assets/{ic-detail-panel-BF83r-if.js → ic-detail-panel-DiCe4hLr.js} +27 -27
  43. package/node_modules/@comis/web/dist/assets/{ic-empty-state-60l2ePhd.js → ic-empty-state-CM3Wbj2f.js} +19 -19
  44. package/node_modules/@comis/web/dist/assets/ic-graph-canvas-ByRjij68.js +359 -0
  45. package/node_modules/@comis/web/dist/assets/ic-icon-BGNCCPpZ.js +33 -0
  46. package/node_modules/@comis/web/dist/assets/{ic-layer-waterfall-COvEYMg5.js → ic-layer-waterfall-WkaFyu-l.js} +18 -18
  47. package/node_modules/@comis/web/dist/assets/ic-relative-time-B3UAnTqg.js +12 -0
  48. package/node_modules/@comis/web/dist/assets/{ic-search-input-CSOxY9g7.js → ic-search-input-B02AGw1i.js} +22 -22
  49. package/node_modules/@comis/web/dist/assets/{ic-select-Ce-Raudx.js → ic-select-BqfZISjw.js} +29 -29
  50. package/node_modules/@comis/web/dist/assets/ic-tabs-yBjkWKJH.js +95 -0
  51. package/node_modules/@comis/web/dist/assets/ic-tag-CvMVQFRR.js +33 -0
  52. package/node_modules/@comis/web/dist/assets/{ic-time-range-picker-CypCT68y.js → ic-time-range-picker-DXbYeBmY.js} +31 -31
  53. package/node_modules/@comis/web/dist/assets/{ic-tool-call-7MaXSsCW.js → ic-tool-call-DMPHsLyx.js} +51 -51
  54. package/node_modules/@comis/web/dist/assets/index-CVEaS9aY.css +2 -0
  55. package/node_modules/@comis/web/dist/assets/index-FLPhHz8p.js +2792 -0
  56. package/node_modules/@comis/web/dist/assets/{mcp-management-BNZPnpDn.js → mcp-management-5jyScQis.js} +209 -209
  57. package/node_modules/@comis/web/dist/assets/{media-config-BBvTYxOX.js → media-config-J9oT9PPs.js} +154 -154
  58. package/node_modules/@comis/web/dist/assets/{media-test-BkK3RCRK.js → media-test-DGTCtM8-.js} +259 -259
  59. package/node_modules/@comis/web/dist/assets/{memory-inspector-1hDGCGat.js → memory-inspector-D5Re9ptG.js} +450 -450
  60. package/node_modules/@comis/web/dist/assets/{message-center-CXefwsUu.js → message-center-cRLK6ZmG.js} +290 -290
  61. package/node_modules/@comis/web/dist/assets/{models-C1qcU_j3.js → models-D5vu07MR.js} +371 -371
  62. package/node_modules/@comis/web/dist/assets/observability-types-D0tkwElU.js +1 -0
  63. package/node_modules/@comis/web/dist/assets/{observe-view-C0VBhX4C.js → observe-view-CalNNEmd.js} +399 -399
  64. package/node_modules/@comis/web/dist/assets/pipeline-builder-DUYDGwZf.js +1495 -0
  65. package/node_modules/@comis/web/dist/assets/{pipeline-history-DkfOQ6SW.js → pipeline-history-BAO8brOe.js} +124 -124
  66. package/node_modules/@comis/web/dist/assets/{pipeline-history-detail-hyHgD0ai.js → pipeline-history-detail-DectIoQt.js} +65 -65
  67. package/node_modules/@comis/web/dist/assets/{pipeline-list-BPW8hV-q.js → pipeline-list-BHlaBKww.js} +227 -227
  68. package/node_modules/@comis/web/dist/assets/{pipeline-monitor-Bip16T7e.js → pipeline-monitor-BhtpNEHf.js} +298 -298
  69. package/node_modules/@comis/web/dist/assets/{scheduler-BGgwKd06.js → scheduler-VafN_8xi.js} +486 -486
  70. package/node_modules/@comis/web/dist/assets/{security-D15st4xx.js → security-QQXMRTlo.js} +389 -389
  71. package/node_modules/@comis/web/dist/assets/{session-detail-SGEYNJ0M.js → session-detail-BpZ_8Yih.js} +294 -294
  72. package/node_modules/@comis/web/dist/assets/session-key-parser-Dkqcj2Ss.js +1 -0
  73. package/node_modules/@comis/web/dist/assets/session-list-DfCm8Cec.js +231 -0
  74. package/node_modules/@comis/web/dist/assets/{setup-wizard-nT0tz9QP.js → setup-wizard-C-z477CG.js} +486 -494
  75. package/node_modules/@comis/web/dist/assets/{skills-D8yVfSUy.js → skills-BCOGPf6s.js} +329 -329
  76. package/node_modules/@comis/web/dist/assets/{subagents-HHXMeHYo.js → subagents-l-auUraL.js} +74 -74
  77. package/node_modules/@comis/web/dist/assets/{workspace-manager-BQlr10iH.js → workspace-manager-DlvBixiq.js} +236 -236
  78. package/node_modules/@comis/web/dist/index.html +3 -2
  79. package/node_modules/@comis/web/package.json +1 -1
  80. package/package.json +15 -15
  81. package/node_modules/@comis/web/dist/assets/agent-editor-C26Q_xCs.js +0 -2173
  82. package/node_modules/@comis/web/dist/assets/billing-view-CtYvBqTE.js +0 -375
  83. package/node_modules/@comis/web/dist/assets/channel-list-B8dj3O9a.js +0 -323
  84. package/node_modules/@comis/web/dist/assets/directive-DoeGSK_T.js +0 -1
  85. package/node_modules/@comis/web/dist/assets/ic-chat-message-CFyDJd0z.js +0 -352
  86. package/node_modules/@comis/web/dist/assets/ic-data-table-CKUNTxHw.js +0 -277
  87. package/node_modules/@comis/web/dist/assets/ic-delivery-row-GP5Fkygs.js +0 -67
  88. package/node_modules/@comis/web/dist/assets/ic-graph-canvas-C8FuSMe1.js +0 -359
  89. package/node_modules/@comis/web/dist/assets/ic-icon-xeGTVhVG.js +0 -33
  90. package/node_modules/@comis/web/dist/assets/ic-relative-time-3FqpjeAI.js +0 -12
  91. package/node_modules/@comis/web/dist/assets/ic-tabs-B7QtM_v8.js +0 -95
  92. package/node_modules/@comis/web/dist/assets/ic-tag-CPPUnDLF.js +0 -33
  93. package/node_modules/@comis/web/dist/assets/index-CEcM1R_C.js +0 -2830
  94. package/node_modules/@comis/web/dist/assets/index-CIJFuItj.css +0 -1
  95. package/node_modules/@comis/web/dist/assets/observability-types-D7jUtSde.js +0 -1
  96. package/node_modules/@comis/web/dist/assets/pipeline-builder-DcUUIrm0.js +0 -1496
  97. package/node_modules/@comis/web/dist/assets/session-key-parser-DPORMVyU.js +0 -1
  98. package/node_modules/@comis/web/dist/assets/session-list-6ybUTxbY.js +0 -231
@@ -1,211 +1,4 @@
1
- import{a as f,I as v,A as o,b as s,s as b,f as w,i as y,n as m,r as l,t as $}from"./index-CEcM1R_C.js";import"./ic-empty-state-60l2ePhd.js";import"./ic-confirm-dialog-CCDbB04e.js";import"./ic-tag-CPPUnDLF.js";import"./ic-relative-time-3FqpjeAI.js";import"./ic-icon-xeGTVhVG.js";var x=Object.defineProperty,S=Object.getOwnPropertyDescriptor,a=(e,t,i,c)=>{for(var r=c>1?void 0:c?S(t,i):t,p=e.length-1,d;p>=0;p--)(d=e[p])&&(r=(c?d(t,i,r):d(r))||r);return c&&r&&x(t,i,r),r};let n=class extends f{constructor(){super(...arguments),this.rpcClient=null,this.apiClient=null,this.eventDispatcher=null,this._loadState="loading",this._servers=[],this._mcpConfig=[],this._expandedServer=null,this._serverDetail=null,this._showAddForm=!1,this._disconnectTarget=null,this._deleteTarget=null,this._detailLoading=!1,this._showInstructions=!1,this._testingServer=null,this._testResult=null,this._newServerName="",this._newServerTransport="stdio",this._newServerCommand="",this._newServerUrl="",this._newServerHeaders="",this._newServerEnv="",this._rpcStatusUnsub=null}connectedCallback(){super.connectedCallback()}disconnectedCallback(){super.disconnectedCallback(),this._rpcStatusUnsub?.(),this._rpcStatusUnsub=null}willUpdate(e){e.has("rpcClient")&&this.rpcClient&&this._tryLoad()}_tryLoad(){if(!this.rpcClient){this._loadState="loaded";return}this._rpcStatusUnsub?.(),this.rpcClient.status==="connected"?this._loadData():this._rpcStatusUnsub=this.rpcClient.onStatusChange(e=>{e==="connected"&&this._loadData()})}async _loadData(){if(this.rpcClient)try{const[e,t]=await Promise.all([this.rpcClient.call("mcp.list"),this.rpcClient.call("config.read")]);this._servers=e.servers??[],this._mcpConfig=t.config?.integrations?.mcp?.servers??[],this._loadState="loaded"}catch{this._loadState="error"}}async _loadServerDetail(e){if(this.rpcClient){this._detailLoading=!0;try{const t=await this.rpcClient.call("mcp.status",{name:e});this._serverDetail=t,this._expandedServer=e}catch{v.show(`Failed to load tools for ${e}`,"error"),this._expandedServer=null,this._serverDetail=null}finally{this._detailLoading=!1}}}async _patchConfig(e,t,i){if(!this.rpcClient)return!1;try{return await this.rpcClient.call("config.patch",{section:e,key:t,value:i}),!0}catch(c){const r=c instanceof Error?c.message:"Failed to update configuration";return v.show(r,"error"),!1}}_stripRedactedEnv(e){return e.map(t=>{if(!t.env||!Object.values(t.env).some(p=>p==="[REDACTED]"))return t;const{env:c,...r}=t;return r})}_requestDisconnect(e){this._disconnectTarget=e}async _confirmDisconnect(){const e=this._disconnectTarget;if(this._disconnectTarget=null,!(!e||!this.rpcClient))try{await this.rpcClient.call("mcp.disconnect",{name:e}),v.show(`Disconnected ${e}`,"success"),this._expandedServer===e&&(this._expandedServer=null,this._serverDetail=null),this._loadData()}catch{v.show(`Failed to disconnect ${e}`,"error")}}_cancelDisconnect(){this._disconnectTarget=null}async _handleReconnect(e){if(this.rpcClient)try{await this.rpcClient.call("mcp.reconnect",{name:e}),v.show(`Reconnected ${e}`,"success"),this._loadData()}catch{v.show(`Failed to reconnect ${e}`,"error")}}async _handleTest(e){if(this.rpcClient)try{const t=await this.rpcClient.call("mcp.test",{name:e});t.success?v.show(`${e}: test passed`,"success"):v.show(`${e}: test failed${t.message?" — "+t.message:""}`,"error")}catch{v.show(`Failed to test ${e}`,"error")}}_toggleTools(e){this._expandedServer===e?(this._expandedServer=null,this._serverDetail=null,this._showInstructions=!1):(this._showInstructions=!1,this._loadServerDetail(e))}async _toggleServer(e,t){const i=this._mcpConfig.map(r=>r.name===e?{...r,enabled:t}:r);await this._patchConfig("integrations","mcp.servers",this._stripRedactedEnv(i))&&(this._mcpConfig=i)}_removeServer(e){this._deleteTarget=e}async _confirmRemove(){const e=this._deleteTarget;if(this._deleteTarget=null,!e)return;const t=this._mcpConfig.filter(c=>c.name!==e);await this._patchConfig("integrations","mcp.servers",this._stripRedactedEnv(t))&&(this._mcpConfig=t,v.show(`Removed MCP server "${e}"`,"success"),this._loadData())}_cancelRemove(){this._deleteTarget=null}async _addServer(){if(!this._newServerName.trim()){v.show("Server name is required","error");return}const e=this._newServerName.trim();if(this._mcpConfig.some(d=>d.name===e)){v.show(`MCP server "${e}" already exists`,"error");return}if(this._newServerTransport==="stdio"&&!this._newServerCommand.trim()){v.show("Command is required for stdio transport","error");return}if(this._newServerTransport!=="stdio"&&!this._newServerUrl.trim()){v.show("URL is required for remote transport","error");return}const t={name:e,transport:this._newServerTransport,enabled:!0};if(this._newServerTransport==="stdio"){const d=this._newServerCommand.trim().split(/\s+/);t.command=d[0]??"",d.length>1&&(t.args=d.slice(1))}else t.url=this._newServerUrl.trim();const i=this._newServerHeaders.trim();if(i){const d={};for(const h of i.split(`
2
- `)){const u=h.indexOf(":");if(u>0){const g=h.slice(0,u).trim(),_=h.slice(u+1).trim();g&&(d[g]=_)}}Object.keys(d).length>0&&(t.headers=d)}const c=this._newServerEnv.trim();if(c){const d={};for(const h of c.split(`
3
- `)){const u=h.indexOf("=");u>0&&(d[h.slice(0,u).trim()]=h.slice(u+1).trim())}Object.keys(d).length>0&&(t.env=d)}const r=[...this._mcpConfig,t];await this._patchConfig("integrations","mcp.servers",this._stripRedactedEnv(r))&&(this._mcpConfig=r,this._newServerName="",this._newServerCommand="",this._newServerUrl="",this._newServerHeaders="",this._newServerEnv="",this._showAddForm=!1,v.show(`Added MCP server "${e}"`,"success"),this._loadData())}async _testServerConfig(e){if(!(!this.rpcClient||this._testingServer)){this._testingServer=e.name,this._testResult=null;try{const t={name:e.name,transport:e.transport};e.transport==="stdio"?(t.command=e.command,t.args=e.args):t.url=e.url,e.env&&Object.keys(e.env).length>0&&(t.env=e.env),e.headers&&Object.keys(e.headers).length>0&&(t.headers=e.headers);const i=await this.rpcClient.call("mcp.test",t);this._testResult={name:e.name,...i}}catch(t){const i=t instanceof Error?t.message:"Test failed",c=i==="Not connected"||i.includes("WebSocket");this._testResult={name:e.name,success:!1,error:c?"Daemon not connected -- wait for reconnection and try again":i}}finally{this._testingServer=null}}}_statusColor(e){switch(e){case"connected":return"green";case"disconnected":return"default";case"connecting":return"yellow";case"reconnecting":return"yellow";case"error":return"red";default:return"default"}}_renderAddServerForm(){return s`
4
- <div class="add-server-form">
5
- <div class="add-server-title">Add Server</div>
6
- <div class="add-server-row">
7
- <input
8
- class="add-server-input"
9
- type="text"
10
- placeholder="Server name"
11
- .value=${this._newServerName}
12
- @input=${e=>{this._newServerName=e.target.value}}
13
- />
14
- <select
15
- class="add-server-select"
16
- .value=${this._newServerTransport}
17
- @change=${e=>{this._newServerTransport=e.target.value}}
18
- >
19
- <option value="stdio">stdio</option>
20
- <option value="sse">sse</option>
21
- <option value="http">http</option>
22
- </select>
23
- </div>
24
- ${this._newServerTransport==="stdio"?s`
25
- <input
26
- class="add-server-input"
27
- type="text"
28
- placeholder="Command (e.g., npx -y @mcp/server)"
29
- .value=${this._newServerCommand}
30
- @input=${e=>{this._newServerCommand=e.target.value}}
31
- />
32
- `:s`
33
- <input
34
- class="add-server-input"
35
- type="text"
36
- placeholder=${this._newServerTransport==="sse"?"URL (e.g., http://localhost:3001/sse)":"URL (e.g., http://localhost:3001/mcp)"}
37
- .value=${this._newServerUrl}
38
- @input=${e=>{this._newServerUrl=e.target.value}}
39
- />
40
- `}
41
- ${this._newServerTransport!=="stdio"?s`
42
- <textarea
43
- class="add-server-input"
44
- rows="2"
45
- placeholder="Custom headers (one per line: Header-Name: value)"
46
- .value=${this._newServerHeaders}
47
- @input=${e=>{this._newServerHeaders=e.target.value}}
48
- style="resize:vertical;font-family:monospace;font-size:0.85rem"
49
- ></textarea>
50
- `:o}
51
- <textarea
52
- class="add-server-input"
53
- rows="2"
54
- placeholder="Environment variables (one per line: KEY=VALUE)"
55
- .value=${this._newServerEnv}
56
- @input=${e=>{this._newServerEnv=e.target.value}}
57
- style="resize:vertical;font-family:monospace;font-size:0.85rem"
58
- ></textarea>
59
- <div style="display: flex; gap: var(--ic-space-sm);">
60
- <button class="add-server-btn" @click=${()=>this._addServer()}>Add Server</button>
61
- <button class="cancel-btn" @click=${()=>{this._showAddForm=!1,this._newServerName="",this._newServerCommand="",this._newServerUrl="",this._newServerHeaders="",this._newServerEnv=""}}>Cancel</button>
62
- </div>
63
- </div>
64
- `}_renderCapabilityBadges(e){if(!e)return o;const t=[];return e.tools&&t.push(s`<ic-tag variant="info">tools</ic-tag>`),e.resources&&t.push(s`<ic-tag variant="accent">resources</ic-tag>`),e.prompts&&t.push(s`<ic-tag variant="success">prompts</ic-tag>`),t.length===0?o:s`<span class="capability-badges">${t}</span>`}_renderServerVersion(e){return e?s`<span class="server-version">${e.name} v${e.version}</span>`:o}_renderInstructions(){return this._serverDetail?.instructions?s`
65
- <div class="instructions-section">
66
- <button
67
- class="instructions-toggle"
68
- @click=${()=>{this._showInstructions=!this._showInstructions}}
69
- >
70
- ${this._showInstructions?"Hide Instructions":"Show Instructions"}
71
- </button>
72
- ${this._showInstructions?s`<div class="instructions-content">${this._serverDetail.instructions}</div>`:o}
73
- </div>
74
- `:o}_renderToolList(){return this._detailLoading?s`<div class="tool-loading">Loading tools...</div>`:!this._serverDetail||!this._serverDetail.tools.length?s`<div class="tool-loading">No tools discovered</div>`:s`
75
- <div class="tool-list">
76
- ${this._serverDetail.tools.map(e=>s`
77
- <div class="tool-entry">
78
- <div class="tool-name">${e.name}</div>
79
- <div class="tool-qualified">${e.qualifiedName}</div>
80
- ${e.description?s`<div class="tool-desc">${e.description}</div>`:o}
81
- </div>
82
- `)}
83
- </div>
84
- ${this._renderInstructions()}
85
- `}_renderTestResult(e){const t=this._testResult?.name===e?this._testResult:null;return t?t.success?s`<div class="server-test-result server-test-success">Connected -- ${t.toolCount} tool(s): ${t.tools?.join(", ")||"none"}</div>`:s`<div class="server-test-result server-test-error">${t.error}</div>`:o}_renderServer(e){const t=this._expandedServer===e.name,i=e.status==="connected",c=e.status==="disconnected"||e.status==="error"||e.status==="reconnecting",r=this._mcpConfig.find(p=>p.name===e.name);return s`
86
- <div class="server-card">
87
- <div class="server-header">
88
- <ic-tag color=${this._statusColor(e.status)}>${e.status==="reconnecting"&&e.reconnectAttempt?`reconnecting (${e.reconnectAttempt})`:e.status}</ic-tag>
89
- <span class="server-name">${e.name}</span>
90
- ${r?s`
91
- <ic-tag variant=${r.transport==="stdio"?"info":"accent"}>${r.transport}</ic-tag>
92
- `:o}
93
- <span class="server-tools-count">${e.toolCount} tool${e.toolCount!==1?"s":""}</span>
94
- ${this._renderCapabilityBadges(e.capabilities)}
95
- ${this._renderServerVersion(e.serverVersion)}
96
- ${e.lastHealthCheck?s`
97
- <span class="server-health">
98
- Last check: <ic-relative-time .timestamp=${e.lastHealthCheck}></ic-relative-time>
99
- </span>
100
- `:o}
101
- </div>
102
- ${e.status==="error"&&e.error?s`
103
- <span class="server-error">${e.error}</span>
104
- `:o}
105
- ${r?s`
106
- <span class="server-command">
107
- ${r.transport==="stdio"?`${r.command??""}${r.args?.length?" "+r.args.join(" "):""}`:r.url??""}
108
- </span>
109
- ${r.env&&Object.keys(r.env).length>0?s`<span class="server-env-badge" title=${Object.keys(r.env).join(", ")}>env: ${Object.keys(r.env).join(", ")}</span>`:o}
110
- ${r.headers&&Object.keys(r.headers).length>0?s`<span class="server-env-badge" title=${Object.keys(r.headers).join(", ")}>headers: ${Object.keys(r.headers).join(", ")}</span>`:o}
111
- `:o}
112
- <div class="server-actions">
113
- ${i?s`
114
- <button class="action-btn danger" @click=${()=>this._requestDisconnect(e.name)}>Disconnect</button>
115
- `:o}
116
- ${c?s`
117
- <button class="action-btn primary" @click=${()=>this._handleReconnect(e.name)}>Reconnect</button>
118
- `:o}
119
- <button class="action-btn" @click=${()=>this._handleTest(e.name)}>Test</button>
120
- <button class="action-btn" @click=${()=>this._toggleTools(e.name)}>
121
- ${t?"Hide Tools":"Tools"}
122
- </button>
123
- ${r?s`
124
- <input
125
- type="checkbox"
126
- class="toggle-checkbox"
127
- .checked=${r.enabled}
128
- @change=${p=>{this._toggleServer(e.name,p.target.checked)}}
129
- aria-label="Enable ${e.name}"
130
- />
131
- <button class="action-btn danger" @click=${()=>this._removeServer(e.name)}>Delete</button>
132
- `:o}
133
- </div>
134
- ${this._renderTestResult(e.name)}
135
- ${t?this._renderToolList():o}
136
- </div>
137
- `}_renderConfigOnlyServer(e){const t=this._testingServer===e.name;return s`
138
- <div class="server-card">
139
- <div class="server-header">
140
- <ic-tag color="default">not running</ic-tag>
141
- <span class="server-name">${e.name}</span>
142
- <ic-tag variant=${e.transport==="stdio"?"info":"accent"}>${e.transport}</ic-tag>
143
- </div>
144
- <span class="server-command">
145
- ${e.transport==="stdio"?`${e.command??""}${e.args?.length?" "+e.args.join(" "):""}`:e.url??""}
146
- </span>
147
- ${e.env&&Object.keys(e.env).length>0?s`<span class="server-env-badge" title=${Object.keys(e.env).join(", ")}>env: ${Object.keys(e.env).join(", ")}</span>`:o}
148
- ${e.headers&&Object.keys(e.headers).length>0?s`<span class="server-env-badge" title=${Object.keys(e.headers).join(", ")}>headers: ${Object.keys(e.headers).join(", ")}</span>`:o}
149
- <div class="server-actions">
150
- <button
151
- class="action-btn"
152
- ?disabled=${t}
153
- @click=${()=>this._testServerConfig(e)}
154
- >${t?"Testing...":"Test"}</button>
155
- <input
156
- type="checkbox"
157
- class="toggle-checkbox"
158
- .checked=${e.enabled}
159
- @change=${i=>{this._toggleServer(e.name,i.target.checked)}}
160
- aria-label="Enable ${e.name}"
161
- />
162
- <button class="action-btn danger" @click=${()=>this._removeServer(e.name)}>Delete</button>
163
- </div>
164
- ${this._renderTestResult(e.name)}
165
- </div>
166
- `}render(){if(this._loadState==="loading")return s`<ic-skeleton-view variant="list"></ic-skeleton-view>`;if(this._loadState==="error")return s`
167
- <div class="error-message">
168
- Failed to load MCP server data
169
- <br />
170
- <button class="retry-btn" @click=${()=>{this._loadData()}}>Retry</button>
171
- </div>
172
- `;const e=this._mcpConfig.filter(i=>!this._servers.some(c=>c.name===i.name)),t=this._servers.length>0||e.length>0;return s`
173
- ${this._showAddForm?this._renderAddServerForm():o}
174
- ${t?s`
175
- <div class="header-row">
176
- <span class="header-title">${this._servers.length+e.length} server${this._servers.length+e.length!==1?"s":""}</span>
177
- <button class="connect-btn" @click=${()=>{this._showAddForm=!0}}>Add Server</button>
178
- </div>
179
- <div class="server-list">
180
- ${this._servers.map(i=>this._renderServer(i))}
181
- ${e.map(i=>this._renderConfigOnlyServer(i))}
182
- </div>
183
- `:s`
184
- <ic-empty-state message="No MCP servers configured. Add a server to extend agent capabilities.">
185
- <button class="connect-btn" @click=${()=>{this._showAddForm=!0}}>Add Server</button>
186
- </ic-empty-state>
187
- `}
188
-
189
- <ic-confirm-dialog
190
- ?open=${this._disconnectTarget!==null}
191
- title="Disconnect MCP Server"
192
- message="This will disconnect the server and its tools will become unavailable."
193
- confirmLabel="Disconnect"
194
- variant="danger"
195
- @confirm=${this._confirmDisconnect}
196
- @cancel=${this._cancelDisconnect}
197
- ></ic-confirm-dialog>
198
-
199
- <ic-confirm-dialog
200
- ?open=${this._deleteTarget!==null}
201
- title="Delete MCP Server"
202
- message="This will remove the server from configuration. The server will be disconnected if currently running."
203
- confirmLabel="Delete"
204
- variant="danger"
205
- @confirm=${this._confirmRemove}
206
- @cancel=${this._cancelRemove}
207
- ></ic-confirm-dialog>
208
- `}};n.styles=[b,w,y`
1
+ import{c as e,f as t,h as n,l as r,n as i,o as a,r as o,s,t as c,u as l}from"./decorate-BvWYovGE.js";import{a as u}from"./index-FLPhHz8p.js";import"./ic-tag-CvMVQFRR.js";import"./ic-confirm-dialog-DGlPbV1T.js";import"./ic-relative-time-B3UAnTqg.js";import"./ic-empty-state-CM3Wbj2f.js";var d=class extends r{constructor(...e){super(...e),this.rpcClient=null,this.apiClient=null,this.eventDispatcher=null,this._loadState=`loading`,this._servers=[],this._mcpConfig=[],this._expandedServer=null,this._serverDetail=null,this._showAddForm=!1,this._disconnectTarget=null,this._deleteTarget=null,this._detailLoading=!1,this._showInstructions=!1,this._testingServer=null,this._testResult=null,this._newServerName=``,this._newServerTransport=`stdio`,this._newServerCommand=``,this._newServerUrl=``,this._newServerHeaders=``,this._newServerEnv=``,this._rpcStatusUnsub=null}static{this.styles=[o,i,n`
209
2
  :host {
210
3
  display: block;
211
4
  }
@@ -579,4 +372,211 @@ import{a as f,I as v,A as o,b as s,s as b,f as w,i as y,n as m,r as l,t as $}fro
579
372
  max-height: 12rem;
580
373
  overflow-y: auto;
581
374
  }
582
- `];a([m({attribute:!1})],n.prototype,"rpcClient",2);a([m({attribute:!1})],n.prototype,"apiClient",2);a([m({attribute:!1})],n.prototype,"eventDispatcher",2);a([l()],n.prototype,"_loadState",2);a([l()],n.prototype,"_servers",2);a([l()],n.prototype,"_mcpConfig",2);a([l()],n.prototype,"_expandedServer",2);a([l()],n.prototype,"_serverDetail",2);a([l()],n.prototype,"_showAddForm",2);a([l()],n.prototype,"_disconnectTarget",2);a([l()],n.prototype,"_deleteTarget",2);a([l()],n.prototype,"_detailLoading",2);a([l()],n.prototype,"_showInstructions",2);a([l()],n.prototype,"_testingServer",2);a([l()],n.prototype,"_testResult",2);a([l()],n.prototype,"_newServerName",2);a([l()],n.prototype,"_newServerTransport",2);a([l()],n.prototype,"_newServerCommand",2);a([l()],n.prototype,"_newServerUrl",2);a([l()],n.prototype,"_newServerHeaders",2);a([l()],n.prototype,"_newServerEnv",2);n=a([$("ic-mcp-management")],n);export{n as IcMcpManagement};
375
+ `]}connectedCallback(){super.connectedCallback()}disconnectedCallback(){super.disconnectedCallback(),this._rpcStatusUnsub?.(),this._rpcStatusUnsub=null}willUpdate(e){e.has(`rpcClient`)&&this.rpcClient&&this._tryLoad()}_tryLoad(){if(!this.rpcClient){this._loadState=`loaded`;return}this._rpcStatusUnsub?.(),this.rpcClient.status===`connected`?this._loadData():this._rpcStatusUnsub=this.rpcClient.onStatusChange(e=>{e===`connected`&&this._loadData()})}async _loadData(){if(this.rpcClient)try{let[e,t]=await Promise.all([this.rpcClient.call(`mcp.list`),this.rpcClient.call(`config.read`)]);this._servers=e.servers??[],this._mcpConfig=t.config?.integrations?.mcp?.servers??[],this._loadState=`loaded`}catch{this._loadState=`error`}}async _loadServerDetail(e){if(this.rpcClient){this._detailLoading=!0;try{let t=await this.rpcClient.call(`mcp.status`,{name:e});this._serverDetail=t,this._expandedServer=e}catch{u.show(`Failed to load tools for ${e}`,`error`),this._expandedServer=null,this._serverDetail=null}finally{this._detailLoading=!1}}}async _patchConfig(e,t,n){if(!this.rpcClient)return!1;try{return await this.rpcClient.call(`config.patch`,{section:e,key:t,value:n}),!0}catch(e){let t=e instanceof Error?e.message:`Failed to update configuration`;return u.show(t,`error`),!1}}_stripRedactedEnv(e){return e.map(e=>{if(!e.env||!Object.values(e.env).some(e=>e===`[REDACTED]`))return e;let{env:t,...n}=e;return n})}_requestDisconnect(e){this._disconnectTarget=e}async _confirmDisconnect(){let e=this._disconnectTarget;if(this._disconnectTarget=null,!(!e||!this.rpcClient))try{await this.rpcClient.call(`mcp.disconnect`,{name:e}),u.show(`Disconnected ${e}`,`success`),this._expandedServer===e&&(this._expandedServer=null,this._serverDetail=null),this._loadData()}catch{u.show(`Failed to disconnect ${e}`,`error`)}}_cancelDisconnect(){this._disconnectTarget=null}async _handleReconnect(e){if(this.rpcClient)try{await this.rpcClient.call(`mcp.reconnect`,{name:e}),u.show(`Reconnected ${e}`,`success`),this._loadData()}catch{u.show(`Failed to reconnect ${e}`,`error`)}}async _handleTest(e){if(this.rpcClient)try{let t=await this.rpcClient.call(`mcp.test`,{name:e});t.success?u.show(`${e}: test passed`,`success`):u.show(`${e}: test failed${t.message?` — `+t.message:``}`,`error`)}catch{u.show(`Failed to test ${e}`,`error`)}}_toggleTools(e){this._expandedServer===e?(this._expandedServer=null,this._serverDetail=null,this._showInstructions=!1):(this._showInstructions=!1,this._loadServerDetail(e))}async _toggleServer(e,t){let n=this._mcpConfig.map(n=>n.name===e?{...n,enabled:t}:n);await this._patchConfig(`integrations`,`mcp.servers`,this._stripRedactedEnv(n))&&(this._mcpConfig=n)}_removeServer(e){this._deleteTarget=e}async _confirmRemove(){let e=this._deleteTarget;if(this._deleteTarget=null,!e)return;let t=this._mcpConfig.filter(t=>t.name!==e);await this._patchConfig(`integrations`,`mcp.servers`,this._stripRedactedEnv(t))&&(this._mcpConfig=t,u.show(`Removed MCP server "${e}"`,`success`),this._loadData())}_cancelRemove(){this._deleteTarget=null}async _addServer(){if(!this._newServerName.trim()){u.show(`Server name is required`,`error`);return}let e=this._newServerName.trim();if(this._mcpConfig.some(t=>t.name===e)){u.show(`MCP server "${e}" already exists`,`error`);return}if(this._newServerTransport===`stdio`&&!this._newServerCommand.trim()){u.show(`Command is required for stdio transport`,`error`);return}if(this._newServerTransport!==`stdio`&&!this._newServerUrl.trim()){u.show(`URL is required for remote transport`,`error`);return}let t={name:e,transport:this._newServerTransport,enabled:!0};if(this._newServerTransport===`stdio`){let e=this._newServerCommand.trim().split(/\s+/);t.command=e[0]??``,e.length>1&&(t.args=e.slice(1))}else t.url=this._newServerUrl.trim();let n=this._newServerHeaders.trim();if(n){let e={};for(let t of n.split(`
376
+ `)){let n=t.indexOf(`:`);if(n>0){let r=t.slice(0,n).trim(),i=t.slice(n+1).trim();r&&(e[r]=i)}}Object.keys(e).length>0&&(t.headers=e)}let r=this._newServerEnv.trim();if(r){let e={};for(let t of r.split(`
377
+ `)){let n=t.indexOf(`=`);n>0&&(e[t.slice(0,n).trim()]=t.slice(n+1).trim())}Object.keys(e).length>0&&(t.env=e)}let i=[...this._mcpConfig,t];await this._patchConfig(`integrations`,`mcp.servers`,this._stripRedactedEnv(i))&&(this._mcpConfig=i,this._newServerName=``,this._newServerCommand=``,this._newServerUrl=``,this._newServerHeaders=``,this._newServerEnv=``,this._showAddForm=!1,u.show(`Added MCP server "${e}"`,`success`),this._loadData())}async _testServerConfig(e){if(!(!this.rpcClient||this._testingServer)){this._testingServer=e.name,this._testResult=null;try{let t={name:e.name,transport:e.transport};e.transport===`stdio`?(t.command=e.command,t.args=e.args):t.url=e.url,e.env&&Object.keys(e.env).length>0&&(t.env=e.env),e.headers&&Object.keys(e.headers).length>0&&(t.headers=e.headers);let n=await this.rpcClient.call(`mcp.test`,t);this._testResult={name:e.name,...n}}catch(t){let n=t instanceof Error?t.message:`Test failed`,r=n===`Not connected`||n.includes(`WebSocket`);this._testResult={name:e.name,success:!1,error:r?`Daemon not connected -- wait for reconnection and try again`:n}}finally{this._testingServer=null}}}_statusColor(e){switch(e){case`connected`:return`green`;case`disconnected`:return`default`;case`connecting`:return`yellow`;case`reconnecting`:return`yellow`;case`error`:return`red`;default:return`default`}}_renderAddServerForm(){return t`
378
+ <div class="add-server-form">
379
+ <div class="add-server-title">Add Server</div>
380
+ <div class="add-server-row">
381
+ <input
382
+ class="add-server-input"
383
+ type="text"
384
+ placeholder="Server name"
385
+ .value=${this._newServerName}
386
+ @input=${e=>{this._newServerName=e.target.value}}
387
+ />
388
+ <select
389
+ class="add-server-select"
390
+ .value=${this._newServerTransport}
391
+ @change=${e=>{this._newServerTransport=e.target.value}}
392
+ >
393
+ <option value="stdio">stdio</option>
394
+ <option value="sse">sse</option>
395
+ <option value="http">http</option>
396
+ </select>
397
+ </div>
398
+ ${this._newServerTransport===`stdio`?t`
399
+ <input
400
+ class="add-server-input"
401
+ type="text"
402
+ placeholder="Command (e.g., npx -y @mcp/server)"
403
+ .value=${this._newServerCommand}
404
+ @input=${e=>{this._newServerCommand=e.target.value}}
405
+ />
406
+ `:t`
407
+ <input
408
+ class="add-server-input"
409
+ type="text"
410
+ placeholder=${this._newServerTransport===`sse`?`URL (e.g., http://localhost:3001/sse)`:`URL (e.g., http://localhost:3001/mcp)`}
411
+ .value=${this._newServerUrl}
412
+ @input=${e=>{this._newServerUrl=e.target.value}}
413
+ />
414
+ `}
415
+ ${this._newServerTransport===`stdio`?l:t`
416
+ <textarea
417
+ class="add-server-input"
418
+ rows="2"
419
+ placeholder="Custom headers (one per line: Header-Name: value)"
420
+ .value=${this._newServerHeaders}
421
+ @input=${e=>{this._newServerHeaders=e.target.value}}
422
+ style="resize:vertical;font-family:monospace;font-size:0.85rem"
423
+ ></textarea>
424
+ `}
425
+ <textarea
426
+ class="add-server-input"
427
+ rows="2"
428
+ placeholder="Environment variables (one per line: KEY=VALUE)"
429
+ .value=${this._newServerEnv}
430
+ @input=${e=>{this._newServerEnv=e.target.value}}
431
+ style="resize:vertical;font-family:monospace;font-size:0.85rem"
432
+ ></textarea>
433
+ <div style="display: flex; gap: var(--ic-space-sm);">
434
+ <button class="add-server-btn" @click=${()=>this._addServer()}>Add Server</button>
435
+ <button class="cancel-btn" @click=${()=>{this._showAddForm=!1,this._newServerName=``,this._newServerCommand=``,this._newServerUrl=``,this._newServerHeaders=``,this._newServerEnv=``}}>Cancel</button>
436
+ </div>
437
+ </div>
438
+ `}_renderCapabilityBadges(e){if(!e)return l;let n=[];return e.tools&&n.push(t`<ic-tag variant="info">tools</ic-tag>`),e.resources&&n.push(t`<ic-tag variant="accent">resources</ic-tag>`),e.prompts&&n.push(t`<ic-tag variant="success">prompts</ic-tag>`),n.length===0?l:t`<span class="capability-badges">${n}</span>`}_renderServerVersion(e){return e?t`<span class="server-version">${e.name} v${e.version}</span>`:l}_renderInstructions(){return this._serverDetail?.instructions?t`
439
+ <div class="instructions-section">
440
+ <button
441
+ class="instructions-toggle"
442
+ @click=${()=>{this._showInstructions=!this._showInstructions}}
443
+ >
444
+ ${this._showInstructions?`Hide Instructions`:`Show Instructions`}
445
+ </button>
446
+ ${this._showInstructions?t`<div class="instructions-content">${this._serverDetail.instructions}</div>`:l}
447
+ </div>
448
+ `:l}_renderToolList(){return this._detailLoading?t`<div class="tool-loading">Loading tools...</div>`:!this._serverDetail||!this._serverDetail.tools.length?t`<div class="tool-loading">No tools discovered</div>`:t`
449
+ <div class="tool-list">
450
+ ${this._serverDetail.tools.map(e=>t`
451
+ <div class="tool-entry">
452
+ <div class="tool-name">${e.name}</div>
453
+ <div class="tool-qualified">${e.qualifiedName}</div>
454
+ ${e.description?t`<div class="tool-desc">${e.description}</div>`:l}
455
+ </div>
456
+ `)}
457
+ </div>
458
+ ${this._renderInstructions()}
459
+ `}_renderTestResult(e){let n=this._testResult?.name===e?this._testResult:null;return n?n.success?t`<div class="server-test-result server-test-success">Connected -- ${n.toolCount} tool(s): ${n.tools?.join(`, `)||`none`}</div>`:t`<div class="server-test-result server-test-error">${n.error}</div>`:l}_renderServer(e){let n=this._expandedServer===e.name,r=e.status===`connected`,i=e.status===`disconnected`||e.status===`error`||e.status===`reconnecting`,a=this._mcpConfig.find(t=>t.name===e.name);return t`
460
+ <div class="server-card">
461
+ <div class="server-header">
462
+ <ic-tag color=${this._statusColor(e.status)}>${e.status===`reconnecting`&&e.reconnectAttempt?`reconnecting (${e.reconnectAttempt})`:e.status}</ic-tag>
463
+ <span class="server-name">${e.name}</span>
464
+ ${a?t`
465
+ <ic-tag variant=${a.transport===`stdio`?`info`:`accent`}>${a.transport}</ic-tag>
466
+ `:l}
467
+ <span class="server-tools-count">${e.toolCount} tool${e.toolCount===1?``:`s`}</span>
468
+ ${this._renderCapabilityBadges(e.capabilities)}
469
+ ${this._renderServerVersion(e.serverVersion)}
470
+ ${e.lastHealthCheck?t`
471
+ <span class="server-health">
472
+ Last check: <ic-relative-time .timestamp=${e.lastHealthCheck}></ic-relative-time>
473
+ </span>
474
+ `:l}
475
+ </div>
476
+ ${e.status===`error`&&e.error?t`
477
+ <span class="server-error">${e.error}</span>
478
+ `:l}
479
+ ${a?t`
480
+ <span class="server-command">
481
+ ${a.transport===`stdio`?`${a.command??``}${a.args?.length?` `+a.args.join(` `):``}`:a.url??``}
482
+ </span>
483
+ ${a.env&&Object.keys(a.env).length>0?t`<span class="server-env-badge" title=${Object.keys(a.env).join(`, `)}>env: ${Object.keys(a.env).join(`, `)}</span>`:l}
484
+ ${a.headers&&Object.keys(a.headers).length>0?t`<span class="server-env-badge" title=${Object.keys(a.headers).join(`, `)}>headers: ${Object.keys(a.headers).join(`, `)}</span>`:l}
485
+ `:l}
486
+ <div class="server-actions">
487
+ ${r?t`
488
+ <button class="action-btn danger" @click=${()=>this._requestDisconnect(e.name)}>Disconnect</button>
489
+ `:l}
490
+ ${i?t`
491
+ <button class="action-btn primary" @click=${()=>this._handleReconnect(e.name)}>Reconnect</button>
492
+ `:l}
493
+ <button class="action-btn" @click=${()=>this._handleTest(e.name)}>Test</button>
494
+ <button class="action-btn" @click=${()=>this._toggleTools(e.name)}>
495
+ ${n?`Hide Tools`:`Tools`}
496
+ </button>
497
+ ${a?t`
498
+ <input
499
+ type="checkbox"
500
+ class="toggle-checkbox"
501
+ .checked=${a.enabled}
502
+ @change=${t=>{this._toggleServer(e.name,t.target.checked)}}
503
+ aria-label="Enable ${e.name}"
504
+ />
505
+ <button class="action-btn danger" @click=${()=>this._removeServer(e.name)}>Delete</button>
506
+ `:l}
507
+ </div>
508
+ ${this._renderTestResult(e.name)}
509
+ ${n?this._renderToolList():l}
510
+ </div>
511
+ `}_renderConfigOnlyServer(e){let n=this._testingServer===e.name;return t`
512
+ <div class="server-card">
513
+ <div class="server-header">
514
+ <ic-tag color="default">not running</ic-tag>
515
+ <span class="server-name">${e.name}</span>
516
+ <ic-tag variant=${e.transport===`stdio`?`info`:`accent`}>${e.transport}</ic-tag>
517
+ </div>
518
+ <span class="server-command">
519
+ ${e.transport===`stdio`?`${e.command??``}${e.args?.length?` `+e.args.join(` `):``}`:e.url??``}
520
+ </span>
521
+ ${e.env&&Object.keys(e.env).length>0?t`<span class="server-env-badge" title=${Object.keys(e.env).join(`, `)}>env: ${Object.keys(e.env).join(`, `)}</span>`:l}
522
+ ${e.headers&&Object.keys(e.headers).length>0?t`<span class="server-env-badge" title=${Object.keys(e.headers).join(`, `)}>headers: ${Object.keys(e.headers).join(`, `)}</span>`:l}
523
+ <div class="server-actions">
524
+ <button
525
+ class="action-btn"
526
+ ?disabled=${n}
527
+ @click=${()=>this._testServerConfig(e)}
528
+ >${n?`Testing...`:`Test`}</button>
529
+ <input
530
+ type="checkbox"
531
+ class="toggle-checkbox"
532
+ .checked=${e.enabled}
533
+ @change=${t=>{this._toggleServer(e.name,t.target.checked)}}
534
+ aria-label="Enable ${e.name}"
535
+ />
536
+ <button class="action-btn danger" @click=${()=>this._removeServer(e.name)}>Delete</button>
537
+ </div>
538
+ ${this._renderTestResult(e.name)}
539
+ </div>
540
+ `}render(){if(this._loadState===`loading`)return t`<ic-skeleton-view variant="list"></ic-skeleton-view>`;if(this._loadState===`error`)return t`
541
+ <div class="error-message">
542
+ Failed to load MCP server data
543
+ <br />
544
+ <button class="retry-btn" @click=${()=>void this._loadData()}>Retry</button>
545
+ </div>
546
+ `;let e=this._mcpConfig.filter(e=>!this._servers.some(t=>t.name===e.name)),n=this._servers.length>0||e.length>0;return t`
547
+ ${this._showAddForm?this._renderAddServerForm():l}
548
+ ${n?t`
549
+ <div class="header-row">
550
+ <span class="header-title">${this._servers.length+e.length} server${this._servers.length+e.length===1?``:`s`}</span>
551
+ <button class="connect-btn" @click=${()=>{this._showAddForm=!0}}>Add Server</button>
552
+ </div>
553
+ <div class="server-list">
554
+ ${this._servers.map(e=>this._renderServer(e))}
555
+ ${e.map(e=>this._renderConfigOnlyServer(e))}
556
+ </div>
557
+ `:t`
558
+ <ic-empty-state message="No MCP servers configured. Add a server to extend agent capabilities.">
559
+ <button class="connect-btn" @click=${()=>{this._showAddForm=!0}}>Add Server</button>
560
+ </ic-empty-state>
561
+ `}
562
+
563
+ <ic-confirm-dialog
564
+ ?open=${this._disconnectTarget!==null}
565
+ title="Disconnect MCP Server"
566
+ message="This will disconnect the server and its tools will become unavailable."
567
+ confirmLabel="Disconnect"
568
+ variant="danger"
569
+ @confirm=${this._confirmDisconnect}
570
+ @cancel=${this._cancelDisconnect}
571
+ ></ic-confirm-dialog>
572
+
573
+ <ic-confirm-dialog
574
+ ?open=${this._deleteTarget!==null}
575
+ title="Delete MCP Server"
576
+ message="This will remove the server from configuration. The server will be disconnected if currently running."
577
+ confirmLabel="Delete"
578
+ variant="danger"
579
+ @confirm=${this._confirmRemove}
580
+ @cancel=${this._cancelRemove}
581
+ ></ic-confirm-dialog>
582
+ `}};c([s({attribute:!1})],d.prototype,`rpcClient`,void 0),c([s({attribute:!1})],d.prototype,`apiClient`,void 0),c([s({attribute:!1})],d.prototype,`eventDispatcher`,void 0),c([a()],d.prototype,`_loadState`,void 0),c([a()],d.prototype,`_servers`,void 0),c([a()],d.prototype,`_mcpConfig`,void 0),c([a()],d.prototype,`_expandedServer`,void 0),c([a()],d.prototype,`_serverDetail`,void 0),c([a()],d.prototype,`_showAddForm`,void 0),c([a()],d.prototype,`_disconnectTarget`,void 0),c([a()],d.prototype,`_deleteTarget`,void 0),c([a()],d.prototype,`_detailLoading`,void 0),c([a()],d.prototype,`_showInstructions`,void 0),c([a()],d.prototype,`_testingServer`,void 0),c([a()],d.prototype,`_testResult`,void 0),c([a()],d.prototype,`_newServerName`,void 0),c([a()],d.prototype,`_newServerTransport`,void 0),c([a()],d.prototype,`_newServerCommand`,void 0),c([a()],d.prototype,`_newServerUrl`,void 0),c([a()],d.prototype,`_newServerHeaders`,void 0),c([a()],d.prototype,`_newServerEnv`,void 0),d=c([e(`ic-mcp-management`)],d);export{d as IcMcpManagement};