@pixelzx/genesis 2026.6.21 → 2026.6.22

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 (73) hide show
  1. package/CHANGELOG.md +10 -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-DPhQ-gYY.js} +2 -2
  6. package/dist/{command-registry-DMgJTE4K.js → command-registry-DtvwURJ_.js} +2 -2
  7. package/dist/{command-registry-core-nZQMcxbV.js → command-registry-core-DllgASdD.js} +2 -2
  8. package/dist/{completion-cli-BCc1OonY.js → completion-cli-CMRi4kQZ.js} +2 -2
  9. package/dist/{config-cli-BZaYp_Ui.js → config-cli-ByTCIigq.js} +1 -1
  10. package/dist/control-ui/assets/{agents-BoHSZPvB.js → agents-QDr5B3Ho.js} +393 -324
  11. package/dist/control-ui/assets/canvas-DcQV5mjQ.js +274 -0
  12. package/dist/control-ui/assets/channels-DTjwzddp.js +140 -0
  13. package/dist/control-ui/assets/cron-BL9vNTgH.js +78 -0
  14. package/dist/control-ui/assets/{de-ChvNzaWx.js → de-hbyceFeJ.js} +1 -1
  15. package/dist/control-ui/assets/{debug-CuUlTIAC.js → debug-BjvJPprv.js} +8 -8
  16. package/dist/control-ui/assets/{es-CrSDgcQ5.js → es-1Cx1cu-Y.js} +1 -1
  17. package/dist/control-ui/assets/{fr-BRwXxDjE.js → fr-VgMPipri.js} +1 -1
  18. package/dist/control-ui/assets/{i18n-Dr_ijwId.js → i18n-DLwqUqi0.js} +2 -2
  19. package/dist/control-ui/assets/{id-D6SwOJ8N.js → id-BjXuhykW.js} +1 -1
  20. package/dist/control-ui/assets/index-BTDvMe6P.css +1 -0
  21. package/dist/control-ui/assets/index-Chv-rDKB.js +5900 -0
  22. package/dist/control-ui/assets/{instances-BIg5DC8B.js → instances-M2ru9deN.js} +19 -19
  23. package/dist/control-ui/assets/{ja-JP-COtC4IfH.js → ja-JP-DWb-BMAl.js} +1 -1
  24. package/dist/control-ui/assets/{ko-BzeSxEM4.js → ko-Dp3UE5m2.js} +1 -1
  25. package/dist/control-ui/assets/{logs-BYrqUHTd.js → logs-l_Xtj11_.js} +6 -6
  26. package/dist/control-ui/assets/mcp-CCow5u67.js +380 -0
  27. package/dist/control-ui/assets/{memory-Dxu2hVW_.js → memory-DEvlXa9C.js} +11 -11
  28. package/dist/control-ui/assets/{models-DmHuwChH.js → models-Tc34Yl09.js} +26 -26
  29. package/dist/control-ui/assets/{nodes-BAHmvdL1.js → nodes-CHIr0hLe.js} +89 -89
  30. package/dist/control-ui/assets/{pl-BFGaZC1a.js → pl-UrfXg6LL.js} +1 -1
  31. package/dist/control-ui/assets/plugins-CRSFM6pi.js +259 -0
  32. package/dist/control-ui/assets/presenter-DQKXVTz4.js +2 -0
  33. package/dist/control-ui/assets/{preview-yS9kUAt_.js → preview-DP8t6eAW.js} +1 -1
  34. package/dist/control-ui/assets/{pt-BR-B2QYSEq3.js → pt-BR-Cqsb5BcT.js} +1 -1
  35. package/dist/control-ui/assets/sessions-Xg8c67jk.js +56 -0
  36. package/dist/control-ui/assets/skills-CB5pgqaj.js +294 -0
  37. package/dist/control-ui/assets/skills-shared-DoedL_zw.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-C_ySxHYg.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/{gateway-cli-CPCS4XTI.js → gateway-cli-BNFp7cLD.js} +1 -1
  47. package/dist/index.js +1 -1
  48. package/dist/plugin-sdk/.boundary-entry-shims.stamp +1 -1
  49. package/dist/postinstall-inventory.json +50 -51
  50. package/dist/{program-D6Z9HYd5.js → program-C3s7d86C.js} +1 -1
  51. package/dist/{register.subclis-DPpkGluG.js → register.subclis-C2UfM0nV.js} +1 -1
  52. package/dist/{register.subclis-CUxlv4Y7.js → register.subclis-ClL1mC0C.js} +2 -2
  53. package/dist/{register.subclis-core-hOQqRXcI.js → register.subclis-core-x3Cm5RAM.js} +1 -1
  54. package/dist/{run-main-By1VNkmf.js → run-main-Cg3U0WGv.js} +4 -4
  55. package/dist/{runtime-schema-BR36tJn9.js → runtime-schema-m8uk8t3n.js} +1 -1
  56. package/dist/{server-C7yMa7AQ.js → server-Cdq-naBB.js} +1 -1
  57. package/dist/{server-plugin-bootstrap-C2EOYVsD.js → server-plugin-bootstrap-CM8EErso.js} +1 -1
  58. package/dist/{server-plugin-bootstrap-CWHfoBJK.js → server-plugin-bootstrap-DQo6bnks.js} +1 -1
  59. package/dist/{server.impl-CNE0SpyS.js → server.impl-CZEASk_e.js} +2 -2
  60. package/package.json +1 -1
  61. package/dist/control-ui/assets/canvas-DkuTKNbN.js +0 -269
  62. package/dist/control-ui/assets/channel-config-extras-BmGwfDPL.js +0 -2
  63. package/dist/control-ui/assets/channels-v0P0irqY.js +0 -463
  64. package/dist/control-ui/assets/cron-DD6CAXar.js +0 -933
  65. package/dist/control-ui/assets/format-BOO4MheD.js +0 -9
  66. package/dist/control-ui/assets/index-CYO6b4V3.js +0 -6314
  67. package/dist/control-ui/assets/index-a2bnKy1Z.css +0 -1
  68. package/dist/control-ui/assets/mcp-CfklVyVu.js +0 -373
  69. package/dist/control-ui/assets/plugins-CaVRS7jh.js +0 -273
  70. package/dist/control-ui/assets/sessions-TU5OCoQU.js +0 -306
  71. package/dist/control-ui/assets/skills-CC23LxGO.js +0 -323
  72. package/dist/control-ui/assets/skills-shared-BHZ4ntcf.js +0 -11
  73. package/dist/control-ui/assets/wallet-DggW1ZUc.js +0 -285
