UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

741 lines 66.5 kB
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{Bi as t,Gi as n,Ji as r,R as i,Wi as a,Yi as o,wr as s,z as c}from"./control-ui-foundation-Cydpkyqa.js";import{Bi as l,Bn as u,C as d,Do as f,Eo as p,J as ee,Oo as m,Sc as te,Vi as ne,Wi as re,b as ie,bc as ae,bs as oe,k as se,m as h,os as ce,ss as le,w as g,wn as ue,x as de,ys as fe,zn as pe}from"./control-ui-core-Rwzhj6nO.js";import{$ as me,K as _,L as he,X as v,at as y,h as ge,m as _e,q as b,r as ve,st as ye,t as be,z as x}from"./lit-runtime-CV_MH99K.js";import{An as xe,_ as Se,_n as Ce,g as we,jn as Te,nn as Ee,rn as De}from"./control-ui-core-YphAl4aM.js";import{Gt as Oe,Ht as ke,Qt as Ae,Ut as S,Wt as je,Yt as C,Z as Me,en as w}from"./control-ui-core-vvcQQV2m.js";import{$r as T,An as Ne,Ci as Pe,Di as Fe,Ei as Ie,On as Le,Sa as Re,Si as E,Uo as ze,_i as Be,ai as Ve,bi as He,ci as Ue,di as D,dn as We,ei as Ge,fi as Ke,gi as qe,hi as Je,ii as Ye,li as O,mi as Xe,ni as Ze,oi as Qe,pi as $e,ri as et,si as tt,ti as nt,ui as rt,un as it,vi as at,wa as ot,xi as st,yi as ct}from"./control-ui-boot-shared-DfZ39Yj9.js";import{$ as lt,J as ut,K as dt,L as k,X as A,Z as ft,et as pt,in as mt,q as ht,rn as gt}from"./control-ui-boot-chat-_QSl8fbH.js";import{Is as _t,Ls as vt,ui as yt}from"./control-ui-boot-shared-CXVvK2AW.js";import{x as j}from"./control-ui-boot-shared-3juXI2I2.js";import{_ as bt}from"./control-ui-boot-new-Bj2SAUyl.js";import{n as xt,t as St}from"./channel-picker-Bws61IbA.js";import{n as Ct,t as wt}from"./select-picker-BNhpItgu.js";import{n as Tt,t as Et}from"./hub-tabs-DLM-pY5z.js";import{n as Dt,t as Ot}from"./settings-workspace-Bseic8Tf.js";import{n as kt,t as At}from"./model-picker-CB45-l8O.js";import{n as jt,t as Mt}from"./cron-jobs-pagination-BDvDbGGq.js";import{n as Nt,s as Pt}from"./presenter-DkWDWjgv.js";import{n as Ft,t as It}from"./agent-scope-control-6x2VZZ2e.js";function Lt(){try{return Intl.DateTimeFormat().resolvedOptions().timeZone}catch{return``}}function Rt(){try{return Intl.supportedValuesOf?.(`timeZone`)??[]}catch{return[]}}function zt(e){let t=new Set;return e.map(e=>e.trim()).filter(e=>!e||t.has(e)?!1:(t.add(e),!0))}function Bt(e,t=Lt(),n=Rt()){return zt([t,`UTC`,...e.map(e=>e.schedule.kind===`cron`&&typeof e.schedule.tz==`string`?e.schedule.tz:``),...r(n.map(e=>e.trim()).filter(Boolean))])}function Vt(){return(Vt=e((()=>{t()})))()}function Ht(e){let t=fe(e.runtimeConfig),n=e.cron.cronForm.deliveryChannel.trim()||`last`,r=new Set((e.agentsList?.agents??[]).filter(e=>e.kind===`system`).map(e=>e.id.trim())),i=a([...le(e.agentsList?.agents??[]).map(e=>e.id.trim()),...e.cron.cronJobs.map(e=>typeof e.agentId==`string`&&!r.has(e.agentId.trim())?e.agentId.trim():``)]),o=a([...e.modelSuggestions,...qe(t),...e.cron.cronJobs.map(e=>{let t=Ve(e);return t?.kind===`agentTurn`&&typeof t.model==`string`?t.model.trim():``})]),s=a(e.cron.cronJobs.map(e=>e.delivery?.to)),c=(n===`last`?Object.values(e.channels.channelsSnapshot?.channelAccounts??{}).flat():e.channels.channelsSnapshot?.channelAccounts?.[n]??[]).flatMap(e=>[e.accountId,e.name]).filter(e=>typeof e==`string`).map(e=>e.trim()).filter(Boolean);return{agentSuggestions:i,modelSuggestions:o,timezoneSuggestions:Bt(e.cron.cronJobs),accountTargets:c,deliveryToSuggestions:e.cron.cronForm.deliveryMode===`webhook`?s.filter(e=>/^https?:\/\//i.test(e)):s}}var Ut;function Wt(){return(Wt=e((()=>{t(),ce(),oe(),tt(),Vt(),Ut=[`off`,`minimal`,`low`,`medium`,`high`]})))()}function Gt(e){let t=new URLSearchParams(e),n=t.get(`job`)?.trim()||null;return{jobId:n,runId:n&&t.get(`run`)?.trim()||null}}function Kt(e,t){if(t.runId===e)return!0;let n=qt.exec(e);return n!==null&&n[1]===t.jobId&&t.runAtMs===Number(n[2])}var qt;function M(){return(M=e((()=>{qt=/^cron:(.+):(\d+)$/u})))()}function N(e){let t=e.tabs;return t?Tt({id:t.id,active:e.value,tabs:e.options.map(e=>({value:e.value,label:e.label,testId:e.testId})),ariaLabel:e.ariaLabel??``,panelId:t.panelId,className:`cron-tabs`,variant:t.variant,onSelect:e.onChange}):ft({value:e.value,options:e.options,ariaLabel:e.ariaLabel,onChange:t=>e.onChange(t)})}function Jt(){return(Jt=e((()=>{Et(),k()})))()}function P(e,t,n,r){return{id:e,emoji:t,nameKey:`cron.suggestions.ideas.${e}.name`,taglineKey:`cron.suggestions.ideas.${e}.tagline`,promptKey:`cron.suggestions.ideas.${e}.prompt`,scheduleKey:n,schedule:r}}function Yt(e){return{name:w(e.nameKey),payloadText:w(e.promptKey),payloadKind:`agentTurn`,sessionTarget:`isolated`,wakeMode:`now`,deleteAfterRun:!1,enabled:!0,...e.schedule}}var F,I,Xt,Zt,Qt;function $t(){return($t=e((()=>{C(),F={scheduleKind:`cron`,cronExpr:`0 9 * * 1-5`},I={scheduleKind:`cron`,cronExpr:`0 8 * * *`},Xt={scheduleKind:`cron`,cronExpr:`0 9 * * 1`},Zt={scheduleKind:`every`,everyAmount:`1`,everyUnit:`hours`},Qt=[P(`repoPulse`,`🐙`,`cron.suggestions.schedules.weekdayMornings`,F),P(`standupGhostwriter`,`👻`,`cron.suggestions.schedules.weekdayMornings`,F),P(`hackerNewsScout`,`🔭`,`cron.suggestions.schedules.everyMorning`,I),P(`dependencyRadar`,`🛰️`,`cron.suggestions.schedules.weekly`,Xt),P(`watchdog`,`🦉`,`cron.suggestions.schedules.hourly`,Zt),P(`polyglotMinute`,`🗣️`,`cron.suggestions.schedules.everyMorning`,I)]})))()}function L(e,t){return v`
    <div class="cron-condition-activity__metric">
      <dt>${e}</dt>
      <dd>${t}</dd>
    </div>
  `}function en(e){let t=g(e.lastCheckedAtMs,{fallback:w(`cron.runs.notChecked`)}),n=g(e.lastFiredAtMs,{fallback:w(`cron.runs.neverFired`)});return v`
    <div class="cron-condition-activity" data-test-id="cron-condition-activity">
      <div class="cron-condition-activity__intro">
        <div class="settings-row__title">
          <span class="cron-condition-activity__icon" aria-hidden="true">${S(`gitBranch`)}</span>
          ${w(`cron.runs.conditionActivity`)}
        </div>
        <div class="settings-row__desc">${w(`cron.runs.conditionActivityHint`)}</div>
      </div>
      <dl class="cron-condition-activity__metrics">
        ${L(w(`cron.runs.checks`),String(e.checkCount))}
        ${L(w(`cron.runs.lastChecked`),t)}
        ${L(w(`cron.runs.lastFired`),n)}
      </dl>
    </div>
  `}function tn(e){if(e.checkCount===0)return w(`cron.runs.emptyConditionUnchecked`);let t=e.checkCount===1?`cron.runs.emptyConditionHintOne`:`cron.runs.emptyConditionHint`;return w(t,{count:String(e.checkCount)})}function nn(){return[{value:`ok`,label:w(`cron.runs.runStatusOk`)},{value:`error`,label:w(`cron.runs.runStatusError`)},{value:`skipped`,label:w(`cron.runs.runStatusSkipped`)}]}function rn(){return[{value:`delivered`,label:w(`cron.runs.deliveryDelivered`)},{value:`not-delivered`,label:w(`cron.runs.deliveryNotDelivered`)},{value:`unknown`,label:w(`cron.runs.deliveryUnknown`)},{value:`not-requested`,label:w(`cron.runs.deliveryNotRequested`)}]}function an(e,t,n){let r=new Set(e);return n?r.add(t):r.delete(t),Array.from(r)}function on(e,t){return e.length===0?t:e.length<=2?e.join(`, `):`${e[0]} +${e.length-1}`}function sn(e){let t=e.options.filter(t=>e.selected.includes(t.value)).map(e=>e.label),n=t.length>2?`${e.summary} (${new Intl.ListFormat(Ae.getLocale(),{style:`long`,type:`conjunction`}).format(t)})`:e.summary;return v`
    <div class="cron-filter-dropdown" data-filter=${e.id}>
      <wa-dropdown
        class="cron-filter-dropdown__details"
        placement="bottom-start"
        @wa-select=${t=>{let n=t.detail.item.value;if(n===`${z}clear`){e.onClear();return}if(n?.startsWith(R)){t.preventDefault();let r=n.slice(7);e.onToggle(r,!e.selected.includes(r))}}}
      >
        <button
          slot="trigger"
          type="button"
          class="btn btn--sm cron-filter-dropdown__trigger ${e.selected.length>0?`active`:``}"
          title=${e.title}
          aria-label=${`${e.title} ${n}`}
        >
          <span>${e.summary}</span>
          ${S(`chevronDown`)}
        </button>
        ${e.options.map(t=>v`
            <wa-dropdown-item
              class="cron-filter-dropdown__option"
              type="checkbox"
              value=${`${R}${t.value}`}
              .checked=${e.selected.includes(t.value)}
            >
              ${t.label}
            </wa-dropdown-item>
          `)}
        <div class="session-menu__separator" role="separator"></div>
        <wa-dropdown-item value=${`${z}clear`}>
          ${w(`cron.runs.clear`)}
        </wa-dropdown-item>
      </wa-dropdown>
    </div>
  `}function cn(e){let t=e.runs.toSorted((t,n)=>e.runsSortDir===`asc`?t.ts-n.ts:n.ts-t.ts),n=e.runsQuery.trim().length>0||e.runsStatuses.length>0||e.runsDeliveryStatuses.length>0,r=nn(),i=rn(),a=r.filter(t=>e.runsStatuses.includes(t.value)).map(e=>e.label),o=i.filter(t=>e.runsDeliveryStatuses.includes(t.value)).map(e=>e.label),s=on(a,w(`cron.runs.allStatuses`)),c=on(o,w(`cron.runs.allDelivery`)),l=e.runsSortDir===`asc`?w(`cron.runs.oldestFirst`):w(`cron.runs.newestFirst`);return v`
    <div class="cron-runs">
      ${e.conditionActivity?en(e.conditionActivity):b}
      <div class="cron-run-filters">
        <div class="cron-search-box cron-run-filter-search">
          <span class="cron-search-box__icon" aria-hidden="true">${S(`search`)}</span>
          <input
            type="search"
            class="settings-input"
            .value=${e.runsQuery}
            aria-label=${w(`cron.runs.searchRuns`)}
            placeholder=${w(`cron.runs.searchPlaceholder`)}
            @input=${t=>e.onRunsFiltersChange({cronRunsQuery:t.target.value})}
          />
        </div>
        ${sn({id:`status`,title:w(`cron.runs.status`),summary:s,options:r,selected:e.runsStatuses,onToggle:(t,n)=>{let r=an(e.runsStatuses,t,n);e.onRunsFiltersChange({cronRunsStatuses:r})},onClear:()=>{e.onRunsFiltersChange({cronRunsStatuses:[]})}})}
        ${sn({id:`delivery`,title:w(`cron.runs.delivery`),summary:c,options:i,selected:e.runsDeliveryStatuses,onToggle:(t,n)=>{let r=an(e.runsDeliveryStatuses,t,n);e.onRunsFiltersChange({cronRunsDeliveryStatuses:r})},onClear:()=>{e.onRunsFiltersChange({cronRunsDeliveryStatuses:[]})}})}
        <div class="cron-filter-dropdown">
          <wa-dropdown
            class="cron-filter-dropdown__details"
            placement="bottom-start"
            @wa-select=${t=>{let n=t.detail.item.value;(n===`asc`||n===`desc`)&&e.onRunsFiltersChange({cronRunsSortDir:n})}}
          >
            <button
              slot="trigger"
              type="button"
              class="btn btn--sm cron-filter-dropdown__trigger cron-run-sort"
              aria-label=${`${w(`cron.jobs.sort`)} ${l}`}
            >
              <span>${l}</span>
              ${S(`chevronDown`)}
            </button>
            <wa-dropdown-item value="desc" aria-current=${String(e.runsSortDir===`desc`)}>
              ${w(`cron.runs.newestFirst`)}
              <span slot="details" aria-hidden="true">
                ${e.runsSortDir===`desc`?S(`check`):b}
              </span>
            </wa-dropdown-item>
            <wa-dropdown-item value="asc" aria-current=${String(e.runsSortDir===`asc`)}>
              ${w(`cron.runs.oldestFirst`)}
              <span slot="details" aria-hidden="true">
                ${e.runsSortDir===`asc`?S(`check`):b}
              </span>
            </wa-dropdown-item>
          </wa-dropdown>
        </div>
      </div>
      ${t.length===0?n?v`<div class="muted cron-runs__empty">${w(`cron.runs.noMatching`)}</div>`:v`
                <div class="cron-empty-state">
                  <div class="cron-empty-state__title">
                    ${e.conditionActivity?w(`cron.runs.emptyConditionTitle`):w(`cron.runs.emptyTitle`)}
                  </div>
                  <div class="cron-empty-state__copy">
                    ${e.conditionActivity?tn(e.conditionActivity):w(`cron.runs.emptyHint`)}
                  </div>
                </div>
              `:v`
              <div class="cron-runs__list">
                ${t.map(t=>fn(t,e.agentId,e.basePath,e.highlightedRunId,e.onNavigateToChat))}
              </div>
            `}
      ${e.runsHasMore?v`
              <button
                class="btn btn--sm cron-load-more"
                ?disabled=${e.runsLoadingMore}
                @click=${e.onLoadMoreRuns}
              >
                ${e.runsLoadingMore?w(`cron.list.loading`):w(`cron.runs.loadMore`)}
              </button>
            `:b}
    </div>
  `}function ln(e,t=Date.now()){let n=g(e);return w(e>t?`cron.runEntry.next`:`cron.runEntry.due`,{rel:n})}function un(e){switch(e){case`ok`:return w(`cron.runs.runStatusOk`);case`error`:return w(`cron.runs.runStatusError`);case`skipped`:return w(`cron.runs.runStatusSkipped`);default:return w(`cron.runs.runStatusUnknown`)}}function dn(e){switch(e){case`delivered`:return w(`cron.runs.deliveryDelivered`);case`not-delivered`:return w(`cron.runs.deliveryNotDelivered`);case`not-requested`:return w(`cron.runs.deliveryNotRequested`);default:return w(`cron.runs.deliveryUnknown`)}}function fn(e,t,n,r,i){let a=typeof e.sessionKey==`string`&&e.sessionKey.trim().length>0?re({face:`chat`,sessionKey:e.sessionKey,fallbackAgentId:t,basePath:n}).href:null,o=un(e.status??`unknown`),s=dn(e.deliveryStatus??`not-requested`),c=e.usage,l=c&&typeof c.total_tokens==`number`?`${h(c.total_tokens)} ${w(`usage.metrics.tokens`)}`:c&&typeof c.input_tokens==`number`&&typeof c.output_tokens==`number`?`${h(c.input_tokens)} in / ${h(c.output_tokens)} out`:null,u=e.summary||f(e.error)||w(`cron.runEntry.noSummary`),p=!!e.error&&!!e.summary,m=f(e.deliverySuppressionReason),te=[s,m?w(`cron.runEntry.deliverySuppression`,{reason:m}):null,e.model,e.provider,l].filter(Boolean),ne=!!(r&&Kt(r,e));return v`
    <div class="cron-run-entry ${ne?`cron-run-entry--highlighted`:``}">
      <div class="cron-run-entry__header">
        <div class="cron-run-entry__main">
          <div class="cron-run-entry__title">
            ${e.jobName??e.jobId}
            <span class="muted"> · ${o}</span>
          </div>
          <div class="cron-run-entry__facts muted">${te.join(` · `)}</div>
        </div>
        <div class="cron-run-entry__meta">
          <div>${d(e.ts)}</div>
          ${typeof e.runAtMs==`number`?v`<div class="muted">
                  ${w(`cron.runEntry.runAt`)} ${d(e.runAtMs)}
                </div>`:b}
          <div class="muted">
            ${typeof e.durationMs==`number`&&Number.isFinite(e.durationMs)?ie(e.durationMs)??de(e.durationMs,w(`common.na`)):w(`common.na`)}
          </div>
          ${typeof e.nextRunAtMs==`number`?v`<div class="muted">${ln(e.nextRunAtMs)}</div>`:b}
          ${a?v`<div>
                  <a
                    class="session-link"
                    href=${a}
                    @click=${t=>{ee(t)&&i&&e.sessionKey&&(t.preventDefault(),i(e.sessionKey))}}
                    >${w(`cron.runEntry.openRunChat`)}</a
                  >
                </div>`:b}
          ${p?v`<div class="muted">${f(e.error)}</div>`:b}
          ${e.deliveryError?v`<div class="muted">${f(e.deliveryError)}</div>`:b}
        </div>
      </div>
      <div class="cron-run-entry__body chat-text">
        ${ve(We(u))}
      </div>
    </div>
  `}var R,z;function pn(){return(pn=e((()=>{_(),be(),Oe(),Me(),it(),C(),m(),se(),l(),M(),R=`option:`,z=`command:`})))()}function mn(e){return[{value:`last`,label:`last`,kind:`neutral`},...o(e.channels.filter(Boolean)).map(t=>({value:t,label:e.channelMeta?.find(e=>e.id===t)?.label||e.channelLabels?.[t]||t}))]}function B(e,t){let r=o(n(t));return r.length===0?b:v`<datalist id=${e}>
        ${r.map(e=>v`<option value=${e}></option> `)}
      </datalist>`}function V(e){return`cron-error-${e}`}function H(e){return`cron-${e.replace(/[A-Z]/g,e=>`-${e.toLowerCase()}`)}`}function hn(e,t,n){return e===`payloadText`&&t.payloadKind===`systemEvent`?w(`cron.form.mainTimelineMessage`):w(e===`deliveryTo`&&n===`webhook`?`cron.form.webhookUrl`:Q[e])}function gn(e,t,n){return Object.keys(Q).flatMap(r=>{let i=e[r];return i?[{key:r,label:hn(r,t,n),message:i,inputId:H(r)}]:[]})}function _n(e){let t=document.getElementById(e);t instanceof HTMLElement&&(typeof t.scrollIntoView==`function`&&t.scrollIntoView({block:`center`,behavior:yt()}),t.focus())}function vn(e,t){return e?v`<div id=${x(t)} class="cron-help cron-error">${w(e)}</div>`:b}function yn(e){return v`
    ${e}
    <span class="cron-required-marker" aria-hidden="true">*</span>
    <span class="cron-required-sr">${w(`cron.form.requiredSr`)}</span>
  `}function U(e){let t=e.wide?`cron-control cron-control--wide`:`cron-control`,n=e.error?v`<div class=${t}>
        ${e.control}${vn(e.error,e.errorId)}
      </div>`:v`<div class=${t}>${e.control}</div>`;return v`
    <div class=${e.stacked?`settings-row settings-row--stacked`:`settings-row`}>
      <label class="settings-row__text" for=${x(e.controlId||void 0)}>
        <span class="settings-row__title">
          ${e.required?yn(e.label):e.label}
        </span>
        ${e.help?v`<span class="settings-row__desc">${e.help}</span>`:b}
      </label>
      <div class="settings-row__control">${n}</div>
    </div>
  `}function W(e,t,n){let r=n.errorKey?e.fieldErrors[n.errorKey]:void 0,i=r&&n.errorKey&&n.describeError!==!1?V(n.errorKey):void 0;return v`
    <input
      id=${H(t)}
      class=${n.mono?`settings-input mono`:`settings-input`}
      type=${x(n.type)}
      aria-required=${x(n.required?`true`:void 0)}
      .value=${e.form[t]}
      list=${x(n.list)}
      ?disabled=${n.disabled??!1}
      aria-invalid=${x(n.errorKey?r?`true`:`false`:void 0)}
      aria-describedby=${x(i)}
      placeholder=${x(n.placeholder)}
      @input=${n=>e.onFormChange({[t]:n.currentTarget.value})}
    />
  `}function G(e,t,n){let r=n.errorKey;return U({label:n.label,controlId:H(t),required:n.required,help:n.help,error:r?e.fieldErrors[r]:void 0,errorId:r?V(r):void 0,control:W(e,t,n)})}function K(e,t,n){let r=n.value??e.form[t];return(n.channel?xt:Ct)({id:n.standalone?void 0:H(t),label:n.label,value:n.channel?r||`last`:r,options:n.options,disabled:n.disabled,onChange:n=>e.onFormChange({[t]:n})})}function q(e,t,n){return U({label:n.label,controlId:H(t),help:n.help,control:K(e,t,n)})}function J(e,t,n){return pt({title:n.label,description:n.help,checked:e.form[t],onChange:n=>e.onFormChange({[t]:n})})}function bn(e){let t=e.editingJob?`job`:e.createOpen?`create`:`overview`;return v`
    ${t===`overview`?Sn(e):Fn(e,t)}
    ${B(`cron-agent-suggestions`,e.agentSuggestions)}
    ${B(`cron-thinking-suggestions`,e.thinkingSuggestions)}
    ${B(`cron-tz-suggestions`,e.timezoneSuggestions)}
    ${B(`cron-delivery-to-suggestions`,e.deliveryToSuggestions)}
    ${B(`cron-delivery-account-suggestions`,e.accountSuggestions)}
  `}function xn(e){return e.canManage?b:v`<div class="cron-admin-note" role="note">
        <span aria-hidden="true">${S(`lock`)}</span>
        <span>${w(`cron.adminRequired`)}</span>
      </div>`}function Sn(e){let t=e.jobsScheduleKindFilter!==`all`||e.jobsLastStatusFilter!==`all`||e.jobsTriggerFilter!==`all`||e.jobsSortBy!==`nextRunAtMs`||e.jobsSortDir!==`asc`,n=t||e.jobsQuery.trim().length>0||e.jobsEnabledFilter!==`all`,r=!e.loading&&e.hasLoaded&&!e.listError&&!e.error&&e.jobsTotal===0&&!n&&e.canManage,i=[v`
      <div class="cron-overview-header">
        ${xn(e)}
        ${e.status&&!e.status.enabled?v`
                <div class="cron-error-banner" data-test-id="cron-scheduler-banner">
                  <strong>${w(`cron.list.schedulerOff`)}</strong>
                  ${w(`cron.runNotStarted.stopped`)}
                </div>
              `:b}
        ${e.listError?v`<div class="cron-error-banner" role="alert">${e.listError}</div>`:b}
        ${e.error?v`<div class="cron-error-banner" role="alert">${e.error}</div>`:b}
        ${wn(e,t)}
      </div>
    `,v`
      <div
        id="cron-list-panel"
        class="cron-tab-panel"
        role="tabpanel"
        aria-labelledby=${`cron-list-tab-${e.listTab===`activity`?`activity`:e.jobsEnabledFilter}`}
      >
        ${e.listTab===`activity`?A({},v`<div class="cron-activity">${cn(e)}</div>`):[A({},En(e,n)),r?Pn(e):b]}
      </div>
    `];return v`
    <section class="cron-page" data-panel-mode="overview">
      ${dt(i,{wide:!0})}
    </section>
  `}function Cn(e){return N({value:e.listTab===`activity`?`activity`:e.jobsEnabledFilter,options:[...Jn.map(e=>({value:e.value,label:w(e.labelKey),testId:`cron-tab-${e.value}`})),{value:`activity`,label:w(`cron.list.activityTab`),testId:`cron-list-tab-activity`}],ariaLabel:w(`cron.list.viewLabel`),tabs:{id:`cron-list`,panelId:`cron-list-panel`},onChange:t=>{if(t===`activity`){e.onListTabChange(`activity`);return}e.onListTabChange(`tasks`),t!==e.jobsEnabledFilter&&e.onJobsFiltersChange({cronJobsEnabledFilter:t})}})}function wn(e,t){return v`
    <div class="cron-toolbar">
      ${e.listTab===`tasks`?v`
              <div class="cron-toolbar__filters">
                <div class="cron-search-box">
                  <span class="cron-search-box__icon" aria-hidden="true">${S(`search`)}</span>
                  <input
                    type="search"
                    class="settings-input"
                    .value=${e.jobsQuery}
                    aria-label=${w(`cron.list.searchPlaceholder`)}
                    placeholder=${w(`cron.list.searchPlaceholder`)}
                    @input=${t=>e.onJobsFiltersChange({cronJobsQuery:t.target.value})}
                  />
                </div>
                ${Tn(e,t)}
              </div>
            `:b}
      <div class="cron-toolbar__primary">
        ${Cn(e)}
        <div class="cron-toolbar__actions">
          <button
            type="button"
            class="btn btn--sm btn--ghost cron-refresh ${e.loading?`cron-refresh--loading`:``}"
            ?disabled=${e.loading}
            title=${e.loading?w(`cron.list.refreshing`):w(`cron.list.refresh`)}
            aria-label=${w(`cron.list.refresh`)}
            @click=${e.onRefresh}
          >
            ${S(`refresh`)}
          </button>
          ${e.canManage?v`
                  <button
                    type="button"
                    class="btn primary btn--sm cron-new-task"
                    data-test-id="cron-new-task"
                    @click=${()=>e.onOpenCreate()}
                  >
                    ${S(`plus`)} ${w(`cron.list.newTask`)}
                  </button>
                `:b}
        </div>
      </div>
    </div>
  `}function Y(e,t,n){return v`
    <label class="field">
      <span>${n.label}</span>
      <select
        class="settings-select"
        data-test-id=${x(n.testId)}
        .value=${n.value}
        @change=${n=>e.onJobsFiltersChange({[t]:n.currentTarget.value})}
      >
        ${n.options.map(({value:e,label:t})=>v`<option value=${e} ?selected=${e===n.value}>${t}</option>`)}
      </select>
    </label>
  `}function Tn(e,t){return v`
    <button
      id="cron-jobs-filter-trigger"
      type="button"
      class="btn btn--sm cron-filter-popover__trigger ${t?`active`:``}"
      title=${w(`cron.list.filters`)}
      aria-label=${w(`cron.list.filters`)}
      aria-haspopup="dialog"
      aria-expanded="false"
    >
      ${S(`listFilter`)}
    </button>
    <wa-popover
      class="cron-filter-popover"
      for="cron-jobs-filter-trigger"
      placement="bottom-end"
      without-arrow
      @wa-show=${e=>{e.currentTarget.previousElementSibling?.setAttribute(`aria-expanded`,`true`)}}
      @wa-hide=${e=>{e.currentTarget.previousElementSibling?.setAttribute(`aria-expanded`,`false`)}}
    >
      <div class="cron-filter-popover__panel">
        ${Y(e,`cronJobsScheduleKindFilter`,{label:w(`cron.jobs.schedule`),value:e.jobsScheduleKindFilter,testId:`cron-jobs-schedule-filter`,options:Object.entries(Yn).map(([e,t])=>({value:e,label:w(t)}))})}
        ${Y(e,`cronJobsLastStatusFilter`,{label:w(`cron.jobs.lastRun`),value:e.jobsLastStatusFilter,testId:`cron-jobs-last-status-filter`,options:[{value:`all`,label:w(`cron.jobs.all`)},{value:`ok`,label:w(`cron.runs.runStatusOk`)},{value:`error`,label:w(`cron.runs.runStatusError`)},{value:`skipped`,label:w(`cron.runs.runStatusSkipped`)},{value:`unknown`,label:w(`cron.runs.runStatusUnknown`)}]})}
        ${Y(e,`cronJobsTriggerFilter`,{label:w(`cron.jobs.condition`),value:e.jobsTriggerFilter,testId:`cron-jobs-trigger-filter`,options:[{value:`all`,label:w(`cron.jobs.all`)},{value:`conditional`,label:w(`cron.jobs.conditional`)},{value:`unconditional`,label:w(`cron.jobs.unconditional`)}]})}
        ${Y(e,`cronJobsSortBy`,{label:w(`cron.jobs.sort`),value:e.jobsSortBy,options:[{value:`nextRunAtMs`,label:w(`cron.jobs.nextRun`)},{value:`updatedAtMs`,label:w(`cron.jobs.recentlyUpdated`)},{value:`name`,label:w(`cron.jobs.name`)}]})}
        ${Y(e,`cronJobsSortDir`,{label:w(`cron.jobs.direction`),value:e.jobsSortDir,options:[{value:`asc`,label:w(`cron.jobs.ascending`)},{value:`desc`,label:w(`cron.jobs.descending`)}]})}
        <button
          class="btn btn--sm"
          data-test-id="cron-jobs-filters-reset"
          ?disabled=${!t}
          @click=${e.onJobsFiltersReset}
        >
          ${w(`cron.jobs.reset`)}
        </button>
      </div>
    </wa-popover>
  `}function En(e,t){let n=e.loading&&!e.hasLoaded,r=e.loading||e.jobsLoadingMore,i=e.jobs.toSorted((e,t)=>Number(T(t))-Number(T(e)));return v`
    <div
      class="cron-table ${e.canManage?``:`cron-table--read-only`}"
      aria-busy=${r?`true`:b}
    >
      <div class="cron-table__head">
        <span>${w(`cron.jobs.name`)}</span>
        <span>${w(`cron.jobs.schedule`)}</span>
        <span>${w(`cron.jobs.nextRun`)}</span>
        <span>${w(`cron.jobs.lastRun`)}</span>
        ${e.canManage?v`<span aria-hidden="true"></span>`:b}
      </div>
      ${i.length===0?n?v`
                <div
                  class="cron-empty-state"
                  role="status"
                  aria-live="polite"
                  data-test-id="cron-jobs-loading"
                >
                  <div class="cron-empty-state__title">${w(`cron.list.loading`)}</div>
                </div>
              `:e.hasLoaded?v`
                  <div class="cron-empty-state">
                    <div class="cron-empty-state__title">
                      ${w(t?`cron.list.noMatching`:`cron.list.emptyTitle`)}
                    </div>
                    ${t?b:v`<div class="cron-empty-state__copy">
                            ${w(`cron.list.emptyHint`)}
                          </div>`}
                  </div>
                `:b:ge(i,e=>e.id,t=>Dn(t,e))}
      ${jt({jobsShown:e.jobs.length,jobsTotal:e.jobsTotal,hasMore:e.jobsHasMore,loading:e.loading,loadingMore:e.jobsLoadingMore,onLoadMore:e.onLoadMoreJobs})}
    </div>
  `}function Dn(e,t){let n=e.description?.trim(),r=j(e.payload.kind),i=e.state?.nextRunAtMs,a=typeof i==`number`&&Number.isFinite(i),o=Ge(e)?v`<span class="cron-table__running">${w(`cron.runs.runStatusRunning`)}</span>`:a?g(i):w(`common.na`);return v`
    <div
      class="cron-table__row ${e.enabled?``:`cron-table__row--paused`}"
      data-test-id=${`cron-row-${e.id}`}
      @click=${()=>t.onSelectJob(e)}
    >
      <button type="button" class="cron-table__name">
        ${On(e)}
        <span class="cron-table__name-copy">
          <span class="cron-table__name-line">
            <span class="cron-table__name-text">${e.name}</span>
            ${e.trigger?kn():b}
          </span>
          ${n||!e.enabled?v`
                  <span class="cron-table__name-meta">
                    ${n?v`
                            <span
                              class="cron-table__description"
                              data-test-id=${`cron-row-description-${e.id}`}
                              title=${`${w(`cron.form.description`)}: ${n}`}
                              >${n}</span
                            >
                          `:b}
                    ${n&&!e.enabled?v`<span class="cron-table__meta-separator" aria-hidden="true">·</span>`:b}
                    ${e.enabled?b:An(e)}
                  </span>
                `:b}
        </span>
      </button>
      ${X(`cron-table__schedule`,w(`cron.jobs.schedule`),Nt(e))}
      ${X(`cron-table__next`,w(`cron.jobs.nextRun`),o)}
      ${X(`cron-table__last`,w(`cron.jobs.lastRun`),Mn(e))}
      ${t.canManage?v`
              <span class="cron-table__actions" @click=${e=>e.stopPropagation()}>
                <button
                  type="button"
                  class="btn btn--sm btn--ghost cron-row-run"
                  data-test-id=${`cron-row-run-${e.id}`}
                  title=${w(`cron.actions.runNowJob`,{name:e.name})}
                  aria-label=${w(`cron.actions.runNowJob`,{name:e.name})}
                  ?disabled=${t.busy}
                  @click=${()=>t.onRun(e,`force`)}
                >
                  ${S(`play`)}
                </button>
                ${r?b:Ln(t,e,{compact:!0,testId:`cron-row-toggle-${e.id}`})}
                ${Nn(t,e)}
              </span>
            `:b}
    </div>
  `}function X(e,t,n){return v`<span class="cron-table__cell ${e}">
    <span class="cron-table__cell-label">${t}</span>
    <span class="cron-table__cell-value">${n}</span>
  </span>`}function On(e){let t=e.state?.autoDisabled,n=Ge(e)?{className:`cron-table__state--running`,iconName:`loader`,label:w(`cron.runs.runStatusRunning`)}:t?{className:`cron-table__state--error`,iconName:`lock`,label:jn(e)}:T(e)?{className:`cron-table__state--error`,iconName:`alertTriangle`,label:w(`cron.runs.runStatusError`)}:e.enabled?{className:`cron-table__state--active`,iconName:null,label:w(`cron.detail.active`)}:{className:`cron-table__state--paused`,iconName:`pause`,label:w(`cron.list.paused`)};return v`<span
    class="cron-table__state ${n.className}"
    role="img"
    aria-label=${n.label}
    title=${n.label}
    >${n.iconName?S(n.iconName):v`<span class="cron-table__state-dot"></span>`}</span
  >`}function kn(){let e=w(`cron.form.triggerConfigured`);return v`<span class="cron-trigger-icon" role="img" aria-label=${e} title=${e}
    >${S(`gitBranch`)}</span
  >`}function An(e){if(!e.state?.autoDisabled)return v`<span class="muted cron-table__paused-note">${w(`cron.list.paused`)}</span>`;let t=jn(e),n=e.state?.lastError?.trim();return v`<span
    class="cron-table__paused-note cron-table__auto-disabled"
    data-test-id=${`cron-row-auto-disabled-${e.id}`}
    title=${n?f(n):t}
    >${t}</span
  >`}function jn(e){let t=e.state?.autoDisabled;return t?w(t.reason===`schedule-errors`?`cron.list.autoDisabledScheduleErrors`:`cron.list.autoDisabledRunFailures`,{count:String(t.consecutiveErrors)}):w(`cron.list.paused`)}function Mn(e){let t=nt(e),n=e.state?.lastRunAtMs,r=typeof n==`number`&&Number.isFinite(n)?g(n):null;if(t===`unknown`||!r)return v`<span class="muted">${w(`common.na`)}</span>`;let i=t===`ok`?v`<span class="cron-last-glyph cron-last-glyph--ok">${S(`check`)}</span>`:t===`error`?v`<span class="cron-last-glyph cron-last-glyph--error">${S(`x`)}</span>`:v`<span class="cron-last-glyph">${S(`cornerDownRight`)}</span>`,a=un(t);return v`
    <span class="cron-table__last-run" role="img" aria-label=${a} title=${a}>
      ${i}
      <span class="cron-table__last-time">${r}</span>
    </span>
  `}function Nn(e,t){if(!e.canManage)return b;let n=j(t.payload.kind);return v`
    <wa-dropdown
      class="cron-job-menu"
      placement="bottom-end"
      @wa-select=${r=>{if(e.canManage)switch(r.detail.item.value){case`run-if-due`:e.onRun(t,`due`);break;case`clone`:n||e.onClone(t);break;case`remove`:n||e.onRemove(t);break;case void 0:}}}
    >
      <button
        slot="trigger"
        type="button"
        class="btn btn--sm btn--ghost cron-job-menu__trigger"
        aria-label=${w(`cron.actions.moreJob`,{name:t.name})}
        title=${w(`cron.actions.moreJob`,{name:t.name})}
      >
        ${S(`moreHorizontal`)}
      </button>
      ${Z(e,`run-if-due`,w(`cron.actions.runIfDue`))}
      ${n?b:Z(e,`clone`,w(`cron.actions.clone`))}
      ${n?b:Z(e,`remove`,w(`cron.actions.remove`),{danger:!0})}
    </wa-dropdown>
  `}function Pn(e){return A({title:w(`cron.suggestions.title`)},Qt.map(t=>v`
        <button
          type="button"
          class="settings-row settings-row--nav cron-suggestion"
          data-suggestion=${t.id}
          @click=${()=>e.onOpenCreate(Yt(t))}
        >
          <div class="settings-row__text">
            <span class="settings-row__title">
              <span aria-hidden="true">${t.emoji}</span> ${w(t.nameKey)}
            </span>
            <span class="settings-row__desc">${w(t.taglineKey)}</span>
          </div>
          <div class="settings-row__control">
            <span class="settings-row__value">${w(t.scheduleKey)}</span>
            <span class="settings-row__chevron">${je.chevronRight}</span>
          </div>
        </button>
      `))}function Fn(e,t){let n=t===`job`?e.editingJob??void 0:void 0,r=t===`job`&&!!n,i=t===`job`&&e.detailTab===`history`,a=n?.trigger?{checkCount:n.state?.triggerEvalCount??0,lastCheckedAtMs:n.state?.lastTriggerEvalAtMs,lastFiredAtMs:n.state?.lastTriggerFireAtMs}:void 0,o=[v`
      <div class="cron-back-row">
        <button
          type="button"
          class="cron-back"
          data-test-id="cron-back"
          ?disabled=${e.busy}
          @click=${e.onClosePanel}
        >
          ${S(`arrowLeft`)} ${w(`cron.detail.back`)}
        </button>
      </div>
    `,In(e,t,n),xn(e),r?Rn(e):b,e.error?v`<div class="cron-error-banner">${e.error}</div>`:b,v`
      <div
        id="cron-detail-panel"
        class="cron-tab-panel"
        role=${r?`tabpanel`:b}
        aria-labelledby=${r?`cron-detail-tab-${e.detailTab}`:b}
      >
        ${i?A({title:w(`cron.detail.historyTitle`)},v`<div class="cron-history">
                  ${cn({...e,conditionActivity:a})}
                </div>`):zn(e,t)}
      </div>
    `];return v`
    <section class="cron-page cron-page--detail" data-panel-mode=${t}>
      ${dt(o,{wide:!0})}
    </section>
  `}function In(e,t,n){let r=t===`job`?n?.name??e.form.name:w(`cron.detail.newTitle`),i=t===`job`?n?.description?.trim():void 0,a=j(n?.payload.kind),o=n?.state?.nextRunAtMs,s=typeof o==`number`&&Number.isFinite(o)?` · ${w(`cron.jobState.next`)} ${g(o)}`:``,c=t===`job`&&n?`${Nt(n)}${s}`:w(`cron.detail.newSubtitle`);return v`
    <div class="cron-detail-header">
      <div class="cron-detail-header__copy">
        <div class="cron-detail-title">${r}</div>
        ${i?v`<div class="cron-detail-description" data-test-id="cron-detail-description">
                <span class="cron-detail-description__label">${w(`cron.form.description`)}:</span>
                ${i}
              </div>`:b}
        <div class="cron-detail-meta">
          ${t===`job`&&n&&e.canManage&&!a?Ln(e,n):b}
          <span class="cron-detail-sub">${c}</span>
          ${n?.trigger?kn():b}
        </div>
      </div>
      <div class="cron-detail-actions">
        ${t===`job`&&n&&e.canManage?v`
                <button
                  type="button"
                  class="btn btn--sm"
                  data-test-id="cron-run-now"
                  ?disabled=${e.busy}
                  @click=${()=>e.onRun(n,`force`)}
                >
                  ${S(`play`)} ${w(`cron.actions.runNow`)}
                </button>
                ${Nn(e,n)}
              `:b}
      </div>
    </div>
  `}function Ln(e,t,n){let r=t.enabled?w(`cron.detail.active`):w(`cron.detail.paused`),i=w(t.enabled?`cron.actions.pauseJob`:`cron.actions.resumeJob`,{name:t.name});return v`
    <span
      class="cron-enabled-toggle"
      data-test-id=${n?.testId??`cron-toggle-enabled`}
      title=${n?.compact?i:b}
    >
      ${lt({checked:t.enabled,disabled:e.busy||!e.canManage,ariaLabel:n?.compact?i:r,onChange:n=>{e.canManage&&e.onToggle(t,n)}})}
      ${n?.compact?b:v`<span class="cron-detail-sub">${r}</span>`}
    </span>
  `}function Rn(e){return N({value:e.detailTab,options:[{value:`settings`,label:w(`cron.detail.settingsTab`),testId:`cron-detail-tab-settings`},{value:`history`,label:w(`cron.detail.historyTitle`),testId:`cron-detail-tab-history`}],ariaLabel:w(`cron.detail.tabsLabel`),tabs:{id:`cron-detail`,panelId:`cron-detail-panel`,variant:`sub`},onChange:e.onDetailTabChange})}function zn(e,t){let n=e.form.payloadLocked,r=t===`job`&&j(e.editingJob?.payload.kind),i=!n&&e.form.payloadKind===`agentTurn`,a=e.form.sessionTarget!==`main`&&(e.form.payloadKind===`agentTurn`||n),o=e.form.deliveryMode===`announce`&&!a?`none`:e.form.deliveryMode,s=gn(e.fieldErrors,e.form,o),c=e.canManage&&!e.busy&&s.length>0,l=c&&!e.canSubmit?s.length===1?w(`cron.form.fixFields`,{count:String(s.length)}):w(`cron.form.fixFieldsPlural`,{count:String(s.length)}):``;return v`
    <fieldset
      class="cron-editor"
      ?disabled=${e.busy||!e.canManage||r}
      aria-busy=${String(e.busy)}
    >
      ${Bn(e,{payloadLocked:n,isAgentTurn:i})} ${Vn(e)}
      ${Un(e)}
      ${Wn(e,{supportsAnnounce:a,selectedDeliveryMode:o})}
      ${Gn(e,{mode:t,isAgentTurn:i,selectedDeliveryMode:o})}
      ${c?v`
              <div class="cron-form-status" role="status" aria-live="polite">
                <div class="cron-form-status__title">${w(`cron.form.cantAddYet`)}</div>
                <div class="cron-help">${w(`cron.form.fillRequired`)}</div>
                <ul class="cron-form-status__list">
                  ${s.map(e=>v`
                      <li>
                        <button
                          type="button"
                          class="cron-form-status__link"
                          @click=${()=>_n(e.inputId)}
                        >
                          ${e.label}: ${w(e.message)}
                        </button>
                      </li>
                    `)}
                </ul>
              </div>
            `:b}
      ${e.canManage&&!r?v`
              <div class="cron-editor-actions">
                <button
                  class="btn primary"
                  data-test-id="cron-submit"
                  ?disabled=${e.busy||!e.canSubmit}
                  @click=${e.onSubmit}
                >
                  ${e.busy?w(`cron.form.saving`):w(t===`job`?`cron.form.saveChanges`:`cron.form.createTask`)}
                </button>
                ${t===`create`?v`
                        <button
                          class="btn"
                          data-test-id="cron-submit-run"
                          ?disabled=${e.busy||!e.canSubmit}
                          @click=${e.onSubmitRunNow}
                        >
                          ${w(`cron.form.createAndRun`)}
                        </button>
                      `:b}
                <button class="btn" ?disabled=${e.busy} @click=${e.onClosePanel}>
                  ${w(`cron.form.cancel`)}
                </button>
                ${l?v`<div class="cron-submit-reason" aria-live="polite">
                        ${l}
                      </div>`:b}
              </div>
            `:b}
    </fieldset>
  `}function Z(e,t,n,r){return v`
    <wa-dropdown-item
      class=${r?.danger?`cron-job-menu__item danger`:`cron-job-menu__item`}
      value=${t}
      variant=${r?.danger?`danger`:`default`}
      ?disabled=${e.busy||!e.canManage}
    >
      ${n}
    </wa-dropdown-item>
  `}function Bn(e,t){let n=e.form.payloadKind===`script`?w(`cron.form.script`):e.form.payloadKind===`heartbeat`?`Heartbeat monitor`:e.form.payloadKind===`skillCollectionReview`?`Skill collection review`:w(`cron.form.command`),r=t.payloadLocked?n:e.form.payloadKind===`systemEvent`?w(`cron.form.mainTimelineMessage`):w(`cron.form.assistantTaskPrompt`),i=t.payloadLocked?w(`cron.form.readOnlyPayloadHelp`):e.form.payloadKind===`systemEvent`?w(`cron.form.systemEventHelp`):w(`cron.form.agentTurnHelp`),a=t.payloadLocked?Xn[e.form.payloadKind]:``,s=e.form.payloadKind===`heartbeat`?e.heartbeatScratch:e.form.payloadText,c=U({label:r,controlId:a?``:`cron-payload-text`,required:!0,help:i,stacked:!0,wide:!0,error:e.fieldErrors.payloadText,errorId:V(`payloadText`),control:a?v`
          <pre
            id="cron-payload-text"
            class="code-block cron-payload-code"
            data-test-id="cron-payload-code"
            tabindex="0"
            aria-label=${r}
          ><code class="hljs">${ve(Le(s,a))}</code></pre>
        `:v`
          <textarea
            id="cron-payload-text"
            class="settings-input"
            rows="6"
            .value=${s}
            ?readonly=${t.payloadLocked}
            aria-required="true"
            placeholder=${w(`cron.form.promptPlaceholder`)}
            aria-invalid=${e.fieldErrors.payloadText?`true`:`false`}
            aria-describedby=${x(e.fieldErrors.payloadText?V(`payloadText`):void 0)}
            @input=${t=>e.onFormChange({payloadText:t.target.value})}
          ></textarea>
        `}),l=w(`cron.form.action`),u=t.payloadLocked?U({label:l,controlId:H(`payloadKind`),control:v`
          <input
            id=${H(`payloadKind`)}
            class="settings-input"
            .value=${n}
            readonly
          />
        `}):q(e,`payloadKind`,{label:l,options:[{value:`systemEvent`,label:w(`cron.form.systemEvent`)},{value:`agentTurn`,label:w(`cron.form.agentTurn`)}]}),d=w(`cron.form.model`),f=e.fieldErrors.payloadModel,p=o(e.modelSuggestions).map(e=>({value:e,label:e,provider:ot(e)??void 0})),ee=t.isAgentTurn?v`
        ${U({label:d,controlId:``,help:w(`cron.form.modelHelp`),error:f,errorId:V(`payloadModel`),control:kt({id:`cron-payload-model-picker`,label:d,value:e.form.payloadModel,options:[{value:``,label:w(`quickSettings.model.default`)},...p],custom:{id:H(`payloadModel`),label:w(`cron.form.customModel`),placeholder:w(`cron.form.modelPlaceholder`),invalid:!!f,describedBy:f?V(`payloadModel`):void 0},onChange:t=>e.onFormChange({payloadModel:t})})})}
        ${G(e,`payloadThinking`,{label:w(`cron.form.thinking`),help:w(`cron.form.thinkingHelp`),errorKey:`payloadThinking`,describeError:!1,list:`cron-thinking-suggestions`,placeholder:w(`cron.form.thinkingPlaceholder`)})}
      `:b;return A({},v`${c}${u}${ee}`)}function Vn(e){let t=e.form.sessionTarget,n=t===`main`||t===`isolated`;return A({title:w(`cron.detail.generalSection`)},v`
      ${G(e,`name`,{label:w(`cron.form.fieldName`),required:!0,errorKey:`name`,placeholder:w(`cron.form.namePlaceholder`)})}
      ${G(e,`agentId`,{label:w(`cron.form.agentId`),help:w(`cron.form.agentHelp`),list:`cron-agent-suggestions`,disabled:e.form.clearAgent,placeholder:w(`cron.form.agentPlaceholder`)})}
      ${q(e,`sessionTarget`,{label:w(`cron.form.runsIn`),help:w(`cron.form.sessionHelp`),options:[{value:`main`,label:w(`cron.form.mainSession`)},{value:`isolated`,label:w(`cron.form.isolatedSession`)},...n?[]:[{value:t,label:t}]]})}
    `)}function Hn(e){if(e.scheduleKind===`every`){let t=e.everyAmount.trim();if(Fe(t,e.everyUnit)===void 0)return null;if(Number(t)===1){let t=e.everyUnit===`seconds`?`cron.form.summaryEverySecondOne`:e.everyUnit===`minutes`?`cron.form.summaryEveryMinuteOne`:e.everyUnit===`hours`?`cron.form.summaryEveryHourOne`:`cron.form.summaryEveryDayOne`;return w(t)}let n=e.everyUnit===`seconds`?`cron.form.summaryEverySeconds`:e.everyUnit===`minutes`?`cron.form.summaryEveryMinutes`:e.everyUnit===`hours`?`cron.form.summaryEveryHours`:`cron.form.summaryEveryDays`;return w(n,{amount:t})}if(e.scheduleKind===`at`){let t=Date.parse(e.scheduleAt);return Number.isFinite(t)?w(`cron.form.summaryOnce`,{at:d(t)}):null}if(e.scheduleKind===`cron`){let t=e.cronExpr.trim();if(!t)return null;let n=e.cronTz.trim();return n?w(`cron.form.summaryCronTz`,{expr:t,tz:n}):w(`cron.form.summaryCron`,{expr:t})}return e.scheduleKind===`on-exit`?w(`cron.form.repeatOnExit`):e.scheduleKind===`stream`?w(`cron.form.repeatStream`):null}function Un(e){let t=e.form,n=t.scheduleKind===`on-exit`,r=t.scheduleKind===`stream`,i=n?{value:`on-exit`,label:w(`cron.form.repeatOnExit`)}:r?{value:`stream`,label:w(`cron.form.repeatStream`)}:null,a=[...i?[{...i,testId:`cron-schedule-kind-${i.value}`}]:[],{value:`every`,label:w(`cron.form.repeatInterval`),testId:`cron-schedule-kind-every`},{value:`at`,label:w(`cron.form.repeatOnce`),testId:`cron-schedule-kind-at`},{value:`cron`,label:w(`cron.form.cronOption`),testId:`cron-schedule-kind-cron`}],o=Hn(t);return A({title:w(`cron.detail.scheduleSection`)},v`
      ${ut({title:w(`cron.form.repeat`),description:n?w(`cron.form.onExitHelp`):void 0,stacked:!0,control:N({value:t.scheduleKind,options:a,ariaLabel:w(`cron.form.repeat`),onChange:n=>e.onFormChange({scheduleKind:n,...n===`at`&&(t.scheduleKind===`every`||t.scheduleKind===`cron`)?{deleteAfterRun:!0}:n===`every`||n===`cron`?{deleteAfterRun:!1}:{}})})})}
      ${t.scheduleKind===`at`?G(e,`scheduleAt`,{label:w(`cron.form.runAt`),required:!0,errorKey:`scheduleAt`,type:`datetime-local`}):b}
      ${t.scheduleKind===`every`?U({label:w(`cron.form.every`),controlId:`cron-every-amount`,required:!0,error:e.fieldErrors.everyAmount,errorId:V(`everyAmount`),control:v`
                <div class="cron-inline-controls">
                  ${W(e,`everyAmount`,{label:w(`cron.form.every`),required:!0,errorKey:`everyAmount`,placeholder:w(`cron.form.everyAmountPlaceholder`)})}
                  ${K(e,`everyUnit`,{label:w(`cron.form.unit`),standalone:!0,options:[{value:`seconds`,label:w(`cron.form.seconds`)},{value:`minutes`,label:w(`cron.form.minutes`)},{value:`hours`,label:w(`cron.form.hours`)},{value:`days`,label:w(`cron.form.days`)}]})}
                </div>
              `}):b}
      ${t.scheduleKind===`cron`?v`
              ${G(e,`cronExpr`,{label:w(`cron.form.expression`),required:!0,errorKey:`cronExpr`,mono:!0,placeholder:w(`cron.form.expressionPlaceholder`)})}
              ${G(e,`cronTz`,{label:w(`cron.form.timezoneOptional`),help:w(`cron.form.timezoneHelp`),list:`cron-tz-suggestions`,placeholder:w(`cron.form.timezonePlaceholder`)})}
            `:b}
      ${o?v` <div class="cron-schedule-summary">${S(`clock`)}<span>${o}</span></div> `:b}
    `)}function Wn(e,t){let n=mn(e);return A({title:w(`cron.detail.deliverySection`)},v`
      ${q(e,`deliveryMode`,{label:w(`cron.form.deliveryModeLabel`),help:w(`cron.form.deliveryHelp`),value:t.selectedDeliveryMode,options:[...t.supportsAnnounce?[{value:`announce`,label:w(`cron.form.announceDefault`)}]:[],{value:`webhook`,label:w(`cron.form.webhookPost`)},{value:`none`,label:w(`cron.form.noneInternal`)}]})}
      ${t.selectedDeliveryMode===`announce`?v`
              ${q(e,`deliveryChannel`,{label:w(`cron.form.channel`),help:w(`cron.form.channelHelp`),value:e.form.deliveryChannel||`last`,options:n,channel:!0})}
              ${G(e,`deliveryTo`,{label:w(`cron.form.to`),help:w(`cron.form.toHelp`),list:`cron-delivery-to-suggestions`,placeholder:w(`cron.form.toPlaceholder`)})}
            `:b}
      ${t.selectedDeliveryMode===`webhook`?G(e,`deliveryTo`,{label:w(`cron.form.webhookUrl`),required:!0,help:w(`cron.form.webhookHelp`),errorKey:`deliveryTo`,list:`cron-delivery-to-suggestions`,placeholder:w(`cron.form.webhookPlaceholder`)}):b}
    `)}function Gn(e,t){let n=e.form.scheduleKind===`cron`,r=mn(e);return v`
    <section class="settings-section">
      <details class="cron-advanced">
        <summary class="settings-section__heading cron-advanced__summary">
          ${w(`cron.form.advanced`)}
          ${e.form.triggerEnabled?v`<span class="cron-trigger-summary">
                  ${S(`gitBranch`)} ${w(`cron.form.triggerConfigured`)}
                </span>`:b}
        </summary>
        <p class="settings-section__desc">${w(`cron.form.advancedHelp`)}</p>
        <div class="settings-group">
          ${Kn(e)}
          ${G(e,`description`,{label:w(`cron.form.description`),placeholder:w(`cron.form.descriptionPlaceholder`)})}
          ${t.mode===`create`?J(e,`enabled`,{label:w(`cron.form.startEnabled`)}):b}
          ${q(e,`wakeMode`,{label:w(`cron.form.wakeMode`),help:w(`cron.form.wakeModeHelp`),options:[{value:`now`,label:w(`cron.form.now`)},{value:`next-heartbeat`,label:w(`cron.form.nextHeartbeat`)}]})}
          ${t.isAgentTurn?G(e,`timeoutSeconds`,{label:w(`cron.form.timeoutSeconds`),help:w(`cron.form.timeoutHelp`),errorKey:`timeoutSeconds`,placeholder:w(`cron.form.timeoutPlaceholder`)}):b}
          ${e.form.scheduleKind===`at`||e.form.scheduleKind===`on-exit`?J(e,`deleteAfterRun`,{label:w(`cron.form.deleteAfterRun`),help:w(`cron.form.deleteAfterRunHelp`)}):b}
          ${J(e,`clearAgent`,{label:w(`cron.form.clearAgentOverride`),help:w(`cron.form.clearAgentHelp`)})}
          ${U({label:w(`cron.form.sessionKey`),controlId:`cron-session-key`,help:w(`cron.form.sessionKeyHelp`),control:v`
              <input
                id="cron-session-key"
                class="settings-input"
                .value=${e.form.sessionKey}
                placeholder="agent:main:main"
                @input=${t=>e.onFormChange({sessionKey:t.target.value})}
              />
            `})}
          ${n?v`
                  ${J(e,`scheduleExact`,{label:w(`cron.form.exactTiming`),help:w(`cron.form.exactTimingHelp`)})}
                  ${U({label:w(`cron.form.staggerWindow`),controlId:`cron-stagger-amount`,error:e.fieldErrors.staggerAmount,errorId:V(`staggerAmount`),control:v`
                      <div class="cron-inline-controls">
                        ${W(e,`staggerAmount`,{label:w(`cron.form.staggerWindow`),disabled:e.form.scheduleExact,errorKey:`staggerAmount`,placeholder:w(`cron.form.staggerPlaceholder`)})}
                        ${K(e,`staggerUnit`,{label:w(`cron.form.staggerUnit`),standalone:!0,disabled:e.form.scheduleExact,options:[{value:`seconds`,label:w(`cron.form.seconds`)},{value:`minutes`,label:w(`cron.form.minutes`)}]})}
                      </div>
                    `})}
                `:b}
          ${t.isAgentTurn?v`
                  ${U({label:w(`cron.form.accountId`),controlId:`cron-delivery-account-id`,help:w(`cron.form.accountIdHelp`),control:v`
                      <input
                        id="cron-delivery-account-id"
                        class="settings-input"
                        .value=${e.form.deliveryAccountId}
                        list="cron-delivery-account-suggestions"
                        ?disabled=${t.selectedDeliveryMode!==`announce`}
                        placeholder="default"
                        @input=${t=>e.onFormChange({deliveryAccountId:t.target.value})}
                      />
                    `})}
                  ${J(e,`payloadLightContext`,{label:w(`cron.form.lightContext`),help:w(`cron.form.lightContextHelp`)})}
                  ${qn(e,r)}
                `:b}
          ${t.selectedDeliveryMode===`none`?b:J(e,`deliveryBestEffort`,{label:w(`cron.form.bestEffortDelivery`),help:w(`cron.form.bestEffortHelp`)})}
        </div>
      </details>
    </section>
  `}function Kn(e){let t=e.form.payloadKind===`script`;return!t&&e.status===null?b:e.status?.triggersEnabled!==!0||t?ut({title:w(`cron.form.conditionTrigger`),description:t?w(`cron.errors.triggerScriptPayloadUnsupported`):e.form.triggerEnabled?w(`cron.form.triggerDisabledConfigured`):w(`cron.form.triggerDisabled`),control:e.form.triggerEnabled?v`<button
            type="button"
            class="btn btn--sm"
            @click=${()=>e.onFormChange({triggerEnabled:!1})}
          >
            ${w(`cron.form.clearTrigger`)}
          </button>`:b}):v`
    ${J(e,`triggerEnabled`,{label:w(`cron.form.conditionTrigger`),help:w(`cron.form.conditionTriggerHelp`)})}
    ${e.form.triggerEnabled?v`
            ${U({label:w(`cron.form.triggerScript`),controlId:`cron-trigger-script`,required:!0,help:w(`cron.form.triggerScriptHelp`),error:e.fieldErrors.triggerScript,errorId:V(`triggerScript`),stacked:!0,wide:!0,control:v`<textarea
                id="cron-trigger-script"
                class="settings-input cron-trigger-script mono"
                rows="8"
                spellcheck="false"
                aria-invalid=${e.fieldErrors.triggerScript?`true`:`false`}
                aria-describedby=${x(e.fieldErrors.triggerScript?V(`triggerScript`):void 0)}
                .value=${e.form.triggerScript}
                @input=${t=>{let n=t.currentTarget;n instanceof HTMLTextAreaElement&&e.onFormChange({triggerScript:n.value})}}
              ></textarea>`})}
            ${J(e,`triggerOnce`,{label:w(`cron.form.triggerOnce`),help:w(`cron.form.triggerOnceHelp`)})}
          `:b}
  `}function qn(e,t){return v`
    ${q(e,`failureAlertMode`,{label:w(`cron.form.failureAlerts`),help:w(`cron.form.failureAlertsHelp`),options:[{value:`inherit`,label:w(`cron.form.failureAlertInherit`)},{value:`disabled`,label:w(`cron.form.failureAlertDisabled`)},{value:`custom`,label:w(`cron.form.failureAlertCustom`)}]})}
    ${e.form.failureAlertMode===`custom`?v`
            ${G(e,`failureAlertAfter`,{label:w(`cron.form.failureAlertAfter`),help:w(`cron.form.failureAlertAfterHelp`),errorKey:`failureAlertAfter`,placeholder:w(`cron.form.failureAlertInherit`)})}
            ${G(e,`failureAlertCooldownSeconds`,{label:w(`cron.form.failureAlertCooldown`),help:w(`cron.form.failureAlertCooldownHelp`),errorKey:`failureAlertCooldownSeconds`,placeholder:w(`cron.form.failureAlertInherit`)})}
            ${q(e,`failureAlertChannel`,{label:w(`cron.form.failureAlertChannel`),value:e.form.failureAlertChannel||`last`,options:t,channel:!0})}
            ${G(e,`failureAlertTo`,{label:w(`cron.form.failureAlertTo`),help:w(`cron.form.failureAlertToHelp`),list:`cron-delivery-to-suggestions`,placeholder:w(`cron.form.failureAlertToPlaceholder`)})}
            ${q(e,`failureAlertDeliveryMode`,{label:w(`cron.form.failureAlertMode`),options:[{value:``,label:w(`cron.form.failureAlertInherit`)},{value:`announce`,label:w(`cron.form.failureAlertAnnounce`)},{value:`webhook`,label:w(`cron.form.failureAlertWebhook`)}]})}
            ${G(e,`failureAlertAccountId`,{label:w(`cron.form.failureAlertAccountId`),placeholder:w(`cron.form.failureAlertAccountPlaceholder`)})}
          `:b}
  `}var Q,Jn,Yn,Xn;function Zn(){return(Zn=e((()=>{t(),_(),he(),_e(),be(),St(),Mt(),Oe(),Ne(),At(),Re(),wt(),ke(),Me(),bt(),k(),C(),Ie(),m(),se(),Pt(),Jt(),$t(),pn(),Q={name:`cron.form.fieldName`,scheduleAt:`cron.form.runAt`,everyAmount:`cron.form.every`,cronExpr:`cron.form.expression`,staggerAmount:`cron.form.staggerWindow`,triggerScript:`cron.form.triggerScript`,payloadText:`cron.form.assistantTaskPrompt`,payloadModel:`cron.form.model`,payloadThinking:`cron.form.thinking`,timeoutSeconds:`cron.form.timeoutSeconds`,deliveryTo:`cron.form.to`,failureAlertAfter:`cron.form.failureAlertAfter`,failureAlertCooldownSeconds:`cron.form.failureAlertCooldown`},Jn=[{value:`all`,labelKey:`cron.tabs.all`},{value:`enabled`,labelKey:`cron.tabs.active`},{value:`disabled`,labelKey:`cron.tabs.paused`}],Yn={all:`cron.jobs.all`,at:`cron.form.at`,every:`cron.form.every`,cron:`cron.form.cronOption`,"on-exit":`cron.form.repeatOnExit`,stream:`cron.form.repeatStream`},Xn={script:`javascript`,command:`bash`,heartbeat:``,skillCollectionReview:``,systemEvent:``,agentTurn:``}})))()}var $,Qn;function $n(){return($n=e((()=>{c(),_(),me(),Ce(),Se(),Ee(),It(),gt(),k(),Ot(),C(),ue(),tt(),m(),l(),vt(),te(),u(),Wt(),M(),Zn(),$=class extends ae{constructor(...e){super(...e),this.routeSearch=``,this.cron=Ye(),this.agentsList=null,this.cronModelSuggestions=[],this.listTab=`tasks`,this.detailTab=`settings`,this.heartbeatScratch=``,this.pendingRouteData=null,this.routeJobState=null,this.highlightedRunId=null,this.pendingRunScroll=!1,this.modelSuggestionsState=null,this.heartbeatScratchRequest=0,this.gateway=new _t(this,{getGateway:()=>this.context?.gateway,invalidateRequests:e=>this.resetGatewayState(e.snapshot),onSnapshot:e=>{e.initial?this.resetGatewayState(e.snapshot):De(e.snapshot).canAdmin||this.clearHeartbeatScratch()},ensureInitialData:()=>this.ensureInitialData()}),this.observeAgentScope=ze(e=>{this.pendingRouteData=null,this.resetGatewayState(this.context.gateway.snapshot),this.cron.cronAgentId=e,this.listTab=`tasks`,this.detailTab=`settings`,this.ensureInitialData(),this.requestUpdate()}),this.subscriptions=new pe(this).watch(()=>this.context?.agents,(e,t)=>e.subscribe(t),()=>this.syncAgentsState()).watch(()=>this.context?.channels,(e,t)=>e.subscribe(t)).watch(()=>this.context?.runtimeConfig,(e,t)=>e.subscribe(t)).effect(()=>this.context?.agentSelection,e=>this.observeAgentScope(e)).effect(()=>this.context?.gateway,e=>e.subscribeEvents(t=>{this.gateway.gateway===e&&this.context.gateway===e&&this.gateway.connected&&this.gateway.client&&t.event===`cron`&&this.refreshCron({tableFilters:!0,coalesce:!0})})),this.lastPanelKey=null}get canManageCron(){return De(this.context.gateway.snapshot).canAdmin}disconnectedCallback(){this.subscriptions.clear(),super.disconnectedCallback()}resetGatewayState(e){this.clearHeartbeatScratch(),Ue(this.cron);let t=e?.phase===`connected`;this.cron=Ye({client:e?.client??null,connected:t}),this.cron.cronAgentId=this.context.agentSelection.state.scopeId,this.agentsList=t?this.context.agents.state.agentsList:null,this.cronModelSuggestions=[],this.modelSuggestionsState=null}syncAgentsState(){this.agentsList=this.context.agents.state.agentsList}ensureInitialData(){if(!(!this.cron.connected||!this.cron.client)&&(!this.agentsList&&!this.context.agents.state.agentsLoading&&this.context.agents.ensureList(),!this.cron.cronStatus&&!this.cron.cronLoading?this.refreshCron({tableFilters:!0,coalesce:!0}):!this.cron.cronRuns.length&&!this.cron.cronRunsLoadingMore&&this.loadRuns(this.cron.cronRunsScope===`all`?null:this.cron.cronRunsJobId),this.modelSuggestionsState!==this.cron)){let e=this.cron;this.modelSuggestionsState=e,this.loadModelSuggestions(e)}}requestCronUpdate(e=this.cron){this.cron===e&&this.requestUpdate()}willUpdate(e){if(e.has(`routeSearch`)){this.cron.cronError=null;let e=Gt(this.routeSearch);this.pendingRouteData=e.jobId?e:null,this.routeJobState=null,this.highlightedRunId=null,this.pendingRunScroll=!1}}updated(){let e=this.cron.cronEditingJob?.id??null,t=`${e?`job`:this.cron.cronCreateOpen?`create`:`overview`}:${e??``}`;if(t!==this.lastPanelKey){this.lastPanelKey=t,this.detailTab=e&&this.highlightedRunId?`history`:`settings`;let n=this.closest(`.content`);n instanceof HTMLElement&&typeof n.scrollTo==`function`&&n.scrollTo({top:0})}let n=this.pendingRouteData,r=this.cron.client;if(n&&r&&this.cron.connected&&this.routeJobState!==this.cron&&(this.routeJobState=this.cron,this.runCronTask(async e=>{let t=()=>this.isConnected&&this.cron===e&&this.pendingRouteData===n;try{let e=await r.request(`cron.get`,{id:n.jobId});t()&&this.selectJob(e,n.runId)}catch(n){t()&&(this.pendingRouteData=null,e.cronError=p(n))}})),this.pendingRunScroll){let e=this.querySelector(`.cron-run-entry--highlighted`);e&&(e.scrollIntoView?.({block:`nearest`}),this.pendingRunScroll=!1)}}async refreshCron(e){let t=this.cron;if(!t.connected||!t.client)return;let n=t.cronRunsScope===`job`?t.cronRunsJobId:null;this.loadRuns(n,e.coalesce),this.context.channels.refresh(!1),await Promise.all([this.runCronTask(t=>Ke(t,e)),this.runCronTask(t=>O(t,{tableFilters:e.tableFilters}))])}loadRuns(e,t=!1){return this.runCronTask(n=>D(n,e,{coalesce:t}))}async loadModelSuggestions(e){let t={client:e.client,connected:e.connected,cronModelSuggestions:this.cronModelSuggestions};await rt(t,this.context.agentSelection.state.selectedId),this.isConnected&&this.cron===e&&this.modelSuggestionsState===e&&e.connected&&t.client===e.client&&(this.cronModelSuggestions=t.cronModelSuggestions)}async runCronTask(e){let t=this.cron;try{let n=e(t);return this.requestCronUpdate(t),await n}finally{this.requestCronUpdate(t)}}runCronAdminTask(e){this.canManageCron&&this.runCronTask(e)}patchForm(e){this.canManageCron&&(this.cron.cronForm=Xe({...this.cron.cronForm,...e},e),this.cron.cronFieldErrors=Pe(this.cron.cronForm),this.requestCronUpdate())}selectJob(e,t=null){this.clearHeartbeatScratch(),this.pendingRouteData=null,this.highlightedRunId=t,this.pendingRunScroll=!!t,t&&(this.detailTab=`history`),this.cron.cronCreateOpen=!1,ct(this.cron,e),this.requestCronUpdate(),e.payload?.kind===`heartbeat`&&this.loadHeartbeatScratch(this.cron,e.id,this.heartbeatScratchRequest),this.runCronTask(async t=>{E(t,{cronRunsScope:`job`}),t.cronRunsJobId=e.id,await D(t,e.id)})}clearHeartbeatScratch(){this.heartbeatScratchRequest+=1,this.heartbeatScratch=``}async loadHeartbeatScratch(e,t,n){let r=e.client;if(!this.canManageCron||!r||!e.connected)return;let i=this.gateway.capture();if(!i)return;let a=()=>this.cron===e&&this.heartbeatScratchRequest===n&&this.gateway.isCurrent(i)&&this.canManageCron&&e.cronEditingJob?.id===t&&e.cronForm.payloadKind===`heartbeat`;try{let e=await r.request(`cron.scratch.get`,{id:t});a()&&(this.heartbeatScratch=e.scratch?.content??``)}catch(t){a()&&(e.cronError=p(t),this.requestCronUpdate(e))}}openCreate(e){if(this.canManageCron){if(this.clearHeartbeatScratch(),this.pendingRouteData=null,et(this.cron,this.context.agentSelection.state.selectedId),this.cron.cronCreateOpen=!0,e){this.patchForm(e);return}this.requestCronUpdate()}}cloneJob(e){this.canManageCron&&(this.clearHeartbeatScratch(),this.pendingRouteData=null,at(this.cron,e),this.cron.cronCreateOpen=!0,this.requestCronUpdate())}async removeJob(e){let t=this.context,n=this.cron,r=this.gateway.capture(),i=this.canManageCron,a=n.cronEditingJob?.id===e.id?n.cronEditingJob:n.cronJobs.find(t=>t.id===e.id&&t.updatedAtMs===e.updatedAtMs);if(!r||!i||!a)return;let o=a.id,s=a.updatedAtMs,c=a.name,l=await mt({title:w(`cron.actions.removeConfirmTitle`,{name:c}),message:w(`cron.actions.removeConfirmMessage`),confirmLabel:w(`cron.actions.remove`),danger:!0}),u=n.cronEditingJob?.id===o?n.cronEditingJob:n.cronJobs.find(e=>e.id===o);!l||this.context!==t||this.cron!==n||!this.gateway.isCurrent(r)||!this.canManageCron||!u||u.updatedAtMs!==s||await this.runCronTask(async e=>{await Je(e,u),e.cronRunsScope===`job`&&e.cronRunsJobId===null&&(E(e,{cronRunsScope:`all`}),await D(e,null))})}closePanel(){this.clearHeartbeatScratch(),this.pendingRouteData=null,et(this.cron,this.context.agentSelection.state.selectedId),this.cron.cronCreateOpen=!1,this.requestCronUpdate(),this.runCronTask(async e=>{E(e,{cronRunsScope:`all`}),e.cronRunsJobId=null,await D(e,null)})}submitForm(e={}){this.runCronAdminTask(async t=>{let n=await Ze(t);n.saved&&(t.cronEditingJob||(e.runNow&&n.jobId&&await Be(t,n.jobId,`force`),t.cronCreateOpen=!1,t.cronRunsScope===`job`&&(E(t,{cronRunsScope:`all`}),t.cronRunsJobId=null,await D(t,null))))})}render(){let e=this.context.channels.state,t=ne(this.context),n=Ht({channels:e,runtimeConfig:this.context.runtimeConfig.state,cron:this.cron,agentsList:this.agentsList,modelSuggestions:this.cronModelSuggestions}),r=this.canManageCron;return v`
      ${ht({title:Te(`cron`),subtitle:xe(`cron`),actions:Ft({agents:this.agentsList?.agents??[],selection:this.context.agentSelection})})}
      ${Dt(bn({basePath:this.context.basePath,agentId:t,loading:this.cron.cronLoading,hasLoaded:this.cron.cronJobsSnapshotRevision!==null,listError:this.cron.cronJobsError,canManage:r,status:this.cron.cronStatus,jobs:this.cron.cronJobs,jobsLoadingMore:this.cron.cronJobsLoadingMore,jobsTotal:this.cron.cronJobsTotal,jobsHasMore:this.cron.cronJobsHasMore,jobsQuery:this.cron.cronJobsQuery,jobsEnabledFilter:this.cron.cronJobsEnabledFilter,jobsScheduleKindFilter:this.cron.cronJobsScheduleKindFilter,jobsLastStatusFilter:this.cron.cronJobsLastStatusFilter,jobsTriggerFilter:this.cron.cronJobsTriggerFilter,jobsSortBy:this.cron.cronJobsSortBy,jobsSortDir:this.cron.cronJobsSortDir,editingJob:this.cron.cronEditingJob,createOpen:this.cron.cronCreateOpen,listTab:this.listTab,detailTab:this.detailTab,error:this.cron.cronError,busy:this.cron.cronBusy,form:this.cron.cronForm,heartbeatScratch:r?this.heartbeatScratch:``,channels:e.channelsSnapshot?.channelMeta?.length?e.channelsSnapshot.channelMeta.map(e=>e.id):e.channelsSnapshot?.channelOrder??[],channelLabels:e.channelsSnapshot?.channelLabels??{},channelMeta:e.channelsSnapshot?.channelMeta??[],runs:this.cron.cronRuns,highlightedRunId:this.highlightedRunId,runsTotal:this.cron.cronRunsTotal,runsHasMore:this.cron.cronRunsHasMore,runsLoadingMore:this.cron.cronRunsLoadingMore,runsStatuses:this.cron.cronRunsStatuses,runsDeliveryStatuses:this.cron.cronRunsDeliveryStatuses,runsQuery:this.cron.cronRunsQuery,runsSortDir:this.cron.cronRunsSortDir,fieldErrors:this.cron.cronFieldErrors,canSubmit:!Qe(this.cron.cronFieldErrors),agentSuggestions:n.agentSuggestions,modelSuggestions:n.modelSuggestions,thinkingSuggestions:Ut,timezoneSuggestions:n.timezoneSuggestions,deliveryToSuggestions:n.deliveryToSuggestions,accountSuggestions:n.accountTargets,onListTabChange:e=>{this.listTab=e},onDetailTabChange:e=>{this.detailTab=e},onFormChange:e=>this.patchForm(e),onRefresh:()=>void this.refreshCron({tableFilters:!0}),onSubmit:()=>this.submitForm(),onSubmitRunNow:()=>this.submitForm({runNow:!0}),onSelectJob:e=>this.selectJob(e),onOpenCreate:e=>this.openCreate(e),onClosePanel:()=>this.closePanel(),onClone:e=>this.cloneJob(e),onToggle:(e,t)=>this.runCronAdminTask(n=>He(n,e,t)),onRun:(e,t)=>this.runCronAdminTask(n=>Be(n,e.id,t??`force`)),onRemove:e=>void this.removeJob(e),onLoadMoreJobs:()=>void this.runCronTask(e=>O(e,{append:!0,tableFilters:!0})),onJobsFiltersChange:e=>void this.runCronTask(async t=>{st(t,e),await O(t,{append:!1,tableFilters:!0})}),onJobsFiltersReset:()=>void this.runCronTask(async e=>{st(e,{cronJobsScheduleKindFilter:`all`,cronJobsLastStatusFilter:`all`,cronJobsTriggerFilter:`all`,cronJobsSortBy:`nextRunAtMs`,cronJobsSortDir:`asc`}),await O(e,{append:!1,tableFilters:!0})}),onLoadMoreRuns:()=>void this.runCronTask(e=>$e(e)),onRunsFiltersChange:e=>void this.runCronTask(async t=>{E(t,e),await D(t,t.cronRunsScope===`all`?null:t.cronRunsJobId)}),onNavigateToChat:e=>this.context.navigate(`chat`,re({context:this.context,face:`chat`,sessionKey:e}).options)}))}
    `}},s([i({context:we,subscribe:!0})],$.prototype,`context`,void 0),s([ye({attribute:!1})],$.prototype,`routeSearch`,void 0),s([y()],$.prototype,`cron`,void 0),s([y()],$.prototype,`agentsList`,void 0),s([y()],$.prototype,`cronModelSuggestions`,void 0),s([y()],$.prototype,`listTab`,void 0),s([y()],$.prototype,`detailTab`,void 0),s([y()],$.prototype,`heartbeatScratch`,void 0),Qn={header:!0,render:e=>v`<openclaw-cron-page
    .routeSearch=${typeof e==`string`?e:``}
  ></openclaw-cron-page>`},customElements.get(`openclaw-cron-page`)||customElements.define(`openclaw-cron-page`,$)})))()}$n();export{Qn as cronPageComponent};
//# sourceMappingURL=cron-page-CDbrTLVL.js.map