@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
@@ -1,373 +0,0 @@
1
- import{f as e,r as t,u as n}from"./i18n-Dr_ijwId.js";import{L as r,c as i}from"./index-CYO6b4V3.js";function a(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 o(e){let t=e.auth;return!t||typeof t!=`object`?!1:t.type===`oauth`}function s(r,i){return r?.connected?e`<span class="chip chip-ok">${t(`mcpView.list.connected`)}</span>`:i||r?.requiresAuth?e`<span class="chip chip-warn">${t(`mcpView.list.oauthRequired`)}</span>`:n}var c=`{
2
- "url": "https://mcp.context7.com/mcp",
3
- "transport": "streamable-http"
4
- }`;function l(i){let a=i.servers?r(Object.entries(i.servers),([e],[t])=>e.localeCompare(t)):[],o=i.draftName.trim().length>0&&!i.busy;return e`
5
- <section class="card">
6
- <div style="display: flex; align-items: center; justify-content: space-between; gap: 12px;">
7
- <div>
8
- <div class="card-title">${t(`mcpView.title`)}</div>
9
- <div class="card-sub">${t(`mcpView.subtitle`)}</div>
10
- </div>
11
- <button class="btn btn--sm" ?disabled=${i.loading} @click=${i.onRefresh}>
12
- ${i.loading?t(`common.loading`):t(`common.refresh`)}
13
- </button>
14
- </div>
15
-
16
- ${i.path?e`<div class="muted mono" style="margin-top: 8px;">
17
- Config: <span>${i.path}</span>
18
- </div>`:n}
19
- ${i.error?e`<div class="callout danger" style="margin-top: 12px;">${i.error}</div>`:n}
20
- ${i.message?e`<div
21
- class="callout ${i.message.kind===`error`?`danger`:`success`}"
22
- style="margin-top: 12px;"
23
- >
24
- ${i.message.text}
25
- </div>`:n}
26
- ${i.oauthFlow?_(i):n}
27
-
28
- <div style="margin-top: 16px;">${u(i,o)}</div>
29
-
30
- ${i.servers?a.length===0?e`<div class="muted" style="margin-top: 16px;">
31
- ${t(`mcpView.list.empty`)}
32
- <div class="muted" style="font-size: 13px; margin-top: 4px;">
33
- ${t(`mcpView.list.emptyHint`)}
34
- </div>
35
- </div>`:e`
36
- <div class="list" style="margin-top: 16px;">
37
- ${a.map(([e,t])=>v(e,t,i))}
38
- </div>
39
- `:e`<div class="callout info" style="margin-top: 16px;">${t(`common.loading`)}</div>`}
40
- </section>
41
- `}function u(n,r){return e`
42
- <div
43
- style="border: 1px solid var(--border); border-radius: 8px; padding: 14px; background: var(--surface-2, transparent);"
44
- >
45
- <div style="display: flex; align-items: center; gap: 12px; margin-bottom: 12px;">
46
- <div style="font-weight: 600;">${t(`mcpView.add.title`)}</div>
47
- <div style="display: flex; gap: 6px; margin-left: auto;">
48
- <button
49
- class="btn btn--sm ${n.addMode===`preset`?`primary`:`ghost`}"
50
- @click=${()=>n.onAddModeChange(`preset`)}
51
- type="button"
52
- >
53
- ${t(`mcpView.add.tabPreset`)}
54
- </button>
55
- <button
56
- class="btn btn--sm ${n.addMode===`link`?`primary`:`ghost`}"
57
- @click=${()=>n.onAddModeChange(`link`)}
58
- type="button"
59
- >
60
- ${t(`mcpView.add.tabLink`)}
61
- </button>
62
- <button
63
- class="btn btn--sm ${n.addMode===`json`?`primary`:`ghost`}"
64
- @click=${()=>n.onAddModeChange(`json`)}
65
- type="button"
66
- >
67
- ${t(`mcpView.add.tabJson`)}
68
- </button>
69
- </div>
70
- </div>
71
- ${n.addMode===`preset`?m(n):n.addMode===`link`?d(n):g(n,r)}
72
- </div>
73
- `}function d(r){return e`
74
- <div>
75
- <label class="field" style="margin-bottom: 10px;">
76
- <span>${t(`mcpView.add.link.label`)}</span>
77
- <input
78
- .value=${r.linkUrl}
79
- @input=${e=>r.onLinkUrlChange(e.target.value)}
80
- placeholder=${t(`mcpView.add.link.placeholder`)}
81
- autocomplete="off"
82
- name="mcp-link-url"
83
- @keydown=${e=>{e.key===`Enter`&&(e.preventDefault(),r.onLinkFetch())}}
84
- />
85
- </label>
86
- <div style="display: flex; gap: 8px;">
87
- <button
88
- class="btn btn--sm primary"
89
- ?disabled=${r.linkLoading||!r.linkUrl.trim()||!r.connected}
90
- @click=${r.onLinkFetch}
91
- >
92
- ${r.linkLoading?t(`mcpView.add.link.fetching`):t(`mcpView.add.link.fetch`)}
93
- </button>
94
- ${r.linkMetadata||r.linkError?e`
95
- <button class="btn btn--sm ghost" @click=${r.onLinkClear}>
96
- ${t(`mcpView.add.link.cancel`)}
97
- </button>
98
- `:n}
99
- </div>
100
- ${r.linkError?e`<div class="callout danger" style="margin-top: 10px;">
101
- ${t(`mcpView.add.link.unsupportedTitle`)}: ${r.linkError}
102
- <div class="muted" style="font-size: 13px; margin-top: 4px;">
103
- ${t(`mcpView.add.link.unsupportedHint`)}
104
- </div>
105
- </div>`:n}
106
- ${r.linkMetadata?f(r):n}
107
- </div>
108
- `}function f(r){let i=r.linkMetadata;return e`
109
- <div
110
- style="margin-top: 14px; padding: 12px; border: 1px solid var(--border); border-radius: 6px;"
111
- >
112
- <div style="font-weight: 600; margin-bottom: 6px;">${t(`mcpView.add.link.previewTitle`)}</div>
113
- <div style="display: grid; grid-template-columns: max-content 1fr; gap: 4px 12px;">
114
- <div class="muted">${t(`mcpView.add.link.nameLabel`)}</div>
115
- <div>
116
- <input
117
- .value=${r.draftName||i.name}
118
- @input=${e=>r.onDraftNameChange(e.target.value)}
119
- autocomplete="off"
120
- name="mcp-link-name"
121
- />
122
- </div>
123
- <div class="muted">${t(`mcpView.add.link.transportLabel`)}</div>
124
- <div class="mono" style="overflow-wrap: anywhere;">${i.transport}</div>
125
- <div class="muted">URL</div>
126
- <div class="mono" style="overflow-wrap: anywhere;">${i.url}</div>
127
- ${i.serverName?e`
128
- <div class="muted">Server</div>
129
- <div>
130
- ${i.serverName}${i.serverVersion?e` <span class="muted">v${i.serverVersion}</span>`:n}
131
- </div>
132
- `:n}
133
- ${i.capabilities?.tools?.length?e`
134
- <div class="muted">Tools</div>
135
- <div>${i.capabilities.tools.join(`, `)}</div>
136
- `:n}
137
- ${i.oauth?e`
138
- <div class="muted">OAuth</div>
139
- <div>
140
- <span class="chip chip-warn">${t(`mcpView.list.oauthRequired`)}</span>
141
- ${i.oauthIssuer?e`<span class="muted mono" style="margin-left: 6px;"
142
- >${i.oauthIssuer}</span
143
- >`:n}
144
- </div>
145
- `:n}
146
- </div>
147
- ${i.oauth?n:p(r,{label:t(`mcpView.add.token.label`),hint:t(`mcpView.add.token.hint`)})}
148
- <div style="display: flex; gap: 8px; margin-top: 12px;">
149
- <button
150
- class="btn btn--sm primary"
151
- ?disabled=${r.busy||!r.connected}
152
- @click=${()=>r.onSaveMetadata(i)}
153
- >
154
- ${r.busy?t(`common.loading`):t(`mcpView.add.link.save`)}
155
- </button>
156
- <button class="btn btn--sm ghost" @click=${r.onLinkClear}>
157
- ${t(`mcpView.add.link.cancel`)}
158
- </button>
159
- </div>
160
- </div>
161
- `}function p(n,r){return e`
162
- <label class="field" style="margin-top: 12px;">
163
- <span>${r.label}</span>
164
- <input
165
- type="password"
166
- .value=${n.authToken}
167
- @input=${e=>n.onAuthTokenChange(e.target.value)}
168
- placeholder=${t(`mcpView.add.token.placeholder`)}
169
- autocomplete="off"
170
- name="mcp-auth-token"
171
- spellcheck="false"
172
- />
173
- </label>
174
- <div class="muted" style="font-size: 13px; margin-top: 4px;">${r.hint}</div>
175
- `}function m(r){let a=i.find(e=>e.id===r.presetId);return e`
176
- <div>
177
- <div class="muted" style="font-size: 13px; margin-bottom: 12px;">
178
- ${t(`mcpView.add.preset.intro`)}
179
- </div>
180
- <div
181
- style="display: grid; grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); gap: 8px;"
182
- >
183
- ${i.map(t=>e`
184
- <button
185
- class="btn ${t.id===r.presetId?`primary`:`ghost`}"
186
- type="button"
187
- style="display: flex; align-items: flex-start; gap: 8px; text-align: left; padding: 10px 12px; height: auto;"
188
- @click=${()=>r.onPresetSelect(t)}
189
- >
190
- <span style="font-size: 18px; line-height: 1;">${t.icon}</span>
191
- <span style="display: flex; flex-direction: column; gap: 2px; min-width: 0;">
192
- <span style="font-weight: 600;">${t.label}</span>
193
- <span class="muted" style="font-size: 12px; white-space: normal;"
194
- >${t.description}</span
195
- >
196
- </span>
197
- </button>
198
- `)}
199
- </div>
200
- ${a?h(r,a):n}
201
- </div>
202
- `}function h(r,i){let a=i.authKind===`bearer`,o=i.tokenLabel??t(`mcpView.add.token.label`);return e`
203
- <div
204
- style="margin-top: 14px; padding: 12px; border: 1px solid var(--border); border-radius: 6px;"
205
- >
206
- <div style="font-weight: 600; margin-bottom: 6px;">
207
- ${t(`mcpView.add.preset.selected`,{label:i.label})}
208
- </div>
209
- <div style="display: grid; grid-template-columns: max-content 1fr; gap: 4px 12px;">
210
- <div class="muted">${t(`mcpView.add.link.nameLabel`)}</div>
211
- <div>
212
- <input
213
- .value=${r.draftName||i.name}
214
- @input=${e=>r.onDraftNameChange(e.target.value)}
215
- autocomplete="off"
216
- name="mcp-preset-name"
217
- />
218
- </div>
219
- <div class="muted">${t(`mcpView.add.link.transportLabel`)}</div>
220
- <div class="mono" style="overflow-wrap: anywhere;">${i.transport}</div>
221
- <div class="muted">URL</div>
222
- <div class="mono" style="overflow-wrap: anywhere;">${i.url}</div>
223
- </div>
224
- ${a?e`
225
- ${p(r,{label:o,hint:t(`mcpView.add.token.hint`)})}
226
- ${i.tokenDocsUrl?e`<div class="muted" style="font-size: 13px; margin-top: 4px;">
227
- <a href=${i.tokenDocsUrl} target="_blank" rel="noopener noreferrer"
228
- >${t(`mcpView.add.preset.tokenDocs`)}</a
229
- >
230
- </div>`:n}
231
- `:n}
232
- ${i.authKind===`oauth`?e`<div class="callout info" style="margin-top: 12px;">
233
- ${t(`mcpView.add.preset.oauthNote`)}
234
- </div>`:n}
235
- <div style="display: flex; gap: 8px; margin-top: 12px;">
236
- <button
237
- class="btn btn--sm primary"
238
- ?disabled=${r.busy||!r.connected}
239
- @click=${()=>r.onPresetSave(i)}
240
- >
241
- ${r.busy?t(`common.loading`):t(`mcpView.add.preset.save`)}
242
- </button>
243
- </div>
244
- </div>
245
- `}function g(n,r){return e`
246
- <div>
247
- <label class="field" style="margin-bottom: 10px;">
248
- <span>${t(`mcpView.add.json.nameLabel`)}</span>
249
- <input
250
- .value=${n.draftName}
251
- @input=${e=>n.onDraftNameChange(e.target.value)}
252
- placeholder=${t(`mcpView.add.json.namePlaceholder`)}
253
- autocomplete="off"
254
- name="mcp-json-name"
255
- />
256
- </label>
257
- <label class="field agent-file-field">
258
- <span>${t(`mcpView.add.json.configLabel`)}</span>
259
- <textarea
260
- class="agent-file-textarea"
261
- .value=${n.draftConfig}
262
- @input=${e=>n.onDraftConfigChange(e.target.value)}
263
- placeholder=${c}
264
- spellcheck="false"
265
- ></textarea>
266
- </label>
267
- <div class="muted" style="font-size: 13px; margin-top: 6px;">
268
- ${t(`mcpView.add.json.configHint`)}
269
- </div>
270
- <div style="display: flex; gap: 8px; margin-top: 10px;">
271
- <button
272
- class="btn btn--sm primary"
273
- ?disabled=${!r||!n.connected}
274
- @click=${n.onSave}
275
- >
276
- ${n.busy?t(`common.loading`):n.draftName&&n.servers&&Object.prototype.hasOwnProperty.call(n.servers,n.draftName)?t(`mcpView.add.json.update`):t(`mcpView.add.json.save`)}
277
- </button>
278
- </div>
279
- </div>
280
- `}function _(n){let r=n.oauthFlow;return r.error?e`<div class="callout danger" style="margin-top: 12px;">
281
- ${t(`mcpView.oauth.failed`,{message:r.error})}
282
- </div>`:e`<div class="callout info" style="margin-top: 12px;">
283
- <div style="display: flex; align-items: center; gap: 12px;">
284
- <div>
285
- <div style="font-weight: 600;">${t(`mcpView.oauth.title`,{name:r.name})}</div>
286
- <div class="muted" style="font-size: 13px;">${t(`mcpView.oauth.subtitle`)}</div>
287
- </div>
288
- <div style="display: flex; gap: 8px; margin-left: auto;">
289
- <a
290
- class="btn btn--sm primary"
291
- href=${r.authorizeUrl}
292
- target="_blank"
293
- rel="noopener noreferrer"
294
- >
295
- ${t(`mcpView.oauth.open`)}
296
- </a>
297
- <button class="btn btn--sm ghost" @click=${n.onOAuthCancel}>
298
- ${t(`mcpView.oauth.waiting`)}
299
- </button>
300
- </div>
301
- </div>
302
- </div>`}function v(r,i,c){let l=c.oauthStatus[r],u=c.testStatus[r],d=o(i),f=d||(l?.requiresAuth??!1);return e`
303
- <div
304
- class="list-item"
305
- style="display: flex; align-items: center; justify-content: space-between; gap: 12px;"
306
- >
307
- <div style="min-width: 0; flex: 1;">
308
- <div
309
- style="font-weight: 600; display: flex; align-items: center; gap: 8px; flex-wrap: wrap;"
310
- >
311
- <span>${r}</span>
312
- ${s(l,d)}
313
- </div>
314
- <div class="muted mono" style="overflow-wrap: anywhere;">${a(i)}</div>
315
- ${u?e`<div
316
- class="muted"
317
- style="font-size: 12px; margin-top: 2px; color: ${u.ok?`var(--ok, inherit)`:`var(--danger, inherit)`};"
318
- >
319
- ${u.ok?`✓`:`✗`} ${u.message}
320
- </div>`:n}
321
- </div>
322
- <div
323
- style="display: flex; gap: 6px; flex-shrink: 0; flex-wrap: wrap; justify-content: flex-end;"
324
- >
325
- ${f?l?.connected?e`
326
- <button
327
- class="btn btn--sm"
328
- ?disabled=${c.busy}
329
- @click=${()=>c.onOAuthConnect(r)}
330
- >
331
- ${t(`mcpView.list.reconnect`)}
332
- </button>
333
- <button
334
- class="btn btn--sm ghost"
335
- ?disabled=${c.busy}
336
- @click=${()=>c.onOAuthDisconnect(r)}
337
- >
338
- ${t(`mcpView.list.disconnect`)}
339
- </button>
340
- `:e`
341
- <button
342
- class="btn btn--sm primary"
343
- ?disabled=${c.busy||!!c.oauthFlow}
344
- @click=${()=>c.onOAuthConnect(r)}
345
- >
346
- ${t(`mcpView.list.connect`)}
347
- </button>
348
- `:n}
349
- <button
350
- class="btn btn--sm ghost"
351
- ?disabled=${c.busy}
352
- @click=${()=>c.onTest(r)}
353
- >
354
- ${t(`mcpView.list.test`)}
355
- </button>
356
- <button
357
- class="btn btn--sm ghost"
358
- ?disabled=${c.busy}
359
- @click=${()=>c.onEdit(r)}
360
- >
361
- ${t(`mcpView.list.edit`)}
362
- </button>
363
- <button
364
- class="btn btn--sm ghost"
365
- ?disabled=${c.busy}
366
- @click=${()=>c.onDelete(r)}
367
- >
368
- ${t(`mcpView.list.delete`)}
369
- </button>
370
- </div>
371
- </div>
372
- `}export{l as renderMcp};
373
- //# sourceMappingURL=mcp-CfklVyVu.js.map
@@ -1,273 +0,0 @@
1
- import{f as e,r as t,u as n}from"./i18n-Dr_ijwId.js";import{t as r}from"./string-coerce-LCfkQHEZ.js";import{t as i}from"./format-BOO4MheD.js";import{y as a}from"./index-CYO6b4V3.js";function o(e){!(e instanceof HTMLDialogElement)||e.open||queueMicrotask(()=>{!e.isConnected||e.open||e.showModal()})}var s=[{id:`all`,label:`All`},{id:`loaded`,label:`Loaded`},{id:`disabled`,label:`Disabled`},{id:`error`,label:`Error`},{id:`managed`,label:`Managed`}];function c(e,t){switch(t){case`all`:return!0;case`loaded`:return e.status===`loaded`;case`disabled`:return e.status===`disabled`;case`error`:return e.status===`error`;case`managed`:return!!e.install}return!1}function l(e){return e.status===`error`?`warn`:e.status===`loaded`?`ok`:`muted`}function u(e){let t=[];return e.channelIds.length>0&&t.push(`${e.channelIds.length} channel${e.channelIds.length===1?``:`s`}`),e.providerIds.length>0&&t.push(`${e.providerIds.length} provider${e.providerIds.length===1?``:`s`}`),e.toolNames.length>0&&t.push(`${e.toolNames.length} tool${e.toolNames.length===1?``:`s`}`),e.commands.length>0&&t.push(`${e.commands.length} command${e.commands.length===1?``:`s`}`),e.agentHarnessIds.length>0&&t.push(`${e.agentHarnessIds.length} harness${e.agentHarnessIds.length===1?``:`es`}`),e.httpRoutes>0&&t.push(`${e.httpRoutes} HTTP route${e.httpRoutes===1?``:`s`}`),t.length>0?t.join(`, `):`No advertised capabilities`}function d(e){let t=e.install;return t?t.source===`clawhub`?t.clawhubPackage?`ClawHub: ${t.clawhubPackage}`:`ClawHub`:t.source===`marketplace`?t.marketplaceName?`Marketplace: ${t.marketplaceName}`:`Marketplace`:t.spec??t.source:e.origin===`bundled`?`Bundled`:e.source}function f(i){let a=i.report?.plugins??[],o={all:a.length,loaded:0,disabled:0,error:0,managed:0};for(let e of a)o[e.status]++,e.install&&o.managed++;let l=i.statusFilter===`all`?a:a.filter(e=>c(e,i.statusFilter)),u=r(i.filter),f=u?l.filter(e=>r([e.name,e.id,e.description,e.source,d(e)].join(` `)).includes(u)):l,m=i.detailKey?a.find(e=>e.id===i.detailKey)??null:null;return e`
2
- <section class="card">
3
- <div class="row" style="justify-content: space-between;">
4
- <div>
5
- <div class="card-title">Plugins</div>
6
- <div class="card-sub">Install, disable, and remove Gateway plugins.</div>
7
- </div>
8
- <button
9
- class="btn"
10
- ?disabled=${i.loading||!i.connected}
11
- @click=${i.onRefresh}
12
- >
13
- ${i.loading?t(`common.loading`):t(`common.refresh`)}
14
- </button>
15
- </div>
16
-
17
- <div class="agent-tabs" style="margin-top: 14px;">
18
- ${s.map(t=>e`
19
- <button
20
- class="agent-tab ${i.statusFilter===t.id?`active`:``}"
21
- @click=${()=>i.onStatusFilterChange(t.id)}
22
- >
23
- ${t.label}<span class="agent-tab-count">${o[t.id]}</span>
24
- </button>
25
- `)}
26
- </div>
27
-
28
- <div
29
- class="filters"
30
- style="display: flex; align-items: center; gap: 12px; flex-wrap: wrap; margin-top: 12px;"
31
- >
32
- <label class="field" style="flex: 1; min-width: 180px;">
33
- <input
34
- .value=${i.filter}
35
- @input=${e=>i.onFilterChange(e.target.value)}
36
- placeholder="Filter installed plugins"
37
- autocomplete="off"
38
- name="plugins-filter"
39
- />
40
- </label>
41
- <div class="muted">${f.length} shown</div>
42
- </div>
43
-
44
- ${p(i)}
45
- ${i.error?e`<div class="callout danger" style="margin-top: 12px;">${i.error}</div>`:n}
46
- ${i.report?.diagnostics?.length?e`
47
- <div class="callout" style="margin-top: 12px;">
48
- ${i.report.diagnostics.length} plugin
49
- diagnostic${i.report.diagnostics.length===1?``:`s`}.
50
- </div>
51
- `:n}
52
- ${f.length===0?e`
53
- <div class="muted" style="margin-top: 16px">
54
- ${!i.connected&&!i.report?`Not connected to gateway.`:`No plugins found.`}
55
- </div>
56
- `:e`<div class="list skills-grid" style="margin-top: 16px;">
57
- ${f.map(e=>h(e,i))}
58
- </div>`}
59
- </section>
60
-
61
- ${m?g(m,i):n}
62
- ${i.clawhubDetailName?_(i):n}
63
- `}function p(t){return e`
64
- <div style="margin-top: 16px; border-top: 1px solid var(--border); padding-top: 16px;">
65
- <div style="display: flex; align-items: center; gap: 12px; margin-bottom: 12px;">
66
- <div style="font-weight: 600;">ClawHub</div>
67
- <div class="muted" style="font-size: 13px;">Search and install plugins from clawhub.ai</div>
68
- </div>
69
- <div style="display: flex; align-items: center; gap: 12px; flex-wrap: wrap;">
70
- <label class="field" style="flex: 1; min-width: 180px;">
71
- <input
72
- .value=${t.clawhubQuery}
73
- @input=${e=>t.onClawHubQueryChange(e.target.value)}
74
- placeholder="Search ClawHub plugins..."
75
- autocomplete="off"
76
- name="plugin-clawhub-search"
77
- />
78
- </label>
79
- ${t.clawhubSearchLoading?e`<span class="muted">Searching...</span>`:n}
80
- </div>
81
- ${t.clawhubSearchError?e`<div class="callout danger" style="margin-top: 8px;">
82
- ${t.clawhubSearchError}
83
- </div>`:n}
84
- ${t.clawhubInstallMessage?e`<div
85
- class="callout ${t.clawhubInstallMessage.kind===`error`?`danger`:`success`}"
86
- style="margin-top: 8px;"
87
- >
88
- ${t.clawhubInstallMessage.text}
89
- </div>`:n}
90
- ${m(t)}
91
- </div>
92
- `}function m(t){let r=t.clawhubResults;return r?r.length===0?e`<div class="muted" style="margin-top: 8px;">No plugins found on ClawHub.</div>`:e`
93
- <div class="list" style="margin-top: 8px;">
94
- ${r.map(({package:r})=>{let a=t.report?.plugins.some(e=>e.install?.clawhubPackage===r.name||e.install?.spec===`clawhub:${r.name}`||e.id===r.runtimeId);return e`
95
- <div
96
- class="list-item list-item-clickable"
97
- @click=${()=>t.onClawHubDetailOpen(r.name)}
98
- >
99
- <div class="list-main">
100
- <div class="list-title">${r.displayName}</div>
101
- <div class="list-sub">${r.summary?i(r.summary,130):r.name}</div>
102
- </div>
103
- <div class="list-meta" style="display: flex; align-items: center; gap: 8px;">
104
- ${r.latestVersion?e`<span class="muted" style="font-size: 12px;">v${r.latestVersion}</span>`:n}
105
- ${r.channel===`official`?e`<span class="chip chip-ok">Official</span>`:e`<span class="chip">Community</span>`}
106
- <button
107
- class="btn btn--sm"
108
- ?disabled=${t.clawhubInstallName!==null||a}
109
- @click=${e=>{e.stopPropagation(),t.onClawHubInstall(r.name)}}
110
- >
111
- ${a?`Installed`:t.clawhubInstallName===r.name?`Installing...`:`Install`}
112
- </button>
113
- </div>
114
- </div>
115
- `})}
116
- </div>
117
- `:n}function h(t,r){let a=r.busyKey===t.id,o=t.enabled&&t.status!==`disabled`;return e`
118
- <div class="list-item list-item-clickable" @click=${()=>r.onDetailOpen(t.id)}>
119
- <div class="list-main">
120
- <div class="list-title" style="display: flex; align-items: center; gap: 8px;">
121
- <span class="statusDot ${l(t)}"></span>
122
- <span>${t.name}</span>
123
- ${t.id===t.name?n:e`<span class="muted" style="font-size: 12px;">${t.id}</span>`}
124
- </div>
125
- <div class="list-sub">
126
- ${t.description?i(t.description,140):u(t)}
127
- </div>
128
- </div>
129
- <div
130
- class="list-meta"
131
- style="display: flex; align-items: center; justify-content: flex-end; gap: 10px;"
132
- >
133
- <span class="muted" style="font-size: 12px;">${d(t)}</span>
134
- <label class="skill-toggle-wrap" @click=${e=>e.stopPropagation()}>
135
- <input
136
- type="checkbox"
137
- class="skill-toggle"
138
- .checked=${o}
139
- ?disabled=${a}
140
- @change=${e=>{e.stopPropagation(),r.onToggle(t.id,e.target.checked)}}
141
- />
142
- </label>
143
- </div>
144
- </div>
145
- `}function g(t,r){let i=r.busyKey===t.id,s=r.messages[t.id]??null,c=t.enabled&&t.status!==`disabled`,f=!!t.install;return e`
146
- <dialog
147
- class="md-preview-dialog"
148
- ${a(o)}
149
- @click=${e=>{let t=e.currentTarget;e.target===t&&t.close()}}
150
- @close=${r.onDetailClose}
151
- >
152
- <div class="md-preview-dialog__panel">
153
- <div class="md-preview-dialog__header">
154
- <div
155
- class="md-preview-dialog__title"
156
- style="display: flex; align-items: center; gap: 8px;"
157
- >
158
- <span class="statusDot ${l(t)}"></span>
159
- <span>${t.name}</span>
160
- </div>
161
- <button
162
- class="btn btn--sm"
163
- @click=${e=>{e.currentTarget.closest(`dialog`)?.close()}}
164
- >
165
- Close
166
- </button>
167
- </div>
168
- <div class="md-preview-dialog__body" style="display: grid; gap: 16px;">
169
- <div>
170
- <div style="font-size: 14px; line-height: 1.5; color: var(--text);">
171
- ${t.description??u(t)}
172
- </div>
173
- <div style="display: flex; gap: 8px; flex-wrap: wrap; margin-top: 10px;">
174
- <span class="chip">${t.status}</span>
175
- <span class="chip">${t.format??`genesis`}</span>
176
- ${t.version?e`<span class="chip">v${t.version}</span>`:n}
177
- ${t.install?e`<span class="chip chip-ok">Managed</span>`:n}
178
- </div>
179
- </div>
180
-
181
- ${t.error?e`<div class="callout danger">${t.error}</div>`:n}
182
- ${s?e`<div class="callout ${s.kind===`error`?`danger`:`success`}">
183
- ${s.message}
184
- </div>`:n}
185
-
186
- <div style="display: flex; align-items: center; gap: 12px; flex-wrap: wrap;">
187
- <label class="skill-toggle-wrap">
188
- <input
189
- type="checkbox"
190
- class="skill-toggle"
191
- .checked=${c}
192
- ?disabled=${i}
193
- @change=${e=>r.onToggle(t.id,e.target.checked)}
194
- />
195
- </label>
196
- <span style="font-size: 13px; font-weight: 500;">
197
- ${c?`Enabled`:`Disabled`}
198
- </span>
199
- ${f?e`<button
200
- class="btn danger"
201
- ?disabled=${i}
202
- @click=${()=>{confirm(`Uninstall plugin "${t.id}"?`)&&r.onUninstall(t.id)}}
203
- >
204
- ${i?`Removing...`:`Uninstall`}
205
- </button>`:n}
206
- </div>
207
-
208
- <div
209
- style="border-top: 1px solid var(--border); padding-top: 12px; display: grid; gap: 6px; font-size: 12px; color: var(--muted);"
210
- >
211
- <div><span style="font-weight: 600;">ID:</span> ${t.id}</div>
212
- <div><span style="font-weight: 600;">Source:</span> ${t.source}</div>
213
- <div><span style="font-weight: 600;">Install:</span> ${d(t)}</div>
214
- ${t.rootDir?e`<div style="font-family: var(--mono); word-break: break-all;">
215
- ${t.rootDir}
216
- </div>`:n}
217
- <div>
218
- <span style="font-weight: 600;">Capabilities:</span> ${u(t)}
219
- </div>
220
- </div>
221
- </div>
222
- </div>
223
- </dialog>
224
- `}function _(r){let i=r.clawhubDetail,s=i?.package??null;return e`
225
- <dialog
226
- class="md-preview-dialog"
227
- ${a(o)}
228
- @click=${e=>{let t=e.currentTarget;e.target===t&&t.close()}}
229
- @close=${r.onClawHubDetailClose}
230
- >
231
- <div class="md-preview-dialog__panel">
232
- <div class="md-preview-dialog__header">
233
- <div class="md-preview-dialog__title">${s?.displayName??r.clawhubDetailName}</div>
234
- <button
235
- class="btn btn--sm"
236
- @click=${e=>{e.currentTarget.closest(`dialog`)?.close()}}
237
- >
238
- Close
239
- </button>
240
- </div>
241
- <div class="md-preview-dialog__body" style="display: grid; gap: 16px;">
242
- ${r.clawhubDetailLoading?e`<div class="muted">${t(`common.loading`)}</div>`:r.clawhubDetailError?e`<div class="callout danger">${r.clawhubDetailError}</div>`:s?e`
243
- <div style="font-size: 14px; line-height: 1.5;">${s.summary??``}</div>
244
- ${i?.owner?.displayName?e`<div class="muted" style="font-size: 13px;">
245
- By
246
- ${i.owner.displayName}${i.owner.handle?e` (@${i.owner.handle})`:n}
247
- </div>`:n}
248
- <div style="display: flex; gap: 8px; flex-wrap: wrap;">
249
- <span class="chip">${s.family}</span>
250
- <span class="chip ${s.channel===`official`?`chip-ok`:``}">
251
- ${s.channel}
252
- </span>
253
- ${s.latestVersion?e`<span class="chip">v${s.latestVersion}</span>`:n}
254
- ${s.verificationTier?e`<span class="chip">${s.verificationTier}</span>`:n}
255
- </div>
256
- ${s.compatibility?e`<div class="muted" style="font-size: 13px;">
257
- Compatibility:
258
- ${[s.compatibility.pluginApiRange?`plugin API ${s.compatibility.pluginApiRange}`:``,s.compatibility.minGatewayVersion?`min gateway ${s.compatibility.minGatewayVersion}`:``].filter(Boolean).join(`, `)}
259
- </div>`:n}
260
- ${s.verification?.summary?e`<div class="callout">${s.verification.summary}</div>`:n}
261
- <button
262
- class="btn primary"
263
- ?disabled=${r.clawhubInstallName!==null}
264
- @click=${()=>{r.clawhubDetailName&&r.onClawHubInstall(r.clawhubDetailName)}}
265
- >
266
- ${r.clawhubInstallName===r.clawhubDetailName?`Installing...`:`Install ${s.displayName}`}
267
- </button>
268
- `:e`<div class="muted">Plugin not found.</div>`}
269
- </div>
270
- </div>
271
- </dialog>
272
- `}export{f as renderPlugins};
273
- //# sourceMappingURL=plugins-CaVRS7jh.js.map