355 lines
29 KiB
JavaScript
355 lines
29 KiB
JavaScript
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{Ei as t,er as n}from"./control-ui-foundation-CeFMP1Ly.js";import{Ci as r,Js as i,Si as a,Ys as o,bi as s,di as c,fi as l,fl as u,fs as d,gi as f,hi as p,l as m,li as ee,mi as te,ml as h,ms as g,pi as ne,ps as _,qs as re,ui as v,vi as y,vr as ie,w as ae,wi as oe,xi as se,yi as ce,yr as le}from"./control-ui-core-pH6nakZ-.js";import{G as b,J as x,W as S,Z as ue,at as de,h as fe,i as pe,m as me,n as he,rt as C}from"./lit-runtime-BEtFSUCp.js";import{Kn as ge,m as _e,p as ve,zn as w}from"./control-ui-core-DGVkFhVB.js";import{Ht as T,Lt as E,Nt as D,Rt as O,qt as k}from"./control-ui-core-Br5DB0Zj.js";import{F as A,I as j,In as M,L as N,Ln as P,z as F}from"./control-ui-boot-wpHCbPL9.js";import{n as I,r as ye}from"./gateway-runtime-DUNO4Mi1.js";import{$i as be,Cn as xe,bn as L,ea as Se,fo as Ce,ga as we,ho as Te,mn as Ee,on as De,un as R,vn as Oe,xn as z,ya as ke,yn as Ae}from"./control-ui-boot-Cdpgu1Gm.js";import{n as je,t as Me}from"./hub-tabs-mHLCJmKB.js";import{n as Ne,t as Pe}from"./settings-workspace-Bo4nqRhI.js";import{n as Fe,t as Ie}from"./gateway-page-controller-bzyUg03c.js";import{t as Le}from"./agent-select-registration-Bgp9CYzQ.js";import{a as Re,i as B,n as ze,o as Be,r as Ve,s as He,t as Ue}from"./skills-shared-BNHPZbfC.js";import{i as We,n as Ge,r as Ke,t as qe}from"./plugins-hub-header-2-MSECVZ.js";function V(e){return e.installRef??e.slug}async function Je(e,t,n){return t.trim()?(await e.request(`skills.search`,{query:t,limit:20},{signal:n}))?.results??[]:[]}function H(e){return e?Te(e,window.location.href):null}function Ye(e,t){switch(t){case`all`:return!0;case`ready`:return!e.disabled&&B(e);case`needs-setup`:return!e.disabled&&!B(e);case`disabled`:return e.disabled}throw Error(`Unsupported skills status filter`)}function Xe(e){return e.disabled?`muted`:B(e)?`ok`:`warn`}function Ze(e){return e.disabled?L({kind:`muted`,label:k(`skillsPage.tabs.disabled`)}):B(e)?L({kind:`ok`,label:k(`skillsPage.tabs.ready`)}):L({kind:`warn`,label:k(`skillsPage.tabs.needsSetup`)})}function U(e,t){let n=e.clawhub;return!n||n.status!==`linked`||!n.valid?null:t[ee({registry:n.registry,slug:n.slug,ownerHandle:n.ownerHandle,version:n.installedVersion})]??null}function W(e,t){if(!e)return t?{label:k(`skillsPage.refreshing`),kind:`muted`,chipClass:`chip`}:{label:k(`skillsPage.verdict.unavailable`),kind:`warn`,chipClass:`chip-warn`};let n=e.securityStatus?.trim()||null;return e.ok&&e.decision===`pass`?{label:n===`clean`||!n?k(`skillsPage.verdict.clean`):n,kind:`ok`,chipClass:`chip-ok`}:n===`pending`||n===`not-run`?{label:k(`skillsPage.verdict.pending`),kind:`muted`,chipClass:`chip`}:{label:k(n===`malicious`?`skillsPage.verdict.blocked`:n===`suspicious`?`skillsPage.verdict.review`:`skillsPage.verdict.unavailable`),kind:`warn`,chipClass:`chip-warn`}}function G(e){return e.loading||e.operation!==null}function K(e){return G(e)||!e.canUpdate}function q(e){return G(e)||!e.canInstall}function Qe(e,t){return e.operation?.kind===`skill`&&e.operation.skillKey===t}function J(e,t){return e.operation?.kind===`clawhub`&&e.operation.ref===t}function $e(e,t){if(t.installOnly!==!0)return!1;let n=V(t);return(e.report?.skills??[]).some(e=>e.clawhub?.valid===!0&&e.clawhub.requestedReference===n)}function et(e){let n=e.report?.skills??[],r={all:n.length,ready:0,"needs-setup":0,disabled:0};for(let e of n)e.disabled?r.disabled++:B(e)?r.ready++:r[`needs-setup`]++;let i=e.statusFilter===`all`?n:n.filter(t=>Ye(t,e.statusFilter)),a=t(e.filter),o=a?i.filter(e=>t([e.name,e.description,e.source].join(` `)).includes(a)):i,s=Be(o),c=e.detailKey?n.find(t=>t.skillKey===e.detailKey)??null:null;return x`
|
|
${Ee(x`
|
|
${Y(e,r,o.length)}
|
|
${e.error?x`<div class="callout danger" role="alert">${e.error}</div>`:b}
|
|
${nt(e)}
|
|
${o.length===0?R(!e.connected&&!e.report?k(`skillsPage.disconnected`):k(`skillsPage.empty`)):s.map(t=>tt(t,e))}
|
|
`,{wide:!0})}
|
|
${c?ot(c,e):b}
|
|
${e.clawhubDetailRef?it(e):b}
|
|
`}function tt(e,t){return x`
|
|
<details class="settings-section skills-group" open>
|
|
<summary class="settings-section__header skills-group__summary">
|
|
<h2 class="settings-section__heading">
|
|
${e.label} <span class="settings-count">${e.skills.length}</span>
|
|
</h2>
|
|
<span class="skills-group__chevron" aria-hidden="true">${E.chevronDown}</span>
|
|
</summary>
|
|
<div class="settings-group">
|
|
${fe(e.skills,e=>e.skillKey,e=>at(e,t))}
|
|
</div>
|
|
</details>
|
|
`}function Y(e,t,n){let r=i(e.agentsList?.agents??[]),a=r.some(t=>t.id===e.selectedAgentId)?e.selectedAgentId??``:r.some(t=>t.id===e.agentsList?.defaultId)?e.agentsList?.defaultId??``:r[0]?.id??``;return x`
|
|
<div class="plugins-toolbar plugins-toolbar--fields">
|
|
${Ae({value:e.statusFilter,ariaLabel:k(`skillsPage.title`),options:X.map(e=>({value:e.id,label:x`${k(e.labelKey)}
|
|
<span class="settings-count">${t[e.id]}</span>`})),onChange:t=>e.onStatusFilterChange(t)})}
|
|
${r.length>1?x`
|
|
<div class="plugins-field skills-toolbar__agent">
|
|
<span>${k(`usage.filters.agent`)}</span>
|
|
<openclaw-agent-select
|
|
class="agent-select--settings"
|
|
name="skills-agent"
|
|
.options=${r.map(t=>{let n=o(t);return{value:t.id,label:t.id===e.agentsList?.defaultId?k(`skillsPage.defaultAgent`,{name:n}):n,agent:t}})}
|
|
.value=${a}
|
|
.accessibleLabel=${k(`usage.filters.agent`)}
|
|
.disabled=${G(e)||!e.connected}
|
|
.onSelect=${e.onAgentChange}
|
|
></openclaw-agent-select>
|
|
</div>
|
|
`:b}
|
|
<label class="plugins-field skills-toolbar__search">
|
|
<span>${k(`common.search`)}</span>
|
|
<input
|
|
class="settings-input"
|
|
.value=${e.filter}
|
|
@input=${t=>e.onFilterChange(t.target.value)}
|
|
placeholder=${k(`skillsPage.filterPlaceholder`)}
|
|
autocomplete="off"
|
|
name="skills-filter"
|
|
/>
|
|
</label>
|
|
<span class="plugins-toolbar__hint">
|
|
${k(`skillsPage.shown`,{count:String(n)})}
|
|
</span>
|
|
<button
|
|
type="button"
|
|
class="btn"
|
|
?disabled=${G(e)||!e.connected}
|
|
@click=${e.onRefresh}
|
|
>
|
|
${e.loading?k(`common.loading`):k(`common.refresh`)}
|
|
</button>
|
|
</div>
|
|
`}function nt(e){return Oe({title:k(`skillsPage.clawHub`),description:k(`skillsPage.clawHubSubtitle`)},x`
|
|
<div class="settings-row">
|
|
<input
|
|
class="settings-input plugins-row-input"
|
|
.value=${e.clawhubQuery}
|
|
@input=${t=>e.onClawHubQueryChange(t.target.value)}
|
|
placeholder=${k(`skillsPage.searchClawHub`)}
|
|
autocomplete="off"
|
|
name="clawhub-search"
|
|
/>
|
|
${e.clawhubSearchLoading?x`<span class="plugins-toolbar__hint">${k(`skillsPage.searching`)}</span>`:b}
|
|
</div>
|
|
${e.clawhubSearchError?x`<div class="callout danger plugins-group-message">${e.clawhubSearchError}</div>`:b}
|
|
${e.clawhubInstallMessage?x`<div
|
|
class="callout ${e.clawhubInstallMessage.kind===`error`?`danger`:`success`} plugins-group-message"
|
|
>
|
|
<div
|
|
style="max-width: 100%; white-space: pre-wrap; overflow-wrap: anywhere; word-break: break-word;"
|
|
>
|
|
${e.clawhubInstallMessage.text}
|
|
</div>
|
|
</div>`:b}
|
|
${rt(e)}
|
|
`)}function rt(e){let t=e.clawhubResults;return t?t.length===0?R(k(`skillsPage.noClawHubResults`)):x`
|
|
${t.map(t=>{let n=H(t.icon??void 0),r=V(t),i=t.installOnly?void 0:r,a=$e(e,t),o=t.trustState?` · ${k(`skillsPage.notScannedByClawHub`)}`:``,s=x`
|
|
${n?x`<img class="clawhub-skill-icon" src=${n} alt="" loading="lazy" />`:b}
|
|
<span class="clawhub-skill-result__copy">
|
|
<span class="settings-row__title">${t.displayName}</span>
|
|
<span class="settings-row__desc">
|
|
${t.summary?`${m(t.summary,100)} · ${r}`:r}${o}
|
|
</span>
|
|
</span>
|
|
`;return x`
|
|
<div class="settings-row plugins-item ${i?`plugins-item--clickable`:``}">
|
|
${i?x`<button
|
|
type="button"
|
|
class="settings-row__text plugins-item__detail-button clawhub-skill-result__button"
|
|
aria-label=${k(`skillsPage.openDetails`,{name:i})}
|
|
@click=${()=>e.onClawHubDetailOpen(i)}
|
|
>
|
|
${s}
|
|
</button>`:x`<div class="settings-row__text clawhub-skill-result__button">${s}</div>`}
|
|
<div class="settings-row__control">
|
|
${t.version?xe(`v${t.version}`):b}
|
|
<button
|
|
class="btn btn--sm"
|
|
?disabled=${a||q(e)}
|
|
@click=${()=>{a||e.onClawHubInstall(r)}}
|
|
>
|
|
${a?k(`skillsPage.installed`):J(e,r)?k(`skillsPage.installing`):k(`skillsPage.install`)}
|
|
</button>
|
|
</div>
|
|
</div>
|
|
`})}
|
|
`:b}function it(e){let t=e.clawhubDetail,n=H(t?.skill?.icon??void 0),r=n?null:H(t?.owner?.image??void 0),i=n??r;return x`
|
|
<openclaw-modal-dialog
|
|
label=${t?.skill?.displayName??e.clawhubDetailRef??k(`skillsPage.notFound`)}
|
|
style="--openclaw-modal-width: min(1040px, calc(100vw - 32px));"
|
|
@modal-cancel=${e.onClawHubDetailClose}
|
|
>
|
|
<div
|
|
class="md-preview-dialog__panel ${e.clawhubDetailError&&!e.clawhubDetailLoading?`md-preview-dialog__panel--message-only`:``}"
|
|
>
|
|
<div class="md-preview-dialog__header">
|
|
<div class="clawhub-skill-detail__identity">
|
|
${i?x`<img
|
|
class="clawhub-skill-icon clawhub-skill-icon--detail ${r?`clawhub-skill-icon--profile`:``}"
|
|
src=${i}
|
|
alt=""
|
|
/>`:b}
|
|
<div class="md-preview-dialog__title">
|
|
${t?.skill?.displayName??e.clawhubDetailRef}
|
|
</div>
|
|
</div>
|
|
<button class="btn btn--sm" @click=${e.onClawHubDetailClose}>
|
|
${k(`skillsPage.close`)}
|
|
</button>
|
|
</div>
|
|
<div class="md-preview-dialog__body" style="display: grid; gap: 16px;">
|
|
${e.clawhubDetailLoading?x`<div class="muted">${k(`common.loading`)}</div>`:e.clawhubDetailError?x`<div class="callout danger">${e.clawhubDetailError}</div>`:t?.skill?x`
|
|
<div style="font-size: 14px; line-height: 1.5;">
|
|
${t.skill.summary??``}
|
|
</div>
|
|
${t.owner?.displayName?x`<div class="muted" style="font-size: 13px;">
|
|
${k(`skillsPage.by`)}
|
|
${t.owner.displayName}${t.owner.handle?x` (@${t.owner.handle})`:b}
|
|
</div>`:b}
|
|
${t.latestVersion?x`<div class="muted" style="font-size: 13px;">
|
|
${k(`skillsPage.latest`,{version:t.latestVersion.version})}
|
|
</div>`:b}
|
|
${t.latestVersion?.changelog?x`<div
|
|
style="font-size: 13px; border-top: 1px solid var(--border); padding-top: 12px; white-space: pre-wrap;"
|
|
>
|
|
${t.latestVersion.changelog}
|
|
</div>`:b}
|
|
${t.metadata?.os?x`<div class="muted" style="font-size: 12px;">
|
|
${k(`skillsPage.platforms`,{platforms:t.metadata.os.join(`, `)})}
|
|
</div>`:b}
|
|
<button
|
|
class="btn primary"
|
|
?disabled=${q(e)}
|
|
@click=${()=>{e.clawhubDetailRef&&e.onClawHubInstall(e.clawhubDetailRef)}}
|
|
>
|
|
${J(e,e.clawhubDetailRef??``)?k(`skillsPage.installing`):k(`skillsPage.installNamed`,{name:t.skill.displayName})}
|
|
</button>
|
|
`:x`<div class="muted">${k(`skillsPage.notFound`)}</div>`}
|
|
</div>
|
|
</div>
|
|
</openclaw-modal-dialog>
|
|
`}function at(e,t){let n=K(t),r=U(e,t.clawhubVerdicts);return x`
|
|
<div class="settings-row plugins-item plugins-item--clickable">
|
|
<button
|
|
type="button"
|
|
class="settings-row__text plugins-item__detail-button"
|
|
aria-label=${k(`skillsPage.openDetails`,{name:e.name})}
|
|
@click=${()=>t.onDetailOpen(e.skillKey)}
|
|
>
|
|
<span class="settings-row__title">
|
|
${e.emoji?x`<span>${e.emoji}</span> `:b}${e.name}
|
|
</span>
|
|
<span class="settings-row__desc">${m(e.description,140)}</span>
|
|
</button>
|
|
<div class="settings-row__control">
|
|
${Ze(e)}
|
|
${e.clawhub?.status===`linked`?L(W(r,t.clawhubVerdictsLoading)):e.clawhub?.status===`invalid`?L({kind:`warn`,label:k(`skillsPage.invalidLink`)}):b}
|
|
${z({checked:!e.disabled,disabled:n,ariaLabel:k(`skillsPage.enabledNamed`,{name:e.name}),onChange:()=>t.onToggle(e.skillKey,e.disabled)})}
|
|
</div>
|
|
</div>
|
|
`}function ot(e,t){let n=K(t),r=q(t),i=Qe(t,e.skillKey),a=t.edits[e.skillKey]??``,o=t.messages[e.skillKey]??null,s=new Set([...e.missing.bins,...e.missing.anyBins]),c=e.install.find(e=>e.bins.some(e=>s.has(e))),l=!!(e.bundled&&e.source!==`openclaw-bundled`),u=Ue(e),d=ze(e),f=U(e,t.clawhubVerdicts),p=t.detailTab===`card`&&e.skillCard?.present?`card`:`overview`;return x`
|
|
<openclaw-modal-dialog
|
|
label=${e.name}
|
|
style="--openclaw-modal-width: min(1040px, calc(100vw - 32px));"
|
|
@modal-cancel=${t.onDetailClose}
|
|
>
|
|
<div class="md-preview-dialog__panel">
|
|
<div class="md-preview-dialog__header">
|
|
<div
|
|
class="md-preview-dialog__title"
|
|
style="display: flex; align-items: center; gap: 8px;"
|
|
>
|
|
<span class="statusDot ${Xe(e)}"></span>
|
|
${e.emoji?x`<span style="font-size: 18px;">${e.emoji}</span>`:b}
|
|
<span>${e.name}</span>
|
|
</div>
|
|
<button class="btn btn--sm" @click=${t.onDetailClose}>
|
|
${k(`skillsPage.close`)}
|
|
</button>
|
|
</div>
|
|
<div class="md-preview-dialog__body" style="display: grid; gap: 16px;">
|
|
<div>
|
|
<div style="font-size: 14px; line-height: 1.5; color: var(--text);">
|
|
${e.description}
|
|
</div>
|
|
${Re({skill:e,showBundledBadge:l})}
|
|
</div>
|
|
|
|
${e.clawhub||e.skillCard?.present?x`
|
|
${je({id:`skill-detail`,active:p,tabs:[{value:`overview`,label:k(`skillsPage.overview`)},...e.skillCard?.present?[{value:`card`,label:k(`skillsPage.skillCard`)}]:[]],ariaLabel:e.name,panelId:`skill-detail-panel`,variant:`sub`,onSelect:t.onDetailTabChange})}
|
|
`:b}
|
|
<div
|
|
id="skill-detail-panel"
|
|
role=${e.clawhub||e.skillCard?.present?`tabpanel`:b}
|
|
aria-labelledby=${e.clawhub||e.skillCard?.present?`skill-detail-tab-${p}`:b}
|
|
>
|
|
${p===`overview`?st(e,t,f):ct(e,t)}
|
|
</div>
|
|
${u.length>0?x`
|
|
<div
|
|
class="callout"
|
|
style="border-color: var(--warn-subtle); background: var(--warn-subtle); color: var(--warn);"
|
|
>
|
|
<div style="font-weight: 600; margin-bottom: 4px;">
|
|
${k(`skillsPage.missingRequirements`)}
|
|
</div>
|
|
<div>${u.join(`, `)}</div>
|
|
</div>
|
|
`:b}
|
|
${d.length>0?x`
|
|
<div class="muted" style="font-size: 13px;">
|
|
${k(`skillsPage.reason`,{reasons:d.join(`, `)})}
|
|
</div>
|
|
`:b}
|
|
|
|
<div style="display: flex; align-items: center; gap: 12px;">
|
|
${z({checked:!e.disabled,disabled:n,ariaLabel:e.name,onChange:()=>t.onToggle(e.skillKey,e.disabled)})}
|
|
<span style="font-size: 13px; font-weight: 500;">
|
|
${e.disabled?k(`skillsPage.disabled`):k(`skillsPage.enabled`)}
|
|
</span>
|
|
${c?x`<button
|
|
class="btn"
|
|
?disabled=${r}
|
|
@click=${()=>c&&t.onInstall(e.skillKey,e.name,c.id)}
|
|
>
|
|
${i?k(`skillsPage.installing`):c?.label}
|
|
</button>`:b}
|
|
</div>
|
|
|
|
${o?x`<div class="callout ${o.kind===`error`?`danger`:`success`}">
|
|
${_(o.message)}
|
|
</div>`:b}
|
|
${e.primaryEnv?x`
|
|
<div style="display: grid; gap: 8px;">
|
|
<div class="field">
|
|
<span
|
|
>${k(`skillsPage.apiKey`)}
|
|
<span class="muted" style="font-weight: normal; font-size: 0.88em;"
|
|
>(${e.primaryEnv})</span
|
|
></span
|
|
>
|
|
<input
|
|
type="password"
|
|
required
|
|
?disabled=${n}
|
|
.value=${a}
|
|
@input=${n=>t.onEdit(e.skillKey,n.target.value)}
|
|
/>
|
|
</div>
|
|
${(()=>{let t=H(e.homepage);return t?x`<div class="muted" style="font-size: 13px;">
|
|
${k(`skillsPage.getKey`)}
|
|
<a href="${t}" target="_blank" rel="noopener noreferrer"
|
|
>${e.homepage}</a
|
|
>
|
|
</div>`:b})()}
|
|
<button
|
|
class="btn primary"
|
|
?disabled=${n||!a.trim()}
|
|
@click=${()=>t.onSaveKey(e.skillKey)}
|
|
>
|
|
${k(`skillsPage.saveKey`)}
|
|
</button>
|
|
</div>
|
|
`:b}
|
|
|
|
<div
|
|
style="border-top: 1px solid var(--border); padding-top: 12px; display: grid; gap: 6px; font-size: 12px; color: var(--muted);"
|
|
>
|
|
<div>
|
|
<span style="font-weight: 600;">${k(`skillsPage.source`)}</span> ${e.source}
|
|
</div>
|
|
<div style="font-family: var(--mono); word-break: break-all;">${e.filePath}</div>
|
|
${(()=>{let t=H(e.homepage);return t?x`<div>
|
|
<a href="${t}" target="_blank" rel="noopener noreferrer"
|
|
>${e.homepage}</a
|
|
>
|
|
</div>`:b})()}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</openclaw-modal-dialog>
|
|
`}function st(e,t,n){let r=e.clawhub;if(!r)return b;if(r.status===`invalid`)return x`<div class="callout danger">
|
|
<div style="font-weight: 600; margin-bottom: 4px;">${k(`skillsPage.invalidLink`)}</div>
|
|
<div>${_(r.reason)}</div>
|
|
</div>`;let i=H(n?.securityAuditUrl??void 0),a=n?.reasons?.length?_(n.reasons.join(`, `)):null,o=W(n,t.clawhubVerdictsLoading),s=`${r.ownerHandle?`@${r.ownerHandle}/`:``}${r.slug}@${r.installedVersion}`;return x`
|
|
<div
|
|
class="callout"
|
|
style="display: grid; gap: 8px; border-color: var(--border); background: var(--panel-strong);"
|
|
>
|
|
<div style="display: flex; align-items: center; gap: 8px; flex-wrap: wrap;">
|
|
<span class="chip ${o.chipClass}">${o.label}</span>
|
|
<span class="muted" style="font-size: 12px;">${s}</span>
|
|
${t.clawhubVerdictsLoading&&n?x`<span class="muted">${k(`skillsPage.refreshing`)}</span>`:b}
|
|
</div>
|
|
${t.clawhubVerdictsError?x`<div class="muted" style="font-size: 13px;">${t.clawhubVerdictsError}</div>`:a?x`<div class="muted" style="font-size: 13px;">${a}</div>`:b}
|
|
${i?x`<div style="font-size: 13px;">
|
|
<a href="${i}" target="_blank" rel="noopener noreferrer"
|
|
>${k(`skillsPage.fullSecurityReport`)}</a
|
|
>
|
|
</div>`:b}
|
|
</div>
|
|
`}function ct(e,t){if(!e.skillCard?.present)return b;let n=t.skillCardContents[e.skillKey];if(n===void 0){let n=t.skillCardErrors[e.skillKey];return n?x`<div class="callout danger">${n}</div>`:x`<div class="muted" style="font-size: 13px;">
|
|
${t.skillCardLoadingKey===e.skillKey?k(`skillsPage.loadingSkillCard`):k(`skillsPage.skillCardNotLoaded`)}
|
|
</div>`}return x`
|
|
<article
|
|
class="sidebar-markdown"
|
|
style="max-width: 100%; overflow-wrap: anywhere;"
|
|
@click=${we}
|
|
>
|
|
${pe(Se(n))}
|
|
</article>
|
|
`}var X;function Z(){return(Z=e((()=>{S(),me(),he(),Le(),Me(),O(),D(),ke(),be(),De(),T(),re(),g(),ae(),Ce(),He(),Ve(),c(),X=[{id:`all`,labelKey:`skillsPage.tabs.all`},{id:`ready`,labelKey:`skillsPage.tabs.ready`},{id:`needs-setup`,labelKey:`skillsPage.tabs.needsSetup`},{id:`disabled`,labelKey:`skillsPage.tabs.disabled`}]})))()}var Q;function $(){return($=e((()=>{P(),A(),S(),ue(),w(),_e(),Pe(),g(),ye(),c(),Fe(),h(),le(),qe(),We(),Z(),Q=class extends u{constructor(...e){super(...e),this.skillsAgentId=null,this.skillsAgentRevision=0,this.skillsLoading=!1,this.skillsReport=null,this.skillsError=null,this.skillOperation=null,this.skillsFilter=``,this.skillsStatusFilter=`all`,this.skillEdits={},this.skillMessages={},this.skillsDetailKey=null,this.skillsDetailTab=`overview`,this.clawhubSearchQuery=``,this.clawhubDetail=null,this.clawhubDetailRef=null,this.clawhubDetailLoading=!1,this.clawhubDetailError=null,this.clawhubInstallMessage=null,this.clawhubVerdicts={},this.clawhubVerdictsLoading=!1,this.clawhubVerdictsError=null,this.skillCardContents={},this.skillCardContentKeys={},this.skillCardLoadingKey=null,this.skillCardErrors={},this.clawhubSearchTimer=null,this.routeDataInitialized=!1,this.routeDataEnabled=!0,this.debouncedClawHubSearchQuery=``,this.gateway=new Ie(this,{getGateway:()=>this.context?.gateway,invalidateRequests:()=>this.resetLoadedSkillState(),ensureInitialData:()=>this.ensureInitialData()}),this.clawhubSearchTask=new j(this,{autoRun:!1,args:()=>[this.gateway.connected?this.gateway.client:null,this.debouncedClawHubSearchQuery],task:([e,t],{signal:n})=>e&&t?Je(e,t,n):N}),this.subscriptions=new ie(this).effect(()=>this.context?.agents,e=>{let t=e.subscribe(()=>{this.reconcileAgentState(),this.ensureInitialData(),this.requestUpdate()});return this.reconcileAgentState(),this.ensureInitialData(),t})}get runtimeConfig(){return this.context.runtimeConfig}get client(){return this.gateway.client}get connected(){return this.gateway.connected}willUpdate(e){e.has(`routeData`)&&(this.applyRouteData(),this.ensureInitialData())}disconnectedCallback(){this.subscriptions.clear(),this.clawhubSearchTimer&&=(clearTimeout(this.clawhubSearchTimer),null),super.disconnectedCallback()}reconcileAgentState(){let e=this.context.agents.state;if(e.agentsList){let t=this.skillsAgentId;ce(this,e.agentsList),t!==this.skillsAgentId&&(this.skillsDetailKey=null,this.skillsDetailTab=`overview`)}}resetLoadedSkillState(){this.clawhubSearchTask.run([null,``]),this.clawhubSearchTimer&&=(clearTimeout(this.clawhubSearchTimer),null),this.routeDataInitialized&&(this.routeDataEnabled=!1),this.skillsAgentId=null,this.skillsAgentRevision++,this.skillsLoading=!1,this.skillsReport=null,this.skillsError=null,this.skillOperation=null,this.skillEdits={},this.skillMessages={},this.skillsDetailKey=null,this.skillsDetailTab=`overview`,this.debouncedClawHubSearchQuery=``,this.clawhubDetail=null,this.clawhubDetailRef=null,this.clawhubDetailLoading=!1,this.clawhubDetailError=null,this.clawhubInstallMessage=null,this.clawhubVerdicts={},this.clawhubVerdictsLoading=!1,this.clawhubVerdictsError=null,this.skillCardContents={},this.skillCardContentKeys={},this.skillCardLoadingKey=null,this.skillCardErrors={}}applyRouteData(){let e=this.routeData;if(e){if(this.routeDataInitialized=!0,this.routeDataEnabled=!0,!this.gateway.isRouteDataCurrent(e)||e.agents!==this.context.agents){this.routeDataEnabled=!1;return}this.skillsAgentId&&e.selectedAgentId&&e.selectedAgentId!==this.skillsAgentId||(this.skillsAgentId=e.selectedAgentId??this.skillsAgentId,this.skillsLoading=!1,this.skillsReport=e.report,this.skillsError=e.error,e.report&&p(this,e.report))}}ensureInitialData(){if(this.routeDataEnabled||!this.routeDataInitialized||!this.gateway.connected||!this.gateway.client)return;let e=this.context.agents.state;if(!e.agentsList){e.agentsLoading||this.loadAgents();return}this.reconcileAgentState(),!this.skillsReport&&!this.skillsLoading&&y(this),this.clawhubSearchQuery.trim()&&this.clawhubSearchTask.status!==F.PENDING&&this.clawhubSearchResults===null&&this.clawhubSearchError===null&&this.runClawHubSearch(this.clawhubSearchQuery)}async loadAgents(){if(!this.gateway.client||!this.gateway.connected)return;let e=this.context.agents;e.state.agentsList||await e.ensureList(),this.context.agents===e&&(this.reconcileAgentState(),this.ensureInitialData())}async refreshPage(){await s(this,()=>this.loadAgents())}changeAgent(e){if(this.skillOperation||this.skillsLoading)return;let t=this.skillsAgentId;a(this,e),t!==this.skillsAgentId&&(this.skillsDetailKey=null,this.skillsDetailTab=`overview`),y(this,{clearMessages:!0})}changeClawHubQuery(e){this.clawhubSearchQuery=e,this.clawhubInstallMessage=null,this.debouncedClawHubSearchQuery=``,this.clawhubSearchTask.run([null,``]),this.clawhubSearchTimer&&clearTimeout(this.clawhubSearchTimer),this.clawhubSearchTimer=setTimeout(()=>this.runClawHubSearch(e),300)}runClawHubSearch(e){let t=e.trim();if(this.debouncedClawHubSearchQuery=t,!t||!this.gateway.connected||!this.gateway.client){this.clawhubSearchTask.run([null,``]);return}this.clawhubSearchTask.run([this.gateway.client,t])}get clawhubSearchResults(){return this.clawhubSearchTask.status===F.COMPLETE&&this.debouncedClawHubSearchQuery===this.clawhubSearchQuery.trim()?this.clawhubSearchTask.value??null:null}get clawhubSearchLoading(){return this.debouncedClawHubSearchQuery.length>0&&this.clawhubSearchTask.status===F.PENDING}get clawhubSearchError(){if(this.clawhubSearchTask.status!==F.ERROR||this.debouncedClawHubSearchQuery!==this.clawhubSearchQuery.trim())return null;let e=this.clawhubSearchTask.error;return d(e)}changeDetailTab(e){this.skillsDetailTab=e,e===`card`&&this.skillsDetailKey&&f(this,this.skillsDetailKey)}canUpdateSkills(){return I(this.context?.gateway?.snapshot,`skills.update`,`operator.admin`)}canInstallSkills(){return I(this.context?.gateway?.snapshot,`skills.install`,`operator.admin`)}selectHubTab(e){if(e!==`skills`){if(e===`workshop`){this.context.navigate(`skill-workshop`);return}this.context.navigate(`plugins`,{pathname:ge(e,this.context.basePath)})}}render(){let e=this.context.agents.state,t=this.skillsError??e.agentsError;return x`
|
|
${Ge({active:`skills`,onSelect:e=>this.selectHubTab(e)})}
|
|
${Ne(x`
|
|
<wa-tab-panel
|
|
id=${Ke}
|
|
name="skills"
|
|
active
|
|
aria-labelledby="plugins-tab-skills"
|
|
>
|
|
${et({canUpdate:this.canUpdateSkills(),canInstall:this.canInstallSkills(),connected:this.gateway.connected,loading:this.skillsLoading||e.agentsLoading,report:this.skillsReport,agentsList:e.agentsList,selectedAgentId:this.skillsAgentId??e.agentsList?.defaultId??null,error:t,filter:this.skillsFilter,statusFilter:this.skillsStatusFilter,edits:this.skillEdits,messages:this.skillMessages,operation:this.skillOperation,detailKey:this.skillsDetailKey,detailTab:this.skillsDetailTab,clawhubVerdicts:this.clawhubVerdicts,clawhubVerdictsLoading:this.clawhubVerdictsLoading,clawhubVerdictsError:this.clawhubVerdictsError,skillCardContents:this.skillCardContents,skillCardLoadingKey:this.skillCardLoadingKey,skillCardErrors:this.skillCardErrors,clawhubQuery:this.clawhubSearchQuery,clawhubResults:this.clawhubSearchResults,clawhubSearchLoading:this.clawhubSearchLoading,clawhubSearchError:this.clawhubSearchError,clawhubDetail:this.clawhubDetail,clawhubDetailRef:this.clawhubDetailRef,clawhubDetailLoading:this.clawhubDetailLoading,clawhubDetailError:this.clawhubDetailError,clawhubInstallMessage:this.clawhubInstallMessage,onAgentChange:e=>this.changeAgent(e),onFilterChange:e=>this.skillsFilter=e,onStatusFilterChange:e=>this.skillsStatusFilter=e,onRefresh:()=>void this.refreshPage(),onToggle:(e,t)=>{this.canUpdateSkills()&&oe(this,e,t,()=>this.canUpdateSkills())},onEdit:(e,t)=>{this.canUpdateSkills()&&r(this,e,t)},onSaveKey:e=>{this.canUpdateSkills()&&se(this,e,()=>this.canUpdateSkills())},onInstall:(e,t,n)=>{this.canInstallSkills()&&ne(this,e,t,n)},onDetailOpen:e=>{this.skillsDetailKey=e,this.skillsDetailTab=`overview`},onDetailClose:()=>this.skillsDetailKey=null,onDetailTabChange:e=>this.changeDetailTab(e),onClawHubQueryChange:e=>this.changeClawHubQuery(e),onClawHubDetailOpen:e=>void te(this,e),onClawHubDetailClose:()=>v(this),onClawHubInstall:(e,t)=>{this.canInstallSkills()&&l(this,e,t)}})}
|
|
</wa-tab-panel>
|
|
`)}
|
|
`}},n([M({context:ve,subscribe:!0})],Q.prototype,`context`,void 0),n([de({attribute:!1})],Q.prototype,`routeData`,void 0),n([C()],Q.prototype,`skillsAgentId`,void 0),n([C()],Q.prototype,`skillsAgentRevision`,void 0),n([C()],Q.prototype,`skillsLoading`,void 0),n([C()],Q.prototype,`skillsReport`,void 0),n([C()],Q.prototype,`skillsError`,void 0),n([C()],Q.prototype,`skillOperation`,void 0),n([C()],Q.prototype,`skillsFilter`,void 0),n([C()],Q.prototype,`skillsStatusFilter`,void 0),n([C()],Q.prototype,`skillEdits`,void 0),n([C()],Q.prototype,`skillMessages`,void 0),n([C()],Q.prototype,`skillsDetailKey`,void 0),n([C()],Q.prototype,`skillsDetailTab`,void 0),n([C()],Q.prototype,`clawhubSearchQuery`,void 0),n([C()],Q.prototype,`clawhubDetail`,void 0),n([C()],Q.prototype,`clawhubDetailRef`,void 0),n([C()],Q.prototype,`clawhubDetailLoading`,void 0),n([C()],Q.prototype,`clawhubDetailError`,void 0),n([C()],Q.prototype,`clawhubInstallMessage`,void 0),n([C()],Q.prototype,`clawhubVerdicts`,void 0),n([C()],Q.prototype,`clawhubVerdictsLoading`,void 0),n([C()],Q.prototype,`clawhubVerdictsError`,void 0),n([C()],Q.prototype,`skillCardContents`,void 0),n([C()],Q.prototype,`skillCardContentKeys`,void 0),n([C()],Q.prototype,`skillCardLoadingKey`,void 0),n([C()],Q.prototype,`skillCardErrors`,void 0),customElements.get(`openclaw-skills-page`)||customElements.define(`openclaw-skills-page`,Q)})))()}$();
|
|
//# sourceMappingURL=skills-page-DvrFExzp.js.map
|