@openchambery/web 1.18.2-beta.28 → 1.18.2-beta.29
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/assets/AssistantView-Coj_BqNe.js +1 -0
- package/dist/assets/{ChatContainer-BMpzhPmB.js → ChatContainer-rXg0ZK5d.js} +23 -23
- package/dist/assets/{DiagramView-CrTRX9Y-.js → DiagramView-CmN3auk-.js} +1 -1
- package/dist/assets/{MarkdownRendererImpl-DfxE7s_1.js → MarkdownRendererImpl-BdH1ynSb.js} +2 -2
- package/dist/assets/{MobileDetailNavigation-C2LwNG8B.js → MobileDetailNavigation-DpfpKgPu.js} +1 -1
- package/dist/assets/MobileShareBridge-d58Vzm3O.js +4 -0
- package/dist/assets/MobileSurface-S6hr1_7p.js +2 -0
- package/dist/assets/{MultiRunWindow-AtCafW3t.js → MultiRunWindow-C4Ike8AX.js} +1 -1
- package/dist/assets/{OnboardingScreen-CYeRZznl.js → OnboardingScreen-CW21rCqC.js} +1 -1
- package/dist/assets/OverlayScrollbar-BsFmRX3b.js +1 -0
- package/dist/assets/{SettingsView-DAbUmMO3.js → SettingsView-DLxzV2rK.js} +12 -11
- package/dist/assets/{SettingsWindow-CF87lKID.js → SettingsWindow-B-iCDv5r.js} +1 -1
- package/dist/assets/{TerminalView-95i-ukyJ.js → TerminalView-jsjZJ-hn.js} +1 -1
- package/dist/assets/{ToolOutputDialog-6dyRcTiq.js → ToolOutputDialog-RCrRpjSt.js} +1 -1
- package/dist/assets/appThemeRegistry-CnlbpoIa.js +2 -0
- package/dist/assets/capgoAdapter-LvGrONDp.js +1 -0
- package/dist/assets/{clipboard-BnElHSnO.js → clipboard-ByPKHEt8.js} +1 -1
- package/dist/assets/{context-menu-C0ReF3zt.js → context-menu-CvnY05Eg.js} +1 -1
- package/dist/assets/{dialog-COrLBm9O.js → dialog-CQLvE6F6.js} +1 -1
- package/dist/assets/{es-DIVYdoxi.js → es-ZHyqPb3M.js} +1 -1
- package/dist/assets/{fr-CNTlVypq.js → fr-nXAAl4qu.js} +1 -1
- package/dist/assets/{gitApi-BHEXs_kS.js → gitApi-itjXkp9E.js} +6 -6
- package/dist/assets/insertionBoundaries-BumXctlh.js +1 -0
- package/dist/assets/{ja-C_eW5ZM8.js → ja-CLcxQZ5K.js} +1 -1
- package/dist/assets/{ko-CE3cOv7v.js → ko-KgjBt0nP.js} +1 -1
- package/dist/assets/main-BWyu53zj.js +172 -0
- package/dist/assets/main-Drfmhboy.js +2 -0
- package/dist/assets/miniChat-CC3awYO5.js +2 -0
- package/dist/assets/mobile-DbOR4vtC.js +2 -0
- package/dist/assets/multirun-CrlXzIhD.js +4 -0
- package/dist/assets/{pl-BZKZOE99.js → pl-ZJkD7N-8.js} +1 -1
- package/dist/assets/platform-G8Cxe5wN.js +2 -0
- package/dist/assets/{projectMeta-BXvk9v0Y.js → projectMeta-C-VsUy14.js} +1 -1
- package/dist/assets/{pt-BR-DHDgp8S3.js → pt-BR-B6nleSMM.js} +1 -1
- package/dist/assets/{radio-Bz3wW90q.js → radio-CaoU7Lu-.js} +1 -1
- package/dist/assets/renderElectronMiniChatApp-BX-vxTMr.js +2 -0
- package/dist/assets/renderMobileApp-CSH0JwGO.js +23 -0
- package/dist/assets/runtimeConfig-D6Btfpc2.js +2 -0
- package/dist/assets/runtimeEndpointReset-DfILEKXr.js +145 -0
- package/dist/assets/{sortable-tabs-strip-DA7w0nsV.js → sortable-tabs-strip-DULPi5Jt.js} +1 -1
- package/dist/assets/{src-7UHu0sNZ.css → src-F6gEZAFJ.css} +1 -1
- package/dist/assets/{store-CUWqzRt7.js → store-BDxgw-Hx.js} +2 -2
- package/dist/assets/terminalApi-os4uWEou.js +1 -0
- package/dist/assets/types-BuiqMmh_.js +1 -0
- package/dist/assets/{uk-CfQK6cz1.js → uk-KTDMzdyl.js} +1 -1
- package/dist/assets/{useAppFontEffects-CXaNayQ6.js → useAppFontEffects-DGq7jjOF.js} +5 -5
- package/dist/assets/{useDesktopWindowControlsLayout-DetZi3js.js → useDesktopWindowControlsLayout-DzesmOSh.js} +1 -1
- package/dist/assets/useEffectiveDirectory-BR3d8iyN.js +1 -0
- package/dist/assets/{useFontPreferences-92Qg-98H.js → useFontPreferences-B2QwnhAp.js} +1 -1
- package/dist/assets/{useMobileNavigationStore-BNXbEV2M.js → useMobileNavigationStore-BSreVaq2.js} +11 -11
- package/dist/assets/useSessionAutoCleanup-BNXZ_4Tj.js +1 -0
- package/dist/assets/{useWorkerHighlightedLines-B4w2EJ5y.js → useWorkerHighlightedLines-BCqkyru3.js} +1 -1
- package/dist/assets/{zh-CN-DvY2fKWp.js → zh-CN-BilLDIh_.js} +1 -1
- package/dist/assets/{zh-TW-eWe0lm3-.js → zh-TW-DBDsyRLQ.js} +1 -1
- package/dist/index.html +7 -5
- package/dist/mini-chat.html +7 -5
- package/dist/mobile.html +7 -5
- package/package.json +1 -1
- package/dist/assets/AssistantView-B34kl4il.js +0 -1
- package/dist/assets/MobileShareBridge-DqhQSf8z.js +0 -4
- package/dist/assets/MobileSurface-C2silN2X.js +0 -2
- package/dist/assets/OverlayScrollbar-Dk1uExgz.js +0 -1
- package/dist/assets/appThemeRegistry-CCk0bHI-.js +0 -2
- package/dist/assets/gitApiHttp-BxGAFLTf.js +0 -2
- package/dist/assets/insertionBoundaries-DbDVnbDC.js +0 -1
- package/dist/assets/main-DvKUAYFu.js +0 -172
- package/dist/assets/main-L6WiOyvO.js +0 -2
- package/dist/assets/miniChat-C9jmbnFh.js +0 -2
- package/dist/assets/mobile-BOin_sXb.js +0 -2
- package/dist/assets/multirun-D-6xkHW1.js +0 -4
- package/dist/assets/renderElectronMiniChatApp-BjJgTBYX.js +0 -2
- package/dist/assets/renderMobileApp-C1Mx2Onb.js +0 -23
- package/dist/assets/runtimeConfig-BXCt7ZsQ.js +0 -1
- package/dist/assets/runtimeEndpointReset-Bpu5TCuK.js +0 -145
- package/dist/assets/terminalApi-DpiAJlil.js +0 -1
- package/dist/assets/useEffectiveDirectory-B45LYDwZ.js +0 -1
- package/dist/assets/useSessionAutoCleanup-DoCX9MkG.js +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{o as e}from"./rolldown-runtime-C0FnF6B9.js";import{M as t,t as n}from"./useUIStore-5agS8bsW.js";import{Kt as r,kn as i,qt as a,u as o}from"./persistence-D1lIuyqO.js";import{h as s}from"./desktopHosts-ZK_vkdzL.js";import{a as c,i as l,o as u,r as d}from"./desktopRelayRestore-CewM6-g5.js";import{nt as f,rt as p}from"./vendor-base-ui-CnHfUmDN.js";import{Mt as m}from"./platform-G8Cxe5wN.js";import{n as h}from"./vendor-react-DLPElpoQ.js";import{n as g}from"./vendor-tanstack-query-core-BWz0ose6.js";import{i as _,r as v}from"./vendor-tanstack-react-query-D7pys_c9.js";import{n as y,t as b}from"./clipboard-ByPKHEt8.js";import{i as x,t as S}from"./store-BDxgw-Hx.js";import{Qi as C,fr as ee,hr as w,l as T,or as E,vr as te}from"./useMobileNavigationStore-BSreVaq2.js";import{t as D}from"./utils-BxJEIWv5.js";import{n as ne}from"./Icon-DiIuWOuC.js";import{t as re}from"./button-DaAoVF4X.js";import{i as ie,n as ae,r as oe,t as se}from"./vendor-simplewebauthn-browser-Dwhcdg_5.js";import{n as ce,r as le}from"./radio-CaoU7Lu-.js";var O=h(),k=[`desktopHostSwitch`],A=class extends Error{result;host;constructor(e,t){super(e.reason),this.name=`DesktopHostSwitchError`,this.result=e,this.host=t}},ue=(e,t)=>S(x.getState().dictionary,e,t),de=async e=>{let{host:n}=e;if(n.id===`local`){let r=(e.localApiOrigin||``).trim();if(!r)throw new A({ok:!1,status:{status:`unreachable`,latencyMs:0},reason:`unreachable`},n);return t({apiBaseUrl:r,clientToken:e.localClientToken||null,runtimeKey:l(n)}),{ok:!0,via:`direct`,status:{status:`ok`,latencyMs:0}}}if(n.viaSshRelay){let e=await u(n);if(!e.ok)throw new A(e,n);return e}let r=await c(n,{cachedProbe:e.cachedProbe});if(!r.ok)throw new A(r,n);return r},j=null,fe=()=>j||(j=new g(o,{mutationKey:k,mutationFn:de,onError:(e,t)=>{e instanceof A&&e.result.reason!==`unsupported`&&te.error(ue(`desktopHostSwitcher.toast.instanceUnreachable`,{host:s(t.host.label)}))}}),j.subscribe(()=>void 0),j),pe=async e=>{if(d(e.host))return{ok:!0,via:`direct`,status:e.cachedProbe?.status===`ok`?e.cachedProbe:{status:`ok`,latencyMs:0}};if(o.isMutating({mutationKey:k})>0)return{ok:!1,status:{status:`unreachable`,latencyMs:0},reason:`unsupported`};try{return await fe().mutate(e)}catch(e){if(e instanceof A)return e.result;throw e}},me=()=>{let e=(0,O.c)(1),t;return e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t={mutationKey:k},e[0]=t):t=e[0],v(t)>0},he=()=>{let e=(0,O.c)(1),t;return e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t={filters:{mutationKey:k,status:`pending`},select:ge},e[0]=t):t=e[0],_(t)[0]?.host.id??null};function ge(e){return e.state.variables}var M=e=>typeof e==`object`&&!!e,N=(e,t)=>{let n=e[t];return typeof n==`string`?n:null},P=(e,t)=>{let n=e[t];return typeof n==`number`&&Number.isFinite(n)?n:null},F=(e,t)=>{let n=e[t];return typeof n==`boolean`?n:null},I=e=>Array.isArray(e)?e.filter(e=>typeof e==`string`):[],L=()=>r()?(e,t)=>a(e,t):null,R=e=>{if(!M(e))return;let t=F(e,`enabled`)??!1,n=N(e,`store`)?.toLowerCase()===`settings`?`settings`:`never`,r=N(e,`value`);return{enabled:t,store:n,...r?{value:r}:{}}},_e=e=>e===`remote`||e===`dynamic`?e:`local`,ve=e=>{if(!M(e))return null;let t=N(e,`id`);if(!t)return null;let n=F(e,`enabled`)??!0,r=_e(N(e,`type`)),i=N(e,`localHost`)||N(e,`local_host`)||void 0,a=P(e,`localPort`)??P(e,`local_port`)??void 0,o=N(e,`remoteHost`)||N(e,`remote_host`)||void 0,s=P(e,`remotePort`)??P(e,`remote_port`)??void 0;return{id:t,enabled:n,type:r,...i?{localHost:i}:{},...typeof a==`number`?{localPort:a}:{},...o?{remoteHost:o}:{},...typeof s==`number`?{remotePort:s}:{}}},ye=e=>{if(!M(e))return null;let t=N(e,`id`),n=N(e,`sshCommand`)||N(e,`ssh_command`);if(!t||!n)return null;let r=N(e,`nickname`),i=e.sshParsed,a=M(i)?{destination:N(i,`destination`)||``,args:I(i.args)}:void 0,o=M(e.remoteOpenchamber)?e.remoteOpenchamber:M(e.remote_openchamber)?e.remote_openchamber:{},s=M(e.localForward)?e.localForward:M(e.local_forward)?e.local_forward:{},c=M(e.auth)?e.auth:{},l=N(o,`mode`)?.toLowerCase()===`external`?`external`:`managed`,u=N(o,`installMethod`)||N(o,`install_method`),d=u===`npm`||u===`download_release`||u===`upload_bundle`?u:`bun`,f=N(s,`bindHost`)||N(s,`bind_host`)||`127.0.0.1`,p=f===`localhost`||f===`0.0.0.0`?f:`127.0.0.1`,m=(Array.isArray(e.portForwards)?e.portForwards:Array.isArray(e.port_forwards)?e.port_forwards:[]).map(e=>ve(e)).filter(e=>!!e),h=P(o,`preferredPort`)??P(o,`preferred_port`),g=P(s,`preferredLocalPort`)??P(s,`preferred_local_port`),_=R(c.sshPassword||c.ssh_password),v=R(c.openchamberPassword||c.openchamber_password);return{id:t,...r?{nickname:r}:{},sshCommand:n,...a&&a.destination?{sshParsed:a}:{},connectionTimeoutSec:P(e,`connectionTimeoutSec`)??P(e,`connection_timeout_sec`)??60,remoteOpenchamber:{mode:l,keepRunning:F(o,`keepRunning`)??F(o,`keep_running`)??!0,...h?{preferredPort:h}:{},installMethod:d,uploadBundleOverSsh:F(o,`uploadBundleOverSsh`)??F(o,`upload_bundle_over_ssh`)??!1},localForward:{...g?{preferredLocalPort:g}:{},bindHost:p},auth:{..._?{sshPassword:_}:{},...v?{openchamberPassword:v}:{}},portForwards:m}},be=e=>{switch(e){case`config_resolved`:case`auth_check`:case`master_connecting`:case`remote_probe`:case`installing`:case`updating`:case`server_detecting`:case`server_starting`:case`forwarding`:case`ready`:case`degraded`:case`error`:return e;default:return`idle`}},z=e=>{if(!M(e))return null;let t=N(e,`id`);return t?{id:t,phase:be(N(e,`phase`)),...N(e,`detail`)?{detail:N(e,`detail`)||void 0}:{},...N(e,`localUrl`)||N(e,`local_url`)?{localUrl:N(e,`localUrl`)||N(e,`local_url`)||void 0}:{},...typeof(P(e,`localPort`)??P(e,`local_port`))==`number`?{localPort:P(e,`localPort`)??P(e,`local_port`)??void 0}:{},...typeof(P(e,`remotePort`)??P(e,`remote_port`))==`number`?{remotePort:P(e,`remotePort`)??P(e,`remote_port`)??void 0}:{},startedByUs:F(e,`startedByUs`)??F(e,`started_by_us`)??!1,retryAttempt:P(e,`retryAttempt`)??P(e,`retry_attempt`)??0,requiresUserAction:F(e,`requiresUserAction`)??F(e,`requires_user_action`)??!1,updatedAtMs:P(e,`updatedAtMs`)??P(e,`updated_at_ms`)??Date.now()}:null},xe=e=>{if(!M(e))return null;let t=N(e,`host`),n=N(e,`source`),r=N(e,`sshCommand`)||N(e,`ssh_command`);return!t||!n||!r?null:{host:t,source:n,sshCommand:r,pattern:F(e,`pattern`)??!1}},Se=(e,t)=>({id:e,sshCommand:t,connectionTimeoutSec:60,remoteOpenchamber:{mode:`managed`,keepRunning:!0,installMethod:`bun`,uploadBundleOverSsh:!1},localForward:{bindHost:`127.0.0.1`},auth:{},portForwards:[]}),Ce=async()=>{let e=L();if(!e)return{instances:[]};let t=await e(`desktop_ssh_instances_get`);return M(t)?{instances:(Array.isArray(t.instances)?t.instances:Array.isArray(t.desktopSshInstances)?t.desktopSshInstances:[]).map(e=>ye(e)).filter(e=>!!e)}:{instances:[]}},we=async e=>{let t=L();t&&await t(`desktop_ssh_instances_set`,{config:{instances:e.instances}})},Te=async()=>{let e=L();if(!e)return[];let t=await e(`desktop_ssh_import_hosts`);return Array.isArray(t)?t.map(e=>xe(e)).filter(e=>!!e):[]},Ee=async e=>{let t=L();t&&await t(`desktop_ssh_connect`,{id:e})},De=async e=>{let t=L();t&&await t(`desktop_ssh_disconnect`,{id:e})},Oe=async e=>{let t=L();if(!t)return[];let n=await t(`desktop_ssh_status`,{...e?{id:e}:{}});return Array.isArray(n)?n.map(e=>z(e)).filter(e=>!!e):[]},ke=async(e,t)=>{let n=L();if(!n)return[];let r=await n(`desktop_ssh_logs`,{id:e,...typeof t==`number`?{limit:t}:{}});return Array.isArray(r)?r.filter(e=>typeof e==`string`):[]},Ae=async e=>{let t=L();t&&await t(`desktop_ssh_logs_clear`,{id:e})},je=(e,t)=>{let n=Math.max(0,Math.trunc(Number(e.fileGroups)||0)),r=Math.max(0,Math.trunc(Number(e.singleFiles)||0)),i=Math.max(0,Math.trunc(Number(e.directories)||0));return{fileGroups:Array.from({length:n},()=>!0),singleFiles:Array.from({length:r},()=>!0),directories:Array.from({length:i},()=>!0),agentsRoot:!0,authFile:t?.includeAuthFile===!0}},Me=e=>{if(!M(e))return null;let t=N(e,`path`),n=P(e,`bytes`);return!t||n===null?null:{path:t,bytes:n}},Ne=e=>{if(!M(e))return null;let t=N(e,`path`),n=P(e,`fileCount`)??P(e,`file_count`),r=P(e,`bytes`);return!t||n===null||r===null?null:{path:t,fileCount:n,bytes:r}},Pe=e=>{if(e==null||!M(e))return null;let t=P(e,`fileCount`)??P(e,`file_count`),n=P(e,`bytes`);return t===null||n===null?null:{fileCount:t,bytes:n}},B=e=>{if(e==null||!M(e))return null;let t=P(e,`bytes`);return t===null?null:{bytes:t}},V=e=>{if(!M(e))return null;let t=Array.isArray(e.files)?e.files:null,n=Array.isArray(e.directories)?e.directories:null,r=I(e.deletes),i=P(e,`totalBytes`)??P(e,`total_bytes`);if(!t||!n||i===null||!(`agentsRoot`in e)&&!(`agents_root`in e))return null;let a=t.map(e=>Me(e)).filter(e=>!!e),o=n.map(e=>Ne(e)).filter(e=>!!e);if(a.length!==t.length||o.length!==n.length)return null;let s=e.agentsRoot??e.agents_root,c=s==null?null:Pe(s);if(s!=null&&c===null)return null;let l=e.authFile??e.auth_file,u=l==null?null:B(l),d=e.direction===`pull`||e.direction===`push`?e.direction:void 0,f=e.selections,p=M(f)?{fileGroups:Array.isArray(f.fileGroups)?f.fileGroups.map(e=>e!==!1):[],singleFiles:Array.isArray(f.singleFiles)?f.singleFiles.map(e=>e!==!1):[],directories:Array.isArray(f.directories)?f.directories.map(e=>e!==!1):[],agentsRoot:f.agentsRoot!==!1,authFile:f.authFile===!0}:void 0,m=H(e.selectionShape??e.selection_shape);return{files:a,directories:o,agentsRoot:c,authFile:u,deletes:r,totalBytes:i,...d?{direction:d}:{},...p?{selections:p}:{},...m?{selectionShape:m}:{}}},H=e=>{if(!M(e))return null;let t=P(e,`fileGroups`)??P(e,`file_groups`),n=P(e,`singleFiles`)??P(e,`single_files`),r=P(e,`directories`);return t===null||n===null||r===null||t<0||n<0||r<0?null:{fileGroups:t,singleFiles:n,directories:r}},Fe=e=>{if(!M(e))return null;let t=V(e.plan);if(!t)return null;let n=H(e.selectionShape??e.selection_shape)??t.selectionShape??null;return{plan:t,remoteExisting:I(e.remoteExisting??e.remote_existing),remoteAgentsRootExists:F(e,`remoteAgentsRootExists`)??F(e,`remote_agents_root_exists`)??!1,remoteAuthFileExists:F(e,`remoteAuthFileExists`)??F(e,`remote_auth_file_exists`)??!1,...typeof e.credentialAuthorized==`boolean`?{credentialAuthorized:e.credentialAuthorized}:{},...n?{selectionShape:n}:{}}},Ie=e=>{if(!M(e)||F(e,`ok`)!==!0)return null;let t=P(e,`files`),n=P(e,`directories`),r=P(e,`deletes`),i=P(e,`totalBytes`)??P(e,`total_bytes`);if(t===null||n===null||r===null||i===null||!(`agentsRoot`in e)&&!(`agents_root`in e))return null;let a=e.agentsRoot??e.agents_root,o=null;if(a!=null){if(!M(a))return null;let e=P(a,`fileCount`)??P(a,`file_count`);if(e===null)return null;o={fileCount:e}}let s=e.authFile??e.auth_file,c=s==null?null:B(s);return{ok:!0,files:t,directories:n,deletes:r,totalBytes:i,agentsRoot:o,authFile:c}},Le=async(e={})=>{let t=L();if(!t)return null;let n=await t(`desktop_ssh_sync_opencode_config`,{stage:`local`,...e.direction?{direction:e.direction}:{},...e.selections?{selections:e.selections}:{}});if(!M(n))return null;let r=V(n.plan);if(!r)return null;let i=H(n.selectionShape??n.selection_shape)??r.selectionShape??null;return i?{...r,selectionShape:i}:r},Re=async(e,t={})=>{let n=L();return n?Fe(await n(`desktop_ssh_sync_opencode_config`,{id:e,...t.targetKind?{targetKind:t.targetKind}:{},...t.direction?{direction:t.direction}:{},...t.selections?{selections:t.selections}:{}})):null},ze=async(e,t={})=>{let n=L();return n?Ie(await n(`desktop_ssh_sync_opencode_config`,{id:e,apply:!0,...t.targetKind?{targetKind:t.targetKind}:{},...t.direction?{direction:t.direction}:{},...t.selections?{selections:t.selections}:{}})):null},Be=async(e,t={})=>{let n=L();if(!n)return[];let r=await n(`desktop_ssh_sync_runs_list`,{id:e,...t.targetKind?{targetKind:t.targetKind}:{}});return Array.isArray(r)?r.filter(e=>M(e)&&typeof e.syncRunId==`string`&&typeof e.targetId==`string`):[]},U=e=>{if(!M(e))return null;let t=typeof e.targetId==`string`?e.targetId.trim():``;if(!t)return null;let n=e.authorized===!0,r=typeof e.grantedAt==`string`&&e.grantedAt.trim()?e.grantedAt.trim():void 0,i=typeof e.channel==`string`&&e.channel.trim()?e.channel.trim():void 0;return{targetId:t,authorized:n,...r?{grantedAt:r}:{},...i?{channel:i}:{}}},Ve=async(e,t={})=>{let n=L();return n?U(await n(`desktop_ssh_credential_sync_get`,{id:e,...t.targetKind?{targetKind:t.targetKind}:{}})):null},He=async(e,t={})=>{let n=L();return n?U(await n(`desktop_ssh_credential_sync_grant`,{id:e,...t.targetKind?{targetKind:t.targetKind}:{}})):null},Ue=async(e,t={})=>{let n=L();return n?U(await n(`desktop_ssh_credential_sync_revoke`,{id:e,...t.targetKind?{targetKind:t.targetKind}:{}})):null},We=async e=>{if(!r())return async()=>{};let t=window.__OPENCHAMBER_DESKTOP__?.listen;if(typeof t!=`function`)return async()=>{};let n=await t(`openchamber:ssh-instance-status`,t=>{let n=z(t?.payload);n&&e(n)});return async()=>{await n()}},Ge=`/auth/passkey/authenticate/options`,Ke=`/auth/passkey/authenticate/verify`,qe=`/auth/passkey/register/options`,Je=`/auth/passkey/register/verify`,W=`/api/passkeys`,Ye=`/auth/passkey/status`,Xe=`/api/auth/reset`,G={enabled:!1,hasPasskeys:!1,passkeyCount:0,rpID:null},K=async(e,t)=>i(e,{method:`POST`,credentials:`include`,headers:{"Content-Type":`application/json`,Accept:`application/json`},body:t===void 0?void 0:JSON.stringify(t)}),q=async(e,t)=>{try{let t=await e.json();if(t&&typeof t.error==`string`&&t.error.trim())return t.error}catch{}return t},Ze=e=>e instanceof ie&&e.code===`ERROR_CEREMONY_ABORTED`,Qe=()=>{oe.cancelCeremony()},J=()=>typeof window>`u`?{supported:!1,reason:`Passkeys are unavailable outside the browser.`}:window.isSecureContext?{supported:!0,reason:``}:{supported:!1,reason:`Passkeys require HTTPS or localhost.`},$e=async()=>{let e=J();if(!e.supported)throw Error(e.reason);let t=await K(qe,{label:typeof navigator.userAgent==`string`&&navigator.userAgent.trim()?navigator.userAgent:`This device`});if(!t.ok)throw Error(await q(t,`Could not start passkey setup.`));let{requestId:n,optionsJSON:r}=await t.json(),i=await K(Je,{requestId:n,response:await ae({optionsJSON:r})});if(!i.ok)throw Error(await q(i,`Could not finish passkey setup.`));return i.json().catch(()=>null)},et=async(e,t={})=>{let n=J();if(!n.supported)throw Error(n.reason);let r=await K(Ge);if(!r.ok)throw Error(await q(r,`Passkey sign-in is not available right now.`));let{requestId:i,optionsJSON:a}=await r.json(),o=await K(Ke,{requestId:i,response:await se({optionsJSON:a}),trustDevice:e,issueClientToken:t.issueClientToken===!0,clientLabel:t.clientLabel,clientKind:t.clientKind,dedupeKey:t.dedupeKey});if(!o.ok)throw Error(await q(o,`Passkey sign-in failed.`));return o.json().catch(()=>null)},tt=async()=>{let e=await i(Ye,{method:`GET`,credentials:`include`,headers:{Accept:`application/json`}});if(!e.ok)return G;let t=await e.json().catch(()=>null);return{enabled:t?.enabled===!0,hasPasskeys:t?.hasPasskeys===!0,passkeyCount:typeof t?.passkeyCount==`number`?t.passkeyCount:0,rpID:typeof t?.rpID==`string`&&t.rpID?t.rpID:null}},nt=async()=>{let e=await i(W,{method:`GET`,credentials:`include`,headers:{Accept:`application/json`}});if(!e.ok)throw Error(await q(e,`Could not load passkeys.`));let t=await e.json().catch(()=>null);return Array.isArray(t?.passkeys)?t.passkeys:[]},rt=async e=>{let t=await i(`${W}/${encodeURIComponent(e)}`,{method:`DELETE`,credentials:`include`,headers:{Accept:`application/json`}});if(!t.ok)throw Error(await q(t,`Could not remove passkey.`));return t.json().catch(()=>null)},it=async()=>{let e=await K(Xe);if(!e.ok)throw Error(await q(e,`Could not clear saved authentication.`));return e.json().catch(()=>null)},Y=e(p(),1),X=f();function Z(e){let t=(0,O.c)(8),n,r;t[0]===e?(n=t[1],r=t[2]):({className:n,...r}=e,t[0]=e,t[1]=n,t[2]=r);let i;t[3]===n?i=t[4]:(i=D(`bg-card text-card-foreground flex flex-col gap-6 rounded-xl border py-6 shadow-none`,n),t[3]=n,t[4]=i);let a;return t[5]!==r||t[6]!==i?(a=(0,X.jsx)(`div`,{"data-slot":`card`,className:i,...r}),t[5]=r,t[6]=i,t[7]=a):a=t[7],a}function at(e){let t=(0,O.c)(8),n,r;t[0]===e?(n=t[1],r=t[2]):({className:n,...r}=e,t[0]=e,t[1]=n,t[2]=r);let i;t[3]===n?i=t[4]:(i=D(`@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-1.5 px-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6`,n),t[3]=n,t[4]=i);let a;return t[5]!==r||t[6]!==i?(a=(0,X.jsx)(`div`,{"data-slot":`card-header`,className:i,...r}),t[5]=r,t[6]=i,t[7]=a):a=t[7],a}function ot(e){let t=(0,O.c)(8),n,r;t[0]===e?(n=t[1],r=t[2]):({className:n,...r}=e,t[0]=e,t[1]=n,t[2]=r);let i;t[3]===n?i=t[4]:(i=D(`leading-none font-semibold`,n),t[3]=n,t[4]=i);let a;return t[5]!==r||t[6]!==i?(a=(0,X.jsx)(`div`,{"data-slot":`card-title`,className:i,...r}),t[5]=r,t[6]=i,t[7]=a):a=t[7],a}function st(e){let t=(0,O.c)(8),n,r;t[0]===e?(n=t[1],r=t[2]):({className:n,...r}=e,t[0]=e,t[1]=n,t[2]=r);let i;t[3]===n?i=t[4]:(i=D(`px-6`,n),t[3]=n,t[4]=i);let a;return t[5]!==r||t[6]!==i?(a=(0,X.jsx)(`div`,{"data-slot":`card-content`,className:i,...r}),t[5]=r,t[6]=i,t[7]=a):a=t[7],a}var ct=class extends Y.Component{constructor(e){super(e),this.state={hasError:!1}}static getDerivedStateFromError(e){return{hasError:!0,error:e}}componentDidCatch(e,t){this.setState({error:e,errorInfo:t,copied:!1}),console.error(`Error caught by boundary:`,e,t)}handleReset=()=>{this.setState({hasError:!1,error:void 0,errorInfo:void 0})};handleCopy=async()=>{let{strings:e}=this.props,t=`${this.state.error?String(this.state.error):e.unknownError}${this.state.error?.stack?`\n\nStack:\n${this.state.error.stack}`:``}${this.state.errorInfo?.componentStack?`\n\n${e.componentStackLabel}${this.state.errorInfo.componentStack}`:``}`;(await b(t)).ok&&(this.setState({copied:!0}),window.setTimeout(()=>{this.setState(e=>e.copied?{copied:!1}:null)},1500))};render(){let{strings:e}=this.props;return this.state.hasError?this.props.fallback?this.props.fallback:(0,X.jsx)(`div`,{className:`p-4 flex items-center justify-center min-h-screen`,children:(0,X.jsxs)(Z,{className:`w-full max-w-md`,children:[(0,X.jsx)(at,{className:`text-center`,children:(0,X.jsxs)(ot,{className:`flex items-center justify-center gap-2 text-destructive`,children:[(0,X.jsx)(ne,{name:`error-warning`,className:`h-5 w-5`}),e.title]})}),(0,X.jsxs)(st,{className:`space-y-4`,children:[(0,X.jsx)(`p`,{className:`text-sm text-muted-foreground text-center`,children:e.description}),this.state.error&&(0,X.jsxs)(`details`,{className:`text-xs font-mono bg-muted p-3 rounded`,children:[(0,X.jsx)(`summary`,{className:`cursor-pointer hover:bg-interactive-hover/80`,children:e.detailsSummary}),(0,X.jsxs)(`pre`,{className:`mt-2 max-h-48 overflow-auto`,children:[this.state.error.toString(),this.state.errorInfo?.componentStack?`\n\n${e.componentStackLabel}${this.state.errorInfo.componentStack}`:``]})]}),(0,X.jsxs)(`div`,{className:`flex gap-2`,children:[(0,X.jsxs)(re,{onClick:this.handleReset,variant:`outline`,className:`flex-1`,children:[(0,X.jsx)(ne,{name:`restart`,className:`h-4 w-4 mr-2`}),e.tryAgain]}),(0,X.jsx)(re,{onClick:this.handleCopy,variant:`outline`,className:`flex-1`,children:this.state.copied?e.copied:e.copy})]})]})]})}):this.props.children}},lt=e=>{let t=(0,O.c)(29),{children:n,fallback:r}=e,{t:i}=y(),a;t[0]===i?a=t[1]:(a=i(`errorBoundary.state.unknownError`),t[0]=i,t[1]=a);let o;t[2]===i?o=t[3]:(o=i(`errorBoundary.title`),t[2]=i,t[3]=o);let s;t[4]===i?s=t[5]:(s=i(`errorBoundary.description`),t[4]=i,t[5]=s);let c;t[6]===i?c=t[7]:(c=i(`errorBoundary.actions.errorDetails`),t[6]=i,t[7]=c);let l;t[8]===i?l=t[9]:(l=i(`errorBoundary.state.componentStackLabel`),t[8]=i,t[9]=l);let u;t[10]===i?u=t[11]:(u=i(`errorBoundary.actions.tryAgain`),t[10]=i,t[11]=u);let d;t[12]===i?d=t[13]:(d=i(`errorBoundary.actions.copied`),t[12]=i,t[13]=d);let f;t[14]===i?f=t[15]:(f=i(`errorBoundary.actions.copy`),t[14]=i,t[15]=f);let p;t[16]!==a||t[17]!==o||t[18]!==s||t[19]!==c||t[20]!==l||t[21]!==u||t[22]!==d||t[23]!==f?(p={unknownError:a,title:o,description:s,detailsSummary:c,componentStackLabel:l,tryAgain:u,copied:d,copy:f},t[16]=a,t[17]=o,t[18]=s,t[19]=c,t[20]=l,t[21]=u,t[22]=d,t[23]=f,t[24]=p):p=t[24];let m=p,h;return t[25]!==n||t[26]!==r||t[27]!==m?(h=(0,X.jsx)(ct,{fallback:r,strings:m,children:n}),t[25]=n,t[26]=r,t[27]=m,t[28]=h):h=t[28],h},Q=e=>S(x.getState().dictionary,e),ut=e=>typeof e!=`number`||!Number.isFinite(e)?null:Math.max(0,Math.min(100,Math.round(e))),dt=e=>typeof e!=`number`||!Number.isFinite(e)?`-`:`${Math.round(e)}%`,ft=(e,t)=>e??dt(t),pt=(e,t,n=`auto`)=>{if(!e)return t??``;try{let r=new Date(e);if(!Number.isFinite(r.getTime()))return t??``;let i=new Date;return r.toDateString()===i.toDateString()?le(r,n,{fallback:t??``}):ce(r,n,{month:`short`,day:`numeric`,weekday:`short`,hour:`numeric`,minute:`2-digit`})}catch{return t??``}},mt=e=>e===null?`safe`:e>=80?`critical`:e>=50?`warn`:`safe`,ht=e=>e===`5h`?Q(`quota.window.5h`):e===`7d`?Q(`quota.window.7d`):e===`7d-sonnet`?Q(`quota.window.7dSonnet`):e===`7d-opus`?Q(`quota.window.7dOpus`):e===`weekly`?Q(`quota.window.weekly`):e===`daily`?Q(`quota.window.daily`):e===`monthly`?Q(`quota.window.monthly`):e===`credits`?Q(`quota.window.credits`):e===`credits_balance`?Q(`quota.window.creditsBalance`):e===`billing_cycle`?Q(`quota.window.billingCycle`):e===`auto`?Q(`quota.window.auto`):e===`api`?Q(`quota.window.api`):e===`plan_limit`?Q(`quota.window.planLimit`):e===`on_demand`?Q(`quota.window.onDemand`):e===`session`?Q(`quota.window.session`):e===`premium`?Q(`quota.window.premium`):e===`chat`?Q(`quota.window.chat`):e===`completions`?Q(`quota.window.completions`):e===`premium_interactions`?Q(`quota.window.premiumInteractions`):e,gt=e=>{let t=e.toLowerCase().trim();if(t===`5h`)return 18e3;if(t===`7d`||t===`weekly`||t===`7d-sonnet`||t===`7d-opus`)return 604800;if(t===`monthly`)return 2592e3;if(t===`24h`||t===`daily`)return 86400;if(t===`1h`)return 3600;let n=t.match(/^(\d+)h$/);if(n)return parseInt(n[1],10)*3600;let r=t.match(/^(\d+)d$/);return r?parseInt(r[1],10)*86400:null},_t=(e,t,n,r)=>{let i=n;if(i===null&&r&&(i=gt(r)),e===null||t===null||i===null||i<=0)return null;let a=Math.max(0,(t-Date.now())/1e3),o=Math.max(0,Math.min(i,i-a)),s=Math.max(0,Math.min(1,o/i)),c=e/100,l=e>=100&&a>0,u;u=s>.01?Math.min(999,c/s*100):e;let d;d=l?`exhausted`:c<=s?`on-track`:u<=130?`slightly-fast`:`too-fast`;let f=i>=432e3,p=f?86400:3600,m=f?`d`:`h`,h=i/p,g=e/Math.max(o/p,h*.01),_=Number.isFinite(g)?`${Math.min(999.9,Math.max(0,g)).toFixed(1)}%/${m}`:`-`,v=u>100?`+${Math.round(u)}%`:`${Math.round(u)}%`,y=null,b=i/86400;return b>=7&&(y=100/b),{elapsedRatio:s,usageRatio:c,predictedFinalPercent:u,remainingSeconds:a,isExhausted:l,elapsedSeconds:o,totalSeconds:i,status:d,paceRateText:_,predictText:v,dailyAllocationPercent:y}},vt=e=>{switch(e){case`exhausted`:case`too-fast`:return`var(--status-error)`;case`slightly-fast`:return`var(--status-warning)`;case`on-track`:return`var(--status-success)`}},yt=e=>{let t=Math.floor(Math.max(0,Math.floor(e))/60),n=Math.floor(t/60),r=Math.floor(n/24),i=n%24,a=t%60;return r>0?`${r}d ${i}h`:n>0?`${n}h`:t===0?`<1m`:`${a}m`},bt=e=>Math.min(100,Math.max(0,e*100)),xt=[`standalone`,`minimal-ui`,`fullscreen`,`window-controls-overlay`],St=`openchamber.pwaRecentSessions`,Ct=e=>typeof window>`u`||typeof window.matchMedia!=`function`?!1:window.matchMedia(`(display-mode: ${e})`).matches,wt=()=>typeof window>`u`?`browser`:typeof document<`u`&&document.referrer.startsWith(`android-app://`)?`twa`:window.navigator.standalone?`standalone`:xt.find(e=>Ct(e))??`browser`,Tt=864e5,Et=5,Dt=864e5,$=e=>e.time?.updated??e.time?.created??0,Ot=({sessions:e,currentSessionId:t,cutoffDays:n,keepRecent:r=Et,now:i=Date.now()})=>{if(!Array.isArray(e)||n<=0)return[];let a=i-n*Tt,o=[...e].sort((e,t)=>$(t)-$(e)),s=new Set(o.slice(0,r).map(e=>e.id));return o.filter(e=>{if(!e?.id||s.has(e.id)||e.id===t||e.share)return!1;let n=$(e);return n?n<a:!1}).map(e=>e.id)},kt=e=>{let t=typeof e==`object`?e:void 0,r=t?.autoRun!==!1,i=typeof e==`boolean`?e:t?.enabled??!0,a=T(e=>e.currentSessionId),o=T(e=>e.isLoading),s=w(e=>e.activeSessions),c=w(e=>e.hasLoadedFullCatalog),l=n(e=>e.autoDeleteEnabled),u=n(e=>e.autoDeleteAfterDays),d=n(e=>e.sessionRetentionAction),f=n(e=>e.autoDeleteLastRunAt),p=n(e=>e.setAutoDeleteLastRunAt),[h,g]=Y.useState(!1),_=Y.useRef(!1);Y.useEffect(()=>{if(!i||!r||!l||u<=0)return;let e=window.setTimeout(()=>{E(C())},8e3);return()=>window.clearTimeout(e)},[u,l,r,i]);let v=Y.useMemo(()=>u<=0?[]:Ot({sessions:s,currentSessionId:a,cutoffDays:u}),[u,a,s]),y=Y.useCallback(async({force:e=!1}={})=>{if(_.current)return{completedIds:[],failedIds:[],action:d,skippedReason:`running`};if((!l||u<=0)&&!e)return{completedIds:[],failedIds:[],action:d,skippedReason:`disabled`};if(o)return{completedIds:[],failedIds:[],action:d,skippedReason:`loading`};let t=Date.now();if(!e&&f&&t-f<Dt)return{completedIds:[],failedIds:[],action:d,skippedReason:`cooldown`};let{activeSessions:n}=await E(C());if(n.length===0)return{completedIds:[],failedIds:[],action:d,skippedReason:`no-candidates`};let r=Ot({sessions:n,currentSessionId:a,cutoffDays:u,now:t});if(r.length===0)return p(t),{completedIds:[],failedIds:[],action:d,skippedReason:`no-candidates`};_.current=!0,g(!0);try{let e=new Map(n.map(e=>[e.id,e])),t=[],i=[];for(let n of r){let r=e.get(n),a=r?ee(r):null;if(!a){i.push(n);continue}try{d===`archive`?await m.updateSession(n,{time:{archived:Date.now()}},a):await m.deleteSession(n,a),t.push(n)}catch{i.push(n)}}return d===`archive`?w.getState().archiveSessions(t):w.getState().removeSessions(t),{completedIds:t,failedIds:i,action:d}}finally{_.current=!1,g(!1),p(Date.now())}},[u,l,f,a,o,d,p]);return Y.useEffect(()=>{i&&r&&(!l||u<=0||o||!c||s.length===0||f&&Date.now()-f<Dt||y())},[u,l,f,r,i,c,s.length,o,y]),{candidates:v,isRunning:h,runCleanup:y,keepRecentCount:Et,action:d}};export{Ee as A,Oe as B,J as C,rt as D,it as E,Te as F,We as G,Le as H,Ce as I,he as J,pe as K,we as L,He as M,Ue as N,je as O,De as P,ke as R,nt as S,$e as T,Re as U,ze as V,Be as W,ot as _,_t as a,G as b,ft as c,vt as d,mt as f,at as g,st as h,bt as i,Ve as j,Se as k,yt as l,Z as m,St as n,ut as o,lt as p,me as q,wt as r,pt as s,kt as t,ht as u,et as v,Ze as w,tt as x,Qe as y,Ae as z};
|
package/dist/assets/{useWorkerHighlightedLines-B4w2EJ5y.js → useWorkerHighlightedLines-BCqkyru3.js}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{o as e}from"./rolldown-runtime-C0FnF6B9.js";import{_ as t}from"./useUIStore-5agS8bsW.js";import{$t as n,kn as r,xn as i}from"./persistence-D1lIuyqO.js";import{nt as a,rt as o}from"./vendor-base-ui-CnHfUmDN.js";import{a as s,n as c}from"./vendor-aparajita-capacitor-secure-storage-CjQdwfjS.js";import{n as l}from"./vendor-react-DLPElpoQ.js";import{n as u}from"./clipboard-BnElHSnO.js";import{jo as d}from"./useMobileNavigationStore-BNXbEV2M.js";import{t as f}from"./utils-BxJEIWv5.js";import{n as p}from"./Icon-DiIuWOuC.js";import{t as m}from"./button-DaAoVF4X.js";import{i as h,n as g,t as _}from"./tooltip-BLugzWq-.js";import{n as v}from"./useThemeSystem-DMzWVJaW.js";import{c as y,n as b,o as x,r as S,s as C}from"./markdownTheme-D-aLQZaM.js";import{i as w}from"./appThemeRegistry-CCk0bHI-.js";import{d as T,n as E,t as D,u as ee}from"./markdown-worker-BDyY0vt6.js";import{t as te}from"./vendor-tanstack-react-virtual-tlDgH6PG.js";var O=e(o(),1),k=l(),A=a(),ne=`w-[min(30rem,calc(100cqw-1rem))] min-w-[280px] max-w-full overflow-hidden rounded-xl shadow-[inset_0_1px_0_0_rgba(255,255,255,0.8),inset_0_0_0_1px_rgba(0,0,0,0.04),0_0_0_1px_rgba(0,0,0,0.10),0_1px_2px_-0.5px_rgba(0,0,0,0.08),0_4px_8px_-2px_rgba(0,0,0,0.08),0_12px_20px_-4px_rgba(0,0,0,0.08)] dark:shadow-[inset_0_1px_0_0_rgba(255,255,255,0.12),inset_0_0_0_1px_rgba(255,255,255,0.08),0_0_0_1px_rgba(0,0,0,0.36),0_1px_1px_-0.5px_rgba(0,0,0,0.22),0_3px_3px_-1.5px_rgba(0,0,0,0.20),0_6px_6px_-3px_rgba(0,0,0,0.16)]`,j={maxWidth:`min(28rem, calc(100cqw - 4ch))`,backgroundColor:`var(--surface-elevated)`,color:`var(--surface-elevated-foreground)`},M=`flex items-center justify-between gap-3 border-b border-[var(--surface-subtle)] px-3 py-2.5`,N=`text-xs font-medium leading-4 text-foreground md:text-[0.8125rem] md:leading-5`,re=`text-xs tabular-nums leading-4 text-muted-foreground md:text-[0.8125rem] md:leading-5`,P=`m-0 list-none divide-y divide-[var(--surface-subtle)] p-0`,F=`${P} max-h-[min(22rem,50vh)] overflow-y-auto`,ie=`${P} w-full`,ae={className:`p-0 rounded-none`,maxHeightClass:`max-h-[46vh]`,disableHorizontal:!0},I=`px-2.5 py-1.5 text-xs leading-4 md:py-2 md:text-[0.8125rem] md:leading-5`,oe=`flex min-w-0 items-center gap-1 text-xs leading-4 text-muted-foreground md:gap-1.5 md:text-[0.8125rem] md:leading-5`,se=`min-w-0 truncate text-xs leading-4 text-foreground md:text-[0.8125rem] md:leading-5`,ce=`inline-flex shrink-0 items-center gap-1 text-xs leading-4 tabular-nums text-muted-foreground md:text-[0.8125rem] md:leading-5`,le=`h-3 w-3 shrink-0 md:h-3.5 md:w-3.5`,ue={in_progress:`text-foreground`,pending:`text-foreground`,completed:`text-muted-foreground line-through`,cancelled:`text-muted-foreground line-through`},L={in_progress:`chat.statusRow.todo.status.inProgress`,pending:`chat.statusRow.todo.status.pending`,completed:`chat.statusRow.todo.status.completed`,cancelled:`chat.statusRow.todo.status.cancelled`},R=e=>{let t=(0,k.c)(26),{todo:n,isActive:r,activeRef:i}=e,{t:a}=u(),o=z.has(n.status)?n.status:`pending`,s=L[o],c;t[0]!==a||t[1]!==s?(c=a(s),t[0]=a,t[1]=s,t[2]=c):c=t[2];let l=c,d;t[3]===o?d=t[4]:(d=o===`in_progress`?(0,A.jsx)(p,{name:`record-circle`,className:`h-3.5 w-3.5 text-[var(--status-info)]`,"aria-hidden":`true`}):o===`completed`?(0,A.jsx)(p,{name:`checkbox-circle`,className:`h-3.5 w-3.5 text-[var(--status-success)]`,"aria-hidden":`true`}):(0,A.jsx)(p,{name:`time`,className:`h-3.5 w-3.5 text-muted-foreground`,"aria-hidden":`true`}),t[3]=o,t[4]=d);let m=d,v=r?`step`:void 0,y=r&&`bg-[var(--surface-muted)] before:absolute before:inset-y-2 before:left-0 before:w-0.5 before:rounded-full before:bg-[var(--status-info)]`,b;t[5]===y?b=t[6]:(b=f(`group relative grid min-w-0 grid-cols-[1rem_minmax(0,1fr)] items-start gap-2.5`,I,y),t[5]=y,t[6]=b);let x;t[7]!==m||t[8]!==l?(x=(0,A.jsx)(h,{asChild:!0,children:(0,A.jsx)(`span`,{className:`flex size-4 items-center justify-center`,"aria-label":l,children:m})}),t[7]=m,t[8]=l,t[9]=x):x=t[9];let S;t[10]===l?S=t[11]:(S=(0,A.jsx)(g,{side:`left`,sideOffset:6,children:l}),t[10]=l,t[11]=S);let C;t[12]!==x||t[13]!==S?(C=(0,A.jsxs)(_,{children:[x,S]}),t[12]=x,t[13]=S,t[14]=C):C=t[14];let w=ue[o],T;t[15]===w?T=t[16]:(T=f(`block whitespace-normal break-words`,w),t[15]=w,t[16]=T);let E;t[17]!==T||t[18]!==n.content?(E=(0,A.jsx)(`span`,{className:`min-w-0 flex-1`,children:(0,A.jsx)(`span`,{className:T,children:n.content})}),t[17]=T,t[18]=n.content,t[19]=E):E=t[19];let D;return t[20]!==i||t[21]!==E||t[22]!==v||t[23]!==b||t[24]!==C?(D=(0,A.jsxs)(`li`,{ref:i,"aria-current":v,className:b,children:[C,E]}),t[20]=i,t[21]=E,t[22]=v,t[23]=b,t[24]=C,t[25]=D):D=t[25],D},z=new Set([`in_progress`,`pending`,`completed`,`cancelled`]),B=`image/png`,V=s(`OpenChamberMedia`),H=e=>{let t=e.toLowerCase().split(`;`)[0]?.trim()||B;if(t===`image/jpeg`||t===`image/jpg`)return`jpg`;if(t===`image/webp`)return`webp`;if(t===`image/gif`)return`gif`;if(t===`image/svg+xml`)return`svg`;if(t===`image/png`)return`png`;let n=t.split(`/`)[1];return n&&/^[a-z0-9.+-]+$/i.test(n)?n:`png`},U=(e,t)=>{let n=`image.${H(t)}`,r=(((e||``).trim()||n).split(/[\\/]/).pop()||n).replace(/[^\w.\- ()[\]]+/g,`_`).replace(/^\.+/,``);return r?/\.[a-z0-9]{1,8}$/i.test(r)?r:`${r}.${H(t)}`:n},W=e=>new Promise((t,n)=>{let r=new FileReader;r.onload=()=>{if(typeof r.result==`string`){t(r.result);return}n(Error(`Failed to encode image`))},r.onerror=()=>n(r.error??Error(`Failed to encode image`)),r.readAsDataURL(e)}),de=async e=>{let t=await W(e),n=t.indexOf(`,`);return n>=0?t.slice(n+1):t},fe=(e,t)=>{let n=URL.createObjectURL(e),r=document.createElement(`a`);r.href=n,r.download=t,document.body.appendChild(r),r.click(),document.body.removeChild(r),window.setTimeout(()=>URL.revokeObjectURL(n),1e3)},G=async(e,t)=>{let n=await fetch(e,{signal:t,cache:`no-store`});if(!n.ok)throw Error(`Image fetch failed (${n.status})`);return n.blob()},pe=async(e,t=B)=>{if(!e.naturalWidth||!e.naturalHeight)return null;let n=e.currentSrc||e.src;if(n&&(/^(?:blob:|data:|openchamber-asset:)/i.test(n)||/^https?:/i.test(n)||/^\/api(?=\/|[?#]|$)/.test(n)))try{let e=await G(n);if(e.size>0)return e}catch{}try{let n=document.createElement(`canvas`);n.width=e.naturalWidth,n.height=e.naturalHeight;let r=n.getContext(`2d`);if(!r)return null;r.drawImage(e,0,0);let i=t.startsWith(`image/`)?t:B,a=await new Promise(e=>{n.toBlob(t=>e(t),i===`image/jpg`?`image/jpeg`:i)});return a&&a.size>0?a:null}catch{return null}},me=async(e,t)=>{let n=``;try{return n=await S(e,t??new AbortController().signal),await G(n,t)}finally{n&&C(n)}},he=async(e,t)=>{let n=e.effectiveDirectory??``,i=null;e.prefetchedBlob&&e.prefetchedBlob.size>0&&(i=e.prefetchedBlob);let a=e.displayUrl?.trim();if(!i&&a)try{i=await G(a,t)}catch{i=null}if(!i){let a=e.sourceUrl.trim();if(!a)throw Error(`Image source is empty`);if(/^(?:data|blob):/i.test(a)||/^https?:/i.test(a)||/^\/api(?=\/|[?#]|$)/.test(a))i=await G(a,t);else{let e=y(a,n);if(x(e))try{i=await me(e.path,t)}catch{let n=await r(`/api/fs/raw`,{method:`GET`,cache:`no-store`,query:{path:e.path},signal:t});if(!n.ok)throw Error(`Image source request failed with status ${n.status}`);i=await n.blob()}else i=await G(e.source,t)}}if(!i||i.size<=0)throw Error(`Image is empty`);let o=(e.mimeType||(i.type&&i.type.startsWith(`image/`)?i.type:``)||B).split(`;`)[0].trim()||B;return{blob:i,filename:U(e.filename,o),mimeType:o}},ge=()=>!d()||c===void 0?!1:c.isPluginAvailable(`OpenChamberMedia`),_e=async(e,t)=>{let{blob:r,filename:a,mimeType:o}=await he(e,t);if(ge()){let e=await de(r);return await V.saveImage({dataBase64:e,mimeType:o,filename:a}),`saved`}if(n()){let e=i()?.vscode;if(e?.saveImage){let t=await W(r);return await e.saveImage({fileName:a,dataUrl:t}),`saved`}}return fe(r,a),`downloaded`},ve=e=>e.replace(/&/g,`&`).replace(/</g,`<`).replace(/>/g,`>`).replace(/"/g,`"`).replace(/'/g,`'`),ye=e=>e?Object.entries(e).map(([e,t])=>t==null?``:`${e.startsWith(`--`)?e:e.replace(/[A-Z]/g,e=>`-${e.toLowerCase()}`)}:${typeof t==`number`?`${t}px`:t};`).join(``):``,K=(e,t,n)=>{let r=e.querySelector(`pre`);r&&(r.style.margin=`0`,r.style.background=`transparent`,r.style.whiteSpace=t?`pre-wrap`:`pre`,t&&(r.style.wordBreak=`break-word`,r.style.overflowWrap=`break-word`));let i=e.querySelector(`code`);if(i){let e=ye(n);e&&i.setAttribute(`style`,`${i.getAttribute(`style`)??``}${e}`)}},be=e=>`<pre><code>${ve(e)}</code></pre>`,xe=e=>{let t=(0,k.c)(21),{code:n,language:r,className:i,style:a,codeStyle:o,wrap:s}=e,c=s!==void 0&&s,{currentTheme:l}=v(),u=O.useRef(null),d;t[0]===l?d=t[1]:(d=b(l),t[0]=l,t[1]=d);let p=d,m,h;t[2]!==n||t[3]!==o||t[4]!==c?(m=()=>{let e=u.current;e&&(e.innerHTML=be(n),K(e,c,o))},h=[n,c,o],t[2]=n,t[3]=o,t[4]=c,t[5]=m,t[6]=h):(m=t[5],h=t[6]),O.useLayoutEffect(m,h);let g,_;t[7]!==n||t[8]!==o||t[9]!==r||t[10]!==c?(g=()=>{let e=u.current;if(!e)return;let t=!0,i=new AbortController;return D(n,(r||`text`).toLowerCase(),{signal:i.signal,priority:`visible`}).then(n=>{!t||!e||!n||(e.innerHTML=n,K(e,c,o))}),()=>{t=!1,i.abort()}},_=[n,r,c,o],t[7]=n,t[8]=o,t[9]=r,t[10]=c,t[11]=g,t[12]=_):(g=t[11],_=t[12]),O.useEffect(g,_);let y;t[13]===i?y=t[14]:(y=f(`typography-code`,i),t[13]=i,t[14]=y);let x=p,S;t[15]!==a||t[16]!==x?(S={...x,...a},t[15]=a,t[16]=x,t[17]=S):S=t[17];let C;return t[18]!==y||t[19]!==S?(C=(0,A.jsx)(`div`,{ref:u,className:y,style:S}),t[18]=y,t[19]=S,t[20]=C):C=t[20],C},Se=e=>{let t=e.replace(/^<file>\s*\n?/,``).replace(/\n?<\/file>\s*$/,``);return t=t.replace(/^\s*\d{5}\|\s?/gm,``),t.trim()},Ce=(e,t=``)=>{if(typeof e==`string`)return e;if(e==null)return t;if(typeof e==`number`||typeof e==`boolean`||typeof e==`bigint`)return String(e);try{return JSON.stringify(e)}catch{return t}},we=e=>e?e.includes(`<diagnostics`)||e.includes(`<file_diagnostics>`)||e.includes(`LSP errors detected`)||e.includes(`This file has errors`):!1,Te=e=>e?e.replace(/\n{0,2}LSP errors detected[\s\S]*?<diagnostics[^>]*>[\s\S]*?<\/diagnostics>/g,``).replace(/\n{0,2}This file has errors[\s\S]*?<\/file_diagnostics>/g,``).replace(/<diagnostics[^>]*>[\s\S]*?<\/diagnostics>/g,``).replace(/<file_diagnostics>[\s\S]*?<\/file_diagnostics>/g,``).trim():``,Ee=(e,t)=>!e||typeof e!=`object`?String(e):T(e,t||``),q=e=>{if(typeof e==`string`){let t=e.trim();return t.length>0?t:void 0}if(e&&typeof e==`object`){let t=e.patch;if(typeof t==`string`){let e=t.trim();return e.length>0?e:void 0}}},De=e=>{if(!e||typeof e!=`object`)return;let t=q(e.patch)??q(e.diff);if(t)return t;let n=Array.isArray(e.files)?e.files:[];for(let e of n){if(!e||typeof e!=`object`)continue;let t=q(e.patch)??q(e.diff);if(t)return t}},Oe=e=>{if(!e||typeof e!=`string`)return{data:null,isJson:!1};let t=e.trim();if(!t.startsWith(`{`)&&!t.startsWith(`[`)||!t.endsWith(`}`)&&!t.endsWith(`]`)||t.length<2)return{data:null,isJson:!1};try{let e=JSON.parse(t);return typeof e==`object`&&e?{data:e,isJson:!0}:{data:null,isJson:!1}}catch{return{data:null,isJson:!1}}},ke=(e,t,n)=>{let r=Se(e);if((t===`edit`||t===`multiedit`||t===`write`||t===`apply_patch`)&&we(r)&&(r=Te(r)),(t===`edit`||t===`multiedit`||t===`apply_patch`)&&r.trim().length===0){let e=De(n);if(e)return e}return r},Ae=e=>{let t=e.match(/<type>(file|directory)<\/type>/i)?.[1]?.toLowerCase()??`unknown`,n=(e.match(/<content>([\s\S]*?)<\/content>/i)?.[1]??e).replace(/\r\n/g,`
|
|
1
|
+
import{o as e}from"./rolldown-runtime-C0FnF6B9.js";import{_ as t}from"./useUIStore-5agS8bsW.js";import{$t as n,kn as r,xn as i}from"./persistence-D1lIuyqO.js";import{nt as a,rt as o}from"./vendor-base-ui-CnHfUmDN.js";import{n as s}from"./platform-G8Cxe5wN.js";import{a as c,n as l}from"./vendor-aparajita-capacitor-secure-storage-CjQdwfjS.js";import{n as u}from"./vendor-react-DLPElpoQ.js";import{n as d}from"./clipboard-ByPKHEt8.js";import{t as f}from"./utils-BxJEIWv5.js";import{n as p}from"./Icon-DiIuWOuC.js";import{t as m}from"./button-DaAoVF4X.js";import{i as h,n as g,t as _}from"./tooltip-BLugzWq-.js";import{n as v}from"./useThemeSystem-DMzWVJaW.js";import{c as y,n as b,o as x,r as S,s as C}from"./markdownTheme-D-aLQZaM.js";import{i as w}from"./appThemeRegistry-CnlbpoIa.js";import{d as T,n as E,t as D,u as ee}from"./markdown-worker-BDyY0vt6.js";import{t as te}from"./vendor-tanstack-react-virtual-tlDgH6PG.js";var O=e(o(),1),k=u(),A=a(),ne=`w-[min(30rem,calc(100cqw-1rem))] min-w-[280px] max-w-full overflow-hidden rounded-xl shadow-[inset_0_1px_0_0_rgba(255,255,255,0.8),inset_0_0_0_1px_rgba(0,0,0,0.04),0_0_0_1px_rgba(0,0,0,0.10),0_1px_2px_-0.5px_rgba(0,0,0,0.08),0_4px_8px_-2px_rgba(0,0,0,0.08),0_12px_20px_-4px_rgba(0,0,0,0.08)] dark:shadow-[inset_0_1px_0_0_rgba(255,255,255,0.12),inset_0_0_0_1px_rgba(255,255,255,0.08),0_0_0_1px_rgba(0,0,0,0.36),0_1px_1px_-0.5px_rgba(0,0,0,0.22),0_3px_3px_-1.5px_rgba(0,0,0,0.20),0_6px_6px_-3px_rgba(0,0,0,0.16)]`,j={maxWidth:`min(28rem, calc(100cqw - 4ch))`,backgroundColor:`var(--surface-elevated)`,color:`var(--surface-elevated-foreground)`},M=`flex items-center justify-between gap-3 border-b border-[var(--surface-subtle)] px-3 py-2.5`,N=`text-xs font-medium leading-4 text-foreground md:text-[0.8125rem] md:leading-5`,re=`text-xs tabular-nums leading-4 text-muted-foreground md:text-[0.8125rem] md:leading-5`,P=`m-0 list-none divide-y divide-[var(--surface-subtle)] p-0`,F=`${P} max-h-[min(22rem,50vh)] overflow-y-auto`,ie=`${P} w-full`,ae={className:`p-0 rounded-none`,maxHeightClass:`max-h-[46vh]`,disableHorizontal:!0},I=`px-2.5 py-1.5 text-xs leading-4 md:py-2 md:text-[0.8125rem] md:leading-5`,oe=`flex min-w-0 items-center gap-1 text-xs leading-4 text-muted-foreground md:gap-1.5 md:text-[0.8125rem] md:leading-5`,se=`min-w-0 truncate text-xs leading-4 text-foreground md:text-[0.8125rem] md:leading-5`,ce=`inline-flex shrink-0 items-center gap-1 text-xs leading-4 tabular-nums text-muted-foreground md:text-[0.8125rem] md:leading-5`,le=`h-3 w-3 shrink-0 md:h-3.5 md:w-3.5`,ue={in_progress:`text-foreground`,pending:`text-foreground`,completed:`text-muted-foreground line-through`,cancelled:`text-muted-foreground line-through`},L={in_progress:`chat.statusRow.todo.status.inProgress`,pending:`chat.statusRow.todo.status.pending`,completed:`chat.statusRow.todo.status.completed`,cancelled:`chat.statusRow.todo.status.cancelled`},R=e=>{let t=(0,k.c)(26),{todo:n,isActive:r,activeRef:i}=e,{t:a}=d(),o=z.has(n.status)?n.status:`pending`,s=L[o],c;t[0]!==a||t[1]!==s?(c=a(s),t[0]=a,t[1]=s,t[2]=c):c=t[2];let l=c,u;t[3]===o?u=t[4]:(u=o===`in_progress`?(0,A.jsx)(p,{name:`record-circle`,className:`h-3.5 w-3.5 text-[var(--status-info)]`,"aria-hidden":`true`}):o===`completed`?(0,A.jsx)(p,{name:`checkbox-circle`,className:`h-3.5 w-3.5 text-[var(--status-success)]`,"aria-hidden":`true`}):(0,A.jsx)(p,{name:`time`,className:`h-3.5 w-3.5 text-muted-foreground`,"aria-hidden":`true`}),t[3]=o,t[4]=u);let m=u,v=r?`step`:void 0,y=r&&`bg-[var(--surface-muted)] before:absolute before:inset-y-2 before:left-0 before:w-0.5 before:rounded-full before:bg-[var(--status-info)]`,b;t[5]===y?b=t[6]:(b=f(`group relative grid min-w-0 grid-cols-[1rem_minmax(0,1fr)] items-start gap-2.5`,I,y),t[5]=y,t[6]=b);let x;t[7]!==m||t[8]!==l?(x=(0,A.jsx)(h,{asChild:!0,children:(0,A.jsx)(`span`,{className:`flex size-4 items-center justify-center`,"aria-label":l,children:m})}),t[7]=m,t[8]=l,t[9]=x):x=t[9];let S;t[10]===l?S=t[11]:(S=(0,A.jsx)(g,{side:`left`,sideOffset:6,children:l}),t[10]=l,t[11]=S);let C;t[12]!==x||t[13]!==S?(C=(0,A.jsxs)(_,{children:[x,S]}),t[12]=x,t[13]=S,t[14]=C):C=t[14];let w=ue[o],T;t[15]===w?T=t[16]:(T=f(`block whitespace-normal break-words`,w),t[15]=w,t[16]=T);let E;t[17]!==T||t[18]!==n.content?(E=(0,A.jsx)(`span`,{className:`min-w-0 flex-1`,children:(0,A.jsx)(`span`,{className:T,children:n.content})}),t[17]=T,t[18]=n.content,t[19]=E):E=t[19];let D;return t[20]!==i||t[21]!==E||t[22]!==v||t[23]!==b||t[24]!==C?(D=(0,A.jsxs)(`li`,{ref:i,"aria-current":v,className:b,children:[C,E]}),t[20]=i,t[21]=E,t[22]=v,t[23]=b,t[24]=C,t[25]=D):D=t[25],D},z=new Set([`in_progress`,`pending`,`completed`,`cancelled`]),B=`image/png`,V=c(`OpenChamberMedia`),H=e=>{let t=e.toLowerCase().split(`;`)[0]?.trim()||B;if(t===`image/jpeg`||t===`image/jpg`)return`jpg`;if(t===`image/webp`)return`webp`;if(t===`image/gif`)return`gif`;if(t===`image/svg+xml`)return`svg`;if(t===`image/png`)return`png`;let n=t.split(`/`)[1];return n&&/^[a-z0-9.+-]+$/i.test(n)?n:`png`},U=(e,t)=>{let n=`image.${H(t)}`,r=(((e||``).trim()||n).split(/[\\/]/).pop()||n).replace(/[^\w.\- ()[\]]+/g,`_`).replace(/^\.+/,``);return r?/\.[a-z0-9]{1,8}$/i.test(r)?r:`${r}.${H(t)}`:n},W=e=>new Promise((t,n)=>{let r=new FileReader;r.onload=()=>{if(typeof r.result==`string`){t(r.result);return}n(Error(`Failed to encode image`))},r.onerror=()=>n(r.error??Error(`Failed to encode image`)),r.readAsDataURL(e)}),de=async e=>{let t=await W(e),n=t.indexOf(`,`);return n>=0?t.slice(n+1):t},fe=(e,t)=>{let n=URL.createObjectURL(e),r=document.createElement(`a`);r.href=n,r.download=t,document.body.appendChild(r),r.click(),document.body.removeChild(r),window.setTimeout(()=>URL.revokeObjectURL(n),1e3)},G=async(e,t)=>{let n=await fetch(e,{signal:t,cache:`no-store`});if(!n.ok)throw Error(`Image fetch failed (${n.status})`);return n.blob()},pe=async(e,t=B)=>{if(!e.naturalWidth||!e.naturalHeight)return null;let n=e.currentSrc||e.src;if(n&&(/^(?:blob:|data:|openchamber-asset:)/i.test(n)||/^https?:/i.test(n)||/^\/api(?=\/|[?#]|$)/.test(n)))try{let e=await G(n);if(e.size>0)return e}catch{}try{let n=document.createElement(`canvas`);n.width=e.naturalWidth,n.height=e.naturalHeight;let r=n.getContext(`2d`);if(!r)return null;r.drawImage(e,0,0);let i=t.startsWith(`image/`)?t:B,a=await new Promise(e=>{n.toBlob(t=>e(t),i===`image/jpg`?`image/jpeg`:i)});return a&&a.size>0?a:null}catch{return null}},me=async(e,t)=>{let n=``;try{return n=await S(e,t??new AbortController().signal),await G(n,t)}finally{n&&C(n)}},he=async(e,t)=>{let n=e.effectiveDirectory??``,i=null;e.prefetchedBlob&&e.prefetchedBlob.size>0&&(i=e.prefetchedBlob);let a=e.displayUrl?.trim();if(!i&&a)try{i=await G(a,t)}catch{i=null}if(!i){let a=e.sourceUrl.trim();if(!a)throw Error(`Image source is empty`);if(/^(?:data|blob):/i.test(a)||/^https?:/i.test(a)||/^\/api(?=\/|[?#]|$)/.test(a))i=await G(a,t);else{let e=y(a,n);if(x(e))try{i=await me(e.path,t)}catch{let n=await r(`/api/fs/raw`,{method:`GET`,cache:`no-store`,query:{path:e.path},signal:t});if(!n.ok)throw Error(`Image source request failed with status ${n.status}`);i=await n.blob()}else i=await G(e.source,t)}}if(!i||i.size<=0)throw Error(`Image is empty`);let o=(e.mimeType||(i.type&&i.type.startsWith(`image/`)?i.type:``)||B).split(`;`)[0].trim()||B;return{blob:i,filename:U(e.filename,o),mimeType:o}},ge=()=>!s()||l===void 0?!1:l.isPluginAvailable(`OpenChamberMedia`),_e=async(e,t)=>{let{blob:r,filename:a,mimeType:o}=await he(e,t);if(ge()){let e=await de(r);return await V.saveImage({dataBase64:e,mimeType:o,filename:a}),`saved`}if(n()){let e=i()?.vscode;if(e?.saveImage){let t=await W(r);return await e.saveImage({fileName:a,dataUrl:t}),`saved`}}return fe(r,a),`downloaded`},ve=e=>e.replace(/&/g,`&`).replace(/</g,`<`).replace(/>/g,`>`).replace(/"/g,`"`).replace(/'/g,`'`),ye=e=>e?Object.entries(e).map(([e,t])=>t==null?``:`${e.startsWith(`--`)?e:e.replace(/[A-Z]/g,e=>`-${e.toLowerCase()}`)}:${typeof t==`number`?`${t}px`:t};`).join(``):``,K=(e,t,n)=>{let r=e.querySelector(`pre`);r&&(r.style.margin=`0`,r.style.background=`transparent`,r.style.whiteSpace=t?`pre-wrap`:`pre`,t&&(r.style.wordBreak=`break-word`,r.style.overflowWrap=`break-word`));let i=e.querySelector(`code`);if(i){let e=ye(n);e&&i.setAttribute(`style`,`${i.getAttribute(`style`)??``}${e}`)}},be=e=>`<pre><code>${ve(e)}</code></pre>`,xe=e=>{let t=(0,k.c)(21),{code:n,language:r,className:i,style:a,codeStyle:o,wrap:s}=e,c=s!==void 0&&s,{currentTheme:l}=v(),u=O.useRef(null),d;t[0]===l?d=t[1]:(d=b(l),t[0]=l,t[1]=d);let p=d,m,h;t[2]!==n||t[3]!==o||t[4]!==c?(m=()=>{let e=u.current;e&&(e.innerHTML=be(n),K(e,c,o))},h=[n,c,o],t[2]=n,t[3]=o,t[4]=c,t[5]=m,t[6]=h):(m=t[5],h=t[6]),O.useLayoutEffect(m,h);let g,_;t[7]!==n||t[8]!==o||t[9]!==r||t[10]!==c?(g=()=>{let e=u.current;if(!e)return;let t=!0,i=new AbortController;return D(n,(r||`text`).toLowerCase(),{signal:i.signal,priority:`visible`}).then(n=>{!t||!e||!n||(e.innerHTML=n,K(e,c,o))}),()=>{t=!1,i.abort()}},_=[n,r,c,o],t[7]=n,t[8]=o,t[9]=r,t[10]=c,t[11]=g,t[12]=_):(g=t[11],_=t[12]),O.useEffect(g,_);let y;t[13]===i?y=t[14]:(y=f(`typography-code`,i),t[13]=i,t[14]=y);let x=p,S;t[15]!==a||t[16]!==x?(S={...x,...a},t[15]=a,t[16]=x,t[17]=S):S=t[17];let C;return t[18]!==y||t[19]!==S?(C=(0,A.jsx)(`div`,{ref:u,className:y,style:S}),t[18]=y,t[19]=S,t[20]=C):C=t[20],C},Se=e=>{let t=e.replace(/^<file>\s*\n?/,``).replace(/\n?<\/file>\s*$/,``);return t=t.replace(/^\s*\d{5}\|\s?/gm,``),t.trim()},Ce=(e,t=``)=>{if(typeof e==`string`)return e;if(e==null)return t;if(typeof e==`number`||typeof e==`boolean`||typeof e==`bigint`)return String(e);try{return JSON.stringify(e)}catch{return t}},we=e=>e?e.includes(`<diagnostics`)||e.includes(`<file_diagnostics>`)||e.includes(`LSP errors detected`)||e.includes(`This file has errors`):!1,Te=e=>e?e.replace(/\n{0,2}LSP errors detected[\s\S]*?<diagnostics[^>]*>[\s\S]*?<\/diagnostics>/g,``).replace(/\n{0,2}This file has errors[\s\S]*?<\/file_diagnostics>/g,``).replace(/<diagnostics[^>]*>[\s\S]*?<\/diagnostics>/g,``).replace(/<file_diagnostics>[\s\S]*?<\/file_diagnostics>/g,``).trim():``,Ee=(e,t)=>!e||typeof e!=`object`?String(e):T(e,t||``),q=e=>{if(typeof e==`string`){let t=e.trim();return t.length>0?t:void 0}if(e&&typeof e==`object`){let t=e.patch;if(typeof t==`string`){let e=t.trim();return e.length>0?e:void 0}}},De=e=>{if(!e||typeof e!=`object`)return;let t=q(e.patch)??q(e.diff);if(t)return t;let n=Array.isArray(e.files)?e.files:[];for(let e of n){if(!e||typeof e!=`object`)continue;let t=q(e.patch)??q(e.diff);if(t)return t}},Oe=e=>{if(!e||typeof e!=`string`)return{data:null,isJson:!1};let t=e.trim();if(!t.startsWith(`{`)&&!t.startsWith(`[`)||!t.endsWith(`}`)&&!t.endsWith(`]`)||t.length<2)return{data:null,isJson:!1};try{let e=JSON.parse(t);return typeof e==`object`&&e?{data:e,isJson:!0}:{data:null,isJson:!1}}catch{return{data:null,isJson:!1}}},ke=(e,t,n)=>{let r=Se(e);if((t===`edit`||t===`multiedit`||t===`write`||t===`apply_patch`)&&we(r)&&(r=Te(r)),(t===`edit`||t===`multiedit`||t===`apply_patch`)&&r.trim().length===0){let e=De(n);if(e)return e}return r},Ae=e=>{let t=e.match(/<type>(file|directory)<\/type>/i)?.[1]?.toLowerCase()??`unknown`,n=(e.match(/<content>([\s\S]*?)<\/content>/i)?.[1]??e).replace(/\r\n/g,`
|
|
2
2
|
`).split(`
|
|
3
3
|
`),r=e=>/\(\s*File has more lines\..*offset.*\)/i.test(e.trim());return{type:t,lines:n.map(e=>{let n=e.trim(),i=n.startsWith(`(`)&&n.endsWith(`)`)||r(n);if(t!==`directory`){let t=e.match(/^(\d+):\s?(.*)$/);if(t){let e=t[2],n=e.trim(),i=n.startsWith(`(`)&&n.endsWith(`)`)||r(n);return{lineNumber:i?null:Number(t[1]),text:e,isInfo:i}}}return{lineNumber:null,text:e,isInfo:i}}).filter((e,t,n)=>{if(e.text.trim().length>0)return!0;let r=n[t-1],i=n[t+1],a=!!(r?.isInfo||i?.isInfo),o=e.lineNumber!==null;return!(a&&o)})}},je=(e,n)=>{try{let r=e.trim().split(`
|
|
4
4
|
`).filter(Boolean);if(r.length===0)return null;let i=[];return r.forEach(e=>{let t=e.match(/^(\s*)(.+)$/);if(t){let[,e,n]=t,r=Math.floor(e.length/2),a=!n.endsWith(`/`);i.push({name:n.replace(/\/$/,``),depth:r,isFile:a})}}),(0,A.jsx)(`div`,{className:f(`w-full min-w-0 font-mono space-y-0.5`,n?.unstyled?null:`p-3 bg-muted/20 rounded-xl border border-border/30`),style:t.tool.popup,children:i.map((e,t)=>(0,A.jsx)(`div`,{className:`min-w-0`,style:{paddingLeft:`${e.depth*20}px`},children:e.isFile?(0,A.jsx)(`span`,{className:`text-foreground/90 block truncate`,children:e.name}):(0,A.jsxs)(`span`,{className:`font-semibold text-foreground block truncate`,children:[e.name,`/`]})},t))})}catch{return null}},Me={backgroundColor:`var(--status-info)`,opacity:.6},Ne=(e,n,r)=>{try{let i=e.trim().split(`
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var e={"settings.globalConfig.title":`全局配置`,"settings.globalConfig.description":`编辑 ~/.config/opencode 中当前生效的配置文件。`,"settings.globalConfig.actions.reload":`重新加载文件`,"settings.globalConfig.restartHint":`保存后重启 OpenCode,使配置变更生效。`,"settings.globalConfig.toast.loadFailed":`加载配置文件失败`,"settings.globalConfig.toast.saveFailed":`保存配置文件失败`,"settings.globalConfig.toast.saved":`配置已保存。重启 OpenCode 后生效。`,"settings.providers.page.openCodeGo.title":`OpenCode Go 用量跟踪`,"settings.providers.page.openCodeGo.description":`连接 OpenCode Go 控制面板以显示滚动、每周和每月配额。`,"settings.providers.page.openCodeGo.workspaceId":`工作区 ID`,"settings.providers.page.openCodeGo.authCookie":`身份验证 Cookie`,"settings.providers.page.openCodeGo.help":`从控制面板网址复制工作区 ID,并从浏览器开发者工具复制 auth Cookie。OpenChamber 绝不会扫描浏览器 Cookie 存储。`,"settings.providers.page.openCodeGo.save":`保存并验证`,"settings.providers.page.openCodeGo.replace":`替换`,"settings.providers.page.openCodeGo.validate":`验证`,"settings.providers.page.openCodeGo.delete":`删除`,"settings.providers.page.quotaCredentials.saved":`已保存 {provider} 凭据。`,"settings.providers.page.openCodeGo.saveFailed":`无法验证 OpenCode Go 凭据。`,"settings.providers.page.openCodeGo.valid":`OpenCode Go 凭据有效。`,"settings.providers.page.openCodeGo.invalid":`OpenCode Go 凭据无效或已过期。`,"settings.providers.page.openCodeGo.deleted":`已删除 OpenCode Go 凭据。`,"settings.providers.page.openCodeGo.deleteFailed":`无法删除 OpenCode Go 凭据。`,"settings.appearance.language.label":`语言`,"settings.appearance.language.description":`选择界面语言。`,"settings.appearance.language.select":`选择语言`,"settings.window.description":`OpenChamber 设置窗口。`,"settings.view.home.title":`设置`,"settings.view.home.description":`跳转到常用页面。`,"settings.view.home.cards.providers.title":`提供商`,"settings.view.home.cards.providers.description":`连接模型和凭据`,"settings.view.home.cards.agents.title":`Agent`,"settings.view.home.cards.agents.description":`提示词、工具、权限`,"settings.view.home.cards.skillsCatalog.title":`技能目录`,"settings.view.home.cards.skillsCatalog.description":`从目录安装技能`,"settings.view.home.cards.mcp.title":`MCP`,"settings.view.home.cards.mcp.description":`配置 MCP 服务器和连接`,"settings.view.home.cards.plugins.title":`插件`,"settings.view.home.cards.plugins.description":`管理 OpenCode 插件`,"settings.view.home.cards.usage.title":`用量`,"settings.view.home.cards.usage.description":`配额和花费可见性`,"settings.view.unavailable.title":`不可用`,"settings.view.unavailable.description":`此设置页面在当前运行环境中不可用。`,"settings.view.badge.beta":`测试版`,"settings.view.actions.reloadOpenCode":`重新加载 OpenCode`,"settings.view.actions.reloadOpenCodeTooltip":`重启 OpenCode 并重新加载其配置。`,"settings.view.actions.backToSettings":`返回设置`,"settings.view.actions.closeSettings":`关闭设置`,"settings.view.actions.openSectionList":`打开分组列表`,"settings.view.actions.closeSettingsWithShortcut":`关闭设置({shortcut}+,)`,"settings.view.actions.back":`返回`,"settings.view.actions.resizeNavigation":`调整设置导航宽度`,"settings.view.navigation.groups.connection":`连接`,"settings.view.navigation.groups.personalization":`个性化`,"settings.view.navigation.groups.workspace":`工作区`,"settings.view.navigation.groups.opencode":`OpenCode`,"settings.view.navigation.groups.content":`内容与自动化`,"settings.view.navigation.groups.system":`系统`,"settings.view.search.placeholder":`搜索设置`,"settings.view.search.aria":`搜索设置`,"settings.view.search.clear":`清除设置搜索`,"settings.view.search.noResults":`没有匹配的设置`,"settings.page.projects.title":`项目`,"settings.page.remoteInstances.title":`远程实例`,"settings.page.providers.title":`提供商`,"settings.page.usage.title":`用量`,"settings.page.agents.title":`Agent`,"settings.page.commands.title":`命令`,"settings.page.mcp.title":`MCP`,"settings.page.plugins.title":`插件`,"settings.page.skills.title":`技能`,"settings.page.skillsCatalog.title":`技能目录`,"settings.page.git.title":`Git`,"settings.page.appearance.title":`外观`,"settings.page.chat.title":`聊天`,"settings.page.shortcuts.title":`快捷键`,"settings.page.sessions.title":`会话`,"settings.page.summaryAI.title":`智能摘要`,"settings.page.magicPrompts.title":`魔法提示词`,"settings.page.notifications.title":`通知`,"settings.page.voice.title":`语音`,"settings.page.about.title":`关于`,"settings.page.snippets.title":`代码片段`,"settings.snippets.sidebar.title":`代码片段`,"settings.snippets.sidebar.total":`共 {count} 个`,"settings.snippets.sidebar.actions.create":`创建代码片段`,"settings.snippets.sidebar.actions.more":`{name} 的更多操作`,"settings.snippets.sidebar.toast.deleted":`代码片段已删除`,"settings.snippets.sidebar.toast.deleteFailed":`删除代码片段失败`,"settings.snippets.sidebar.dialog.deleteTitle":`删除代码片段?`,"settings.snippets.sidebar.dialog.deleteDescription":`这将永久删除 #{name}。`,"settings.snippets.page.empty.title":`选择代码片段`,"settings.snippets.page.empty.description":`从侧边栏选择代码片段进行编辑。`,"settings.snippets.page.title.new":`新建代码片段`,"settings.snippets.page.field.namePlaceholder":`snippet-name`,"settings.snippets.page.field.descriptionPlaceholder":`这个代码片段的作用`,"settings.snippets.page.field.aliases":`别名`,"settings.snippets.page.field.aliasesPlaceholder":`safe, careful`,"settings.snippets.page.field.content":`内容`,"settings.snippets.page.field.contentPlaceholder":`代码片段 Markdown...`,"settings.snippets.page.hint":`在提示词中使用 #name。支持别名和与 opencode-snippets 兼容的 prepend/append 块。`,"settings.snippets.page.toast.nameRequired":`代码片段名称为必填项`,"settings.snippets.page.toast.contentRequired":`代码片段内容为必填项`,"settings.snippets.page.toast.saveFailed":`保存代码片段失败`,"settings.snippets.page.toast.saved":`代码片段已保存`,"settings.magicPrompts.sidebar.title":`魔法提示词`,"settings.magicPrompts.sidebar.description":`选择要编辑的提示词模板。`,"settings.magicPrompts.sidebar.group.git":`Git`,"settings.magicPrompts.sidebar.group.github":`GitHub`,"settings.magicPrompts.sidebar.group.planning":`规划`,"settings.magicPrompts.sidebar.group.session":`会话`,"settings.magicPrompts.sidebar.item.gitCommitGenerate":`提交生成`,"settings.magicPrompts.sidebar.item.gitPrGenerate":`PR 生成`,"settings.magicPrompts.sidebar.item.gitConflictResolve":`合并/Rebase 冲突解决`,"settings.magicPrompts.sidebar.item.gitCherrypickConflictResolve":`Cherry-pick 冲突解决`,"settings.magicPrompts.sidebar.item.githubPrReview":`PR 审查`,"settings.magicPrompts.sidebar.item.githubIssueReview":`Issue 审查`,"settings.magicPrompts.sidebar.item.githubPrFailedChecksReview":`PR 失败检查审查`,"settings.magicPrompts.sidebar.item.githubPrCommentsReview":`PR 评论审查`,"settings.magicPrompts.sidebar.item.githubSinglePrCommentReview":`单条 PR 评论审查`,"settings.magicPrompts.sidebar.item.planTodo":`待办规划`,"settings.magicPrompts.sidebar.item.planImprove":`改进计划`,"settings.magicPrompts.sidebar.item.planImplement":`执行计划`,"settings.magicPrompts.sidebar.item.sessionSummary":`会话总结`,"settings.magicPrompts.sidebar.item.sessionWorkspaceReview":`工作区审查`,"settings.magicPrompts.sidebar.item.sessionExplore":`代码库导览`,"settings.magicPrompts.sidebar.item.sessionFeaturePlan":`功能规划`,"settings.magicPrompts.sidebar.item.sessionCraftGoal":`创建 Goal`,"settings.magicPrompts.page.group.sessionCraftGoal.title":`创建 Goal`,"settings.magicPrompts.page.group.sessionCraftGoal.description":`由 /craft-goal 斜杠命令使用的提示词:可见用户消息 + 隐藏说明。通过引导式探索将想法或任务转化为清晰且有证据可验证的 Goal。`,"settings.magicPrompts.sidebar.item.sessionCatchUp":`快速回顾`,"settings.magicPrompts.sidebar.item.sessionDebug":`调试`,"settings.magicPrompts.sidebar.item.sessionWeigh":`权衡方案`,"settings.magicPrompts.sidebar.item.sessionFusion":`融合`,"settings.remoteInstances.sidebar.title":`远程实例`,"settings.remoteInstances.sidebar.description":`通过导入链接或 SSH 连接其他 OpenChamber 服务器。`,"settings.remoteInstances.sidebar.empty":`暂无远程实例。可导入链接或添加 SSH 连接。`,"settings.remoteInstances.channel.link":`链接`,"settings.remoteInstances.channel.ssh":`SSH`,"settings.remoteInstances.sidebar.total":`总计 {count}`,"settings.remoteInstances.sidebar.newSshInstanceName":`新的 SSH 连接`,"settings.remoteInstances.sidebar.actions.addSshInstance":`添加 SSH 连接`,"settings.remoteInstances.sidebar.actions.connect":`连接`,"settings.remoteInstances.sidebar.actions.disconnect":`断开连接`,"settings.remoteInstances.sidebar.actions.retry":`重试`,"settings.remoteInstances.sidebar.actions.remove":`移除`,"settings.remoteInstances.sidebar.confirm.localPortInUseRetry":`本地端口已被占用。是否选择一个随机空闲本地端口并重试?`,"settings.remoteInstances.sidebar.toast.createFailed":`无法创建 SSH 连接`,"settings.remoteInstances.sidebar.toast.retriedWithRandomPort":`已使用随机本地端口重试`,"settings.remoteInstances.sidebar.toast.connectFailed":`连接实例失败`,"settings.remoteInstances.sidebar.toast.disconnectFailed":`断开实例连接失败`,"settings.remoteInstances.sidebar.toast.retryFailed":`重试连接失败`,"settings.remoteInstances.sidebar.toast.removeFailed":`移除实例失败`,"settings.remoteInstances.direct.sidebarTitle":`服务器链接`,"settings.remoteInstances.direct.sidebarDescription":`使用配对链接连接`,"settings.remoteInstances.direct.title":`其他 OpenChamber 服务器`,"settings.remoteInstances.direct.description":`此应用可切换到的服务器。从另一台服务器导入配对链接。`,"settings.remoteInstances.direct.import.description":`粘贴来自另一个 OpenChamber 服务器的连接链接。`,"settings.remoteInstances.direct.import.placeholder":`openchamber://connect?...`,"settings.remoteInstances.direct.import.action":`导入链接`,"settings.remoteInstances.direct.error.invalidConnectLink":`无效的 OpenChamber 连接链接。`,"settings.remoteInstances.direct.state.loading":`正在加载服务器...`,"settings.remoteInstances.direct.state.empty":`尚未导入其他服务器。`,"settings.remoteInstances.clientAuth.title":`连接到此服务器`,"settings.remoteInstances.clientAuth.description":`创建安全链接或令牌,让 OpenChamber Desktop 可以连接到此服务器。`,"settings.remoteInstances.clientAuth.field.labelPlaceholder":`实例名称 — 例如 家里的电脑`,"settings.remoteInstances.clientAuth.field.labelHint":`对面设备会用这个名字显示此服务器。`,"settings.remoteInstances.clientAuth.actions.create":`创建令牌`,"settings.remoteInstances.clientAuth.actions.pair":`创建链接`,"settings.remoteInstances.clientAuth.actions.revoke":`撤销`,"settings.remoteInstances.clientAuth.actions.clearRevoked":`清除已撤销`,"settings.remoteInstances.clientAuth.qrAlt":`OpenChamber connection QR code`,"settings.remoteInstances.clientAuth.qrEnlarge":`放大二维码`,"settings.remoteInstances.clientAuth.qrScanHint":`用另一台设备上的 OpenChamber 应用扫描。一次性使用且会过期。`,"settings.remoteInstances.clientAuth.qrDialogTitle":`扫码连接`,"settings.remoteInstances.clientAuth.actions.addDevice":`添加设备`,"settings.remoteInstances.clientAuth.actions.copied":`已复制`,"settings.remoteInstances.clientAuth.addDevice.transportLabel":`你会在哪里使用这台设备?`,"settings.remoteInstances.clientAuth.addDevice.subtitle":`创建一次性二维码,把另一台设备连接到此服务器。`,"settings.remoteInstances.clientAuth.addDevice.transport.local":`仅本机`,"settings.remoteInstances.clientAuth.addDevice.transport.localHint":`供同一台电脑上的应用使用。`,"settings.remoteInstances.clientAuth.addDevice.transport.lan":`仅家庭网络`,"settings.remoteInstances.clientAuth.addDevice.transport.lanHint":`通过 Wi-Fi 直接连接。离开此网络后无法使用。`,"settings.remoteInstances.clientAuth.addDevice.transport.relay":`任何地方`,"settings.remoteInstances.clientAuth.addDevice.transport.relayHint":`在家和外出都可用。外出时流量经由 OpenChamber Private Relay(端到端加密隧道)传输,无需配置。`,"settings.remoteInstances.clientAuth.addDevice.fallback.relay":`外出时也允许通过加密中继连接`,"settings.remoteInstances.clientAuth.addDevice.fallback.preferLocal":`在家时优先使用直接连接`,"settings.remoteInstances.clientAuth.addDevice.relayUrlLabel":`Relay 服务端`,"settings.remoteInstances.clientAuth.addDevice.relayUrlHint":`使用 OpenChamber 官方 Relay,或输入你自己的 ws:// 或 wss:// 地址。设备会保存二维码中的该地址。`,"settings.remoteInstances.clientAuth.addDevice.relayUrlDeployLink":`可部署自己的 Relay 服务。`,"settings.remoteInstances.clientAuth.addDevice.relayUrlLockedHint":`此服务器已通过 OPENCHAMBER_RELAY_URL 固定 Relay 地址。`,"settings.remoteInstances.clientAuth.addDevice.relayUrlInvalid":`请输入以 ws:// 或 wss:// 开头的有效 Relay 地址。`,"settings.remoteInstances.clientAuth.addDevice.create":`创建二维码`,"settings.remoteInstances.clientAuth.addDevice.targetLabel":`目标实例`,"settings.remoteInstances.clientAuth.addDevice.target.local":`本机`,"settings.remoteInstances.clientAuth.addDevice.target.sshEmpty":`暂无已连接的 SSH 实例`,"settings.remoteInstances.clientAuth.addDevice.target.sshNotReady":`请先连接该 SSH 实例`,"settings.remoteInstances.sidebar.actions.mobileConnect":`手机连接`,"settings.remoteInstances.sidebar.actions.mobileConnectAria":`为 {instance} 生成手机配对二维码`,"settings.remoteInstances.sidebar.actions.mobileConnectDisabled":`请先连接该 SSH 实例再配对手机`,"settings.remoteInstances.sidebar.actions.syncConfigDisabled":`请先连接该实例再同步配置`,"settings.remoteInstances.sidebar.actions.syncConfig":`同步配置`,"settings.remoteInstances.clientAuth.addDevice.done":`完成`,"settings.remoteInstances.clientAuth.addDevice.connectedToast":`设备已连接。`,"settings.remoteInstances.clientAuth.pairingUrl":`连接链接`,"settings.remoteInstances.clientAuth.createdToken":`请立即复制此令牌。出于安全考虑,它不会再次显示。`,"settings.remoteInstances.clientAuth.state.loading":`正在加载令牌...`,"settings.remoteInstances.clientAuth.state.empty":`尚无已连接设备。`,"settings.remoteInstances.clientAuth.state.revoked":`已撤销`,"settings.remoteInstances.clientAuth.state.thisDevice":`此设备`,"settings.remoteInstances.clientAuth.state.pending":`等待连接…`,"settings.remoteInstances.clientAuth.state.viaRelay":`Relay`,"settings.remoteInstances.clientAuth.state.connectedDirect":`已连接 · 局域网`,"settings.remoteInstances.clientAuth.state.connectedRelay":`已连接 · 中继`,"settings.remoteInstances.clientAuth.lastUsed":`上次使用 {date}`,"settings.remoteInstances.clientAuth.neverUsed":`从未使用`,"settings.remoteInstances.relay.title":`OpenChamber Relay`,"settings.remoteInstances.relay.autoHint":`通过中继配对设备时自动开启。`,"settings.remoteInstances.relay.description":`无需开放端口,即可让你的其他设备从任何地方连接。流量端到端加密,中继无法读取内容。`,"settings.remoteInstances.relay.enableHint":`在此服务器上启用中继之前,不会共享任何内容。`,"settings.remoteInstances.relay.actions.enable":`启用中继`,"settings.remoteInstances.relay.actions.disable":`停用`,"settings.remoteInstances.relay.confirm.disable":`停用中继?通过它连接的设备将立即断开。`,"settings.remoteInstances.relay.state.loading":`正在检查中继状态...`,"settings.remoteInstances.relay.state.disabled":`已停用`,"settings.remoteInstances.relay.state.connecting":`连接中`,"settings.remoteInstances.relay.state.connected":`已连接`,"settings.remoteInstances.relay.state.reconnecting":`重新连接中`,"settings.remoteInstances.relay.state.error":`错误`,"settings.remoteInstances.relay.status.clientsOne":`已连接 {count} 台设备`,"settings.remoteInstances.relay.status.clientsMany":`已连接 {count} 台设备`,"settings.remoteInstances.relay.pair.title":`配对设备`,"settings.remoteInstances.relay.pair.labelPlaceholder":`设备名称(可选)`,"settings.remoteInstances.relay.pair.includeToken":`包含访问令牌(扫一次即完成配对)`,"settings.remoteInstances.relay.pair.noTokenHint":`不包含令牌时,设备连接后需使用此服务器的界面密码登录。`,"settings.remoteInstances.relay.pair.generate":`创建配对链接`,"settings.remoteInstances.relay.pair.requiresConnected":`中继连接后即可配对。`,"settings.remoteInstances.relay.pair.linkLabel":`配对链接`,"settings.remoteInstances.relay.pair.warning":`此链接可访问此服务器,请勿分享。`,"settings.remoteInstances.relay.pair.qrAlt":`中继配对二维码`,"settings.remoteInstances.relay.pair.showQr":`显示二维码`,"settings.remoteInstances.relay.pair.qrDialogTitle":`扫描配对`,"settings.remoteInstances.relay.pair.qrDialogDescription":`用其他设备上的 OpenChamber 应用扫描此二维码。`,"settings.remoteInstances.relay.pair.manageHint":`可在上方“连接到此服务器”列表中管理或吊销已配对的设备。`,"settings.remoteInstances.relay.toast.enableFailed":`无法启用中继`,"settings.remoteInstances.relay.toast.disableFailed":`无法停用中继`,"settings.remoteInstances.relay.toast.offerFailed":`无法创建配对链接`,"settings.remoteInstances.relay.toast.linkCopied":`已复制配对链接`,"settings.remoteInstances.sidebar.phase.ready":`就绪`,"settings.remoteInstances.sidebar.phase.error":`错误`,"settings.remoteInstances.sidebar.phase.reconnect":`重连`,"settings.remoteInstances.sidebar.phase.installing":`安装中`,"settings.remoteInstances.sidebar.phase.updating":`更新中`,"settings.remoteInstances.sidebar.phase.forwarding":`转发中`,"settings.remoteInstances.sidebar.phase.starting":`启动中`,"settings.remoteInstances.sidebar.phase.connecting":`连接中`,"settings.remoteInstances.sidebar.phase.idle":`空闲`,"settings.remoteInstances.page.section.instance":`实例`,"settings.remoteInstances.page.section.instanceDescription":`为此连接选择 SSH 命令和显示名称。`,"settings.remoteInstances.page.field.mode":`模式`,"settings.remoteInstances.page.field.modeHint":`选择是由 OpenChamber 为你启动服务器,还是连接到已在运行的服务器。`,"settings.remoteInstances.page.field.modePlaceholder":`选择模式`,"settings.remoteInstances.page.field.modeManaged":`帮我启动`,"settings.remoteInstances.page.field.modeExternal":`已在运行`,"settings.remoteInstances.page.field.preferredRemotePort":`首选远程端口`,"settings.remoteInstances.page.field.preferredRemotePortHint":`远程机器上使用的端口。留空则自动选择。`,"settings.remoteInstances.page.field.keepServerRunning":`保持服务运行`,"settings.remoteInstances.page.field.keepServerRunningHint":`断开连接后仍让 OpenChamber 在远程机器上运行。`,"settings.remoteInstances.page.field.bindHost":`绑定主机`,"settings.remoteInstances.page.field.bindHostHint":`本地连接监听的地址。除非需要局域网访问,否则请使用 127.0.0.1 或 localhost。`,"settings.remoteInstances.page.field.preferredLocalPort":`首选本地端口`,"settings.remoteInstances.page.field.preferredLocalPortHint":`为此连接打开的本地端口。留空则自动选择。`,"settings.remoteInstances.page.field.forwardType":`转发类型`,"settings.remoteInstances.page.field.localListen":`本地监听`,"settings.remoteInstances.page.field.localTarget":`本地目标`,"settings.remoteInstances.page.field.remoteListen":`远程监听`,"settings.remoteInstances.page.field.remoteTarget":`远程目标`,"settings.remoteInstances.page.field.localHostPlaceholder":`127.0.0.1`,"settings.remoteInstances.page.field.remoteHostPlaceholder":`127.0.0.1`,"settings.remoteInstances.page.field.auto":`自动`,"settings.remoteInstances.page.confirm.bindAllInterfaces":`绑定到 0.0.0.0 会将转发端口暴露到本地网络。是否继续?`,"settings.remoteInstances.page.preview.localSocks5":`(本地 SOCKS5)`,"settings.remoteInstances.page.preview.local":`(本地)`,"settings.remoteInstances.page.preview.remote":`(远程)`,"settings.remoteInstances.page.toast.openLocalEndpointFailed":`无法打开本地地址`,"settings.remoteInstances.page.toast.localUrlCopied":`本地 URL 已复制`,"settings.remoteInstances.page.actions.copyLocalUrl":`复制本地 URL`,"settings.remoteInstances.page.actions.open":`打开`,"settings.remoteInstances.page.logsDialog.selectedInstanceFallback":`所选实例`,"settings.remoteInstances.page.patternDialog.descriptionWithHost":`{host} 需要一个具体目标地址。`,"settings.remoteInstances.page.patternDialog.description":`输入目标地址。`,"settings.common.actions.cancel":`取消`,"settings.common.actions.create":`创建`,"settings.common.actions.delete":`删除`,"settings.common.actions.reset":`重置`,"settings.common.actions.rename":`重命名`,"settings.common.actions.duplicate":`复制`,"settings.common.actions.import":`导入`,"settings.common.actions.copyAll":`全部复制`,"settings.common.actions.clear":`清除`,"settings.common.actions.saving":`保存中...`,"settings.common.actions.saveChanges":`保存更改`,"settings.common.scope.global":`全局`,"settings.common.scope.project":`项目`,"settings.common.field.description":`描述`,"settings.common.badge.new":`新建`,"settings.common.badge.modified":`已修改`,"settings.common.permission.allow":`允许`,"settings.common.permission.ask":`询问`,"settings.common.permission.deny":`拒绝`,"settings.common.state.comingSoon":`即将推出...`,"settings.projects.actions.title":`操作`,"settings.projects.actions.description":`按项目显示在项目名旁边表头中的命令。`,"settings.projects.actions.validation.fillNameAndCommand":`保存前请填写操作名称和命令。`,"settings.projects.actions.state.loading":`加载中...`,"settings.projects.actions.state.empty":`尚未配置任何操作。`,"settings.projects.actions.state.untitled":`未命名操作`,"settings.projects.actions.state.noDesktopSshForwards":`没有可用的本地 SSH 转发。`,"settings.projects.actions.field.selectIconAria":`选择图标`,"settings.projects.actions.field.iconAria":`图标 {icon}`,"settings.projects.actions.field.actionNamePlaceholder":`操作名称`,"settings.projects.actions.field.command":`命令`,"settings.projects.actions.field.commandPlaceholder":`例如 bun run lint`,"settings.projects.actions.field.autoOpenUrl":`自动打开 URL`,"settings.projects.actions.field.autoOpenUrlForAria":`为 {title} 自动打开 URL`,"settings.projects.actions.field.autoOpenUrlDescription":`从输出中打开 URL,或使用下面的自定义 URL`,"settings.projects.actions.field.overrideUrlPlaceholder":`覆盖 URL(可选)`,"settings.projects.actions.field.overrideUrlTooltip":`如果填写此字段,将使用自定义 URL。为空时,应用会从输出中选择最佳 URL 打开。`,"settings.projects.actions.field.desktopSshForward":`桌面 SSH 转发`,"settings.projects.actions.field.useOutputManualUrl":`使用输出/手动 URL`,"settings.projects.actions.actions.add":`添加操作`,"settings.projects.actions.actions.save":`保存操作`,"settings.projects.actions.toast.saveFailed":`保存操作失败`,"settings.projects.actions.toast.saved":`项目操作已保存`,"settings.openchamber.about.title":`关于 OpenChamber`,"settings.openchamber.about.field.version":`版本`,"settings.openchamber.about.field.clientVersion":`客户端`,"settings.openchamber.about.field.instanceOpenChamberVersion":`OpenChamber`,"settings.openchamber.about.field.instanceOpenCodeVersion":`OpenCode`,"settings.openchamber.about.field.openCodeVersion":`OpenCode 版本`,"settings.openchamber.about.state.checking":`检查中...`,"settings.openchamber.about.state.upToDate":`已是最新`,"settings.openchamber.about.state.unknown":`未知`,"settings.openchamber.about.actions.checkUpdates":`检查更新`,"settings.openchamber.about.actions.update":`更新`,"settings.openchamber.about.actions.updateToVersion":`更新到 {version}`,"settings.openchamber.about.actions.checkForUpdates":`检查更新`,"settings.openchamber.about.toast.latestVersion":`你已是最新版本`,"settings.openchamber.about.toast.checkFailed":`无法检查更新`,"settings.openchamber.about.diagnostics.label":`诊断日志`,"settings.openchamber.about.diagnostics.description":`导出本机诊断 feat,用于分析展示与同步问题。不包含消息正文或令牌。`,"settings.openchamber.about.diagnostics.export":`导出日志`,"settings.openchamber.about.diagnostics.exporting":`正在导出…`,"settings.openchamber.about.diagnostics.enable":`记录诊断 feat`,"settings.openchamber.about.diagnostics.enableHint":`仅测试版可用。在本机记录会话同步与展示生命周期,不含正文。`,"settings.openchamber.about.diagnostics.toast.exported":`已导出诊断日志`,"settings.openchamber.about.diagnostics.toast.failed":`无法导出诊断日志`,"settings.openchamber.about.diagnostics.toast.empty":`已导出诊断日志。尚未记录任何事件。`,"settings.agents.sidebar.title":`Agent`,"settings.agents.sidebar.total":`总计 {count}`,"settings.agents.sidebar.empty.title":`未配置 Agent`,"settings.agents.sidebar.empty.description":`使用上方 + 按钮创建一个`,"settings.agents.sidebar.section.builtIn":`内置 Agent`,"settings.agents.sidebar.section.custom":`自定义 Agent`,"settings.agents.sidebar.badge.system":`系统`,"settings.agents.sidebar.dialog.deleteTitle":`删除 Agent`,"settings.agents.sidebar.dialog.resetTitle":`重置 Agent`,"settings.agents.sidebar.dialog.deleteDescription":`确定要删除 Agent“{name}”吗?`,"settings.agents.sidebar.dialog.resetDescription":`确定要将 Agent“{name}”重置为默认配置吗?`,"settings.agents.sidebar.renameDialog.title":`重命名 Agent`,"settings.agents.sidebar.renameDialog.description":`为 Agent“@{name}”输入新名称`,"settings.agents.sidebar.renameDialog.placeholder":`新 Agent 名称...`,"settings.agents.sidebar.toast.builtInCannotDelete":`内置 Agent 无法删除`,"settings.agents.sidebar.toast.agentDeleted":`Agent“{name}”已删除`,"settings.agents.sidebar.toast.agentReset":`Agent“{name}”已重置为默认值`,"settings.agents.sidebar.toast.deleteFailed":`删除 Agent 失败`,"settings.agents.sidebar.toast.definitionNotFound":`未找到 Agent 定义。未进行任何更改。`,"settings.agents.sidebar.toast.resetFailed":`重置 Agent 失败`,"settings.agents.sidebar.toast.agentNameRequired":`Agent 名称为必填项`,"settings.agents.sidebar.toast.agentExists":`已存在同名 Agent`,"settings.agents.sidebar.toast.removeOldAfterRenameFailed":`重命名后移除旧 Agent 失败`,"settings.agents.sidebar.toast.renameFailed":`重命名 Agent 失败`,"settings.agents.sidebar.toast.agentRenamed":`Agent 已重命名为 "{name}"`,"settings.agents.page.toast.permissionNameRequired":`权限名称为必填项`,"settings.agents.page.toast.created":`Agent 创建成功`,"settings.agents.page.toast.updated":`Agent 更新成功`,"settings.agents.page.toast.createFailed":`创建 Agent 失败`,"settings.agents.page.toast.updateFailed":`更新 Agent 失败`,"settings.agents.page.toast.saveUnexpectedError":`保存时发生错误`,"settings.agents.page.toast.savedManualRestart":`已保存到磁盘。请重启已连接的 OpenCode 服务器以应用更改。`,"settings.agents.page.empty.title":`从侧边栏选择一个 Agent`,"settings.agents.page.empty.description":`或新建一个 Agent`,"settings.agents.page.title.new":`新建 Agent`,"settings.agents.page.subtitle.new":`配置新的助手人格`,"settings.agents.page.subtitle.edit":`编辑 Agent 设置`,"settings.agents.page.section.identityRole":`身份与角色`,"settings.agents.page.section.modelParameters":`模型与参数`,"settings.agents.page.section.systemPrompt":`系统提示词`,"settings.agents.page.section.toolPermissions":`工具权限`,"settings.agents.page.field.agentName":`Agent 名称`,"settings.agents.page.field.agentNamePlaceholder":`agent-name`,"settings.agents.page.field.scopePlaceholder":`作用域`,"settings.agents.page.field.descriptionPlaceholder":`这个 Agent 的作用是什么?`,"settings.agents.page.field.mode":`模式`,"settings.agents.page.field.modeTooltip":`主 Agent 与子 Agent 可见性`,"settings.agents.page.field.overrideModel":`覆盖模型`,"settings.agents.page.field.variant":`思考变体`,"settings.agents.page.field.variantTooltip":`可选。如果模型支持推理,变体控制推理深度。`,"settings.agents.page.field.variantHint":`模型特定(如 Anthropic variant)`,"settings.agents.page.field.variantPlaceholder":`例如 high, max, low, none`,"settings.agents.page.field.temperature":`Temperature`,"settings.agents.page.field.temperatureTooltip":`控制随机性。越高越有创造性,越低越聚焦。`,"settings.agents.page.field.temperatureRange":`0.0 到 2.0`,"settings.agents.page.field.clearTemperatureAria":`清除 Temperature 覆盖`,"settings.agents.page.field.topP":`Top P`,"settings.agents.page.field.topPTooltip":`核采样多样性。越低越倾向高概率 token。`,"settings.agents.page.field.topPRange":`0.0 到 1.0`,"settings.agents.page.field.clearTopPAria":`清除 Top P 覆盖`,"settings.agents.page.field.systemPromptPlaceholder":`你是一名专业编码助手...`,"settings.agents.page.mode.primary":`主 Agent`,"settings.agents.page.mode.subagent":`子 Agent`,"settings.agents.page.mode.all":`全部`,"settings.agents.page.permissions.defaultLabel":`默认`,"settings.agents.page.permissions.hideEditor":`隐藏编辑器`,"settings.agents.page.permissions.advancedEditor":`高级编辑器`,"settings.agents.page.permissions.globalSummary":`全局:{summary}`,"settings.agents.page.permissions.rulesSummary":`规则:{summary}`,"settings.agents.page.permissions.globalDefault":`全局默认`,"settings.agents.page.permissions.pattern":`模式`,"settings.agents.page.permissions.addCustomRule":`添加自定义规则`,"settings.agents.page.permissions.permissionPlaceholder":`权限...`,"settings.agents.page.permissions.patternPlaceholder":`模式(例如 *)`,"settings.page.behavior.title":`行为`,"settings.behavior.page.title":`行为`,"settings.behavior.page.warning.title":`全局规则会与项目规则合并使用`,"settings.behavior.page.warning.description":`此处所做的更改会更新 {path}。当项目级 AGENTS.md 存在时,OpenCode 也会包含它。`,"settings.behavior.page.section.systemPrompt":`全局 AGENTS.md`,"settings.behavior.page.field.systemPromptPlaceholder":`你是一个有帮助的 AI 助手...
|
|
1
|
+
var e={"settings.globalConfig.title":`全局配置`,"settings.globalConfig.description":`编辑 ~/.config/opencode 中当前生效的配置文件。`,"settings.globalConfig.actions.reload":`重新加载文件`,"settings.globalConfig.restartHint":`保存后重启 OpenCode,使配置变更生效。`,"settings.globalConfig.toast.loadFailed":`加载配置文件失败`,"settings.globalConfig.toast.saveFailed":`保存配置文件失败`,"settings.globalConfig.toast.saved":`配置已保存。重启 OpenCode 后生效。`,"settings.providers.page.openCodeGo.title":`OpenCode Go 用量跟踪`,"settings.providers.page.openCodeGo.description":`连接 OpenCode Go 控制面板以显示滚动、每周和每月配额。`,"settings.providers.page.openCodeGo.workspaceId":`工作区 ID`,"settings.providers.page.openCodeGo.authCookie":`身份验证 Cookie`,"settings.providers.page.openCodeGo.help":`从控制面板网址复制工作区 ID,并从浏览器开发者工具复制 auth Cookie。OpenChamber 绝不会扫描浏览器 Cookie 存储。`,"settings.providers.page.openCodeGo.save":`保存并验证`,"settings.providers.page.openCodeGo.replace":`替换`,"settings.providers.page.openCodeGo.validate":`验证`,"settings.providers.page.openCodeGo.delete":`删除`,"settings.providers.page.quotaCredentials.saved":`已保存 {provider} 凭据。`,"settings.providers.page.openCodeGo.saveFailed":`无法验证 OpenCode Go 凭据。`,"settings.providers.page.openCodeGo.valid":`OpenCode Go 凭据有效。`,"settings.providers.page.openCodeGo.invalid":`OpenCode Go 凭据无效或已过期。`,"settings.providers.page.openCodeGo.deleted":`已删除 OpenCode Go 凭据。`,"settings.providers.page.openCodeGo.deleteFailed":`无法删除 OpenCode Go 凭据。`,"settings.appearance.language.label":`语言`,"settings.appearance.language.description":`选择界面语言。`,"settings.appearance.language.select":`选择语言`,"settings.window.description":`OpenChamber 设置窗口。`,"settings.view.home.title":`设置`,"settings.view.home.description":`跳转到常用页面。`,"settings.view.home.cards.providers.title":`提供商`,"settings.view.home.cards.providers.description":`连接模型和凭据`,"settings.view.home.cards.agents.title":`Agent`,"settings.view.home.cards.agents.description":`提示词、工具、权限`,"settings.view.home.cards.skillsCatalog.title":`技能目录`,"settings.view.home.cards.skillsCatalog.description":`从目录安装技能`,"settings.view.home.cards.mcp.title":`MCP`,"settings.view.home.cards.mcp.description":`配置 MCP 服务器和连接`,"settings.view.home.cards.plugins.title":`插件`,"settings.view.home.cards.plugins.description":`管理 OpenCode 插件`,"settings.view.home.cards.usage.title":`用量`,"settings.view.home.cards.usage.description":`配额和花费可见性`,"settings.view.unavailable.title":`不可用`,"settings.view.unavailable.description":`此设置页面在当前运行环境中不可用。`,"settings.view.badge.beta":`测试版`,"settings.view.actions.reloadOpenCode":`重新加载 OpenCode`,"settings.view.actions.reloadOpenCodeTooltip":`重启 OpenCode 并重新加载其配置。`,"settings.view.actions.backToSettings":`返回设置`,"settings.view.actions.closeSettings":`关闭设置`,"settings.view.actions.openSectionList":`打开分组列表`,"settings.view.actions.closeSettingsWithShortcut":`关闭设置({shortcut}+,)`,"settings.view.actions.back":`返回`,"settings.view.actions.resizeNavigation":`调整设置导航宽度`,"settings.view.navigation.groups.connection":`连接`,"settings.view.navigation.groups.personalization":`个性化`,"settings.view.navigation.groups.workspace":`工作区`,"settings.view.navigation.groups.opencode":`OpenCode`,"settings.view.navigation.groups.content":`内容与自动化`,"settings.view.navigation.groups.system":`系统`,"settings.view.search.placeholder":`搜索设置`,"settings.view.search.aria":`搜索设置`,"settings.view.search.clear":`清除设置搜索`,"settings.view.search.noResults":`没有匹配的设置`,"settings.page.projects.title":`项目`,"settings.page.remoteInstances.title":`远程实例`,"settings.page.providers.title":`提供商`,"settings.page.usage.title":`用量`,"settings.page.agents.title":`Agent`,"settings.page.commands.title":`命令`,"settings.page.mcp.title":`MCP`,"settings.page.plugins.title":`插件`,"settings.page.skills.title":`技能`,"settings.page.skillsCatalog.title":`技能目录`,"settings.page.git.title":`Git`,"settings.page.appearance.title":`外观`,"settings.page.chat.title":`聊天`,"settings.page.shortcuts.title":`快捷键`,"settings.page.sessions.title":`会话`,"settings.page.summaryAI.title":`智能摘要`,"settings.page.magicPrompts.title":`魔法提示词`,"settings.page.notifications.title":`通知`,"settings.page.voice.title":`语音`,"settings.page.about.title":`关于`,"settings.page.snippets.title":`代码片段`,"settings.snippets.sidebar.title":`代码片段`,"settings.snippets.sidebar.total":`共 {count} 个`,"settings.snippets.sidebar.actions.create":`创建代码片段`,"settings.snippets.sidebar.actions.more":`{name} 的更多操作`,"settings.snippets.sidebar.toast.deleted":`代码片段已删除`,"settings.snippets.sidebar.toast.deleteFailed":`删除代码片段失败`,"settings.snippets.sidebar.dialog.deleteTitle":`删除代码片段?`,"settings.snippets.sidebar.dialog.deleteDescription":`这将永久删除 #{name}。`,"settings.snippets.page.empty.title":`选择代码片段`,"settings.snippets.page.empty.description":`从侧边栏选择代码片段进行编辑。`,"settings.snippets.page.title.new":`新建代码片段`,"settings.snippets.page.field.namePlaceholder":`snippet-name`,"settings.snippets.page.field.descriptionPlaceholder":`这个代码片段的作用`,"settings.snippets.page.field.aliases":`别名`,"settings.snippets.page.field.aliasesPlaceholder":`safe, careful`,"settings.snippets.page.field.content":`内容`,"settings.snippets.page.field.contentPlaceholder":`代码片段 Markdown...`,"settings.snippets.page.hint":`在提示词中使用 #name。支持别名和与 opencode-snippets 兼容的 prepend/append 块。`,"settings.snippets.page.toast.nameRequired":`代码片段名称为必填项`,"settings.snippets.page.toast.contentRequired":`代码片段内容为必填项`,"settings.snippets.page.toast.saveFailed":`保存代码片段失败`,"settings.snippets.page.toast.saved":`代码片段已保存`,"settings.magicPrompts.sidebar.title":`魔法提示词`,"settings.magicPrompts.sidebar.description":`选择要编辑的提示词模板。`,"settings.magicPrompts.sidebar.group.git":`Git`,"settings.magicPrompts.sidebar.group.github":`GitHub`,"settings.magicPrompts.sidebar.group.planning":`规划`,"settings.magicPrompts.sidebar.group.session":`会话`,"settings.magicPrompts.sidebar.item.gitCommitGenerate":`提交生成`,"settings.magicPrompts.sidebar.item.gitPrGenerate":`PR 生成`,"settings.magicPrompts.sidebar.item.gitConflictResolve":`合并/Rebase 冲突解决`,"settings.magicPrompts.sidebar.item.gitCherrypickConflictResolve":`Cherry-pick 冲突解决`,"settings.magicPrompts.sidebar.item.githubPrReview":`PR 审查`,"settings.magicPrompts.sidebar.item.githubIssueReview":`Issue 审查`,"settings.magicPrompts.sidebar.item.githubPrFailedChecksReview":`PR 失败检查审查`,"settings.magicPrompts.sidebar.item.githubPrCommentsReview":`PR 评论审查`,"settings.magicPrompts.sidebar.item.githubSinglePrCommentReview":`单条 PR 评论审查`,"settings.magicPrompts.sidebar.item.planTodo":`待办规划`,"settings.magicPrompts.sidebar.item.planImprove":`改进计划`,"settings.magicPrompts.sidebar.item.planImplement":`执行计划`,"settings.magicPrompts.sidebar.item.sessionSummary":`会话总结`,"settings.magicPrompts.sidebar.item.sessionWorkspaceReview":`工作区审查`,"settings.magicPrompts.sidebar.item.sessionExplore":`代码库导览`,"settings.magicPrompts.sidebar.item.sessionFeaturePlan":`功能规划`,"settings.magicPrompts.sidebar.item.sessionCraftGoal":`创建 Goal`,"settings.magicPrompts.page.group.sessionCraftGoal.title":`创建 Goal`,"settings.magicPrompts.page.group.sessionCraftGoal.description":`由 /craft-goal 斜杠命令使用的提示词:可见用户消息 + 隐藏说明。通过引导式探索将想法或任务转化为清晰且有证据可验证的 Goal。`,"settings.magicPrompts.sidebar.item.sessionCatchUp":`快速回顾`,"settings.magicPrompts.sidebar.item.sessionDebug":`调试`,"settings.magicPrompts.sidebar.item.sessionWeigh":`权衡方案`,"settings.magicPrompts.sidebar.item.sessionFusion":`融合`,"settings.remoteInstances.sidebar.title":`远程实例`,"settings.remoteInstances.sidebar.description":`通过导入链接或 SSH 连接其他 OpenChamber 服务器。`,"settings.remoteInstances.sidebar.empty":`暂无远程实例。可导入链接或添加 SSH 连接。`,"settings.remoteInstances.channel.link":`链接`,"settings.remoteInstances.channel.ssh":`SSH`,"settings.remoteInstances.sidebar.total":`总计 {count}`,"settings.remoteInstances.sidebar.newSshInstanceName":`新的 SSH 连接`,"settings.remoteInstances.sidebar.actions.addSshInstance":`添加 SSH 连接`,"settings.remoteInstances.sidebar.actions.connect":`连接`,"settings.remoteInstances.sidebar.actions.disconnect":`断开连接`,"settings.remoteInstances.sidebar.actions.retry":`重试`,"settings.remoteInstances.sidebar.actions.remove":`移除`,"settings.remoteInstances.sidebar.confirm.localPortInUseRetry":`本地端口已被占用。是否选择一个随机空闲本地端口并重试?`,"settings.remoteInstances.sidebar.toast.createFailed":`无法创建 SSH 连接`,"settings.remoteInstances.sidebar.toast.retriedWithRandomPort":`已使用随机本地端口重试`,"settings.remoteInstances.sidebar.toast.connectFailed":`连接实例失败`,"settings.remoteInstances.sidebar.toast.disconnectFailed":`断开实例连接失败`,"settings.remoteInstances.sidebar.toast.retryFailed":`重试连接失败`,"settings.remoteInstances.sidebar.toast.removeFailed":`移除实例失败`,"settings.remoteInstances.direct.sidebarTitle":`服务器链接`,"settings.remoteInstances.direct.sidebarDescription":`使用配对链接连接`,"settings.remoteInstances.direct.title":`其他 OpenChamber 服务器`,"settings.remoteInstances.direct.description":`此应用可切换到的服务器。从另一台服务器导入配对链接。`,"settings.remoteInstances.direct.import.description":`粘贴来自另一个 OpenChamber 服务器的连接链接。`,"settings.remoteInstances.direct.import.placeholder":`openchamber://connect?...`,"settings.remoteInstances.direct.import.action":`导入链接`,"settings.remoteInstances.direct.error.invalidConnectLink":`无效的 OpenChamber 连接链接。`,"settings.remoteInstances.direct.state.loading":`正在加载服务器...`,"settings.remoteInstances.direct.state.empty":`尚未导入其他服务器。`,"settings.remoteInstances.clientAuth.title":`连接到此服务器`,"settings.remoteInstances.clientAuth.description":`创建安全链接或令牌,让 OpenChamber Desktop 可以连接到此服务器。`,"settings.remoteInstances.clientAuth.field.labelPlaceholder":`实例名称 — 例如 家里的电脑`,"settings.remoteInstances.clientAuth.field.labelHint":`对面设备会用这个名字显示此服务器。`,"settings.remoteInstances.clientAuth.actions.create":`创建令牌`,"settings.remoteInstances.clientAuth.actions.pair":`创建链接`,"settings.remoteInstances.clientAuth.actions.revoke":`撤销`,"settings.remoteInstances.clientAuth.actions.clearRevoked":`清除已撤销`,"settings.remoteInstances.clientAuth.qrAlt":`OpenChamber connection QR code`,"settings.remoteInstances.clientAuth.qrEnlarge":`放大二维码`,"settings.remoteInstances.clientAuth.qrScanHint":`用另一台设备上的 OpenChamber 应用扫描。一次性使用且会过期。`,"settings.remoteInstances.clientAuth.qrDialogTitle":`扫码连接`,"settings.remoteInstances.clientAuth.actions.addDevice":`添加设备`,"settings.remoteInstances.clientAuth.actions.copied":`已复制`,"settings.remoteInstances.clientAuth.addDevice.transportLabel":`你会在哪里使用这台设备?`,"settings.remoteInstances.clientAuth.addDevice.subtitle":`创建一次性二维码,把另一台设备连接到此服务器。`,"settings.remoteInstances.clientAuth.addDevice.transport.local":`仅本机`,"settings.remoteInstances.clientAuth.addDevice.transport.localHint":`供同一台电脑上的应用使用。`,"settings.remoteInstances.clientAuth.addDevice.transport.lan":`仅家庭网络`,"settings.remoteInstances.clientAuth.addDevice.transport.lanHint":`通过 Wi-Fi 直接连接。离开此网络后无法使用。`,"settings.remoteInstances.clientAuth.addDevice.transport.relay":`任何地方`,"settings.remoteInstances.clientAuth.addDevice.transport.relayHint":`在家和外出都可用。外出时流量经由 OpenChamber Private Relay(端到端加密隧道)传输,无需配置。`,"settings.remoteInstances.clientAuth.addDevice.fallback.relay":`外出时也允许通过加密中继连接`,"settings.remoteInstances.clientAuth.addDevice.fallback.preferLocal":`在家时优先使用直接连接`,"settings.remoteInstances.clientAuth.addDevice.relayUrlLabel":`Relay 服务端`,"settings.remoteInstances.clientAuth.addDevice.relayUrlHint":`使用 OpenChamber 官方 Relay,或输入你自己的 ws:// 或 wss:// 地址。设备会保存二维码中的该地址。`,"settings.remoteInstances.clientAuth.addDevice.relayUrlDeployLink":`可部署自己的 Relay 服务。`,"settings.remoteInstances.clientAuth.addDevice.relayUrlLockedHint":`此服务器已通过 OPENCHAMBER_RELAY_URL 固定 Relay 地址。`,"settings.remoteInstances.clientAuth.addDevice.relayUrlInvalid":`请输入以 ws:// 或 wss:// 开头的有效 Relay 地址。`,"settings.remoteInstances.clientAuth.addDevice.create":`创建二维码`,"settings.remoteInstances.clientAuth.addDevice.targetLabel":`目标实例`,"settings.remoteInstances.clientAuth.addDevice.target.local":`本机`,"settings.remoteInstances.clientAuth.addDevice.target.sshEmpty":`暂无已连接的 SSH 实例`,"settings.remoteInstances.clientAuth.addDevice.target.sshNotReady":`请先连接该 SSH 实例`,"settings.remoteInstances.sidebar.actions.mobileConnect":`手机连接`,"settings.remoteInstances.sidebar.actions.mobileConnectAria":`为 {instance} 生成手机配对二维码`,"settings.remoteInstances.sidebar.actions.mobileConnectDisabled":`请先连接该 SSH 实例再配对手机`,"settings.remoteInstances.sidebar.actions.syncConfigDisabled":`请先连接该实例再同步配置`,"settings.remoteInstances.sidebar.actions.syncConfig":`同步配置`,"settings.remoteInstances.clientAuth.addDevice.done":`完成`,"settings.remoteInstances.clientAuth.addDevice.connectedToast":`设备已连接。`,"settings.remoteInstances.clientAuth.pairingUrl":`连接链接`,"settings.remoteInstances.clientAuth.createdToken":`请立即复制此令牌。出于安全考虑,它不会再次显示。`,"settings.remoteInstances.clientAuth.state.loading":`正在加载令牌...`,"settings.remoteInstances.clientAuth.state.empty":`尚无已连接设备。`,"settings.remoteInstances.clientAuth.state.revoked":`已撤销`,"settings.remoteInstances.clientAuth.state.thisDevice":`此设备`,"settings.remoteInstances.clientAuth.state.pending":`等待连接…`,"settings.remoteInstances.clientAuth.state.viaRelay":`Relay`,"settings.remoteInstances.clientAuth.state.connectedDirect":`已连接 · 局域网`,"settings.remoteInstances.clientAuth.state.connectedRelay":`已连接 · 中继`,"settings.remoteInstances.clientAuth.lastUsed":`上次使用 {date}`,"settings.remoteInstances.clientAuth.neverUsed":`从未使用`,"settings.remoteInstances.relay.title":`OpenChamber Relay`,"settings.remoteInstances.relay.autoHint":`通过中继配对设备时自动开启。`,"settings.remoteInstances.relay.description":`无需开放端口,即可让你的其他设备从任何地方连接。流量端到端加密,中继无法读取内容。`,"settings.remoteInstances.relay.enableHint":`在此服务器上启用中继之前,不会共享任何内容。`,"settings.remoteInstances.relay.actions.enable":`启用中继`,"settings.remoteInstances.relay.actions.disable":`停用`,"settings.remoteInstances.relay.confirm.disable":`停用中继?通过它连接的设备将立即断开。`,"settings.remoteInstances.relay.state.loading":`正在检查中继状态...`,"settings.remoteInstances.relay.state.disabled":`已停用`,"settings.remoteInstances.relay.state.connecting":`连接中`,"settings.remoteInstances.relay.state.connected":`已连接`,"settings.remoteInstances.relay.state.reconnecting":`重新连接中`,"settings.remoteInstances.relay.state.error":`错误`,"settings.remoteInstances.relay.status.clientsOne":`已连接 {count} 台设备`,"settings.remoteInstances.relay.status.clientsMany":`已连接 {count} 台设备`,"settings.remoteInstances.relay.pair.title":`配对设备`,"settings.remoteInstances.relay.pair.labelPlaceholder":`设备名称(可选)`,"settings.remoteInstances.relay.pair.includeToken":`包含访问令牌(扫一次即完成配对)`,"settings.remoteInstances.relay.pair.noTokenHint":`不包含令牌时,设备连接后需使用此服务器的界面密码登录。`,"settings.remoteInstances.relay.pair.generate":`创建配对链接`,"settings.remoteInstances.relay.pair.requiresConnected":`中继连接后即可配对。`,"settings.remoteInstances.relay.pair.linkLabel":`配对链接`,"settings.remoteInstances.relay.pair.warning":`此链接可访问此服务器,请勿分享。`,"settings.remoteInstances.relay.pair.qrAlt":`中继配对二维码`,"settings.remoteInstances.relay.pair.showQr":`显示二维码`,"settings.remoteInstances.relay.pair.qrDialogTitle":`扫描配对`,"settings.remoteInstances.relay.pair.qrDialogDescription":`用其他设备上的 OpenChamber 应用扫描此二维码。`,"settings.remoteInstances.relay.pair.manageHint":`可在上方“连接到此服务器”列表中管理或吊销已配对的设备。`,"settings.remoteInstances.relay.toast.enableFailed":`无法启用中继`,"settings.remoteInstances.relay.toast.disableFailed":`无法停用中继`,"settings.remoteInstances.relay.toast.offerFailed":`无法创建配对链接`,"settings.remoteInstances.relay.toast.linkCopied":`已复制配对链接`,"settings.remoteInstances.sidebar.phase.ready":`就绪`,"settings.remoteInstances.sidebar.phase.error":`错误`,"settings.remoteInstances.sidebar.phase.reconnect":`重连`,"settings.remoteInstances.sidebar.phase.installing":`安装中`,"settings.remoteInstances.sidebar.phase.updating":`更新中`,"settings.remoteInstances.sidebar.phase.forwarding":`转发中`,"settings.remoteInstances.sidebar.phase.starting":`启动中`,"settings.remoteInstances.sidebar.phase.connecting":`连接中`,"settings.remoteInstances.sidebar.phase.idle":`空闲`,"settings.remoteInstances.page.section.instance":`实例`,"settings.remoteInstances.page.section.instanceDescription":`为此连接选择 SSH 命令和显示名称。`,"settings.remoteInstances.page.field.mode":`模式`,"settings.remoteInstances.page.field.modeHint":`选择是由 OpenChamber 为你启动服务器,还是连接到已在运行的服务器。`,"settings.remoteInstances.page.field.modePlaceholder":`选择模式`,"settings.remoteInstances.page.field.modeManaged":`帮我启动`,"settings.remoteInstances.page.field.modeExternal":`已在运行`,"settings.remoteInstances.page.field.preferredRemotePort":`首选远程端口`,"settings.remoteInstances.page.field.preferredRemotePortHint":`远程机器上使用的端口。留空则自动选择。`,"settings.remoteInstances.page.field.keepServerRunning":`保持服务运行`,"settings.remoteInstances.page.field.keepServerRunningHint":`断开连接后仍让 OpenChamber 在远程机器上运行。`,"settings.remoteInstances.page.field.bindHost":`绑定主机`,"settings.remoteInstances.page.field.bindHostHint":`本地连接监听的地址。除非需要局域网访问,否则请使用 127.0.0.1 或 localhost。`,"settings.remoteInstances.page.field.preferredLocalPort":`首选本地端口`,"settings.remoteInstances.page.field.preferredLocalPortHint":`为此连接打开的本地端口。留空则自动选择。`,"settings.remoteInstances.page.field.forwardType":`转发类型`,"settings.remoteInstances.page.field.localListen":`本地监听`,"settings.remoteInstances.page.field.localTarget":`本地目标`,"settings.remoteInstances.page.field.remoteListen":`远程监听`,"settings.remoteInstances.page.field.remoteTarget":`远程目标`,"settings.remoteInstances.page.field.localHostPlaceholder":`127.0.0.1`,"settings.remoteInstances.page.field.remoteHostPlaceholder":`127.0.0.1`,"settings.remoteInstances.page.field.auto":`自动`,"settings.remoteInstances.page.confirm.bindAllInterfaces":`绑定到 0.0.0.0 会将转发端口暴露到本地网络。是否继续?`,"settings.remoteInstances.page.preview.localSocks5":`(本地 SOCKS5)`,"settings.remoteInstances.page.preview.local":`(本地)`,"settings.remoteInstances.page.preview.remote":`(远程)`,"settings.remoteInstances.page.toast.openLocalEndpointFailed":`无法打开本地地址`,"settings.remoteInstances.page.toast.localUrlCopied":`本地 URL 已复制`,"settings.remoteInstances.page.actions.copyLocalUrl":`复制本地 URL`,"settings.remoteInstances.page.actions.open":`打开`,"settings.remoteInstances.page.logsDialog.selectedInstanceFallback":`所选实例`,"settings.remoteInstances.page.patternDialog.descriptionWithHost":`{host} 需要一个具体目标地址。`,"settings.remoteInstances.page.patternDialog.description":`输入目标地址。`,"settings.common.actions.cancel":`取消`,"settings.common.actions.create":`创建`,"settings.common.actions.delete":`删除`,"settings.common.actions.reset":`重置`,"settings.common.actions.rename":`重命名`,"settings.common.actions.duplicate":`复制`,"settings.common.actions.import":`导入`,"settings.common.actions.copyAll":`全部复制`,"settings.common.actions.clear":`清除`,"settings.common.actions.saving":`保存中...`,"settings.common.actions.saveChanges":`保存更改`,"settings.common.scope.global":`全局`,"settings.common.scope.project":`项目`,"settings.common.field.description":`描述`,"settings.common.badge.new":`新建`,"settings.common.badge.modified":`已修改`,"settings.common.permission.allow":`允许`,"settings.common.permission.ask":`询问`,"settings.common.permission.deny":`拒绝`,"settings.common.state.comingSoon":`即将推出...`,"settings.projects.actions.title":`操作`,"settings.projects.actions.description":`按项目显示在项目名旁边表头中的命令。`,"settings.projects.actions.validation.fillNameAndCommand":`保存前请填写操作名称和命令。`,"settings.projects.actions.state.loading":`加载中...`,"settings.projects.actions.state.empty":`尚未配置任何操作。`,"settings.projects.actions.state.untitled":`未命名操作`,"settings.projects.actions.state.noDesktopSshForwards":`没有可用的本地 SSH 转发。`,"settings.projects.actions.field.selectIconAria":`选择图标`,"settings.projects.actions.field.iconAria":`图标 {icon}`,"settings.projects.actions.field.actionNamePlaceholder":`操作名称`,"settings.projects.actions.field.command":`命令`,"settings.projects.actions.field.commandPlaceholder":`例如 bun run lint`,"settings.projects.actions.field.autoOpenUrl":`自动打开 URL`,"settings.projects.actions.field.autoOpenUrlForAria":`为 {title} 自动打开 URL`,"settings.projects.actions.field.autoOpenUrlDescription":`从输出中打开 URL,或使用下面的自定义 URL`,"settings.projects.actions.field.overrideUrlPlaceholder":`覆盖 URL(可选)`,"settings.projects.actions.field.overrideUrlTooltip":`如果填写此字段,将使用自定义 URL。为空时,应用会从输出中选择最佳 URL 打开。`,"settings.projects.actions.field.desktopSshForward":`桌面 SSH 转发`,"settings.projects.actions.field.useOutputManualUrl":`使用输出/手动 URL`,"settings.projects.actions.actions.add":`添加操作`,"settings.projects.actions.actions.save":`保存操作`,"settings.projects.actions.toast.saveFailed":`保存操作失败`,"settings.projects.actions.toast.saved":`项目操作已保存`,"settings.openchamber.about.title":`关于 OpenChamber`,"settings.openchamber.about.field.version":`版本`,"settings.openchamber.about.field.clientVersion":`客户端`,"settings.openchamber.about.field.webBundle":`Web 包`,"settings.openchamber.about.field.instanceOpenChamberVersion":`OpenChamber`,"settings.openchamber.about.field.instanceOpenCodeVersion":`OpenCode`,"settings.openchamber.about.field.openCodeVersion":`OpenCode 版本`,"settings.openchamber.about.state.checking":`检查中...`,"settings.openchamber.about.state.upToDate":`已是最新`,"settings.openchamber.about.state.unknown":`未知`,"settings.openchamber.about.state.builtin":`内置`,"settings.openchamber.about.actions.checkUpdates":`检查更新`,"settings.openchamber.about.actions.update":`更新`,"settings.openchamber.about.actions.updateToVersion":`更新到 {version}`,"settings.openchamber.about.actions.checkForUpdates":`检查更新`,"settings.openchamber.about.toast.latestVersion":`你已是最新版本`,"settings.openchamber.about.toast.checkFailed":`无法检查更新`,"settings.openchamber.about.diagnostics.label":`诊断日志`,"settings.openchamber.about.diagnostics.description":`导出本机诊断 feat,用于分析展示与同步问题。不包含消息正文或令牌。`,"settings.openchamber.about.diagnostics.export":`导出日志`,"settings.openchamber.about.diagnostics.exporting":`正在导出…`,"settings.openchamber.about.diagnostics.enable":`记录诊断 feat`,"settings.openchamber.about.diagnostics.enableHint":`仅测试版可用。在本机记录会话同步与展示生命周期,不含正文。`,"settings.openchamber.about.diagnostics.toast.exported":`已导出诊断日志`,"settings.openchamber.about.diagnostics.toast.failed":`无法导出诊断日志`,"settings.openchamber.about.diagnostics.toast.empty":`已导出诊断日志。尚未记录任何事件。`,"settings.agents.sidebar.title":`Agent`,"settings.agents.sidebar.total":`总计 {count}`,"settings.agents.sidebar.empty.title":`未配置 Agent`,"settings.agents.sidebar.empty.description":`使用上方 + 按钮创建一个`,"settings.agents.sidebar.section.builtIn":`内置 Agent`,"settings.agents.sidebar.section.custom":`自定义 Agent`,"settings.agents.sidebar.badge.system":`系统`,"settings.agents.sidebar.dialog.deleteTitle":`删除 Agent`,"settings.agents.sidebar.dialog.resetTitle":`重置 Agent`,"settings.agents.sidebar.dialog.deleteDescription":`确定要删除 Agent“{name}”吗?`,"settings.agents.sidebar.dialog.resetDescription":`确定要将 Agent“{name}”重置为默认配置吗?`,"settings.agents.sidebar.renameDialog.title":`重命名 Agent`,"settings.agents.sidebar.renameDialog.description":`为 Agent“@{name}”输入新名称`,"settings.agents.sidebar.renameDialog.placeholder":`新 Agent 名称...`,"settings.agents.sidebar.toast.builtInCannotDelete":`内置 Agent 无法删除`,"settings.agents.sidebar.toast.agentDeleted":`Agent“{name}”已删除`,"settings.agents.sidebar.toast.agentReset":`Agent“{name}”已重置为默认值`,"settings.agents.sidebar.toast.deleteFailed":`删除 Agent 失败`,"settings.agents.sidebar.toast.definitionNotFound":`未找到 Agent 定义。未进行任何更改。`,"settings.agents.sidebar.toast.resetFailed":`重置 Agent 失败`,"settings.agents.sidebar.toast.agentNameRequired":`Agent 名称为必填项`,"settings.agents.sidebar.toast.agentExists":`已存在同名 Agent`,"settings.agents.sidebar.toast.removeOldAfterRenameFailed":`重命名后移除旧 Agent 失败`,"settings.agents.sidebar.toast.renameFailed":`重命名 Agent 失败`,"settings.agents.sidebar.toast.agentRenamed":`Agent 已重命名为 "{name}"`,"settings.agents.page.toast.permissionNameRequired":`权限名称为必填项`,"settings.agents.page.toast.created":`Agent 创建成功`,"settings.agents.page.toast.updated":`Agent 更新成功`,"settings.agents.page.toast.createFailed":`创建 Agent 失败`,"settings.agents.page.toast.updateFailed":`更新 Agent 失败`,"settings.agents.page.toast.saveUnexpectedError":`保存时发生错误`,"settings.agents.page.toast.savedManualRestart":`已保存到磁盘。请重启已连接的 OpenCode 服务器以应用更改。`,"settings.agents.page.empty.title":`从侧边栏选择一个 Agent`,"settings.agents.page.empty.description":`或新建一个 Agent`,"settings.agents.page.title.new":`新建 Agent`,"settings.agents.page.subtitle.new":`配置新的助手人格`,"settings.agents.page.subtitle.edit":`编辑 Agent 设置`,"settings.agents.page.section.identityRole":`身份与角色`,"settings.agents.page.section.modelParameters":`模型与参数`,"settings.agents.page.section.systemPrompt":`系统提示词`,"settings.agents.page.section.toolPermissions":`工具权限`,"settings.agents.page.field.agentName":`Agent 名称`,"settings.agents.page.field.agentNamePlaceholder":`agent-name`,"settings.agents.page.field.scopePlaceholder":`作用域`,"settings.agents.page.field.descriptionPlaceholder":`这个 Agent 的作用是什么?`,"settings.agents.page.field.mode":`模式`,"settings.agents.page.field.modeTooltip":`主 Agent 与子 Agent 可见性`,"settings.agents.page.field.overrideModel":`覆盖模型`,"settings.agents.page.field.variant":`思考变体`,"settings.agents.page.field.variantTooltip":`可选。如果模型支持推理,变体控制推理深度。`,"settings.agents.page.field.variantHint":`模型特定(如 Anthropic variant)`,"settings.agents.page.field.variantPlaceholder":`例如 high, max, low, none`,"settings.agents.page.field.temperature":`Temperature`,"settings.agents.page.field.temperatureTooltip":`控制随机性。越高越有创造性,越低越聚焦。`,"settings.agents.page.field.temperatureRange":`0.0 到 2.0`,"settings.agents.page.field.clearTemperatureAria":`清除 Temperature 覆盖`,"settings.agents.page.field.topP":`Top P`,"settings.agents.page.field.topPTooltip":`核采样多样性。越低越倾向高概率 token。`,"settings.agents.page.field.topPRange":`0.0 到 1.0`,"settings.agents.page.field.clearTopPAria":`清除 Top P 覆盖`,"settings.agents.page.field.systemPromptPlaceholder":`你是一名专业编码助手...`,"settings.agents.page.mode.primary":`主 Agent`,"settings.agents.page.mode.subagent":`子 Agent`,"settings.agents.page.mode.all":`全部`,"settings.agents.page.permissions.defaultLabel":`默认`,"settings.agents.page.permissions.hideEditor":`隐藏编辑器`,"settings.agents.page.permissions.advancedEditor":`高级编辑器`,"settings.agents.page.permissions.globalSummary":`全局:{summary}`,"settings.agents.page.permissions.rulesSummary":`规则:{summary}`,"settings.agents.page.permissions.globalDefault":`全局默认`,"settings.agents.page.permissions.pattern":`模式`,"settings.agents.page.permissions.addCustomRule":`添加自定义规则`,"settings.agents.page.permissions.permissionPlaceholder":`权限...`,"settings.agents.page.permissions.patternPlaceholder":`模式(例如 *)`,"settings.page.behavior.title":`行为`,"settings.behavior.page.title":`行为`,"settings.behavior.page.warning.title":`全局规则会与项目规则合并使用`,"settings.behavior.page.warning.description":`此处所做的更改会更新 {path}。当项目级 AGENTS.md 存在时,OpenCode 也会包含它。`,"settings.behavior.page.section.systemPrompt":`全局 AGENTS.md`,"settings.behavior.page.field.systemPromptPlaceholder":`你是一个有帮助的 AI 助手...
|
|
2
2
|
|
|
3
3
|
使用此空间定义 AI 在所有会话和提供商中的绝对行为规则。`,"settings.behavior.page.section.responseStyle":`回复风格`,"settings.behavior.page.responseStyle.tooltip":`启用后,这些说明会指导助手在每个新对话中的回复方式。它们会随你的第一条消息一起发送,不会更改全局 AGENTS.md 规则。`,"settings.behavior.page.responseStyle.enableAria":`启用回复风格说明`,"settings.behavior.page.responseStyle.enable":`向新对话添加回复风格说明`,"settings.behavior.page.responseStyle.preset":`预设`,"settings.behavior.page.responseStyle.option.concise":`简洁`,"settings.behavior.page.responseStyle.option.detailed":`详细`,"settings.behavior.page.responseStyle.option.mentor":`导师`,"settings.behavior.page.responseStyle.option.pushback":`反驳`,"settings.behavior.page.responseStyle.option.noFiller":`无废话`,"settings.behavior.page.responseStyle.option.matchEnergy":`匹配我的语气`,"settings.behavior.page.responseStyle.option.warmPeer":`亲近的同事`,"settings.behavior.page.responseStyle.option.custom":`自定义`,"settings.behavior.page.responseStyle.customPlaceholder":`编写要添加到第一条消息的说明...`,"settings.behavior.page.toast.saved":`行为保存成功`,"settings.behavior.page.toast.saveFailed":`行为保存失败`,"settings.commands.sidebar.title":`命令`,"settings.commands.sidebar.total":`总计 {count}`,"settings.commands.sidebar.empty.title":`未配置命令`,"settings.commands.sidebar.empty.description":`使用上方 + 按钮创建一个`,"settings.commands.sidebar.section.builtIn":`内置命令`,"settings.commands.sidebar.section.custom":`自定义命令`,"settings.commands.sidebar.dialog.deleteTitle":`删除命令`,"settings.commands.sidebar.dialog.resetTitle":`重置命令`,"settings.commands.sidebar.dialog.deleteDescription":`确定要删除命令“{name}”吗?`,"settings.commands.sidebar.dialog.resetDescription":`确定要将命令“{name}”重置为默认配置吗?`,"settings.commands.sidebar.renameDialog.title":`重命名命令`,"settings.commands.sidebar.renameDialog.description":`为命令“/{name}”输入新名称`,"settings.commands.sidebar.renameDialog.placeholder":`新命令名称...`,"settings.commands.sidebar.toast.builtInCannotDelete":`内置命令无法删除`,"settings.commands.sidebar.toast.commandDeleted":`命令“{name}”已删除`,"settings.commands.sidebar.toast.commandReset":`命令“{name}”已重置为默认值`,"settings.commands.sidebar.toast.deleteFailed":`删除命令失败`,"settings.commands.sidebar.toast.resetFailed":`重置命令失败`,"settings.commands.sidebar.toast.commandNameRequired":`命令名称为必填项`,"settings.commands.sidebar.toast.commandExists":`已存在同名命令`,"settings.commands.sidebar.toast.removeOldAfterRenameFailed":`重命名后移除旧命令失败`,"settings.commands.sidebar.toast.renameFailed":`重命名命令失败`,"settings.commands.page.toast.templateRequired":`命令模板为必填项`,"settings.commands.page.toast.created":`命令创建成功`,"settings.commands.page.toast.updated":`命令更新成功`,"settings.commands.page.toast.createFailed":`创建命令失败`,"settings.commands.page.toast.updateFailed":`更新命令失败`,"settings.commands.page.toast.saveUnexpectedError":`保存时发生错误`,"settings.commands.page.empty.title":`从侧边栏选择一个命令`,"settings.commands.page.empty.description":`或新建一个命令`,"settings.commands.page.title.new":`新建命令`,"settings.commands.page.subtitle.new":`配置新的斜杠命令`,"settings.commands.page.subtitle.edit":`编辑命令设置`,"settings.commands.page.section.identity":`身份`,"settings.commands.page.section.executionContext":`执行上下文`,"settings.commands.page.section.template":`命令模板`,"settings.commands.page.field.commandName":`命令名称`,"settings.commands.page.field.commandNamePlaceholder":`command-name`,"settings.commands.page.field.descriptionPlaceholder":`这个命令的作用是什么?`,"settings.commands.page.field.overrideAgent":`覆盖 Agent`,"settings.commands.page.field.templatePlaceholder":`在此输入命令模板...
|
|
4
4
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var e={"settings.globalConfig.title":`全域設定`,"settings.globalConfig.description":`編輯 ~/.config/opencode 中目前生效的設定檔。`,"settings.globalConfig.actions.reload":`重新載入檔案`,"settings.globalConfig.restartHint":`儲存後重新啟動 OpenCode,使設定變更生效。`,"settings.globalConfig.toast.loadFailed":`載入設定檔失敗`,"settings.globalConfig.toast.saveFailed":`儲存設定檔失敗`,"settings.globalConfig.toast.saved":`設定已儲存。重新啟動 OpenCode 後生效。`,"settings.providers.page.openCodeGo.title":`OpenCode Go 用量追蹤`,"settings.providers.page.openCodeGo.description":`連接 OpenCode Go 控制面板以顯示滾動、每週和每月配額。`,"settings.providers.page.openCodeGo.workspaceId":`工作區 ID`,"settings.providers.page.openCodeGo.authCookie":`驗證 Cookie`,"settings.providers.page.openCodeGo.help":`從控制面板網址複製工作區 ID,並從瀏覽器開發者工具複製 auth Cookie。OpenChamber 絕不會掃描瀏覽器 Cookie 儲存空間。`,"settings.providers.page.openCodeGo.save":`儲存並驗證`,"settings.providers.page.openCodeGo.replace":`取代`,"settings.providers.page.openCodeGo.validate":`驗證`,"settings.providers.page.openCodeGo.delete":`刪除`,"settings.providers.page.quotaCredentials.saved":`已儲存 {provider} 憑證。`,"settings.providers.page.openCodeGo.saveFailed":`無法驗證 OpenCode Go 憑證。`,"settings.providers.page.openCodeGo.valid":`OpenCode Go 憑證有效。`,"settings.providers.page.openCodeGo.invalid":`OpenCode Go 憑證無效或已過期。`,"settings.providers.page.openCodeGo.deleted":`已刪除 OpenCode Go 憑證。`,"settings.providers.page.openCodeGo.deleteFailed":`無法刪除 OpenCode Go 憑證。`,"settings.appearance.language.label":`語言`,"settings.appearance.language.description":`選擇介面語言。`,"settings.appearance.language.select":`選擇語言`,"settings.window.description":`OpenChamber 設定視窗。`,"settings.view.home.title":`設定`,"settings.view.home.description":`跳轉到常用頁面。`,"settings.view.home.cards.providers.title":`供應商`,"settings.view.home.cards.providers.description":`連線模型和憑證`,"settings.view.home.cards.agents.title":`Agents`,"settings.view.home.cards.agents.description":`提示詞、工具、權限`,"settings.view.home.cards.skillsCatalog.title":`Skills 目錄`,"settings.view.home.cards.skillsCatalog.description":`從目錄安裝 skills`,"settings.view.home.cards.mcp.title":`MCP`,"settings.view.home.cards.mcp.description":`設定 MCP 伺服器和連線`,"settings.view.home.cards.usage.title":`用量`,"settings.view.home.cards.usage.description":`配額和花費可見性`,"settings.view.unavailable.title":`無法使用`,"settings.view.unavailable.description":`此設定頁面在目前執行環境中無法使用。`,"settings.view.badge.beta":`beta`,"settings.view.actions.reloadOpenCode":`重新載入 OpenCode`,"settings.view.actions.reloadOpenCodeTooltip":`重新啟動 OpenCode 並重新載入其設定。`,"settings.view.actions.backToSettings":`返回設定頁`,"settings.view.actions.closeSettings":`關閉設定`,"settings.view.actions.openSectionList":`開啟群組清單`,"settings.view.actions.closeSettingsWithShortcut":`關閉設定({shortcut}+,)`,"settings.view.actions.back":`返回`,"settings.view.actions.resizeNavigation":`調整設定導覽寬度`,"settings.view.navigation.groups.connection":`連線`,"settings.view.navigation.groups.personalization":`個人化`,"settings.view.navigation.groups.workspace":`工作區`,"settings.view.navigation.groups.opencode":`OpenCode`,"settings.view.navigation.groups.content":`內容與自動化`,"settings.view.navigation.groups.system":`系統`,"settings.view.search.placeholder":`搜尋設定`,"settings.view.search.aria":`搜尋設定`,"settings.view.search.clear":`清除設定搜尋`,"settings.view.search.noResults":`沒有符合的設定`,"settings.page.projects.title":`專案`,"settings.page.remoteInstances.title":`遠端執行個體`,"settings.page.providers.title":`供應商`,"settings.page.usage.title":`用量`,"settings.page.agents.title":`Agents`,"settings.page.commands.title":`命令`,"settings.page.mcp.title":`MCP`,"settings.page.skills.title":`Skills`,"settings.page.skillsCatalog.title":`Skills 目錄`,"settings.page.git.title":`Git`,"settings.page.appearance.title":`外觀`,"settings.page.chat.title":`聊天`,"settings.page.shortcuts.title":`快速鍵`,"settings.page.sessions.title":`工作階段`,"settings.page.summaryAI.title":`智慧摘要`,"settings.page.magicPrompts.title":`魔法提示詞`,"settings.page.notifications.title":`通知`,"settings.page.voice.title":`語音`,"settings.page.about.title":`關於`,"settings.page.snippets.title":`程式片段`,"settings.snippets.sidebar.title":`程式片段`,"settings.snippets.sidebar.total":`共 {count} 個`,"settings.snippets.sidebar.actions.create":`創建程式片段`,"settings.snippets.sidebar.actions.more":`{name} 的更多操作`,"settings.snippets.sidebar.toast.deleted":`程式片段已刪除`,"settings.snippets.sidebar.toast.deleteFailed":`刪除程式片段失敗`,"settings.snippets.sidebar.dialog.deleteTitle":`刪除程式片段?`,"settings.snippets.sidebar.dialog.deleteDescription":`這將永久刪除 #{name}。`,"settings.snippets.page.empty.title":`選擇程式片段`,"settings.snippets.page.empty.description":`從側邊欄選擇程式片段進行編輯。`,"settings.snippets.page.title.new":`新建程式片段`,"settings.snippets.page.field.namePlaceholder":`snippet-name`,"settings.snippets.page.field.descriptionPlaceholder":`這個程式片段的作用`,"settings.snippets.page.field.aliases":`別名`,"settings.snippets.page.field.aliasesPlaceholder":`safe, careful`,"settings.snippets.page.field.content":`內容`,"settings.snippets.page.field.contentPlaceholder":`程式片段 Markdown...`,"settings.snippets.page.hint":`在提示詞中使用 #name。支援別名與 opencode-snippets 相容的 prepend/append 區塊。`,"settings.snippets.page.toast.nameRequired":`程式片段名稱為必填項`,"settings.snippets.page.toast.contentRequired":`程式片段內容為必填項`,"settings.snippets.page.toast.saveFailed":`保存程式片段失敗`,"settings.snippets.page.toast.saved":`程式片段已保存`,"settings.magicPrompts.sidebar.title":`魔法提示詞`,"settings.magicPrompts.sidebar.description":`選擇要編輯的提示詞模板。`,"settings.magicPrompts.sidebar.group.git":`Git`,"settings.magicPrompts.sidebar.group.github":`GitHub`,"settings.magicPrompts.sidebar.group.planning":`規劃`,"settings.magicPrompts.sidebar.group.session":`工作階段`,"settings.magicPrompts.sidebar.item.gitCommitGenerate":`提交生成`,"settings.magicPrompts.sidebar.item.gitPrGenerate":`PR 產生`,"settings.magicPrompts.sidebar.item.gitConflictResolve":`Merge/Rebase 衝突解決`,"settings.magicPrompts.sidebar.item.gitCherrypickConflictResolve":`Cherry-pick 衝突解決`,"settings.magicPrompts.sidebar.item.githubPrReview":`PR 審查`,"settings.magicPrompts.sidebar.item.githubIssueReview":`Issue 審查`,"settings.magicPrompts.sidebar.item.githubPrFailedChecksReview":`PR 失敗檢查審查`,"settings.magicPrompts.sidebar.item.githubPrCommentsReview":`PR 評論審查`,"settings.magicPrompts.sidebar.item.githubSinglePrCommentReview":`單則 PR 評論審查`,"settings.magicPrompts.sidebar.item.planTodo":`待辦規劃`,"settings.magicPrompts.sidebar.item.planImprove":`改進計畫`,"settings.magicPrompts.sidebar.item.planImplement":`執行計畫`,"settings.magicPrompts.sidebar.item.sessionSummary":`工作階段總結`,"settings.magicPrompts.sidebar.item.sessionWorkspaceReview":`工作區審查`,"settings.magicPrompts.sidebar.item.sessionExplore":`程式碼庫導覽`,"settings.magicPrompts.sidebar.item.sessionFeaturePlan":`功能規劃`,"settings.magicPrompts.sidebar.item.sessionCraftGoal":`建立 Goal`,"settings.magicPrompts.page.group.sessionCraftGoal.title":`建立 Goal`,"settings.magicPrompts.page.group.sessionCraftGoal.description":`由 /craft-goal 斜線命令使用的提示詞:可見使用者訊息 + 隱藏說明。透過引導式探索將想法或任務轉化為清晰且有證據可驗證的 Goal。`,"settings.magicPrompts.sidebar.item.sessionCatchUp":`快速回顧`,"settings.magicPrompts.sidebar.item.sessionDebug":`除錯`,"settings.magicPrompts.sidebar.item.sessionWeigh":`權衡方案`,"settings.magicPrompts.sidebar.item.sessionFusion":`Fusion`,"settings.remoteInstances.sidebar.title":`遠端執行個體`,"settings.remoteInstances.sidebar.description":`透過匯入連結或 SSH 連線其他 OpenChamber 伺服器。`,"settings.remoteInstances.sidebar.empty":`尚無遠端執行個體。可匯入連結或新增 SSH 連線。`,"settings.remoteInstances.channel.link":`連結`,"settings.remoteInstances.channel.ssh":`SSH`,"settings.remoteInstances.sidebar.total":`總計 {count}`,"settings.remoteInstances.sidebar.newSshInstanceName":`新增 SSH 執行個體`,"settings.remoteInstances.sidebar.actions.addSshInstance":`新增 SSH 執行個體`,"settings.remoteInstances.sidebar.actions.connect":`連線`,"settings.remoteInstances.sidebar.actions.disconnect":`中斷連線`,"settings.remoteInstances.sidebar.actions.retry":`重試`,"settings.remoteInstances.sidebar.actions.remove":`移除`,"settings.remoteInstances.sidebar.confirm.localPortInUseRetry":`本機連接埠已被佔用。是否選擇一個隨機可用本機連接埠並重試?`,"settings.remoteInstances.sidebar.toast.createFailed":`建立 SSH 執行個體失敗`,"settings.remoteInstances.sidebar.toast.retriedWithRandomPort":`已使用隨機本機連接埠重試`,"settings.remoteInstances.sidebar.toast.connectFailed":`連線執行個體失敗`,"settings.remoteInstances.sidebar.toast.disconnectFailed":`中斷執行個體連線失敗`,"settings.remoteInstances.sidebar.toast.retryFailed":`重試連線失敗`,"settings.remoteInstances.sidebar.toast.removeFailed":`移除執行個體失敗`,"settings.remoteInstances.sidebar.phase.ready":`就緒`,"settings.remoteInstances.sidebar.phase.error":`錯誤`,"settings.remoteInstances.sidebar.phase.reconnect":`重新連線`,"settings.remoteInstances.sidebar.phase.installing":`安裝中`,"settings.remoteInstances.sidebar.phase.updating":`更新中`,"settings.remoteInstances.sidebar.phase.forwarding":`轉送中`,"settings.remoteInstances.sidebar.phase.starting":`啟動中`,"settings.remoteInstances.sidebar.phase.connecting":`連線中`,"settings.remoteInstances.sidebar.phase.idle":`可用`,"settings.remoteInstances.direct.sidebarTitle":`直接連線`,"settings.remoteInstances.direct.sidebarDescription":`使用配對連結連線`,"settings.remoteInstances.direct.title":`直接遠端執行個體`,"settings.remoteInstances.direct.description":`此應用程式可切換到的伺服器。從另一台伺服器匯入配對連結。`,"settings.remoteInstances.direct.import.description":`貼上 connect-url 輸出或 openchamber://connect 連結來匯入。`,"settings.remoteInstances.direct.import.placeholder":`貼上連線連結`,"settings.remoteInstances.direct.import.action":`匯入連線`,"settings.remoteInstances.direct.error.invalidConnectLink":`連線連結無效`,"settings.remoteInstances.direct.state.loading":`正在載入直接連線...`,"settings.remoteInstances.direct.state.empty":`尚未匯入其他伺服器。`,"settings.remoteInstances.clientAuth.title":`用戶端存取 token`,"settings.remoteInstances.clientAuth.description":`建立與管理可讓桌面或遠端用戶端連線的 token。`,"settings.remoteInstances.clientAuth.field.labelPlaceholder":`實例名稱 — 例如 家裡的電腦`,"settings.remoteInstances.clientAuth.field.labelHint":`另一台裝置會用這個名字顯示此伺服器。`,"settings.remoteInstances.clientAuth.actions.create":`建立 token`,"settings.remoteInstances.clientAuth.actions.pair":`配對裝置`,"settings.remoteInstances.clientAuth.actions.revoke":`撤銷`,"settings.remoteInstances.clientAuth.actions.clearRevoked":`清除已撤銷`,"settings.remoteInstances.clientAuth.qrAlt":`配對 QR code`,"settings.remoteInstances.clientAuth.qrEnlarge":`放大 QR code`,"settings.remoteInstances.clientAuth.qrScanHint":`用另一台裝置上的 OpenChamber 應用程式掃描。一次性使用且會過期。`,"settings.remoteInstances.clientAuth.qrDialogTitle":`掃碼連線`,"settings.remoteInstances.clientAuth.actions.addDevice":`新增裝置`,"settings.remoteInstances.clientAuth.actions.copied":`已複製`,"settings.remoteInstances.clientAuth.addDevice.transportLabel":`你會在哪裡使用這台裝置?`,"settings.remoteInstances.clientAuth.addDevice.subtitle":`建立一次性 QR 代碼,將另一台裝置連線到此伺服器。`,"settings.remoteInstances.clientAuth.addDevice.transport.local":`僅本機`,"settings.remoteInstances.clientAuth.addDevice.transport.localHint":`供同一台電腦上的應用程式使用。`,"settings.remoteInstances.clientAuth.addDevice.transport.lan":`僅家用網路`,"settings.remoteInstances.clientAuth.addDevice.transport.lanHint":`透過 Wi-Fi 直接連線。離開此網路後無法使用。`,"settings.remoteInstances.clientAuth.addDevice.transport.relay":`任何地方`,"settings.remoteInstances.clientAuth.addDevice.transport.relayHint":`在家與外出都可用。外出時流量經由 OpenChamber Private Relay(端對端加密隧道)傳輸,無需設定。`,"settings.remoteInstances.clientAuth.addDevice.fallback.relay":`外出時也允許透過加密中繼連線`,"settings.remoteInstances.clientAuth.addDevice.fallback.preferLocal":`在家時優先使用直接連線`,"settings.remoteInstances.clientAuth.addDevice.relayUrlLabel":`Relay 伺服器`,"settings.remoteInstances.clientAuth.addDevice.relayUrlHint":`使用 OpenChamber 官方 Relay,或輸入你自己的 ws:// 或 wss:// 位址。裝置會儲存 QR Code 中的該位址。`,"settings.remoteInstances.clientAuth.addDevice.relayUrlDeployLink":`可部署自己的 Relay 服務。`,"settings.remoteInstances.clientAuth.addDevice.relayUrlLockedHint":`此伺服器已透過 OPENCHAMBER_RELAY_URL 固定 Relay 位址。`,"settings.remoteInstances.clientAuth.addDevice.relayUrlInvalid":`請輸入以 ws:// 或 wss:// 開頭的有效 Relay 位址。`,"settings.remoteInstances.clientAuth.addDevice.create":`建立 QR 代碼`,"settings.remoteInstances.clientAuth.addDevice.targetLabel":`目標實例`,"settings.remoteInstances.clientAuth.addDevice.target.local":`本機`,"settings.remoteInstances.clientAuth.addDevice.target.sshEmpty":`尚無已連線的 SSH 實例`,"settings.remoteInstances.clientAuth.addDevice.target.sshNotReady":`請先連線該 SSH 實例`,"settings.remoteInstances.sidebar.actions.mobileConnect":`手機連線`,"settings.remoteInstances.sidebar.actions.mobileConnectAria":`為 {instance} 產生手機配對 QR 碼`,"settings.remoteInstances.sidebar.actions.mobileConnectDisabled":`請先連線該 SSH 實例再配對手機`,"settings.remoteInstances.sidebar.actions.syncConfigDisabled":`請先連線該實例再同步設定`,"settings.remoteInstances.sidebar.actions.syncConfig":`同步設定`,"settings.remoteInstances.clientAuth.addDevice.done":`完成`,"settings.remoteInstances.clientAuth.addDevice.connectedToast":`裝置已連線。`,"settings.remoteInstances.clientAuth.pairingUrl":`配對 URL`,"settings.remoteInstances.clientAuth.createdToken":`已建立 token`,"settings.remoteInstances.clientAuth.state.loading":`正在載入用戶端 token...`,"settings.remoteInstances.clientAuth.state.empty":`尚無用戶端 token。`,"settings.remoteInstances.clientAuth.state.revoked":`已撤銷`,"settings.remoteInstances.clientAuth.state.thisDevice":`此裝置`,"settings.remoteInstances.clientAuth.state.pending":`等待連線…`,"settings.remoteInstances.clientAuth.state.viaRelay":`Relay`,"settings.remoteInstances.clientAuth.state.connectedDirect":`已連線 · 區域網路`,"settings.remoteInstances.clientAuth.state.connectedRelay":`已連線 · 中繼`,"settings.remoteInstances.clientAuth.lastUsed":`上次使用:{date}`,"settings.remoteInstances.clientAuth.neverUsed":`從未使用`,"settings.remoteInstances.relay.title":`OpenChamber Relay`,"settings.remoteInstances.relay.autoHint":`透過中繼配對裝置時自動開啟。`,"settings.remoteInstances.relay.description":`無需開放連接埠,即可讓你的其他裝置從任何地方連線。流量端對端加密,中繼無法讀取內容。`,"settings.remoteInstances.relay.enableHint":`在此伺服器上啟用中繼之前,不會共享任何內容。`,"settings.remoteInstances.relay.actions.enable":`啟用中繼`,"settings.remoteInstances.relay.actions.disable":`停用`,"settings.remoteInstances.relay.confirm.disable":`停用中繼?透過它連線的裝置將立即中斷連線。`,"settings.remoteInstances.relay.state.loading":`正在檢查中繼狀態...`,"settings.remoteInstances.relay.state.disabled":`已停用`,"settings.remoteInstances.relay.state.connecting":`連線中`,"settings.remoteInstances.relay.state.connected":`已連線`,"settings.remoteInstances.relay.state.reconnecting":`重新連線中`,"settings.remoteInstances.relay.state.error":`錯誤`,"settings.remoteInstances.relay.status.clientsOne":`已連線 {count} 台裝置`,"settings.remoteInstances.relay.status.clientsMany":`已連線 {count} 台裝置`,"settings.remoteInstances.relay.pair.title":`配對裝置`,"settings.remoteInstances.relay.pair.labelPlaceholder":`裝置名稱(選填)`,"settings.remoteInstances.relay.pair.includeToken":`包含存取權杖(掃一次即完成配對)`,"settings.remoteInstances.relay.pair.noTokenHint":`不包含權杖時,裝置連線後需使用此伺服器的介面密碼登入。`,"settings.remoteInstances.relay.pair.generate":`建立配對連結`,"settings.remoteInstances.relay.pair.requiresConnected":`中繼連線後即可配對。`,"settings.remoteInstances.relay.pair.linkLabel":`配對連結`,"settings.remoteInstances.relay.pair.warning":`此連結可存取此伺服器,請勿分享。`,"settings.remoteInstances.relay.pair.qrAlt":`中繼配對 QR 碼`,"settings.remoteInstances.relay.pair.showQr":`顯示 QR 碼`,"settings.remoteInstances.relay.pair.qrDialogTitle":`掃描配對`,"settings.remoteInstances.relay.pair.qrDialogDescription":`用另一台裝置上的 OpenChamber 應用程式掃描此 QR 碼。`,"settings.remoteInstances.relay.pair.manageHint":`可在上方「連線到此伺服器」清單中管理或撤銷已配對的裝置。`,"settings.remoteInstances.relay.toast.enableFailed":`無法啟用中繼`,"settings.remoteInstances.relay.toast.disableFailed":`無法停用中繼`,"settings.remoteInstances.relay.toast.offerFailed":`無法建立配對連結`,"settings.remoteInstances.relay.toast.linkCopied":`已複製配對連結`,"settings.remoteInstances.page.section.instance":`執行個體`,"settings.remoteInstances.page.section.instanceDescription":`核心 SSH 設定。`,"settings.remoteInstances.page.field.mode":`模式`,"settings.remoteInstances.page.field.modeHint":`Managed 模式會在遠端安裝/更新並啟動 OpenChamber。External 模式假設它已在執行。`,"settings.remoteInstances.page.field.modePlaceholder":`選擇模式`,"settings.remoteInstances.page.field.modeManaged":`Managed(自動啟動)`,"settings.remoteInstances.page.field.modeExternal":`External(已在執行)`,"settings.remoteInstances.page.field.preferredRemotePort":`偏好遠端連接埠`,"settings.remoteInstances.page.field.preferredRemotePortHint":`OpenChamber 在遠端主機使用的連接埠。留空則由執行時自動選擇。`,"settings.remoteInstances.page.field.keepServerRunning":`保持服務執行`,"settings.remoteInstances.page.field.keepServerRunningHint":`啟用後,中斷連線時會保留遠端 OpenChamber 背景程式。`,"settings.remoteInstances.page.field.bindHost":`綁定主機`,"settings.remoteInstances.page.field.bindHostHint":`主本機存取位址使用的網路介面。使用 127.0.0.1/localhost 可僅限本機存取。`,"settings.remoteInstances.page.field.preferredLocalPort":`偏好本機連接埠`,"settings.remoteInstances.page.field.preferredLocalPortHint":`主 OpenChamber tunnel 的偏好本機連接埠。留空自動選擇。`,"settings.remoteInstances.page.field.forwardType":`轉送類型`,"settings.remoteInstances.page.field.localListen":`本機監聽`,"settings.remoteInstances.page.field.localTarget":`本機目標`,"settings.remoteInstances.page.field.remoteListen":`遠端監聽`,"settings.remoteInstances.page.field.remoteTarget":`遠端目標`,"settings.remoteInstances.page.field.localHostPlaceholder":`127.0.0.1`,"settings.remoteInstances.page.field.remoteHostPlaceholder":`127.0.0.1`,"settings.remoteInstances.page.field.auto":`自動`,"settings.remoteInstances.page.confirm.bindAllInterfaces":`綁定到 0.0.0.0 會將轉送連接埠暴露到本機網路。是否繼續?`,"settings.remoteInstances.page.preview.localSocks5":`(本機 SOCKS5)`,"settings.remoteInstances.page.preview.local":`(本機)`,"settings.remoteInstances.page.preview.remote":`(遠端)`,"settings.remoteInstances.page.toast.openLocalEndpointFailed":`開啟本機端點失敗`,"settings.remoteInstances.page.toast.localUrlCopied":`本機 URL 已複製`,"settings.remoteInstances.page.actions.copyLocalUrl":`複製本機 URL`,"settings.remoteInstances.page.actions.open":`開啟`,"settings.remoteInstances.page.logsDialog.selectedInstanceFallback":`所選執行個體`,"settings.remoteInstances.page.patternDialog.descriptionWithHost":`{host} 需要一個具體目標地址。`,"settings.remoteInstances.page.patternDialog.description":`輸入目標地址。`,"settings.common.actions.cancel":`取消`,"settings.common.actions.create":`建立`,"settings.common.actions.delete":`刪除`,"settings.common.actions.reset":`重設`,"settings.common.actions.rename":`重新命名`,"settings.common.actions.duplicate":`複製`,"settings.common.actions.import":`匯入`,"settings.common.actions.copyAll":`全部複製`,"settings.common.actions.clear":`清除`,"settings.common.actions.saving":`儲存中...`,"settings.common.actions.saveChanges":`儲存變更`,"settings.common.scope.global":`全域`,"settings.common.scope.project":`專案`,"settings.common.field.description":`說明`,"settings.common.badge.new":`新增`,"settings.common.badge.modified":`已修改`,"settings.common.permission.allow":`允許`,"settings.common.permission.ask":`詢問`,"settings.common.permission.deny":`拒絕`,"settings.common.state.comingSoon":`即將推出...`,"settings.projects.actions.title":`操作`,"settings.projects.actions.description":`按專案顯示在專案名稱旁標題列中的命令。`,"settings.projects.actions.validation.fillNameAndCommand":`儲存前請填寫操作名稱和命令。`,"settings.projects.actions.state.loading":`載入中...`,"settings.projects.actions.state.empty":`尚未設定任何操作。`,"settings.projects.actions.state.untitled":`未命名操作`,"settings.projects.actions.state.noDesktopSshForwards":`沒有可用的本機 SSH 轉送。`,"settings.projects.actions.field.selectIconAria":`選擇圖示`,"settings.projects.actions.field.iconAria":`圖示 {icon}`,"settings.projects.actions.field.actionNamePlaceholder":`操作名稱`,"settings.projects.actions.field.command":`命令`,"settings.projects.actions.field.commandPlaceholder":`例如 bun run lint`,"settings.projects.actions.field.autoOpenUrl":`自動開啟 URL`,"settings.projects.actions.field.autoOpenUrlForAria":`為 {title} 自動開啟 URL`,"settings.projects.actions.field.autoOpenUrlDescription":`從輸出中開啟 URL,或使用下面的自訂 URL`,"settings.projects.actions.field.overrideUrlPlaceholder":`覆寫 URL(可選)`,"settings.projects.actions.field.overrideUrlTooltip":`如果填寫此欄位,將使用自訂 URL。為空時,應用程式會從輸出中選擇最合適的 URL 開啟。`,"settings.projects.actions.field.desktopSshForward":`桌面 SSH 轉送`,"settings.projects.actions.field.useOutputManualUrl":`使用輸出/手動 URL`,"settings.projects.actions.actions.add":`新增操作`,"settings.projects.actions.actions.save":`儲存操作`,"settings.projects.actions.toast.saveFailed":`儲存操作失敗`,"settings.projects.actions.toast.saved":`專案操作已儲存`,"settings.openchamber.about.title":`關於 OpenChamber`,"settings.openchamber.about.field.version":`版本`,"settings.openchamber.about.field.clientVersion":`用戶端`,"settings.openchamber.about.field.instanceOpenChamberVersion":`OpenChamber`,"settings.openchamber.about.field.instanceOpenCodeVersion":`OpenCode`,"settings.openchamber.about.field.openCodeVersion":`OpenCode 版本`,"settings.openchamber.about.state.checking":`檢查中...`,"settings.openchamber.about.state.upToDate":`已是最新`,"settings.openchamber.about.state.unknown":`未知`,"settings.openchamber.about.actions.checkUpdates":`檢查更新`,"settings.openchamber.about.actions.update":`更新`,"settings.openchamber.about.actions.updateToVersion":`更新到 {version}`,"settings.openchamber.about.actions.checkForUpdates":`檢查更新`,"settings.openchamber.about.toast.latestVersion":`你已是最新版本`,"settings.openchamber.about.toast.checkFailed":`無法檢查更新`,"settings.openchamber.about.diagnostics.label":`診斷日誌`,"settings.openchamber.about.diagnostics.description":`匯出本機診斷 feat,用於分析顯示與同步問題。不包含訊息正文或權杖。`,"settings.openchamber.about.diagnostics.export":`匯出日誌`,"settings.openchamber.about.diagnostics.exporting":`正在匯出…`,"settings.openchamber.about.diagnostics.enable":`記錄診斷 feat`,"settings.openchamber.about.diagnostics.enableHint":`僅測試版可用。在本機記錄工作階段同步與顯示生命週期,不含正文。`,"settings.openchamber.about.diagnostics.toast.exported":`已匯出診斷日誌`,"settings.openchamber.about.diagnostics.toast.failed":`無法匯出診斷日誌`,"settings.openchamber.about.diagnostics.toast.empty":`已匯出診斷日誌。尚未記錄任何事件。`,"settings.agents.sidebar.title":`Agents`,"settings.agents.sidebar.total":`總計 {count}`,"settings.agents.sidebar.empty.title":`未設定 agents`,"settings.agents.sidebar.empty.description":`使用上方 + 按鈕建立一個`,"settings.agents.sidebar.section.builtIn":`內建 Agents`,"settings.agents.sidebar.section.custom":`自訂 Agents`,"settings.agents.sidebar.badge.system":`系統`,"settings.agents.sidebar.dialog.deleteTitle":`刪除 Agent`,"settings.agents.sidebar.dialog.resetTitle":`重設 Agent`,"settings.agents.sidebar.dialog.deleteDescription":`確定要刪除 agent「{name}」嗎?`,"settings.agents.sidebar.dialog.resetDescription":`確定要將 agent「{name}」重設為預設設定嗎?`,"settings.agents.sidebar.renameDialog.title":`重新命名 Agent`,"settings.agents.sidebar.renameDialog.description":`為 agent「@{name}」輸入新名稱`,"settings.agents.sidebar.renameDialog.placeholder":`新 agent 名稱...`,"settings.agents.sidebar.toast.builtInCannotDelete":`內建 agents 無法刪除`,"settings.agents.sidebar.toast.agentDeleted":`Agent「{name}」已刪除`,"settings.agents.sidebar.toast.agentReset":`Agent「{name}」已重設為預設值`,"settings.agents.sidebar.toast.deleteFailed":`刪除 agent 失敗`,"settings.agents.sidebar.toast.definitionNotFound":`找不到 agent 定義。未變更任何內容。`,"settings.agents.sidebar.toast.resetFailed":`重設 agent 失敗`,"settings.agents.sidebar.toast.agentNameRequired":`Agent 名稱為必填項`,"settings.agents.sidebar.toast.agentExists":`已存在同名 agent`,"settings.agents.sidebar.toast.removeOldAfterRenameFailed":`重新命名後移除舊 agent 失敗`,"settings.agents.sidebar.toast.renameFailed":`重新命名 agent 失敗`,"settings.agents.sidebar.toast.agentRenamed":`Agent 已重新命名為 "{name}"`,"settings.agents.page.toast.permissionNameRequired":`權限名稱為必填項`,"settings.agents.page.toast.created":`Agent 建立成功`,"settings.agents.page.toast.updated":`Agent 更新成功`,"settings.agents.page.toast.createFailed":`建立 agent 失敗`,"settings.agents.page.toast.updateFailed":`更新 agent 失敗`,"settings.agents.page.toast.saveUnexpectedError":`儲存時發生錯誤`,"settings.agents.page.toast.savedManualRestart":`已儲存到磁碟。請重新啟動已連線的 OpenCode 伺服器以套用變更。`,"settings.agents.page.empty.title":`從側邊欄選擇一個 agent`,"settings.agents.page.empty.description":`或建立一個 agent`,"settings.agents.page.title.new":`新增 Agent`,"settings.agents.page.subtitle.new":`設定新的助理人格`,"settings.agents.page.subtitle.edit":`編輯 agent 設定`,"settings.agents.page.section.identityRole":`身分與角色`,"settings.agents.page.section.modelParameters":`模型與參數`,"settings.agents.page.section.systemPrompt":`系統提示詞`,"settings.agents.page.section.toolPermissions":`工具權限`,"settings.agents.page.field.agentName":`Agent 名稱`,"settings.agents.page.field.agentNamePlaceholder":`agent-name`,"settings.agents.page.field.scopePlaceholder":`作用域`,"settings.agents.page.field.descriptionPlaceholder":`這個 agent 的作用是什麼?`,"settings.agents.page.field.mode":`模式`,"settings.agents.page.field.modeTooltip":`Primary 與 Subagent 可見性`,"settings.agents.page.field.overrideModel":`覆寫模型`,"settings.agents.page.field.variant":`思考變體`,"settings.agents.page.field.variantTooltip":`選填。如果模型支援推理,變體控制推理深度。`,"settings.agents.page.field.variantHint":`模型特定(如 Anthropic variant)`,"settings.agents.page.field.variantPlaceholder":`例如 high, max, low, none`,"settings.agents.page.field.temperature":`Temperature`,"settings.agents.page.field.temperatureTooltip":`控制隨機性。越高越有創造力,越低越聚焦。`,"settings.agents.page.field.temperatureRange":`0.0 到 2.0`,"settings.agents.page.field.clearTemperatureAria":`清除 Temperature 覆寫`,"settings.agents.page.field.topP":`Top P`,"settings.agents.page.field.topPTooltip":`核取樣多樣性。越低越傾向高機率 token。`,"settings.agents.page.field.topPRange":`0.0 到 1.0`,"settings.agents.page.field.clearTopPAria":`清除 Top P 覆寫`,"settings.agents.page.field.systemPromptPlaceholder":`你是一名專業程式碼撰寫助理...`,"settings.agents.page.mode.primary":`Primary`,"settings.agents.page.mode.subagent":`Subagent`,"settings.agents.page.mode.all":`全部`,"settings.agents.page.permissions.defaultLabel":`預設`,"settings.agents.page.permissions.hideEditor":`隱藏編輯器`,"settings.agents.page.permissions.advancedEditor":`進階編輯器`,"settings.agents.page.permissions.globalSummary":`全域:{summary}`,"settings.agents.page.permissions.rulesSummary":`規則:{summary}`,"settings.agents.page.permissions.globalDefault":`全域預設`,"settings.agents.page.permissions.pattern":`模式`,"settings.agents.page.permissions.addCustomRule":`新增自訂規則`,"settings.agents.page.permissions.permissionPlaceholder":`權限...`,"settings.agents.page.permissions.patternPlaceholder":`模式(例如 *)`,"settings.page.behavior.title":`行為`,"settings.behavior.page.title":`行為`,"settings.behavior.page.warning.title":`全域規則會與專案規則合併使用`,"settings.behavior.page.warning.description":`此處所做的變更會更新 {path}。當專案級 AGENTS.md 存在時,OpenCode 也會包含它。`,"settings.behavior.page.section.systemPrompt":`全域 AGENTS.md`,"settings.behavior.page.field.systemPromptPlaceholder":`你是一個有幫助的 AI 助助理...
|
|
1
|
+
var e={"settings.globalConfig.title":`全域設定`,"settings.globalConfig.description":`編輯 ~/.config/opencode 中目前生效的設定檔。`,"settings.globalConfig.actions.reload":`重新載入檔案`,"settings.globalConfig.restartHint":`儲存後重新啟動 OpenCode,使設定變更生效。`,"settings.globalConfig.toast.loadFailed":`載入設定檔失敗`,"settings.globalConfig.toast.saveFailed":`儲存設定檔失敗`,"settings.globalConfig.toast.saved":`設定已儲存。重新啟動 OpenCode 後生效。`,"settings.providers.page.openCodeGo.title":`OpenCode Go 用量追蹤`,"settings.providers.page.openCodeGo.description":`連接 OpenCode Go 控制面板以顯示滾動、每週和每月配額。`,"settings.providers.page.openCodeGo.workspaceId":`工作區 ID`,"settings.providers.page.openCodeGo.authCookie":`驗證 Cookie`,"settings.providers.page.openCodeGo.help":`從控制面板網址複製工作區 ID,並從瀏覽器開發者工具複製 auth Cookie。OpenChamber 絕不會掃描瀏覽器 Cookie 儲存空間。`,"settings.providers.page.openCodeGo.save":`儲存並驗證`,"settings.providers.page.openCodeGo.replace":`取代`,"settings.providers.page.openCodeGo.validate":`驗證`,"settings.providers.page.openCodeGo.delete":`刪除`,"settings.providers.page.quotaCredentials.saved":`已儲存 {provider} 憑證。`,"settings.providers.page.openCodeGo.saveFailed":`無法驗證 OpenCode Go 憑證。`,"settings.providers.page.openCodeGo.valid":`OpenCode Go 憑證有效。`,"settings.providers.page.openCodeGo.invalid":`OpenCode Go 憑證無效或已過期。`,"settings.providers.page.openCodeGo.deleted":`已刪除 OpenCode Go 憑證。`,"settings.providers.page.openCodeGo.deleteFailed":`無法刪除 OpenCode Go 憑證。`,"settings.appearance.language.label":`語言`,"settings.appearance.language.description":`選擇介面語言。`,"settings.appearance.language.select":`選擇語言`,"settings.window.description":`OpenChamber 設定視窗。`,"settings.view.home.title":`設定`,"settings.view.home.description":`跳轉到常用頁面。`,"settings.view.home.cards.providers.title":`供應商`,"settings.view.home.cards.providers.description":`連線模型和憑證`,"settings.view.home.cards.agents.title":`Agents`,"settings.view.home.cards.agents.description":`提示詞、工具、權限`,"settings.view.home.cards.skillsCatalog.title":`Skills 目錄`,"settings.view.home.cards.skillsCatalog.description":`從目錄安裝 skills`,"settings.view.home.cards.mcp.title":`MCP`,"settings.view.home.cards.mcp.description":`設定 MCP 伺服器和連線`,"settings.view.home.cards.usage.title":`用量`,"settings.view.home.cards.usage.description":`配額和花費可見性`,"settings.view.unavailable.title":`無法使用`,"settings.view.unavailable.description":`此設定頁面在目前執行環境中無法使用。`,"settings.view.badge.beta":`beta`,"settings.view.actions.reloadOpenCode":`重新載入 OpenCode`,"settings.view.actions.reloadOpenCodeTooltip":`重新啟動 OpenCode 並重新載入其設定。`,"settings.view.actions.backToSettings":`返回設定頁`,"settings.view.actions.closeSettings":`關閉設定`,"settings.view.actions.openSectionList":`開啟群組清單`,"settings.view.actions.closeSettingsWithShortcut":`關閉設定({shortcut}+,)`,"settings.view.actions.back":`返回`,"settings.view.actions.resizeNavigation":`調整設定導覽寬度`,"settings.view.navigation.groups.connection":`連線`,"settings.view.navigation.groups.personalization":`個人化`,"settings.view.navigation.groups.workspace":`工作區`,"settings.view.navigation.groups.opencode":`OpenCode`,"settings.view.navigation.groups.content":`內容與自動化`,"settings.view.navigation.groups.system":`系統`,"settings.view.search.placeholder":`搜尋設定`,"settings.view.search.aria":`搜尋設定`,"settings.view.search.clear":`清除設定搜尋`,"settings.view.search.noResults":`沒有符合的設定`,"settings.page.projects.title":`專案`,"settings.page.remoteInstances.title":`遠端執行個體`,"settings.page.providers.title":`供應商`,"settings.page.usage.title":`用量`,"settings.page.agents.title":`Agents`,"settings.page.commands.title":`命令`,"settings.page.mcp.title":`MCP`,"settings.page.skills.title":`Skills`,"settings.page.skillsCatalog.title":`Skills 目錄`,"settings.page.git.title":`Git`,"settings.page.appearance.title":`外觀`,"settings.page.chat.title":`聊天`,"settings.page.shortcuts.title":`快速鍵`,"settings.page.sessions.title":`工作階段`,"settings.page.summaryAI.title":`智慧摘要`,"settings.page.magicPrompts.title":`魔法提示詞`,"settings.page.notifications.title":`通知`,"settings.page.voice.title":`語音`,"settings.page.about.title":`關於`,"settings.page.snippets.title":`程式片段`,"settings.snippets.sidebar.title":`程式片段`,"settings.snippets.sidebar.total":`共 {count} 個`,"settings.snippets.sidebar.actions.create":`創建程式片段`,"settings.snippets.sidebar.actions.more":`{name} 的更多操作`,"settings.snippets.sidebar.toast.deleted":`程式片段已刪除`,"settings.snippets.sidebar.toast.deleteFailed":`刪除程式片段失敗`,"settings.snippets.sidebar.dialog.deleteTitle":`刪除程式片段?`,"settings.snippets.sidebar.dialog.deleteDescription":`這將永久刪除 #{name}。`,"settings.snippets.page.empty.title":`選擇程式片段`,"settings.snippets.page.empty.description":`從側邊欄選擇程式片段進行編輯。`,"settings.snippets.page.title.new":`新建程式片段`,"settings.snippets.page.field.namePlaceholder":`snippet-name`,"settings.snippets.page.field.descriptionPlaceholder":`這個程式片段的作用`,"settings.snippets.page.field.aliases":`別名`,"settings.snippets.page.field.aliasesPlaceholder":`safe, careful`,"settings.snippets.page.field.content":`內容`,"settings.snippets.page.field.contentPlaceholder":`程式片段 Markdown...`,"settings.snippets.page.hint":`在提示詞中使用 #name。支援別名與 opencode-snippets 相容的 prepend/append 區塊。`,"settings.snippets.page.toast.nameRequired":`程式片段名稱為必填項`,"settings.snippets.page.toast.contentRequired":`程式片段內容為必填項`,"settings.snippets.page.toast.saveFailed":`保存程式片段失敗`,"settings.snippets.page.toast.saved":`程式片段已保存`,"settings.magicPrompts.sidebar.title":`魔法提示詞`,"settings.magicPrompts.sidebar.description":`選擇要編輯的提示詞模板。`,"settings.magicPrompts.sidebar.group.git":`Git`,"settings.magicPrompts.sidebar.group.github":`GitHub`,"settings.magicPrompts.sidebar.group.planning":`規劃`,"settings.magicPrompts.sidebar.group.session":`工作階段`,"settings.magicPrompts.sidebar.item.gitCommitGenerate":`提交生成`,"settings.magicPrompts.sidebar.item.gitPrGenerate":`PR 產生`,"settings.magicPrompts.sidebar.item.gitConflictResolve":`Merge/Rebase 衝突解決`,"settings.magicPrompts.sidebar.item.gitCherrypickConflictResolve":`Cherry-pick 衝突解決`,"settings.magicPrompts.sidebar.item.githubPrReview":`PR 審查`,"settings.magicPrompts.sidebar.item.githubIssueReview":`Issue 審查`,"settings.magicPrompts.sidebar.item.githubPrFailedChecksReview":`PR 失敗檢查審查`,"settings.magicPrompts.sidebar.item.githubPrCommentsReview":`PR 評論審查`,"settings.magicPrompts.sidebar.item.githubSinglePrCommentReview":`單則 PR 評論審查`,"settings.magicPrompts.sidebar.item.planTodo":`待辦規劃`,"settings.magicPrompts.sidebar.item.planImprove":`改進計畫`,"settings.magicPrompts.sidebar.item.planImplement":`執行計畫`,"settings.magicPrompts.sidebar.item.sessionSummary":`工作階段總結`,"settings.magicPrompts.sidebar.item.sessionWorkspaceReview":`工作區審查`,"settings.magicPrompts.sidebar.item.sessionExplore":`程式碼庫導覽`,"settings.magicPrompts.sidebar.item.sessionFeaturePlan":`功能規劃`,"settings.magicPrompts.sidebar.item.sessionCraftGoal":`建立 Goal`,"settings.magicPrompts.page.group.sessionCraftGoal.title":`建立 Goal`,"settings.magicPrompts.page.group.sessionCraftGoal.description":`由 /craft-goal 斜線命令使用的提示詞:可見使用者訊息 + 隱藏說明。透過引導式探索將想法或任務轉化為清晰且有證據可驗證的 Goal。`,"settings.magicPrompts.sidebar.item.sessionCatchUp":`快速回顧`,"settings.magicPrompts.sidebar.item.sessionDebug":`除錯`,"settings.magicPrompts.sidebar.item.sessionWeigh":`權衡方案`,"settings.magicPrompts.sidebar.item.sessionFusion":`Fusion`,"settings.remoteInstances.sidebar.title":`遠端執行個體`,"settings.remoteInstances.sidebar.description":`透過匯入連結或 SSH 連線其他 OpenChamber 伺服器。`,"settings.remoteInstances.sidebar.empty":`尚無遠端執行個體。可匯入連結或新增 SSH 連線。`,"settings.remoteInstances.channel.link":`連結`,"settings.remoteInstances.channel.ssh":`SSH`,"settings.remoteInstances.sidebar.total":`總計 {count}`,"settings.remoteInstances.sidebar.newSshInstanceName":`新增 SSH 執行個體`,"settings.remoteInstances.sidebar.actions.addSshInstance":`新增 SSH 執行個體`,"settings.remoteInstances.sidebar.actions.connect":`連線`,"settings.remoteInstances.sidebar.actions.disconnect":`中斷連線`,"settings.remoteInstances.sidebar.actions.retry":`重試`,"settings.remoteInstances.sidebar.actions.remove":`移除`,"settings.remoteInstances.sidebar.confirm.localPortInUseRetry":`本機連接埠已被佔用。是否選擇一個隨機可用本機連接埠並重試?`,"settings.remoteInstances.sidebar.toast.createFailed":`建立 SSH 執行個體失敗`,"settings.remoteInstances.sidebar.toast.retriedWithRandomPort":`已使用隨機本機連接埠重試`,"settings.remoteInstances.sidebar.toast.connectFailed":`連線執行個體失敗`,"settings.remoteInstances.sidebar.toast.disconnectFailed":`中斷執行個體連線失敗`,"settings.remoteInstances.sidebar.toast.retryFailed":`重試連線失敗`,"settings.remoteInstances.sidebar.toast.removeFailed":`移除執行個體失敗`,"settings.remoteInstances.sidebar.phase.ready":`就緒`,"settings.remoteInstances.sidebar.phase.error":`錯誤`,"settings.remoteInstances.sidebar.phase.reconnect":`重新連線`,"settings.remoteInstances.sidebar.phase.installing":`安裝中`,"settings.remoteInstances.sidebar.phase.updating":`更新中`,"settings.remoteInstances.sidebar.phase.forwarding":`轉送中`,"settings.remoteInstances.sidebar.phase.starting":`啟動中`,"settings.remoteInstances.sidebar.phase.connecting":`連線中`,"settings.remoteInstances.sidebar.phase.idle":`可用`,"settings.remoteInstances.direct.sidebarTitle":`直接連線`,"settings.remoteInstances.direct.sidebarDescription":`使用配對連結連線`,"settings.remoteInstances.direct.title":`直接遠端執行個體`,"settings.remoteInstances.direct.description":`此應用程式可切換到的伺服器。從另一台伺服器匯入配對連結。`,"settings.remoteInstances.direct.import.description":`貼上 connect-url 輸出或 openchamber://connect 連結來匯入。`,"settings.remoteInstances.direct.import.placeholder":`貼上連線連結`,"settings.remoteInstances.direct.import.action":`匯入連線`,"settings.remoteInstances.direct.error.invalidConnectLink":`連線連結無效`,"settings.remoteInstances.direct.state.loading":`正在載入直接連線...`,"settings.remoteInstances.direct.state.empty":`尚未匯入其他伺服器。`,"settings.remoteInstances.clientAuth.title":`用戶端存取 token`,"settings.remoteInstances.clientAuth.description":`建立與管理可讓桌面或遠端用戶端連線的 token。`,"settings.remoteInstances.clientAuth.field.labelPlaceholder":`實例名稱 — 例如 家裡的電腦`,"settings.remoteInstances.clientAuth.field.labelHint":`另一台裝置會用這個名字顯示此伺服器。`,"settings.remoteInstances.clientAuth.actions.create":`建立 token`,"settings.remoteInstances.clientAuth.actions.pair":`配對裝置`,"settings.remoteInstances.clientAuth.actions.revoke":`撤銷`,"settings.remoteInstances.clientAuth.actions.clearRevoked":`清除已撤銷`,"settings.remoteInstances.clientAuth.qrAlt":`配對 QR code`,"settings.remoteInstances.clientAuth.qrEnlarge":`放大 QR code`,"settings.remoteInstances.clientAuth.qrScanHint":`用另一台裝置上的 OpenChamber 應用程式掃描。一次性使用且會過期。`,"settings.remoteInstances.clientAuth.qrDialogTitle":`掃碼連線`,"settings.remoteInstances.clientAuth.actions.addDevice":`新增裝置`,"settings.remoteInstances.clientAuth.actions.copied":`已複製`,"settings.remoteInstances.clientAuth.addDevice.transportLabel":`你會在哪裡使用這台裝置?`,"settings.remoteInstances.clientAuth.addDevice.subtitle":`建立一次性 QR 代碼,將另一台裝置連線到此伺服器。`,"settings.remoteInstances.clientAuth.addDevice.transport.local":`僅本機`,"settings.remoteInstances.clientAuth.addDevice.transport.localHint":`供同一台電腦上的應用程式使用。`,"settings.remoteInstances.clientAuth.addDevice.transport.lan":`僅家用網路`,"settings.remoteInstances.clientAuth.addDevice.transport.lanHint":`透過 Wi-Fi 直接連線。離開此網路後無法使用。`,"settings.remoteInstances.clientAuth.addDevice.transport.relay":`任何地方`,"settings.remoteInstances.clientAuth.addDevice.transport.relayHint":`在家與外出都可用。外出時流量經由 OpenChamber Private Relay(端對端加密隧道)傳輸,無需設定。`,"settings.remoteInstances.clientAuth.addDevice.fallback.relay":`外出時也允許透過加密中繼連線`,"settings.remoteInstances.clientAuth.addDevice.fallback.preferLocal":`在家時優先使用直接連線`,"settings.remoteInstances.clientAuth.addDevice.relayUrlLabel":`Relay 伺服器`,"settings.remoteInstances.clientAuth.addDevice.relayUrlHint":`使用 OpenChamber 官方 Relay,或輸入你自己的 ws:// 或 wss:// 位址。裝置會儲存 QR Code 中的該位址。`,"settings.remoteInstances.clientAuth.addDevice.relayUrlDeployLink":`可部署自己的 Relay 服務。`,"settings.remoteInstances.clientAuth.addDevice.relayUrlLockedHint":`此伺服器已透過 OPENCHAMBER_RELAY_URL 固定 Relay 位址。`,"settings.remoteInstances.clientAuth.addDevice.relayUrlInvalid":`請輸入以 ws:// 或 wss:// 開頭的有效 Relay 位址。`,"settings.remoteInstances.clientAuth.addDevice.create":`建立 QR 代碼`,"settings.remoteInstances.clientAuth.addDevice.targetLabel":`目標實例`,"settings.remoteInstances.clientAuth.addDevice.target.local":`本機`,"settings.remoteInstances.clientAuth.addDevice.target.sshEmpty":`尚無已連線的 SSH 實例`,"settings.remoteInstances.clientAuth.addDevice.target.sshNotReady":`請先連線該 SSH 實例`,"settings.remoteInstances.sidebar.actions.mobileConnect":`手機連線`,"settings.remoteInstances.sidebar.actions.mobileConnectAria":`為 {instance} 產生手機配對 QR 碼`,"settings.remoteInstances.sidebar.actions.mobileConnectDisabled":`請先連線該 SSH 實例再配對手機`,"settings.remoteInstances.sidebar.actions.syncConfigDisabled":`請先連線該實例再同步設定`,"settings.remoteInstances.sidebar.actions.syncConfig":`同步設定`,"settings.remoteInstances.clientAuth.addDevice.done":`完成`,"settings.remoteInstances.clientAuth.addDevice.connectedToast":`裝置已連線。`,"settings.remoteInstances.clientAuth.pairingUrl":`配對 URL`,"settings.remoteInstances.clientAuth.createdToken":`已建立 token`,"settings.remoteInstances.clientAuth.state.loading":`正在載入用戶端 token...`,"settings.remoteInstances.clientAuth.state.empty":`尚無用戶端 token。`,"settings.remoteInstances.clientAuth.state.revoked":`已撤銷`,"settings.remoteInstances.clientAuth.state.thisDevice":`此裝置`,"settings.remoteInstances.clientAuth.state.pending":`等待連線…`,"settings.remoteInstances.clientAuth.state.viaRelay":`Relay`,"settings.remoteInstances.clientAuth.state.connectedDirect":`已連線 · 區域網路`,"settings.remoteInstances.clientAuth.state.connectedRelay":`已連線 · 中繼`,"settings.remoteInstances.clientAuth.lastUsed":`上次使用:{date}`,"settings.remoteInstances.clientAuth.neverUsed":`從未使用`,"settings.remoteInstances.relay.title":`OpenChamber Relay`,"settings.remoteInstances.relay.autoHint":`透過中繼配對裝置時自動開啟。`,"settings.remoteInstances.relay.description":`無需開放連接埠,即可讓你的其他裝置從任何地方連線。流量端對端加密,中繼無法讀取內容。`,"settings.remoteInstances.relay.enableHint":`在此伺服器上啟用中繼之前,不會共享任何內容。`,"settings.remoteInstances.relay.actions.enable":`啟用中繼`,"settings.remoteInstances.relay.actions.disable":`停用`,"settings.remoteInstances.relay.confirm.disable":`停用中繼?透過它連線的裝置將立即中斷連線。`,"settings.remoteInstances.relay.state.loading":`正在檢查中繼狀態...`,"settings.remoteInstances.relay.state.disabled":`已停用`,"settings.remoteInstances.relay.state.connecting":`連線中`,"settings.remoteInstances.relay.state.connected":`已連線`,"settings.remoteInstances.relay.state.reconnecting":`重新連線中`,"settings.remoteInstances.relay.state.error":`錯誤`,"settings.remoteInstances.relay.status.clientsOne":`已連線 {count} 台裝置`,"settings.remoteInstances.relay.status.clientsMany":`已連線 {count} 台裝置`,"settings.remoteInstances.relay.pair.title":`配對裝置`,"settings.remoteInstances.relay.pair.labelPlaceholder":`裝置名稱(選填)`,"settings.remoteInstances.relay.pair.includeToken":`包含存取權杖(掃一次即完成配對)`,"settings.remoteInstances.relay.pair.noTokenHint":`不包含權杖時,裝置連線後需使用此伺服器的介面密碼登入。`,"settings.remoteInstances.relay.pair.generate":`建立配對連結`,"settings.remoteInstances.relay.pair.requiresConnected":`中繼連線後即可配對。`,"settings.remoteInstances.relay.pair.linkLabel":`配對連結`,"settings.remoteInstances.relay.pair.warning":`此連結可存取此伺服器,請勿分享。`,"settings.remoteInstances.relay.pair.qrAlt":`中繼配對 QR 碼`,"settings.remoteInstances.relay.pair.showQr":`顯示 QR 碼`,"settings.remoteInstances.relay.pair.qrDialogTitle":`掃描配對`,"settings.remoteInstances.relay.pair.qrDialogDescription":`用另一台裝置上的 OpenChamber 應用程式掃描此 QR 碼。`,"settings.remoteInstances.relay.pair.manageHint":`可在上方「連線到此伺服器」清單中管理或撤銷已配對的裝置。`,"settings.remoteInstances.relay.toast.enableFailed":`無法啟用中繼`,"settings.remoteInstances.relay.toast.disableFailed":`無法停用中繼`,"settings.remoteInstances.relay.toast.offerFailed":`無法建立配對連結`,"settings.remoteInstances.relay.toast.linkCopied":`已複製配對連結`,"settings.remoteInstances.page.section.instance":`執行個體`,"settings.remoteInstances.page.section.instanceDescription":`核心 SSH 設定。`,"settings.remoteInstances.page.field.mode":`模式`,"settings.remoteInstances.page.field.modeHint":`Managed 模式會在遠端安裝/更新並啟動 OpenChamber。External 模式假設它已在執行。`,"settings.remoteInstances.page.field.modePlaceholder":`選擇模式`,"settings.remoteInstances.page.field.modeManaged":`Managed(自動啟動)`,"settings.remoteInstances.page.field.modeExternal":`External(已在執行)`,"settings.remoteInstances.page.field.preferredRemotePort":`偏好遠端連接埠`,"settings.remoteInstances.page.field.preferredRemotePortHint":`OpenChamber 在遠端主機使用的連接埠。留空則由執行時自動選擇。`,"settings.remoteInstances.page.field.keepServerRunning":`保持服務執行`,"settings.remoteInstances.page.field.keepServerRunningHint":`啟用後,中斷連線時會保留遠端 OpenChamber 背景程式。`,"settings.remoteInstances.page.field.bindHost":`綁定主機`,"settings.remoteInstances.page.field.bindHostHint":`主本機存取位址使用的網路介面。使用 127.0.0.1/localhost 可僅限本機存取。`,"settings.remoteInstances.page.field.preferredLocalPort":`偏好本機連接埠`,"settings.remoteInstances.page.field.preferredLocalPortHint":`主 OpenChamber tunnel 的偏好本機連接埠。留空自動選擇。`,"settings.remoteInstances.page.field.forwardType":`轉送類型`,"settings.remoteInstances.page.field.localListen":`本機監聽`,"settings.remoteInstances.page.field.localTarget":`本機目標`,"settings.remoteInstances.page.field.remoteListen":`遠端監聽`,"settings.remoteInstances.page.field.remoteTarget":`遠端目標`,"settings.remoteInstances.page.field.localHostPlaceholder":`127.0.0.1`,"settings.remoteInstances.page.field.remoteHostPlaceholder":`127.0.0.1`,"settings.remoteInstances.page.field.auto":`自動`,"settings.remoteInstances.page.confirm.bindAllInterfaces":`綁定到 0.0.0.0 會將轉送連接埠暴露到本機網路。是否繼續?`,"settings.remoteInstances.page.preview.localSocks5":`(本機 SOCKS5)`,"settings.remoteInstances.page.preview.local":`(本機)`,"settings.remoteInstances.page.preview.remote":`(遠端)`,"settings.remoteInstances.page.toast.openLocalEndpointFailed":`開啟本機端點失敗`,"settings.remoteInstances.page.toast.localUrlCopied":`本機 URL 已複製`,"settings.remoteInstances.page.actions.copyLocalUrl":`複製本機 URL`,"settings.remoteInstances.page.actions.open":`開啟`,"settings.remoteInstances.page.logsDialog.selectedInstanceFallback":`所選執行個體`,"settings.remoteInstances.page.patternDialog.descriptionWithHost":`{host} 需要一個具體目標地址。`,"settings.remoteInstances.page.patternDialog.description":`輸入目標地址。`,"settings.common.actions.cancel":`取消`,"settings.common.actions.create":`建立`,"settings.common.actions.delete":`刪除`,"settings.common.actions.reset":`重設`,"settings.common.actions.rename":`重新命名`,"settings.common.actions.duplicate":`複製`,"settings.common.actions.import":`匯入`,"settings.common.actions.copyAll":`全部複製`,"settings.common.actions.clear":`清除`,"settings.common.actions.saving":`儲存中...`,"settings.common.actions.saveChanges":`儲存變更`,"settings.common.scope.global":`全域`,"settings.common.scope.project":`專案`,"settings.common.field.description":`說明`,"settings.common.badge.new":`新增`,"settings.common.badge.modified":`已修改`,"settings.common.permission.allow":`允許`,"settings.common.permission.ask":`詢問`,"settings.common.permission.deny":`拒絕`,"settings.common.state.comingSoon":`即將推出...`,"settings.projects.actions.title":`操作`,"settings.projects.actions.description":`按專案顯示在專案名稱旁標題列中的命令。`,"settings.projects.actions.validation.fillNameAndCommand":`儲存前請填寫操作名稱和命令。`,"settings.projects.actions.state.loading":`載入中...`,"settings.projects.actions.state.empty":`尚未設定任何操作。`,"settings.projects.actions.state.untitled":`未命名操作`,"settings.projects.actions.state.noDesktopSshForwards":`沒有可用的本機 SSH 轉送。`,"settings.projects.actions.field.selectIconAria":`選擇圖示`,"settings.projects.actions.field.iconAria":`圖示 {icon}`,"settings.projects.actions.field.actionNamePlaceholder":`操作名稱`,"settings.projects.actions.field.command":`命令`,"settings.projects.actions.field.commandPlaceholder":`例如 bun run lint`,"settings.projects.actions.field.autoOpenUrl":`自動開啟 URL`,"settings.projects.actions.field.autoOpenUrlForAria":`為 {title} 自動開啟 URL`,"settings.projects.actions.field.autoOpenUrlDescription":`從輸出中開啟 URL,或使用下面的自訂 URL`,"settings.projects.actions.field.overrideUrlPlaceholder":`覆寫 URL(可選)`,"settings.projects.actions.field.overrideUrlTooltip":`如果填寫此欄位,將使用自訂 URL。為空時,應用程式會從輸出中選擇最合適的 URL 開啟。`,"settings.projects.actions.field.desktopSshForward":`桌面 SSH 轉送`,"settings.projects.actions.field.useOutputManualUrl":`使用輸出/手動 URL`,"settings.projects.actions.actions.add":`新增操作`,"settings.projects.actions.actions.save":`儲存操作`,"settings.projects.actions.toast.saveFailed":`儲存操作失敗`,"settings.projects.actions.toast.saved":`專案操作已儲存`,"settings.openchamber.about.title":`關於 OpenChamber`,"settings.openchamber.about.field.version":`版本`,"settings.openchamber.about.field.clientVersion":`用戶端`,"settings.openchamber.about.field.webBundle":`Web 套件`,"settings.openchamber.about.field.instanceOpenChamberVersion":`OpenChamber`,"settings.openchamber.about.field.instanceOpenCodeVersion":`OpenCode`,"settings.openchamber.about.field.openCodeVersion":`OpenCode 版本`,"settings.openchamber.about.state.checking":`檢查中...`,"settings.openchamber.about.state.upToDate":`已是最新`,"settings.openchamber.about.state.unknown":`未知`,"settings.openchamber.about.state.builtin":`內建`,"settings.openchamber.about.actions.checkUpdates":`檢查更新`,"settings.openchamber.about.actions.update":`更新`,"settings.openchamber.about.actions.updateToVersion":`更新到 {version}`,"settings.openchamber.about.actions.checkForUpdates":`檢查更新`,"settings.openchamber.about.toast.latestVersion":`你已是最新版本`,"settings.openchamber.about.toast.checkFailed":`無法檢查更新`,"settings.openchamber.about.diagnostics.label":`診斷日誌`,"settings.openchamber.about.diagnostics.description":`匯出本機診斷 feat,用於分析顯示與同步問題。不包含訊息正文或權杖。`,"settings.openchamber.about.diagnostics.export":`匯出日誌`,"settings.openchamber.about.diagnostics.exporting":`正在匯出…`,"settings.openchamber.about.diagnostics.enable":`記錄診斷 feat`,"settings.openchamber.about.diagnostics.enableHint":`僅測試版可用。在本機記錄工作階段同步與顯示生命週期,不含正文。`,"settings.openchamber.about.diagnostics.toast.exported":`已匯出診斷日誌`,"settings.openchamber.about.diagnostics.toast.failed":`無法匯出診斷日誌`,"settings.openchamber.about.diagnostics.toast.empty":`已匯出診斷日誌。尚未記錄任何事件。`,"settings.agents.sidebar.title":`Agents`,"settings.agents.sidebar.total":`總計 {count}`,"settings.agents.sidebar.empty.title":`未設定 agents`,"settings.agents.sidebar.empty.description":`使用上方 + 按鈕建立一個`,"settings.agents.sidebar.section.builtIn":`內建 Agents`,"settings.agents.sidebar.section.custom":`自訂 Agents`,"settings.agents.sidebar.badge.system":`系統`,"settings.agents.sidebar.dialog.deleteTitle":`刪除 Agent`,"settings.agents.sidebar.dialog.resetTitle":`重設 Agent`,"settings.agents.sidebar.dialog.deleteDescription":`確定要刪除 agent「{name}」嗎?`,"settings.agents.sidebar.dialog.resetDescription":`確定要將 agent「{name}」重設為預設設定嗎?`,"settings.agents.sidebar.renameDialog.title":`重新命名 Agent`,"settings.agents.sidebar.renameDialog.description":`為 agent「@{name}」輸入新名稱`,"settings.agents.sidebar.renameDialog.placeholder":`新 agent 名稱...`,"settings.agents.sidebar.toast.builtInCannotDelete":`內建 agents 無法刪除`,"settings.agents.sidebar.toast.agentDeleted":`Agent「{name}」已刪除`,"settings.agents.sidebar.toast.agentReset":`Agent「{name}」已重設為預設值`,"settings.agents.sidebar.toast.deleteFailed":`刪除 agent 失敗`,"settings.agents.sidebar.toast.definitionNotFound":`找不到 agent 定義。未變更任何內容。`,"settings.agents.sidebar.toast.resetFailed":`重設 agent 失敗`,"settings.agents.sidebar.toast.agentNameRequired":`Agent 名稱為必填項`,"settings.agents.sidebar.toast.agentExists":`已存在同名 agent`,"settings.agents.sidebar.toast.removeOldAfterRenameFailed":`重新命名後移除舊 agent 失敗`,"settings.agents.sidebar.toast.renameFailed":`重新命名 agent 失敗`,"settings.agents.sidebar.toast.agentRenamed":`Agent 已重新命名為 "{name}"`,"settings.agents.page.toast.permissionNameRequired":`權限名稱為必填項`,"settings.agents.page.toast.created":`Agent 建立成功`,"settings.agents.page.toast.updated":`Agent 更新成功`,"settings.agents.page.toast.createFailed":`建立 agent 失敗`,"settings.agents.page.toast.updateFailed":`更新 agent 失敗`,"settings.agents.page.toast.saveUnexpectedError":`儲存時發生錯誤`,"settings.agents.page.toast.savedManualRestart":`已儲存到磁碟。請重新啟動已連線的 OpenCode 伺服器以套用變更。`,"settings.agents.page.empty.title":`從側邊欄選擇一個 agent`,"settings.agents.page.empty.description":`或建立一個 agent`,"settings.agents.page.title.new":`新增 Agent`,"settings.agents.page.subtitle.new":`設定新的助理人格`,"settings.agents.page.subtitle.edit":`編輯 agent 設定`,"settings.agents.page.section.identityRole":`身分與角色`,"settings.agents.page.section.modelParameters":`模型與參數`,"settings.agents.page.section.systemPrompt":`系統提示詞`,"settings.agents.page.section.toolPermissions":`工具權限`,"settings.agents.page.field.agentName":`Agent 名稱`,"settings.agents.page.field.agentNamePlaceholder":`agent-name`,"settings.agents.page.field.scopePlaceholder":`作用域`,"settings.agents.page.field.descriptionPlaceholder":`這個 agent 的作用是什麼?`,"settings.agents.page.field.mode":`模式`,"settings.agents.page.field.modeTooltip":`Primary 與 Subagent 可見性`,"settings.agents.page.field.overrideModel":`覆寫模型`,"settings.agents.page.field.variant":`思考變體`,"settings.agents.page.field.variantTooltip":`選填。如果模型支援推理,變體控制推理深度。`,"settings.agents.page.field.variantHint":`模型特定(如 Anthropic variant)`,"settings.agents.page.field.variantPlaceholder":`例如 high, max, low, none`,"settings.agents.page.field.temperature":`Temperature`,"settings.agents.page.field.temperatureTooltip":`控制隨機性。越高越有創造力,越低越聚焦。`,"settings.agents.page.field.temperatureRange":`0.0 到 2.0`,"settings.agents.page.field.clearTemperatureAria":`清除 Temperature 覆寫`,"settings.agents.page.field.topP":`Top P`,"settings.agents.page.field.topPTooltip":`核取樣多樣性。越低越傾向高機率 token。`,"settings.agents.page.field.topPRange":`0.0 到 1.0`,"settings.agents.page.field.clearTopPAria":`清除 Top P 覆寫`,"settings.agents.page.field.systemPromptPlaceholder":`你是一名專業程式碼撰寫助理...`,"settings.agents.page.mode.primary":`Primary`,"settings.agents.page.mode.subagent":`Subagent`,"settings.agents.page.mode.all":`全部`,"settings.agents.page.permissions.defaultLabel":`預設`,"settings.agents.page.permissions.hideEditor":`隱藏編輯器`,"settings.agents.page.permissions.advancedEditor":`進階編輯器`,"settings.agents.page.permissions.globalSummary":`全域:{summary}`,"settings.agents.page.permissions.rulesSummary":`規則:{summary}`,"settings.agents.page.permissions.globalDefault":`全域預設`,"settings.agents.page.permissions.pattern":`模式`,"settings.agents.page.permissions.addCustomRule":`新增自訂規則`,"settings.agents.page.permissions.permissionPlaceholder":`權限...`,"settings.agents.page.permissions.patternPlaceholder":`模式(例如 *)`,"settings.page.behavior.title":`行為`,"settings.behavior.page.title":`行為`,"settings.behavior.page.warning.title":`全域規則會與專案規則合併使用`,"settings.behavior.page.warning.description":`此處所做的變更會更新 {path}。當專案級 AGENTS.md 存在時,OpenCode 也會包含它。`,"settings.behavior.page.section.systemPrompt":`全域 AGENTS.md`,"settings.behavior.page.field.systemPromptPlaceholder":`你是一個有幫助的 AI 助助理...
|
|
2
2
|
|
|
3
3
|
在此設定 AI 在所有工作階段與服務提供者中都必須遵守的絕對行為規則。`,"settings.behavior.page.section.responseStyle":`回覆風格`,"settings.behavior.page.responseStyle.tooltip":`啟用後,這些說明會指導助理在每個新對話中的回覆方式。它們會隨你的第一則訊息一起送出,不會變更全域 AGENTS.md 規則。`,"settings.behavior.page.responseStyle.enableAria":`啟用回覆風格說明`,"settings.behavior.page.responseStyle.enable":`向新對話新增回覆風格說明`,"settings.behavior.page.responseStyle.preset":`預設`,"settings.behavior.page.responseStyle.option.concise":`簡潔`,"settings.behavior.page.responseStyle.option.detailed":`詳細`,"settings.behavior.page.responseStyle.option.mentor":`導師`,"settings.behavior.page.responseStyle.option.pushback":`反駁`,"settings.behavior.page.responseStyle.option.noFiller":`無廢話`,"settings.behavior.page.responseStyle.option.matchEnergy":`配合我的語氣`,"settings.behavior.page.responseStyle.option.warmPeer":`親近的同事`,"settings.behavior.page.responseStyle.option.custom":`自訂`,"settings.behavior.page.responseStyle.customPlaceholder":`編寫要新增到第一則訊息的說明...`,"settings.behavior.page.toast.saved":`行為儲存成功`,"settings.behavior.page.toast.saveFailed":`行為儲存失敗`,"settings.commands.sidebar.title":`命令`,"settings.commands.sidebar.total":`總計 {count}`,"settings.commands.sidebar.empty.title":`未設定命令`,"settings.commands.sidebar.empty.description":`使用上方 + 按鈕建立一個`,"settings.commands.sidebar.section.builtIn":`內建命令`,"settings.commands.sidebar.section.custom":`自訂命令`,"settings.commands.sidebar.dialog.deleteTitle":`刪除命令`,"settings.commands.sidebar.dialog.resetTitle":`重設命令`,"settings.commands.sidebar.dialog.deleteDescription":`確定要刪除命令「{name}」嗎?`,"settings.commands.sidebar.dialog.resetDescription":`確定要將命令「{name}」重設為預設設定嗎?`,"settings.commands.sidebar.renameDialog.title":`重新命名命令`,"settings.commands.sidebar.renameDialog.description":`為命令「/{name}」輸入新名稱`,"settings.commands.sidebar.renameDialog.placeholder":`新命令名稱...`,"settings.commands.sidebar.toast.builtInCannotDelete":`內建命令無法刪除`,"settings.commands.sidebar.toast.commandDeleted":`命令「{name}」已刪除`,"settings.commands.sidebar.toast.commandReset":`命令「{name}」已重設為預設值`,"settings.commands.sidebar.toast.deleteFailed":`刪除命令失敗`,"settings.commands.sidebar.toast.resetFailed":`重設命令失敗`,"settings.commands.sidebar.toast.commandNameRequired":`命令名稱為必填項`,"settings.commands.sidebar.toast.commandExists":`已存在同名命令`,"settings.commands.sidebar.toast.removeOldAfterRenameFailed":`重新命名後移除舊命令失敗`,"settings.commands.sidebar.toast.renameFailed":`重新命名命令失敗`,"settings.commands.page.toast.templateRequired":`命令模板為必填項`,"settings.commands.page.toast.created":`命令建立成功`,"settings.commands.page.toast.updated":`命令更新成功`,"settings.commands.page.toast.createFailed":`建立命令失敗`,"settings.commands.page.toast.updateFailed":`更新命令失敗`,"settings.commands.page.toast.saveUnexpectedError":`儲存時發生錯誤`,"settings.commands.page.empty.title":`從側邊欄選擇一個命令`,"settings.commands.page.empty.description":`或新增一個命令`,"settings.commands.page.title.new":`新增命令`,"settings.commands.page.subtitle.new":`設定新的斜線命令`,"settings.commands.page.subtitle.edit":`編輯命令設定`,"settings.commands.page.section.identity":`身分`,"settings.commands.page.section.executionContext":`執行上下文`,"settings.commands.page.section.template":`命令模板`,"settings.commands.page.field.commandName":`命令名稱`,"settings.commands.page.field.commandNamePlaceholder":`command-name`,"settings.commands.page.field.descriptionPlaceholder":`這個命令的作用是什麼?`,"settings.commands.page.field.overrideAgent":`覆寫 Agent`,"settings.commands.page.field.templatePlaceholder":`在此輸入命令模板...
|
|
4
4
|
|
package/dist/index.html
CHANGED
|
@@ -552,7 +552,7 @@
|
|
|
552
552
|
opacity: 0.72;
|
|
553
553
|
}
|
|
554
554
|
</style>
|
|
555
|
-
<script type="module" crossorigin src="/assets/main-
|
|
555
|
+
<script type="module" crossorigin src="/assets/main-Drfmhboy.js"></script>
|
|
556
556
|
<link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-C0FnF6B9.js">
|
|
557
557
|
<link rel="modulepreload" crossorigin href="/assets/vendor-base-ui-CnHfUmDN.js">
|
|
558
558
|
<link rel="modulepreload" crossorigin href="/assets/vendor-zustand-B4dlGEM2.js">
|
|
@@ -565,10 +565,12 @@
|
|
|
565
565
|
<link rel="modulepreload" crossorigin href="/assets/desktopRelayRestore-CewM6-g5.js">
|
|
566
566
|
<link rel="modulepreload" crossorigin href="/assets/vendor-opencode-sdk-C07HQypa.js">
|
|
567
567
|
<link rel="modulepreload" crossorigin href="/assets/vendor-aparajita-capacitor-secure-storage-CjQdwfjS.js">
|
|
568
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
569
|
-
<link rel="modulepreload" crossorigin href="/assets/terminalApi-
|
|
570
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
571
|
-
<link rel="
|
|
568
|
+
<link rel="modulepreload" crossorigin href="/assets/platform-G8Cxe5wN.js">
|
|
569
|
+
<link rel="modulepreload" crossorigin href="/assets/terminalApi-os4uWEou.js">
|
|
570
|
+
<link rel="modulepreload" crossorigin href="/assets/types-BuiqMmh_.js">
|
|
571
|
+
<link rel="modulepreload" crossorigin href="/assets/capgoAdapter-LvGrONDp.js">
|
|
572
|
+
<link rel="modulepreload" crossorigin href="/assets/runtimeConfig-D6Btfpc2.js">
|
|
573
|
+
<link rel="stylesheet" crossorigin href="/assets/src-F6gEZAFJ.css">
|
|
572
574
|
</head>
|
|
573
575
|
<body class="h-full bg-background text-foreground">
|
|
574
576
|
<!-- Keep the startup layer outside #root. React replaces every child of
|
package/dist/mini-chat.html
CHANGED
|
@@ -74,7 +74,7 @@
|
|
|
74
74
|
}
|
|
75
75
|
</style>
|
|
76
76
|
|
|
77
|
-
<script type="module" crossorigin src="/assets/miniChat-
|
|
77
|
+
<script type="module" crossorigin src="/assets/miniChat-CC3awYO5.js"></script>
|
|
78
78
|
<link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-C0FnF6B9.js">
|
|
79
79
|
<link rel="modulepreload" crossorigin href="/assets/vendor-base-ui-CnHfUmDN.js">
|
|
80
80
|
<link rel="modulepreload" crossorigin href="/assets/vendor-zustand-B4dlGEM2.js">
|
|
@@ -87,10 +87,12 @@
|
|
|
87
87
|
<link rel="modulepreload" crossorigin href="/assets/desktopRelayRestore-CewM6-g5.js">
|
|
88
88
|
<link rel="modulepreload" crossorigin href="/assets/vendor-opencode-sdk-C07HQypa.js">
|
|
89
89
|
<link rel="modulepreload" crossorigin href="/assets/vendor-aparajita-capacitor-secure-storage-CjQdwfjS.js">
|
|
90
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
91
|
-
<link rel="modulepreload" crossorigin href="/assets/terminalApi-
|
|
92
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
93
|
-
<link rel="
|
|
90
|
+
<link rel="modulepreload" crossorigin href="/assets/platform-G8Cxe5wN.js">
|
|
91
|
+
<link rel="modulepreload" crossorigin href="/assets/terminalApi-os4uWEou.js">
|
|
92
|
+
<link rel="modulepreload" crossorigin href="/assets/types-BuiqMmh_.js">
|
|
93
|
+
<link rel="modulepreload" crossorigin href="/assets/capgoAdapter-LvGrONDp.js">
|
|
94
|
+
<link rel="modulepreload" crossorigin href="/assets/runtimeConfig-D6Btfpc2.js">
|
|
95
|
+
<link rel="stylesheet" crossorigin href="/assets/src-F6gEZAFJ.css">
|
|
94
96
|
</head>
|
|
95
97
|
<body class="h-full bg-background text-foreground">
|
|
96
98
|
<div id="root" class="h-full">
|
package/dist/mobile.html
CHANGED
|
@@ -63,7 +63,7 @@
|
|
|
63
63
|
})();
|
|
64
64
|
</script>
|
|
65
65
|
|
|
66
|
-
<script type="module" crossorigin src="/assets/mobile-
|
|
66
|
+
<script type="module" crossorigin src="/assets/mobile-DbOR4vtC.js"></script>
|
|
67
67
|
<link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-C0FnF6B9.js">
|
|
68
68
|
<link rel="modulepreload" crossorigin href="/assets/vendor-base-ui-CnHfUmDN.js">
|
|
69
69
|
<link rel="modulepreload" crossorigin href="/assets/vendor-zustand-B4dlGEM2.js">
|
|
@@ -76,10 +76,12 @@
|
|
|
76
76
|
<link rel="modulepreload" crossorigin href="/assets/desktopRelayRestore-CewM6-g5.js">
|
|
77
77
|
<link rel="modulepreload" crossorigin href="/assets/vendor-opencode-sdk-C07HQypa.js">
|
|
78
78
|
<link rel="modulepreload" crossorigin href="/assets/vendor-aparajita-capacitor-secure-storage-CjQdwfjS.js">
|
|
79
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
80
|
-
<link rel="modulepreload" crossorigin href="/assets/terminalApi-
|
|
81
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
82
|
-
<link rel="
|
|
79
|
+
<link rel="modulepreload" crossorigin href="/assets/platform-G8Cxe5wN.js">
|
|
80
|
+
<link rel="modulepreload" crossorigin href="/assets/terminalApi-os4uWEou.js">
|
|
81
|
+
<link rel="modulepreload" crossorigin href="/assets/types-BuiqMmh_.js">
|
|
82
|
+
<link rel="modulepreload" crossorigin href="/assets/capgoAdapter-LvGrONDp.js">
|
|
83
|
+
<link rel="modulepreload" crossorigin href="/assets/runtimeConfig-D6Btfpc2.js">
|
|
84
|
+
<link rel="stylesheet" crossorigin href="/assets/src-F6gEZAFJ.css">
|
|
83
85
|
</head>
|
|
84
86
|
<body class="h-full bg-background text-foreground">
|
|
85
87
|
<div id="root" class="h-full"></div>
|