diff --git a/.changeset/heavy-eyes-reply.md b/.changeset/heavy-eyes-reply.md new file mode 100644 index 0000000000..8a43a7c05f --- /dev/null +++ b/.changeset/heavy-eyes-reply.md @@ -0,0 +1,5 @@ +--- +"roo-cline": patch +--- + +Add settings migration to support renaming legacy settings files to new format diff --git a/.changeset/nine-ways-worry.md b/.changeset/nine-ways-worry.md new file mode 100644 index 0000000000..df1c0a8687 --- /dev/null +++ b/.changeset/nine-ways-worry.md @@ -0,0 +1,5 @@ +--- +"roo-cline": patch +--- + +Add the openAiR1FormatEnabled field to enable this switch in OpenAI compatible mode to support the current QWQ and future additional classes of R1 models. diff --git a/README.md b/README.md index 891948f82c..6b6a0db74f 100644 --- a/README.md +++ b/README.md @@ -180,23 +180,24 @@ Thanks to all our contributors who have helped make Roo Code better! -| mrubens
mrubens
| saoudrizwan
saoudrizwan
| cte
cte
| samhvw8
samhvw8
| daniel-lxs
daniel-lxs
| a8trejo
a8trejo
| -| :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | -| ColemanRoo
ColemanRoo
| stea9499
stea9499
| joemanley201
joemanley201
| System233
System233
| nissa-seru
nissa-seru
| jquanton
jquanton
| -| NyxJae
NyxJae
| MuriloFP
MuriloFP
| hannesrudolph
hannesrudolph
| d-oit
d-oit
| punkpeye
punkpeye
| monotykamary
monotykamary
| -| lloydchang
lloydchang
| vigneshsubbiah16
vigneshsubbiah16
| Szpadel
Szpadel
| cannuri
cannuri
| lupuletic
lupuletic
| Smartsheet-JB-Brown
Smartsheet-JB-Brown
| -| Premshay
Premshay
| psv2522
psv2522
| olweraltuve
olweraltuve
| wkordalski
wkordalski
| qdaxb
qdaxb
| feifei325
feifei325
| -| RaySinner
RaySinner
| pugazhendhi-m
pugazhendhi-m
| pdecat
pdecat
| KJ7LNW
KJ7LNW
| emshvac
emshvac
| afshawnlotfi
afshawnlotfi
| -| aitoroses
aitoroses
| dtrugman
dtrugman
| sammcj
sammcj
| Lunchb0ne
Lunchb0ne
| yt3trees
yt3trees
| yongjer
yongjer
| -| vincentsong
vincentsong
| eonghk
eonghk
| arthurauffray
arthurauffray
| aheizi
aheizi
| heyseth
heyseth
| anton-otee
anton-otee
| -| benzntech
benzntech
| GitlyHallows
GitlyHallows
| philfung
philfung
| napter
napter
| jcbdev
jcbdev
| mdp
mdp
| -| ashktn
ashktn
| bannzai
bannzai
| dairui1
dairui1
| dqroid
dqroid
| im47cn
im47cn
| kinandan
kinandan
| -| kohii
kohii
| lightrabbit
lightrabbit
| olup
olup
| moqimoqidea
moqimoqidea
| mosleyit
mosleyit
| oprstchn
oprstchn
| -| philipnext
philipnext
| refactorthis
refactorthis
| samir-nimbly
samir-nimbly
| shaybc
shaybc
| shohei-ihaya
shohei-ihaya
| student20880
student20880
| -| teddyOOXX
teddyOOXX
| PretzelVector
PretzelVector
| AMHesch
AMHesch
| adamwlarson
adamwlarson
| alarno
alarno
| andreastempsch
andreastempsch
| -| Atlogit
Atlogit
| dleen
dleen
| diarmidmackenzie
diarmidmackenzie
| dbasclpy
dbasclpy
| celestial-vault
celestial-vault
| franekp
franekp
| -| DeXtroTip
DeXtroTip
| hesara
hesara
| eltociear
eltociear
| Jdo300
Jdo300
| libertyteeth
libertyteeth
| mamertofabian
mamertofabian
| -| marvijo-code
marvijo-code
| Sarke
Sarke
| tgfjt
tgfjt
| vladstudio
vladstudio
| Yoshino-Yukitaro
Yoshino-Yukitaro
| | +| mrubens
mrubens
| saoudrizwan
saoudrizwan
| cte
cte
| samhvw8
samhvw8
| daniel-lxs
daniel-lxs
| a8trejo
a8trejo
| +| :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | +| ColemanRoo
ColemanRoo
| stea9499
stea9499
| joemanley201
joemanley201
| System233
System233
| nissa-seru
nissa-seru
| jquanton
jquanton
| +| NyxJae
NyxJae
| MuriloFP
MuriloFP
| hannesrudolph
hannesrudolph
| d-oit
d-oit
| punkpeye
punkpeye
| monotykamary
monotykamary
| +| lloydchang
lloydchang
| vigneshsubbiah16
vigneshsubbiah16
| Szpadel
Szpadel
| cannuri
cannuri
| lupuletic
lupuletic
| feifei325
feifei325
| +| wkordalski
wkordalski
| Smartsheet-JB-Brown
Smartsheet-JB-Brown
| Premshay
Premshay
| psv2522
psv2522
| KJ7LNW
KJ7LNW
| olweraltuve
olweraltuve
| +| qdaxb
qdaxb
| RaySinner
RaySinner
| afshawnlotfi
afshawnlotfi
| emshvac
emshvac
| pdecat
pdecat
| pugazhendhi-m
pugazhendhi-m
| +| Lunchb0ne
Lunchb0ne
| aheizi
aheizi
| sammcj
sammcj
| dtrugman
dtrugman
| aitoroses
aitoroses
| yt3trees
yt3trees
| +| yongjer
yongjer
| vincentsong
vincentsong
| teddyOOXX
teddyOOXX
| eonghk
eonghk
| arthurauffray
arthurauffray
| heyseth
heyseth
| +| anton-otee
anton-otee
| benzntech
benzntech
| GitlyHallows
GitlyHallows
| jcbdev
jcbdev
| mdp
mdp
| napter
napter
| +| philfung
philfung
| AMHesch
AMHesch
| Yoshino-Yukitaro
Yoshino-Yukitaro
| ashktn
ashktn
| bannzai
bannzai
| dairui1
dairui1
| +| dqroid
dqroid
| im47cn
im47cn
| kinandan
kinandan
| kohii
kohii
| lightrabbit
lightrabbit
| olup
olup
| +| moqimoqidea
moqimoqidea
| mosleyit
mosleyit
| oprstchn
oprstchn
| philipnext
philipnext
| refactorthis
refactorthis
| samir-nimbly
samir-nimbly
| +| shaybc
shaybc
| shohei-ihaya
shohei-ihaya
| student20880
student20880
| PretzelVector
PretzelVector
| adamwlarson
adamwlarson
| alarno
alarno
| +| andreastempsch
andreastempsch
| Atlogit
Atlogit
| dleen
dleen
| diarmidmackenzie
diarmidmackenzie
| dbasclpy
dbasclpy
| celestial-vault
celestial-vault
| +| franekp
franekp
| DeXtroTip
DeXtroTip
| hesara
hesara
| eltociear
eltociear
| Jdo300
Jdo300
| libertyteeth
libertyteeth
| +| mamertofabian
mamertofabian
| marvijo-code
marvijo-code
| Sarke
Sarke
| StevenTCramer
StevenTCramer
| maekawataiki
maekawataiki
| tgfjt
tgfjt
| +| vladstudio
vladstudio
| | | | | | diff --git a/locales/ca/README.md b/locales/ca/README.md index 7db1ab26c4..c6b8edd876 100644 --- a/locales/ca/README.md +++ b/locales/ca/README.md @@ -178,23 +178,26 @@ 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
|nissa-seru
nissa-seru
|jquanton
jquanton
| -|NyxJae
NyxJae
|MuriloFP
MuriloFP
|hannesrudolph
hannesrudolph
|d-oit
d-oit
|punkpeye
punkpeye
|monotykamary
monotykamary
| -|lloydchang
lloydchang
|vigneshsubbiah16
vigneshsubbiah16
|Szpadel
Szpadel
|cannuri
cannuri
|lupuletic
lupuletic
|Smartsheet-JB-Brown
Smartsheet-JB-Brown
| -|Premshay
Premshay
|psv2522
psv2522
|olweraltuve
olweraltuve
|wkordalski
wkordalski
|qdaxb
qdaxb
|feifei325
feifei325
| -|RaySinner
RaySinner
|pugazhendhi-m
pugazhendhi-m
|pdecat
pdecat
|KJ7LNW
KJ7LNW
|emshvac
emshvac
|afshawnlotfi
afshawnlotfi
| -|aitoroses
aitoroses
|dtrugman
dtrugman
|sammcj
sammcj
|Lunchb0ne
Lunchb0ne
|yt3trees
yt3trees
|yongjer
yongjer
| -|vincentsong
vincentsong
|eonghk
eonghk
|arthurauffray
arthurauffray
|aheizi
aheizi
|heyseth
heyseth
|anton-otee
anton-otee
| -|benzntech
benzntech
|GitlyHallows
GitlyHallows
|philfung
philfung
|napter
napter
|jcbdev
jcbdev
|mdp
mdp
| -|ashktn
ashktn
|bannzai
bannzai
|dairui1
dairui1
|dqroid
dqroid
|im47cn
im47cn
|kinandan
kinandan
| -|kohii
kohii
|lightrabbit
lightrabbit
|olup
olup
|moqimoqidea
moqimoqidea
|mosleyit
mosleyit
|oprstchn
oprstchn
| -|philipnext
philipnext
|refactorthis
refactorthis
|samir-nimbly
samir-nimbly
|shaybc
shaybc
|shohei-ihaya
shohei-ihaya
|student20880
student20880
| -|teddyOOXX
teddyOOXX
|PretzelVector
PretzelVector
|AMHesch
AMHesch
|adamwlarson
adamwlarson
|alarno
alarno
|andreastempsch
andreastempsch
| -|Atlogit
Atlogit
|dleen
dleen
|diarmidmackenzie
diarmidmackenzie
|dbasclpy
dbasclpy
|celestial-vault
celestial-vault
|franekp
franekp
| -|DeXtroTip
DeXtroTip
|hesara
hesara
|eltociear
eltociear
|Jdo300
Jdo300
|libertyteeth
libertyteeth
|mamertofabian
mamertofabian
| -|marvijo-code
marvijo-code
|Sarke
Sarke
|tgfjt
tgfjt
|vladstudio
vladstudio
|Yoshino-Yukitaro
Yoshino-Yukitaro
| | + +| mrubens
mrubens
| saoudrizwan
saoudrizwan
| cte
cte
| samhvw8
samhvw8
| daniel-lxs
daniel-lxs
| a8trejo
a8trejo
| +| :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | +| ColemanRoo
ColemanRoo
| stea9499
stea9499
| joemanley201
joemanley201
| System233
System233
| nissa-seru
nissa-seru
| jquanton
jquanton
| +| NyxJae
NyxJae
| MuriloFP
MuriloFP
| hannesrudolph
hannesrudolph
| d-oit
d-oit
| punkpeye
punkpeye
| monotykamary
monotykamary
| +| lloydchang
lloydchang
| vigneshsubbiah16
vigneshsubbiah16
| Szpadel
Szpadel
| cannuri
cannuri
| lupuletic
lupuletic
| feifei325
feifei325
| +| wkordalski
wkordalski
| Smartsheet-JB-Brown
Smartsheet-JB-Brown
| Premshay
Premshay
| psv2522
psv2522
| KJ7LNW
KJ7LNW
| olweraltuve
olweraltuve
| +| qdaxb
qdaxb
| RaySinner
RaySinner
| afshawnlotfi
afshawnlotfi
| emshvac
emshvac
| pdecat
pdecat
| pugazhendhi-m
pugazhendhi-m
| +| Lunchb0ne
Lunchb0ne
| aheizi
aheizi
| sammcj
sammcj
| dtrugman
dtrugman
| aitoroses
aitoroses
| yt3trees
yt3trees
| +| yongjer
yongjer
| vincentsong
vincentsong
| teddyOOXX
teddyOOXX
| eonghk
eonghk
| arthurauffray
arthurauffray
| heyseth
heyseth
| +| anton-otee
anton-otee
| benzntech
benzntech
| GitlyHallows
GitlyHallows
| jcbdev
jcbdev
| mdp
mdp
| napter
napter
| +| philfung
philfung
| AMHesch
AMHesch
| Yoshino-Yukitaro
Yoshino-Yukitaro
| ashktn
ashktn
| bannzai
bannzai
| dairui1
dairui1
| +| dqroid
dqroid
| im47cn
im47cn
| kinandan
kinandan
| kohii
kohii
| lightrabbit
lightrabbit
| olup
olup
| +| moqimoqidea
moqimoqidea
| mosleyit
mosleyit
| oprstchn
oprstchn
| philipnext
philipnext
| refactorthis
refactorthis
| samir-nimbly
samir-nimbly
| +| shaybc
shaybc
| shohei-ihaya
shohei-ihaya
| student20880
student20880
| PretzelVector
PretzelVector
| adamwlarson
adamwlarson
| alarno
alarno
| +| andreastempsch
andreastempsch
| Atlogit
Atlogit
| dleen
dleen
| diarmidmackenzie
diarmidmackenzie
| dbasclpy
dbasclpy
| celestial-vault
celestial-vault
| +| franekp
franekp
| DeXtroTip
DeXtroTip
| hesara
hesara
| eltociear
eltociear
| Jdo300
Jdo300
| libertyteeth
libertyteeth
| +| mamertofabian
mamertofabian
| marvijo-code
marvijo-code
| Sarke
Sarke
| StevenTCramer
StevenTCramer
| maekawataiki
maekawataiki
| tgfjt
tgfjt
| +| vladstudio
vladstudio
| | | | | | + ## Llicència diff --git a/locales/de/README.md b/locales/de/README.md index c6aa999ae1..f64a8d3bac 100644 --- a/locales/de/README.md +++ b/locales/de/README.md @@ -178,23 +178,26 @@ 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
|nissa-seru
nissa-seru
|jquanton
jquanton
| -|NyxJae
NyxJae
|MuriloFP
MuriloFP
|hannesrudolph
hannesrudolph
|d-oit
d-oit
|punkpeye
punkpeye
|monotykamary
monotykamary
| -|lloydchang
lloydchang
|vigneshsubbiah16
vigneshsubbiah16
|Szpadel
Szpadel
|cannuri
cannuri
|lupuletic
lupuletic
|Smartsheet-JB-Brown
Smartsheet-JB-Brown
| -|Premshay
Premshay
|psv2522
psv2522
|olweraltuve
olweraltuve
|wkordalski
wkordalski
|qdaxb
qdaxb
|feifei325
feifei325
| -|RaySinner
RaySinner
|pugazhendhi-m
pugazhendhi-m
|pdecat
pdecat
|KJ7LNW
KJ7LNW
|emshvac
emshvac
|afshawnlotfi
afshawnlotfi
| -|aitoroses
aitoroses
|dtrugman
dtrugman
|sammcj
sammcj
|Lunchb0ne
Lunchb0ne
|yt3trees
yt3trees
|yongjer
yongjer
| -|vincentsong
vincentsong
|eonghk
eonghk
|arthurauffray
arthurauffray
|aheizi
aheizi
|heyseth
heyseth
|anton-otee
anton-otee
| -|benzntech
benzntech
|GitlyHallows
GitlyHallows
|philfung
philfung
|napter
napter
|jcbdev
jcbdev
|mdp
mdp
| -|ashktn
ashktn
|bannzai
bannzai
|dairui1
dairui1
|dqroid
dqroid
|im47cn
im47cn
|kinandan
kinandan
| -|kohii
kohii
|lightrabbit
lightrabbit
|olup
olup
|moqimoqidea
moqimoqidea
|mosleyit
mosleyit
|oprstchn
oprstchn
| -|philipnext
philipnext
|refactorthis
refactorthis
|samir-nimbly
samir-nimbly
|shaybc
shaybc
|shohei-ihaya
shohei-ihaya
|student20880
student20880
| -|teddyOOXX
teddyOOXX
|PretzelVector
PretzelVector
|AMHesch
AMHesch
|adamwlarson
adamwlarson
|alarno
alarno
|andreastempsch
andreastempsch
| -|Atlogit
Atlogit
|dleen
dleen
|diarmidmackenzie
diarmidmackenzie
|dbasclpy
dbasclpy
|celestial-vault
celestial-vault
|franekp
franekp
| -|DeXtroTip
DeXtroTip
|hesara
hesara
|eltociear
eltociear
|Jdo300
Jdo300
|libertyteeth
libertyteeth
|mamertofabian
mamertofabian
| -|marvijo-code
marvijo-code
|Sarke
Sarke
|tgfjt
tgfjt
|vladstudio
vladstudio
|Yoshino-Yukitaro
Yoshino-Yukitaro
| | + +| mrubens
mrubens
| saoudrizwan
saoudrizwan
| cte
cte
| samhvw8
samhvw8
| daniel-lxs
daniel-lxs
| a8trejo
a8trejo
| +| :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | +| ColemanRoo
ColemanRoo
| stea9499
stea9499
| joemanley201
joemanley201
| System233
System233
| nissa-seru
nissa-seru
| jquanton
jquanton
| +| NyxJae
NyxJae
| MuriloFP
MuriloFP
| hannesrudolph
hannesrudolph
| d-oit
d-oit
| punkpeye
punkpeye
| monotykamary
monotykamary
| +| lloydchang
lloydchang
| vigneshsubbiah16
vigneshsubbiah16
| Szpadel
Szpadel
| cannuri
cannuri
| lupuletic
lupuletic
| feifei325
feifei325
| +| wkordalski
wkordalski
| Smartsheet-JB-Brown
Smartsheet-JB-Brown
| Premshay
Premshay
| psv2522
psv2522
| KJ7LNW
KJ7LNW
| olweraltuve
olweraltuve
| +| qdaxb
qdaxb
| RaySinner
RaySinner
| afshawnlotfi
afshawnlotfi
| emshvac
emshvac
| pdecat
pdecat
| pugazhendhi-m
pugazhendhi-m
| +| Lunchb0ne
Lunchb0ne
| aheizi
aheizi
| sammcj
sammcj
| dtrugman
dtrugman
| aitoroses
aitoroses
| yt3trees
yt3trees
| +| yongjer
yongjer
| vincentsong
vincentsong
| teddyOOXX
teddyOOXX
| eonghk
eonghk
| arthurauffray
arthurauffray
| heyseth
heyseth
| +| anton-otee
anton-otee
| benzntech
benzntech
| GitlyHallows
GitlyHallows
| jcbdev
jcbdev
| mdp
mdp
| napter
napter
| +| philfung
philfung
| AMHesch
AMHesch
| Yoshino-Yukitaro
Yoshino-Yukitaro
| ashktn
ashktn
| bannzai
bannzai
| dairui1
dairui1
| +| dqroid
dqroid
| im47cn
im47cn
| kinandan
kinandan
| kohii
kohii
| lightrabbit
lightrabbit
| olup
olup
| +| moqimoqidea
moqimoqidea
| mosleyit
mosleyit
| oprstchn
oprstchn
| philipnext
philipnext
| refactorthis
refactorthis
| samir-nimbly
samir-nimbly
| +| shaybc
shaybc
| shohei-ihaya
shohei-ihaya
| student20880
student20880
| PretzelVector
PretzelVector
| adamwlarson
adamwlarson
| alarno
alarno
| +| andreastempsch
andreastempsch
| Atlogit
Atlogit
| dleen
dleen
| diarmidmackenzie
diarmidmackenzie
| dbasclpy
dbasclpy
| celestial-vault
celestial-vault
| +| franekp
franekp
| DeXtroTip
DeXtroTip
| hesara
hesara
| eltociear
eltociear
| Jdo300
Jdo300
| libertyteeth
libertyteeth
| +| mamertofabian
mamertofabian
| marvijo-code
marvijo-code
| Sarke
Sarke
| StevenTCramer
StevenTCramer
| maekawataiki
maekawataiki
| tgfjt
tgfjt
| +| vladstudio
vladstudio
| | | | | | + ## Lizenz diff --git a/locales/es/README.md b/locales/es/README.md index e3d470bbba..82aefc9f99 100644 --- a/locales/es/README.md +++ b/locales/es/README.md @@ -178,23 +178,26 @@ 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
|nissa-seru
nissa-seru
|jquanton
jquanton
| -|NyxJae
NyxJae
|MuriloFP
MuriloFP
|hannesrudolph
hannesrudolph
|d-oit
d-oit
|punkpeye
punkpeye
|monotykamary
monotykamary
| -|lloydchang
lloydchang
|vigneshsubbiah16
vigneshsubbiah16
|Szpadel
Szpadel
|cannuri
cannuri
|lupuletic
lupuletic
|Smartsheet-JB-Brown
Smartsheet-JB-Brown
| -|Premshay
Premshay
|psv2522
psv2522
|olweraltuve
olweraltuve
|wkordalski
wkordalski
|qdaxb
qdaxb
|feifei325
feifei325
| -|RaySinner
RaySinner
|pugazhendhi-m
pugazhendhi-m
|pdecat
pdecat
|KJ7LNW
KJ7LNW
|emshvac
emshvac
|afshawnlotfi
afshawnlotfi
| -|aitoroses
aitoroses
|dtrugman
dtrugman
|sammcj
sammcj
|Lunchb0ne
Lunchb0ne
|yt3trees
yt3trees
|yongjer
yongjer
| -|vincentsong
vincentsong
|eonghk
eonghk
|arthurauffray
arthurauffray
|aheizi
aheizi
|heyseth
heyseth
|anton-otee
anton-otee
| -|benzntech
benzntech
|GitlyHallows
GitlyHallows
|philfung
philfung
|napter
napter
|jcbdev
jcbdev
|mdp
mdp
| -|ashktn
ashktn
|bannzai
bannzai
|dairui1
dairui1
|dqroid
dqroid
|im47cn
im47cn
|kinandan
kinandan
| -|kohii
kohii
|lightrabbit
lightrabbit
|olup
olup
|moqimoqidea
moqimoqidea
|mosleyit
mosleyit
|oprstchn
oprstchn
| -|philipnext
philipnext
|refactorthis
refactorthis
|samir-nimbly
samir-nimbly
|shaybc
shaybc
|shohei-ihaya
shohei-ihaya
|student20880
student20880
| -|teddyOOXX
teddyOOXX
|PretzelVector
PretzelVector
|AMHesch
AMHesch
|adamwlarson
adamwlarson
|alarno
alarno
|andreastempsch
andreastempsch
| -|Atlogit
Atlogit
|dleen
dleen
|diarmidmackenzie
diarmidmackenzie
|dbasclpy
dbasclpy
|celestial-vault
celestial-vault
|franekp
franekp
| -|DeXtroTip
DeXtroTip
|hesara
hesara
|eltociear
eltociear
|Jdo300
Jdo300
|libertyteeth
libertyteeth
|mamertofabian
mamertofabian
| -|marvijo-code
marvijo-code
|Sarke
Sarke
|tgfjt
tgfjt
|vladstudio
vladstudio
|Yoshino-Yukitaro
Yoshino-Yukitaro
| | + +| mrubens
mrubens
| saoudrizwan
saoudrizwan
| cte
cte
| samhvw8
samhvw8
| daniel-lxs
daniel-lxs
| a8trejo
a8trejo
| +| :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | +| ColemanRoo
ColemanRoo
| stea9499
stea9499
| joemanley201
joemanley201
| System233
System233
| nissa-seru
nissa-seru
| jquanton
jquanton
| +| NyxJae
NyxJae
| MuriloFP
MuriloFP
| hannesrudolph
hannesrudolph
| d-oit
d-oit
| punkpeye
punkpeye
| monotykamary
monotykamary
| +| lloydchang
lloydchang
| vigneshsubbiah16
vigneshsubbiah16
| Szpadel
Szpadel
| cannuri
cannuri
| lupuletic
lupuletic
| feifei325
feifei325
| +| wkordalski
wkordalski
| Smartsheet-JB-Brown
Smartsheet-JB-Brown
| Premshay
Premshay
| psv2522
psv2522
| KJ7LNW
KJ7LNW
| olweraltuve
olweraltuve
| +| qdaxb
qdaxb
| RaySinner
RaySinner
| afshawnlotfi
afshawnlotfi
| emshvac
emshvac
| pdecat
pdecat
| pugazhendhi-m
pugazhendhi-m
| +| Lunchb0ne
Lunchb0ne
| aheizi
aheizi
| sammcj
sammcj
| dtrugman
dtrugman
| aitoroses
aitoroses
| yt3trees
yt3trees
| +| yongjer
yongjer
| vincentsong
vincentsong
| teddyOOXX
teddyOOXX
| eonghk
eonghk
| arthurauffray
arthurauffray
| heyseth
heyseth
| +| anton-otee
anton-otee
| benzntech
benzntech
| GitlyHallows
GitlyHallows
| jcbdev
jcbdev
| mdp
mdp
| napter
napter
| +| philfung
philfung
| AMHesch
AMHesch
| Yoshino-Yukitaro
Yoshino-Yukitaro
| ashktn
ashktn
| bannzai
bannzai
| dairui1
dairui1
| +| dqroid
dqroid
| im47cn
im47cn
| kinandan
kinandan
| kohii
kohii
| lightrabbit
lightrabbit
| olup
olup
| +| moqimoqidea
moqimoqidea
| mosleyit
mosleyit
| oprstchn
oprstchn
| philipnext
philipnext
| refactorthis
refactorthis
| samir-nimbly
samir-nimbly
| +| shaybc
shaybc
| shohei-ihaya
shohei-ihaya
| student20880
student20880
| PretzelVector
PretzelVector
| adamwlarson
adamwlarson
| alarno
alarno
| +| andreastempsch
andreastempsch
| Atlogit
Atlogit
| dleen
dleen
| diarmidmackenzie
diarmidmackenzie
| dbasclpy
dbasclpy
| celestial-vault
celestial-vault
| +| franekp
franekp
| DeXtroTip
DeXtroTip
| hesara
hesara
| eltociear
eltociear
| Jdo300
Jdo300
| libertyteeth
libertyteeth
| +| mamertofabian
mamertofabian
| marvijo-code
marvijo-code
| Sarke
Sarke
| StevenTCramer
StevenTCramer
| maekawataiki
maekawataiki
| tgfjt
tgfjt
| +| vladstudio
vladstudio
| | | | | | + ## Licencia diff --git a/locales/fr/README.md b/locales/fr/README.md index 4c56f0f966..1324db835a 100644 --- a/locales/fr/README.md +++ b/locales/fr/README.md @@ -178,23 +178,26 @@ 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
|nissa-seru
nissa-seru
|jquanton
jquanton
| -|NyxJae
NyxJae
|MuriloFP
MuriloFP
|hannesrudolph
hannesrudolph
|d-oit
d-oit
|punkpeye
punkpeye
|monotykamary
monotykamary
| -|lloydchang
lloydchang
|vigneshsubbiah16
vigneshsubbiah16
|Szpadel
Szpadel
|cannuri
cannuri
|lupuletic
lupuletic
|Smartsheet-JB-Brown
Smartsheet-JB-Brown
| -|Premshay
Premshay
|psv2522
psv2522
|olweraltuve
olweraltuve
|wkordalski
wkordalski
|qdaxb
qdaxb
|feifei325
feifei325
| -|RaySinner
RaySinner
|pugazhendhi-m
pugazhendhi-m
|pdecat
pdecat
|KJ7LNW
KJ7LNW
|emshvac
emshvac
|afshawnlotfi
afshawnlotfi
| -|aitoroses
aitoroses
|dtrugman
dtrugman
|sammcj
sammcj
|Lunchb0ne
Lunchb0ne
|yt3trees
yt3trees
|yongjer
yongjer
| -|vincentsong
vincentsong
|eonghk
eonghk
|arthurauffray
arthurauffray
|aheizi
aheizi
|heyseth
heyseth
|anton-otee
anton-otee
| -|benzntech
benzntech
|GitlyHallows
GitlyHallows
|philfung
philfung
|napter
napter
|jcbdev
jcbdev
|mdp
mdp
| -|ashktn
ashktn
|bannzai
bannzai
|dairui1
dairui1
|dqroid
dqroid
|im47cn
im47cn
|kinandan
kinandan
| -|kohii
kohii
|lightrabbit
lightrabbit
|olup
olup
|moqimoqidea
moqimoqidea
|mosleyit
mosleyit
|oprstchn
oprstchn
| -|philipnext
philipnext
|refactorthis
refactorthis
|samir-nimbly
samir-nimbly
|shaybc
shaybc
|shohei-ihaya
shohei-ihaya
|student20880
student20880
| -|teddyOOXX
teddyOOXX
|PretzelVector
PretzelVector
|AMHesch
AMHesch
|adamwlarson
adamwlarson
|alarno
alarno
|andreastempsch
andreastempsch
| -|Atlogit
Atlogit
|dleen
dleen
|diarmidmackenzie
diarmidmackenzie
|dbasclpy
dbasclpy
|celestial-vault
celestial-vault
|franekp
franekp
| -|DeXtroTip
DeXtroTip
|hesara
hesara
|eltociear
eltociear
|Jdo300
Jdo300
|libertyteeth
libertyteeth
|mamertofabian
mamertofabian
| -|marvijo-code
marvijo-code
|Sarke
Sarke
|tgfjt
tgfjt
|vladstudio
vladstudio
|Yoshino-Yukitaro
Yoshino-Yukitaro
| | + +| mrubens
mrubens
| saoudrizwan
saoudrizwan
| cte
cte
| samhvw8
samhvw8
| daniel-lxs
daniel-lxs
| a8trejo
a8trejo
| +| :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | +| ColemanRoo
ColemanRoo
| stea9499
stea9499
| joemanley201
joemanley201
| System233
System233
| nissa-seru
nissa-seru
| jquanton
jquanton
| +| NyxJae
NyxJae
| MuriloFP
MuriloFP
| hannesrudolph
hannesrudolph
| d-oit
d-oit
| punkpeye
punkpeye
| monotykamary
monotykamary
| +| lloydchang
lloydchang
| vigneshsubbiah16
vigneshsubbiah16
| Szpadel
Szpadel
| cannuri
cannuri
| lupuletic
lupuletic
| feifei325
feifei325
| +| wkordalski
wkordalski
| Smartsheet-JB-Brown
Smartsheet-JB-Brown
| Premshay
Premshay
| psv2522
psv2522
| KJ7LNW
KJ7LNW
| olweraltuve
olweraltuve
| +| qdaxb
qdaxb
| RaySinner
RaySinner
| afshawnlotfi
afshawnlotfi
| emshvac
emshvac
| pdecat
pdecat
| pugazhendhi-m
pugazhendhi-m
| +| Lunchb0ne
Lunchb0ne
| aheizi
aheizi
| sammcj
sammcj
| dtrugman
dtrugman
| aitoroses
aitoroses
| yt3trees
yt3trees
| +| yongjer
yongjer
| vincentsong
vincentsong
| teddyOOXX
teddyOOXX
| eonghk
eonghk
| arthurauffray
arthurauffray
| heyseth
heyseth
| +| anton-otee
anton-otee
| benzntech
benzntech
| GitlyHallows
GitlyHallows
| jcbdev
jcbdev
| mdp
mdp
| napter
napter
| +| philfung
philfung
| AMHesch
AMHesch
| Yoshino-Yukitaro
Yoshino-Yukitaro
| ashktn
ashktn
| bannzai
bannzai
| dairui1
dairui1
| +| dqroid
dqroid
| im47cn
im47cn
| kinandan
kinandan
| kohii
kohii
| lightrabbit
lightrabbit
| olup
olup
| +| moqimoqidea
moqimoqidea
| mosleyit
mosleyit
| oprstchn
oprstchn
| philipnext
philipnext
| refactorthis
refactorthis
| samir-nimbly
samir-nimbly
| +| shaybc
shaybc
| shohei-ihaya
shohei-ihaya
| student20880
student20880
| PretzelVector
PretzelVector
| adamwlarson
adamwlarson
| alarno
alarno
| +| andreastempsch
andreastempsch
| Atlogit
Atlogit
| dleen
dleen
| diarmidmackenzie
diarmidmackenzie
| dbasclpy
dbasclpy
| celestial-vault
celestial-vault
| +| franekp
franekp
| DeXtroTip
DeXtroTip
| hesara
hesara
| eltociear
eltociear
| Jdo300
Jdo300
| libertyteeth
libertyteeth
| +| mamertofabian
mamertofabian
| marvijo-code
marvijo-code
| Sarke
Sarke
| StevenTCramer
StevenTCramer
| maekawataiki
maekawataiki
| tgfjt
tgfjt
| +| vladstudio
vladstudio
| | | | | | + ## Licence diff --git a/locales/hi/README.md b/locales/hi/README.md index e54a4d581e..8488b913b0 100644 --- a/locales/hi/README.md +++ b/locales/hi/README.md @@ -178,23 +178,26 @@ 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
|nissa-seru
nissa-seru
|jquanton
jquanton
| -|NyxJae
NyxJae
|MuriloFP
MuriloFP
|hannesrudolph
hannesrudolph
|d-oit
d-oit
|punkpeye
punkpeye
|monotykamary
monotykamary
| -|lloydchang
lloydchang
|vigneshsubbiah16
vigneshsubbiah16
|Szpadel
Szpadel
|cannuri
cannuri
|lupuletic
lupuletic
|Smartsheet-JB-Brown
Smartsheet-JB-Brown
| -|Premshay
Premshay
|psv2522
psv2522
|olweraltuve
olweraltuve
|wkordalski
wkordalski
|qdaxb
qdaxb
|feifei325
feifei325
| -|RaySinner
RaySinner
|pugazhendhi-m
pugazhendhi-m
|pdecat
pdecat
|KJ7LNW
KJ7LNW
|emshvac
emshvac
|afshawnlotfi
afshawnlotfi
| -|aitoroses
aitoroses
|dtrugman
dtrugman
|sammcj
sammcj
|Lunchb0ne
Lunchb0ne
|yt3trees
yt3trees
|yongjer
yongjer
| -|vincentsong
vincentsong
|eonghk
eonghk
|arthurauffray
arthurauffray
|aheizi
aheizi
|heyseth
heyseth
|anton-otee
anton-otee
| -|benzntech
benzntech
|GitlyHallows
GitlyHallows
|philfung
philfung
|napter
napter
|jcbdev
jcbdev
|mdp
mdp
| -|ashktn
ashktn
|bannzai
bannzai
|dairui1
dairui1
|dqroid
dqroid
|im47cn
im47cn
|kinandan
kinandan
| -|kohii
kohii
|lightrabbit
lightrabbit
|olup
olup
|moqimoqidea
moqimoqidea
|mosleyit
mosleyit
|oprstchn
oprstchn
| -|philipnext
philipnext
|refactorthis
refactorthis
|samir-nimbly
samir-nimbly
|shaybc
shaybc
|shohei-ihaya
shohei-ihaya
|student20880
student20880
| -|teddyOOXX
teddyOOXX
|PretzelVector
PretzelVector
|AMHesch
AMHesch
|adamwlarson
adamwlarson
|alarno
alarno
|andreastempsch
andreastempsch
| -|Atlogit
Atlogit
|dleen
dleen
|diarmidmackenzie
diarmidmackenzie
|dbasclpy
dbasclpy
|celestial-vault
celestial-vault
|franekp
franekp
| -|DeXtroTip
DeXtroTip
|hesara
hesara
|eltociear
eltociear
|Jdo300
Jdo300
|libertyteeth
libertyteeth
|mamertofabian
mamertofabian
| -|marvijo-code
marvijo-code
|Sarke
Sarke
|tgfjt
tgfjt
|vladstudio
vladstudio
|Yoshino-Yukitaro
Yoshino-Yukitaro
| | + +| mrubens
mrubens
| saoudrizwan
saoudrizwan
| cte
cte
| samhvw8
samhvw8
| daniel-lxs
daniel-lxs
| a8trejo
a8trejo
| +| :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | +| ColemanRoo
ColemanRoo
| stea9499
stea9499
| joemanley201
joemanley201
| System233
System233
| nissa-seru
nissa-seru
| jquanton
jquanton
| +| NyxJae
NyxJae
| MuriloFP
MuriloFP
| hannesrudolph
hannesrudolph
| d-oit
d-oit
| punkpeye
punkpeye
| monotykamary
monotykamary
| +| lloydchang
lloydchang
| vigneshsubbiah16
vigneshsubbiah16
| Szpadel
Szpadel
| cannuri
cannuri
| lupuletic
lupuletic
| feifei325
feifei325
| +| wkordalski
wkordalski
| Smartsheet-JB-Brown
Smartsheet-JB-Brown
| Premshay
Premshay
| psv2522
psv2522
| KJ7LNW
KJ7LNW
| olweraltuve
olweraltuve
| +| qdaxb
qdaxb
| RaySinner
RaySinner
| afshawnlotfi
afshawnlotfi
| emshvac
emshvac
| pdecat
pdecat
| pugazhendhi-m
pugazhendhi-m
| +| Lunchb0ne
Lunchb0ne
| aheizi
aheizi
| sammcj
sammcj
| dtrugman
dtrugman
| aitoroses
aitoroses
| yt3trees
yt3trees
| +| yongjer
yongjer
| vincentsong
vincentsong
| teddyOOXX
teddyOOXX
| eonghk
eonghk
| arthurauffray
arthurauffray
| heyseth
heyseth
| +| anton-otee
anton-otee
| benzntech
benzntech
| GitlyHallows
GitlyHallows
| jcbdev
jcbdev
| mdp
mdp
| napter
napter
| +| philfung
philfung
| AMHesch
AMHesch
| Yoshino-Yukitaro
Yoshino-Yukitaro
| ashktn
ashktn
| bannzai
bannzai
| dairui1
dairui1
| +| dqroid
dqroid
| im47cn
im47cn
| kinandan
kinandan
| kohii
kohii
| lightrabbit
lightrabbit
| olup
olup
| +| moqimoqidea
moqimoqidea
| mosleyit
mosleyit
| oprstchn
oprstchn
| philipnext
philipnext
| refactorthis
refactorthis
| samir-nimbly
samir-nimbly
| +| shaybc
shaybc
| shohei-ihaya
shohei-ihaya
| student20880
student20880
| PretzelVector
PretzelVector
| adamwlarson
adamwlarson
| alarno
alarno
| +| andreastempsch
andreastempsch
| Atlogit
Atlogit
| dleen
dleen
| diarmidmackenzie
diarmidmackenzie
| dbasclpy
dbasclpy
| celestial-vault
celestial-vault
| +| franekp
franekp
| DeXtroTip
DeXtroTip
| hesara
hesara
| eltociear
eltociear
| Jdo300
Jdo300
| libertyteeth
libertyteeth
| +| mamertofabian
mamertofabian
| marvijo-code
marvijo-code
| Sarke
Sarke
| StevenTCramer
StevenTCramer
| maekawataiki
maekawataiki
| tgfjt
tgfjt
| +| vladstudio
vladstudio
| | | | | | + ## लाइसेंस diff --git a/locales/it/README.md b/locales/it/README.md index f508a706e1..e0ed67a26d 100644 --- a/locales/it/README.md +++ b/locales/it/README.md @@ -178,23 +178,26 @@ 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
|nissa-seru
nissa-seru
|jquanton
jquanton
| -|NyxJae
NyxJae
|MuriloFP
MuriloFP
|hannesrudolph
hannesrudolph
|d-oit
d-oit
|punkpeye
punkpeye
|monotykamary
monotykamary
| -|lloydchang
lloydchang
|vigneshsubbiah16
vigneshsubbiah16
|Szpadel
Szpadel
|cannuri
cannuri
|lupuletic
lupuletic
|Smartsheet-JB-Brown
Smartsheet-JB-Brown
| -|Premshay
Premshay
|psv2522
psv2522
|olweraltuve
olweraltuve
|wkordalski
wkordalski
|qdaxb
qdaxb
|feifei325
feifei325
| -|RaySinner
RaySinner
|pugazhendhi-m
pugazhendhi-m
|pdecat
pdecat
|KJ7LNW
KJ7LNW
|emshvac
emshvac
|afshawnlotfi
afshawnlotfi
| -|aitoroses
aitoroses
|dtrugman
dtrugman
|sammcj
sammcj
|Lunchb0ne
Lunchb0ne
|yt3trees
yt3trees
|yongjer
yongjer
| -|vincentsong
vincentsong
|eonghk
eonghk
|arthurauffray
arthurauffray
|aheizi
aheizi
|heyseth
heyseth
|anton-otee
anton-otee
| -|benzntech
benzntech
|GitlyHallows
GitlyHallows
|philfung
philfung
|napter
napter
|jcbdev
jcbdev
|mdp
mdp
| -|ashktn
ashktn
|bannzai
bannzai
|dairui1
dairui1
|dqroid
dqroid
|im47cn
im47cn
|kinandan
kinandan
| -|kohii
kohii
|lightrabbit
lightrabbit
|olup
olup
|moqimoqidea
moqimoqidea
|mosleyit
mosleyit
|oprstchn
oprstchn
| -|philipnext
philipnext
|refactorthis
refactorthis
|samir-nimbly
samir-nimbly
|shaybc
shaybc
|shohei-ihaya
shohei-ihaya
|student20880
student20880
| -|teddyOOXX
teddyOOXX
|PretzelVector
PretzelVector
|AMHesch
AMHesch
|adamwlarson
adamwlarson
|alarno
alarno
|andreastempsch
andreastempsch
| -|Atlogit
Atlogit
|dleen
dleen
|diarmidmackenzie
diarmidmackenzie
|dbasclpy
dbasclpy
|celestial-vault
celestial-vault
|franekp
franekp
| -|DeXtroTip
DeXtroTip
|hesara
hesara
|eltociear
eltociear
|Jdo300
Jdo300
|libertyteeth
libertyteeth
|mamertofabian
mamertofabian
| -|marvijo-code
marvijo-code
|Sarke
Sarke
|tgfjt
tgfjt
|vladstudio
vladstudio
|Yoshino-Yukitaro
Yoshino-Yukitaro
| | + +| mrubens
mrubens
| saoudrizwan
saoudrizwan
| cte
cte
| samhvw8
samhvw8
| daniel-lxs
daniel-lxs
| a8trejo
a8trejo
| +| :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | +| ColemanRoo
ColemanRoo
| stea9499
stea9499
| joemanley201
joemanley201
| System233
System233
| nissa-seru
nissa-seru
| jquanton
jquanton
| +| NyxJae
NyxJae
| MuriloFP
MuriloFP
| hannesrudolph
hannesrudolph
| d-oit
d-oit
| punkpeye
punkpeye
| monotykamary
monotykamary
| +| lloydchang
lloydchang
| vigneshsubbiah16
vigneshsubbiah16
| Szpadel
Szpadel
| cannuri
cannuri
| lupuletic
lupuletic
| feifei325
feifei325
| +| wkordalski
wkordalski
| Smartsheet-JB-Brown
Smartsheet-JB-Brown
| Premshay
Premshay
| psv2522
psv2522
| KJ7LNW
KJ7LNW
| olweraltuve
olweraltuve
| +| qdaxb
qdaxb
| RaySinner
RaySinner
| afshawnlotfi
afshawnlotfi
| emshvac
emshvac
| pdecat
pdecat
| pugazhendhi-m
pugazhendhi-m
| +| Lunchb0ne
Lunchb0ne
| aheizi
aheizi
| sammcj
sammcj
| dtrugman
dtrugman
| aitoroses
aitoroses
| yt3trees
yt3trees
| +| yongjer
yongjer
| vincentsong
vincentsong
| teddyOOXX
teddyOOXX
| eonghk
eonghk
| arthurauffray
arthurauffray
| heyseth
heyseth
| +| anton-otee
anton-otee
| benzntech
benzntech
| GitlyHallows
GitlyHallows
| jcbdev
jcbdev
| mdp
mdp
| napter
napter
| +| philfung
philfung
| AMHesch
AMHesch
| Yoshino-Yukitaro
Yoshino-Yukitaro
| ashktn
ashktn
| bannzai
bannzai
| dairui1
dairui1
| +| dqroid
dqroid
| im47cn
im47cn
| kinandan
kinandan
| kohii
kohii
| lightrabbit
lightrabbit
| olup
olup
| +| moqimoqidea
moqimoqidea
| mosleyit
mosleyit
| oprstchn
oprstchn
| philipnext
philipnext
| refactorthis
refactorthis
| samir-nimbly
samir-nimbly
| +| shaybc
shaybc
| shohei-ihaya
shohei-ihaya
| student20880
student20880
| PretzelVector
PretzelVector
| adamwlarson
adamwlarson
| alarno
alarno
| +| andreastempsch
andreastempsch
| Atlogit
Atlogit
| dleen
dleen
| diarmidmackenzie
diarmidmackenzie
| dbasclpy
dbasclpy
| celestial-vault
celestial-vault
| +| franekp
franekp
| DeXtroTip
DeXtroTip
| hesara
hesara
| eltociear
eltociear
| Jdo300
Jdo300
| libertyteeth
libertyteeth
| +| mamertofabian
mamertofabian
| marvijo-code
marvijo-code
| Sarke
Sarke
| StevenTCramer
StevenTCramer
| maekawataiki
maekawataiki
| tgfjt
tgfjt
| +| vladstudio
vladstudio
| | | | | | + ## Licenza diff --git a/locales/ja/README.md b/locales/ja/README.md index a905bd7468..ab02b6259d 100644 --- a/locales/ja/README.md +++ b/locales/ja/README.md @@ -178,23 +178,26 @@ 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
|nissa-seru
nissa-seru
|jquanton
jquanton
| -|NyxJae
NyxJae
|MuriloFP
MuriloFP
|hannesrudolph
hannesrudolph
|d-oit
d-oit
|punkpeye
punkpeye
|monotykamary
monotykamary
| -|lloydchang
lloydchang
|vigneshsubbiah16
vigneshsubbiah16
|Szpadel
Szpadel
|cannuri
cannuri
|lupuletic
lupuletic
|Smartsheet-JB-Brown
Smartsheet-JB-Brown
| -|Premshay
Premshay
|psv2522
psv2522
|olweraltuve
olweraltuve
|wkordalski
wkordalski
|qdaxb
qdaxb
|feifei325
feifei325
| -|RaySinner
RaySinner
|pugazhendhi-m
pugazhendhi-m
|pdecat
pdecat
|KJ7LNW
KJ7LNW
|emshvac
emshvac
|afshawnlotfi
afshawnlotfi
| -|aitoroses
aitoroses
|dtrugman
dtrugman
|sammcj
sammcj
|Lunchb0ne
Lunchb0ne
|yt3trees
yt3trees
|yongjer
yongjer
| -|vincentsong
vincentsong
|eonghk
eonghk
|arthurauffray
arthurauffray
|aheizi
aheizi
|heyseth
heyseth
|anton-otee
anton-otee
| -|benzntech
benzntech
|GitlyHallows
GitlyHallows
|philfung
philfung
|napter
napter
|jcbdev
jcbdev
|mdp
mdp
| -|ashktn
ashktn
|bannzai
bannzai
|dairui1
dairui1
|dqroid
dqroid
|im47cn
im47cn
|kinandan
kinandan
| -|kohii
kohii
|lightrabbit
lightrabbit
|olup
olup
|moqimoqidea
moqimoqidea
|mosleyit
mosleyit
|oprstchn
oprstchn
| -|philipnext
philipnext
|refactorthis
refactorthis
|samir-nimbly
samir-nimbly
|shaybc
shaybc
|shohei-ihaya
shohei-ihaya
|student20880
student20880
| -|teddyOOXX
teddyOOXX
|PretzelVector
PretzelVector
|AMHesch
AMHesch
|adamwlarson
adamwlarson
|alarno
alarno
|andreastempsch
andreastempsch
| -|Atlogit
Atlogit
|dleen
dleen
|diarmidmackenzie
diarmidmackenzie
|dbasclpy
dbasclpy
|celestial-vault
celestial-vault
|franekp
franekp
| -|DeXtroTip
DeXtroTip
|hesara
hesara
|eltociear
eltociear
|Jdo300
Jdo300
|libertyteeth
libertyteeth
|mamertofabian
mamertofabian
| -|marvijo-code
marvijo-code
|Sarke
Sarke
|tgfjt
tgfjt
|vladstudio
vladstudio
|Yoshino-Yukitaro
Yoshino-Yukitaro
| | + +| mrubens
mrubens
| saoudrizwan
saoudrizwan
| cte
cte
| samhvw8
samhvw8
| daniel-lxs
daniel-lxs
| a8trejo
a8trejo
| +| :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | +| ColemanRoo
ColemanRoo
| stea9499
stea9499
| joemanley201
joemanley201
| System233
System233
| nissa-seru
nissa-seru
| jquanton
jquanton
| +| NyxJae
NyxJae
| MuriloFP
MuriloFP
| hannesrudolph
hannesrudolph
| d-oit
d-oit
| punkpeye
punkpeye
| monotykamary
monotykamary
| +| lloydchang
lloydchang
| vigneshsubbiah16
vigneshsubbiah16
| Szpadel
Szpadel
| cannuri
cannuri
| lupuletic
lupuletic
| feifei325
feifei325
| +| wkordalski
wkordalski
| Smartsheet-JB-Brown
Smartsheet-JB-Brown
| Premshay
Premshay
| psv2522
psv2522
| KJ7LNW
KJ7LNW
| olweraltuve
olweraltuve
| +| qdaxb
qdaxb
| RaySinner
RaySinner
| afshawnlotfi
afshawnlotfi
| emshvac
emshvac
| pdecat
pdecat
| pugazhendhi-m
pugazhendhi-m
| +| Lunchb0ne
Lunchb0ne
| aheizi
aheizi
| sammcj
sammcj
| dtrugman
dtrugman
| aitoroses
aitoroses
| yt3trees
yt3trees
| +| yongjer
yongjer
| vincentsong
vincentsong
| teddyOOXX
teddyOOXX
| eonghk
eonghk
| arthurauffray
arthurauffray
| heyseth
heyseth
| +| anton-otee
anton-otee
| benzntech
benzntech
| GitlyHallows
GitlyHallows
| jcbdev
jcbdev
| mdp
mdp
| napter
napter
| +| philfung
philfung
| AMHesch
AMHesch
| Yoshino-Yukitaro
Yoshino-Yukitaro
| ashktn
ashktn
| bannzai
bannzai
| dairui1
dairui1
| +| dqroid
dqroid
| im47cn
im47cn
| kinandan
kinandan
| kohii
kohii
| lightrabbit
lightrabbit
| olup
olup
| +| moqimoqidea
moqimoqidea
| mosleyit
mosleyit
| oprstchn
oprstchn
| philipnext
philipnext
| refactorthis
refactorthis
| samir-nimbly
samir-nimbly
| +| shaybc
shaybc
| shohei-ihaya
shohei-ihaya
| student20880
student20880
| PretzelVector
PretzelVector
| adamwlarson
adamwlarson
| alarno
alarno
| +| andreastempsch
andreastempsch
| Atlogit
Atlogit
| dleen
dleen
| diarmidmackenzie
diarmidmackenzie
| dbasclpy
dbasclpy
| celestial-vault
celestial-vault
| +| franekp
franekp
| DeXtroTip
DeXtroTip
| hesara
hesara
| eltociear
eltociear
| Jdo300
Jdo300
| libertyteeth
libertyteeth
| +| mamertofabian
mamertofabian
| marvijo-code
marvijo-code
| Sarke
Sarke
| StevenTCramer
StevenTCramer
| maekawataiki
maekawataiki
| tgfjt
tgfjt
| +| vladstudio
vladstudio
| | | | | | + ## ライセンス diff --git a/locales/ko/README.md b/locales/ko/README.md index be22cefb18..f5ffbdafcd 100644 --- a/locales/ko/README.md +++ b/locales/ko/README.md @@ -178,23 +178,26 @@ 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
|nissa-seru
nissa-seru
|jquanton
jquanton
| -|NyxJae
NyxJae
|MuriloFP
MuriloFP
|hannesrudolph
hannesrudolph
|d-oit
d-oit
|punkpeye
punkpeye
|monotykamary
monotykamary
| -|lloydchang
lloydchang
|vigneshsubbiah16
vigneshsubbiah16
|Szpadel
Szpadel
|cannuri
cannuri
|lupuletic
lupuletic
|Smartsheet-JB-Brown
Smartsheet-JB-Brown
| -|Premshay
Premshay
|psv2522
psv2522
|olweraltuve
olweraltuve
|wkordalski
wkordalski
|qdaxb
qdaxb
|feifei325
feifei325
| -|RaySinner
RaySinner
|pugazhendhi-m
pugazhendhi-m
|pdecat
pdecat
|KJ7LNW
KJ7LNW
|emshvac
emshvac
|afshawnlotfi
afshawnlotfi
| -|aitoroses
aitoroses
|dtrugman
dtrugman
|sammcj
sammcj
|Lunchb0ne
Lunchb0ne
|yt3trees
yt3trees
|yongjer
yongjer
| -|vincentsong
vincentsong
|eonghk
eonghk
|arthurauffray
arthurauffray
|aheizi
aheizi
|heyseth
heyseth
|anton-otee
anton-otee
| -|benzntech
benzntech
|GitlyHallows
GitlyHallows
|philfung
philfung
|napter
napter
|jcbdev
jcbdev
|mdp
mdp
| -|ashktn
ashktn
|bannzai
bannzai
|dairui1
dairui1
|dqroid
dqroid
|im47cn
im47cn
|kinandan
kinandan
| -|kohii
kohii
|lightrabbit
lightrabbit
|olup
olup
|moqimoqidea
moqimoqidea
|mosleyit
mosleyit
|oprstchn
oprstchn
| -|philipnext
philipnext
|refactorthis
refactorthis
|samir-nimbly
samir-nimbly
|shaybc
shaybc
|shohei-ihaya
shohei-ihaya
|student20880
student20880
| -|teddyOOXX
teddyOOXX
|PretzelVector
PretzelVector
|AMHesch
AMHesch
|adamwlarson
adamwlarson
|alarno
alarno
|andreastempsch
andreastempsch
| -|Atlogit
Atlogit
|dleen
dleen
|diarmidmackenzie
diarmidmackenzie
|dbasclpy
dbasclpy
|celestial-vault
celestial-vault
|franekp
franekp
| -|DeXtroTip
DeXtroTip
|hesara
hesara
|eltociear
eltociear
|Jdo300
Jdo300
|libertyteeth
libertyteeth
|mamertofabian
mamertofabian
| -|marvijo-code
marvijo-code
|Sarke
Sarke
|tgfjt
tgfjt
|vladstudio
vladstudio
|Yoshino-Yukitaro
Yoshino-Yukitaro
| | + +| mrubens
mrubens
| saoudrizwan
saoudrizwan
| cte
cte
| samhvw8
samhvw8
| daniel-lxs
daniel-lxs
| a8trejo
a8trejo
| +| :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | +| ColemanRoo
ColemanRoo
| stea9499
stea9499
| joemanley201
joemanley201
| System233
System233
| nissa-seru
nissa-seru
| jquanton
jquanton
| +| NyxJae
NyxJae
| MuriloFP
MuriloFP
| hannesrudolph
hannesrudolph
| d-oit
d-oit
| punkpeye
punkpeye
| monotykamary
monotykamary
| +| lloydchang
lloydchang
| vigneshsubbiah16
vigneshsubbiah16
| Szpadel
Szpadel
| cannuri
cannuri
| lupuletic
lupuletic
| feifei325
feifei325
| +| wkordalski
wkordalski
| Smartsheet-JB-Brown
Smartsheet-JB-Brown
| Premshay
Premshay
| psv2522
psv2522
| KJ7LNW
KJ7LNW
| olweraltuve
olweraltuve
| +| qdaxb
qdaxb
| RaySinner
RaySinner
| afshawnlotfi
afshawnlotfi
| emshvac
emshvac
| pdecat
pdecat
| pugazhendhi-m
pugazhendhi-m
| +| Lunchb0ne
Lunchb0ne
| aheizi
aheizi
| sammcj
sammcj
| dtrugman
dtrugman
| aitoroses
aitoroses
| yt3trees
yt3trees
| +| yongjer
yongjer
| vincentsong
vincentsong
| teddyOOXX
teddyOOXX
| eonghk
eonghk
| arthurauffray
arthurauffray
| heyseth
heyseth
| +| anton-otee
anton-otee
| benzntech
benzntech
| GitlyHallows
GitlyHallows
| jcbdev
jcbdev
| mdp
mdp
| napter
napter
| +| philfung
philfung
| AMHesch
AMHesch
| Yoshino-Yukitaro
Yoshino-Yukitaro
| ashktn
ashktn
| bannzai
bannzai
| dairui1
dairui1
| +| dqroid
dqroid
| im47cn
im47cn
| kinandan
kinandan
| kohii
kohii
| lightrabbit
lightrabbit
| olup
olup
| +| moqimoqidea
moqimoqidea
| mosleyit
mosleyit
| oprstchn
oprstchn
| philipnext
philipnext
| refactorthis
refactorthis
| samir-nimbly
samir-nimbly
| +| shaybc
shaybc
| shohei-ihaya
shohei-ihaya
| student20880
student20880
| PretzelVector
PretzelVector
| adamwlarson
adamwlarson
| alarno
alarno
| +| andreastempsch
andreastempsch
| Atlogit
Atlogit
| dleen
dleen
| diarmidmackenzie
diarmidmackenzie
| dbasclpy
dbasclpy
| celestial-vault
celestial-vault
| +| franekp
franekp
| DeXtroTip
DeXtroTip
| hesara
hesara
| eltociear
eltociear
| Jdo300
Jdo300
| libertyteeth
libertyteeth
| +| mamertofabian
mamertofabian
| marvijo-code
marvijo-code
| Sarke
Sarke
| StevenTCramer
StevenTCramer
| maekawataiki
maekawataiki
| tgfjt
tgfjt
| +| vladstudio
vladstudio
| | | | | | + ## 라이선스 diff --git a/locales/pl/README.md b/locales/pl/README.md index b8ea982b09..65b8196c08 100644 --- a/locales/pl/README.md +++ b/locales/pl/README.md @@ -178,23 +178,26 @@ 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
|nissa-seru
nissa-seru
|jquanton
jquanton
| -|NyxJae
NyxJae
|MuriloFP
MuriloFP
|hannesrudolph
hannesrudolph
|d-oit
d-oit
|punkpeye
punkpeye
|monotykamary
monotykamary
| -|lloydchang
lloydchang
|vigneshsubbiah16
vigneshsubbiah16
|Szpadel
Szpadel
|cannuri
cannuri
|lupuletic
lupuletic
|Smartsheet-JB-Brown
Smartsheet-JB-Brown
| -|Premshay
Premshay
|psv2522
psv2522
|olweraltuve
olweraltuve
|wkordalski
wkordalski
|qdaxb
qdaxb
|feifei325
feifei325
| -|RaySinner
RaySinner
|pugazhendhi-m
pugazhendhi-m
|pdecat
pdecat
|KJ7LNW
KJ7LNW
|emshvac
emshvac
|afshawnlotfi
afshawnlotfi
| -|aitoroses
aitoroses
|dtrugman
dtrugman
|sammcj
sammcj
|Lunchb0ne
Lunchb0ne
|yt3trees
yt3trees
|yongjer
yongjer
| -|vincentsong
vincentsong
|eonghk
eonghk
|arthurauffray
arthurauffray
|aheizi
aheizi
|heyseth
heyseth
|anton-otee
anton-otee
| -|benzntech
benzntech
|GitlyHallows
GitlyHallows
|philfung
philfung
|napter
napter
|jcbdev
jcbdev
|mdp
mdp
| -|ashktn
ashktn
|bannzai
bannzai
|dairui1
dairui1
|dqroid
dqroid
|im47cn
im47cn
|kinandan
kinandan
| -|kohii
kohii
|lightrabbit
lightrabbit
|olup
olup
|moqimoqidea
moqimoqidea
|mosleyit
mosleyit
|oprstchn
oprstchn
| -|philipnext
philipnext
|refactorthis
refactorthis
|samir-nimbly
samir-nimbly
|shaybc
shaybc
|shohei-ihaya
shohei-ihaya
|student20880
student20880
| -|teddyOOXX
teddyOOXX
|PretzelVector
PretzelVector
|AMHesch
AMHesch
|adamwlarson
adamwlarson
|alarno
alarno
|andreastempsch
andreastempsch
| -|Atlogit
Atlogit
|dleen
dleen
|diarmidmackenzie
diarmidmackenzie
|dbasclpy
dbasclpy
|celestial-vault
celestial-vault
|franekp
franekp
| -|DeXtroTip
DeXtroTip
|hesara
hesara
|eltociear
eltociear
|Jdo300
Jdo300
|libertyteeth
libertyteeth
|mamertofabian
mamertofabian
| -|marvijo-code
marvijo-code
|Sarke
Sarke
|tgfjt
tgfjt
|vladstudio
vladstudio
|Yoshino-Yukitaro
Yoshino-Yukitaro
| | + +| mrubens
mrubens
| saoudrizwan
saoudrizwan
| cte
cte
| samhvw8
samhvw8
| daniel-lxs
daniel-lxs
| a8trejo
a8trejo
| +| :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | +| ColemanRoo
ColemanRoo
| stea9499
stea9499
| joemanley201
joemanley201
| System233
System233
| nissa-seru
nissa-seru
| jquanton
jquanton
| +| NyxJae
NyxJae
| MuriloFP
MuriloFP
| hannesrudolph
hannesrudolph
| d-oit
d-oit
| punkpeye
punkpeye
| monotykamary
monotykamary
| +| lloydchang
lloydchang
| vigneshsubbiah16
vigneshsubbiah16
| Szpadel
Szpadel
| cannuri
cannuri
| lupuletic
lupuletic
| feifei325
feifei325
| +| wkordalski
wkordalski
| Smartsheet-JB-Brown
Smartsheet-JB-Brown
| Premshay
Premshay
| psv2522
psv2522
| KJ7LNW
KJ7LNW
| olweraltuve
olweraltuve
| +| qdaxb
qdaxb
| RaySinner
RaySinner
| afshawnlotfi
afshawnlotfi
| emshvac
emshvac
| pdecat
pdecat
| pugazhendhi-m
pugazhendhi-m
| +| Lunchb0ne
Lunchb0ne
| aheizi
aheizi
| sammcj
sammcj
| dtrugman
dtrugman
| aitoroses
aitoroses
| yt3trees
yt3trees
| +| yongjer
yongjer
| vincentsong
vincentsong
| teddyOOXX
teddyOOXX
| eonghk
eonghk
| arthurauffray
arthurauffray
| heyseth
heyseth
| +| anton-otee
anton-otee
| benzntech
benzntech
| GitlyHallows
GitlyHallows
| jcbdev
jcbdev
| mdp
mdp
| napter
napter
| +| philfung
philfung
| AMHesch
AMHesch
| Yoshino-Yukitaro
Yoshino-Yukitaro
| ashktn
ashktn
| bannzai
bannzai
| dairui1
dairui1
| +| dqroid
dqroid
| im47cn
im47cn
| kinandan
kinandan
| kohii
kohii
| lightrabbit
lightrabbit
| olup
olup
| +| moqimoqidea
moqimoqidea
| mosleyit
mosleyit
| oprstchn
oprstchn
| philipnext
philipnext
| refactorthis
refactorthis
| samir-nimbly
samir-nimbly
| +| shaybc
shaybc
| shohei-ihaya
shohei-ihaya
| student20880
student20880
| PretzelVector
PretzelVector
| adamwlarson
adamwlarson
| alarno
alarno
| +| andreastempsch
andreastempsch
| Atlogit
Atlogit
| dleen
dleen
| diarmidmackenzie
diarmidmackenzie
| dbasclpy
dbasclpy
| celestial-vault
celestial-vault
| +| franekp
franekp
| DeXtroTip
DeXtroTip
| hesara
hesara
| eltociear
eltociear
| Jdo300
Jdo300
| libertyteeth
libertyteeth
| +| mamertofabian
mamertofabian
| marvijo-code
marvijo-code
| Sarke
Sarke
| StevenTCramer
StevenTCramer
| maekawataiki
maekawataiki
| tgfjt
tgfjt
| +| vladstudio
vladstudio
| | | | | | + ## Licencja diff --git a/locales/pt-BR/README.md b/locales/pt-BR/README.md index 9721ec40e0..9ae158613d 100644 --- a/locales/pt-BR/README.md +++ b/locales/pt-BR/README.md @@ -178,23 +178,26 @@ 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
|nissa-seru
nissa-seru
|jquanton
jquanton
| -|NyxJae
NyxJae
|MuriloFP
MuriloFP
|hannesrudolph
hannesrudolph
|d-oit
d-oit
|punkpeye
punkpeye
|monotykamary
monotykamary
| -|lloydchang
lloydchang
|vigneshsubbiah16
vigneshsubbiah16
|Szpadel
Szpadel
|cannuri
cannuri
|lupuletic
lupuletic
|Smartsheet-JB-Brown
Smartsheet-JB-Brown
| -|Premshay
Premshay
|psv2522
psv2522
|olweraltuve
olweraltuve
|wkordalski
wkordalski
|qdaxb
qdaxb
|feifei325
feifei325
| -|RaySinner
RaySinner
|pugazhendhi-m
pugazhendhi-m
|pdecat
pdecat
|KJ7LNW
KJ7LNW
|emshvac
emshvac
|afshawnlotfi
afshawnlotfi
| -|aitoroses
aitoroses
|dtrugman
dtrugman
|sammcj
sammcj
|Lunchb0ne
Lunchb0ne
|yt3trees
yt3trees
|yongjer
yongjer
| -|vincentsong
vincentsong
|eonghk
eonghk
|arthurauffray
arthurauffray
|aheizi
aheizi
|heyseth
heyseth
|anton-otee
anton-otee
| -|benzntech
benzntech
|GitlyHallows
GitlyHallows
|philfung
philfung
|napter
napter
|jcbdev
jcbdev
|mdp
mdp
| -|ashktn
ashktn
|bannzai
bannzai
|dairui1
dairui1
|dqroid
dqroid
|im47cn
im47cn
|kinandan
kinandan
| -|kohii
kohii
|lightrabbit
lightrabbit
|olup
olup
|moqimoqidea
moqimoqidea
|mosleyit
mosleyit
|oprstchn
oprstchn
| -|philipnext
philipnext
|refactorthis
refactorthis
|samir-nimbly
samir-nimbly
|shaybc
shaybc
|shohei-ihaya
shohei-ihaya
|student20880
student20880
| -|teddyOOXX
teddyOOXX
|PretzelVector
PretzelVector
|AMHesch
AMHesch
|adamwlarson
adamwlarson
|alarno
alarno
|andreastempsch
andreastempsch
| -|Atlogit
Atlogit
|dleen
dleen
|diarmidmackenzie
diarmidmackenzie
|dbasclpy
dbasclpy
|celestial-vault
celestial-vault
|franekp
franekp
| -|DeXtroTip
DeXtroTip
|hesara
hesara
|eltociear
eltociear
|Jdo300
Jdo300
|libertyteeth
libertyteeth
|mamertofabian
mamertofabian
| -|marvijo-code
marvijo-code
|Sarke
Sarke
|tgfjt
tgfjt
|vladstudio
vladstudio
|Yoshino-Yukitaro
Yoshino-Yukitaro
| | + +| mrubens
mrubens
| saoudrizwan
saoudrizwan
| cte
cte
| samhvw8
samhvw8
| daniel-lxs
daniel-lxs
| a8trejo
a8trejo
| +| :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | +| ColemanRoo
ColemanRoo
| stea9499
stea9499
| joemanley201
joemanley201
| System233
System233
| nissa-seru
nissa-seru
| jquanton
jquanton
| +| NyxJae
NyxJae
| MuriloFP
MuriloFP
| hannesrudolph
hannesrudolph
| d-oit
d-oit
| punkpeye
punkpeye
| monotykamary
monotykamary
| +| lloydchang
lloydchang
| vigneshsubbiah16
vigneshsubbiah16
| Szpadel
Szpadel
| cannuri
cannuri
| lupuletic
lupuletic
| feifei325
feifei325
| +| wkordalski
wkordalski
| Smartsheet-JB-Brown
Smartsheet-JB-Brown
| Premshay
Premshay
| psv2522
psv2522
| KJ7LNW
KJ7LNW
| olweraltuve
olweraltuve
| +| qdaxb
qdaxb
| RaySinner
RaySinner
| afshawnlotfi
afshawnlotfi
| emshvac
emshvac
| pdecat
pdecat
| pugazhendhi-m
pugazhendhi-m
| +| Lunchb0ne
Lunchb0ne
| aheizi
aheizi
| sammcj
sammcj
| dtrugman
dtrugman
| aitoroses
aitoroses
| yt3trees
yt3trees
| +| yongjer
yongjer
| vincentsong
vincentsong
| teddyOOXX
teddyOOXX
| eonghk
eonghk
| arthurauffray
arthurauffray
| heyseth
heyseth
| +| anton-otee
anton-otee
| benzntech
benzntech
| GitlyHallows
GitlyHallows
| jcbdev
jcbdev
| mdp
mdp
| napter
napter
| +| philfung
philfung
| AMHesch
AMHesch
| Yoshino-Yukitaro
Yoshino-Yukitaro
| ashktn
ashktn
| bannzai
bannzai
| dairui1
dairui1
| +| dqroid
dqroid
| im47cn
im47cn
| kinandan
kinandan
| kohii
kohii
| lightrabbit
lightrabbit
| olup
olup
| +| moqimoqidea
moqimoqidea
| mosleyit
mosleyit
| oprstchn
oprstchn
| philipnext
philipnext
| refactorthis
refactorthis
| samir-nimbly
samir-nimbly
| +| shaybc
shaybc
| shohei-ihaya
shohei-ihaya
| student20880
student20880
| PretzelVector
PretzelVector
| adamwlarson
adamwlarson
| alarno
alarno
| +| andreastempsch
andreastempsch
| Atlogit
Atlogit
| dleen
dleen
| diarmidmackenzie
diarmidmackenzie
| dbasclpy
dbasclpy
| celestial-vault
celestial-vault
| +| franekp
franekp
| DeXtroTip
DeXtroTip
| hesara
hesara
| eltociear
eltociear
| Jdo300
Jdo300
| libertyteeth
libertyteeth
| +| mamertofabian
mamertofabian
| marvijo-code
marvijo-code
| Sarke
Sarke
| StevenTCramer
StevenTCramer
| maekawataiki
maekawataiki
| tgfjt
tgfjt
| +| vladstudio
vladstudio
| | | | | | + ## Licença diff --git a/locales/tr/README.md b/locales/tr/README.md index cbecd6eaa3..352c890766 100644 --- a/locales/tr/README.md +++ b/locales/tr/README.md @@ -178,23 +178,26 @@ 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
|nissa-seru
nissa-seru
|jquanton
jquanton
| -|NyxJae
NyxJae
|MuriloFP
MuriloFP
|hannesrudolph
hannesrudolph
|d-oit
d-oit
|punkpeye
punkpeye
|monotykamary
monotykamary
| -|lloydchang
lloydchang
|vigneshsubbiah16
vigneshsubbiah16
|Szpadel
Szpadel
|cannuri
cannuri
|lupuletic
lupuletic
|Smartsheet-JB-Brown
Smartsheet-JB-Brown
| -|Premshay
Premshay
|psv2522
psv2522
|olweraltuve
olweraltuve
|wkordalski
wkordalski
|qdaxb
qdaxb
|feifei325
feifei325
| -|RaySinner
RaySinner
|pugazhendhi-m
pugazhendhi-m
|pdecat
pdecat
|KJ7LNW
KJ7LNW
|emshvac
emshvac
|afshawnlotfi
afshawnlotfi
| -|aitoroses
aitoroses
|dtrugman
dtrugman
|sammcj
sammcj
|Lunchb0ne
Lunchb0ne
|yt3trees
yt3trees
|yongjer
yongjer
| -|vincentsong
vincentsong
|eonghk
eonghk
|arthurauffray
arthurauffray
|aheizi
aheizi
|heyseth
heyseth
|anton-otee
anton-otee
| -|benzntech
benzntech
|GitlyHallows
GitlyHallows
|philfung
philfung
|napter
napter
|jcbdev
jcbdev
|mdp
mdp
| -|ashktn
ashktn
|bannzai
bannzai
|dairui1
dairui1
|dqroid
dqroid
|im47cn
im47cn
|kinandan
kinandan
| -|kohii
kohii
|lightrabbit
lightrabbit
|olup
olup
|moqimoqidea
moqimoqidea
|mosleyit
mosleyit
|oprstchn
oprstchn
| -|philipnext
philipnext
|refactorthis
refactorthis
|samir-nimbly
samir-nimbly
|shaybc
shaybc
|shohei-ihaya
shohei-ihaya
|student20880
student20880
| -|teddyOOXX
teddyOOXX
|PretzelVector
PretzelVector
|AMHesch
AMHesch
|adamwlarson
adamwlarson
|alarno
alarno
|andreastempsch
andreastempsch
| -|Atlogit
Atlogit
|dleen
dleen
|diarmidmackenzie
diarmidmackenzie
|dbasclpy
dbasclpy
|celestial-vault
celestial-vault
|franekp
franekp
| -|DeXtroTip
DeXtroTip
|hesara
hesara
|eltociear
eltociear
|Jdo300
Jdo300
|libertyteeth
libertyteeth
|mamertofabian
mamertofabian
| -|marvijo-code
marvijo-code
|Sarke
Sarke
|tgfjt
tgfjt
|vladstudio
vladstudio
|Yoshino-Yukitaro
Yoshino-Yukitaro
| | + +| mrubens
mrubens
| saoudrizwan
saoudrizwan
| cte
cte
| samhvw8
samhvw8
| daniel-lxs
daniel-lxs
| a8trejo
a8trejo
| +| :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | +| ColemanRoo
ColemanRoo
| stea9499
stea9499
| joemanley201
joemanley201
| System233
System233
| nissa-seru
nissa-seru
| jquanton
jquanton
| +| NyxJae
NyxJae
| MuriloFP
MuriloFP
| hannesrudolph
hannesrudolph
| d-oit
d-oit
| punkpeye
punkpeye
| monotykamary
monotykamary
| +| lloydchang
lloydchang
| vigneshsubbiah16
vigneshsubbiah16
| Szpadel
Szpadel
| cannuri
cannuri
| lupuletic
lupuletic
| feifei325
feifei325
| +| wkordalski
wkordalski
| Smartsheet-JB-Brown
Smartsheet-JB-Brown
| Premshay
Premshay
| psv2522
psv2522
| KJ7LNW
KJ7LNW
| olweraltuve
olweraltuve
| +| qdaxb
qdaxb
| RaySinner
RaySinner
| afshawnlotfi
afshawnlotfi
| emshvac
emshvac
| pdecat
pdecat
| pugazhendhi-m
pugazhendhi-m
| +| Lunchb0ne
Lunchb0ne
| aheizi
aheizi
| sammcj
sammcj
| dtrugman
dtrugman
| aitoroses
aitoroses
| yt3trees
yt3trees
| +| yongjer
yongjer
| vincentsong
vincentsong
| teddyOOXX
teddyOOXX
| eonghk
eonghk
| arthurauffray
arthurauffray
| heyseth
heyseth
| +| anton-otee
anton-otee
| benzntech
benzntech
| GitlyHallows
GitlyHallows
| jcbdev
jcbdev
| mdp
mdp
| napter
napter
| +| philfung
philfung
| AMHesch
AMHesch
| Yoshino-Yukitaro
Yoshino-Yukitaro
| ashktn
ashktn
| bannzai
bannzai
| dairui1
dairui1
| +| dqroid
dqroid
| im47cn
im47cn
| kinandan
kinandan
| kohii
kohii
| lightrabbit
lightrabbit
| olup
olup
| +| moqimoqidea
moqimoqidea
| mosleyit
mosleyit
| oprstchn
oprstchn
| philipnext
philipnext
| refactorthis
refactorthis
| samir-nimbly
samir-nimbly
| +| shaybc
shaybc
| shohei-ihaya
shohei-ihaya
| student20880
student20880
| PretzelVector
PretzelVector
| adamwlarson
adamwlarson
| alarno
alarno
| +| andreastempsch
andreastempsch
| Atlogit
Atlogit
| dleen
dleen
| diarmidmackenzie
diarmidmackenzie
| dbasclpy
dbasclpy
| celestial-vault
celestial-vault
| +| franekp
franekp
| DeXtroTip
DeXtroTip
| hesara
hesara
| eltociear
eltociear
| Jdo300
Jdo300
| libertyteeth
libertyteeth
| +| mamertofabian
mamertofabian
| marvijo-code
marvijo-code
| Sarke
Sarke
| StevenTCramer
StevenTCramer
| maekawataiki
maekawataiki
| tgfjt
tgfjt
| +| vladstudio
vladstudio
| | | | | | + ## Lisans diff --git a/locales/vi/README.md b/locales/vi/README.md index 234f7f9e10..f9c6d2ad3c 100644 --- a/locales/vi/README.md +++ b/locales/vi/README.md @@ -178,23 +178,26 @@ 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
|nissa-seru
nissa-seru
|jquanton
jquanton
| -|NyxJae
NyxJae
|MuriloFP
MuriloFP
|hannesrudolph
hannesrudolph
|d-oit
d-oit
|punkpeye
punkpeye
|monotykamary
monotykamary
| -|lloydchang
lloydchang
|vigneshsubbiah16
vigneshsubbiah16
|Szpadel
Szpadel
|cannuri
cannuri
|lupuletic
lupuletic
|Smartsheet-JB-Brown
Smartsheet-JB-Brown
| -|Premshay
Premshay
|psv2522
psv2522
|olweraltuve
olweraltuve
|wkordalski
wkordalski
|qdaxb
qdaxb
|feifei325
feifei325
| -|RaySinner
RaySinner
|pugazhendhi-m
pugazhendhi-m
|pdecat
pdecat
|KJ7LNW
KJ7LNW
|emshvac
emshvac
|afshawnlotfi
afshawnlotfi
| -|aitoroses
aitoroses
|dtrugman
dtrugman
|sammcj
sammcj
|Lunchb0ne
Lunchb0ne
|yt3trees
yt3trees
|yongjer
yongjer
| -|vincentsong
vincentsong
|eonghk
eonghk
|arthurauffray
arthurauffray
|aheizi
aheizi
|heyseth
heyseth
|anton-otee
anton-otee
| -|benzntech
benzntech
|GitlyHallows
GitlyHallows
|philfung
philfung
|napter
napter
|jcbdev
jcbdev
|mdp
mdp
| -|ashktn
ashktn
|bannzai
bannzai
|dairui1
dairui1
|dqroid
dqroid
|im47cn
im47cn
|kinandan
kinandan
| -|kohii
kohii
|lightrabbit
lightrabbit
|olup
olup
|moqimoqidea
moqimoqidea
|mosleyit
mosleyit
|oprstchn
oprstchn
| -|philipnext
philipnext
|refactorthis
refactorthis
|samir-nimbly
samir-nimbly
|shaybc
shaybc
|shohei-ihaya
shohei-ihaya
|student20880
student20880
| -|teddyOOXX
teddyOOXX
|PretzelVector
PretzelVector
|AMHesch
AMHesch
|adamwlarson
adamwlarson
|alarno
alarno
|andreastempsch
andreastempsch
| -|Atlogit
Atlogit
|dleen
dleen
|diarmidmackenzie
diarmidmackenzie
|dbasclpy
dbasclpy
|celestial-vault
celestial-vault
|franekp
franekp
| -|DeXtroTip
DeXtroTip
|hesara
hesara
|eltociear
eltociear
|Jdo300
Jdo300
|libertyteeth
libertyteeth
|mamertofabian
mamertofabian
| -|marvijo-code
marvijo-code
|Sarke
Sarke
|tgfjt
tgfjt
|vladstudio
vladstudio
|Yoshino-Yukitaro
Yoshino-Yukitaro
| | + +| mrubens
mrubens
| saoudrizwan
saoudrizwan
| cte
cte
| samhvw8
samhvw8
| daniel-lxs
daniel-lxs
| a8trejo
a8trejo
| +| :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | +| ColemanRoo
ColemanRoo
| stea9499
stea9499
| joemanley201
joemanley201
| System233
System233
| nissa-seru
nissa-seru
| jquanton
jquanton
| +| NyxJae
NyxJae
| MuriloFP
MuriloFP
| hannesrudolph
hannesrudolph
| d-oit
d-oit
| punkpeye
punkpeye
| monotykamary
monotykamary
| +| lloydchang
lloydchang
| vigneshsubbiah16
vigneshsubbiah16
| Szpadel
Szpadel
| cannuri
cannuri
| lupuletic
lupuletic
| feifei325
feifei325
| +| wkordalski
wkordalski
| Smartsheet-JB-Brown
Smartsheet-JB-Brown
| Premshay
Premshay
| psv2522
psv2522
| KJ7LNW
KJ7LNW
| olweraltuve
olweraltuve
| +| qdaxb
qdaxb
| RaySinner
RaySinner
| afshawnlotfi
afshawnlotfi
| emshvac
emshvac
| pdecat
pdecat
| pugazhendhi-m
pugazhendhi-m
| +| Lunchb0ne
Lunchb0ne
| aheizi
aheizi
| sammcj
sammcj
| dtrugman
dtrugman
| aitoroses
aitoroses
| yt3trees
yt3trees
| +| yongjer
yongjer
| vincentsong
vincentsong
| teddyOOXX
teddyOOXX
| eonghk
eonghk
| arthurauffray
arthurauffray
| heyseth
heyseth
| +| anton-otee
anton-otee
| benzntech
benzntech
| GitlyHallows
GitlyHallows
| jcbdev
jcbdev
| mdp
mdp
| napter
napter
| +| philfung
philfung
| AMHesch
AMHesch
| Yoshino-Yukitaro
Yoshino-Yukitaro
| ashktn
ashktn
| bannzai
bannzai
| dairui1
dairui1
| +| dqroid
dqroid
| im47cn
im47cn
| kinandan
kinandan
| kohii
kohii
| lightrabbit
lightrabbit
| olup
olup
| +| moqimoqidea
moqimoqidea
| mosleyit
mosleyit
| oprstchn
oprstchn
| philipnext
philipnext
| refactorthis
refactorthis
| samir-nimbly
samir-nimbly
| +| shaybc
shaybc
| shohei-ihaya
shohei-ihaya
| student20880
student20880
| PretzelVector
PretzelVector
| adamwlarson
adamwlarson
| alarno
alarno
| +| andreastempsch
andreastempsch
| Atlogit
Atlogit
| dleen
dleen
| diarmidmackenzie
diarmidmackenzie
| dbasclpy
dbasclpy
| celestial-vault
celestial-vault
| +| franekp
franekp
| DeXtroTip
DeXtroTip
| hesara
hesara
| eltociear
eltociear
| Jdo300
Jdo300
| libertyteeth
libertyteeth
| +| mamertofabian
mamertofabian
| marvijo-code
marvijo-code
| Sarke
Sarke
| StevenTCramer
StevenTCramer
| maekawataiki
maekawataiki
| tgfjt
tgfjt
| +| vladstudio
vladstudio
| | | | | | + ## Giấy Phép diff --git a/locales/zh-CN/README.md b/locales/zh-CN/README.md index 1bab8c9466..b9b4a2551f 100644 --- a/locales/zh-CN/README.md +++ b/locales/zh-CN/README.md @@ -178,23 +178,26 @@ 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
|nissa-seru
nissa-seru
|jquanton
jquanton
| -|NyxJae
NyxJae
|MuriloFP
MuriloFP
|hannesrudolph
hannesrudolph
|d-oit
d-oit
|punkpeye
punkpeye
|monotykamary
monotykamary
| -|lloydchang
lloydchang
|vigneshsubbiah16
vigneshsubbiah16
|Szpadel
Szpadel
|cannuri
cannuri
|lupuletic
lupuletic
|Smartsheet-JB-Brown
Smartsheet-JB-Brown
| -|Premshay
Premshay
|psv2522
psv2522
|olweraltuve
olweraltuve
|wkordalski
wkordalski
|qdaxb
qdaxb
|feifei325
feifei325
| -|RaySinner
RaySinner
|pugazhendhi-m
pugazhendhi-m
|pdecat
pdecat
|KJ7LNW
KJ7LNW
|emshvac
emshvac
|afshawnlotfi
afshawnlotfi
| -|aitoroses
aitoroses
|dtrugman
dtrugman
|sammcj
sammcj
|Lunchb0ne
Lunchb0ne
|yt3trees
yt3trees
|yongjer
yongjer
| -|vincentsong
vincentsong
|eonghk
eonghk
|arthurauffray
arthurauffray
|aheizi
aheizi
|heyseth
heyseth
|anton-otee
anton-otee
| -|benzntech
benzntech
|GitlyHallows
GitlyHallows
|philfung
philfung
|napter
napter
|jcbdev
jcbdev
|mdp
mdp
| -|ashktn
ashktn
|bannzai
bannzai
|dairui1
dairui1
|dqroid
dqroid
|im47cn
im47cn
|kinandan
kinandan
| -|kohii
kohii
|lightrabbit
lightrabbit
|olup
olup
|moqimoqidea
moqimoqidea
|mosleyit
mosleyit
|oprstchn
oprstchn
| -|philipnext
philipnext
|refactorthis
refactorthis
|samir-nimbly
samir-nimbly
|shaybc
shaybc
|shohei-ihaya
shohei-ihaya
|student20880
student20880
| -|teddyOOXX
teddyOOXX
|PretzelVector
PretzelVector
|AMHesch
AMHesch
|adamwlarson
adamwlarson
|alarno
alarno
|andreastempsch
andreastempsch
| -|Atlogit
Atlogit
|dleen
dleen
|diarmidmackenzie
diarmidmackenzie
|dbasclpy
dbasclpy
|celestial-vault
celestial-vault
|franekp
franekp
| -|DeXtroTip
DeXtroTip
|hesara
hesara
|eltociear
eltociear
|Jdo300
Jdo300
|libertyteeth
libertyteeth
|mamertofabian
mamertofabian
| -|marvijo-code
marvijo-code
|Sarke
Sarke
|tgfjt
tgfjt
|vladstudio
vladstudio
|Yoshino-Yukitaro
Yoshino-Yukitaro
| | + +| mrubens
mrubens
| saoudrizwan
saoudrizwan
| cte
cte
| samhvw8
samhvw8
| daniel-lxs
daniel-lxs
| a8trejo
a8trejo
| +| :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | +| ColemanRoo
ColemanRoo
| stea9499
stea9499
| joemanley201
joemanley201
| System233
System233
| nissa-seru
nissa-seru
| jquanton
jquanton
| +| NyxJae
NyxJae
| MuriloFP
MuriloFP
| hannesrudolph
hannesrudolph
| d-oit
d-oit
| punkpeye
punkpeye
| monotykamary
monotykamary
| +| lloydchang
lloydchang
| vigneshsubbiah16
vigneshsubbiah16
| Szpadel
Szpadel
| cannuri
cannuri
| lupuletic
lupuletic
| feifei325
feifei325
| +| wkordalski
wkordalski
| Smartsheet-JB-Brown
Smartsheet-JB-Brown
| Premshay
Premshay
| psv2522
psv2522
| KJ7LNW
KJ7LNW
| olweraltuve
olweraltuve
| +| qdaxb
qdaxb
| RaySinner
RaySinner
| afshawnlotfi
afshawnlotfi
| emshvac
emshvac
| pdecat
pdecat
| pugazhendhi-m
pugazhendhi-m
| +| Lunchb0ne
Lunchb0ne
| aheizi
aheizi
| sammcj
sammcj
| dtrugman
dtrugman
| aitoroses
aitoroses
| yt3trees
yt3trees
| +| yongjer
yongjer
| vincentsong
vincentsong
| teddyOOXX
teddyOOXX
| eonghk
eonghk
| arthurauffray
arthurauffray
| heyseth
heyseth
| +| anton-otee
anton-otee
| benzntech
benzntech
| GitlyHallows
GitlyHallows
| jcbdev
jcbdev
| mdp
mdp
| napter
napter
| +| philfung
philfung
| AMHesch
AMHesch
| Yoshino-Yukitaro
Yoshino-Yukitaro
| ashktn
ashktn
| bannzai
bannzai
| dairui1
dairui1
| +| dqroid
dqroid
| im47cn
im47cn
| kinandan
kinandan
| kohii
kohii
| lightrabbit
lightrabbit
| olup
olup
| +| moqimoqidea
moqimoqidea
| mosleyit
mosleyit
| oprstchn
oprstchn
| philipnext
philipnext
| refactorthis
refactorthis
| samir-nimbly
samir-nimbly
| +| shaybc
shaybc
| shohei-ihaya
shohei-ihaya
| student20880
student20880
| PretzelVector
PretzelVector
| adamwlarson
adamwlarson
| alarno
alarno
| +| andreastempsch
andreastempsch
| Atlogit
Atlogit
| dleen
dleen
| diarmidmackenzie
diarmidmackenzie
| dbasclpy
dbasclpy
| celestial-vault
celestial-vault
| +| franekp
franekp
| DeXtroTip
DeXtroTip
| hesara
hesara
| eltociear
eltociear
| Jdo300
Jdo300
| libertyteeth
libertyteeth
| +| mamertofabian
mamertofabian
| marvijo-code
marvijo-code
| Sarke
Sarke
| StevenTCramer
StevenTCramer
| maekawataiki
maekawataiki
| tgfjt
tgfjt
| +| vladstudio
vladstudio
| | | | | | + ## 许可证 diff --git a/locales/zh-TW/README.md b/locales/zh-TW/README.md index 36a5ed49be..acde87fdf9 100644 --- a/locales/zh-TW/README.md +++ b/locales/zh-TW/README.md @@ -178,23 +178,26 @@ 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
|nissa-seru
nissa-seru
|jquanton
jquanton
| -|NyxJae
NyxJae
|MuriloFP
MuriloFP
|hannesrudolph
hannesrudolph
|d-oit
d-oit
|punkpeye
punkpeye
|monotykamary
monotykamary
| -|lloydchang
lloydchang
|vigneshsubbiah16
vigneshsubbiah16
|Szpadel
Szpadel
|cannuri
cannuri
|lupuletic
lupuletic
|Smartsheet-JB-Brown
Smartsheet-JB-Brown
| -|Premshay
Premshay
|psv2522
psv2522
|olweraltuve
olweraltuve
|wkordalski
wkordalski
|qdaxb
qdaxb
|feifei325
feifei325
| -|RaySinner
RaySinner
|pugazhendhi-m
pugazhendhi-m
|pdecat
pdecat
|KJ7LNW
KJ7LNW
|emshvac
emshvac
|afshawnlotfi
afshawnlotfi
| -|aitoroses
aitoroses
|dtrugman
dtrugman
|sammcj
sammcj
|Lunchb0ne
Lunchb0ne
|yt3trees
yt3trees
|yongjer
yongjer
| -|vincentsong
vincentsong
|eonghk
eonghk
|arthurauffray
arthurauffray
|aheizi
aheizi
|heyseth
heyseth
|anton-otee
anton-otee
| -|benzntech
benzntech
|GitlyHallows
GitlyHallows
|philfung
philfung
|napter
napter
|jcbdev
jcbdev
|mdp
mdp
| -|ashktn
ashktn
|bannzai
bannzai
|dairui1
dairui1
|dqroid
dqroid
|im47cn
im47cn
|kinandan
kinandan
| -|kohii
kohii
|lightrabbit
lightrabbit
|olup
olup
|moqimoqidea
moqimoqidea
|mosleyit
mosleyit
|oprstchn
oprstchn
| -|philipnext
philipnext
|refactorthis
refactorthis
|samir-nimbly
samir-nimbly
|shaybc
shaybc
|shohei-ihaya
shohei-ihaya
|student20880
student20880
| -|teddyOOXX
teddyOOXX
|PretzelVector
PretzelVector
|AMHesch
AMHesch
|adamwlarson
adamwlarson
|alarno
alarno
|andreastempsch
andreastempsch
| -|Atlogit
Atlogit
|dleen
dleen
|diarmidmackenzie
diarmidmackenzie
|dbasclpy
dbasclpy
|celestial-vault
celestial-vault
|franekp
franekp
| -|DeXtroTip
DeXtroTip
|hesara
hesara
|eltociear
eltociear
|Jdo300
Jdo300
|libertyteeth
libertyteeth
|mamertofabian
mamertofabian
| -|marvijo-code
marvijo-code
|Sarke
Sarke
|tgfjt
tgfjt
|vladstudio
vladstudio
|Yoshino-Yukitaro
Yoshino-Yukitaro
| | + +| mrubens
mrubens
| saoudrizwan
saoudrizwan
| cte
cte
| samhvw8
samhvw8
| daniel-lxs
daniel-lxs
| a8trejo
a8trejo
| +| :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | +| ColemanRoo
ColemanRoo
| stea9499
stea9499
| joemanley201
joemanley201
| System233
System233
| nissa-seru
nissa-seru
| jquanton
jquanton
| +| NyxJae
NyxJae
| MuriloFP
MuriloFP
| hannesrudolph
hannesrudolph
| d-oit
d-oit
| punkpeye
punkpeye
| monotykamary
monotykamary
| +| lloydchang
lloydchang
| vigneshsubbiah16
vigneshsubbiah16
| Szpadel
Szpadel
| cannuri
cannuri
| lupuletic
lupuletic
| feifei325
feifei325
| +| wkordalski
wkordalski
| Smartsheet-JB-Brown
Smartsheet-JB-Brown
| Premshay
Premshay
| psv2522
psv2522
| KJ7LNW
KJ7LNW
| olweraltuve
olweraltuve
| +| qdaxb
qdaxb
| RaySinner
RaySinner
| afshawnlotfi
afshawnlotfi
| emshvac
emshvac
| pdecat
pdecat
| pugazhendhi-m
pugazhendhi-m
| +| Lunchb0ne
Lunchb0ne
| aheizi
aheizi
| sammcj
sammcj
| dtrugman
dtrugman
| aitoroses
aitoroses
| yt3trees
yt3trees
| +| yongjer
yongjer
| vincentsong
vincentsong
| teddyOOXX
teddyOOXX
| eonghk
eonghk
| arthurauffray
arthurauffray
| heyseth
heyseth
| +| anton-otee
anton-otee
| benzntech
benzntech
| GitlyHallows
GitlyHallows
| jcbdev
jcbdev
| mdp
mdp
| napter
napter
| +| philfung
philfung
| AMHesch
AMHesch
| Yoshino-Yukitaro
Yoshino-Yukitaro
| ashktn
ashktn
| bannzai
bannzai
| dairui1
dairui1
| +| dqroid
dqroid
| im47cn
im47cn
| kinandan
kinandan
| kohii
kohii
| lightrabbit
lightrabbit
| olup
olup
| +| moqimoqidea
moqimoqidea
| mosleyit
mosleyit
| oprstchn
oprstchn
| philipnext
philipnext
| refactorthis
refactorthis
| samir-nimbly
samir-nimbly
| +| shaybc
shaybc
| shohei-ihaya
shohei-ihaya
| student20880
student20880
| PretzelVector
PretzelVector
| adamwlarson
adamwlarson
| alarno
alarno
| +| andreastempsch
andreastempsch
| Atlogit
Atlogit
| dleen
dleen
| diarmidmackenzie
diarmidmackenzie
| dbasclpy
dbasclpy
| celestial-vault
celestial-vault
| +| franekp
franekp
| DeXtroTip
DeXtroTip
| hesara
hesara
| eltociear
eltociear
| Jdo300
Jdo300
| libertyteeth
libertyteeth
| +| mamertofabian
mamertofabian
| marvijo-code
marvijo-code
| Sarke
Sarke
| StevenTCramer
StevenTCramer
| maekawataiki
maekawataiki
| tgfjt
tgfjt
| +| vladstudio
vladstudio
| | | | | | + ## 許可證 diff --git a/src/__mocks__/fs/promises.ts b/src/__mocks__/fs/promises.ts index e496a7fa51..b037cd2457 100644 --- a/src/__mocks__/fs/promises.ts +++ b/src/__mocks__/fs/promises.ts @@ -152,6 +152,22 @@ const mockFs = { throw error }), + rename: jest.fn().mockImplementation(async (oldPath: string, newPath: string) => { + // Check if the old file exists + if (mockFiles.has(oldPath)) { + // Copy content to new path + const content = mockFiles.get(oldPath) + mockFiles.set(newPath, content) + // Delete old file + mockFiles.delete(oldPath) + return Promise.resolve() + } + // If old file doesn't exist, throw an error + const error = new Error(`ENOENT: no such file or directory, rename '${oldPath}'`) + ;(error as any).code = "ENOENT" + throw error + }), + constants: jest.requireActual("fs").constants, // Expose mock data for test assertions @@ -162,7 +178,7 @@ const mockFs = { _setInitialMockData: () => { // Set up default MCP settings mockFiles.set( - "/mock/settings/path/cline_mcp_settings.json", + "/mock/settings/path/mcp_settings.json", JSON.stringify({ mcpServers: { "test-server": { diff --git a/src/__tests__/migrateSettings.test.ts b/src/__tests__/migrateSettings.test.ts new file mode 100644 index 0000000000..107f310639 --- /dev/null +++ b/src/__tests__/migrateSettings.test.ts @@ -0,0 +1,119 @@ +import * as vscode from "vscode" +import * as path from "path" +import * as fs from "fs/promises" +import { fileExistsAtPath } from "../utils/fs" +import { GlobalFileNames } from "../shared/globalFileNames" +import { migrateSettings } from "../utils/migrateSettings" + +// Mock dependencies +jest.mock("vscode") +jest.mock("fs/promises") +jest.mock("fs") +jest.mock("../utils/fs") +// We're testing the real migrateSettings function + +describe("Settings Migration", () => { + let mockContext: vscode.ExtensionContext + let mockOutputChannel: vscode.OutputChannel + const mockStoragePath = "/mock/storage" + const mockSettingsDir = path.join(mockStoragePath, "settings") + + // Legacy file names + const legacyCustomModesPath = path.join(mockSettingsDir, "cline_custom_modes.json") + const legacyMcpSettingsPath = path.join(mockSettingsDir, "cline_mcp_settings.json") + + // New file names + const newCustomModesPath = path.join(mockSettingsDir, GlobalFileNames.customModes) + const newMcpSettingsPath = path.join(mockSettingsDir, GlobalFileNames.mcpSettings) + + beforeEach(() => { + jest.clearAllMocks() + + // Mock output channel + mockOutputChannel = { + appendLine: jest.fn(), + append: jest.fn(), + clear: jest.fn(), + show: jest.fn(), + hide: jest.fn(), + dispose: jest.fn(), + } as unknown as vscode.OutputChannel + + // Mock extension context + mockContext = { + globalStorageUri: { fsPath: mockStoragePath }, + } as unknown as vscode.ExtensionContext + + // The fs/promises mock is already set up in src/__mocks__/fs/promises.ts + // We don't need to manually mock these methods + + // Set global outputChannel for all tests + ;(global as any).outputChannel = mockOutputChannel + }) + + it("should migrate custom modes file if old file exists and new file doesn't", async () => { + const mockCustomModesContent = '{"customModes":[{"slug":"test-mode"}]}' as string + + // Mock file existence checks + ;(fileExistsAtPath as jest.Mock).mockImplementation(async (path: string) => { + if (path === mockSettingsDir) return true + if (path === legacyCustomModesPath) return true + if (path === newCustomModesPath) return false + return false + }) + + await migrateSettings(mockContext, mockOutputChannel) + + // Verify file was renamed + expect(fs.rename).toHaveBeenCalledWith(legacyCustomModesPath, newCustomModesPath) + }) + + it("should migrate MCP settings file if old file exists and new file doesn't", async () => { + const mockMcpSettingsContent = '{"mcpServers":{"test-server":{}}}' as string + + // Mock file existence checks + ;(fileExistsAtPath as jest.Mock).mockImplementation(async (path: string) => { + if (path === mockSettingsDir) return true + if (path === legacyMcpSettingsPath) return true + if (path === newMcpSettingsPath) return false + return false + }) + + await migrateSettings(mockContext, mockOutputChannel) + + // Verify file was renamed + expect(fs.rename).toHaveBeenCalledWith(legacyMcpSettingsPath, newMcpSettingsPath) + }) + + it("should not migrate if new file already exists", async () => { + // Mock file existence checks + ;(fileExistsAtPath as jest.Mock).mockImplementation(async (path: string) => { + if (path === mockSettingsDir) return true + if (path === legacyCustomModesPath) return true + if (path === newCustomModesPath) return true + if (path === legacyMcpSettingsPath) return true + if (path === newMcpSettingsPath) return true + return false + }) + + await migrateSettings(mockContext, mockOutputChannel) + + // Verify no files were renamed + expect(fs.rename).not.toHaveBeenCalled() + }) + + it("should handle errors gracefully", async () => { + // Mock file existence checks to throw an error + ;(fileExistsAtPath as jest.Mock).mockRejectedValue(new Error("Test error")) + + // Set the global outputChannel for the test + ;(global as any).outputChannel = mockOutputChannel + + await migrateSettings(mockContext, mockOutputChannel) + + // Verify error was logged + expect(mockOutputChannel.appendLine).toHaveBeenCalledWith( + expect.stringContaining("Error migrating settings files"), + ) + }) +}) diff --git a/src/api/providers/bedrock.ts b/src/api/providers/bedrock.ts index 4696c1dc91..2aafc16dee 100644 --- a/src/api/providers/bedrock.ts +++ b/src/api/providers/bedrock.ts @@ -30,7 +30,7 @@ import { logger } from "../../utils/logging" function validateBedrockArn(arn: string, region?: string) { // Validate ARN format const arnRegex = - /^arn:aws:bedrock:([^:]+):(\d+):(foundation-model|provisioned-model|default-prompt-router|prompt-router)\/(.+)$/ + /^arn:aws:bedrock:([^:]+):(\d+):(foundation-model|provisioned-model|default-prompt-router|prompt-router|application-inference-profile)\/(.+)$/ const match = arn.match(arnRegex) if (!match) { diff --git a/src/api/providers/openai.ts b/src/api/providers/openai.ts index 6b82f708c9..bc57591c01 100644 --- a/src/api/providers/openai.ts +++ b/src/api/providers/openai.ts @@ -63,10 +63,9 @@ export class OpenAiHandler extends BaseProvider implements SingleCompletionHandl const modelInfo = this.getModel().info const modelUrl = this.options.openAiBaseUrl ?? "" const modelId = this.options.openAiModelId ?? "" - - const deepseekReasoner = modelId.includes("deepseek-reasoner") + const enabledR1Format = this.options.openAiR1FormatEnabled ?? false + const deepseekReasoner = modelId.includes("deepseek-reasoner") || enabledR1Format const ark = modelUrl.includes(".volces.com") - if (modelId.startsWith("o3-mini")) { yield* this.handleO3FamilyMessage(modelId, systemPrompt, messages) return diff --git a/src/core/Cline.ts b/src/core/Cline.ts index 33f72c7d61..332f78d2f7 100644 --- a/src/core/Cline.ts +++ b/src/core/Cline.ts @@ -115,6 +115,7 @@ export type ClineOptions = { rootTask?: Cline parentTask?: Cline taskNumber?: number + onCreated?: (cline: Cline) => void } export class Cline extends EventEmitter { @@ -192,6 +193,7 @@ export class Cline extends EventEmitter { rootTask, parentTask, taskNumber, + onCreated, }: ClineOptions) { super() @@ -235,6 +237,8 @@ export class Cline extends EventEmitter { Experiments.isEnabled(experiments ?? {}, EXPERIMENT_IDS.MULTI_SEARCH_AND_REPLACE), ) + onCreated?.(this) + if (startTask) { if (task || images) { this.startTask(task, images) @@ -1227,7 +1231,16 @@ export class Cline extends EventEmitter { } catch (error) { // note that this api_req_failed ask is unique in that we only present this option if the api hasn't streamed any content yet (ie it fails on the first chunk due), as it would allow them to hit a retry button. However if the api failed mid-stream, it could be in any arbitrary state where some tools may have executed, so that error is handled differently and requires cancelling the task entirely. if (alwaysApproveResubmit) { - const errorMsg = error.error?.metadata?.raw ?? error.message ?? "Unknown error" + let errorMsg + + if (error.error?.metadata?.raw) { + errorMsg = JSON.stringify(error.error.metadata.raw, null, 2) + } else if (error.message) { + errorMsg = error.message + } else { + errorMsg = "Unknown error" + } + const baseDelay = requestDelaySeconds || 5 const exponentialDelay = Math.ceil(baseDelay * Math.pow(2, retryAttempt)) // Wait for the greater of the exponential delay or the rate limit delay diff --git a/src/core/config/CustomModesManager.ts b/src/core/config/CustomModesManager.ts index cb4759fca4..c701f38f91 100644 --- a/src/core/config/CustomModesManager.ts +++ b/src/core/config/CustomModesManager.ts @@ -6,6 +6,7 @@ import { ModeConfig } from "../../shared/modes" import { fileExistsAtPath } from "../../utils/fs" import { arePathsEqual, getWorkspacePath } from "../../utils/path" import { logger } from "../../utils/logging" +import { GlobalFileNames } from "../../shared/globalFileNames" const ROOMODES_FILENAME = ".roomodes" @@ -113,7 +114,7 @@ export class CustomModesManager { async getCustomModesFilePath(): Promise { const settingsDir = await this.ensureSettingsDirectoryExists() - const filePath = path.join(settingsDir, "cline_custom_modes.json") + const filePath = path.join(settingsDir, GlobalFileNames.customModes) const fileExists = await fileExistsAtPath(filePath) if (!fileExists) { await this.queueWrite(async () => { diff --git a/src/core/config/__tests__/CustomModesManager.test.ts b/src/core/config/__tests__/CustomModesManager.test.ts index 300f1b7c0f..3af26c92b8 100644 --- a/src/core/config/__tests__/CustomModesManager.test.ts +++ b/src/core/config/__tests__/CustomModesManager.test.ts @@ -7,6 +7,7 @@ import { CustomModesManager } from "../CustomModesManager" import { ModeConfig } from "../../../shared/modes" import { fileExistsAtPath } from "../../../utils/fs" import { getWorkspacePath, arePathsEqual } from "../../../utils/path" +import { GlobalFileNames } from "../../../shared/globalFileNames" jest.mock("vscode") jest.mock("fs/promises") @@ -21,7 +22,7 @@ describe("CustomModesManager", () => { // Use path.sep to ensure correct path separators for the current platform const mockStoragePath = `${path.sep}mock${path.sep}settings` - const mockSettingsPath = path.join(mockStoragePath, "settings", "cline_custom_modes.json") + const mockSettingsPath = path.join(mockStoragePath, "settings", GlobalFileNames.customModes) const mockRoomodes = `${path.sep}mock${path.sep}workspace${path.sep}.roomodes` beforeEach(() => { @@ -333,17 +334,16 @@ describe("CustomModesManager", () => { expect(mockOnUpdate).toHaveBeenCalled() }) }) - describe("File Operations", () => { it("creates settings directory if it doesn't exist", async () => { - const configPath = path.join(mockStoragePath, "settings", "cline_custom_modes.json") + const settingsPath = path.join(mockStoragePath, "settings", GlobalFileNames.customModes) await manager.getCustomModesFilePath() - expect(fs.mkdir).toHaveBeenCalledWith(path.dirname(configPath), { recursive: true }) + expect(fs.mkdir).toHaveBeenCalledWith(path.dirname(settingsPath), { recursive: true }) }) it("creates default config if file doesn't exist", async () => { - const configPath = path.join(mockStoragePath, "settings", "cline_custom_modes.json") + const settingsPath = path.join(mockStoragePath, "settings", GlobalFileNames.customModes) // Mock fileExists to return false first time, then true let firstCall = true @@ -358,13 +358,13 @@ describe("CustomModesManager", () => { await manager.getCustomModesFilePath() expect(fs.writeFile).toHaveBeenCalledWith( - configPath, + settingsPath, expect.stringMatching(/^\{\s+"customModes":\s+\[\s*\]\s*\}$/), ) }) it("watches file for changes", async () => { - const configPath = path.join(mockStoragePath, "settings", "cline_custom_modes.json") + const configPath = path.join(mockStoragePath, "settings", GlobalFileNames.customModes) ;(fs.readFile as jest.Mock).mockResolvedValue(JSON.stringify({ customModes: [] })) ;(arePathsEqual as jest.Mock).mockImplementation((path1: string, path2: string) => { diff --git a/src/core/prompts/sections/__tests__/custom-instructions.test.ts b/src/core/prompts/sections/__tests__/custom-instructions.test.ts index 4dbb51c845..5c47a48baa 100644 --- a/src/core/prompts/sections/__tests__/custom-instructions.test.ts +++ b/src/core/prompts/sections/__tests__/custom-instructions.test.ts @@ -106,7 +106,15 @@ describe("addCustomInstructions", () => { }) it("should combine all instruction types when provided", async () => { - mockedFs.readFile.mockResolvedValue("mode specific rules") + // Mock implementation to return different values based on the file path + mockedFs.readFile.mockImplementation(((filePath: any) => { + // For .clinerules-test-mode, return mode-specific rules + if (filePath.toString().includes(".clinerules-test-mode")) { + return Promise.resolve("mode specific rules") + } + // For any other read operation, return empty + return Promise.reject({ code: "ENOENT" }) + }) as any) const result = await addCustomInstructions( "mode instructions", diff --git a/src/core/prompts/sections/custom-instructions.ts b/src/core/prompts/sections/custom-instructions.ts index f076777585..823a87051e 100644 --- a/src/core/prompts/sections/custom-instructions.ts +++ b/src/core/prompts/sections/custom-instructions.ts @@ -16,12 +16,30 @@ async function safeReadFile(filePath: string): Promise { } } +async function findRuleInDirectory(dir: string, ruleFile: string): Promise { + const filePath = path.join(dir, ruleFile) + const content = await safeReadFile(filePath) + + if (content) { + return content + } + + // Check if we've reached the root directory + const parentDir = path.dirname(dir) + if (parentDir === dir) { + return "" + } + + // Recursively check parent directory + return findRuleInDirectory(parentDir, ruleFile) +} + export async function loadRuleFiles(cwd: string): Promise { const ruleFiles = [".clinerules", ".cursorrules", ".windsurfrules"] let combinedRules = "" for (const file of ruleFiles) { - const content = await safeReadFile(path.join(cwd, file)) + const content = await findRuleInDirectory(cwd, file) if (content) { combinedRules += `\n# Rules from ${file}:\n${content}\n` } @@ -30,6 +48,17 @@ export async function loadRuleFiles(cwd: string): Promise { return combinedRules } +async function findCustomInstructionsFile(dir: string, filePattern: string): Promise { + // First try to find as a direct file + const content = await findRuleInDirectory(dir, filePattern) + if (content) { + return content + } + + // If not found as a file, check if it's raw content + return filePattern.trim() +} + export async function addCustomInstructions( modeCustomInstructions: string, globalCustomInstructions: string, @@ -54,14 +83,16 @@ export async function addCustomInstructions( ) } - // Add global instructions first - if (typeof globalCustomInstructions === "string" && globalCustomInstructions.trim()) { - sections.push(`Global Instructions:\n${globalCustomInstructions.trim()}`) + // Add global instructions first - try to find as file or use raw content + const globalContent = await findCustomInstructionsFile(cwd, globalCustomInstructions) + if (globalContent) { + sections.push(`Global Instructions:\n${globalContent}`) } - // Add mode-specific instructions after - if (typeof modeCustomInstructions === "string" && modeCustomInstructions.trim()) { - sections.push(`Mode-specific Instructions:\n${modeCustomInstructions.trim()}`) + // Add mode-specific instructions - try to find as file or use raw content + const modeContent = await findCustomInstructionsFile(cwd, modeCustomInstructions) + if (modeContent) { + sections.push(`Mode-specific Instructions:\n${modeContent}`) } // Add rules - include both mode-specific and generic rules if they exist diff --git a/src/core/prompts/sections/modes.ts b/src/core/prompts/sections/modes.ts index 78b94ec9e7..0015b8917c 100644 --- a/src/core/prompts/sections/modes.ts +++ b/src/core/prompts/sections/modes.ts @@ -2,11 +2,12 @@ import * as path from "path" import * as vscode from "vscode" import { promises as fs } from "fs" import { ModeConfig, getAllModesWithPrompts } from "../../../shared/modes" +import { GlobalFileNames } from "../../../shared/globalFileNames" export async function getModesSection(context: vscode.ExtensionContext): Promise { const settingsDir = path.join(context.globalStorageUri.fsPath, "settings") await fs.mkdir(settingsDir, { recursive: true }) - const customModesPath = path.join(settingsDir, "cline_custom_modes.json") + const customModesPath = path.join(settingsDir, GlobalFileNames.customModes) // Get all modes with their overrides from extension state const allModes = await getAllModesWithPrompts(context) diff --git a/src/core/webview/ClineProvider.ts b/src/core/webview/ClineProvider.ts index 3d60e2d43e..53c142706d 100644 --- a/src/core/webview/ClineProvider.ts +++ b/src/core/webview/ClineProvider.ts @@ -85,7 +85,7 @@ import { getWorkspacePath } from "../../utils/path" */ export type ClineProviderEvents = { - clineAdded: [cline: Cline] + clineCreated: [cline: Cline] } export class ClineProvider extends EventEmitter implements vscode.WebviewViewProvider { @@ -142,8 +142,6 @@ export class ClineProvider extends EventEmitter implements // Add this cline instance into the stack that represents the order of all the called tasks. this.clineStack.push(cline) - this.emit("clineAdded", cline) - // Ensure getState() resolves correctly. const state = await this.getState() @@ -494,6 +492,7 @@ export class ClineProvider extends EventEmitter implements rootTask: this.clineStack.length > 0 ? this.clineStack[0] : undefined, parentTask, taskNumber: this.clineStack.length + 1, + onCreated: (cline) => this.emit("clineCreated", cline), }) await this.addClineToStack(cline) @@ -559,6 +558,7 @@ export class ClineProvider extends EventEmitter implements rootTask: historyItem.rootTask, parentTask: historyItem.parentTask, taskNumber: historyItem.number, + onCreated: (cline) => this.emit("clineCreated", cline), }) await this.addClineToStack(cline) @@ -2140,7 +2140,6 @@ export class ClineProvider extends EventEmitter implements await this.configManager.setModeConfig(mode, config.id) } } - await this.contextProxy.setApiConfiguration(apiConfiguration) if (this.getCurrentCline()) { diff --git a/src/core/webview/__tests__/ClineProvider.test.ts b/src/core/webview/__tests__/ClineProvider.test.ts index 6edeb7ac2c..3df38a469f 100644 --- a/src/core/webview/__tests__/ClineProvider.test.ts +++ b/src/core/webview/__tests__/ClineProvider.test.ts @@ -870,6 +870,7 @@ describe("ClineProvider", () => { rootTask: undefined, parentTask: undefined, taskNumber: 1, + onCreated: expect.any(Function), }) }) diff --git a/src/exports/api.ts b/src/exports/api.ts index 5e829671e2..33a257316d 100644 --- a/src/exports/api.ts +++ b/src/exports/api.ts @@ -22,7 +22,7 @@ export class API extends EventEmitter implements RooCodeAPI { this.history = new MessageHistory() this.tokenUsage = {} - this.provider.on("clineAdded", (cline) => { + this.provider.on("clineCreated", (cline) => { cline.on("message", (message) => this.emit("message", { taskId: cline.taskId, ...message })) cline.on("taskStarted", () => this.emit("taskStarted", cline.taskId)) cline.on("taskPaused", () => this.emit("taskPaused", cline.taskId)) @@ -32,6 +32,7 @@ export class API extends EventEmitter implements RooCodeAPI { cline.on("taskSpawned", (childTaskId) => this.emit("taskSpawned", cline.taskId, childTaskId)) cline.on("taskCompleted", (_, usage) => this.emit("taskCompleted", cline.taskId, usage)) cline.on("taskTokenUsageUpdated", (_, usage) => this.emit("taskTokenUsageUpdated", cline.taskId, usage)) + this.emit("taskCreated", cline.taskId) }) this.on("message", ({ taskId, action, message }) => { diff --git a/src/exports/roo-code.d.ts b/src/exports/roo-code.d.ts index 886290d3d1..739ee93d14 100644 --- a/src/exports/roo-code.d.ts +++ b/src/exports/roo-code.d.ts @@ -11,6 +11,7 @@ export interface TokenUsage { export interface RooCodeEvents { message: [{ taskId: string; action: "created" | "updated"; message: ClineMessage }] + taskCreated: [taskId: string] taskStarted: [taskId: string] taskPaused: [taskId: string] taskUnpaused: [taskId: string] @@ -200,6 +201,7 @@ export type GlobalStateKey = | "modelMaxThinkingTokens" | "azureApiVersion" | "openAiStreamingEnabled" + | "openAiR1FormatEnabled" | "openRouterModelId" | "openRouterModelInfo" | "openRouterBaseUrl" diff --git a/src/extension.ts b/src/extension.ts index 980d96f42a..8684a6443b 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -1,10 +1,11 @@ import * as vscode from "vscode" import * as dotenvx from "@dotenvx/dotenvx" +import * as path from "path" // Load environment variables from .env file try { // Specify path to .env file in the project root directory - const envPath = __dirname + "/../.env" + const envPath = path.join(__dirname, "..", ".env") dotenvx.config({ path: envPath }) } catch (e) { // Silently handle environment loading errors @@ -21,6 +22,7 @@ import { McpServerManager } from "./services/mcp/McpServerManager" import { telemetryService } from "./services/telemetry/TelemetryService" import { TerminalRegistry } from "./integrations/terminal/TerminalRegistry" import { API } from "./exports/api" +import { migrateSettings } from "./utils/migrateSettings" import { handleUri, registerCommands, registerCodeActions, registerTerminalActions } from "./activate" import { formatLanguage } from "./shared/language" @@ -38,12 +40,15 @@ let extensionContext: vscode.ExtensionContext // This method is called when your extension is activated. // Your extension is activated the very first time the command is executed. -export function activate(context: vscode.ExtensionContext) { +export async function activate(context: vscode.ExtensionContext) { extensionContext = context outputChannel = vscode.window.createOutputChannel("Roo-Code") context.subscriptions.push(outputChannel) outputChannel.appendLine("Roo-Code extension activated") + // Migrate old settings to new + await migrateSettings(context, outputChannel) + // Initialize telemetry service after environment variables are loaded. telemetryService.initialize() diff --git a/src/i18n/locales/ca/common.json b/src/i18n/locales/ca/common.json index 42684a4677..967daab3d0 100644 --- a/src/i18n/locales/ca/common.json +++ b/src/i18n/locales/ca/common.json @@ -5,8 +5,8 @@ }, "number_format": { "thousand_suffix": "k", - "million_suffix": "M", - "billion_suffix": "MM" + "million_suffix": "m", + "billion_suffix": "b" }, "welcome": "Benvingut/da, {{name}}! Tens {{count}} notificacions.", "items": { diff --git a/src/i18n/locales/de/common.json b/src/i18n/locales/de/common.json index 7da6e0477d..0c5ed0e75f 100644 --- a/src/i18n/locales/de/common.json +++ b/src/i18n/locales/de/common.json @@ -4,9 +4,9 @@ "description": "Ein komplettes Entwicklerteam mit KI in deinem Editor." }, "number_format": { - "thousand_suffix": "T", - "million_suffix": "Mio.", - "billion_suffix": "Mrd." + "thousand_suffix": "k", + "million_suffix": "m", + "billion_suffix": "b" }, "welcome": "Willkommen, {{name}}! Du hast {{count}} Benachrichtigungen.", "items": { diff --git a/src/i18n/locales/fr/common.json b/src/i18n/locales/fr/common.json index b2819a3900..1091994db0 100644 --- a/src/i18n/locales/fr/common.json +++ b/src/i18n/locales/fr/common.json @@ -5,8 +5,8 @@ }, "number_format": { "thousand_suffix": "k", - "million_suffix": "M", - "billion_suffix": "Md" + "million_suffix": "m", + "billion_suffix": "b" }, "welcome": "Bienvenue, {{name}} ! Vous avez {{count}} notification(s).", "items": { diff --git a/src/i18n/locales/hi/common.json b/src/i18n/locales/hi/common.json index 380fa8a331..ca1053d04e 100644 --- a/src/i18n/locales/hi/common.json +++ b/src/i18n/locales/hi/common.json @@ -4,9 +4,9 @@ "description": "आपके एडिटर में AI डेवलपर्स की पूरी टीम।" }, "number_format": { - "thousand_suffix": "हज़ार", - "million_suffix": "लाख", - "billion_suffix": "अरब" + "thousand_suffix": "k", + "million_suffix": "m", + "billion_suffix": "b" }, "welcome": "स्वागत है, {{name}}! आपके पास {{count}} सूचनाएँ हैं।", "items": { diff --git a/src/i18n/locales/it/common.json b/src/i18n/locales/it/common.json index a73b575458..6104611f2b 100644 --- a/src/i18n/locales/it/common.json +++ b/src/i18n/locales/it/common.json @@ -5,8 +5,8 @@ }, "number_format": { "thousand_suffix": "k", - "million_suffix": "mln", - "billion_suffix": "mld" + "million_suffix": "m", + "billion_suffix": "b" }, "welcome": "Benvenuto, {{name}}! Hai {{count}} notifiche.", "items": { diff --git a/src/i18n/locales/ja/common.json b/src/i18n/locales/ja/common.json index 4a4f3215c5..c507b0e46d 100644 --- a/src/i18n/locales/ja/common.json +++ b/src/i18n/locales/ja/common.json @@ -4,9 +4,9 @@ "description": "エディター内のAIデベロッパーチーム全体。" }, "number_format": { - "thousand_suffix": "千", - "million_suffix": "百万", - "billion_suffix": "十億" + "thousand_suffix": "k", + "million_suffix": "m", + "billion_suffix": "b" }, "welcome": "ようこそ、{{name}}さん!{{count}}件の通知があります。", "items": { diff --git a/src/i18n/locales/ko/common.json b/src/i18n/locales/ko/common.json index e00cc6deba..b7c9f0de24 100644 --- a/src/i18n/locales/ko/common.json +++ b/src/i18n/locales/ko/common.json @@ -4,9 +4,9 @@ "description": "에디터 내에서 동작하는 AI 개발팀 전체입니다." }, "number_format": { - "thousand_suffix": "천", - "million_suffix": "백만", - "billion_suffix": "십억" + "thousand_suffix": "k", + "million_suffix": "m", + "billion_suffix": "b" }, "welcome": "안녕하세요, {{name}}님! {{count}}개의 알림이 있습니다.", "items": { diff --git a/src/i18n/locales/pl/common.json b/src/i18n/locales/pl/common.json index 3572ec26cb..b23e771ad4 100644 --- a/src/i18n/locales/pl/common.json +++ b/src/i18n/locales/pl/common.json @@ -4,9 +4,9 @@ "description": "Cały zespół programistów AI w Twoim edytorze." }, "number_format": { - "thousand_suffix": "tys.", - "million_suffix": "mln", - "billion_suffix": "mld" + "thousand_suffix": "k", + "million_suffix": "m", + "billion_suffix": "b" }, "welcome": "Witaj, {{name}}! Masz {{count}} powiadomień.", "items": { diff --git a/src/i18n/locales/pt-BR/common.json b/src/i18n/locales/pt-BR/common.json index 5106a708a6..6a3a0d7a2b 100644 --- a/src/i18n/locales/pt-BR/common.json +++ b/src/i18n/locales/pt-BR/common.json @@ -5,8 +5,8 @@ }, "number_format": { "thousand_suffix": "k", - "million_suffix": "mi", - "billion_suffix": "bi" + "million_suffix": "m", + "billion_suffix": "b" }, "welcome": "Bem-vindo(a), {{name}}! Você tem {{count}} notificações.", "items": { diff --git a/src/i18n/locales/tr/common.json b/src/i18n/locales/tr/common.json index 961ad6c68a..b8765b744a 100644 --- a/src/i18n/locales/tr/common.json +++ b/src/i18n/locales/tr/common.json @@ -4,9 +4,9 @@ "description": "Düzenleyicinizde tam bir AI geliştirici ekibi." }, "number_format": { - "thousand_suffix": "B", - "million_suffix": "M", - "billion_suffix": "Mr" + "thousand_suffix": "k", + "million_suffix": "m", + "billion_suffix": "b" }, "welcome": "Hoş geldiniz, {{name}}! {{count}} bildiriminiz var.", "items": { diff --git a/src/i18n/locales/vi/common.json b/src/i18n/locales/vi/common.json index bd9656ac9f..7cbea848ce 100644 --- a/src/i18n/locales/vi/common.json +++ b/src/i18n/locales/vi/common.json @@ -5,8 +5,8 @@ }, "number_format": { "thousand_suffix": "k", - "million_suffix": "tr", - "billion_suffix": "tỷ" + "million_suffix": "m", + "billion_suffix": "b" }, "welcome": "Chào mừng, {{name}}! Bạn có {{count}} thông báo.", "items": { diff --git a/src/i18n/locales/zh-CN/common.json b/src/i18n/locales/zh-CN/common.json index 0bd4e740c5..591958aab3 100644 --- a/src/i18n/locales/zh-CN/common.json +++ b/src/i18n/locales/zh-CN/common.json @@ -4,9 +4,9 @@ "description": "您编辑器中的完整AI开发团队。" }, "number_format": { - "thousand_suffix": "千", - "million_suffix": "百万", - "billion_suffix": "十亿" + "thousand_suffix": "k", + "million_suffix": "m", + "billion_suffix": "b" }, "welcome": "欢迎,{{name}}!您有 {{count}} 条通知。", "items": { diff --git a/src/i18n/locales/zh-TW/common.json b/src/i18n/locales/zh-TW/common.json index 29895eaba4..b2059d5547 100644 --- a/src/i18n/locales/zh-TW/common.json +++ b/src/i18n/locales/zh-TW/common.json @@ -4,9 +4,9 @@ "description": "您編輯器中的完整AI開發團隊。" }, "number_format": { - "thousand_suffix": "千", - "million_suffix": "百萬", - "billion_suffix": "十億" + "thousand_suffix": "k", + "million_suffix": "m", + "billion_suffix": "b" }, "welcome": "歡迎,{{name}}!您有 {{count}} 條通知。", "items": { diff --git a/src/integrations/misc/open-file.ts b/src/integrations/misc/open-file.ts index 5698e919de..572082c251 100644 --- a/src/integrations/misc/open-file.ts +++ b/src/integrations/misc/open-file.ts @@ -23,6 +23,23 @@ export async function openImage(dataUri: string) { interface OpenFileOptions { create?: boolean content?: string + searchParents?: boolean + startFromWorkspace?: boolean +} + +async function findFileInParentDirs(searchPath: string, fileName: string): Promise { + try { + const fullPath = path.join(searchPath, fileName) + await vscode.workspace.fs.stat(vscode.Uri.file(fullPath)) + return fullPath + } catch { + const parentDir = path.dirname(searchPath) + if (parentDir === searchPath) { + // Hit root + return null + } + return findFileInParentDirs(parentDir, fileName) + } } export async function openFile(filePath: string, options: OpenFileOptions = {}) { @@ -34,7 +51,17 @@ export async function openFile(filePath: string, options: OpenFileOptions = {}) } // If path starts with ./, resolve it relative to workspace root - const fullPath = filePath.startsWith("./") ? path.join(workspaceRoot, filePath.slice(2)) : filePath + let fullPath = filePath.startsWith("./") ? path.join(workspaceRoot, filePath.slice(2)) : filePath + + // Handle recursive search + if (options.searchParents) { + const startDir = options.startFromWorkspace ? workspaceRoot : path.dirname(fullPath) + const fileName = path.basename(filePath) + const foundPath = await findFileInParentDirs(startDir, fileName) + if (foundPath) { + fullPath = foundPath + } + } const uri = vscode.Uri.file(fullPath) diff --git a/src/integrations/workspace/WorkspaceTracker.ts b/src/integrations/workspace/WorkspaceTracker.ts index dbb6647e44..4621fdc99e 100644 --- a/src/integrations/workspace/WorkspaceTracker.ts +++ b/src/integrations/workspace/WorkspaceTracker.ts @@ -60,21 +60,35 @@ class WorkspaceTracker { this.disposables.push(watcher) - this.disposables.push(vscode.window.tabGroups.onDidChangeTabs(() => this.workspaceDidReset())) + // Listen for tab changes and call workspaceDidUpdate directly + this.disposables.push( + vscode.window.tabGroups.onDidChangeTabs(() => { + // Reset if workspace path has changed + if (this.prevWorkSpacePath !== this.cwd) { + this.workspaceDidReset() + } else { + // Otherwise just update + this.workspaceDidUpdate() + } + }), + ) } private getOpenedTabsInfo() { - return vscode.window.tabGroups.all.flatMap((group) => - group.tabs - .filter((tab) => tab.input instanceof vscode.TabInputText) - .map((tab) => { - const path = (tab.input as vscode.TabInputText).uri.fsPath - return { + return vscode.window.tabGroups.all.reduce( + (acc, group) => { + const groupTabs = group.tabs + .filter((tab) => tab.input instanceof vscode.TabInputText) + .map((tab) => ({ label: tab.label, isActive: tab.isActive, - path: toRelativePath(path, this.cwd || ""), - } - }), + path: toRelativePath((tab.input as vscode.TabInputText).uri.fsPath, this.cwd || ""), + })) + + groupTabs.forEach((tab) => (tab.isActive ? acc.unshift(tab) : acc.push(tab))) + return acc + }, + [] as Array<{ label: string; isActive: boolean; path: string }>, ) } diff --git a/src/services/mcp/__tests__/McpHub.test.ts b/src/services/mcp/__tests__/McpHub.test.ts index 737ed7f11e..7fcce6662a 100644 --- a/src/services/mcp/__tests__/McpHub.test.ts +++ b/src/services/mcp/__tests__/McpHub.test.ts @@ -14,7 +14,7 @@ jest.mock("../../../core/webview/ClineProvider") describe("McpHub", () => { let mcpHub: McpHubType let mockProvider: Partial - const mockSettingsPath = "/mock/settings/path/cline_mcp_settings.json" + const mockSettingsPath = "/mock/settings/path/mcp_settings.json" beforeEach(() => { jest.clearAllMocks() diff --git a/src/services/tree-sitter/__tests__/index.test.ts b/src/services/tree-sitter/__tests__/index.test.ts index bc506c031d..3f16deddeb 100644 --- a/src/services/tree-sitter/__tests__/index.test.ts +++ b/src/services/tree-sitter/__tests__/index.test.ts @@ -122,7 +122,6 @@ describe("Tree-sitter Service", () => { expect(result).toContain("class TestClass") expect(result).toContain("testMethod()") - expect(result).toContain("|----") }) it("should handle parsing errors gracefully", async () => { diff --git a/src/services/tree-sitter/index.ts b/src/services/tree-sitter/index.ts index 138e41c2a9..e080e9ec00 100644 --- a/src/services/tree-sitter/index.ts +++ b/src/services/tree-sitter/index.ts @@ -55,7 +55,7 @@ export async function parseSourceCodeDefinitionsForFile( // Parse the file if we have a parser for it const definitions = await parseFile(filePath, languageParsers, rooIgnoreController) if (definitions) { - return `${path.basename(filePath)}\n${definitions}` + return `# ${path.basename(filePath)}\n${definitions}` } return undefined @@ -90,7 +90,7 @@ export async function parseSourceCodeForDefinitionsTopLevel( for (const file of allowedFilesToParse) { const definitions = await parseFile(file, languageParsers, rooIgnoreController) if (definitions) { - result += `${path.relative(dirPath, file).toPosix()}\n${definitions}\n` + result += `# ${path.relative(dirPath, file).toPosix()}\n${definitions}\n` } // else { // filesWithoutDefinitions.push(file) @@ -177,10 +177,6 @@ async function parseFile( return null } - // Add a header with file information and definition count - // Make sure to normalize path separators to forward slashes for consistency - formattedOutput += `// File: ${path.basename(filePath).replace(/\\/g, "/")} (${captures.length} definitions)\n` - // Sort captures by their start position captures.sort((a, b) => a.node.startPosition.row - b.node.startPosition.row) @@ -224,15 +220,10 @@ async function parseFile( const lineKey = `${startLine}-${lines[startLine]}` const nodeLineKey = `${nodeLine}-${lines[nodeLine]}` - // Add separator if there's a gap between captures - if (lastLine !== -1 && startLine > lastLine + 1) { - formattedOutput += "|| ||----\n" - } - // Always show the class definition line if (name.includes("class") || (name.includes("name") && name.includes("class"))) { if (!processedLines.has(lineKey)) { - formattedOutput += `│| ${startLine} - ${endLine} ||${lines[startLine]}\n` + formattedOutput += `${startLine}--${endLine} | ${lines[startLine]}\n` processedLines.add(lineKey) } } @@ -243,7 +234,7 @@ async function parseFile( // For function definitions, we need to show the actual line with the function/method name // This handles the test case mocks where nodeLine is 2 (for "testMethod()") if (!processedLines.has(nodeLineKey) && lines[nodeLine]) { - formattedOutput += `│| ${nodeLine} - ${node.endPosition.row} ||${lines[nodeLine]}\n` + formattedOutput += `${nodeLine}--${node.endPosition.row} | ${lines[nodeLine]}\n` processedLines.add(nodeLineKey) } } @@ -256,7 +247,7 @@ async function parseFile( !name.includes("method") ) { if (!processedLines.has(lineKey)) { - formattedOutput += `│| ${startLine} - ${endLine} ||${lines[startLine]}\n` + formattedOutput += `${startLine}--${endLine} | ${lines[startLine]}\n` processedLines.add(lineKey) } } @@ -270,22 +261,7 @@ async function parseFile( } if (formattedOutput.length > 0) { - // Create categorized summary of definitions - const classCount = formattedOutput.split("class").length - 1 - const functionCount = - formattedOutput.split("function").length - 1 + (formattedOutput.split("method").length - 1) - const variableCount = - formattedOutput.split("const").length - - 1 + - formattedOutput.split("let").length - - 1 + - formattedOutput.split("var").length - - 1 - - // Add a footer with a summary of definitions - const summary = `// Summary: ${classCount > 0 ? `${classCount} classes, ` : ""}${functionCount > 0 ? `${functionCount} functions/methods, ` : ""}${variableCount > 0 ? `${variableCount} variables` : ""}` - - return `|----\n${formattedOutput}|----\n${summary}\n` + return formattedOutput } return null } diff --git a/src/services/tree-sitter/queries/typescript.ts b/src/services/tree-sitter/queries/typescript.ts index b30c10e915..3db50f7f84 100644 --- a/src/services/tree-sitter/queries/typescript.ts +++ b/src/services/tree-sitter/queries/typescript.ts @@ -29,4 +29,19 @@ export default ` (class_declaration name: (type_identifier) @name.definition.class) @definition.class + +(call_expression + function: (identifier) @func_name + arguments: (arguments + (string) @name + [(arrow_function) (function_expression)]) @definition.test) + (#match? @func_name "^(describe|test|it)$") + +(assignment_expression + left: (member_expression + object: (identifier) @obj + property: (property_identifier) @prop) + right: [(arrow_function) (function_expression)]) @definition.test + (#eq? @obj "exports") + (#eq? @prop "test") ` diff --git a/src/shared/api.ts b/src/shared/api.ts index ab672c6a11..a4eb382ef7 100644 --- a/src/shared/api.ts +++ b/src/shared/api.ts @@ -48,6 +48,7 @@ export interface ApiHandlerOptions { vertexRegion?: string openAiBaseUrl?: string openAiApiKey?: string + openAiR1FormatEnabled?: boolean openAiModelId?: string openAiCustomModelInfo?: ModelInfo openAiUseAzure?: boolean @@ -127,6 +128,7 @@ export const API_CONFIG_KEYS: GlobalStateKey[] = [ "azureApiVersion", "openRouterUseMiddleOutTransform", "openAiStreamingEnabled", + "openAiR1FormatEnabled", // "deepSeekBaseUrl", // not exist on GlobalStateKey // "includeMaxTokens", // not exist on GlobalStateKey "unboundModelId", diff --git a/src/shared/globalFileNames.ts b/src/shared/globalFileNames.ts index 6088e95d99..f26174d224 100644 --- a/src/shared/globalFileNames.ts +++ b/src/shared/globalFileNames.ts @@ -4,6 +4,7 @@ export const GlobalFileNames = { glamaModels: "glama_models.json", openRouterModels: "openrouter_models.json", requestyModels: "requesty_models.json", - mcpSettings: "cline_mcp_settings.json", + mcpSettings: "mcp_settings.json", unboundModels: "unbound_models.json", + customModes: "custom_modes.json", } diff --git a/src/shared/globalState.ts b/src/shared/globalState.ts index 5896bee9cd..5513fe7134 100644 --- a/src/shared/globalState.ts +++ b/src/shared/globalState.ts @@ -68,6 +68,7 @@ export const GLOBAL_STATE_KEYS = [ "modelMaxThinkingTokens", "azureApiVersion", "openAiStreamingEnabled", + "openAiR1FormatEnabled", "openRouterModelId", "openRouterModelInfo", "openRouterBaseUrl", diff --git a/src/utils/migrateSettings.ts b/src/utils/migrateSettings.ts new file mode 100644 index 0000000000..a4d414b52f --- /dev/null +++ b/src/utils/migrateSettings.ts @@ -0,0 +1,53 @@ +import * as vscode from "vscode" +import * as path from "path" +import * as fs from "fs/promises" +import { fileExistsAtPath } from "./fs" +import { GlobalFileNames } from "../shared/globalFileNames" + +/** + * Migrates old settings files to new file names + * + * TODO: Remove this migration code in September 2025 (6 months after implementation) + */ +export async function migrateSettings( + context: vscode.ExtensionContext, + outputChannel: vscode.OutputChannel, +): Promise { + // Legacy file names that need to be migrated to the new names in GlobalFileNames + const fileMigrations = [ + { oldName: "cline_custom_modes.json", newName: GlobalFileNames.customModes }, + { oldName: "cline_mcp_settings.json", newName: GlobalFileNames.mcpSettings }, + ] + + try { + const settingsDir = path.join(context.globalStorageUri.fsPath, "settings") + + // Check if settings directory exists first + if (!(await fileExistsAtPath(settingsDir))) { + outputChannel.appendLine("No settings directory found, no migrations necessary") + return + } + + // Process each file migration + for (const migration of fileMigrations) { + const oldPath = path.join(settingsDir, migration.oldName) + const newPath = path.join(settingsDir, migration.newName) + + // Only migrate if old file exists and new file doesn't exist yet + // This ensures we don't overwrite any existing new files + const oldFileExists = await fileExistsAtPath(oldPath) + const newFileExists = await fileExistsAtPath(newPath) + + if (oldFileExists && !newFileExists) { + await fs.rename(oldPath, newPath) + outputChannel.appendLine(`Renamed ${migration.oldName} to ${migration.newName}`) + } else { + outputChannel.appendLine( + `Skipping migration of ${migration.oldName} to ${migration.newName}: ${oldFileExists ? "new file already exists" : "old file not found"}`, + ) + } + } + } catch (error) { + outputChannel.appendLine(`Error migrating settings files: ${error}`) + } +} diff --git a/webview-ui/src/components/prompts/PromptsView.tsx b/webview-ui/src/components/prompts/PromptsView.tsx index 4011e15950..aaa291bc5a 100644 --- a/webview-ui/src/components/prompts/PromptsView.tsx +++ b/webview-ui/src/components/prompts/PromptsView.tsx @@ -462,6 +462,8 @@ const PromptsView = ({ onDone }: PromptsViewProps) => { values: { create: true, content: JSON.stringify({ customModes: [] }, null, 2), + searchParents: true, + startFromWorkspace: true, }, }) setShowConfigMenu(false) @@ -808,6 +810,8 @@ const PromptsView = ({ onDone }: PromptsViewProps) => { values: { create: true, content: "", + searchParents: true, + startFromWorkspace: true, }, }) }} @@ -915,6 +919,8 @@ const PromptsView = ({ onDone }: PromptsViewProps) => { values: { create: true, content: "", + searchParents: true, + startFromWorkspace: true, }, }) }} @@ -970,6 +976,8 @@ const PromptsView = ({ onDone }: PromptsViewProps) => { values: { create: true, content: "", + searchParents: true, + startFromWorkspace: true, }, }) } diff --git a/webview-ui/src/components/settings/ApiOptions.tsx b/webview-ui/src/components/settings/ApiOptions.tsx index f3e0f7822e..7cbd00f0a4 100644 --- a/webview-ui/src/components/settings/ApiOptions.tsx +++ b/webview-ui/src/components/settings/ApiOptions.tsx @@ -55,6 +55,7 @@ import { TemperatureControl } from "./TemperatureControl" import { validateApiConfiguration, validateModelId, validateBedrockArn } from "@/utils/validate" import { ApiErrorMessage } from "./ApiErrorMessage" import { ThinkingBudget } from "./ThinkingBudget" +import { R1FormatSetting } from "./R1FormatSetting" interface ApiOptionsProps { uriScheme: string | undefined @@ -104,7 +105,6 @@ const ApiOptions = ({ !!apiConfiguration?.googleGeminiBaseUrl, ) const [isDescriptionExpanded, setIsDescriptionExpanded] = useState(false) - const noTransform = (value: T) => value const inputEventTransform = (event: E) => (event as { target: HTMLInputElement })?.target?.value as any @@ -696,6 +696,10 @@ const ApiOptions = ({ serviceName="OpenAI" serviceUrl="https://platform.openai.com" /> + diff --git a/webview-ui/src/components/settings/R1FormatSetting.tsx b/webview-ui/src/components/settings/R1FormatSetting.tsx new file mode 100644 index 0000000000..6418c949bd --- /dev/null +++ b/webview-ui/src/components/settings/R1FormatSetting.tsx @@ -0,0 +1,25 @@ +import { Checkbox } from "vscrui" + +import { useAppTranslation } from "@/i18n/TranslationContext" + +interface R1FormatSettingProps { + onChange: (value: boolean) => void + openAiR1FormatEnabled?: boolean +} + +export const R1FormatSetting = ({ onChange, openAiR1FormatEnabled }: R1FormatSettingProps) => { + const { t } = useAppTranslation() + + return ( +
+
+ + {t("settings:modelInfo.enableR1Format")} + +
+

