Skip to content

Commit d7b8f6f

Browse files
authored
Merge branch 'dev' into fix/tui-adaptive-theme-luminance
2 parents 955329c + 1026791 commit d7b8f6f

75 files changed

Lines changed: 2855 additions & 800 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

flake.lock

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/app/src/components/dialog-edit-project.tsx

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import { type LocalProject, getAvatarColors } from "@/context/layout"
1212
import { getFilename } from "@opencode-ai/shared/util/path"
1313
import { Avatar } from "@opencode-ai/ui/avatar"
1414
import { useLanguage } from "@/context/language"
15+
import { getProjectAvatarSource } from "@/pages/layout/sidebar-items"
1516

1617
const AVATAR_COLOR_KEYS = ["pink", "mint", "orange", "purple", "cyan", "lime"] as const
1718

@@ -144,7 +145,11 @@ export function DialogEditProject(props: { project: LocalProject }) {
144145
}}
145146
>
146147
<Show
147-
when={store.iconOverride || (!store.color && props.project.icon?.url)}
148+
when={getProjectAvatarSource(props.project.id, {
149+
color: store.color,
150+
url: props.project.icon?.url,
151+
override: store.iconOverride,
152+
})}
148153
fallback={
149154
<div class="size-full flex items-center justify-center">
150155
<Avatar
@@ -155,11 +160,13 @@ export function DialogEditProject(props: { project: LocalProject }) {
155160
</div>
156161
}
157162
>
158-
<img
159-
src={store.iconOverride || props.project.icon?.url}
160-
alt={language.t("dialog.project.edit.icon.alt")}
161-
class="size-full object-cover"
162-
/>
163+
{(src) => (
164+
<img
165+
src={src()}
166+
alt={language.t("dialog.project.edit.icon.alt")}
167+
class="size-full object-cover"
168+
/>
169+
)}
163170
</Show>
164171
</div>
165172
<div
@@ -216,6 +223,7 @@ export function DialogEditProject(props: { project: LocalProject }) {
216223
store.color !== color,
217224
}}
218225
onClick={() => {
226+
if (store.color === color && !props.project.icon?.url) return
219227
setStore("color", store.color === color ? undefined : color)
220228
}}
221229
>

