Просмотр исходного кода

Merge branch 'main' into all-tasks-events-in-api

Chris Estreich 9 месяцев назад
Родитель
Сommit
a06119a40c
100 измененных файлов с 8386 добавлено и 971 удалено
  1. 15 0
      .github/workflows/code-qa.yml
  2. 12 14
      .roomodes
  3. 32 18
      README.md
  4. 8 0
      esbuild.js
  5. 2 1
      knip.json
  6. 77 0
      locales/ca/CODE_OF_CONDUCT.md
  7. 112 0
      locales/ca/CONTRIBUTING.md
  8. 211 0
      locales/ca/README.md
  9. 76 0
      locales/de/CODE_OF_CONDUCT.md
  10. 112 0
      locales/de/CONTRIBUTING.md
  11. 211 0
      locales/de/README.md
  12. 76 0
      locales/es/CODE_OF_CONDUCT.md
  13. 112 0
      locales/es/CONTRIBUTING.md
  14. 211 0
      locales/es/README.md
  15. 77 0
      locales/fr/CODE_OF_CONDUCT.md
  16. 112 0
      locales/fr/CONTRIBUTING.md
  17. 211 0
      locales/fr/README.md
  18. 75 0
      locales/hi/CODE_OF_CONDUCT.md
  19. 112 0
      locales/hi/CONTRIBUTING.md
  20. 211 0
      locales/hi/README.md
  21. 77 0
      locales/it/CODE_OF_CONDUCT.md
  22. 112 0
      locales/it/CONTRIBUTING.md
  23. 211 0
      locales/it/README.md
  24. 78 0
      locales/ja/CODE_OF_CONDUCT.md
  25. 112 0
      locales/ja/CONTRIBUTING.md
  26. 211 0
      locales/ja/README.md
  27. 69 0
      locales/ko/CODE_OF_CONDUCT.md
  28. 113 0
      locales/ko/CONTRIBUTING.md
  29. 211 0
      locales/ko/README.md
  30. 77 0
      locales/pl/CODE_OF_CONDUCT.md
  31. 112 0
      locales/pl/CONTRIBUTING.md
  32. 211 0
      locales/pl/README.md
  33. 77 0
      locales/pt-BR/CODE_OF_CONDUCT.md
  34. 112 0
      locales/pt-BR/CONTRIBUTING.md
  35. 211 0
      locales/pt-BR/README.md
  36. 73 0
      locales/tr/CODE_OF_CONDUCT.md
  37. 112 0
      locales/tr/CONTRIBUTING.md
  38. 211 0
      locales/tr/README.md
  39. 77 0
      locales/vi/CODE_OF_CONDUCT.md
  40. 112 0
      locales/vi/CONTRIBUTING.md
  41. 211 0
      locales/vi/README.md
  42. 73 0
      locales/zh-CN/CODE_OF_CONDUCT.md
  43. 112 0
      locales/zh-CN/CONTRIBUTING.md
  44. 211 0
      locales/zh-CN/README.md
  45. 75 0
      locales/zh-TW/CODE_OF_CONDUCT.md
  46. 112 0
      locales/zh-TW/CONTRIBUTING.md
  47. 211 0
      locales/zh-TW/README.md
  48. 619 32
      package-lock.json
  49. 3 1
      package.json
  50. 220 0
      scripts/find-missing-translations.js
  51. 92 6
      scripts/update-contributors.js
  52. 14 0
      src/__mocks__/@modelcontextprotocol/sdk/client/sse.js
  53. 5 1
      src/core/Cline.ts
  54. 1 0
      src/core/__tests__/Cline.test.ts
  55. 61 0
      src/core/__tests__/contextProxy.test.ts
  56. 17 0
      src/core/contextProxy.ts
  57. 1 1
      src/core/mentions/index.ts
  58. 94 9
      src/core/prompts/__tests__/__snapshots__/system.test.ts.snap
  59. 45 4
      src/core/prompts/sections/mcp-servers.ts
  60. 38 4
      src/core/webview/ClineProvider.ts
  61. 124 0
      src/core/webview/__tests__/ClineProvider.test.ts
  62. 5 0
      src/exports/api.ts
  63. 8 0
      src/exports/roo-code.d.ts
  64. 506 158
      src/services/mcp/McpHub.ts
  65. 40 9
      src/services/mcp/__tests__/McpHub.test.ts
  66. 2 0
      src/shared/WebviewMessage.ts
  67. 0 3
      src/shared/__tests__/experiments.test.ts
  68. 3 1
      src/shared/api.ts
  69. 1 32
      src/shared/experiments.ts
  70. 1 0
      src/shared/globalState.ts
  71. 2 0
      src/shared/mcp.ts
  72. 0 9
      src/shared/tool-groups.ts
  73. 30 29
      webview-ui/src/components/chat/AutoApproveMenu.tsx
  74. 18 17
      webview-ui/src/components/chat/ChatTextArea.tsx
  75. 53 61
      webview-ui/src/components/chat/ChatView.tsx
  76. 8 7
      webview-ui/src/components/common/TelemetryBanner.tsx
  77. 4 1
      webview-ui/src/components/history/CopyButton.tsx
  78. 6 6
      webview-ui/src/components/history/DeleteTaskDialog.tsx
  79. 18 13
      webview-ui/src/components/history/ExportButton.tsx
  80. 13 8
      webview-ui/src/components/history/HistoryPreview.tsx
  81. 25 12
      webview-ui/src/components/history/HistoryView.tsx
  82. 11 13
      webview-ui/src/components/history/__tests__/HistoryView.test.tsx
  83. 4 3
      webview-ui/src/components/mcp/McpEnabledToggle.tsx
  84. 5 3
      webview-ui/src/components/mcp/McpToolRow.tsx
  85. 70 42
      webview-ui/src/components/mcp/McpView.tsx
  86. 14 0
      webview-ui/src/components/mcp/__tests__/McpToolRow.test.tsx
  87. 178 142
      webview-ui/src/components/prompts/PromptsView.tsx
  88. 24 17
      webview-ui/src/components/settings/AdvancedSettings.tsx
  89. 33 17
      webview-ui/src/components/settings/ApiConfigManager.tsx
  90. 144 145
      webview-ui/src/components/settings/ApiOptions.tsx
  91. 51 36
      webview-ui/src/components/settings/AutoApproveSettings.tsx
  92. 26 23
      webview-ui/src/components/settings/BrowserSettings.tsx
  93. 5 4
      webview-ui/src/components/settings/CheckpointSettings.tsx
  94. 12 14
      webview-ui/src/components/settings/ContextManagementSettings.tsx
  95. 21 12
      webview-ui/src/components/settings/ExperimentalFeature.tsx
  96. 4 2
      webview-ui/src/components/settings/ExperimentalSettings.tsx
  97. 22 16
      webview-ui/src/components/settings/ModelInfoView.tsx
  98. 12 9
      webview-ui/src/components/settings/ModelPicker.tsx
  99. 11 5
      webview-ui/src/components/settings/NotificationSettings.tsx
  100. 13 11
      webview-ui/src/components/settings/SectionHeader.tsx

+ 15 - 0
.github/workflows/code-qa.yml

@@ -28,6 +28,21 @@ jobs:
       - name: Lint
         run: npm run lint
 
+  check-translations:
+    runs-on: ubuntu-latest
+    steps:
+      - name: Checkout code
+        uses: actions/checkout@v4
+      - name: Setup Node.js
+        uses: actions/setup-node@v4
+        with:
+          node-version: '18'
+          cache: 'npm'
+      - name: Install dependencies
+        run: npm run install:all
+      - name: Verify all translations are complete
+        run: node scripts/find-missing-translations.js
+
   knip:
     runs-on: ubuntu-latest
     steps:

Разница между файлами не показана из-за своего большого размера
+ 12 - 14
.roomodes


+ 32 - 18
README.md

@@ -1,3 +1,17 @@
+<div align="center">
+<sub>
+
+English • [Català](locales/ca/README.md) • [Deutsch](locales/de/README.md) • [Español](locales/es/README.md) • [Français](locales/fr/README.md) • [हिन्दी](locales/hi/README.md) • [Italiano](locales/it/README.md)
+
+</sub>
+<sub>
+
+[日本語](locales/ja/README.md) • [한국어](locales/ko/README.md) • [Polski](locales/pl/README.md) • [Português (BR)](locales/pt-BR/README.md) • [Türkçe](locales/tr/README.md) • [Tiếng Việt](locales/vi/README.md) • [简体中文](locales/zh-CN/README.md) • [繁體中文](locales/zh-TW/README.md)
+
+</sub>
+</div>
+<br>
+
 <div align="center">
   <h2>Join the Roo Code Community</h2>
   <p>Connect with developers, contribute ideas, and stay ahead with the latest AI-powered coding tools.</p>
@@ -165,27 +179,27 @@ We love community contributions! Get started by reading our [CONTRIBUTING.md](CO
 
 ---
 
-<!-- START CONTRIBUTORS SECTION - AUTO-GENERATED, DO NOT EDIT MANUALLY -->
-
 ## Contributors
 
 Thanks to all our contributors who have helped make Roo Code better!
 
-|            <a href="https://github.com/mrubens"><img src="https://avatars.githubusercontent.com/u/2600?v=4" width="100" height="100" alt="mrubens"/><br /><sub><b>mrubens</b></sub></a>            |         <a href="https://github.com/saoudrizwan"><img src="https://avatars.githubusercontent.com/u/7799382?v=4" width="100" height="100" alt="saoudrizwan"/><br /><sub><b>saoudrizwan</b></sub></a>         |                  <a href="https://github.com/cte"><img src="https://avatars.githubusercontent.com/u/16332?v=4" width="100" height="100" alt="cte"/><br /><sub><b>cte</b></sub></a>                  |          <a href="https://github.com/samhvw8"><img src="https://avatars.githubusercontent.com/u/12538214?v=4" width="100" height="100" alt="samhvw8"/><br /><sub><b>samhvw8</b></sub></a>          |     <a href="https://github.com/daniel-lxs"><img src="https://avatars.githubusercontent.com/u/57051444?v=4" width="100" height="100" alt="daniel-lxs"/><br /><sub><b>daniel-lxs</b></sub></a>     |                   <a href="https://github.com/a8trejo"><img src="https://avatars.githubusercontent.com/u/62401433?v=4" width="100" height="100" alt="a8trejo"/><br /><sub><b>a8trejo</b></sub></a>                    |
-| :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
-|     <a href="https://github.com/ColemanRoo"><img src="https://avatars.githubusercontent.com/u/117104599?v=4" width="100" height="100" alt="ColemanRoo"/><br /><sub><b>ColemanRoo</b></sub></a>     |             <a href="https://github.com/stea9499"><img src="https://avatars.githubusercontent.com/u/4163795?v=4" width="100" height="100" alt="stea9499"/><br /><sub><b>stea9499</b></sub></a>              |   <a href="https://github.com/joemanley201"><img src="https://avatars.githubusercontent.com/u/8299960?v=4" width="100" height="100" alt="joemanley201"/><br /><sub><b>joemanley201</b></sub></a>    |       <a href="https://github.com/System233"><img src="https://avatars.githubusercontent.com/u/20336040?v=4" width="100" height="100" alt="System233"/><br /><sub><b>System233</b></sub></a>       |        <a href="https://github.com/jquanton"><img src="https://avatars.githubusercontent.com/u/88576563?v=4" width="100" height="100" alt="jquanton"/><br /><sub><b>jquanton</b></sub></a>        |              <a href="https://github.com/nissa-seru"><img src="https://avatars.githubusercontent.com/u/119150866?v=4" width="100" height="100" alt="nissa-seru"/><br /><sub><b>nissa-seru</b></sub></a>               |
-| <a href="https://github.com/hannesrudolph"><img src="https://avatars.githubusercontent.com/u/49103247?v=4" width="100" height="100" alt="hannesrudolph"/><br /><sub><b>hannesrudolph</b></sub></a> |             <a href="https://github.com/MuriloFP"><img src="https://avatars.githubusercontent.com/u/50873657?v=4" width="100" height="100" alt="MuriloFP"/><br /><sub><b>MuriloFP</b></sub></a>             |            <a href="https://github.com/NyxJae"><img src="https://avatars.githubusercontent.com/u/52313587?v=4" width="100" height="100" alt="NyxJae"/><br /><sub><b>NyxJae</b></sub></a>            |        <a href="https://github.com/punkpeye"><img src="https://avatars.githubusercontent.com/u/108313943?v=4" width="100" height="100" alt="punkpeye"/><br /><sub><b>punkpeye</b></sub></a>        |             <a href="https://github.com/d-oit"><img src="https://avatars.githubusercontent.com/u/6849456?v=4" width="100" height="100" alt="d-oit"/><br /><sub><b>d-oit</b></sub></a>             |            <a href="https://github.com/monotykamary"><img src="https://avatars.githubusercontent.com/u/1130103?v=4" width="100" height="100" alt="monotykamary"/><br /><sub><b>monotykamary</b></sub></a>             |
-|      <a href="https://github.com/lloydchang"><img src="https://avatars.githubusercontent.com/u/1329685?v=4" width="100" height="100" alt="lloydchang"/><br /><sub><b>lloydchang</b></sub></a>      | <a href="https://github.com/vigneshsubbiah16"><img src="https://avatars.githubusercontent.com/u/51325334?v=4" width="100" height="100" alt="vigneshsubbiah16"/><br /><sub><b>vigneshsubbiah16</b></sub></a> |           <a href="https://github.com/Szpadel"><img src="https://avatars.githubusercontent.com/u/1857251?v=4" width="100" height="100" alt="Szpadel"/><br /><sub><b>Szpadel</b></sub></a>           |      <a href="https://github.com/lupuletic"><img src="https://avatars.githubusercontent.com/u/105351510?v=4" width="100" height="100" alt="lupuletic"/><br /><sub><b>lupuletic</b></sub></a>       |         <a href="https://github.com/cannuri"><img src="https://avatars.githubusercontent.com/u/91494156?v=4" width="100" height="100" alt="cannuri"/><br /><sub><b>cannuri</b></sub></a>          | <a href="https://github.com/Smartsheet-JB-Brown"><img src="https://avatars.githubusercontent.com/u/171734120?v=4" width="100" height="100" alt="Smartsheet-JB-Brown"/><br /><sub><b>Smartsheet-JB-Brown</b></sub></a> |
-|        <a href="https://github.com/Premshay"><img src="https://avatars.githubusercontent.com/u/28099628?v=4" width="100" height="100" alt="Premshay"/><br /><sub><b>Premshay</b></sub></a>         |              <a href="https://github.com/psv2522"><img src="https://avatars.githubusercontent.com/u/87223770?v=4" width="100" height="100" alt="psv2522"/><br /><sub><b>psv2522</b></sub></a>               |    <a href="https://github.com/olweraltuve"><img src="https://avatars.githubusercontent.com/u/39308405?v=4" width="100" height="100" alt="olweraltuve"/><br /><sub><b>olweraltuve</b></sub></a>     |      <a href="https://github.com/RaySinner"><img src="https://avatars.githubusercontent.com/u/118297374?v=4" width="100" height="100" alt="RaySinner"/><br /><sub><b>RaySinner</b></sub></a>       |             <a href="https://github.com/qdaxb"><img src="https://avatars.githubusercontent.com/u/4157870?v=4" width="100" height="100" alt="qdaxb"/><br /><sub><b>qdaxb</b></sub></a>             |            <a href="https://github.com/afshawnlotfi"><img src="https://avatars.githubusercontent.com/u/6283745?v=4" width="100" height="100" alt="afshawnlotfi"/><br /><sub><b>afshawnlotfi</b></sub></a>             |
-|         <a href="https://github.com/emshvac"><img src="https://avatars.githubusercontent.com/u/121588911?v=4" width="100" height="100" alt="emshvac"/><br /><sub><b>emshvac</b></sub></a>          |           <a href="https://github.com/Lunchb0ne"><img src="https://avatars.githubusercontent.com/u/22198661?v=4" width="100" height="100" alt="Lunchb0ne"/><br /><sub><b>Lunchb0ne</b></sub></a>            |             <a href="https://github.com/sammcj"><img src="https://avatars.githubusercontent.com/u/862951?v=4" width="100" height="100" alt="sammcj"/><br /><sub><b>sammcj</b></sub></a>             |         <a href="https://github.com/dtrugman"><img src="https://avatars.githubusercontent.com/u/2451669?v=4" width="100" height="100" alt="dtrugman"/><br /><sub><b>dtrugman</b></sub></a>         |       <a href="https://github.com/aitoroses"><img src="https://avatars.githubusercontent.com/u/1699368?v=4" width="100" height="100" alt="aitoroses"/><br /><sub><b>aitoroses</b></sub></a>       |                  <a href="https://github.com/yt3trees"><img src="https://avatars.githubusercontent.com/u/57471763?v=4" width="100" height="100" alt="yt3trees"/><br /><sub><b>yt3trees</b></sub></a>                  |
-|          <a href="https://github.com/yongjer"><img src="https://avatars.githubusercontent.com/u/54315206?v=4" width="100" height="100" alt="yongjer"/><br /><sub><b>yongjer</b></sub></a>          |         <a href="https://github.com/vincentsong"><img src="https://avatars.githubusercontent.com/u/2343574?v=4" width="100" height="100" alt="vincentsong"/><br /><sub><b>vincentsong</b></sub></a>         | <a href="https://github.com/pugazhendhi-m"><img src="https://avatars.githubusercontent.com/u/132246623?v=4" width="100" height="100" alt="pugazhendhi-m"/><br /><sub><b>pugazhendhi-m</b></sub></a> |            <a href="https://github.com/eonghk"><img src="https://avatars.githubusercontent.com/u/139964?v=4" width="100" height="100" alt="eonghk"/><br /><sub><b>eonghk</b></sub></a>             |        <a href="https://github.com/philfung"><img src="https://avatars.githubusercontent.com/u/1054593?v=4" width="100" height="100" alt="philfung"/><br /><sub><b>philfung</b></sub></a>         |                      <a href="https://github.com/pdecat"><img src="https://avatars.githubusercontent.com/u/318490?v=4" width="100" height="100" alt="pdecat"/><br /><sub><b>pdecat</b></sub></a>                      |
-|            <a href="https://github.com/napter"><img src="https://avatars.githubusercontent.com/u/6260841?v=4" width="100" height="100" alt="napter"/><br /><sub><b>napter</b></sub></a>            |                      <a href="https://github.com/mdp"><img src="https://avatars.githubusercontent.com/u/2868?v=4" width="100" height="100" alt="mdp"/><br /><sub><b>mdp</b></sub></a>                       |            <a href="https://github.com/jcbdev"><img src="https://avatars.githubusercontent.com/u/17152092?v=4" width="100" height="100" alt="jcbdev"/><br /><sub><b>jcbdev</b></sub></a>            |     <a href="https://github.com/anton-otee"><img src="https://avatars.githubusercontent.com/u/149477749?v=4" width="100" height="100" alt="anton-otee"/><br /><sub><b>anton-otee</b></sub></a>     |         <a href="https://github.com/bannzai"><img src="https://avatars.githubusercontent.com/u/10897361?v=4" width="100" height="100" alt="bannzai"/><br /><sub><b>bannzai</b></sub></a>          |                   <a href="https://github.com/dairui1"><img src="https://avatars.githubusercontent.com/u/183250644?v=4" width="100" height="100" alt="dairui1"/><br /><sub><b>dairui1</b></sub></a>                   |
-|           <a href="https://github.com/dqroid"><img src="https://avatars.githubusercontent.com/u/192424994?v=4" width="100" height="100" alt="dqroid"/><br /><sub><b>dqroid</b></sub></a>           |           <a href="https://github.com/feifei325"><img src="https://avatars.githubusercontent.com/u/46489071?v=4" width="100" height="100" alt="feifei325"/><br /><sub><b>feifei325</b></sub></a>            |        <a href="https://github.com/kinandan"><img src="https://avatars.githubusercontent.com/u/186135699?v=4" width="100" height="100" alt="kinandan"/><br /><sub><b>kinandan</b></sub></a>         |             <a href="https://github.com/kohii"><img src="https://avatars.githubusercontent.com/u/6891780?v=4" width="100" height="100" alt="kohii"/><br /><sub><b>kohii</b></sub></a>              |    <a href="https://github.com/lightrabbit"><img src="https://avatars.githubusercontent.com/u/1521765?v=4" width="100" height="100" alt="lightrabbit"/><br /><sub><b>lightrabbit</b></sub></a>    |                        <a href="https://github.com/olup"><img src="https://avatars.githubusercontent.com/u/13785588?v=4" width="100" height="100" alt="olup"/><br /><sub><b>olup</b></sub></a>                        |
-|    <a href="https://github.com/moqimoqidea"><img src="https://avatars.githubusercontent.com/u/39821951?v=4" width="100" height="100" alt="moqimoqidea"/><br /><sub><b>moqimoqidea</b></sub></a>    |            <a href="https://github.com/mosleyit"><img src="https://avatars.githubusercontent.com/u/189396442?v=4" width="100" height="100" alt="mosleyit"/><br /><sub><b>mosleyit</b></sub></a>             |         <a href="https://github.com/oprstchn"><img src="https://avatars.githubusercontent.com/u/16177972?v=4" width="100" height="100" alt="oprstchn"/><br /><sub><b>oprstchn</b></sub></a>         |     <a href="https://github.com/philipnext"><img src="https://avatars.githubusercontent.com/u/81944499?v=4" width="100" height="100" alt="philipnext"/><br /><sub><b>philipnext</b></sub></a>      |  <a href="https://github.com/refactorthis"><img src="https://avatars.githubusercontent.com/u/3012240?v=4" width="100" height="100" alt="refactorthis"/><br /><sub><b>refactorthis</b></sub></a>   |           <a href="https://github.com/samir-nimbly"><img src="https://avatars.githubusercontent.com/u/112695483?v=4" width="100" height="100" alt="samir-nimbly"/><br /><sub><b>samir-nimbly</b></sub></a>            |
-|            <a href="https://github.com/shaybc"><img src="https://avatars.githubusercontent.com/u/8535905?v=4" width="100" height="100" alt="shaybc"/><br /><sub><b>shaybc</b></sub></a>            |       <a href="https://github.com/shohei-ihaya"><img src="https://avatars.githubusercontent.com/u/25131938?v=4" width="100" height="100" alt="shohei-ihaya"/><br /><sub><b>shohei-ihaya</b></sub></a>       |   <a href="https://github.com/student20880"><img src="https://avatars.githubusercontent.com/u/74263488?v=4" width="100" height="100" alt="student20880"/><br /><sub><b>student20880</b></sub></a>   | <a href="https://github.com/PretzelVector"><img src="https://avatars.githubusercontent.com/u/95664360?v=4" width="100" height="100" alt="PretzelVector"/><br /><sub><b>PretzelVector</b></sub></a> |          <a href="https://github.com/AMHesch"><img src="https://avatars.githubusercontent.com/u/4777192?v=4" width="100" height="100" alt="AMHesch"/><br /><sub><b>AMHesch</b></sub></a>          |              <a href="https://github.com/adamwlarson"><img src="https://avatars.githubusercontent.com/u/1392315?v=4" width="100" height="100" alt="adamwlarson"/><br /><sub><b>adamwlarson</b></sub></a>              |
-|            <a href="https://github.com/alarno"><img src="https://avatars.githubusercontent.com/u/4355547?v=4" width="100" height="100" alt="alarno"/><br /><sub><b>alarno</b></sub></a>            |   <a href="https://github.com/andreastempsch"><img src="https://avatars.githubusercontent.com/u/117991125?v=4" width="100" height="100" alt="andreastempsch"/><br /><sub><b>andreastempsch</b></sub></a>    |          <a href="https://github.com/Atlogit"><img src="https://avatars.githubusercontent.com/u/86947554?v=4" width="100" height="100" alt="Atlogit"/><br /><sub><b>Atlogit</b></sub></a>           |             <a href="https://github.com/dleen"><img src="https://avatars.githubusercontent.com/u/1297964?v=4" width="100" height="100" alt="dleen"/><br /><sub><b>dleen</b></sub></a>              |       <a href="https://github.com/dbasclpy"><img src="https://avatars.githubusercontent.com/u/139889137?v=4" width="100" height="100" alt="dbasclpy"/><br /><sub><b>dbasclpy</b></sub></a>        |       <a href="https://github.com/celestial-vault"><img src="https://avatars.githubusercontent.com/u/58194240?v=4" width="100" height="100" alt="celestial-vault"/><br /><sub><b>celestial-vault</b></sub></a>        |
-|       <a href="https://github.com/DeXtroTip"><img src="https://avatars.githubusercontent.com/u/21011087?v=4" width="100" height="100" alt="DeXtroTip"/><br /><sub><b>DeXtroTip</b></sub></a>       |                <a href="https://github.com/hesara"><img src="https://avatars.githubusercontent.com/u/1335918?v=4" width="100" height="100" alt="hesara"/><br /><sub><b>hesara</b></sub></a>                 |       <a href="https://github.com/eltociear"><img src="https://avatars.githubusercontent.com/u/22633385?v=4" width="100" height="100" alt="eltociear"/><br /><sub><b>eltociear</b></sub></a>        |  <a href="https://github.com/libertyteeth"><img src="https://avatars.githubusercontent.com/u/32841567?v=4" width="100" height="100" alt="libertyteeth"/><br /><sub><b>libertyteeth</b></sub></a>   | <a href="https://github.com/mamertofabian"><img src="https://avatars.githubusercontent.com/u/7698436?v=4" width="100" height="100" alt="mamertofabian"/><br /><sub><b>mamertofabian</b></sub></a> |            <a href="https://github.com/marvijo-code"><img src="https://avatars.githubusercontent.com/u/82562019?v=4" width="100" height="100" alt="marvijo-code"/><br /><sub><b>marvijo-code</b></sub></a>            |
-|             <a href="https://github.com/Sarke"><img src="https://avatars.githubusercontent.com/u/2719310?v=4" width="100" height="100" alt="Sarke"/><br /><sub><b>Sarke</b></sub></a>              |                  <a href="https://github.com/tgfjt"><img src="https://avatars.githubusercontent.com/u/2628239?v=4" width="100" height="100" alt="tgfjt"/><br /><sub><b>tgfjt</b></sub></a>                  |       <a href="https://github.com/vladstudio"><img src="https://avatars.githubusercontent.com/u/914320?v=4" width="100" height="100" alt="vladstudio"/><br /><sub><b>vladstudio</b></sub></a>       |            <a href="https://github.com/ashktn"><img src="https://avatars.githubusercontent.com/u/6723913?v=4" width="100" height="100" alt="ashktn"/><br /><sub><b>ashktn</b></sub></a>            |                                                                                                                                                                                                   |                                                                                                                                                                                                                       |
+<!-- START CONTRIBUTORS SECTION - AUTO-GENERATED, DO NOT EDIT MANUALLY -->
+
+|               <a href="https://github.com/mrubens"><img src="https://avatars.githubusercontent.com/u/2600?v=4" width="100" height="100" alt="mrubens"/><br /><sub><b>mrubens</b></sub></a>               |         <a href="https://github.com/saoudrizwan"><img src="https://avatars.githubusercontent.com/u/7799382?v=4" width="100" height="100" alt="saoudrizwan"/><br /><sub><b>saoudrizwan</b></sub></a>         |                   <a href="https://github.com/cte"><img src="https://avatars.githubusercontent.com/u/16332?v=4" width="100" height="100" alt="cte"/><br /><sub><b>cte</b></sub></a>                    |          <a href="https://github.com/samhvw8"><img src="https://avatars.githubusercontent.com/u/12538214?v=4" width="100" height="100" alt="samhvw8"/><br /><sub><b>samhvw8</b></sub></a>           |    <a href="https://github.com/daniel-lxs"><img src="https://avatars.githubusercontent.com/u/57051444?v=4" width="100" height="100" alt="daniel-lxs"/><br /><sub><b>daniel-lxs</b></sub></a>    |                   <a href="https://github.com/a8trejo"><img src="https://avatars.githubusercontent.com/u/62401433?v=4" width="100" height="100" alt="a8trejo"/><br /><sub><b>a8trejo</b></sub></a>                    |
+| :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
+|        <a href="https://github.com/ColemanRoo"><img src="https://avatars.githubusercontent.com/u/117104599?v=4" width="100" height="100" alt="ColemanRoo"/><br /><sub><b>ColemanRoo</b></sub></a>        |             <a href="https://github.com/stea9499"><img src="https://avatars.githubusercontent.com/u/4163795?v=4" width="100" height="100" alt="stea9499"/><br /><sub><b>stea9499</b></sub></a>              |     <a href="https://github.com/joemanley201"><img src="https://avatars.githubusercontent.com/u/8299960?v=4" width="100" height="100" alt="joemanley201"/><br /><sub><b>joemanley201</b></sub></a>     |       <a href="https://github.com/System233"><img src="https://avatars.githubusercontent.com/u/20336040?v=4" width="100" height="100" alt="System233"/><br /><sub><b>System233</b></sub></a>        |       <a href="https://github.com/jquanton"><img src="https://avatars.githubusercontent.com/u/88576563?v=4" width="100" height="100" alt="jquanton"/><br /><sub><b>jquanton</b></sub></a>       |              <a href="https://github.com/nissa-seru"><img src="https://avatars.githubusercontent.com/u/119150866?v=4" width="100" height="100" alt="nissa-seru"/><br /><sub><b>nissa-seru</b></sub></a>               |
+|    <a href="https://github.com/hannesrudolph"><img src="https://avatars.githubusercontent.com/u/49103247?v=4" width="100" height="100" alt="hannesrudolph"/><br /><sub><b>hannesrudolph</b></sub></a>    |             <a href="https://github.com/MuriloFP"><img src="https://avatars.githubusercontent.com/u/50873657?v=4" width="100" height="100" alt="MuriloFP"/><br /><sub><b>MuriloFP</b></sub></a>             |             <a href="https://github.com/NyxJae"><img src="https://avatars.githubusercontent.com/u/52313587?v=4" width="100" height="100" alt="NyxJae"/><br /><sub><b>NyxJae</b></sub></a>              |        <a href="https://github.com/punkpeye"><img src="https://avatars.githubusercontent.com/u/108313943?v=4" width="100" height="100" alt="punkpeye"/><br /><sub><b>punkpeye</b></sub></a>         |            <a href="https://github.com/d-oit"><img src="https://avatars.githubusercontent.com/u/6849456?v=4" width="100" height="100" alt="d-oit"/><br /><sub><b>d-oit</b></sub></a>            |            <a href="https://github.com/monotykamary"><img src="https://avatars.githubusercontent.com/u/1130103?v=4" width="100" height="100" alt="monotykamary"/><br /><sub><b>monotykamary</b></sub></a>             |
+|         <a href="https://github.com/lloydchang"><img src="https://avatars.githubusercontent.com/u/1329685?v=4" width="100" height="100" alt="lloydchang"/><br /><sub><b>lloydchang</b></sub></a>         | <a href="https://github.com/vigneshsubbiah16"><img src="https://avatars.githubusercontent.com/u/51325334?v=4" width="100" height="100" alt="vigneshsubbiah16"/><br /><sub><b>vigneshsubbiah16</b></sub></a> |            <a href="https://github.com/Szpadel"><img src="https://avatars.githubusercontent.com/u/1857251?v=4" width="100" height="100" alt="Szpadel"/><br /><sub><b>Szpadel</b></sub></a>             |       <a href="https://github.com/lupuletic"><img src="https://avatars.githubusercontent.com/u/105351510?v=4" width="100" height="100" alt="lupuletic"/><br /><sub><b>lupuletic</b></sub></a>       |        <a href="https://github.com/cannuri"><img src="https://avatars.githubusercontent.com/u/91494156?v=4" width="100" height="100" alt="cannuri"/><br /><sub><b>cannuri</b></sub></a>         | <a href="https://github.com/Smartsheet-JB-Brown"><img src="https://avatars.githubusercontent.com/u/171734120?v=4" width="100" height="100" alt="Smartsheet-JB-Brown"/><br /><sub><b>Smartsheet-JB-Brown</b></sub></a> |
+|           <a href="https://github.com/Premshay"><img src="https://avatars.githubusercontent.com/u/28099628?v=4" width="100" height="100" alt="Premshay"/><br /><sub><b>Premshay</b></sub></a>            |              <a href="https://github.com/psv2522"><img src="https://avatars.githubusercontent.com/u/87223770?v=4" width="100" height="100" alt="psv2522"/><br /><sub><b>psv2522</b></sub></a>               |      <a href="https://github.com/olweraltuve"><img src="https://avatars.githubusercontent.com/u/39308405?v=4" width="100" height="100" alt="olweraltuve"/><br /><sub><b>olweraltuve</b></sub></a>      |       <a href="https://github.com/RaySinner"><img src="https://avatars.githubusercontent.com/u/118297374?v=4" width="100" height="100" alt="RaySinner"/><br /><sub><b>RaySinner</b></sub></a>       |            <a href="https://github.com/qdaxb"><img src="https://avatars.githubusercontent.com/u/4157870?v=4" width="100" height="100" alt="qdaxb"/><br /><sub><b>qdaxb</b></sub></a>            |                <a href="https://github.com/feifei325"><img src="https://avatars.githubusercontent.com/u/46489071?v=4" width="100" height="100" alt="feifei325"/><br /><sub><b>feifei325</b></sub></a>                 |
+|      <a href="https://github.com/afshawnlotfi"><img src="https://avatars.githubusercontent.com/u/6283745?v=4" width="100" height="100" alt="afshawnlotfi"/><br /><sub><b>afshawnlotfi</b></sub></a>      |              <a href="https://github.com/emshvac"><img src="https://avatars.githubusercontent.com/u/121588911?v=4" width="100" height="100" alt="emshvac"/><br /><sub><b>emshvac</b></sub></a>              |         <a href="https://github.com/Lunchb0ne"><img src="https://avatars.githubusercontent.com/u/22198661?v=4" width="100" height="100" alt="Lunchb0ne"/><br /><sub><b>Lunchb0ne</b></sub></a>         |             <a href="https://github.com/sammcj"><img src="https://avatars.githubusercontent.com/u/862951?v=4" width="100" height="100" alt="sammcj"/><br /><sub><b>sammcj</b></sub></a>             |       <a href="https://github.com/dtrugman"><img src="https://avatars.githubusercontent.com/u/2451669?v=4" width="100" height="100" alt="dtrugman"/><br /><sub><b>dtrugman</b></sub></a>        |                 <a href="https://github.com/aitoroses"><img src="https://avatars.githubusercontent.com/u/1699368?v=4" width="100" height="100" alt="aitoroses"/><br /><sub><b>aitoroses</b></sub></a>                 |
+|           <a href="https://github.com/yt3trees"><img src="https://avatars.githubusercontent.com/u/57471763?v=4" width="100" height="100" alt="yt3trees"/><br /><sub><b>yt3trees</b></sub></a>            |              <a href="https://github.com/yongjer"><img src="https://avatars.githubusercontent.com/u/54315206?v=4" width="100" height="100" alt="yongjer"/><br /><sub><b>yongjer</b></sub></a>               |      <a href="https://github.com/vincentsong"><img src="https://avatars.githubusercontent.com/u/2343574?v=4" width="100" height="100" alt="vincentsong"/><br /><sub><b>vincentsong</b></sub></a>       | <a href="https://github.com/pugazhendhi-m"><img src="https://avatars.githubusercontent.com/u/132246623?v=4" width="100" height="100" alt="pugazhendhi-m"/><br /><sub><b>pugazhendhi-m</b></sub></a> |           <a href="https://github.com/eonghk"><img src="https://avatars.githubusercontent.com/u/139964?v=4" width="100" height="100" alt="eonghk"/><br /><sub><b>eonghk</b></sub></a>           |                  <a href="https://github.com/philfung"><img src="https://avatars.githubusercontent.com/u/1054593?v=4" width="100" height="100" alt="philfung"/><br /><sub><b>philfung</b></sub></a>                   |
+|               <a href="https://github.com/pdecat"><img src="https://avatars.githubusercontent.com/u/318490?v=4" width="100" height="100" alt="pdecat"/><br /><sub><b>pdecat</b></sub></a>                |                <a href="https://github.com/napter"><img src="https://avatars.githubusercontent.com/u/6260841?v=4" width="100" height="100" alt="napter"/><br /><sub><b>napter</b></sub></a>                 |                    <a href="https://github.com/mdp"><img src="https://avatars.githubusercontent.com/u/2868?v=4" width="100" height="100" alt="mdp"/><br /><sub><b>mdp</b></sub></a>                    |            <a href="https://github.com/jcbdev"><img src="https://avatars.githubusercontent.com/u/17152092?v=4" width="100" height="100" alt="jcbdev"/><br /><sub><b>jcbdev</b></sub></a>            |      <a href="https://github.com/benzntech"><img src="https://avatars.githubusercontent.com/u/4044180?v=4" width="100" height="100" alt="benzntech"/><br /><sub><b>benzntech</b></sub></a>      |              <a href="https://github.com/anton-otee"><img src="https://avatars.githubusercontent.com/u/149477749?v=4" width="100" height="100" alt="anton-otee"/><br /><sub><b>anton-otee</b></sub></a>               |
+|             <a href="https://github.com/AMHesch"><img src="https://avatars.githubusercontent.com/u/4777192?v=4" width="100" height="100" alt="AMHesch"/><br /><sub><b>AMHesch</b></sub></a>              |              <a href="https://github.com/bannzai"><img src="https://avatars.githubusercontent.com/u/10897361?v=4" width="100" height="100" alt="bannzai"/><br /><sub><b>bannzai</b></sub></a>               |           <a href="https://github.com/dairui1"><img src="https://avatars.githubusercontent.com/u/183250644?v=4" width="100" height="100" alt="dairui1"/><br /><sub><b>dairui1</b></sub></a>            |           <a href="https://github.com/dqroid"><img src="https://avatars.githubusercontent.com/u/192424994?v=4" width="100" height="100" alt="dqroid"/><br /><sub><b>dqroid</b></sub></a>            |      <a href="https://github.com/kinandan"><img src="https://avatars.githubusercontent.com/u/186135699?v=4" width="100" height="100" alt="kinandan"/><br /><sub><b>kinandan</b></sub></a>       |                       <a href="https://github.com/kohii"><img src="https://avatars.githubusercontent.com/u/6891780?v=4" width="100" height="100" alt="kohii"/><br /><sub><b>kohii</b></sub></a>                       |
+|       <a href="https://github.com/lightrabbit"><img src="https://avatars.githubusercontent.com/u/1521765?v=4" width="100" height="100" alt="lightrabbit"/><br /><sub><b>lightrabbit</b></sub></a>        |                   <a href="https://github.com/olup"><img src="https://avatars.githubusercontent.com/u/13785588?v=4" width="100" height="100" alt="olup"/><br /><sub><b>olup</b></sub></a>                   |      <a href="https://github.com/moqimoqidea"><img src="https://avatars.githubusercontent.com/u/39821951?v=4" width="100" height="100" alt="moqimoqidea"/><br /><sub><b>moqimoqidea</b></sub></a>      |        <a href="https://github.com/mosleyit"><img src="https://avatars.githubusercontent.com/u/189396442?v=4" width="100" height="100" alt="mosleyit"/><br /><sub><b>mosleyit</b></sub></a>         |       <a href="https://github.com/oprstchn"><img src="https://avatars.githubusercontent.com/u/16177972?v=4" width="100" height="100" alt="oprstchn"/><br /><sub><b>oprstchn</b></sub></a>       |               <a href="https://github.com/philipnext"><img src="https://avatars.githubusercontent.com/u/81944499?v=4" width="100" height="100" alt="philipnext"/><br /><sub><b>philipnext</b></sub></a>               |
+|      <a href="https://github.com/refactorthis"><img src="https://avatars.githubusercontent.com/u/3012240?v=4" width="100" height="100" alt="refactorthis"/><br /><sub><b>refactorthis</b></sub></a>      |      <a href="https://github.com/samir-nimbly"><img src="https://avatars.githubusercontent.com/u/112695483?v=4" width="100" height="100" alt="samir-nimbly"/><br /><sub><b>samir-nimbly</b></sub></a>       |              <a href="https://github.com/shaybc"><img src="https://avatars.githubusercontent.com/u/8535905?v=4" width="100" height="100" alt="shaybc"/><br /><sub><b>shaybc</b></sub></a>              |   <a href="https://github.com/shohei-ihaya"><img src="https://avatars.githubusercontent.com/u/25131938?v=4" width="100" height="100" alt="shohei-ihaya"/><br /><sub><b>shohei-ihaya</b></sub></a>   | <a href="https://github.com/student20880"><img src="https://avatars.githubusercontent.com/u/74263488?v=4" width="100" height="100" alt="student20880"/><br /><sub><b>student20880</b></sub></a> |          <a href="https://github.com/PretzelVector"><img src="https://avatars.githubusercontent.com/u/95664360?v=4" width="100" height="100" alt="PretzelVector"/><br /><sub><b>PretzelVector</b></sub></a>           |
+|       <a href="https://github.com/adamwlarson"><img src="https://avatars.githubusercontent.com/u/1392315?v=4" width="100" height="100" alt="adamwlarson"/><br /><sub><b>adamwlarson</b></sub></a>        |                <a href="https://github.com/alarno"><img src="https://avatars.githubusercontent.com/u/4355547?v=4" width="100" height="100" alt="alarno"/><br /><sub><b>alarno</b></sub></a>                 | <a href="https://github.com/andreastempsch"><img src="https://avatars.githubusercontent.com/u/117991125?v=4" width="100" height="100" alt="andreastempsch"/><br /><sub><b>andreastempsch</b></sub></a> |          <a href="https://github.com/Atlogit"><img src="https://avatars.githubusercontent.com/u/86947554?v=4" width="100" height="100" alt="Atlogit"/><br /><sub><b>Atlogit</b></sub></a>           |            <a href="https://github.com/dleen"><img src="https://avatars.githubusercontent.com/u/1297964?v=4" width="100" height="100" alt="dleen"/><br /><sub><b>dleen</b></sub></a>            |                 <a href="https://github.com/dbasclpy"><img src="https://avatars.githubusercontent.com/u/139889137?v=4" width="100" height="100" alt="dbasclpy"/><br /><sub><b>dbasclpy</b></sub></a>                  |
+| <a href="https://github.com/celestial-vault"><img src="https://avatars.githubusercontent.com/u/58194240?v=4" width="100" height="100" alt="celestial-vault"/><br /><sub><b>celestial-vault</b></sub></a> |           <a href="https://github.com/DeXtroTip"><img src="https://avatars.githubusercontent.com/u/21011087?v=4" width="100" height="100" alt="DeXtroTip"/><br /><sub><b>DeXtroTip</b></sub></a>            |              <a href="https://github.com/hesara"><img src="https://avatars.githubusercontent.com/u/1335918?v=4" width="100" height="100" alt="hesara"/><br /><sub><b>hesara</b></sub></a>              |       <a href="https://github.com/eltociear"><img src="https://avatars.githubusercontent.com/u/22633385?v=4" width="100" height="100" alt="eltociear"/><br /><sub><b>eltociear</b></sub></a>        | <a href="https://github.com/libertyteeth"><img src="https://avatars.githubusercontent.com/u/32841567?v=4" width="100" height="100" alt="libertyteeth"/><br /><sub><b>libertyteeth</b></sub></a> |           <a href="https://github.com/mamertofabian"><img src="https://avatars.githubusercontent.com/u/7698436?v=4" width="100" height="100" alt="mamertofabian"/><br /><sub><b>mamertofabian</b></sub></a>           |
+|     <a href="https://github.com/marvijo-code"><img src="https://avatars.githubusercontent.com/u/82562019?v=4" width="100" height="100" alt="marvijo-code"/><br /><sub><b>marvijo-code</b></sub></a>      |                  <a href="https://github.com/Sarke"><img src="https://avatars.githubusercontent.com/u/2719310?v=4" width="100" height="100" alt="Sarke"/><br /><sub><b>Sarke</b></sub></a>                  |               <a href="https://github.com/tgfjt"><img src="https://avatars.githubusercontent.com/u/2628239?v=4" width="100" height="100" alt="tgfjt"/><br /><sub><b>tgfjt</b></sub></a>                |       <a href="https://github.com/vladstudio"><img src="https://avatars.githubusercontent.com/u/914320?v=4" width="100" height="100" alt="vladstudio"/><br /><sub><b>vladstudio</b></sub></a>       |          <a href="https://github.com/ashktn"><img src="https://avatars.githubusercontent.com/u/6723913?v=4" width="100" height="100" alt="ashktn"/><br /><sub><b>ashktn</b></sub></a>           |                                                                                                                                                                                                                       |
 
 <!-- END CONTRIBUTORS SECTION -->
 
@@ -195,4 +209,4 @@ Thanks to all our contributors who have helped make Roo Code better!
 
 ---
 
-**Enjoy Roo Code!** Whether you keep it on a short leash or let it roam autonomously, we can’t wait to see what you build. If you have questions or feature ideas, drop by our [Reddit community](https://www.reddit.com/r/RooCode/) or [Discord](https://roocode.com/discord). Happy coding!
+**Enjoy Roo Code!** Whether you keep it on a short leash or let it roam autonomously, we can’t wait to see what you build. If you have questions or feature ideas, drop by our [Reddit community](https://www.reddit.com/r/RooCode/) or [Discord](https://discord.gg/roocode). Happy coding!

+ 8 - 0
esbuild.js

@@ -72,6 +72,14 @@ const extensionConfig = {
 		copyWasmFiles,
 		/* add to the end of plugins array */
 		esbuildProblemMatcherPlugin,
+		{
+			name: "alias-plugin",
+			setup(build) {
+				build.onResolve({ filter: /^pkce-challenge$/ }, (args) => {
+					return { path: require.resolve("pkce-challenge/dist/index.browser.js") }
+				})
+			},
+		},
 	],
 	entryPoints: ["src/extension.ts"],
 	format: "cjs",

+ 2 - 1
knip.json

@@ -16,7 +16,8 @@
 		"e2e/**",
 		"src/activate/**",
 		"src/exports/**",
-		"src/extension.ts"
+		"src/extension.ts",
+		"scripts/**"
 	],
 	"workspaces": {
 		"webview-ui": {

+ 77 - 0
locales/ca/CODE_OF_CONDUCT.md

@@ -0,0 +1,77 @@
+# Codi de Conducta del Pacte de Col·laboradors
+
+## El nostre Compromís
+
+En interès de fomentar un entorn obert i acollidor, nosaltres, com a
+col·laboradors i mantenidors, ens comprometem a fer de la participació en el nostre projecte i
+la nostra comunitat una experiència lliure d'assetjament per a tothom, independentment de l'edat, mida
+corporal, discapacitat, ètnia, característiques sexuals, identitat i expressió de gènere,
+nivell d'experiència, educació, estatus socioeconòmic, nacionalitat, aparença
+personal, raça, religió, o identitat i orientació sexual.
+
+## Els nostres Estàndards
+
+Exemples de comportament que contribueix a crear un entorn positiu
+inclouen:
+
+- Utilitzar llenguatge acollidor i inclusiu
+- Respectar els diferents punts de vista i experiències
+- Acceptar amb gràcia les crítiques constructives
+- Centrar-se en el que és millor per a la comunitat
+- Mostrar empatia envers altres membres de la comunitat
+
+Exemples de comportament inacceptable per part dels participants inclouen:
+
+- L'ús de llenguatge o imatges sexualitzades i atencions o
+  avenços sexuals no desitjats
+- Trolling, comentaris insultants/despectius, i atacs personals o polítics
+- Assetjament públic o privat
+- Publicar informació privada d'altres persones, com ara informació física o electrònica
+  adreça, sense permís explícit
+- Altres conductes que raonablement podrien considerar-se inadequades en un
+  entorn professional
+
+## Les nostres Responsabilitats
+
+Els mantenidors del projecte són responsables de clarificar els estàndards de comportament
+acceptable i s'espera que prenguin mesures correctives apropiades i justes en
+resposta a qualsevol cas de comportament inacceptable.
+
+Els mantenidors del projecte tenen el dret i la responsabilitat d'eliminar, editar o
+rebutjar comentaris, commits, codi, edicions wiki, incidències i altres contribucions
+que no estiguin alineades amb aquest Codi de Conducta, o de prohibir temporalment o
+permanentment qualsevol col·laborador per altres comportaments que considerin inapropiats,
+amenaçadors, ofensius o perjudicials.
+
+## Àmbit
+
+Aquest Codi de Conducta s'aplica tant als espais del projecte com als espais públics
+quan un individu representa el projecte o la seva comunitat. Exemples de
+representació d'un projecte o comunitat inclouen l'ús d'un correu electrònic oficial del projecte,
+publicar mitjançant un compte oficial de xarxes socials, o actuar com a representant designat
+en un esdeveniment en línia o fora de línia. La representació d'un projecte pot ser
+definida i clarificada addicionalment pels mantenidors del projecte.
+
+## Aplicació
+
+Els casos de comportament abusiu, assetjador o altrament inacceptable poden ser
+reportats contactant amb l'equip del projecte a [email protected]. Totes les queixes
+seran revisades i investigades i resultaran en una resposta que
+es consideri necessària i adequada a les circumstàncies. L'equip del projecte està
+obligat a mantenir la confidencialitat respecte al reportador d'un incident.
+Es poden publicar separadament més detalls de polítiques d'aplicació específiques.
+
+Els mantenidors del projecte que no segueixin o apliquin el Codi de Conducta de bona
+fe poden enfrontar-se a repercussions temporals o permanents determinades per altres
+membres del lideratge del projecte.
+
+## Atribució
+
+Aquest Codi de Conducta està adaptat de la [versió de Cline][cline_coc] del [Pacte de Col·laboradors][homepage], versió 1.4,
+disponible a https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
+
+[cline_coc]: https://github.com/cline/cline/blob/main/CODE_OF_CONDUCT.md
+[homepage]: https://www.contributor-covenant.org
+
+Per a respostes a preguntes freqüents sobre aquest codi de conducta, vegeu
+https://www.contributor-covenant.org/faq

+ 112 - 0
locales/ca/CONTRIBUTING.md

@@ -0,0 +1,112 @@
+# Contribuir a Roo Code
+
+Estem entusiasmats que estigueu interessats en contribuir a Roo Code. Ja sigui arreglant un error, afegint una funcionalitat o millorant la nostra documentació, cada contribució fa que Roo Code sigui més intel·ligent! Per mantenir la nostra comunitat vibrant i acollidora, tots els membres han de complir el nostre [Codi de Conducta](CODE_OF_CONDUCT.md).
+
+## Uniu-vos a la nostra comunitat
+
+Encoratgem fortament a tots els col·laboradors a unir-se a la nostra [comunitat de Discord](https://discord.gg/roocode)! Formar part del nostre servidor de Discord us ajuda a:
+
+- Obtenir ajuda i orientació en temps real sobre les vostres contribucions
+- Connectar amb altres col·laboradors i membres de l'equip principal
+- Mantenir-vos al dia sobre els desenvolupaments i prioritats del projecte
+- Participar en discussions que configuren el futur de Roo Code
+- Trobar oportunitats de col·laboració amb altres desenvolupadors
+
+## Informar d'errors o problemes
+
+Els informes d'errors ajuden a millorar Roo Code per a tothom! Abans de crear un nou informe, si us plau [cerqueu entre els existents](https://github.com/RooVetGit/Roo-Code/issues) per evitar duplicats. Quan estigueu a punt per informar d'un error, dirigiu-vos a la nostra [pàgina d'incidències](https://github.com/RooVetGit/Roo-Code/issues/new/choose) on trobareu una plantilla per ajudar-vos a completar la informació rellevant.
+
+<blockquote class='warning-note'>
+     🔐 <b>Important:</b> Si descobriu una vulnerabilitat de seguretat, utilitzeu l'<a href="https://github.com/RooVetGit/Roo-Code/security/advisories/new">eina de seguretat de Github per informar-ne privadament</a>.
+</blockquote>
+
+## Decidir en què treballar
+
+Buscant una bona primera contribució? Consulteu les incidències a la secció "Issue [Unassigned]" del nostre [Projecte de Github de Roo Code](https://github.com/orgs/RooVetGit/projects/1). Aquestes estan específicament seleccionades per a nous col·laboradors i àrees on ens encantaria rebre ajuda!
+
+També donem la benvinguda a contribucions a la nostra [documentació](https://docs.roocode.com/)! Ja sigui corregint errors tipogràfics, millorant guies existents o creant nou contingut educatiu - ens encantaria construir un repositori de recursos impulsat per la comunitat que ajudi a tothom a aprofitar al màxim Roo Code. Podeu fer clic a "Editar aquesta pàgina" a qualsevol pàgina per arribar ràpidament al lloc correcte a Github per editar el fitxer, o podeu anar directament a https://github.com/RooVetGit/Roo-Code-Docs.
+
+Si esteu planejant treballar en una funcionalitat més gran, si us plau creeu primer una [sol·licitud de funcionalitat](https://github.com/RooVetGit/Roo-Code/discussions/categories/feature-requests?discussions_q=is%3Aopen+category%3A%22Feature+Requests%22+sort%3Atop) perquè puguem discutir si s'alinea amb la visió de Roo Code.
+
+## Configuració de desenvolupament
+
+1. **Cloneu** el repositori:
+
+```sh
+git clone https://github.com/RooVetGit/Roo-Code.git
+```
+
+2. **Instal·leu les dependències**:
+
+```sh
+npm run install:all
+```
+
+3. **Inicieu la vista web (aplicació Vite/React amb HMR)**:
+
+```sh
+npm run dev
+```
+
+4. **Depuració**:
+   Premeu `F5` (o **Execució** → **Inicia la depuració**) a VSCode per obrir una nova sessió amb Roo Code carregat.
+
+Els canvis a la vista web apareixeran immediatament. Els canvis a l'extensió principal requeriran reiniciar l'amfitrió de l'extensió.
+
+Alternativament, podeu crear un .vsix i instal·lar-lo directament a VSCode:
+
+```sh
+npm run build
+```
+
+Apareixerà un fitxer `.vsix` al directori `bin/` que es pot instal·lar amb:
+
+```sh
+code --install-extension bin/roo-cline-<version>.vsix
+```
+
+## Escriure i enviar codi
+
+Qualsevol persona pot contribuir amb codi a Roo Code, però us demanem que seguiu aquestes directrius per assegurar que les vostres contribucions puguin ser integrades sense problemes:
+
+1. **Mantingueu les Pull Requests enfocades**
+
+    - Limiteu les PR a una sola funcionalitat o correcció d'error
+    - Dividiu els canvis més grans en PR més petites i relacionades
+    - Dividiu els canvis en commits lògics que puguin ser revisats independentment
+
+2. **Qualitat del codi**
+
+    - Totes les PR han de passar les comprovacions de CI que inclouen tant anàlisi com formatació
+    - Solucioneu qualsevol advertència o error d'ESLint abans d'enviar
+    - Responeu a tots els comentaris d'Ellipsis, la nostra eina automatitzada de revisió de codi
+    - Seguiu les millors pràctiques de TypeScript i mantingueu la seguretat de tipus
+
+3. **Proves**
+
+    - Afegiu proves per a noves funcionalitats
+    - Executeu `npm test` per assegurar que totes les proves passin
+    - Actualitzeu les proves existents si els vostres canvis les afecten
+    - Incloeu tant proves unitàries com proves d'integració quan sigui apropiat
+
+4. **Directrius de commits**
+
+    - Escriviu missatges de commit clars i descriptius
+    - Feu referència a incidències rellevants als commits utilitzant #número-incidència
+
+5. **Abans d'enviar**
+
+    - Rebaseu la vostra branca sobre l'última main
+    - Assegureu-vos que la vostra branca es construeix amb èxit
+    - Comproveu doblement que totes les proves passen
+    - Reviseu els vostres canvis per qualsevol codi de depuració o registres de consola
+
+6. **Descripció de la Pull Request**
+    - Descriviu clarament què fan els vostres canvis
+    - Incloeu passos per provar els canvis
+    - Enumereu qualsevol canvi important
+    - Afegiu captures de pantalla per a canvis d'interfície d'usuari
+
+## Acord de contribució
+
+En enviar una pull request, accepteu que les vostres contribucions estaran sota la mateixa llicència que el projecte ([Apache 2.0](../LICENSE)).

+ 211 - 0
locales/ca/README.md

@@ -0,0 +1,211 @@
+<div align="center">
+<sub>
+
+[English](../../README.md) • Català • [Deutsch](../../locales/de/README.md) • [Español](../../locales/es/README.md) • [Français](../../locales/fr/README.md) • [हिन्दी](../../locales/hi/README.md) • [Italiano](../../locales/it/README.md)
+
+</sub>
+<sub>
+
+[日本語](../../locales/ja/README.md) • [한국어](../../locales/ko/README.md) • [Polski](../../locales/pl/README.md) • [Português (BR)](../../locales/pt-BR/README.md) • [Türkçe](../../locales/tr/README.md) • [Tiếng Việt](../../locales/vi/README.md) • [简体中文](../../locales/zh-CN/README.md) • [繁體中文](../../locales/zh-TW/README.md)
+
+</sub>
+</div>
+<br>
+<div align="center">
+  <h2>Uniu-vos a la Comunitat Roo Code</h2>
+  <p>Connecteu-vos amb desenvolupadors, contribuïu amb idees i manteniu-vos al dia amb les últimes eines de programació amb IA.</p>
+  
+  <a href="https://discord.gg/roocode" target="_blank"><img src="https://img.shields.io/badge/Uniu%2Dvos%20a%20Discord-5865F2?style=for-the-badge&logo=discord&logoColor=white" alt="Uniu-vos a Discord"></a>
+  <a href="https://www.reddit.com/r/RooCode/" target="_blank"><img src="https://img.shields.io/badge/Uniu%2Dvos%20a%20Reddit-FF4500?style=for-the-badge&logo=reddit&logoColor=white" alt="Uniu-vos a Reddit"></a>
+  
+</div>
+<br>
+<br>
+
+<div align="center">
+<h1>Roo Code (abans Roo Cline)</h1>
+
+<a href="https://marketplace.visualstudio.com/items?itemName=RooVeterinaryInc.roo-cline" target="_blank"><img src="https://img.shields.io/badge/Descarregueu%20al%20VS%20Marketplace-blue?style=for-the-badge&logo=visualstudiocode&logoColor=white" alt="Descarregueu al VS Marketplace"></a>
+<a href="https://github.com/RooVetGit/Roo-Code/discussions/categories/feature-requests?discussions_q=is%3Aopen+category%3A%22Feature+Requests%22+sort%3Atop" target="_blank"><img src="https://img.shields.io/badge/Sol·licituds%20de%20funcions-yellow?style=for-the-badge" alt="Sol·licituds de funcions"></a>
+<a href="https://marketplace.visualstudio.com/items?itemName=RooVeterinaryInc.roo-cline&ssr=false#review-details" target="_blank"><img src="https://img.shields.io/badge/Valoreu%20%26%20Reviseu-green?style=for-the-badge" alt="Valoreu & Reviseu"></a>
+<a href="https://docs.roocode.com" target="_blank"><img src="https://img.shields.io/badge/Documentació-6B46C1?style=for-the-badge&logo=readthedocs&logoColor=white" alt="Documentació"></a>
+
+</div>
+
+**Roo Code** és un **agent de programació autònom** impulsat per IA que viu en el vostre editor. Pot:
+
+- Comunicar-se en llenguatge natural
+- Llegir i escriure fitxers directament en el vostre espai de treball
+- Executar comandes de terminal
+- Automatitzar accions del navegador
+- Integrar-se amb qualsevol API/model compatible amb OpenAI o personalitzat
+- Adaptar la seva "personalitat" i capacitats mitjançant **Modes Personalitzats**
+
+Tant si busqueu un soci de programació flexible, un arquitecte de sistemes o rols especialitzats com un enginyer de control de qualitat o un gestor de producte, Roo Code us pot ajudar a construir programari de manera més eficient.
+
+Consulteu el [CHANGELOG](../CHANGELOG.md) per a actualitzacions i correccions detallades.
+
+---
+
+## 🎉 Roo Code 3.8 Llançat
+
+Roo Code 3.8 ja està disponible amb millores de rendiment, noves funcionalitats i correccions d'errors.
+
+- Punts de control asíncrons més ràpids
+- Suport per a fitxers .rooignore
+- Problemes de terminal i pantalla grisa solucionats
+- Roo Code pot executar-se en múltiples finestres
+- Estratègia d'edició multi-diff experimental
+- Comunicació de subtasca a tasca principal
+- Proveïdor DeepSeek actualitzat
+- Nou proveïdor "Human Relay"
+
+---
+
+## Què pot fer Roo Code?
+
+- 🚀 **Generar codi** a partir de descripcions en llenguatge natural
+- 🔧 **Refactoritzar i depurar** codi existent
+- 📝 **Escriure i actualitzar** documentació
+- 🤔 **Respondre preguntes** sobre el vostre codi
+- 🔄 **Automatitzar** tasques repetitives
+- 🏗️ **Crear** nous fitxers i projectes
+
+## Inici ràpid
+
+1. [Instal·leu Roo Code](https://docs.roocode.com/getting-started/installing)
+2. [Connecteu el vostre proveïdor d'IA](https://docs.roocode.com/getting-started/connecting-api-provider)
+3. [Proveu la vostra primera tasca](https://docs.roocode.com/getting-started/your-first-task)
+
+## Característiques principals
+
+### Múltiples modes
+
+Roo Code s'adapta a les vostres necessitats amb [modes](https://docs.roocode.com/basic-usage/modes) especialitzats:
+
+- **Mode Codi:** Per a tasques de programació de propòsit general
+- **Mode Arquitecte:** Per a planificació i lideratge tècnic
+- **Mode Pregunta:** Per a respondre preguntes i proporcionar informació
+- **Mode Depuració:** Per a diagnòstic sistemàtic de problemes
+- **[Modes personalitzats](https://docs.roocode.com/advanced-usage/custom-modes):** Creeu personatges especialitzats il·limitats per a auditoria de seguretat, optimització de rendiment, documentació o qualsevol altra tasca
+
+### Eines intel·ligents
+
+Roo Code ve amb potents [eines](https://docs.roocode.com/basic-usage/using-tools) que poden:
+
+- Llegir i escriure fitxers en el vostre projecte
+- Executar comandes en el vostre terminal de VS Code
+- Controlar un navegador web
+- Utilitzar eines externes a través del [MCP (Model Context Protocol)](https://docs.roocode.com/advanced-usage/mcp)
+
+MCP amplia les capacitats de Roo Code permetent-vos afegir eines personalitzades il·limitades. Integreu amb APIs externes, connecteu-vos a bases de dades o creeu eines de desenvolupament especialitzades - MCP proporciona el marc per expandir la funcionalitat de Roo Code per satisfer les vostres necessitats específiques.
+
+### Personalització
+
+Feu que Roo Code funcioni a la vostra manera amb:
+
+- [Instruccions personalitzades](https://docs.roocode.com/advanced-usage/custom-instructions) per a comportament personalitzat
+- [Modes personalitzats](https://docs.roocode.com/advanced-usage/custom-modes) per a tasques especialitzades
+- [Models locals](https://docs.roocode.com/advanced-usage/local-models) per a ús offline
+- [Configuració d'aprovació automàtica](https://docs.roocode.com/advanced-usage/auto-approving-actions) per a fluxos de treball més ràpids
+
+## Recursos
+
+### Documentació
+
+- [Guia d'ús bàsic](https://docs.roocode.com/basic-usage/the-chat-interface)
+- [Funcionalitats avançades](https://docs.roocode.com/advanced-usage/auto-approving-actions)
+- [Preguntes freqüents](https://docs.roocode.com/faq)
+
+### Comunitat
+
+- **Discord:** [Uniu-vos al nostre servidor de Discord](https://discord.gg/roocode) per a ajuda en temps real i discussions
+- **Reddit:** [Visiteu el nostre subreddit](https://www.reddit.com/r/RooCode) per compartir experiències i consells
+- **GitHub:** [Informeu de problemes](https://github.com/RooVetGit/Roo-Code/issues) o [sol·liciteu funcionalitats](https://github.com/RooVetGit/Roo-Code/discussions/categories/feature-requests?discussions_q=is%3Aopen+category%3A%22Feature+Requests%22+sort%3Atop)
+
+---
+
+## Configuració i desenvolupament local
+
+1. **Cloneu** el repositori:
+
+```sh
+git clone https://github.com/RooVetGit/Roo-Code.git
+```
+
+2. **Instal·leu les dependències**:
+
+```sh
+npm run install:all
+```
+
+3. **Inicieu la vista web (aplicació Vite/React amb HMR)**:
+
+```sh
+npm run dev
+```
+
+4. **Depuració**:
+   Premeu `F5` (o **Execució** → **Inicia la depuració**) a VSCode per obrir una nova sessió amb Roo Code carregat.
+
+Els canvis a la vista web apareixeran immediatament. Els canvis a l'extensió principal requeriran reiniciar l'amfitrió de l'extensió.
+
+Alternativament, podeu crear un .vsix i instal·lar-lo directament a VSCode:
+
+```sh
+npm run build
+```
+
+Apareixerà un fitxer `.vsix` al directori `bin/` que es pot instal·lar amb:
+
+```sh
+code --install-extension bin/roo-cline-<version>.vsix
+```
+
+Utilitzem [changesets](https://github.com/changesets/changesets) per a la gestió de versions i publicació. Consulteu el nostre `CHANGELOG.md` per a notes de llançament.
+
+---
+
+## Avís legal
+
+**Tingueu en compte** que Roo Veterinary, Inc **no** fa cap representació ni garantia pel que fa a qualsevol codi, model o altres eines proporcionades o posades a disposició en relació amb Roo Code, qualsevol eina de tercers associada, o qualsevol resultat. Assumiu **tots els riscos** associats amb l'ús de tals eines o resultats; aquestes eines es proporcionen "TAL COM ESTAN" i "SEGONS DISPONIBILITAT". Aquests riscos poden incloure, sense limitació, infraccions de propietat intel·lectual, vulnerabilitats o atacs cibernètics, biaixos, inexactituds, errors, defectes, virus, temps d'inactivitat, pèrdua o dany de propietat i/o lesions personals. Sou únicament responsables del vostre ús de tals eines o resultats (incloent, sense limitació, la legalitat, idoneïtat i resultats d'aquests).
+
+---
+
+## Contribucions
+
+Ens encanten les contribucions de la comunitat! Comenceu llegint el nostre [CONTRIBUTING.md](CONTRIBUTING.md).
+
+---
+
+## Col·laboradors
+
+Gràcies a tots els nostres col·laboradors que han ajudat a millorar Roo Code!
+
+<!-- START CONTRIBUTORS SECTION - AUTO-GENERATED, DO NOT EDIT MANUALLY -->
+
+|               <a href="https://github.com/mrubens"><img src="https://avatars.githubusercontent.com/u/2600?v=4" width="100" height="100" alt="mrubens"/><br /><sub><b>mrubens</b></sub></a>               |         <a href="https://github.com/saoudrizwan"><img src="https://avatars.githubusercontent.com/u/7799382?v=4" width="100" height="100" alt="saoudrizwan"/><br /><sub><b>saoudrizwan</b></sub></a>         |                   <a href="https://github.com/cte"><img src="https://avatars.githubusercontent.com/u/16332?v=4" width="100" height="100" alt="cte"/><br /><sub><b>cte</b></sub></a>                    |          <a href="https://github.com/samhvw8"><img src="https://avatars.githubusercontent.com/u/12538214?v=4" width="100" height="100" alt="samhvw8"/><br /><sub><b>samhvw8</b></sub></a>           |    <a href="https://github.com/daniel-lxs"><img src="https://avatars.githubusercontent.com/u/57051444?v=4" width="100" height="100" alt="daniel-lxs"/><br /><sub><b>daniel-lxs</b></sub></a>    |                   <a href="https://github.com/a8trejo"><img src="https://avatars.githubusercontent.com/u/62401433?v=4" width="100" height="100" alt="a8trejo"/><br /><sub><b>a8trejo</b></sub></a>                    |
+| :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
+|        <a href="https://github.com/ColemanRoo"><img src="https://avatars.githubusercontent.com/u/117104599?v=4" width="100" height="100" alt="ColemanRoo"/><br /><sub><b>ColemanRoo</b></sub></a>        |             <a href="https://github.com/stea9499"><img src="https://avatars.githubusercontent.com/u/4163795?v=4" width="100" height="100" alt="stea9499"/><br /><sub><b>stea9499</b></sub></a>              |     <a href="https://github.com/joemanley201"><img src="https://avatars.githubusercontent.com/u/8299960?v=4" width="100" height="100" alt="joemanley201"/><br /><sub><b>joemanley201</b></sub></a>     |       <a href="https://github.com/System233"><img src="https://avatars.githubusercontent.com/u/20336040?v=4" width="100" height="100" alt="System233"/><br /><sub><b>System233</b></sub></a>        |       <a href="https://github.com/jquanton"><img src="https://avatars.githubusercontent.com/u/88576563?v=4" width="100" height="100" alt="jquanton"/><br /><sub><b>jquanton</b></sub></a>       |              <a href="https://github.com/nissa-seru"><img src="https://avatars.githubusercontent.com/u/119150866?v=4" width="100" height="100" alt="nissa-seru"/><br /><sub><b>nissa-seru</b></sub></a>               |
+|    <a href="https://github.com/hannesrudolph"><img src="https://avatars.githubusercontent.com/u/49103247?v=4" width="100" height="100" alt="hannesrudolph"/><br /><sub><b>hannesrudolph</b></sub></a>    |             <a href="https://github.com/MuriloFP"><img src="https://avatars.githubusercontent.com/u/50873657?v=4" width="100" height="100" alt="MuriloFP"/><br /><sub><b>MuriloFP</b></sub></a>             |             <a href="https://github.com/NyxJae"><img src="https://avatars.githubusercontent.com/u/52313587?v=4" width="100" height="100" alt="NyxJae"/><br /><sub><b>NyxJae</b></sub></a>              |        <a href="https://github.com/punkpeye"><img src="https://avatars.githubusercontent.com/u/108313943?v=4" width="100" height="100" alt="punkpeye"/><br /><sub><b>punkpeye</b></sub></a>         |            <a href="https://github.com/d-oit"><img src="https://avatars.githubusercontent.com/u/6849456?v=4" width="100" height="100" alt="d-oit"/><br /><sub><b>d-oit</b></sub></a>            |            <a href="https://github.com/monotykamary"><img src="https://avatars.githubusercontent.com/u/1130103?v=4" width="100" height="100" alt="monotykamary"/><br /><sub><b>monotykamary</b></sub></a>             |
+|         <a href="https://github.com/lloydchang"><img src="https://avatars.githubusercontent.com/u/1329685?v=4" width="100" height="100" alt="lloydchang"/><br /><sub><b>lloydchang</b></sub></a>         | <a href="https://github.com/vigneshsubbiah16"><img src="https://avatars.githubusercontent.com/u/51325334?v=4" width="100" height="100" alt="vigneshsubbiah16"/><br /><sub><b>vigneshsubbiah16</b></sub></a> |            <a href="https://github.com/Szpadel"><img src="https://avatars.githubusercontent.com/u/1857251?v=4" width="100" height="100" alt="Szpadel"/><br /><sub><b>Szpadel</b></sub></a>             |       <a href="https://github.com/lupuletic"><img src="https://avatars.githubusercontent.com/u/105351510?v=4" width="100" height="100" alt="lupuletic"/><br /><sub><b>lupuletic</b></sub></a>       |        <a href="https://github.com/cannuri"><img src="https://avatars.githubusercontent.com/u/91494156?v=4" width="100" height="100" alt="cannuri"/><br /><sub><b>cannuri</b></sub></a>         | <a href="https://github.com/Smartsheet-JB-Brown"><img src="https://avatars.githubusercontent.com/u/171734120?v=4" width="100" height="100" alt="Smartsheet-JB-Brown"/><br /><sub><b>Smartsheet-JB-Brown</b></sub></a> |
+|           <a href="https://github.com/Premshay"><img src="https://avatars.githubusercontent.com/u/28099628?v=4" width="100" height="100" alt="Premshay"/><br /><sub><b>Premshay</b></sub></a>            |              <a href="https://github.com/psv2522"><img src="https://avatars.githubusercontent.com/u/87223770?v=4" width="100" height="100" alt="psv2522"/><br /><sub><b>psv2522</b></sub></a>               |      <a href="https://github.com/olweraltuve"><img src="https://avatars.githubusercontent.com/u/39308405?v=4" width="100" height="100" alt="olweraltuve"/><br /><sub><b>olweraltuve</b></sub></a>      |       <a href="https://github.com/RaySinner"><img src="https://avatars.githubusercontent.com/u/118297374?v=4" width="100" height="100" alt="RaySinner"/><br /><sub><b>RaySinner</b></sub></a>       |            <a href="https://github.com/qdaxb"><img src="https://avatars.githubusercontent.com/u/4157870?v=4" width="100" height="100" alt="qdaxb"/><br /><sub><b>qdaxb</b></sub></a>            |                <a href="https://github.com/feifei325"><img src="https://avatars.githubusercontent.com/u/46489071?v=4" width="100" height="100" alt="feifei325"/><br /><sub><b>feifei325</b></sub></a>                 |
+|      <a href="https://github.com/afshawnlotfi"><img src="https://avatars.githubusercontent.com/u/6283745?v=4" width="100" height="100" alt="afshawnlotfi"/><br /><sub><b>afshawnlotfi</b></sub></a>      |              <a href="https://github.com/emshvac"><img src="https://avatars.githubusercontent.com/u/121588911?v=4" width="100" height="100" alt="emshvac"/><br /><sub><b>emshvac</b></sub></a>              |         <a href="https://github.com/Lunchb0ne"><img src="https://avatars.githubusercontent.com/u/22198661?v=4" width="100" height="100" alt="Lunchb0ne"/><br /><sub><b>Lunchb0ne</b></sub></a>         |             <a href="https://github.com/sammcj"><img src="https://avatars.githubusercontent.com/u/862951?v=4" width="100" height="100" alt="sammcj"/><br /><sub><b>sammcj</b></sub></a>             |       <a href="https://github.com/dtrugman"><img src="https://avatars.githubusercontent.com/u/2451669?v=4" width="100" height="100" alt="dtrugman"/><br /><sub><b>dtrugman</b></sub></a>        |                 <a href="https://github.com/aitoroses"><img src="https://avatars.githubusercontent.com/u/1699368?v=4" width="100" height="100" alt="aitoroses"/><br /><sub><b>aitoroses</b></sub></a>                 |
+|           <a href="https://github.com/yt3trees"><img src="https://avatars.githubusercontent.com/u/57471763?v=4" width="100" height="100" alt="yt3trees"/><br /><sub><b>yt3trees</b></sub></a>            |              <a href="https://github.com/yongjer"><img src="https://avatars.githubusercontent.com/u/54315206?v=4" width="100" height="100" alt="yongjer"/><br /><sub><b>yongjer</b></sub></a>               |      <a href="https://github.com/vincentsong"><img src="https://avatars.githubusercontent.com/u/2343574?v=4" width="100" height="100" alt="vincentsong"/><br /><sub><b>vincentsong</b></sub></a>       | <a href="https://github.com/pugazhendhi-m"><img src="https://avatars.githubusercontent.com/u/132246623?v=4" width="100" height="100" alt="pugazhendhi-m"/><br /><sub><b>pugazhendhi-m</b></sub></a> |           <a href="https://github.com/eonghk"><img src="https://avatars.githubusercontent.com/u/139964?v=4" width="100" height="100" alt="eonghk"/><br /><sub><b>eonghk</b></sub></a>           |                  <a href="https://github.com/philfung"><img src="https://avatars.githubusercontent.com/u/1054593?v=4" width="100" height="100" alt="philfung"/><br /><sub><b>philfung</b></sub></a>                   |
+|               <a href="https://github.com/pdecat"><img src="https://avatars.githubusercontent.com/u/318490?v=4" width="100" height="100" alt="pdecat"/><br /><sub><b>pdecat</b></sub></a>                |                <a href="https://github.com/napter"><img src="https://avatars.githubusercontent.com/u/6260841?v=4" width="100" height="100" alt="napter"/><br /><sub><b>napter</b></sub></a>                 |                    <a href="https://github.com/mdp"><img src="https://avatars.githubusercontent.com/u/2868?v=4" width="100" height="100" alt="mdp"/><br /><sub><b>mdp</b></sub></a>                    |            <a href="https://github.com/jcbdev"><img src="https://avatars.githubusercontent.com/u/17152092?v=4" width="100" height="100" alt="jcbdev"/><br /><sub><b>jcbdev</b></sub></a>            |      <a href="https://github.com/benzntech"><img src="https://avatars.githubusercontent.com/u/4044180?v=4" width="100" height="100" alt="benzntech"/><br /><sub><b>benzntech</b></sub></a>      |              <a href="https://github.com/anton-otee"><img src="https://avatars.githubusercontent.com/u/149477749?v=4" width="100" height="100" alt="anton-otee"/><br /><sub><b>anton-otee</b></sub></a>               |
+|             <a href="https://github.com/AMHesch"><img src="https://avatars.githubusercontent.com/u/4777192?v=4" width="100" height="100" alt="AMHesch"/><br /><sub><b>AMHesch</b></sub></a>              |              <a href="https://github.com/bannzai"><img src="https://avatars.githubusercontent.com/u/10897361?v=4" width="100" height="100" alt="bannzai"/><br /><sub><b>bannzai</b></sub></a>               |           <a href="https://github.com/dairui1"><img src="https://avatars.githubusercontent.com/u/183250644?v=4" width="100" height="100" alt="dairui1"/><br /><sub><b>dairui1</b></sub></a>            |           <a href="https://github.com/dqroid"><img src="https://avatars.githubusercontent.com/u/192424994?v=4" width="100" height="100" alt="dqroid"/><br /><sub><b>dqroid</b></sub></a>            |      <a href="https://github.com/kinandan"><img src="https://avatars.githubusercontent.com/u/186135699?v=4" width="100" height="100" alt="kinandan"/><br /><sub><b>kinandan</b></sub></a>       |                       <a href="https://github.com/kohii"><img src="https://avatars.githubusercontent.com/u/6891780?v=4" width="100" height="100" alt="kohii"/><br /><sub><b>kohii</b></sub></a>                       |
+|       <a href="https://github.com/lightrabbit"><img src="https://avatars.githubusercontent.com/u/1521765?v=4" width="100" height="100" alt="lightrabbit"/><br /><sub><b>lightrabbit</b></sub></a>        |                   <a href="https://github.com/olup"><img src="https://avatars.githubusercontent.com/u/13785588?v=4" width="100" height="100" alt="olup"/><br /><sub><b>olup</b></sub></a>                   |      <a href="https://github.com/moqimoqidea"><img src="https://avatars.githubusercontent.com/u/39821951?v=4" width="100" height="100" alt="moqimoqidea"/><br /><sub><b>moqimoqidea</b></sub></a>      |        <a href="https://github.com/mosleyit"><img src="https://avatars.githubusercontent.com/u/189396442?v=4" width="100" height="100" alt="mosleyit"/><br /><sub><b>mosleyit</b></sub></a>         |       <a href="https://github.com/oprstchn"><img src="https://avatars.githubusercontent.com/u/16177972?v=4" width="100" height="100" alt="oprstchn"/><br /><sub><b>oprstchn</b></sub></a>       |               <a href="https://github.com/philipnext"><img src="https://avatars.githubusercontent.com/u/81944499?v=4" width="100" height="100" alt="philipnext"/><br /><sub><b>philipnext</b></sub></a>               |
+|      <a href="https://github.com/refactorthis"><img src="https://avatars.githubusercontent.com/u/3012240?v=4" width="100" height="100" alt="refactorthis"/><br /><sub><b>refactorthis</b></sub></a>      |      <a href="https://github.com/samir-nimbly"><img src="https://avatars.githubusercontent.com/u/112695483?v=4" width="100" height="100" alt="samir-nimbly"/><br /><sub><b>samir-nimbly</b></sub></a>       |              <a href="https://github.com/shaybc"><img src="https://avatars.githubusercontent.com/u/8535905?v=4" width="100" height="100" alt="shaybc"/><br /><sub><b>shaybc</b></sub></a>              |   <a href="https://github.com/shohei-ihaya"><img src="https://avatars.githubusercontent.com/u/25131938?v=4" width="100" height="100" alt="shohei-ihaya"/><br /><sub><b>shohei-ihaya</b></sub></a>   | <a href="https://github.com/student20880"><img src="https://avatars.githubusercontent.com/u/74263488?v=4" width="100" height="100" alt="student20880"/><br /><sub><b>student20880</b></sub></a> |          <a href="https://github.com/PretzelVector"><img src="https://avatars.githubusercontent.com/u/95664360?v=4" width="100" height="100" alt="PretzelVector"/><br /><sub><b>PretzelVector</b></sub></a>           |
+|       <a href="https://github.com/adamwlarson"><img src="https://avatars.githubusercontent.com/u/1392315?v=4" width="100" height="100" alt="adamwlarson"/><br /><sub><b>adamwlarson</b></sub></a>        |                <a href="https://github.com/alarno"><img src="https://avatars.githubusercontent.com/u/4355547?v=4" width="100" height="100" alt="alarno"/><br /><sub><b>alarno</b></sub></a>                 | <a href="https://github.com/andreastempsch"><img src="https://avatars.githubusercontent.com/u/117991125?v=4" width="100" height="100" alt="andreastempsch"/><br /><sub><b>andreastempsch</b></sub></a> |          <a href="https://github.com/Atlogit"><img src="https://avatars.githubusercontent.com/u/86947554?v=4" width="100" height="100" alt="Atlogit"/><br /><sub><b>Atlogit</b></sub></a>           |            <a href="https://github.com/dleen"><img src="https://avatars.githubusercontent.com/u/1297964?v=4" width="100" height="100" alt="dleen"/><br /><sub><b>dleen</b></sub></a>            |                 <a href="https://github.com/dbasclpy"><img src="https://avatars.githubusercontent.com/u/139889137?v=4" width="100" height="100" alt="dbasclpy"/><br /><sub><b>dbasclpy</b></sub></a>                  |
+| <a href="https://github.com/celestial-vault"><img src="https://avatars.githubusercontent.com/u/58194240?v=4" width="100" height="100" alt="celestial-vault"/><br /><sub><b>celestial-vault</b></sub></a> |           <a href="https://github.com/DeXtroTip"><img src="https://avatars.githubusercontent.com/u/21011087?v=4" width="100" height="100" alt="DeXtroTip"/><br /><sub><b>DeXtroTip</b></sub></a>            |              <a href="https://github.com/hesara"><img src="https://avatars.githubusercontent.com/u/1335918?v=4" width="100" height="100" alt="hesara"/><br /><sub><b>hesara</b></sub></a>              |       <a href="https://github.com/eltociear"><img src="https://avatars.githubusercontent.com/u/22633385?v=4" width="100" height="100" alt="eltociear"/><br /><sub><b>eltociear</b></sub></a>        | <a href="https://github.com/libertyteeth"><img src="https://avatars.githubusercontent.com/u/32841567?v=4" width="100" height="100" alt="libertyteeth"/><br /><sub><b>libertyteeth</b></sub></a> |           <a href="https://github.com/mamertofabian"><img src="https://avatars.githubusercontent.com/u/7698436?v=4" width="100" height="100" alt="mamertofabian"/><br /><sub><b>mamertofabian</b></sub></a>           |
+|     <a href="https://github.com/marvijo-code"><img src="https://avatars.githubusercontent.com/u/82562019?v=4" width="100" height="100" alt="marvijo-code"/><br /><sub><b>marvijo-code</b></sub></a>      |                  <a href="https://github.com/Sarke"><img src="https://avatars.githubusercontent.com/u/2719310?v=4" width="100" height="100" alt="Sarke"/><br /><sub><b>Sarke</b></sub></a>                  |               <a href="https://github.com/tgfjt"><img src="https://avatars.githubusercontent.com/u/2628239?v=4" width="100" height="100" alt="tgfjt"/><br /><sub><b>tgfjt</b></sub></a>                |       <a href="https://github.com/vladstudio"><img src="https://avatars.githubusercontent.com/u/914320?v=4" width="100" height="100" alt="vladstudio"/><br /><sub><b>vladstudio</b></sub></a>       |          <a href="https://github.com/ashktn"><img src="https://avatars.githubusercontent.com/u/6723913?v=4" width="100" height="100" alt="ashktn"/><br /><sub><b>ashktn</b></sub></a>           |                                                                                                                                                                                                                       |
+
+<!-- END CONTRIBUTORS SECTION -->
+
+## Llicència
+
+[Apache 2.0 © 2025 Roo Veterinary, Inc.](../LICENSE)
+
+---
+
+**Gaudiu de Roo Code!** Tant si el manteniu amb corretja curta com si el deixeu actuar de forma autònoma, estem impacients per veure què construïu. Si teniu preguntes o idees per a noves funcionalitats, passeu per la nostra [comunitat de Reddit](https://www.reddit.com/r/RooCode/) o [Discord](https://discord.gg/roocode). Feliç programació!

+ 76 - 0
locales/de/CODE_OF_CONDUCT.md

@@ -0,0 +1,76 @@
+# Verhaltenskodex für Mitwirkende
+
+## Unser Versprechen
+
+Im Interesse der Förderung eines offenen und einladenden Umfelds verpflichten wir uns als
+Mitwirkende und Betreuer, die Teilnahme an unserem Projekt und
+unserer Community zu einer belästigungsfreien Erfahrung für alle zu machen, unabhängig von Alter, Körpergröße,
+Behinderung, ethnischer Zugehörigkeit, Geschlechtsmerkmalen, Geschlechtsidentität und -ausdruck,
+Erfahrungsniveau, Bildung, sozioökonomischem Status, Nationalität, persönlichem
+Aussehen, Rasse, Religion oder sexueller Identität und Orientierung.
+
+## Unsere Standards
+
+Beispiele für Verhaltensweisen, die zur Schaffung eines positiven Umfelds beitragen,
+beinhalten:
+
+- Verwendung von einladender und inklusiver Sprache
+- Respektierung unterschiedlicher Standpunkte und Erfahrungen
+- Konstruktive Kritik würdevoll annehmen
+- Fokussierung auf das, was für die Community am besten ist
+- Empathie gegenüber anderen Community-Mitgliedern zeigen
+
+Beispiele für inakzeptables Verhalten von Teilnehmenden beinhalten:
+
+- Verwendung sexualisierter Sprache oder Bilder und unerwünschte sexuelle Aufmerksamkeit oder
+  Annäherungsversuche
+- Trolling, beleidigende/herabsetzende Kommentare und persönliche oder politische Angriffe
+- Öffentliche oder private Belästigung
+- Veröffentlichung privater Informationen anderer, wie z.B. einer physischen oder elektronischen
+  Adresse, ohne ausdrückliche Erlaubnis
+- Anderes Verhalten, das in einem professionellen Umfeld vernünftigerweise als unangemessen angesehen werden könnte
+
+## Unsere Verantwortlichkeiten
+
+Projektbetreuer sind dafür verantwortlich, die Standards für akzeptables
+Verhalten zu verdeutlichen und es wird von ihnen erwartet, angemessene und faire Korrekturmaßnahmen zu ergreifen als
+Reaktion auf jegliche Fälle von inakzeptablem Verhalten.
+
+Projektbetreuer haben das Recht und die Verantwortung, Kommentare, Commits, Code, Wiki-Bearbeitungen,
+Issues und andere Beiträge zu entfernen, zu bearbeiten oder abzulehnen,
+die nicht mit diesem Verhaltenskodex übereinstimmen, oder einen Mitwirkenden vorübergehend oder
+dauerhaft für andere Verhaltensweisen zu sperren, die sie als unangemessen,
+bedrohlich, beleidigend oder schädlich erachten.
+
+## Geltungsbereich
+
+Dieser Verhaltenskodex gilt sowohl innerhalb der Projekträume als auch in öffentlichen Räumen,
+wenn eine Person das Projekt oder seine Community repräsentiert. Beispiele für
+die Repräsentation eines Projekts oder einer Community beinhalten die Verwendung einer offiziellen Projekt-E-Mail-
+Adresse, das Posten über ein offizielles Social-Media-Konto oder das Handeln als ernannter
+Repräsentant bei einer Online- oder Offline-Veranstaltung. Die Repräsentation eines Projekts kann
+von den Projektbetreuern weiter definiert und geklärt werden.
+
+## Durchsetzung
+
+Fälle von missbräuchlichem, belästigendem oder anderweitig inakzeptablem Verhalten können
+dem Projektteam unter [email protected] gemeldet werden. Alle
+Beschwerden werden überprüft und untersucht und führen zu einer Reaktion, die
+als notwendig und angemessen für die Umstände erachtet wird. Das Projektteam ist
+verpflichtet, die Vertraulichkeit in Bezug auf den Melder eines Vorfalls zu wahren.
+Weitere Details zu spezifischen Durchsetzungsrichtlinien können separat veröffentlicht werden.
+
+Projektbetreuer, die den Verhaltenskodex nicht in gutem Glauben befolgen oder durchsetzen,
+können vorübergehende oder dauerhafte Konsequenzen erleben, die von anderen
+Mitgliedern der Projektleitung bestimmt werden.
+
+## Zuordnung
+
+Dieser Verhaltenskodex ist adaptiert von [Clines Version][cline_coc] des [Contributor Covenant][homepage], Version 1.4,
+verfügbar unter https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
+
+[cline_coc]: https://github.com/cline/cline/blob/main/CODE_OF_CONDUCT.md
+[homepage]: https://www.contributor-covenant.org
+
+Für Antworten auf häufig gestellte Fragen zu diesem Verhaltenskodex siehe
+https://www.contributor-covenant.org/faq

+ 112 - 0
locales/de/CONTRIBUTING.md

@@ -0,0 +1,112 @@
+# Beitrag zu Roo Code
+
+Wir freuen uns, dass Sie Interesse haben, zu Roo Code beizutragen. Ob Sie einen Fehler beheben, eine Funktion hinzufügen oder unsere Dokumentation verbessern, jeder Beitrag macht Roo Code intelligenter! Um unsere Community lebendig und einladend zu halten, müssen sich alle Mitglieder an unseren [Verhaltenskodex](CODE_OF_CONDUCT.md) halten.
+
+## Treten Sie unserer Community bei
+
+Wir ermutigen alle Mitwirkenden nachdrücklich, unserer [Discord-Community](https://discord.gg/roocode) beizutreten! Teil unseres Discord-Servers zu sein, hilft Ihnen:
+
+- Echtzeit-Hilfe und Anleitung für Ihre Beiträge zu erhalten
+- Mit anderen Mitwirkenden und Kernteammitgliedern in Kontakt zu treten
+- Über Projektentwicklungen und Prioritäten auf dem Laufenden zu bleiben
+- An Diskussionen teilzunehmen, die die Zukunft von Roo Code gestalten
+- Kooperationsmöglichkeiten mit anderen Entwicklern zu finden
+
+## Fehler oder Probleme melden
+
+Fehlerberichte helfen, Roo Code für alle besser zu machen! Bevor Sie ein neues Issue erstellen, bitte [suchen Sie in bestehenden Issues](https://github.com/RooVetGit/Roo-Code/issues), um Duplikate zu vermeiden. Wenn Sie bereit sind, einen Fehler zu melden, gehen Sie zu unserer [Issues-Seite](https://github.com/RooVetGit/Roo-Code/issues/new/choose), wo Sie eine Vorlage finden, die Ihnen beim Ausfüllen der relevanten Informationen hilft.
+
+<blockquote class='warning-note'>
+     🔐 <b>Wichtig:</b> Wenn Sie eine Sicherheitslücke entdecken, nutzen Sie bitte das <a href="https://github.com/RooVetGit/Roo-Code/security/advisories/new">Github-Sicherheitstool, um sie privat zu melden</a>.
+</blockquote>
+
+## Entscheiden, woran Sie arbeiten möchten
+
+Suchen Sie nach einem guten ersten Beitrag? Schauen Sie sich Issues im Abschnitt "Issue [Unassigned]" unseres [Roo Code Issues](https://github.com/orgs/RooVetGit/projects/1) Github-Projekts an. Diese sind speziell für neue Mitwirkende und Bereiche ausgewählt, in denen wir Hilfe gebrauchen könnten!
+
+Wir begrüßen auch Beiträge zu unserer [Dokumentation](https://docs.roocode.com/)! Ob Sie Tippfehler korrigieren, bestehende Anleitungen verbessern oder neue Bildungsinhalte erstellen - wir würden gerne ein Community-geführtes Repository von Ressourcen aufbauen, das jedem hilft, das Beste aus Roo Code herauszuholen. Sie können auf jeder Seite auf "Edit this page" klicken, um schnell zur richtigen Stelle in Github zu gelangen, um die Datei zu bearbeiten, oder Sie können direkt zu https://github.com/RooVetGit/Roo-Code-Docs gehen.
+
+Wenn Sie an einer größeren Funktion arbeiten möchten, erstellen Sie bitte zuerst eine [Funktionsanfrage](https://github.com/RooVetGit/Roo-Code/discussions/categories/feature-requests?discussions_q=is%3Aopen+category%3A%22Feature+Requests%22+sort%3Atop), damit wir diskutieren können, ob sie mit der Vision von Roo Code übereinstimmt.
+
+## Entwicklungs-Setup
+
+1. **Klonen** Sie das Repository:
+
+```sh
+git clone https://github.com/RooVetGit/Roo-Code.git
+```
+
+2. **Installieren Sie Abhängigkeiten**:
+
+```sh
+npm run install:all
+```
+
+3. **Starten Sie die Webansicht (Vite/React-App mit HMR)**:
+
+```sh
+npm run dev
+```
+
+4. **Debugging**:
+   Drücken Sie `F5` (oder **Ausführen** → **Debugging starten**) in VSCode, um eine neue Sitzung mit geladenem Roo Code zu öffnen.
+
+Änderungen an der Webansicht erscheinen sofort. Änderungen an der Kern-Erweiterung erfordern einen Neustart des Erweiterungs-Hosts.
+
+Alternativ können Sie eine .vsix-Datei erstellen und direkt in VSCode installieren:
+
+```sh
+npm run build
+```
+
+Eine `.vsix`-Datei erscheint im `bin/`-Verzeichnis, die mit folgendem Befehl installiert werden kann:
+
+```sh
+code --install-extension bin/roo-cline-<version>.vsix
+```
+
+## Code schreiben und einreichen
+
+Jeder kann Code zu Roo Code beitragen, aber wir bitten Sie, diese Richtlinien zu befolgen, um sicherzustellen, dass Ihre Beiträge reibungslos integriert werden können:
+
+1. **Halten Sie Pull Requests fokussiert**
+
+    - Beschränken Sie PRs auf eine einzelne Funktion oder Fehlerbehebung
+    - Teilen Sie größere Änderungen in kleinere, zusammenhängende PRs auf
+    - Unterteilen Sie Änderungen in logische Commits, die unabhängig überprüft werden können
+
+2. **Codequalität**
+
+    - Alle PRs müssen CI-Prüfungen bestehen, die sowohl Linting als auch Formatierung umfassen
+    - Beheben Sie alle ESLint-Warnungen oder -Fehler vor dem Einreichen
+    - Reagieren Sie auf alle Rückmeldungen von Ellipsis, unserem automatisierten Code-Review-Tool
+    - Folgen Sie TypeScript-Best-Practices und halten Sie die Typsicherheit aufrecht
+
+3. **Testen**
+
+    - Fügen Sie Tests für neue Funktionen hinzu
+    - Führen Sie `npm test` aus, um sicherzustellen, dass alle Tests bestanden werden
+    - Aktualisieren Sie bestehende Tests, wenn Ihre Änderungen diese beeinflussen
+    - Schließen Sie sowohl Unit-Tests als auch Integrationstests ein, wo angemessen
+
+4. **Commit-Richtlinien**
+
+    - Schreiben Sie klare, beschreibende Commit-Nachrichten
+    - Verweisen Sie auf relevante Issues in Commits mit #issue-nummer
+
+5. **Vor dem Einreichen**
+
+    - Rebasen Sie Ihren Branch auf den neuesten main-Branch
+    - Stellen Sie sicher, dass Ihr Branch erfolgreich baut
+    - Überprüfen Sie erneut, dass alle Tests bestanden werden
+    - Prüfen Sie Ihre Änderungen auf Debug-Code oder Konsolenausgaben
+
+6. **Pull Request Beschreibung**
+    - Beschreiben Sie klar, was Ihre Änderungen bewirken
+    - Fügen Sie Schritte zum Testen der Änderungen hinzu
+    - Listen Sie alle Breaking Changes auf
+    - Fügen Sie Screenshots für UI-Änderungen hinzu
+
+## Beitragsvereinbarung
+
+Durch das Einreichen eines Pull Requests stimmen Sie zu, dass Ihre Beiträge unter derselben Lizenz wie das Projekt ([Apache 2.0](../LICENSE)) lizenziert werden.

+ 211 - 0
locales/de/README.md

@@ -0,0 +1,211 @@
+<div align="center">
+<sub>
+
+[English](../../README.md) • [Català](../../locales/ca/README.md) • Deutsch • [Español](../../locales/es/README.md) • [Français](../../locales/fr/README.md) • [हिन्दी](../../locales/hi/README.md) • [Italiano](../../locales/it/README.md)
+
+</sub>
+<sub>
+
+[日本語](../../locales/ja/README.md) • [한국어](../../locales/ko/README.md) • [Polski](../../locales/pl/README.md) • [Português (BR)](../../locales/pt-BR/README.md) • [Türkçe](../../locales/tr/README.md) • [Tiếng Việt](../../locales/vi/README.md) • [简体中文](../../locales/zh-CN/README.md) • [繁體中文](../../locales/zh-TW/README.md)
+
+</sub>
+</div>
+<br>
+<div align="center">
+  <h2>Treten Sie der Roo Code Community bei</h2>
+  <p>Vernetzen Sie sich mit Entwicklern, tragen Sie Ideen bei und bleiben Sie mit den neuesten KI-gestützten Coding-Tools auf dem Laufenden.</p>
+  
+  <a href="https://discord.gg/roocode" target="_blank"><img src="https://img.shields.io/badge/Discord%20beitreten-5865F2?style=for-the-badge&logo=discord&logoColor=white" alt="Discord beitreten"></a>
+  <a href="https://www.reddit.com/r/RooCode/" target="_blank"><img src="https://img.shields.io/badge/Reddit%20beitreten-FF4500?style=for-the-badge&logo=reddit&logoColor=white" alt="Reddit beitreten"></a>
+  
+</div>
+<br>
+<br>
+
+<div align="center">
+<h1>Roo Code (früher Roo Cline)</h1>
+
+<a href="https://marketplace.visualstudio.com/items?itemName=RooVeterinaryInc.roo-cline" target="_blank"><img src="https://img.shields.io/badge/Download%20im%20VS%20Marketplace-blue?style=for-the-badge&logo=visualstudiocode&logoColor=white" alt="Download im VS Marketplace"></a>
+<a href="https://github.com/RooVetGit/Roo-Code/discussions/categories/feature-requests?discussions_q=is%3Aopen+category%3A%22Feature+Requests%22+sort%3Atop" target="_blank"><img src="https://img.shields.io/badge/Funktionsanfragen-yellow?style=for-the-badge" alt="Funktionsanfragen"></a>
+<a href="https://marketplace.visualstudio.com/items?itemName=RooVeterinaryInc.roo-cline&ssr=false#review-details" target="_blank"><img src="https://img.shields.io/badge/Bewerten%20%26%20Rezensieren-green?style=for-the-badge" alt="Bewerten & Rezensieren"></a>
+<a href="https://docs.roocode.com" target="_blank"><img src="https://img.shields.io/badge/Dokumentation-6B46C1?style=for-the-badge&logo=readthedocs&logoColor=white" alt="Dokumentation"></a>
+
+</div>
+
+**Roo Code** ist ein KI-gesteuerter **autonomer Coding-Agent**, der in Ihrem Editor lebt. Er kann:
+
+- In natürlicher Sprache kommunizieren
+- Dateien direkt in Ihrem Workspace lesen und schreiben
+- Terminal-Befehle ausführen
+- Browser-Aktionen automatisieren
+- Mit jeder OpenAI-kompatiblen oder benutzerdefinierten API/Modell integrieren
+- Seine "Persönlichkeit" und Fähigkeiten durch **Benutzerdefinierte Modi** anpassen
+
+Ob Sie einen flexiblen Coding-Partner, einen Systemarchitekten oder spezialisierte Rollen wie einen QA-Ingenieur oder Produktmanager suchen, Roo Code kann Ihnen helfen, Software effizienter zu entwickeln.
+
+Sehen Sie sich das [CHANGELOG](../CHANGELOG.md) für detaillierte Updates und Fehlerbehebungen an.
+
+---
+
+## 🎉 Roo Code 3.8 veröffentlicht
+
+Roo Code 3.8 ist verfügbar mit Leistungsverbesserungen, neuen Funktionen und Fehlerbehebungen.
+
+- Schnellere asynchrone Checkpoints
+- Unterstützung für .rooignore-Dateien
+- Behobene Terminal- und Graubildschirmprobleme
+- Roo Code kann in mehreren Fenstern ausgeführt werden
+- Experimentelle Multi-Diff-Bearbeitungsstrategie
+- Kommunikation von Unteraufgabe zu Hauptaufgabe
+- Aktualisierter DeepSeek-Provider
+- Neuer "Human Relay"-Provider
+
+---
+
+## Was kann Roo Code tun?
+
+- 🚀 **Code generieren** aus natürlichsprachlichen Beschreibungen
+- 🔧 **Refaktorieren & Debuggen** von bestehendem Code
+- 📝 **Dokumentation schreiben & aktualisieren**
+- 🤔 **Fragen beantworten** zu Ihrem Codebase
+- 🔄 **Repetitive Aufgaben automatisieren**
+- 🏗️ **Neue Dateien und Projekte erstellen**
+
+## Schnellstart
+
+1. [Roo Code installieren](https://docs.roocode.com/getting-started/installing)
+2. [Ihren KI-Provider verbinden](https://docs.roocode.com/getting-started/connecting-api-provider)
+3. [Ihre erste Aufgabe ausprobieren](https://docs.roocode.com/getting-started/your-first-task)
+
+## Hauptfunktionen
+
+### Mehrere Modi
+
+Roo Code passt sich Ihren Bedürfnissen mit spezialisierten [Modi](https://docs.roocode.com/basic-usage/modes) an:
+
+- **Code-Modus:** Für allgemeine Coding-Aufgaben
+- **Architekten-Modus:** Für Planung und technische Führung
+- **Frage-Modus:** Für Beantwortung von Fragen und Bereitstellung von Informationen
+- **Debug-Modus:** Für systematische Problemdiagnose
+- **[Benutzerdefinierte Modi](https://docs.roocode.com/advanced-usage/custom-modes):** Erstellen Sie unbegrenzte spezialisierte Personas für Sicherheitsaudits, Leistungsoptimierung, Dokumentation oder andere Aufgaben
+
+### Intelligente Tools
+
+Roo Code kommt mit leistungsstarken [Tools](https://docs.roocode.com/basic-usage/using-tools), die können:
+
+- Dateien in Ihrem Projekt lesen und schreiben
+- Befehle in Ihrem VS Code-Terminal ausführen
+- Einen Webbrowser steuern
+- Externe Tools über [MCP (Model Context Protocol)](https://docs.roocode.com/advanced-usage/mcp) nutzen
+
+MCP erweitert die Fähigkeiten von Roo Code, indem es Ihnen ermöglicht, unbegrenzte benutzerdefinierte Tools hinzuzufügen. Integrieren Sie externe APIs, verbinden Sie sich mit Datenbanken oder erstellen Sie spezialisierte Entwicklungstools - MCP bietet das Framework, um die Funktionalität von Roo Code zu erweitern und Ihre spezifischen Bedürfnisse zu erfüllen.
+
+### Anpassung
+
+Passen Sie Roo Code nach Ihren Wünschen an mit:
+
+- [Benutzerdefinierten Anweisungen](https://docs.roocode.com/advanced-usage/custom-instructions) für personalisiertes Verhalten
+- [Benutzerdefinierten Modi](https://docs.roocode.com/advanced-usage/custom-modes) für spezialisierte Aufgaben
+- [Lokalen Modellen](https://docs.roocode.com/advanced-usage/local-models) für Offline-Nutzung
+- [Auto-Genehmigungs-Einstellungen](https://docs.roocode.com/advanced-usage/auto-approving-actions) für schnellere Workflows
+
+## Ressourcen
+
+### Dokumentation
+
+- [Grundlegende Nutzungsanleitung](https://docs.roocode.com/basic-usage/the-chat-interface)
+- [Erweiterte Funktionen](https://docs.roocode.com/advanced-usage/auto-approving-actions)
+- [Häufig gestellte Fragen](https://docs.roocode.com/faq)
+
+### Community
+
+- **Discord:** [Treten Sie unserem Discord-Server bei](https://discord.gg/roocode) für Echtzeit-Hilfe und Diskussionen
+- **Reddit:** [Besuchen Sie unser Subreddit](https://www.reddit.com/r/RooCode), um Erfahrungen und Tipps zu teilen
+- **GitHub:** [Probleme melden](https://github.com/RooVetGit/Roo-Code/issues) oder [Funktionen anfragen](https://github.com/RooVetGit/Roo-Code/discussions/categories/feature-requests?discussions_q=is%3Aopen+category%3A%22Feature+Requests%22+sort%3Atop)
+
+---
+
+## Lokales Setup & Entwicklung
+
+1. **Klonen** Sie das Repository:
+
+```sh
+git clone https://github.com/RooVetGit/Roo-Code.git
+```
+
+2. **Abhängigkeiten installieren**:
+
+```sh
+npm run install:all
+```
+
+3. **Webview starten (Vite/React-App mit HMR)**:
+
+```sh
+npm run dev
+```
+
+4. **Debugging**:
+   Drücken Sie `F5` (oder **Ausführen** → **Debugging starten**) in VSCode, um eine neue Sitzung mit geladenem Roo Code zu öffnen.
+
+Änderungen an der Webview erscheinen sofort. Änderungen an der Kern-Erweiterung erfordern einen Neustart des Erweiterungs-Hosts.
+
+Alternativ können Sie eine .vsix-Datei erstellen und direkt in VSCode installieren:
+
+```sh
+npm run build
+```
+
+Eine `.vsix`-Datei erscheint im `bin/`-Verzeichnis, die mit folgendem Befehl installiert werden kann:
+
+```sh
+code --install-extension bin/roo-cline-<version>.vsix
+```
+
+Wir verwenden [changesets](https://github.com/changesets/changesets) für Versionierung und Veröffentlichung. Überprüfen Sie unsere `CHANGELOG.md` für Release-Hinweise.
+
+---
+
+## Haftungsausschluss
+
+**Bitte beachten Sie**, dass Roo Veterinary, Inc **keine** Zusicherungen oder Garantien bezüglich jeglichen Codes, Modellen oder anderen Tools gibt, die in Verbindung mit Roo Code bereitgestellt oder verfügbar gemacht werden, jeglichen zugehörigen Drittanbieter-Tools oder resultierenden Outputs. Sie übernehmen **alle Risiken** im Zusammenhang mit der Nutzung solcher Tools oder Outputs; solche Tools werden auf einer **"WIE BESEHEN"** und **"WIE VERFÜGBAR"** Basis bereitgestellt. Solche Risiken können, ohne Einschränkung, Verletzung geistigen Eigentums, Cyber-Schwachstellen oder -Angriffe, Voreingenommenheit, Ungenauigkeiten, Fehler, Mängel, Viren, Ausfallzeiten, Eigentumsverlust oder -schäden und/oder Personenschäden umfassen. Sie sind allein verantwortlich für Ihre Nutzung solcher Tools oder Outputs (einschließlich, ohne Einschränkung, deren Rechtmäßigkeit, Angemessenheit und Ergebnisse).
+
+---
+
+## Mitwirken
+
+Wir lieben Community-Beiträge! Beginnen Sie mit dem Lesen unserer [CONTRIBUTING.md](CONTRIBUTING.md).
+
+---
+
+## Mitwirkende
+
+Danke an alle unsere Mitwirkenden, die geholfen haben, Roo Code zu verbessern!
+
+<!-- START CONTRIBUTORS SECTION - AUTO-GENERATED, DO NOT EDIT MANUALLY -->
+
+|               <a href="https://github.com/mrubens"><img src="https://avatars.githubusercontent.com/u/2600?v=4" width="100" height="100" alt="mrubens"/><br /><sub><b>mrubens</b></sub></a>               |         <a href="https://github.com/saoudrizwan"><img src="https://avatars.githubusercontent.com/u/7799382?v=4" width="100" height="100" alt="saoudrizwan"/><br /><sub><b>saoudrizwan</b></sub></a>         |                   <a href="https://github.com/cte"><img src="https://avatars.githubusercontent.com/u/16332?v=4" width="100" height="100" alt="cte"/><br /><sub><b>cte</b></sub></a>                    |          <a href="https://github.com/samhvw8"><img src="https://avatars.githubusercontent.com/u/12538214?v=4" width="100" height="100" alt="samhvw8"/><br /><sub><b>samhvw8</b></sub></a>           |    <a href="https://github.com/daniel-lxs"><img src="https://avatars.githubusercontent.com/u/57051444?v=4" width="100" height="100" alt="daniel-lxs"/><br /><sub><b>daniel-lxs</b></sub></a>    |                   <a href="https://github.com/a8trejo"><img src="https://avatars.githubusercontent.com/u/62401433?v=4" width="100" height="100" alt="a8trejo"/><br /><sub><b>a8trejo</b></sub></a>                    |
+| :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
+|        <a href="https://github.com/ColemanRoo"><img src="https://avatars.githubusercontent.com/u/117104599?v=4" width="100" height="100" alt="ColemanRoo"/><br /><sub><b>ColemanRoo</b></sub></a>        |             <a href="https://github.com/stea9499"><img src="https://avatars.githubusercontent.com/u/4163795?v=4" width="100" height="100" alt="stea9499"/><br /><sub><b>stea9499</b></sub></a>              |     <a href="https://github.com/joemanley201"><img src="https://avatars.githubusercontent.com/u/8299960?v=4" width="100" height="100" alt="joemanley201"/><br /><sub><b>joemanley201</b></sub></a>     |       <a href="https://github.com/System233"><img src="https://avatars.githubusercontent.com/u/20336040?v=4" width="100" height="100" alt="System233"/><br /><sub><b>System233</b></sub></a>        |       <a href="https://github.com/jquanton"><img src="https://avatars.githubusercontent.com/u/88576563?v=4" width="100" height="100" alt="jquanton"/><br /><sub><b>jquanton</b></sub></a>       |              <a href="https://github.com/nissa-seru"><img src="https://avatars.githubusercontent.com/u/119150866?v=4" width="100" height="100" alt="nissa-seru"/><br /><sub><b>nissa-seru</b></sub></a>               |
+|    <a href="https://github.com/hannesrudolph"><img src="https://avatars.githubusercontent.com/u/49103247?v=4" width="100" height="100" alt="hannesrudolph"/><br /><sub><b>hannesrudolph</b></sub></a>    |             <a href="https://github.com/MuriloFP"><img src="https://avatars.githubusercontent.com/u/50873657?v=4" width="100" height="100" alt="MuriloFP"/><br /><sub><b>MuriloFP</b></sub></a>             |             <a href="https://github.com/NyxJae"><img src="https://avatars.githubusercontent.com/u/52313587?v=4" width="100" height="100" alt="NyxJae"/><br /><sub><b>NyxJae</b></sub></a>              |        <a href="https://github.com/punkpeye"><img src="https://avatars.githubusercontent.com/u/108313943?v=4" width="100" height="100" alt="punkpeye"/><br /><sub><b>punkpeye</b></sub></a>         |            <a href="https://github.com/d-oit"><img src="https://avatars.githubusercontent.com/u/6849456?v=4" width="100" height="100" alt="d-oit"/><br /><sub><b>d-oit</b></sub></a>            |            <a href="https://github.com/monotykamary"><img src="https://avatars.githubusercontent.com/u/1130103?v=4" width="100" height="100" alt="monotykamary"/><br /><sub><b>monotykamary</b></sub></a>             |
+|         <a href="https://github.com/lloydchang"><img src="https://avatars.githubusercontent.com/u/1329685?v=4" width="100" height="100" alt="lloydchang"/><br /><sub><b>lloydchang</b></sub></a>         | <a href="https://github.com/vigneshsubbiah16"><img src="https://avatars.githubusercontent.com/u/51325334?v=4" width="100" height="100" alt="vigneshsubbiah16"/><br /><sub><b>vigneshsubbiah16</b></sub></a> |            <a href="https://github.com/Szpadel"><img src="https://avatars.githubusercontent.com/u/1857251?v=4" width="100" height="100" alt="Szpadel"/><br /><sub><b>Szpadel</b></sub></a>             |       <a href="https://github.com/lupuletic"><img src="https://avatars.githubusercontent.com/u/105351510?v=4" width="100" height="100" alt="lupuletic"/><br /><sub><b>lupuletic</b></sub></a>       |        <a href="https://github.com/cannuri"><img src="https://avatars.githubusercontent.com/u/91494156?v=4" width="100" height="100" alt="cannuri"/><br /><sub><b>cannuri</b></sub></a>         | <a href="https://github.com/Smartsheet-JB-Brown"><img src="https://avatars.githubusercontent.com/u/171734120?v=4" width="100" height="100" alt="Smartsheet-JB-Brown"/><br /><sub><b>Smartsheet-JB-Brown</b></sub></a> |
+|           <a href="https://github.com/Premshay"><img src="https://avatars.githubusercontent.com/u/28099628?v=4" width="100" height="100" alt="Premshay"/><br /><sub><b>Premshay</b></sub></a>            |              <a href="https://github.com/psv2522"><img src="https://avatars.githubusercontent.com/u/87223770?v=4" width="100" height="100" alt="psv2522"/><br /><sub><b>psv2522</b></sub></a>               |      <a href="https://github.com/olweraltuve"><img src="https://avatars.githubusercontent.com/u/39308405?v=4" width="100" height="100" alt="olweraltuve"/><br /><sub><b>olweraltuve</b></sub></a>      |       <a href="https://github.com/RaySinner"><img src="https://avatars.githubusercontent.com/u/118297374?v=4" width="100" height="100" alt="RaySinner"/><br /><sub><b>RaySinner</b></sub></a>       |            <a href="https://github.com/qdaxb"><img src="https://avatars.githubusercontent.com/u/4157870?v=4" width="100" height="100" alt="qdaxb"/><br /><sub><b>qdaxb</b></sub></a>            |                <a href="https://github.com/feifei325"><img src="https://avatars.githubusercontent.com/u/46489071?v=4" width="100" height="100" alt="feifei325"/><br /><sub><b>feifei325</b></sub></a>                 |
+|      <a href="https://github.com/afshawnlotfi"><img src="https://avatars.githubusercontent.com/u/6283745?v=4" width="100" height="100" alt="afshawnlotfi"/><br /><sub><b>afshawnlotfi</b></sub></a>      |              <a href="https://github.com/emshvac"><img src="https://avatars.githubusercontent.com/u/121588911?v=4" width="100" height="100" alt="emshvac"/><br /><sub><b>emshvac</b></sub></a>              |         <a href="https://github.com/Lunchb0ne"><img src="https://avatars.githubusercontent.com/u/22198661?v=4" width="100" height="100" alt="Lunchb0ne"/><br /><sub><b>Lunchb0ne</b></sub></a>         |             <a href="https://github.com/sammcj"><img src="https://avatars.githubusercontent.com/u/862951?v=4" width="100" height="100" alt="sammcj"/><br /><sub><b>sammcj</b></sub></a>             |       <a href="https://github.com/dtrugman"><img src="https://avatars.githubusercontent.com/u/2451669?v=4" width="100" height="100" alt="dtrugman"/><br /><sub><b>dtrugman</b></sub></a>        |                 <a href="https://github.com/aitoroses"><img src="https://avatars.githubusercontent.com/u/1699368?v=4" width="100" height="100" alt="aitoroses"/><br /><sub><b>aitoroses</b></sub></a>                 |
+|           <a href="https://github.com/yt3trees"><img src="https://avatars.githubusercontent.com/u/57471763?v=4" width="100" height="100" alt="yt3trees"/><br /><sub><b>yt3trees</b></sub></a>            |              <a href="https://github.com/yongjer"><img src="https://avatars.githubusercontent.com/u/54315206?v=4" width="100" height="100" alt="yongjer"/><br /><sub><b>yongjer</b></sub></a>               |      <a href="https://github.com/vincentsong"><img src="https://avatars.githubusercontent.com/u/2343574?v=4" width="100" height="100" alt="vincentsong"/><br /><sub><b>vincentsong</b></sub></a>       | <a href="https://github.com/pugazhendhi-m"><img src="https://avatars.githubusercontent.com/u/132246623?v=4" width="100" height="100" alt="pugazhendhi-m"/><br /><sub><b>pugazhendhi-m</b></sub></a> |           <a href="https://github.com/eonghk"><img src="https://avatars.githubusercontent.com/u/139964?v=4" width="100" height="100" alt="eonghk"/><br /><sub><b>eonghk</b></sub></a>           |                  <a href="https://github.com/philfung"><img src="https://avatars.githubusercontent.com/u/1054593?v=4" width="100" height="100" alt="philfung"/><br /><sub><b>philfung</b></sub></a>                   |
+|               <a href="https://github.com/pdecat"><img src="https://avatars.githubusercontent.com/u/318490?v=4" width="100" height="100" alt="pdecat"/><br /><sub><b>pdecat</b></sub></a>                |                <a href="https://github.com/napter"><img src="https://avatars.githubusercontent.com/u/6260841?v=4" width="100" height="100" alt="napter"/><br /><sub><b>napter</b></sub></a>                 |                    <a href="https://github.com/mdp"><img src="https://avatars.githubusercontent.com/u/2868?v=4" width="100" height="100" alt="mdp"/><br /><sub><b>mdp</b></sub></a>                    |            <a href="https://github.com/jcbdev"><img src="https://avatars.githubusercontent.com/u/17152092?v=4" width="100" height="100" alt="jcbdev"/><br /><sub><b>jcbdev</b></sub></a>            |      <a href="https://github.com/benzntech"><img src="https://avatars.githubusercontent.com/u/4044180?v=4" width="100" height="100" alt="benzntech"/><br /><sub><b>benzntech</b></sub></a>      |              <a href="https://github.com/anton-otee"><img src="https://avatars.githubusercontent.com/u/149477749?v=4" width="100" height="100" alt="anton-otee"/><br /><sub><b>anton-otee</b></sub></a>               |
+|             <a href="https://github.com/AMHesch"><img src="https://avatars.githubusercontent.com/u/4777192?v=4" width="100" height="100" alt="AMHesch"/><br /><sub><b>AMHesch</b></sub></a>              |              <a href="https://github.com/bannzai"><img src="https://avatars.githubusercontent.com/u/10897361?v=4" width="100" height="100" alt="bannzai"/><br /><sub><b>bannzai</b></sub></a>               |           <a href="https://github.com/dairui1"><img src="https://avatars.githubusercontent.com/u/183250644?v=4" width="100" height="100" alt="dairui1"/><br /><sub><b>dairui1</b></sub></a>            |           <a href="https://github.com/dqroid"><img src="https://avatars.githubusercontent.com/u/192424994?v=4" width="100" height="100" alt="dqroid"/><br /><sub><b>dqroid</b></sub></a>            |      <a href="https://github.com/kinandan"><img src="https://avatars.githubusercontent.com/u/186135699?v=4" width="100" height="100" alt="kinandan"/><br /><sub><b>kinandan</b></sub></a>       |                       <a href="https://github.com/kohii"><img src="https://avatars.githubusercontent.com/u/6891780?v=4" width="100" height="100" alt="kohii"/><br /><sub><b>kohii</b></sub></a>                       |
+|       <a href="https://github.com/lightrabbit"><img src="https://avatars.githubusercontent.com/u/1521765?v=4" width="100" height="100" alt="lightrabbit"/><br /><sub><b>lightrabbit</b></sub></a>        |                   <a href="https://github.com/olup"><img src="https://avatars.githubusercontent.com/u/13785588?v=4" width="100" height="100" alt="olup"/><br /><sub><b>olup</b></sub></a>                   |      <a href="https://github.com/moqimoqidea"><img src="https://avatars.githubusercontent.com/u/39821951?v=4" width="100" height="100" alt="moqimoqidea"/><br /><sub><b>moqimoqidea</b></sub></a>      |        <a href="https://github.com/mosleyit"><img src="https://avatars.githubusercontent.com/u/189396442?v=4" width="100" height="100" alt="mosleyit"/><br /><sub><b>mosleyit</b></sub></a>         |       <a href="https://github.com/oprstchn"><img src="https://avatars.githubusercontent.com/u/16177972?v=4" width="100" height="100" alt="oprstchn"/><br /><sub><b>oprstchn</b></sub></a>       |               <a href="https://github.com/philipnext"><img src="https://avatars.githubusercontent.com/u/81944499?v=4" width="100" height="100" alt="philipnext"/><br /><sub><b>philipnext</b></sub></a>               |
+|      <a href="https://github.com/refactorthis"><img src="https://avatars.githubusercontent.com/u/3012240?v=4" width="100" height="100" alt="refactorthis"/><br /><sub><b>refactorthis</b></sub></a>      |      <a href="https://github.com/samir-nimbly"><img src="https://avatars.githubusercontent.com/u/112695483?v=4" width="100" height="100" alt="samir-nimbly"/><br /><sub><b>samir-nimbly</b></sub></a>       |              <a href="https://github.com/shaybc"><img src="https://avatars.githubusercontent.com/u/8535905?v=4" width="100" height="100" alt="shaybc"/><br /><sub><b>shaybc</b></sub></a>              |   <a href="https://github.com/shohei-ihaya"><img src="https://avatars.githubusercontent.com/u/25131938?v=4" width="100" height="100" alt="shohei-ihaya"/><br /><sub><b>shohei-ihaya</b></sub></a>   | <a href="https://github.com/student20880"><img src="https://avatars.githubusercontent.com/u/74263488?v=4" width="100" height="100" alt="student20880"/><br /><sub><b>student20880</b></sub></a> |          <a href="https://github.com/PretzelVector"><img src="https://avatars.githubusercontent.com/u/95664360?v=4" width="100" height="100" alt="PretzelVector"/><br /><sub><b>PretzelVector</b></sub></a>           |
+|       <a href="https://github.com/adamwlarson"><img src="https://avatars.githubusercontent.com/u/1392315?v=4" width="100" height="100" alt="adamwlarson"/><br /><sub><b>adamwlarson</b></sub></a>        |                <a href="https://github.com/alarno"><img src="https://avatars.githubusercontent.com/u/4355547?v=4" width="100" height="100" alt="alarno"/><br /><sub><b>alarno</b></sub></a>                 | <a href="https://github.com/andreastempsch"><img src="https://avatars.githubusercontent.com/u/117991125?v=4" width="100" height="100" alt="andreastempsch"/><br /><sub><b>andreastempsch</b></sub></a> |          <a href="https://github.com/Atlogit"><img src="https://avatars.githubusercontent.com/u/86947554?v=4" width="100" height="100" alt="Atlogit"/><br /><sub><b>Atlogit</b></sub></a>           |            <a href="https://github.com/dleen"><img src="https://avatars.githubusercontent.com/u/1297964?v=4" width="100" height="100" alt="dleen"/><br /><sub><b>dleen</b></sub></a>            |                 <a href="https://github.com/dbasclpy"><img src="https://avatars.githubusercontent.com/u/139889137?v=4" width="100" height="100" alt="dbasclpy"/><br /><sub><b>dbasclpy</b></sub></a>                  |
+| <a href="https://github.com/celestial-vault"><img src="https://avatars.githubusercontent.com/u/58194240?v=4" width="100" height="100" alt="celestial-vault"/><br /><sub><b>celestial-vault</b></sub></a> |           <a href="https://github.com/DeXtroTip"><img src="https://avatars.githubusercontent.com/u/21011087?v=4" width="100" height="100" alt="DeXtroTip"/><br /><sub><b>DeXtroTip</b></sub></a>            |              <a href="https://github.com/hesara"><img src="https://avatars.githubusercontent.com/u/1335918?v=4" width="100" height="100" alt="hesara"/><br /><sub><b>hesara</b></sub></a>              |       <a href="https://github.com/eltociear"><img src="https://avatars.githubusercontent.com/u/22633385?v=4" width="100" height="100" alt="eltociear"/><br /><sub><b>eltociear</b></sub></a>        | <a href="https://github.com/libertyteeth"><img src="https://avatars.githubusercontent.com/u/32841567?v=4" width="100" height="100" alt="libertyteeth"/><br /><sub><b>libertyteeth</b></sub></a> |           <a href="https://github.com/mamertofabian"><img src="https://avatars.githubusercontent.com/u/7698436?v=4" width="100" height="100" alt="mamertofabian"/><br /><sub><b>mamertofabian</b></sub></a>           |
+|     <a href="https://github.com/marvijo-code"><img src="https://avatars.githubusercontent.com/u/82562019?v=4" width="100" height="100" alt="marvijo-code"/><br /><sub><b>marvijo-code</b></sub></a>      |                  <a href="https://github.com/Sarke"><img src="https://avatars.githubusercontent.com/u/2719310?v=4" width="100" height="100" alt="Sarke"/><br /><sub><b>Sarke</b></sub></a>                  |               <a href="https://github.com/tgfjt"><img src="https://avatars.githubusercontent.com/u/2628239?v=4" width="100" height="100" alt="tgfjt"/><br /><sub><b>tgfjt</b></sub></a>                |       <a href="https://github.com/vladstudio"><img src="https://avatars.githubusercontent.com/u/914320?v=4" width="100" height="100" alt="vladstudio"/><br /><sub><b>vladstudio</b></sub></a>       |          <a href="https://github.com/ashktn"><img src="https://avatars.githubusercontent.com/u/6723913?v=4" width="100" height="100" alt="ashktn"/><br /><sub><b>ashktn</b></sub></a>           |                                                                                                                                                                                                                       |
+
+<!-- END CONTRIBUTORS SECTION -->
+
+## Lizenz
+
+[Apache 2.0 © 2025 Roo Veterinary, Inc.](../LICENSE)
+
+---
+
+**Genießen Sie Roo Code!** Ob Sie ihn an der kurzen Leine halten oder autonom agieren lassen, wir können es kaum erwarten zu sehen, was Sie bauen. Wenn Sie Fragen oder Funktionsideen haben, schauen Sie in unserer [Reddit-Community](https://www.reddit.com/r/RooCode/) oder auf [Discord](https://discord.gg/roocode) vorbei. Frohes Coding!

+ 76 - 0
locales/es/CODE_OF_CONDUCT.md

@@ -0,0 +1,76 @@
+# Código de Conducta del Pacto de Colaboradores
+
+## Nuestro Compromiso
+
+En el interés de fomentar un ambiente abierto y acogedor, nosotros como
+colaboradores y mantenedores nos comprometemos a hacer que la participación en nuestro proyecto y
+nuestra comunidad sea una experiencia libre de acoso para todos, independientemente de la edad, tamaño
+corporal, discapacidad, etnia, características sexuales, identidad y expresión de género,
+nivel de experiencia, educación, nivel socioeconómico, nacionalidad, apariencia
+personal, raza, religión, o identidad y orientación sexual.
+
+## Nuestros Estándares
+
+Ejemplos de comportamiento que contribuye a crear un ambiente positivo
+incluyen:
+
+- Usar lenguaje acogedor e inclusivo
+- Ser respetuoso con los diferentes puntos de vista y experiencias
+- Aceptar con gracia la crítica constructiva
+- Centrarse en lo que es mejor para la comunidad
+- Mostrar empatía hacia otros miembros de la comunidad
+
+Ejemplos de comportamiento inaceptable por parte de los participantes incluyen:
+
+- El uso de lenguaje o imágenes sexualizadas y atención o avances sexuales no deseados
+- Troleo, comentarios insultantes/despectivos, y ataques personales o políticos
+- Acoso público o privado
+- Publicar información privada de otros, como una dirección física o electrónica,
+  sin permiso explícito
+- Otra conducta que razonablemente podría considerarse inapropiada en un
+  entorno profesional
+
+## Nuestras Responsabilidades
+
+Los mantenedores del proyecto son responsables de aclarar los estándares de comportamiento aceptable
+y se espera que tomen medidas correctivas apropiadas y justas en
+respuesta a cualquier caso de comportamiento inaceptable.
+
+Los mantenedores del proyecto tienen el derecho y la responsabilidad de eliminar, editar o
+rechazar comentarios, commits, código, ediciones de wiki, issues y otras contribuciones
+que no estén alineadas con este Código de Conducta, o de prohibir temporal o
+permanentemente a cualquier colaborador por otros comportamientos que consideren inapropiados,
+amenazantes, ofensivos o dañinos.
+
+## Alcance
+
+Este Código de Conducta se aplica tanto dentro de los espacios del proyecto como en espacios públicos
+cuando un individuo está representando al proyecto o su comunidad. Ejemplos de
+representación de un proyecto o comunidad incluyen usar una dirección de correo electrónico oficial del proyecto,
+publicar a través de una cuenta oficial de redes sociales, o actuar como representante designado
+en un evento en línea o fuera de línea. La representación de un proyecto puede ser
+definida y aclarada aún más por los mantenedores del proyecto.
+
+## Aplicación
+
+Los casos de comportamiento abusivo, acosador o de otro modo inaceptable pueden ser
+reportados contactando al equipo del proyecto en [email protected]. Todas las quejas
+serán revisadas e investigadas y resultarán en una respuesta que
+se considera necesaria y apropiada a las circunstancias. El equipo del proyecto está
+obligado a mantener la confidencialidad con respecto al informante de un incidente.
+Más detalles de políticas específicas de aplicación pueden ser publicados por separado.
+
+Los mantenedores del proyecto que no sigan o hagan cumplir el Código de Conducta de buena
+fe pueden enfrentar repercusiones temporales o permanentes según lo determinen otros
+miembros del liderazgo del proyecto.
+
+## Atribución
+
+Este Código de Conducta está adaptado de la [versión de Cline][cline_coc] del [Pacto de Colaboradores][homepage], versión 1.4,
+disponible en https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
+
+[cline_coc]: https://github.com/cline/cline/blob/main/CODE_OF_CONDUCT.md
+[homepage]: https://www.contributor-covenant.org
+
+Para respuestas a preguntas comunes sobre este código de conducta, véase
+https://www.contributor-covenant.org/faq

+ 112 - 0
locales/es/CONTRIBUTING.md

@@ -0,0 +1,112 @@
+# Contribuir a Roo Code
+
+Estamos encantados de que estés interesado en contribuir a Roo Code. Ya sea que estés arreglando un error, añadiendo una función o mejorando nuestra documentación, ¡cada contribución hace que Roo Code sea más inteligente! Para mantener nuestra comunidad vibrante y acogedora, todos los miembros deben adherirse a nuestro [Código de Conducta](CODE_OF_CONDUCT.md).
+
+## Únete a nuestra comunidad
+
+¡Animamos encarecidamente a todos los colaboradores a unirse a nuestra [comunidad de Discord](https://discord.gg/roocode)! Formar parte de nuestro servidor de Discord te ayuda a:
+
+- Obtener ayuda y orientación en tiempo real para tus contribuciones
+- Conectar con otros colaboradores y miembros del equipo principal
+- Mantenerte actualizado sobre los desarrollos y prioridades del proyecto
+- Participar en discusiones que dan forma al futuro de Roo Code
+- Encontrar oportunidades de colaboración con otros desarrolladores
+
+## Reportar errores o problemas
+
+¡Los informes de errores ayudan a mejorar Roo Code para todos! Antes de crear un nuevo issue, por favor [busca entre los existentes](https://github.com/RooVetGit/Roo-Code/issues) para evitar duplicados. Cuando estés listo para reportar un error, dirígete a nuestra [página de issues](https://github.com/RooVetGit/Roo-Code/issues/new/choose) donde encontrarás una plantilla para ayudarte a completar la información relevante.
+
+<blockquote class='warning-note'>
+     🔐 <b>Importante:</b> Si descubres una vulnerabilidad de seguridad, por favor utiliza la <a href="https://github.com/RooVetGit/Roo-Code/security/advisories/new">herramienta de seguridad de GitHub para reportarla de forma privada</a>.
+</blockquote>
+
+## Decidir en qué trabajar
+
+¿Buscas una buena primera contribución? Revisa los issues en la sección "Issue [Unassigned]" de nuestro [Proyecto GitHub de Roo Code](https://github.com/orgs/RooVetGit/projects/1). ¡Estos están específicamente seleccionados para nuevos colaboradores y áreas donde nos encantaría recibir ayuda!
+
+¡También damos la bienvenida a contribuciones a nuestra [documentación](https://docs.roocode.com/)! Ya sea arreglando errores tipográficos, mejorando guías existentes o creando nuevo contenido educativo - nos encantaría construir un repositorio de recursos impulsado por la comunidad que ayude a todos a sacar el máximo provecho de Roo Code. Puedes hacer clic en "Edit this page" en cualquier página para llegar rápidamente al lugar correcto en Github para editar el archivo, o puedes ir directamente a https://github.com/RooVetGit/Roo-Code-Docs.
+
+Si estás planeando trabajar en una función más grande, por favor crea una [solicitud de función](https://github.com/RooVetGit/Roo-Code/discussions/categories/feature-requests?discussions_q=is%3Aopen+category%3A%22Feature+Requests%22+sort%3Atop) primero para que podamos discutir si se alinea con la visión de Roo Code.
+
+## Configuración de desarrollo
+
+1. **Clona** el repositorio:
+
+```sh
+git clone https://github.com/RooVetGit/Roo-Code.git
+```
+
+2. **Instala dependencias**:
+
+```sh
+npm run install:all
+```
+
+3. **Inicia la vista web (aplicación Vite/React con HMR)**:
+
+```sh
+npm run dev
+```
+
+4. **Depuración**:
+   Presiona `F5` (o **Ejecutar** → **Iniciar depuración**) en VSCode para abrir una nueva sesión con Roo Code cargado.
+
+Los cambios en la vista web aparecerán inmediatamente. Los cambios en la extensión principal requerirán un reinicio del host de extensión.
+
+Alternativamente, puedes construir un archivo .vsix e instalarlo directamente en VSCode:
+
+```sh
+npm run build
+```
+
+Un archivo `.vsix` aparecerá en el directorio `bin/` que puede ser instalado con:
+
+```sh
+code --install-extension bin/roo-cline-<version>.vsix
+```
+
+## Escribir y enviar código
+
+Cualquiera puede contribuir con código a Roo Code, pero te pedimos que sigas estas pautas para asegurar que tus contribuciones puedan integrarse sin problemas:
+
+1. **Mantén los Pull Requests enfocados**
+
+    - Limita los PRs a una sola función o corrección de errores
+    - Divide los cambios más grandes en PRs más pequeños y relacionados
+    - Separa los cambios en commits lógicos que puedan revisarse independientemente
+
+2. **Calidad del código**
+
+    - Todos los PRs deben pasar las comprobaciones de CI que incluyen tanto linting como formateo
+    - Soluciona cualquier advertencia o error de ESLint antes de enviar
+    - Responde a todos los comentarios de Ellipsis, nuestra herramienta automatizada de revisión de código
+    - Sigue las mejores prácticas de TypeScript y mantén la seguridad de tipos
+
+3. **Pruebas**
+
+    - Añade pruebas para nuevas funciones
+    - Ejecuta `npm test` para asegurar que todas las pruebas pasen
+    - Actualiza las pruebas existentes si tus cambios les afectan
+    - Incluye tanto pruebas unitarias como de integración cuando sea apropiado
+
+4. **Directrices para commits**
+
+    - Escribe mensajes de commit claros y descriptivos
+    - Haz referencia a los issues relevantes en los commits usando #número-de-issue
+
+5. **Antes de enviar**
+
+    - Haz rebase de tu rama sobre la última main
+    - Asegúrate de que tu rama se construye correctamente
+    - Comprueba que todas las pruebas están pasando
+    - Revisa tus cambios para detectar código de depuración o logs de consola
+
+6. **Descripción del Pull Request**
+    - Describe claramente lo que hacen tus cambios
+    - Incluye pasos para probar los cambios
+    - Enumera cualquier cambio que rompa la compatibilidad
+    - Añade capturas de pantalla para cambios en la interfaz de usuario
+
+## Acuerdo de contribución
+
+Al enviar un pull request, aceptas que tus contribuciones serán licenciadas bajo la misma licencia que el proyecto ([Apache 2.0](../LICENSE)).

+ 211 - 0
locales/es/README.md

@@ -0,0 +1,211 @@
+<div align="center">
+<sub>
+
+[English](../../README.md) • [Català](../../locales/ca/README.md) • [Deutsch](../../locales/de/README.md) • Español • [Français](../../locales/fr/README.md) • [हिन्दी](../../locales/hi/README.md) • [Italiano](../../locales/it/README.md)
+
+</sub>
+<sub>
+
+[日本語](../../locales/ja/README.md) • [한국어](../../locales/ko/README.md) • [Polski](../../locales/pl/README.md) • [Português (BR)](../../locales/pt-BR/README.md) • [Türkçe](../../locales/tr/README.md) • [Tiếng Việt](../../locales/vi/README.md) • [简体中文](../../locales/zh-CN/README.md) • [繁體中文](../../locales/zh-TW/README.md)
+
+</sub>
+</div>
+<br>
+<div align="center">
+  <h2>Únete a la comunidad de Roo Code</h2>
+  <p>Conéctate con desarrolladores, contribuye con ideas y mantente al día con las últimas herramientas de programación impulsadas por IA.</p>
+  
+  <a href="https://discord.gg/roocode" target="_blank"><img src="https://img.shields.io/badge/Unirse%20a%20Discord-5865F2?style=for-the-badge&logo=discord&logoColor=white" alt="Unirse a Discord"></a>
+  <a href="https://www.reddit.com/r/RooCode/" target="_blank"><img src="https://img.shields.io/badge/Unirse%20a%20Reddit-FF4500?style=for-the-badge&logo=reddit&logoColor=white" alt="Unirse a Reddit"></a>
+  
+</div>
+<br>
+<br>
+
+<div align="center">
+<h1>Roo Code (antes Roo Cline)</h1>
+
+<a href="https://marketplace.visualstudio.com/items?itemName=RooVeterinaryInc.roo-cline" target="_blank"><img src="https://img.shields.io/badge/Descargar%20en%20VS%20Marketplace-blue?style=for-the-badge&logo=visualstudiocode&logoColor=white" alt="Descargar en VS Marketplace"></a>
+<a href="https://github.com/RooVetGit/Roo-Code/discussions/categories/feature-requests?discussions_q=is%3Aopen+category%3A%22Feature+Requests%22+sort%3Atop" target="_blank"><img src="https://img.shields.io/badge/Solicitudes%20de%20Funciones-yellow?style=for-the-badge" alt="Solicitudes de Funciones"></a>
+<a href="https://marketplace.visualstudio.com/items?itemName=RooVeterinaryInc.roo-cline&ssr=false#review-details" target="_blank"><img src="https://img.shields.io/badge/Valorar%20%26%20Opinar-green?style=for-the-badge" alt="Valorar & Opinar"></a>
+<a href="https://docs.roocode.com" target="_blank"><img src="https://img.shields.io/badge/Documentaci%C3%B3n-6B46C1?style=for-the-badge&logo=readthedocs&logoColor=white" alt="Documentación"></a>
+
+</div>
+
+**Roo Code** es un **agente de programación autónomo** impulsado por IA que vive en tu editor. Puede:
+
+- Comunicarse en lenguaje natural
+- Leer y escribir archivos directamente en tu espacio de trabajo
+- Ejecutar comandos en terminal
+- Automatizar acciones del navegador
+- Integrarse con cualquier API/modelo compatible con OpenAI o personalizado
+- Adaptar su "personalidad" y capacidades a través de **Modos Personalizados**
+
+Ya sea que busques un socio de programación flexible, un arquitecto de sistemas o roles especializados como ingeniero de control de calidad o gestor de productos, Roo Code puede ayudarte a construir software de manera más eficiente.
+
+Consulta el [CHANGELOG](../CHANGELOG.md) para ver actualizaciones detalladas y correcciones.
+
+---
+
+## 🎉 Roo Code 3.8 Lanzado
+
+Roo Code 3.8 está disponible con mejoras de rendimiento, nuevas funciones y correcciones de errores.
+
+- Puntos de control asincrónicos más rápidos
+- Soporte para archivos .rooignore
+- Solucionados problemas de terminal y pantalla gris
+- Roo Code puede ejecutarse en múltiples ventanas
+- Estrategia experimental de edición multi-diff
+- Comunicación de subtarea a tarea principal
+- Proveedor DeepSeek actualizado
+- Nuevo proveedor "Human Relay"
+
+---
+
+## ¿Qué puede hacer Roo Code?
+
+- 🚀 **Generar código** a partir de descripciones en lenguaje natural
+- 🔧 **Refactorizar y depurar** código existente
+- 📝 **Escribir y actualizar** documentación
+- 🤔 **Responder preguntas** sobre tu base de código
+- 🔄 **Automatizar** tareas repetitivas
+- 🏗️ **Crear** nuevos archivos y proyectos
+
+## Inicio rápido
+
+1. [Instalar Roo Code](https://docs.roocode.com/getting-started/installing)
+2. [Conectar tu proveedor de IA](https://docs.roocode.com/getting-started/connecting-api-provider)
+3. [Probar tu primera tarea](https://docs.roocode.com/getting-started/your-first-task)
+
+## Características principales
+
+### Múltiples modos
+
+Roo Code se adapta a tus necesidades con [modos](https://docs.roocode.com/basic-usage/modes) especializados:
+
+- **Modo Código:** Para tareas generales de programación
+- **Modo Arquitecto:** Para planificación y liderazgo técnico
+- **Modo Consulta:** Para responder preguntas y proporcionar información
+- **Modo Depuración:** Para diagnóstico sistemático de problemas
+- **[Modos personalizados](https://docs.roocode.com/advanced-usage/custom-modes):** Crea un número ilimitado de personas especializadas para auditoría de seguridad, optimización de rendimiento, documentación o cualquier otra tarea
+
+### Herramientas inteligentes
+
+Roo Code viene con potentes [herramientas](https://docs.roocode.com/basic-usage/using-tools) que pueden:
+
+- Leer y escribir archivos en tu proyecto
+- Ejecutar comandos en tu terminal de VS Code
+- Controlar un navegador web
+- Usar herramientas externas a través de [MCP (Model Context Protocol)](https://docs.roocode.com/advanced-usage/mcp)
+
+MCP amplía las capacidades de Roo Code al permitirte añadir herramientas personalizadas ilimitadas. Integra con APIs externas, conéctate a bases de datos o crea herramientas de desarrollo especializadas - MCP proporciona el marco para expandir la funcionalidad de Roo Code para satisfacer tus necesidades específicas.
+
+### Personalización
+
+Haz que Roo Code funcione a tu manera con:
+
+- [Instrucciones personalizadas](https://docs.roocode.com/advanced-usage/custom-instructions) para comportamiento personalizado
+- [Modos personalizados](https://docs.roocode.com/advanced-usage/custom-modes) para tareas especializadas
+- [Modelos locales](https://docs.roocode.com/advanced-usage/local-models) para uso sin conexión
+- [Configuración de aprobación automática](https://docs.roocode.com/advanced-usage/auto-approving-actions) para flujos de trabajo más rápidos
+
+## Recursos
+
+### Documentación
+
+- [Guía de uso básico](https://docs.roocode.com/basic-usage/the-chat-interface)
+- [Funciones avanzadas](https://docs.roocode.com/advanced-usage/auto-approving-actions)
+- [Preguntas frecuentes](https://docs.roocode.com/faq)
+
+### Comunidad
+
+- **Discord:** [Únete a nuestro servidor de Discord](https://discord.gg/roocode) para ayuda en tiempo real y discusiones
+- **Reddit:** [Visita nuestro subreddit](https://www.reddit.com/r/RooCode) para compartir experiencias y consejos
+- **GitHub:** Reporta [problemas](https://github.com/RooVetGit/Roo-Code/issues) o solicita [funciones](https://github.com/RooVetGit/Roo-Code/discussions/categories/feature-requests?discussions_q=is%3Aopen+category%3A%22Feature+Requests%22+sort%3Atop)
+
+---
+
+## Configuración y desarrollo local
+
+1. **Clona** el repositorio:
+
+```sh
+git clone https://github.com/RooVetGit/Roo-Code.git
+```
+
+2. **Instala dependencias**:
+
+```sh
+npm run install:all
+```
+
+3. **Inicia la vista web (aplicación Vite/React con HMR)**:
+
+```sh
+npm run dev
+```
+
+4. **Depuración**:
+   Presiona `F5` (o **Ejecutar** → **Iniciar depuración**) en VSCode para abrir una nueva sesión con Roo Code cargado.
+
+Los cambios en la vista web aparecerán inmediatamente. Los cambios en la extensión principal requerirán un reinicio del host de extensión.
+
+Alternativamente, puedes construir un archivo .vsix e instalarlo directamente en VSCode:
+
+```sh
+npm run build
+```
+
+Aparecerá un archivo `.vsix` en el directorio `bin/` que se puede instalar con:
+
+```sh
+code --install-extension bin/roo-cline-<version>.vsix
+```
+
+Usamos [changesets](https://github.com/changesets/changesets) para versionar y publicar. Consulta nuestro `CHANGELOG.md` para ver las notas de lanzamiento.
+
+---
+
+## Aviso legal
+
+**Ten en cuenta** que Roo Veterinary, Inc **no** hace ninguna representación o garantía con respecto a cualquier código, modelo u otras herramientas proporcionadas o puestas a disposición en relación con Roo Code, cualquier herramienta de terceros asociada, o cualquier resultado. Asumes **todos los riesgos** asociados con el uso de dichas herramientas o resultados; tales herramientas se proporcionan "**TAL CUAL**" y "**SEGÚN DISPONIBILIDAD**". Dichos riesgos pueden incluir, sin limitación, infracciones de propiedad intelectual, vulnerabilidades o ataques cibernéticos, sesgo, imprecisiones, errores, defectos, virus, tiempo de inactividad, pérdida o daño de propiedad y/o lesiones personales. Eres el único responsable de tu uso de dichas herramientas o resultados (incluidas, entre otras, la legalidad, idoneidad y resultados de los mismos).
+
+---
+
+## Contribuciones
+
+¡Amamos las contribuciones de la comunidad! Comienza leyendo nuestro [CONTRIBUTING.md](CONTRIBUTING.md).
+
+---
+
+## Colaboradores
+
+¡Gracias a todos nuestros colaboradores que han ayudado a mejorar Roo Code!
+
+<!-- START CONTRIBUTORS SECTION - AUTO-GENERATED, DO NOT EDIT MANUALLY -->
+
+|               <a href="https://github.com/mrubens"><img src="https://avatars.githubusercontent.com/u/2600?v=4" width="100" height="100" alt="mrubens"/><br /><sub><b>mrubens</b></sub></a>               |         <a href="https://github.com/saoudrizwan"><img src="https://avatars.githubusercontent.com/u/7799382?v=4" width="100" height="100" alt="saoudrizwan"/><br /><sub><b>saoudrizwan</b></sub></a>         |                   <a href="https://github.com/cte"><img src="https://avatars.githubusercontent.com/u/16332?v=4" width="100" height="100" alt="cte"/><br /><sub><b>cte</b></sub></a>                    |          <a href="https://github.com/samhvw8"><img src="https://avatars.githubusercontent.com/u/12538214?v=4" width="100" height="100" alt="samhvw8"/><br /><sub><b>samhvw8</b></sub></a>           |    <a href="https://github.com/daniel-lxs"><img src="https://avatars.githubusercontent.com/u/57051444?v=4" width="100" height="100" alt="daniel-lxs"/><br /><sub><b>daniel-lxs</b></sub></a>    |                   <a href="https://github.com/a8trejo"><img src="https://avatars.githubusercontent.com/u/62401433?v=4" width="100" height="100" alt="a8trejo"/><br /><sub><b>a8trejo</b></sub></a>                    |
+| :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
+|        <a href="https://github.com/ColemanRoo"><img src="https://avatars.githubusercontent.com/u/117104599?v=4" width="100" height="100" alt="ColemanRoo"/><br /><sub><b>ColemanRoo</b></sub></a>        |             <a href="https://github.com/stea9499"><img src="https://avatars.githubusercontent.com/u/4163795?v=4" width="100" height="100" alt="stea9499"/><br /><sub><b>stea9499</b></sub></a>              |     <a href="https://github.com/joemanley201"><img src="https://avatars.githubusercontent.com/u/8299960?v=4" width="100" height="100" alt="joemanley201"/><br /><sub><b>joemanley201</b></sub></a>     |       <a href="https://github.com/System233"><img src="https://avatars.githubusercontent.com/u/20336040?v=4" width="100" height="100" alt="System233"/><br /><sub><b>System233</b></sub></a>        |       <a href="https://github.com/jquanton"><img src="https://avatars.githubusercontent.com/u/88576563?v=4" width="100" height="100" alt="jquanton"/><br /><sub><b>jquanton</b></sub></a>       |              <a href="https://github.com/nissa-seru"><img src="https://avatars.githubusercontent.com/u/119150866?v=4" width="100" height="100" alt="nissa-seru"/><br /><sub><b>nissa-seru</b></sub></a>               |
+|    <a href="https://github.com/hannesrudolph"><img src="https://avatars.githubusercontent.com/u/49103247?v=4" width="100" height="100" alt="hannesrudolph"/><br /><sub><b>hannesrudolph</b></sub></a>    |             <a href="https://github.com/MuriloFP"><img src="https://avatars.githubusercontent.com/u/50873657?v=4" width="100" height="100" alt="MuriloFP"/><br /><sub><b>MuriloFP</b></sub></a>             |             <a href="https://github.com/NyxJae"><img src="https://avatars.githubusercontent.com/u/52313587?v=4" width="100" height="100" alt="NyxJae"/><br /><sub><b>NyxJae</b></sub></a>              |        <a href="https://github.com/punkpeye"><img src="https://avatars.githubusercontent.com/u/108313943?v=4" width="100" height="100" alt="punkpeye"/><br /><sub><b>punkpeye</b></sub></a>         |            <a href="https://github.com/d-oit"><img src="https://avatars.githubusercontent.com/u/6849456?v=4" width="100" height="100" alt="d-oit"/><br /><sub><b>d-oit</b></sub></a>            |            <a href="https://github.com/monotykamary"><img src="https://avatars.githubusercontent.com/u/1130103?v=4" width="100" height="100" alt="monotykamary"/><br /><sub><b>monotykamary</b></sub></a>             |
+|         <a href="https://github.com/lloydchang"><img src="https://avatars.githubusercontent.com/u/1329685?v=4" width="100" height="100" alt="lloydchang"/><br /><sub><b>lloydchang</b></sub></a>         | <a href="https://github.com/vigneshsubbiah16"><img src="https://avatars.githubusercontent.com/u/51325334?v=4" width="100" height="100" alt="vigneshsubbiah16"/><br /><sub><b>vigneshsubbiah16</b></sub></a> |            <a href="https://github.com/Szpadel"><img src="https://avatars.githubusercontent.com/u/1857251?v=4" width="100" height="100" alt="Szpadel"/><br /><sub><b>Szpadel</b></sub></a>             |       <a href="https://github.com/lupuletic"><img src="https://avatars.githubusercontent.com/u/105351510?v=4" width="100" height="100" alt="lupuletic"/><br /><sub><b>lupuletic</b></sub></a>       |        <a href="https://github.com/cannuri"><img src="https://avatars.githubusercontent.com/u/91494156?v=4" width="100" height="100" alt="cannuri"/><br /><sub><b>cannuri</b></sub></a>         | <a href="https://github.com/Smartsheet-JB-Brown"><img src="https://avatars.githubusercontent.com/u/171734120?v=4" width="100" height="100" alt="Smartsheet-JB-Brown"/><br /><sub><b>Smartsheet-JB-Brown</b></sub></a> |
+|           <a href="https://github.com/Premshay"><img src="https://avatars.githubusercontent.com/u/28099628?v=4" width="100" height="100" alt="Premshay"/><br /><sub><b>Premshay</b></sub></a>            |              <a href="https://github.com/psv2522"><img src="https://avatars.githubusercontent.com/u/87223770?v=4" width="100" height="100" alt="psv2522"/><br /><sub><b>psv2522</b></sub></a>               |      <a href="https://github.com/olweraltuve"><img src="https://avatars.githubusercontent.com/u/39308405?v=4" width="100" height="100" alt="olweraltuve"/><br /><sub><b>olweraltuve</b></sub></a>      |       <a href="https://github.com/RaySinner"><img src="https://avatars.githubusercontent.com/u/118297374?v=4" width="100" height="100" alt="RaySinner"/><br /><sub><b>RaySinner</b></sub></a>       |            <a href="https://github.com/qdaxb"><img src="https://avatars.githubusercontent.com/u/4157870?v=4" width="100" height="100" alt="qdaxb"/><br /><sub><b>qdaxb</b></sub></a>            |                <a href="https://github.com/feifei325"><img src="https://avatars.githubusercontent.com/u/46489071?v=4" width="100" height="100" alt="feifei325"/><br /><sub><b>feifei325</b></sub></a>                 |
+|      <a href="https://github.com/afshawnlotfi"><img src="https://avatars.githubusercontent.com/u/6283745?v=4" width="100" height="100" alt="afshawnlotfi"/><br /><sub><b>afshawnlotfi</b></sub></a>      |              <a href="https://github.com/emshvac"><img src="https://avatars.githubusercontent.com/u/121588911?v=4" width="100" height="100" alt="emshvac"/><br /><sub><b>emshvac</b></sub></a>              |         <a href="https://github.com/Lunchb0ne"><img src="https://avatars.githubusercontent.com/u/22198661?v=4" width="100" height="100" alt="Lunchb0ne"/><br /><sub><b>Lunchb0ne</b></sub></a>         |             <a href="https://github.com/sammcj"><img src="https://avatars.githubusercontent.com/u/862951?v=4" width="100" height="100" alt="sammcj"/><br /><sub><b>sammcj</b></sub></a>             |       <a href="https://github.com/dtrugman"><img src="https://avatars.githubusercontent.com/u/2451669?v=4" width="100" height="100" alt="dtrugman"/><br /><sub><b>dtrugman</b></sub></a>        |                 <a href="https://github.com/aitoroses"><img src="https://avatars.githubusercontent.com/u/1699368?v=4" width="100" height="100" alt="aitoroses"/><br /><sub><b>aitoroses</b></sub></a>                 |
+|           <a href="https://github.com/yt3trees"><img src="https://avatars.githubusercontent.com/u/57471763?v=4" width="100" height="100" alt="yt3trees"/><br /><sub><b>yt3trees</b></sub></a>            |              <a href="https://github.com/yongjer"><img src="https://avatars.githubusercontent.com/u/54315206?v=4" width="100" height="100" alt="yongjer"/><br /><sub><b>yongjer</b></sub></a>               |      <a href="https://github.com/vincentsong"><img src="https://avatars.githubusercontent.com/u/2343574?v=4" width="100" height="100" alt="vincentsong"/><br /><sub><b>vincentsong</b></sub></a>       | <a href="https://github.com/pugazhendhi-m"><img src="https://avatars.githubusercontent.com/u/132246623?v=4" width="100" height="100" alt="pugazhendhi-m"/><br /><sub><b>pugazhendhi-m</b></sub></a> |           <a href="https://github.com/eonghk"><img src="https://avatars.githubusercontent.com/u/139964?v=4" width="100" height="100" alt="eonghk"/><br /><sub><b>eonghk</b></sub></a>           |                  <a href="https://github.com/philfung"><img src="https://avatars.githubusercontent.com/u/1054593?v=4" width="100" height="100" alt="philfung"/><br /><sub><b>philfung</b></sub></a>                   |
+|               <a href="https://github.com/pdecat"><img src="https://avatars.githubusercontent.com/u/318490?v=4" width="100" height="100" alt="pdecat"/><br /><sub><b>pdecat</b></sub></a>                |                <a href="https://github.com/napter"><img src="https://avatars.githubusercontent.com/u/6260841?v=4" width="100" height="100" alt="napter"/><br /><sub><b>napter</b></sub></a>                 |                    <a href="https://github.com/mdp"><img src="https://avatars.githubusercontent.com/u/2868?v=4" width="100" height="100" alt="mdp"/><br /><sub><b>mdp</b></sub></a>                    |            <a href="https://github.com/jcbdev"><img src="https://avatars.githubusercontent.com/u/17152092?v=4" width="100" height="100" alt="jcbdev"/><br /><sub><b>jcbdev</b></sub></a>            |      <a href="https://github.com/benzntech"><img src="https://avatars.githubusercontent.com/u/4044180?v=4" width="100" height="100" alt="benzntech"/><br /><sub><b>benzntech</b></sub></a>      |              <a href="https://github.com/anton-otee"><img src="https://avatars.githubusercontent.com/u/149477749?v=4" width="100" height="100" alt="anton-otee"/><br /><sub><b>anton-otee</b></sub></a>               |
+|             <a href="https://github.com/AMHesch"><img src="https://avatars.githubusercontent.com/u/4777192?v=4" width="100" height="100" alt="AMHesch"/><br /><sub><b>AMHesch</b></sub></a>              |              <a href="https://github.com/bannzai"><img src="https://avatars.githubusercontent.com/u/10897361?v=4" width="100" height="100" alt="bannzai"/><br /><sub><b>bannzai</b></sub></a>               |           <a href="https://github.com/dairui1"><img src="https://avatars.githubusercontent.com/u/183250644?v=4" width="100" height="100" alt="dairui1"/><br /><sub><b>dairui1</b></sub></a>            |           <a href="https://github.com/dqroid"><img src="https://avatars.githubusercontent.com/u/192424994?v=4" width="100" height="100" alt="dqroid"/><br /><sub><b>dqroid</b></sub></a>            |      <a href="https://github.com/kinandan"><img src="https://avatars.githubusercontent.com/u/186135699?v=4" width="100" height="100" alt="kinandan"/><br /><sub><b>kinandan</b></sub></a>       |                       <a href="https://github.com/kohii"><img src="https://avatars.githubusercontent.com/u/6891780?v=4" width="100" height="100" alt="kohii"/><br /><sub><b>kohii</b></sub></a>                       |
+|       <a href="https://github.com/lightrabbit"><img src="https://avatars.githubusercontent.com/u/1521765?v=4" width="100" height="100" alt="lightrabbit"/><br /><sub><b>lightrabbit</b></sub></a>        |                   <a href="https://github.com/olup"><img src="https://avatars.githubusercontent.com/u/13785588?v=4" width="100" height="100" alt="olup"/><br /><sub><b>olup</b></sub></a>                   |      <a href="https://github.com/moqimoqidea"><img src="https://avatars.githubusercontent.com/u/39821951?v=4" width="100" height="100" alt="moqimoqidea"/><br /><sub><b>moqimoqidea</b></sub></a>      |        <a href="https://github.com/mosleyit"><img src="https://avatars.githubusercontent.com/u/189396442?v=4" width="100" height="100" alt="mosleyit"/><br /><sub><b>mosleyit</b></sub></a>         |       <a href="https://github.com/oprstchn"><img src="https://avatars.githubusercontent.com/u/16177972?v=4" width="100" height="100" alt="oprstchn"/><br /><sub><b>oprstchn</b></sub></a>       |               <a href="https://github.com/philipnext"><img src="https://avatars.githubusercontent.com/u/81944499?v=4" width="100" height="100" alt="philipnext"/><br /><sub><b>philipnext</b></sub></a>               |
+|      <a href="https://github.com/refactorthis"><img src="https://avatars.githubusercontent.com/u/3012240?v=4" width="100" height="100" alt="refactorthis"/><br /><sub><b>refactorthis</b></sub></a>      |      <a href="https://github.com/samir-nimbly"><img src="https://avatars.githubusercontent.com/u/112695483?v=4" width="100" height="100" alt="samir-nimbly"/><br /><sub><b>samir-nimbly</b></sub></a>       |              <a href="https://github.com/shaybc"><img src="https://avatars.githubusercontent.com/u/8535905?v=4" width="100" height="100" alt="shaybc"/><br /><sub><b>shaybc</b></sub></a>              |   <a href="https://github.com/shohei-ihaya"><img src="https://avatars.githubusercontent.com/u/25131938?v=4" width="100" height="100" alt="shohei-ihaya"/><br /><sub><b>shohei-ihaya</b></sub></a>   | <a href="https://github.com/student20880"><img src="https://avatars.githubusercontent.com/u/74263488?v=4" width="100" height="100" alt="student20880"/><br /><sub><b>student20880</b></sub></a> |          <a href="https://github.com/PretzelVector"><img src="https://avatars.githubusercontent.com/u/95664360?v=4" width="100" height="100" alt="PretzelVector"/><br /><sub><b>PretzelVector</b></sub></a>           |
+|       <a href="https://github.com/adamwlarson"><img src="https://avatars.githubusercontent.com/u/1392315?v=4" width="100" height="100" alt="adamwlarson"/><br /><sub><b>adamwlarson</b></sub></a>        |                <a href="https://github.com/alarno"><img src="https://avatars.githubusercontent.com/u/4355547?v=4" width="100" height="100" alt="alarno"/><br /><sub><b>alarno</b></sub></a>                 | <a href="https://github.com/andreastempsch"><img src="https://avatars.githubusercontent.com/u/117991125?v=4" width="100" height="100" alt="andreastempsch"/><br /><sub><b>andreastempsch</b></sub></a> |          <a href="https://github.com/Atlogit"><img src="https://avatars.githubusercontent.com/u/86947554?v=4" width="100" height="100" alt="Atlogit"/><br /><sub><b>Atlogit</b></sub></a>           |            <a href="https://github.com/dleen"><img src="https://avatars.githubusercontent.com/u/1297964?v=4" width="100" height="100" alt="dleen"/><br /><sub><b>dleen</b></sub></a>            |                 <a href="https://github.com/dbasclpy"><img src="https://avatars.githubusercontent.com/u/139889137?v=4" width="100" height="100" alt="dbasclpy"/><br /><sub><b>dbasclpy</b></sub></a>                  |
+| <a href="https://github.com/celestial-vault"><img src="https://avatars.githubusercontent.com/u/58194240?v=4" width="100" height="100" alt="celestial-vault"/><br /><sub><b>celestial-vault</b></sub></a> |           <a href="https://github.com/DeXtroTip"><img src="https://avatars.githubusercontent.com/u/21011087?v=4" width="100" height="100" alt="DeXtroTip"/><br /><sub><b>DeXtroTip</b></sub></a>            |              <a href="https://github.com/hesara"><img src="https://avatars.githubusercontent.com/u/1335918?v=4" width="100" height="100" alt="hesara"/><br /><sub><b>hesara</b></sub></a>              |       <a href="https://github.com/eltociear"><img src="https://avatars.githubusercontent.com/u/22633385?v=4" width="100" height="100" alt="eltociear"/><br /><sub><b>eltociear</b></sub></a>        | <a href="https://github.com/libertyteeth"><img src="https://avatars.githubusercontent.com/u/32841567?v=4" width="100" height="100" alt="libertyteeth"/><br /><sub><b>libertyteeth</b></sub></a> |           <a href="https://github.com/mamertofabian"><img src="https://avatars.githubusercontent.com/u/7698436?v=4" width="100" height="100" alt="mamertofabian"/><br /><sub><b>mamertofabian</b></sub></a>           |
+|     <a href="https://github.com/marvijo-code"><img src="https://avatars.githubusercontent.com/u/82562019?v=4" width="100" height="100" alt="marvijo-code"/><br /><sub><b>marvijo-code</b></sub></a>      |                  <a href="https://github.com/Sarke"><img src="https://avatars.githubusercontent.com/u/2719310?v=4" width="100" height="100" alt="Sarke"/><br /><sub><b>Sarke</b></sub></a>                  |               <a href="https://github.com/tgfjt"><img src="https://avatars.githubusercontent.com/u/2628239?v=4" width="100" height="100" alt="tgfjt"/><br /><sub><b>tgfjt</b></sub></a>                |       <a href="https://github.com/vladstudio"><img src="https://avatars.githubusercontent.com/u/914320?v=4" width="100" height="100" alt="vladstudio"/><br /><sub><b>vladstudio</b></sub></a>       |          <a href="https://github.com/ashktn"><img src="https://avatars.githubusercontent.com/u/6723913?v=4" width="100" height="100" alt="ashktn"/><br /><sub><b>ashktn</b></sub></a>           |                                                                                                                                                                                                                       |
+
+<!-- END CONTRIBUTORS SECTION -->
+
+## Licencia
+
+[Apache 2.0 © 2025 Roo Veterinary, Inc.](../LICENSE)
+
+---
+
+**¡Disfruta Roo Code!** Ya sea que lo mantengas con correa corta o lo dejes vagar de forma autónoma, estamos ansiosos por ver lo que construyes. Si tienes preguntas o ideas para nuevas funciones, visita nuestra [comunidad de Reddit](https://www.reddit.com/r/RooCode/) o [Discord](https://discord.gg/roocode). ¡Feliz programación!

+ 77 - 0
locales/fr/CODE_OF_CONDUCT.md

@@ -0,0 +1,77 @@
+# Code de Conduite des Contributeurs
+
+## Notre Engagement
+
+Dans l'intérêt de favoriser un environnement ouvert et accueillant, nous nous
+engageons, en tant que contributeurs et responsables, à faire de la participation
+à notre projet et à notre communauté une expérience sans harcèlement pour tous,
+indépendamment de l'âge, de la taille corporelle, du handicap, de l'origine ethnique,
+des caractéristiques sexuelles, de l'identité et de l'expression de genre,
+du niveau d'expérience, de l'éducation, du statut socio-économique, de la nationalité,
+de l'apparence personnelle, de la race, de la religion, ou de l'orientation sexuelle.
+
+## Nos Standards
+
+Exemples de comportements qui contribuent à créer un environnement positif :
+
+- Utiliser un langage accueillant et inclusif
+- Respecter les différents points de vue et expériences
+- Accepter gracieusement les critiques constructives
+- Se concentrer sur ce qui est le mieux pour la communauté
+- Faire preuve d'empathie envers les autres membres de la communauté
+
+Exemples de comportements inacceptables de la part des participants :
+
+- L'utilisation de langage ou d'images à caractère sexuel et l'attention ou les avances
+  sexuelles importunes
+- Le trolling, les commentaires insultants/désobligeants, et les attaques personnelles ou politiques
+- Le harcèlement public ou privé
+- La publication d'informations privées d'autrui, telles que des informations physiques ou
+  électroniques, sans autorisation explicite
+- Tout autre comportement qui pourrait raisonnablement être considéré comme inapproprié
+  dans un cadre professionnel
+
+## Nos Responsabilités
+
+Les mainteneurs de projet sont responsables de clarifier les standards de comportement
+acceptable et sont censés prendre des mesures correctives appropriées et équitables en
+réponse à tout cas de comportement inacceptable.
+
+Les mainteneurs de projet ont le droit et la responsabilité de supprimer, modifier ou
+rejeter les commentaires, commits, code, modifications du wiki, questions et autres contributions
+qui ne sont pas alignés sur ce Code de Conduite, ou de bannir temporairement ou
+définitivement tout contributeur pour d'autres comportements qu'ils jugent inappropriés,
+menaçants, offensants ou nuisibles.
+
+## Portée
+
+Ce Code de Conduite s'applique à la fois dans les espaces du projet et dans les espaces
+publics lorsqu'un individu représente le projet ou sa communauté. Les exemples de
+représentation d'un projet ou d'une communauté incluent l'utilisation d'une adresse e-mail
+officielle du projet, la publication via un compte officiel sur les réseaux sociaux,
+ou le fait d'agir en tant que représentant désigné lors d'un événement en ligne ou hors ligne.
+La représentation d'un projet peut être définie et clarifiée davantage par les mainteneurs du projet.
+
+## Application
+
+Les cas de comportement abusif, harcelant ou autrement inacceptable peuvent être
+signalés en contactant l'équipe du projet à [email protected]. Toutes les plaintes
+seront examinées et étudiées et donneront lieu à une réponse qui
+est jugée nécessaire et appropriée aux circonstances. L'équipe du projet est
+obligée de maintenir la confidentialité concernant la personne qui signale un incident.
+Des détails supplémentaires sur des politiques d'application spécifiques peuvent être publiés séparément.
+
+Les mainteneurs de projet qui ne suivent ou n'appliquent pas le Code de Conduite de bonne
+foi peuvent faire face à des répercussions temporaires ou permanentes déterminées par d'autres
+membres de la direction du projet.
+
+## Attribution
+
+Ce Code de Conduite est adapté de la [version de Cline][cline_coc] du [Contributor Covenant][homepage], version 1.4,
+disponible à https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
+
+[cline_coc]: https://github.com/cline/cline/blob/main/CODE_OF_CONDUCT.md
+[homepage]: https://www.contributor-covenant.org
+
+Pour obtenir des réponses aux questions courantes sur ce code de conduite, voir
+https://www.contributor-covenant.org/faq

+ 112 - 0
locales/fr/CONTRIBUTING.md

@@ -0,0 +1,112 @@
+# Contribuer à Roo Code
+
+Nous sommes ravis que vous soyez intéressé à contribuer à Roo Code. Que vous corrigiez un bug, ajoutiez une fonctionnalité ou amélioriez notre documentation, chaque contribution rend Roo Code plus intelligent ! Pour maintenir notre communauté dynamique et accueillante, tous les membres doivent adhérer à notre [Code de Conduite](CODE_OF_CONDUCT.md).
+
+## Rejoindre Notre Communauté
+
+Nous encourageons fortement tous les contributeurs à rejoindre notre [communauté Discord](https://discord.gg/roocode) ! Faire partie de notre serveur Discord vous aide à :
+
+- Obtenir de l'aide et des conseils en temps réel sur vos contributions
+- Vous connecter avec d'autres contributeurs et membres de l'équipe principale
+- Rester informé des développements et priorités du projet
+- Participer aux discussions qui façonnent l'avenir de Roo Code
+- Trouver des opportunités de collaboration avec d'autres développeurs
+
+## Signaler des Bugs ou des Problèmes
+
+Les rapports de bugs aident à améliorer Roo Code pour tout le monde ! Avant de créer un nouveau problème, veuillez [rechercher parmi les existants](https://github.com/RooVetGit/Roo-Code/issues) pour éviter les doublons. Lorsque vous êtes prêt à signaler un bug, rendez-vous sur notre [page d'issues](https://github.com/RooVetGit/Roo-Code/issues/new/choose) où vous trouverez un modèle pour vous aider à remplir les informations pertinentes.
+
+<blockquote class='warning-note'>
+     🔐 <b>Important :</b> Si vous découvrez une vulnérabilité de sécurité, veuillez utiliser <a href="https://github.com/RooVetGit/Roo-Code/security/advisories/new">l'outil de sécurité Github pour la signaler en privé</a>.
+</blockquote>
+
+## Décider Sur Quoi Travailler
+
+Vous cherchez une bonne première contribution ? Consultez les issues dans la section "Issue [Unassigned]" de notre [Projet Github Roo Code Issues](https://github.com/orgs/RooVetGit/projects/1). Celles-ci sont spécifiquement sélectionnées pour les nouveaux contributeurs et les domaines où nous aimerions recevoir de l'aide !
+
+Nous accueillons également les contributions à notre [documentation](https://docs.roocode.com/) ! Qu'il s'agisse de corriger des fautes de frappe, d'améliorer les guides existants ou de créer du nouveau contenu éducatif - nous aimerions construire un référentiel de ressources guidé par la communauté qui aide chacun à tirer le meilleur parti de Roo Code. Vous pouvez cliquer sur "Edit this page" sur n'importe quelle page pour accéder rapidement au bon endroit dans Github pour éditer le fichier, ou vous pouvez plonger directement dans https://github.com/RooVetGit/Roo-Code-Docs.
+
+Si vous prévoyez de travailler sur une fonctionnalité plus importante, veuillez d'abord créer une [demande de fonctionnalité](https://github.com/RooVetGit/Roo-Code/discussions/categories/feature-requests?discussions_q=is%3Aopen+category%3A%22Feature+Requests%22+sort%3Atop) afin que nous puissions discuter si elle s'aligne avec la vision de Roo Code.
+
+## Configuration de Développement
+
+1. **Clonez** le dépôt :
+
+```sh
+git clone https://github.com/RooVetGit/Roo-Code.git
+```
+
+2. **Installez les dépendances** :
+
+```sh
+npm run install:all
+```
+
+3. **Démarrez la vue web (application Vite/React avec HMR)** :
+
+```sh
+npm run dev
+```
+
+4. **Débogage** :
+   Appuyez sur `F5` (ou **Exécuter** → **Démarrer le débogage**) dans VSCode pour ouvrir une nouvelle session avec Roo Code chargé.
+
+Les modifications apportées à la vue web apparaîtront immédiatement. Les modifications apportées à l'extension principale nécessiteront un redémarrage de l'hôte d'extension.
+
+Vous pouvez également créer un fichier .vsix et l'installer directement dans VSCode :
+
+```sh
+npm run build
+```
+
+Un fichier `.vsix` apparaîtra dans le répertoire `bin/` qui peut être installé avec :
+
+```sh
+code --install-extension bin/roo-cline-<version>.vsix
+```
+
+## Écrire et Soumettre du Code
+
+Tout le monde peut contribuer avec du code à Roo Code, mais nous vous demandons de suivre ces directives pour vous assurer que vos contributions puissent être intégrées en douceur :
+
+1. **Gardez les Pull Requests Ciblées**
+
+    - Limitez les PRs à une seule fonctionnalité ou correction de bug
+    - Divisez les changements plus importants en PRs plus petites et liées
+    - Divisez les changements en commits logiques qui peuvent être examinés indépendamment
+
+2. **Qualité du Code**
+
+    - Toutes les PRs doivent passer les vérifications CI qui incluent à la fois le linting et le formatage
+    - Résolvez toutes les alertes ou erreurs ESLint avant de soumettre
+    - Répondez à tous les retours d'Ellipsis, notre outil automatisé de revue de code
+    - Suivez les meilleures pratiques TypeScript et maintenez la sécurité des types
+
+3. **Tests**
+
+    - Ajoutez des tests pour les nouvelles fonctionnalités
+    - Exécutez `npm test` pour vous assurer que tous les tests passent
+    - Mettez à jour les tests existants si vos changements les affectent
+    - Incluez à la fois des tests unitaires et d'intégration lorsque c'est approprié
+
+4. **Directives pour les Commits**
+
+    - Écrivez des messages de commit clairs et descriptifs
+    - Référencez les issues pertinentes dans les commits en utilisant #numéro-issue
+
+5. **Avant de Soumettre**
+
+    - Rebasez votre branche sur la dernière main
+    - Assurez-vous que votre branche se construit avec succès
+    - Vérifiez à nouveau que tous les tests passent
+    - Revoyez vos changements pour détecter tout code de débogage ou logs de console
+
+6. **Description du Pull Request**
+    - Décrivez clairement ce que font vos changements
+    - Incluez des étapes pour tester les changements
+    - Listez tous les changements incompatibles
+    - Ajoutez des captures d'écran pour les changements d'interface utilisateur
+
+## Accord de Contribution
+
+En soumettant une pull request, vous acceptez que vos contributions soient sous licence selon la même licence que le projet ([Apache 2.0](../LICENSE)).

+ 211 - 0
locales/fr/README.md

@@ -0,0 +1,211 @@
+<div align="center">
+<sub>
+
+[English](../../README.md) • [Català](../../locales/ca/README.md) • [Deutsch](../../locales/de/README.md) • [Español](../../locales/es/README.md) • Français • [हिन्दी](../../locales/hi/README.md) • [Italiano](../../locales/it/README.md)
+
+</sub>
+<sub>
+
+[日本語](../../locales/ja/README.md) • [한국어](../../locales/ko/README.md) • [Polski](../../locales/pl/README.md) • [Português (BR)](../../locales/pt-BR/README.md) • [Türkçe](../../locales/tr/README.md) • [Tiếng Việt](../../locales/vi/README.md) • [简体中文](../../locales/zh-CN/README.md) • [繁體中文](../../locales/zh-TW/README.md)
+
+</sub>
+</div>
+<br>
+<div align="center">
+  <h2>Rejoignez la communauté Roo Code</h2>
+  <p>Connectez-vous avec des développeurs, contribuez avec vos idées et restez à jour avec les derniers outils de programmation propulsés par l'IA.</p>
+  
+  <a href="https://discord.gg/roocode" target="_blank"><img src="https://img.shields.io/badge/Rejoindre%20Discord-5865F2?style=for-the-badge&logo=discord&logoColor=white" alt="Rejoindre Discord"></a>
+  <a href="https://www.reddit.com/r/RooCode/" target="_blank"><img src="https://img.shields.io/badge/Rejoindre%20Reddit-FF4500?style=for-the-badge&logo=reddit&logoColor=white" alt="Rejoindre Reddit"></a>
+  
+</div>
+<br>
+<br>
+
+<div align="center">
+<h1>Roo Code (anciennement Roo Cline)</h1>
+
+<a href="https://marketplace.visualstudio.com/items?itemName=RooVeterinaryInc.roo-cline" target="_blank"><img src="https://img.shields.io/badge/T%C3%A9l%C3%A9charger%20sur%20VS%20Marketplace-blue?style=for-the-badge&logo=visualstudiocode&logoColor=white" alt="Télécharger sur VS Marketplace"></a>
+<a href="https://github.com/RooVetGit/Roo-Code/discussions/categories/feature-requests?discussions_q=is%3Aopen+category%3A%22Feature+Requests%22+sort%3Atop" target="_blank"><img src="https://img.shields.io/badge/Demandes%20de%20fonctionnalit%C3%A9s-yellow?style=for-the-badge" alt="Demandes de fonctionnalités"></a>
+<a href="https://marketplace.visualstudio.com/items?itemName=RooVeterinaryInc.roo-cline&ssr=false#review-details" target="_blank"><img src="https://img.shields.io/badge/%C3%89valuer%20%26%20Commenter-green?style=for-the-badge" alt="Évaluer & Commenter"></a>
+<a href="https://docs.roocode.com" target="_blank"><img src="https://img.shields.io/badge/Documentation-6B46C1?style=for-the-badge&logo=readthedocs&logoColor=white" alt="Documentation"></a>
+
+</div>
+
+**Roo Code** est un **agent de codage autonome** alimenté par l'IA qui réside dans votre éditeur. Il peut :
+
+- Communiquer en langage naturel
+- Lire et écrire des fichiers directement dans votre espace de travail
+- Exécuter des commandes terminal
+- Automatiser des actions de navigateur
+- S'intégrer avec n'importe quelle API/modèle compatible OpenAI ou personnalisé
+- Adapter sa "personnalité" et ses capacités grâce aux **Modes Personnalisés**
+
+Que vous recherchiez un partenaire de codage flexible, un architecte système, ou des rôles spécialisés comme un ingénieur QA ou un chef de produit, Roo Code peut vous aider à développer des logiciels plus efficacement.
+
+Consultez le [CHANGELOG](../CHANGELOG.md) pour des mises à jour détaillées et des corrections.
+
+---
+
+## 🎉 Roo Code 3.8 est sorti
+
+Roo Code 3.8 est disponible avec des améliorations de performances, de nouvelles fonctionnalités et des corrections de bugs.
+
+- Points de contrôle asynchrones plus rapides
+- Support pour les fichiers .rooignore
+- Correction des problèmes de terminal et d'écran gris
+- Roo Code peut s'exécuter dans plusieurs fenêtres
+- Stratégie d'édition multi-diff expérimentale
+- Communication de sous-tâche à tâche parent
+- Fournisseur DeepSeek mis à jour
+- Nouveau fournisseur "Human Relay"
+
+---
+
+## Que peut faire Roo Code ?
+
+- 🚀 **Générer du code** à partir de descriptions en langage naturel
+- 🔧 **Refactoriser et déboguer** du code existant
+- 📝 **Écrire et mettre à jour** de la documentation
+- 🤔 **Répondre aux questions** sur votre base de code
+- 🔄 **Automatiser** des tâches répétitives
+- 🏗️ **Créer** de nouveaux fichiers et projets
+
+## Démarrage rapide
+
+1. [Installer Roo Code](https://docs.roocode.com/getting-started/installing)
+2. [Connecter votre fournisseur d'IA](https://docs.roocode.com/getting-started/connecting-api-provider)
+3. [Essayer votre première tâche](https://docs.roocode.com/getting-started/your-first-task)
+
+## Fonctionnalités clés
+
+### Modes multiples
+
+Roo Code s'adapte à vos besoins avec des [modes](https://docs.roocode.com/basic-usage/modes) spécialisés :
+
+- **Mode Code :** Pour les tâches de programmation générales
+- **Mode Architecte :** Pour la planification et le leadership technique
+- **Mode Question :** Pour répondre aux questions et fournir des informations
+- **Mode Débogage :** Pour le diagnostic systématique de problèmes
+- **[Modes personnalisés](https://docs.roocode.com/advanced-usage/custom-modes) :** Créez un nombre illimité de personnalités spécialisées pour l'audit de sécurité, l'optimisation des performances, la documentation ou toute autre tâche
+
+### Outils intelligents
+
+Roo Code est livré avec des [outils](https://docs.roocode.com/basic-usage/using-tools) puissants qui peuvent :
+
+- Lire et écrire des fichiers dans votre projet
+- Exécuter des commandes dans votre terminal VS Code
+- Contrôler un navigateur web
+- Utiliser des outils externes via [MCP (Model Context Protocol)](https://docs.roocode.com/advanced-usage/mcp)
+
+MCP étend les capacités de Roo Code en vous permettant d'ajouter un nombre illimité d'outils personnalisés. Intégrez des API externes, connectez-vous à des bases de données ou créez des outils de développement spécialisés - MCP fournit le cadre pour étendre la fonctionnalité de Roo Code afin de répondre à vos besoins spécifiques.
+
+### Personnalisation
+
+Faites fonctionner Roo Code à votre manière avec :
+
+- [Instructions personnalisées](https://docs.roocode.com/advanced-usage/custom-instructions) pour un comportement personnalisé
+- [Modes personnalisés](https://docs.roocode.com/advanced-usage/custom-modes) pour des tâches spécialisées
+- [Modèles locaux](https://docs.roocode.com/advanced-usage/local-models) pour une utilisation hors ligne
+- [Paramètres d'approbation automatique](https://docs.roocode.com/advanced-usage/auto-approving-actions) pour des workflows plus rapides
+
+## Ressources
+
+### Documentation
+
+- [Guide d'utilisation de base](https://docs.roocode.com/basic-usage/the-chat-interface)
+- [Fonctionnalités avancées](https://docs.roocode.com/advanced-usage/auto-approving-actions)
+- [Foire aux questions](https://docs.roocode.com/faq)
+
+### Communauté
+
+- **Discord :** [Rejoignez notre serveur Discord](https://discord.gg/roocode) pour une aide en temps réel et des discussions
+- **Reddit :** [Visitez notre subreddit](https://www.reddit.com/r/RooCode) pour partager des expériences et des astuces
+- **GitHub :** Signalez des [problèmes](https://github.com/RooVetGit/Roo-Code/issues) ou demandez de nouvelles [fonctionnalités](https://github.com/RooVetGit/Roo-Code/discussions/categories/feature-requests?discussions_q=is%3Aopen+category%3A%22Feature+Requests%22+sort%3Atop)
+
+---
+
+## Configuration et développement local
+
+1. **Clonez** le dépôt :
+
+```sh
+git clone https://github.com/RooVetGit/Roo-Code.git
+```
+
+2. **Installez les dépendances** :
+
+```sh
+npm run install:all
+```
+
+3. **Démarrez la vue web (application Vite/React avec HMR)** :
+
+```sh
+npm run dev
+```
+
+4. **Débogage** :
+   Appuyez sur `F5` (ou **Exécuter** → **Démarrer le débogage**) dans VSCode pour ouvrir une nouvelle session avec Roo Code chargé.
+
+Les modifications apportées à la vue web apparaîtront immédiatement. Les modifications apportées à l'extension principale nécessiteront un redémarrage de l'hôte d'extension.
+
+Vous pouvez également créer un fichier .vsix et l'installer directement dans VSCode :
+
+```sh
+npm run build
+```
+
+Un fichier `.vsix` apparaîtra dans le répertoire `bin/` qui peut être installé avec :
+
+```sh
+code --install-extension bin/roo-cline-<version>.vsix
+```
+
+Nous utilisons [changesets](https://github.com/changesets/changesets) pour le versionnement et la publication. Consultez notre `CHANGELOG.md` pour les notes de version.
+
+---
+
+## Avertissement
+
+**Veuillez noter** que Roo Veterinary, Inc **ne fait** aucune représentation ou garantie concernant tout code, modèle ou autre outil fourni ou mis à disposition en relation avec Roo Code, tout outil tiers associé, ou tout résultat. Vous assumez **tous les risques** associés à l'utilisation de tels outils ou résultats ; ces outils sont fournis **"TELS QUELS"** et **"SELON DISPONIBILITÉ"**. Ces risques peuvent inclure, sans s'y limiter, la violation de propriété intellectuelle, les vulnérabilités ou attaques cyber, les biais, les inexactitudes, les erreurs, les défauts, les virus, les temps d'arrêt, la perte ou les dommages matériels, et/ou les blessures corporelles. Vous êtes seul responsable de votre utilisation de ces outils ou résultats (y compris, mais sans s'y limiter, leur légalité, pertinence et résultats).
+
+---
+
+## Contribuer
+
+Nous adorons les contributions de la communauté ! Commencez par lire notre [CONTRIBUTING.md](CONTRIBUTING.md).
+
+---
+
+## Contributeurs
+
+Merci à tous nos contributeurs qui ont aidé à améliorer Roo Code !
+
+<!-- START CONTRIBUTORS SECTION - AUTO-GENERATED, DO NOT EDIT MANUALLY -->
+
+|               <a href="https://github.com/mrubens"><img src="https://avatars.githubusercontent.com/u/2600?v=4" width="100" height="100" alt="mrubens"/><br /><sub><b>mrubens</b></sub></a>               |         <a href="https://github.com/saoudrizwan"><img src="https://avatars.githubusercontent.com/u/7799382?v=4" width="100" height="100" alt="saoudrizwan"/><br /><sub><b>saoudrizwan</b></sub></a>         |                   <a href="https://github.com/cte"><img src="https://avatars.githubusercontent.com/u/16332?v=4" width="100" height="100" alt="cte"/><br /><sub><b>cte</b></sub></a>                    |          <a href="https://github.com/samhvw8"><img src="https://avatars.githubusercontent.com/u/12538214?v=4" width="100" height="100" alt="samhvw8"/><br /><sub><b>samhvw8</b></sub></a>           |    <a href="https://github.com/daniel-lxs"><img src="https://avatars.githubusercontent.com/u/57051444?v=4" width="100" height="100" alt="daniel-lxs"/><br /><sub><b>daniel-lxs</b></sub></a>    |                   <a href="https://github.com/a8trejo"><img src="https://avatars.githubusercontent.com/u/62401433?v=4" width="100" height="100" alt="a8trejo"/><br /><sub><b>a8trejo</b></sub></a>                    |
+| :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
+|        <a href="https://github.com/ColemanRoo"><img src="https://avatars.githubusercontent.com/u/117104599?v=4" width="100" height="100" alt="ColemanRoo"/><br /><sub><b>ColemanRoo</b></sub></a>        |             <a href="https://github.com/stea9499"><img src="https://avatars.githubusercontent.com/u/4163795?v=4" width="100" height="100" alt="stea9499"/><br /><sub><b>stea9499</b></sub></a>              |     <a href="https://github.com/joemanley201"><img src="https://avatars.githubusercontent.com/u/8299960?v=4" width="100" height="100" alt="joemanley201"/><br /><sub><b>joemanley201</b></sub></a>     |       <a href="https://github.com/System233"><img src="https://avatars.githubusercontent.com/u/20336040?v=4" width="100" height="100" alt="System233"/><br /><sub><b>System233</b></sub></a>        |       <a href="https://github.com/jquanton"><img src="https://avatars.githubusercontent.com/u/88576563?v=4" width="100" height="100" alt="jquanton"/><br /><sub><b>jquanton</b></sub></a>       |              <a href="https://github.com/nissa-seru"><img src="https://avatars.githubusercontent.com/u/119150866?v=4" width="100" height="100" alt="nissa-seru"/><br /><sub><b>nissa-seru</b></sub></a>               |
+|    <a href="https://github.com/hannesrudolph"><img src="https://avatars.githubusercontent.com/u/49103247?v=4" width="100" height="100" alt="hannesrudolph"/><br /><sub><b>hannesrudolph</b></sub></a>    |             <a href="https://github.com/MuriloFP"><img src="https://avatars.githubusercontent.com/u/50873657?v=4" width="100" height="100" alt="MuriloFP"/><br /><sub><b>MuriloFP</b></sub></a>             |             <a href="https://github.com/NyxJae"><img src="https://avatars.githubusercontent.com/u/52313587?v=4" width="100" height="100" alt="NyxJae"/><br /><sub><b>NyxJae</b></sub></a>              |        <a href="https://github.com/punkpeye"><img src="https://avatars.githubusercontent.com/u/108313943?v=4" width="100" height="100" alt="punkpeye"/><br /><sub><b>punkpeye</b></sub></a>         |            <a href="https://github.com/d-oit"><img src="https://avatars.githubusercontent.com/u/6849456?v=4" width="100" height="100" alt="d-oit"/><br /><sub><b>d-oit</b></sub></a>            |            <a href="https://github.com/monotykamary"><img src="https://avatars.githubusercontent.com/u/1130103?v=4" width="100" height="100" alt="monotykamary"/><br /><sub><b>monotykamary</b></sub></a>             |
+|         <a href="https://github.com/lloydchang"><img src="https://avatars.githubusercontent.com/u/1329685?v=4" width="100" height="100" alt="lloydchang"/><br /><sub><b>lloydchang</b></sub></a>         | <a href="https://github.com/vigneshsubbiah16"><img src="https://avatars.githubusercontent.com/u/51325334?v=4" width="100" height="100" alt="vigneshsubbiah16"/><br /><sub><b>vigneshsubbiah16</b></sub></a> |            <a href="https://github.com/Szpadel"><img src="https://avatars.githubusercontent.com/u/1857251?v=4" width="100" height="100" alt="Szpadel"/><br /><sub><b>Szpadel</b></sub></a>             |       <a href="https://github.com/lupuletic"><img src="https://avatars.githubusercontent.com/u/105351510?v=4" width="100" height="100" alt="lupuletic"/><br /><sub><b>lupuletic</b></sub></a>       |        <a href="https://github.com/cannuri"><img src="https://avatars.githubusercontent.com/u/91494156?v=4" width="100" height="100" alt="cannuri"/><br /><sub><b>cannuri</b></sub></a>         | <a href="https://github.com/Smartsheet-JB-Brown"><img src="https://avatars.githubusercontent.com/u/171734120?v=4" width="100" height="100" alt="Smartsheet-JB-Brown"/><br /><sub><b>Smartsheet-JB-Brown</b></sub></a> |
+|           <a href="https://github.com/Premshay"><img src="https://avatars.githubusercontent.com/u/28099628?v=4" width="100" height="100" alt="Premshay"/><br /><sub><b>Premshay</b></sub></a>            |              <a href="https://github.com/psv2522"><img src="https://avatars.githubusercontent.com/u/87223770?v=4" width="100" height="100" alt="psv2522"/><br /><sub><b>psv2522</b></sub></a>               |      <a href="https://github.com/olweraltuve"><img src="https://avatars.githubusercontent.com/u/39308405?v=4" width="100" height="100" alt="olweraltuve"/><br /><sub><b>olweraltuve</b></sub></a>      |       <a href="https://github.com/RaySinner"><img src="https://avatars.githubusercontent.com/u/118297374?v=4" width="100" height="100" alt="RaySinner"/><br /><sub><b>RaySinner</b></sub></a>       |            <a href="https://github.com/qdaxb"><img src="https://avatars.githubusercontent.com/u/4157870?v=4" width="100" height="100" alt="qdaxb"/><br /><sub><b>qdaxb</b></sub></a>            |                <a href="https://github.com/feifei325"><img src="https://avatars.githubusercontent.com/u/46489071?v=4" width="100" height="100" alt="feifei325"/><br /><sub><b>feifei325</b></sub></a>                 |
+|      <a href="https://github.com/afshawnlotfi"><img src="https://avatars.githubusercontent.com/u/6283745?v=4" width="100" height="100" alt="afshawnlotfi"/><br /><sub><b>afshawnlotfi</b></sub></a>      |              <a href="https://github.com/emshvac"><img src="https://avatars.githubusercontent.com/u/121588911?v=4" width="100" height="100" alt="emshvac"/><br /><sub><b>emshvac</b></sub></a>              |         <a href="https://github.com/Lunchb0ne"><img src="https://avatars.githubusercontent.com/u/22198661?v=4" width="100" height="100" alt="Lunchb0ne"/><br /><sub><b>Lunchb0ne</b></sub></a>         |             <a href="https://github.com/sammcj"><img src="https://avatars.githubusercontent.com/u/862951?v=4" width="100" height="100" alt="sammcj"/><br /><sub><b>sammcj</b></sub></a>             |       <a href="https://github.com/dtrugman"><img src="https://avatars.githubusercontent.com/u/2451669?v=4" width="100" height="100" alt="dtrugman"/><br /><sub><b>dtrugman</b></sub></a>        |                 <a href="https://github.com/aitoroses"><img src="https://avatars.githubusercontent.com/u/1699368?v=4" width="100" height="100" alt="aitoroses"/><br /><sub><b>aitoroses</b></sub></a>                 |
+|           <a href="https://github.com/yt3trees"><img src="https://avatars.githubusercontent.com/u/57471763?v=4" width="100" height="100" alt="yt3trees"/><br /><sub><b>yt3trees</b></sub></a>            |              <a href="https://github.com/yongjer"><img src="https://avatars.githubusercontent.com/u/54315206?v=4" width="100" height="100" alt="yongjer"/><br /><sub><b>yongjer</b></sub></a>               |      <a href="https://github.com/vincentsong"><img src="https://avatars.githubusercontent.com/u/2343574?v=4" width="100" height="100" alt="vincentsong"/><br /><sub><b>vincentsong</b></sub></a>       | <a href="https://github.com/pugazhendhi-m"><img src="https://avatars.githubusercontent.com/u/132246623?v=4" width="100" height="100" alt="pugazhendhi-m"/><br /><sub><b>pugazhendhi-m</b></sub></a> |           <a href="https://github.com/eonghk"><img src="https://avatars.githubusercontent.com/u/139964?v=4" width="100" height="100" alt="eonghk"/><br /><sub><b>eonghk</b></sub></a>           |                  <a href="https://github.com/philfung"><img src="https://avatars.githubusercontent.com/u/1054593?v=4" width="100" height="100" alt="philfung"/><br /><sub><b>philfung</b></sub></a>                   |
+|               <a href="https://github.com/pdecat"><img src="https://avatars.githubusercontent.com/u/318490?v=4" width="100" height="100" alt="pdecat"/><br /><sub><b>pdecat</b></sub></a>                |                <a href="https://github.com/napter"><img src="https://avatars.githubusercontent.com/u/6260841?v=4" width="100" height="100" alt="napter"/><br /><sub><b>napter</b></sub></a>                 |                    <a href="https://github.com/mdp"><img src="https://avatars.githubusercontent.com/u/2868?v=4" width="100" height="100" alt="mdp"/><br /><sub><b>mdp</b></sub></a>                    |            <a href="https://github.com/jcbdev"><img src="https://avatars.githubusercontent.com/u/17152092?v=4" width="100" height="100" alt="jcbdev"/><br /><sub><b>jcbdev</b></sub></a>            |      <a href="https://github.com/benzntech"><img src="https://avatars.githubusercontent.com/u/4044180?v=4" width="100" height="100" alt="benzntech"/><br /><sub><b>benzntech</b></sub></a>      |              <a href="https://github.com/anton-otee"><img src="https://avatars.githubusercontent.com/u/149477749?v=4" width="100" height="100" alt="anton-otee"/><br /><sub><b>anton-otee</b></sub></a>               |
+|             <a href="https://github.com/AMHesch"><img src="https://avatars.githubusercontent.com/u/4777192?v=4" width="100" height="100" alt="AMHesch"/><br /><sub><b>AMHesch</b></sub></a>              |              <a href="https://github.com/bannzai"><img src="https://avatars.githubusercontent.com/u/10897361?v=4" width="100" height="100" alt="bannzai"/><br /><sub><b>bannzai</b></sub></a>               |           <a href="https://github.com/dairui1"><img src="https://avatars.githubusercontent.com/u/183250644?v=4" width="100" height="100" alt="dairui1"/><br /><sub><b>dairui1</b></sub></a>            |           <a href="https://github.com/dqroid"><img src="https://avatars.githubusercontent.com/u/192424994?v=4" width="100" height="100" alt="dqroid"/><br /><sub><b>dqroid</b></sub></a>            |      <a href="https://github.com/kinandan"><img src="https://avatars.githubusercontent.com/u/186135699?v=4" width="100" height="100" alt="kinandan"/><br /><sub><b>kinandan</b></sub></a>       |                       <a href="https://github.com/kohii"><img src="https://avatars.githubusercontent.com/u/6891780?v=4" width="100" height="100" alt="kohii"/><br /><sub><b>kohii</b></sub></a>                       |
+|       <a href="https://github.com/lightrabbit"><img src="https://avatars.githubusercontent.com/u/1521765?v=4" width="100" height="100" alt="lightrabbit"/><br /><sub><b>lightrabbit</b></sub></a>        |                   <a href="https://github.com/olup"><img src="https://avatars.githubusercontent.com/u/13785588?v=4" width="100" height="100" alt="olup"/><br /><sub><b>olup</b></sub></a>                   |      <a href="https://github.com/moqimoqidea"><img src="https://avatars.githubusercontent.com/u/39821951?v=4" width="100" height="100" alt="moqimoqidea"/><br /><sub><b>moqimoqidea</b></sub></a>      |        <a href="https://github.com/mosleyit"><img src="https://avatars.githubusercontent.com/u/189396442?v=4" width="100" height="100" alt="mosleyit"/><br /><sub><b>mosleyit</b></sub></a>         |       <a href="https://github.com/oprstchn"><img src="https://avatars.githubusercontent.com/u/16177972?v=4" width="100" height="100" alt="oprstchn"/><br /><sub><b>oprstchn</b></sub></a>       |               <a href="https://github.com/philipnext"><img src="https://avatars.githubusercontent.com/u/81944499?v=4" width="100" height="100" alt="philipnext"/><br /><sub><b>philipnext</b></sub></a>               |
+|      <a href="https://github.com/refactorthis"><img src="https://avatars.githubusercontent.com/u/3012240?v=4" width="100" height="100" alt="refactorthis"/><br /><sub><b>refactorthis</b></sub></a>      |      <a href="https://github.com/samir-nimbly"><img src="https://avatars.githubusercontent.com/u/112695483?v=4" width="100" height="100" alt="samir-nimbly"/><br /><sub><b>samir-nimbly</b></sub></a>       |              <a href="https://github.com/shaybc"><img src="https://avatars.githubusercontent.com/u/8535905?v=4" width="100" height="100" alt="shaybc"/><br /><sub><b>shaybc</b></sub></a>              |   <a href="https://github.com/shohei-ihaya"><img src="https://avatars.githubusercontent.com/u/25131938?v=4" width="100" height="100" alt="shohei-ihaya"/><br /><sub><b>shohei-ihaya</b></sub></a>   | <a href="https://github.com/student20880"><img src="https://avatars.githubusercontent.com/u/74263488?v=4" width="100" height="100" alt="student20880"/><br /><sub><b>student20880</b></sub></a> |          <a href="https://github.com/PretzelVector"><img src="https://avatars.githubusercontent.com/u/95664360?v=4" width="100" height="100" alt="PretzelVector"/><br /><sub><b>PretzelVector</b></sub></a>           |
+|       <a href="https://github.com/adamwlarson"><img src="https://avatars.githubusercontent.com/u/1392315?v=4" width="100" height="100" alt="adamwlarson"/><br /><sub><b>adamwlarson</b></sub></a>        |                <a href="https://github.com/alarno"><img src="https://avatars.githubusercontent.com/u/4355547?v=4" width="100" height="100" alt="alarno"/><br /><sub><b>alarno</b></sub></a>                 | <a href="https://github.com/andreastempsch"><img src="https://avatars.githubusercontent.com/u/117991125?v=4" width="100" height="100" alt="andreastempsch"/><br /><sub><b>andreastempsch</b></sub></a> |          <a href="https://github.com/Atlogit"><img src="https://avatars.githubusercontent.com/u/86947554?v=4" width="100" height="100" alt="Atlogit"/><br /><sub><b>Atlogit</b></sub></a>           |            <a href="https://github.com/dleen"><img src="https://avatars.githubusercontent.com/u/1297964?v=4" width="100" height="100" alt="dleen"/><br /><sub><b>dleen</b></sub></a>            |                 <a href="https://github.com/dbasclpy"><img src="https://avatars.githubusercontent.com/u/139889137?v=4" width="100" height="100" alt="dbasclpy"/><br /><sub><b>dbasclpy</b></sub></a>                  |
+| <a href="https://github.com/celestial-vault"><img src="https://avatars.githubusercontent.com/u/58194240?v=4" width="100" height="100" alt="celestial-vault"/><br /><sub><b>celestial-vault</b></sub></a> |           <a href="https://github.com/DeXtroTip"><img src="https://avatars.githubusercontent.com/u/21011087?v=4" width="100" height="100" alt="DeXtroTip"/><br /><sub><b>DeXtroTip</b></sub></a>            |              <a href="https://github.com/hesara"><img src="https://avatars.githubusercontent.com/u/1335918?v=4" width="100" height="100" alt="hesara"/><br /><sub><b>hesara</b></sub></a>              |       <a href="https://github.com/eltociear"><img src="https://avatars.githubusercontent.com/u/22633385?v=4" width="100" height="100" alt="eltociear"/><br /><sub><b>eltociear</b></sub></a>        | <a href="https://github.com/libertyteeth"><img src="https://avatars.githubusercontent.com/u/32841567?v=4" width="100" height="100" alt="libertyteeth"/><br /><sub><b>libertyteeth</b></sub></a> |           <a href="https://github.com/mamertofabian"><img src="https://avatars.githubusercontent.com/u/7698436?v=4" width="100" height="100" alt="mamertofabian"/><br /><sub><b>mamertofabian</b></sub></a>           |
+|     <a href="https://github.com/marvijo-code"><img src="https://avatars.githubusercontent.com/u/82562019?v=4" width="100" height="100" alt="marvijo-code"/><br /><sub><b>marvijo-code</b></sub></a>      |                  <a href="https://github.com/Sarke"><img src="https://avatars.githubusercontent.com/u/2719310?v=4" width="100" height="100" alt="Sarke"/><br /><sub><b>Sarke</b></sub></a>                  |               <a href="https://github.com/tgfjt"><img src="https://avatars.githubusercontent.com/u/2628239?v=4" width="100" height="100" alt="tgfjt"/><br /><sub><b>tgfjt</b></sub></a>                |       <a href="https://github.com/vladstudio"><img src="https://avatars.githubusercontent.com/u/914320?v=4" width="100" height="100" alt="vladstudio"/><br /><sub><b>vladstudio</b></sub></a>       |          <a href="https://github.com/ashktn"><img src="https://avatars.githubusercontent.com/u/6723913?v=4" width="100" height="100" alt="ashktn"/><br /><sub><b>ashktn</b></sub></a>           |                                                                                                                                                                                                                       |
+
+<!-- END CONTRIBUTORS SECTION -->
+
+## Licence
+
+[Apache 2.0 © 2025 Roo Veterinary, Inc.](../LICENSE)
+
+---
+
+**Profitez de Roo Code !** Que vous le gardiez en laisse courte ou que vous le laissiez se déplacer de manière autonome, nous avons hâte de voir ce que vous allez construire. Si vous avez des questions ou des idées de fonctionnalités, passez par notre [communauté Reddit](https://www.reddit.com/r/RooCode/) ou [Discord](https://discord.gg/roocode). Bon codage !

+ 75 - 0
locales/hi/CODE_OF_CONDUCT.md

@@ -0,0 +1,75 @@
+# योगदानकर्ता संधि आचार संहिता
+
+## हमारी प्रतिज्ञा
+
+एक खुले और स्वागतयोग्य वातावरण को बढ़ावा देने के हित में, हम
+योगदानकर्ता और अनुरक्षक प्रतिज्ञा करते हैं कि हमारे प्रोजेक्ट और
+हमारे समुदाय में भागीदारी को हर किसी के लिए उत्पीड़न-मुक्त अनुभव बनाएंगे, चाहे उम्र, शरीर
+आकार, विकलांगता, जातीयता, यौन विशेषताएं, लिंग पहचान और अभिव्यक्ति,
+अनुभव का स्तर, शिक्षा, सामाजिक-आर्थिक स्थिति, राष्ट्रीयता, व्यक्तिगत
+उपस्थिति, नस्ल, धर्म, या यौन पहचान और अभिविन्यास कुछ भी हो।
+
+## हमारे मानक
+
+सकारात्मक वातावरण बनाने में योगदान देने वाले व्यवहार के उदाहरणों
+में शामिल हैं:
+
+- स्वागतयोग्य और समावेशी भाषा का उपयोग
+- भिन्न दृष्टिकोणों और अनुभवों का सम्मान करना
+- रचनात्मक आलोचना को सौम्यता से स्वीकार करना
+- समुदाय के लिए जो सबसे अच्छा है उस पर ध्यान केंद्रित करना
+- अन्य समुदाय सदस्यों के प्रति सहानुभूति दिखाना
+
+प्रतिभागियों द्वारा अस्वीकार्य व्यवहार के उदाहरणों में शामिल हैं:
+
+- यौन भाषा या छवियों का उपयोग और अवांछित यौन ध्यान या
+  अग्रिम कदम
+- ट्रोलिंग, अपमानजनक/अपमानकारी टिप्पणियां, और व्यक्तिगत या राजनीतिक हमले
+- सार्वजनिक या निजी उत्पीड़न
+- दूसरों की निजी जानकारी, जैसे भौतिक या इलेक्ट्रॉनिक
+  पता, बिना स्पष्ट अनुमति के प्रकाशित करना
+- अन्य आचरण जिसे एक
+  पेशेवर सेटिंग में अनुचित माना जा सकता है
+
+## हमारी जिम्मेदारियां
+
+प्रोजेक्ट अनुरक्षक स्वीकार्य व्यवहार के मानकों को स्पष्ट करने के लिए जिम्मेदार हैं
+और उनसे अस्वीकार्य व्यवहार के किसी भी उदाहरण के जवाब में उचित और निष्पक्ष सुधारात्मक कार्रवाई करने की उम्मीद की जाती है।
+
+प्रोजेक्ट अनुरक्षकों के पास टिप्पणियों, कमिट्स, कोड, विकी संपादनों, मुद्दों और अन्य योगदानों को हटाने, संपादित करने या
+अस्वीकार करने का अधिकार और जिम्मेदारी है जो इस आचार संहिता के अनुरूप नहीं हैं, या किसी भी योगदानकर्ता को अस्थायी रूप से या
+स्थायी रूप से प्रतिबंधित करने का अधिकार है जिन्हें वे अनुचित,
+धमकी देने वाला, आक्रामक, या हानिकारक व्यवहार मानते हैं।
+
+## दायरा
+
+यह आचार संहिता प्रोजेक्ट स्थानों के भीतर और सार्वजनिक स्थानों दोनों में लागू होती है
+जब कोई व्यक्ति प्रोजेक्ट या उसके समुदाय का प्रतिनिधित्व कर रहा हो। परियोजना का
+प्रतिनिधित्व करने के उदाहरणों में आधिकारिक प्रोजेक्ट ई-मेल का उपयोग शामिल है,
+आधिकारिक सोशल मीडिया अकाउंट के माध्यम से पोस्टिंग, या नियुक्त किए गए प्रतिनिधि के रूप में कार्य करना
+ऑनलाइन या ऑफलाइन इवेंट में। प्रोजेक्ट का प्रतिनिधित्व आगे
+प्रोजेक्ट अनुरक्षकों द्वारा परिभाषित और स्पष्ट किया जा सकता है।
+
+## प्रवर्तन
+
+दुर्व्यवहार, उत्पीड़न, या अन्यथा अस्वीकार्य व्यवहार के उदाहरणों की
+रिपोर्ट [email protected] पर प्रोजेक्ट टीम से संपर्क करके की जा सकती है। सभी शिकायतें
+समीक्षा की जाएंगी और जांच की जाएगी और इसके परिणामस्वरूप एक प्रतिक्रिया होगी जो
+परिस्थितियों के अनुसार आवश्यक और उचित मानी जाती है। प्रोजेक्ट टीम
+एक घटना के रिपोर्टर के संबंध में गोपनीयता बनाए रखने के लिए बाध्य है।
+विशिष्ट प्रवर्तन नीतियों के अतिरिक्त विवरण अलग से पोस्ट किए जा सकते हैं।
+
+प्रोजेक्ट अनुरक्षक जो आचार संहिता का पालन या लागू नहीं करते हैं
+सद्भाव से, प्रोजेक्ट के अन्य नेतृत्व सदस्यों द्वारा निर्धारित अस्थायी या
+स्थायी प्रतिक्रियाओं का सामना कर सकते हैं।
+
+## श्रेय
+
+यह आचार संहिता [Cline के संस्करण][cline_coc] से अनुकूलित है [योगदानकर्ता संधि][homepage], संस्करण 1.4,
+जो यहां उपलब्ध है https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
+
+[cline_coc]: https://github.com/cline/cline/blob/main/CODE_OF_CONDUCT.md
+[homepage]: https://www.contributor-covenant.org
+
+इस आचार संहिता के बारे में आम सवालों के जवाब के लिए, देखें
+https://www.contributor-covenant.org/faq

+ 112 - 0
locales/hi/CONTRIBUTING.md

@@ -0,0 +1,112 @@
+# Roo Code में योगदान देना
+
+हम खुश हैं कि आप Roo Code में योगदान देने में रुचि रखते हैं। चाहे आप एक बग ठीक कर रहे हों, एक फीचर जोड़ रहे हों, या हमारे दस्तावेज़ों को सुधार रहे हों, हर योगदान Roo Code को अधिक स्मार्ट बनाता है! हमारे समुदाय को जीवंत और स्वागतयोग्य बनाए रखने के लिए, सभी सदस्यों को हमारे [आचार संहिता](CODE_OF_CONDUCT.md) का पालन करना चाहिए।
+
+## हमारे समुदाय में शामिल हों
+
+हम सभी योगदानकर्ताओं को हमारे [Discord समुदाय](https://discord.gg/roocode) में शामिल होने के लिए दृढ़ता से प्रोत्साहित करते हैं! हमारे Discord सर्वर का हिस्सा होने से आपको मदद मिलती है:
+
+- अपने योगदान पर रीयल-टाइम मदद और मार्गदर्शन प्राप्त करें
+- अन्य योगदानकर्ताओं और कोर टीम के सदस्यों से जुड़ें
+- प्रोजेक्ट के विकास और प्राथमिकताओं से अपडेट रहें
+- ऐसी चर्चाओं में भाग लें जो Roo Code के भविष्य को आकार देती हैं
+- अन्य डेवलपर्स के साथ सहयोग के अवसर खोजें
+
+## बग या समस्याओं की रिपोर्ट करना
+
+बग रिपोर्ट हर किसी के लिए Roo Code को बेहतर बनाने में मदद करती हैं! नई समस्या बनाने से पहले, कृपया डुप्लिकेट से बचने के लिए [मौजूदा समस्याओं की खोज करें](https://github.com/RooVetGit/Roo-Code/issues)। जब आप बग की रिपोर्ट करने के लिए तैयार हों, तो हमारे [इश्यूज पेज](https://github.com/RooVetGit/Roo-Code/issues/new/choose) पर जाएं जहां आपको प्रासंगिक जानकारी भरने में मदद करने के लिए एक टेम्पलेट मिलेगा।
+
+<blockquote class='warning-note'>
+     🔐 <b>महत्वपूर्ण:</b> यदि आप कोई सुरक्षा कमजोरी खोजते हैं, तो कृपया <a href="https://github.com/RooVetGit/Roo-Code/security/advisories/new">इसे निजी तौर पर रिपोर्ट करने के लिए Github सुरक्षा उपकरण का उपयोग करें</a>।
+</blockquote>
+
+## किस पर काम करना है यह तय करना
+
+पहले योगदान के लिए एक अच्छा अवसर खोज रहे हैं? हमारे [Roo Code इश्यूज](https://github.com/orgs/RooVetGit/projects/1) Github प्रोजेक्ट के "Issue [Unassigned]" सेक्शन में इश्यूज देखें। ये विशेष रूप से नए योगदानकर्ताओं के लिए और ऐसे क्षेत्रों के लिए क्यूरेट किए गए हैं जहां हमें कुछ मदद की जरूरत होगी!
+
+हम अपने [दस्तावेज़ीकरण](https://docs.roocode.com/) में योगदान का भी स्वागत करते हैं! चाहे वह टाइपो ठीक करना हो, मौजूदा गाइड को सुधारना हो, या नई शैक्षिक सामग्री बनाना हो - हम संसाधनों का एक समुदाय-संचालित भंडार बनाना चाहते हैं जो हर किसी को Roo Code का अधिकतम उपयोग करने में मदद करे। आप फ़ाइल को संपादित करने के लिए किसी भी पृष्ठ पर "Edit this page" पर क्लिक कर सकते हैं या सीधे https://github.com/RooVetGit/Roo-Code-Docs में जा सकते हैं।
+
+यदि आप एक बड़ी विशेषता पर काम करने की योजना बना रहे हैं, तो कृपया पहले एक [फीचर अनुरोध](https://github.com/RooVetGit/Roo-Code/discussions/categories/feature-requests?discussions_q=is%3Aopen+category%3A%22Feature+Requests%22+sort%3Atop) बनाएं ताकि हम चर्चा कर सकें कि क्या यह Roo Code के दृष्टिकोण के अनुरूप है।
+
+## डेवलपमेंट सेटअप
+
+1. रिपो **क्लोन** करें:
+
+```sh
+git clone https://github.com/RooVetGit/Roo-Code.git
+```
+
+2. **डिपेंडेंसीज इंस्टॉल** करें:
+
+```sh
+npm run install:all
+```
+
+3. **वेबव्यू शुरू करें (Vite/React ऐप HMR के साथ)**:
+
+```sh
+npm run dev
+```
+
+4. **डिबग**:
+   VSCode में `F5` दबाएं (या **Run** → **Start Debugging**) Roo Code लोड के साथ एक नया सेशन खोलने के लिए।
+
+वेबव्यू में परिवर्तन तुरंत दिखाई देंगे। कोर एक्सटेंशन में परिवर्तनों के लिए एक्सटेंशन होस्ट को रीस्टार्ट करने की आवश्यकता होगी।
+
+वैकल्पिक रूप से आप .vsix बना सकते हैं और इसे सीधे VSCode में इंस्टॉल कर सकते हैं:
+
+```sh
+npm run build
+```
+
+`bin/` डायरेक्टरी में एक `.vsix` फ़ाइल दिखाई देगी जिसे इस कमांड से इंस्टॉल किया जा सकता है:
+
+```sh
+code --install-extension bin/roo-cline-<version>.vsix
+```
+
+## कोड लिखना और सबमिट करना
+
+कोई भी Roo Code में कोड का योगदान दे सकता है, लेकिन हम आपसे अनुरोध करते हैं कि आप इन दिशानिर्देशों का पालन करें ताकि आपके योगदान को सुचारू रूप से एकीकृत किया जा सके:
+
+1. **पुल रिक्वेस्ट को फोकस्ड रखें**
+
+    - PR को एक ही फीचर या बग फिक्स तक सीमित रखें
+    - बड़े परिवर्तनों को छोटी, संबंधित PR में विभाजित करें
+    - परिवर्तनों को तार्किक कमिट्स में तोड़ें जिन्हें स्वतंत्र रूप से समीक्षा की जा सके
+
+2. **कोड क्वालिटी**
+
+    - सभी PR को CI चेक पास करना चाहिए जिसमें लिंटिंग और फॉर्मेटिंग दोनों शामिल हैं
+    - सबमिट करने से पहले किसी भी ESLint चेतावनी या त्रुटि को संबोधित करें
+    - Ellipsis, हमारे स्वचालित कोड समीक्षा टूल से सभी फीडबैक का जवाब दें
+    - TypeScript के बेस्ट प्रैक्टिस का पालन करें और टाइप सुरक्षा बनाए रखें
+
+3. **टेस्टिंग**
+
+    - नई विशेषताओं के लिए टेस्ट जोड़ें
+    - यह सुनिश्चित करने के लिए `npm test` चलाएं कि सभी टेस्ट पास हों
+    - यदि आपके परिवर्तन उन्हें प्रभावित करते हैं तो मौजूदा टेस्ट अपडेट करें
+    - जहां उपयुक्त हो, यूनिट टेस्ट और इंटीग्रेशन टेस्ट दोनों शामिल करें
+
+4. **कमिट दिशानिर्देश**
+
+    - स्पष्ट, वर्णनात्मक कमिट संदेश लिखें
+    - #issue-number का उपयोग करके कमिट्स में प्रासंगिक मुद्दों का संदर्भ दें
+
+5. **सबमिट करने से पहले**
+
+    - अपनी ब्रांच को लेटेस्ट मेन पर रीबेस करें
+    - सुनिश्चित करें कि आपकी ब्रांच सफलतापूर्वक बिल्ड होती है
+    - डबल-चेक करें कि सभी टेस्ट पास हो रहे हैं
+    - अपने परिवर्तनों की समीक्षा करें किसी भी डिबगिंग कोड या कंसोल लॉग के लिए
+
+6. **पुल रिक्वेस्ट विवरण**
+    - स्पष्ट रूप से बताएं कि आपके परिवर्तन क्या करते हैं
+    - परिवर्तनों का परीक्षण करने के लिए चरण शामिल करें
+    - किसी भी ब्रेकिंग चेंज की सूची बनाएं
+    - UI परिवर्तनों के लिए स्क्रीनशॉट जोड़ें
+
+## योगदान समझौता
+
+पुल रिक्वेस्ट सबमिट करके, आप सहमत होते हैं कि आपके योगदान को प्रोजेक्ट के समान लाइसेंस ([Apache 2.0](../LICENSE)) के तहत लाइसेंस दिया जाएगा।

+ 211 - 0
locales/hi/README.md

@@ -0,0 +1,211 @@
+<div align="center">
+<sub>
+
+[English](../../README.md) • [Català](../../locales/ca/README.md) • [Deutsch](../../locales/de/README.md) • [Español](../../locales/es/README.md) • [Français](../../locales/fr/README.md) • हिन्दी • [Italiano](../../locales/it/README.md)
+
+</sub>
+<sub>
+
+[日本語](../../locales/ja/README.md) • [한국어](../../locales/ko/README.md) • [Polski](../../locales/pl/README.md) • [Português (BR)](../../locales/pt-BR/README.md) • [Türkçe](../../locales/tr/README.md) • [Tiếng Việt](../../locales/vi/README.md) • [简体中文](../../locales/zh-CN/README.md) • [繁體中文](../../locales/zh-TW/README.md)
+
+</sub>
+</div>
+<br>
+<div align="center">
+  <h2>Roo Code समुदाय में शामिल हों</h2>
+  <p>डेवलपर्स से जुड़ें, विचारों का योगदान दें, और AI-संचालित कोडिंग टूल्स के साथ अपडेट रहें।</p>
+  
+  <a href="https://discord.gg/roocode" target="_blank"><img src="https://img.shields.io/badge/Discord%20में%20शामिल%20हों-5865F2?style=for-the-badge&logo=discord&logoColor=white" alt="Discord में शामिल हों"></a>
+  <a href="https://www.reddit.com/r/RooCode/" target="_blank"><img src="https://img.shields.io/badge/Reddit%20में%20शामिल%20हों-FF4500?style=for-the-badge&logo=reddit&logoColor=white" alt="Reddit में शामिल हों"></a>
+  
+</div>
+<br>
+<br>
+
+<div align="center">
+<h1>Roo Code (पूर्व में Roo Cline)</h1>
+
+<a href="https://marketplace.visualstudio.com/items?itemName=RooVeterinaryInc.roo-cline" target="_blank"><img src="https://img.shields.io/badge/VS%20Marketplace%20पर%20डाउनलोड%20करें-blue?style=for-the-badge&logo=visualstudiocode&logoColor=white" alt="VS Marketplace पर डाउनलोड करें"></a>
+<a href="https://github.com/RooVetGit/Roo-Code/discussions/categories/feature-requests?discussions_q=is%3Aopen+category%3A%22Feature+Requests%22+sort%3Atop" target="_blank"><img src="https://img.shields.io/badge/फीचर%20अनुरोध-yellow?style=for-the-badge" alt="फीचर अनुरोध"></a>
+<a href="https://marketplace.visualstudio.com/items?itemName=RooVeterinaryInc.roo-cline&ssr=false#review-details" target="_blank"><img src="https://img.shields.io/badge/रेट%20%26%20समीक्षा-green?style=for-the-badge" alt="रेट & समीक्षा"></a>
+<a href="https://docs.roocode.com" target="_blank"><img src="https://img.shields.io/badge/दस्तावेज़ीकरण-6B46C1?style=for-the-badge&logo=readthedocs&logoColor=white" alt="दस्तावेज़ीकरण"></a>
+
+</div>
+
+**Roo Code** एक AI-संचालित **स्वायत्त कोडिंग एजेंट** है जो आपके एडिटर में रहता है। यह कर सकता है:
+
+- प्राकृतिक भाषा में संवाद
+- आपके वर्कस्पेस में सीधे फ़ाइलें पढ़ना और लिखना
+- टर्मिनल कमांड चलाना
+- ब्राउज़र एक्शन को स्वचालित करना
+- किसी भी OpenAI-संगत या कस्टम API/मॉडल के साथ एकीकृत होना
+- **कस्टम मोड्स** के माध्यम से अपनी "व्यक्तित्व" और क्षमताओं को अनुकूलित करना
+
+चाहे आप एक लचीला कोडिंग पार्टनर, सिस्टम आर्किटेक्ट, या क्यूए इंजीनियर या प्रोडक्ट मैनेजर जैसी विशेष भूमिकाओं की तलाश कर रहे हों, Roo Code आपको अधिक कुशलता से सॉफ्टवेयर बनाने में मदद कर सकता है।
+
+विस्तृत अपडेट और फिक्स के लिए [CHANGELOG](../CHANGELOG.md) देखें।
+
+---
+
+## 🎉 Roo Code 3.8 जारी
+
+Roo Code 3.8 प्रदर्शन बढ़ोतरी, नई सुविधाओं और बग फिक्स के साथ उपलब्ध है।
+
+- तेज़ एसिंक्रोनस चेकपॉइंट्स
+- .rooignore फ़ाइलों के लिए समर्थन
+- टर्मिनल और ग्रे स्क्रीन समस्याओं का समाधान
+- Roo Code कई विंडोज़ में चल सकता है
+- प्रायोगिक मल्टी-डिफ एडिटिंग स्ट्रैटेजी
+- सबटास्क से पैरेंट टास्क तक संचार
+- अपडेटेड DeepSeek प्रोवाइडर
+- नया "ह्यूमन रिले" प्रोवाइडर
+
+---
+
+## Roo Code क्या कर सकता है?
+
+- 🚀 प्राकृतिक भाषा विवरण से **कोड जनरेट** करना
+- 🔧 मौजूदा कोड का **रीफैक्टर और डिबग** करना
+- 📝 दस्तावेज़ीकरण **लिखना और अपडेट** करना
+- 🤔 आपके कोडबेस के बारे में **प्रश्नों के उत्तर** देना
+- 🔄 दोहराने वाले कार्यों को **स्वचालित** करना
+- 🏗️ नई फ़ाइलें और प्रोजेक्ट्स **बनाना**
+
+## क्विक स्टार्ट
+
+1. [Roo Code इंस्टॉल करें](https://docs.roocode.com/getting-started/installing)
+2. [अपने AI प्रोवाइडर को कनेक्ट करें](https://docs.roocode.com/getting-started/connecting-api-provider)
+3. [अपना पहला टास्क आज़माएं](https://docs.roocode.com/getting-started/your-first-task)
+
+## मुख्य विशेषताएं
+
+### मल्टीपल मोड्स
+
+Roo Code विशेष [मोड्स](https://docs.roocode.com/basic-usage/modes) के साथ आपकी आवश्यकताओं के अनुसार अनुकूलित होता है:
+
+- **कोड मोड:** सामान्य कोडिंग कार्यों के लिए
+- **आर्किटेक्ट मोड:** योजना और तकनीकी नेतृत्व के लिए
+- **आस्क मोड:** प्रश्नों के उत्तर देने और जानकारी प्रदान करने के लिए
+- **डिबग मोड:** व्यवस्थित समस्या निदान के लिए
+- **[कस्टम मोड्स](https://docs.roocode.com/advanced-usage/custom-modes):** सुरक्षा ऑडिटिंग, प्रदर्शन अनुकूलन, दस्तावेज़ीकरण, या किसी अन्य कार्य के लिए असीमित विशेष पर्सोनाज़ बनाएं
+
+### स्मार्ट टूल्स
+
+Roo Code शक्तिशाली [टूल्स](https://docs.roocode.com/basic-usage/using-tools) के साथ आता है जो कर सकते हैं:
+
+- आपके प्रोजेक्ट में फ़ाइलें पढ़ना और लिखना
+- आपके VS Code टर्मिनल में कमांड्स चलाना
+- वेब ब्राउज़र को नियंत्रित करना
+- [MCP (मॉडल कॉन्टेक्स्ट प्रोटोकॉल)](https://docs.roocode.com/advanced-usage/mcp) के माध्यम से बाहरी टूल्स का उपयोग करना
+
+MCP आपको असीमित कस्टम टूल्स जोड़ने की अनुमति देकर Roo Code की क्षमताओं का विस्तार करता है। बाहरी APIs के साथ एकीकरण, डेटाबेस से कनेक्ट, या विशेष डेवलपमेंट टूल्स बनाएं - MCP आपकी विशिष्ट आवश्यकताओं को पूरा करने के लिए Roo Code की कार्यक्षमता का विस्तार करने के लिए फ्रेमवर्क प्रदान करता है।
+
+### अनुकूलन
+
+अपने तरीके से Roo Code को काम करवाएं:
+
+- व्यक्तिगत व्यवहार के लिए [कस्टम इंस्ट्रक्शंस](https://docs.roocode.com/advanced-usage/custom-instructions)
+- विशेष कार्यों के लिए [कस्टम मोड्स](https://docs.roocode.com/advanced-usage/custom-modes)
+- ऑफलाइन उपयोग के लिए [लोकल मॉडल्स](https://docs.roocode.com/advanced-usage/local-models)
+- तेज वर्कफ़्लो के लिए [ऑटो-अप्रूवल सेटिंग्स](https://docs.roocode.com/advanced-usage/auto-approving-actions)
+
+## संसाधन
+
+### दस्तावेज़ीकरण
+
+- [बेसिक उपयोग गाइड](https://docs.roocode.com/basic-usage/the-chat-interface)
+- [एडवांस्ड फीचर्स](https://docs.roocode.com/advanced-usage/auto-approving-actions)
+- [अक्सर पूछे जाने वाले प्रश्न](https://docs.roocode.com/faq)
+
+### समुदाय
+
+- **Discord:** रीयल-टाइम मदद और चर्चाओं के लिए [हमारे Discord सर्वर में शामिल हों](https://discord.gg/roocode)
+- **Reddit:** अनुभव और टिप्स साझा करने के लिए [हमारे subreddit पर जाएं](https://www.reddit.com/r/RooCode)
+- **GitHub:** [समस्याओं की रिपोर्ट करें](https://github.com/RooVetGit/Roo-Code/issues) या [फीचर अनुरोध करें](https://github.com/RooVetGit/Roo-Code/discussions/categories/feature-requests?discussions_q=is%3Aopen+category%3A%22Feature+Requests%22+sort%3Atop)
+
+---
+
+## लोकल सेटअप और डेवलपमेंट
+
+1. रिपो **क्लोन** करें:
+
+```sh
+git clone https://github.com/RooVetGit/Roo-Code.git
+```
+
+2. **डिपेंडेंसीज इंस्टॉल** करें:
+
+```sh
+npm run install:all
+```
+
+3. **वेबव्यू शुरू करें (Vite/React ऐप HMR के साथ)**:
+
+```sh
+npm run dev
+```
+
+4. **डिबग**:
+   VSCode में `F5` दबाएं (या **Run** → **Start Debugging**) Roo Code लोड के साथ एक नया सेशन खोलने के लिए।
+
+वेबव्यू में परिवर्तन तुरंत दिखाई देंगे। कोर एक्सटेंशन में परिवर्तनों के लिए एक्सटेंशन होस्ट को रीस्टार्ट करने की आवश्यकता होगी।
+
+वैकल्पिक रूप से आप .vsix बना सकते हैं और इसे सीधे VSCode में इंस्टॉल कर सकते हैं:
+
+```sh
+npm run build
+```
+
+`bin/` डायरेक्टरी में एक `.vsix` फ़ाइल दिखाई देगी जिसे इस कमांड से इंस्टॉल किया जा सकता है:
+
+```sh
+code --install-extension bin/roo-cline-<version>.vsix
+```
+
+वर्जनिंग और पब्लिशिंग के लिए हम [changesets](https://github.com/changesets/changesets) का उपयोग करते हैं। रिलीज नोट्स के लिए हमारी `CHANGELOG.md` देखें।
+
+---
+
+## अस्वीकरण
+
+**कृपया ध्यान दें** कि Roo Veterinary, Inc Roo Code के संबंध में प्रदान किए गए या उपलब्ध कराए गए किसी भी कोड, मॉडल या अन्य टूल्स, किसी भी संबंधित थर्ड-पार्टी टूल्स, या किसी भी परिणामी आउटपुट के संबंध में **कोई** प्रतिनिधित्व या वारंटी **नहीं** देता है। आप ऐसे किसी भी टूल्स या आउटपुट के उपयोग से जुड़े **सभी जोखिमों** को मानते हैं; ऐसे टूल्स **"जैसा है"** और **"जैसा उपलब्ध है"** के आधार पर प्रदान किए जाते हैं। ऐसे जोखिमों में, बिना किसी सीमा के, बौद्धिक संपदा उल्लंघन, साइबर कमजोरियां या हमले, पूर्वाग्रह, अशुद्धियां, त्रुटियां, दोष, वायरस, डाउनटाइम, संपत्ति का नुकसान या क्षति, और/या व्यक्तिगत चोट शामिल हो सकते हैं। आप ऐसे किसी भी टूल्स या आउटपुट के अपने उपयोग के लिए (जिसमें, बिना किसी सीमा के, उनकी वैधता, उपयुक्तता और परिणाम शामिल हैं) पूरी तरह से जिम्मेदार हैं।
+
+---
+
+## योगदान
+
+हम सामुदायिक योगदान पसंद करते हैं! हमारी [CONTRIBUTING.md](CONTRIBUTING.md) पढ़कर शुरुआत करें।
+
+---
+
+## योगदानकर्ता
+
+Roo Code को बेहतर बनाने में मदद करने वाले हमारे सभी योगदानकर्ताओं को धन्यवाद!
+
+<!-- START CONTRIBUTORS SECTION - AUTO-GENERATED, DO NOT EDIT MANUALLY -->
+
+|               <a href="https://github.com/mrubens"><img src="https://avatars.githubusercontent.com/u/2600?v=4" width="100" height="100" alt="mrubens"/><br /><sub><b>mrubens</b></sub></a>               |         <a href="https://github.com/saoudrizwan"><img src="https://avatars.githubusercontent.com/u/7799382?v=4" width="100" height="100" alt="saoudrizwan"/><br /><sub><b>saoudrizwan</b></sub></a>         |                   <a href="https://github.com/cte"><img src="https://avatars.githubusercontent.com/u/16332?v=4" width="100" height="100" alt="cte"/><br /><sub><b>cte</b></sub></a>                    |          <a href="https://github.com/samhvw8"><img src="https://avatars.githubusercontent.com/u/12538214?v=4" width="100" height="100" alt="samhvw8"/><br /><sub><b>samhvw8</b></sub></a>           |    <a href="https://github.com/daniel-lxs"><img src="https://avatars.githubusercontent.com/u/57051444?v=4" width="100" height="100" alt="daniel-lxs"/><br /><sub><b>daniel-lxs</b></sub></a>    |                   <a href="https://github.com/a8trejo"><img src="https://avatars.githubusercontent.com/u/62401433?v=4" width="100" height="100" alt="a8trejo"/><br /><sub><b>a8trejo</b></sub></a>                    |
+| :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
+|        <a href="https://github.com/ColemanRoo"><img src="https://avatars.githubusercontent.com/u/117104599?v=4" width="100" height="100" alt="ColemanRoo"/><br /><sub><b>ColemanRoo</b></sub></a>        |             <a href="https://github.com/stea9499"><img src="https://avatars.githubusercontent.com/u/4163795?v=4" width="100" height="100" alt="stea9499"/><br /><sub><b>stea9499</b></sub></a>              |     <a href="https://github.com/joemanley201"><img src="https://avatars.githubusercontent.com/u/8299960?v=4" width="100" height="100" alt="joemanley201"/><br /><sub><b>joemanley201</b></sub></a>     |       <a href="https://github.com/System233"><img src="https://avatars.githubusercontent.com/u/20336040?v=4" width="100" height="100" alt="System233"/><br /><sub><b>System233</b></sub></a>        |       <a href="https://github.com/jquanton"><img src="https://avatars.githubusercontent.com/u/88576563?v=4" width="100" height="100" alt="jquanton"/><br /><sub><b>jquanton</b></sub></a>       |              <a href="https://github.com/nissa-seru"><img src="https://avatars.githubusercontent.com/u/119150866?v=4" width="100" height="100" alt="nissa-seru"/><br /><sub><b>nissa-seru</b></sub></a>               |
+|    <a href="https://github.com/hannesrudolph"><img src="https://avatars.githubusercontent.com/u/49103247?v=4" width="100" height="100" alt="hannesrudolph"/><br /><sub><b>hannesrudolph</b></sub></a>    |             <a href="https://github.com/MuriloFP"><img src="https://avatars.githubusercontent.com/u/50873657?v=4" width="100" height="100" alt="MuriloFP"/><br /><sub><b>MuriloFP</b></sub></a>             |             <a href="https://github.com/NyxJae"><img src="https://avatars.githubusercontent.com/u/52313587?v=4" width="100" height="100" alt="NyxJae"/><br /><sub><b>NyxJae</b></sub></a>              |        <a href="https://github.com/punkpeye"><img src="https://avatars.githubusercontent.com/u/108313943?v=4" width="100" height="100" alt="punkpeye"/><br /><sub><b>punkpeye</b></sub></a>         |            <a href="https://github.com/d-oit"><img src="https://avatars.githubusercontent.com/u/6849456?v=4" width="100" height="100" alt="d-oit"/><br /><sub><b>d-oit</b></sub></a>            |            <a href="https://github.com/monotykamary"><img src="https://avatars.githubusercontent.com/u/1130103?v=4" width="100" height="100" alt="monotykamary"/><br /><sub><b>monotykamary</b></sub></a>             |
+|         <a href="https://github.com/lloydchang"><img src="https://avatars.githubusercontent.com/u/1329685?v=4" width="100" height="100" alt="lloydchang"/><br /><sub><b>lloydchang</b></sub></a>         | <a href="https://github.com/vigneshsubbiah16"><img src="https://avatars.githubusercontent.com/u/51325334?v=4" width="100" height="100" alt="vigneshsubbiah16"/><br /><sub><b>vigneshsubbiah16</b></sub></a> |            <a href="https://github.com/Szpadel"><img src="https://avatars.githubusercontent.com/u/1857251?v=4" width="100" height="100" alt="Szpadel"/><br /><sub><b>Szpadel</b></sub></a>             |       <a href="https://github.com/lupuletic"><img src="https://avatars.githubusercontent.com/u/105351510?v=4" width="100" height="100" alt="lupuletic"/><br /><sub><b>lupuletic</b></sub></a>       |        <a href="https://github.com/cannuri"><img src="https://avatars.githubusercontent.com/u/91494156?v=4" width="100" height="100" alt="cannuri"/><br /><sub><b>cannuri</b></sub></a>         | <a href="https://github.com/Smartsheet-JB-Brown"><img src="https://avatars.githubusercontent.com/u/171734120?v=4" width="100" height="100" alt="Smartsheet-JB-Brown"/><br /><sub><b>Smartsheet-JB-Brown</b></sub></a> |
+|           <a href="https://github.com/Premshay"><img src="https://avatars.githubusercontent.com/u/28099628?v=4" width="100" height="100" alt="Premshay"/><br /><sub><b>Premshay</b></sub></a>            |              <a href="https://github.com/psv2522"><img src="https://avatars.githubusercontent.com/u/87223770?v=4" width="100" height="100" alt="psv2522"/><br /><sub><b>psv2522</b></sub></a>               |      <a href="https://github.com/olweraltuve"><img src="https://avatars.githubusercontent.com/u/39308405?v=4" width="100" height="100" alt="olweraltuve"/><br /><sub><b>olweraltuve</b></sub></a>      |       <a href="https://github.com/RaySinner"><img src="https://avatars.githubusercontent.com/u/118297374?v=4" width="100" height="100" alt="RaySinner"/><br /><sub><b>RaySinner</b></sub></a>       |            <a href="https://github.com/qdaxb"><img src="https://avatars.githubusercontent.com/u/4157870?v=4" width="100" height="100" alt="qdaxb"/><br /><sub><b>qdaxb</b></sub></a>            |                <a href="https://github.com/feifei325"><img src="https://avatars.githubusercontent.com/u/46489071?v=4" width="100" height="100" alt="feifei325"/><br /><sub><b>feifei325</b></sub></a>                 |
+|      <a href="https://github.com/afshawnlotfi"><img src="https://avatars.githubusercontent.com/u/6283745?v=4" width="100" height="100" alt="afshawnlotfi"/><br /><sub><b>afshawnlotfi</b></sub></a>      |              <a href="https://github.com/emshvac"><img src="https://avatars.githubusercontent.com/u/121588911?v=4" width="100" height="100" alt="emshvac"/><br /><sub><b>emshvac</b></sub></a>              |         <a href="https://github.com/Lunchb0ne"><img src="https://avatars.githubusercontent.com/u/22198661?v=4" width="100" height="100" alt="Lunchb0ne"/><br /><sub><b>Lunchb0ne</b></sub></a>         |             <a href="https://github.com/sammcj"><img src="https://avatars.githubusercontent.com/u/862951?v=4" width="100" height="100" alt="sammcj"/><br /><sub><b>sammcj</b></sub></a>             |       <a href="https://github.com/dtrugman"><img src="https://avatars.githubusercontent.com/u/2451669?v=4" width="100" height="100" alt="dtrugman"/><br /><sub><b>dtrugman</b></sub></a>        |                 <a href="https://github.com/aitoroses"><img src="https://avatars.githubusercontent.com/u/1699368?v=4" width="100" height="100" alt="aitoroses"/><br /><sub><b>aitoroses</b></sub></a>                 |
+|           <a href="https://github.com/yt3trees"><img src="https://avatars.githubusercontent.com/u/57471763?v=4" width="100" height="100" alt="yt3trees"/><br /><sub><b>yt3trees</b></sub></a>            |              <a href="https://github.com/yongjer"><img src="https://avatars.githubusercontent.com/u/54315206?v=4" width="100" height="100" alt="yongjer"/><br /><sub><b>yongjer</b></sub></a>               |      <a href="https://github.com/vincentsong"><img src="https://avatars.githubusercontent.com/u/2343574?v=4" width="100" height="100" alt="vincentsong"/><br /><sub><b>vincentsong</b></sub></a>       | <a href="https://github.com/pugazhendhi-m"><img src="https://avatars.githubusercontent.com/u/132246623?v=4" width="100" height="100" alt="pugazhendhi-m"/><br /><sub><b>pugazhendhi-m</b></sub></a> |           <a href="https://github.com/eonghk"><img src="https://avatars.githubusercontent.com/u/139964?v=4" width="100" height="100" alt="eonghk"/><br /><sub><b>eonghk</b></sub></a>           |                  <a href="https://github.com/philfung"><img src="https://avatars.githubusercontent.com/u/1054593?v=4" width="100" height="100" alt="philfung"/><br /><sub><b>philfung</b></sub></a>                   |
+|               <a href="https://github.com/pdecat"><img src="https://avatars.githubusercontent.com/u/318490?v=4" width="100" height="100" alt="pdecat"/><br /><sub><b>pdecat</b></sub></a>                |                <a href="https://github.com/napter"><img src="https://avatars.githubusercontent.com/u/6260841?v=4" width="100" height="100" alt="napter"/><br /><sub><b>napter</b></sub></a>                 |                    <a href="https://github.com/mdp"><img src="https://avatars.githubusercontent.com/u/2868?v=4" width="100" height="100" alt="mdp"/><br /><sub><b>mdp</b></sub></a>                    |            <a href="https://github.com/jcbdev"><img src="https://avatars.githubusercontent.com/u/17152092?v=4" width="100" height="100" alt="jcbdev"/><br /><sub><b>jcbdev</b></sub></a>            |      <a href="https://github.com/benzntech"><img src="https://avatars.githubusercontent.com/u/4044180?v=4" width="100" height="100" alt="benzntech"/><br /><sub><b>benzntech</b></sub></a>      |              <a href="https://github.com/anton-otee"><img src="https://avatars.githubusercontent.com/u/149477749?v=4" width="100" height="100" alt="anton-otee"/><br /><sub><b>anton-otee</b></sub></a>               |
+|             <a href="https://github.com/AMHesch"><img src="https://avatars.githubusercontent.com/u/4777192?v=4" width="100" height="100" alt="AMHesch"/><br /><sub><b>AMHesch</b></sub></a>              |              <a href="https://github.com/bannzai"><img src="https://avatars.githubusercontent.com/u/10897361?v=4" width="100" height="100" alt="bannzai"/><br /><sub><b>bannzai</b></sub></a>               |           <a href="https://github.com/dairui1"><img src="https://avatars.githubusercontent.com/u/183250644?v=4" width="100" height="100" alt="dairui1"/><br /><sub><b>dairui1</b></sub></a>            |           <a href="https://github.com/dqroid"><img src="https://avatars.githubusercontent.com/u/192424994?v=4" width="100" height="100" alt="dqroid"/><br /><sub><b>dqroid</b></sub></a>            |      <a href="https://github.com/kinandan"><img src="https://avatars.githubusercontent.com/u/186135699?v=4" width="100" height="100" alt="kinandan"/><br /><sub><b>kinandan</b></sub></a>       |                       <a href="https://github.com/kohii"><img src="https://avatars.githubusercontent.com/u/6891780?v=4" width="100" height="100" alt="kohii"/><br /><sub><b>kohii</b></sub></a>                       |
+|       <a href="https://github.com/lightrabbit"><img src="https://avatars.githubusercontent.com/u/1521765?v=4" width="100" height="100" alt="lightrabbit"/><br /><sub><b>lightrabbit</b></sub></a>        |                   <a href="https://github.com/olup"><img src="https://avatars.githubusercontent.com/u/13785588?v=4" width="100" height="100" alt="olup"/><br /><sub><b>olup</b></sub></a>                   |      <a href="https://github.com/moqimoqidea"><img src="https://avatars.githubusercontent.com/u/39821951?v=4" width="100" height="100" alt="moqimoqidea"/><br /><sub><b>moqimoqidea</b></sub></a>      |        <a href="https://github.com/mosleyit"><img src="https://avatars.githubusercontent.com/u/189396442?v=4" width="100" height="100" alt="mosleyit"/><br /><sub><b>mosleyit</b></sub></a>         |       <a href="https://github.com/oprstchn"><img src="https://avatars.githubusercontent.com/u/16177972?v=4" width="100" height="100" alt="oprstchn"/><br /><sub><b>oprstchn</b></sub></a>       |               <a href="https://github.com/philipnext"><img src="https://avatars.githubusercontent.com/u/81944499?v=4" width="100" height="100" alt="philipnext"/><br /><sub><b>philipnext</b></sub></a>               |
+|      <a href="https://github.com/refactorthis"><img src="https://avatars.githubusercontent.com/u/3012240?v=4" width="100" height="100" alt="refactorthis"/><br /><sub><b>refactorthis</b></sub></a>      |      <a href="https://github.com/samir-nimbly"><img src="https://avatars.githubusercontent.com/u/112695483?v=4" width="100" height="100" alt="samir-nimbly"/><br /><sub><b>samir-nimbly</b></sub></a>       |              <a href="https://github.com/shaybc"><img src="https://avatars.githubusercontent.com/u/8535905?v=4" width="100" height="100" alt="shaybc"/><br /><sub><b>shaybc</b></sub></a>              |   <a href="https://github.com/shohei-ihaya"><img src="https://avatars.githubusercontent.com/u/25131938?v=4" width="100" height="100" alt="shohei-ihaya"/><br /><sub><b>shohei-ihaya</b></sub></a>   | <a href="https://github.com/student20880"><img src="https://avatars.githubusercontent.com/u/74263488?v=4" width="100" height="100" alt="student20880"/><br /><sub><b>student20880</b></sub></a> |          <a href="https://github.com/PretzelVector"><img src="https://avatars.githubusercontent.com/u/95664360?v=4" width="100" height="100" alt="PretzelVector"/><br /><sub><b>PretzelVector</b></sub></a>           |
+|       <a href="https://github.com/adamwlarson"><img src="https://avatars.githubusercontent.com/u/1392315?v=4" width="100" height="100" alt="adamwlarson"/><br /><sub><b>adamwlarson</b></sub></a>        |                <a href="https://github.com/alarno"><img src="https://avatars.githubusercontent.com/u/4355547?v=4" width="100" height="100" alt="alarno"/><br /><sub><b>alarno</b></sub></a>                 | <a href="https://github.com/andreastempsch"><img src="https://avatars.githubusercontent.com/u/117991125?v=4" width="100" height="100" alt="andreastempsch"/><br /><sub><b>andreastempsch</b></sub></a> |          <a href="https://github.com/Atlogit"><img src="https://avatars.githubusercontent.com/u/86947554?v=4" width="100" height="100" alt="Atlogit"/><br /><sub><b>Atlogit</b></sub></a>           |            <a href="https://github.com/dleen"><img src="https://avatars.githubusercontent.com/u/1297964?v=4" width="100" height="100" alt="dleen"/><br /><sub><b>dleen</b></sub></a>            |                 <a href="https://github.com/dbasclpy"><img src="https://avatars.githubusercontent.com/u/139889137?v=4" width="100" height="100" alt="dbasclpy"/><br /><sub><b>dbasclpy</b></sub></a>                  |
+| <a href="https://github.com/celestial-vault"><img src="https://avatars.githubusercontent.com/u/58194240?v=4" width="100" height="100" alt="celestial-vault"/><br /><sub><b>celestial-vault</b></sub></a> |           <a href="https://github.com/DeXtroTip"><img src="https://avatars.githubusercontent.com/u/21011087?v=4" width="100" height="100" alt="DeXtroTip"/><br /><sub><b>DeXtroTip</b></sub></a>            |              <a href="https://github.com/hesara"><img src="https://avatars.githubusercontent.com/u/1335918?v=4" width="100" height="100" alt="hesara"/><br /><sub><b>hesara</b></sub></a>              |       <a href="https://github.com/eltociear"><img src="https://avatars.githubusercontent.com/u/22633385?v=4" width="100" height="100" alt="eltociear"/><br /><sub><b>eltociear</b></sub></a>        | <a href="https://github.com/libertyteeth"><img src="https://avatars.githubusercontent.com/u/32841567?v=4" width="100" height="100" alt="libertyteeth"/><br /><sub><b>libertyteeth</b></sub></a> |           <a href="https://github.com/mamertofabian"><img src="https://avatars.githubusercontent.com/u/7698436?v=4" width="100" height="100" alt="mamertofabian"/><br /><sub><b>mamertofabian</b></sub></a>           |
+|     <a href="https://github.com/marvijo-code"><img src="https://avatars.githubusercontent.com/u/82562019?v=4" width="100" height="100" alt="marvijo-code"/><br /><sub><b>marvijo-code</b></sub></a>      |                  <a href="https://github.com/Sarke"><img src="https://avatars.githubusercontent.com/u/2719310?v=4" width="100" height="100" alt="Sarke"/><br /><sub><b>Sarke</b></sub></a>                  |               <a href="https://github.com/tgfjt"><img src="https://avatars.githubusercontent.com/u/2628239?v=4" width="100" height="100" alt="tgfjt"/><br /><sub><b>tgfjt</b></sub></a>                |       <a href="https://github.com/vladstudio"><img src="https://avatars.githubusercontent.com/u/914320?v=4" width="100" height="100" alt="vladstudio"/><br /><sub><b>vladstudio</b></sub></a>       |          <a href="https://github.com/ashktn"><img src="https://avatars.githubusercontent.com/u/6723913?v=4" width="100" height="100" alt="ashktn"/><br /><sub><b>ashktn</b></sub></a>           |                                                                                                                                                                                                                       |
+
+<!-- END CONTRIBUTORS SECTION -->
+
+## लाइसेंस
+
+[Apache 2.0 © 2025 Roo Veterinary, Inc.](../LICENSE)
+
+---
+
+**Roo Code का आनंद लें!** चाहे आप इसे छोटी रस्सी पर रखें या स्वायत्त रूप से घूमने दें, हम यह देखने के लिए इंतज़ार नहीं कर सकते कि आप क्या बनाते हैं। यदि आपके पास प्रश्न या फीचर आइडिया हैं, तो हमारे [Reddit समुदाय](https://www.reddit.com/r/RooCode/) या [Discord](https://discord.gg/roocode) पर आएं। हैप्पी कोडिंग!

+ 77 - 0
locales/it/CODE_OF_CONDUCT.md

@@ -0,0 +1,77 @@
+# Codice di Condotta del Patto del Contributore
+
+## Il Nostro Impegno
+
+Nell'interesse di promuovere un ambiente aperto e accogliente, noi, in qualità di
+contributori e manutentori, ci impegniamo a rendere la partecipazione al nostro progetto e
+alla nostra comunità un'esperienza libera da molestie per tutti, indipendentemente da età, corporatura,
+disabilità, etnia, caratteristiche sessuali, identità ed espressione di genere,
+livello di esperienza, istruzione, stato socio-economico, nazionalità, aspetto
+personale, razza, religione o identità e orientamento sessuale.
+
+## I Nostri Standard
+
+Esempi di comportamento che contribuiscono a creare un ambiente positivo
+includono:
+
+- Usare un linguaggio accogliente e inclusivo
+- Essere rispettosi dei diversi punti di vista ed esperienze
+- Accettare con grazia le critiche costruttive
+- Concentrarsi su ciò che è meglio per la comunità
+- Mostrare empatia verso gli altri membri della comunità
+
+Esempi di comportamento inaccettabile da parte dei partecipanti includono:
+
+- L'uso di linguaggio o immagini sessualizzate e attenzioni o
+  avances sessuali indesiderate
+- Trolling, commenti offensivi/dispregiativi e attacchi personali o politici
+- Molestie pubbliche o private
+- Pubblicare informazioni private altrui, come un indirizzo fisico o elettronico,
+  senza esplicito permesso
+- Altri comportamenti che potrebbero ragionevolmente essere considerati inappropriati in un
+  contesto professionale
+
+## Le Nostre Responsabilità
+
+I manutentori del progetto sono responsabili di chiarire gli standard di comportamento
+accettabile e ci si aspetta che prendano azioni correttive appropriate ed eque in
+risposta a qualsiasi caso di comportamento inaccettabile.
+
+I manutentori del progetto hanno il diritto e la responsabilità di rimuovere, modificare o
+rifiutare commenti, commit, codice, modifiche wiki, issue e altri contributi
+che non sono allineati a questo Codice di Condotta, o di bandire temporaneamente o
+permanentemente qualsiasi contributore per altri comportamenti che ritengono inappropriati,
+minacciosi, offensivi o dannosi.
+
+## Ambito
+
+Questo Codice di Condotta si applica sia negli spazi del progetto che negli spazi pubblici
+quando un individuo rappresenta il progetto o la sua comunità. Esempi di
+rappresentazione di un progetto o comunità includono l'utilizzo di un indirizzo e-mail ufficiale del progetto,
+la pubblicazione tramite un account ufficiale sui social media o l'agire come rappresentante designato
+ad un evento online o offline. La rappresentazione di un progetto può essere
+ulteriormente definita e chiarita dai manutentori del progetto.
+
+## Applicazione
+
+Casi di comportamento abusivo, molesto o altrimenti inaccettabile possono essere
+segnalati contattando il team del progetto all'indirizzo [email protected]. Tutti i reclami
+saranno esaminati e indagati e risulteranno in una risposta che
+è ritenuta necessaria e appropriata alle circostanze. Il team del progetto è
+obbligato a mantenere la riservatezza nei confronti di chi segnala un incidente.
+Ulteriori dettagli su politiche di applicazione specifiche possono essere pubblicati separatamente.
+
+I manutentori del progetto che non seguono o non fanno rispettare il Codice di Condotta in buona
+fede possono affrontare ripercussioni temporanee o permanenti determinate da altri
+membri della leadership del progetto.
+
+## Attribuzione
+
+Questo Codice di Condotta è adattato dalla [versione di Cline][cline_coc] del [Patto del Contributore][homepage], versione 1.4,
+disponibile su https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
+
+[cline_coc]: https://github.com/cline/cline/blob/main/CODE_OF_CONDUCT.md
+[homepage]: https://www.contributor-covenant.org
+
+Per risposte alle domande comuni su questo codice di condotta, vedi
+https://www.contributor-covenant.org/faq

+ 112 - 0
locales/it/CONTRIBUTING.md

@@ -0,0 +1,112 @@
+# Contribuire a Roo Code
+
+Siamo entusiasti che tu sia interessato a contribuire a Roo Code. Che tu stia correggendo un bug, aggiungendo una funzionalità o migliorando la nostra documentazione, ogni contributo rende Roo Code più intelligente! Per mantenere la nostra comunità vivace e accogliente, tutti i membri devono aderire al nostro [Codice di Condotta](CODE_OF_CONDUCT.md).
+
+## Unisciti alla Nostra Comunità
+
+Incoraggiamo fortemente tutti i contributori a unirsi alla nostra [comunità Discord](https://discord.gg/roocode)! Far parte del nostro server Discord ti aiuta a:
+
+- Ottenere aiuto e guida in tempo reale sui tuoi contributi
+- Connetterti con altri contributori e membri del team principale
+- Rimanere aggiornato sugli sviluppi e le priorità del progetto
+- Partecipare a discussioni che modellano il futuro di Roo Code
+- Trovare opportunità di collaborazione con altri sviluppatori
+
+## Segnalare Bug o Problemi
+
+Le segnalazioni di bug aiutano a migliorare Roo Code per tutti! Prima di creare un nuovo problema, per favore [cerca tra quelli esistenti](https://github.com/RooVetGit/Roo-Code/issues) per evitare duplicati. Quando sei pronto a segnalare un bug, vai alla nostra [pagina dei problemi](https://github.com/RooVetGit/Roo-Code/issues/new/choose) dove troverai un modello per aiutarti a compilare le informazioni rilevanti.
+
+<blockquote class='warning-note'>
+     🔐 <b>Importante:</b> Se scopri una vulnerabilità di sicurezza, utilizza lo <a href="https://github.com/RooVetGit/Roo-Code/security/advisories/new">strumento di sicurezza Github per segnalarla privatamente</a>.
+</blockquote>
+
+## Decidere Su Cosa Lavorare
+
+Cerchi un buon primo contributo? Controlla i problemi nella sezione "Issue [Unassigned]" del nostro [Progetto Github di Roo Code](https://github.com/orgs/RooVetGit/projects/1). Questi sono specificamente selezionati per nuovi contributori e aree in cui ci piacerebbe avere un po' di aiuto!
+
+Accogliamo anche contributi alla nostra [documentazione](https://docs.roocode.com/)! Che si tratti di correggere errori di battitura, migliorare guide esistenti o creare nuovi contenuti educativi - ci piacerebbe costruire un repository di risorse guidato dalla comunità che aiuti tutti a ottenere il massimo da Roo Code. Puoi cliccare su "Edit this page" su qualsiasi pagina per arrivare rapidamente al punto giusto in Github per modificare il file, oppure puoi andare direttamente a https://github.com/RooVetGit/Roo-Code-Docs.
+
+Se stai pianificando di lavorare su una funzionalità più grande, per favore crea prima una [richiesta di funzionalità](https://github.com/RooVetGit/Roo-Code/discussions/categories/feature-requests?discussions_q=is%3Aopen+category%3A%22Feature+Requests%22+sort%3Atop) così possiamo discutere se si allinea con la visione di Roo Code.
+
+## Configurazione per lo Sviluppo
+
+1. **Clona** il repository:
+
+```sh
+git clone https://github.com/RooVetGit/Roo-Code.git
+```
+
+2. **Installa le dipendenze**:
+
+```sh
+npm run install:all
+```
+
+3. **Avvia la webview (app Vite/React con HMR)**:
+
+```sh
+npm run dev
+```
+
+4. **Debug**:
+   Premi `F5` (o **Run** → **Start Debugging**) in VSCode per aprire una nuova sessione con Roo Code caricato.
+
+Le modifiche alla webview appariranno immediatamente. Le modifiche all'estensione principale richiederanno un riavvio dell'host dell'estensione.
+
+In alternativa puoi creare un file .vsix e installarlo direttamente in VSCode:
+
+```sh
+npm run build
+```
+
+Un file `.vsix` apparirà nella directory `bin/` che può essere installato con:
+
+```sh
+code --install-extension bin/roo-cline-<version>.vsix
+```
+
+## Scrivere e Inviare Codice
+
+Chiunque può contribuire con codice a Roo Code, ma ti chiediamo di seguire queste linee guida per assicurare che i tuoi contributi possano essere integrati senza problemi:
+
+1. **Mantieni le Pull Request Focalizzate**
+
+    - Limita le PR a una singola funzionalità o correzione di bug
+    - Suddividi i cambiamenti più grandi in PR più piccole e correlate
+    - Suddividi i cambiamenti in commit logici che possono essere revisionati indipendentemente
+
+2. **Qualità del Codice**
+
+    - Tutte le PR devono passare i controlli CI che includono sia linting che formattazione
+    - Risolvi qualsiasi avviso o errore di ESLint prima di inviare
+    - Rispondi a tutti i feedback da Ellipsis, il nostro strumento automatico di revisione del codice
+    - Segui le migliori pratiche di TypeScript e mantieni la sicurezza dei tipi
+
+3. **Testing**
+
+    - Aggiungi test per le nuove funzionalità
+    - Esegui `npm test` per assicurarti che tutti i test passino
+    - Aggiorna i test esistenti se le tue modifiche li influenzano
+    - Includi sia test unitari che test di integrazione dove appropriato
+
+4. **Linee Guida per i Commit**
+
+    - Scrivi messaggi di commit chiari e descrittivi
+    - Fai riferimento ai problemi rilevanti nei commit usando #numero-problema
+
+5. **Prima di Inviare**
+
+    - Fai il rebase del tuo branch sull'ultimo main
+    - Assicurati che il tuo branch si costruisca con successo
+    - Ricontrolla che tutti i test stiano passando
+    - Rivedi le tue modifiche per qualsiasi codice di debug o log della console
+
+6. **Descrizione della Pull Request**
+    - Descrivi chiaramente cosa fanno le tue modifiche
+    - Includi passaggi per testare le modifiche
+    - Elenca eventuali breaking changes
+    - Aggiungi screenshot per modifiche UI
+
+## Accordo di Contribuzione
+
+Inviando una pull request, accetti che i tuoi contributi saranno concessi in licenza con la stessa licenza del progetto ([Apache 2.0](../LICENSE)).

+ 211 - 0
locales/it/README.md

@@ -0,0 +1,211 @@
+<div align="center">
+<sub>
+
+[English](../../README.md) • [Català](../../locales/ca/README.md) • [Deutsch](../../locales/de/README.md) • [Español](../../locales/es/README.md) • [Français](../../locales/fr/README.md) • [हिन्दी](../../locales/hi/README.md) • Italiano
+
+</sub>
+<sub>
+
+[日本語](../../locales/ja/README.md) • [한국어](../../locales/ko/README.md) • [Polski](../../locales/pl/README.md) • [Português (BR)](../../locales/pt-BR/README.md) • [Türkçe](../../locales/tr/README.md) • [Tiếng Việt](../../locales/vi/README.md) • [简体中文](../../locales/zh-CN/README.md) • [繁體中文](../../locales/zh-TW/README.md)
+
+</sub>
+</div>
+<br>
+<div align="center">
+  <h2>Unisciti alla Community di Roo Code</h2>
+  <p>Connettiti con gli sviluppatori, contribuisci con le tue idee e rimani aggiornato con gli ultimi strumenti di codifica basati sull'IA.</p>
+  
+  <a href="https://discord.gg/roocode" target="_blank"><img src="https://img.shields.io/badge/Unisciti%20a%20Discord-5865F2?style=for-the-badge&logo=discord&logoColor=white" alt="Unisciti a Discord"></a>
+  <a href="https://www.reddit.com/r/RooCode/" target="_blank"><img src="https://img.shields.io/badge/Unisciti%20a%20Reddit-FF4500?style=for-the-badge&logo=reddit&logoColor=white" alt="Unisciti a Reddit"></a>
+  
+</div>
+<br>
+<br>
+
+<div align="center">
+<h1>Roo Code (precedentemente Roo Cline)</h1>
+
+<a href="https://marketplace.visualstudio.com/items?itemName=RooVeterinaryInc.roo-cline" target="_blank"><img src="https://img.shields.io/badge/Scarica%20su%20VS%20Marketplace-blue?style=for-the-badge&logo=visualstudiocode&logoColor=white" alt="Scarica su VS Marketplace"></a>
+<a href="https://github.com/RooVetGit/Roo-Code/discussions/categories/feature-requests?discussions_q=is%3Aopen+category%3A%22Feature+Requests%22+sort%3Atop" target="_blank"><img src="https://img.shields.io/badge/Richieste%20di%20Funzionalità-yellow?style=for-the-badge" alt="Richieste di Funzionalità"></a>
+<a href="https://marketplace.visualstudio.com/items?itemName=RooVeterinaryInc.roo-cline&ssr=false#review-details" target="_blank"><img src="https://img.shields.io/badge/Valuta%20%26%20Recensisci-green?style=for-the-badge" alt="Valuta & Recensisci"></a>
+<a href="https://docs.roocode.com" target="_blank"><img src="https://img.shields.io/badge/Documentazione-6B46C1?style=for-the-badge&logo=readthedocs&logoColor=white" alt="Documentazione"></a>
+
+</div>
+
+**Roo Code** è un **agente di codifica autonomo** basato sull'IA che vive nel tuo editor. Può:
+
+- Comunicare in linguaggio naturale
+- Leggere e scrivere file direttamente nel tuo workspace
+- Eseguire comandi del terminale
+- Automatizzare le azioni del browser
+- Integrarsi con qualsiasi API/modello compatibile con OpenAI o personalizzato
+- Adattare la sua "personalità" e capacità attraverso **Modalità Personalizzate**
+
+Che tu stia cercando un partner di codifica flessibile, un architetto di sistema o ruoli specializzati come un ingegnere QA o un product manager, Roo Code può aiutarti a costruire software in modo più efficiente.
+
+Consulta il [CHANGELOG](../CHANGELOG.md) per aggiornamenti dettagliati e correzioni.
+
+---
+
+## 🎉 Roo Code 3.8 Rilasciato
+
+Roo Code 3.8 è disponibile con miglioramenti delle prestazioni, nuove funzionalità e correzioni di bug.
+
+- Checkpoint asincroni più veloci
+- Supporto per file .rooignore
+- Problemi del terminale e dello schermo grigio risolti
+- Roo Code può essere eseguito in più finestre
+- Strategia di modifica multi-diff sperimentale
+- Comunicazione da sottoattività ad attività principale
+- Provider DeepSeek aggiornato
+- Nuovo provider "Human Relay"
+
+---
+
+## Cosa Può Fare Roo Code?
+
+- 🚀 **Generare Codice** da descrizioni in linguaggio naturale
+- 🔧 **Refactoring e Debug** del codice esistente
+- 📝 **Scrivere e Aggiornare** documentazione
+- 🤔 **Rispondere a Domande** sul tuo codebase
+- 🔄 **Automatizzare** attività ripetitive
+- 🏗️ **Creare** nuovi file e progetti
+
+## Avvio Rapido
+
+1. [Installa Roo Code](https://docs.roocode.com/getting-started/installing)
+2. [Connetti il tuo Provider IA](https://docs.roocode.com/getting-started/connecting-api-provider)
+3. [Prova la tua Prima Attività](https://docs.roocode.com/getting-started/your-first-task)
+
+## Funzionalità Principali
+
+### Modalità Multiple
+
+Roo Code si adatta alle tue esigenze con [modalità](https://docs.roocode.com/basic-usage/modes) specializzate:
+
+- **Modalità Codice:** Per attività di codifica generale
+- **Modalità Architetto:** Per pianificazione e leadership tecnica
+- **Modalità Domanda:** Per rispondere a domande e fornire informazioni
+- **Modalità Debug:** Per diagnosi sistematica dei problemi
+- **[Modalità Personalizzate](https://docs.roocode.com/advanced-usage/custom-modes):** Crea personaggi specializzati illimitati per audit di sicurezza, ottimizzazione delle prestazioni, documentazione o qualsiasi altra attività
+
+### Strumenti Intelligenti
+
+Roo Code viene fornito con potenti [strumenti](https://docs.roocode.com/basic-usage/using-tools) che possono:
+
+- Leggere e scrivere file nel tuo progetto
+- Eseguire comandi nel tuo terminale VS Code
+- Controllare un browser web
+- Utilizzare strumenti esterni tramite [MCP (Model Context Protocol)](https://docs.roocode.com/advanced-usage/mcp)
+
+MCP estende le capacità di Roo Code permettendoti di aggiungere strumenti personalizzati illimitati. Integra con API esterne, connettiti a database o crea strumenti di sviluppo specializzati - MCP fornisce il framework per espandere la funzionalità di Roo Code per soddisfare le tue esigenze specifiche.
+
+### Personalizzazione
+
+Fai funzionare Roo Code a modo tuo con:
+
+- [Istruzioni Personalizzate](https://docs.roocode.com/advanced-usage/custom-instructions) per comportamenti personalizzati
+- [Modalità Personalizzate](https://docs.roocode.com/advanced-usage/custom-modes) per attività specializzate
+- [Modelli Locali](https://docs.roocode.com/advanced-usage/local-models) per uso offline
+- [Impostazioni di Auto-Approvazione](https://docs.roocode.com/advanced-usage/auto-approving-actions) per flussi di lavoro più veloci
+
+## Risorse
+
+### Documentazione
+
+- [Guida all'Uso di Base](https://docs.roocode.com/basic-usage/the-chat-interface)
+- [Funzionalità Avanzate](https://docs.roocode.com/advanced-usage/auto-approving-actions)
+- [Domande Frequenti](https://docs.roocode.com/faq)
+
+### Comunità
+
+- **Discord:** [Unisciti al nostro server Discord](https://discord.gg/roocode) per aiuto in tempo reale e discussioni
+- **Reddit:** [Visita il nostro subreddit](https://www.reddit.com/r/RooCode) per condividere esperienze e consigli
+- **GitHub:** [Segnala problemi](https://github.com/RooVetGit/Roo-Code/issues) o [richiedi funzionalità](https://github.com/RooVetGit/Roo-Code/discussions/categories/feature-requests?discussions_q=is%3Aopen+category%3A%22Feature+Requests%22+sort%3Atop)
+
+---
+
+## Configurazione e Sviluppo Locale
+
+1. **Clona** il repository:
+
+```sh
+git clone https://github.com/RooVetGit/Roo-Code.git
+```
+
+2. **Installa le dipendenze**:
+
+```sh
+npm run install:all
+```
+
+3. **Avvia la webview (app Vite/React con HMR)**:
+
+```sh
+npm run dev
+```
+
+4. **Debug**:
+   Premi `F5` (o **Run** → **Start Debugging**) in VSCode per aprire una nuova sessione con Roo Code caricato.
+
+Le modifiche alla webview appariranno immediatamente. Le modifiche all'estensione principale richiederanno un riavvio dell'host dell'estensione.
+
+In alternativa puoi creare un file .vsix e installarlo direttamente in VSCode:
+
+```sh
+npm run build
+```
+
+Un file `.vsix` apparirà nella directory `bin/` che può essere installato con:
+
+```sh
+code --install-extension bin/roo-cline-<version>.vsix
+```
+
+Utilizziamo [changesets](https://github.com/changesets/changesets) per la gestione delle versioni e la pubblicazione. Controlla il nostro `CHANGELOG.md` per le note di rilascio.
+
+---
+
+## Disclaimer
+
+**Si prega di notare** che Roo Veterinary, Inc **non** fa alcuna dichiarazione o garanzia riguardo a qualsiasi codice, modello o altro strumento fornito o reso disponibile in relazione a Roo Code, qualsiasi strumento di terze parti associato o qualsiasi output risultante. Ti assumi **tutti i rischi** associati all'uso di tali strumenti o output; tali strumenti sono forniti su base **"COSÌ COM'È"** e **"COME DISPONIBILE"**. Tali rischi possono includere, senza limitazione, violazione della proprietà intellettuale, vulnerabilità o attacchi informatici, pregiudizi, imprecisioni, errori, difetti, virus, tempi di inattività, perdita o danneggiamento della proprietà e/o lesioni personali. Sei l'unico responsabile del tuo utilizzo di tali strumenti o output (inclusi, senza limitazione, la legalità, l'appropriatezza e i risultati degli stessi).
+
+---
+
+## Contribuire
+
+Amiamo i contributi della community! Inizia leggendo il nostro [CONTRIBUTING.md](CONTRIBUTING.md).
+
+---
+
+## Contributori
+
+Grazie a tutti i nostri contributori che hanno aiutato a migliorare Roo Code!
+
+<!-- START CONTRIBUTORS SECTION - AUTO-GENERATED, DO NOT EDIT MANUALLY -->
+
+|               <a href="https://github.com/mrubens"><img src="https://avatars.githubusercontent.com/u/2600?v=4" width="100" height="100" alt="mrubens"/><br /><sub><b>mrubens</b></sub></a>               |         <a href="https://github.com/saoudrizwan"><img src="https://avatars.githubusercontent.com/u/7799382?v=4" width="100" height="100" alt="saoudrizwan"/><br /><sub><b>saoudrizwan</b></sub></a>         |                   <a href="https://github.com/cte"><img src="https://avatars.githubusercontent.com/u/16332?v=4" width="100" height="100" alt="cte"/><br /><sub><b>cte</b></sub></a>                    |          <a href="https://github.com/samhvw8"><img src="https://avatars.githubusercontent.com/u/12538214?v=4" width="100" height="100" alt="samhvw8"/><br /><sub><b>samhvw8</b></sub></a>           |    <a href="https://github.com/daniel-lxs"><img src="https://avatars.githubusercontent.com/u/57051444?v=4" width="100" height="100" alt="daniel-lxs"/><br /><sub><b>daniel-lxs</b></sub></a>    |                   <a href="https://github.com/a8trejo"><img src="https://avatars.githubusercontent.com/u/62401433?v=4" width="100" height="100" alt="a8trejo"/><br /><sub><b>a8trejo</b></sub></a>                    |
+| :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
+|        <a href="https://github.com/ColemanRoo"><img src="https://avatars.githubusercontent.com/u/117104599?v=4" width="100" height="100" alt="ColemanRoo"/><br /><sub><b>ColemanRoo</b></sub></a>        |             <a href="https://github.com/stea9499"><img src="https://avatars.githubusercontent.com/u/4163795?v=4" width="100" height="100" alt="stea9499"/><br /><sub><b>stea9499</b></sub></a>              |     <a href="https://github.com/joemanley201"><img src="https://avatars.githubusercontent.com/u/8299960?v=4" width="100" height="100" alt="joemanley201"/><br /><sub><b>joemanley201</b></sub></a>     |       <a href="https://github.com/System233"><img src="https://avatars.githubusercontent.com/u/20336040?v=4" width="100" height="100" alt="System233"/><br /><sub><b>System233</b></sub></a>        |       <a href="https://github.com/jquanton"><img src="https://avatars.githubusercontent.com/u/88576563?v=4" width="100" height="100" alt="jquanton"/><br /><sub><b>jquanton</b></sub></a>       |              <a href="https://github.com/nissa-seru"><img src="https://avatars.githubusercontent.com/u/119150866?v=4" width="100" height="100" alt="nissa-seru"/><br /><sub><b>nissa-seru</b></sub></a>               |
+|    <a href="https://github.com/hannesrudolph"><img src="https://avatars.githubusercontent.com/u/49103247?v=4" width="100" height="100" alt="hannesrudolph"/><br /><sub><b>hannesrudolph</b></sub></a>    |             <a href="https://github.com/MuriloFP"><img src="https://avatars.githubusercontent.com/u/50873657?v=4" width="100" height="100" alt="MuriloFP"/><br /><sub><b>MuriloFP</b></sub></a>             |             <a href="https://github.com/NyxJae"><img src="https://avatars.githubusercontent.com/u/52313587?v=4" width="100" height="100" alt="NyxJae"/><br /><sub><b>NyxJae</b></sub></a>              |        <a href="https://github.com/punkpeye"><img src="https://avatars.githubusercontent.com/u/108313943?v=4" width="100" height="100" alt="punkpeye"/><br /><sub><b>punkpeye</b></sub></a>         |            <a href="https://github.com/d-oit"><img src="https://avatars.githubusercontent.com/u/6849456?v=4" width="100" height="100" alt="d-oit"/><br /><sub><b>d-oit</b></sub></a>            |            <a href="https://github.com/monotykamary"><img src="https://avatars.githubusercontent.com/u/1130103?v=4" width="100" height="100" alt="monotykamary"/><br /><sub><b>monotykamary</b></sub></a>             |
+|         <a href="https://github.com/lloydchang"><img src="https://avatars.githubusercontent.com/u/1329685?v=4" width="100" height="100" alt="lloydchang"/><br /><sub><b>lloydchang</b></sub></a>         | <a href="https://github.com/vigneshsubbiah16"><img src="https://avatars.githubusercontent.com/u/51325334?v=4" width="100" height="100" alt="vigneshsubbiah16"/><br /><sub><b>vigneshsubbiah16</b></sub></a> |            <a href="https://github.com/Szpadel"><img src="https://avatars.githubusercontent.com/u/1857251?v=4" width="100" height="100" alt="Szpadel"/><br /><sub><b>Szpadel</b></sub></a>             |       <a href="https://github.com/lupuletic"><img src="https://avatars.githubusercontent.com/u/105351510?v=4" width="100" height="100" alt="lupuletic"/><br /><sub><b>lupuletic</b></sub></a>       |        <a href="https://github.com/cannuri"><img src="https://avatars.githubusercontent.com/u/91494156?v=4" width="100" height="100" alt="cannuri"/><br /><sub><b>cannuri</b></sub></a>         | <a href="https://github.com/Smartsheet-JB-Brown"><img src="https://avatars.githubusercontent.com/u/171734120?v=4" width="100" height="100" alt="Smartsheet-JB-Brown"/><br /><sub><b>Smartsheet-JB-Brown</b></sub></a> |
+|           <a href="https://github.com/Premshay"><img src="https://avatars.githubusercontent.com/u/28099628?v=4" width="100" height="100" alt="Premshay"/><br /><sub><b>Premshay</b></sub></a>            |              <a href="https://github.com/psv2522"><img src="https://avatars.githubusercontent.com/u/87223770?v=4" width="100" height="100" alt="psv2522"/><br /><sub><b>psv2522</b></sub></a>               |      <a href="https://github.com/olweraltuve"><img src="https://avatars.githubusercontent.com/u/39308405?v=4" width="100" height="100" alt="olweraltuve"/><br /><sub><b>olweraltuve</b></sub></a>      |       <a href="https://github.com/RaySinner"><img src="https://avatars.githubusercontent.com/u/118297374?v=4" width="100" height="100" alt="RaySinner"/><br /><sub><b>RaySinner</b></sub></a>       |            <a href="https://github.com/qdaxb"><img src="https://avatars.githubusercontent.com/u/4157870?v=4" width="100" height="100" alt="qdaxb"/><br /><sub><b>qdaxb</b></sub></a>            |                <a href="https://github.com/feifei325"><img src="https://avatars.githubusercontent.com/u/46489071?v=4" width="100" height="100" alt="feifei325"/><br /><sub><b>feifei325</b></sub></a>                 |
+|      <a href="https://github.com/afshawnlotfi"><img src="https://avatars.githubusercontent.com/u/6283745?v=4" width="100" height="100" alt="afshawnlotfi"/><br /><sub><b>afshawnlotfi</b></sub></a>      |              <a href="https://github.com/emshvac"><img src="https://avatars.githubusercontent.com/u/121588911?v=4" width="100" height="100" alt="emshvac"/><br /><sub><b>emshvac</b></sub></a>              |         <a href="https://github.com/Lunchb0ne"><img src="https://avatars.githubusercontent.com/u/22198661?v=4" width="100" height="100" alt="Lunchb0ne"/><br /><sub><b>Lunchb0ne</b></sub></a>         |             <a href="https://github.com/sammcj"><img src="https://avatars.githubusercontent.com/u/862951?v=4" width="100" height="100" alt="sammcj"/><br /><sub><b>sammcj</b></sub></a>             |       <a href="https://github.com/dtrugman"><img src="https://avatars.githubusercontent.com/u/2451669?v=4" width="100" height="100" alt="dtrugman"/><br /><sub><b>dtrugman</b></sub></a>        |                 <a href="https://github.com/aitoroses"><img src="https://avatars.githubusercontent.com/u/1699368?v=4" width="100" height="100" alt="aitoroses"/><br /><sub><b>aitoroses</b></sub></a>                 |
+|           <a href="https://github.com/yt3trees"><img src="https://avatars.githubusercontent.com/u/57471763?v=4" width="100" height="100" alt="yt3trees"/><br /><sub><b>yt3trees</b></sub></a>            |              <a href="https://github.com/yongjer"><img src="https://avatars.githubusercontent.com/u/54315206?v=4" width="100" height="100" alt="yongjer"/><br /><sub><b>yongjer</b></sub></a>               |      <a href="https://github.com/vincentsong"><img src="https://avatars.githubusercontent.com/u/2343574?v=4" width="100" height="100" alt="vincentsong"/><br /><sub><b>vincentsong</b></sub></a>       | <a href="https://github.com/pugazhendhi-m"><img src="https://avatars.githubusercontent.com/u/132246623?v=4" width="100" height="100" alt="pugazhendhi-m"/><br /><sub><b>pugazhendhi-m</b></sub></a> |           <a href="https://github.com/eonghk"><img src="https://avatars.githubusercontent.com/u/139964?v=4" width="100" height="100" alt="eonghk"/><br /><sub><b>eonghk</b></sub></a>           |                  <a href="https://github.com/philfung"><img src="https://avatars.githubusercontent.com/u/1054593?v=4" width="100" height="100" alt="philfung"/><br /><sub><b>philfung</b></sub></a>                   |
+|               <a href="https://github.com/pdecat"><img src="https://avatars.githubusercontent.com/u/318490?v=4" width="100" height="100" alt="pdecat"/><br /><sub><b>pdecat</b></sub></a>                |                <a href="https://github.com/napter"><img src="https://avatars.githubusercontent.com/u/6260841?v=4" width="100" height="100" alt="napter"/><br /><sub><b>napter</b></sub></a>                 |                    <a href="https://github.com/mdp"><img src="https://avatars.githubusercontent.com/u/2868?v=4" width="100" height="100" alt="mdp"/><br /><sub><b>mdp</b></sub></a>                    |            <a href="https://github.com/jcbdev"><img src="https://avatars.githubusercontent.com/u/17152092?v=4" width="100" height="100" alt="jcbdev"/><br /><sub><b>jcbdev</b></sub></a>            |      <a href="https://github.com/benzntech"><img src="https://avatars.githubusercontent.com/u/4044180?v=4" width="100" height="100" alt="benzntech"/><br /><sub><b>benzntech</b></sub></a>      |              <a href="https://github.com/anton-otee"><img src="https://avatars.githubusercontent.com/u/149477749?v=4" width="100" height="100" alt="anton-otee"/><br /><sub><b>anton-otee</b></sub></a>               |
+|             <a href="https://github.com/AMHesch"><img src="https://avatars.githubusercontent.com/u/4777192?v=4" width="100" height="100" alt="AMHesch"/><br /><sub><b>AMHesch</b></sub></a>              |              <a href="https://github.com/bannzai"><img src="https://avatars.githubusercontent.com/u/10897361?v=4" width="100" height="100" alt="bannzai"/><br /><sub><b>bannzai</b></sub></a>               |           <a href="https://github.com/dairui1"><img src="https://avatars.githubusercontent.com/u/183250644?v=4" width="100" height="100" alt="dairui1"/><br /><sub><b>dairui1</b></sub></a>            |           <a href="https://github.com/dqroid"><img src="https://avatars.githubusercontent.com/u/192424994?v=4" width="100" height="100" alt="dqroid"/><br /><sub><b>dqroid</b></sub></a>            |      <a href="https://github.com/kinandan"><img src="https://avatars.githubusercontent.com/u/186135699?v=4" width="100" height="100" alt="kinandan"/><br /><sub><b>kinandan</b></sub></a>       |                       <a href="https://github.com/kohii"><img src="https://avatars.githubusercontent.com/u/6891780?v=4" width="100" height="100" alt="kohii"/><br /><sub><b>kohii</b></sub></a>                       |
+|       <a href="https://github.com/lightrabbit"><img src="https://avatars.githubusercontent.com/u/1521765?v=4" width="100" height="100" alt="lightrabbit"/><br /><sub><b>lightrabbit</b></sub></a>        |                   <a href="https://github.com/olup"><img src="https://avatars.githubusercontent.com/u/13785588?v=4" width="100" height="100" alt="olup"/><br /><sub><b>olup</b></sub></a>                   |      <a href="https://github.com/moqimoqidea"><img src="https://avatars.githubusercontent.com/u/39821951?v=4" width="100" height="100" alt="moqimoqidea"/><br /><sub><b>moqimoqidea</b></sub></a>      |        <a href="https://github.com/mosleyit"><img src="https://avatars.githubusercontent.com/u/189396442?v=4" width="100" height="100" alt="mosleyit"/><br /><sub><b>mosleyit</b></sub></a>         |       <a href="https://github.com/oprstchn"><img src="https://avatars.githubusercontent.com/u/16177972?v=4" width="100" height="100" alt="oprstchn"/><br /><sub><b>oprstchn</b></sub></a>       |               <a href="https://github.com/philipnext"><img src="https://avatars.githubusercontent.com/u/81944499?v=4" width="100" height="100" alt="philipnext"/><br /><sub><b>philipnext</b></sub></a>               |
+|      <a href="https://github.com/refactorthis"><img src="https://avatars.githubusercontent.com/u/3012240?v=4" width="100" height="100" alt="refactorthis"/><br /><sub><b>refactorthis</b></sub></a>      |      <a href="https://github.com/samir-nimbly"><img src="https://avatars.githubusercontent.com/u/112695483?v=4" width="100" height="100" alt="samir-nimbly"/><br /><sub><b>samir-nimbly</b></sub></a>       |              <a href="https://github.com/shaybc"><img src="https://avatars.githubusercontent.com/u/8535905?v=4" width="100" height="100" alt="shaybc"/><br /><sub><b>shaybc</b></sub></a>              |   <a href="https://github.com/shohei-ihaya"><img src="https://avatars.githubusercontent.com/u/25131938?v=4" width="100" height="100" alt="shohei-ihaya"/><br /><sub><b>shohei-ihaya</b></sub></a>   | <a href="https://github.com/student20880"><img src="https://avatars.githubusercontent.com/u/74263488?v=4" width="100" height="100" alt="student20880"/><br /><sub><b>student20880</b></sub></a> |          <a href="https://github.com/PretzelVector"><img src="https://avatars.githubusercontent.com/u/95664360?v=4" width="100" height="100" alt="PretzelVector"/><br /><sub><b>PretzelVector</b></sub></a>           |
+|       <a href="https://github.com/adamwlarson"><img src="https://avatars.githubusercontent.com/u/1392315?v=4" width="100" height="100" alt="adamwlarson"/><br /><sub><b>adamwlarson</b></sub></a>        |                <a href="https://github.com/alarno"><img src="https://avatars.githubusercontent.com/u/4355547?v=4" width="100" height="100" alt="alarno"/><br /><sub><b>alarno</b></sub></a>                 | <a href="https://github.com/andreastempsch"><img src="https://avatars.githubusercontent.com/u/117991125?v=4" width="100" height="100" alt="andreastempsch"/><br /><sub><b>andreastempsch</b></sub></a> |          <a href="https://github.com/Atlogit"><img src="https://avatars.githubusercontent.com/u/86947554?v=4" width="100" height="100" alt="Atlogit"/><br /><sub><b>Atlogit</b></sub></a>           |            <a href="https://github.com/dleen"><img src="https://avatars.githubusercontent.com/u/1297964?v=4" width="100" height="100" alt="dleen"/><br /><sub><b>dleen</b></sub></a>            |                 <a href="https://github.com/dbasclpy"><img src="https://avatars.githubusercontent.com/u/139889137?v=4" width="100" height="100" alt="dbasclpy"/><br /><sub><b>dbasclpy</b></sub></a>                  |
+| <a href="https://github.com/celestial-vault"><img src="https://avatars.githubusercontent.com/u/58194240?v=4" width="100" height="100" alt="celestial-vault"/><br /><sub><b>celestial-vault</b></sub></a> |           <a href="https://github.com/DeXtroTip"><img src="https://avatars.githubusercontent.com/u/21011087?v=4" width="100" height="100" alt="DeXtroTip"/><br /><sub><b>DeXtroTip</b></sub></a>            |              <a href="https://github.com/hesara"><img src="https://avatars.githubusercontent.com/u/1335918?v=4" width="100" height="100" alt="hesara"/><br /><sub><b>hesara</b></sub></a>              |       <a href="https://github.com/eltociear"><img src="https://avatars.githubusercontent.com/u/22633385?v=4" width="100" height="100" alt="eltociear"/><br /><sub><b>eltociear</b></sub></a>        | <a href="https://github.com/libertyteeth"><img src="https://avatars.githubusercontent.com/u/32841567?v=4" width="100" height="100" alt="libertyteeth"/><br /><sub><b>libertyteeth</b></sub></a> |           <a href="https://github.com/mamertofabian"><img src="https://avatars.githubusercontent.com/u/7698436?v=4" width="100" height="100" alt="mamertofabian"/><br /><sub><b>mamertofabian</b></sub></a>           |
+|     <a href="https://github.com/marvijo-code"><img src="https://avatars.githubusercontent.com/u/82562019?v=4" width="100" height="100" alt="marvijo-code"/><br /><sub><b>marvijo-code</b></sub></a>      |                  <a href="https://github.com/Sarke"><img src="https://avatars.githubusercontent.com/u/2719310?v=4" width="100" height="100" alt="Sarke"/><br /><sub><b>Sarke</b></sub></a>                  |               <a href="https://github.com/tgfjt"><img src="https://avatars.githubusercontent.com/u/2628239?v=4" width="100" height="100" alt="tgfjt"/><br /><sub><b>tgfjt</b></sub></a>                |       <a href="https://github.com/vladstudio"><img src="https://avatars.githubusercontent.com/u/914320?v=4" width="100" height="100" alt="vladstudio"/><br /><sub><b>vladstudio</b></sub></a>       |          <a href="https://github.com/ashktn"><img src="https://avatars.githubusercontent.com/u/6723913?v=4" width="100" height="100" alt="ashktn"/><br /><sub><b>ashktn</b></sub></a>           |                                                                                                                                                                                                                       |
+
+<!-- END CONTRIBUTORS SECTION -->
+
+## Licenza
+
+[Apache 2.0 © 2025 Roo Veterinary, Inc.](../LICENSE)
+
+---
+
+**Goditi Roo Code!** Che tu lo tenga al guinzaglio corto o lo lasci vagare autonomamente, non vediamo l'ora di vedere cosa costruirai. Se hai domande o idee per funzionalità, passa dalla nostra [community di Reddit](https://www.reddit.com/r/RooCode/) o [Discord](https://discord.gg/roocode). Buona programmazione!

+ 78 - 0
locales/ja/CODE_OF_CONDUCT.md

@@ -0,0 +1,78 @@
+# コントリビューター行動規範
+
+## 私たちの誓約
+
+オープンで歓迎的な環境を育むために、私たちは
+コントリビューターおよびメンテナーとして、年齢、体格、
+障害、民族、性的特徴、性自認と性表現、経験レベル、
+教育、社会経済的地位、国籍、個人的外見、人種、
+宗教、または性的同一性と指向に関係なく、誰もが私たちのプロジェクトと
+コミュニティへの参加をハラスメントフリーな体験にすることを誓います。
+
+## 私たちの標準
+
+前向きな環境を作り出すことに貢献する行動の例には、
+以下があります:
+
+- 歓迎的かつ包括的な言葉を使用する
+- 異なる視点や経験を尊重する
+- 建設的な批判を優雅に受け入れる
+- コミュニティにとって何が最善かに焦点を当てる
+- 他のコミュニティメンバーに共感を示す
+
+参加者による容認できない行動の例には、以下があります:
+
+- 性的な言葉や画像の使用、および不快な性的注目または
+  誘いかけ
+- 荒らし行為、侮辱的/軽蔑的なコメント、個人的または政治的攻撃
+- 公的または私的なハラスメント
+- 明示的な許可なく、物理的または電子的
+  アドレスなど、他者の個人情報を公開すること
+- 職業的な場において不適切と合理的に
+  考えられるその他の行為
+
+## 私たちの責任
+
+プロジェクトメンテナーは、許容される行動の基準を明確にする
+責任があり、容認できない行動に対して適切かつ公正な
+是正措置を取ることが期待されています。
+
+プロジェクトメンテナーは、この行動規範に沿わないコメント、コミット、
+コード、ウィキ編集、イシュー、およびその他の貢献を
+削除、編集、または拒否する権利と責任を持ち、
+不適切、脅迫的、攻撃的、または有害と判断される
+他の行動に対してプロジェクトコントリビューターを一時的または
+永久に追放する権利を持ちます。
+
+## 範囲
+
+この行動規範は、個人がプロジェクトまたはそのコミュニティを代表している場合に、
+プロジェクト空間内および公共空間の両方に適用されます。プロジェクトまたは
+コミュニティを代表する例としては、公式プロジェクトの電子メールアドレスの使用、
+公式ソーシャルメディアアカウントを通じた投稿、またはオンラインあるいはオフラインの
+イベントで任命された代表として行動することが含まれます。プロジェクトの代表は、
+プロジェクトメンテナーによってさらに定義され明確化される場合があります。
+
+## 施行
+
+虐待的、嫌がらせ、またはその他容認できない行動の事例は、
[email protected] でプロジェクトチームに連絡することで報告することができます。
+すべての苦情は審査・調査され、状況に応じて必要かつ適切と
+判断される対応がとられます。プロジェクトチームは
+インシデント報告者に関する守秘義務を守る義務があります。
+具体的な施行ポリシーの詳細は別途掲載される場合があります。
+
+行動規範を誠実に遵守または施行しないプロジェクトメンテナーは、
+プロジェクトのリーダーシップの他のメンバーによって決定される
+一時的または永久的な影響に直面する場合があります。
+
+## 帰属
+
+この行動規範は、[Clineのバージョン][cline_coc]の[Contributor Covenant][homepage]、バージョン1.4から適用されています。
+https://www.contributor-covenant.org/version/1/4/code-of-conduct.html から入手可能です。
+
+[cline_coc]: https://github.com/cline/cline/blob/main/CODE_OF_CONDUCT.md
+[homepage]: https://www.contributor-covenant.org
+
+この行動規範に関する一般的な質問への回答については、
+https://www.contributor-covenant.org/faq をご覧ください。

+ 112 - 0
locales/ja/CONTRIBUTING.md

@@ -0,0 +1,112 @@
+# Roo Codeへの貢献
+
+Roo Codeへの貢献に興味を持っていただき、ありがとうございます。バグの修正、機能の追加、またはドキュメントの改善など、すべての貢献がRoo Codeをよりスマートにします!コミュニティを活気に満ちた歓迎的なものに保つため、すべてのメンバーは[行動規範](CODE_OF_CONDUCT.md)を順守する必要があります。
+
+## コミュニティに参加する
+
+すべての貢献者に[Discordコミュニティ](https://discord.gg/roocode)への参加を強く推奨します!Discordサーバーに参加することで以下のメリットがあります:
+
+- 貢献に関するリアルタイムのヘルプとガイダンスを得られる
+- 他の貢献者やコアチームメンバーとつながれる
+- プロジェクトの開発と優先事項について最新情報を得られる
+- Roo Codeの将来を形作るディスカッションに参加できる
+- 他の開発者とのコラボレーションの機会を見つけられる
+
+## バグや問題の報告
+
+バグレポートはRoo Codeをより良くするのに役立ちます!新しい課題を作成する前に、重複を避けるために[既存の課題を検索](https://github.com/RooVetGit/Roo-Code/issues)してください。バグを報告する準備ができたら、関連情報の入力を手助けするテンプレートが用意されている[課題ページ](https://github.com/RooVetGit/Roo-Code/issues/new/choose)にアクセスしてください。
+
+<blockquote class='warning-note'>
+     🔐 <b>重要:</b> セキュリティ脆弱性を発見した場合は、<a href="https://github.com/RooVetGit/Roo-Code/security/advisories/new">Githubセキュリティツールを使用して非公開で報告</a>してください。
+</blockquote>
+
+## 取り組む内容の決定
+
+良い最初の貢献を探していますか?[Roo Code Issues](https://github.com/orgs/RooVetGit/projects/1) Githubプロジェクトの「Issue [Unassigned]」セクションの課題をチェックしてください。これらは新しい貢献者や私たちが助けを必要としている領域のために特別に選ばれています!
+
+また、[ドキュメント](https://docs.roocode.com/)への貢献も歓迎します!タイプミスの修正、既存ガイドの改善、または新しい教育コンテンツの作成など、Roo Codeを最大限に活用するためのコミュニティ主導のリソースリポジトリの構築を目指しています。任意のページで「Edit this page」をクリックすると、ファイルを編集するためのGithubの適切な場所にすぐに移動できます。または、https://github.com/RooVetGit/Roo-Code-Docs に直接アクセスすることもできます。
+
+より大きな機能に取り組む予定がある場合は、Roo Codeのビジョンに合致するかどうかを議論するために、まず[機能リクエスト](https://github.com/RooVetGit/Roo-Code/discussions/categories/feature-requests?discussions_q=is%3Aopen+category%3A%22Feature+Requests%22+sort%3Atop)を作成してください。
+
+## 開発のセットアップ
+
+1. リポジトリを**クローン**します:
+
+```sh
+git clone https://github.com/RooVetGit/Roo-Code.git
+```
+
+2. **依存関係をインストール**します:
+
+```sh
+npm run install:all
+```
+
+3. **ウェブビュー(Vite/ReactアプリとHMR)を起動**します:
+
+```sh
+npm run dev
+```
+
+4. **デバッグ**:
+   VSCodeで`F5`キー(または**実行**→**デバッグの開始**)を押すと、Roo Codeがロードされた新しいセッションが開きます。
+
+ウェブビューへの変更はすぐに反映されます。コア拡張機能への変更は、拡張機能ホストの再起動が必要です。
+
+または、.vsixファイルをビルドしてVSCodeに直接インストールすることもできます:
+
+```sh
+npm run build
+```
+
+`bin/`ディレクトリに`.vsix`ファイルが作成され、以下のコマンドでインストールできます:
+
+```sh
+code --install-extension bin/roo-cline-<version>.vsix
+```
+
+## コードの作成と提出
+
+誰でもRoo Codeにコードを貢献できますが、貢献がスムーズに統合されるように以下のガイドラインに従ってください:
+
+1. **プルリクエストを焦点を絞ったものにする**
+
+    - PRを単一の機能またはバグ修正に限定する
+    - より大きな変更を小さく関連したPRに分割する
+    - 変更を独立してレビューできる論理的なコミットに分ける
+
+2. **コード品質**
+
+    - すべてのPRはlintingとフォーマットの両方を含むCIチェックに合格する必要がある
+    - 提出前にESLintの警告やエラーを解決する
+    - 自動コードレビューツールであるEllipsisからのすべてのフィードバックに対応する
+    - TypeScriptのベストプラクティスに従い、型の安全性を維持する
+
+3. **テスト**
+
+    - 新機能にはテストを追加する
+    - `npm test`を実行してすべてのテストが合格することを確認する
+    - 変更が影響する既存のテストを更新する
+    - 適切な場合は単体テストと統合テストの両方を含める
+
+4. **コミットガイドライン**
+
+    - 明確で説明的なコミットメッセージを書く
+    - #issue-number を使用してコミットで関連する課題を参照する
+
+5. **提出前に**
+
+    - 最新のmainブランチに対してあなたのブランチをリベースする
+    - あなたのブランチが正常にビルドされることを確認する
+    - すべてのテストが合格していることを再確認する
+    - デバッグコードやコンソールログがないか変更を見直す
+
+6. **プルリクエストの説明**
+    - 変更内容を明確に説明する
+    - 変更をテストするための手順を含める
+    - 破壊的変更がある場合はリストアップする
+    - UI変更の場合はスクリーンショットを追加する
+
+## 貢献同意
+
+プルリクエストを提出することにより、あなたの貢献がプロジェクトと同じライセンス([Apache 2.0](../LICENSE))の下でライセンスされることに同意したものとみなします。

+ 211 - 0
locales/ja/README.md

@@ -0,0 +1,211 @@
+<div align="center">
+<sub>
+
+[English](../../README.md) • [Català](../../locales/ca/README.md) • [Deutsch](../../locales/de/README.md) • [Español](../../locales/es/README.md) • [Français](../../locales/fr/README.md) • [हिन्दी](../../locales/hi/README.md) • [Italiano](../../locales/it/README.md)
+
+</sub>
+<sub>
+
+日本語 • [한국어](../../locales/ko/README.md) • [Polski](../../locales/pl/README.md) • [Português (BR)](../../locales/pt-BR/README.md) • [Türkçe](../../locales/tr/README.md) • [Tiếng Việt](../../locales/vi/README.md) • [简体中文](../../locales/zh-CN/README.md) • [繁體中文](../../locales/zh-TW/README.md)
+
+</sub>
+</div>
+<br>
+<div align="center">
+  <h2>Roo Codeコミュニティに参加しよう</h2>
+  <p>開発者とつながり、アイデアを提供し、最新のAIパワードコーディングツールで先を行きましょう。</p>
+  
+  <a href="https://discord.gg/roocode" target="_blank"><img src="https://img.shields.io/badge/Discord%E3%81%AB%E5%8F%82%E5%8A%A0-5865F2?style=for-the-badge&logo=discord&logoColor=white" alt="Discordに参加"></a>
+  <a href="https://www.reddit.com/r/RooCode/" target="_blank"><img src="https://img.shields.io/badge/Reddit%E3%81%AB%E5%8F%82%E5%8A%A0-FF4500?style=for-the-badge&logo=reddit&logoColor=white" alt="Redditに参加"></a>
+  
+</div>
+<br>
+<br>
+
+<div align="center">
+<h1>Roo Code(旧Roo Cline)</h1>
+
+<a href="https://marketplace.visualstudio.com/items?itemName=RooVeterinaryInc.roo-cline" target="_blank"><img src="https://img.shields.io/badge/VS%20Marketplace%E3%81%A7%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89-blue?style=for-the-badge&logo=visualstudiocode&logoColor=white" alt="VS Marketplaceでダウンロード"></a>
+<a href="https://github.com/RooVetGit/Roo-Code/discussions/categories/feature-requests?discussions_q=is%3Aopen+category%3A%22Feature+Requests%22+sort%3Atop" target="_blank"><img src="https://img.shields.io/badge/%E6%A9%9F%E8%83%BD%E3%83%AA%E3%82%AF%E3%82%A8%E3%82%B9%E3%83%88-yellow?style=for-the-badge" alt="機能リクエスト"></a>
+<a href="https://marketplace.visualstudio.com/items?itemName=RooVeterinaryInc.roo-cline&ssr=false#review-details" target="_blank"><img src="https://img.shields.io/badge/%E8%A9%95%E4%BE%A1%E3%81%A8%E3%83%AC%E3%83%93%E3%83%A5%E3%83%BC-green?style=for-the-badge" alt="評価とレビュー"></a>
+<a href="https://docs.roocode.com" target="_blank"><img src="https://img.shields.io/badge/%E3%83%89%E3%82%AD%E3%83%A5%E3%83%A1%E3%83%B3%E3%83%86%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3-6B46C1?style=for-the-badge&logo=readthedocs&logoColor=white" alt="ドキュメンテーション"></a>
+
+</div>
+
+**Roo Code**はエディター内に存在するAIパワードの**自律型コーディングエージェント**です。以下のことができます:
+
+- 自然言語でコミュニケーション
+- ワークスペース内のファイルを直接読み書き
+- ターミナルコマンドを実行
+- ブラウザアクションを自動化
+- OpenAI互換または独自のAPI/モデルと統合
+- **カスタムモード**を通じて「パーソナリティ」と機能を調整
+
+柔軟なコーディングパートナー、システムアーキテクト、QAエンジニアやプロダクトマネージャーなどの専門的な役割を求めているかどうかにかかわらず、Roo Codeはより効率的にソフトウェアを構築するのを手助けします。
+
+詳細な更新と修正については[CHANGELOG](../CHANGELOG.md)をご覧ください。
+
+---
+
+## 🎉 Roo Code 3.8リリース
+
+Roo Code 3.8はパフォーマンス向上、新機能、バグ修正が含まれています。
+
+- より高速な非同期チェックポイント
+- .rooignoreファイルのサポート
+- ターミナルとグレースクリーンの問題を修正
+- Roo Codeが複数のウィンドウで実行可能に
+- 実験的なマルチディフ編集戦略
+- サブタスクから親タスクへの通信
+- DeepSeekプロバイダーの更新
+- 新しい「Human Relay」プロバイダー
+
+---
+
+## Roo Codeでできること
+
+- 🚀 自然言語の説明から**コードを生成**
+- 🔧 既存のコードを**リファクタリング&デバッグ**
+- 📝 ドキュメントを**作成&更新**
+- 🤔 コードベースについて**質問に回答**
+- 🔄 繰り返しタスクを**自動化**
+- 🏗️ 新しいファイルとプロジェクトを**作成**
+
+## クイックスタート
+
+1. [Roo Codeをインストール](https://docs.roocode.com/getting-started/installing)
+2. [AIプロバイダーを接続](https://docs.roocode.com/getting-started/connecting-api-provider)
+3. [最初のタスクを試す](https://docs.roocode.com/getting-started/your-first-task)
+
+## 主な機能
+
+### 複数のモード
+
+Roo Codeは専門化された[モード](https://docs.roocode.com/basic-usage/modes)であなたのニーズに適応します:
+
+- **コードモード:** 汎用的なコーディングタスク向け
+- **アーキテクトモード:** 計画と技術的リーダーシップ向け
+- **質問モード:** 質問への回答と情報提供向け
+- **デバッグモード:** 体系的な問題診断向け
+- **[カスタムモード](https://docs.roocode.com/advanced-usage/custom-modes):** セキュリティ監査、パフォーマンス最適化、ドキュメント作成、またはその他のタスクのための無制限の専門ペルソナを作成
+
+### スマートツール
+
+Roo Codeには強力な[ツール](https://docs.roocode.com/basic-usage/using-tools)が付属しています:
+
+- プロジェクト内のファイルの読み書き
+- VS Codeターミナルでコマンドを実行
+- Webブラウザを制御
+- [MCP(モデルコンテキストプロトコル)](https://docs.roocode.com/advanced-usage/mcp)を介して外部ツールを使用
+
+MCPは無制限のカスタムツールを追加できるようにしてRoo Codeの機能を拡張します。外部APIとの統合、データベースへの接続、または特殊な開発ツールの作成 - MCPはRoo Codeの機能を拡張してあなたの特定のニーズを満たすためのフレームワークを提供します。
+
+### カスタマイズ
+
+Roo Codeをあなた好みに動作させる方法:
+
+- パーソナライズされた動作のための[カスタム指示](https://docs.roocode.com/advanced-usage/custom-instructions)
+- 専門タスク用の[カスタムモード](https://docs.roocode.com/advanced-usage/custom-modes)
+- オフライン使用のための[ローカルモデル](https://docs.roocode.com/advanced-usage/local-models)
+- より高速なワークフローのための[自動承認設定](https://docs.roocode.com/advanced-usage/auto-approving-actions)
+
+## リソース
+
+### ドキュメンテーション
+
+- [基本的な使用ガイド](https://docs.roocode.com/basic-usage/the-chat-interface)
+- [高度な機能](https://docs.roocode.com/advanced-usage/auto-approving-actions)
+- [よくある質問](https://docs.roocode.com/faq)
+
+### コミュニティ
+
+- **Discord:** リアルタイムのヘルプとディスカッションについては[Discord サーバーに参加](https://discord.gg/roocode)
+- **Reddit:** 経験とヒントを共有するには[サブレディット](https://www.reddit.com/r/RooCode)にアクセス
+- **GitHub:** [問題](https://github.com/RooVetGit/Roo-Code/issues)を報告したり[機能](https://github.com/RooVetGit/Roo-Code/discussions/categories/feature-requests?discussions_q=is%3Aopen+category%3A%22Feature+Requests%22+sort%3Atop)をリクエスト
+
+---
+
+## ローカルセットアップと開発
+
+1. レポジトリを**クローン**:
+
+```sh
+git clone https://github.com/RooVetGit/Roo-Code.git
+```
+
+2. **依存関係をインストール**:
+
+```sh
+npm run install:all
+```
+
+3. **ウェブビュー(Vite/ReactアプリとHMR)を起動**:
+
+```sh
+npm run dev
+```
+
+4. **デバッグ**:
+   VSCodeで`F5`(または**実行**→**デバッグの開始**)を押すと、Roo Codeがロードされた新しいセッションが開きます。
+
+ウェブビューへの変更はすぐに表示されます。コア拡張機能への変更には拡張機能ホストの再起動が必要です。
+
+あるいは、.vsixファイルをビルドしてVSCodeに直接インストールすることもできます:
+
+```sh
+npm run build
+```
+
+`bin/`ディレクトリに`.vsix`ファイルが作成され、次のコマンドでインストールできます:
+
+```sh
+code --install-extension bin/roo-cline-<version>.vsix
+```
+
+バージョン管理と公開には[changesets](https://github.com/changesets/changesets)を使用しています。リリースノートについては`CHANGELOG.md`をご確認ください。
+
+---
+
+## 免責事項
+
+**ご注意ください**:Roo Veterinary, Incは、Roo Codeに関連して提供または利用可能になるコード、モデル、またはその他のツール、関連するサードパーティツール、または結果的な出力に関して、**いかなる表明や保証も行いません**。そのようなツールや出力の使用に関連するすべてのリスクはお客様が負うものとします。そのようなツールは**「現状のまま」**および**「利用可能な状態」**で提供されます。そのようなリスクには、知的財産権の侵害、サイバー脆弱性や攻撃、バイアス、不正確さ、エラー、欠陥、ウイルス、ダウンタイム、財産の損失または損害、および/または人身傷害が含まれますが、これらに限定されません。お客様は、そのようなツールまたは出力の使用について(適法性、適切性、および結果を含むがこれらに限定されない)単独で責任を負います。
+
+---
+
+## 貢献
+
+私たちはコミュニティの貢献を歓迎します![CONTRIBUTING.md](CONTRIBUTING.md)を読んで始めましょう。
+
+---
+
+## 貢献者
+
+Roo Codeの改善に貢献してくれたすべての貢献者に感謝します!
+
+<!-- START CONTRIBUTORS SECTION - AUTO-GENERATED, DO NOT EDIT MANUALLY -->
+
+|               <a href="https://github.com/mrubens"><img src="https://avatars.githubusercontent.com/u/2600?v=4" width="100" height="100" alt="mrubens"/><br /><sub><b>mrubens</b></sub></a>               |         <a href="https://github.com/saoudrizwan"><img src="https://avatars.githubusercontent.com/u/7799382?v=4" width="100" height="100" alt="saoudrizwan"/><br /><sub><b>saoudrizwan</b></sub></a>         |                   <a href="https://github.com/cte"><img src="https://avatars.githubusercontent.com/u/16332?v=4" width="100" height="100" alt="cte"/><br /><sub><b>cte</b></sub></a>                    |          <a href="https://github.com/samhvw8"><img src="https://avatars.githubusercontent.com/u/12538214?v=4" width="100" height="100" alt="samhvw8"/><br /><sub><b>samhvw8</b></sub></a>           |    <a href="https://github.com/daniel-lxs"><img src="https://avatars.githubusercontent.com/u/57051444?v=4" width="100" height="100" alt="daniel-lxs"/><br /><sub><b>daniel-lxs</b></sub></a>    |                   <a href="https://github.com/a8trejo"><img src="https://avatars.githubusercontent.com/u/62401433?v=4" width="100" height="100" alt="a8trejo"/><br /><sub><b>a8trejo</b></sub></a>                    |
+| :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
+|        <a href="https://github.com/ColemanRoo"><img src="https://avatars.githubusercontent.com/u/117104599?v=4" width="100" height="100" alt="ColemanRoo"/><br /><sub><b>ColemanRoo</b></sub></a>        |             <a href="https://github.com/stea9499"><img src="https://avatars.githubusercontent.com/u/4163795?v=4" width="100" height="100" alt="stea9499"/><br /><sub><b>stea9499</b></sub></a>              |     <a href="https://github.com/joemanley201"><img src="https://avatars.githubusercontent.com/u/8299960?v=4" width="100" height="100" alt="joemanley201"/><br /><sub><b>joemanley201</b></sub></a>     |       <a href="https://github.com/System233"><img src="https://avatars.githubusercontent.com/u/20336040?v=4" width="100" height="100" alt="System233"/><br /><sub><b>System233</b></sub></a>        |       <a href="https://github.com/jquanton"><img src="https://avatars.githubusercontent.com/u/88576563?v=4" width="100" height="100" alt="jquanton"/><br /><sub><b>jquanton</b></sub></a>       |              <a href="https://github.com/nissa-seru"><img src="https://avatars.githubusercontent.com/u/119150866?v=4" width="100" height="100" alt="nissa-seru"/><br /><sub><b>nissa-seru</b></sub></a>               |
+|    <a href="https://github.com/hannesrudolph"><img src="https://avatars.githubusercontent.com/u/49103247?v=4" width="100" height="100" alt="hannesrudolph"/><br /><sub><b>hannesrudolph</b></sub></a>    |             <a href="https://github.com/MuriloFP"><img src="https://avatars.githubusercontent.com/u/50873657?v=4" width="100" height="100" alt="MuriloFP"/><br /><sub><b>MuriloFP</b></sub></a>             |             <a href="https://github.com/NyxJae"><img src="https://avatars.githubusercontent.com/u/52313587?v=4" width="100" height="100" alt="NyxJae"/><br /><sub><b>NyxJae</b></sub></a>              |        <a href="https://github.com/punkpeye"><img src="https://avatars.githubusercontent.com/u/108313943?v=4" width="100" height="100" alt="punkpeye"/><br /><sub><b>punkpeye</b></sub></a>         |            <a href="https://github.com/d-oit"><img src="https://avatars.githubusercontent.com/u/6849456?v=4" width="100" height="100" alt="d-oit"/><br /><sub><b>d-oit</b></sub></a>            |            <a href="https://github.com/monotykamary"><img src="https://avatars.githubusercontent.com/u/1130103?v=4" width="100" height="100" alt="monotykamary"/><br /><sub><b>monotykamary</b></sub></a>             |
+|         <a href="https://github.com/lloydchang"><img src="https://avatars.githubusercontent.com/u/1329685?v=4" width="100" height="100" alt="lloydchang"/><br /><sub><b>lloydchang</b></sub></a>         | <a href="https://github.com/vigneshsubbiah16"><img src="https://avatars.githubusercontent.com/u/51325334?v=4" width="100" height="100" alt="vigneshsubbiah16"/><br /><sub><b>vigneshsubbiah16</b></sub></a> |            <a href="https://github.com/Szpadel"><img src="https://avatars.githubusercontent.com/u/1857251?v=4" width="100" height="100" alt="Szpadel"/><br /><sub><b>Szpadel</b></sub></a>             |       <a href="https://github.com/lupuletic"><img src="https://avatars.githubusercontent.com/u/105351510?v=4" width="100" height="100" alt="lupuletic"/><br /><sub><b>lupuletic</b></sub></a>       |        <a href="https://github.com/cannuri"><img src="https://avatars.githubusercontent.com/u/91494156?v=4" width="100" height="100" alt="cannuri"/><br /><sub><b>cannuri</b></sub></a>         | <a href="https://github.com/Smartsheet-JB-Brown"><img src="https://avatars.githubusercontent.com/u/171734120?v=4" width="100" height="100" alt="Smartsheet-JB-Brown"/><br /><sub><b>Smartsheet-JB-Brown</b></sub></a> |
+|           <a href="https://github.com/Premshay"><img src="https://avatars.githubusercontent.com/u/28099628?v=4" width="100" height="100" alt="Premshay"/><br /><sub><b>Premshay</b></sub></a>            |              <a href="https://github.com/psv2522"><img src="https://avatars.githubusercontent.com/u/87223770?v=4" width="100" height="100" alt="psv2522"/><br /><sub><b>psv2522</b></sub></a>               |      <a href="https://github.com/olweraltuve"><img src="https://avatars.githubusercontent.com/u/39308405?v=4" width="100" height="100" alt="olweraltuve"/><br /><sub><b>olweraltuve</b></sub></a>      |       <a href="https://github.com/RaySinner"><img src="https://avatars.githubusercontent.com/u/118297374?v=4" width="100" height="100" alt="RaySinner"/><br /><sub><b>RaySinner</b></sub></a>       |            <a href="https://github.com/qdaxb"><img src="https://avatars.githubusercontent.com/u/4157870?v=4" width="100" height="100" alt="qdaxb"/><br /><sub><b>qdaxb</b></sub></a>            |                <a href="https://github.com/feifei325"><img src="https://avatars.githubusercontent.com/u/46489071?v=4" width="100" height="100" alt="feifei325"/><br /><sub><b>feifei325</b></sub></a>                 |
+|      <a href="https://github.com/afshawnlotfi"><img src="https://avatars.githubusercontent.com/u/6283745?v=4" width="100" height="100" alt="afshawnlotfi"/><br /><sub><b>afshawnlotfi</b></sub></a>      |              <a href="https://github.com/emshvac"><img src="https://avatars.githubusercontent.com/u/121588911?v=4" width="100" height="100" alt="emshvac"/><br /><sub><b>emshvac</b></sub></a>              |         <a href="https://github.com/Lunchb0ne"><img src="https://avatars.githubusercontent.com/u/22198661?v=4" width="100" height="100" alt="Lunchb0ne"/><br /><sub><b>Lunchb0ne</b></sub></a>         |             <a href="https://github.com/sammcj"><img src="https://avatars.githubusercontent.com/u/862951?v=4" width="100" height="100" alt="sammcj"/><br /><sub><b>sammcj</b></sub></a>             |       <a href="https://github.com/dtrugman"><img src="https://avatars.githubusercontent.com/u/2451669?v=4" width="100" height="100" alt="dtrugman"/><br /><sub><b>dtrugman</b></sub></a>        |                 <a href="https://github.com/aitoroses"><img src="https://avatars.githubusercontent.com/u/1699368?v=4" width="100" height="100" alt="aitoroses"/><br /><sub><b>aitoroses</b></sub></a>                 |
+|           <a href="https://github.com/yt3trees"><img src="https://avatars.githubusercontent.com/u/57471763?v=4" width="100" height="100" alt="yt3trees"/><br /><sub><b>yt3trees</b></sub></a>            |              <a href="https://github.com/yongjer"><img src="https://avatars.githubusercontent.com/u/54315206?v=4" width="100" height="100" alt="yongjer"/><br /><sub><b>yongjer</b></sub></a>               |      <a href="https://github.com/vincentsong"><img src="https://avatars.githubusercontent.com/u/2343574?v=4" width="100" height="100" alt="vincentsong"/><br /><sub><b>vincentsong</b></sub></a>       | <a href="https://github.com/pugazhendhi-m"><img src="https://avatars.githubusercontent.com/u/132246623?v=4" width="100" height="100" alt="pugazhendhi-m"/><br /><sub><b>pugazhendhi-m</b></sub></a> |           <a href="https://github.com/eonghk"><img src="https://avatars.githubusercontent.com/u/139964?v=4" width="100" height="100" alt="eonghk"/><br /><sub><b>eonghk</b></sub></a>           |                  <a href="https://github.com/philfung"><img src="https://avatars.githubusercontent.com/u/1054593?v=4" width="100" height="100" alt="philfung"/><br /><sub><b>philfung</b></sub></a>                   |
+|               <a href="https://github.com/pdecat"><img src="https://avatars.githubusercontent.com/u/318490?v=4" width="100" height="100" alt="pdecat"/><br /><sub><b>pdecat</b></sub></a>                |                <a href="https://github.com/napter"><img src="https://avatars.githubusercontent.com/u/6260841?v=4" width="100" height="100" alt="napter"/><br /><sub><b>napter</b></sub></a>                 |                    <a href="https://github.com/mdp"><img src="https://avatars.githubusercontent.com/u/2868?v=4" width="100" height="100" alt="mdp"/><br /><sub><b>mdp</b></sub></a>                    |            <a href="https://github.com/jcbdev"><img src="https://avatars.githubusercontent.com/u/17152092?v=4" width="100" height="100" alt="jcbdev"/><br /><sub><b>jcbdev</b></sub></a>            |      <a href="https://github.com/benzntech"><img src="https://avatars.githubusercontent.com/u/4044180?v=4" width="100" height="100" alt="benzntech"/><br /><sub><b>benzntech</b></sub></a>      |              <a href="https://github.com/anton-otee"><img src="https://avatars.githubusercontent.com/u/149477749?v=4" width="100" height="100" alt="anton-otee"/><br /><sub><b>anton-otee</b></sub></a>               |
+|             <a href="https://github.com/AMHesch"><img src="https://avatars.githubusercontent.com/u/4777192?v=4" width="100" height="100" alt="AMHesch"/><br /><sub><b>AMHesch</b></sub></a>              |              <a href="https://github.com/bannzai"><img src="https://avatars.githubusercontent.com/u/10897361?v=4" width="100" height="100" alt="bannzai"/><br /><sub><b>bannzai</b></sub></a>               |           <a href="https://github.com/dairui1"><img src="https://avatars.githubusercontent.com/u/183250644?v=4" width="100" height="100" alt="dairui1"/><br /><sub><b>dairui1</b></sub></a>            |           <a href="https://github.com/dqroid"><img src="https://avatars.githubusercontent.com/u/192424994?v=4" width="100" height="100" alt="dqroid"/><br /><sub><b>dqroid</b></sub></a>            |      <a href="https://github.com/kinandan"><img src="https://avatars.githubusercontent.com/u/186135699?v=4" width="100" height="100" alt="kinandan"/><br /><sub><b>kinandan</b></sub></a>       |                       <a href="https://github.com/kohii"><img src="https://avatars.githubusercontent.com/u/6891780?v=4" width="100" height="100" alt="kohii"/><br /><sub><b>kohii</b></sub></a>                       |
+|       <a href="https://github.com/lightrabbit"><img src="https://avatars.githubusercontent.com/u/1521765?v=4" width="100" height="100" alt="lightrabbit"/><br /><sub><b>lightrabbit</b></sub></a>        |                   <a href="https://github.com/olup"><img src="https://avatars.githubusercontent.com/u/13785588?v=4" width="100" height="100" alt="olup"/><br /><sub><b>olup</b></sub></a>                   |      <a href="https://github.com/moqimoqidea"><img src="https://avatars.githubusercontent.com/u/39821951?v=4" width="100" height="100" alt="moqimoqidea"/><br /><sub><b>moqimoqidea</b></sub></a>      |        <a href="https://github.com/mosleyit"><img src="https://avatars.githubusercontent.com/u/189396442?v=4" width="100" height="100" alt="mosleyit"/><br /><sub><b>mosleyit</b></sub></a>         |       <a href="https://github.com/oprstchn"><img src="https://avatars.githubusercontent.com/u/16177972?v=4" width="100" height="100" alt="oprstchn"/><br /><sub><b>oprstchn</b></sub></a>       |               <a href="https://github.com/philipnext"><img src="https://avatars.githubusercontent.com/u/81944499?v=4" width="100" height="100" alt="philipnext"/><br /><sub><b>philipnext</b></sub></a>               |
+|      <a href="https://github.com/refactorthis"><img src="https://avatars.githubusercontent.com/u/3012240?v=4" width="100" height="100" alt="refactorthis"/><br /><sub><b>refactorthis</b></sub></a>      |      <a href="https://github.com/samir-nimbly"><img src="https://avatars.githubusercontent.com/u/112695483?v=4" width="100" height="100" alt="samir-nimbly"/><br /><sub><b>samir-nimbly</b></sub></a>       |              <a href="https://github.com/shaybc"><img src="https://avatars.githubusercontent.com/u/8535905?v=4" width="100" height="100" alt="shaybc"/><br /><sub><b>shaybc</b></sub></a>              |   <a href="https://github.com/shohei-ihaya"><img src="https://avatars.githubusercontent.com/u/25131938?v=4" width="100" height="100" alt="shohei-ihaya"/><br /><sub><b>shohei-ihaya</b></sub></a>   | <a href="https://github.com/student20880"><img src="https://avatars.githubusercontent.com/u/74263488?v=4" width="100" height="100" alt="student20880"/><br /><sub><b>student20880</b></sub></a> |          <a href="https://github.com/PretzelVector"><img src="https://avatars.githubusercontent.com/u/95664360?v=4" width="100" height="100" alt="PretzelVector"/><br /><sub><b>PretzelVector</b></sub></a>           |
+|       <a href="https://github.com/adamwlarson"><img src="https://avatars.githubusercontent.com/u/1392315?v=4" width="100" height="100" alt="adamwlarson"/><br /><sub><b>adamwlarson</b></sub></a>        |                <a href="https://github.com/alarno"><img src="https://avatars.githubusercontent.com/u/4355547?v=4" width="100" height="100" alt="alarno"/><br /><sub><b>alarno</b></sub></a>                 | <a href="https://github.com/andreastempsch"><img src="https://avatars.githubusercontent.com/u/117991125?v=4" width="100" height="100" alt="andreastempsch"/><br /><sub><b>andreastempsch</b></sub></a> |          <a href="https://github.com/Atlogit"><img src="https://avatars.githubusercontent.com/u/86947554?v=4" width="100" height="100" alt="Atlogit"/><br /><sub><b>Atlogit</b></sub></a>           |            <a href="https://github.com/dleen"><img src="https://avatars.githubusercontent.com/u/1297964?v=4" width="100" height="100" alt="dleen"/><br /><sub><b>dleen</b></sub></a>            |                 <a href="https://github.com/dbasclpy"><img src="https://avatars.githubusercontent.com/u/139889137?v=4" width="100" height="100" alt="dbasclpy"/><br /><sub><b>dbasclpy</b></sub></a>                  |
+| <a href="https://github.com/celestial-vault"><img src="https://avatars.githubusercontent.com/u/58194240?v=4" width="100" height="100" alt="celestial-vault"/><br /><sub><b>celestial-vault</b></sub></a> |           <a href="https://github.com/DeXtroTip"><img src="https://avatars.githubusercontent.com/u/21011087?v=4" width="100" height="100" alt="DeXtroTip"/><br /><sub><b>DeXtroTip</b></sub></a>            |              <a href="https://github.com/hesara"><img src="https://avatars.githubusercontent.com/u/1335918?v=4" width="100" height="100" alt="hesara"/><br /><sub><b>hesara</b></sub></a>              |       <a href="https://github.com/eltociear"><img src="https://avatars.githubusercontent.com/u/22633385?v=4" width="100" height="100" alt="eltociear"/><br /><sub><b>eltociear</b></sub></a>        | <a href="https://github.com/libertyteeth"><img src="https://avatars.githubusercontent.com/u/32841567?v=4" width="100" height="100" alt="libertyteeth"/><br /><sub><b>libertyteeth</b></sub></a> |           <a href="https://github.com/mamertofabian"><img src="https://avatars.githubusercontent.com/u/7698436?v=4" width="100" height="100" alt="mamertofabian"/><br /><sub><b>mamertofabian</b></sub></a>           |
+|     <a href="https://github.com/marvijo-code"><img src="https://avatars.githubusercontent.com/u/82562019?v=4" width="100" height="100" alt="marvijo-code"/><br /><sub><b>marvijo-code</b></sub></a>      |                  <a href="https://github.com/Sarke"><img src="https://avatars.githubusercontent.com/u/2719310?v=4" width="100" height="100" alt="Sarke"/><br /><sub><b>Sarke</b></sub></a>                  |               <a href="https://github.com/tgfjt"><img src="https://avatars.githubusercontent.com/u/2628239?v=4" width="100" height="100" alt="tgfjt"/><br /><sub><b>tgfjt</b></sub></a>                |       <a href="https://github.com/vladstudio"><img src="https://avatars.githubusercontent.com/u/914320?v=4" width="100" height="100" alt="vladstudio"/><br /><sub><b>vladstudio</b></sub></a>       |          <a href="https://github.com/ashktn"><img src="https://avatars.githubusercontent.com/u/6723913?v=4" width="100" height="100" alt="ashktn"/><br /><sub><b>ashktn</b></sub></a>           |                                                                                                                                                                                                                       |
+
+<!-- END CONTRIBUTORS SECTION -->
+
+## ライセンス
+
+[Apache 2.0 © 2025 Roo Veterinary, Inc.](../LICENSE)
+
+---
+
+**Roo Codeをお楽しみください!** 短いリードで保持するか、自律的に動き回らせるかにかかわらず、あなたが何を構築するのか楽しみにしています。質問や機能のアイデアがある場合は、[Redditコミュニティ](https://www.reddit.com/r/RooCode/)や[Discord](https://discord.gg/roocode)にお立ち寄りください。ハッピーコーディング!

+ 69 - 0
locales/ko/CODE_OF_CONDUCT.md

@@ -0,0 +1,69 @@
+# 기여자 서약 행동 강령
+
+## 우리의 약속
+
+개방적이고 환영하는 환경을 조성하기 위해, 우리는
+기여자와 관리자로서 프로젝트와
+우리 커뮤니티에 참여하는 것이 나이, 신체
+크기, 장애, 민족, 성 특성, 성 정체성과 표현,
+경험 수준, 교육, 사회 경제적 지위, 국적, 개인적
+외모, 인종, 종교, 또는 성적 정체성과 지향에 관계없이 모두에게 괴롭힘 없는 경험이 되도록 약속합니다.
+
+## 우리의 표준
+
+긍정적인 환경을 조성하는 데 기여하는 행동의 예는
+다음과 같습니다:
+
+- 환영하고 포용적인 언어 사용
+- 다양한 관점과 경험 존중
+- 건설적인 비판을 우아하게 수용
+- 커뮤니티에 가장 좋은 것에 집중
+- 다른 커뮤니티 구성원에 대한 공감 보여주기
+
+참가자에 의한 용납될 수 없는 행동의 예는 다음과 같습니다:
+
+- 성적 언어나 이미지 사용 및 원치 않는 성적 관심이나
+  접근
+- 트롤링, 모욕적/비하적 댓글, 개인적 또는 정치적 공격
+- 공개적 또는 개인적 괴롭힘
+- 명시적 허가 없이 다른 사람의 개인 정보 공개, 예를 들어 물리적 또는 전자적
+  주소
+- 전문적 환경에서 부적절하다고 합리적으로 간주될 수 있는 기타 행동
+
+## 우리의 책임
+
+프로젝트 관리자는 허용 가능한 행동의 기준을 명확히 할 책임이 있으며
+부적절한 행동의 모든 사례에 대해 적절하고 공정한 시정 조치를 취할 것으로 예상됩니다.
+
+프로젝트 관리자는 이 행동 강령에 부합하지 않는 댓글, 커밋, 코드, 위키 편집, 이슈 및 기타 기여를 제거, 편집 또는
+거부할 권리와 책임이 있으며, 부적절하다고 판단되는 다른 행동에 대해 기여자를 일시적으로 또는
+영구적으로 추방할 수 있습니다.
+
+## 범위
+
+이 행동 강령은 개인이 프로젝트나 그 커뮤니티를 대표할 때 프로젝트 공간과 공공 공간 모두에 적용됩니다. 프로젝트나
+커뮤니티를 대표하는 예로는 공식 프로젝트 이메일 사용,
+공식 소셜 미디어 계정을 통한 게시, 온라인 또는 오프라인 이벤트에서 지정된 대표로 활동하는 것이 있습니다. 프로젝트의 대표는
+프로젝트 관리자에 의해 추가로 정의되고 명확히 될 수 있습니다.
+
+## 시행
+
+학대, 괴롭힘 또는 기타 용납할 수 없는 행동의 사례는
[email protected]으로 프로젝트 팀에 연락하여 보고할 수 있습니다. 모든 불만 사항은
+검토되고 조사되며 상황에 필요하고 적절하다고 판단되는 대응으로 이어질 것입니다. 프로젝트 팀은
+사건의 보고자와 관련하여 기밀을 유지할 의무가 있습니다.
+특정 시행 정책의 추가 세부 사항은 별도로 게시될 수 있습니다.
+
+행동 강령을 선의로 따르거나 시행하지 않는 프로젝트 관리자는
+프로젝트 리더십의 다른 구성원이 결정한 대로 일시적 또는 영구적인 영향에 직면할 수 있습니다.
+
+## 출처
+
+이 행동 강령은 [Cline의 버전][cline_coc]에서 수정된 [기여자 서약][homepage], 버전 1.4,
+https://www.contributor-covenant.org/version/1/4/code-of-conduct.html 에서 이용 가능
+
+[cline_coc]: https://github.com/cline/cline/blob/main/CODE_OF_CONDUCT.md
+[homepage]: https://www.contributor-covenant.org
+
+이 행동 강령에 관한 일반적인 질문에 대한 답변은
+https://www.contributor-covenant.org/faq 를 참조하세요

+ 113 - 0
locales/ko/CONTRIBUTING.md

@@ -0,0 +1,113 @@
+# Roo Code에 기여하기
+
+Roo Code에 기여하는 데 관심을 가져주셔서 기쁩니다. 버그를 수정하든, 기능을 추가하든, 문서를 개선하든, 모든 기여는 Roo Code를 더 스마트하게 만듭니다! 우리 커뮤니티를 활기차고 친절하게 유지하기 위해, 모든 구성원은 우리의 [행동 강령](CODE_OF_CONDUCT.md)을 준수해야 합니다.
+
+## 우리 커뮤니티에 참여하세요
+
+모든 기여자가 우리의 [Discord 커뮤니티](https://discord.gg/roocode)에 참여할 것을 강력히 권장합니다! Discord 서버의 일원이 되면 다음과 같은 도움을 받을 수 있습니다:
+
+- 기여에 대한 실시간 도움과 지침 얻기
+- 다른 기여자 및 핵심 팀원과 연결
+- 프로젝트 개발 및 우선순위에 대한 최신 정보 유지
+- Roo Code의 미래를 형성하는 토론에 참여
+- 다른 개발자와의 협업 기회 찾기
+
+## 버그 또는 이슈 보고하기
+
+버그 보고는 모두를 위해 Roo Code를 더 좋게 만드는 데 도움이 됩니다! 새 이슈를 만들기 전에, 중복을 피하기 위해 [기존 이슈 검색](https://github.com/RooVetGit/Roo-Code/issues)을 해주세요. 버그를 보고할 준비가 되면, 관련 정보를 작성하는 데 도움이 되는 템플릿이 있는 [이슈 페이지](https://github.com/RooVetGit/Roo-Code/issues/new/choose)로 이동하세요.
+
+<blockquote class='warning-note'>
+     🔐 <b>중요:</b> 보안 취약점을 발견한 경우, <a href="https://github.com/RooVetGit/Roo-Code/security/advisories/new">비공개로 보고하기 위해 Github 보안 도구를 사용하세요</a>.
+</blockquote>
+
+## 작업할 내용 결정하기
+
+첫 기여를 위한 좋은 시작점을 찾고 계신가요? 우리의 [Roo Code 이슈](https://github.com/orgs/RooVetGit/projects/1) Github 프로젝트의 "Issue [Unassigned]" 섹션에서 이슈를 확인하세요. 이러한 이슈들은 새로운 기여자와 우리가 도움을 필요로 하는 영역을 위해 특별히 선별되었습니다!
+
+우리는 [문서](https://docs.roocode.com/)에 대한 기여도 환영합니다! 오타 수정, 기존 가이드 개선 또는 새로운 교육 콘텐츠 생성 등 - 모든 사람이 Roo Code를 최대한 활용할 수 있도록 도와주는 커뮤니티 기반 리소스 저장소를 구축하고 싶습니다. 모든
+페이지에서 "Edit this page"를 클릭하여 파일을 편집할 수 있는 Github의 적절한 위치로 빠르게 이동하거나, https://github.com/RooVetGit/Roo-Code-Docs에 직접 접근할 수 있습니다.
+
+더 큰 기능 작업을 계획하고 있다면, Roo Code의 비전과 일치하는지 논의할 수 있도록 먼저 [기능 요청](https://github.com/RooVetGit/Roo-Code/discussions/categories/feature-requests?discussions_q=is%3Aopen+category%3A%22Feature+Requests%22+sort%3Atop)을 생성해주세요.
+
+## 개발 설정
+
+1. 저장소 **클론**:
+
+```sh
+git clone https://github.com/RooVetGit/Roo-Code.git
+```
+
+2. **의존성 설치**:
+
+```sh
+npm run install:all
+```
+
+3. **웹뷰 시작(HMR이 있는 Vite/React 앱)**:
+
+```sh
+npm run dev
+```
+
+4. **디버깅**:
+   VSCode에서 `F5`를 누르거나(**실행** → **디버깅 시작**) Roo Code가 로드된 새 세션을 엽니다.
+
+웹뷰의 변경 사항은 즉시 나타납니다. 코어 확장에 대한 변경 사항은 확장 호스트를 다시 시작해야 합니다.
+
+또는 .vsix를 빌드하고 VSCode에 직접 설치할 수 있습니다:
+
+```sh
+npm run build
+```
+
+`bin/` 디렉토리에 `.vsix` 파일이 나타나며 다음 명령으로 설치할 수 있습니다:
+
+```sh
+code --install-extension bin/roo-cline-<version>.vsix
+```
+
+## 코드 작성 및 제출
+
+누구나 Roo Code에 코드를 기여할 수 있지만, 기여가 원활하게 통합될 수 있도록 다음 지침을 따라주시기 바랍니다:
+
+1. **Pull Request 집중**
+
+    - PR을 단일 기능 또는 버그 수정으로 제한
+    - 더 큰 변경사항을 더 작고 관련된 PR로 분할
+    - 독립적으로 검토할 수 있는 논리적인 커밋으로 변경사항 분할
+
+2. **코드 품질**
+
+    - 모든 PR은 린팅 및 포맷팅을 포함한 CI 검사를 통과해야 함
+    - 제출하기 전에 모든 ESLint 경고나 오류 해결
+    - Ellipsis, 자동화된 코드 리뷰 도구의 모든 피드백에 응답
+    - TypeScript 모범 사례를 따르고 타입 안전성 유지
+
+3. **테스팅**
+
+    - 새로운 기능에 대한 테스트 추가
+    - 모든 테스트가 통과하는지 확인하기 위해 `npm test` 실행
+    - 변경사항이 영향을 미치는 경우 기존 테스트 업데이트
+    - 적절한 경우 단위 테스트와 통합 테스트 모두 포함
+
+4. **커밋 가이드라인**
+
+    - 명확하고 설명적인 커밋 메시지 작성
+    - #이슈-번호를 사용하여 커밋에서 관련 이슈 참조
+
+5. **제출 전**
+
+    - 최신 main에 브랜치 리베이스
+    - 브랜치가 성공적으로 빌드되는지 확인
+    - 모든 테스트가 통과하는지 다시 확인
+    - 디버깅 코드나 콘솔 로그가 있는지 변경사항 검토
+
+6. **Pull Request 설명**
+    - 변경사항이 무엇을 하는지 명확하게 설명
+    - 변경사항을 테스트하는 단계 포함
+    - 모든 주요 변경사항 나열
+    - UI 변경사항에 대한 스크린샷 추가
+
+## 기여 동의
+
+Pull request를 제출함으로써, 귀하의 기여는 프로젝트와 동일한 라이선스([Apache 2.0](../LICENSE))에 따라 라이선스가 부여된다는 데 동의합니다.

+ 211 - 0
locales/ko/README.md

@@ -0,0 +1,211 @@
+<div align="center">
+<sub>
+
+[English](../../README.md) • [Català](../../locales/ca/README.md) • [Deutsch](../../locales/de/README.md) • [Español](../../locales/es/README.md) • [Français](../../locales/fr/README.md) • [हिन्दी](../../locales/hi/README.md) • [Italiano](../../locales/it/README.md)
+
+</sub>
+<sub>
+
+[日本語](../../locales/ja/README.md) • 한국어 • [Polski](../../locales/pl/README.md) • [Português (BR)](../../locales/pt-BR/README.md) • [Türkçe](../../locales/tr/README.md) • [Tiếng Việt](../../locales/vi/README.md) • [简体中文](../../locales/zh-CN/README.md) • [繁體中文](../../locales/zh-TW/README.md)
+
+</sub>
+</div>
+<br>
+<div align="center">
+  <h2>Roo Code 커뮤니티에 참여하세요</h2>
+  <p>개발자들과 연결하고, 아이디어를 기여하고, 최신 AI 기반 코딩 도구를 계속 확인하세요.</p>
+  
+  <a href="https://discord.gg/roocode" target="_blank"><img src="https://img.shields.io/badge/Discord%20참여-5865F2?style=for-the-badge&logo=discord&logoColor=white" alt="Discord 참여"></a>
+  <a href="https://www.reddit.com/r/RooCode/" target="_blank"><img src="https://img.shields.io/badge/Reddit%20참여-FF4500?style=for-the-badge&logo=reddit&logoColor=white" alt="Reddit 참여"></a>
+  
+</div>
+<br>
+<br>
+
+<div align="center">
+<h1>Roo Code (이전 Roo Cline)</h1>
+
+<a href="https://marketplace.visualstudio.com/items?itemName=RooVeterinaryInc.roo-cline" target="_blank"><img src="https://img.shields.io/badge/VS%20Marketplace에서%20다운로드-blue?style=for-the-badge&logo=visualstudiocode&logoColor=white" alt="VS Marketplace에서 다운로드"></a>
+<a href="https://github.com/RooVetGit/Roo-Code/discussions/categories/feature-requests?discussions_q=is%3Aopen+category%3A%22Feature+Requests%22+sort%3Atop" target="_blank"><img src="https://img.shields.io/badge/기능%20요청-yellow?style=for-the-badge" alt="기능 요청"></a>
+<a href="https://marketplace.visualstudio.com/items?itemName=RooVeterinaryInc.roo-cline&ssr=false#review-details" target="_blank"><img src="https://img.shields.io/badge/평가%20%26%20리뷰-green?style=for-the-badge" alt="평가 & 리뷰"></a>
+<a href="https://docs.roocode.com" target="_blank"><img src="https://img.shields.io/badge/문서-6B46C1?style=for-the-badge&logo=readthedocs&logoColor=white" alt="문서"></a>
+
+</div>
+
+**Roo Code**는 에디터 내에서 작동하는 AI 기반 **자율 코딩 에이전트**입니다. 다음과 같은 기능을 제공합니다:
+
+- 자연어로 의사소통
+- 워크스페이스에서 직접 파일 읽기 및 쓰기
+- 터미널 명령 실행
+- 브라우저 작업 자동화
+- OpenAI 호환 또는 커스텀 API/모델과 통합
+- **커스텀 모드**를 통해 "개성"과 기능 조정
+
+유연한 코딩 파트너, 시스템 아키텍트, QA 엔지니어나 제품 관리자와 같은 전문화된 역할을 찾고 있든, Roo Code는 더 효율적으로 소프트웨어를 구축하는 데 도움이 될 수 있습니다.
+
+상세한 업데이트 및 수정 사항은 [CHANGELOG](../CHANGELOG.md)를 확인하세요.
+
+---
+
+## 🎉 Roo Code 3.8 출시
+
+Roo Code 3.8이 성능 향상, 새로운 기능 및 버그 수정과 함께 출시되었습니다.
+
+- 더 빠른 비동기 체크포인트
+- .rooignore 파일 지원
+- 터미널 및 회색 화면 문제 해결
+- Roo Code가 여러 창에서 실행 가능
+- 실험적 다중 차이점 편집 전략
+- 하위 작업에서 상위 작업으로의 통신
+- 업데이트된 DeepSeek 제공자
+- 새로운 "Human Relay" 제공자
+
+---
+
+## Roo Code는 무엇을 할 수 있나요?
+
+- 🚀 자연어 설명에서 **코드 생성**
+- 🔧 기존 코드 **리팩토링 및 디버그**
+- 📝 문서 **작성 및 업데이트**
+- 🤔 코드베이스에 대한 **질문에 답변**
+- 🔄 반복적인 작업 **자동화**
+- 🏗️ 새 파일 및 프로젝트 **생성**
+
+## 빠른 시작
+
+1. [Roo Code 설치](https://docs.roocode.com/getting-started/installing)
+2. [AI 제공자 연결](https://docs.roocode.com/getting-started/connecting-api-provider)
+3. [첫 번째 작업 시도](https://docs.roocode.com/getting-started/your-first-task)
+
+## 주요 기능
+
+### 다중 모드
+
+Roo Code는 전문화된 [모드](https://docs.roocode.com/basic-usage/modes)로 사용자의 필요에 맞게 적응합니다:
+
+- **코드 모드:** 일반적인 코딩 작업용
+- **아키텍트 모드:** 계획 및 기술 리더십용
+- **질문 모드:** 질문에 답변하고 정보 제공용
+- **디버그 모드:** 체계적인 문제 진단용
+- **[커스텀 모드](https://docs.roocode.com/advanced-usage/custom-modes):** 보안 감사, 성능 최적화, 문서화 또는 기타 작업을 위한 무제한 전문 페르소나 생성
+
+### 스마트 도구
+
+Roo Code는 다음과 같은 강력한 [도구](https://docs.roocode.com/basic-usage/using-tools)를 제공합니다:
+
+- 프로젝트에서 파일 읽기 및 쓰기
+- VS Code 터미널에서 명령 실행
+- 웹 브라우저 제어
+- [MCP(Model Context Protocol)](https://docs.roocode.com/advanced-usage/mcp)를 통한 외부 도구 사용
+
+MCP는 무제한 커스텀 도구를 추가할 수 있게 하여 Roo Code의 기능을 확장합니다. 외부 API와 통합하고, 데이터베이스에 연결하거나, 특수한 개발 도구를 만들 수 있으며 - MCP는 사용자의 특정 요구를 충족하기 위해 Roo Code의 기능을 확장하는 프레임워크를 제공합니다.
+
+### 사용자 정의
+
+다음과 같은 방법으로 Roo Code를 원하는 방식으로 작동하게 할 수 있습니다:
+
+- 개인화된 동작을 위한 [커스텀 명령](https://docs.roocode.com/advanced-usage/custom-instructions)
+- 특수 작업을 위한 [커스텀 모드](https://docs.roocode.com/advanced-usage/custom-modes)
+- 오프라인 사용을 위한 [로컬 모델](https://docs.roocode.com/advanced-usage/local-models)
+- 더 빠른 워크플로우를 위한 [자동 승인 설정](https://docs.roocode.com/advanced-usage/auto-approving-actions)
+
+## 리소스
+
+### 문서
+
+- [기본 사용 가이드](https://docs.roocode.com/basic-usage/the-chat-interface)
+- [고급 기능](https://docs.roocode.com/advanced-usage/auto-approving-actions)
+- [자주 묻는 질문](https://docs.roocode.com/faq)
+
+### 커뮤니티
+
+- **Discord:** 실시간 도움과 토론을 위한 [Discord 서버 참여](https://discord.gg/roocode)
+- **Reddit:** 경험과 팁을 공유하는 [서브레딧 방문](https://www.reddit.com/r/RooCode)
+- **GitHub:** [문제 보고](https://github.com/RooVetGit/Roo-Code/issues) 또는 [기능 요청](https://github.com/RooVetGit/Roo-Code/discussions/categories/feature-requests?discussions_q=is%3Aopen+category%3A%22Feature+Requests%22+sort%3Atop)
+
+---
+
+## 로컬 설정 및 개발
+
+1. 저장소 **클론**:
+
+```sh
+git clone https://github.com/RooVetGit/Roo-Code.git
+```
+
+2. **의존성 설치**:
+
+```sh
+npm run install:all
+```
+
+3. **웹뷰 시작(HMR이 있는 Vite/React 앱)**:
+
+```sh
+npm run dev
+```
+
+4. **디버깅**:
+   VSCode에서 `F5`를 누르거나(**실행** → **디버깅 시작**) Roo Code가 로드된 새 세션을 엽니다.
+
+웹뷰의 변경 사항은 즉시 나타납니다. 코어 확장에 대한 변경 사항은 확장 호스트를 다시 시작해야 합니다.
+
+또는 .vsix를 빌드하고 VSCode에 직접 설치할 수 있습니다:
+
+```sh
+npm run build
+```
+
+`bin/` 디렉토리에 `.vsix` 파일이 나타나며 다음 명령으로 설치할 수 있습니다:
+
+```sh
+code --install-extension bin/roo-cline-<version>.vsix
+```
+
+버전 관리 및 게시를 위해 [changesets](https://github.com/changesets/changesets)를 사용합니다. 릴리스 노트는 `CHANGELOG.md`를 확인하세요.
+
+---
+
+## 면책 조항
+
+**참고하세요** Roo Veterinary, Inc는 Roo Code와 관련하여 제공되거나 사용 가능한 모든 코드, 모델 또는 기타 도구, 관련 타사 도구 또는 결과 출력물에 대해 **어떠한** 진술이나 보증도 하지 **않습니다**. 이러한 도구나 출력물 사용과 관련된 **모든 위험**을 감수합니다; 이러한 도구는 **"있는 그대로"** 및 **"사용 가능한 대로"** 제공됩니다. 이러한 위험에는 지적 재산권 침해, 사이버 취약성 또는 공격, 편향, 부정확성, 오류, 결함, 바이러스, 다운타임, 재산 손실 또는 손상 및/또는 개인 상해가 포함될 수 있습니다(단, 이에 국한되지 않음). 귀하는 이러한 도구나 출력물 사용에 대해 전적으로 책임을 집니다(합법성, 적절성 및 결과를 포함하되 이에 국한되지 않음).
+
+---
+
+## 기여
+
+우리는 커뮤니티 기여를 환영합니다! [CONTRIBUTING.md](CONTRIBUTING.md)를 읽고 시작하세요.
+
+---
+
+## 기여자
+
+Roo Code를 더 좋게 만드는 데 도움을 준 모든 기여자에게 감사드립니다!
+
+<!-- START CONTRIBUTORS SECTION - AUTO-GENERATED, DO NOT EDIT MANUALLY -->
+
+|               <a href="https://github.com/mrubens"><img src="https://avatars.githubusercontent.com/u/2600?v=4" width="100" height="100" alt="mrubens"/><br /><sub><b>mrubens</b></sub></a>               |         <a href="https://github.com/saoudrizwan"><img src="https://avatars.githubusercontent.com/u/7799382?v=4" width="100" height="100" alt="saoudrizwan"/><br /><sub><b>saoudrizwan</b></sub></a>         |                   <a href="https://github.com/cte"><img src="https://avatars.githubusercontent.com/u/16332?v=4" width="100" height="100" alt="cte"/><br /><sub><b>cte</b></sub></a>                    |          <a href="https://github.com/samhvw8"><img src="https://avatars.githubusercontent.com/u/12538214?v=4" width="100" height="100" alt="samhvw8"/><br /><sub><b>samhvw8</b></sub></a>           |    <a href="https://github.com/daniel-lxs"><img src="https://avatars.githubusercontent.com/u/57051444?v=4" width="100" height="100" alt="daniel-lxs"/><br /><sub><b>daniel-lxs</b></sub></a>    |                   <a href="https://github.com/a8trejo"><img src="https://avatars.githubusercontent.com/u/62401433?v=4" width="100" height="100" alt="a8trejo"/><br /><sub><b>a8trejo</b></sub></a>                    |
+| :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
+|        <a href="https://github.com/ColemanRoo"><img src="https://avatars.githubusercontent.com/u/117104599?v=4" width="100" height="100" alt="ColemanRoo"/><br /><sub><b>ColemanRoo</b></sub></a>        |             <a href="https://github.com/stea9499"><img src="https://avatars.githubusercontent.com/u/4163795?v=4" width="100" height="100" alt="stea9499"/><br /><sub><b>stea9499</b></sub></a>              |     <a href="https://github.com/joemanley201"><img src="https://avatars.githubusercontent.com/u/8299960?v=4" width="100" height="100" alt="joemanley201"/><br /><sub><b>joemanley201</b></sub></a>     |       <a href="https://github.com/System233"><img src="https://avatars.githubusercontent.com/u/20336040?v=4" width="100" height="100" alt="System233"/><br /><sub><b>System233</b></sub></a>        |       <a href="https://github.com/jquanton"><img src="https://avatars.githubusercontent.com/u/88576563?v=4" width="100" height="100" alt="jquanton"/><br /><sub><b>jquanton</b></sub></a>       |              <a href="https://github.com/nissa-seru"><img src="https://avatars.githubusercontent.com/u/119150866?v=4" width="100" height="100" alt="nissa-seru"/><br /><sub><b>nissa-seru</b></sub></a>               |
+|    <a href="https://github.com/hannesrudolph"><img src="https://avatars.githubusercontent.com/u/49103247?v=4" width="100" height="100" alt="hannesrudolph"/><br /><sub><b>hannesrudolph</b></sub></a>    |             <a href="https://github.com/MuriloFP"><img src="https://avatars.githubusercontent.com/u/50873657?v=4" width="100" height="100" alt="MuriloFP"/><br /><sub><b>MuriloFP</b></sub></a>             |             <a href="https://github.com/NyxJae"><img src="https://avatars.githubusercontent.com/u/52313587?v=4" width="100" height="100" alt="NyxJae"/><br /><sub><b>NyxJae</b></sub></a>              |        <a href="https://github.com/punkpeye"><img src="https://avatars.githubusercontent.com/u/108313943?v=4" width="100" height="100" alt="punkpeye"/><br /><sub><b>punkpeye</b></sub></a>         |            <a href="https://github.com/d-oit"><img src="https://avatars.githubusercontent.com/u/6849456?v=4" width="100" height="100" alt="d-oit"/><br /><sub><b>d-oit</b></sub></a>            |            <a href="https://github.com/monotykamary"><img src="https://avatars.githubusercontent.com/u/1130103?v=4" width="100" height="100" alt="monotykamary"/><br /><sub><b>monotykamary</b></sub></a>             |
+|         <a href="https://github.com/lloydchang"><img src="https://avatars.githubusercontent.com/u/1329685?v=4" width="100" height="100" alt="lloydchang"/><br /><sub><b>lloydchang</b></sub></a>         | <a href="https://github.com/vigneshsubbiah16"><img src="https://avatars.githubusercontent.com/u/51325334?v=4" width="100" height="100" alt="vigneshsubbiah16"/><br /><sub><b>vigneshsubbiah16</b></sub></a> |            <a href="https://github.com/Szpadel"><img src="https://avatars.githubusercontent.com/u/1857251?v=4" width="100" height="100" alt="Szpadel"/><br /><sub><b>Szpadel</b></sub></a>             |       <a href="https://github.com/lupuletic"><img src="https://avatars.githubusercontent.com/u/105351510?v=4" width="100" height="100" alt="lupuletic"/><br /><sub><b>lupuletic</b></sub></a>       |        <a href="https://github.com/cannuri"><img src="https://avatars.githubusercontent.com/u/91494156?v=4" width="100" height="100" alt="cannuri"/><br /><sub><b>cannuri</b></sub></a>         | <a href="https://github.com/Smartsheet-JB-Brown"><img src="https://avatars.githubusercontent.com/u/171734120?v=4" width="100" height="100" alt="Smartsheet-JB-Brown"/><br /><sub><b>Smartsheet-JB-Brown</b></sub></a> |
+|           <a href="https://github.com/Premshay"><img src="https://avatars.githubusercontent.com/u/28099628?v=4" width="100" height="100" alt="Premshay"/><br /><sub><b>Premshay</b></sub></a>            |              <a href="https://github.com/psv2522"><img src="https://avatars.githubusercontent.com/u/87223770?v=4" width="100" height="100" alt="psv2522"/><br /><sub><b>psv2522</b></sub></a>               |      <a href="https://github.com/olweraltuve"><img src="https://avatars.githubusercontent.com/u/39308405?v=4" width="100" height="100" alt="olweraltuve"/><br /><sub><b>olweraltuve</b></sub></a>      |       <a href="https://github.com/RaySinner"><img src="https://avatars.githubusercontent.com/u/118297374?v=4" width="100" height="100" alt="RaySinner"/><br /><sub><b>RaySinner</b></sub></a>       |            <a href="https://github.com/qdaxb"><img src="https://avatars.githubusercontent.com/u/4157870?v=4" width="100" height="100" alt="qdaxb"/><br /><sub><b>qdaxb</b></sub></a>            |                <a href="https://github.com/feifei325"><img src="https://avatars.githubusercontent.com/u/46489071?v=4" width="100" height="100" alt="feifei325"/><br /><sub><b>feifei325</b></sub></a>                 |
+|      <a href="https://github.com/afshawnlotfi"><img src="https://avatars.githubusercontent.com/u/6283745?v=4" width="100" height="100" alt="afshawnlotfi"/><br /><sub><b>afshawnlotfi</b></sub></a>      |              <a href="https://github.com/emshvac"><img src="https://avatars.githubusercontent.com/u/121588911?v=4" width="100" height="100" alt="emshvac"/><br /><sub><b>emshvac</b></sub></a>              |         <a href="https://github.com/Lunchb0ne"><img src="https://avatars.githubusercontent.com/u/22198661?v=4" width="100" height="100" alt="Lunchb0ne"/><br /><sub><b>Lunchb0ne</b></sub></a>         |             <a href="https://github.com/sammcj"><img src="https://avatars.githubusercontent.com/u/862951?v=4" width="100" height="100" alt="sammcj"/><br /><sub><b>sammcj</b></sub></a>             |       <a href="https://github.com/dtrugman"><img src="https://avatars.githubusercontent.com/u/2451669?v=4" width="100" height="100" alt="dtrugman"/><br /><sub><b>dtrugman</b></sub></a>        |                 <a href="https://github.com/aitoroses"><img src="https://avatars.githubusercontent.com/u/1699368?v=4" width="100" height="100" alt="aitoroses"/><br /><sub><b>aitoroses</b></sub></a>                 |
+|           <a href="https://github.com/yt3trees"><img src="https://avatars.githubusercontent.com/u/57471763?v=4" width="100" height="100" alt="yt3trees"/><br /><sub><b>yt3trees</b></sub></a>            |              <a href="https://github.com/yongjer"><img src="https://avatars.githubusercontent.com/u/54315206?v=4" width="100" height="100" alt="yongjer"/><br /><sub><b>yongjer</b></sub></a>               |      <a href="https://github.com/vincentsong"><img src="https://avatars.githubusercontent.com/u/2343574?v=4" width="100" height="100" alt="vincentsong"/><br /><sub><b>vincentsong</b></sub></a>       | <a href="https://github.com/pugazhendhi-m"><img src="https://avatars.githubusercontent.com/u/132246623?v=4" width="100" height="100" alt="pugazhendhi-m"/><br /><sub><b>pugazhendhi-m</b></sub></a> |           <a href="https://github.com/eonghk"><img src="https://avatars.githubusercontent.com/u/139964?v=4" width="100" height="100" alt="eonghk"/><br /><sub><b>eonghk</b></sub></a>           |                  <a href="https://github.com/philfung"><img src="https://avatars.githubusercontent.com/u/1054593?v=4" width="100" height="100" alt="philfung"/><br /><sub><b>philfung</b></sub></a>                   |
+|               <a href="https://github.com/pdecat"><img src="https://avatars.githubusercontent.com/u/318490?v=4" width="100" height="100" alt="pdecat"/><br /><sub><b>pdecat</b></sub></a>                |                <a href="https://github.com/napter"><img src="https://avatars.githubusercontent.com/u/6260841?v=4" width="100" height="100" alt="napter"/><br /><sub><b>napter</b></sub></a>                 |                    <a href="https://github.com/mdp"><img src="https://avatars.githubusercontent.com/u/2868?v=4" width="100" height="100" alt="mdp"/><br /><sub><b>mdp</b></sub></a>                    |            <a href="https://github.com/jcbdev"><img src="https://avatars.githubusercontent.com/u/17152092?v=4" width="100" height="100" alt="jcbdev"/><br /><sub><b>jcbdev</b></sub></a>            |      <a href="https://github.com/benzntech"><img src="https://avatars.githubusercontent.com/u/4044180?v=4" width="100" height="100" alt="benzntech"/><br /><sub><b>benzntech</b></sub></a>      |              <a href="https://github.com/anton-otee"><img src="https://avatars.githubusercontent.com/u/149477749?v=4" width="100" height="100" alt="anton-otee"/><br /><sub><b>anton-otee</b></sub></a>               |
+|             <a href="https://github.com/AMHesch"><img src="https://avatars.githubusercontent.com/u/4777192?v=4" width="100" height="100" alt="AMHesch"/><br /><sub><b>AMHesch</b></sub></a>              |              <a href="https://github.com/bannzai"><img src="https://avatars.githubusercontent.com/u/10897361?v=4" width="100" height="100" alt="bannzai"/><br /><sub><b>bannzai</b></sub></a>               |           <a href="https://github.com/dairui1"><img src="https://avatars.githubusercontent.com/u/183250644?v=4" width="100" height="100" alt="dairui1"/><br /><sub><b>dairui1</b></sub></a>            |           <a href="https://github.com/dqroid"><img src="https://avatars.githubusercontent.com/u/192424994?v=4" width="100" height="100" alt="dqroid"/><br /><sub><b>dqroid</b></sub></a>            |      <a href="https://github.com/kinandan"><img src="https://avatars.githubusercontent.com/u/186135699?v=4" width="100" height="100" alt="kinandan"/><br /><sub><b>kinandan</b></sub></a>       |                       <a href="https://github.com/kohii"><img src="https://avatars.githubusercontent.com/u/6891780?v=4" width="100" height="100" alt="kohii"/><br /><sub><b>kohii</b></sub></a>                       |
+|       <a href="https://github.com/lightrabbit"><img src="https://avatars.githubusercontent.com/u/1521765?v=4" width="100" height="100" alt="lightrabbit"/><br /><sub><b>lightrabbit</b></sub></a>        |                   <a href="https://github.com/olup"><img src="https://avatars.githubusercontent.com/u/13785588?v=4" width="100" height="100" alt="olup"/><br /><sub><b>olup</b></sub></a>                   |      <a href="https://github.com/moqimoqidea"><img src="https://avatars.githubusercontent.com/u/39821951?v=4" width="100" height="100" alt="moqimoqidea"/><br /><sub><b>moqimoqidea</b></sub></a>      |        <a href="https://github.com/mosleyit"><img src="https://avatars.githubusercontent.com/u/189396442?v=4" width="100" height="100" alt="mosleyit"/><br /><sub><b>mosleyit</b></sub></a>         |       <a href="https://github.com/oprstchn"><img src="https://avatars.githubusercontent.com/u/16177972?v=4" width="100" height="100" alt="oprstchn"/><br /><sub><b>oprstchn</b></sub></a>       |               <a href="https://github.com/philipnext"><img src="https://avatars.githubusercontent.com/u/81944499?v=4" width="100" height="100" alt="philipnext"/><br /><sub><b>philipnext</b></sub></a>               |
+|      <a href="https://github.com/refactorthis"><img src="https://avatars.githubusercontent.com/u/3012240?v=4" width="100" height="100" alt="refactorthis"/><br /><sub><b>refactorthis</b></sub></a>      |      <a href="https://github.com/samir-nimbly"><img src="https://avatars.githubusercontent.com/u/112695483?v=4" width="100" height="100" alt="samir-nimbly"/><br /><sub><b>samir-nimbly</b></sub></a>       |              <a href="https://github.com/shaybc"><img src="https://avatars.githubusercontent.com/u/8535905?v=4" width="100" height="100" alt="shaybc"/><br /><sub><b>shaybc</b></sub></a>              |   <a href="https://github.com/shohei-ihaya"><img src="https://avatars.githubusercontent.com/u/25131938?v=4" width="100" height="100" alt="shohei-ihaya"/><br /><sub><b>shohei-ihaya</b></sub></a>   | <a href="https://github.com/student20880"><img src="https://avatars.githubusercontent.com/u/74263488?v=4" width="100" height="100" alt="student20880"/><br /><sub><b>student20880</b></sub></a> |          <a href="https://github.com/PretzelVector"><img src="https://avatars.githubusercontent.com/u/95664360?v=4" width="100" height="100" alt="PretzelVector"/><br /><sub><b>PretzelVector</b></sub></a>           |
+|       <a href="https://github.com/adamwlarson"><img src="https://avatars.githubusercontent.com/u/1392315?v=4" width="100" height="100" alt="adamwlarson"/><br /><sub><b>adamwlarson</b></sub></a>        |                <a href="https://github.com/alarno"><img src="https://avatars.githubusercontent.com/u/4355547?v=4" width="100" height="100" alt="alarno"/><br /><sub><b>alarno</b></sub></a>                 | <a href="https://github.com/andreastempsch"><img src="https://avatars.githubusercontent.com/u/117991125?v=4" width="100" height="100" alt="andreastempsch"/><br /><sub><b>andreastempsch</b></sub></a> |          <a href="https://github.com/Atlogit"><img src="https://avatars.githubusercontent.com/u/86947554?v=4" width="100" height="100" alt="Atlogit"/><br /><sub><b>Atlogit</b></sub></a>           |            <a href="https://github.com/dleen"><img src="https://avatars.githubusercontent.com/u/1297964?v=4" width="100" height="100" alt="dleen"/><br /><sub><b>dleen</b></sub></a>            |                 <a href="https://github.com/dbasclpy"><img src="https://avatars.githubusercontent.com/u/139889137?v=4" width="100" height="100" alt="dbasclpy"/><br /><sub><b>dbasclpy</b></sub></a>                  |
+| <a href="https://github.com/celestial-vault"><img src="https://avatars.githubusercontent.com/u/58194240?v=4" width="100" height="100" alt="celestial-vault"/><br /><sub><b>celestial-vault</b></sub></a> |           <a href="https://github.com/DeXtroTip"><img src="https://avatars.githubusercontent.com/u/21011087?v=4" width="100" height="100" alt="DeXtroTip"/><br /><sub><b>DeXtroTip</b></sub></a>            |              <a href="https://github.com/hesara"><img src="https://avatars.githubusercontent.com/u/1335918?v=4" width="100" height="100" alt="hesara"/><br /><sub><b>hesara</b></sub></a>              |       <a href="https://github.com/eltociear"><img src="https://avatars.githubusercontent.com/u/22633385?v=4" width="100" height="100" alt="eltociear"/><br /><sub><b>eltociear</b></sub></a>        | <a href="https://github.com/libertyteeth"><img src="https://avatars.githubusercontent.com/u/32841567?v=4" width="100" height="100" alt="libertyteeth"/><br /><sub><b>libertyteeth</b></sub></a> |           <a href="https://github.com/mamertofabian"><img src="https://avatars.githubusercontent.com/u/7698436?v=4" width="100" height="100" alt="mamertofabian"/><br /><sub><b>mamertofabian</b></sub></a>           |
+|     <a href="https://github.com/marvijo-code"><img src="https://avatars.githubusercontent.com/u/82562019?v=4" width="100" height="100" alt="marvijo-code"/><br /><sub><b>marvijo-code</b></sub></a>      |                  <a href="https://github.com/Sarke"><img src="https://avatars.githubusercontent.com/u/2719310?v=4" width="100" height="100" alt="Sarke"/><br /><sub><b>Sarke</b></sub></a>                  |               <a href="https://github.com/tgfjt"><img src="https://avatars.githubusercontent.com/u/2628239?v=4" width="100" height="100" alt="tgfjt"/><br /><sub><b>tgfjt</b></sub></a>                |       <a href="https://github.com/vladstudio"><img src="https://avatars.githubusercontent.com/u/914320?v=4" width="100" height="100" alt="vladstudio"/><br /><sub><b>vladstudio</b></sub></a>       |          <a href="https://github.com/ashktn"><img src="https://avatars.githubusercontent.com/u/6723913?v=4" width="100" height="100" alt="ashktn"/><br /><sub><b>ashktn</b></sub></a>           |                                                                                                                                                                                                                       |
+
+<!-- END CONTRIBUTORS SECTION -->
+
+## 라이선스
+
+[Apache 2.0 © 2025 Roo Veterinary, Inc.](../LICENSE)
+
+---
+
+**Roo Code를 즐기세요!** 짧은 목줄에 묶어두든 자율적으로 돌아다니게 하든, 여러분이 무엇을 만들지 기대됩니다. 질문이나 기능 아이디어가 있으시면 [Reddit 커뮤니티](https://www.reddit.com/r/RooCode/) 또는 [Discord](https://discord.gg/roocode)를 방문해 주세요. 행복한 코딩 되세요!

+ 77 - 0
locales/pl/CODE_OF_CONDUCT.md

@@ -0,0 +1,77 @@
+# Kodeks Postępowania Covenant Współtwórców
+
+## Nasze Zobowiązanie
+
+W interesie wspierania otwartego i przyjaznego środowiska, my jako
+współtwórcy i opiekunowie zobowiązujemy się uczynić uczestnictwo w naszym projekcie i
+naszej społeczności doświadczeniem wolnym od nękania dla wszystkich, niezależnie od wieku, rozmiaru
+ciała, niepełnosprawności, pochodzenia etnicznego, cech płciowych, tożsamości i ekspresji płciowej,
+poziomu doświadczenia, wykształcenia, statusu społeczno-ekonomicznego, narodowości, wyglądu
+osobistego, rasy, religii lub tożsamości i orientacji seksualnej.
+
+## Nasze Standardy
+
+Przykłady zachowań, które przyczyniają się do tworzenia pozytywnego środowiska
+obejmują:
+
+- Używanie przyjaznego i inkluzywnego języka
+- Szanowanie różnych punktów widzenia i doświadczeń
+- Wdzięczne przyjmowanie konstruktywnej krytyki
+- Skupianie się na tym, co najlepsze dla społeczności
+- Okazywanie empatii wobec innych członków społeczności
+
+Przykłady niedopuszczalnego zachowania uczestników obejmują:
+
+- Używanie języka lub obrazów o charakterze seksualnym oraz niepożądana uwaga lub
+  zaloty seksualne
+- Trolling, obraźliwe/poniżające komentarze i ataki personalne lub polityczne
+- Publiczne lub prywatne nękanie
+- Publikowanie prywatnych informacji innych osób, takich jak fizyczny lub elektroniczny
+  adres, bez wyraźnej zgody
+- Inne zachowania, które mogłyby zostać uznane za nieodpowiednie w
+  środowisku profesjonalnym
+
+## Nasze Obowiązki
+
+Opiekunowie projektu są odpowiedzialni za wyjaśnianie standardów akceptowalnego
+zachowania i oczekuje się od nich podjęcia odpowiednich i sprawiedliwych działań naprawczych w
+odpowiedzi na wszelkie przypadki niedopuszczalnego zachowania.
+
+Opiekunowie projektu mają prawo i obowiązek usuwać, edytować lub
+odrzucać komentarze, commity, kod, edycje wiki, problemy i inne wkłady
+które nie są zgodne z niniejszym Kodeksem Postępowania, lub tymczasowo lub
+na stałe zablokować każdego współtwórcę za inne zachowania, które uznają za nieodpowiednie,
+zagrażające, obraźliwe lub szkodliwe.
+
+## Zakres
+
+Ten Kodeks Postępowania ma zastosowanie zarówno w przestrzeniach projektu, jak i w przestrzeniach publicznych
+gdy osoba reprezentuje projekt lub jego społeczność. Przykłady
+reprezentowania projektu lub społeczności obejmują używanie oficjalnego adresu e-mail projektu,
+publikowanie za pośrednictwem oficjalnego konta w mediach społecznościowych lub działanie jako wyznaczony
+przedstawiciel na wydarzeniu online lub offline. Reprezentacja projektu może być
+dalej definiowana i wyjaśniana przez opiekunów projektu.
+
+## Egzekwowanie
+
+Przypadki obraźliwego, nękającego lub w inny sposób niedopuszczalnego zachowania mogą być
+zgłaszane poprzez kontakt z zespołem projektu pod adresem [email protected]. Wszystkie skargi
+zostaną przejrzane i zbadane, co zaowocuje odpowiedzią, która
+zostanie uznana za niezbędną i odpowiednią do okoliczności. Zespół projektu jest
+zobowiązany do zachowania poufności w odniesieniu do zgłaszającego incydent.
+Dalsze szczegóły dotyczące konkretnych polityk egzekwowania mogą być publikowane osobno.
+
+Opiekunowie projektu, którzy nie przestrzegają lub nie egzekwują Kodeksu Postępowania w dobrej
+wierze, mogą stanąć w obliczu tymczasowych lub trwałych reperkusji określonych przez innych
+członków kierownictwa projektu.
+
+## Atrybucja
+
+Niniejszy Kodeks Postępowania jest adaptacją [wersji Cline][cline_coc] [Covenant Współtwórców][homepage], wersja 1.4,
+dostępnej pod adresem https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
+
+[cline_coc]: https://github.com/cline/cline/blob/main/CODE_OF_CONDUCT.md
+[homepage]: https://www.contributor-covenant.org
+
+Odpowiedzi na często zadawane pytania dotyczące tego kodeksu postępowania można znaleźć pod adresem
+https://www.contributor-covenant.org/faq

+ 112 - 0
locales/pl/CONTRIBUTING.md

@@ -0,0 +1,112 @@
+# Wkład w Roo Code
+
+Cieszymy się, że jesteś zainteresowany wniesieniem wkładu do Roo Code. Czy naprawiasz błąd, dodajesz funkcję, czy ulepszasz naszą dokumentację, każdy wkład sprawia, że Roo Code staje się mądrzejszy! Aby utrzymać naszą społeczność żywą i przyjazną, wszyscy członkowie muszą przestrzegać naszego [Kodeksu Postępowania](CODE_OF_CONDUCT.md).
+
+## Dołącz do naszej społeczności
+
+Gorąco zachęcamy wszystkich współtwórców do dołączenia do naszej [społeczności Discord](https://discord.gg/roocode)! Bycie częścią naszego serwera Discord pomaga:
+
+- Uzyskać pomoc i wskazówki w czasie rzeczywistym dotyczące Twoich wkładów
+- Połączyć się z innymi współtwórcami i członkami głównego zespołu
+- Być na bieżąco z rozwojem projektu i jego priorytetami
+- Uczestniczyć w dyskusjach, które kształtują przyszłość Roo Code
+- Znaleźć możliwości współpracy z innymi programistami
+
+## Zgłaszanie błędów lub problemów
+
+Raporty o błędach pomagają ulepszyć Roo Code dla wszystkich! Przed utworzeniem nowego zgłoszenia, proszę [przeszukaj istniejące](https://github.com/RooVetGit/Roo-Code/issues), aby uniknąć duplikatów. Kiedy jesteś gotowy, aby zgłosić błąd, przejdź do naszej [strony zgłoszeń](https://github.com/RooVetGit/Roo-Code/issues/new/choose), gdzie znajdziesz szablon, który pomoże Ci wypełnić odpowiednie informacje.
+
+<blockquote class='warning-note'>
+     🔐 <b>Ważne:</b> Jeśli odkryjesz lukę w zabezpieczeniach, proszę użyj <a href="https://github.com/RooVetGit/Roo-Code/security/advisories/new">narzędzia bezpieczeństwa Github, aby zgłosić ją prywatnie</a>.
+</blockquote>
+
+## Decydowanie nad czym pracować
+
+Szukasz dobrego pierwszego wkładu? Sprawdź problemy w sekcji "Issue [Unassigned]" naszego [projektu Github Roo Code](https://github.com/orgs/RooVetGit/projects/1). Te zostały specjalnie wybrane dla nowych współtwórców i obszarów, gdzie chętnie przyjmiemy pomoc!
+
+Cieszymy się również z wkładu do naszej [dokumentacji](https://docs.roocode.com/)! Czy to poprawianie literówek, ulepszanie istniejących przewodników, czy tworzenie nowych treści edukacyjnych - chcielibyśmy zbudować repozytorium zasobów napędzane przez społeczność, które pomaga każdemu czerpać maksimum z Roo Code. Możesz kliknąć "Edit this page" na dowolnej stronie, aby szybko przejść do odpowiedniego miejsca w Github, aby edytować plik, lub możesz przejść bezpośrednio do https://github.com/RooVetGit/Roo-Code-Docs.
+
+Jeśli planujesz pracować nad większą funkcją, proszę najpierw utwórz [prośbę o funkcję](https://github.com/RooVetGit/Roo-Code/discussions/categories/feature-requests?discussions_q=is%3Aopen+category%3A%22Feature+Requests%22+sort%3Atop), abyśmy mogli przedyskutować, czy jest ona zgodna z wizją Roo Code.
+
+## Konfiguracja rozwojowa
+
+1. **Sklonuj** repozytorium:
+
+```sh
+git clone https://github.com/RooVetGit/Roo-Code.git
+```
+
+2. **Zainstaluj zależności**:
+
+```sh
+npm run install:all
+```
+
+3. **Uruchom webview (aplikację Vite/React z HMR)**:
+
+```sh
+npm run dev
+```
+
+4. **Debugowanie**:
+   Naciśnij `F5` (lub **Uruchom** → **Rozpocznij debugowanie**) w VSCode, aby otworzyć nową sesję z załadowanym Roo Code.
+
+Zmiany w webview pojawią się natychmiast. Zmiany w podstawowym rozszerzeniu będą wymagać ponownego uruchomienia hosta rozszerzenia.
+
+Alternatywnie możesz zbudować plik .vsix i zainstalować go bezpośrednio w VSCode:
+
+```sh
+npm run build
+```
+
+Plik `.vsix` pojawi się w katalogu `bin/` i można go zainstalować za pomocą:
+
+```sh
+code --install-extension bin/roo-cline-<version>.vsix
+```
+
+## Pisanie i przesyłanie kodu
+
+Każdy może wnieść wkład w kod Roo Code, ale prosimy o przestrzeganie tych wytycznych, aby zapewnić płynną integrację Twoich wkładów:
+
+1. **Utrzymuj Pull Requesty skupione**
+
+    - Ogranicz PR do jednej funkcji lub naprawy błędu
+    - Podziel większe zmiany na mniejsze, powiązane PR
+    - Podziel zmiany na logiczne commity, które można przeglądać niezależnie
+
+2. **Jakość kodu**
+
+    - Wszystkie PR muszą przejść kontrole CI, które obejmują zarówno linting, jak i formatowanie
+    - Rozwiąż wszelkie ostrzeżenia lub błędy ESLint przed przesłaniem
+    - Odpowiedz na wszystkie informacje zwrotne od Ellipsis, naszego zautomatyzowanego narzędzia do przeglądu kodu
+    - Przestrzegaj najlepszych praktyk TypeScript i zachowaj bezpieczeństwo typów
+
+3. **Testowanie**
+
+    - Dodaj testy dla nowych funkcji
+    - Uruchom `npm test`, aby upewnić się, że wszystkie testy przechodzą
+    - Zaktualizuj istniejące testy, jeśli Twoje zmiany na nie wpływają
+    - Uwzględnij zarówno testy jednostkowe, jak i integracyjne, gdy jest to właściwe
+
+4. **Wytyczne dotyczące commitów**
+
+    - Pisz jasne, opisowe komunikaty commitów
+    - Odwołuj się do odpowiednich problemów w commitach, używając #numer-problemu
+
+5. **Przed przesłaniem**
+
+    - Rebase swojej gałęzi na najnowszego maina
+    - Upewnij się, że Twoja gałąź buduje się pomyślnie
+    - Sprawdź ponownie, czy wszystkie testy przechodzą
+    - Przejrzyj swoje zmiany pod kątem wszelkiego kodu debugującego lub logów konsoli
+
+6. **Opis Pull Requesta**
+    - Jasno opisz, co robią Twoje zmiany
+    - Dołącz kroki do przetestowania zmian
+    - Wymień wszelkie istotne zmiany
+    - Dodaj zrzuty ekranu dla zmian UI
+
+## Umowa o współpracy
+
+Przesyłając pull request, zgadzasz się, że Twoje wkłady będą licencjonowane na tej samej licencji co projekt ([Apache 2.0](../LICENSE)).

+ 211 - 0
locales/pl/README.md

@@ -0,0 +1,211 @@
+<div align="center">
+<sub>
+
+[English](../../README.md) • [Català](../../locales/ca/README.md) • [Deutsch](../../locales/de/README.md) • [Español](../../locales/es/README.md) • [Français](../../locales/fr/README.md) • [हिन्दी](../../locales/hi/README.md) • [Italiano](../../locales/it/README.md)
+
+</sub>
+<sub>
+
+[日本語](../../locales/ja/README.md) • [한국어](../../locales/ko/README.md) • Polski • [Português (BR)](../../locales/pt-BR/README.md) • [Türkçe](../../locales/tr/README.md) • [Tiếng Việt](../../locales/vi/README.md) • [简体中文](../../locales/zh-CN/README.md) • [繁體中文](../../locales/zh-TW/README.md)
+
+</sub>
+</div>
+<br>
+<div align="center">
+  <h2>Dołącz do społeczności Roo Code</h2>
+  <p>Połącz się z programistami, wnieś swoje pomysły i bądź na bieżąco z najnowszymi narzędziami do kodowania opartymi na AI.</p>
+  
+  <a href="https://discord.gg/roocode" target="_blank"><img src="https://img.shields.io/badge/Dołącz%20do%20Discord-5865F2?style=for-the-badge&logo=discord&logoColor=white" alt="Dołącz do Discord"></a>
+  <a href="https://www.reddit.com/r/RooCode/" target="_blank"><img src="https://img.shields.io/badge/Dołącz%20do%20Reddit-FF4500?style=for-the-badge&logo=reddit&logoColor=white" alt="Dołącz do Reddit"></a>
+  
+</div>
+<br>
+<br>
+
+<div align="center">
+<h1>Roo Code (wcześniej Roo Cline)</h1>
+
+<a href="https://marketplace.visualstudio.com/items?itemName=RooVeterinaryInc.roo-cline" target="_blank"><img src="https://img.shields.io/badge/Pobierz%20z%20VS%20Marketplace-blue?style=for-the-badge&logo=visualstudiocode&logoColor=white" alt="Pobierz z VS Marketplace"></a>
+<a href="https://github.com/RooVetGit/Roo-Code/discussions/categories/feature-requests?discussions_q=is%3Aopen+category%3A%22Feature+Requests%22+sort%3Atop" target="_blank"><img src="https://img.shields.io/badge/Prośby%20o%20funkcje-yellow?style=for-the-badge" alt="Prośby o funkcje"></a>
+<a href="https://marketplace.visualstudio.com/items?itemName=RooVeterinaryInc.roo-cline&ssr=false#review-details" target="_blank"><img src="https://img.shields.io/badge/Oceń%20%26%20Zrecenzuj-green?style=for-the-badge" alt="Oceń & Zrecenzuj"></a>
+<a href="https://docs.roocode.com" target="_blank"><img src="https://img.shields.io/badge/Dokumentacja-6B46C1?style=for-the-badge&logo=readthedocs&logoColor=white" alt="Dokumentacja"></a>
+
+</div>
+
+**Roo Code** to napędzany przez AI **autonomiczny agent kodujący**, który funkcjonuje w Twoim edytorze. Potrafi:
+
+- Komunikować się w języku naturalnym
+- Czytać i zapisywać pliki bezpośrednio w Twoim workspace
+- Uruchamiać polecenia terminala
+- Automatyzować działania przeglądarki
+- Integrować się z dowolnym API/modelem kompatybilnym z OpenAI lub niestandardowym
+- Dostosowywać swoją "osobowość" i możliwości poprzez **Niestandardowe Tryby**
+
+Niezależnie od tego, czy szukasz elastycznego partnera do kodowania, architekta systemu, czy wyspecjalizowanych ról, takich jak inżynier QA lub menedżer produktu, Roo Code może pomóc Ci budować oprogramowanie efektywniej.
+
+Sprawdź [CHANGELOG](../CHANGELOG.md), aby uzyskać szczegółowe informacje o aktualizacjach i poprawkach.
+
+---
+
+## 🎉 Roo Code 3.8 został wydany
+
+Roo Code 3.8 jest już dostępny z ulepszeniami wydajności, nowymi funkcjami i poprawkami błędów.
+
+- Szybsze asynchroniczne punkty kontrolne
+- Wsparcie dla plików .rooignore
+- Rozwiązane problemy z terminalem i szarym ekranem
+- Roo Code może działać w wielu oknach
+- Eksperymentalna strategia edycji multi-diff
+- Komunikacja podzadania z zadaniem nadrzędnym
+- Zaktualizowany dostawca DeepSeek
+- Nowy dostawca "Human Relay"
+
+---
+
+## Co potrafi Roo Code?
+
+- 🚀 **Generować kod** na podstawie opisów w języku naturalnym
+- 🔧 **Refaktoryzować i debugować** istniejący kod
+- 📝 **Pisać i aktualizować** dokumentację
+- 🤔 **Odpowiadać na pytania** dotyczące Twojej bazy kodu
+- 🔄 **Automatyzować** powtarzalne zadania
+- 🏗️ **Tworzyć** nowe pliki i projekty
+
+## Szybki start
+
+1. [Zainstaluj Roo Code](https://docs.roocode.com/getting-started/installing)
+2. [Połącz swojego dostawcę AI](https://docs.roocode.com/getting-started/connecting-api-provider)
+3. [Wypróbuj swoje pierwsze zadanie](https://docs.roocode.com/getting-started/your-first-task)
+
+## Kluczowe funkcje
+
+### Wiele trybów
+
+Roo Code dostosowuje się do Twoich potrzeb za pomocą wyspecjalizowanych [trybów](https://docs.roocode.com/basic-usage/modes):
+
+- **Tryb Code:** Do ogólnych zadań kodowania
+- **Tryb Architect:** Do planowania i przywództwa technicznego
+- **Tryb Ask:** Do odpowiadania na pytania i dostarczania informacji
+- **Tryb Debug:** Do systematycznej diagnozy problemów
+- **[Niestandardowe tryby](https://docs.roocode.com/advanced-usage/custom-modes):** Twórz nieograniczoną liczbę wyspecjalizowanych person do audytów bezpieczeństwa, optymalizacji wydajności, dokumentacji lub dowolnych innych zadań
+
+### Inteligentne narzędzia
+
+Roo Code jest wyposażony w potężne [narzędzia](https://docs.roocode.com/basic-usage/using-tools), które mogą:
+
+- Czytać i zapisywać pliki w Twoim projekcie
+- Wykonywać polecenia w terminalu VS Code
+- Kontrolować przeglądarkę internetową
+- Korzystać z zewnętrznych narzędzi poprzez [MCP (Model Context Protocol)](https://docs.roocode.com/advanced-usage/mcp)
+
+MCP rozszerza możliwości Roo Code, umożliwiając dodawanie nieograniczonej liczby niestandardowych narzędzi. Integruj się z zewnętrznymi API, łącz z bazami danych lub twórz wyspecjalizowane narzędzia deweloperskie - MCP zapewnia framework, aby rozszerzyć funkcjonalność Roo Code w celu spełnienia Twoich specyficznych potrzeb.
+
+### Personalizacja
+
+Spraw, aby Roo Code działał po Twojemu za pomocą:
+
+- [Niestandardowych instrukcji](https://docs.roocode.com/advanced-usage/custom-instructions) dla spersonalizowanego zachowania
+- [Niestandardowych trybów](https://docs.roocode.com/advanced-usage/custom-modes) dla wyspecjalizowanych zadań
+- [Lokalnych modeli](https://docs.roocode.com/advanced-usage/local-models) do użytku offline
+- [Ustawień auto-zatwierdzania](https://docs.roocode.com/advanced-usage/auto-approving-actions) dla szybszych przepływów pracy
+
+## Zasoby
+
+### Dokumentacja
+
+- [Podstawowy przewodnik użytkowania](https://docs.roocode.com/basic-usage/the-chat-interface)
+- [Zaawansowane funkcje](https://docs.roocode.com/advanced-usage/auto-approving-actions)
+- [Często zadawane pytania](https://docs.roocode.com/faq)
+
+### Społeczność
+
+- **Discord:** [Dołącz do naszego serwera Discord](https://discord.gg/roocode), aby uzyskać pomoc w czasie rzeczywistym i dyskusje
+- **Reddit:** [Odwiedź nasz subreddit](https://www.reddit.com/r/RooCode), aby dzielić się doświadczeniami i wskazówkami
+- **GitHub:** [Zgłaszaj problemy](https://github.com/RooVetGit/Roo-Code/issues) lub [proś o funkcje](https://github.com/RooVetGit/Roo-Code/discussions/categories/feature-requests?discussions_q=is%3Aopen+category%3A%22Feature+Requests%22+sort%3Atop)
+
+---
+
+## Lokalna konfiguracja i rozwój
+
+1. **Sklonuj** repozytorium:
+
+```sh
+git clone https://github.com/RooVetGit/Roo-Code.git
+```
+
+2. **Zainstaluj zależności**:
+
+```sh
+npm run install:all
+```
+
+3. **Uruchom webview (aplikację Vite/React z HMR)**:
+
+```sh
+npm run dev
+```
+
+4. **Debugowanie**:
+   Naciśnij `F5` (lub **Uruchom** → **Rozpocznij debugowanie**) w VSCode, aby otworzyć nową sesję z załadowanym Roo Code.
+
+Zmiany w webview pojawią się natychmiast. Zmiany w podstawowym rozszerzeniu będą wymagać ponownego uruchomienia hosta rozszerzenia.
+
+Alternatywnie możesz zbudować plik .vsix i zainstalować go bezpośrednio w VSCode:
+
+```sh
+npm run build
+```
+
+Plik `.vsix` pojawi się w katalogu `bin/` i można go zainstalować za pomocą:
+
+```sh
+code --install-extension bin/roo-cline-<version>.vsix
+```
+
+Używamy [changesets](https://github.com/changesets/changesets) do wersjonowania i publikowania. Sprawdź nasz `CHANGELOG.md`, aby zobaczyć informacje o wydaniu.
+
+---
+
+## Zastrzeżenie
+
+**Uwaga** Roo Veterinary, Inc **nie** składa żadnych oświadczeń ani gwarancji dotyczących jakiegokolwiek kodu, modeli lub innych narzędzi dostarczonych lub udostępnionych w związku z Roo Code, jakichkolwiek powiązanych narzędzi stron trzecich lub jakichkolwiek wynikowych danych wyjściowych. Przyjmujesz na siebie **wszystkie ryzyka** związane z użytkowaniem takich narzędzi lub danych wyjściowych; takie narzędzia są dostarczane na zasadzie **"TAK JAK JEST"** i **"WEDŁUG DOSTĘPNOŚCI"**. Takie ryzyka mogą obejmować, bez ograniczeń, naruszenie własności intelektualnej, luki w zabezpieczeniach cybernetycznych lub ataki, uprzedzenia, niedokładności, błędy, wady, wirusy, przestoje, utratę lub uszkodzenie mienia i/lub obrażenia ciała. Ponosisz wyłączną odpowiedzialność za korzystanie z takich narzędzi lub danych wyjściowych (w tym, bez ograniczeń, ich legalność, stosowność i wyniki).
+
+---
+
+## Wkład
+
+Kochamy wkład społeczności! Zacznij od przeczytania naszego [CONTRIBUTING.md](CONTRIBUTING.md).
+
+---
+
+## Współtwórcy
+
+Dziękujemy wszystkim naszym współtwórcom, którzy pomogli ulepszyć Roo Code!
+
+<!-- START CONTRIBUTORS SECTION - AUTO-GENERATED, DO NOT EDIT MANUALLY -->
+
+|               <a href="https://github.com/mrubens"><img src="https://avatars.githubusercontent.com/u/2600?v=4" width="100" height="100" alt="mrubens"/><br /><sub><b>mrubens</b></sub></a>               |         <a href="https://github.com/saoudrizwan"><img src="https://avatars.githubusercontent.com/u/7799382?v=4" width="100" height="100" alt="saoudrizwan"/><br /><sub><b>saoudrizwan</b></sub></a>         |                   <a href="https://github.com/cte"><img src="https://avatars.githubusercontent.com/u/16332?v=4" width="100" height="100" alt="cte"/><br /><sub><b>cte</b></sub></a>                    |          <a href="https://github.com/samhvw8"><img src="https://avatars.githubusercontent.com/u/12538214?v=4" width="100" height="100" alt="samhvw8"/><br /><sub><b>samhvw8</b></sub></a>           |    <a href="https://github.com/daniel-lxs"><img src="https://avatars.githubusercontent.com/u/57051444?v=4" width="100" height="100" alt="daniel-lxs"/><br /><sub><b>daniel-lxs</b></sub></a>    |                   <a href="https://github.com/a8trejo"><img src="https://avatars.githubusercontent.com/u/62401433?v=4" width="100" height="100" alt="a8trejo"/><br /><sub><b>a8trejo</b></sub></a>                    |
+| :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
+|        <a href="https://github.com/ColemanRoo"><img src="https://avatars.githubusercontent.com/u/117104599?v=4" width="100" height="100" alt="ColemanRoo"/><br /><sub><b>ColemanRoo</b></sub></a>        |             <a href="https://github.com/stea9499"><img src="https://avatars.githubusercontent.com/u/4163795?v=4" width="100" height="100" alt="stea9499"/><br /><sub><b>stea9499</b></sub></a>              |     <a href="https://github.com/joemanley201"><img src="https://avatars.githubusercontent.com/u/8299960?v=4" width="100" height="100" alt="joemanley201"/><br /><sub><b>joemanley201</b></sub></a>     |       <a href="https://github.com/System233"><img src="https://avatars.githubusercontent.com/u/20336040?v=4" width="100" height="100" alt="System233"/><br /><sub><b>System233</b></sub></a>        |       <a href="https://github.com/jquanton"><img src="https://avatars.githubusercontent.com/u/88576563?v=4" width="100" height="100" alt="jquanton"/><br /><sub><b>jquanton</b></sub></a>       |              <a href="https://github.com/nissa-seru"><img src="https://avatars.githubusercontent.com/u/119150866?v=4" width="100" height="100" alt="nissa-seru"/><br /><sub><b>nissa-seru</b></sub></a>               |
+|    <a href="https://github.com/hannesrudolph"><img src="https://avatars.githubusercontent.com/u/49103247?v=4" width="100" height="100" alt="hannesrudolph"/><br /><sub><b>hannesrudolph</b></sub></a>    |             <a href="https://github.com/MuriloFP"><img src="https://avatars.githubusercontent.com/u/50873657?v=4" width="100" height="100" alt="MuriloFP"/><br /><sub><b>MuriloFP</b></sub></a>             |             <a href="https://github.com/NyxJae"><img src="https://avatars.githubusercontent.com/u/52313587?v=4" width="100" height="100" alt="NyxJae"/><br /><sub><b>NyxJae</b></sub></a>              |        <a href="https://github.com/punkpeye"><img src="https://avatars.githubusercontent.com/u/108313943?v=4" width="100" height="100" alt="punkpeye"/><br /><sub><b>punkpeye</b></sub></a>         |            <a href="https://github.com/d-oit"><img src="https://avatars.githubusercontent.com/u/6849456?v=4" width="100" height="100" alt="d-oit"/><br /><sub><b>d-oit</b></sub></a>            |            <a href="https://github.com/monotykamary"><img src="https://avatars.githubusercontent.com/u/1130103?v=4" width="100" height="100" alt="monotykamary"/><br /><sub><b>monotykamary</b></sub></a>             |
+|         <a href="https://github.com/lloydchang"><img src="https://avatars.githubusercontent.com/u/1329685?v=4" width="100" height="100" alt="lloydchang"/><br /><sub><b>lloydchang</b></sub></a>         | <a href="https://github.com/vigneshsubbiah16"><img src="https://avatars.githubusercontent.com/u/51325334?v=4" width="100" height="100" alt="vigneshsubbiah16"/><br /><sub><b>vigneshsubbiah16</b></sub></a> |            <a href="https://github.com/Szpadel"><img src="https://avatars.githubusercontent.com/u/1857251?v=4" width="100" height="100" alt="Szpadel"/><br /><sub><b>Szpadel</b></sub></a>             |       <a href="https://github.com/lupuletic"><img src="https://avatars.githubusercontent.com/u/105351510?v=4" width="100" height="100" alt="lupuletic"/><br /><sub><b>lupuletic</b></sub></a>       |        <a href="https://github.com/cannuri"><img src="https://avatars.githubusercontent.com/u/91494156?v=4" width="100" height="100" alt="cannuri"/><br /><sub><b>cannuri</b></sub></a>         | <a href="https://github.com/Smartsheet-JB-Brown"><img src="https://avatars.githubusercontent.com/u/171734120?v=4" width="100" height="100" alt="Smartsheet-JB-Brown"/><br /><sub><b>Smartsheet-JB-Brown</b></sub></a> |
+|           <a href="https://github.com/Premshay"><img src="https://avatars.githubusercontent.com/u/28099628?v=4" width="100" height="100" alt="Premshay"/><br /><sub><b>Premshay</b></sub></a>            |              <a href="https://github.com/psv2522"><img src="https://avatars.githubusercontent.com/u/87223770?v=4" width="100" height="100" alt="psv2522"/><br /><sub><b>psv2522</b></sub></a>               |      <a href="https://github.com/olweraltuve"><img src="https://avatars.githubusercontent.com/u/39308405?v=4" width="100" height="100" alt="olweraltuve"/><br /><sub><b>olweraltuve</b></sub></a>      |       <a href="https://github.com/RaySinner"><img src="https://avatars.githubusercontent.com/u/118297374?v=4" width="100" height="100" alt="RaySinner"/><br /><sub><b>RaySinner</b></sub></a>       |            <a href="https://github.com/qdaxb"><img src="https://avatars.githubusercontent.com/u/4157870?v=4" width="100" height="100" alt="qdaxb"/><br /><sub><b>qdaxb</b></sub></a>            |                <a href="https://github.com/feifei325"><img src="https://avatars.githubusercontent.com/u/46489071?v=4" width="100" height="100" alt="feifei325"/><br /><sub><b>feifei325</b></sub></a>                 |
+|      <a href="https://github.com/afshawnlotfi"><img src="https://avatars.githubusercontent.com/u/6283745?v=4" width="100" height="100" alt="afshawnlotfi"/><br /><sub><b>afshawnlotfi</b></sub></a>      |              <a href="https://github.com/emshvac"><img src="https://avatars.githubusercontent.com/u/121588911?v=4" width="100" height="100" alt="emshvac"/><br /><sub><b>emshvac</b></sub></a>              |         <a href="https://github.com/Lunchb0ne"><img src="https://avatars.githubusercontent.com/u/22198661?v=4" width="100" height="100" alt="Lunchb0ne"/><br /><sub><b>Lunchb0ne</b></sub></a>         |             <a href="https://github.com/sammcj"><img src="https://avatars.githubusercontent.com/u/862951?v=4" width="100" height="100" alt="sammcj"/><br /><sub><b>sammcj</b></sub></a>             |       <a href="https://github.com/dtrugman"><img src="https://avatars.githubusercontent.com/u/2451669?v=4" width="100" height="100" alt="dtrugman"/><br /><sub><b>dtrugman</b></sub></a>        |                 <a href="https://github.com/aitoroses"><img src="https://avatars.githubusercontent.com/u/1699368?v=4" width="100" height="100" alt="aitoroses"/><br /><sub><b>aitoroses</b></sub></a>                 |
+|           <a href="https://github.com/yt3trees"><img src="https://avatars.githubusercontent.com/u/57471763?v=4" width="100" height="100" alt="yt3trees"/><br /><sub><b>yt3trees</b></sub></a>            |              <a href="https://github.com/yongjer"><img src="https://avatars.githubusercontent.com/u/54315206?v=4" width="100" height="100" alt="yongjer"/><br /><sub><b>yongjer</b></sub></a>               |      <a href="https://github.com/vincentsong"><img src="https://avatars.githubusercontent.com/u/2343574?v=4" width="100" height="100" alt="vincentsong"/><br /><sub><b>vincentsong</b></sub></a>       | <a href="https://github.com/pugazhendhi-m"><img src="https://avatars.githubusercontent.com/u/132246623?v=4" width="100" height="100" alt="pugazhendhi-m"/><br /><sub><b>pugazhendhi-m</b></sub></a> |           <a href="https://github.com/eonghk"><img src="https://avatars.githubusercontent.com/u/139964?v=4" width="100" height="100" alt="eonghk"/><br /><sub><b>eonghk</b></sub></a>           |                  <a href="https://github.com/philfung"><img src="https://avatars.githubusercontent.com/u/1054593?v=4" width="100" height="100" alt="philfung"/><br /><sub><b>philfung</b></sub></a>                   |
+|               <a href="https://github.com/pdecat"><img src="https://avatars.githubusercontent.com/u/318490?v=4" width="100" height="100" alt="pdecat"/><br /><sub><b>pdecat</b></sub></a>                |                <a href="https://github.com/napter"><img src="https://avatars.githubusercontent.com/u/6260841?v=4" width="100" height="100" alt="napter"/><br /><sub><b>napter</b></sub></a>                 |                    <a href="https://github.com/mdp"><img src="https://avatars.githubusercontent.com/u/2868?v=4" width="100" height="100" alt="mdp"/><br /><sub><b>mdp</b></sub></a>                    |            <a href="https://github.com/jcbdev"><img src="https://avatars.githubusercontent.com/u/17152092?v=4" width="100" height="100" alt="jcbdev"/><br /><sub><b>jcbdev</b></sub></a>            |      <a href="https://github.com/benzntech"><img src="https://avatars.githubusercontent.com/u/4044180?v=4" width="100" height="100" alt="benzntech"/><br /><sub><b>benzntech</b></sub></a>      |              <a href="https://github.com/anton-otee"><img src="https://avatars.githubusercontent.com/u/149477749?v=4" width="100" height="100" alt="anton-otee"/><br /><sub><b>anton-otee</b></sub></a>               |
+|             <a href="https://github.com/AMHesch"><img src="https://avatars.githubusercontent.com/u/4777192?v=4" width="100" height="100" alt="AMHesch"/><br /><sub><b>AMHesch</b></sub></a>              |              <a href="https://github.com/bannzai"><img src="https://avatars.githubusercontent.com/u/10897361?v=4" width="100" height="100" alt="bannzai"/><br /><sub><b>bannzai</b></sub></a>               |           <a href="https://github.com/dairui1"><img src="https://avatars.githubusercontent.com/u/183250644?v=4" width="100" height="100" alt="dairui1"/><br /><sub><b>dairui1</b></sub></a>            |           <a href="https://github.com/dqroid"><img src="https://avatars.githubusercontent.com/u/192424994?v=4" width="100" height="100" alt="dqroid"/><br /><sub><b>dqroid</b></sub></a>            |      <a href="https://github.com/kinandan"><img src="https://avatars.githubusercontent.com/u/186135699?v=4" width="100" height="100" alt="kinandan"/><br /><sub><b>kinandan</b></sub></a>       |                       <a href="https://github.com/kohii"><img src="https://avatars.githubusercontent.com/u/6891780?v=4" width="100" height="100" alt="kohii"/><br /><sub><b>kohii</b></sub></a>                       |
+|       <a href="https://github.com/lightrabbit"><img src="https://avatars.githubusercontent.com/u/1521765?v=4" width="100" height="100" alt="lightrabbit"/><br /><sub><b>lightrabbit</b></sub></a>        |                   <a href="https://github.com/olup"><img src="https://avatars.githubusercontent.com/u/13785588?v=4" width="100" height="100" alt="olup"/><br /><sub><b>olup</b></sub></a>                   |      <a href="https://github.com/moqimoqidea"><img src="https://avatars.githubusercontent.com/u/39821951?v=4" width="100" height="100" alt="moqimoqidea"/><br /><sub><b>moqimoqidea</b></sub></a>      |        <a href="https://github.com/mosleyit"><img src="https://avatars.githubusercontent.com/u/189396442?v=4" width="100" height="100" alt="mosleyit"/><br /><sub><b>mosleyit</b></sub></a>         |       <a href="https://github.com/oprstchn"><img src="https://avatars.githubusercontent.com/u/16177972?v=4" width="100" height="100" alt="oprstchn"/><br /><sub><b>oprstchn</b></sub></a>       |               <a href="https://github.com/philipnext"><img src="https://avatars.githubusercontent.com/u/81944499?v=4" width="100" height="100" alt="philipnext"/><br /><sub><b>philipnext</b></sub></a>               |
+|      <a href="https://github.com/refactorthis"><img src="https://avatars.githubusercontent.com/u/3012240?v=4" width="100" height="100" alt="refactorthis"/><br /><sub><b>refactorthis</b></sub></a>      |      <a href="https://github.com/samir-nimbly"><img src="https://avatars.githubusercontent.com/u/112695483?v=4" width="100" height="100" alt="samir-nimbly"/><br /><sub><b>samir-nimbly</b></sub></a>       |              <a href="https://github.com/shaybc"><img src="https://avatars.githubusercontent.com/u/8535905?v=4" width="100" height="100" alt="shaybc"/><br /><sub><b>shaybc</b></sub></a>              |   <a href="https://github.com/shohei-ihaya"><img src="https://avatars.githubusercontent.com/u/25131938?v=4" width="100" height="100" alt="shohei-ihaya"/><br /><sub><b>shohei-ihaya</b></sub></a>   | <a href="https://github.com/student20880"><img src="https://avatars.githubusercontent.com/u/74263488?v=4" width="100" height="100" alt="student20880"/><br /><sub><b>student20880</b></sub></a> |          <a href="https://github.com/PretzelVector"><img src="https://avatars.githubusercontent.com/u/95664360?v=4" width="100" height="100" alt="PretzelVector"/><br /><sub><b>PretzelVector</b></sub></a>           |
+|       <a href="https://github.com/adamwlarson"><img src="https://avatars.githubusercontent.com/u/1392315?v=4" width="100" height="100" alt="adamwlarson"/><br /><sub><b>adamwlarson</b></sub></a>        |                <a href="https://github.com/alarno"><img src="https://avatars.githubusercontent.com/u/4355547?v=4" width="100" height="100" alt="alarno"/><br /><sub><b>alarno</b></sub></a>                 | <a href="https://github.com/andreastempsch"><img src="https://avatars.githubusercontent.com/u/117991125?v=4" width="100" height="100" alt="andreastempsch"/><br /><sub><b>andreastempsch</b></sub></a> |          <a href="https://github.com/Atlogit"><img src="https://avatars.githubusercontent.com/u/86947554?v=4" width="100" height="100" alt="Atlogit"/><br /><sub><b>Atlogit</b></sub></a>           |            <a href="https://github.com/dleen"><img src="https://avatars.githubusercontent.com/u/1297964?v=4" width="100" height="100" alt="dleen"/><br /><sub><b>dleen</b></sub></a>            |                 <a href="https://github.com/dbasclpy"><img src="https://avatars.githubusercontent.com/u/139889137?v=4" width="100" height="100" alt="dbasclpy"/><br /><sub><b>dbasclpy</b></sub></a>                  |
+| <a href="https://github.com/celestial-vault"><img src="https://avatars.githubusercontent.com/u/58194240?v=4" width="100" height="100" alt="celestial-vault"/><br /><sub><b>celestial-vault</b></sub></a> |           <a href="https://github.com/DeXtroTip"><img src="https://avatars.githubusercontent.com/u/21011087?v=4" width="100" height="100" alt="DeXtroTip"/><br /><sub><b>DeXtroTip</b></sub></a>            |              <a href="https://github.com/hesara"><img src="https://avatars.githubusercontent.com/u/1335918?v=4" width="100" height="100" alt="hesara"/><br /><sub><b>hesara</b></sub></a>              |       <a href="https://github.com/eltociear"><img src="https://avatars.githubusercontent.com/u/22633385?v=4" width="100" height="100" alt="eltociear"/><br /><sub><b>eltociear</b></sub></a>        | <a href="https://github.com/libertyteeth"><img src="https://avatars.githubusercontent.com/u/32841567?v=4" width="100" height="100" alt="libertyteeth"/><br /><sub><b>libertyteeth</b></sub></a> |           <a href="https://github.com/mamertofabian"><img src="https://avatars.githubusercontent.com/u/7698436?v=4" width="100" height="100" alt="mamertofabian"/><br /><sub><b>mamertofabian</b></sub></a>           |
+|     <a href="https://github.com/marvijo-code"><img src="https://avatars.githubusercontent.com/u/82562019?v=4" width="100" height="100" alt="marvijo-code"/><br /><sub><b>marvijo-code</b></sub></a>      |                  <a href="https://github.com/Sarke"><img src="https://avatars.githubusercontent.com/u/2719310?v=4" width="100" height="100" alt="Sarke"/><br /><sub><b>Sarke</b></sub></a>                  |               <a href="https://github.com/tgfjt"><img src="https://avatars.githubusercontent.com/u/2628239?v=4" width="100" height="100" alt="tgfjt"/><br /><sub><b>tgfjt</b></sub></a>                |       <a href="https://github.com/vladstudio"><img src="https://avatars.githubusercontent.com/u/914320?v=4" width="100" height="100" alt="vladstudio"/><br /><sub><b>vladstudio</b></sub></a>       |          <a href="https://github.com/ashktn"><img src="https://avatars.githubusercontent.com/u/6723913?v=4" width="100" height="100" alt="ashktn"/><br /><sub><b>ashktn</b></sub></a>           |                                                                                                                                                                                                                       |
+
+<!-- END CONTRIBUTORS SECTION -->
+
+## Licencja
+
+[Apache 2.0 © 2025 Roo Veterinary, Inc.](../LICENSE)
+
+---
+
+**Ciesz się Roo Code!** Niezależnie od tego, czy trzymasz go na krótkiej smyczy, czy pozwalasz mu swobodnie działać autonomicznie, nie możemy się doczekać, aby zobaczyć, co zbudujesz. Jeśli masz pytania lub pomysły na funkcje, wpadnij na naszą [społeczność Reddit](https://www.reddit.com/r/RooCode/) lub [Discord](https://discord.gg/roocode). Szczęśliwego kodowania!

+ 77 - 0
locales/pt-BR/CODE_OF_CONDUCT.md

@@ -0,0 +1,77 @@
+# Código de Conduta do Pacto de Colaboradores
+
+## Nosso Compromisso
+
+No interesse de promover um ambiente aberto e acolhedor, nós, como
+colaboradores e mantenedores, nos comprometemos a tornar a participação em nosso projeto e
+nossa comunidade uma experiência livre de assédio para todos, independentemente de idade, tamanho
+corporal, deficiência, etnia, características sexuais, identidade e expressão de gênero,
+nível de experiência, educação, status socioeconômico, nacionalidade, aparência
+pessoal, raça, religião ou identidade e orientação sexual.
+
+## Nossos Padrões
+
+Exemplos de comportamento que contribuem para criar um ambiente positivo
+incluem:
+
+- Usar linguagem acolhedora e inclusiva
+- Respeitar diferentes pontos de vista e experiências
+- Aceitar graciosamente críticas construtivas
+- Focar no que é melhor para a comunidade
+- Mostrar empatia para com outros membros da comunidade
+
+Exemplos de comportamento inaceitável por parte dos participantes incluem:
+
+- O uso de linguagem ou imagens sexualizadas e atenção ou
+  avanços sexuais indesejados
+- Trolling, comentários insultuosos/depreciativos e ataques pessoais ou políticos
+- Assédio público ou privado
+- Publicar informações privadas de outros, como endereço físico ou eletrônico,
+  sem permissão explícita
+- Outra conduta que poderia razoavelmente ser considerada inadequada em um
+  ambiente profissional
+
+## Nossas Responsabilidades
+
+Os mantenedores do projeto são responsáveis por esclarecer os padrões de comportamento
+aceitável e espera-se que tomem ações corretivas apropriadas e justas em
+resposta a quaisquer instâncias de comportamento inaceitável.
+
+Os mantenedores do projeto têm o direito e a responsabilidade de remover, editar ou
+rejeitar comentários, commits, código, edições wiki, issues e outras contribuições
+que não estejam alinhadas a este Código de Conduta, ou banir temporária ou
+permanentemente qualquer colaborador por outros comportamentos que considerem inapropriados,
+ameaçadores, ofensivos ou prejudiciais.
+
+## Escopo
+
+Este Código de Conduta se aplica tanto em espaços do projeto quanto em espaços públicos
+quando um indivíduo está representando o projeto ou sua comunidade. Exemplos de
+representação de um projeto ou comunidade incluem o uso de um endereço de e-mail oficial do projeto,
+postagem por meio de uma conta oficial de mídia social ou atuação como representante designado
+em um evento online ou offline. A representação de um projeto pode ser
+definida e esclarecida posteriormente pelos mantenedores do projeto.
+
+## Aplicação
+
+Instâncias de comportamento abusivo, de assédio ou de outra forma inaceitável podem ser
+relatadas entrando em contato com a equipe do projeto em [email protected]. Todas as reclamações
+serão revisadas e investigadas e resultarão em uma resposta que
+é considerada necessária e apropriada às circunstâncias. A equipe do projeto é
+obrigada a manter confidencialidade em relação ao relator de um incidente.
+Mais detalhes de políticas específicas de aplicação podem ser publicados separadamente.
+
+Mantenedores do projeto que não seguem ou aplicam o Código de Conduta de boa
+fé podem enfrentar repercussões temporárias ou permanentes determinadas por outros
+membros da liderança do projeto.
+
+## Atribuição
+
+Este Código de Conduta é adaptado da [versão do Cline][cline_coc] do [Pacto de Colaboradores][homepage], versão 1.4,
+disponível em https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
+
+[cline_coc]: https://github.com/cline/cline/blob/main/CODE_OF_CONDUCT.md
+[homepage]: https://www.contributor-covenant.org
+
+Para respostas a perguntas comuns sobre este código de conduta, veja
+https://www.contributor-covenant.org/faq

+ 112 - 0
locales/pt-BR/CONTRIBUTING.md

@@ -0,0 +1,112 @@
+# Contribuindo para o Roo Code
+
+Estamos entusiasmados por você estar interessado em contribuir para o Roo Code. Seja corrigindo um bug, adicionando um recurso ou melhorando nossa documentação, cada contribuição torna o Roo Code mais inteligente! Para manter nossa comunidade vibrante e acolhedora, todos os membros devem aderir ao nosso [Código de Conduta](CODE_OF_CONDUCT.md).
+
+## Junte-se à Nossa Comunidade
+
+Incentivamos fortemente todos os colaboradores a se juntarem à nossa [comunidade no Discord](https://discord.gg/roocode)! Fazer parte do nosso servidor Discord ajuda você a:
+
+- Obter ajuda e orientação em tempo real sobre suas contribuições
+- Conectar-se com outros colaboradores e membros da equipe principal
+- Manter-se atualizado sobre os desenvolvimentos e prioridades do projeto
+- Participar de discussões que moldam o futuro do Roo Code
+- Encontrar oportunidades de colaboração com outros desenvolvedores
+
+## Relatando Bugs ou Problemas
+
+Relatórios de bugs ajudam a tornar o Roo Code melhor para todos! Antes de criar uma nova issue, por favor [pesquise as existentes](https://github.com/RooVetGit/Roo-Code/issues) para evitar duplicatas. Quando estiver pronto para relatar um bug, vá para nossa [página de issues](https://github.com/RooVetGit/Roo-Code/issues/new/choose) onde você encontrará um modelo para ajudá-lo a preencher as informações relevantes.
+
+<blockquote class='warning-note'>
+     🔐 <b>Importante:</b> Se você descobrir uma vulnerabilidade de segurança, por favor use a <a href="https://github.com/RooVetGit/Roo-Code/security/advisories/new">ferramenta de segurança do Github para relatá-la de forma privada</a>.
+</blockquote>
+
+## Decidindo no que Trabalhar
+
+Procurando uma boa primeira contribuição? Verifique as issues na seção "Issue [Unassigned]" do nosso [Projeto Github Roo Code](https://github.com/orgs/RooVetGit/projects/1). Estas são especialmente selecionadas para novos colaboradores e áreas onde gostaríamos de ter alguma ajuda!
+
+Também damos as boas-vindas a contribuições para nossa [documentação](https://docs.roocode.com/)! Seja corrigindo erros de digitação, melhorando guias existentes ou criando novo conteúdo educacional - adoraríamos construir um repositório de recursos impulsionado pela comunidade que ajude todos a obter o máximo do Roo Code. Você pode clicar em "Edit this page" em qualquer página para ir rapidamente ao local certo no Github para editar o arquivo, ou pode mergulhar diretamente em https://github.com/RooVetGit/Roo-Code-Docs.
+
+Se você está planejando trabalhar em um recurso maior, por favor crie primeiro uma [solicitação de recurso](https://github.com/RooVetGit/Roo-Code/discussions/categories/feature-requests?discussions_q=is%3Aopen+category%3A%22Feature+Requests%22+sort%3Atop) para que possamos discutir se está alinhado com a visão do Roo Code.
+
+## Configuração de Desenvolvimento
+
+1. **Clone** o repositório:
+
+```sh
+git clone https://github.com/RooVetGit/Roo-Code.git
+```
+
+2. **Instale as dependências**:
+
+```sh
+npm run install:all
+```
+
+3. **Inicie o webview (aplicativo Vite/React com HMR)**:
+
+```sh
+npm run dev
+```
+
+4. **Depuração**:
+   Pressione `F5` (ou **Executar** → **Iniciar Depuração**) no VSCode para abrir uma nova sessão com o Roo Code carregado.
+
+Alterações no webview aparecerão imediatamente. Alterações na extensão principal exigirão a reinicialização do host da extensão.
+
+Alternativamente, você pode construir um .vsix e instalá-lo diretamente no VSCode:
+
+```sh
+npm run build
+```
+
+Um arquivo `.vsix` aparecerá no diretório `bin/` que pode ser instalado com:
+
+```sh
+code --install-extension bin/roo-cline-<version>.vsix
+```
+
+## Escrevendo e Enviando Código
+
+Qualquer pessoa pode contribuir com código para o Roo Code, mas pedimos que você siga estas diretrizes para garantir que suas contribuições possam ser integradas sem problemas:
+
+1. **Mantenha os Pull Requests Focados**
+
+    - Limite os PRs a um único recurso ou correção de bug
+    - Divida mudanças maiores em PRs menores e relacionados
+    - Divida as mudanças em commits lógicos que possam ser revisados independentemente
+
+2. **Qualidade do Código**
+
+    - Todos os PRs devem passar nas verificações de CI que incluem tanto linting quanto formatação
+    - Resolva quaisquer avisos ou erros do ESLint antes de enviar
+    - Responda a todos os feedbacks do Ellipsis, nossa ferramenta automatizada de revisão de código
+    - Siga as melhores práticas de TypeScript e mantenha a segurança de tipos
+
+3. **Testes**
+
+    - Adicione testes para novos recursos
+    - Execute `npm test` para garantir que todos os testes passem
+    - Atualize os testes existentes se suas mudanças os afetarem
+    - Inclua tanto testes unitários quanto de integração quando apropriado
+
+4. **Diretrizes de Commit**
+
+    - Escreva mensagens de commit claras e descritivas
+    - Referencie issues relevantes nos commits usando #número-da-issue
+
+5. **Antes de Enviar**
+
+    - Faça rebase da sua branch na última main
+    - Certifique-se de que sua branch é construída com sucesso
+    - Verifique novamente se todos os testes estão passando
+    - Revise suas mudanças para qualquer código de depuração ou logs de console
+
+6. **Descrição do Pull Request**
+    - Descreva claramente o que suas mudanças fazem
+    - Inclua passos para testar as mudanças
+    - Liste quaisquer mudanças significativas
+    - Adicione capturas de tela para mudanças na UI
+
+## Acordo de Contribuição
+
+Ao enviar um pull request, você concorda que suas contribuições serão licenciadas sob a mesma licença do projeto ([Apache 2.0](../LICENSE)).

+ 211 - 0
locales/pt-BR/README.md

@@ -0,0 +1,211 @@
+<div align="center">
+<sub>
+
+[English](../../README.md) • [Català](../../locales/ca/README.md) • [Deutsch](../../locales/de/README.md) • [Español](../../locales/es/README.md) • [Français](../../locales/fr/README.md) • [हिन्दी](../../locales/hi/README.md) • [Italiano](../../locales/it/README.md)
+
+</sub>
+<sub>
+
+[日本語](../../locales/ja/README.md) • [한국어](../../locales/ko/README.md) • [Polski](../../locales/pl/README.md) • Português (BR) • [Türkçe](../../locales/tr/README.md) • [Tiếng Việt](../../locales/vi/README.md) • [简体中文](../../locales/zh-CN/README.md) • [繁體中文](../../locales/zh-TW/README.md)
+
+</sub>
+</div>
+<br>
+<div align="center">
+  <h2>Junte-se à Comunidade Roo Code</h2>
+  <p>Conecte-se com desenvolvedores, contribua com ideias e mantenha-se atualizado com as ferramentas de codificação mais recentes com IA.</p>
+  
+  <a href="https://discord.gg/roocode" target="_blank"><img src="https://img.shields.io/badge/Entrar%20no%20Discord-5865F2?style=for-the-badge&logo=discord&logoColor=white" alt="Entrar no Discord"></a>
+  <a href="https://www.reddit.com/r/RooCode/" target="_blank"><img src="https://img.shields.io/badge/Entrar%20no%20Reddit-FF4500?style=for-the-badge&logo=reddit&logoColor=white" alt="Entrar no Reddit"></a>
+  
+</div>
+<br>
+<br>
+
+<div align="center">
+<h1>Roo Code (anteriormente Roo Cline)</h1>
+
+<a href="https://marketplace.visualstudio.com/items?itemName=RooVeterinaryInc.roo-cline" target="_blank"><img src="https://img.shields.io/badge/Baixar%20no%20VS%20Marketplace-blue?style=for-the-badge&logo=visualstudiocode&logoColor=white" alt="Baixar no VS Marketplace"></a>
+<a href="https://github.com/RooVetGit/Roo-Code/discussions/categories/feature-requests?discussions_q=is%3Aopen+category%3A%22Feature+Requests%22+sort%3Atop" target="_blank"><img src="https://img.shields.io/badge/Solicitar%20Recursos-yellow?style=for-the-badge" alt="Solicitar Recursos"></a>
+<a href="https://marketplace.visualstudio.com/items?itemName=RooVeterinaryInc.roo-cline&ssr=false#review-details" target="_blank"><img src="https://img.shields.io/badge/Avaliar%20%26%20Comentar-green?style=for-the-badge" alt="Avaliar & Comentar"></a>
+<a href="https://docs.roocode.com" target="_blank"><img src="https://img.shields.io/badge/Documentação-6B46C1?style=for-the-badge&logo=readthedocs&logoColor=white" alt="Documentação"></a>
+
+</div>
+
+**Roo Code** é um **agente de codificação autônomo** movido a IA que reside no seu editor. Ele pode:
+
+- Comunicar-se em linguagem natural
+- Ler e escrever arquivos diretamente no seu espaço de trabalho
+- Executar comandos do terminal
+- Automatizar ações do navegador
+- Integrar com qualquer API/modelo compatível com OpenAI ou personalizado
+- Adaptar sua "personalidade" e capacidades através de **Modos Personalizados**
+
+Seja você esteja buscando um parceiro de codificação flexível, um arquiteto de sistema ou funções especializadas como engenheiro de QA ou gerente de produto, o Roo Code pode ajudá-lo a construir software com mais eficiência.
+
+Confira o [CHANGELOG](../CHANGELOG.md) para atualizações e correções detalhadas.
+
+---
+
+## 🎉 Roo Code 3.8 Lançado
+
+O Roo Code 3.8 está disponível com melhorias de desempenho, novos recursos e correções de bugs.
+
+- Checkpoints assíncronos mais rápidos
+- Suporte para arquivos .rooignore
+- Problemas de terminal e tela cinza corrigidos
+- Roo Code pode ser executado em várias janelas
+- Estratégia experimental de edição multi-diff
+- Comunicação de subtarefa para tarefa principal
+- Provedor DeepSeek atualizado
+- Novo provedor "Human Relay"
+
+---
+
+## O que o Roo Code pode fazer?
+
+- 🚀 **Gerar código** a partir de descrições em linguagem natural
+- 🔧 **Refatorar e depurar** código existente
+- 📝 **Escrever e atualizar** documentação
+- 🤔 **Responder perguntas** sobre sua base de código
+- 🔄 **Automatizar** tarefas repetitivas
+- 🏗️ **Criar** novos arquivos e projetos
+
+## Início Rápido
+
+1. [Instale o Roo Code](https://docs.roocode.com/getting-started/installing)
+2. [Conecte seu provedor de IA](https://docs.roocode.com/getting-started/connecting-api-provider)
+3. [Experimente sua primeira tarefa](https://docs.roocode.com/getting-started/your-first-task)
+
+## Principais Recursos
+
+### Múltiplos Modos
+
+O Roo Code se adapta às suas necessidades com [modos](https://docs.roocode.com/basic-usage/modes) especializados:
+
+- **Modo Code:** Para tarefas gerais de codificação
+- **Modo Architect:** Para planejamento e liderança técnica
+- **Modo Ask:** Para responder perguntas e fornecer informações
+- **Modo Debug:** Para diagnóstico sistemático de problemas
+- **[Modos Personalizados](https://docs.roocode.com/advanced-usage/custom-modes):** Crie personas especializadas ilimitadas para auditoria de segurança, otimização de desempenho, documentação ou qualquer outra tarefa
+
+### Ferramentas Inteligentes
+
+O Roo Code vem com poderosas [ferramentas](https://docs.roocode.com/basic-usage/using-tools) que podem:
+
+- Ler e escrever arquivos em seu projeto
+- Executar comandos no seu terminal VS Code
+- Controlar um navegador web
+- Usar ferramentas externas via [MCP (Model Context Protocol)](https://docs.roocode.com/advanced-usage/mcp)
+
+O MCP amplia as capacidades do Roo Code permitindo que você adicione ferramentas personalizadas ilimitadas. Integre com APIs externas, conecte-se a bancos de dados ou crie ferramentas de desenvolvimento especializadas - o MCP fornece o framework para expandir a funcionalidade do Roo Code para atender às suas necessidades específicas.
+
+### Personalização
+
+Faça o Roo Code funcionar do seu jeito com:
+
+- [Instruções Personalizadas](https://docs.roocode.com/advanced-usage/custom-instructions) para comportamento personalizado
+- [Modos Personalizados](https://docs.roocode.com/advanced-usage/custom-modes) para tarefas especializadas
+- [Modelos Locais](https://docs.roocode.com/advanced-usage/local-models) para uso offline
+- [Configurações de Auto-Aprovação](https://docs.roocode.com/advanced-usage/auto-approving-actions) para fluxos de trabalho mais rápidos
+
+## Recursos
+
+### Documentação
+
+- [Guia de Uso Básico](https://docs.roocode.com/basic-usage/the-chat-interface)
+- [Recursos Avançados](https://docs.roocode.com/advanced-usage/auto-approving-actions)
+- [Perguntas Frequentes](https://docs.roocode.com/faq)
+
+### Comunidade
+
+- **Discord:** [Participe do nosso servidor Discord](https://discord.gg/roocode) para ajuda em tempo real e discussões
+- **Reddit:** [Visite nosso subreddit](https://www.reddit.com/r/RooCode) para compartilhar experiências e dicas
+- **GitHub:** [Reportar problemas](https://github.com/RooVetGit/Roo-Code/issues) ou [solicitar recursos](https://github.com/RooVetGit/Roo-Code/discussions/categories/feature-requests?discussions_q=is%3Aopen+category%3A%22Feature+Requests%22+sort%3Atop)
+
+---
+
+## Configuração e Desenvolvimento Local
+
+1. **Clone** o repositório:
+
+```sh
+git clone https://github.com/RooVetGit/Roo-Code.git
+```
+
+2. **Instale as dependências**:
+
+```sh
+npm run install:all
+```
+
+3. **Inicie o webview (aplicativo Vite/React com HMR)**:
+
+```sh
+npm run dev
+```
+
+4. **Depuração**:
+   Pressione `F5` (ou **Executar** → **Iniciar Depuração**) no VSCode para abrir uma nova sessão com o Roo Code carregado.
+
+Alterações no webview aparecerão imediatamente. Alterações na extensão principal exigirão a reinicialização do host da extensão.
+
+Alternativamente, você pode construir um .vsix e instalá-lo diretamente no VSCode:
+
+```sh
+npm run build
+```
+
+Um arquivo `.vsix` aparecerá no diretório `bin/` que pode ser instalado com:
+
+```sh
+code --install-extension bin/roo-cline-<version>.vsix
+```
+
+Usamos [changesets](https://github.com/changesets/changesets) para versionamento e publicação. Verifique nosso `CHANGELOG.md` para notas de lançamento.
+
+---
+
+## Aviso Legal
+
+**Por favor, note** que a Roo Veterinary, Inc **não** faz nenhuma representação ou garantia em relação a qualquer código, modelos ou outras ferramentas fornecidas ou disponibilizadas em conexão com o Roo Code, quaisquer ferramentas de terceiros associadas, ou quaisquer saídas resultantes. Você assume **todos os riscos** associados ao uso de tais ferramentas ou saídas; tais ferramentas são fornecidas em uma base **"COMO ESTÁ"** e **"COMO DISPONÍVEL"**. Tais riscos podem incluir, sem limitação, violação de propriedade intelectual, vulnerabilidades cibernéticas ou ataques, viés, imprecisões, erros, defeitos, vírus, tempo de inatividade, perda ou dano de propriedade e/ou lesões pessoais. Você é o único responsável pelo seu uso de tais ferramentas ou saídas (incluindo, sem limitação, a legalidade, adequação e resultados das mesmas).
+
+---
+
+## Contribuindo
+
+Adoramos contribuições da comunidade! Comece lendo nosso [CONTRIBUTING.md](CONTRIBUTING.md).
+
+---
+
+## Contribuidores
+
+Obrigado a todos os nossos contribuidores que ajudaram a tornar o Roo Code melhor!
+
+<!-- START CONTRIBUTORS SECTION - AUTO-GENERATED, DO NOT EDIT MANUALLY -->
+
+|               <a href="https://github.com/mrubens"><img src="https://avatars.githubusercontent.com/u/2600?v=4" width="100" height="100" alt="mrubens"/><br /><sub><b>mrubens</b></sub></a>               |         <a href="https://github.com/saoudrizwan"><img src="https://avatars.githubusercontent.com/u/7799382?v=4" width="100" height="100" alt="saoudrizwan"/><br /><sub><b>saoudrizwan</b></sub></a>         |                   <a href="https://github.com/cte"><img src="https://avatars.githubusercontent.com/u/16332?v=4" width="100" height="100" alt="cte"/><br /><sub><b>cte</b></sub></a>                    |          <a href="https://github.com/samhvw8"><img src="https://avatars.githubusercontent.com/u/12538214?v=4" width="100" height="100" alt="samhvw8"/><br /><sub><b>samhvw8</b></sub></a>           |    <a href="https://github.com/daniel-lxs"><img src="https://avatars.githubusercontent.com/u/57051444?v=4" width="100" height="100" alt="daniel-lxs"/><br /><sub><b>daniel-lxs</b></sub></a>    |                   <a href="https://github.com/a8trejo"><img src="https://avatars.githubusercontent.com/u/62401433?v=4" width="100" height="100" alt="a8trejo"/><br /><sub><b>a8trejo</b></sub></a>                    |
+| :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
+|        <a href="https://github.com/ColemanRoo"><img src="https://avatars.githubusercontent.com/u/117104599?v=4" width="100" height="100" alt="ColemanRoo"/><br /><sub><b>ColemanRoo</b></sub></a>        |             <a href="https://github.com/stea9499"><img src="https://avatars.githubusercontent.com/u/4163795?v=4" width="100" height="100" alt="stea9499"/><br /><sub><b>stea9499</b></sub></a>              |     <a href="https://github.com/joemanley201"><img src="https://avatars.githubusercontent.com/u/8299960?v=4" width="100" height="100" alt="joemanley201"/><br /><sub><b>joemanley201</b></sub></a>     |       <a href="https://github.com/System233"><img src="https://avatars.githubusercontent.com/u/20336040?v=4" width="100" height="100" alt="System233"/><br /><sub><b>System233</b></sub></a>        |       <a href="https://github.com/jquanton"><img src="https://avatars.githubusercontent.com/u/88576563?v=4" width="100" height="100" alt="jquanton"/><br /><sub><b>jquanton</b></sub></a>       |              <a href="https://github.com/nissa-seru"><img src="https://avatars.githubusercontent.com/u/119150866?v=4" width="100" height="100" alt="nissa-seru"/><br /><sub><b>nissa-seru</b></sub></a>               |
+|    <a href="https://github.com/hannesrudolph"><img src="https://avatars.githubusercontent.com/u/49103247?v=4" width="100" height="100" alt="hannesrudolph"/><br /><sub><b>hannesrudolph</b></sub></a>    |             <a href="https://github.com/MuriloFP"><img src="https://avatars.githubusercontent.com/u/50873657?v=4" width="100" height="100" alt="MuriloFP"/><br /><sub><b>MuriloFP</b></sub></a>             |             <a href="https://github.com/NyxJae"><img src="https://avatars.githubusercontent.com/u/52313587?v=4" width="100" height="100" alt="NyxJae"/><br /><sub><b>NyxJae</b></sub></a>              |        <a href="https://github.com/punkpeye"><img src="https://avatars.githubusercontent.com/u/108313943?v=4" width="100" height="100" alt="punkpeye"/><br /><sub><b>punkpeye</b></sub></a>         |            <a href="https://github.com/d-oit"><img src="https://avatars.githubusercontent.com/u/6849456?v=4" width="100" height="100" alt="d-oit"/><br /><sub><b>d-oit</b></sub></a>            |            <a href="https://github.com/monotykamary"><img src="https://avatars.githubusercontent.com/u/1130103?v=4" width="100" height="100" alt="monotykamary"/><br /><sub><b>monotykamary</b></sub></a>             |
+|         <a href="https://github.com/lloydchang"><img src="https://avatars.githubusercontent.com/u/1329685?v=4" width="100" height="100" alt="lloydchang"/><br /><sub><b>lloydchang</b></sub></a>         | <a href="https://github.com/vigneshsubbiah16"><img src="https://avatars.githubusercontent.com/u/51325334?v=4" width="100" height="100" alt="vigneshsubbiah16"/><br /><sub><b>vigneshsubbiah16</b></sub></a> |            <a href="https://github.com/Szpadel"><img src="https://avatars.githubusercontent.com/u/1857251?v=4" width="100" height="100" alt="Szpadel"/><br /><sub><b>Szpadel</b></sub></a>             |       <a href="https://github.com/lupuletic"><img src="https://avatars.githubusercontent.com/u/105351510?v=4" width="100" height="100" alt="lupuletic"/><br /><sub><b>lupuletic</b></sub></a>       |        <a href="https://github.com/cannuri"><img src="https://avatars.githubusercontent.com/u/91494156?v=4" width="100" height="100" alt="cannuri"/><br /><sub><b>cannuri</b></sub></a>         | <a href="https://github.com/Smartsheet-JB-Brown"><img src="https://avatars.githubusercontent.com/u/171734120?v=4" width="100" height="100" alt="Smartsheet-JB-Brown"/><br /><sub><b>Smartsheet-JB-Brown</b></sub></a> |
+|           <a href="https://github.com/Premshay"><img src="https://avatars.githubusercontent.com/u/28099628?v=4" width="100" height="100" alt="Premshay"/><br /><sub><b>Premshay</b></sub></a>            |              <a href="https://github.com/psv2522"><img src="https://avatars.githubusercontent.com/u/87223770?v=4" width="100" height="100" alt="psv2522"/><br /><sub><b>psv2522</b></sub></a>               |      <a href="https://github.com/olweraltuve"><img src="https://avatars.githubusercontent.com/u/39308405?v=4" width="100" height="100" alt="olweraltuve"/><br /><sub><b>olweraltuve</b></sub></a>      |       <a href="https://github.com/RaySinner"><img src="https://avatars.githubusercontent.com/u/118297374?v=4" width="100" height="100" alt="RaySinner"/><br /><sub><b>RaySinner</b></sub></a>       |            <a href="https://github.com/qdaxb"><img src="https://avatars.githubusercontent.com/u/4157870?v=4" width="100" height="100" alt="qdaxb"/><br /><sub><b>qdaxb</b></sub></a>            |                <a href="https://github.com/feifei325"><img src="https://avatars.githubusercontent.com/u/46489071?v=4" width="100" height="100" alt="feifei325"/><br /><sub><b>feifei325</b></sub></a>                 |
+|      <a href="https://github.com/afshawnlotfi"><img src="https://avatars.githubusercontent.com/u/6283745?v=4" width="100" height="100" alt="afshawnlotfi"/><br /><sub><b>afshawnlotfi</b></sub></a>      |              <a href="https://github.com/emshvac"><img src="https://avatars.githubusercontent.com/u/121588911?v=4" width="100" height="100" alt="emshvac"/><br /><sub><b>emshvac</b></sub></a>              |         <a href="https://github.com/Lunchb0ne"><img src="https://avatars.githubusercontent.com/u/22198661?v=4" width="100" height="100" alt="Lunchb0ne"/><br /><sub><b>Lunchb0ne</b></sub></a>         |             <a href="https://github.com/sammcj"><img src="https://avatars.githubusercontent.com/u/862951?v=4" width="100" height="100" alt="sammcj"/><br /><sub><b>sammcj</b></sub></a>             |       <a href="https://github.com/dtrugman"><img src="https://avatars.githubusercontent.com/u/2451669?v=4" width="100" height="100" alt="dtrugman"/><br /><sub><b>dtrugman</b></sub></a>        |                 <a href="https://github.com/aitoroses"><img src="https://avatars.githubusercontent.com/u/1699368?v=4" width="100" height="100" alt="aitoroses"/><br /><sub><b>aitoroses</b></sub></a>                 |
+|           <a href="https://github.com/yt3trees"><img src="https://avatars.githubusercontent.com/u/57471763?v=4" width="100" height="100" alt="yt3trees"/><br /><sub><b>yt3trees</b></sub></a>            |              <a href="https://github.com/yongjer"><img src="https://avatars.githubusercontent.com/u/54315206?v=4" width="100" height="100" alt="yongjer"/><br /><sub><b>yongjer</b></sub></a>               |      <a href="https://github.com/vincentsong"><img src="https://avatars.githubusercontent.com/u/2343574?v=4" width="100" height="100" alt="vincentsong"/><br /><sub><b>vincentsong</b></sub></a>       | <a href="https://github.com/pugazhendhi-m"><img src="https://avatars.githubusercontent.com/u/132246623?v=4" width="100" height="100" alt="pugazhendhi-m"/><br /><sub><b>pugazhendhi-m</b></sub></a> |           <a href="https://github.com/eonghk"><img src="https://avatars.githubusercontent.com/u/139964?v=4" width="100" height="100" alt="eonghk"/><br /><sub><b>eonghk</b></sub></a>           |                  <a href="https://github.com/philfung"><img src="https://avatars.githubusercontent.com/u/1054593?v=4" width="100" height="100" alt="philfung"/><br /><sub><b>philfung</b></sub></a>                   |
+|               <a href="https://github.com/pdecat"><img src="https://avatars.githubusercontent.com/u/318490?v=4" width="100" height="100" alt="pdecat"/><br /><sub><b>pdecat</b></sub></a>                |                <a href="https://github.com/napter"><img src="https://avatars.githubusercontent.com/u/6260841?v=4" width="100" height="100" alt="napter"/><br /><sub><b>napter</b></sub></a>                 |                    <a href="https://github.com/mdp"><img src="https://avatars.githubusercontent.com/u/2868?v=4" width="100" height="100" alt="mdp"/><br /><sub><b>mdp</b></sub></a>                    |            <a href="https://github.com/jcbdev"><img src="https://avatars.githubusercontent.com/u/17152092?v=4" width="100" height="100" alt="jcbdev"/><br /><sub><b>jcbdev</b></sub></a>            |      <a href="https://github.com/benzntech"><img src="https://avatars.githubusercontent.com/u/4044180?v=4" width="100" height="100" alt="benzntech"/><br /><sub><b>benzntech</b></sub></a>      |              <a href="https://github.com/anton-otee"><img src="https://avatars.githubusercontent.com/u/149477749?v=4" width="100" height="100" alt="anton-otee"/><br /><sub><b>anton-otee</b></sub></a>               |
+|             <a href="https://github.com/AMHesch"><img src="https://avatars.githubusercontent.com/u/4777192?v=4" width="100" height="100" alt="AMHesch"/><br /><sub><b>AMHesch</b></sub></a>              |              <a href="https://github.com/bannzai"><img src="https://avatars.githubusercontent.com/u/10897361?v=4" width="100" height="100" alt="bannzai"/><br /><sub><b>bannzai</b></sub></a>               |           <a href="https://github.com/dairui1"><img src="https://avatars.githubusercontent.com/u/183250644?v=4" width="100" height="100" alt="dairui1"/><br /><sub><b>dairui1</b></sub></a>            |           <a href="https://github.com/dqroid"><img src="https://avatars.githubusercontent.com/u/192424994?v=4" width="100" height="100" alt="dqroid"/><br /><sub><b>dqroid</b></sub></a>            |      <a href="https://github.com/kinandan"><img src="https://avatars.githubusercontent.com/u/186135699?v=4" width="100" height="100" alt="kinandan"/><br /><sub><b>kinandan</b></sub></a>       |                       <a href="https://github.com/kohii"><img src="https://avatars.githubusercontent.com/u/6891780?v=4" width="100" height="100" alt="kohii"/><br /><sub><b>kohii</b></sub></a>                       |
+|       <a href="https://github.com/lightrabbit"><img src="https://avatars.githubusercontent.com/u/1521765?v=4" width="100" height="100" alt="lightrabbit"/><br /><sub><b>lightrabbit</b></sub></a>        |                   <a href="https://github.com/olup"><img src="https://avatars.githubusercontent.com/u/13785588?v=4" width="100" height="100" alt="olup"/><br /><sub><b>olup</b></sub></a>                   |      <a href="https://github.com/moqimoqidea"><img src="https://avatars.githubusercontent.com/u/39821951?v=4" width="100" height="100" alt="moqimoqidea"/><br /><sub><b>moqimoqidea</b></sub></a>      |        <a href="https://github.com/mosleyit"><img src="https://avatars.githubusercontent.com/u/189396442?v=4" width="100" height="100" alt="mosleyit"/><br /><sub><b>mosleyit</b></sub></a>         |       <a href="https://github.com/oprstchn"><img src="https://avatars.githubusercontent.com/u/16177972?v=4" width="100" height="100" alt="oprstchn"/><br /><sub><b>oprstchn</b></sub></a>       |               <a href="https://github.com/philipnext"><img src="https://avatars.githubusercontent.com/u/81944499?v=4" width="100" height="100" alt="philipnext"/><br /><sub><b>philipnext</b></sub></a>               |
+|      <a href="https://github.com/refactorthis"><img src="https://avatars.githubusercontent.com/u/3012240?v=4" width="100" height="100" alt="refactorthis"/><br /><sub><b>refactorthis</b></sub></a>      |      <a href="https://github.com/samir-nimbly"><img src="https://avatars.githubusercontent.com/u/112695483?v=4" width="100" height="100" alt="samir-nimbly"/><br /><sub><b>samir-nimbly</b></sub></a>       |              <a href="https://github.com/shaybc"><img src="https://avatars.githubusercontent.com/u/8535905?v=4" width="100" height="100" alt="shaybc"/><br /><sub><b>shaybc</b></sub></a>              |   <a href="https://github.com/shohei-ihaya"><img src="https://avatars.githubusercontent.com/u/25131938?v=4" width="100" height="100" alt="shohei-ihaya"/><br /><sub><b>shohei-ihaya</b></sub></a>   | <a href="https://github.com/student20880"><img src="https://avatars.githubusercontent.com/u/74263488?v=4" width="100" height="100" alt="student20880"/><br /><sub><b>student20880</b></sub></a> |          <a href="https://github.com/PretzelVector"><img src="https://avatars.githubusercontent.com/u/95664360?v=4" width="100" height="100" alt="PretzelVector"/><br /><sub><b>PretzelVector</b></sub></a>           |
+|       <a href="https://github.com/adamwlarson"><img src="https://avatars.githubusercontent.com/u/1392315?v=4" width="100" height="100" alt="adamwlarson"/><br /><sub><b>adamwlarson</b></sub></a>        |                <a href="https://github.com/alarno"><img src="https://avatars.githubusercontent.com/u/4355547?v=4" width="100" height="100" alt="alarno"/><br /><sub><b>alarno</b></sub></a>                 | <a href="https://github.com/andreastempsch"><img src="https://avatars.githubusercontent.com/u/117991125?v=4" width="100" height="100" alt="andreastempsch"/><br /><sub><b>andreastempsch</b></sub></a> |          <a href="https://github.com/Atlogit"><img src="https://avatars.githubusercontent.com/u/86947554?v=4" width="100" height="100" alt="Atlogit"/><br /><sub><b>Atlogit</b></sub></a>           |            <a href="https://github.com/dleen"><img src="https://avatars.githubusercontent.com/u/1297964?v=4" width="100" height="100" alt="dleen"/><br /><sub><b>dleen</b></sub></a>            |                 <a href="https://github.com/dbasclpy"><img src="https://avatars.githubusercontent.com/u/139889137?v=4" width="100" height="100" alt="dbasclpy"/><br /><sub><b>dbasclpy</b></sub></a>                  |
+| <a href="https://github.com/celestial-vault"><img src="https://avatars.githubusercontent.com/u/58194240?v=4" width="100" height="100" alt="celestial-vault"/><br /><sub><b>celestial-vault</b></sub></a> |           <a href="https://github.com/DeXtroTip"><img src="https://avatars.githubusercontent.com/u/21011087?v=4" width="100" height="100" alt="DeXtroTip"/><br /><sub><b>DeXtroTip</b></sub></a>            |              <a href="https://github.com/hesara"><img src="https://avatars.githubusercontent.com/u/1335918?v=4" width="100" height="100" alt="hesara"/><br /><sub><b>hesara</b></sub></a>              |       <a href="https://github.com/eltociear"><img src="https://avatars.githubusercontent.com/u/22633385?v=4" width="100" height="100" alt="eltociear"/><br /><sub><b>eltociear</b></sub></a>        | <a href="https://github.com/libertyteeth"><img src="https://avatars.githubusercontent.com/u/32841567?v=4" width="100" height="100" alt="libertyteeth"/><br /><sub><b>libertyteeth</b></sub></a> |           <a href="https://github.com/mamertofabian"><img src="https://avatars.githubusercontent.com/u/7698436?v=4" width="100" height="100" alt="mamertofabian"/><br /><sub><b>mamertofabian</b></sub></a>           |
+|     <a href="https://github.com/marvijo-code"><img src="https://avatars.githubusercontent.com/u/82562019?v=4" width="100" height="100" alt="marvijo-code"/><br /><sub><b>marvijo-code</b></sub></a>      |                  <a href="https://github.com/Sarke"><img src="https://avatars.githubusercontent.com/u/2719310?v=4" width="100" height="100" alt="Sarke"/><br /><sub><b>Sarke</b></sub></a>                  |               <a href="https://github.com/tgfjt"><img src="https://avatars.githubusercontent.com/u/2628239?v=4" width="100" height="100" alt="tgfjt"/><br /><sub><b>tgfjt</b></sub></a>                |       <a href="https://github.com/vladstudio"><img src="https://avatars.githubusercontent.com/u/914320?v=4" width="100" height="100" alt="vladstudio"/><br /><sub><b>vladstudio</b></sub></a>       |          <a href="https://github.com/ashktn"><img src="https://avatars.githubusercontent.com/u/6723913?v=4" width="100" height="100" alt="ashktn"/><br /><sub><b>ashktn</b></sub></a>           |                                                                                                                                                                                                                       |
+
+<!-- END CONTRIBUTORS SECTION -->
+
+## Licença
+
+[Apache 2.0 © 2025 Roo Veterinary, Inc.](../LICENSE)
+
+---
+
+**Aproveite o Roo Code!** Seja você o mantenha em uma coleira curta ou deixe-o vagar autonomamente, mal podemos esperar para ver o que você construirá. Se você tiver dúvidas ou ideias de recursos, passe por nossa [comunidade Reddit](https://www.reddit.com/r/RooCode/) ou [Discord](https://discord.gg/roocode). Feliz codificação!

+ 73 - 0
locales/tr/CODE_OF_CONDUCT.md

@@ -0,0 +1,73 @@
+# Katkıda Bulunan Sözleşmesi Davranış Kuralları
+
+## Taahhüdümüz
+
+Açık ve misafirperver bir ortam geliştirmek adına biz
+katkıda bulunanlar ve sürdürücüler olarak, projemize katılımın ve
+topluluğumuza katılımın; yaş, vücut
+ölçüsü, engellilik, etnik köken, cinsiyet özellikleri, cinsiyet kimliği ve ifadesi,
+deneyim seviyesi, eğitim, sosyo-ekonomik durum, milliyet, kişisel
+görünüm, ırk, din veya cinsel kimlik ve yönelime bakılmaksızın herkes için tacizden arınmış bir deneyim olmasını taahhüt ederiz.
+
+## Standartlarımız
+
+Olumlu bir ortam yaratmaya katkıda bulunan davranış örnekleri
+şunları içerir:
+
+- Karşılayıcı ve kapsayıcı dil kullanmak
+- Farklı bakış açılarına ve deneyimlere saygılı olmak
+- Yapıcı eleştiriyi nazikçe kabul etmek
+- Topluluk için en iyisine odaklanmak
+- Diğer topluluk üyelerine empati göstermek
+
+Katılımcılar tarafından kabul edilemez davranış örnekleri şunları içerir:
+
+- Cinselleştirilmiş dil veya görsellerin kullanımı ve istenmeyen cinsel ilgi veya
+  yaklaşımlar
+- Trolleme, hakaret/aşağılayıcı yorumlar ve kişisel veya politik saldırılar
+- Kamusal veya özel taciz
+- Açık izin olmadan başkalarının özel bilgilerini, örneğin fiziksel veya elektronik
+  adreslerini yayınlamak
+- Profesyonel bir ortamda makul olarak uygunsuz kabul edilebilecek diğer
+  davranışlar
+
+## Sorumluluklarımız
+
+Proje sürdürücüleri, kabul edilebilir davranış standartlarını açıklığa kavuşturmaktan
+sorumludur ve kabul edilemez davranış örneklerine
+karşılık olarak uygun ve adil düzeltici önlemler almaları beklenir.
+
+Proje sürdürücüleri, bu Davranış Kurallarına uygun olmayan yorumları, taahhütleri, kodları, wiki düzenlemelerini, sorunları ve diğer katkıları kaldırma, düzenleme veya
+reddetme hakkına ve sorumluluğuna sahiptir veya uygunsuz,
+tehditkar, saldırgan veya zararlı olduğunu düşündükleri diğer davranışlar için herhangi bir katkıda bulunanı geçici olarak veya kalıcı olarak yasaklayabilir.
+
+## Kapsam
+
+Bu Davranış Kuralları, bir kişi projeyi veya topluluğunu temsil ederken hem proje alanlarında hem de kamusal alanlarda geçerlidir. Bir projeyi veya
+topluluğu temsil etme örnekleri arasında resmi bir proje e-posta adresi kullanmak,
+resmi bir sosyal medya hesabı aracılığıyla paylaşım yapmak veya çevrimiçi veya çevrimdışı bir etkinlikte atanmış temsilci olarak hareket etmek bulunur. Bir projeyi temsil etmek, proje sürdürücüleri tarafından daha fazla
+tanımlanabilir ve netleştirilebilir.
+
+## Uygulama
+
+Taciz edici veya başka türlü kabul edilemez davranış örnekleri,
[email protected] adresinden proje ekibiyle iletişime geçilerek bildirilebilir. Tüm şikayetler
+incelenecek ve araştırılacak ve koşullara
+göre gerekli ve uygun görülen bir yanıtla sonuçlanacaktır. Proje ekibi,
+bir olayı bildiren kişiye ilişkin gizliliği korumakla yükümlüdür.
+Belirli uygulama politikalarının daha fazla ayrıntısı ayrıca yayınlanabilir.
+
+Davranış Kurallarını iyi
+niyetle takip etmeyen veya uygulamayan proje sürdürücüleri, projenin
+liderliğinin diğer üyeleri tarafından belirlenen geçici veya kalıcı yaptırımlarla karşılaşabilir.
+
+## Atıf
+
+Bu Davranış Kuralları, [Cline'ın versiyonundan][cline_coc] [Katkıda Bulunan Sözleşmesi][homepage], versiyon 1.4'ten uyarlanmıştır,
+https://www.contributor-covenant.org/version/1/4/code-of-conduct.html adresinde mevcuttur
+
+[cline_coc]: https://github.com/cline/cline/blob/main/CODE_OF_CONDUCT.md
+[homepage]: https://www.contributor-covenant.org
+
+Bu davranış kuralları hakkında sık sorulan sorulara yanıtlar için
+https://www.contributor-covenant.org/faq adresini ziyaret edin

+ 112 - 0
locales/tr/CONTRIBUTING.md

@@ -0,0 +1,112 @@
+# Roo Code'a Katkıda Bulunma
+
+Roo Code'a katkıda bulunmakla ilgilendiğiniz için çok mutluyuz. İster bir hatayı düzeltiyor, ister bir özellik ekliyor, ister belgelerimizi geliştiriyor olun, her katkı Roo Code'u daha akıllı hale getirir! Topluluğumuzu canlı ve misafirperver tutmak için tüm üyelerin [Davranış Kuralları](CODE_OF_CONDUCT.md)'na uyması gerekir.
+
+## Topluluğumuza Katılın
+
+Tüm katkıda bulunanları [Discord topluluğumuza](https://discord.gg/roocode) katılmaya şiddetle teşvik ediyoruz! Discord sunucumuzun bir parçası olmak size şu konularda yardımcı olur:
+
+- Katkılarınız hakkında gerçek zamanlı yardım ve rehberlik alın
+- Diğer katkıda bulunanlar ve çekirdek ekip üyeleriyle bağlantı kurun
+- Proje gelişmeleri ve öncelikleri hakkında güncel kalın
+- Roo Code'un geleceğini şekillendiren tartışmalara katılın
+- Diğer geliştiricilerle işbirliği fırsatları bulun
+
+## Hataları veya Sorunları Bildirme
+
+Hata raporları Roo Code'u herkes için daha iyi hale getirmeye yardımcı olur! Yeni bir sorun oluşturmadan önce, lütfen yinelemeleri önlemek için [mevcut olanları arayın](https://github.com/RooVetGit/Roo-Code/issues). Bir hatayı bildirmeye hazır olduğunuzda, ilgili bilgileri doldurmanıza yardımcı olacak bir şablon bulacağınız [sorunlar sayfamıza](https://github.com/RooVetGit/Roo-Code/issues/new/choose) gidin.
+
+<blockquote class='warning-note'>
+     🔐 <b>Önemli:</b> Bir güvenlik açığı keşfederseniz, lütfen <a href="https://github.com/RooVetGit/Roo-Code/security/advisories/new">özel olarak bildirmek için Github güvenlik aracını kullanın</a>.
+</blockquote>
+
+## Ne Üzerinde Çalışacağınıza Karar Verme
+
+İyi bir ilk katkı mı arıyorsunuz? [Roo Code Sorunları](https://github.com/orgs/RooVetGit/projects/1) Github Projemizin "Issue [Unassigned]" bölümündeki sorunları kontrol edin. Bunlar özellikle yeni katkıda bulunanlar ve biraz yardıma ihtiyaç duyduğumuz alanlar için seçilmiştir!
+
+[Belgelerimize](https://docs.roocode.com/) katkıları da memnuniyetle karşılıyoruz! İster yazım hatalarını düzeltmek, mevcut kılavuzları geliştirmek veya yeni eğitim içeriği oluşturmak olsun - herkesin Roo Code'dan en iyi şekilde yararlanmasına yardımcı olan topluluk odaklı bir kaynak deposu oluşturmak istiyoruz. Dosyayı düzenlemek için Github'daki doğru yere hızlıca gitmek için herhangi bir sayfada "Edit this page" düğmesine tıklayabilir veya doğrudan https://github.com/RooVetGit/Roo-Code-Docs adresine dalabilirsiniz.
+
+Daha büyük bir özellik üzerinde çalışmayı planlıyorsanız, lütfen önce bir [özellik isteği](https://github.com/RooVetGit/Roo-Code/discussions/categories/feature-requests?discussions_q=is%3Aopen+category%3A%22Feature+Requests%22+sort%3Atop) oluşturun, böylece Roo Code'un vizyonuyla uyumlu olup olmadığını tartışabiliriz.
+
+## Geliştirme Kurulumu
+
+1. Depoyu **klonlayın**:
+
+```sh
+git clone https://github.com/RooVetGit/Roo-Code.git
+```
+
+2. **Bağımlılıkları yükleyin**:
+
+```sh
+npm run install:all
+```
+
+3. **Webview'ı başlatın (HMR ile Vite/React uygulaması)**:
+
+```sh
+npm run dev
+```
+
+4. **Hata ayıklama**:
+   VSCode'da `F5` tuşuna basın (veya **Run** → **Start Debugging**) Roo Code yüklenmiş yeni bir oturum açmak için.
+
+Webview'daki değişiklikler anında görünecektir. Ana uzantıdaki değişiklikler uzantı ana bilgisayarının yeniden başlatılmasını gerektirecektir.
+
+Alternatif olarak, bir .vsix dosyası oluşturabilir ve doğrudan VSCode'a kurabilirsiniz:
+
+```sh
+npm run build
+```
+
+`bin/` dizininde bir `.vsix` dosyası görünecek ve şu komutla kurulabilir:
+
+```sh
+code --install-extension bin/roo-cline-<version>.vsix
+```
+
+## Kod Yazma ve Gönderme
+
+Herkes Roo Code'a kod katkısında bulunabilir, ancak katkılarınızın sorunsuz bir şekilde entegre edilebilmesi için bu kurallara uymanızı rica ediyoruz:
+
+1. **Pull Request'leri Odaklı Tutun**
+
+    - PR'leri tek bir özellik veya hata düzeltmesiyle sınırlayın
+    - Daha büyük değişiklikleri daha küçük, ilgili PR'lere bölün
+    - Değişiklikleri bağımsız olarak incelenebilen mantıklı commitlere bölün
+
+2. **Kod Kalitesi**
+
+    - Tüm PR'ler hem linting hem de formatlama içeren CI kontrollerini geçmelidir
+    - Göndermeden önce tüm ESLint uyarılarını veya hatalarını çözün
+    - Otomatik kod inceleme aracımız Ellipsis'ten gelen tüm geri bildirimlere yanıt verin
+    - TypeScript en iyi uygulamalarını takip edin ve tip güvenliğini koruyun
+
+3. **Test Etme**
+
+    - Yeni özellikler için testler ekleyin
+    - Tüm testlerin geçtiğinden emin olmak için `npm test` çalıştırın
+    - Değişiklikleriniz etkiliyorsa mevcut testleri güncelleyin
+    - Uygun olduğunda hem birim testlerini hem de entegrasyon testlerini dahil edin
+
+4. **Commit Yönergeleri**
+
+    - Net, açıklayıcı commit mesajları yazın
+    - #issue-number kullanarak commitlerdeki ilgili sorunlara atıfta bulunun
+
+5. **Göndermeden Önce**
+
+    - Dalınızı en son main üzerine rebase edin
+    - Dalınızın başarıyla oluşturulduğundan emin olun
+    - Tüm testlerin geçtiğini tekrar kontrol edin
+    - Değişikliklerinizi hata ayıklama kodu veya konsol günlükleri için gözden geçirin
+
+6. **Pull Request Açıklaması**
+    - Değişikliklerinizin ne yaptığını açıkça açıklayın
+    - Değişiklikleri test etmek için adımlar ekleyin
+    - Herhangi bir önemli değişikliği listeleyin
+    - UI değişiklikleri için ekran görüntüleri ekleyin
+
+## Katkı Anlaşması
+
+Bir pull request göndererek, katkılarınızın projeyle aynı lisans altında ([Apache 2.0](../LICENSE)) lisanslanacağını kabul edersiniz.

+ 211 - 0
locales/tr/README.md

@@ -0,0 +1,211 @@
+<div align="center">
+<sub>
+
+[English](../../README.md) • [Català](../../locales/ca/README.md) • [Deutsch](../../locales/de/README.md) • [Español](../../locales/es/README.md) • [Français](../../locales/fr/README.md) • [हिन्दी](../../locales/hi/README.md) • [Italiano](../../locales/it/README.md)
+
+</sub>
+<sub>
+
+[日本語](../../locales/ja/README.md) • [한국어](../../locales/ko/README.md) • [Polski](../../locales/pl/README.md) • [Português (BR)](../../locales/pt-BR/README.md) • Türkçe • [Tiếng Việt](../../locales/vi/README.md) • [简体中文](../../locales/zh-CN/README.md) • [繁體中文](../../locales/zh-TW/README.md)
+
+</sub>
+</div>
+<br>
+<div align="center">
+  <h2>Roo Code Topluluğuna Katılın</h2>
+  <p>Geliştiricilerle bağlantı kurun, fikirlerinizi paylaşın ve en son yapay zeka destekli kodlama araçlarıyla güncel kalın.</p>
+  
+  <a href="https://discord.gg/roocode" target="_blank"><img src="https://img.shields.io/badge/Discord%27a%20Katıl-5865F2?style=for-the-badge&logo=discord&logoColor=white" alt="Discord'a Katıl"></a>
+  <a href="https://www.reddit.com/r/RooCode/" target="_blank"><img src="https://img.shields.io/badge/Reddit%27e%20Katıl-FF4500?style=for-the-badge&logo=reddit&logoColor=white" alt="Reddit'e Katıl"></a>
+  
+</div>
+<br>
+<br>
+
+<div align="center">
+<h1>Roo Code (önceki adıyla Roo Cline)</h1>
+
+<a href="https://marketplace.visualstudio.com/items?itemName=RooVeterinaryInc.roo-cline" target="_blank"><img src="https://img.shields.io/badge/VS%20Marketplace%27den%20İndir-blue?style=for-the-badge&logo=visualstudiocode&logoColor=white" alt="VS Marketplace'den İndir"></a>
+<a href="https://github.com/RooVetGit/Roo-Code/discussions/categories/feature-requests?discussions_q=is%3Aopen+category%3A%22Feature+Requests%22+sort%3Atop" target="_blank"><img src="https://img.shields.io/badge/Özellik%20İstekleri-yellow?style=for-the-badge" alt="Özellik İstekleri"></a>
+<a href="https://marketplace.visualstudio.com/items?itemName=RooVeterinaryInc.roo-cline&ssr=false#review-details" target="_blank"><img src="https://img.shields.io/badge/Değerlendir%20%26%20İnceleme-green?style=for-the-badge" alt="Değerlendir & İnceleme"></a>
+<a href="https://docs.roocode.com" target="_blank"><img src="https://img.shields.io/badge/Dokümantasyon-6B46C1?style=for-the-badge&logo=readthedocs&logoColor=white" alt="Dokümantasyon"></a>
+
+</div>
+
+**Roo Code**, editörünüzde çalışan yapay zeka destekli **otonom kodlama aracı**dır. Yapabilecekleri:
+
+- Doğal dil ile iletişim kurma
+- Çalışma alanınızda doğrudan dosyaları okuma ve yazma
+- Terminal komutlarını çalıştırma
+- Tarayıcı eylemlerini otomatikleştirme
+- Herhangi bir OpenAI uyumlu veya özel API/model ile entegre olma
+- **Özel Modlar** aracılığıyla "kişiliğini" ve yeteneklerini uyarlama
+
+İster esnek bir kodlama ortağı, ister bir sistem mimarı, isterse QA mühendisi veya ürün yöneticisi gibi uzmanlaşmış roller arıyor olun, Roo Code yazılım geliştirme sürecinizi daha verimli hale getirmenize yardımcı olabilir.
+
+Detaylı güncellemeler ve düzeltmeler için [CHANGELOG](../CHANGELOG.md) dosyasını kontrol edin.
+
+---
+
+## 🎉 Roo Code 3.8 Yayınlandı
+
+Roo Code 3.8, performans iyileştirmeleri, yeni özellikler ve hata düzeltmeleri ile yayınlandı.
+
+- Daha hızlı asenkron kontrol noktaları
+- .rooignore dosyaları için destek
+- Terminal ve gri ekran sorunları düzeltildi
+- Roo Code birden fazla pencerede çalışabilir
+- Deneysel çoklu-fark düzenleme stratejisi
+- Alt görevden ana göreve iletişim
+- Güncellenmiş DeepSeek sağlayıcısı
+- Yeni "İnsan Rolü" sağlayıcısı
+
+---
+
+## Roo Code Ne Yapabilir?
+
+- 🚀 Doğal dil açıklamalarından **Kod Üretme**
+- 🔧 Mevcut kodu **Yeniden Düzenleme ve Hata Ayıklama**
+- 📝 Dokümantasyon **Yazma ve Güncelleme**
+- 🤔 Kod tabanınız hakkında **Sorulara Cevap Verme**
+- 🔄 Tekrarlayan görevleri **Otomatikleştirme**
+- 🏗️ Yeni dosyalar ve projeler **Oluşturma**
+
+## Hızlı Başlangıç
+
+1. [Roo Code'u Yükleyin](https://docs.roocode.com/getting-started/installing)
+2. [Yapay Zeka Sağlayıcınızı Bağlayın](https://docs.roocode.com/getting-started/connecting-api-provider)
+3. [İlk Görevinizi Deneyin](https://docs.roocode.com/getting-started/your-first-task)
+
+## Temel Özellikler
+
+### Çoklu Modlar
+
+Roo Code, özelleştirilmiş [modlar](https://docs.roocode.com/basic-usage/modes) ile ihtiyaçlarınıza uyum sağlar:
+
+- **Kod Modu:** Genel kodlama görevleri için
+- **Mimar Modu:** Planlama ve teknik liderlik için
+- **Soru Modu:** Sorulara cevap vermek ve bilgi sağlamak için
+- **Hata Ayıklama Modu:** Sistematik sorun teşhisi için
+- **[Özel Modlar](https://docs.roocode.com/advanced-usage/custom-modes):** Güvenlik denetimi, performans optimizasyonu, dokümantasyon veya diğer görevler için sınırsız özelleştirilmiş kişilikler oluşturun
+
+### Akıllı Araçlar
+
+Roo Code, şunları yapabilen güçlü [araçlar](https://docs.roocode.com/basic-usage/using-tools) ile gelir:
+
+- Projenizde dosyaları okuma ve yazma
+- VS Code terminalinizde komutları çalıştırma
+- Web tarayıcısını kontrol etme
+- [MCP (Model Context Protocol)](https://docs.roocode.com/advanced-usage/mcp) aracılığıyla harici araçları kullanma
+
+MCP, sınırsız özel araç eklemenize izin vererek Roo Code'un yeteneklerini genişletir. Harici API'lerle entegre olun, veritabanlarına bağlanın veya özel geliştirme araçları oluşturun - MCP, Roo Code'un işlevselliğini özel ihtiyaçlarınızı karşılamak üzere genişletmek için çerçeve sağlar.
+
+### Özelleştirme
+
+Roo Code'u kendi tarzınıza göre çalıştırın:
+
+- Kişiselleştirilmiş davranış için [Özel Talimatlar](https://docs.roocode.com/advanced-usage/custom-instructions)
+- Özelleştirilmiş görevler için [Özel Modlar](https://docs.roocode.com/advanced-usage/custom-modes)
+- Çevrimdışı kullanım için [Yerel Modeller](https://docs.roocode.com/advanced-usage/local-models)
+- Daha hızlı iş akışları için [Otomatik Onay Ayarları](https://docs.roocode.com/advanced-usage/auto-approving-actions)
+
+## Kaynaklar
+
+### Dokümantasyon
+
+- [Temel Kullanım Kılavuzu](https://docs.roocode.com/basic-usage/the-chat-interface)
+- [Gelişmiş Özellikler](https://docs.roocode.com/advanced-usage/auto-approving-actions)
+- [Sık Sorulan Sorular](https://docs.roocode.com/faq)
+
+### Topluluk
+
+- **Discord:** Gerçek zamanlı yardım ve tartışmalar için [Discord sunucumuza katılın](https://discord.gg/roocode)
+- **Reddit:** Deneyimlerinizi ve ipuçlarınızı paylaşmak için [subreddit'imizi ziyaret edin](https://www.reddit.com/r/RooCode)
+- **GitHub:** [Sorunları bildirin](https://github.com/RooVetGit/Roo-Code/issues) veya [özellik talep edin](https://github.com/RooVetGit/Roo-Code/discussions/categories/feature-requests?discussions_q=is%3Aopen+category%3A%22Feature+Requests%22+sort%3Atop)
+
+---
+
+## Yerel Kurulum ve Geliştirme
+
+1. Depoyu **klonlayın**:
+
+```sh
+git clone https://github.com/RooVetGit/Roo-Code.git
+```
+
+2. **Bağımlılıkları yükleyin**:
+
+```sh
+npm run install:all
+```
+
+3. **Webview'ı başlatın (HMR ile Vite/React uygulaması)**:
+
+```sh
+npm run dev
+```
+
+4. **Hata ayıklama**:
+   VSCode'da `F5` tuşuna basın (veya **Run** → **Start Debugging**) Roo Code yüklenmiş yeni bir oturum açmak için.
+
+Webview'daki değişiklikler anında görünecektir. Ana uzantıdaki değişiklikler uzantı ana bilgisayarının yeniden başlatılmasını gerektirecektir.
+
+Alternatif olarak, bir .vsix dosyası oluşturabilir ve doğrudan VSCode'a kurabilirsiniz:
+
+```sh
+npm run build
+```
+
+`bin/` dizininde bir `.vsix` dosyası görünecek ve şu komutla kurulabilir:
+
+```sh
+code --install-extension bin/roo-cline-<version>.vsix
+```
+
+Sürüm oluşturma ve yayınlama için [changesets](https://github.com/changesets/changesets) kullanıyoruz. Sürüm notları için `CHANGELOG.md` dosyamızı kontrol edin.
+
+---
+
+## Sorumluluk Reddi
+
+**Lütfen dikkat** Roo Veterinary, Inc, Roo Code ile bağlantılı olarak sağlanan veya kullanıma sunulan herhangi bir kod, model veya diğer araçlar, ilgili herhangi bir üçüncü taraf aracı veya herhangi bir sonuç çıktısı hakkında **hiçbir** temsil veya garanti vermemektedir. Bu tür araçların veya çıktıların kullanımıyla ilişkili **tüm riskleri** üstlenirsiniz; bu tür araçlar **"OLDUĞU GİBİ"** ve **"MEVCUT OLDUĞU GİBİ"** temelinde sağlanır. Bu riskler, fikri mülkiyet ihlali, siber güvenlik açıkları veya saldırılar, önyargı, yanlışlıklar, hatalar, kusurlar, virüsler, kesinti süresi, mal kaybı veya hasarı ve/veya kişisel yaralanma dâhil ancak bunlarla sınırlı olmamak üzere içerebilir. Bu tür araçların veya çıktıların kullanımından (yasallık, uygunluk ve sonuçlar dâhil ancak bunlarla sınırlı olmamak üzere) yalnızca siz sorumlusunuz.
+
+---
+
+## Katkıda Bulunma
+
+Topluluk katkılarını seviyoruz! [CONTRIBUTING.md](CONTRIBUTING.md) dosyasını okuyarak başlayın.
+
+---
+
+## Katkıda Bulunanlar
+
+Roo Code'u daha iyi hale getirmeye yardımcı olan tüm katkıda bulunanlara teşekkür ederiz!
+
+<!-- START CONTRIBUTORS SECTION - AUTO-GENERATED, DO NOT EDIT MANUALLY -->
+
+|               <a href="https://github.com/mrubens"><img src="https://avatars.githubusercontent.com/u/2600?v=4" width="100" height="100" alt="mrubens"/><br /><sub><b>mrubens</b></sub></a>               |         <a href="https://github.com/saoudrizwan"><img src="https://avatars.githubusercontent.com/u/7799382?v=4" width="100" height="100" alt="saoudrizwan"/><br /><sub><b>saoudrizwan</b></sub></a>         |                   <a href="https://github.com/cte"><img src="https://avatars.githubusercontent.com/u/16332?v=4" width="100" height="100" alt="cte"/><br /><sub><b>cte</b></sub></a>                    |          <a href="https://github.com/samhvw8"><img src="https://avatars.githubusercontent.com/u/12538214?v=4" width="100" height="100" alt="samhvw8"/><br /><sub><b>samhvw8</b></sub></a>           |    <a href="https://github.com/daniel-lxs"><img src="https://avatars.githubusercontent.com/u/57051444?v=4" width="100" height="100" alt="daniel-lxs"/><br /><sub><b>daniel-lxs</b></sub></a>    |                   <a href="https://github.com/a8trejo"><img src="https://avatars.githubusercontent.com/u/62401433?v=4" width="100" height="100" alt="a8trejo"/><br /><sub><b>a8trejo</b></sub></a>                    |
+| :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
+|        <a href="https://github.com/ColemanRoo"><img src="https://avatars.githubusercontent.com/u/117104599?v=4" width="100" height="100" alt="ColemanRoo"/><br /><sub><b>ColemanRoo</b></sub></a>        |             <a href="https://github.com/stea9499"><img src="https://avatars.githubusercontent.com/u/4163795?v=4" width="100" height="100" alt="stea9499"/><br /><sub><b>stea9499</b></sub></a>              |     <a href="https://github.com/joemanley201"><img src="https://avatars.githubusercontent.com/u/8299960?v=4" width="100" height="100" alt="joemanley201"/><br /><sub><b>joemanley201</b></sub></a>     |       <a href="https://github.com/System233"><img src="https://avatars.githubusercontent.com/u/20336040?v=4" width="100" height="100" alt="System233"/><br /><sub><b>System233</b></sub></a>        |       <a href="https://github.com/jquanton"><img src="https://avatars.githubusercontent.com/u/88576563?v=4" width="100" height="100" alt="jquanton"/><br /><sub><b>jquanton</b></sub></a>       |              <a href="https://github.com/nissa-seru"><img src="https://avatars.githubusercontent.com/u/119150866?v=4" width="100" height="100" alt="nissa-seru"/><br /><sub><b>nissa-seru</b></sub></a>               |
+|    <a href="https://github.com/hannesrudolph"><img src="https://avatars.githubusercontent.com/u/49103247?v=4" width="100" height="100" alt="hannesrudolph"/><br /><sub><b>hannesrudolph</b></sub></a>    |             <a href="https://github.com/MuriloFP"><img src="https://avatars.githubusercontent.com/u/50873657?v=4" width="100" height="100" alt="MuriloFP"/><br /><sub><b>MuriloFP</b></sub></a>             |             <a href="https://github.com/NyxJae"><img src="https://avatars.githubusercontent.com/u/52313587?v=4" width="100" height="100" alt="NyxJae"/><br /><sub><b>NyxJae</b></sub></a>              |        <a href="https://github.com/punkpeye"><img src="https://avatars.githubusercontent.com/u/108313943?v=4" width="100" height="100" alt="punkpeye"/><br /><sub><b>punkpeye</b></sub></a>         |            <a href="https://github.com/d-oit"><img src="https://avatars.githubusercontent.com/u/6849456?v=4" width="100" height="100" alt="d-oit"/><br /><sub><b>d-oit</b></sub></a>            |            <a href="https://github.com/monotykamary"><img src="https://avatars.githubusercontent.com/u/1130103?v=4" width="100" height="100" alt="monotykamary"/><br /><sub><b>monotykamary</b></sub></a>             |
+|         <a href="https://github.com/lloydchang"><img src="https://avatars.githubusercontent.com/u/1329685?v=4" width="100" height="100" alt="lloydchang"/><br /><sub><b>lloydchang</b></sub></a>         | <a href="https://github.com/vigneshsubbiah16"><img src="https://avatars.githubusercontent.com/u/51325334?v=4" width="100" height="100" alt="vigneshsubbiah16"/><br /><sub><b>vigneshsubbiah16</b></sub></a> |            <a href="https://github.com/Szpadel"><img src="https://avatars.githubusercontent.com/u/1857251?v=4" width="100" height="100" alt="Szpadel"/><br /><sub><b>Szpadel</b></sub></a>             |       <a href="https://github.com/lupuletic"><img src="https://avatars.githubusercontent.com/u/105351510?v=4" width="100" height="100" alt="lupuletic"/><br /><sub><b>lupuletic</b></sub></a>       |        <a href="https://github.com/cannuri"><img src="https://avatars.githubusercontent.com/u/91494156?v=4" width="100" height="100" alt="cannuri"/><br /><sub><b>cannuri</b></sub></a>         | <a href="https://github.com/Smartsheet-JB-Brown"><img src="https://avatars.githubusercontent.com/u/171734120?v=4" width="100" height="100" alt="Smartsheet-JB-Brown"/><br /><sub><b>Smartsheet-JB-Brown</b></sub></a> |
+|           <a href="https://github.com/Premshay"><img src="https://avatars.githubusercontent.com/u/28099628?v=4" width="100" height="100" alt="Premshay"/><br /><sub><b>Premshay</b></sub></a>            |              <a href="https://github.com/psv2522"><img src="https://avatars.githubusercontent.com/u/87223770?v=4" width="100" height="100" alt="psv2522"/><br /><sub><b>psv2522</b></sub></a>               |      <a href="https://github.com/olweraltuve"><img src="https://avatars.githubusercontent.com/u/39308405?v=4" width="100" height="100" alt="olweraltuve"/><br /><sub><b>olweraltuve</b></sub></a>      |       <a href="https://github.com/RaySinner"><img src="https://avatars.githubusercontent.com/u/118297374?v=4" width="100" height="100" alt="RaySinner"/><br /><sub><b>RaySinner</b></sub></a>       |            <a href="https://github.com/qdaxb"><img src="https://avatars.githubusercontent.com/u/4157870?v=4" width="100" height="100" alt="qdaxb"/><br /><sub><b>qdaxb</b></sub></a>            |                <a href="https://github.com/feifei325"><img src="https://avatars.githubusercontent.com/u/46489071?v=4" width="100" height="100" alt="feifei325"/><br /><sub><b>feifei325</b></sub></a>                 |
+|      <a href="https://github.com/afshawnlotfi"><img src="https://avatars.githubusercontent.com/u/6283745?v=4" width="100" height="100" alt="afshawnlotfi"/><br /><sub><b>afshawnlotfi</b></sub></a>      |              <a href="https://github.com/emshvac"><img src="https://avatars.githubusercontent.com/u/121588911?v=4" width="100" height="100" alt="emshvac"/><br /><sub><b>emshvac</b></sub></a>              |         <a href="https://github.com/Lunchb0ne"><img src="https://avatars.githubusercontent.com/u/22198661?v=4" width="100" height="100" alt="Lunchb0ne"/><br /><sub><b>Lunchb0ne</b></sub></a>         |             <a href="https://github.com/sammcj"><img src="https://avatars.githubusercontent.com/u/862951?v=4" width="100" height="100" alt="sammcj"/><br /><sub><b>sammcj</b></sub></a>             |       <a href="https://github.com/dtrugman"><img src="https://avatars.githubusercontent.com/u/2451669?v=4" width="100" height="100" alt="dtrugman"/><br /><sub><b>dtrugman</b></sub></a>        |                 <a href="https://github.com/aitoroses"><img src="https://avatars.githubusercontent.com/u/1699368?v=4" width="100" height="100" alt="aitoroses"/><br /><sub><b>aitoroses</b></sub></a>                 |
+|           <a href="https://github.com/yt3trees"><img src="https://avatars.githubusercontent.com/u/57471763?v=4" width="100" height="100" alt="yt3trees"/><br /><sub><b>yt3trees</b></sub></a>            |              <a href="https://github.com/yongjer"><img src="https://avatars.githubusercontent.com/u/54315206?v=4" width="100" height="100" alt="yongjer"/><br /><sub><b>yongjer</b></sub></a>               |      <a href="https://github.com/vincentsong"><img src="https://avatars.githubusercontent.com/u/2343574?v=4" width="100" height="100" alt="vincentsong"/><br /><sub><b>vincentsong</b></sub></a>       | <a href="https://github.com/pugazhendhi-m"><img src="https://avatars.githubusercontent.com/u/132246623?v=4" width="100" height="100" alt="pugazhendhi-m"/><br /><sub><b>pugazhendhi-m</b></sub></a> |           <a href="https://github.com/eonghk"><img src="https://avatars.githubusercontent.com/u/139964?v=4" width="100" height="100" alt="eonghk"/><br /><sub><b>eonghk</b></sub></a>           |                  <a href="https://github.com/philfung"><img src="https://avatars.githubusercontent.com/u/1054593?v=4" width="100" height="100" alt="philfung"/><br /><sub><b>philfung</b></sub></a>                   |
+|               <a href="https://github.com/pdecat"><img src="https://avatars.githubusercontent.com/u/318490?v=4" width="100" height="100" alt="pdecat"/><br /><sub><b>pdecat</b></sub></a>                |                <a href="https://github.com/napter"><img src="https://avatars.githubusercontent.com/u/6260841?v=4" width="100" height="100" alt="napter"/><br /><sub><b>napter</b></sub></a>                 |                    <a href="https://github.com/mdp"><img src="https://avatars.githubusercontent.com/u/2868?v=4" width="100" height="100" alt="mdp"/><br /><sub><b>mdp</b></sub></a>                    |            <a href="https://github.com/jcbdev"><img src="https://avatars.githubusercontent.com/u/17152092?v=4" width="100" height="100" alt="jcbdev"/><br /><sub><b>jcbdev</b></sub></a>            |      <a href="https://github.com/benzntech"><img src="https://avatars.githubusercontent.com/u/4044180?v=4" width="100" height="100" alt="benzntech"/><br /><sub><b>benzntech</b></sub></a>      |              <a href="https://github.com/anton-otee"><img src="https://avatars.githubusercontent.com/u/149477749?v=4" width="100" height="100" alt="anton-otee"/><br /><sub><b>anton-otee</b></sub></a>               |
+|             <a href="https://github.com/AMHesch"><img src="https://avatars.githubusercontent.com/u/4777192?v=4" width="100" height="100" alt="AMHesch"/><br /><sub><b>AMHesch</b></sub></a>              |              <a href="https://github.com/bannzai"><img src="https://avatars.githubusercontent.com/u/10897361?v=4" width="100" height="100" alt="bannzai"/><br /><sub><b>bannzai</b></sub></a>               |           <a href="https://github.com/dairui1"><img src="https://avatars.githubusercontent.com/u/183250644?v=4" width="100" height="100" alt="dairui1"/><br /><sub><b>dairui1</b></sub></a>            |           <a href="https://github.com/dqroid"><img src="https://avatars.githubusercontent.com/u/192424994?v=4" width="100" height="100" alt="dqroid"/><br /><sub><b>dqroid</b></sub></a>            |      <a href="https://github.com/kinandan"><img src="https://avatars.githubusercontent.com/u/186135699?v=4" width="100" height="100" alt="kinandan"/><br /><sub><b>kinandan</b></sub></a>       |                       <a href="https://github.com/kohii"><img src="https://avatars.githubusercontent.com/u/6891780?v=4" width="100" height="100" alt="kohii"/><br /><sub><b>kohii</b></sub></a>                       |
+|       <a href="https://github.com/lightrabbit"><img src="https://avatars.githubusercontent.com/u/1521765?v=4" width="100" height="100" alt="lightrabbit"/><br /><sub><b>lightrabbit</b></sub></a>        |                   <a href="https://github.com/olup"><img src="https://avatars.githubusercontent.com/u/13785588?v=4" width="100" height="100" alt="olup"/><br /><sub><b>olup</b></sub></a>                   |      <a href="https://github.com/moqimoqidea"><img src="https://avatars.githubusercontent.com/u/39821951?v=4" width="100" height="100" alt="moqimoqidea"/><br /><sub><b>moqimoqidea</b></sub></a>      |        <a href="https://github.com/mosleyit"><img src="https://avatars.githubusercontent.com/u/189396442?v=4" width="100" height="100" alt="mosleyit"/><br /><sub><b>mosleyit</b></sub></a>         |       <a href="https://github.com/oprstchn"><img src="https://avatars.githubusercontent.com/u/16177972?v=4" width="100" height="100" alt="oprstchn"/><br /><sub><b>oprstchn</b></sub></a>       |               <a href="https://github.com/philipnext"><img src="https://avatars.githubusercontent.com/u/81944499?v=4" width="100" height="100" alt="philipnext"/><br /><sub><b>philipnext</b></sub></a>               |
+|      <a href="https://github.com/refactorthis"><img src="https://avatars.githubusercontent.com/u/3012240?v=4" width="100" height="100" alt="refactorthis"/><br /><sub><b>refactorthis</b></sub></a>      |      <a href="https://github.com/samir-nimbly"><img src="https://avatars.githubusercontent.com/u/112695483?v=4" width="100" height="100" alt="samir-nimbly"/><br /><sub><b>samir-nimbly</b></sub></a>       |              <a href="https://github.com/shaybc"><img src="https://avatars.githubusercontent.com/u/8535905?v=4" width="100" height="100" alt="shaybc"/><br /><sub><b>shaybc</b></sub></a>              |   <a href="https://github.com/shohei-ihaya"><img src="https://avatars.githubusercontent.com/u/25131938?v=4" width="100" height="100" alt="shohei-ihaya"/><br /><sub><b>shohei-ihaya</b></sub></a>   | <a href="https://github.com/student20880"><img src="https://avatars.githubusercontent.com/u/74263488?v=4" width="100" height="100" alt="student20880"/><br /><sub><b>student20880</b></sub></a> |          <a href="https://github.com/PretzelVector"><img src="https://avatars.githubusercontent.com/u/95664360?v=4" width="100" height="100" alt="PretzelVector"/><br /><sub><b>PretzelVector</b></sub></a>           |
+|       <a href="https://github.com/adamwlarson"><img src="https://avatars.githubusercontent.com/u/1392315?v=4" width="100" height="100" alt="adamwlarson"/><br /><sub><b>adamwlarson</b></sub></a>        |                <a href="https://github.com/alarno"><img src="https://avatars.githubusercontent.com/u/4355547?v=4" width="100" height="100" alt="alarno"/><br /><sub><b>alarno</b></sub></a>                 | <a href="https://github.com/andreastempsch"><img src="https://avatars.githubusercontent.com/u/117991125?v=4" width="100" height="100" alt="andreastempsch"/><br /><sub><b>andreastempsch</b></sub></a> |          <a href="https://github.com/Atlogit"><img src="https://avatars.githubusercontent.com/u/86947554?v=4" width="100" height="100" alt="Atlogit"/><br /><sub><b>Atlogit</b></sub></a>           |            <a href="https://github.com/dleen"><img src="https://avatars.githubusercontent.com/u/1297964?v=4" width="100" height="100" alt="dleen"/><br /><sub><b>dleen</b></sub></a>            |                 <a href="https://github.com/dbasclpy"><img src="https://avatars.githubusercontent.com/u/139889137?v=4" width="100" height="100" alt="dbasclpy"/><br /><sub><b>dbasclpy</b></sub></a>                  |
+| <a href="https://github.com/celestial-vault"><img src="https://avatars.githubusercontent.com/u/58194240?v=4" width="100" height="100" alt="celestial-vault"/><br /><sub><b>celestial-vault</b></sub></a> |           <a href="https://github.com/DeXtroTip"><img src="https://avatars.githubusercontent.com/u/21011087?v=4" width="100" height="100" alt="DeXtroTip"/><br /><sub><b>DeXtroTip</b></sub></a>            |              <a href="https://github.com/hesara"><img src="https://avatars.githubusercontent.com/u/1335918?v=4" width="100" height="100" alt="hesara"/><br /><sub><b>hesara</b></sub></a>              |       <a href="https://github.com/eltociear"><img src="https://avatars.githubusercontent.com/u/22633385?v=4" width="100" height="100" alt="eltociear"/><br /><sub><b>eltociear</b></sub></a>        | <a href="https://github.com/libertyteeth"><img src="https://avatars.githubusercontent.com/u/32841567?v=4" width="100" height="100" alt="libertyteeth"/><br /><sub><b>libertyteeth</b></sub></a> |           <a href="https://github.com/mamertofabian"><img src="https://avatars.githubusercontent.com/u/7698436?v=4" width="100" height="100" alt="mamertofabian"/><br /><sub><b>mamertofabian</b></sub></a>           |
+|     <a href="https://github.com/marvijo-code"><img src="https://avatars.githubusercontent.com/u/82562019?v=4" width="100" height="100" alt="marvijo-code"/><br /><sub><b>marvijo-code</b></sub></a>      |                  <a href="https://github.com/Sarke"><img src="https://avatars.githubusercontent.com/u/2719310?v=4" width="100" height="100" alt="Sarke"/><br /><sub><b>Sarke</b></sub></a>                  |               <a href="https://github.com/tgfjt"><img src="https://avatars.githubusercontent.com/u/2628239?v=4" width="100" height="100" alt="tgfjt"/><br /><sub><b>tgfjt</b></sub></a>                |       <a href="https://github.com/vladstudio"><img src="https://avatars.githubusercontent.com/u/914320?v=4" width="100" height="100" alt="vladstudio"/><br /><sub><b>vladstudio</b></sub></a>       |          <a href="https://github.com/ashktn"><img src="https://avatars.githubusercontent.com/u/6723913?v=4" width="100" height="100" alt="ashktn"/><br /><sub><b>ashktn</b></sub></a>           |                                                                                                                                                                                                                       |
+
+<!-- END CONTRIBUTORS SECTION -->
+
+## Lisans
+
+[Apache 2.0 © 2025 Roo Veterinary, Inc.](../LICENSE)
+
+---
+
+**Roo Code'un keyfini çıkarın!** İster kısa bir tasmayla tutun ister otonom dolaşmasına izin verin, ne inşa edeceğinizi görmek için sabırsızlanıyoruz. Sorularınız veya özellik fikirleriniz varsa, [Reddit topluluğumuza](https://www.reddit.com/r/RooCode/) veya [Discord'umuza](https://discord.gg/roocode) uğrayın. Mutlu kodlamalar!

+ 77 - 0
locales/vi/CODE_OF_CONDUCT.md

@@ -0,0 +1,77 @@
+# Quy Tắc Ứng Xử theo Giao Ước Người Đóng Góp
+
+## Cam Kết Của Chúng Tôi
+
+Nhằm thúc đẩy một môi trường cởi mở và thân thiện, chúng tôi
+với tư cách là người đóng góp và người duy trì cam kết tạo ra sự tham gia vào dự án của chúng tôi và
+cộng đồng chúng tôi thành một trải nghiệm không bị quấy rối cho tất cả mọi người, bất kể tuổi tác, kích thước
+cơ thể, khuyết tật, dân tộc, đặc điểm giới tính, bản dạng giới và biểu hiện giới,
+mức độ kinh nghiệm, giáo dục, tình trạng kinh tế xã hội, quốc tịch, ngoại hình
+cá nhân, chủng tộc, tôn giáo, hoặc bản dạng và xu hướng tính dục.
+
+## Tiêu Chuẩn Của Chúng Tôi
+
+Ví dụ về hành vi góp phần tạo nên môi trường tích cực
+bao gồm:
+
+- Sử dụng ngôn ngữ chào đón và bao quát
+- Tôn trọng những quan điểm và kinh nghiệm khác nhau
+- Nhã nhặn chấp nhận phê bình mang tính xây dựng
+- Tập trung vào điều tốt nhất cho cộng đồng
+- Thể hiện sự đồng cảm với các thành viên khác trong cộng đồng
+
+Ví dụ về hành vi không thể chấp nhận từ người tham gia bao gồm:
+
+- Sử dụng ngôn ngữ hoặc hình ảnh gợi dục và sự chú ý hoặc tiếp cận tình dục
+  không được hoan nghênh
+- Trêu chọc, bình luận xúc phạm/miệt thị, và tấn công cá nhân hoặc chính trị
+- Quấy rối công khai hoặc riêng tư
+- Công bố thông tin cá nhân của người khác, chẳng hạn như địa chỉ vật lý hoặc điện tử,
+  mà không có sự cho phép rõ ràng
+- Các hành vi khác có thể được coi là không phù hợp trong
+  môi trường chuyên nghiệp
+
+## Trách Nhiệm Của Chúng Tôi
+
+Người duy trì dự án có trách nhiệm làm rõ các tiêu chuẩn về hành vi
+được chấp nhận và dự kiến sẽ thực hiện các hành động khắc phục thích hợp và công bằng để
+đáp lại bất kỳ trường hợp hành vi không thể chấp nhận nào.
+
+Người duy trì dự án có quyền và trách nhiệm xóa, chỉnh sửa, hoặc
+từ chối bình luận, commit, mã, chỉnh sửa wiki, vấn đề, và các đóng góp khác
+không phù hợp với Quy Tắc Ứng Xử này, hoặc tạm thời hoặc
+vĩnh viễn cấm bất kỳ người đóng góp nào vì các hành vi khác mà họ cho là không phù hợp,
+đe dọa, xúc phạm, hoặc có hại.
+
+## Phạm Vi
+
+Quy Tắc Ứng Xử này áp dụng cả trong không gian dự án và trong không gian công cộng
+khi một cá nhân đại diện cho dự án hoặc cộng đồng của nó. Ví dụ về
+đại diện cho một dự án hoặc cộng đồng bao gồm sử dụng địa chỉ email chính thức của dự án,
+đăng qua tài khoản mạng xã hội chính thức, hoặc hoạt động như đại diện được chỉ định
+tại một sự kiện trực tuyến hoặc ngoại tuyến. Đại diện của một dự án có thể được
+định nghĩa và làm rõ thêm bởi những người duy trì dự án.
+
+## Thực Thi
+
+Các trường hợp hành vi lạm dụng, quấy rối, hoặc không thể chấp nhận khác có thể được
+báo cáo bằng cách liên hệ với nhóm dự án tại [email protected]. Tất cả khiếu nại
+sẽ được xem xét và điều tra và sẽ dẫn đến phản hồi được
+cho là cần thiết và phù hợp với hoàn cảnh. Nhóm dự án có
+nghĩa vụ duy trì tính bảo mật đối với người báo cáo về một sự cố.
+Chi tiết thêm về các chính sách thực thi cụ thể có thể được đăng riêng.
+
+Người duy trì dự án không tuân theo hoặc thực thi Quy Tắc Ứng Xử với thiện
+chí có thể phải đối mặt với hậu quả tạm thời hoặc vĩnh viễn do các thành viên khác
+của ban lãnh đạo dự án quyết định.
+
+## Ghi Công
+
+Quy Tắc Ứng Xử này được chuyển thể từ [phiên bản của Cline][cline_coc] của [Giao Ước Người Đóng Góp][homepage], phiên bản 1.4,
+có sẵn tại https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
+
+[cline_coc]: https://github.com/cline/cline/blob/main/CODE_OF_CONDUCT.md
+[homepage]: https://www.contributor-covenant.org
+
+Để biết câu trả lời cho các câu hỏi thường gặp về quy tắc ứng xử này, xem tại
+https://www.contributor-covenant.org/faq

+ 112 - 0
locales/vi/CONTRIBUTING.md

@@ -0,0 +1,112 @@
+# Đóng Góp cho Roo Code
+
+Chúng tôi rất vui mừng vì bạn quan tâm đến việc đóng góp cho Roo Code. Cho dù bạn đang sửa lỗi, thêm tính năng, hay cải thiện tài liệu của chúng tôi, mỗi đóng góp đều làm cho Roo Code thông minh hơn! Để giữ cho cộng đồng của chúng tôi sôi động và thân thiện, tất cả thành viên phải tuân thủ [Quy Tắc Ứng Xử](CODE_OF_CONDUCT.md) của chúng tôi.
+
+## Tham Gia Cộng Đồng của Chúng Tôi
+
+Chúng tôi mạnh mẽ khuyến khích tất cả người đóng góp tham gia [cộng đồng Discord](https://discord.gg/roocode) của chúng tôi! Việc là một phần của máy chủ Discord của chúng tôi giúp bạn:
+
+- Nhận hỗ trợ và hướng dẫn thời gian thực về đóng góp của bạn
+- Kết nối với những người đóng góp khác và các thành viên nhóm cốt lõi
+- Cập nhật về sự phát triển và ưu tiên của dự án
+- Tham gia vào các cuộc thảo luận định hình tương lai của Roo Code
+- Tìm cơ hội hợp tác với các nhà phát triển khác
+
+## Báo Cáo Lỗi hoặc Vấn Đề
+
+Báo cáo lỗi giúp cải thiện Roo Code cho mọi người! Trước khi tạo một vấn đề mới, vui lòng [tìm kiếm những vấn đề hiện có](https://github.com/RooVetGit/Roo-Code/issues) để tránh trùng lặp. Khi bạn đã sẵn sàng báo cáo lỗi, hãy truy cập [trang vấn đề](https://github.com/RooVetGit/Roo-Code/issues/new/choose) của chúng tôi, nơi bạn sẽ tìm thấy một mẫu để giúp bạn điền thông tin liên quan.
+
+<blockquote class='warning-note'>
+     🔐 <b>Quan trọng:</b> Nếu bạn phát hiện lỗ hổng bảo mật, vui lòng sử dụng <a href="https://github.com/RooVetGit/Roo-Code/security/advisories/new">công cụ bảo mật Github để báo cáo riêng tư</a>.
+</blockquote>
+
+## Quyết Định Làm Việc trên Cái Gì
+
+Tìm kiếm đóng góp đầu tiên tốt? Kiểm tra các vấn đề trong phần "Issue [Unassigned]" của [Dự án Github Roo Code](https://github.com/orgs/RooVetGit/projects/1) của chúng tôi. Những vấn đề này được chọn lọc đặc biệt cho người đóng góp mới và các lĩnh vực mà chúng tôi muốn nhận được sự giúp đỡ!
+
+Chúng tôi cũng hoan nghênh đóng góp cho [tài liệu](https://docs.roocode.com/) của chúng tôi! Dù là sửa lỗi chính tả, cải thiện hướng dẫn hiện có, hay tạo nội dung giáo dục mới - chúng tôi muốn xây dựng một kho tài nguyên do cộng đồng thúc đẩy giúp mọi người tận dụng tối đa Roo Code. Bạn có thể nhấp vào "Edit this page" trên bất kỳ trang nào để nhanh chóng đến đúng vị trí trong Github để chỉnh sửa tệp, hoặc bạn có thể đi trực tiếp vào https://github.com/RooVetGit/Roo-Code-Docs.
+
+Nếu bạn đang lên kế hoạch làm việc trên một tính năng lớn hơn, vui lòng tạo [yêu cầu tính năng](https://github.com/RooVetGit/Roo-Code/discussions/categories/feature-requests?discussions_q=is%3Aopen+category%3A%22Feature+Requests%22+sort%3Atop) trước để chúng tôi có thể thảo luận xem nó có phù hợp với tầm nhìn của Roo Code không.
+
+## Thiết Lập Phát Triển
+
+1. **Clone** kho lưu trữ:
+
+```sh
+git clone https://github.com/RooVetGit/Roo-Code.git
+```
+
+2. **Cài đặt các phụ thuộc**:
+
+```sh
+npm run install:all
+```
+
+3. **Khởi động webview (ứng dụng Vite/React với HMR)**:
+
+```sh
+npm run dev
+```
+
+4. **Gỡ lỗi**:
+   Nhấn `F5` (hoặc **Run** → **Start Debugging**) trong VSCode để mở phiên mới với Roo Code được tải.
+
+Các thay đổi đối với webview sẽ xuất hiện ngay lập tức. Các thay đổi đối với phần mở rộng cốt lõi sẽ yêu cầu khởi động lại máy chủ phần mở rộng.
+
+Hoặc bạn có thể xây dựng một tệp .vsix và cài đặt nó trực tiếp trong VSCode:
+
+```sh
+npm run build
+```
+
+Một tệp `.vsix` sẽ xuất hiện trong thư mục `bin/` có thể được cài đặt bằng:
+
+```sh
+code --install-extension bin/roo-cline-<version>.vsix
+```
+
+## Viết và Gửi Mã
+
+Bất kỳ ai cũng có thể đóng góp mã cho Roo Code, nhưng chúng tôi yêu cầu bạn tuân theo những hướng dẫn này để đảm bảo đóng góp của bạn có thể được tích hợp suôn sẻ:
+
+1. **Giữ Pull Request Tập Trung**
+
+    - Giới hạn PR vào một tính năng hoặc sửa lỗi duy nhất
+    - Chia các thay đổi lớn hơn thành các PR nhỏ hơn, có liên quan
+    - Chia các thay đổi thành các commit hợp lý có thể được xem xét độc lập
+
+2. **Chất Lượng Mã**
+
+    - Tất cả PR phải vượt qua kiểm tra CI bao gồm cả linting và định dạng
+    - Giải quyết mọi cảnh báo hoặc lỗi ESLint trước khi gửi
+    - Phản hồi tất cả phản hồi từ Ellipsis, công cụ đánh giá mã tự động của chúng tôi
+    - Tuân theo các thực hành tốt nhất của TypeScript và duy trì an toàn kiểu
+
+3. **Kiểm Tra**
+
+    - Thêm kiểm tra cho các tính năng mới
+    - Chạy `npm test` để đảm bảo tất cả các kiểm tra đều vượt qua
+    - Cập nhật các bài kiểm tra hiện có nếu thay đổi của bạn ảnh hưởng đến chúng
+    - Bao gồm cả kiểm tra đơn vị và kiểm tra tích hợp khi thích hợp
+
+4. **Hướng Dẫn Commit**
+
+    - Viết thông điệp commit rõ ràng, mô tả
+    - Tham chiếu các vấn đề có liên quan trong commit bằng cách sử dụng #số-vấn-đề
+
+5. **Trước Khi Gửi**
+
+    - Rebase nhánh của bạn trên main mới nhất
+    - Đảm bảo nhánh của bạn xây dựng thành công
+    - Kiểm tra lại rằng tất cả các bài kiểm tra đều vượt qua
+    - Xem xét các thay đổi của bạn cho bất kỳ mã gỡ lỗi hoặc bản ghi console nào
+
+6. **Mô Tả Pull Request**
+    - Mô tả rõ ràng những gì thay đổi của bạn làm
+    - Bao gồm các bước để kiểm tra các thay đổi
+    - Liệt kê bất kỳ thay đổi đáng kể nào
+    - Thêm ảnh chụp màn hình cho các thay đổi UI
+
+## Thỏa Thuận Đóng Góp
+
+Bằng cách gửi một pull request, bạn đồng ý rằng đóng góp của bạn sẽ được cấp phép theo cùng giấy phép với dự án ([Apache 2.0](../LICENSE)).

+ 211 - 0
locales/vi/README.md

@@ -0,0 +1,211 @@
+<div align="center">
+<sub>
+
+[English](../../README.md) • [Català](../../locales/ca/README.md) • [Deutsch](../../locales/de/README.md) • [Español](../../locales/es/README.md) • [Français](../../locales/fr/README.md) • [हिन्दी](../../locales/hi/README.md) • [Italiano](../../locales/it/README.md)
+
+</sub>
+<sub>
+
+[日本語](../../locales/ja/README.md) • [한국어](../../locales/ko/README.md) • [Polski](../../locales/pl/README.md) • [Português (BR)](../../locales/pt-BR/README.md) • [Türkçe](../../locales/tr/README.md) • Tiếng Việt • [简体中文](../../locales/zh-CN/README.md) • [繁體中文](../../locales/zh-TW/README.md)
+
+</sub>
+</div>
+<br>
+<div align="center">
+  <h2>Tham Gia Cộng Đồng Roo Code</h2>
+  <p>Kết nối với các nhà phát triển, đóng góp ý tưởng và cập nhật với các công cụ lập trình mới nhất được hỗ trợ bởi AI.</p>
+  
+  <a href="https://discord.gg/roocode" target="_blank"><img src="https://img.shields.io/badge/Tham%20gia%20Discord-5865F2?style=for-the-badge&logo=discord&logoColor=white" alt="Tham gia Discord"></a>
+  <a href="https://www.reddit.com/r/RooCode/" target="_blank"><img src="https://img.shields.io/badge/Tham%20gia%20Reddit-FF4500?style=for-the-badge&logo=reddit&logoColor=white" alt="Tham gia Reddit"></a>
+  
+</div>
+<br>
+<br>
+
+<div align="center">
+<h1>Roo Code (trước đây là Roo Cline)</h1>
+
+<a href="https://marketplace.visualstudio.com/items?itemName=RooVeterinaryInc.roo-cline" target="_blank"><img src="https://img.shields.io/badge/Tải%20từ%20VS%20Marketplace-blue?style=for-the-badge&logo=visualstudiocode&logoColor=white" alt="Tải từ VS Marketplace"></a>
+<a href="https://github.com/RooVetGit/Roo-Code/discussions/categories/feature-requests?discussions_q=is%3Aopen+category%3A%22Feature+Requests%22+sort%3Atop" target="_blank"><img src="https://img.shields.io/badge/Yêu%20cầu%20tính%20năng-yellow?style=for-the-badge" alt="Yêu cầu tính năng"></a>
+<a href="https://marketplace.visualstudio.com/items?itemName=RooVeterinaryInc.roo-cline&ssr=false#review-details" target="_blank"><img src="https://img.shields.io/badge/Đánh%20giá%20%26%20Nhận%20xét-green?style=for-the-badge" alt="Đánh giá & Nhận xét"></a>
+<a href="https://docs.roocode.com" target="_blank"><img src="https://img.shields.io/badge/Tài%20liệu-6B46C1?style=for-the-badge&logo=readthedocs&logoColor=white" alt="Tài liệu"></a>
+
+</div>
+
+**Roo Code** là một **tác nhân lập trình tự trị** được hỗ trợ bởi AI sống trong trình soạn thảo của bạn. Nó có thể:
+
+- Giao tiếp bằng ngôn ngữ tự nhiên
+- Đọc và ghi các tập tin trực tiếp trong không gian làm việc của bạn
+- Chạy các lệnh terminal
+- Tự động hóa các hành động trên trình duyệt
+- Tích hợp với bất kỳ API/mô hình tương thích OpenAI hoặc tùy chỉnh
+- Điều chỉnh "tính cách" và khả năng của nó thông qua **Chế độ tùy chỉnh**
+
+Cho dù bạn đang tìm kiếm một đối tác lập trình linh hoạt, một kiến trúc sư hệ thống, hay các vai trò chuyên biệt như kỹ sư QA hoặc quản lý sản phẩm, Roo Code có thể giúp bạn xây dựng phần mềm hiệu quả hơn.
+
+Kiểm tra [CHANGELOG](../CHANGELOG.md) để biết thông tin chi tiết về các cập nhật và sửa lỗi.
+
+---
+
+## 🎉 Đã Phát Hành Roo Code 3.8
+
+Roo Code 3.8 đã ra mắt với các cải tiến hiệu suất, tính năng mới và sửa lỗi.
+
+- Điểm kiểm tra bất đồng bộ nhanh hơn
+- Hỗ trợ tập tin .rooignore
+- Đã sửa các vấn đề về terminal và màn hình xám
+- Roo Code có thể chạy trong nhiều cửa sổ
+- Chiến lược chỉnh sửa đa diff thử nghiệm
+- Giao tiếp từ tác vụ phụ đến tác vụ chính
+- Nhà cung cấp DeepSeek được cập nhật
+- Nhà cung cấp "Human Relay" mới
+
+---
+
+## Roo Code Có Thể Làm Gì?
+
+- 🚀 **Tạo mã** từ mô tả bằng ngôn ngữ tự nhiên
+- 🔧 **Tái cấu trúc & Gỡ lỗi** mã hiện có
+- 📝 **Viết & Cập nhật** tài liệu
+- 🤔 **Trả lời câu hỏi** về cơ sở mã của bạn
+- 🔄 **Tự động hóa** các tác vụ lặp đi lặp lại
+- 🏗️ **Tạo** tập tin và dự án mới
+
+## Bắt Đầu Nhanh
+
+1. [Cài đặt Roo Code](https://docs.roocode.com/getting-started/installing)
+2. [Kết nối Nhà cung cấp AI của bạn](https://docs.roocode.com/getting-started/connecting-api-provider)
+3. [Thử tác vụ đầu tiên của bạn](https://docs.roocode.com/getting-started/your-first-task)
+
+## Tính Năng Chính
+
+### Nhiều Chế Độ
+
+Roo Code thích ứng với nhu cầu của bạn với các [chế độ](https://docs.roocode.com/basic-usage/modes) chuyên biệt:
+
+- **Chế độ Code:** Cho các tác vụ lập trình đa dụng
+- **Chế độ Architect:** Cho việc lập kế hoạch và lãnh đạo kỹ thuật
+- **Chế độ Ask:** Để trả lời câu hỏi và cung cấp thông tin
+- **Chế độ Debug:** Cho việc chẩn đoán vấn đề có hệ thống
+- **[Chế độ tùy chỉnh](https://docs.roocode.com/advanced-usage/custom-modes):** Tạo vô số nhân vật chuyên biệt cho kiểm toán bảo mật, tối ưu hóa hiệu suất, tài liệu, hoặc bất kỳ tác vụ nào khác
+
+### Công Cụ Thông Minh
+
+Roo Code đi kèm với các [công cụ](https://docs.roocode.com/basic-usage/using-tools) mạnh mẽ có thể:
+
+- Đọc và ghi tập tin trong dự án của bạn
+- Thực thi các lệnh trong terminal VS Code của bạn
+- Điều khiển trình duyệt web
+- Sử dụng công cụ bên ngoài thông qua [MCP (Model Context Protocol)](https://docs.roocode.com/advanced-usage/mcp)
+
+MCP mở rộng khả năng của Roo Code bằng cách cho phép bạn thêm vô số công cụ tùy chỉnh. Tích hợp với API bên ngoài, kết nối với cơ sở dữ liệu, hoặc tạo các công cụ phát triển chuyên biệt - MCP cung cấp khung để mở rộng chức năng của Roo Code để đáp ứng nhu cầu cụ thể của bạn.
+
+### Tùy Chỉnh
+
+Làm cho Roo Code hoạt động theo cách của bạn với:
+
+- [Hướng dẫn tùy chỉnh](https://docs.roocode.com/advanced-usage/custom-instructions) cho hành vi cá nhân hóa
+- [Chế độ tùy chỉnh](https://docs.roocode.com/advanced-usage/custom-modes) cho các tác vụ chuyên biệt
+- [Mô hình cục bộ](https://docs.roocode.com/advanced-usage/local-models) cho sử dụng ngoại tuyến
+- [Cài đặt tự động phê duyệt](https://docs.roocode.com/advanced-usage/auto-approving-actions) cho quy trình làm việc nhanh hơn
+
+## Tài Nguyên
+
+### Tài Liệu
+
+- [Hướng Dẫn Sử Dụng Cơ Bản](https://docs.roocode.com/basic-usage/the-chat-interface)
+- [Tính Năng Nâng Cao](https://docs.roocode.com/advanced-usage/auto-approving-actions)
+- [Câu Hỏi Thường Gặp](https://docs.roocode.com/faq)
+
+### Cộng Đồng
+
+- **Discord:** [Tham gia máy chủ Discord của chúng tôi](https://discord.gg/roocode) để được trợ giúp và thảo luận trong thời gian thực
+- **Reddit:** [Ghé thăm subreddit của chúng tôi](https://www.reddit.com/r/RooCode) để chia sẻ kinh nghiệm và mẹo
+- **GitHub:** [Báo cáo vấn đề](https://github.com/RooVetGit/Roo-Code/issues) hoặc [yêu cầu tính năng](https://github.com/RooVetGit/Roo-Code/discussions/categories/feature-requests?discussions_q=is%3Aopen+category%3A%22Feature+Requests%22+sort%3Atop)
+
+---
+
+## Thiết Lập & Phát Triển Cục Bộ
+
+1. **Clone** kho lưu trữ:
+
+```sh
+git clone https://github.com/RooVetGit/Roo-Code.git
+```
+
+2. **Cài đặt các phụ thuộc**:
+
+```sh
+npm run install:all
+```
+
+3. **Khởi động webview (ứng dụng Vite/React với HMR)**:
+
+```sh
+npm run dev
+```
+
+4. **Gỡ lỗi**:
+   Nhấn `F5` (hoặc **Run** → **Start Debugging**) trong VSCode để mở phiên mới với Roo Code được tải.
+
+Các thay đổi đối với webview sẽ xuất hiện ngay lập tức. Các thay đổi đối với phần mở rộng cốt lõi sẽ yêu cầu khởi động lại máy chủ phần mở rộng.
+
+Hoặc bạn có thể xây dựng một tệp .vsix và cài đặt nó trực tiếp trong VSCode:
+
+```sh
+npm run build
+```
+
+Một tệp `.vsix` sẽ xuất hiện trong thư mục `bin/` có thể được cài đặt bằng:
+
+```sh
+code --install-extension bin/roo-cline-<version>.vsix
+```
+
+Chúng tôi sử dụng [changesets](https://github.com/changesets/changesets) để quản lý phiên bản và xuất bản. Kiểm tra `CHANGELOG.md` của chúng tôi để biết ghi chú phát hành.
+
+---
+
+## Tuyên Bố Miễn Trừ Trách Nhiệm
+
+**Xin lưu ý** rằng Roo Veterinary, Inc **không** đưa ra bất kỳ tuyên bố hoặc bảo đảm nào liên quan đến bất kỳ mã, mô hình, hoặc công cụ khác được cung cấp hoặc cung cấp liên quan đến Roo Code, bất kỳ công cụ bên thứ ba liên quan, hoặc bất kỳ đầu ra nào. Bạn chịu **tất cả rủi ro** liên quan đến việc sử dụng bất kỳ công cụ hoặc đầu ra như vậy; các công cụ đó được cung cấp trên cơ sở **"NGUYÊN TRẠNG"** và **"NHƯ CÓ SẴN"**. Những rủi ro đó có thể bao gồm, không giới hạn, vi phạm sở hữu trí tuệ, lỗ hổng mạng hoặc tấn công, thành kiến, không chính xác, lỗi, khiếm khuyết, virus, thời gian ngừng hoạt động, mất mát hoặc hư hỏng tài sản, và/hoặc thương tích cá nhân. Bạn hoàn toàn chịu trách nhiệm về việc sử dụng bất kỳ công cụ hoặc đầu ra như vậy (bao gồm, không giới hạn, tính hợp pháp, phù hợp và kết quả của chúng).
+
+---
+
+## Đóng Góp
+
+Chúng tôi rất hoan nghênh đóng góp từ cộng đồng! Bắt đầu bằng cách đọc [CONTRIBUTING.md](CONTRIBUTING.md) của chúng tôi.
+
+---
+
+## Người Đóng Góp
+
+Cảm ơn tất cả những người đóng góp đã giúp cải thiện Roo Code!
+
+<!-- START CONTRIBUTORS SECTION - AUTO-GENERATED, DO NOT EDIT MANUALLY -->
+
+|               <a href="https://github.com/mrubens"><img src="https://avatars.githubusercontent.com/u/2600?v=4" width="100" height="100" alt="mrubens"/><br /><sub><b>mrubens</b></sub></a>               |         <a href="https://github.com/saoudrizwan"><img src="https://avatars.githubusercontent.com/u/7799382?v=4" width="100" height="100" alt="saoudrizwan"/><br /><sub><b>saoudrizwan</b></sub></a>         |                   <a href="https://github.com/cte"><img src="https://avatars.githubusercontent.com/u/16332?v=4" width="100" height="100" alt="cte"/><br /><sub><b>cte</b></sub></a>                    |          <a href="https://github.com/samhvw8"><img src="https://avatars.githubusercontent.com/u/12538214?v=4" width="100" height="100" alt="samhvw8"/><br /><sub><b>samhvw8</b></sub></a>           |    <a href="https://github.com/daniel-lxs"><img src="https://avatars.githubusercontent.com/u/57051444?v=4" width="100" height="100" alt="daniel-lxs"/><br /><sub><b>daniel-lxs</b></sub></a>    |                   <a href="https://github.com/a8trejo"><img src="https://avatars.githubusercontent.com/u/62401433?v=4" width="100" height="100" alt="a8trejo"/><br /><sub><b>a8trejo</b></sub></a>                    |
+| :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
+|        <a href="https://github.com/ColemanRoo"><img src="https://avatars.githubusercontent.com/u/117104599?v=4" width="100" height="100" alt="ColemanRoo"/><br /><sub><b>ColemanRoo</b></sub></a>        |             <a href="https://github.com/stea9499"><img src="https://avatars.githubusercontent.com/u/4163795?v=4" width="100" height="100" alt="stea9499"/><br /><sub><b>stea9499</b></sub></a>              |     <a href="https://github.com/joemanley201"><img src="https://avatars.githubusercontent.com/u/8299960?v=4" width="100" height="100" alt="joemanley201"/><br /><sub><b>joemanley201</b></sub></a>     |       <a href="https://github.com/System233"><img src="https://avatars.githubusercontent.com/u/20336040?v=4" width="100" height="100" alt="System233"/><br /><sub><b>System233</b></sub></a>        |       <a href="https://github.com/jquanton"><img src="https://avatars.githubusercontent.com/u/88576563?v=4" width="100" height="100" alt="jquanton"/><br /><sub><b>jquanton</b></sub></a>       |              <a href="https://github.com/nissa-seru"><img src="https://avatars.githubusercontent.com/u/119150866?v=4" width="100" height="100" alt="nissa-seru"/><br /><sub><b>nissa-seru</b></sub></a>               |
+|    <a href="https://github.com/hannesrudolph"><img src="https://avatars.githubusercontent.com/u/49103247?v=4" width="100" height="100" alt="hannesrudolph"/><br /><sub><b>hannesrudolph</b></sub></a>    |             <a href="https://github.com/MuriloFP"><img src="https://avatars.githubusercontent.com/u/50873657?v=4" width="100" height="100" alt="MuriloFP"/><br /><sub><b>MuriloFP</b></sub></a>             |             <a href="https://github.com/NyxJae"><img src="https://avatars.githubusercontent.com/u/52313587?v=4" width="100" height="100" alt="NyxJae"/><br /><sub><b>NyxJae</b></sub></a>              |        <a href="https://github.com/punkpeye"><img src="https://avatars.githubusercontent.com/u/108313943?v=4" width="100" height="100" alt="punkpeye"/><br /><sub><b>punkpeye</b></sub></a>         |            <a href="https://github.com/d-oit"><img src="https://avatars.githubusercontent.com/u/6849456?v=4" width="100" height="100" alt="d-oit"/><br /><sub><b>d-oit</b></sub></a>            |            <a href="https://github.com/monotykamary"><img src="https://avatars.githubusercontent.com/u/1130103?v=4" width="100" height="100" alt="monotykamary"/><br /><sub><b>monotykamary</b></sub></a>             |
+|         <a href="https://github.com/lloydchang"><img src="https://avatars.githubusercontent.com/u/1329685?v=4" width="100" height="100" alt="lloydchang"/><br /><sub><b>lloydchang</b></sub></a>         | <a href="https://github.com/vigneshsubbiah16"><img src="https://avatars.githubusercontent.com/u/51325334?v=4" width="100" height="100" alt="vigneshsubbiah16"/><br /><sub><b>vigneshsubbiah16</b></sub></a> |            <a href="https://github.com/Szpadel"><img src="https://avatars.githubusercontent.com/u/1857251?v=4" width="100" height="100" alt="Szpadel"/><br /><sub><b>Szpadel</b></sub></a>             |       <a href="https://github.com/lupuletic"><img src="https://avatars.githubusercontent.com/u/105351510?v=4" width="100" height="100" alt="lupuletic"/><br /><sub><b>lupuletic</b></sub></a>       |        <a href="https://github.com/cannuri"><img src="https://avatars.githubusercontent.com/u/91494156?v=4" width="100" height="100" alt="cannuri"/><br /><sub><b>cannuri</b></sub></a>         | <a href="https://github.com/Smartsheet-JB-Brown"><img src="https://avatars.githubusercontent.com/u/171734120?v=4" width="100" height="100" alt="Smartsheet-JB-Brown"/><br /><sub><b>Smartsheet-JB-Brown</b></sub></a> |
+|           <a href="https://github.com/Premshay"><img src="https://avatars.githubusercontent.com/u/28099628?v=4" width="100" height="100" alt="Premshay"/><br /><sub><b>Premshay</b></sub></a>            |              <a href="https://github.com/psv2522"><img src="https://avatars.githubusercontent.com/u/87223770?v=4" width="100" height="100" alt="psv2522"/><br /><sub><b>psv2522</b></sub></a>               |      <a href="https://github.com/olweraltuve"><img src="https://avatars.githubusercontent.com/u/39308405?v=4" width="100" height="100" alt="olweraltuve"/><br /><sub><b>olweraltuve</b></sub></a>      |       <a href="https://github.com/RaySinner"><img src="https://avatars.githubusercontent.com/u/118297374?v=4" width="100" height="100" alt="RaySinner"/><br /><sub><b>RaySinner</b></sub></a>       |            <a href="https://github.com/qdaxb"><img src="https://avatars.githubusercontent.com/u/4157870?v=4" width="100" height="100" alt="qdaxb"/><br /><sub><b>qdaxb</b></sub></a>            |                <a href="https://github.com/feifei325"><img src="https://avatars.githubusercontent.com/u/46489071?v=4" width="100" height="100" alt="feifei325"/><br /><sub><b>feifei325</b></sub></a>                 |
+|      <a href="https://github.com/afshawnlotfi"><img src="https://avatars.githubusercontent.com/u/6283745?v=4" width="100" height="100" alt="afshawnlotfi"/><br /><sub><b>afshawnlotfi</b></sub></a>      |              <a href="https://github.com/emshvac"><img src="https://avatars.githubusercontent.com/u/121588911?v=4" width="100" height="100" alt="emshvac"/><br /><sub><b>emshvac</b></sub></a>              |         <a href="https://github.com/Lunchb0ne"><img src="https://avatars.githubusercontent.com/u/22198661?v=4" width="100" height="100" alt="Lunchb0ne"/><br /><sub><b>Lunchb0ne</b></sub></a>         |             <a href="https://github.com/sammcj"><img src="https://avatars.githubusercontent.com/u/862951?v=4" width="100" height="100" alt="sammcj"/><br /><sub><b>sammcj</b></sub></a>             |       <a href="https://github.com/dtrugman"><img src="https://avatars.githubusercontent.com/u/2451669?v=4" width="100" height="100" alt="dtrugman"/><br /><sub><b>dtrugman</b></sub></a>        |                 <a href="https://github.com/aitoroses"><img src="https://avatars.githubusercontent.com/u/1699368?v=4" width="100" height="100" alt="aitoroses"/><br /><sub><b>aitoroses</b></sub></a>                 |
+|           <a href="https://github.com/yt3trees"><img src="https://avatars.githubusercontent.com/u/57471763?v=4" width="100" height="100" alt="yt3trees"/><br /><sub><b>yt3trees</b></sub></a>            |              <a href="https://github.com/yongjer"><img src="https://avatars.githubusercontent.com/u/54315206?v=4" width="100" height="100" alt="yongjer"/><br /><sub><b>yongjer</b></sub></a>               |      <a href="https://github.com/vincentsong"><img src="https://avatars.githubusercontent.com/u/2343574?v=4" width="100" height="100" alt="vincentsong"/><br /><sub><b>vincentsong</b></sub></a>       | <a href="https://github.com/pugazhendhi-m"><img src="https://avatars.githubusercontent.com/u/132246623?v=4" width="100" height="100" alt="pugazhendhi-m"/><br /><sub><b>pugazhendhi-m</b></sub></a> |           <a href="https://github.com/eonghk"><img src="https://avatars.githubusercontent.com/u/139964?v=4" width="100" height="100" alt="eonghk"/><br /><sub><b>eonghk</b></sub></a>           |                  <a href="https://github.com/philfung"><img src="https://avatars.githubusercontent.com/u/1054593?v=4" width="100" height="100" alt="philfung"/><br /><sub><b>philfung</b></sub></a>                   |
+|               <a href="https://github.com/pdecat"><img src="https://avatars.githubusercontent.com/u/318490?v=4" width="100" height="100" alt="pdecat"/><br /><sub><b>pdecat</b></sub></a>                |                <a href="https://github.com/napter"><img src="https://avatars.githubusercontent.com/u/6260841?v=4" width="100" height="100" alt="napter"/><br /><sub><b>napter</b></sub></a>                 |                    <a href="https://github.com/mdp"><img src="https://avatars.githubusercontent.com/u/2868?v=4" width="100" height="100" alt="mdp"/><br /><sub><b>mdp</b></sub></a>                    |            <a href="https://github.com/jcbdev"><img src="https://avatars.githubusercontent.com/u/17152092?v=4" width="100" height="100" alt="jcbdev"/><br /><sub><b>jcbdev</b></sub></a>            |      <a href="https://github.com/benzntech"><img src="https://avatars.githubusercontent.com/u/4044180?v=4" width="100" height="100" alt="benzntech"/><br /><sub><b>benzntech</b></sub></a>      |              <a href="https://github.com/anton-otee"><img src="https://avatars.githubusercontent.com/u/149477749?v=4" width="100" height="100" alt="anton-otee"/><br /><sub><b>anton-otee</b></sub></a>               |
+|             <a href="https://github.com/AMHesch"><img src="https://avatars.githubusercontent.com/u/4777192?v=4" width="100" height="100" alt="AMHesch"/><br /><sub><b>AMHesch</b></sub></a>              |              <a href="https://github.com/bannzai"><img src="https://avatars.githubusercontent.com/u/10897361?v=4" width="100" height="100" alt="bannzai"/><br /><sub><b>bannzai</b></sub></a>               |           <a href="https://github.com/dairui1"><img src="https://avatars.githubusercontent.com/u/183250644?v=4" width="100" height="100" alt="dairui1"/><br /><sub><b>dairui1</b></sub></a>            |           <a href="https://github.com/dqroid"><img src="https://avatars.githubusercontent.com/u/192424994?v=4" width="100" height="100" alt="dqroid"/><br /><sub><b>dqroid</b></sub></a>            |      <a href="https://github.com/kinandan"><img src="https://avatars.githubusercontent.com/u/186135699?v=4" width="100" height="100" alt="kinandan"/><br /><sub><b>kinandan</b></sub></a>       |                       <a href="https://github.com/kohii"><img src="https://avatars.githubusercontent.com/u/6891780?v=4" width="100" height="100" alt="kohii"/><br /><sub><b>kohii</b></sub></a>                       |
+|       <a href="https://github.com/lightrabbit"><img src="https://avatars.githubusercontent.com/u/1521765?v=4" width="100" height="100" alt="lightrabbit"/><br /><sub><b>lightrabbit</b></sub></a>        |                   <a href="https://github.com/olup"><img src="https://avatars.githubusercontent.com/u/13785588?v=4" width="100" height="100" alt="olup"/><br /><sub><b>olup</b></sub></a>                   |      <a href="https://github.com/moqimoqidea"><img src="https://avatars.githubusercontent.com/u/39821951?v=4" width="100" height="100" alt="moqimoqidea"/><br /><sub><b>moqimoqidea</b></sub></a>      |        <a href="https://github.com/mosleyit"><img src="https://avatars.githubusercontent.com/u/189396442?v=4" width="100" height="100" alt="mosleyit"/><br /><sub><b>mosleyit</b></sub></a>         |       <a href="https://github.com/oprstchn"><img src="https://avatars.githubusercontent.com/u/16177972?v=4" width="100" height="100" alt="oprstchn"/><br /><sub><b>oprstchn</b></sub></a>       |               <a href="https://github.com/philipnext"><img src="https://avatars.githubusercontent.com/u/81944499?v=4" width="100" height="100" alt="philipnext"/><br /><sub><b>philipnext</b></sub></a>               |
+|      <a href="https://github.com/refactorthis"><img src="https://avatars.githubusercontent.com/u/3012240?v=4" width="100" height="100" alt="refactorthis"/><br /><sub><b>refactorthis</b></sub></a>      |      <a href="https://github.com/samir-nimbly"><img src="https://avatars.githubusercontent.com/u/112695483?v=4" width="100" height="100" alt="samir-nimbly"/><br /><sub><b>samir-nimbly</b></sub></a>       |              <a href="https://github.com/shaybc"><img src="https://avatars.githubusercontent.com/u/8535905?v=4" width="100" height="100" alt="shaybc"/><br /><sub><b>shaybc</b></sub></a>              |   <a href="https://github.com/shohei-ihaya"><img src="https://avatars.githubusercontent.com/u/25131938?v=4" width="100" height="100" alt="shohei-ihaya"/><br /><sub><b>shohei-ihaya</b></sub></a>   | <a href="https://github.com/student20880"><img src="https://avatars.githubusercontent.com/u/74263488?v=4" width="100" height="100" alt="student20880"/><br /><sub><b>student20880</b></sub></a> |          <a href="https://github.com/PretzelVector"><img src="https://avatars.githubusercontent.com/u/95664360?v=4" width="100" height="100" alt="PretzelVector"/><br /><sub><b>PretzelVector</b></sub></a>           |
+|       <a href="https://github.com/adamwlarson"><img src="https://avatars.githubusercontent.com/u/1392315?v=4" width="100" height="100" alt="adamwlarson"/><br /><sub><b>adamwlarson</b></sub></a>        |                <a href="https://github.com/alarno"><img src="https://avatars.githubusercontent.com/u/4355547?v=4" width="100" height="100" alt="alarno"/><br /><sub><b>alarno</b></sub></a>                 | <a href="https://github.com/andreastempsch"><img src="https://avatars.githubusercontent.com/u/117991125?v=4" width="100" height="100" alt="andreastempsch"/><br /><sub><b>andreastempsch</b></sub></a> |          <a href="https://github.com/Atlogit"><img src="https://avatars.githubusercontent.com/u/86947554?v=4" width="100" height="100" alt="Atlogit"/><br /><sub><b>Atlogit</b></sub></a>           |            <a href="https://github.com/dleen"><img src="https://avatars.githubusercontent.com/u/1297964?v=4" width="100" height="100" alt="dleen"/><br /><sub><b>dleen</b></sub></a>            |                 <a href="https://github.com/dbasclpy"><img src="https://avatars.githubusercontent.com/u/139889137?v=4" width="100" height="100" alt="dbasclpy"/><br /><sub><b>dbasclpy</b></sub></a>                  |
+| <a href="https://github.com/celestial-vault"><img src="https://avatars.githubusercontent.com/u/58194240?v=4" width="100" height="100" alt="celestial-vault"/><br /><sub><b>celestial-vault</b></sub></a> |           <a href="https://github.com/DeXtroTip"><img src="https://avatars.githubusercontent.com/u/21011087?v=4" width="100" height="100" alt="DeXtroTip"/><br /><sub><b>DeXtroTip</b></sub></a>            |              <a href="https://github.com/hesara"><img src="https://avatars.githubusercontent.com/u/1335918?v=4" width="100" height="100" alt="hesara"/><br /><sub><b>hesara</b></sub></a>              |       <a href="https://github.com/eltociear"><img src="https://avatars.githubusercontent.com/u/22633385?v=4" width="100" height="100" alt="eltociear"/><br /><sub><b>eltociear</b></sub></a>        | <a href="https://github.com/libertyteeth"><img src="https://avatars.githubusercontent.com/u/32841567?v=4" width="100" height="100" alt="libertyteeth"/><br /><sub><b>libertyteeth</b></sub></a> |           <a href="https://github.com/mamertofabian"><img src="https://avatars.githubusercontent.com/u/7698436?v=4" width="100" height="100" alt="mamertofabian"/><br /><sub><b>mamertofabian</b></sub></a>           |
+|     <a href="https://github.com/marvijo-code"><img src="https://avatars.githubusercontent.com/u/82562019?v=4" width="100" height="100" alt="marvijo-code"/><br /><sub><b>marvijo-code</b></sub></a>      |                  <a href="https://github.com/Sarke"><img src="https://avatars.githubusercontent.com/u/2719310?v=4" width="100" height="100" alt="Sarke"/><br /><sub><b>Sarke</b></sub></a>                  |               <a href="https://github.com/tgfjt"><img src="https://avatars.githubusercontent.com/u/2628239?v=4" width="100" height="100" alt="tgfjt"/><br /><sub><b>tgfjt</b></sub></a>                |       <a href="https://github.com/vladstudio"><img src="https://avatars.githubusercontent.com/u/914320?v=4" width="100" height="100" alt="vladstudio"/><br /><sub><b>vladstudio</b></sub></a>       |          <a href="https://github.com/ashktn"><img src="https://avatars.githubusercontent.com/u/6723913?v=4" width="100" height="100" alt="ashktn"/><br /><sub><b>ashktn</b></sub></a>           |                                                                                                                                                                                                                       |
+
+<!-- END CONTRIBUTORS SECTION -->
+
+## Giấy Phép
+
+[Apache 2.0 © 2025 Roo Veterinary, Inc.](../LICENSE)
+
+---
+
+**Hãy tận hưởng Roo Code!** Cho dù bạn giữ nó trên dây ngắn hay để nó tự do hoạt động, chúng tôi rất mong được thấy những gì bạn xây dựng. Nếu bạn có câu hỏi hoặc ý tưởng về tính năng, hãy ghé qua [cộng đồng Reddit](https://www.reddit.com/r/RooCode/) hoặc [Discord](https://discord.gg/roocode) của chúng tôi. Chúc lập trình vui vẻ!

+ 73 - 0
locales/zh-CN/CODE_OF_CONDUCT.md

@@ -0,0 +1,73 @@
+# 贡献者契约行为准则
+
+## 我们的承诺
+
+为了营造开放和友好的环境,我们作为
+贡献者和维护者承诺,无论年龄、体型、
+残疾、民族、性别特征、性别认同和表达、经验水平、
+教育程度、社会经济地位、国籍、个人外表、
+种族、宗教或性取向和性别倾向如何,参与我们的项目和
+社区的每个人都将获得无骚扰的体验。
+
+## 我们的标准
+
+有助于创造积极环境的行为示例包括:
+
+- 使用友好和包容的语言
+- 尊重不同的观点和经验
+- 优雅地接受建设性批评
+- 关注对社区最有利的事物
+- 对其他社区成员表示同理心
+
+参与者不可接受的行为示例包括:
+
+- 使用性暗示的语言或图像,以及不受欢迎的性关注或
+- 挑衅、侮辱/贬损性评论以及人身或政治攻击
+- 公开或私下骚扰
+- 未经明确许可发布他人的私人信息,如物理或电子
+  地址
+- 在专业环境中可能被合理认为不适当的
+  其他行为
+
+## 我们的责任
+
+项目维护者有责任澄清可接受行为的标准,
+并被期望采取适当且公正的纠正措施,以回应
+任何不可接受的行为。
+
+项目维护者有权利和责任删除、编辑或
+拒绝与本行为准则不一致的评论、提交、代码、wiki 编辑、问题和其他贡献,
+或暂时或永久地禁止任何贡献者参与其他被他们认为不适当、
+威胁、冒犯或有害的行为。
+
+## 范围
+
+当个人代表项目或其社区时,本行为准则适用于项目空间和公共空间
+。代表项目或社区的示例包括使用官方项目电子邮件
+地址、通过官方社交媒体账户发帖,或作为指定
+代表在线或离线活动中行事。项目的代表可能会
+被项目维护者进一步定义和澄清。
+
+## 执行
+
+可能通过联系项目团队([email protected]
+来报告辱骂、骚扰或其他不可接受的行为的情况。所有
+投诉将被审查和调查,并将导致被认为
+必要且适合情况的回应。项目团队有
+义务对事件报告者保密。
+具体执行政策的更多细节可能会单独发布。
+
+未能真诚地遵循或执行本行为准则的项目维护者
+可能面临由项目其他领导成员确定的暂时或
+永久性影响。
+
+## 归属
+
+本行为准则改编自 [Cline 的版本][cline_coc] 的 [贡献者契约][homepage],版本 1.4,
+可在 https://www.contributor-covenant.org/version/1/4/code-of-conduct.html 获取
+
+[cline_coc]: https://github.com/cline/cline/blob/main/CODE_OF_CONDUCT.md
+[homepage]: https://www.contributor-covenant.org
+
+有关此行为准则的常见问题解答,请参阅
+https://www.contributor-covenant.org/faq

+ 112 - 0
locales/zh-CN/CONTRIBUTING.md

@@ -0,0 +1,112 @@
+# 为 Roo Code 做贡献
+
+我们很高兴您有兴趣为 Roo Code 做贡献。无论您是修复错误、添加功能,还是改进我们的文档,每一个贡献都让 Roo Code 变得更智能!为了保持我们的社区充满活力和欢迎,所有成员必须遵守我们的[行为准则](CODE_OF_CONDUCT.md)。
+
+## 加入我们的社区
+
+我们强烈鼓励所有贡献者加入我们的 [Discord 社区](https://discord.gg/roocode)!成为我们 Discord 服务器的一部分可以帮助您:
+
+- 获得关于您贡献的实时帮助和指导
+- 与其他贡献者和核心团队成员建立联系
+- 了解项目发展和优先事项的最新信息
+- 参与塑造 Roo Code 未来的讨论
+- 寻找与其他开发者的合作机会
+
+## 报告错误或问题
+
+错误报告有助于使 Roo Code 对每个人都更好!在创建新问题之前,请[搜索现有问题](https://github.com/RooVetGit/Roo-Code/issues)以避免重复。当您准备报告错误时,前往我们的[问题页面](https://github.com/RooVetGit/Roo-Code/issues/new/choose),那里有模板可以帮助您填写相关信息。
+
+<blockquote class='warning-note'>
+     🔐 <b>重要提示:</b>如果您发现安全漏洞,请使用 <a href="https://github.com/RooVetGit/Roo-Code/security/advisories/new">Github 安全工具私下报告它</a>。
+</blockquote>
+
+## 决定做什么
+
+寻找一个好的首次贡献?查看我们 [Roo Code Issues](https://github.com/orgs/RooVetGit/projects/1) Github 项目中"Issue [Unassigned]"部分的问题。这些是专门为新贡献者精心挑选的,也是我们希望得到一些帮助的领域!
+
+我们也欢迎对我们的[文档](https://docs.roocode.com/)做贡献!无论是修复错别字、改进现有指南,还是创建新的教育内容 - 我们希望建立一个由社区驱动的资源库,帮助每个人充分利用 Roo Code。您可以点击任何页面上的"Edit this page"快速进入 Github 中编辑文件的正确位置,或者直接访问 https://github.com/RooVetGit/Roo-Code-Docs。
+
+如果您计划处理更大的功能,请先创建一个[功能请求](https://github.com/RooVetGit/Roo-Code/discussions/categories/feature-requests?discussions_q=is%3Aopen+category%3A%22Feature+Requests%22+sort%3Atop),以便我们讨论它是否符合 Roo Code 的愿景。
+
+## 开发设置
+
+1. **克隆**仓库:
+
+```sh
+git clone https://github.com/RooVetGit/Roo-Code.git
+```
+
+2. **安装依赖**:
+
+```sh
+npm run install:all
+```
+
+3. **启动 webview(Vite/React 应用,具有热模块替换)**:
+
+```sh
+npm run dev
+```
+
+4. **调试**:
+   在 VSCode 中按 `F5`(或**运行** → **开始调试**)打开一个加载了 Roo Code 的新会话。
+
+对 webview 的更改将立即显示。对核心扩展的更改将需要重新启动扩展主机。
+
+或者,您可以构建一个 .vsix 文件并直接在 VSCode 中安装:
+
+```sh
+npm run build
+```
+
+`bin/` 目录中将出现一个 `.vsix` 文件,可以用以下命令安装:
+
+```sh
+code --install-extension bin/roo-cline-<version>.vsix
+```
+
+## 编写和提交代码
+
+任何人都可以为 Roo Code 贡献代码,但我们要求您遵循这些指导方针,以确保您的贡献能够顺利集成:
+
+1. **保持 Pull Requests 聚焦**
+
+    - 将 PR 限制在单一功能或错误修复
+    - 将较大的更改分割成更小的相关 PR
+    - 将更改分解为可以独立审查的逻辑提交
+
+2. **代码质量**
+
+    - 所有 PR 必须通过包括 linting 和格式化的 CI 检查
+    - 在提交之前解决任何 ESLint 警告或错误
+    - 回应 Ellipsis(我们的自动代码审查工具)的所有反馈
+    - 遵循 TypeScript 最佳实践并保持类型安全
+
+3. **测试**
+
+    - 为新功能添加测试
+    - 运行 `npm test` 确保所有测试通过
+    - 如果您的更改影响现有测试,请更新它们
+    - 在适当的情况下包括单元测试和集成测试
+
+4. **提交指南**
+
+    - 编写清晰、描述性的提交消息
+    - 在提交中使用 #issue-number 引用相关问题
+
+5. **提交前**
+
+    - 在最新的 main 分支上变基您的分支
+    - 确保您的分支成功构建
+    - 再次检查所有测试是否通过
+    - 检查您的更改中是否有任何调试代码或控制台日志
+
+6. **Pull Request 描述**
+    - 清晰描述您的更改做了什么
+    - 包括测试更改的步骤
+    - 列出任何破坏性更改
+    - 为 UI 更改添加截图
+
+## 贡献协议
+
+通过提交 pull request,您同意您的贡献将在与项目相同的许可下获得许可([Apache 2.0](../LICENSE))。

+ 211 - 0
locales/zh-CN/README.md

@@ -0,0 +1,211 @@
+<div align="center">
+<sub>
+
+[English](../../README.md) • [Català](../../locales/ca/README.md) • [Deutsch](../../locales/de/README.md) • [Español](../../locales/es/README.md) • [Français](../../locales/fr/README.md) • [हिन्दी](../../locales/hi/README.md) • [Italiano](../../locales/it/README.md)
+
+</sub>
+<sub>
+
+[日本語](../../locales/ja/README.md) • [한국어](../../locales/ko/README.md) • [Polski](../../locales/pl/README.md) • [Português (BR)](../../locales/pt-BR/README.md) • [Türkçe](../../locales/tr/README.md) • [Tiếng Việt](../../locales/vi/README.md) • 简体中文 • [繁體中文](../../locales/zh-TW/README.md)
+
+</sub>
+</div>
+<br>
+<div align="center">
+  <h2>加入 Roo Code 社区</h2>
+  <p>与开发者联系,贡献想法,紧跟最新的 AI 驱动编码工具。</p>
+  
+  <a href="https://discord.gg/roocode" target="_blank"><img src="https://img.shields.io/badge/%E5%8A%A0%E5%85%A5%20Discord-5865F2?style=for-the-badge&logo=discord&logoColor=white" alt="加入 Discord"></a>
+  <a href="https://www.reddit.com/r/RooCode/" target="_blank"><img src="https://img.shields.io/badge/%E5%8A%A0%E5%85%A5%20Reddit-FF4500?style=for-the-badge&logo=reddit&logoColor=white" alt="加入 Reddit"></a>
+  
+</div>
+<br>
+<br>
+
+<div align="center">
+<h1>Roo Code(前身为 Roo Cline)</h1>
+
+<a href="https://marketplace.visualstudio.com/items?itemName=RooVeterinaryInc.roo-cline" target="_blank"><img src="https://img.shields.io/badge/%E5%9C%A8%20VS%20Marketplace%20%E4%B8%8A%E4%B8%8B%E8%BD%BD-blue?style=for-the-badge&logo=visualstudiocode&logoColor=white" alt="在 VS Marketplace 上下载"></a>
+<a href="https://github.com/RooVetGit/Roo-Code/discussions/categories/feature-requests?discussions_q=is%3Aopen+category%3A%22Feature+Requests%22+sort%3Atop" target="_blank"><img src="https://img.shields.io/badge/%E5%8A%9F%E8%83%BD%E8%AF%B7%E6%B1%82-yellow?style=for-the-badge" alt="功能请求"></a>
+<a href="https://marketplace.visualstudio.com/items?itemName=RooVeterinaryInc.roo-cline&ssr=false#review-details" target="_blank"><img src="https://img.shields.io/badge/%E8%AF%84%E5%88%86%20%26%20%E8%AF%84%E8%AE%BA-green?style=for-the-badge" alt="评分 & 评论"></a>
+<a href="https://docs.roocode.com" target="_blank"><img src="https://img.shields.io/badge/%E6%96%87%E6%A1%A3-6B46C1?style=for-the-badge&logo=readthedocs&logoColor=white" alt="文档"></a>
+
+</div>
+
+**Roo Code** 是一个 AI 驱动的**自主编码代理**,它存在于您的编辑器中。它可以:
+
+- 用自然语言沟通
+- 直接在您的工作区读写文件
+- 运行终端命令
+- 自动化浏览器操作
+- 与任何 OpenAI 兼容或自定义的 API/模型集成
+- 通过**自定义模式**调整其"个性"和能力
+
+无论您是寻找灵活的编码伙伴、系统架构师,还是像 QA 工程师或产品经理这样的专业角色,Roo Code 都可以帮助您更高效地构建软件。
+
+查看 [CHANGELOG](../CHANGELOG.md) 获取详细更新和修复信息。
+
+---
+
+## 🎉 Roo Code 3.8 已发布
+
+Roo Code 3.8 已经推出,带来性能提升、新功能和错误修复。
+
+- 更快的异步检查点
+- 支持 .rooignore 文件
+- 修复了终端和灰屏问题
+- Roo Code 现可在多个窗口中运行
+- 实验性多差异编辑策略
+- 子任务到父任务的通信
+- 更新了 DeepSeek 提供者
+- 新的"Human Relay"提供者
+
+---
+
+## Roo Code 能做什么?
+
+- 🚀 从自然语言描述**生成代码**
+- 🔧 **重构和调试**现有代码
+- 📝 **编写和更新**文档
+- 🤔 **回答关于**您代码库的问题
+- 🔄 **自动化**重复任务
+- 🏗️ **创建**新文件和项目
+
+## 快速入门
+
+1. [安装 Roo Code](https://docs.roocode.com/getting-started/installing)
+2. [连接您的 AI 提供者](https://docs.roocode.com/getting-started/connecting-api-provider)
+3. [尝试您的第一个任务](https://docs.roocode.com/getting-started/your-first-task)
+
+## 主要特性
+
+### 多种模式
+
+Roo Code 通过专业化的[模式](https://docs.roocode.com/basic-usage/modes)适应您的需求:
+
+- **代码模式:** 用于通用编码任务
+- **架构师模式:** 用于规划和技术领导
+- **询问模式:** 用于回答问题和提供信息
+- **调试模式:** 用于系统性问题诊断
+- **[自定义模式](https://docs.roocode.com/advanced-usage/custom-modes):** 创建无限专业角色,用于安全审计、性能优化、文档编写或任何其他任务
+
+### 智能工具
+
+Roo Code 配备了强大的[工具](https://docs.roocode.com/basic-usage/using-tools),可以:
+
+- 读写项目中的文件
+- 在 VS Code 终端中执行命令
+- 控制网络浏览器
+- 通过 [MCP(模型上下文协议)](https://docs.roocode.com/advanced-usage/mcp)使用外部工具
+
+MCP 通过允许您添加无限自定义工具来扩展 Roo Code 的能力。与外部 API 集成、连接数据库或创建专业开发工具 - MCP 提供了扩展 Roo Code 功能以满足您特定需求的框架。
+
+### 自定义
+
+使 Roo Code 按照您的方式工作:
+
+- [自定义指令](https://docs.roocode.com/advanced-usage/custom-instructions)实现个性化行为
+- [自定义模式](https://docs.roocode.com/advanced-usage/custom-modes)用于专业任务
+- [本地模型](https://docs.roocode.com/advanced-usage/local-models)用于离线使用
+- [自动批准设置](https://docs.roocode.com/advanced-usage/auto-approving-actions)加快工作流程
+
+## 资源
+
+### 文档
+
+- [基本使用指南](https://docs.roocode.com/basic-usage/the-chat-interface)
+- [高级功能](https://docs.roocode.com/advanced-usage/auto-approving-actions)
+- [常见问题](https://docs.roocode.com/faq)
+
+### 社区
+
+- **Discord:** [加入我们的 Discord 服务器](https://discord.gg/roocode)获取实时帮助和讨论
+- **Reddit:** [访问我们的 subreddit](https://www.reddit.com/r/RooCode)分享经验和技巧
+- **GitHub:** 报告[问题](https://github.com/RooVetGit/Roo-Code/issues)或请求[功能](https://github.com/RooVetGit/Roo-Code/discussions/categories/feature-requests?discussions_q=is%3Aopen+category%3A%22Feature+Requests%22+sort%3Atop)
+
+---
+
+## 本地设置和开发
+
+1. **克隆**仓库:
+
+```sh
+git clone https://github.com/RooVetGit/Roo-Code.git
+```
+
+2. **安装依赖**:
+
+```sh
+npm run install:all
+```
+
+3. **启动网页视图(Vite/React 应用,带热模块替换)**:
+
+```sh
+npm run dev
+```
+
+4. **调试**:
+   在 VSCode 中按 `F5`(或**运行** → **开始调试**)打开一个加载了 Roo Code 的新会话。
+
+网页视图的更改将立即显示。核心扩展的更改将需要重启扩展主机。
+
+或者,您可以构建一个 .vsix 文件并直接在 VSCode 中安装:
+
+```sh
+npm run build
+```
+
+`bin/` 目录中将出现一个 `.vsix` 文件,可以用以下命令安装:
+
+```sh
+code --install-extension bin/roo-cline-<version>.vsix
+```
+
+我们使用 [changesets](https://github.com/changesets/changesets) 进行版本控制和发布。查看我们的 `CHANGELOG.md` 获取发布说明。
+
+---
+
+## 免责声明
+
+**请注意**,Roo Veterinary, Inc **不**对与 Roo Code 相关提供或可用的任何代码、模型或其他工具,任何相关的第三方工具,或任何结果作出任何陈述或保证。您承担使用任何此类工具或输出的**所有风险**;此类工具按**"原样"**和**"可用性"**提供。此类风险可能包括但不限于知识产权侵权、网络漏洞或攻击、偏见、不准确、错误、缺陷、病毒、停机时间、财产损失或损坏和/或人身伤害。您对任何此类工具或输出的使用(包括但不限于其合法性、适当性和结果)负全部责任。
+
+---
+
+## 贡献
+
+我们热爱社区贡献!通过阅读我们的 [CONTRIBUTING.md](CONTRIBUTING.md) 开始。
+
+---
+
+## 贡献者
+
+感谢所有帮助改进 Roo Code 的贡献者!
+
+<!-- START CONTRIBUTORS SECTION - AUTO-GENERATED, DO NOT EDIT MANUALLY -->
+
+|               <a href="https://github.com/mrubens"><img src="https://avatars.githubusercontent.com/u/2600?v=4" width="100" height="100" alt="mrubens"/><br /><sub><b>mrubens</b></sub></a>               |         <a href="https://github.com/saoudrizwan"><img src="https://avatars.githubusercontent.com/u/7799382?v=4" width="100" height="100" alt="saoudrizwan"/><br /><sub><b>saoudrizwan</b></sub></a>         |                   <a href="https://github.com/cte"><img src="https://avatars.githubusercontent.com/u/16332?v=4" width="100" height="100" alt="cte"/><br /><sub><b>cte</b></sub></a>                    |          <a href="https://github.com/samhvw8"><img src="https://avatars.githubusercontent.com/u/12538214?v=4" width="100" height="100" alt="samhvw8"/><br /><sub><b>samhvw8</b></sub></a>           |    <a href="https://github.com/daniel-lxs"><img src="https://avatars.githubusercontent.com/u/57051444?v=4" width="100" height="100" alt="daniel-lxs"/><br /><sub><b>daniel-lxs</b></sub></a>    |                   <a href="https://github.com/a8trejo"><img src="https://avatars.githubusercontent.com/u/62401433?v=4" width="100" height="100" alt="a8trejo"/><br /><sub><b>a8trejo</b></sub></a>                    |
+| :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
+|        <a href="https://github.com/ColemanRoo"><img src="https://avatars.githubusercontent.com/u/117104599?v=4" width="100" height="100" alt="ColemanRoo"/><br /><sub><b>ColemanRoo</b></sub></a>        |             <a href="https://github.com/stea9499"><img src="https://avatars.githubusercontent.com/u/4163795?v=4" width="100" height="100" alt="stea9499"/><br /><sub><b>stea9499</b></sub></a>              |     <a href="https://github.com/joemanley201"><img src="https://avatars.githubusercontent.com/u/8299960?v=4" width="100" height="100" alt="joemanley201"/><br /><sub><b>joemanley201</b></sub></a>     |       <a href="https://github.com/System233"><img src="https://avatars.githubusercontent.com/u/20336040?v=4" width="100" height="100" alt="System233"/><br /><sub><b>System233</b></sub></a>        |       <a href="https://github.com/jquanton"><img src="https://avatars.githubusercontent.com/u/88576563?v=4" width="100" height="100" alt="jquanton"/><br /><sub><b>jquanton</b></sub></a>       |              <a href="https://github.com/nissa-seru"><img src="https://avatars.githubusercontent.com/u/119150866?v=4" width="100" height="100" alt="nissa-seru"/><br /><sub><b>nissa-seru</b></sub></a>               |
+|    <a href="https://github.com/hannesrudolph"><img src="https://avatars.githubusercontent.com/u/49103247?v=4" width="100" height="100" alt="hannesrudolph"/><br /><sub><b>hannesrudolph</b></sub></a>    |             <a href="https://github.com/MuriloFP"><img src="https://avatars.githubusercontent.com/u/50873657?v=4" width="100" height="100" alt="MuriloFP"/><br /><sub><b>MuriloFP</b></sub></a>             |             <a href="https://github.com/NyxJae"><img src="https://avatars.githubusercontent.com/u/52313587?v=4" width="100" height="100" alt="NyxJae"/><br /><sub><b>NyxJae</b></sub></a>              |        <a href="https://github.com/punkpeye"><img src="https://avatars.githubusercontent.com/u/108313943?v=4" width="100" height="100" alt="punkpeye"/><br /><sub><b>punkpeye</b></sub></a>         |            <a href="https://github.com/d-oit"><img src="https://avatars.githubusercontent.com/u/6849456?v=4" width="100" height="100" alt="d-oit"/><br /><sub><b>d-oit</b></sub></a>            |            <a href="https://github.com/monotykamary"><img src="https://avatars.githubusercontent.com/u/1130103?v=4" width="100" height="100" alt="monotykamary"/><br /><sub><b>monotykamary</b></sub></a>             |
+|         <a href="https://github.com/lloydchang"><img src="https://avatars.githubusercontent.com/u/1329685?v=4" width="100" height="100" alt="lloydchang"/><br /><sub><b>lloydchang</b></sub></a>         | <a href="https://github.com/vigneshsubbiah16"><img src="https://avatars.githubusercontent.com/u/51325334?v=4" width="100" height="100" alt="vigneshsubbiah16"/><br /><sub><b>vigneshsubbiah16</b></sub></a> |            <a href="https://github.com/Szpadel"><img src="https://avatars.githubusercontent.com/u/1857251?v=4" width="100" height="100" alt="Szpadel"/><br /><sub><b>Szpadel</b></sub></a>             |       <a href="https://github.com/lupuletic"><img src="https://avatars.githubusercontent.com/u/105351510?v=4" width="100" height="100" alt="lupuletic"/><br /><sub><b>lupuletic</b></sub></a>       |        <a href="https://github.com/cannuri"><img src="https://avatars.githubusercontent.com/u/91494156?v=4" width="100" height="100" alt="cannuri"/><br /><sub><b>cannuri</b></sub></a>         | <a href="https://github.com/Smartsheet-JB-Brown"><img src="https://avatars.githubusercontent.com/u/171734120?v=4" width="100" height="100" alt="Smartsheet-JB-Brown"/><br /><sub><b>Smartsheet-JB-Brown</b></sub></a> |
+|           <a href="https://github.com/Premshay"><img src="https://avatars.githubusercontent.com/u/28099628?v=4" width="100" height="100" alt="Premshay"/><br /><sub><b>Premshay</b></sub></a>            |              <a href="https://github.com/psv2522"><img src="https://avatars.githubusercontent.com/u/87223770?v=4" width="100" height="100" alt="psv2522"/><br /><sub><b>psv2522</b></sub></a>               |      <a href="https://github.com/olweraltuve"><img src="https://avatars.githubusercontent.com/u/39308405?v=4" width="100" height="100" alt="olweraltuve"/><br /><sub><b>olweraltuve</b></sub></a>      |       <a href="https://github.com/RaySinner"><img src="https://avatars.githubusercontent.com/u/118297374?v=4" width="100" height="100" alt="RaySinner"/><br /><sub><b>RaySinner</b></sub></a>       |            <a href="https://github.com/qdaxb"><img src="https://avatars.githubusercontent.com/u/4157870?v=4" width="100" height="100" alt="qdaxb"/><br /><sub><b>qdaxb</b></sub></a>            |                <a href="https://github.com/feifei325"><img src="https://avatars.githubusercontent.com/u/46489071?v=4" width="100" height="100" alt="feifei325"/><br /><sub><b>feifei325</b></sub></a>                 |
+|      <a href="https://github.com/afshawnlotfi"><img src="https://avatars.githubusercontent.com/u/6283745?v=4" width="100" height="100" alt="afshawnlotfi"/><br /><sub><b>afshawnlotfi</b></sub></a>      |              <a href="https://github.com/emshvac"><img src="https://avatars.githubusercontent.com/u/121588911?v=4" width="100" height="100" alt="emshvac"/><br /><sub><b>emshvac</b></sub></a>              |         <a href="https://github.com/Lunchb0ne"><img src="https://avatars.githubusercontent.com/u/22198661?v=4" width="100" height="100" alt="Lunchb0ne"/><br /><sub><b>Lunchb0ne</b></sub></a>         |             <a href="https://github.com/sammcj"><img src="https://avatars.githubusercontent.com/u/862951?v=4" width="100" height="100" alt="sammcj"/><br /><sub><b>sammcj</b></sub></a>             |       <a href="https://github.com/dtrugman"><img src="https://avatars.githubusercontent.com/u/2451669?v=4" width="100" height="100" alt="dtrugman"/><br /><sub><b>dtrugman</b></sub></a>        |                 <a href="https://github.com/aitoroses"><img src="https://avatars.githubusercontent.com/u/1699368?v=4" width="100" height="100" alt="aitoroses"/><br /><sub><b>aitoroses</b></sub></a>                 |
+|           <a href="https://github.com/yt3trees"><img src="https://avatars.githubusercontent.com/u/57471763?v=4" width="100" height="100" alt="yt3trees"/><br /><sub><b>yt3trees</b></sub></a>            |              <a href="https://github.com/yongjer"><img src="https://avatars.githubusercontent.com/u/54315206?v=4" width="100" height="100" alt="yongjer"/><br /><sub><b>yongjer</b></sub></a>               |      <a href="https://github.com/vincentsong"><img src="https://avatars.githubusercontent.com/u/2343574?v=4" width="100" height="100" alt="vincentsong"/><br /><sub><b>vincentsong</b></sub></a>       | <a href="https://github.com/pugazhendhi-m"><img src="https://avatars.githubusercontent.com/u/132246623?v=4" width="100" height="100" alt="pugazhendhi-m"/><br /><sub><b>pugazhendhi-m</b></sub></a> |           <a href="https://github.com/eonghk"><img src="https://avatars.githubusercontent.com/u/139964?v=4" width="100" height="100" alt="eonghk"/><br /><sub><b>eonghk</b></sub></a>           |                  <a href="https://github.com/philfung"><img src="https://avatars.githubusercontent.com/u/1054593?v=4" width="100" height="100" alt="philfung"/><br /><sub><b>philfung</b></sub></a>                   |
+|               <a href="https://github.com/pdecat"><img src="https://avatars.githubusercontent.com/u/318490?v=4" width="100" height="100" alt="pdecat"/><br /><sub><b>pdecat</b></sub></a>                |                <a href="https://github.com/napter"><img src="https://avatars.githubusercontent.com/u/6260841?v=4" width="100" height="100" alt="napter"/><br /><sub><b>napter</b></sub></a>                 |                    <a href="https://github.com/mdp"><img src="https://avatars.githubusercontent.com/u/2868?v=4" width="100" height="100" alt="mdp"/><br /><sub><b>mdp</b></sub></a>                    |            <a href="https://github.com/jcbdev"><img src="https://avatars.githubusercontent.com/u/17152092?v=4" width="100" height="100" alt="jcbdev"/><br /><sub><b>jcbdev</b></sub></a>            |      <a href="https://github.com/benzntech"><img src="https://avatars.githubusercontent.com/u/4044180?v=4" width="100" height="100" alt="benzntech"/><br /><sub><b>benzntech</b></sub></a>      |              <a href="https://github.com/anton-otee"><img src="https://avatars.githubusercontent.com/u/149477749?v=4" width="100" height="100" alt="anton-otee"/><br /><sub><b>anton-otee</b></sub></a>               |
+|             <a href="https://github.com/AMHesch"><img src="https://avatars.githubusercontent.com/u/4777192?v=4" width="100" height="100" alt="AMHesch"/><br /><sub><b>AMHesch</b></sub></a>              |              <a href="https://github.com/bannzai"><img src="https://avatars.githubusercontent.com/u/10897361?v=4" width="100" height="100" alt="bannzai"/><br /><sub><b>bannzai</b></sub></a>               |           <a href="https://github.com/dairui1"><img src="https://avatars.githubusercontent.com/u/183250644?v=4" width="100" height="100" alt="dairui1"/><br /><sub><b>dairui1</b></sub></a>            |           <a href="https://github.com/dqroid"><img src="https://avatars.githubusercontent.com/u/192424994?v=4" width="100" height="100" alt="dqroid"/><br /><sub><b>dqroid</b></sub></a>            |      <a href="https://github.com/kinandan"><img src="https://avatars.githubusercontent.com/u/186135699?v=4" width="100" height="100" alt="kinandan"/><br /><sub><b>kinandan</b></sub></a>       |                       <a href="https://github.com/kohii"><img src="https://avatars.githubusercontent.com/u/6891780?v=4" width="100" height="100" alt="kohii"/><br /><sub><b>kohii</b></sub></a>                       |
+|       <a href="https://github.com/lightrabbit"><img src="https://avatars.githubusercontent.com/u/1521765?v=4" width="100" height="100" alt="lightrabbit"/><br /><sub><b>lightrabbit</b></sub></a>        |                   <a href="https://github.com/olup"><img src="https://avatars.githubusercontent.com/u/13785588?v=4" width="100" height="100" alt="olup"/><br /><sub><b>olup</b></sub></a>                   |      <a href="https://github.com/moqimoqidea"><img src="https://avatars.githubusercontent.com/u/39821951?v=4" width="100" height="100" alt="moqimoqidea"/><br /><sub><b>moqimoqidea</b></sub></a>      |        <a href="https://github.com/mosleyit"><img src="https://avatars.githubusercontent.com/u/189396442?v=4" width="100" height="100" alt="mosleyit"/><br /><sub><b>mosleyit</b></sub></a>         |       <a href="https://github.com/oprstchn"><img src="https://avatars.githubusercontent.com/u/16177972?v=4" width="100" height="100" alt="oprstchn"/><br /><sub><b>oprstchn</b></sub></a>       |               <a href="https://github.com/philipnext"><img src="https://avatars.githubusercontent.com/u/81944499?v=4" width="100" height="100" alt="philipnext"/><br /><sub><b>philipnext</b></sub></a>               |
+|      <a href="https://github.com/refactorthis"><img src="https://avatars.githubusercontent.com/u/3012240?v=4" width="100" height="100" alt="refactorthis"/><br /><sub><b>refactorthis</b></sub></a>      |      <a href="https://github.com/samir-nimbly"><img src="https://avatars.githubusercontent.com/u/112695483?v=4" width="100" height="100" alt="samir-nimbly"/><br /><sub><b>samir-nimbly</b></sub></a>       |              <a href="https://github.com/shaybc"><img src="https://avatars.githubusercontent.com/u/8535905?v=4" width="100" height="100" alt="shaybc"/><br /><sub><b>shaybc</b></sub></a>              |   <a href="https://github.com/shohei-ihaya"><img src="https://avatars.githubusercontent.com/u/25131938?v=4" width="100" height="100" alt="shohei-ihaya"/><br /><sub><b>shohei-ihaya</b></sub></a>   | <a href="https://github.com/student20880"><img src="https://avatars.githubusercontent.com/u/74263488?v=4" width="100" height="100" alt="student20880"/><br /><sub><b>student20880</b></sub></a> |          <a href="https://github.com/PretzelVector"><img src="https://avatars.githubusercontent.com/u/95664360?v=4" width="100" height="100" alt="PretzelVector"/><br /><sub><b>PretzelVector</b></sub></a>           |
+|       <a href="https://github.com/adamwlarson"><img src="https://avatars.githubusercontent.com/u/1392315?v=4" width="100" height="100" alt="adamwlarson"/><br /><sub><b>adamwlarson</b></sub></a>        |                <a href="https://github.com/alarno"><img src="https://avatars.githubusercontent.com/u/4355547?v=4" width="100" height="100" alt="alarno"/><br /><sub><b>alarno</b></sub></a>                 | <a href="https://github.com/andreastempsch"><img src="https://avatars.githubusercontent.com/u/117991125?v=4" width="100" height="100" alt="andreastempsch"/><br /><sub><b>andreastempsch</b></sub></a> |          <a href="https://github.com/Atlogit"><img src="https://avatars.githubusercontent.com/u/86947554?v=4" width="100" height="100" alt="Atlogit"/><br /><sub><b>Atlogit</b></sub></a>           |            <a href="https://github.com/dleen"><img src="https://avatars.githubusercontent.com/u/1297964?v=4" width="100" height="100" alt="dleen"/><br /><sub><b>dleen</b></sub></a>            |                 <a href="https://github.com/dbasclpy"><img src="https://avatars.githubusercontent.com/u/139889137?v=4" width="100" height="100" alt="dbasclpy"/><br /><sub><b>dbasclpy</b></sub></a>                  |
+| <a href="https://github.com/celestial-vault"><img src="https://avatars.githubusercontent.com/u/58194240?v=4" width="100" height="100" alt="celestial-vault"/><br /><sub><b>celestial-vault</b></sub></a> |           <a href="https://github.com/DeXtroTip"><img src="https://avatars.githubusercontent.com/u/21011087?v=4" width="100" height="100" alt="DeXtroTip"/><br /><sub><b>DeXtroTip</b></sub></a>            |              <a href="https://github.com/hesara"><img src="https://avatars.githubusercontent.com/u/1335918?v=4" width="100" height="100" alt="hesara"/><br /><sub><b>hesara</b></sub></a>              |       <a href="https://github.com/eltociear"><img src="https://avatars.githubusercontent.com/u/22633385?v=4" width="100" height="100" alt="eltociear"/><br /><sub><b>eltociear</b></sub></a>        | <a href="https://github.com/libertyteeth"><img src="https://avatars.githubusercontent.com/u/32841567?v=4" width="100" height="100" alt="libertyteeth"/><br /><sub><b>libertyteeth</b></sub></a> |           <a href="https://github.com/mamertofabian"><img src="https://avatars.githubusercontent.com/u/7698436?v=4" width="100" height="100" alt="mamertofabian"/><br /><sub><b>mamertofabian</b></sub></a>           |
+|     <a href="https://github.com/marvijo-code"><img src="https://avatars.githubusercontent.com/u/82562019?v=4" width="100" height="100" alt="marvijo-code"/><br /><sub><b>marvijo-code</b></sub></a>      |                  <a href="https://github.com/Sarke"><img src="https://avatars.githubusercontent.com/u/2719310?v=4" width="100" height="100" alt="Sarke"/><br /><sub><b>Sarke</b></sub></a>                  |               <a href="https://github.com/tgfjt"><img src="https://avatars.githubusercontent.com/u/2628239?v=4" width="100" height="100" alt="tgfjt"/><br /><sub><b>tgfjt</b></sub></a>                |       <a href="https://github.com/vladstudio"><img src="https://avatars.githubusercontent.com/u/914320?v=4" width="100" height="100" alt="vladstudio"/><br /><sub><b>vladstudio</b></sub></a>       |          <a href="https://github.com/ashktn"><img src="https://avatars.githubusercontent.com/u/6723913?v=4" width="100" height="100" alt="ashktn"/><br /><sub><b>ashktn</b></sub></a>           |                                                                                                                                                                                                                       |
+
+<!-- END CONTRIBUTORS SECTION -->
+
+## 许可证
+
+[Apache 2.0 © 2025 Roo Veterinary, Inc.](../LICENSE)
+
+---
+
+**享受 Roo Code!** 无论您是让它保持短绳还是让它自主漫游,我们都迫不及待地想看看您会构建什么。如果您有问题或功能想法,请访问我们的 [Reddit 社区](https://www.reddit.com/r/RooCode/)或 [Discord](https://discord.gg/roocode)。编码愉快!

+ 75 - 0
locales/zh-TW/CODE_OF_CONDUCT.md

@@ -0,0 +1,75 @@
+# 貢獻者公約行為準則
+
+## 我們的承諾
+
+為了營造開放和友善的環境,我們作為
+貢獻者和維護者承諾參與我們的項目和
+我們的社區將成為每個人免受騷擾的體驗,無論年齡、體型、
+殘疾、種族、性別特徵、性別認同和表達、
+經驗水平、教育程度、社會經濟地位、國籍、個人
+外貌、種族、宗教或性認同和性取向如何。
+
+## 我們的標準
+
+有助於創造積極環境的行為示例
+包括:
+
+- 使用友善和包容的語言
+- 尊重不同的觀點和經驗
+- 優雅地接受建設性批評
+- 關注對社區最有利的事物
+- 對其他社區成員表現同理心
+
+參與者不可接受的行為示例包括:
+
+- 使用與性相關的語言或圖像以及不受歡迎的性關注或
+  進展
+- 惡意攻擊、侮辱/貶損評論以及個人或政治攻擊
+- 公開或私下騷擾
+- 未經明確許可發布他人的私人信息,如實體或電子
+  地址
+- 在專業環境中可能被合理地認為不適當的其他行為
+
+## 我們的責任
+
+項目維護者有責任明確行為標準,
+並應採取適當和公平的糾正措施來
+應對任何不可接受的行為。
+
+項目維護者有權利和責任刪除、編輯或
+拒絕與本行為準則不符的評論、提交、代碼、維基編輯、問題和其他貢獻,
+或暫時或永久禁止任何其他被認為不適當、
+威脅、冒犯或有害的行為的貢獻者。
+
+## 範圍
+
+本行為準則適用於項目空間和公共空間,
+當個人代表項目或其社區時。代表
+項目或社區的示例包括使用官方項目電子郵件地址、
+通過官方社交媒體帳戶發布,或在線上或線下活動中擔任指定
+代表。項目的代表行為可能會由
+項目維護者進一步定義和澄清。
+
+## 執行
+
+可以通過聯繫項目團隊 [email protected] 來報告
+辱罵、騷擾或其他不可接受的行為。所有
+投訴將被審查和調查,並將導致被認為
+必要且適合情況的回應。項目團隊有
+義務對事件的報告者保密。
+具體執行政策的更多細節可能會單獨公布。
+
+未真誠遵循或執行行為準則的項目維護者
+可能會面臨由項目
+領導其他成員確定的暫時或永久性後果。
+
+## 歸屬
+
+本行為準則改編自 [Cline 的版本][cline_coc] 的 [貢獻者公約][homepage],版本 1.4,
+可在 https://www.contributor-covenant.org/version/1/4/code-of-conduct.html 獲取
+
+[cline_coc]: https://github.com/cline/cline/blob/main/CODE_OF_CONDUCT.md
+[homepage]: https://www.contributor-covenant.org
+
+關於本行為準則的常見問題解答,請參見
+https://www.contributor-covenant.org/faq

+ 112 - 0
locales/zh-TW/CONTRIBUTING.md

@@ -0,0 +1,112 @@
+# 貢獻於 Roo Code
+
+我們很高興您有興趣為 Roo Code 做出貢獻。無論您是修復錯誤、新增功能,還是改進我們的文檔,每一份貢獻都使 Roo Code 變得更智慧!為了保持我們社區的活力和友善,所有成員必須遵守我們的[行為準則](CODE_OF_CONDUCT.md)。
+
+## 加入我們的社區
+
+我們強烈鼓勵所有貢獻者加入我們的 [Discord 社區](https://discord.gg/roocode)!成為我們 Discord 伺服器的一部分可幫助您:
+
+- 獲得關於您貢獻的即時幫助和指導
+- 與其他貢獻者和核心團隊成員連接
+- 了解專案發展和優先事項的最新情況
+- 參與塑造 Roo Code 未來的討論
+- 尋找與其他開發者合作的機會
+
+## 報告錯誤或問題
+
+錯誤報告有助於為每個人改進 Roo Code!在創建新問題之前,請[搜索現有問題](https://github.com/RooVetGit/Roo-Code/issues)以避免重複。當您準備報告錯誤時,請前往我們的[問題頁面](https://github.com/RooVetGit/Roo-Code/issues/new/choose),在那裡您會找到幫助您填寫相關信息的模板。
+
+<blockquote class='warning-note'>
+     🔐 <b>重要:</b> 如果您發現安全漏洞,請使用 <a href="https://github.com/RooVetGit/Roo-Code/security/advisories/new">Github 安全工具私下報告</a>。
+</blockquote>
+
+## 決定從事何種工作
+
+尋找一個良好的首次貢獻機會?查看我們 [Roo Code Issues](https://github.com/orgs/RooVetGit/projects/1) Github 專案中 "Issue [Unassigned]" 部分的問題。這些專門為新貢獻者及我們需要一些幫助的領域精心挑選!
+
+我們也歡迎對我們的[文檔](https://docs.roocode.com/)進行貢獻!無論是修正錯別字、改進現有指南,還是創建新的教育內容 - 我們希望建立一個社區驅動的資源庫,幫助每個人充分利用 Roo Code。您可以點擊任何頁面上的 "Edit this page" 快速進入 Github 中編輯文件的正確位置,或者您可以直接進入 https://github.com/RooVetGit/Roo-Code-Docs。
+
+如果您計劃從事更大的功能開發,請先創建一個[功能請求](https://github.com/RooVetGit/Roo-Code/discussions/categories/feature-requests?discussions_q=is%3Aopen+category%3A%22Feature+Requests%22+sort%3Atop),這樣我們可以討論它是否符合 Roo Code 的願景。
+
+## 開發設置
+
+1. **克隆**存儲庫:
+
+```sh
+git clone https://github.com/RooVetGit/Roo-Code.git
+```
+
+2. **安裝依賴項**:
+
+```sh
+npm run install:all
+```
+
+3. **啟動網頁視圖(帶有 HMR 的 Vite/React 應用)**:
+
+```sh
+npm run dev
+```
+
+4. **調試**:
+   在 VSCode 中按 `F5`(或**運行** → **開始調試**)打開一個加載了 Roo Code 的新會話。
+
+網頁視圖的更改將立即顯示。核心擴展的更改將需要重新啟動擴展主機。
+
+或者,您可以構建一個 .vsix 文件並直接在 VSCode 中安裝:
+
+```sh
+npm run build
+```
+
+一個 `.vsix` 文件將出現在 `bin/` 目錄中,可以使用以下命令安裝:
+
+```sh
+code --install-extension bin/roo-cline-<version>.vsix
+```
+
+## 編寫和提交代碼
+
+任何人都可以為 Roo Code 貢獻代碼,但我們要求您遵循以下準則,以確保您的貢獻能夠順利整合:
+
+1. **保持拉取請求的專注性**
+
+    - 將 PR 限制在單一功能或錯誤修復上
+    - 將較大的更改分成較小的、相關的 PR
+    - 將更改分成可以獨立審查的邏輯提交
+
+2. **代碼質量**
+
+    - 所有 PR 必須通過 CI 檢查,包括 linting 和格式化
+    - 提交前解決任何 ESLint 警告或錯誤
+    - 回應 Ellipsis(我們的自動代碼審查工具)的所有反饋
+    - 遵循 TypeScript 最佳實踐並保持類型安全
+
+3. **測試**
+
+    - 為新功能添加測試
+    - 運行 `npm test` 確保所有測試通過
+    - 如果您的更改影響到它們,請更新現有測試
+    - 在適當的情況下包括單元測試和集成測試
+
+4. **提交準則**
+
+    - 編寫清晰、描述性的提交消息
+    - 使用 #issue-number 在提交中引用相關問題
+
+5. **提交前**
+
+    - 將您的分支重新基於最新的 main
+    - 確保您的分支成功構建
+    - 再次檢查所有測試是否通過
+    - 檢查您的更改中是否有任何調試代碼或控制台日誌
+
+6. **拉取請求描述**
+    - 清楚描述您的更改做了什麼
+    - 包括測試更改的步驟
+    - 列出任何重大更改
+    - 為 UI 更改添加截圖
+
+## 貢獻協議
+
+通過提交拉取請求,您同意您的貢獻將根據與專案相同的許可證([Apache 2.0](../LICENSE))進行許可。

+ 211 - 0
locales/zh-TW/README.md

@@ -0,0 +1,211 @@
+<div align="center">
+<sub>
+
+[English](../../README.md) • [Català](../../locales/ca/README.md) • [Deutsch](../../locales/de/README.md) • [Español](../../locales/es/README.md) • [Français](../../locales/fr/README.md) • [हिन्दी](../../locales/hi/README.md) • [Italiano](../../locales/it/README.md)
+
+</sub>
+<sub>
+
+[日本語](../../locales/ja/README.md) • [한국어](../../locales/ko/README.md) • [Polski](../../locales/pl/README.md) • [Português (BR)](../../locales/pt-BR/README.md) • [Türkçe](../../locales/tr/README.md) • [Tiếng Việt](../../locales/vi/README.md) • [简体中文](../../locales/zh-CN/README.md) • 繁體中文
+
+</sub>
+</div>
+<br>
+<div align="center">
+  <h2>加入 Roo Code 社群</h2>
+  <p>與開發者連結,貢獻想法,並了解最新的 AI 驅動的編碼工具。</p>
+  
+  <a href="https://discord.gg/roocode" target="_blank"><img src="https://img.shields.io/badge/加入%20Discord-5865F2?style=for-the-badge&logo=discord&logoColor=white" alt="加入 Discord"></a>
+  <a href="https://www.reddit.com/r/RooCode/" target="_blank"><img src="https://img.shields.io/badge/加入%20Reddit-FF4500?style=for-the-badge&logo=reddit&logoColor=white" alt="加入 Reddit"></a>
+  
+</div>
+<br>
+<br>
+
+<div align="center">
+<h1>Roo Code(前身為 Roo Cline)</h1>
+
+<a href="https://marketplace.visualstudio.com/items?itemName=RooVeterinaryInc.roo-cline" target="_blank"><img src="https://img.shields.io/badge/從%20VS%20Marketplace%20下載-blue?style=for-the-badge&logo=visualstudiocode&logoColor=white" alt="從 VS Marketplace 下載"></a>
+<a href="https://github.com/RooVetGit/Roo-Code/discussions/categories/feature-requests?discussions_q=is%3Aopen+category%3A%22Feature+Requests%22+sort%3Atop" target="_blank"><img src="https://img.shields.io/badge/功能請求-yellow?style=for-the-badge" alt="功能請求"></a>
+<a href="https://marketplace.visualstudio.com/items?itemName=RooVeterinaryInc.roo-cline&ssr=false#review-details" target="_blank"><img src="https://img.shields.io/badge/評分%20%26%20評論-green?style=for-the-badge" alt="評分 & 評論"></a>
+<a href="https://docs.roocode.com" target="_blank"><img src="https://img.shields.io/badge/文檔-6B46C1?style=for-the-badge&logo=readthedocs&logoColor=white" alt="文檔"></a>
+
+</div>
+
+**Roo Code** 是一個存在於您編輯器中的 AI 驅動的**自主編碼代理**。它可以:
+
+- 使用自然語言溝通
+- 直接在您的工作區讀寫文件
+- 執行終端命令
+- 自動化瀏覽器操作
+- 與任何 OpenAI 兼容或自定義的 API/模型整合
+- 通過**自定義模式**調整其"個性"和能力
+
+無論您是尋找一個靈活的編碼夥伴、系統架構師,還是專業角色如 QA 工程師或產品經理,Roo Code 都能幫助您更高效地構建軟件。
+
+查看 [CHANGELOG](../CHANGELOG.md) 了解詳細更新和修復。
+
+---
+
+## 🎉 Roo Code 3.8 已發布
+
+Roo Code 3.8 已推出,帶來性能提升、新功能和錯誤修復。
+
+- 更快的異步檢查點
+- 支持 .rooignore 文件
+- 修復終端和灰屏問題
+- Roo Code 可在多個窗口中運行
+- 實驗性多差異編輯策略
+- 子任務到父任務通信
+- 更新的 DeepSeek 提供者
+- 新的"人類中繼"提供者
+
+---
+
+## Roo Code 能做什麼?
+
+- 🚀 從自然語言描述**生成代碼**
+- 🔧 **重構和調試**現有代碼
+- 📝 **編寫和更新**文檔
+- 🤔 **回答關於**您代碼庫的問題
+- 🔄 **自動化**重複性任務
+- 🏗️ **創建**新文件和項目
+
+## 快速開始
+
+1. [安裝 Roo Code](https://docs.roocode.com/getting-started/installing)
+2. [連接您的 AI 提供者](https://docs.roocode.com/getting-started/connecting-api-provider)
+3. [嘗試您的第一個任務](https://docs.roocode.com/getting-started/your-first-task)
+
+## 主要特點
+
+### 多種模式
+
+Roo Code 通過專業化的[模式](https://docs.roocode.com/basic-usage/modes)適應您的需求:
+
+- **代碼模式:** 用於通用編碼任務
+- **架構師模式:** 用於規劃和技術領導
+- **詢問模式:** 用於回答問題和提供信息
+- **調試模式:** 用於系統性問題診斷
+- **[自定義模式](https://docs.roocode.com/advanced-usage/custom-modes):** 創建無限的專業角色,用於安全審計、性能優化、文檔或任何其他任務
+
+### 智能工具
+
+Roo Code 配備強大的[工具](https://docs.roocode.com/basic-usage/using-tools),可以:
+
+- 讀寫您項目中的文件
+- 在您的 VS Code 終端中執行命令
+- 控制網頁瀏覽器
+- 通過 [MCP (Model Context Protocol)](https://docs.roocode.com/advanced-usage/mcp) 使用外部工具
+
+MCP 擴展了 Roo Code 的能力,允許您添加無限的自定義工具。與外部 API 整合,連接到數據庫,或創建專業開發工具 - MCP 提供了擴展 Roo Code 功能以滿足您特定需求的框架。
+
+### 自定義
+
+讓 Roo Code 按照您的方式工作:
+
+- [自定義指令](https://docs.roocode.com/advanced-usage/custom-instructions)用於個性化行為
+- [自定義模式](https://docs.roocode.com/advanced-usage/custom-modes)用於專業任務
+- [本地模型](https://docs.roocode.com/advanced-usage/local-models)用於離線使用
+- [自動批准設置](https://docs.roocode.com/advanced-usage/auto-approving-actions)用於更快的工作流程
+
+## 資源
+
+### 文檔
+
+- [基本使用指南](https://docs.roocode.com/basic-usage/the-chat-interface)
+- [進階功能](https://docs.roocode.com/advanced-usage/auto-approving-actions)
+- [常見問題](https://docs.roocode.com/faq)
+
+### 社群
+
+- **Discord:** [加入我們的 Discord 服務器](https://discord.gg/roocode)獲取實時幫助和討論
+- **Reddit:** [訪問我們的 subreddit](https://www.reddit.com/r/RooCode)分享經驗和技巧
+- **GitHub:** [報告問題](https://github.com/RooVetGit/Roo-Code/issues)或[請求功能](https://github.com/RooVetGit/Roo-Code/discussions/categories/feature-requests?discussions_q=is%3Aopen+category%3A%22Feature+Requests%22+sort%3Atop)
+
+---
+
+## 本地設置和開發
+
+1. **克隆**存儲庫:
+
+```sh
+git clone https://github.com/RooVetGit/Roo-Code.git
+```
+
+2. **安裝依賴**:
+
+```sh
+npm run install:all
+```
+
+3. **啟動網頁視圖(帶有 HMR 的 Vite/React 應用)**:
+
+```sh
+npm run dev
+```
+
+4. **調試**:
+   在 VSCode 中按 `F5`(或**運行** → **開始調試**)打開一個加載了 Roo Code 的新會話。
+
+網頁視圖的更改將立即顯示。核心擴展的更改將需要重新啟動擴展主機。
+
+或者,您可以構建一個 .vsix 文件並直接在 VSCode 中安裝:
+
+```sh
+npm run build
+```
+
+一個 `.vsix` 文件將出現在 `bin/` 目錄中,可以使用以下命令安裝:
+
+```sh
+code --install-extension bin/roo-cline-<version>.vsix
+```
+
+我們使用 [changesets](https://github.com/changesets/changesets) 進行版本控制和發布。查看我們的 `CHANGELOG.md` 獲取發布說明。
+
+---
+
+## 免責聲明
+
+**請注意**,Roo Veterinary, Inc **不**對與 Roo Code 相關的任何代碼、模型或其他工具,任何相關的第三方工具,或任何產生的輸出做出任何陳述或保證。您承擔使用此類工具或輸出的**所有風險**;這些工具按**"原樣"**和**"可用性"**提供。這些風險可能包括但不限於智慧財產侵權、網絡漏洞或攻擊、偏見、不準確、錯誤、缺陷、病毒、停機時間、財產損失或損壞和/或人身傷害。您對這些工具或輸出的使用(包括但不限於其合法性、適當性和結果)完全負責。
+
+---
+
+## 貢獻
+
+我們喜歡社區貢獻!通過閱讀我們的 [CONTRIBUTING.md](CONTRIBUTING.md) 開始。
+
+---
+
+## 貢獻者
+
+感謝所有幫助改進 Roo Code 的貢獻者!
+
+<!-- START CONTRIBUTORS SECTION - AUTO-GENERATED, DO NOT EDIT MANUALLY -->
+
+|               <a href="https://github.com/mrubens"><img src="https://avatars.githubusercontent.com/u/2600?v=4" width="100" height="100" alt="mrubens"/><br /><sub><b>mrubens</b></sub></a>               |         <a href="https://github.com/saoudrizwan"><img src="https://avatars.githubusercontent.com/u/7799382?v=4" width="100" height="100" alt="saoudrizwan"/><br /><sub><b>saoudrizwan</b></sub></a>         |                   <a href="https://github.com/cte"><img src="https://avatars.githubusercontent.com/u/16332?v=4" width="100" height="100" alt="cte"/><br /><sub><b>cte</b></sub></a>                    |          <a href="https://github.com/samhvw8"><img src="https://avatars.githubusercontent.com/u/12538214?v=4" width="100" height="100" alt="samhvw8"/><br /><sub><b>samhvw8</b></sub></a>           |    <a href="https://github.com/daniel-lxs"><img src="https://avatars.githubusercontent.com/u/57051444?v=4" width="100" height="100" alt="daniel-lxs"/><br /><sub><b>daniel-lxs</b></sub></a>    |                   <a href="https://github.com/a8trejo"><img src="https://avatars.githubusercontent.com/u/62401433?v=4" width="100" height="100" alt="a8trejo"/><br /><sub><b>a8trejo</b></sub></a>                    |
+| :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
+|        <a href="https://github.com/ColemanRoo"><img src="https://avatars.githubusercontent.com/u/117104599?v=4" width="100" height="100" alt="ColemanRoo"/><br /><sub><b>ColemanRoo</b></sub></a>        |             <a href="https://github.com/stea9499"><img src="https://avatars.githubusercontent.com/u/4163795?v=4" width="100" height="100" alt="stea9499"/><br /><sub><b>stea9499</b></sub></a>              |     <a href="https://github.com/joemanley201"><img src="https://avatars.githubusercontent.com/u/8299960?v=4" width="100" height="100" alt="joemanley201"/><br /><sub><b>joemanley201</b></sub></a>     |       <a href="https://github.com/System233"><img src="https://avatars.githubusercontent.com/u/20336040?v=4" width="100" height="100" alt="System233"/><br /><sub><b>System233</b></sub></a>        |       <a href="https://github.com/jquanton"><img src="https://avatars.githubusercontent.com/u/88576563?v=4" width="100" height="100" alt="jquanton"/><br /><sub><b>jquanton</b></sub></a>       |              <a href="https://github.com/nissa-seru"><img src="https://avatars.githubusercontent.com/u/119150866?v=4" width="100" height="100" alt="nissa-seru"/><br /><sub><b>nissa-seru</b></sub></a>               |
+|    <a href="https://github.com/hannesrudolph"><img src="https://avatars.githubusercontent.com/u/49103247?v=4" width="100" height="100" alt="hannesrudolph"/><br /><sub><b>hannesrudolph</b></sub></a>    |             <a href="https://github.com/MuriloFP"><img src="https://avatars.githubusercontent.com/u/50873657?v=4" width="100" height="100" alt="MuriloFP"/><br /><sub><b>MuriloFP</b></sub></a>             |             <a href="https://github.com/NyxJae"><img src="https://avatars.githubusercontent.com/u/52313587?v=4" width="100" height="100" alt="NyxJae"/><br /><sub><b>NyxJae</b></sub></a>              |        <a href="https://github.com/punkpeye"><img src="https://avatars.githubusercontent.com/u/108313943?v=4" width="100" height="100" alt="punkpeye"/><br /><sub><b>punkpeye</b></sub></a>         |            <a href="https://github.com/d-oit"><img src="https://avatars.githubusercontent.com/u/6849456?v=4" width="100" height="100" alt="d-oit"/><br /><sub><b>d-oit</b></sub></a>            |            <a href="https://github.com/monotykamary"><img src="https://avatars.githubusercontent.com/u/1130103?v=4" width="100" height="100" alt="monotykamary"/><br /><sub><b>monotykamary</b></sub></a>             |
+|         <a href="https://github.com/lloydchang"><img src="https://avatars.githubusercontent.com/u/1329685?v=4" width="100" height="100" alt="lloydchang"/><br /><sub><b>lloydchang</b></sub></a>         | <a href="https://github.com/vigneshsubbiah16"><img src="https://avatars.githubusercontent.com/u/51325334?v=4" width="100" height="100" alt="vigneshsubbiah16"/><br /><sub><b>vigneshsubbiah16</b></sub></a> |            <a href="https://github.com/Szpadel"><img src="https://avatars.githubusercontent.com/u/1857251?v=4" width="100" height="100" alt="Szpadel"/><br /><sub><b>Szpadel</b></sub></a>             |       <a href="https://github.com/lupuletic"><img src="https://avatars.githubusercontent.com/u/105351510?v=4" width="100" height="100" alt="lupuletic"/><br /><sub><b>lupuletic</b></sub></a>       |        <a href="https://github.com/cannuri"><img src="https://avatars.githubusercontent.com/u/91494156?v=4" width="100" height="100" alt="cannuri"/><br /><sub><b>cannuri</b></sub></a>         | <a href="https://github.com/Smartsheet-JB-Brown"><img src="https://avatars.githubusercontent.com/u/171734120?v=4" width="100" height="100" alt="Smartsheet-JB-Brown"/><br /><sub><b>Smartsheet-JB-Brown</b></sub></a> |
+|           <a href="https://github.com/Premshay"><img src="https://avatars.githubusercontent.com/u/28099628?v=4" width="100" height="100" alt="Premshay"/><br /><sub><b>Premshay</b></sub></a>            |              <a href="https://github.com/psv2522"><img src="https://avatars.githubusercontent.com/u/87223770?v=4" width="100" height="100" alt="psv2522"/><br /><sub><b>psv2522</b></sub></a>               |      <a href="https://github.com/olweraltuve"><img src="https://avatars.githubusercontent.com/u/39308405?v=4" width="100" height="100" alt="olweraltuve"/><br /><sub><b>olweraltuve</b></sub></a>      |       <a href="https://github.com/RaySinner"><img src="https://avatars.githubusercontent.com/u/118297374?v=4" width="100" height="100" alt="RaySinner"/><br /><sub><b>RaySinner</b></sub></a>       |            <a href="https://github.com/qdaxb"><img src="https://avatars.githubusercontent.com/u/4157870?v=4" width="100" height="100" alt="qdaxb"/><br /><sub><b>qdaxb</b></sub></a>            |                <a href="https://github.com/feifei325"><img src="https://avatars.githubusercontent.com/u/46489071?v=4" width="100" height="100" alt="feifei325"/><br /><sub><b>feifei325</b></sub></a>                 |
+|      <a href="https://github.com/afshawnlotfi"><img src="https://avatars.githubusercontent.com/u/6283745?v=4" width="100" height="100" alt="afshawnlotfi"/><br /><sub><b>afshawnlotfi</b></sub></a>      |              <a href="https://github.com/emshvac"><img src="https://avatars.githubusercontent.com/u/121588911?v=4" width="100" height="100" alt="emshvac"/><br /><sub><b>emshvac</b></sub></a>              |         <a href="https://github.com/Lunchb0ne"><img src="https://avatars.githubusercontent.com/u/22198661?v=4" width="100" height="100" alt="Lunchb0ne"/><br /><sub><b>Lunchb0ne</b></sub></a>         |             <a href="https://github.com/sammcj"><img src="https://avatars.githubusercontent.com/u/862951?v=4" width="100" height="100" alt="sammcj"/><br /><sub><b>sammcj</b></sub></a>             |       <a href="https://github.com/dtrugman"><img src="https://avatars.githubusercontent.com/u/2451669?v=4" width="100" height="100" alt="dtrugman"/><br /><sub><b>dtrugman</b></sub></a>        |                 <a href="https://github.com/aitoroses"><img src="https://avatars.githubusercontent.com/u/1699368?v=4" width="100" height="100" alt="aitoroses"/><br /><sub><b>aitoroses</b></sub></a>                 |
+|           <a href="https://github.com/yt3trees"><img src="https://avatars.githubusercontent.com/u/57471763?v=4" width="100" height="100" alt="yt3trees"/><br /><sub><b>yt3trees</b></sub></a>            |              <a href="https://github.com/yongjer"><img src="https://avatars.githubusercontent.com/u/54315206?v=4" width="100" height="100" alt="yongjer"/><br /><sub><b>yongjer</b></sub></a>               |      <a href="https://github.com/vincentsong"><img src="https://avatars.githubusercontent.com/u/2343574?v=4" width="100" height="100" alt="vincentsong"/><br /><sub><b>vincentsong</b></sub></a>       | <a href="https://github.com/pugazhendhi-m"><img src="https://avatars.githubusercontent.com/u/132246623?v=4" width="100" height="100" alt="pugazhendhi-m"/><br /><sub><b>pugazhendhi-m</b></sub></a> |           <a href="https://github.com/eonghk"><img src="https://avatars.githubusercontent.com/u/139964?v=4" width="100" height="100" alt="eonghk"/><br /><sub><b>eonghk</b></sub></a>           |                  <a href="https://github.com/philfung"><img src="https://avatars.githubusercontent.com/u/1054593?v=4" width="100" height="100" alt="philfung"/><br /><sub><b>philfung</b></sub></a>                   |
+|               <a href="https://github.com/pdecat"><img src="https://avatars.githubusercontent.com/u/318490?v=4" width="100" height="100" alt="pdecat"/><br /><sub><b>pdecat</b></sub></a>                |                <a href="https://github.com/napter"><img src="https://avatars.githubusercontent.com/u/6260841?v=4" width="100" height="100" alt="napter"/><br /><sub><b>napter</b></sub></a>                 |                    <a href="https://github.com/mdp"><img src="https://avatars.githubusercontent.com/u/2868?v=4" width="100" height="100" alt="mdp"/><br /><sub><b>mdp</b></sub></a>                    |            <a href="https://github.com/jcbdev"><img src="https://avatars.githubusercontent.com/u/17152092?v=4" width="100" height="100" alt="jcbdev"/><br /><sub><b>jcbdev</b></sub></a>            |      <a href="https://github.com/benzntech"><img src="https://avatars.githubusercontent.com/u/4044180?v=4" width="100" height="100" alt="benzntech"/><br /><sub><b>benzntech</b></sub></a>      |              <a href="https://github.com/anton-otee"><img src="https://avatars.githubusercontent.com/u/149477749?v=4" width="100" height="100" alt="anton-otee"/><br /><sub><b>anton-otee</b></sub></a>               |
+|             <a href="https://github.com/AMHesch"><img src="https://avatars.githubusercontent.com/u/4777192?v=4" width="100" height="100" alt="AMHesch"/><br /><sub><b>AMHesch</b></sub></a>              |              <a href="https://github.com/bannzai"><img src="https://avatars.githubusercontent.com/u/10897361?v=4" width="100" height="100" alt="bannzai"/><br /><sub><b>bannzai</b></sub></a>               |           <a href="https://github.com/dairui1"><img src="https://avatars.githubusercontent.com/u/183250644?v=4" width="100" height="100" alt="dairui1"/><br /><sub><b>dairui1</b></sub></a>            |           <a href="https://github.com/dqroid"><img src="https://avatars.githubusercontent.com/u/192424994?v=4" width="100" height="100" alt="dqroid"/><br /><sub><b>dqroid</b></sub></a>            |      <a href="https://github.com/kinandan"><img src="https://avatars.githubusercontent.com/u/186135699?v=4" width="100" height="100" alt="kinandan"/><br /><sub><b>kinandan</b></sub></a>       |                       <a href="https://github.com/kohii"><img src="https://avatars.githubusercontent.com/u/6891780?v=4" width="100" height="100" alt="kohii"/><br /><sub><b>kohii</b></sub></a>                       |
+|       <a href="https://github.com/lightrabbit"><img src="https://avatars.githubusercontent.com/u/1521765?v=4" width="100" height="100" alt="lightrabbit"/><br /><sub><b>lightrabbit</b></sub></a>        |                   <a href="https://github.com/olup"><img src="https://avatars.githubusercontent.com/u/13785588?v=4" width="100" height="100" alt="olup"/><br /><sub><b>olup</b></sub></a>                   |      <a href="https://github.com/moqimoqidea"><img src="https://avatars.githubusercontent.com/u/39821951?v=4" width="100" height="100" alt="moqimoqidea"/><br /><sub><b>moqimoqidea</b></sub></a>      |        <a href="https://github.com/mosleyit"><img src="https://avatars.githubusercontent.com/u/189396442?v=4" width="100" height="100" alt="mosleyit"/><br /><sub><b>mosleyit</b></sub></a>         |       <a href="https://github.com/oprstchn"><img src="https://avatars.githubusercontent.com/u/16177972?v=4" width="100" height="100" alt="oprstchn"/><br /><sub><b>oprstchn</b></sub></a>       |               <a href="https://github.com/philipnext"><img src="https://avatars.githubusercontent.com/u/81944499?v=4" width="100" height="100" alt="philipnext"/><br /><sub><b>philipnext</b></sub></a>               |
+|      <a href="https://github.com/refactorthis"><img src="https://avatars.githubusercontent.com/u/3012240?v=4" width="100" height="100" alt="refactorthis"/><br /><sub><b>refactorthis</b></sub></a>      |      <a href="https://github.com/samir-nimbly"><img src="https://avatars.githubusercontent.com/u/112695483?v=4" width="100" height="100" alt="samir-nimbly"/><br /><sub><b>samir-nimbly</b></sub></a>       |              <a href="https://github.com/shaybc"><img src="https://avatars.githubusercontent.com/u/8535905?v=4" width="100" height="100" alt="shaybc"/><br /><sub><b>shaybc</b></sub></a>              |   <a href="https://github.com/shohei-ihaya"><img src="https://avatars.githubusercontent.com/u/25131938?v=4" width="100" height="100" alt="shohei-ihaya"/><br /><sub><b>shohei-ihaya</b></sub></a>   | <a href="https://github.com/student20880"><img src="https://avatars.githubusercontent.com/u/74263488?v=4" width="100" height="100" alt="student20880"/><br /><sub><b>student20880</b></sub></a> |          <a href="https://github.com/PretzelVector"><img src="https://avatars.githubusercontent.com/u/95664360?v=4" width="100" height="100" alt="PretzelVector"/><br /><sub><b>PretzelVector</b></sub></a>           |
+|       <a href="https://github.com/adamwlarson"><img src="https://avatars.githubusercontent.com/u/1392315?v=4" width="100" height="100" alt="adamwlarson"/><br /><sub><b>adamwlarson</b></sub></a>        |                <a href="https://github.com/alarno"><img src="https://avatars.githubusercontent.com/u/4355547?v=4" width="100" height="100" alt="alarno"/><br /><sub><b>alarno</b></sub></a>                 | <a href="https://github.com/andreastempsch"><img src="https://avatars.githubusercontent.com/u/117991125?v=4" width="100" height="100" alt="andreastempsch"/><br /><sub><b>andreastempsch</b></sub></a> |          <a href="https://github.com/Atlogit"><img src="https://avatars.githubusercontent.com/u/86947554?v=4" width="100" height="100" alt="Atlogit"/><br /><sub><b>Atlogit</b></sub></a>           |            <a href="https://github.com/dleen"><img src="https://avatars.githubusercontent.com/u/1297964?v=4" width="100" height="100" alt="dleen"/><br /><sub><b>dleen</b></sub></a>            |                 <a href="https://github.com/dbasclpy"><img src="https://avatars.githubusercontent.com/u/139889137?v=4" width="100" height="100" alt="dbasclpy"/><br /><sub><b>dbasclpy</b></sub></a>                  |
+| <a href="https://github.com/celestial-vault"><img src="https://avatars.githubusercontent.com/u/58194240?v=4" width="100" height="100" alt="celestial-vault"/><br /><sub><b>celestial-vault</b></sub></a> |           <a href="https://github.com/DeXtroTip"><img src="https://avatars.githubusercontent.com/u/21011087?v=4" width="100" height="100" alt="DeXtroTip"/><br /><sub><b>DeXtroTip</b></sub></a>            |              <a href="https://github.com/hesara"><img src="https://avatars.githubusercontent.com/u/1335918?v=4" width="100" height="100" alt="hesara"/><br /><sub><b>hesara</b></sub></a>              |       <a href="https://github.com/eltociear"><img src="https://avatars.githubusercontent.com/u/22633385?v=4" width="100" height="100" alt="eltociear"/><br /><sub><b>eltociear</b></sub></a>        | <a href="https://github.com/libertyteeth"><img src="https://avatars.githubusercontent.com/u/32841567?v=4" width="100" height="100" alt="libertyteeth"/><br /><sub><b>libertyteeth</b></sub></a> |           <a href="https://github.com/mamertofabian"><img src="https://avatars.githubusercontent.com/u/7698436?v=4" width="100" height="100" alt="mamertofabian"/><br /><sub><b>mamertofabian</b></sub></a>           |
+|     <a href="https://github.com/marvijo-code"><img src="https://avatars.githubusercontent.com/u/82562019?v=4" width="100" height="100" alt="marvijo-code"/><br /><sub><b>marvijo-code</b></sub></a>      |                  <a href="https://github.com/Sarke"><img src="https://avatars.githubusercontent.com/u/2719310?v=4" width="100" height="100" alt="Sarke"/><br /><sub><b>Sarke</b></sub></a>                  |               <a href="https://github.com/tgfjt"><img src="https://avatars.githubusercontent.com/u/2628239?v=4" width="100" height="100" alt="tgfjt"/><br /><sub><b>tgfjt</b></sub></a>                |       <a href="https://github.com/vladstudio"><img src="https://avatars.githubusercontent.com/u/914320?v=4" width="100" height="100" alt="vladstudio"/><br /><sub><b>vladstudio</b></sub></a>       |          <a href="https://github.com/ashktn"><img src="https://avatars.githubusercontent.com/u/6723913?v=4" width="100" height="100" alt="ashktn"/><br /><sub><b>ashktn</b></sub></a>           |                                                                                                                                                                                                                       |
+
+<!-- END CONTRIBUTORS SECTION -->
+
+## 許可證
+
+[Apache 2.0 © 2025 Roo Veterinary, Inc.](../LICENSE)
+
+---
+
+**享受 Roo Code!** 無論您是將它拴在短繩上還是讓它自主漫遊,我們迫不及待地想看看您會構建什麼。如果您有問題或功能想法,請訪問我們的 [Reddit 社區](https://www.reddit.com/r/RooCode/)或 [Discord](https://discord.gg/roocode)。祝您編碼愉快!

Разница между файлами не показана из-за своего большого размера
+ 619 - 32
package-lock.json


+ 3 - 1
package.json

@@ -318,7 +318,7 @@
 		"@google-cloud/vertexai": "^1.9.3",
 		"@google/generative-ai": "^0.18.0",
 		"@mistralai/mistralai": "^1.3.6",
-		"@modelcontextprotocol/sdk": "^1.0.1",
+		"@modelcontextprotocol/sdk": "^1.7.0",
 		"@types/clone-deep": "^4.0.4",
 		"@types/pdf-parse": "^1.1.4",
 		"@types/tmp": "^0.2.6",
@@ -345,10 +345,12 @@
 		"os-name": "^6.0.0",
 		"p-wait-for": "^5.0.2",
 		"pdf-parse": "^1.1.1",
+		"pkce-challenge": "^4.1.0",
 		"posthog-node": "^4.7.0",
 		"pretty-bytes": "^6.1.1",
 		"puppeteer-chromium-resolver": "^23.0.0",
 		"puppeteer-core": "^23.4.0",
+		"reconnecting-eventsource": "^1.6.4",
 		"serialize-error": "^11.0.3",
 		"simple-git": "^3.27.0",
 		"sound-play": "^1.1.0",

+ 220 - 0
scripts/find-missing-translations.js

@@ -0,0 +1,220 @@
+/**
+ * Script to find missing translations in locale files
+ *
+ * Usage:
+ *   node scripts/find-missing-translations.js [options]
+ *
+ * Options:
+ *   --locale=<locale>   Only check a specific locale (e.g. --locale=fr)
+ *   --file=<file>       Only check a specific file (e.g. --file=chat.json)
+ *   --help              Show this help message
+ */
+
+const fs = require("fs")
+const path = require("path")
+
+// Process command line arguments
+const args = process.argv.slice(2).reduce((acc, arg) => {
+	if (arg === "--help") {
+		acc.help = true
+	} else if (arg.startsWith("--locale=")) {
+		acc.locale = arg.split("=")[1]
+	} else if (arg.startsWith("--file=")) {
+		acc.file = arg.split("=")[1]
+	}
+	return acc
+}, {})
+
+// Show help if requested
+if (args.help) {
+	console.log(`
+Find Missing Translations
+
+A utility script to identify missing translations across locale files.
+Compares non-English locale files to the English ones to find any missing keys.
+
+Usage: 
+  node scripts/find-missing-translations.js [options]
+
+Options:
+  --locale=<locale>   Only check a specific locale (e.g. --locale=fr)
+  --file=<file>       Only check a specific file (e.g. --file=chat.json)
+  --help              Show this help message
+
+Output:
+  - Generates a report of missing translations
+  `)
+	process.exit(0)
+}
+
+// Path to the locales directory
+const LOCALES_DIR = path.join(__dirname, "../webview-ui/src/i18n/locales")
+
+// Recursively find all keys in an object
+function findKeys(obj, parentKey = "") {
+	let keys = []
+
+	for (const [key, value] of Object.entries(obj)) {
+		const currentKey = parentKey ? `${parentKey}.${key}` : key
+
+		if (typeof value === "object" && value !== null) {
+			// If value is an object, recurse
+			keys = [...keys, ...findKeys(value, currentKey)]
+		} else {
+			// If value is a primitive, add the key
+			keys.push(currentKey)
+		}
+	}
+
+	return keys
+}
+
+// Get value at a dotted path in an object
+function getValueAtPath(obj, path) {
+	const parts = path.split(".")
+	let current = obj
+
+	for (const part of parts) {
+		if (current === undefined || current === null) {
+			return undefined
+		}
+		current = current[part]
+	}
+
+	return current
+}
+
+// Main function to find missing translations
+function findMissingTranslations() {
+	try {
+		// Get all locale directories (or filter to the specified locale)
+		const allLocales = fs.readdirSync(LOCALES_DIR).filter((item) => {
+			const stats = fs.statSync(path.join(LOCALES_DIR, item))
+			return stats.isDirectory() && item !== "en" // Exclude English as it's our source
+		})
+
+		// Filter to the specified locale if provided
+		const locales = args.locale ? allLocales.filter((locale) => locale === args.locale) : allLocales
+
+		if (args.locale && locales.length === 0) {
+			console.error(`Error: Locale '${args.locale}' not found in ${LOCALES_DIR}`)
+			process.exit(1)
+		}
+
+		console.log(`Checking ${locales.length} non-English locale(s): ${locales.join(", ")}`)
+
+		// Get all English JSON files
+		const englishDir = path.join(LOCALES_DIR, "en")
+		let englishFiles = fs.readdirSync(englishDir).filter((file) => file.endsWith(".json") && !file.startsWith("."))
+
+		// Filter to the specified file if provided
+		if (args.file) {
+			if (!englishFiles.includes(args.file)) {
+				console.error(`Error: File '${args.file}' not found in ${englishDir}`)
+				process.exit(1)
+			}
+			englishFiles = englishFiles.filter((file) => file === args.file)
+		}
+
+		// Load file contents
+		const englishFileContents = englishFiles.map((file) => ({
+			name: file,
+			content: JSON.parse(fs.readFileSync(path.join(englishDir, file), "utf8")),
+		}))
+
+		console.log(
+			`Checking ${englishFileContents.length} translation file(s): ${englishFileContents.map((f) => f.name).join(", ")}`,
+		)
+
+		// Results object to store missing translations
+		const missingTranslations = {}
+
+		// For each locale, check for missing translations
+		for (const locale of locales) {
+			missingTranslations[locale] = {}
+
+			for (const { name, content: englishContent } of englishFileContents) {
+				const localeFilePath = path.join(LOCALES_DIR, locale, name)
+
+				// Check if the file exists in the locale
+				if (!fs.existsSync(localeFilePath)) {
+					missingTranslations[locale][name] = { file: "File is missing entirely" }
+					continue
+				}
+
+				// Load the locale file
+				const localeContent = JSON.parse(fs.readFileSync(localeFilePath, "utf8"))
+
+				// Find all keys in the English file
+				const englishKeys = findKeys(englishContent)
+
+				// Check for missing keys in the locale file
+				const missingKeys = []
+
+				for (const key of englishKeys) {
+					const englishValue = getValueAtPath(englishContent, key)
+					const localeValue = getValueAtPath(localeContent, key)
+
+					if (localeValue === undefined) {
+						missingKeys.push({
+							key,
+							englishValue,
+						})
+					}
+				}
+
+				if (missingKeys.length > 0) {
+					missingTranslations[locale][name] = missingKeys
+				}
+			}
+		}
+
+		// Output results
+		let hasMissingTranslations = false
+
+		console.log("\nMissing Translations Report:\n")
+
+		for (const [locale, files] of Object.entries(missingTranslations)) {
+			if (Object.keys(files).length === 0) {
+				console.log(`✅ ${locale}: No missing translations`)
+				continue
+			}
+
+			hasMissingTranslations = true
+			console.log(`📝 ${locale}:`)
+
+			for (const [fileName, missingItems] of Object.entries(files)) {
+				if (missingItems.file) {
+					console.log(`  - ${fileName}: ${missingItems.file}`)
+					continue
+				}
+
+				console.log(`  - ${fileName}: ${missingItems.length} missing translations`)
+
+				for (const { key, englishValue } of missingItems) {
+					console.log(`      ${key}: "${englishValue}"`)
+				}
+			}
+
+			console.log("")
+		}
+
+		if (!hasMissingTranslations) {
+			console.log("\n✅ All translations are complete!")
+		} else {
+			console.log("✏️  To add missing translations:")
+			console.log("1. Add the missing keys to the corresponding locale files")
+			console.log("2. Translate the English values to the appropriate language")
+			console.log("3. Run this script again to verify all translations are complete")
+			// Exit with error code to fail CI checks
+			process.exit(1)
+		}
+	} catch (error) {
+		console.error("Error:", error.message)
+		console.error(error.stack)
+		process.exit(1)
+	}
+}
+
+// Run the main function
+findMissingTranslations()

+ 92 - 6
scripts/update-contributors.js

@@ -3,6 +3,7 @@
 /**
  * This script fetches contributor data from GitHub and updates the README.md file
  * with a contributors section showing avatars and usernames.
+ * It also updates all localized README files in the locales directory.
  */
 
 const https = require("https")
@@ -12,6 +13,7 @@ const path = require("path")
 // GitHub API URL for fetching contributors
 const GITHUB_API_URL = "https://api.github.com/repos/RooVetGit/Roo-Code/contributors?per_page=100"
 const README_PATH = path.join(__dirname, "..", "README.md")
+const LOCALES_DIR = path.join(__dirname, "..", "locales")
 
 // Sentinel markers for contributors section
 const START_MARKER = "<!-- START CONTRIBUTORS SECTION - AUTO-GENERATED, DO NOT EDIT MANUALLY -->"
@@ -90,10 +92,6 @@ function formatContributorsSection(contributors) {
 
 	// Start building with Markdown table format
 	let markdown = `${START_MARKER}
-## Contributors
-
-Thanks to all our contributors who have helped make Roo Code better!
-
 `
 	// Number of columns in the table
 	const COLUMNS = 6
@@ -185,19 +183,107 @@ function writeReadme(content) {
 		})
 	})
 }
+/**
+ * Finds all localized README files in the locales directory
+ * @returns {Promise<string[]>} Array of README file paths
+ */
+function findLocalizedReadmes() {
+	return new Promise((resolve) => {
+		const readmeFiles = []
+
+		// Check if locales directory exists
+		if (!fs.existsSync(LOCALES_DIR)) {
+			// No localized READMEs found
+			return resolve(readmeFiles)
+		}
+
+		// Get all language subdirectories
+		const languageDirs = fs
+			.readdirSync(LOCALES_DIR, { withFileTypes: true })
+			.filter((dirent) => dirent.isDirectory())
+			.map((dirent) => dirent.name)
+
+		// Add all localized READMEs to the list
+		for (const langDir of languageDirs) {
+			const readmePath = path.join(LOCALES_DIR, langDir, "README.md")
+			if (fs.existsSync(readmePath)) {
+				readmeFiles.push(readmePath)
+			}
+		}
+
+		resolve(readmeFiles)
+	})
+}
+
+/**
+ * Updates a localized README file with contributors section
+ * @param {string} filePath Path to the README file
+ * @param {string} contributorsSection HTML for contributors section
+ * @returns {Promise<void>}
+ */
+function updateLocalizedReadme(filePath, contributorsSection) {
+	return new Promise((resolve, reject) => {
+		fs.readFile(filePath, "utf8", (err, readmeContent) => {
+			if (err) {
+				console.warn(`Warning: Could not read ${filePath}: ${err.message}`)
+				return resolve()
+			}
+
+			// Find existing contributors section markers
+			const startPos = readmeContent.indexOf(START_MARKER)
+			const endPos = readmeContent.indexOf(END_MARKER)
+
+			if (startPos === -1 || endPos === -1) {
+				console.warn(`Warning: Could not find contributors section markers in ${filePath}`)
+				console.warn(`Skipping update for ${filePath}`)
+				return resolve()
+			}
+
+			// Replace existing section, trimming whitespace at section boundaries
+			const beforeSection = readmeContent.substring(0, startPos).trimEnd()
+			const afterSection = readmeContent.substring(endPos + END_MARKER.length).trimStart()
+			// Ensure single newline separators between sections
+			const updatedContent = beforeSection + "\n\n" + contributorsSection.trim() + "\n\n" + afterSection
+
+			fs.writeFile(filePath, updatedContent, "utf8", (writeErr) => {
+				if (writeErr) {
+					console.warn(`Warning: Failed to update ${filePath}: ${writeErr.message}`)
+					return resolve()
+				}
+				console.log(`Updated ${filePath}`)
+				resolve()
+			})
+		})
+	})
+}
 
 /**
  * Main function that orchestrates the update process
  */
 async function main() {
 	try {
+		// Fetch contributors from GitHub
 		const contributors = await fetchContributors()
+		console.log(`Fetched ${contributors.length} contributors from GitHub`)
 
-		const readmeContent = await readReadme()
-
+		// Generate contributors section
 		const contributorsSection = formatContributorsSection(contributors)
 
+		// Update main README
+		const readmeContent = await readReadme()
 		await updateReadme(readmeContent, contributorsSection)
+		console.log(`Updated ${README_PATH}`)
+
+		// Find and update all localized README files
+		const localizedReadmes = await findLocalizedReadmes()
+		console.log(`Found ${localizedReadmes.length} localized README files`)
+
+		// Update each localized README
+		for (const readmePath of localizedReadmes) {
+			await updateLocalizedReadme(readmePath, contributorsSection)
+		}
+
+		console.log("Contributors section update complete")
 	} catch (error) {
 		console.error(`Error: ${error.message}`)
 		process.exit(1)

+ 14 - 0
src/__mocks__/@modelcontextprotocol/sdk/client/sse.js

@@ -0,0 +1,14 @@
+class SSEClientTransport {
+	constructor(url, options = {}) {
+		this.url = url
+		this.options = options
+		this.onerror = null
+		this.connect = jest.fn().mockResolvedValue()
+		this.close = jest.fn().mockResolvedValue()
+		this.start = jest.fn().mockResolvedValue()
+	}
+}
+
+module.exports = {
+	SSEClientTransport,
+}

+ 5 - 1
src/core/Cline.ts

@@ -89,6 +89,7 @@ export type ClineEvents = {
 	taskStarted: []
 	taskPaused: []
 	taskUnpaused: []
+	taskAskResponded: []
 	taskAborted: []
 	taskSpawned: [taskId: string]
 }
@@ -495,6 +496,7 @@ export class Cline extends EventEmitter<ClineEvents> {
 		this.askResponse = undefined
 		this.askResponseText = undefined
 		this.askResponseImages = undefined
+		this.emit("taskAskResponded")
 		return result
 	}
 
@@ -3662,7 +3664,9 @@ export class Cline extends EventEmitter<ClineEvents> {
 		})
 		const timeZone = formatter.resolvedOptions().timeZone
 		const timeZoneOffset = -now.getTimezoneOffset() / 60 // Convert to hours and invert sign to match conventional notation
-		const timeZoneOffsetStr = `${timeZoneOffset >= 0 ? "+" : ""}${timeZoneOffset}:00`
+		const timeZoneOffsetHours = Math.floor(Math.abs(timeZoneOffset))
+		const timeZoneOffsetMinutes = Math.abs(Math.round((Math.abs(timeZoneOffset) - timeZoneOffsetHours) * 60))
+		const timeZoneOffsetStr = `${timeZoneOffset >= 0 ? "+" : "-"}${timeZoneOffsetHours}:${timeZoneOffsetMinutes.toString().padStart(2, "0")}`
 		details += `\n\n# Current Time\n${formatter.format(now)} (${timeZone}, UTC${timeZoneOffsetStr})`
 
 		// Add context tokens information

+ 1 - 0
src/core/__tests__/Cline.test.ts

@@ -148,6 +148,7 @@ jest.mock("vscode", () => {
 				all: [mockTabGroup],
 				onDidChangeTabs: jest.fn(() => ({ dispose: jest.fn() })),
 			},
+			showErrorMessage: jest.fn(),
 		},
 		workspace: {
 			workspaceFolders: [

+ 61 - 0
src/core/__tests__/contextProxy.test.ts

@@ -250,6 +250,67 @@ describe("ContextProxy", () => {
 		})
 	})
 
+	describe("setApiConfiguration", () => {
+		it("should clear old API configuration values and set new ones", async () => {
+			// Set up initial API configuration values
+			await proxy.updateGlobalState("apiModelId", "old-model")
+			await proxy.updateGlobalState("openAiBaseUrl", "https://old-url.com")
+			await proxy.updateGlobalState("modelTemperature", 0.7)
+
+			// Spy on setValues
+			const setValuesSpy = jest.spyOn(proxy, "setValues")
+
+			// Call setApiConfiguration with new configuration
+			await proxy.setApiConfiguration({
+				apiModelId: "new-model",
+				apiProvider: "anthropic",
+				// Note: openAiBaseUrl is not included in the new config
+			})
+
+			// Verify setValues was called with the correct parameters
+			// It should include undefined for openAiBaseUrl (to clear it)
+			// and the new values for apiModelId and apiProvider
+			expect(setValuesSpy).toHaveBeenCalledWith(
+				expect.objectContaining({
+					apiModelId: "new-model",
+					apiProvider: "anthropic",
+					openAiBaseUrl: undefined,
+					modelTemperature: undefined,
+				}),
+			)
+
+			// Verify the state cache has been updated correctly
+			expect(proxy.getGlobalState("apiModelId")).toBe("new-model")
+			expect(proxy.getGlobalState("apiProvider")).toBe("anthropic")
+			expect(proxy.getGlobalState("openAiBaseUrl")).toBeUndefined()
+			expect(proxy.getGlobalState("modelTemperature")).toBeUndefined()
+		})
+
+		it("should handle empty API configuration", async () => {
+			// Set up initial API configuration values
+			await proxy.updateGlobalState("apiModelId", "old-model")
+			await proxy.updateGlobalState("openAiBaseUrl", "https://old-url.com")
+
+			// Spy on setValues
+			const setValuesSpy = jest.spyOn(proxy, "setValues")
+
+			// Call setApiConfiguration with empty configuration
+			await proxy.setApiConfiguration({})
+
+			// Verify setValues was called with undefined for all existing API config keys
+			expect(setValuesSpy).toHaveBeenCalledWith(
+				expect.objectContaining({
+					apiModelId: undefined,
+					openAiBaseUrl: undefined,
+				}),
+			)
+
+			// Verify the state cache has been cleared
+			expect(proxy.getGlobalState("apiModelId")).toBeUndefined()
+			expect(proxy.getGlobalState("openAiBaseUrl")).toBeUndefined()
+		})
+	})
+
 	describe("resetAllState", () => {
 		it("should clear all in-memory caches", async () => {
 			// Setup initial state in caches

+ 17 - 0
src/core/contextProxy.ts

@@ -11,6 +11,7 @@ import {
 	isSecretKey,
 	isGlobalStateKey,
 } from "../shared/globalState"
+import { API_CONFIG_KEYS, ApiConfiguration } from "../shared/api"
 
 export class ContextProxy {
 	private readonly originalContext: vscode.ExtensionContext
@@ -101,6 +102,7 @@ export class ContextProxy {
 			? this.originalContext.secrets.delete(key)
 			: this.originalContext.secrets.store(key, value)
 	}
+
 	/**
 	 * Set a value in either secrets or global state based on key type.
 	 * If the key is in SECRET_KEYS, it will be stored as a secret.
@@ -136,6 +138,21 @@ export class ContextProxy {
 		await Promise.all(promises)
 	}
 
+	async setApiConfiguration(apiConfiguration: ApiConfiguration) {
+		// Explicitly clear out any old API configuration values before that
+		// might not be present in the new configuration.
+		// If a value is not present in the new configuration, then it is assumed
+		// that the setting's value should be `undefined` and therefore we
+		// need to remove it from the state cache if it exists.
+		await this.setValues({
+			...API_CONFIG_KEYS.filter((key) => !!this.stateCache.get(key)).reduce(
+				(acc, key) => ({ ...acc, [key]: undefined }),
+				{} as Partial<ConfigurationValues>,
+			),
+			...apiConfiguration,
+		})
+	}
+
 	/**
 	 * Resets all global state, secrets, and in-memory caches.
 	 * This clears all data from both the in-memory caches and the VSCode storage.

+ 1 - 1
src/core/mentions/index.ts

@@ -104,7 +104,7 @@ export async function parseMentions(text: string, cwd: string, urlContentFetcher
 			}
 		} else if (mention === "problems") {
 			try {
-				const problems = getWorkspaceProblems(cwd)
+				const problems = await getWorkspaceProblems(cwd)
 				parsedText += `\n\n<workspace_diagnostics>\n${problems}\n</workspace_diagnostics>`
 			} catch (error) {
 				parsedText += `\n\n<workspace_diagnostics>\nError fetching diagnostics: ${error.message}\n</workspace_diagnostics>`

+ 94 - 9
src/core/prompts/__tests__/__snapshots__/system.test.ts.snap

@@ -2827,7 +2827,10 @@ By waiting for and carefully considering the user's response after each tool use
 
 MCP SERVERS
 
-The Model Context Protocol (MCP) enables communication between the system and locally running MCP servers that provide additional tools and resources to extend your capabilities.
+The Model Context Protocol (MCP) enables communication between the system and MCP servers that provide additional tools and resources to extend your capabilities. MCP servers can be one of two types:
+
+1. Local (Stdio-based) servers: These run locally on the user's machine and communicate via standard input/output
+2. Remote (SSE-based) servers: These run on remote machines and communicate via Server-Sent Events (SSE) over HTTP/HTTPS
 
 # Connected MCP Servers
 
@@ -2841,13 +2844,51 @@ The user may ask you something along the lines of "add a tool" that does some fu
 
 When creating MCP servers, it's important to understand that they operate in a non-interactive environment. The server cannot initiate OAuth flows, open browser windows, or prompt for user input during runtime. All credentials and authentication tokens must be provided upfront through environment variables in the MCP settings configuration. For example, Spotify's API uses OAuth to get a refresh token for the user, but the MCP server cannot initiate this flow. While you can walk the user through obtaining an application client ID and secret, you may have to create a separate one-time setup script (like get-refresh-token.js) that captures and logs the final piece of the puzzle: the user's refresh token (i.e. you might run the script using execute_command which would open a browser for authentication, and then log the refresh token so that you can see it in the command output for you to use in the MCP settings configuration).
 
-Unless the user specifies otherwise, new MCP servers should be created in: /mock/mcp/path
+Unless the user specifies otherwise, new local MCP servers should be created in: /mock/mcp/path
+
+### MCP Server Types and Configuration
+
+MCP servers can be configured in two ways in the MCP settings file:
+
+1. Local (Stdio) Server Configuration:
+\`\`\`json
+{
+  "mcpServers": {
+    "local-weather": {
+      "command": "node",
+      "args": ["/path/to/weather-server/build/index.js"],
+      "env": {
+        "OPENWEATHER_API_KEY": "your-api-key"
+      }
+    }
+  }
+}
+\`\`\`
+
+2. Remote (SSE) Server Configuration:
+\`\`\`json
+{
+  "mcpServers": {
+    "remote-weather": {
+      "url": "https://api.example.com/mcp",
+      "headers": {
+        "Authorization": "Bearer your-api-key"
+      }
+    }
+  }
+}
+\`\`\`
+
+Common configuration options for both types:
+- \`disabled\`: (optional) Set to true to temporarily disable the server
+- \`timeout\`: (optional) Maximum time in seconds to wait for server responses (default: 60)
+- \`alwaysAllow\`: (optional) Array of tool names that don't require user confirmation
 
-### Example MCP Server
+### Example Local MCP Server
 
 For example, if the user wanted to give you the ability to retrieve weather information, you could create an MCP server that uses the OpenWeather API to get weather information, add it to the MCP settings configuration file, and then notice that you now have access to new tools and resources in the system prompt that you might use to show the user your new capabilities.
 
-The following example demonstrates how to build an MCP server that provides weather data functionality. While this example shows how to implement resources, resource templates, and tools, in practice you should prefer using tools since they are more flexible and can handle dynamic parameters. The resource and resource template implementations are included here mainly for demonstration purposes of the different MCP capabilities, but a real weather server would likely just expose tools for fetching weather data. (The following steps are for macOS)
+The following example demonstrates how to build a local MCP server that provides weather data functionality using the Stdio transport. While this example shows how to implement resources, resource templates, and tools, in practice you should prefer using tools since they are more flexible and can handle dynamic parameters. The resource and resource template implementations are included here mainly for demonstration purposes of the different MCP capabilities, but a real weather server would likely just expose tools for fetching weather data. (The following steps are for macOS)
 
 1. Use the \`create-typescript-server\` tool to bootstrap a new project in the default MCP servers directory:
 
@@ -4814,7 +4855,10 @@ By waiting for and carefully considering the user's response after each tool use
 
 MCP SERVERS
 
-The Model Context Protocol (MCP) enables communication between the system and locally running MCP servers that provide additional tools and resources to extend your capabilities.
+The Model Context Protocol (MCP) enables communication between the system and MCP servers that provide additional tools and resources to extend your capabilities. MCP servers can be one of two types:
+
+1. Local (Stdio-based) servers: These run locally on the user's machine and communicate via standard input/output
+2. Remote (SSE-based) servers: These run on remote machines and communicate via Server-Sent Events (SSE) over HTTP/HTTPS
 
 # Connected MCP Servers
 
@@ -6025,7 +6069,10 @@ By waiting for and carefully considering the user's response after each tool use
 
 MCP SERVERS
 
-The Model Context Protocol (MCP) enables communication between the system and locally running MCP servers that provide additional tools and resources to extend your capabilities.
+The Model Context Protocol (MCP) enables communication between the system and MCP servers that provide additional tools and resources to extend your capabilities. MCP servers can be one of two types:
+
+1. Local (Stdio-based) servers: These run locally on the user's machine and communicate via standard input/output
+2. Remote (SSE-based) servers: These run on remote machines and communicate via Server-Sent Events (SSE) over HTTP/HTTPS
 
 # Connected MCP Servers
 
@@ -6039,13 +6086,51 @@ The user may ask you something along the lines of "add a tool" that does some fu
 
 When creating MCP servers, it's important to understand that they operate in a non-interactive environment. The server cannot initiate OAuth flows, open browser windows, or prompt for user input during runtime. All credentials and authentication tokens must be provided upfront through environment variables in the MCP settings configuration. For example, Spotify's API uses OAuth to get a refresh token for the user, but the MCP server cannot initiate this flow. While you can walk the user through obtaining an application client ID and secret, you may have to create a separate one-time setup script (like get-refresh-token.js) that captures and logs the final piece of the puzzle: the user's refresh token (i.e. you might run the script using execute_command which would open a browser for authentication, and then log the refresh token so that you can see it in the command output for you to use in the MCP settings configuration).
 
-Unless the user specifies otherwise, new MCP servers should be created in: /mock/mcp/path
+Unless the user specifies otherwise, new local MCP servers should be created in: /mock/mcp/path
+
+### MCP Server Types and Configuration
+
+MCP servers can be configured in two ways in the MCP settings file:
+
+1. Local (Stdio) Server Configuration:
+\`\`\`json
+{
+  "mcpServers": {
+    "local-weather": {
+      "command": "node",
+      "args": ["/path/to/weather-server/build/index.js"],
+      "env": {
+        "OPENWEATHER_API_KEY": "your-api-key"
+      }
+    }
+  }
+}
+\`\`\`
+
+2. Remote (SSE) Server Configuration:
+\`\`\`json
+{
+  "mcpServers": {
+    "remote-weather": {
+      "url": "https://api.example.com/mcp",
+      "headers": {
+        "Authorization": "Bearer your-api-key"
+      }
+    }
+  }
+}
+\`\`\`
+
+Common configuration options for both types:
+- \`disabled\`: (optional) Set to true to temporarily disable the server
+- \`timeout\`: (optional) Maximum time in seconds to wait for server responses (default: 60)
+- \`alwaysAllow\`: (optional) Array of tool names that don't require user confirmation
 
-### Example MCP Server
+### Example Local MCP Server
 
 For example, if the user wanted to give you the ability to retrieve weather information, you could create an MCP server that uses the OpenWeather API to get weather information, add it to the MCP settings configuration file, and then notice that you now have access to new tools and resources in the system prompt that you might use to show the user your new capabilities.
 
-The following example demonstrates how to build an MCP server that provides weather data functionality. While this example shows how to implement resources, resource templates, and tools, in practice you should prefer using tools since they are more flexible and can handle dynamic parameters. The resource and resource template implementations are included here mainly for demonstration purposes of the different MCP capabilities, but a real weather server would likely just expose tools for fetching weather data. (The following steps are for macOS)
+The following example demonstrates how to build a local MCP server that provides weather data functionality using the Stdio transport. While this example shows how to implement resources, resource templates, and tools, in practice you should prefer using tools since they are more flexible and can handle dynamic parameters. The resource and resource template implementations are included here mainly for demonstration purposes of the different MCP capabilities, but a real weather server would likely just expose tools for fetching weather data. (The following steps are for macOS)
 
 1. Use the \`create-typescript-server\` tool to bootstrap a new project in the default MCP servers directory:
 

+ 45 - 4
src/core/prompts/sections/mcp-servers.ts

@@ -49,7 +49,10 @@ export async function getMcpServersSection(
 
 	const baseSection = `MCP SERVERS
 
-The Model Context Protocol (MCP) enables communication between the system and locally running MCP servers that provide additional tools and resources to extend your capabilities.
+The Model Context Protocol (MCP) enables communication between the system and MCP servers that provide additional tools and resources to extend your capabilities. MCP servers can be one of two types:
+
+1. Local (Stdio-based) servers: These run locally on the user's machine and communicate via standard input/output
+2. Remote (SSE-based) servers: These run on remote machines and communicate via Server-Sent Events (SSE) over HTTP/HTTPS
 
 # Connected MCP Servers
 
@@ -71,13 +74,51 @@ The user may ask you something along the lines of "add a tool" that does some fu
 
 When creating MCP servers, it's important to understand that they operate in a non-interactive environment. The server cannot initiate OAuth flows, open browser windows, or prompt for user input during runtime. All credentials and authentication tokens must be provided upfront through environment variables in the MCP settings configuration. For example, Spotify's API uses OAuth to get a refresh token for the user, but the MCP server cannot initiate this flow. While you can walk the user through obtaining an application client ID and secret, you may have to create a separate one-time setup script (like get-refresh-token.js) that captures and logs the final piece of the puzzle: the user's refresh token (i.e. you might run the script using execute_command which would open a browser for authentication, and then log the refresh token so that you can see it in the command output for you to use in the MCP settings configuration).
 
-Unless the user specifies otherwise, new MCP servers should be created in: ${await mcpHub.getMcpServersPath()}
+Unless the user specifies otherwise, new local MCP servers should be created in: ${await mcpHub.getMcpServersPath()}
+
+### MCP Server Types and Configuration
+
+MCP servers can be configured in two ways in the MCP settings file:
+
+1. Local (Stdio) Server Configuration:
+\`\`\`json
+{
+  "mcpServers": {
+    "local-weather": {
+      "command": "node",
+      "args": ["/path/to/weather-server/build/index.js"],
+      "env": {
+        "OPENWEATHER_API_KEY": "your-api-key"
+      }
+    }
+  }
+}
+\`\`\`
+
+2. Remote (SSE) Server Configuration:
+\`\`\`json
+{
+  "mcpServers": {
+    "remote-weather": {
+      "url": "https://api.example.com/mcp",
+      "headers": {
+        "Authorization": "Bearer your-api-key"
+      }
+    }
+  }
+}
+\`\`\`
+
+Common configuration options for both types:
+- \`disabled\`: (optional) Set to true to temporarily disable the server
+- \`timeout\`: (optional) Maximum time in seconds to wait for server responses (default: 60)
+- \`alwaysAllow\`: (optional) Array of tool names that don't require user confirmation
 
-### Example MCP Server
+### Example Local MCP Server
 
 For example, if the user wanted to give you the ability to retrieve weather information, you could create an MCP server that uses the OpenWeather API to get weather information, add it to the MCP settings configuration file, and then notice that you now have access to new tools and resources in the system prompt that you might use to show the user your new capabilities.
 
-The following example demonstrates how to build an MCP server that provides weather data functionality. While this example shows how to implement resources, resource templates, and tools, in practice you should prefer using tools since they are more flexible and can handle dynamic parameters. The resource and resource template implementations are included here mainly for demonstration purposes of the different MCP capabilities, but a real weather server would likely just expose tools for fetching weather data. (The following steps are for macOS)
+The following example demonstrates how to build a local MCP server that provides weather data functionality using the Stdio transport. While this example shows how to implement resources, resource templates, and tools, in practice you should prefer using tools since they are more flexible and can handle dynamic parameters. The resource and resource template implementations are included here mainly for demonstration purposes of the different MCP capabilities, but a real weather server would likely just expose tools for fetching weather data. (The following steps are for macOS)
 
 1. Use the \`create-typescript-server\` tool to bootstrap a new project in the default MCP servers directory:
 

+ 38 - 4
src/core/webview/ClineProvider.ts

@@ -178,6 +178,10 @@ export class ClineProvider extends EventEmitter<ClineProviderEvents> implements
 		return this.clineStack.length
 	}
 
+	public getCurrentTaskStack(): string[] {
+		return this.clineStack.map((cline) => cline.taskId)
+	}
+
 	// remove the current task/cline instance (at the top of the stack), ao this task is finished
 	// and resume the previous task/cline instance (if it exists)
 	// this is used when a sub task is finished and the parent task needs to be resumed
@@ -1123,6 +1127,28 @@ export class ClineProvider extends EventEmitter<ClineProviderEvents> implements
 						}
 						break
 					}
+					case "openProjectMcpSettings": {
+						if (!vscode.workspace.workspaceFolders?.length) {
+							vscode.window.showErrorMessage("Please open a project folder first")
+							return
+						}
+
+						const workspaceFolder = vscode.workspace.workspaceFolders[0]
+						const rooDir = path.join(workspaceFolder.uri.fsPath, ".roo")
+						const mcpPath = path.join(rooDir, "mcp.json")
+
+						try {
+							await fs.mkdir(rooDir, { recursive: true })
+							const exists = await fileExistsAtPath(mcpPath)
+							if (!exists) {
+								await fs.writeFile(mcpPath, JSON.stringify({ mcpServers: {} }, null, 2))
+							}
+							await openFile(mcpPath)
+						} catch (error) {
+							vscode.window.showErrorMessage(`Failed to create or open .roo/mcp.json: ${error}`)
+						}
+						break
+					}
 					case "openCustomModesSettings": {
 						const customModesFilePath = await this.customModesManager.getCustomModesFilePath()
 						if (customModesFilePath) {
@@ -1536,6 +1562,10 @@ export class ClineProvider extends EventEmitter<ClineProviderEvents> implements
 						await this.updateGlobalState("browserToolEnabled", message.bool ?? true)
 						await this.postStateToWebview()
 						break
+					case "language":
+						await this.updateGlobalState("language", message.text)
+						await this.postStateToWebview()
+						break
 					case "showRooIgnoredFiles":
 						await this.updateGlobalState("showRooIgnoredFiles", message.bool ?? true)
 						await this.postStateToWebview()
@@ -1989,7 +2019,7 @@ export class ClineProvider extends EventEmitter<ClineProviderEvents> implements
 			}
 		}
 
-		await this.contextProxy.setValues(apiConfiguration)
+		await this.contextProxy.setApiConfiguration(apiConfiguration)
 
 		if (this.getCurrentCline()) {
 			this.getCurrentCline()!.api = buildApiHandler(apiConfiguration)
@@ -2515,8 +2545,7 @@ export class ClineProvider extends EventEmitter<ClineProviderEvents> implements
 			writeDelayMs: stateValues.writeDelayMs ?? 1000,
 			terminalOutputLineLimit: stateValues.terminalOutputLineLimit ?? 500,
 			mode: stateValues.mode ?? defaultModeSlug,
-			// Pass the VSCode language code directly
-			language: formatLanguage(vscode.env.language),
+			language: stateValues.language || formatLanguage(vscode.env.language),
 			mcpEnabled: stateValues.mcpEnabled ?? true,
 			enableMcpServerCreation: stateValues.enableMcpServerCreation ?? true,
 			alwaysApproveResubmit: stateValues.alwaysApproveResubmit ?? false,
@@ -2628,7 +2657,7 @@ export class ClineProvider extends EventEmitter<ClineProviderEvents> implements
 	 * like the current mode, API provider, etc.
 	 */
 	public async getTelemetryProperties(): Promise<Record<string, any>> {
-		const { mode, apiConfiguration } = await this.getState()
+		const { mode, apiConfiguration, language } = await this.getState()
 		const appVersion = this.context.extension?.packageJSON?.version
 		const vscodeVersion = vscode.version
 		const platform = process.platform
@@ -2643,6 +2672,11 @@ export class ClineProvider extends EventEmitter<ClineProviderEvents> implements
 			properties.appVersion = appVersion
 		}
 
+		// Add language
+		if (language) {
+			properties.language = language
+		}
+
 		// Add current mode
 		if (mode) {
 			properties.mode = mode

+ 124 - 0
src/core/webview/__tests__/ClineProvider.test.ts

@@ -1962,6 +1962,130 @@ describe("ClineProvider", () => {
 	})
 })
 
+describe("Project MCP Settings", () => {
+	let provider: ClineProvider
+	let mockContext: vscode.ExtensionContext
+	let mockOutputChannel: vscode.OutputChannel
+	let mockWebviewView: vscode.WebviewView
+	let mockPostMessage: jest.Mock
+
+	beforeEach(() => {
+		jest.clearAllMocks()
+
+		mockContext = {
+			extensionPath: "/test/path",
+			extensionUri: {} as vscode.Uri,
+			globalState: {
+				get: jest.fn(),
+				update: jest.fn(),
+				keys: jest.fn().mockReturnValue([]),
+			},
+			secrets: {
+				get: jest.fn(),
+				store: jest.fn(),
+				delete: jest.fn(),
+			},
+			subscriptions: [],
+			extension: {
+				packageJSON: { version: "1.0.0" },
+			},
+			globalStorageUri: {
+				fsPath: "/test/storage/path",
+			},
+		} as unknown as vscode.ExtensionContext
+
+		mockOutputChannel = {
+			appendLine: jest.fn(),
+			clear: jest.fn(),
+			dispose: jest.fn(),
+		} as unknown as vscode.OutputChannel
+
+		mockPostMessage = jest.fn()
+		mockWebviewView = {
+			webview: {
+				postMessage: mockPostMessage,
+				html: "",
+				options: {},
+				onDidReceiveMessage: jest.fn(),
+				asWebviewUri: jest.fn(),
+			},
+			visible: true,
+			onDidDispose: jest.fn(),
+			onDidChangeVisibility: jest.fn(),
+		} as unknown as vscode.WebviewView
+
+		provider = new ClineProvider(mockContext, mockOutputChannel)
+	})
+
+	test("handles openProjectMcpSettings message", async () => {
+		await provider.resolveWebviewView(mockWebviewView)
+		const messageHandler = (mockWebviewView.webview.onDidReceiveMessage as jest.Mock).mock.calls[0][0]
+
+		// Mock workspace folders
+		;(vscode.workspace as any).workspaceFolders = [{ uri: { fsPath: "/test/workspace" } }]
+
+		// Mock fs functions
+		const fs = require("fs/promises")
+		fs.mkdir.mockResolvedValue(undefined)
+		fs.writeFile.mockResolvedValue(undefined)
+
+		// Trigger openProjectMcpSettings
+		await messageHandler({
+			type: "openProjectMcpSettings",
+		})
+
+		// Verify directory was created
+		expect(fs.mkdir).toHaveBeenCalledWith(
+			expect.stringContaining(".roo"),
+			expect.objectContaining({ recursive: true }),
+		)
+
+		// Verify file was created with default content
+		expect(fs.writeFile).toHaveBeenCalledWith(
+			expect.stringContaining("mcp.json"),
+			JSON.stringify({ mcpServers: {} }, null, 2),
+		)
+	})
+
+	test("handles openProjectMcpSettings when workspace is not open", async () => {
+		await provider.resolveWebviewView(mockWebviewView)
+		const messageHandler = (mockWebviewView.webview.onDidReceiveMessage as jest.Mock).mock.calls[0][0]
+
+		// Mock no workspace folders
+		;(vscode.workspace as any).workspaceFolders = []
+
+		// Trigger openProjectMcpSettings
+		await messageHandler({
+			type: "openProjectMcpSettings",
+		})
+
+		// Verify error message was shown
+		expect(vscode.window.showErrorMessage).toHaveBeenCalledWith("Please open a project folder first")
+	})
+
+	test("handles openProjectMcpSettings file creation error", async () => {
+		await provider.resolveWebviewView(mockWebviewView)
+		const messageHandler = (mockWebviewView.webview.onDidReceiveMessage as jest.Mock).mock.calls[0][0]
+
+		// Mock workspace folders
+		;(vscode.workspace as any).workspaceFolders = [{ uri: { fsPath: "/test/workspace" } }]
+
+		// Mock fs functions to fail
+		const fs = require("fs/promises")
+		fs.mkdir.mockRejectedValue(new Error("Failed to create directory"))
+
+		// Trigger openProjectMcpSettings
+		await messageHandler({
+			type: "openProjectMcpSettings",
+		})
+
+		// Verify error message was shown
+		expect(vscode.window.showErrorMessage).toHaveBeenCalledWith(
+			expect.stringContaining("Failed to create or open .roo/mcp.json"),
+		)
+	})
+})
+
 describe("ContextProxy integration", () => {
 	let provider: ClineProvider
 	let mockContext: vscode.ExtensionContext

+ 5 - 0
src/exports/api.ts

@@ -70,6 +70,7 @@ export class API extends EventEmitter<RooCodeEvents> implements RooCodeAPI {
 		await this.provider.postMessageToWebview({ type: "invoke", invoke: "secondaryButtonClick" })
 	}
 
+	// TODO: Change this to `setApiConfiguration`.
 	public async setConfiguration(values: Partial<ConfigurationValues>) {
 		await this.provider.setValues(values)
 	}
@@ -81,4 +82,8 @@ export class API extends EventEmitter<RooCodeEvents> implements RooCodeAPI {
 	public getMessages(taskId: string) {
 		return this.history.getMessages(taskId)
 	}
+
+	public getCurrentTaskStack(): string[] {
+		return this.provider.getCurrentTaskStack()
+	}
 }

+ 8 - 0
src/exports/roo-code.d.ts

@@ -5,6 +5,7 @@ export interface RooCodeEvents {
 	taskStarted: [taskId: string]
 	taskPaused: [taskId: string]
 	taskUnpaused: [taskId: string]
+	taskAskResponded: [taskId: string]
 	taskAborted: [taskId: string]
 	taskSpawned: [taskId: string, childTaskId: string]
 }
@@ -62,6 +63,12 @@ export interface RooCodeAPI extends EventEmitter<RooCodeEvents> {
 	 * @returns An array of ClineMessage objects.
 	 */
 	getMessages(taskId: string): ClineMessage[]
+
+	/**
+	 * Returns the current task stack.
+	 * @returns An array of task IDs.
+	 */
+	getCurrentTaskStack(): string[]
 }
 
 export type ClineAsk =
@@ -218,6 +225,7 @@ export type GlobalStateKey =
 	| "telemetrySetting"
 	| "showRooIgnoredFiles"
 	| "remoteBrowserEnabled"
+	| "language"
 
 export type ConfigurationKey = GlobalStateKey | SecretKey
 

+ 506 - 158
src/services/mcp/McpHub.ts

@@ -1,5 +1,7 @@
 import { Client } from "@modelcontextprotocol/sdk/client/index.js"
 import { StdioClientTransport, StdioServerParameters } from "@modelcontextprotocol/sdk/client/stdio.js"
+import { SSEClientTransport } from "@modelcontextprotocol/sdk/client/sse.js"
+import ReconnectingEventSource from "reconnecting-eventsource"
 import {
 	CallToolResultSchema,
 	ListResourcesResultSchema,
@@ -31,37 +33,208 @@ import { arePathsEqual } from "../../utils/path"
 export type McpConnection = {
 	server: McpServer
 	client: Client
-	transport: StdioClientTransport
+	transport: StdioClientTransport | SSEClientTransport
 }
 
-// StdioServerParameters
-const AlwaysAllowSchema = z.array(z.string()).default([])
-
-export const StdioConfigSchema = z.object({
-	command: z.string(),
-	args: z.array(z.string()).optional(),
-	env: z.record(z.string()).optional(),
-	alwaysAllow: AlwaysAllowSchema.optional(),
+// Base configuration schema for common settings
+const BaseConfigSchema = z.object({
 	disabled: z.boolean().optional(),
 	timeout: z.number().min(1).max(3600).optional().default(60),
+	alwaysAllow: z.array(z.string()).default([]),
 })
 
+// Custom error messages for better user feedback
+const typeErrorMessage = "Server type must be either 'stdio' or 'sse'"
+const stdioFieldsErrorMessage =
+	"For 'stdio' type servers, you must provide a 'command' field and can optionally include 'args' and 'env'"
+const sseFieldsErrorMessage =
+	"For 'sse' type servers, you must provide a 'url' field and can optionally include 'headers'"
+const mixedFieldsErrorMessage =
+	"Cannot mix 'stdio' and 'sse' fields. For 'stdio' use 'command', 'args', and 'env'. For 'sse' use 'url' and 'headers'"
+const missingFieldsErrorMessage = "Server configuration must include either 'command' (for stdio) or 'url' (for sse)"
+
+// Helper function to create a refined schema with better error messages
+const createServerTypeSchema = () => {
+	return z.union([
+		// Stdio config (has command field)
+		BaseConfigSchema.extend({
+			type: z.enum(["stdio"]).optional(),
+			command: z.string().min(1, "Command cannot be empty"),
+			args: z.array(z.string()).optional(),
+			env: z.record(z.string()).optional(),
+			// Ensure no SSE fields are present
+			url: z.undefined().optional(),
+			headers: z.undefined().optional(),
+		})
+			.transform((data) => ({
+				...data,
+				type: "stdio" as const,
+			}))
+			.refine((data) => data.type === undefined || data.type === "stdio", { message: typeErrorMessage }),
+		// SSE config (has url field)
+		BaseConfigSchema.extend({
+			type: z.enum(["sse"]).optional(),
+			url: z.string().url("URL must be a valid URL format"),
+			headers: z.record(z.string()).optional(),
+			// Ensure no stdio fields are present
+			command: z.undefined().optional(),
+			args: z.undefined().optional(),
+			env: z.undefined().optional(),
+		})
+			.transform((data) => ({
+				...data,
+				type: "sse" as const,
+			}))
+			.refine((data) => data.type === undefined || data.type === "sse", { message: typeErrorMessage }),
+	])
+}
+
+// Server configuration schema with automatic type inference and validation
+export const ServerConfigSchema = createServerTypeSchema()
+
+// Settings schema
 const McpSettingsSchema = z.object({
-	mcpServers: z.record(StdioConfigSchema),
+	mcpServers: z.record(ServerConfigSchema),
 })
 
 export class McpHub {
 	private providerRef: WeakRef<ClineProvider>
 	private disposables: vscode.Disposable[] = []
 	private settingsWatcher?: vscode.FileSystemWatcher
+	private projectMcpWatcher?: vscode.FileSystemWatcher
 	private fileWatchers: Map<string, FSWatcher> = new Map()
+	private isDisposed: boolean = false
 	connections: McpConnection[] = []
 	isConnecting: boolean = false
 
 	constructor(provider: ClineProvider) {
 		this.providerRef = new WeakRef(provider)
 		this.watchMcpSettingsFile()
-		this.initializeMcpServers()
+		this.watchProjectMcpFile()
+		this.setupWorkspaceFoldersWatcher()
+		this.initializeGlobalMcpServers()
+		this.initializeProjectMcpServers()
+	}
+
+	public setupWorkspaceFoldersWatcher(): void {
+		// Skip if test environment is detected
+		if (process.env.NODE_ENV === "test" || process.env.JEST_WORKER_ID !== undefined) {
+			return
+		}
+		this.disposables.push(
+			vscode.workspace.onDidChangeWorkspaceFolders(async () => {
+				await this.updateProjectMcpServers()
+				this.watchProjectMcpFile()
+			}),
+		)
+	}
+
+	private watchProjectMcpFile(): void {
+		this.projectMcpWatcher?.dispose()
+
+		this.projectMcpWatcher = vscode.workspace.createFileSystemWatcher("**/.roo/mcp.json", false, false, false)
+
+		this.disposables.push(
+			this.projectMcpWatcher.onDidChange(async () => {
+				await this.updateProjectMcpServers()
+			}),
+			this.projectMcpWatcher.onDidCreate(async () => {
+				await this.updateProjectMcpServers()
+			}),
+			this.projectMcpWatcher.onDidDelete(async () => {
+				await this.cleanupProjectMcpServers()
+			}),
+		)
+
+		this.disposables.push(this.projectMcpWatcher)
+	}
+
+	private async updateProjectMcpServers(): Promise<void> {
+		// Only clean up and initialize project servers, not affecting global servers
+		await this.cleanupProjectMcpServers()
+		await this.initializeProjectMcpServers()
+	}
+
+	private async cleanupProjectMcpServers(): Promise<void> {
+		// Only filter and delete project servers
+		const projectServers = this.connections.filter((conn) => conn.server.source === "project")
+
+		for (const conn of projectServers) {
+			await this.deleteConnection(conn.server.name)
+		}
+
+		// Notify webview of changes after cleanup
+		await this.notifyWebviewOfServerChanges()
+	}
+
+	/**
+	 * Validates and normalizes server configuration
+	 * @param config The server configuration to validate
+	 * @param serverName Optional server name for error messages
+	 * @returns The validated configuration
+	 * @throws Error if the configuration is invalid
+	 */
+	private validateServerConfig(config: any, serverName?: string): z.infer<typeof ServerConfigSchema> {
+		// Detect configuration issues before validation
+		const hasStdioFields = config.command !== undefined
+		const hasSseFields = config.url !== undefined
+
+		// Check for mixed fields
+		if (hasStdioFields && hasSseFields) {
+			throw new Error(mixedFieldsErrorMessage)
+		}
+
+		// Check if it's a stdio or SSE config and add type if missing
+		if (!config.type) {
+			if (hasStdioFields) {
+				config.type = "stdio"
+			} else if (hasSseFields) {
+				config.type = "sse"
+			} else {
+				throw new Error(missingFieldsErrorMessage)
+			}
+		} else if (config.type !== "stdio" && config.type !== "sse") {
+			throw new Error(typeErrorMessage)
+		}
+
+		// Check for type/field mismatch
+		if (config.type === "stdio" && !hasStdioFields) {
+			throw new Error(stdioFieldsErrorMessage)
+		}
+		if (config.type === "sse" && !hasSseFields) {
+			throw new Error(sseFieldsErrorMessage)
+		}
+
+		// Validate the config against the schema
+		try {
+			return ServerConfigSchema.parse(config)
+		} catch (validationError) {
+			if (validationError instanceof z.ZodError) {
+				// Extract and format validation errors
+				const errorMessages = validationError.errors
+					.map((err) => `${err.path.join(".")}: ${err.message}`)
+					.join("; ")
+				throw new Error(
+					serverName
+						? `Invalid configuration for server "${serverName}": ${errorMessages}`
+						: `Invalid server configuration: ${errorMessages}`,
+				)
+			}
+			throw validationError
+		}
+	}
+
+	/**
+	 * Formats and displays error messages to the user
+	 * @param message The error message prefix
+	 * @param error The error object
+	 */
+	private showErrorMessage(message: string, error: unknown): void {
+		const errorMessage = error instanceof Error ? error.message : `${error}`
+		console.error(`${message}:`, error)
+		// if (vscode.window && typeof vscode.window.showErrorMessage === 'function') {
+		// 	vscode.window.showErrorMessage(`${message}: ${errorMessage}`)
+		// }
 	}
 
 	getServers(): McpServer[] {
@@ -113,7 +286,7 @@ export class McpHub {
 				if (arePathsEqual(document.uri.fsPath, settingsPath)) {
 					const content = await fs.readFile(settingsPath, "utf-8")
 					const errorMessage =
-						"Invalid MCP settings format. Please ensure your settings follow the correct JSON format."
+						"Invalid MCP settings JSON format. Please ensure your settings follow the correct JSON format."
 					let config: any
 					try {
 						config = JSON.parse(content)
@@ -123,33 +296,115 @@ export class McpHub {
 					}
 					const result = McpSettingsSchema.safeParse(config)
 					if (!result.success) {
-						vscode.window.showErrorMessage(errorMessage)
+						const errorMessages = result.error.errors
+							.map((err) => `${err.path.join(".")}: ${err.message}`)
+							.join("\n")
+						vscode.window.showErrorMessage(`Invalid MCP settings format: ${errorMessages}`)
 						return
 					}
 					try {
-						await this.updateServerConnections(result.data.mcpServers || {})
+						// Only update global servers when global settings change
+						await this.updateServerConnections(result.data.mcpServers || {}, "global")
 					} catch (error) {
-						console.error("Failed to process MCP settings change:", error)
+						this.showErrorMessage("Failed to process MCP settings change", error)
 					}
 				}
 			}),
 		)
 	}
 
-	private async initializeMcpServers(): Promise<void> {
+	private async initializeGlobalMcpServers(): Promise<void> {
 		try {
+			// Initialize global MCP servers
 			const settingsPath = await this.getMcpSettingsFilePath()
 			const content = await fs.readFile(settingsPath, "utf-8")
+			let config: any
+
+			try {
+				config = JSON.parse(content)
+			} catch (parseError) {
+				const errorMessage =
+					"Invalid MCP settings JSON format. Please check your settings file for syntax errors."
+				console.error(errorMessage, parseError)
+				vscode.window.showErrorMessage(errorMessage)
+				return
+			}
+
+			// Validate the config using McpSettingsSchema
+			const result = McpSettingsSchema.safeParse(config)
+			if (result.success) {
+				await this.updateServerConnections(result.data.mcpServers || {})
+			} else {
+				// Format validation errors for better user feedback
+				const errorMessages = result.error.errors
+					.map((err) => `${err.path.join(".")}: ${err.message}`)
+					.join("\n")
+				console.error("Invalid MCP settings format:", errorMessages)
+				vscode.window.showErrorMessage(`Invalid MCP settings format: ${errorMessages}`)
+
+				// Still try to connect with the raw config, but show warnings
+				try {
+					await this.updateServerConnections(config.mcpServers || {}, "global")
+				} catch (error) {
+					this.showErrorMessage("Failed to initialize global MCP servers with raw config", error)
+				}
+			}
+		} catch (error) {
+			this.showErrorMessage("Failed to initialize global MCP servers", error)
+		}
+	}
+
+	// Get project-level MCP configuration path
+	private async getProjectMcpPath(): Promise<string | null> {
+		if (!vscode.workspace.workspaceFolders?.length) {
+			return null
+		}
+
+		const workspaceFolder = vscode.workspace.workspaceFolders[0]
+		const projectMcpDir = path.join(workspaceFolder.uri.fsPath, ".roo")
+		const projectMcpPath = path.join(projectMcpDir, "mcp.json")
+
+		try {
+			await fs.access(projectMcpPath)
+			return projectMcpPath
+		} catch {
+			return null
+		}
+	}
+
+	// Initialize project-level MCP servers
+	private async initializeProjectMcpServers(): Promise<void> {
+		const projectMcpPath = await this.getProjectMcpPath()
+		if (!projectMcpPath) {
+			return
+		}
+
+		try {
+			const content = await fs.readFile(projectMcpPath, "utf-8")
 			const config = JSON.parse(content)
-			await this.updateServerConnections(config.mcpServers || {})
+
+			// Validate configuration structure
+			const result = McpSettingsSchema.safeParse(config)
+			if (!result.success) {
+				vscode.window.showErrorMessage("Invalid project MCP configuration format")
+				return
+			}
+
+			// Update server connections
+			await this.updateServerConnections(result.data.mcpServers || {}, "project")
 		} catch (error) {
-			console.error("Failed to initialize MCP servers:", error)
+			console.error("Failed to initialize project MCP servers:", error)
+			vscode.window.showErrorMessage(`Failed to initialize project MCP server: ${error}`)
 		}
 	}
 
-	private async connectToServer(name: string, config: StdioServerParameters): Promise<void> {
-		// Remove existing connection if it exists (should never happen, the connection should be deleted beforehand)
-		this.connections = this.connections.filter((conn) => conn.server.name !== name)
+	private async connectToServer(
+		name: string,
+		config: z.infer<typeof ServerConfigSchema>,
+		source: "global" | "project" = "global",
+	): Promise<void> {
+		// Remove existing connection if it exists
+		await this.deleteConnection(name)
 
 		try {
 			// Each MCP server requires its own transport connection and has unique capabilities, configurations, and error handling. Having separate clients also allows proper scoping of resources/tools and independent server management like reconnection.
@@ -163,90 +418,112 @@ export class McpHub {
 				},
 			)
 
-			const transport = new StdioClientTransport({
-				command: config.command,
-				args: config.args,
-				env: {
-					...config.env,
-					...(process.env.PATH ? { PATH: process.env.PATH } : {}),
-					// ...(process.env.NODE_PATH ? { NODE_PATH: process.env.NODE_PATH } : {}),
-				},
-				stderr: "pipe", // necessary for stderr to be available
-			})
+			let transport: StdioClientTransport | SSEClientTransport
 
-			transport.onerror = async (error) => {
-				console.error(`Transport error for "${name}":`, error)
-				const connection = this.connections.find((conn) => conn.server.name === name)
-				if (connection) {
-					connection.server.status = "disconnected"
-					this.appendErrorMessage(connection, error.message)
+			if (config.type === "stdio") {
+				transport = new StdioClientTransport({
+					command: config.command,
+					args: config.args,
+					env: {
+						...config.env,
+						...(process.env.PATH ? { PATH: process.env.PATH } : {}),
+					},
+					stderr: "pipe",
+				})
+
+				// Set up stdio specific error handling
+				transport.onerror = async (error) => {
+					console.error(`Transport error for "${name}":`, error)
+					const connection = this.connections.find((conn) => conn.server.name === name)
+					if (connection) {
+						connection.server.status = "disconnected"
+						this.appendErrorMessage(connection, error instanceof Error ? error.message : `${error}`)
+					}
+					await this.notifyWebviewOfServerChanges()
 				}
-				await this.notifyWebviewOfServerChanges()
-			}
 
-			transport.onclose = async () => {
-				const connection = this.connections.find((conn) => conn.server.name === name)
-				if (connection) {
-					connection.server.status = "disconnected"
+				transport.onclose = async () => {
+					const connection = this.connections.find((conn) => conn.server.name === name)
+					if (connection) {
+						connection.server.status = "disconnected"
+					}
+					await this.notifyWebviewOfServerChanges()
 				}
-				await this.notifyWebviewOfServerChanges()
-			}
 
-			// If the config is invalid, show an error
-			if (!StdioConfigSchema.safeParse(config).success) {
-				console.error(`Invalid config for "${name}": missing or invalid parameters`)
-				const connection: McpConnection = {
-					server: {
-						name,
-						config: JSON.stringify(config),
-						status: "disconnected",
-						error: "Invalid config: missing or invalid parameters",
+				// transport.stderr is only available after the process has been started. However we can't start it separately from the .connect() call because it also starts the transport. And we can't place this after the connect call since we need to capture the stderr stream before the connection is established, in order to capture errors during the connection process.
+				// As a workaround, we start the transport ourselves, and then monkey-patch the start method to no-op so that .connect() doesn't try to start it again.
+				await transport.start()
+				const stderrStream = transport.stderr
+				if (stderrStream) {
+					stderrStream.on("data", async (data: Buffer) => {
+						const output = data.toString()
+
+						// Check if this is a startup info message or a real error
+						const isStartupInfo = output.includes("server running") || output.includes("MCP server running")
+
+						if (!isStartupInfo) {
+							// Only log and process real errors, ignore startup info messages
+							console.error(`Server "${name}" stderr:`, output)
+							const connection = this.connections.find((conn) => conn.server.name === name)
+							if (connection) {
+								// NOTE: we do not set server status to "disconnected" because stderr logs do not necessarily mean the server crashed or disconnected
+								this.appendErrorMessage(connection, output)
+								// Only need to update webview right away if it's already disconnected
+								if (connection.server.status === "disconnected") {
+									await this.notifyWebviewOfServerChanges()
+								}
+							}
+						}
+					})
+				} else {
+					console.error(`No stderr stream for ${name}`)
+				}
+				transport.start = async () => {} // No-op now, .connect() won't fail
+			} else {
+				// SSE connection
+				const sseOptions = {
+					requestInit: {
+						headers: config.headers,
 					},
-					client,
-					transport,
 				}
-				this.connections.push(connection)
-				return
+				// Configure ReconnectingEventSource options
+				const reconnectingEventSourceOptions = {
+					max_retry_time: 5000, // Maximum retry time in milliseconds
+					withCredentials: config.headers?.["Authorization"] ? true : false, // Enable credentials if Authorization header exists
+				}
+				global.EventSource = ReconnectingEventSource
+				transport = new SSEClientTransport(new URL(config.url), {
+					...sseOptions,
+					eventSourceInit: reconnectingEventSourceOptions,
+				})
+
+				// Set up SSE specific error handling
+				transport.onerror = async (error) => {
+					console.error(`Transport error for "${name}":`, error)
+					const connection = this.connections.find((conn) => conn.server.name === name)
+					if (connection) {
+						connection.server.status = "disconnected"
+						this.appendErrorMessage(connection, error instanceof Error ? error.message : `${error}`)
+					}
+					await this.notifyWebviewOfServerChanges()
+				}
 			}
 
-			// valid schema
-			const parsedConfig = StdioConfigSchema.parse(config)
 			const connection: McpConnection = {
 				server: {
 					name,
 					config: JSON.stringify(config),
 					status: "connecting",
-					disabled: parsedConfig.disabled,
+					disabled: config.disabled,
+					source,
+					projectPath: source === "project" ? vscode.workspace.workspaceFolders?.[0]?.uri.fsPath : undefined,
 				},
 				client,
 				transport,
 			}
 			this.connections.push(connection)
 
-			// transport.stderr is only available after the process has been started. However we can't start it separately from the .connect() call because it also starts the transport. And we can't place this after the connect call since we need to capture the stderr stream before the connection is established, in order to capture errors during the connection process.
-			// As a workaround, we start the transport ourselves, and then monkey-patch the start method to no-op so that .connect() doesn't try to start it again.
-			await transport.start()
-			const stderrStream = transport.stderr
-			if (stderrStream) {
-				stderrStream.on("data", async (data: Buffer) => {
-					const errorOutput = data.toString()
-					console.error(`Server "${name}" stderr:`, errorOutput)
-					const connection = this.connections.find((conn) => conn.server.name === name)
-					if (connection) {
-						// NOTE: we do not set server status to "disconnected" because stderr logs do not necessarily mean the server crashed or disconnected, it could just be informational. In fact when the server first starts up, it immediately logs "<name> server running on stdio" to stderr.
-						this.appendErrorMessage(connection, errorOutput)
-						// Only need to update webview right away if it's already disconnected
-						if (connection.server.status === "disconnected") {
-							await this.notifyWebviewOfServerChanges()
-						}
-					}
-				})
-			} else {
-				console.error(`No stderr stream for ${name}`)
-			}
-			transport.start = async () => {} // No-op now, .connect() won't fail
-
-			// Connect
+			// Connect (this will automatically start the transport)
 			await client.connect(transport)
 			connection.server.status = "connected"
 			connection.server.error = ""
@@ -260,15 +537,20 @@ export class McpHub {
 			const connection = this.connections.find((conn) => conn.server.name === name)
 			if (connection) {
 				connection.server.status = "disconnected"
-				this.appendErrorMessage(connection, error instanceof Error ? error.message : String(error))
+				this.appendErrorMessage(connection, error instanceof Error ? error.message : `${error}`)
 			}
 			throw error
 		}
 	}
 
 	private appendErrorMessage(connection: McpConnection, error: string) {
+		// Limit error message length to prevent excessive length
+		const maxErrorLength = 1000
 		const newError = connection.server.error ? `${connection.server.error}\n${error}` : error
-		connection.server.error = newError //.slice(0, 800)
+		connection.server.error =
+			newError.length > maxErrorLength
+				? newError.substring(0, maxErrorLength) + "...(error message truncated)"
+				: newError
 	}
 
 	private async fetchToolsList(serverName: string): Promise<McpTool[]> {
@@ -334,10 +616,17 @@ export class McpHub {
 		}
 	}
 
-	async updateServerConnections(newServers: Record<string, any>): Promise<void> {
+	async updateServerConnections(
+		newServers: Record<string, any>,
+		source: "global" | "project" = "global",
+	): Promise<void> {
 		this.isConnecting = true
 		this.removeAllFileWatchers()
-		const currentNames = new Set(this.connections.map((conn) => conn.server.name))
+		// Filter connections by source
+		const currentConnections = this.connections.filter(
+			(conn) => conn.server.source === source || (!conn.server.source && source === "global"),
+		)
+		const currentNames = new Set(currentConnections.map((conn) => conn.server.name))
 		const newNames = new Set(Object.keys(newServers))
 
 		// Delete removed servers
@@ -350,25 +639,39 @@ export class McpHub {
 
 		// Update or add servers
 		for (const [name, config] of Object.entries(newServers)) {
-			const currentConnection = this.connections.find((conn) => conn.server.name === name)
+			// Only consider connections that match the current source
+			const currentConnection = this.connections.find(
+				(conn) =>
+					conn.server.name === name &&
+					(conn.server.source === source || (!conn.server.source && source === "global")),
+			)
+
+			// Validate and transform the config
+			let validatedConfig: z.infer<typeof ServerConfigSchema>
+			try {
+				validatedConfig = this.validateServerConfig(config, name)
+			} catch (error) {
+				this.showErrorMessage(`Invalid configuration for MCP server "${name}"`, error)
+				continue
+			}
 
 			if (!currentConnection) {
 				// New server
 				try {
-					this.setupFileWatcher(name, config)
-					await this.connectToServer(name, config)
+					this.setupFileWatcher(name, validatedConfig)
+					await this.connectToServer(name, validatedConfig, source)
 				} catch (error) {
-					console.error(`Failed to connect to new MCP server ${name}:`, error)
+					this.showErrorMessage(`Failed to connect to new MCP server ${name}`, error)
 				}
 			} else if (!deepEqual(JSON.parse(currentConnection.server.config), config)) {
 				// Existing server with changed config
 				try {
-					this.setupFileWatcher(name, config)
+					this.setupFileWatcher(name, validatedConfig)
 					await this.deleteConnection(name)
-					await this.connectToServer(name, config)
-					console.log(`Reconnected MCP server with updated config: ${name}`)
+					await this.connectToServer(name, validatedConfig, source)
+					console.log(`Reconnected ${source} MCP server with updated config: ${name}`)
 				} catch (error) {
-					console.error(`Failed to reconnect MCP server ${name}:`, error)
+					this.showErrorMessage(`Failed to reconnect MCP server ${name}`, error)
 				}
 			}
 			// If server exists with same config, do nothing
@@ -377,22 +680,25 @@ export class McpHub {
 		this.isConnecting = false
 	}
 
-	private setupFileWatcher(name: string, config: any) {
-		const filePath = config.args?.find((arg: string) => arg.includes("build/index.js"))
-		if (filePath) {
-			// we use chokidar instead of onDidSaveTextDocument because it doesn't require the file to be open in the editor. The settings config is better suited for onDidSave since that will be manually updated by the user or Cline (and we want to detect save events, not every file change)
-			const watcher = chokidar.watch(filePath, {
-				// persistent: true,
-				// ignoreInitial: true,
-				// awaitWriteFinish: true, // This helps with atomic writes
-			})
+	private setupFileWatcher(name: string, config: z.infer<typeof ServerConfigSchema>) {
+		// Only stdio type has args
+		if (config.type === "stdio") {
+			const filePath = config.args?.find((arg: string) => arg.includes("build/index.js"))
+			if (filePath) {
+				// we use chokidar instead of onDidSaveTextDocument because it doesn't require the file to be open in the editor. The settings config is better suited for onDidSave since that will be manually updated by the user or Cline (and we want to detect save events, not every file change)
+				const watcher = chokidar.watch(filePath, {
+					// persistent: true,
+					// ignoreInitial: true,
+					// awaitWriteFinish: true, // This helps with atomic writes
+				})
 
-			watcher.on("change", () => {
-				console.log(`Detected change in ${filePath}. Restarting server ${name}...`)
-				this.restartConnection(name)
-			})
+				watcher.on("change", () => {
+					console.log(`Detected change in ${filePath}. Restarting server ${name}...`)
+					this.restartConnection(name)
+				})
 
-			this.fileWatchers.set(name, watcher)
+				this.fileWatchers.set(name, watcher)
+			}
 		}
 	}
 
@@ -414,17 +720,27 @@ export class McpHub {
 		if (config) {
 			vscode.window.showInformationMessage(`Restarting ${serverName} MCP server...`)
 			connection.server.status = "connecting"
-			connection.server.error = ""
+			connection.server.error = "" // Clear any previous error messages
 			await this.notifyWebviewOfServerChanges()
 			await delay(500) // artificial delay to show user that server is restarting
 			try {
+				// Save the original source before deleting the connection
+				const source = connection.server.source || "global"
 				await this.deleteConnection(serverName)
-				// Try to connect again using existing config
-				await this.connectToServer(serverName, JSON.parse(config))
-				vscode.window.showInformationMessage(`${serverName} MCP server connected`)
+				// Parse the config to validate it
+				const parsedConfig = JSON.parse(config)
+				try {
+					// Validate the config
+					const validatedConfig = this.validateServerConfig(parsedConfig, serverName)
+
+					// Try to connect again using validated config and preserve the original source
+					await this.connectToServer(serverName, validatedConfig, source)
+					vscode.window.showInformationMessage(`${serverName} MCP server connected`)
+				} catch (validationError) {
+					this.showErrorMessage(`Invalid configuration for MCP server "${serverName}"`, validationError)
+				}
 			} catch (error) {
-				console.error(`Failed to restart connection for ${serverName}:`, error)
-				vscode.window.showErrorMessage(`Failed to connect to ${serverName} MCP server`)
+				this.showErrorMessage(`Failed to restart ${serverName} MCP server connection`, error)
 			}
 		}
 
@@ -433,20 +749,49 @@ export class McpHub {
 	}
 
 	private async notifyWebviewOfServerChanges(): Promise<void> {
-		// servers should always be sorted in the order they are defined in the settings file
+		// Get global server order from settings file
 		const settingsPath = await this.getMcpSettingsFilePath()
 		const content = await fs.readFile(settingsPath, "utf-8")
 		const config = JSON.parse(content)
-		const serverOrder = Object.keys(config.mcpServers || {})
+		const globalServerOrder = Object.keys(config.mcpServers || {})
+
+		// Get project server order if available
+		const projectMcpPath = await this.getProjectMcpPath()
+		let projectServerOrder: string[] = []
+		if (projectMcpPath) {
+			try {
+				const projectContent = await fs.readFile(projectMcpPath, "utf-8")
+				const projectConfig = JSON.parse(projectContent)
+				projectServerOrder = Object.keys(projectConfig.mcpServers || {})
+			} catch (error) {
+				console.error("Failed to read project MCP config:", error)
+			}
+		}
+
+		// Sort connections: first global servers in their defined order, then project servers in their defined order
+		const sortedConnections = [...this.connections].sort((a, b) => {
+			const aIsGlobal = a.server.source === "global" || !a.server.source
+			const bIsGlobal = b.server.source === "global" || !b.server.source
+
+			// If both are global or both are project, sort by their respective order
+			if (aIsGlobal && bIsGlobal) {
+				const indexA = globalServerOrder.indexOf(a.server.name)
+				const indexB = globalServerOrder.indexOf(b.server.name)
+				return indexA - indexB
+			} else if (!aIsGlobal && !bIsGlobal) {
+				const indexA = projectServerOrder.indexOf(a.server.name)
+				const indexB = projectServerOrder.indexOf(b.server.name)
+				return indexA - indexB
+			}
+
+			// Global servers come before project servers
+			return aIsGlobal ? -1 : 1
+		})
+
+		// Send sorted servers to webview
 		await this.providerRef.deref()?.postMessageToWebview({
 			type: "mcpServers",
-			mcpServers: [...this.connections]
-				.sort((a, b) => {
-					const indexA = serverOrder.indexOf(a.server.name)
-					const indexB = serverOrder.indexOf(b.server.name)
-					return indexA - indexB
-				})
-				.map((connection) => connection.server),
+			mcpServers: sortedConnections.map((connection) => connection.server),
 		})
 	}
 
@@ -514,13 +859,7 @@ export class McpHub {
 				await this.notifyWebviewOfServerChanges()
 			}
 		} catch (error) {
-			console.error("Failed to update server disabled state:", error)
-			if (error instanceof Error) {
-				console.error("Error details:", error.message, error.stack)
-			}
-			vscode.window.showErrorMessage(
-				`Failed to update server state: ${error instanceof Error ? error.message : String(error)}`,
-			)
+			this.showErrorMessage(`Failed to update server ${serverName} state`, error)
 			throw error
 		}
 	}
@@ -567,29 +906,37 @@ export class McpHub {
 				await this.notifyWebviewOfServerChanges()
 			}
 		} catch (error) {
-			console.error("Failed to update server timeout:", error)
-			if (error instanceof Error) {
-				console.error("Error details:", error.message, error.stack)
-			}
-			vscode.window.showErrorMessage(
-				`Failed to update server timeout: ${error instanceof Error ? error.message : String(error)}`,
-			)
+			this.showErrorMessage(`Failed to update server ${serverName} timeout settings`, error)
 			throw error
 		}
 	}
 
 	public async deleteServer(serverName: string): Promise<void> {
 		try {
-			const settingsPath = await this.getMcpSettingsFilePath()
+			// Find the connection to determine if it's a global or project server
+			const connection = this.connections.find((conn) => conn.server.name === serverName)
+			const isProjectServer = connection?.server.source === "project"
+
+			// Determine which config file to modify
+			let configPath: string
+			if (isProjectServer) {
+				const projectMcpPath = await this.getProjectMcpPath()
+				if (!projectMcpPath) {
+					throw new Error("Project MCP configuration file not found")
+				}
+				configPath = projectMcpPath
+			} else {
+				configPath = await this.getMcpSettingsFilePath()
+			}
 
-			// Ensure the settings file exists and is accessible
+			// Ensure the config file exists and is accessible
 			try {
-				await fs.access(settingsPath)
+				await fs.access(configPath)
 			} catch (error) {
-				throw new Error("Settings file not accessible")
+				throw new Error(`Configuration file not accessible: ${configPath}`)
 			}
 
-			const content = await fs.readFile(settingsPath, "utf-8")
+			const content = await fs.readFile(configPath, "utf-8")
 			const config = JSON.parse(content)
 
 			// Validate the config structure
@@ -610,23 +957,24 @@ export class McpHub {
 					mcpServers: config.mcpServers,
 				}
 
-				await fs.writeFile(settingsPath, JSON.stringify(updatedConfig, null, 2))
+				await fs.writeFile(configPath, JSON.stringify(updatedConfig, null, 2))
 
-				// Update server connections
-				await this.updateServerConnections(config.mcpServers)
+				// Delete the connection
+				await this.deleteConnection(serverName)
+
+				// If it's a project server, update project servers, otherwise update global servers
+				if (isProjectServer) {
+					await this.updateProjectMcpServers()
+				} else {
+					await this.updateServerConnections(config.mcpServers)
+				}
 
 				vscode.window.showInformationMessage(`Deleted MCP server: ${serverName}`)
 			} else {
 				vscode.window.showWarningMessage(`Server "${serverName}" not found in configuration`)
 			}
 		} catch (error) {
-			console.error("Failed to delete MCP server:", error)
-			if (error instanceof Error) {
-				console.error("Error details:", error.message, error.stack)
-			}
-			vscode.window.showErrorMessage(
-				`Failed to delete MCP server: ${error instanceof Error ? error.message : String(error)}`,
-			)
+			this.showErrorMessage(`Failed to delete MCP server ${serverName}`, error)
 			throw error
 		}
 	}
@@ -667,7 +1015,7 @@ export class McpHub {
 
 		let timeout: number
 		try {
-			const parsedConfig = StdioConfigSchema.parse(JSON.parse(connection.server.config))
+			const parsedConfig = ServerConfigSchema.parse(JSON.parse(connection.server.config))
 			timeout = (parsedConfig.timeout ?? 60) * 1000
 		} catch (error) {
 			console.error("Failed to parse server config for timeout:", error)
@@ -722,13 +1070,13 @@ export class McpHub {
 				await this.notifyWebviewOfServerChanges()
 			}
 		} catch (error) {
-			console.error("Failed to update always allow settings:", error)
-			vscode.window.showErrorMessage("Failed to update always allow settings")
+			this.showErrorMessage(`Failed to update always allow settings for tool ${toolName}`, error)
 			throw error // Re-throw to ensure the error is properly handled
 		}
 	}
 
 	async dispose(): Promise<void> {
+		this.isDisposed = true
 		this.removeAllFileWatchers()
 		for (const connection of this.connections) {
 			try {

+ 40 - 9
src/services/mcp/__tests__/McpHub.test.ts

@@ -2,12 +2,32 @@ import type { McpHub as McpHubType } from "../McpHub"
 import type { ClineProvider } from "../../../core/webview/ClineProvider"
 import type { ExtensionContext, Uri } from "vscode"
 import type { McpConnection } from "../McpHub"
-import { StdioConfigSchema } from "../McpHub"
+import { ServerConfigSchema } from "../McpHub"
 
 const fs = require("fs/promises")
 const { McpHub } = require("../McpHub")
 
-jest.mock("vscode")
+jest.mock("vscode", () => ({
+	workspace: {
+		createFileSystemWatcher: jest.fn().mockReturnValue({
+			onDidChange: jest.fn(),
+			onDidCreate: jest.fn(),
+			onDidDelete: jest.fn(),
+			dispose: jest.fn(),
+		}),
+		onDidSaveTextDocument: jest.fn(),
+		onDidChangeWorkspaceFolders: jest.fn(),
+		workspaceFolders: [],
+	},
+	window: {
+		showErrorMessage: jest.fn(),
+		showInformationMessage: jest.fn(),
+		showWarningMessage: jest.fn(),
+	},
+	Disposable: {
+		from: jest.fn(),
+	},
+}))
 jest.mock("fs/promises")
 jest.mock("../../../core/webview/ClineProvider")
 
@@ -71,6 +91,7 @@ describe("McpHub", () => {
 			JSON.stringify({
 				mcpServers: {
 					"test-server": {
+						type: "stdio",
 						command: "node",
 						args: ["test.js"],
 						alwaysAllow: ["allowed-tool"],
@@ -87,6 +108,7 @@ describe("McpHub", () => {
 			const mockConfig = {
 				mcpServers: {
 					"test-server": {
+						type: "stdio",
 						command: "node",
 						args: ["test.js"],
 						alwaysAllow: [],
@@ -109,6 +131,7 @@ describe("McpHub", () => {
 			const mockConfig = {
 				mcpServers: {
 					"test-server": {
+						type: "stdio",
 						command: "node",
 						args: ["test.js"],
 						alwaysAllow: ["existing-tool"],
@@ -131,6 +154,7 @@ describe("McpHub", () => {
 			const mockConfig = {
 				mcpServers: {
 					"test-server": {
+						type: "stdio",
 						command: "node",
 						args: ["test.js"],
 					},
@@ -155,6 +179,7 @@ describe("McpHub", () => {
 			const mockConfig = {
 				mcpServers: {
 					"test-server": {
+						type: "stdio",
 						command: "node",
 						args: ["test.js"],
 						disabled: false,
@@ -294,20 +319,21 @@ describe("McpHub", () => {
 			it("should validate timeout values", () => {
 				// Test valid timeout values
 				const validConfig = {
+					type: "stdio",
 					command: "test",
 					timeout: 60,
 				}
-				expect(() => StdioConfigSchema.parse(validConfig)).not.toThrow()
+				expect(() => ServerConfigSchema.parse(validConfig)).not.toThrow()
 
 				// Test invalid timeout values
 				const invalidConfigs = [
-					{ command: "test", timeout: 0 }, // Too low
-					{ command: "test", timeout: 3601 }, // Too high
-					{ command: "test", timeout: -1 }, // Negative
+					{ type: "stdio", command: "test", timeout: 0 }, // Too low
+					{ type: "stdio", command: "test", timeout: 3601 }, // Too high
+					{ type: "stdio", command: "test", timeout: -1 }, // Negative
 				]
 
 				invalidConfigs.forEach((config) => {
-					expect(() => StdioConfigSchema.parse(config)).toThrow()
+					expect(() => ServerConfigSchema.parse(config)).toThrow()
 				})
 			})
 
@@ -315,7 +341,7 @@ describe("McpHub", () => {
 				const mockConnection: McpConnection = {
 					server: {
 						name: "test-server",
-						config: JSON.stringify({ command: "test" }), // No timeout specified
+						config: JSON.stringify({ type: "stdio", command: "test" }), // No timeout specified
 						status: "connected",
 					},
 					client: {
@@ -338,7 +364,7 @@ describe("McpHub", () => {
 				const mockConnection: McpConnection = {
 					server: {
 						name: "test-server",
-						config: JSON.stringify({ command: "test", timeout: 120 }), // 2 minutes
+						config: JSON.stringify({ type: "stdio", command: "test", timeout: 120 }), // 2 minutes
 						status: "connected",
 					},
 					client: {
@@ -363,6 +389,7 @@ describe("McpHub", () => {
 				const mockConfig = {
 					mcpServers: {
 						"test-server": {
+							type: "stdio",
 							command: "node",
 							args: ["test.js"],
 							timeout: 60,
@@ -385,6 +412,7 @@ describe("McpHub", () => {
 				const mockConfig = {
 					mcpServers: {
 						"test-server": {
+							type: "stdio",
 							command: "node",
 							args: ["test.js"],
 							timeout: 60,
@@ -406,6 +434,7 @@ describe("McpHub", () => {
 					server: {
 						name: "test-server",
 						config: JSON.stringify({
+							type: "stdio",
 							command: "node",
 							args: ["test.js"],
 							timeout: 3601, // Invalid timeout
@@ -435,6 +464,7 @@ describe("McpHub", () => {
 				const mockConfig = {
 					mcpServers: {
 						"test-server": {
+							type: "stdio",
 							command: "node",
 							args: ["test.js"],
 							timeout: 60,
@@ -458,6 +488,7 @@ describe("McpHub", () => {
 				const mockConfig = {
 					mcpServers: {
 						"test-server": {
+							type: "stdio",
 							command: "node",
 							args: ["test.js"],
 							timeout: 60,

+ 2 - 0
src/shared/WebviewMessage.ts

@@ -59,6 +59,7 @@ export interface WebviewMessage {
 		| "screenshotQuality"
 		| "remoteBrowserHost"
 		| "openMcpSettings"
+		| "openProjectMcpSettings"
 		| "restartMcpServer"
 		| "toggleToolAlwaysAllow"
 		| "toggleMcpServer"
@@ -107,6 +108,7 @@ export interface WebviewMessage {
 		| "discoverBrowser"
 		| "browserConnectionResult"
 		| "remoteBrowserEnabled"
+		| "language"
 	text?: string
 	disabled?: boolean
 	askResponse?: ClineAskResponse

+ 0 - 3
src/shared/__tests__/experiments.test.ts

@@ -5,9 +5,6 @@ describe("experiments", () => {
 		it("is configured correctly", () => {
 			expect(EXPERIMENT_IDS.POWER_STEERING).toBe("powerSteering")
 			expect(experimentConfigsMap.POWER_STEERING).toMatchObject({
-				name: 'Use experimental "power steering" mode',
-				description:
-					"When enabled, Roo will remind the model about the details of its current mode definition more frequently. This will lead to stronger adherence to role definitions and custom instructions, but will use more tokens per message.",
 				enabled: false,
 			})
 		})

+ 3 - 1
src/shared/api.ts

@@ -85,7 +85,9 @@ export type ApiConfiguration = ApiHandlerOptions & {
 // Import GlobalStateKey type from globalState.ts
 import { GlobalStateKey } from "./globalState"
 
-// Define API configuration keys for dynamic object building
+// Define API configuration keys for dynamic object building.
+// TODO: This needs actual type safety; a type error should be thrown if
+// this is not an exhaustive list of all `GlobalStateKey` values.
 export const API_CONFIG_KEYS: GlobalStateKey[] = [
 	"apiModelId",
 	"anthropicBaseUrl",

+ 1 - 32
src/shared/experiments.ts

@@ -10,8 +10,6 @@ export type ExperimentKey = keyof typeof EXPERIMENT_IDS
 export type ExperimentId = valueof<typeof EXPERIMENT_IDS>
 
 export interface ExperimentConfig {
-	name: string
-	description: string
 	enabled: boolean
 }
 
@@ -19,34 +17,18 @@ type valueof<X> = X[keyof X]
 
 export const experimentConfigsMap: Record<ExperimentKey, ExperimentConfig> = {
 	DIFF_STRATEGY: {
-		name: "Use experimental unified diff strategy",
-		description:
-			"Enable the experimental unified diff strategy. This strategy might reduce the number of retries caused by model errors but may cause unexpected behavior or incorrect edits. Only enable if you understand the risks and are willing to carefully review all changes.",
 		enabled: false,
 	},
 	SEARCH_AND_REPLACE: {
-		name: "Use experimental search and replace tool",
-		description:
-			"Enable the experimental search and replace tool, allowing Roo to replace multiple instances of a search term in one request.",
 		enabled: false,
 	},
 	INSERT_BLOCK: {
-		name: "Use experimental insert content tool",
-
-		description:
-			"Enable the experimental insert content tool, allowing Roo to insert content at specific line numbers without needing to create a diff.",
 		enabled: false,
 	},
 	POWER_STEERING: {
-		name: 'Use experimental "power steering" mode',
-		description:
-			"When enabled, Roo will remind the model about the details of its current mode definition more frequently. This will lead to stronger adherence to role definitions and custom instructions, but will use more tokens per message.",
 		enabled: false,
 	},
 	MULTI_SEARCH_AND_REPLACE: {
-		name: "Use experimental multi block diff tool",
-		description:
-			"When enabled, Roo will use multi block diff tool. This will try to update multiple code blocks in the file in one request.",
 		enabled: false,
 	},
 }
@@ -67,17 +49,4 @@ export const experiments = {
 	},
 } as const
 
-// Expose experiment details for UI - pre-compute from map for better performance
-export const experimentLabels = Object.fromEntries(
-	Object.entries(experimentConfigsMap).map(([_, config]) => [
-		EXPERIMENT_IDS[_ as keyof typeof EXPERIMENT_IDS] as ExperimentId,
-		config.name,
-	]),
-) as Record<string, string>
-
-export const experimentDescriptions = Object.fromEntries(
-	Object.entries(experimentConfigsMap).map(([_, config]) => [
-		EXPERIMENT_IDS[_ as keyof typeof EXPERIMENT_IDS] as ExperimentId,
-		config.description,
-	]),
-) as Record<string, string>
+// No longer needed as we use translation keys directly in the UI

+ 1 - 0
src/shared/globalState.ts

@@ -116,6 +116,7 @@ export const GLOBAL_STATE_KEYS = [
 	"telemetrySetting",
 	"showRooIgnoredFiles",
 	"remoteBrowserEnabled",
+	"language",
 	"maxWorkspaceFiles",
 ] as const
 

+ 2 - 0
src/shared/mcp.ts

@@ -8,6 +8,8 @@ export type McpServer = {
 	resourceTemplates?: McpResourceTemplate[]
 	disabled?: boolean
 	timeout?: number
+	source?: "global" | "project"
+	projectPath?: string
 }
 
 export type McpTool = {

+ 0 - 9
src/shared/tool-groups.ts

@@ -66,12 +66,3 @@ export function getToolName(toolConfig: string | readonly [ToolName, ...any[]]):
 export function getToolOptions(toolConfig: string | readonly [ToolName, ...any[]]): any {
 	return typeof toolConfig === "string" ? undefined : toolConfig[1]
 }
-
-// Display names for groups in UI
-export const GROUP_DISPLAY_NAMES: Record<ToolGroup, string> = {
-	read: "Read Files",
-	edit: "Edit Files",
-	browser: "Use Browser",
-	command: "Run Commands",
-	mcp: "Use MCP",
-}

+ 30 - 29
webview-ui/src/components/chat/AutoApproveMenu.tsx

@@ -1,6 +1,7 @@
 import { VSCodeCheckbox } from "@vscode/webview-ui-toolkit/react"
 import { useCallback, useState } from "react"
 import { useExtensionState } from "../../context/ExtensionStateContext"
+import { useAppTranslation } from "../../i18n/TranslationContext"
 import { vscode } from "../../utils/vscode"
 
 interface AutoApproveAction {
@@ -38,63 +39,64 @@ const AutoApproveMenu = ({ style }: AutoApproveMenuProps) => {
 		setAutoApprovalEnabled,
 	} = useExtensionState()
 
+	const { t } = useAppTranslation()
+
 	const actions: AutoApproveAction[] = [
 		{
 			id: "readFiles",
-			label: "Read files and directories",
-			shortName: "Read",
+			label: t("chat:autoApprove.actions.readFiles.label"),
+			shortName: t("chat:autoApprove.actions.readFiles.shortName"),
 			enabled: alwaysAllowReadOnly ?? false,
-			description: "Allows access to read any file on your computer.",
+			description: t("chat:autoApprove.actions.readFiles.description"),
 		},
 		{
 			id: "editFiles",
-			label: "Edit files",
-			shortName: "Edit",
+			label: t("chat:autoApprove.actions.editFiles.label"),
+			shortName: t("chat:autoApprove.actions.editFiles.shortName"),
 			enabled: alwaysAllowWrite ?? false,
-			description: "Allows modification of any files on your computer.",
+			description: t("chat:autoApprove.actions.editFiles.description"),
 		},
 		{
 			id: "executeCommands",
-			label: "Execute approved commands",
-			shortName: "Commands",
+			label: t("chat:autoApprove.actions.executeCommands.label"),
+			shortName: t("chat:autoApprove.actions.executeCommands.shortName"),
 			enabled: alwaysAllowExecute ?? false,
-			description:
-				"Allows execution of approved terminal commands. You can configure this in the settings panel.",
+			description: t("chat:autoApprove.actions.executeCommands.description"),
 		},
 		{
 			id: "useBrowser",
-			label: "Use the browser",
-			shortName: "Browser",
+			label: t("chat:autoApprove.actions.useBrowser.label"),
+			shortName: t("chat:autoApprove.actions.useBrowser.shortName"),
 			enabled: alwaysAllowBrowser ?? false,
-			description: "Allows ability to launch and interact with any website in a headless browser.",
+			description: t("chat:autoApprove.actions.useBrowser.description"),
 		},
 		{
 			id: "useMcp",
-			label: "Use MCP servers",
-			shortName: "MCP",
+			label: t("chat:autoApprove.actions.useMcp.label"),
+			shortName: t("chat:autoApprove.actions.useMcp.shortName"),
 			enabled: alwaysAllowMcp ?? false,
-			description: "Allows use of configured MCP servers which may modify filesystem or interact with APIs.",
+			description: t("chat:autoApprove.actions.useMcp.description"),
 		},
 		{
 			id: "switchModes",
-			label: "Switch modes",
-			shortName: "Modes",
+			label: t("chat:autoApprove.actions.switchModes.label"),
+			shortName: t("chat:autoApprove.actions.switchModes.shortName"),
 			enabled: alwaysAllowModeSwitch ?? false,
-			description: "Allows automatic switching between different modes without requiring approval.",
+			description: t("chat:autoApprove.actions.switchModes.description"),
 		},
 		{
 			id: "subtasks",
-			label: "Create & complete subtasks",
-			shortName: "Subtasks",
+			label: t("chat:autoApprove.actions.subtasks.label"),
+			shortName: t("chat:autoApprove.actions.subtasks.shortName"),
 			enabled: alwaysAllowSubtasks ?? false,
-			description: "Allow creation and completion of subtasks without requiring approval.",
+			description: t("chat:autoApprove.actions.subtasks.description"),
 		},
 		{
 			id: "retryRequests",
-			label: "Retry failed requests",
-			shortName: "Retries",
+			label: t("chat:autoApprove.actions.retryRequests.label"),
+			shortName: t("chat:autoApprove.actions.retryRequests.shortName"),
 			enabled: alwaysApproveResubmit ?? false,
-			description: "Automatically retry failed API requests when the provider returns an error response.",
+			description: t("chat:autoApprove.actions.retryRequests.description"),
 		},
 	]
 
@@ -211,7 +213,7 @@ const AutoApproveMenu = ({ style }: AutoApproveMenuProps) => {
 							color: "var(--vscode-foreground)",
 							flexShrink: 0,
 						}}>
-						Auto-approve:
+						{t("chat:autoApprove.title")}
 					</span>
 					<span
 						style={{
@@ -222,7 +224,7 @@ const AutoApproveMenu = ({ style }: AutoApproveMenuProps) => {
 							flex: 1,
 							minWidth: 0,
 						}}>
-						{enabledActionsList || "None"}
+						{enabledActionsList || t("chat:autoApprove.none")}
 					</span>
 					<span
 						className={`codicon codicon-chevron-${isExpanded ? "down" : "right"}`}
@@ -241,8 +243,7 @@ const AutoApproveMenu = ({ style }: AutoApproveMenuProps) => {
 							color: "var(--vscode-descriptionForeground)",
 							fontSize: "12px",
 						}}>
-						Auto-approve allows Roo Code to perform actions without asking for permission. Only enable for
-						actions you fully trust.
+						{t("chat:autoApprove.description")}
 					</div>
 					{actions.map((action) => (
 						<div key={action.id} style={{ margin: "6px 0" }}>

+ 18 - 17
webview-ui/src/components/chat/ChatTextArea.tsx

@@ -20,6 +20,7 @@ import Thumbnails from "../common/Thumbnails"
 import { convertToMentionPath } from "../../utils/path-mentions"
 import { MAX_IMAGES_PER_MESSAGE } from "./ChatView"
 import ContextMenu from "./ContextMenu"
+import { useAppTranslation } from "../../i18n/TranslationContext"
 
 interface ChatTextAreaProps {
 	inputValue: string
@@ -56,6 +57,7 @@ const ChatTextArea = forwardRef<HTMLTextAreaElement, ChatTextAreaProps>(
 		},
 		ref,
 	) => {
+		const { t } = useAppTranslation()
 		const { filePaths, openedTabs, currentApiConfigName, listApiConfigMeta, customModes, cwd } = useExtensionState()
 		const [gitCommits, setGitCommits] = useState<any[]>([])
 		const [showDropdown, setShowDropdown] = useState(false)
@@ -133,12 +135,11 @@ const ChatTextArea = forwardRef<HTMLTextAreaElement, ChatTextAreaProps>(
 					}
 					vscode.postMessage(message)
 				} else {
-					const promptDescription =
-						"The 'Enhance Prompt' button helps improve your prompt by providing additional context, clarification, or rephrasing. Try typing a prompt in here and clicking the button again to see how it works."
+					const promptDescription = t("chat:enhancePromptDescription")
 					setInputValue(promptDescription)
 				}
 			}
-		}, [inputValue, textAreaDisabled, setInputValue])
+		}, [inputValue, textAreaDisabled, setInputValue, t])
 
 		const queryItems = useMemo(() => {
 			return [
@@ -475,7 +476,7 @@ const ChatTextArea = forwardRef<HTMLTextAreaElement, ChatTextAreaProps>(
 							const reader = new FileReader()
 							reader.onloadend = () => {
 								if (reader.error) {
-									console.error("Error reading file:", reader.error)
+									console.error(t("chat:errorReadingFile"), reader.error)
 									resolve(null)
 								} else {
 									const result = reader.result
@@ -490,11 +491,11 @@ const ChatTextArea = forwardRef<HTMLTextAreaElement, ChatTextAreaProps>(
 					if (dataUrls.length > 0) {
 						setSelectedImages((prevImages) => [...prevImages, ...dataUrls].slice(0, MAX_IMAGES_PER_MESSAGE))
 					} else {
-						console.warn("No valid images were processed")
+						console.warn(t("chat:noValidImages"))
 					}
 				}
 			},
-			[shouldDisableImages, setSelectedImages, cursorPosition, setInputValue, inputValue],
+			[shouldDisableImages, setSelectedImages, cursorPosition, setInputValue, inputValue, t],
 		)
 
 		const handleThumbnailsHeightChange = useCallback((height: number) => {
@@ -611,7 +612,7 @@ const ChatTextArea = forwardRef<HTMLTextAreaElement, ChatTextAreaProps>(
 								const reader = new FileReader()
 								reader.onloadend = () => {
 									if (reader.error) {
-										console.error("Error reading file:", reader.error)
+										console.error(t("chat:errorReadingFile"), reader.error)
 										resolve(null)
 									} else {
 										const result = reader.result
@@ -634,7 +635,7 @@ const ChatTextArea = forwardRef<HTMLTextAreaElement, ChatTextAreaProps>(
 								})
 							}
 						} else {
-							console.warn("No valid images were processed")
+							console.warn(t("chat:noValidImages"))
 						}
 					}
 				}}
@@ -779,7 +780,7 @@ const ChatTextArea = forwardRef<HTMLTextAreaElement, ChatTextAreaProps>(
 							<SelectDropdown
 								value={mode}
 								disabled={textAreaDisabled}
-								title="Select mode for interaction"
+								title={t("chat:selectMode")}
 								options={[
 									// Add the shortcut text as a disabled option at the top
 									{
@@ -797,13 +798,13 @@ const ChatTextArea = forwardRef<HTMLTextAreaElement, ChatTextAreaProps>(
 									// Add separator
 									{
 										value: "sep-1",
-										label: "Separator",
+										label: t("chat:separator"),
 										type: DropdownOptionType.SEPARATOR,
 									},
 									// Add Edit option
 									{
 										value: "promptsButtonClicked",
-										label: "Edit...",
+										label: t("chat:edit"),
 										type: DropdownOptionType.ACTION,
 									},
 								]}
@@ -829,7 +830,7 @@ const ChatTextArea = forwardRef<HTMLTextAreaElement, ChatTextAreaProps>(
 							<SelectDropdown
 								value={currentApiConfigName || ""}
 								disabled={textAreaDisabled}
-								title="Select API configuration"
+								title={t("chat:selectApiConfig")}
 								options={[
 									// Add all API configurations
 									...(listApiConfigMeta || []).map((config) => ({
@@ -840,13 +841,13 @@ const ChatTextArea = forwardRef<HTMLTextAreaElement, ChatTextAreaProps>(
 									// Add separator
 									{
 										value: "sep-2",
-										label: "Separator",
+										label: t("chat:separator"),
 										type: DropdownOptionType.SEPARATOR,
 									},
 									// Add Edit option
 									{
 										value: "settingsButtonClicked",
-										label: "Edit...",
+										label: t("chat:edit"),
 										type: DropdownOptionType.ACTION,
 									},
 								]}
@@ -886,7 +887,7 @@ const ChatTextArea = forwardRef<HTMLTextAreaElement, ChatTextAreaProps>(
 									role="button"
 									aria-label="enhance prompt"
 									data-testid="enhance-prompt-button"
-									title="Enhance prompt with additional context"
+									title={t("chat:enhancePrompt")}
 									className={`input-icon-button ${
 										textAreaDisabled ? "disabled" : ""
 									} codicon codicon-sparkle`}
@@ -899,13 +900,13 @@ const ChatTextArea = forwardRef<HTMLTextAreaElement, ChatTextAreaProps>(
 							className={`input-icon-button ${
 								shouldDisableImages ? "disabled" : ""
 							} codicon codicon-device-camera`}
-							title="Add images to message"
+							title={t("chat:addImages")}
 							onClick={() => !shouldDisableImages && onSelectImages()}
 							style={{ fontSize: 16.5 }}
 						/>
 						<span
 							className={`input-icon-button ${textAreaDisabled ? "disabled" : ""} codicon codicon-send`}
-							title="Send message"
+							title={t("chat:sendMessage")}
 							onClick={() => !textAreaDisabled && onSend()}
 							style={{ fontSize: 15 }}
 						/>

+ 53 - 61
webview-ui/src/components/chat/ChatView.tsx

@@ -42,9 +42,10 @@ interface ChatViewProps {
 export const MAX_IMAGES_PER_MESSAGE = 20 // Anthropic limits to 20 images
 
 const isMac = navigator.platform.toUpperCase().indexOf("MAC") >= 0
-const modeShortcutText = `${isMac ? "⌘" : "Ctrl"} + . for next mode`
 
 const ChatView = ({ isHidden, showAnnouncement, hideAnnouncement, showHistoryView }: ChatViewProps) => {
+	const { t } = useAppTranslation()
+	const modeShortcutText = `${isMac ? "⌘" : "Ctrl"} + . ${t("chat:forNextMode")}`
 	const {
 		version,
 		clineMessages: messages,
@@ -67,8 +68,6 @@ const ChatView = ({ isHidden, showAnnouncement, hideAnnouncement, showHistoryVie
 		telemetrySetting,
 	} = useExtensionState()
 
-	const { t } = useAppTranslation()
-
 	//const task = messages.length > 0 ? (messages[0].say === "task" ? messages[0] : undefined) : undefined) : undefined
 	const task = useMemo(() => messages.at(0), [messages]) // leaving this less safe version here since if the first message is not a task, then the extension is in a bad state and needs to be debugged (see Cline.abort)
 	const modifiedMessages = useMemo(() => combineApiRequests(combineCommandSequences(messages.slice(1))), [messages])
@@ -119,16 +118,16 @@ const ChatView = ({ isHidden, showAnnouncement, hideAnnouncement, showHistoryVie
 							setTextAreaDisabled(true)
 							setClineAsk("api_req_failed")
 							setEnableButtons(true)
-							setPrimaryButtonText("Retry")
-							setSecondaryButtonText("Start New Task")
+							setPrimaryButtonText(t("chat:retry.title"))
+							setSecondaryButtonText(t("chat:startNewTask.title"))
 							break
 						case "mistake_limit_reached":
 							playSound("progress_loop")
 							setTextAreaDisabled(false)
 							setClineAsk("mistake_limit_reached")
 							setEnableButtons(true)
-							setPrimaryButtonText("Proceed Anyways")
-							setSecondaryButtonText("Start New Task")
+							setPrimaryButtonText(t("chat:proceedAnyways.title"))
+							setSecondaryButtonText(t("chat:startNewTask.title"))
 							break
 						case "followup":
 							setTextAreaDisabled(isPartial)
@@ -149,16 +148,16 @@ const ChatView = ({ isHidden, showAnnouncement, hideAnnouncement, showHistoryVie
 								case "editedExistingFile":
 								case "appliedDiff":
 								case "newFileCreated":
-									setPrimaryButtonText("Save")
-									setSecondaryButtonText("Reject")
+									setPrimaryButtonText(t("chat:save.title"))
+									setSecondaryButtonText(t("chat:reject.title"))
 									break
 								case "finishTask":
-									setPrimaryButtonText("Complete Subtask and Return")
+									setPrimaryButtonText(t("chat:completeSubtaskAndReturn.title"))
 									setSecondaryButtonText(undefined)
 									break
 								default:
-									setPrimaryButtonText("Approve")
-									setSecondaryButtonText("Reject")
+									setPrimaryButtonText(t("chat:approve.title"))
+									setSecondaryButtonText(t("chat:reject.title"))
 									break
 							}
 							break
@@ -169,8 +168,8 @@ const ChatView = ({ isHidden, showAnnouncement, hideAnnouncement, showHistoryVie
 							setTextAreaDisabled(isPartial)
 							setClineAsk("browser_action_launch")
 							setEnableButtons(!isPartial)
-							setPrimaryButtonText("Approve")
-							setSecondaryButtonText("Reject")
+							setPrimaryButtonText(t("chat:approve.title"))
+							setSecondaryButtonText(t("chat:reject.title"))
 							break
 						case "command":
 							if (!isAutoApproved(lastMessage)) {
@@ -179,22 +178,22 @@ const ChatView = ({ isHidden, showAnnouncement, hideAnnouncement, showHistoryVie
 							setTextAreaDisabled(isPartial)
 							setClineAsk("command")
 							setEnableButtons(!isPartial)
-							setPrimaryButtonText("Run Command")
-							setSecondaryButtonText("Reject")
+							setPrimaryButtonText(t("chat:runCommand.title"))
+							setSecondaryButtonText(t("chat:reject.title"))
 							break
 						case "command_output":
 							setTextAreaDisabled(false)
 							setClineAsk("command_output")
 							setEnableButtons(true)
-							setPrimaryButtonText("Proceed While Running")
+							setPrimaryButtonText(t("chat:proceedWhileRunning.title"))
 							setSecondaryButtonText(undefined)
 							break
 						case "use_mcp_server":
 							setTextAreaDisabled(isPartial)
 							setClineAsk("use_mcp_server")
 							setEnableButtons(!isPartial)
-							setPrimaryButtonText("Approve")
-							setSecondaryButtonText("Reject")
+							setPrimaryButtonText(t("chat:approve.title"))
+							setSecondaryButtonText(t("chat:reject.title"))
 							break
 						case "completion_result":
 							// extension waiting for feedback. but we can just present a new task button
@@ -202,22 +201,22 @@ const ChatView = ({ isHidden, showAnnouncement, hideAnnouncement, showHistoryVie
 							setTextAreaDisabled(isPartial)
 							setClineAsk("completion_result")
 							setEnableButtons(!isPartial)
-							setPrimaryButtonText("Start New Task")
+							setPrimaryButtonText(t("chat:startNewTask.title"))
 							setSecondaryButtonText(undefined)
 							break
 						case "resume_task":
 							setTextAreaDisabled(false)
 							setClineAsk("resume_task")
 							setEnableButtons(true)
-							setPrimaryButtonText("Resume Task")
-							setSecondaryButtonText("Terminate")
+							setPrimaryButtonText(t("chat:resumeTask.title"))
+							setSecondaryButtonText(t("chat:terminate.title"))
 							setDidClickCancel(false) // special case where we reset the cancel button state
 							break
 						case "resume_completed_task":
 							setTextAreaDisabled(false)
 							setClineAsk("resume_completed_task")
 							setEnableButtons(true)
-							setPrimaryButtonText("Start New Task")
+							setPrimaryButtonText(t("chat:startNewTask.title"))
 							setSecondaryButtonText(undefined)
 							setDidClickCancel(false)
 							break
@@ -941,12 +940,10 @@ const ChatView = ({ isHidden, showAnnouncement, hideAnnouncement, showHistoryVie
 		[],
 	)
 
-	const placeholderText = useMemo(() => {
-		const baseText = task ? "Type a message..." : "Type your task here..."
-		const contextText = "(@ to add context, / to switch modes"
-		const imageText = shouldDisableImages ? ", hold shift to drag in files" : ", hold shift to drag in files/images"
-		return baseText + `\n${contextText}${imageText})`
-	}, [task, shouldDisableImages])
+	const baseText = task ? t("chat:typeMessage") : t("chat:typeTask")
+	const placeholderText =
+		baseText +
+		`\n(${t("chat:addContext")}${shouldDisableImages ? `, ${t("chat:dragFiles")}` : `, ${t("chat:dragFilesImages")}`})`
 
 	const itemContent = useCallback(
 		(index: number, messageOrGroup: ClineMessage | ClineMessage[]) => {
@@ -1107,13 +1104,7 @@ const ChatView = ({ isHidden, showAnnouncement, hideAnnouncement, showHistoryVie
 					{showAnnouncement && <Announcement version={version} hideAnnouncement={hideAnnouncement} />}
 					<div style={{ padding: "0 20px", flexShrink: 0 }}>
 						<h2>{t("chat:greeting")}</h2>
-						<p>
-							Thanks to the latest breakthroughs in agentic coding capabilities, I can handle complex
-							software development tasks step-by-step. With tools that let me create & edit files, explore
-							complex projects, use the browser, and execute terminal commands (after you grant
-							permission), I can assist you in ways that go beyond code completion or tech support. I can
-							even use MCP to create new tools and extend my own capabilities.
-						</p>
+						<p>{t("chat:aboutMe")}</p>
 					</div>
 					{taskHistory.length > 0 && <HistoryPreview showHistoryView={showHistoryView} />}
 				</div>
@@ -1185,7 +1176,7 @@ const ChatView = ({ isHidden, showAnnouncement, hideAnnouncement, showHistoryVie
 									scrollToBottomSmooth()
 									disableAutoScrollRef.current = false
 								}}
-								title="Scroll to bottom of chat">
+								title={t("chat:scrollToBottom")}>
 								<span className="codicon codicon-chevron-down" style={{ fontSize: "18px" }}></span>
 							</ScrollToBottomButton>
 						</div>
@@ -1210,22 +1201,23 @@ const ChatView = ({ isHidden, showAnnouncement, hideAnnouncement, showHistoryVie
 										marginRight: secondaryButtonText ? "6px" : "0",
 									}}
 									title={
-										primaryButtonText === "Retry"
-											? "Try the operation again"
-											: primaryButtonText === "Save"
-												? "Save the file changes"
-												: primaryButtonText === "Approve"
-													? "Approve this action"
-													: primaryButtonText === "Run Command"
-														? "Execute this command"
-														: primaryButtonText === "Start New Task"
-															? "Begin a new task"
-															: primaryButtonText === "Resume Task"
-																? "Continue the current task"
-																: primaryButtonText === "Proceed Anyways"
-																	? "Continue despite warnings"
-																	: primaryButtonText === "Proceed While Running"
-																		? "Continue while command executes"
+										primaryButtonText === t("chat:retry.title")
+											? t("chat:retry.tooltip")
+											: primaryButtonText === t("chat:save.title")
+												? t("chat:save.tooltip")
+												: primaryButtonText === t("chat:approve.title")
+													? t("chat:approve.tooltip")
+													: primaryButtonText === t("chat:runCommand.title")
+														? t("chat:runCommand.tooltip")
+														: primaryButtonText === t("chat:startNewTask.title")
+															? t("chat:startNewTask.tooltip")
+															: primaryButtonText === t("chat:resumeTask.title")
+																? t("chat:resumeTask.tooltip")
+																: primaryButtonText === t("chat:proceedAnyways.title")
+																	? t("chat:proceedAnyways.tooltip")
+																	: primaryButtonText ===
+																		  t("chat:proceedWhileRunning.title")
+																		? t("chat:proceedWhileRunning.tooltip")
 																		: undefined
 									}
 									onClick={(e) => handlePrimaryButtonClick(inputValue, selectedImages)}>
@@ -1242,17 +1234,17 @@ const ChatView = ({ isHidden, showAnnouncement, hideAnnouncement, showHistoryVie
 									}}
 									title={
 										isStreaming
-											? "Cancel the current operation"
-											: secondaryButtonText === "Start New Task"
-												? "Begin a new task"
-												: secondaryButtonText === "Reject"
-													? "Reject this action"
-													: secondaryButtonText === "Terminate"
-														? "End the current task"
+											? t("chat:cancel.tooltip")
+											: secondaryButtonText === t("chat:startNewTask.title")
+												? t("chat:startNewTask.tooltip")
+												: secondaryButtonText === t("chat:reject.title")
+													? t("chat:reject.tooltip")
+													: secondaryButtonText === t("chat:terminate.title")
+														? t("chat:terminate.tooltip")
 														: undefined
 									}
 									onClick={(e) => handleSecondaryButtonClick(inputValue, selectedImages)}>
-									{isStreaming ? "Cancel" : secondaryButtonText}
+									{isStreaming ? t("chat:cancel.title") : secondaryButtonText}
 								</VSCodeButton>
 							)}
 						</div>

+ 8 - 7
webview-ui/src/components/common/TelemetryBanner.tsx

@@ -3,6 +3,7 @@ import { memo, useState } from "react"
 import styled from "styled-components"
 import { vscode } from "../../utils/vscode"
 import { TelemetrySetting } from "../../../../src/shared/TelemetrySetting"
+import { useAppTranslation } from "../../i18n/TranslationContext"
 
 const BannerContainer = styled.div`
 	background-color: var(--vscode-banner-background);
@@ -24,6 +25,7 @@ const ButtonContainer = styled.div`
 `
 
 const TelemetryBanner = () => {
+	const { t } = useAppTranslation()
 	const [hasChosen, setHasChosen] = useState(false)
 
 	const handleAllow = () => {
@@ -43,14 +45,13 @@ const TelemetryBanner = () => {
 	return (
 		<BannerContainer>
 			<div>
-				<strong>Help Improve Roo Code</strong>
+				<strong>{t("welcome:telemetry.title")}</strong>
 				<div className="mt-1">
-					Send anonymous error and usage data to help us fix bugs and improve the extension. No code, prompts,
-					or personal information is ever sent.
+					{t("welcome:telemetry.anonymousTelemetry")}
 					<div className="mt-1">
-						You can always change this at the bottom of the{" "}
+						{t("welcome:telemetry.changeSettings")}{" "}
 						<VSCodeLink href="#" onClick={handleOpenSettings}>
-							settings
+							{t("welcome:telemetry.settings")}
 						</VSCodeLink>
 						.
 					</div>
@@ -58,10 +59,10 @@ const TelemetryBanner = () => {
 			</div>
 			<ButtonContainer>
 				<VSCodeButton appearance="primary" onClick={handleAllow} disabled={hasChosen}>
-					Allow
+					{t("welcome:telemetry.allow")}
 				</VSCodeButton>
 				<VSCodeButton appearance="secondary" onClick={handleDeny} disabled={hasChosen}>
-					Deny
+					{t("welcome:telemetry.deny")}
 				</VSCodeButton>
 			</ButtonContainer>
 		</BannerContainer>

+ 4 - 1
webview-ui/src/components/history/CopyButton.tsx

@@ -3,6 +3,7 @@ import { useCallback } from "react"
 import { useClipboard } from "@/components/ui/hooks"
 import { Button } from "@/components/ui"
 import { cn } from "@/lib/utils"
+import { useAppTranslation } from "@/i18n/TranslationContext"
 
 type CopyButtonProps = {
 	itemTask: string
@@ -10,6 +11,7 @@ type CopyButtonProps = {
 
 export const CopyButton = ({ itemTask }: CopyButtonProps) => {
 	const { isCopied, copy } = useClipboard()
+	const { t } = useAppTranslation()
 
 	const onCopy = useCallback(
 		(e: React.MouseEvent) => {
@@ -23,8 +25,9 @@ export const CopyButton = ({ itemTask }: CopyButtonProps) => {
 		<Button
 			variant="ghost"
 			size="icon"
-			title="Copy Prompt"
+			title={t("history:copyPrompt")}
 			onClick={onCopy}
+			data-testid="copy-prompt-button"
 			className="opacity-50 hover:opacity-100">
 			<span className={cn("codicon scale-80", { "codicon-check": isCopied, "codicon-copy": !isCopied })} />
 		</Button>

+ 6 - 6
webview-ui/src/components/history/DeleteTaskDialog.tsx

@@ -13,6 +13,7 @@ import {
 	AlertDialogTitle,
 	Button,
 } from "@/components/ui"
+import { useAppTranslation } from "@/i18n/TranslationContext"
 
 import { vscode } from "@/utils/vscode"
 
@@ -21,6 +22,7 @@ interface DeleteTaskDialogProps extends AlertDialogProps {
 }
 
 export const DeleteTaskDialog = ({ taskId, ...props }: DeleteTaskDialogProps) => {
+	const { t } = useAppTranslation()
 	const [isEnterPressed] = useKeyPress("Enter")
 
 	const { onOpenChange } = props
@@ -42,18 +44,16 @@ export const DeleteTaskDialog = ({ taskId, ...props }: DeleteTaskDialogProps) =>
 		<AlertDialog {...props}>
 			<AlertDialogContent onEscapeKeyDown={() => onOpenChange?.(false)}>
 				<AlertDialogHeader>
-					<AlertDialogTitle>Delete Task</AlertDialogTitle>
-					<AlertDialogDescription>
-						Are you sure you want to delete this task? This action cannot be undone.
-					</AlertDialogDescription>
+					<AlertDialogTitle>{t("history:deleteTask")}</AlertDialogTitle>
+					<AlertDialogDescription>{t("history:deleteTaskMessage")}</AlertDialogDescription>
 				</AlertDialogHeader>
 				<AlertDialogFooter>
 					<AlertDialogCancel asChild>
-						<Button variant="secondary">Cancel</Button>
+						<Button variant="secondary">{t("history:cancel")}</Button>
 					</AlertDialogCancel>
 					<AlertDialogAction asChild>
 						<Button variant="destructive" onClick={onDelete}>
-							Delete
+							{t("history:delete")}
 						</Button>
 					</AlertDialogAction>
 				</AlertDialogFooter>

+ 18 - 13
webview-ui/src/components/history/ExportButton.tsx

@@ -1,16 +1,21 @@
 import { vscode } from "@/utils/vscode"
 import { Button } from "@/components/ui"
+import { useAppTranslation } from "@/i18n/TranslationContext"
 
-export const ExportButton = ({ itemId }: { itemId: string }) => (
-	<Button
-		data-testid="export"
-		variant="ghost"
-		size="icon"
-		title="Export Task"
-		onClick={(e) => {
-			e.stopPropagation()
-			vscode.postMessage({ type: "exportTaskWithId", text: itemId })
-		}}>
-		<span className="codicon codicon-cloud-download" />
-	</Button>
-)
+export const ExportButton = ({ itemId }: { itemId: string }) => {
+	const { t } = useAppTranslation()
+
+	return (
+		<Button
+			data-testid="export"
+			variant="ghost"
+			size="icon"
+			title={t("history:exportTask")}
+			onClick={(e) => {
+				e.stopPropagation()
+				vscode.postMessage({ type: "exportTaskWithId", text: itemId })
+			}}>
+			<span className="codicon codicon-cloud-download" />
+		</Button>
+	)
+}

+ 13 - 8
webview-ui/src/components/history/HistoryPreview.tsx

@@ -5,24 +5,25 @@ import { formatLargeNumber, formatDate } from "@/utils/format"
 import { Button } from "@/components/ui"
 
 import { useExtensionState } from "../../context/ExtensionStateContext"
+import { useAppTranslation } from "../../i18n/TranslationContext"
 import { CopyButton } from "./CopyButton"
 
 type HistoryPreviewProps = {
 	showHistoryView: () => void
 }
-
 const HistoryPreview = ({ showHistoryView }: HistoryPreviewProps) => {
 	const { taskHistory } = useExtensionState()
+	const { t } = useAppTranslation()
 
 	return (
 		<div className="flex flex-col gap-3 shrink-0 mx-5">
 			<div className="flex items-center justify-between text-vscode-descriptionForeground">
 				<div className="flex items-center gap-1">
 					<span className="codicon codicon-comment-discussion scale-90 mr-1" />
-					<span className="font-medium text-xs uppercase">Recent Tasks</span>
+					<span className="font-medium text-xs uppercase">{t("history:recentTasks")}</span>
 				</div>
 				<Button variant="ghost" size="sm" onClick={() => showHistoryView()} className="uppercase">
-					View All
+					{t("history:viewAll")}
 				</Button>
 			</div>
 			{taskHistory.slice(0, 3).map((item) => (
@@ -50,22 +51,26 @@ const HistoryPreview = ({ showHistoryView }: HistoryPreviewProps) => {
 						</div>
 						<div className="text-xs text-vscode-descriptionForeground">
 							<span>
-								Tokens: ↑{formatLargeNumber(item.tokensIn || 0)} ↓
-								{formatLargeNumber(item.tokensOut || 0)}
+								{t("history:tokens", {
+									in: formatLargeNumber(item.tokensIn || 0),
+									out: formatLargeNumber(item.tokensOut || 0),
+								})}
 							</span>
 							{!!item.cacheWrites && (
 								<>
 									{" • "}
 									<span>
-										Cache: +{formatLargeNumber(item.cacheWrites || 0)} →{" "}
-										{formatLargeNumber(item.cacheReads || 0)}
+										{t("history:cache", {
+											writes: formatLargeNumber(item.cacheWrites || 0),
+											reads: formatLargeNumber(item.cacheReads || 0),
+										})}
 									</span>
 								</>
 							)}
 							{!!item.totalCost && (
 								<>
 									{" • "}
-									<span>API Cost: ${item.totalCost?.toFixed(4)}</span>
+									<span>{t("history:apiCost", { cost: item.totalCost?.toFixed(4) })}</span>
 								</>
 							)}
 						</div>

+ 25 - 12
webview-ui/src/components/history/HistoryView.tsx

@@ -8,6 +8,7 @@ import { vscode } from "@/utils/vscode"
 import { formatLargeNumber, formatDate } from "@/utils/format"
 import { cn } from "@/lib/utils"
 import { Button } from "@/components/ui"
+import { useAppTranslation } from "@/i18n/TranslationContext"
 
 import { Tab, TabContent, TabHeader } from "../common/Tab"
 import { useTaskSearch } from "./useTaskSearch"
@@ -22,6 +23,7 @@ type SortOption = "newest" | "oldest" | "mostExpensive" | "mostTokens" | "mostRe
 
 const HistoryView = ({ onDone }: HistoryViewProps) => {
 	const { tasks, searchQuery, setSearchQuery, sortOption, setSortOption, setLastNonRelevantSort } = useTaskSearch()
+	const { t } = useAppTranslation()
 
 	const [deleteTaskId, setDeleteTaskId] = useState<string | null>(null)
 
@@ -29,14 +31,15 @@ const HistoryView = ({ onDone }: HistoryViewProps) => {
 		<Tab>
 			<TabHeader className="flex flex-col gap-2">
 				<div className="flex justify-between items-center">
-					<h3 className="text-vscode-foreground m-0">History</h3>
-					<VSCodeButton onClick={onDone}>Done</VSCodeButton>
+					<h3 className="text-vscode-foreground m-0">{t("history:history")}</h3>
+					<VSCodeButton onClick={onDone}>{t("history:done")}</VSCodeButton>
 				</div>
 				<div className="flex flex-col gap-2">
 					<VSCodeTextField
 						style={{ width: "100%" }}
-						placeholder="Fuzzy search history..."
+						placeholder={t("history:searchPlaceholder")}
 						value={searchQuery}
+						data-testid="history-search-input"
 						onInput={(e) => {
 							const newValue = (e.target as HTMLInputElement)?.value
 							setSearchQuery(newValue)
@@ -70,15 +73,24 @@ const HistoryView = ({ onDone }: HistoryViewProps) => {
 						value={sortOption}
 						role="radiogroup"
 						onChange={(e) => setSortOption((e.target as HTMLInputElement).value as SortOption)}>
-						<VSCodeRadio value="newest">Newest</VSCodeRadio>
-						<VSCodeRadio value="oldest">Oldest</VSCodeRadio>
-						<VSCodeRadio value="mostExpensive">Most Expensive</VSCodeRadio>
-						<VSCodeRadio value="mostTokens">Most Tokens</VSCodeRadio>
+						<VSCodeRadio value="newest" data-testid="radio-newest">
+							{t("history:newest")}
+						</VSCodeRadio>
+						<VSCodeRadio value="oldest" data-testid="radio-oldest">
+							{t("history:oldest")}
+						</VSCodeRadio>
+						<VSCodeRadio value="mostExpensive" data-testid="radio-most-expensive">
+							{t("history:mostExpensive")}
+						</VSCodeRadio>
+						<VSCodeRadio value="mostTokens" data-testid="radio-most-tokens">
+							{t("history:mostTokens")}
+						</VSCodeRadio>
 						<VSCodeRadio
 							value="mostRelevant"
 							disabled={!searchQuery}
+							data-testid="radio-most-relevant"
 							style={{ opacity: searchQuery ? 1 : 0.5 }}>
-							Most Relevant
+							{t("history:mostRelevant")}
 						</VSCodeRadio>
 					</VSCodeRadioGroup>
 				</div>
@@ -132,7 +144,8 @@ const HistoryView = ({ onDone }: HistoryViewProps) => {
 										<Button
 											variant="ghost"
 											size="sm"
-											title="Delete Task (Shift + Click to skip confirmation)"
+											title={t("history:deleteTaskTitle")}
+											data-testid="delete-task-button"
 											onClick={(e) => {
 												e.stopPropagation()
 
@@ -181,7 +194,7 @@ const HistoryView = ({ onDone }: HistoryViewProps) => {
 													fontWeight: 500,
 													color: "var(--vscode-descriptionForeground)",
 												}}>
-												Tokens:
+												{t("history:tokensLabel")}
 											</span>
 											<span
 												data-testid="tokens-in"
@@ -242,7 +255,7 @@ const HistoryView = ({ onDone }: HistoryViewProps) => {
 													fontWeight: 500,
 													color: "var(--vscode-descriptionForeground)",
 												}}>
-												Cache:
+												{t("history:cacheLabel")}
 											</span>
 											<span
 												data-testid="cache-writes"
@@ -297,7 +310,7 @@ const HistoryView = ({ onDone }: HistoryViewProps) => {
 														fontWeight: 500,
 														color: "var(--vscode-descriptionForeground)",
 													}}>
-													API Cost:
+													{t("history:apiCostLabel")}
 												</span>
 												<span style={{ color: "var(--vscode-descriptionForeground)" }}>
 													${item.totalCost?.toFixed(4)}

+ 11 - 13
webview-ui/src/components/history/__tests__/HistoryView.test.tsx

@@ -7,6 +7,7 @@ import { vscode } from "../../../utils/vscode"
 
 jest.mock("../../../context/ExtensionStateContext")
 jest.mock("../../../utils/vscode")
+jest.mock("../../../i18n/TranslationContext")
 
 jest.mock("react-virtuoso", () => ({
 	Virtuoso: ({ data, itemContent }: any) => (
@@ -74,7 +75,7 @@ describe("HistoryView", () => {
 		render(<HistoryView onDone={onDone} />)
 
 		// Get search input and radio group
-		const searchInput = screen.getByPlaceholderText("Fuzzy search history...")
+		const searchInput = screen.getByTestId("history-search-input")
 		const radioGroup = screen.getByRole("radiogroup")
 
 		// Type in search
@@ -84,7 +85,7 @@ describe("HistoryView", () => {
 		jest.advanceTimersByTime(100)
 
 		// Check if sort option automatically changes to "Most Relevant"
-		const mostRelevantRadio = within(radioGroup).getByLabelText("Most Relevant")
+		const mostRelevantRadio = within(radioGroup).getByTestId("radio-most-relevant")
 		expect(mostRelevantRadio).not.toBeDisabled()
 
 		// Click the radio button
@@ -94,7 +95,7 @@ describe("HistoryView", () => {
 		jest.advanceTimersByTime(100)
 
 		// Verify radio button is checked
-		const updatedRadio = within(radioGroup).getByRole("radio", { name: "Most Relevant", checked: true })
+		const updatedRadio = within(radioGroup).getByTestId("radio-most-relevant")
 		expect(updatedRadio).toBeInTheDocument()
 	})
 
@@ -105,21 +106,18 @@ describe("HistoryView", () => {
 		const radioGroup = screen.getByRole("radiogroup")
 
 		// Test changing sort options
-		const oldestRadio = within(radioGroup).getByLabelText("Oldest")
+		const oldestRadio = within(radioGroup).getByTestId("radio-oldest")
 		fireEvent.click(oldestRadio)
 
 		// Wait for oldest radio to be checked
-		const checkedOldestRadio = await within(radioGroup).findByRole("radio", { name: "Oldest", checked: true })
+		const checkedOldestRadio = within(radioGroup).getByTestId("radio-oldest")
 		expect(checkedOldestRadio).toBeInTheDocument()
 
-		const mostExpensiveRadio = within(radioGroup).getByLabelText("Most Expensive")
+		const mostExpensiveRadio = within(radioGroup).getByTestId("radio-most-expensive")
 		fireEvent.click(mostExpensiveRadio)
 
 		// Wait for most expensive radio to be checked
-		const checkedExpensiveRadio = await within(radioGroup).findByRole("radio", {
-			name: "Most Expensive",
-			checked: true,
-		})
+		const checkedExpensiveRadio = within(radioGroup).getByTestId("radio-most-expensive")
 		expect(checkedExpensiveRadio).toBeInTheDocument()
 	})
 
@@ -147,7 +145,7 @@ describe("HistoryView", () => {
 			fireEvent.mouseEnter(taskContainer)
 
 			// Click delete button to open confirmation dialog
-			const deleteButton = within(taskContainer).getByTitle("Delete Task (Shift + Click to skip confirmation)")
+			const deleteButton = within(taskContainer).getByTestId("delete-task-button")
 			fireEvent.click(deleteButton)
 
 			// Verify dialog is shown
@@ -174,7 +172,7 @@ describe("HistoryView", () => {
 			fireEvent.mouseEnter(taskContainer)
 
 			// Shift-click delete button
-			const deleteButton = within(taskContainer).getByTitle("Delete Task (Shift + Click to skip confirmation)")
+			const deleteButton = within(taskContainer).getByTestId("delete-task-button")
 			fireEvent.click(deleteButton, { shiftKey: true })
 
 			// Verify no dialog is shown
@@ -202,7 +200,7 @@ describe("HistoryView", () => {
 		const taskContainer = screen.getByTestId("virtuoso-item-1")
 		fireEvent.mouseEnter(taskContainer)
 
-		const copyButton = within(taskContainer).getByTitle("Copy Prompt")
+		const copyButton = within(taskContainer).getByTestId("copy-prompt-button")
 
 		// Click the copy button and wait for clipboard operation
 		await act(async () => {

+ 4 - 3
webview-ui/src/components/mcp/McpEnabledToggle.tsx

@@ -1,10 +1,12 @@
 import { VSCodeCheckbox } from "@vscode/webview-ui-toolkit/react"
 import { FormEvent } from "react"
 import { useExtensionState } from "../../context/ExtensionStateContext"
+import { useAppTranslation } from "../../i18n/TranslationContext"
 import { vscode } from "../../utils/vscode"
 
 const McpEnabledToggle = () => {
 	const { mcpEnabled, setMcpEnabled } = useExtensionState()
+	const { t } = useAppTranslation()
 
 	const handleChange = (e: Event | FormEvent<HTMLElement>) => {
 		const target = ("target" in e ? e.target : null) as HTMLInputElement | null
@@ -16,7 +18,7 @@ const McpEnabledToggle = () => {
 	return (
 		<div style={{ marginBottom: "20px" }}>
 			<VSCodeCheckbox checked={mcpEnabled} onChange={handleChange}>
-				<span style={{ fontWeight: "500" }}>Enable MCP Servers</span>
+				<span style={{ fontWeight: "500" }}>{t("mcp:enableToggle.title")}</span>
 			</VSCodeCheckbox>
 			<p
 				style={{
@@ -24,8 +26,7 @@ const McpEnabledToggle = () => {
 					marginTop: "5px",
 					color: "var(--vscode-descriptionForeground)",
 				}}>
-				When enabled, Roo will be able to interact with MCP servers for advanced functionality. If you're not
-				using MCP, you can disable this to reduce Roo's token usage.
+				{t("mcp:enableToggle.description")}
 			</p>
 		</div>
 	)

+ 5 - 3
webview-ui/src/components/mcp/McpToolRow.tsx

@@ -1,5 +1,6 @@
 import { VSCodeCheckbox } from "@vscode/webview-ui-toolkit/react"
 import { McpTool } from "../../../../src/shared/mcp"
+import { useAppTranslation } from "../../i18n/TranslationContext"
 import { vscode } from "../../utils/vscode"
 
 type McpToolRowProps = {
@@ -9,6 +10,7 @@ type McpToolRowProps = {
 }
 
 const McpToolRow = ({ tool, serverName, alwaysAllowMcp }: McpToolRowProps) => {
+	const { t } = useAppTranslation()
 	const handleAlwaysAllowChange = () => {
 		if (!serverName) return
 
@@ -36,7 +38,7 @@ const McpToolRow = ({ tool, serverName, alwaysAllowMcp }: McpToolRowProps) => {
 				</div>
 				{serverName && alwaysAllowMcp && (
 					<VSCodeCheckbox checked={tool.alwaysAllow} onChange={handleAlwaysAllowChange} data-tool={tool.name}>
-						Always allow
+						{t("mcp:tool.alwaysAllow")}
 					</VSCodeCheckbox>
 				)}
 			</div>
@@ -64,7 +66,7 @@ const McpToolRow = ({ tool, serverName, alwaysAllowMcp }: McpToolRowProps) => {
 						}}>
 						<div
 							style={{ marginBottom: "4px", opacity: 0.8, fontSize: "11px", textTransform: "uppercase" }}>
-							Parameters
+							{t("mcp:tool.parameters")}
 						</div>
 						{Object.entries(tool.inputSchema.properties as Record<string, any>).map(
 							([paramName, schema]) => {
@@ -98,7 +100,7 @@ const McpToolRow = ({ tool, serverName, alwaysAllowMcp }: McpToolRowProps) => {
 												overflowWrap: "break-word",
 												wordBreak: "break-word",
 											}}>
-											{schema.description || "No description"}
+											{schema.description || t("mcp:tool.noDescription")}
 										</span>
 									</div>
 								)

+ 70 - 42
webview-ui/src/components/mcp/McpView.tsx

@@ -14,6 +14,8 @@ import { vscode } from "@/utils/vscode"
 import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogFooter } from "@/components/ui"
 
 import { useExtensionState } from "../../context/ExtensionStateContext"
+import { useAppTranslation } from "../../i18n/TranslationContext"
+import { Trans } from "react-i18next"
 import { Tab, TabContent, TabHeader } from "../common/Tab"
 import McpToolRow from "./McpToolRow"
 import McpResourceRow from "./McpResourceRow"
@@ -31,12 +33,13 @@ const McpView = ({ onDone }: McpViewProps) => {
 		enableMcpServerCreation,
 		setEnableMcpServerCreation,
 	} = useExtensionState()
+	const { t } = useAppTranslation()
 
 	return (
 		<Tab>
 			<TabHeader className="flex justify-between items-center">
-				<h3 className="text-vscode-foreground m-0">MCP Servers</h3>
-				<VSCodeButton onClick={onDone}>Done</VSCodeButton>
+				<h3 className="text-vscode-foreground m-0">{t("mcp:title")}</h3>
+				<VSCodeButton onClick={onDone}>{t("mcp:done")}</VSCodeButton>
 			</TabHeader>
 
 			<TabContent>
@@ -47,17 +50,16 @@ const McpView = ({ onDone }: McpViewProps) => {
 						marginBottom: "10px",
 						marginTop: "5px",
 					}}>
-					The{" "}
-					<VSCodeLink href="https://github.com/modelcontextprotocol" style={{ display: "inline" }}>
-						Model Context Protocol
-					</VSCodeLink>{" "}
-					enables communication with locally running MCP servers that provide additional tools and resources
-					to extend Roo's capabilities. You can use{" "}
-					<VSCodeLink href="https://github.com/modelcontextprotocol/servers" style={{ display: "inline" }}>
-						community-made servers
-					</VSCodeLink>{" "}
-					or ask Roo to create new tools specific to your workflow (e.g., "add a tool that gets the latest npm
-					docs").
+					<Trans i18nKey="mcp:description">
+						<VSCodeLink href="https://github.com/modelcontextprotocol" style={{ display: "inline" }}>
+							Model Context Protocol
+						</VSCodeLink>
+						<VSCodeLink
+							href="https://github.com/modelcontextprotocol/servers"
+							style={{ display: "inline" }}>
+							community-made servers
+						</VSCodeLink>
+					</Trans>
 				</div>
 
 				<McpEnabledToggle />
@@ -71,7 +73,7 @@ const McpView = ({ onDone }: McpViewProps) => {
 									setEnableMcpServerCreation(e.target.checked)
 									vscode.postMessage({ type: "enableMcpServerCreation", bool: e.target.checked })
 								}}>
-								<span style={{ fontWeight: "500" }}>Enable MCP Server Creation</span>
+								<span style={{ fontWeight: "500" }}>{t("mcp:enableServerCreation.title")}</span>
 							</VSCodeCheckbox>
 							<p
 								style={{
@@ -79,9 +81,7 @@ const McpView = ({ onDone }: McpViewProps) => {
 									marginTop: "5px",
 									color: "var(--vscode-descriptionForeground)",
 								}}>
-								When enabled, Roo can help you create new MCP servers via commands like "add a new tool
-								to...". If you don't need to create MCP servers you can disable this to reduce Roo's
-								token usage.
+								{t("mcp:enableServerCreation.description")}
 							</p>
 						</div>
 
@@ -94,16 +94,25 @@ const McpView = ({ onDone }: McpViewProps) => {
 							</div>
 						)}
 
-						{/* Edit Settings Button */}
-						<div style={{ marginTop: "10px", width: "100%" }}>
+						{/* Edit Settings Buttons */}
+						<div style={{ marginTop: "10px", width: "100%", display: "flex", gap: "10px" }}>
 							<VSCodeButton
 								appearance="secondary"
-								style={{ width: "100%" }}
+								style={{ flex: 1 }}
 								onClick={() => {
 									vscode.postMessage({ type: "openMcpSettings" })
 								}}>
 								<span className="codicon codicon-edit" style={{ marginRight: "6px" }}></span>
-								Edit MCP Settings
+								{t("mcp:editGlobalMCP")}
+							</VSCodeButton>
+							<VSCodeButton
+								appearance="secondary"
+								style={{ flex: 1 }}
+								onClick={() => {
+									vscode.postMessage({ type: "openProjectMcpSettings" })
+								}}>
+								<span className="codicon codicon-edit" style={{ marginRight: "6px" }}></span>
+								{t("mcp:editProjectMCP")}
 							</VSCodeButton>
 						</div>
 					</>
@@ -114,6 +123,7 @@ const McpView = ({ onDone }: McpViewProps) => {
 }
 
 const ServerRow = ({ server, alwaysAllowMcp }: { server: McpServer; alwaysAllowMcp?: boolean }) => {
+	const { t } = useAppTranslation()
 	const [isExpanded, setIsExpanded] = useState(false)
 	const [showDeleteConfirm, setShowDeleteConfirm] = useState(false)
 	const [timeoutValue, setTimeoutValue] = useState(() => {
@@ -122,14 +132,14 @@ const ServerRow = ({ server, alwaysAllowMcp }: { server: McpServer; alwaysAllowM
 	})
 
 	const timeoutOptions = [
-		{ value: 15, label: "15 seconds" },
-		{ value: 30, label: "30 seconds" },
-		{ value: 60, label: "1 minute" },
-		{ value: 300, label: "5 minutes" },
-		{ value: 600, label: "10 minutes" },
-		{ value: 900, label: "15 minutes" },
-		{ value: 1800, label: "30 minutes" },
-		{ value: 3600, label: "60 minutes" },
+		{ value: 15, label: t("mcp:networkTimeout.options.15seconds") },
+		{ value: 30, label: t("mcp:networkTimeout.options.30seconds") },
+		{ value: 60, label: t("mcp:networkTimeout.options.1minute") },
+		{ value: 300, label: t("mcp:networkTimeout.options.5minutes") },
+		{ value: 600, label: t("mcp:networkTimeout.options.10minutes") },
+		{ value: 900, label: t("mcp:networkTimeout.options.15minutes") },
+		{ value: 1800, label: t("mcp:networkTimeout.options.30minutes") },
+		{ value: 3600, label: t("mcp:networkTimeout.options.60minutes") },
 	]
 
 	const getStatusColor = () => {
@@ -193,7 +203,22 @@ const ServerRow = ({ server, alwaysAllowMcp }: { server: McpServer; alwaysAllowM
 						style={{ marginRight: "8px" }}
 					/>
 				)}
-				<span style={{ flex: 1 }}>{server.name}</span>
+				<span style={{ flex: 1 }}>
+					{server.name}
+					{server.source && (
+						<span
+							style={{
+								marginLeft: "8px",
+								padding: "1px 6px",
+								fontSize: "11px",
+								borderRadius: "4px",
+								background: "var(--vscode-badge-background)",
+								color: "var(--vscode-badge-foreground)",
+							}}>
+							{server.source}
+						</span>
+					)}
+				</span>
 				<div
 					style={{ display: "flex", alignItems: "center", marginRight: "8px" }}
 					onClick={(e) => e.stopPropagation()}>
@@ -291,7 +316,9 @@ const ServerRow = ({ server, alwaysAllowMcp }: { server: McpServer; alwaysAllowM
 						onClick={handleRestart}
 						disabled={server.status === "connecting"}
 						style={{ width: "calc(100% - 20px)", margin: "0 10px 10px 10px" }}>
-						{server.status === "connecting" ? "Retrying..." : "Retry Connection"}
+						{server.status === "connecting"
+							? t("mcp:serverStatus.retrying")
+							: t("mcp:serverStatus.retryConnection")}
 					</VSCodeButton>
 				</div>
 			) : (
@@ -304,9 +331,11 @@ const ServerRow = ({ server, alwaysAllowMcp }: { server: McpServer; alwaysAllowM
 							borderRadius: "0 0 4px 4px",
 						}}>
 						<VSCodePanels style={{ marginBottom: "10px" }}>
-							<VSCodePanelTab id="tools">Tools ({server.tools?.length || 0})</VSCodePanelTab>
+							<VSCodePanelTab id="tools">
+								{t("mcp:tabs.tools")} ({server.tools?.length || 0})
+							</VSCodePanelTab>
 							<VSCodePanelTab id="resources">
-								Resources (
+								{t("mcp:tabs.resources")} (
 								{[...(server.resourceTemplates || []), ...(server.resources || [])].length || 0})
 							</VSCodePanelTab>
 
@@ -325,7 +354,7 @@ const ServerRow = ({ server, alwaysAllowMcp }: { server: McpServer; alwaysAllowM
 									</div>
 								) : (
 									<div style={{ padding: "10px 0", color: "var(--vscode-descriptionForeground)" }}>
-										No tools found
+										{t("mcp:emptyState.noTools")}
 									</div>
 								)}
 							</VSCodePanelView>
@@ -346,7 +375,7 @@ const ServerRow = ({ server, alwaysAllowMcp }: { server: McpServer; alwaysAllowM
 									</div>
 								) : (
 									<div style={{ padding: "10px 0", color: "var(--vscode-descriptionForeground)" }}>
-										No resources found
+										{t("mcp:emptyState.noResources")}
 									</div>
 								)}
 							</VSCodePanelView>
@@ -361,7 +390,7 @@ const ServerRow = ({ server, alwaysAllowMcp }: { server: McpServer; alwaysAllowM
 									gap: "10px",
 									marginBottom: "8px",
 								}}>
-								<span>Network Timeout</span>
+								<span>{t("mcp:networkTimeout.label")}</span>
 								<select
 									value={timeoutValue}
 									onChange={handleTimeoutChange}
@@ -388,7 +417,7 @@ const ServerRow = ({ server, alwaysAllowMcp }: { server: McpServer; alwaysAllowM
 									color: "var(--vscode-descriptionForeground)",
 									display: "block",
 								}}>
-								Maximum time to wait for server responses
+								{t("mcp:networkTimeout.description")}
 							</span>
 						</div>
 					</div>
@@ -399,18 +428,17 @@ const ServerRow = ({ server, alwaysAllowMcp }: { server: McpServer; alwaysAllowM
 			<Dialog open={showDeleteConfirm} onOpenChange={setShowDeleteConfirm}>
 				<DialogContent>
 					<DialogHeader>
-						<DialogTitle>Delete MCP Server</DialogTitle>
+						<DialogTitle>{t("mcp:deleteDialog.title")}</DialogTitle>
 						<DialogDescription>
-							Are you sure you want to delete the MCP server "{server.name}"? This action cannot be
-							undone.
+							{t("mcp:deleteDialog.description", { serverName: server.name })}
 						</DialogDescription>
 					</DialogHeader>
 					<DialogFooter>
 						<VSCodeButton appearance="secondary" onClick={() => setShowDeleteConfirm(false)}>
-							Cancel
+							{t("mcp:deleteDialog.cancel")}
 						</VSCodeButton>
 						<VSCodeButton appearance="primary" onClick={handleDelete}>
-							Delete
+							{t("mcp:deleteDialog.delete")}
 						</VSCodeButton>
 					</DialogFooter>
 				</DialogContent>

+ 14 - 0
webview-ui/src/components/mcp/__tests__/McpToolRow.test.tsx

@@ -3,6 +3,20 @@ import { render, fireEvent, screen } from "@testing-library/react"
 import McpToolRow from "../McpToolRow"
 import { vscode } from "../../../utils/vscode"
 
+// Mock the translation hook
+jest.mock("../../../i18n/TranslationContext", () => ({
+	useAppTranslation: () => ({
+		t: (key: string) => {
+			const translations: Record<string, string> = {
+				"mcp:tool.alwaysAllow": "Always allow",
+				"mcp:tool.parameters": "Parameters",
+				"mcp:tool.noDescription": "No description",
+			}
+			return translations[key] || key
+		},
+	}),
+}))
+
 jest.mock("../../../utils/vscode", () => ({
 	vscode: {
 		postMessage: jest.fn(),

+ 178 - 142
webview-ui/src/components/prompts/PromptsView.tsx

@@ -20,17 +20,14 @@ import {
 	GroupEntry,
 } from "../../../../src/shared/modes"
 import { CustomModeSchema } from "../../../../src/core/config/CustomModesSchema"
-import {
-	supportPrompt,
-	SupportPromptType,
-	supportPromptLabels,
-	supportPromptDescriptions,
-} from "../../../../src/shared/support-prompt"
+import { supportPrompt, SupportPromptType } from "../../../../src/shared/support-prompt"
 
-import { TOOL_GROUPS, GROUP_DISPLAY_NAMES, ToolGroup } from "../../../../src/shared/tool-groups"
+import { TOOL_GROUPS, ToolGroup } from "../../../../src/shared/tool-groups"
 import { vscode } from "../../utils/vscode"
 import { Tab, TabContent, TabHeader } from "../common/Tab"
 import i18next from "i18next"
+import { useAppTranslation } from "../../i18n/TranslationContext"
+import { Trans } from "react-i18next"
 
 // Get all available groups that should show in prompts view
 const availableGroups = (Object.keys(TOOL_GROUPS) as ToolGroup[]).filter((group) => !TOOL_GROUPS[group].alwaysAvailable)
@@ -47,6 +44,7 @@ function getGroupName(group: GroupEntry): ToolGroup {
 }
 
 const PromptsView = ({ onDone }: PromptsViewProps) => {
+	const { t } = useAppTranslation()
 	const {
 		customModePrompts,
 		customSupportPrompts,
@@ -405,22 +403,25 @@ const PromptsView = ({ onDone }: PromptsViewProps) => {
 	return (
 		<Tab>
 			<TabHeader className="flex justify-between items-center">
-				<h3 className="text-vscode-foreground m-0">Prompts</h3>
-				<VSCodeButton onClick={onDone}>Done</VSCodeButton>
+				<h3 className="text-vscode-foreground m-0">{t("prompts:title")}</h3>
+				<VSCodeButton onClick={onDone}>{t("prompts:done")}</VSCodeButton>
 			</TabHeader>
 
 			<TabContent>
 				<div>
 					<div onClick={(e) => e.stopPropagation()} className="flex justify-between items-center mb-3">
-						<h3 className="text-vscode-foreground m-0">Modes</h3>
+						<h3 className="text-vscode-foreground m-0">{t("prompts:modes.title")}</h3>
 						<div className="flex gap-2">
-							<VSCodeButton appearance="icon" onClick={openCreateModeDialog} title="Create new mode">
+							<VSCodeButton
+								appearance="icon"
+								onClick={openCreateModeDialog}
+								title={t("prompts:modes.createNewMode")}>
 								<span className="codicon codicon-add"></span>
 							</VSCodeButton>
 							<div className="relative inline-block">
 								<VSCodeButton
 									appearance="icon"
-									title="Edit modes configuration"
+									title={t("prompts:modes.editModesConfig")}
 									className="flex"
 									onClick={(e: React.MouseEvent) => {
 										e.preventDefault()
@@ -448,7 +449,7 @@ const PromptsView = ({ onDone }: PromptsViewProps) => {
 												setShowConfigMenu(false)
 											}}
 											onClick={(e) => e.preventDefault()}>
-											Edit Global Modes
+											{t("prompts:modes.editGlobalModes")}
 										</div>
 										<div
 											className="p-2 cursor-pointer text-vscode-foreground text-sm border-t border-vscode-input-border"
@@ -465,7 +466,7 @@ const PromptsView = ({ onDone }: PromptsViewProps) => {
 												setShowConfigMenu(false)
 											}}
 											onClick={(e) => e.preventDefault()}>
-											Edit Project Modes (.roomodes)
+											{t("prompts:modes.editProjectModes")}
 										</div>
 									</div>
 								)}
@@ -474,7 +475,7 @@ const PromptsView = ({ onDone }: PromptsViewProps) => {
 					</div>
 
 					<div className="text-sm text-vscode-descriptionForeground mb-3">
-						Hit the + to create a new custom mode, or just ask Roo in chat to create one for you!
+						{t("prompts:modes.createModeHelpText")}
 					</div>
 
 					<div className="flex gap-2 items-center mb-3 flex-wrap py-1">
@@ -503,7 +504,7 @@ const PromptsView = ({ onDone }: PromptsViewProps) => {
 					{mode && findModeBySlug(mode, customModes) && (
 						<div className="flex gap-3 mb-4">
 							<div className="flex-1">
-								<div className="font-bold mb-1">Name</div>
+								<div className="font-bold mb-1">{t("prompts:createModeDialog.name.label")}</div>
 								<div className="flex gap-2">
 									<VSCodeTextField
 										value={getModeProperty(findModeBySlug(mode, customModes), "name") ?? ""}
@@ -524,7 +525,7 @@ const PromptsView = ({ onDone }: PromptsViewProps) => {
 									/>
 									<VSCodeButton
 										appearance="icon"
-										title="Delete mode"
+										title={t("prompts:createModeDialog.deleteMode")}
 										onClick={() => {
 											vscode.postMessage({
 												type: "deleteCustomMode",
@@ -539,7 +540,7 @@ const PromptsView = ({ onDone }: PromptsViewProps) => {
 					)}
 					<div style={{ marginBottom: "16px" }}>
 						<div className="flex justify-between items-center mb-1">
-							<div className="font-bold">Role Definition</div>
+							<div className="font-bold">{t("prompts:roleDefinition.title")}</div>
 							{!findModeBySlug(mode, customModes) && (
 								<VSCodeButton
 									appearance="icon"
@@ -549,15 +550,14 @@ const PromptsView = ({ onDone }: PromptsViewProps) => {
 											handleAgentReset(currentMode.slug, "roleDefinition")
 										}
 									}}
-									title="Reset to default"
+									title={t("prompts:roleDefinition.resetToDefault")}
 									data-testid="role-definition-reset">
 									<span className="codicon codicon-discard"></span>
 								</VSCodeButton>
 							)}
 						</div>
 						<div className="text-sm text-vscode-descriptionForeground mb-2">
-							Define Roo's expertise and personality for this mode. This description shapes how Roo
-							presents itself and approaches tasks.
+							{t("prompts:roleDefinition.description")}
 						</div>
 						<VSCodeTextArea
 							value={(() => {
@@ -593,7 +593,9 @@ const PromptsView = ({ onDone }: PromptsViewProps) => {
 					{/* Mode settings */}
 					<>
 						<div style={{ marginBottom: "12px" }}>
-							<div style={{ fontWeight: "bold", marginBottom: "4px" }}>API Configuration</div>
+							<div style={{ fontWeight: "bold", marginBottom: "4px" }}>
+								{t("prompts:apiConfiguration.title")}
+							</div>
 							<div style={{ marginBottom: "8px" }}>
 								<VSCodeDropdown
 									value={currentApiConfigName || ""}
@@ -612,7 +614,7 @@ const PromptsView = ({ onDone }: PromptsViewProps) => {
 									))}
 								</VSCodeDropdown>
 								<div className="text-xs mt-1.5 text-vscode-descriptionForeground">
-									Select which API configuration to use for this mode
+									{t("prompts:apiConfiguration.select")}
 								</div>
 							</div>
 						</div>
@@ -620,12 +622,16 @@ const PromptsView = ({ onDone }: PromptsViewProps) => {
 						{/* Show tools for all modes */}
 						<div className="mb-4">
 							<div className="flex justify-between items-center mb-1">
-								<div className="font-bold">Available Tools</div>
+								<div className="font-bold">{t("prompts:tools.title")}</div>
 								{findModeBySlug(mode, customModes) && (
 									<VSCodeButton
 										appearance="icon"
 										onClick={() => setIsToolsEditMode(!isToolsEditMode)}
-										title={isToolsEditMode ? "Done editing" : "Edit tools"}>
+										title={
+											isToolsEditMode
+												? t("prompts:tools.doneEditing")
+												: t("prompts:tools.editTools")
+										}>
 										<span
 											className={`codicon codicon-${isToolsEditMode ? "check" : "edit"}`}></span>
 									</VSCodeButton>
@@ -633,7 +639,7 @@ const PromptsView = ({ onDone }: PromptsViewProps) => {
 							</div>
 							{!findModeBySlug(mode, customModes) && (
 								<div className="text-sm text-vscode-descriptionForeground mb-2">
-									Tools for built-in modes cannot be modified
+									{t("prompts:tools.builtInModesText")}
 								</div>
 							)}
 							{isToolsEditMode && findModeBySlug(mode, customModes) ? (
@@ -652,10 +658,10 @@ const PromptsView = ({ onDone }: PromptsViewProps) => {
 												checked={isGroupEnabled}
 												onChange={handleGroupChange(group, Boolean(isCustomMode), customMode)}
 												disabled={!isCustomMode}>
-												{GROUP_DISPLAY_NAMES[group]}
+												{t(`prompts:tools.toolNames.${group}`)}
 												{group === "edit" && (
 													<div className="text-xs text-vscode-descriptionForeground mt-0.5">
-														Allowed files:{" "}
+														{t("prompts:tools.allowedFiles")}{" "}
 														{(() => {
 															const currentMode = getCurrentMode()
 															const editGroup = currentMode?.groups?.find(
@@ -664,7 +670,7 @@ const PromptsView = ({ onDone }: PromptsViewProps) => {
 																	g[0] === "edit" &&
 																	g[1]?.fileRegex,
 															)
-															if (!Array.isArray(editGroup)) return "all files"
+															if (!Array.isArray(editGroup)) return t("prompts:allFiles")
 															return (
 																editGroup[1].description ||
 																`/${editGroup[1].fileRegex}/`
@@ -684,7 +690,7 @@ const PromptsView = ({ onDone }: PromptsViewProps) => {
 										return enabledGroups
 											.map((group) => {
 												const groupName = getGroupName(group)
-												const displayName = GROUP_DISPLAY_NAMES[groupName]
+												const displayName = t(`prompts:tools.toolNames.${groupName}`)
 												if (Array.isArray(group) && group[1]?.fileRegex) {
 													const description =
 														group[1].description || `/${group[1].fileRegex}/`
@@ -708,7 +714,7 @@ const PromptsView = ({ onDone }: PromptsViewProps) => {
 								alignItems: "center",
 								marginBottom: "4px",
 							}}>
-							<div style={{ fontWeight: "bold" }}>Mode-specific Custom Instructions (optional)</div>
+							<div style={{ fontWeight: "bold" }}>{t("prompts:customInstructions.title")}</div>
 							{!findModeBySlug(mode, customModes) && (
 								<VSCodeButton
 									appearance="icon"
@@ -718,7 +724,7 @@ const PromptsView = ({ onDone }: PromptsViewProps) => {
 											handleAgentReset(currentMode.slug, "customInstructions")
 										}
 									}}
-									title="Reset to default"
+									title={t("prompts:customInstructions.resetToDefault")}
 									data-testid="custom-instructions-reset">
 									<span className="codicon codicon-discard"></span>
 								</VSCodeButton>
@@ -730,7 +736,9 @@ const PromptsView = ({ onDone }: PromptsViewProps) => {
 								color: "var(--vscode-descriptionForeground)",
 								marginBottom: "8px",
 							}}>
-							Add behavioral guidelines specific to {getCurrentMode()?.name || "Code"} mode.
+							{t("prompts:customInstructions.description", {
+								modeName: getCurrentMode()?.name || "Code",
+							})}
 						</div>
 						<VSCodeTextArea
 							value={(() => {
@@ -774,31 +782,38 @@ const PromptsView = ({ onDone }: PromptsViewProps) => {
 								color: "var(--vscode-descriptionForeground)",
 								marginTop: "5px",
 							}}>
-							Custom instructions specific to {getCurrentMode()?.name || "Code"} mode can also be loaded
-							from{" "}
-							<span
-								style={{
-									color: "var(--vscode-textLink-foreground)",
-									cursor: "pointer",
-									textDecoration: "underline",
+							<Trans
+								i18nKey="prompts:customInstructions.loadFromFile"
+								values={{
+									mode: getCurrentMode()?.name || "Code",
+									slug: getCurrentMode()?.slug || "code",
 								}}
-								onClick={() => {
-									const currentMode = getCurrentMode()
-									if (!currentMode) return
+								components={{
+									span: (
+										<span
+											style={{
+												color: "var(--vscode-textLink-foreground)",
+												cursor: "pointer",
+												textDecoration: "underline",
+											}}
+											onClick={() => {
+												const currentMode = getCurrentMode()
+												if (!currentMode) return
 
-									// Open or create an empty file
-									vscode.postMessage({
-										type: "openFile",
-										text: `./.clinerules-${currentMode.slug}`,
-										values: {
-											create: true,
-											content: "",
-										},
-									})
-								}}>
-								.clinerules-{getCurrentMode()?.slug || "code"}
-							</span>{" "}
-							in your workspace.
+												// Open or create an empty file
+												vscode.postMessage({
+													type: "openFile",
+													text: `./.clinerules-${currentMode.slug}`,
+													values: {
+														create: true,
+														content: "",
+													},
+												})
+											}}
+										/>
+									),
+								}}
+							/>
 						</div>
 					</div>
 				</div>
@@ -822,11 +837,11 @@ const PromptsView = ({ onDone }: PromptsViewProps) => {
 								}
 							}}
 							data-testid="preview-prompt-button">
-							Preview System Prompt
+							{t("prompts:systemPrompt.preview")}
 						</VSCodeButton>
 						<VSCodeButton
 							appearance="icon"
-							title="Copy system prompt to clipboard"
+							title={t("prompts:systemPrompt.copy")}
 							onClick={() => {
 								const currentMode = getCurrentMode()
 								if (currentMode) {
@@ -855,7 +870,7 @@ const PromptsView = ({ onDone }: PromptsViewProps) => {
 								// The React context will update the global state
 								setEnableCustomModeCreation(e.target.checked)
 							}}>
-							<span style={{ fontWeight: "500" }}>Enable Custom Mode Creation Through Prompts</span>
+							<span style={{ fontWeight: "500" }}>{t("prompts:customModeCreation.enableTitle")}</span>
 						</VSCodeCheckbox>
 						<p
 							style={{
@@ -863,10 +878,7 @@ const PromptsView = ({ onDone }: PromptsViewProps) => {
 								marginTop: "5px",
 								color: "var(--vscode-descriptionForeground)",
 							}}>
-							When enabled, Roo allows you to create custom modes using prompts like ‘Make me a custom
-							mode that…’. Disabling this reduces your system prompt by about 700 tokens when this feature
-							isn’t needed. When disabled you can still manually create custom modes using the + button
-							above or by editing the related config JSON.
+							{t("prompts:customModeCreation.description")}
 						</p>
 					</div>
 
@@ -878,33 +890,37 @@ const PromptsView = ({ onDone }: PromptsViewProps) => {
 							aria-expanded={isSystemPromptDisclosureOpen}>
 							<span
 								className={`codicon codicon-${isSystemPromptDisclosureOpen ? "chevron-down" : "chevron-right"} mr-1`}></span>
-							<span>Advanced: Override System Prompt</span>
+							<span>{t("prompts:advancedSystemPrompt.title")}</span>
 						</button>
 
 						{isSystemPromptDisclosureOpen && (
 							<div className="text-xs text-vscode-descriptionForeground mt-2 ml-5">
-								You can completely replace the system prompt for this mode (aside from the role
-								definition and custom instructions) by creating a file at{" "}
-								<span
-									className="text-vscode-textLink-foreground cursor-pointer underline"
-									onClick={() => {
-										const currentMode = getCurrentMode()
-										if (!currentMode) return
-
-										// Open or create an empty file
-										vscode.postMessage({
-											type: "openFile",
-											text: `./.roo/system-prompt-${currentMode.slug}`,
-											values: {
-												create: true,
-												content: "",
-											},
-										})
-									}}>
-									.roo/system-prompt-{getCurrentMode()?.slug || "code"}
-								</span>{" "}
-								in your workspace. This is a very advanced feature that bypasses built-in safeguards and
-								consistency checks (especially around tool usage), so be careful!
+								<Trans
+									i18nKey="prompts:advancedSystemPrompt.description"
+									values={{
+										slug: getCurrentMode()?.slug || "code",
+									}}
+									components={{
+										span: (
+											<span
+												className="text-vscode-textLink-foreground cursor-pointer underline"
+												onClick={() => {
+													const currentMode = getCurrentMode()
+													if (!currentMode) return
+
+													vscode.postMessage({
+														type: "openFile",
+														text: `./.roo/system-prompt-${currentMode.slug}`,
+														values: {
+															create: true,
+															content: "",
+														},
+													})
+												}}
+											/>
+										),
+									}}
+								/>
 							</div>
 						)}
 					</div>
@@ -912,15 +928,11 @@ const PromptsView = ({ onDone }: PromptsViewProps) => {
 
 				<div className="pb-5 border-b border-vscode-input-border">
 					<h3 style={{ color: "var(--vscode-foreground)", marginBottom: "12px" }}>
-						Custom Instructions for All Modes
+						{t("prompts:globalCustomInstructions.title")}
 					</h3>
 
 					<div className="text-sm text-vscode-descriptionForeground mb-2">
-						These instructions apply to all modes. They provide a base set of behaviors that can be enhanced
-						by mode-specific instructions below.
-						<br />
-						If you would like Roo to think and speak in a different language than your editor display
-						language ({i18next.language}), you can specify it here.
+						{t("prompts:globalCustomInstructions.description", { language: i18next.language })}
 					</div>
 					<VSCodeTextArea
 						value={customInstructions ?? ""}
@@ -940,22 +952,30 @@ const PromptsView = ({ onDone }: PromptsViewProps) => {
 						data-testid="global-custom-instructions-textarea"
 					/>
 					<div className="text-xs text-vscode-descriptionForeground mt-1.5 mb-10">
-						Instructions can also be loaded from{" "}
-						<span
-							className="text-vscode-textLink-foreground cursor-pointer underline"
-							onClick={() =>
-								vscode.postMessage({
-									type: "openFile",
-									text: "./.clinerules",
-									values: {
-										create: true,
-										content: "",
-									},
-								})
-							}>
-							.clinerules
-						</span>{" "}
-						in your workspace.
+						<Trans
+							i18nKey="prompts:globalCustomInstructions.loadFromFile"
+							components={{
+								span: (
+									<span
+										style={{
+											color: "var(--vscode-textLink-foreground)",
+											cursor: "pointer",
+											textDecoration: "underline",
+										}}
+										onClick={() =>
+											vscode.postMessage({
+												type: "openFile",
+												text: "./.clinerules",
+												values: {
+													create: true,
+													content: "",
+												},
+											})
+										}
+									/>
+								),
+							}}
+						/>
 					</div>
 				</div>
 
@@ -965,7 +985,9 @@ const PromptsView = ({ onDone }: PromptsViewProps) => {
 						paddingBottom: "60px",
 						borderBottom: "1px solid var(--vscode-input-border)",
 					}}>
-					<h3 style={{ color: "var(--vscode-foreground)", marginBottom: "12px" }}>Support Prompts</h3>
+					<h3 style={{ color: "var(--vscode-foreground)", marginBottom: "12px" }}>
+						{t("prompts:supportPrompts.title")}
+					</h3>
 					<div
 						style={{
 							display: "flex",
@@ -994,7 +1016,7 @@ const PromptsView = ({ onDone }: PromptsViewProps) => {
 									borderRadius: "3px",
 									fontWeight: "bold",
 								}}>
-								{supportPromptLabels[type as SupportPromptType]}
+								{t(`prompts:supportPrompts.types.${type}.label`)}
 							</button>
 						))}
 					</div>
@@ -1006,7 +1028,7 @@ const PromptsView = ({ onDone }: PromptsViewProps) => {
 							color: "var(--vscode-descriptionForeground)",
 							margin: "8px 0 16px",
 						}}>
-						{supportPromptDescriptions[activeSupportTab]}
+						{t(`prompts:supportPrompts.types.${activeSupportTab}.description`)}
 					</div>
 
 					{/* Show active tab content */}
@@ -1018,11 +1040,11 @@ const PromptsView = ({ onDone }: PromptsViewProps) => {
 								alignItems: "center",
 								marginBottom: "4px",
 							}}>
-							<div style={{ fontWeight: "bold" }}>Prompt</div>
+							<div style={{ fontWeight: "bold" }}>{t("prompts:supportPrompts.prompt")}</div>
 							<VSCodeButton
 								appearance="icon"
 								onClick={() => handleSupportReset(activeSupportTab)}
-								title={`Reset ${activeSupportTab} prompt to default`}>
+								title={t("prompts:supportPrompts.resetPrompt", { promptType: activeSupportTab })}>
 								<span className="codicon codicon-discard"></span>
 							</VSCodeButton>
 						</div>
@@ -1054,15 +1076,14 @@ const PromptsView = ({ onDone }: PromptsViewProps) => {
 									<div style={{ marginBottom: "12px" }}>
 										<div style={{ marginBottom: "8px" }}>
 											<div style={{ fontWeight: "bold", marginBottom: "4px" }}>
-												API Configuration
+												{t("prompts:supportPrompts.enhance.apiConfiguration")}
 											</div>
 											<div
 												style={{
 													fontSize: "13px",
 													color: "var(--vscode-descriptionForeground)",
 												}}>
-												You can select an API configuration to always use for enhancing prompts,
-												or just use whatever is currently selected
+												{t("prompts:supportPrompts.enhance.apiConfigDescription")}
 											</div>
 										</div>
 										<VSCodeDropdown
@@ -1078,7 +1099,7 @@ const PromptsView = ({ onDone }: PromptsViewProps) => {
 											}}
 											style={{ width: "300px" }}>
 											<VSCodeOption value="">
-												Use currently selected API configuration
+												{t("prompts:supportPrompts.enhance.useCurrentConfig")}
 											</VSCodeOption>
 											{(listApiConfigMeta || []).map((config) => (
 												<VSCodeOption key={config.id} value={config.id}>
@@ -1093,7 +1114,7 @@ const PromptsView = ({ onDone }: PromptsViewProps) => {
 									<VSCodeTextArea
 										value={testPrompt}
 										onChange={(e) => setTestPrompt((e.target as HTMLTextAreaElement).value)}
-										placeholder="Enter a prompt to test the enhancement"
+										placeholder={t("prompts:supportPrompts.enhance.testPromptPlaceholder")}
 										rows={3}
 										resize="vertical"
 										style={{ width: "100%" }}
@@ -1111,7 +1132,7 @@ const PromptsView = ({ onDone }: PromptsViewProps) => {
 											onClick={handleTestEnhancement}
 											disabled={isEnhancing}
 											appearance="primary">
-											Preview Prompt Enhancement
+											{t("prompts:supportPrompts.enhance.previewButton")}
 										</VSCodeButton>
 									</div>
 								</div>
@@ -1158,9 +1179,11 @@ const PromptsView = ({ onDone }: PromptsViewProps) => {
 								}}>
 								<span className="codicon codicon-close"></span>
 							</VSCodeButton>
-							<h2 style={{ margin: "0 0 16px" }}>Create New Mode</h2>
+							<h2 style={{ margin: "0 0 16px" }}>{t("prompts:createModeDialog.title")}</h2>
 							<div style={{ marginBottom: "16px" }}>
-								<div style={{ fontWeight: "bold", marginBottom: "4px" }}>Name</div>
+								<div style={{ fontWeight: "bold", marginBottom: "4px" }}>
+									{t("prompts:createModeDialog.name.label")}
+								</div>
 								<VSCodeTextField
 									value={newModeName}
 									onChange={(e: Event | React.FormEvent<HTMLElement>) => {
@@ -1176,7 +1199,9 @@ const PromptsView = ({ onDone }: PromptsViewProps) => {
 								)}
 							</div>
 							<div style={{ marginBottom: "16px" }}>
-								<div style={{ fontWeight: "bold", marginBottom: "4px" }}>Slug</div>
+								<div style={{ fontWeight: "bold", marginBottom: "4px" }}>
+									{t("prompts:createModeDialog.slug.label")}
+								</div>
 								<VSCodeTextField
 									value={newModeSlug}
 									onChange={(e: Event | React.FormEvent<HTMLElement>) => {
@@ -1193,18 +1218,18 @@ const PromptsView = ({ onDone }: PromptsViewProps) => {
 										color: "var(--vscode-descriptionForeground)",
 										marginTop: "4px",
 									}}>
-									The slug is used in URLs and file names. It should be lowercase and contain only
-									letters, numbers, and hyphens.
+									{t("prompts:createModeDialog.slug.description")}
 								</div>
 								{slugError && (
 									<div className="text-xs text-vscode-errorForeground mt-1">{slugError}</div>
 								)}
 							</div>
 							<div style={{ marginBottom: "16px" }}>
-								<div style={{ fontWeight: "bold", marginBottom: "4px" }}>Save Location</div>
+								<div style={{ fontWeight: "bold", marginBottom: "4px" }}>
+									{t("prompts:createModeDialog.saveLocation.label")}
+								</div>
 								<div className="text-sm text-vscode-descriptionForeground mb-2">
-									Choose where to save this mode. Project-specific modes take precedence over global
-									modes.
+									{t("prompts:createModeDialog.saveLocation.description")}
 								</div>
 								<VSCodeRadioGroup
 									value={newModeSource}
@@ -1214,34 +1239,36 @@ const PromptsView = ({ onDone }: PromptsViewProps) => {
 										setNewModeSource(target.value as ModeSource)
 									}}>
 									<VSCodeRadio value="global">
-										Global
+										{t("prompts:createModeDialog.saveLocation.global.label")}
 										<div
 											style={{
 												fontSize: "12px",
 												color: "var(--vscode-descriptionForeground)",
 												marginTop: "2px",
 											}}>
-											Available in all workspaces
+											{t("prompts:createModeDialog.saveLocation.global.description")}
 										</div>
 									</VSCodeRadio>
 									<VSCodeRadio value="project">
-										Project-specific (.roomodes)
+										{t("prompts:createModeDialog.saveLocation.project.label")}
 										<div className="text-xs text-vscode-descriptionForeground mt-0.5">
-											Only available in this workspace, takes precedence over global
+											{t("prompts:createModeDialog.saveLocation.project.description")}
 										</div>
 									</VSCodeRadio>
 								</VSCodeRadioGroup>
 							</div>
 
 							<div style={{ marginBottom: "16px" }}>
-								<div style={{ fontWeight: "bold", marginBottom: "4px" }}>Role Definition</div>
+								<div style={{ fontWeight: "bold", marginBottom: "4px" }}>
+									{t("prompts:createModeDialog.roleDefinition.label")}
+								</div>
 								<div
 									style={{
 										fontSize: "13px",
 										color: "var(--vscode-descriptionForeground)",
 										marginBottom: "8px",
 									}}>
-									Define Roo's expertise and personality for this mode.
+									{t("prompts:createModeDialog.roleDefinition.description")}
 								</div>
 								<VSCodeTextArea
 									value={newModeRoleDefinition}
@@ -1262,14 +1289,16 @@ const PromptsView = ({ onDone }: PromptsViewProps) => {
 								)}
 							</div>
 							<div style={{ marginBottom: "16px" }}>
-								<div style={{ fontWeight: "bold", marginBottom: "4px" }}>Available Tools</div>
+								<div style={{ fontWeight: "bold", marginBottom: "4px" }}>
+									{t("prompts:createModeDialog.tools.label")}
+								</div>
 								<div
 									style={{
 										fontSize: "13px",
 										color: "var(--vscode-descriptionForeground)",
 										marginBottom: "8px",
 									}}>
-									Select which tools this mode can use.
+									{t("prompts:createModeDialog.tools.description")}
 								</div>
 								<div
 									style={{
@@ -1293,7 +1322,7 @@ const PromptsView = ({ onDone }: PromptsViewProps) => {
 													)
 												}
 											}}>
-											{GROUP_DISPLAY_NAMES[group]}
+											{t(`prompts:tools.toolNames.${group}`)}
 										</VSCodeCheckbox>
 									))}
 								</div>
@@ -1303,7 +1332,7 @@ const PromptsView = ({ onDone }: PromptsViewProps) => {
 							</div>
 							<div style={{ marginBottom: "16px" }}>
 								<div style={{ fontWeight: "bold", marginBottom: "4px" }}>
-									Custom Instructions (optional)
+									{t("prompts:createModeDialog.customInstructions.label")}
 								</div>
 								<div
 									style={{
@@ -1311,7 +1340,7 @@ const PromptsView = ({ onDone }: PromptsViewProps) => {
 										color: "var(--vscode-descriptionForeground)",
 										marginBottom: "8px",
 									}}>
-									Add behavioral guidelines specific to this mode.
+									{t("prompts:createModeDialog.customInstructions.description")}
 								</div>
 								<VSCodeTextArea
 									value={newModeCustomInstructions}
@@ -1336,9 +1365,11 @@ const PromptsView = ({ onDone }: PromptsViewProps) => {
 								borderTop: "1px solid var(--vscode-editor-lineHighlightBorder)",
 								backgroundColor: "var(--vscode-editor-background)",
 							}}>
-							<VSCodeButton onClick={() => setIsCreateModeDialogOpen(false)}>Cancel</VSCodeButton>
+							<VSCodeButton onClick={() => setIsCreateModeDialogOpen(false)}>
+								{t("prompts:createModeDialog.buttons.cancel")}
+							</VSCodeButton>
 							<VSCodeButton appearance="primary" onClick={handleCreateMode}>
-								Create Mode
+								{t("prompts:createModeDialog.buttons.create")}
 							</VSCodeButton>
 						</div>
 					</div>
@@ -1382,7 +1413,10 @@ const PromptsView = ({ onDone }: PromptsViewProps) => {
 								}}>
 								<span className="codicon codicon-close"></span>
 							</VSCodeButton>
-							<h2 style={{ margin: "0 0 16px" }}>{selectedPromptTitle}</h2>
+							<h2 style={{ margin: "0 0 16px" }}>
+								{selectedPromptTitle ||
+									t("prompts:systemPrompt.title", { modeName: getCurrentMode()?.name || "Code" })}
+							</h2>
 							<pre
 								style={{
 									padding: "8px",
@@ -1407,7 +1441,9 @@ const PromptsView = ({ onDone }: PromptsViewProps) => {
 								borderTop: "1px solid var(--vscode-editor-lineHighlightBorder)",
 								backgroundColor: "var(--vscode-editor-background)",
 							}}>
-							<VSCodeButton onClick={() => setIsDialogOpen(false)}>Close</VSCodeButton>
+							<VSCodeButton onClick={() => setIsDialogOpen(false)}>
+								{t("prompts:createModeDialog.close")}
+							</VSCodeButton>
 						</div>
 					</div>
 				</div>

+ 24 - 17
webview-ui/src/components/settings/AdvancedSettings.tsx

@@ -1,4 +1,5 @@
 import { HTMLAttributes } from "react"
+import { useAppTranslation } from "@/i18n/TranslationContext"
 import { VSCodeCheckbox } from "@vscode/webview-ui-toolkit/react"
 import { Cog } from "lucide-react"
 
@@ -29,19 +30,20 @@ export const AdvancedSettings = ({
 	className,
 	...props
 }: AdvancedSettingsProps) => {
+	const { t } = useAppTranslation()
 	return (
 		<div className={cn("flex flex-col gap-2", className)} {...props}>
 			<SectionHeader>
 				<div className="flex items-center gap-2">
 					<Cog className="w-4" />
-					<div>Advanced</div>
+					<div>{t("settings:sections.advanced")}</div>
 				</div>
 			</SectionHeader>
 
 			<Section>
 				<div>
 					<div className="flex flex-col gap-2">
-						<span className="font-medium">Rate limit</span>
+						<span className="font-medium">{t("settings:advanced.rateLimit.label")}</span>
 						<div className="flex items-center gap-2">
 							<input
 								type="range"
@@ -55,7 +57,9 @@ export const AdvancedSettings = ({
 							<span style={{ ...sliderLabelStyle }}>{rateLimitSeconds}s</span>
 						</div>
 					</div>
-					<p className="text-vscode-descriptionForeground text-sm mt-0">Minimum time between API requests.</p>
+					<p className="text-vscode-descriptionForeground text-sm mt-0">
+						{t("settings:advanced.rateLimit.description")}
+					</p>
 				</div>
 
 				<div>
@@ -69,16 +73,15 @@ export const AdvancedSettings = ({
 								setExperimentEnabled(EXPERIMENT_IDS.MULTI_SEARCH_AND_REPLACE, false)
 							}
 						}}>
-						<span className="font-medium">Enable editing through diffs</span>
+						<span className="font-medium">{t("settings:advanced.diff.label")}</span>
 					</VSCodeCheckbox>
 					<p className="text-vscode-descriptionForeground text-sm mt-0">
-						When enabled, Roo will be able to edit files more quickly and will automatically reject
-						truncated full-file writes. Works best with the latest Claude 3.7 Sonnet model.
+						{t("settings:advanced.diff.description")}
 					</p>
 					{diffEnabled && (
 						<div className="flex flex-col gap-2 mt-3 mb-2 pl-3 border-l-2 border-vscode-button-background">
 							<div className="flex flex-col gap-2">
-								<span className="font-medium">Diff strategy</span>
+								<span className="font-medium">{t("settings:advanced.diff.strategy.label")}</span>
 								<select
 									value={
 										experiments[EXPERIMENT_IDS.DIFF_STRATEGY]
@@ -101,9 +104,15 @@ export const AdvancedSettings = ({
 										}
 									}}
 									className="p-2 rounded w-full bg-vscode-input-background text-vscode-input-foreground border border-vscode-input-border outline-none focus:border-vscode-focusBorder">
-									<option value="standard">Standard (Single block)</option>
-									<option value="multiBlock">Experimental: Multi-block diff</option>
-									<option value="unified">Experimental: Unified diff</option>
+									<option value="standard">
+										{t("settings:advanced.diff.strategy.options.standard")}
+									</option>
+									<option value="multiBlock">
+										{t("settings:advanced.diff.strategy.options.multiBlock")}
+									</option>
+									<option value="unified">
+										{t("settings:advanced.diff.strategy.options.unified")}
+									</option>
 								</select>
 							</div>
 
@@ -111,15 +120,15 @@ export const AdvancedSettings = ({
 							<p className="text-vscode-descriptionForeground text-sm mt-1">
 								{!experiments[EXPERIMENT_IDS.DIFF_STRATEGY] &&
 									!experiments[EXPERIMENT_IDS.MULTI_SEARCH_AND_REPLACE] &&
-									"Standard diff strategy applies changes to a single code block at a time."}
+									t("settings:advanced.diff.strategy.descriptions.standard")}
 								{experiments[EXPERIMENT_IDS.DIFF_STRATEGY] &&
-									"Unified diff strategy takes multiple approaches to applying diffs and chooses the best approach."}
+									t("settings:advanced.diff.strategy.descriptions.unified")}
 								{experiments[EXPERIMENT_IDS.MULTI_SEARCH_AND_REPLACE] &&
-									"Multi-block diff strategy allows updating multiple code blocks in a file in one request."}
+									t("settings:advanced.diff.strategy.descriptions.multiBlock")}
 							</p>
 
 							{/* Match precision slider */}
-							<span className="font-medium mt-3">Match precision</span>
+							<span className="font-medium mt-3">{t("settings:advanced.diff.matchPrecision.label")}</span>
 							<div className="flex items-center gap-2">
 								<input
 									type="range"
@@ -137,9 +146,7 @@ export const AdvancedSettings = ({
 								</span>
 							</div>
 							<p className="text-vscode-descriptionForeground text-sm mt-0">
-								This slider controls how precisely code sections must match when applying diffs. Lower
-								values allow more flexible matching but increase the risk of incorrect replacements. Use
-								values below 100% with extreme caution.
+								{t("settings:advanced.diff.matchPrecision.description")}
 							</p>
 						</div>
 					)}

+ 33 - 17
webview-ui/src/components/settings/ApiConfigManager.tsx

@@ -1,5 +1,6 @@
 import { VSCodeButton, VSCodeTextField } from "@vscode/webview-ui-toolkit/react"
 import { memo, useEffect, useRef, useState } from "react"
+import { useAppTranslation } from "@/i18n/TranslationContext"
 import { ApiConfigMeta } from "../../../../src/shared/ExtensionMessage"
 import { Dropdown } from "vscrui"
 import type { DropdownOption } from "vscrui"
@@ -23,6 +24,7 @@ const ApiConfigManager = ({
 	onRenameConfig,
 	onUpsertConfig,
 }: ApiConfigManagerProps) => {
+	const { t } = useAppTranslation()
 	const [isRenaming, setIsRenaming] = useState(false)
 	const [isCreating, setIsCreating] = useState(false)
 	const [inputValue, setInputValue] = useState("")
@@ -33,18 +35,18 @@ const ApiConfigManager = ({
 
 	const validateName = (name: string, isNewProfile: boolean): string | null => {
 		const trimmed = name.trim()
-		if (!trimmed) return "Name cannot be empty"
+		if (!trimmed) return t("settings:providers.nameEmpty")
 
 		const nameExists = listApiConfigMeta?.some((config) => config.name.toLowerCase() === trimmed.toLowerCase())
 
 		// For new profiles, any existing name is invalid
 		if (isNewProfile && nameExists) {
-			return "A profile with this name already exists"
+			return t("settings:providers.nameExists")
 		}
 
 		// For rename, only block if trying to rename to a different existing profile
 		if (!isNewProfile && nameExists && trimmed.toLowerCase() !== currentApiConfigName?.toLowerCase()) {
-			return "A profile with this name already exists"
+			return t("settings:providers.nameExists")
 		}
 
 		return null
@@ -144,7 +146,7 @@ const ApiConfigManager = ({
 	return (
 		<div className="flex flex-col gap-1">
 			<label htmlFor="config-profile">
-				<span className="font-medium">Configuration Profile</span>
+				<span className="font-medium">{t("settings:providers.configProfile")}</span>
 			</label>
 
 			{isRenaming ? (
@@ -160,7 +162,7 @@ const ApiConfigManager = ({
 								setInputValue(target.target.value)
 								setError(null)
 							}}
-							placeholder="Enter new name"
+							placeholder={t("settings:providers.enterNewName")}
 							style={{ flexGrow: 1 }}
 							onKeyDown={(e: unknown) => {
 								const event = e as { key: string }
@@ -175,7 +177,8 @@ const ApiConfigManager = ({
 							appearance="icon"
 							disabled={!inputValue.trim()}
 							onClick={handleSave}
-							title="Save"
+							title={t("settings:common.save")}
+							data-testid="save-rename-button"
 							style={{
 								padding: 0,
 								margin: 0,
@@ -188,7 +191,8 @@ const ApiConfigManager = ({
 						<VSCodeButton
 							appearance="icon"
 							onClick={handleCancel}
-							title="Cancel"
+							title={t("settings:common.cancel")}
+							data-testid="cancel-rename-button"
 							style={{
 								padding: 0,
 								margin: 0,
@@ -224,7 +228,8 @@ const ApiConfigManager = ({
 						<VSCodeButton
 							appearance="icon"
 							onClick={handleAdd}
-							title="Add profile"
+							title={t("settings:providers.addProfile")}
+							data-testid="add-profile-button"
 							style={{
 								padding: 0,
 								margin: 0,
@@ -239,7 +244,8 @@ const ApiConfigManager = ({
 								<VSCodeButton
 									appearance="icon"
 									onClick={handleStartRename}
-									title="Rename profile"
+									title={t("settings:providers.renameProfile")}
+									data-testid="rename-profile-button"
 									style={{
 										padding: 0,
 										margin: 0,
@@ -252,7 +258,12 @@ const ApiConfigManager = ({
 								<VSCodeButton
 									appearance="icon"
 									onClick={handleDelete}
-									title={isOnlyProfile ? "Cannot delete the only profile" : "Delete profile"}
+									title={
+										isOnlyProfile
+											? t("settings:providers.cannotDeleteOnlyProfile")
+											: t("settings:providers.deleteProfile")
+									}
+									data-testid="delete-profile-button"
 									disabled={isOnlyProfile}
 									style={{
 										padding: 0,
@@ -272,7 +283,7 @@ const ApiConfigManager = ({
 							margin: "5px 0 12px",
 							color: "var(--vscode-descriptionForeground)",
 						}}>
-						Save different API configurations to quickly switch between providers and settings.
+						{t("settings:providers.description")}
 					</p>
 				</>
 			)}
@@ -290,7 +301,7 @@ const ApiConfigManager = ({
 				}}
 				aria-labelledby="new-profile-title">
 				<DialogContent className="p-4 max-w-sm">
-					<DialogTitle>New Configuration Profile</DialogTitle>
+					<DialogTitle>{t("settings:providers.newProfile")}</DialogTitle>
 					<Input
 						ref={newProfileInputRef}
 						value={newProfileName}
@@ -299,7 +310,8 @@ const ApiConfigManager = ({
 							setNewProfileName(target.target.value)
 							setError(null)
 						}}
-						placeholder="Enter profile name"
+						placeholder={t("settings:providers.enterProfileName")}
+						data-testid="new-profile-input"
 						style={{ width: "100%" }}
 						onKeyDown={(e: unknown) => {
 							const event = e as { key: string }
@@ -316,11 +328,15 @@ const ApiConfigManager = ({
 						</p>
 					)}
 					<div className="flex justify-end gap-2 mt-4">
-						<Button variant="secondary" onClick={resetCreateState}>
-							Cancel
+						<Button variant="secondary" onClick={resetCreateState} data-testid="cancel-new-profile-button">
+							{t("settings:common.cancel")}
 						</Button>
-						<Button variant="default" disabled={!newProfileName.trim()} onClick={handleNewProfileSave}>
-							Create Profile
+						<Button
+							variant="default"
+							disabled={!newProfileName.trim()}
+							onClick={handleNewProfileSave}
+							data-testid="create-profile-button">
+							{t("settings:providers.createProfile")}
 						</Button>
 					</div>
 				</DialogContent>

+ 144 - 145
webview-ui/src/components/settings/ApiOptions.tsx

@@ -1,4 +1,6 @@
 import React, { memo, useCallback, useEffect, useMemo, useState } from "react"
+import { useAppTranslation } from "@/i18n/TranslationContext"
+import { Trans } from "react-i18next"
 import { useDebounce, useEvent } from "react-use"
 import { Checkbox, Dropdown, type DropdownOption } from "vscrui"
 import { VSCodeLink, VSCodeRadio, VSCodeRadioGroup, VSCodeTextField } from "@vscode/webview-ui-toolkit/react"
@@ -91,6 +93,7 @@ const ApiOptions = ({
 	errorMessage,
 	setErrorMessage,
 }: ApiOptionsProps) => {
+	const { t } = useAppTranslation()
 	const [ollamaModels, setOllamaModels] = useState<string[]>([])
 	const [lmStudioModels, setLmStudioModels] = useState<string[]>([])
 	const [vsCodeLmModels, setVsCodeLmModels] = useState<vscodemodels.LanguageModelChatSelector[]>([])
@@ -259,7 +262,7 @@ const ApiOptions = ({
 		<div className="flex flex-col gap-3">
 			<div className="dropdown-container">
 				<label htmlFor="api-provider" className="font-medium">
-					API Provider
+					{t("settings:providers.apiProvider")}
 				</label>
 				<Select
 					value={selectedProvider}
@@ -289,14 +292,14 @@ const ApiOptions = ({
 						onInput={handleInputChange("openRouterApiKey")}
 						placeholder="Enter API Key..."
 						className="w-full">
-						<span className="font-medium">OpenRouter API Key</span>
+						<span className="font-medium">{t("settings:providers.openRouterApiKey")}</span>
 					</VSCodeTextField>
 					<div className="text-sm text-vscode-descriptionForeground -mt-2">
-						This key is stored locally and only used to make API requests from this extension.
+						{t("settings:providers.apiKeyStorageNotice")}
 					</div>
 					{!apiConfiguration?.openRouterApiKey && (
 						<VSCodeButtonLink href={getOpenRouterAuthUrl(uriScheme)} appearance="secondary">
-							Get OpenRouter API Key
+							{t("settings:providers.getOpenRouterApiKey")}
 						</VSCodeButtonLink>
 					)}
 					{!fromWelcomeView && (
@@ -311,7 +314,7 @@ const ApiOptions = ({
 											setApiConfigurationField("openRouterBaseUrl", "")
 										}
 									}}>
-									Use custom base URL
+									{t("settings:providers.useCustomBaseUrl")}
 								</Checkbox>
 								{openRouterBaseUrlSelected && (
 									<VSCodeTextField
@@ -326,8 +329,13 @@ const ApiOptions = ({
 							<Checkbox
 								checked={apiConfiguration?.openRouterUseMiddleOutTransform ?? true}
 								onChange={handleInputChange("openRouterUseMiddleOutTransform", noTransform)}>
-								Compress prompts and message chains to the context size (
-								<a href="https://openrouter.ai/docs/transforms">OpenRouter Transforms</a>)
+								<Trans
+									i18nKey="settings:providers.openRouterTransformsText"
+									components={{
+										// eslint-disable-next-line jsx-a11y/anchor-has-content
+										a: <a href="https://openrouter.ai/docs/transforms" />,
+									}}
+								/>
 							</Checkbox>
 						</>
 					)}
@@ -342,14 +350,14 @@ const ApiOptions = ({
 						onInput={handleInputChange("apiKey")}
 						placeholder="Enter API Key..."
 						className="w-full">
-						<div className="font-medium">Anthropic API Key</div>
+						<div className="font-medium">{t("settings:providers.anthropicApiKey")}</div>
 					</VSCodeTextField>
 					<div className="text-sm text-vscode-descriptionForeground -mt-2">
-						This key is stored locally and only used to make API requests from this extension.
+						{t("settings:providers.apiKeyStorageNotice")}
 					</div>
 					{!apiConfiguration?.apiKey && (
 						<VSCodeButtonLink href="https://console.anthropic.com/settings/keys" appearance="secondary">
-							Get Anthropic API Key
+							{t("settings:providers.getAnthropicApiKey")}
 						</VSCodeButtonLink>
 					)}
 					<div>
@@ -362,7 +370,7 @@ const ApiOptions = ({
 									setApiConfigurationField("anthropicBaseUrl", "")
 								}
 							}}>
-							Use custom base URL
+							{t("settings:providers.useCustomBaseUrl")}
 						</Checkbox>
 						{anthropicBaseUrlSelected && (
 							<VSCodeTextField
@@ -385,14 +393,14 @@ const ApiOptions = ({
 						onInput={handleInputChange("glamaApiKey")}
 						placeholder="Enter API Key..."
 						className="w-full">
-						<span className="font-medium">Glama API Key</span>
+						<span className="font-medium">{t("settings:providers.glamaApiKey")}</span>
 					</VSCodeTextField>
 					<div className="text-sm text-vscode-descriptionForeground -mt-2">
-						This key is stored locally and only used to make API requests from this extension.
+						{t("settings:providers.apiKeyStorageNotice")}
 					</div>
 					{!apiConfiguration?.glamaApiKey && (
 						<VSCodeButtonLink href={getGlamaAuthUrl(uriScheme)} appearance="secondary">
-							Get Glama API Key
+							{t("settings:providers.getGlamaApiKey")}
 						</VSCodeButtonLink>
 					)}
 				</>
@@ -404,12 +412,12 @@ const ApiOptions = ({
 						value={apiConfiguration?.requestyApiKey || ""}
 						type="password"
 						onInput={handleInputChange("requestyApiKey")}
-						placeholder="Enter API Key..."
+						placeholder={t("settings:providers.getRequestyApiKey")}
 						className="w-full">
-						<span className="font-medium">Requesty API Key</span>
+						<span className="font-medium">{t("settings:providers.requestyApiKey")}</span>
 					</VSCodeTextField>
 					<div className="text-sm text-vscode-descriptionForeground -mt-2">
-						This key is stored locally and only used to make API requests from this extension.
+						{t("settings:providers.apiKeyStorageNotice")}
 					</div>
 				</>
 			)}
@@ -425,11 +433,11 @@ const ApiOptions = ({
 						<span className="font-medium">OpenAI API Key</span>
 					</VSCodeTextField>
 					<div className="text-sm text-vscode-descriptionForeground -mt-2">
-						This key is stored locally and only used to make API requests from this extension.
+						{t("settings:providers.apiKeyStorageNotice")}
 					</div>
 					{!apiConfiguration?.openAiNativeApiKey && (
 						<VSCodeButtonLink href="https://platform.openai.com/api-keys" appearance="secondary">
-							Get OpenAI API Key
+							{t("settings:providers.getOpenAiApiKey")}
 						</VSCodeButtonLink>
 					)}
 				</>
@@ -443,14 +451,14 @@ const ApiOptions = ({
 						onInput={handleInputChange("mistralApiKey")}
 						placeholder="Enter API Key..."
 						className="w-full">
-						<span className="font-medium">Mistral API Key</span>
+						<span className="font-medium">{t("settings:providers.mistralApiKey")}</span>
 					</VSCodeTextField>
 					<div className="text-sm text-vscode-descriptionForeground -mt-2">
-						This key is stored locally and only used to make API requests from this extension.
+						{t("settings:providers.apiKeyStorageNotice")}
 					</div>
 					{!apiConfiguration?.mistralApiKey && (
 						<VSCodeButtonLink href="https://console.mistral.ai/" appearance="secondary">
-							Get Mistral / Codestral API Key
+							{t("settings:providers.getMistralApiKey")}
 						</VSCodeButtonLink>
 					)}
 					{(apiConfiguration?.apiModelId?.startsWith("codestral-") ||
@@ -462,10 +470,10 @@ const ApiOptions = ({
 								onInput={handleInputChange("mistralCodestralUrl")}
 								placeholder="https://codestral.mistral.ai"
 								className="w-full">
-								<span className="font-medium">Codestral Base URL (Optional)</span>
+								<span className="font-medium">{t("settings:providers.codestralBaseUrl")}</span>
 							</VSCodeTextField>
 							<div className="text-sm text-vscode-descriptionForeground -mt-2">
-								Set an alternative URL for the Codestral model.
+								{t("settings:providers.codestralBaseUrlDesc")}
 							</div>
 						</>
 					)}
@@ -480,13 +488,11 @@ const ApiOptions = ({
 							"awsUseProfile",
 							(e) => (e.target as HTMLInputElement).value === "profile",
 						)}>
-						<VSCodeRadio value="credentials">AWS Credentials</VSCodeRadio>
-						<VSCodeRadio value="profile">AWS Profile</VSCodeRadio>
+						<VSCodeRadio value="credentials">{t("settings:providers.awsCredentials")}</VSCodeRadio>
+						<VSCodeRadio value="profile">{t("settings:providers.awsProfile")}</VSCodeRadio>
 					</VSCodeRadioGroup>
 					<div className="text-sm text-vscode-descriptionForeground -mt-3">
-						Authenticate by providing an access key and secret or use the default AWS credential providers,
-						i.e. ~/.aws/credentials or environment variables. These credentials are only used locally to
-						make API requests from this extension.
+						{t("settings:providers.apiKeyStorageNotice")}
 					</div>
 					{apiConfiguration?.awsUseProfile ? (
 						<VSCodeTextField
@@ -494,7 +500,7 @@ const ApiOptions = ({
 							onInput={handleInputChange("awsProfile")}
 							placeholder="Enter profile name"
 							className="w-full">
-							<span className="font-medium">AWS Profile Name</span>
+							<span className="font-medium">{t("settings:providers.awsProfileName")}</span>
 						</VSCodeTextField>
 					) : (
 						<>
@@ -504,7 +510,7 @@ const ApiOptions = ({
 								onInput={handleInputChange("awsAccessKey")}
 								placeholder="Enter Access Key..."
 								className="w-full">
-								<span className="font-medium">AWS Access Key</span>
+								<span className="font-medium">{t("settings:providers.awsAccessKey")}</span>
 							</VSCodeTextField>
 							<VSCodeTextField
 								value={apiConfiguration?.awsSecretKey || ""}
@@ -512,7 +518,7 @@ const ApiOptions = ({
 								onInput={handleInputChange("awsSecretKey")}
 								placeholder="Enter Secret Key..."
 								className="w-full">
-								<span className="font-medium">AWS Secret Key</span>
+								<span className="font-medium">{t("settings:providers.awsSecretKey")}</span>
 							</VSCodeTextField>
 							<VSCodeTextField
 								value={apiConfiguration?.awsSessionToken || ""}
@@ -520,13 +526,13 @@ const ApiOptions = ({
 								onInput={handleInputChange("awsSessionToken")}
 								placeholder="Enter Session Token..."
 								className="w-full">
-								<span className="font-medium">AWS Session Token</span>
+								<span className="font-medium">{t("settings:providers.awsSessionToken")}</span>
 							</VSCodeTextField>
 						</>
 					)}
 					<div className="dropdown-container">
 						<label htmlFor="aws-region-dropdown" className="font-medium">
-							AWS Region
+							{t("settings:providers.awsRegion")}
 						</label>
 						<Dropdown
 							id="aws-region-dropdown"
@@ -556,7 +562,7 @@ const ApiOptions = ({
 					<Checkbox
 						checked={apiConfiguration?.awsUseCrossRegionInference || false}
 						onChange={handleInputChange("awsUseCrossRegionInference", noTransform)}>
-						Use cross-region inference
+						{t("settings:providers.awsCrossRegion")}
 					</Checkbox>
 				</>
 			)}
@@ -564,27 +570,26 @@ const ApiOptions = ({
 			{selectedProvider === "vertex" && (
 				<>
 					<div className="text-sm text-vscode-descriptionForeground">
-						<div>To use Google Cloud Vertex AI, you need to:</div>
+						<div>{t("settings:providers.googleCloudSetup.title")}</div>
 						<div>
 							<VSCodeLink
 								href="https://cloud.google.com/vertex-ai/generative-ai/docs/partner-models/use-claude#before_you_begin"
 								className="text-sm">
-								1. Create a Google Cloud account, enable the Vertex AI API & enable the desired Claude
-								models.
+								{t("settings:providers.googleCloudSetup.step1")}
 							</VSCodeLink>
 						</div>
 						<div>
 							<VSCodeLink
 								href="https://cloud.google.com/docs/authentication/provide-credentials-adc#google-idp"
 								className="text-sm">
-								2. Install the Google Cloud CLI & configure application default credentials.
+								{t("settings:providers.googleCloudSetup.step2")}
 							</VSCodeLink>
 						</div>
 						<div>
 							<VSCodeLink
 								href="https://developers.google.com/workspace/guides/create-credentials?hl=en#service-account"
 								className="text-sm">
-								3. Or create a service account with credentials.
+								{t("settings:providers.googleCloudSetup.step3")}
 							</VSCodeLink>
 						</div>
 					</div>
@@ -593,25 +598,25 @@ const ApiOptions = ({
 						onInput={handleInputChange("vertexJsonCredentials")}
 						placeholder="Enter Credentials JSON..."
 						className="w-full">
-						<span className="font-medium">Google Cloud Credentials</span>
+						<span className="font-medium">{t("settings:providers.googleCloudCredentials")}</span>
 					</VSCodeTextField>
 					<VSCodeTextField
 						value={apiConfiguration?.vertexKeyFile || ""}
 						onInput={handleInputChange("vertexKeyFile")}
 						placeholder="Enter Key File Path..."
 						className="w-full">
-						<span className="font-medium">Google Cloud Key File Path</span>
+						<span className="font-medium">{t("settings:providers.googleCloudKeyFile")}</span>
 					</VSCodeTextField>
 					<VSCodeTextField
 						value={apiConfiguration?.vertexProjectId || ""}
 						onInput={handleInputChange("vertexProjectId")}
 						placeholder="Enter Project ID..."
 						className="w-full">
-						<span className="font-medium">Google Cloud Project ID</span>
+						<span className="font-medium">{t("settings:providers.googleCloudProjectId")}</span>
 					</VSCodeTextField>
 					<div className="dropdown-container">
 						<label htmlFor="vertex-region-dropdown" className="font-medium">
-							Google Cloud Region
+							{t("settings:providers.googleCloudRegion")}
 						</label>
 						<Dropdown
 							id="vertex-region-dropdown"
@@ -639,14 +644,14 @@ const ApiOptions = ({
 						onInput={handleInputChange("geminiApiKey")}
 						placeholder="Enter API Key..."
 						className="w-full">
-						<span className="font-medium">Gemini API Key</span>
+						<span className="font-medium">{t("settings:providers.geminiApiKey")}</span>
 					</VSCodeTextField>
 					<div className="text-sm text-vscode-descriptionForeground -mt-2">
-						This key is stored locally and only used to make API requests from this extension.
+						{t("settings:providers.apiKeyStorageNotice")}
 					</div>
 					{!apiConfiguration?.geminiApiKey && (
 						<VSCodeButtonLink href="https://ai.google.dev/" appearance="secondary">
-							Get Gemini API Key
+							{t("settings:providers.getGeminiApiKey")}
 						</VSCodeButtonLink>
 					)}
 					<div>
@@ -659,7 +664,7 @@ const ApiOptions = ({
 									setApiConfigurationField("googleGeminiBaseUrl", "")
 								}
 							}}>
-							Use custom base URL
+							{t("settings:providers.useCustomBaseUrl")}
 						</Checkbox>
 						{googleGeminiBaseUrlSelected && (
 							<VSCodeTextField
@@ -682,7 +687,7 @@ const ApiOptions = ({
 						onInput={handleInputChange("openAiBaseUrl")}
 						placeholder={"Enter base URL..."}
 						className="w-full">
-						<span className="font-medium">Base URL</span>
+						<span className="font-medium">{t("settings:providers.openAiBaseUrl")}</span>
 					</VSCodeTextField>
 					<VSCodeTextField
 						value={apiConfiguration?.openAiApiKey || ""}
@@ -690,7 +695,7 @@ const ApiOptions = ({
 						onInput={handleInputChange("openAiApiKey")}
 						placeholder="Enter API Key..."
 						className="w-full">
-						<span className="font-medium">API Key</span>
+						<span className="font-medium">{t("settings:providers.openAiApiKey")}</span>
 					</VSCodeTextField>
 					<ModelPicker
 						apiConfiguration={apiConfiguration}
@@ -706,12 +711,12 @@ const ApiOptions = ({
 					<Checkbox
 						checked={apiConfiguration?.openAiStreamingEnabled ?? true}
 						onChange={handleInputChange("openAiStreamingEnabled", noTransform)}>
-						Enable streaming
+						{t("settings:modelInfo.enableStreaming")}
 					</Checkbox>
 					<Checkbox
 						checked={apiConfiguration?.openAiUseAzure ?? false}
 						onChange={handleInputChange("openAiUseAzure", noTransform)}>
-						Use Azure
+						{t("settings:modelInfo.useAzure")}
 					</Checkbox>
 					<div>
 						<Checkbox
@@ -723,7 +728,7 @@ const ApiOptions = ({
 									setApiConfigurationField("azureApiVersion", "")
 								}
 							}}>
-							Set Azure API version
+							{t("settings:modelInfo.azureApiVersion")}
 						</Checkbox>
 						{azureApiVersionSelected && (
 							<VSCodeTextField
@@ -737,8 +742,7 @@ const ApiOptions = ({
 
 					<div className="flex flex-col gap-3">
 						<div className="text-sm text-vscode-descriptionForeground">
-							Configure the capabilities and pricing for your custom OpenAI-compatible model. Be careful
-							when specifying the model capabilities, as they can affect how Roo Code performs.
+							{t("settings:providers.customModel.capabilities")}
 						</div>
 
 						<div>
@@ -762,7 +766,7 @@ const ApiOptions = ({
 											: "var(--vscode-errorForeground)"
 									})(),
 								}}
-								title="Maximum number of tokens the model can generate in a single response"
+								title={t("settings:providers.customModel.maxTokens.description")}
 								onInput={handleInputChange("openAiCustomModelInfo", (e) => {
 									const value = parseInt((e.target as HTMLInputElement).value)
 
@@ -773,11 +777,12 @@ const ApiOptions = ({
 								})}
 								placeholder="e.g. 4096"
 								className="w-full">
-								<span className="font-medium">Max Output Tokens</span>
+								<span className="font-medium">
+									{t("settings:providers.customModel.maxTokens.label")}
+								</span>
 							</VSCodeTextField>
 							<div className="text-sm text-vscode-descriptionForeground">
-								Maximum number of tokens the model can generate in a response. (Specify -1 to allow the
-								server to set the max tokens.)
+								{t("settings:providers.customModel.maxTokens.description")}
 							</div>
 						</div>
 
@@ -802,7 +807,7 @@ const ApiOptions = ({
 											: "var(--vscode-errorForeground)"
 									})(),
 								}}
-								title="Total number of tokens (input + output) the model can process in a single request"
+								title={t("settings:providers.customModel.contextWindow.description")}
 								onInput={handleInputChange("openAiCustomModelInfo", (e) => {
 									const value = (e.target as HTMLInputElement).value
 									const parsed = parseInt(value)
@@ -816,10 +821,12 @@ const ApiOptions = ({
 								})}
 								placeholder="e.g. 128000"
 								className="w-full">
-								<span className="font-medium">Context Window Size</span>
+								<span className="font-medium">
+									{t("settings:providers.customModel.contextWindow.label")}
+								</span>
 							</VSCodeTextField>
 							<div className="text-sm text-vscode-descriptionForeground">
-								Total tokens (input + output) the model can process.
+								{t("settings:providers.customModel.contextWindow.description")}
 							</div>
 						</div>
 
@@ -836,16 +843,18 @@ const ApiOptions = ({
 											supportsImages: checked,
 										}
 									})}>
-									<span className="font-medium">Image Support</span>
+									<span className="font-medium">
+										{t("settings:providers.customModel.imageSupport.label")}
+									</span>
 								</Checkbox>
 								<i
 									className="codicon codicon-info text-vscode-descriptionForeground"
-									title="Enable if the model can process and understand images in the input. Required for image-based assistance and visual code understanding."
+									title={t("settings:providers.customModel.imageSupport.description")}
 									style={{ fontSize: "12px" }}
 								/>
 							</div>
 							<div className="text-sm text-vscode-descriptionForeground pt-1">
-								Is this model capable of processing and understanding images?
+								{t("settings:providers.customModel.imageSupport.description")}
 							</div>
 						</div>
 
@@ -859,16 +868,18 @@ const ApiOptions = ({
 											supportsComputerUse: checked,
 										}
 									})}>
-									<span className="font-medium">Computer Use</span>
+									<span className="font-medium">
+										{t("settings:providers.customModel.computerUse.label")}
+									</span>
 								</Checkbox>
 								<i
 									className="codicon codicon-info text-vscode-descriptionForeground"
-									title="Enable if the model can interact with your computer through commands and file operations. Required for automated tasks and file modifications."
+									title={t("settings:providers.customModel.computerUse.description")}
 									style={{ fontSize: "12px" }}
 								/>
 							</div>
 							<div className="text-sm text-vscode-descriptionForeground pt-1">
-								Is this model capable of interacting with a browser? (e.g. Claude 3.7 Sonnet).
+								{t("settings:providers.customModel.computerUse.description")}
 							</div>
 						</div>
 
@@ -882,16 +893,18 @@ const ApiOptions = ({
 											supportsPromptCache: checked,
 										}
 									})}>
-									<span className="font-medium">Prompt Caching</span>
+									<span className="font-medium">
+										{t("settings:providers.customModel.promptCache.label")}
+									</span>
 								</Checkbox>
 								<i
 									className="codicon codicon-info text-vscode-descriptionForeground"
-									title="Enable if the model supports prompt caching. This can improve performance and reduce costs."
+									title={t("settings:providers.customModel.promptCache.description")}
 									style={{ fontSize: "12px" }}
 								/>
 							</div>
 							<div className="text-sm text-vscode-descriptionForeground pt-1">
-								Is this model capable of caching prompts?
+								{t("settings:providers.customModel.promptCache.description")}
 							</div>
 						</div>
 
@@ -928,10 +941,12 @@ const ApiOptions = ({
 								placeholder="e.g. 0.0001"
 								className="w-full">
 								<div className="flex items-center gap-1">
-									<span className="font-medium">Input Price</span>
+									<span className="font-medium">
+										{t("settings:providers.customModel.pricing.input.label")}
+									</span>
 									<i
 										className="codicon codicon-info text-vscode-descriptionForeground"
-										title="Cost per million tokens in the input/prompt. This affects the cost of sending context and instructions to the model."
+										title={t("settings:providers.customModel.pricing.input.description")}
 										style={{ fontSize: "12px" }}
 									/>
 								</div>
@@ -971,10 +986,12 @@ const ApiOptions = ({
 								placeholder="e.g. 0.0002"
 								className="w-full">
 								<div className="flex items-center gap-1">
-									<span className="font-medium">Output Price</span>
+									<span className="font-medium">
+										{t("settings:providers.customModel.pricing.output.label")}
+									</span>
 									<i
 										className="codicon codicon-info text-vscode-descriptionForeground"
-										title="Cost per million tokens in the model's response. This affects the cost of generated content and completions."
+										title={t("settings:providers.customModel.pricing.output.description")}
 										style={{ fontSize: "12px" }}
 									/>
 								</div>
@@ -1015,10 +1032,14 @@ const ApiOptions = ({
 										placeholder="e.g. 0.0001"
 										className="w-full">
 										<div className="flex items-center gap-1">
-											<span className="font-medium">Cache Reads Price</span>
+											<span className="font-medium">
+												{t("settings:providers.customModel.pricing.cacheReads.label")}
+											</span>
 											<i
 												className="codicon codicon-info text-vscode-descriptionForeground"
-												title="Cost per million tokens for reading from the cache. This is the price charged when a cached response is retrieved."
+												title={t(
+													"settings:providers.customModel.pricing.cacheReads.description",
+												)}
 												style={{ fontSize: "12px" }}
 											/>
 										</div>
@@ -1056,10 +1077,14 @@ const ApiOptions = ({
 										placeholder="e.g. 0.00005"
 										className="w-full">
 										<div className="flex items-center gap-1">
-											<span className="font-medium">Cache Writes Price</span>
+											<span className="font-medium">
+												{t("settings:providers.customModel.pricing.cacheWrites.label")}
+											</span>
 											<i
 												className="codicon codicon-info text-vscode-descriptionForeground"
-												title="Cost per million tokens for writing to the cache. This is the price charged when a prompt is cached for the first time."
+												title={t(
+													"settings:providers.customModel.pricing.cacheWrites.description",
+												)}
 												style={{ fontSize: "12px" }}
 											/>
 										</div>
@@ -1073,7 +1098,7 @@ const ApiOptions = ({
 							onClick={() =>
 								setApiConfigurationField("openAiCustomModelInfo", openAiModelInfoSaneDefaults)
 							}>
-							Reset to Defaults
+							{t("settings:providers.customModel.resetDefaults")}
 						</Button>
 					</div>
 				</>
@@ -1087,14 +1112,14 @@ const ApiOptions = ({
 						onInput={handleInputChange("lmStudioBaseUrl")}
 						placeholder={"Default: http://localhost:1234"}
 						className="w-full">
-						<span className="font-medium">Base URL (optional)</span>
+						<span className="font-medium">{t("settings:providers.lmStudio.baseUrl")}</span>
 					</VSCodeTextField>
 					<VSCodeTextField
 						value={apiConfiguration?.lmStudioModelId || ""}
 						onInput={handleInputChange("lmStudioModelId")}
 						placeholder={"e.g. meta-llama-3.1-8b-instruct"}
 						className="w-full">
-						<span className="font-medium">Model ID</span>
+						<span className="font-medium">{t("settings:providers.lmStudio.modelId")}</span>
 					</VSCodeTextField>
 					{lmStudioModels.length > 0 && (
 						<VSCodeRadioGroup
@@ -1117,10 +1142,9 @@ const ApiOptions = ({
 					<Checkbox
 						checked={apiConfiguration?.lmStudioSpeculativeDecodingEnabled === true}
 						onChange={(checked) => {
-							// Explicitly set the boolean value using direct method.
 							setApiConfigurationField("lmStudioSpeculativeDecodingEnabled", checked)
 						}}>
-						Enable Speculative Decoding
+						{t("settings:providers.lmStudio.speculativeDecoding")}
 					</Checkbox>
 					{apiConfiguration?.lmStudioSpeculativeDecodingEnabled && (
 						<>
@@ -1130,16 +1154,17 @@ const ApiOptions = ({
 									onInput={handleInputChange("lmStudioDraftModelId")}
 									placeholder={"e.g. lmstudio-community/llama-3.2-1b-instruct"}
 									className="w-full">
-									<span className="font-medium">Draft Model ID</span>
+									<span className="font-medium">{t("settings:providers.lmStudio.draftModelId")}</span>
 								</VSCodeTextField>
 								<div className="text-sm text-vscode-descriptionForeground">
-									Draft model must be from the same model family for speculative decoding to work
-									correctly.
+									{t("settings:providers.lmStudio.draftModelDesc")}
 								</div>
 							</div>
 							{lmStudioModels.length > 0 && (
 								<>
-									<div className="font-medium">Select Draft Model</div>
+									<div className="font-medium">
+										{t("settings:providers.lmStudio.selectDraftModel")}
+									</div>
 									<VSCodeRadioGroup
 										value={
 											lmStudioModels.includes(apiConfiguration?.lmStudioDraftModelId || "")
@@ -1161,8 +1186,7 @@ const ApiOptions = ({
 												border: "1px solid var(--vscode-inputValidation-infoBorder)",
 												color: "var(--vscode-inputValidation-infoForeground)",
 											}}>
-											No draft models found. Please ensure LM Studio is running with Server Mode
-											enabled.
+											{t("settings:providers.lmStudio.noModelsFound")}
 										</div>
 									)}
 								</>
@@ -1170,15 +1194,18 @@ const ApiOptions = ({
 						</>
 					)}
 					<div className="text-sm text-vscode-descriptionForeground">
-						LM Studio allows you to run models locally on your computer. For instructions on how to get
-						started, see their <VSCodeLink href="https://lmstudio.ai/docs">quickstart guide</VSCodeLink>.
-						You will also need to start LM Studio's{" "}
-						<VSCodeLink href="https://lmstudio.ai/docs/basics/server">local server</VSCodeLink> feature to
-						use it with this extension.
-						<span className="text-vscode-errorForeground ml-1">
-							<span className="font-medium">Note:</span> Roo Code uses complex prompts and works best with
-							Claude models. Less capable models may not work as expected.
-						</span>
+						<Trans
+							i18nKey="settings:providers.lmStudio.description"
+							components={{
+								a: <VSCodeLink href="https://lmstudio.ai/docs" />,
+								b: <VSCodeLink href="https://lmstudio.ai/docs/basics/server" />,
+								span: (
+									<span className="text-vscode-errorForeground ml-1">
+										<span className="font-medium">Note:</span>
+									</span>
+								),
+							}}
+						/>
 					</div>
 				</>
 			)}
@@ -1191,14 +1218,14 @@ const ApiOptions = ({
 						onInput={handleInputChange("deepSeekApiKey")}
 						placeholder="Enter API Key..."
 						className="w-full">
-						<span className="font-medium">DeepSeek API Key</span>
+						<span className="font-medium">{t("settings:providers.deepSeekApiKey")}</span>
 					</VSCodeTextField>
 					<div className="text-sm text-vscode-descriptionForeground -mt-2">
-						This key is stored locally and only used to make API requests from this extension.
+						{t("settings:providers.apiKeyStorageNotice")}
 					</div>
 					{!apiConfiguration?.deepSeekApiKey && (
 						<VSCodeButtonLink href="https://platform.deepseek.com/" appearance="secondary">
-							Get DeepSeek API Key
+							{t("settings:providers.getDeepSeekApiKey")}
 						</VSCodeButtonLink>
 					)}
 				</>
@@ -1208,7 +1235,7 @@ const ApiOptions = ({
 				<>
 					<div className="dropdown-container">
 						<label htmlFor="vscode-lm-model" className="font-medium">
-							Language Model
+							{t("settings:providers.vscodeLmModel")}
 						</label>
 						{vsCodeLmModels.length > 0 ? (
 							<Select
@@ -1238,16 +1265,11 @@ const ApiOptions = ({
 							</Select>
 						) : (
 							<div className="text-sm text-vscode-descriptionForeground">
-								The VS Code Language Model API allows you to run models provided by other VS Code
-								extensions (including but not limited to GitHub Copilot). The easiest way to get started
-								is to install the Copilot and Copilot Chat extensions from the VS Code Marketplace.
+								{t("settings:providers.vscodeLmDescription")}
 							</div>
 						)}
 					</div>
-					<div className="text-sm text-vscode-errorForeground">
-						Note: This is a very experimental integration and provider support will vary. If you get an
-						error about a model not being supported, that's an issue on the provider's end.
-					</div>
+					<div className="text-sm text-vscode-errorForeground">{t("settings:providers.vscodeLmWarning")}</div>
 				</>
 			)}
 
@@ -1259,14 +1281,14 @@ const ApiOptions = ({
 						onInput={handleInputChange("ollamaBaseUrl")}
 						placeholder={"Default: http://localhost:11434"}
 						className="w-full">
-						<span className="font-medium">Base URL (optional)</span>
+						<span className="font-medium">{t("settings:providers.ollama.baseUrl")}</span>
 					</VSCodeTextField>
 					<VSCodeTextField
 						value={apiConfiguration?.ollamaModelId || ""}
 						onInput={handleInputChange("ollamaModelId")}
 						placeholder={"e.g. llama3.1"}
 						className="w-full">
-						<span className="font-medium">Model ID</span>
+						<span className="font-medium">{t("settings:providers.ollama.modelId")}</span>
 					</VSCodeTextField>
 					{ollamaModels.length > 0 && (
 						<VSCodeRadioGroup
@@ -1287,15 +1309,9 @@ const ApiOptions = ({
 						</VSCodeRadioGroup>
 					)}
 					<div className="text-sm text-vscode-descriptionForeground">
-						Ollama allows you to run models locally on your computer. For instructions on how to get
-						started, see their
-						<VSCodeLink href="https://github.com/ollama/ollama/blob/main/README.md">
-							quickstart guide
-						</VSCodeLink>
-						.
+						{t("settings:providers.ollama.description")}
 						<span className="text-vscode-errorForeground ml-1">
-							<span className="font-medium">Note:</span> Roo Code uses complex prompts and works best with
-							Claude models. Less capable models may not work as expected.
+							{t("settings:providers.ollama.warning")}
 						</span>
 					</div>
 				</>
@@ -1309,14 +1325,14 @@ const ApiOptions = ({
 						onInput={handleInputChange("unboundApiKey")}
 						placeholder="Enter API Key..."
 						className="w-full">
-						<span className="font-medium">Unbound API Key</span>
+						<span className="font-medium">{t("settings:providers.unboundApiKey")}</span>
 					</VSCodeTextField>
 					<div className="text-sm text-vscode-descriptionForeground -mt-2">
-						This key is stored locally and only used to make API requests from this extension.
+						{t("settings:providers.apiKeyStorageNotice")}
 					</div>
 					{!apiConfiguration?.unboundApiKey && (
 						<VSCodeButtonLink href="https://gateway.getunbound.ai" appearance="secondary">
-							Get Unbound API Key
+							{t("settings:providers.getUnboundApiKey")}
 						</VSCodeButtonLink>
 					)}
 				</>
@@ -1325,13 +1341,10 @@ const ApiOptions = ({
 			{selectedProvider === "human-relay" && (
 				<>
 					<div className="text-sm text-vscode-descriptionForeground">
-						No API key is required, but the user needs to help copy and paste the information to the web
-						chat AI.
+						{t("settings:providers.humanRelay.description")}
 					</div>
 					<div className="text-sm text-vscode-descriptionForeground">
-						During use, a dialog box will pop up and the current message will be copied to the clipboard
-						automatically. You need to paste these to web versions of AI (such as ChatGPT or Claude), then
-						copy the AI's reply back to the dialog box and click the confirm button.
+						{t("settings:providers.humanRelay.instructions")}
 					</div>
 				</>
 			)}
@@ -1398,7 +1411,7 @@ const ApiOptions = ({
 				<>
 					<div className="dropdown-container">
 						<label htmlFor="model-id" className="font-medium">
-							Model
+							{t("settings:providers.model")}
 						</label>
 						<Dropdown
 							id="model-id"
@@ -1435,19 +1448,7 @@ const ApiOptions = ({
 								<span className="font-medium">Custom ARN</span>
 							</VSCodeTextField>
 							<div className="text-sm text-vscode-descriptionForeground -mt-2">
-								Enter a valid AWS Bedrock ARN for the model you want to use. Format examples:
-								<ul className="list-disc pl-5 mt-1">
-									<li>
-										arn:aws:bedrock:us-east-1:123456789012:foundation-model/anthropic.claude-3-sonnet-20240229-v1:0
-									</li>
-									<li>
-										arn:aws:bedrock:us-west-2:123456789012:provisioned-model/my-provisioned-model
-									</li>
-									<li>
-										arn:aws:bedrock:us-east-1:123456789012:default-prompt-router/anthropic.claude:1
-									</li>
-								</ul>
-								Make sure the region in the ARN matches your selected AWS Region above.
+								{t("settings:providers.awsCustomArnDesc")}
 							</div>
 							{apiConfiguration?.awsCustomArn &&
 								(() => {
@@ -1459,8 +1460,7 @@ const ApiOptions = ({
 									if (!validation.isValid) {
 										return (
 											<div className="text-sm text-vscode-errorForeground mt-2">
-												{validation.errorMessage ||
-													"Invalid ARN format. Please check the examples above."}
+												{validation.errorMessage || t("settings:providers.invalidArnFormat")}
 											</div>
 										)
 									}
@@ -1475,7 +1475,6 @@ const ApiOptions = ({
 
 									return null
 								})()}
-							=======
 						</>
 					)}
 					<ModelInfoView

+ 51 - 36
webview-ui/src/components/settings/AutoApproveSettings.tsx

@@ -1,4 +1,5 @@
 import { HTMLAttributes, useState } from "react"
+import { useAppTranslation } from "@/i18n/TranslationContext"
 import { VSCodeButton, VSCodeCheckbox, VSCodeTextField } from "@vscode/webview-ui-toolkit/react"
 import { CheckCheck } from "lucide-react"
 
@@ -40,6 +41,7 @@ export const AutoApproveSettings = ({
 	className,
 	...props
 }: AutoApproveSettingsProps) => {
+	const { t } = useAppTranslation()
 	const [commandInput, setCommandInput] = useState("")
 
 	const handleAddCommand = () => {
@@ -54,10 +56,10 @@ export const AutoApproveSettings = ({
 
 	return (
 		<div {...props}>
-			<SectionHeader description="Allow Roo to automatically perform operations without requiring approval. Enable these settings only if you fully trust the AI and understand the associated security risks.">
+			<SectionHeader description={t("settings:autoApprove.description")}>
 				<div className="flex items-center gap-2">
 					<CheckCheck className="w-4" />
-					<div>Auto-Approve</div>
+					<div>{t("settings:sections.autoApprove")}</div>
 				</div>
 			</SectionHeader>
 
@@ -65,23 +67,24 @@ export const AutoApproveSettings = ({
 				<div>
 					<VSCodeCheckbox
 						checked={alwaysAllowReadOnly}
-						onChange={(e: any) => setCachedStateField("alwaysAllowReadOnly", e.target.checked)}>
-						<span className="font-medium">Always approve read-only operations</span>
+						onChange={(e: any) => setCachedStateField("alwaysAllowReadOnly", e.target.checked)}
+						data-testid="always-allow-readonly-checkbox">
+						<span className="font-medium">{t("settings:autoApprove.readOnly.label")}</span>
 					</VSCodeCheckbox>
 					<p className="text-vscode-descriptionForeground text-sm mt-0">
-						When enabled, Roo will automatically view directory contents and read files without requiring
-						you to click the Approve button.
+						{t("settings:autoApprove.readOnly.description")}
 					</p>
 				</div>
 
 				<div>
 					<VSCodeCheckbox
 						checked={alwaysAllowWrite}
-						onChange={(e: any) => setCachedStateField("alwaysAllowWrite", e.target.checked)}>
-						<span className="font-medium">Always approve write operations</span>
+						onChange={(e: any) => setCachedStateField("alwaysAllowWrite", e.target.checked)}
+						data-testid="always-allow-write-checkbox">
+						<span className="font-medium">{t("settings:autoApprove.write.label")}</span>
 					</VSCodeCheckbox>
 					<p className="text-vscode-descriptionForeground text-sm mt-0">
-						Automatically create and edit files without requiring approval
+						{t("settings:autoApprove.write.description")}
 					</p>
 					{alwaysAllowWrite && (
 						<div
@@ -98,12 +101,13 @@ export const AutoApproveSettings = ({
 									step="100"
 									value={writeDelayMs}
 									onChange={(e) => setCachedStateField("writeDelayMs", parseInt(e.target.value))}
+									data-testid="write-delay-slider"
 									className="h-2 focus:outline-0 w-4/5 accent-vscode-button-background"
 								/>
 								<span style={{ minWidth: "45px", textAlign: "left" }}>{writeDelayMs}ms</span>
 							</div>
 							<p className="text-vscode-descriptionForeground text-sm mt-1">
-								Delay after writes to allow diagnostics to detect potential problems
+								{t("settings:autoApprove.write.delayLabel")}
 							</p>
 						</div>
 					)}
@@ -112,24 +116,26 @@ export const AutoApproveSettings = ({
 				<div>
 					<VSCodeCheckbox
 						checked={alwaysAllowBrowser}
-						onChange={(e: any) => setCachedStateField("alwaysAllowBrowser", e.target.checked)}>
-						<span className="font-medium">Always approve browser actions</span>
+						onChange={(e: any) => setCachedStateField("alwaysAllowBrowser", e.target.checked)}
+						data-testid="always-allow-browser-checkbox">
+						<span className="font-medium">{t("settings:autoApprove.browser.label")}</span>
 					</VSCodeCheckbox>
 					<p className="text-vscode-descriptionForeground text-sm mt-0">
-						Automatically perform browser actions without requiring approval
+						{t("settings:autoApprove.browser.description")}
 						<br />
-						Note: Only applies when the model supports computer use
+						{t("settings:autoApprove.browser.note")}
 					</p>
 				</div>
 
 				<div>
 					<VSCodeCheckbox
 						checked={alwaysApproveResubmit}
-						onChange={(e: any) => setCachedStateField("alwaysApproveResubmit", e.target.checked)}>
-						<span className="font-medium">Always retry failed API requests</span>
+						onChange={(e: any) => setCachedStateField("alwaysApproveResubmit", e.target.checked)}
+						data-testid="always-approve-resubmit-checkbox">
+						<span className="font-medium">{t("settings:autoApprove.retry.label")}</span>
 					</VSCodeCheckbox>
 					<p className="text-vscode-descriptionForeground text-sm mt-0">
-						Automatically retry failed API requests when server returns an error response
+						{t("settings:autoApprove.retry.description")}
 					</p>
 					{alwaysApproveResubmit && (
 						<div
@@ -148,12 +154,13 @@ export const AutoApproveSettings = ({
 									onChange={(e) =>
 										setCachedStateField("requestDelaySeconds", parseInt(e.target.value))
 									}
+									data-testid="request-delay-slider"
 									className="h-2 focus:outline-0 w-4/5 accent-vscode-button-background"
 								/>
 								<span style={{ minWidth: "45px", textAlign: "left" }}>{requestDelaySeconds}s</span>
 							</div>
 							<p className="text-vscode-descriptionForeground text-sm mt-0">
-								Delay before retrying the request
+								{t("settings:autoApprove.retry.delayLabel")}
 							</p>
 						</div>
 					)}
@@ -162,45 +169,48 @@ export const AutoApproveSettings = ({
 				<div>
 					<VSCodeCheckbox
 						checked={alwaysAllowMcp}
-						onChange={(e: any) => setCachedStateField("alwaysAllowMcp", e.target.checked)}>
-						<span className="font-medium">Always approve MCP tools</span>
+						onChange={(e: any) => setCachedStateField("alwaysAllowMcp", e.target.checked)}
+						data-testid="always-allow-mcp-checkbox">
+						<span className="font-medium">{t("settings:autoApprove.mcp.label")}</span>
 					</VSCodeCheckbox>
 					<p className="text-vscode-descriptionForeground text-sm mt-0">
-						Enable auto-approval of individual MCP tools in the MCP Servers view (requires both this setting
-						and the tool's individual "Always allow" checkbox)
+						{t("settings:autoApprove.mcp.description")}
 					</p>
 				</div>
 
 				<div>
 					<VSCodeCheckbox
 						checked={alwaysAllowModeSwitch}
-						onChange={(e: any) => setCachedStateField("alwaysAllowModeSwitch", e.target.checked)}>
-						<span className="font-medium">Always approve mode switching</span>
+						onChange={(e: any) => setCachedStateField("alwaysAllowModeSwitch", e.target.checked)}
+						data-testid="always-allow-mode-switch-checkbox">
+						<span className="font-medium">{t("settings:autoApprove.modeSwitch.label")}</span>
 					</VSCodeCheckbox>
 					<p className="text-vscode-descriptionForeground text-sm mt-0">
-						Automatically switch between different modes without requiring approval
+						{t("settings:autoApprove.modeSwitch.description")}
 					</p>
 				</div>
 
 				<div>
 					<VSCodeCheckbox
 						checked={alwaysAllowSubtasks}
-						onChange={(e: any) => setCachedStateField("alwaysAllowSubtasks", e.target.checked)}>
-						<span className="font-medium">Always approve creation & completion of subtasks</span>
+						onChange={(e: any) => setCachedStateField("alwaysAllowSubtasks", e.target.checked)}
+						data-testid="always-allow-subtasks-checkbox">
+						<span className="font-medium">{t("settings:autoApprove.subtasks.label")}</span>
 					</VSCodeCheckbox>
 					<p className="text-vscode-descriptionForeground text-sm mt-0">
-						Allow creation and completion of subtasks without requiring approval
+						{t("settings:autoApprove.subtasks.description")}
 					</p>
 				</div>
 
 				<div>
 					<VSCodeCheckbox
 						checked={alwaysAllowExecute}
-						onChange={(e: any) => setCachedStateField("alwaysAllowExecute", e.target.checked)}>
-						<span className="font-medium">Always approve allowed execute operations</span>
+						onChange={(e: any) => setCachedStateField("alwaysAllowExecute", e.target.checked)}
+						data-testid="always-allow-execute-checkbox">
+						<span className="font-medium">{t("settings:autoApprove.execute.label")}</span>
 					</VSCodeCheckbox>
 					<p className="text-vscode-descriptionForeground text-sm mt-0">
-						Automatically execute allowed terminal commands without requiring approval
+						{t("settings:autoApprove.execute.description")}
 					</p>
 					{alwaysAllowExecute && (
 						<div
@@ -209,10 +219,11 @@ export const AutoApproveSettings = ({
 								paddingLeft: 10,
 								borderLeft: "2px solid var(--vscode-button-background)",
 							}}>
-							<span className="font-medium">Allowed Auto-Execute Commands</span>
+							<span className="font-medium" data-testid="allowed-commands-heading">
+								{t("settings:autoApprove.execute.allowedCommands")}
+							</span>
 							<p className="text-vscode-descriptionForeground text-sm mt-0">
-								Command prefixes that can be auto-executed when "Always approve execute operations" is
-								enabled. Add * to allow all commands (use with caution).
+								{t("settings:autoApprove.execute.allowedCommandsDescription")}
 							</p>
 							<div style={{ display: "flex", gap: "5px", marginTop: "10px" }}>
 								<VSCodeTextField
@@ -224,10 +235,13 @@ export const AutoApproveSettings = ({
 											handleAddCommand()
 										}
 									}}
-									placeholder="Enter command prefix (e.g., 'git ')"
+									placeholder={t("settings:autoApprove.execute.commandPlaceholder")}
+									data-testid="command-input"
 									style={{ flexGrow: 1 }}
 								/>
-								<VSCodeButton onClick={handleAddCommand}>Add</VSCodeButton>
+								<VSCodeButton onClick={handleAddCommand} data-testid="add-command-button">
+									{t("settings:autoApprove.execute.addButton")}
+								</VSCodeButton>
 							</div>
 							<div
 								style={{
@@ -244,6 +258,7 @@ export const AutoApproveSettings = ({
 										<VSCodeButton
 											appearance="icon"
 											className="text-primary-foreground"
+											data-testid={`remove-command-${index}`}
 											onClick={() => {
 												const newCommands = (allowedCommands ?? []).filter(
 													(_, i) => i !== index,

+ 26 - 23
webview-ui/src/components/settings/BrowserSettings.tsx

@@ -1,4 +1,5 @@
 import React, { HTMLAttributes, useState, useEffect } from "react"
+import { useAppTranslation } from "@/i18n/TranslationContext"
 import { VSCodeButton, VSCodeCheckbox, VSCodeTextField } from "@vscode/webview-ui-toolkit/react"
 import { Dropdown, type DropdownOption } from "vscrui"
 import { SquareMousePointer } from "lucide-react"
@@ -33,6 +34,7 @@ export const BrowserSettings = ({
 	setCachedStateField,
 	...props
 }: BrowserSettingsProps) => {
+	const { t } = useAppTranslation()
 	const [testingConnection, setTestingConnection] = useState(false)
 	const [testResult, setTestResult] = useState<{ success: boolean; message: string } | null>(null)
 	const [discovering, setDiscovering] = useState(false)
@@ -102,7 +104,7 @@ export const BrowserSettings = ({
 			<SectionHeader>
 				<div className="flex items-center gap-2">
 					<SquareMousePointer className="w-4" />
-					<div>Browser / Computer Use</div>
+					<div>{t("settings:sections.browser")}</div>
 				</div>
 			</SectionHeader>
 
@@ -111,11 +113,10 @@ export const BrowserSettings = ({
 					<VSCodeCheckbox
 						checked={browserToolEnabled}
 						onChange={(e: any) => setCachedStateField("browserToolEnabled", e.target.checked)}>
-						<span className="font-medium">Enable browser tool</span>
+						<span className="font-medium">{t("settings:browser.enable.label")}</span>
 					</VSCodeCheckbox>
 					<p className="text-vscode-descriptionForeground text-sm mt-0">
-						When enabled, Roo can use a browser to interact with websites when using models that support
-						computer use.
+						{t("settings:browser.enable.description")}
 					</p>
 					{browserToolEnabled && (
 						<div
@@ -126,7 +127,7 @@ export const BrowserSettings = ({
 							}}>
 							<div>
 								<label style={{ fontWeight: "500", display: "block", marginBottom: 5 }}>
-									Viewport size
+									{t("settings:browser.viewport.label")}
 								</label>
 								<div className="dropdown-container">
 									<Dropdown
@@ -136,21 +137,26 @@ export const BrowserSettings = ({
 										}}
 										style={{ width: "100%" }}
 										options={[
-											{ value: "1280x800", label: "Large Desktop (1280x800)" },
-											{ value: "900x600", label: "Small Desktop (900x600)" },
-											{ value: "768x1024", label: "Tablet (768x1024)" },
-											{ value: "360x640", label: "Mobile (360x640)" },
+											{
+												value: "1280x800",
+												label: t("settings:browser.viewport.options.largeDesktop"),
+											},
+											{
+												value: "900x600",
+												label: t("settings:browser.viewport.options.smallDesktop"),
+											},
+											{ value: "768x1024", label: t("settings:browser.viewport.options.tablet") },
+											{ value: "360x640", label: t("settings:browser.viewport.options.mobile") },
 										]}
 									/>
 								</div>
 								<p className="text-vscode-descriptionForeground text-sm mt-0">
-									Select the viewport size for browser interactions. This affects how websites are
-									displayed and interacted with.
+									{t("settings:browser.viewport.description")}
 								</p>
 							</div>
 							<div>
 								<div style={{ display: "flex", flexDirection: "column", gap: "5px" }}>
-									<span className="font-medium">Screenshot quality</span>
+									<span className="font-medium">{t("settings:browser.screenshotQuality.label")}</span>
 									<div style={{ display: "flex", alignItems: "center", gap: "5px" }}>
 										<input
 											type="range"
@@ -167,8 +173,7 @@ export const BrowserSettings = ({
 									</div>
 								</div>
 								<p className="text-vscode-descriptionForeground text-sm mt-0">
-									Adjust the WebP quality of browser screenshots. Higher values provide clearer
-									screenshots but increase token usage.
+									{t("settings:browser.screenshotQuality.description")}
 								</p>
 							</div>
 							<div className="mt-4">
@@ -183,11 +188,10 @@ export const BrowserSettings = ({
 												setCachedStateField("remoteBrowserHost", undefined)
 											}
 										}}>
-										<span className="font-medium">Use remote browser connection</span>
+										<span className="font-medium">{t("settings:browser.remote.label")}</span>
 									</VSCodeCheckbox>
 									<p className="text-vscode-descriptionForeground text-sm mt-0 ml-6">
-										Connect to a Chrome browser running with remote debugging enabled
-										(--remote-debugging-port=9222).
+										{t("settings:browser.remote.description")}
 									</p>
 								</div>
 								{remoteBrowserEnabled && (
@@ -201,13 +205,15 @@ export const BrowserSettings = ({
 														e.target.value || undefined,
 													)
 												}
-												placeholder="Custom URL (e.g., http://localhost:9222)"
+												placeholder={t("settings:browser.remote.urlPlaceholder")}
 												style={{ flexGrow: 1 }}
 											/>
 											<VSCodeButton
 												disabled={testingConnection}
 												onClick={remoteBrowserHost ? testConnection : discoverBrowser}>
-												{testingConnection || discovering ? "Testing..." : "Test Connection"}
+												{testingConnection || discovering
+													? t("settings:browser.remote.testingButton")
+													: t("settings:browser.remote.testButton")}
 											</VSCodeButton>
 										</div>
 										{testResult && (
@@ -221,10 +227,7 @@ export const BrowserSettings = ({
 											</div>
 										)}
 										<p className="text-vscode-descriptionForeground text-sm mt-2">
-											Enter the DevTools Protocol host address or
-											<strong> leave empty to auto-discover Chrome local instances.</strong>
-											The Test Connection button will try the custom URL if provided, or
-											auto-discover if the field is empty.
+											{t("settings:browser.remote.instructions")}
 										</p>
 									</>
 								)}

+ 5 - 4
webview-ui/src/components/settings/CheckpointSettings.tsx

@@ -1,4 +1,5 @@
 import { HTMLAttributes } from "react"
+import { useAppTranslation } from "@/i18n/TranslationContext"
 import { VSCodeCheckbox } from "@vscode/webview-ui-toolkit/react"
 import { GitBranch } from "lucide-react"
 
@@ -20,12 +21,13 @@ export const CheckpointSettings = ({
 	setCachedStateField,
 	...props
 }: CheckpointSettingsProps) => {
+	const { t } = useAppTranslation()
 	return (
 		<div {...props}>
 			<SectionHeader>
 				<div className="flex items-center gap-2">
 					<GitBranch className="w-4" />
-					<div>Checkpoints</div>
+					<div>{t("settings:sections.checkpoints")}</div>
 				</div>
 			</SectionHeader>
 
@@ -36,11 +38,10 @@ export const CheckpointSettings = ({
 						onChange={(e: any) => {
 							setCachedStateField("enableCheckpoints", e.target.checked)
 						}}>
-						<span className="font-medium">Enable automatic checkpoints</span>
+						<span className="font-medium">{t("settings:checkpoints.enable.label")}</span>
 					</VSCodeCheckbox>
 					<p className="text-vscode-descriptionForeground text-sm mt-0">
-						When enabled, Roo will automatically create checkpoints during task execution, making it easy to
-						review changes or revert to earlier states.
+						{t("settings:checkpoints.enable.description")}
 					</p>
 				</div>
 			</Section>

+ 12 - 14
webview-ui/src/components/settings/ContextManagementSettings.tsx

@@ -1,4 +1,5 @@
 import { HTMLAttributes } from "react"
+import { useAppTranslation } from "@/i18n/TranslationContext"
 import { VSCodeCheckbox } from "@vscode/webview-ui-toolkit/react"
 import { Database } from "lucide-react"
 
@@ -28,19 +29,20 @@ export const ContextManagementSettings = ({
 	className,
 	...props
 }: ContextManagementSettingsProps) => {
+	const { t } = useAppTranslation()
 	return (
 		<div className={cn("flex flex-col gap-2", className)} {...props}>
-			<SectionHeader description="Control what information is included in the AI's context window, affecting token usage and response quality">
+			<SectionHeader description={t("settings:contextManagement.description")}>
 				<div className="flex items-center gap-2">
 					<Database className="w-4" />
-					<div>Context Management</div>
+					<div>{t("settings:sections.contextManagement")}</div>
 				</div>
 			</SectionHeader>
 
 			<Section>
 				<div>
 					<div className="flex flex-col gap-2">
-						<span className="font-medium">Terminal output limit</span>
+						<span className="font-medium">{t("settings:contextManagement.terminal.label")}</span>
 						<div className="flex items-center gap-2">
 							<input
 								type="range"
@@ -58,14 +60,13 @@ export const ContextManagementSettings = ({
 						</div>
 					</div>
 					<p className="text-vscode-descriptionForeground text-sm mt-0">
-						Maximum number of lines to include in terminal output when executing commands. When exceeded
-						lines will be removed from the middle, saving tokens.
+						{t("settings:contextManagement.terminal.description")}
 					</p>
 				</div>
 
 				<div>
 					<div className="flex flex-col gap-2">
-						<span className="font-medium">Open tabs context limit</span>
+						<span className="font-medium">{t("settings:contextManagement.openTabs.label")}</span>
 						<div className="flex items-center gap-2">
 							<input
 								type="range"
@@ -81,14 +82,13 @@ export const ContextManagementSettings = ({
 						</div>
 					</div>
 					<p className="text-vscode-descriptionForeground text-sm mt-0">
-						Maximum number of VSCode open tabs to include in context. Higher values provide more context but
-						increase token usage.
+						{t("settings:contextManagement.openTabs.description")}
 					</p>
 				</div>
 
 				<div>
 					<div className="flex flex-col gap-2">
-						<span className="font-medium">Workspace files context limit</span>
+						<span className="font-medium">{t("settings:contextManagement.workspaceFiles.label")}</span>
 						<div className="flex items-center gap-2">
 							<input
 								type="range"
@@ -104,8 +104,7 @@ export const ContextManagementSettings = ({
 						</div>
 					</div>
 					<p className="text-vscode-descriptionForeground text-sm mt-0">
-						Maximum number of files to include in current working directory details. Higher values provide
-						more context but increase token usage.
+						{t("settings:contextManagement.workspaceFiles.description")}
 					</p>
 				</div>
 
@@ -116,11 +115,10 @@ export const ContextManagementSettings = ({
 							setCachedStateField("showRooIgnoredFiles", e.target.checked)
 						}}
 						data-testid="show-rooignored-files-checkbox">
-						<span className="font-medium">Show .rooignore'd files in lists and searches</span>
+						<span className="font-medium">{t("settings:contextManagement.rooignore.label")}</span>
 					</VSCodeCheckbox>
 					<p className="text-vscode-descriptionForeground text-sm mt-0">
-						When enabled, files matching patterns in .rooignore will be shown in lists with a lock symbol.
-						When disabled, these files will be completely hidden from file lists and searches.
+						{t("settings:contextManagement.rooignore.description")}
 					</p>
 				</div>
 			</Section>

+ 21 - 12
webview-ui/src/components/settings/ExperimentalFeature.tsx

@@ -1,20 +1,29 @@
 import { VSCodeCheckbox } from "@vscode/webview-ui-toolkit/react"
+import { useAppTranslation } from "@/i18n/TranslationContext"
 
 interface ExperimentalFeatureProps {
-	name: string
-	description: string
 	enabled: boolean
 	onChange: (value: boolean) => void
+	// Additional property to identify the experiment
+	experimentKey?: string
 }
 
-export const ExperimentalFeature = ({ name, description, enabled, onChange }: ExperimentalFeatureProps) => (
-	<div>
-		<div className="flex items-center gap-2">
-			<span className="text-vscode-errorForeground">⚠️</span>
-			<VSCodeCheckbox checked={enabled} onChange={(e: any) => onChange(e.target.checked)}>
-				<span className="font-medium">{name}</span>
-			</VSCodeCheckbox>
+export const ExperimentalFeature = ({ enabled, onChange, experimentKey }: ExperimentalFeatureProps) => {
+	const { t } = useAppTranslation()
+
+	// Generate translation keys based on experiment key
+	const nameKey = experimentKey ? `settings:experimental.${experimentKey}.name` : ""
+	const descriptionKey = experimentKey ? `settings:experimental.${experimentKey}.description` : ""
+
+	return (
+		<div>
+			<div className="flex items-center gap-2">
+				<span className="text-vscode-errorForeground">{t("settings:experimental.warning")}</span>
+				<VSCodeCheckbox checked={enabled} onChange={(e: any) => onChange(e.target.checked)}>
+					<span className="font-medium">{t(nameKey)}</span>
+				</VSCodeCheckbox>
+			</div>
+			<p className="text-vscode-descriptionForeground text-sm mt-0">{t(descriptionKey)}</p>
 		</div>
-		<p className="text-vscode-descriptionForeground text-sm mt-0">{description}</p>
-	</div>
-)
+	)
+}

+ 4 - 2
webview-ui/src/components/settings/ExperimentalSettings.tsx

@@ -1,4 +1,5 @@
 import { HTMLAttributes } from "react"
+import { useAppTranslation } from "@/i18n/TranslationContext"
 import { FlaskConical } from "lucide-react"
 
 import { EXPERIMENT_IDS, experimentConfigsMap, ExperimentId } from "../../../../src/shared/experiments"
@@ -25,12 +26,13 @@ export const ExperimentalSettings = ({
 	className,
 	...props
 }: ExperimentalSettingsProps) => {
+	const { t } = useAppTranslation()
 	return (
 		<div className={cn("flex flex-col gap-2", className)} {...props}>
 			<SectionHeader>
 				<div className="flex items-center gap-2">
 					<FlaskConical className="w-4" />
-					<div>Experimental Features</div>
+					<div>{t("settings:sections.experimental")}</div>
 				</div>
 			</SectionHeader>
 
@@ -40,7 +42,7 @@ export const ExperimentalSettings = ({
 					.map((config) => (
 						<ExperimentalFeature
 							key={config[0]}
-							{...config[1]}
+							experimentKey={config[0]}
 							enabled={experiments[EXPERIMENT_IDS[config[0] as keyof typeof EXPERIMENT_IDS]] ?? false}
 							onChange={(enabled) =>
 								setExperimentEnabled(EXPERIMENT_IDS[config[0] as keyof typeof EXPERIMENT_IDS], enabled)

+ 22 - 16
webview-ui/src/components/settings/ModelInfoView.tsx

@@ -1,5 +1,6 @@
 import { useMemo } from "react"
 import { VSCodeLink } from "@vscode/webview-ui-toolkit/react"
+import { useAppTranslation } from "@/i18n/TranslationContext"
 
 import { formatPrice } from "@/utils/formatPrice"
 import { cn } from "@/lib/utils"
@@ -21,59 +22,64 @@ export const ModelInfoView = ({
 	isDescriptionExpanded,
 	setIsDescriptionExpanded,
 }: ModelInfoViewProps) => {
+	const { t } = useAppTranslation()
 	const isGemini = useMemo(() => Object.keys(geminiModels).includes(selectedModelId), [selectedModelId])
 
 	const infoItems = [
 		<ModelInfoSupportsItem
 			isSupported={modelInfo.supportsImages ?? false}
-			supportsLabel="Supports images"
-			doesNotSupportLabel="Does not support images"
+			supportsLabel={t("settings:modelInfo.supportsImages")}
+			doesNotSupportLabel={t("settings:modelInfo.noImages")}
 		/>,
 		<ModelInfoSupportsItem
 			isSupported={modelInfo.supportsComputerUse ?? false}
-			supportsLabel="Supports computer use"
-			doesNotSupportLabel="Does not support computer use"
+			supportsLabel={t("settings:modelInfo.supportsComputerUse")}
+			doesNotSupportLabel={t("settings:modelInfo.noComputerUse")}
 		/>,
 		!isGemini && (
 			<ModelInfoSupportsItem
 				isSupported={modelInfo.supportsPromptCache}
-				supportsLabel="Supports prompt caching"
-				doesNotSupportLabel="Does not support prompt caching"
+				supportsLabel={t("settings:modelInfo.supportsPromptCache")}
+				doesNotSupportLabel={t("settings:modelInfo.noPromptCache")}
 			/>
 		),
 		modelInfo.maxTokens !== undefined && modelInfo.maxTokens > 0 && (
 			<>
-				<span className="font-medium">Max output:</span> {modelInfo.maxTokens?.toLocaleString()} tokens
+				<span className="font-medium">{t("settings:modelInfo.maxOutput")}:</span>{" "}
+				{modelInfo.maxTokens?.toLocaleString()} tokens
 			</>
 		),
 		modelInfo.inputPrice !== undefined && modelInfo.inputPrice > 0 && (
 			<>
-				<span className="font-medium">Input price:</span> {formatPrice(modelInfo.inputPrice)} / 1M tokens
+				<span className="font-medium">{t("settings:modelInfo.inputPrice")}:</span>{" "}
+				{formatPrice(modelInfo.inputPrice)} / 1M tokens
 			</>
 		),
 		modelInfo.outputPrice !== undefined && modelInfo.outputPrice > 0 && (
 			<>
-				<span className="font-medium">Output price:</span> {formatPrice(modelInfo.outputPrice)} / 1M tokens
+				<span className="font-medium">{t("settings:modelInfo.outputPrice")}:</span>{" "}
+				{formatPrice(modelInfo.outputPrice)} / 1M tokens
 			</>
 		),
 		modelInfo.supportsPromptCache && modelInfo.cacheReadsPrice && (
 			<>
-				<span className="font-medium">Cache reads price:</span> {formatPrice(modelInfo.cacheReadsPrice || 0)} /
-				1M tokens
+				<span className="font-medium">{t("settings:modelInfo.cacheReadsPrice")}:</span>{" "}
+				{formatPrice(modelInfo.cacheReadsPrice || 0)} / 1M tokens
 			</>
 		),
 		modelInfo.supportsPromptCache && modelInfo.cacheWritesPrice && (
 			<>
-				<span className="font-medium">Cache writes price:</span> {formatPrice(modelInfo.cacheWritesPrice || 0)}{" "}
-				/ 1M tokens
+				<span className="font-medium">{t("settings:modelInfo.cacheWritesPrice")}:</span>{" "}
+				{formatPrice(modelInfo.cacheWritesPrice || 0)} / 1M tokens
 			</>
 		),
 		isGemini && (
 			<span className="italic">
-				* Free up to {selectedModelId && selectedModelId.includes("flash") ? "15" : "2"} requests per minute.
-				After that, billing depends on prompt size.{" "}
+				{t("settings:modelInfo.gemini.freeRequests", {
+					count: selectedModelId && selectedModelId.includes("flash") ? 15 : 2,
+				})}{" "}
 				<VSCodeLink href="https://ai.google.dev/pricing" className="text-sm">
-					For more info, see pricing details.
+					{t("settings:modelInfo.gemini.pricingDetails")}
 				</VSCodeLink>
 			</span>
 		),

+ 12 - 9
webview-ui/src/components/settings/ModelPicker.tsx

@@ -1,5 +1,6 @@
 import { useMemo, useState, useCallback, useEffect, useRef } from "react"
 import { VSCodeLink } from "@vscode/webview-ui-toolkit/react"
+import { Trans } from "react-i18next"
 
 import { Combobox, ComboboxContent, ComboboxEmpty, ComboboxInput, ComboboxItem } from "@/components/ui/combobox"
 
@@ -100,15 +101,17 @@ export const ModelPicker = ({
 				modelInfo={selectedModelInfo}
 			/>
 			<div className="text-sm text-vscode-descriptionForeground">
-				The extension automatically fetches the latest list of models available on{" "}
-				<VSCodeLink href={serviceUrl} className="text-sm">
-					{serviceName}
-				</VSCodeLink>
-				. If you're unsure which model to choose, Roo Code works best with{" "}
-				<VSCodeLink onClick={() => onSelect(defaultModelId)} className="text-sm">
-					{defaultModelId}.
-				</VSCodeLink>
-				You can also try searching "free" for no-cost options currently available.
+				<Trans
+					i18nKey="settings:modelPicker.automaticFetch"
+					components={{
+						serviceLink: <VSCodeLink href={serviceUrl} className="text-sm" />,
+						defaultModelLink: <VSCodeLink onClick={() => onSelect(defaultModelId)} className="text-sm" />,
+					}}
+					values={{
+						serviceName,
+						defaultModelId,
+					}}
+				/>
 			</div>
 		</>
 	)

+ 11 - 5
webview-ui/src/components/settings/NotificationSettings.tsx

@@ -1,4 +1,5 @@
 import { HTMLAttributes } from "react"
+import { useAppTranslation } from "@/i18n/TranslationContext"
 import { VSCodeCheckbox } from "@vscode/webview-ui-toolkit/react"
 import { Bell } from "lucide-react"
 
@@ -18,12 +19,13 @@ export const NotificationSettings = ({
 	setCachedStateField,
 	...props
 }: NotificationSettingsProps) => {
+	const { t } = useAppTranslation()
 	return (
 		<div {...props}>
 			<SectionHeader>
 				<div className="flex items-center gap-2">
 					<Bell className="w-4" />
-					<div>Notifications</div>
+					<div>{t("settings:sections.notifications")}</div>
 				</div>
 			</SectionHeader>
 
@@ -31,11 +33,12 @@ export const NotificationSettings = ({
 				<div>
 					<VSCodeCheckbox
 						checked={soundEnabled}
-						onChange={(e: any) => setCachedStateField("soundEnabled", e.target.checked)}>
-						<span className="font-medium">Enable sound effects</span>
+						onChange={(e: any) => setCachedStateField("soundEnabled", e.target.checked)}
+						data-testid="sound-enabled-checkbox">
+						<span className="font-medium">{t("settings:notifications.sound.label")}</span>
 					</VSCodeCheckbox>
 					<p className="text-vscode-descriptionForeground text-sm mt-0">
-						When enabled, Roo will play sound effects for notifications and events.
+						{t("settings:notifications.sound.description")}
 					</p>
 					{soundEnabled && (
 						<div
@@ -54,12 +57,15 @@ export const NotificationSettings = ({
 									onChange={(e) => setCachedStateField("soundVolume", parseFloat(e.target.value))}
 									className="h-2 focus:outline-0 w-4/5 accent-vscode-button-background"
 									aria-label="Volume"
+									data-testid="sound-volume-slider"
 								/>
 								<span style={{ minWidth: "35px", textAlign: "left" }}>
 									{((soundVolume ?? 0.5) * 100).toFixed(0)}%
 								</span>
 							</div>
-							<p className="text-vscode-descriptionForeground text-sm mt-1">Volume</p>
+							<p className="text-vscode-descriptionForeground text-sm mt-1">
+								{t("settings:notifications.sound.volumeLabel")}
+							</p>
 						</div>
 					)}
 				</div>

+ 13 - 11
webview-ui/src/components/settings/SectionHeader.tsx

@@ -7,14 +7,16 @@ type SectionHeaderProps = HTMLAttributes<HTMLDivElement> & {
 	description?: string
 }
 
-export const SectionHeader = ({ description, children, className, ...props }: SectionHeaderProps) => (
-	<div
-		className={cn(
-			"sticky top-0 z-10 text-vscode-sideBar-foreground bg-vscode-sideBar-background brightness-90 px-5 py-4",
-			className,
-		)}
-		{...props}>
-		<h4 className="m-0">{children}</h4>
-		{description && <p className="text-vscode-descriptionForeground text-sm mt-2 mb-0">{description}</p>}
-	</div>
-)
+export const SectionHeader = ({ description, children, className, ...props }: SectionHeaderProps) => {
+	return (
+		<div
+			className={cn(
+				"sticky top-0 z-10 text-vscode-sideBar-foreground bg-vscode-sideBar-background brightness-90 px-5 py-4",
+				className,
+			)}
+			{...props}>
+			<h4 className="m-0">{children}</h4>
+			{description && <p className="text-vscode-descriptionForeground text-sm mt-2 mb-0">{description}</p>}
+		</div>
+	)
+}

Некоторые файлы не были показаны из-за большого количества измененных файлов