nextclaw 0.9.21 → 0.9.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/index.js +12 -7
- package/package.json +5 -5
- package/templates/USAGE.md +16 -5
- package/ui-dist/assets/ChannelsList-DBDjwf-X.js +1 -0
- package/ui-dist/assets/{ChatPage-DIx05c6s.js → ChatPage-C18sGGk1.js} +1 -1
- package/ui-dist/assets/DocBrowser-ZOplDEMS.js +1 -0
- package/ui-dist/assets/LogoBadge-2LMzEMwe.js +1 -0
- package/ui-dist/assets/{MarketplacePage-BOzko5s9.js → MarketplacePage-D4JHYcB5.js} +2 -2
- package/ui-dist/assets/ModelConfig-DZVvdLFq.js +1 -0
- package/ui-dist/assets/ProvidersList-Dum31480.js +1 -0
- package/ui-dist/assets/{RuntimeConfig-Dt9pLB9P.js → RuntimeConfig-4sb3mpkd.js} +1 -1
- package/ui-dist/assets/SearchConfig-B4u_MxRG.js +1 -0
- package/ui-dist/assets/{SecretsConfig-C1PU0Yy8.js → SecretsConfig-BQXblZvb.js} +2 -2
- package/ui-dist/assets/SessionsConfig-Jk29xjQU.js +2 -0
- package/ui-dist/assets/{card-C7Gtw2Vs.js → card-BekAnCgX.js} +1 -1
- package/ui-dist/assets/config-layout-BHnOoweL.js +1 -0
- package/ui-dist/assets/{index-nEYGCJTC.css → index-BXwjfCEO.css} +1 -1
- package/ui-dist/assets/index-Dl6t70wA.js +8 -0
- package/ui-dist/assets/{input-oBvxsnV9.js → input-MMn_Na9q.js} +1 -1
- package/ui-dist/assets/{label-C7F8lMpQ.js → label-Dg2ydpN0.js} +1 -1
- package/ui-dist/assets/{page-layout-DO8BlScF.js → page-layout-7K0rcz0I.js} +1 -1
- package/ui-dist/assets/{session-run-status-Kg0FwAPn.js → session-run-status-CAdjSqeb.js} +1 -1
- package/ui-dist/assets/{switch-C6a5GyZB.js → switch-DnDMlDVu.js} +1 -1
- package/ui-dist/assets/{tabs-custom-BatFap5k.js → tabs-custom-khLM8lWj.js} +1 -1
- package/ui-dist/assets/{useConfirmDialog-zJzVKMdu.js → useConfirmDialog-BYA1XnVU.js} +1 -1
- package/ui-dist/assets/{vendor-TlME1INH.js → vendor-d7E8OgNx.js} +1 -1
- package/ui-dist/index.html +3 -3
- package/ui-dist/assets/ChannelsList-C49JQ-Zt.js +0 -1
- package/ui-dist/assets/DocBrowser-CpOosDEI.js +0 -1
- package/ui-dist/assets/LogoBadge-CL_8ZPXU.js +0 -1
- package/ui-dist/assets/ModelConfig-BZ4ZfaQB.js +0 -1
- package/ui-dist/assets/ProvidersList-fPpJ5gl6.js +0 -1
- package/ui-dist/assets/SessionsConfig-EskBOofQ.js +0 -2
- package/ui-dist/assets/index-Cn6_2To7.js +0 -8
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/DocBrowser-CpOosDEI.js","assets/vendor-TlME1INH.js","assets/ModelConfig-BZ4ZfaQB.js","assets/page-layout-DO8BlScF.js","assets/card-C7Gtw2Vs.js","assets/input-oBvxsnV9.js","assets/label-C7F8lMpQ.js","assets/config-hints-CApS3K_7.js","assets/provider-models-y4mUDcGF.js","assets/ChatPage-DIx05c6s.js","assets/useConfirmDialog-zJzVKMdu.js","assets/session-run-status-Kg0FwAPn.js","assets/MarketplacePage-BOzko5s9.js","assets/tabs-custom-BatFap5k.js","assets/ProvidersList-fPpJ5gl6.js","assets/LogoBadge-CL_8ZPXU.js","assets/ChannelsList-C49JQ-Zt.js","assets/switch-C6a5GyZB.js","assets/RuntimeConfig-Dt9pLB9P.js","assets/SessionsConfig-EskBOofQ.js","assets/SecretsConfig-C1PU0Yy8.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{t as _e,c as He,r as c,j as s,u as A,a as T,b,d as z,T as xe,I as $e,C as Se,S as we,e as We,f as be,P as Qe,g as ke,V as Ve,L as Ce,h as Pe,i as Ge,k as Je,l as Ye,m as Te,R as Xe,n as Ze,M as en,A as nn,B as tn,o as sn,p as rn,q as on,G as an,H as ln,K as cn,s as dn,N as V,v as hn,w as de,x as un,y as pn,z as fn,D as mn,E as gn,Q as yn,F as zn,J as vn,O as w,U as L,$ as xn,W as Sn,X as wn}from"./vendor-TlME1INH.js";(function(){const n=document.createElement("link").relList;if(n&&n.supports&&n.supports("modulepreload"))return;for(const r of document.querySelectorAll('link[rel="modulepreload"]'))o(r);new MutationObserver(r=>{for(const a of r)if(a.type==="childList")for(const u of a.addedNodes)u.tagName==="LINK"&&u.rel==="modulepreload"&&o(u)}).observe(document,{childList:!0,subtree:!0});function t(r){const a={};return r.integrity&&(a.integrity=r.integrity),r.referrerPolicy&&(a.referrerPolicy=r.referrerPolicy),r.crossOrigin==="use-credentials"?a.credentials="include":r.crossOrigin==="anonymous"?a.credentials="omit":a.credentials="same-origin",a}function o(r){if(r.ep)return;r.ep=!0;const a=t(r);fetch(r.href,a)}})();const bn="modulepreload",kn=function(e){return"/"+e},he={},N=function(n,t,o){let r=Promise.resolve();if(t&&t.length>0){let u=function(g){return Promise.all(g.map(v=>Promise.resolve(v).then(S=>({status:"fulfilled",value:S}),S=>({status:"rejected",reason:S}))))};document.getElementsByTagName("link");const i=document.querySelector("meta[property=csp-nonce]"),x=(i==null?void 0:i.nonce)||(i==null?void 0:i.getAttribute("nonce"));r=u(t.map(g=>{if(g=kn(g),g in he)return;he[g]=!0;const v=g.endsWith(".css"),S=v?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${g}"]${S}`))return;const p=document.createElement("link");if(p.rel=v?"stylesheet":bn,v||(p.as="script"),p.crossOrigin="",p.href=g,x&&p.setAttribute("nonce",x),document.head.appendChild(p),v)return new Promise((D,M)=>{p.addEventListener("load",D),p.addEventListener("error",()=>M(new Error(`Unable to preload CSS for ${g}`)))})}))}function a(u){const i=new Event("vite:preloadError",{cancelable:!0});if(i.payload=u,window.dispatchEvent(i),!i.defaultPrevented)throw u}return r.then(u=>{for(const i of u||[])i.status==="rejected"&&a(i.reason);return n().catch(a)})};function P(...e){return _e(He(e))}const Ie="nextclaw.ui.language",ue=[{value:"en",label:"English"},{value:"zh",label:"中文"}],Cn={en:"en-US",zh:"zh-CN"};let $="en",J=!1;const Y=new Set;function Pn(e){return e==="en"||e==="zh"}function Tn(){var n;return typeof navigator>"u"?"en":(((n=navigator.language)==null?void 0:n.toLowerCase())??"en").startsWith("zh")?"zh":"en"}function In(){if(typeof window>"u")return"en";try{const e=window.localStorage.getItem(Ie);if(Pn(e))return e}catch{}return Tn()}function oe(){return J||($=In(),J=!0),$}function F(){return J?$:oe()}function An(e){if(oe(),$!==e){if($=e,typeof window<"u")try{window.localStorage.setItem(Ie,e)}catch{}Y.forEach(n=>n(e))}}function Dn(e){return Y.add(e),()=>{Y.delete(e)}}function ae(e=F()){return Cn[e]}function Vt(e,n=F()){if(!e)return"-";const t=e instanceof Date?e:new Date(e);return Number.isNaN(t.getTime())?typeof e=="string"?e:"-":t.toLocaleString(ae(n))}function Gt(e,n=F()){if(!e)return"-";const t=e instanceof Date?e:new Date(e);return Number.isNaN(t.getTime())?typeof e=="string"?e:"-":new Intl.DateTimeFormat(ae(n),{year:"numeric",month:"2-digit",day:"2-digit"}).format(t)}function Jt(e,n=F()){return new Intl.NumberFormat(ae(n)).format(e)}const pe={chat:{zh:"对话",en:"Chat"},model:{zh:"模型",en:"Model"},providers:{zh:"提供商",en:"Providers"},channels:{zh:"渠道",en:"Channels"},cron:{zh:"定时任务",en:"Cron Jobs"},secrets:{zh:"密钥管理",en:"Secrets"},runtime:{zh:"路由与运行时",en:"Routing & Runtime"},marketplace:{zh:"市场",en:"Marketplace"},advanced:{zh:"高级",en:"Advanced"},settings:{zh:"设置",en:"Settings"},backToMain:{zh:"返回主界面",en:"Back to Main"},enabled:{zh:"启用",en:"Enabled"},disabled:{zh:"禁用",en:"Disabled"},save:{zh:"保存",en:"Save"},cancel:{zh:"取消",en:"Cancel"},delete:{zh:"删除",en:"Delete"},add:{zh:"添加",en:"Add"},edit:{zh:"编辑",en:"Edit"},loading:{zh:"加载中...",en:"Loading..."},success:{zh:"成功",en:"Success"},error:{zh:"错误",en:"Error"},confirm:{zh:"确认",en:"Confirm"},unchanged:{zh:"未修改",en:"Unchanged"},saving:{zh:"保存中...",en:"Saving..."},remove:{zh:"移除",en:"Remove"},all:{zh:"全部",en:"All"},prev:{zh:"上一页",en:"Prev"},next:{zh:"下一页",en:"Next"},noneOption:{zh:"无",en:"None"},language:{zh:"语言",en:"Language"},theme:{zh:"主题",en:"Theme"},themeWarm:{zh:"暖色",en:"Warm"},themeCool:{zh:"冷色",en:"Cool"},isRequired:{zh:"必填",en:"is required"},duplicate:{zh:"重复",en:"duplicate"},notFound:{zh:"未找到",en:"not found"},modelPageTitle:{zh:"模型配置",en:"Model Configuration"},modelPageDescription:{zh:"配置默认 AI 模型选择",en:"Configure default AI model selection"},defaultModel:{zh:"默认模型",en:"Default Model"},workspace:{zh:"工作空间",en:"Workspace"},modelName:{zh:"模型",en:"Model"},modelPickerNoOptions:{zh:"暂无可选模型",en:"No model options available"},modelPickerUseCustom:{zh:"使用自定义模型:{value}",en:"Use custom model: {value}"},modelInputCustomHint:{zh:"如果列表里没有目标模型,可直接输入自定义模型 ID。",en:"If the model is not listed, type a custom model ID directly."},modelIdentifierHelp:{zh:"Agent 默认模型标识,使用带 provider 前缀的格式。例如:openai/gpt-5.1、anthropic/claude-opus-4-1、deepseek/deepseek-chat、minimax/MiniMax-M2.5、openrouter/openai/gpt-5.3-codex。",en:"Default model identifier used by the agent. Use provider-prefixed format. Examples: openai/gpt-5.1 · anthropic/claude-opus-4-1 · deepseek/deepseek-chat · minimax/MiniMax-M2.5 · openrouter/openai/gpt-5.3-codex."},maxToolIterations:{zh:"最大工具迭代次数",en:"Max Tool Iterations"},saveChanges:{zh:"保存变更",en:"Save Changes"},providersPageTitle:{zh:"AI 提供商",en:"AI Providers"},providersPageDescription:{zh:"在一个页面内完成提供商切换、配置与保存。",en:"Switch, configure, and save providers in one continuous workspace."},providersLoading:{zh:"加载中...",en:"Loading..."},providersTabConfigured:{zh:"已配置",en:"Configured"},providersTabAll:{zh:"全部提供商",en:"All Providers"},providersFilterPlaceholder:{zh:"搜索提供商",en:"Search providers"},providersNoMatch:{zh:"没有匹配的提供商",en:"No matching providers"},providerAddCustom:{zh:"新增自定义提供商",en:"Add Custom Provider"},providerDelete:{zh:"删除该提供商",en:"Delete Provider"},providerDeleteConfirm:{zh:"确认删除这个自定义提供商吗?删除后不可恢复。",en:"Delete this custom provider? This action cannot be undone."},providersSelectPlaceholder:{zh:"选择提供商",en:"Select Provider"},providersSelectTitle:{zh:"选择左侧提供商开始配置",en:"Select a provider from the left to configure"},providersSelectDescription:{zh:"你可以连续切换多个提供商并逐个保存配置。",en:"Switch between providers continuously and save each configuration."},providersDefaultDescription:{zh:"为你的 Agent 配置 AI 服务",en:"Configure AI services for your agents"},providersEmptyTitle:{zh:"尚未配置提供商",en:"No providers configured"},providersEmptyDescription:{zh:"添加一个 AI 提供商后即可开始使用。",en:"Add an AI provider to start using the platform."},apiKey:{zh:"API 密钥",en:"API Key"},apiBase:{zh:"API Base URL",en:"API Base URL"},extraHeaders:{zh:"额外请求头",en:"Extra Headers"},wireApi:{zh:"请求接口",en:"Wire API"},wireApiAuto:{zh:"自动(优先 Chat,必要时 Responses)",en:"Auto (Chat with fallback)"},wireApiChat:{zh:"Chat Completions",en:"Chat Completions"},wireApiResponses:{zh:"Responses",en:"Responses"},apiKeySet:{zh:"已设置",en:"Set"},apiKeyNotSet:{zh:"未设置",en:"Not Set"},showKey:{zh:"显示密钥",en:"Show Key"},hideKey:{zh:"隐藏密钥",en:"Hide Key"},providerFormDescription:{zh:"配置 AI 提供商的 API 密钥与参数",en:"Configure API keys and parameters for AI provider"},providerDisplayName:{zh:"自定义名称",en:"Custom Name"},providerDisplayNamePlaceholder:{zh:"例如:中转站 A",en:"For example: Relay A"},providerDisplayNameHelp:{zh:"仅用于界面展示,便于区分多个自定义 Provider。",en:"Display-only label to distinguish multiple custom providers."},enterApiKey:{zh:"请输入 API 密钥",en:"Enter API Key"},providerApiBaseHelp:{zh:"留空或恢复默认即可使用预置 API Base。",en:"Leave empty or reset to use the default API base."},providerApiBaseHelpMinimax:{zh:"MiniMax 中国区请使用 https://api.minimaxi.com/v1;海外请使用 https://api.minimax.io/v1。",en:"Use https://api.minimaxi.com/v1 for Mainland China accounts, and https://api.minimax.io/v1 for overseas accounts."},providerOpenAICompatHint:{zh:"自定义提供商默认按 OpenAI 兼容 API 格式接入(Chat Completions / Responses)。",en:"Custom providers use OpenAI-compatible API format by default (Chat Completions / Responses)."},providerExtraHeadersHelp:{zh:"用于自定义请求头(可选)。",en:"Optional custom request headers."},providerTestConnection:{zh:"测试连接",en:"Test Connection"},providerTestingConnection:{zh:"测试中...",en:"Testing..."},providerTestConnectionSuccess:{zh:"连接测试通过",en:"Connection test passed"},providerTestConnectionFailed:{zh:"连接测试失败",en:"Connection test failed"},providerModelsTitle:{zh:"可用模型列表",en:"Available Models"},providerModelInputPlaceholder:{zh:"输入模型 ID(无需 provider 前缀,不在列表也可)",en:"Enter model id (without provider prefix; custom values allowed)"},providerModelInputHint:{zh:"列表仅作参考,不在列表也可直接输入并添加。",en:"The list is only a reference. You can type and add models that are not listed."},providerAddModel:{zh:"添加模型",en:"Add Model"},providerModelsEmpty:{zh:"当前没有模型,可直接输入并添加。",en:"No models yet. Add one by typing model id."},providerModelDefaultTag:{zh:"默认",en:"Default"},providerModelCustomTag:{zh:"自定义",en:"Custom"},providerModelsHelp:{zh:"系统会先填充预置模型;你可以在这里新增或删除。请填写当前提供商自己的模型 ID(不带当前 provider 前缀);若输入带当前 provider 前缀会自动去除,但会保留后续路径(如 openai/gpt-5)。",en:"Built-in models are prefilled and can be added or removed here. Enter provider-local model ids without the current provider prefix; if prefixed input is entered, only the current provider prefix is removed while the remaining path is preserved (for example, openai/gpt-5)."},providerModelsEmptyShort:{zh:"暂无可用模型",en:"No models available"},providerAddFirstModel:{zh:"添加第一个模型",en:"Add first model"},providerDisplayNameHelpShort:{zh:"便于区分多个自定义提供商",en:"Helps distinguish multiple custom providers"},providerApiBaseHelpShort:{zh:"一般只需填写域名,系统自动补全路径",en:"Usually just the domain; path auto-appended"},providerExtraHeadersHelpShort:{zh:"可选,用于自定义鉴权等场景",en:"Optional, for custom auth etc."},providerAdvancedSettings:{zh:"高级设置",en:"Advanced Settings"},providerAuthSectionTitle:{zh:"提供商授权",en:"Provider Authorization"},providerAuthStarting:{zh:"启动中...",en:"Starting..."},providerAuthAuthorizing:{zh:"授权中...",en:"Authorizing..."},providerAuthAuthorizeInBrowser:{zh:"浏览器授权",en:"Authorize in Browser"},providerAuthWaitingBrowser:{zh:"等待浏览器完成授权...",en:"Waiting for browser authorization..."},providerAuthCompleted:{zh:"授权已完成。",en:"Authorization completed."},providerAuthOpenPrompt:{zh:"请在浏览器完成授权,验证码:",en:"Open browser and complete authorization (code: "},providerAuthOpenPromptSuffix:{zh:"",en:")"},providerAuthStartFailed:{zh:"启动授权失败",en:"Failed to start authorization"},providerAuthMethodLabel:{zh:"授权区域",en:"Authorization Region"},providerAuthMethodPlaceholder:{zh:"请选择授权方式",en:"Select authorization method"},providerAuthImportFromCli:{zh:"从 Qwen CLI 导入",en:"Import From Qwen CLI"},providerAuthImporting:{zh:"导入中...",en:"Importing..."},providerAuthImportSuccess:{zh:"已从 CLI 导入凭证。",en:"Imported provider credentials from CLI."},providerAuthImportStatusPrefix:{zh:"CLI 导入成功。",en:"Imported credentials from CLI successfully."},providerAuthImportFailed:{zh:"导入凭证失败",en:"Failed to import credentials"},providerAuthSessionLabel:{zh:"会话",en:"Session"},resetToDefault:{zh:"恢复默认",en:"Reset to Default"},leaveBlankToKeepUnchanged:{zh:"留空则保持不变",en:"Leave blank to keep unchanged"},channelsPageTitle:{zh:"消息渠道",en:"Message Channels"},channelsPageDescription:{zh:"在一个页面中连续筛选、切换并配置各个消息渠道。",en:"Filter, switch, and configure messaging channels in one continuous workspace."},channelsLoading:{zh:"加载渠道中...",en:"Loading channels..."},channelsTabEnabled:{zh:"已启用",en:"Enabled"},channelsTabAll:{zh:"全部渠道",en:"All Channels"},channelsFilterPlaceholder:{zh:"搜索渠道",en:"Search channels"},channelsNoMatch:{zh:"没有匹配的渠道",en:"No matching channels"},channelsSelectTitle:{zh:"选择左侧渠道开始配置",en:"Select a channel from the left to configure"},channelsSelectDescription:{zh:"你可以连续切换多个渠道并逐个保存配置。",en:"Switch between channels continuously and save each configuration."},channelsFormDescription:{zh:"配置消息渠道参数",en:"Configure message channel parameters"},channelsEmptyTitle:{zh:"暂无启用渠道",en:"No channels enabled"},channelsEmptyDescription:{zh:"启用一个消息渠道以开始接收消息。",en:"Enable a messaging channel to start receiving messages."},channelDescriptionDefault:{zh:"配置该通信渠道",en:"Configure this communication channel"},channelDescTelegram:{zh:"连接 Telegram 机器人以进行即时消息收发",en:"Connect with Telegram bots for instant messaging"},channelDescSlack:{zh:"接入 Slack 工作区进行团队协作消息处理",en:"Integrate with Slack workspaces for team collaboration"},channelDescEmail:{zh:"通过邮件协议收发消息",en:"Send and receive messages via email protocols"},channelDescWebhook:{zh:"接收 HTTP Webhook 以支持自定义集成",en:"Receive HTTP webhooks for custom integrations"},channelDescDiscord:{zh:"将 Discord 机器人连接到你的社区服务器",en:"Connect Discord bots to your community servers"},channelDescFeishu:{zh:"企业消息与协作平台接入",en:"Enterprise messaging and collaboration platform"},configureMessageChannelParameters:{zh:"配置消息渠道参数",en:"Configure message channel parameters"},channelsGuideTitle:{zh:"查看指南",en:"View Guide"},allowFrom:{zh:"允许来源",en:"Allow From"},token:{zh:"Token",en:"Token"},botToken:{zh:"Bot Token",en:"Bot Token"},appToken:{zh:"App Token",en:"App Token"},appId:{zh:"App ID",en:"App ID"},corpId:{zh:"企业 ID",en:"Corp ID"},agentId:{zh:"应用 Agent ID",en:"Agent ID"},appSecret:{zh:"App Secret",en:"App Secret"},markdownSupport:{zh:"Markdown 支持",en:"Markdown Support"},clientId:{zh:"Client ID",en:"Client ID"},clientSecret:{zh:"Client Secret",en:"Client Secret"},encryptKey:{zh:"加密密钥",en:"Encrypt Key"},verificationToken:{zh:"验证令牌",en:"Verification Token"},bridgeUrl:{zh:"桥接 URL",en:"Bridge URL"},gatewayUrl:{zh:"网关 URL",en:"Gateway URL"},proxy:{zh:"代理",en:"Proxy"},intents:{zh:"Intents",en:"Intents"},mode:{zh:"模式",en:"Mode"},webhookPath:{zh:"Webhook 路径",en:"Webhook Path"},callbackPort:{zh:"回调端口",en:"Callback Port"},callbackPath:{zh:"回调路径",en:"Callback Path"},groupPolicy:{zh:"群组策略",en:"Group Policy"},consentGranted:{zh:"同意条款",en:"Consent Granted"},imapHost:{zh:"IMAP 服务器",en:"IMAP Host"},imapPort:{zh:"IMAP 端口",en:"IMAP Port"},imapUsername:{zh:"IMAP 用户名",en:"IMAP Username"},imapPassword:{zh:"IMAP 密码",en:"IMAP Password"},imapMailbox:{zh:"IMAP 邮箱",en:"IMAP Mailbox"},imapUseSsl:{zh:"IMAP 使用 SSL",en:"IMAP Use SSL"},smtpHost:{zh:"SMTP 服务器",en:"SMTP Host"},smtpPort:{zh:"SMTP 端口",en:"SMTP Port"},smtpUsername:{zh:"SMTP 用户名",en:"SMTP Username"},smtpPassword:{zh:"SMTP 密码",en:"SMTP Password"},smtpUseTls:{zh:"SMTP 使用 TLS",en:"SMTP Use TLS"},smtpUseSsl:{zh:"SMTP 使用 SSL",en:"SMTP Use SSL"},fromAddress:{zh:"发件地址",en:"From Address"},autoReplyEnabled:{zh:"自动回复已启用",en:"Auto Reply Enabled"},pollIntervalSeconds:{zh:"轮询间隔(秒)",en:"Poll Interval (s)"},markSeen:{zh:"标记为已读",en:"Mark Seen"},maxBodyChars:{zh:"最大正文字符数",en:"Max Body Chars"},subjectPrefix:{zh:"主题前缀",en:"Subject Prefix"},baseUrl:{zh:"Base URL",en:"Base URL"},socketUrl:{zh:"Socket URL",en:"Socket URL"},socketPath:{zh:"Socket 路径",en:"Socket Path"},socketDisableMsgpack:{zh:"禁用 Msgpack",en:"Disable Msgpack"},socketReconnectDelayMs:{zh:"重连延迟(ms)",en:"Reconnect Delay (ms)"},socketMaxReconnectDelayMs:{zh:"最大重连延迟(ms)",en:"Max Reconnect Delay (ms)"},socketConnectTimeoutMs:{zh:"连接超时(ms)",en:"Connect Timeout (ms)"},refreshIntervalMs:{zh:"刷新间隔(ms)",en:"Refresh Interval (ms)"},watchTimeoutMs:{zh:"监视超时(ms)",en:"Watch Timeout (ms)"},watchLimit:{zh:"监视限制",en:"Watch Limit"},retryDelayMs:{zh:"重试延迟(ms)",en:"Retry Delay (ms)"},maxRetryAttempts:{zh:"最大重试次数",en:"Max Retry Attempts"},clawToken:{zh:"Claw Token",en:"Claw Token"},agentUserId:{zh:"代理用户ID",en:"Agent User ID"},sessions:{zh:"会话",en:"Sessions"},panels:{zh:"面板",en:"Panels"},mentionRequireInGroups:{zh:"群组中需要@",en:"Require Mention in Groups"},groups:{zh:"群组",en:"Groups"},replyDelayMode:{zh:"回复延迟模式",en:"Reply Delay Mode"},replyDelayMs:{zh:"回复延迟(ms)",en:"Reply Delay (ms)"},secret:{zh:"密钥",en:"Secret"},accountId:{zh:"账号 ID",en:"Account ID"},dmPolicy:{zh:"私聊策略",en:"DM Policy"},groupAllowFrom:{zh:"群组允许来源",en:"Group Allow From"},requireMention:{zh:"需要 @ 提及",en:"Require Mention"},mentionPatterns:{zh:"提及匹配规则",en:"Mention Patterns"},groupRulesJson:{zh:"群组规则(JSON)",en:"Group Rules (JSON)"},allowBotMessages:{zh:"允许机器人消息",en:"Allow Bot Messages"},attachmentMaxSizeMb:{zh:"附件最大体积(MB)",en:"Attachment Max Size (MB)"},streamingMode:{zh:"流式模式",en:"Streaming Mode"},draftChunkingJson:{zh:"草稿分块(JSON)",en:"Draft Chunking (JSON)"},textChunkLimit:{zh:"文本分块上限",en:"Text Chunk Limit"},invalidJson:{zh:"JSON 格式无效",en:"Invalid JSON"},runtimePageTitle:{zh:"路由与运行时",en:"Routing & Runtime"},runtimePageDescription:{zh:"对齐 OpenClaw 的多 Agent 路由:绑定规则、Agent 池、私聊范围。",en:"Align multi-agent routing with OpenClaw: bindings, agent pool, and DM scope."},runtimeLoading:{zh:"加载运行时配置中...",en:"Loading runtime settings..."},dmScope:{zh:"私聊范围",en:"DM Scope"},dmScopeHelp:{zh:"控制私聊会话如何隔离。",en:"Control how direct-message sessions are isolated."},defaultContextTokens:{zh:"默认上下文 Token",en:"Default Context Tokens"},defaultContextTokensHelp:{zh:"当 Agent 未设置单独值时使用该上下文预算。",en:"Input context budget for agents when no per-agent override is set."},defaultEngine:{zh:"默认引擎",en:"Default Engine"},defaultEngineHelp:{zh:"默认使用的 Agent 引擎类型,例如 native 或 codex-sdk。",en:"Default agent engine kind, for example native or codex-sdk."},maxPingPongTurns:{zh:"最大乒乓轮次",en:"Max Ping-Pong Turns"},maxPingPongTurnsHelp:{zh:"设为 0 可阻止 Agent 间自动 ping-pong。",en:"Set to 0 to block automatic agent-to-agent ping-pong loops."},agentList:{zh:"Agent 列表",en:"Agent List"},agentListHelp:{zh:"在同一个网关进程中运行多个固定角色 Agent。",en:"Run multiple fixed-role agents in one gateway process."},bindings:{zh:"绑定规则",en:"Bindings"},bindingsHelp:{zh:"根据渠道 + 账号 + 对端将入站消息路由到目标 Agent。",en:"Route inbound message by channel + account + peer to target agent."},agentIdRequiredError:{zh:"agents.list[{index}].id 必填",en:"agents.list[{index}].id is required"},duplicateAgentId:{zh:"重复的 agent id",en:"Duplicate agent id"},bindingAgentIdRequired:{zh:"bindings[{index}].agentId 必填",en:"bindings[{index}].agentId is required"},bindingAgentIdNotFound:{zh:"bindings[{index}].agentId 未在 agents.list/main 中找到",en:"bindings[{index}].agentId not found in agents.list/main"},bindingChannelRequired:{zh:"bindings[{index}].match.channel 必填",en:"bindings[{index}].match.channel is required"},bindingPeerIdRequired:{zh:"设置 peer.kind 时,bindings[{index}].match.peer.id 必填",en:"bindings[{index}].match.peer.id is required when peer.kind is set"},agentIdPlaceholder:{zh:"Agent ID(例如 engineer)",en:"Agent ID (e.g. engineer)"},workspaceOverridePlaceholder:{zh:"工作空间覆盖(可选)",en:"Workspace override (optional)"},modelOverridePlaceholder:{zh:"模型覆盖(可选)",en:"Model override (optional)"},defaultEnginePlaceholder:{zh:"默认引擎(如 native 或 codex-sdk)",en:"Default engine (e.g. native or codex-sdk)"},engineOverridePlaceholder:{zh:"引擎覆盖(可选)",en:"Engine override (optional)"},contextTokensPlaceholder:{zh:"上下文 tokens",en:"Context tokens"},maxToolsPlaceholder:{zh:"最大工具次数",en:"Max tools"},defaultAgent:{zh:"默认 Agent",en:"Default agent"},addAgent:{zh:"添加 Agent",en:"Add Agent"},targetAgentIdPlaceholder:{zh:"目标 Agent ID",en:"Target agent ID"},channelPlaceholder:{zh:"渠道(例如 discord)",en:"Channel (e.g. discord)"},accountIdOptionalPlaceholder:{zh:"账号 ID(可选)",en:"Account ID (optional)"},peerKindOptional:{zh:"对端类型(可选)",en:"Peer kind (optional)"},peerIdPlaceholder:{zh:"对端 ID(需先设置对端类型)",en:"Peer ID (requires peer kind)"},addBinding:{zh:"添加绑定",en:"Add Binding"},saveRuntimeSettings:{zh:"保存运行时设置",en:"Save Runtime Settings"},secretsPageTitle:{zh:"密钥管理",en:"Secrets Management"},secretsPageDescription:{zh:"集中管理 secrets.providers、secrets.defaults 与 secrets.refs。",en:"Manage secrets.providers, secrets.defaults, and secrets.refs in one place."},secretsEnabledHelp:{zh:"关闭后不会解析 `{{secret:*}}` 引用。",en:"When disabled, `{{secret:*}}` refs are not resolved."},defaultEnvProvider:{zh:"默认 Env 提供器",en:"Default Env Provider"},defaultFileProvider:{zh:"默认 File 提供器",en:"Default File Provider"},defaultExecProvider:{zh:"默认 Exec 提供器",en:"Default Exec Provider"},secretProvidersTitle:{zh:"Secret Providers",en:"Secret Providers"},secretProvidersDescription:{zh:"定义可复用的 secrets provider(env/file/exec)。",en:"Define reusable secret providers (env/file/exec)."},providerAlias:{zh:"提供器别名",en:"Provider Alias"},removeProvider:{zh:"移除提供器",en:"Remove Provider"},envPrefix:{zh:"环境变量前缀",en:"Environment Prefix"},secretFilePath:{zh:"Secrets 文件路径",en:"Secrets File Path"},secretExecCommand:{zh:"执行命令",en:"Exec Command"},secretExecArgs:{zh:"命令参数(每行一个)",en:"Exec Args (one per line)"},secretExecCwd:{zh:"执行目录(可选)",en:"Exec Working Directory (optional)"},secretExecTimeoutMs:{zh:"超时(毫秒)",en:"Timeout (ms)"},addSecretProvider:{zh:"添加 Provider",en:"Add Provider"},secretRefsTitle:{zh:"Secret Refs",en:"Secret Refs"},secretRefsDescription:{zh:"把配置路径映射到 secret 引用(source/provider/id)。",en:"Map config paths to secret refs (source/provider/id)."},secretConfigPath:{zh:"配置路径",en:"Config Path"},secretId:{zh:"Secret ID",en:"Secret ID"},secretProviderAlias:{zh:"Provider 别名",en:"Provider Alias"},addSecretRef:{zh:"添加 Ref",en:"Add Ref"},sessionsPageTitle:{zh:"会话管理",en:"Sessions"},sessionsPageDescription:{zh:"管理会话:筛选、按渠道分组、查看历史、改标签/偏好模型、清空和删除。",en:"Manage sessions: filter, group by channel, inspect history, edit metadata, clear, and delete."},sessionsFiltersTitle:{zh:"筛选",en:"Filters"},sessionsFiltersDescription:{zh:"按关键词、活跃窗口和分组方式筛选会话。",en:"Filter sessions by query, activity window, and grouping mode."},sessionsSearchPlaceholder:{zh:"搜索 key 或标签",en:"Search session key or label"},sessionsActiveMinutesPlaceholder:{zh:"活跃分钟(0=不限)",en:"Active minutes (0 = no limit)"},sessionsLimitPlaceholder:{zh:"展示上限",en:"Limit"},sessionsGroupModeLabel:{zh:"分组方式",en:"Grouping"},sessionsGroupModeAll:{zh:"不分组 / 全部",en:"All (No grouping)"},sessionsGroupModeByChannel:{zh:"按渠道分组",en:"Group by channel"},sessionsListTitle:{zh:"会话列表",en:"Session list"},sessionsTotalLabel:{zh:"总数",en:"Total"},sessionsCurrentLabel:{zh:"当前展示",en:"Showing"},sessionsLoading:{zh:"加载会话中...",en:"Loading sessions..."},sessionsEmpty:{zh:"暂无会话。",en:"No sessions yet."},sessionsKeyLabel:{zh:"键",en:"Key"},sessionsChannelLabel:{zh:"渠道",en:"Channel"},sessionsMessagesLabel:{zh:"消息数",en:"Messages"},sessionsUpdatedLabel:{zh:"更新时间",en:"Updated"},sessionsLastRoleLabel:{zh:"最后角色",en:"Last Role"},sessionsLabelPlaceholder:{zh:"会话标签(可选)",en:"Session label (optional)"},sessionsModelPlaceholder:{zh:"偏好模型(可选)",en:"Preferred model (optional)"},sessionsShowHistory:{zh:"查看历史",en:"View history"},sessionsHideHistory:{zh:"隐藏历史",en:"Hide history"},sessionsSaveMeta:{zh:"保存元信息",en:"Save metadata"},sessionsClearHistory:{zh:"清空历史",en:"Clear history"},sessionsDeleteConfirm:{zh:"确认删除会话",en:"Delete session"},sessionsHistoryTitle:{zh:"历史",en:"History"},sessionsHistoryDescription:{zh:"最近 200 条消息(展示窗口)。",en:"Latest 200 messages (display window)."},sessionsHistoryLoading:{zh:"加载历史中...",en:"Loading history..."},sessionsApplyingChanges:{zh:"正在应用会话变更...",en:"Applying session changes..."},sessionsUnknownChannel:{zh:"未知渠道",en:"Unknown channel"},sessionsAllChannels:{zh:"全部渠道",en:"All Channels"},sessionsRunStatusRunning:{zh:"运行中",en:"Running"},sessionsRunStatusQueued:{zh:"排队中",en:"Queued"},sessionsMetadata:{zh:"元信息",en:"Metadata"},sessionsNoSelectionTitle:{zh:"未选择会话",en:"No Session Selected"},sessionsNoSelectionDescription:{zh:"从左侧列表选择一个会话以查看聊天历史并配置其元信息。",en:"Select a session from the list on the left to view its chat history and configure its metadata."},chatPageTitle:{zh:"Agent 对话",en:"Agent Chat"},chatPageDescription:{zh:"在 UI 内直接与 Agent 交互,支持多会话与多 Agent 切换。",en:"Chat with your agent directly in UI with multi-session and multi-agent switching."},chatRefresh:{zh:"刷新",en:"Refresh"},chatNewSession:{zh:"新会话",en:"New Session"},chatSearchSessionPlaceholder:{zh:"搜索会话 key / 标签",en:"Search session key / label"},chatAgentLabel:{zh:"目标 Agent",en:"Target Agent"},chatSelectAgent:{zh:"选择 Agent",en:"Select Agent"},chatModelLabel:{zh:"对话模型",en:"Chat Model"},chatSelectModel:{zh:"选择模型",en:"Select model"},chatSessionTypeLabel:{zh:"会话类型",en:"Session Type"},chatSessionTypeNative:{zh:"原生",en:"Native"},chatSessionTypeCodex:{zh:"Codex",en:"Codex"},chatSessionTypeClaude:{zh:"Claude Code",en:"Claude Code"},chatSessionTypeUnavailableSuffix:{zh:"当前不可用,请启用对应插件或新建 Native 会话。",en:"is unavailable now. Re-enable the plugin or create a native session."},chatModelNoOptions:{zh:"暂无可用模型,请先配置提供商。",en:"No available models. Configure a provider first."},chatGoConfigureProvider:{zh:"去配置提供商",en:"Go to Providers"},chatProviderSetupTitle:{zh:"开始前先配置提供商",en:"Configure a Provider First"},chatProviderSetupDescription:{zh:"你还没有可用模型。先在提供商页面配置并保存至少一个 Provider 后,再回来开始对话。",en:"No models are available yet. Configure and save at least one provider, then return to start chatting."},chatSessionLabel:{zh:"当前会话",en:"Current Session"},chatNoSession:{zh:"未选择会话",en:"No session selected"},chatNoSessionHint:{zh:"创建一个会话并发送第一条消息。",en:"Create a session and send your first message."},chatHistoryLoading:{zh:"加载会话历史中...",en:"Loading session history..."},chatNoMessages:{zh:"暂无消息,发送一条开始对话。",en:"No messages yet. Send one to start."},chatTyping:{zh:"Agent 正在思考...",en:"Agent is thinking..."},chatInputPlaceholder:{zh:"输入消息,输入 / 选择技能,Enter 发送,Shift + Enter 换行",en:"Type a message, type / to select skills, Enter to send, Shift + Enter for newline"},chatInputHint:{zh:"支持多轮上下文,默认走当前会话。",en:"Multi-turn context is preserved in the current session."},chatSlashSectionCommands:{zh:"命令",en:"Commands"},chatSlashSectionSkills:{zh:"技能",en:"Skills"},chatSlashTypeCommand:{zh:"命令",en:"Command"},chatSlashTypeSkill:{zh:"技能",en:"Skill"},chatSlashSkillSpec:{zh:"标识",en:"Spec"},chatSlashLoading:{zh:"加载命令与技能中…",en:"Loading commands and skills…"},chatSlashNoResult:{zh:"无匹配项",en:"No matches"},chatSlashHint:{zh:"输入 / 触发命令或技能选择",en:"Type / to access commands and skills"},chatSlashCommandHint:{zh:"回车插入命令,继续输入参数后发送。",en:"Press Enter to insert command, then add args and send."},chatSlashSkillHint:{zh:"回车把该技能加入本轮请求。",en:"Press Enter to add this skill for the next turn."},chatSend:{zh:"发送",en:"Send"},chatStop:{zh:"停止",en:"Stop"},chatStopPreparing:{zh:"正在建立可停止会话,请稍候…",en:"Preparing stoppable run…"},chatStopUnavailable:{zh:"当前后端引擎不支持手动停止。",en:"Manual stop is not supported by the current backend engine."},chatSending:{zh:"发送中...",en:"Sending..."},chatQueueSend:{zh:"排队发送",en:"Queue"},chatQueuedHintPrefix:{zh:"当前有",en:"Queued"},chatQueuedHintSuffix:{zh:"条消息待发送。",en:"pending messages."},chatQueueMoveFirst:{zh:"置顶到下一条",en:"Move to Next"},chatDeleteSession:{zh:"删除会话",en:"Delete Session"},chatDeleteSessionConfirm:{zh:"确认删除当前会话?",en:"Delete the current session?"},chatSendFailed:{zh:"发送消息失败",en:"Failed to send message"},chatRoleUser:{zh:"你",en:"You"},chatRoleAssistant:{zh:"助手",en:"Assistant"},chatRoleTool:{zh:"工具",en:"Tool"},chatRoleSystem:{zh:"系统",en:"System"},chatRoleMessage:{zh:"消息",en:"Message"},chatToolCall:{zh:"工具调用",en:"Tool Call"},chatToolResult:{zh:"工具结果",en:"Tool Result"},chatToolWorkflow:{zh:"工具工作流",en:"Tool Workflow"},chatToolWorkflowDetails:{zh:"展开查看参数和结果",en:"Expand to view params and results"},chatToolOutput:{zh:"查看输出",en:"View Output"},chatToolNoOutput:{zh:"无输出(执行完成)",en:"No output (completed)"},chatReasoning:{zh:"查看推理内容",en:"Show reasoning"},chatCodeCopy:{zh:"复制代码",en:"Copy"},chatCodeCopied:{zh:"已复制",en:"Copied"},chatSidebarNewTask:{zh:"新任务",en:"New Task"},chatSidebarSearchPlaceholder:{zh:"搜索对话...",en:"Search conversations..."},chatSidebarScheduledTasks:{zh:"定时任务",en:"Scheduled Tasks"},chatSidebarSkills:{zh:"技能",en:"Skills"},chatSidebarTaskRecords:{zh:"会话记录",en:"Sessions"},chatSidebarToday:{zh:"今天",en:"Today"},chatSidebarYesterday:{zh:"昨天",en:"Yesterday"},chatSidebarPrevious7Days:{zh:"近 7 天",en:"Previous 7 Days"},chatSidebarOlder:{zh:"更早",en:"Older"},chatWelcomeTitle:{zh:"你好,有什么可以帮你的吗?",en:"Hello, how can I help you?"},chatWelcomeSubtitle:{zh:"开始一个新任务或选择已有对话",en:"Start a new task or select an existing conversation"},chatWelcomeCapability1Title:{zh:"智能对话",en:"Smart Conversations"},chatWelcomeCapability1Desc:{zh:"多轮上下文对话,支持多种 AI 模型",en:"Multi-turn context conversations with multiple AI models"},chatWelcomeCapability2Title:{zh:"技能扩展",en:"Skill Extensions"},chatWelcomeCapability2Desc:{zh:"通过安装技能扩展 Agent 能力",en:"Extend Agent capabilities by installing skills"},chatWelcomeCapability3Title:{zh:"定时任务",en:"Scheduled Tasks"},chatWelcomeCapability3Desc:{zh:"设置定时执行的自动化任务",en:"Set up scheduled automated tasks"},chatSkillsPickerTitle:{zh:"技能",en:"Skills"},chatSkillsPickerEmpty:{zh:"暂无已安装技能",en:"No skills installed"},chatSkillsPickerSearchPlaceholder:{zh:"搜索技能",en:"Search skills"},chatSkillsPickerNoDescription:{zh:"暂无描述",en:"No description"},chatSkillsPickerOfficial:{zh:"官方",en:"Official"},chatSkillsPickerManage:{zh:"管理技能",en:"Manage Skills"},chatInputAttach:{zh:"添加附件",en:"Attach file"},chatInputAttachComingSoon:{zh:"即将支持",en:"Coming soon"},cronPageTitle:{zh:"定时任务",en:"Cron Jobs"},cronPageDescription:{zh:"查看与删除定时任务,关注执行时间与状态。",en:"View and delete cron jobs, track schedule and status."},cronSearchPlaceholder:{zh:"搜索名称 / 消息 / ID",en:"Search name / message / ID"},cronStatusLabel:{zh:"状态",en:"Status"},cronStatusAll:{zh:"全部",en:"All"},cronStatusEnabled:{zh:"仅启用",en:"Enabled"},cronStatusDisabled:{zh:"仅禁用",en:"Disabled"},cronTotalLabel:{zh:"总数",en:"Total"},cronLoading:{zh:"加载定时任务中...",en:"Loading cron jobs..."},cronEmpty:{zh:"暂无定时任务。",en:"No cron jobs yet."},cronScheduleLabel:{zh:"计划",en:"Schedule"},cronDeliverTo:{zh:"投递到",en:"Deliver to"},cronNextRun:{zh:"下次执行",en:"Next run"},cronLastRun:{zh:"上次执行",en:"Last run"},cronLastStatus:{zh:"上次状态",en:"Last status"},cronDeleteConfirm:{zh:"确认删除定时任务",en:"Delete cron job"},cronOneShot:{zh:"一次性",en:"One-shot"},cronEnable:{zh:"启用",en:"Enable"},cronDisable:{zh:"禁用",en:"Disable"},cronRunNow:{zh:"立即执行",en:"Run now"},cronEnableConfirm:{zh:"确认启用定时任务",en:"Enable cron job"},cronDisableConfirm:{zh:"确认禁用定时任务",en:"Disable cron job"},cronRunConfirm:{zh:"确认立即执行定时任务",en:"Run cron job now"},cronRunForceConfirm:{zh:"任务已禁用,仍要立即执行",en:"Cron job disabled. Force run now"},marketplacePluginsPageTitle:{zh:"插件市场",en:"Plugin Marketplace"},marketplacePluginsPageDescription:{zh:"安装、启用与管理插件。",en:"Install, enable, and manage plugins."},marketplaceSkillsPageTitle:{zh:"技能市场",en:"Skill Marketplace"},marketplaceSkillsPageDescription:{zh:"安装与管理技能。",en:"Install and manage skills."},marketplaceTabMarketplacePlugins:{zh:"插件市场",en:"Plugin Market"},marketplaceTabMarketplaceSkills:{zh:"技能市场",en:"Skill Market"},marketplaceTabInstalledPlugins:{zh:"已安装插件",en:"Installed Plugins"},marketplaceTabInstalledSkills:{zh:"已安装技能",en:"Installed Skills"},marketplaceSearchPlaceholderPlugins:{zh:"搜索插件...",en:"Search plugins..."},marketplaceSearchPlaceholderSkills:{zh:"搜索技能...",en:"Search skills..."},marketplaceFilterPlugins:{zh:"插件",en:"Plugins"},marketplaceFilterSkills:{zh:"技能",en:"Skills"},marketplaceSortRelevance:{zh:"相关性",en:"Relevance"},marketplaceSortUpdated:{zh:"最近更新",en:"Recently Updated"},marketplaceUnknownItem:{zh:"未知项目",en:"Unknown Item"},marketplaceInstalledLocalSummary:{zh:"已在本地安装,市场暂无详情。",en:"Installed locally. Details are currently unavailable from marketplace."},marketplaceTypePlugin:{zh:"插件",en:"Plugin"},marketplaceTypeSkill:{zh:"技能",en:"Skill"},marketplaceTypeExtension:{zh:"扩展",en:"Extension"},marketplaceInstall:{zh:"安装",en:"Install"},marketplaceInstalling:{zh:"安装中...",en:"Installing..."},marketplaceEnable:{zh:"启用",en:"Enable"},marketplaceDisable:{zh:"禁用",en:"Disable"},marketplaceEnabling:{zh:"启用中...",en:"Enabling..."},marketplaceDisabling:{zh:"禁用中...",en:"Disabling..."},marketplaceUninstall:{zh:"卸载",en:"Uninstall"},marketplaceRemoving:{zh:"卸载中...",en:"Removing..."},marketplaceSectionPlugins:{zh:"插件列表",en:"Plugin Catalog"},marketplaceSectionSkills:{zh:"技能列表",en:"Skill Catalog"},marketplaceSectionInstalledPlugins:{zh:"已安装插件",en:"Installed Plugins"},marketplaceSectionInstalledSkills:{zh:"已安装技能",en:"Installed Skills"},marketplaceErrorLoadingPluginsData:{zh:"加载插件市场数据失败",en:"Failed to load plugin marketplace data"},marketplaceErrorLoadingSkillsData:{zh:"加载技能市场数据失败",en:"Failed to load skill marketplace data"},marketplaceErrorLoadingInstalledPlugins:{zh:"加载已安装插件失败",en:"Failed to load installed plugins"},marketplaceErrorLoadingInstalledSkills:{zh:"加载已安装技能失败",en:"Failed to load installed skills"},marketplaceNoPlugins:{zh:"未找到插件。",en:"No plugins found."},marketplaceNoSkills:{zh:"未找到技能。",en:"No skills found."},marketplaceNoInstalledPlugins:{zh:"未找到已安装插件。",en:"No installed plugins found."},marketplaceNoInstalledSkills:{zh:"未找到已安装技能。",en:"No installed skills found."},marketplaceUninstallTitle:{zh:"确认卸载",en:"Uninstall"},marketplaceUninstallDescription:{zh:"该操作会移除扩展,后续可在市场中重新安装。",en:"This will remove the extension. You can install it again from the marketplace."},marketplaceInstallSuccessPlugin:{zh:"插件安装成功",en:"Plugin installed successfully"},marketplaceInstallSuccessSkill:{zh:"技能安装成功",en:"Skill installed successfully"},marketplaceEnableSuccess:{zh:"启用成功",en:"Enabled successfully"},marketplaceDisableSuccess:{zh:"禁用成功",en:"Disabled successfully"},marketplaceUninstallSuccess:{zh:"卸载成功",en:"Uninstalled successfully"},marketplaceInstallFailed:{zh:"安装失败",en:"Install failed"},marketplaceOperationFailed:{zh:"操作失败",en:"Operation failed"},marketplaceInstalledPluginsCountSuffix:{zh:"个已安装插件",en:"installed plugins"},marketplaceInstalledSkillsCountSuffix:{zh:"个已安装技能",en:"installed skills"},marketplaceDetailPanelTitle:{zh:"详情预览",en:"Detail Preview"},marketplaceDetailPanelEmpty:{zh:"点击左侧任意插件/技能,在这里查看详情。",en:"Click an item on the left to preview details here."},marketplaceDetailSummary:{zh:"摘要",en:"Summary"},marketplaceDetailDescription:{zh:"描述",en:"Description"},marketplaceOpenInDocBrowserTab:{zh:"新标签打开",en:"Open in New Tab"},connected:{zh:"已连接",en:"Connected"},disconnected:{zh:"未连接",en:"Disconnected"},connecting:{zh:"连接中...",en:"Connecting..."},feishuConnecting:{zh:"验证 / 连接中...",en:"Verifying / connecting..."},statusReady:{zh:"就绪",en:"Ready"},statusSetup:{zh:"待配置",en:"Setup"},statusActive:{zh:"活跃",en:"Active"},statusInactive:{zh:"未启用",en:"Inactive"},actionConfigure:{zh:"配置",en:"Configure"},actionAddProvider:{zh:"添加提供商",en:"Add Provider"},actionEnable:{zh:"启用",en:"Enable"},configSaved:{zh:"配置已保存",en:"Configuration saved"},configSavedApplied:{zh:"配置已保存并已应用",en:"Configuration saved and applied"},configSaveFailed:{zh:"保存配置失败",en:"Failed to save configuration"},configReloaded:{zh:"配置已重载",en:"Configuration reloaded"},configReloadFailed:{zh:"重载配置失败",en:"Failed to reload configuration"},feishuVerifySuccess:{zh:"验证成功,请到飞书开放平台完成事件订阅与发布后再开始使用。",en:"Verified. Please finish Feishu event subscription and app publishing before using."},feishuVerifyFailed:{zh:"验证失败",en:"Verification failed"},enterTag:{zh:"输入后按回车...",en:"Type and press Enter..."},headerName:{zh:"Header 名称",en:"Header Name"},headerValue:{zh:"Header 值",en:"Header Value"},docBrowserTitle:{zh:"内嵌浏览器",en:"Embedded Browser"},docBrowserSearchPlaceholder:{zh:"搜索,也可以输入文档地址直接打开",en:"Search, or enter a doc URL to open"},docBrowserUrlPlaceholder:{zh:"输入文档路径,如 /guide/channels",en:"Enter a doc path, e.g. /guide/channels"},docBrowserOpenExternal:{zh:"文档中心打开",en:"Open in Docs"},docBrowserFloatMode:{zh:"悬浮窗口",en:"Float Window"},docBrowserDockMode:{zh:"固定到侧栏",en:"Dock to Sidebar"},docBrowserClose:{zh:"关闭",en:"Close"},docBrowserHelp:{zh:"帮助文档",en:"Help Docs"},docBrowserNewTab:{zh:"新建标签",en:"New Tab"},docBrowserCloseTab:{zh:"关闭标签",en:"Close Tab"},docBrowserTabUntitled:{zh:"未命名",en:"Untitled"}};function d(e,n=F()){var t,o;return((t=pe[e])==null?void 0:t[n])||((o=pe[e])==null?void 0:o.en)||e}const Ae="nextclaw.ui.theme",fe=[{value:"warm",labelKey:"themeWarm"},{value:"cool",labelKey:"themeCool"}];let E="warm",X=!1;const Z=new Set;function En(e){return e==="warm"||e==="cool"}function De(e){typeof document>"u"||document.documentElement.setAttribute("data-theme",e)}function Nn(){if(typeof window>"u")return"warm";try{const e=window.localStorage.getItem(Ae);if(En(e))return e}catch{}return"warm"}function ie(){return X||(E=Nn(),De(E),X=!0),E}function Mn(){return X?E:ie()}function Rn(e){if(ie(),e!==E){if(E=e,De(E),typeof window<"u")try{window.localStorage.setItem(Ae,E)}catch{}Z.forEach(n=>n(E))}}function jn(e){return Z.add(e),()=>{Z.delete(e)}}const ee="docs.nextclaw.io",me="nextclaw-docs.pages.dev",Ee=new Set([ee,`www.${ee}`,me,`www.${me}`]),ne=`https://${ee}`,Ne="/guide/getting-started",Me=c.createContext(null);let ge=0;function Ln(){return ge+=1,`doc-tab-${Date.now()}-${ge}`}function q(e){try{return new URL(e).pathname.replace(/\.html$/,"").replace(/\/$/,"")}catch{return e}}function Un(e){return e==="zh"?"zh":"en"}function Fn(e,n){const t=e.startsWith("/")?e:`/${e}`;return t==="/"||t===""?`/${n}/`:/^\/(en|zh)(\/|$)/.test(t)?t:`/${n}${t}`}function Re(e){const n=Un(F());try{const t=new URL(e,ne);return Ee.has(t.hostname)&&(t.pathname=Fn(t.pathname,n)),t.toString()}catch{return new URL(`/${n}${Ne}`,ne).toString()}}function U(){return Re(Ne)}function On(e,n,t="Docs"){try{const o=new URL(e,ne);if(o.protocol==="data:")return n==="docs"?t:"Detail";const r=o.pathname.split("/").filter(Boolean),a=r[r.length-1]??t;return decodeURIComponent(a).replace(/[-_]/g," ").slice(0,40)||t}catch{return t}}function B(e,n,t){const o=(t==null?void 0:t.trim())||On(e,n,n==="docs"?"Docs":"Detail");return{id:Ln(),kind:n,title:o,currentUrl:e,history:[e],historyIndex:0,navVersion:0}}function _(e,n){return{...e,tabs:e.tabs.map(t=>t.id===e.activeTabId?n(t):t)}}function le(){const e=c.useContext(Me);if(!e)throw new Error("useDocBrowser must be used within DocBrowserProvider");return e}function je(e){try{const n=new URL(e,window.location.origin);return Ee.has(n.hostname)}catch{return!1}}function Kn(e){return je(e)?"docs":"content"}function Le(e,n){return n==="docs"?Re(e):e}function qn(e){var n;return e.url&&e.url.trim().length>0?Le(e.url,e.kind):e.kind==="docs"?U():((n=e.activeTab)==null?void 0:n.currentUrl)??U()}function Bn({children:e}){const n=U(),t=B(n,"docs","Docs"),[o,r]=c.useState({isOpen:!1,mode:"docked",tabs:[t],activeTabId:t.id}),a=c.useMemo(()=>o.tabs.find(m=>m.id===o.activeTabId)??o.tabs[0],[o.tabs,o.activeTabId]),u=c.useCallback((m,l)=>{r(h=>{const k=h.tabs.find(C=>C.id===h.activeTabId)??h.tabs[0],K=(l==null?void 0:l.kind)??(m?Kn(m):(k==null?void 0:k.kind)??"docs"),R=qn({url:m,kind:K,activeTab:k});if(!!(l!=null&&l.newTab||!k||k.kind!==K)){const C=B(R,K,l==null?void 0:l.title);return{...h,isOpen:!0,tabs:[...h.tabs,C],activeTabId:C.id}}return{..._(h,C=>q(R)===q(C.currentUrl)?l!=null&&l.title?{...C,title:l.title}:C:{...C,title:(l==null?void 0:l.title)||C.title,kind:K,currentUrl:R,history:[...C.history.slice(0,C.historyIndex+1),R],historyIndex:C.historyIndex+1,navVersion:C.navVersion+1}),isOpen:!0}})},[]),i=c.useCallback(()=>{r(m=>({...m,isOpen:!1}))},[]),x=c.useCallback(()=>{r(m=>({...m,mode:m.mode==="floating"?"docked":"floating"}))},[]),g=c.useCallback(m=>{r(l=>({...l,mode:m}))},[]),v=c.useCallback(m=>{r(l=>{if(!l.tabs.length){const h=B(U(),"docs","Docs");return{...l,tabs:[h],activeTabId:h.id,isOpen:!0}}return _(l,h=>{if(h.kind!=="docs")return h;const k=Le(m,"docs");return q(k)===q(h.currentUrl)?h:{...h,currentUrl:k,history:[...h.history.slice(0,h.historyIndex+1),k],historyIndex:h.historyIndex+1,navVersion:h.navVersion+1}})})},[]),S=c.useCallback(m=>{r(l=>{if(!l.tabs.length){const h=B(U(),"docs","Docs");return{...l,tabs:[h],activeTabId:h.id}}return _(l,h=>h.kind!=="docs"||q(m)===q(h.currentUrl)?h:{...h,currentUrl:m,history:[...h.history.slice(0,h.historyIndex+1),m],historyIndex:h.historyIndex+1})})},[]),p=c.useCallback(()=>{r(m=>_(m,l=>{if(l.kind!=="docs"||l.historyIndex<=0)return l;const h=l.historyIndex-1;return{...l,historyIndex:h,currentUrl:l.history[h]}}))},[]),D=c.useCallback(()=>{r(m=>_(m,l=>{if(l.kind!=="docs"||l.historyIndex>=l.history.length-1)return l;const h=l.historyIndex+1;return{...l,historyIndex:h,currentUrl:l.history[h]}}))},[]),M=c.useCallback((m,l)=>{u(m,{...l??{},newTab:!0})},[u]),f=c.useCallback(m=>{r(l=>{var R;if(l.tabs.length<=1){const j=B(U(),"docs","Docs");return{...l,isOpen:!1,tabs:[j],activeTabId:j.id}}const h=l.tabs.findIndex(j=>j.id===m);if(h<0)return l;const k=l.tabs.filter(j=>j.id!==m),K=l.activeTabId===m?((R=k[Math.max(0,h-1)])==null?void 0:R.id)??k[0].id:l.activeTabId;return{...l,tabs:k,activeTabId:K}})},[]),W=c.useCallback(m=>{r(l=>l.tabs.some(h=>h.id===m)?{...l,activeTabId:m,isOpen:!0}:l)},[]),O=!!(a&&a.kind==="docs"&&a.historyIndex>0),ce=!!(a&&a.kind==="docs"&&a.historyIndex<a.history.length-1),Be=c.useMemo(()=>({...o,currentTab:a,currentUrl:(a==null?void 0:a.currentUrl)??U(),navVersion:(a==null?void 0:a.navVersion)??0,open:u,close:i,toggleMode:x,setMode:g,navigate:v,syncUrl:S,goBack:p,goForward:D,openNewTab:M,closeTab:f,setActiveTab:W,canGoBack:O,canGoForward:ce}),[o,a,u,i,x,g,v,S,p,D,M,f,W,O,ce]);return s.jsx(Me.Provider,{value:Be,children:e})}function _n(){const e=le();c.useEffect(()=>{const n=t=>{const o=t.target.closest("a[href]");if(!o)return;const r=o.getAttribute("href")||"";je(r)&&(o.hasAttribute("data-doc-external")||t.ctrlKey||t.metaKey||t.shiftKey||(t.preventDefault(),t.stopPropagation(),e.open(r)))};return document.addEventListener("click",n,!0),()=>document.removeEventListener("click",n,!0)},[e])}const Hn="http://127.0.0.1:18791",H=(()=>{var e;return typeof window<"u"&&((e=window.location)!=null&&e.origin)?window.location.origin:Hn})();function $n(e){return e.replace(/\s+/g," ").trim().slice(0,200)}function Wn(e,n){if(n===404&&e.startsWith("/api/config/providers/")&&e.endsWith("/test"))return"Provider test endpoint is missing. This usually means nextclaw runtime version is outdated.";if(n===401||n===403)return"Authentication failed. Check apiKey and custom headers.";if(n===429)return"Rate limited by upstream provider. Retry later or switch model/provider.";if(n>=500)return"Upstream service error. Retry later and inspect server logs if it persists."}async function Q(e,n={}){const t=`${H}${e}`,o=(n.method||"GET").toUpperCase(),r=await fetch(t,{headers:{"Content-Type":"application/json",...n.headers},...n}),a=await r.text();let u=null;if(a)try{u=JSON.parse(a)}catch{}if(!u){const i=a?$n(a):"",x=Wn(e,r.status),g=[`Non-JSON response (${r.status} ${r.statusText}) on ${o} ${e}`];return i&&g.push(`body=${i}`),x&&g.push(`hint=${x}`),{ok:!1,error:{code:"INVALID_RESPONSE",message:g.join(" | "),details:{status:r.status,statusText:r.statusText,method:o,endpoint:e,url:t,bodySnippet:i||void 0,hint:x}}}}return r.ok,u}const y={get:e=>Q(e,{method:"GET"}),put:(e,n)=>Q(e,{method:"PUT",body:JSON.stringify(n)}),post:(e,n)=>Q(e,{method:"POST",body:JSON.stringify(n)}),delete:e=>Q(e,{method:"DELETE"})};async function Qn(){const e=await y.get("/api/app/meta");if(!e.ok)throw new Error(e.error.message);return e.data}async function Vn(){const e=await y.get("/api/config");if(!e.ok)throw new Error(e.error.message);return e.data}async function Gn(){const e=await y.get("/api/config/meta");if(!e.ok)throw new Error(e.error.message);return e.data}async function Jn(){const e=await y.get("/api/config/schema");if(!e.ok)throw new Error(e.error.message);return e.data}async function Yn(e){const n=await y.put("/api/config/model",e);if(!n.ok)throw new Error(n.error.message);return n.data}async function Xn(e,n){const t=await y.put(`/api/config/providers/${e}`,n);if(!t.ok)throw new Error(t.error.message);return t.data}async function Zn(e={}){const n=await y.post("/api/config/providers",e);if(!n.ok)throw new Error(n.error.message);return n.data}async function et(e){const n=await y.delete(`/api/config/providers/${e}`);if(!n.ok)throw new Error(n.error.message);return n.data}async function nt(e,n){const t=await y.post(`/api/config/providers/${e}/test`,n);if(!t.ok)throw new Error(t.error.message);return t.data}async function tt(e,n={}){const t=await y.post(`/api/config/providers/${e}/auth/start`,n);if(!t.ok)throw new Error(t.error.message);return t.data}async function st(e,n){const t=await y.post(`/api/config/providers/${e}/auth/poll`,n);if(!t.ok)throw new Error(t.error.message);return t.data}async function rt(e){const n=await y.post(`/api/config/providers/${e}/auth/import-cli`,{});if(!n.ok)throw new Error(n.error.message);return n.data}async function ot(e,n){const t=await y.put(`/api/config/channels/${e}`,n);if(!t.ok)throw new Error(t.error.message);return t.data}async function at(e){const n=await y.put("/api/config/runtime",e);if(!n.ok)throw new Error(n.error.message);return n.data}async function it(e){const n=await y.put("/api/config/secrets",e);if(!n.ok)throw new Error(n.error.message);return n.data}async function lt(e,n){const t=await y.post(`/api/config/actions/${e}/execute`,n);if(!t.ok)throw new Error(t.error.message);return t.data}async function ct(e){var r;const n=new URLSearchParams;(r=e==null?void 0:e.q)!=null&&r.trim()&&n.set("q",e.q.trim()),typeof(e==null?void 0:e.limit)=="number"&&Number.isFinite(e.limit)&&n.set("limit",String(Math.max(0,Math.trunc(e.limit)))),typeof(e==null?void 0:e.activeMinutes)=="number"&&Number.isFinite(e.activeMinutes)&&n.set("activeMinutes",String(Math.max(0,Math.trunc(e.activeMinutes))));const t=n.toString(),o=await y.get(t?"/api/sessions?"+t:"/api/sessions");if(!o.ok)throw new Error(o.error.message);return o.data}async function dt(e,n=200){const t=await y.get(`/api/sessions/${encodeURIComponent(e)}/history?limit=${Math.max(1,Math.trunc(n))}`);if(!t.ok)throw new Error(t.error.message);return t.data}async function ht(e,n){const t=await y.put(`/api/sessions/${encodeURIComponent(e)}`,n);if(!t.ok)throw new Error(t.error.message);return t.data}async function ut(e){const n=await y.delete(`/api/sessions/${encodeURIComponent(e)}`);if(!n.ok)throw new Error(n.error.message);return n.data}function pt(e){const n=e.split(`
|
|
3
|
-
`);let t="";const o=[];for(const r of n){const a=r.trimEnd();if(!(!a||a.startsWith(":"))){if(a.startsWith("event:")){t=a.slice(6).trim();continue}a.startsWith("data:")&&o.push(a.slice(5).trimStart())}}return t?{event:t,data:o.join(`
|
|
4
|
-
`)}:null}async function Ue(e){var x;const n=await fetch(`${H}${e.path}`,{method:e.method,headers:{"Content-Type":"application/json",Accept:"text/event-stream"},...e.body!==void 0?{body:JSON.stringify(e.body)}:{},...e.signal?{signal:e.signal}:{}});if(!n.ok){const g=await n.text(),v=`HTTP ${n.status}`,S=g.trim();throw new Error(S||v)}const t=(x=n.body)==null?void 0:x.getReader();if(!t)throw new Error("SSE response body unavailable");const o=new TextDecoder;let r="",a=null,u=null;const i=g=>{const v=pt(g);if(!v)return;let S;if(v.data)try{S=JSON.parse(v.data)}catch{S=void 0}if(v.event==="ready"){const p=S??{};u=typeof p.sessionKey=="string"&&p.sessionKey.trim()?p.sessionKey:u,e.onReady(p);return}if(v.event==="delta"){e.onDelta(S??{delta:""});return}if(v.event==="session_event"){e.onSessionEvent({data:S});return}if(v.event==="final"){const p=S;a={sessionKey:typeof(p==null?void 0:p.sessionKey)=="string"&&p.sessionKey.trim()?p.sessionKey:u??"",reply:typeof(p==null?void 0:p.reply)=="string"?p.reply:""};return}if(v.event==="error"){const p=S??{};throw new Error((p.message??"").trim()||"chat stream failed")}};try{let g=!0;for(;g;){const{value:v,done:S}=await t.read();if(S){g=!1;continue}r+=o.decode(v,{stream:!0});let p=r.indexOf(`
|
|
5
|
-
|
|
6
|
-
`);for(;p!==-1;){const D=r.slice(0,p);r=r.slice(p+2),i(D),p=r.indexOf(`
|
|
7
|
-
|
|
8
|
-
`)}}r.trim()&&i(r)}finally{t.releaseLock()}if(a)return a;if(u)return{sessionKey:u,reply:""};throw new Error("chat stream ended without final event")}async function Yt(e,n){return Ue({path:"/api/chat/turn/stream",method:"POST",body:e,signal:n.signal,onReady:n.onReady,onDelta:n.onDelta,onSessionEvent:n.onSessionEvent})}async function Xt(e,n){const t=new URLSearchParams;typeof e.fromEventIndex=="number"&&Number.isFinite(e.fromEventIndex)&&t.set("fromEventIndex",String(Math.max(0,Math.trunc(e.fromEventIndex))));const o=t.toString(),r=`/api/chat/runs/${encodeURIComponent(e.runId)}/stream${o?`?${o}`:""}`;return Ue({path:r,method:"GET",signal:n.signal,onReady:n.onReady,onDelta:n.onDelta,onSessionEvent:n.onSessionEvent})}async function ft(e){var r,a;const n=new URLSearchParams;(r=e==null?void 0:e.sessionKey)!=null&&r.trim()&&n.set("sessionKey",e.sessionKey.trim()),(a=e==null?void 0:e.agentId)!=null&&a.trim()&&n.set("agentId",e.agentId.trim());const t=n.toString(),o=await y.get(t?`/api/chat/capabilities?${t}`:"/api/chat/capabilities");if(!o.ok)throw new Error(o.error.message);return o.data}async function mt(){const e=await y.get("/api/chat/session-types");if(!e.ok)throw new Error(e.error.message);return e.data}async function Zt(e){const n=await y.post("/api/chat/turn/stop",e);if(!n.ok)throw new Error(n.error.message);return n.data}async function gt(e){var r;const n=new URLSearchParams;(r=e==null?void 0:e.sessionKey)!=null&&r.trim()&&n.set("sessionKey",e.sessionKey.trim()),Array.isArray(e==null?void 0:e.states)&&e.states.length>0&&n.set("states",e.states.join(",")),typeof(e==null?void 0:e.limit)=="number"&&Number.isFinite(e.limit)&&n.set("limit",String(Math.max(0,Math.trunc(e.limit))));const t=n.toString(),o=await y.get(t?`/api/chat/runs?${t}`:"/api/chat/runs");if(!o.ok)throw new Error(o.error.message);return o.data}async function yt(e){const n=new URLSearchParams;e!=null&&e.all&&n.set("all","1");const t=n.toString(),o=await y.get(t?"/api/cron?"+t:"/api/cron");if(!o.ok)throw new Error(o.error.message);return o.data}async function zt(e){const n=await y.delete(`/api/cron/${encodeURIComponent(e)}`);if(!n.ok)throw new Error(n.error.message);return n.data}async function vt(e,n){const t=await y.put(`/api/cron/${encodeURIComponent(e)}/enable`,n);if(!t.ok)throw new Error(t.error.message);return t.data}async function xt(e,n){const t=await y.post(`/api/cron/${encodeURIComponent(e)}/run`,n);if(!t.ok)throw new Error(t.error.message);return t.data}function es(){return A({queryKey:["config"],queryFn:Vn,staleTime:3e4,refetchOnWindowFocus:!0})}function St(){return A({queryKey:["app-meta"],queryFn:Qn,staleTime:1/0})}function ns(){return A({queryKey:["config-meta"],queryFn:Gn,staleTime:1/0})}function ts(){return A({queryKey:["config-schema"],queryFn:Jn,staleTime:1/0})}function ss(){const e=T();return b({mutationFn:Yn,onSuccess:()=>{e.invalidateQueries({queryKey:["config"]}),z.success(d("configSaved"))},onError:n=>{z.error(d("configSaveFailed")+": "+n.message)}})}function rs(){const e=T();return b({mutationFn:({provider:n,data:t})=>Xn(n,t),onSuccess:()=>{e.invalidateQueries({queryKey:["config"]}),e.invalidateQueries({queryKey:["config-meta"]}),z.success(d("configSaved"))},onError:n=>{z.error(d("configSaveFailed")+": "+n.message)}})}function os(){const e=T();return b({mutationFn:({data:n})=>Zn(n??{}),onSuccess:()=>{e.invalidateQueries({queryKey:["config"]}),e.invalidateQueries({queryKey:["config-meta"]}),z.success(d("configSaved"))},onError:n=>{z.error(d("configSaveFailed")+": "+n.message)}})}function as(){const e=T();return b({mutationFn:({provider:n})=>et(n),onSuccess:()=>{e.invalidateQueries({queryKey:["config"]}),e.invalidateQueries({queryKey:["config-meta"]}),z.success(d("configSaved"))},onError:n=>{z.error(d("configSaveFailed")+": "+n.message)}})}function is(){return b({mutationFn:({provider:e,data:n})=>nt(e,n)})}function ls(){return b({mutationFn:({provider:e,data:n})=>tt(e,n)})}function cs(){return b({mutationFn:({provider:e,data:n})=>st(e,n)})}function ds(){return b({mutationFn:({provider:e})=>rt(e)})}function hs(){const e=T();return b({mutationFn:({channel:n,data:t})=>ot(n,t),onSuccess:()=>{e.invalidateQueries({queryKey:["config"]}),z.success(d("configSavedApplied"))},onError:n=>{z.error(d("configSaveFailed")+": "+n.message)}})}function us(){const e=T();return b({mutationFn:({data:n})=>at(n),onSuccess:()=>{e.invalidateQueries({queryKey:["config"]}),z.success(d("configSavedApplied"))},onError:n=>{z.error(d("configSaveFailed")+": "+n.message)}})}function ps(){const e=T();return b({mutationFn:({data:n})=>it(n),onSuccess:()=>{e.invalidateQueries({queryKey:["config"]}),z.success(d("configSavedApplied"))},onError:n=>{z.error(d("configSaveFailed")+": "+n.message)}})}function fs(){return b({mutationFn:({actionId:e,data:n})=>lt(e,n),onError:e=>{z.error(d("error")+": "+e.message)}})}function ms(e){return A({queryKey:["sessions",e],queryFn:()=>ct(e),staleTime:1e4})}function gs(e,n=200){return A({queryKey:["session-history",e,n],queryFn:()=>dt(e,n),enabled:!!e,staleTime:5e3,retry:!1})}function ys(){const e=T();return b({mutationFn:({key:n,data:t})=>ht(n,t),onSuccess:(n,t)=>{e.invalidateQueries({queryKey:["sessions"]}),e.invalidateQueries({queryKey:["session-history",t.key]}),z.success(d("configSavedApplied"))},onError:n=>{z.error(d("configSaveFailed")+": "+n.message)}})}function zs(){const e=T();return b({mutationFn:({key:n})=>ut(n),onSuccess:()=>{e.invalidateQueries({queryKey:["sessions"]}),e.invalidateQueries({queryKey:["session-history"]}),z.success(d("configSavedApplied"))},onError:n=>{z.error(d("configSaveFailed")+": "+n.message)}})}function vs(e){var o,r;const n=((o=e==null?void 0:e.sessionKey)==null?void 0:o.trim())||void 0,t=((r=e==null?void 0:e.agentId)==null?void 0:r.trim())||void 0;return A({queryKey:["chat-capabilities",n??null,t??null],queryFn:async()=>{try{return await ft({sessionKey:n,agentId:t})}catch{return{stopSupported:!1}}},staleTime:1e4,retry:!1})}function xs(){return A({queryKey:["chat-session-types"],queryFn:mt,staleTime:1e4,retry:!1})}function Ss(e){var a;const n=((a=e==null?void 0:e.sessionKey)==null?void 0:a.trim())||void 0,t=Array.isArray(e==null?void 0:e.states)&&e.states.length>0?e.states:void 0,o=!!(t!=null&&t.some(u=>u==="queued"||u==="running")),r=!!(e!=null&&e.syncActiveStates&&o);return A({queryKey:["chat-runs",n??null,t??null,(e==null?void 0:e.limit)??null],queryFn:()=>gt({...n?{sessionKey:n}:{},...t?{states:t}:{},...typeof(e==null?void 0:e.limit)=="number"?{limit:e.limit}:{}}),enabled:!!n||!!t,staleTime:5e3,refetchInterval:u=>{if(!r)return!1;if(e!=null&&e.isLocallyRunning)return 800;const i=u.state.data;return Array.isArray(i==null?void 0:i.runs)&&i.runs.length>0?800:!1},refetchIntervalInBackground:!1,retry:!1})}function ws(e={all:!0}){return A({queryKey:["cron",e],queryFn:()=>yt(e),staleTime:1e4})}function bs(){const e=T();return b({mutationFn:({id:n})=>zt(n),onSuccess:()=>{e.invalidateQueries({queryKey:["cron"]}),z.success(d("configSavedApplied"))},onError:n=>{z.error(d("configSaveFailed")+": "+n.message)}})}function ks(){const e=T();return b({mutationFn:({id:n,enabled:t})=>vt(n,{enabled:t}),onSuccess:()=>{e.invalidateQueries({queryKey:["cron"]}),z.success(d("configSavedApplied"))},onError:n=>{z.error(d("configSaveFailed")+": "+n.message)}})}function Cs(){const e=T();return b({mutationFn:({id:n,force:t})=>xt(n,{force:t}),onSuccess:()=>{e.invalidateQueries({queryKey:["cron"]}),z.success(d("configSavedApplied"))},onError:n=>{z.error(d("configSaveFailed")+": "+n.message)}})}function wt({className:e}){var r;const{data:n}=St(),t=(n==null?void 0:n.name)??"NextClaw",o=(r=n==null?void 0:n.productVersion)==null?void 0:r.trim();return s.jsxs("div",{className:e??"flex items-center gap-2.5",children:[s.jsx("div",{className:"h-7 w-7 rounded-lg overflow-hidden flex items-center justify-center",children:s.jsx("img",{src:"/logo.svg",alt:t,className:"h-full w-full object-contain"})}),s.jsxs("div",{className:"flex items-baseline gap-2 min-w-0",children:[s.jsx("span",{className:"truncate text-[15px] font-semibold tracking-[-0.01em] text-gray-800",children:t}),o?s.jsxs("span",{className:"text-[13px] font-medium text-gray-500",children:["v",o]}):null]})]})}const Fe=c.createContext(null);function bt({children:e}){const[n,t]=c.useState(()=>oe());c.useEffect(()=>Dn(i=>{t(i)}),[]);const o=c.useCallback(u=>{An(u),t(F())},[]),r=c.useCallback(()=>{o(n==="en"?"zh":"en")},[n,o]),a=c.useMemo(()=>({language:n,setLanguage:o,toggleLanguage:r}),[n,o,r]);return s.jsx(Fe.Provider,{value:a,children:e})}function kt(){const e=c.useContext(Fe);if(!e)throw new Error("useI18n must be used within I18nProvider");return{...e,t:d}}const Oe=c.createContext(null);function Ct({children:e}){const[n,t]=c.useState(()=>ie());c.useEffect(()=>jn(u=>{t(u)}),[]);const o=c.useCallback(a=>{Rn(a),t(Mn())},[]),r=c.useMemo(()=>({theme:n,setTheme:o}),[n,o]);return s.jsx(Oe.Provider,{value:r,children:e})}function Pt(){const e=c.useContext(Oe);if(!e)throw new Error("useTheme must be used within ThemeProvider");return e}const ye=Xe,Ps=Ze,te=c.forwardRef(({className:e,children:n,...t},o)=>s.jsxs(xe,{ref:o,className:P("flex h-9 w-full items-center justify-between whitespace-nowrap rounded-xl border border-gray-200/80 bg-transparent px-3 py-2 text-sm shadow-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-1 focus:ring-primary/40 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1 bg-white",e),...t,children:[n,s.jsx($e,{asChild:!0,children:s.jsx(Se,{className:"h-4 w-4 opacity-50"})})]}));te.displayName=xe.displayName;const Ke=c.forwardRef(({className:e,...n},t)=>s.jsx(we,{ref:t,className:P("flex cursor-default items-center justify-center py-1",e),...n,children:s.jsx(We,{className:"h-4 w-4"})}));Ke.displayName=we.displayName;const qe=c.forwardRef(({className:e,...n},t)=>s.jsx(be,{ref:t,className:P("flex cursor-default items-center justify-center py-1",e),...n,children:s.jsx(Se,{className:"h-4 w-4"})}));qe.displayName=be.displayName;const se=c.forwardRef(({className:e,children:n,position:t="popper",...o},r)=>s.jsx(Qe,{children:s.jsxs(ke,{ref:r,className:P("relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 bg-white",t==="popper"&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",e),position:t,...o,children:[s.jsx(Ke,{}),s.jsx(Ve,{className:P("p-1",t==="popper"&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]"),children:n}),s.jsx(qe,{})]})}));se.displayName=ke.displayName;const Tt=c.forwardRef(({className:e,...n},t)=>s.jsx(Ce,{ref:t,className:P("px-2 py-1.5 text-sm font-semibold",e),...n}));Tt.displayName=Ce.displayName;const re=c.forwardRef(({className:e,children:n,...t},o)=>s.jsxs(Pe,{ref:o,className:P("relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-2 pr-8 text-sm outline-none focus:bg-gray-100 focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 hover:bg-gray-100",e),...t,children:[s.jsx("span",{className:"absolute right-2 flex h-3.5 w-3.5 items-center justify-center",children:s.jsx(Ge,{children:s.jsx(Je,{className:"h-4 w-4"})})}),s.jsx(Ye,{children:n})]}));re.displayName=Pe.displayName;const It=c.forwardRef(({className:e,...n},t)=>s.jsx(Te,{ref:t,className:P("-mx-1 my-1 h-px bg-muted",e),...n}));It.displayName=Te.displayName;function At({mode:e}){var D,M;const n=le(),{language:t,setLanguage:o}=kt(),{theme:r,setTheme:a}=Pt(),u=((D=ue.find(f=>f.value===t))==null?void 0:D.label)??t,i=d(((M=fe.find(f=>f.value===r))==null?void 0:M.labelKey)??"themeWarm"),x=f=>{t!==f&&(o(f),window.location.reload())},g=f=>{r!==f&&a(f)},v=[{target:"/chat",label:d("chat"),icon:en},{target:"/chat/cron",label:d("cron"),icon:nn},{target:"/chat/skills",label:d("marketplaceFilterSkills"),icon:tn}],S=[{target:"/model",label:d("model"),icon:sn},{target:"/providers",label:d("providers"),icon:rn},{target:"/channels",label:d("channels"),icon:on},{target:"/runtime",label:d("runtime"),icon:an},{target:"/sessions",label:d("sessions"),icon:ln},{target:"/secrets",label:d("secrets"),icon:cn},{target:"/marketplace/plugins",label:d("marketplaceFilterPlugins"),icon:dn}],p=e==="main"?v:S;return s.jsxs("aside",{className:"w-[240px] shrink-0 flex flex-col h-full py-6 px-4 bg-secondary",children:[e==="settings"?s.jsxs("div",{className:"px-2 mb-6",children:[s.jsxs(V,{to:"/chat",className:"group inline-flex items-center gap-2 rounded-lg border border-gray-200 bg-white px-2.5 py-1.5 text-xs font-medium text-gray-600 transition-colors hover:bg-gray-50 hover:text-gray-900",children:[s.jsx(hn,{className:"h-3.5 w-3.5 text-gray-500 group-hover:text-gray-800"}),s.jsx("span",{children:d("backToMain")})]}),s.jsx("div",{className:"mt-5 px-1",children:s.jsxs("div",{className:"flex items-center gap-2.5",children:[s.jsx(de,{className:"h-5 w-5 text-gray-700"}),s.jsx("h1",{className:"text-[28px] leading-none font-semibold tracking-[-0.02em] text-gray-900",children:d("settings")})]})})]}):s.jsx("div",{className:"px-2 mb-8",children:s.jsx(wt,{className:"flex items-center gap-2.5 cursor-pointer"})}),s.jsx("nav",{className:"flex-1 flex flex-col",children:s.jsx("ul",{className:"space-y-1",children:p.map(f=>{const W=f.icon;return s.jsx("li",{children:s.jsx(V,{to:f.target,className:({isActive:O})=>P("group w-full flex items-center gap-3 px-3 py-2.5 rounded-xl text-[14px] font-medium transition-all duration-base",O?"bg-gray-200 text-gray-900 font-semibold shadow-sm":"text-gray-600 hover:bg-gray-200/60 hover:text-gray-900"),children:({isActive:O})=>s.jsxs(s.Fragment,{children:[s.jsx(W,{className:P("h-[17px] w-[17px] transition-colors",O?"text-gray-900":"text-gray-500 group-hover:text-gray-800")}),s.jsx("span",{className:"flex-1 text-left",children:f.label})]})})},f.target)})})}),s.jsxs("div",{className:"pt-3 border-t border-[#dde0ea] mt-3",children:[e==="main"&&s.jsx("div",{className:"mb-2",children:s.jsx(V,{to:"/settings",className:({isActive:f})=>P("group w-full flex items-center gap-3 px-3 py-2.5 rounded-xl text-[14px] font-medium transition-all duration-base",f?"bg-gray-200 text-gray-900 font-semibold shadow-sm":"text-gray-600 hover:bg-[#e4e7ef] hover:text-gray-900"),children:({isActive:f})=>s.jsxs(s.Fragment,{children:[s.jsx(de,{className:P("h-[17px] w-[17px] transition-colors",f?"text-gray-900":"text-gray-500 group-hover:text-gray-800")}),s.jsx("span",{className:"flex-1 text-left",children:d("settings")})]})})}),s.jsx("div",{className:"mb-2",children:s.jsxs(ye,{value:r,onValueChange:f=>g(f),children:[s.jsxs(te,{className:"w-full h-auto rounded-xl border-0 bg-transparent shadow-none px-3 py-2.5 text-[14px] font-medium text-gray-600 hover:bg-[#e4e7ef] focus:ring-0",children:[s.jsxs("div",{className:"flex items-center gap-3 min-w-0",children:[s.jsx(un,{className:"h-[17px] w-[17px] text-gray-400"}),s.jsx("span",{className:"text-left",children:d("theme")})]}),s.jsx("span",{className:"ml-auto text-xs text-gray-500",children:i})]}),s.jsx(se,{children:fe.map(f=>s.jsx(re,{value:f.value,className:"text-xs",children:d(f.labelKey)},f.value))})]})}),s.jsx("div",{className:"mb-2",children:s.jsxs(ye,{value:t,onValueChange:f=>x(f),children:[s.jsxs(te,{className:"w-full h-auto rounded-xl border-0 bg-transparent shadow-none px-3 py-2.5 text-[14px] font-medium text-gray-600 hover:bg-[#e4e7ef] focus:ring-0",children:[s.jsxs("div",{className:"flex items-center gap-3 min-w-0",children:[s.jsx(pn,{className:"h-[17px] w-[17px] text-gray-400"}),s.jsx("span",{className:"text-left",children:d("language")})]}),s.jsx("span",{className:"ml-auto text-xs text-gray-500",children:u})]}),s.jsx(se,{children:ue.map(f=>s.jsx(re,{value:f.value,className:"text-xs",children:f.label},f.value))})]})}),s.jsxs("button",{onClick:()=>n.open(void 0,{kind:"docs",newTab:!0,title:"Docs"}),className:"w-full flex items-center gap-3 px-3 py-2.5 rounded-xl text-[14px] font-medium transition-all duration-base text-gray-600 hover:bg-[#e4e7ef] hover:text-gray-800",children:[s.jsx(fn,{className:"h-[17px] w-[17px] text-gray-400"}),s.jsx("span",{className:"flex-1 text-left",children:d("docBrowserHelp")})]})]})]})}const ze=c.lazy(async()=>({default:(await N(async()=>{const{DocBrowser:e}=await import("./DocBrowser-CpOosDEI.js");return{DocBrowser:e}},__vite__mapDeps([0,1]))).DocBrowser}));function Dt(e){const n=e.toLowerCase();return n==="/chat"||n.startsWith("/chat/")||n==="/skills"||n.startsWith("/skills/")||n==="/cron"||n.startsWith("/cron/")}function Et(e){const n=e.toLowerCase();return n==="/channels"||n.startsWith("/channels/")}function Nt({children:e}){const{isOpen:n,mode:t}=le();_n();const{pathname:o}=mn(),r=Dt(o),a=Et(o);return s.jsxs("div",{className:"h-screen flex bg-background font-sans text-foreground",children:[!r&&s.jsx(At,{mode:"settings"}),s.jsxs("div",{className:"flex-1 flex min-w-0 overflow-hidden relative",children:[s.jsx("div",{className:"flex-1 flex flex-col min-w-0 overflow-hidden",children:r?s.jsx("div",{className:"flex-1 h-full overflow-hidden",children:e}):s.jsx("main",{className:P("flex-1 custom-scrollbar p-8",a?"overflow-auto xl:overflow-hidden":"overflow-auto"),children:s.jsx("div",{className:P("max-w-6xl mx-auto animate-fade-in h-full",a&&"min-h-0 xl:overflow-hidden"),children:e})})}),n&&t==="docked"&&s.jsx(c.Suspense,{fallback:null,children:s.jsx(ze,{})})]}),n&&t==="floating"&&s.jsx(c.Suspense,{fallback:null,children:s.jsx(ze,{})})]})}function Mt({children:e}){return s.jsx(Bn,{children:s.jsx(Nt,{children:e})})}class Rt{constructor(n){this.url=n,this.ws=null,this.handlers=new Map,this.reconnectTimer=null,this.manualClose=!1}connect(){this.manualClose=!1,this.ws=new WebSocket(this.url),this.ws.onopen=()=>{console.log("WebSocket connected"),this.emit({type:"connection.open",payload:{}})},this.ws.onmessage=n=>{try{const t=JSON.parse(n.data);this.emit(t)}catch(t){console.error("Failed to parse WebSocket message:",t)}},this.ws.onclose=()=>{console.log("WebSocket disconnected"),this.manualClose||this.scheduleReconnect()},this.ws.onerror=n=>{console.error("WebSocket error:",n)}}on(n,t){this.handlers.has(n)||this.handlers.set(n,new Set),this.handlers.get(n).add(t)}off(n,t){var o;(o=this.handlers.get(n))==null||o.delete(t)}emit(n){const t=this.handlers.get(n.type);t==null||t.forEach(o=>o(n))}scheduleReconnect(){this.reconnectTimer||(this.reconnectTimer=window.setTimeout(()=>{this.reconnectTimer=null,this.connect()},3e3))}disconnect(){var n;this.manualClose=!0,this.reconnectTimer&&(clearTimeout(this.reconnectTimer),this.reconnectTimer=null),(n=this.ws)==null||n.close(),this.ws=null}}const jt=gn(e=>({connectionStatus:"disconnected",setConnectionStatus:n=>e({connectionStatus:n}),channelModal:{open:!1},openChannelModal:n=>e({channelModal:{open:!0,channel:n}}),closeChannelModal:()=>e({channelModal:{open:!1}})}));function Lt(e){const[n,t]=c.useState(null),{setConnectionStatus:o}=jt();return c.useEffect(()=>{const r=(()=>{const i=H==null?void 0:H.replace(/\/$/,"");if(!i)return"ws://127.0.0.1:18791/ws";try{const x=new URL(i,window.location.origin);return`${x.protocol==="https:"?"wss:":x.protocol==="http:"?"ws:":x.protocol}//${x.host}/ws`}catch{return i.startsWith("wss://")||i.startsWith("ws://")?`${i}/ws`:i.startsWith("https://")?`${i.replace(/^https:/,"wss:")}/ws`:i.startsWith("http://")?`${i.replace(/^http:/,"ws:")}/ws`:`${i}/ws`}})(),a=new Rt(r),u=i=>{if(e){if(e.invalidateQueries({queryKey:["sessions"]}),i&&i.trim().length>0){e.invalidateQueries({queryKey:["session-history",i.trim()]});return}e.invalidateQueries({queryKey:["session-history"]})}};return a.on("connection.open",()=>{o("connected")}),a.on("config.updated",i=>{e&&e.invalidateQueries({queryKey:["config"]}),i.type==="config.updated"&&i.payload.path.startsWith("session")&&u()}),a.on("run.updated",i=>{if(i.type!=="run.updated"||!e)return;const x=i.payload.run.sessionKey,g=i.payload.run.runId;e.invalidateQueries({queryKey:["chat-runs"]}),x?(e.invalidateQueries({queryKey:["sessions"]}),e.invalidateQueries({queryKey:["session-history",x]})):e.invalidateQueries({queryKey:["session-history"]}),g&&e.invalidateQueries({queryKey:["chat-run",g]})}),a.on("session.updated",i=>{i.type==="session.updated"&&u(i.payload.sessionKey)}),a.on("error",i=>{i.type==="error"&&console.error("WebSocket error:",i.payload.message)}),a.connect(),t(a),()=>a.disconnect()},[o,e]),n}const ve=new yn({defaultOptions:{queries:{retry:1,refetchOnWindowFocus:!0}}}),Ut=c.lazy(async()=>({default:(await N(async()=>{const{ModelConfig:e}=await import("./ModelConfig-BZ4ZfaQB.js");return{ModelConfig:e}},__vite__mapDeps([2,1,3,4,5,6,7,8]))).ModelConfig})),G=c.lazy(async()=>({default:(await N(async()=>{const{ChatPage:e}=await import("./ChatPage-DIx05c6s.js");return{ChatPage:e}},__vite__mapDeps([9,1,10,3,5,11,12,13,4,8]))).ChatPage})),Ft=c.lazy(async()=>({default:(await N(async()=>{const{ProvidersList:e}=await import("./ProvidersList-fPpJ5gl6.js");return{ProvidersList:e}},__vite__mapDeps([14,1,3,5,6,15,7,13]))).ProvidersList})),Ot=c.lazy(async()=>({default:(await N(async()=>{const{ChannelsList:e}=await import("./ChannelsList-C49JQ-Zt.js");return{ChannelsList:e}},__vite__mapDeps([16,1,3,5,6,17,15,7,13]))).ChannelsList})),Kt=c.lazy(async()=>({default:(await N(async()=>{const{RuntimeConfig:e}=await import("./RuntimeConfig-Dt9pLB9P.js");return{RuntimeConfig:e}},__vite__mapDeps([18,1,3,4,5,17,7]))).RuntimeConfig})),qt=c.lazy(async()=>({default:(await N(async()=>{const{SessionsConfig:e}=await import("./SessionsConfig-EskBOofQ.js");return{SessionsConfig:e}},__vite__mapDeps([19,1,10,3,5,11]))).SessionsConfig})),Bt=c.lazy(async()=>({default:(await N(async()=>{const{SecretsConfig:e}=await import("./SecretsConfig-C1PU0Yy8.js");return{SecretsConfig:e}},__vite__mapDeps([20,1,3,4,5,6,17]))).SecretsConfig})),_t=c.lazy(async()=>({default:(await N(async()=>{const{MarketplacePage:e}=await import("./MarketplacePage-BOzko5s9.js").then(n=>n.d);return{MarketplacePage:e}},__vite__mapDeps([12,1,13,10,3]))).MarketplacePage}));function Ht(){return s.jsx("div",{className:"h-full w-full animate-pulse rounded-2xl border border-border/40 bg-card/40"})}function I({children:e}){return s.jsx(c.Suspense,{fallback:s.jsx(Ht,{}),children:e})}function $t(){return Lt(ve),s.jsxs(zn,{client:ve,children:[s.jsx(Mt,{children:s.jsx("div",{className:"w-full h-full",children:s.jsxs(vn,{children:[s.jsx(w,{path:"/chat/skills",element:s.jsx(L,{to:"/skills",replace:!0})}),s.jsx(w,{path:"/chat/cron",element:s.jsx(L,{to:"/cron",replace:!0})}),s.jsx(w,{path:"/chat/:sessionId?",element:s.jsx(I,{children:s.jsx(G,{view:"chat"})})}),s.jsx(w,{path:"/skills",element:s.jsx(I,{children:s.jsx(G,{view:"skills"})})}),s.jsx(w,{path:"/cron",element:s.jsx(I,{children:s.jsx(G,{view:"cron"})})}),s.jsx(w,{path:"/model",element:s.jsx(I,{children:s.jsx(Ut,{})})}),s.jsx(w,{path:"/providers",element:s.jsx(I,{children:s.jsx(Ft,{})})}),s.jsx(w,{path:"/channels",element:s.jsx(I,{children:s.jsx(Ot,{})})}),s.jsx(w,{path:"/runtime",element:s.jsx(I,{children:s.jsx(Kt,{})})}),s.jsx(w,{path:"/sessions",element:s.jsx(I,{children:s.jsx(qt,{})})}),s.jsx(w,{path:"/secrets",element:s.jsx(I,{children:s.jsx(Bt,{})})}),s.jsx(w,{path:"/settings",element:s.jsx(L,{to:"/model",replace:!0})}),s.jsx(w,{path:"/marketplace/skills",element:s.jsx(L,{to:"/skills",replace:!0})}),s.jsx(w,{path:"/marketplace",element:s.jsx(L,{to:"/marketplace/plugins",replace:!0})}),s.jsx(w,{path:"/marketplace/:type",element:s.jsx(I,{children:s.jsx(_t,{})})}),s.jsx(w,{path:"/",element:s.jsx(L,{to:"/chat",replace:!0})}),s.jsx(w,{path:"*",element:s.jsx(L,{to:"/chat",replace:!0})})]})})}),s.jsx(xn,{position:"top-right",richColors:!0})]})}Sn.createRoot(document.getElementById("root")).render(s.jsx(c.StrictMode,{children:s.jsx(Ct,{children:s.jsx(bt,{children:s.jsx(wn,{children:s.jsx($t,{})})})})}));export{Zt as A,wt as B,gt as C,ne as D,rs as E,as as F,is as G,ls as H,cs as I,ds as J,F as K,ue as L,os as M,hs as N,fs as O,us as P,ys as Q,zs as R,ye as S,fe as T,Gt as U,ps as V,y as W,le as X,Jt as Y,je as Z,ns as a,ts as b,P as c,ss as d,te as e,Ps as f,se as g,re as h,kt as i,Pt as j,Vt as k,ws as l,bs as m,ks as n,Cs as o,Ss as p,ms as q,vs as r,gs as s,d as t,es as u,xs as v,ht as w,ut as x,Yt as y,Xt as z};
|