@@ -1,306 +0,0 @@
1
- import{f as e,r as t,u as n}from"./i18n-Dr_ijwId.js";import{r,t as i}from"./string-coerce-LCfkQHEZ.js";import{u as a}from"./format-BOO4MheD.js";import{I as o,L as s,R as c,g as l,s as u}from"./index-CYO6b4V3.js";var d=[`off`,`minimal`,`low`,`medium`,`high`],f=[{value:``,label:`inherit`},{value:`off`,label:`off (explicit)`},{value:`on`,label:`on`},{value:`full`,label:`full`}],p=[{value:``,label:`inherit`},{value:`on`,label:`on`},{value:`off`,label:`off`}],m=[``,`off`,`on`,`stream`],h=[10,25,50,100];function g(e){return c(e)??i(e)}function _(e){return[{value:``,label:`inherit`},...(e.thinkingLevels?.length?e.thinkingLevels:(e.thinkingOptions?.length?e.thinkingOptions:d).map(e=>({id:g(e),label:e}))).map(e=>({value:g(e.id),label:e.label}))]}function v(e,t){return!t||e.includes(t)?[...e]:[...e,t]}function y(e,t){return!t||e.some(e=>e.value===t)?[...e]:[...e,{value:t,label:`${t} (custom)`}]}function b(e){return e||null}function x(e,t){let n=i(t);return n?e.filter(e=>{let t=i(e.key),r=i(e.label),a=i(e.kind),o=i(e.displayName);return t.includes(n)||r.includes(n)||a.includes(n)||o.includes(n)}):e}function S(e,t,n){let r=n===`asc`?1:-1;return s(e,(e,n)=>{let i=0;switch(t){case`key`:i=(e.key??``).localeCompare(n.key??``);break;case`kind`:i=(e.kind??``).localeCompare(n.kind??``);break;case`updated`:i=(e.updatedAt??0)-(n.updatedAt??0);break;case`tokens`:i=(e.totalTokens??e.inputTokens??e.outputTokens??0)-(n.totalTokens??n.inputTokens??n.outputTokens??0);break}return i*r})}function C(e,t,n){let r=t*n;return e.slice(r,r+n)}function w(e){switch(e){case`manual`:return`manual`;case`auto-threshold`:return`auto-threshold`;case`overflow-retry`:return`overflow retry`;case`timeout-retry`:return`timeout retry`;default:return e}}function T(e){return typeof e.tokensBefore==`number`&&typeof e.tokensAfter==`number`&&Number.isFinite(e.tokensBefore)&&Number.isFinite(e.tokensAfter)?`${e.tokensBefore.toLocaleString()} → ${e.tokensAfter.toLocaleString()} tokens`:typeof e.tokensBefore==`number`&&Number.isFinite(e.tokensBefore)?`${e.tokensBefore.toLocaleString()} tokens before`:`token delta unavailable`}function E(r){let i=S(x(r.result?.sessions??[],r.searchQuery),r.sortColumn,r.sortDir),a=i.length,o=Math.max(1,Math.ceil(a/r.pageSize)),s=Math.min(r.page,o-1),c=C(i,s,r.pageSize),u=(t,n,i=``)=>{let a=r.sortColumn===t,o=a&&r.sortDir===`asc`?`desc`:`asc`;return e`
2
- <th
3
- class=${i}
4
- data-sortable
5
- data-sort-dir=${a?r.sortDir:``}
6
- @click=${()=>r.onSortChange(t,a?o:`desc`)}
7
- >
8
- ${n}
9
- <span class="data-table-sort-icon">${l.arrowUpDown}</span>
10
- </th>
11
- `};return e`
12
- <section class="card">
13
- <div class="row" style="justify-content: space-between; margin-bottom: 12px;">
14
- <div>
15
- <div class="card-title">Sessions</div>
16
- <div class="card-sub">
17
- ${r.result?`Store: ${r.result.path}`:`Active session keys and per-session overrides.`}
18
- </div>
19
- </div>
20
- <button class="btn" ?disabled=${r.loading} @click=${r.onRefresh}>
21
- ${r.loading?t(`common.loading`):t(`common.refresh`)}
22
- </button>
23
- </div>
24
-
25
- <div class="filters" style="margin-bottom: 12px;">
26
- <label class="field-inline">
27
- <span>Active</span>
28
- <input
29
- style="width: 72px;"
30
- placeholder="min"
31
- .value=${r.activeMinutes}
32
- @input=${e=>r.onFiltersChange({activeMinutes:e.target.value,limit:r.limit,includeGlobal:r.includeGlobal,includeUnknown:r.includeUnknown})}
33
- />
34
- </label>
35
- <label class="field-inline">
36
- <span>Limit</span>
37
- <input
38
- style="width: 64px;"
39
- .value=${r.limit}
40
- @input=${e=>r.onFiltersChange({activeMinutes:r.activeMinutes,limit:e.target.value,includeGlobal:r.includeGlobal,includeUnknown:r.includeUnknown})}
41
- />
42
- </label>
43
- <label class="field-inline checkbox">
44
- <input
45
- type="checkbox"
46
- .checked=${r.includeGlobal}
47
- @change=${e=>r.onFiltersChange({activeMinutes:r.activeMinutes,limit:r.limit,includeGlobal:e.target.checked,includeUnknown:r.includeUnknown})}
48
- />
49
- <span>Global</span>
50
- </label>
51
- <label class="field-inline checkbox">
52
- <input
53
- type="checkbox"
54
- .checked=${r.includeUnknown}
55
- @change=${e=>r.onFiltersChange({activeMinutes:r.activeMinutes,limit:r.limit,includeGlobal:r.includeGlobal,includeUnknown:e.target.checked})}
56
- />
57
- <span>Unknown</span>
58
- </label>
59
- </div>
60
-
61
- ${r.error?e`<div class="callout danger" style="margin-bottom: 12px;">${r.error}</div>`:n}
62
-
63
- <div class="data-table-wrapper">
64
- <div class="data-table-toolbar">
65
- <div class="data-table-search">
66
- <input
67
- type="text"
68
- placeholder="Filter by key, label, kind…"
69
- .value=${r.searchQuery}
70
- @input=${e=>r.onSearchChange(e.target.value)}
71
- />
72
- </div>
73
- </div>
74
-
75
- ${r.selectedKeys.size>0?e`
76
- <div class="data-table-bulk-bar">
77
- <span>${r.selectedKeys.size} selected</span>
78
- <button class="btn btn--sm" @click=${r.onDeselectAll}>
79
- ${t(`common.unselect`)}
80
- </button>
81
- <button
82
- class="btn btn--sm danger"
83
- ?disabled=${r.loading}
84
- @click=${r.onDeleteSelected}
85
- >
86
- ${l.trash} Delete
87
- </button>
88
- </div>
89
- `:n}
90
-
91
- <div class="data-table-container">
92
- <table class="data-table">
93
- <thead>
94
- <tr>
95
- <th class="data-table-checkbox-col">
96
- ${c.length>0?e`<input
97
- type="checkbox"
98
- .checked=${c.length>0&&c.every(e=>r.selectedKeys.has(e.key))}
99
- .indeterminate=${c.some(e=>r.selectedKeys.has(e.key))&&!c.every(e=>r.selectedKeys.has(e.key))}
100
- @change=${()=>{c.every(e=>r.selectedKeys.has(e.key))?r.onDeselectPage(c.map(e=>e.key)):r.onSelectPage(c.map(e=>e.key))}}
101
- aria-label="Select all on page"
102
- />`:n}
103
- </th>
104
- ${u(`key`,`Key`,`data-table-key-col`)}
105
- <th>Label</th>
106
- ${u(`kind`,`Kind`)} ${u(`updated`,`Updated`)}
107
- ${u(`tokens`,`Tokens`)}
108
- <th>Compaction</th>
109
- <th>Thinking</th>
110
- <th>Fast</th>
111
- <th>Verbose</th>
112
- <th>Reasoning</th>
113
- </tr>
114
- </thead>
115
- <tbody>
116
- ${c.length===0?e`
117
- <tr>
118
- <td
119
- colspan="11"
120
- style="text-align: center; padding: 48px 16px; color: var(--muted)"
121
- >
122
- No sessions found.
123
- </td>
124
- </tr>
125
- `:c.flatMap(e=>D(e,r))}
126
- </tbody>
127
- </table>
128
- </div>
129
-
130
- ${a>0?e`
131
- <div class="data-table-pagination">
132
- <div class="data-table-pagination__info">
133
- ${s*r.pageSize+1}-${Math.min((s+1)*r.pageSize,a)}
134
- of ${a} row${a===1?``:`s`}
135
- </div>
136
- <div class="data-table-pagination__controls">
137
- <select
138
- style="height: 32px; padding: 0 8px; font-size: 13px; border-radius: var(--radius-md); border: 1px solid var(--border); background: var(--card);"
139
- .value=${String(r.pageSize)}
140
- @change=${e=>r.onPageSizeChange(Number(e.target.value))}
141
- >
142
- ${h.map(t=>e`<option value=${t}>${t} per page</option>`)}
143
- </select>
144
- <button ?disabled=${s<=0} @click=${()=>r.onPageChange(s-1)}>
145
- Previous
146
- </button>
147
- <button
148
- ?disabled=${s>=o-1}
149
- @click=${()=>r.onPageChange(s+1)}
150
- >
151
- Next
152
- </button>
153
- </div>
154
- </div>
155
- `:n}
156
- </div>
157
- </section>
158
- `}function D(i,s){let c=i.updatedAt?a(i.updatedAt):t(`common.na`),l=i.thinkingLevel??``,d=l?g(l):``,h=y(_(i),d),x=i.fastMode===!0?`on`:i.fastMode===!1?`off`:``,S=y(p,x),C=i.verboseLevel??``,E=y(f,C),D=i.reasoningLevel??``,O=v(m,D),k=i.latestCompactionCheckpoint,A=i.compactionCheckpointCount??0,j=s.expandedCheckpointKey===i.key,M=s.checkpointItemsByKey[i.key]??[],N=s.checkpointErrorByKey[i.key],P=r(i.displayName)??null,F=r(i.label)??``,I=!!(P&&P!==i.key&&P!==F),L=i.kind!==`global`,R=L?`${o(`chat`,s.basePath)}?session=${encodeURIComponent(i.key)}`:null,z=i.kind===`direct`?`data-table-badge--direct`:i.kind===`group`?`data-table-badge--group`:i.kind===`global`?`data-table-badge--global`:`data-table-badge--unknown`;return[e`<tr>
159
- <td class="data-table-checkbox-col">
160
- <input
161
- type="checkbox"
162
- .checked=${s.selectedKeys.has(i.key)}
163
- @change=${()=>s.onToggleSelect(i.key)}
164
- aria-label="Select session"
165
- />
166
- </td>
167
- <td class="data-table-key-col">
168
- <div class="mono session-key-cell">
169
- ${L?e`<a
170
- href=${R}
171
- class="session-link"
172
- @click=${e=>{e.defaultPrevented||e.button!==0||e.metaKey||e.ctrlKey||e.shiftKey||e.altKey||s.onNavigateToChat&&(e.preventDefault(),s.onNavigateToChat(i.key))}}
173
- >${i.key}</a
174
- >`:i.key}
175
- ${I?e`<span class="muted session-key-display-name">${P}</span>`:n}
176
- </div>
177
- </td>
178
- <td>
179
- <input
180
- .value=${i.label??``}
181
- ?disabled=${s.loading}
182
- placeholder="(optional)"
183
- style="width: 100%; max-width: 140px; padding: 6px 10px; font-size: 13px; border: 1px solid var(--border); border-radius: var(--radius-sm);"
184
- @change=${e=>{let t=r(e.target.value)??null;s.onPatch(i.key,{label:t})}}
185
- />
186
- </td>
187
- <td>
188
- <span class="data-table-badge ${z}">${i.kind}</span>
189
- </td>
190
- <td>${c}</td>
191
- <td>${u(i)}</td>
192
- <td>
193
- <div style="display: grid; gap: 6px;">
194
- <span class="muted" style="font-size: 12px;">
195
- ${A>0?`${A} checkpoint${A===1?``:`s`}`:`none`}
196
- </span>
197
- ${k?e`
198
- <span style="font-size: 12px;">
199
- ${w(k.reason)} ·
200
- ${a(k.createdAt)}
201
- </span>
202
- `:n}
203
- <button
204
- class="btn btn--sm"
205
- ?disabled=${s.checkpointLoadingKey===i.key}
206
- @click=${()=>s.onToggleCheckpointDetails(i.key)}
207
- >
208
- ${j?`Hide checkpoints`:`Show checkpoints`}
209
- </button>
210
- </div>
211
- </td>
212
- <td>
213
- <select
214
- ?disabled=${s.loading}
215
- style="padding: 6px 10px; font-size: 13px; border: 1px solid var(--border); border-radius: var(--radius-sm); min-width: 90px;"
216
- @change=${e=>{let t=e.target.value;s.onPatch(i.key,{thinkingLevel:b(t)})}}
217
- >
218
- ${h.map(t=>e`<option value=${t.value} ?selected=${d===t.value}>
219
- ${t.label}
220
- </option>`)}
221
- </select>
222
- </td>
223
- <td>
224
- <select
225
- ?disabled=${s.loading}
226
- style="padding: 6px 10px; font-size: 13px; border: 1px solid var(--border); border-radius: var(--radius-sm); min-width: 90px;"
227
- @change=${e=>{let t=e.target.value;s.onPatch(i.key,{fastMode:t===``?null:t===`on`})}}
228
- >
229
- ${S.map(t=>e`<option value=${t.value} ?selected=${x===t.value}>
230
- ${t.label}
231
- </option>`)}
232
- </select>
233
- </td>
234
- <td>
235
- <select
236
- ?disabled=${s.loading}
237
- style="padding: 6px 10px; font-size: 13px; border: 1px solid var(--border); border-radius: var(--radius-sm); min-width: 90px;"
238
- @change=${e=>{let t=e.target.value;s.onPatch(i.key,{verboseLevel:t||null})}}
239
- >
240
- ${E.map(t=>e`<option value=${t.value} ?selected=${C===t.value}>
241
- ${t.label}
242
- </option>`)}
243
- </select>
244
- </td>
245
- <td>
246
- <select
247
- ?disabled=${s.loading}
248
- style="padding: 6px 10px; font-size: 13px; border: 1px solid var(--border); border-radius: var(--radius-sm); min-width: 90px;"
249
- @change=${e=>{let t=e.target.value;s.onPatch(i.key,{reasoningLevel:t||null})}}
250
- >
251
- ${O.map(t=>e`<option value=${t} ?selected=${D===t}>
252
- ${t||`inherit`}
253
- </option>`)}
254
- </select>
255
- </td>
256
- </tr>`,...j?[e`<tr>
257
- <td colspan="11" style="padding: 0;">
258
- <div
259
- style="padding: 14px 16px; border-top: 1px solid var(--border); background: var(--surface-2, rgba(127, 127, 127, 0.05));"
260
- >
261
- ${s.checkpointLoadingKey===i.key?e`<div class="muted">Loading checkpoints…</div>`:N?e`<div class="callout danger">${N}</div>`:M.length===0?e`<div class="muted">
262
- No compaction checkpoints recorded for this session.
263
- </div>`:e`
264
- <div style="display: grid; gap: 10px;">
265
- ${M.map(t=>e`
266
- <div
267
- style="border: 1px solid var(--border); border-radius: var(--radius-md); padding: 12px; display: grid; gap: 8px;"
268
- >
269
- <div
270
- style="display: flex; gap: 8px; justify-content: space-between; align-items: center; flex-wrap: wrap;"
271
- >
272
- <strong>
273
- ${w(t.reason)} ·
274
- ${a(t.createdAt)}
275
- </strong>
276
- <span class="muted" style="font-size: 12px;">
277
- ${T(t)}
278
- </span>
279
- </div>
280
- ${t.summary?e`<div style="white-space: pre-wrap;">
281
- ${t.summary}
282
- </div>`:e`<div class="muted">No summary captured.</div>`}
283
- <div style="display: flex; gap: 8px; flex-wrap: wrap;">
284
- <button
285
- class="btn btn--sm"
286
- ?disabled=${s.checkpointBusyKey===t.checkpointId}
287
- @click=${()=>s.onBranchFromCheckpoint(i.key,t.checkpointId)}
288
- >
289
- Branch from checkpoint
290
- </button>
291
- <button
292
- class="btn btn--sm"
293
- ?disabled=${s.checkpointBusyKey===t.checkpointId}
294
- @click=${()=>s.onRestoreCheckpoint(i.key,t.checkpointId)}
295
- >
296
- Restore
297
- </button>
298
- </div>
299
- </div>
300
- `)}
301
- </div>
302
- `}
303
- </div>
304
- </td>
305
- </tr>`]:[]]}export{E as renderSessions};
306
- //# sourceMappingURL=sessions-TU5OCoQU.js.map
@@ -1,323 +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{p as a,y as o}from"./index-CYO6b4V3.js";import{i as s,n as c,r as l,t as u}from"./skills-shared-BHZ4ntcf.js";function d(e){return e?a(e,window.location.href):null}function f(e){!(e instanceof HTMLDialogElement)||e.open||queueMicrotask(()=>{!e.isConnected||e.open||e.showModal()})}var p=[{id:`all`,label:`All`},{id:`ready`,label:`Ready`},{id:`needs-setup`,label:`Needs Setup`},{id:`disabled`,label:`Disabled`}];function m(e,t){switch(t){case`all`:return!0;case`ready`:return!e.disabled&&e.eligible;case`needs-setup`:return!e.disabled&&!e.eligible;case`disabled`:return e.disabled}throw Error(`Unsupported skills status filter`)}function h(e){return e.disabled?`muted`:e.eligible?`ok`:`warn`}function g(i){let a=i.report?.skills??[],o={all:a.length,ready:0,"needs-setup":0,disabled:0};for(let e of a)e.disabled?o.disabled++:e.eligible?o.ready++:o[`needs-setup`]++;let c=i.statusFilter===`all`?a:a.filter(e=>m(e,i.statusFilter)),l=r(i.filter),u=l?c.filter(e=>r([e.name,e.description,e.source].join(` `)).includes(l)):c,d=s(u),f=i.detailKey?a.find(e=>e.skillKey===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">Skills</div>
6
- <div class="card-sub">Installed skills and their status.</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
- ${p.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 skills"
37
- autocomplete="off"
38
- name="skills-filter"
39
- />
40
- </label>
41
- <div class="muted">${u.length} shown</div>
42
- </div>
43
-
44
- <div style="margin-top: 16px; border-top: 1px solid var(--border); padding-top: 16px;">
45
- <div style="display: flex; align-items: center; gap: 12px; margin-bottom: 12px;">
46
- <div style="font-weight: 600;">ClawHub</div>
47
- <div class="muted" style="font-size: 13px;">
48
- Search and install skills from the registry
49
- </div>
50
- </div>
51
- <div style="display: flex; align-items: center; gap: 12px; flex-wrap: wrap;">
52
- <label class="field" style="flex: 1; min-width: 180px;">
53
- <input
54
- .value=${i.clawhubQuery}
55
- @input=${e=>i.onClawHubQueryChange(e.target.value)}
56
- placeholder="Search ClawHub skills…"
57
- autocomplete="off"
58
- name="clawhub-search"
59
- />
60
- </label>
61
- <button
62
- class="btn btn--sm"
63
- ?disabled=${!i.connected||i.clawhubSearchLoading}
64
- @click=${()=>i.onClawHubQueryChange(``)}
65
- >
66
- Browse
67
- </button>
68
- ${i.clawhubSearchLoading?e`<span class="muted">Searching…</span>`:n}
69
- </div>
70
- ${i.clawhubSearchError?e`<div class="callout danger" style="margin-top: 8px;">
71
- ${i.clawhubSearchError}
72
- </div>`:n}
73
- ${i.clawhubInstallMessage?e`<div
74
- class="callout ${i.clawhubInstallMessage.kind===`error`?`danger`:`success`}"
75
- style="margin-top: 8px;"
76
- >
77
- ${i.clawhubInstallMessage.text}
78
- </div>`:n}
79
- ${_(i)}
80
- </div>
81
-
82
- ${i.error?e`<div class="callout danger" style="margin-top: 12px;">${i.error}</div>`:n}
83
- ${u.length===0?e`
84
- <div class="muted" style="margin-top: 16px">
85
- ${!i.connected&&!i.report?`Not connected to gateway.`:`No skills found.`}
86
- </div>
87
- `:e`
88
- <div class="agent-skills-groups" style="margin-top: 16px;">
89
- ${d.map(t=>e`
90
- <details class="agent-skills-group" open>
91
- <summary class="agent-skills-header">
92
- <span>${t.label}</span>
93
- <span class="muted">${t.skills.length}</span>
94
- </summary>
95
- <div class="list skills-grid">
96
- ${t.skills.map(e=>y(e,i))}
97
- </div>
98
- </details>
99
- `)}
100
- </div>
101
- `}
102
- </section>
103
-
104
- ${f?b(f,i):n}
105
- ${i.clawhubDetailSlug?v(i):n}
106
- `}function _(t){let r=t.clawhubResults;return r?r.length===0?e`<div class="muted" style="margin-top: 8px;">No skills found on ClawHub.</div>`:e`
107
- <div class="list" style="margin-top: 8px;">
108
- ${r.map(r=>e`
109
- <div
110
- class="list-item list-item-clickable"
111
- @click=${()=>t.onClawHubDetailOpen(r.slug)}
112
- >
113
- <div class="list-main">
114
- <div class="list-title">${r.displayName}</div>
115
- <div class="list-sub">${r.summary?i(r.summary,120):r.slug}</div>
116
- </div>
117
- <div class="list-meta" style="display: flex; align-items: center; gap: 8px;">
118
- ${r.version?e`<span class="muted" style="font-size: 12px;">v${r.version}</span>`:n}
119
- <button
120
- class="btn btn--sm"
121
- ?disabled=${t.clawhubInstallSlug!==null}
122
- @click=${e=>{e.stopPropagation(),t.onClawHubInstall(r.slug)}}
123
- >
124
- ${t.clawhubInstallSlug===r.slug?`Installing…`:`Install`}
125
- </button>
126
- </div>
127
- </div>
128
- `)}
129
- </div>
130
- `:e`<div class="muted" style="margin-top: 8px;">
131
- Search or browse ClawHub to install registry skills.
132
- </div>`}function v(r){let i=r.clawhubDetail;return e`
133
- <dialog
134
- class="md-preview-dialog"
135
- ${o(f)}
136
- @click=${e=>{let t=e.currentTarget;e.target===t&&t.close()}}
137
- @close=${r.onClawHubDetailClose}
138
- >
139
- <div class="md-preview-dialog__panel">
140
- <div class="md-preview-dialog__header">
141
- <div class="md-preview-dialog__title">
142
- ${i?.skill?.displayName??r.clawhubDetailSlug}
143
- </div>
144
- <button
145
- class="btn btn--sm"
146
- @click=${e=>{e.currentTarget.closest(`dialog`)?.close()}}
147
- >
148
- Close
149
- </button>
150
- </div>
151
- <div class="md-preview-dialog__body" style="display: grid; gap: 16px;">
152
- ${r.clawhubDetailLoading?e`<div class="muted">${t(`common.loading`)}</div>`:r.clawhubDetailError?e`<div class="callout danger">${r.clawhubDetailError}</div>`:i?.skill?e`
153
- <div style="font-size: 14px; line-height: 1.5;">
154
- ${i.skill.summary??``}
155
- </div>
156
- ${i.owner?.displayName?e`<div class="muted" style="font-size: 13px;">
157
- By
158
- ${i.owner.displayName}${i.owner.handle?e` (@${i.owner.handle})`:n}
159
- </div>`:n}
160
- ${i.latestVersion?e`<div class="muted" style="font-size: 13px;">
161
- Latest: v${i.latestVersion.version}
162
- </div>`:n}
163
- ${i.latestVersion?.changelog?e`<div
164
- style="font-size: 13px; border-top: 1px solid var(--border); padding-top: 12px; white-space: pre-wrap;"
165
- >
166
- ${i.latestVersion.changelog}
167
- </div>`:n}
168
- ${i.metadata?.os?e`<div class="muted" style="font-size: 12px;">
169
- Platforms: ${i.metadata.os.join(`, `)}
170
- </div>`:n}
171
- <button
172
- class="btn primary"
173
- ?disabled=${r.clawhubInstallSlug!==null}
174
- @click=${()=>{r.clawhubDetailSlug&&r.onClawHubInstall(r.clawhubDetailSlug)}}
175
- >
176
- ${r.clawhubInstallSlug===r.clawhubDetailSlug?`Installing…`:`Install ${i.skill.displayName}`}
177
- </button>
178
- `:e`<div class="muted">Skill not found.</div>`}
179
- </div>
180
- </div>
181
- </dialog>
182
- `}function y(t,r){let a=r.busyKey===t.skillKey;return e`
183
- <div class="list-item list-item-clickable" @click=${()=>r.onDetailOpen(t.skillKey)}>
184
- <div class="list-main">
185
- <div class="list-title" style="display: flex; align-items: center; gap: 8px;">
186
- <span class="statusDot ${h(t)}"></span>
187
- ${t.emoji?e`<span>${t.emoji}</span>`:n}
188
- <span>${t.name}</span>
189
- </div>
190
- <div class="list-sub">${i(t.description,140)}</div>
191
- </div>
192
- <div
193
- class="list-meta"
194
- style="display: flex; align-items: center; justify-content: flex-end; gap: 10px;"
195
- >
196
- <label class="skill-toggle-wrap" @click=${e=>e.stopPropagation()}>
197
- <input
198
- type="checkbox"
199
- class="skill-toggle"
200
- .checked=${!t.disabled}
201
- ?disabled=${a}
202
- @change=${e=>{e.stopPropagation(),r.onToggle(t.skillKey,t.disabled)}}
203
- />
204
- </label>
205
- </div>
206
- </div>
207
- `}function b(t,r){let i=r.busyKey===t.skillKey,a=r.edits[t.skillKey]??``,s=r.messages[t.skillKey]??null,p=t.install.length>0&&t.missing.bins.length>0,m=!!(t.bundled&&t.source!==`genesis-bundled`),g=u(t),_=c(t);return e`
208
- <dialog
209
- class="md-preview-dialog"
210
- ${o(f)}
211
- @click=${e=>{let t=e.currentTarget;e.target===t&&t.close()}}
212
- @close=${r.onDetailClose}
213
- >
214
- <div class="md-preview-dialog__panel">
215
- <div class="md-preview-dialog__header">
216
- <div
217
- class="md-preview-dialog__title"
218
- style="display: flex; align-items: center; gap: 8px;"
219
- >
220
- <span class="statusDot ${h(t)}"></span>
221
- ${t.emoji?e`<span style="font-size: 18px;">${t.emoji}</span>`:n}
222
- <span>${t.name}</span>
223
- </div>
224
- <button
225
- class="btn btn--sm"
226
- @click=${e=>{e.currentTarget.closest(`dialog`)?.close()}}
227
- >
228
- Close
229
- </button>
230
- </div>
231
- <div class="md-preview-dialog__body" style="display: grid; gap: 16px;">
232
- <div>
233
- <div style="font-size: 14px; line-height: 1.5; color: var(--text);">
234
- ${t.description}
235
- </div>
236
- ${l({skill:t,showBundledBadge:m})}
237
- </div>
238
-
239
- ${g.length>0?e`
240
- <div
241
- class="callout"
242
- style="border-color: var(--warn-subtle); background: var(--warn-subtle); color: var(--warn);"
243
- >
244
- <div style="font-weight: 600; margin-bottom: 4px;">Missing requirements</div>
245
- <div>${g.join(`, `)}</div>
246
- </div>
247
- `:n}
248
- ${_.length>0?e`
249
- <div class="muted" style="font-size: 13px;">Reason: ${_.join(`, `)}</div>
250
- `:n}
251
-
252
- <div style="display: flex; align-items: center; gap: 12px;">
253
- <label class="skill-toggle-wrap">
254
- <input
255
- type="checkbox"
256
- class="skill-toggle"
257
- .checked=${!t.disabled}
258
- ?disabled=${i}
259
- @change=${()=>r.onToggle(t.skillKey,t.disabled)}
260
- />
261
- </label>
262
- <span style="font-size: 13px; font-weight: 500;">
263
- ${t.disabled?`Disabled`:`Enabled`}
264
- </span>
265
- ${p?e`<button
266
- class="btn"
267
- ?disabled=${i}
268
- @click=${()=>r.onInstall(t.skillKey,t.name,t.install[0].id)}
269
- >
270
- ${i?`Installing…`:t.install[0].label}
271
- </button>`:n}
272
- </div>
273
-
274
- ${s?e`<div class="callout ${s.kind===`error`?`danger`:`success`}">
275
- ${s.message}
276
- </div>`:n}
277
- ${t.primaryEnv?e`
278
- <div style="display: grid; gap: 8px;">
279
- <div class="field">
280
- <span
281
- >API key
282
- <span class="muted" style="font-weight: normal; font-size: 0.88em;"
283
- >(${t.primaryEnv})</span
284
- ></span
285
- >
286
- <input
287
- type="password"
288
- .value=${a}
289
- @input=${e=>r.onEdit(t.skillKey,e.target.value)}
290
- />
291
- </div>
292
- ${(()=>{let r=d(t.homepage);return r?e`<div class="muted" style="font-size: 13px;">
293
- Get your key:
294
- <a href="${r}" target="_blank" rel="noopener noreferrer"
295
- >${t.homepage}</a
296
- >
297
- </div>`:n})()}
298
- <button
299
- class="btn primary"
300
- ?disabled=${i}
301
- @click=${()=>r.onSaveKey(t.skillKey)}
302
- >
303
- Save key
304
- </button>
305
- </div>
306
- `:n}
307
-
308
- <div
309
- style="border-top: 1px solid var(--border); padding-top: 12px; display: grid; gap: 6px; font-size: 12px; color: var(--muted);"
310
- >
311
- <div><span style="font-weight: 600;">Source:</span> ${t.source}</div>
312
- <div style="font-family: var(--mono); word-break: break-all;">${t.filePath}</div>
313
- ${(()=>{let r=d(t.homepage);return r?e`<div>
314
- <a href="${r}" target="_blank" rel="noopener noreferrer"
315
- >${t.homepage}</a
316
- >
317
- </div>`:n})()}
318
- </div>
319
- </div>
320
- </div>
321
- </dialog>
322
- `}export{g as renderSkills};
323
- //# sourceMappingURL=skills-CC23LxGO.js.map
@@ -1,11 +0,0 @@
1
- import{f as e,u as t}from"./i18n-Dr_ijwId.js";var n=[{id:`workspace`,label:`Workspace Skills`,sources:[`genesis-workspace`]},{id:`built-in`,label:`Built-in Skills`,sources:[`genesis-bundled`]},{id:`installed`,label:`Installed Skills`,sources:[`genesis-managed`]},{id:`extra`,label:`Extra Skills`,sources:[`genesis-extra`]}];function r(e){let t=new Map;for(let e of n)t.set(e.id,{id:e.id,label:e.label,skills:[]});let r=n.find(e=>e.id===`built-in`),i={id:`other`,label:`Other Skills`,skills:[]};for(let a of e){let e=a.bundled?r:n.find(e=>e.sources.includes(a.source));e?t.get(e.id)?.skills.push(a):i.skills.push(a)}let a=n.map(e=>t.get(e.id)).filter(e=>!!(e&&e.skills.length>0));return i.skills.length>0&&a.push(i),a}function i(e){return[...e.missing.bins.map(e=>`bin:${e}`),...e.missing.env.map(e=>`env:${e}`),...e.missing.config.map(e=>`config:${e}`),...e.missing.os.map(e=>`os:${e}`)]}function a(e){let t=[];return e.disabled&&t.push(`disabled`),e.blockedByAllowlist&&t.push(`blocked by allowlist`),t}function o(n){let r=n.skill,i=!!n.showBundledBadge;return e`
2
- <div class="chip-row" style="margin-top: 6px;">
3
- <span class="chip">${r.source}</span>
4
- ${i?e` <span class="chip">bundled</span> `:t}
5
- <span class="chip ${r.eligible?`chip-ok`:`chip-warn`}">
6
- ${r.eligible?`eligible`:`blocked`}
7
- </span>
8
- ${r.disabled?e` <span class="chip chip-warn">disabled</span> `:t}
9
- </div>
10
- `}export{r as i,a as n,o as r,i as t};
11
- //# sourceMappingURL=skills-shared-BHZ4ntcf.js.map