packages/app/src/context/global-sync.tsx

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -295,6 +295,19 @@ function createGlobalSync() {
295295
const event = e.details
296296
const recent = bootingRoot || Date.now() - bootedAt < 1500
297297

298+
if (event.type === "session.error") {
299+
const error = event.properties.error
300+
if (error?.name !== "MessageAbortedError") {
301+
console.error("[global-sync] session error", {
302+
scope: directory === "global" ? "global" : "workspace",
303+
directory: directory === "global" ? undefined : directory,
304+
project: directory === "global" ? undefined : getFilename(directory),
305+
sessionID: event.properties.sessionID,
306+
error,
307+
})
308+
}
309+
}
310+
298311
if (directory === "global") {
299312
applyGlobalEvent({
300313
event,

packages/app/src/pages/layout/sidebar-items.tsx

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,14 @@ import { childSessionOnPath, hasProjectPermissions } from "./helpers"
1919

2020
const OPENCODE_PROJECT_ID = "4b0ea68d7af9a6031a7ffda7ad66e0cb83315750"
2121

22+
export function getProjectAvatarSource(id?: string, icon?: { color?: string; url?: string; override?: string }) {
23+
return id === OPENCODE_PROJECT_ID
24+
? "https://opencode.ai/favicon.svg"
25+
: icon?.color
26+
? undefined
27+
: icon?.override || icon?.url
28+
}
29+
2230
export const ProjectIcon = (props: { project: LocalProject; class?: string; notify?: boolean }): JSX.Element => {
2331
const globalSync = useGlobalSync()
2432
const notification = useNotification()
@@ -42,13 +50,7 @@ export const ProjectIcon = (props: { project: LocalProject; class?: string; noti
4250
<div class="size-full rounded overflow-clip">
4351
<Avatar
4452
fallback={name()}
45-
src={
46-
props.project.id === OPENCODE_PROJECT_ID
47-
? "https://opencode.ai/favicon.svg"
48-
: props.project.icon?.color
49-
? undefined
50-
: props.project.icon?.override || props.project.icon?.url
51-
}
53+
src={getProjectAvatarSource(props.project.id, props.project.icon)}
5254
{...getAvatarColors(props.project.icon?.color)}
5355
class="size-full rounded"
5456
classList={{ "badge-mask": notify() }}

packages/console/app/src/i18n/ar.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -249,7 +249,7 @@ export const dict = {
249249

250250
"go.title": "OpenCode Go | نماذج برمجة منخفضة التكلفة للجميع",
251251
"go.meta.description":
252-
"يبدأ Go من $5 للشهر الأول، ثم $10/شهر، مع حدود طلب سخية لمدة 5 ساعات لـ GLM-5.1 وGLM-5 وKimi K2.5 وKimi K2.6 وMiMo-V2-Pro وMiMo-V2-Omni وQwen3.5 Plus وQwen3.6 Plus وMiniMax M2.5 وMiniMax M2.7.",
252+
"يبدأ Go من $5 للشهر الأول، ثم $10/شهر، مع حدود طلب سخية لمدة 5 ساعات لـ GLM-5.1 وGLM-5 وKimi K2.5 وKimi K2.6 وMiMo-V2-Pro وMiMo-V2-Omni وMiMo-V2.5-Pro وMiMo-V2.5 وQwen3.5 Plus وQwen3.6 Plus وMiniMax M2.5 وMiniMax M2.7.",
253253
"go.hero.title": "نماذج برمجة منخفضة التكلفة للجميع",
254254
"go.hero.body":
255255
"يجلب Go البرمجة الوكيلة للمبرمجين حول العالم. يوفر حدودًا سخية ووصولًا موثوقًا إلى أقوى النماذج مفتوحة المصدر، حتى تتمكن من البناء باستخدام وكلاء أقوياء دون القلق بشأن التكلفة أو التوفر.",
@@ -300,7 +300,7 @@ export const dict = {
300300
"go.problem.item2": "حدود سخية ووصول موثوق",
301301
"go.problem.item3": "مصمم لأكبر عدد ممكن من المبرمجين",
302302
"go.problem.item4":
303-
"يتضمن GLM-5.1 وGLM-5 وKimi K2.5 وKimi K2.6 وMiMo-V2-Pro وMiMo-V2-Omni وQwen3.5 Plus وQwen3.6 Plus وMiniMax M2.5 وMiniMax M2.7",
303+
"يتضمن GLM-5.1 وGLM-5 وKimi K2.5 وKimi K2.6 وMiMo-V2-Pro وMiMo-V2-Omni وMiMo-V2.5-Pro وMiMo-V2.5 وQwen3.5 Plus وQwen3.6 Plus وMiniMax M2.5 وMiniMax M2.7",
304304
"go.how.title": "كيف يعمل Go",
305305
"go.how.body": "يبدأ Go من $5 للشهر الأول، ثم $10/شهر. يمكنك استخدامه مع OpenCode أو أي وكيل.",
306306
"go.how.step1.title": "أنشئ حسابًا",
@@ -324,7 +324,7 @@ export const dict = {
324324
"go.faq.a2": "يتضمن Go النماذج المدرجة أدناه، مع حدود سخية وإتاحة موثوقة.",
325325
"go.faq.q3": "هل Go هو نفسه Zen؟",
326326
"go.faq.a3":
327-
"لا. Zen هو الدفع حسب الاستخدام، بينما يبدأ Go من $5 للشهر الأول، ثم $10/شهر، مع حدود سخية ووصول موثوق إلى نماذج المصدر المفتوح GLM-5.1 وGLM-5 وKimi K2.5 وKimi K2.6 وMiMo-V2-Pro وMiMo-V2-Omni وQwen3.5 Plus وQwen3.6 Plus وMiniMax M2.5 وMiniMax M2.7.",
327+
"لا. Zen هو الدفع حسب الاستخدام، بينما يبدأ Go من $5 للشهر الأول، ثم $10/شهر، مع حدود سخية ووصول موثوق إلى نماذج المصدر المفتوح GLM-5.1 وGLM-5 وKimi K2.5 وKimi K2.6 وMiMo-V2-Pro وMiMo-V2-Omni وMiMo-V2.5-Pro وMiMo-V2.5 وQwen3.5 Plus وQwen3.6 Plus وMiniMax M2.5 وMiniMax M2.7.",
328328
"go.faq.q4": "كم تكلفة Go؟",
329329
"go.faq.a4.p1.beforePricing": "تكلفة Go",
330330
"go.faq.a4.p1.pricingLink": "$5 للشهر الأول",
@@ -347,7 +347,7 @@ export const dict = {
347347

348348
"go.faq.q9": "ما الفرق بين النماذج المجانية وGo؟",
349349
"go.faq.a9":
350-
"تشمل النماذج المجانية Big Pickle بالإضافة إلى النماذج الترويجية المتاحة في ذلك الوقت، مع حصة 200 طلب/يوم. يتضمن Go نماذج GLM-5.1 وGLM-5 وKimi K2.5 وKimi K2.6 وMiMo-V2-Pro وMiMo-V2-Omni وQwen3.5 Plus وQwen3.6 Plus وMiniMax M2.5 وMiniMax M2.7 مع حصص طلبات أعلى مطبقة عبر نوافذ متجددة (5 ساعات، أسبوعيًا، وشهريًا)، تعادل تقريبًا 12 دولارًا كل 5 ساعات، و30 دولارًا في الأسبوع، و60 دولارًا في الشهر (تختلف أعداد الطلبات الفعلية حسب النموذج والاستخدام).",
350+
"تشمل النماذج المجانية Big Pickle بالإضافة إلى النماذج الترويجية المتاحة في ذلك الوقت، مع حصة 200 طلب/يوم. يتضمن Go نماذج GLM-5.1 وGLM-5 وKimi K2.5 وKimi K2.6 وMiMo-V2-Pro وMiMo-V2-Omni وMiMo-V2.5-Pro وMiMo-V2.5 وQwen3.5 Plus وQwen3.6 Plus وMiniMax M2.5 وMiniMax M2.7 مع حصص طلبات أعلى مطبقة عبر نوافذ متجددة (5 ساعات، أسبوعيًا، وشهريًا)، تعادل تقريبًا 12 دولارًا كل 5 ساعات، و30 دولارًا في الأسبوع، و60 دولارًا في الشهر (تختلف أعداد الطلبات الفعلية حسب النموذج والاستخدام).",
351351

352352
"zen.api.error.rateLimitExceeded": "تم تجاوز حد الطلبات. يرجى المحاولة مرة أخرى لاحقًا.",
353353
"zen.api.error.modelNotSupported": "النموذج {{model}} غير مدعوم",

packages/console/app/src/i18n/br.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -253,7 +253,7 @@ export const dict = {
253253

254254
"go.title": "OpenCode Go | Modelos de codificação de baixo custo para todos",
255255
"go.meta.description":
256-
"O Go começa em $5 no primeiro mês, depois $10/mês, com limites generosos de solicitação de 5 horas para GLM-5.1, GLM-5, Kimi K2.5, Kimi K2.6, MiMo-V2-Pro, MiMo-V2-Omni, Qwen3.5 Plus, Qwen3.6 Plus, MiniMax M2.5 e MiniMax M2.7.",
256+
"O Go começa em $5 no primeiro mês, depois $10/mês, com limites generosos de solicitação de 5 horas para GLM-5.1, GLM-5, Kimi K2.5, Kimi K2.6, MiMo-V2-Pro, MiMo-V2-Omni, MiMo-V2.5-Pro, MiMo-V2.5, Qwen3.5 Plus, Qwen3.6 Plus, MiniMax M2.5 e MiniMax M2.7.",
257257
"go.hero.title": "Modelos de codificação de baixo custo para todos",
258258
"go.hero.body":
259259
"O Go traz a codificação com agentes para programadores em todo o mundo. Oferecendo limites generosos e acesso confiável aos modelos de código aberto mais capazes, para que você possa construir com agentes poderosos sem se preocupar com custos ou disponibilidade.",
@@ -305,7 +305,7 @@ export const dict = {
305305
"go.problem.item2": "Limites generosos e acesso confiável",
306306
"go.problem.item3": "Feito para o maior número possível de programadores",
307307
"go.problem.item4":
308-
"Inclui GLM-5.1, GLM-5, Kimi K2.5, Kimi K2.6, MiMo-V2-Pro, MiMo-V2-Omni, Qwen3.5 Plus, Qwen3.6 Plus, MiniMax M2.5 e MiniMax M2.7",
308+
"Inclui GLM-5.1, GLM-5, Kimi K2.5, Kimi K2.6, MiMo-V2-Pro, MiMo-V2-Omni, MiMo-V2.5-Pro, MiMo-V2.5, Qwen3.5 Plus, Qwen3.6 Plus, MiniMax M2.5 e MiniMax M2.7",
309309
"go.how.title": "Como o Go funciona",
310310
"go.how.body":
311311
"O Go começa em $5 no primeiro mês, depois $10/mês. Você pode usá-lo com o OpenCode ou qualquer agente.",
@@ -331,7 +331,7 @@ export const dict = {
331331
"go.faq.a2": "O Go inclui os modelos listados abaixo, com limites generosos e acesso confiável.",
332332
"go.faq.q3": "O Go é o mesmo que o Zen?",
333333
"go.faq.a3":
334-
"Não. Zen é pay-as-you-go, enquanto o Go começa em $5 no primeiro mês, depois $10/mês, com limites generosos e acesso confiável aos modelos open source GLM-5.1, GLM-5, Kimi K2.5, Kimi K2.6, MiMo-V2-Pro, MiMo-V2-Omni, Qwen3.5 Plus, Qwen3.6 Plus, MiniMax M2.5 e MiniMax M2.7.",
334+
"Não. Zen é pay-as-you-go, enquanto o Go começa em $5 no primeiro mês, depois $10/mês, com limites generosos e acesso confiável aos modelos open source GLM-5.1, GLM-5, Kimi K2.5, Kimi K2.6, MiMo-V2-Pro, MiMo-V2-Omni, MiMo-V2.5-Pro, MiMo-V2.5, Qwen3.5 Plus, Qwen3.6 Plus, MiniMax M2.5 e MiniMax M2.7.",
335335
"go.faq.q4": "Quanto custa o Go?",
336336
"go.faq.a4.p1.beforePricing": "O Go custa",
337337
"go.faq.a4.p1.pricingLink": "$5 no primeiro mês",
@@ -355,7 +355,7 @@ export const dict = {
355355

356356
"go.faq.q9": "Qual a diferença entre os modelos gratuitos e o Go?",
357357
"go.faq.a9":
358-
"Os modelos gratuitos incluem Big Pickle e modelos promocionais disponíveis no momento, com uma cota de 200 requisições/dia. O Go inclui GLM-5.1, GLM-5, Kimi K2.5, Kimi K2.6, MiMo-V2-Pro, MiMo-V2-Omni, Qwen3.5 Plus, Qwen3.6 Plus, MiniMax M2.5 e MiniMax M2.7 com cotas de requisição mais altas aplicadas em janelas móveis (5 horas, semanal e mensal), aproximadamente equivalentes a $12 por 5 horas, $30 por semana e $60 por mês (as contagens reais de requisições variam de acordo com o modelo e o uso).",
358+
"Os modelos gratuitos incluem Big Pickle e modelos promocionais disponíveis no momento, com uma cota de 200 requisições/dia. O Go inclui GLM-5.1, GLM-5, Kimi K2.5, Kimi K2.6, MiMo-V2-Pro, MiMo-V2-Omni, MiMo-V2.5-Pro, MiMo-V2.5, Qwen3.5 Plus, Qwen3.6 Plus, MiniMax M2.5 e MiniMax M2.7 com cotas de requisição mais altas aplicadas em janelas móveis (5 horas, semanal e mensal), aproximadamente equivalentes a $12 por 5 horas, $30 por semana e $60 por mês (as contagens reais de requisições variam de acordo com o modelo e o uso).",
359359

360360
"zen.api.error.rateLimitExceeded": "Limite de taxa excedido. Por favor, tente novamente mais tarde.",
361361
"zen.api.error.modelNotSupported": "Modelo {{model}} não suportado",

packages/console/app/src/i18n/da.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,7 @@ export const dict = {
251251

252252
"go.title": "OpenCode Go | Kodningsmodeller til lav pris for alle",
253253
"go.meta.description":
254-
"Go starter ved $5 for den første måned, derefter $10/måned, med generøse 5-timers anmodningsgrænser for GLM-5.1, GLM-5, Kimi K2.5, Kimi K2.6, MiMo-V2-Pro, MiMo-V2-Omni, Qwen3.5 Plus, Qwen3.6 Plus, MiniMax M2.5 og MiniMax M2.7.",
254+
"Go starter ved $5 for den første måned, derefter $10/måned, med generøse 5-timers anmodningsgrænser for GLM-5.1, GLM-5, Kimi K2.5, Kimi K2.6, MiMo-V2-Pro, MiMo-V2-Omni, MiMo-V2.5-Pro, MiMo-V2.5, Qwen3.5 Plus, Qwen3.6 Plus, MiniMax M2.5 og MiniMax M2.7.",
255255
"go.hero.title": "Kodningsmodeller til lav pris for alle",
256256
"go.hero.body":
257257
"Go bringer agentisk kodning til programmører over hele verden. Med generøse grænser og pålidelig adgang til de mest kapable open source-modeller, så du kan bygge med kraftfulde agenter uden at bekymre dig om omkostninger eller tilgængelighed.",
@@ -302,7 +302,7 @@ export const dict = {
302302
"go.problem.item2": "Generøse grænser og pålidelig adgang",
303303
"go.problem.item3": "Bygget til så mange programmører som muligt",
304304
"go.problem.item4":
305-
"Inkluderer GLM-5.1, GLM-5, Kimi K2.5, Kimi K2.6, MiMo-V2-Pro, MiMo-V2-Omni, Qwen3.5 Plus, Qwen3.6 Plus, MiniMax M2.5 og MiniMax M2.7",
305+
"Inkluderer GLM-5.1, GLM-5, Kimi K2.5, Kimi K2.6, MiMo-V2-Pro, MiMo-V2-Omni, MiMo-V2.5-Pro, MiMo-V2.5, Qwen3.5 Plus, Qwen3.6 Plus, MiniMax M2.5 og MiniMax M2.7",
306306
"go.how.title": "Hvordan Go virker",
307307
"go.how.body":
308308
"Go starter ved $5 for den første måned, derefter $10/måned. Du kan bruge det med OpenCode eller enhver agent.",
@@ -328,7 +328,7 @@ export const dict = {
328328
"go.faq.a2": "Go inkluderer modellerne nedenfor med generøse grænser og pålidelig adgang.",
329329
"go.faq.q3": "Er Go det samme som Zen?",
330330
"go.faq.a3":
331-
"Nej. Zen er pay-as-you-go, mens Go starter ved $5 for den første måned, derefter $10/måned, med generøse grænser og pålidelig adgang til open source-modellerne GLM-5.1, GLM-5, Kimi K2.5, Kimi K2.6, MiMo-V2-Pro, MiMo-V2-Omni, Qwen3.5 Plus, Qwen3.6 Plus, MiniMax M2.5 og MiniMax M2.7.",
331+
"Nej. Zen er pay-as-you-go, mens Go starter ved $5 for den første måned, derefter $10/måned, med generøse grænser og pålidelig adgang til open source-modellerne GLM-5.1, GLM-5, Kimi K2.5, Kimi K2.6, MiMo-V2-Pro, MiMo-V2-Omni, MiMo-V2.5-Pro, MiMo-V2.5, Qwen3.5 Plus, Qwen3.6 Plus, MiniMax M2.5 og MiniMax M2.7.",
332332
"go.faq.q4": "Hvad koster Go?",
333333
"go.faq.a4.p1.beforePricing": "Go koster",
334334
"go.faq.a4.p1.pricingLink": "$5 første måned",
@@ -351,7 +351,7 @@ export const dict = {
351351

352352
"go.faq.q9": "Hvad er forskellen på gratis modeller og Go?",
353353
"go.faq.a9":
354-
"Gratis modeller inkluderer Big Pickle plus salgsfremmende modeller tilgængelige på det tidspunkt, med en kvote på 200 forespørgsler/dag. Go inkluderer GLM-5.1, GLM-5, Kimi K2.5, Kimi K2.6, MiMo-V2-Pro, MiMo-V2-Omni, Qwen3.5 Plus, Qwen3.6 Plus, MiniMax M2.5 og MiniMax M2.7 med højere anmodningskvoter håndhævet over rullende vinduer (5-timers, ugentlig og månedlig), nogenlunde svarende til $12 pr. 5 timer, $30 pr. uge og $60 pr. måned (faktiske anmodningstal varierer efter model og brug).",
354+
"Gratis modeller inkluderer Big Pickle plus salgsfremmende modeller tilgængelige på det tidspunkt, med en kvote på 200 forespørgsler/dag. Go inkluderer GLM-5.1, GLM-5, Kimi K2.5, Kimi K2.6, MiMo-V2-Pro, MiMo-V2-Omni, MiMo-V2.5-Pro, MiMo-V2.5, Qwen3.5 Plus, Qwen3.6 Plus, MiniMax M2.5 og MiniMax M2.7 med højere anmodningskvoter håndhævet over rullende vinduer (5-timers, ugentlig og månedlig), nogenlunde svarende til $12 pr. 5 timer, $30 pr. uge og $60 pr. måned (faktiske anmodningstal varierer efter model og brug).",
355355

356356
"zen.api.error.rateLimitExceeded": "Hastighedsgrænse overskredet. Prøv venligst igen senere.",
357357
"zen.api.error.modelNotSupported": "Model {{model}} understøttes ikke",

0 commit comments

Comments
 (0)