@pixelzx/genesis 2026.6.21 → 2026.6.24

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 (74) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/.buildstamp +1 -1
  3. package/dist/build-info.json +3 -3
  4. package/dist/cli-startup-metadata.json +1 -1
  5. package/dist/{command-registry-BGb_Uwan.js → command-registry-9isdLVPT.js} +2 -2
  6. package/dist/{command-registry-DMgJTE4K.js → command-registry-Cz7IG6fj.js} +2 -2
  7. package/dist/{command-registry-core-nZQMcxbV.js → command-registry-core-YTbOUvAw.js} +2 -2
  8. package/dist/{completion-cli-BCc1OonY.js → completion-cli-56xGCg11.js} +2 -2
  9. package/dist/{config-cli-BZaYp_Ui.js → config-cli-D4puIeCQ.js} +1 -1
  10. package/dist/control-ui/assets/{agents-BoHSZPvB.js → agents-JV9Lrpaq.js} +402 -333
  11. package/dist/control-ui/assets/canvas-BGheLorj.js +274 -0
  12. package/dist/control-ui/assets/{channel-config-extras-BmGwfDPL.js → channel-config-extras-BlcntHgk.js} +2 -2
  13. package/dist/control-ui/assets/channels-D_T7jf1i.js +196 -0
  14. package/dist/control-ui/assets/cron-C-vhYdn2.js +250 -0
  15. package/dist/control-ui/assets/{de-ChvNzaWx.js → de-hbyceFeJ.js} +1 -1
  16. package/dist/control-ui/assets/{debug-CuUlTIAC.js → debug-C_P-kmLV.js} +8 -8
  17. package/dist/control-ui/assets/{es-CrSDgcQ5.js → es-1Cx1cu-Y.js} +1 -1
  18. package/dist/control-ui/assets/{fr-BRwXxDjE.js → fr-VgMPipri.js} +1 -1
  19. package/dist/control-ui/assets/{i18n-Dr_ijwId.js → i18n-DLwqUqi0.js} +2 -2
  20. package/dist/control-ui/assets/{id-D6SwOJ8N.js → id-BjXuhykW.js} +1 -1
  21. package/dist/control-ui/assets/index-CtXQ8kx6.css +1 -0
  22. package/dist/control-ui/assets/index-or46Cf5v.js +5900 -0
  23. package/dist/control-ui/assets/{instances-BIg5DC8B.js → instances-B2yScyQI.js} +19 -19
  24. package/dist/control-ui/assets/{ja-JP-COtC4IfH.js → ja-JP-DWb-BMAl.js} +1 -1
  25. package/dist/control-ui/assets/{ko-BzeSxEM4.js → ko-Dp3UE5m2.js} +1 -1
  26. package/dist/control-ui/assets/{logs-BYrqUHTd.js → logs-BiUk-w3p.js} +6 -6
  27. package/dist/control-ui/assets/mcp-Cvo6FOST.js +380 -0
  28. package/dist/control-ui/assets/{memory-Dxu2hVW_.js → memory-EzZxvhx5.js} +11 -11
  29. package/dist/control-ui/assets/{models-DmHuwChH.js → models-CHjUP5zU.js} +26 -26
  30. package/dist/control-ui/assets/{nodes-BAHmvdL1.js → nodes-CINI4_nb.js} +86 -86
  31. package/dist/control-ui/assets/{pl-BFGaZC1a.js → pl-UrfXg6LL.js} +1 -1
  32. package/dist/control-ui/assets/plugins-x9HNTykY.js +259 -0
  33. package/dist/control-ui/assets/presenter-DwZ-RSJ8.js +2 -0
  34. package/dist/control-ui/assets/{pt-BR-B2QYSEq3.js → pt-BR-Cqsb5BcT.js} +1 -1
  35. package/dist/control-ui/assets/sessions-DnMfNBmX.js +56 -0
  36. package/dist/control-ui/assets/skills-B7wdMvcb.js +294 -0
  37. package/dist/control-ui/assets/skills-shared-C4nHDuFm.js +11 -0
  38. package/dist/control-ui/assets/{th-CB7L1SFv.js → th-C_U0alhW.js} +1 -1
  39. package/dist/control-ui/assets/{tr-jlhb5DaE.js → tr-BHgpQnZM.js} +1 -1
  40. package/dist/control-ui/assets/{uk-BrLj30-c.js → uk-C_GhiUmQ.js} +1 -1
  41. package/dist/control-ui/assets/wallet-Ds1hW8CM.js +302 -0
  42. package/dist/control-ui/assets/{zh-CN-BvMSlZSV.js → zh-CN-BNYbiW4p.js} +1 -1
  43. package/dist/control-ui/assets/{zh-TW-DvNvr4gT.js → zh-TW-DJ7rxwhV.js} +1 -1
  44. package/dist/control-ui/index.html +3 -4
  45. package/dist/entry.js +1 -1
  46. package/dist/extensions/skill-workshop/genesis.plugin.json +2 -1
  47. package/dist/extensions/skill-workshop/index.js +1 -1
  48. package/dist/{gateway-cli-CPCS4XTI.js → gateway-cli-CeEdXZHU.js} +1 -1
  49. package/dist/index.js +1 -1
  50. package/dist/plugin-sdk/.boundary-entry-shims.stamp +1 -1
  51. package/dist/postinstall-inventory.json +50 -50
  52. package/dist/{program-D6Z9HYd5.js → program-0N-JnVM6.js} +1 -1
  53. package/dist/{register.subclis-CUxlv4Y7.js → register.subclis-D0ogazCL.js} +2 -2
  54. package/dist/{register.subclis-DPpkGluG.js → register.subclis-DPK0ga6y.js} +1 -1
  55. package/dist/{register.subclis-core-hOQqRXcI.js → register.subclis-core-DIGnTWFD.js} +1 -1
  56. package/dist/{run-main-By1VNkmf.js → run-main-kPIaMJwz.js} +4 -4
  57. package/dist/{runtime-schema-BR36tJn9.js → runtime-schema-CFPgELGN.js} +1 -1
  58. package/dist/{server-C7yMa7AQ.js → server-HNGA0Ig0.js} +1 -1
  59. package/dist/{server-plugin-bootstrap-CWHfoBJK.js → server-plugin-bootstrap-BXJURCLA.js} +1 -1
  60. package/dist/{server-plugin-bootstrap-C2EOYVsD.js → server-plugin-bootstrap-CNJ_xwIU.js} +1 -1
  61. package/dist/{server.impl-CNE0SpyS.js → server.impl-DuIzmQsq.js} +2 -2
  62. package/package.json +1 -1
  63. package/dist/control-ui/assets/canvas-DkuTKNbN.js +0 -269
  64. package/dist/control-ui/assets/channels-v0P0irqY.js +0 -463
  65. package/dist/control-ui/assets/cron-DD6CAXar.js +0 -933
  66. package/dist/control-ui/assets/format-BOO4MheD.js +0 -9
  67. package/dist/control-ui/assets/index-CYO6b4V3.js +0 -6314
  68. package/dist/control-ui/assets/index-a2bnKy1Z.css +0 -1
  69. package/dist/control-ui/assets/mcp-CfklVyVu.js +0 -373
  70. package/dist/control-ui/assets/plugins-CaVRS7jh.js +0 -273
  71. package/dist/control-ui/assets/sessions-TU5OCoQU.js +0 -306
  72. package/dist/control-ui/assets/skills-CC23LxGO.js +0 -323
  73. package/dist/control-ui/assets/skills-shared-BHZ4ntcf.js +0 -11
  74. package/dist/control-ui/assets/wallet-DggW1ZUc.js +0 -285