+ {t("settings:modelInfo.enableR1FormatTips")} +

+
+ ) +} diff --git a/webview-ui/src/components/settings/SettingsView.tsx b/webview-ui/src/components/settings/SettingsView.tsx index e2a5c6f25b..79a080a65b 100644 --- a/webview-ui/src/components/settings/SettingsView.tsx +++ b/webview-ui/src/components/settings/SettingsView.tsx @@ -136,7 +136,6 @@ const SettingsView = forwardRef(({ onDone }, // Make sure apiConfiguration is initialized and managed by SettingsView. const apiConfiguration = useMemo(() => cachedState.apiConfiguration ?? {}, [cachedState.apiConfiguration]) - useEffect(() => { // Update only when currentApiConfigName is changed. // Expected to be triggered by loadApiConfiguration/upsertApiConfiguration. @@ -168,7 +167,6 @@ const SettingsView = forwardRef(({ onDone }, } setChangeDetected(true) - return { ...prevState, apiConfiguration: { ...prevState.apiConfiguration, [field]: value } } }) }, diff --git a/webview-ui/src/i18n/locales/ca/common.json b/webview-ui/src/i18n/locales/ca/common.json index bdbe1d188a..2a10002acb 100644 --- a/webview-ui/src/i18n/locales/ca/common.json +++ b/webview-ui/src/i18n/locales/ca/common.json @@ -1,7 +1,7 @@ { "number_format": { - "thousand_suffix": "mil", - "million_suffix": "M", - "billion_suffix": "MM" + "thousand_suffix": "k", + "million_suffix": "m", + "billion_suffix": "b" } } diff --git a/webview-ui/src/i18n/locales/ca/settings.json b/webview-ui/src/i18n/locales/ca/settings.json index b5d5ff2708..283bd49b4d 100644 --- a/webview-ui/src/i18n/locales/ca/settings.json +++ b/webview-ui/src/i18n/locales/ca/settings.json @@ -349,13 +349,15 @@ "outputPrice": "Preu de sortida", "cacheReadsPrice": "Preu de lectures de caché", "cacheWritesPrice": "Preu d'escriptures de caché", + "enableStreaming": "Habilitar streaming", + "enableR1Format": "Activar els paràmetres del model R1", + "enableR1FormatTips": "S'ha d'activat quan s'utilitzen models R1 com el QWQ per evitar errors 400", + "useAzure": "Utilitzar Azure", + "azureApiVersion": "Establir versió de l'API d'Azure", "gemini": { "freeRequests": "* Gratuït fins a {{count}} sol·licituds per minut. Després d'això, la facturació depèn de la mida del prompt.", "pricingDetails": "Per a més informació, consulteu els detalls de preus." - }, - "enableStreaming": "Habilitar streaming", - "useAzure": "Utilitzar Azure", - "azureApiVersion": "Establir versió de l'API d'Azure" + } }, "modelPicker": { "automaticFetch": "L'extensió obté automàticament la llista més recent de models disponibles a {{serviceName}}. Si no esteu segur de quin model triar, Roo Code funciona millor amb {{defaultModelId}}. També podeu cercar \"free\" per a opcions gratuïtes actualment disponibles.", diff --git a/webview-ui/src/i18n/locales/de/common.json b/webview-ui/src/i18n/locales/de/common.json index ba8ee29b2d..2a10002acb 100644 --- a/webview-ui/src/i18n/locales/de/common.json +++ b/webview-ui/src/i18n/locales/de/common.json @@ -1,7 +1,7 @@ { "number_format": { - "thousand_suffix": "Tsd.", - "million_suffix": "Mio.", - "billion_suffix": "Mrd." + "thousand_suffix": "k", + "million_suffix": "m", + "billion_suffix": "b" } } diff --git a/webview-ui/src/i18n/locales/de/settings.json b/webview-ui/src/i18n/locales/de/settings.json index 05d195a093..402bcc99e6 100644 --- a/webview-ui/src/i18n/locales/de/settings.json +++ b/webview-ui/src/i18n/locales/de/settings.json @@ -350,6 +350,8 @@ "cacheReadsPrice": "Cache-Lesepreis", "cacheWritesPrice": "Cache-Schreibpreis", "enableStreaming": "Streaming aktivieren", + "enableR1Format": "R1-Modellparameter aktivieren", + "enableR1FormatTips": "Muss aktiviert werden, wenn R1-Modelle wie QWQ verwendet werden, um 400-Fehler zu vermeiden", "useAzure": "Azure verwenden", "azureApiVersion": "Azure API-Version festlegen", "gemini": { diff --git a/webview-ui/src/i18n/locales/en/settings.json b/webview-ui/src/i18n/locales/en/settings.json index 7fd923b4ee..2cf9c16326 100644 --- a/webview-ui/src/i18n/locales/en/settings.json +++ b/webview-ui/src/i18n/locales/en/settings.json @@ -350,6 +350,8 @@ "cacheReadsPrice": "Cache reads price", "cacheWritesPrice": "Cache writes price", "enableStreaming": "Enable streaming", + "enableR1Format": "Enable R1 model parameters", + "enableR1FormatTips": "Must be enabled when using R1 models such as QWQ to prevent 400 errors", "useAzure": "Use Azure", "azureApiVersion": "Set Azure API version", "gemini": { diff --git a/webview-ui/src/i18n/locales/es/common.json b/webview-ui/src/i18n/locales/es/common.json index f0ed131857..2a10002acb 100644 --- a/webview-ui/src/i18n/locales/es/common.json +++ b/webview-ui/src/i18n/locales/es/common.json @@ -1,7 +1,7 @@ { "number_format": { "thousand_suffix": "k", - "million_suffix": "M", - "billion_suffix": "MM" + "million_suffix": "m", + "billion_suffix": "b" } } diff --git a/webview-ui/src/i18n/locales/es/settings.json b/webview-ui/src/i18n/locales/es/settings.json index 9c5ae82da9..de61e0fbd1 100644 --- a/webview-ui/src/i18n/locales/es/settings.json +++ b/webview-ui/src/i18n/locales/es/settings.json @@ -350,6 +350,8 @@ "cacheReadsPrice": "Precio de lecturas de caché", "cacheWritesPrice": "Precio de escrituras de caché", "enableStreaming": "Habilitar streaming", + "enableR1Format": "Habilitar parámetros del modelo R1", + "enableR1FormatTips": "Debe habilitarse al utilizar modelos R1 como QWQ, para evitar el error 400", "useAzure": "Usar Azure", "azureApiVersion": "Establecer versión de API de Azure", "gemini": { diff --git a/webview-ui/src/i18n/locales/fr/common.json b/webview-ui/src/i18n/locales/fr/common.json index e55e852b3f..2a10002acb 100644 --- a/webview-ui/src/i18n/locales/fr/common.json +++ b/webview-ui/src/i18n/locales/fr/common.json @@ -1,7 +1,7 @@ { "number_format": { "thousand_suffix": "k", - "million_suffix": "M", - "billion_suffix": "Md" + "million_suffix": "m", + "billion_suffix": "b" } } diff --git a/webview-ui/src/i18n/locales/fr/settings.json b/webview-ui/src/i18n/locales/fr/settings.json index 1553e11876..42e11c74ed 100644 --- a/webview-ui/src/i18n/locales/fr/settings.json +++ b/webview-ui/src/i18n/locales/fr/settings.json @@ -350,6 +350,8 @@ "cacheReadsPrice": "Prix des lectures de cache", "cacheWritesPrice": "Prix des écritures de cache", "enableStreaming": "Activer le streaming", + "enableR1Format": "Activer les paramètres du modèle R1", + "enableR1FormatTips": "Doit être activé lors de l'utilisation de modèles R1 tels que QWQ, pour éviter l'erreur 400", "useAzure": "Utiliser Azure", "azureApiVersion": "Définir la version de l'API Azure", "gemini": { diff --git a/webview-ui/src/i18n/locales/hi/common.json b/webview-ui/src/i18n/locales/hi/common.json index b1a651ba2e..2a10002acb 100644 --- a/webview-ui/src/i18n/locales/hi/common.json +++ b/webview-ui/src/i18n/locales/hi/common.json @@ -1,7 +1,7 @@ { "number_format": { - "thousand_suffix": "ह", - "million_suffix": "लाख", - "billion_suffix": "अरब" + "thousand_suffix": "k", + "million_suffix": "m", + "billion_suffix": "b" } } diff --git a/webview-ui/src/i18n/locales/hi/settings.json b/webview-ui/src/i18n/locales/hi/settings.json index 26054ea70d..ebb698726a 100644 --- a/webview-ui/src/i18n/locales/hi/settings.json +++ b/webview-ui/src/i18n/locales/hi/settings.json @@ -350,6 +350,8 @@ "cacheReadsPrice": "कैश रीड्स मूल्य", "cacheWritesPrice": "कैश राइट्स मूल्य", "enableStreaming": "स्ट्रीमिंग सक्षम करें", + "enableR1Format": "R1 मॉडल पैरामीटर सक्षम करें", + "enableR1FormatTips": "QWQ जैसी R1 मॉडलों का उपयोग करते समय इसे सक्षम करना आवश्यक है, ताकि 400 त्रुटि से बचा जा सके", "useAzure": "Azure का उपयोग करें", "azureApiVersion": "Azure API संस्करण सेट करें", "gemini": { diff --git a/webview-ui/src/i18n/locales/it/common.json b/webview-ui/src/i18n/locales/it/common.json index c010b11956..2a10002acb 100644 --- a/webview-ui/src/i18n/locales/it/common.json +++ b/webview-ui/src/i18n/locales/it/common.json @@ -1,7 +1,7 @@ { "number_format": { "thousand_suffix": "k", - "million_suffix": "Mln", - "billion_suffix": "Mld" + "million_suffix": "m", + "billion_suffix": "b" } } diff --git a/webview-ui/src/i18n/locales/it/settings.json b/webview-ui/src/i18n/locales/it/settings.json index 1e62f7bac8..f59380fffc 100644 --- a/webview-ui/src/i18n/locales/it/settings.json +++ b/webview-ui/src/i18n/locales/it/settings.json @@ -350,6 +350,8 @@ "cacheReadsPrice": "Prezzo letture cache", "cacheWritesPrice": "Prezzo scritture cache", "enableStreaming": "Abilita streaming", + "enableR1Format": "Abilita i parametri del modello R1", + "enableR1FormatTips": "Deve essere abilitato quando si utilizzano modelli R1 come QWQ, per evitare l'errore 400", "useAzure": "Usa Azure", "azureApiVersion": "Imposta versione API Azure", "gemini": { diff --git a/webview-ui/src/i18n/locales/ja/common.json b/webview-ui/src/i18n/locales/ja/common.json index b76d0c03a9..2a10002acb 100644 --- a/webview-ui/src/i18n/locales/ja/common.json +++ b/webview-ui/src/i18n/locales/ja/common.json @@ -1,7 +1,7 @@ { "number_format": { "thousand_suffix": "k", - "million_suffix": "M", - "billion_suffix": "B" + "million_suffix": "m", + "billion_suffix": "b" } } diff --git a/webview-ui/src/i18n/locales/ja/settings.json b/webview-ui/src/i18n/locales/ja/settings.json index 5bbbc20a6f..7673e95b26 100644 --- a/webview-ui/src/i18n/locales/ja/settings.json +++ b/webview-ui/src/i18n/locales/ja/settings.json @@ -350,6 +350,8 @@ "cacheReadsPrice": "キャッシュ読み取り価格", "cacheWritesPrice": "キャッシュ書き込み価格", "enableStreaming": "ストリーミングを有効化", + "enableR1Format": "R1モデルパラメータを有効にする", + "enableR1FormatTips": "QWQなどのR1モデルを使用する際には、有効にする必要があります。400エラーを防ぐために", "useAzure": "Azureを使用", "azureApiVersion": "Azure APIバージョンを設定", "gemini": { diff --git a/webview-ui/src/i18n/locales/ko/common.json b/webview-ui/src/i18n/locales/ko/common.json index 4ee4c67efd..2a10002acb 100644 --- a/webview-ui/src/i18n/locales/ko/common.json +++ b/webview-ui/src/i18n/locales/ko/common.json @@ -1,7 +1,7 @@ { "number_format": { - "thousand_suffix": "천", - "million_suffix": "백만", - "billion_suffix": "십억" + "thousand_suffix": "k", + "million_suffix": "m", + "billion_suffix": "b" } } diff --git a/webview-ui/src/i18n/locales/ko/settings.json b/webview-ui/src/i18n/locales/ko/settings.json index 60d0e94405..3bcab956d4 100644 --- a/webview-ui/src/i18n/locales/ko/settings.json +++ b/webview-ui/src/i18n/locales/ko/settings.json @@ -350,6 +350,8 @@ "cacheReadsPrice": "캐시 읽기 가격", "cacheWritesPrice": "캐시 쓰기 가격", "enableStreaming": "스트리밍 활성화", + "enableR1Format": "R1 모델 매개변수 활성화", + "enableR1FormatTips": "QWQ와 같은 R1 모델을 사용할 때 활성화해야 하며, 400 오류를 방지합니다", "useAzure": "Azure 사용", "azureApiVersion": "Azure API 버전 설정", "gemini": { diff --git a/webview-ui/src/i18n/locales/pl/common.json b/webview-ui/src/i18n/locales/pl/common.json index e020754bf2..2a10002acb 100644 --- a/webview-ui/src/i18n/locales/pl/common.json +++ b/webview-ui/src/i18n/locales/pl/common.json @@ -1,7 +1,7 @@ { "number_format": { - "thousand_suffix": "tys.", - "million_suffix": "mln", - "billion_suffix": "mld" + "thousand_suffix": "k", + "million_suffix": "m", + "billion_suffix": "b" } } diff --git a/webview-ui/src/i18n/locales/pl/settings.json b/webview-ui/src/i18n/locales/pl/settings.json index 1e4709df3f..91f1826ce9 100644 --- a/webview-ui/src/i18n/locales/pl/settings.json +++ b/webview-ui/src/i18n/locales/pl/settings.json @@ -350,6 +350,8 @@ "cacheReadsPrice": "Cena odczytów bufora", "cacheWritesPrice": "Cena zapisów bufora", "enableStreaming": "Włącz strumieniowanie", + "enableR1Format": "Włącz parametry modelu R1", + "enableR1FormatTips": "Należy włączyć podczas korzystania z modeli R1, takich jak QWQ, aby uniknąć błędu 400", "useAzure": "Użyj Azure", "azureApiVersion": "Ustaw wersję API Azure", "gemini": { diff --git a/webview-ui/src/i18n/locales/pt-BR/common.json b/webview-ui/src/i18n/locales/pt-BR/common.json index a003f6ee91..2a10002acb 100644 --- a/webview-ui/src/i18n/locales/pt-BR/common.json +++ b/webview-ui/src/i18n/locales/pt-BR/common.json @@ -1,7 +1,7 @@ { "number_format": { - "thousand_suffix": "mil", - "million_suffix": "mi", - "billion_suffix": "bi" + "thousand_suffix": "k", + "million_suffix": "m", + "billion_suffix": "b" } } diff --git a/webview-ui/src/i18n/locales/pt-BR/settings.json b/webview-ui/src/i18n/locales/pt-BR/settings.json index db3f745830..d06c69ecb9 100644 --- a/webview-ui/src/i18n/locales/pt-BR/settings.json +++ b/webview-ui/src/i18n/locales/pt-BR/settings.json @@ -350,6 +350,8 @@ "cacheReadsPrice": "Preço de leituras de cache", "cacheWritesPrice": "Preço de escritas de cache", "enableStreaming": "Ativar streaming", + "enableR1Format": "Ativar parâmetros do modelo R1", + "enableR1FormatTips": "Deve ser ativado ao usar modelos R1 como QWQ, para evitar erro 400", "useAzure": "Usar Azure", "azureApiVersion": "Definir versão da API Azure", "gemini": { diff --git a/webview-ui/src/i18n/locales/tr/common.json b/webview-ui/src/i18n/locales/tr/common.json index 9bd908ea14..2a10002acb 100644 --- a/webview-ui/src/i18n/locales/tr/common.json +++ b/webview-ui/src/i18n/locales/tr/common.json @@ -1,7 +1,7 @@ { "number_format": { - "thousand_suffix": "B", - "million_suffix": "Mn", - "billion_suffix": "Mr" + "thousand_suffix": "k", + "million_suffix": "m", + "billion_suffix": "b" } } diff --git a/webview-ui/src/i18n/locales/tr/settings.json b/webview-ui/src/i18n/locales/tr/settings.json index d02e16cd5c..d49d784f79 100644 --- a/webview-ui/src/i18n/locales/tr/settings.json +++ b/webview-ui/src/i18n/locales/tr/settings.json @@ -350,6 +350,8 @@ "cacheReadsPrice": "Önbellek okuma fiyatı", "cacheWritesPrice": "Önbellek yazma fiyatı", "enableStreaming": "Akışı etkinleştir", + "enableR1Format": "R1 model parametrelerini etkinleştir", + "enableR1FormatTips": "QWQ gibi R1 modelleri kullanıldığında etkinleştirilmelidir, 400 hatası alınmaması için", "useAzure": "Azure kullan", "azureApiVersion": "Azure API sürümünü ayarla", "gemini": { diff --git a/webview-ui/src/i18n/locales/vi/common.json b/webview-ui/src/i18n/locales/vi/common.json index dc5650760a..2a10002acb 100644 --- a/webview-ui/src/i18n/locales/vi/common.json +++ b/webview-ui/src/i18n/locales/vi/common.json @@ -1,7 +1,7 @@ { "number_format": { "thousand_suffix": "k", - "million_suffix": "tr", - "billion_suffix": "tỷ" + "million_suffix": "m", + "billion_suffix": "b" } } diff --git a/webview-ui/src/i18n/locales/vi/settings.json b/webview-ui/src/i18n/locales/vi/settings.json index bd197f2aab..efbc5f0db2 100644 --- a/webview-ui/src/i18n/locales/vi/settings.json +++ b/webview-ui/src/i18n/locales/vi/settings.json @@ -350,6 +350,8 @@ "cacheReadsPrice": "Giá đọc bộ nhớ đệm", "cacheWritesPrice": "Giá ghi bộ nhớ đệm", "enableStreaming": "Bật streaming", + "enableR1Format": "Kích hoạt tham số mô hình R1", + "enableR1FormatTips": "Cần kích hoạt khi sử dụng các mô hình R1 như QWQ, để tránh lỗi 400", "useAzure": "Sử dụng Azure", "azureApiVersion": "Đặt phiên bản API Azure", "gemini": { diff --git a/webview-ui/src/i18n/locales/zh-CN/common.json b/webview-ui/src/i18n/locales/zh-CN/common.json index a1d34b0059..2a10002acb 100644 --- a/webview-ui/src/i18n/locales/zh-CN/common.json +++ b/webview-ui/src/i18n/locales/zh-CN/common.json @@ -1,7 +1,7 @@ { "number_format": { - "thousand_suffix": "千", - "million_suffix": "百万", - "billion_suffix": "十亿" + "thousand_suffix": "k", + "million_suffix": "m", + "billion_suffix": "b" } } diff --git a/webview-ui/src/i18n/locales/zh-CN/settings.json b/webview-ui/src/i18n/locales/zh-CN/settings.json index d19096787d..deef7addb9 100644 --- a/webview-ui/src/i18n/locales/zh-CN/settings.json +++ b/webview-ui/src/i18n/locales/zh-CN/settings.json @@ -350,6 +350,8 @@ "cacheReadsPrice": "缓存读取价格", "cacheWritesPrice": "缓存写入价格", "enableStreaming": "启用流式传输", + "enableR1Format": "启用R1模型传参", + "enableR1FormatTips": "当使用QWQ等类R1模型时需启用,防止报400错误", "useAzure": "使用 Azure 服务", "azureApiVersion": "设置 Azure API 版本", "gemini": { diff --git a/webview-ui/src/i18n/locales/zh-TW/common.json b/webview-ui/src/i18n/locales/zh-TW/common.json index 40f2534e47..2a10002acb 100644 --- a/webview-ui/src/i18n/locales/zh-TW/common.json +++ b/webview-ui/src/i18n/locales/zh-TW/common.json @@ -1,7 +1,7 @@ { "number_format": { - "thousand_suffix": "千", - "million_suffix": "百萬", - "billion_suffix": "十億" + "thousand_suffix": "k", + "million_suffix": "m", + "billion_suffix": "b" } } diff --git a/webview-ui/src/i18n/locales/zh-TW/settings.json b/webview-ui/src/i18n/locales/zh-TW/settings.json index aed74ae3aa..e0f82854df 100644 --- a/webview-ui/src/i18n/locales/zh-TW/settings.json +++ b/webview-ui/src/i18n/locales/zh-TW/settings.json @@ -9,22 +9,22 @@ "header": { "title": "設定", "saveButtonTooltip": "儲存變更", - "nothingChangedTooltip": "沒有變更", - "doneButtonTooltip": "捨棄未儲存的變更並關閉設定面板" + "nothingChangedTooltip": "無任何變更", + "doneButtonTooltip": "取消未保存的變更並關閉設定面板" }, "unsavedChangesDialog": { - "title": "未儲存的變更", - "description": "是否捨棄變更並繼續?", + "title": "未保存的變更", + "description": "是否要取消變更並繼續?", "cancelButton": "取消", - "discardButton": "捨棄變更" + "discardButton": "取消變更" }, "sections": { "providers": "提供者", - "autoApprove": "自動核准", - "browser": "瀏覽器 / 電腦使用", + "autoApprove": "自動批准", + "browser": "瀏覽器/電腦使用", "checkpoints": "檢查點", "notifications": "通知", - "contextManagement": "內容管理", + "contextManagement": "上下文管理", "terminal": "終端機", "advanced": "進階", "experimental": "實驗性功能", @@ -32,75 +32,75 @@ "about": "關於 Roo Code" }, "autoApprove": { - "description": "允許 Roo 自動執行操作而無需核准。僅在您完全信任 AI 並理解相關安全風險的情況下啟用這些設定。", + "description": "允許 Roo 無需批准即執行操作。僅在您完全信任 AI 並了解相關安全風險時啟用這些設定。", "readOnly": { - "label": "始終核准唯讀操作", - "description": "啟用後,Roo 將自動檢視目錄內容並讀取檔案,無需點擊核准按鈕。" + "label": "始終批准只讀操作", + "description": "啟用後,Roo 將自動查看目錄內容和讀取文件,無需點擊批准按鈕。" }, "write": { - "label": "始終核准寫入操作", - "description": "自動建立和編輯檔案而無需核准", - "delayLabel": "寫入後延遲以允許診斷偵測潛在問題" + "label": "始終批准寫入操作", + "description": "自動建立和編輯文件而無需批准", + "delayLabel": "寫入後延遲以允許診斷檢測潛在問題" }, "browser": { - "label": "始終核准瀏覽器操作", - "description": "自動執行瀏覽器操作而無需核准", - "note": "注意:僅當模型支援電腦使用時適用" + "label": "始終批准瀏覽器操作", + "description": "自動執行瀏覽器操作而無需批准", + "note": "注意:僅適用於模型支援電腦使用時" }, "retry": { "label": "始終重試失敗的 API 請求", - "description": "當伺服器傳回錯誤回應時自動重試失敗的 API 請求", + "description": "當伺服器返回錯誤響應時自動重試失敗的 API 請求", "delayLabel": "重試請求前的延遲" }, "mcp": { - "label": "始終核准 MCP 工具", - "description": "在 MCP 伺服器檢視中啟用個別 MCP 工具的自動核准(需要此設定和工具的\"始終允許\"核取方塊)" + "label": "始終批准 MCP 工具", + "description": "在 MCP 伺服器檢視中啟用單個 MCP 工具的自動批准(需要此設定和工具的「始終允許」核取方框)" }, "modeSwitch": { - "label": "始終核准模式切換", - "description": "自動在不同模式之間切換而無需核准" + "label": "始終批准模式切換", + "description": "自動在不同模式之間切換而無需批准" }, "subtasks": { - "label": "始終核准子任務的建立和完成", - "description": "允許建立和完成子任務而無需核准" + "label": "始終批准子任務的建立與完成", + "description": "允許建立和完成子任務而無需批准" }, "execute": { - "label": "始終核准允許的執行操作", - "description": "自動執行允許的終端機命令而無需核准", - "allowedCommands": "允許的自動執行命令", - "allowedCommandsDescription": "當\"始終核准執行操作\"啟用時可以自動執行的命令前綴。添加 * 以允許所有命令(謹慎使用)。", - "commandPlaceholder": "輸入命令前綴(例如 'git ')", + "label": "始終批准允許的執行操作", + "description": "自動執行允許的終端機指令而無需批准", + "allowedCommands": "允許自動執行的指令", + "allowedCommandsDescription": "當「始終批准執行操作」啟用時可自動執行的指令前綴。加入 * 以允許所有指令(謹慎使用)。", + "commandPlaceholder": "輸入指令前綴(例如:git )", "addButton": "新增" } }, "providers": { - "configProfile": "設定檔案", + "configProfile": "配置設定檔", "description": "儲存不同的 API 設定以快速切換提供者和設定。", "apiProvider": "API 提供者", "model": "模型", - "nameEmpty": "名稱不能為空", + "nameEmpty": "名稱不可為空", "nameExists": "已存在同名的設定檔", "deleteProfile": "刪除設定檔", - "invalidArnFormat": "無效的 ARN 格式。請檢查上面的範例。", + "invalidArnFormat": "ARN 格式無效。請檢查上方示例。", "enterNewName": "輸入新名稱", "addProfile": "新增設定檔", "renameProfile": "重新命名設定檔", - "newProfile": "新建設定檔", + "newProfile": "新配置設定檔", "enterProfileName": "輸入設定檔名稱", "createProfile": "建立設定檔", "cannotDeleteOnlyProfile": "無法刪除唯一的設定檔", - "vscodeLmDescription": "VS Code 語言模型 API 允許您運行其他 VS Code 擴展提供的模型(包括但不限於 GitHub Copilot)。最簡單的方式是從 VS Code Marketplace 安裝 Copilot 和 Copilot Chat 擴展。", - "awsCustomArnUse": "輸入您要使用的模型的有效 AWS Bedrock ARN。格式範例:", - "awsCustomArnDesc": "確保 ARN 中的區域與您上面選擇的 AWS 區域匹配。", + "vscodeLmDescription": "VS Code 語言模型 API 可讓您執行其他擴充功能(如 GitHub Copilot)提供的模型。最快捷的方式是從 VS Code 市集安裝 Copilot 和 Copilot Chat 擴充功能。", + "awsCustomArnUse": "輸入要使用的模型有效 AWS Bedrock ARN。格式範例:", + "awsCustomArnDesc": "確保 ARN 中的區域與您選擇的 AWS 區域相符。", "openRouterApiKey": "OpenRouter API 金鑰", "getOpenRouterApiKey": "取得 OpenRouter API 金鑰", - "apiKeyStorageNotice": "API 金鑰安全儲存在 VSCode 的秘密儲存中", + "apiKeyStorageNotice": "API 金鑰安全儲存於 VSCode 金鑰儲存中", "glamaApiKey": "Glama API 金鑰", "getGlamaApiKey": "取得 Glama API 金鑰", - "useCustomBaseUrl": "使用自訂基礎 URL", + "useCustomBaseUrl": "使用自定義基礎 URL", "requestyApiKey": "Requesty API 金鑰", "getRequestyApiKey": "取得 Requesty API 金鑰", - "openRouterTransformsText": "將提示和訊息鏈壓縮到內容大小 (OpenRouter 轉換)", + "openRouterTransformsText": "將提示和訊息鏈壓縮到上下文大小 (OpenRouter 轉換)", "anthropicApiKey": "Anthropic API 金鑰", "getAnthropicApiKey": "取得 Anthropic API 金鑰", "deepSeekApiKey": "DeepSeek API 金鑰", @@ -111,109 +111,109 @@ "openAiBaseUrl": "基礎 URL", "getOpenAiApiKey": "取得 OpenAI API 金鑰", "mistralApiKey": "Mistral API 金鑰", - "getMistralApiKey": "取得 Mistral / Codestral API 金鑰", - "codestralBaseUrl": "Codestral 基礎 URL(選用)", - "codestralBaseUrlDesc": "設定 Codestral 模型的替代 URL。", - "awsCredentials": "AWS 憑證", - "awsProfile": "AWS 設定檔", - "awsProfileName": "AWS 設定檔名稱", + "getMistralApiKey": "取得 Mistral/Codestral API 金鑰", + "codestralBaseUrl": "Codestral 基礎 URL(可選)", + "codestralBaseUrlDesc": "設置 Codestral 模型的替代 URL。", + "awsCredentials": "AWS 認證", + "awsProfile": "AWS 個人設定", + "awsProfileName": "AWS 個人設定名稱", "awsAccessKey": "AWS 存取金鑰", - "awsSecretKey": "AWS 秘密金鑰", - "awsSessionToken": "AWS 工作階段權杖", + "awsSecretKey": "AWS 機密金鑰", + "awsSessionToken": "AWS 會話權杖", "awsRegion": "AWS 區域", "awsCrossRegion": "使用跨區域推論", - "vscodeLmModel": "VSCode LM 模型", - "vscodeLmWarning": "注意:這是一個非常實驗性的集成,提供者支援會有所不同。如果您收到有關不支援模型的錯誤,那麼這是提供者方面的問題。", + "vscodeLmModel": "語言模型", + "vscodeLmWarning": "注意:此為實驗性整合,提供者支援可能不同。若遇到模型不支援錯誤,請聯繫提供者。", "googleCloudSetup": { "title": "要使用 Google Cloud Vertex AI,您需要:", - "step1": "1. 建立 Google Cloud 帳戶,啟用 Vertex AI API 並啟用所需的 Claude 模型。", + "step1": "1. 建立 Google Cloud 帳戶,啟用 Vertex AI API 並啟用所需 Claude 模型。", "step2": "2. 安裝 Google Cloud CLI 並設定應用程式預設憑證。", - "step3": "3. 或建立具有憑證的服務帳戶。" + "step3": "3. 或建立具憑證的服務帳戶。" }, "googleCloudCredentials": "Google Cloud 憑證", "googleCloudKeyFile": "Google Cloud 金鑰檔案路徑", "googleCloudProjectId": "Google Cloud 專案 ID", "googleCloudRegion": "Google Cloud 區域", "lmStudio": { - "baseUrl": "基礎 URL(選用)", + "baseUrl": "基礎 URL(可選)", "modelId": "模型 ID", - "speculativeDecoding": "啟用推測解碼", + "speculativeDecoding": "啟用預測性解碼", "draftModelId": "草稿模型 ID", - "draftModelDesc": "推測解碼要正確運作,草稿模型必須來自相同的模型系列。", + "draftModelDesc": "草稿模型必須來自相同模型系列才能正確運作。", "selectDraftModel": "選擇草稿模型", - "noModelsFound": "找不到草稿模型。請確保 LM Studio 已在伺服器模式下執行。", - "description": "LM Studio 允許您在本機電腦上執行模型。關於如何開始使用,請參閱他們的快速入門指南。您還需要啟動 LM Studio 的本機伺服器功能才能與此擴充功能一起使用。注意:Roo Code 使用複雜的提示,並在 Claude 模型上運作最佳。功能較弱的模型可能無法如預期運作。" + "noModelsFound": "未找到草稿模型。請確保 LM Studio 以伺服器模式運行。", + "description": "LM Studio 允許您在本地電腦運行模型。詳細資訊請參閱快速入門指南。您需要啟動 LM Studio 的本地伺服器功能才能與此擴充功能搭配使用。注意: Roo Code 使用複雜提示,與 Claude 模型搭配最佳。功能較弱的模型可能無法正常運作。" }, "ollama": { - "baseUrl": "基礎 URL(選用)", + "baseUrl": "基礎 URL(可選)", "modelId": "模型 ID", - "description": "Ollama 允許您在本機電腦上執行模型。關於如何開始使用,請參閱快速入門指南。", - "warning": "注意:Roo Code 使用複雜的提示,並在 Claude 模型上運作最佳。功能較弱的模型可能無法如預期運作。" + "description": "Ollama 允許您在本地電腦運行模型。請參閱快速入門指南。", + "warning": "注意:Roo Code 使用複雜提示,與 Claude 模型搭配最佳。功能較弱的模型可能無法正常運作。" }, "unboundApiKey": "Unbound API 金鑰", "getUnboundApiKey": "取得 Unbound API 金鑰", "humanRelay": { - "description": "不需要 API 金鑰,但使用者需要協助將資訊複製並貼上到網頁聊天 AI。", - "instructions": "使用期間會彈出對話框,並自動將目前訊息複製到剪貼簿。您需要將這些內容貼上到網頁版 AI(如 ChatGPT 或 Claude),然後將 AI 的回覆複製回對話框並點擊確認按鈕。" + "description": "無需 API 金鑰,但使用者需協助將資訊複製到網頁聊天 AI。", + "instructions": "使用期間,對話方格會彈出且當前訊息會自動複製到剪貼簿。您需將其貼到 ChatGPT 或 Claude 網頁版,再將 AI 回應複製回對話方塊並點擊確認按鈕。" }, "openRouter": { "providerRouting": { "title": "OpenRouter 提供者路由", - "description": "OpenRouter 將請求路由到適合您模型的最佳可用提供者。預設情況下,請求會在頂級提供者之間進行負載平衡以最大化正常運行時間。但是,您可以為此模型選擇特定的提供者。", - "learnMore": "了解更多關於提供者路由的資訊" + "description": "OpenRouter 會將請求路由到適合模型的最佳提供者。預設會在頂尖提供者之間負載平衡以確保正常運作時間。您可為此模型選擇特定提供者。", + "learnMore": "了解更多關於提供者路由" } }, "customModel": { - "capabilities": "設定您的自訂 OpenAI 相容模型的功能和定價。請謹慎指定模型功能,因為它們會影響 Roo Code 的效能。", + "capabilities": "設定自定義 OpenAI 相容模型的功能和定價。指定功能時需謹慎。", "maxTokens": { - "label": "最大輸出權杖", - "description": "模型在回應中可以生成的最大權杖數。(指定 -1 以允許伺服器設定最大權杖數。)" + "label": "最大輸出トークン", + "description": "模型回應可產生的最大トークン數。(指定 -1 使用伺服器設定最大值)" }, "contextWindow": { - "label": "內容視窗大小", - "description": "模型可以處理的總權杖數(輸入 + 輸出)。" + "label": "上下文視窗大小", + "description": "模型可處理的總トークン數(輸入+輸出)" }, "imageSupport": { - "label": "圖像支援", - "description": "此模型是否能夠處理和理解圖像?" + "label": "影像支援", + "description": "此模型是否能處理和理解影像?" }, "computerUse": { "label": "電腦使用", - "description": "此模型是否能夠與瀏覽器互動?(例如 Claude 3.7 Sonnet)" + "description": "此模型能否與瀏覽器互動?(例如 Claude 3.7 Sonnet)" }, "promptCache": { "label": "提示快取", - "description": "此模型是否能夠快取提示?" + "description": "此模型是否能快取提示?" }, "pricing": { "input": { "label": "輸入價格", - "description": "輸入/提示每百萬權杖的成本。這會影響向模型發送內容和指令的成本。" + "description": "每百萬輸入/提示トークン的費用" }, "output": { "label": "輸出價格", - "description": "模型回應每百萬權杖的成本。這會影響生成內容和完成的成本。" + "description": "模型回應每百萬トークン的費用" }, "cacheReads": { "label": "快取讀取價格", - "description": "從快取讀取每百萬權杖的成本。這是檢索快取回應時收取的價格。" + "description": "讀取快取時的費用" }, "cacheWrites": { "label": "快取寫入價格", - "description": "寫入快取每百萬權杖的成本。這是首次快取提示時收取的價格。" + "description": "首次將提示寫入快取時的費用" } }, - "resetDefaults": "重設為預設值" + "resetDefaults": "重設預設值" } }, "browser": { "enable": { "label": "啟用瀏覽器工具", - "description": "啟用後,Roo 可以在使用支援電腦使用的模型時使用瀏覽器與網站互動。" + "description": "啟用後,Roo 可在使用支援電腦使用的模型時使用瀏覽器互動。" }, "viewport": { - "label": "視窗大小", - "description": "選擇瀏覽器互動的視窗大小。這會影響網站的顯示方式和互動方式。", + "label": "視口大小", + "description": "選擇瀏覽器互動的視口大小。", "options": { "largeDesktop": "大型桌面 (1280x800)", "smallDesktop": "小型桌面 (900x600)", @@ -223,123 +223,123 @@ }, "screenshotQuality": { "label": "截圖品質", - "description": "調整瀏覽器截圖的 WebP 品質。較高的值提供更清晰的截圖,但會增加 token 使用量。" + "description": "調整瀏覽器截圖的 WebP 品質。較高值會增加 token 使用量。" }, "remote": { "label": "使用遠端瀏覽器連線", - "description": "連線到啟用遠端偵錯的 Chrome 瀏覽器 (--remote-debugging-port=9222)。", - "urlPlaceholder": "自訂 URL(例如 http://localhost:9222)", + "description": "連線到啟用遠端除錯的 Chrome 瀏覽器(--remote-debugging-port=9222)。", + "urlPlaceholder": "自定義 URL(例如 http://localhost:9222)", "testButton": "測試連線", "testingButton": "測試中...", - "instructions": "輸入 DevTools 協議主機地址或留空以自動探索本地 Chrome 實例。測試連線按鈕將嘗試使用自訂 URL(如果提供),或者如果欄位為空則自動探索。" + "instructions": "輸入 DevTools 協定主機位址或留空以自動發現本機 Chrome 執行個體。" } }, "checkpoints": { "enable": { "label": "啟用自動檢查點", - "description": "啟用後,Roo 將在任務執行期間自動建立檢查點,使審核變更或返回到早期狀態變得容易。" + "description": "啟用後,Roo 將在任務執行期間自動建立檢查點。" } }, "notifications": { "sound": { "label": "啟用音效", - "description": "啟用後,Roo 將為通知和事件播放音效。", + "description": "啟用後,Roo 將為通知播放音效", "volumeLabel": "音量" }, "tts": { "label": "啟用文字轉語音", - "description": "啟用後,Roo 將使用文字轉語音功能朗讀其回應。", + "description": "啟用後,Roo 將使用文字轉語音朗讀回應", "speedLabel": "速度" } }, "contextManagement": { - "description": "控制在 AI 的內容視窗中包含哪些資訊,影響 token 使用和回應品質", + "description": "控制 AI 上下文視窗包含的資訊,影響 token 使用和回應品質", "openTabs": { - "label": "開啟分頁內容限制", - "description": "在內容中包含的 VSCode 開啟分頁的最大數量。較高的值提供更多內容,但會增加 token 使用量。" + "label": "開啟的分頁上下文限制", + "description": "最多包含的 VSCode 開啟分頁數" }, "workspaceFiles": { - "label": "工作區檔案內容限制", - "description": "在目前工作目錄詳細資訊中包含的最大檔案數。較高的值提供更多內容,但會增加 token 使用量。" + "label": "工作區檔案上下文限制", + "description": "最多包含的當前工作目錄詳細資訊檔案數" }, "rooignore": { - "label": "在列表和搜尋中顯示 .rooignore 檔案", - "description": "啟用後,與 .rooignore 中模式匹配的檔案將在列表中顯示鎖定符號。禁用時,這些檔案將從檔案列表和搜尋中完全隱藏。" + "label": "顯示 .rooignore 檔案", + "description": "啟用後,符合 .rooignore 模式之檔案會顯示上鎖符號" }, "maxReadFile": { "label": "檔案讀取自動截斷閾值", - "description": "一批中從檔案讀取的預設行數。較低的值會減少內容/資源使用,但可能需要對大型檔案進行更多次讀取。", + "description": "預設讀取檔案的行數", "lines": "行" } }, "terminal": { "outputLineLimit": { "label": "終端機輸出限制", - "description": "執行命令時在終端機輸出中包含的最大行數。超過時將從中間刪除行,節省 token。" + "description": "執行指令時包含的最大行數" }, "shellIntegrationTimeout": { - "label": "終端機 Shell 整合逾時", - "description": "執行命令前等待 Shell 整合初始化的最長時間。對於 Shell 啟動時間較長的使用者,如果在終端機中看到\"Shell Integration Unavailable\"錯誤,可能需要增加此值。" + "label": "終端機 shell 綜合超時", + "description": "shell 綜合初始化的最長等待時間" } }, "advanced": { "rateLimit": { "label": "速率限制", - "description": "API 請求之間的最小時間。" + "description": "API 請求間的最短時間" }, "diff": { - "label": "啟用透過差異編輯", - "description": "啟用後,Roo 將能夠更快地編輯檔案,並將自動拒絕截斷的完整檔案寫入。與最新的 Claude 3.7 Sonnet 模型搭配最佳。", + "label": "啟用 diff 編輯", + "description": "啟用後可更快編輯文件並自動拒絕不完整的完整文件寫入", "strategy": { - "label": "Diff 策略", + "label": "diff 策略", "options": { - "standard": "標準(單塊)", - "multiBlock": "實驗性:多塊 diff", + "standard": "標準(單一區塊)", + "multiBlock": "實驗性:多區塊 diff", "unified": "實驗性:統一 diff" }, "descriptions": { - "standard": "標準 diff 策略一次對一個程式碼塊應用變更。", - "unified": "統一 diff 策略採用多種方法應用差異並選擇最佳方法。", - "multiBlock": "多塊 diff 策略允許在一個請求中更新檔案中的多個程式碼塊。" + "standard": "每次修改單一程式區塊", + "multiBlock": "單次請求更新多個程式區塊", + "unified": "多種 diff 方法選擇最佳方案" } }, "matchPrecision": { - "label": "匹配精度", - "description": "此滑桿控制應用差異時程式碼部分必須匹配的精確度。較低的值允許更靈活的匹配,但會增加錯誤替換的風險。極其謹慎地使用低於 100% 的值。" + "label": "匹配精確度", + "description": "此滑桿控制應用 diff 時程式區塊的匹配精確度" } } }, "experimental": { "warning": "⚠️", "DIFF_STRATEGY": { - "name": "使用實驗性統一差異策略", - "description": "啟用實驗性統一差異策略。此策略可能減少由模型錯誤引起的重試次數,但可能導致意外行為或不正確的編輯。僅在您了解風險並願意仔細審查所有更改時才啟用。" + "name": "使用實驗性統一 diff 策略", + "description": "此實驗性策略可能減少模型錯誤導致的重試次數,但需謹慎使用" }, "SEARCH_AND_REPLACE": { - "name": "使用實驗性搜索和替換工具", - "description": "啟用實驗性搜索和替換工具,允許 Roo 在一個請求中替換搜索詞的多個實例。" + "name": "使用實驗性搜尋與取代工具", + "description": "允許 Roo 在單一請求中取代多個搜尋詞實例" }, "INSERT_BLOCK": { "name": "使用實驗性插入內容工具", - "description": "啟用實驗性插入內容工具,允許 Roo 在特定行號插入內容,無需創建差異。" + "description": "允許在特定行號插入內容而無需建立 diff" }, "POWER_STEERING": { - "name": "使用實驗性\"動力轉向\"模式", - "description": "啟用後,Roo 將更頻繁地提醒模型關於其當前模式定義的詳細信息。這將導致對角色定義和自定義指令的更強遵守,但每條消息將使用更多 token。" + "name": "使用實驗性「動力轉向」模式", + "description": "此模式會更頻繁地提醒模型其角色定義" }, "MULTI_SEARCH_AND_REPLACE": { - "name": "使用實驗性多塊差異工具", - "description": "啟用後,Roo 將使用多塊差異工具。這將嘗試在一個請求中更新文件中的多個代碼塊。" + "name": "使用實驗性多區塊 diff 工具", + "description": "單次請求更新檔案中的多個程式區塊" } }, "temperature": { - "useCustom": "使用自訂溫度", - "description": "控制模型回應中的隨機性。", - "rangeDescription": "較高的值使輸出更隨機,較低的值使其更確定性。" + "useCustom": "使用自定義溫度", + "description": "控制模型回應的隨機性", + "rangeDescription": "較高值使輸出更隨機,較低值更確定" }, "modelInfo": { - "supportsImages": "支援圖像", - "noImages": "不支援圖像", + "supportsImages": "支援影像", + "noImages": "不支援影像", "supportsComputerUse": "支援電腦使用", "noComputerUse": "不支援電腦使用", "supportsPromptCache": "支援提示快取", @@ -349,81 +349,83 @@ "outputPrice": "輸出價格", "cacheReadsPrice": "快取讀取價格", "cacheWritesPrice": "快取寫入價格", - "enableStreaming": "啟用串流媒體", + "enableStreaming": "啟用串流", + "enableR1Format": "啟用R1模型參數", + "enableR1FormatTips": "當使用QWQ等類R1模型時需啟用,防止400錯誤", "useAzure": "使用 Azure", "azureApiVersion": "設定 Azure API 版本", "gemini": { - "freeRequests": "* 每分鐘免費 {{count}} 個請求。之後,計費取決於提示大小。", - "pricingDetails": "有關更多資訊,請參閱定價詳情。" + "freeRequests": "* 每分鐘免費 {{count}} 次請求。超過後依提示大小計費。", + "pricingDetails": "查看定價細節" } }, "modelPicker": { - "automaticFetch": "擴充功能會自動獲取 {{serviceName}} 上可用的最新模型列表。如果您不確定選擇哪個模型,Roo Code 與 {{defaultModelId}} 配合最佳。您還可以搜尋\"free\"以尋找目前可用的免費選項。", + "automaticFetch": "擴充功能會自動取得 {{serviceName}} 上最新模型列表。若不確定選擇,Roo Code 與 {{defaultModelId}} 搭配最佳。", "label": "模型", "searchPlaceholder": "搜尋", "noMatchFound": "未找到相符項目", - "useCustomModel": "使用自訂: {{modelId}}" + "useCustomModel": "使用自定義模型:{{modelId}}" }, "footer": { - "feedback": "如果您有任何問題或反饋,請隨時在 github.com/RooVetGit/Roo-Code 上提出問題或加入 reddit.com/r/RooCodediscord.gg/roocode", + "feedback": "若有問題或建議,請在 GitHub 建立 issue 或加入 Discord", "version": "Roo Code v{{version}}", "telemetry": { - "label": "允許匿名錯誤和使用情況報告", - "description": "透過發送匿名使用資料和錯誤報告來幫助改進 Roo Code。絕不會發送程式碼、提示或個人資訊。有關更多詳細資訊,請參閱我們的隱私政策。" + "label": "允許匿名錯誤和使用報告", + "description": "匿名資料協助改善 Roo Code,絕不傳送程式碼或個人資訊" }, "reset": { - "description": "重設擴充功能中的所有全域狀態和秘密儲存。", + "description": "重設擴充功能的全局狀態和金鑰儲存", "button": "重設" } }, "thinkingBudget": { - "maxTokens": "最大 tokens", - "maxThinkingTokens": "最大思考 tokens" + "maxTokens": "最大 token 數", + "maxThinkingTokens": "最大思考 token 數" }, "validation": { - "apiKey": "您必須提供有效的 API 金鑰。", - "awsRegion": "您必須選擇一個區域來使用 AWS Bedrock。", - "googleCloud": "您必須提供有效的 Google Cloud 專案 ID 和區域。", - "modelId": "您必須提供有效的模型 ID。", - "modelSelector": "您必須提供有效的模型選擇器。", - "openAi": "您必須提供有效的基礎 URL、API 金鑰和模型 ID。", + "apiKey": "需要有效 API 金鑰", + "awsRegion": "請選擇 AWS 區域", + "googleCloud": "需要有效的 Google Cloud 專案 ID 和區域", + "modelId": "需要有效模型 ID", + "modelSelector": "需要有效模型選擇器", + "openAi": "需要有效的基礎 URL、API 金鑰和模型 ID", "arn": { - "invalidFormat": "ARN 格式無效。請檢查格式要求。", - "regionMismatch": "警告:您的 ARN 中的區域 ({{arnRegion}}) 與您選擇的區域 ({{region}}) 不符。這可能會導致存取問題。提供者將使用 ARN 中的區域。" + "invalidFormat": "ARN 格式無效", + "regionMismatch": "ARN 區域與選擇的區域不匹配" }, - "modelAvailability": "您提供的模型 ID ({{modelId}}) 無法使用。請選擇其他模型。" + "modelAvailability": "該模型 ID 不可用" }, "placeholders": { - "apiKey": "請輸入 API 金鑰...", - "profileName": "請輸入設定檔名稱", - "accessKey": "請輸入存取金鑰...", - "secretKey": "請輸入密鑰...", - "sessionToken": "請輸入工作階段權杖...", - "credentialsJson": "請輸入憑證 JSON...", - "keyFilePath": "請輸入金鑰檔案路徑...", - "projectId": "請輸入專案 ID...", - "customArn": "請輸入 ARN(例:arn:aws:bedrock:us-east-1:123456789012:foundation-model/my-model)", - "baseUrl": "請輸入基礎 URL...", + "apiKey": "輸入 API 金鑰...", + "profileName": "輸入設定檔名稱", + "accessKey": "輸入存取金鑰...", + "secretKey": "輸入機密金鑰...", + "sessionToken": "輸入會話權杖...", + "credentialsJson": "輸入憑證 JSON...", + "keyFilePath": "輸入金鑰檔案路徑...", + "projectId": "輸入專案 ID...", + "customArn": "ARN 範例:arn:aws:bedrock:...", + "baseUrl": "輸入基礎 URL...", "modelId": { - "lmStudio": "例:meta-llama-3.1-8b-instruct", - "lmStudioDraft": "例:lmstudio-community/llama-3.2-1b-instruct", - "ollama": "例:llama3.1" + "lmStudio": "範例:meta-llama-3.1-8b-instruct", + "lmStudioDraft": "範例:lmstudio-community/llama-3.2-1b-instruct", + "ollama": "範例:llama3.1" }, "numbers": { - "maxTokens": "例:4096", - "contextWindow": "例:128000", - "inputPrice": "例:0.0001", - "outputPrice": "例:0.0002", - "cacheWritePrice": "例:0.00005" + "maxTokens": "範例:4096", + "contextWindow": "範例:128000", + "inputPrice": "範例:0.0001", + "outputPrice": "範例:0.0002", + "cacheWritePrice": "範例:0.00005" } }, "defaults": { - "ollamaUrl": "預設值:http://localhost:11434", - "lmStudioUrl": "預設值:http://localhost:1234", - "geminiUrl": "預設值:https://generativelanguage.googleapis.com" + "ollamaUrl": "預設:http://localhost:11434", + "lmStudioUrl": "預設:http://localhost:1234", + "geminiUrl": "預設:https://generativelanguage.googleapis.com" }, "labels": { - "customArn": "自訂 ARN", - "useCustomArn": "使用自訂 ARN..." + "customArn": "自定義 ARN", + "useCustomArn": "使用自定義 ARN..." } } diff --git a/webview-ui/src/utils/__tests__/context-mentions.test.ts b/webview-ui/src/utils/__tests__/context-mentions.test.ts index bd3696f191..c72a26d911 100644 --- a/webview-ui/src/utils/__tests__/context-mentions.test.ts +++ b/webview-ui/src/utils/__tests__/context-mentions.test.ts @@ -56,6 +56,12 @@ describe("getContextMenuOptions", () => { label: "test.ts", description: "Source file", }, + { + type: ContextMenuOptionType.OpenedFile, + value: "src/opened.ts", + label: "opened.ts", + description: "Currently opened file", + }, { type: ContextMenuOptionType.Git, value: "abc1234", @@ -71,6 +77,18 @@ describe("getContextMenuOptions", () => { }, ] + const mockDynamicSearchResults = [ + { + path: "search/result1.ts", + type: "file" as const, + label: "result1.ts", + }, + { + path: "search/folder", + type: "folder" as const, + }, + ] + it("should return all option types for empty query", () => { const result = getContextMenuOptions("", null, []) expect(result).toHaveLength(6) @@ -86,9 +104,11 @@ describe("getContextMenuOptions", () => { it("should filter by selected type when query is empty", () => { const result = getContextMenuOptions("", ContextMenuOptionType.File, mockQueryItems) - expect(result).toHaveLength(1) - expect(result[0].type).toBe(ContextMenuOptionType.File) - expect(result[0].value).toBe("src/test.ts") + expect(result).toHaveLength(2) + expect(result.map((item) => item.type)).toContain(ContextMenuOptionType.File) + expect(result.map((item) => item.type)).toContain(ContextMenuOptionType.OpenedFile) + expect(result.map((item) => item.value)).toContain("src/test.ts") + expect(result.map((item) => item.value)).toContain("src/opened.ts") }) it("should match git commands", () => { @@ -108,6 +128,188 @@ describe("getContextMenuOptions", () => { expect(result).toHaveLength(1) expect(result[0].type).toBe(ContextMenuOptionType.NoResults) }) + + /** + * Tests for the combined handling of open files, git results, and search results + * Added for commit 3cd7dec78faf786e468ae4f66cef0b81a76d9075 + */ + it("should include dynamic search results along with other matches", () => { + // Add an opened file that will match the query + const testItems = [ + ...mockQueryItems, + { + type: ContextMenuOptionType.OpenedFile, + value: "src/test-opened.ts", + label: "test-opened.ts", + description: "Opened test file for search test", + }, + ] + + const result = getContextMenuOptions("test", null, testItems, mockDynamicSearchResults) + + // Check if opened files and dynamic search results are included + expect(result.some((item) => item.type === ContextMenuOptionType.OpenedFile)).toBe(true) + expect(result.some((item) => item.value === "/search/result1.ts")).toBe(true) + }) + + it("should maintain correct result ordering according to implementation", () => { + // Add multiple item types to test ordering + const result = getContextMenuOptions("t", null, mockQueryItems, mockDynamicSearchResults) + + // Find the different result types + const fileResults = result.filter( + (item) => + item.type === ContextMenuOptionType.File || + item.type === ContextMenuOptionType.OpenedFile || + item.type === ContextMenuOptionType.Folder, + ) + + const searchResults = result.filter( + (item) => item.type === ContextMenuOptionType.File && item.value?.includes("/search/"), + ) + + const gitResults = result.filter((item) => item.type === ContextMenuOptionType.Git) + + // Find the indexes of the first item of each type in the results array + const firstFileIndex = result.findIndex((item) => fileResults.some((f) => f === item)) + + const firstSearchResultIndex = result.findIndex((item) => searchResults.some((s) => s === item)) + + const firstGitResultIndex = result.findIndex((item) => gitResults.some((g) => g === item)) + + // Verify file results come before search results + expect(firstFileIndex).toBeLessThan(firstSearchResultIndex) + + // Verify search results appear before git results + expect(firstSearchResultIndex).toBeLessThan(firstGitResultIndex) + }) + + it("should include opened files when dynamic search results exist", () => { + const result = getContextMenuOptions("open", null, mockQueryItems, mockDynamicSearchResults) + + // Verify opened files are included + expect(result.some((item) => item.type === ContextMenuOptionType.OpenedFile)).toBe(true) + // Verify dynamic search results are also present + expect(result.some((item) => item.value === "/search/result1.ts")).toBe(true) + }) + + it("should include git results when dynamic search results exist", () => { + const result = getContextMenuOptions("commit", null, mockQueryItems, mockDynamicSearchResults) + + // Verify git results are included + expect(result.some((item) => item.type === ContextMenuOptionType.Git)).toBe(true) + // Verify dynamic search results are also present + expect(result.some((item) => item.value === "/search/result1.ts")).toBe(true) + }) + + it("should deduplicate items correctly when combining different result types", () => { + // Create duplicate search result with same path as an existing file + const duplicateSearchResults = [ + { + path: "src/test.ts", // Duplicate of existing file in mockQueryItems + type: "file" as const, + }, + { + path: "unique/path.ts", + type: "file" as const, + }, + ] + + const result = getContextMenuOptions("test", null, mockQueryItems, duplicateSearchResults) + + // Count occurrences of src/test.ts in results + const duplicateCount = result.filter( + (item) => + (item.value === "src/test.ts" || item.value === "/src/test.ts") && + item.type === ContextMenuOptionType.File, + ).length + // With path normalization, these should be treated as duplicates + expect(duplicateCount).toBe(1) + + // Verify the unique item was included (check both path formats) + expect(result.some((item) => item.value === "/unique/path.ts" || item.value === "unique/path.ts")).toBe(true) + }) + + it("should return NoResults when all combined results are empty with dynamic search", () => { + // Use a query that won't match anything + const result = getContextMenuOptions( + "nonexistentquery123456", + null, + mockQueryItems, + [], // Empty dynamic search results + ) + + expect(result).toHaveLength(1) + expect(result[0].type).toBe(ContextMenuOptionType.NoResults) + }) + + /** + * Tests that opened files appear first in the results, according to the updated implementation + * This test validates the updated ordering where opened files have the highest priority + */ + it("should place opened files first in result order", () => { + // Create test data with multiple types that should match the query + const testQuery = "test" // Using "test" as the query to match all items + + const testItems: ContextMenuQueryItem[] = [ + { + type: ContextMenuOptionType.File, + value: "src/test-file.ts", + label: "test-file.ts", + description: "Regular test file", + }, + { + type: ContextMenuOptionType.OpenedFile, + value: "src/test-opened.ts", + label: "test-opened.ts", + description: "Opened test file", + }, + { + type: ContextMenuOptionType.Git, + value: "abctest", + label: "Test commit", + description: "Git test commit", + }, + ] + + const testSearchResults = [ + { + path: "search/test-result.ts", + type: "file" as const, + label: "test-result.ts", + }, + ] + + // Get results for "test" query + const result = getContextMenuOptions(testQuery, null, testItems, testSearchResults) + + // Verify we have results + expect(result.length).toBeGreaterThan(0) + + // Verify the first item is an opened file type + expect(result[0].type).toBe(ContextMenuOptionType.OpenedFile) + + // Verify the remaining items are in the correct order: + // suggestions -> openedFiles -> searchResults -> gitResults + + // Get index of first item of each type + const firstOpenedFileIndex = result.findIndex((item) => item.type === ContextMenuOptionType.OpenedFile) + const firstSearchResultIndex = result.findIndex( + (item) => item.type === ContextMenuOptionType.File && item.value?.includes("/search/"), + ) + const firstGitResultIndex = result.findIndex((item) => item.type === ContextMenuOptionType.Git) + + // Verify opened files come first + expect(firstOpenedFileIndex).toBe(0) + + // Verify search results come after opened files but before git results + expect(firstSearchResultIndex).toBeGreaterThan(firstOpenedFileIndex) + + // Verify git results come after search results + if (firstGitResultIndex !== -1 && firstSearchResultIndex !== -1) { + expect(firstGitResultIndex).toBeGreaterThan(firstSearchResultIndex) + } + }) }) describe("shouldShowContextMenu", () => { diff --git a/webview-ui/src/utils/context-mentions.ts b/webview-ui/src/utils/context-mentions.ts index 463eedb04e..5d240d8fd2 100644 --- a/webview-ui/src/utils/context-mentions.ts +++ b/webview-ui/src/utils/context-mentions.ts @@ -210,34 +210,6 @@ export function getContextMenuOptions( } } - if (dynamicSearchResults.length > 0) { - // Convert search results to queryItems format - const searchResultItems = dynamicSearchResults.map((result) => { - const formattedPath = result.path.startsWith("/") ? result.path : `/${result.path}` - - return { - type: result.type === "folder" ? ContextMenuOptionType.Folder : ContextMenuOptionType.File, - value: formattedPath, - label: result.label || path.basename(result.path), - description: formattedPath, - } - }) - - const allItems = [...suggestions, ...searchResultItems] - - // Remove duplicates - const seen = new Set() - const deduped = allItems.filter((item) => { - const key = `${item.type}-${item.value}` - if (seen.has(key)) return false - seen.add(key) - return true - }) - - return deduped - } - - // Fallback to original static filtering if no dynamic results const searchableItems = queryItems.map((item) => ({ original: item, searchStr: [item.value, item.label, item.description].filter(Boolean).join(" "), @@ -252,38 +224,36 @@ export function getContextMenuOptions( const matchingItems = query ? fzf.find(query).map((result) => result.item.original) : [] // Separate matches by type - const fileMatches = matchingItems.filter( - (item) => - item.type === ContextMenuOptionType.File || - item.type === ContextMenuOptionType.OpenedFile || - item.type === ContextMenuOptionType.Folder, - ) + const openedFileMatches = matchingItems.filter((item) => item.type === ContextMenuOptionType.OpenedFile) + const gitMatches = matchingItems.filter((item) => item.type === ContextMenuOptionType.Git) - const otherMatches = matchingItems.filter( - (item) => - item.type !== ContextMenuOptionType.File && - item.type !== ContextMenuOptionType.OpenedFile && - item.type !== ContextMenuOptionType.Folder && - item.type !== ContextMenuOptionType.Git, - ) - // Combine suggestions with matching items in the desired order - if (suggestions.length > 0 || matchingItems.length > 0) { - const allItems = [...suggestions, ...fileMatches, ...gitMatches, ...otherMatches] + // Convert search results to queryItems format + const searchResultItems = dynamicSearchResults.map((result) => { + const formattedPath = result.path.startsWith("/") ? result.path : `/${result.path}` - // Remove duplicates based on type and value - const seen = new Set() - const deduped = allItems.filter((item) => { - const key = `${item.type}-${item.value}` - if (seen.has(key)) return false - seen.add(key) - return true - }) + return { + type: result.type === "folder" ? ContextMenuOptionType.Folder : ContextMenuOptionType.File, + value: formattedPath, + label: result.label || path.basename(result.path), + description: formattedPath, + } + }) - return deduped - } + const allItems = [...suggestions, ...openedFileMatches, ...searchResultItems, ...gitMatches] - return [{ type: ContextMenuOptionType.NoResults }] + // Remove duplicates - normalize paths by ensuring all have leading slashes + const seen = new Set() + const deduped = allItems.filter((item) => { + // Normalize paths for deduplication by ensuring leading slashes + const normalizedValue = item.value && !item.value.startsWith("/") ? `/${item.value}` : item.value + const key = `${item.type}-${normalizedValue}` + if (seen.has(key)) return false + seen.add(key) + return true + }) + + return deduped.length > 0 ? deduped : [{ type: ContextMenuOptionType.NoResults }] } export function shouldShowContextMenu(text: string, position: number): boolean {