UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

471 lines 53.6 kB
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{Mn as t,R as n,Vn as r,Zn as i,bn as a,jn as o,ta as s,wr as c,z as l}from"./control-ui-foundation-Cydpkyqa.js";import{Bn as ee,E as te,Eo as u,Oo as ne,Sc as re,bc as ie,bs as ae,cn as oe,k as se,ys as ce,zn as le}from"./control-ui-core-Rwzhj6nO.js";import{$ as ue,K as d,X as f,at as p,q as m,r as de,st as fe,t as pe}from"./lit-runtime-CV_MH99K.js";import{_ as me,g as he}from"./control-ui-core-YphAl4aM.js";import{Qt as h,Rt as ge,Yt as g,en as _}from"./control-ui-core-vvcQQV2m.js";import{a as _e,n as ve,r as ye}from"./gateway-runtime-Bqqcp9-I.js";import{S as be,br as xe,dn as Se,un as Ce,w as we,x as Te,yr as Ee}from"./control-ui-boot-shared-DfZ39Yj9.js";import{B as De,L as Oe,in as ke,rn as Ae}from"./control-ui-boot-chat-_QSl8fbH.js";import{n as je,r as Me,t as Ne}from"./slots-CTN3PGFH.js";import{n as v,t as Pe}from"./hub-tabs-DLM-pY5z.js";function y(e,t,n){let r=n?.enabledByDefault??!0,i=e?.config;if(!i||typeof i!=`object`||Array.isArray(i))return r;let a=`plugins`in i&&i.plugins&&typeof i.plugins==`object`?i.plugins:null;if(a?.enabled===!1||(Array.isArray(a?.deny)&&a.deny.every(e=>typeof e==`string`)?a.deny:[]).includes(t))return!1;let o=Array.isArray(a?.allow)&&a.allow.every(e=>typeof e==`string`)?a.allow:[];if(o.length>0&&!o.includes(t))return!1;let s=(a&&`entries`in a&&a.entries&&typeof a.entries==`object`?a.entries:null)?.[t];if(!s||typeof s!=`object`||Array.isArray(s))return r;let c=s.enabled;return typeof c==`boolean`?c:r}function b(e={}){return{client:e.client??null,connected:e.connected??!1,hello:e.hello??null,configSnapshot:e.configSnapshot??null,applySessionKey:e.applySessionKey??`main`,selectedAgentId:e.selectedAgentId??null,resourceRequests:{},dreamingStatusLoading:!1,dreamingStatusError:null,dreamingStatus:null,dreamingModeSaving:!1,dreamDiaryLoading:!1,dreamDiaryActionLoading:!1,dreamDiaryActionMessage:null,dreamDiaryActionArchivePath:null,dreamDiaryError:null,dreamDiaryPath:null,dreamDiaryContent:null,wikiImportInsightsLoading:!1,wikiImportInsightsError:null,wikiImportInsights:null,wikiOverviewLoading:!1,wikiOverviewError:null,wikiOverview:null,lastError:null}}function Fe(e){return y(e.configSnapshot,Xe,{enabledByDefault:!1})}function Ie(e,t){let n=_e(e,t);return n===null?Fe(e):n}function x(e,t,n,r){return ve({client:e.client,hello:e.hello,phase:e.connected?`connected`:`offline`},t,n,r)}function Le(e,t){switch(e){case`doctor.memory.dedupeDreamDiary`:{let e=typeof t?.dedupedEntries==`number`?t.dedupedEntries:typeof t?.removedEntries==`number`?t.removedEntries:0,n=typeof t?.keptEntries==`number`?t.keptEntries:void 0;return n===void 0?_(e===1?`dreaming.actions.dedupeRemovedOne`:`dreaming.actions.dedupeRemovedMany`,{removed:String(e)}):_(e===1?`dreaming.actions.dedupeRemovedOneAndKept`:`dreaming.actions.dedupeRemovedManyAndKept`,{removed:String(e),kept:String(n)})}case`doctor.memory.repairDreamingArtifacts`:{let e=[],n=s(t?.archiveDir);return t?.archivedSessionCorpus===!0&&e.push(_(`dreaming.actions.repairArchivedThreadCorpus`)),t?.archivedSessionIngestion===!0&&e.push(_(`dreaming.actions.repairArchivedIngestionState`)),t?.archivedDreamsDiary===!0&&e.push(_(`dreaming.actions.repairArchivedDreamDiary`)),e.length===0?_(`dreaming.actions.repairNoChanges`):n?_(`dreaming.actions.repairCompleteWithArchive`,{actions:e.join(`, `),archiveDir:n}):_(`dreaming.actions.repairComplete`,{actions:e.join(`, `)})}case`doctor.memory.backfillDreamDiary`:return _(`dreaming.actions.backfillComplete`,{count:String(typeof t?.written==`number`?t.written:0)});case`doctor.memory.resetDreamDiary`:return _(`dreaming.actions.resetDiaryComplete`,{count:String(typeof t?.removedEntries==`number`?t.removedEntries:0)});case`doctor.memory.resetGroundedShortTerm`:return _(`dreaming.actions.clearReplayedComplete`,{count:String(typeof t?.removedShortTermEntries==`number`?t.removedShortTermEntries:0)})}return _(`dreaming.actions.complete`)}function S(e){return s(e.selectedAgentId)??null}function C(e){let t=r(r(e?.plugins)?.slots),n=Me(`memory`,t?.memory),i=n.kind===`off`?Ne(`memory`):n.pluginId,a=r(e?.plugins),o=r(a?.entries),s=r(o?.[i]),c=r(s?.config),l=r(c?.dreaming),ee=typeof l?.enabled==`boolean`;return{pluginId:i,enabled:n.kind!==`off`&&l?.enabled!==!1,overridden:ee,engineOff:n.kind===`off`}}async function w(e,t,n=Ze[t]){let r=S(e),i=`${t}Loading`,a=`${t}Error`,o=`${t}AgentId`;if(!r)return;let s=e.client;if(!s||!e.connected)return;if(e[o]!==r&&n.clear(e),(t===`wikiImportInsights`||t===`wikiOverview`)&&!Ie(e,n.method)){delete e.resourceRequests[t],e[i]=!1,e[a]=null,n.clear(e);return}if(e.resourceRequests[t]?.agentId===r&&e[i])return;let c={agentId:r};e.resourceRequests[t]=c,e[i]=!0,e[a]=null;try{let i=await s.request(n.method,{agentId:r});if(e.resourceRequests[t]!==c||S(e)!==r)return;n.apply(e,i),e[o]=r}catch(n){e.resourceRequests[t]===c&&S(e)===r&&(e[a]=u(n))}finally{e.resourceRequests[t]===c&&(delete e.resourceRequests[t],e[i]=!1)}}async function T(e){await w(e,`dreamingStatus`)}async function E(e){await w(e,`dreamDiary`)}async function D(e){await w(e,`wikiImportInsights`)}async function O(e){await w(e,`wikiOverview`)}async function k(e,t,n){let r=e.client,i=S(e);if(!r||!i||!x(e,t,`operator.write`)||e.dreamDiaryActionLoading)return!1;e.dreamDiaryActionLoading=!0,e.dreamingStatusError=null,e.dreamDiaryError=null,e.dreamDiaryActionMessage=null,e.dreamDiaryActionArchivePath=null;try{let a=await r.request(t,{agentId:i});return n?.reloadDiary!==!1&&await E(e),await T(e),e.dreamDiaryActionArchivePath=t===`doctor.memory.repairDreamingArtifacts`?s(a?.archiveDir)??null:null,e.dreamDiaryActionMessage={kind:`success`,text:Le(t,a)},!0}catch(t){let n=u(t);return e.dreamingStatusError=n,e.lastError=n,e.dreamDiaryActionArchivePath=null,e.dreamDiaryActionMessage={kind:`error`,text:n},!1}finally{e.dreamDiaryActionLoading=!1}}async function Re(e){return k(e,`doctor.memory.backfillDreamDiary`)}async function ze(e){return k(e,`doctor.memory.resetDreamDiary`)}async function Be(e){return k(e,`doctor.memory.resetGroundedShortTerm`,{reloadDiary:!1})}async function Ve(e){return k(e,`doctor.memory.repairDreamingArtifacts`,{reloadDiary:!1})}async function He(e){let t=e.dreamDiaryActionArchivePath;return t?await oe(t)?(e.dreamDiaryActionMessage={kind:`success`,text:_(`dreaming.actions.archivePathCopied`)},!0):(e.dreamDiaryActionMessage={kind:`error`,text:_(`dreaming.actions.archivePathCopyFailed`)},!1):!1}async function Ue(e){return k(e,`doctor.memory.dedupeDreamDiary`)}async function We(e,t,n,r){if(e.dreamingModeSaving||!r()||!x(e,`config.patch`,`operator.admin`))return!1;e.dreamingModeSaving=!0,e.dreamingStatusError=null;try{let i=await t.patch({raw:n,note:`Dreaming settings updated from the Dreaming tab.`,canDispatch:r});return i||(e.dreamingStatusError=t.state.lastError??e.lastError??_(`dreaming.actions.updateFailed`)),i}finally{e.dreamingModeSaving=!1}}function Ge(e){let t=r(e),n=Array.isArray(t?.children)?t.children:[];for(let e of n){let t=r(e);if(s(t?.key)===`dreaming`)return!0}return!1}function Ke(e){let t=r(e);return r(t?.schema)?.additionalProperties===!1}async function qe(e,t){if(!e.state.client||!e.state.connected)return`unknown`;try{let n=await e.lookupSchemaPath(`plugins.entries.${t}.config`);return Ge(n)?`supported`:Ke(n)?`unsupported`:`supported`}catch{return`unknown`}}async function Je(e,t,n){if(await qe(t,n)!==`unsupported`)return!0;let r=_(`dreaming.actions.unsupportedPlugin`,{pluginId:n});return e.dreamingStatusError=r,e.lastError=r,!1}async function Ye(e,t,n,i=()=>!0){if(e.dreamingModeSaving||!i())return!1;if(!t.state.configSnapshot?.hash)return e.dreamingStatusError=_(`dreaming.actions.configHashMissing`),!1;let{pluginId:a}=C(r(t.state.configSnapshot?.config)??null);if(!await Je(e,t,a)||!i())return!1;let o=await We(e,t,{plugins:{entries:{[a]:{config:{dreaming:{enabled:n}}}}}},i);return o&&e.dreamingStatus&&(e.dreamingStatus={...e.dreamingStatus,enabled:n}),o}var Xe,Ze;function A(){return(A=e((()=>{je(),g(),ne(),ye(),Xe=`memory-wiki`,Ze={dreamingStatus:{method:`doctor.memory.status`,clear:e=>{e.dreamingStatus=null},apply:(e,t)=>{e.dreamingStatus=t.dreaming??null}},dreamDiary:{method:`doctor.memory.dreamDiary`,clear:e=>{e.dreamDiaryPath=null,e.dreamDiaryContent=null},apply:(e,t)=>{e.dreamDiaryPath=t.path,e.dreamDiaryContent=t.found?t.content??``:null}},wikiImportInsights:{method:`wiki.importInsights`,clear:e=>{e.wikiImportInsights=null},apply:(e,t)=>{e.wikiImportInsights=t}},wikiOverview:{method:`wiki.overview`,clear:e=>{e.wikiOverview=null},apply:(e,t)=>{e.wikiOverview=t}}}})))()}function Qe(e){if(!e.open)return m;let t=e.enabling?_(`dreaming.toggleConfirmation.enableTitle`):_(`dreaming.toggleConfirmation.disableTitle`),n=_(`dreaming.toggleConfirmation.subtitle`),r=e.enabling?_(`dreaming.toggleConfirmation.enableDetail`):_(`dreaming.toggleConfirmation.disableDetail`),i=e.enabling?_(`dreaming.toggleConfirmation.enableConfirm`):_(`dreaming.toggleConfirmation.disableConfirm`);return f`
    <openclaw-modal-dialog label=${t} description=${n} @modal-cancel=${()=>{e.loading||e.onCancel()}}>
      <div class="exec-approval-card">
        <div class="exec-approval-header">
          <div>
            <div id=${`dreaming-toggle-confirmation-title`} class="exec-approval-title">${t}</div>
            <div id=${`dreaming-toggle-confirmation-description`} class="exec-approval-sub">${n}</div>
          </div>
        </div>
        <div class="callout ${e.enabling?`info`:`warn`}" style="margin-top: 12px;">
          ${r}
        </div>
        ${e.hasError?f`<div class="exec-approval-error">
                ${_(`dreaming.toggleConfirmation.failed`)}
              </div>`:m}
        <div class="exec-approval-actions">
          <button
            class="btn ${e.enabling?`primary`:`danger`}"
            ?disabled=${e.loading}
            @click=${e.onConfirm}
          >
            ${e.loading?_(`dreaming.toggleConfirmation.saving`):i}
          </button>
          <button class="btn" ?disabled=${e.loading} @click=${e.onCancel}>
            ${_(`common.cancel`)}
          </button>
        </div>
      </div>
    </openclaw-modal-dialog>
  `}function $e(){return($e=e((()=>{d(),g(),ge()})))()}function et(e){let t=e,n=Ot.exec(e),r=kt.exec(e);n&&r&&r.index>n.index&&(t=e.slice(n.index+n[0].length,r.index));let i=[],a=t.split(/\n---\n/).filter(e=>e.trim().length>0);for(let e of a){let t=e.trim().split(`
`),n=``,r=[];for(let e of t){let t=e.trim();if(!n&&t.startsWith(`*`)&&t.endsWith(`*`)&&t.length>2){n=t.slice(1,-1);continue}t.startsWith(`#`)||t.startsWith(`<!--`)||t.length>0&&r.push(t)}r.length>0&&i.push({date:n,body:r.join(`
`)})}return i}function tt(e){return t(e)??null}function nt(e){let t=tt(e);if(t===null)return e;let n=new Date(t);return`${n.getMonth()+1}/${n.getDate()}`}function rt(){return{dreamIndex:Math.floor(Math.random()*J.length),dreamLastSwap:0,activeSubTab:`scene`,activeDiarySubTab:`dreams`,advancedWaitingSort:`recent`,expandedInsightCards:new Set,expandedWikiCards:new Set,diaryPage:0,wikiPreviewRequestId:0,wikiPreviewOpen:!1,wikiPreviewLoading:!1,wikiPreviewTitle:``,wikiPreviewPath:``,wikiPreviewUpdatedAt:null,wikiPreviewContent:``,wikiPreviewTotalLines:null,wikiPreviewTruncated:!1,wikiPreviewError:null}}function it(e,t,n){e.diaryPage=Math.max(0,Math.min(t,Math.max(0,n-1)))}function at(e){let t=Date.now();return t-e.dreamLastSwap>At&&(e.dreamLastSwap=t,e.dreamIndex=(e.dreamIndex+1)%J.length),_(J[e.dreamIndex]??J[0])}function ot(e){let t=Te(xe(e)),n=`--lob-shell:${t.palette.shell};--lob-claw:${t.palette.claw}`;return f`
    <div class="dreams__lobster" style=${n}>${we(t,{sleeping:!0})}</div>
  `}function st(e){let t=e.viewState,n=!e.active,r=e.dreamingOf??at(t);return f`
    <div class="dreams-page">
      <!-- ── Sub-tab bar ── -->
      <div class="dreams__topbar">
        ${v({id:`dreams`,active:t.activeSubTab,tabs:[{value:`scene`,label:_(`dreaming.tabs.scene`)},{value:`diary`,label:_(`dreaming.tabs.diary`)},{value:`advanced`,label:_(`dreaming.tabs.advanced`)}],ariaLabel:_(`memoryPage.tabs.dreams`),panelId:`dreams-panel`,variant:`sub`,onSelect:n=>{t.activeSubTab=n,e.onViewStateChange()}})}
      </div>

      <div
        id="dreams-panel"
        class="dreams__panel"
        role="tabpanel"
        aria-labelledby=${`dreams-tab-${t.activeSubTab}`}
      >
        ${t.activeSubTab===`scene`?ut(e,n,r):t.activeSubTab===`diary`?Dt(e):bt(e)}
      </div>
    </div>
  `}function ct(e){return e.split(`
`).map(e=>e.trim()).filter(e=>e.length>0&&e!==`What Happened`&&e!==`Reflections`&&e!==`Candidates`&&e!==`Possible Lasting Updates`).map(e=>e.replace(/\s*\[memory\/[^\]]+\]/g,``)).map(e=>e.replace(/^(?:\d+\.\s+|-\s+(?:\[[^\]]+\]\s+)?(?:[a-z_]+:\s+)?)/i,``).replace(/^(?:likely_durable|likely_situational|unclear):\s+/i,``).trim()).filter(e=>e.length>0)}function lt(e){return e?new Date(e).toLocaleTimeString([],{hour:`numeric`,minute:`2-digit`}):`—`}function ut(e,t,n){return f`
    <section class="dreams ${t?`dreams--idle`:``}">
      ${jt.map(e=>f`
          <div
            class="dreams__star"
            style="
              top: ${e.top}%;
              left: ${e.left}%;
              width: ${e.size}px;
              height: ${e.size}px;
              background: ${e.hue===`accent`?`var(--accent-muted)`:`var(--text)`};
              animation-delay: ${e.delay}s;
            "
          ></div>
        `)}

      <div class="dreams__moon"></div>

      ${e.active?f`
              <div class="dreams__bubble">
                <span class="dreams__bubble-text">${n}</span>
              </div>
              <div
                class="dreams__bubble-dot"
                style="top: calc(50% - 160px); left: calc(50% - 120px); width: 12px; height: 12px; animation-delay: 0.2s;"
              ></div>
              <div
                class="dreams__bubble-dot"
                style="top: calc(50% - 120px); left: calc(50% - 90px); width: 8px; height: 8px; animation-delay: 0.4s;"
              ></div>
            `:m}

      <div class="dreams__glow"></div>
      ${ot(e.selectedAgentId)}
      <span class="dreams__z">z</span>
      <span class="dreams__z">z</span>
      <span class="dreams__z">Z</span>

      <div class="dreams__status">
        <span class="dreams__status-label"
          >${e.active?_(`dreaming.status.active`):_(`dreaming.status.idle`)}</span
        >
        <div class="dreams__status-detail">
          <div class="dreams__status-dot"></div>
          <span>
            ${e.promotedCount} ${_(`dreaming.status.promotedSuffix`)}
            ${e.nextCycle?f`· ${_(`dreaming.status.nextSweepPrefix`)} ${e.nextCycle}`:m}
            ${e.timezone?f`· ${e.timezone}`:m}
          </span>
        </div>
      </div>

      <!-- Sleep phases -->
      <div class="dreams__phases">
        ${Object.keys(Y).map(t=>{let n=e.phases?.[t],r=n!==void 0,i=n?.enabled===!0,a=lt(n?.nextRunAtMs),o=_(Y[t]),s=r?i?a:_(`dreaming.phase.off`):`—`;return f`
              <div class="dreams__phase ${r&&!i?`dreams__phase--off`:``}">
                <div class="dreams__phase-dot ${i?`dreams__phase-dot--on`:``}"></div>
                <span class="dreams__phase-name">${o}</span>
                <span class="dreams__phase-next">${s}</span>
              </div>
            `})}
      </div>

      ${e.statusError?f`<div class="dreams__controls-error">${e.statusError}</div>`:m}
    </section>
  `}function dt(e,t,n){return t===n?`${e}:${t}`:`${e}:${t}-${n}`}function j(e){let n=t(e);return n===void 0?e:new Date(n).toLocaleString([],{month:`short`,day:`numeric`,hour:`numeric`,minute:`2-digit`})}function M(e){return e.replace(/\\/g,`/`).split(`/`).findLast(Boolean)??e}function ft(e){return _(`dreaming.wiki.pageTypes.${e}`)}function N(e){return _(e===1?`dreaming.wiki.counts.pageOne`:`dreaming.wiki.counts.pages`,{count:String(e)})}function P(e){return _(e===1?`dreaming.wiki.counts.claimRowOne`:`dreaming.wiki.counts.claimRows`,{count:String(e)})}function F(e){return _(e===1?`dreaming.wiki.counts.openQuestionOne`:`dreaming.wiki.counts.openQuestions`,{count:String(e)})}function I(e){return _(e===1?`dreaming.wiki.counts.contradictionOne`:`dreaming.wiki.counts.contradictions`,{count:String(e)})}function pt(e){let t=Mt.map(([t,n])=>{let r=e[t];return r>0?_(`dreaming.wiki.pageGroupSummary`,{label:_(`dreaming.wiki.pageGroups.${n}`),count:N(r)}):null}).filter(e=>e!==null);return t.length>0?t.join(`; `):_(`dreaming.wiki.noPagesYet`)}function mt(e){let t=[_(`dreaming.wiki.sectionPageSummary`,{label:e.label,count:N(e.itemCount)})];if(e.claimCount>0&&t.push(P(e.claimCount)),e.questionCount>0){let n=e.items.filter(e=>e.questionCount>0).length,r=F(e.questionCount);t.push(n>0?_(`dreaming.wiki.questionCountOnPages`,{questionCount:r,pageCount:N(n)}):r)}return e.contradictionCount>0&&t.push(I(e.contradictionCount)),t.join(` · `)}function ht(e){return _(e.digestStatus===`withheld`?`dreaming.wiki.risk.needsReview`:`dreaming.wiki.risk.${e.riskLevel}`)}function L(e,t,n){e.has(t)?e.delete(t):e.add(t),n()}async function R(e,t){let n=t.viewState,r=++n.wikiPreviewRequestId;n.wikiPreviewOpen=!0,n.wikiPreviewLoading=!0,n.wikiPreviewTitle=M(e),n.wikiPreviewPath=e,n.wikiPreviewUpdatedAt=null,n.wikiPreviewContent=``,n.wikiPreviewTotalLines=null,n.wikiPreviewTruncated=!1,n.wikiPreviewError=null,t.onViewStateChange();try{let i=await t.onOpenWikiPage(e);if(n.wikiPreviewRequestId!==r||!n.wikiPreviewOpen)return;if(!i){n.wikiPreviewError=_(`dreaming.wiki.pageNotFound`,{lookup:e});return}n.wikiPreviewTitle=i.title,n.wikiPreviewPath=i.path,n.wikiPreviewUpdatedAt=i.updatedAt??null,n.wikiPreviewContent=i.content,n.wikiPreviewTotalLines=typeof i.totalLines==`number`?i.totalLines:null,n.wikiPreviewTruncated=i.truncated===!0}catch(e){n.wikiPreviewRequestId===r&&n.wikiPreviewOpen&&(n.wikiPreviewError=u(e))}finally{n.wikiPreviewRequestId===r&&n.wikiPreviewOpen&&(n.wikiPreviewLoading=!1,t.onViewStateChange())}}function z(e){e.wikiPreviewRequestId+=1,e.wikiPreviewOpen=!1,e.wikiPreviewLoading=!1,e.wikiPreviewTitle=``,e.wikiPreviewPath=``,e.wikiPreviewUpdatedAt=null,e.wikiPreviewContent=``,e.wikiPreviewTotalLines=null,e.wikiPreviewTruncated=!1,e.wikiPreviewError=null}function B(e){z(e.viewState),e.onViewStateChange()}function gt(e){let t=e.viewState;return t.wikiPreviewOpen?f`
    <openclaw-modal-dialog
      .label=${t.wikiPreviewTitle||_(`dreaming.wiki.previewFallbackTitle`)}
      style="--openclaw-modal-width: 1120px"
      @modal-cancel=${()=>B(e)}
    >
      <div class="dreams-diary__preview-panel">
        <div class="dreams-diary__preview-header">
          <div>
            <div class="dreams-diary__preview-title">
              ${t.wikiPreviewTitle||_(`dreaming.wiki.previewFallbackTitle`)}
            </div>
            <div class="dreams-diary__preview-meta">
              ${t.wikiPreviewPath}
              ${t.wikiPreviewUpdatedAt?` · ${j(t.wikiPreviewUpdatedAt)}`:``}
            </div>
          </div>
          <button
            type="button"
            class="btn btn--subtle btn--sm"
            @click=${()=>B(e)}
          >
            ${_(`dreaming.wiki.close`)}
          </button>
        </div>
        <div class="dreams-diary__preview-body">
          ${t.wikiPreviewLoading?f`<div class="dreams-diary__empty-text">${_(`dreaming.wiki.loadingPage`)}</div>`:t.wikiPreviewError?f`<div class="dreams-diary__error">${t.wikiPreviewError}</div>`:f`
                    ${t.wikiPreviewTruncated?f`
                            <div class="dreams-diary__preview-hint">
                              ${t.wikiPreviewTotalLines===null?_(`dreaming.wiki.previewTruncated`):_(`dreaming.wiki.previewTruncatedWithTotal`,{count:String(t.wikiPreviewTotalLines)})}
                            </div>
                          `:m}
                    <pre class="dreams-diary__preview-pre">${t.wikiPreviewContent}</pre>
                  `}
        </div>
      </div>
    </openclaw-modal-dialog>
  `:m}function _t(e){switch(e){case`dreams`:return f` <p class="dreams-diary__explainer">${_(`dreaming.wiki.dreamsExplainer`)}</p> `;case`insights`:return f` <p class="dreams-diary__explainer">${_(`dreaming.wiki.insightsExplainer`)}</p> `;case`wiki`:return f` <p class="dreams-diary__explainer">${_(`dreaming.wiki.wikiExplainer`)}</p> `}return m}function V(e){return t(e)??-1/0}function H(e,t){let n=V(e.lastRecalledAt),r=V(t.lastRecalledAt);return r===n?t.totalSignalCount===e.totalSignalCount?e.path.localeCompare(t.path):t.totalSignalCount-e.totalSignalCount:r-n}function vt(e,t){return t.totalSignalCount===e.totalSignalCount?t.phaseHitCount===e.phaseHitCount?H(e,t):t.phaseHitCount-e.phaseHitCount:t.totalSignalCount-e.totalSignalCount}function yt(e,t){return t===`signals`?e.toSorted(vt):e.toSorted(H)}function U(e){let t=e.groundedCount>0,n=e.recallCount>0||e.dailyCount>0;return _(t&&n?`dreaming.advanced.originMixed`:t?`dreaming.advanced.originDailyLog`:`dreaming.advanced.originLive`)}function W(e){return f`
    <section class="dreams-advanced__section">
      <div class="dreams-advanced__section-header">
        <div class="dreams-advanced__section-copy">
          <span class="dreams-advanced__section-title">${_(e.titleKey)}</span>
          <p class="dreams-advanced__section-description">${_(e.descriptionKey)}</p>
        </div>
        <div class="dreams-advanced__section-toolbar">
          ${e.controls??m}
          <span class="dreams-advanced__section-count">${e.entries.length}</span>
        </div>
      </div>
      ${e.entries.length===0?f`<div class="dreams-advanced__empty">${_(e.emptyKey)}</div>`:f`
              <div class="dreams-advanced__list">
                ${e.entries.map(t=>f`
                    <article class="dreams-advanced__item" data-entry-key=${t.key}>
                      ${e.badge?(()=>{let n=e.badge?.(t);return n?f`<span class="dreams-advanced__badge">${n}</span>`:m})():m}
                      <div class="dreams-advanced__snippet">${t.snippet}</div>
                      <div class="dreams-advanced__source">
                        ${dt(t.path,t.startLine,t.endLine)}
                      </div>
                      <div class="dreams-advanced__meta">
                        ${e.meta(t).filter(e=>e.length>0).join(` · `)}
                      </div>
                    </article>
                  `)}
              </div>
            `}
    </section>
  `}function bt(e){let t=e.viewState,n=e.shortTermEntries.filter(e=>e.groundedCount>0),r=yt(e.shortTermEntries,t.advancedWaitingSort),i=_(`dreaming.advanced.description`),a=[`${n.length} ${_(`dreaming.advanced.summaryFromDailyLog`)}`,`${e.shortTermCount} ${_(`dreaming.advanced.summaryWaiting`)}`,`${e.promotedCount} ${_(`dreaming.advanced.summaryPromotedToday`)}`].join(` · `);return f`
    <section class="dreams-advanced">
      <div class="dreams-advanced__header">
        <div class="dreams-advanced__intro">
          <span class="dreams-advanced__eyebrow">${_(`dreaming.advanced.eyebrow`)}</span>
          <h2 class="dreams-advanced__title">${_(`dreaming.advanced.title`)}</h2>
          ${i?f`<p class="dreams-advanced__description">${i}</p>`:m}
          <div class="dreams-advanced__summary">${a}</div>
        </div>
        <div class="dreams-advanced__actions">
          ${[{label:_(`dreaming.scene.dedupeDiary`),onClick:e.onDedupeDreamDiary,allowed:e.access.canDedupeDreamDiary},{label:_(`dreaming.scene.repairCache`),onClick:e.onRepairDreamingArtifacts,allowed:e.access.canRepairDreamingArtifacts},{label:_(e.dreamDiaryActionLoading?`dreaming.scene.working`:`dreaming.scene.backfill`),onClick:e.onBackfillDiary,allowed:e.access.canBackfillDiary},{label:_(`dreaming.scene.reset`),onClick:e.onResetDiary,allowed:e.access.canResetDiary},{label:_(`dreaming.scene.clearGrounded`),onClick:e.onResetGroundedShortTerm,allowed:e.access.canResetGroundedShortTerm}].map(({label:t,onClick:n,allowed:r})=>f`
              <button
                class="btn btn--subtle btn--sm"
                ?disabled=${!r||e.modeSaving||e.dreamDiaryActionLoading}
                @click=${()=>n()}
              >
                ${t}
              </button>
            `)}
        </div>
      </div>
      ${e.dreamDiaryActionMessage?f`
              <div
                class="callout ${e.dreamDiaryActionMessage.kind===`success`?`success`:`danger`}"
                role="status"
              >
                <div class="row wrap items-center gap-2">
                  <span>${e.dreamDiaryActionMessage.text}</span>
                  ${e.dreamDiaryActionArchivePath?f`
                          <button
                            class="btn btn--subtle btn--sm"
                            ?disabled=${e.dreamDiaryActionLoading}
                            @click=${()=>e.onCopyDreamingArchivePath()}
                          >
                            ${_(`dreaming.wiki.copyArchivePath`)}
                          </button>
                        `:m}
                </div>
              </div>
            `:m}

      <div class="dreams-advanced__sections">
        ${W({titleKey:`dreaming.advanced.stagedTitle`,descriptionKey:`dreaming.advanced.stagedDescription`,emptyKey:`dreaming.advanced.emptyGrounded`,entries:n,controls:f`
            <button
              class="btn btn--subtle btn--sm"
              ?disabled=${!e.access.canResetGroundedShortTerm||e.modeSaving||e.dreamDiaryActionLoading}
              @click=${()=>e.onResetGroundedShortTerm()}
            >
              ${_(`dreaming.scene.clearGrounded`)}
            </button>
          `,badge:()=>_(`dreaming.advanced.originDailyLog`),meta:e=>[e.groundedCount>0?`${e.groundedCount} ${_(`dreaming.stats.grounded`).toLowerCase()}`:``,e.recallCount>0?`${e.recallCount} recall`:``,e.dailyCount>0?`${e.dailyCount} daily`:``]})}
        ${W({titleKey:`dreaming.advanced.shortTermTitle`,descriptionKey:`dreaming.advanced.shortTermDescription`,emptyKey:`dreaming.advanced.emptyShortTerm`,entries:r,controls:f`
            <div class="dreams-advanced__sort">
              <button
                class="dreams-advanced__sort-btn ${t.advancedWaitingSort===`recent`?`dreams-advanced__sort-btn--active`:``}"
                @click=${()=>{t.advancedWaitingSort=`recent`,e.onViewStateChange()}}
              >
                ${_(`dreaming.advanced.sortRecent`)}
              </button>
              <button
                class="dreams-advanced__sort-btn ${t.advancedWaitingSort===`signals`?`dreams-advanced__sort-btn--active`:``}"
                @click=${()=>{t.advancedWaitingSort=`signals`,e.onViewStateChange()}}
              >
                ${_(`dreaming.advanced.sortSignals`)}
              </button>
            </div>
          `,badge:e=>U(e),meta:e=>[`${e.totalSignalCount} ${_(`dreaming.stats.signals`).toLowerCase()}`,e.recallCount>0?`${e.recallCount} recall`:``,e.dailyCount>0?`${e.dailyCount} daily`:``,e.groundedCount>0?`${e.groundedCount} ${_(`dreaming.stats.grounded`).toLowerCase()}`:``,e.phaseHitCount>0?`${e.phaseHitCount} phase hit`:``]})}
        ${W({titleKey:`dreaming.advanced.promotedTitle`,descriptionKey:`dreaming.advanced.promotedDescription`,emptyKey:`dreaming.advanced.emptyPromoted`,entries:e.promotedEntries,badge:e=>U(e),meta:e=>[e.promotedAt?`${_(`dreaming.advanced.updatedPrefix`)} ${j(e.promotedAt)}`:``,e.groundedCount>0?`${e.groundedCount} ${_(`dreaming.stats.grounded`).toLowerCase()}`:``,e.totalSignalCount>0?`${e.totalSignalCount} ${_(`dreaming.stats.signals`).toLowerCase()}`:``]})}
      </div>

      ${e.statusError?f`<div class="dreams__controls-error">${e.statusError}</div>`:m}
    </section>
  `}function G(e,t){return t.length>0?f`
        <div class="dreams-diary__insight-list">
          <strong>${_(e)}</strong>
          ${t.map(e=>f`<p class="dreams-diary__insight-line">• ${e}</p>`)}
        </div>
      `:m}function K(e,t){return t?f`
        <p class="dreams-diary__insight-line">
          <strong>${_(e)}</strong>
          ${t}
        </p>
      `:m}function xt(e,t){if(e.kind===`import`){let n=e.item;return f`
      <p class="dreams-diary__insight-line">${n.summary}</p>
      ${G(`dreaming.wiki.candidateSignals`,n.candidateSignals)}
      ${G(`dreaming.wiki.corrections`,n.correctionSignals)}
      ${t?f`
              <div class="dreams-diary__insight-list">
                <strong>${_(`dreaming.wiki.importDetails`)}</strong>
                ${K(`dreaming.wiki.startedWith`,n.firstUserLine)}
                ${K(`dreaming.wiki.endedOn`,n.lastUserLine===n.firstUserLine?void 0:n.lastUserLine)}
                ${K(`dreaming.wiki.messages`,`${_(`dreaming.wiki.counts.userMessages`,{count:String(n.userMessageCount)})} · ${_(`dreaming.wiki.counts.assistantMessages`,{count:String(n.assistantMessageCount)})}`)}
                ${K(`dreaming.wiki.riskReasons`,n.riskReasons.join(`, `))}
                ${K(`dreaming.wiki.labels`,n.labels.join(`, `))}
              </div>
            `:m}
      ${n.preferenceSignals.length>0?f`
              <div class="dreams-diary__insight-signals">
                ${n.preferenceSignals.map(e=>f`<span class="dreams-diary__insight-signal">${e}</span>`)}
              </div>
            `:m}
    `}let n=e.item;return f`
    ${n.snippet?f`<p class="dreams-diary__insight-line">${n.snippet}</p>`:m}
    ${G(`dreaming.wiki.claims`,n.claims)}
    ${G(`dreaming.wiki.openQuestions`,n.questions)}
    ${G(`dreaming.wiki.contradictions`,n.contradictions)}
    ${t?f`
            <div class="dreams-diary__insight-list">
              <strong>${_(`dreaming.wiki.pageDetails`)}</strong>
              ${K(`dreaming.wiki.wikiPage`,n.pagePath)}
              ${K(`dreaming.wiki.id`,n.id)}
            </div>
          `:m}
  `}function q(e,t){let n=e.viewState,r=t.item,i=t.kind===`import`?n.expandedInsightCards:n.expandedWikiCards,a=i.has(r.pagePath),o=t.kind===`import`?t.item.riskLevel:`wiki`,s=t.kind===`import`?ht(t.item):ft(t.item.kind),c=t.kind===`import`?t.item.activeBranchMessages>0?` · ${_(`dreaming.wiki.counts.messages`,{count:String(t.item.activeBranchMessages)})}`:``:` · ${r.pagePath}`;return f`
    <article
      class="dreams-diary__insight-card dreams-diary__insight-card--clickable"
      data-import-page=${t.kind===`import`?r.pagePath:m}
      data-wiki-page=${t.kind===`wiki`?r.pagePath:m}
      @click=${()=>{if(t.kind===`wiki`&&t.item.kind===`report`){R(r.pagePath,e);return}L(i,r.pagePath,e.onViewStateChange)}}
    >
      <div class="dreams-diary__insight-topline">
        <div class="dreams-diary__insight-title">${r.title}</div>
        <span class="dreams-diary__insight-badge dreams-diary__insight-badge--${o}">
          ${s}
        </span>
      </div>
      <div class="dreams-diary__insight-meta">
        ${r.updatedAt?j(r.updatedAt):M(r.pagePath)}${c}
      </div>
      ${xt(t,a)}
      <div class="dreams-diary__insight-actions">
        <button
          class="btn btn--subtle btn--sm"
          @click=${t=>{t.stopPropagation(),L(i,r.pagePath,e.onViewStateChange)}}
        >
          ${_(a?`dreaming.wiki.hideDetails`:`dreaming.wiki.details`)}
        </button>
        <button
          class="btn btn--subtle btn--sm"
          @click=${t=>{t.stopPropagation(),R(r.pagePath,e)}}
        >
          ${_(t.kind===`import`?`dreaming.wiki.openSourcePage`:`dreaming.wiki.openWikiPage`)}
        </button>
      </div>
    </article>
  `}function St(e,t,n){let r=e.viewState;return f`
    <div class="dreams-diary__daychips">
      ${t.map((i,a)=>f`
          <button
            class="dreams-diary__day-chip ${a===n?`dreams-diary__day-chip--active`:``}"
            @click=${()=>{it(r,a,t.length),e.onViewStateChange()}}
          >
            ${i}
          </button>
        `)}
    </div>
  `}function Ct(e,t){let{clusters:n}=t;if(n.length===0)return f`
      <div class="dreams-diary__empty">
        <div class="dreams-diary__empty-text">
          ${_(t.loading?t.loadingKey:t.emptyKey)}
        </div>
        ${t.loading?m:f`<div class="dreams-diary__empty-hint">${_(t.emptyHintKey)}</div>`}
      </div>
    `;let r=e.viewState,a=Math.max(0,Math.min(r.diaryPage,n.length-1)),o=i(n[a],t.kind===`imports`?`selected imported insight cluster`:`selected memory overview cluster`),s=n.reduce((e,t)=>e+t.itemCount,0);return{navigation:St(e,n.map(e=>e.label),a),content:f`
      <article class="dreams-diary__entry" key="${t.kind}-${o.key}">
        <div class="dreams-diary__accent"></div>
        <div class="dreams-diary__date">${t.date(o)}</div>
        ${t.truncated?f`<p class="dreams-diary__para dreams-diary__bounded-result">
                ${_(`dreaming.wiki.boundedResults`,{returned:s.toLocaleString(h.getLocale()),total:t.totalItems.toLocaleString(h.getLocale())})}
              </p>`:m}
        <div class="dreams-diary__prose">${t.prose(o)}</div>
        <div class="dreams-diary__insights">${o.items.map(t.renderItem)}</div>
      </article>
    `}}function wt(e){return Ct(e,{kind:`imports`,clusters:e.wikiImportInsights?.clusters??[],totalItems:e.wikiImportInsights?.totalItems??0,truncated:e.wikiImportInsights?.truncated??!1,loading:e.wikiImportInsightsLoading,loadingKey:`dreaming.wiki.loadingInsights`,emptyKey:`dreaming.wiki.noInsights`,emptyHintKey:`dreaming.wiki.noInsightsHint`,date:e=>{let t=[_(`dreaming.wiki.counts.chats`,{count:String(e.itemCount)}),...e.highRiskCount>0?[_(`dreaming.wiki.counts.sensitive`,{count:String(e.highRiskCount)})]:[],...e.preferenceSignalCount>0?[_(`dreaming.wiki.counts.signals`,{count:String(e.preferenceSignalCount)})]:[]];return`${e.label} · ${t.join(` · `)}`},prose:e=>{let t=[_(`dreaming.wiki.importedClusterSummary`,{label:e.label.toLowerCase()}),...e.withheldCount>0?[_(e.withheldCount===1?`dreaming.wiki.withheldDigestOne`:`dreaming.wiki.withheldDigests`,{count:String(e.withheldCount)})]:[]];return f`<p class="dreams-diary__para">${t.join(` `)}</p>`},renderItem:t=>q(e,{kind:`import`,item:t})})}function Tt(e){let t=e.wikiOverview;return Ct(e,{kind:`wiki`,clusters:t?.clusters??[],totalItems:t?.totalItems??0,truncated:t?.truncated??!1,loading:e.wikiOverviewLoading,loadingKey:`dreaming.wiki.loadingWiki`,emptyKey:`dreaming.wiki.emptyWiki`,emptyHintKey:`dreaming.wiki.emptyWikiHint`,date:()=>{let e=[N(t?.totalPages??0),...(t?.totalClaims??0)>0?[P(t.totalClaims)]:[],...(t?.totalQuestions??0)>0?[F(t.totalQuestions)]:[],...(t?.totalContradictions??0)>0?[I(t.totalContradictions)]:[]];return`${_(`dreaming.wiki.vault`)} · ${e.join(` · `)}`},prose:e=>f`
      <p class="dreams-diary__para">
        ${_(`dreaming.wiki.fullVaultBreakdown`,{breakdown:t?pt(t.pageCounts):_(`dreaming.wiki.noPagesYet`)})}
      </p>
      <p class="dreams-diary__para">
        ${_(`dreaming.wiki.selectedSection`,{summary:mt(e)})}
        ${e.updatedAt?` ${_(`dreaming.wiki.latestUpdate`,{date:j(e.updatedAt)})}`:``}
      </p>
    `,renderItem:t=>q(e,{kind:`wiki`,item:t})})}function Et(e){let t=e.viewState;if(typeof e.dreamDiaryContent!=`string`)return f`
      <div class="dreams-diary__empty">
        <div class="dreams-diary__empty-moon">
          <svg viewBox="0 0 32 32" fill="none" width="32" height="32">
            <circle cx="16" cy="16" r="14" stroke="currentColor" stroke-width="0.5" opacity="0.2" />
            <path d="M20 8a10 10 0 0 1 0 16 10 10 0 1 0 0-16z" fill="currentColor" opacity="0.08" />
          </svg>
        </div>
        <div class="dreams-diary__empty-text">${_(`dreaming.diary.noDreamsYet`)}</div>
        <div class="dreams-diary__empty-hint">${_(`dreaming.diary.noDreamsHint`)}</div>
      </div>
    `;let n=et(e.dreamDiaryContent);if(n.length===0)return f`
      <div class="dreams-diary__empty">
        <div class="dreams-diary__empty-text">${_(`dreaming.diary.waitingTitle`)}</div>
        <div class="dreams-diary__empty-hint">${_(`dreaming.diary.waitingHint`)}</div>
      </div>
    `;let r=n.toReversed(),a=Math.max(0,Math.min(t.diaryPage,r.length-1)),o=i(r[a],`selected dreaming diary entry`);return{navigation:St(e,r.map(e=>nt(e.date)),a),content:f`
      <article class="dreams-diary__entry" key="${a}">
        <div class="dreams-diary__accent"></div>
        ${o.date?f`<time class="dreams-diary__date">${o.date}</time>`:m}
        <div class="dreams-diary__prose">
          ${ct(o.body).map((e,t)=>f`<p class="dreams-diary__para" style="animation-delay: ${.3+t*.15}s;">
                ${de(Se(e))}
              </p>`)}
        </div>
      </article>
    `}}function Dt(e){let t=e.viewState,n=t.activeDiarySubTab,r=(n===`insights`||n===`wiki`)&&!e.memoryWikiEnabled,i=n===`dreams`?e.dreamDiaryError:n===`insights`?e.wikiImportInsightsError:e.wikiOverviewError;if(i&&!r)return f`
      <section class="dreams-diary">
        <div class="dreams-diary__error">${i}</div>
      </section>
    `;let a=n===`dreams`?Et(e):n===`insights`?wt(e):Tt(e),o=`navigation`in a?a.navigation:m,s=`content`in a?a.content:a;return f`
    <section class="dreams-diary">
      <div class="dreams-diary__chrome">
        <div class="dreams-diary__header">
          <span class="dreams-diary__title">${_(`dreaming.diary.title`)}</span>
          ${v({id:`dream-diary`,active:n,tabs:[{value:`dreams`,label:_(`dreaming.wiki.dreamsTab`)},{value:`insights`,label:_(`dreaming.wiki.insightsTab`)},{value:`wiki`,label:_(`dreaming.wiki.wikiTab`)}],ariaLabel:_(`dreaming.diary.title`),panelId:`dream-diary-panel`,variant:`sub`,onSelect:n=>{z(t),t.activeDiarySubTab=n,t.diaryPage=0,e.onViewStateChange()}})}
          <button
            class="btn btn--subtle btn--sm"
            ?disabled=${r?!e.access.canOpenConfig:e.modeSaving||(n===`dreams`?e.dreamDiaryLoading:n===`insights`?e.wikiImportInsightsLoading:e.wikiOverviewLoading)}
            @click=${()=>{t.diaryPage=0,r?e.onOpenConfig():n===`dreams`?e.onRefreshDiary():n===`insights`?e.onRefreshImports():e.onRefreshWikiOverview()}}
          >
            ${r?_(`dreaming.wiki.howToEnable`):n===`dreams`?e.dreamDiaryLoading?_(`dreaming.diary.reloading`):_(`dreaming.diary.reload`):n===`insights`?e.wikiImportInsightsLoading?`Reloading…`:`Reload`:e.wikiOverviewLoading?`Reloading…`:`Reload`}
          </button>
        </div>
        ${_t(n)}
        ${r?m:o}
      </div>

      <div
        id="dream-diary-panel"
        role="tabpanel"
        aria-labelledby=${`dream-diary-tab-${n}`}
      >
        ${r?f`
                <div class="dreams-diary__empty">
                  <div class="dreams-diary__empty-text">${_(`dreaming.wiki.unavailable`)}</div>
                  <div class="dreams-diary__empty-hint">
                    ${_(`dreaming.wiki.unavailablePluginPrefix`)}
                    <code>memory-wiki</code> ${_(`dreaming.wiki.unavailablePluginSuffix`)}
                  </div>
                  <div class="dreams-diary__empty-hint">
                    ${_(`dreaming.wiki.enablePrefix`)}
                    <code>plugins.entries.memory-wiki.enabled = true</code>${_(`dreaming.wiki.enableSuffix`)}
                  </div>
                  <div class="dreams-diary__empty-actions">
                    <button
                      class="btn btn--subtle btn--sm"
                      ?disabled=${!e.access.canOpenConfig}
                      @click=${()=>e.onOpenConfig()}
                    >
                      ${_(`dreaming.wiki.openConfig`)}
                    </button>
                  </div>
                </div>
              `:s}
      </div>
      ${gt(e)}
    </section>
  `}var Ot,kt,J,Y,At,jt,Mt;function Nt(){return(Nt=e((()=>{a(),o(),d(),pe(),Pe(),Ee(),be(),Ce(),ge(),g(),ne(),Ot=/<!--\s*openclaw:dreaming:diary:start\s*-->/,kt=/<!--\s*openclaw:dreaming:diary:end\s*-->/,J=[`dreaming.phrases.consolidatingMemories`,`dreaming.phrases.tidyingKnowledgeGraph`,`dreaming.phrases.replayingConversations`,`dreaming.phrases.weavingShortTerm`,`dreaming.phrases.defragmentingMemoryLane`,`dreaming.phrases.filingLooseThoughts`,`dreaming.phrases.connectingDots`,`dreaming.phrases.compostingContext`,`dreaming.phrases.alphabetizingSubconscious`,`dreaming.phrases.promotingHunches`,`dreaming.phrases.forgettingNoise`,`dreaming.phrases.dreamingEmbeddings`,`dreaming.phrases.reorganizingAttic`,`dreaming.phrases.indexingDay`,`dreaming.phrases.nurturingInsights`,`dreaming.phrases.simmeringIdeas`,`dreaming.phrases.whisperingVectorStore`],Y={light:`dreaming.phase.light`,deep:`dreaming.phase.deep`,rem:`dreaming.phase.rem`},At=6e3,jt=[{top:8,left:15,size:3,delay:0,hue:`neutral`},{top:12,left:72,size:2,delay:1.4,hue:`neutral`},{top:22,left:35,size:3,delay:.6,hue:`accent`},{top:18,left:88,size:2,delay:2.1,hue:`neutral`},{top:35,left:8,size:2,delay:.9,hue:`neutral`},{top:45,left:92,size:2,delay:1.7,hue:`neutral`},{top:55,left:25,size:3,delay:2.5,hue:`accent`},{top:65,left:78,size:2,delay:.3,hue:`neutral`},{top:75,left:45,size:2,delay:1.1,hue:`neutral`},{top:82,left:60,size:3,delay:1.8,hue:`accent`},{top:30,left:55,size:2,delay:.4,hue:`neutral`},{top:88,left:18,size:2,delay:2.3,hue:`neutral`}],Mt=[[`source`,`sources`],[`synthesis`,`syntheses`],[`report`,`reports`],[`entity`,`entities`],[`concept`,`concepts`]]})))()}function Pt(e){return te(e,{hour:`numeric`,minute:`2-digit`},``)||null}function Ft(e){let t=Object.values(e?.phases??{}).filter(e=>e.enabled&&typeof e.nextRunAtMs==`number`).map(e=>e.nextRunAtMs).toSorted((e,t)=>e-t)[0];return t===void 0?null:Pt(t)}function It(e,t){let n=e&&typeof e==`object`?e:null,r=typeof n?.title==`string`&&n.title.trim()?n.title.trim():t,i=typeof n?.path==`string`&&n.path.trim()?n.path.trim():t,a=typeof n?.content==`string`&&n.content.length>0?n.content:_(`dreaming.wiki.noContent`),o=typeof n?.updatedAt==`string`&&n.updatedAt.trim()?n.updatedAt.trim():void 0,s=typeof n?.totalLines==`number`&&Number.isFinite(n.totalLines)?Math.max(0,Math.floor(n.totalLines)):void 0;return{title:r,path:i,content:a,...s===void 0?{}:{totalLines:s},...n?.truncated===!0?{truncated:!0}:{},...o?{updatedAt:o}:{}}}var X;function Lt(){return(Lt=e((()=>{l(),d(),ue(),me(),Ae(),Oe(),g(),ae(),se(),re(),ee(),A(),$e(),Nt(),X=class extends ie{constructor(...e){super(...e),this.agentId=``,this.dreaming=b(),this.toggleConfirmOpen=!1,this.toggleConfirmLoading=!1,this.pendingEnabled=null,this.viewState=rt(),this.gatewaySource=null,this.gatewayBindingEpoch=0,this.gatewayEpoch=0,this.hasBoundGatewaySource=!1,this.selectedAgentId=null,this.subscriptions=new le(this).effect(()=>this.context?.gateway,e=>{let t=this.hasBoundGatewaySource;this.hasBoundGatewaySource=!0,this.gatewaySource=e;let n=++this.gatewayBindingEpoch;this.gatewayEpoch+=1;let r=e.subscribe(t=>{this.isGatewayBindingCurrent(e,n)&&this.applyGatewaySnapshot(t)});return this.applyGatewaySnapshot(e.snapshot,t?`replacement`:`initial`),r}).effect(()=>this.context?.runtimeConfig,e=>(this.syncConfigSnapshot(),e.subscribe(()=>{this.syncConfigSnapshot(),this.requestUpdate()})))}updated(e){e.has(`agentId`)&&this.applyAgentId()}disconnectedCallback(){this.subscriptions.clear(),this.gatewayBindingEpoch+=1,this.gatewayEpoch+=1,this.gatewaySource=null,this.resetTransientState(),this.dreaming=b(),super.disconnectedCallback()}isGatewayBindingCurrent(e,t){return this.isConnected&&this.gatewaySource===e&&this.gatewayBindingEpoch===t&&this.context.gateway===e}captureTaskScope(){let e=this.gatewaySource;return e?{gateway:e,epoch:this.gatewayEpoch,state:this.dreaming}:null}isTaskScopeCurrent(e){return this.isConnected&&this.gatewaySource===e.gateway&&this.gatewayEpoch===e.epoch&&this.context.gateway===e.gateway&&this.dreaming===e.state}resetTransientState(){z(this.viewState),this.toggleConfirmOpen=!1,this.toggleConfirmLoading=!1,this.pendingEnabled=null}createGatewayState(e=this.context.gateway.snapshot){return b({client:e.client,connected:e.phase===`connected`,hello:e.hello,configSnapshot:this.context.runtimeConfig.state.configSnapshot,applySessionKey:e.sessionKey,selectedAgentId:this.selectedAgentId})}applyGatewaySnapshot(e,t){let n=this.dreaming.client!==e.client,r=this.dreaming.connected!==(e.phase===`connected`),i=e.phase===`connected`&&!this.dreaming.connected,a=t===`replacement`||n||r;r&&(this.gatewayEpoch+=1),a?(this.dreaming=this.createGatewayState(e),t!==`initial`&&this.resetTransientState()):(this.dreaming.connected=e.phase===`connected`,this.dreaming.hello=e.hello,this.dreaming.applySessionKey=e.sessionKey),e.phase===`connected`&&this.selectedAgentId&&(a||i)&&this.loadAll(),this.requestUpdate()}applyAgentId(){let e=this.agentId.trim()||null;this.selectedAgentId!==e&&(this.selectedAgentId=e,this.gatewayEpoch+=1,this.resetTransientState(),this.dreaming=this.createGatewayState(),e&&this.dreaming.connected&&this.loadAll())}syncConfigSnapshot(){this.dreaming.configSnapshot=this.context.runtimeConfig.state.configSnapshot}async runDreamingTask(e,t=this.captureTaskScope()){if(!t||!this.isTaskScopeCurrent(t))return;let n=e(t.state);this.requestUpdate();try{let e=await n;return this.isTaskScopeCurrent(t)?e:void 0}finally{this.isTaskScopeCurrent(t)&&this.requestUpdate()}}async confirmDreamingTask(e,t){let n=this.captureTaskScope();!n||!await ke(t)||!this.isTaskScopeCurrent(n)||await this.runDreamingTask(e,n)}async loadAll(e=!1){let t=this.captureTaskScope();if(!t||!t.state.client||!t.state.connected||!t.state.selectedAgentId)return;let n=this.context.runtimeConfig;e?await n.refresh():await n.ensureLoaded(),!(!this.isTaskScopeCurrent(t)||this.context.runtimeConfig!==n)&&(this.syncConfigSnapshot(),await Promise.all([this.runDreamingTask(T,t),this.runDreamingTask(E,t),this.runDreamingTask(D,t),this.runDreamingTask(O,t)]))}setEnabled(e,t){!x(this.dreaming,`config.patch`,`operator.admin`)||this.dreaming.dreamingModeSaving||this.toggleConfirmLoading||this.toggleConfirmOpen||t===e||(this.pendingEnabled=e,this.toggleConfirmOpen=!0,this.dreaming.dreamingStatusError=null)}cancelToggle(){this.toggleConfirmLoading||(this.toggleConfirmOpen=!1,this.pendingEnabled=null,this.dreaming.dreamingStatusError=null)}async confirmToggle(){let e=this.pendingEnabled;if(e==null||this.toggleConfirmLoading||!x(this.dreaming,`config.patch`,`operator.admin`))return;this.toggleConfirmLoading=!0,this.dreaming.dreamingStatusError=null;let t=this.captureTaskScope(),n=this.context.runtimeConfig;if(!t){this.toggleConfirmLoading=!1;return}try{let r=()=>this.isTaskScopeCurrent(t)&&this.context.runtimeConfig===n&&x(t.state,`config.patch`,`operator.admin`),i=await this.runDreamingTask(t=>Ye(t,n,e,r),t);if(!this.isTaskScopeCurrent(t)||this.context.runtimeConfig!==n)return;if(!i){this.dreaming.dreamingStatusError??=_(`dreaming.toggleConfirmation.failed`);return}if(await n.refresh(),!this.isTaskScopeCurrent(t)||this.context.runtimeConfig!==n||(this.syncConfigSnapshot(),await this.runDreamingTask(T,t),!this.isTaskScopeCurrent(t)))return;this.toggleConfirmOpen=!1,this.pendingEnabled=null}finally{this.isTaskScopeCurrent(t)&&(this.toggleConfirmLoading=!1)}}async openWikiPage(e){let t=this.captureTaskScope(),n=t?.state.client,r=t?.state.selectedAgentId;if(!t||!n||!t.state.connected||!r)return null;let i=await n.request(`wiki.get`,{lookup:e,fromLine:1,lineCount:5e3,agentId:r});return!this.isTaskScopeCurrent(t)||t.state.selectedAgentId!==r?null:It(i,e)}async refreshWikiData(e){let t=this.captureTaskScope();if(!t?.state.selectedAgentId)return;let n=this.context.runtimeConfig;await n.refresh(),!(!this.isTaskScopeCurrent(t)||this.context.runtimeConfig!==n)&&(this.syncConfigSnapshot(),await this.runDreamingTask(e,t))}render(){let e=this.dreaming,t=this.context.runtimeConfig.state,n=C(ce(t)),r=n.engineOff?null:e.dreamingStatus,i=r?.enabled??n.enabled,a=e.dreamingStatusLoading||e.dreamingModeSaving,o=x(e,`config.patch`,`operator.admin`),s=e.dreamingStatusLoading||e.dreamDiaryLoading,c=e.selectedAgentId??``;return f`
      <section class="content-header content-header--page agent-memory-panel__header">
        <div class="page-meta">
          <div class="dreaming-header-controls">
            <button
              class="btn btn--subtle btn--sm"
              ?disabled=${a||e.dreamDiaryLoading}
              @click=${()=>void this.loadAll(!0)}
            >
              ${_(s?`dreaming.header.refreshing`:`dreaming.header.refresh`)}
            </button>
            <span class="muted">
              ${n.engineOff?_(`dreaming.header.engineOff`):De(_(`common.enabled`),n.overridden)}
            </span>
            <button
              class="dreams__phase-toggle ${i?`dreams__phase-toggle--on`:``}"
              ?disabled=${!o||a||n.engineOff}
              @click=${()=>this.setEnabled(!i,i)}
            >
              <span class="dreams__phase-toggle-dot"></span>
              <span class="dreams__phase-toggle-label">
                ${_(i?`dreaming.header.on`:`dreaming.header.off`)}
              </span>
            </button>
          </div>
        </div>
      </section>
      ${st({access:{canOpenConfig:x(e,`config.openFile`,`operator.admin`,{requireAdvertisement:!1}),canBackfillDiary:x(e,`doctor.memory.backfillDreamDiary`,`operator.write`),canDedupeDreamDiary:x(e,`doctor.memory.dedupeDreamDiary`,`operator.write`),canResetDiary:x(e,`doctor.memory.resetDreamDiary`,`operator.write`),canResetGroundedShortTerm:x(e,`doctor.memory.resetGroundedShortTerm`,`operator.write`),canRepairDreamingArtifacts:x(e,`doctor.memory.repairDreamingArtifacts`,`operator.write`)},viewState:this.viewState,active:i,selectedAgentId:c,shortTermCount:r?.shortTermCount??0,promotedCount:r?.promotedToday??0,phases:r?.phases??void 0,shortTermEntries:r?.shortTermEntries??[],promotedEntries:r?.promotedEntries??[],dreamingOf:null,nextCycle:Ft(r),timezone:r?.timezone??null,statusError:e.dreamingStatusError,modeSaving:e.dreamingModeSaving,dreamDiaryLoading:e.dreamDiaryLoading,dreamDiaryActionLoading:e.dreamDiaryActionLoading,dreamDiaryActionMessage:e.dreamDiaryActionMessage,dreamDiaryActionArchivePath:e.dreamDiaryActionArchivePath,dreamDiaryError:e.dreamDiaryError,dreamDiaryContent:e.dreamDiaryContent,memoryWikiEnabled:y(t.configSnapshot,`memory-wiki`,{enabledByDefault:!1}),wikiImportInsightsLoading:e.wikiImportInsightsLoading,wikiImportInsightsError:e.wikiImportInsightsError,wikiImportInsights:e.wikiImportInsights,wikiOverviewLoading:e.wikiOverviewLoading,wikiOverviewError:e.wikiOverviewError,wikiOverview:e.wikiOverview,onRefreshDiary:()=>void this.runDreamingTask(E),onRefreshImports:()=>void this.refreshWikiData(D),onRefreshWikiOverview:()=>void this.refreshWikiData(O),onOpenConfig:()=>void this.context.runtimeConfig.openFile(),onOpenWikiPage:e=>this.openWikiPage(e),onBackfillDiary:()=>void this.runDreamingTask(Re),onCopyDreamingArchivePath:()=>void this.runDreamingTask(He),onDedupeDreamDiary:()=>void this.confirmDreamingTask(Ue,{title:_(`dreaming.scene.dedupeDiary`),message:_(`dreaming.actions.confirmDedupeDescription`),confirmLabel:_(`dreaming.scene.dedupeDiary`),danger:!0}),onResetDiary:()=>void this.runDreamingTask(ze),onResetGroundedShortTerm:()=>void this.runDreamingTask(Be),onRepairDreamingArtifacts:()=>void this.confirmDreamingTask(Ve,{title:_(`dreaming.scene.repairCache`),message:_(`dreaming.actions.confirmRepairDescription`),confirmLabel:_(`dreaming.scene.repairCache`)}),onViewStateChange:()=>this.requestUpdate()})}
      ${Qe({open:this.toggleConfirmOpen,enabling:this.pendingEnabled===!0,loading:this.toggleConfirmLoading,onConfirm:()=>void this.confirmToggle(),onCancel:()=>this.cancelToggle(),hasError:!!e.dreamingStatusError})}
    `}},c([n({context:he,subscribe:!0})],X.prototype,`context`,void 0),c([fe({attribute:!1})],X.prototype,`agentId`,void 0),c([p()],X.prototype,`dreaming`,void 0),c([p()],X.prototype,`toggleConfirmOpen`,void 0),c([p()],X.prototype,`toggleConfirmLoading`,void 0),c([p()],X.prototype,`pendingEnabled`,void 0),customElements.get(`openclaw-agent-memory-panel`)||customElements.define(`openclaw-agent-memory-panel`,X)})))()}function Rt(e){return e===`view_image`?`image`:e.replace(/_([a-z])/gu,(e,t)=>t.toUpperCase())}function zt(e){return e?.groups?.length?e.groups.map(e=>{let t=Vt.get(e.id);return{id:e.id,label:t?_(`agents.toolCatalog.groups.${t}`):e.label,source:e.source,pluginId:e.pluginId,tools:e.tools.map(e=>({id:e.id,label:e.label,description:e.description,source:e.source,pluginId:e.pluginId,optional:e.optional,defaultProfiles:[...e.defaultProfiles]}))}}):Z.map(e=>({id:e.id,label:_(`agents.toolCatalog.groups.${e.labelId}`),tools:e.tools.map(e=>({id:e,label:e,description:_(`agents.toolCatalog.descriptions.${Rt(e)}`)}))}))}function Bt(e){return e?.profiles?.length?e.profiles.map(e=>{let t=$.get(e.id);return t?{id:e.id,label:_(t)}:e}):Q.map(e=>({id:e.id,label:_(e.labelKey)}))}var Z,Q,Vt,$;function Ht(){return(Ht=e((()=>{g(),Z=[{id:`fs`,labelId:`files`,tools:[`read`,`write`,`edit`,`apply_patch`]},{id:`runtime`,labelId:`runtime`,tools:[`exec`,`process`]},{id:`web`,labelId:`web`,tools:[`web_search`,`web_fetch`]},{id:`memory`,labelId:`memory`,tools:[`memory_search`,`memory_get`]},{id:`sessions`,labelId:`sessions`,tools:[`sessions_list`,`sessions_history`,`sessions_send`,`sessions_spawn`,`session_status`]},{id:`ui`,labelId:`ui`,tools:[`browser`,`canvas`]},{id:`messaging`,labelId:`messaging`,tools:[`message`]},{id:`automation`,labelId:`automation`,tools:[`cron`,`gateway`]},{id:`nodes`,labelId:`nodes`,tools:[`nodes`]},{id:`agents`,labelId:`agents`,tools:[`agents_list`]},{id:`media`,labelId:`media`,tools:[`view_image`]}],Q=[{id:`minimal`,labelKey:`agents.toolCatalog.profiles.minimal`},{id:`coding`,labelKey:`agents.toolCatalog.profiles.coding`},{id:`messaging`,labelKey:`agents.toolCatalog.profiles.messaging`},{id:`full`,labelKey:`agents.toolCatalog.profiles.full`}],Vt=new Map(Z.map(e=>[e.id,e.labelId])),$=new Map(Q.map(e=>[e.id,e.labelKey]))})))()}export{Lt as a,qe as c,zt as i,Ht as n,A as o,Bt as r,C as s,Q as t};
//# sourceMappingURL=tool-catalog-4WDY1rLB.js.map