diff --git a/CHANGELOG.md b/CHANGELOG.md index 8e7a9766160..d2b44282d69 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Roo Code Changelog +## [3.15.3] - 2025-05-02 + +- Terminal: Fix empty command bug +- Terminal: More robust process killing +- Optimize Gemini prompt caching for OpenRouter +- Chat view performance improvements + ## [3.15.2] - 2025-05-02 - Fix terminal performance issues diff --git a/evals/packages/types/src/roo-code-defaults.ts b/evals/packages/types/src/roo-code-defaults.ts index 42d9a1bc9fa..442510976bf 100644 --- a/evals/packages/types/src/roo-code-defaults.ts +++ b/evals/packages/types/src/roo-code-defaults.ts @@ -6,6 +6,8 @@ export const rooCodeDefaults: RooCodeSettings = { lastShownAnnouncementId: "apr-30-2025-3-15", + pinnedApiConfigs: {}, + autoApprovalEnabled: true, alwaysAllowReadOnly: true, alwaysAllowReadOnlyOutsideWorkspace: false, @@ -22,17 +24,43 @@ export const rooCodeDefaults: RooCodeSettings = { allowedCommands: ["*"], browserToolEnabled: false, + browserViewportSize: "900x600", + screenshotQuality: 75, + remoteBrowserEnabled: false, + + ttsEnabled: false, + ttsSpeed: 1, + soundEnabled: false, + soundVolume: 0.5, + + terminalOutputLineLimit: 500, + terminalShellIntegrationTimeout: 30000, + terminalCommandDelay: 0, + terminalPowershellCounter: false, + terminalZshOhMy: true, + terminalZshClearEolMark: true, + terminalZshP10k: false, + terminalZdotdir: true, + terminalCompressProgressBar: true, + terminalShellIntegrationDisabled: true, + + diffEnabled: true, + fuzzyMatchThreshold: 1, enableCheckpoints: false, + rateLimitSeconds: 0, maxOpenTabsContext: 20, maxWorkspaceFiles: 200, showRooIgnoredFiles: true, maxReadFileLine: 500, - terminalShellIntegrationDisabled: true, + language: "en", + telemetrySetting: "enabled", mcpEnabled: false, mode: "code", + + customModes: [], } diff --git a/evals/packages/types/src/roo-code.ts b/evals/packages/types/src/roo-code.ts index b3f69e16788..4318603edc5 100644 --- a/evals/packages/types/src/roo-code.ts +++ b/evals/packages/types/src/roo-code.ts @@ -400,8 +400,6 @@ export const providerSettingsSchema = z.object({ // OpenAI Native openAiNativeApiKey: z.string().optional(), openAiNativeBaseUrl: z.string().optional(), - // XAI - xaiApiKey: z.string().optional(), // Mistral mistralApiKey: z.string().optional(), mistralCodestralUrl: z.string().optional(), diff --git a/locales/ca/README.md b/locales/ca/README.md index 9044ba13592..4bbcfb1e36e 100644 --- a/locales/ca/README.md +++ b/locales/ca/README.md @@ -178,33 +178,32 @@ Ens encanten les contribucions de la comunitat! Comenceu llegint el nostre [CONT Gràcies a tots els nostres col·laboradors que han ajudat a millorar Roo Code! - -| mrubens
mrubens
| saoudrizwan
saoudrizwan
| cte
cte
| samhvw8
samhvw8
| daniel-lxs
daniel-lxs
| a8trejo
a8trejo
| -| :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | -| ColemanRoo
ColemanRoo
| stea9499
stea9499
| joemanley201
joemanley201
| System233
System233
| hannesrudolph
hannesrudolph
| KJ7LNW
KJ7LNW
| -| jquanton
jquanton
| nissa-seru
nissa-seru
| NyxJae
NyxJae
| MuriloFP
MuriloFP
| d-oit
d-oit
| punkpeye
punkpeye
| -| Smartsheet-JB-Brown
Smartsheet-JB-Brown
| monotykamary
monotykamary
| wkordalski
wkordalski
| feifei325
feifei325
| cannuri
cannuri
| lloydchang
lloydchang
| -| vigneshsubbiah16
vigneshsubbiah16
| qdaxb
qdaxb
| Szpadel
Szpadel
| Premshay
Premshay
| sachasayan
sachasayan
| psv2522
psv2522
| -| diarmidmackenzie
diarmidmackenzie
| lupuletic
lupuletic
| elianiva
elianiva
| olweraltuve
olweraltuve
| afshawnlotfi
afshawnlotfi
| pugazhendhi-m
pugazhendhi-m
| -| aheizi
aheizi
| RaySinner
RaySinner
| PeterDaveHello
PeterDaveHello
| nbihan-mediware
nbihan-mediware
| dtrugman
dtrugman
| emshvac
emshvac
| -| kyle-apex
kyle-apex
| pdecat
pdecat
| zhangtony239
zhangtony239
| Lunchb0ne
Lunchb0ne
| arthurauffray
arthurauffray
| upamune
upamune
| -| StevenTCramer
StevenTCramer
| sammcj
sammcj
| p12tic
p12tic
| gtaylor
gtaylor
| aitoroses
aitoroses
| philfung
philfung
| -| ross
ross
| heyseth
heyseth
| taisukeoe
taisukeoe
| eonghk
eonghk
| teddyOOXX
teddyOOXX
| vagadiya
vagadiya
| -| vincentsong
vincentsong
| yongjer
yongjer
| ashktn
ashktn
| franekp
franekp
| yt3trees
yt3trees
| axkirillov
axkirillov
| -| anton-otee
anton-otee
| benzntech
benzntech
| bramburn
bramburn
| snoyiatk
snoyiatk
| GitlyHallows
GitlyHallows
| jcbdev
jcbdev
| -| Chenjiayuan195
Chenjiayuan195
| julionav
julionav
| napter
napter
| SplittyDev
SplittyDev
| mdp
mdp
| nevermorec
nevermorec
| -| mecab
mecab
| olup
olup
| lightrabbit
lightrabbit
| kohii
kohii
| kinandan
kinandan
| jwcraig
jwcraig
| -| shoopapa
shoopapa
| im47cn
im47cn
| hongzio
hongzio
| dqroid
dqroid
| dlab-anton
dlab-anton
| dairui1
dairui1
| -| bannzai
bannzai
| axmo
axmo
| asychin
asychin
| jr
jr
| PretzelVector
PretzelVector
| cdlliuy
cdlliuy
| -| student20880
student20880
| shohei-ihaya
shohei-ihaya
| shaybc
shaybc
| shariqriazz
shariqriazz
| seedlord
seedlord
| samir-nimbly
samir-nimbly
| -| ronyblum
ronyblum
| refactorthis
refactorthis
| pokutuna
pokutuna
| philipnext
philipnext
| oprstchn
oprstchn
| nobu007
nobu007
| -| mosleyit
mosleyit
| moqimoqidea
moqimoqidea
| mlopezr
mlopezr
| Jdo300
Jdo300
| hesara
hesara
| DeXtroTip
DeXtroTip
| -| celestial-vault
celestial-vault
| linegel
linegel
| dbasclpy
dbasclpy
| dleen
dleen
| chadgauth
chadgauth
| bogdan0083
bogdan0083
| -| Atlogit
Atlogit
| atlasgong
atlasgong
| andreastempsch
andreastempsch
| QuinsZouls
QuinsZouls
| alarno
alarno
| adamwlarson
adamwlarson
| -| AMHesch
AMHesch
| amittell
amittell
| Yoshino-Yukitaro
Yoshino-Yukitaro
| Yikai-Liao
Yikai-Liao
| vladstudio
vladstudio
| NamesMT
NamesMT
| -| tmsjngx0
tmsjngx0
| tgfjt
tgfjt
| maekawataiki
maekawataiki
| samsilveira
samsilveira
| mr-ryan-james
mr-ryan-james
| 01Rian
01Rian
| -| Sarke
Sarke
| kvokka
kvokka
| marvijo-code
marvijo-code
| mamertofabian
mamertofabian
| libertyteeth
libertyteeth
| shtse8
shtse8
| - +|mrubens
mrubens
|saoudrizwan
saoudrizwan
|cte
cte
|samhvw8
samhvw8
|daniel-lxs
daniel-lxs
|a8trejo
a8trejo
| +|:---:|:---:|:---:|:---:|:---:|:---:| +|ColemanRoo
ColemanRoo
|stea9499
stea9499
|joemanley201
joemanley201
|System233
System233
|hannesrudolph
hannesrudolph
|KJ7LNW
KJ7LNW
| +|nissa-seru
nissa-seru
|jquanton
jquanton
|NyxJae
NyxJae
|MuriloFP
MuriloFP
|d-oit
d-oit
|punkpeye
punkpeye
| +|Smartsheet-JB-Brown
Smartsheet-JB-Brown
|monotykamary
monotykamary
|wkordalski
wkordalski
|feifei325
feifei325
|lloydchang
lloydchang
|cannuri
cannuri
| +|vigneshsubbiah16
vigneshsubbiah16
|Szpadel
Szpadel
|sachasayan
sachasayan
|qdaxb
qdaxb
|zhangtony239
zhangtony239
|lupuletic
lupuletic
| +|Premshay
Premshay
|psv2522
psv2522
|elianiva
elianiva
|diarmidmackenzie
diarmidmackenzie
|olweraltuve
olweraltuve
|afshawnlotfi
afshawnlotfi
| +|pugazhendhi-m
pugazhendhi-m
|aheizi
aheizi
|RaySinner
RaySinner
|PeterDaveHello
PeterDaveHello
|nbihan-mediware
nbihan-mediware
|dtrugman
dtrugman
| +|emshvac
emshvac
|kyle-apex
kyle-apex
|pdecat
pdecat
|Lunchb0ne
Lunchb0ne
|arthurauffray
arthurauffray
|upamune
upamune
| +|StevenTCramer
StevenTCramer
|sammcj
sammcj
|p12tic
p12tic
|gtaylor
gtaylor
|aitoroses
aitoroses
|anton-otee
anton-otee
| +|philfung
philfung
|ross
ross
|heyseth
heyseth
|taisukeoe
taisukeoe
|eonghk
eonghk
|teddyOOXX
teddyOOXX
| +|vagadiya
vagadiya
|vincentsong
vincentsong
|yongjer
yongjer
|ashktn
ashktn
|franekp
franekp
|yt3trees
yt3trees
| +|benzntech
benzntech
|axkirillov
axkirillov
|bramburn
bramburn
|snoyiatk
snoyiatk
|GitlyHallows
GitlyHallows
|jcbdev
jcbdev
| +|Chenjiayuan195
Chenjiayuan195
|jr
jr
|julionav
julionav
|SplittyDev
SplittyDev
|mdp
mdp
|napter
napter
| +|nevermorec
nevermorec
|mecab
mecab
|olup
olup
|lightrabbit
lightrabbit
|kohii
kohii
|kinandan
kinandan
| +|jwcraig
jwcraig
|shoopapa
shoopapa
|im47cn
im47cn
|hongzio
hongzio
|GOODBOY008
GOODBOY008
|dqroid
dqroid
| +|dlab-anton
dlab-anton
|dairui1
dairui1
|bannzai
bannzai
|axmo
axmo
|asychin
asychin
|PretzelVector
PretzelVector
| +|cdlliuy
cdlliuy
|student20880
student20880
|shohei-ihaya
shohei-ihaya
|shaybc
shaybc
|shariqriazz
shariqriazz
|seedlord
seedlord
| +|samir-nimbly
samir-nimbly
|ronyblum
ronyblum
|refactorthis
refactorthis
|pokutuna
pokutuna
|philipnext
philipnext
|oprstchn
oprstchn
| +|nobu007
nobu007
|mosleyit
mosleyit
|moqimoqidea
moqimoqidea
|mlopezr
mlopezr
|Jdo300
Jdo300
|hesara
hesara
| +|DeXtroTip
DeXtroTip
|celestial-vault
celestial-vault
|linegel
linegel
|dbasclpy
dbasclpy
|dleen
dleen
|chadgauth
chadgauth
| +|olearycrew
olearycrew
|bogdan0083
bogdan0083
|Atlogit
Atlogit
|atlasgong
atlasgong
|andreastempsch
andreastempsch
|QuinsZouls
QuinsZouls
| +|alarno
alarno
|adamwlarson
adamwlarson
|AMHesch
AMHesch
|amittell
amittell
|Yoshino-Yukitaro
Yoshino-Yukitaro
|Yikai-Liao
Yikai-Liao
| +|vladstudio
vladstudio
|NamesMT
NamesMT
|tmsjngx0
tmsjngx0
|tgfjt
tgfjt
|maekawataiki
maekawataiki
|samsilveira
samsilveira
| +|mr-ryan-james
mr-ryan-james
|01Rian
01Rian
|Sarke
Sarke
|kvokka
kvokka
|marvijo-code
marvijo-code
|mamertofabian
mamertofabian
| +|libertyteeth
libertyteeth
|shtse8
shtse8
| | | | | ## Llicència diff --git a/locales/de/README.md b/locales/de/README.md index 25603ace540..19ad5ebb6e1 100644 --- a/locales/de/README.md +++ b/locales/de/README.md @@ -178,33 +178,32 @@ Wir lieben Community-Beiträge! Beginnen Sie mit dem Lesen unserer [CONTRIBUTING Danke an alle unsere Mitwirkenden, die geholfen haben, Roo Code zu verbessern! - -| mrubens
mrubens
| saoudrizwan
saoudrizwan
| cte
cte
| samhvw8
samhvw8
| daniel-lxs
daniel-lxs
| a8trejo
a8trejo
| -| :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | -| ColemanRoo
ColemanRoo
| stea9499
stea9499
| joemanley201
joemanley201
| System233
System233
| hannesrudolph
hannesrudolph
| KJ7LNW
KJ7LNW
| -| jquanton
jquanton
| nissa-seru
nissa-seru
| NyxJae
NyxJae
| MuriloFP
MuriloFP
| d-oit
d-oit
| punkpeye
punkpeye
| -| Smartsheet-JB-Brown
Smartsheet-JB-Brown
| monotykamary
monotykamary
| wkordalski
wkordalski
| feifei325
feifei325
| cannuri
cannuri
| lloydchang
lloydchang
| -| vigneshsubbiah16
vigneshsubbiah16
| qdaxb
qdaxb
| Szpadel
Szpadel
| Premshay
Premshay
| sachasayan
sachasayan
| psv2522
psv2522
| -| diarmidmackenzie
diarmidmackenzie
| lupuletic
lupuletic
| elianiva
elianiva
| olweraltuve
olweraltuve
| afshawnlotfi
afshawnlotfi
| pugazhendhi-m
pugazhendhi-m
| -| aheizi
aheizi
| RaySinner
RaySinner
| PeterDaveHello
PeterDaveHello
| nbihan-mediware
nbihan-mediware
| dtrugman
dtrugman
| emshvac
emshvac
| -| kyle-apex
kyle-apex
| pdecat
pdecat
| zhangtony239
zhangtony239
| Lunchb0ne
Lunchb0ne
| arthurauffray
arthurauffray
| upamune
upamune
| -| StevenTCramer
StevenTCramer
| sammcj
sammcj
| p12tic
p12tic
| gtaylor
gtaylor
| aitoroses
aitoroses
| philfung
philfung
| -| ross
ross
| heyseth
heyseth
| taisukeoe
taisukeoe
| eonghk
eonghk
| teddyOOXX
teddyOOXX
| vagadiya
vagadiya
| -| vincentsong
vincentsong
| yongjer
yongjer
| ashktn
ashktn
| franekp
franekp
| yt3trees
yt3trees
| axkirillov
axkirillov
| -| anton-otee
anton-otee
| benzntech
benzntech
| bramburn
bramburn
| snoyiatk
snoyiatk
| GitlyHallows
GitlyHallows
| jcbdev
jcbdev
| -| Chenjiayuan195
Chenjiayuan195
| julionav
julionav
| napter
napter
| SplittyDev
SplittyDev
| mdp
mdp
| nevermorec
nevermorec
| -| mecab
mecab
| olup
olup
| lightrabbit
lightrabbit
| kohii
kohii
| kinandan
kinandan
| jwcraig
jwcraig
| -| shoopapa
shoopapa
| im47cn
im47cn
| hongzio
hongzio
| dqroid
dqroid
| dlab-anton
dlab-anton
| dairui1
dairui1
| -| bannzai
bannzai
| axmo
axmo
| asychin
asychin
| jr
jr
| PretzelVector
PretzelVector
| cdlliuy
cdlliuy
| -| student20880
student20880
| shohei-ihaya
shohei-ihaya
| shaybc
shaybc
| shariqriazz
shariqriazz
| seedlord
seedlord
| samir-nimbly
samir-nimbly
| -| ronyblum
ronyblum
| refactorthis
refactorthis
| pokutuna
pokutuna
| philipnext
philipnext
| oprstchn
oprstchn
| nobu007
nobu007
| -| mosleyit
mosleyit
| moqimoqidea
moqimoqidea
| mlopezr
mlopezr
| Jdo300
Jdo300
| hesara
hesara
| DeXtroTip
DeXtroTip
| -| celestial-vault
celestial-vault
| linegel
linegel
| dbasclpy
dbasclpy
| dleen
dleen
| chadgauth
chadgauth
| bogdan0083
bogdan0083
| -| Atlogit
Atlogit
| atlasgong
atlasgong
| andreastempsch
andreastempsch
| QuinsZouls
QuinsZouls
| alarno
alarno
| adamwlarson
adamwlarson
| -| AMHesch
AMHesch
| amittell
amittell
| Yoshino-Yukitaro
Yoshino-Yukitaro
| Yikai-Liao
Yikai-Liao
| vladstudio
vladstudio
| NamesMT
NamesMT
| -| tmsjngx0
tmsjngx0
| tgfjt
tgfjt
| maekawataiki
maekawataiki
| samsilveira
samsilveira
| mr-ryan-james
mr-ryan-james
| 01Rian
01Rian
| -| Sarke
Sarke
| kvokka
kvokka
| marvijo-code
marvijo-code
| mamertofabian
mamertofabian
| libertyteeth
libertyteeth
| shtse8
shtse8
| - +|mrubens
mrubens
|saoudrizwan
saoudrizwan
|cte
cte
|samhvw8
samhvw8
|daniel-lxs
daniel-lxs
|a8trejo
a8trejo
| +|:---:|:---:|:---:|:---:|:---:|:---:| +|ColemanRoo
ColemanRoo
|stea9499
stea9499
|joemanley201
joemanley201
|System233
System233
|hannesrudolph
hannesrudolph
|KJ7LNW
KJ7LNW
| +|nissa-seru
nissa-seru
|jquanton
jquanton
|NyxJae
NyxJae
|MuriloFP
MuriloFP
|d-oit
d-oit
|punkpeye
punkpeye
| +|Smartsheet-JB-Brown
Smartsheet-JB-Brown
|monotykamary
monotykamary
|wkordalski
wkordalski
|feifei325
feifei325
|lloydchang
lloydchang
|cannuri
cannuri
| +|vigneshsubbiah16
vigneshsubbiah16
|Szpadel
Szpadel
|sachasayan
sachasayan
|qdaxb
qdaxb
|zhangtony239
zhangtony239
|lupuletic
lupuletic
| +|Premshay
Premshay
|psv2522
psv2522
|elianiva
elianiva
|diarmidmackenzie
diarmidmackenzie
|olweraltuve
olweraltuve
|afshawnlotfi
afshawnlotfi
| +|pugazhendhi-m
pugazhendhi-m
|aheizi
aheizi
|RaySinner
RaySinner
|PeterDaveHello
PeterDaveHello
|nbihan-mediware
nbihan-mediware
|dtrugman
dtrugman
| +|emshvac
emshvac
|kyle-apex
kyle-apex
|pdecat
pdecat
|Lunchb0ne
Lunchb0ne
|arthurauffray
arthurauffray
|upamune
upamune
| +|StevenTCramer
StevenTCramer
|sammcj
sammcj
|p12tic
p12tic
|gtaylor
gtaylor
|aitoroses
aitoroses
|anton-otee
anton-otee
| +|philfung
philfung
|ross
ross
|heyseth
heyseth
|taisukeoe
taisukeoe
|eonghk
eonghk
|teddyOOXX
teddyOOXX
| +|vagadiya
vagadiya
|vincentsong
vincentsong
|yongjer
yongjer
|ashktn
ashktn
|franekp
franekp
|yt3trees
yt3trees
| +|benzntech
benzntech
|axkirillov
axkirillov
|bramburn
bramburn
|snoyiatk
snoyiatk
|GitlyHallows
GitlyHallows
|jcbdev
jcbdev
| +|Chenjiayuan195
Chenjiayuan195
|jr
jr
|julionav
julionav
|SplittyDev
SplittyDev
|mdp
mdp
|napter
napter
| +|nevermorec
nevermorec
|mecab
mecab
|olup
olup
|lightrabbit
lightrabbit
|kohii
kohii
|kinandan
kinandan
| +|jwcraig
jwcraig
|shoopapa
shoopapa
|im47cn
im47cn
|hongzio
hongzio
|GOODBOY008
GOODBOY008
|dqroid
dqroid
| +|dlab-anton
dlab-anton
|dairui1
dairui1
|bannzai
bannzai
|axmo
axmo
|asychin
asychin
|PretzelVector
PretzelVector
| +|cdlliuy
cdlliuy
|student20880
student20880
|shohei-ihaya
shohei-ihaya
|shaybc
shaybc
|shariqriazz
shariqriazz
|seedlord
seedlord
| +|samir-nimbly
samir-nimbly
|ronyblum
ronyblum
|refactorthis
refactorthis
|pokutuna
pokutuna
|philipnext
philipnext
|oprstchn
oprstchn
| +|nobu007
nobu007
|mosleyit
mosleyit
|moqimoqidea
moqimoqidea
|mlopezr
mlopezr
|Jdo300
Jdo300
|hesara
hesara
| +|DeXtroTip
DeXtroTip
|celestial-vault
celestial-vault
|linegel
linegel
|dbasclpy
dbasclpy
|dleen
dleen
|chadgauth
chadgauth
| +|olearycrew
olearycrew
|bogdan0083
bogdan0083
|Atlogit
Atlogit
|atlasgong
atlasgong
|andreastempsch
andreastempsch
|QuinsZouls
QuinsZouls
| +|alarno
alarno
|adamwlarson
adamwlarson
|AMHesch
AMHesch
|amittell
amittell
|Yoshino-Yukitaro
Yoshino-Yukitaro
|Yikai-Liao
Yikai-Liao
| +|vladstudio
vladstudio
|NamesMT
NamesMT
|tmsjngx0
tmsjngx0
|tgfjt
tgfjt
|maekawataiki
maekawataiki
|samsilveira
samsilveira
| +|mr-ryan-james
mr-ryan-james
|01Rian
01Rian
|Sarke
Sarke
|kvokka
kvokka
|marvijo-code
marvijo-code
|mamertofabian
mamertofabian
| +|libertyteeth
libertyteeth
|shtse8
shtse8
| | | | | ## Lizenz diff --git a/locales/es/README.md b/locales/es/README.md index be1aa0edda4..a5d8df2f8e2 100644 --- a/locales/es/README.md +++ b/locales/es/README.md @@ -178,33 +178,32 @@ Usamos [changesets](https://github.com/changesets/changesets) para versionar y p ¡Gracias a todos nuestros colaboradores que han ayudado a mejorar Roo Code! - -| mrubens
mrubens
| saoudrizwan
saoudrizwan
| cte
cte
| samhvw8
samhvw8
| daniel-lxs
daniel-lxs
| a8trejo
a8trejo
| -| :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | -| ColemanRoo
ColemanRoo
| stea9499
stea9499
| joemanley201
joemanley201
| System233
System233
| hannesrudolph
hannesrudolph
| KJ7LNW
KJ7LNW
| -| jquanton
jquanton
| nissa-seru
nissa-seru
| NyxJae
NyxJae
| MuriloFP
MuriloFP
| d-oit
d-oit
| punkpeye
punkpeye
| -| Smartsheet-JB-Brown
Smartsheet-JB-Brown
| monotykamary
monotykamary
| wkordalski
wkordalski
| feifei325
feifei325
| cannuri
cannuri
| lloydchang
lloydchang
| -| vigneshsubbiah16
vigneshsubbiah16
| qdaxb
qdaxb
| Szpadel
Szpadel
| Premshay
Premshay
| sachasayan
sachasayan
| psv2522
psv2522
| -| diarmidmackenzie
diarmidmackenzie
| lupuletic
lupuletic
| elianiva
elianiva
| olweraltuve
olweraltuve
| afshawnlotfi
afshawnlotfi
| pugazhendhi-m
pugazhendhi-m
| -| aheizi
aheizi
| RaySinner
RaySinner
| PeterDaveHello
PeterDaveHello
| nbihan-mediware
nbihan-mediware
| dtrugman
dtrugman
| emshvac
emshvac
| -| kyle-apex
kyle-apex
| pdecat
pdecat
| zhangtony239
zhangtony239
| Lunchb0ne
Lunchb0ne
| arthurauffray
arthurauffray
| upamune
upamune
| -| StevenTCramer
StevenTCramer
| sammcj
sammcj
| p12tic
p12tic
| gtaylor
gtaylor
| aitoroses
aitoroses
| philfung
philfung
| -| ross
ross
| heyseth
heyseth
| taisukeoe
taisukeoe
| eonghk
eonghk
| teddyOOXX
teddyOOXX
| vagadiya
vagadiya
| -| vincentsong
vincentsong
| yongjer
yongjer
| ashktn
ashktn
| franekp
franekp
| yt3trees
yt3trees
| axkirillov
axkirillov
| -| anton-otee
anton-otee
| benzntech
benzntech
| bramburn
bramburn
| snoyiatk
snoyiatk
| GitlyHallows
GitlyHallows
| jcbdev
jcbdev
| -| Chenjiayuan195
Chenjiayuan195
| julionav
julionav
| napter
napter
| SplittyDev
SplittyDev
| mdp
mdp
| nevermorec
nevermorec
| -| mecab
mecab
| olup
olup
| lightrabbit
lightrabbit
| kohii
kohii
| kinandan
kinandan
| jwcraig
jwcraig
| -| shoopapa
shoopapa
| im47cn
im47cn
| hongzio
hongzio
| dqroid
dqroid
| dlab-anton
dlab-anton
| dairui1
dairui1
| -| bannzai
bannzai
| axmo
axmo
| asychin
asychin
| jr
jr
| PretzelVector
PretzelVector
| cdlliuy
cdlliuy
| -| student20880
student20880
| shohei-ihaya
shohei-ihaya
| shaybc
shaybc
| shariqriazz
shariqriazz
| seedlord
seedlord
| samir-nimbly
samir-nimbly
| -| ronyblum
ronyblum
| refactorthis
refactorthis
| pokutuna
pokutuna
| philipnext
philipnext
| oprstchn
oprstchn
| nobu007
nobu007
| -| mosleyit
mosleyit
| moqimoqidea
moqimoqidea
| mlopezr
mlopezr
| Jdo300
Jdo300
| hesara
hesara
| DeXtroTip
DeXtroTip
| -| celestial-vault
celestial-vault
| linegel
linegel
| dbasclpy
dbasclpy
| dleen
dleen
| chadgauth
chadgauth
| bogdan0083
bogdan0083
| -| Atlogit
Atlogit
| atlasgong
atlasgong
| andreastempsch
andreastempsch
| QuinsZouls
QuinsZouls
| alarno
alarno
| adamwlarson
adamwlarson
| -| AMHesch
AMHesch
| amittell
amittell
| Yoshino-Yukitaro
Yoshino-Yukitaro
| Yikai-Liao
Yikai-Liao
| vladstudio
vladstudio
| NamesMT
NamesMT
| -| tmsjngx0
tmsjngx0
| tgfjt
tgfjt
| maekawataiki
maekawataiki
| samsilveira
samsilveira
| mr-ryan-james
mr-ryan-james
| 01Rian
01Rian
| -| Sarke
Sarke
| kvokka
kvokka
| marvijo-code
marvijo-code
| mamertofabian
mamertofabian
| libertyteeth
libertyteeth
| shtse8
shtse8
| - +|mrubens
mrubens
|saoudrizwan
saoudrizwan
|cte
cte
|samhvw8
samhvw8
|daniel-lxs
daniel-lxs
|a8trejo
a8trejo
| +|:---:|:---:|:---:|:---:|:---:|:---:| +|ColemanRoo
ColemanRoo
|stea9499
stea9499
|joemanley201
joemanley201
|System233
System233
|hannesrudolph
hannesrudolph
|KJ7LNW
KJ7LNW
| +|nissa-seru
nissa-seru
|jquanton
jquanton
|NyxJae
NyxJae
|MuriloFP
MuriloFP
|d-oit
d-oit
|punkpeye
punkpeye
| +|Smartsheet-JB-Brown
Smartsheet-JB-Brown
|monotykamary
monotykamary
|wkordalski
wkordalski
|feifei325
feifei325
|lloydchang
lloydchang
|cannuri
cannuri
| +|vigneshsubbiah16
vigneshsubbiah16
|Szpadel
Szpadel
|sachasayan
sachasayan
|qdaxb
qdaxb
|zhangtony239
zhangtony239
|lupuletic
lupuletic
| +|Premshay
Premshay
|psv2522
psv2522
|elianiva
elianiva
|diarmidmackenzie
diarmidmackenzie
|olweraltuve
olweraltuve
|afshawnlotfi
afshawnlotfi
| +|pugazhendhi-m
pugazhendhi-m
|aheizi
aheizi
|RaySinner
RaySinner
|PeterDaveHello
PeterDaveHello
|nbihan-mediware
nbihan-mediware
|dtrugman
dtrugman
| +|emshvac
emshvac
|kyle-apex
kyle-apex
|pdecat
pdecat
|Lunchb0ne
Lunchb0ne
|arthurauffray
arthurauffray
|upamune
upamune
| +|StevenTCramer
StevenTCramer
|sammcj
sammcj
|p12tic
p12tic
|gtaylor
gtaylor
|aitoroses
aitoroses
|anton-otee
anton-otee
| +|philfung
philfung
|ross
ross
|heyseth
heyseth
|taisukeoe
taisukeoe
|eonghk
eonghk
|teddyOOXX
teddyOOXX
| +|vagadiya
vagadiya
|vincentsong
vincentsong
|yongjer
yongjer
|ashktn
ashktn
|franekp
franekp
|yt3trees
yt3trees
| +|benzntech
benzntech
|axkirillov
axkirillov
|bramburn
bramburn
|snoyiatk
snoyiatk
|GitlyHallows
GitlyHallows
|jcbdev
jcbdev
| +|Chenjiayuan195
Chenjiayuan195
|jr
jr
|julionav
julionav
|SplittyDev
SplittyDev
|mdp
mdp
|napter
napter
| +|nevermorec
nevermorec
|mecab
mecab
|olup
olup
|lightrabbit
lightrabbit
|kohii
kohii
|kinandan
kinandan
| +|jwcraig
jwcraig
|shoopapa
shoopapa
|im47cn
im47cn
|hongzio
hongzio
|GOODBOY008
GOODBOY008
|dqroid
dqroid
| +|dlab-anton
dlab-anton
|dairui1
dairui1
|bannzai
bannzai
|axmo
axmo
|asychin
asychin
|PretzelVector
PretzelVector
| +|cdlliuy
cdlliuy
|student20880
student20880
|shohei-ihaya
shohei-ihaya
|shaybc
shaybc
|shariqriazz
shariqriazz
|seedlord
seedlord
| +|samir-nimbly
samir-nimbly
|ronyblum
ronyblum
|refactorthis
refactorthis
|pokutuna
pokutuna
|philipnext
philipnext
|oprstchn
oprstchn
| +|nobu007
nobu007
|mosleyit
mosleyit
|moqimoqidea
moqimoqidea
|mlopezr
mlopezr
|Jdo300
Jdo300
|hesara
hesara
| +|DeXtroTip
DeXtroTip
|celestial-vault
celestial-vault
|linegel
linegel
|dbasclpy
dbasclpy
|dleen
dleen
|chadgauth
chadgauth
| +|olearycrew
olearycrew
|bogdan0083
bogdan0083
|Atlogit
Atlogit
|atlasgong
atlasgong
|andreastempsch
andreastempsch
|QuinsZouls
QuinsZouls
| +|alarno
alarno
|adamwlarson
adamwlarson
|AMHesch
AMHesch
|amittell
amittell
|Yoshino-Yukitaro
Yoshino-Yukitaro
|Yikai-Liao
Yikai-Liao
| +|vladstudio
vladstudio
|NamesMT
NamesMT
|tmsjngx0
tmsjngx0
|tgfjt
tgfjt
|maekawataiki
maekawataiki
|samsilveira
samsilveira
| +|mr-ryan-james
mr-ryan-james
|01Rian
01Rian
|Sarke
Sarke
|kvokka
kvokka
|marvijo-code
marvijo-code
|mamertofabian
mamertofabian
| +|libertyteeth
libertyteeth
|shtse8
shtse8
| | | | | ## Licencia diff --git a/locales/fr/README.md b/locales/fr/README.md index 301fcd75c33..bb5f3862a76 100644 --- a/locales/fr/README.md +++ b/locales/fr/README.md @@ -178,33 +178,32 @@ Nous adorons les contributions de la communauté ! Commencez par lire notre [CON Merci à tous nos contributeurs qui ont aidé à améliorer Roo Code ! - -| mrubens
mrubens
| saoudrizwan
saoudrizwan
| cte
cte
| samhvw8
samhvw8
| daniel-lxs
daniel-lxs
| a8trejo
a8trejo
| -| :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | -| ColemanRoo
ColemanRoo
| stea9499
stea9499
| joemanley201
joemanley201
| System233
System233
| hannesrudolph
hannesrudolph
| KJ7LNW
KJ7LNW
| -| jquanton
jquanton
| nissa-seru
nissa-seru
| NyxJae
NyxJae
| MuriloFP
MuriloFP
| d-oit
d-oit
| punkpeye
punkpeye
| -| Smartsheet-JB-Brown
Smartsheet-JB-Brown
| monotykamary
monotykamary
| wkordalski
wkordalski
| feifei325
feifei325
| cannuri
cannuri
| lloydchang
lloydchang
| -| vigneshsubbiah16
vigneshsubbiah16
| qdaxb
qdaxb
| Szpadel
Szpadel
| Premshay
Premshay
| sachasayan
sachasayan
| psv2522
psv2522
| -| diarmidmackenzie
diarmidmackenzie
| lupuletic
lupuletic
| elianiva
elianiva
| olweraltuve
olweraltuve
| afshawnlotfi
afshawnlotfi
| pugazhendhi-m
pugazhendhi-m
| -| aheizi
aheizi
| RaySinner
RaySinner
| PeterDaveHello
PeterDaveHello
| nbihan-mediware
nbihan-mediware
| dtrugman
dtrugman
| emshvac
emshvac
| -| kyle-apex
kyle-apex
| pdecat
pdecat
| zhangtony239
zhangtony239
| Lunchb0ne
Lunchb0ne
| arthurauffray
arthurauffray
| upamune
upamune
| -| StevenTCramer
StevenTCramer
| sammcj
sammcj
| p12tic
p12tic
| gtaylor
gtaylor
| aitoroses
aitoroses
| philfung
philfung
| -| ross
ross
| heyseth
heyseth
| taisukeoe
taisukeoe
| eonghk
eonghk
| teddyOOXX
teddyOOXX
| vagadiya
vagadiya
| -| vincentsong
vincentsong
| yongjer
yongjer
| ashktn
ashktn
| franekp
franekp
| yt3trees
yt3trees
| axkirillov
axkirillov
| -| anton-otee
anton-otee
| benzntech
benzntech
| bramburn
bramburn
| snoyiatk
snoyiatk
| GitlyHallows
GitlyHallows
| jcbdev
jcbdev
| -| Chenjiayuan195
Chenjiayuan195
| julionav
julionav
| napter
napter
| SplittyDev
SplittyDev
| mdp
mdp
| nevermorec
nevermorec
| -| mecab
mecab
| olup
olup
| lightrabbit
lightrabbit
| kohii
kohii
| kinandan
kinandan
| jwcraig
jwcraig
| -| shoopapa
shoopapa
| im47cn
im47cn
| hongzio
hongzio
| dqroid
dqroid
| dlab-anton
dlab-anton
| dairui1
dairui1
| -| bannzai
bannzai
| axmo
axmo
| asychin
asychin
| jr
jr
| PretzelVector
PretzelVector
| cdlliuy
cdlliuy
| -| student20880
student20880
| shohei-ihaya
shohei-ihaya
| shaybc
shaybc
| shariqriazz
shariqriazz
| seedlord
seedlord
| samir-nimbly
samir-nimbly
| -| ronyblum
ronyblum
| refactorthis
refactorthis
| pokutuna
pokutuna
| philipnext
philipnext
| oprstchn
oprstchn
| nobu007
nobu007
| -| mosleyit
mosleyit
| moqimoqidea
moqimoqidea
| mlopezr
mlopezr
| Jdo300
Jdo300
| hesara
hesara
| DeXtroTip
DeXtroTip
| -| celestial-vault
celestial-vault
| linegel
linegel
| dbasclpy
dbasclpy
| dleen
dleen
| chadgauth
chadgauth
| bogdan0083
bogdan0083
| -| Atlogit
Atlogit
| atlasgong
atlasgong
| andreastempsch
andreastempsch
| QuinsZouls
QuinsZouls
| alarno
alarno
| adamwlarson
adamwlarson
| -| AMHesch
AMHesch
| amittell
amittell
| Yoshino-Yukitaro
Yoshino-Yukitaro
| Yikai-Liao
Yikai-Liao
| vladstudio
vladstudio
| NamesMT
NamesMT
| -| tmsjngx0
tmsjngx0
| tgfjt
tgfjt
| maekawataiki
maekawataiki
| samsilveira
samsilveira
| mr-ryan-james
mr-ryan-james
| 01Rian
01Rian
| -| Sarke
Sarke
| kvokka
kvokka
| marvijo-code
marvijo-code
| mamertofabian
mamertofabian
| libertyteeth
libertyteeth
| shtse8
shtse8
| - +|mrubens
mrubens
|saoudrizwan
saoudrizwan
|cte
cte
|samhvw8
samhvw8
|daniel-lxs
daniel-lxs
|a8trejo
a8trejo
| +|:---:|:---:|:---:|:---:|:---:|:---:| +|ColemanRoo
ColemanRoo
|stea9499
stea9499
|joemanley201
joemanley201
|System233
System233
|hannesrudolph
hannesrudolph
|KJ7LNW
KJ7LNW
| +|nissa-seru
nissa-seru
|jquanton
jquanton
|NyxJae
NyxJae
|MuriloFP
MuriloFP
|d-oit
d-oit
|punkpeye
punkpeye
| +|Smartsheet-JB-Brown
Smartsheet-JB-Brown
|monotykamary
monotykamary
|wkordalski
wkordalski
|feifei325
feifei325
|lloydchang
lloydchang
|cannuri
cannuri
| +|vigneshsubbiah16
vigneshsubbiah16
|Szpadel
Szpadel
|sachasayan
sachasayan
|qdaxb
qdaxb
|zhangtony239
zhangtony239
|lupuletic
lupuletic
| +|Premshay
Premshay
|psv2522
psv2522
|elianiva
elianiva
|diarmidmackenzie
diarmidmackenzie
|olweraltuve
olweraltuve
|afshawnlotfi
afshawnlotfi
| +|pugazhendhi-m
pugazhendhi-m
|aheizi
aheizi
|RaySinner
RaySinner
|PeterDaveHello
PeterDaveHello
|nbihan-mediware
nbihan-mediware
|dtrugman
dtrugman
| +|emshvac
emshvac
|kyle-apex
kyle-apex
|pdecat
pdecat
|Lunchb0ne
Lunchb0ne
|arthurauffray
arthurauffray
|upamune
upamune
| +|StevenTCramer
StevenTCramer
|sammcj
sammcj
|p12tic
p12tic
|gtaylor
gtaylor
|aitoroses
aitoroses
|anton-otee
anton-otee
| +|philfung
philfung
|ross
ross
|heyseth
heyseth
|taisukeoe
taisukeoe
|eonghk
eonghk
|teddyOOXX
teddyOOXX
| +|vagadiya
vagadiya
|vincentsong
vincentsong
|yongjer
yongjer
|ashktn
ashktn
|franekp
franekp
|yt3trees
yt3trees
| +|benzntech
benzntech
|axkirillov
axkirillov
|bramburn
bramburn
|snoyiatk
snoyiatk
|GitlyHallows
GitlyHallows
|jcbdev
jcbdev
| +|Chenjiayuan195
Chenjiayuan195
|jr
jr
|julionav
julionav
|SplittyDev
SplittyDev
|mdp
mdp
|napter
napter
| +|nevermorec
nevermorec
|mecab
mecab
|olup
olup
|lightrabbit
lightrabbit
|kohii
kohii
|kinandan
kinandan
| +|jwcraig
jwcraig
|shoopapa
shoopapa
|im47cn
im47cn
|hongzio
hongzio
|GOODBOY008
GOODBOY008
|dqroid
dqroid
| +|dlab-anton
dlab-anton
|dairui1
dairui1
|bannzai
bannzai
|axmo
axmo
|asychin
asychin
|PretzelVector
PretzelVector
| +|cdlliuy
cdlliuy
|student20880
student20880
|shohei-ihaya
shohei-ihaya
|shaybc
shaybc
|shariqriazz
shariqriazz
|seedlord
seedlord
| +|samir-nimbly
samir-nimbly
|ronyblum
ronyblum
|refactorthis
refactorthis
|pokutuna
pokutuna
|philipnext
philipnext
|oprstchn
oprstchn
| +|nobu007
nobu007
|mosleyit
mosleyit
|moqimoqidea
moqimoqidea
|mlopezr
mlopezr
|Jdo300
Jdo300
|hesara
hesara
| +|DeXtroTip
DeXtroTip
|celestial-vault
celestial-vault
|linegel
linegel
|dbasclpy
dbasclpy
|dleen
dleen
|chadgauth
chadgauth
| +|olearycrew
olearycrew
|bogdan0083
bogdan0083
|Atlogit
Atlogit
|atlasgong
atlasgong
|andreastempsch
andreastempsch
|QuinsZouls
QuinsZouls
| +|alarno
alarno
|adamwlarson
adamwlarson
|AMHesch
AMHesch
|amittell
amittell
|Yoshino-Yukitaro
Yoshino-Yukitaro
|Yikai-Liao
Yikai-Liao
| +|vladstudio
vladstudio
|NamesMT
NamesMT
|tmsjngx0
tmsjngx0
|tgfjt
tgfjt
|maekawataiki
maekawataiki
|samsilveira
samsilveira
| +|mr-ryan-james
mr-ryan-james
|01Rian
01Rian
|Sarke
Sarke
|kvokka
kvokka
|marvijo-code
marvijo-code
|mamertofabian
mamertofabian
| +|libertyteeth
libertyteeth
|shtse8
shtse8
| | | | | ## Licence diff --git a/locales/hi/README.md b/locales/hi/README.md index d159d5e64ef..2d14f74ef90 100644 --- a/locales/hi/README.md +++ b/locales/hi/README.md @@ -178,33 +178,32 @@ code --install-extension bin/roo-cline-.vsix Roo Code को बेहतर बनाने में मदद करने वाले हमारे सभी योगदानकर्ताओं को धन्यवाद! - -| mrubens
mrubens
| saoudrizwan
saoudrizwan
| cte
cte
| samhvw8
samhvw8
| daniel-lxs
daniel-lxs
| a8trejo
a8trejo
| -| :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | -| ColemanRoo
ColemanRoo
| stea9499
stea9499
| joemanley201
joemanley201
| System233
System233
| hannesrudolph
hannesrudolph
| KJ7LNW
KJ7LNW
| -| jquanton
jquanton
| nissa-seru
nissa-seru
| NyxJae
NyxJae
| MuriloFP
MuriloFP
| d-oit
d-oit
| punkpeye
punkpeye
| -| Smartsheet-JB-Brown
Smartsheet-JB-Brown
| monotykamary
monotykamary
| wkordalski
wkordalski
| feifei325
feifei325
| cannuri
cannuri
| lloydchang
lloydchang
| -| vigneshsubbiah16
vigneshsubbiah16
| qdaxb
qdaxb
| Szpadel
Szpadel
| Premshay
Premshay
| sachasayan
sachasayan
| psv2522
psv2522
| -| diarmidmackenzie
diarmidmackenzie
| lupuletic
lupuletic
| elianiva
elianiva
| olweraltuve
olweraltuve
| afshawnlotfi
afshawnlotfi
| pugazhendhi-m
pugazhendhi-m
| -| aheizi
aheizi
| RaySinner
RaySinner
| PeterDaveHello
PeterDaveHello
| nbihan-mediware
nbihan-mediware
| dtrugman
dtrugman
| emshvac
emshvac
| -| kyle-apex
kyle-apex
| pdecat
pdecat
| zhangtony239
zhangtony239
| Lunchb0ne
Lunchb0ne
| arthurauffray
arthurauffray
| upamune
upamune
| -| StevenTCramer
StevenTCramer
| sammcj
sammcj
| p12tic
p12tic
| gtaylor
gtaylor
| aitoroses
aitoroses
| philfung
philfung
| -| ross
ross
| heyseth
heyseth
| taisukeoe
taisukeoe
| eonghk
eonghk
| teddyOOXX
teddyOOXX
| vagadiya
vagadiya
| -| vincentsong
vincentsong
| yongjer
yongjer
| ashktn
ashktn
| franekp
franekp
| yt3trees
yt3trees
| axkirillov
axkirillov
| -| anton-otee
anton-otee
| benzntech
benzntech
| bramburn
bramburn
| snoyiatk
snoyiatk
| GitlyHallows
GitlyHallows
| jcbdev
jcbdev
| -| Chenjiayuan195
Chenjiayuan195
| julionav
julionav
| napter
napter
| SplittyDev
SplittyDev
| mdp
mdp
| nevermorec
nevermorec
| -| mecab
mecab
| olup
olup
| lightrabbit
lightrabbit
| kohii
kohii
| kinandan
kinandan
| jwcraig
jwcraig
| -| shoopapa
shoopapa
| im47cn
im47cn
| hongzio
hongzio
| dqroid
dqroid
| dlab-anton
dlab-anton
| dairui1
dairui1
| -| bannzai
bannzai
| axmo
axmo
| asychin
asychin
| jr
jr
| PretzelVector
PretzelVector
| cdlliuy
cdlliuy
| -| student20880
student20880
| shohei-ihaya
shohei-ihaya
| shaybc
shaybc
| shariqriazz
shariqriazz
| seedlord
seedlord
| samir-nimbly
samir-nimbly
| -| ronyblum
ronyblum
| refactorthis
refactorthis
| pokutuna
pokutuna
| philipnext
philipnext
| oprstchn
oprstchn
| nobu007
nobu007
| -| mosleyit
mosleyit
| moqimoqidea
moqimoqidea
| mlopezr
mlopezr
| Jdo300
Jdo300
| hesara
hesara
| DeXtroTip
DeXtroTip
| -| celestial-vault
celestial-vault
| linegel
linegel
| dbasclpy
dbasclpy
| dleen
dleen
| chadgauth
chadgauth
| bogdan0083
bogdan0083
| -| Atlogit
Atlogit
| atlasgong
atlasgong
| andreastempsch
andreastempsch
| QuinsZouls
QuinsZouls
| alarno
alarno
| adamwlarson
adamwlarson
| -| AMHesch
AMHesch
| amittell
amittell
| Yoshino-Yukitaro
Yoshino-Yukitaro
| Yikai-Liao
Yikai-Liao
| vladstudio
vladstudio
| NamesMT
NamesMT
| -| tmsjngx0
tmsjngx0
| tgfjt
tgfjt
| maekawataiki
maekawataiki
| samsilveira
samsilveira
| mr-ryan-james
mr-ryan-james
| 01Rian
01Rian
| -| Sarke
Sarke
| kvokka
kvokka
| marvijo-code
marvijo-code
| mamertofabian
mamertofabian
| libertyteeth
libertyteeth
| shtse8
shtse8
| - +|mrubens
mrubens
|saoudrizwan
saoudrizwan
|cte
cte
|samhvw8
samhvw8
|daniel-lxs
daniel-lxs
|a8trejo
a8trejo
| +|:---:|:---:|:---:|:---:|:---:|:---:| +|ColemanRoo
ColemanRoo
|stea9499
stea9499
|joemanley201
joemanley201
|System233
System233
|hannesrudolph
hannesrudolph
|KJ7LNW
KJ7LNW
| +|nissa-seru
nissa-seru
|jquanton
jquanton
|NyxJae
NyxJae
|MuriloFP
MuriloFP
|d-oit
d-oit
|punkpeye
punkpeye
| +|Smartsheet-JB-Brown
Smartsheet-JB-Brown
|monotykamary
monotykamary
|wkordalski
wkordalski
|feifei325
feifei325
|lloydchang
lloydchang
|cannuri
cannuri
| +|vigneshsubbiah16
vigneshsubbiah16
|Szpadel
Szpadel
|sachasayan
sachasayan
|qdaxb
qdaxb
|zhangtony239
zhangtony239
|lupuletic
lupuletic
| +|Premshay
Premshay
|psv2522
psv2522
|elianiva
elianiva
|diarmidmackenzie
diarmidmackenzie
|olweraltuve
olweraltuve
|afshawnlotfi
afshawnlotfi
| +|pugazhendhi-m
pugazhendhi-m
|aheizi
aheizi
|RaySinner
RaySinner
|PeterDaveHello
PeterDaveHello
|nbihan-mediware
nbihan-mediware
|dtrugman
dtrugman
| +|emshvac
emshvac
|kyle-apex
kyle-apex
|pdecat
pdecat
|Lunchb0ne
Lunchb0ne
|arthurauffray
arthurauffray
|upamune
upamune
| +|StevenTCramer
StevenTCramer
|sammcj
sammcj
|p12tic
p12tic
|gtaylor
gtaylor
|aitoroses
aitoroses
|anton-otee
anton-otee
| +|philfung
philfung
|ross
ross
|heyseth
heyseth
|taisukeoe
taisukeoe
|eonghk
eonghk
|teddyOOXX
teddyOOXX
| +|vagadiya
vagadiya
|vincentsong
vincentsong
|yongjer
yongjer
|ashktn
ashktn
|franekp
franekp
|yt3trees
yt3trees
| +|benzntech
benzntech
|axkirillov
axkirillov
|bramburn
bramburn
|snoyiatk
snoyiatk
|GitlyHallows
GitlyHallows
|jcbdev
jcbdev
| +|Chenjiayuan195
Chenjiayuan195
|jr
jr
|julionav
julionav
|SplittyDev
SplittyDev
|mdp
mdp
|napter
napter
| +|nevermorec
nevermorec
|mecab
mecab
|olup
olup
|lightrabbit
lightrabbit
|kohii
kohii
|kinandan
kinandan
| +|jwcraig
jwcraig
|shoopapa
shoopapa
|im47cn
im47cn
|hongzio
hongzio
|GOODBOY008
GOODBOY008
|dqroid
dqroid
| +|dlab-anton
dlab-anton
|dairui1
dairui1
|bannzai
bannzai
|axmo
axmo
|asychin
asychin
|PretzelVector
PretzelVector
| +|cdlliuy
cdlliuy
|student20880
student20880
|shohei-ihaya
shohei-ihaya
|shaybc
shaybc
|shariqriazz
shariqriazz
|seedlord
seedlord
| +|samir-nimbly
samir-nimbly
|ronyblum
ronyblum
|refactorthis
refactorthis
|pokutuna
pokutuna
|philipnext
philipnext
|oprstchn
oprstchn
| +|nobu007
nobu007
|mosleyit
mosleyit
|moqimoqidea
moqimoqidea
|mlopezr
mlopezr
|Jdo300
Jdo300
|hesara
hesara
| +|DeXtroTip
DeXtroTip
|celestial-vault
celestial-vault
|linegel
linegel
|dbasclpy
dbasclpy
|dleen
dleen
|chadgauth
chadgauth
| +|olearycrew
olearycrew
|bogdan0083
bogdan0083
|Atlogit
Atlogit
|atlasgong
atlasgong
|andreastempsch
andreastempsch
|QuinsZouls
QuinsZouls
| +|alarno
alarno
|adamwlarson
adamwlarson
|AMHesch
AMHesch
|amittell
amittell
|Yoshino-Yukitaro
Yoshino-Yukitaro
|Yikai-Liao
Yikai-Liao
| +|vladstudio
vladstudio
|NamesMT
NamesMT
|tmsjngx0
tmsjngx0
|tgfjt
tgfjt
|maekawataiki
maekawataiki
|samsilveira
samsilveira
| +|mr-ryan-james
mr-ryan-james
|01Rian
01Rian
|Sarke
Sarke
|kvokka
kvokka
|marvijo-code
marvijo-code
|mamertofabian
mamertofabian
| +|libertyteeth
libertyteeth
|shtse8
shtse8
| | | | | ## लाइसेंस diff --git a/locales/it/README.md b/locales/it/README.md index f0f6cda7869..dbf6fb5e886 100644 --- a/locales/it/README.md +++ b/locales/it/README.md @@ -178,33 +178,32 @@ Amiamo i contributi della community! Inizia leggendo il nostro [CONTRIBUTING.md] Grazie a tutti i nostri contributori che hanno aiutato a migliorare Roo Code! - -| mrubens
mrubens
| saoudrizwan
saoudrizwan
| cte
cte
| samhvw8
samhvw8
| daniel-lxs
daniel-lxs
| a8trejo
a8trejo
| -| :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | -| ColemanRoo
ColemanRoo
| stea9499
stea9499
| joemanley201
joemanley201
| System233
System233
| hannesrudolph
hannesrudolph
| KJ7LNW
KJ7LNW
| -| jquanton
jquanton
| nissa-seru
nissa-seru
| NyxJae
NyxJae
| MuriloFP
MuriloFP
| d-oit
d-oit
| punkpeye
punkpeye
| -| Smartsheet-JB-Brown
Smartsheet-JB-Brown
| monotykamary
monotykamary
| wkordalski
wkordalski
| feifei325
feifei325
| cannuri
cannuri
| lloydchang
lloydchang
| -| vigneshsubbiah16
vigneshsubbiah16
| qdaxb
qdaxb
| Szpadel
Szpadel
| Premshay
Premshay
| sachasayan
sachasayan
| psv2522
psv2522
| -| diarmidmackenzie
diarmidmackenzie
| lupuletic
lupuletic
| elianiva
elianiva
| olweraltuve
olweraltuve
| afshawnlotfi
afshawnlotfi
| pugazhendhi-m
pugazhendhi-m
| -| aheizi
aheizi
| RaySinner
RaySinner
| PeterDaveHello
PeterDaveHello
| nbihan-mediware
nbihan-mediware
| dtrugman
dtrugman
| emshvac
emshvac
| -| kyle-apex
kyle-apex
| pdecat
pdecat
| zhangtony239
zhangtony239
| Lunchb0ne
Lunchb0ne
| arthurauffray
arthurauffray
| upamune
upamune
| -| StevenTCramer
StevenTCramer
| sammcj
sammcj
| p12tic
p12tic
| gtaylor
gtaylor
| aitoroses
aitoroses
| philfung
philfung
| -| ross
ross
| heyseth
heyseth
| taisukeoe
taisukeoe
| eonghk
eonghk
| teddyOOXX
teddyOOXX
| vagadiya
vagadiya
| -| vincentsong
vincentsong
| yongjer
yongjer
| ashktn
ashktn
| franekp
franekp
| yt3trees
yt3trees
| axkirillov
axkirillov
| -| anton-otee
anton-otee
| benzntech
benzntech
| bramburn
bramburn
| snoyiatk
snoyiatk
| GitlyHallows
GitlyHallows
| jcbdev
jcbdev
| -| Chenjiayuan195
Chenjiayuan195
| julionav
julionav
| napter
napter
| SplittyDev
SplittyDev
| mdp
mdp
| nevermorec
nevermorec
| -| mecab
mecab
| olup
olup
| lightrabbit
lightrabbit
| kohii
kohii
| kinandan
kinandan
| jwcraig
jwcraig
| -| shoopapa
shoopapa
| im47cn
im47cn
| hongzio
hongzio
| dqroid
dqroid
| dlab-anton
dlab-anton
| dairui1
dairui1
| -| bannzai
bannzai
| axmo
axmo
| asychin
asychin
| jr
jr
| PretzelVector
PretzelVector
| cdlliuy
cdlliuy
| -| student20880
student20880
| shohei-ihaya
shohei-ihaya
| shaybc
shaybc
| shariqriazz
shariqriazz
| seedlord
seedlord
| samir-nimbly
samir-nimbly
| -| ronyblum
ronyblum
| refactorthis
refactorthis
| pokutuna
pokutuna
| philipnext
philipnext
| oprstchn
oprstchn
| nobu007
nobu007
| -| mosleyit
mosleyit
| moqimoqidea
moqimoqidea
| mlopezr
mlopezr
| Jdo300
Jdo300
| hesara
hesara
| DeXtroTip
DeXtroTip
| -| celestial-vault
celestial-vault
| linegel
linegel
| dbasclpy
dbasclpy
| dleen
dleen
| chadgauth
chadgauth
| bogdan0083
bogdan0083
| -| Atlogit
Atlogit
| atlasgong
atlasgong
| andreastempsch
andreastempsch
| QuinsZouls
QuinsZouls
| alarno
alarno
| adamwlarson
adamwlarson
| -| AMHesch
AMHesch
| amittell
amittell
| Yoshino-Yukitaro
Yoshino-Yukitaro
| Yikai-Liao
Yikai-Liao
| vladstudio
vladstudio
| NamesMT
NamesMT
| -| tmsjngx0
tmsjngx0
| tgfjt
tgfjt
| maekawataiki
maekawataiki
| samsilveira
samsilveira
| mr-ryan-james
mr-ryan-james
| 01Rian
01Rian
| -| Sarke
Sarke
| kvokka
kvokka
| marvijo-code
marvijo-code
| mamertofabian
mamertofabian
| libertyteeth
libertyteeth
| shtse8
shtse8
| - +|mrubens
mrubens
|saoudrizwan
saoudrizwan
|cte
cte
|samhvw8
samhvw8
|daniel-lxs
daniel-lxs
|a8trejo
a8trejo
| +|:---:|:---:|:---:|:---:|:---:|:---:| +|ColemanRoo
ColemanRoo
|stea9499
stea9499
|joemanley201
joemanley201
|System233
System233
|hannesrudolph
hannesrudolph
|KJ7LNW
KJ7LNW
| +|nissa-seru
nissa-seru
|jquanton
jquanton
|NyxJae
NyxJae
|MuriloFP
MuriloFP
|d-oit
d-oit
|punkpeye
punkpeye
| +|Smartsheet-JB-Brown
Smartsheet-JB-Brown
|monotykamary
monotykamary
|wkordalski
wkordalski
|feifei325
feifei325
|lloydchang
lloydchang
|cannuri
cannuri
| +|vigneshsubbiah16
vigneshsubbiah16
|Szpadel
Szpadel
|sachasayan
sachasayan
|qdaxb
qdaxb
|zhangtony239
zhangtony239
|lupuletic
lupuletic
| +|Premshay
Premshay
|psv2522
psv2522
|elianiva
elianiva
|diarmidmackenzie
diarmidmackenzie
|olweraltuve
olweraltuve
|afshawnlotfi
afshawnlotfi
| +|pugazhendhi-m
pugazhendhi-m
|aheizi
aheizi
|RaySinner
RaySinner
|PeterDaveHello
PeterDaveHello
|nbihan-mediware
nbihan-mediware
|dtrugman
dtrugman
| +|emshvac
emshvac
|kyle-apex
kyle-apex
|pdecat
pdecat
|Lunchb0ne
Lunchb0ne
|arthurauffray
arthurauffray
|upamune
upamune
| +|StevenTCramer
StevenTCramer
|sammcj
sammcj
|p12tic
p12tic
|gtaylor
gtaylor
|aitoroses
aitoroses
|anton-otee
anton-otee
| +|philfung
philfung
|ross
ross
|heyseth
heyseth
|taisukeoe
taisukeoe
|eonghk
eonghk
|teddyOOXX
teddyOOXX
| +|vagadiya
vagadiya
|vincentsong
vincentsong
|yongjer
yongjer
|ashktn
ashktn
|franekp
franekp
|yt3trees
yt3trees
| +|benzntech
benzntech
|axkirillov
axkirillov
|bramburn
bramburn
|snoyiatk
snoyiatk
|GitlyHallows
GitlyHallows
|jcbdev
jcbdev
| +|Chenjiayuan195
Chenjiayuan195
|jr
jr
|julionav
julionav
|SplittyDev
SplittyDev
|mdp
mdp
|napter
napter
| +|nevermorec
nevermorec
|mecab
mecab
|olup
olup
|lightrabbit
lightrabbit
|kohii
kohii
|kinandan
kinandan
| +|jwcraig
jwcraig
|shoopapa
shoopapa
|im47cn
im47cn
|hongzio
hongzio
|GOODBOY008
GOODBOY008
|dqroid
dqroid
| +|dlab-anton
dlab-anton
|dairui1
dairui1
|bannzai
bannzai
|axmo
axmo
|asychin
asychin
|PretzelVector
PretzelVector
| +|cdlliuy
cdlliuy
|student20880
student20880
|shohei-ihaya
shohei-ihaya
|shaybc
shaybc
|shariqriazz
shariqriazz
|seedlord
seedlord
| +|samir-nimbly
samir-nimbly
|ronyblum
ronyblum
|refactorthis
refactorthis
|pokutuna
pokutuna
|philipnext
philipnext
|oprstchn
oprstchn
| +|nobu007
nobu007
|mosleyit
mosleyit
|moqimoqidea
moqimoqidea
|mlopezr
mlopezr
|Jdo300
Jdo300
|hesara
hesara
| +|DeXtroTip
DeXtroTip
|celestial-vault
celestial-vault
|linegel
linegel
|dbasclpy
dbasclpy
|dleen
dleen
|chadgauth
chadgauth
| +|olearycrew
olearycrew
|bogdan0083
bogdan0083
|Atlogit
Atlogit
|atlasgong
atlasgong
|andreastempsch
andreastempsch
|QuinsZouls
QuinsZouls
| +|alarno
alarno
|adamwlarson
adamwlarson
|AMHesch
AMHesch
|amittell
amittell
|Yoshino-Yukitaro
Yoshino-Yukitaro
|Yikai-Liao
Yikai-Liao
| +|vladstudio
vladstudio
|NamesMT
NamesMT
|tmsjngx0
tmsjngx0
|tgfjt
tgfjt
|maekawataiki
maekawataiki
|samsilveira
samsilveira
| +|mr-ryan-james
mr-ryan-james
|01Rian
01Rian
|Sarke
Sarke
|kvokka
kvokka
|marvijo-code
marvijo-code
|mamertofabian
mamertofabian
| +|libertyteeth
libertyteeth
|shtse8
shtse8
| | | | | ## Licenza diff --git a/locales/ja/README.md b/locales/ja/README.md index 026a4cbba4e..3700bc271a5 100644 --- a/locales/ja/README.md +++ b/locales/ja/README.md @@ -178,33 +178,32 @@ code --install-extension bin/roo-cline-.vsix Roo Codeの改善に貢献してくれたすべての貢献者に感謝します! - -| mrubens
mrubens
| saoudrizwan
saoudrizwan
| cte
cte
| samhvw8
samhvw8
| daniel-lxs
daniel-lxs
| a8trejo
a8trejo
| -| :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | -| ColemanRoo
ColemanRoo
| stea9499
stea9499
| joemanley201
joemanley201
| System233
System233
| hannesrudolph
hannesrudolph
| KJ7LNW
KJ7LNW
| -| jquanton
jquanton
| nissa-seru
nissa-seru
| NyxJae
NyxJae
| MuriloFP
MuriloFP
| d-oit
d-oit
| punkpeye
punkpeye
| -| Smartsheet-JB-Brown
Smartsheet-JB-Brown
| monotykamary
monotykamary
| wkordalski
wkordalski
| feifei325
feifei325
| cannuri
cannuri
| lloydchang
lloydchang
| -| vigneshsubbiah16
vigneshsubbiah16
| qdaxb
qdaxb
| Szpadel
Szpadel
| Premshay
Premshay
| sachasayan
sachasayan
| psv2522
psv2522
| -| diarmidmackenzie
diarmidmackenzie
| lupuletic
lupuletic
| elianiva
elianiva
| olweraltuve
olweraltuve
| afshawnlotfi
afshawnlotfi
| pugazhendhi-m
pugazhendhi-m
| -| aheizi
aheizi
| RaySinner
RaySinner
| PeterDaveHello
PeterDaveHello
| nbihan-mediware
nbihan-mediware
| dtrugman
dtrugman
| emshvac
emshvac
| -| kyle-apex
kyle-apex
| pdecat
pdecat
| zhangtony239
zhangtony239
| Lunchb0ne
Lunchb0ne
| arthurauffray
arthurauffray
| upamune
upamune
| -| StevenTCramer
StevenTCramer
| sammcj
sammcj
| p12tic
p12tic
| gtaylor
gtaylor
| aitoroses
aitoroses
| philfung
philfung
| -| ross
ross
| heyseth
heyseth
| taisukeoe
taisukeoe
| eonghk
eonghk
| teddyOOXX
teddyOOXX
| vagadiya
vagadiya
| -| vincentsong
vincentsong
| yongjer
yongjer
| ashktn
ashktn
| franekp
franekp
| yt3trees
yt3trees
| axkirillov
axkirillov
| -| anton-otee
anton-otee
| benzntech
benzntech
| bramburn
bramburn
| snoyiatk
snoyiatk
| GitlyHallows
GitlyHallows
| jcbdev
jcbdev
| -| Chenjiayuan195
Chenjiayuan195
| julionav
julionav
| napter
napter
| SplittyDev
SplittyDev
| mdp
mdp
| nevermorec
nevermorec
| -| mecab
mecab
| olup
olup
| lightrabbit
lightrabbit
| kohii
kohii
| kinandan
kinandan
| jwcraig
jwcraig
| -| shoopapa
shoopapa
| im47cn
im47cn
| hongzio
hongzio
| dqroid
dqroid
| dlab-anton
dlab-anton
| dairui1
dairui1
| -| bannzai
bannzai
| axmo
axmo
| asychin
asychin
| jr
jr
| PretzelVector
PretzelVector
| cdlliuy
cdlliuy
| -| student20880
student20880
| shohei-ihaya
shohei-ihaya
| shaybc
shaybc
| shariqriazz
shariqriazz
| seedlord
seedlord
| samir-nimbly
samir-nimbly
| -| ronyblum
ronyblum
| refactorthis
refactorthis
| pokutuna
pokutuna
| philipnext
philipnext
| oprstchn
oprstchn
| nobu007
nobu007
| -| mosleyit
mosleyit
| moqimoqidea
moqimoqidea
| mlopezr
mlopezr
| Jdo300
Jdo300
| hesara
hesara
| DeXtroTip
DeXtroTip
| -| celestial-vault
celestial-vault
| linegel
linegel
| dbasclpy
dbasclpy
| dleen
dleen
| chadgauth
chadgauth
| bogdan0083
bogdan0083
| -| Atlogit
Atlogit
| atlasgong
atlasgong
| andreastempsch
andreastempsch
| QuinsZouls
QuinsZouls
| alarno
alarno
| adamwlarson
adamwlarson
| -| AMHesch
AMHesch
| amittell
amittell
| Yoshino-Yukitaro
Yoshino-Yukitaro
| Yikai-Liao
Yikai-Liao
| vladstudio
vladstudio
| NamesMT
NamesMT
| -| tmsjngx0
tmsjngx0
| tgfjt
tgfjt
| maekawataiki
maekawataiki
| samsilveira
samsilveira
| mr-ryan-james
mr-ryan-james
| 01Rian
01Rian
| -| Sarke
Sarke
| kvokka
kvokka
| marvijo-code
marvijo-code
| mamertofabian
mamertofabian
| libertyteeth
libertyteeth
| shtse8
shtse8
| - +|mrubens
mrubens
|saoudrizwan
saoudrizwan
|cte
cte
|samhvw8
samhvw8
|daniel-lxs
daniel-lxs
|a8trejo
a8trejo
| +|:---:|:---:|:---:|:---:|:---:|:---:| +|ColemanRoo
ColemanRoo
|stea9499
stea9499
|joemanley201
joemanley201
|System233
System233
|hannesrudolph
hannesrudolph
|KJ7LNW
KJ7LNW
| +|nissa-seru
nissa-seru
|jquanton
jquanton
|NyxJae
NyxJae
|MuriloFP
MuriloFP
|d-oit
d-oit
|punkpeye
punkpeye
| +|Smartsheet-JB-Brown
Smartsheet-JB-Brown
|monotykamary
monotykamary
|wkordalski
wkordalski
|feifei325
feifei325
|lloydchang
lloydchang
|cannuri
cannuri
| +|vigneshsubbiah16
vigneshsubbiah16
|Szpadel
Szpadel
|sachasayan
sachasayan
|qdaxb
qdaxb
|zhangtony239
zhangtony239
|lupuletic
lupuletic
| +|Premshay
Premshay
|psv2522
psv2522
|elianiva
elianiva
|diarmidmackenzie
diarmidmackenzie
|olweraltuve
olweraltuve
|afshawnlotfi
afshawnlotfi
| +|pugazhendhi-m
pugazhendhi-m
|aheizi
aheizi
|RaySinner
RaySinner
|PeterDaveHello
PeterDaveHello
|nbihan-mediware
nbihan-mediware
|dtrugman
dtrugman
| +|emshvac
emshvac
|kyle-apex
kyle-apex
|pdecat
pdecat
|Lunchb0ne
Lunchb0ne
|arthurauffray
arthurauffray
|upamune
upamune
| +|StevenTCramer
StevenTCramer
|sammcj
sammcj
|p12tic
p12tic
|gtaylor
gtaylor
|aitoroses
aitoroses
|anton-otee
anton-otee
| +|philfung
philfung
|ross
ross
|heyseth
heyseth
|taisukeoe
taisukeoe
|eonghk
eonghk
|teddyOOXX
teddyOOXX
| +|vagadiya
vagadiya
|vincentsong
vincentsong
|yongjer
yongjer
|ashktn
ashktn
|franekp
franekp
|yt3trees
yt3trees
| +|benzntech
benzntech
|axkirillov
axkirillov
|bramburn
bramburn
|snoyiatk
snoyiatk
|GitlyHallows
GitlyHallows
|jcbdev
jcbdev
| +|Chenjiayuan195
Chenjiayuan195
|jr
jr
|julionav
julionav
|SplittyDev
SplittyDev
|mdp
mdp
|napter
napter
| +|nevermorec
nevermorec
|mecab
mecab
|olup
olup
|lightrabbit
lightrabbit
|kohii
kohii
|kinandan
kinandan
| +|jwcraig
jwcraig
|shoopapa
shoopapa
|im47cn
im47cn
|hongzio
hongzio
|GOODBOY008
GOODBOY008
|dqroid
dqroid
| +|dlab-anton
dlab-anton
|dairui1
dairui1
|bannzai
bannzai
|axmo
axmo
|asychin
asychin
|PretzelVector
PretzelVector
| +|cdlliuy
cdlliuy
|student20880
student20880
|shohei-ihaya
shohei-ihaya
|shaybc
shaybc
|shariqriazz
shariqriazz
|seedlord
seedlord
| +|samir-nimbly
samir-nimbly
|ronyblum
ronyblum
|refactorthis
refactorthis
|pokutuna
pokutuna
|philipnext
philipnext
|oprstchn
oprstchn
| +|nobu007
nobu007
|mosleyit
mosleyit
|moqimoqidea
moqimoqidea
|mlopezr
mlopezr
|Jdo300
Jdo300
|hesara
hesara
| +|DeXtroTip
DeXtroTip
|celestial-vault
celestial-vault
|linegel
linegel
|dbasclpy
dbasclpy
|dleen
dleen
|chadgauth
chadgauth
| +|olearycrew
olearycrew
|bogdan0083
bogdan0083
|Atlogit
Atlogit
|atlasgong
atlasgong
|andreastempsch
andreastempsch
|QuinsZouls
QuinsZouls
| +|alarno
alarno
|adamwlarson
adamwlarson
|AMHesch
AMHesch
|amittell
amittell
|Yoshino-Yukitaro
Yoshino-Yukitaro
|Yikai-Liao
Yikai-Liao
| +|vladstudio
vladstudio
|NamesMT
NamesMT
|tmsjngx0
tmsjngx0
|tgfjt
tgfjt
|maekawataiki
maekawataiki
|samsilveira
samsilveira
| +|mr-ryan-james
mr-ryan-james
|01Rian
01Rian
|Sarke
Sarke
|kvokka
kvokka
|marvijo-code
marvijo-code
|mamertofabian
mamertofabian
| +|libertyteeth
libertyteeth
|shtse8
shtse8
| | | | | ## ライセンス diff --git a/locales/ko/README.md b/locales/ko/README.md index fb814edaa10..29e2358178c 100644 --- a/locales/ko/README.md +++ b/locales/ko/README.md @@ -178,33 +178,32 @@ code --install-extension bin/roo-cline-.vsix Roo Code를 더 좋게 만드는 데 도움을 준 모든 기여자에게 감사드립니다! - -| mrubens
mrubens
| saoudrizwan
saoudrizwan
| cte
cte
| samhvw8
samhvw8
| daniel-lxs
daniel-lxs
| a8trejo
a8trejo
| -| :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | -| ColemanRoo
ColemanRoo
| stea9499
stea9499
| joemanley201
joemanley201
| System233
System233
| hannesrudolph
hannesrudolph
| KJ7LNW
KJ7LNW
| -| jquanton
jquanton
| nissa-seru
nissa-seru
| NyxJae
NyxJae
| MuriloFP
MuriloFP
| d-oit
d-oit
| punkpeye
punkpeye
| -| Smartsheet-JB-Brown
Smartsheet-JB-Brown
| monotykamary
monotykamary
| wkordalski
wkordalski
| feifei325
feifei325
| cannuri
cannuri
| lloydchang
lloydchang
| -| vigneshsubbiah16
vigneshsubbiah16
| qdaxb
qdaxb
| Szpadel
Szpadel
| Premshay
Premshay
| sachasayan
sachasayan
| psv2522
psv2522
| -| diarmidmackenzie
diarmidmackenzie
| lupuletic
lupuletic
| elianiva
elianiva
| olweraltuve
olweraltuve
| afshawnlotfi
afshawnlotfi
| pugazhendhi-m
pugazhendhi-m
| -| aheizi
aheizi
| RaySinner
RaySinner
| PeterDaveHello
PeterDaveHello
| nbihan-mediware
nbihan-mediware
| dtrugman
dtrugman
| emshvac
emshvac
| -| kyle-apex
kyle-apex
| pdecat
pdecat
| zhangtony239
zhangtony239
| Lunchb0ne
Lunchb0ne
| arthurauffray
arthurauffray
| upamune
upamune
| -| StevenTCramer
StevenTCramer
| sammcj
sammcj
| p12tic
p12tic
| gtaylor
gtaylor
| aitoroses
aitoroses
| philfung
philfung
| -| ross
ross
| heyseth
heyseth
| taisukeoe
taisukeoe
| eonghk
eonghk
| teddyOOXX
teddyOOXX
| vagadiya
vagadiya
| -| vincentsong
vincentsong
| yongjer
yongjer
| ashktn
ashktn
| franekp
franekp
| yt3trees
yt3trees
| axkirillov
axkirillov
| -| anton-otee
anton-otee
| benzntech
benzntech
| bramburn
bramburn
| snoyiatk
snoyiatk
| GitlyHallows
GitlyHallows
| jcbdev
jcbdev
| -| Chenjiayuan195
Chenjiayuan195
| julionav
julionav
| napter
napter
| SplittyDev
SplittyDev
| mdp
mdp
| nevermorec
nevermorec
| -| mecab
mecab
| olup
olup
| lightrabbit
lightrabbit
| kohii
kohii
| kinandan
kinandan
| jwcraig
jwcraig
| -| shoopapa
shoopapa
| im47cn
im47cn
| hongzio
hongzio
| dqroid
dqroid
| dlab-anton
dlab-anton
| dairui1
dairui1
| -| bannzai
bannzai
| axmo
axmo
| asychin
asychin
| jr
jr
| PretzelVector
PretzelVector
| cdlliuy
cdlliuy
| -| student20880
student20880
| shohei-ihaya
shohei-ihaya
| shaybc
shaybc
| shariqriazz
shariqriazz
| seedlord
seedlord
| samir-nimbly
samir-nimbly
| -| ronyblum
ronyblum
| refactorthis
refactorthis
| pokutuna
pokutuna
| philipnext
philipnext
| oprstchn
oprstchn
| nobu007
nobu007
| -| mosleyit
mosleyit
| moqimoqidea
moqimoqidea
| mlopezr
mlopezr
| Jdo300
Jdo300
| hesara
hesara
| DeXtroTip
DeXtroTip
| -| celestial-vault
celestial-vault
| linegel
linegel
| dbasclpy
dbasclpy
| dleen
dleen
| chadgauth
chadgauth
| bogdan0083
bogdan0083
| -| Atlogit
Atlogit
| atlasgong
atlasgong
| andreastempsch
andreastempsch
| QuinsZouls
QuinsZouls
| alarno
alarno
| adamwlarson
adamwlarson
| -| AMHesch
AMHesch
| amittell
amittell
| Yoshino-Yukitaro
Yoshino-Yukitaro
| Yikai-Liao
Yikai-Liao
| vladstudio
vladstudio
| NamesMT
NamesMT
| -| tmsjngx0
tmsjngx0
| tgfjt
tgfjt
| maekawataiki
maekawataiki
| samsilveira
samsilveira
| mr-ryan-james
mr-ryan-james
| 01Rian
01Rian
| -| Sarke
Sarke
| kvokka
kvokka
| marvijo-code
marvijo-code
| mamertofabian
mamertofabian
| libertyteeth
libertyteeth
| shtse8
shtse8
| - +|mrubens
mrubens
|saoudrizwan
saoudrizwan
|cte
cte
|samhvw8
samhvw8
|daniel-lxs
daniel-lxs
|a8trejo
a8trejo
| +|:---:|:---:|:---:|:---:|:---:|:---:| +|ColemanRoo
ColemanRoo
|stea9499
stea9499
|joemanley201
joemanley201
|System233
System233
|hannesrudolph
hannesrudolph
|KJ7LNW
KJ7LNW
| +|nissa-seru
nissa-seru
|jquanton
jquanton
|NyxJae
NyxJae
|MuriloFP
MuriloFP
|d-oit
d-oit
|punkpeye
punkpeye
| +|Smartsheet-JB-Brown
Smartsheet-JB-Brown
|monotykamary
monotykamary
|wkordalski
wkordalski
|feifei325
feifei325
|lloydchang
lloydchang
|cannuri
cannuri
| +|vigneshsubbiah16
vigneshsubbiah16
|Szpadel
Szpadel
|sachasayan
sachasayan
|qdaxb
qdaxb
|zhangtony239
zhangtony239
|lupuletic
lupuletic
| +|Premshay
Premshay
|psv2522
psv2522
|elianiva
elianiva
|diarmidmackenzie
diarmidmackenzie
|olweraltuve
olweraltuve
|afshawnlotfi
afshawnlotfi
| +|pugazhendhi-m
pugazhendhi-m
|aheizi
aheizi
|RaySinner
RaySinner
|PeterDaveHello
PeterDaveHello
|nbihan-mediware
nbihan-mediware
|dtrugman
dtrugman
| +|emshvac
emshvac
|kyle-apex
kyle-apex
|pdecat
pdecat
|Lunchb0ne
Lunchb0ne
|arthurauffray
arthurauffray
|upamune
upamune
| +|StevenTCramer
StevenTCramer
|sammcj
sammcj
|p12tic
p12tic
|gtaylor
gtaylor
|aitoroses
aitoroses
|anton-otee
anton-otee
| +|philfung
philfung
|ross
ross
|heyseth
heyseth
|taisukeoe
taisukeoe
|eonghk
eonghk
|teddyOOXX
teddyOOXX
| +|vagadiya
vagadiya
|vincentsong
vincentsong
|yongjer
yongjer
|ashktn
ashktn
|franekp
franekp
|yt3trees
yt3trees
| +|benzntech
benzntech
|axkirillov
axkirillov
|bramburn
bramburn
|snoyiatk
snoyiatk
|GitlyHallows
GitlyHallows
|jcbdev
jcbdev
| +|Chenjiayuan195
Chenjiayuan195
|jr
jr
|julionav
julionav
|SplittyDev
SplittyDev
|mdp
mdp
|napter
napter
| +|nevermorec
nevermorec
|mecab
mecab
|olup
olup
|lightrabbit
lightrabbit
|kohii
kohii
|kinandan
kinandan
| +|jwcraig
jwcraig
|shoopapa
shoopapa
|im47cn
im47cn
|hongzio
hongzio
|GOODBOY008
GOODBOY008
|dqroid
dqroid
| +|dlab-anton
dlab-anton
|dairui1
dairui1
|bannzai
bannzai
|axmo
axmo
|asychin
asychin
|PretzelVector
PretzelVector
| +|cdlliuy
cdlliuy
|student20880
student20880
|shohei-ihaya
shohei-ihaya
|shaybc
shaybc
|shariqriazz
shariqriazz
|seedlord
seedlord
| +|samir-nimbly
samir-nimbly
|ronyblum
ronyblum
|refactorthis
refactorthis
|pokutuna
pokutuna
|philipnext
philipnext
|oprstchn
oprstchn
| +|nobu007
nobu007
|mosleyit
mosleyit
|moqimoqidea
moqimoqidea
|mlopezr
mlopezr
|Jdo300
Jdo300
|hesara
hesara
| +|DeXtroTip
DeXtroTip
|celestial-vault
celestial-vault
|linegel
linegel
|dbasclpy
dbasclpy
|dleen
dleen
|chadgauth
chadgauth
| +|olearycrew
olearycrew
|bogdan0083
bogdan0083
|Atlogit
Atlogit
|atlasgong
atlasgong
|andreastempsch
andreastempsch
|QuinsZouls
QuinsZouls
| +|alarno
alarno
|adamwlarson
adamwlarson
|AMHesch
AMHesch
|amittell
amittell
|Yoshino-Yukitaro
Yoshino-Yukitaro
|Yikai-Liao
Yikai-Liao
| +|vladstudio
vladstudio
|NamesMT
NamesMT
|tmsjngx0
tmsjngx0
|tgfjt
tgfjt
|maekawataiki
maekawataiki
|samsilveira
samsilveira
| +|mr-ryan-james
mr-ryan-james
|01Rian
01Rian
|Sarke
Sarke
|kvokka
kvokka
|marvijo-code
marvijo-code
|mamertofabian
mamertofabian
| +|libertyteeth
libertyteeth
|shtse8
shtse8
| | | | | ## 라이선스 diff --git a/locales/pl/README.md b/locales/pl/README.md index dfa184752d8..08ad175d278 100644 --- a/locales/pl/README.md +++ b/locales/pl/README.md @@ -178,33 +178,32 @@ Kochamy wkład społeczności! Zacznij od przeczytania naszego [CONTRIBUTING.md] Dziękujemy wszystkim naszym współtwórcom, którzy pomogli ulepszyć Roo Code! - -| mrubens
mrubens
| saoudrizwan
saoudrizwan
| cte
cte
| samhvw8
samhvw8
| daniel-lxs
daniel-lxs
| a8trejo
a8trejo
| -| :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | -| ColemanRoo
ColemanRoo
| stea9499
stea9499
| joemanley201
joemanley201
| System233
System233
| hannesrudolph
hannesrudolph
| KJ7LNW
KJ7LNW
| -| jquanton
jquanton
| nissa-seru
nissa-seru
| NyxJae
NyxJae
| MuriloFP
MuriloFP
| d-oit
d-oit
| punkpeye
punkpeye
| -| Smartsheet-JB-Brown
Smartsheet-JB-Brown
| monotykamary
monotykamary
| wkordalski
wkordalski
| feifei325
feifei325
| cannuri
cannuri
| lloydchang
lloydchang
| -| vigneshsubbiah16
vigneshsubbiah16
| qdaxb
qdaxb
| Szpadel
Szpadel
| Premshay
Premshay
| sachasayan
sachasayan
| psv2522
psv2522
| -| diarmidmackenzie
diarmidmackenzie
| lupuletic
lupuletic
| elianiva
elianiva
| olweraltuve
olweraltuve
| afshawnlotfi
afshawnlotfi
| pugazhendhi-m
pugazhendhi-m
| -| aheizi
aheizi
| RaySinner
RaySinner
| PeterDaveHello
PeterDaveHello
| nbihan-mediware
nbihan-mediware
| dtrugman
dtrugman
| emshvac
emshvac
| -| kyle-apex
kyle-apex
| pdecat
pdecat
| zhangtony239
zhangtony239
| Lunchb0ne
Lunchb0ne
| arthurauffray
arthurauffray
| upamune
upamune
| -| StevenTCramer
StevenTCramer
| sammcj
sammcj
| p12tic
p12tic
| gtaylor
gtaylor
| aitoroses
aitoroses
| philfung
philfung
| -| ross
ross
| heyseth
heyseth
| taisukeoe
taisukeoe
| eonghk
eonghk
| teddyOOXX
teddyOOXX
| vagadiya
vagadiya
| -| vincentsong
vincentsong
| yongjer
yongjer
| ashktn
ashktn
| franekp
franekp
| yt3trees
yt3trees
| axkirillov
axkirillov
| -| anton-otee
anton-otee
| benzntech
benzntech
| bramburn
bramburn
| snoyiatk
snoyiatk
| GitlyHallows
GitlyHallows
| jcbdev
jcbdev
| -| Chenjiayuan195
Chenjiayuan195
| julionav
julionav
| napter
napter
| SplittyDev
SplittyDev
| mdp
mdp
| nevermorec
nevermorec
| -| mecab
mecab
| olup
olup
| lightrabbit
lightrabbit
| kohii
kohii
| kinandan
kinandan
| jwcraig
jwcraig
| -| shoopapa
shoopapa
| im47cn
im47cn
| hongzio
hongzio
| dqroid
dqroid
| dlab-anton
dlab-anton
| dairui1
dairui1
| -| bannzai
bannzai
| axmo
axmo
| asychin
asychin
| jr
jr
| PretzelVector
PretzelVector
| cdlliuy
cdlliuy
| -| student20880
student20880
| shohei-ihaya
shohei-ihaya
| shaybc
shaybc
| shariqriazz
shariqriazz
| seedlord
seedlord
| samir-nimbly
samir-nimbly
| -| ronyblum
ronyblum
| refactorthis
refactorthis
| pokutuna
pokutuna
| philipnext
philipnext
| oprstchn
oprstchn
| nobu007
nobu007
| -| mosleyit
mosleyit
| moqimoqidea
moqimoqidea
| mlopezr
mlopezr
| Jdo300
Jdo300
| hesara
hesara
| DeXtroTip
DeXtroTip
| -| celestial-vault
celestial-vault
| linegel
linegel
| dbasclpy
dbasclpy
| dleen
dleen
| chadgauth
chadgauth
| bogdan0083
bogdan0083
| -| Atlogit
Atlogit
| atlasgong
atlasgong
| andreastempsch
andreastempsch
| QuinsZouls
QuinsZouls
| alarno
alarno
| adamwlarson
adamwlarson
| -| AMHesch
AMHesch
| amittell
amittell
| Yoshino-Yukitaro
Yoshino-Yukitaro
| Yikai-Liao
Yikai-Liao
| vladstudio
vladstudio
| NamesMT
NamesMT
| -| tmsjngx0
tmsjngx0
| tgfjt
tgfjt
| maekawataiki
maekawataiki
| samsilveira
samsilveira
| mr-ryan-james
mr-ryan-james
| 01Rian
01Rian
| -| Sarke
Sarke
| kvokka
kvokka
| marvijo-code
marvijo-code
| mamertofabian
mamertofabian
| libertyteeth
libertyteeth
| shtse8
shtse8
| - +|mrubens
mrubens
|saoudrizwan
saoudrizwan
|cte
cte
|samhvw8
samhvw8
|daniel-lxs
daniel-lxs
|a8trejo
a8trejo
| +|:---:|:---:|:---:|:---:|:---:|:---:| +|ColemanRoo
ColemanRoo
|stea9499
stea9499
|joemanley201
joemanley201
|System233
System233
|hannesrudolph
hannesrudolph
|KJ7LNW
KJ7LNW
| +|nissa-seru
nissa-seru
|jquanton
jquanton
|NyxJae
NyxJae
|MuriloFP
MuriloFP
|d-oit
d-oit
|punkpeye
punkpeye
| +|Smartsheet-JB-Brown
Smartsheet-JB-Brown
|monotykamary
monotykamary
|wkordalski
wkordalski
|feifei325
feifei325
|lloydchang
lloydchang
|cannuri
cannuri
| +|vigneshsubbiah16
vigneshsubbiah16
|Szpadel
Szpadel
|sachasayan
sachasayan
|qdaxb
qdaxb
|zhangtony239
zhangtony239
|lupuletic
lupuletic
| +|Premshay
Premshay
|psv2522
psv2522
|elianiva
elianiva
|diarmidmackenzie
diarmidmackenzie
|olweraltuve
olweraltuve
|afshawnlotfi
afshawnlotfi
| +|pugazhendhi-m
pugazhendhi-m
|aheizi
aheizi
|RaySinner
RaySinner
|PeterDaveHello
PeterDaveHello
|nbihan-mediware
nbihan-mediware
|dtrugman
dtrugman
| +|emshvac
emshvac
|kyle-apex
kyle-apex
|pdecat
pdecat
|Lunchb0ne
Lunchb0ne
|arthurauffray
arthurauffray
|upamune
upamune
| +|StevenTCramer
StevenTCramer
|sammcj
sammcj
|p12tic
p12tic
|gtaylor
gtaylor
|aitoroses
aitoroses
|anton-otee
anton-otee
| +|philfung
philfung
|ross
ross
|heyseth
heyseth
|taisukeoe
taisukeoe
|eonghk
eonghk
|teddyOOXX
teddyOOXX
| +|vagadiya
vagadiya
|vincentsong
vincentsong
|yongjer
yongjer
|ashktn
ashktn
|franekp
franekp
|yt3trees
yt3trees
| +|benzntech
benzntech
|axkirillov
axkirillov
|bramburn
bramburn
|snoyiatk
snoyiatk
|GitlyHallows
GitlyHallows
|jcbdev
jcbdev
| +|Chenjiayuan195
Chenjiayuan195
|jr
jr
|julionav
julionav
|SplittyDev
SplittyDev
|mdp
mdp
|napter
napter
| +|nevermorec
nevermorec
|mecab
mecab
|olup
olup
|lightrabbit
lightrabbit
|kohii
kohii
|kinandan
kinandan
| +|jwcraig
jwcraig
|shoopapa
shoopapa
|im47cn
im47cn
|hongzio
hongzio
|GOODBOY008
GOODBOY008
|dqroid
dqroid
| +|dlab-anton
dlab-anton
|dairui1
dairui1
|bannzai
bannzai
|axmo
axmo
|asychin
asychin
|PretzelVector
PretzelVector
| +|cdlliuy
cdlliuy
|student20880
student20880
|shohei-ihaya
shohei-ihaya
|shaybc
shaybc
|shariqriazz
shariqriazz
|seedlord
seedlord
| +|samir-nimbly
samir-nimbly
|ronyblum
ronyblum
|refactorthis
refactorthis
|pokutuna
pokutuna
|philipnext
philipnext
|oprstchn
oprstchn
| +|nobu007
nobu007
|mosleyit
mosleyit
|moqimoqidea
moqimoqidea
|mlopezr
mlopezr
|Jdo300
Jdo300
|hesara
hesara
| +|DeXtroTip
DeXtroTip
|celestial-vault
celestial-vault
|linegel
linegel
|dbasclpy
dbasclpy
|dleen
dleen
|chadgauth
chadgauth
| +|olearycrew
olearycrew
|bogdan0083
bogdan0083
|Atlogit
Atlogit
|atlasgong
atlasgong
|andreastempsch
andreastempsch
|QuinsZouls
QuinsZouls
| +|alarno
alarno
|adamwlarson
adamwlarson
|AMHesch
AMHesch
|amittell
amittell
|Yoshino-Yukitaro
Yoshino-Yukitaro
|Yikai-Liao
Yikai-Liao
| +|vladstudio
vladstudio
|NamesMT
NamesMT
|tmsjngx0
tmsjngx0
|tgfjt
tgfjt
|maekawataiki
maekawataiki
|samsilveira
samsilveira
| +|mr-ryan-james
mr-ryan-james
|01Rian
01Rian
|Sarke
Sarke
|kvokka
kvokka
|marvijo-code
marvijo-code
|mamertofabian
mamertofabian
| +|libertyteeth
libertyteeth
|shtse8
shtse8
| | | | | ## Licencja diff --git a/locales/pt-BR/README.md b/locales/pt-BR/README.md index eb9092e0080..153580a893f 100644 --- a/locales/pt-BR/README.md +++ b/locales/pt-BR/README.md @@ -178,33 +178,32 @@ Adoramos contribuições da comunidade! Comece lendo nosso [CONTRIBUTING.md](CON Obrigado a todos os nossos contribuidores que ajudaram a tornar o Roo Code melhor! - -| mrubens
mrubens
| saoudrizwan
saoudrizwan
| cte
cte
| samhvw8
samhvw8
| daniel-lxs
daniel-lxs
| a8trejo
a8trejo
| -| :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | -| ColemanRoo
ColemanRoo
| stea9499
stea9499
| joemanley201
joemanley201
| System233
System233
| hannesrudolph
hannesrudolph
| KJ7LNW
KJ7LNW
| -| jquanton
jquanton
| nissa-seru
nissa-seru
| NyxJae
NyxJae
| MuriloFP
MuriloFP
| d-oit
d-oit
| punkpeye
punkpeye
| -| Smartsheet-JB-Brown
Smartsheet-JB-Brown
| monotykamary
monotykamary
| wkordalski
wkordalski
| feifei325
feifei325
| cannuri
cannuri
| lloydchang
lloydchang
| -| vigneshsubbiah16
vigneshsubbiah16
| qdaxb
qdaxb
| Szpadel
Szpadel
| Premshay
Premshay
| sachasayan
sachasayan
| psv2522
psv2522
| -| diarmidmackenzie
diarmidmackenzie
| lupuletic
lupuletic
| elianiva
elianiva
| olweraltuve
olweraltuve
| afshawnlotfi
afshawnlotfi
| pugazhendhi-m
pugazhendhi-m
| -| aheizi
aheizi
| RaySinner
RaySinner
| PeterDaveHello
PeterDaveHello
| nbihan-mediware
nbihan-mediware
| dtrugman
dtrugman
| emshvac
emshvac
| -| kyle-apex
kyle-apex
| pdecat
pdecat
| zhangtony239
zhangtony239
| Lunchb0ne
Lunchb0ne
| arthurauffray
arthurauffray
| upamune
upamune
| -| StevenTCramer
StevenTCramer
| sammcj
sammcj
| p12tic
p12tic
| gtaylor
gtaylor
| aitoroses
aitoroses
| philfung
philfung
| -| ross
ross
| heyseth
heyseth
| taisukeoe
taisukeoe
| eonghk
eonghk
| teddyOOXX
teddyOOXX
| vagadiya
vagadiya
| -| vincentsong
vincentsong
| yongjer
yongjer
| ashktn
ashktn
| franekp
franekp
| yt3trees
yt3trees
| axkirillov
axkirillov
| -| anton-otee
anton-otee
| benzntech
benzntech
| bramburn
bramburn
| snoyiatk
snoyiatk
| GitlyHallows
GitlyHallows
| jcbdev
jcbdev
| -| Chenjiayuan195
Chenjiayuan195
| julionav
julionav
| napter
napter
| SplittyDev
SplittyDev
| mdp
mdp
| nevermorec
nevermorec
| -| mecab
mecab
| olup
olup
| lightrabbit
lightrabbit
| kohii
kohii
| kinandan
kinandan
| jwcraig
jwcraig
| -| shoopapa
shoopapa
| im47cn
im47cn
| hongzio
hongzio
| dqroid
dqroid
| dlab-anton
dlab-anton
| dairui1
dairui1
| -| bannzai
bannzai
| axmo
axmo
| asychin
asychin
| jr
jr
| PretzelVector
PretzelVector
| cdlliuy
cdlliuy
| -| student20880
student20880
| shohei-ihaya
shohei-ihaya
| shaybc
shaybc
| shariqriazz
shariqriazz
| seedlord
seedlord
| samir-nimbly
samir-nimbly
| -| ronyblum
ronyblum
| refactorthis
refactorthis
| pokutuna
pokutuna
| philipnext
philipnext
| oprstchn
oprstchn
| nobu007
nobu007
| -| mosleyit
mosleyit
| moqimoqidea
moqimoqidea
| mlopezr
mlopezr
| Jdo300
Jdo300
| hesara
hesara
| DeXtroTip
DeXtroTip
| -| celestial-vault
celestial-vault
| linegel
linegel
| dbasclpy
dbasclpy
| dleen
dleen
| chadgauth
chadgauth
| bogdan0083
bogdan0083
| -| Atlogit
Atlogit
| atlasgong
atlasgong
| andreastempsch
andreastempsch
| QuinsZouls
QuinsZouls
| alarno
alarno
| adamwlarson
adamwlarson
| -| AMHesch
AMHesch
| amittell
amittell
| Yoshino-Yukitaro
Yoshino-Yukitaro
| Yikai-Liao
Yikai-Liao
| vladstudio
vladstudio
| NamesMT
NamesMT
| -| tmsjngx0
tmsjngx0
| tgfjt
tgfjt
| maekawataiki
maekawataiki
| samsilveira
samsilveira
| mr-ryan-james
mr-ryan-james
| 01Rian
01Rian
| -| Sarke
Sarke
| kvokka
kvokka
| marvijo-code
marvijo-code
| mamertofabian
mamertofabian
| libertyteeth
libertyteeth
| shtse8
shtse8
| - +|mrubens
mrubens
|saoudrizwan
saoudrizwan
|cte
cte
|samhvw8
samhvw8
|daniel-lxs
daniel-lxs
|a8trejo
a8trejo
| +|:---:|:---:|:---:|:---:|:---:|:---:| +|ColemanRoo
ColemanRoo
|stea9499
stea9499
|joemanley201
joemanley201
|System233
System233
|hannesrudolph
hannesrudolph
|KJ7LNW
KJ7LNW
| +|nissa-seru
nissa-seru
|jquanton
jquanton
|NyxJae
NyxJae
|MuriloFP
MuriloFP
|d-oit
d-oit
|punkpeye
punkpeye
| +|Smartsheet-JB-Brown
Smartsheet-JB-Brown
|monotykamary
monotykamary
|wkordalski
wkordalski
|feifei325
feifei325
|lloydchang
lloydchang
|cannuri
cannuri
| +|vigneshsubbiah16
vigneshsubbiah16
|Szpadel
Szpadel
|sachasayan
sachasayan
|qdaxb
qdaxb
|zhangtony239
zhangtony239
|lupuletic
lupuletic
| +|Premshay
Premshay
|psv2522
psv2522
|elianiva
elianiva
|diarmidmackenzie
diarmidmackenzie
|olweraltuve
olweraltuve
|afshawnlotfi
afshawnlotfi
| +|pugazhendhi-m
pugazhendhi-m
|aheizi
aheizi
|RaySinner
RaySinner
|PeterDaveHello
PeterDaveHello
|nbihan-mediware
nbihan-mediware
|dtrugman
dtrugman
| +|emshvac
emshvac
|kyle-apex
kyle-apex
|pdecat
pdecat
|Lunchb0ne
Lunchb0ne
|arthurauffray
arthurauffray
|upamune
upamune
| +|StevenTCramer
StevenTCramer
|sammcj
sammcj
|p12tic
p12tic
|gtaylor
gtaylor
|aitoroses
aitoroses
|anton-otee
anton-otee
| +|philfung
philfung
|ross
ross
|heyseth
heyseth
|taisukeoe
taisukeoe
|eonghk
eonghk
|teddyOOXX
teddyOOXX
| +|vagadiya
vagadiya
|vincentsong
vincentsong
|yongjer
yongjer
|ashktn
ashktn
|franekp
franekp
|yt3trees
yt3trees
| +|benzntech
benzntech
|axkirillov
axkirillov
|bramburn
bramburn
|snoyiatk
snoyiatk
|GitlyHallows
GitlyHallows
|jcbdev
jcbdev
| +|Chenjiayuan195
Chenjiayuan195
|jr
jr
|julionav
julionav
|SplittyDev
SplittyDev
|mdp
mdp
|napter
napter
| +|nevermorec
nevermorec
|mecab
mecab
|olup
olup
|lightrabbit
lightrabbit
|kohii
kohii
|kinandan
kinandan
| +|jwcraig
jwcraig
|shoopapa
shoopapa
|im47cn
im47cn
|hongzio
hongzio
|GOODBOY008
GOODBOY008
|dqroid
dqroid
| +|dlab-anton
dlab-anton
|dairui1
dairui1
|bannzai
bannzai
|axmo
axmo
|asychin
asychin
|PretzelVector
PretzelVector
| +|cdlliuy
cdlliuy
|student20880
student20880
|shohei-ihaya
shohei-ihaya
|shaybc
shaybc
|shariqriazz
shariqriazz
|seedlord
seedlord
| +|samir-nimbly
samir-nimbly
|ronyblum
ronyblum
|refactorthis
refactorthis
|pokutuna
pokutuna
|philipnext
philipnext
|oprstchn
oprstchn
| +|nobu007
nobu007
|mosleyit
mosleyit
|moqimoqidea
moqimoqidea
|mlopezr
mlopezr
|Jdo300
Jdo300
|hesara
hesara
| +|DeXtroTip
DeXtroTip
|celestial-vault
celestial-vault
|linegel
linegel
|dbasclpy
dbasclpy
|dleen
dleen
|chadgauth
chadgauth
| +|olearycrew
olearycrew
|bogdan0083
bogdan0083
|Atlogit
Atlogit
|atlasgong
atlasgong
|andreastempsch
andreastempsch
|QuinsZouls
QuinsZouls
| +|alarno
alarno
|adamwlarson
adamwlarson
|AMHesch
AMHesch
|amittell
amittell
|Yoshino-Yukitaro
Yoshino-Yukitaro
|Yikai-Liao
Yikai-Liao
| +|vladstudio
vladstudio
|NamesMT
NamesMT
|tmsjngx0
tmsjngx0
|tgfjt
tgfjt
|maekawataiki
maekawataiki
|samsilveira
samsilveira
| +|mr-ryan-james
mr-ryan-james
|01Rian
01Rian
|Sarke
Sarke
|kvokka
kvokka
|marvijo-code
marvijo-code
|mamertofabian
mamertofabian
| +|libertyteeth
libertyteeth
|shtse8
shtse8
| | | | | ## Licença diff --git a/locales/ru/README.md b/locales/ru/README.md index c97286810ac..d61b395731e 100644 --- a/locales/ru/README.md +++ b/locales/ru/README.md @@ -180,33 +180,32 @@ code --install-extension bin/roo-cline-.vsix Спасибо всем нашим участникам, которые помогли сделать Roo Code лучше! - -| mrubens
mrubens
| saoudrizwan
saoudrizwan
| cte
cte
| samhvw8
samhvw8
| daniel-lxs
daniel-lxs
| a8trejo
a8trejo
| -| :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | -| ColemanRoo
ColemanRoo
| stea9499
stea9499
| joemanley201
joemanley201
| System233
System233
| hannesrudolph
hannesrudolph
| KJ7LNW
KJ7LNW
| -| jquanton
jquanton
| nissa-seru
nissa-seru
| NyxJae
NyxJae
| MuriloFP
MuriloFP
| d-oit
d-oit
| punkpeye
punkpeye
| -| Smartsheet-JB-Brown
Smartsheet-JB-Brown
| monotykamary
monotykamary
| wkordalski
wkordalski
| feifei325
feifei325
| cannuri
cannuri
| lloydchang
lloydchang
| -| vigneshsubbiah16
vigneshsubbiah16
| qdaxb
qdaxb
| Szpadel
Szpadel
| Premshay
Premshay
| sachasayan
sachasayan
| psv2522
psv2522
| -| diarmidmackenzie
diarmidmackenzie
| lupuletic
lupuletic
| elianiva
elianiva
| olweraltuve
olweraltuve
| afshawnlotfi
afshawnlotfi
| pugazhendhi-m
pugazhendhi-m
| -| aheizi
aheizi
| RaySinner
RaySinner
| PeterDaveHello
PeterDaveHello
| nbihan-mediware
nbihan-mediware
| dtrugman
dtrugman
| emshvac
emshvac
| -| kyle-apex
kyle-apex
| pdecat
pdecat
| zhangtony239
zhangtony239
| Lunchb0ne
Lunchb0ne
| arthurauffray
arthurauffray
| upamune
upamune
| -| StevenTCramer
StevenTCramer
| sammcj
sammcj
| p12tic
p12tic
| gtaylor
gtaylor
| aitoroses
aitoroses
| philfung
philfung
| -| ross
ross
| heyseth
heyseth
| taisukeoe
taisukeoe
| eonghk
eonghk
| teddyOOXX
teddyOOXX
| vagadiya
vagadiya
| -| vincentsong
vincentsong
| yongjer
yongjer
| ashktn
ashktn
| franekp
franekp
| yt3trees
yt3trees
| axkirillov
axkirillov
| -| anton-otee
anton-otee
| benzntech
benzntech
| bramburn
bramburn
| snoyiatk
snoyiatk
| GitlyHallows
GitlyHallows
| jcbdev
jcbdev
| -| Chenjiayuan195
Chenjiayuan195
| julionav
julionav
| napter
napter
| SplittyDev
SplittyDev
| mdp
mdp
| nevermorec
nevermorec
| -| mecab
mecab
| olup
olup
| lightrabbit
lightrabbit
| kohii
kohii
| kinandan
kinandan
| jwcraig
jwcraig
| -| shoopapa
shoopapa
| im47cn
im47cn
| hongzio
hongzio
| dqroid
dqroid
| dlab-anton
dlab-anton
| dairui1
dairui1
| -| bannzai
bannzai
| axmo
axmo
| asychin
asychin
| jr
jr
| PretzelVector
PretzelVector
| cdlliuy
cdlliuy
| -| student20880
student20880
| shohei-ihaya
shohei-ihaya
| shaybc
shaybc
| shariqriazz
shariqriazz
| seedlord
seedlord
| samir-nimbly
samir-nimbly
| -| ronyblum
ronyblum
| refactorthis
refactorthis
| pokutuna
pokutuna
| philipnext
philipnext
| oprstchn
oprstchn
| nobu007
nobu007
| -| mosleyit
mosleyit
| moqimoqidea
moqimoqidea
| mlopezr
mlopezr
| Jdo300
Jdo300
| hesara
hesara
| DeXtroTip
DeXtroTip
| -| celestial-vault
celestial-vault
| linegel
linegel
| dbasclpy
dbasclpy
| dleen
dleen
| chadgauth
chadgauth
| bogdan0083
bogdan0083
| -| Atlogit
Atlogit
| atlasgong
atlasgong
| andreastempsch
andreastempsch
| QuinsZouls
QuinsZouls
| alarno
alarno
| adamwlarson
adamwlarson
| -| AMHesch
AMHesch
| amittell
amittell
| Yoshino-Yukitaro
Yoshino-Yukitaro
| Yikai-Liao
Yikai-Liao
| vladstudio
vladstudio
| NamesMT
NamesMT
| -| tmsjngx0
tmsjngx0
| tgfjt
tgfjt
| maekawataiki
maekawataiki
| samsilveira
samsilveira
| mr-ryan-james
mr-ryan-james
| 01Rian
01Rian
| -| Sarke
Sarke
| kvokka
kvokka
| marvijo-code
marvijo-code
| mamertofabian
mamertofabian
| libertyteeth
libertyteeth
| shtse8
shtse8
| - +|mrubens
mrubens
|saoudrizwan
saoudrizwan
|cte
cte
|samhvw8
samhvw8
|daniel-lxs
daniel-lxs
|a8trejo
a8trejo
| +|:---:|:---:|:---:|:---:|:---:|:---:| +|ColemanRoo
ColemanRoo
|stea9499
stea9499
|joemanley201
joemanley201
|System233
System233
|hannesrudolph
hannesrudolph
|KJ7LNW
KJ7LNW
| +|nissa-seru
nissa-seru
|jquanton
jquanton
|NyxJae
NyxJae
|MuriloFP
MuriloFP
|d-oit
d-oit
|punkpeye
punkpeye
| +|Smartsheet-JB-Brown
Smartsheet-JB-Brown
|monotykamary
monotykamary
|wkordalski
wkordalski
|feifei325
feifei325
|lloydchang
lloydchang
|cannuri
cannuri
| +|vigneshsubbiah16
vigneshsubbiah16
|Szpadel
Szpadel
|sachasayan
sachasayan
|qdaxb
qdaxb
|zhangtony239
zhangtony239
|lupuletic
lupuletic
| +|Premshay
Premshay
|psv2522
psv2522
|elianiva
elianiva
|diarmidmackenzie
diarmidmackenzie
|olweraltuve
olweraltuve
|afshawnlotfi
afshawnlotfi
| +|pugazhendhi-m
pugazhendhi-m
|aheizi
aheizi
|RaySinner
RaySinner
|PeterDaveHello
PeterDaveHello
|nbihan-mediware
nbihan-mediware
|dtrugman
dtrugman
| +|emshvac
emshvac
|kyle-apex
kyle-apex
|pdecat
pdecat
|Lunchb0ne
Lunchb0ne
|arthurauffray
arthurauffray
|upamune
upamune
| +|StevenTCramer
StevenTCramer
|sammcj
sammcj
|p12tic
p12tic
|gtaylor
gtaylor
|aitoroses
aitoroses
|anton-otee
anton-otee
| +|philfung
philfung
|ross
ross
|heyseth
heyseth
|taisukeoe
taisukeoe
|eonghk
eonghk
|teddyOOXX
teddyOOXX
| +|vagadiya
vagadiya
|vincentsong
vincentsong
|yongjer
yongjer
|ashktn
ashktn
|franekp
franekp
|yt3trees
yt3trees
| +|benzntech
benzntech
|axkirillov
axkirillov
|bramburn
bramburn
|snoyiatk
snoyiatk
|GitlyHallows
GitlyHallows
|jcbdev
jcbdev
| +|Chenjiayuan195
Chenjiayuan195
|jr
jr
|julionav
julionav
|SplittyDev
SplittyDev
|mdp
mdp
|napter
napter
| +|nevermorec
nevermorec
|mecab
mecab
|olup
olup
|lightrabbit
lightrabbit
|kohii
kohii
|kinandan
kinandan
| +|jwcraig
jwcraig
|shoopapa
shoopapa
|im47cn
im47cn
|hongzio
hongzio
|GOODBOY008
GOODBOY008
|dqroid
dqroid
| +|dlab-anton
dlab-anton
|dairui1
dairui1
|bannzai
bannzai
|axmo
axmo
|asychin
asychin
|PretzelVector
PretzelVector
| +|cdlliuy
cdlliuy
|student20880
student20880
|shohei-ihaya
shohei-ihaya
|shaybc
shaybc
|shariqriazz
shariqriazz
|seedlord
seedlord
| +|samir-nimbly
samir-nimbly
|ronyblum
ronyblum
|refactorthis
refactorthis
|pokutuna
pokutuna
|philipnext
philipnext
|oprstchn
oprstchn
| +|nobu007
nobu007
|mosleyit
mosleyit
|moqimoqidea
moqimoqidea
|mlopezr
mlopezr
|Jdo300
Jdo300
|hesara
hesara
| +|DeXtroTip
DeXtroTip
|celestial-vault
celestial-vault
|linegel
linegel
|dbasclpy
dbasclpy
|dleen
dleen
|chadgauth
chadgauth
| +|olearycrew
olearycrew
|bogdan0083
bogdan0083
|Atlogit
Atlogit
|atlasgong
atlasgong
|andreastempsch
andreastempsch
|QuinsZouls
QuinsZouls
| +|alarno
alarno
|adamwlarson
adamwlarson
|AMHesch
AMHesch
|amittell
amittell
|Yoshino-Yukitaro
Yoshino-Yukitaro
|Yikai-Liao
Yikai-Liao
| +|vladstudio
vladstudio
|NamesMT
NamesMT
|tmsjngx0
tmsjngx0
|tgfjt
tgfjt
|maekawataiki
maekawataiki
|samsilveira
samsilveira
| +|mr-ryan-james
mr-ryan-james
|01Rian
01Rian
|Sarke
Sarke
|kvokka
kvokka
|marvijo-code
marvijo-code
|mamertofabian
mamertofabian
| +|libertyteeth
libertyteeth
|shtse8
shtse8
| | | | | ## Лицензия diff --git a/locales/tr/README.md b/locales/tr/README.md index 66a7d54c6f0..44b5f286187 100644 --- a/locales/tr/README.md +++ b/locales/tr/README.md @@ -178,33 +178,32 @@ Topluluk katkılarını seviyoruz! [CONTRIBUTING.md](CONTRIBUTING.md) dosyasın Roo Code'u daha iyi hale getirmeye yardımcı olan tüm katkıda bulunanlara teşekkür ederiz! - -| mrubens
mrubens
| saoudrizwan
saoudrizwan
| cte
cte
| samhvw8
samhvw8
| daniel-lxs
daniel-lxs
| a8trejo
a8trejo
| -| :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | -| ColemanRoo
ColemanRoo
| stea9499
stea9499
| joemanley201
joemanley201
| System233
System233
| hannesrudolph
hannesrudolph
| KJ7LNW
KJ7LNW
| -| jquanton
jquanton
| nissa-seru
nissa-seru
| NyxJae
NyxJae
| MuriloFP
MuriloFP
| d-oit
d-oit
| punkpeye
punkpeye
| -| Smartsheet-JB-Brown
Smartsheet-JB-Brown
| monotykamary
monotykamary
| wkordalski
wkordalski
| feifei325
feifei325
| cannuri
cannuri
| lloydchang
lloydchang
| -| vigneshsubbiah16
vigneshsubbiah16
| qdaxb
qdaxb
| Szpadel
Szpadel
| Premshay
Premshay
| sachasayan
sachasayan
| psv2522
psv2522
| -| diarmidmackenzie
diarmidmackenzie
| lupuletic
lupuletic
| elianiva
elianiva
| olweraltuve
olweraltuve
| afshawnlotfi
afshawnlotfi
| pugazhendhi-m
pugazhendhi-m
| -| aheizi
aheizi
| RaySinner
RaySinner
| PeterDaveHello
PeterDaveHello
| nbihan-mediware
nbihan-mediware
| dtrugman
dtrugman
| emshvac
emshvac
| -| kyle-apex
kyle-apex
| pdecat
pdecat
| zhangtony239
zhangtony239
| Lunchb0ne
Lunchb0ne
| arthurauffray
arthurauffray
| upamune
upamune
| -| StevenTCramer
StevenTCramer
| sammcj
sammcj
| p12tic
p12tic
| gtaylor
gtaylor
| aitoroses
aitoroses
| philfung
philfung
| -| ross
ross
| heyseth
heyseth
| taisukeoe
taisukeoe
| eonghk
eonghk
| teddyOOXX
teddyOOXX
| vagadiya
vagadiya
| -| vincentsong
vincentsong
| yongjer
yongjer
| ashktn
ashktn
| franekp
franekp
| yt3trees
yt3trees
| axkirillov
axkirillov
| -| anton-otee
anton-otee
| benzntech
benzntech
| bramburn
bramburn
| snoyiatk
snoyiatk
| GitlyHallows
GitlyHallows
| jcbdev
jcbdev
| -| Chenjiayuan195
Chenjiayuan195
| julionav
julionav
| napter
napter
| SplittyDev
SplittyDev
| mdp
mdp
| nevermorec
nevermorec
| -| mecab
mecab
| olup
olup
| lightrabbit
lightrabbit
| kohii
kohii
| kinandan
kinandan
| jwcraig
jwcraig
| -| shoopapa
shoopapa
| im47cn
im47cn
| hongzio
hongzio
| dqroid
dqroid
| dlab-anton
dlab-anton
| dairui1
dairui1
| -| bannzai
bannzai
| axmo
axmo
| asychin
asychin
| jr
jr
| PretzelVector
PretzelVector
| cdlliuy
cdlliuy
| -| student20880
student20880
| shohei-ihaya
shohei-ihaya
| shaybc
shaybc
| shariqriazz
shariqriazz
| seedlord
seedlord
| samir-nimbly
samir-nimbly
| -| ronyblum
ronyblum
| refactorthis
refactorthis
| pokutuna
pokutuna
| philipnext
philipnext
| oprstchn
oprstchn
| nobu007
nobu007
| -| mosleyit
mosleyit
| moqimoqidea
moqimoqidea
| mlopezr
mlopezr
| Jdo300
Jdo300
| hesara
hesara
| DeXtroTip
DeXtroTip
| -| celestial-vault
celestial-vault
| linegel
linegel
| dbasclpy
dbasclpy
| dleen
dleen
| chadgauth
chadgauth
| bogdan0083
bogdan0083
| -| Atlogit
Atlogit
| atlasgong
atlasgong
| andreastempsch
andreastempsch
| QuinsZouls
QuinsZouls
| alarno
alarno
| adamwlarson
adamwlarson
| -| AMHesch
AMHesch
| amittell
amittell
| Yoshino-Yukitaro
Yoshino-Yukitaro
| Yikai-Liao
Yikai-Liao
| vladstudio
vladstudio
| NamesMT
NamesMT
| -| tmsjngx0
tmsjngx0
| tgfjt
tgfjt
| maekawataiki
maekawataiki
| samsilveira
samsilveira
| mr-ryan-james
mr-ryan-james
| 01Rian
01Rian
| -| Sarke
Sarke
| kvokka
kvokka
| marvijo-code
marvijo-code
| mamertofabian
mamertofabian
| libertyteeth
libertyteeth
| shtse8
shtse8
| - +|mrubens
mrubens
|saoudrizwan
saoudrizwan
|cte
cte
|samhvw8
samhvw8
|daniel-lxs
daniel-lxs
|a8trejo
a8trejo
| +|:---:|:---:|:---:|:---:|:---:|:---:| +|ColemanRoo
ColemanRoo
|stea9499
stea9499
|joemanley201
joemanley201
|System233
System233
|hannesrudolph
hannesrudolph
|KJ7LNW
KJ7LNW
| +|nissa-seru
nissa-seru
|jquanton
jquanton
|NyxJae
NyxJae
|MuriloFP
MuriloFP
|d-oit
d-oit
|punkpeye
punkpeye
| +|Smartsheet-JB-Brown
Smartsheet-JB-Brown
|monotykamary
monotykamary
|wkordalski
wkordalski
|feifei325
feifei325
|lloydchang
lloydchang
|cannuri
cannuri
| +|vigneshsubbiah16
vigneshsubbiah16
|Szpadel
Szpadel
|sachasayan
sachasayan
|qdaxb
qdaxb
|zhangtony239
zhangtony239
|lupuletic
lupuletic
| +|Premshay
Premshay
|psv2522
psv2522
|elianiva
elianiva
|diarmidmackenzie
diarmidmackenzie
|olweraltuve
olweraltuve
|afshawnlotfi
afshawnlotfi
| +|pugazhendhi-m
pugazhendhi-m
|aheizi
aheizi
|RaySinner
RaySinner
|PeterDaveHello
PeterDaveHello
|nbihan-mediware
nbihan-mediware
|dtrugman
dtrugman
| +|emshvac
emshvac
|kyle-apex
kyle-apex
|pdecat
pdecat
|Lunchb0ne
Lunchb0ne
|arthurauffray
arthurauffray
|upamune
upamune
| +|StevenTCramer
StevenTCramer
|sammcj
sammcj
|p12tic
p12tic
|gtaylor
gtaylor
|aitoroses
aitoroses
|anton-otee
anton-otee
| +|philfung
philfung
|ross
ross
|heyseth
heyseth
|taisukeoe
taisukeoe
|eonghk
eonghk
|teddyOOXX
teddyOOXX
| +|vagadiya
vagadiya
|vincentsong
vincentsong
|yongjer
yongjer
|ashktn
ashktn
|franekp
franekp
|yt3trees
yt3trees
| +|benzntech
benzntech
|axkirillov
axkirillov
|bramburn
bramburn
|snoyiatk
snoyiatk
|GitlyHallows
GitlyHallows
|jcbdev
jcbdev
| +|Chenjiayuan195
Chenjiayuan195
|jr
jr
|julionav
julionav
|SplittyDev
SplittyDev
|mdp
mdp
|napter
napter
| +|nevermorec
nevermorec
|mecab
mecab
|olup
olup
|lightrabbit
lightrabbit
|kohii
kohii
|kinandan
kinandan
| +|jwcraig
jwcraig
|shoopapa
shoopapa
|im47cn
im47cn
|hongzio
hongzio
|GOODBOY008
GOODBOY008
|dqroid
dqroid
| +|dlab-anton
dlab-anton
|dairui1
dairui1
|bannzai
bannzai
|axmo
axmo
|asychin
asychin
|PretzelVector
PretzelVector
| +|cdlliuy
cdlliuy
|student20880
student20880
|shohei-ihaya
shohei-ihaya
|shaybc
shaybc
|shariqriazz
shariqriazz
|seedlord
seedlord
| +|samir-nimbly
samir-nimbly
|ronyblum
ronyblum
|refactorthis
refactorthis
|pokutuna
pokutuna
|philipnext
philipnext
|oprstchn
oprstchn
| +|nobu007
nobu007
|mosleyit
mosleyit
|moqimoqidea
moqimoqidea
|mlopezr
mlopezr
|Jdo300
Jdo300
|hesara
hesara
| +|DeXtroTip
DeXtroTip
|celestial-vault
celestial-vault
|linegel
linegel
|dbasclpy
dbasclpy
|dleen
dleen
|chadgauth
chadgauth
| +|olearycrew
olearycrew
|bogdan0083
bogdan0083
|Atlogit
Atlogit
|atlasgong
atlasgong
|andreastempsch
andreastempsch
|QuinsZouls
QuinsZouls
| +|alarno
alarno
|adamwlarson
adamwlarson
|AMHesch
AMHesch
|amittell
amittell
|Yoshino-Yukitaro
Yoshino-Yukitaro
|Yikai-Liao
Yikai-Liao
| +|vladstudio
vladstudio
|NamesMT
NamesMT
|tmsjngx0
tmsjngx0
|tgfjt
tgfjt
|maekawataiki
maekawataiki
|samsilveira
samsilveira
| +|mr-ryan-james
mr-ryan-james
|01Rian
01Rian
|Sarke
Sarke
|kvokka
kvokka
|marvijo-code
marvijo-code
|mamertofabian
mamertofabian
| +|libertyteeth
libertyteeth
|shtse8
shtse8
| | | | | ## Lisans diff --git a/locales/vi/README.md b/locales/vi/README.md index 1cef868b18e..5a63bd65348 100644 --- a/locales/vi/README.md +++ b/locales/vi/README.md @@ -178,33 +178,32 @@ Chúng tôi rất hoan nghênh đóng góp từ cộng đồng! Bắt đầu b Cảm ơn tất cả những người đóng góp đã giúp cải thiện Roo Code! - -| mrubens
mrubens
| saoudrizwan
saoudrizwan
| cte
cte
| samhvw8
samhvw8
| daniel-lxs
daniel-lxs
| a8trejo
a8trejo
| -| :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | -| ColemanRoo
ColemanRoo
| stea9499
stea9499
| joemanley201
joemanley201
| System233
System233
| hannesrudolph
hannesrudolph
| KJ7LNW
KJ7LNW
| -| jquanton
jquanton
| nissa-seru
nissa-seru
| NyxJae
NyxJae
| MuriloFP
MuriloFP
| d-oit
d-oit
| punkpeye
punkpeye
| -| Smartsheet-JB-Brown
Smartsheet-JB-Brown
| monotykamary
monotykamary
| wkordalski
wkordalski
| feifei325
feifei325
| cannuri
cannuri
| lloydchang
lloydchang
| -| vigneshsubbiah16
vigneshsubbiah16
| qdaxb
qdaxb
| Szpadel
Szpadel
| Premshay
Premshay
| sachasayan
sachasayan
| psv2522
psv2522
| -| diarmidmackenzie
diarmidmackenzie
| lupuletic
lupuletic
| elianiva
elianiva
| olweraltuve
olweraltuve
| afshawnlotfi
afshawnlotfi
| pugazhendhi-m
pugazhendhi-m
| -| aheizi
aheizi
| RaySinner
RaySinner
| PeterDaveHello
PeterDaveHello
| nbihan-mediware
nbihan-mediware
| dtrugman
dtrugman
| emshvac
emshvac
| -| kyle-apex
kyle-apex
| pdecat
pdecat
| zhangtony239
zhangtony239
| Lunchb0ne
Lunchb0ne
| arthurauffray
arthurauffray
| upamune
upamune
| -| StevenTCramer
StevenTCramer
| sammcj
sammcj
| p12tic
p12tic
| gtaylor
gtaylor
| aitoroses
aitoroses
| philfung
philfung
| -| ross
ross
| heyseth
heyseth
| taisukeoe
taisukeoe
| eonghk
eonghk
| teddyOOXX
teddyOOXX
| vagadiya
vagadiya
| -| vincentsong
vincentsong
| yongjer
yongjer
| ashktn
ashktn
| franekp
franekp
| yt3trees
yt3trees
| axkirillov
axkirillov
| -| anton-otee
anton-otee
| benzntech
benzntech
| bramburn
bramburn
| snoyiatk
snoyiatk
| GitlyHallows
GitlyHallows
| jcbdev
jcbdev
| -| Chenjiayuan195
Chenjiayuan195
| julionav
julionav
| napter
napter
| SplittyDev
SplittyDev
| mdp
mdp
| nevermorec
nevermorec
| -| mecab
mecab
| olup
olup
| lightrabbit
lightrabbit
| kohii
kohii
| kinandan
kinandan
| jwcraig
jwcraig
| -| shoopapa
shoopapa
| im47cn
im47cn
| hongzio
hongzio
| dqroid
dqroid
| dlab-anton
dlab-anton
| dairui1
dairui1
| -| bannzai
bannzai
| axmo
axmo
| asychin
asychin
| jr
jr
| PretzelVector
PretzelVector
| cdlliuy
cdlliuy
| -| student20880
student20880
| shohei-ihaya
shohei-ihaya
| shaybc
shaybc
| shariqriazz
shariqriazz
| seedlord
seedlord
| samir-nimbly
samir-nimbly
| -| ronyblum
ronyblum
| refactorthis
refactorthis
| pokutuna
pokutuna
| philipnext
philipnext
| oprstchn
oprstchn
| nobu007
nobu007
| -| mosleyit
mosleyit
| moqimoqidea
moqimoqidea
| mlopezr
mlopezr
| Jdo300
Jdo300
| hesara
hesara
| DeXtroTip
DeXtroTip
| -| celestial-vault
celestial-vault
| linegel
linegel
| dbasclpy
dbasclpy
| dleen
dleen
| chadgauth
chadgauth
| bogdan0083
bogdan0083
| -| Atlogit
Atlogit
| atlasgong
atlasgong
| andreastempsch
andreastempsch
| QuinsZouls
QuinsZouls
| alarno
alarno
| adamwlarson
adamwlarson
| -| AMHesch
AMHesch
| amittell
amittell
| Yoshino-Yukitaro
Yoshino-Yukitaro
| Yikai-Liao
Yikai-Liao
| vladstudio
vladstudio
| NamesMT
NamesMT
| -| tmsjngx0
tmsjngx0
| tgfjt
tgfjt
| maekawataiki
maekawataiki
| samsilveira
samsilveira
| mr-ryan-james
mr-ryan-james
| 01Rian
01Rian
| -| Sarke
Sarke
| kvokka
kvokka
| marvijo-code
marvijo-code
| mamertofabian
mamertofabian
| libertyteeth
libertyteeth
| shtse8
shtse8
| - +|mrubens
mrubens
|saoudrizwan
saoudrizwan
|cte
cte
|samhvw8
samhvw8
|daniel-lxs
daniel-lxs
|a8trejo
a8trejo
| +|:---:|:---:|:---:|:---:|:---:|:---:| +|ColemanRoo
ColemanRoo
|stea9499
stea9499
|joemanley201
joemanley201
|System233
System233
|hannesrudolph
hannesrudolph
|KJ7LNW
KJ7LNW
| +|nissa-seru
nissa-seru
|jquanton
jquanton
|NyxJae
NyxJae
|MuriloFP
MuriloFP
|d-oit
d-oit
|punkpeye
punkpeye
| +|Smartsheet-JB-Brown
Smartsheet-JB-Brown
|monotykamary
monotykamary
|wkordalski
wkordalski
|feifei325
feifei325
|lloydchang
lloydchang
|cannuri
cannuri
| +|vigneshsubbiah16
vigneshsubbiah16
|Szpadel
Szpadel
|sachasayan
sachasayan
|qdaxb
qdaxb
|zhangtony239
zhangtony239
|lupuletic
lupuletic
| +|Premshay
Premshay
|psv2522
psv2522
|elianiva
elianiva
|diarmidmackenzie
diarmidmackenzie
|olweraltuve
olweraltuve
|afshawnlotfi
afshawnlotfi
| +|pugazhendhi-m
pugazhendhi-m
|aheizi
aheizi
|RaySinner
RaySinner
|PeterDaveHello
PeterDaveHello
|nbihan-mediware
nbihan-mediware
|dtrugman
dtrugman
| +|emshvac
emshvac
|kyle-apex
kyle-apex
|pdecat
pdecat
|Lunchb0ne
Lunchb0ne
|arthurauffray
arthurauffray
|upamune
upamune
| +|StevenTCramer
StevenTCramer
|sammcj
sammcj
|p12tic
p12tic
|gtaylor
gtaylor
|aitoroses
aitoroses
|anton-otee
anton-otee
| +|philfung
philfung
|ross
ross
|heyseth
heyseth
|taisukeoe
taisukeoe
|eonghk
eonghk
|teddyOOXX
teddyOOXX
| +|vagadiya
vagadiya
|vincentsong
vincentsong
|yongjer
yongjer
|ashktn
ashktn
|franekp
franekp
|yt3trees
yt3trees
| +|benzntech
benzntech
|axkirillov
axkirillov
|bramburn
bramburn
|snoyiatk
snoyiatk
|GitlyHallows
GitlyHallows
|jcbdev
jcbdev
| +|Chenjiayuan195
Chenjiayuan195
|jr
jr
|julionav
julionav
|SplittyDev
SplittyDev
|mdp
mdp
|napter
napter
| +|nevermorec
nevermorec
|mecab
mecab
|olup
olup
|lightrabbit
lightrabbit
|kohii
kohii
|kinandan
kinandan
| +|jwcraig
jwcraig
|shoopapa
shoopapa
|im47cn
im47cn
|hongzio
hongzio
|GOODBOY008
GOODBOY008
|dqroid
dqroid
| +|dlab-anton
dlab-anton
|dairui1
dairui1
|bannzai
bannzai
|axmo
axmo
|asychin
asychin
|PretzelVector
PretzelVector
| +|cdlliuy
cdlliuy
|student20880
student20880
|shohei-ihaya
shohei-ihaya
|shaybc
shaybc
|shariqriazz
shariqriazz
|seedlord
seedlord
| +|samir-nimbly
samir-nimbly
|ronyblum
ronyblum
|refactorthis
refactorthis
|pokutuna
pokutuna
|philipnext
philipnext
|oprstchn
oprstchn
| +|nobu007
nobu007
|mosleyit
mosleyit
|moqimoqidea
moqimoqidea
|mlopezr
mlopezr
|Jdo300
Jdo300
|hesara
hesara
| +|DeXtroTip
DeXtroTip
|celestial-vault
celestial-vault
|linegel
linegel
|dbasclpy
dbasclpy
|dleen
dleen
|chadgauth
chadgauth
| +|olearycrew
olearycrew
|bogdan0083
bogdan0083
|Atlogit
Atlogit
|atlasgong
atlasgong
|andreastempsch
andreastempsch
|QuinsZouls
QuinsZouls
| +|alarno
alarno
|adamwlarson
adamwlarson
|AMHesch
AMHesch
|amittell
amittell
|Yoshino-Yukitaro
Yoshino-Yukitaro
|Yikai-Liao
Yikai-Liao
| +|vladstudio
vladstudio
|NamesMT
NamesMT
|tmsjngx0
tmsjngx0
|tgfjt
tgfjt
|maekawataiki
maekawataiki
|samsilveira
samsilveira
| +|mr-ryan-james
mr-ryan-james
|01Rian
01Rian
|Sarke
Sarke
|kvokka
kvokka
|marvijo-code
marvijo-code
|mamertofabian
mamertofabian
| +|libertyteeth
libertyteeth
|shtse8
shtse8
| | | | | ## Giấy Phép diff --git a/locales/zh-CN/README.md b/locales/zh-CN/README.md index cda62290700..98e29ac8102 100644 --- a/locales/zh-CN/README.md +++ b/locales/zh-CN/README.md @@ -178,33 +178,32 @@ code --install-extension bin/roo-cline-.vsix 感谢所有帮助改进 Roo Code 的贡献者! - -| mrubens
mrubens
| saoudrizwan
saoudrizwan
| cte
cte
| samhvw8
samhvw8
| daniel-lxs
daniel-lxs
| a8trejo
a8trejo
| -| :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | -| ColemanRoo
ColemanRoo
| stea9499
stea9499
| joemanley201
joemanley201
| System233
System233
| hannesrudolph
hannesrudolph
| KJ7LNW
KJ7LNW
| -| jquanton
jquanton
| nissa-seru
nissa-seru
| NyxJae
NyxJae
| MuriloFP
MuriloFP
| d-oit
d-oit
| punkpeye
punkpeye
| -| Smartsheet-JB-Brown
Smartsheet-JB-Brown
| monotykamary
monotykamary
| wkordalski
wkordalski
| feifei325
feifei325
| cannuri
cannuri
| lloydchang
lloydchang
| -| vigneshsubbiah16
vigneshsubbiah16
| qdaxb
qdaxb
| Szpadel
Szpadel
| Premshay
Premshay
| sachasayan
sachasayan
| psv2522
psv2522
| -| diarmidmackenzie
diarmidmackenzie
| lupuletic
lupuletic
| elianiva
elianiva
| olweraltuve
olweraltuve
| afshawnlotfi
afshawnlotfi
| pugazhendhi-m
pugazhendhi-m
| -| aheizi
aheizi
| RaySinner
RaySinner
| PeterDaveHello
PeterDaveHello
| nbihan-mediware
nbihan-mediware
| dtrugman
dtrugman
| emshvac
emshvac
| -| kyle-apex
kyle-apex
| pdecat
pdecat
| zhangtony239
zhangtony239
| Lunchb0ne
Lunchb0ne
| arthurauffray
arthurauffray
| upamune
upamune
| -| StevenTCramer
StevenTCramer
| sammcj
sammcj
| p12tic
p12tic
| gtaylor
gtaylor
| aitoroses
aitoroses
| philfung
philfung
| -| ross
ross
| heyseth
heyseth
| taisukeoe
taisukeoe
| eonghk
eonghk
| teddyOOXX
teddyOOXX
| vagadiya
vagadiya
| -| vincentsong
vincentsong
| yongjer
yongjer
| ashktn
ashktn
| franekp
franekp
| yt3trees
yt3trees
| axkirillov
axkirillov
| -| anton-otee
anton-otee
| benzntech
benzntech
| bramburn
bramburn
| snoyiatk
snoyiatk
| GitlyHallows
GitlyHallows
| jcbdev
jcbdev
| -| Chenjiayuan195
Chenjiayuan195
| julionav
julionav
| napter
napter
| SplittyDev
SplittyDev
| mdp
mdp
| nevermorec
nevermorec
| -| mecab
mecab
| olup
olup
| lightrabbit
lightrabbit
| kohii
kohii
| kinandan
kinandan
| jwcraig
jwcraig
| -| shoopapa
shoopapa
| im47cn
im47cn
| hongzio
hongzio
| dqroid
dqroid
| dlab-anton
dlab-anton
| dairui1
dairui1
| -| bannzai
bannzai
| axmo
axmo
| asychin
asychin
| jr
jr
| PretzelVector
PretzelVector
| cdlliuy
cdlliuy
| -| student20880
student20880
| shohei-ihaya
shohei-ihaya
| shaybc
shaybc
| shariqriazz
shariqriazz
| seedlord
seedlord
| samir-nimbly
samir-nimbly
| -| ronyblum
ronyblum
| refactorthis
refactorthis
| pokutuna
pokutuna
| philipnext
philipnext
| oprstchn
oprstchn
| nobu007
nobu007
| -| mosleyit
mosleyit
| moqimoqidea
moqimoqidea
| mlopezr
mlopezr
| Jdo300
Jdo300
| hesara
hesara
| DeXtroTip
DeXtroTip
| -| celestial-vault
celestial-vault
| linegel
linegel
| dbasclpy
dbasclpy
| dleen
dleen
| chadgauth
chadgauth
| bogdan0083
bogdan0083
| -| Atlogit
Atlogit
| atlasgong
atlasgong
| andreastempsch
andreastempsch
| QuinsZouls
QuinsZouls
| alarno
alarno
| adamwlarson
adamwlarson
| -| AMHesch
AMHesch
| amittell
amittell
| Yoshino-Yukitaro
Yoshino-Yukitaro
| Yikai-Liao
Yikai-Liao
| vladstudio
vladstudio
| NamesMT
NamesMT
| -| tmsjngx0
tmsjngx0
| tgfjt
tgfjt
| maekawataiki
maekawataiki
| samsilveira
samsilveira
| mr-ryan-james
mr-ryan-james
| 01Rian
01Rian
| -| Sarke
Sarke
| kvokka
kvokka
| marvijo-code
marvijo-code
| mamertofabian
mamertofabian
| libertyteeth
libertyteeth
| shtse8
shtse8
| - +|mrubens
mrubens
|saoudrizwan
saoudrizwan
|cte
cte
|samhvw8
samhvw8
|daniel-lxs
daniel-lxs
|a8trejo
a8trejo
| +|:---:|:---:|:---:|:---:|:---:|:---:| +|ColemanRoo
ColemanRoo
|stea9499
stea9499
|joemanley201
joemanley201
|System233
System233
|hannesrudolph
hannesrudolph
|KJ7LNW
KJ7LNW
| +|nissa-seru
nissa-seru
|jquanton
jquanton
|NyxJae
NyxJae
|MuriloFP
MuriloFP
|d-oit
d-oit
|punkpeye
punkpeye
| +|Smartsheet-JB-Brown
Smartsheet-JB-Brown
|monotykamary
monotykamary
|wkordalski
wkordalski
|feifei325
feifei325
|lloydchang
lloydchang
|cannuri
cannuri
| +|vigneshsubbiah16
vigneshsubbiah16
|Szpadel
Szpadel
|sachasayan
sachasayan
|qdaxb
qdaxb
|zhangtony239
zhangtony239
|lupuletic
lupuletic
| +|Premshay
Premshay
|psv2522
psv2522
|elianiva
elianiva
|diarmidmackenzie
diarmidmackenzie
|olweraltuve
olweraltuve
|afshawnlotfi
afshawnlotfi
| +|pugazhendhi-m
pugazhendhi-m
|aheizi
aheizi
|RaySinner
RaySinner
|PeterDaveHello
PeterDaveHello
|nbihan-mediware
nbihan-mediware
|dtrugman
dtrugman
| +|emshvac
emshvac
|kyle-apex
kyle-apex
|pdecat
pdecat
|Lunchb0ne
Lunchb0ne
|arthurauffray
arthurauffray
|upamune
upamune
| +|StevenTCramer
StevenTCramer
|sammcj
sammcj
|p12tic
p12tic
|gtaylor
gtaylor
|aitoroses
aitoroses
|anton-otee
anton-otee
| +|philfung
philfung
|ross
ross
|heyseth
heyseth
|taisukeoe
taisukeoe
|eonghk
eonghk
|teddyOOXX
teddyOOXX
| +|vagadiya
vagadiya
|vincentsong
vincentsong
|yongjer
yongjer
|ashktn
ashktn
|franekp
franekp
|yt3trees
yt3trees
| +|benzntech
benzntech
|axkirillov
axkirillov
|bramburn
bramburn
|snoyiatk
snoyiatk
|GitlyHallows
GitlyHallows
|jcbdev
jcbdev
| +|Chenjiayuan195
Chenjiayuan195
|jr
jr
|julionav
julionav
|SplittyDev
SplittyDev
|mdp
mdp
|napter
napter
| +|nevermorec
nevermorec
|mecab
mecab
|olup
olup
|lightrabbit
lightrabbit
|kohii
kohii
|kinandan
kinandan
| +|jwcraig
jwcraig
|shoopapa
shoopapa
|im47cn
im47cn
|hongzio
hongzio
|GOODBOY008
GOODBOY008
|dqroid
dqroid
| +|dlab-anton
dlab-anton
|dairui1
dairui1
|bannzai
bannzai
|axmo
axmo
|asychin
asychin
|PretzelVector
PretzelVector
| +|cdlliuy
cdlliuy
|student20880
student20880
|shohei-ihaya
shohei-ihaya
|shaybc
shaybc
|shariqriazz
shariqriazz
|seedlord
seedlord
| +|samir-nimbly
samir-nimbly
|ronyblum
ronyblum
|refactorthis
refactorthis
|pokutuna
pokutuna
|philipnext
philipnext
|oprstchn
oprstchn
| +|nobu007
nobu007
|mosleyit
mosleyit
|moqimoqidea
moqimoqidea
|mlopezr
mlopezr
|Jdo300
Jdo300
|hesara
hesara
| +|DeXtroTip
DeXtroTip
|celestial-vault
celestial-vault
|linegel
linegel
|dbasclpy
dbasclpy
|dleen
dleen
|chadgauth
chadgauth
| +|olearycrew
olearycrew
|bogdan0083
bogdan0083
|Atlogit
Atlogit
|atlasgong
atlasgong
|andreastempsch
andreastempsch
|QuinsZouls
QuinsZouls
| +|alarno
alarno
|adamwlarson
adamwlarson
|AMHesch
AMHesch
|amittell
amittell
|Yoshino-Yukitaro
Yoshino-Yukitaro
|Yikai-Liao
Yikai-Liao
| +|vladstudio
vladstudio
|NamesMT
NamesMT
|tmsjngx0
tmsjngx0
|tgfjt
tgfjt
|maekawataiki
maekawataiki
|samsilveira
samsilveira
| +|mr-ryan-james
mr-ryan-james
|01Rian
01Rian
|Sarke
Sarke
|kvokka
kvokka
|marvijo-code
marvijo-code
|mamertofabian
mamertofabian
| +|libertyteeth
libertyteeth
|shtse8
shtse8
| | | | | ## 许可证 diff --git a/locales/zh-TW/README.md b/locales/zh-TW/README.md index 29ca9a66f4a..91151e07638 100644 --- a/locales/zh-TW/README.md +++ b/locales/zh-TW/README.md @@ -179,33 +179,32 @@ code --install-extension bin/roo-cline-.vsix 感謝所有幫助改進 Roo Code 的貢獻者! - -| mrubens
mrubens
| saoudrizwan
saoudrizwan
| cte
cte
| samhvw8
samhvw8
| daniel-lxs
daniel-lxs
| a8trejo
a8trejo
| -| :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | -| ColemanRoo
ColemanRoo
| stea9499
stea9499
| joemanley201
joemanley201
| System233
System233
| hannesrudolph
hannesrudolph
| KJ7LNW
KJ7LNW
| -| jquanton
jquanton
| nissa-seru
nissa-seru
| NyxJae
NyxJae
| MuriloFP
MuriloFP
| d-oit
d-oit
| punkpeye
punkpeye
| -| Smartsheet-JB-Brown
Smartsheet-JB-Brown
| monotykamary
monotykamary
| wkordalski
wkordalski
| feifei325
feifei325
| cannuri
cannuri
| lloydchang
lloydchang
| -| vigneshsubbiah16
vigneshsubbiah16
| qdaxb
qdaxb
| Szpadel
Szpadel
| Premshay
Premshay
| sachasayan
sachasayan
| psv2522
psv2522
| -| diarmidmackenzie
diarmidmackenzie
| lupuletic
lupuletic
| elianiva
elianiva
| olweraltuve
olweraltuve
| afshawnlotfi
afshawnlotfi
| pugazhendhi-m
pugazhendhi-m
| -| aheizi
aheizi
| RaySinner
RaySinner
| PeterDaveHello
PeterDaveHello
| nbihan-mediware
nbihan-mediware
| dtrugman
dtrugman
| emshvac
emshvac
| -| kyle-apex
kyle-apex
| pdecat
pdecat
| zhangtony239
zhangtony239
| Lunchb0ne
Lunchb0ne
| arthurauffray
arthurauffray
| upamune
upamune
| -| StevenTCramer
StevenTCramer
| sammcj
sammcj
| p12tic
p12tic
| gtaylor
gtaylor
| aitoroses
aitoroses
| philfung
philfung
| -| ross
ross
| heyseth
heyseth
| taisukeoe
taisukeoe
| eonghk
eonghk
| teddyOOXX
teddyOOXX
| vagadiya
vagadiya
| -| vincentsong
vincentsong
| yongjer
yongjer
| ashktn
ashktn
| franekp
franekp
| yt3trees
yt3trees
| axkirillov
axkirillov
| -| anton-otee
anton-otee
| benzntech
benzntech
| bramburn
bramburn
| snoyiatk
snoyiatk
| GitlyHallows
GitlyHallows
| jcbdev
jcbdev
| -| Chenjiayuan195
Chenjiayuan195
| julionav
julionav
| napter
napter
| SplittyDev
SplittyDev
| mdp
mdp
| nevermorec
nevermorec
| -| mecab
mecab
| olup
olup
| lightrabbit
lightrabbit
| kohii
kohii
| kinandan
kinandan
| jwcraig
jwcraig
| -| shoopapa
shoopapa
| im47cn
im47cn
| hongzio
hongzio
| dqroid
dqroid
| dlab-anton
dlab-anton
| dairui1
dairui1
| -| bannzai
bannzai
| axmo
axmo
| asychin
asychin
| jr
jr
| PretzelVector
PretzelVector
| cdlliuy
cdlliuy
| -| student20880
student20880
| shohei-ihaya
shohei-ihaya
| shaybc
shaybc
| shariqriazz
shariqriazz
| seedlord
seedlord
| samir-nimbly
samir-nimbly
| -| ronyblum
ronyblum
| refactorthis
refactorthis
| pokutuna
pokutuna
| philipnext
philipnext
| oprstchn
oprstchn
| nobu007
nobu007
| -| mosleyit
mosleyit
| moqimoqidea
moqimoqidea
| mlopezr
mlopezr
| Jdo300
Jdo300
| hesara
hesara
| DeXtroTip
DeXtroTip
| -| celestial-vault
celestial-vault
| linegel
linegel
| dbasclpy
dbasclpy
| dleen
dleen
| chadgauth
chadgauth
| bogdan0083
bogdan0083
| -| Atlogit
Atlogit
| atlasgong
atlasgong
| andreastempsch
andreastempsch
| QuinsZouls
QuinsZouls
| alarno
alarno
| adamwlarson
adamwlarson
| -| AMHesch
AMHesch
| amittell
amittell
| Yoshino-Yukitaro
Yoshino-Yukitaro
| Yikai-Liao
Yikai-Liao
| vladstudio
vladstudio
| NamesMT
NamesMT
| -| tmsjngx0
tmsjngx0
| tgfjt
tgfjt
| maekawataiki
maekawataiki
| samsilveira
samsilveira
| mr-ryan-james
mr-ryan-james
| 01Rian
01Rian
| -| Sarke
Sarke
| kvokka
kvokka
| marvijo-code
marvijo-code
| mamertofabian
mamertofabian
| libertyteeth
libertyteeth
| shtse8
shtse8
| - +|mrubens
mrubens
|saoudrizwan
saoudrizwan
|cte
cte
|samhvw8
samhvw8
|daniel-lxs
daniel-lxs
|a8trejo
a8trejo
| +|:---:|:---:|:---:|:---:|:---:|:---:| +|ColemanRoo
ColemanRoo
|stea9499
stea9499
|joemanley201
joemanley201
|System233
System233
|hannesrudolph
hannesrudolph
|KJ7LNW
KJ7LNW
| +|nissa-seru
nissa-seru
|jquanton
jquanton
|NyxJae
NyxJae
|MuriloFP
MuriloFP
|d-oit
d-oit
|punkpeye
punkpeye
| +|Smartsheet-JB-Brown
Smartsheet-JB-Brown
|monotykamary
monotykamary
|wkordalski
wkordalski
|feifei325
feifei325
|lloydchang
lloydchang
|cannuri
cannuri
| +|vigneshsubbiah16
vigneshsubbiah16
|Szpadel
Szpadel
|sachasayan
sachasayan
|qdaxb
qdaxb
|zhangtony239
zhangtony239
|lupuletic
lupuletic
| +|Premshay
Premshay
|psv2522
psv2522
|elianiva
elianiva
|diarmidmackenzie
diarmidmackenzie
|olweraltuve
olweraltuve
|afshawnlotfi
afshawnlotfi
| +|pugazhendhi-m
pugazhendhi-m
|aheizi
aheizi
|RaySinner
RaySinner
|PeterDaveHello
PeterDaveHello
|nbihan-mediware
nbihan-mediware
|dtrugman
dtrugman
| +|emshvac
emshvac
|kyle-apex
kyle-apex
|pdecat
pdecat
|Lunchb0ne
Lunchb0ne
|arthurauffray
arthurauffray
|upamune
upamune
| +|StevenTCramer
StevenTCramer
|sammcj
sammcj
|p12tic
p12tic
|gtaylor
gtaylor
|aitoroses
aitoroses
|anton-otee
anton-otee
| +|philfung
philfung
|ross
ross
|heyseth
heyseth
|taisukeoe
taisukeoe
|eonghk
eonghk
|teddyOOXX
teddyOOXX
| +|vagadiya
vagadiya
|vincentsong
vincentsong
|yongjer
yongjer
|ashktn
ashktn
|franekp
franekp
|yt3trees
yt3trees
| +|benzntech
benzntech
|axkirillov
axkirillov
|bramburn
bramburn
|snoyiatk
snoyiatk
|GitlyHallows
GitlyHallows
|jcbdev
jcbdev
| +|Chenjiayuan195
Chenjiayuan195
|jr
jr
|julionav
julionav
|SplittyDev
SplittyDev
|mdp
mdp
|napter
napter
| +|nevermorec
nevermorec
|mecab
mecab
|olup
olup
|lightrabbit
lightrabbit
|kohii
kohii
|kinandan
kinandan
| +|jwcraig
jwcraig
|shoopapa
shoopapa
|im47cn
im47cn
|hongzio
hongzio
|GOODBOY008
GOODBOY008
|dqroid
dqroid
| +|dlab-anton
dlab-anton
|dairui1
dairui1
|bannzai
bannzai
|axmo
axmo
|asychin
asychin
|PretzelVector
PretzelVector
| +|cdlliuy
cdlliuy
|student20880
student20880
|shohei-ihaya
shohei-ihaya
|shaybc
shaybc
|shariqriazz
shariqriazz
|seedlord
seedlord
| +|samir-nimbly
samir-nimbly
|ronyblum
ronyblum
|refactorthis
refactorthis
|pokutuna
pokutuna
|philipnext
philipnext
|oprstchn
oprstchn
| +|nobu007
nobu007
|mosleyit
mosleyit
|moqimoqidea
moqimoqidea
|mlopezr
mlopezr
|Jdo300
Jdo300
|hesara
hesara
| +|DeXtroTip
DeXtroTip
|celestial-vault
celestial-vault
|linegel
linegel
|dbasclpy
dbasclpy
|dleen
dleen
|chadgauth
chadgauth
| +|olearycrew
olearycrew
|bogdan0083
bogdan0083
|Atlogit
Atlogit
|atlasgong
atlasgong
|andreastempsch
andreastempsch
|QuinsZouls
QuinsZouls
| +|alarno
alarno
|adamwlarson
adamwlarson
|AMHesch
AMHesch
|amittell
amittell
|Yoshino-Yukitaro
Yoshino-Yukitaro
|Yikai-Liao
Yikai-Liao
| +|vladstudio
vladstudio
|NamesMT
NamesMT
|tmsjngx0
tmsjngx0
|tgfjt
tgfjt
|maekawataiki
maekawataiki
|samsilveira
samsilveira
| +|mr-ryan-james
mr-ryan-james
|01Rian
01Rian
|Sarke
Sarke
|kvokka
kvokka
|marvijo-code
marvijo-code
|mamertofabian
mamertofabian
| +|libertyteeth
libertyteeth
|shtse8
shtse8
| | | | | ## 授權 diff --git a/package-lock.json b/package-lock.json index 5e9bd85604e..5abe8b91a57 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "pearai-roo-cline", - "version": "3.15.2", + "version": "3.15.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "pearai-roo-cline", - "version": "3.15.2", + "version": "3.15.3", "dependencies": { "@anthropic-ai/bedrock-sdk": "^0.10.2", "@anthropic-ai/sdk": "^0.37.0", @@ -47,6 +47,7 @@ "pkce-challenge": "^4.1.0", "posthog-node": "^4.7.0", "pretty-bytes": "^6.1.1", + "ps-tree": "^1.2.0", "puppeteer-chromium-resolver": "^23.0.0", "puppeteer-core": "^23.4.0", "react-tooltip": "^5.28.0", @@ -80,6 +81,7 @@ "@types/node": "20.x", "@types/node-cache": "^4.1.3", "@types/node-ipc": "^9.2.3", + "@types/ps-tree": "^1.1.6", "@types/string-similarity": "^4.0.2", "@typescript-eslint/eslint-plugin": "^7.14.1", "@typescript-eslint/parser": "^7.11.0", @@ -9055,6 +9057,13 @@ "resolved": "https://registry.npmjs.org/@types/pdf-parse/-/pdf-parse-1.1.4.tgz", "integrity": "sha512-+gbBHbNCVGGYw1S9lAIIvrHW47UYOhMIFUsJcMkMrzy1Jf0vulBN3XQIjPgnoOXveMuHnF3b57fXROnY/Or7eg==" }, + "node_modules/@types/ps-tree": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@types/ps-tree/-/ps-tree-1.1.6.tgz", + "integrity": "sha512-PtrlVaOaI44/3pl3cvnlK+GxOM3re2526TJvPvh7W+keHIXdV4TE0ylpPBAcvFQCbGitaTXwL9u+RF7qtVeazQ==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/stack-utils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", @@ -11824,6 +11833,12 @@ "node": ">= 0.4" } }, + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "license": "MIT" + }, "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", @@ -12490,6 +12505,21 @@ "node": ">=12.0.0" } }, + "node_modules/event-stream": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", + "integrity": "sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==", + "license": "MIT", + "dependencies": { + "duplexer": "~0.1.1", + "from": "~0", + "map-stream": "~0.1.0", + "pause-stream": "0.0.11", + "split": "0.3", + "stream-combiner": "~0.0.4", + "through": "~2.3.1" + } + }, "node_modules/event-target-shim": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", @@ -13169,6 +13199,12 @@ "node": ">= 0.8" } }, + "node_modules/from": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", + "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==", + "license": "MIT" + }, "node_modules/fs-constants": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", @@ -16547,6 +16583,11 @@ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" }, + "node_modules/map-stream": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", + "integrity": "sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==" + }, "node_modules/math-intrinsics": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", @@ -17835,6 +17876,18 @@ "node": ">=16" } }, + "node_modules/pause-stream": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", + "integrity": "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==", + "license": [ + "MIT", + "Apache2" + ], + "dependencies": { + "through": "~2.3" + } + }, "node_modules/pdf-parse": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/pdf-parse/-/pdf-parse-1.1.1.tgz", @@ -18277,6 +18330,21 @@ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" }, + "node_modules/ps-tree": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.2.0.tgz", + "integrity": "sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==", + "license": "MIT", + "dependencies": { + "event-stream": "=3.3.4" + }, + "bin": { + "ps-tree": "bin/ps-tree.js" + }, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/pump": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", @@ -19465,6 +19533,18 @@ "integrity": "sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==", "dev": true }, + "node_modules/split": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", + "integrity": "sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==", + "license": "MIT", + "dependencies": { + "through": "2" + }, + "engines": { + "node": "*" + } + }, "node_modules/sprintf-js": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", @@ -19524,6 +19604,15 @@ "npm": ">=6" } }, + "node_modules/stream-combiner": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", + "integrity": "sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==", + "license": "MIT", + "dependencies": { + "duplexer": "~0.1.1" + } + }, "node_modules/streamx": { "version": "2.21.0", "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.21.0.tgz", diff --git a/package.json b/package.json index d6e38dafd7c..1b372e92267 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "description": "PearAI's integration of Roo Code / Cline, a coding agent.", "publisher": "PearAI", "icon": "assets/icons/pear.png", - "version": "3.15.2", + "version": "3.15.3", "galleryBanner": { "color": "#617A91", "theme": "dark" @@ -416,6 +416,7 @@ "pkce-challenge": "^4.1.0", "posthog-node": "^4.7.0", "pretty-bytes": "^6.1.1", + "ps-tree": "^1.2.0", "puppeteer-chromium-resolver": "^23.0.0", "puppeteer-core": "^23.4.0", "react-tooltip": "^5.28.0", @@ -449,6 +450,7 @@ "@types/node": "20.x", "@types/node-cache": "^4.1.3", "@types/node-ipc": "^9.2.3", + "@types/ps-tree": "^1.1.6", "@types/string-similarity": "^4.0.2", "@typescript-eslint/eslint-plugin": "^7.14.1", "@typescript-eslint/parser": "^7.11.0", diff --git a/src/api/providers/anthropic-vertex.ts b/src/api/providers/anthropic-vertex.ts index 2eeafd222ca..91cbd2eb345 100644 --- a/src/api/providers/anthropic-vertex.ts +++ b/src/api/providers/anthropic-vertex.ts @@ -3,13 +3,14 @@ import { AnthropicVertex } from "@anthropic-ai/vertex-sdk" import { GoogleAuth, JWTInput } from "google-auth-library" import { ApiHandlerOptions, ModelInfo, vertexDefaultModelId, VertexModelId, vertexModels } from "../../shared/api" -import { ApiStream } from "../transform/stream" import { safeJsonParse } from "../../shared/safeJsonParse" +import { ApiStream } from "../transform/stream" +import { addCacheBreakpoints } from "../transform/caching/vertex" + import { getModelParams, SingleCompletionHandler } from "../index" -import { BaseProvider } from "./base-provider" import { ANTHROPIC_DEFAULT_MAX_TOKENS } from "./constants" -import { formatMessageForCache } from "../transform/vertex-caching" +import { BaseProvider } from "./base-provider" // https://docs.anthropic.com/en/api/claude-on-vertex-ai export class AnthropicVertexHandler extends BaseProvider implements SingleCompletionHandler { @@ -57,16 +58,6 @@ export class AnthropicVertexHandler extends BaseProvider implements SingleComple thinking, } = this.getModel() - // Find indices of user messages that we want to cache - // We only cache the last two user messages to stay within the 4-block limit - // (1 block for system + 1 block each for last two user messages = 3 total) - const userMsgIndices = supportsPromptCache - ? messages.reduce((acc, msg, i) => (msg.role === "user" ? [...acc, i] : acc), [] as number[]) - : [] - - const lastUserMsgIndex = userMsgIndices[userMsgIndices.length - 1] ?? -1 - const secondLastMsgUserIndex = userMsgIndices[userMsgIndices.length - 2] ?? -1 - /** * Vertex API has specific limitations for prompt caching: * 1. Maximum of 4 blocks can have cache_control @@ -89,12 +80,7 @@ export class AnthropicVertexHandler extends BaseProvider implements SingleComple system: supportsPromptCache ? [{ text: systemPrompt, type: "text" as const, cache_control: { type: "ephemeral" } }] : systemPrompt, - messages: messages.map((message, index) => { - // Only cache the last two user messages. - const shouldCache = - supportsPromptCache && (index === lastUserMsgIndex || index === secondLastMsgUserIndex) - return formatMessageForCache(message, shouldCache) - }), + messages: supportsPromptCache ? addCacheBreakpoints(messages) : messages, stream: true, } diff --git a/src/api/providers/glama.ts b/src/api/providers/glama.ts index 4dd97fd8276..b0132580d47 100644 --- a/src/api/providers/glama.ts +++ b/src/api/providers/glama.ts @@ -3,9 +3,11 @@ import axios from "axios" import OpenAI from "openai" import { ApiHandlerOptions, glamaDefaultModelId, glamaDefaultModelInfo } from "../../shared/api" + import { ApiStream } from "../transform/stream" import { convertToOpenAiMessages } from "../transform/openai-format" -import { addCacheControlDirectives } from "../transform/caching" +import { addCacheBreakpoints } from "../transform/caching/anthropic" + import { SingleCompletionHandler } from "../index" import { RouterProvider } from "./router-provider" @@ -37,7 +39,7 @@ export class GlamaHandler extends RouterProvider implements SingleCompletionHand ] if (modelId.startsWith("anthropic/claude-3")) { - addCacheControlDirectives(systemPrompt, openAiMessages) + addCacheBreakpoints(systemPrompt, openAiMessages) } // Required by Anthropic; other providers default to max tokens allowed. diff --git a/src/api/providers/openrouter.ts b/src/api/providers/openrouter.ts index efe659e1452..e1104f4f9a5 100644 --- a/src/api/providers/openrouter.ts +++ b/src/api/providers/openrouter.ts @@ -11,9 +11,12 @@ import { OPTIONAL_PROMPT_CACHING_MODELS, REASONING_MODELS, } from "../../shared/api" + import { convertToOpenAiMessages } from "../transform/openai-format" import { ApiStreamChunk } from "../transform/stream" import { convertToR1Format } from "../transform/r1-format" +import { addCacheBreakpoints as addAnthropicCacheBreakpoints } from "../transform/caching/anthropic" +import { addCacheBreakpoints as addGeminiCacheBreakpoints } from "../transform/caching/gemini" import { getModelParams, SingleCompletionHandler } from "../index" import { DEFAULT_HEADERS, DEEP_SEEK_DEFAULT_TEMPERATURE } from "./constants" @@ -93,42 +96,11 @@ export class OpenRouterHandler extends BaseProvider implements SingleCompletionH const isCacheAvailable = promptCache.supported && (!promptCache.optional || this.options.promptCachingEnabled) - // Prompt caching: https://openrouter.ai/docs/prompt-caching - // Now with Gemini support: https://openrouter.ai/docs/features/prompt-caching - // Note that we don't check the `ModelInfo` object because it is cached - // in the settings for OpenRouter and the value could be stale. + // https://openrouter.ai/docs/features/prompt-caching if (isCacheAvailable) { - openAiMessages[0] = { - role: "system", - // @ts-ignore-next-line - content: [{ type: "text", text: systemPrompt, cache_control: { type: "ephemeral" } }], - } - - // Add cache_control to the last two user messages - // (note: this works because we only ever add one user message at a time, but if we added multiple we'd need to mark the user message before the last assistant message) - const lastTwoUserMessages = openAiMessages.filter((msg) => msg.role === "user").slice(-2) - - lastTwoUserMessages.forEach((msg) => { - if (typeof msg.content === "string") { - msg.content = [{ type: "text", text: msg.content }] - } - - if (Array.isArray(msg.content)) { - // NOTE: This is fine since env details will always be added - // at the end. But if it wasn't there, and the user added a - // image_url type message, it would pop a text part before - // it and then move it after to the end. - let lastTextPart = msg.content.filter((part) => part.type === "text").pop() - - if (!lastTextPart) { - lastTextPart = { type: "text", text: "..." } - msg.content.push(lastTextPart) - } - - // @ts-ignore-next-line - lastTextPart["cache_control"] = { type: "ephemeral" } - } - }) + modelId.startsWith("google") + ? addGeminiCacheBreakpoints(systemPrompt, openAiMessages) + : addAnthropicCacheBreakpoints(systemPrompt, openAiMessages) } // https://openrouter.ai/docs/transforms diff --git a/src/api/providers/unbound.ts b/src/api/providers/unbound.ts index 27c10313a60..5e8dbf66b40 100644 --- a/src/api/providers/unbound.ts +++ b/src/api/providers/unbound.ts @@ -2,9 +2,11 @@ import { Anthropic } from "@anthropic-ai/sdk" import OpenAI from "openai" import { ApiHandlerOptions, unboundDefaultModelId, unboundDefaultModelInfo } from "../../shared/api" + import { ApiStream, ApiStreamUsageChunk } from "../transform/stream" import { convertToOpenAiMessages } from "../transform/openai-format" -import { addCacheControlDirectives } from "../transform/caching" +import { addCacheBreakpoints } from "../transform/caching/anthropic" + import { SingleCompletionHandler } from "../index" import { RouterProvider } from "./router-provider" @@ -39,7 +41,7 @@ export class UnboundHandler extends RouterProvider implements SingleCompletionHa ] if (modelId.startsWith("anthropic/claude-3")) { - addCacheControlDirectives(systemPrompt, openAiMessages) + addCacheBreakpoints(systemPrompt, openAiMessages) } // Required by Anthropic; other providers default to max tokens allowed. diff --git a/src/api/transform/caching.ts b/src/api/transform/caching.ts deleted file mode 100644 index 0a8ae6bf459..00000000000 --- a/src/api/transform/caching.ts +++ /dev/null @@ -1,36 +0,0 @@ -import OpenAI from "openai" - -export const addCacheControlDirectives = (systemPrompt: string, messages: OpenAI.Chat.ChatCompletionMessageParam[]) => { - messages[0] = { - role: "system", - content: [ - { - type: "text", - text: systemPrompt, - // @ts-ignore-next-line - cache_control: { type: "ephemeral" }, - }, - ], - } - - messages - .filter((msg) => msg.role === "user") - .slice(-2) - .forEach((msg) => { - if (typeof msg.content === "string") { - msg.content = [{ type: "text", text: msg.content }] - } - - if (Array.isArray(msg.content)) { - let lastTextPart = msg.content.filter((part) => part.type === "text").pop() - - if (!lastTextPart) { - lastTextPart = { type: "text", text: "..." } - msg.content.push(lastTextPart) - } - - // @ts-ignore-next-line - lastTextPart["cache_control"] = { type: "ephemeral" } - } - }) -} diff --git a/src/api/transform/caching/__tests__/anthropic.test.ts b/src/api/transform/caching/__tests__/anthropic.test.ts new file mode 100644 index 00000000000..6c836e954c8 --- /dev/null +++ b/src/api/transform/caching/__tests__/anthropic.test.ts @@ -0,0 +1,181 @@ +// npx jest src/api/transform/caching/__tests__/anthropic.test.ts + +import OpenAI from "openai" + +import { addCacheBreakpoints } from "../anthropic" + +describe("addCacheBreakpoints (Anthropic)", () => { + const systemPrompt = "You are a helpful assistant." + + it("should always add a cache breakpoint to the system prompt", () => { + const messages: OpenAI.Chat.ChatCompletionMessageParam[] = [ + { role: "system", content: systemPrompt }, + { role: "user", content: "Hello" }, + ] + + addCacheBreakpoints(systemPrompt, messages) + + expect(messages[0].content).toEqual([ + { type: "text", text: systemPrompt, cache_control: { type: "ephemeral" } }, + ]) + }) + + it("should not add breakpoints to user messages if there are none", () => { + const messages: OpenAI.Chat.ChatCompletionMessageParam[] = [{ role: "system", content: systemPrompt }] + const originalMessages = JSON.parse(JSON.stringify(messages)) + + addCacheBreakpoints(systemPrompt, messages) + + expect(messages[0].content).toEqual([ + { type: "text", text: systemPrompt, cache_control: { type: "ephemeral" } }, + ]) + + expect(messages.length).toBe(originalMessages.length) + }) + + it("should add a breakpoint to the only user message if only one exists", () => { + const messages: OpenAI.Chat.ChatCompletionMessageParam[] = [ + { role: "system", content: systemPrompt }, + { role: "user", content: "User message 1" }, + ] + + addCacheBreakpoints(systemPrompt, messages) + + expect(messages[1].content).toEqual([ + { type: "text", text: "User message 1", cache_control: { type: "ephemeral" } }, + ]) + }) + + it("should add breakpoints to both user messages if only two exist", () => { + const messages: OpenAI.Chat.ChatCompletionMessageParam[] = [ + { role: "system", content: systemPrompt }, + { role: "user", content: "User message 1" }, + { role: "user", content: "User message 2" }, + ] + + addCacheBreakpoints(systemPrompt, messages) + + expect(messages[1].content).toEqual([ + { type: "text", text: "User message 1", cache_control: { type: "ephemeral" } }, + ]) + + expect(messages[2].content).toEqual([ + { type: "text", text: "User message 2", cache_control: { type: "ephemeral" } }, + ]) + }) + + it("should add breakpoints to the last two user messages when more than two exist", () => { + const messages: OpenAI.Chat.ChatCompletionMessageParam[] = [ + { role: "system", content: systemPrompt }, + { role: "user", content: "User message 1" }, // Should not get breakpoint. + { role: "user", content: "User message 2" }, // Should get breakpoint. + { role: "user", content: "User message 3" }, // Should get breakpoint. + ] + addCacheBreakpoints(systemPrompt, messages) + + expect(messages[1].content).toEqual([{ type: "text", text: "User message 1" }]) + + expect(messages[2].content).toEqual([ + { type: "text", text: "User message 2", cache_control: { type: "ephemeral" } }, + ]) + + expect(messages[3].content).toEqual([ + { type: "text", text: "User message 3", cache_control: { type: "ephemeral" } }, + ]) + }) + + it("should handle assistant messages correctly when finding last two user messages", () => { + const messages: OpenAI.Chat.ChatCompletionMessageParam[] = [ + { role: "system", content: systemPrompt }, + { role: "user", content: "User message 1" }, // Should not get breakpoint. + { role: "assistant", content: "Assistant response 1" }, + { role: "user", content: "User message 2" }, // Should get breakpoint (second to last user). + { role: "assistant", content: "Assistant response 2" }, + { role: "user", content: "User message 3" }, // Should get breakpoint (last user). + { role: "assistant", content: "Assistant response 3" }, + ] + addCacheBreakpoints(systemPrompt, messages) + + const userMessages = messages.filter((m) => m.role === "user") + + expect(userMessages[0].content).toEqual([{ type: "text", text: "User message 1" }]) + + expect(userMessages[1].content).toEqual([ + { type: "text", text: "User message 2", cache_control: { type: "ephemeral" } }, + ]) + + expect(userMessages[2].content).toEqual([ + { type: "text", text: "User message 3", cache_control: { type: "ephemeral" } }, + ]) + }) + + it("should add breakpoint to the last text part if content is an array", () => { + const messages: OpenAI.Chat.ChatCompletionMessageParam[] = [ + { role: "system", content: systemPrompt }, + { role: "user", content: "User message 1" }, + { + role: "user", + content: [ + { type: "text", text: "This is the last user message." }, + { type: "image_url", image_url: { url: "data:image/png;base64,..." } }, + { type: "text", text: "This part should get the breakpoint." }, + ], + }, + ] + + addCacheBreakpoints(systemPrompt, messages) + + expect(messages[1].content).toEqual([ + { type: "text", text: "User message 1", cache_control: { type: "ephemeral" } }, + ]) + + expect(messages[2].content).toEqual([ + { type: "text", text: "This is the last user message." }, + { type: "image_url", image_url: { url: "data:image/png;base64,..." } }, + { type: "text", text: "This part should get the breakpoint.", cache_control: { type: "ephemeral" } }, + ]) + }) + + it("should add a placeholder text part if the target message has no text parts", () => { + const messages: OpenAI.Chat.ChatCompletionMessageParam[] = [ + { role: "system", content: systemPrompt }, + { role: "user", content: "User message 1" }, + { + role: "user", + content: [{ type: "image_url", image_url: { url: "data:image/png;base64,..." } }], + }, + ] + + addCacheBreakpoints(systemPrompt, messages) + + expect(messages[1].content).toEqual([ + { type: "text", text: "User message 1", cache_control: { type: "ephemeral" } }, + ]) + + expect(messages[2].content).toEqual([ + { type: "image_url", image_url: { url: "data:image/png;base64,..." } }, + { type: "text", text: "...", cache_control: { type: "ephemeral" } }, // Placeholder added. + ]) + }) + + it("should ensure content is array format even if no breakpoint added", () => { + const messages: OpenAI.Chat.ChatCompletionMessageParam[] = [ + { role: "system", content: systemPrompt }, + { role: "user", content: "User message 1" }, // String content, no breakpoint. + { role: "user", content: "User message 2" }, // Gets breakpoint. + { role: "user", content: "User message 3" }, // Gets breakpoint. + ] + + addCacheBreakpoints(systemPrompt, messages) + + expect(messages[1].content).toEqual([{ type: "text", text: "User message 1" }]) + + expect(messages[2].content).toEqual([ + { type: "text", text: "User message 2", cache_control: { type: "ephemeral" } }, + ]) + + expect(messages[3].content).toEqual([ + { type: "text", text: "User message 3", cache_control: { type: "ephemeral" } }, + ]) + }) +}) diff --git a/src/api/transform/caching/__tests__/gemini.test.ts b/src/api/transform/caching/__tests__/gemini.test.ts new file mode 100644 index 00000000000..bed3b334ca9 --- /dev/null +++ b/src/api/transform/caching/__tests__/gemini.test.ts @@ -0,0 +1,266 @@ +// npx jest src/api/transform/caching/__tests__/gemini.test.ts + +import OpenAI from "openai" + +import { addCacheBreakpoints } from "../gemini" + +describe("addCacheBreakpoints", () => { + const systemPrompt = "You are a helpful assistant." + + it("should always add a cache breakpoint to the system prompt", () => { + const messages: OpenAI.Chat.ChatCompletionMessageParam[] = [ + { role: "system", content: systemPrompt }, + { role: "user", content: "Hello" }, + ] + addCacheBreakpoints(systemPrompt, messages, 10) // Pass frequency + expect(messages[0].content).toEqual([ + { type: "text", text: systemPrompt, cache_control: { type: "ephemeral" } }, + ]) + }) + + it("should not add breakpoints for fewer than N user messages", () => { + const frequency = 5 + + const messages: OpenAI.Chat.ChatCompletionMessageParam[] = [ + { role: "system", content: systemPrompt }, + ...Array.from({ length: frequency - 1 }, (_, i) => ({ + role: "user" as const, + content: `User message ${i + 1}`, + })), + ] + + const originalMessages = JSON.parse(JSON.stringify(messages)) + + addCacheBreakpoints(systemPrompt, messages, frequency) + + expect(messages[0].content).toEqual([ + { type: "text", text: systemPrompt, cache_control: { type: "ephemeral" } }, + ]) + + for (let i = 1; i < messages.length; i++) { + const originalContent = originalMessages[i].content + + const expectedContent = + typeof originalContent === "string" ? [{ type: "text", text: originalContent }] : originalContent + + expect(messages[i].content).toEqual(expectedContent) + } + }) + + it("should add a breakpoint to the Nth user message", () => { + const frequency = 5 + + const messages: OpenAI.Chat.ChatCompletionMessageParam[] = [ + { role: "system", content: systemPrompt }, + ...Array.from({ length: frequency }, (_, i) => ({ + role: "user" as const, + content: `User message ${i + 1}`, + })), + ] + + addCacheBreakpoints(systemPrompt, messages, frequency) + + // Check Nth user message (index 'frequency' in the full array). + expect(messages[frequency].content).toEqual([ + { type: "text", text: `User message ${frequency}`, cache_control: { type: "ephemeral" } }, + ]) + + // Check (N-1)th user message (index frequency-1) - should be unchanged. + expect(messages[frequency - 1].content).toEqual([{ type: "text", text: `User message ${frequency - 1}` }]) + }) + + it("should add breakpoints to the Nth and 2*Nth user messages", () => { + const frequency = 5 + + const messages: OpenAI.Chat.ChatCompletionMessageParam[] = [ + { role: "system", content: systemPrompt }, + ...Array.from({ length: frequency * 2 }, (_, i) => ({ + role: "user" as const, + content: `User message ${i + 1}`, + })), + ] + + expect(messages.length).toEqual(frequency * 2 + 1) + + addCacheBreakpoints(systemPrompt, messages, frequency) + + const indices = [] + + for (let i = 0; i < messages.length; i++) { + const content = messages[i].content?.[0] + + if (typeof content === "object" && "cache_control" in content) { + indices.push(i) + } + } + + expect(indices).toEqual([0, 5, 10]) + + // Check Nth user message (index frequency) + expect(messages[frequency].content).toEqual([ + { type: "text", text: `User message ${frequency}`, cache_control: { type: "ephemeral" } }, + ]) + + // Check (2*N-1)th user message (index 2*frequency-1) - unchanged + expect(messages[frequency * 2 - 1].content).toEqual([ + { type: "text", text: `User message ${frequency * 2 - 1}` }, + ]) + + // Check 2*Nth user message (index 2*frequency) + expect(messages[frequency * 2].content).toEqual([ + { type: "text", text: `User message ${frequency * 2}`, cache_control: { type: "ephemeral" } }, + ]) + }) + + it("should handle assistant messages correctly when counting user messages", () => { + const frequency = 5 + + const messages: OpenAI.Chat.ChatCompletionMessageParam[] = [ + { role: "system", content: systemPrompt }, + // N-1 user messages + ...Array.from({ length: frequency - 1 }, (_, i) => ({ + role: "user" as const, + content: `User message ${i + 1}`, + })), + { role: "assistant", content: "Assistant response" }, + { role: "user", content: `User message ${frequency}` }, // This is the Nth user message. + { role: "assistant", content: "Another response" }, + { role: "user", content: `User message ${frequency + 1}` }, + ] + + addCacheBreakpoints(systemPrompt, messages, frequency) + + // Find the Nth user message. + const nthUserMessage = messages.filter((m) => m.role === "user")[frequency - 1] + expect(nthUserMessage.content).toEqual([ + { type: "text", text: `User message ${frequency}`, cache_control: { type: "ephemeral" } }, + ]) + + // Check the (N+1)th user message is unchanged. + const nPlusOneUserMessage = messages.filter((m) => m.role === "user")[frequency] + expect(nPlusOneUserMessage.content).toEqual([{ type: "text", text: `User message ${frequency + 1}` }]) + }) + + it("should add breakpoint to the last text part if content is an array", () => { + const frequency = 5 + + const messages: OpenAI.Chat.ChatCompletionMessageParam[] = [ + { role: "system", content: systemPrompt }, + ...Array.from({ length: frequency - 1 }, (_, i) => ({ + role: "user" as const, + content: `User message ${i + 1}`, + })), + { + role: "user", // Nth user message + content: [ + { type: "text", text: `This is the ${frequency}th user message.` }, + { type: "image_url", image_url: { url: "data:image/png;base64,..." } }, + { type: "text", text: "This part should get the breakpoint." }, + ], + }, + ] + + addCacheBreakpoints(systemPrompt, messages, frequency) + + expect(messages[frequency].content).toEqual([ + { type: "text", text: `This is the ${frequency}th user message.` }, + { type: "image_url", image_url: { url: "data:image/png;base64,..." } }, + { type: "text", text: "This part should get the breakpoint.", cache_control: { type: "ephemeral" } }, + ]) + }) + + it("should add a placeholder text part if the target message has no text parts", () => { + const frequency = 5 + + const messages: OpenAI.Chat.ChatCompletionMessageParam[] = [ + { role: "system", content: systemPrompt }, + ...Array.from({ length: frequency - 1 }, (_, i) => ({ + role: "user" as const, + content: `User message ${i + 1}`, + })), + { + role: "user", // Nth user message. + content: [{ type: "image_url", image_url: { url: "data:image/png;base64,..." } }], + }, + ] + + addCacheBreakpoints(systemPrompt, messages, frequency) + + expect(messages[frequency].content).toEqual([ + { type: "image_url", image_url: { url: "data:image/png;base64,..." } }, + { type: "text", text: "...", cache_control: { type: "ephemeral" } }, + ]) + }) + + it("should add breakpoints correctly with frequency 5", () => { + const frequency = 5 + + const messages: OpenAI.Chat.ChatCompletionMessageParam[] = [ + { role: "system", content: systemPrompt }, + ...Array.from({ length: 12 }, (_, i) => ({ + role: "user" as const, + content: `User message ${i + 1}`, + })), + ] + + addCacheBreakpoints(systemPrompt, messages, frequency) + + // Check 5th user message (index 5). + expect(messages[5].content).toEqual([ + { type: "text", text: "User message 5", cache_control: { type: "ephemeral" } }, + ]) + + // Check 9th user message (index 9) - unchanged + expect(messages[9].content).toEqual([{ type: "text", text: "User message 9" }]) + + // Check 10th user message (index 10). + expect(messages[10].content).toEqual([ + { type: "text", text: "User message 10", cache_control: { type: "ephemeral" } }, + ]) + + // Check 11th user message (index 11) - unchanged + expect(messages[11].content).toEqual([{ type: "text", text: "User message 11" }]) + }) + + it("should not add breakpoints (except system) if frequency is 0", () => { + const frequency = 0 + const messages: OpenAI.Chat.ChatCompletionMessageParam[] = [ + { role: "system", content: systemPrompt }, + ...Array.from({ length: 15 }, (_, i) => ({ + role: "user" as const, + content: `User message ${i + 1}`, + })), + ] + const originalMessages = JSON.parse(JSON.stringify(messages)) + + addCacheBreakpoints(systemPrompt, messages, frequency) + + // Check system prompt. + expect(messages[0].content).toEqual([ + { type: "text", text: systemPrompt, cache_control: { type: "ephemeral" } }, + ]) + + // Check all user messages - none should have cache_control + for (let i = 1; i < messages.length; i++) { + const originalContent = originalMessages[i].content + + const expectedContent = + typeof originalContent === "string" ? [{ type: "text", text: originalContent }] : originalContent + + expect(messages[i].content).toEqual(expectedContent) // Should match original (after string->array conversion). + + // Ensure no cache_control was added to user messages. + const content = messages[i].content + + if (Array.isArray(content)) { + // Assign to new variable after type check. + const contentParts = content + + contentParts.forEach((part: any) => { + // Iterate over the correctly typed variable. + expect(part).not.toHaveProperty("cache_control") + }) + } + } + }) +}) diff --git a/src/api/transform/caching/__tests__/vertex.test.ts b/src/api/transform/caching/__tests__/vertex.test.ts new file mode 100644 index 00000000000..a707495c7fe --- /dev/null +++ b/src/api/transform/caching/__tests__/vertex.test.ts @@ -0,0 +1,178 @@ +// npx jest src/api/transform/caching/__tests__/vertex.test.ts + +import { Anthropic } from "@anthropic-ai/sdk" + +import { addCacheBreakpoints } from "../vertex" + +describe("addCacheBreakpoints (Vertex)", () => { + it("should return an empty array if input is empty", () => { + const messages: Anthropic.Messages.MessageParam[] = [] + const result = addCacheBreakpoints(messages) + expect(result).toEqual([]) + expect(result).not.toBe(messages) // Ensure new array. + }) + + it("should not add breakpoints if there are no user messages", () => { + const messages: Anthropic.Messages.MessageParam[] = [{ role: "assistant", content: "Hello" }] + const originalMessages = JSON.parse(JSON.stringify(messages)) + const result = addCacheBreakpoints(messages) + expect(result).toEqual(originalMessages) // Should be unchanged. + expect(result).not.toBe(messages) // Ensure new array. + }) + + it("should add a breakpoint to the only user message if only one exists", () => { + const messages: Anthropic.Messages.MessageParam[] = [{ role: "user", content: "User message 1" }] + const result = addCacheBreakpoints(messages) + + expect(result).toHaveLength(1) + + expect(result[0].content).toEqual([ + { type: "text", text: "User message 1", cache_control: { type: "ephemeral" } }, + ]) + + expect(result).not.toBe(messages) // Ensure new array. + }) + + it("should add breakpoints to both user messages if only two exist", () => { + const messages: Anthropic.Messages.MessageParam[] = [ + { role: "user", content: "User message 1" }, + { role: "user", content: "User message 2" }, + ] + + const result = addCacheBreakpoints(messages) + expect(result).toHaveLength(2) + + expect(result[0].content).toEqual([ + { type: "text", text: "User message 1", cache_control: { type: "ephemeral" } }, + ]) + + expect(result[1].content).toEqual([ + { type: "text", text: "User message 2", cache_control: { type: "ephemeral" } }, + ]) + + expect(result).not.toBe(messages) // Ensure new array. + }) + + it("should add breakpoints only to the last two user messages when more than two exist", () => { + const messages: Anthropic.Messages.MessageParam[] = [ + { role: "user", content: "User message 1" }, // Should not get breakpoint. + { role: "user", content: "User message 2" }, // Should get breakpoint. + { role: "user", content: "User message 3" }, // Should get breakpoint. + ] + + const originalMessage1 = JSON.parse(JSON.stringify(messages[0])) + const result = addCacheBreakpoints(messages) + + expect(result).toHaveLength(3) + expect(result[0]).toEqual(originalMessage1) + + expect(result[1].content).toEqual([ + { type: "text", text: "User message 2", cache_control: { type: "ephemeral" } }, + ]) + + expect(result[2].content).toEqual([ + { type: "text", text: "User message 3", cache_control: { type: "ephemeral" } }, + ]) + + expect(result).not.toBe(messages) // Ensure new array. + }) + + it("should handle assistant messages correctly when finding last two user messages", () => { + const messages: Anthropic.Messages.MessageParam[] = [ + { role: "user", content: "User message 1" }, // Should not get breakpoint. + { role: "assistant", content: "Assistant response 1" }, // Should be unchanged. + { role: "user", content: "User message 2" }, // Should get breakpoint (second to last user). + { role: "assistant", content: "Assistant response 2" }, // Should be unchanged. + { role: "user", content: "User message 3" }, // Should get breakpoint (last user). + { role: "assistant", content: "Assistant response 3" }, // Should be unchanged. + ] + const originalMessage1 = JSON.parse(JSON.stringify(messages[0])) + const originalAssistant1 = JSON.parse(JSON.stringify(messages[1])) + const originalAssistant2 = JSON.parse(JSON.stringify(messages[3])) + const originalAssistant3 = JSON.parse(JSON.stringify(messages[5])) + + const result = addCacheBreakpoints(messages) + expect(result).toHaveLength(6) + + expect(result[0]).toEqual(originalMessage1) + expect(result[1]).toEqual(originalAssistant1) + + expect(result[2].content).toEqual([ + { type: "text", text: "User message 2", cache_control: { type: "ephemeral" } }, + ]) + + expect(result[3]).toEqual(originalAssistant2) + + expect(result[4].content).toEqual([ + { type: "text", text: "User message 3", cache_control: { type: "ephemeral" } }, + ]) + + expect(result[5]).toEqual(originalAssistant3) + expect(result).not.toBe(messages) // Ensure new array. + }) + + it("should add breakpoint only to the last text part if content is an array", () => { + const messages: Anthropic.Messages.MessageParam[] = [ + { role: "user", content: "User message 1" }, // Gets breakpoint. + { + role: "user", // Gets breakpoint. + content: [ + { type: "text", text: "First text part." }, // No breakpoint. + { type: "image", source: { type: "base64", media_type: "image/png", data: "..." } }, + { type: "text", text: "Last text part." }, // Gets breakpoint. + ], + }, + ] + + const result = addCacheBreakpoints(messages) + expect(result).toHaveLength(2) + + expect(result[0].content).toEqual([ + { type: "text", text: "User message 1", cache_control: { type: "ephemeral" } }, + ]) + + expect(result[1].content).toEqual([ + { type: "text", text: "First text part." }, // Unchanged. + { type: "image", source: { type: "base64", media_type: "image/png", data: "..." } }, // Unchanged. + { type: "text", text: "Last text part.", cache_control: { type: "ephemeral" } }, // Breakpoint added. + ]) + + expect(result).not.toBe(messages) // Ensure new array. + }) + + it("should handle array content with no text parts gracefully", () => { + const messages: Anthropic.Messages.MessageParam[] = [ + { role: "user", content: "User message 1" }, // Gets breakpoint. + { + role: "user", // Gets breakpoint, but has no text part to add it to. + content: [{ type: "image", source: { type: "base64", media_type: "image/png", data: "..." } }], + }, + ] + + const originalMessage2 = JSON.parse(JSON.stringify(messages[1])) + + const result = addCacheBreakpoints(messages) + expect(result).toHaveLength(2) + + expect(result[0].content).toEqual([ + { type: "text", text: "User message 1", cache_control: { type: "ephemeral" } }, + ]) + + // Check second user message - should be unchanged as no text part found. + expect(result[1]).toEqual(originalMessage2) + expect(result).not.toBe(messages) // Ensure new array. + }) + + it("should not modify the original messages array", () => { + const messages: Anthropic.Messages.MessageParam[] = [ + { role: "user", content: "User message 1" }, + { role: "user", content: "User message 2" }, + ] + const originalMessagesCopy = JSON.parse(JSON.stringify(messages)) + + addCacheBreakpoints(messages) + + // Verify original array is untouched. + expect(messages).toEqual(originalMessagesCopy) + }) +}) diff --git a/src/api/transform/caching/anthropic.ts b/src/api/transform/caching/anthropic.ts new file mode 100644 index 00000000000..cff671a56ce --- /dev/null +++ b/src/api/transform/caching/anthropic.ts @@ -0,0 +1,41 @@ +import OpenAI from "openai" + +export function addCacheBreakpoints(systemPrompt: string, messages: OpenAI.Chat.ChatCompletionMessageParam[]) { + messages[0] = { + role: "system", + // @ts-ignore-next-line + content: [{ type: "text", text: systemPrompt, cache_control: { type: "ephemeral" } }], + } + + // Ensure all user messages have content in array format first + for (const msg of messages) { + if (msg.role === "user" && typeof msg.content === "string") { + msg.content = [{ type: "text", text: msg.content }] + } + } + + // Add `cache_control: ephemeral` to the last two user messages. + // (Note: this works because we only ever add one user message at a + // time, but if we added multiple we'd need to mark the user message + // before the last assistant message.) + messages + .filter((msg) => msg.role === "user") + .slice(-2) + .forEach((msg) => { + if (Array.isArray(msg.content)) { + // NOTE: This is fine since env details will always be added + // at the end. But if it wasn't there, and the user added a + // image_url type message, it would pop a text part before + // it and then move it after to the end. + let lastTextPart = msg.content.filter((part) => part.type === "text").pop() + + if (!lastTextPart) { + lastTextPart = { type: "text", text: "..." } + msg.content.push(lastTextPart) + } + + // @ts-ignore-next-line + lastTextPart["cache_control"] = { type: "ephemeral" } + } + }) +} diff --git a/src/api/transform/caching/gemini.ts b/src/api/transform/caching/gemini.ts new file mode 100644 index 00000000000..66d43e85553 --- /dev/null +++ b/src/api/transform/caching/gemini.ts @@ -0,0 +1,47 @@ +import OpenAI from "openai" + +export function addCacheBreakpoints( + systemPrompt: string, + messages: OpenAI.Chat.ChatCompletionMessageParam[], + frequency: number = 10, +) { + // *Always* cache the system prompt. + messages[0] = { + role: "system", + // @ts-ignore-next-line + content: [{ type: "text", text: systemPrompt, cache_control: { type: "ephemeral" } }], + } + + // Add breakpoints every N user messages based on frequency. + let count = 0 + + for (const msg of messages) { + if (msg.role !== "user") { + continue + } + + // Ensure content is in array format for potential modification. + if (typeof msg.content === "string") { + msg.content = [{ type: "text", text: msg.content }] + } + + const isNthMessage = count % frequency === frequency - 1 + + if (isNthMessage) { + if (Array.isArray(msg.content)) { + // Find the last text part to add the cache control to. + let lastTextPart = msg.content.filter((part) => part.type === "text").pop() + + if (!lastTextPart) { + lastTextPart = { type: "text", text: "..." } // Add a placeholder if no text part exists. + msg.content.push(lastTextPart) + } + + // @ts-ignore-next-line - Add cache control property + lastTextPart["cache_control"] = { type: "ephemeral" } + } + } + + count++ + } +} diff --git a/src/api/transform/caching/vertex.ts b/src/api/transform/caching/vertex.ts new file mode 100644 index 00000000000..48bf2615873 --- /dev/null +++ b/src/api/transform/caching/vertex.ts @@ -0,0 +1,49 @@ +import { Anthropic } from "@anthropic-ai/sdk" + +export function addCacheBreakpoints(messages: Anthropic.Messages.MessageParam[]) { + // Find indices of user messages that we want to cache. + // We only cache the last two user messages to stay within the 4-block limit + // (1 block for system + 1 block each for last two user messages = 3 total). + const indices = messages.reduce((acc, msg, i) => (msg.role === "user" ? [...acc, i] : acc), [] as number[]) + + // Only cache the last two user messages. + const lastIndex = indices[indices.length - 1] ?? -1 + const secondLastIndex = indices[indices.length - 2] ?? -1 + + return messages.map((message, index) => + message.role !== "assistant" && (index === lastIndex || index === secondLastIndex) + ? cachedMessage(message) + : message, + ) +} + +function cachedMessage(message: Anthropic.Messages.MessageParam): Anthropic.Messages.MessageParam { + // For string content, we convert to array format with optional cache control. + if (typeof message.content === "string") { + return { + ...message, + // For string content, we only have one block so it's always the last block. + content: [{ type: "text" as const, text: message.content, cache_control: { type: "ephemeral" } }], + } + } + + // For array content, find the last text block index once before mapping. + const lastTextBlockIndex = message.content.reduce( + (lastIndex, content, index) => (content.type === "text" ? index : lastIndex), + -1, + ) + + // Then use this pre-calculated index in the map function. + return { + ...message, + content: message.content.map((content, index) => + content.type === "text" + ? { + ...content, + // Check if this is the last text block using our pre-calculated index. + ...(index === lastTextBlockIndex && { cache_control: { type: "ephemeral" } }), + } + : content, + ), + } +} diff --git a/src/api/transform/vertex-caching.ts b/src/api/transform/vertex-caching.ts deleted file mode 100644 index 2d866bd13b6..00000000000 --- a/src/api/transform/vertex-caching.ts +++ /dev/null @@ -1,70 +0,0 @@ -import { Anthropic } from "@anthropic-ai/sdk" - -interface VertexTextBlock { - type: "text" - text: string - cache_control?: { type: "ephemeral" } -} - -interface VertexImageBlock { - type: "image" - source: { - type: "base64" - media_type: "image/jpeg" | "image/png" | "image/gif" | "image/webp" - data: string - } -} - -type VertexContentBlock = VertexTextBlock | VertexImageBlock - -interface VertexMessage extends Omit { - content: string | VertexContentBlock[] -} - -export function formatMessageForCache(message: Anthropic.Messages.MessageParam, shouldCache: boolean): VertexMessage { - // Assistant messages are kept as-is since they can't be cached - if (message.role === "assistant") { - return message as VertexMessage - } - - // For string content, we convert to array format with optional cache control - if (typeof message.content === "string") { - return { - ...message, - content: [ - { - type: "text" as const, - text: message.content, - // For string content, we only have one block so it's always the last - ...(shouldCache && { cache_control: { type: "ephemeral" } }), - }, - ], - } - } - - // For array content, find the last text block index once before mapping - const lastTextBlockIndex = message.content.reduce( - (lastIndex, content, index) => (content.type === "text" ? index : lastIndex), - -1, - ) - - // Then use this pre-calculated index in the map function. - return { - ...message, - content: message.content.map((content, contentIndex) => { - // Images and other non-text content are passed through unchanged. - if (content.type === "image") { - return content as VertexImageBlock - } - - // Check if this is the last text block using our pre-calculated index. - const isLastTextBlock = contentIndex === lastTextBlockIndex - - return { - type: "text" as const, - text: (content as { text: string }).text, - ...(shouldCache && isLastTextBlock && { cache_control: { type: "ephemeral" } }), - } - }), - } -} diff --git a/src/core/config/CustomModesManager.ts b/src/core/config/CustomModesManager.ts index efa3366aee2..eed7dee9485 100644 --- a/src/core/config/CustomModesManager.ts +++ b/src/core/config/CustomModesManager.ts @@ -11,9 +11,13 @@ import { GlobalFileNames } from "../../shared/globalFileNames" const ROOMODES_FILENAME = ".roomodes" export class CustomModesManager { + private static readonly cacheTTL = 10_000 + private disposables: vscode.Disposable[] = [] private isWriting = false private writeQueue: Array<() => Promise> = [] + private cachedModes: ModeConfig[] | null = null + private cachedAt: number = 0 constructor( private readonly context: vscode.ExtensionContext, @@ -25,6 +29,7 @@ export class CustomModesManager { private async queueWrite(operation: () => Promise): Promise { this.writeQueue.push(operation) + if (!this.isWriting) { await this.processWriteQueue() } @@ -36,9 +41,11 @@ export class CustomModesManager { } this.isWriting = true + try { while (this.writeQueue.length > 0) { const operation = this.writeQueue.shift() + if (operation) { await operation() } @@ -50,9 +57,11 @@ export class CustomModesManager { private async getWorkspaceRoomodes(): Promise { const workspaceFolders = vscode.workspace.workspaceFolders + if (!workspaceFolders || workspaceFolders.length === 0) { return undefined } + const workspaceRoot = getWorkspacePath() const roomodesPath = path.join(workspaceRoot, ROOMODES_FILENAME) const exists = await fileExistsAtPath(roomodesPath) @@ -73,10 +82,7 @@ export class CustomModesManager { const source = isRoomodes ? ("project" as const) : ("global" as const) // Add source to each mode - return result.data.customModes.map((mode) => ({ - ...mode, - source, - })) + return result.data.customModes.map((mode) => ({ ...mode, source })) } catch (error) { const errorMsg = `Failed to load modes from ${filePath}: ${error instanceof Error ? error.message : String(error)}` console.error(`[CustomModesManager] ${errorMsg}`) @@ -92,10 +98,7 @@ export class CustomModesManager { for (const mode of projectModes) { if (!slugs.has(mode.slug)) { slugs.add(mode.slug) - merged.push({ - ...mode, - source: "project", - }) + merged.push({ ...mode, source: "project" }) } } @@ -103,25 +106,22 @@ export class CustomModesManager { for (const mode of globalModes) { if (!slugs.has(mode.slug)) { slugs.add(mode.slug) - merged.push({ - ...mode, - source: "global", - }) + merged.push({ ...mode, source: "global" }) } } return merged } - async getCustomModesFilePath(): Promise { + public async getCustomModesFilePath(): Promise { const settingsDir = await this.ensureSettingsDirectoryExists() const filePath = path.join(settingsDir, GlobalFileNames.customModes) const fileExists = await fileExistsAtPath(filePath) + if (!fileExists) { - await this.queueWrite(async () => { - await fs.writeFile(filePath, JSON.stringify({ customModes: [] }, null, 2)) - }) + await this.queueWrite(() => fs.writeFile(filePath, JSON.stringify({ customModes: [] }, null, 2))) } + return filePath } @@ -133,10 +133,12 @@ export class CustomModesManager { vscode.workspace.onDidSaveTextDocument(async (document) => { if (arePathsEqual(document.uri.fsPath, settingsPath)) { const content = await fs.readFile(settingsPath, "utf-8") + const errorMessage = "Invalid custom modes format. Please ensure your settings follow the correct JSON format." let config: any + try { config = JSON.parse(content) } catch (error) { @@ -159,6 +161,7 @@ export class CustomModesManager { // Merge modes from both sources (.roomodes takes precedence) const mergedModes = await this.mergeCustomModes(roomodesModes, result.data.customModes) await this.context.globalState.update("customModes", mergedModes) + this.clearCache() await this.onUpdate() } }), @@ -166,6 +169,7 @@ export class CustomModesManager { // Watch .roomodes file if it exists const roomodesPath = await this.getWorkspaceRoomodes() + if (roomodesPath) { this.disposables.push( vscode.workspace.onDidSaveTextDocument(async (document) => { @@ -175,6 +179,7 @@ export class CustomModesManager { // .roomodes takes precedence const mergedModes = await this.mergeCustomModes(roomodesModes, settingsModes) await this.context.globalState.update("customModes", mergedModes) + this.clearCache() await this.onUpdate() } }), @@ -182,32 +187,39 @@ export class CustomModesManager { } } - async getCustomModes(): Promise { - // Get modes from settings file + public async getCustomModes(): Promise { + // Check if we have a valid cached result. + const now = Date.now() + + if (this.cachedModes && now - this.cachedAt < CustomModesManager.cacheTTL) { + return this.cachedModes + } + + // Get modes from settings file. const settingsPath = await this.getCustomModesFilePath() const settingsModes = await this.loadModesFromFile(settingsPath) - // Get modes from .roomodes if it exists + // Get modes from .roomodes if it exists. const roomodesPath = await this.getWorkspaceRoomodes() const roomodesModes = roomodesPath ? await this.loadModesFromFile(roomodesPath) : [] - // Create maps to store modes by source + // Create maps to store modes by source. const projectModes = new Map() const globalModes = new Map() - // Add project modes (they take precedence) + // Add project modes (they take precedence). for (const mode of roomodesModes) { projectModes.set(mode.slug, { ...mode, source: "project" as const }) } - // Add global modes + // Add global modes. for (const mode of settingsModes) { if (!projectModes.has(mode.slug)) { globalModes.set(mode.slug, { ...mode, source: "global" as const }) } } - // Combine modes in the correct order: project modes first, then global modes + // Combine modes in the correct order: project modes first, then global modes. const mergedModes = [ ...roomodesModes.map((mode) => ({ ...mode, source: "project" as const })), ...settingsModes @@ -216,22 +228,30 @@ export class CustomModesManager { ] await this.context.globalState.update("customModes", mergedModes) + + this.cachedModes = mergedModes + this.cachedAt = now + return mergedModes } - async updateCustomMode(slug: string, config: ModeConfig): Promise { + + public async updateCustomMode(slug: string, config: ModeConfig): Promise { try { const isProjectMode = config.source === "project" let targetPath: string if (isProjectMode) { const workspaceFolders = vscode.workspace.workspaceFolders + if (!workspaceFolders || workspaceFolders.length === 0) { logger.error("Failed to update project mode: No workspace folder found", { slug }) throw new Error("No workspace folder found for project-specific mode") } + const workspaceRoot = getWorkspacePath() targetPath = path.join(workspaceRoot, ROOMODES_FILENAME) const exists = await fileExistsAtPath(targetPath) + logger.info(`${exists ? "Updating" : "Creating"} project mode in ${ROOMODES_FILENAME}`, { slug, workspace: workspaceRoot, @@ -241,7 +261,7 @@ export class CustomModesManager { } await this.queueWrite(async () => { - // Ensure source is set correctly based on target file + // Ensure source is set correctly based on target file. const modeWithSource = { ...config, source: isProjectMode ? ("project" as const) : ("global" as const), @@ -253,6 +273,7 @@ export class CustomModesManager { return updatedModes }) + this.clearCache() await this.refreshMergedState() }) } catch (error) { @@ -261,22 +282,26 @@ export class CustomModesManager { vscode.window.showErrorMessage(`Failed to update custom mode: ${errorMessage}`) } } + private async updateModesInFile(filePath: string, operation: (modes: ModeConfig[]) => ModeConfig[]): Promise { let content = "{}" + try { content = await fs.readFile(filePath, "utf-8") } catch (error) { - // File might not exist yet + // File might not exist yet. content = JSON.stringify({ customModes: [] }) } let settings + try { settings = JSON.parse(content) } catch (error) { console.error(`[CustomModesManager] Failed to parse JSON from ${filePath}:`, error) settings = { customModes: [] } } + settings.customModes = operation(settings.customModes || []) await fs.writeFile(filePath, JSON.stringify(settings, null, 2), "utf-8") } @@ -290,10 +315,13 @@ export class CustomModesManager { const mergedModes = await this.mergeCustomModes(roomodesModes, settingsModes) await this.context.globalState.update("customModes", mergedModes) + + this.clearCache() + await this.onUpdate() } - async deleteCustomMode(slug: string): Promise { + public async deleteCustomMode(slug: string): Promise { try { const settingsPath = await this.getCustomModesFilePath() const roomodesPath = await this.getWorkspaceRoomodes() @@ -320,6 +348,8 @@ export class CustomModesManager { await this.updateModesInFile(settingsPath, (modes) => modes.filter((m) => m.slug !== slug)) } + // Clear cache when modes are deleted + this.clearCache() await this.refreshMergedState() }) } catch (error) { @@ -335,11 +365,12 @@ export class CustomModesManager { return settingsDir } - async resetCustomModes(): Promise { + public async resetCustomModes(): Promise { try { const filePath = await this.getCustomModesFilePath() await fs.writeFile(filePath, JSON.stringify({ customModes: [] }, null, 2)) await this.context.globalState.update("customModes", []) + this.clearCache() await this.onUpdate() } catch (error) { vscode.window.showErrorMessage( @@ -348,10 +379,16 @@ export class CustomModesManager { } } + private clearCache(): void { + this.cachedModes = null + this.cachedAt = 0 + } + dispose(): void { for (const disposable of this.disposables) { disposable.dispose() } + this.disposables = [] } } diff --git a/src/core/config/__tests__/CustomModesManager.test.ts b/src/core/config/__tests__/CustomModesManager.test.ts index a5de1414835..065f1478285 100644 --- a/src/core/config/__tests__/CustomModesManager.test.ts +++ b/src/core/config/__tests__/CustomModesManager.test.ts @@ -131,6 +131,257 @@ describe("CustomModesManager", () => { expect(modes).toHaveLength(1) expect(modes[0].slug).toBe("mode1") }) + + it("should memoize results for 10 seconds", async () => { + // Setup test data + const settingsModes = [{ slug: "mode1", name: "Mode 1", roleDefinition: "Role 1", groups: ["read"] }] + ;(fs.readFile as jest.Mock).mockImplementation(async (path: string) => { + if (path === mockSettingsPath) { + return JSON.stringify({ customModes: settingsModes }) + } + throw new Error("File not found") + }) + + // Mock fileExistsAtPath to only return true for settings path + ;(fileExistsAtPath as jest.Mock).mockImplementation(async (path: string) => { + return path === mockSettingsPath + }) + + // First call should read from file + const firstResult = await manager.getCustomModes() + + // Reset mock to verify it's not called again + jest.clearAllMocks() + + // Setup mocks again for second call + ;(fileExistsAtPath as jest.Mock).mockImplementation(async (path: string) => { + return path === mockSettingsPath + }) + ;(fs.readFile as jest.Mock).mockImplementation(async (path: string) => { + if (path === mockSettingsPath) { + return JSON.stringify({ customModes: settingsModes }) + } + throw new Error("File not found") + }) + + // Second call should use cached result + const secondResult = await manager.getCustomModes() + expect(fs.readFile).not.toHaveBeenCalled() + expect(secondResult).toHaveLength(1) + expect(secondResult[0].slug).toBe("mode1") + + // Results should be the same object (not just equal) + expect(secondResult).toBe(firstResult) + }) + + it("should invalidate cache when modes are updated", async () => { + // Setup initial data + const settingsModes = [{ slug: "mode1", name: "Mode 1", roleDefinition: "Role 1", groups: ["read"] }] + ;(fs.readFile as jest.Mock).mockImplementation(async (path: string) => { + if (path === mockSettingsPath) { + return JSON.stringify({ customModes: settingsModes }) + } + throw new Error("File not found") + }) + ;(fs.writeFile as jest.Mock).mockResolvedValue(undefined) + + // First call to cache the result + await manager.getCustomModes() + + // Reset mocks to track new calls + jest.clearAllMocks() + + // Update a mode + const updatedMode: ModeConfig = { + slug: "mode1", + name: "Updated Mode 1", + roleDefinition: "Updated Role 1", + groups: ["read"], + source: "global", + } + + // Mock the updated file content + const updatedSettingsModes = [updatedMode] + ;(fs.readFile as jest.Mock).mockImplementation(async (path: string) => { + if (path === mockSettingsPath) { + return JSON.stringify({ customModes: updatedSettingsModes }) + } + throw new Error("File not found") + }) + + // Update the mode + await manager.updateCustomMode("mode1", updatedMode) + + // Reset mocks again + jest.clearAllMocks() + + // Next call should read from file again (cache invalidated) + await manager.getCustomModes() + expect(fs.readFile).toHaveBeenCalled() + }) + + it("should invalidate cache when modes are deleted", async () => { + // Setup initial data + const settingsModes = [{ slug: "mode1", name: "Mode 1", roleDefinition: "Role 1", groups: ["read"] }] + ;(fs.readFile as jest.Mock).mockImplementation(async (path: string) => { + if (path === mockSettingsPath) { + return JSON.stringify({ customModes: settingsModes }) + } + throw new Error("File not found") + }) + ;(fs.writeFile as jest.Mock).mockResolvedValue(undefined) + + // First call to cache the result + await manager.getCustomModes() + + // Reset mocks to track new calls + jest.clearAllMocks() + + // Delete a mode + await manager.deleteCustomMode("mode1") + + // Mock the updated file content (empty) + ;(fs.readFile as jest.Mock).mockImplementation(async (path: string) => { + if (path === mockSettingsPath) { + return JSON.stringify({ customModes: [] }) + } + throw new Error("File not found") + }) + + // Reset mocks again + jest.clearAllMocks() + + // Next call should read from file again (cache invalidated) + await manager.getCustomModes() + expect(fs.readFile).toHaveBeenCalled() + }) + + it("should invalidate cache when modes are updated (simulating file changes)", async () => { + // Setup initial data + const settingsModes = [{ slug: "mode1", name: "Mode 1", roleDefinition: "Role 1", groups: ["read"] }] + ;(fs.readFile as jest.Mock).mockImplementation(async (path: string) => { + if (path === mockSettingsPath) { + return JSON.stringify({ customModes: settingsModes }) + } + throw new Error("File not found") + }) + ;(fileExistsAtPath as jest.Mock).mockImplementation(async (path: string) => { + return path === mockSettingsPath + }) + ;(fs.writeFile as jest.Mock).mockResolvedValue(undefined) + + // First call to cache the result + await manager.getCustomModes() + + // Reset mocks to track new calls + jest.clearAllMocks() + + // Setup for update + const updatedMode: ModeConfig = { + slug: "mode1", + name: "Updated Mode 1", + roleDefinition: "Updated Role 1", + groups: ["read"], + source: "global", + } + + // Mock the updated file content + const updatedSettingsModes = [updatedMode] + ;(fs.readFile as jest.Mock).mockImplementation(async (path: string) => { + if (path === mockSettingsPath) { + return JSON.stringify({ customModes: updatedSettingsModes }) + } + throw new Error("File not found") + }) + + // Simulate a file change by updating a mode + // This should invalidate the cache + await manager.updateCustomMode("mode1", updatedMode) + + // Reset mocks again + jest.clearAllMocks() + + // Setup mocks again + ;(fileExistsAtPath as jest.Mock).mockImplementation(async (path: string) => { + return path === mockSettingsPath + }) + ;(fs.readFile as jest.Mock).mockImplementation(async (path: string) => { + if (path === mockSettingsPath) { + return JSON.stringify({ customModes: updatedSettingsModes }) + } + throw new Error("File not found") + }) + + // Next call should read from file again (cache was invalidated by the update) + await manager.getCustomModes() + expect(fs.readFile).toHaveBeenCalled() + }) + + it("should refresh cache after TTL expires", async () => { + // Setup test data + const settingsModes = [{ slug: "mode1", name: "Mode 1", roleDefinition: "Role 1", groups: ["read"] }] + ;(fs.readFile as jest.Mock).mockImplementation(async (path: string) => { + if (path === mockSettingsPath) { + return JSON.stringify({ customModes: settingsModes }) + } + throw new Error("File not found") + }) + ;(fileExistsAtPath as jest.Mock).mockImplementation(async (path: string) => { + return path === mockSettingsPath + }) + + // Mock Date.now to control time + const originalDateNow = Date.now + let currentTime = 1000 + Date.now = jest.fn(() => currentTime) + + try { + // First call should read from file + await manager.getCustomModes() + + // Reset mock to verify it's not called again + jest.clearAllMocks() + + // Setup mocks again for second call + ;(fileExistsAtPath as jest.Mock).mockImplementation(async (path: string) => { + return path === mockSettingsPath + }) + ;(fs.readFile as jest.Mock).mockImplementation(async (path: string) => { + if (path === mockSettingsPath) { + return JSON.stringify({ customModes: settingsModes }) + } + throw new Error("File not found") + }) + + // Second call within TTL should use cache + await manager.getCustomModes() + expect(fs.readFile).not.toHaveBeenCalled() + + // Advance time beyond TTL (10 seconds) + currentTime += 11000 + + // Reset mocks again + jest.clearAllMocks() + + // Setup mocks again for third call + ;(fileExistsAtPath as jest.Mock).mockImplementation(async (path: string) => { + return path === mockSettingsPath + }) + ;(fs.readFile as jest.Mock).mockImplementation(async (path: string) => { + if (path === mockSettingsPath) { + return JSON.stringify({ customModes: settingsModes }) + } + throw new Error("File not found") + }) + + // Call after TTL should read from file again + await manager.getCustomModes() + expect(fs.readFile).toHaveBeenCalled() + } finally { + // Restore original Date.now + Date.now = originalDateNow + } + }) }) describe("updateCustomMode", () => { diff --git a/src/core/tools/executeCommandTool.ts b/src/core/tools/executeCommandTool.ts index 7db12668c86..4bd303904f7 100644 --- a/src/core/tools/executeCommandTool.ts +++ b/src/core/tools/executeCommandTool.ts @@ -79,7 +79,6 @@ export async function executeCommandTool( } catch (error: unknown) { const status: CommandExecutionStatus = { executionId, status: "fallback" } clineProvider?.postMessageToWebview({ type: "commandExecutionStatus", text: JSON.stringify(status) }) - clineProvider?.setValue("terminalShellIntegrationDisabled", true) await cline.say("shell_integration_warning") if (error instanceof ShellIntegrationError) { @@ -175,6 +174,7 @@ export async function executeCommand( completed = true }, onShellExecutionStarted: (pid: number | undefined) => { + console.log(`[executeCommand] onShellExecutionStarted: ${pid}`) const status: CommandExecutionStatus = { executionId, status: "started", pid, command } clineProvider?.postMessageToWebview({ type: "commandExecutionStatus", text: JSON.stringify(status) }) }, diff --git a/src/core/webview/ClineProvider.ts b/src/core/webview/ClineProvider.ts index 268b7050f8f..23eb295c9eb 100644 --- a/src/core/webview/ClineProvider.ts +++ b/src/core/webview/ClineProvider.ts @@ -1198,6 +1198,7 @@ export class ClineProvider extends EventEmitter implements customSupportPrompts, enhancementApiConfigId, autoApprovalEnabled, + customModes, experiments, maxOpenTabsContext, maxWorkspaceFiles, @@ -1277,7 +1278,7 @@ export class ClineProvider extends EventEmitter implements customSupportPrompts: customSupportPrompts ?? {}, enhancementApiConfigId, autoApprovalEnabled: autoApprovalEnabled ?? true, - customModes: await this.customModesManager.getCustomModes(), + customModes, experiments: experiments ?? experimentDefault, mcpServers: this.mcpHub?.getAllServers() ?? [], maxOpenTabsContext: maxOpenTabsContext ?? 20, diff --git a/src/integrations/terminal/ExecaTerminalProcess.ts b/src/integrations/terminal/ExecaTerminalProcess.ts index 63b772e5db0..7764ecadbef 100644 --- a/src/integrations/terminal/ExecaTerminalProcess.ts +++ b/src/integrations/terminal/ExecaTerminalProcess.ts @@ -1,12 +1,14 @@ import { execa, ExecaError } from "execa" +import psTree from "ps-tree" +import process from "process" import type { RooTerminal } from "./types" import { BaseTerminalProcess } from "./BaseTerminalProcess" export class ExecaTerminalProcess extends BaseTerminalProcess { private terminalRef: WeakRef - private controller?: AbortController private aborted = false + private pid?: number constructor(terminal: RooTerminal) { super() @@ -30,7 +32,6 @@ export class ExecaTerminalProcess extends BaseTerminalProcess { public override async run(command: string) { this.command = command - this.controller = new AbortController() try { this.isHot = true @@ -38,10 +39,10 @@ export class ExecaTerminalProcess extends BaseTerminalProcess { const subprocess = execa({ shell: true, cwd: this.terminal.getCurrentWorkingDirectory(), - cancelSignal: this.controller.signal, all: true, })`${command}` + this.pid = subprocess.pid const stream = subprocess.iterable({ from: "all", preserveNewlines: true }) this.terminal.setActiveStream(stream, subprocess.pid) @@ -116,7 +117,37 @@ export class ExecaTerminalProcess extends BaseTerminalProcess { public override abort() { this.aborted = true - this.controller?.abort() + + if (this.pid) { + psTree(this.pid, async (err, children) => { + if (!err) { + const pids = children.map((p) => parseInt(p.PID)) + + for (const pid of pids) { + try { + process.kill(pid, "SIGINT") + } catch (e) { + console.warn( + `[ExecaTerminalProcess] Failed to send SIGINT to child PID ${pid}: ${e instanceof Error ? e.message : String(e)}`, + ) + // Optionally try SIGTERM or SIGKILL on failure, depending on desired behavior. + } + } + } else { + console.error( + `[ExecaTerminalProcess] Failed to get process tree for PID ${this.pid}: ${err.message}`, + ) + } + }) + + try { + process.kill(this.pid, "SIGINT") + } catch (e) { + console.warn( + `[ExecaTerminalProcess] Failed to send SIGINT to main PID ${this.pid}: ${e instanceof Error ? e.message : String(e)}`, + ) + } + } } public override hasUnretrievedOutput() { diff --git a/src/shared/modes.ts b/src/shared/modes.ts index b1a0038fd83..257f4bcf946 100644 --- a/src/shared/modes.ts +++ b/src/shared/modes.ts @@ -90,7 +90,7 @@ export const modes: readonly ModeConfig[] = [ slug: "orchestrator", name: "🪃 Orchestrator", roleDefinition: - "You are PearAI (Powered by Roo Code / Cline), a strategic workflow orchestrator who coordinates complex tasks by delegating them to appropriate specialized modes. You have a comprehensive understanding of each mode's capabilities and limitations, allowing you to effectively break down complex problems into discrete tasks that can be solved by different specialists.", + "You are PearAI Agent (Powered by Roo Code / Cline), a strategic workflow orchestrator who coordinates complex tasks by delegating them to appropriate specialized modes. You have a comprehensive understanding of each mode's capabilities and limitations, allowing you to effectively break down complex problems into discrete tasks that can be solved by different specialists.", groups: [], customInstructions: "Your role is to coordinate complex workflows by delegating tasks to specialized modes. As an orchestrator, you should:\n\n1. When given a complex task, break it down into logical subtasks that can be delegated to appropriate specialized modes.\n\n2. For each subtask, use the `new_task` tool to delegate. Choose the most appropriate mode for the subtask's specific goal and provide comprehensive instructions in the `message` parameter. These instructions must include:\n * All necessary context from the parent task or previous subtasks required to complete the work.\n * A clearly defined scope, specifying exactly what the subtask should accomplish.\n * An explicit statement that the subtask should *only* perform the work outlined in these instructions and not deviate.\n * An instruction for the subtask to signal completion by using the `attempt_completion` tool, providing a concise yet thorough summary of the outcome in the `result` parameter, keeping in mind that this summary will be the source of truth used to keep track of what was completed on this project.\n * A statement that these specific instructions supersede any conflicting general instructions the subtask's mode might have.\n\n3. Track and manage the progress of all subtasks. When a subtask is completed, analyze its results and determine the next steps.\n\n4. Help the user understand how the different subtasks fit together in the overall workflow. Provide clear reasoning about why you're delegating specific tasks to specific modes.\n\n5. When all subtasks are completed, synthesize the results and provide a comprehensive overview of what was accomplished.\n\n6. Ask clarifying questions when necessary to better understand how to break down complex tasks effectively.\n\n7. Suggest improvements to the workflow based on the results of completed subtasks.\n\nUse subtasks to maintain clarity. If a request significantly shifts focus or requires a different expertise (mode), consider creating a subtask rather than overloading the current one.", diff --git a/webview-ui/src/components/chat/CommandExecution.tsx b/webview-ui/src/components/chat/CommandExecution.tsx index 2a5600d06ba..59948458f6c 100644 --- a/webview-ui/src/components/chat/CommandExecution.tsx +++ b/webview-ui/src/components/chat/CommandExecution.tsx @@ -27,7 +27,7 @@ export const CommandExecution = ({ executionId, text }: CommandExecutionProps) = const [status, setStatus] = useState(null) const [output, setOutput] = useState("") - const [command, setCommand] = useState("") + const [command, setCommand] = useState(text) const lines = useMemo( () => [`$ ${command}`, ...output.split("\n").filter((line) => line.trim() !== "")], @@ -79,7 +79,9 @@ export const CommandExecution = ({ executionId, text }: CommandExecutionProps) = if (!status && text) { const index = text.indexOf(COMMAND_OUTPUT_STRING) - if (index !== -1) { + if (index === -1) { + setCommand(text) + } else { setCommand(text.slice(0, index)) setOutput(text.slice(index + COMMAND_OUTPUT_STRING.length)) } diff --git a/webview-ui/src/components/chat/CommandExecutionError.tsx b/webview-ui/src/components/chat/CommandExecutionError.tsx index 14041b7dca1..3c8c6273c19 100644 --- a/webview-ui/src/components/chat/CommandExecutionError.tsx +++ b/webview-ui/src/components/chat/CommandExecutionError.tsx @@ -11,7 +11,7 @@ export const CommandExecutionError = () => { }, []) return ( -
+
diff --git a/webview-ui/src/components/settings/ApiOptions.tsx b/webview-ui/src/components/settings/ApiOptions.tsx index 2cdd577ac76..4fcb2ae5924 100644 --- a/webview-ui/src/components/settings/ApiOptions.tsx +++ b/webview-ui/src/components/settings/ApiOptions.tsx @@ -3,8 +3,13 @@ import { useDebounce, useEvent } from "react-use" import { Trans } from "react-i18next" import { LanguageModelChatSelector } from "vscode" import { Checkbox } from "vscrui" -import { VSCodeLink, VSCodeRadio, VSCodeRadioGroup, VSCodeTextField } from "@vscode/webview-ui-toolkit/react" -import { VSCodeButton } from "@vscode/webview-ui-toolkit/react" +import { + VSCodeButton, + VSCodeLink, + VSCodeRadio, + VSCodeRadioGroup, + VSCodeTextField, +} from "@vscode/webview-ui-toolkit/react" import { ExternalLinkIcon } from "@radix-ui/react-icons" import { ReasoningEffort as ReasoningEffortType } from "@roo/schemas" @@ -87,7 +92,7 @@ const ApiOptions = ({ useEffect(() => { const propHeaders = apiConfiguration?.openAiHeaders || {} if (JSON.stringify(customHeaders) !== JSON.stringify(Object.entries(propHeaders))) setCustomHeaders(Object.entries(propHeaders)) - }, [apiConfiguration?.openAiHeaders]) + }, [apiConfiguration?.openAiHeaders, customHeaders]) const [anthropicBaseUrlSelected, setAnthropicBaseUrlSelected] = useState(!!apiConfiguration?.anthropicBaseUrl) const [openAiNativeBaseUrlSelected, setOpenAiNativeBaseUrlSelected] = useState( diff --git a/webview-ui/src/components/settings/ExperimentalSettings.tsx b/webview-ui/src/components/settings/ExperimentalSettings.tsx index 5e060832cf0..6270ded6e80 100644 --- a/webview-ui/src/components/settings/ExperimentalSettings.tsx +++ b/webview-ui/src/components/settings/ExperimentalSettings.tsx @@ -6,13 +6,12 @@ import { EXPERIMENT_IDS, experimentConfigsMap, ExperimentId } from "@roo/shared/ import { cn } from "@/lib/utils" -import { SetCachedStateField, SetExperimentEnabled } from "./types" +import { SetExperimentEnabled } from "./types" import { SectionHeader } from "./SectionHeader" import { Section } from "./Section" import { ExperimentalFeature } from "./ExperimentalFeature" type ExperimentalSettingsProps = HTMLAttributes & { - setCachedStateField: SetCachedStateField<"terminalOutputLineLimit" | "maxOpenTabsContext"> experiments: Record setExperimentEnabled: SetExperimentEnabled } diff --git a/webview-ui/src/components/settings/SettingsView.tsx b/webview-ui/src/components/settings/SettingsView.tsx index 53ebae52c26..30e2fe5c2b3 100644 --- a/webview-ui/src/components/settings/SettingsView.tsx +++ b/webview-ui/src/components/settings/SettingsView.tsx @@ -500,11 +500,7 @@ const SettingsView = forwardRef(({ onDone, t
- +
diff --git a/webview-ui/src/i18n/locales/ca/chat.json b/webview-ui/src/i18n/locales/ca/chat.json index 49b81b7b446..b8d943380ea 100644 --- a/webview-ui/src/i18n/locales/ca/chat.json +++ b/webview-ui/src/i18n/locales/ca/chat.json @@ -90,6 +90,7 @@ } }, "selectMode": "Selecciona el mode d'interacció", + "selectApiConfig": "Seleccioneu la configuració de l'API", "enhancePrompt": "Millora la sol·licitud amb context addicional", "addImages": "Afegeix imatges al missatge", "sendMessage": "Envia el missatge", @@ -233,10 +234,9 @@ } }, "systemPromptWarning": "ADVERTÈNCIA: S'ha activat una substitució personalitzada d'instruccions del sistema. Això pot trencar greument la funcionalitat i causar un comportament impredictible.", - "selectApiConfig": "Seleccioneu la configuració de l'API", "shellIntegration": { - "title": "Integració de Shell no disponible", - "description": "La teva ordre s'està executant sense la integració de shell de VSCode. Pots tornar a activar la integració de shell a la secció Terminal de la configuració de Roo Code.", + "title": "Advertència d'execució d'ordres", + "description": "La teva ordre s'està executant sense la integració de shell del terminal VSCode. Per suprimir aquest advertiment, pots desactivar la integració de shell a la secció Terminal de la configuració de Roo Code o solucionar problemes d'integració del terminal VSCode utilitzant l'enllaç a continuació.", "troubleshooting": "Fes clic aquí per a la documentació d'integració de shell." } } diff --git a/webview-ui/src/i18n/locales/ca/settings.json b/webview-ui/src/i18n/locales/ca/settings.json index aa1c5178327..badeaf63bb9 100644 --- a/webview-ui/src/i18n/locales/ca/settings.json +++ b/webview-ui/src/i18n/locales/ca/settings.json @@ -344,7 +344,7 @@ }, "zshOhMy": { "label": "Habilita la integració Oh My Zsh", - "description": "Quan està habilitat, estableix ITERM_SHELL_INTEGRATION_INSTALLED=Yes per habilitar les característiques d'integració del shell Oh My Zsh. (experimental)" + "description": "Quan està habilitat, estableix ITERM_SHELL_INTEGRATION_INSTALLED=Yes per habilitar les característiques d'integració del shell Oh My Zsh. Aplicar aquesta configuració pot requerir reiniciar l'IDE. (experimental)" }, "zshP10k": { "label": "Habilita la integració Powerlevel10k", diff --git a/webview-ui/src/i18n/locales/de/chat.json b/webview-ui/src/i18n/locales/de/chat.json index 81fcd798a20..aad2e43f5ac 100644 --- a/webview-ui/src/i18n/locales/de/chat.json +++ b/webview-ui/src/i18n/locales/de/chat.json @@ -90,6 +90,7 @@ } }, "selectMode": "Interaktionsmodus auswählen", + "selectApiConfig": "API-Konfiguration auswählen", "enhancePrompt": "Prompt mit zusätzlichem Kontext verbessern", "addImages": "Bilder zur Nachricht hinzufügen", "sendMessage": "Nachricht senden", @@ -233,10 +234,9 @@ } }, "systemPromptWarning": "WARNUNG: Benutzerdefinierte Systemaufforderung aktiv. Dies kann die Funktionalität erheblich beeinträchtigen und zu unvorhersehbarem Verhalten führen.", - "selectApiConfig": "API-Konfiguration auswählen", "shellIntegration": { - "title": "Shell-Integration nicht verfügbar", - "description": "Dein Befehl wird ohne VSCode-Shell-Integration ausgeführt. Du kannst die Shell-Integration im Bereich Terminal in den Roo Code Einstellungen wieder aktivieren.", - "troubleshooting": "Klicke hier für die Shell-Integrations-Dokumentation." + "title": "Befehlsausführungswarnung", + "description": "Dein Befehl wird ohne VSCode Terminal-Shell-Integration ausgeführt. Um diese Warnung zu unterdrücken, kannst du die Shell-Integration im Abschnitt Terminal der Roo Code Einstellungen deaktivieren oder die VSCode Terminal-Integration mit dem Link unten beheben.", + "troubleshooting": "Klicke hier für die Shell-Integrationsdokumentation." } } diff --git a/webview-ui/src/i18n/locales/de/settings.json b/webview-ui/src/i18n/locales/de/settings.json index 4cc23c4bab9..901fc756174 100644 --- a/webview-ui/src/i18n/locales/de/settings.json +++ b/webview-ui/src/i18n/locales/de/settings.json @@ -344,7 +344,7 @@ }, "zshOhMy": { "label": "Oh My Zsh-Integration aktivieren", - "description": "Wenn aktiviert, wird ITERM_SHELL_INTEGRATION_INSTALLED=Yes gesetzt, um die Shell-Integrationsfunktionen von Oh My Zsh zu aktivieren. (experimentell)" + "description": "Wenn aktiviert, wird ITERM_SHELL_INTEGRATION_INSTALLED=Yes gesetzt, um die Shell-Integrationsfunktionen von Oh My Zsh zu aktivieren. Das Anwenden dieser Einstellung erfordert möglicherweise einen Neustart der IDE. (experimentell)" }, "zshP10k": { "label": "Powerlevel10k-Integration aktivieren", diff --git a/webview-ui/src/i18n/locales/en/chat.json b/webview-ui/src/i18n/locales/en/chat.json index 475c352c089..f87f1e8f7e1 100644 --- a/webview-ui/src/i18n/locales/en/chat.json +++ b/webview-ui/src/i18n/locales/en/chat.json @@ -1,5 +1,5 @@ { - "greeting": "Welcome to Roo Code", + "greeting": "Welcome to PearAI Agent (Powered by Roo Code / Cline)", "task": { "title": "Task", "seeMore": "See more", @@ -192,7 +192,7 @@ "autoApprove": { "title": "Auto-approve:", "none": "None", - "description": "Auto-approve allows Roo Code to perform actions without asking for permission. Only enable for actions you fully trust. More detailed configuration available in Settings." + "description": "Auto-approve allows PearAI Agent (Powered by Roo Code / Cline) to perform actions without asking for permission. Only enable for actions you fully trust. More detailed configuration available in Settings." }, "announcement": { "title": "🎉 Roo Code 3.15 Released", @@ -235,8 +235,8 @@ }, "systemPromptWarning": "WARNING: Custom system prompt override active. This can severely break functionality and cause unpredictable behavior.", "shellIntegration": { - "title": "Shell Integration Unavailable", - "description": "Your command is being executed without VSCode shell integration. You can re-enable shell integration in the Terminal section of the Roo Code settings.", + "title": "Command Execution Warning", + "description": "Your command is being executed without VSCode terminal shell integration. To suppress this warning you can disable shell integration in the Terminal section of the PearAI Agent (Powered by Roo Code / Cline) settings or troubleshoot VSCode terminal integration using the link below.", "troubleshooting": "Click here for shell integration documentation." } } diff --git a/webview-ui/src/i18n/locales/en/settings.json b/webview-ui/src/i18n/locales/en/settings.json index c06a9774116..99e4fee600d 100644 --- a/webview-ui/src/i18n/locales/en/settings.json +++ b/webview-ui/src/i18n/locales/en/settings.json @@ -340,7 +340,7 @@ }, "zshOhMy": { "label": "Enable Oh My Zsh integration", - "description": "When enabled, sets ITERM_SHELL_INTEGRATION_INSTALLED=Yes to enable Oh My Zsh shell integration features. (experimental)" + "description": "When enabled, sets ITERM_SHELL_INTEGRATION_INSTALLED=Yes to enable Oh My Zsh shell integration features. Applying this setting might require restarting the IDE. (experimental)" }, "zshP10k": { "label": "Enable Powerlevel10k integration", diff --git a/webview-ui/src/i18n/locales/es/chat.json b/webview-ui/src/i18n/locales/es/chat.json index 9ed0907d1d4..4c5837c4881 100644 --- a/webview-ui/src/i18n/locales/es/chat.json +++ b/webview-ui/src/i18n/locales/es/chat.json @@ -90,6 +90,7 @@ } }, "selectMode": "Seleccionar modo de interacción", + "selectApiConfig": "Seleccionar configuración de API", "enhancePrompt": "Mejorar el mensaje con contexto adicional", "addImages": "Agregar imágenes al mensaje", "sendMessage": "Enviar mensaje", @@ -233,10 +234,9 @@ } }, "systemPromptWarning": "ADVERTENCIA: Anulación de instrucciones del sistema personalizada activa. Esto puede romper gravemente la funcionalidad y causar un comportamiento impredecible.", - "selectApiConfig": "Seleccionar configuración de API", "shellIntegration": { - "title": "Integración de Shell no disponible", - "description": "Tu comando se está ejecutando sin la integración de shell de VSCode. Puedes reactivar la integración de shell en la sección Terminal de la configuración de Roo Code.", + "title": "Advertencia de ejecución de comandos", + "description": "Tu comando se está ejecutando sin la integración de shell de terminal de VSCode. Para suprimir esta advertencia, puedes desactivar la integración de shell en la sección Terminal de la configuración de Roo Code o solucionar problemas de integración de terminal de VSCode usando el enlace de abajo.", "troubleshooting": "Haz clic aquí para ver la documentación de integración de shell." } } diff --git a/webview-ui/src/i18n/locales/es/settings.json b/webview-ui/src/i18n/locales/es/settings.json index 0dd75d95820..71630ef98e0 100644 --- a/webview-ui/src/i18n/locales/es/settings.json +++ b/webview-ui/src/i18n/locales/es/settings.json @@ -344,7 +344,7 @@ }, "zshOhMy": { "label": "Habilitar integración Oh My Zsh", - "description": "Cuando está habilitado, establece ITERM_SHELL_INTEGRATION_INSTALLED=Yes para habilitar las características de integración del shell Oh My Zsh. (experimental)" + "description": "Cuando está habilitado, establece ITERM_SHELL_INTEGRATION_INSTALLED=Yes para habilitar las características de integración del shell Oh My Zsh. Aplicar esta configuración puede requerir reiniciar el IDE. (experimental)" }, "zshP10k": { "label": "Habilitar integración Powerlevel10k", diff --git a/webview-ui/src/i18n/locales/fr/chat.json b/webview-ui/src/i18n/locales/fr/chat.json index 0485c8421da..1f57c598471 100644 --- a/webview-ui/src/i18n/locales/fr/chat.json +++ b/webview-ui/src/i18n/locales/fr/chat.json @@ -90,6 +90,7 @@ } }, "selectMode": "Sélectionner le mode d'interaction", + "selectApiConfig": "Sélectionner la configuration de l'API", "enhancePrompt": "Améliorer la requête avec un contexte supplémentaire", "addImages": "Ajouter des images au message", "sendMessage": "Envoyer le message", @@ -233,10 +234,9 @@ } }, "systemPromptWarning": "AVERTISSEMENT : Remplacement d'instructions système personnalisées actif. Cela peut gravement perturber la fonctionnalité et provoquer un comportement imprévisible.", - "selectApiConfig": "Sélectionner la configuration de l'API", "shellIntegration": { - "title": "Intégration Shell non disponible", - "description": "Votre commande est exécutée sans l'intégration shell de VSCode. Vous pouvez réactiver l'intégration shell dans la section Terminal des paramètres de Roo Code.", + "title": "Avertissement d'exécution de commande", + "description": "Votre commande est exécutée sans l'intégration shell du terminal VSCode. Pour supprimer cet avertissement, vous pouvez désactiver l'intégration shell dans la section Terminal des paramètres de Roo Code ou résoudre les problèmes d'intégration du terminal VSCode en utilisant le lien ci-dessous.", "troubleshooting": "Cliquez ici pour la documentation d'intégration shell." } } diff --git a/webview-ui/src/i18n/locales/fr/settings.json b/webview-ui/src/i18n/locales/fr/settings.json index ec921ca41e1..53122381b3a 100644 --- a/webview-ui/src/i18n/locales/fr/settings.json +++ b/webview-ui/src/i18n/locales/fr/settings.json @@ -344,7 +344,7 @@ }, "zshOhMy": { "label": "Activer l'intégration Oh My Zsh", - "description": "Lorsqu'activé, définit ITERM_SHELL_INTEGRATION_INSTALLED=Yes pour activer les fonctionnalités d'intégration du shell Oh My Zsh. (expérimental)" + "description": "Lorsqu'activé, définit ITERM_SHELL_INTEGRATION_INSTALLED=Yes pour activer les fonctionnalités d'intégration du shell Oh My Zsh. L'application de ce paramètre peut nécessiter le redémarrage de l'IDE. (expérimental)" }, "zshP10k": { "label": "Activer l'intégration Powerlevel10k", diff --git a/webview-ui/src/i18n/locales/hi/chat.json b/webview-ui/src/i18n/locales/hi/chat.json index 80c842cfc08..a9b1adcdacc 100644 --- a/webview-ui/src/i18n/locales/hi/chat.json +++ b/webview-ui/src/i18n/locales/hi/chat.json @@ -90,6 +90,7 @@ } }, "selectMode": "इंटरैक्शन मोड चुनें", + "selectApiConfig": "एपीआई कॉन्फ़िगरेशन का चयन करें", "enhancePrompt": "अतिरिक्त संदर्भ के साथ प्रॉम्प्ट बढ़ाएँ", "addImages": "संदेश में चित्र जोड़ें", "sendMessage": "संदेश भेजें", @@ -233,10 +234,9 @@ } }, "systemPromptWarning": "चेतावनी: कस्टम सिस्टम प्रॉम्प्ट ओवरराइड सक्रिय है। यह कार्यक्षमता को गंभीर रूप से बाधित कर सकता है और अनियमित व्यवहार का कारण बन सकता है.", - "selectApiConfig": "एपीआई कॉन्फ़िगरेशन का चयन करें", "shellIntegration": { - "title": "शेल इंटीग्रेशन अनुपलब्ध", - "description": "आपका कमांड VSCode शेल इंटीग्रेशन के बिना निष्पादित हो रहा है। आप Roo Code सेटिंग्स के टर्मिनल अनुभाग में शेल इंटीग्रेशन को पुनः सक्षम कर सकते हैं।", + "title": "कमांड निष्पादन चेतावनी", + "description": "आपका कमांड VSCode टर्मिनल शेल इंटीग्रेशन के बिना निष्पादित हो रहा है। इस चेतावनी को दबाने के लिए आप Roo Code सेटिंग्स के Terminal अनुभाग में शेल इंटीग्रेशन को अक्षम कर सकते हैं या नीचे दिए गए लिंक का उपयोग करके VSCode टर्मिनल इंटीग्रेशन की समस्या का समाधान कर सकते हैं।", "troubleshooting": "शेल इंटीग्रेशन दस्तावेज़ के लिए यहां क्लिक करें।" } } diff --git a/webview-ui/src/i18n/locales/hi/settings.json b/webview-ui/src/i18n/locales/hi/settings.json index b98879eb37a..32362ae5e25 100644 --- a/webview-ui/src/i18n/locales/hi/settings.json +++ b/webview-ui/src/i18n/locales/hi/settings.json @@ -344,7 +344,7 @@ }, "zshOhMy": { "label": "Oh My Zsh एकीकरण सक्षम करें", - "description": "सक्षम होने पर, Oh My Zsh शेल एकीकरण सुविधाओं को सक्षम करने के लिए ITERM_SHELL_INTEGRATION_INSTALLED=Yes सेट करता है। (प्रयोगात्मक)" + "description": "सक्षम होने पर, Oh My Zsh शेल एकीकरण सुविधाओं को सक्षम करने के लिए ITERM_SHELL_INTEGRATION_INSTALLED=Yes सेट करता है। इस सेटिंग को लागू करने के लिए IDE को पुनरारंभ करने की आवश्यकता हो सकती है। (प्रयोगात्मक)" }, "zshP10k": { "label": "Powerlevel10k एकीकरण सक्षम करें", diff --git a/webview-ui/src/i18n/locales/it/chat.json b/webview-ui/src/i18n/locales/it/chat.json index 774b754e94e..e34e370db1e 100644 --- a/webview-ui/src/i18n/locales/it/chat.json +++ b/webview-ui/src/i18n/locales/it/chat.json @@ -90,6 +90,7 @@ } }, "selectMode": "Seleziona modalità di interazione", + "selectApiConfig": "Seleziona la configurazione API", "enhancePrompt": "Migliora prompt con contesto aggiuntivo", "addImages": "Aggiungi immagini al messaggio", "sendMessage": "Invia messaggio", @@ -233,10 +234,9 @@ } }, "systemPromptWarning": "ATTENZIONE: Sovrascrittura personalizzata delle istruzioni di sistema attiva. Questo può compromettere gravemente le funzionalità e causare comportamenti imprevedibili.", - "selectApiConfig": "Seleziona la configurazione API", "shellIntegration": { - "title": "Integrazione Shell non disponibile", - "description": "Il tuo comando viene eseguito senza l'integrazione shell di VSCode. Puoi riattivare l'integrazione shell nella sezione Terminal delle impostazioni di Roo Code.", + "title": "Avviso di esecuzione comando", + "description": "Il tuo comando viene eseguito senza l'integrazione shell del terminale VSCode. Per sopprimere questo avviso puoi disattivare l'integrazione shell nella sezione Terminal delle impostazioni di Roo Code o risolvere i problemi di integrazione del terminale VSCode utilizzando il link qui sotto.", "troubleshooting": "Clicca qui per la documentazione sull'integrazione shell." } } diff --git a/webview-ui/src/i18n/locales/it/settings.json b/webview-ui/src/i18n/locales/it/settings.json index ca02aa92132..a697e547efa 100644 --- a/webview-ui/src/i18n/locales/it/settings.json +++ b/webview-ui/src/i18n/locales/it/settings.json @@ -344,7 +344,7 @@ }, "zshOhMy": { "label": "Abilita integrazione Oh My Zsh", - "description": "Quando abilitato, imposta ITERM_SHELL_INTEGRATION_INSTALLED=Yes per abilitare le funzionalità di integrazione della shell Oh My Zsh. (sperimentale)" + "description": "Quando abilitato, imposta ITERM_SHELL_INTEGRATION_INSTALLED=Yes per abilitare le funzionalità di integrazione della shell Oh My Zsh. L'applicazione di questa impostazione potrebbe richiedere il riavvio dell'IDE. (sperimentale)" }, "zshP10k": { "label": "Abilita integrazione Powerlevel10k", diff --git a/webview-ui/src/i18n/locales/ja/chat.json b/webview-ui/src/i18n/locales/ja/chat.json index 70c596ba37c..dd34567bf3a 100644 --- a/webview-ui/src/i18n/locales/ja/chat.json +++ b/webview-ui/src/i18n/locales/ja/chat.json @@ -90,6 +90,7 @@ } }, "selectMode": "対話モードを選択", + "selectApiConfig": "API構成を選択", "enhancePrompt": "追加コンテキストでプロンプトを強化", "addImages": "メッセージに画像を追加", "sendMessage": "メッセージを送信", @@ -233,10 +234,9 @@ } }, "systemPromptWarning": "警告:カスタムシステムプロンプトの上書きが有効です。これにより機能が深刻に損なわれ、予測不可能な動作が発生する可能性があります。", - "selectApiConfig": "API構成を選択", "shellIntegration": { - "title": "シェル統合が利用できません", - "description": "コマンドはVSCodeシェル統合なしで実行されています。Roo Code設定ターミナルセクションでシェル統合を再有効化できます。", + "title": "コマンド実行警告", + "description": "コマンドはVSCodeターミナルシェル統合なしで実行されています。この警告を非表示にするには、Roo Code設定Terminalセクションでシェル統合を無効にするか、以下のリンクを使用してVSCodeターミナル統合のトラブルシューティングを行ってください。", "troubleshooting": "シェル統合のドキュメントはこちらをクリック" } } diff --git a/webview-ui/src/i18n/locales/ja/settings.json b/webview-ui/src/i18n/locales/ja/settings.json index 0d49e9d1e95..25b77e1eecb 100644 --- a/webview-ui/src/i18n/locales/ja/settings.json +++ b/webview-ui/src/i18n/locales/ja/settings.json @@ -344,7 +344,7 @@ }, "zshOhMy": { "label": "Oh My Zsh 統合を有効化", - "description": "有効にすると、ITERM_SHELL_INTEGRATION_INSTALLED=Yes を設定して Oh My Zsh シェル統合機能を有効にします。(実験的)" + "description": "有効にすると、ITERM_SHELL_INTEGRATION_INSTALLED=Yes を設定して Oh My Zsh シェル統合機能を有効にします。この設定を適用するには、IDEの再起動が必要な場合があります。(実験的)" }, "zshP10k": { "label": "Powerlevel10k 統合を有効化", diff --git a/webview-ui/src/i18n/locales/ko/chat.json b/webview-ui/src/i18n/locales/ko/chat.json index 25a0264af5d..c4d52b41803 100644 --- a/webview-ui/src/i18n/locales/ko/chat.json +++ b/webview-ui/src/i18n/locales/ko/chat.json @@ -90,6 +90,7 @@ } }, "selectMode": "상호작용 모드 선택", + "selectApiConfig": "API 구성 선택", "enhancePrompt": "추가 컨텍스트로 프롬프트 향상", "addImages": "메시지에 이미지 추가", "sendMessage": "메시지 보내기", @@ -233,10 +234,9 @@ } }, "systemPromptWarning": "경고: 사용자 정의 시스템 프롬프트 재정의가 활성화되었습니다. 이로 인해 기능이 심각하게 손상되고 예측할 수 없는 동작이 발생할 수 있습니다.", - "selectApiConfig": "API 구성 선택", "shellIntegration": { - "title": "Shell 통합 사용 불가", - "description": "명령이 VSCode shell 통합 없이 실행되고 있습니다. Roo Code 설정터미널 섹션에서 shell 통합을 다시 활성화할 수 있습니다.", - "troubleshooting": "shell 통합 문서를 보려면 여기를 클릭하세요." + "title": "명령 실행 경고", + "description": "명령이 VSCode 터미널 쉘 통합 없이 실행되고 있습니다. 이 경고를 숨기려면 Roo Code 설정Terminal 섹션에서 쉘 통합을 비활성화하거나 아래 링크를 사용하여 VSCode 터미널 통합 문제를 해결하세요.", + "troubleshooting": "쉘 통합 문서를 보려면 여기를 클릭하세요." } } diff --git a/webview-ui/src/i18n/locales/ko/settings.json b/webview-ui/src/i18n/locales/ko/settings.json index d0b07988025..9c6e9df01b4 100644 --- a/webview-ui/src/i18n/locales/ko/settings.json +++ b/webview-ui/src/i18n/locales/ko/settings.json @@ -344,7 +344,7 @@ }, "zshOhMy": { "label": "Oh My Zsh 통합 활성화", - "description": "활성화하면 ITERM_SHELL_INTEGRATION_INSTALLED=Yes를 설정하여 Oh My Zsh 셸 통합 기능을 활성화합니다. (실험적)" + "description": "활성화하면 ITERM_SHELL_INTEGRATION_INSTALLED=Yes를 설정하여 Oh My Zsh 셸 통합 기능을 활성화합니다. 이 설정을 적용하려면 IDE를 다시 시작해야 할 수 있습니다. (실험적)" }, "zshP10k": { "label": "Powerlevel10k 통합 활성화", diff --git a/webview-ui/src/i18n/locales/pl/chat.json b/webview-ui/src/i18n/locales/pl/chat.json index 14e273f0541..47b537cc867 100644 --- a/webview-ui/src/i18n/locales/pl/chat.json +++ b/webview-ui/src/i18n/locales/pl/chat.json @@ -90,6 +90,7 @@ } }, "selectMode": "Wybierz tryb interakcji", + "selectApiConfig": "Wybierz konfigurację API", "enhancePrompt": "Ulepsz podpowiedź dodatkowym kontekstem", "addImages": "Dodaj obrazy do wiadomości", "sendMessage": "Wyślij wiadomość", @@ -233,10 +234,9 @@ } }, "systemPromptWarning": "OSTRZEŻENIE: Aktywne niestandardowe zastąpienie instrukcji systemowych. Może to poważnie zakłócić funkcjonalność i powodować nieprzewidywalne zachowanie.", - "selectApiConfig": "Wybierz konfigurację API", "shellIntegration": { - "title": "Integracja powłoki niedostępna", - "description": "Twoje polecenie jest wykonywane bez integracji powłoki VSCode. Możesz ponownie włączyć integrację powłoki w sekcji Terminal w ustawieniach Roo Code.", + "title": "Ostrzeżenie wykonania polecenia", + "description": "Twoje polecenie jest wykonywane bez integracji powłoki terminala VSCode. Aby ukryć to ostrzeżenie, możesz wyłączyć integrację powłoki w sekcji Terminal w ustawieniach Roo Code lub rozwiązać problemy z integracją terminala VSCode korzystając z poniższego linku.", "troubleshooting": "Kliknij tutaj, aby zobaczyć dokumentację integracji powłoki." } } diff --git a/webview-ui/src/i18n/locales/pl/settings.json b/webview-ui/src/i18n/locales/pl/settings.json index 60fe7c28153..b54ea4f8970 100644 --- a/webview-ui/src/i18n/locales/pl/settings.json +++ b/webview-ui/src/i18n/locales/pl/settings.json @@ -344,7 +344,7 @@ }, "zshOhMy": { "label": "Włącz integrację Oh My Zsh", - "description": "Po włączeniu ustawia ITERM_SHELL_INTEGRATION_INSTALLED=Yes, aby włączyć funkcje integracji powłoki Oh My Zsh. (eksperymentalne)" + "description": "Po włączeniu ustawia ITERM_SHELL_INTEGRATION_INSTALLED=Yes, aby włączyć funkcje integracji powłoki Oh My Zsh. Zastosowanie tego ustawienia może wymagać ponownego uruchomienia IDE. (eksperymentalne)" }, "zshP10k": { "label": "Włącz integrację Powerlevel10k", diff --git a/webview-ui/src/i18n/locales/pt-BR/chat.json b/webview-ui/src/i18n/locales/pt-BR/chat.json index c0dc1af551a..23649049c66 100644 --- a/webview-ui/src/i18n/locales/pt-BR/chat.json +++ b/webview-ui/src/i18n/locales/pt-BR/chat.json @@ -90,6 +90,7 @@ } }, "selectMode": "Selecionar modo de interação", + "selectApiConfig": "Selecionar configuração da API", "enhancePrompt": "Aprimorar prompt com contexto adicional", "addImages": "Adicionar imagens à mensagem", "sendMessage": "Enviar mensagem", @@ -233,10 +234,9 @@ } }, "systemPromptWarning": "AVISO: Substituição personalizada de instrução do sistema ativa. Isso pode comprometer gravemente a funcionalidade e causar comportamento imprevisível.", - "selectApiConfig": "Selecionar configuração da API", "shellIntegration": { - "title": "Integração de Shell Indisponível", - "description": "Seu comando está sendo executado sem a integração de shell do VSCode. Você pode reativar a integração de shell na seção Terminal das configurações do Roo Code.", + "title": "Aviso de execução de comando", + "description": "Seu comando está sendo executado sem a integração de shell do terminal VSCode. Para suprimir este aviso, você pode desativar a integração de shell na seção Terminal das configurações do Roo Code ou solucionar problemas de integração do terminal VSCode usando o link abaixo.", "troubleshooting": "Clique aqui para a documentação de integração de shell." } } diff --git a/webview-ui/src/i18n/locales/pt-BR/settings.json b/webview-ui/src/i18n/locales/pt-BR/settings.json index 5f229f98780..25a7d932f18 100644 --- a/webview-ui/src/i18n/locales/pt-BR/settings.json +++ b/webview-ui/src/i18n/locales/pt-BR/settings.json @@ -344,7 +344,7 @@ }, "zshOhMy": { "label": "Ativar integração Oh My Zsh", - "description": "Quando ativado, define ITERM_SHELL_INTEGRATION_INSTALLED=Yes para habilitar os recursos de integração do shell Oh My Zsh. (experimental)" + "description": "Quando ativado, define ITERM_SHELL_INTEGRATION_INSTALLED=Yes para habilitar os recursos de integração do shell Oh My Zsh. A aplicação desta configuração pode exigir a reinicialização do IDE. (experimental)" }, "zshP10k": { "label": "Ativar integração Powerlevel10k", diff --git a/webview-ui/src/i18n/locales/ru/chat.json b/webview-ui/src/i18n/locales/ru/chat.json index f1ce2efece7..f768a59d8d8 100644 --- a/webview-ui/src/i18n/locales/ru/chat.json +++ b/webview-ui/src/i18n/locales/ru/chat.json @@ -235,8 +235,8 @@ }, "systemPromptWarning": "ПРЕДУПРЕЖДЕНИЕ: Активна пользовательская системная подсказка. Это может серьезно нарушить работу и вызвать непредсказуемое поведение.", "shellIntegration": { - "title": "Интеграция с оболочкой недоступна", - "description": "Ваша команда выполняется без интеграции с оболочкой VSCode. Вы можете повторно включить интеграцию с оболочкой в разделе Терминал настроек Roo Code.", - "troubleshooting": "Нажмите здесь для просмотра документации по интеграции с оболочкой." + "title": "Предупреждение о выполнении команды", + "description": "Ваша команда выполняется без интеграции оболочки терминала VSCode. Чтобы скрыть это предупреждение, вы можете отключить интеграцию оболочки в разделе Terminal в настройках Roo Code или устранить проблемы с интеграцией терминала VSCode, используя ссылку ниже.", + "troubleshooting": "Нажмите здесь для просмотра документации по интеграции оболочки." } } diff --git a/webview-ui/src/i18n/locales/ru/settings.json b/webview-ui/src/i18n/locales/ru/settings.json index 94783f4995f..caab30c872a 100644 --- a/webview-ui/src/i18n/locales/ru/settings.json +++ b/webview-ui/src/i18n/locales/ru/settings.json @@ -340,7 +340,7 @@ }, "zshOhMy": { "label": "Включить интеграцию Oh My Zsh", - "description": "Если включено, устанавливает ITERM_SHELL_INTEGRATION_INSTALLED=Yes для поддержки функций интеграции Oh My Zsh. (экспериментально)" + "description": "Если включено, устанавливает ITERM_SHELL_INTEGRATION_INSTALLED=Yes для поддержки функций интеграции Oh My Zsh. Применение этой настройки может потребовать перезапуска IDE. (экспериментально)" }, "zshP10k": { "label": "Включить интеграцию Powerlevel10k", diff --git a/webview-ui/src/i18n/locales/tr/chat.json b/webview-ui/src/i18n/locales/tr/chat.json index f641035c5fa..a8f4045090b 100644 --- a/webview-ui/src/i18n/locales/tr/chat.json +++ b/webview-ui/src/i18n/locales/tr/chat.json @@ -90,6 +90,7 @@ } }, "selectMode": "Etkileşim modunu seçin", + "selectApiConfig": "API yapılandırmasını seçin", "enhancePrompt": "Ek bağlamla istemi geliştir", "addImages": "Mesaja resim ekle", "sendMessage": "Mesaj gönder", @@ -233,10 +234,9 @@ } }, "systemPromptWarning": "UYARI: Özel sistem komut geçersiz kılma aktif. Bu işlevselliği ciddi şekilde bozabilir ve öngörülemeyen davranışlara neden olabilir.", - "selectApiConfig": "API yapılandırmasını seçin", "shellIntegration": { - "title": "Kabuk Entegrasyonu Kullanılamıyor", - "description": "Komutunuz VSCode kabuk entegrasyonu olmadan çalıştırılıyor. Roo Code ayarları'nın Terminal bölümünden kabuk entegrasyonunu yeniden etkinleştirebilirsiniz.", - "troubleshooting": "Kabuk entegrasyonu belgeleri için buraya tıklayın." + "title": "Komut Çalıştırma Uyarısı", + "description": "Komutunuz VSCode terminal kabuk entegrasyonu olmadan çalıştırılıyor. Bu uyarıyı gizlemek için Roo Code ayarları'nın Terminal bölümünden kabuk entegrasyonunu devre dışı bırakabilir veya aşağıdaki bağlantıyı kullanarak VSCode terminal entegrasyonu sorunlarını giderebilirsiniz.", + "troubleshooting": "Kabuk entegrasyonu belgelerini görmek için buraya tıklayın." } } diff --git a/webview-ui/src/i18n/locales/tr/settings.json b/webview-ui/src/i18n/locales/tr/settings.json index 1a8bb25750e..0e98d02cea3 100644 --- a/webview-ui/src/i18n/locales/tr/settings.json +++ b/webview-ui/src/i18n/locales/tr/settings.json @@ -344,7 +344,7 @@ }, "zshOhMy": { "label": "Oh My Zsh entegrasyonunu etkinleştir", - "description": "Etkinleştirildiğinde, Oh My Zsh kabuk entegrasyon özelliklerini etkinleştirmek için ITERM_SHELL_INTEGRATION_INSTALLED=Yes ayarlar. (deneysel)" + "description": "Etkinleştirildiğinde, Oh My Zsh kabuk entegrasyon özelliklerini etkinleştirmek için ITERM_SHELL_INTEGRATION_INSTALLED=Yes ayarlar. Bu ayarın uygulanması IDE'nin yeniden başlatılmasını gerektirebilir. (deneysel)" }, "zshP10k": { "label": "Powerlevel10k entegrasyonunu etkinleştir", diff --git a/webview-ui/src/i18n/locales/vi/chat.json b/webview-ui/src/i18n/locales/vi/chat.json index 5a6c88522a0..4e505ee0b15 100644 --- a/webview-ui/src/i18n/locales/vi/chat.json +++ b/webview-ui/src/i18n/locales/vi/chat.json @@ -90,6 +90,7 @@ } }, "selectMode": "Chọn chế độ tương tác", + "selectApiConfig": "Chọn cấu hình API", "enhancePrompt": "Nâng cao yêu cầu với ngữ cảnh bổ sung", "addImages": "Thêm hình ảnh vào tin nhắn", "sendMessage": "Gửi tin nhắn", @@ -233,10 +234,9 @@ } }, "systemPromptWarning": "CẢNH BÁO: Đã kích hoạt ghi đè lệnh nhắc hệ thống tùy chỉnh. Điều này có thể phá vỡ nghiêm trọng chức năng và gây ra hành vi không thể dự đoán.", - "selectApiConfig": "Chọn cấu hình API", "shellIntegration": { - "title": "Tích hợp Shell không khả dụng", - "description": "Lệnh của bạn đang được thực thi mà không có tích hợp shell VSCode. Bạn có thể kích hoạt lại tích hợp shell trong phần Terminal của cài đặt Roo Code.", - "troubleshooting": "Nhấp vào đây để xem tài liệu về tích hợp shell." + "title": "Cảnh báo thực thi lệnh", + "description": "Lệnh của bạn đang được thực thi mà không có tích hợp shell terminal VSCode. Để ẩn cảnh báo này, bạn có thể vô hiệu hóa tích hợp shell trong phần Terminal của cài đặt Roo Code hoặc khắc phục sự cố tích hợp terminal VSCode bằng liên kết bên dưới.", + "troubleshooting": "Nhấp vào đây để xem tài liệu tích hợp shell." } } diff --git a/webview-ui/src/i18n/locales/vi/settings.json b/webview-ui/src/i18n/locales/vi/settings.json index 9d8764951ef..28af4b9ea11 100644 --- a/webview-ui/src/i18n/locales/vi/settings.json +++ b/webview-ui/src/i18n/locales/vi/settings.json @@ -344,7 +344,7 @@ }, "zshOhMy": { "label": "Bật tích hợp Oh My Zsh", - "description": "Khi được bật, đặt ITERM_SHELL_INTEGRATION_INSTALLED=Yes để kích hoạt các tính năng tích hợp shell của Oh My Zsh. (thử nghiệm)" + "description": "Khi được bật, đặt ITERM_SHELL_INTEGRATION_INSTALLED=Yes để kích hoạt các tính năng tích hợp shell của Oh My Zsh. Việc áp dụng cài đặt này có thể yêu cầu khởi động lại IDE. (thử nghiệm)" }, "zshP10k": { "label": "Bật tích hợp Powerlevel10k", diff --git a/webview-ui/src/i18n/locales/zh-CN/chat.json b/webview-ui/src/i18n/locales/zh-CN/chat.json index f1483d4ee53..5d74e7d7bbf 100644 --- a/webview-ui/src/i18n/locales/zh-CN/chat.json +++ b/webview-ui/src/i18n/locales/zh-CN/chat.json @@ -90,6 +90,7 @@ } }, "selectMode": "选择交互模式", + "selectApiConfig": "选择 API 配置", "enhancePrompt": "增强提示词", "addImages": "添加图片到消息", "sendMessage": "发送消息", @@ -233,10 +234,9 @@ } }, "systemPromptWarning": "警告:自定义系统提示词覆盖已激活。这可能严重破坏功能并导致不可预测的行为。", - "selectApiConfig": "选择 API 配置", "shellIntegration": { - "title": "Shell 集成不可用", - "description": "您的命令正在没有 VSCode shell 集成的情况下执行。您可以在 Roo Code 设置终端 部分重新启用 shell 集成。", + "title": "命令执行警告", + "description": "您的命令正在没有 VSCode 终端 shell 集成的情况下执行。要隐藏此警告,您可以在 Roo Code 设置Terminal 部分禁用 shell 集成,或使用下方链接排查 VSCode 终端集成问题。", "troubleshooting": "点击此处查看 shell 集成文档。" } } diff --git a/webview-ui/src/i18n/locales/zh-CN/settings.json b/webview-ui/src/i18n/locales/zh-CN/settings.json index 5158586ab2d..2d684f34366 100644 --- a/webview-ui/src/i18n/locales/zh-CN/settings.json +++ b/webview-ui/src/i18n/locales/zh-CN/settings.json @@ -344,7 +344,7 @@ }, "zshOhMy": { "label": "启用 Oh My Zsh 集成", - "description": "启用后,设置 ITERM_SHELL_INTEGRATION_INSTALLED=Yes 以启用 Oh My Zsh shell 集成功能。(实验性)" + "description": "启用后,设置 ITERM_SHELL_INTEGRATION_INSTALLED=Yes 以启用 Oh My Zsh shell 集成功能。应用此设置可能需要重启 IDE。(实验性)" }, "zshP10k": { "label": "启用 Powerlevel10k 集成", diff --git a/webview-ui/src/i18n/locales/zh-TW/chat.json b/webview-ui/src/i18n/locales/zh-TW/chat.json index e0e5700e21f..797ffdaf85d 100644 --- a/webview-ui/src/i18n/locales/zh-TW/chat.json +++ b/webview-ui/src/i18n/locales/zh-TW/chat.json @@ -90,6 +90,7 @@ } }, "selectMode": "選擇互動模式", + "selectApiConfig": "選取 API 設定", "enhancePrompt": "使用額外內容增強提示", "addImages": "新增圖片到訊息中", "sendMessage": "傳送訊息", @@ -233,10 +234,9 @@ } }, "systemPromptWarning": "警告:自訂系統提示詞覆蓋已啟用。這可能嚴重破壞功能並導致不可預測的行為。", - "selectApiConfig": "選取 API 設定", "shellIntegration": { - "title": "Shell 整合不可用", - "description": "您的命令正在沒有 VSCode shell 整合的情況下執行。您可以在 Roo Code 設定終端機 部分重新啟用 shell 整合。", + "title": "命令執行警告", + "description": "您的命令正在沒有 VSCode 終端機 shell 整合的情況下執行。要隱藏此警告,您可以在 Roo Code 設定Terminal 部分停用 shell 整合,或使用下方連結排查 VSCode 終端機整合問題。", "troubleshooting": "點擊此處查看 shell 整合文件。" } } diff --git a/webview-ui/src/i18n/locales/zh-TW/settings.json b/webview-ui/src/i18n/locales/zh-TW/settings.json index 1d329752fe1..32b9f709769 100644 --- a/webview-ui/src/i18n/locales/zh-TW/settings.json +++ b/webview-ui/src/i18n/locales/zh-TW/settings.json @@ -344,7 +344,7 @@ }, "zshOhMy": { "label": "啟用 Oh My Zsh 整合", - "description": "啟用後,設定 ITERM_SHELL_INTEGRATION_INSTALLED=Yes 以啟用 Oh My Zsh shell 整合功能。(實驗性)" + "description": "啟用後,設定 ITERM_SHELL_INTEGRATION_INSTALLED=Yes 以啟用 Oh My Zsh shell 整合功能。套用此設定可能需要重新啟動 IDE。(實驗性)" }, "zshP10k": { "label": "啟用 Powerlevel10k 整合",