@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.
Files changed (77) hide show
  1. package/dist/assets/AssistantView-Coj_BqNe.js +1 -0
  2. package/dist/assets/{ChatContainer-BMpzhPmB.js → ChatContainer-rXg0ZK5d.js} +23 -23
  3. package/dist/assets/{DiagramView-CrTRX9Y-.js → DiagramView-CmN3auk-.js} +1 -1
  4. package/dist/assets/{MarkdownRendererImpl-DfxE7s_1.js → MarkdownRendererImpl-BdH1ynSb.js} +2 -2
  5. package/dist/assets/{MobileDetailNavigation-C2LwNG8B.js → MobileDetailNavigation-DpfpKgPu.js} +1 -1
  6. package/dist/assets/MobileShareBridge-d58Vzm3O.js +4 -0
  7. package/dist/assets/MobileSurface-S6hr1_7p.js +2 -0
  8. package/dist/assets/{MultiRunWindow-AtCafW3t.js → MultiRunWindow-C4Ike8AX.js} +1 -1
  9. package/dist/assets/{OnboardingScreen-CYeRZznl.js → OnboardingScreen-CW21rCqC.js} +1 -1
  10. package/dist/assets/OverlayScrollbar-BsFmRX3b.js +1 -0
  11. package/dist/assets/{SettingsView-DAbUmMO3.js → SettingsView-DLxzV2rK.js} +12 -11
  12. package/dist/assets/{SettingsWindow-CF87lKID.js → SettingsWindow-B-iCDv5r.js} +1 -1
  13. package/dist/assets/{TerminalView-95i-ukyJ.js → TerminalView-jsjZJ-hn.js} +1 -1
  14. package/dist/assets/{ToolOutputDialog-6dyRcTiq.js → ToolOutputDialog-RCrRpjSt.js} +1 -1
  15. package/dist/assets/appThemeRegistry-CnlbpoIa.js +2 -0
  16. package/dist/assets/capgoAdapter-LvGrONDp.js +1 -0
  17. package/dist/assets/{clipboard-BnElHSnO.js → clipboard-ByPKHEt8.js} +1 -1
  18. package/dist/assets/{context-menu-C0ReF3zt.js → context-menu-CvnY05Eg.js} +1 -1
  19. package/dist/assets/{dialog-COrLBm9O.js → dialog-CQLvE6F6.js} +1 -1
  20. package/dist/assets/{es-DIVYdoxi.js → es-ZHyqPb3M.js} +1 -1
  21. package/dist/assets/{fr-CNTlVypq.js → fr-nXAAl4qu.js} +1 -1
  22. package/dist/assets/{gitApi-BHEXs_kS.js → gitApi-itjXkp9E.js} +6 -6
  23. package/dist/assets/insertionBoundaries-BumXctlh.js +1 -0
  24. package/dist/assets/{ja-C_eW5ZM8.js → ja-CLcxQZ5K.js} +1 -1
  25. package/dist/assets/{ko-CE3cOv7v.js → ko-KgjBt0nP.js} +1 -1
  26. package/dist/assets/main-BWyu53zj.js +172 -0
  27. package/dist/assets/main-Drfmhboy.js +2 -0
  28. package/dist/assets/miniChat-CC3awYO5.js +2 -0
  29. package/dist/assets/mobile-DbOR4vtC.js +2 -0
  30. package/dist/assets/multirun-CrlXzIhD.js +4 -0
  31. package/dist/assets/{pl-BZKZOE99.js → pl-ZJkD7N-8.js} +1 -1
  32. package/dist/assets/platform-G8Cxe5wN.js +2 -0
  33. package/dist/assets/{projectMeta-BXvk9v0Y.js → projectMeta-C-VsUy14.js} +1 -1
  34. package/dist/assets/{pt-BR-DHDgp8S3.js → pt-BR-B6nleSMM.js} +1 -1
  35. package/dist/assets/{radio-Bz3wW90q.js → radio-CaoU7Lu-.js} +1 -1
  36. package/dist/assets/renderElectronMiniChatApp-BX-vxTMr.js +2 -0
  37. package/dist/assets/renderMobileApp-CSH0JwGO.js +23 -0
  38. package/dist/assets/runtimeConfig-D6Btfpc2.js +2 -0
  39. package/dist/assets/runtimeEndpointReset-DfILEKXr.js +145 -0
  40. package/dist/assets/{sortable-tabs-strip-DA7w0nsV.js → sortable-tabs-strip-DULPi5Jt.js} +1 -1
  41. package/dist/assets/{src-7UHu0sNZ.css → src-F6gEZAFJ.css} +1 -1
  42. package/dist/assets/{store-CUWqzRt7.js → store-BDxgw-Hx.js} +2 -2
  43. package/dist/assets/terminalApi-os4uWEou.js +1 -0
  44. package/dist/assets/types-BuiqMmh_.js +1 -0
  45. package/dist/assets/{uk-CfQK6cz1.js → uk-KTDMzdyl.js} +1 -1
  46. package/dist/assets/{useAppFontEffects-CXaNayQ6.js → useAppFontEffects-DGq7jjOF.js} +5 -5
  47. package/dist/assets/{useDesktopWindowControlsLayout-DetZi3js.js → useDesktopWindowControlsLayout-DzesmOSh.js} +1 -1
  48. package/dist/assets/useEffectiveDirectory-BR3d8iyN.js +1 -0
  49. package/dist/assets/{useFontPreferences-92Qg-98H.js → useFontPreferences-B2QwnhAp.js} +1 -1
  50. package/dist/assets/{useMobileNavigationStore-BNXbEV2M.js → useMobileNavigationStore-BSreVaq2.js} +11 -11
  51. package/dist/assets/useSessionAutoCleanup-BNXZ_4Tj.js +1 -0
  52. package/dist/assets/{useWorkerHighlightedLines-B4w2EJ5y.js → useWorkerHighlightedLines-BCqkyru3.js} +1 -1
  53. package/dist/assets/{zh-CN-DvY2fKWp.js → zh-CN-BilLDIh_.js} +1 -1
  54. package/dist/assets/{zh-TW-eWe0lm3-.js → zh-TW-DBDsyRLQ.js} +1 -1
  55. package/dist/index.html +7 -5
  56. package/dist/mini-chat.html +7 -5
  57. package/dist/mobile.html +7 -5
  58. package/package.json +1 -1
  59. package/dist/assets/AssistantView-B34kl4il.js +0 -1
  60. package/dist/assets/MobileShareBridge-DqhQSf8z.js +0 -4
  61. package/dist/assets/MobileSurface-C2silN2X.js +0 -2
  62. package/dist/assets/OverlayScrollbar-Dk1uExgz.js +0 -1
  63. package/dist/assets/appThemeRegistry-CCk0bHI-.js +0 -2
  64. package/dist/assets/gitApiHttp-BxGAFLTf.js +0 -2
  65. package/dist/assets/insertionBoundaries-DbDVnbDC.js +0 -1
  66. package/dist/assets/main-DvKUAYFu.js +0 -172
  67. package/dist/assets/main-L6WiOyvO.js +0 -2
  68. package/dist/assets/miniChat-C9jmbnFh.js +0 -2
  69. package/dist/assets/mobile-BOin_sXb.js +0 -2
  70. package/dist/assets/multirun-D-6xkHW1.js +0 -4
  71. package/dist/assets/renderElectronMiniChatApp-BjJgTBYX.js +0 -2
  72. package/dist/assets/renderMobileApp-C1Mx2Onb.js +0 -23
  73. package/dist/assets/runtimeConfig-BXCt7ZsQ.js +0 -1
  74. package/dist/assets/runtimeEndpointReset-Bpu5TCuK.js +0 -145
  75. package/dist/assets/terminalApi-DpiAJlil.js +0 -1
  76. package/dist/assets/useEffectiveDirectory-B45LYDwZ.js +0 -1
  77. package/dist/assets/useSessionAutoCleanup-DoCX9MkG.js +0 -1
