@dyyz1993/codenomad 0.15.0

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 (496) hide show
  1. package/README.md +173 -0
  2. package/dist/api-types.js +1 -0
  3. package/dist/auth/auth-store.js +134 -0
  4. package/dist/auth/http-auth.js +37 -0
  5. package/dist/auth/manager.js +140 -0
  6. package/dist/auth/password-hash.js +32 -0
  7. package/dist/auth/session-manager.js +17 -0
  8. package/dist/auth/token-manager.js +27 -0
  9. package/dist/background-processes/manager.js +576 -0
  10. package/dist/bin.js +24 -0
  11. package/dist/cli-upgrade.js +53 -0
  12. package/dist/cli-upgrade.test.js +31 -0
  13. package/dist/clients/connection-manager.js +93 -0
  14. package/dist/config/location.js +57 -0
  15. package/dist/config/schema.js +71 -0
  16. package/dist/events/bus.js +45 -0
  17. package/dist/filesystem/__tests__/browser.test.js +65 -0
  18. package/dist/filesystem/__tests__/search-cache.test.js +40 -0
  19. package/dist/filesystem/browser.js +306 -0
  20. package/dist/filesystem/search-cache.js +43 -0
  21. package/dist/filesystem/search.js +135 -0
  22. package/dist/index.js +477 -0
  23. package/dist/launcher.js +149 -0
  24. package/dist/loader.js +21 -0
  25. package/dist/logger.js +109 -0
  26. package/dist/opencode-config/README.md +32 -0
  27. package/dist/opencode-config/opencode.jsonc +3 -0
  28. package/dist/opencode-config/package-lock.json +380 -0
  29. package/dist/opencode-config/package.json +9 -0
  30. package/dist/opencode-config/plugin/codenomad.ts +62 -0
  31. package/dist/opencode-config/plugin/lib/background-process.ts +265 -0
  32. package/dist/opencode-config/plugin/lib/client.ts +133 -0
  33. package/dist/opencode-config/plugin/lib/request.ts +214 -0
  34. package/dist/opencode-config.js +26 -0
  35. package/dist/plugins/channel.js +40 -0
  36. package/dist/plugins/handlers.js +17 -0
  37. package/dist/plugins/voice-mode.js +78 -0
  38. package/dist/releases/dev-release-monitor.js +75 -0
  39. package/dist/releases/release-monitor.js +107 -0
  40. package/dist/server/__tests__/network-addresses.test.js +68 -0
  41. package/dist/server/__tests__/remote-proxy.test.js +204 -0
  42. package/dist/server/http-server.js +926 -0
  43. package/dist/server/network-addresses.js +114 -0
  44. package/dist/server/remote-proxy.js +466 -0
  45. package/dist/server/routes/auth-pages/login.html +135 -0
  46. package/dist/server/routes/auth-pages/token.html +93 -0
  47. package/dist/server/routes/auth.js +148 -0
  48. package/dist/server/routes/background-processes.js +78 -0
  49. package/dist/server/routes/events.js +66 -0
  50. package/dist/server/routes/filesystem.js +43 -0
  51. package/dist/server/routes/meta.js +44 -0
  52. package/dist/server/routes/plugin.js +70 -0
  53. package/dist/server/routes/remote-proxy.js +42 -0
  54. package/dist/server/routes/remote-servers.js +142 -0
  55. package/dist/server/routes/settings.js +69 -0
  56. package/dist/server/routes/sidecars.js +46 -0
  57. package/dist/server/routes/speech.js +63 -0
  58. package/dist/server/routes/storage.js +52 -0
  59. package/dist/server/routes/workspaces.js +221 -0
  60. package/dist/server/routes/worktrees.js +156 -0
  61. package/dist/server/tls.js +224 -0
  62. package/dist/settings/binaries.js +37 -0
  63. package/dist/settings/merge-patch.js +33 -0
  64. package/dist/settings/migrate.js +238 -0
  65. package/dist/settings/public-config.js +33 -0
  66. package/dist/settings/service.js +101 -0
  67. package/dist/settings/yaml-doc-store.js +96 -0
  68. package/dist/sidecars/manager.js +193 -0
  69. package/dist/speech/providers/openai-compatible.js +189 -0
  70. package/dist/speech/service.js +58 -0
  71. package/dist/storage/instance-store.js +56 -0
  72. package/dist/ui/__tests__/remote-ui.test.js +67 -0
  73. package/dist/ui/remote-ui.js +462 -0
  74. package/dist/workspaces/__tests__/git-worktrees.test.js +43 -0
  75. package/dist/workspaces/__tests__/spawn.test.js +140 -0
  76. package/dist/workspaces/git-mutations.js +98 -0
  77. package/dist/workspaces/git-status.js +323 -0
  78. package/dist/workspaces/git-worktrees.js +216 -0
  79. package/dist/workspaces/instance-events.js +180 -0
  80. package/dist/workspaces/manager.js +368 -0
  81. package/dist/workspaces/opencode-auth.js +34 -0
  82. package/dist/workspaces/opencode-auth.test.js +34 -0
  83. package/dist/workspaces/runtime.js +366 -0
  84. package/dist/workspaces/spawn.js +219 -0
  85. package/dist/workspaces/worktree-directory.js +74 -0
  86. package/dist/workspaces/worktree-map.js +116 -0
  87. package/package.json +50 -0
  88. package/public/apple-touch-icon-180x180.png +0 -0
  89. package/public/assets/ChangesTab-BRNmSjeC.js +2 -0
  90. package/public/assets/CodeNomad-Icon-bmTWNPXy.png +0 -0
  91. package/public/assets/DiffToolbar-DPPgfx42.js +1 -0
  92. package/public/assets/FilesTab-sEeGPOoz.js +2 -0
  93. package/public/assets/GitChangesTab-tJ-TCq0c.js +2 -0
  94. package/public/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  95. package/public/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  96. package/public/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  97. package/public/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  98. package/public/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  99. package/public/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  100. package/public/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  101. package/public/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  102. package/public/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  103. package/public/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  104. package/public/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  105. package/public/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  106. package/public/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  107. package/public/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  108. package/public/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  109. package/public/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  110. package/public/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  111. package/public/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  112. package/public/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  113. package/public/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  114. package/public/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  115. package/public/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  116. package/public/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  117. package/public/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  118. package/public/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  119. package/public/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  120. package/public/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  121. package/public/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  122. package/public/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  123. package/public/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  124. package/public/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  125. package/public/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  126. package/public/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  127. package/public/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  128. package/public/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  129. package/public/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  130. package/public/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  131. package/public/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  132. package/public/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  133. package/public/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  134. package/public/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  135. package/public/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  136. package/public/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  137. package/public/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  138. package/public/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  139. package/public/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  140. package/public/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  141. package/public/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  142. package/public/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  143. package/public/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  144. package/public/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  145. package/public/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  146. package/public/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  147. package/public/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  148. package/public/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  149. package/public/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  150. package/public/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  151. package/public/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  152. package/public/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  153. package/public/assets/SplitFilePanel-CHqNLZvU.js +1 -0
  154. package/public/assets/StatusTab-DMd0ByCA.js +1 -0
  155. package/public/assets/abap-BdImnpbu.js +1 -0
  156. package/public/assets/actionscript-3-CfeIJUat.js +1 -0
  157. package/public/assets/ada-bCR0ucgS.js +1 -0
  158. package/public/assets/align-justify-BWapkGTe.js +1 -0
  159. package/public/assets/andromeeda-C-Jbm3Hp.js +1 -0
  160. package/public/assets/angular-html-CU67Zn6k.js +1 -0
  161. package/public/assets/angular-ts-BwZT4LLn.js +1 -0
  162. package/public/assets/apache-Pmp26Uib.js +1 -0
  163. package/public/assets/apex-DhZLUxFE.js +1 -0
  164. package/public/assets/apl-dKokRX4l.js +1 -0
  165. package/public/assets/applescript-Co6uUVPk.js +1 -0
  166. package/public/assets/ara-BRHolxvo.js +1 -0
  167. package/public/assets/asciidoc-Dv7Oe6Be.js +1 -0
  168. package/public/assets/asm-D_Q5rh1f.js +1 -0
  169. package/public/assets/astro-CbQHKStN.js +1 -0
  170. package/public/assets/aurora-x-D-2ljcwZ.js +1 -0
  171. package/public/assets/awk-DMzUqQB5.js +1 -0
  172. package/public/assets/ayu-dark-Cv9koXgw.js +1 -0
  173. package/public/assets/ballerina-BFfxhgS-.js +1 -0
  174. package/public/assets/bat-BkioyH1T.js +1 -0
  175. package/public/assets/beancount-k_qm7-4y.js +1 -0
  176. package/public/assets/berry-D08WgyRC.js +1 -0
  177. package/public/assets/bibtex-CHM0blh-.js +1 -0
  178. package/public/assets/bicep-Bmn6On1c.js +1 -0
  179. package/public/assets/blade-DVc8C-J4.js +1 -0
  180. package/public/assets/bsl-BO_Y6i37.js +1 -0
  181. package/public/assets/bundle-full-CXlKQh5B.js +13 -0
  182. package/public/assets/c-BIGW1oBm.js +1 -0
  183. package/public/assets/cadence-Bv_4Rxtq.js +1 -0
  184. package/public/assets/cairo-KRGpt6FW.js +1 -0
  185. package/public/assets/catppuccin-frappe-DFWUc33u.js +1 -0
  186. package/public/assets/catppuccin-latte-C9dUb6Cb.js +1 -0
  187. package/public/assets/catppuccin-macchiato-DQyhUUbL.js +1 -0
  188. package/public/assets/catppuccin-mocha-D87Tk5Gz.js +1 -0
  189. package/public/assets/clarity-D53aC0YG.js +1 -0
  190. package/public/assets/clojure-P80f7IUj.js +1 -0
  191. package/public/assets/cmake-D1j8_8rp.js +1 -0
  192. package/public/assets/cobol-nwyudZeR.js +1 -0
  193. package/public/assets/codeowners-Bp6g37R7.js +1 -0
  194. package/public/assets/codeql-DsOJ9woJ.js +1 -0
  195. package/public/assets/coffee-Ch7k5sss.js +1 -0
  196. package/public/assets/common-lisp-Cg-RD9OK.js +1 -0
  197. package/public/assets/coq-DkFqJrB1.js +1 -0
  198. package/public/assets/cpp-CofmeUqb.js +1 -0
  199. package/public/assets/crystal-tKQVLTB8.js +1 -0
  200. package/public/assets/csharp-CX12Zw3r.js +1 -0
  201. package/public/assets/css-DPfMkruS.js +1 -0
  202. package/public/assets/csv-fuZLfV_i.js +1 -0
  203. package/public/assets/cue-D82EKSYY.js +1 -0
  204. package/public/assets/cypher-COkxafJQ.js +1 -0
  205. package/public/assets/d-85-TOEBH.js +1 -0
  206. package/public/assets/dark-plus-eOWES_5F.js +1 -0
  207. package/public/assets/dart-CF10PKvl.js +1 -0
  208. package/public/assets/dax-CEL-wOlO.js +1 -0
  209. package/public/assets/desktop-BmXAJ9_W.js +1 -0
  210. package/public/assets/diff-D97Zzqfu.js +1 -0
  211. package/public/assets/diff-viewer-BFtW5J8P.js +1 -0
  212. package/public/assets/docker-BcOcwvcX.js +1 -0
  213. package/public/assets/dotenv-Da5cRb03.js +1 -0
  214. package/public/assets/dracula-BzJJZx-M.js +1 -0
  215. package/public/assets/dracula-soft-BXkSAIEj.js +1 -0
  216. package/public/assets/dream-maker-BtqSS_iP.js +1 -0
  217. package/public/assets/edge-BkV0erSs.js +1 -0
  218. package/public/assets/elixir-CDX3lj18.js +1 -0
  219. package/public/assets/elm-DbKCFpqz.js +1 -0
  220. package/public/assets/emacs-lisp-C9XAeP06.js +1 -0
  221. package/public/assets/erb-BOJIQeun.js +1 -0
  222. package/public/assets/erlang-DsQrWhSR.js +1 -0
  223. package/public/assets/everforest-dark-BgDCqdQA.js +1 -0
  224. package/public/assets/everforest-light-C8M2exoo.js +1 -0
  225. package/public/assets/fast-diff-vendor-DgdwVvTQ.js +1 -0
  226. package/public/assets/fennel-BYunw83y.js +1 -0
  227. package/public/assets/fish-BvzEVeQv.js +1 -0
  228. package/public/assets/fluent-C4IJs8-o.js +1 -0
  229. package/public/assets/fortran-fixed-form-BZjJHVRy.js +1 -0
  230. package/public/assets/fortran-free-form-D22FLkUw.js +1 -0
  231. package/public/assets/fsharp-CXgrBDvD.js +1 -0
  232. package/public/assets/gdresource-B7Tvp0Sc.js +1 -0
  233. package/public/assets/gdscript-DTMYz4Jt.js +1 -0
  234. package/public/assets/gdshader-DkwncUOv.js +1 -0
  235. package/public/assets/genie-D0YGMca9.js +1 -0
  236. package/public/assets/gherkin-DyxjwDmM.js +1 -0
  237. package/public/assets/git-commit-F4YmCXRG.js +1 -0
  238. package/public/assets/git-diff-vendor-CSgooKT_.js +52 -0
  239. package/public/assets/git-diff-vendor-HAZkIolJ.css +19 -0
  240. package/public/assets/git-rebase-r7XF79zn.js +1 -0
  241. package/public/assets/github-dark-DHJKELXO.js +1 -0
  242. package/public/assets/github-dark-default-Cuk6v7N8.js +1 -0
  243. package/public/assets/github-dark-dimmed-DH5Ifo-i.js +1 -0
  244. package/public/assets/github-dark-high-contrast-E3gJ1_iC.js +1 -0
  245. package/public/assets/github-light-DAi9KRSo.js +1 -0
  246. package/public/assets/github-light-default-D7oLnXFd.js +1 -0
  247. package/public/assets/github-light-high-contrast-BfjtVDDH.js +1 -0
  248. package/public/assets/gleam-BspZqrRM.js +1 -0
  249. package/public/assets/glimmer-js-Rg0-pVw9.js +1 -0
  250. package/public/assets/glimmer-ts-U6CK756n.js +1 -0
  251. package/public/assets/glsl-DplSGwfg.js +1 -0
  252. package/public/assets/gnuplot-DdkO51Og.js +1 -0
  253. package/public/assets/go-Dn2_MT6a.js +1 -0
  254. package/public/assets/graphql-ChdNCCLP.js +1 -0
  255. package/public/assets/groovy-gcz8RCvz.js +1 -0
  256. package/public/assets/gruvbox-dark-hard-CFHQjOhq.js +1 -0
  257. package/public/assets/gruvbox-dark-medium-GsRaNv29.js +1 -0
  258. package/public/assets/gruvbox-dark-soft-CVdnzihN.js +1 -0
  259. package/public/assets/gruvbox-light-hard-CH1njM8p.js +1 -0
  260. package/public/assets/gruvbox-light-medium-DRw_LuNl.js +1 -0
  261. package/public/assets/gruvbox-light-soft-hJgmCMqR.js +1 -0
  262. package/public/assets/hack-CaT9iCJl.js +1 -0
  263. package/public/assets/haml-B8DHNrY2.js +1 -0
  264. package/public/assets/handlebars-BL8al0AC.js +1 -0
  265. package/public/assets/haskell-Df6bDoY_.js +1 -0
  266. package/public/assets/haxe-CzTSHFRz.js +1 -0
  267. package/public/assets/hcl-BWvSN4gD.js +1 -0
  268. package/public/assets/highlight-vendor-8FKMu9os.js +10 -0
  269. package/public/assets/hjson-D5-asLiD.js +1 -0
  270. package/public/assets/hlsl-D3lLCCz7.js +1 -0
  271. package/public/assets/houston-DnULxvSX.js +1 -0
  272. package/public/assets/html-GMplVEZG.js +1 -0
  273. package/public/assets/html-derivative-BFtXZ54Q.js +1 -0
  274. package/public/assets/http-jrhK8wxY.js +1 -0
  275. package/public/assets/hurl-irOxFIW8.js +1 -0
  276. package/public/assets/hxml-Bvhsp5Yf.js +1 -0
  277. package/public/assets/hy-DFXneXwc.js +1 -0
  278. package/public/assets/imba-DGztddWO.js +1 -0
  279. package/public/assets/index-Bdy3MTIn.js +1 -0
  280. package/public/assets/index-BvRe9GiS.js +1 -0
  281. package/public/assets/index-Ctq8RqRf.js +1 -0
  282. package/public/assets/index-D-NvysdX.js +1 -0
  283. package/public/assets/index-D6RMBXUk.js +2 -0
  284. package/public/assets/index-DXI9DoVB.css +1 -0
  285. package/public/assets/index-DYWkPhKo.js +1 -0
  286. package/public/assets/index-D_FDiI6a.js +1 -0
  287. package/public/assets/index-Dty5bSHf.js +1 -0
  288. package/public/assets/index-H16e4Rqc.js +1 -0
  289. package/public/assets/ini-BEwlwnbL.js +1 -0
  290. package/public/assets/java-CylS5w8V.js +1 -0
  291. package/public/assets/javascript-wDzz0qaB.js +1 -0
  292. package/public/assets/jinja-4LBKfQ-Z.js +1 -0
  293. package/public/assets/jison-wvAkD_A8.js +1 -0
  294. package/public/assets/json-Cp-IABpG.js +1 -0
  295. package/public/assets/json5-C9tS-k6U.js +1 -0
  296. package/public/assets/jsonc-Des-eS-w.js +1 -0
  297. package/public/assets/jsonl-DcaNXYhu.js +1 -0
  298. package/public/assets/jsonnet-DFQXde-d.js +1 -0
  299. package/public/assets/jssm-C2t-YnRu.js +1 -0
  300. package/public/assets/jsx-g9-lgVsj.js +1 -0
  301. package/public/assets/julia-C8NyazO9.js +1 -0
  302. package/public/assets/kanagawa-dragon-CkXjmgJE.js +1 -0
  303. package/public/assets/kanagawa-lotus-CfQXZHmo.js +1 -0
  304. package/public/assets/kanagawa-wave-DWedfzmr.js +1 -0
  305. package/public/assets/kdl-DV7GczEv.js +1 -0
  306. package/public/assets/kotlin-BdnUsdx6.js +1 -0
  307. package/public/assets/kusto-BvAqAH-y.js +1 -0
  308. package/public/assets/laserwave-DUszq2jm.js +1 -0
  309. package/public/assets/latex-BUKiar2Z.js +1 -0
  310. package/public/assets/lean-DP1Csr6i.js +1 -0
  311. package/public/assets/less-B1dDrJ26.js +1 -0
  312. package/public/assets/light-plus-B7mTdjB0.js +1 -0
  313. package/public/assets/liquid-DYVedYrR.js +1 -0
  314. package/public/assets/llvm-BtvRca6l.js +1 -0
  315. package/public/assets/loading-CmEVQgyj.css +1 -0
  316. package/public/assets/loading-W2Y_wR0P.js +1 -0
  317. package/public/assets/log-2UxHyX5q.js +1 -0
  318. package/public/assets/logo-BtOb2qkB.js +1 -0
  319. package/public/assets/lua-BbnMAYS6.js +1 -0
  320. package/public/assets/luau-CXu1NL6O.js +1 -0
  321. package/public/assets/main-Bala0YJ4.js +57 -0
  322. package/public/assets/make-CHLpvVh8.js +1 -0
  323. package/public/assets/markdown-Cvjx9yec.js +1 -0
  324. package/public/assets/markdown-Db8cvZ4Z.js +315 -0
  325. package/public/assets/marko-CPi9NSCl.js +1 -0
  326. package/public/assets/material-theme-D5KoaKCx.js +1 -0
  327. package/public/assets/material-theme-darker-BfHTSMKl.js +1 -0
  328. package/public/assets/material-theme-lighter-B0m2ddpp.js +1 -0
  329. package/public/assets/material-theme-ocean-CyktbL80.js +1 -0
  330. package/public/assets/material-theme-palenight-Csfq5Kiy.js +1 -0
  331. package/public/assets/matlab-D7o27uSR.js +1 -0
  332. package/public/assets/mdc-DUICxH0z.js +1 -0
  333. package/public/assets/mdx-Cmh6b_Ma.js +1 -0
  334. package/public/assets/mermaid-DKYwYmdq.js +1 -0
  335. package/public/assets/min-dark-CafNBF8u.js +1 -0
  336. package/public/assets/min-light-CTRr51gU.js +1 -0
  337. package/public/assets/mipsasm-CKIfxQSi.js +1 -0
  338. package/public/assets/mojo-1DNp92w6.js +1 -0
  339. package/public/assets/monaco-viewer-DWQqXKm3.js +26 -0
  340. package/public/assets/monokai-D4h5O-jR.js +1 -0
  341. package/public/assets/move-Bu9oaDYs.js +1 -0
  342. package/public/assets/narrat-DRg8JJMk.js +1 -0
  343. package/public/assets/nextflow-CUEJCptM.js +1 -0
  344. package/public/assets/nginx-DknmC5AR.js +1 -0
  345. package/public/assets/night-owl-C39BiMTA.js +1 -0
  346. package/public/assets/nim-CVrawwO9.js +1 -0
  347. package/public/assets/nix-BbRYJGeE.js +1 -0
  348. package/public/assets/nord-Ddv68eIx.js +1 -0
  349. package/public/assets/nushell-C-sUppwS.js +1 -0
  350. package/public/assets/objective-c-DXmwc3jG.js +1 -0
  351. package/public/assets/objective-cpp-CLxacb5B.js +1 -0
  352. package/public/assets/ocaml-C0hk2d4L.js +1 -0
  353. package/public/assets/one-dark-pro-DVMEJ2y_.js +1 -0
  354. package/public/assets/one-light-PoHY5YXO.js +1 -0
  355. package/public/assets/pascal-D93ZcfNL.js +1 -0
  356. package/public/assets/perl-C0TMdlhV.js +1 -0
  357. package/public/assets/php-CDn_0X-4.js +1 -0
  358. package/public/assets/pkl-u5AG7uiY.js +1 -0
  359. package/public/assets/plastic-3e1v2bzS.js +1 -0
  360. package/public/assets/plsql-ChMvpjG-.js +1 -0
  361. package/public/assets/po-BTJTHyun.js +1 -0
  362. package/public/assets/poimandres-CS3Unz2-.js +1 -0
  363. package/public/assets/polar-C0HS_06l.js +1 -0
  364. package/public/assets/postcss-CXtECtnM.js +1 -0
  365. package/public/assets/powerquery-CEu0bR-o.js +1 -0
  366. package/public/assets/powershell-Dpen1YoG.js +1 -0
  367. package/public/assets/prisma-Dd19v3D-.js +1 -0
  368. package/public/assets/prolog-CbFg5uaA.js +1 -0
  369. package/public/assets/proto-DyJlTyXw.js +1 -0
  370. package/public/assets/pug-CGlum2m_.js +1 -0
  371. package/public/assets/puppet-BMWR74SV.js +1 -0
  372. package/public/assets/purescript-CklMAg4u.js +1 -0
  373. package/public/assets/python-B6aJPvgy.js +1 -0
  374. package/public/assets/qml-3beO22l8.js +1 -0
  375. package/public/assets/qmldir-C8lEn-DE.js +1 -0
  376. package/public/assets/qss-IeuSbFQv.js +1 -0
  377. package/public/assets/r-DiinP2Uv.js +1 -0
  378. package/public/assets/racket-BqYA7rlc.js +1 -0
  379. package/public/assets/raku-DXvB9xmW.js +1 -0
  380. package/public/assets/razor-WgofotgN.js +1 -0
  381. package/public/assets/red-bN70gL4F.js +1 -0
  382. package/public/assets/reg-C-SQnVFl.js +1 -0
  383. package/public/assets/regexp-CDVJQ6XC.js +1 -0
  384. package/public/assets/rel-C3B-1QV4.js +1 -0
  385. package/public/assets/riscv-BM1_JUlF.js +1 -0
  386. package/public/assets/rose-pine-BHrmToEH.js +1 -0
  387. package/public/assets/rose-pine-dawn-CnK8MTSM.js +1 -0
  388. package/public/assets/rose-pine-moon-NleAzG8P.js +1 -0
  389. package/public/assets/rosmsg-BJDFO7_C.js +1 -0
  390. package/public/assets/rst-B0xPkSld.js +1 -0
  391. package/public/assets/ruby-BvKwtOVI.js +1 -0
  392. package/public/assets/rust-B1yitclQ.js +1 -0
  393. package/public/assets/sas-cz2c8ADy.js +1 -0
  394. package/public/assets/sass-Cj5Yp3dK.js +1 -0
  395. package/public/assets/scala-C151Ov-r.js +1 -0
  396. package/public/assets/scheme-C98Dy4si.js +1 -0
  397. package/public/assets/scss-OYdSNvt2.js +1 -0
  398. package/public/assets/sdbl-DVxCFoDh.js +1 -0
  399. package/public/assets/shaderlab-Dg9Lc6iA.js +1 -0
  400. package/public/assets/shellscript-Yzrsuije.js +1 -0
  401. package/public/assets/shellsession-BADoaaVG.js +1 -0
  402. package/public/assets/slack-dark-BthQWCQV.js +1 -0
  403. package/public/assets/slack-ochin-DqwNpetd.js +1 -0
  404. package/public/assets/smalltalk-BERRCDM3.js +1 -0
  405. package/public/assets/snazzy-light-Bw305WKR.js +1 -0
  406. package/public/assets/solarized-dark-DXbdFlpD.js +1 -0
  407. package/public/assets/solarized-light-L9t79GZl.js +1 -0
  408. package/public/assets/solidity-BbcW6ACK.js +1 -0
  409. package/public/assets/soy-Brmx7dQM.js +1 -0
  410. package/public/assets/sparql-rVzFXLq3.js +1 -0
  411. package/public/assets/splunk-BtCnVYZw.js +1 -0
  412. package/public/assets/sql-BLtJtn59.js +1 -0
  413. package/public/assets/ssh-config-_ykCGR6B.js +1 -0
  414. package/public/assets/stata-BH5u7GGu.js +1 -0
  415. package/public/assets/stylus-BEDo0Tqx.js +1 -0
  416. package/public/assets/svelte-3Dk4HxPD.js +1 -0
  417. package/public/assets/swift-Dg5xB15N.js +1 -0
  418. package/public/assets/synthwave-84-CbfX1IO0.js +1 -0
  419. package/public/assets/system-verilog-CnnmHF94.js +1 -0
  420. package/public/assets/systemd-4A_iFExJ.js +1 -0
  421. package/public/assets/talonscript-CkByrt1z.js +1 -0
  422. package/public/assets/tasl-QIJgUcNo.js +1 -0
  423. package/public/assets/tcl-dwOrl1Do.js +1 -0
  424. package/public/assets/templ-W15q3VgB.js +1 -0
  425. package/public/assets/terraform-BETggiCN.js +1 -0
  426. package/public/assets/tex-Cppo0RY3.js +1 -0
  427. package/public/assets/tokyo-night-hegEt444.js +1 -0
  428. package/public/assets/toml-vGWfd6FD.js +1 -0
  429. package/public/assets/tool-call-D0BYXlFe.js +59 -0
  430. package/public/assets/ts-tags-zn1MmPIZ.js +1 -0
  431. package/public/assets/tsv-B_m7g4N7.js +1 -0
  432. package/public/assets/tsx-COt5Ahok.js +1 -0
  433. package/public/assets/turtle-BsS91CYL.js +1 -0
  434. package/public/assets/twig-CO9l9SDP.js +1 -0
  435. package/public/assets/typescript-BPQ3VLAy.js +1 -0
  436. package/public/assets/typespec-Df68jz8_.js +1 -0
  437. package/public/assets/typst-DHCkPAjA.js +1 -0
  438. package/public/assets/unified-picker-QgONWj_1.js +1 -0
  439. package/public/assets/v-BcVCzyr7.js +1 -0
  440. package/public/assets/vala-CsfeWuGM.js +1 -0
  441. package/public/assets/vb-D17OF-Vu.js +1 -0
  442. package/public/assets/verilog-BQ8w6xss.js +1 -0
  443. package/public/assets/vesper-DU1UobuO.js +1 -0
  444. package/public/assets/vhdl-CeAyd5Ju.js +1 -0
  445. package/public/assets/viml-CJc9bBzg.js +1 -0
  446. package/public/assets/vitesse-black-Bkuqu6BP.js +1 -0
  447. package/public/assets/vitesse-dark-D0r3Knsf.js +1 -0
  448. package/public/assets/vitesse-light-CVO1_9PV.js +1 -0
  449. package/public/assets/vue-CCoi5OLL.js +1 -0
  450. package/public/assets/vue-html-DAAvJJDi.js +1 -0
  451. package/public/assets/vue-vine-_Ih-lPRR.js +1 -0
  452. package/public/assets/vyper-CDx5xZoG.js +1 -0
  453. package/public/assets/wasm-CG6Dc4jp.js +1 -0
  454. package/public/assets/wasm-MzD3tlZU.js +1 -0
  455. package/public/assets/wenyan-BV7otONQ.js +1 -0
  456. package/public/assets/wgsl-Dx-B1_4e.js +1 -0
  457. package/public/assets/wikitext-BhOHFoWU.js +1 -0
  458. package/public/assets/wit-5i3qLPDT.js +1 -0
  459. package/public/assets/wolfram-lXgVvXCa.js +1 -0
  460. package/public/assets/wrap-text-CEH9wOr_.js +1 -0
  461. package/public/assets/xml-sdJ4AIDG.js +1 -0
  462. package/public/assets/xsl-CtQFsRM5.js +1 -0
  463. package/public/assets/yaml-Buea-lGh.js +1 -0
  464. package/public/assets/zenscript-DVFEvuxE.js +1 -0
  465. package/public/assets/zig-VOosw3JB.js +1 -0
  466. package/public/favicon.ico +0 -0
  467. package/public/index.html +42 -0
  468. package/public/loading.html +33 -0
  469. package/public/logo.png +0 -0
  470. package/public/manifest.webmanifest +1 -0
  471. package/public/maskable-icon-512x512.png +0 -0
  472. package/public/monaco/vs/base/browser/ui/codicons/codicon/codicon.ttf +0 -0
  473. package/public/monaco/vs/base/worker/workerMain.js +31 -0
  474. package/public/monaco/vs/basic-languages/cpp/cpp.js +10 -0
  475. package/public/monaco/vs/basic-languages/kotlin/kotlin.js +10 -0
  476. package/public/monaco/vs/basic-languages/markdown/markdown.js +10 -0
  477. package/public/monaco/vs/basic-languages/python/python.js +10 -0
  478. package/public/monaco/vs/editor/editor.main.css +8 -0
  479. package/public/monaco/vs/editor/editor.main.js +798 -0
  480. package/public/monaco/vs/language/css/cssMode.js +13 -0
  481. package/public/monaco/vs/language/css/cssWorker.js +77 -0
  482. package/public/monaco/vs/language/html/htmlMode.js +13 -0
  483. package/public/monaco/vs/language/html/htmlWorker.js +454 -0
  484. package/public/monaco/vs/language/json/jsonMode.js +19 -0
  485. package/public/monaco/vs/language/json/jsonWorker.js +42 -0
  486. package/public/monaco/vs/language/typescript/tsMode.js +20 -0
  487. package/public/monaco/vs/language/typescript/tsWorker.js +51328 -0
  488. package/public/monaco/vs/loader.js +11 -0
  489. package/public/monaco.worker.js +7 -0
  490. package/public/pwa-192x192.png +0 -0
  491. package/public/pwa-512x512.png +0 -0
  492. package/public/pwa-64x64.png +0 -0
  493. package/public/registerSW.js +1 -0
  494. package/public/sw.js +1 -0
  495. package/public/ui-version.json +3 -0
  496. package/public/workbox-60d14903.js +1 -0
