comisai 1.0.23 → 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 (106) hide show
  1. package/node_modules/@comis/agent/dist/executor/pi-executor.js +17 -0
  2. package/node_modules/@comis/agent/dist/index.d.ts +2 -1
  3. package/node_modules/@comis/agent/dist/index.js +1 -1
  4. package/node_modules/@comis/agent/dist/model/auth-storage-adapter.d.ts +21 -0
  5. package/node_modules/@comis/agent/dist/model/auth-storage-adapter.js +15 -1
  6. package/node_modules/@comis/agent/dist/model/model-registry-adapter.d.ts +46 -0
  7. package/node_modules/@comis/agent/dist/model/model-registry-adapter.js +108 -0
  8. package/node_modules/@comis/agent/package.json +1 -1
  9. package/node_modules/@comis/channels/package.json +1 -1
  10. package/node_modules/@comis/cli/package.json +1 -1
  11. package/node_modules/@comis/core/dist/bootstrap.js +5 -0
  12. package/node_modules/@comis/core/dist/config/env-layer.d.ts +31 -0
  13. package/node_modules/@comis/core/dist/config/env-layer.js +41 -0
  14. package/node_modules/@comis/core/dist/config/layered.d.ts +9 -0
  15. package/node_modules/@comis/core/dist/config/layered.js +11 -0
  16. package/node_modules/@comis/core/package.json +1 -1
  17. package/node_modules/@comis/daemon/dist/daemon.js +3 -0
  18. package/node_modules/@comis/daemon/dist/wiring/setup-agents.js +15 -3
  19. package/node_modules/@comis/daemon/package.json +1 -1
  20. package/node_modules/@comis/gateway/package.json +1 -1
  21. package/node_modules/@comis/infra/package.json +1 -1
  22. package/node_modules/@comis/memory/package.json +1 -1
  23. package/node_modules/@comis/scheduler/package.json +1 -1
  24. package/node_modules/@comis/shared/package.json +1 -1
  25. package/node_modules/@comis/skills/package.json +1 -1
  26. package/node_modules/@comis/web/dist/assets/{agent-detail-BG9MGWWj.js → agent-detail-ru-AhppM.js} +270 -270
  27. package/node_modules/@comis/web/dist/assets/agent-editor-hjwRuFVp.js +2173 -0
  28. package/node_modules/@comis/web/dist/assets/{agent-list-LHCJ4rw2.js → agent-list-6Uotjatr.js} +170 -170
  29. package/node_modules/@comis/web/dist/assets/{approvals-q9VH_IKr.js → approvals-C-K6hN2U.js} +13 -13
  30. package/node_modules/@comis/web/dist/assets/billing-view-CxysXH0p.js +375 -0
  31. package/node_modules/@comis/web/dist/assets/{channel-detail-CaInesJM.js → channel-detail-BBCKtmne.js} +265 -265
  32. package/node_modules/@comis/web/dist/assets/channel-list-FkfeOLBQ.js +323 -0
  33. package/node_modules/@comis/web/dist/assets/{chat-console-CNmzl0JW.js → chat-console-BumBaIgO.js} +243 -246
  34. package/node_modules/@comis/web/dist/assets/{config-editor-DX4ITw6y.js → config-editor-C9BSwHGy.js} +477 -477
  35. package/node_modules/@comis/web/dist/assets/{context-dag-browser-BwiaF5tf.js → context-dag-browser-BHm00mJD.js} +105 -105
  36. package/node_modules/@comis/web/dist/assets/{context-engine-BZ5Am6hA.js → context-engine-BENY3pWE.js} +136 -136
  37. package/node_modules/@comis/web/dist/assets/decorate-BvWYovGE.js +38 -0
  38. package/node_modules/@comis/web/dist/assets/{delivery-view-OfBZof-m.js → delivery-view-BCnkPsAp.js} +134 -134
  39. package/node_modules/@comis/web/dist/assets/{diagnostics-view-YFwCxgr2.js → diagnostics-view-C_jQFG2H.js} +82 -82
  40. package/node_modules/@comis/web/dist/assets/directive-BOYXJ-K-.js +1 -0
  41. package/node_modules/@comis/web/dist/assets/{extract-variables-BM5qyK-s.js → extract-variables-B7-Doo7l.js} +39 -39
  42. package/node_modules/@comis/web/dist/assets/{ic-array-editor-B7m6x7-S.js → ic-array-editor-BLoEyeLS.js} +29 -29
  43. package/node_modules/@comis/web/dist/assets/{ic-breadcrumb-CUMpp3BL.js → ic-breadcrumb-DqN6G3gc.js} +16 -16
  44. package/node_modules/@comis/web/dist/assets/{ic-budget-segment-bar-BtJ6x5mN.js → ic-budget-segment-bar-zLsMzjDO.js} +20 -20
  45. package/node_modules/@comis/web/dist/assets/ic-chat-message-FdQcZsSQ.js +352 -0
  46. package/node_modules/@comis/web/dist/assets/{ic-confirm-dialog-CCDbB04e.js → ic-confirm-dialog-DGlPbV1T.js} +26 -26
  47. package/node_modules/@comis/web/dist/assets/{ic-connection-dot-CnT1b8xr.js → ic-connection-dot-BgYiK2N4.js} +13 -13
  48. package/node_modules/@comis/web/dist/assets/ic-data-table-CKIvr-ag.js +277 -0
  49. package/node_modules/@comis/web/dist/assets/ic-delivery-row-B3YwjjuM.js +67 -0
  50. package/node_modules/@comis/web/dist/assets/{ic-detail-panel-BF83r-if.js → ic-detail-panel-DiCe4hLr.js} +27 -27
  51. package/node_modules/@comis/web/dist/assets/{ic-empty-state-60l2ePhd.js → ic-empty-state-CM3Wbj2f.js} +19 -19
  52. package/node_modules/@comis/web/dist/assets/ic-graph-canvas-ByRjij68.js +359 -0
  53. package/node_modules/@comis/web/dist/assets/ic-icon-BGNCCPpZ.js +33 -0
  54. package/node_modules/@comis/web/dist/assets/{ic-layer-waterfall-COvEYMg5.js → ic-layer-waterfall-WkaFyu-l.js} +18 -18
  55. package/node_modules/@comis/web/dist/assets/ic-relative-time-B3UAnTqg.js +12 -0
  56. package/node_modules/@comis/web/dist/assets/{ic-search-input-CSOxY9g7.js → ic-search-input-B02AGw1i.js} +22 -22
  57. package/node_modules/@comis/web/dist/assets/{ic-select-Ce-Raudx.js → ic-select-BqfZISjw.js} +29 -29
  58. package/node_modules/@comis/web/dist/assets/ic-tabs-yBjkWKJH.js +95 -0
  59. package/node_modules/@comis/web/dist/assets/ic-tag-CvMVQFRR.js +33 -0
  60. package/node_modules/@comis/web/dist/assets/{ic-time-range-picker-CypCT68y.js → ic-time-range-picker-DXbYeBmY.js} +31 -31
  61. package/node_modules/@comis/web/dist/assets/{ic-tool-call-7MaXSsCW.js → ic-tool-call-DMPHsLyx.js} +51 -51
  62. package/node_modules/@comis/web/dist/assets/index-CVEaS9aY.css +2 -0
  63. package/node_modules/@comis/web/dist/assets/index-FLPhHz8p.js +2792 -0
  64. package/node_modules/@comis/web/dist/assets/{mcp-management-BNZPnpDn.js → mcp-management-5jyScQis.js} +209 -209
  65. package/node_modules/@comis/web/dist/assets/{media-config-BBvTYxOX.js → media-config-J9oT9PPs.js} +154 -154
  66. package/node_modules/@comis/web/dist/assets/{media-test-BkK3RCRK.js → media-test-DGTCtM8-.js} +259 -259
  67. package/node_modules/@comis/web/dist/assets/{memory-inspector-1hDGCGat.js → memory-inspector-D5Re9ptG.js} +450 -450
  68. package/node_modules/@comis/web/dist/assets/{message-center-CXefwsUu.js → message-center-cRLK6ZmG.js} +290 -290
  69. package/node_modules/@comis/web/dist/assets/{models-C1qcU_j3.js → models-D5vu07MR.js} +371 -371
  70. package/node_modules/@comis/web/dist/assets/observability-types-D0tkwElU.js +1 -0
  71. package/node_modules/@comis/web/dist/assets/{observe-view-C0VBhX4C.js → observe-view-CalNNEmd.js} +399 -399
  72. package/node_modules/@comis/web/dist/assets/pipeline-builder-DUYDGwZf.js +1495 -0
  73. package/node_modules/@comis/web/dist/assets/{pipeline-history-DkfOQ6SW.js → pipeline-history-BAO8brOe.js} +124 -124
  74. package/node_modules/@comis/web/dist/assets/{pipeline-history-detail-hyHgD0ai.js → pipeline-history-detail-DectIoQt.js} +65 -65
  75. package/node_modules/@comis/web/dist/assets/{pipeline-list-BPW8hV-q.js → pipeline-list-BHlaBKww.js} +227 -227
  76. package/node_modules/@comis/web/dist/assets/{pipeline-monitor-Bip16T7e.js → pipeline-monitor-BhtpNEHf.js} +298 -298
  77. package/node_modules/@comis/web/dist/assets/{scheduler-BGgwKd06.js → scheduler-VafN_8xi.js} +486 -486
  78. package/node_modules/@comis/web/dist/assets/{security-D15st4xx.js → security-QQXMRTlo.js} +389 -389
  79. package/node_modules/@comis/web/dist/assets/{session-detail-SGEYNJ0M.js → session-detail-BpZ_8Yih.js} +294 -294
  80. package/node_modules/@comis/web/dist/assets/session-key-parser-Dkqcj2Ss.js +1 -0
  81. package/node_modules/@comis/web/dist/assets/session-list-DfCm8Cec.js +231 -0
  82. package/node_modules/@comis/web/dist/assets/{setup-wizard-nT0tz9QP.js → setup-wizard-C-z477CG.js} +486 -494
  83. package/node_modules/@comis/web/dist/assets/{skills-D8yVfSUy.js → skills-BCOGPf6s.js} +329 -329
  84. package/node_modules/@comis/web/dist/assets/{subagents-HHXMeHYo.js → subagents-l-auUraL.js} +74 -74
  85. package/node_modules/@comis/web/dist/assets/{workspace-manager-BQlr10iH.js → workspace-manager-DlvBixiq.js} +236 -236
  86. package/node_modules/@comis/web/dist/index.html +3 -2
  87. package/node_modules/@comis/web/package.json +1 -1
  88. package/package.json +15 -15
  89. package/node_modules/@comis/web/dist/assets/agent-editor-C26Q_xCs.js +0 -2173
  90. package/node_modules/@comis/web/dist/assets/billing-view-CtYvBqTE.js +0 -375
  91. package/node_modules/@comis/web/dist/assets/channel-list-B8dj3O9a.js +0 -323
  92. package/node_modules/@comis/web/dist/assets/directive-DoeGSK_T.js +0 -1
  93. package/node_modules/@comis/web/dist/assets/ic-chat-message-CFyDJd0z.js +0 -352
  94. package/node_modules/@comis/web/dist/assets/ic-data-table-CKUNTxHw.js +0 -277
  95. package/node_modules/@comis/web/dist/assets/ic-delivery-row-GP5Fkygs.js +0 -67
  96. package/node_modules/@comis/web/dist/assets/ic-graph-canvas-C8FuSMe1.js +0 -359
  97. package/node_modules/@comis/web/dist/assets/ic-icon-xeGTVhVG.js +0 -33
  98. package/node_modules/@comis/web/dist/assets/ic-relative-time-3FqpjeAI.js +0 -12
  99. package/node_modules/@comis/web/dist/assets/ic-tabs-B7QtM_v8.js +0 -95
  100. package/node_modules/@comis/web/dist/assets/ic-tag-CPPUnDLF.js +0 -33
  101. package/node_modules/@comis/web/dist/assets/index-CEcM1R_C.js +0 -2830
  102. package/node_modules/@comis/web/dist/assets/index-CIJFuItj.css +0 -1
  103. package/node_modules/@comis/web/dist/assets/observability-types-D7jUtSde.js +0 -1
  104. package/node_modules/@comis/web/dist/assets/pipeline-builder-DcUUIrm0.js +0 -1496
  105. package/node_modules/@comis/web/dist/assets/session-key-parser-DPORMVyU.js +0 -1
  106. 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};