@@ -0,0 +1 @@
1
+ import{F as e,W as t}from"./useUIStore-5agS8bsW.js";import{kn as n}from"./persistence-D1lIuyqO.js";import{xt as r}from"./platform-G8Cxe5wN.js";var i=1,a=1,o=0,s=`/api/terminal/ws`,c=1200,l=250,u=2e4,d=5e3,f=`__openchamberTerminalTransportState`,p=new TextEncoder,m=new TextDecoder,h=t=>e().websocket(t),g=e=>{let t=p.encode(JSON.stringify(e)),n=new Uint8Array(t.length+1);return n[0]=i,n.set(t,1),n},_=e=>e?((e.transports??[]).includes(`ws`)||e.preferred===`ws`)&&typeof e.ws?.path==`string`&&e.ws.path.length>0:!1,v=e=>e.streamCapability?.ws?.path??e.inputCapability?.ws?.path??s,y=e=>{switch(e){case`SESSION_NOT_FOUND`:return Error(`Terminal session not found`);case`NOT_BOUND`:return Error(`Terminal session is not bound`);case`WRITE_FAIL`:return Error(`Failed to write to terminal`);case`RATE_LIMIT`:return Error(`Terminal websocket is rate limited`);case`BAD_FRAME`:return Error(`Terminal websocket protocol violation`);default:return Error(`Terminal websocket error`)}},b=class{socket=null;socketUrl=``;boundSessionId=null;requestedSessionId=null;openPromise=null;reconnectTimeout=null;keepaliveInterval=null;closed=!1;subscriptions=new Map;activeSubscriptionToken=null;replayCursorBySession=new Map;configure(e){if(e){if(this.socketUrl===e){this.closed=!1,this.isConnectedOrConnecting()||this.ensureConnected();return}this.socketUrl=e,this.closed=!1,this.resetConnection(),this.ensureConnected()}}subscribe(e,t,n,r){let i=Symbol(e),o={token:i,sessionId:e,onEvent:t,onError:n,maxRetries:r?.maxRetries??3,initialRetryDelay:r?.initialRetryDelay??1e3,maxRetryDelay:r?.maxRetryDelay??8e3,connectionTimeout:r?.connectionTimeout??1e4,retryCount:0,connected:!1,connectionTimeoutId:null};return this.subscriptions.set(i,o),this.activeSubscriptionToken=i,this.requestedSessionId=e,this.ensureConnected(),this.boundSessionId===e&&this.socket&&this.socket.readyState===a?(o.retryCount=0,o.connected=!0,o.onEvent({type:`connected`})):(this.boundSessionId=null,this.startConnectionTimeout(o),this.bindActiveSession()),()=>{if(this.clearConnectionTimeout(o),this.subscriptions.delete(i),this.activeSubscriptionToken===i&&(this.activeSubscriptionToken=null),this.hasSubscriptionForSession(e)||(this.boundSessionId===e&&(this.boundSessionId=null),this.requestedSessionId===e&&(this.requestedSessionId=null)),this.subscriptions.size===0){this.clearReconnectTimeout(),this.resetConnection();return}this.promoteActiveSubscription()}}async sendInput(e,t){if(!e||!t||this.closed||!this.socketUrl)return!1;let n=await this.getOpenSocket(c);if(!n||n.readyState!==a)return!1;try{return this.boundSessionId!==e&&(this.requestedSessionId=e,n.send(g({t:`b`,s:e,r:this.replayCursorBySession.get(e)??0,v:2}))),n.send(t),!0}catch{return this.handleSocketFailure(Error(`Terminal websocket send failed`)),!1}}unbindSession(e){e&&(this.boundSessionId===e&&(this.boundSessionId=null),this.requestedSessionId===e&&(this.requestedSessionId=null))}close(){this.closed=!0,this.clearReconnectTimeout();for(let e of this.subscriptions.values())this.clearConnectionTimeout(e);this.resetConnection(),this.socketUrl=``,this.subscriptions.clear(),this.activeSubscriptionToken=null,this.replayCursorBySession.clear()}prime(){this.closed||!this.socketUrl||this.isConnectedOrConnecting()||this.ensureConnected()}isConnectedOrConnecting(e){return this.closed||e&&this.socketUrl!==e?!1:this.socket&&(this.socket.readyState===a||this.socket.readyState===o)?!0:this.openPromise!==null}getActiveSubscription(){return this.activeSubscriptionToken?this.subscriptions.get(this.activeSubscriptionToken)??null:null}hasSubscriptionForSession(e){for(let t of this.subscriptions.values())if(t.sessionId===e)return!0;return!1}promoteActiveSubscription(){if(this.getActiveSubscription())return;let e=this.subscriptions.values().next().value;if(!e){this.activeSubscriptionToken=null;return}this.activeSubscriptionToken=e.token,this.requestedSessionId=e.sessionId,this.boundSessionId===e.sessionId?e.connected||(e.retryCount=0,e.connected=!0,this.clearConnectionTimeout(e),e.onEvent({type:`connected`})):(this.boundSessionId=null,this.startConnectionTimeout(e),this.bindActiveSession())}emitToSession(e,t){for(let n of this.subscriptions.values())n.sessionId===e&&n.onEvent(t)}markSessionConnected(e,t){for(let n of this.subscriptions.values())n.sessionId===e&&(n.retryCount=0,n.connected=!0,this.clearConnectionTimeout(n),n.onEvent(t))}emitErrorToSession(e,t,n){for(let r of this.subscriptions.values())r.sessionId===e&&(r.connected=!1,n&&this.clearConnectionTimeout(r),r.onError?.(t,n))}startConnectionTimeout(e){this.clearConnectionTimeout(e),e.connectionTimeoutId=setTimeout(()=>{e.connected||!this.subscriptions.has(e.token)||this.getActiveSubscription()?.token===e.token&&this.handleSocketFailure(Error(`Connection timeout`))},e.connectionTimeout)}clearConnectionTimeout(e){e.connectionTimeoutId&&=(clearTimeout(e.connectionTimeoutId),null)}async getOpenSocket(e){if(this.socket&&this.socket.readyState===a||(this.ensureConnected(),this.socket&&this.socket.readyState===a))return this.socket;let t=await Promise.race([this.openPromise??Promise.resolve(null),new Promise(t=>{setTimeout(()=>t(null),e)})]);return t&&t.readyState===a?t:this.socket&&this.socket.readyState===a?this.socket:null}ensureConnected(){this.closed||!this.socketUrl||this.socket&&(this.socket.readyState===a||this.socket.readyState===o)||(this.openPromise||=(this.clearReconnectTimeout(),(async()=>{try{await t()}catch{}return new Promise(e=>{let t=!1,n=null,i=r=>{t||(t=!0,n&&=(clearTimeout(n),null),this.openPromise=null,e(r))};try{let e=r(h(this.socketUrl));e.binaryType=`arraybuffer`,e.onopen=()=>{this.socket=e,this.startKeepalive(),i(e)},e.onmessage=e=>{this.handleSocketMessage(e.data)},e.onerror=()=>{!this.closed&&!this.getActiveSubscription()&&this.scheduleReconnect(Error(`Terminal websocket error`))},e.onclose=()=>{this.socket===e&&(this.socket=null,this.boundSessionId=null,this.stopKeepalive(),this.closed||this.scheduleReconnect(Error(`Terminal stream connection error`))),i(null)},this.socket=e,n=setTimeout(()=>{e.readyState===o&&(e.close(),i(null))},d)}catch{i(null),this.closed||this.scheduleReconnect(Error(`Terminal websocket open failed`))}})})()))}bindActiveSession(){let e=this.getActiveSubscription();if(!(!e||!this.socket||this.socket.readyState!==a)){this.requestedSessionId=e.sessionId;try{this.socket.send(g({t:`b`,s:e.sessionId,r:this.replayCursorBySession.get(e.sessionId)??0,v:2}))}catch{this.handleSocketFailure(Error(`Terminal websocket bind failed`))}}}scheduleReconnect(e){if(this.closed||!this.socketUrl||this.reconnectTimeout)return;this.promoteActiveSubscription();let t=this.getActiveSubscription();if(!t)return;let n=t.retryCount+1,r=t.initialRetryDelay,i=t.maxRetryDelay,a=t.maxRetries;if(n>a){this.clearConnectionTimeout(t),this.emitErrorToSession(t.sessionId,e,!0);return}t.retryCount=n;for(let e of this.subscriptions.values())e.sessionId===t.sessionId&&(e.connected=!1,e.retryCount=n,e.onEvent({type:`reconnecting`,attempt:n,maxAttempts:a}));this.startConnectionTimeout(t);let o=Math.min(r*2**Math.max(n-1,0),i)+Math.floor(Math.random()*l);this.reconnectTimeout=setTimeout(()=>{this.reconnectTimeout=null,this.ensureConnected(),this.bindActiveSession()},o)}clearReconnectTimeout(){this.reconnectTimeout&&=(clearTimeout(this.reconnectTimeout),null)}sendControl(e){if(!this.socket||this.socket.readyState!==a)return!1;try{return this.socket.send(g(e)),!0}catch{return this.handleSocketFailure(Error(`Terminal websocket control send failed`)),!1}}startKeepalive(){this.stopKeepalive(),this.keepaliveInterval=setInterval(()=>{this.closed||this.sendControl({t:`p`,v:2})},u)}stopKeepalive(){this.keepaliveInterval&&=(clearInterval(this.keepaliveInterval),null)}async handleSocketMessage(e){let t=await this.asUint8Array(e);if(t&&t.length>0&&t[0]===i){this.handleControlMessage(t);return}let n=await this.asText(e);if(!n)return;let r=this.boundSessionId??this.requestedSessionId??this.getActiveSubscription()?.sessionId;r&&this.emitToSession(r,{type:`data`,data:n})}handleControlMessage(e){if(e.length<2)return;let t;try{t=JSON.parse(m.decode(e.subarray(1)))}catch{this.handleSocketFailure(Error(`Terminal websocket control parse failed`));return}let n=this.getActiveSubscription();switch(t.t){case`ok`:this.bindActiveSession();return;case`po`:return;case`d`:{let e=t.s??this.boundSessionId??this.requestedSessionId;if(!e)return;typeof t.i==`number`&&Number.isFinite(t.i)&&this.replayCursorBySession.set(e,Math.max(this.replayCursorBySession.get(e)??0,Math.trunc(t.i))),typeof t.d==`string`&&t.d.length>0&&this.emitToSession(e,{type:`data`,data:t.d});return}case`bok`:{let e=t.s??this.requestedSessionId;if(this.boundSessionId=e,!e)return;this.markSessionConnected(e,{type:`connected`,runtime:t.runtime,ptyBackend:t.ptyBackend});return}case`x`:{let e=t.s??this.boundSessionId??n?.sessionId??null;if(!e){this.boundSessionId=null;return}this.boundSessionId===e&&(this.boundSessionId=null),this.requestedSessionId===e&&(this.requestedSessionId=null),this.replayCursorBySession.delete(e);for(let n of this.subscriptions.values())n.sessionId===e&&(n.connected=!1,this.clearConnectionTimeout(n),n.onEvent({type:`exit`,exitCode:t.exitCode,signal:t.signal??null}));return}case`e`:{let e=y(t.c),r=t.f===!0;(t.c===`NOT_BOUND`||t.c===`SESSION_NOT_FOUND`)&&(this.boundSessionId=null);let i=t.s??this.requestedSessionId??n?.sessionId??null;if(i){if(t.c===`SESSION_NOT_FOUND`){this.emitErrorToSession(i,e,!0);return}this.emitErrorToSession(i,e,r)}else n&&(n.connected=!1,r&&this.clearConnectionTimeout(n),n.onError?.(e,r));t.f===!0&&this.handleSocketFailure(e);return}default:return}}async asUint8Array(e){if(e instanceof ArrayBuffer)return new Uint8Array(e);if(e instanceof Uint8Array)return e;if(typeof Blob<`u`&&e instanceof Blob){let t=await e.arrayBuffer();return new Uint8Array(t)}return null}async asText(e){if(typeof e==`string`)return e;let t=await this.asUint8Array(e);return t?m.decode(t):``}handleSocketFailure(e){this.boundSessionId=null,this.requestedSessionId=null,this.resetConnection(),this.scheduleReconnect(e)}resetConnection(){if(this.openPromise=null,this.stopKeepalive(),this.socket){let e=this.socket;this.socket=null,e.onopen=null,e.onmessage=null,e.onerror=null,e.onclose=null,(e.readyState===a||e.readyState===o)&&e.close()}this.boundSessionId=null}},x=()=>{let e=globalThis;return e[f]||(e[f]={inputCapability:null,streamCapability:null,manager:null}),e[f]},S=()=>{let e=x();return e.manager||=new b,e.manager},C=e=>{let t=x();if(t.inputCapability=e?.input??null,t.streamCapability=e?.stream??null,!_(t.inputCapability)&&!_(t.streamCapability)){t.manager?.close(),t.manager=null;return}let n=h(v(t));n&&S().configure(n)},w=async(e,t)=>{let r=await n(`/api/terminal/${e}/input`,{method:`POST`,headers:{"Content-Type":`text/plain`},body:t});if(!r.ok){let e=await r.json().catch(()=>({error:`Failed to send terminal input`}));throw Error(e.error||`Failed to send terminal input`)}};async function T(e){let t=await n(`/api/terminal/create`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({cwd:e.cwd,cols:e.cols??80,rows:e.rows??24})});if(!t.ok){let e=await t.json().catch(()=>({error:`Failed to create terminal`}));throw Error(e.error||`Failed to create terminal session`)}let r=await t.json();return C(r.capabilities),r}var E=(t,n,r,i={})=>{let a=i.maxRetries??3,o=i.initialRetryDelay??1e3,s=i.maxRetryDelay??8e3,c=i.connectionTimeout??1e4,l=null,u=0,d=null,f=null,p=!1,m=!1,h=()=>{d&&=(clearTimeout(d),null),f&&=(clearTimeout(f),null)},g=()=>{p||(p=!0,h(),l&&=(l.close(),null))},_=(e,t)=>{if(!(p||m)){if(u<a&&!t){u+=1;let e=Math.min(o*2**(u-1),s);n({type:`reconnecting`,attempt:u,maxAttempts:a}),d=setTimeout(()=>{!p&&!m&&v()},e);return}r?.(e,!0),g()}},v=()=>{if(p||m||l&&l.readyState!==EventSource.CLOSED)return;l=new EventSource(e().sse(`/api/terminal/${t}/stream`));let i=!1;f=setTimeout(()=>{!i&&l?.readyState!==EventSource.OPEN&&(l?.close(),_(Error(`Connection timeout`),!1))},c),l.onopen=()=>{i||(i=!0,u=0,h(),n({type:`connected`}))},l.onmessage=e=>{try{let r=JSON.parse(e.data);r.type===`exit`&&(x().manager?.unbindSession(t),m=!0,g()),n(r)}catch(e){r?.(e,!1)}},l.onerror=()=>{h();let e=m||l?.readyState===EventSource.CLOSED;l?.close(),l=null,m||_(Error(`Terminal stream connection error`),e)}};return v(),g};function D(e,t,n,r={}){let i=x();if(i.streamCapability&&!_(i.streamCapability))return E(e,t,n,r);let a=S(),o=h(v(i));return o?(a.configure(o),a.subscribe(e,t,n,r)):E(e,t,n,r)}async function O(e,t){let n=x();n.manager&&await n.manager.sendInput(e,t)||await w(e,t)}async function k(e,t,r){let i=await n(`/api/terminal/${e}/resize`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({cols:t,rows:r})});if(!i.ok){let e=await i.json().catch(()=>({error:`Failed to resize terminal`}));throw Error(e.error||`Failed to resize terminal`)}}async function A(e){x().manager?.unbindSession(e);let t=await n(`/api/terminal/${e}`,{method:`DELETE`});if(!t.ok){let e=await t.json().catch(()=>({error:`Failed to close terminal`}));throw Error(e.error||`Failed to close terminal`)}}async function j(e,t){x().manager?.unbindSession(e);let r=await n(`/api/terminal/${e}/restart`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({cwd:t.cwd,cols:t.cols??80,rows:t.rows??24})});if(!r.ok){let e=await r.json().catch(()=>({error:`Failed to restart terminal`}));throw Error(e.error||`Failed to restart terminal`)}let i=await r.json();return C(i.capabilities),i}async function M(e){let t=await n(`/api/terminal/force-kill`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)});if(!t.ok){let e=await t.json().catch(()=>({error:`Failed to force kill terminal`}));throw Error(e.error||`Failed to force kill terminal`)}e.sessionId&&x().manager?.unbindSession(e.sessionId)}function N(){let e=x();e.manager?.close(),e.manager=null,e.inputCapability=null,e.streamCapability=null}function P(){let e=x();if(e.inputCapability&&e.streamCapability&&!_(e.inputCapability)&&!_(e.streamCapability))return;let t=h(v(e)||s);if(!t)return;let n=S();n.isConnectedOrConnecting(t)||(n.configure(t),n.prime())}export{M as a,j as c,N as i,O as l,D as n,P as o,T as r,k as s,A as t};
@@ -0,0 +1 @@
1
+ var e=class extends Error{code=`mobile_updates_unsupported`;constructor(e=`Mobile OTA updates are only available in the Capacitor native app`){super(e),this.name=`MobileUpdatesUnsupportedError`}};export{e as t};
@@ -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 робочого простору з URL панелі, а cookie auth з інструментів розробника браузера. 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":`Агенти`,"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":`Plugins`,"settings.view.home.cards.plugins.description":`Manage opencode plugins`,"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":`Агенти`,"settings.page.commands.title":`Команди`,"settings.page.mcp.title":`MCP`,"settings.page.plugins.title":`Plugins`,"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 у промптах. Підтримує псевдоніми та блоки prepend/append, сумісні з opencode-snippets.`,"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":`Вирішення конфліктів злиття/перебазування`,"settings.magicPrompts.sidebar.item.gitCherrypickConflictResolve":`Вирішення конфліктів`,"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":`Планування Todo`,"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":`Підключайтеся до інших серверів OpenChamber через імпорт посилання або SSH.`,"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":`Назва екземпляра — напр. Домашній Mac`,"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":`QR-код підключення OpenChamber`,"settings.remoteInstances.clientAuth.qrEnlarge":`Збільшити QR-код`,"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":`Також дозволити зашифрований relay поза домом`,"settings.remoteInstances.clientAuth.addDevice.fallback.preferLocal":`Віддавати перевагу прямому домашньому підключенню, коли доступне`,"settings.remoteInstances.clientAuth.addDevice.relayUrlLabel":`Сервер Relay`,"settings.remoteInstances.clientAuth.addDevice.relayUrlHint":`Використовуйте офіційний Relay OpenChamber або введіть власну адресу ws:// чи wss://. Пристрій збереже адресу з QR-коду.`,"settings.remoteInstances.clientAuth.addDevice.relayUrlDeployLink":`Розгорніть власний Relay.`,"settings.remoteInstances.clientAuth.addDevice.relayUrlLockedHint":`На цьому сервері адресу Relay зафіксовано через OPENCHAMBER_RELAY_URL.`,"settings.remoteInstances.clientAuth.addDevice.relayUrlInvalid":`Введіть дійсну адресу Relay, що починається з ws:// або wss://.`,"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":`Створити QR-парування телефону для {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":`Підключено · Relay`,"settings.remoteInstances.clientAuth.lastUsed":`Останнє використання {date}`,"settings.remoteInstances.clientAuth.neverUsed":`Ще не використовувався`,"settings.remoteInstances.relay.title":`OpenChamber Relay`,"settings.remoteInstances.relay.autoHint":`Вмикається автоматично, коли ти паруєш пристрій через relay.`,"settings.remoteInstances.relay.description":`Дозволяє вашим іншим пристроям підключатися звідки завгодно без відкриття портів. Трафік шифрується наскрізно — релей не може його прочитати.`,"settings.remoteInstances.relay.enableHint":`Нічого не передається, доки ви не увімкнете релей на цьому сервері.`,"settings.remoteInstances.relay.actions.enable":`Увімкнути Relay`,"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":`Відскануйте цей QR-код застосунком 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":`Автоматичне відкриття URL для {title}`,"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-перенаправлення Desktop`,"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":`Агенти`,"settings.agents.sidebar.total":`Усього {count}`,"settings.agents.sidebar.empty.title":`Агентів не налаштовано`,"settings.agents.sidebar.empty.description":`Скористайтеся кнопкою + вище, щоб створити його`,"settings.agents.sidebar.section.builtIn":`Вбудовані агенти`,"settings.agents.sidebar.section.custom":`Спеціальні агенти`,"settings.agents.sidebar.badge.system":`Системний`,"settings.agents.sidebar.dialog.deleteTitle":`Видалити агента`,"settings.agents.sidebar.dialog.resetTitle":`Скинути агента`,"settings.agents.sidebar.dialog.deleteDescription":`Ви впевнені, що хочете видалити агента "{name}"?`,"settings.agents.sidebar.dialog.resetDescription":`Ви впевнені, що бажаєте скинути агент «{name}» до конфігурації за замовчуванням?`,"settings.agents.sidebar.renameDialog.title":`Перейменувати агента`,"settings.agents.sidebar.renameDialog.description":`Введіть нову назву для агента "@{name}"`,"settings.agents.sidebar.renameDialog.placeholder":`Нове ім'я агента...`,"settings.agents.sidebar.toast.builtInCannotDelete":`Вбудовані агенти не можна видалити`,"settings.agents.sidebar.toast.agentDeleted":`Агент "{name}" успішно видалено`,"settings.agents.sidebar.toast.agentReset":`Агента "{name}" скинуто до значень за замовчуванням`,"settings.agents.sidebar.toast.deleteFailed":`Не вдалося видалити агента`,"settings.agents.sidebar.toast.definitionNotFound":`Визначення агента не знайдено. Нічого не змінено.`,"settings.agents.sidebar.toast.resetFailed":`Не вдалося скинути агента`,"settings.agents.sidebar.toast.agentNameRequired":`Потрібно вказати ім’я агента`,"settings.agents.sidebar.toast.agentExists":`Агент із такою назвою вже існує`,"settings.agents.sidebar.toast.removeOldAfterRenameFailed":`Не вдалося видалити старого агента після перейменування`,"settings.agents.sidebar.toast.renameFailed":`Не вдалося перейменувати агента`,"settings.agents.sidebar.toast.agentRenamed":`Агента перейменовано на "{name}"`,"settings.agents.page.toast.permissionNameRequired":`Потрібна назва дозволу`,"settings.agents.page.toast.created":`Агент створено успішно`,"settings.agents.page.toast.updated":`Агент успішно оновлено`,"settings.agents.page.toast.createFailed":`Не вдалося створити агента`,"settings.agents.page.toast.updateFailed":`Не вдалося оновити агента`,"settings.agents.page.toast.saveUnexpectedError":`Під час збереження сталася помилка`,"settings.agents.page.toast.savedManualRestart":`Збережено на диск. Перезапустіть підключений сервер OpenCode, щоб застосувати зміни.`,"settings.agents.page.empty.title":`Виберіть агента на бічній панелі`,"settings.agents.page.empty.description":`або створіть нового`,"settings.agents.page.title.new":`Новий агент`,"settings.agents.page.subtitle.new":`Налаштуйте нову роль помічника`,"settings.agents.page.subtitle.edit":`Редагувати налаштування агента`,"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":`Ім'я агента`,"settings.agents.page.field.agentNamePlaceholder":`Ім’я агента`,"settings.agents.page.field.scopePlaceholder":`Область`,"settings.agents.page.field.descriptionPlaceholder":`Що робить цей агент?`,"settings.agents.page.field.mode":`Режим`,"settings.agents.page.field.modeTooltip":`Видимість основного або субагента`,"settings.agents.page.field.overrideModel":`Перевизначити модель`,"settings.agents.page.field.variant":`Варіант мислення`,"settings.agents.page.field.variantTooltip":`Необов'язково. Якщо модель підтримує міркування, варіант контролює глибину міркування.`,"settings.agents.page.field.variantHint":`Специфічно для моделі (напр. варіант Anthropic)`,"settings.agents.page.field.variantPlaceholder":`напр. high, max, low, none`,"settings.agents.page.field.temperature":`Температура`,"settings.agents.page.field.temperatureTooltip":`Контролює випадковість. Вищий = творчий, нижчий = зосереджений.`,"settings.agents.page.field.temperatureRange":`0,0 до 2,0`,"settings.agents.page.field.clearTemperatureAria":`Очистити перевизначення температури`,"settings.agents.page.field.topP":`Top P`,"settings.agents.page.field.topPTooltip":`Різноманітність nucleus sampling. Нижче значення = лише ймовірніші токени.`,"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":`Основний`,"settings.agents.page.mode.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}. OpenCode також додає правила з AGENTS.md на рівні проєкту, якщо вони існують.`,"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 робочого простору з URL панелі, а cookie auth з інструментів розробника браузера. 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":`Агенти`,"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":`Plugins`,"settings.view.home.cards.plugins.description":`Manage opencode plugins`,"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":`Агенти`,"settings.page.commands.title":`Команди`,"settings.page.mcp.title":`MCP`,"settings.page.plugins.title":`Plugins`,"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 у промптах. Підтримує псевдоніми та блоки prepend/append, сумісні з opencode-snippets.`,"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":`Вирішення конфліктів злиття/перебазування`,"settings.magicPrompts.sidebar.item.gitCherrypickConflictResolve":`Вирішення конфліктів`,"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":`Планування Todo`,"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":`Підключайтеся до інших серверів OpenChamber через імпорт посилання або SSH.`,"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":`Назва екземпляра — напр. Домашній Mac`,"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":`QR-код підключення OpenChamber`,"settings.remoteInstances.clientAuth.qrEnlarge":`Збільшити QR-код`,"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":`Також дозволити зашифрований relay поза домом`,"settings.remoteInstances.clientAuth.addDevice.fallback.preferLocal":`Віддавати перевагу прямому домашньому підключенню, коли доступне`,"settings.remoteInstances.clientAuth.addDevice.relayUrlLabel":`Сервер Relay`,"settings.remoteInstances.clientAuth.addDevice.relayUrlHint":`Використовуйте офіційний Relay OpenChamber або введіть власну адресу ws:// чи wss://. Пристрій збереже адресу з QR-коду.`,"settings.remoteInstances.clientAuth.addDevice.relayUrlDeployLink":`Розгорніть власний Relay.`,"settings.remoteInstances.clientAuth.addDevice.relayUrlLockedHint":`На цьому сервері адресу Relay зафіксовано через OPENCHAMBER_RELAY_URL.`,"settings.remoteInstances.clientAuth.addDevice.relayUrlInvalid":`Введіть дійсну адресу Relay, що починається з ws:// або wss://.`,"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":`Створити QR-парування телефону для {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":`Підключено · Relay`,"settings.remoteInstances.clientAuth.lastUsed":`Останнє використання {date}`,"settings.remoteInstances.clientAuth.neverUsed":`Ще не використовувався`,"settings.remoteInstances.relay.title":`OpenChamber Relay`,"settings.remoteInstances.relay.autoHint":`Вмикається автоматично, коли ти паруєш пристрій через relay.`,"settings.remoteInstances.relay.description":`Дозволяє вашим іншим пристроям підключатися звідки завгодно без відкриття портів. Трафік шифрується наскрізно — релей не може його прочитати.`,"settings.remoteInstances.relay.enableHint":`Нічого не передається, доки ви не увімкнете релей на цьому сервері.`,"settings.remoteInstances.relay.actions.enable":`Увімкнути Relay`,"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":`Відскануйте цей QR-код застосунком 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":`Автоматичне відкриття URL для {title}`,"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-перенаправлення Desktop`,"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":`Веб-пакет`,"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":`Агенти`,"settings.agents.sidebar.total":`Усього {count}`,"settings.agents.sidebar.empty.title":`Агентів не налаштовано`,"settings.agents.sidebar.empty.description":`Скористайтеся кнопкою + вище, щоб створити його`,"settings.agents.sidebar.section.builtIn":`Вбудовані агенти`,"settings.agents.sidebar.section.custom":`Спеціальні агенти`,"settings.agents.sidebar.badge.system":`Системний`,"settings.agents.sidebar.dialog.deleteTitle":`Видалити агента`,"settings.agents.sidebar.dialog.resetTitle":`Скинути агента`,"settings.agents.sidebar.dialog.deleteDescription":`Ви впевнені, що хочете видалити агента "{name}"?`,"settings.agents.sidebar.dialog.resetDescription":`Ви впевнені, що бажаєте скинути агент «{name}» до конфігурації за замовчуванням?`,"settings.agents.sidebar.renameDialog.title":`Перейменувати агента`,"settings.agents.sidebar.renameDialog.description":`Введіть нову назву для агента "@{name}"`,"settings.agents.sidebar.renameDialog.placeholder":`Нове ім'я агента...`,"settings.agents.sidebar.toast.builtInCannotDelete":`Вбудовані агенти не можна видалити`,"settings.agents.sidebar.toast.agentDeleted":`Агент "{name}" успішно видалено`,"settings.agents.sidebar.toast.agentReset":`Агента "{name}" скинуто до значень за замовчуванням`,"settings.agents.sidebar.toast.deleteFailed":`Не вдалося видалити агента`,"settings.agents.sidebar.toast.definitionNotFound":`Визначення агента не знайдено. Нічого не змінено.`,"settings.agents.sidebar.toast.resetFailed":`Не вдалося скинути агента`,"settings.agents.sidebar.toast.agentNameRequired":`Потрібно вказати ім’я агента`,"settings.agents.sidebar.toast.agentExists":`Агент із такою назвою вже існує`,"settings.agents.sidebar.toast.removeOldAfterRenameFailed":`Не вдалося видалити старого агента після перейменування`,"settings.agents.sidebar.toast.renameFailed":`Не вдалося перейменувати агента`,"settings.agents.sidebar.toast.agentRenamed":`Агента перейменовано на "{name}"`,"settings.agents.page.toast.permissionNameRequired":`Потрібна назва дозволу`,"settings.agents.page.toast.created":`Агент створено успішно`,"settings.agents.page.toast.updated":`Агент успішно оновлено`,"settings.agents.page.toast.createFailed":`Не вдалося створити агента`,"settings.agents.page.toast.updateFailed":`Не вдалося оновити агента`,"settings.agents.page.toast.saveUnexpectedError":`Під час збереження сталася помилка`,"settings.agents.page.toast.savedManualRestart":`Збережено на диск. Перезапустіть підключений сервер OpenCode, щоб застосувати зміни.`,"settings.agents.page.empty.title":`Виберіть агента на бічній панелі`,"settings.agents.page.empty.description":`або створіть нового`,"settings.agents.page.title.new":`Новий агент`,"settings.agents.page.subtitle.new":`Налаштуйте нову роль помічника`,"settings.agents.page.subtitle.edit":`Редагувати налаштування агента`,"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":`Ім'я агента`,"settings.agents.page.field.agentNamePlaceholder":`Ім’я агента`,"settings.agents.page.field.scopePlaceholder":`Область`,"settings.agents.page.field.descriptionPlaceholder":`Що робить цей агент?`,"settings.agents.page.field.mode":`Режим`,"settings.agents.page.field.modeTooltip":`Видимість основного або субагента`,"settings.agents.page.field.overrideModel":`Перевизначити модель`,"settings.agents.page.field.variant":`Варіант мислення`,"settings.agents.page.field.variantTooltip":`Необов'язково. Якщо модель підтримує міркування, варіант контролює глибину міркування.`,"settings.agents.page.field.variantHint":`Специфічно для моделі (напр. варіант Anthropic)`,"settings.agents.page.field.variantPlaceholder":`напр. high, max, low, none`,"settings.agents.page.field.temperature":`Температура`,"settings.agents.page.field.temperatureTooltip":`Контролює випадковість. Вищий = творчий, нижчий = зосереджений.`,"settings.agents.page.field.temperatureRange":`0,0 до 2,0`,"settings.agents.page.field.clearTemperatureAria":`Очистити перевизначення температури`,"settings.agents.page.field.topP":`Top P`,"settings.agents.page.field.topPTooltip":`Різноманітність nucleus sampling. Нижче значення = лише ймовірніші токени.`,"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":`Основний`,"settings.agents.page.mode.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}. OpenCode також додає правила з AGENTS.md на рівні проєкту, якщо вони існують.`,"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":`Налаштувати нову slash-команду`,"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":`Назва команди`,"settings.commands.page.field.descriptionPlaceholder":`Що робить ця команда?`,"settings.commands.page.field.overrideAgent":`Перевизначити агента`,"settings.commands.page.field.templatePlaceholder":`Ваш шаблон команди...
4
4