@@ -0,0 +1 @@
1
+ import{m as e}from"./index-D6RMBXUk.js";import"./git-diff-vendor-CSgooKT_.js";import"./fast-diff-vendor-DgdwVvTQ.js";import"./highlight-vendor-8FKMu9os.js";import"./monaco-viewer-DWQqXKm3.js";const s={"advancedSettings.title":"Расширенные настройки","advancedSettings.environmentVariables.title":"Переменные окружения","advancedSettings.environmentVariables.subtitle":"Применяются при запуске нового экземпляра OpenCode","advancedSettings.actions.close":"Закрыть"},t={"app.launchError.title":"Не удалось запустить OpenCode","app.launchError.description":"Не удалось запустить выбранный бинарник OpenCode. Просмотрите вывод ошибки ниже или выберите другой бинарник в настройках OpenCode.","app.launchError.binaryPathLabel":"Путь к бинарнику","app.launchError.errorOutputLabel":"Вывод ошибки","app.launchError.openAdvancedSettings":"Открыть настройки OpenCode","app.launchError.close":"Закрыть","app.launchError.closeTitle":"Закрыть (Esc)","app.launchError.fallbackMessage":"Не удалось запустить рабочее пространство","app.stopInstance.confirmMessage":"Остановить экземпляр OpenCode? Это остановит сервер.","app.stopInstance.title":"Остановить экземпляр","app.stopInstance.confirmLabel":"Остановить","app.stopInstance.cancelLabel":"Оставить запущенным","emptyState.logoAlt":"Логотип CodeNomad","emptyState.brandTitle":"CodeNomad","emptyState.tagline":"Выберите папку, чтобы начать писать код с AI","emptyState.actions.selectFolder":"Выбрать папку","emptyState.actions.selecting":"Выбор…","emptyState.keyboardShortcut":"Горячая клавиша: {shortcut}","emptyState.examples":"Примеры: {example}","emptyState.multipleInstances":"Можно иметь несколько экземпляров одной и той же папки","releases.upgradeRequired.title":"Требуется обновление","releases.upgradeRequired.message.withVersion":"Обновите CodeNomad до версии {version}, чтобы использовать последний UI.","releases.upgradeRequired.message.noVersion":"Обновите CodeNomad, чтобы использовать последний UI.","releases.upgradeRequired.action.getUpdate":"Получить обновление","releases.uiUpdated.title":"UI обновлён","releases.uiUpdated.message":"UI теперь обновлён до {version}.","releases.devUpdateAvailable.title":"Доступна dev-сборка","releases.devUpdateAvailable.message":"Доступна новая dev-сборка: {version}.","releases.devUpdateAvailable.action":"Открыть релиз"},o={"commandPalette.title":"Палитра команд","commandPalette.description":"Поиск и запуск команд","commandPalette.searchPlaceholder":"Введите команду или начните поиск…","commandPalette.empty":'Команды по запросу "{query}" не найдены',"commandPalette.category.customCommands":"Пользовательские команды","commandPalette.category.instance":"Экземпляр","commandPalette.category.session":"Сессия","commandPalette.category.agentModel":"Агент и модель","commandPalette.category.inputFocus":"Ввод и фокус","commandPalette.category.system":"Система","commandPalette.category.other":"Другое","commands.newInstance.label":"Новый экземпляр","commands.newInstance.description":"Открыть выбор папки для создания нового экземпляра","commands.newInstance.keywords":"папка, проект, рабочее пространство","commands.closeInstance.label":"Закрыть вкладку","commands.closeInstance.description":"Закрыть текущую верхнеуровневую вкладку","commands.closeInstance.keywords":"остановить, выйти, закрыть, вкладка","commands.nextInstance.label":"Следующая вкладка","commands.nextInstance.description":"Переключиться на следующую верхнеуровневую вкладку","commands.nextInstance.keywords":"переключить, навигация, вкладка","commands.previousInstance.label":"Предыдущая вкладка","commands.previousInstance.description":"Переключиться на предыдущую верхнеуровневую вкладку","commands.previousInstance.keywords":"переключить, навигация, вкладка","commands.newSession.label":"Новая сессия","commands.newSession.description":"Создать новую родительскую сессию","commands.newSession.keywords":"создать, начать","commands.closeSession.label":"Закрыть сессию","commands.closeSession.description":"Закрыть текущую родительскую сессию","commands.closeSession.keywords":"закрыть, остановить","commands.scrubSessions.label":"Очистить сессии","commands.scrubSessions.description":"Удалить пустые сессии, завершенные сессии субагентов и лишние форкнутые сессии.","commands.scrubSessions.keywords":"очистка, пустые, сессии, удалить, убрать","commands.instanceInfo.label":"Информация об экземпляре","commands.instanceInfo.description":"Открыть обзор экземпляра с логами и статусом","commands.instanceInfo.keywords":"информация, логи, консоль, вывод","commands.nextSession.label":"Следующая сессия","commands.nextSession.description":"Переключиться на следующую вкладку сессии","commands.nextSession.keywords":"переключить, навигация","commands.previousSession.label":"Предыдущая сессия","commands.previousSession.description":"Переключиться на предыдущую вкладку сессии","commands.previousSession.keywords":"переключить, навигация","commands.compactSession.label":"Компактировать сессию","commands.compactSession.description":"Суммировать и компактировать текущую сессию","commands.compactSession.keywords":"суммировать, сжать","commands.compactSession.errorFallback":"Не удалось компактировать сессию","commands.compactSession.alert.title":"Компактация не удалась","commands.compactSession.alert.message":"Компактация не удалась: {message}","commands.undoLastMessage.label":"Отменить последнее сообщение","commands.undoLastMessage.description":"Откатить последнее сообщение","commands.undoLastMessage.keywords":"откат, отмена","commands.undoLastMessage.none.title":"Нечего отменять","commands.undoLastMessage.none.message":"Нечего отменять","commands.undoLastMessage.failed.title":"Не удалось отменить","commands.undoLastMessage.failed.message":"Не удалось откатить сообщение","commands.openModelSelector.label":"Открыть выбор модели","commands.openModelSelector.description":"Выбрать другую модель","commands.openModelSelector.keywords":"модель, llm, ai","commands.selectModelVariant.label":"Выбрать вариант модели","commands.selectModelVariant.description":"Выбрать интенсивность размышлений для текущей модели","commands.selectModelVariant.keywords":"вариант, thinking, reasoning, интенсивность","commands.openAgentSelector.label":"Открыть выбор агента","commands.openAgentSelector.description":"Выбрать другого агента","commands.openAgentSelector.keywords":"агент, режим","commands.clearInput.label":"Очистить ввод","commands.clearInput.description":"Очистить поле prompt","commands.clearInput.keywords":"очистить, сброс","commands.promptSubmitShortcut.label.default":"Enter: Новая строка, Cmd/Ctrl+Enter: Отправить промпт","commands.promptSubmitShortcut.label.swapped":"Enter: Отправить промпт, Cmd/Ctrl+Enter: Новая строка","commands.promptSubmitShortcut.description":"Поменять местами Enter и Cmd/Ctrl+Enter в поле ввода промпта","commands.promptSubmitShortcut.keywords":"enter, отправить, новая строка, сочетание, cmd, ctrl, промпт","commands.thinkingBlocks.label.show":"Показать размышления","commands.thinkingBlocks.label.hide":"Скрыть размышления","commands.thinkingBlocks.description":"Показать или скрыть секции размышлений ИИ","commands.thinkingBlocks.keywords":"thinking, reasoning, переключить, показать, скрыть","commands.timelineToolCalls.label.show":"Показать Tool Calls в таймлайне","commands.timelineToolCalls.label.hide":"Скрыть Tool Calls в таймлайне","commands.timelineToolCalls.description":"Переключить отображение вызовов инструментов в таймлайне сообщений","commands.timelineToolCalls.keywords":"таймлайн, tool, переключить","commands.keyboardShortcutHints.label.show":"Показать подсказки сочетаний","commands.keyboardShortcutHints.label.hide":"Скрыть подсказки сочетаний","commands.keyboardShortcutHints.description":"Показать или скрыть подсказки сочетаний клавиш в интерфейсе","commands.keyboardShortcutHints.description.disabledWeb":"Отключено в WebUI (подсказки всегда скрыты)","commands.keyboardShortcutHints.keywords":"shortcut, shortcuts, keyboard, keybind, подсказки","commands.common.expanded":"Развернуто","commands.common.collapsed":"Свернуто","commands.common.visible":"Видимо","commands.common.hidden":"Скрыто","commands.common.enabled":"Включено","commands.common.disabled":"Выключено","commands.thinkingBlocksDefault.label":"Вид размышлений: {state}","commands.thinkingBlocksDefault.description":"Свернуть / Развернуть секции размышлений ИИ, когда они показаны","commands.thinkingBlocksDefault.keywords":"thinking, reasoning, развернуть, свернуть, по умолчанию","commands.diffViewSplit.label":"Раздельный просмотр diff","commands.diffViewSplit.description":"Показывать diff вызовов инструментов рядом","commands.diffViewSplit.keywords":"diff, split, просмотр","commands.diffViewUnified.label":"Единый просмотр diff","commands.diffViewUnified.description":"Показывать diff вызовов инструментов в одну колонку","commands.diffViewUnified.keywords":"diff, unified, просмотр","commands.toolOutputsDefault.label":"Выводы инструментов по умолчанию · {state}","commands.toolOutputsDefault.description":"Переключить, разворачивать ли выводы инструментов по умолчанию","commands.toolOutputsDefault.keywords":"tool, output, развернуть, свернуть","commands.diagnosticsDefault.label":"Диагностика по умолчанию · {state}","commands.diagnosticsDefault.description":"Переключить, разворачивать ли вывод диагностики по умолчанию","commands.diagnosticsDefault.keywords":"diagnostics, развернуть, свернуть","commands.toolInputsVisibility.label":"Видимость входных данных инструмента · {state}","commands.toolInputsVisibility.description":"Установить видимость аргументов входа вызовов инструментов по умолчанию","commands.toolInputsVisibility.keywords":"инструмент, вход, аргументы, видимость, скрыть, показать, раскрыть, свернуть, tool, inputs, arguments, visibility, hide, show, expand, collapse","commands.tokenUsageDisplay.label":"Отображение token-статистики · {state}","commands.tokenUsageDisplay.description":"Показать или скрыть статистику token и стоимости для сообщений ассистента","commands.tokenUsageDisplay.keywords":"token, usage, cost, статистика","commands.autoCleanupBlankSessions.label":"Авто-очистка пустых сессий · {state}","commands.autoCleanupBlankSessions.description":"Автоматически очищать пустые сессии при создании новых","commands.autoCleanupBlankSessions.keywords":"auto, cleanup, пустые, сессии, переключить","commands.showHelp.label":"Показать справку","commands.showHelp.description":"Показать горячие клавиши и справку","commands.showHelp.keywords":"горячие клавиши, справка","commands.custom.argumentsPrompt.message":"Аргументы для /{name}","commands.custom.argumentsPrompt.title":"Пользовательская команда","commands.custom.argumentsPrompt.inputLabel":"Аргументы","commands.custom.argumentsPrompt.inputPlaceholder":"например: foo bar","commands.custom.argumentsPrompt.confirmLabel":"Запустить","commands.custom.argumentsPrompt.cancelLabel":"Отмена","commands.custom.argumentsPrompt.openFailed.message":"Не удалось открыть prompt аргументов.","commands.custom.argumentsPrompt.openFailed.title":"Аргументы команды","commands.custom.entries.descriptionFallback":"Пользовательская команда","commands.custom.sessionRequired.message":"Выберите сессию перед запуском пользовательской команды.","commands.custom.sessionRequired.title":"Требуется сессия","commands.custom.runFailed.message":"Не удалось запустить пользовательскую команду. Проверьте консоль для подробностей.","commands.custom.runFailed.title":"Команда не выполнена","unifiedPicker.loading.searching":"Поиск…","unifiedPicker.loading.loadingWorkspace":"Загрузка рабочего пространства…","unifiedPicker.title.command":"Выберите команду","unifiedPicker.title.mention":"Выберите агента или файл","unifiedPicker.empty":"Ничего не найдено","unifiedPicker.sections.commands":"КОМАНДЫ","unifiedPicker.sections.agents":"АГЕНТЫ","unifiedPicker.sections.files":"ФАЙЛЫ","unifiedPicker.badge.subagent":"субагент","unifiedPicker.footer.navigate":"навигация","unifiedPicker.footer.select":"выбрать","unifiedPicker.footer.close":"закрыть"},i={"alertDialog.fallbackTitle.info":"Внимание","alertDialog.fallbackTitle.warning":"Пожалуйста, проверьте","alertDialog.fallbackTitle.error":"Что-то пошло не так","alertDialog.actions.confirm":"Подтвердить","alertDialog.actions.run":"Запустить","alertDialog.actions.ok":"ОК","alertDialog.actions.cancel":"Отмена","alertDialog.prompt.inputLabel":"Ввод","backgroundProcessOutputDialog.title":"Фоновый вывод","backgroundProcessOutputDialog.actions.close":"Закрыть","backgroundProcessOutputDialog.loading":"Загрузка вывода…","backgroundProcessOutputDialog.truncatedNotice":"Вывод обрезан для отображения.","backgroundProcessOutputDialog.loadErrorFallback":"Не удалось загрузить вывод."},n={"directoryBrowser.defaultDescription":"Просматривайте папки в пределах настроенного корня рабочего пространства.","directoryBrowser.close":"Закрыть","directoryBrowser.currentFolder":"Выберите папку или введите путь","directoryBrowser.currentFolder.inputAriaLabel":"Путь к папке","directoryBrowser.currentFolder.inputPlaceholder":"Введите или вставьте путь к папке","directoryBrowser.openCurrent":"Открыть","directoryBrowser.selectCurrent":"Выбрать текущую","directoryBrowser.newFolder":"Новая папка","directoryBrowser.creating":"Создание…","directoryBrowser.loadingFolders":"Загрузка папок…","directoryBrowser.noFolders":"Папки недоступны.","directoryBrowser.upOneLevel":"На уровень выше","directoryBrowser.select":"Выбрать","directoryBrowser.load.errorFallback":"Не удалось загрузить файловую систему","directoryBrowser.createFolder.promptMessage":"Создайте новую папку в текущем каталоге.","directoryBrowser.createFolder.title":"Новая папка","directoryBrowser.createFolder.inputLabel":"Имя папки","directoryBrowser.createFolder.inputPlaceholder":"например my-new-project","directoryBrowser.createFolder.confirmLabel":"Создать","directoryBrowser.createFolder.cancelLabel":"Отмена","directoryBrowser.createFolder.invalidNameMessage":"Введите одно имя папки.","directoryBrowser.createFolder.invalidNameDetail":"Имя папки не может содержать слэши, '..' или '~'.","directoryBrowser.createFolder.errorFallback":"Не удалось создать папку","filesystemBrowser.descriptionFallback":"Найдите путь в пределах настроенного корня рабочего пространства.","filesystemBrowser.rootLabel":"Корень: {root}","filesystemBrowser.actions.close":"Закрыть","filesystemBrowser.actions.retry":"Повторить","filesystemBrowser.actions.select":"Выбрать","filesystemBrowser.filterLabel":"Фильтр","filesystemBrowser.search.placeholder.directories":"Поиск папок","filesystemBrowser.search.placeholder.files":"Поиск файлов","filesystemBrowser.currentFolder.label":"Текущая папка","filesystemBrowser.currentFolder.selectCurrent":"Выбрать текущую","filesystemBrowser.loading.filesystem":"файловую систему","filesystemBrowser.loading.workspaceRoot":"корень рабочего пространства","filesystemBrowser.loading.loadingWithPath":"Загрузка {path}…","filesystemBrowser.empty.noEntries":"Ничего не найдено.","filesystemBrowser.navigation.upOneLevel":"На уровень выше","filesystemBrowser.hints.navigate":"Навигация","filesystemBrowser.hints.select":"Выбрать","filesystemBrowser.hints.close":"Закрыть","filesystemBrowser.errors.loadFilesystemFallback":"Не удалось загрузить файловую систему","filesystemBrowser.errors.openDirectoryFallback":"Не удалось открыть каталог"},a={"folderSelection.language.ariaLabel":"Язык","folderSelection.logoAlt":"Логотип CodeNomad","folderSelection.tagline":"Выберите папку, чтобы начать писать код с AI","folderSelection.links.github":"GitHub CodeNomad","folderSelection.links.githubStars":"Звезды GitHub CodeNomad","folderSelection.links.discord":"Discord CodeNomad","folderSelection.empty.title":"Нет недавних папок","folderSelection.empty.description":"Выберите папку, чтобы начать","folderSelection.recent.title":"Недавние папки","folderSelection.recent.subtitle.one":"Доступна {count} папка","folderSelection.recent.subtitle.other":"Доступно {count} папок","folderSelection.recent.remove":"Убрать из недавних","folderSelection.browse.title":"Выбрать папку","folderSelection.browse.subtitle":"Выберите любую папку на компьютере","folderSelection.browse.button":"Обзор папок","folderSelection.browse.buttonOpening":"Открытие…","folderSelection.actions.title":"Открыть папку или подключить сервер","folderSelection.actions.subtitle":"Откройте локальную папку или подключитесь к серверу CodeNomad","folderSelection.actions.connectButton":"Подключить сервер CodeNomad","folderSelection.advancedSettings":"Расширенные настройки","folderSelection.opencode":"OpenCode","folderSelection.hints.navigate":"Навигация","folderSelection.hints.select":"Выбрать","folderSelection.hints.remove":"Убрать","folderSelection.hints.browse":"Обзор","folderSelection.loading.title":"Запуск экземпляра…","folderSelection.loading.subtitle":"Подождите, пока мы подготовим рабочее пространство.","folderSelection.drop.title":"Перетащите папку, чтобы открыть ее","folderSelection.drop.subtitle":"Запустите новый экземпляр в перетащенной папке.","folderSelection.drop.invalidTitle":"Не удалось открыть перетащенный элемент","folderSelection.drop.invalidMessage":"Перетащите папку, чтобы запустить новый экземпляр.","folderSelection.dialog.title":"Выберите рабочее пространство","folderSelection.dialog.description":"Выберите рабочее пространство, чтобы начать писать код.","folderSelection.tabs.local":"Локальные папки","folderSelection.tabs.servers":"Серверы","folderSelection.servers.title":"Сохраненные серверы","folderSelection.servers.subtitle":"Откройте сохраненный удаленный сервер CodeNomad в новом окне","folderSelection.servers.count":"{count} серверов","folderSelection.servers.empty.title":"Нет сохраненных серверов","folderSelection.servers.empty.description":"Добавьте удаленный сервер, чтобы быстро подключаться к нему с этого устройства","folderSelection.servers.connectTitle":"Подключиться к серверу","folderSelection.servers.connectSubtitle":"Сохраните удаленный сервер CodeNomad и откройте его в новом окне","folderSelection.servers.connectButton":"Подключиться к серверу","folderSelection.servers.remove":"Удалить сохраненный сервер","folderSelection.servers.skipTls":"Самоподписанный TLS","folderSelection.servers.errorTitle":"Ошибка удаленного подключения","folderSelection.servers.dialog.title":"Подключиться к серверу","folderSelection.servers.dialog.description":"Добавьте удаленный сервер CodeNomad и при желании сразу откройте его.","folderSelection.servers.dialog.name":"Имя сервера","folderSelection.servers.dialog.namePlaceholder":"Продакшн сервер","folderSelection.servers.dialog.url":"URL сервера","folderSelection.servers.dialog.urlPlaceholder":"https://server.example.com","folderSelection.servers.dialog.skipTls":"Пропустить проверку TLS для самоподписанных сертификатов.","folderSelection.servers.dialog.cancel":"Отмена","folderSelection.servers.dialog.save":"Сохранить","folderSelection.servers.dialog.connect":"Подключиться","folderSelection.servers.dialog.connecting":"Подключение...","folderSelection.servers.dialog.errorRequired":"Имя сервера и URL обязательны.","folderSelection.servers.dialog.errorConnect":"Не удалось подключиться к удаленному серверу.","folderSelection.servers.certificateInstall.title":"Установить локальный сертификат","folderSelection.servers.certificateInstall.confirmMessage":"CodeNomad должен установить локальный сертификат, чтобы открывать удаленные HTTPS-окна с самоподписанным сертификатом. Этот сертификат используется только для трафика локального настольного прокси на вашем устройстве. После этого ваша операционная система может показать второе предупреждение о сертификате.","folderSelection.servers.certificateInstall.confirmLabel":"Продолжить","folderSelection.servers.certificateInstall.cancelLabel":"Отмена","folderSelection.servers.certificateInstall.cancelled":"CodeNomad должен доверять локальному сертификату, прежде чем сможет открывать удаленные HTTPS-окна с самоподписанным сертификатом.","folderSelection.sidecars.button":"Open SideCar"},l={"instanceTabs.new.title":"Новый экземпляр (Cmd/Ctrl+N)","instanceTabs.new.ariaLabel":"Новый экземпляр","instanceTabs.remote.title":"Удаленное подключение","instanceTabs.remote.ariaLabel":"Удаленное подключение","instanceInfo.title":"Информация об экземпляре","instanceInfo.labels.folder":"Папка","instanceInfo.labels.project":"Проект","instanceInfo.labels.versionControl":"Система контроля версий","instanceInfo.labels.opencodeVersion":"Версия OpenCode","instanceInfo.labels.binaryPath":"Путь к бинарнику","instanceInfo.labels.environmentVariables":"Переменные окружения ({count})","instanceInfo.loading":"Загрузка…","instanceInfo.server.title":"Сервер","instanceInfo.server.port":"Порт:","instanceInfo.server.pid":"PID:","instanceInfo.server.status":"Статус:","instanceTab.status.permission":"Ожидание разрешения","instanceTab.status.compacting":"Компактация","instanceTab.status.working":"Работает","instanceTab.status.idle":"Простой","instanceTab.status.ariaLabel":"Статус экземпляра: {status}","instanceTab.actions.close.ariaLabel":"Закрыть экземпляр","instanceShell.leftPanel.sessionsTitle":"Сессии","instanceShell.leftPanel.instanceInfo":"Информация об экземпляре","instanceShell.leftDrawer.pin":"Закрепить левую панель","instanceShell.leftDrawer.unpin":"Открепить левую панель","instanceShell.leftDrawer.toggle.pinned":"Левая панель закреплена","instanceShell.leftDrawer.toggle.open":"Открыть левую панель","instanceShell.leftDrawer.toggle.close":"Закрыть левую панель","instanceShell.rightDrawer.pin":"Закрепить правую панель","instanceShell.rightDrawer.unpin":"Открепить правую панель","instanceShell.rightDrawer.toggle.pinned":"Правая панель закреплена","instanceShell.rightDrawer.toggle.open":"Открыть правую панель","instanceShell.rightDrawer.toggle.close":"Закрыть правую панель","instanceShell.fullscreen.enter":"Полный экран","instanceShell.fullscreen.exit":"Выйти из полного экрана","instanceShell.metrics.usedLabel":"Использовано","instanceShell.metrics.availableLabel":"Доступно","instanceShell.commandPalette.openAriaLabel":"Открыть палитру команд","instanceShell.commandPalette.button":"Палитра команд","instanceShell.chatSearch.openAriaLabel":"Поиск по истории чата","instanceShell.connection.ariaLabel":"Соединение {status}","instanceShell.connection.connected":"Подключено","instanceShell.connection.connecting":"Подключение…","instanceShell.connection.disconnected":"Отключено","instanceShell.connection.unknown":"Неизвестно","instanceWelcome.shortcuts.newSession":"Новая сессия","instanceWelcome.empty.title":"Нет предыдущих сессий","instanceWelcome.empty.description":"Создайте новую сессию ниже, чтобы начать","instanceWelcome.loading.title":"Загрузка сессий","instanceWelcome.loading.description":"Получаем ваши предыдущие сессии…","instanceWelcome.resume.title":"Продолжить сессию","instanceWelcome.resume.subtitle.one":"{count} сессия доступна","instanceWelcome.resume.subtitle.other":"{count} сессий доступно","instanceWelcome.session.untitled":"Сессия без названия","instanceWelcome.new.title":"Начать новую сессию","instanceWelcome.new.subtitle":"Мы автоматически используем последнего агента/модель","instanceWelcome.new.createButton":"Создать сессию","instanceWelcome.overlay.close":"Закрыть","instanceWelcome.actions.viewInstanceInfo":"Показать информацию об экземпляре","instanceWelcome.actions.renameTitle":"Переименовать сессию","instanceWelcome.actions.deleteTitle":"Удалить сессию","instanceWelcome.hints.navigate":"Навигация","instanceWelcome.hints.jump":"Перейти","instanceWelcome.hints.firstLast":"Первый/последний","instanceWelcome.hints.resume":"Продолжить","instanceWelcome.hints.delete":"Удалить","instanceWelcome.toasts.renameError":"Не удалось переименовать сессию","instanceDisconnected.title":"Экземпляр отключен","instanceDisconnected.folderFallback":"это рабочее пространство","instanceDisconnected.reasonFallback":"Сервер перестал отвечать","instanceDisconnected.description":"{folder} больше недоступно. Закройте вкладку, чтобы продолжить работу.","instanceDisconnected.details.title":"Подробности","instanceDisconnected.details.folderLabel":"Папка:","instanceDisconnected.actions.closeInstance":"Закрыть экземпляр","instanceShell.empty.title":"Сессия не выбрана","instanceShell.empty.description":"Выберите сессию, чтобы просмотреть сообщения","instanceShell.rightPanel.title":"Панель состояния","instanceShell.rightPanel.tabs.changes":"Изменения","instanceShell.rightPanel.tabs.gitChanges":"Изменения Git","instanceShell.rightPanel.tabs.files":"Файлы","instanceShell.rightPanel.tabs.status":"Статус","instanceShell.rightPanel.tabs.ariaLabel":"Вкладки правой панели","instanceShell.rightPanel.actions.refresh":"Обновить","instanceShell.rightPanel.actions.save":"Сохранить (Ctrl+S)","instanceShell.rightPanel.actions.saveConfirm.message":'Сохранить изменения в "{path}" перед переключением?',"instanceShell.rightPanel.actions.saveConfirm.confirmLabel":"Сохранить","instanceShell.rightPanel.actions.saveConfirm.cancelLabel":"Отменить изменения","instanceShell.rightPanel.actions.conflict.message":"Файл был изменён агентом. Перезаписать изменения агента?","instanceShell.rightPanel.actions.conflict.confirmLabel":"Перезаписать","instanceShell.rightPanel.actions.conflict.cancelLabel":"Отмена","instanceShell.rightPanel.actions.refreshDirty.message":"Файл имеет несохранённые изменения. Обновление отменит ваши правки. Продолжить?","instanceShell.rightPanel.actions.refreshDirty.confirmLabel":"Обновить","instanceShell.rightPanel.actions.refreshDirty.cancelLabel":"Отмена","instanceShell.rightPanel.toast.saveSuccess":"Файл успешно сохранён","instanceShell.rightPanel.toast.saveError":"Не удалось сохранить файл","instanceShell.rightPanel.sections.yoloMode":"Режим Yolo","instanceShell.rightPanel.sections.yoloMode.tooltip":"Автоматически одобряет запросы разрешений для текущей сессии. Включайте только если доверяете запускаемым инструментам.","instanceShell.rightPanel.sections.sessionChanges":"Изменения сессии","instanceShell.rightPanel.sections.sessionChanges.tooltip":"Файлы, измененные в текущей сессии. Показывает добавления и удаления для каждого файла.","instanceShell.rightPanel.sections.plan":"План","instanceShell.rightPanel.sections.plan.tooltip":"Дорожная карта агента для этой сессии. Отслеживает задачи и их статус выполнения.","instanceShell.rightPanel.sections.backgroundProcesses":"Фоновые оболочки","instanceShell.rightPanel.sections.backgroundProcesses.tooltip":"Долгоработающие процессы, запущенные агентом. Вы можете следить за их выводом, останавливать или завершать их.","instanceShell.rightPanel.sections.mcp":"MCP-серверы","instanceShell.rightPanel.sections.mcp.tooltip":"Серверы протокола Model Context Protocol, расширяющие возможности агента внешними инструментами.","instanceShell.rightPanel.sections.lsp":"LSP-серверы","instanceShell.rightPanel.sections.lsp.tooltip":"Серверы протокола Language Server Protocol, обеспечивающие интеллектуальную поддержку кода и диагностику.","instanceShell.rightPanel.sections.plugins":"Плагины","instanceShell.rightPanel.sections.plugins.tooltip":"Плагины, настраивающие поведение интерфейса и сервера, добавляющие функции поверх MCP и LSP.","instanceShell.sessionChanges.noSessionSelected":"Выберите сессию, чтобы просмотреть изменения.","instanceShell.sessionChanges.loading":"Загрузка изменений...","instanceShell.sessionChanges.empty":"Пока нет изменений.","instanceShell.sessionChanges.filesChanged":"Изменено файлов: {count}","instanceShell.sessionChanges.actions.show":"Показать изменения","instanceShell.gitChanges.loading":"Загрузка изменений Git...","instanceShell.gitChanges.empty":"Изменений Git пока нет.","instanceShell.gitChanges.deleted":"Удалено","instanceShell.gitChanges.binaryViewer":"Невозможно показать бинарный файл","instanceShell.gitChanges.sections.staged":"Подготовленные изменения","instanceShell.gitChanges.sections.unstaged":"Изменения","instanceShell.gitChanges.actions.insertContext":"Добавить в промпт","instanceShell.gitChanges.actions.stage":"Подготовить файл","instanceShell.gitChanges.actions.unstage":"Убрать из staging","instanceShell.gitChanges.commit.placeholder":"Введите сообщение коммита","instanceShell.gitChanges.commit.submit":"Commit","instanceShell.gitChanges.commit.submitting":"Создание commit...","instanceShell.gitChanges.commit.success":"Commit успешно создан","instanceShell.gitChanges.commit.error":"Не удалось создать commit","instanceShell.filesShell.fileListTitle":"Список файлов","instanceShell.filesShell.mobileSelectorLabel":"Выбрать файл","instanceShell.filesShell.mobileSelectorEmpty":"Выберите файл","instanceShell.filesShell.viewerTitle":"Просмотр изменений","instanceShell.filesShell.viewerPlaceholder":"Подробный рендер изменений будет добавлен на следующем этапе.","instanceShell.filesShell.viewerEmpty":"Файл не выбран.","instanceShell.filesShell.listEmpty":"В этой папке нет файлов.","instanceShell.filesShell.search.placeholder":"Фильтровать файлы в этой папке","instanceShell.filesShell.search.ariaLabel":"Фильтровать файлы в этой папке","instanceShell.filesShell.search.empty":"Совпадающих файлов нет.","instanceShell.filesShell.actions.copyPath":"Скопировать путь","instanceShell.filesShell.toast.copyPathSuccess":"Путь скопирован","instanceShell.filesShell.toast.copyPathError":"Не удалось скопировать путь","instanceShell.filesShell.previewMarkdown":"Предпросмотр Markdown","instanceShell.filesShell.showSource":"Показать исходник","instanceShell.filesShell.enableWordWrap":"Включить перенос строк","instanceShell.filesShell.disableWordWrap":"Отключить перенос строк","instanceShell.plan.noSessionSelected":"Выберите сессию, чтобы просмотреть план.","instanceShell.plan.empty":"Пока ничего не запланировано.","instanceShell.yoloMode.noSessionSelected":"Выберите сессию, чтобы настроить режим Yolo.","instanceShell.yoloMode.title":"Режим Yolo","instanceShell.yoloMode.description":"Автоматически одобряет запросы разрешений для этой сессии. По умолчанию выключен.","instanceShell.yoloMode.badge":"Yolo","instanceShell.yoloMode.badgeAriaLabel":"Режим Yolo включен","instanceShell.backgroundProcesses.empty":"Нет фоновых процессов.","instanceShell.backgroundProcesses.status":"Статус: {status}","instanceShell.backgroundProcesses.output":"Вывод: {sizeKb}KB","instanceShell.backgroundProcesses.notify.enabled":"Уведомление о завершении включено","instanceShell.backgroundProcesses.notify.disabled":"Уведомление о завершении выключено","instanceShell.backgroundProcesses.actions.output":"Вывод","instanceShell.backgroundProcesses.actions.stop":"Остановить","instanceShell.backgroundProcesses.actions.terminate":"Завершить","instanceShell.worktree.delete.error.title":"Удаление не удалось","instanceShell.worktree.delete.error.fallback":"Не удалось удалить worktree","instanceShell.worktree.delete.error.causeLabel":"Вероятная причина:","instanceShell.worktree.delete.error.nextStepLabel":"Рекомендуемый следующий шаг:","instanceShell.worktree.delete.error.summary.localChanges":"Git отказался удалять этот worktree, потому что в нем есть измененные или неотслеживаемые файлы.","instanceShell.worktree.delete.error.summary.inUse":"CodeNomad не смог удалить этот worktree, потому что что-то все еще использует файлы в каталоге.","instanceShell.worktree.delete.error.summary.notFound":"CodeNomad не смог удалить этот worktree, потому что каталог или запись worktree не найдены.","instanceShell.worktree.delete.error.summary.permissionDenied":"CodeNomad не смог удалить этот worktree, потому что доступ к каталогу был запрещен.","instanceShell.worktree.delete.error.summary.unknown":"CodeNomad не смог удалить этот worktree.","instanceShell.worktree.delete.error.cause.localChanges":"Локальные изменения","instanceShell.worktree.delete.error.cause.inUse":"Другой процесс использует этот worktree","instanceShell.worktree.delete.error.cause.notFound":"Каталог или запись worktree отсутствуют","instanceShell.worktree.delete.error.cause.permissionDenied":"Недостаточно прав файловой системы","instanceShell.worktree.delete.error.cause.unknown":"Бэкенд вернул неклассифицированную ошибку удаления","instanceShell.worktree.delete.error.nextStep.localChanges":"Включите принудительное удаление, если хотите отбросить локальные изменения, либо очистите worktree и попробуйте снова.","instanceShell.worktree.delete.error.nextStep.inUse":"Закройте терминалы, редакторы, watcher-процессы или фоновые процессы, использующие этот worktree, и попробуйте снова.","instanceShell.worktree.delete.error.nextStep.notFound":"Обновите список worktree и попробуйте снова. Если ошибка сохранится, проверьте путь worktree на диске.","instanceShell.worktree.delete.error.nextStep.permissionDenied":"Проверьте права файловой системы и закройте приложения, которые могут удерживать этот каталог, затем попробуйте снова.","instanceShell.worktree.delete.error.nextStep.unknown":"Посмотрите необработанную ошибку ниже, затем попробуйте снова после устранения указанной проблемы.","instanceShell.worktree.delete.error.copyRaw":"Копировать ошибку","instanceShell.worktree.delete.error.copySanitized":"Копировать обезличенную","instanceShell.worktree.delete.error.copySuccess":"Ошибка удаления скопирована","instanceShell.worktree.delete.error.copySanitizedSuccess":"Обезличенная ошибка удаления скопирована","instanceShell.worktree.delete.error.copyFailure":"Не удалось скопировать ошибку удаления","versionPill.appWithVersion":"Приложение {version}","versionPill.ui":"UI","versionPill.uiWithVersion":"UI {version}","versionPill.source":" ({source})","opencodeBinarySelector.title":"Бинарник OpenCode","opencodeBinarySelector.subtitle":"Выберите, какой исполняемый файл OpenCode запускать","opencodeBinarySelector.customPath.placeholder":"Введите путь к бинарнику opencode…","opencodeBinarySelector.actions.add":"Добавить","opencodeBinarySelector.actions.browse":"Выбрать бинарник…","opencodeBinarySelector.actions.removeTitle":"Удалить бинарник","opencodeBinarySelector.badge.systemPath":"Использовать бинарник из системного PATH","opencodeBinarySelector.status.checkingVersions":"Проверка версий…","opencodeBinarySelector.status.checking":"Проверка…","opencodeBinarySelector.dialog.title":"Выберите бинарник OpenCode","opencodeBinarySelector.dialog.description":"Просматривайте файлы, доступные через CLI-сервер.","opencodeBinarySelector.validation.invalidBinary":"Неверный бинарник OpenCode","opencodeBinarySelector.validation.alreadyValidating":"Проверка уже выполняется","opencodeBinarySelector.display.systemPath":"{name} (system PATH)","opencodeBinarySelector.versionLabel":"v{version}"},r={"loadingScreen.logoAlt":"Логотип CodeNomad","loadingScreen.status.issue":"Возникла проблема","loadingScreen.actions.showAnother":"Показать другое","loadingScreen.errors.missingRoot":"Корневой элемент загрузки не найден","loadingScreen.phrases.neurons":"Разогреваем нейроны AI…","loadingScreen.phrases.daydreaming":"Убеждаем AI перестать мечтать…","loadingScreen.phrases.goggles":"Полируем кодовые очки AI…","loadingScreen.phrases.reorganizingFiles":"Просим AI перестать реорганизовывать ваши файлы…","loadingScreen.phrases.coffee":"Подкармливаем AI дополнительным кофе…","loadingScreen.phrases.nodeModules":"Учимся не удалять node_modules (снова)…","loadingScreen.phrases.actNatural":"Просим AI вести себя естественно до вашего прихода…","loadingScreen.phrases.rewritingHistory":"Просим AI перестать переписывать историю…","loadingScreen.phrases.stretch":"Даем AI размяться перед кодинг-спринтом…","loadingScreen.phrases.keyboardControl":"Убеждаем AI вернуть вам управление клавиатурой…"},c={"logsView.title":"Логи сервера","logsView.actions.show":"Показать логи сервера","logsView.actions.hide":"Скрыть логи сервера","logsView.envVars.title":"Переменные окружения ({count})","logsView.paused.title":"Логи сервера приостановлены","logsView.paused.description":"Включите стриминг, чтобы наблюдать за активностью сервера OpenCode.","logsView.empty.waiting":"Ожидание вывода сервера…","logsView.scrollToBottom":"Прокрутить вниз","infoView.logs.title":"Логи сервера","infoView.logs.actions.show":"Показать логи сервера","infoView.logs.actions.hide":"Скрыть логи сервера","infoView.logs.paused.title":"Логи сервера приостановлены","infoView.logs.paused.description":"Включите стриминг, чтобы наблюдать за активностью сервера OpenCode.","infoView.logs.empty.waiting":"Ожидание вывода сервера…","infoView.logs.scrollToBottom":"Прокрутить вниз","infoView.dispose.actions.dispose":"Сбросить инстанс","infoView.dispose.actions.disposing":"Сброс...","infoView.dispose.confirm.title":"Сбросить инстанс?","infoView.dispose.confirm.message":"Это очистит кэш состояния проекта для этого каталога и перезагрузит инстанс.","infoView.dispose.confirm.confirmLabel":"Сбросить","infoView.dispose.confirm.cancelLabel":"Отмена","infoView.dispose.toast.success":"Инстанс сброшен. Перезагрузка...","infoView.dispose.toast.error":"Не удалось сбросить инстанс."},d={"markdown.codeBlock.copy.label":"Копировать","markdown.codeBlock.copy.copied":"Скопировано!","markdown.codeBlock.copy.failed":"Не удалось","markdown.copy":"Копировать"},m={"messageListHeader.sidebar.openSessionListAriaLabel":"Открыть список сессий","messageListHeader.metrics.usedLabel":"Использовано","messageListHeader.metrics.availableLabel":"Доступно","messageListHeader.commandPalette.ariaLabel":"Открыть палитру команд","messageListHeader.commandPalette.button":"Палитра команд","messageListHeader.connection.connected":"Подключено","messageListHeader.connection.connecting":"Подключение…","messageListHeader.connection.disconnected":"Отключено","messageSection.empty.logoAlt":"Логотип CodeNomad","messageSection.empty.brandTitle":"CodeNomad","messageSection.empty.title":"Начните разговор","messageSection.empty.description":"Введите сообщение ниже или откройте палитру команд:","messageSection.empty.tips.commandPalette":"Палитра команд","messageSection.empty.tips.askAboutCodebase":"Спросите о своей кодовой базе","messageSection.empty.tips.attachFilesPrefix":"Прикрепляйте файлы через","messageSection.loading.messages":"Загрузка сообщений…","messageSection.scroll.toFirstAriaLabel":"Прокрутить к первому сообщению","messageSection.scroll.toLatestAriaLabel":"Прокрутить к последнему сообщению","messageSection.scroll.enableHoldAriaLabel":"Включить удержание для длинных ответов ассистента","messageSection.scroll.disableHoldAriaLabel":"Выключить удержание для длинных ответов ассистента","messageSection.quote.addAsQuote":"Добавить как цитату","messageSection.quote.addAsCode":"Добавить как код","messageSection.quote.copy":"Копировать","messageSection.quote.copied":"Скопировано!","messageSection.quote.copyFailed":"Не удалось скопировать","messageSection.search.ariaLabel":"Поиск по истории чата","messageSection.search.placeholder":"Поиск в текущем чате...","messageSection.search.count.empty":"Поиск","messageSection.search.count.minChars":"{count}+ символа","messageSection.search.count.searching":"Поиск...","messageSection.search.count.none":"Нет совпадений","messageSection.search.count.matches":"{current} / {total}","messageSection.search.previousAriaLabel":"Предыдущее совпадение","messageSection.search.nextAriaLabel":"Следующее совпадение","messageSection.search.closeAriaLabel":"Закрыть поиск","messageSection.search.searching":"Поиск...","messageSection.search.noVisibleMatches":"Нет видимых совпадений","messageTimeline.ariaLabel":"Таймлайн сообщений","messageTimeline.segment.user.label":"Вы","messageTimeline.segment.assistant.label":"Асс.","messageTimeline.segment.compaction.label":"Компактация","messageTimeline.tool.fallbackLabel":"Вызов инструмента","messageTimeline.tooltip.userFallback":"Сообщение пользователя","messageTimeline.tooltip.assistantFallback":"Ответ ассистента","messageTimeline.tooltip.compaction.auto":"Автокомпактация","messageTimeline.tooltip.compaction.manual":"Компактация пользователем","messageTimeline.text.filePrefix":"[Файл] {filename}","messageTimeline.text.attachment":"Вложение","messageBlock.tool.header":"Вызов инструмента","messageBlock.tool.unknown":"неизвестно","messageBlock.tool.goToSession.label":"Перейти к сессии","messageBlock.tool.goToSession.title":"Перейти к сессии","messageBlock.tool.goToSession.unavailableTitle":"Сессия пока недоступна","messageBlock.tool.deletePart.label":"Удалить часть","messageBlock.tool.deletePart.deleting":"Удаление...","messageBlock.tool.deletePart.title":"Удалить этот вывод инструмента","messageBlock.tool.deletePart.failed.title":"Ошибка удаления","messageBlock.tool.deletePart.failed.message":"Не удалось удалить вывод инструмента","messageBlock.compaction.ariaLabel":"Компактация сессии","messageBlock.compaction.autoLabel":"Сессия автоматически компактирована","messageBlock.compaction.manualLabel":"Сессия компактирована вами","messageBlock.usage.input":"Ввод","messageBlock.usage.output":"Вывод","messageBlock.usage.reasoning":"Рассуждения","messageBlock.usage.cacheRead":"Чтение кэша","messageBlock.usage.cacheWrite":"Запись кэша","messageBlock.usage.cost":"Стоимость","messageBlock.step.agentLabel":"Агент: {agent}","messageBlock.step.modelLabel":"Модель: {model}","messageBlock.reasoning.thinkingLabel":"Размышления","messageBlock.reasoning.expandAriaLabel":"Развернуть размышления","messageBlock.reasoning.collapseAriaLabel":"Свернуть размышления","messageBlock.reasoning.indicator.hide":"Скрыть","messageBlock.reasoning.indicator.view":"Показать","messageBlock.reasoning.detailsAriaLabel":"Детали рассуждений","codeBlockInline.actions.copy":"Копировать","codeBlockInline.actions.copied":"Скопировано!","messageItem.speaker.you":"Вы","messageItem.speaker.assistant":"Ассистент","messageItem.actions.revert":"Откатить","messageItem.actions.revertTitle":"Отменить изменения до этого места (удалит сообщения)","messageItem.actions.fork":"Форк","messageItem.actions.forkTitle":"Форкнуть от этого сообщения","messageItem.actions.copy":"Копировать","messageItem.actions.copyTitle":"Копировать сообщение","messageItem.actions.copied":"Скопировано!","messageItem.actions.speak":"Озвучить сообщение","messageItem.actions.generatingSpeech":"Генерация аудио","messageItem.actions.stopSpeech":"Остановить воспроизведение","messageItem.actions.speak.error.title":"Не удалось воспроизвести речь","messageItem.actions.speak.error.unsupported":"В этом браузере воспроизведение речи не поддерживается.","messageItem.actions.speak.error.unavailable":"Воспроизведение речи недоступно, пока не настроены голосовые параметры.","messageItem.actions.speak.error.generate":"Не удалось сгенерировать аудио для этого сообщения.","messageItem.actions.deleteMessage":"Удалить сообщение (без отката изменений)","messageItem.actions.deleteMessagesUpTo":"Удалить сообщения до этого места (без отката изменений)","messageItem.actions.deletingMessage":"Удаление...","messageItem.actions.deleteMessageFailedTitle":"Ошибка удаления","messageItem.actions.deleteMessageFailedMessage":"Не удалось удалить сообщение","messageItem.selection.checkboxAriaLabel":"Выбрать сообщение для удаления","messageSection.bulkDelete.toolbarAriaLabel":"Выбранные элементы ({count})","messageSection.bulkDelete.deleteSelectedTitle":"Удалить выбранные элементы","messageSection.bulkDelete.selectAllTitle":"Выбрать все сообщения","messageSection.bulkDelete.moreOptionsTitle":"Больше настроек","messageSection.bulkDelete.selectionModeLabel":"Выбор","messageSection.bulkDelete.selectionModeAll":"Все","messageSection.bulkDelete.selectionModeTools":"Только инструменты","messageSection.bulkDelete.selectionHint.toggle":"Выбрать элемент","messageSection.bulkDelete.selectionHint.range":"Выбрать диапазон","messageSection.bulkDelete.selectionHint.clear":"Очистить выбор","messageSection.bulkDelete.cancelTitle":"Отменить выбор","messageSection.bulkDelete.failedTitle":"Ошибка удаления","messageSection.bulkDelete.failedMessage":"Не удалось удалить выбранные элементы","messageItem.status.queued":"В ОЧЕРЕДИ","messageItem.status.generating":"Генерация…","messageItem.status.sending":"Отправка…","messageItem.status.failedToSend":"Не удалось отправить сообщение","messagePart.actions.delete":"Удалить часть","messagePart.actions.deleting":"Удаление...","messagePart.actions.deleteTitle":"Удалить этот элемент","messagePart.actions.deleteFailedTitle":"Ошибка удаления","messagePart.actions.deleteFailedMessage":"Не удалось удалить элемент","messageItem.attachment.defaultName":"вложение","messageItem.attachment.downloadAriaLabel":"Скачать {name}","messageItem.agentMeta.agentLabel":"Агент: {agent}","messageItem.agentMeta.modelLabel":"Модель: {model}","messageItem.errors.authenticationFallback":"Ошибка аутентификации","messageItem.errors.outputLengthExceeded":"Превышена длина вывода сообщения","messageItem.errors.requestAborted":"Запрос был прерван","messageItem.errors.unknownFallback":"Произошла неизвестная ошибка","attachmentChip.removeAriaLabel":"Удалить вложение","expandButton.toggleAriaLabel":"Переключить высоту поля ввода","promptInput.placeholder.shell":"Выполнить команду shell (Esc для выхода)…","promptInput.placeholder.default":"Введите сообщение, @file, @agent или вставьте изображения и текст…","promptInput.hints.shell.exit":"чтобы выйти из режима shell","promptInput.hints.shell.enable":"Режим shell","promptInput.hints.commands":"Команды","promptInput.history.previousAriaLabel":"Предыдущий prompt","promptInput.history.nextAriaLabel":"Следующий prompt","promptInput.overlay.newLine":"Новая строка","promptInput.overlay.send":"Отправить","promptInput.overlay.filesAgents":"Файлы/агенты","promptInput.overlay.history":"История","promptInput.overlay.attachments":"• прикреплено файлов: {count}","promptInput.overlay.shellModeActive":"Режим shell активен","promptInput.overlay.press":"Нажмите","promptInput.overlay.againToAbort":"еще раз, чтобы прервать сессию","promptInput.stopSession.ariaLabel":"Остановить сессию","promptInput.stopSession.title":"Остановить сессию","promptInput.clear.ariaLabel":"Очистить текст prompt","promptInput.clear.title":"Очистить текст prompt","promptInput.send.ariaLabel":"Отправить сообщение","promptInput.send.errorFallback":"Не удалось отправить сообщение","promptInput.send.errorTitle":"Не удалось отправить","promptInput.conversationMode.enable.title":"Включить режим разговора","promptInput.conversationMode.disable.title":"Выключить режим разговора","promptInput.conversationMode.error.title":"Сбой озвучивания разговора","promptInput.conversationMode.error.message":"Не удалось продолжить озвучивание ответов ассистента.","promptInput.voiceInput.start.title":"Начать голосовой ввод","promptInput.voiceInput.stop.title":"Остановить запись и расшифровать","promptInput.voiceInput.transcribing.title":"Идёт расшифровка аудио","promptInput.voiceInput.error.title":"Сбой голосового ввода","promptInput.voiceInput.error.permission":"Для записи голосового ввода требуется доступ к микрофону.","promptInput.voiceInput.error.permissionDenied":"macOS запретила доступ к микрофону.","promptInput.voiceInput.error.unsupported":"Голосовой ввод не поддерживается в этом браузере.","promptInput.voiceInput.error.transcribe":"Не удалось расшифровать записанное аудио."},p={"remoteAccess.eyebrow":"Удаленная передача управления","remoteAccess.title":"Подключитесь к CodeNomad удаленно","remoteAccess.subtitle":"Используйте адреса ниже, чтобы открыть CodeNomad с другого устройства.","remoteAccess.close":"Закрыть удаленный доступ","remoteAccess.refresh":"Обновить","remoteAccess.sections.listeningMode.label":"Режим прослушивания","remoteAccess.sections.listeningMode.help":"Разрешайте или ограничивайте удаленную передачу управления, привязываясь ко всем интерфейсам или только к localhost.","remoteAccess.toggle.on":"Вкл","remoteAccess.toggle.off":"Выкл","remoteAccess.toggle.title":"Разрешить подключения с других IP","remoteAccess.toggle.caption.all":"Привязка к 0.0.0.0","remoteAccess.toggle.caption.local":"Привязка к 127.0.0.1","remoteAccess.toggle.note":"Изменение требует перезапуска и временно остановит все активные экземпляры. Поделитесь адресами ниже после перезапуска сервера.","remoteAccess.listeningMode.restartConfirm.message":"Перезапустить, чтобы применить режим прослушивания? Это остановит все запущенные экземпляры.","remoteAccess.listeningMode.restartConfirm.title.all":"Открыть для других устройств","remoteAccess.listeningMode.restartConfirm.title.local":"Ограничить этим устройством","remoteAccess.listeningMode.restartConfirm.confirmLabel":"Перезапустить сейчас","remoteAccess.listeningMode.restartConfirm.cancelLabel":"Отмена","remoteAccess.restart.errorManual":"Не удалось перезапустить автоматически. Перезапустите приложение, чтобы применить изменение.","remoteAccess.sections.serverPassword.label":"Пароль сервера","remoteAccess.sections.serverPassword.help":"Для удаленной передачи управления требуется пароль. Установите запоминающийся пароль, чтобы разрешить вход с других устройств.","remoteAccess.authStatus.unavailable":"Статус аутентификации недоступен.","remoteAccess.username":"Имя пользователя: {username}","remoteAccess.password.status.set":"Для удаленного доступа установлен пароль.","remoteAccess.password.status.unset":"Пока не установлен запоминающийся пароль. Установите его, чтобы разрешить вход при удаленной передаче управления.","remoteAccess.password.actions.cancel":"Отмена","remoteAccess.password.actions.change":"Изменить пароль","remoteAccess.password.actions.set":"Установить пароль","remoteAccess.password.form.newPassword":"Новый пароль","remoteAccess.password.form.confirmPassword":"Подтвердите пароль","remoteAccess.password.form.placeholder":"Не менее 8 символов","remoteAccess.password.error.tooShort":"Пароль должен быть не короче 8 символов.","remoteAccess.password.error.mismatch":"Пароли не совпадают.","remoteAccess.password.save.saving":"Сохранение…","remoteAccess.password.save.label":"Сохранить пароль","remoteAccess.sections.addresses.label":"Доступные адреса","remoteAccess.sections.addresses.help":"Откройте или отсканируйте с другой машины, чтобы передать управление.","remoteAccess.addresses.loading":"Загрузка адресов…","remoteAccess.addresses.none":"Пока нет доступных адресов.","remoteAccess.addresses.actions.showOther":"Показать еще {count} адресов","remoteAccess.addresses.actions.hideOther":"Скрыть остальные адреса","remoteAccess.address.scope.network":"Сеть","remoteAccess.address.scope.loopback":"Loopback","remoteAccess.address.scope.internal":"Внутренний","remoteAccess.address.open":"Открыть","remoteAccess.address.showQr":"Показать QR","remoteAccess.address.hideQr":"Скрыть QR","remoteAccess.address.qrAlt":"QR для {url}"},g={"sessionPicker.title":"OpenCode • {folder}","sessionPicker.empty.noPrevious":"Нет предыдущих сессий","sessionPicker.resume.title":"Продолжить сессию ({count}):","sessionPicker.session.untitled":"Без названия","sessionPicker.divider.or":"или","sessionPicker.new.title":"Начать новую сессию:","sessionPicker.agents.loading":"Загрузка агентов…","sessionPicker.actions.creating":"Создание…","sessionPicker.actions.createSession":"Создать сессию","sessionPicker.actions.cancel":"Отмена","sessionList.header.title":"Сессии","sessionList.session.untitled":"Без названия","sessionList.status.working":"Работает","sessionList.status.compacting":"Компактация","sessionList.status.idle":"Простой","sessionList.status.retrying":"Повтор","sessionList.status.retryingIn":"Повтор через {seconds}с","sessionList.status.retryTooltip":"{message} (Попытка {attempt})","sessionList.status.retryToast":"{countdown}: {message} (Попытка {attempt})","sessionList.status.needsPermission":"Требуется разрешение","sessionList.status.needsInput":"Требуется ввод","sessionList.expand.collapseAriaLabel":"Свернуть сессию","sessionList.expand.expandAriaLabel":"Развернуть сессию","sessionList.expand.collapseTitle":"Свернуть","sessionList.expand.expandTitle":"Развернуть","sessionList.actions.newSession.ariaLabel":"Новая сессия","sessionList.actions.newSession.title":"Новая сессия","sessionList.actions.copyId.ariaLabel":"Скопировать ID сессии","sessionList.actions.copyId.title":"Скопировать ID сессии","sessionList.actions.reload.ariaLabel":"Обновить сессию","sessionList.actions.reload.title":"Обновить сессию","sessionList.actions.rename.ariaLabel":"Переименовать сессию","sessionList.actions.rename.title":"Переименовать сессию","sessionList.actions.delete.ariaLabel":"Удалить сессию","sessionList.actions.delete.title":"Удалить сессию","sessionList.copyId.success":"ID сессии скопирован","sessionList.copyId.error":"Не удалось скопировать ID сессии","sessionList.reload.error":"Не удалось обновить сессию","sessionList.delete.error":"Не удалось удалить сессию","sessionList.delete.title":"Удалить сессию","sessionList.delete.confirmMessage":'Удалить "{label}"? Это действие нельзя отменить.',"sessionList.delete.confirmLabel":"Удалить","sessionList.delete.cancelLabel":"Отмена","sessionList.rename.error":"Не удалось переименовать сессию","sessionList.filter.placeholder":"Поиск сессий…","sessionList.filter.ariaLabel":"Поиск сессий","sessionList.selection.selectAllLabel":"Выбрать все","sessionList.selection.selectAllAriaLabel":"Выбрать все сессии","sessionList.selection.clearLabel":"Очистить","sessionList.selection.clearAriaLabel":"Очистить выбор","sessionList.selection.checkboxAriaLabel":"Выбрать сессию","sessionList.bulkDelete.button":"Удалить {count}","sessionList.bulkDelete.ariaLabel":"Удалить {count} выбранных сессий","sessionList.bulkDelete.title":"Удалить сессии","sessionList.bulkDelete.confirmMessage":"Удалить {count} выбранных сессий? Это действие нельзя отменить.","sessionList.bulkDelete.confirmLabel":"Удалить","sessionList.bulkDelete.cancelLabel":"Отмена","sessionList.bulkDelete.error":"Не удалось удалить {count} сессий","sessionRenameDialog.title":"Переименовать сессию","sessionRenameDialog.description.withLabel":'Обновите название для "{label}".',"sessionRenameDialog.description.default":"Установите новое название для этой сессии.","sessionRenameDialog.input.label":"Название сессии","sessionRenameDialog.input.placeholder":"Введите название сессии","sessionRenameDialog.actions.cancel":"Отмена","sessionRenameDialog.actions.rename":"Переименовать","sessionRenameDialog.actions.renaming":"Переименование…","sessionView.fallback.sessionNotFound":"Сессия не найдена","sessionView.alerts.abortFailed.message":"Не удалось остановить сессию","sessionView.alerts.abortFailed.title":"Не удалось остановить","sessionView.alerts.revertFailed.message":"Не удалось откатиться к сообщению","sessionView.alerts.revertFailed.title":"Не удалось откатиться","sessionView.alerts.deleteUpToFailed.message":"Не удалось удалить сообщения","sessionView.alerts.deleteUpToFailed.title":"Ошибка удаления","sessionView.alerts.forkFailed.message":"Не удалось форкнуть сессию","sessionView.alerts.forkFailed.title":"Не удалось форкнуть","sessionView.attachments.expandPastedTextAriaLabel":"Развернуть вставленный текст","sessionView.attachments.insertPastedTextTitle":"Вставить вставленный текст","sessionView.attachments.removeAriaLabel":"Удалить вложение","sessionEvents.sessionCompactedToast":"Сессия {label} была компактирована","sessionEvents.sessionError.unknown":"Неизвестная ошибка","sessionEvents.sessionError.title":"Ошибка сессии","sessionEvents.sessionError.message":"Ошибка: {message}","sessionState.cleanup.deepConfirm.message":"Эта очистка может быть медленной и может удалить сессии, которые вы не хотели удалять. Вы уверены?","sessionState.cleanup.deepConfirm.title":"Глубокая очистка сессий","sessionState.cleanup.deepConfirm.detail":"Глубокая очистка сессий удалит все сессии без сообщений, уберет завершенные сессии субагентов и очистит неиспользуемые форки сессий.","sessionState.cleanup.deepConfirm.confirmLabel":"Продолжить","sessionState.cleanup.deepConfirm.cancelLabel":"Отмена","sessionState.cleanup.toast.one":"Удалена {count} пустая сессия","sessionState.cleanup.toast.other":"Удалено {count} пустых сессий"},u={"instanceServiceStatus.sections.lsp":"LSP-серверы","instanceServiceStatus.sections.mcp":"MCP-серверы","instanceServiceStatus.sections.plugins":"Плагины","instanceServiceStatus.lsp.loading":"Загрузка LSP-серверов…","instanceServiceStatus.lsp.empty":"LSP-серверы не обнаружены.","instanceServiceStatus.lsp.status.connected":"Подключено","instanceServiceStatus.lsp.status.error":"Ошибка","instanceServiceStatus.mcp.loading":"Загрузка MCP-серверов…","instanceServiceStatus.mcp.empty":"MCP-серверы не обнаружены.","instanceServiceStatus.mcp.toggleAriaLabel":"Переключить MCP-сервер {name}","instanceServiceStatus.plugins.loading":"Загрузка плагинов…","instanceServiceStatus.plugins.empty":"Плагины не настроены.","permissionBanner.pendingRequests.one":"{count} ожидающий запрос","permissionBanner.pendingRequests.other":"{count} ожидающих запросов","permissionBanner.detail.permission.one":"{count} разрешение","permissionBanner.detail.permission.other":"{count} разрешений","permissionBanner.detail.question.one":"{count} вопрос","permissionBanner.detail.question.other":"{count} вопросов","permissionBanner.detail.wrapper":" ({detail})","agentSelector.placeholder":"Выберите агента…","agentSelector.badge.subagent":"субагент","agentSelector.none":"Нет","agentSelector.trigger.primary":"Агент: {agent}","modelSelector.placeholder.search":"Поиск моделей…","modelSelector.none":"Нет","modelSelector.trigger.primary":"Модель: {model}","modelSelector.favoritesOnly.toggle.ariaLabel":"Только избранное","modelSelector.favoritesOnly.showAll":"Показать все модели","modelSelector.favorite.add":"Добавить в избранное","modelSelector.favorite.remove":"Удалить из избранного","thinkingSelector.variant.default":"По умолчанию","thinkingSelector.label":"Размышления: {variant}","envEditor.title":"Переменные окружения","envEditor.count.one":"({count} переменная)","envEditor.count.other":"({count} переменных)","envEditor.fields.name.placeholder":"Имя переменной","envEditor.fields.name.readOnlyTitle":"Имя переменной (только чтение)","envEditor.fields.value.placeholder":"Значение переменной","envEditor.actions.remove.title":"Удалить переменную","envEditor.actions.add.title":"Добавить переменную","envEditor.empty":"Переменные окружения не настроены. Добавьте переменные выше, чтобы настроить окружение OpenCode.","envEditor.help":"Эти переменные будут доступны в окружении OpenCode при запуске экземпляров.","contextUsagePanel.headings.tokens":"Tokens","contextUsagePanel.headings.context":"Контекст","contextUsagePanel.labels.input":"Ввод","contextUsagePanel.labels.output":"Вывод","contextUsagePanel.labels.cost":"Стоимость","contextUsagePanel.labels.used":"Использовано","contextUsagePanel.labels.available":"Доступно","contextUsagePanel.unavailable":"--","settings.title":"Settings","settings.navigationAriaLabel":"Settings sections","settings.close":"Close settings","settings.content.eyebrow":"Workspace preferences","settings.open.title":"Open settings","settings.open.ariaLabel":"Open settings","settings.nav.appearance":"Appearance","settings.nav.notifications":"Notifications","settings.nav.remote":"Remote Access","settings.nav.speech":"Speech","settings.nav.opencode":"OpenCode","settings.scope.device":"This device","settings.scope.server":"Server setting","settings.common.enabled":"Enabled","settings.common.disabled":"Отключено","settings.section.appearance.title":"Appearance","settings.section.appearance.subtitle":"Adjust how the app looks on this device.","settings.appearance.theme.title":"Theme","settings.appearance.theme.subtitle":"Choose the color mode used throughout the app.","settings.appearance.theme.option.system":"Match your operating system setting","settings.appearance.theme.option.light":"Use the light appearance","settings.appearance.theme.option.dark":"Use the dark appearance","settings.section.notifications.title":"Notifications","settings.section.notifications.subtitle":"Control OS-level notifications for session activity.","settings.notifications.permission.granted":"Granted","settings.notifications.permission.denied":"Denied","settings.notifications.permission.default":"Not granted","settings.notifications.permission.unsupported":"Unsupported","settings.notifications.messages.unsupportedEnvironment":"OS notifications are not supported in this environment.","settings.notifications.messages.permissionDenied":"Notification permission denied. Enable notifications in your system or browser settings.","settings.notifications.messages.permissionNotGranted":"Notification permission not granted.","settings.notifications.messages.unsupportedGeneral":"Notifications are not supported in this environment.","settings.notifications.messages.permissionGranted":"Permission granted. You can now enable notifications.","settings.notifications.messages.permissionRequestDenied":"Permission denied. You may need to enable notifications in your system or browser settings.","settings.notifications.sessionStatus.title":"Session status notifications","settings.notifications.sessionStatus.subtitle":"Receive alerts when sessions need your attention.","settings.notifications.enable.title":"Enable notifications","settings.notifications.enable.permission":"Permission: {permission}","settings.notifications.requestPermission.title":"Request permission","settings.notifications.requestPermission.subtitle":"Allow the app to send notifications on this device.","settings.notifications.requestPermission.action":"Request","settings.notifications.allowVisible.title":"Notify when the app is focused","settings.notifications.allowVisible.subtitle":"Keep alerts enabled even while this window is visible.","settings.notifications.unsupportedNote":"Notifications are not supported in this environment. The notifications control stays disabled.","settings.notifications.events.title":"Notify me when","settings.notifications.events.subtitle":"Choose which session events should send alerts.","settings.notifications.events.needsInput":"Session needs input","settings.notifications.events.idle":"Session becomes idle","settings.notifications.status.enabled":"Notifications enabled","settings.notifications.status.disabled":"Notifications disabled","settings.notifications.status.unsupported":"Notifications unsupported","settings.section.remote.title":"Remote Access","settings.section.remote.subtitle":"Review how this server is exposed on your network and secure access credentials.","settings.section.opencode.title":"OpenCode","settings.section.opencode.subtitle":"Choose the OpenCode binary and environment used for new instances.","settings.opencode.runtime.title":"Runtime","settings.opencode.runtime.subtitle":"Configure which OpenCode binary new instances launch with.","settings.opencode.logLevel.title":"Уровень логирования OpenCode","settings.opencode.logLevel.subtitle":"Задайте уровень логирования, используемый при запуске новых экземпляров OpenCode.","settings.opencode.logLevel.selector.title":"Подробность логов","settings.opencode.logLevel.selector.subtitle":"Выберите, сколько логов должны выводить новые экземпляры OpenCode.","settings.opencode.logLevel.option.debug":"Отладка","settings.opencode.logLevel.option.info":"Информация","settings.opencode.logLevel.option.warn":"Предупреждение","settings.opencode.logLevel.option.error":"Ошибка","settings.appearance.behavior.title":"Взаимодействие","settings.appearance.behavior.subtitle":"Значения по умолчанию для сообщений, диффов и ввода.","settings.behavior.keyboardHints.title":"Подсказки сочетаний клавиш","settings.behavior.keyboardHints.subtitle":"Показывать подсказки сочетаний клавиш по всему интерфейсу.","settings.behavior.thinking.title":"Разделы размышлений","settings.behavior.thinking.subtitle":"Показывать или скрывать разделы размышлений ИИ в сообщениях.","settings.behavior.thinkingDefault.title":"Размышления по умолчанию","settings.behavior.thinkingDefault.subtitle":"Выберите, начинать ли разделы размышлений развернутыми или свернутыми.","settings.behavior.timelineTools.title":"Вызовы инструментов в таймлайне","settings.behavior.timelineTools.subtitle":"Показывать или скрывать записи вызовов инструментов в таймлайне сообщений.","settings.behavior.diffView.title":"Вид диффа","settings.behavior.diffView.subtitle":"Выберите, как отображаются диффы вызовов инструментов.","settings.behavior.diffView.option.split":"Раздельный","settings.behavior.diffView.option.unified":"Единый","settings.behavior.toolOutputsDefault.title":"Выводы инструментов по умолчанию","settings.behavior.toolOutputsDefault.subtitle":"Выберите, начинать ли выводы инструментов развернутыми или свернутыми.","settings.behavior.diagnosticsDefault.title":"Диагностика по умолчанию","settings.behavior.diagnosticsDefault.subtitle":"Выберите, начинать ли вывод диагностики развернутым или свернутым.","settings.behavior.toolInputsVisibility.title":"Видимость входных данных инструмента","settings.behavior.toolInputsVisibility.subtitle":"Задайте видимость по умолчанию для входных аргументов вызовов инструментов.","settings.behavior.usageMetrics.title":"Метрики использования токенов","settings.behavior.usageMetrics.subtitle":"Показывать или скрывать статистику токенов и стоимости в сообщениях ассистента.","settings.behavior.autoCleanup.title":"Автоочистка пустых сессий","settings.behavior.autoCleanup.subtitle":"Автоматически очищать пустые сессии при создании новых.","settings.behavior.keepUnseenSubagentIdle.title":"Оставлять idle-маркеры субагентов","settings.behavior.keepUnseenSubagentIdle.subtitle":"Оставлять idle-маркеры субагентов видимыми до просмотра вместо скрытия через 5 секунд.","settings.behavior.promptVoiceInput.title":"Prompt voice input","settings.behavior.promptVoiceInput.subtitle":"Show the microphone control for speech-to-text prompt input when speech is configured.","settings.behavior.promptSubmit.title":"Enter для отправки","settings.behavior.promptSubmit.subtitle":"Enter отправляет; Cmd/Ctrl+Enter вставляет новую строку.","settings.speech.title":"Речь","settings.speech.subtitle":"Настройте преобразование речи в текст сейчас и подготовьте основу для синтеза речи в будущих функциях.","settings.speech.provider.title":"Провайдер","settings.speech.provider.subtitle":"Речевые запросы используют серверный речевой адаптер.","settings.speech.provider.openaiCompatible":"OpenAI-compatible","settings.speech.status.loading":"Проверка конфигурации...","settings.speech.status.configured":"Настроено","settings.speech.status.missing":"Отсутствует API-ключ","settings.speech.status.error":"Речевой сервис недоступен","settings.speech.apiKey.title":"API key","settings.speech.apiKey.subtitle":"Используется для речевых запросов, управляемых CodeNomad.","settings.speech.apiKey.placeholder":"Введите новый API-ключ","settings.speech.apiKey.storedNote":"Сохранённый API-ключ скрыт. Введите новое значение, чтобы заменить его, или оставьте поле пустым, чтобы сохранить текущий ключ.","settings.speech.apiKey.clearAction":"Удалить сохранённый ключ","settings.speech.apiKey.clearPending":"Сохранённый API-ключ будет удалён после сохранения.","settings.speech.baseUrl.title":"Base URL","settings.speech.baseUrl.subtitle":"Необязательная переопределяющая ссылка для речевых endpoint'ов, совместимых с OpenAI.","settings.speech.baseUrl.placeholder":"https://api.openai.com/v1","settings.speech.sttModel.title":"Модель распознавания","settings.speech.sttModel.subtitle":"Модель, используемая для преобразования голосового ввода в тексте запроса.","settings.speech.ttsModel.title":"Речевая модель","settings.speech.ttsModel.subtitle":"Модель синтеза речи по умолчанию, зарезервированная для будущих функций воспроизведения.","settings.speech.ttsVoice.title":"Голос по умолчанию","settings.speech.ttsVoice.subtitle":"Голос синтеза речи по умолчанию, зарезервированный для будущих функций воспроизведения.","settings.speech.playbackMode.title":"Режим воспроизведения","settings.speech.playbackMode.subtitle":"Выберите, начинать ли воспроизведение TTS во время поступления аудио или только после полной генерации файла.","settings.speech.playbackMode.streaming":"Потоковый","settings.speech.playbackMode.buffered":"Буферизованный","settings.speech.ttsFormat.title":"Формат вывода","settings.speech.ttsFormat.subtitle":"Выберите аудиоформат для синтезированной речи. Поддержка потокового режима зависит от провайдера и браузера.","settings.speech.help":"Голосовой ввод появляется, когда распознавание речи настроено и поддерживается. Для воспроизведения сообщений используются выбранные здесь режим и формат TTS.","settings.speech.compatibility.streamingUnavailable":"Текущая конфигурация голосового провайдера не заявляет поддержку потокового TTS. Переключите режим воспроизведения на buffered, если хотите, чтобы воспроизведение работало уже сейчас.","settings.speech.compatibility.browserStreamingUnavailable":"Ваш текущий браузер не может воспроизводить потоково выбранный формат TTS. Выберите buffered-воспроизведение или переключитесь на другой формат.","settings.speech.compatibility.runtimeNote":"В режиме streaming по-прежнему доступны все форматы. Некоторые сочетания браузера и провайдера все равно могут завершаться ошибкой во время воспроизведения.","settings.speech.testPlayback.action":"Проверить воспроизведение","settings.speech.testPlayback.generating":"Генерация примера","settings.speech.testPlayback.stop":"Остановить пример","settings.speech.testPlayback.sample":"Спасибо, что используете CodeNomad, ваши настройки речи работают нормально.","settings.speech.testPlayback.note":"Тест сразу использует текущие режим и формат. Сначала сохраните изменения API key, Base URL, модели или голоса, если хотите проверить и их.","settings.speech.save.action":"Сохранить","settings.speech.save.saving":"Сохранение...","settings.speech.save.saved":"Сохранено","settings.speech.save.unsaved":"Есть несохранённые изменения","settings.speech.save.error":"Не удалось сохранить","settings.nav.sidecars":"SideCars","settings.section.sidecars.eyebrow":"Server services","settings.section.sidecars.title":"SideCars","settings.section.sidecars.subtitle":"Configure local services listening on fixed ports that the server can proxy into tabs.","sidecars.form.name":"Name","sidecars.form.validation":"Enter a valid SideCar name and port.","sidecars.form.port":"Port","sidecars.form.insecure":"Use HTTP","sidecars.form.protocol":"Protocol","sidecars.form.protocol.help":"Choose how the proxy should connect to the local service.","sidecars.form.protocol.https":"HTTPS","sidecars.form.protocol.http":"HTTP","sidecars.form.prefixMode":"Prefix mode","sidecars.form.prefixMode.help":"Choose whether the SideCar receives the public /sidecars path prefix.","sidecars.form.prefixMode.strip":"Strip prefix","sidecars.form.prefixMode.preserve":"Preserve prefix","sidecars.form.add":"Add SideCar","sidecars.kind.port":"Port","sidecars.status.running":"Running","sidecars.status.stopped":"Stopped","sidecars.basePath":"Base path","sidecars.settings.listTitle":"Configured SideCars","sidecars.settings.listSubtitle":"Review the port-based SideCars available in the picker.","sidecars.settings.empty":"No SideCars configured yet.","sidecars.picker.title":"Open SideCar","sidecars.picker.loading":"Loading SideCars...","sidecars.picker.subtitle":"Choose an available SideCar to open in a new tab.","sidecars.picker.empty":"No port-based SideCars are available yet.","sidecars.picker.close":"Close","sidecars.open.errorTitle":"Unable to open SideCar","sidecars.open.notFound":"SideCar not found.","sidecars.open.notRunning":"SideCar is not reachable on its configured port.","sidecars.back":"Back","sidecars.refresh":"Refresh","sidecars.path":"Path","sidecars.go":"Go"},h={"time.relative.justNow":"только что","time.relative.daysAgoShort":"{count}д назад","time.relative.hoursAgoShort":"{count}ч назад","time.relative.minutesAgoShort":"{count}м назад"},b={"toolCall.pending.waitingToRun":"Ожидание запуска…","toolCall.error.label":"Ошибка:","toolCall.header.copyTitle":"Copy tool call title","toolCall.header.copyAriaLabel":"Copy tool call title","toolCall.header.showInputTitle":"Show Tool Arguments","toolCall.header.showInputAriaLabel":"Show Tool Arguments","toolCall.header.hideInputTitle":"Hide Tool Arguments","toolCall.header.hideInputAriaLabel":"Hide Tool Arguments","toolCall.io.input":"Tool Input","toolCall.io.output":"Tool Output","toolCall.diff.label":"Diff","toolCall.diff.label.withPath":"Diff · {path}","toolCall.diff.viewMode.ariaLabel":"Режим просмотра diff","toolCall.diff.viewMode.split":"Раздельный","toolCall.diff.viewMode.unified":"Единый","toolCall.diff.switchToSplit":"Переключить на раздельный вид","toolCall.diff.switchToUnified":"Переключить на единый вид","toolCall.diff.enableWordWrap":"Включить перенос слов","toolCall.diff.disableWordWrap":"Выключить перенос слов","toolCall.diff.copyPatch":"Скопировать patch","toolCall.diagnostics.title":"Диагностика","toolCall.diagnostics.ariaLabel":"Диагностика","toolCall.diagnostics.ariaLabel.withLabel":"Диагностика {label}","toolCall.diagnostics.severity.error.short":"ERR","toolCall.diagnostics.severity.warning.short":"WARN","toolCall.diagnostics.severity.info.short":"INFO","toolCall.renderer.toolName.shell":"Shell","toolCall.renderer.toolName.fetch":"Fetch","toolCall.renderer.toolName.invalid":"Неверный","toolCall.renderer.toolName.plan":"План","toolCall.renderer.toolName.applyPatch":"Применить патч","toolCall.renderer.action.working":"Выполняется…","toolCall.renderer.action.writingCommand":"Запись команды…","toolCall.renderer.action.preparingEdit":"Подготовка правки…","toolCall.renderer.action.readingFile":"Чтение файла…","toolCall.renderer.action.preparingWrite":"Подготовка записи…","toolCall.renderer.action.preparingPatch":"Подготовка патча…","toolCall.renderer.action.planning":"Планирование…","toolCall.renderer.action.fetchingFromWeb":"Получение из интернета…","toolCall.renderer.action.findingFiles":"Поиск файлов…","toolCall.renderer.action.searchingContent":"Поиск по содержимому…","toolCall.renderer.action.listingDirectory":"Просмотр каталога…","toolCall.renderer.bash.title.timeout":"Таймаут: {timeout}","toolCall.renderer.read.detail.offset":"Смещение: {offset}","toolCall.renderer.read.detail.limit":"Лимит: {limit}","toolCall.renderer.todo.empty":"Пока нет пунктов плана.","toolCall.renderer.todo.status.pending":"Ожидает","toolCall.renderer.todo.status.inProgress":"В процессе","toolCall.renderer.todo.status.completed":"Завершено","toolCall.renderer.todo.status.cancelled":"Отменено","toolCall.renderer.todo.title.plan":"План","toolCall.renderer.todo.title.creating":"Создание плана","toolCall.renderer.todo.title.completing":"Завершение плана","toolCall.renderer.todo.title.updating":"Обновление плана","toolCall.permission.status.required":"Требуется разрешение","toolCall.permission.status.queued":"Разрешение в очереди","toolCall.permission.requestedDiff.label":"Запрошенный diff","toolCall.permission.requestedDiff.withPath":"Запрошенный diff · {path}","toolCall.permission.queuedText":"Ожидание предыдущих ответов по разрешениям.","toolCall.permission.actions.allowOnce":"Разрешить один раз","toolCall.permission.actions.alwaysAllow":"Всегда разрешать","toolCall.permission.actions.deny":"Запретить","toolCall.permission.shortcuts.allowOnce":"Разрешить один раз","toolCall.permission.shortcuts.alwaysAllow":"Всегда разрешать","toolCall.permission.shortcuts.deny":"Запретить","toolCall.permission.errors.unableToUpdate":"Не удалось обновить разрешение","permissionApproval.title":"Запросы","permissionApproval.empty":"Нет ожидающих запросов.","permissionApproval.kind.permission":"Разрешение","permissionApproval.kind.question":"Вопрос","permissionApproval.questionCount.one":"{count} вопрос","permissionApproval.questionCount.other":"{count} вопросов","permissionApproval.status.active":"Активно","permissionApproval.actions.closeAriaLabel":"Закрыть","permissionApproval.actions.goToSession":"Перейти к сессии","permissionApproval.actions.loadingSession":"Загрузка…","permissionApproval.actions.loadSession":"Загрузить сессию","permissionApproval.actions.allowOnce":"Разрешить один раз","permissionApproval.actions.alwaysAllow":"Всегда разрешать","permissionApproval.actions.deny":"Запретить","permissionApproval.fallbackHint":"Загрузите сессию для получения подробностей.","permissionApproval.errors.unableToUpdatePermission":"Не удалось обновить разрешение","toolCall.question.status.required":"Требуется ответ","toolCall.question.status.queued":"Вопрос в очереди","toolCall.question.status.questions":"Вопросы","toolCall.question.action.awaitingAnswers":"Ожидание ответов…","toolCall.question.title.questions":"Вопросы","toolCall.question.title.askingQuestions":"Задаем вопросы","toolCall.question.type.one":"Вопрос","toolCall.question.type.other":"Вопросы","toolCall.question.number":"В{number}:","toolCall.question.multiple":"Несколько","toolCall.question.custom.title":"Введите свой ответ","toolCall.question.custom.label":"Свой ответ","toolCall.question.custom.placeholder":"Введите свой ответ","toolCall.question.actions.submit":"Отправить","toolCall.question.actions.dismiss":"Скрыть","toolCall.question.shortcuts.submit":"Отправить","toolCall.question.shortcuts.dismiss":"Скрыть","toolCall.question.queuedText":"Ожидание предыдущих ответов.","toolCall.question.validation.answerAll":"Ответьте на все вопросы перед отправкой.","toolCall.question.errors.unableToReply":"Не удалось ответить","toolCall.question.errors.unableToDismiss":"Не удалось скрыть","toolCall.task.action.delegating":"Делегирование…","toolCall.task.sections.prompt":"Prompt","toolCall.task.sections.steps":"Шаги","toolCall.task.sections.output":"Вывод","toolCall.task.steps.count":"{count} шагов","toolCall.task.meta.agentModel":"Агент: {agent} • Модель: {model}","toolCall.task.meta.agent":"Агент: {agent}","toolCall.task.meta.model":"Модель: {model}","toolCall.status.pending":"В ожидании","toolCall.status.running":"Выполняется","toolCall.status.completed":"Завершено","toolCall.status.error":"Ошибка","toolCall.status.unknown":"Неизвестно","toolCall.applyPatch.action.preparing":"Подготовка apply_patch…","toolCall.applyPatch.title.withFileCount.one":"{tool} ({count} файл)","toolCall.applyPatch.title.withFileCount.other":"{tool} ({count} файлов)","toolCall.applyPatch.fileFallback":"Файл {number}"},y=e(a,s,r,h,t,i,n,l,c,g,m,b,d,u,p,o);export{y as ruMessages};
@@ -0,0 +1,2 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-Dty5bSHf.js","assets/git-diff-vendor-CSgooKT_.js","assets/fast-diff-vendor-DgdwVvTQ.js","assets/highlight-vendor-8FKMu9os.js","assets/git-diff-vendor-HAZkIolJ.css","assets/monaco-viewer-DWQqXKm3.js","assets/index-H16e4Rqc.js","assets/index-D-NvysdX.js","assets/index-Ctq8RqRf.js","assets/index-BvRe9GiS.js","assets/index-Bdy3MTIn.js"])))=>i.map(i=>d[i]);
2
+ import{d as F,l as X,k as Z,t as ee,c as U,b as x,o as V,n as te}from"./git-diff-vendor-CSgooKT_.js";import{l as se,k as oe}from"./monaco-viewer-DWQqXKm3.js";(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const n of document.querySelectorAll('link[rel="modulepreload"]'))o(n);new MutationObserver(n=>{for(const i of n)if(i.type==="childList")for(const a of i.addedNodes)a.tagName==="LINK"&&a.rel==="modulepreload"&&o(a)}).observe(document,{childList:!0,subtree:!0});function s(n){const i={};return n.integrity&&(i.integrity=n.integrity),n.referrerPolicy&&(i.referrerPolicy=n.referrerPolicy),n.crossOrigin==="use-credentials"?i.credentials="include":n.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function o(n){if(n.ep)return;n.ep=!0;const i=s(n);fetch(n.href,i)}})();const ne="modulepreload",ie=function(e){return"/"+e},W={},w=function(t,s,o){let n=Promise.resolve();if(s&&s.length>0){document.getElementsByTagName("link");const a=document.querySelector("meta[property=csp-nonce]"),c=(a==null?void 0:a.nonce)||(a==null?void 0:a.getAttribute("nonce"));n=Promise.allSettled(s.map(m=>{if(m=ie(m),m in W)return;W[m]=!0;const S=m.endsWith(".css"),y=S?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${m}"]${y}`))return;const p=document.createElement("link");if(p.rel=S?"stylesheet":ne,S||(p.as="script"),p.crossOrigin="",p.href=m,c&&p.setAttribute("nonce",c),document.head.appendChild(p),S)return new Promise((M,N)=>{p.addEventListener("load",M),p.addEventListener("error",()=>N(new Error(`Unable to preload CSS for ${m}`)))})}))}function i(a){const c=new Event("vite:preloadError",{cancelable:!0});if(c.payload=a,window.dispatchEvent(c),!c.defaultPrevented)throw a}return n.then(a=>{for(const c of a||[])c.status==="rejected"&&i(c.reason);return t().catch(i)})},ae={"advancedSettings.title":"Advanced Settings","advancedSettings.environmentVariables.title":"Environment Variables","advancedSettings.environmentVariables.subtitle":"Applied whenever a new OpenCode instance starts","advancedSettings.actions.close":"Close"},re={"app.launchError.title":"Unable to launch OpenCode","app.launchError.description":"We couldn't start the selected OpenCode binary. Review the error output below or choose a different binary from OpenCode settings.","app.launchError.binaryPathLabel":"Binary path","app.launchError.errorOutputLabel":"Error output","app.launchError.openAdvancedSettings":"Open OpenCode Settings","app.launchError.close":"Close","app.launchError.closeTitle":"Close (Esc)","app.launchError.fallbackMessage":"Failed to launch workspace","app.stopInstance.confirmMessage":"Stop OpenCode instance? This will stop the server.","app.stopInstance.title":"Stop instance","app.stopInstance.confirmLabel":"Stop","app.stopInstance.cancelLabel":"Keep running","emptyState.logoAlt":"CodeNomad logo","emptyState.brandTitle":"CodeNomad","emptyState.tagline":"Select a folder to start coding with AI","emptyState.actions.selectFolder":"Select Folder","emptyState.actions.selecting":"Selecting...","emptyState.keyboardShortcut":"Keyboard shortcut: {shortcut}","emptyState.examples":"Examples: {example}","emptyState.multipleInstances":"You can have multiple instances of the same folder","releases.upgradeRequired.title":"Upgrade required","releases.upgradeRequired.message.withVersion":"Update to CodeNomad {version} to use the latest UI.","releases.upgradeRequired.message.noVersion":"Update CodeNomad to use the latest UI.","releases.upgradeRequired.action.getUpdate":"Get update","releases.uiUpdated.title":"UI updated","releases.uiUpdated.message":"UI is now updated to {version}.","releases.devUpdateAvailable.title":"Dev build available","releases.devUpdateAvailable.message":"A new dev build is available: {version}.","releases.devUpdateAvailable.action":"View release","theme.mode.system":"System","theme.mode.light":"Light","theme.mode.dark":"Dark","theme.toggle.title":"Theme: {mode}","theme.toggle.ariaLabel":"Theme: {mode}"},le={"commandPalette.title":"Command Palette","commandPalette.description":"Search and execute commands","commandPalette.searchPlaceholder":"Type a command or search...","commandPalette.empty":'No commands found for "{query}"',"commandPalette.category.customCommands":"Custom Commands","commandPalette.category.instance":"Instance","commandPalette.category.session":"Session","commandPalette.category.agentModel":"Agent & Model","commandPalette.category.inputFocus":"Input & Focus","commandPalette.category.system":"System","commandPalette.category.other":"Other","commands.newInstance.label":"New Instance","commands.newInstance.description":"Open folder picker to create new instance","commands.newInstance.keywords":"folder, project, workspace","commands.closeInstance.label":"Close Tab","commands.closeInstance.description":"Close the current top-level tab","commands.closeInstance.keywords":"stop, quit, close, tab","commands.nextInstance.label":"Next Tab","commands.nextInstance.description":"Cycle to the next top-level tab","commands.nextInstance.keywords":"switch, navigate, tab","commands.previousInstance.label":"Previous Tab","commands.previousInstance.description":"Cycle to the previous top-level tab","commands.previousInstance.keywords":"switch, navigate, tab","commands.newSession.label":"New Session","commands.newSession.description":"Create a new parent session","commands.newSession.keywords":"create, start","commands.closeSession.label":"Close Session","commands.closeSession.description":"Close current parent session","commands.closeSession.keywords":"close, stop","commands.scrubSessions.label":"Scrub Sessions","commands.scrubSessions.description":"Remove empty sessions, subagent sessions that have completed their primary task, and extraneous forked sessions.","commands.scrubSessions.keywords":"cleanup, blank, empty, sessions, remove, delete, scrub","commands.instanceInfo.label":"Instance Info","commands.instanceInfo.description":"Open the instance overview for logs and status","commands.instanceInfo.keywords":"info, logs, console, output","commands.nextSession.label":"Next Session","commands.nextSession.description":"Cycle to next session tab","commands.nextSession.keywords":"switch, navigate","commands.previousSession.label":"Previous Session","commands.previousSession.description":"Cycle to previous session tab","commands.previousSession.keywords":"switch, navigate","commands.compactSession.label":"Compact Session","commands.compactSession.description":"Summarize and compact the current session","commands.compactSession.keywords":"summarize, compress","commands.compactSession.errorFallback":"Failed to compact session","commands.compactSession.alert.title":"Compact failed","commands.compactSession.alert.message":"Compact failed: {message}","commands.undoLastMessage.label":"Undo Last Message","commands.undoLastMessage.description":"Revert the last message","commands.undoLastMessage.keywords":"revert, undo","commands.undoLastMessage.none.title":"No actions to undo","commands.undoLastMessage.none.message":"Nothing to undo","commands.undoLastMessage.failed.title":"Undo failed","commands.undoLastMessage.failed.message":"Failed to revert message","commands.openModelSelector.label":"Open Model Selector","commands.openModelSelector.description":"Choose a different model","commands.openModelSelector.keywords":"model, llm, ai","commands.selectModelVariant.label":"Select Model Variant","commands.selectModelVariant.description":"Choose a thinking effort for the current model","commands.selectModelVariant.keywords":"variant, thinking, reasoning, effort","commands.openAgentSelector.label":"Open Agent Selector","commands.openAgentSelector.description":"Choose a different agent","commands.openAgentSelector.keywords":"agent, mode","commands.clearInput.label":"Clear Input","commands.clearInput.description":"Clear the prompt textarea","commands.clearInput.keywords":"clear, reset","commands.promptSubmitShortcut.label.default":"Enter: New Line, Cmd/Ctrl+Enter: Submit Prompt","commands.promptSubmitShortcut.label.swapped":"Enter: Submit Prompt, Cmd/Ctrl+Enter: New Line","commands.promptSubmitShortcut.description":"Swap Enter and Cmd/Ctrl+Enter behavior in the prompt input","commands.promptSubmitShortcut.keywords":"enter, cmd, ctrl, submit, send, newline, shortcut, keybind, prompt","commands.thinkingBlocks.label.show":"Show Thinking","commands.thinkingBlocks.label.hide":"Hide Thinking","commands.thinkingBlocks.description":"Show or hide AI thinking sections","commands.thinkingBlocks.keywords":"thinking, reasoning, toggle, show, hide","commands.timelineToolCalls.label.show":"Show Timeline Tool Calls","commands.timelineToolCalls.label.hide":"Hide Timeline Tool Calls","commands.timelineToolCalls.description":"Toggle tool call entries in the message timeline","commands.timelineToolCalls.keywords":"timeline, tool, toggle","commands.keyboardShortcutHints.label.show":"Show Keyboard Shortcut Hints","commands.keyboardShortcutHints.label.hide":"Hide Keyboard Shortcut Hints","commands.keyboardShortcutHints.description":"Show or hide keyboard shortcut hints across the UI","commands.keyboardShortcutHints.description.disabledWeb":"Disabled in WebUI (shortcut hints are always hidden)","commands.keyboardShortcutHints.keywords":"shortcut, shortcuts, keyboard, keybind, hints","commands.common.expanded":"Expanded","commands.common.collapsed":"Collapsed","commands.common.visible":"Visible","commands.common.hidden":"Hidden","commands.common.enabled":"Enabled","commands.common.disabled":"Disabled","commands.thinkingBlocksDefault.label":"Thinking View: {state}","commands.thinkingBlocksDefault.description":"Collapse / Expand AI thinking sections when shown","commands.thinkingBlocksDefault.keywords":"thinking, reasoning, expand, collapse, default","commands.diffViewSplit.label":"Use Split Diff View","commands.diffViewSplit.description":"Display tool-call diffs side-by-side","commands.diffViewSplit.keywords":"diff, split, view","commands.diffViewUnified.label":"Use Unified Diff View","commands.diffViewUnified.description":"Display tool-call diffs inline","commands.diffViewUnified.keywords":"diff, unified, view","commands.toolOutputsDefault.label":"Tool Outputs Default · {state}","commands.toolOutputsDefault.description":"Toggle default expansion for tool outputs","commands.toolOutputsDefault.keywords":"tool, output, expand, collapse","commands.diagnosticsDefault.label":"Diagnostics Default · {state}","commands.diagnosticsDefault.description":"Toggle default expansion for diagnostics output","commands.diagnosticsDefault.keywords":"diagnostics, expand, collapse","commands.toolInputsVisibility.label":"Tool Inputs Visibility · {state}","commands.toolInputsVisibility.description":"Set default visibility for tool call input arguments","commands.toolInputsVisibility.keywords":"tool, inputs, arguments, visibility, hide, show, expand, collapse","commands.tokenUsageDisplay.label":"Token Usage Display · {state}","commands.tokenUsageDisplay.description":"Show or hide token and cost stats for assistant messages","commands.tokenUsageDisplay.keywords":"token, usage, cost, stats","commands.autoCleanupBlankSessions.label":"Auto-Cleanup Blank Sessions · {state}","commands.autoCleanupBlankSessions.description":"Automatically clean up blank sessions when creating new ones","commands.autoCleanupBlankSessions.keywords":"auto, cleanup, blank, sessions, toggle","commands.showHelp.label":"Show Help","commands.showHelp.description":"Display keyboard shortcuts and help","commands.showHelp.keywords":"shortcuts, help","commands.custom.argumentsPrompt.message":"Arguments for /{name}","commands.custom.argumentsPrompt.title":"Custom command","commands.custom.argumentsPrompt.inputLabel":"Arguments","commands.custom.argumentsPrompt.inputPlaceholder":"e.g. foo bar","commands.custom.argumentsPrompt.confirmLabel":"Run","commands.custom.argumentsPrompt.cancelLabel":"Cancel","commands.custom.argumentsPrompt.openFailed.message":"Failed to open arguments prompt.","commands.custom.argumentsPrompt.openFailed.title":"Command arguments","commands.custom.entries.descriptionFallback":"Custom command","commands.custom.sessionRequired.message":"Select a session before running a custom command.","commands.custom.sessionRequired.title":"Session required","commands.custom.runFailed.message":"Failed to run custom command. Check the console for details.","commands.custom.runFailed.title":"Command failed","unifiedPicker.loading.searching":"Searching...","unifiedPicker.loading.loadingWorkspace":"Loading workspace...","unifiedPicker.title.command":"Select Command","unifiedPicker.title.mention":"Select Agent or File","unifiedPicker.empty":"No results found","unifiedPicker.sections.commands":"COMMANDS","unifiedPicker.sections.agents":"AGENTS","unifiedPicker.sections.files":"FILES","unifiedPicker.sections.workspaceRoot":"WORKSPACE ROOT","unifiedPicker.badge.subagent":"subagent","unifiedPicker.footer.navigate":"navigate","unifiedPicker.footer.select":"select","unifiedPicker.footer.close":"close"},ce={"alertDialog.fallbackTitle.info":"Heads up","alertDialog.fallbackTitle.warning":"Please review","alertDialog.fallbackTitle.error":"Something went wrong","alertDialog.actions.confirm":"Confirm","alertDialog.actions.run":"Run","alertDialog.actions.ok":"OK","alertDialog.actions.cancel":"Cancel","alertDialog.prompt.inputLabel":"Input","backgroundProcessOutputDialog.title":"Background Output","backgroundProcessOutputDialog.actions.close":"Close","backgroundProcessOutputDialog.loading":"Loading output...","backgroundProcessOutputDialog.truncatedNotice":"Output truncated for display.","backgroundProcessOutputDialog.loadErrorFallback":"Failed to load output."},de={"directoryBrowser.defaultDescription":"Browse folders under the configured workspace root.","directoryBrowser.close":"Close","directoryBrowser.currentFolder":"Select folder or enter path","directoryBrowser.currentFolder.inputAriaLabel":"Folder path","directoryBrowser.currentFolder.inputPlaceholder":"Type or paste a folder path","directoryBrowser.openCurrent":"Open","directoryBrowser.selectCurrent":"Select Current","directoryBrowser.newFolder":"New Folder","directoryBrowser.creating":"Creating…","directoryBrowser.loadingFolders":"Loading folders…","directoryBrowser.noFolders":"No folders available.","directoryBrowser.upOneLevel":"Up one level","directoryBrowser.select":"Select","directoryBrowser.load.errorFallback":"Unable to load filesystem","directoryBrowser.createFolder.promptMessage":"Create a new folder in the current directory.","directoryBrowser.createFolder.title":"New Folder","directoryBrowser.createFolder.inputLabel":"Folder name","directoryBrowser.createFolder.inputPlaceholder":"e.g. my-new-project","directoryBrowser.createFolder.confirmLabel":"Create","directoryBrowser.createFolder.cancelLabel":"Cancel","directoryBrowser.createFolder.invalidNameMessage":"Please enter a single folder name.","directoryBrowser.createFolder.invalidNameDetail":"Folder names cannot include slashes, '..', or '~'.","directoryBrowser.createFolder.errorFallback":"Unable to create folder","filesystemBrowser.descriptionFallback":"Search for a path under the configured workspace root.","filesystemBrowser.rootLabel":"Root: {root}","filesystemBrowser.actions.close":"Close","filesystemBrowser.actions.retry":"Retry","filesystemBrowser.actions.select":"Select","filesystemBrowser.filterLabel":"Filter","filesystemBrowser.search.placeholder.directories":"Search for folders","filesystemBrowser.search.placeholder.files":"Search for files","filesystemBrowser.currentFolder.label":"Current folder","filesystemBrowser.currentFolder.selectCurrent":"Select Current","filesystemBrowser.loading.filesystem":"filesystem","filesystemBrowser.loading.workspaceRoot":"workspace root","filesystemBrowser.loading.loadingWithPath":"Loading {path}…","filesystemBrowser.empty.noEntries":"No entries found.","filesystemBrowser.navigation.upOneLevel":"Up one level","filesystemBrowser.hints.navigate":"Navigate","filesystemBrowser.hints.select":"Select","filesystemBrowser.hints.close":"Close","filesystemBrowser.errors.loadFilesystemFallback":"Unable to load filesystem","filesystemBrowser.errors.openDirectoryFallback":"Unable to open directory"},me={"folderSelection.language.ariaLabel":"Language","folderSelection.logoAlt":"CodeNomad logo","folderSelection.tagline":"Select a folder to start coding with AI","folderSelection.links.github":"CodeNomad GitHub","folderSelection.links.githubStars":"CodeNomad GitHub Stars","folderSelection.links.discord":"CodeNomad Discord","folderSelection.empty.title":"No Recent Folders","folderSelection.empty.description":"Browse for a folder to get started","folderSelection.recent.title":"Recent Folders","folderSelection.recent.subtitle.one":"{count} folder available","folderSelection.recent.subtitle.other":"{count} folders available","folderSelection.recent.remove":"Remove from recent","folderSelection.browse.title":"Browse for Folder","folderSelection.browse.subtitle":"Select any folder on your computer","folderSelection.browse.button":"Browse Folders","folderSelection.browse.buttonOpening":"Opening...","folderSelection.actions.title":"Open Folder or Connect Server","folderSelection.actions.subtitle":"Open local folder or connect to a CodeNomad server","folderSelection.actions.connectButton":"Connect CodeNomad Server","folderSelection.advancedSettings":"Advanced Settings","folderSelection.opencode":"OpenCode","folderSelection.hints.navigate":"Navigate","folderSelection.hints.select":"Select","folderSelection.hints.remove":"Remove","folderSelection.hints.browse":"Browse","folderSelection.loading.title":"Starting instance...","folderSelection.loading.subtitle":"Hang tight while we prepare your workspace.","folderSelection.drop.title":"Drop a folder to open it","folderSelection.drop.subtitle":"Start a new instance in the dropped folder.","folderSelection.drop.invalidTitle":"Couldn't open dropped item","folderSelection.drop.invalidMessage":"Drop a folder to start a new instance.","folderSelection.dialog.title":"Select Workspace","folderSelection.dialog.description":"Select workspace to start coding.","folderSelection.tabs.local":"Local Folders","folderSelection.tabs.servers":"Servers","folderSelection.servers.title":"Saved Servers","folderSelection.servers.subtitle":"Open a saved remote CodeNomad server in a new window","folderSelection.servers.count":"{count} Servers","folderSelection.servers.empty.title":"No Saved Servers","folderSelection.servers.empty.description":"Add a remote server to reconnect quickly from this device","folderSelection.servers.connectTitle":"Connect to Server","folderSelection.servers.connectSubtitle":"Save a remote CodeNomad server and open it in a new window","folderSelection.servers.connectButton":"Connect to Server","folderSelection.servers.remove":"Remove saved server","folderSelection.servers.skipTls":"Self-signed TLS","folderSelection.servers.errorTitle":"Remote Connection Failed","folderSelection.servers.dialog.title":"Connect to Server","folderSelection.servers.dialog.description":"Add a remote CodeNomad server and optionally open it right away.","folderSelection.servers.dialog.name":"Server name","folderSelection.servers.dialog.namePlaceholder":"Production Server","folderSelection.servers.dialog.url":"Server URL","folderSelection.servers.dialog.urlPlaceholder":"https://server.example.com","folderSelection.servers.dialog.skipTls":"Skip TLS verification for self-signed certificates.","folderSelection.servers.dialog.cancel":"Cancel","folderSelection.servers.dialog.save":"Save","folderSelection.servers.dialog.connect":"Connect","folderSelection.servers.dialog.connecting":"Connecting...","folderSelection.servers.dialog.errorRequired":"Server name and URL are required.","folderSelection.servers.dialog.errorConnect":"Could not connect to the remote server.","folderSelection.servers.certificateInstall.title":"Install Local Certificate","folderSelection.servers.certificateInstall.confirmMessage":"CodeNomad needs to install a local certificate to open self-signed HTTPS remote windows. This certificate is only used for local desktop proxy traffic on your machine. Your operating system may show a second certificate prompt after this.","folderSelection.servers.certificateInstall.confirmLabel":"Continue","folderSelection.servers.certificateInstall.cancelLabel":"Cancel","folderSelection.servers.certificateInstall.cancelled":"CodeNomad needs the local certificate to be trusted before it can open self-signed HTTPS remote windows.","folderSelection.sidecars.button":"Open SideCar"},pe={"instanceTabs.new.title":"New instance (Cmd/Ctrl+N)","instanceTabs.new.ariaLabel":"New instance","instanceTabs.remote.title":"Remote connect","instanceTabs.remote.ariaLabel":"Remote connect","instanceInfo.title":"Instance Information","instanceInfo.labels.folder":"Folder","instanceInfo.labels.project":"Project","instanceInfo.labels.versionControl":"Version Control","instanceInfo.labels.opencodeVersion":"OpenCode Version","instanceInfo.labels.binaryPath":"Binary Path","instanceInfo.labels.environmentVariables":"Environment Variables ({count})","instanceInfo.loading":"Loading...","instanceInfo.server.title":"Server","instanceInfo.server.port":"Port:","instanceInfo.server.pid":"PID:","instanceInfo.server.status":"Status:","instanceTab.status.permission":"Waiting on permission","instanceTab.status.compacting":"Compacting","instanceTab.status.working":"Working","instanceTab.status.idle":"Idle","instanceTab.status.ariaLabel":"Instance status: {status}","instanceTab.actions.close.ariaLabel":"Close instance","instanceShell.leftPanel.sessionsTitle":"Sessions","instanceShell.leftPanel.instanceInfo":"Instance Info","instanceShell.leftDrawer.pin":"Pin left drawer","instanceShell.leftDrawer.unpin":"Unpin left drawer","instanceShell.leftDrawer.toggle.pinned":"Left drawer pinned","instanceShell.leftDrawer.toggle.open":"Open left drawer","instanceShell.leftDrawer.toggle.close":"Close left drawer","instanceShell.rightDrawer.pin":"Pin right drawer","instanceShell.rightDrawer.unpin":"Unpin right drawer","instanceShell.rightDrawer.toggle.pinned":"Right drawer pinned","instanceShell.rightDrawer.toggle.open":"Open right drawer","instanceShell.rightDrawer.toggle.close":"Close right drawer","instanceShell.fullscreen.enter":"Full screen","instanceShell.fullscreen.exit":"Exit full screen","instanceShell.metrics.usedLabel":"Used","instanceShell.metrics.availableLabel":"Avail","instanceShell.commandPalette.openAriaLabel":"Open command palette","instanceShell.commandPalette.button":"Command Palette","instanceShell.chatSearch.openAriaLabel":"Search chat history","instanceShell.connection.ariaLabel":"Connection {status}","instanceShell.connection.connected":"Connected","instanceShell.connection.connecting":"Connecting...","instanceShell.connection.disconnected":"Disconnected","instanceShell.connection.unknown":"Unknown","instanceWelcome.shortcuts.newSession":"New Session","instanceWelcome.empty.title":"No Previous Sessions","instanceWelcome.empty.description":"Create a new session below to get started","instanceWelcome.loading.title":"Loading Sessions","instanceWelcome.loading.description":"Fetching your previous sessions...","instanceWelcome.resume.title":"Resume Session","instanceWelcome.resume.subtitle.one":"{count} session available","instanceWelcome.resume.subtitle.other":"{count} sessions available","instanceWelcome.session.untitled":"Untitled Session","instanceWelcome.new.title":"Start New Session","instanceWelcome.new.subtitle":"We’ll reuse your last agent/model automatically","instanceWelcome.new.createButton":"Create Session","instanceWelcome.overlay.close":"Close","instanceWelcome.actions.viewInstanceInfo":"View Instance Info","instanceWelcome.actions.renameTitle":"Rename session","instanceWelcome.actions.deleteTitle":"Delete session","instanceWelcome.hints.navigate":"Navigate","instanceWelcome.hints.jump":"Jump","instanceWelcome.hints.firstLast":"First/Last","instanceWelcome.hints.resume":"Resume","instanceWelcome.hints.delete":"Delete","instanceWelcome.toasts.renameError":"Unable to rename session","instanceDisconnected.title":"Instance Disconnected","instanceDisconnected.folderFallback":"this workspace","instanceDisconnected.reasonFallback":"The server stopped responding","instanceDisconnected.description":"{folder} can no longer be reached. Close the tab to continue working.","instanceDisconnected.details.title":"Details","instanceDisconnected.details.folderLabel":"Folder:","instanceDisconnected.actions.closeInstance":"Close Instance","instanceShell.empty.title":"No session selected","instanceShell.empty.description":"Select a session to view messages","instanceShell.rightPanel.title":"Status Panel","instanceShell.rightPanel.tabs.changes":"Session Changes","instanceShell.rightPanel.tabs.gitChanges":"Git Changes","instanceShell.rightPanel.tabs.files":"Files","instanceShell.rightPanel.tabs.status":"Status","instanceShell.rightPanel.tabs.ariaLabel":"Right panel tabs","instanceShell.rightPanel.actions.refresh":"Refresh","instanceShell.rightPanel.actions.save":"Save (Ctrl+S)","instanceShell.rightPanel.actions.saveConfirm.message":'Do you want to save changes to "{path}" before switching?',"instanceShell.rightPanel.actions.saveConfirm.confirmLabel":"Save","instanceShell.rightPanel.actions.saveConfirm.cancelLabel":"Discard Changes","instanceShell.rightPanel.actions.conflict.message":"File was modified by the agent. Overwrite agent's changes?","instanceShell.rightPanel.actions.conflict.confirmLabel":"Overwrite","instanceShell.rightPanel.actions.conflict.cancelLabel":"Cancel","instanceShell.rightPanel.actions.refreshDirty.message":"File has unsaved changes. Refresh will discard your edits. Continue?","instanceShell.rightPanel.actions.refreshDirty.confirmLabel":"Refresh","instanceShell.rightPanel.actions.refreshDirty.cancelLabel":"Cancel","instanceShell.rightPanel.toast.saveSuccess":"File saved successfully","instanceShell.rightPanel.toast.saveError":"Failed to save file","instanceShell.rightPanel.sections.yoloMode":"Yolo Mode","instanceShell.rightPanel.sections.yoloMode.tooltip":"Automatically approves permission requests for the current session. Use it only when you trust the tools being run.","instanceShell.rightPanel.sections.sessionChanges":"Session Changes","instanceShell.rightPanel.sections.sessionChanges.tooltip":"Files modified in the current session. Shows additions and deletions for each file.","instanceShell.rightPanel.sections.plan":"Plan","instanceShell.rightPanel.sections.plan.tooltip":"The agent's roadmap for this session. Tracks tasks, subtasks, and their completion status.","instanceShell.rightPanel.sections.backgroundProcesses":"Background Shells","instanceShell.rightPanel.sections.backgroundProcesses.tooltip":"Long-running processes started by the agent. You can monitor their output, stop, or terminate them.","instanceShell.rightPanel.sections.mcp":"MCP Servers","instanceShell.rightPanel.sections.mcp.tooltip":"Model Context Protocol servers that extend the agent's capabilities with external tools and services.","instanceShell.rightPanel.sections.lsp":"LSP Servers","instanceShell.rightPanel.sections.lsp.tooltip":"Language Server Protocol servers providing code intelligence, diagnostics, and language-specific features.","instanceShell.rightPanel.sections.plugins":"Plugins","instanceShell.rightPanel.sections.plugins.tooltip":"Plugins that customize the UI and server behavior, adding features beyond MCP and LSP.","instanceShell.sessionChanges.noSessionSelected":"Select a session to view changes.","instanceShell.sessionChanges.loading":"Fetching session changes...","instanceShell.sessionChanges.empty":"No session changes yet.","instanceShell.sessionChanges.filesChanged":"{count} files changed","instanceShell.sessionChanges.actions.show":"Show changes","instanceShell.gitChanges.noSessionSelected":"Select a session to view git changes.","instanceShell.gitChanges.loading":"Loading git changes...","instanceShell.gitChanges.empty":"No git changes yet.","instanceShell.gitChanges.deleted":"Deleted","instanceShell.gitChanges.binaryViewer":"Binary file cannot be displayed","instanceShell.gitChanges.sections.staged":"Staged Changes","instanceShell.gitChanges.sections.unstaged":"Changes","instanceShell.gitChanges.actions.insertContext":"Add to prompt","instanceShell.gitChanges.actions.stage":"Stage file","instanceShell.gitChanges.actions.unstage":"Unstage file","instanceShell.gitChanges.commit.placeholder":"Enter commit message","instanceShell.gitChanges.commit.submit":"Commit","instanceShell.gitChanges.commit.submitting":"Committing...","instanceShell.gitChanges.commit.success":"Commit created successfully","instanceShell.gitChanges.commit.error":"Failed to create commit","instanceShell.filesShell.fileListTitle":"File list","instanceShell.filesShell.mobileSelectorLabel":"Select file","instanceShell.filesShell.mobileSelectorEmpty":"Select a file","instanceShell.filesShell.viewerTitle":"Change viewer","instanceShell.filesShell.viewerPlaceholder":"Detailed change rendering will be added in the next step.","instanceShell.filesShell.viewerEmpty":"No file selected.","instanceShell.filesShell.listEmpty":"No files in this folder.","instanceShell.filesShell.hideFiles":"Hide files","instanceShell.filesShell.showFiles":"Show files","instanceShell.filesShell.search.placeholder":"Filter files in this folder","instanceShell.filesShell.search.ariaLabel":"Filter files in this folder","instanceShell.filesShell.search.empty":"No matching files.","instanceShell.filesShell.actions.copyPath":"Copy path","instanceShell.filesShell.toast.copyPathSuccess":"Copied path","instanceShell.filesShell.toast.copyPathError":"Failed to copy path","instanceShell.filesShell.previewMarkdown":"Preview Markdown","instanceShell.filesShell.showSource":"Show source","instanceShell.filesShell.enableWordWrap":"Enable word wrap","instanceShell.filesShell.disableWordWrap":"Disable word wrap","instanceShell.diff.hideUnchanged":"Hide unchanged regions","instanceShell.diff.showFull":"Show full file","instanceShell.diff.switchToSplit":"Switch to split view","instanceShell.diff.switchToUnified":"Switch to unified view","instanceShell.diff.enableWordWrap":"Enable word wrap","instanceShell.diff.disableWordWrap":"Disable word wrap","instanceShell.worktree.create":"+ Create worktree","instanceShell.worktree.delete.error.title":"Delete failed","instanceShell.worktree.delete.error.fallback":"Failed to delete worktree","instanceShell.worktree.delete.error.causeLabel":"Likely cause:","instanceShell.worktree.delete.error.nextStepLabel":"Suggested next step:","instanceShell.worktree.delete.error.summary.localChanges":"Git refused to delete this worktree because it has modified or untracked files.","instanceShell.worktree.delete.error.summary.inUse":"CodeNomad could not delete this worktree because something is still using files in the directory.","instanceShell.worktree.delete.error.summary.notFound":"CodeNomad could not delete this worktree because the directory or worktree record was not found.","instanceShell.worktree.delete.error.summary.permissionDenied":"CodeNomad could not delete this worktree because access to the directory was denied.","instanceShell.worktree.delete.error.summary.unknown":"CodeNomad could not delete this worktree.","instanceShell.worktree.delete.error.cause.localChanges":"Local changes","instanceShell.worktree.delete.error.cause.inUse":"Another process is using this worktree","instanceShell.worktree.delete.error.cause.notFound":"The worktree directory or record is missing","instanceShell.worktree.delete.error.cause.permissionDenied":"Insufficient filesystem permissions","instanceShell.worktree.delete.error.cause.unknown":"The backend returned an unclassified delete error","instanceShell.worktree.delete.error.nextStep.localChanges":"Enable Force delete if you want to discard local changes, or clean the worktree and try again.","instanceShell.worktree.delete.error.nextStep.inUse":"Close terminals, editors, watchers, or background processes using this worktree and try again.","instanceShell.worktree.delete.error.nextStep.notFound":"Refresh worktrees and try again. If it still fails, inspect the worktree path on disk.","instanceShell.worktree.delete.error.nextStep.permissionDenied":"Check filesystem permissions and close applications that may be locking this directory, then try again.","instanceShell.worktree.delete.error.nextStep.unknown":"Review the raw error below for details, then retry after addressing the reported problem.","instanceShell.worktree.delete.error.copyRaw":"Copy error","instanceShell.worktree.delete.error.copySanitized":"Copy sanitized","instanceShell.worktree.delete.error.copySuccess":"Copied delete error","instanceShell.worktree.delete.error.copySanitizedSuccess":"Copied sanitized delete error","instanceShell.worktree.delete.error.copyFailure":"Failed to copy delete error","instanceShell.plan.noSessionSelected":"Select a session to view plan.","instanceShell.plan.empty":"Nothing planned yet.","instanceShell.yoloMode.noSessionSelected":"Select a session to configure Yolo mode.","instanceShell.yoloMode.title":"Yolo mode","instanceShell.yoloMode.description":"Automatically approve permission requests for this session. Disabled by default.","instanceShell.yoloMode.badge":"Yolo mode","instanceShell.yoloMode.badgeAriaLabel":"Yolo mode enabled","instanceShell.backgroundProcesses.empty":"No background processes.","instanceShell.backgroundProcesses.status":"Status: {status}","instanceShell.backgroundProcesses.output":"Output: {sizeKb}KB","instanceShell.backgroundProcesses.notify.enabled":"Completion notification enabled","instanceShell.backgroundProcesses.notify.disabled":"Completion notification disabled","instanceShell.backgroundProcesses.actions.output":"Output","instanceShell.backgroundProcesses.actions.stop":"Stop","instanceShell.backgroundProcesses.actions.terminate":"Terminate","versionPill.appWithVersion":"App {version}","versionPill.ui":"UI","versionPill.uiWithVersion":"UI {version}","versionPill.source":" ({source})","opencodeBinarySelector.title":"OpenCode Binary","opencodeBinarySelector.subtitle":"Choose which executable OpenCode should run","opencodeBinarySelector.customPath.placeholder":"Enter path to opencode binary…","opencodeBinarySelector.actions.add":"Add","opencodeBinarySelector.actions.browse":"Browse for Binary…","opencodeBinarySelector.actions.removeTitle":"Remove binary","opencodeBinarySelector.badge.systemPath":"Use binary from system PATH","opencodeBinarySelector.status.checkingVersions":"Checking versions…","opencodeBinarySelector.status.checking":"Checking…","opencodeBinarySelector.dialog.title":"Select OpenCode Binary","opencodeBinarySelector.dialog.description":"Browse files exposed by the CLI server.","opencodeBinarySelector.validation.invalidBinary":"Invalid OpenCode binary","opencodeBinarySelector.validation.alreadyValidating":"Already validating","opencodeBinarySelector.display.systemPath":"{name} (system PATH)","opencodeBinarySelector.versionLabel":"v{version}"},ue={"loadingScreen.logoAlt":"CodeNomad logo","loadingScreen.status.issue":"Encountered an issue","loadingScreen.actions.showAnother":"Show another","loadingScreen.errors.missingRoot":"Loading root element not found","loadingScreen.phrases.neurons":"Warming up the AI neurons…","loadingScreen.phrases.daydreaming":"Convincing the AI to stop daydreaming…","loadingScreen.phrases.goggles":"Polishing the AI’s code goggles…","loadingScreen.phrases.reorganizingFiles":"Asking the AI to stop reorganizing your files…","loadingScreen.phrases.coffee":"Feeding the AI additional coffee…","loadingScreen.phrases.nodeModules":"Teaching the AI not to delete node_modules (again)…","loadingScreen.phrases.actNatural":"Telling the AI to act natural before you arrive…","loadingScreen.phrases.rewritingHistory":"Asking the AI to please stop rewriting history…","loadingScreen.phrases.stretch":"Letting the AI stretch before its coding sprint…","loadingScreen.phrases.keyboardControl":"Persuading the AI to give you keyboard control…"},ge={"logsView.title":"Server Logs","logsView.actions.show":"Show server logs","logsView.actions.hide":"Hide server logs","logsView.envVars.title":"Environment Variables ({count})","logsView.paused.title":"Server logs are paused","logsView.paused.description":"Enable streaming to watch your OpenCode server activity.","logsView.empty.waiting":"Waiting for server output...","logsView.scrollToBottom":"Scroll to bottom","infoView.logs.title":"Server Logs","infoView.logs.actions.show":"Show server logs","infoView.logs.actions.hide":"Hide server logs","infoView.logs.paused.title":"Server logs are paused","infoView.logs.paused.description":"Enable streaming to watch your OpenCode server activity.","infoView.logs.empty.waiting":"Waiting for server output...","infoView.logs.scrollToBottom":"Scroll to bottom","infoView.dispose.actions.dispose":"Dispose instance","infoView.dispose.actions.disposing":"Disposing...","infoView.dispose.confirm.title":"Dispose instance?","infoView.dispose.confirm.message":"This clears cached per-project state for this directory and reloads the instance.","infoView.dispose.confirm.confirmLabel":"Dispose","infoView.dispose.confirm.cancelLabel":"Cancel","infoView.dispose.toast.success":"Instance disposed. Reloading...","infoView.dispose.toast.error":"Failed to dispose instance."},he={"markdown.codeBlock.copy.label":"Copy","markdown.codeBlock.copy.copied":"Copied!","markdown.codeBlock.copy.failed":"Failed","markdown.copy":"Copy"},fe={"messageListHeader.sidebar.openSessionListAriaLabel":"Open session list","messageListHeader.metrics.usedLabel":"Used","messageListHeader.metrics.availableLabel":"Avail","messageListHeader.commandPalette.ariaLabel":"Open command palette","messageListHeader.commandPalette.button":"Command Palette","messageListHeader.connection.connected":"Connected","messageListHeader.connection.connecting":"Connecting...","messageListHeader.connection.disconnected":"Disconnected","messageSection.empty.logoAlt":"CodeNomad logo","messageSection.empty.brandTitle":"CodeNomad","messageSection.empty.title":"Start a conversation","messageSection.empty.description":"Type a message below or open the Command Palette:","messageSection.empty.tips.commandPalette":"Command Palette","messageSection.empty.tips.askAboutCodebase":"Ask about your codebase","messageSection.empty.tips.attachFilesPrefix":"Attach files with","messageSection.loading.messages":"Loading messages...","messageSection.scroll.toFirstAriaLabel":"Scroll to first message","messageSection.scroll.toLatestAriaLabel":"Scroll to latest message","messageSection.scroll.enableHoldAriaLabel":"Enable hold for long assistant replies","messageSection.scroll.disableHoldAriaLabel":"Disable hold for long assistant replies","messageSection.quote.addAsQuote":"Add as quote","messageSection.quote.addAsCode":"Add as code","messageSection.quote.copy":"Copy","messageSection.quote.copied":"Copied!","messageSection.quote.copyFailed":"Copy failed","messageSection.search.ariaLabel":"Search chat history","messageSection.search.placeholder":"Search current chat...","messageSection.search.count.empty":"Search","messageSection.search.count.minChars":"{count}+ chars","messageSection.search.count.searching":"Searching...","messageSection.search.count.none":"No matches","messageSection.search.count.matches":"{current} / {total}","messageSection.search.previousAriaLabel":"Previous match","messageSection.search.nextAriaLabel":"Next match","messageSection.search.closeAriaLabel":"Close search","messageSection.search.searching":"Searching...","messageSection.search.noVisibleMatches":"No visible matches","messageTimeline.ariaLabel":"Message timeline","messageTimeline.segment.user.label":"You","messageTimeline.segment.assistant.label":"Asst","messageTimeline.segment.compaction.label":"Compaction","messageTimeline.tool.fallbackLabel":"Tool Call","messageTimeline.tooltip.userFallback":"User message","messageTimeline.tooltip.assistantFallback":"Assistant response","messageTimeline.tooltip.compaction.auto":"Auto Compaction","messageTimeline.tooltip.compaction.manual":"User Compaction","messageTimeline.text.filePrefix":"[File] {filename}","messageTimeline.text.attachment":"Attachment","messageBlock.tool.header":"Tool Call","messageBlock.tool.unknown":"unknown","messageBlock.tool.goToSession.label":"Go to Session","messageBlock.tool.goToSession.title":"Go to session","messageBlock.tool.goToSession.unavailableTitle":"Session not available yet","messageBlock.tool.deletePart.label":"Delete Part","messageBlock.tool.deletePart.deleting":"Deleting...","messageBlock.tool.deletePart.title":"Delete this tool call output","messageBlock.tool.deletePart.failed.title":"Delete failed","messageBlock.tool.deletePart.failed.message":"Failed to delete tool call output","messageBlock.compaction.ariaLabel":"Session compaction","messageBlock.compaction.autoLabel":"Session auto-compacted","messageBlock.compaction.manualLabel":"Session compacted by you","messageBlock.usage.input":"Input","messageBlock.usage.output":"Output","messageBlock.usage.reasoning":"Reasoning","messageBlock.usage.cacheRead":"Cache Read","messageBlock.usage.cacheWrite":"Cache Write","messageBlock.usage.cost":"Cost","messageBlock.step.agentLabel":"Agent: {agent}","messageBlock.step.modelLabel":"Model: {model}","messageBlock.reasoning.thinkingLabel":"Thinking","messageBlock.reasoning.expandAriaLabel":"Expand thinking","messageBlock.reasoning.collapseAriaLabel":"Collapse thinking","messageBlock.reasoning.indicator.hide":"Hide","messageBlock.reasoning.indicator.view":"View","messageBlock.reasoning.detailsAriaLabel":"Reasoning details","codeBlockInline.actions.copy":"Copy","codeBlockInline.actions.copied":"Copied!","messageItem.speaker.you":"You","messageItem.speaker.assistant":"Assistant","messageItem.actions.revert":"Revert","messageItem.actions.revertTitle":"Undo changes up to here (deletes messages)","messageItem.actions.fork":"Fork","messageItem.actions.forkTitle":"Fork from this message","messageItem.actions.copy":"Copy","messageItem.actions.copyTitle":"Copy message","messageItem.actions.copied":"Copied!","messageItem.actions.speak":"Speak message","messageItem.actions.generatingSpeech":"Generating speech","messageItem.actions.stopSpeech":"Stop playback","messageItem.actions.speak.error.title":"Speech playback failed","messageItem.actions.speak.error.unsupported":"Speech playback is not supported in this browser.","messageItem.actions.speak.error.unavailable":"Speech playback is unavailable until speech settings are configured.","messageItem.actions.speak.error.generate":"Unable to generate speech for this message.","messageItem.actions.deleteMessage":"Delete message (doesn't undo changes)","messageItem.actions.deleteMessagesUpTo":"Delete messages up to here (doesn't undo changes)","messageItem.actions.deletingMessage":"Deleting...","messageItem.actions.deleteMessageFailedTitle":"Delete failed","messageItem.actions.deleteMessageFailedMessage":"Failed to delete message","messageItem.selection.checkboxAriaLabel":"Select message for deletion","messageSection.bulkDelete.toolbarAriaLabel":"Selected items ({count})","messageSection.bulkDelete.deleteSelectedTitle":"Delete selected items","messageSection.bulkDelete.selectAllTitle":"Select all messages","messageSection.bulkDelete.moreOptionsTitle":"More options","messageSection.bulkDelete.selectionModeLabel":"Selection","messageSection.bulkDelete.selectionModeAll":"All","messageSection.bulkDelete.selectionModeTools":"Tools only","messageSection.bulkDelete.selectionHint.toggle":"Select item","messageSection.bulkDelete.selectionHint.range":"Select range","messageSection.bulkDelete.selectionHint.clear":"Clear Selection","messageSection.bulkDelete.cancelTitle":"Cancel selection","messageSection.bulkDelete.failedTitle":"Delete failed","messageSection.bulkDelete.failedMessage":"Failed to delete selected items","messageItem.status.queued":"QUEUED","messageItem.status.generating":"Generating...","messageItem.status.sending":"Sending...","messageItem.status.failedToSend":"Message failed to send","messagePart.actions.delete":"Delete Part","messagePart.actions.deleting":"Deleting...","messagePart.actions.deleteTitle":"Delete this item","messagePart.actions.deleteFailedTitle":"Delete failed","messagePart.actions.deleteFailedMessage":"Failed to delete item","messageItem.attachment.defaultName":"attachment","messageItem.attachment.downloadAriaLabel":"Download {name}","messageItem.agentMeta.agentLabel":"Agent: {agent}","messageItem.agentMeta.modelLabel":"Model: {model}","messageItem.errors.authenticationFallback":"Authentication error","messageItem.errors.outputLengthExceeded":"Message output length exceeded","messageItem.errors.requestAborted":"Request was aborted","messageItem.errors.unknownFallback":"Unknown error occurred","attachmentChip.removeAriaLabel":"Remove attachment","expandButton.toggleAriaLabel":"Toggle chat input height","promptInput.placeholder.shell":"Run a shell command (Esc to exit)...","promptInput.placeholder.default":"Type your message, @file, @agent, or paste images and text...","promptInput.hints.shell.exit":"to exit shell mode","promptInput.hints.shell.enable":"Shell mode","promptInput.hints.commands":"Commands","promptInput.history.previousAriaLabel":"Previous prompt","promptInput.history.nextAriaLabel":"Next prompt","promptInput.overlay.newLine":"New line","promptInput.overlay.send":"Send","promptInput.overlay.filesAgents":"Files/agents","promptInput.overlay.history":"History","promptInput.overlay.attachments":"• {count} file(s) attached","promptInput.overlay.shellModeActive":"Shell mode active","promptInput.overlay.press":"Press","promptInput.overlay.againToAbort":"again to abort session","promptInput.stopSession.ariaLabel":"Stop session","promptInput.stopSession.title":"Stop session","promptInput.clear.ariaLabel":"Clear prompt text","promptInput.clear.title":"Clear prompt text","promptInput.send.ariaLabel":"Send message","promptInput.send.errorFallback":"Failed to send message","promptInput.send.errorTitle":"Send failed","promptInput.conversationMode.enable.title":"Enable conversation mode","promptInput.conversationMode.disable.title":"Disable conversation mode","promptInput.conversationMode.error.title":"Conversation playback failed","promptInput.conversationMode.error.message":"Unable to continue speaking assistant replies.","promptInput.voiceInput.start.title":"Start voice input","promptInput.voiceInput.stop.title":"Stop recording and transcribe","promptInput.voiceInput.transcribing.title":"Transcribing audio","promptInput.voiceInput.error.title":"Voice input failed","promptInput.voiceInput.error.permission":"Microphone access is required to record voice input.","promptInput.voiceInput.error.permissionDenied":"Microphone access was denied by macOS.","promptInput.voiceInput.error.unsupported":"Voice input is not supported in this browser.","promptInput.voiceInput.error.transcribe":"Unable to transcribe the recorded audio."},be={"remoteAccess.eyebrow":"Remote handover","remoteAccess.title":"Connect to CodeNomad remotely","remoteAccess.subtitle":"Use the addresses below to open CodeNomad from another device.","remoteAccess.close":"Close remote access","remoteAccess.refresh":"Refresh","remoteAccess.sections.listeningMode.label":"Listening mode","remoteAccess.sections.listeningMode.help":"Allow or limit remote handovers by binding to all interfaces or just localhost.","remoteAccess.toggle.on":"On","remoteAccess.toggle.off":"Off","remoteAccess.toggle.title":"Allow connections from other IPs","remoteAccess.toggle.caption.all":"Binding to 0.0.0.0","remoteAccess.toggle.caption.local":"Binding to 127.0.0.1","remoteAccess.toggle.note":"Changing this requires a restart and temporarily stops all active instances. Share the addresses below once the server restarts.","remoteAccess.listeningMode.restartConfirm.message":"Restart to apply listening mode? This will stop all running instances.","remoteAccess.listeningMode.restartConfirm.title.all":"Open to other devices","remoteAccess.listeningMode.restartConfirm.title.local":"Limit to this device","remoteAccess.listeningMode.restartConfirm.confirmLabel":"Restart now","remoteAccess.listeningMode.restartConfirm.cancelLabel":"Cancel","remoteAccess.restart.errorManual":"Unable to restart automatically. Please restart the app to apply the change.","remoteAccess.sections.serverPassword.label":"Server password","remoteAccess.sections.serverPassword.help":"Remote handovers require a password. Set a memorable one to enable logins from other devices.","remoteAccess.authStatus.unavailable":"Authentication status unavailable.","remoteAccess.username":"Username: {username}","remoteAccess.password.status.set":"A password is set for remote access.","remoteAccess.password.status.unset":"No memorable password is set yet. Set one to allow remote handover logins.","remoteAccess.password.actions.cancel":"Cancel","remoteAccess.password.actions.change":"Change password","remoteAccess.password.actions.set":"Set password","remoteAccess.password.form.newPassword":"New password","remoteAccess.password.form.confirmPassword":"Confirm password","remoteAccess.password.form.placeholder":"At least 8 characters","remoteAccess.password.error.tooShort":"Password must be at least 8 characters.","remoteAccess.password.error.mismatch":"Passwords do not match.","remoteAccess.password.save.saving":"Saving…","remoteAccess.password.save.label":"Save password","remoteAccess.sections.addresses.label":"Reachable addresses","remoteAccess.sections.addresses.help":"Launch or scan from another machine to hand over control.","remoteAccess.addresses.loading":"Loading addresses…","remoteAccess.addresses.none":"No addresses available yet.","remoteAccess.addresses.actions.showOther":"Show {count} other addresses","remoteAccess.addresses.actions.hideOther":"Hide other addresses","remoteAccess.address.scope.network":"Network","remoteAccess.address.scope.loopback":"Loopback","remoteAccess.address.scope.internal":"Internal","remoteAccess.address.open":"Open","remoteAccess.address.showQr":"Show QR","remoteAccess.address.hideQr":"Hide QR","remoteAccess.address.qrAlt":"QR for {url}"},Se={"sessionPicker.title":"OpenCode • {folder}","sessionPicker.empty.noPrevious":"No previous sessions","sessionPicker.resume.title":"Resume a session ({count}):","sessionPicker.session.untitled":"Untitled","sessionPicker.divider.or":"or","sessionPicker.new.title":"Start new session:","sessionPicker.agents.loading":"Loading agents...","sessionPicker.actions.creating":"Creating...","sessionPicker.actions.createSession":"Create Session","sessionPicker.actions.cancel":"Cancel","sessionList.header.title":"Sessions","sessionList.session.untitled":"Untitled","sessionList.status.working":"Working","sessionList.status.compacting":"Compacting","sessionList.status.idle":"Idle","sessionList.status.retrying":"Retrying","sessionList.status.retryingIn":"Retrying in {seconds}s","sessionList.status.retryTooltip":"{message} (Attempt {attempt})","sessionList.status.retryToast":"{countdown}: {message} (Attempt {attempt})","sessionList.status.needsPermission":"Needs Permission","sessionList.status.needsInput":"Needs Input","sessionList.expand.collapseAriaLabel":"Collapse session","sessionList.expand.expandAriaLabel":"Expand session","sessionList.expand.collapseTitle":"Collapse","sessionList.expand.expandTitle":"Expand","sessionList.actions.newSession.ariaLabel":"New session","sessionList.actions.newSession.title":"New session","sessionList.actions.copyId.ariaLabel":"Copy session ID","sessionList.actions.copyId.title":"Copy session ID","sessionList.actions.reload.ariaLabel":"Reload session","sessionList.actions.reload.title":"Reload session","sessionList.actions.rename.ariaLabel":"Rename session","sessionList.actions.rename.title":"Rename session","sessionList.actions.delete.ariaLabel":"Delete session","sessionList.actions.delete.title":"Delete session","sessionList.copyId.success":"Session ID copied","sessionList.copyId.error":"Unable to copy session ID","sessionList.reload.error":"Unable to reload session","sessionList.delete.error":"Unable to delete session","sessionList.delete.title":"Delete session","sessionList.delete.confirmMessage":'Delete "{label}"? This cannot be undone.',"sessionList.delete.confirmLabel":"Delete","sessionList.delete.cancelLabel":"Cancel","sessionList.rename.error":"Unable to rename session","sessionList.filter.placeholder":"Search sessions…","sessionList.filter.ariaLabel":"Search sessions","sessionList.selection.selectAllLabel":"Select all","sessionList.selection.selectAllAriaLabel":"Select all sessions","sessionList.selection.clearLabel":"Clear","sessionList.selection.clearAriaLabel":"Clear selection","sessionList.selection.checkboxAriaLabel":"Select session","sessionList.bulkDelete.button":"Delete {count}","sessionList.bulkDelete.ariaLabel":"Delete {count} selected sessions","sessionList.bulkDelete.title":"Delete sessions","sessionList.bulkDelete.confirmMessage":"Delete {count} selected sessions? This cannot be undone.","sessionList.bulkDelete.confirmLabel":"Delete","sessionList.bulkDelete.cancelLabel":"Cancel","sessionList.bulkDelete.error":"Unable to delete {count} sessions","sessionRenameDialog.title":"Rename Session","sessionRenameDialog.description.withLabel":'Update the title for "{label}".',"sessionRenameDialog.description.default":"Set a new title for this session.","sessionRenameDialog.input.label":"Session name","sessionRenameDialog.input.placeholder":"Enter a session name","sessionRenameDialog.actions.cancel":"Cancel","sessionRenameDialog.actions.rename":"Rename","sessionRenameDialog.actions.renaming":"Renaming…","sessionView.fallback.sessionNotFound":"Session not found","sessionView.alerts.abortFailed.message":"Failed to stop session","sessionView.alerts.abortFailed.title":"Stop failed","sessionView.alerts.revertFailed.message":"Failed to revert to message","sessionView.alerts.revertFailed.title":"Revert failed","sessionView.alerts.deleteUpToFailed.message":"Failed to delete messages","sessionView.alerts.deleteUpToFailed.title":"Delete failed","sessionView.alerts.forkFailed.message":"Failed to fork session","sessionView.alerts.forkFailed.title":"Fork failed","sessionView.attachments.expandPastedTextAriaLabel":"Expand pasted text","sessionView.attachments.insertPastedTextTitle":"Insert pasted text","sessionView.attachments.removeAriaLabel":"Remove attachment","sessionEvents.sessionCompactedToast":"Session {label} was compacted","sessionEvents.sessionError.unknown":"Unknown error","sessionEvents.sessionError.title":"Session error","sessionEvents.sessionError.message":"Error: {message}","sessionState.cleanup.deepConfirm.message":"This cleanup may be slow, and may delete sessions you didn't intend to delete. Are you sure?","sessionState.cleanup.deepConfirm.title":"Deep Clean Sessions","sessionState.cleanup.deepConfirm.detail":"Deep Clean Sessions will delete all sessions that have no messages, remove any finished sub-agent sessions, and clear out any unused forks of a session.","sessionState.cleanup.deepConfirm.confirmLabel":"Continue","sessionState.cleanup.deepConfirm.cancelLabel":"Cancel","sessionState.cleanup.toast.one":"Cleaned up {count} blank session","sessionState.cleanup.toast.other":"Cleaned up {count} blank sessions"},we={"instanceServiceStatus.sections.lsp":"LSP Servers","instanceServiceStatus.sections.mcp":"MCP Servers","instanceServiceStatus.sections.plugins":"Plugins","instanceServiceStatus.lsp.loading":"Loading LSP servers...","instanceServiceStatus.lsp.empty":"No LSP servers detected.","instanceServiceStatus.lsp.status.connected":"Connected","instanceServiceStatus.lsp.status.error":"Error","instanceServiceStatus.mcp.loading":"Loading MCP servers...","instanceServiceStatus.mcp.empty":"No MCP servers detected.","instanceServiceStatus.mcp.toggleAriaLabel":"Toggle {name} MCP server","instanceServiceStatus.plugins.loading":"Loading plugins...","instanceServiceStatus.plugins.empty":"No plugins configured.","permissionBanner.pendingRequests.one":"{count} pending request","permissionBanner.pendingRequests.other":"{count} pending requests","permissionBanner.detail.permission.one":"{count} permission","permissionBanner.detail.permission.other":"{count} permissions","permissionBanner.detail.question.one":"{count} question","permissionBanner.detail.question.other":"{count} questions","permissionBanner.detail.wrapper":" ({detail})","agentSelector.placeholder":"Select agent...","agentSelector.badge.subagent":"subagent","agentSelector.none":"None","agentSelector.trigger.primary":"Agent: {agent}","modelSelector.placeholder.search":"Search models...","modelSelector.none":"None","modelSelector.trigger.primary":"Model: {model}","modelSelector.favoritesOnly.toggle.ariaLabel":"Toggle favorites only","modelSelector.favoritesOnly.showAll":"Show all models","modelSelector.favorite.add":"Add to favorites","modelSelector.favorite.remove":"Remove from favorites","thinkingSelector.variant.default":"Default","thinkingSelector.label":"Thinking: {variant}","envEditor.title":"Environment Variables","envEditor.count.one":"({count} variable)","envEditor.count.other":"({count} variables)","envEditor.fields.name.placeholder":"Variable name","envEditor.fields.name.readOnlyTitle":"Variable name (read-only)","envEditor.fields.value.placeholder":"Variable value","envEditor.actions.remove.title":"Remove variable","envEditor.actions.add.title":"Add variable","envEditor.empty":"No environment variables configured. Add variables above to customize the OpenCode environment.","envEditor.help":"These variables will be available in the OpenCode environment when starting instances.","contextUsagePanel.headings.tokens":"Tokens","contextUsagePanel.headings.context":"Context","contextUsagePanel.labels.input":"Input","contextUsagePanel.labels.output":"Output","contextUsagePanel.labels.cost":"Cost","contextUsagePanel.labels.used":"Used","contextUsagePanel.labels.available":"Avail","contextUsagePanel.unavailable":"--","settings.title":"Settings","settings.navigationAriaLabel":"Settings sections","settings.close":"Close settings","settings.content.eyebrow":"Workspace preferences","settings.open.title":"Open settings","settings.open.ariaLabel":"Open settings","settings.nav.appearance":"Appearance","settings.nav.notifications":"Notifications","settings.nav.remote":"Remote Access","settings.nav.speech":"Speech","settings.nav.opencode":"OpenCode","settings.scope.device":"This device","settings.scope.server":"Server setting","settings.common.enabled":"Enabled","settings.common.disabled":"Disabled","settings.section.appearance.title":"Appearance","settings.section.appearance.subtitle":"Adjust how the app looks on this device.","settings.appearance.theme.title":"Theme","settings.appearance.theme.subtitle":"Choose the color mode used throughout the app.","settings.appearance.theme.option.system":"Match your operating system setting","settings.appearance.theme.option.light":"Use the light appearance","settings.appearance.theme.option.dark":"Use the dark appearance","settings.section.notifications.title":"Notifications","settings.section.notifications.subtitle":"Control OS-level notifications for session activity.","settings.notifications.permission.granted":"Granted","settings.notifications.permission.denied":"Denied","settings.notifications.permission.default":"Not granted","settings.notifications.permission.unsupported":"Unsupported","settings.notifications.messages.unsupportedEnvironment":"OS notifications are not supported in this environment.","settings.notifications.messages.permissionDenied":"Notification permission denied. Enable notifications in your system or browser settings.","settings.notifications.messages.permissionNotGranted":"Notification permission not granted.","settings.notifications.messages.unsupportedGeneral":"Notifications are not supported in this environment.","settings.notifications.messages.permissionGranted":"Permission granted. You can now enable notifications.","settings.notifications.messages.permissionRequestDenied":"Permission denied. You may need to enable notifications in your system or browser settings.","settings.notifications.sessionStatus.title":"Session status notifications","settings.notifications.sessionStatus.subtitle":"Receive alerts when sessions need your attention.","settings.notifications.enable.title":"Enable notifications","settings.notifications.enable.permission":"Permission: {permission}","settings.notifications.requestPermission.title":"Request permission","settings.notifications.requestPermission.subtitle":"Allow the app to send notifications on this device.","settings.notifications.requestPermission.action":"Request","settings.notifications.allowVisible.title":"Notify when the app is focused","settings.notifications.allowVisible.subtitle":"Keep alerts enabled even while this window is visible.","settings.notifications.unsupportedNote":"Notifications are not supported in this environment. The notifications control stays disabled.","settings.notifications.events.title":"Notify me when","settings.notifications.events.subtitle":"Choose which session events should send alerts.","settings.notifications.events.needsInput":"Session needs input","settings.notifications.events.idle":"Session becomes idle","settings.notifications.status.enabled":"Notifications enabled","settings.notifications.status.disabled":"Notifications disabled","settings.notifications.status.unsupported":"Notifications unsupported","settings.section.remote.title":"Remote Access","settings.section.remote.subtitle":"Review how this server is exposed on your network and secure access credentials.","settings.section.opencode.title":"OpenCode","settings.section.opencode.subtitle":"Choose the OpenCode binary and environment used for new instances.","settings.opencode.runtime.title":"Runtime","settings.opencode.runtime.subtitle":"Configure which OpenCode binary new instances launch with.","settings.opencode.logLevel.title":"OpenCode Log Level","settings.opencode.logLevel.subtitle":"Control the log verbosity used when launching new OpenCode instances.","settings.opencode.logLevel.selector.title":"Default log level","settings.opencode.logLevel.selector.subtitle":"Choose how verbose new OpenCode instances should be.","settings.opencode.logLevel.option.debug":"Debug","settings.opencode.logLevel.option.info":"Info","settings.opencode.logLevel.option.warn":"Warn","settings.opencode.logLevel.option.error":"Error","settings.appearance.behavior.title":"Interaction","settings.appearance.behavior.subtitle":"Message, diff, and input defaults.","settings.behavior.keyboardHints.title":"Keyboard shortcut hints","settings.behavior.keyboardHints.subtitle":"Show keyboard shortcut hints across the UI.","settings.behavior.thinking.title":"Thinking sections","settings.behavior.thinking.subtitle":"Show or hide AI thinking sections in messages.","settings.behavior.thinkingDefault.title":"Thinking default","settings.behavior.thinkingDefault.subtitle":"Choose whether thinking sections start expanded or collapsed.","settings.behavior.timelineTools.title":"Timeline tool calls","settings.behavior.timelineTools.subtitle":"Show or hide tool call entries in the message timeline.","settings.behavior.diffView.title":"Diff view","settings.behavior.diffView.subtitle":"Choose how tool-call diffs are displayed.","settings.behavior.diffView.option.split":"Split","settings.behavior.diffView.option.unified":"Unified","settings.behavior.toolOutputsDefault.title":"Tool outputs default","settings.behavior.toolOutputsDefault.subtitle":"Choose whether tool outputs start expanded or collapsed.","settings.behavior.diagnosticsDefault.title":"Diagnostics default","settings.behavior.diagnosticsDefault.subtitle":"Choose whether diagnostics output starts expanded or collapsed.","settings.behavior.toolInputsVisibility.title":"Tool inputs visibility","settings.behavior.toolInputsVisibility.subtitle":"Set default visibility for tool call input arguments.","settings.behavior.usageMetrics.title":"Token usage metrics","settings.behavior.usageMetrics.subtitle":"Show or hide token and cost stats for assistant messages.","settings.behavior.autoCleanup.title":"Auto-cleanup blank sessions","settings.behavior.autoCleanup.subtitle":"Automatically clean up blank sessions when creating new ones.","settings.behavior.keepUnseenSubagentIdle.title":"Keep subagent idle markers","settings.behavior.keepUnseenSubagentIdle.subtitle":"Keep subagent idle markers visible until viewed instead of hiding them after 5 seconds.","settings.behavior.promptVoiceInput.title":"Prompt voice input","settings.behavior.promptVoiceInput.subtitle":"Show the microphone control for speech-to-text prompt input when speech is configured.","settings.behavior.promptSubmit.title":"Enter to submit","settings.behavior.promptSubmit.subtitle":"Use Enter to submit prompts; Cmd/Ctrl+Enter inserts a new line.","settings.speech.title":"Speech","settings.speech.subtitle":"Configure speech-to-text now and text-to-speech groundwork for later features.","settings.speech.provider.title":"Provider","settings.speech.provider.subtitle":"Speech requests use the server-side speech adapter.","settings.speech.provider.openaiCompatible":"OpenAI-compatible","settings.speech.status.loading":"Checking configuration...","settings.speech.status.configured":"Configured","settings.speech.status.missing":"Missing API key","settings.speech.status.error":"Speech service unavailable","settings.speech.apiKey.title":"API key","settings.speech.apiKey.subtitle":"Used for CodeNomad-managed speech requests.","settings.speech.apiKey.placeholder":"Enter a new API key","settings.speech.apiKey.storedNote":"A saved API key is hidden. Enter a new value to replace it, or leave the field blank to keep it.","settings.speech.apiKey.clearAction":"Clear saved key","settings.speech.apiKey.clearPending":"The saved API key will be removed when you save.","settings.speech.baseUrl.title":"Base URL","settings.speech.baseUrl.subtitle":"Optional override for OpenAI-compatible speech endpoints.","settings.speech.baseUrl.placeholder":"https://api.openai.com/v1","settings.speech.sttModel.title":"Transcription model","settings.speech.sttModel.subtitle":"Model used for prompt speech-to-text requests.","settings.speech.ttsModel.title":"Speech model","settings.speech.ttsModel.subtitle":"Default text-to-speech model reserved for future playback features.","settings.speech.ttsVoice.title":"Default voice","settings.speech.ttsVoice.subtitle":"Default text-to-speech voice reserved for future playback features.","settings.speech.playbackMode.title":"Playback mode","settings.speech.playbackMode.subtitle":"Choose whether TTS starts playing as audio streams in or after the full file is generated.","settings.speech.playbackMode.streaming":"Streaming","settings.speech.playbackMode.buffered":"Buffered","settings.speech.ttsFormat.title":"Output format","settings.speech.ttsFormat.subtitle":"Choose the audio format for synthesized speech. Streaming support depends on your provider and browser.","settings.speech.help":"Prompt voice input appears when speech transcription is configured and supported. Message playback uses the TTS mode and format selected here.","settings.speech.compatibility.streamingUnavailable":"Your current speech provider configuration does not advertise streaming TTS. Switch playback mode to buffered if you want playback to work now.","settings.speech.compatibility.browserStreamingUnavailable":"Your current browser cannot stream the selected TTS format. Choose buffered playback or switch to a different format.","settings.speech.compatibility.runtimeNote":"All formats stay selectable in streaming mode. Some browser and provider combinations may still fail at playback time.","settings.speech.testPlayback.action":"Test playback","settings.speech.testPlayback.generating":"Generating sample","settings.speech.testPlayback.stop":"Stop sample","settings.speech.testPlayback.sample":"Thank you for using CodeNomad, your speech settings are working fine.","settings.speech.testPlayback.note":"The test uses your current playback mode and format immediately. Save API key, base URL, model, or voice changes first if you want those reflected too.","settings.speech.save.action":"Save","settings.speech.save.saving":"Saving...","settings.speech.save.saved":"Saved","settings.speech.save.unsaved":"Unsaved changes","settings.speech.save.error":"Save failed","settings.nav.sidecars":"SideCars","settings.section.sidecars.eyebrow":"Server services","settings.section.sidecars.title":"SideCars","settings.section.sidecars.subtitle":"Configure local services listening on fixed ports that the server can proxy into tabs.","sidecars.form.name":"Name","sidecars.form.validation":"Enter a valid SideCar name and port.","sidecars.form.port":"Port","sidecars.form.insecure":"Use HTTP","sidecars.form.protocol":"Protocol","sidecars.form.protocol.help":"Choose how the proxy should connect to the local service.","sidecars.form.protocol.https":"HTTPS","sidecars.form.protocol.http":"HTTP","sidecars.form.prefixMode":"Prefix mode","sidecars.form.prefixMode.help":"Choose whether the SideCar receives the public /sidecars path prefix.","sidecars.form.prefixMode.strip":"Strip prefix","sidecars.form.prefixMode.preserve":"Preserve prefix","sidecars.form.add":"Add SideCar","sidecars.kind.port":"Port","sidecars.status.running":"Running","sidecars.status.stopped":"Stopped","sidecars.basePath":"Base path","sidecars.settings.listTitle":"Configured SideCars","sidecars.settings.listSubtitle":"Review the port-based SideCars available in the picker.","sidecars.settings.empty":"No SideCars configured yet.","sidecars.picker.title":"Open SideCar","sidecars.picker.loading":"Loading SideCars...","sidecars.picker.subtitle":"Choose an available SideCar to open in a new tab.","sidecars.picker.empty":"No port-based SideCars are available yet.","sidecars.picker.close":"Close","sidecars.open.errorTitle":"Unable to open SideCar","sidecars.open.notFound":"SideCar not found.","sidecars.open.notRunning":"SideCar is not reachable on its configured port.","sidecars.back":"Back","sidecars.refresh":"Refresh","sidecars.path":"Path","sidecars.go":"Go"},ve={"time.relative.justNow":"just now","time.relative.daysAgoShort":"{count}d ago","time.relative.hoursAgoShort":"{count}h ago","time.relative.minutesAgoShort":"{count}m ago"},ye={"toolCall.pending.waitingToRun":"Waiting to run...","toolCall.error.label":"Error:","toolCall.header.copyTitle":"Copy tool call title","toolCall.header.copyAriaLabel":"Copy tool call title","toolCall.header.showInputTitle":"Show Tool Arguments","toolCall.header.showInputAriaLabel":"Show Tool Arguments","toolCall.header.hideInputTitle":"Hide Tool Arguments","toolCall.header.hideInputAriaLabel":"Hide Tool Arguments","toolCall.io.input":"Tool Input","toolCall.io.output":"Tool Output","toolCall.diff.label":"Diff","toolCall.diff.label.withPath":"Diff · {path}","toolCall.diff.viewMode.ariaLabel":"Diff view mode","toolCall.diff.viewMode.split":"Split","toolCall.diff.viewMode.unified":"Unified","toolCall.diff.switchToSplit":"Switch to split view","toolCall.diff.switchToUnified":"Switch to unified view","toolCall.diff.enableWordWrap":"Enable word wrap","toolCall.diff.disableWordWrap":"Disable word wrap","toolCall.diff.copyPatch":"Copy patch","toolCall.diagnostics.title":"Diagnostics","toolCall.diagnostics.ariaLabel":"Diagnostics","toolCall.diagnostics.ariaLabel.withLabel":"Diagnostics {label}","toolCall.diagnostics.severity.error.short":"ERR","toolCall.diagnostics.severity.warning.short":"WARN","toolCall.diagnostics.severity.info.short":"INFO","toolCall.renderer.toolName.shell":"Shell","toolCall.renderer.toolName.fetch":"Fetch","toolCall.renderer.toolName.invalid":"Invalid","toolCall.renderer.toolName.plan":"Plan","toolCall.renderer.toolName.applyPatch":"Apply patch","toolCall.renderer.action.working":"Working...","toolCall.renderer.action.writingCommand":"Writing command...","toolCall.renderer.action.preparingEdit":"Preparing edit...","toolCall.renderer.action.readingFile":"Reading file...","toolCall.renderer.action.preparingWrite":"Preparing write...","toolCall.renderer.action.preparingPatch":"Preparing patch...","toolCall.renderer.action.planning":"Planning...","toolCall.renderer.action.fetchingFromWeb":"Fetching from the web...","toolCall.renderer.action.findingFiles":"Finding files...","toolCall.renderer.action.searchingContent":"Searching content...","toolCall.renderer.action.listingDirectory":"Listing directory...","toolCall.renderer.bash.title.timeout":"Timeout: {timeout}","toolCall.renderer.read.detail.offset":"Offset: {offset}","toolCall.renderer.read.detail.limit":"Limit: {limit}","toolCall.renderer.todo.empty":"No plan items yet.","toolCall.renderer.todo.status.pending":"Pending","toolCall.renderer.todo.status.inProgress":"In progress","toolCall.renderer.todo.status.completed":"Completed","toolCall.renderer.todo.status.cancelled":"Cancelled","toolCall.renderer.todo.title.plan":"Plan","toolCall.renderer.todo.title.creating":"Creating plan","toolCall.renderer.todo.title.completing":"Completing plan","toolCall.renderer.todo.title.updating":"Updating plan","toolCall.permission.status.required":"Permission Required","toolCall.permission.status.queued":"Permission Queued","toolCall.permission.requestedDiff.label":"Requested diff","toolCall.permission.requestedDiff.withPath":"Requested diff · {path}","toolCall.permission.queuedText":"Waiting for earlier permission responses.","toolCall.permission.actions.allowOnce":"Allow Once","toolCall.permission.actions.alwaysAllow":"Always Allow","toolCall.permission.actions.deny":"Deny","toolCall.permission.shortcuts.allowOnce":"Allow once","toolCall.permission.shortcuts.alwaysAllow":"Always allow","toolCall.permission.shortcuts.deny":"Deny","toolCall.permission.errors.unableToUpdate":"Unable to update permission","permissionApproval.title":"Requests","permissionApproval.empty":"No pending requests.","permissionApproval.kind.permission":"Permission","permissionApproval.kind.question":"Question","permissionApproval.questionCount.one":"{count} question","permissionApproval.questionCount.other":"{count} questions","permissionApproval.status.active":"Active","permissionApproval.actions.closeAriaLabel":"Close","permissionApproval.actions.goToSession":"Go to Session","permissionApproval.actions.loadingSession":"Loading…","permissionApproval.actions.loadSession":"Load Session","permissionApproval.actions.allowOnce":"Allow Once","permissionApproval.actions.alwaysAllow":"Always Allow","permissionApproval.actions.deny":"Deny","permissionApproval.fallbackHint":"Load session for more information.","permissionApproval.errors.unableToUpdatePermission":"Unable to update permission","toolCall.question.status.required":"Question Required","toolCall.question.status.queued":"Question Queued","toolCall.question.status.questions":"Questions","toolCall.question.action.awaitingAnswers":"Awaiting answers...","toolCall.question.title.questions":"Questions","toolCall.question.title.askingQuestions":"Asking questions","toolCall.question.type.one":"Question","toolCall.question.type.other":"Questions","toolCall.question.number":"Q{number}:","toolCall.question.multiple":"Multiple","toolCall.question.custom.title":"Type a custom answer","toolCall.question.custom.label":"Custom answer","toolCall.question.custom.placeholder":"Type your own answer","toolCall.question.actions.submit":"Submit","toolCall.question.actions.dismiss":"Dismiss","toolCall.question.shortcuts.submit":"Submit","toolCall.question.shortcuts.dismiss":"Dismiss","toolCall.question.queuedText":"Waiting for earlier responses.","toolCall.question.validation.answerAll":"Please answer all questions before submitting.","toolCall.question.errors.unableToReply":"Unable to reply","toolCall.question.errors.unableToDismiss":"Unable to dismiss","toolCall.task.action.delegating":"Delegating...","toolCall.task.sections.prompt":"Prompt","toolCall.task.sections.steps":"Steps","toolCall.task.sections.output":"Output","toolCall.task.steps.count":"{count} steps","toolCall.task.meta.agentModel":"Agent: {agent} • Model: {model}","toolCall.task.meta.agent":"Agent: {agent}","toolCall.task.meta.model":"Model: {model}","toolCall.status.pending":"Pending","toolCall.status.running":"Running","toolCall.status.completed":"Completed","toolCall.status.error":"Error","toolCall.status.unknown":"Unknown","toolCall.applyPatch.action.preparing":"Preparing apply_patch...","toolCall.applyPatch.title.withFileCount.one":"{tool} ({count} file)","toolCall.applyPatch.title.withFileCount.other":"{tool} ({count} files)","toolCall.applyPatch.fileFallback":"File {number}"};function Ce(...e){const t={};for(const s of e)for(const[o,n]of Object.entries(s)){if(o in t)throw new Error(`Duplicate i18n message key: ${o}`);t[o]=n}return t}const b=Ce(me,ae,ue,ve,re,ce,de,pe,ge,Se,fe,ye,he,we,be,le),ke=["en","es","fr","ru","ja","zh-Hans","he"],O=new Map(ke.map(e=>[e.toLowerCase(),e])),Le=new Set(["he"]),B=new Map([["en",b]]),A=new Map,Pe={en:async()=>b,es:async()=>(await w(async()=>{const{esMessages:e}=await import("./index-Dty5bSHf.js");return{esMessages:e}},__vite__mapDeps([0,1,2,3,4,5]))).esMessages,fr:async()=>(await w(async()=>{const{frMessages:e}=await import("./index-H16e4Rqc.js");return{frMessages:e}},__vite__mapDeps([6,1,2,3,4,5]))).frMessages,ru:async()=>(await w(async()=>{const{ruMessages:e}=await import("./index-D-NvysdX.js");return{ruMessages:e}},__vite__mapDeps([7,1,2,3,4,5]))).ruMessages,ja:async()=>(await w(async()=>{const{jaMessages:e}=await import("./index-Ctq8RqRf.js");return{jaMessages:e}},__vite__mapDeps([8,1,2,3,4,5]))).jaMessages,"zh-Hans":async()=>(await w(async()=>{const{zhHansMessages:e}=await import("./index-BvRe9GiS.js");return{zhHansMessages:e}},__vite__mapDeps([9,1,2,3,4,5]))).zhHansMessages,he:async()=>(await w(async()=>{const{heMessages:e}=await import("./index-Bdy3MTIn.js");return{heMessages:e}},__vite__mapDeps([10,1,2,3,4,5]))).heMessages};function Ae(e){return Le.has(e)?"rtl":"ltr"}function Ie(e){return e.trim().replace(/_/g,"-")}function _(e){if(!e)return null;const s=Ie(e).toLowerCase(),o=O.get(s);if(o)return o;const i=s.split("-")[0];return i?i==="zh"?O.get("zh-hans")??null:O.get(i)??null:null}function z(){if(typeof navigator>"u")return null;const e=Array.isArray(navigator.languages)&&navigator.languages.length>0?navigator.languages:navigator.language?[navigator.language]:[];for(const t of e){const s=_(t);if(s)return s}return null}function De(e,t){return t?e.replace(/\{(\w+)\}/g,(s,o)=>{const n=t[o];return n==null?"":String(n)}):e}function K(e,t,s){const o=e[t],n=b[t];return De(o??n??t,s)}const[Te,L]=F(0);let f=b,u="en";function Ee(e){return B.get(e)??b}async function j(e){const t=B.get(e);if(t)return t;const s=A.get(e);if(s)return s;const o=Pe[e],n=o().then(i=>(B.set(e,i),A.delete(e),i)).catch(i=>{throw A.delete(e),i});return A.set(e,n),n}async function Ve(e){const t=_(e??void 0)??z()??"en";try{return f=await j(t),u=t,L(s=>s+1),t}catch{return f=b,u="en",L(s=>s+1),"en"}}function We(e,t){return Te(),K(f,e,t)}const Q=Z(),qe=e=>{const{preferences:t}=se(),[s,o]=F(u),[n,i]=F(u),a=f,c=u,m=typeof document<"u"?document.documentElement.lang:"",S=typeof document<"u"?document.documentElement.dir:"";ee(()=>{const l=z();l&&o(l)});const y=U(()=>_(t().locale)??s()??"en"),p=U(()=>Ee(n()));function M(l,C){return K(p(),l,C)}x(()=>{const l=y();let C=!1;j(l).then(R=>{C||(i(l),u=l,f=R,L(J=>J+1))}).catch(()=>{C||(i("en"),f=b,u="en",L(R=>R+1))}),V(()=>{C=!0})}),x(()=>{if(typeof document>"u")return;const l=y();document.documentElement.dir=Ae(l),document.documentElement.lang=l}),V(()=>{f=a,u=c,L(l=>l+1),typeof document<"u"&&(document.documentElement.lang=m,document.documentElement.dir=S)});const N={locale:y,t:M};return te(Q.Provider,{value:N,get children(){return e.children}})};function He(){const e=X(Q);if(!e)throw new Error("useI18n must be used within I18nProvider");return e}function Y(){if(typeof window>"u"||window.__CODENOMAD_WINDOW_CONTEXT__==="remote")return"remote";if(window.__CODENOMAD_WINDOW_CONTEXT__==="local")return"local";const e=window;return typeof e.electronAPI<"u"||typeof e.__TAURI__<"u"||typeof navigator<"u"&&/tauri/i.test(navigator.userAgent)?"local":"remote"}function D(){if(typeof window>"u")return"web";const e=window.__CODENOMAD_RUNTIME_HOST__;if(e)return e;const t=window;return typeof t.electronAPI<"u"?"electron":typeof t.__TAURI__<"u"||typeof navigator<"u"&&/tauri/i.test(navigator.userAgent)?"tauri":"web"}function Me(){if(typeof navigator>"u")return"desktop";const e=navigator.userAgentData;if(e!=null&&e.mobile)return"mobile";const t=navigator.userAgent.toLowerCase();return/android|iphone|ipad|ipod|blackberry|mini|windows phone|mobile|silk/.test(t)?"mobile":"desktop"}const Ne=oe("actions");let g=null;function Re(){return g||(g={host:D(),platform:Me(),windowContext:Y()},typeof window<"u"&&Ne.info(`[runtime] host=${g.host} platform=${g.platform} context=${g.windowContext}`),g)}const Ge=Re(),Oe=()=>D()==="electron",Fe=()=>D()==="tauri",ze=()=>D()==="web",T=()=>Oe()||Fe(),E=()=>Y()==="local",Ke=()=>T()&&E(),je=()=>T()&&E(),Qe=()=>T()&&E(),Ye=()=>T()&&E();function r(e,t,s,o){if(typeof t=="function"?e!==t||!o:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return s==="m"?o:s==="a"?o.call(e):o?o.value:t.get(e)}function k(e,t,s,o,n){if(typeof t=="function"?e!==t||!0:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return t.set(e,s),s}var h,d,v,I;const q="__TAURI_TO_IPC_KEY__";function $(e,t=!1){return window.__TAURI_INTERNALS__.transformCallback(e,t)}class Be{constructor(t){h.set(this,void 0),d.set(this,0),v.set(this,[]),I.set(this,void 0),k(this,h,t||(()=>{})),this.id=$(s=>{const o=s.index;if("end"in s){o==r(this,d,"f")?this.cleanupCallback():k(this,I,o);return}const n=s.message;if(o==r(this,d,"f")){for(r(this,h,"f").call(this,n),k(this,d,r(this,d,"f")+1);r(this,d,"f")in r(this,v,"f");){const i=r(this,v,"f")[r(this,d,"f")];r(this,h,"f").call(this,i),delete r(this,v,"f")[r(this,d,"f")],k(this,d,r(this,d,"f")+1)}r(this,d,"f")===r(this,I,"f")&&this.cleanupCallback()}else r(this,v,"f")[o]=n})}cleanupCallback(){window.__TAURI_INTERNALS__.unregisterCallback(this.id)}set onmessage(t){k(this,h,t)}get onmessage(){return r(this,h,"f")}[(h=new WeakMap,d=new WeakMap,v=new WeakMap,I=new WeakMap,q)](){return`__CHANNEL__:${this.id}`}toJSON(){return this[q]()}}class H{constructor(t,s,o){this.plugin=t,this.event=s,this.channelId=o}async unregister(){return P(`plugin:${this.plugin}|remove_listener`,{event:this.event,channelId:this.channelId})}}async function $e(e,t,s){const o=new Be(s);try{return await P(`plugin:${e}|register_listener`,{event:t,handler:o}),new H(e,t,o.id)}catch{return await P(`plugin:${e}|registerListener`,{event:t,handler:o}),new H(e,t,o.id)}}async function P(e,t={},s){return window.__TAURI_INTERNALS__.invoke(e,t,s)}var G;(function(e){e.WINDOW_RESIZED="tauri://resize",e.WINDOW_MOVED="tauri://move",e.WINDOW_CLOSE_REQUESTED="tauri://close-requested",e.WINDOW_DESTROYED="tauri://destroyed",e.WINDOW_FOCUS="tauri://focus",e.WINDOW_BLUR="tauri://blur",e.WINDOW_SCALE_FACTOR_CHANGED="tauri://scale-change",e.WINDOW_THEME_CHANGED="tauri://theme-changed",e.WINDOW_CREATED="tauri://window-created",e.WEBVIEW_CREATED="tauri://webview-created",e.DRAG_ENTER="tauri://drag-enter",e.DRAG_OVER="tauri://drag-over",e.DRAG_DROP="tauri://drag-drop",e.DRAG_LEAVE="tauri://drag-leave"})(G||(G={}));async function _e(e,t){window.__TAURI_EVENT_PLUGIN_INTERNALS__.unregisterListener(e,t),await P("plugin:event|unlisten",{event:e,eventId:t})}async function Je(e,t,s){var o;const n=(o=void 0)!==null&&o!==void 0?o:{kind:"Any"};return P("plugin:event|listen",{event:e,target:n,handler:$(t)}).then(i=>async()=>_e(e,i))}export{qe as I,w as _,Oe as a,Fe as b,Ke as c,Ye as d,je as e,b as f,ze as g,Qe as h,P as i,$e as j,Je as l,Ce as m,Ve as p,Ge as r,We as t,He as u};