UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

942 lines 331 kB
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./zh-CN-CCBiPfJU.js","./rolldown-runtime-DkW27tQK.js","./zh-TW-DAtEOX12.js","./pt-BR-Dc83AmX8.js","./de-Cns7YiC5.js","./es-BeSd_VR3.js","./ja-JP-DaTR1bRo.js","./ko-D6Zpjszv.js","./fr-CAc4qqx3.js","./hi-VMTOm6Mt.js","./ar-_lTcZesI.js","./it-_aZlbdnK.js","./tr-Bhey36qf.js","./uk-B4ATRiEw.js","./id-CJoOqEOc.js","./pl-DSMuJmop.js","./th-EgjS0R8e.js","./vi-DHHnlU7U.js","./nl-CzJEcK44.js","./fa-Br8Tv6fC.js","./ru-D_dWB2Rv.js","./github-link-hovercard.runtime-_UamOvxd.js","./control-ui-foundation-Cydpkyqa.js","./control-ui-core-Rwzhj6nO.js","./lit-runtime-CV_MH99K.js","./control-ui-core-YphAl4aM.js","./gateway-runtime-Bqqcp9-I.js","./control-ui-core-ClxHIvNM.css","./control-ui-boot-shared-BYq7Cchl.js","./control-ui-boot-shared-Deak_Sjt.js","./control-ui-boot-shared-gfE6fZcA.js","./markdown-runtime-Bn6OdBVq.js","./control-ui-boot-shared-DfZ39Yj9.js","./control-ui-boot-shared-CXVvK2AW.js","./control-ui-boot-shared-3juXI2I2.js","./control-ui-boot-shared-BVNXvWX-.js","./control-ui-boot-shared-KspYIvAF.css","./portaled-hovercard-CdHol2CK.js","./github-link-hovercard-sckJWnBv.css"])))=>i.map(i=>d[i]);
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{Er as t,Kn as n,Vn as r,b as i,ii as a,la as o,qt as s,ri as c,rr as l,wr as u,y as d}from"./control-ui-foundation-Cydpkyqa.js";import{Cc as f,Eo as p,J as ee,Oo as te,Q as ne,Sc as m,Y as re,bc as ie,c as ae,et as oe,nt as se,rt as ce,xc as le,yc as ue}from"./control-ui-core-Rwzhj6nO.js";import{$ as h,K as g,Q as _,X as v,dt as de,nt as fe,q as y,st as b}from"./lit-runtime-CV_MH99K.js";import{Fn as pe,Nn as me,Rt as he,Yn as ge,cr as _e,nr as ve,ur as ye,zt as be}from"./control-ui-core-YphAl4aM.js";var xe,Se,Ce,we;function Te(){return(Te=e((()=>{xe={menuLabel:`Agent menu`,agents:`Agents`,switchAgent:`Switch agent`,working:`Working…`,ready:`Ready to chat`,whatCanAgentDo:`What can {name} do?`,help:`Help`,getHelp:`Get help`,getApps:`Get the apps`,discord:`Discord community`,viewChangelog:`View changelog`,agentSettings:`Agent settings`},Se={label:`Agent`,allAgents:`All agents`},Ce={pinToSwitcher:`Pin to switcher`,unpinFromSwitcher:`Unpin from switcher`},we={title:`Identity`,subtitle:`Name, emoji, and avatar shown in chats and the sidebar.`,name:`Display name`,namePlaceholder:`Agent name`,emoji:`Emoji`,chooseImage:`Choose image…`,replaceImage:`Replace image…`,imageUnusable:`That image can't be used. Pick an image file up to 2 MB.`,fileHint:`Saving mirrors identity fields to IDENTITY.md; configured values take precedence.`}})))()}var Ee;function De(){return(De=e((()=>{Te(),Ee={pluginUi:{customize:`Customize UI`,selectionScope:`Choose views for this browser window. Built-in views are always available.`,builtin:`Built-in view`,retryView:`Retry plugin view`,reload:`Reload plugin UI`,dashboardTitle:`Session dashboard`,dashboardEmpty:`This session has no dashboard widgets yet.`,customPluginsDisabled:`Custom plugin UI is off`,customPluginsEnableHint:`Enable Custom plugin UI in Labs, then restart the Gateway and reload this browser tab.`,openLabs:`Open Labs`,surface:{"session-list":`Session list`,composer:`Composer`,workspace:`Workspace`,transcript:`Transcript`,"tool-result":`Tool results`}},capacityMeter:{workerSlots:`{used} of {total} slots busy`,unavailable:`Slot utilization unavailable`,execHost:`Codex exec`},common:{health:`Health`,ok:`OK`,yes:`Yes`,no:`No`,default:`Default`,active:`Active`,loading:`Loading…`,gatewayStarting:`Gateway starting…`,refreshing:`Refreshing…`,offline:`Offline`,connect:`Connect`,connected:`Connected`,refresh:`Refresh`,retry:`Retry`,staleData:`Showing stale data.`,reload:`Reload`,reset:`Reset`,restore:`Restore`,unarchive:`Unarchive`,undo:`Undo`,probe:`Probe`,call:`Call`,confirm:`Confirm`,dontAskAgain:`Don't ask me again`,cancel:`Cancel`,close:`Close`,previous:`Previous`,next:`Next`,continue:`Continue`,back:`Back`,create:`Create`,copy:`Copy`,copied:`Copied!`,copyFailed:`Copy failed`,copyCode:`Copy code`,copyTable:`Copy table`,expandTable:`Expand table`,expandedTable:`Expanded table`,closeTable:`Close expanded table`,resizeSplitView:`Resize split view`,delete:`Delete`,remove:`Remove`,dismiss:`Dismiss`,dismissAndDontShowAgain:`Dismiss and don't show again`,unselect:`Unselect`,enabled:`Enabled`,disabled:`Disabled`,failed:`Failed`,none:`none`,na:`n/a`,never:`never`,justNow:`just now`,now:`now`,unknown:`Unknown`,configured:`Configured`,running:`Running`,linked:`Linked`,mode:`Mode`,system:`System`,light:`Light`,dark:`Dark`,baseUrl:`Base URL`,lastStart:`Last start`,lastProbe:`Last probe`,lastConnect:`Last connect`,lastMessage:`Last message`,authAge:`Auth age`,credential:`Credential`,audience:`Audience`,publicKey:`Public Key`,probeOk:`Probe ok`,probeFailed:`Probe failed`,reloadConfig:`Reload Config`,loadConfig:`Load config`,loadApprovals:`Load approvals`,settingsSections:`Settings sections`,version:`Version`,docs:`Docs`,learnMore:`Learn more`,colorMode:`Color mode`,colorModeOption:`Color mode: {mode}`,search:`Search`,save:`Save`,saving:`Saving…`,saveAndPublish:`Save & Publish`,importing:`Importing…`,importFromRelays:`Import from Relays`,showAdvanced:`Show Advanced`,hideAdvanced:`Hide Advanced`,unsavedChanges:`You have unsaved changes`,working:`Working…`,showQr:`Show QR`,relink:`Relink`,waitForScan:`Wait for scan`,logout:`Logout`,skipToMainContent:`Skip to main content`},focus:{unsupported:`This focused view is not supported.`},shortcutsOverlay:{title:`Keyboard shortcuts`,sections:{general:`General`,chat:`Chat`,panels:`Panels`,sidebar:`Sidebar`,imageViewer:`Image viewer`,approvals:`Approvals`},labels:{commandPalette:`Open command palette`,keyboardShortcuts:`Show keyboard shortcuts`,toggleSidebar:`Toggle sidebar`,debugOverlay:`Toggle debug overlay`,appearanceSettings:`Open appearance settings`,startNewSession:`Start new session (from the new-session page)`,closeDialog:`Close dialog or exit settings`,sendMessage:`Send message`,newline:`Insert new line`,steerImmediately:`Steer active response`,historyRecall:`Browse sent message history`,transcriptSearch:`Search conversation`,clearReply:`Clear reply`,stopResponse:`Stop active response`,cancelDictation:`Cancel dictation`,saveQueuedMessage:`Save queued message`,toggleSessionSelect:`Select multiple sessions`,extendSessionSelect:`Extend session selection`,zoomIn:`Zoom in`,zoomOut:`Zoom out`,zoomReset:`Reset zoom`,terminalPanel:`Toggle terminal panel`,homePanel:`Talk to your Home agent`,workspaceFiles:`Toggle workspace files`,sideChat:`Toggle side chat`,approveOnce:`Approve once`,approveAlways:`Always allow`,denyApproval:`Deny approval`}},optionCard:{recommended:`Recommended`,skip:`Skip for now`},nativeLinkMenu:{label:`Link actions`,openInline:`Open in Sidebar`,openExternal:`Open in Default Browser`,copy:`Copy Link`},browserLinkPreferences:{openInControlUi:`Open links in Control UI browser`},filePreview:{label:`Support files`,listLabel:`Files`,searchPlaceholder:`Search files…`,readOnly:`read-only`,emptyTitle:`No files match`,emptySubtitle:`Try another file name or content search.`,copyFile:`Copy file`,fileCount:`{count} files`,filteredFileCount:`{count}/{total} files`,noMatches:`No files match.`,navigate:`navigate`,kind:{text:`Text`,shell:`Shell`,file:`File`}},mcpApp:{title:`MCP App`,unavailable:`MCP App unavailable: {error}`,errors:{gatewayUnavailable:`MCP App gateway unavailable`,mountUnavailable:`MCP App mount unavailable`,sandboxTimedOut:`MCP App sandbox timed out`,sandboxUnavailable:`MCP App sandbox unavailable`,initializationTimedOut:`MCP App initialization timed out`,requestFailed:`Request failed`,invalidSandboxUrl:`MCP App sandbox URL is invalid`}},githubPreview:{coAuthors:`Co-authored by {logins}`,loading:`Loading GitHub details…`,unavailable:`GitHub preview unavailable`,states:{merged:`Merged`,draft:`Draft`,open:`Open`,closed:`Closed`,notPlanned:`Not planned`},file:`{count} file`,files:`{count} files`,comment:`{count} comment`,comments:`{count} comments`,pullRequest:`pull request`,issue:`issue`,ariaLabel:`{state} {kind} {repo} #{number}: {title}, by {author}`},sessionHovercard:{ariaLabel:`Session information`,agentNotepad:`Agent Notepad`,attributionOther:`& {count} other`,attributionOthers:`& {count} others`,moreParticipants:`+{count}`,moreParticipantsLabel:`{count} more participants`,projectLabel:`Project`,workspaceLabel:`Workspace`,branchLabel:`Branch`,runsOn:`Runs on {providerId} · {profileId}`,more:`+{count} more`,changedFile:`{count} file`,changedFiles:`{count} files`,pullRequestLabel:`Pull request #{number}, {state}`,pullRequestAuthorLabel:`Opened by {login}`,states:{open:`Open`,draft:`Draft`,merged:`Merged`,closed:`Closed`},checks:{passing:`CI checks passing`,failing:`CI checks failing`,pending:`CI checks running`}},sessionProgressCard:{title:`Progress`,composerTitle:`Task progress`,shortCount:`{completed} of {total}`,noteLabel:`Progress note`,dismiss:`Dismiss progress card`,dismissFailed:`Could not dismiss the progress card. Try again.`,widgetLabel:`Session progress`,widgetLoading:`Loading session progress…`,widgetEmpty:`No progress card yet`,widgetUnavailable:`Session progress is unavailable.`,widgetAccessDenied:`Select a session you can access or change sharing for this session.`,countLabel:`{completed} of {total} completed`,activity:{updated:`Updated {time}`,completed:`Completed {time}`,failed:`Failed {time}`,stopped:`Stopped {time}`},outcome:{completed:`Completed`,failed:`Failed`,stopped:`Stopped`},stepLabel:`{step}, {status}`,status:{completed:`completed`,failed:`failed`,inProgress:`in progress`,paused:`paused`,pending:`pending`,stopped:`stopped`},receipt:{updating:`Updating progress`,failed:`Progress update failed`,updated:`Progress updated — {completed}/{total} · {current}`,noteUpdated:`Progress note updated`,cleared:`Progress cleared`}},channels:{lastError:`Last error`,refreshingStaleSnapshot:`Refreshing channel status in the background; showing the last successful snapshot.`,hub:{connectedTitle:`Connected channels`,addTitle:`Add a channel`,addSubtitle:`Pick a service and follow the guided setup.`,updatedAgo:`Updated {ago}`,noneConnected:`No channels connected yet. Pick one below to get started.`,partialSnapshot:`Some channel checks did not finish before the UI budget.`,stateRunning:`Running`,stateConfigured:`Configured`,stateAttention:`Needs attention`,setUp:`Set up`,guidedSetup:`Guided step-by-step setup`,openDetails:`Open details`,lastMessageAgo:`Last message {ago}`,browseAllTitle:`More channels…`,browseAllSubtitle:`Browse every available channel, including installable plugins.`,runSetup:`Run setup`,adminRequired:`Browsing only. Channel setup requires operator.admin access.`,saveBeforeSetup:`You have unsaved channel config changes. Save or reload them before running guided setup.`},pairing:{title:`DM access requests`,subtitle:`Review people waiting to send direct messages to pairing-protected channels.`,channelFilter:`Channel`,accountFilter:`Account`,allChannels:`All channels`,allAccounts:`All accounts`,approve:`Approve`,dismiss:`Dismiss`,approveAria:`Approve {sender} for {channel}, account {account}`,dismissAria:`Dismiss {sender} for {channel}, account {account}`,requested:`Requested {ago}`,expires:`Expires {ago}`,senderDetails:`Sender details`,missingPermission:`This connection does not have operator.pairing access, so DM requests cannot be reviewed.`,noAccounts:`No configured channel accounts use DM sender pairing.`,noRequests:`No pending DM access requests.`,noFilteredRequests:`No pending requests match these filters.`,limits:`Requests expire after {minutes} minutes. Each channel account can hold up to {count} pending requests.`,detailTitle:`DM access`,detailSubtitle:`People must be approved before their direct messages reach the agent.`,pendingCount:`{count} pending`,noPending:`No pending requests`,review:`Review requests`,approveDialogTitle:`Approve DM access`,dismissDialogTitle:`Dismiss DM access request`,approveExplanation:`This lets the sender talk to the agent in direct messages. It does not grant group access.`,dismissExplanation:`This removes the current request but does not block the sender. They can request access again later.`,notifyRequester:`Notify the requester after approval`,makeCommandOwner:`Also make this sender the first command owner`,commandOwnerHelp:`Command owners can run privileged commands and approve dangerous actions. This option is only available while no owner is configured.`,commandOwnerNeedsAdmin:`No command owner is configured. This connection needs operator.admin to assign the first owner.`,approvedNotice:`DM access approved.`,approvedOwnerNotice:`DM access approved and the first command owner was configured.`,approvedNotificationFailedNotice:`DM access approved, but the requester notification could not be delivered.`,approvedOwnerFailedNotice:`DM access approved, but the first command owner could not be configured.`,approvedFollowupsFailedNotice:`DM access approved, but requester notification and command-owner setup both failed.`,dismissedNotice:`DM access request dismissed. The sender can request access again.`},setup:{dialogLabel:`Set up {channel}`,title:`Set up {channel}`,genericTitle:`a channel`,subtitle:`Guided channel setup`,starting:`Starting setup…`,working:`Working…`,sessionExpired:`This setup session expired after the Gateway restarted. Close this dialog, then start channel setup again.`,continue:`Continue`,finish:`Finish`,copyText:`Copy`,openLink:`Open link`,viewDocs:`View docs`,doneTitle:`Channel configured`,doneBody:`Configuration saved. The gateway reloads the channel automatically; check its card for live status.`,doneNoChangesTitle:`No changes made`,doneNoChangesBody:`Setup finished without configuring a channel. Nothing was saved.`,whatsappScanTitle:`Link WhatsApp by scanning the QR code`,whatsappScanHelp:`On your phone, open WhatsApp → Settings → Linked devices → Link a device, then scan this code.`,whatsappQrLoading:`Generating QR code…`,whatsappQrHint:`Click Show QR to generate a pairing code.`,whatsappQrAlt:`WhatsApp QR`,whatsappLinked:`WhatsApp is linked and ready.`,regenerateQr:`New QR code`,linkLater:`Link later`},config:{schemaUnavailable:`Schema unavailable. Use Raw.`,channelSchemaUnavailable:`Channel config schema unavailable.`,loadingSchema:`Loading config schema…`},generic:{subtitle:`Channel status and configuration.`},discord:{title:`Discord`,subtitle:`Bot status and channel configuration.`},googleChat:{title:`Google Chat`,subtitle:`Chat API webhook status and channel configuration.`},imessage:{title:`iMessage`,subtitle:`macOS bridge status and channel configuration.`},signal:{title:`Signal`,subtitle:`signal-cli status and channel configuration.`},slack:{title:`Slack`,subtitle:`Socket mode status and channel configuration.`},telegram:{title:`Telegram`,subtitle:`Bot status and channel configuration.`},whatsapp:{title:`WhatsApp`,subtitle:`Link WhatsApp Web and monitor connection health.`,phoneNumber:`Phone number`,loggedOut:`Logged out.`,logoutConfirmTitle:`Log out of WhatsApp account {accountId}?`,logoutConfirmMessage:`Logging out of account {accountId} stops its listener and deletes its saved credentials.`,logoutNotCleared:`No stored WhatsApp session was cleared. It may already be absent, or its auth directory may require manual cleanup.`},gatewayUrlConfirmation:{title:`Change Gateway URL`,subtitle:`This will reconnect to a different gateway server`,warning:`Only confirm if you trust this URL. Malicious URLs can compromise your system.`},nostr:{title:`Nostr`,subtitle:`Decentralized DMs via Nostr relays (NIP-04).`,profile:`Profile`,editProfile:`Edit Profile`,profilePicture:`Profile picture`,noProfile:`No profile set.`,noProfileHint:`Click "Edit Profile" to add your name, bio, and avatar.`,name:`Name`,displayName:`Display Name`,about:`About`,advanced:`Advanced`,profilePicturePreview:`Profile picture preview`,account:`Account`,username:`Username`,usernameHelp:`Short username (e.g., satoshi)`,bio:`Bio`,bioPlaceholder:`Tell people about yourself...`,bioHelp:`A brief bio or description`,displayNameHelp:`Your full display name`,avatarUrl:`Avatar URL`,avatarHelp:`HTTPS URL to your profile picture`,bannerUrl:`Banner URL`,bannerHelp:`HTTPS URL to a banner image`,website:`Website`,websiteHelp:`Your personal website`,nip05Identifier:`NIP-05 Identifier`,nip05Help:`Verifiable identifier (e.g., you@domain.com)`,lightningAddress:`Lightning Address`,lightningHelp:`Lightning address for tips (LUD-16)`,placeholders:{username:`satoshi`,displayName:`Satoshi Nakamoto`,avatarUrl:`https://example.com/avatar.jpg`,bannerUrl:`https://example.com/banner.jpg`,website:`https://example.com`,nip05:`you@example.com`,lightningAddress:`you@getalby.com`},notices:{timeout:`Request timed out after 30 seconds; the server may still have applied the change — check the profile before retrying.`,operationFailed:`{prefix}: {error}`,updateFailed:`Profile update failed`,updateFailedStatus:`Profile update failed ({status})`,publishFailed:`Profile publish failed on all relays.`,published:`Profile published to relays.`,importFailed:`Profile import failed`,importFailedStatus:`Profile import failed ({status})`,importedFromRelays:`Profile imported from relays. Review and publish.`,imported:`Profile imported. Review and publish.`}}},lazyView:{errorTitle:`Panel failed to load`,genericSubtitle:`Something went wrong while loading this panel.`,staleTitle:`A new version is available`,staleSubtitle:`OpenClaw was updated in the background. Reload to get the latest panel.`,reloading:`Reloading…`,retry:`Retry`,stylesFailed:`Styles failed to load, so the page may look broken.`},communityInvite:{cardLabel:`Join the OpenClaw community on Discord`,artAlt:`A lobster beside the Discord mark on a lit seafloor pedestal`,title:`Come build with us`,body:`Ask anything, show what you're making, and find out what everyone else is building.`,bodyGreeting:`Or just say hi.`,action:`Join us on Discord`,dismissForever:`Dismiss and don't show again`,dismissFailed:`Invitation dismissed, but your preference couldn't be saved.`},updates:{adminRequired:`Administrator access is required to change update settings or start an update.`,campaign:{countdown:`Updating in {time}`,waitingForIdle:`Waiting for active work · forced update in {time}`,held:`Update held · resumes in {time}`,applying:`Applying update…`},holdOneHour:`Hold 1 h`,reviewUpdate:`Review update`,run:{title:`Update progress`,phases:`Update phases`,steps:`Installation steps`,details:`Step details`,noDetails:`No step details recorded yet.`,verification:`Verification checks`,report:`Update report`,restarting:`Gateway restarting…`,reconnecting:`Reconnecting automatically. Update progress is saved on the gateway.`,progress:`{completed} of {total} phases complete`,phase:{requested:`Requested`,staging:`Staging`,validating:`Validating`,repairing:`Repairing`,activating:`Activating`,restarting:`Restarting`,verifying:`Verifying`,finished:`Finished`},step:{completed:`Complete`,in_progress:`In progress`,pending:`Pending`,failed:`Failed`,skipped:`Skipped`},oracle:{service:`Service`,version:`Version`,plugins:`Plugins`,channels:`Channels`,inference:`Inference`},oracleState:{pass:`Passed`,warn:`Not verified`,fail:`Failed`,pending:`Pending`}},confirm:{action:`Update and restart`},target:{version:`v{version}`,commitBehind:`{count} commit behind`,commitsBehind:`{count} commits behind`},sidebar:{campaignTarget:`{status} · {target}`,updating:`Updating Gateway…`,availableTitle:`Update available`,availableSummary:`A newer revision is ready.`,blockedTitle:`Update blocked`,blockedSummary:`The selected revision could not be applied to this checkout.`,blockedWaiting:`Blocked · waiting for active work · {target}`,waitingForIdle:`Waiting for active work`},dialog:{disconnected:"The Gateway disconnected during the update. This page reconnects on its own. If it stays disconnected, run `openclaw triage` on the Gateway host to open a local coding agent for diagnosis and repair.",restarting:"The Gateway is restarting. This page disconnects and reconnects on its own. If it stays disconnected, run `openclaw triage` on the Gateway host to open a local coding agent for diagnosis and repair."},channel:{},installKind:{},page:{},coalescedRestart:`Update installed. A gateway restart is already in progress; status will refresh after it reconnects.`,error:`Update error: {error}`,status:`Update {status}: {reason}. {guidance}`,verificationFailedWithIdentity:"Update finished, but the running install does not match the expected revision. Expected {expected}, running {actual}. Run `openclaw triage` on the Gateway host before retrying.",handoffTimeout:"Update completion was not confirmed. Run `openclaw triage` on the Gateway host and inspect the result before retrying.",outcomeUnknown:"The update outcome is unknown. Run `openclaw triage` on the Gateway host and inspect the result before retrying.",triage:{hostHint:"If Ask OpenClaw is unavailable, run `openclaw triage` on the Gateway host to open a local coding agent for diagnosis and repair. Diagnose the cause before retrying."},failureReasons:{dirty:`Commit or stash changes, then retry.`,noUpstream:`Set an upstream branch, then retry.`,notGitInstall:"Not a git checkout. Run `openclaw update` from the CLI for a global reinstall.",notOpenclawRoot:`Run the update from an OpenClaw checkout or use the CLI global reinstall path.`,depsInstallFailed:`Dependency install failed. Fix the install error and retry.`,buildFailed:`Build failed. Fix the build error and retry.`,buildDirty:`The selected revision's build changed checkout files. Retry with a revision that includes its generated artifacts.`,uiBuildFailed:`The control UI rebuild failed. Fix the UI build error and retry.`,globalInstallFailed:`The global package install did not verify on disk. Retry or reinstall from the CLI.`,restartDisabled:`The update was not applied because gateway restarts are disabled. Enable restarts in config, then retry.`,restartUnavailable:`This global install cannot be safely replaced while restarts are disabled and no supervisor is present.`,restartUnhealthy:`The replacement process never became healthy. The previous process stayed up so you can recover.`,restartRevisionMismatch:`The restarted Gateway is running a different revision. Check the service install root and retry.`,restartRevisionUnavailable:`The restarted Gateway could not report its revision. Check the service install root and logs before retrying.`,alreadyCurrent:`This checkout is already at its tracked upstream revision.`,managedServiceHandoffAlreadyRunning:`Another managed update is already running. Wait for it to complete, then refresh update status.`,managedServiceHandoffUnavailable:"Stop the foreground Gateway, run `openclaw update`, then launch it again. For automatic updates, install a managed Gateway service.",doctorFailed:"Doctor repair failed. Run `openclaw doctor --non-interactive` and retry.",managedServiceHandoffFailed:"The update helper stopped before finishing. Run `openclaw update` in the terminal to see why.",managedServiceHandoffSpawnFailed:"The Gateway could not start the update helper. Run `openclaw update` in the terminal instead.",managedServiceHandoffParentTimeout:"The Gateway stayed up too long for the update helper. Start the update again, or run `openclaw update`.",default:`See the gateway logs for the exact failure and retry once the cause is fixed.`},failedAtStep:`The update failed at {step}: {cause}.`,succeededVersion:`Gateway updated to v{version}.`,succeededCommit:`Gateway updated · now on {sha}.`,succeeded:`Gateway updated and restarted.`},devices:{readOnly:{pairingRequired:`Browsing only. Device changes require operator.pairing access.`,adminRequired:`Browsing only. Exec approvals and node bindings require operator.admin access.`,pairingAndAdminRequired:`Browsing only. Device changes require operator.pairing; exec approvals and node bindings require operator.admin.`},pairing:{button:`Pair device`,adminRequired:`Administrator access is required to create setup codes.`,title:`Pair a device`,subtitle:`Create a secure setup for a mobile app or node host.`,noApp:`Don't have the app yet?`,getApps:`Get the apps`,generating:`Creating a secure setup code…`,accessTitle:`Setup type`,fullAccess:`Full access (recommended)`,fullAccessHint:`Device capabilities plus complete Gateway controls, including settings and upgrades.`,limitedAccess:`Limited access`,limitedAccessHint:`Device capabilities, chat, and approvals without administrative controls.`,nodeAccess:`Node host`,nodeAccessHint:`Connect a computer as a command and capability host.`,generateCode:`Create setup code`,transportLimitedTitle:`Limited for network safety`,transportLimitedHint:`This Gateway URL uses plaintext ws://. Use wss:// or Tailscale Serve, then create a new code for full access.`,failed:`Could not create a setup code.`,statusFailed:`Could not verify whether pairing completed.`,loadFailed:`Could not load the pairing dialog. Check your connection and try again.`,qrAlt:`OpenClaw mobile pairing QR code`,qrUnavailable:`QR unavailable. Copy the setup code instead.`,copySetupCode:`Copy setup code`,nodeExpiresIn:`This setup link expires in {time}.`,nodeExpired:`This setup link has expired. Create a new one.`,newCode:`New code`,showSetupCode:`Show setup code`,pending:`Device requests waiting for review: {count}`,review:`Review`,waiting:`Official OpenClaw mobile apps connect automatically after scanning.`,pairedTitle:`Device paired`,deliveryUncertainTitle:`Pairing delivery could not be confirmed`,deliveryUncertainHint:`The setup code is retired, but the device may not have received its credential. Check Manage devices, remove the device if needed, then create a new code.`,fullAccessSummary:`Full access`,nodeAccessSummary:`Node access`,done:`Done`,expiredTitle:`Setup code expired`,generateNewCode:`Generate new code`,nodeWaiting:`Run the command on the device, then review its pairing request here.`,help:`Pairing help`,helpNewTab:`Pairing help (opens in a new tab)`,manageDevices:`Manage devices`},binding:{loadConfigHint:`Load config to edit bindings.`,formModeHint:`Switch the Config tab to Form mode to edit bindings here.`,execNodeBinding:`Exec node binding`,execNodeBindingSubtitle:`Pin agents to a specific node when using exec host=node.`,defaultBinding:`Default binding`,defaultBindingHint:`Used when agents do not override a node binding.`,node:`Node`,anyNode:`Any node`,noNodes:`No nodes with system.run available.`,noAgents:`No agents found.`,defaultAgent:`default agent`,agent:`agent`,usesDefault:`uses default ({node})`,override:`override: {node}`,binding:`Binding`,useDefault:`Use default`,any:`any`},inventory:{title:`Paired devices`,connected:`connected`,desktop:`Desktop`,actions:`Actions`,actionsName:`Actions for {name}`,openDesktop:`Open desktop`,copyDeviceId:`Copy device ID`,deviceIdCopied:`Device ID copied`,removeAction:`Remove…`,lastKnown:`last known {time}`,deviceIdLabel:`Device ID`,remoteIpLabel:`Remote IP`,scopesLabel:`Scopes`,requestedAccessLabel:`Requested access`,approvedAccessLabel:`Approved access`,tokenRole:`Role`,tokenStatus:`Status`,tokenAge:`Age`,desktopOpenWindow:`Open this desktop in a new window`,desktopEnableHint:`Enable desktop.host.enabled: true in the node config and add desktop.stream to gateway.nodes.commands.allow, then restart both. The node reconnects with a pending reapproval for desktop.stream; approve it here or with openclaw nodes approve.`,uptime:`up {time}`,loadLabel:`load {load}`,loadTitle:`Load averages (1 / 5 / 15 min): {averages} on {cores} cores`,memoryTitle:`Memory: {used} used / {total} total`,diskLabel:`{available} free`,diskTitle:`Disk: {available} available / {total} total`,summaryConnected:`{connected} of {total} connected`,summaryPending:`{count} awaiting approval`,cleanupStale:`Clean up {count} stale`,pendingApproval:`Pending approval`,empty:`No paired devices.`,connectedWithoutPairing:`Connected without pairing`,olderPairing:`{count} older pairing of {name}`,olderPairings:`{count} older pairings of {name}`,autoPaired:`auto-paired`,versionDrift:`version drift`,versionDriftTitle:`Device {nodeVersion}; Gateway {gatewayVersion}. Update the older component to align the fleet.`,workerVersion:`Worker {version}`,workerMissing:`worker missing`,workerMissingTitle:`The Gateway-managed worker bundle is missing. Start a new session on this device to reinstall it.`,manualWake:`manual wake required`,manualWakeTitle:`The Gateway cannot wake an offline Windows device. Start the machine or restore its network connection.`,approvalNeeded:`approval needed`,inputAgo:`input {time} ago`,seen:`seen {time}`,approved:`approved {time}`,details:`Details`,deviceId:`Device ID: {id}`,tokens:`Tokens`,capabilities:`Capabilities`,commands:`Commands`,offline:`offline`,approve:`Approve`,reject:`Reject`,remove:`Remove`,removePromptTitle:`Remove {name}?`,removePromptBody:`This device must pair again before it can reconnect.`,removeStalePromptTitle:`Remove {count} stale pairings?`,removeStalePromptTitleOne:`Remove 1 stale pairing?`,removeStalePromptBody:`Affected clients re-pair silently on their next connection.`,rejectDevicePromptTitle:`Reject this device pairing request?`,rejectNodePromptTitle:`Reject this node pairing request?`,rejectPromptBody:`The client must send a new pairing request before it can connect.`,revokePromptTitle:`Revoke the {role} token?`,revokePromptBody:`This token stops working immediately and cannot be restored.`,rotatePromptTitle:`New {role} token`,rotatePromptBody:`Copy this token now and store it securely. It is shown once and cannot be recovered.`,rotateAcknowledge:`I saved this token`,rotateDismissHint:`This dialog stays open until you confirm the token is saved.`,rotateWithheldTitle:`Token rotated · {device}`,rotateWithheldNext:`It will reconnect with the new token automatically — nothing else to do.`,rotateWithheldException:`If it doesn't reconnect on its own, pair it again.`,rotateWithheldNote:`For security, the new token is only revealed on the device itself.`,gateway:`gateway`,unpaired:`unpaired`,unknownClient:`unknown client`,revoked:`revoked`,active:`active`,rotate:`Rotate`,revoke:`Revoke`,none:`none`,rolesAndScopes:`roles: {roles} · scopes: {scopes}`,scopeUpgrade:`scope upgrade requires approval`,roleUpgrade:`role upgrade requires approval`,reapproval:`reconnect details changed; approval required`,newPairing:`new device pairing request`,repair:`repair`,requestedAt:`{note} · requested {time}`},capabilities:{},execApprovals:{title:`Exec approvals`,subtitlePrefix:`Allowlist and approval policy for`,loadHint:`Load exec approvals to edit allowlists.`,hostNativePolicy:`Host-native policy`,hostNativeHint:`Read-only here. Edit from the companion app or CLI.`,native:`Native`,defaultAction:`Default action`,rule:`{count} rule`,rules:`{count} rules`,allShells:`all shells`,off:`off`,on:`on`,target:`Target`,targetHint:`Gateway edits local approvals; node edits the selected node.`,host:`Host`,gateway:`Gateway`,node:`Node`,selectNode:`Select node`,noNodes:`No nodes advertise exec approvals yet.`,scope:`Scope`,defaults:`Defaults`,security:`Security`,defaultSecurity:`Default security mode.`,defaultValue:`Default: {value}.`,mode:`Mode`,useDefaultValue:`Use default ({value})`,ask:`Ask`,defaultPrompt:`Default prompt policy.`,askFallback:`Ask fallback`,promptUnavailable:`Applied when the UI prompt is unavailable.`,fallback:`Fallback`,autoAllowSkills:`Auto-allow skill CLIs`,autoAllowSkillsHint:`Allow skill executables listed by the Gateway.`,usingDefault:`Using default ({value}).`,override:`Override ({value}).`,useDefault:`Use default`,allowlist:`Allowlist`,allowlistHint:`Case-insensitive glob patterns.`,addPattern:`Add pattern`,emptyAllowlist:`No allowlist entries yet.`,newPattern:`New pattern`,lastUsed:`Last used: {time}`,pattern:`Pattern`,remove:`Remove`,options:{deny:`Deny`,allowlist:`Allowlist`,full:`Full`,off:`Off`,onMiss:`On miss`,always:`Always`}}},worktrees:{adminRequired:`Browsing only. Worktree changes require operator.admin access.`,newWorktree:`New worktree`,ownerManual:`Manual`,ownerSession:`Session`,ownerWorkboard:`Workboard`,title:`Managed Worktrees`,subtitle:`Isolated repository checkouts owned by OpenClaw.`,cleanNow:`Clean up now`,name:`Name`,namePlaceholder:`auto`,baseBranch:`Base branch`,repo:`Repository`,empty:`No managed worktrees.`,restorable:`Restorable`,restore:`Restore`,confirmDelete:`Snapshot and delete {name}?`,confirmForceDelete:`Snapshot failed: {error}

Delete without a snapshot?`},agentChip:xe,agentScope:Se,newSession:{title:`New session`,hint:`Pick where this session works, then say what to do.`,agent:`Agent`,agents:`Agents`,where:`Where`,environments:`Environments`,gateway:`Gateway · local`,gatewayNamed:`Gateway · {name}`,cloudWorker:`Cloud · {profile}`,cloudWorkerMachine:`{profile} · {machine}`,cloudWorkerProvider:`Cloud worker provider: {provider}`,cloudRuntimeUnsupported:`The {runtime} runtime does not support cloud workers.`,cloudProfileRuntimeUnsupported:`The {runtime} runtime cannot use this cloud worker. Choose a compatible cloud worker or run locally.`,deviceRuntimeUnsupported:`This runtime does not support paired devices`,cloudRecoveryUnavailable:`Cloud workers are unavailable because this connection does not support task recovery. Reconnect or update the Gateway.`,placementStartFailed:`The session was created, but runner startup failed: {error}`,placementReloadBlocked:`Recovery needs a reload. Unsaved starts will be lost.`,discardUnsavedAndReload:`Discard unsaved starts and reload`,placementSyncsFolder:`Syncs {folder} to the selected runner`,folder:`Folder`,folderPlaceholder:`Agent workspace`,yourDevices:`Your devices`,autoDevice:`Auto`,autoDeviceSub:`Least-busy device`,autoDeviceSubEligible:`First eligible device`,neverConnected:`Never connected`,offlineFor:`Offline for {duration}`,lastSeen:`Last seen {time}`,nodeUpdateRequired:`Update required: run {updateCommand}, then reconnect. For a headless node, run {restartCommand}.`,nodeCommandPendingApproval:`Ask an administrator to approve the pending {command} request, or pick another device.`,nodeCommandUndeclared:`Make {command} available on this device, then reconnect, or pick another device.`,nodeCommandUnauthorized:`Authorize {command} in the Gateway node command policy, or pick another device.`,capabilityCamera:`Camera`,capabilityLocation:`Location`,capabilityTalk:`Talk`,capabilityScreenCapture:`Screen capture`,capabilityCanvas:`Canvas`,capabilityVoice:`Voice`,environmentDisposable:`Disposable`,environmentPersistent:`Persistent`,projects:`Projects`,projectsAdminHint:`Admins can register projects from Browse folders`,projectSearchPlaceholder:`Search projects or paste a Git URL`,githubProjects:`GitHub`,githubTokenHint:`No Control UI GitHub credential or shared Gateway environment token is configured; public GitHub results only.`,cloneProject:`Clone`,registerProject:`Register as project`,cloud:`Cloud`,machine:`Machine`,machineShape:`{cpu} vCPU · {memory} GB`,machineCpu:`{cpu} vCPU`,machineMemory:`{memory} GB`,machineDefault:`Default`,recentFolders:`Recent`,runsOn:`Runs on {place}`,browse:`Browse folders`,browseRequiresAdmin:`To browse outside agent workspaces, open Inbox, select Limited access, request admin, then approve in Devices.`,connectMachine:`Connect a machine…`,browserUp:`Parent folder`,browserUse:`Use this folder`,browserEmpty:`No subfolders`,browserLoadFailed:`Couldn't list that folder.`,hiddenFolder:`Hidden folder`,worktree:`Worktree`,checkingGit:`Checking Git availability…`,gitCheckUnavailable:`Couldn't verify Git for this folder. Choose it again to retry.`,worktreeUnavailable:`Selected folder is not a Git checkout`,worktreeBaseRef:`From`,worktreeName:`Name`,worktreeNamePlaceholder:`Named from the session title`,worktreeBranchNote:`Creates branch openclaw/<name> in a separate checkout.`,worktreeNameInvalid:`Use lowercase letters, digits, and dashes.`,incognito:`Incognito`,incognitoDescription:`Keep this session only until the Gateway restarts`,draft:`Draft`,draftDescription:`Keep this session to yourself until you publish it`,messagePlaceholder:`What should this session work on?`,dictate:`Dictate`,readingAttachment:`Reading attachment`,start:`Start session`,startInTerminal:`Start in terminal`,nativeTerminalHint:`Start the native CLI on the selected machine using its own account and configuration. This does not create an OpenClaw Chat.`,chooseNativeHost:`Choose a native CLI host`,nativeTerminalPrompt:`Optional initial prompt for the native CLI`,terminalNodeFolder:`Existing absolute folder on this node`,terminalAttachmentsUnsupported:`Remove attachments before starting a native CLI. Add files from the terminal after it opens.`,starting:`Starting…`,createFailed:`Couldn't create the session.`,createOutcomeUnknown:`The Gateway changed while this session was starting. Check recent sessions before starting this task again.`,cliAgentsGroup:`CLI agents`,cliAgentsUnavailable:`CLI agents unavailable`,placementSetupInterrupted:`This session's runner setup was interrupted. Check recent sessions before starting this task again.`,catalogUnavailable:`This session target is unavailable.`,placementNotReady:`The selected runner isn't ready yet. Try again in a moment.`,nodeUnavailable:`The selected device is unavailable. Pick another place.`,terminalCapabilityOverridesUnsupported:`Clear session capability overrides before starting in a terminal.`,what:`What`,checkout:`Checkout`,checkoutCurrent:`Current checkout`,checkoutCurrentNote:`Works in the selected folder on its current branch.`,checkoutWorktree:`New worktree`,checkoutWorktreeSub:`Isolated copy of the repo`,checkoutWorktreeFrom:`New worktree from {branch}`,checkoutRemoteLocked:`Devices and cloud run in a worktree`,local:`Local`},dashboardsPage:{emptyTitle:`No dashboards yet`,emptyDescription:`Dashboards created in your tasks will appear here.`,loadError:`Could not load dashboards: {error}`,openFocusMode:`Open dashboard in focus mode`,live:`Live`,byAuthor:`By {author}`,updated:`Updated {time}`,updatedUnknown:`Update time unknown`,totalLabel:`dashboards`,searchLabel:`Search dashboards`,searchPlaceholder:`Search dashboards…`,authorFilter:`Author`,allAuthors:`All authors`,sortLabel:`Sort`,sortUpdated:`Recently updated`,sortTitle:`Title A–Z`,resultCount:`{count} dashboards`,noResultsTitle:`No matching dashboards`,noResultsDescription:`Try another search or author.`},dashboardDocument:{close:`Close dashboard`,missingSession:`No dashboard session was specified.`,notFound:`This session could not be found.`,unavailable:`Session dashboards are unavailable for this connection.`,loadFailed:`Could not load this dashboard: {error}. Check the Gateway connection and try again.`},sessionsView:{subagentPrefix:`Subagent:`,automationPrefix:`Automation:`,actionRequiresConnection:`Connect to the Gateway to change sessions.`,actionUnavailable:`This Gateway does not support this session action.`,actionRequiresRead:`This action requires operator.read access.`,actionRequiresWrite:`This action requires operator.write access.`,actionRequiresAdmin:`This action requires operator.admin access.`,deletePreservedReasons:{"owner-mismatch":`owned elsewhere`,busy:`live run or cleanup active`,"foreign-lock":`foreign Git lock`,"snapshot-failed":`OpenClaw could not create a safety snapshot`,"cleanup-failed":`cleanup failed`},draftCleanupFailed:`Session deleted; browser draft remains. Clear site data.`,title:`Sessions`,subtitle:`Browse sessions and manage per-session overrides.`,store:`Store: {path}`,active:`Updated within`,limit:`Limit`,createdBy:`Created by {name}`,ownedBy:`Owned by {name}`,archivedBy:`Archived by {name}`,archiveReason:`Archive reason`,archiveReasonManual:`Archived manually`,archiveReasonActiveSessionCap:`Automatically archived because the active-session limit was reached`,archiveReasonStaleDashboard:`Automatically archived after dashboard inactivity`,archiveReasonRestartRecovery:`Archived when a replacement session was recovered`,viewingNow:`viewing now`,owners:`Owners`,allOwners:`All owners`,involvingMe:`Involving me`,specificOwner:`Specific owner`,specificOwnerAvailable:`Specific owner: {count} available`,specificOwnerSelected:`Specific owner: {name}`,ownerYou:`{name} (You)`,withParticipant:`with {name}`,withMoreParticipants:`+{count} more`,assignToMe:`Me`,assignTo:`Assign to…`,filterControls:`Session filters`,filters:`Filters`,sourceFilters:`Session source filters`,global:`Global`,unknown:`Unknown`,sessionState:`Session state`,all:`All`,sessionArchived:`Session archived`,sessionsArchived:`Archived {count} sessions`,deleteAllArchived:`Delete all archived…`,deleteAllArchivedConfirm:`Delete {count} archived sessions and their transcripts? Any attached workers will be stopped safely first.`,activeTooltip:`Loads sessions updated in the last {count} minutes.`,limitTooltip:`Max sessions to load.`,globalTooltip:`Include global sessions.`,unknownTooltip:`Include unknown sessions.`,archivedOnlyTooltip:`Show only archived sessions.`,minutesPlaceholder:`min`,searchPlaceholder:`Filter by key, agent, label, kind…`,transcriptSearchTitle:`Search transcripts`,transcriptSearchDescription:`Find exact words or phrases in user and assistant messages across the default agent's sessions.`,transcriptSearchInputLabel:`Search session transcripts`,transcriptSearchPlaceholder:`Search exact words or phrases…`,transcriptSearchAction:`Search`,transcriptSearchClear:`Clear`,transcriptSearchRetry:`Retry`,transcriptSearchSearching:`Searching transcripts…`,transcriptSearchUnavailable:`Transcript search requires a newer Gateway.`,transcriptSearchError:`Transcript search failed`,transcriptSearchIndexing:`The transcript index is still updating. Retry to include recent messages.`,transcriptSearchEmpty:`No transcript messages match that search.`,transcriptSearchMatches:`Transcript matches: {count}`,transcriptSearchTruncated:`Showing the first 25 matches.`,user:`User`,assistant:`Assistant`,selected:`{count} selected`,deleteSelected:`Delete`,selectAllOnPage:`Select all on page`,selectSession:`Select session`,optionalPlaceholder:`(optional)`,key:`Key`,label:`Label`,kind:`Kind`,updated:`Updated`,tokens:`Tokens`,compaction:`Compaction`,goal:`Goal`,goalNote:`Goal note`,thinking:`Thinking`,fast:`Fast`,verbose:`Verbose`,reasoning:`Reasoning`,actions:`Actions`,addToWorkboard:`Add to Workboard`,openWorkboardCard:`Open Workboard card`,opensAsDashboard:`Opens as dashboard`,approvalNeeded:`Approval needed`,messageNeedsAttention:`{count} message needs attention`,messagesNeedAttention:`{count} messages need attention`,unsentDraft:`Unsent draft`,noSessions:`No sessions found.`,noActiveSessions:`No active sessions.`,noArchivedSessions:`No archived sessions.`,noSessionsMatchFilters:`No sessions match your filters.`,pagination:`{start}-{end} of {total} rows`,pageSize:`Rows per page`,rowsPerPage:`{count} per page`,showAll:`Show all`,inherit:`inherit`,offExplicit:`off (explicit)`,auto:`auto`,on:`on`,off:`off`,full:`full`,stream:`stream`,manual:`manual`,autoThreshold:`auto-threshold`,overflowRetry:`overflow retry`,timeoutRetry:`timeout retry`,tokenRange:`{before} to {after} tokens`,tokensBefore:`{count} tokens before`,tokenDeltaUnavailable:`token delta unavailable`,contextUsage:`{percent}% of context used ({used} / {context} tokens)`,contextUsageApprox:`~{percent}% of context used ({used} / {context} tokens, approximate)`,checkpoints:`{count} Checkpoints`,checkpoint:`{count} Checkpoint`,showSessionDetails:`Show session details for {count}`,hideSessionDetails:`Hide session details for {count}`,sessionDetails:`Session details`,overrides:`Overrides`,compactionHistory:`Compaction history`,status:`Status`,statusLive:`Live`,statusIdle:`Idle`,statusUnknown:`Unknown`,statusQueued:`Queued`,statusRunning:`Running`,statusDone:`Done`,statusFailed:`Failed`,statusKilled:`Killed`,statusTimeout:`Timed out`,waitingForAnswer:`Waiting for your answer`,waitingForApproval:`Waiting for approval`,runFailedReason:`Run failed: {reason}`,runErrorTimedOut:`Timed out`,runErrorUnknown:`Unknown error`,attentionRequired:`Session needs attention`,openSession:`Open session`,model:`Model`,provider:`Provider`,runtime:`Runtime`,runDuration:`Run duration`,lastActive:`Last active {time}`,surface:`Surface`,subject:`Subject`,room:`Room`,space:`Space`,sessionId:`Session ID`,activeRun:`Active run`,showChildSessions:`Show {count} child sessions for {session}`,hideChildSessions:`Hide {count} child sessions for {session}`,childSessions:`Child sessions`,showMoreChildren:`Show {count} more`,archived:`Archived`,pinned:`Pinned`,unread:`Unread`,automationAttached:`Automation attached`,incognito:`Incognito session`,cloudWorkerPlacement:`Placement: {state}`,placementWorkspaceConflict:`{placement} · 1 workspace conflict`,placementWorkspaceConflicts:`{placement} · {count} workspace conflicts`,cloudWorkerDiskWarning:`Cloud session disk space is low`,cloudWorkerDiskCritical:`Cloud session disk space is critically low`,cloudWorkerDescendantConflict:`Cloud worker child: 1 workspace conflict`,cloudWorkerDescendantConflicts:`Cloud worker children: {count} workspace conflicts`,renameSession:`Rename session`,renameSessionPrompt:`Rename session`,renameSessionMenu:`Rename…`,setIconMenu:`Set icon`,setColorMenu:`Color`,setIconColorMenu:`Icon & color`,sessionColor:`Session color: {color}`,colors:{red:`Red`,blue:`Blue`,green:`Green`,yellow:`Yellow`,purple:`Purple`,orange:`Orange`,pink:`Pink`,cyan:`Cyan`},iconEmojiSection:`Emoji`,iconGlyphSection:`Icons`,customEmojiCell:`Custom emoji…`,customEmojiTitle:`Custom emoji`,customEmojiSet:`Set`,customEmojiHint:`Any emoji works. Press {shortcut} for the system emoji picker.`,customEmojiHintNoShortcut:`Any emoji works.`,removeIcon:`Remove icon`,pinSession:`Pin session`,unpinSession:`Unpin session`,markUnread:`Mark as unread`,markRead:`Mark as read`,markUnreadCount:`Mark {count} as unread`,markReadCount:`Mark {count} as read`,forkSession:`Fork conversation`,forkFromLastCompleted:`Fork from last completed message`,forkedSession:`Forked session`,copySessionId:`Session ID`,copySessionLink:`Session link`,copyMarkdown:`Conversation as Markdown`,openNewTab:`New tab`,openNewWindow:`New window`,splitBelow:`Split below`,workspaceEditors:`Workspace · editor`,resetAppearance:`Reset to default`,copyTranscriptChanged:`Conversation changed while copying. Try again.`,openWindowBlocked:`Allow pop-ups for this site, then try again.`,splitUnavailable:`Open a conversation on a wide screen to use split view.`,openPullRequest:`Open PR`,openInEditorMenu:`Open in`,archiveSession:`Archive session`,archiveSessionCount:`Archive {count}`,restoreSession:`Restore session`,restoreSessionCount:`Restore {count}`,moveSession:`Move session…`,moveSessionTitle:`Move session`,moveSessionDescription:`Choose where "{session}" should continue.`,moveSessionNoReplayWarning:`OpenClaw safely reconciles the current workspace before moving. Active work is never replayed.`,moveSessionActiveRunWarning:`The active turn will be interrupted. Partial output is not replayed; send the next turn again after the move.`,moveSessionAction:`Move session`,moveSessionCatalogFailed:`Could not load available destinations.`,moveSessionFailed:`Move failed`,moveSessionGatewayTarget:`Gateway`,movingSession:`Moving to {target}…`,movingSessionGeneric:`Moving session…`,stopCloudWorker:`Stop cloud worker…`,stopCloudWorkerConfirm:`Stop the cloud worker for "{session}"?`,stopCloudWorkerConfirmAction:`Stop worker`,initialTurnPausedByWorkerStop:`Worker stop requested. Review the initial message before retrying.`,stopCloudWorkerStale:`Gateway connection replaced before the cloud worker for "{session}" was stopped. Try again.`,deleteSessionMenu:`Delete…`,deleteSessionCount:`Delete {count}…`,deleteSessionConfirm:`Delete "{session}" and its transcript? Any attached worker will be stopped safely first.`,deleteSessionStale:`Gateway connection replaced before "{session}" was deleted. Try again.`,deleteSessionsConfirm:`Delete {count} sessions and their transcripts? Any attached workers will be stopped safely first.`,deleteSessionsStale:`Gateway connection replaced before {count} sessions were deleted. Try again.`,deleteSelectedConfirmOne:`Delete 1 session?

Stop any attached worker safely, then delete the session entry and archive its transcript.`,deleteSelectedConfirm:`Delete {count} sessions?

Stop any attached workers safely, then delete the session entries and archive their transcripts.`,groupBy:`Group by`,groupByNone:`None`,groupByCategory:`Custom groups`,groupByPerson:`Person`,showSessionPreview:`Show message preview`,hideEmptyGroups:`Hide empty groups`,showCronSessions:`Show automation sessions`,showSystemSessions:`Show system sessions`,groupByChannel:`Channel`,groupByKind:`Kind`,groupByAgent:`Agent`,groupByDate:`Date`,group:`Group`,ungrouped:`Ungrouped`,newGroup:`New group`,newGroupPrompt:`New group name`,newGroupTitle:`New group`,newGroupCreate:`Create group`,newGroupFailed:`Could not create the group.`,newGroupStale:`Gateway connection replaced before the group was saved. Try again.`,newGroupMoveSkipped:`Group created, but the move was skipped because the list changed. Move from the row menu.`,moveToGroup:`Move session to a group`,moveToGroupMenu:`Move to group`,moveToGroupMenuCount:`Move {count} to group`,removeFromGroup:`Remove from group`,moveBackToGroups:`Move back to Groups`,groupMenu:`Group options for {group}`,newSessionInGroup:`New session in {group}`,groupDefaultsMenu:`New session defaults`,groupDefaultsTitle:`New session defaults for "{group}"`,groupDefaultsDescription:`Choose where new sessions in this group start.`,groupDefaultsCwd:`Working directory`,groupDefaultsCwdPlaceholder:`Use the agent workspace`,groupDefaultsCwdHint:`Leave empty to use the selected agent's workspace.`,groupDefaultsMode:`Environment`,groupDefaultsLocal:`Current checkout`,groupDefaultsWorktree:`New worktree`,groupDefaultsWorktreeHint:`Runs each session in an isolated Git worktree.`,groupDefaultsFailed:`Could not save the group defaults.`,groupDefaultsStale:`Gateway connection replaced before the defaults were saved. Try again.`,renameGroupMenu:`Rename group`,renameGroupTitle:`Rename group "{group}"`,groupNameLabel:`Group name`,deleteGroupMenu:`Delete group`,deleteGroupTitle:`Delete group "{group}"`,deleteGroupConfirm:`The group is removed. Its sessions move back to the session list.`,deleteGroupStale:`Gateway connection replaced before "{group}" was deleted. Try again.`,dragSessionHint:`Drag session to move between groups`,dateToday:`Today`,dateYesterday:`Yesterday`,dateThisWeek:`This week`,dateOlder:`Older`,dateNoActivity:`No activity`,groupRowCount:`{count} sessions`,groupRowCountOne:`{count} session`,loadingCheckpoints:`Loading checkpoints…`,noCheckpoints:`No compaction checkpoints recorded for this session.`,noSummary:`No summary captured.`,branchFromCheckpoint:`Branch from checkpoint`,branchCheckpointConfirm:`Create a new child session from this compacted checkpoint?`,restoreCheckpoint:`Restore checkpoint`,restoreCheckpointConfirm:`Restore this session to the selected compacted checkpoint?

This replaces the current active transcript for the session key.`},agents:{noAgents:`No agents`,createdBy:`Created by {id}`,defaults:{title:`Agent defaults`,description:`Defaults every agent inherits unless overridden.`},copyId:`Copy ID`,default:`Default`,setDefault:`Set Default`,...Ce,selectTitle:`Select an agent`,selectSubtitle:`Pick an agent to inspect its workspace and tools.`,tabs:{overview:`Overview`,files:`Files`,tools:`Tools`,skills:`Skills`,channels:`Channels`,cronJobs:`Automations`,memory:`Memory`},context:{title:`Agent Context`,workspace:`Workspace`,openFilesTab:`Open Files tab`,primaryModel:`Primary Model`,runtime:`Runtime`,thinkingDefault:`Thinking Default`,identityName:`Identity Name`,identityAvatar:`Identity Avatar`,skillsFilter:`Skills Filter`,default:`Default`,configurationSubtitle:`Workspace, identity, and model configuration.`,schedulingSubtitle:`Workspace and scheduling targets.`},identity:we,overview:{title:`Overview`,subtitle:`Workspace paths and identity metadata.`,selectedSkills:`{count} selected`,allSkills:`all skills`,unsavedConfig:`You have unsaved config changes.`,modelSelection:`Model Selection`,primaryModel:`Primary model`,primaryModelDefault:`Primary model (default)`,notSet:`Not set`,inheritDefault:`Inherit default`,inheritDefaultModel:`Inherit default ({model})`,fallbacks:`Fallbacks`},toolCatalog:{groups:{files:`Files`,runtime:`Runtime`,web:`Web`,memory:`Memory`,sessions:`Sessions`,ui:`UI`,messaging:`Messaging`,automation:`Automation`,nodes:`Nodes`,agents:`Agents`,media:`Media`},descriptions:{read:`Read file contents`,write:`Create or overwrite files`,edit:`Make precise edits`,applyPatch:`Patch files (OpenAI)`,exec:`Run shell commands`,process:`Manage background processes`,webSearch:`Search the web`,webFetch:`Fetch web content`,memorySearch:`Semantic search`,memoryGet:`Read memory files`,sessionsList:`List sessions`,sessionsHistory:`Session history`,sessionsSend:`Send to session`,sessionsSpawn:`Spawn sub-agent`,sessionStatus:`Session status`,browser:`Control web browser`,canvas:`Control canvases`,message:`Send messages`,cron:`Schedule tasks`,gateway:`Gateway control`,nodes:`Nodes + devices`,agentsList:`List agents`,image:`Image understanding`},profiles:{minimal:`Minimal`,coding:`Coding`,messaging:`Messaging`,full:`Full`}},skillsPanel:{title:`Skills`,subtitle:`Per-agent skill allowlist and workspace skills.`,loadConfig:`Load the gateway config to set per-agent skills.`,customAllowlist:`This agent uses a custom skill allowlist.`,inheritedAllowlist:`This agent inherits the default skill allowlist.`,allEnabled:`All skills are enabled. Disabling any skill will create a per-agent allowlist.`,loadAgent:`Load skills for this agent to view workspace-specific entries.`,filter:`Filter`,searchPlaceholder:`Search skills`,shown:`{count} shown`,empty:`No skills found.`,missing:`Missing: {items}`,reason:`Reason: {items}`,updateError:`Could not update the agent skill allowlist.`},channels:{title:`Channels`,subtitle:`Gateway-wide channel status snapshot.`,lastRefresh:`Last refresh: {time}`,loadHint:`Load channels to see live status.`,empty:`No channels found.`,connectedCount:`{connected}/{total} connected`,noAccounts:`no accounts`,configuredCount:`{count} configured`,notConfigured:`not configured`,enabledCount:`{count} enabled`,setupGuide:`Setup guide`},cronPanel:{schedulerTitle:`Scheduler`,schedulerSubtitle:`Gateway automations status.`,jobs:`Jobs`,nextWake:`Next wake`,agentJobsTitle:`Agent Automations`,agentJobsSubtitle:`Scheduled jobs targeting this agent.`,noJobs:`No jobs assigned.`,runNow:`Run Now`},files:{emptyDraft:`Empty draft`,minRead:`{count} min read`,markdownPreview:`Markdown Preview`,extensionPreview:`{ext} Preview`,preview:`Preview`,expandPreview:`Expand preview`,collapsePreview:`Collapse preview`,editFile:`Edit file`,closePreview:`Close preview`,coreFilesTitle:`Core Files`,coreFilesSubtitle:`Bootstrap persona, identity, and tool guidance.`,workspace:`Workspace`,loadHint:`Load the agent workspace files to edit core instructions.`,empty:`No files found.`,missing:`missing`,selectFile:`Select a file to edit.`,willCreateOnSave:`Will Create on Save`,liveDraftPreview:`Live Draft Preview`,savedPreview:`Saved Preview`,updated:`Updated {time}`,notCreatedYet:`Not Created Yet`,updatedUnknown:`Updated Unknown`,missingHint:`This file is missing. Saving will create it in the agent workspace.`,addFile:`Add file…`,createHint:`This file does not exist yet. Saving will create it in the agent workspace.`,content:`Content`,words:`{count} words`,lines:`lines`}},debug:{overlay:{title:`System busyness`}},configForm:{redactedPlaceholder:`[redacted - click reveal to view]`,sectionHelp:`Help for {section}`,advancedDivider:`Advanced`,advancedSettings:`Advanced settings`,hideValue:`Hide value`,revealValue:`Reveal value`,disableStreamToReveal:`Disable stream mode to reveal value`,storedSecretNotRevealable:`Stored secrets are never sent to the browser; enter a new value to replace it`,unsupportedType:`Unsupported type: {type}. Use Raw mode.`,structuredSecretRaw:`Structured value (SecretRef) - use Raw mode to edit`,structuredSecretFile:`Structured value (SecretRef) - edit the config file directly`,defaultValue:`Default: {value}`,usingDefault:`Using default: {value}`,select:`Select...`,enumOn:`On`,enumOff:`Off`,enumAuto:`Auto`,nullValue:`null`,jsonValue:`JSON value`,invalidJson:`Enter valid JSON before leaving this field.`,invalidString:`Enter a value that matches this setting's constraints.`,invalidNumber:`Enter a value within the allowed range and step.`,draftRejected:`This setting could not be saved. Your draft is still here.`,unsupportedArray:`Unsupported array schema. Use Raw mode.`,itemCountOne:`{count} item`,itemCount:`{count} items`,add:`Add`,noItems:`No items yet. Click "Add" to create one.`,removeItem:`Remove item`,customEntries:`Custom entries`,addEntry:`Add Entry`,noCustomEntries:`No custom entries.`,key:`Key`,removeEntry:`Remove entry`,renameRedactedBlocked:`This entry holds a stored secret. Add the new key with its value, then remove this one.`,schemaUnavailable:`Schema unavailable.`,unsupportedSchema:`Unsupported schema. Use Raw.`,unsupportedNode:`Unsupported schema node. Use Raw mode.`,noSettingsMatch:`No settings match "{query}"`,noSettingsInSection:`No settings in this section`,sections:{env:{label:`Environment Variables`,description:`Environment variables passed to the gateway process`},update:{label:`Updates`,description:`Auto-update settings and release channel`},agents:{label:`Agents`,description:`Agent configurations, models, and identities`},auth:{label:`Authentication`,description:`API keys and authentication profiles`},channels:{label:`Channels`,description:`Messaging channels (Telegram, Discord, Slack, etc.)`},messages:{label:`Messages`,description:`Message handling and routing settings`},commands:{label:`Commands`,description:`Custom slash commands`},hooks:{label:`Hooks`,description:`Webhooks and event hooks`},skills:{label:`Skills`,description:`Skill packs and capabilities`},tools:{label:`Tools`,description:`Tool configurations (browser, search, etc.)`},gateway:{label:`Gateway`,description:`Gateway server settings (port, auth, binding)`},wizard:{label:`Setup`,description:`Discovery preferences for setup and read-only setup history.`},meta:{label:`Metadata`,description:`Gateway metadata and version information`},logging:{label:`Logging`,description:`Log levels and output configuration`},browser:{label:`Browser`,description:`Browser automation settings`},ui:{label:`UI`,description:`User interface preferences`},models:{label:`Models`,description:`AI model configurations and providers`},bindings:{label:`Bindings`,description:`Key bindings and shortcuts`},broadcast:{label:`Broadcast`,description:`Broadcast and notification settings`},tts:{label:`Voice`,description:`Text-to-speech output, voices, and personas`},session:{label:`Session`,description:`Session management and persistence`},cron:{label:`Automations`,description:`Scheduled tasks and automation`},discovery:{label:`Discovery`,description:`Service discovery and networking`},talk:{label:`Talk`,description:`Voice and speech settings`},plugins:{label:`Plugins`,description:`Plugin management and extensions`},diagnostics:{label:`Diagnostics`,description:`Instrumentation, OpenTelemetry, and cache-trace settings`},cli:{label:`CLI`,description:`CLI banner and startup behavior`},secrets:{label:`Secrets`,description:`Secret provider configuration`},acp:{label:`ACP`,description:`Agent Communication Protocol runtime and streaming settings`},mcp:{label:`MCP`,description:`Model Context Protocol server definitions`}}},quickSettings:{language:`Language`,model:{title:`Model & Thinking`,model:`Model`,thinking:`Thinking`,fastMode:`Fast Mode`,default:`Default`,modelPolicy:`Model policy`,thinkingLevels:{off:`Off`,low:`Low`,medium:`Medium`,high:`High`},fastModes:{auto:`Auto`,fast:`Fast`,standard:`Standard`,on:`On`,off:`Off`}},channels:{title:`Channels`,connect:`Connect →`},appearance:{lobsterVisits:`Lobster visits`,lobsterVisitsOn:`Drops by occasionally`,lobsterVisitsOff:`Never visits`,lobsterSounds:`Lobster sounds`,lobsterSoundsOn:`Tiny blubs when touched`,lobsterSoundsOff:`Silent`,lobsterdex:`Lobsterdex`,lobsterdexSeen:`{seen}/{total} visited`,lobsterdexFirstVisited:`{name} · first visited {date}`,lobsterdexCardFirstVisited:`First visited {date}`,lobsterdexCardShinySeen:`✦ Shiny spotted {date}`,lobsterdexCardCopyLink:`Copy link`,lobsterdexOpen:`Open Lobsterdex`},security:{intro:`Review gateway access, tool policy, device authentication, and approvals.`,title:`Security`,gatewayAuth:`Gateway auth`,execPolicy:`Exec policy`,browserEnabled:`Browser enabled`,toolProfile:`Tool profile`},system:{gatewayHost:`Gateway Host`,up:`Up {duration}`,cpu:`CPU`,memory:`Memory`,disk:`Disk`,usage:`{label} usage`,loadAverage:`Load average: {values}`,core:`{count} core`,cores:`{count} cores`,load:`load`,used:`used`,freeOf:`{free} free of {total}`,runtime:`Node {version} · PID {pid}`},personal:{browserOnly:`Stored in this browser only.`}},configPage:{},configView:{adminRequired:`Configuration changes require operator.admin access.`,channelSettings:`Channel settings`,categories:{},sections:{},themes:{},textSizes:{},profileSyncedHint:`Saved to your profile — follows you on every device.`,syncedHint:`Synced across your devices through the gateway.`,syncPendingHint:`Waiting to sync through the gateway.`,notifications:{},appearance:{},chatPrefs:{},sidebarPrefs:{},sessionObserver:{},connection:{},root:`<root>`,itemCount:`[{count} item]`,itemCountPlural:`[{count} items]`,form:`Form`,raw:`Raw`,formUnsafeTitle:`Form view can't safely edit some fields`,rawTitle:`Edit raw JSON/JSON5 config`,rawUnavailableTitle:`Raw mode unavailable for this snapshot`,open:`Open`,applying:`Applying…`,autoSaveSaving:`Saving…`,autoSaveSaved:`Saved`,autoSavePaused:`Autosave paused after reconnect`,saveNow:`Save`,autoSaveFailed:`Save failed`,autoSaveConflict:`Settings changed elsewhere`,retry:`Retry`,applyChanges:`Apply changes`,rawDiscard:`Discard`,rawDraftBlocksApply:`Unsaved raw config edits — save or discard them in the Raw editor before restarting.`,rawDraftPendingFormTitle:`Unsaved raw config edits — save or discard them before switching to Form.`,rawDraftBlocksFormEdit:`Unsaved raw config edits could not be parsed; resolve them in the Raw editor before changing settings.`,invalidConfig:`Your configuration is invalid. Some settings may not work as expected.`,dismissWarning:`Don't remind again`,viewPendingChangesRaw:`View pending changes`,rawDiffUnavailable:`Changes detected (JSON diff not available)`,hideEnvValues:`Hide env values`,revealEnvValues:`Reveal env values`,peek:`Peek`,loadingSchema:`Loading schema…`,formUnsafeCount:`1 setting in this config can only be edited as text: {paths}`,formUnsafeCountPlural:`{count} settings in this config can only be edited as text: {paths}`,formUnsafeMore:`+{count} more`,openRawEditor:`Open Raw editor`,rawConfig:`Raw config (JSON/JSON5)`,secretCount:`{count} secret`,secretCountPlural:`{count} secrets`,redacted:`redacted`,visible:`visible`,revealSensitive:`Reveal sensitive values`,hideSensitive:`Hide sensitive values`,toggleRawRedaction:`Toggle raw config redaction`,sensitiveHidden:`{count} sensitive value hidden. Use the reveal button above to edit the raw config.`,sensitiveHiddenPlural:`{count} sensitive values hidden. Use the reveal button above to edit the raw config.`},execApproval:{scope:{standingGrant:`Always allow runs this exact command for "{automation}" without asking, until revoked (revocable)`,standingGrantDays:`Always allow runs this exact command for "{automation}" without asking, for {count} days (revocable)`,messageSend:`Sends to {count} recipient(s) via {target}`,payment:`Pays {amount} {currency} to {target}`,externalPost:`Posts externally to {target}`},expiresIn:`expires in {time}`,expired:`expired`,execApprovalNeeded:`Exec approval needed`,pluginApprovalNeeded:`Plugin approval needed`,requestedBySession:`Approval requested by session {session}`,pending:`{count} pending`,otherPending:`Other pending requests`,reviewRequest:`Review approval from {agent}: {command}`,decisionRequest:`{decision}: {command}`,agentPendingOne:`{count} pending approval`,agentPending:`{count} pending approvals`,allowOnce:`Allow once`,alwaysAllow:`Always allow`,alwaysAllowHere:`Always allow here`,allowAlwaysUnavailable:`Allow Always is unavailable for this command.`,reviewOnly:`Review only. Sign in with approval access to record a decision.`,deny:`Deny`,details:`Details`,labels:{host:`Host`,session:`Session`,cwd:`CWD`,resolved:`Resolved`,security:`Security`,ask:`Ask`}},approvalPage:{brandName:`OpenClaw`,eyebrow:`Operator approval`,loadingTitle:`Loading approval`,loadingDescription:`Checking the current approval state with the Gateway.`,unavailableTitle:`Approval unavailable`,unavailableDescription:`This approval could not be found or this device is not authorized to review it.`,connectionErrorTitle:`Connection interrupted`,connectionErrorDescription:`OpenClaw cannot confirm or record a decision while disconnected. Reconnect to check the current status.`,retry:`Retry`,execTitle:`Command approval`,pending:`Waiting for your decision`,pendingDescription:`Review the request carefully. The first answer from any surface wins.`,approvedHere:`Approved here`,deniedHere:`Denied here`,resolvedElsewhere:`Resolved elsewhere`,resolvedElsewhereDescription:`Another surface or an earlier attempt recorded the decision first.`,approved:`Approved`,denied:`Denied`,expired:`Expired`,cancelled:`Cancelled`,allowedOnceDescription:`The operation was approved for this request only.`,allowedAlwaysDescription:`The operation was approved with the always-allow decision.`,deniedDescription:`The operation was denied and will not continue.`,expiredDescription:`No decision arrived before the deadline, so the operation was denied.`,cancelledDescription:`The requesting run ended before a decision could be used.`,summaryLabel:`Summary`,commandLabel:`Command`,requestLabel:`Request details`,nodeLabel:`Node`,expiresLabel:`Expires`,resolvedLabel:`Resolved`,actionsLabel:`Approval decisions`,resolvingDecision:`Recording {decision}…`,safeToClose:`The decision is recorded. You can close this page.`,openControlUi:`Open Control UI`},agentTools:{githubVerify:`Verify`,githubConnection:`Gateway connection`,githubDisconnected:`Disconnected`,githubAccessRequired:`Access required`,githubReadRequired:`GitHub identity status requires operator.read access.`,githubAdminRequired:`Connecting, replacing, or removing a GitHub identity requires operator.admin access.`,githubEffectiveAuthor:`Effective Git Author`,githubEffectiveCredential:`Effective credential`,githubEffectiveAccessExpiry:`Effective access expiry`,githubEffectiveRefresh:`Effective refresh token`,githubEffectiveScopes:`Effective OAuth scopes`,githubNoAccount:`No verified account`,githubAuthorUnset:`Not set`,githubErrorTitle:`Error`,githubStateVerified:`Verified`,githubStateUnverified:`Not verified`,githubStateRateLimited:`Rate limited`,githubStateUnavailable:`No credentials`,githubStateConfiguredUnavailable:`Configured, but unavailable`,githubAuthorization:`GitHub authorization`,githubStarting:`Requesting code…`,githubCancelling:`Requesting cancellation…`,githubFinishing:`Authorization is already finishing…`,githubCancelFailed:`Cancellation could not be confirmed`,githubCancelFailedHint:`Authorization is still active. Wait for it to finish or try cancellation again.`,githubRetryCancel:`Try cancel again`,githubCodeReady:`Code ready`,githubWaiting:`Waiting for approval…`,githubSlowDown:`GitHub asked us to wait longer…`,githubNetworkRetry:`Connection interrupted; retry scheduled`,githubAuthorizationHint:`Open GitHub yourself, then enter the one-time code shown here.`,githubDeviceCode:`One-time code`,githubDeviceCodeHint:`This code authorizes only the selected identity scope.`,githubExpires:`Code expires`,githubOpen:`Open github.com/login/device`,githubCopyCode:`Copy code`,githubAuthorizationFailed:`GitHub authorization failed`,githubExpired:`The one-time code expired. Connect again to request a new code.`,githubDenied:`GitHub authorization was denied. Connect again when you are ready.`,githubIncorrectCode:`GitHub rejected this device code. Connect again to request a new code.`,githubConnect:`Connect GitHub`,githubConnectHint:`Authorize GitHub without pasting a long-lived credential into the browser.`,githubPatFallback:`Personal access token`,githubPatFallbackHint:`Use a fine-grained PAT only when browser authorization is unsuitable.`,githubUsePat:`Use a PAT instead`,githubToken:`Fine-grained PAT`,githubTokenDesc:`Stored in a private managed GitHub CLI profile; only the setup handoff is removed.`,githubTokenToggle:`Toggle token visibility`,githubPasteToken:`Paste a fine-grained personal access token first.`,githubAuthorName:`Author Name`,githubAuthorEmail:`Author Email`,githubConfigure:`Save Identity`,githubConfiguredHere:`Configured here`,githubInheritedHere:`Inherited`,githubKindNative:`Native GitHub CLI`,githubKindPat:`Managed personal access token`,githubKindOAuth:`Managed GitHub authorization`,githubRefreshAvailable:`Available`,githubRefreshExpired:`Expired — reconnect required`,githubRefreshUnavailable:`Unavailable — reconnect required`,githubRefreshRefreshing:`Refreshing…`,githubRefreshFailed:`Refresh failed — retrying`,githubUseSystemNewRuns:`Use system for new runs`,githubUseNativeNewRuns:`Use native for new runs`,githubUseSystemConfirmTitle:`Use the system GitHub identity for new runs?`,githubUseNativeConfirmTitle:`Use the native GitHub identity for new runs?`,githubUseSystemConfirmMessage:`New runs for this agent will use the System identity. Active runs keep their current identity until they exit or restart. Revoke the GitHub authorization or PAT separately on GitHub if needed.`,githubUseNativeConfirmMessage:`New runs without an agent override will use the native GitHub identity. Active runs keep their current identity until they exit or restart. Revoke the GitHub authorization or PAT separately on GitHub if needed.`,githubAgentMutationHint:`Authorization and removal below apply to This Agent for new runs.`,githubSystemMutationHint:`Authorization and removal below apply to System for new runs.`,connectedSource:`Connected: {id}`,connected:`Connected`,channelSource:`Channel: {id}`,channel:`Channel`,builtIn:`Built-In`,plugin:`Plugin: {id}`,optional:`Optional`,liveNow:`Live Now`,disabledByOverride:`Disabled by agent override.`,enabledByProfile:`Enabled by the current profile.`,enabledByOverride:`Enabled by agent override.`,notIncluded:`Not included in the current profile.`,overrideOff:`Override Off`,enabled:`Enabled`,overrideOn:`Override On`,profileOff:`Profile Off`,notLive:`Not Live`,otherAgent:`Other Agent`,title:`Tool Access`,subtitle:`Profile + per-tool overrides for this agent.`,enabledSummary:`{enabled}/{total} enabled.`,enableAll:`Enable All`,disableAll:`Disable All`,loadConfig:`Load the gateway config to adjust tool profiles.`,explicitAllowlist:`This agent is using an explicit allowlist in config. Tool overrides are managed in the Config tab.`,globalAllowlist:`Global tools.allow is set. Agent overrides cannot enable tools that are globally blocked.`,loadingCatalog:`Loading runtime tool catalog…`,catalogFallback:`Could not load runtime tool catalog. Showing built-in fallback list instead.`,availableNow:`Available Right Now`,availableNowSubtitle:`What this agent can use in the current chat session.`,noSession:`no session`,switchAgent:`Switch chat to this agent to view its live runtime tools.`,loadingAvailable:`Loading available tools…`,availableError:`Could not load available tools for this session.`,noAvailable:`No tools are available for this session right now.`,moreLiveTitle:`{count} more live tools are available in the groups below.`,moreLive:`+{count} more live tools`,quickPresets:`Quick Presets`,catalogTitle:`Tool Catalog`,inherit:`Inherit`,profile:`Profile`,source:`Source`,live:`Live`,status:`Status`,profileSourceAgent:`agent override`,profileSourceGlobal:`global default`,profileSourceDefault:`default`,statusSaving:`saving…`,statusUnsaved:`unsaved`,statusSaved:`saved`,toolPreview:`Tool preview`,more:`+{count} more`,toolsOne:`{count} Tool`,tools:`{count} Tools`,enabledToolsOne:`{count} Enabled Tool`,enabledTools:`{count} Enabled Tools`,liveToolsOne:`{count} Live Tool`,liveTools:`{count} Live Tools`,access:`Access`,session:`Current Session`,disableNamed:`Disable {name}`,enableNamed:`Enable {name}`,defaultPresets:`Default Presets`,availableVia:`Available now via {source}.`,unavailableSession:`Not available in this chat session right now.`,inspectAgent:`Switch chat to this agent to inspect live availability.`,linkTool:`Link to This Tool`},skillGroups:{workspace:`Workspace Skills`,builtIn:`Built-in Skills`,installed:`Installed Skills`,extra:`Extra Skills`,other:`Other Skills`},skillsPage:{title:`Skills`,tabs:{all:`All`,ready:`Ready`,needsSetup:`Needs Setup`,disabled:`Disabled`},defaultAgent:`{name} (default)`,filterPlaceholder:`Filter installed skills`,shown:`{count} shown`,clawHub:`ClawHub`,clawHubSubtitle:`Search and install skills from the registry`,searchClawHub:`Search ClawHub skills…`,searching:`Searching…`,disconnected:`Not connected to gateway.`,empty:`No skills found.`,noClawHubResults:`No skills found on ClawHub.`,notScannedByClawHub:`Not scanned by ClawHub`,install:`Install`,installed:`Installed`,installing:`Installing…`,close:`Close`,by:`By`,latest:`Latest: v{version}`,platforms:`Platforms: {platforms}`,installNamed:`Install {name}`,notFound:`Skill not found.`,openDetails:`Open {name} details`,enabledNamed:`{name} enabled`,invalidLink:`ClawHub link invalid`,overview:`Overview`,skillCard:`Skill Card`,missingRequirements:`Missing requirements`,reason:`Reason: {reasons}`,disabled:`Disabled`,enabled:`Enabled`,apiKey:`API key`,getKey:`Get your key:`,saveKey:`Save key`,source:`Source:`,refreshing:`Refreshing…`,fullSecurityReport:`Full security report`,loadingSkillCard:`Loading Skill Card…`,skillCardNotLoaded:`Skill Card not loaded.`,verdict:{unavailable:`Unavailable`,clean:`Clean`,pending:`Pending`,blocked:`Blocked`,review:`Review`}},skillStatus:{bundled:`bundled`,eligible:`eligible`,blocked:`blocked`,disabled:`disabled`,blockedAllowlist:`blocked by allowlist`,blockedAgentFilter:`blocked by agent filter`},nav:{owner:`Owner`,back:`Back`,forward:`Forward`,settings:`Settings`,askOpenClaw:`Ask OpenClaw`,settingsGroupDevice:`This Mac`,settingsGroupThisDevice:`This device`,settingsGroupConnections:`Connections`,settingsGroupAgents:`Agents & Tools`,settingsGroupSecurity:`Privacy & Security`,settingsGroupSystem:`System`,settingsSearchLabel:`Search settings`,settingsSearchPlaceholder:`Search settings…`,settingsSearchNoResults:`No matching settings.`,settingsSearchClear:`Clear settings search`,settingsLoadFailed:`Settings navigation could not load.`,exitSettings:`Back to app`,expand:`Expand sidebar`,collapse:`Collapse sidebar`,resize:`Resize sidebar`,more:`More`,home:`Home`,pages:`Pages`,customize:`Edit pinned items`,customizeReset:`Reset pinned items`,workboardGroup:`WorkBoard`},terminal:{title:`Terminal`,toggle:`Toggle terminal`,open:`Open terminal`,openWindow:`Open terminal in new window`,hide:`Hide terminal`,resize:`Resize terminal panel`,newSession:`New terminal session`,addFiles:`Add files to terminal`,dropFiles:`Drop files to add them`,uploadProgress:`Uploading {current} of {total}`,uploadFailed:`Upload failed`,retryUpload:`Retry`,closeSession:`Close terminal session`,sessions:`Terminal sessions`,refreshSessions:`Refresh`,loadingSessions:`Loading sessions…`,noSessions:`No live terminal sessions`,currentSession:`current`,sessionAttached:`attached`,attachSession:`Attach session`,attachFailed:`Could not attach terminal session`,connecting:`Connecting to session…`,connectionTimedOut:`Session did not connect within 30 seconds.`,refreshRequired:`Control UI updated. Reload this page to continue the terminal action.`,tabLabel:`shell {n}`,tabHint:`{agent} · {cwd}`,agentOwnedBadge:`agent`,exited:`exited`,exitedCode:`exited ({code})`,detached:`detached`,dockBottom:`Dock to bottom`,dockRight:`Dock to right`,dockMain:`Fill main content area`,dockMode:`Terminal panel position`,unavailable:`The terminal is not available on this gateway.`,unusableSession:`The Gateway returned an unusable terminal session (missing {field}). The Gateway is likely older than this Control UI — update it, then retry.`,uploadTooLarge:`File exceeds the 16 MiB terminal upload limit: {file}`,uploadUnsafeCmdPath:`Cannot safely insert an uploaded path containing % or ! into cmd.exe`,uploadUnsupportedShell:`Cannot safely insert an uploaded path into unsupported shell: {shell}`},browser:{profile:`Browser profile: {profile}`,navigationBlocked:`The current browser navigation rules block this address. Select another tab or enter an allowed address.`,navigationCheckFailed:`OpenClaw couldn’t verify this tab’s address. Refresh to try again.`,title:`Browser`,open:`Open`,openPanel:`Open browser panel`,moreActions:`More actions`,copyUrl:`Copy URL`,openNewTab:`Open in new tab`,toggle:`Toggle browser panel`,close:`Close browser panel`,resize:`Resize browser panel`,newTab:`New tab`,closeTab:`Close tab`,untitledTab:`New tab`,back:`Back`,forward:`Forward`,reload:`Reload`,openExternal:`Open in your browser`,urlPlaceholder:`Enter a URL and press Enter`,dockBottom:`Dock to bottom`,dockRight:`Dock to right`,annotate:`Annotate page`,inspect:`Inspect element`,annotateSend:`Send to chat`,annotateUndo:`Undo`,annotateClear:`Clear`,annotateDone:`Exit annotate mode`,annotateHint:`Draw on the page, then send the markup to your chat.`,inspectName:`Name`,inspectRole:`Role`,inspectFocusable:`Focusable`,loading:`Loading page…`,notRunning:`The gateway browser is not running.`,start:`Start browser`,noChatTarget:`Open a chat session first so the annotation has somewhere to go.`,annotationLimitReached:`Remove a browser annotation before retrying (maximum 4 cards and 8,000 characters of generated context).`,inspectUnavailable:`Element inspection is disabled (browser.evaluateEnabled=false).`,annotationSent:`Annotation added to the chat composer.`,errors:{requestFailed:`Browser request failed: {error}`,screenshotPathMissing:`Browser screenshot did not return a media path.`,screenshotFetchTimedOut:`Screenshot fetch timed out.`,screenshotFetchFailed:`Screenshot fetch failed ({status}).`,screenshotReadFailed:`Screenshot read failed.`,screenshotDecodeFailed:`Screenshot decode failed.`,canvasUnavailable:`Canvas 2D context unavailable.`},annotatePrompt:{browserTarget:`Browser target: {target}`,introTitled:`I annotated the page at {url} (page-reported title: "{title}") — the attached screenshot shows my markup.`,introUntitled:`I annotated the page at {url} — the attached screenshot shows my markup.`,region:`Marked region {index}: centered around {x}% across / {y}% down, spanning about {width}% × {height}% of the view.`,moreRegions:`…plus {count} more marked region(s), all visible in the screenshot.`,elementDetail:`Marked element (page-reported): {descriptor} — {width}×{height}px at ({x}, {y}).`,outro:`Please look at the marked area and tell me what you make of it.`}},desktop:{title:`Desktop`,openWindow:`Open desktop in new window`,unavailable:`Desktop viewing is unavailable for this connection.`,toggle:`Toggle desktop panel`,reconnect:`Reconnect`},routeTitles:{modelProviders:`Models`,notifications:`Notifications`,advanced:`Advanced`},tabs:{device:`This Mac`,devicePermissions:`Permissions`,agents:`Agents`,activity:`Activity`,meetings:`Meetings`,apps:`Apps`,portals:`Portals`,approvals:`Approvals`,workboard:`Workboard`,worktrees:`Worktrees`,channels:`Channels`,connection:`Gateway`,sessions:`Sessions`,usage:`Usage`,cron:`Automations`,tasks:`Tasks`,skills:`Skills`,plugins:`Plugins`,skillWorkshop:`Skill Workshop`,devices:`Devices`,cloudWorkers:`Cloud workers`,chat:`Chat`,dashboards:`Dashboards`,custodian:`OpenClaw`,profile:`Profile`,communications:`Communications`,appearance:`Appearance`,lobsterdex:`Lobsterdex`,automation:`Automation`,mcp:`MCP`,memory:`Memory`,talk:`Talk`,infrastructure:`Infrastructure`,labs:`Labs`,updates:`Updates`,about:`About`,aiAgents:`Agent Defaults`,modelSetup:`Model Setup`,memoryImport:`Import Memory`,security:`Privacy & Security`,secrets:`Secrets`,debug:`Debug`,logs:`Logs`,plugin:`Plugin`},subtitles:{device:`App settings and capabilities on this Mac.`,devicePermissions:`Manage macOS access, location, and computer presence.`,agents:`Workspaces, tools, identities.`,activity:`Recent sessions across people using this gateway.`,meetings:`Meeting notes and transcripts across this gateway.`,apps:`Companion apps for phone, watch, desktop, and browser.`,portals:`Live previews from agent-run applications.`,approvals:`Recent exec, plugin, and system-agent approvals.`,workboard:`Agent work queue and session handoff.`,worktrees:`Isolated agent task checkouts and recovery snapshots.`,channels:`Channels and settings.`,connection:`Gateway endpoint, credentials, and handshake status.`,sessions:`Active sessions and defaults.`,usage:`API usage and costs.`,cron:`Scheduled tasks and recurring agent runs.`,tasks:`Background tasks: subagents, automation runs, CLI.`,skills:`Skills and API keys.`,plugins:`Install and manage optional capabilities.`,skillWorkshop:`Review, refine, and apply proposals before they become live skills.`,devices:`Paired devices, pairing approvals, and exec bindings.`,cloudWorkers:`Profiles and machine sizes for cloud sessions.`,chat:`Gateway chat for quick interventions.`,dashboards:`Tasks with saved dashboards.`,custodian:`System setup and care.`,config:`Legacy settings route; opens Appearance.`,profile:`Your display name, avatar, and identity on this gateway.`,communications:`Messages and text-to-speech settings.`,appearance:`Theme and UI settings.`,lobsterdex:`Every lobster palette that has visited this browser.`,automation:`Commands, hooks, automations, and plugins.`,mcp:`MCP servers, auth, tools, and diagnostics.`,memory:`Memory engine, search, and dreaming.`,talk:`Realtime voice: provider, model, and speaker voice.`,infrastructure:`Gateway, browser, node host, discovery, and ACP settings.`,labs:`Experimental agent and tool capabilities.`,updates:`Release channel, automatic updates, and current update status.`,about:`Control UI and connected Gateway build identity.`,aiAgents:`Global agent defaults: skills, tools, and session.`,modelSetup:`Connect a verified AI model`,modelProviders:`Default models, behavior, provider access, usage, and cost.`,memoryImport:`Bring Codex and Claude Code memory into an agent workspace.`,notifications:`Browser push notifications from your gateway.`,security:`Gateway auth, exec policy, tool profile, and approvals.`,advanced:`Every remaining config section, plus the raw file editor.`,debug:`Snapshots, events, RPC.`,logs:`Live gateway logs.`,plugin:`Plugin-provided panel.`},cloudWorkersPage:{},portalsPage:{listLabel:`Active portals`,portLabel:`Port {port}`,openNewTab:`Open in new tab`,closePortal:`Close {title}`,previewTitle:`{title} portal preview`,loading:`Loading portals…`,emptyHint:`Ask the agent to start a portal:`,promptShow:`Show me in a portal.`,promptStart:`Start the application in a portal.`,promptMakeAvailable:`Make the server available in a portal.`,unsupported:`This gateway does not support portals.`,loadFailed:`Could not load portals: {error}`,closeFailed:`Could not close the portal: {error}`,unreachableTitle:`Portal not reachable from this browser`,unreachableBody:`The Gateway is likely being accessed through a proxy or tunnel that exposes only its main port. Open this URL from a browser on the Gateway host.`,writeAccessRequiredTitle:`Write access required`,writeAccessRequiredBody:`This portal requires an operator with write access.`,retry:`Retry`},modelSetup:{missingAuth:`No provider credential is configured for this model. Set it up in Model Setup.`,heading:`Connect a verified AI model`,intro:`OpenClaw checks the AI access available on this Gateway and verifies the exact model before it enables conversations.`,required:{title:`No AI provider configured`,body:`We couldn't find a provider and model configured for this agent. Choose a supported connection; OpenClaw will test it before enabling chat.`,action:`Connect an AI provider`},loading:`Checking this Gateway for available AI access…`,testing:`Testing — asking the selected model for a quick reply…`,retry:`Retry`,checkAgain:`Check again`,recovery:{unknown:`The previous activation is unresolved. You can verify and use the selected model, or check again after the setup attempt has finished. No activation will be repeated automatically.`,wait:`The previous setup attempt may still be running. Wait for its bounded setup window to finish, then choose Check again to retry.`,useCurrent:`Verify & use selected model`},verify:{title:`Selected model`,button:`Check model`,retry:`Try again`,checkAgain:`Check again`,checkingButton:`Checking…`,checking:`Checking — asking {modelRef} for a quick reply…`,ready:`Ready`,readyIn:`Ready · {latencyMs} ms`,providerUnavailable:`{provider} isn’t responding.`},access:{adminRequired:`Model setup requires operator.admin access.`,gatewayTooOld:`The Gateway is running an older OpenClaw version`},candidates:{title:`Found on this Gateway`,recommended:`Recommended`,credentialsReady:`Credentials ready`,signInNeeded:`Sign-in needed`,detected:`Detected`,testAndUse:`Test & use`,retry:`Retry test`,testingButton:`Testing…`},empty:{title:`Recommended installs`,intro:`No existing AI access was detected. Install one of these tools, then check again.`},unavailable:{title:`Found, but needs attention`,signIn:`Sign in with {provider}`,useApiKey:`Use API key`},signIn:{title:`Sign in with a provider`,signIn:`Sign in`,pair:`Pair`,more:`More sign-in options`},prepare:{title:`Run a model locally`,intro:`Use a local model service or prepare a private GGUF model on this Gateway.`,ollamaButton:`Check & set up`,ollamaLabel:`Ollama`,ollamaHint:`Connect to the Ollama service on this Gateway and prepare a tools-capable model`,llamaCppLabel:`llama.cpp`,providerNotReady:`{provider} did not expose a usable local model. Review the setup result, then retry.`},manual:{title:`Connect with an API key or token`,provider:`Provider and access method`,selectProvider:`Select a provider`,selectProviderHint:`Choose where this credential comes from`,accessValue:`API key or token`,accessValueFor:`{provider} API key or token`,accessValuePlaceholder:`Paste an API key or token`,connectAndVerify:`Connect & verify`,verifyHint:`OpenClaw verifies a real model reply before marking the connection ready.`,required:`Choose a provider and enter an API key or token.`},success:{title:`Connection verified`,body:`OpenClaw received a real reply from {modelRef}. You can start chatting now.`,activeModel:`Active model`,latency:`Verified in {latencyMs} ms`,openChat:`Start chatting`,continueSetup:`Continue setup`,stayHere:`Stay in settings`,configuredModel:`Configured model`},failure:{auth:`Authentication failed`,rateLimit:`Rate limited`,billing:`Billing problem`,timeout:`Timed out`,format:`Invalid response`,unavailable:`Unavailable`,unknown:`Connection failed`},failureGuidance:{auth:`Review the provider credential or sign-in, then retry.`,rateLimit:`Wait for the provider limit to reset, then retry.`,billing:`Restore provider billing or quota, then retry.`,timeout:`The model did not finish the setup test in time. Warm it or choose a faster model, then retry.`,unavailable:`Make sure the provider service is running and reachable, then retry.`,format:`Check that the endpoint exposes a compatible chat model, then retry.`,unknown:`Review the connection details, then retry.`},errors:{requestFailed:`Model setup request failed.`,activationFailed:`The model could not be activated.`},wizard:{dialogLabel:`Provider sign-in`,prepareDialogLabel:`Local model setup`,title:`Sign in with a provider`,prepareTitle:`Set up a local model`,starting:`Starting provider sign-in…`,prepareStarting:`Starting local model setup…`,checking:`Checking your model setup…`,working:`Working…`,continue:`Continue`,submit:`Submit`,openSignIn:`Open sign-in page`,copy:`Copy`,expires:`Expires in {count} minutes`,cancelled:`Provider sign-in was cancelled.`,sessionExpired:`This setup session expired after the Gateway restarted. Close this dialog, then start model setup again.`,notComplete:`Sign-in finished, but model setup is not complete yet.`}},memoryImport:{},onboarding:{memoryImport:{title:`Bring your assistant memory with you`,body:`OpenClaw found memory from other coding assistants. Import it into your agent workspace?`,plannedCount:`{count} ready to import`,alreadyImported:`Already imported: {count}`,sourceUnavailable:`Source path unavailable`,import:`Import`,skip:`Skip`,reviewDetails:`Review details`,importingProvider:`Importing…`,providerResult:`Migrated {migrated}, skipped {skipped}`,providerIncomplete:`Migrated {migrated}, skipped {skipped}, {errors} failed, {conflicts} conflicts`,providerError:`Import failed: {error}`,connectionChanged:`Skipped: the Gateway connection changed during the import`,unknownError:`Request failed`,doneTitle:`Memory import finished`,doneBody:`Migrated {migrated}, skipped {skipped}. You can continue setting up OpenClaw.`}},assistantPanel:{title:`Assistant sidebar`,home:`Home`,toggle:`Talk to your Home agent`,openHome:`Open Home full page`,close:`Close assistant sidebar`,resize:`Resize assistant sidebar`,dockBottom:`Dock assistant sidebar at bottom`,dockRight:`Dock assistant sidebar at right`,context:`Working on: {context}`,contextOff:`Work context off`,removeContext:`Remove work context`,includeContext:`Include work context`,selection:`Selected text`,attachSelection:`Attach selected text`,removeSelection:`Remove selected text`},custodian:{title:`OpenClaw`,subtitleCaretaker:`System setup and care.`,exitSetup:`Exit setup`,newAgent:`New agent`,hatchDraft:`Wake up, my friend!`,placeholder:`Message OpenClaw…`,sensitivePlaceholder:`Enter sensitive value…`,sensitiveReply:`Sensitive reply sent`,cancel:`Cancel`,send:`Send`,thinking:`OpenClaw is thinking`,earlier:`Earlier`,requestFailed:`OpenClaw could not reply. Try again.`,connectionChanged:`The Gateway connection changed. Retry to continue this setup.`,sessionRestarted:`{error} OpenClaw started a fresh session; earlier messages remain for context.`,unsupportedGateway:`Update the Gateway to continue setup with OpenClaw.`,panel:{title:`OpenClaw`,toggle:`Toggle Ask OpenClaw`,close:`Close Ask OpenClaw`,resize:`Resize Ask OpenClaw`,dockBottom:`Dock Ask OpenClaw at bottom`,dockRight:`Dock Ask OpenClaw at right`},history:{button:`History`,title:`Recent changes`,description:`What changed on this system, newest first.`,loading:`Loading recent changes…`,empty:`No recorded changes yet.`,requestFailed:`OpenClaw could not load change history.`,loadMore:`Load more`,loadingMore:`Loading more…`,changedPaths:`Changed paths ({count})`,invalidEdit:`This manual edit did not pass configuration validation.`,opaqueChange:`Formatting or comments changed without visible configuration path changes.`,sources:{systemAgent:`system-agent`,doctor:`doctor`,settings:`settings`,cli:`CLI`,pluginInstall:`plugin install`,manualEdit:`manual edit`,unknown:`unknown`}},nudge:{configReload:`Configuration reload stopped — ask me what happened`,channelAuth:`{channel} authentication degraded — ask me what happened`,channelDisconnected:`{channel} just disconnected — ask me what happened`,channelDegraded:`{channel} is degraded — ask me what happened`,channelFallback:`A channel`,dismiss:`Dismiss this update`,channelSetupTitle:`Reach OpenClaw outside this app`,channelSetupBody:`The web app already works. Add a channel only if you want to message OpenClaw from another service.`,channelSetupAction:`Set up a channel`,channelSetupDismiss:`Keep using the web app`,channelStatusErrorTitle:`Channel status is unavailable`,channelStatusErrorBody:`Retry the check, or keep using the web app without a channel.`}},mcpServers:{add:`Add server`,adding:`Adding…`,nameLabel:`Name`,transportLabel:`Transport`,transportStreamableHttp:`Streamable HTTP`,transportSse:`SSE`,transportStdio:`Stdio`,targetLabel:`URL or command`,nameInvalid:`Server names use letters, numbers, dots, dashes, or underscores.`,targetInvalid:`Enter a URL for HTTP transports or a valid command line for stdio.`,sessionEnableFailed:`The server was saved disabled globally, but enabling it for this session failed: {error}`,sessionChanged:`The active session changed before it could be enabled.`,sessionUnavailable:`The active session is unavailable; refresh and try again.`,nameTaken:`An MCP server named “{name}” already exists.`,missing:`MCP server “{name}” was not found in the configuration.`,missingTransport:`missing transport`,addedSuccess:`Added MCP server {name}.`,enabledSuccess:`Enabled MCP server {name}.`,disabledSuccess:`Disabled MCP server {name}.`,removedSuccess:`Removed MCP server {name}.`,configUnavailable:`Configuration is unavailable; refresh and try again.`,connectRequired:`Connect to the gateway to change MCP servers.`,adminRequired:`MCP server changes require operator.admin access.`,enable:`Enable`,disable:`Disable`,removeNamed:`Remove {name}`,working:`Working…`},mcpPage:{intro:`Connect and manage MCP servers that provide tools to OpenClaw.`,servers:`Servers`,oauth:`OAuth`,filtered:`Filtered`,configuredServers:`Configured servers`,noServers:`No MCP servers configured.`,setUpFirstServer:`Set up your first MCP server`,operatorCommands:`MCP operator commands`,operatorCommandsHint:`Status, diagnostics, auth, probing, and runtime reload.`,runtimeHint:`Edits save automatically; runtime changes apply after a gateway restart, and active agents rebuild MCP runtimes on next use.`,toolFilter:`tool filter`,parallel:`parallel`,tlsVerifyOff:`TLS verify off`,mtls:`mTLS`},talkPage:{intro:`Configure realtime voice providers, models, and speaker voices.`,voiceSection:{title:`Realtime voice`,description:`Continuous speech conversations with your agent. The pickers below write talk.realtime settings; the full form further down covers everything else.`},status:{title:`Status`,ready:`Ready`,notReady:`Not configured`,unavailable:`Unavailable`,unavailableHint:`Connect to the Gateway to check realtime voice readiness.`,activeProvider:`Active provider: {provider}`,noProvider:`No realtime voice provider is configured yet.`},provider:{title:`Provider`,description:`Auto picks the first provider with working credentials.`,auto:`Auto`},model:{title:`Model`,description:`Realtime voice model for browser Talk sessions.`,default:`Provider default`,defaultNamed:`Default ({model})`},voice:{title:`Speaker voice`,description:`Voice used for spoken replies. GPT-Live locks the voice once a call starts.`,default:`Provider default`},gptLive:{title:`GPT-Live`,hint:`GPT-Live works with a ChatGPT subscription: sign in once with “openclaw models auth login --provider openai”. No Platform API key needed for browser or Gateway-relay Talk. Delegated work can be steered while running and requires exact spoken confirmation for high-impact actions.`,ready:`Ready`}},memoryPage:{intro:`Choose how OpenClaw stores, searches, and maintains agent memory.`,tablistLabel:`Memory sections`,tabs:{overview:`Overview`,memories:`Memories`,dreams:`Dreams`,settings:`Settings`},overview:{hero:{awake:`Memory is awake`,waking:`Waking memory…`,hibernating:`Memory is hibernating`,needsAttention:`Memory needs attention`,activeDescription:`{engine} · {mode}`,loadingDescription:`Checking this agent's memory engine and dream cycle.`,offDescription:`Choose a memory engine in Settings to wake it up.`,disabledDescription:`The selected memory engine is disabled. Re-enable it in Settings.`,gatewayOffline:`The gateway is offline, so memory status is unavailable.`,hybridSearch:`hybrid search`,keywordSearch:`keyword search (no embeddings)`,openSettings:`Open Settings`,retry:`Retry`,refresh:`Refresh status`},schedule:{title:`Sleep schedule`,lightDescription:`Sorts fresh short-term notes and stages promising candidates without changing long-term memory.`,remDescription:`Reflects on themes and recurring ideas across recent activity to strengthen ranking without changing long-term memory.`,deepDescription:`Scores staged candidates, promotes the keepers into long-term memory (MEMORY.md), and writes the dream diary.`,nextRun:`next {time}`,lastRun:`last {time}`,notScheduled:`Not scheduled`,learnMore:`How dreaming works`,openDocs:`Open dreaming guide`},activity:{title:`Activity`,promotedToday:`Promoted today`,promotedTotal:`Promoted total`,shortTermCount:`Pending short-term entries`,phaseHitCount:`Phase signals`,lightPhaseHitCount:`Light-phase hits`,remPhaseHitCount:`REM-phase hits`},health:{title:`Engine health`,provider:`Provider`,embeddings:`Embeddings`,runtime:`Embedding runtime`,healthy:`Ready`,unavailable:`Unavailable`,notChecked:`Not checked`,notCheckedDescription:`Embedding readiness has not been checked yet.`,checking:`Checking…`,test:`Test`,testing:`Testing…`},shortcuts:{title:`Explore memory`,memories:`Search memories`,diary:`Read the dream diary`,settings:`Configure memory`}},memories:{searchLabel:`Search memories`,searchPlaceholder:`Search this agent's memories`,searchButton:`Search`,idle:`Search for a person, project, decision, or anything else this agent remembers.`,searching:`Searching memories…`,results:`{count} results`,empty:`No memories matched “{query}”.`,error:`Memory search failed: {message}`,retry:`Retry`,gatewayUpdateRequired:`Update the gateway to search memories from the Control UI.`,hybridSearch:`hybrid search`,keywordSearch:`keyword search`,lineRange:`lines {start}–{end}`,score:`score {score}`,sourceMemory:`memory`,sourceSessions:`sessions`,fileLoading:`Loading the full memory file…`,fileError:`Could not load this memory file: {message}`,fileUnsupported:`This memory file cannot be shown as text.`},engine:{title:`Engine`,description:`Exactly one memory plugin owns the memory slot. Selecting an engine enables it and disables the others.`,rowTitle:`Memory engine`,openClawMemory:`OpenClaw Memory`,off:`Off`,unavailable:`Unavailable`,autoHint:`No engine is pinned in config, so the slot falls back to its default owner.`,explicitHint:`This engine is pinned in config under plugins.slots.memory.`,offHint:`Memory is switched off in config: plugins.slots.memory is set to none.`,catalogUnavailable:`Connect to the gateway to change the memory engine.`,changeFailed:`Could not change the memory engine`,disabledTitle:`This engine is disabled`,disabledHint:`The memory slot points at this plugin, but the plugin itself is disabled, so memory is not running.`,enable:`Enable`},addons:{title:`Add-ons`,description:`These plugins layer on top of the engine instead of competing for the slot, so any combination can run at once.`,activeMemory:{title:`Active memory`},memoryWiki:{title:`Memory wiki`},toggleAriaLabel:`Enable or disable {plugin}`,changeFailed:`Could not update {plugin}`,stateUnknown:`Unknown`,manage:`Enable or disable add-ons`,manageLink:`Open Plugins`},import:{title:`Import`,description:`Bring existing memory from other assistants into an agent workspace.`,link:`Open Memory Import`},search:{intro:`Embedding and retrieval defaults shared by every agent that has no memory override.`},dreaming:{intro:`Dreaming runs as one managed automation across every agent workspace, so these settings are global. They are owned by the {plugin} plugin.`,schedule:{title:`Schedule`,description:`When the full sweep runs and which model narrates it.`},frequency:{label:`Dreaming frequency`,help:`Cron cadence for the full dreaming sweep (light, REM, then deep). Leave empty for the plugin default.`,placeholder:`0 3 * * *`},timezone:{label:`Timezone`,help:`IANA timezone used to interpret the cron cadence.`,placeholder:`Europe/Vienna`,default:`Gateway local timezone`},model:{label:`Dreaming model`,help:`Provider/model override for dream diary narration. Requires subagent model overrides to be allowed.`,placeholder:`anthropic/claude-sonnet-4-6`,default:`Agent model`},verboseLogging:{label:`Verbose logging`,help:`Log each dreaming phase in detail. Useful when tuning thresholds.`},storage:{title:`Storage`,description:`Where promoted memories and dreaming reports are written.`,modeLabel:`Storage mode`,modeHelp:`Inline writes into the memory file; separate keeps a dedicated report file.`,modes:{inline:`Inline`,separate:`Separate`,both:`Both`},separateReportsLabel:`Separate reports`,separateReportsHelp:`Keep dreaming reports out of the main memory file.`},phases:{light:{title:`Light phase`,description:`Cheap recent-activity pass that stages replay candidates.`},deep:{title:`Deep phase`,description:`Scored promotion pass that graduates short-term entries into memory.`},rem:{title:`REM phase`,description:`Pattern pass that looks for recurring themes across the lookback window.`}},phaseFields:{enabled:`Enabled`,enabledHelp:`Run this phase during the sweep.`,lookbackDays:`Lookback days`,lookbackDaysHelp:`How far back this phase reads. Leave empty for the plugin default.`,limit:`Limit`,limitHelp:`Maximum entries this phase processes per run.`,dedupeSimilarity:`Dedupe similarity`,dedupeSimilarityHelp:`Similarity above which two candidates are treated as duplicates.`,minScore:`Minimum score`,minScoreHelp:`Promotion score an entry must reach.`,minRecallCount:`Minimum recalls`,minRecallCountHelp:`How often an entry must be recalled before it can be promoted.`,minUniqueQueries:`Minimum unique queries`,minUniqueQueriesHelp:`How many distinct queries must have surfaced the entry.`,recencyHalfLifeDays:`Recency half-life (days)`,recencyHalfLifeDaysHelp:`How quickly older recall signals lose weight.`,maxAgeDays:`Maximum age (days)`,maxAgeDaysHelp:`Ignore short-term entries older than this.`,maxPromotedSnippetTokens:`Max promoted snippet tokens`,maxPromotedSnippetTokensHelp:`Token budget for each promoted snippet. Provenance stays attached.`,minPatternStrength:`Minimum pattern strength`,minPatternStrengthHelp:`Strength a recurring pattern must reach to be reported.`},agentScope:{rowTitle:`Agent`},unsupported:{title:`Dreaming settings`,rowTitle:`Not available for this engine`,description:`The {plugin} plugin owns the memory slot and its config schema has no dreaming section, so these settings cannot be stored. Switch the engine above to edit them.`}}},sessionsPage:{hubTablistLabel:`Session sections`},pluginsPage:{searchLabel:`Search plugins`,searchPlaceholder:`Search plugins and ClawHub`,browseClawHub:`Browse ClawHub`,refresh:`Refresh`,hubTablistLabel:`Plugins sections`,installedTab:`Installed`,discoverTab:`Discover`,workshopTab:`Workshop`,tryAgain:`Try again`,loading:`Loading plugins…`,searching:`Searching ClawHub…`,searchResultCountOne:`{count} result`,searchResultCount:`{count} results`,fromClawHub:`From ClawHub`,noClawHubResultsBody:`ClawHub has no results for “{query}”.`,noDiscoverMatchTitle:`Nothing to discover matches`,featuredGroup:`Featured`,officialGroup:`Official plugins`,connectorsGroup:`Connect your world`,connectorsHint:`One-click MCP connectors and hand-picked ClawHub searches for popular services.`,connectorGroupWork:`Work & productivity`,connectorGroupDev:`Coding & infrastructure`,connectorGroupHome:`Home & media`,connectorGroupLife:`Everyday life`,mcp:`MCP`,oauth:`OAuth`,connectorMcpNote:`One-click MCP server`,connectorClawHubNote:`Community plugins on ClawHub`,connectorAdd:`Add`,connectorSearch:`Find on ClawHub`,connectorAdded:`Added`,connectorAddedOauth:`Added {name}. Authenticate with “{command}”, then restart the gateway.`,connectorAddedEndpoint:`Added {name}. Update the endpoint and credentials in MCP settings before use.`,connectorAddedReady:`Added {name}. New agent sessions can use it right away.`,connectorDescriptions:{notion:`Search, create, and update pages and databases in your Notion workspace.`,linear:`Triage issues, update cycles, and file bugs straight from chat.`,todoist:`Read, add, and complete tasks and projects in Todoist.`,airtable:`Query and update records, tables, and bases in Airtable.`,jira:`Create, search, and triage Jira tickets from chat.`,canva:`Create and edit Canva designs, manage assets, and export results.`,stripe:`Check payments, customers, invoices, and subscriptions in your Stripe account.`,googleCalendar:`Read, create, and get briefed on events — your agent owns your schedule.`,email:`Mailbox triage, summaries, and drafts with send-on-approval.`,pdf:`Extract, merge, convert, and OCR PDF documents.`,transcription:`Turn audio and video into clean, structured transcripts.`,github:`PR review queues, issue triage, and repo Q&A through the official GitHub MCP.`,sentry:`Crash alerts explained and triaged the moment they fire.`,context7:`Version-specific library docs and code examples while coding. No signup needed.`,deepwiki:`Ask questions about any public GitHub repo. Free, no account needed.`,huggingFace:`Search models, datasets, and papers; run Spaces as tools.`,grafana:`Grafana know-how and community connectors for dashboards and alerts.`,kubernetes:`Cluster operations and troubleshooting from chat.`,homeAssistant:`Control lights, climate, and automations across your whole home.`,spotify:`Search, queue, and soundtrack your day with mood-based playlists.`,sonos:`Whole-home audio: play, group rooms, and queue by chat.`,reddit:`Browse, search, and summarize subreddits and threads.`,markets:`Live stocks and crypto with price alerts and daily digests.`,travel:`Flight and hotel search with fare watching and trip memory.`,news:`A personalized daily briefing: news, weather, and tasks in one message.`,maps:`Places, routing, and travel-time answers.`,translation:`Translate and localize text and documents.`,notes:`Capture notes to Markdown, Obsidian, Notion, or Bear.`},noInstalledTitle:`No optional plugins installed`,noInstalledBody:`Discover a featured plugin or search ClawHub to extend OpenClaw.`,noInstalledMatchTitle:`No installed plugins match`,noMatchBody:`Try a different search.`,filterAll:`All`,filterIssues:`Issues`,filterLabel:`Filter installed plugins`,categoryChannels:`Channels`,categoryProviders:`Model providers`,categoryMemory:`Memory`,categoryContextEngine:`Context engines`,categoryTools:`Tools`,categoryOther:`Other`,mcpServersGroup:`MCP servers`,mcpSettingsLink:`MCP settings`,mcpHint:`Connect Model Context Protocol servers to give your agent extra tools. Changes apply to new agent sessions.`,mcpEmpty:`No MCP servers configured yet. Add one here or pick a connector from Discover.`,remove:`Remove`,removing:`Removing…`,removeNamed:`Remove {name}`,removeConfirmTitle:`Remove {name}?`,removeConfirmMessage:`Removing this plugin package and all of its entries restarts the Gateway immediately and interrupts active sessions.`,cancel:`Cancel`,removedRestart:`Removed {name}. A Gateway restart is required to apply the change.`,verifiedSource:`Verified source`,enableAction:`Enable`,disableAction:`Disable`,working:`Working…`,detailClose:`Close`,detailOrigin:`Source`,detailCategory:`Category`,detailPackage:`Package`,detailPluginId:`Plugin ID`,capabilities:`Capabilities`,offlineTitle:`Gateway offline`,offlineBody:`Connect to browse installed and recommended plugins.`,optionalCapability:`Optional OpenClaw capability.`,enabled:`Enabled`,disabled:`Disabled`,available:`Available`,needsAttention:`Needs attention`,included:`Included`,global:`Global`,workspace:`Workspace`,config:`Config`,official:`Official`,codePlugin:`Code plugin`,bundlePlugin:`Bundle plugin`,unavailable:`Unavailable`,install:`Install`,installing:`Installing…`,installNamed:`Install {name}`,installConfirmTitle:`Install {name}?`,installConfirmMessage:`Installing this plugin restarts the Gateway immediately and interrupts active sessions.`,policyReviewTitle:`Security review needed`,policyReviewBodyKnown:`Policy warnings: {count}. Not installed.`,policyReviewBodyReason:`{reason} Not installed.`,policyReviewFindings:`Findings`,policyReviewSeverityInfo:`Info`,policyReviewSeverityWarn:`Warning`,policyReviewSeverityCritical:`Critical`,policyReviewTechnicalDetails:`Details`,policyReviewScope:`Install anyway approves every install-policy warning encountered during this install. Each warning is checked again before installation continues.`,installAnyway:`Install anyway`,connectToChange:`Connect to the gateway to change plugins.`,adminRequired:`Plugin changes require operator.admin access.`,changesDisabled:`This gateway does not allow plugin changes.`,configRefreshFailed:`Could not refresh Control UI configuration: {error}`,installedSuccess:`Installed {name}.`,installedRestart:`Installed {name}. A Gateway restart is required to apply the change.`,enabledSuccess:`Enabled {name}.`,enabledRestart:`Enabled {name}. A Gateway restart is required to apply the change.`,disabledSuccess:`Disabled {name}.`,disabledRestart:`Disabled {name}. A Gateway restart is required to apply the change.`},labsPage:{intro:`Labs contains experimental capabilities that may change, break, or disappear between releases.`,sectionTitle:`Experimental features`,sectionDescription:`Changes save immediately. Some features require a restart to take effect.`,documentation:`Documentation`,restartRequired:`Gateway restart required.`,saveErrorTitle:`Could not update feature`,saveFailed:`The feature setting could not be saved.`,codeMode:{title:`Code Mode`,description:`Set the global default for compact, sandboxed JavaScript tool workflows. On selects Auto for evaluated models; Off disables the default. Per-model Code Mode overrides are in Agent Defaults → Models (Advanced).`},swarm:{title:`Swarm`,groupTitle:`Parallel tasks`,description:`Coordinate parallel subagents and collect their results.`,defaultPhase:`Unphased`,progress:`{complete} of {total}`},toolSearch:{title:`Tool Search`,description:`Keep a bounded tool directory visible and defer the rest behind search, so large MCP and plugin catalogs stop crowding the prompt.`},loopDetection:{title:`Tool-loop detection`,description:`Enable rolling-history guards that warn or block repeated tool calls when an agent stops making progress.`},localModelLean:{title:`Lean tools for local models`,description:`Drop heavyweight default tools that smaller local models handle poorly, leaving a shorter set they can use reliably.`},cliAgents:{title:`CLI agents`,description:`Show external CLI session engines in the new-session model picker when their plugins support creating sessions.`},customPluginUi:{title:`Custom plugin UI`,description:`Let installed plugins add pages, widgets, and custom views. Their JavaScript runs with your signed-in permissions, so enable only plugins you trust. Bundled plugin views remain available.`,restartRequired:`Restart the Gateway and reload this browser tab after changing this setting.`},auditMessages:{title:`Message audit metadata`,description:`Record content-free metadata for direct conversations in the audit ledger. Message content is never stored.`},hostDesktop:{title:`Host Desktop`,description:`Watch and control this Gateway machine from the Desktop panel through its existing VNC or Screen Sharing server.`},workerDesktop:{title:`Cloud Worker Desktop`,description:`Watch and control node-carried desktops from capable Crabbox AWS or Hetzner profiles with desktop: true.`}},aboutPage:{productName:`OpenClaw`,tagline:`Your personal AI assistant, running on your own devices.`,waveHello:`Wave hello to Clawd`,linksLabel:`Community and resources`,linkWebsite:`Website`,linkDocs:`Docs`,linkGitHub:`GitHub`,linkDiscord:`Discord`,linkX:`X (Twitter)`,linkChangelog:`Changelog`,license:`© 2026 OpenClaw Foundation — MIT License.`,artifactTitle:`Control UI`,artifactSubtitle:`Identity embedded when this browser artifact was built.`,artifactDetails:`Control UI build details`,version:`Version`,commit:`Commit`,branch:`Branch`,built:`Built`,unavailable:`Unavailable`,copyCommit:`Copy full commit hash`,copyingCommit:`Copying commit hash`,copiedCommit:`Commit hash copied`,copyCommitFailed:`Could not copy commit hash`,gateway:`Gateway`,gatewayVersion:`Connected Gateway version`,gatewayVersionHint:`Reported by the active Gateway connection; separate from this Control UI build.`},appsPage:{heroTitle:`Take OpenClaw everywhere`,heroTagline:`Companion apps for your phone, watch, desktop, and browser — plus plugins to extend what your agent can do.`,sectionMobile:`On your phone`,havePhone:`Already have the app?`,pairDevice:`Pair your device`,sectionWatch:`On your wrist`,sectionDesktop:`On your desktop`,sectionBrowser:`In your browser`,sectionCommunity:`Community`,badgeBundledIos:`Included with the iOS app`,badgeBundledAndroid:`Included with the Android app`,ctaAppStore:`App Store`,ctaPlayStore:`Google Play`,ctaDownload:`Download`,ctaOpenMac:`Open in Mac app`,ctaDocs:`Docs`,ctaSetupGuide:`Setup guide`,ctaChromeWebStore:`Chrome Web Store`,ctaOpenPlugins:`Open Plugins`,ctaBrowseClawHub:`Browse ClawHub`,linkDiscord:`Discord community`,linkDocs:`Docs`,cards:{ios:{title:`iPhone`,desc:`Chat, talk, approve actions, and share into OpenClaw from iOS.`},android:{title:`Android`,desc:`Your Android phone as a full OpenClaw device — chat, camera, and Canvas.`},appleWatch:{title:`Apple Watch`,desc:`Glanceable chats and quick replies from your wrist.`},wearOs:{title:`Wear OS`,desc:`The Android companion extends OpenClaw to your watch.`},macos:{title:`macOS`,desc:`Menu bar companion for your Gateway — notifications, approvals, quick chat.`},windows:{title:`Windows`,desc:`The Windows companion connects your PC as an OpenClaw device.`},linux:{title:`Linux`,desc:`Native desktop app — .deb and AppImage builds.`},chrome:{title:`Chrome extension`,desc:`Let OpenClaw drive your existing Chrome — tabs, pages, and forms.`},plugins:{title:`Plugins & ClawHub`,desc:`Extend OpenClaw with channels, tools, and skills from the community.`}}},presence:{rosterTitle:`Online`,idle:`Idle`,offline:`Offline`,card:{details:`Details for {name}`,loadFailed:`Could not open details. Try again, or open this person’s Activity page.`,ariaLabel:`Activity for {name}`,person:`Person`,onlineFor:`Online for`,where:`Where`,reportedTimeZone:`Reported time zone: {zone}`,lastActivity:`Last activity`,notObserved:`Not observed yet`,viewingNow:`Viewing now`,recentSessions:`Recent sessions`,noVisibleSessions:`No visible sessions being viewed.`,noRecentSessions:`No recent visible sessions.`,sessionUpdated:`Session updated`,ago:`ago`,viewActivity:`View activity`,controlUi:`Control UI`,cli:`Command line`,app:`App`}},activityFeed:{partialHistory:`People and counts describe visible recorded session associations; retained history and this people list may be incomplete.`,sessionsMode:`Sessions`,searchPlaceholder:`Search session titles…`,time:`Time`,time24h:`Last 24 hours`,time7d:`Last 7 days`,time30d:`Last 30 days`,timeAll:`All time`,everyone:`Everyone`,peopleButtonLabel:`Filter sessions by person`,lastActive:`· {time}`,unresolvedIdentities:`Unresolved identities`,clearPersonFilter:`Clear person filter`,sessions:`Sessions`,showing:`Showing {shown} of {total}`,today:`Today`,yesterday:`Yesterday`,unknownDate:`Unknown date`,noSessions:`No sessions match these filters.`,automationGroup:`{count} automation sessions`,automation:`Automation`,inspectRun:`Inspect run`,backToSessions:`Back to sessions`,channelLabel:`Channel: {value}`,agentLabel:`Agent: {value}`,online:`Online`,idle:`Idle`,offline:`Offline`,unknownDevice:`Unknown device`,lastInput:`Last input {time} ago`,viewingNow:`Viewing now`,notViewing:`Not viewing a session right now.`,notFoundTitle:`Person not found`,notFoundDescription:`No online presence or visible session association matches this identity.`},githubPublication:{personal:`My GitHub`,system:`System`,agent:`Agent override`,publishAs:`Publish as @{account}`,account:`Publication account`,choose:`Choose an account`,newAction:`Choose a new publication`,capacity:`Too many publications are awaiting review. Finish an existing publication, then select "{newAction}" to make room. Existing retries remain available.`,confirm:`Confirm original publication`,check:`Check publication`,refresh:`Refresh publication`,unknown:`The outcome is unknown. Retry keeps the original account and request; it does not switch accounts.`,target:`Pull request: {repository} → {base}`,pushTarget:`Push: {repository} · {branch}`,snapshot:`Original accepted snapshot`,head:`HEAD`,index:`Index tree`,workspace:`Workspace tree`,dispatched:`GitHub {kind} was dispatched; its remote outcome may still be unknown.`,observed:`GitHub {kind} was observed. Disconnecting does not undo this effect.`,effectLink:`View GitHub effect`,effectPush:`push`,effectPullRequest:`pull request`,personalWorkspace:`My GitHub requires an idle, reconciled local workspace. Wait for work to finish and reclaim the workspace. System and agent publication keep their existing shared flow.`,scopeHelp:`My GitHub applies only to this explicit Publish PR action. Agent commands, previews, and cloud workers keep the shared account.`,unidentified:`Sign in with a personal profile to use My GitHub.`,connectHelp:`Connect or repair My GitHub in Settings → Profile → GitHub connections.`},githubConnections:{title:`GitHub connections`,description:`Choose the account for each purpose. Your verified sign-in identity and co-author credit stay separate.`,mine:`My GitHub`,system:`System GitHub`,personalDescription:`Your account for explicitly selected Publish PR actions.`,systemDescription:`Shared account for agents and default publication.`,unboundDescription:`Sign in with a personal Gateway profile to connect My GitHub. Administrators can still manage System GitHub.`,signInRequired:`Personal sign-in required`,connected:`Connected`,disconnected:`Not connected`,notLoaded:`Not verified`,reconnectRequired:`Reconnect required`,connectMine:`Connect My GitHub`,changeMine:`Change My GitHub`,changeSystem:`Change System GitHub`,disconnectMine:`Disconnect My GitHub`,disconnectDescription:`Stops unfinished personal publication. Published work stays intact; revoke the app grant separately in GitHub settings.`,adminManaged:`Admin managed`,purpose:`Connect GitHub`,forMe:`For me`,forSystem:`For the system`,purposeHint:`Only the selected connection changes.`,continue:`Continue with GitHub`,usage:`Where these accounts are used`,usageDescription:`My GitHub is used only when you explicitly select it for Gateway-brokered Publish PR on an idle, reconciled local workspace. Publication still needs write access to the session. Agent git/gh, model actions, previews, and workers keep the shared account. Finish and reclaim remote work before personal publication. Connecting My GitHub changes no defaults.`,details:`Connection details`,agentTitle:`GitHub account`,agentOverride:`Agent override`,advancedOverride:`Advanced: agent GitHub override`,manageCommon:`Manage connections in Profile`},profilePage:{offline:`Connect to the gateway to meet your agent.`,usageStatistics:`Usage statistics`,usageStatisticsDescription:`View activity, costs, and usage trends.`,identity:{title:`Identity`,menuLabel:`Identity menu`,menuButtonLabel:`Identity and app menu for {name}`,description:`Your profile on this gateway.`,loading:`Loading your identity…`,profileUnavailable:`Your identity profile could not be loaded.`,unidentified:`This connection has no personal profile; sign in through Cloudflare Access, Tailscale Serve, or a trusted proxy to set a name and avatar.`,writeRequired:`Profile editing requires operator.write access.`,notSet:`Identity is not set.`,setIdentity:`Set identity`,avatar:`Avatar`,avatarDescription:`PNG, JPEG, or WebP. Images are resized to 256 × 256 or smaller.`,chooseAvatar:`Choose image`,processingAvatar:`Processing…`,displayName:`Display name`,displayNameDescription:`Shown to other people using this gateway.`,linkedEmails:`Linked emails`,linkedEmailsDescription:`Email addresses connected to this profile.`,githubAccount:`GitHub account`,githubAccountDescription:`Automatically verified from your GitHub-backed sign-in.`,githubVerified:`Verified from your GitHub-backed sign-in`,githubUnavailable:`Unavailable`,githubUnavailableDescription:`GitHub-backed sign-in is unavailable. Refresh to retry.`,ownerGithubDescription:`GitHub-backed sign-in through Cloudflare Access or Tailscale Serve provides this identity.`,gitCoauthor:`Git co-author credit`,gitCoauthorDescription:`Adds this account's public GitHub noreply address to commits created from shared sessions. Turning it off affects future commits only.`,gitCoauthorUnavailable:`Available after your GitHub-backed sign-in is verified. Refresh to retry.`,ownerGitCoauthorDescription:`Requires GitHub-backed sign-in through Cloudflare Access or Tailscale Serve.`,avatarErrors:{invalid:`That image could not be processed.`,sourceTooLarge:`Choose an image that is 10 MB or smaller.`,tooLarge:`The processed avatar is larger than 512 KB.`}},modelAccounts:{}},tasksPage:{active:`Active`,activeSub:`Queued and running background work.`,recent:`Recent`,recentSub:`Latest completed, failed, and cancelled tasks.`,loading:`Loading tasks…`,empty:`No background tasks yet.`,emptyActive:`No queued or running tasks.`,emptyRecent:`No recent completed tasks.`,disconnected:`Connect to the gateway to load and manage tasks.`,loadFailed:`Could not load tasks.`,cancelFailed:`Could not cancel the task.`,recoveryFailed:`Could not update completion delivery.`,invalidResponse:`The gateway returned an invalid task list.`,untitled:`Background task`,taskCount:`{count} tasks`,taskCountOne:`1 task`,agent:`Agent: {agent}`,openSession:`Open session`,cancelTask:`Cancel {title}`,cancelling:`Cancelling…`,retryDelivery:`Retry delivery`,dismissDelivery:`Dismiss delivery`,copyResult:`Copy result`,deliveryBlocked:`Completed, but result delivery is blocked.`,deliveryDismissed:`Completed; result delivery was dismissed.`,duplicateRisk:`Retrying may duplicate a result after an ambiguous acknowledgement.`,status:{queued:`Queued`,running:`Running`,completed:`Completed`,failed:`Failed`,cancelled:`Cancelled`,timedOut:`Timed out`},runtime:{subagent:`Subagent`,cron:`Automation`,acp:`ACP`,cli:`CLI`,unknown:`Task`}},skillWorkshop:{title:`Skill Workshop`,header:{useCurrentChat:`Use current chat`,useCurrentChatAria:`Use current chat for revision requests`,useCurrentChatTooltip:`Send revision requests to the current chat session instead of the proposal's workshop session.`,selfLearning:`Self-learning`,selfLearningAria:`Toggle autonomous self-learning`,selfLearningTooltip:`Capture corrections and review substantial completed work as reusable skills. The default automatic mode applies scanner-approved captures and shows them on this board.`,view:`Workshop view`,board:`Board`,today:`Today`},status:{all:`All`,pending:`Pending`,applied:`Applied`,rejected:`Rejected`,quarantined:`Quarantined`,stale:`Stale`},recency:{today:`Today`,yesterday:`Yesterday`,earlier:`Earlier this week`},diff:{changes:`Changes`,fullBody:`Full body`,viewLabel:`Revision view`,unchanged:`This revision left the skill body unchanged.`,loadingPrevious:`Loading the previous revision…`,previousUnavailable:`The previous revision is unavailable, so this is the full body.`,tooLarge:`This comparison is too large to show here. Switch to Full body to read it.`,truncated:`This comparison is truncated. Changes and statistics may be incomplete. Switch to Full body to review the complete revision.`},applied:{history:`History`,revision:`{count} revision`,revisions:`{count} revisions`,create:`Create`,update:`Update`,version:`v{version}`},previewContext:`in {slug}`,actions:{close:`Close`,cancel:`Cancel`,previous:`Previous`,next:`Next`,apply:`Apply`,applying:`Applying…`,evaluate:`Evaluate`,evaluating:`Evaluating…`,evaluated:`Evaluated`,revise:`Revise`,tweak:`Tweak`,opening:`Opening…`,reject:`Reject`,rejecting:`Rejecting…`,sending:`Sending…`},notices:{applied:`Applied`,proposalChanged:`Proposal changed. Review the updated draft before choosing another action.`,rejected:`Rejected`,revisionRequested:`Revision requested`},revision:{title:`{verb} proposal`,description:`Tell the agent what should change. The proposal stays pending and the workshop will create a revised version.`,placeholder:`Example: Make this use Gmail labels instead of unread search, and add a safer dry-run step.`,preparing:`Waiting for chat admission`,notAdmitted:`Revision request was not admitted. Your instructions are still available; review the error and retry. {error}`,send:`Send revision`},queue:{resize:`Resize proposal list`,search:`Search proposals…`,loadError:`Could not load proposals.`,loading:`Loading proposals…`,noStatus:`No {status} proposals.`,noMatch:`No proposals match the current filter.`},detail:{edited:`Edited {time}`,created:`Created {time}`,supportFiles:`{count} support files`,noSupportFiles:`0 support files`,loading:`Loading proposal…`,supportFilesTitle:`Support files`,clickToPreview:`· click to preview`},evaluation:{title:`Evaluation`,version:`Proposal {version}`,completedAt:`Completed {time}`,status:{completed:`Completed`,skipped:`Skipped`,error:`Error`},decision:{pass:`Pass`,revise:`Revise`,block:`Block`},severity:{info:`Info`,warn:`Warning`,critical:`Critical`},evaluatorVersion:`Evaluator {version}`,mode:`Mode {mode}`,findings:`Findings`,metrics:`Metrics`,fileLine:`{file}:{line}`,errors:{revisionHashUnavailable:`The current proposal revision could not be identified.`,revisionChanged:`The proposal revision changed during evaluation.`}},empty:{searchTitle:`No matching proposals`,searchBody:`Clear the search or try a different keyword.`,pendingTitle:`No pending proposals`,pendingBody:`New drafts will appear here when they need review.`,appliedTitle:`Nothing applied yet`,appliedBody:`Use a pending proposal and it will appear here as a live skill.`,rejectedTitle:`No rejected proposals`,rejectedBody:`Skipped proposals will stay here for a clean review history.`,quarantinedTitle:`Nothing quarantined`,quarantinedBody:`Scanner-blocked or safety-held proposals will appear here.`,staleTitle:`No stale proposals`,staleBody:`Proposals that can no longer apply cleanly will appear here.`,allTitle:`No proposals here`,allBody:`Skill Workshop proposals will appear here when your agent drafts them.`,defaultAgent:`Your agent`,noProposalsAria:`No Skill Workshop proposals`,noProposalsTitle:`No proposals yet`,noProposalsBody:`{agent} hasn't drafted any skill proposals.`,noProposalsFooter:`New proposals will appear here for review.`},selfLearning:{pitchTitle:`Turn on self-learning`,pitchBody:`OpenClaw reviews corrections and substantial completed runs, then applies scanner-approved skills and shows them on this board. Experience review spends extra background tokens.`,enable:`Enable self-learning`,enabling:`Enabling…`,updateError:`Could not update the self-learning setting.`},history:{eyebrow:`Past work`,title:`Find reusable workflows`,body:`Review substantial sessions from newest to oldest. Only strong recovery patterns or workflows that save repeated tool calls become pending proposals.`,findIdeas:`Find skill ideas`,scanEarlier:`Scan earlier work`,scanNew:`Scan new work`,scanning:`Reviewing sessions…`,loading:`Loading history…`,pendingOnly:`Pending proposals only · uses your configured model`,reviewed:`{count} sessions reviewed`,found:`{count} ideas found`,noSessions:`No substantial sessions found in this window.`,today:`today`},today:{emptyTitle:`Nothing waiting today`,emptyBody:`Your agent hasn't drafted anything new. Switch to Board to browse history.`,new:`NEW`,waiting:`WAITING`,reviewed:`REVIEWED`,agent:`agent`,proposalsWaiting:`{count} proposals waiting`,browseApplied:`Browse what's already applied.`,progress:`{current} of {total}`,draftedBy:`Drafted by`,supportFile:`{count} support file`,supportFiles:`{count} support files`,comeWithIt:`come with it.`,useIt:`Use it`,addToSkills:`Add to your skills`,evaluate:`Evaluate`,runChecks:`Run proposal checks`,tweakIt:`Tweak it`,askAgent:`Ask the agent to change something`,skipping:`Skipping…`,skip:`Skip`,notForMe:`Not for me`,upNext:`Up next · {count} more waiting`,seeAll:`See all proposals →`,collection:`Your collection · {count} in use`,manage:`Manage →`,workflowHeading:`How the agent will use it`,applicabilityHeading:`When the agent should use it`}},activity:{status:{done:`Done`}},gatewayLogs:{title:`Logs`,subtitle:`Gateway file logs (JSONL).`,exportButton:`Export {label}`,exportLabels:{filtered:`filtered`,visible:`visible`},filter:`Filter`,searchPlaceholder:`Search logs`,autoFollow:`Auto-follow`,file:`File: {file}`,truncated:`Log output truncated; showing latest chunk.`,empty:`No log entries.`},pluginTabs:{unavailableTitle:`Plugin panel unavailable`,unavailableSubtitle:`The plugin that owns this tab is not active on the connected gateway, or it did not provide a panel.`},logbook:{nav:{previousDay:`Previous day`,nextDay:`Next day`,today:`Today`},status:{capturing:`Capturing every {seconds}s`,paused:`Capture paused`,disabled:`Capture off`,nodeHelp:`Device providing screen snapshots.`,pending:`{count} frames queued`,pendingHelp:`Snapshots waiting for the next analysis batch.`,analyzing:`Analyzing…`,captureError:`Capture error`,batchError:`Analysis error`,modelMissing:`No vision model`,modelMissingHelp:`Set plugins.entries.logbook.config.visionModel or configure tools.media models.`},actions:{pause:`Pause`,resume:`Resume`,analyzeNow:`Analyze now`},empty:{title:`Nothing on the timeline yet.`,subtitle:`Logbook is collecting snapshots; cards appear after the first analysis batch completes.`},card:{keyframeAlt:`Screen snapshot from this activity`,distractions:`Distractions`},stats:{title:`Day at a glance`,focus:`{pct}% focus`,tracked:`{duration} tracked`},standup:{title:`Daily standup`,generate:`Generate`,refresh:`Regenerate`,empty:`Turn today's timeline into a ready-to-paste standup update.`},ask:{title:`Ask your day`,placeholder:`When did I review the gateway PR?`,submit:`Ask`}},board:{label:`Session dashboard`,tabsLabel:`Dashboard tabs`,moreTabs:`More dashboard tabs`,gridLabel:`Dashboard widgets`,emptyTitle:`A clear board, ready for work`,emptyHint:`Your agent can pin widgets here — try asking for a status card.`,actionFailed:`The dashboard change could not be saved.`,actionInProgress:`Another dashboard change is still being saved.`,announcement:{moved:`Moved {title}.`,resized:`Resized {title}.`,removed:`Removed {title}.`,granted:`Widget access allowed.`,rejected:`Widget access rejected.`},widget:{cellLabel:`Dashboard widget: {title}. Use arrow keys to navigate. Hold Alt and press an arrow key to move it.`,moveHandle:`Move {title}`,resizeHandle:`Resize {title}`,menuLabel:`Widget options`,moveToTab:`Move to tab`,noOtherTabs:`No other tabs`,resize:`Resize`,autoHeight:`Auto height`,remove:`Delete`,needsApproval:`Needs approval`,needsApprovalDetail:`This widget requested additional access.`,networkAccess:`Network origins`,hostTools:`Host tools and data`,activeCapabilities:`Active widget capabilities`,networkCapability:`Network: {capability}`,toolCapability:`Tool: {capability}`,granted:`Granted`,allow:`Allow`,allowFailed:`Could not allow widget access. Try again.`,reject:`Reject`,rejectFailed:`Could not reject widget access. Try again.`,rejected:`Access rejected`,rejectedDetail:`This widget stays inactive until it is removed or replaced.`,appLoading:`Restoring app…`,appStaleTitle:`This pinned app is stale`,appStaleDetail:`Its server, resource, or originating transcript is no longer available.`,retry:`Retry`,frameResolverMissing:`Widget content is unavailable.`,sandboxUnavailable:`Widget sandbox host is unavailable.`,frameAuthorizationFailed:`Widget authorization failed after repeated refresh attempts.`,sandboxOriginRequired:`Widget authorization failed after repeated refresh attempts. If the gateway runs behind a reverse proxy or tunnel that does not route the widget sandbox port, set mcp.apps.sandboxOrigin to a dedicated public origin routed to the sandbox listener.`,errorTitle:`This widget could not load`,errorDetail:`The problem is contained to this card.`,actionErrorTitle:`Widget change failed`,actionErrorDetail:`The dashboard kept the previous widget state.`,errorShow:`Show details`,kindMcp:`MCP`,kindHtml:`HTML`,kindPlugin:`Plugin`,pluginLoading:`Loading plugin widget…`,disabledPlugin:`Widget from disabled plugin {pluginId}`}},connection:{disconnectedTitle:`Disconnected`,queuedCount:`{count} queued`,reconnecting:`Reconnecting…`,restarting:`Restarting…`,suspending:`Suspending…`,suspended:`Suspended`,retryNow:`Retry now`,actionsUnavailable:`Actions are unavailable while the Gateway reconnects.`,settingsChangesUnavailable:`Changes to settings are disabled while the Gateway is reconnecting.`,sessionOperationCompletedPreviousConnection:`The session operation completed on the previous connection. Check the current session list before continuing.`,sessionOperationCompletedPreviousConnectionWithRefreshError:`The session operation completed on the previous connection, but refreshing the current session list failed: {error}`,scopeUpgrade:{limited:`This browser has limited access.`,guidance:`This browser has limited access. Manage it with openclaw devices on the Gateway or from Devices on an admin browser.`,status:`Limited access`,inboxState:`Administrator access required`,showDetails:`Show limited access details`,closeDetails:`Close limited access details`,request:`Request admin`,requesting:`Requesting administrator access…`,requestingAction:`Requesting…`,pending:`Approve this browser by running openclaw devices on the Gateway or from Devices on an admin browser. Retry reattaches to the request; Cancel stops waiting.`,retry:`Retry`,cancel:`Cancel`,rejected:`The administrator access request was rejected.`,expired:`The administrator access request expired.`,error:`Administrator access request failed: {error}`},access:{title:`Gateway Access`,subtitle:`Where the dashboard connects and how it authenticates.`,wsUrl:`WebSocket URL`,token:`Gateway Token`,password:`Password (not stored)`,passwordPlaceholder:`system or shared password`,sessionKey:`Default Session Key`,connectHint:`Click Connect to apply connection changes.`,trustedProxy:`Authenticated via trusted proxy.`,showToken:`Show token`,hideToken:`Hide token`,toggleTokenVisibility:`Toggle token visibility`,showPassword:`Show password`,hidePassword:`Hide password`,togglePasswordVisibility:`Toggle password visibility`},snapshot:{title:`Snapshot`,subtitle:`Latest gateway handshake information.`,status:`Status`,tickInterval:`Tick Interval`,lastChannelsRefresh:`Last Channels Refresh`,lastError:`Last error`},help:{title:`How to connect`,step1:`Start the gateway on your host machine:`,step2:`Get a tokenized dashboard URL:`,step3:`Paste the WebSocket URL and token above, or open the tokenized URL directly.`,docsLink:`Read the docs →`,copyCommand:`Copy command`,copyCommandAria:`Copy command: {command}`}},attention:{cronErrorUnknown:`Unknown error`,cronFailed:`{job} failed`,cronOverdue:`{job} overdue`,automationFailed:`Failed · {time}`,automationOverdue:`Overdue · {time}`,failed:`Failed`,overdue:`Overdue`,dismissItem:`Dismiss {item}`,dismissShown:`Dismiss shown`,emptyTitle:`Nothing waiting`,emptyBody:`New requests and alerts land here.`,issues:`Inbox`,issueCount:`{count} inbox item`,issueCountPlural:`{count} inbox items`,tabs:{label:`Inbox categories`,all:`All`,approvals:`Approvals`,mentions:`Mentions`,automations:`Automations`,system:`System`},mentions:{from:`{sender} mentioned you`,open:`Open`,dismiss:`Dismiss`,dismissing:`Dismissing…`,emptyTitle:`No mentions yet`,emptyBody:`When someone mentions you in a chat, it appears here.`,retention:`Mentions are temporary: kept for up to seven days and cleared when the Gateway restarts.`,notifications:`Notification settings`,loading:`Loading mentions…`,unavailable:`Sign in and connect to the Gateway to see your mentions.`,refresh:`Refresh mentions`,error:`Mentions could not be updated. Refresh or try dismissing again.`},modelAuthExpired:`Model auth expired: {providers}`,authExpired:`Auth expired`,modelAuthExpiredState:`Auth expired · {time}`,modelAuthExpiredWithScope:`{scope} · Auth expired · {time}`,reconnect:`Reconnect`,pendingApproval:`{count} pending approval`,pendingApprovals:`{count} pending approvals`,alerts:{updateQuestion:`These are the available update facts:
{facts}
Summarize what is new and whether anything needs my attention before updating.`,cronFailedQuestion:`These automations failed:
{facts}
Explain why they failed and how to fix them.`,cronOverdueFact:`{job}: {duration} late`,cronOverdueQuestion:`These automations are overdue:
{facts}
Explain why they have not run and how to fix them.`,modelAuthExpiredQuestion:`These model-provider credentials need attention:
{facts}
Explain what expired and how to re-authenticate them.`}},standingGrants:{title:`Standing grants`,description:`Allow-always on an automation approval mints a standing grant for that exact command. Revoking one makes the next occurrence ask again.`,historyTitle:`Approval history`,empty:`No standing grants. Answer an automation approval with Always allow to mint one.`,stateUntilRevoked:`Until revoked`,stateExpiresIn:`Expires in {count}d`,stateExpired:`Expired`,stateRevoked:`Revoked`,revoke:`Revoke`,revoking:`Revoking…`,columns:{automation:`Automation`,command:`Command`,uses:`Uses`,state:`State`}},approvalHistory:{description:`Terminal exec, plugin, and system-agent approvals recorded by this gateway, newest first.`,loading:`Loading approval history…`,loadingMore:`Loading…`,loadMore:`Load more`,empty:`No resolved approvals in the rolling 30-day window.`,retention:`Approval history is a rolling 30-day window.`,offline:`Connect to the gateway to load approval history.`,invalidResponse:`The gateway returned an invalid approval history response.`,unknown:`Unknown`,notApplicable:`N/A`,columns:{resolved:`Resolved`,kind:`Kind`,request:`Request`,decision:`Decision`,reason:`Resolution reason`,source:`Source agent / session`,resolver:`Resolver`},kinds:{exec:`Exec`,plugin:`Plugin`,systemAgent:`System agent`},statuses:{allowed:`Allowed`,denied:`Denied`,expired:`Expired`,cancelled:`Cancelled`},decisions:{allowOnce:`Allow once`,allowAlways:`Always allow`,deny:`Deny`},reasons:{user:`User decision`,timeout:`Timed out`,malformedVerdict:`Malformed verdict`,noRoute:`No route`,runAborted:`Run aborted`,gatewayRestart:`Gateway restart`,storageCorrupt:`Storage corrupt`}},palette:{placeholder:`Search chats and commands…`,noResults:`No results`,searchFailed:`Chat search failed — check the gateway logs and retry`,searchPartial:`Transcript search unavailable — showing chat titles and metadata`,searchIncomplete:`Transcript matches may be incomplete — indexing or search limits apply`,categories:{search:`Search`,navigation:`Navigation`,skills:`Skills`},items:{apps:`Apps`,sessions:`Sessions`,scheduled:`Automations`,skills:`Skills`,plugins:`Plugins`,settings:`Settings`,agents:`Agents`,desktop:`Desktop`},descriptions:{verboseMode:`Toggle verbose mode.`},footer:{navigate:`navigate`,select:`select`,close:`close`}},dreaming:{tabs:{scene:`Scene`,diary:`Diary`,advanced:`Advanced`},header:{refresh:`Refresh`,refreshing:`Refreshing…`,on:`Dreaming On`,off:`Dreaming Off`,engineOff:`Memory engine is Off. Choose an engine in Settings to enable dreaming.`},toggleConfirmation:{subtitle:`Dreaming is a global setting; it is not scoped to this agent.`,enableTitle:`Turn On Dreaming for All Agents`,enableDetail:`The nightly dreaming sweep will run across every configured agent workspace, promoting short-term recalls into long-term memory. This applies right away.`,enableConfirm:`Turn On Dreaming`,disableTitle:`Turn Off Dreaming for All Agents`,disableDetail:`The nightly dreaming sweep will stop for every configured agent, not just this one. Memories already written stay; nothing new gets promoted. This applies right away.`,disableConfirm:`Turn Off Dreaming`,saving:`Saving…`,failed:`Could not apply change. Check your connection and try again.`},status:{active:`Dreaming Active`,idle:`Dreaming Idle`,promotedSuffix:`promoted`,nextSweepPrefix:`next sweep`},scene:{backfill:`Backfill`,dedupeDiary:`Dedupe Diary`,reset:`Reset`,clearGrounded:`Clear Replayed`,repairCache:`Repair Dream Cache`,working:`Working…`},phase:{light:`Light`,deep:`Deep`,rem:`Rem`,off:`off`},advanced:{eyebrow:`Review`,title:`Daily Log Review`,description:`Review what came from the daily log, what is waiting for promotion, and what was promoted recently.`,summaryFromDailyLog:`from daily log`,summaryWaiting:`waiting`,summaryPromotedToday:`promoted today`,stagedTitle:`From the Daily Log`,stagedDescription:`Replay candidates pulled from older daily log entries.`,shortTermTitle:`Waiting for Promotion`,shortTermDescription:`Current short-term candidates waiting to graduate into real memory.`,sortRecent:`Most recent`,sortSignals:`Strongest support`,originDailyLog:`replayed`,originLive:`live`,originMixed:`mixed`,promotedTitle:`Recent Promotions`,promotedDescription:`Items that already made it through promotion.`,emptyGrounded:`No staged grounded replay entries right now.`,emptyShortTerm:`No short-term entries to inspect.`,emptyPromoted:`No recent promotions to inspect.`,updatedPrefix:`updated`},stats:{grounded:`Grounded`,signals:`Signals`},diary:{title:`Dream Diary`,noDreamsYet:`No dreams yet`,noDreamsHint:`Dreams will appear here after the first dreaming cycle runs.`,waitingTitle:`The diary is waiting`,waitingHint:`Narrative entries will appear after the next dreaming cycle.`,reload:`Reload`,reloading:`Reloading…`},actions:{dedupeRemovedOneAndKept:`Removed {removed} duplicate dream entry and kept {kept}.`,dedupeRemovedManyAndKept:`Removed {removed} duplicate dream entries and kept {kept}.`,dedupeRemovedOne:`Removed {removed} duplicate dream entry.`,dedupeRemovedMany:`Removed {removed} duplicate dream entries.`,repairArchivedThreadCorpus:`archived session corpus`,repairArchivedIngestionState:`archived ingestion state`,repairArchivedDreamDiary:`archived dream diary`,repairNoChanges:`Dream cache repair finished with no changes.`,repairCompleteWithArchive:`Dream cache repair complete: {actions}. Archive: {archiveDir}`,repairComplete:`Dream cache repair complete: {actions}.`,backfillComplete:`Backfilled {count} dream diary entries.`,resetDiaryComplete:`Removed {count} backfilled dream diary entries.`,clearReplayedComplete:`Cleared {count} replayed short-term entries.`,complete:`Dream diary action complete.`,confirmRepairDescription:`This archives derived dream cache files and rebuilds them from clean inputs. Your dream diary stays untouched.`,confirmDedupeDescription:`This rewrites DREAMS.md and removes only exact duplicate diary entries.`,archivePathCopied:`Archive path copied.`,archivePathCopyFailed:`Could not copy archive path.`,updateFailed:`Could not update dreaming settings.`,unsupportedPlugin:`Selected memory plugin "{pluginId}" does not support dreaming settings.`,configHashMissing:`Config hash missing; refresh and retry.`},wiki:{previewFallbackTitle:`Wiki page`,close:`Close`,loadingPage:`Loading wiki page…`,dreamsTab:`Dreams`,insightsTab:`Imported Insights`,wikiTab:`Memory Wiki`,dreamsExplainer:`This is the raw dream diary the system writes while replaying and consolidating memory; use it to inspect what the memory system is noticing, and where it still looks noisy or thin.`,insightsExplainer:`These are imported insights clustered from external history; use them to review what imports surfaced before any of it graduates into durable memory.`,wikiExplainer:`This is the compiled memory wiki surface the system can search and reason over; use it to inspect actual memory pages, claims, open questions, and contradictions rather than raw imported source chats.`,copyArchivePath:`Copy archive path`,loadingInsights:`Loading imported insights…`,noInsights:`No imported insights yet`,noInsightsHint:`Run a ChatGPT import with apply to surface clustered imported insights here.`,candidateSignals:`Potentially useful signals`,corrections:`Corrections or revisions`,importDetails:`Import details`,startedWith:`Started with:`,endedOn:`Ended on:`,messages:`Messages:`,riskReasons:`Risk reasons:`,labels:`Labels:`,openSourcePage:`Open source page`,loadingWiki:`Loading memory wiki…`,emptyWiki:`Memory wiki is not populated yet`,emptyWikiHint:`Right now the wiki mostly has raw source imports and operational reports. This tab becomes useful once syntheses, entities, or concepts start getting written.`,claims:`Claims`,openQuestions:`Open questions`,contradictions:`Contradictions`,pageDetails:`Page details`,wikiPage:`Wiki page:`,id:`Id:`,openWikiPage:`Open wiki page`,unavailable:`Memory Wiki is not enabled`,unavailablePluginPrefix:`Imported Insights and Memory Wiki are provided by the bundled`,unavailablePluginSuffix:`plugin.`,enablePrefix:`Enable`,enableSuffix:`, then reload this tab.`,openConfig:`Open Config`,howToEnable:`How to enable`,pageTypes:{entity:`entity`,concept:`concept`,source:`source`,synthesis:`synthesis`,report:`report`},pageGroups:{sources:`Sources`,syntheses:`Syntheses`,reports:`Reports`,entities:`Entities`,concepts:`Concepts`},counts:{pageOne:`{count} page`,pages:`{count} pages`,claimRowOne:`{count} claim row`,claimRows:`{count} claim rows`,openQuestionOne:`{count} open question`,openQuestions:`{count} open questions`,contradictionOne:`{count} contradiction`,contradictions:`{count} contradictions`,chats:`{count} chats`,sensitive:`{count} sensitive`,signals:`{count} signals`,messages:`{count} messages`,userMessages:`{count} user`,assistantMessages:`{count} assistant`},pageGroupSummary:`{label} · {count}`,noPagesYet:`No pages yet`,sectionPageSummary:`{label}: {count}`,questionCountOnPages:`{questionCount} on {pageCount}`,risk:{needsReview:`needs review`,low:`low risk`,medium:`medium risk`,high:`high risk`,unknown:`unknown risk`},pageNotFound:`No wiki page found for {lookup}.`,previewTruncated:`Showing the first chunk of this page.`,previewTruncatedWithTotal:`Showing the first chunk of this page ({count} total lines).`,boundedResults:`Showing the newest {returned} of {total} items.`,importedClusterSummary:`Imported chats clustered around {label}.`,withheldDigestOne:`{count} digest was withheld pending review.`,withheldDigests:`{count} digests were withheld pending review.`,details:`Details`,hideDetails:`Hide details`,vault:`Vault`,fullVaultBreakdown:`Full vault breakdown: {breakdown}.`,selectedSection:`Selected section: {summary}.`,latestUpdate:`Latest update {date}.`,noContent:`No wiki content available.`},phrases:{consolidatingMemories:`consolidating memories…`,tidyingKnowledgeGraph:`tidying the knowledge graph…`,replayingConversations:`replaying today's conversations…`,weavingShortTerm:`weaving short-term into long-term…`,defragmentingMemoryLane:`defragmenting memory lane…`,filingLooseThoughts:`filing away loose thoughts…`,connectingDots:`connecting distant dots…`,compostingContext:`composting old context windows…`,alphabetizingSubconscious:`alphabetizing the subconscious…`,promotingHunches:`promoting promising hunches…`,forgettingNoise:`forgetting what doesn't matter…`,dreamingEmbeddings:`dreaming in embeddings…`,reorganizingAttic:`reorganizing the memory attic…`,indexingDay:`softly indexing the day…`,nurturingInsights:`nurturing fledgling insights…`,simmeringIdeas:`simmering half-formed ideas…`,whisperingVectorStore:`whispering to the vector store…`}},modelProviders:{},usage:{common:{emptyValue:`—`,unknown:`unknown`},loading:{title:`Usage Overview`,badge:`Loading`},metrics:{tokens:`Tokens`,cost:`Cost`,session:`session`,sessions:`sessions`},heatmap:{title:`Token Activity`,subtitle:`Daily token intensity for the selected range, up to one year.`,cellTokens:`{tokens} tokens`,less:`Less`,more:`More`},providerUsage:{title:`Provider plans & billing`,subtitle:`Live plan, quota, balance, and budget data reported by configured providers.`,stalled:`Provider usage did not finish loading. Refresh to retry.`,unavailable:`Provider usage is unavailable; the last request failed. Refresh to retry.`,balance:`Balance`,spend:`Usage`,budget:`Budget`,today:`Today`,last7Days:`7 days`,lastDays:`{count} days`,dailyCost:`Daily provider cost`,requests:`{count} requests`,inputTokens:`{count} input`,cacheTokens:`{count} cache`,outputTokens:`{count} output`,topModels:`Top models`,costCategories:`Cost categories`,remaining:`{percent}% left`,resets:`Resets {date}`},presets:{today:`Today`,last7d:`7d`,last30d:`30d`,last90d:`90d`,last1y:`1y`,all:`All`},scope:{instance:`Current instance`,instanceHint:`Show only the active session id for each logical session.`,family:`Historical lineage`,familyHint:`Roll up known rotated transcript-backed session ids.`,familyIncluded:`Historical lineage includes {count} session instances.`},filters:{title:`Filters`,to:`to`,startDate:`Start date`,endDate:`End date`,timeZone:`Time zone`,timeZoneLocal:`Local`,timeZoneUtc:`UTC`,pin:`Pin`,pinned:`Pinned`,selectAll:`Select All`,clear:`Clear`,clearAll:`Clear All`,remove:`Remove filter`,removeDays:`Remove days filter`,removeHours:`Remove hours filter`,removeSession:`Remove session filter`,all:`All`,days:`Days`,hours:`Hours`,session:`Session`,agent:`Agent`,channel:`Channel`,provider:`Provider`,model:`Model`,tool:`Tool`,daysCount:`{count} days`,hoursCount:`{count} hours`,sessionsCount:`{count} sessions`},query:{placeholder:`Filter sessions (e.g. key:agent:main:cron* model:gpt-4o has:errors minTokens:2000)`,apply:`Filter (client-side)`,matching:`{shown} of {total} sessions match`,inRange:`{total} sessions in range`,tip:`Tip: use filters or click bars to refine days.`},export:{label:`Export`,changed:`Session context changed while preparing the export. Refresh usage and try again.`,sessionsCsv:`Sessions CSV`,dailyCsv:`Daily CSV`,json:`JSON`},cacheStatus:{warning:`Usage data may be incomplete. Checking for updated totals automatically.`,paused:`Usage data may be incomplete. Automatic checks paused; select Refresh to check again.`},empty:{title:`Start with a date range`,subtitle:`Load usage data to compare costs, inspect sessions, and drill into timelines without leaving the dashboard.`,hint:`Select a date range and click Refresh to load usage.`,noData:`No data`,featureOverview:`Overview cards`,featureSessions:`Session ranking`,featureTimeline:`Timeline drilldown`},daily:{title:`Daily Usage`,total:`Total`,byType:`By Type`,tokensTitle:`Daily Token Usage`,costTitle:`Daily Cost`,compressedScaleHint:`Square-root scale keeps low-usage days visible.`},costWindows:{title:`Cost Windows`,subtitle:`Calendar windows ending {date}`,selectedRange:`Selected Range`,lastDays:`Last {count} days`,perDay:`/ day`},breakdown:{output:`Output`,input:`Input`,cacheWrite:`Cache Write`,cacheRead:`Cache Read`,total:`Total`,tokensByType:`Tokens by Type`,costByType:`Cost by Type`},overview:{title:`Usage Overview`,messages:`Messages`,messagesHint:`Total user and assistant messages in range.`,messagesAbbrev:`msgs`,user:`user`,assistant:`assistant`,toolCalls:`Tool Calls`,toolCallsHint:`Total tool call count across sessions.`,toolsUsed:`tools used`,errors:`Errors`,errorsHint:`Total message and tool errors in range.`,toolResults:`tool results`,avgTokens:`Avg Tokens / Msg`,avgTokensHint:`Average tokens per message in this range.`,avgCost:`Avg Cost / Msg`,avgCostHint:`Average cost per message when providers report costs.`,avgCostHintMissing:`Average cost per message when providers report costs. Cost data is missing for some or all sessions in this range.`,acrossMessages:`Across {count} messages`,sessions:`Sessions`,sessionsHint:`Distinct sessions in the range.`,sessionsInRange:`of {count} in range`,throughput:`Throughput`,throughputHint:`Throughput shows tokens per minute over active time. Higher is better.`,tokensPerMinute:`tok/min`,perMinute:`/ min`,errorRate:`Error Rate`,errorHint:`Error rate = errors / total messages. Lower is better.`,avgSession:`avg session`,cacheHitRate:`Cache Hit Rate`,cacheHint:`Cache hit rate = cache read / (input + cache read + cache write). Higher is better.`,cached:`cached`,prompt:`prompt`,calls:`calls`,costShare:`{percent}% of cost`,topModels:`Top Models`,topProviders:`Top Providers`,topTools:`Top Tools`,topAgents:`Top Agents`,topChannels:`Top Channels`,peakErrorDays:`Peak Error Days`,peakErrorHours:`Peak Error Hours`,noModelData:`No model data`,noProviderData:`No provider data`,noToolCalls:`No tool calls`,noAgentData:`No agent data`,noChannelData:`No channel data`,noErrorData:`No error data`},sessions:{title:`Sessions`,shown:`{count} shown`,total:`{count} total`,avg:`avg`,all:`All`,recent:`Recently viewed`,recentShort:`Recent`,sort:`Sort`,ascending:`Ascending`,descending:`Descending`,clearSelection:`Clear Selection`,noRecent:`No recent sessions`,noneInRange:`No sessions in range`,more:`+{count} more`,selected:`Selected ({count})`,copy:`Copy`,limitReached:`Showing first 1,000 sessions. Narrow date range for complete results.`},details:{noUsageData:`No usage data for this session.`,duration:`Duration`,modelMix:`Model Mix`,filtered:`(filtered)`,close:`Close session details`,noTimeline:`No timeline data`,loadFailed:`Could not load {detail}: {error}`,noDataInRange:`No data in range`,usageOverTime:`Usage Over Time`,reset:`Reset`,perTurn:`Per Turn`,cumulative:`Cumulative`,turnRange:`Turns {start}–{end} of {total}`,assistantOutputTokens:`Assistant output tokens`,userToolInputTokens:`User + tool input tokens`,tokensWrittenToCache:`Tokens written to cache`,tokensReadFromCache:`Tokens read from cache`,noContextData:`No context data`,systemPromptBreakdown:`System Prompt Breakdown`,collapse:`Collapse`,collapseAll:`Collapse All`,expandAll:`Expand All`,baseContextPerMessage:`Base context per message`,system:`System`,systemShort:`Sys`,skills:`Skills`,tools:`Tools`,files:`Files`,ofInput:`of input`,of:`of`,timelineFiltered:`timeline filtered`,conversation:`Conversation`,noMessages:`No messages`,tool:`Tool`,toolResult:`Tool result`,hasTools:`Has tools`,searchConversation:`Search conversation`,filterByRole:`Filter by role`,filterByTool:`Filter by tool`,you:`You`,noMessagesMatch:`No messages match the filters.`},mosaic:{title:`Activity by Time`,subtitleEmpty:`Estimates require session timestamps.`,subtitle:`Estimated from session spans (first/last activity). Time zone: {zone}.`,noTimelineData:`No timeline data yet.`,dayOfWeek:`Day of Week`,midnight:`Midnight`,fourAm:`4am`,eightAm:`8am`,noon:`Noon`,fourPm:`4pm`,eightPm:`8pm`,legend:`Low → High token density`,sun:`Sun`,mon:`Mon`,tue:`Tue`,wed:`Wed`,thu:`Thu`,fri:`Fri`,sat:`Sat`}},login:{subtitle:`Gateway Dashboard`},chat:{modelAccounts:{label:`Account for this chat`,automatic:`Automatic (new-chat default)`,manage:`Manage saved accounts…`,draftHint:`Applies only to this session. Your new-chat default is unchanged.`},mentions:{menu:`Mention a person`,loading:`Loading people…`,empty:`No eligible people found.`,truncated:`Keep typing to find more people.`,online:`Online`,offline:`Offline`,unavailable:`Could not load people. Try again.`,limit:`You can mention up to 10 people per message.`,selected:`Will notify: {names}`,remove:`Remove mention`,restoreFailed:`Mention selection could not be restored. Edit this message and select its recipients again.`,unsupported:`Human mentions are not available in this mode. Remove the selected mentions or send from a normal chat.`},cloudWorkerFailed:`Runner failed: {error}`,errorDetails:`Error details`,details:`Details`,copyError:`Copy error`,diskSpace:{warningTitle:`Cloud session disk space is low`,criticalTitle:`Cloud session disk space is critically low`,warningBody:`{percent}% used · {free} free. Delete unneeded files or stop the cloud worker before large writes.`,criticalBody:`{percent}% used · {free} free. New writes may fail and stop the agent. Delete unneeded files or stop the cloud worker before large writes.`},sendErrors:{outboxPayloadCopied:`This queued message was copied from another tab. Check the conversation and retry only if it has not arrived.`,outboxPayloadCapacity:`Browser attachment storage is full. Try a smaller batch or send/discard queued messages to free space. No new message was sent; your input is retained.`,outboxPayloadUnavailable:`Browser attachment storage is unavailable. Allow browser storage and close older dashboard tabs before reconnecting and retrying. No new message was sent.`,outboxPayloadMissing:`Queued attachments are missing or unreadable. This may be a stale copy from another tab. Check the conversation, then discard this row and attach the files again if needed. No new message was sent.`,activeLeafChanged:`The session switched branches — review and resend.`},waitingForApproval:`Waiting for approval…`,startupStatus:{preparingWorkspace:`Preparing workspace…`,namingWorktree:`Naming worktree…`,creatingWorktree:`Creating worktree…`,runningSetup:`Running setup…`,provisioningEnvironment:`Provisioning environment…`,preparingContext:`Preparing this turn…`,startingModel:`Waiting for a response…`},archivedSessionDisabled:`This session is archived. Unarchive it to continue the conversation.`,sessionRoute:{chooseTitle:`Choose a session`,multipleMatches:`More than one session matches {shortId}.`,additionalMatches:`Search results remain. Use a longer id prefix.`,notFoundTitle:`Session not found`,notFoundExplanation:`The session may have been removed, or the link may be incorrect.`,goToMain:`Go to main session`,viewSessions:`View sessions`,catalogShareUnavailable:`This shared session route is unavailable.`,catalogShareInvalid:`This {catalog} share URL is invalid.`},commandResults:{startingNewThread:`Starting new session...`,resettingThread:`Resetting session...`,stoppingCurrentRun:`Stopping current run...`,chatHistoryCleared:`Chat history cleared.`,exportingThread:`Exporting session...`,emptyExport:`There are no messages to export yet.`,unknownCommand:"Unknown command: `{command}`",options:`Options: {options}.`,sessionUnavailable:`Session capability is unavailable`,help:{availableCommands:`Available Commands`,agentCommand:`agent`,openMenu:"Type `/` to open the command menu."},compaction:{failed:`Compaction failed.`,failedWithReason:`Compaction failed: {reason}`,tokenSummary:` ({before} -> {after} tokens)`,succeeded:`Context compacted successfully`,skipped:`Compaction skipped.`,skippedWithReason:`Compaction skipped: {reason}`},model:{current:`**Current model:** {model}`,available:`**Available:** {models}`,more:` +{count} more`,getFailed:`Failed to get model info: {error}`,set:`Model set to {model}.`,setFailed:`Failed to set model: {error}`},thinking:{current:`Current thinking level: {level}.`,getFailed:`Failed to get thinking level: {error}`,reset:`Thinking level reset to default.`,resetFailed:`Failed to reset thinking level: {error}`,unrecognized:`Unrecognized thinking level "{level}". Valid levels: {options}.`,unsupported:`Unsupported thinking level "{level}" for this model. Valid levels: {options}.`,set:`Thinking level set to {level}.`,setFailed:`Failed to set thinking level: {error}`},verbose:{current:`Current verbose level: {level}.`,getFailed:`Failed to get verbose level: {error}`,unrecognized:`Unrecognized verbose level "{level}". Valid levels: off, on, full.`,set:`Verbose mode set to {level}.`,setFailed:`Failed to set verbose mode: {error}`},fast:{autoValue:`auto ({seconds} sec)`,on:`on`,off:`off`,sourceSession:` (session)`,sourceAgent:` (default: agent)`,sourceModel:` (default: model)`,sourceDefault:` (default)`,current:`Current fast mode: {value}`,options:`on, off, auto ({seconds} sec), default, status`,getFailed:`Failed to get fast mode: {error}`,reset:`Fast mode reset to default.`,resetFailed:`Failed to reset fast mode: {error}`,unrecognized:`Unrecognized fast mode "{mode}". Valid levels: on, off, auto, default, status.`,setAuto:`Fast mode set to auto.`,enabled:`Fast mode enabled.`,disabled:`Fast mode disabled.`,setFailed:`Failed to set fast mode: {error}`},usage:{noActiveThread:`No active session.`,notAvailable:`n/a`,title:`Session Usage`,inputTokens:`Input: {count} tokens`,outputTokens:`Output: {count} tokens`,totalTokens:`Total: {count} tokens`,context:`Context: {percent} of {total}`,model:`Model: {model}`,failed:`Failed to get usage: {error}`},agents:{none:`No agents configured.`,title:`**Agents** ({count})`,default:`default`,runtime:` · runtime {runtime}`,failed:`Failed to list agents: {error}`},steer:{timeout:`The active run ended before the steer message was accepted.`,failed:`Steer failed before it reached the run; try again.`,usage:"Usage: `/steer <message>`",succeeded:`Steered.`,requestFailed:`Failed to steer: {error}`},redirect:{timeout:`The active run ended before the redirect message was accepted.`,failed:`Redirect failed before it reached the run; try again.`,usage:"Usage: `/redirect <message>`",succeeded:`Redirected.`,requestFailed:`Failed to redirect: {error}`}},sessionSharing:{menu:`Session sharing`,current:`Session visibility: {visibility}`,visibility:`Visibility`,shared:`Shared`,readOnly:`Read-only`,suggest:`Suggest`,draft:`Draft`,publishDraft:`Publish draft`,owner:`Owner`,members:`Members`,selected:`Member`,noPeople:`No paired people found.`,readOnlyNotice:`Only the session owner and members can act in this session.`},sessionSuggestions:{suggest:`Suggest`,suggestMessage:`Suggest message`,attachmentsUnsupported:`Remove attachments before submitting a text suggestion.`,sendNow:`Send {author}'s suggestion now`,queue:`Queue {author}'s suggestion`,edit:`Edit {author}'s suggestion`,dismiss:`Dismiss {author}'s suggestion`,typing:`{name} is typing…`,typingMany:`{names} are typing…`,state:{pending:`Pending`,accepted:`Accepted`,dismissed:`Dismissed`}},sessionHeader:{renameTooltip:`Rename session`,renameAria:`Rename session {title}`,renameInputAria:`Session title`,renameInputPlaceholder:`Session title`,openParent:`Open parent session {title}`,panels:`Panels`,layout:`Layout`,continueInTerminal:{action:`Continue in terminal…`,title:`Continue in terminal`,description:`Copy this command to continue the current session. It is safe to paste in common terminals and shells.`,authNote:`The command contains no credentials. The terminal authenticates independently, and the session's access controls still apply.`,disconnected:`Connect to the Gateway to continue this session in a terminal.`,queryRouted:`Query-routed Gateway URLs cannot create credential-free continuation commands because authentication and stored device scope are not query-aware. Use a manually authenticated CLI target or a queryless configured Gateway URL.`,unavailable:`This session or Gateway address cannot be continued in a terminal.`},workspaceAria:`Workspace actions for {workspace}`,revealFinder:`Reveal in Finder`,revealFileExplorer:`Reveal in File Explorer`,revealFileManager:`Open in file manager`,copyPath:`Copy path`,copyBranch:`Copy branch name`,copied:`Copied`,incognito:`Incognito session`,branches:`Session branches`,branchSwitchUnavailable:`Branch switch is unavailable while the agent is working.`,untitledBranch:`Untitled branch`,oneMessage:`{count} message`,messages:`{count} messages`,activeBranch:`Active branch`,gatewayPicker:{menuLabel:`Gateway: {gateway}`,primaryTag:`primary`,setPrimary:`Set as primary…`,openSettings:`Gateway settings…`,connected:`Connected`,unreachable:`Unreachable`,unknown:`Unknown status`}},board:{faceLabel:`Session face`,chatFace:`Chat`,splitFace:`Split`,dashboardFace:`Dashboard`,dockMenu:`Chat dock: {dock}`,dockLeft:`Dock chat left`,dockRight:`Dock chat right`,dockBottom:`Dock chat bottom`,resizeDock:`Resize chat dock`,enterFullscreen:`Enter fullscreen`,exitFullscreen:`Exit fullscreen`,fullscreenUnavailable:`Fullscreen is unavailable in this browser`,fullscreenFailed:`Could not change fullscreen mode: {error}`,workboardCard:`Workboard card: {title}, {status}`,defaultTab:`Main`,mockPlaceholder:`Board view seam · {tabs} tabs · {widgets} widgets`,mockOverview:`Overview`,mockResearch:`Research`,mockSessionStatus:`Session status`,mockRecentFindings:`Recent findings`,mockSourceMap:`Source map`,resetTitle:`Reset conversation?`,resetDescription:`The conversation context resets. Your dashboard stays.`},catalog:{remoteViewOnly:`This session is on a paired device and is view-only.`,unsupportedViewOnly:`This external session source is view-only.`,sessionMenu:`External session actions`,openInOpenClaw:`Open in OpenClaw`,openInTerminal:`Open in terminal`,terminalUnavailable:`Terminal opening is unavailable for this session.`},taskSuggestions:{eyebrow:`Suggested task · in {repo}`,startWorktree:`Start in a worktree`,startLocal:`Start in current checkout`,startCloud:`Send to cloud · {profile}`,startCloudGeneric:`Send to cloud`,copyPrompt:`Copy prompt`,copyPromptFailed:`Couldn't copy the prompt to the clipboard`,promptCopied:`Copied`,fixInSession:`Fix in this session`,noCloudConfigured:`No cloud environment configured`,showInstructions:`Show instructions`,hideInstructions:`Hide instructions`,previous:`Previous suggested task`,next:`Next suggested task`,moreActions:`More ways to start this task`,starting:`Starting…`,dismiss:`Dismiss {title}`,adminRequired:`Administrator access is required to start suggested tasks.`},pullRequests:{linkLabel:`Pull request #{number}: {title}`,createPr:`Create PR`,createPrLabel:`Create a pull request for {branch}`,publishPr:`Publish PR`,publishing:`Publishing…`,publicationRequested:`Requested`,retryPublication:`Retry publication`,openPublishedPr:`Open PR`,cloudPublicationGuidance:`Start a live agent turn and ask it to publish this cloud workspace after reconciliation.`,dismiss:`Dismiss pull request #{number}`,open:`Open`,draft:`Draft`,merged:`Merged`,closed:`Closed`,checks:`CI`,checksPassing:`CI checks passing`,checksFailing:`CI checks failing`,checksPending:`CI checks running`,ciMonitoring:`CI monitoring`,openChecks:`Open checks on GitHub`,checksPassed:`Passed`,checksFailed:`Failed`,checksRunning:`Running`,checksSkipped:`Skipped`,showMore:`Show {count} more`,rateLimited:`GitHub API rate limit reached. Pull request status may be out of date until the limit resets.`},usageRemaining:`Usage Remaining`,view:{menu:`View`,reasoning:`Reasoning`,toolCalls:`Tool calls`,commentary:`Keep commentary`},sendShortcut:`Send shortcut`,sendShortcutEnter:`Enter`,sendShortcutModifierEnter:`⌘/Ctrl+Enter`,followUpMode:`Follow-ups while the agent is working`,followUpModeQueue:`Queue until the run ends`,followUpModeServer:`Server default ({mode})`,followUpModeLoading:`loading…`,followUpModeSteer:`Steer into the active run`,followUpModeUsingServer:`Using server default ({mode})`,followUpModeOverriding:`Overriding server default ({mode})`,followUpModeReset:`Reset to server default`,catalogOpenTarget:`Open external sessions in`,catalogOpenTargetViewer:`OpenClaw viewer`,catalogOpenTargetTerminal:`Terminal`,catalogOutputTruncated:`[Output truncated]`,onboardingDisabled:`Disabled during setup`,commandPaletteTitle:`Search or jump to… (⌘K)`,openCommandPalette:`Open command palette`,updating:`Updating…`,actions:{copyAsMarkdown:`Copy as markdown`,dismissError:`Dismiss error`,exitFocusMode:`Exit focus mode`,scrollToLatest:`Scroll to latest`},markdown:{truncated:`… truncated ({total} chars, showing first {shown}).`},mermaid:{title:`Mermaid diagram`,options:`Diagram options`,diagram:`Show diagram`,source:`Show source`,copySource:`Copy source`,expand:`Expand diagram`,rendering:`Rendering diagram…`,error:`This diagram could not be rendered. Check the source or simplify the diagram.`,rendererError:`The Mermaid renderer could not load or finish. Reload the dashboard; if this continues, check proxy or authentication rules for its renderer asset URLs.`,imageError:`The diagram image could not be displayed. Reload the dashboard to try again.`},codeBlock:{languageFallback:`Code`,hiddenLine:`1 hidden line`,hiddenLines:`{count} hidden lines`,showHiddenLine:`Show 1 hidden line`,showHiddenLines:`Show {count} hidden lines`,enableWrap:`Enable word wrap`,disableWrap:`Disable word wrap`,jsonBadge:`JSON`,jsonArrayItem:`Array ({count} item)`,jsonArrayItems:`Array ({count} items)`,jsonObjectKeys:`Object ({count} keys)`},workspaceConflict:{titleOne:`1 cloud workspace conflict`,titleMany:`{count} cloud workspace conflicts`,description:`OpenClaw kept your local versions and applied the other cloud changes. Inspect the staged result or take its version for a conflicted path.`,summary:`Local versions kept; inspect or take the cloud version.`,showCommands:`Show commands`,morePaths:`+{count} more paths`,stagedResult:`Staged cloud result`,copyStagedResult:`Copy staged result ref`,inspectCloud:`Inspect the first cloud version`,takeCloud:`Take the first cloud version`,copyInspectCommand:`Copy cloud inspect command`,copyTakeCommand:`Copy take-cloud command`,commandHelp:`Run these in Bash or zsh (Git Bash on Windows). If inspect says the path does not exist, the cloud deleted it; verify and remove the local path manually. If checkout reports a file/directory conflict, move or remove the blocking local path, then retry. If the staged ref is missing, the notice is stale; do not change the local path.`,commandsUnavailable:`This filename contains terminal control characters, so OpenClaw will not build a copyable shell command for it. Inspect the staged ref directly and enter the path manually with care.`,dismiss:`Dismiss workspace conflict notice`,eventSender:`Cloud workspace`,eventTitleOne:`Cloud result applied with 1 conflict`,eventTitleMany:`Cloud result applied with {count} conflicts`,eventDescription:`Local versions were kept for these paths; other cloud changes were applied.`},compaction:{label:`Compacted history`,savedTokens:`saved {count} tokens`,description:`The compacted transcript is preserved as a checkpoint.`,openCheckpoints:`Open checkpoints`},sessionReset:{label:`Session reset`,description:`The earlier conversation was cleared.`},outboxRecoveryTitle:`Saved messages need a destination`,outboxRecoveryDescription:`An older browser version did not preserve every destination. These drafts and queued messages have not been sent by recovery. Open an empty non-Incognito conversation, then restore an entry here for review. Attachment drafts may appear separately.`,outboxRecoveryConfirm:`Confirm this destination for the saved entry. Queued messages will remain paused for review and Retry. If delivery was uncertain, check the conversation before retrying.`,outboxRecoveryRestore:`Restore here for review`,outboxRecoveryConflict:`This destination has a newer draft or queue, or changed during confirmation. Open an empty conversation and try again. The saved entry is still available.`,outboxRecoveryStorageFailed:`Browser storage could not complete recovery. The original saved data has been retained. Free browser storage and reload to try again.`,outboxRecoveryFull:`Recovery is full. Restore saved entries to make room; remaining legacy data is still retained in this browser.`,outboxRecoveryMessages:`Queued messages: {count}`,restartRecoveryTitle:`This session ended during a restart.`,restartRecoveryDisabled:`Its transcript is safe.`,resumeInNewSession:`Resume in new session`,resumingSession:`Resuming…`,systemNotice:{guardian:{approvedSummary:`Guardian approved {action}.`,deniedLabel:`Guardian denied`,deniedSummary:`{action} · risk: {risk}

{rationale}`,warningLabel:`Guardian warning`,warningFallback:`Guardian stopped the requested action.`,strictReviewRequiredLabel:`Guardian review required`,strictReviewRequiredSummary:`Guardian is reviewing this action before it can continue.`,requestedAction:`Requested action`,unknownRisk:`unknown`,noRationale:`No rationale was provided.`},restartRecovery:{label:`System · restart recovery`,summary:`Turn interrupted by a gateway restart — asked the agent to resume and finish the response.`},gatewayRestarted:{label:`System · gateway restarted`},cliHarnessContext:{label:`System · injected context`},showContent:`Show content`},progressLabels:{shelling:`Shelling`,scuttling:`Scuttling`,clawing:`Clawing`,pinching:`Pinching`,molting:`Molting`,bubbling:`Bubbling`,tiding:`Tiding`,reefing:`Reefing`,cracking:`Cracking`,sifting:`Sifting`,brining:`Brining`,nautiling:`Nautiling`,krilling:`Krilling`,barnacling:`Barnacling`,lobstering:`Lobstering`,tidepooling:`Tidepooling`,pearling:`Pearling`,snapping:`Snapping`,surfacing:`Surfacing`},turnRecap:{doneIn:`Done in {duration}`,tokens:`{count} output tokens`,tokensOne:`1 output token`},commands:{arguments:`Command arguments`,menu:`Slash commands`,optionCount:`{count} options`,clearDescription:`Clear chat history`,redirectDescription:`Abort and restart with a new message`,steerDescription:`Inject a message into the active run`,categories:{session:`Session`,model:`Model`,agents:`Agents`,tools:`Tools`}},skills:{menu:`Skill references`,label:`Skills`,loading:`Loading skills…`},splitView:{open:`Open split view`,splitRight:`Split right`,splitDown:`Split down`,closePane:`Close pane`,dropSplit:`Split`,dropOpenHere:`Open here`},sidebar:{updateMacAndGateway:`Update Mac app + Gateway`,updateGateway:`Update Gateway`,serverUpdatedTitle:`Server updated`,serverUpdatedRefresh:`Refresh for full capabilities`,threads:`Sessions`,otherSessions:`Other`,groups:`Groups`,coding:`Coding`,catalogViewOptions:`View options`,hideFromSidebar:`Hide from sidebar`,sectionHidden:`{section} hidden.`,sectionHiddenRecovery:`Show it again in Settings > Appearance > Sidebar.`,hiddenSessionSections:`Hidden session sections`,showSessionSection:`Show`,catalogGroupByProject:`Project`,catalogGroupByPerson:`Person`,openSessionMenu:`Open session menu`,sortBy:`Sort by`,sortCreated:`Created`,sortSessions:`Filter & sort`,sortUpdated:`Last updated`,sessionMenu:`Actions for {session}`,sessionMenuMany:`Actions for {count} sessions`,toolActivity:`Using {tool}`,catalogDiscoveryHelp:`{error}. Configure native session discovery in Settings > Automation > Plugins.`},welcome:{hintBeforeShortcut:`Type a message below ·`,hintAfterShortcut:`for commands`,recentSessions:`Recent chats`,suggestions:{whatCanYouDo:`What can you do?`,summarizeRecentSessions:`Summarize my recent sessions`,configureChannel:`Help me configure a channel`,checkSystemHealth:`Check system health`}},runControls:{newSession:`New session`,newSessionWorktree:`New session in worktree`,exportChat:`Export chat`,queue:`Queue`,queueMessage:`Queue message`,stop:`Stop`,stopWithShortcut:`Stop (Esc)`,stopGenerating:`Stop generating`,send:`Send`,sendMessage:`Send message`},queue:{connectionPending:`Finishing connection recovery. Try sending again when it is ready.`,initialTurnPending:`The initial message is unresolved. Reconnect if needed, then review it before sending another message.`,notSent:`Not sent`,deliveryUnconfirmed:`Delivery unconfirmed`,checkDelivery:`Check delivery`,checkDeliveryHelp:`Delivery is unconfirmed. Check delivery looks for the original message without resending it or starting a worker. Inspect the conversation, or copy the retained prompt if you choose to start a separate attempt.`,retry:`Retry`,retryQueuedMessage:`Retry queued message`,discard:`Discard`,discardPendingMessage:`Discard this local pending copy. This does not cancel a message already received by the Gateway.`,steer:`Steer`,steerQueuedMessage:`Steer queued message`,removeQueuedMessage:`Remove queued message`,reorderQueuedMessage:`Reorder queued message with the arrow keys`,reorderUnavailable:`This message holds its place and cannot be reordered`,editQueuedMessage:`Edit queued message`,moreActions:`More queued message actions`,cancelEdit:`Cancel editing and keep the queued message`,states:{applyingSettings:`Applying chat settings`,blockedByUnconfirmed:`Queue paused. Retry or discard the earlier unconfirmed message in the conversation.`,runningCommand:`Running command`,waitingForReconnect:`Waiting for reconnect`,editing:`Editing`,needsReview:`Delivery uncertain`},imageCount:`Image ({count})`},goals:{composerMode:`Goal`,sessionChanged:`Conversation changed. Cancel and select Goal again.`,start:`Start goal`,save:`Save goal`,startHint:`Enter your objective.`,editHint:`Save without starting a run.`,objectivePlaceholder:`What should this goal accomplish?`,cancel:`Cancel goal entry`,offline:`Reconnect to manage goals.`,busy:`Wait for this run to finish. Your draft is unchanged.`,annotationUnsupported:`Send or remove browser annotations first. Your draft is unchanged.`,actionPending:`Wait for the pending goal action.`,admissionImmutable:`Retry or remove this request. Editing requires a new goal.`,edit:`Edit goal`,editChip:`Edit`,pause:`Pause goal`,pauseChip:`Pause`,resume:`Resume goal`,resumeChip:`Resume`,clear:`Clear goal`,clearChip:`Clear`,showDetails:`Show goal details`,hideDetails:`Hide goal details`},questions:{other:`Type your own answer here`,answer:`Answer`,answerPlaceholder:`{label}`,submit:`Submit`,next:`Next`,back:`Back`,skip:`Skip`,skipping:`Skipping…`,skipped:`Skipped`,collapse:`Collapse question`,expand:`Expand question`,eyebrow:`Question`,summaryLabel:`Question outcome`,ownAnswerFor:`Your own answer for {header}`,storeRequestedBy:`Requested by {agent} · {session}`,storeEntry:`Stores {name} as {kind}`,storeReplacement:`Replaces {name} — last updated {updated}`,storeReplacementBy:`Replaces {name} — last updated {updated} by {updatedBy}`,submitting:`Submitting…`,submitFailed:`Could not submit: {error}`,answered:`Answered`,answeredElsewhere:`Answered elsewhere`,unavailable:`Unavailable`,expired:`Expired`,disconnected:`Not connected. Try again after reconnecting.`},imageLightbox:{label:`Image preview: {title}`,open:`Open image {title}`,openOriginal:`Open in new tab`,copy:`Copy image`,download:`Download image`,copyFailed:`Could not copy this image. Check clipboard access and try again.`,downloadFailed:`Could not download this image. Try again.`,loadFailed:`Could not load this image. Try again.`,zoomIn:`Zoom in`,zoomOut:`Zoom out`,resetZoom:`Reset zoom`,close:`Close image preview`,untitled:`Image`},externalImage:{notLoaded:`External image not loaded`,open:`Open image`},messages:{copySelection:`Copy`,forkFromHere:`Fork from here`,reply:`Reply`,replyToMessage:`Reply to message`,replyingTo:`Replying to {name}`,originalUnavailable:`The original message is unavailable.`,message:`message`,currentMessage:`current message`,actions:`Message actions`,selectionActions:`Selection actions`,askInSideChat:`Ask in side chat`,rewind:`Rewind`,rewindConfirm:`Rewind to before this message?`,dontAskAgain:`Don't ask again`,rewindToHere:`Rewind to here`,rewindUnavailable:`Rewind is unavailable while the agent is working`,forkUnavailable:`Fork is unavailable while the agent is working`,showLess:`Show less`,showMore:`Show more`,tooLargeToDisplay:`This message is too large to display here.`,unknownDate:`Unknown date`,toolSender:`Tool`,forwardedFrom:`From`,forwardedFromAgent:`Forwarded from {agentId}`,forwardedMessage:`Forwarded message`,fullContentLoadExhausted:`Could not load the full message.`,voiceNote:`Voice note`,duplicatesCollapsed:`{count} consecutive identical messages collapsed`,contextFor:`Message context for {timestamp}`},mediaPlayer:{play:`Play`,pause:`Pause`,seek:`Seek media`,mute:`Mute`,unmute:`Unmute`,volume:`Volume`,download:`Download {filename}`,preparing:`Preparing playback…`,openVideo:`Expand {filename} in the media overlay`,videoPreview:`Video preview: {title}`,closeVideoPreview:`Close video preview`},modelControls:{default:`Default`,effort:`Effort`,faster:`Faster`,smarter:`Smarter`,fastMode:`Fast mode`,searchModels:`Search models`,noMatchingModels:`No models match your search`,configureModels:`Configure models`,selectionScopeSessionLabel:`This session`,selectionScopeAgentLabel:`Agent default`,selectionScopeGlobalLabel:`Global default`,selectionScopeSession:`Selecting a model changes only this session.`,selectionScopeAgent:`Selecting a model updates this agent's default.`,selectionScopeGlobal:`Selecting a model updates the global default.`,resetSessionModel:`Reset session model`,useDefaultModel:`Use default ({model}) for this session`,defaultWithModel:`Default ({model})`,defaultWithLevel:`Default ({level})`,fastHelp:`Faster responses, higher usage of limits.`,contextWindow:`Context window`,contextWindowAria:`Context window: {state}`,speedUnsupported:`Speed control is not supported for this model.`,contextActiveAndMax:`{active} active · {maximum} max`,chatOnly:`Chat only`,chatOnlyHelp:`This model can chat, but it cannot use tools. Choose another model for files, commands, web, or media tasks.`,loadingModels:`Loading models…`,modelsUnavailable:`Models unavailable`,noModelsAvailable:`No models available`,emptyModelsAction:`Manage models`,providerModels:`{provider} models`,useDefaultReasoning:`Use default reasoning ({level})`,fastResponsesAria:`Fast responses: {state}`},permissionControls:{label:`Permissions`,help:`Choose permissions for this session.`,default:`Default`,defaultDescription:`Follow the agent's configured policy.`,defaultWithMode:`Default ({mode})`,fullRequiresAdmin:`Full access requires operator.admin access.`,updateFailed:`Failed to update permissions: {error}`,refreshFailed:`Permissions were saved, but refreshing the session failed: {error}`,modes:{"read-only":{label:`Read Only`,description:`Read within the session root; writes and commands are blocked.`},guarded:{label:`Guarded`,description:`A human reviews requests beyond the session root.`},workspace:{label:`Workspace`,description:`An AI reviewer checks requests beyond the session root.`},full:{label:`Full Access`,description:`No reviewer; files and commands are unrestricted.`}}},rail:{title:`Side chat`,subtitle:`Ask about this session or its project`,expand:`Expand side chat`,collapse:`Collapse side chat`,close:`Close side chat`,show:`Show side chat`,clear:`Clear side chat`,pullRequests:`Pull requests`,checksPassing:`{count} passed`,checksFailing:`{count} failed`,checksPending:`{count} running`,finished:`Finished {time}`,empty:`Answers come from this session's transcript and its project files.`,starters:{changed:`What changed?`,stopped:`Why did it stop?`,remaining:`What's left?`},askLabel:`Ask in side chat`,askPlaceholder:`Ask a question`,askSubmit:`Ask`,askPending:`Answering from this session…`,askBusy:`Side chat is already answering a question.`,askHistoryUnavailable:`Couldn't load this session's history.`,askMissing:`This session is no longer available.`,askModelUnavailable:`No utility model is configured for this session.`,askRateLimited:`Side chat reached its question limit. Try again shortly.`,askUnavailable:`Side chat cannot answer right now.`,askRetry:`Retry`,asOf:`as of {time}`,health:{"on-track":`On track`,grinding:`Working`,stuck:`Stuck`,"waiting-on-user":`Waiting on you`,"wrapping-up":`Wrapping up`,done:`Done`,failed:`Failed`}},detailPanel:{close:`Close sidebar`,copyPath:`Copy path`,discard:`Discard`,editFile:`Edit file`,searchInFile:`Search in file`,showInFiles:`Show in Files`,previousMatch:`Previous match`,nextMatch:`Next match`,overwrite:`Overwrite`,viewRawText:`View Raw Text`,renderedMarkdown:`Rendered Markdown`,renderedMarkdownHint:`Sanitized rich-text preview for quick reading.`,noPreviewableMarkdown:`No previewable markdown content.`,noContent:`No content available`,fullContentOversized:`Full content is unavailable because the stored transcript entry is too large to return safely.`,fullContentNotVisible:`Full content is unavailable because this transcript entry does not have a visible WebChat projection.`,fullContentUnavailable:`Full content is no longer available for this transcript entry.`,copyContents:`Copy file contents`,fileChanged:`File changed on disk since it was loaded.`,renderPreview:`Render preview`,imagePreview:`Image preview`,file:`File`,markdownPreview:`Markdown preview`,toolDetails:`Tool details`,reloadFailed:`Failed to reload the latest file.`,overwriteLoadFailed:`Failed to load the latest file before overwriting.`,fullContentLoadFailed:`Failed to load full content: {error}`},sidebarColumns:{close:`Close {panel}`},sidePanel:{label:`Side panel`,addTab:`Add side panel tab`,expand:`Focus`,restore:`Restore split`,swap:`Swap {main} and {side}`,layout:`Layout`,dockLeft:`Move side panel left`,dockRight:`Move side panel right`,dockBottom:`Move side panel below`,conversation:`Chat`,conversationEmpty:`The conversation for this task.`,minimize:`Minimize side panel`,resize:`Resize side panel`,review:`Review`,reviewEmpty:`Open a change, file, image, or tool result to review it here.`,terminal:`Terminal`,terminalEmpty:`Open a shell for this session's workspace.`,browser:`Browser`,browserEmpty:`A shared browser for you and the agent.`,files:`Files`,filesEmpty:`Browse files, artifacts, and changes from this session.`,companion:`Side chat`,companionEmpty:`Ask a focused question about this session.`,tasks:`Tasks`,tasksEmpty:`Follow active and recently completed background tasks.`,desktop:`Desktop`,desktopEmpty:`Connect to an available remote desktop.`,discussion:`Discussion`,discussionEmpty:`Open the shared discussion for this session.`,dashboard:`Dashboard`,dashboardEmpty:`This task does not have a dashboard yet.`},thread:{search:`Search messages`,searchPlaceholder:`Search messages...`,closeSearch:`Close search`,loading:`Loading chat`,showEarlier:`Show earlier`,loadingEarlier:`Loading earlier history…`,noMatches:`No matching messages`},pendingInputs:{cancelled:`Cancelled before the agent started it. It will not run automatically; copy it and send again.`,interrupted:`Interrupted before the agent started it. It will not run automatically; copy it and send again.`,earlier:`Show earlier messages`,latest:`Show latest messages`},pairingQrExpired:{title:`Pairing QR expired`,reason:`Run /pair qr again to generate a fresh setup code.`,badge:`Expired`},composer:{composerInput:`Chat composer`,placeholder:`Message {name}`,emptyHint:`Write a message to send.`,placeholderWithAttachments:`Add a message or paste more images...`,offlineHint:`Offline — messages will be queued and sent when the connection returns.`,offlineQueuedHint:`Offline — {count} queued; messages send when the connection returns.`,preparingModel:`Preparing model...`,responding:`{name} is responding...`,sendingMessage:`Sending message...`,working:`{name} is working...`,runDone:`Done`,runInterrupted:`Interrupted`,runStatus:`Run status: {status}`,compactingContext:`Compacting context...`,contextCompacted:`Context compacted`,fallbackActive:`Fallback active: {model}`,fallbackCleared:`Fallback cleared: {model}`,fallbackSelected:`Selected: {model}`,fallbackCurrent:`Active: {model}`,fallbackPrevious:`Previous fallback: {model}`,fallbackReason:`Reason: {reason}`,fallbackAttempts:`Attempts: {attempts}`,cancelReply:`Cancel reply`,attachmentPreview:`Attachment preview`,browserAnnotation:`Browser annotation`,browserAnnotationPreview:`Browser annotation preview`,browserAnnotationRegion:`{count} marked region`,browserAnnotationRegions:`{count} marked regions`,browserAnnotationInspectedElement:`Element inspected`,browserAnnotationRemoved:`Browser annotation removed.`,browserAnnotationUndoUnavailable:`Undo is unavailable because the browser annotation limit has been reached.`,removeAttachment:`Remove attachment`,removeBrowserAnnotation:`Remove browser annotation: {name}`,addAttachment:`Add attachment`,attachPhoto:`Photo`,attachFileOption:`File`,menu:{back:`Back`,skills:`Skills`,connectors:`Connectors`,webSearch:`Web search`,managePlugins:`Manage plugins`,manageSkills:`Manage skills`,browseConnectors:`Browse connectors`,addMcpServer:`Add MCP server…`,addMcpServerTitle:`Add MCP server`,addMcpServerDescription:`Configure the server and choose where it is enabled.`,scopeLabel:`Availability`,scopeSession:`This session`,scopeEverywhere:`Everywhere`,scopeSessionHint:`The server is saved globally disabled and enabled only for this session.`,scopeEverywhereHint:`The server is saved and enabled for every session.`,toolAccess:{label:`Tool access`,loading:`Loading tools…`,loadFailed:`Couldn’t load tools.`,noTools:`No tools available for this connector.`,summary:`{enabled} of {total} tools on`,summaryOne:`{enabled} of {total} tool on`},enabledCount:`{count} on`,loadingSkills:`Loading skills…`,skillsLoadFailed:`Couldn’t load skills.`,noSkills:`No skills available.`,noConnectors:`No MCP servers configured.`,depsMissing:`deps missing`,skillBlocked:`not available for this agent`,sessionTag:`session`,offlineBlocked:`Connect to the gateway to change session capabilities.`,adminBlocked:`Admin access is required to manage connectors.`,savingBlocked:`Wait for the current session capability change to finish.`},overrides:{count:`{count} overrides`,countOne:`{count} override`,clear:`Clear session overrides`},contextUsage:{title:`Context usage details`,open:`Open context usage details`,summary:`Session context usage: {used} of {limit} ({pct}%)`,contextWindow:`Context window`,latestRunTokens:`Latest run tokens`,estimatedCost:`Est. cost`,planUsage:`Plan usage`,openUsage:`Open usage dashboard`,resets:`Resets {time}`,usageCredits:`Usage credits`,budgetValue:`{used} of {limit}`,limitFiveHour:`5-hour limit`,limitWeekly:`Weekly`,limitDaily:`Daily limit`,limitHours:`{hours}-hour limit`},takePhoto:`Take photo`,cameraAccessFailed:`Unable to access the camera.`,cameraBusy:`The camera is busy or unavailable to the browser.`,cameraFallback:`Camera {number}`,cameraInput:`Camera`,cameraListUnsupported:`This browser cannot list cameras.`,cameraNoneFound:`No camera was found.`,cameraPageInactive:`Cameras are unavailable while this page is inactive.`,cameraPermissionBlocked:`Camera access is blocked. Allow camera access in browser site settings.`,cameraPreview:`Camera preview`,dismissVoiceInputError:`Dismiss voice input error`,microphoneAccessFailed:`Unable to access microphone inputs.`,microphoneAccessPending:`Waiting for microphone access. Bring this tab to the foreground and allow access if prompted.`,microphoneBusy:`Microphone inputs are busy or unavailable to the browser.`,microphoneStopped:`Microphone input stopped. Choose an available input and start again.`,microphoneFallback:`Microphone {number}`,microphoneInput:`Microphone input`,microphoneAppliesNextSession:`Changes apply when you start your next Talk session.`,microphoneListUnsupported:`This browser cannot list microphone inputs.`,noCameras:`No additional cameras found`,noMicrophones:`No additional microphones found`,microphoneNoneFound:`No microphone found. Plug one in and it appears here.`,microphonePageInactive:`Microphone inputs are unavailable while this page is inactive.`,microphonePermissionBlocked:`Microphone access is blocked. Allow it in browser site settings to list inputs.`,realtimeTalkCapability:`Tap to talk`,dictationCapability:`Dictation`,realtimeTalkProviderUnavailable:`No realtime voice provider is configured.`,dictationProviderUnavailableShort:`No transcription provider is configured.`,talkCapabilityChecking:`Checking provider availability…`,talkCapabilityUnknown:`Provider availability could not be verified.`,openRealtimeTalkSettings:`Talk settings`,openDictationSettings:`Transcription setup`,configureCapability:`Configure`,holdToRecordSetting:`Hold microphone button to start dictation`,holdToDictate:`Hold to start dictation`,holdToRecordSettingDescription:`Hold until dictation starts, then release and keep speaking. Tap Stop to insert the transcript.`,dictationAudioUnsupported:`The Gateway returned an unsupported dictation audio format.`,dictationBrowserAudioUnsupported:`This browser cannot capture dictation audio at 8 kHz.`,dictationDisconnected:`Dictation stopped because the Gateway disconnected.`,dictationFailed:`Dictation failed.`,dictationInterruptedRecovery:`Captured text was inserted. Check your connection and try again.`,dictationStartRecovery:`Check microphone access and transcription settings, then try again.`,dictationFinalizing:`Finishing dictation…`,dictationListening:`Listening…`,dictationStopAndKeep:`Stop and keep text`,dictationProviderUnavailable:`No transcription provider is configured for dictation. Choose one in Settings to dictate.`,realtimeTalkCancellationRejected:`Realtime output cancellation was not accepted.`,realtimeTalkMissingTurnIdentity:`Realtime output is missing its turn identity.`,realtimeTalkRequiresMicrophone:`Realtime voice input requires browser microphone access.`,selectedMicrophoneUnavailable:`The selected microphone is unavailable. Choose another input or System default.`,selectedCameraUnavailable:`The selected camera is unavailable. Choose another camera or System default.`,startVoiceInput:`Start voice input`,voiceGestureHint:`Tap to talk · Hold to start dictation`,stillListening:`Still listening`,stopVoiceInput:`Stop voice input`,systemDefaultMicrophone:`System default`,useSystemDefaultMicrophoneForCall:`Use System default for this call`,systemDefaultCamera:`System default`,switchCamera:`Switch camera`,turnCameraOff:`Turn camera off`,turnCameraOn:`Turn camera on`,voiceTranscript:`Voice transcript`},attachments:{allowImage:`Allow image`,attachedFile:`Attached file`,audio:`Audio`,expand:`Open {filename} in the side panel`,open:`Open`,previewUnavailable:`Preview unavailable`,readFailed:`Could not attach: {names}{more}`,tooLarge:`Too large to send: {names}{more}`,showInTextField:`Show in text field`,outsideAllowedFolders:`Outside allowed folders`,unavailable:`Unavailable`,failureDeliveryFailed:`Delivery failed. Try sending this file again.`,failureFileNotFound:`File not found. Check the path and try again.`,failureUnsupportedFormat:`Rejected by the local attachment allowlist. Send a supported file type.`,history:`History`,image:`Image`,notSent:`Not sent`,omittedFromHistory:`Omitted from history`,omittedFromHistoryWithSize:`Omitted from history · {size}`,video:`Video`},voice:{asking:`Asking OpenClaw...`,preparing:`Preparing voice session...`,connecting:`Connecting voice input...`,listening:`Listening...`},selectors:{loadMoreSessions:`Show more`,loadMoreRosterSessions:`Load more sessions`,model:`Chat model`,modelSection:`Model`,modelLocked:`Locked`,modelLockedLabel:`Model selection controlled for this session`,lockedSessionModel:`Session model`,thinkingLevel:`Chat thinking level`},toolCards:{tool:`Tool`,canvas:`Canvas`,summary:`Summary`,toolInput:`Tool input`,toolOutput:`Tool output`,toolError:`Tool error`,rawDetails:`Raw details`,showRawDetails:`Show raw details`,hideRawDetails:`Hide raw details`,viewMode:`Tool detail view`,diff:`Diff`,raw:`Raw`,openFile:`Open file`,openDetails:`Open tool details in side panel`,widgetActions:`Widget actions`,copyToClipboard:`Copy to clipboard`,downloadFile:`Download file`,copyAsImage:`Copy as image`,downloadAsImage:`Download as image`,widgetExportRerender:`This widget needs to be re-rendered to export as an image.`,widgetExportHtmlFallback:`Image unavailable. Downloaded the widget as HTML instead.`,widgetExportFailed:`Widget export failed. Try again.`,pinToDashboard:`Pin to dashboard`,pinToDashboardPending:`Pinning…`,pinToDashboardFailed:`Could not pin to dashboard. Try again.`,pinnedToDashboard:`Pinned`,fileChanges:`File changes`,attemptedChanges:`Attempted changes`,failed:`failed`,running:`Running`,completed:`Completed`,exitCode:`Exit code {code}`,noOutputFailed:`No output — tool failed.`,noOutputSucceeded:`No output — tool completed successfully.`,noResult:`No result available.`,review:{reviewing:`{reviewer} reviewing`,approved:`{reviewer} approved`,denied:`{reviewer} denied`,timedOut:`{reviewer} timed out`,aborted:`{reviewer} stopped`,risk:`{level} risk`,authorization:`{level} authorization`,noRationale:`No rationale was provided.`},verbs:{read:`Read`,edit:`Edit`,editing:`Editing`,edited:`Edited`,create:`Create`,creating:`Creating`,created:`Created`,delete:`Delete`,deleting:`Deleting`,deleted:`Deleted`,change:`Change`,changing:`Changing`,changed:`Changed`,write:`Write`,writing:`Writing`,wrote:`Wrote`,searched:`Searched`,fetched:`Fetched`},group:{commandsOne:`ran a command`,commandsMany:`ran {count} commands`,readsOne:`read a file`,readsMany:`read {count} files`,editsOne:`edited a file`,editsMany:`edited {count} files`,writesOne:`created a file`,writesMany:`created {count} files`,deletesOne:`deleted a file`,deletesMany:`deleted {count} files`,searchesOne:`ran a search`,searchesMany:`ran {count} searches`,fetchesOne:`fetched a page`,fetchesMany:`fetched {count} pages`,namedTool:`used {names}`,namedToolRepeated:`used {names} ×{count}`,otherOne:`used a tool`,otherMany:`used {count} tools`,emptyOne:`Ran a tool call`,emptyMany:`Ran {count} tool calls`}},workRun:{workedFor:`Worked for {duration}`,worked:`Worked`},backgroundTasks:{label:`Background tasks`,title:`Background tasks`,show:`Show background tasks`,collapse:`Collapse background tasks`,refresh:`Refresh background tasks`,loading:`Loading background tasks…`,running:`Running ({count})`,finished:`Finished ({count})`,statusRunningOne:`1 running task`,statusRunningMany:`{count} running tasks`,statusPreviewMore:`+{count} more`,stopTask:`Stop {title}`,toolUseOne:`1 tool use`,toolUseMany:`{count} tool uses`,detailLoading:`Loading task details…`,detailFailed:`Could not load task details.`,detailRetry:`Try again`,transcriptLoading:`Loading task transcript…`,transcriptEmpty:`No transcript messages yet.`,transcriptFailed:`Could not load task transcript.`,taskDetailTitle:`Task details`,taskUnavailable:`This task is no longer available.`,prompt:`Prompt`,output:`Output`,promptUnavailable:`Prompt unavailable.`,outputPending:`No output yet.`,subagentActivity:{label:`Subagent activity`,working:`Subagent working`,finished:`Subagent finished`,failed:`Subagent failed`,cancelled:`Subagent cancelled`,openDetails:`Open subagent details for {title}`,moreWorking:`+{count} more working`}},sessionDiff:{title:`Changes`,show:`Show session changes`,refresh:`Refresh changes`,loading:`Loading changes…`,empty:`No changes in this session's checkout.`,notGit:`This session's workspace is not a git checkout.`,unknownSession:`No workspace is associated with this session.`,unknownCommit:`This commit is no longer available in the session checkout.`,disconnected:`Gateway is disconnected.`,allChanges:`All Changes`,uncommitted:`Uncommitted`,commitsAhead:`{count} commits ahead of {base}`,head:`HEAD`,mergeBase:`Merge Base`,scopeMenu:`Choose change scope`,sync:`Sync`,syncLocally:`Sync Locally`,syncDescription:`Run this command in a local checkout to mirror this session's committed changes.`,copyCommand:`Copy sync command`,checkoutPath:`Checkout path`,branchName:`Branch name`,uncommittedStay:`Uncommitted changes stay in the session checkout.`,viewOptions:`Change view options`,collapseAll:`Collapse All`,expandAll:`Expand All`,enableWrapping:`Enable Wrapping`,disableWrapping:`Disable Wrapping`,switchSplit:`Switch to Split Diff`,switchUnified:`Switch to Unified Diff`,fileActions:`Actions for {path}`,copyPath:`Copy Path`,openFile:`Open File`,openInEditor:`Open in Editor`,revealInFileTree:`Reveal in File Tree`,unmodifiedLines:`{count} unmodified lines`,expandPreviousLines:`Show previous {count} unmodified lines`,expandNextLines:`Show next {count} unmodified lines`,expandAllLines:`Show all {count} unmodified lines`,binaryFile:`Binary file`,untracked:`untracked`,tooLarge:`Diff too large to display.`,truncatedFile:`Diff truncated.`,truncatedResult:`Some changes were omitted because the diff is very large.`,statusAdded:`Added`,statusDeleted:`Deleted`,statusRenamed:`Renamed`,statusModified:`Modified`},sessionDiscussion:{show:`Show discussion`,hide:`Hide discussion`,disconnected:`Gateway is disconnected.`,loading:`Loading discussion…`,opening:`Opening discussion…`,requiresWriteAccess:`Operator write access is required to open this discussion.`,openExternal:`Open discussion in a new tab`,frameTitle:`Session discussion`,unavailable:`This discussion cannot be embedded.`},workspaceFiles:{label:`Session workspace`,collapse:`Collapse session workspace`,showFiles:`Show session files`,dockRight:`Dock to the right`,dockBottom:`Dock to the bottom`,workspace:`Session`,files:`Workspace`,refresh:`Refresh session workspace`,loading:`Loading session workspace…`,changed:`Changed`,read:`Read`,artifacts:`Artifacts`,browser:`Project files`,root:`Root`,search:`Search files`,searchResults:`Search results`,parentFolder:`Parent folder`,noBrowserFiles:`No files in this folder.`,noSearchResults:`No matching files.`,truncated:`Showing the first matching files. Refine the search to narrow results.`,session:`Session`,missing:`Missing`,summary:`Session workspace summary`,changedCount:`{count} changed`,readCount:`{count} read`,artifactCount:`{count} artifacts`,browserCount:`{count} shown`,actions:`Workspace file actions`,preview:`Preview`,copyPath:`Copy path`}},languages:{en:`English`,zhCN:`简体中文 (Simplified Chinese)`,zhTW:`繁體中文 (Traditional Chinese)`,ptBR:`Português (Brazilian Portuguese)`,de:`Deutsch (German)`,es:`Español (Spanish)`,jaJP:`日本語 (Japanese)`,ko:`한국어 (Korean)`,fr:`Français (French)`,hi:`हिन्दी (Hindi)`,ar:`العربية (Arabic)`,it:`Italiano (Italian)`,tr:`Türkçe (Turkish)`,uk:`Українська (Ukrainian)`,id:`Bahasa Indonesia (Indonesian)`,pl:`Polski (Polish)`,th:`ไทย (Thai)`,vi:`Tiếng Việt (Vietnamese)`,nl:`Nederlands (Dutch)`,fa:`فارسی (Persian)`,ru:`Русский (Russian)`},secretsStore:{name:`Name`,access:`Access`,accessMode:`Access mode`,value:`Value`,allowedHosts:`Allowed hosts`,allowedHostsPlaceholder:`api.example.com`,allowedHostsHint:`Exact hostnames only, one per line or comma-separated. No wildcards or ports.`,noAllowedHosts:`None`,updated:`Last updated`,by:`{time} by {name}`,actions:`Actions`,add:`Add`,edit:`Edit`,bulk:`Bulk Add`,protectedSecret:`Protected secret`,protectedSecretHint:`Hidden after save and inert unless referenced by a SecretRef or used through enabled destination-bound Gateway egress. It is never directly readable.`,agentReadable:`Agent-readable environment`,agentReadableHint:`High risk: visible to admins and plaintext to Gateway-hosted agent commands. The agent can print, transmit, or persist it. Applies from the next run.`,hint:`Choose protected, write-only secrets or intentionally agent-readable Gateway environment values.`,required:`Enter a value.`,detect:`Protect credential-like names automatically`,detected:`{count} protected secrets detected`,detectedOne:`{count} protected secret detected`,unavail:`Gateway/admin required.`,badName:`Use SERVICE_API_KEY.`,tooLarge:`Max 64 KiB.`,savedProtected:`Saved {name} as Protected secret. Add a SecretRef or enable destination-bound Gateway egress to use it.`,savedReadable:`Saved {name} as Agent-readable environment. It is available to Gateway-hosted agent commands from the next run.`,savedMany:`Saved {count} entries ({protected} protected, {readable} agent-readable). Protected secrets need a SecretRef or enabled destination-bound Gateway egress; agent-readable environment values reach Gateway-hosted agent commands from the next run.`,warnings:`{count} runtime warnings.`,partial:`{saved}/{total}: {error}`,confirmDelete:`Delete {name}?`,deleted:`Deleted {name}.`,deleteFailed:`The secret was not deleted. Reload the list and try again.`},cron:{adminRequired:`Browsing only. Automation changes require operator.admin access.`,tabs:{filterLabel:`Automation status`,all:`All`,active:`Active`,paused:`Paused`},list:{viewLabel:`Automation views`,searchPlaceholder:`Search automations`,newTask:`New automation`,filters:`Filters`,shownOf:`{shown} of {total}`,emptyTitle:`No automations yet`,emptyHint:`Describe what OpenClaw should do and when — it runs on schedule.`,noMatching:`No automations match the current filters.`,loadMore:`Load more`,loading:`Loading...`,schedulerOff:`Scheduler disabled`,refresh:`Refresh`,refreshing:`Refreshing...`,paused:`Paused`,autoDisabledRunFailures:`Auto-disabled · {count} run failures`,autoDisabledScheduleErrors:`Auto-disabled · {count} schedule errors`,tasksTab:`Automations`,activityTab:`Run history`},suggestions:{title:`Starter automations`,schedules:{weekdayMornings:`Weekdays at 9:00 AM`,everyMorning:`Daily at 8:00 AM`,weekly:`Mondays at 9:00 AM`,hourly:`Every hour`},ideas:{repoPulse:{name:`Repo pulse`,tagline:`Overnight issues, PRs, and CI failures, ranked by urgency.`,prompt:`Review overnight activity in my repositories: new issues, pull requests, and CI failures. Summarize the three things that most need my attention today, each with a link and a one-line reason.`},standupGhostwriter:{name:`Standup ghostwriter`,tagline:`Your standup update, drafted from yesterday's work.`,prompt:`Draft my standup update from yesterday's commits, merged pull requests, and open review threads. Three bullets max: done, doing, blocked.`},hackerNewsScout:{name:`Hacker News scout`,tagline:`Three links worth your coffee, with hot takes.`,prompt:`Scan today's Hacker News front page for posts about AI agents, developer tooling, and TypeScript. Send me the three most interesting links, each with a one-line hot take.`},dependencyRadar:{name:`Dependency radar`,tagline:`Outdated or vulnerable dependencies, with upgrade notes.`,prompt:`Check my main project for outdated or vulnerable dependencies. List the notable updates with a one-line risk note each, and draft the upgrade command.`},watchdog:{name:`Night watch`,tagline:`Hourly health check with a one-line verdict.`,prompt:`Check that my services and gateway are healthy: scan recent logs for new errors, restarts, or unusual load. Reply with a single short all-clear line when everything is fine; if something looks broken, report what failed and where to start looking.`},polyglotMinute:{name:`Polyglot minute`,tagline:`One useful foreign phrase with your morning coffee.`,prompt:`Teach me one useful phrase in Japanese: the phrase, how to pronounce it, its literal meaning, and when to use it. Keep it under five lines.`}}},stats:{tasks:`Automations`,failing:`Failing`,nextWake:`Next wake`},detail:{tabsLabel:`Automation details`,newTitle:`New automation`,newSubtitle:`Describe what OpenClaw should do, then pick when it runs.`,back:`All automations`,settingsTab:`Settings`,historyTitle:`Run history`,generalSection:`General`,scheduleSection:`Schedule`,deliverySection:`Delivery`,active:`Active`,paused:`Paused`},actions:{runNow:`Run now`,runNowJob:`Run now: {name}`,runIfDue:`Run if due`,pauseJob:`Pause: {name}`,resumeJob:`Resume: {name}`,clone:`Clone`,remove:`Remove`,removeConfirmTitle:`Remove "{name}"?`,removeConfirmMessage:`This permanently deletes the automation and stops all future runs. This action cannot be undone.`,moreJob:`More actions for {name}`},runNotStarted:{notDue:`This automation is not due yet.`,alreadyRunning:`This automation is already running.`,recoveryPending:`Scheduler recovery is still in progress.`,invalidSpec:`This automation has an invalid schedule or payload.`,stopped:`The scheduler is stopped.`,unknown:`This automation could not be started.`},jobs:{schedule:`Schedule`,lastRun:`Last run`,all:`All`,condition:`Condition`,conditional:`Conditional`,unconditional:`Unconditional`,sort:`Sort`,nextRun:`Next run`,recentlyUpdated:`Recently updated`,name:`Name`,direction:`Direction`,ascending:`Ascending`,descending:`Descending`,reset:`Reset`},runs:{searchRuns:`Search runs`,searchPlaceholder:`Summary, error, or task`,newestFirst:`Newest first`,oldestFirst:`Oldest first`,status:`Status`,delivery:`Delivery`,clear:`Clear`,allStatuses:`All statuses`,allDelivery:`All delivery`,noMatching:`No matching runs.`,emptyTitle:`No runs yet`,emptyHint:`Runs show up here once an automation fires.`,conditionActivity:`Condition activity`,conditionActivityHint:`Checks run on schedule before the payload starts.`,checks:`Checks`,lastChecked:`Last checked`,lastFired:`Last fired`,notChecked:`Not checked yet`,neverFired:`Never`,emptyConditionTitle:`No payload runs yet`,emptyConditionHint:`The condition has been checked {count} times without matching. Run history starts when the payload executes.`,emptyConditionHintOne:`The condition has been checked once without matching. Run history starts when the payload executes.`,emptyConditionUnchecked:`The condition has not been checked yet. Run history starts when the payload executes.`,loadMore:`Load more runs`,runStatusOk:`OK`,runStatusError:`Error`,runStatusSkipped:`Skipped`,runStatusUnknown:`Unknown`,runStatusRunning:`Running`,deliveryDelivered:`Delivered`,deliveryNotDelivered:`Not delivered`,deliveryUnknown:`Unknown`,deliveryNotRequested:`Not requested`},form:{requiredSr:`required`,fieldName:`Name`,description:`Description`,agentId:`Agent`,namePlaceholder:`Morning brief`,descriptionPlaceholder:`Optional context for this task`,agentPlaceholder:`main or ops`,agentHelp:`Start typing to pick a known agent, or enter a custom one.`,promptPlaceholder:`Describe what OpenClaw should do...`,repeat:`Repeat`,repeatInterval:`Interval`,repeatOnce:`Once`,repeatOnExit:`On exit`,repeatStream:`Stream source`,onExitHelp:`Runs when a watched command exits. The schedule cannot be edited here.`,every:`Every`,at:`At`,cronOption:`Cron`,runAt:`Run at`,unit:`Unit`,minutes:`Minutes`,hours:`Hours`,days:`Days`,expression:`Expression`,expressionPlaceholder:`0 7 * * *`,everyAmountPlaceholder:`30`,summaryEverySecondOne:`Runs every second`,summaryEveryMinuteOne:`Runs every minute`,summaryEveryHourOne:`Runs every hour`,summaryEveryDayOne:`Runs every day`,summaryEverySeconds:`Runs every {amount} seconds`,summaryEveryMinutes:`Runs every {amount} minutes`,summaryEveryHours:`Runs every {amount} hours`,summaryEveryDays:`Runs every {amount} days`,summaryOnce:`Runs once at {at}`,summaryCron:`Cron schedule {expr}`,summaryCronTz:`Cron schedule {expr} ({tz})`,timezoneOptional:`Timezone`,timezonePlaceholder:`America/Los_Angeles`,timezoneHelp:`Optional. Leave blank to use the Gateway host timezone, or enter any valid IANA timezone.`,runsIn:`Runs in`,mainSession:`Main session`,isolatedSession:`Isolated session`,sessionHelp:`Main posts into the agent's timeline. Isolated runs a dedicated agent turn.`,wakeMode:`Wake mode`,now:`Now`,nextHeartbeat:`Next heartbeat`,wakeModeHelp:`Now triggers immediately. Next heartbeat waits for the next cycle.`,action:`Action`,command:`Command`,script:`Script`,readOnlyPayloadHelp:`This payload was created outside Control UI. Its contents stay read-only and are preserved when you save other changes.`,systemEvent:`Post to main timeline`,agentTurn:`Run agent task`,systemEventHelp:`Sends your text to the gateway main timeline (good for reminders).`,agentTurnHelp:`Starts an agent run in its own session using your prompt.`,timeoutSeconds:`Timeout (seconds)`,timeoutPlaceholder:`Optional, e.g. 90`,timeoutHelp:`Optional. Leave blank to use the gateway default timeout for this run.`,mainTimelineMessage:`Main timeline message`,assistantTaskPrompt:`Prompt`,deliveryModeLabel:`Mode`,announceDefault:`Announce summary`,webhookPost:`Webhook POST`,noneInternal:`None (internal)`,deliveryHelp:`Announce posts a summary to chat. None keeps execution internal.`,webhookUrl:`Webhook URL`,channel:`Channel`,webhookPlaceholder:`https://example.com/cron`,channelHelp:`Choose which connected channel receives the summary.`,webhookHelp:`Send run summaries to a webhook endpoint.`,to:`To`,toPlaceholder:`+1555... or chat id`,toHelp:`Optional recipient override (chat id, phone, or user id).`,advanced:`Advanced`,advancedHelp:`Optional condition checks, delivery guarantees, schedule jitter, and model controls.`,conditionTrigger:`Condition trigger`,conditionTriggerHelp:`Run a quiet headless check before the task and call the model only when it matches.`,triggerConfigured:`Trigger configured`,triggerScript:`Trigger script`,triggerScriptHelp:`Runs unattended with this automation's tool policy. Return json({ fire, message?, state? }); limits: 30 seconds, 5 tool calls, 16 KB state.`,triggerOnce:`Disable after first match`,triggerOnceHelp:`Disable this automation after the first successful fired task.`,triggerDisabled:`Condition triggers are disabled by cron.triggers.enabled.`,triggerDisabledConfigured:`Condition triggers are disabled. Existing configuration is preserved until you clear it.`,clearTrigger:`Clear trigger`,startEnabled:`Start enabled`,deleteAfterRun:`Delete after run`,deleteAfterRunHelp:`Best for one-shot reminders that should auto-clean up.`,clearAgentOverride:`Clear agent override`,clearAgentHelp:`Force this task to use the gateway default agent.`,sessionKey:`Session key`,sessionKeyHelp:`Optional routing key for job delivery and wake routing.`,exactTiming:`Exact timing (no stagger)`,exactTimingHelp:`Run on exact cron boundaries with no spread.`,staggerWindow:`Stagger window`,staggerUnit:`Stagger unit`,staggerPlaceholder:`30`,seconds:`Seconds`,accountId:`Account ID`,accountIdHelp:`Optional channel account ID for multi-account setups.`,lightContext:`Light context`,lightContextHelp:`Use lightweight bootstrap context for this agent job.`,model:`Model`,customModel:`Custom model…`,modelPlaceholder:`openai/gpt-5.2`,modelHelp:`Start typing to pick a known model, or enter a custom one. Routine jobs (summaries, triage, classification) run well on a lighter model — cheaper and faster than your default.`,thinking:`Reasoning`,thinkingPlaceholder:`low`,thinkingHelp:`Use a suggested level or enter a provider-specific value.`,failureAlerts:`Failure alerts`,failureAlertInherit:`Inherit global setting`,failureAlertDisabled:`Disable for this job`,failureAlertCustom:`Custom per-job settings`,failureAlertsHelp:`Control when this job sends repeated-failure alerts.`,failureAlertAfter:`Alert after`,failureAlertAfterHelp:`Consecutive errors before alerting.`,failureAlertCooldown:`Cooldown (seconds)`,failureAlertCooldownHelp:`Minimum seconds between alerts.`,failureAlertChannel:`Alert channel`,failureAlertTo:`Alert to`,failureAlertToPlaceholder:`+1555... or chat id`,failureAlertToHelp:`Optional recipient override for failure alerts.`,failureAlertMode:`Alert mode`,failureAlertAnnounce:`Announce (via channel)`,failureAlertWebhook:`Webhook (HTTP POST)`,failureAlertAccountId:`Alert account ID`,failureAlertAccountPlaceholder:`Account ID for multi-account setups`,bestEffortDelivery:`Best effort delivery`,bestEffortHelp:`Do not fail the task if delivery itself fails.`,cantAddYet:`Can't save yet`,fillRequired:`Fill the required fields below to enable submit.`,fixFields:`Fix {count} field to continue.`,fixFieldsPlural:`Fix {count} fields to continue.`,saving:`Saving...`,saveChanges:`Save changes`,createTask:`Create automation`,createAndRun:`Create & run now`,cancel:`Cancel`},jobState:{next:`Next`},runEntry:{noSummary:`No summary.`,deliverySuppression:`Delivery suppression: {reason}`,runAt:`Run at`,openRunChat:`Open run chat`,next:`Next {rel}`,due:`Due {rel}`},errors:{nameRequired:`Name is required.`,scheduleAtInvalid:`Enter a valid date/time.`,everyAmountInvalid:`Interval must be greater than 0.`,triggerIntervalTooShort:`Condition-triggered automations must run at least every 30 seconds.`,cronExprRequired:`Cron expression is required.`,staggerAmountInvalid:`Stagger must be greater than 0.`,triggerScriptRequired:`Trigger script is required when the condition trigger is enabled.`,triggerScriptPayloadUnsupported:`Script payloads cannot use condition triggers because both own the same saved state.`,triggerScheduleUnsupported:`Condition triggers require an interval, cron, or stream schedule.`,systemTextRequired:`System text is required.`,agentMessageRequired:`Agent message is required.`,timeoutInvalid:`If set, timeout must be greater than 0 seconds.`,webhookUrlRequired:`Webhook URL is required.`,webhookUrlInvalid:`Webhook URL must start with http:// or https://.`,invalidRunTime:`Invalid run time.`,invalidIntervalAmount:`Invalid interval amount.`,cronExprRequiredShort:`Cron expression required.`,invalidStaggerAmount:`Invalid stagger amount.`,systemEventTextRequired:`System event text required.`,agentMessageRequiredShort:`Agent message required.`,nameRequiredShort:`Name required.`}}}})))()}function Oe(e){return e!=null&&Ne.includes(e)}function ke(e){return x.includes(e)}function Ae(e){let t=e.toLowerCase();if(t.startsWith(`zh`)){let[,...e]=t.split(`-`);return e.includes(`hant`)?`zh-TW`:e.includes(`hans`)?`zh-CN`:e.some(e=>e===`tw`||e===`hk`||e===`mo`)?`zh-TW`:`zh-CN`}return x.find(e=>t.startsWith(e.split(`-`)[0].toLowerCase()))??`en`}async function je(e){return ke(e)?(await Me[e]())[e.replaceAll(`-`,`_`)]??null:null}var Me,x,Ne;function Pe(){return(Pe=e((()=>{a(),Me={"zh-CN":()=>c(()=>import(`./zh-CN-CCBiPfJU.js`),__vite__mapDeps([0,1]),import.meta.url),"zh-TW":()=>c(()=>import(`./zh-TW-DAtEOX12.js`),__vite__mapDeps([2,1]),import.meta.url),"pt-BR":()=>c(()=>import(`./pt-BR-Dc83AmX8.js`),__vite__mapDeps([3,1]),import.meta.url),de:()=>c(()=>import(`./de-Cns7YiC5.js`),__vite__mapDeps([4,1]),import.meta.url),es:()=>c(()=>import(`./es-BeSd_VR3.js`),__vite__mapDeps([5,1]),import.meta.url),"ja-JP":()=>c(()=>import(`./ja-JP-DaTR1bRo.js`),__vite__mapDeps([6,1]),import.meta.url),ko:()=>c(()=>import(`./ko-D6Zpjszv.js`),__vite__mapDeps([7,1]),import.meta.url),fr:()=>c(()=>import(`./fr-CAc4qqx3.js`),__vite__mapDeps([8,1]),import.meta.url),hi:()=>c(()=>import(`./hi-VMTOm6Mt.js`),__vite__mapDeps([9,1]),import.meta.url),ar:()=>c(()=>import(`./ar-_lTcZesI.js`),__vite__mapDeps([10,1]),import.meta.url),it:()=>c(()=>import(`./it-_aZlbdnK.js`),__vite__mapDeps([11,1]),import.meta.url),tr:()=>c(()=>import(`./tr-Bhey36qf.js`),__vite__mapDeps([12,1]),import.meta.url),uk:()=>c(()=>import(`./uk-B4ATRiEw.js`),__vite__mapDeps([13,1]),import.meta.url),id:()=>c(()=>import(`./id-CJoOqEOc.js`),__vite__mapDeps([14,1]),import.meta.url),pl:()=>c(()=>import(`./pl-DSMuJmop.js`),__vite__mapDeps([15,1]),import.meta.url),th:()=>c(()=>import(`./th-EgjS0R8e.js`),__vite__mapDeps([16,1]),import.meta.url),vi:()=>c(()=>import(`./vi-DHHnlU7U.js`),__vite__mapDeps([17,1]),import.meta.url),nl:()=>c(()=>import(`./nl-CzJEcK44.js`),__vite__mapDeps([18,1]),import.meta.url),fa:()=>c(()=>import(`./fa-Br8Tv6fC.js`),__vite__mapDeps([19,1]),import.meta.url),ru:()=>c(()=>import(`./ru-D_dWB2Rv.js`),__vite__mapDeps([20,1]),import.meta.url)},x=Object.keys(Me),Ne=[`en`,...x]})))()}function Fe(e){typeof document>`u`||(document.documentElement.lang=e,document.documentElement.dir=Ie.has(e)?`rtl`:`ltr`)}var Ie,Le,S,C;function Re(){return(Re=e((()=>{De(),Pe(),Ie=new Set([`ar`,`fa`]),Le=class{constructor(e=je){this.loadLocaleTranslation=e,this.locale=`en`,this.translations={en:Ee},this.subscribers=new Set,this.pendingLocale=null,this.pendingLocaleShouldPersist=!0,this.localeRequestGeneration=0,this.inFlightLocaleLoads=new Map,this.loadLocale()}readStoredLocale(){let e=f();if(!e)return null;try{return e.getItem(`openclaw.i18n.locale`)}catch{return null}}persistLocale(e){let t=f();if(t)try{t.setItem(`openclaw.i18n.locale`,e)}catch{}}clearPersistedLocale(){let e=f();if(e)try{e.removeItem(`openclaw.i18n.locale`)}catch{}}resolveInitialLocale(){let e=this.readStoredLocale();return Oe(e)?{locale:e,shouldPersist:!0}:{locale:Ae((typeof globalThis.navigator?.language==`string`?globalThis.navigator.language:null)??``),shouldPersist:!1}}loadLocale(){let e=this.resolveInitialLocale();if(e.locale===`en`){this.locale=`en`,Fe(`en`),e.shouldPersist||this.clearPersistedLocale();return}this.applyLocale(e.locale,!1,e.shouldPersist)}getLocale(){return this.locale}getSystemLocale(){return Ae((typeof globalThis.navigator?.language==`string`?globalThis.navigator.language:null)??``)}async setLocale(e){return this.applyLocale(e,!1,!0)}async useSystemLocale(){return this.applyLocale(this.getSystemLocale(),!1,!1)}loadLocaleTranslationOnce(e){let t=this.inFlightLocaleLoads.get(e);if(t)return t;let n=this.loadLocaleTranslation(e),r=()=>{this.inFlightLocaleLoads.get(e)===n&&this.inFlightLocaleLoads.delete(e)};return this.inFlightLocaleLoads.set(e,n),n.then(r,r),n}async applyLocale(e,t,n){let r=++this.localeRequestGeneration,i=e!==`en`&&!this.translations[e];if(n||this.clearPersistedLocale(),this.locale===e&&!i){this.pendingLocale=null,n&&this.persistLocale(e);return}if(i){this.pendingLocale=e,this.pendingLocaleShouldPersist=n;try{let t=await this.loadLocaleTranslationOnce(e);if(!t){this.localeRequestGeneration===r&&(this.pendingLocale=e,this.pendingLocaleShouldPersist=n);return}this.translations[e]=t}catch(i){let a=this.localeRequestGeneration===r;a&&(this.pendingLocale=e,this.pendingLocaleShouldPersist=n),t&&a&&this.localeLoadRecovery?.isUnrecoverableError(i)&&(n&&this.persistLocale(e),this.localeLoadRecovery.onUnrecoverableLocaleLoad?.(e)),console.error(`Failed to load locale: ${e}`,i);return}}this.localeRequestGeneration===r&&(this.pendingLocale=null,this.locale=e,Fe(e),n&&this.persistLocale(e),this.notify())}retryPendingLocale(){if(this.pendingLocale===null||this.pendingLocale===this.locale)return;let e=this.pendingLocale,t=this.pendingLocaleShouldPersist;this.pendingLocale=null,this.applyLocale(e,!0,t)}setLocaleLoadRecovery(e){this.localeLoadRecovery=e}registerTranslation(e,t){this.translations[e]=t}subscribe(e){return this.subscribers.add(e),()=>this.subscribers.delete(e)}notify(){this.subscribers.forEach(e=>e(this.locale))}t(e,t){let n=e.split(`.`),r=this.translations[this.locale]||this.translations.en;for(let e of n)if(r&&typeof r==`object`)r=r[e];else{r=void 0;break}if(r===void 0&&this.locale!==`en`){r=this.translations.en;for(let e of n)if(r&&typeof r==`object`)r=r[e];else{r=void 0;break}}return typeof r==`string`?t?r.replace(/\{(\w+)\}/g,(e,n)=>t[n]??`{${n}}`):r:e}},S=new Le,C=(e,t)=>S.t(e,t),typeof process<`u`&&{}.VITEST&&(globalThis[Symbol.for(`openclaw.i18nManagerTestApi`)]={createI18nManager(e){return new Le(e)}})})))()}var ze;function Be(){return(Be=e((()=>{Re(),ze=class{constructor(e){this.host=e,this.host.addController(this)}hostConnected(){this.unsubscribe?.(),this.unsubscribe=S.subscribe(()=>{this.host.requestUpdate()}),this.host.requestUpdate()}hostDisconnected(){this.unsubscribe?.(),this.unsubscribe=void 0}}})))()}function w(){return(w=e((()=>{Re(),Be()})))()}function T(e){return v`
    <svg
      viewBox="0 0 24 24"
      fill="none"
      stroke="currentColor"
      stroke-width="2"
      stroke-linecap="round"
      stroke-linejoin="round"
    >
      ${e}
    </svg>
  `}var Ve;function He(){return(He=e((()=>{g(),Ve={shieldCheck:T(_`<path d="M20 13c0 5-3.5 7.5-8 9-4.5-1.5-8-4-8-9V5l8-3 8 3zM9 12l2 2 4-4" />`),shieldX:T(_`<path d="M20 13c0 5-3.5 7.5-8 9-4.5-1.5-8-4-8-9V5l8-3 8 3zM9.5 9.5l5 5m0-5-5 5" />`),cpu:T(_` <rect width="16" height="16" x="4" y="4" rx="2" />
    <rect width="6" height="6" x="9" y="9" rx="1" />
    <path d="M15 2v2M15 20v2M2 15h2M2 9h2M20 15h2M20 9h2M9 2v2M9 20v2" />`),foldVertical:T(_`<path d="M12 22v-6M12 8V2M4 12H2M10 12H8M16 12h-2M22 12h-2M19 9l-3 3 3 3M5 15l3-3-3-3" />`),wrench:T(_` <path
    d="M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z"
  />`),fileCode:T(_` <path
      d="M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"
    />
    <polyline points="14 2 14 8 20 8" />
    <path d="M10 13l-2 2 2 2M14 17l2-2-2-2" />`),edit:T(_`<path
      d="M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z"
    />`),home:T(_` <path d="m3 9 9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z" />
    <polyline points="9 22 9 12 15 12 15 22" />`),penLine:T(_`<path d="M12 20h9M16.5 3.5a2.121 2.121 0 0 1 3 3L7 19l-4 1 1-4L16.5 3.5z" />`),paperclip:T(_` <path
    d="m21.44 11.05-9.19 9.19a6 6 0 0 1-8.49-8.49l8.57-8.57A4 4 0 1 1 18 8.84l-8.59 8.57a2 2 0 0 1-2.83-2.83l8.49-8.48"
  />`),globe:T(_` <circle cx="12" cy="12" r="10" />
    <path d="M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20" />
    <path d="M2 12h20" />`),image:T(_` <rect width="18" height="18" x="3" y="3" rx="2" ry="2" />
    <circle cx="9" cy="9" r="2" />
    <path d="m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21" />`),copyImage:T(_` <rect width="14" height="14" x="8" y="8" rx="2" />
    <path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2" />
    <circle cx="13" cy="13" r="1" />
    <path d="m21 18-3-3-5 5" />`),camera:T(_` <path
      d="M14.5 4 16 7h3a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h3l1.5-3z"
    />
    <circle cx="12" cy="13" r="3" />`),cameraOff:T(_`<path
      d="M14.564 14.558a3 3 0 1 1-4.122-4.121M2 2l20 20M20 20H4a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h1.997a2 2 0 0 0 .819-.175M9.695 4.024A2 2 0 0 1 10.004 4h3.993a2 2 0 0 1 1.76 1.05l.486.9A2 2 0 0 0 18.003 7H20a2 2 0 0 1 2 2v7.344"
    />`),smartphone:T(_` <rect width="14" height="20" x="5" y="2" rx="2" ry="2" />
    <path d="M12 18h.01" />`),circleQuestionMark:T(_` <circle cx="12" cy="12" r="10" />
    <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3M12 17h.01" />`),plug:T(_`<path d="M12 22v-5M9 8V2M15 8V2M18 8v5a4 4 0 0 1-4 4h-4a4 4 0 0 1-4-4V8Z" />`),circle:T(_`<circle cx="12" cy="12" r="10" />`),puzzle:T(_` <path
    d="M19.439 7.85c-.049.322.059.648.289.878l1.568 1.568c.47.47.706 1.087.706 1.704s-.235 1.233-.706 1.704l-1.611 1.611a.98.98 0 0 1-.837.276c-.47-.07-.802-.48-.968-.925a2.501 2.501 0 1 0-3.214 3.214c.446.166.855.497.925.968a.979.979 0 0 1-.276.837l-1.61 1.61a2.404 2.404 0 0 1-1.705.707 2.402 2.402 0 0 1-1.704-.706l-1.568-1.568a1.026 1.026 0 0 0-.877-.29c-.493.074-.84.504-1.02.968a2.5 2.5 0 1 1-3.237-3.237c.464-.18.894-.527.967-1.02a1.026 1.026 0 0 0-.289-.877l-1.568-1.568A2.402 2.402 0 0 1 1.998 12c0-.617.236-1.234.706-1.704L4.23 8.77c.24-.24.581-.353.917-.303.515.076.874.54 1.02 1.02a2.5 2.5 0 1 0 3.237-3.237c-.48-.146-.944-.505-1.02-1.02a.98.98 0 0 1 .303-.917l1.526-1.526A2.402 2.402 0 0 1 11.998 2c.617 0 1.234.236 1.704.706l1.568 1.568c.23.23.556.338.877.29.493-.074.84-.504 1.02-.968a2.5 2.5 0 1 1 3.236 3.236c-.464.18-.894.527-.967 1.02Z"
  />`),panelLeft:T(_` <rect x="3" y="3" width="18" height="18" rx="2" />
    <path d="M9 3v18" />`),panelLeftClose:T(_` <rect x="3" y="3" width="18" height="18" rx="2" />
    <path d="M9 3v18M16 10l-3 2 3 2" />`),panelLeftOpen:T(_` <rect x="3" y="3" width="18" height="18" rx="2" />
    <path d="M9 3v18M14 10l3 2-3 2" />`),chevronDown:T(_`<path d="M6 9l6 6 6-6" />`),chevronRight:T(_`<path d="M9 18l6-6-6-6" />`),chevronLeft:T(_`<path d="M15 18l-6-6 6-6" />`),externalLink:T(_`<path d="M18 13v6a2 2 0 01-2 2H5a2 2 0 01-2-2V8a2 2 0 012-2h6M15 3h6v6M10 14L21 3" />`),send:T(_`<path d="m22 2-7 20-4-9-9-4ZM22 2 11 13" />`),forward:T(_`<path d="m15 17 5-5-5-5M4 18v-2a4 4 0 0 1 4-4h12" />`),stop:T(_`<rect width="14" height="14" x="5" y="5" rx="1" />`),pin:T(_` <line x1="12" x2="12" y1="17" y2="22" />
    <path
      d="M5 17h14v-1.76a2 2 0 0 0-1.11-1.79l-1.78-.9A2 2 0 0 1 15 10.76V6h1a2 2 0 0 0 0-4H8a2 2 0 0 0 0 4h1v4.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24Z"
    />`),pinOff:T(_` <line x1="2" x2="22" y1="2" y2="22" />
    <line x1="12" x2="12" y1="17" y2="22" />
    <path
      d="M9 9v1.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V17h14v-1.76a2 2 0 0 0-1.11-1.79l-1.78-.9A2 2 0 0 1 15 10.76V6h1a2 2 0 0 0 0-4H8a2 2 0 0 0-.39.04"
    />`),download:T(_` <path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" />
    <polyline points="7 10 12 15 17 10" />
    <line x1="12" x2="12" y1="15" y2="3" />`),mic:T(_`<path d="M12 2a3 3 0 0 0-3 3v7a3 3 0 0 0 6 0V5a3 3 0 0 0-3-3ZM19 10v2a7 7 0 0 1-14 0v-2M12 19v3" />`),volume2:T(_` <polygon points="11 5 6 9 2 9 2 15 6 15 11 19 11 5" />
    <path d="M15.54 8.46a5 5 0 0 1 0 7.07M19.07 4.93a10 10 0 0 1 0 14.14" />`),volumeX:T(_` <polygon points="11 5 6 9 2 9 2 15 6 15 11 19 11 5" />
    <path d="m22 9-6 6" />
    <path d="m16 9 6 6" />`),bookmark:T(_`<path d="m19 21-7-4-7 4V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2v16z" />`),plus:T(_`<path d="M5 12h14M12 5v14" />`),gitBranch:T(_` <circle cx="6" cy="5" r="2" />
    <circle cx="18" cy="6" r="2" />
    <circle cx="6" cy="19" r="2" />
    <path d="M6 7v10M8 9h5a5 5 0 0 0 5-5" />`),gitFork:T(_` <circle cx="6" cy="6" r="3" />
    <circle cx="18" cy="6" r="3" />
    <circle cx="12" cy="18" r="3" />
    <path d="M6 9a6 6 0 0 0 6 6M18 9a6 6 0 0 1-6 6" />`),gitPullRequest:T(_` <circle cx="6" cy="6" r="3" />
    <circle cx="18" cy="18" r="3" />
    <path d="M13 6h3a2 2 0 0 1 2 2v7M6 9v12" />`),gitPullRequestDraft:T(_` <circle cx="6" cy="6" r="3" />
    <circle cx="18" cy="18" r="3" />
    <path d="M6 9v12" />
    <path d="M18 6v.01" />
    <path d="M18 11v.01" />`),gitPullRequestClosed:T(_` <circle cx="6" cy="6" r="3" />
    <path d="M6 9v12" />
    <path d="m15 9 6 6" />
    <path d="m21 9-6 6" />`),gitMerge:T(_` <circle cx="6" cy="6" r="3" />
    <circle cx="18" cy="18" r="3" />
    <path d="M6 21V9a9 9 0 0 0 9 9" />`),terminal:T(_` <polyline points="4 17 10 11 4 5" />
    <line x1="12" x2="20" y1="19" y2="19" />`),squareTerminal:T(_` <path d="m7 11 2-2-2-2M11 13h4" />
    <rect width="18" height="18" x="3" y="3" rx="2" ry="2" />`),listTree:T(_`<path d="M21 12h-8M21 6H8M21 18h-8M3 6v4c0 1.1.9 2 2 2h3M3 10v6c0 1.1.9 2 2 2h3" />`),claw:T(_` <path
      d="M8.2 10 A5.2 5.2 0 1 0 8.2 20.4 A5.2 5.2 0 0 0 8.2 10 Z M10.2 20 C14.5 20.8 19 18.6 22.3 13.2 C21 12.9 19.7 12.7 18.4 12.8 L17.5 14.6 L16 12.9 L14.3 14.5 L13.5 13 L11.5 14.2 Z"
    />
    <path
      class="claw-icon__jaw"
      d="M5.6 12.2 C5.2 5.6 10.4 1.4 15.6 2 C19.4 2.6 21.8 5.2 22.6 8.2 C20.9 7.7 19.2 7.6 17.6 7.9 L16.9 6.3 L15.2 8.5 C13.6 9.4 12.2 10.9 11.6 12.4 L6.8 13 Z"
    />`),spark:T(_` <path
    d="M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .963 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.581a.5.5 0 0 1 0 .964L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.963 0z"
  />`),lobster:v`
    <svg viewBox="0 0 120 120" fill="none">
      <defs>
        <linearGradient id="lob-g" x1="0%" y1="0%" x2="100%" y2="100%">
          <stop offset="0%" style="stop-color: var(--lobster-icon-body, #ff4d4d)" />
          <stop offset="100%" style="stop-color: var(--lobster-icon-shade, #991b1b)" />
        </linearGradient>
      </defs>
      <path
        d="M60 10C30 10 15 35 15 55C15 75 30 95 45 100L45 110L55 110L55 100C55 100 60 102 65 100L65 110L75 110L75 100C90 95 105 75 105 55C105 35 90 10 60 10Z"
        fill="url(#lob-g)"
      />
      <path d="M20 45C5 40 0 50 5 60C10 70 20 65 25 55C28 48 25 45 20 45Z" fill="url(#lob-g)" />
      <path
        d="M100 45C115 40 120 50 115 60C110 70 100 65 95 55C92 48 95 45 100 45Z"
        fill="url(#lob-g)"
      />
      <path
        d="M45 15Q35 5 30 8"
        style="stroke: var(--lobster-icon-body, #ff4d4d)"
        stroke-width="3"
        stroke-linecap="round"
      />
      <path
        d="M75 15Q85 5 90 8"
        style="stroke: var(--lobster-icon-body, #ff4d4d)"
        stroke-width="3"
        stroke-linecap="round"
      />
      <circle cx="45" cy="35" r="6" style="fill: var(--lobster-icon-eye, #050810)" />
      <circle cx="75" cy="35" r="6" style="fill: var(--lobster-icon-eye, #050810)" />
      <circle cx="46" cy="34" r="2.5" fill="#00e5cc" />
      <circle cx="76" cy="34" r="2.5" fill="#00e5cc" />
    </svg>
  `,circleUser:T(_` <path d="M18 20a6 6 0 0 0-12 0" />
    <circle cx="12" cy="10" r="4" />
    <circle cx="12" cy="12" r="10" />`),bell:T(_`<path
      d="M10.268 21a2 2 0 0 0 3.464 0M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326"
    />`),palette:T(_` <path
      d="M12 22a1 1 0 0 1 0-20 10 9 0 0 1 10 9 5 5 0 0 1-5 5h-2.25a1.75 1.75 0 0 0-1.4 2.8l.3.4a1.75 1.75 0 0 1-1.4 2.8z"
    />
    <circle cx="13.5" cy="6.5" r=".5" fill="currentColor" />
    <circle cx="17.5" cy="10.5" r=".5" fill="currentColor" />
    <circle cx="6.5" cy="12.5" r=".5" fill="currentColor" />
    <circle cx="8.5" cy="7.5" r=".5" fill="currentColor" />`),flaskConical:T(_`<path
      d="M14 2v6a2 2 0 0 0 .245.96l5.51 10.08A2 2 0 0 1 18 22H6a2 2 0 0 1-1.755-2.96l5.51-10.08A2 2 0 0 0 10 8V2M6.453 15h11.094M8.5 2h7"
    />`),badgeCheck:T(_` <path
      d="M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z"
    />
    <path d="m9 12 2 2 4-4" />`),refresh:T(_`<path d="M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8M21 3v5h-5" />`),rotateCcw:T(_`<path d="M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8M3 3v5h5" />`),trash:T(_`<path
      d="M3 6h18M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2M10 11v6M14 11v6"
    />`),eye:T(_` <path
      d="M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0"
    />
    <circle cx="12" cy="12" r="3" />`),eyeOff:T(_`<path
      d="M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49M14.084 14.158a3 3 0 0 1-4.242-4.242M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143M2 2l20 20"
    />`),arrowUpDown:T(_`<path d="M21 16l-4 4-4-4M17 20V4M3 8l4-4 4 4M7 4v16" />`),panelRightOpen:T(_` <rect x="3" y="3" width="18" height="18" rx="2" />
    <path d="M15 3v18M10 10l-3 2 3 2" />`),panelRightClose:T(_` <rect x="3" y="3" width="18" height="18" rx="2" />
    <path d="M15 3v18M8 10l3 2-3 2" />`),columns2:T(_` <rect x="3" y="3" width="18" height="18" rx="2" />
    <path d="M12 3v18" />`),panelBottomOpen:T(_` <rect x="3" y="3" width="18" height="18" rx="2" />
    <path d="M3 15h18M10 8l2 3 2-3" />`),panelBottomClose:T(_` <rect x="3" y="3" width="18" height="18" rx="2" />
    <path d="M3 15h18M10 11l2-3 2 3" />`),maximize:T(_` <polyline points="15 3 21 3 21 9" />
    <polyline points="9 21 3 21 3 15" />
    <line x1="21" x2="14" y1="3" y2="10" />
    <line x1="3" x2="10" y1="21" y2="14" />`),minimize:T(_` <polyline points="4 14 10 14 10 20" />
    <polyline points="20 10 14 10 14 4" />
    <line x1="14" x2="21" y1="10" y2="3" />
    <line x1="3" x2="10" y1="21" y2="14" />`)}})))()}function Ue(e){return E[e]}var E;function D(){return(D=e((()=>{g(),He(),E={messageSquare:T(_` <path
    d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"
  />`),messageSquarePlus:T(_` <path
      d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"
    />
    <path d="M12 7v6" />
    <path d="M9 10h6" />`),messageCircleOff:T(_` <path d="m2 2 20 20" />
    <path
      d="M4.93 4.929a10 10 0 0 0-1.938 11.412 2 2 0 0 1 .094 1.167l-1.065 3.29a1 1 0 0 0 1.236 1.168l3.413-.998a2 2 0 0 1 1.099.092 10 10 0 0 0 11.302-1.989"
    />
    <path d="M8.35 2.69A10 10 0 0 1 21.3 15.65" />`),layoutGrid:T(_` <rect width="7" height="7" x="3" y="3" rx="1" />
    <rect width="7" height="7" x="14" y="3" rx="1" />
    <rect width="7" height="7" x="14" y="14" rx="1" />
    <rect width="7" height="7" x="3" y="14" rx="1" />`),barChart:T(_` <line x1="12" x2="12" y1="20" y2="10" />
    <line x1="18" x2="18" y1="20" y2="4" />
    <line x1="6" x2="6" y1="20" y2="16" />`),layoutDashboard:T(_` <rect width="7" height="9" x="3" y="3" rx="1" />
    <rect width="7" height="5" x="14" y="3" rx="1" />
    <rect width="7" height="9" x="14" y="12" rx="1" />
    <rect width="7" height="5" x="3" y="16" rx="1" />`),coins:T(_` <circle cx="8" cy="8" r="6" />
    <path d="M18.09 10.37A6 6 0 1 1 10.34 18" />
    <path d="M7 6h1v4" />
    <path d="m16.71 13.88.7.71-2.82 2.82" />`),activity:T(_` <path d="M22 12h-4l-3 9L9 3l-3 9H2" />`),clock:T(_` <circle cx="12" cy="12" r="10" />
    <polyline points="12 6 12 12 16 14" />`),circleX:T(_` <circle cx="12" cy="12" r="10" />
    <path d="m15 9-6 6" />
    <path d="m9 9 6 6" />`),arrowLeftRight:T(_`<path d="m8 3-4 4 4 4" />
    <path d="M4 7h16" />
    <path d="m16 21 4-4-4-4" />
    <path d="M20 17H4" />`),arrowUpRight:T(_` <path d="M7 17 17 7" />
    <path d="M7 7h10v10" />`),link:T(_` <path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" />
    <path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" />`),radio:T(_` <circle cx="12" cy="12" r="2" />
    <path
      d="M16.24 7.76a6 6 0 0 1 0 8.49m-8.48-.01a6 6 0 0 1 0-8.49m11.31-2.82a10 10 0 0 1 0 14.14m-14.14 0a10 10 0 0 1 0-14.14"
    />`),fileText:T(_` <path
      d="M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"
    />
    <polyline points="14 2 14 8 20 8" />
    <line x1="16" x2="8" y1="13" y2="13" />
    <line x1="16" x2="8" y1="17" y2="17" />
    <line x1="10" x2="8" y1="9" y2="9" />`),file:T(_` <path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z" />
    <polyline points="14 2 14 8 20 8" />`),fileDiff:T(_` <path
      d="M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.7.71l3.59 3.58A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z"
    />
    <path d="M9 10h6" />
    <path d="M12 13V7" />
    <path d="M9 17h6" />`),diff:T(_` <path d="M12 3v14" />
    <path d="M5 10h14" />
    <path d="M5 21h14" />`),braces:T(_` <path
      d="M8 3H7a2 2 0 0 0-2 2v5a2 2 0 0 1-2 2 2 2 0 0 1 2 2v5c0 1.1.9 2 2 2h1"
    />
    <path d="M16 21h1a2 2 0 0 0 2-2v-5c0-1.1.9-2 2-2a2 2 0 0 1-2-2V5a2 2 0 0 0-2-2h-1" />`),mail:T(_` <path d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z" />
    <polyline points="22,6 12,13 2,6" />`),outbox:T(_` <polyline points="22 12 16 12 14 15 10 15 8 12 2 12" />
    <path d="M2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6" />
    <path d="M12 10V3" />
    <path d="m8 6 4-4 4 4" />`),inbox:T(_` <polyline points="22 12 16 12 14 15 10 15 8 12 2 12" />
    <path d="m5.45 5.11-3.45 6.89v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89a2 2 0 0 0-1.79-1.11h-9.52a2 2 0 0 0-1.79 1.11z" />`),star:T(_`<polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2" />`),wandSparkles:T(_` <path d="M15 4V2" />
    <path d="M15 16v-2" />
    <path d="M8 9h2" />
    <path d="M20 9h2" />
    <path d="M17.8 11.8 19 13" />
    <path d="M15 9h0" />
    <path d="M17.8 6.2 19 5" />
    <path d="m3 21 9-9" />
    <path d="M12.2 6.2 11 5" />`),chrome:T(_` <circle cx="12" cy="12" r="10" />
    <circle cx="12" cy="12" r="4" />
    <line x1="21.17" y1="8" x2="12" y2="8" />
    <line x1="3.95" y1="6.06" x2="8.54" y2="14" />
    <line x1="10.88" y1="21.94" x2="15.46" y2="14" />`),panelsTopLeft:T(_` <rect x="3" y="3" width="18" height="18" rx="2" ry="2" />
    <line x1="3" y1="9" x2="21" y2="9" />
    <line x1="9" y1="21" x2="9" y2="9" />`),box:T(_` <path
      d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"
    />
    <polyline points="3.27 6.96 12 12.01 20.73 6.96" />
    <line x1="12" y1="22.08" x2="12" y2="12" />`),music:T(_` <path d="M9 18V5l12-2v13" />
    <circle cx="6" cy="18" r="3" />
    <circle cx="18" cy="16" r="3" />`),asterisk:T(_` <path d="M12 2v6" />
    <path d="m4.93 10.93 4.24 4.24" />
    <path d="M2 12h6" />
    <path d="m4.93 13.07 4.24-4.24" />
    <path d="M12 22v-6" />
    <path d="m19.07 13.07-4.24-4.24" />
    <path d="M22 12h-6" />
    <path d="m19.07 10.93-4.24 4.24" />`),zap:T(_`<polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2" />`),monitor:T(_` <rect width="20" height="14" x="2" y="3" rx="2" />
    <line x1="8" x2="16" y1="21" y2="21" />
    <line x1="12" x2="12" y1="17" y2="21" />`),monitorSmartphone:T(_` <path
      d="M18 8V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v7a2 2 0 0 0 2 2h8"
    />
    <path d="M10 19v-3.96 3.15" />
    <path d="M7 19h5" />
    <rect width="6" height="10" x="16" y="12" rx="2" />`),server:T(_` <rect width="20" height="8" x="2" y="2" rx="2" ry="2" />
    <rect width="20" height="8" x="2" y="14" rx="2" ry="2" />
    <line x1="6" x2="6.01" y1="6" y2="6" />
    <line x1="6" x2="6.01" y1="18" y2="18" />`),sun:T(_` <circle cx="12" cy="12" r="4" />
    <path d="M12 2v2" />
    <path d="M12 20v2" />
    <path d="m4.93 4.93 1.41 1.41" />
    <path d="m17.66 17.66 1.41 1.41" />
    <path d="M2 12h2" />
    <path d="M20 12h2" />
    <path d="m6.34 17.66-1.41 1.41" />
    <path d="m19.07 4.93-1.41 1.41" />`),moon:T(_` <path d="M12 3a6.5 6.5 0 0 0 9 9 9 9 0 1 1-9-9Z" />`),settings:T(_` <path
      d="M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"
    />
    <circle cx="12" cy="12" r="3" />`),bug:T(_` <path d="m8 2 1.88 1.88" />
    <path d="M14.12 3.88 16 2" />
    <path d="M9 7.13v-1a3.003 3.003 0 1 1 6 0v1" />
    <path d="M12 20c-3.3 0-6-2.7-6-6v-3a4 4 0 0 1 4-4h4a4 4 0 0 1 4 4v3c0 3.3-2.7 6-6 6" />
    <path d="M12 20v-9" />
    <path d="M6.53 9C4.6 8.8 3 7.1 3 5" />
    <path d="M6 13H2" />
    <path d="M3 21c0-2.1 1.7-3.9 3.8-4" />
    <path d="M20.97 5c0 2.1-1.6 3.8-3.5 4" />
    <path d="M22 13h-4" />
    <path d="M17.2 17c2.1.1 3.8 1.9 3.8 4" />`),scrollText:T(_` <path
      d="M8 21h12a2 2 0 0 0 2-2v-2H10v2a2 2 0 1 1-4 0V5a2 2 0 1 0-4 0v3h4"
    />
    <path d="M19 17V5a2 2 0 0 0-2-2H4" />
    <path d="M15 8h-5" />
    <path d="M15 12h-5" />`),folder:T(_` <path
    d="M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z"
  />`),kanban:T(_` <rect width="18" height="18" x="3" y="3" rx="2" />
    <path d="M8 7v7" />
    <path d="M12 7v4" />
    <path d="M16 7v9" />`),bot:T(_` <path d="M12 8V4H8" />
    <rect width="16" height="12" x="4" y="8" rx="2" />
    <path d="M2 14h2" />
    <path d="M20 14h2" />
    <path d="M15 13v2" />
    <path d="M9 13v2" />`),users:T(_` <path d="M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2" />
    <circle cx="9" cy="7" r="4" />
    <path d="M22 21v-2a4 4 0 0 0-3-3.87" />
    <path d="M16 3.13a4 4 0 0 1 0 7.75" />`),shieldQuestion:T(_` <path
      d="M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z"
    />
    <path d="M9.1 9a3 3 0 0 1 5.82 1c0 2-3 3-3 3" />
    <path d="M12 17h.01" />`),shield:T(_` <path
      d="M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z"
    />`),shieldEllipsis:T(_` <path
      d="M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z"
    />
    <path d="M8 12h.01" /><path d="M12 12h.01" /><path d="M16 12h.01" />`),shieldLock:T(_` <path
      d="M20 9.807V6a1 1 0 0 0-1-1c-2 0-4.49-1.19-6.24-2.72a1.17 1.17 0 0 0-1.52 0C9.5 3.8 7 5 5 5a1 1 0 0 0-1 1v7c0 3.88 2.107 6.254 5 7.796"
    />
    <path d="M19 17v-2a2 2 0 0 0-4 0v2" />
    <rect x="13" y="17" width="8" height="5" rx="1" />`),shieldCog:T(_` <path d="m10.929 14.467-.383.924" />
    <path d="M10.929 8.923 10.546 8" />
    <path d="M13.225 8.923 13.608 8" />
    <path d="m13.607 15.391-.382-.924" />
    <path d="m14.849 10.547.923-.383" />
    <path d="m14.849 12.843.923.383" />
    <path
      d="M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z"
    />
    <path d="m9.305 10.547-.923-.383" />
    <path d="m9.305 12.843-.923.383" />
    <circle cx="12.077" cy="11.695" r="3" />`),shieldAlert:T(_` <path
      d="M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z"
    />
    <path d="M12 8v4" />
    <path d="M12 16h.01" />`),menu:T(_` <line x1="4" x2="20" y1="12" y2="12" />
    <line x1="4" x2="20" y1="6" y2="6" />
    <line x1="4" x2="20" y1="18" y2="18" />`),x:T(_` <path d="M18 6 6 18" />
    <path d="m6 6 12 12" />`),check:T(_`<path d="M20 6 9 17l-5-5" />`),info:T(_`<circle cx="12" cy="12" r="10" /><path d="M12 16v-4" /><path d="M12 8h.01" />`),square:T(_`<rect width="18" height="18" x="3" y="3" rx="2" />`),play:T(_`<polygon points="6 3 20 12 6 21 6 3" />`),pause:T(_` <rect x="14" y="4" width="4" height="16" rx="1" />
    <rect x="6" y="4" width="4" height="16" rx="1" />`),target:T(_` <circle cx="12" cy="12" r="10" />
    <circle cx="12" cy="12" r="6" />
    <circle cx="12" cy="12" r="2" />`),switchCamera:T(_` <path d="M11 19H6.5a4.5 4.5 0 0 1 0-9H8" />
    <path d="m8 16 3 3-3 3" />
    <path d="M13 5h4.5a4.5 4.5 0 0 1 0 9H16" />
    <path d="m16 8-3-3 3-3" />`),archive:T(_` <rect width="20" height="5" x="2" y="3" rx="1" />
    <path d="M4 8v11a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8" />
    <path d="M10 12h4" />`),archiveRestore:T(_` <rect width="20" height="5" x="2" y="3" rx="1" />
    <path d="M4 8v11a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8" />
    <path d="m9 15 3-3 3 3" />
    <path d="M12 12v6" />`),alertTriangle:T(_` <path
      d="m21.73 18-8-14a2 2 0 0 0-3.46 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3"
    />
    <path d="M12 9v4" />
    <path d="M12 17h.01" />`),globeOff:T(_` <path
      d="M10.114 4.462A14.5 14.5 0 0 1 12 2a10 10 0 0 1 9.313 13.643"
    />
    <path d="M15.557 15.556A14.5 14.5 0 0 1 12 22 10 10 0 0 1 4.929 4.929" />
    <path d="M15.892 10.234A14.5 14.5 0 0 0 12 2a10 10 0 0 0-3.643.687" />
    <path d="M17.656 12H22" />
    <path d="M19.071 19.071A10 10 0 0 1 12 22 14.5 14.5 0 0 1 8.44 8.45" />
    <path d="M2 12h10" />
    <path d="m2 2 20 20" />`),hand:T(_` <path d="M18 11V6a2 2 0 0 0-4 0v5" />
    <path d="M14 10V4a2 2 0 0 0-4 0v6" />
    <path d="M10 10.5V6a2 2 0 0 0-4 0v8" />
    <path d="M6 14v-2a2 2 0 0 0-4 0v4c0 4.4 3.6 8 8 8h2c4.4 0 8-3.6 8-8v-5a2 2 0 0 0-4 0v2" />`),key:T(_` <circle cx="7.5" cy="15.5" r="5.5" />
    <path d="m21 2-9.6 9.6" />
    <path d="m15.5 7.5 3 3L22 7l-3-3" />`),flag:T(_` <path d="M5 22V4" />
    <path d="M5 4c5-4 9 4 14 0v11c-5 4-9-4-14 0" />`),lock:T(_` <rect width="18" height="11" x="3" y="11" rx="2" />
    <path d="M7 11V7a5 5 0 0 1 10 0v4" />`),pencil:T(_` <path
      d="M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z"
    />
    <path d="m15 5 4 4" />`),pipette:T(_` <path
      d="m12 9-8.414 8.414A2 2 0 0 0 3 18.828v1.344a2 2 0 0 1-.586 1.414A2 2 0 0 1 3.828 21h1.344a2 2 0 0 0 1.414-.586L15 12"
    />
    <path
      d="m18 9 .4.4a1 1 0 1 1-3 3l-3.8-3.8a1 1 0 1 1 3-3l.4.4 3.4-3.4a1 1 0 1 1 3 3z"
    />
    <path d="m2 22 .414-.414" />`),pencilSparkles:T(_` <path d="M10 3H8" />
    <path d="m15.007 5.008 3.987 3.986" />
    <path d="M20 15v4" />
    <path
      d="M21.174 6.813a2.82 2.82 0 0 0-3.986-3.987L3.842 16.175a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z"
    />
    <path d="M22 17h-4" />
    <path d="M4 5v4" />
    <path d="M6 7H2" />
    <path d="M9 2v2" />`),layoutComfortable:T(_` <rect width="16" height="5" x="4" y="4" rx="1.5" />
    <rect width="16" height="5" x="4" y="15" rx="1.5" />
    <line x1="7" x2="16" y1="7" y2="7" />
    <line x1="7" x2="16" y1="18" y2="18" />`),layoutCompact:T(_` <rect width="16" height="3" x="4" y="4" rx="1" />
    <rect width="16" height="3" x="4" y="9" rx="1" />
    <rect width="16" height="3" x="4" y="14" rx="1" />
    <rect width="16" height="3" x="4" y="19" rx="1" />`),listFilter:T(_` <path d="M3 6h18" />
    <path d="M7 12h10" />
    <path d="M10 18h4" />`),gripVertical:T(_` <circle cx="9" cy="6" r="1.1" fill="currentColor" stroke="none" />
    <circle cx="9" cy="12" r="1.1" fill="currentColor" stroke="none" />
    <circle cx="9" cy="18" r="1.1" fill="currentColor" stroke="none" />
    <circle cx="15" cy="6" r="1.1" fill="currentColor" stroke="none" />
    <circle cx="15" cy="12" r="1.1" fill="currentColor" stroke="none" />
    <circle cx="15" cy="18" r="1.1" fill="currentColor" stroke="none" />`),arrowDown:T(_`<path d="M12 5v14m7-7-7 7-7-7" />`),arrowUp:T(_`<path d="M12 19V5m-7 7 7-7 7 7" />`),audioLines:T(_`<path d="M2 10v3" />
    <path d="M6 6v11" />
    <path d="M10 3v18" />
    <path d="M14 8v7" />
    <path d="M18 5v13" />
    <path d="M22 10v3" />`),chevronUp:T(_`<path d="m18 15-6-6-6 6" />`),chevronsUpDown:T(_`<path d="m7 15 5 5 5-5" />
    <path d="m7 9 5-5 5 5" />`),arrowLeft:T(_` <path d="m12 19-7-7 7-7" />
    <path d="M19 12H5" />`),cornerDownLeft:T(_` <polyline points="9 10 4 15 9 20" />
    <path d="M20 4v7a4 4 0 0 1-4 4H4" />`),cornerDownRight:T(_` <polyline points="15 10 20 15 15 20" />
    <path d="M4 4v7a4 4 0 0 0 4 4h12" />`),copy:T(_` <rect width="14" height="14" x="8" y="8" rx="2" ry="2" />
    <path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2" />`),search:T(_` <circle cx="11" cy="11" r="8" />
    <path d="m21 21-4.3-4.3" />`),brain:T(_` <path
      d="M12 5a3 3 0 1 0-5.997.125 4 4 0 0 0-2.526 5.77 4 4 0 0 0 .556 6.588A4 4 0 1 0 12 18Z"
    />
    <path
      d="M12 5a3 3 0 1 1 5.997.125 4 4 0 0 1 2.526 5.77 4 4 0 0 1-.556 6.588A4 4 0 1 1 12 18Z"
    />
    <path d="M15 13a4.5 4.5 0 0 1-3-4 4.5 4.5 0 0 1-3 4" />
    <path d="M17.599 6.5a3 3 0 0 0 .399-1.375" />
    <path d="M6.003 5.125A3 3 0 0 0 6.401 6.5" />
    <path d="M3.477 10.896a4 4 0 0 1 .585-.396" />
    <path d="M19.938 10.5a4 4 0 0 1 .585.396" />
    <path d="M6 18a4 4 0 0 1-1.967-.516" />
    <path d="M19.967 17.484A4 4 0 0 1 18 18" />`),book:T(_` <path d="M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H20v20H6.5a2.5 2.5 0 0 1 0-5H20" />`),loader:T(_` <path d="M12 2v4" />
    <path d="m16.2 7.8 2.9-2.9" />
    <path d="M18 12h4" />
    <path d="m16.2 16.2 2.9 2.9" />
    <path d="M12 18v4" />
    <path d="m4.9 19.1 2.9-2.9" />
    <path d="M2 12h4" />
    <path d="m4.9 4.9 2.9 2.9" />`),calendarClock:T(_` <path
      d="M21 7.5V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h3.5"
    />
    <path d="M16 2v4" />
    <path d="M8 2v4" />
    <path d="M3 10h5" />
    <path d="M17.5 17.5 16 16.3V14" />
    <circle cx="16" cy="16" r="6" />`),listChecks:T(_` <path d="m3 17 2 2 4-4" />
    <path d="m3 7 2 2 4-4" />
    <path d="M13 6h8" />
    <path d="M13 12h8" />
    <path d="M13 18h8" />`),moreHorizontal:T(_` <circle cx="5" cy="12" r="1" />
    <circle cx="12" cy="12" r="1" />
    <circle cx="19" cy="12" r="1" />`),...Ve}})))()}function We(e){return e.replace(/\s+/g,` `).trim()}function Ge(e){return typeof e==`object`&&!!e&&`namespaceURI`in e&&(e.namespaceURI===`http://www.w3.org/1999/xhtml`||e.namespaceURI===`http://www.w3.org/2000/svg`)}function Ke(e){return e.nodeType===Node.ELEMENT_NODE}function qe(e,t){let n=e.ownerDocument.defaultView?.getComputedStyle(e);if(e.hasAttribute(`hidden`)||!t&&e.getAttribute(`aria-hidden`)===`true`||n?.display===`none`||n?.contentVisibility===`hidden`)return``;let r=n?.visibility!==`hidden`&&n?.visibility!==`collapse`&&(n?.display===`contents`||typeof e.checkVisibility!=`function`||e.checkVisibility({checkOpacity:t,checkVisibilityCSS:!0}));return[...e.childNodes].map(e=>Ke(e)?qe(e,t):e.nodeType===Node.TEXT_NODE&&r?e.textContent??``:``).join(` `)}function Je(e){return qe(e,!1)}function Ye(e){return e.matches(`[data-tooltip-overflow]`)||e.scrollWidth>e.clientWidth||e.scrollHeight>e.clientHeight}function Xe(e,t){let n=We(e),r=We(qe(t,!0));if(!n||!r.includes(n)||Ye(t))return!1;for(let e of t.querySelectorAll(`*`))if(Ge(e)&&Ye(e))return!1;return!0}function Ze(){return`openclaw-tooltip-${++rt}`}function Qe(e){let t=e?.closest(`openclaw-tooltip`);t&&e?t.focusTriggerWithoutOpening(e):e?.focus()}var $e,et,tt,nt,rt,O,k,it;function A(){return(A=e((()=>{t(),g(),h(),m(),$e=`a[href], button, input, select, textarea, [tabindex]:not([tabindex="-1"])`,et=150,tt=300,nt=100,rt=0,O=class extends le{constructor(...e){super(...e),this.delay=et,this.skipDelay=tt,this.delayed=!0,this.focusInput=`keyboard`,this.skipDelayTimer=null,this.handleDocumentKeyDown=e=>{[`Alt`,`Control`,`Meta`,`Shift`].includes(e.key)||(this.focusInput=`keyboard`)},this.handleDocumentPointerDown=()=>{this.focusInput=`pointer`}}connectedCallback(){super.connectedCallback(),this.style.display=`contents`,this.focusInput=`keyboard`,this.ownerDocument.addEventListener(`keydown`,this.handleDocumentKeyDown,!0),this.ownerDocument.addEventListener(`pointerdown`,this.handleDocumentPointerDown,!0)}disconnectedCallback(){this.ownerDocument.removeEventListener(`keydown`,this.handleDocumentKeyDown,!0),this.ownerDocument.removeEventListener(`pointerdown`,this.handleDocumentPointerDown,!0),k.closeForProvider(this),this.clearSkipDelayTimer(),this.delayed=!0,super.disconnectedCallback()}focusOpensTooltip(){return this.focusInput===`keyboard`}openTooltip(){this.delayed=!1,this.clearSkipDelayTimer()}closeTooltip(){if(this.clearSkipDelayTimer(),this.skipDelay<=0){this.delayed=!0;return}this.skipDelayTimer=window.setTimeout(()=>{this.skipDelayTimer=null,this.delayed=!0},this.skipDelay)}clearSkipDelayTimer(){this.skipDelayTimer!==null&&(window.clearTimeout(this.skipDelayTimer),this.skipDelayTimer=null)}render(){return v`<slot></slot>`}},u([b({type:Number})],O.prototype,`delay`,void 0),u([b({type:Number})],O.prototype,`skipDelay`,void 0),k=class e extends le{constructor(...t){super(...t),this.content=``,this.closeDelay=nt,this.describe=!0,this.disabled=!1,this.openOnClick=!1,this.anchor=null,this.triggerElement=null,this.pinned=!1,this.describedElement=null,this.openTimer=null,this.closeTimer=null,this.triggerHovered=!1,this.contentHovered=!1,this.describedBy=null,this.descriptionCaptured=!1,this.suppressNextFocusOpen=!1,this.descriptionElement=null,this.richContentObserver=null,this.tooltipProvider=null,this.tooltipId=Ze(),this.descriptionId=`${this.tooltipId}-description`,this.handlePointerEnter=e=>{(!(`pointerType`in e)||e.pointerType!==`touch`)&&(this.triggerHovered=!0,this.clearCloseTimer(),this.scheduleOpen())},this.handlePointerLeave=e=>{(!(`pointerType`in e)||e.pointerType!==`touch`)&&(this.triggerHovered=!1,this.clearTimers(!1),this.maybeClose())},this.handleContentPointerEnter=e=>{e.pointerType!==`touch`&&(this.contentHovered=!0,this.clearCloseTimer(),this.show())},this.handleContentPointerLeave=e=>{e.pointerType!==`touch`&&(this.contentHovered=!1,this.maybeClose())},this.handlePointerDown=()=>{this.openOnClick||this.close()},this.handlePointerCancel=()=>{this.close()},this.handleFocusIn=()=>{if(this.suppressNextFocusOpen){this.suppressNextFocusOpen=!1,this.close();return}this.tooltipProvider?.focusOpensTooltip()!==!1&&this.show()},this.handleFocusOut=e=>{e instanceof FocusEvent&&e.relatedTarget instanceof Node&&this.containsInteractionTarget(e.relatedTarget)||this.pinned||this.triggerHovered||this.contentHovered||this.close()},this.handleClick=()=>{if(this.openOnClick&&!this.pinned){this.show(),this.pinned=this.webAwesomeTooltip?.open===!0;return}this.close()},this.handleWindowKeyDown=t=>{e.consumeEscape(t,this.ownerDocument)},this.handleDocumentDismiss=e=>{e.composedPath().some(e=>e===this||e===this.triggerElement)||this.close()},this.handleContentSlotChange=()=>{this.observeRichContent(),this.syncDescription(),this.tooltipText||this.close()}}static{this.activeByDocument=new WeakMap}static{this.consumeEscape=(t,n)=>{if(t.key!==`Escape`||t.defaultPrevented)return!1;let r=e.activeByDocument.get(n);return r?(t.preventDefault(),t.stopImmediatePropagation(),r.close(),!0):!1}}static closeForProvider(t){let n=e.activeByDocument.get(t.ownerDocument);n?.tooltipProvider===t&&n.close()}static{this.styles=de`
    :host {
      display: contents;
    }

    wa-tooltip {
      --max-width: var(--openclaw-tooltip-max-width, min(260px, calc(100vw - 16px)));
      --wa-tooltip-arrow-size: var(--openclaw-tooltip-arrow-size, 0px);
      --wa-tooltip-background-color: var(
        --openclaw-tooltip-background-color,
        color-mix(in srgb, var(--bg-elevated) 97%, var(--text) 3%)
      );
      --wa-tooltip-border-color: var(
        --openclaw-tooltip-border-color,
        var(--overlay-border, var(--border-strong))
      );
      --wa-tooltip-border-width: 1px;
      --wa-tooltip-border-style: solid;
      --wa-tooltip-content-color: var(--text);
      --wa-tooltip-border-radius: var(--openclaw-tooltip-border-radius, var(--radius-md));
      --show-duration: var(--openclaw-tooltip-popup-show-duration, var(--wa-transition-fast));
      --hide-duration: var(--openclaw-tooltip-popup-hide-duration, var(--wa-transition-fast));
      font-family: var(--font-body);
    }

    wa-tooltip::part(body) {
      padding: var(--openclaw-tooltip-padding, 5px 7px);
      box-shadow: var(--openclaw-tooltip-shadow, var(--overlay-shadow, var(--shadow-md)));
      font-size: 11px;
      font-weight: 500;
      line-height: 1.25;
      overflow-wrap: anywhere;
    }

    :host(.sidebar-hover-tooltip) wa-tooltip[open]::part(base__popup) {
      animation: var(--openclaw-tooltip-open-animation);
    }

    @media (prefers-reduced-motion: reduce) {
      wa-tooltip {
        --show-duration: 0ms;
        --hide-duration: 0ms;
      }

      :host(.sidebar-hover-tooltip) wa-tooltip[open]::part(base__popup) {
        animation: none;
      }
    }

    @keyframes openclaw-tooltip-hover-card-in {
      from {
        opacity: 0;
        transform: scale(0.95);
      }
      to {
        opacity: 1;
        transform: scale(1);
      }
    }

    .tooltip-content {
      display: block;
      text-align: center;
      white-space: pre-line;
    }

    .tooltip-rich-content {
      display: block;
      pointer-events: auto;
      text-align: left;
    }
  `}connectedCallback(){super.connectedCallback(),this.style.display=`contents`}updated(){this.attachTrigger(),this.syncDescription(),this.syncWebAwesomeTooltip(),(this.disabled||!this.tooltipText||this.webAwesomeTooltip?.open&&this.isRedundant())&&this.close()}disconnectedCallback(){this.close(),this.richContentObserver?.disconnect(),this.richContentObserver=null,this.tooltipProvider=null,this.detachTrigger(),super.disconnectedCallback()}attachTrigger(){let e=this.renderRoot.querySelector(`slot:not([name])`),t=this.anchor??e?.assignedElements({flatten:!0}).find(Ge);if(t===this.triggerElement||(this.close(),this.detachTrigger(),!t))return;this.triggerElement=t,this.tooltipProvider=null;let n=t;for(;n;){let e=n.closest(`openclaw-tooltip-provider`);if(e){this.tooltipProvider=e;break}let t=n.getRootNode();n=t instanceof ShadowRoot?t.host:null}t.addEventListener(`pointerenter`,this.handlePointerEnter),t.addEventListener(`pointerleave`,this.handlePointerLeave),t.addEventListener(`pointerdown`,this.handlePointerDown),t.addEventListener(`pointercancel`,this.handlePointerCancel),t.addEventListener(`focusin`,this.handleFocusIn),t.addEventListener(`focusout`,this.handleFocusOut),t.addEventListener(`click`,this.handleClick,!0),this.observeRichContent(),this.syncDescription(),this.syncWebAwesomeTooltip()}detachTrigger(){let e=this.triggerElement;e&&(e.removeEventListener(`pointerenter`,this.handlePointerEnter),e.removeEventListener(`pointerleave`,this.handlePointerLeave),e.removeEventListener(`pointerdown`,this.handlePointerDown),e.removeEventListener(`pointercancel`,this.handlePointerCancel),e.removeEventListener(`focusin`,this.handleFocusIn),e.removeEventListener(`focusout`,this.handleFocusOut),e.removeEventListener(`click`,this.handleClick,!0),this.restoreDescription(),this.triggerElement=null)}previewForAnchor(e,t,n){this.anchor=e,this.content=t,this.updateComplete.then(()=>{this.anchor!==e||!e.isConnected||!this.isConnected||(n===`focus`?this.handleFocusIn():(this.triggerHovered=!0,this.scheduleOpen()))})}syncWebAwesomeTooltip(){let e=this.webAwesomeTooltip;if(!e)return;e.showDelay=0,e.hideDelay=0;let t=this.triggerElement;e.updateComplete.then(()=>{this.webAwesomeTooltip===e&&this.triggerElement===t&&(e.anchor=t)})}scheduleOpen(){if(this.disabled||this.webAwesomeTooltip?.open||this.openTimer!==null)return;let e=this.tooltipProvider,t=this.delay===void 0&&e?.delayed===!1?0:Math.max(0,this.delay??e?.delay??et);this.openTimer=window.setTimeout(()=>{this.openTimer=null,this.show()},t)}show(){let t=this.webAwesomeTooltip;if(this.disabled||!t||!this.triggerElement||!this.tooltipText||this.isRedundant())return;this.clearTimers(!1);let n=e.activeByDocument.get(this.ownerDocument);n&&n!==this&&n.close(),e.activeByDocument.set(this.ownerDocument,this),this.tooltipProvider?.openTooltip(),this.syncDescription(),t.open=!0,this.setAttribute(`open`,``),this.ownerDocument.addEventListener(`pointerdown`,this.handleDocumentDismiss,!0),this.ownerDocument.addEventListener(`focusin`,this.handleDocumentDismiss,!0),this.ownerDocument.defaultView?.addEventListener(`keydown`,this.handleWindowKeyDown,!0)}containsInteractionTarget(e){return this.contains(e)||this.triggerElement?.contains(e)===!0}close(){this.pinned=!1,this.removeAttribute(`open`),this.ownerDocument.removeEventListener(`pointerdown`,this.handleDocumentDismiss,!0),this.ownerDocument.removeEventListener(`focusin`,this.handleDocumentDismiss,!0),this.ownerDocument.defaultView?.removeEventListener(`keydown`,this.handleWindowKeyDown,!0),this.clearTimers(),this.webAwesomeTooltip?.open&&(this.webAwesomeTooltip.open=!1),e.activeByDocument.get(this.ownerDocument)===this&&(e.activeByDocument.delete(this.ownerDocument),this.tooltipProvider?.closeTooltip())}isRedundant(){if(this.richContentText)return!1;let e=this.triggerElement;return e?Xe(this.content,e):!1}resolveDescribedElement(){let e=this.triggerElement;return e?e.matches($e)?e:e.querySelector($e)??e:null}syncDescription(){if(!this.describe){this.restoreDescription();return}let e=this.resolveDescribedElement();if(!e)return;this.describedElement=e;let t=e.getAttribute(`aria-describedby`);if(this.descriptionCaptured||=(this.describedBy=t,!0),!this.descriptionElement){let t=this.ownerDocument.createElement(`span`);t.id=this.descriptionId,t.hidden=!0;let n=e.getRootNode();(n instanceof ShadowRoot?n:this).append(t),this.descriptionElement=t}this.descriptionElement.textContent=this.tooltipText;let n=new Set((t??``).split(/\s+/u).filter(Boolean));n.add(this.descriptionId),e.setAttribute(`aria-describedby`,[...n].join(` `))}restoreDescription(){let e=this.describedElement??this.triggerElement;e&&(this.describedBy?e.setAttribute(`aria-describedby`,this.describedBy):e.removeAttribute(`aria-describedby`),this.describedElement=null,this.descriptionElement?.remove(),this.descriptionElement=null,this.describedBy=null,this.descriptionCaptured=!1)}clearCloseTimer(){this.closeTimer!==null&&(window.clearTimeout(this.closeTimer),this.closeTimer=null)}shouldRemainOpen(){let e=this.triggerElement?.getRootNode(),t=e instanceof ShadowRoot?e.activeElement:this.ownerDocument.activeElement;return this.pinned||this.triggerHovered||this.contentHovered||t instanceof Node&&this.containsInteractionTarget(t)}maybeClose(){if(this.clearCloseTimer(),!this.shouldRemainOpen()){if(!this.richContentText){this.close();return}this.closeTimer=window.setTimeout(()=>{this.closeTimer=null,this.shouldRemainOpen()||this.close()},this.closeDelay)}}clearTimers(e=!0){this.openTimer!==null&&(window.clearTimeout(this.openTimer),this.openTimer=null),this.clearCloseTimer(),e&&(this.triggerHovered=!1,this.contentHovered=!1)}get richContentText(){return We(this.renderRoot.querySelector(`slot[name="content"]`)?.assignedNodes({flatten:!0}).map(e=>e.textContent??``).join(` `)??``)}get tooltipText(){return this.richContentText||this.content}observeRichContent(){this.richContentObserver?.disconnect(),this.richContentObserver??=new MutationObserver(()=>this.syncDescription());let e=this.renderRoot.querySelector(`slot[name="content"]`);for(let t of e?.assignedNodes({flatten:!0})??[])this.richContentObserver.observe(t,{characterData:!0,childList:!0,subtree:!0})}render(){return v`
      <slot @slotchange=${()=>this.attachTrigger()}></slot>
      <wa-tooltip id=${this.tooltipId} trigger="manual" @wa-hide=${()=>this.close()}>
        <span class="tooltip-content">${this.content}</span>
        <span
          class="tooltip-rich-content"
          @pointerenter=${this.handleContentPointerEnter}
          @pointerleave=${this.handleContentPointerLeave}
          @focusin=${this.handleFocusIn}
          @focusout=${this.handleFocusOut}
        >
          <slot name="content" @slotchange=${this.handleContentSlotChange}></slot>
        </span>
      </wa-tooltip>
    `}focusTriggerWithoutOpening(e){e===this.triggerElement&&!e.matches(`:focus`)&&(this.suppressNextFocusOpen=!0),e.focus()}},u([b()],k.prototype,`content`,void 0),u([b({type:Number})],k.prototype,`closeDelay`,void 0),u([b({type:Number})],k.prototype,`delay`,void 0),u([b({type:Boolean})],k.prototype,`describe`,void 0),u([b({type:Boolean})],k.prototype,`disabled`,void 0),u([b({type:Boolean,attribute:`open-on-click`})],k.prototype,`openOnClick`,void 0),u([b({attribute:!1})],k.prototype,`anchor`,void 0),u([fe(`wa-tooltip`)],k.prototype,`webAwesomeTooltip`,void 0),it=k.consumeEscape,customElements.get(`openclaw-tooltip-provider`)||customElements.define(`openclaw-tooltip-provider`,O),customElements.get(`openclaw-tooltip`)||customElements.define(`openclaw-tooltip`,k)})))()}var j;function at(){return(at=e((()=>{g(),h(),ye(),pe(),w(),m(),D(),A(),j=class extends ue{constructor(...e){super(...e),this.navDrawerOpen=!1,this.resourceBasePath=``,this.environment=null}render(){let e=this.navDrawerOpen?C(`nav.collapse`):C(`nav.expand`);return v`
      <header class="topbar">
        <div class="topnav-shell">
          <openclaw-tooltip .content=${e}>
            <button
              type="button"
              class="topbar-icon-btn topbar-nav-toggle"
              @click=${e=>this.onToggleDrawer(e.currentTarget)}
              aria-label=${e}
              aria-expanded=${String(this.navDrawerOpen)}
            >
              <span class="nav-collapse-toggle__icon" aria-hidden="true">${E.menu}</span>
            </button>
          </openclaw-tooltip>
          <div class="topnav-shell__content" @mousedown=${_e}>
            <div class="topbar-brand" aria-label="OpenClaw">
              <img
                class="topbar-brand__logo"
                src=${me(`apple-touch-icon.png`,this.resourceBasePath)}
                alt=""
                aria-hidden="true"
              />
              <span class="topbar-brand__title">OpenClaw</span>
              ${this.environment&&v`<span class="control-ui-environment-pill">${this.environment.label}</span>`}
            </div>
          </div>
          <div class="topnav-shell__actions">
            <openclaw-tooltip .content=${C(`chat.commandPaletteTitle`)}>
              <button
                class="topbar-search"
                @click=${this.onOpenPalette}
                aria-label=${C(`chat.openCommandPalette`)}
              >
                ${E.search}
              </button>
            </openclaw-tooltip>
          </div>
        </div>
      </header>
    `}},u([b({attribute:!1})],j.prototype,`navDrawerOpen`,void 0),u([b({attribute:!1})],j.prototype,`resourceBasePath`,void 0),u([b({attribute:!1})],j.prototype,`environment`,void 0),u([b({attribute:!1})],j.prototype,`onToggleDrawer`,void 0),u([b({attribute:!1})],j.prototype,`onOpenPalette`,void 0),customElements.get(`openclaw-app-topbar`)||customElements.define(`openclaw-app-topbar`,j)})))()}function ot(e,t){st.delete(e),t&&st.add(e)}var st,M;function ct(){return(ct=e((()=>{l(),g(),h(),m(),st=document.openClawModalLayers??=new Set,M=class extends le{constructor(...e){super(...e),this.open=!0,this.manual=!1,this.label=``,this.description=``,this.returnFocus=null,this.syncGeneration=0,this.suppressNextCancel=!1,this.handleInitialFocus=e=>{if(e.target!==e.currentTarget||!this.isConnected)return;let t=this.getRootNode(),n=t instanceof ShadowRoot?t.activeElement:this.ownerDocument.activeElement;if(n instanceof HTMLElement&&n!==this&&this.contains(n))return;let r=e instanceof FocusEvent?e.relatedTarget:null;(r instanceof HTMLElement&&this.contains(r)?r:this.querySelector(`[autofocus]`))?.focus({preventScroll:!0})},this.handleAfterHide=e=>{if(e.target!==e.currentTarget)return;let t=this.returnFocusOverride,n=this.returnFocus;this.returnFocusOverride=void 0,this.open=!1,this.returnFocus=null,t!==void 0&&setTimeout(()=>{t===null?n&&document.activeElement===n&&n.blur():t.isConnected&&t.focus({preventScroll:!0})},0)},this.handleHide=e=>{if(e.target!==e.currentTarget)return;if(this.suppressNextCancel){this.suppressNextCancel=!1;return}let t=new CustomEvent(`modal-cancel`,{bubbles:!0,composed:!0,cancelable:!0});this.dispatchEvent(t),t.defaultPrevented&&e.preventDefault()}}static{this.styles=de`
    :host {
      display: contents;
    }

    wa-dialog {
      --width: min(var(--openclaw-modal-width, 540px), calc(100vw - 48px));
      --spacing: 0;
      --backdrop-filter: var(--openclaw-modal-backdrop-filter, blur(4px));
    }

    wa-dialog::part(dialog) {
      max-width: var(--openclaw-modal-max-width, calc(100vw - 48px));
      max-height: var(--openclaw-modal-max-height, calc(100dvh - 48px));
      padding: 0;
      border: 0;
      background: transparent;
      color: var(--text);
      overflow: visible;
    }

    wa-dialog::part(body) {
      padding: 0;
      overflow: visible;
    }

    :host(.fullscreen) wa-dialog {
      --width: calc(100vw - 20px);
    }

    :host(.fullscreen) wa-dialog::part(dialog) {
      max-width: calc(100vw - 20px);
      max-height: calc(100dvh - 20px);
    }

    :host(.viewport-edge-to-edge) wa-dialog {
      --width: 100vw;
    }

    :host(.viewport-edge-to-edge) wa-dialog::part(dialog) {
      width: 100vw;
      height: 100dvh;
      max-width: none;
      max-height: none;
      margin: 0;
      border-radius: 0;
    }

    /* Slotted scroll containers need the body's definite viewport height. */
    :host(.viewport-edge-to-edge) wa-dialog::part(body),
    :host(.drawer) wa-dialog::part(body) {
      height: 100%;
    }

    :host(.palette) wa-dialog::part(dialog) {
      margin-block-start: min(20dvh, 160px);
      margin-block-end: auto;
    }

    :host(.palette) wa-dialog {
      --show-duration: 0ms;
      --hide-duration: 0ms;
    }

    :host(.drawer) wa-dialog {
      --width: min(var(--openclaw-modal-width, 100vw), 100vw);
      --show-duration: 200ms;
      --hide-duration: 0ms;
    }

    :host(.drawer) wa-dialog::part(dialog) {
      height: 100dvh;
      max-width: 100vw;
      max-height: 100dvh;
      margin: 0 0 0 auto;
      border-radius: 0;
    }

    :host(.drawer) wa-dialog[open]::part(dialog) {
      animation: openclaw-drawer-in 200ms cubic-bezier(0.32, 0.72, 0, 1);
    }

    @keyframes openclaw-drawer-in {
      from {
        transform: translateX(100%);
      }
      to {
        transform: translateX(0);
      }
    }

    @media (prefers-reduced-motion: reduce) {
      :host(.drawer) wa-dialog {
        --show-duration: 0ms;
      }

      :host(.drawer) wa-dialog[open]::part(dialog) {
        animation: none;
      }
    }
    @media (max-width: 640px) {
      wa-dialog {
        --width: min(var(--openclaw-modal-width, 540px), calc(100vw - 24px));
      }

      wa-dialog::part(dialog) {
        max-width: var(--openclaw-modal-max-width, calc(100vw - 24px));
        max-height: 90dvh;
      }
    }

    @media (max-width: 768px),
      (max-width: 932px) and (max-height: 500px) and (orientation: landscape) {
      :host(.mobile-edge-to-edge) wa-dialog {
        --width: 100vw;
      }

      :host(.mobile-edge-to-edge) wa-dialog::part(dialog) {
        width: 100vw;
        height: 100dvh;
        max-width: none;
        max-height: none;
        margin: 0;
        border-radius: 0;
      }

      :host(.mobile-edge-to-edge) wa-dialog::part(body) {
        height: 100%;
      }
    }
  `}connectedCallback(){this.manual&&(this.open=!1),super.connectedCallback(),this.updateComplete.then(()=>this.syncDialogOpen())}disconnectedCallback(){ot(this,!1),this.syncGeneration+=1;let e=this.webAwesomeDialog,t=e?.shadowRoot?.querySelector(`dialog`);t?.open&&t.close(),e&&(e.open=!1);let n=this.returnFocusOverride===void 0?this.returnFocus:this.returnFocusOverride;this.returnFocus=null,this.returnFocusOverride=void 0,n?.isConnected&&n.focus({preventScroll:!0}),super.disconnectedCallback()}render(){return v`
      <wa-dialog
        without-header
        light-dismiss
        .label=${this.label}
        @focusin=${this.handleInitialFocus}
        @wa-after-show=${this.handleInitialFocus}
        @wa-after-hide=${this.handleAfterHide}
        @wa-hide=${this.handleHide}
      >
        <slot></slot>
      </wa-dialog>
    `}updated(e){e.has(`open`)&&ot(this,this.open),this.syncAccessibility(),this.syncDialogOpen()}async syncDialogOpen(){let e=++this.syncGeneration,t=this.webAwesomeDialog;if(!t||(await t.updateComplete,e!==this.syncGeneration||!this.isConnected))return;let n=t.shadowRoot?.querySelector(`dialog`);if(this.open){if(n?.open)return;this.returnFocus=document.activeElement instanceof HTMLElement?document.activeElement:null,t.open=!0;return}(t.open||n?.open)&&(this.suppressNextCancel=!0,t.open=!1)}async syncAccessibility(){let e=this.webAwesomeDialog;if(!e)return;await e.updateComplete;let t=e.shadowRoot?.querySelector(`dialog`);t&&(t.setAttribute(`role`,`dialog`),t.setAttribute(`aria-modal`,`true`),this.label?t.setAttribute(`aria-label`,this.label):t.removeAttribute(`aria-label`),this.description?t.setAttribute(`aria-description`,this.description):t.removeAttribute(`aria-description`))}show(){this.open=!0}setReturnFocusTarget(e){this.returnFocusOverride=e}hide(){this.open=!1}},u([b({type:Boolean})],M.prototype,`open`,void 0),u([b({type:Boolean,reflect:!0})],M.prototype,`manual`,void 0),u([b()],M.prototype,`label`,void 0),u([b()],M.prototype,`description`,void 0),u([fe(`wa-dialog`)],M.prototype,`webAwesomeDialog`,void 0),customElements.get(`openclaw-modal-dialog`)||customElements.define(`openclaw-modal-dialog`,M)})))()}var lt,N;function ut(){return(ut=e((()=>{g(),h(),w(),m(),lt=[`pointerup`,`pointercancel`,`blur`],N=class extends le{constructor(...e){super(...e),this.splitRatio=.6,this.minRatio=.4,this.maxRatio=.7,this.label=``,this.orientation=`vertical`,this.startPosition=0,this.startRatio=0,this.dragRatio=0,this.dragSize=0,this.dragFrame=0,this.pendingPosition=null,this.activePointerId=null,this.handlePointerDown=e=>{if(e.button===0&&this.activePointerId===null&&(this.startPosition=this.orientation===`horizontal`?e.clientY:e.clientX,this.startRatio=this.currentRatio(),this.dragRatio=this.startRatio,this.dragSize=this.measureDragSize(),!(this.dragSize<=0))){this.classList.add(`dragging`),this.capturePointer(e.pointerId),window.addEventListener(`pointermove`,this.handlePointerMove);for(let e of lt)window.addEventListener(e,this.finishDragging);this.addEventListener(`lostpointercapture`,this.finishDragging),e.preventDefault()}},this.handlePointerMove=e=>{e.pointerId===this.activePointerId&&(this.pendingPosition=this.orientation===`horizontal`?e.clientY:e.clientX,this.dragFrame||=requestAnimationFrame(this.flushPointerMove))},this.flushPointerMove=()=>{this.dragFrame=0;let e=this.pendingPosition;this.pendingPosition=null,e!==null&&(this.dragRatio=this.emitResize(this.startRatio+(e-this.startPosition)/this.dragSize))},this.handleKeyDown=e=>{let t=e.shiftKey?.05:.02,n=this.currentRatio(),r=null,i=this.orientation===`horizontal`?`ArrowUp`:`ArrowLeft`,a=this.orientation===`horizontal`?`ArrowDown`:`ArrowRight`;e.key===i?r=n-t:e.key===a?r=n+t:e.key===`Home`?r=this.minRatio:e.key===`End`&&(r=this.maxRatio),r!=null&&(e.preventDefault(),this.emitResize(r),this.emitResizeEnd(r))},this.finishDragging=e=>{`pointerId`in e&&e.pointerId!==this.activePointerId||(this.activePointerId!==null&&(this.dragFrame&&=(cancelAnimationFrame(this.dragFrame),0),this.flushPointerMove(),this.emitResizeEnd(this.dragRatio)),this.stopDragging())}}static{this.styles=de`
    :host {
      width: var(--resize-handle-size, 6px);
      cursor: col-resize;
      flex-shrink: 0;
      position: relative;
      touch-action: none;
      user-select: none;
    }
    :host::before {
      content: "";
      position: absolute;
      top: 0;
      left: -4px;
      right: -4px;
      bottom: 0;
    }
    /* The visible divider is a centered hairline, not the whole gutter:
       filling the host paints a fat bar that stacks with neighboring pane
       borders into a multi-line smear while dragging. */
    :host::after {
      content: "";
      position: absolute;
      top: 0;
      bottom: 0;
      inset-inline-start: var(--resize-handle-line-inline, 50%);
      width: var(--resize-handle-line-size, 1px);
      transform: translateX(-50%);
      background: var(--resize-handle-rest-color, var(--border, #1e2028));
      transition:
        background 150ms ease-out,
        width 150ms ease-out;
    }
    :host(:hover)::after,
    :host(.dragging)::after,
    :host(:focus-visible)::after {
      width: var(--resize-handle-active-line-size, 2px);
      background: var(--resize-handle-active-color, currentColor);
    }
    :host(:focus-visible) {
      outline: 2px solid var(--accent, #ff5c5c);
      outline-offset: 2px;
    }
    :host([orientation="horizontal"]) {
      width: auto;
      height: var(--resize-handle-size, 6px);
      cursor: row-resize;
    }
    :host([orientation="horizontal"])::before {
      top: -4px;
      left: 0;
      right: 0;
      bottom: -4px;
    }
    :host([orientation="horizontal"])::after {
      top: var(--resize-handle-line-block, 50%);
      bottom: auto;
      inset-inline-start: 0;
      left: 0;
      right: 0;
      width: auto;
      height: var(--resize-handle-line-size, 1px);
      transform: translateY(-50%);
      transition:
        background 150ms ease-out,
        height 150ms ease-out;
    }
    :host([orientation="horizontal"]:hover)::after,
    :host([orientation="horizontal"].dragging)::after,
    :host([orientation="horizontal"]:focus-visible)::after {
      width: auto;
      height: var(--resize-handle-active-line-size, 2px);
    }
  `}render(){return y}connectedCallback(){super.connectedCallback(),this.setStaticAccessibilityAttributes(),this.addEventListener(`pointerdown`,this.handlePointerDown),this.addEventListener(`keydown`,this.handleKeyDown)}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener(`pointerdown`,this.handlePointerDown),this.removeEventListener(`keydown`,this.handleKeyDown),this.finishDragging(new Event(`disconnect`))}updated(){this.setAttribute(`aria-valuemin`,String(this.toAriaValue(this.minRatio))),this.setAttribute(`aria-valuemax`,String(this.toAriaValue(this.maxRatio))),this.setCurrentAriaValue(this.currentRatio()),this.setAttribute(`aria-label`,this.label||C(`common.resizeSplitView`)),this.setAttribute(`aria-orientation`,this.orientation)}stopDragging(){let e=this.activePointerId;if(e!==null){this.classList.remove(`dragging`),this.removeEventListener(`lostpointercapture`,this.finishDragging),this.releaseActivePointer(e),this.dragFrame&&=(cancelAnimationFrame(this.dragFrame),0),this.pendingPosition=null,window.removeEventListener(`pointermove`,this.handlePointerMove);for(let e of lt)window.removeEventListener(e,this.finishDragging)}}emitResize(e){let t=this.clampRatio(e);return this.setCurrentAriaValue(t),this.dispatchEvent(new CustomEvent(`resize`,{detail:{splitRatio:t},bubbles:!0,composed:!0})),t}emitResizeEnd(e){this.dispatchEvent(new CustomEvent(`resize-end`,{detail:{splitRatio:this.clampRatio(e)},bubbles:!0,composed:!0}))}clampRatio(e){return Math.max(this.minRatio,Math.min(this.maxRatio,e))}measureDragSize(){let e=this.measureSize?.()??0;if(e>0)return e;let t=this.previousElementSibling?.getBoundingClientRect(),n=this.nextElementSibling?.getBoundingClientRect(),r=this.orientation===`horizontal`?(t?.height??0)+(n?.height??0):(t?.width??0)+(n?.width??0);if(r>0)return r;let i=this.parentElement?.getBoundingClientRect();return this.orientation===`horizontal`?i?.height??0:i?.width??0}currentRatio(){let e=this.measureRatio?.();return e!==void 0&&Number.isFinite(e)?this.clampRatio(e):this.splitRatio}toAriaValue(e){return Math.round(e*100)}setCurrentAriaValue(e){this.setAttribute(`aria-valuenow`,String(this.toAriaValue(e)))}setStaticAccessibilityAttributes(){this.setAttribute(`role`,`separator`),this.setAttribute(`tabindex`,`0`),this.setAttribute(`aria-orientation`,this.orientation)}capturePointer(e){this.activePointerId=e,typeof this.setPointerCapture==`function`&&this.setPointerCapture(e)}releaseActivePointer(e){this.activePointerId=null,typeof this.releasePointerCapture==`function`&&(typeof this.hasPointerCapture==`function`&&!this.hasPointerCapture(e)||this.releasePointerCapture(e))}},u([b({type:Number})],N.prototype,`splitRatio`,void 0),u([b({type:Number})],N.prototype,`minRatio`,void 0),u([b({type:Number})],N.prototype,`maxRatio`,void 0),u([b({type:String})],N.prototype,`label`,void 0),u([b({type:String,reflect:!0})],N.prototype,`orientation`,void 0),u([b({attribute:!1})],N.prototype,`measureRatio`,void 0),u([b({attribute:!1})],N.prototype,`measureSize`,void 0),customElements.get(`resizable-divider`)||customElements.define(`resizable-divider`,N)})))()}function dt(){return{floatOffset:0,antennaDegrees:0,antennaDroop:0,leftClawDegrees:0,rightClawDegrees:0,eyeGlowOpacity:1,glowScale:1,leftEyeOpenness:1,rightEyeOpenness:1,happyEyes:0,gaze:{x:0,y:0},mouthCurve:0,mouthOpen:0,mouthRound:0,blush:0,hardHat:0,bodyTilt:0,bodyStretch:1,dizzy:0,dizzyPhase:0,effect:`none`,effectPhase:0}}function P(e,t,n){return Math.min(Math.max(e,t),n)}function ft(e){return e.floatOffset=P(e.floatOffset,-12,2),e.antennaDegrees=P(e.antennaDegrees,-14,14),e.antennaDroop=P(e.antennaDroop,0,1),e.leftClawDegrees=P(e.leftClawDegrees,-45,45),e.rightClawDegrees=P(e.rightClawDegrees,-45,45),e.eyeGlowOpacity=P(e.eyeGlowOpacity,0,1),e.glowScale=P(e.glowScale,.5,1.6),e.leftEyeOpenness=P(e.leftEyeOpenness,0,1),e.rightEyeOpenness=P(e.rightEyeOpenness,0,1),e.happyEyes=P(e.happyEyes,0,1),e.gaze.x=P(e.gaze.x,-1.2,1.2),e.gaze.y=P(e.gaze.y,-1.2,1.2),e.mouthCurve=P(e.mouthCurve,-1,1),e.mouthOpen=P(e.mouthOpen,0,1),e.mouthRound=P(e.mouthRound,0,1),e.blush=P(e.blush,0,1),e.hardHat=P(e.hardHat,0,1),e.bodyTilt=P(e.bodyTilt,-8,8),e.bodyStretch=P(e.bodyStretch,.86,1.05),e.dizzy=P(e.dizzy,0,1),e}function pt(e){let t=dt();switch(e){case`idle`:case`curious`:case`attentive`:break;case`thinking`:t.gaze={x:.3,y:-.5};break;case`working`:t.hardHat=1,t.rightClawDegrees=-28,t.gaze={x:.4,y:.35},t.mouthCurve=.15,t.bodyTilt=2;break;case`happy`:t.mouthCurve=.6,t.happyEyes=.4;break;case`celebrating`:t.mouthCurve=.9,t.mouthOpen=.4,t.happyEyes=.8,t.leftClawDegrees=30,t.rightClawDegrees=-30;break;case`sad`:t.antennaDroop=.75,t.mouthCurve=-.55,t.eyeGlowOpacity=.6,t.gaze={x:0,y:.5};break;case`sleepy`:t.leftEyeOpenness=.25,t.rightEyeOpenness=.25,t.eyeGlowOpacity=.5,t.antennaDroop=.35}return t}function mt(e){return e?gt:ht}var ht,gt;function _t(){return(_t=e((()=>{ht={gradientTop:`#ff4d4d`,gradientBottom:`#991b1b`,antenna:`#ff4d4d`},gt={gradientTop:`#ff7079`,gradientBottom:`#ea4c59`,antenna:`#ef4b58`}})))()}function F(e,t=0,n=1){return Math.min(Math.max(e,t),n)}function I(e,t){let n=e/t%1;return n<0?n+1:n}function L(e){let t=F(e);return t*t*(3-2*t)}function R(e){let t=F(e);return L(t<.5?t*2:(1-t)*2)}function vt(e,t,n){let r=F(e);return r<t?L(r/t):r>n?L((1-r)/(1-n)):1}function yt(e){switch(e){case`wave`:return 1.5;case`hop`:return .7;case`celebrate`:return 2.4;case`sigh`:return 1.8;case`yawn`:case`wipeBrow`:return 2;case`clawSnap`:return .6;case`donHardHat`:return 1}return 0}var bt,xt,St,z,Ct,wt,Tt,Et;function Dt(){return(Dt=e((()=>{_t(),bt=(1n<<64n)-1n,xt=11400714819323198485n,St=2685821657736338717n,z=Math.PI*2,Ct=.16,wt=.8,Tt=class{constructor(e){let t=BigInt.asUintN(64,BigInt(e));this.state=t===0n?xt:t}next(){return this.state^=this.state>>12n,this.state=BigInt.asUintN(64,this.state),this.state^=this.state<<25n,this.state=BigInt.asUintN(64,this.state),this.state^=this.state>>27n,this.state=BigInt.asUintN(64,this.state),this.state*St&bt}unit(){return Number(this.next()>>11n)/9007199254740992}},Et=class{constructor(e=BigInt(Date.now())){this.currentMood=`idle`,this.startTime=null,this.lastPoseTime=0,this.activeGesture=null,this.activeGestureStart=0,this.pendingGesture=null,this.pendingGestureAt=0,this.nextBlinkAt=0,this.pendingDoubleBlink=!1,this.blinkStarts=[],this.nextGlanceAt=0,this.gazeHoldUntil=0,this.gazeTarget={x:0,y:0},this.currentGaze={x:0,y:0},this.nextClawSnapAt=0,this.nextMoodBeatAt=0,this.teaseActive=!1,this.teaseChangedAt=0,this.catchStartedAt=null,this.rng=new Tt(e)}setMood(e,t){if(e===this.currentMood)return;this.currentMood=e,this.pendingGesture=null,this.activeGesture=null,this.rescheduleMoodBeat(t);let n=this.entranceGesture(e);n&&this.startGesture(n,t)}setTease(e,t){this.teaseActive=e,this.teaseChangedAt=t}playCatch(e){this.catchStartedAt=e}poseAt(e){this.startTime===null&&this.begin(e);let t=F(e-this.lastPoseTime,0,.1);this.lastPoseTime=e,this.advanceSchedules(e);let n=this.basePose(this.currentMood,e);if(this.applyGaze(n,this.currentMood,e,t),this.applyBlinks(n,e),this.activeGesture){let t=(e-this.activeGestureStart)/yt(this.activeGesture);t>=1?this.activeGesture=null:this.applyGesture(this.activeGesture,n,t)}if(this.teaseActive&&e>=this.teaseChangedAt&&(n.mouthRound=Math.max(n.mouthRound,.5),n.gaze={x:0,y:.6}),this.catchStartedAt!==null){let t=(e-this.catchStartedAt)/wt;if(t>=1)this.catchStartedAt=null;else if(t>=0){let e=R(t);this.applyGesture(`clawSnap`,n,F(t/.75)),n.happyEyes=Math.max(n.happyEyes,.9*e),n.mouthCurve=Math.max(n.mouthCurve,.7*e),n.blush=Math.max(n.blush,.65*e)}}return ft(n)}begin(e){this.startTime=e,this.lastPoseTime=e,this.nextBlinkAt=e+this.random(.8,2.4),this.nextGlanceAt=e+this.random(1.5,4),this.nextClawSnapAt=e+this.random(2,5),this.rescheduleMoodBeat(e),(this.currentMood===`idle`||this.currentMood===`curious`||this.currentMood===`happy`)&&(this.pendingGesture=`wave`,this.pendingGestureAt=e+.9)}advanceSchedules(e){if(e>=this.nextBlinkAt&&(this.blinkStarts.push(e),this.pendingDoubleBlink?(this.pendingDoubleBlink=!1,this.nextBlinkAt=e+this.blinkInterval()):this.random(0,1)<.14?(this.pendingDoubleBlink=!0,this.nextBlinkAt=e+.34):this.nextBlinkAt=e+this.blinkInterval()),this.blinkStarts=this.blinkStarts.filter(t=>e-t<=Ct),e>=this.nextGlanceAt?(this.gazeTarget=this.randomGlanceTarget(),this.gazeHoldUntil=e+this.random(.7,1.9),this.nextGlanceAt=this.gazeHoldUntil+this.glanceInterval()):e>=this.gazeHoldUntil&&(this.gazeTarget={x:0,y:0}),e>=this.nextClawSnapAt&&(this.activeGesture===null&&this.currentMood!==`sad`&&this.currentMood!==`working`&&this.startGesture(`clawSnap`,e),this.nextClawSnapAt=e+this.random(4,9)),e>=this.nextMoodBeatAt&&(this.activeGesture===null&&(this.currentMood===`sad`?this.startGesture(`sigh`,e):this.currentMood===`sleepy`?this.startGesture(`yawn`,e):this.currentMood===`working`&&this.startGesture(`wipeBrow`,e)),this.rescheduleMoodBeat(e)),this.pendingGesture&&e>=this.pendingGestureAt&&this.activeGesture===null){let t=this.pendingGesture;this.pendingGesture=null,this.startGesture(t,e)}}basePose(e,t){let n=dt();switch(e){case`idle`:n.floatOffset=-4.8*(1-Math.cos(z*I(t,4))),n.antennaDegrees=-3*Math.sin(z*I(t,2));break;case`curious`:n.floatOffset=-4.2*(1-Math.cos(z*I(t,3.4))),n.antennaDegrees=-4*Math.sin(z*I(t,1.7)),n.bodyTilt=1.6*Math.sin(z*I(t,5.2));break;case`thinking`:n.floatOffset=-3.2*(1-Math.cos(z*I(t,5))),n.antennaDegrees=-5*Math.sin(z*I(t,1.3)),n.bodyTilt=2*Math.sin(z*I(t,6)),n.eyeGlowOpacity=.9+.1*Math.sin(z*I(t,.8));break;case`working`:{let e=I(t,.95);if(e<.05)n.rightClawDegrees=-6;else if(e<.6)n.rightClawDegrees=-6-28*L((e-.05)/.55);else if(e<.72){let t=F((e-.6)/.12);n.rightClawDegrees=-34+46*t*t}else n.rightClawDegrees=12-18*L((e-.72)/.28);n.leftClawDegrees=4+2*Math.sin(z*e);let r=R(F((e-.72)/.14));if(n.floatOffset=-2*(1-Math.cos(z*I(t,3.8)))+.8*r,n.bodyStretch=1-.03*r,n.bodyTilt=2.2+.6*Math.sin(z*I(t,5)),e>=.72){let t=F((e-.72)/.28);n.antennaDegrees=6*(1-t)*Math.sin(t*3*Math.PI)}n.leftEyeOpenness=.85,n.rightEyeOpenness=.85,n.mouthCurve=.18,n.hardHat=1,n.effect=`sparks`;let i=(e-.72)%1;n.effectPhase=i<0?i+1:i;break}case`happy`:n.floatOffset=-6*(1-Math.cos(z*I(t,3))),n.antennaDegrees=-4.5*Math.sin(z*I(t,1.6)),n.mouthCurve=.55+.1*Math.sin(z*I(t,3)),n.happyEyes=.35;break;case`celebrating`:{let e=Math.abs(Math.sin(z*I(t,1.6)));n.floatOffset=-9*e,n.bodyStretch=1+.03*e,n.antennaDegrees=-6*Math.sin(z*I(t,.8));let r=Math.sin(z*I(t,.9));n.leftClawDegrees=20+8*r,n.rightClawDegrees=-20+8*r,n.mouthCurve=.9,n.mouthOpen=.35,n.happyEyes=.7,n.glowScale=1.1,n.effect=`sparkles`,n.effectPhase=I(t,2.2);break}case`sad`:n.floatOffset=-2.4*(1-Math.cos(z*I(t,5.5))),n.antennaDegrees=-1.5*Math.sin(z*I(t,3)),n.antennaDroop=.75,n.mouthCurve=-.55,n.eyeGlowOpacity=.6;break;case`sleepy`:n.floatOffset=-2*(1-Math.cos(z*I(t,6))),n.antennaDroop=.35,n.leftEyeOpenness=.22+.08*Math.sin(z*I(t,3)),n.rightEyeOpenness=n.leftEyeOpenness,n.eyeGlowOpacity=.5,n.mouthRound=.15,n.bodyTilt=2.5*Math.sin(z*I(t,6)),n.effect=`zzz`,n.effectPhase=I(t,3);break;case`attentive`:n.floatOffset=-3*(1-Math.cos(z*I(t,4))),n.antennaDegrees=-2.5*Math.sin(z*I(t,2)),n.mouthCurve=.25}return n}applyGaze(e,t,n,r){let i=this.gazeTarget;switch(t){case`thinking`:i={x:.4*Math.sin(z*I(n,3.8)),y:-.55};break;case`working`:i={x:.55+.04*Math.sin(z*I(n,4.6)),y:.45+.02*Math.cos(z*I(n,3.9))};break;case`attentive`:i={x:i.x*.5,y:.35};break;case`sad`:i={x:i.x*.3,y:.5};break;case`sleepy`:i={x:0,y:.4}}let a=1-Math.exp(-r*9);this.currentGaze.x+=(i.x-this.currentGaze.x)*a,this.currentGaze.y+=(i.y-this.currentGaze.y)*a,e.gaze={...this.currentGaze}}applyBlinks(e,t){if(!(e.happyEyes>=.6))for(let n of this.blinkStarts){let r=(t-n)/Ct;if(r<0||r>1)continue;let i=R(r);e.leftEyeOpenness=Math.min(e.leftEyeOpenness,1-i),e.rightEyeOpenness=Math.min(e.rightEyeOpenness,1-i),e.eyeGlowOpacity*=Math.max(.3,1-i)}}applyGesture(e,t,n){let r=F(n);switch(e){case`wave`:{let e=vt(r,.18,.82);t.rightClawDegrees+=e*(-28+9*Math.sin(r*6*Math.PI)),t.bodyTilt+=-2*e,t.mouthCurve=Math.max(t.mouthCurve,.5*e);break}case`hop`:{let e=R(F((r-.2)/.6));t.floatOffset+=-9*e,t.bodyStretch+=.045*e-.1*R(F(r/.2))-.06*R(F((r-.82)/.18)),t.mouthCurve=Math.max(t.mouthCurve,.4*e);break}case`celebrate`:{let e=vt(r,.12,.88),n=Math.abs(Math.sin(r*4*Math.PI));t.floatOffset+=-11*n*e,t.bodyStretch+=.035*n*e,t.leftClawDegrees+=38*e,t.rightClawDegrees+=-38*e,t.happyEyes=Math.max(t.happyEyes,e),t.mouthCurve=Math.max(t.mouthCurve,e),t.mouthOpen=Math.max(t.mouthOpen,.6*R(r)),t.antennaDroop=0,t.glowScale=Math.max(t.glowScale,1+.2*e),t.effect=`sparkles`,t.effectPhase=r;break}case`sigh`:{let e=L(F(r/.3)),n=L(F((r-.3)/.45));t.bodyStretch+=.025*e-.08*n*(1-F((r-.85)/.15)),t.gaze={x:t.gaze.x,y:.5*n},t.antennaDroop=Math.min(1,t.antennaDroop+.15*n);break}case`yawn`:{let e=vt(r,.3,.75);t.mouthRound=Math.max(t.mouthRound,.9*e),t.leftEyeOpenness=Math.min(t.leftEyeOpenness,1-.9*e),t.rightEyeOpenness=Math.min(t.rightEyeOpenness,1-.9*e),t.bodyStretch+=.03*e,t.bodyTilt+=-2*e;break}case`clawSnap`:t.leftClawDegrees+=-8*R(F(r/.7)),t.rightClawDegrees+=-8*R(F((r-.25)/.7));break;case`donHardHat`:{let e=L(F(r/.55));t.hardHat=Math.min(t.hardHat,e),r<.55&&(t.gaze={x:0,y:-.9*(1-r)}),t.bodyStretch-=.04*R(F((r-.5)/.2));let n=R(F((r-.7)/.3));t.leftClawDegrees+=-8*n,t.rightClawDegrees+=8*n;break}case`wipeBrow`:{let e=vt(r,.2,.8);t.leftClawDegrees*=1-e,t.rightClawDegrees*=1-e,t.leftClawDegrees+=38*e*(.9+.1*Math.sin(r*5*Math.PI)),t.bodyTilt*=1-e,t.bodyStretch+=.02*e,t.happyEyes=Math.max(t.happyEyes,.7*e),t.mouthCurve=Math.max(t.mouthCurve,.5*e),t.gaze={x:t.gaze.x*(1-e),y:t.gaze.y*(1-e)},t.effect=`sweat`,t.effectPhase=r;break}}}entranceGesture(e){switch(e){case`happy`:return`hop`;case`celebrating`:return`celebrate`;case`sad`:return`sigh`;case`sleepy`:return`yawn`;case`working`:return`donHardHat`;case`idle`:case`curious`:case`thinking`:case`attentive`:return null}return null}startGesture(e,t){this.activeGesture=e,this.activeGestureStart=t}random(e,t){return e+(t-e)*this.rng.unit()}blinkInterval(){return this.currentMood===`attentive`?this.random(1.8,4):this.random(2.2,5.5)}glanceInterval(){return this.currentMood===`curious`?this.random(1.6,4):this.currentMood===`thinking`?this.random(1.2,3):this.random(3,8)}randomGlanceTarget(){let e=this.random(.5,1),t=this.random(0,z);return{x:Math.cos(t)*e,y:Math.sin(t)*e*.6}}rescheduleMoodBeat(e){this.nextMoodBeatAt=e+this.random(6,12)}}})))()}function Ot(){if(K)return K;let e=new Path2D;e.moveTo(60,10),e.bezierCurveTo(30,10,15,35,15,55),e.bezierCurveTo(15,75,30,95,45,100),e.lineTo(45,110),e.lineTo(55,110),e.lineTo(55,100),e.bezierCurveTo(55,100,60,102,65,100),e.lineTo(65,110),e.lineTo(75,110),e.lineTo(75,100),e.bezierCurveTo(90,95,105,75,105,55),e.bezierCurveTo(105,35,90,10,60,10),e.closePath();let t=new Path2D;t.moveTo(20,45),t.bezierCurveTo(5,40,0,50,5,60),t.bezierCurveTo(10,70,20,65,25,55),t.bezierCurveTo(28,48,25,45,20,45),t.closePath();let n=new Path2D;n.moveTo(100,45),n.bezierCurveTo(115,40,120,50,115,60),n.bezierCurveTo(110,70,100,65,95,55),n.bezierCurveTo(92,48,95,45,100,45),n.closePath();let r=new Path2D;r.moveTo(45,15),r.quadraticCurveTo(35,5,30,8);let i=new Path2D;return i.moveTo(75,15),i.quadraticCurveTo(85,5,90,8),K={body:{path:e,bounds:{minX:15,minY:10,maxX:105,maxY:110}},leftClaw:{path:t,bounds:{minX:3.125,minY:43.67006838144548,maxX:26.196938456699073,maxY:65.45084971874738}},rightClaw:{path:n,bounds:{minX:93.80306154330093,minY:43.67006838144548,maxX:116.875,maxY:65.45084971874738}},leftAntenna:r,rightAntenna:i},K}function kt(e,t,n){let{bounds:r}=t,i=e.createLinearGradient(r.minX,r.minY,r.maxX,r.maxY);return i.addColorStop(0,n.gradientTop),i.addColorStop(1,n.gradientBottom),i}function At(e){return e*Math.PI/180}function jt(e){let t=H(e,0,1);return t*t*(3-2*t)}function Mt(e){let t=H(e,0,1);return jt(t<.5?t*2:(1-t)*2)}function B(e,t,n,r){e.save(),e.translate(n.x,n.y),e.rotate(At(t)),e.translate(-n.x,-n.y),r(),e.restore()}function V(e,t,n){let r=new Path2D;return r.ellipse(e.x,e.y,t,n,0,0,Ht),r}function Nt(e,t,n,r,i){let a=new Path2D,o=e+n,s=t+r;return a.moveTo(e+i,t),a.lineTo(o-i,t),a.quadraticCurveTo(o,t,o,t+i),a.lineTo(o,s-i),a.quadraticCurveTo(o,s,o-i,s),a.lineTo(e+i,s),a.quadraticCurveTo(e,s,e,s-i),a.lineTo(e,t+i),a.quadraticCurveTo(e,t,e+i,t),a.closePath(),a}function Pt(e,t,n,r){let i={x:t.x+r.gaze.x*2,y:t.y+r.gaze.y*1.5};if(r.happyEyes<1){let t=Math.max(1.2,12*n*(1-.6*r.happyEyes));e.save(),e.globalAlpha*=1-r.happyEyes,e.fillStyle=W,e.fill(V({x:i.x,y:i.y-6+(12-t)*.65+t/2},6,t/2)),e.restore()}if(r.happyEyes>0){let t=new Path2D;t.moveTo(i.x-6,i.y+2),t.quadraticCurveTo(i.x,i.y-5.5,i.x+6,i.y+2),e.save(),e.globalAlpha*=r.happyEyes,e.strokeStyle=W,e.lineWidth=2.6,e.lineCap=`round`,e.stroke(t),e.restore()}if(r.dizzy>0){let n=r.dizzyPhase*Ht+(t.x>60?Math.PI:0),a={x:i.x+Math.cos(n)*3.4,y:i.y+Math.sin(n)*2.6};e.save(),e.globalAlpha*=r.dizzy,e.fillStyle=G,e.fill(V(a,1.8,1.8)),e.restore()}let a=r.eyeGlowOpacity*n*(1-r.happyEyes)*(1-r.dizzy);if(a<=.01)return;let o=2*r.glowScale,s={x:i.x+1+r.gaze.x*1.2,y:i.y-1+r.gaze.y*.9};e.save(),e.globalAlpha*=a,e.fillStyle=G,e.fill(V(s,o,o)),e.restore()}function Ft(e,t){if(e.fillStyle=W,e.strokeStyle=W,e.lineCap=`round`,t.mouthRound>.05){let n=1+3.2*t.mouthRound,r=1+4.2*t.mouthRound;e.fill(V({x:60,y:51},n,r));return}if(t.mouthOpen>.05){let n=new Path2D;n.moveTo(52.5,48.5),n.quadraticCurveTo(60,48.5+14*t.mouthOpen,67.5,48.5),n.closePath(),e.fill(n);return}if(Math.abs(t.mouthCurve)<=.05)return;let n=new Path2D;n.moveTo(52.5,49),n.quadraticCurveTo(60,49+8*t.mouthCurve,67.5,49),e.lineWidth=2.2,e.stroke(n)}function It(e,t){t.blush<=.02||(e.save(),e.globalAlpha*=t.blush*.55,e.fillStyle=Ut,e.fill(V({x:37,y:45},4.5,2.5)),e.fill(V({x:83,y:45},4.5,2.5)),e.restore())}function Lt(e,t){if(t<=.01)return;let n=new Path2D;n.moveTo(45,15),n.bezierCurveTo(47,7,54,3,60,3),n.bezierCurveTo(66,3,73,7,75,15),n.lineTo(45,15),n.closePath();let r=Nt(41,14,38,5,2);e.save(),e.globalAlpha*=t,e.translate(60,15-14*(1-t)),e.rotate(At(-5)),e.translate(-60,-15);let i=e.createLinearGradient(60,3,60,16);i.addColorStop(0,Gt),i.addColorStop(1,Wt),e.fillStyle=i,e.fill(n),e.strokeStyle=Kt,e.lineWidth=.8,e.stroke(n),e.fillStyle=Wt,e.fill(r),e.stroke(r),e.restore()}function Rt(e,t){let n=new Path2D;n.moveTo(e.x,e.y-t);for(let[r,i]of[[1,0],[0,1],[-1,0],[0,-1]])n.quadraticCurveTo(e.x,e.y,e.x+t*r,e.y+t*i);return n.closePath(),n}function zt(e,t,n,r){let i=new Path2D,a=n*.62,o=n*.78;i.moveTo(t.x-a/2,t.y-o/2),i.lineTo(t.x+a/2,t.y-o/2),i.lineTo(t.x-a/2,t.y+o/2),i.lineTo(t.x+a/2,t.y+o/2),e.save(),e.globalAlpha*=r*.9,e.strokeStyle=G,e.lineWidth=Math.max(1.2,n*.16),e.lineCap=`round`,e.lineJoin=`round`,e.stroke(i),e.restore()}function Bt(e,t,n){switch(t.effect){case`none`:return;case`sparkles`:for(let r=0;r<6;r+=1){let i=Mt((t.effectPhase+r*.37)%1);if(i<=.05)continue;let a=Math.PI+Math.PI*(r+.5)/6,o={x:60+Math.cos(a)*(50+r%3*4),y:55+Math.sin(a)*(40+r*5%3*4)};e.save(),e.globalAlpha*=i,e.fillStyle=r%2==0?G:n.antenna,e.fill(Rt(o,2.5+2*i)),e.restore()}return;case`zzz`:for(let n=0;n<3;n+=1){let r=(t.effectPhase+n*.33)%1,i=r<.2?r/.2:1-(r-.2)/.8;i<=.05||zt(e,{x:86+14*r+2*Math.sin(r*4*Math.PI),y:24-20*r},6+4*r,i)}return;case`sparks`:for(let n=0;n<5;n+=1){let r=t.effectPhase-n*.025;if(r<0||r>=.45)continue;let i=r<.08?r/.08:1-(r-.08)/.37,a=At(-160+n*35),o=5+12*r/.45,s=2.2+n%3*.8,c={x:H(106+Math.cos(a)*o,s,U-s),y:H(66+Math.sin(a)*o,s,U-s)};e.save(),e.globalAlpha*=i,e.fillStyle=n%2==0?G:Wt,e.fill(Rt(c,s)),e.restore()}return;case`sweat`:{let n=Mt(t.effectPhase);if(n<=.02)return;let r={x:42,y:24+7*t.effectPhase},i=new Path2D;i.moveTo(r.x,r.y-3),i.bezierCurveTo(r.x-4,r.y+1,r.x-2,r.y+3,r.x,r.y+3),i.bezierCurveTo(r.x+2,r.y+3,r.x+4,r.y+1,r.x,r.y-3),e.save(),e.globalAlpha*=n,e.fillStyle=`#80d4ff`,e.fill(i),e.restore()}}}function H(e,t,n){return Math.min(Math.max(e,t),n)}function Vt(e,t,n,r){let i=Ot();if(n.save(),n.scale(r/U,r/U),e.bodyStretch!==1){let t=H(1+(1-e.bodyStretch)*.5,.97,1.03);n.translate(60,110),n.scale(t,e.bodyStretch),n.translate(-60,-110)}e.bodyTilt!==0&&(n.translate(60,60),n.rotate(At(e.bodyTilt)),n.translate(-60,-60)),n.fillStyle=kt(n,i.body,t),n.fill(i.body.path),B(n,e.leftClawDegrees,{x:26,y:53},()=>{n.fillStyle=kt(n,i.leftClaw,t),n.fill(i.leftClaw.path)}),B(n,e.rightClawDegrees,{x:94,y:53},()=>{n.fillStyle=kt(n,i.rightClaw,t),n.fill(i.rightClaw.path)});let a=e.antennaDegrees*(1-e.antennaDroop);n.strokeStyle=t.antenna,n.lineWidth=2,n.lineCap=`round`,B(n,-e.antennaDroop*40,{x:45,y:15},()=>{B(n,a,{x:37.5,y:11},()=>n.stroke(i.leftAntenna))}),B(n,e.antennaDroop*40,{x:75,y:15},()=>{B(n,a,{x:82.5,y:11},()=>n.stroke(i.rightAntenna))}),Lt(n,e.hardHat),It(n,e),Pt(n,{x:45,y:35},e.leftEyeOpenness,e),Pt(n,{x:75,y:35},e.rightEyeOpenness,e),Ft(n,e),Bt(n,e,t),n.restore()}var U,Ht,W,G,Ut,Wt,Gt,Kt,K;function qt(){return(qt=e((()=>{U=120,Ht=Math.PI*2,W=`#050810`,G=`#00e5cc`,Ut=`#ff9eae`,Wt=`#f2a833`,Gt=`#ffd659`,Kt=`rgba(184, 115, 31, 0.7)`,K=null})))()}function q(){return performance.now()/1e3}var Jt,Yt,J;function Xt(){return(Xt=e((()=>{g(),h(),Dt(),qt(),_t(),Jt=120,Yt=new Set([`idle`,`curious`,`thinking`,`working`,`happy`,`celebrating`,`sad`,`sleepy`,`attentive`]),J=class extends o{constructor(...e){super(...e),this.mood=`idle`,this.size=Jt,this.tease=!1,this.animator=new Et,this.animationFrame=0,this.visible=!0,this.reducedMotion=!1,this.lastPose=pt(`idle`),this.intersectionObserver=null,this.themeObserver=null,this.motionQuery=null,this.handleVisibilityChange=()=>this.syncPlayback(),this.handleMotionChange=e=>{this.reducedMotion=e.matches,this.syncPlayback()},this.renderAnimationFrame=e=>{this.animationFrame=0,this.shouldAnimate&&(this.drawCurrentFrame(e/1e3),this.animationFrame=window.requestAnimationFrame(this.renderAnimationFrame))}}static{this.styles=de`
    :host {
      display: inline-block;
      width: var(--openclaw-mascot-size, 120px);
      height: var(--openclaw-mascot-size, 120px);
      overflow: visible;
      contain: layout style;
      pointer-events: none;
      line-height: 0;
    }

    canvas {
      display: block;
      width: 100%;
      height: 100%;
      will-change: transform;
    }
  `}connectedCallback(){super.connectedCallback(),this.setAttribute(`aria-hidden`,`true`),document.addEventListener(`visibilitychange`,this.handleVisibilityChange),this.motionQuery=window.matchMedia?.(`(prefers-reduced-motion: reduce)`)??null,this.reducedMotion=this.motionQuery?.matches??!1,this.motionQuery?.addEventListener(`change`,this.handleMotionChange),typeof IntersectionObserver<`u`&&(this.intersectionObserver=new IntersectionObserver(e=>{this.visible=e.some(e=>e.isIntersecting),this.syncPlayback()}),this.intersectionObserver.observe(this)),typeof MutationObserver<`u`&&(this.themeObserver=new MutationObserver(()=>this.drawPose(this.lastPose)),this.themeObserver.observe(document.documentElement,{attributes:!0,attributeFilter:[`data-theme-mode`]}))}disconnectedCallback(){this.stopAnimation(),document.removeEventListener(`visibilitychange`,this.handleVisibilityChange),this.motionQuery?.removeEventListener(`change`,this.handleMotionChange),this.motionQuery=null,this.intersectionObserver?.disconnect(),this.intersectionObserver=null,this.themeObserver?.disconnect(),this.themeObserver=null,super.disconnectedCallback()}firstUpdated(){this.animator.setMood(this.resolvedMood,q()),this.animator.setTease(this.tease,q()),this.drawCurrentFrame(q()),this.syncPlayback()}updated(e){e.has(`size`)&&this.style.setProperty(`--openclaw-mascot-size`,`${this.resolvedSize}px`),e.has(`mood`)&&this.animator.setMood(this.resolvedMood,q()),e.has(`tease`)&&this.animator.setTease(this.tease,q()),(e.has(`size`)||e.has(`mood`)||e.has(`tease`))&&(this.drawCurrentFrame(q()),this.syncPlayback())}catchOnce(){if(!this.isConnected||this.reducedMotion)return;let e=q();this.animator.playCatch(e),this.drawCurrentFrame(e),this.syncPlayback()}render(){return v`<canvas></canvas>`}get resolvedMood(){return Yt.has(this.mood)?this.mood:`idle`}get resolvedSize(){return Number.isFinite(this.size)&&this.size>0?this.size:Jt}get shouldAnimate(){return this.isConnected&&this.visible&&!this.reducedMotion&&document.visibilityState!==`hidden`}syncPlayback(){if(this.renderRoot.querySelector(`canvas`)){if(this.reducedMotion){this.stopAnimation(),this.lastPose=pt(this.resolvedMood),this.drawPose(this.lastPose);return}if(!this.shouldAnimate){this.stopAnimation();return}this.animationFrame===0&&(this.animationFrame=window.requestAnimationFrame(this.renderAnimationFrame))}}stopAnimation(){this.animationFrame!==0&&(window.cancelAnimationFrame(this.animationFrame),this.animationFrame=0)}drawCurrentFrame(e){this.lastPose=this.reducedMotion?pt(this.resolvedMood):this.animator.poseAt(e),this.drawPose(this.lastPose)}drawPose(e){let t=this.renderRoot.querySelector(`canvas`);if(!(t instanceof HTMLCanvasElement)||typeof Path2D>`u`)return;let n=t.getContext(`2d`);if(!n)return;let r=this.resolvedSize,i=Math.max(1,window.devicePixelRatio||1),a=Math.round(r*i);(t.width!==a||t.height!==a)&&(t.width=a,t.height=a),n.setTransform(i,0,0,i,0,0),n.clearRect(0,0,r,r),Vt(e,mt(document.documentElement.dataset.themeMode===`light`),n,r),t.style.transform=`translate3d(0, ${e.floatOffset*r/120}px, 0)`}},u([b({reflect:!0})],J.prototype,`mood`,void 0),u([b({type:Number})],J.prototype,`size`,void 0),u([b({type:Boolean})],J.prototype,`tease`,void 0),customElements.get(`openclaw-mascot`)||customElements.define(`openclaw-mascot`,J)})))()}function Zt(){return v`
    <section
      class="lazy-view-state lazy-view-state--loading"
      role="status"
      aria-live="polite"
      aria-label=${C(`common.loading`)}
    >
      <openclaw-mascot mood="thinking" .size=${120}></openclaw-mascot>
    </section>
  `}function Qt(){return(Qt=e((()=>{g(),w(),Xt()})))()}function $t(e,t,n){return e.status===`loading`?Zt():tn({actionLabel:C(`common.retry`),error:e.error,stale:e.stale,subtitle:e.element.label,onRetry:t,onClose:n})}function en(e){let t=e.visibleState;if(!t)return y;let n=()=>e.close();return v`<openclaw-modal-dialog label=${t.element.label} @modal-cancel=${n}>
    ${$t(t,()=>e.retry(),n)}
  </openclaw-modal-dialog>`}function tn({actionLabel:e,error:t,onClose:n,onRetry:r,render:i,stale:a=!1,subtitle:o}){let s=p(t);return v`
    ${i?.()??y}
    ${nn({title:C(a?`lazyView.staleTitle`:`lazyView.errorTitle`),subtitle:o??C(a?`lazyView.staleSubtitle`:`lazyView.genericSubtitle`),actions:v`
        <button class="btn lazy-view-error__action" @click=${r}>
          ${e??C(a?`common.reload`:`lazyView.retry`)}
        </button>
        ${n?v`<button class="btn" type="button" @click=${n}>
                ${C(`common.close`)}
              </button>`:y}
      `,detail:s,inline:!!i,stale:a})}
  `}function nn({actions:e,className:t,detail:n,inline:r=!1,role:i=`alert`,stale:a=!1,subtitle:o,title:s}){let c=`lazy-view-error${r?` lazy-view-error--inline`:``}${a?` lazy-view-error--stale`:``}${t?` ${t}`:``}`;return v`
    <div class=${c} role=${i}>
      <div class="lazy-view-error__icon" aria-hidden="true">
        ${Ue(a?`refresh`:`alertTriangle`)}
      </div>
      <div class="lazy-view-error__title">${s}</div>
      <div class="lazy-view-error__subtitle">${o}</div>
      ${e?v`<div class="lazy-view-error__actions">${e}</div>`:y}
      ${n?v`<code class="lazy-view-error__detail">${n}</code>`:y}
    </div>
  `}function rn(){return(rn=e((()=>{g(),w(),te(),D(),Qt()})))()}function an(e){return typeof Reflect.get(e,`restartAfterTeardown`)==`function`&&typeof Reflect.get(e,`teardown`)==`function`}function on(e,t=`mcp-app-view`){let n=new Set;for(let r of e){r instanceof Element&&r.matches(t)&&an(r)&&n.add(r);for(let e of r.querySelectorAll(t))an(e)&&n.add(e)}return[...n]}var sn;function cn(){return(cn=e((()=>{sn=class{constructor(e,t=`mcp-app-view`){this.host=e,this.selector=t,this.renderedKey=null,this.pending=!1,this.restartTargets=null}apply(e,t){return this.renderedValue=t(),this.renderedKey=e,this.renderedValue}render(e,t,n,r={}){if(this.pending)return this.renderedValue;if(this.restartTargets){let n=this.restartTargets;return this.restartTargets=null,queueMicrotask(()=>{for(let e of n)e.isConnected&&e.restartAfterTeardown()}),this.renderedKey===e&&r.retainRenderedValue?this.renderedValue:this.apply(e,t)}if(this.renderedKey===e&&r.retainRenderedValue)return this.renderedValue;if(this.renderedKey===null||this.renderedKey===e)return this.apply(e,t);let i=on(n(),this.selector);return i.length===0?this.apply(e,t):(this.pending=!0,Promise.allSettled(i.map(e=>e.teardown())).then(()=>{this.pending=!1,this.restartTargets=i,this.host.requestUpdate()}),this.renderedValue)}}})))()}function ln(e){return n(e)&&e.type===`sw-updated`&&typeof e.version==`string`&&e.version!==Y.buildId}function un(e){if(e.controlUiBuildSource===`configured`)return!1;let t=Y.buildId?.trim(),n=e.buildId?.trim();if(t&&t!==`dev`&&n)return t!==n;let r=Y.version?.trim(),i=e.version?.trim();return!!(r&&i&&r!==i)}var Y;function dn(){return(dn=e((()=>{Y={version:`2026.9.2`,commit:`3928bad9badfcb6c7d140530435e806fb8092190`,builtAt:`2026-09-05T15:22:41.651Z`,release:!0,commitAt:`2026-09-05T15:18:40.000Z`,branch:`release-ci/bcecb3d1d19a-1788621607819`,dirty:!0,buildId:`2026.9.2-release-3928bad9badf-2026-09-05T15-22-41.651Z`}})))()}function fn(e){if(!e.pendingGatewayUrl)return y;let t=C(`channels.gatewayUrlConfirmation.title`),n=C(`channels.gatewayUrlConfirmation.subtitle`);return v`
    <openclaw-modal-dialog
      label=${t}
      description=${n}
      @modal-cancel=${e.onCancel}
    >
      <div class="exec-approval-card">
        <div class="exec-approval-header">
          <div>
            <div id=${`gateway-url-confirmation-title`} class="exec-approval-title">${t}</div>
            <div id=${`gateway-url-confirmation-description`} class="exec-approval-sub">${n}</div>
          </div>
        </div>
        <div class="exec-approval-command mono">${e.pendingGatewayUrl}</div>
        <div class="callout danger" style="margin-top: 12px;">
          ${C(`channels.gatewayUrlConfirmation.warning`)}
        </div>
        <div class="exec-approval-actions">
          <button class="btn primary" @click=${e.onConfirm}>${C(`common.confirm`)}</button>
          <button class="btn" @click=${e.onCancel}>${C(`common.cancel`)}</button>
        </div>
      </div>
    </openclaw-modal-dialog>
  `}var pn;function mn(){return(mn=e((()=>{g(),h(),w(),m(),ct(),pn=class extends ue{render(){return this.props?fn(this.props):y}},u([b({attribute:!1})],pn.prototype,`props`,void 0),customElements.get(`openclaw-gateway-url-confirmation`)||customElements.define(`openclaw-gateway-url-confirmation`,pn)})))()}function hn(e){try{let t=decodeURIComponent(e).trim();return t&&t!==`.`&&t!==`..`?t:null}catch{return null}}function gn(e){let t=e.pathname.split(`/`).filter(Boolean),n=hn(t[0]??``),r=hn(t[1]??``),i=t[2],a=t[3]??``;if(!n||!r||!/^[1-9]\d{0,9}$/.test(a))return null;let o=i===`issues`?`issue`:i===`pull`?`pull`:null;return o?{kind:o,number:Number(a),owner:n,repo:r}:null}function _n(e){let t;try{t=new URL(e)}catch{return null}if(!t.href.startsWith(bn))return null;let n=gn(t);return n?{...n,href:t.href}:null}function vn(e){return`${bn}${encodeURIComponent(e)}`}function yn(e){for(let t of e.composedPath()){if(t instanceof HTMLAnchorElement)return t;if(t===e.currentTarget)break}return null}var bn;function xn(){return(xn=e((()=>{bn=`https://github.com/`})))()}function Sn(e){let t={focus:t=>void e(t,`focus`),pointer:t=>void e(t,`pointer`)};return document.addEventListener(`pointerover`,t.pointer,!0),document.addEventListener(`focusin`,t.focus,!0),()=>{document.removeEventListener(`pointerover`,t.pointer,!0),document.removeEventListener(`focusin`,t.focus,!0)}}function Cn(e,t,n=!1){return t===`pointer`?e.matches(`:hover`):n?document.activeElement instanceof Node&&e.contains(document.activeElement):document.activeElement===e}function wn(e,t){return Math.max(0,t-(performance.now()-e))}var Tn;function En(){return(En=e((()=>{be(),Tn=class{constructor(e){this.params=e,this.stopListeners=null}install(e){customElements.get(this.params.tag)||(this.stopListeners=Sn(e))}providerFor(e){return e.closest(this.params.tag)}async define(){await he(this.params.tag,async()=>{let e=await this.params.load();customElements.get(this.params.tag)||customElements.define(this.params.tag,e)}),this.stopListeners?.(),this.stopListeners=null,this.params.onDefined?.()}}})))()}async function Dn(e,t){if(t===`pointer`&&e.pointerType===`touch`)return;let n=yn(e),r=n?_n(n.href):null;if(!n||!r||!X.providerFor(n))return;let i=performance.now();await X.define();let a=X.providerFor(n);if(!a||!n.isConnected||!Cn(n,t))return;let o=t===`pointer`?wn(i,250):0;a.activateFromBootstrap(n,r,t,o)}var X;function On(){return(On=e((()=>{xn(),En(),a(),X=new Tn({tag:`openclaw-github-link-hovercard-provider`,load:async()=>(await c(async()=>{let{GitHubLinkHovercardProvider:e}=await import(`./github-link-hovercard.runtime-_UamOvxd.js`);return{GitHubLinkHovercardProvider:e}},__vite__mapDeps([21,1,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38]),import.meta.url)).GitHubLinkHovercardProvider}),X.install(Dn)})))()}function kn(e){return e.hasAttribute(`aria-label`)||e.hasAttribute(`aria-labelledby`)||e.matches(`img[alt], input[alt]`)||Je(e).trim()?!1:e instanceof HTMLInputElement||e instanceof HTMLTextAreaElement||e instanceof HTMLSelectElement?!e.labels?.length&&!e.matches(`input[type="button"], input[type="submit"], input[type="reset"]`):!0}function An(e){let t=null,n=null,r=()=>{if(!n)return;let{anchor:e,title:r,label:i}=n;n=null,a.disconnect(),e.removeEventListener(`pointerleave`,o),e.removeEventListener(`focusout`,s),r!==null&&e.getAttribute(`title`)===``&&e.setAttribute(`title`,r),i!==null&&e.getAttribute(`aria-label`)===i&&e.removeAttribute(`aria-label`),t&&(t.anchor=null,t.remove())},i=()=>n?.anchor.matches(`[aria-haspopup="dialog"][aria-expanded="true"]`)?``:n?.anchor.getAttribute(`data-tooltip`)??n?.title??``,a=new MutationObserver(e=>{if(n){if(!n.anchor.isConnected){r();return}e.some(e=>n?.anchor.contains(e.target))&&(e.some(e=>e.target===n?.anchor&&e.attributeName===`title`)&&(n.title=n.anchor.getAttribute(`title`),n.title!==null&&(n.anchor.setAttribute(`title`,``),a.takeRecords())),n.label!==null&&n.anchor.getAttribute(`aria-label`)===n.label&&(n.anchor.removeAttribute(`aria-label`),n.label=null),n.title&&kn(n.anchor)&&(n.label=n.title,n.anchor.setAttribute(`aria-label`,n.label)),t&&(t.content=i()))}}),o=e=>{!n||e.target!==n.anchor||(n.pointer=!1,n.focus||r())},s=e=>{!n||e instanceof FocusEvent&&e.relatedTarget instanceof Node&&n.anchor.contains(e.relatedTarget)||(n.focus=!1,n.pointer||r())},c=c=>{if(`pointerType`in c&&c.pointerType===`touch`)return;let l=c.composedPath().filter(Ge),u=l.some(e=>e.localName===`openclaw-tooltip`),d;for(let e of l){if(e.localName===`iframe`)break;let t=e===n?.anchor?n.title:e.getAttribute(`title`),r=e.getAttribute(`data-tooltip`)??t;if(r!==null){d=r?e:void 0;break}}let f=c.type===`focusin`?`focus`:`pointer`;if(d===n?.anchor){n&&(n[f]=!0);return}if(!d&&n?.focus&&f===`pointer`||(r(),!d))return;let p=d.getAttribute(`title`),ee=p&&kn(d)?p:null;n={anchor:d,title:p,label:ee,pointer:f===`pointer`,focus:f===`focus`},p!==null&&d.setAttribute(`title`,``),ee!==null&&d.setAttribute(`aria-label`,ee),d.addEventListener(`pointerleave`,o),d.addEventListener(`focusout`,s),a.observe(d,{attributes:!0,attributeFilter:[`title`,`data-tooltip`,`aria-hidden`,`aria-haspopup`,`aria-expanded`],characterData:!0,subtree:!0}),a.observe(e,{childList:!0,subtree:!0});let te=d.getRootNode();te instanceof ShadowRoot&&a.observe(te,{childList:!0,subtree:!0}),u||(t??=e.createElement(`openclaw-tooltip`),(l.find(e=>e.localName===`openclaw-modal-dialog`)??e.body).append(t),t.previewForAnchor(d,i(),f))};return e.addEventListener(`pointerover`,c,!0),e.addEventListener(`focusin`,c,!0),()=>{e.removeEventListener(`pointerover`,c,!0),e.removeEventListener(`focusin`,c,!0),r()}}function jn(){return(jn=e((()=>{A()})))()}function Mn(e){if(!zn.test(e))return;let[t=``,n]=e.toLowerCase().split(`e`),r=t.startsWith(`-`),[i=``,a=``]=(r?t.slice(1):t).split(`.`),o=`${i||`0`}${a}`;if(/^0+$/u.test(o))return{numerator:0n,denominator:1n};let s=Number(n??0);if(!Number.isSafeInteger(s))return;let c=a.length-s;if(o.length>Bn||Math.abs(c)>Bn)return;let l=BigInt(o),u=c<0?l*10n**BigInt(-c):l;return{numerator:r?-u:u,denominator:c>0?10n**BigInt(c):1n}}function Nn(e,t){return e.numerator*t.denominator===t.numerator*e.denominator}function Pn(e){let t=e.trim();return t!==``&&zn.test(t)}function Fn(e){let t=e.trim();return/^-?\d+$/u.test(t)&&!Number.isSafeInteger(Number(t))}function In(e,t){let n=e.trim();if(n===``)return;if(!Pn(n))return e;let r=Number(n);if(!Number.isFinite(r)||t&&!Number.isInteger(r))return e;let i=Mn(n);if(!i)return e;let a=Number.isInteger(r)?void 0:Rn(r);return(Number.isInteger(r)?i.numerator===BigInt(r)*i.denominator:a&&Nn(i,a))?r:e}function Ln(e){return Number.isInteger(e)?BigInt(e).toString():String(e)}function Rn(e){if(Number.isFinite(e))return Mn(String(e))}var zn,Bn;function Vn(){return(Vn=e((()=>{zn=/^-?(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?$/u,Bn=1024})))()}function Hn(e){if(e.setAttribute(`popover`,`manual`),typeof e.showPopover==`function`)try{e.showPopover();return}catch{}e.removeAttribute(`popover`)}var Un;function Wn(){return(Wn=e((()=>{Un=class extends HTMLElement{connectedCallback(){Hn(this)}},customElements.get(`openclaw-menu-surface`)||customElements.define(`openclaw-menu-surface`,Un)})))()}function Gn(e,t){if(e.key===`Tab`){t?.();return}e.key===`Escape`&&e.currentTarget&&tr.add(e.currentTarget)}function Kn(e){let t=e.currentTarget;return!t||!tr.has(t)?!1:(tr.delete(t),!0)}function qn(e,t){if(!(e instanceof HTMLElement)||e.localName!==`wa-dropdown-item`)return;let n=e;Promise.resolve(n.updateComplete).then(()=>{n.isConnected&&(n.setAttribute(`role`,`menuitemradio`),n.setAttribute(`aria-checked`,String(t)))})}function Jn(e){let t=e.shadowRoot?.querySelector(`[part="menu"]`);if(!t)return;let n=e.getAttribute(`aria-label`);if(n){t.setAttribute(`aria-label`,n),t.removeAttribute(`aria-labelledby`);return}let r=e.querySelector(`[slot="trigger"]`),i=r?.getAttribute(`aria-label`)??r?.textContent?.trim();i&&(t.setAttribute(`aria-label`,i),t.removeAttribute(`aria-labelledby`))}function Yn(e){let t=e.shadowRoot?.querySelector(`[part="submenu"]`);if(!t)return;let n=(e.shadowRoot?.querySelector(`slot:not([name])`))?.assignedNodes({flatten:!0}).map(e=>e.textContent).join(` `).replace(/\s+/gu,` `).trim(),r=e.getAttribute(`aria-label`)??n;r&&(t.setAttribute(`aria-label`,r),t.removeAttribute(`aria-labelledby`))}function Xn(e){e.querySelectorAll(`wa-dropdown-item`).forEach(Yn)}function Zn(e){let t=e.detail?.item;if(!(t instanceof HTMLElement)||t.localName!==`wa-dropdown-item`)return;let n=`updateComplete`in t?t.updateComplete:void 0;Promise.resolve(n).then(()=>{t.isConnected&&Yn(t)})}function Qn(e){let t=e.composedPath()[0];if(!(t instanceof HTMLElement)||t.localName!==`wa-dropdown`||(t.shadowRoot?.querySelector(`[part="menu"]`)?.removeAttribute(`inert`),Jn(t),Xn(t),Z.get(t)?.disconnect(),typeof MutationObserver>`u`))return;let n=new MutationObserver(()=>{Jn(t),Xn(t)});n.observe(t,{attributes:!0,attributeFilter:[`aria-label`],childList:!0,characterData:!0,subtree:!0}),Z.set(t,n)}function $n(e){let t=e.composedPath()[0];!(t instanceof HTMLElement)||t.localName!==`wa-dropdown`||queueMicrotask(()=>{e.defaultPrevented||!t.isConnected||t.open||t.shadowRoot?.querySelector(`[part="menu"]`)?.setAttribute(`inert`,``)})}function er(e){let t=e.composedPath()[0];!(t instanceof HTMLElement)||t.localName!==`wa-dropdown`||(Z.get(t)?.disconnect(),Z.delete(t))}var tr,Z;function nr(){return(nr=e((()=>{i(),d(),tr=new WeakSet,Z=new WeakMap,typeof document<`u`&&(document.addEventListener(`wa-show`,Qn),document.addEventListener(`submenu-opening`,e=>{e instanceof CustomEvent&&Zn(e)},!0),document.addEventListener(`wa-hide`,$n),document.addEventListener(`wa-after-hide`,er))})))()}var rr;function ir(){return(ir=e((()=>{A(),nr(),rr=class{constructor(e,t){this.host=e,this.options=t,this.generation=0,this.handleDocumentKeydown=e=>{if(!(e.defaultPrevented||it(e,this.host.ownerDocument))&&(this.options.onKeydown?.(e),!e.defaultPrevented)){if(e.key!==`Escape`){e.key===`Tab`&&e.composedPath().some(e=>e instanceof Element&&e.localName===`wa-dropdown-item`&&this.host.contains(e))&&Gn(e,()=>this.options.getTrigger()?.focus());return}e.preventDefault(),e.stopPropagation(),this.options.getTrigger()?.focus(),this.options.onClose()}},e.addController(this)}hostConnected(){document.addEventListener(`keydown`,this.handleDocumentKeydown,!0);let e=++this.generation;this.focusFirstItem(e)}hostDisconnected(){this.generation+=1,document.removeEventListener(`keydown`,this.handleDocumentKeydown,!0)}async focusFirstItem(e){await this.host.updateComplete,await this.host.querySelector(`wa-dropdown`)?.updateComplete,this.host.isConnected&&e===this.generation&&this.host.querySelector(`wa-dropdown-item:not([disabled])`)?.focus()}}})))()}function ar(e){return v`<span slot="details" class="session-menu__shortcut" aria-hidden="true"
    >${e.toUpperCase()}</span
  >`}function or(e,t){if(t.metaKey||t.ctrlKey||t.altKey)return!1;let n=ce(t);if(!n)return!1;let r=e.querySelector(`[data-shortcut="${n}"]`);if(!r||r.disabled||r.getAttribute(`aria-disabled`)===`true`)return!1;let i=r.closest(`wa-dropdown-item:not([slot="submenu"])`);return r.getAttribute(`slot`)===`submenu`&&i?.submenuOpen!==!0?!1:(t.preventDefault(),t.stopPropagation(),r.click(),!0)}function sr(){return(sr=e((()=>{g(),se()})))()}var Q;function cr(){return(cr=e((()=>{g(),h(),w(),m(),ir(),D(),sr(),nr(),Q=class extends ie{constructor(...e){super(...e),this.x=0,this.y=0,this.trigger=null,this.onAction=()=>{},this.onClose=()=>{},this.menuLifecycle=new rr(this,{getTrigger:()=>this.trigger,onClose:()=>this.onClose(),onKeydown:e=>or(this,e)})}runAction(e){this.onClose(),this.onAction(e)}render(){let e=Math.max(8,Math.min(this.x,window.innerWidth-264-8)),t=Math.max(8,Math.min(this.y,window.innerHeight-136-8));return v`
      <wa-dropdown
        class="session-menu native-link-menu"
        .open=${!0}
        placement="bottom-start"
        .distance=${0}
        aria-label=${C(`nativeLinkMenu.label`)}
        @wa-select=${e=>{e.preventDefault();let t=e.detail.item.value;t&&(this.trigger?.focus(),this.runAction(t))}}
        @wa-after-hide=${()=>{this.onClose()}}
      >
        <button
          slot="trigger"
          type="button"
          tabindex="-1"
          aria-hidden="true"
          aria-label=${C(`nativeLinkMenu.label`)}
          style="position: fixed; left: ${e}px; top: ${t}px; width: 1px; height: 1px; opacity: 0; pointer-events: none;"
        ></button>
        <wa-dropdown-item
          class="session-menu__item"
          value="inline"
          data-shortcut="s"
          aria-keyshortcuts="S"
        >
          <span slot="icon" class="session-menu__icon" aria-hidden="true"
            >${E.panelRightOpen}</span
          >
          <span class="session-menu__text">${C(`nativeLinkMenu.openInline`)}</span>
          ${ar(`s`)}
        </wa-dropdown-item>
        <wa-dropdown-item
          class="session-menu__item"
          value="external"
          data-new-tab-action
          data-shortcut="b"
          aria-keyshortcuts="B"
        >
          <span slot="icon" class="session-menu__icon" aria-hidden="true"
            >${E.externalLink}</span
          >
          <span class="session-menu__text">${C(`nativeLinkMenu.openExternal`)}</span>
          ${ar(`b`)}
        </wa-dropdown-item>
        <div class="session-menu__separator" role="separator"></div>
        <wa-dropdown-item
          class="session-menu__item"
          value="copy"
          data-shortcut="c"
          aria-keyshortcuts="C"
        >
          <span slot="icon" class="session-menu__icon" aria-hidden="true">${E.copy}</span>
          <span class="session-menu__text">${C(`nativeLinkMenu.copy`)}</span>
          ${ar(`c`)}
        </wa-dropdown-item>
      </wa-dropdown>
    `}},u([b({attribute:!1})],Q.prototype,`x`,void 0),u([b({attribute:!1})],Q.prototype,`y`,void 0),u([b({attribute:!1})],Q.prototype,`trigger`,void 0),u([b({attribute:!1})],Q.prototype,`onAction`,void 0),u([b({attribute:!1})],Q.prototype,`onClose`,void 0),customElements.get(`openclaw-native-link-menu`)||customElements.define(`openclaw-native-link-menu`,Q)})))()}function lr(e){return oe(re.terminalPanel,e)}function ur(e){return oe(re.homePanel,e)}var dr,fr,pr,mr,hr,gr,_r,vr,yr;function br(){return(br=e((()=>{ne(),dr=`openclaw:terminal-toggle`,fr=`openclaw:terminal-dock-bottom`,pr=`openclaw:browser-toggle`,mr=`openclaw:desktop-toggle`,hr=`openclaw:home-toggle`,gr=`openclaw:custodian-toggle`,_r=`openclaw:debug-overlay-request`,vr=`openclaw:keyboard-shortcuts-request`,yr=`openclaw:ui-command`})))()}function xr(e){return`${Nr}${s(e)}`}function Sr(e){let t=f();if(!t)return{};try{let n=JSON.parse(t.getItem(xr(e))??`null`),i=r(n);if(!i)return{};let a={};for(let e of Mr){let t=i[e],n=Array.isArray(t)?t.filter(e=>typeof e==`string`):typeof t==`string`?[t]:[];n.length>0&&(a[e]=[...new Set(n)])}return a}catch{return{}}}function Cr(e,t){let n=f();if(n)try{Object.keys(t).length===0?n.removeItem(xr(e)):n.setItem(xr(e),JSON.stringify(t))}catch{}}function wr(e,t){let n=Sr(e),r={...n,[t.kind]:[...new Set([...n[t.kind]??[],t.signature])]};return Cr(e,r),r}function Tr(e){return(e.state.phase===`guidance`||e.state.phase===`available`)&&e.scopes?{kind:`scopeUpgrade`,signature:JSON.stringify([e.state.phase,...e.scopes.toSorted()])}:null}function Er(e){let t=e.updateSchedule?.target,n=(t?.kind===`package`?t.version:t?.upstreamSha)??e.updateAvailable?.upstreamSha??e.updateAvailable?.latestVersion,r=e.gatewayBootId?.trim(),i=n?.trim();return r&&i?{kind:`updateAvailable`,signature:JSON.stringify([i,r])}:null}function Dr(e){return e===`warn`||e===`danger`}function Or(e,t){return e[t.kind]?.includes(t.signature)===!0}function kr(e,t,n){let r={},i=!1;for(let a of Mr){let o=e[a];if(!o)continue;let s=o.filter(e=>!(!n||(a===`modelAuthExpired`?n.modelAuthAgentId&&(!e.startsWith(`agent:`)||e.startsWith(`agent:${n.modelAuthAgentId}\n`)):a!==`cronFailed`&&a!==`cronOverdue`||n.cronInventoryComplete))||t.some(t=>t.kind===a&&t.signature===e));s.length>0&&(r[a]=s),s.length!==o.length&&(i=!0)}return i?r:e}function Ar(e){let t=Sr(e.gatewayUrl),n=kr(t,e.active,e.scope);return n!==t&&Cr(e.gatewayUrl,n),n}function jr(e,t){let n=Sr(e);if(!n[t])return n;let r={...n};return delete r[t],Cr(e,r),r}var Mr,Nr;function Pr(){return(Pr=e((()=>{Mr=[`cronFailed`,`cronOverdue`,`modelAuthExpired`,`scopeUpgrade`,`updateAvailable`],Nr=`openclaw.control.sidebarAttention.v1:`})))()}function Fr(e){let t=e instanceof CustomEvent?e.detail:void 0,n=t&&typeof t==`object`&&`trigger`in t?t.trigger:null;return n instanceof HTMLElement?n:void 0}function Ir(e){return oe(re.commandPalette,e)}function Lr(e){return typeof e==`object`&&!!e&&`owner`in e&&e.owner instanceof Element&&`onSlashCommand`in e&&(e.onSlashCommand===null||typeof e.onSlashCommand==`function`)}function Rr(e,t){let n=t instanceof CustomEvent?t.detail:void 0;return Lr(n)?n.onSlashCommand?n:e?.owner===n.owner?void 0:e:null}function zr(e,t){let n=Rr(e.commandPaletteTarget,t);n!==null&&(e.commandPaletteTarget=n,e.requestUpdate())}var Br,Vr,Hr;function Ur(){return(Ur=e((()=>{ne(),Br=`openclaw-command-palette-target`,Vr=`openclaw:command-palette-open`,Hr=`openclaw:shell-nav-drawer-toggle`})))()}function Wr(e){let t={open:!1,dock:e.defaultDock,height:e.defaultHeight,width:e.defaultWidth},n=()=>Math.max(e.minHeight,Math.floor((globalThis.innerHeight||800)*.8)),r=()=>Math.max(e.minWidth,Math.floor((globalThis.innerWidth||1280)*.8)),i=(e,t,n,r)=>Math.min(typeof e==`number`&&Number.isFinite(e)&&e>=t?e:r,n);return{defaults:t,minHeight:e.minHeight,minWidth:e.minWidth,maxHeight:n,maxWidth:r,load(){try{let a=globalThis.localStorage?.getItem(e.storageKey);if(!a)return{...t};let o=JSON.parse(a);return{open:!!o.open,dock:e.supportedDocks.includes(o.dock)?o.dock:t.dock,height:i(o.height,e.minHeight,n(),t.height),width:i(o.width,e.minWidth,r(),t.width)}}catch{return{...t}}},save(t){try{globalThis.localStorage?.setItem(e.storageKey,JSON.stringify(t))}catch{}}}}var Gr,Kr,qr;function Jr(){return(Jr=e((()=>{Gr=Wr({storageKey:`openclaw.terminal.panel.v1`,minHeight:140,minWidth:320,defaultDock:`bottom`,supportedDocks:[`bottom`,`right`,`main`],defaultHeight:320,defaultWidth:520}),Kr=Wr({storageKey:`openclaw.browser.panel.v1`,minHeight:240,minWidth:380,defaultDock:`right`,supportedDocks:[`bottom`,`right`],defaultHeight:420,defaultWidth:560}),qr=Wr({storageKey:`openclaw.custodian.panel.v1`,minHeight:240,minWidth:320,defaultDock:`right`,supportedDocks:[`bottom`,`right`],defaultHeight:420,defaultWidth:440})})))()}var Yr;function Xr(){return(Xr=e((()=>{Jr(),Yr=Wr({storageKey:`openclaw.desktopPanel`,minHeight:240,minWidth:380,defaultDock:`right`,supportedDocks:[`bottom`,`right`],defaultHeight:420,defaultWidth:560})})))()}function Zr(e,t){$.set(e,{event:t,createdAt:Date.now()})}function Qr(e,t){$.get(e)?.event===t&&$.delete(e)}function $r(e){let t=$.get(e)??null;return $.delete(e),t&&Date.now()-t.createdAt<=ei?t.event:null}var ei,$;function ti(){return(ti=e((()=>{ei=1e4,$=new Map})))()}function ni(e){let t=!!e.disabledReason,n=`${ve(`new-session`,e.basePath)}${ae(e.agentId,e.target)}`;return v`<openclaw-tooltip .content=${e.disabledReason??e.label}>
    <a
      class=${e.className}
      role="link"
      href=${t?y:n}
      aria-label=${e.label}
      aria-disabled=${t?`true`:y}
      tabindex=${t?`-1`:y}
      @contextmenu=${e=>{e.stopPropagation()}}
      @click=${n=>{if(t){n.preventDefault();return}ee(n)&&(n.preventDefault(),e.onOpen?.(e.agentId,e.target))}}
    >
      ${E.plus}
    </a>
  </openclaw-tooltip>`}function ri(){return(ri=e((()=>{g(),ge(),D(),A()})))()}function ii(e,t){let n=e.settingsSidebarRenderer;if(n)return n(t);let r=e.settingsSidebarLoadFailed;return r||e.loadSettingsSidebarRenderer(),v`<aside class="settings-sidebar" aria-busy=${r?y:`true`}>
    <header class="settings-sidebar__header">
      <button type="button" class="settings-sidebar__back" @click=${t.onExit}>
        <span class="settings-sidebar__back-icon" aria-hidden="true">${E.arrowLeft}</span>
        ${C(`nav.exitSettings`)}
      </button>
      <h1 class="settings-sidebar__title">${C(`nav.settings`)}</h1>
    </header>
    ${r?v`<div class="settings-sidebar__empty" role="alert">
            ${C(`nav.settingsLoadFailed`)}
            <button
              class="btn btn--sm"
              type="button"
              @click=${()=>e.retrySettingsSidebarRenderer()}
            >
              ${C(`common.retry`)}
            </button>
          </div>`:v`<div
            class="settings-loading-skeleton settings-sidebar__loading"
            role="status"
            aria-busy="true"
            aria-label=${C(`common.loading`)}
          >
            <div class="settings-sidebar__loading-rows" aria-hidden="true">
              ${Array.from({length:7},()=>v`<span class="skeleton settings-sidebar__loading-row"></span>`)}
            </div>
          </div>`}
  </aside>`}function ai(){return(ai=e((()=>{g(),w(),D()})))()}export{Gn as $,Re as $t,Tr as A,$t as At,yr as B,it as Bt,wr as C,un as Ct,Dr as D,cn as Dt,Or as E,sn as Et,mr as F,Xt as Ft,or as G,D as Gt,ur as H,A as Ht,hr as I,ut as It,rr as J,Ve as Jt,sr as K,He as Kt,vr as L,M as Lt,pr as M,nn as Mt,gr as N,Qt as Nt,Sr as O,rn as Ot,_r as P,Zt as Pt,qn as Q,S as Qt,fr as R,ct as Rt,jr as S,Y as St,Pr as T,dn as Tt,lr as U,Ue as Ut,br as V,Qe as Vt,cr as W,E as Wt,Kn as X,ze as Xt,ir as Y,w as Yt,nr as Z,Be as Zt,Hr as _,yn as _t,Qr as a,De as an,Vn as at,Ir as b,_n as bt,$r as c,jn as ct,qr as d,Tn as dt,C as en,Wn as et,Kr as f,Cn as ft,Br as g,vn as gt,Vr as h,hn as ht,ni as i,Ee as in,Ln as it,Er as j,tn as jt,Ar as k,en as kt,Yr as l,An as lt,Gr as m,wn as mt,ii as n,Pe as nn,In as nt,ti as o,Pn as ot,Jr as p,En as pt,ar as q,T as qt,ri as r,Oe as rn,Rn as rt,Zr as s,Fn as st,ai as t,Ne as tn,Hn as tt,Xr as u,On as ut,zr as v,xn as vt,xr as w,ln as wt,Fr as x,mn as xt,Ur as y,gn as yt,dr as z,at as zt};
//# sourceMappingURL=control-ui-core-vvcQQV2m.js.map