UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

2 lines 51.8 kB
function e(e){return!!e&&typeof e.getItem==`function`&&typeof e.setItem==`function`}function t(t){let n=Object.getOwnPropertyDescriptor(globalThis,t);if(typeof process<`u`&&{}.VITEST)return n&&!n.get&&e(n.value)?n.value:null;if(typeof window<`u`&&typeof document<`u`)try{let n=window[t];return e(n)?n:null}catch{return null}return n&&!n.get&&e(n.value)?n.value:null}function n(){return t(`localStorage`)}function r(){return t(`sessionStorage`)}var i={common:{health:`Health`,ok:`OK`,yes:`Yes`,no:`No`,active:`Active`,loading:`Loading…`,refreshing:`Refreshing…`,online:`Online`,offline:`Offline`,connect:`Connect`,connected:`Connected`,refresh:`Refresh`,reload:`Reload`,reset:`Reset`,probe:`Probe`,call:`Call`,confirm:`Confirm`,cancel:`Cancel`,next:`Next`,back:`Back`,create:`Create`,copy:`Copy`,copied:`Copied!`,copyCode:`Copy code`,delete:`Delete`,dismiss:`Dismiss`,unselect:`Unselect`,enabled:`Enabled`,disabled:`Disabled`,none:`none`,na:`n/a`,never:`never`,configured:`Configured`,running:`Running`,linked:`Linked`,mode:`Mode`,system:`System`,light:`Light`,dark:`Dark`,baseUrl:`Base URL`,lastStart:`Last start`,lastProbe:`Last probe`,lastInbound:`Last inbound`,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`,theme:`Theme`,colorMode:`Color mode`,colorModeOption:`Color mode: {mode}`,resources:`Resources`,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`,secondsAgo:`{count}s ago`,working:`Working…`,showQr:`Show QR`,relink:`Relink`,waitForScan:`Wait for scan`,logout:`Logout`},channels:{health:{title:`Channel health`,subtitle:`Channel status snapshots from the gateway.`,noSnapshotYet:`No snapshot yet.`},generic:{subtitle:`Channel status and configuration.`},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:{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)`}},lazyView:{loadingTitle:`Loading panel`,errorTitle:`Panel failed to load`,errorSubtitle:`Reload the page to load the latest Control UI bundle, or retry if the network request failed.`,retry:`Retry`,unknownError:`Unknown module load error.`},nodes:{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`}},instances:{title:`Connected Instances`,subtitle:`Presence beacons from the gateway and clients.`,showHosts:`Show hosts and IPs`,hideHosts:`Hide hosts and IPs`,toggleHostVisibility:`Toggle host visibility`,noInstances:`No instances reported yet.`,lastInput:`Last input {time}`,reason:`Reason {reason}`},sessionsView:{title:`Sessions`,subtitle:`Active session keys and per-session overrides.`,store:`Store: {path}`,active:`Updated within`,limit:`Limit`,filters:`Filters`,showFilters:`Show filters`,hideFilters:`Hide filters`,sourceFilters:`Session source filters`,global:`Global`,unknown:`Unknown`,showArchived:`Show archived`,activeTooltip:`Loads sessions updated in the last {count} minutes.`,limitTooltip:`Max sessions to load.`,globalTooltip:`Include global sessions.`,unknownTooltip:`Include unknown sessions.`,showArchivedTooltip:`Include archived sessions.`,minutesPlaceholder:`min`,searchPlaceholder:`Filter by key, agent, label, kind…`,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`,noSessions:`No sessions found.`,noSessionsMatchFilters:`No sessions match your filters.`,showAll:`Show all`,inherit:`inherit`,defaultOption:`Default ({value})`,offExplicit:`off (explicit)`,on:`on`,off:`off`,full:`full`,stream:`stream`,customOption:`{value} (custom)`,manual:`manual`,autoThreshold:`auto-threshold`,overflowRetry:`overflow retry`,timeoutRetry:`timeout retry`,tokenRange:`{before} to {after} tokens`,tokensBefore:`{count} tokens before`,tokenDeltaUnavailable:`token delta unavailable`,checkpoints:`{count} Checkpoints`,checkpoint:`{count} Checkpoint`,showSessionDetails:`Show session details for {count}`,hideSessionDetails:`Hide session details for {count}`,sessionDetails:`Session details`,compactionHistory:`Compaction history`,status:`Status`,statusLive:`Live`,statusIdle:`Idle`,statusUnknown:`Unknown`,statusRunning:`Running`,statusDone:`Done`,statusFailed:`Failed`,statusKilled:`Killed`,statusTimeout:`Timed out`,model:`Model`,provider:`Provider`,runtime:`Runtime`,surface:`Surface`,subject:`Subject`,room:`Room`,space:`Space`,sessionId:`Session ID`,activeRun:`Active run`,archived:`Archived`,loadingCheckpoints:`Loading checkpoints…`,noCheckpoints:`No compaction checkpoints recorded for this session.`,noSummary:`No summary captured.`,branchFromCheckpoint:`Branch from checkpoint`,restoreCheckpoint:`Restore checkpoint`},agents:{noAgents:`No agents`,copyId:`Copy ID`,copyIdTitle:`Copy agent ID to clipboard`,default:`Default`,setDefault:`Set Default`,alreadyDefaultTitle:`Already the default agent`,setDefaultTitle:`Set as the default agent`,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:`Cron Jobs`},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.`},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 cron status.`,jobs:`Jobs`,nextWake:`Next wake`,agentJobsTitle:`Agent Cron Jobs`,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.`,previewMarkdownTitle:`Preview rendered markdown`,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.`,content:`Content`,words:`{count} words`,lines:`lines`}},debug:{snapshotsTitle:`Snapshots`,snapshotsSubtitle:`Status, health, and heartbeat data.`,status:`Status`,health:`Health`,lastHeartbeat:`Last heartbeat`,security:{audit:`Security audit`,critical:`{count} critical`,warnings:`{count} warnings`,noCriticalIssues:`No critical issues`,info:`{count} info`,runPrefix:`Run`,runSuffix:`for details.`},manualRpcTitle:`Manual RPC`,manualRpcSubtitle:`Send a raw gateway method with JSON params.`,method:`Method`,selectMethod:`Select a method…`,paramsJson:`Params (JSON)`,modelsTitle:`Models`,modelsSubtitle:`Catalog from models.list.`,eventLogTitle:`Event Log`,eventLogSubtitle:`Latest gateway events.`,noEvents:`No events yet.`},quickSettings:{security:{browserEnabled:`Browser enabled`,toolProfile:`Tool profile`}},execApproval:{expiresIn:`expires in {time}`,expired:`expired`,execApprovalNeeded:`Exec approval needed`,pluginApprovalNeeded:`Plugin approval needed`,pending:`{count} pending`,allowOnce:`Allow once`,alwaysAllow:`Always allow`,allowAlwaysUnavailable:`The effective approval policy requires approval every time, so Allow Always is unavailable.`,deny:`Deny`,labels:{host:`Host`,agent:`Agent`,session:`Session`,cwd:`CWD`,resolved:`Resolved`,security:`Security`,ask:`Ask`,severity:`Severity`,plugin:`Plugin`}},agentTools:{connectedSource:`Connected: {id}`,connected:`Connected`,channelSource:`Channel: {id}`,channel:`Channel`,builtIn:`Built-in`},nav:{chat:`Chat`,control:`Control`,agent:`Agent`,settings:`Settings`,expand:`Expand sidebar`,collapse:`Collapse sidebar`,resize:`Resize sidebar`},tabs:{agents:`Agents`,activity:`Activity`,overview:`Overview`,workboard:`Workboard`,channels:`Channels`,instances:`Instances`,sessions:`Sessions`,usage:`Usage`,cron:`Cron Jobs`,skills:`Skills`,skillWorkshop:`Skill Workshop`,nodes:`Nodes`,chat:`Chat`,config:`Config`,communications:`Communications`,appearance:`Appearance`,automation:`Automation`,mcp:`MCP`,infrastructure:`Infrastructure`,aiAgents:`AI & Agents`,debug:`Debug`,logs:`Logs`,dreams:`Dreaming`},subtitles:{agents:`Workspaces, tools, identities.`,activity:`Browser-local tool activity summaries.`,overview:`Status, entry points, health.`,workboard:`Agent work queue and session handoff.`,channels:`Channels and settings.`,instances:`Connected clients and nodes.`,sessions:`Active sessions and defaults.`,usage:`API usage and costs.`,cron:`Wakeups and recurring runs.`,skills:`Skills and API keys.`,skillWorkshop:`Review, refine, and apply proposals before they become live skills.`,nodes:`Paired devices and commands.`,chat:`Gateway chat for quick interventions.`,config:`Edit openclaw.json.`,communications:`Channels, messages, and audio settings.`,appearance:`Theme, UI, and setup wizard settings.`,automation:`Commands, hooks, cron, and plugins.`,mcp:`MCP servers, auth, tools, and diagnostics.`,infrastructure:`Gateway, web, browser, and media settings.`,aiAgents:`Agents, models, skills, tools, memory, session.`,debug:`Snapshots, events, RPC.`,logs:`Live gateway logs.`,dreams:`Memory dreaming, consolidation, and reflection.`},skillWorkshop:{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.`}},activity:{title:`Activity`,subtitle:`Ephemeral tool activity derived from live session events.`,visibleCount:`{visible} of {total}`,filtersLabel:`Activity filters`,search:`Search`,searchPlaceholder:`Filter by tool, summary, run, session`,toolFilter:`Tool`,allTools:`All tools`,statusFilters:`Status filters`,autoFollow:`Auto-follow`,expandAll:`Expand all`,collapseAll:`Collapse all`,clear:`Clear`,empty:`No tool activity yet.`,emptyFiltered:`No activity matches these filters.`,entrySummary:`{argumentSummary}`,argumentHiddenOne:`1 argument hidden`,argumentsHidden:`{count} arguments hidden`,streamLabel:`Tool activity entries`,toolCallId:`Tool call`,runId:`Run`,session:`Session`,outputTruncated:`Preview redacted and truncated.`,noOutputPreview:`No output preview.`,status:{running:`Running`,done:`Done`,error:`Error`},duration:{ms:`{count} ms`,seconds:`{count} s`,minutes:`{minutes}m {seconds}s`}},workboard:{disabledHelpStart:`Workboard is disabled. Enable`,enableConfigKey:`plugins.entries.workboard.enabled = true`,disabledHelpEnd:`, then reload this tab.`,status:{triage:`Triage`,backlog:`Backlog`,todo:`Todo`,scheduled:`Scheduled`,ready:`Ready`,running:`Running`,review:`Review`,blocked:`Blocked`,done:`Done`},noLinkedSession:`No linked session`,stopSession:`Stop session`,editCard:`Edit card`,editCardHelp:`Update queue metadata and session handoff.`,newCard:`New card`,newCardHelp:`Queue work for an agent session.`,archiveCard:`Archive card`,unarchiveCard:`Restore from archive`,archived:`Archived`,deleteCard:`Delete card`,viewDetails:`View details`,detailTitle:`Card details`,detailTask:`Gateway task`,detailRun:`Run`,detailUpdated:`Updated`,detailProof:`Proof`,detailDiagnostics:`Diagnostics`,detailWorkerLogs:`Worker logs`,detailWorkerProtocol:`Worker protocol`,detailAutomation:`Automation`,detailUpdatedValue:`Updated: {time}`,detailAutomationTenant:`Tenant: {tenant}`,detailAutomationBoard:`Board: {board}`,detailAutomationSkills:`Skills: {skills}`,detailAutomationWorkspace:`Workspace: {workspace}`,detailAutomationSummary:`Summary: {summary}`,detailOperatorNotes:`Operator notes`,detailNoNotes:`No operator notes yet.`,detailNotePlaceholder:`Add a decision, blocker, or proof note...`,detailAddNote:`Add note`,openSession:`Open session`,openLinkedSession:`Open linked session`,defaultAgent:`Default agent`,allAgents:`All agents`,agentFilter:`Filter by agent`,agentLinked:`Linked to {agent}`,agentDefaultLinked:`Using default agent {agent}`,engineOpenAI:`OpenAI`,engineClaude:`Claude`,engineDisabledRuntime:`{agent} uses the {runtime} ACP runtime. Use default start for that session.`,runEngine:`Run {engine}`,openEngine:`Open {engine}`,runDefaultAgent:`Run default agent`,run:`Run`,open:`Open`,start:`Start`,dependencies:`Dependencies`,dependenciesReady:`{count} ready`,dependenciesReadyTitle:`{count} dependencies are done.`,dependenciesBlocked:`{count} blocked`,dependenciesBlockedTitle:`Waiting on dependencies: {parents}.`,dependencyMissing:`{parent} (missing)`,dependencyStatusMissing:`Missing`,unknownStatus:`Unknown`,showArchived:`Show archived cards`,hideArchived:`Hide archived cards`,showArchivedShort:`Archived`,hideArchivedShort:`Hide archived`,layout:`Card layout`,layoutCompact:`Compact cards`,layoutComfortable:`Comfortable cards`,dispatch:`Dispatch ready work`,dispatchSummary:`Dispatch complete: started {started}, promoted {promoted}, blocked {blocked}, reclaimed {reclaimed}, orchestrated {orchestrated}, failures {failures}.`,dispatchSummaryEmpty:`Dispatch complete: no ready work changed.`,live:`live`,fieldTitle:`Title`,fieldNotes:`Notes`,fieldStatus:`Status`,fieldPriority:`Priority`,fieldAgent:`Agent`,fieldSession:`Session`,fieldLabels:`Labels`,templatesLabel:`Card templates`,template:{bugfix:`Bugfix`,docs:`Docs`,release:`Release`,pr_review:`PR review`,plugin:`Plugin`},badgeAttempts:`{count} attempts`,badgeFailures:`{count} failed`,badgeComments:`{count} comments`,badgeLinks:`{count} links`,badgeProof:`{count} proof`,badgeArtifacts:`{count} artifacts`,badgeAttachments:`{count} attachments`,badgeWorkerLogs:`{count} worker logs`,badgeWorkerProtocol:`worker {state}`,badgeTenant:`tenant {tenant}`,badgeSkills:`{count} skills`,badgeDispatches:`{count} dispatches`,badgeTaskLinked:`task linked`,badgeClaimed:`claimed by {owner}`,badgeDiagnostics:`{count} diagnostics`,badgeStale:`stale`,titlePlaceholder:`Card title`,notesPlaceholder:`Notes, acceptance criteria, links`,labelsPlaceholder:`ui, docs`,searchPlaceholder:`Search cards`,allPriorities:`All priorities`,emptyColumn:`Drop work here`,lifecycleUnlinked:`No session`,lifecycleUnlinkedDetail:`Start or link a session`,lifecycleMissing:`Session missing`,lifecycleMissingDetail:`Reload sessions or relink this card`,lifecycleLinked:`Linked`,lifecycleIdleDetail:`No active run`,lifecycleRunning:`Running`,lifecycleRunningDetail:`Active run in progress`,lifecycleStale:`Stale`,lifecycleStaleDetail:`No recent session activity`,lifecycleDone:`Done`,lifecycleDoneDetail:`Moved to review`,lifecycleNeedsReview:`Needs review`,lifecycleNeedsReviewDetail:`Run stopped or failed`,taskStatus:{queued:`Task queued`,running:`Task running`,completed:`Task complete`,failed:`Task failed`,cancelled:`Task cancelled`,timed_out:`Task timed out`},eventsLabel:`Card events`,eventCreated:`Created`,eventEdited:`Edited`,eventMoved:`Moved`,eventMovedTo:`Moved to {status}`,eventLinked:`Linked session`,eventSpecified:`Specified`,eventDecomposed:`Decomposed`,eventClaimed:`Claimed`,eventHeartbeat:`Heartbeat`,eventExecutionUpdated:`Agent updated`,eventAttemptStarted:`Attempt started`,eventAttemptUpdated:`Attempt updated`,eventCommentAdded:`Comment added`,eventLinkAdded:`Link added`,eventProofAdded:`Proof added`,eventArtifactAdded:`Artifact added`,eventAttachmentAdded:`Attachment added`,eventDiagnostic:`Diagnostic`,eventNotification:`Notification`,eventDispatch:`Dispatch`,eventOrchestration:`Orchestration`,eventProtocolViolation:`Protocol violation`,eventArchived:`Archived`,eventUnarchived:`Unarchived`,eventStale:`Stale session`},overview:{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`,language:`Language`,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`,uptime:`Uptime`,tickInterval:`Tick Interval`,lastChannelsRefresh:`Last Channels Refresh`,channelsHint:`Use Channels to link WhatsApp, Telegram, Discord, Signal, or iMessage.`},stats:{instances:`Instances`,instancesHint:`Presence beacons in the last 5 minutes.`,sessions:`Sessions`,sessionsHint:`Recent session keys tracked by the gateway.`,cron:`Cron`,cronNext:`Next wake {time}`},notes:{title:`Notes`,subtitle:`Quick reminders for remote control setups.`,tailscaleTitle:`Tailscale serve`,tailscaleText:`Prefer serve mode to keep the gateway on loopback with tailnet auth.`,sessionTitle:`Session hygiene`,sessionText:`Use /new or sessions.patch to reset context.`,cronTitle:`Cron reminders`,cronText:`Use isolated sessions for recurring runs.`},auth:{required:`This gateway requires auth. Add a token or password, then click Connect.`,failed:`Auth failed. Re-copy a tokenized URL with {command}, or update the token, then click Connect.`},pairing:{hint:`This device needs pairing approval from the gateway host.`,scopeUpgradeTitle:`Scope upgrade pending approval.`,scopeUpgradeSummary:`This device is already paired, but the requested wider scope is waiting for approval.`,roleUpgradeTitle:`Role upgrade pending approval.`,roleUpgradeSummary:`This device is already paired, but the requested role change is waiting for approval.`,metadataUpgradeTitle:`Device metadata change pending approval.`,metadataUpgradeSummary:`This device is already paired, but the metadata change is waiting for approval.`,mobileHint:`On mobile? Copy the full URL (including #token=...) from openclaw dashboard --no-open on your desktop.`,docsTitle:`Device pairing docs (opens in new tab)`,docsLink:`Docs: Device pairing`},insecure:{hint:`This page is HTTP, so the browser blocks device identity. Use HTTPS (Tailscale Serve) or open {url} on the gateway host.`,stayHttp:`If you must stay on HTTP, set {config} (token-only).`},connection:{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.`,step4:`Or generate a reusable token:`,docsHint:`For remote access, Tailscale Serve is recommended. `,docsLink:`Read the docs →`,authDocsTitle:`Control UI auth docs (opens in new tab)`,authDocsLink:`Docs: Control UI auth`,tailscaleDocsTitle:`Tailscale Serve docs (opens in new tab)`,tailscaleDocsLink:`Docs: Tailscale Serve`,insecureHttpDocsTitle:`Insecure HTTP docs (opens in new tab)`,insecureHttpDocsLink:`Docs: Insecure HTTP`,copyCommand:`Copy command`,copyCommandAria:`Copy command: {command}`},cards:{cost:`Cost`,skills:`Skills`,recentSessions:`Recent Sessions`,modelAuth:`Model Auth`,modelAuthOk:`{count} ok`,modelAuthExpired:`{count} expired`,modelAuthExpiring:`{count} expiring`,modelAuthProviders:`{count} providers`,modelAuthUsageLeft:`{pct}% left`,modelAuthExpiresIn:`expires {when}`,modelAuthAttentionExpiredTitle:`Model auth expired`,modelAuthAttentionExpiringTitle:`Model auth expiring soon`,modelAuthAttentionExpiredDesc:`{providers} — re-authenticate with openclaw models auth`,modelAuthAttentionExpiringEntry:`{provider} ({when})`},attention:{title:`Attention`},eventLog:{title:`Event Log`},logTail:{title:`Gateway Logs`},quickActions:{newSession:`New Session`,automation:`Automation`,refreshAll:`Refresh All`,terminal:`Terminal`},palette:{placeholder:`Type a command…`,noResults:`No results`,categories:{search:`Search`,navigation:`Navigation`,skills:`Skills`},items:{overview:`Overview`,sessions:`Sessions`,scheduled:`Scheduled`,skills:`Skills`,settings:`Settings`,agents:`Agents`,shellCommand:`Shell Command`,debugMode:`Debug Mode`},descriptions:{shellCommand:`Run shell`,debugMode:`Toggle debug`},footer:{navigate:`navigate`,select:`select`,close:`close`}}},dreaming:{agentSelect:{label:`Agent`,ariaLabel:`Dreaming agent`},tabs:{scene:`Scene`,diary:`Diary`,advanced:`Advanced`},header:{refresh:`Refresh`,refreshing:`Refreshing…`,on:`Dreaming On`,off:`Dreaming Off`},restartConfirmation:{title:`Restart Gateway to Apply Change`,subtitle:`Changing Dreaming mode restarts the gateway.`,warning:`This action will restart the Gateway and may temporarily interrupt chats, automations, and connected channels.`,confirm:`Confirm Restart`,restarting:`Restarting…`,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:{shortTerm:`Short-term`,grounded:`Grounded`,signals:`Signals`,promoted:`Promoted`,phaseHits:`Phase Hits`},trace:{shortTerm:`Short-term`,grounded:`Grounded`,signals:`Signals`,promoted:`Promoted`,groundedLed:`grounded-led`,emptyShortTerm:`No active short-term items.`,emptyGrounded:`No staged grounded items.`,emptySignals:`No active signals.`,emptyPromoted:`Nothing promoted yet today.`},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.`,older:`Older`,newer:`Newer`,reload:`Reload`,reloading:`Reloading…`},phrases:{consolidatingMemories:`consolidating memories…`,tidyingKnowledgeGraph:`tidying the knowledge graph…`,replayingConversations:`replaying today's conversations…`,weavingShortTerm:`weaving short-term into long-term…`,defragmentingMindPalace:`defragmenting the mind palace…`,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…`}},usage:{common:{emptyValue:`—`,unknown:`unknown`},loading:{title:`Usage Overview`,badge:`Loading`},metrics:{tokens:`Tokens`,cost:`Cost`,session:`session`,sessions:`sessions`},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`,unpin:`Unpin filters`,selectAll:`Select All`,clear:`Clear`,clearAll:`Clear All`,remove:`Remove 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`,sessionsCsv:`Sessions CSV`,dailyCsv:`Daily CSV`,json:`JSON`},cacheStatus:{warning:`Usage cache is rebuilding in the background. Displayed totals may be stale.`,title:`{status}: {pending} pending, {stale} stale, {cached} cached`,status:{refreshing:`refreshing`,stale:`stale`,partial:`partial`}},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`},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`,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`,copyName:`Copy session name`,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`,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`,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`,passwordPlaceholder:`optional`,showToken:`Show token`,hideToken:`Hide token`,toggleTokenVisibility:`Toggle token visibility`,showPassword:`Show password`,hidePassword:`Hide password`,togglePasswordVisibility:`Toggle password visibility`,failure:{rawError:`Raw error`,docsAuth:`Control UI auth docs`,docsPairing:`Device pairing docs`,docsInsecure:`Insecure HTTP docs`,authRequired:{title:`Auth required`,summary:`The Gateway is reachable, but it needs a matching token or password before this browser can connect.`,stepPaste:`Paste the token from openclaw dashboard --no-open or enter the configured password.`,stepGenerate:`If no token is configured, run openclaw doctor --generate-gateway-token on the gateway host.`,stepConnect:`Click Connect again after updating the credential.`},authFailed:{title:`Auth did not match`,summary:`The supplied credential was rejected. The most common cause is a stale token or a token copied from another Gateway URL.`,stepDashboard:`Run openclaw dashboard --no-open and open the fresh URL or paste its token.`,stepReplace:`Replace stale token/password values; do not reuse a token from another Gateway URL.`,stepMode:`Use one matching auth mode at a time: gateway token for token mode, password for password mode.`},rateLimited:{title:`Too many failed attempts`,summary:`The Gateway is temporarily limiting authentication attempts for this client.`,stepStop:`Stop retrying from this tab for a moment.`,stepWait:`Wait for the auth limiter to cool down, then reconnect with the corrected credential.`,stepCheckClients:`If this is a shared host, check other clients for repeated bad retries.`},pairing:{title:`Device pairing required`,scopeTitle:`Scope upgrade pending`,roleTitle:`Role upgrade pending`,metadataTitle:`Device refresh pending`,summary:`This browser needs one-time approval from the Gateway host before it can use the Control UI.`,upgradeSummary:`This browser is already known, but the requested access changed and needs a fresh approval.`,stepList:`Run openclaw devices list on the Gateway host.`,stepApproveId:`Approve this request: openclaw devices approve {requestId}.`,stepApprove:`Approve the pending browser/device request from that list.`,stepReconnect:`Reconnect after the approval completes.`},insecure:{title:`Secure browser context required`,summary:`This page is running over plain HTTP, so the browser cannot create the device identity the Gateway expects.`,stepHttps:`Use HTTPS/Tailscale Serve, or open http://127.0.0.1:18789 on the Gateway host.`,stepLocalCompat:`For local token-only compatibility, set gateway.controlUi.allowInsecureAuth: true.`,stepAvoidDisable:`Avoid disabling device auth for remote HTTP access.`},origin:{title:`Browser origin not allowed`,summary:`The Gateway rejected this page origin before accepting the Control UI connection.`,stepAllowedOrigins:`Add this browser origin to gateway.controlUi.allowedOrigins.`,stepFullOrigin:`Use full origins such as http://localhost:5173, not wildcard patterns.`,stepRestart:`Restart or reload the Gateway after changing allowed origins.`},protocol:{title:`Protocol mismatch`,summary:`The served Control UI and the running Gateway do not agree on the supported connection protocol.`,stepDashboard:`Reopen the served dashboard with openclaw dashboard so the UI and Gateway come from the same install.`,stepDevUi:`If using pnpm ui:dev, rebuild or restart the dev UI against the current checkout.`,stepRestart:`Restart the Gateway after updating OpenClaw so it serves the current protocol.`},network:{title:`Could not connect`,summary:`The browser could not complete the Gateway connection. Check the target and transport before retrying credentials.`,stepGateway:`Confirm the Gateway is running with openclaw status or openclaw gateway run.`,stepUrl:`Check the WebSocket URL and use wss:// when the Gateway is behind HTTPS/Tailscale Serve.`,stepDashboard:`Reopen the dashboard with openclaw dashboard --no-open to recopy the current URL and auth details.`}}},chat:{disconnected:`Disconnected from gateway.`,refreshTitle:`Refresh chat data`,settings:`Chat settings`,thinkingToggle:`Toggle assistant thinking/working output`,toolCallsToggle:`Toggle tool calls and tool results`,autoScrollMode:`Auto-scroll mode`,autoScrollAlways:`Always`,autoScrollNearBottom:`Near bottom`,autoScrollOff:`Off`,hideCronSessions:`Hide cron sessions`,showCronSessions:`Show cron sessions`,showCronSessionsHidden:`Show cron sessions ({count} hidden)`,onboardingDisabled:`Disabled during setup`,gatewayStatus:`Gateway status: {status}`,commandPaletteTitle:`Search or jump to… (⌘K)`,openCommandPalette:`Open command palette`,docsOpensInNewTab:`{label} (opens in new tab)`,updateAvailable:`Update available:`,runningVersion:`running v{version}`,updating:`Updating…`,updateNow:`Update now`,dismissUpdateBanner:`Dismiss update banner`,switchedSession:`Switched to {session}`,welcome:{ready:`Ready to chat`,hintBeforeShortcut:`Type a message below ·`,hintAfterShortcut:`for commands`,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`,export:`Export`,exportChat:`Export chat`,queue:`Queue`,queueMessage:`Queue message`,stop:`Stop`,stopGenerating:`Stop generating`,send:`Send`,sendMessage:`Send message`},queue:{retry:`Retry`,retrySend:`Retry send`,retryQueuedMessage:`Retry queued message`},composer:{placeholder:`Message {name} (Enter to send)`,placeholderWithAttachments:`Add a message or paste more images...`,placeholderDisconnected:`Connect to the gateway to start chatting...`,attachFile:`Attach file`,startTalk:`Start Talk`,stillListening:`Still listening`,talkTranscript:`Talk transcript`,stopTalk:`Stop Talk`},selectors:{agentFilter:`Filter sessions by agent`,session:`Chat session`,sessionSearch:`Search sessions`,clearSessionSearch:`Clear session search`,loadMoreSessions:`Load more sessions`,model:`Chat model`,thinkingLevel:`Chat thinking level`},toolCards:{toolError:`Tool error`}},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)`,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)`},cron:{quickCreate:{schedules:{everyMorning:{label:`Every morning`,description:`Daily at 8:00 AM`},everyEvening:{label:`Every evening`,description:`Daily at 6:00 PM`},hourly:{label:`Hourly`,description:`Every hour`},weekdays:{label:`Weekdays`,description:`Mon–Fri at 9:00 AM`},weekly:{label:`Weekly`,description:`Every Monday at 9:00 AM`},once:{label:`Run once`,description:`One-time, delete after run`}},delivery:{notify:{label:`Notify me`,description:`Deliver results to chat`},silent:{label:`Silent`,description:`Run without notification`},isolated:{label:`Independent session`,description:`Run in its own session`}},steps:{what:`What`,when:`When`,how:`How`},defaultName:`Automation`,whatHeading:`What should it do?`,whatHint:`Describe the task in natural language. The agent will run this prompt each time.`,promptPlaceholder:`e.g., Check my inbox for urgent emails and summarize them...`,nameOptional:`Name (optional)`,namePlaceholder:`e.g., Morning inbox check`,whenHeading:`When should it run?`,whenHint:`Pick a schedule. You can fine-tune it later.`,howHeading:`How should it work?`,howHint:`Choose how results are delivered.`,title:`New Cron Job`},summary:{enabled:`Enabled`,yes:`Yes`,no:`No`,jobs:`Jobs`,nextWake:`Next wake`,refreshing:`Refreshing...`,refresh:`Refresh`},jobs:{title:`Jobs`,subtitle:`All scheduled jobs stored in the gateway.`,shownOf:`{shown} shown of {total}`,searchJobs:`Search jobs`,searchPlaceholder:`Name, description, or agent`,enabled:`Enabled`,schedule:`Schedule`,lastRun:`Last run`,all:`All`,sort:`Sort`,nextRun:`Next run`,recentlyUpdated:`Recently updated`,name:`Name`,direction:`Direction`,ascending:`Ascending`,descending:`Descending`,reset:`Reset`,emptyTitle:`No scheduled jobs yet.`,emptyHint:`Create one from a plain-language prompt; advanced fields can wait.`,emptyFilteredHint:`Clear or change filters to see scheduled jobs.`,noMatching:`No matching jobs.`,loading:`Loading...`,loadMore:`Load more jobs`},runs:{title:`Run history`,subtitleAll:`Latest runs across all jobs.`,subtitleJob:`Latest runs for {title}.`,scope:`Scope`,allJobs:`All jobs`,selectedJob:`Selected job`,searchRuns:`Search runs`,searchPlaceholder:`Summary, error, or job`,newestFirst:`Newest first`,oldestFirst:`Oldest first`,status:`Status`,delivery:`Delivery`,clear:`Clear`,allStatuses:`All statuses`,allDelivery:`All delivery`,selectJobHint:`Select a job to inspect run history.`,noMatching:`No matching runs.`,loadMore:`Load more runs`,runStatusOk:`OK`,runStatusError:`Error`,runStatusSkipped:`Skipped`,runStatusUnknown:`Unknown`,deliveryDelivered:`Delivered`,deliveryNotDelivered:`Not delivered`,deliveryUnknown:`Unknown`,deliveryNotRequested:`Not requested`},form:{editJob:`Edit Job`,newJob:`New Job`,advancedJob:`Advanced job`,updateSubtitle:`Update the selected scheduled job.`,createSubtitle:`Create a scheduled wakeup or agent run.`,required:`Required`,requiredSr:`required`,basics:`Basics`,basicsSub:`Name it, choose the assistant, and set enabled state.`,fieldName:`Name`,description:`Description`,agentId:`Agent ID`,namePlaceholder:`Morning brief`,descriptionPlaceholder:`Optional context for this job`,agentPlaceholder:`main or ops`,agentHelp:`Start typing to pick a known agent, or enter a custom one.`,schedule:`Schedule`,scheduleSub:`Control when this job runs.`,every:`Every`,at:`At`,cronOption:`Cron`,runAt:`Run at`,unit:`Unit`,minutes:`Minutes`,hours:`Hours`,days:`Days`,expression:`Expression`,expressionPlaceholder:`0 7 * * *`,everyAmountPlaceholder:`30`,timezoneOptional:`Timezone (optional)`,timezonePlaceholder:`America/Los_Angeles`,timezoneHelp:`Pick a common timezone or enter any valid IANA timezone.`,jitterHelp:`Need jitter? Use Advanced → Stagger window / Stagger unit.`,execution:`Execution`,executionSub:`Choose when to wake, and what this job should do.`,session:`Session`,main:`Main`,isolated:`Isolated`,sessionHelp:`Main posts a system event. 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.`,payloadKind:`What should run?`,systemEvent:`Post message to main timeline`,agentTurn:`Run assistant task (isolated)`,systemEventHelp:`Sends your text to the gateway main timeline (good for reminders/triggers).`,agentTurnHelp:`Starts an assistant 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 behavior for this run.`,mainTimelineMessage:`Main timeline message`,assistantTaskPrompt:`Assistant task prompt`,deliverySection:`Delivery`,deliverySub:`Choose where run summaries are sent.`,resultDelivery:`Result delivery`,announceDefault:`Announce summary (default)`,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 overrides for delivery guarantees, schedule jitter, and model controls.`,deleteAfterRun:`Delete after run`,deleteAfterRunHelp:`Best for one-shot reminders that should auto-clean up.`,clearAgentOverride:`Clear agent override`,clearAgentHelp:`Force this job to use the gateway default assistant.`,exactTiming:`Exact timing (no stagger)`,exactTimingHelp:`Run on exact cron boundaries with no spread.`,staggerWindow:`Stagger window`,staggerUnit:`Stagger unit`,staggerPlaceholder:`30`,seconds:`Seconds`,model:`Model`,modelPlaceholder:`openai/gpt-5.2`,modelHelp:`Start typing to pick a known model, or enter a custom one.`,thinking:`Thinking`,thinkingPlaceholder:`low`,thinkingHelp:`Use a suggested level or enter a provider-specific value.`,bestEffortDelivery:`Best effort delivery`,bestEffortHelp:`Do not fail the job if delivery itself fails.`,cantAddYet:`Can't add job 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`,addJob:`Add job`,cancel:`Cancel`},jobList:{allJobs:`all jobs`,selectJob:`(select a job)`,enabled:`enabled`,disabled:`disabled`,edit:`Edit`,clone:`Clone`,disable:`Disable`,enable:`Enable`,run:`Run`,history:`History`,remove:`Remove`},jobDetail:{system:`System`,command:`Command`,cwd:`CWD`,prompt:`Prompt`,delivery:`Delivery`,agent:`Agent`},jobState:{status:`Status`,next:`Next`,last:`Last`},runEntry:{noSummary:`No summary.`,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.`,cronExprRequired:`Cron expression is required.`,staggerAmountInvalid:`Stagger must be greater than 0.`,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.`}}},a=`modulepreload`,o=function(e,t){return new URL(e,t).href},s={},c=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e=document.getElementsByTagName(`link`),i=document.querySelector(`meta[property=csp-nonce]`),c=i?.nonce||i?.getAttribute(`nonce`);function l(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}r=l(t.map(t=>{if(t=o(t,n),t in s)return;s[t]=!0;let r=t.endsWith(`.css`),i=r?`[rel="stylesheet"]`:``;if(n)for(let n=e.length-1;n>=0;n--){let i=e[n];if(i.href===t&&(!r||i.rel===`stylesheet`))return}else if(document.querySelector(`link[href="${t}"]${i}`))return;let l=document.createElement(`link`);if(l.rel=r?`stylesheet`:a,r||(l.as=`script`),l.crossOrigin=``,l.href=t,c&&l.setAttribute(`nonce`,c),document.head.appendChild(l),r)return new Promise((e,n)=>{l.addEventListener(`load`,e),l.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${t}`)))})}))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})},l=[`zh-CN`,`zh-TW`,`pt-BR`,`de`,`es`,`ja-JP`,`ko`,`fr`,`ar`,`it`,`tr`,`uk`,`id`,`pl`,`th`,`vi`,`nl`,`fa`],u={"zh-CN":{exportName:`zh_CN`,loader:()=>c(()=>import(`./zh-CN-_9quZiZu.js`),[],import.meta.url)},"zh-TW":{exportName:`zh_TW`,loader:()=>c(()=>import(`./zh-TW-B-WN16Hf.js`),[],import.meta.url)},"pt-BR":{exportName:`pt_BR`,loader:()=>c(()=>import(`./pt-BR-CRn9A7QZ.js`),[],import.meta.url)},de:{exportName:`de`,loader:()=>c(()=>import(`./de-iWrE-YxJ.js`),[],import.meta.url)},es:{exportName:`es`,loader:()=>c(()=>import(`./es-DURZflpX.js`),[],import.meta.url)},"ja-JP":{exportName:`ja_JP`,loader:()=>c(()=>import(`./ja-JP-DMAVRy9e.js`),[],import.meta.url)},ko:{exportName:`ko`,loader:()=>c(()=>import(`./ko-6JbsZZvn.js`),[],import.meta.url)},fr:{exportName:`fr`,loader:()=>c(()=>import(`./fr-CD8NDmL9.js`),[],import.meta.url)},ar:{exportName:`ar`,loader:()=>c(()=>import(`./ar-D0qBef7m.js`),[],import.meta.url)},it:{exportName:`it`,loader:()=>c(()=>import(`./it-IAIAjf-Q.js`),[],import.meta.url)},tr:{exportName:`tr`,loader:()=>c(()=>import(`./tr-D0Lfg5H_.js`),[],import.meta.url)},uk:{exportName:`uk`,loader:()=>c(()=>import(`./uk-CtScOpqB.js`),[],import.meta.url)},id:{exportName:`id`,loader:()=>c(()=>import(`./id-CLRhPmvL.js`),[],import.meta.url)},pl:{exportName:`pl`,loader:()=>c(()=>import(`./pl-BFhjVaFd.js`),[],import.meta.url)},th:{exportName:`th`,loader:()=>c(()=>import(`./th-CCVGQUm2.js`),[],import.meta.url)},vi:{exportName:`vi`,loader:()=>c(()=>import(`./vi-DIRvGcMl.js`),[],import.meta.url)},nl:{exportName:`nl`,loader:()=>c(()=>import(`./nl-CEpsSZFE.js`),[],import.meta.url)},fa:{exportName:`fa`,loader:()=>c(()=>import(`./fa-C_BMTCDj.js`),[],import.meta.url)}},d=[`en`,...l];function f(e){return e!=null&&d.includes(e)}function p(e){return l.includes(e)}function m(e){return e.startsWith(`zh`)?e===`zh-TW`||e===`zh-HK`?`zh-TW`:`zh-CN`:e.startsWith(`pt`)?`pt-BR`:e.startsWith(`de`)?`de`:e.startsWith(`es`)?`es`:e.startsWith(`ja`)?`ja-JP`:e.startsWith(`ko`)?`ko`:e.startsWith(`fr`)?`fr`:e.startsWith(`ar`)?`ar`:e.startsWith(`it`)?`it`:e.startsWith(`tr`)?`tr`:e.startsWith(`uk`)?`uk`:e.startsWith(`id`)?`id`:e.startsWith(`pl`)?`pl`:e.startsWith(`th`)?`th`:e.startsWith(`vi`)?`vi`:e.startsWith(`nl`)?`nl`:e.startsWith(`fa`)?`fa`:`en`}async function h(e){if(!p(e))return null;let t=u[e];return(await t.loader())[t.exportName]??null}var g=new class{constructor(){this.locale=`en`,this.translations={en:i},this.subscribers=new Set,this.loadLocale()}readStoredLocale(){let e=n();if(!e)return null;try{return e.getItem(`openclaw.i18n.locale`)}catch{return null}}persistLocale(e){let t=n();if(t)try{t.setItem(`openclaw.i18n.locale`,e)}catch{}}resolveInitialLocale(){let e=this.readStoredLocale();return f(e)?e:m((typeof globalThis.navigator?.language==`string`?globalThis.navigator.language:null)??``)}loadLocale(){let e=this.resolveInitialLocale();if(e===`en`){this.locale=`en`;return}this.setLocale(e)}getLocale(){return this.locale}async setLocale(e){let t=e!==`en`&&!this.translations[e];if(!(this.locale===e&&!t)){if(t)try{let t=await h(e);if(!t)return;this.translations[e]=t}catch(t){console.error(`Failed to load locale: ${e}`,t);return}this.locale=e,this.persistLocale(e),this.notify()}}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}},_=(e,t)=>g.t(e,t),v=class{constructor(e){this.host=e,this.host.addController(this)}hostConnected(){this.unsubscribe=g.subscribe(()=>{this.host.requestUpdate()})}hostDisconnected(){this.unsubscribe?.()}};function y(e){return typeof e==`string`&&e.trim()||null}function b(e){return y(e)??void 0}function x(e){return b(e)?.toLowerCase()}function S(e){return x(e)??``}export{g as a,f as c,r as d,v as i,c as l,x as n,_ as o,b as r,d as s,S as t,n as u};
//# sourceMappingURL=string-coerce-Dt6Kt5Fx.js.map