@@ -0,0 +1,380 @@
1
+ import{d as e,l as t,r as n}from"./i18n-DLwqUqi0.js";import{k as r,l as i,t as a}from"./index-or46Cf5v.js";var o=`grid-template-columns: 1fr 150px 90px 130px auto;`;function s(e){return typeof e.url==`string`&&e.url?typeof e.transport==`string`?e.transport:`http`:typeof e.command==`string`&&e.command?`stdio`:`—`}function c(e,t,r){return t?t.ok?{dot:`status-dot--ok`,label:`Online`}:{dot:`status-dot--error`,label:`Error`}:r?e?.connected?{dot:`status-dot--ok`,label:n(`mcpView.list.connected`)}:{dot:`status-dot--idle`,label:n(`mcpView.list.oauthRequired`)}:{dot:`status-dot--idle`,label:`—`}}function l(e){let t=typeof e.url==`string`?e.url:``;if(t)return`${typeof e.transport==`string`?e.transport:`http`} · ${t}`;let n=typeof e.command==`string`?e.command:``;if(n){let t=Array.isArray(e.args)?e.args.map(e=>String(e)).join(` `):``;return`stdio · ${n}${t?` ${t}`:``}`}return`—`}function u(e){let t=e.auth;return!t||typeof t!=`object`?!1:t.type===`oauth`}var d=`{
2
+ "url": "https://mcp.context7.com/mcp",
3
+ "transport": "streamable-http"
4
+ }`;function f(a){let s=a.servers?r(Object.entries(a.servers),([e],[t])=>e.localeCompare(t)):[],c=a.draftName.trim().length>0&&!a.busy;return e`
5
+ <section class="card" style="border: none; background: transparent; padding: 0;">
6
+ <div class="row" style="justify-content: space-between; align-items: flex-start; gap: 16px;">
7
+ <div>
8
+ <div class="view-title">${n(`mcpView.title`)}</div>
9
+ <div class="view-sub">
10
+ ${s.length} ${s.length===1?`server`:`servers`}
11
+ </div>
12
+ </div>
13
+ <button class="btn" ?disabled=${a.loading} @click=${a.onRefresh}>
14
+ ${a.loading?n(`common.loading`):n(`common.refresh`)}
15
+ </button>
16
+ </div>
17
+
18
+ ${a.path?e`<div class="muted mono" style="margin-top: 8px;">
19
+ Config: <span>${a.path}</span>
20
+ </div>`:t}
21
+ ${a.error?e`<div class="callout danger" style="margin-top: 12px;">${a.error}</div>`:t}
22
+ ${a.message?e`<div
23
+ class="callout ${a.message.kind===`error`?`danger`:`success`}"
24
+ style="margin-top: 12px;"
25
+ >
26
+ ${a.message.text}
27
+ </div>`:t}
28
+ ${a.oauthFlow?b(a):t}
29
+ ${a.servers?s.length===0?e`<div class="muted" style="margin-top: 16px;">
30
+ ${n(`mcpView.list.empty`)}
31
+ <div class="muted" style="font-size: 13px; margin-top: 4px;">
32
+ ${n(`mcpView.list.emptyHint`)}
33
+ </div>
34
+ </div>`:e`
35
+ <div class="table" style="margin-top: 20px;">
36
+ <div class="table-head" style=${o}>
37
+ <span>SERVER</span>
38
+ <span>TRANSPORT</span>
39
+ <span>TOOLS</span>
40
+ <span>STATUS</span>
41
+ <span></span>
42
+ </div>
43
+ ${s.map(([e,t])=>x(e,t,a))}
44
+ </div>
45
+ `:e`<div class="callout info" style="margin-top: 16px;">${n(`common.loading`)}</div>`}
46
+
47
+ <details class="card" style="margin-top: 24px;">
48
+ <summary
49
+ style="cursor: pointer; font-weight: 600; display: flex; align-items: center; gap: 8px;"
50
+ >
51
+ <span class="btn__icon">${i.plus}</span> ${n(`mcpView.add.title`)}
52
+ </summary>
53
+ <div style="margin-top: 16px;">${p(a,c)}</div>
54
+ </details>
55
+ </section>
56
+ `}function p(t,r){return e`
57
+ <div
58
+ style="border: 1px solid var(--border); border-radius: 8px; padding: 14px; background: var(--surface-2, transparent);"
59
+ >
60
+ <div style="display: flex; align-items: center; gap: 12px; margin-bottom: 12px;">
61
+ <div style="font-weight: 600;">${n(`mcpView.add.title`)}</div>
62
+ <div style="display: flex; gap: 6px; margin-left: auto;">
63
+ <button
64
+ class="btn btn--sm ${t.addMode===`preset`?`primary`:`ghost`}"
65
+ @click=${()=>t.onAddModeChange(`preset`)}
66
+ type="button"
67
+ >
68
+ ${n(`mcpView.add.tabPreset`)}
69
+ </button>
70
+ <button
71
+ class="btn btn--sm ${t.addMode===`link`?`primary`:`ghost`}"
72
+ @click=${()=>t.onAddModeChange(`link`)}
73
+ type="button"
74
+ >
75
+ ${n(`mcpView.add.tabLink`)}
76
+ </button>
77
+ <button
78
+ class="btn btn--sm ${t.addMode===`json`?`primary`:`ghost`}"
79
+ @click=${()=>t.onAddModeChange(`json`)}
80
+ type="button"
81
+ >
82
+ ${n(`mcpView.add.tabJson`)}
83
+ </button>
84
+ </div>
85
+ </div>
86
+ ${t.addMode===`preset`?_(t):t.addMode===`link`?m(t):y(t,r)}
87
+ </div>
88
+ `}function m(r){return e`
89
+ <div>
90
+ <label class="field" style="margin-bottom: 10px;">
91
+ <span>${n(`mcpView.add.link.label`)}</span>
92
+ <input
93
+ .value=${r.linkUrl}
94
+ @input=${e=>r.onLinkUrlChange(e.target.value)}
95
+ placeholder=${n(`mcpView.add.link.placeholder`)}
96
+ autocomplete="off"
97
+ name="mcp-link-url"
98
+ @keydown=${e=>{e.key===`Enter`&&(e.preventDefault(),r.onLinkFetch())}}
99
+ />
100
+ </label>
101
+ <div style="display: flex; gap: 8px;">
102
+ <button
103
+ class="btn btn--sm primary"
104
+ ?disabled=${r.linkLoading||!r.linkUrl.trim()||!r.connected}
105
+ @click=${r.onLinkFetch}
106
+ >
107
+ ${r.linkLoading?n(`mcpView.add.link.fetching`):n(`mcpView.add.link.fetch`)}
108
+ </button>
109
+ ${r.linkMetadata||r.linkError?e`
110
+ <button class="btn btn--sm ghost" @click=${r.onLinkClear}>
111
+ ${n(`mcpView.add.link.cancel`)}
112
+ </button>
113
+ `:t}
114
+ </div>
115
+ ${r.linkError?e`<div class="callout danger" style="margin-top: 10px;">
116
+ ${n(`mcpView.add.link.unsupportedTitle`)}: ${r.linkError}
117
+ <div class="muted" style="font-size: 13px; margin-top: 4px;">
118
+ ${n(`mcpView.add.link.unsupportedHint`)}
119
+ </div>
120
+ </div>`:t}
121
+ ${r.linkMetadata?h(r):t}
122
+ </div>
123
+ `}function h(r){let i=r.linkMetadata;return e`
124
+ <div
125
+ style="margin-top: 14px; padding: 12px; border: 1px solid var(--border); border-radius: 6px;"
126
+ >
127
+ <div style="font-weight: 600; margin-bottom: 6px;">${n(`mcpView.add.link.previewTitle`)}</div>
128
+ <div style="display: grid; grid-template-columns: max-content 1fr; gap: 4px 12px;">
129
+ <div class="muted">${n(`mcpView.add.link.nameLabel`)}</div>
130
+ <div>
131
+ <input
132
+ .value=${r.draftName||i.name}
133
+ @input=${e=>r.onDraftNameChange(e.target.value)}
134
+ autocomplete="off"
135
+ name="mcp-link-name"
136
+ />
137
+ </div>
138
+ <div class="muted">${n(`mcpView.add.link.transportLabel`)}</div>
139
+ <div class="mono" style="overflow-wrap: anywhere;">${i.transport}</div>
140
+ <div class="muted">URL</div>
141
+ <div class="mono" style="overflow-wrap: anywhere;">${i.url}</div>
142
+ ${i.serverName?e`
143
+ <div class="muted">Server</div>
144
+ <div>
145
+ ${i.serverName}${i.serverVersion?e` <span class="muted">v${i.serverVersion}</span>`:t}
146
+ </div>
147
+ `:t}
148
+ ${i.capabilities?.tools?.length?e`
149
+ <div class="muted">Tools</div>
150
+ <div>${i.capabilities.tools.join(`, `)}</div>
151
+ `:t}
152
+ ${i.oauth?e`
153
+ <div class="muted">OAuth</div>
154
+ <div>
155
+ <span class="chip chip-warn">${n(`mcpView.list.oauthRequired`)}</span>
156
+ ${i.oauthIssuer?e`<span class="muted mono" style="margin-left: 6px;"
157
+ >${i.oauthIssuer}</span
158
+ >`:t}
159
+ </div>
160
+ `:t}
161
+ </div>
162
+ ${i.oauth?t:g(r,{label:n(`mcpView.add.token.label`),hint:n(`mcpView.add.token.hint`)})}
163
+ <div style="display: flex; gap: 8px; margin-top: 12px;">
164
+ <button
165
+ class="btn btn--sm primary"
166
+ ?disabled=${r.busy||!r.connected}
167
+ @click=${()=>r.onSaveMetadata(i)}
168
+ >
169
+ ${r.busy?n(`common.loading`):n(`mcpView.add.link.save`)}
170
+ </button>
171
+ <button class="btn btn--sm ghost" @click=${r.onLinkClear}>
172
+ ${n(`mcpView.add.link.cancel`)}
173
+ </button>
174
+ </div>
175
+ </div>
176
+ `}function g(t,r){return e`
177
+ <label class="field" style="margin-top: 12px;">
178
+ <span>${r.label}</span>
179
+ <input
180
+ type="password"
181
+ .value=${t.authToken}
182
+ @input=${e=>t.onAuthTokenChange(e.target.value)}
183
+ placeholder=${n(`mcpView.add.token.placeholder`)}
184
+ autocomplete="off"
185
+ name="mcp-auth-token"
186
+ spellcheck="false"
187
+ />
188
+ </label>
189
+ <div class="muted" style="font-size: 13px; margin-top: 4px;">${r.hint}</div>
190
+ `}function _(r){let i=a.find(e=>e.id===r.presetId);return e`
191
+ <div>
192
+ <div class="muted" style="font-size: 13px; margin-bottom: 12px;">
193
+ ${n(`mcpView.add.preset.intro`)}
194
+ </div>
195
+ <div
196
+ style="display: grid; grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); gap: 8px;"
197
+ >
198
+ ${a.map(t=>e`
199
+ <button
200
+ class="btn ${t.id===r.presetId?`primary`:`ghost`}"
201
+ type="button"
202
+ style="display: flex; align-items: flex-start; gap: 8px; text-align: left; padding: 10px 12px; height: auto;"
203
+ @click=${()=>r.onPresetSelect(t)}
204
+ >
205
+ <span style="font-size: 18px; line-height: 1;">${t.icon}</span>
206
+ <span style="display: flex; flex-direction: column; gap: 2px; min-width: 0;">
207
+ <span style="font-weight: 600;">${t.label}</span>
208
+ <span class="muted" style="font-size: 12px; white-space: normal;"
209
+ >${t.description}</span
210
+ >
211
+ </span>
212
+ </button>
213
+ `)}
214
+ </div>
215
+ ${i?v(r,i):t}
216
+ </div>
217
+ `}function v(r,i){let a=i.authKind===`bearer`,o=i.tokenLabel??n(`mcpView.add.token.label`);return e`
218
+ <div
219
+ style="margin-top: 14px; padding: 12px; border: 1px solid var(--border); border-radius: 6px;"
220
+ >
221
+ <div style="font-weight: 600; margin-bottom: 6px;">
222
+ ${n(`mcpView.add.preset.selected`,{label:i.label})}
223
+ </div>
224
+ <div style="display: grid; grid-template-columns: max-content 1fr; gap: 4px 12px;">
225
+ <div class="muted">${n(`mcpView.add.link.nameLabel`)}</div>
226
+ <div>
227
+ <input
228
+ .value=${r.draftName||i.name}
229
+ @input=${e=>r.onDraftNameChange(e.target.value)}
230
+ autocomplete="off"
231
+ name="mcp-preset-name"
232
+ />
233
+ </div>
234
+ <div class="muted">${n(`mcpView.add.link.transportLabel`)}</div>
235
+ <div class="mono" style="overflow-wrap: anywhere;">${i.transport}</div>
236
+ <div class="muted">URL</div>
237
+ <div class="mono" style="overflow-wrap: anywhere;">${i.url}</div>
238
+ </div>
239
+ ${a?e`
240
+ ${g(r,{label:o,hint:n(`mcpView.add.token.hint`)})}
241
+ ${i.tokenDocsUrl?e`<div class="muted" style="font-size: 13px; margin-top: 4px;">
242
+ <a href=${i.tokenDocsUrl} target="_blank" rel="noopener noreferrer"
243
+ >${n(`mcpView.add.preset.tokenDocs`)}</a
244
+ >
245
+ </div>`:t}
246
+ `:t}
247
+ ${i.authKind===`oauth`?e`<div class="callout info" style="margin-top: 12px;">
248
+ ${n(`mcpView.add.preset.oauthNote`)}
249
+ </div>`:t}
250
+ <div style="display: flex; gap: 8px; margin-top: 12px;">
251
+ <button
252
+ class="btn btn--sm primary"
253
+ ?disabled=${r.busy||!r.connected}
254
+ @click=${()=>r.onPresetSave(i)}
255
+ >
256
+ ${r.busy?n(`common.loading`):n(`mcpView.add.preset.save`)}
257
+ </button>
258
+ </div>
259
+ </div>
260
+ `}function y(t,r){return e`
261
+ <div>
262
+ <label class="field" style="margin-bottom: 10px;">
263
+ <span>${n(`mcpView.add.json.nameLabel`)}</span>
264
+ <input
265
+ .value=${t.draftName}
266
+ @input=${e=>t.onDraftNameChange(e.target.value)}
267
+ placeholder=${n(`mcpView.add.json.namePlaceholder`)}
268
+ autocomplete="off"
269
+ name="mcp-json-name"
270
+ />
271
+ </label>
272
+ <label class="field agent-file-field">
273
+ <span>${n(`mcpView.add.json.configLabel`)}</span>
274
+ <textarea
275
+ class="agent-file-textarea"
276
+ .value=${t.draftConfig}
277
+ @input=${e=>t.onDraftConfigChange(e.target.value)}
278
+ placeholder=${d}
279
+ spellcheck="false"
280
+ ></textarea>
281
+ </label>
282
+ <div class="muted" style="font-size: 13px; margin-top: 6px;">
283
+ ${n(`mcpView.add.json.configHint`)}
284
+ </div>
285
+ <div style="display: flex; gap: 8px; margin-top: 10px;">
286
+ <button
287
+ class="btn btn--sm primary"
288
+ ?disabled=${!r||!t.connected}
289
+ @click=${t.onSave}
290
+ >
291
+ ${t.busy?n(`common.loading`):t.draftName&&t.servers&&Object.prototype.hasOwnProperty.call(t.servers,t.draftName)?n(`mcpView.add.json.update`):n(`mcpView.add.json.save`)}
292
+ </button>
293
+ </div>
294
+ </div>
295
+ `}function b(t){let r=t.oauthFlow;return r.error?e`<div class="callout danger" style="margin-top: 12px;">
296
+ ${n(`mcpView.oauth.failed`,{message:r.error})}
297
+ </div>`:e`<div class="callout info" style="margin-top: 12px;">
298
+ <div style="display: flex; align-items: center; gap: 12px;">
299
+ <div>
300
+ <div style="font-weight: 600;">${n(`mcpView.oauth.title`,{name:r.name})}</div>
301
+ <div class="muted" style="font-size: 13px;">${n(`mcpView.oauth.subtitle`)}</div>
302
+ </div>
303
+ <div style="display: flex; gap: 8px; margin-left: auto;">
304
+ <a
305
+ class="btn btn--sm primary"
306
+ href=${r.authorizeUrl}
307
+ target="_blank"
308
+ rel="noopener noreferrer"
309
+ >
310
+ ${n(`mcpView.oauth.open`)}
311
+ </a>
312
+ <button class="btn btn--sm ghost" @click=${t.onOAuthCancel}>
313
+ ${n(`mcpView.oauth.waiting`)}
314
+ </button>
315
+ </div>
316
+ </div>
317
+ </div>`}function x(r,i,a){let d=a.oauthStatus[r],f=a.testStatus[r],p=u(i)||(d?.requiresAuth??!1),m=c(d,f,p);return e`
318
+ <div class="table-row" style="${o}">
319
+ <div style="display: flex; flex-direction: column; gap: 2px; min-width: 0;">
320
+ <span style="font-family: var(--mono); color: var(--text);">${r}</span>
321
+ <span class="muted" style="font-size: 13px; overflow: hidden; text-overflow: ellipsis;">
322
+ ${l(i)}
323
+ </span>
324
+ </div>
325
+ <span class="muted" style="font-family: var(--mono);">${s(i)}</span>
326
+ <span class="muted" style="font-family: var(--mono);">—</span>
327
+ <span style="display: flex; align-items: center; gap: 8px;">
328
+ <span class="status-dot ${m.dot}"></span>
329
+ <span class="muted">${m.label}</span>
330
+ </span>
331
+ <span style="display: flex; gap: 6px; justify-content: flex-end; flex-wrap: wrap;">
332
+ ${p?d?.connected?e`
333
+ <button
334
+ class="btn btn--sm"
335
+ ?disabled=${a.busy}
336
+ @click=${()=>a.onOAuthConnect(r)}
337
+ >
338
+ ${n(`mcpView.list.reconnect`)}
339
+ </button>
340
+ <button
341
+ class="btn btn--sm ghost"
342
+ ?disabled=${a.busy}
343
+ @click=${()=>a.onOAuthDisconnect(r)}
344
+ >
345
+ ${n(`mcpView.list.disconnect`)}
346
+ </button>
347
+ `:e`
348
+ <button
349
+ class="btn btn--sm primary"
350
+ ?disabled=${a.busy||!!a.oauthFlow}
351
+ @click=${()=>a.onOAuthConnect(r)}
352
+ >
353
+ ${n(`mcpView.list.connect`)}
354
+ </button>
355
+ `:t}
356
+ <button
357
+ class="btn btn--sm ghost"
358
+ ?disabled=${a.busy}
359
+ @click=${()=>a.onTest(r)}
360
+ >
361
+ ${n(`mcpView.list.test`)}
362
+ </button>
363
+ <button
364
+ class="btn btn--sm ghost"
365
+ ?disabled=${a.busy}
366
+ @click=${()=>a.onEdit(r)}
367
+ >
368
+ ${n(`mcpView.list.edit`)}
369
+ </button>
370
+ <button
371
+ class="btn btn--sm ghost"
372
+ ?disabled=${a.busy}
373
+ @click=${()=>a.onDelete(r)}
374
+ >
375
+ ${n(`mcpView.list.delete`)}
376
+ </button>
377
+ </span>
378
+ </div>
379
+ `}export{f as renderMcp};
380
+ //# sourceMappingURL=mcp-Cvo6FOST.js.map
@@ -1,12 +1,12 @@
1
- import{f as e,r as t,u as n}from"./i18n-Dr_ijwId.js";import{g as r}from"./index-CYO6b4V3.js";var i=`grid-template-columns: 1.2fr 2fr;`;function a(n){return n.entries.length===0?e`<div class="muted" style="padding: 16px;">
2
- ${n.loading?t(`common.loading`):t(`memoryView.empty`)}
1
+ import{d as e,l as t,r as n}from"./i18n-DLwqUqi0.js";import{l as r}from"./index-or46Cf5v.js";var i=`grid-template-columns: 1.2fr 2fr;`;function a(t){return t.entries.length===0?e`<div class="muted" style="padding: 16px;">
2
+ ${t.loading?n(`common.loading`):n(`memoryView.empty`)}
3
3
  </div>`:e`
4
4
  <div class="table">
5
5
  <div class="table-head" style=${i}>
6
- <span>${t(`memoryView.colMemory`)}</span>
7
- <span>${t(`memoryView.colDetail`)}</span>
6
+ <span>${n(`memoryView.colMemory`)}</span>
7
+ <span>${n(`memoryView.colDetail`)}</span>
8
8
  </div>
9
- ${n.entries.map(t=>e`
9
+ ${t.entries.map(t=>e`
10
10
  <div class="table-row" style=${i}>
11
11
  <span style="font-family: var(--mono); color: var(--text);">${t.name}</span>
12
12
  <span class="muted">${t.description||`—`}</span>
@@ -17,21 +17,21 @@ import{f as e,r as t,u as n}from"./i18n-Dr_ijwId.js";import{g as r}from"./index-
17
17
  <section class="card" style="border: none; background: transparent; padding: 0;">
18
18
  <div class="row" style="justify-content: space-between; align-items: flex-start;">
19
19
  <div>
20
- <div class="card-title">${t(`tabs.memory`)}</div>
20
+ <div class="card-title">${n(`tabs.memory`)}</div>
21
21
  <div class="card-sub">
22
- ${t(`subtitles.memory`)}${i.entries.length?e` · <span style="font-family: var(--mono);">${i.entries.length}</span>`:n}
22
+ ${n(`subtitles.memory`)}${i.entries.length?e` · <span style="font-family: var(--mono);">${i.entries.length}</span>`:t}
23
23
  </div>
24
24
  </div>
25
25
  <button class="btn" ?disabled=${i.loading} @click=${i.onRefresh}>
26
- ${r.refresh} ${i.loading?t(`common.loading`):t(`common.refresh`)}
26
+ ${r.refresh} ${i.loading?n(`common.loading`):n(`common.refresh`)}
27
27
  </button>
28
28
  </div>
29
29
 
30
- ${i.error?e`<div class="callout danger" style="margin-top: 16px;">${i.error}</div>`:n}
30
+ ${i.error?e`<div class="callout danger" style="margin-top: 16px;">${i.error}</div>`:t}
31
31
 
32
32
  <div style="margin-top: 20px;">
33
- ${i.agentId?a(i):e`<div class="muted" style="padding: 16px;">${t(`memoryView.noAgent`)}</div>`}
33
+ ${i.agentId?a(i):e`<div class="muted" style="padding: 16px;">${n(`memoryView.noAgent`)}</div>`}
34
34
  </div>
35
35
  </section>
36
36
  `}export{o as renderMemory};
37
- //# sourceMappingURL=memory-Dxu2hVW_.js.map
37
+ //# sourceMappingURL=memory-EzZxvhx5.js.map
@@ -1,40 +1,40 @@
1
- import{f as e,r as t,u as n}from"./i18n-Dr_ijwId.js";import{g as r}from"./index-CYO6b4V3.js";var i=`grid-template-columns: 2fr 1fr 0.8fr 0.8fr;`,a=`grid-template-columns: 2fr 0.8fr 1fr;`;function o(e){return e.provider??`—`}function s(e){let t=e.contextWindow;return typeof t!=`number`||t<=0?`—`:t>=1e6?`${(t/1e6).toFixed(t%1e6?1:0)}M`:t>=1e3?`${Math.round(t/1e3)}K`:String(t)}function c(e){return!!e.reasoning}function l(n){return n.models.length===0?e`<div class="muted" style="padding: 16px;">
2
- ${n.loading?t(`common.loading`):t(`modelsView.empty`)}
1
+ import{d as e,l as t,r as n}from"./i18n-DLwqUqi0.js";import{l as r}from"./index-or46Cf5v.js";var i=`grid-template-columns: 2fr 1fr 0.8fr 0.8fr;`,a=`grid-template-columns: 2fr 0.8fr 1fr;`;function o(e){return e.provider??`—`}function s(e){let t=e.contextWindow;return typeof t!=`number`||t<=0?`—`:t>=1e6?`${(t/1e6).toFixed(t%1e6?1:0)}M`:t>=1e3?`${Math.round(t/1e3)}K`:String(t)}function c(e){return!!e.reasoning}function l(t){return t.models.length===0?e`<div class="muted" style="padding: 16px;">
2
+ ${t.loading?n(`common.loading`):n(`modelsView.empty`)}
3
3
  </div>`:e`
4
4
  <div class="table">
5
5
  <div class="table-head" style=${i}>
6
- <span>${t(`modelsView.colModel`)}</span>
7
- <span>${t(`modelsView.colProvider`)}</span>
8
- <span>${t(`modelsView.colContext`)}</span>
9
- <span>${t(`modelsView.colReasoning`)}</span>
6
+ <span>${n(`modelsView.colModel`)}</span>
7
+ <span>${n(`modelsView.colProvider`)}</span>
8
+ <span>${n(`modelsView.colContext`)}</span>
9
+ <span>${n(`modelsView.colReasoning`)}</span>
10
10
  </div>
11
- ${n.models.map(n=>e`
11
+ ${t.models.map(t=>e`
12
12
  <div class="table-row" style=${i}>
13
- <span style="font-family: var(--mono); color: var(--text);">${n.id}</span>
14
- <span class="muted">${o(n)}</span>
15
- <span style="font-family: var(--mono);" class="muted">${s(n)}</span>
13
+ <span style="font-family: var(--mono); color: var(--text);">${t.id}</span>
14
+ <span class="muted">${o(t)}</span>
15
+ <span style="font-family: var(--mono);" class="muted">${s(t)}</span>
16
16
  <span>
17
- ${c(n)?e`<span class="pill">${t(`modelsView.reasoning`)}</span>`:e`<span class="muted">—</span>`}
17
+ ${c(t)?e`<span class="pill">${n(`modelsView.reasoning`)}</span>`:e`<span class="muted">—</span>`}
18
18
  </span>
19
19
  </div>
20
20
  `)}
21
21
  </div>
22
- `}function u(n){let r=new Map;for(let e of n.models){let t=o(e);r.set(t,(r.get(t)??0)+1)}let i=[...r.entries()].toSorted((e,t)=>e[0].localeCompare(t[0]));return i.length===0?e`<div class="muted" style="padding: 16px;">
23
- ${n.loading?t(`common.loading`):t(`modelsView.empty`)}
22
+ `}function u(t){let r=new Map;for(let e of t.models){let t=o(e);r.set(t,(r.get(t)??0)+1)}let i=[...r.entries()].toSorted((e,t)=>e[0].localeCompare(t[0]));return i.length===0?e`<div class="muted" style="padding: 16px;">
23
+ ${t.loading?n(`common.loading`):n(`modelsView.empty`)}
24
24
  </div>`:e`
25
25
  <div class="table">
26
26
  <div class="table-head" style=${a}>
27
- <span>${t(`modelsView.colProvider`)}</span>
28
- <span>${t(`modelsView.colModels`)}</span>
29
- <span>${t(`modelsView.colStatus`)}</span>
27
+ <span>${n(`modelsView.colProvider`)}</span>
28
+ <span>${n(`modelsView.colModels`)}</span>
29
+ <span>${n(`modelsView.colStatus`)}</span>
30
30
  </div>
31
- ${i.map(([n,r])=>e`
31
+ ${i.map(([t,r])=>e`
32
32
  <div class="table-row" style=${a}>
33
- <span style="font-weight: 500;">${n}</span>
33
+ <span style="font-weight: 500;">${t}</span>
34
34
  <span style="font-family: var(--mono);" class="muted">${r}</span>
35
35
  <span class="row" style="gap: 8px; align-items: center;">
36
36
  <span class="status-dot status-dot--ok"></span>
37
- <span class="muted">${t(`modelsView.connected`)}</span>
37
+ <span class="muted">${n(`modelsView.connected`)}</span>
38
38
  </span>
39
39
  </div>
40
40
  `)}
@@ -43,11 +43,11 @@ import{f as e,r as t,u as n}from"./i18n-Dr_ijwId.js";import{g as r}from"./index-
43
43
  <section class="card" style="border: none; background: transparent; padding: 0;">
44
44
  <div class="row" style="justify-content: space-between; align-items: flex-start;">
45
45
  <div>
46
- <div class="card-title">${t(`tabs.models`)}</div>
47
- <div class="card-sub">${t(`subtitles.models`)}</div>
46
+ <div class="card-title">${n(`tabs.models`)}</div>
47
+ <div class="card-sub">${n(`subtitles.models`)}</div>
48
48
  </div>
49
49
  <button class="btn" ?disabled=${i.loading} @click=${i.onRefresh}>
50
- ${r.refresh} ${i.loading?t(`common.loading`):t(`common.refresh`)}
50
+ ${r.refresh} ${i.loading?n(`common.loading`):n(`common.refresh`)}
51
51
  </button>
52
52
  </div>
53
53
 
@@ -56,21 +56,21 @@ import{f as e,r as t,u as n}from"./i18n-Dr_ijwId.js";import{g as r}from"./index-
56
56
  class="agent-tab ${i.panel===`catalog`?`active`:``}"
57
57
  @click=${()=>i.onPanelChange(`catalog`)}
58
58
  >
59
- ${t(`modelsView.tabModels`)}
59
+ ${n(`modelsView.tabModels`)}
60
60
  </button>
61
61
  <button
62
62
  class="agent-tab ${i.panel===`providers`?`active`:``}"
63
63
  @click=${()=>i.onPanelChange(`providers`)}
64
64
  >
65
- ${t(`modelsView.tabProviders`)}
65
+ ${n(`modelsView.tabProviders`)}
66
66
  </button>
67
67
  </div>
68
68
 
69
- ${i.error?e`<div class="callout danger" style="margin-top: 16px;">${i.error}</div>`:n}
69
+ ${i.error?e`<div class="callout danger" style="margin-top: 16px;">${i.error}</div>`:t}
70
70
 
71
71
  <div style="margin-top: 16px;">
72
72
  ${i.panel===`providers`?u(i):l(i)}
73
73
  </div>
74
74
  </section>
75
75
  `}export{d as renderModels};
76
- //# sourceMappingURL=models-DmHuwChH.js.map
76
+ //# sourceMappingURL=models-CHjUP5zU.js.map