chore: merge dev into v2 (#37170)

Co-authored-by: opencode-agent[bot] <219766164+opencode-agent[bot]@users.noreply.github.com>
Co-authored-by: Jay <53023+jayair@users.noreply.github.com>
Co-authored-by: Brendan Allan <git@brendonovich.dev>
Co-authored-by: Luke Parker <10430890+Hona@users.noreply.github.com>
Co-authored-by: Brendan Allan <14191578+Brendonovich@users.noreply.github.com>
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
Co-authored-by: Simon Klee <hello@simonklee.dk>
Co-authored-by: Aiden Cline <63023139+rekram1-node@users.noreply.github.com>
Co-authored-by: opencode <opencode@sst.dev>
Co-authored-by: Aiden Cline <aidenpcline@gmail.com>
Co-authored-by: Adam <2363879+adamdotdevin@users.noreply.github.com>
Co-authored-by: Aarav Sareen <96787824+arvsrn@users.noreply.github.com>
Co-authored-by: James Long <longster@gmail.com>
Co-authored-by: James Long <jlongster@users.noreply.github.com>
Co-authored-by: Dustin Deus <deusdustin@gmail.com>
Co-authored-by: 冯基魁 <56265583+fengjikui@users.noreply.github.com>
Co-authored-by: Frank <frank@anoma.ly>
Co-authored-by: Aiden Cline <rekram1-node@users.noreply.github.com>
Co-authored-by: Kit Langton <kit.langton@gmail.com>
Co-authored-by: David Hill <1879069+iamdavidhill@users.noreply.github.com>
Co-authored-by: usrnk1 <7547651+usrnk1@users.noreply.github.com>
Co-authored-by: Victor Navarro <vn4varro@gmail.com>
Co-authored-by: Dax Raad <d@ironbay.co>
Co-authored-by: Dax <mail@thdxr.com>
Co-authored-by: Nabs <nabil@instafork.com>
Co-authored-by: Vladimir Glafirov <vglafirov@gitlab.com>
Co-authored-by: AidenGeunGeun <eastlandwyvern@gmail.com>
Co-authored-by: Mark <geraint0923@users.noreply.github.com>
Co-authored-by: Jay <air@live.ca>
Co-authored-by: BB84 <110078428+BB-84C@users.noreply.github.com>
This commit is contained in:
opencode-agent[bot]
2026-07-15 18:23:08 -05:00
committed by GitHub
co-authored by opencode-agent[bot] <219766164+opencode-agent[bot]@users.noreply.github.com> Jay Brendan Allan Luke Parker Brendan Allan opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com> Simon Klee Aiden Cline opencode Aiden Cline Adam Aarav Sareen James Long James Long Dustin Deus 冯基魁 Frank Aiden Cline Kit Langton David Hill usrnk1 Victor Navarro Dax Raad Dax Nabs Vladimir Glafirov AidenGeunGeun Mark Jay BB84
parent 720f062cd0
commit 7624c4f7b3
65 changed files with 522 additions and 196 deletions
+27 -27
View File
@@ -53,7 +53,7 @@
}, },
"packages/app": { "packages/app": {
"name": "@opencode-ai/app", "name": "@opencode-ai/app",
"version": "1.17.20", "version": "1.18.2",
"dependencies": { "dependencies": {
"@corvu/drawer": "catalog:", "@corvu/drawer": "catalog:",
"@dnd-kit/abstract": "0.5.0", "@dnd-kit/abstract": "0.5.0",
@@ -119,7 +119,7 @@
}, },
"packages/cli": { "packages/cli": {
"name": "@opencode-ai/cli", "name": "@opencode-ai/cli",
"version": "1.17.18", "version": "1.18.2",
"bin": { "bin": {
"opencode2": "./bin/opencode2.cjs", "opencode2": "./bin/opencode2.cjs",
}, },
@@ -179,7 +179,7 @@
}, },
"packages/codemode": { "packages/codemode": {
"name": "@opencode-ai/codemode", "name": "@opencode-ai/codemode",
"version": "1.17.20", "version": "1.18.2",
"dependencies": { "dependencies": {
"acorn": "8.15.0", "acorn": "8.15.0",
"effect": "catalog:", "effect": "catalog:",
@@ -193,7 +193,7 @@
}, },
"packages/console/app": { "packages/console/app": {
"name": "@opencode-ai/console-app", "name": "@opencode-ai/console-app",
"version": "1.17.20", "version": "1.18.2",
"dependencies": { "dependencies": {
"@cloudflare/vite-plugin": "1.15.2", "@cloudflare/vite-plugin": "1.15.2",
"@ibm/plex": "6.4.1", "@ibm/plex": "6.4.1",
@@ -229,7 +229,7 @@
}, },
"packages/console/core": { "packages/console/core": {
"name": "@opencode-ai/console-core", "name": "@opencode-ai/console-core",
"version": "1.17.20", "version": "1.18.2",
"dependencies": { "dependencies": {
"@aws-sdk/client-sts": "3.782.0", "@aws-sdk/client-sts": "3.782.0",
"@jsx-email/render": "1.1.1", "@jsx-email/render": "1.1.1",
@@ -256,7 +256,7 @@
}, },
"packages/console/function": { "packages/console/function": {
"name": "@opencode-ai/console-function", "name": "@opencode-ai/console-function",
"version": "1.17.20", "version": "1.18.2",
"dependencies": { "dependencies": {
"@ai-sdk/anthropic": "3.0.82", "@ai-sdk/anthropic": "3.0.82",
"@ai-sdk/openai": "3.0.48", "@ai-sdk/openai": "3.0.48",
@@ -278,7 +278,7 @@
}, },
"packages/console/mail": { "packages/console/mail": {
"name": "@opencode-ai/console-mail", "name": "@opencode-ai/console-mail",
"version": "1.17.20", "version": "1.18.2",
"dependencies": { "dependencies": {
"@jsx-email/all": "2.2.3", "@jsx-email/all": "2.2.3",
"@jsx-email/cli": "1.4.3", "@jsx-email/cli": "1.4.3",
@@ -302,7 +302,7 @@
}, },
"packages/console/support": { "packages/console/support": {
"name": "@opencode-ai/console-support", "name": "@opencode-ai/console-support",
"version": "1.17.20", "version": "1.18.2",
"dependencies": { "dependencies": {
"@cloudflare/vite-plugin": "1.15.2", "@cloudflare/vite-plugin": "1.15.2",
"@opencode-ai/console-core": "workspace:*", "@opencode-ai/console-core": "workspace:*",
@@ -322,7 +322,7 @@
}, },
"packages/core": { "packages/core": {
"name": "@opencode-ai/core", "name": "@opencode-ai/core",
"version": "1.17.20", "version": "1.18.2",
"bin": { "bin": {
"opencode": "./bin/opencode", "opencode": "./bin/opencode",
}, },
@@ -418,7 +418,7 @@
}, },
"packages/desktop": { "packages/desktop": {
"name": "@opencode-ai/desktop", "name": "@opencode-ai/desktop",
"version": "1.17.20", "version": "1.18.2",
"dependencies": { "dependencies": {
"@zip.js/zip.js": "2.7.62", "@zip.js/zip.js": "2.7.62",
"effect": "catalog:", "effect": "catalog:",
@@ -478,7 +478,7 @@
}, },
"packages/effect-drizzle-sqlite": { "packages/effect-drizzle-sqlite": {
"name": "@opencode-ai/effect-drizzle-sqlite", "name": "@opencode-ai/effect-drizzle-sqlite",
"version": "1.17.20", "version": "1.18.2",
"dependencies": { "dependencies": {
"drizzle-orm": "catalog:", "drizzle-orm": "catalog:",
"effect": "catalog:", "effect": "catalog:",
@@ -492,7 +492,7 @@
}, },
"packages/effect-sqlite-node": { "packages/effect-sqlite-node": {
"name": "@opencode-ai/effect-sqlite-node", "name": "@opencode-ai/effect-sqlite-node",
"version": "1.17.20", "version": "1.18.2",
"dependencies": { "dependencies": {
"effect": "catalog:", "effect": "catalog:",
}, },
@@ -504,7 +504,7 @@
}, },
"packages/enterprise": { "packages/enterprise": {
"name": "@opencode-ai/enterprise", "name": "@opencode-ai/enterprise",
"version": "1.17.20", "version": "1.18.2",
"dependencies": { "dependencies": {
"@hono/standard-validator": "catalog:", "@hono/standard-validator": "catalog:",
"@opencode-ai/core": "workspace:*", "@opencode-ai/core": "workspace:*",
@@ -536,7 +536,7 @@
}, },
"packages/function": { "packages/function": {
"name": "@opencode-ai/function", "name": "@opencode-ai/function",
"version": "1.17.20", "version": "1.18.2",
"dependencies": { "dependencies": {
"@octokit/auth-app": "8.0.1", "@octokit/auth-app": "8.0.1",
"@octokit/rest": "catalog:", "@octokit/rest": "catalog:",
@@ -552,7 +552,7 @@
}, },
"packages/http-recorder": { "packages/http-recorder": {
"name": "@opencode-ai/http-recorder", "name": "@opencode-ai/http-recorder",
"version": "1.17.20", "version": "1.18.2",
"dependencies": { "dependencies": {
"@effect/platform-node-shared": "4.0.0-beta.83", "@effect/platform-node-shared": "4.0.0-beta.83",
}, },
@@ -584,7 +584,7 @@
}, },
"packages/opencode": { "packages/opencode": {
"name": "opencode", "name": "opencode",
"version": "1.17.20", "version": "1.18.2",
"bin": { "bin": {
"opencode": "./bin/opencode", "opencode": "./bin/opencode",
}, },
@@ -717,7 +717,7 @@
}, },
"packages/plugin": { "packages/plugin": {
"name": "@opencode-ai/plugin", "name": "@opencode-ai/plugin",
"version": "1.17.20", "version": "1.18.2",
"dependencies": { "dependencies": {
"@ai-sdk/provider": "3.0.8", "@ai-sdk/provider": "3.0.8",
"@opencode-ai/ai": "workspace:*", "@opencode-ai/ai": "workspace:*",
@@ -805,7 +805,7 @@
}, },
"packages/sdk/js": { "packages/sdk/js": {
"name": "@opencode-ai/sdk", "name": "@opencode-ai/sdk",
"version": "1.17.20", "version": "1.18.2",
"dependencies": { "dependencies": {
"cross-spawn": "catalog:", "cross-spawn": "catalog:",
}, },
@@ -820,7 +820,7 @@
}, },
"packages/server": { "packages/server": {
"name": "@opencode-ai/server", "name": "@opencode-ai/server",
"version": "1.17.20", "version": "1.18.2",
"dependencies": { "dependencies": {
"@effect/platform-node": "catalog:", "@effect/platform-node": "catalog:",
"@opencode-ai/core": "workspace:*", "@opencode-ai/core": "workspace:*",
@@ -837,7 +837,7 @@
}, },
"packages/session-ui": { "packages/session-ui": {
"name": "@opencode-ai/session-ui", "name": "@opencode-ai/session-ui",
"version": "1.17.20", "version": "1.18.2",
"dependencies": { "dependencies": {
"@kobalte/core": "catalog:", "@kobalte/core": "catalog:",
"@opencode-ai/core": "workspace:*", "@opencode-ai/core": "workspace:*",
@@ -898,7 +898,7 @@
}, },
"packages/slack": { "packages/slack": {
"name": "@opencode-ai/slack", "name": "@opencode-ai/slack",
"version": "1.17.20", "version": "1.18.2",
"dependencies": { "dependencies": {
"@opencode-ai/sdk": "workspace:*", "@opencode-ai/sdk": "workspace:*",
"@slack/bolt": "^3.17.1", "@slack/bolt": "^3.17.1",
@@ -911,7 +911,7 @@
}, },
"packages/stats/app": { "packages/stats/app": {
"name": "@opencode-ai/stats-app", "name": "@opencode-ai/stats-app",
"version": "1.17.20", "version": "1.18.2",
"dependencies": { "dependencies": {
"@ibm/plex": "6.4.1", "@ibm/plex": "6.4.1",
"@kobalte/core": "catalog:", "@kobalte/core": "catalog:",
@@ -945,7 +945,7 @@
}, },
"packages/stats/core": { "packages/stats/core": {
"name": "@opencode-ai/stats-core", "name": "@opencode-ai/stats-core",
"version": "1.17.20", "version": "1.18.2",
"dependencies": { "dependencies": {
"@aws-sdk/client-athena": "3.933.0", "@aws-sdk/client-athena": "3.933.0",
"@planetscale/database": "1.19.0", "@planetscale/database": "1.19.0",
@@ -964,7 +964,7 @@
}, },
"packages/stats/server": { "packages/stats/server": {
"name": "@opencode-ai/stats-server", "name": "@opencode-ai/stats-server",
"version": "1.17.20", "version": "1.18.2",
"dependencies": { "dependencies": {
"@aws-sdk/client-firehose": "3.933.0", "@aws-sdk/client-firehose": "3.933.0",
"@effect/platform-node": "catalog:", "@effect/platform-node": "catalog:",
@@ -1005,7 +1005,7 @@
}, },
"packages/tui": { "packages/tui": {
"name": "@opencode-ai/tui", "name": "@opencode-ai/tui",
"version": "1.17.20", "version": "1.18.2",
"dependencies": { "dependencies": {
"@opencode-ai/client": "workspace:*", "@opencode-ai/client": "workspace:*",
"@opencode-ai/core": "workspace:*", "@opencode-ai/core": "workspace:*",
@@ -1035,7 +1035,7 @@
}, },
"packages/ui": { "packages/ui": {
"name": "@opencode-ai/ui", "name": "@opencode-ai/ui",
"version": "1.17.20", "version": "1.18.2",
"dependencies": { "dependencies": {
"@kobalte/core": "catalog:", "@kobalte/core": "catalog:",
"@pierre/diffs": "catalog:", "@pierre/diffs": "catalog:",
@@ -1086,7 +1086,7 @@
}, },
"packages/web": { "packages/web": {
"name": "@opencode-ai/web", "name": "@opencode-ai/web",
"version": "1.17.20", "version": "1.18.2",
"dependencies": { "dependencies": {
"@astrojs/cloudflare": "12.6.3", "@astrojs/cloudflare": "12.6.3",
"@astrojs/markdown-remark": "6.3.1", "@astrojs/markdown-remark": "6.3.1",
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "@opencode-ai/app", "name": "@opencode-ai/app",
"version": "1.17.20", "version": "1.18.2",
"description": "", "description": "",
"type": "module", "type": "module",
"exports": { "exports": {
+13 -12
View File
@@ -32,8 +32,6 @@ const triggerClass =
const showPopover = () => true const showPopover = () => true
export function HelpButton() { export function HelpButton() {
if (import.meta.env.VITE_OPENCODE_CHANNEL !== "dev") return null
const platform = usePlatform() const platform = usePlatform()
return ( return (
@@ -56,6 +54,7 @@ export function HelpButton() {
// can remove this after the tabs rollout has been out for a while // can remove this after the tabs rollout has been out for a while
export function TabsInfoPopup() { export function TabsInfoPopup() {
const settings = useSettings() const settings = useSettings()
const platform = usePlatform()
const [drawerOpen, setDrawerOpen] = createSignal(false) const [drawerOpen, setDrawerOpen] = createSignal(false)
return ( return (
@@ -114,16 +113,18 @@ export function TabsInfoPopup() {
<DrawerContent> <DrawerContent>
<div class="flex h-[52px] w-full shrink-0 items-center gap-4 self-stretch border-b border-v2-border-border-muted p-4"> <div class="flex h-[52px] w-full shrink-0 items-center gap-4 self-stretch border-b border-v2-border-border-muted p-4">
<p class="min-h-0 min-w-0 flex-1 text-[13px] font-[530] leading-5 tracking-[-0.04px] tabular-nums text-v2-text-text-muted"> <p class="min-h-0 min-w-0 flex-1 text-[13px] font-[530] leading-5 tracking-[-0.04px] tabular-nums text-v2-text-text-muted">
June 16 July 14
</p> </p>
<DrawerClose <Show when={platform.platform !== "desktop" || platform.os !== "windows"}>
as={IconButtonV2} <DrawerClose
type="button" as={IconButtonV2}
size="small" type="button"
variant="ghost-muted" size="small"
aria-label="Close" variant="ghost-muted"
icon={<IconV2 name="xmark-small" />} aria-label="Close"
/> icon={<IconV2 name="xmark-small" />}
/>
</Show>
</div> </div>
<div class="relative flex min-h-0 w-full flex-1 flex-col items-start gap-6 overflow-y-auto p-8"> <div class="relative flex min-h-0 w-full flex-1 flex-col items-start gap-6 overflow-y-auto p-8">
<p class="w-full shrink-0 self-stretch text-[21px] font-[610] leading-6 tracking-[-0.37px] tabular-nums text-v2-text-text-base"> <p class="w-full shrink-0 self-stretch text-[21px] font-[610] leading-6 tracking-[-0.37px] tabular-nums text-v2-text-text-base">
@@ -147,7 +148,7 @@ export function TabsInfoPopup() {
<p>When you reopen the app, your tabs are still open.</p> <p>When you reopen the app, your tabs are still open.</p>
<p> <p>
The new design does not support Git Worktrees yet, it's coming soon. So if you'd prefer to continue using The new design does not support Git Worktrees yet, it's coming soon. So if you'd prefer to continue using
the previous layout , you can switch between layouts in Settings. Just keep in mind that the new layout the previous layout, you can switch between layouts in Settings. Just keep in mind that the new layout
will become permanent in a few weeks. will become permanent in a few weeks.
</p> </p>
</div> </div>
@@ -371,7 +371,7 @@
transform: translateY(-50%); transform: translateY(-50%);
} }
.settings-v2-tab-body.settings-v2-models { .settings-v2-models {
gap: 24px; gap: 24px;
} }
+1 -1
View File
@@ -392,7 +392,7 @@ export function Titlebar(props: { update?: TitlebarUpdate }) {
id: "tab.new", id: "tab.new",
category: "tab", category: "tab",
title: language.t("command.session.new"), title: language.t("command.session.new"),
keybind: "mod+t", keybind: "mod+t,mod+n",
hidden: true, hidden: true,
onSelect: openNewTab, onSelect: openNewTab,
}, },
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"$schema": "https://json.schemastore.org/package.json", "$schema": "https://json.schemastore.org/package.json",
"name": "@opencode-ai/cli", "name": "@opencode-ai/cli",
"version": "1.17.18", "version": "1.18.2",
"type": "module", "type": "module",
"license": "MIT", "license": "MIT",
"bin": { "bin": {
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"$schema": "https://json.schemastore.org/package.json", "$schema": "https://json.schemastore.org/package.json",
"name": "@opencode-ai/codemode", "name": "@opencode-ai/codemode",
"version": "1.17.20", "version": "1.18.2",
"description": "Effect-native confined code execution over schema-described tools", "description": "Effect-native confined code execution over schema-described tools",
"private": true, "private": true,
"type": "module", "type": "module",
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "@opencode-ai/console-app", "name": "@opencode-ai/console-app",
"version": "1.17.20", "version": "1.18.2",
"type": "module", "type": "module",
"license": "MIT", "license": "MIT",
"scripts": { "scripts": {
+2
View File
@@ -9,6 +9,7 @@ import "./app.css"
import { LanguageProvider } from "~/context/language" import { LanguageProvider } from "~/context/language"
import { I18nProvider, useI18n } from "~/context/i18n" import { I18nProvider, useI18n } from "~/context/i18n"
import { strip } from "~/lib/language" import { strip } from "~/lib/language"
import { DesktopPromo } from "~/component/desktop-promo"
function AppMeta() { function AppMeta() {
const i18n = useI18n() const i18n = useI18n()
@@ -33,6 +34,7 @@ export default function App() {
<MetaProvider> <MetaProvider>
<AppMeta /> <AppMeta />
<Suspense>{props.children}</Suspense> <Suspense>{props.children}</Suspense>
<DesktopPromo />
</MetaProvider> </MetaProvider>
</I18nProvider> </I18nProvider>
</LanguageProvider> </LanguageProvider>
@@ -0,0 +1,103 @@
[data-component="desktop-promo"] {
--promo-background: hsl(0, 20%, 99%);
--promo-background-weak: hsl(0, 8%, 97%);
--promo-text: hsl(0, 1%, 39%);
--promo-text-strong: hsl(0, 5%, 12%);
--promo-border: hsla(0, 100%, 3%, 0.12);
position: fixed;
z-index: 20;
right: 1.5rem;
bottom: 1.5rem;
width: min(28rem, calc(100vw - 2rem));
padding: 4px;
overflow: hidden;
color: var(--promo-text);
border: 1px solid var(--promo-border);
border-radius: 8px;
background: var(--promo-background);
box-shadow: 0 0.75rem 2rem rgb(0 0 0 / 15%);
font-family: var(--font-mono);
@media (prefers-color-scheme: dark) {
--promo-background: hsl(0, 9%, 7%);
--promo-background-weak: hsl(0, 6%, 10%);
--promo-text: hsl(0, 4%, 71%);
--promo-text-strong: hsl(0, 15%, 94%);
--promo-border: hsl(0, 4%, 23%);
}
@media (max-width: 40rem) {
right: 1rem;
bottom: 1rem;
}
[data-slot="desktop-promo-link"] {
display: block;
color: var(--promo-text);
text-decoration: none;
}
[data-slot="desktop-promo-link"]:focus-visible {
outline: 2px solid var(--promo-text-strong);
outline-offset: -3px;
}
video {
display: block;
width: 100%;
aspect-ratio: 16 / 9;
object-fit: cover;
border-radius: 4px;
background: var(--promo-background-weak);
}
[data-slot="desktop-promo-copy"] {
display: flex;
flex-direction: column;
gap: 0.35rem;
padding: 1rem;
font-size: 0.875rem;
line-height: 1.4;
}
[data-slot="desktop-promo-copy"] strong {
color: var(--promo-text-strong);
font-weight: 500;
}
[data-slot="desktop-promo-close"] {
position: absolute;
top: 0.5rem;
right: 0.5rem;
display: grid;
width: 2rem;
height: 2rem;
padding: 0;
place-items: center;
cursor: pointer;
color: white;
border: none;
border-radius: 0.25rem;
background: rgb(0 0 0 / 70%);
opacity: 0;
transition:
opacity 150ms ease,
background 150ms ease;
}
&:hover [data-slot="desktop-promo-close"],
[data-slot="desktop-promo-close"]:focus-visible {
opacity: 1;
}
[data-slot="desktop-promo-close"]:hover {
background: rgb(0 0 0 / 90%);
}
@media (hover: none) {
[data-slot="desktop-promo-close"] {
opacity: 1;
}
}
}
@@ -0,0 +1,48 @@
import "./desktop-promo.css"
import { A, useLocation } from "@solidjs/router"
import { createSignal, Show } from "solid-js"
import { getRequestEvent } from "solid-js/web"
import desktopPromoVideo from "~/asset/lander/desktop-tabs-landscape.mp4"
import { useI18n } from "~/context/i18n"
import { useLanguage } from "~/context/language"
import { strip } from "~/lib/language"
export function DesktopPromo() {
const i18n = useI18n()
const language = useLanguage()
const location = useLocation()
const [visible, setVisible] = createSignal(true)
const request = getRequestEvent()?.request
const hostname = request ? new URL(request.url).hostname : typeof window === "object" ? window.location.hostname : ""
const primaryHost =
hostname === "opencode.ai" || hostname === "localhost" || hostname === "127.0.0.1" || hostname === "::1"
return (
<Show
when={
visible() &&
primaryHost &&
strip(location.pathname) !== "/download" &&
!strip(location.pathname).startsWith("/download/")
}
>
<aside data-component="desktop-promo">
<A href={language.route("/download")} data-slot="desktop-promo-link">
<video src={desktopPromoVideo} autoplay playsinline loop muted preload="metadata" aria-hidden="true" />
<span data-slot="desktop-promo-copy">
<strong>{i18n.t("home.promo.title")}</strong>
<span>
{i18n.t("home.promo.body")} {i18n.t("home.promo.cta")}
</span>
</span>
</A>
<button type="button" data-slot="desktop-promo-close" onClick={() => setVisible(false)}>
<span class="sr-only">{i18n.t("home.promo.close")}</span>
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" aria-hidden="true">
<path d="M5 5L15 15M15 5L5 15" stroke="currentColor" stroke-width="1.5" />
</svg>
</button>
</aside>
</Show>
)
}
+8 -4
View File
@@ -102,10 +102,14 @@ export const dict = {
"temp.logoDarkAlt": "شعار opencode الداكن", "temp.logoDarkAlt": "شعار opencode الداكن",
"home.banner.badge": "جديد", "home.banner.badge": "جديد",
"home.banner.text": "تطبيق سطح المكتب متاح بنسخة تجريبية", "home.banner.text": "نقدّم علامات التبويب لتطبيق سطح المكتب.",
"home.banner.platforms": "على macOS، Windows، وLinux", "home.banner.platforms": "متاحة على macOS وWindows وLinux",
"home.banner.downloadNow": "حمّل الآن", "home.banner.downloadNow": "حمّل الآن",
"home.banner.downloadBetaNow": "حمّل النسخة التجريبية لتطبيق سطح المكتب الآن", "home.banner.downloadBetaNow": "حمّل النسخة التجريبية لتطبيق سطح المكتب الآن",
"home.promo.title": "نقدّم علامات التبويب لتطبيق سطح المكتب",
"home.promo.body": "نظّم عملك وجلساتك النشطة باستخدام علامات التبويب.",
"home.promo.cta": "نزّل أحدث إصدار للبدء.",
"home.promo.close": "إغلاق إعلان تطبيق سطح المكتب",
"home.hero.title": "وكيل برمجة بالذكاء الاصطناعي مفتوح المصدر", "home.hero.title": "وكيل برمجة بالذكاء الاصطناعي مفتوح المصدر",
"home.hero.subtitle.a": "نماذج مجانية مضمّنة أو اربط أي نموذج من أي مزوّد،", "home.hero.subtitle.a": "نماذج مجانية مضمّنة أو اربط أي نموذج من أي مزوّد،",
@@ -700,11 +704,11 @@ export const dict = {
"download.title": "OpenCode | تنزيل", "download.title": "OpenCode | تنزيل",
"download.meta.description": "نزّل OpenCode لـ macOS، Windows، وLinux", "download.meta.description": "نزّل OpenCode لـ macOS، Windows، وLinux",
"download.hero.title": "تنزيل OpenCode", "download.hero.title": "تنزيل OpenCode لسطح المكتب",
"download.hero.subtitle": "متاح في نسخة تجريبية لـ macOS، Windows، وLinux", "download.hero.subtitle": "متاح في نسخة تجريبية لـ macOS، Windows، وLinux",
"download.hero.button": "تنزيل لـ {{os}}", "download.hero.button": "تنزيل لـ {{os}}",
"download.section.terminal": "OpenCode للطرفية", "download.section.terminal": "OpenCode للطرفية",
"download.section.desktop": "OpenCode لسطح المكتب (Beta)", "download.section.desktop": "OpenCode لسطح المكتب",
"download.section.extensions": "امتدادات OpenCode", "download.section.extensions": "امتدادات OpenCode",
"download.section.integrations": "تكاملات OpenCode", "download.section.integrations": "تكاملات OpenCode",
"download.action.download": "تنزيل", "download.action.download": "تنزيل",
+8 -4
View File
@@ -102,10 +102,14 @@ export const dict = {
"temp.logoDarkAlt": "logo opencode escuro", "temp.logoDarkAlt": "logo opencode escuro",
"home.banner.badge": "Novo", "home.banner.badge": "Novo",
"home.banner.text": "App desktop disponível em beta", "home.banner.text": "Conheça as abas no app desktop.",
"home.banner.platforms": "no macOS, Windows e Linux", "home.banner.platforms": "Disponível no macOS, Windows e Linux",
"home.banner.downloadNow": "Baixar agora", "home.banner.downloadNow": "Baixar agora",
"home.banner.downloadBetaNow": "Baixe agora o beta do desktop", "home.banner.downloadBetaNow": "Baixe agora o beta do desktop",
"home.promo.title": "Conheça as abas no app desktop",
"home.promo.body": "Organize seu trabalho e suas sessões ativas com abas.",
"home.promo.cta": "Baixe a versão mais recente para começar.",
"home.promo.close": "Fechar anúncio do app desktop",
"home.hero.title": "O agente de codificação de código aberto com IA", "home.hero.title": "O agente de codificação de código aberto com IA",
"home.hero.subtitle.a": "Modelos grátis incluídos ou conecte qualquer modelo de qualquer provedor,", "home.hero.subtitle.a": "Modelos grátis incluídos ou conecte qualquer modelo de qualquer provedor,",
@@ -711,11 +715,11 @@ export const dict = {
"download.title": "OpenCode | Baixar", "download.title": "OpenCode | Baixar",
"download.meta.description": "Baixe o OpenCode para macOS, Windows e Linux", "download.meta.description": "Baixe o OpenCode para macOS, Windows e Linux",
"download.hero.title": "Baixar OpenCode", "download.hero.title": "Baixar OpenCode Desktop",
"download.hero.subtitle": "Disponível em Beta para macOS, Windows e Linux", "download.hero.subtitle": "Disponível em Beta para macOS, Windows e Linux",
"download.hero.button": "Baixar para {{os}}", "download.hero.button": "Baixar para {{os}}",
"download.section.terminal": "OpenCode Terminal", "download.section.terminal": "OpenCode Terminal",
"download.section.desktop": "OpenCode Desktop (Beta)", "download.section.desktop": "OpenCode Desktop",
"download.section.extensions": "Extensões OpenCode", "download.section.extensions": "Extensões OpenCode",
"download.section.integrations": "Integrações OpenCode", "download.section.integrations": "Integrações OpenCode",
"download.action.download": "Baixar", "download.action.download": "Baixar",
+8 -4
View File
@@ -102,10 +102,14 @@ export const dict = {
"temp.logoDarkAlt": "opencode logo dark", "temp.logoDarkAlt": "opencode logo dark",
"home.banner.badge": "Ny", "home.banner.badge": "Ny",
"home.banner.text": "Desktop-app tilgængelig i beta", "home.banner.text": "Introduktion af Tabs til Desktop.",
"home.banner.platforms": "på macOS, Windows og Linux", "home.banner.platforms": "Tilgængelig på macOS, Windows og Linux",
"home.banner.downloadNow": "Download nu", "home.banner.downloadNow": "Download nu",
"home.banner.downloadBetaNow": "Download desktop-betaen nu", "home.banner.downloadBetaNow": "Download desktop-betaen nu",
"home.promo.title": "Introduktion af Tabs til Desktop",
"home.promo.body": "Organiser dit arbejde og aktive sessioner med faner.",
"home.promo.cta": "Download den nyeste version for at komme i gang.",
"home.promo.close": "Luk meddelelsen om Desktop-appen",
"home.hero.title": "Den open source AI-kodningsagent", "home.hero.title": "Den open source AI-kodningsagent",
"home.hero.subtitle.a": "Gratis modeller inkluderet, eller forbind enhver model fra enhver udbyder,", "home.hero.subtitle.a": "Gratis modeller inkluderet, eller forbind enhver model fra enhver udbyder,",
@@ -706,11 +710,11 @@ export const dict = {
"download.title": "OpenCode | Download", "download.title": "OpenCode | Download",
"download.meta.description": "Download OpenCode til macOS, Windows og Linux", "download.meta.description": "Download OpenCode til macOS, Windows og Linux",
"download.hero.title": "Download OpenCode", "download.hero.title": "Download OpenCode Desktop",
"download.hero.subtitle": "Tilgængelig i beta til macOS, Windows og Linux", "download.hero.subtitle": "Tilgængelig i beta til macOS, Windows og Linux",
"download.hero.button": "Download til {{os}}", "download.hero.button": "Download til {{os}}",
"download.section.terminal": "OpenCode Terminal", "download.section.terminal": "OpenCode Terminal",
"download.section.desktop": "OpenCode Desktop (Beta)", "download.section.desktop": "OpenCode Desktop",
"download.section.extensions": "OpenCode Extensions", "download.section.extensions": "OpenCode Extensions",
"download.section.integrations": "OpenCode Integrations", "download.section.integrations": "OpenCode Integrations",
"download.action.download": "Download", "download.action.download": "Download",
+8 -4
View File
@@ -102,10 +102,14 @@ export const dict = {
"temp.logoDarkAlt": "OpenCode Logo dunkel", "temp.logoDarkAlt": "OpenCode Logo dunkel",
"home.banner.badge": "Neu", "home.banner.badge": "Neu",
"home.banner.text": "Desktop-App in der Beta verfügbar", "home.banner.text": "Neu: Tabs für Desktop.",
"home.banner.platforms": "auf macOS, Windows und Linux", "home.banner.platforms": "Verfügbar für macOS, Windows und Linux",
"home.banner.downloadNow": "Jetzt herunterladen", "home.banner.downloadNow": "Jetzt herunterladen",
"home.banner.downloadBetaNow": "Desktop-Beta jetzt herunterladen", "home.banner.downloadBetaNow": "Desktop-Beta jetzt herunterladen",
"home.promo.title": "Neu: Tabs für Desktop",
"home.promo.body": "Organisiere deine Arbeit und aktiven Sitzungen mit Tabs.",
"home.promo.cta": "Lade die neueste Version herunter, um loszulegen.",
"home.promo.close": "Ankündigung zur Desktop-App schließen",
"home.hero.title": "Der Open-Source AI-Coding-Agent", "home.hero.title": "Der Open-Source AI-Coding-Agent",
"home.hero.subtitle.a": "Kostenlose Modelle inklusive oder verbinde jedes Modell eines beliebigen Anbieters,", "home.hero.subtitle.a": "Kostenlose Modelle inklusive oder verbinde jedes Modell eines beliebigen Anbieters,",
@@ -711,11 +715,11 @@ export const dict = {
"download.title": "OpenCode | Download", "download.title": "OpenCode | Download",
"download.meta.description": "Lade OpenCode für macOS, Windows und Linux herunter", "download.meta.description": "Lade OpenCode für macOS, Windows und Linux herunter",
"download.hero.title": "OpenCode herunterladen", "download.hero.title": "OpenCode Desktop herunterladen",
"download.hero.subtitle": "In Beta verfügbar für macOS, Windows und Linux", "download.hero.subtitle": "In Beta verfügbar für macOS, Windows und Linux",
"download.hero.button": "Download für {{os}}", "download.hero.button": "Download für {{os}}",
"download.section.terminal": "OpenCode Terminal", "download.section.terminal": "OpenCode Terminal",
"download.section.desktop": "OpenCode Desktop (Beta)", "download.section.desktop": "OpenCode Desktop",
"download.section.extensions": "OpenCode Extensions", "download.section.extensions": "OpenCode Extensions",
"download.section.integrations": "OpenCode Integrationen", "download.section.integrations": "OpenCode Integrationen",
"download.action.download": "Download", "download.action.download": "Download",
+9 -4
View File
@@ -102,11 +102,16 @@ export const dict = {
"temp.logoDarkAlt": "opencode logo dark", "temp.logoDarkAlt": "opencode logo dark",
"home.banner.badge": "New", "home.banner.badge": "New",
"home.banner.text": "Desktop app available in beta", "home.banner.text": "Introducing tabs for desktop.",
"home.banner.platforms": "on macOS, Windows, and Linux", "home.banner.platforms": "Available on macOS, Windows, and Linux",
"home.banner.downloadNow": "Download now", "home.banner.downloadNow": "Download now",
"home.banner.downloadBetaNow": "Download the desktop beta now", "home.banner.downloadBetaNow": "Download the desktop beta now",
"home.promo.title": "Introducing Tabs for Desktop",
"home.promo.body": "Organize your work and active sessions with tabs.",
"home.promo.cta": "Download the latest to get started.",
"home.promo.close": "Dismiss desktop app announcement",
"home.hero.title": "The open source AI coding agent", "home.hero.title": "The open source AI coding agent",
"home.hero.subtitle.a": "Free models included or connect any model from any provider,", "home.hero.subtitle.a": "Free models included or connect any model from any provider,",
"home.hero.subtitle.b": "including Claude, GPT, Gemini and more.", "home.hero.subtitle.b": "including Claude, GPT, Gemini and more.",
@@ -703,11 +708,11 @@ export const dict = {
"download.title": "OpenCode | Download", "download.title": "OpenCode | Download",
"download.meta.description": "Download OpenCode for macOS, Windows, and Linux", "download.meta.description": "Download OpenCode for macOS, Windows, and Linux",
"download.hero.title": "Download OpenCode", "download.hero.title": "Download OpenCode Desktop",
"download.hero.subtitle": "Available in Beta for macOS, Windows, and Linux", "download.hero.subtitle": "Available in Beta for macOS, Windows, and Linux",
"download.hero.button": "Download for {{os}}", "download.hero.button": "Download for {{os}}",
"download.section.terminal": "OpenCode Terminal", "download.section.terminal": "OpenCode Terminal",
"download.section.desktop": "OpenCode Desktop (Beta)", "download.section.desktop": "OpenCode Desktop",
"download.section.extensions": "OpenCode Extensions", "download.section.extensions": "OpenCode Extensions",
"download.section.integrations": "OpenCode Integrations", "download.section.integrations": "OpenCode Integrations",
"download.action.download": "Download", "download.action.download": "Download",
+8 -4
View File
@@ -102,10 +102,14 @@ export const dict = {
"temp.logoDarkAlt": "logo de opencode oscuro", "temp.logoDarkAlt": "logo de opencode oscuro",
"home.banner.badge": "Nuevo", "home.banner.badge": "Nuevo",
"home.banner.text": "Aplicación de escritorio disponible en beta", "home.banner.text": "Presentamos Tabs para Desktop.",
"home.banner.platforms": "en macOS, Windows y Linux", "home.banner.platforms": "Disponible en macOS, Windows y Linux",
"home.banner.downloadNow": "Descargar ahora", "home.banner.downloadNow": "Descargar ahora",
"home.banner.downloadBetaNow": "Descargar la beta de escritorio ahora", "home.banner.downloadBetaNow": "Descargar la beta de escritorio ahora",
"home.promo.title": "Presentamos Tabs para Desktop",
"home.promo.body": "Organiza tu trabajo y tus sesiones activas con pestañas.",
"home.promo.cta": "Descarga la última versión para empezar.",
"home.promo.close": "Cerrar el anuncio de la aplicación Desktop",
"home.hero.title": "El agente de codificación IA de código abierto", "home.hero.title": "El agente de codificación IA de código abierto",
"home.hero.subtitle.a": "Modelos gratuitos incluidos o conecta cualquier modelo de cualquier proveedor,", "home.hero.subtitle.a": "Modelos gratuitos incluidos o conecta cualquier modelo de cualquier proveedor,",
@@ -711,11 +715,11 @@ export const dict = {
"download.title": "OpenCode | Descargar", "download.title": "OpenCode | Descargar",
"download.meta.description": "Descarga OpenCode para macOS, Windows y Linux", "download.meta.description": "Descarga OpenCode para macOS, Windows y Linux",
"download.hero.title": "Descargar OpenCode", "download.hero.title": "Descargar OpenCode Desktop",
"download.hero.subtitle": "Disponible en Beta para macOS, Windows y Linux", "download.hero.subtitle": "Disponible en Beta para macOS, Windows y Linux",
"download.hero.button": "Descargar para {{os}}", "download.hero.button": "Descargar para {{os}}",
"download.section.terminal": "OpenCode Terminal", "download.section.terminal": "OpenCode Terminal",
"download.section.desktop": "OpenCode Desktop (Beta)", "download.section.desktop": "OpenCode Desktop",
"download.section.extensions": "Extensiones OpenCode", "download.section.extensions": "Extensiones OpenCode",
"download.section.integrations": "Integraciones OpenCode", "download.section.integrations": "Integraciones OpenCode",
"download.action.download": "Descargar", "download.action.download": "Descargar",
+8 -4
View File
@@ -100,10 +100,14 @@ export const dict = {
"temp.logoDarkAlt": "opencode logo dark", "temp.logoDarkAlt": "opencode logo dark",
"home.banner.badge": "Nouveau", "home.banner.badge": "Nouveau",
"home.banner.text": "Application desktop disponible en bêta", "home.banner.text": "Découvrez Tabs pour Desktop.",
"home.banner.platforms": "sur macOS, Windows et Linux", "home.banner.platforms": "Disponible sur macOS, Windows et Linux",
"home.banner.downloadNow": "Télécharger maintenant", "home.banner.downloadNow": "Télécharger maintenant",
"home.banner.downloadBetaNow": "Télécharger la bêta desktop maintenant", "home.banner.downloadBetaNow": "Télécharger la bêta desktop maintenant",
"home.promo.title": "Découvrez Tabs pour Desktop",
"home.promo.body": "Organisez votre travail et vos sessions actives avec des onglets.",
"home.promo.cta": "Téléchargez la dernière version pour commencer.",
"home.promo.close": "Fermer lannonce de lapplication Desktop",
"home.hero.title": "L'agent de code IA open source", "home.hero.title": "L'agent de code IA open source",
"home.hero.subtitle.a": "home.hero.subtitle.a":
@@ -718,11 +722,11 @@ export const dict = {
"download.title": "OpenCode | Téléchargement", "download.title": "OpenCode | Téléchargement",
"download.meta.description": "Téléchargez OpenCode pour macOS, Windows et Linux", "download.meta.description": "Téléchargez OpenCode pour macOS, Windows et Linux",
"download.hero.title": "Télécharger OpenCode", "download.hero.title": "Télécharger OpenCode Desktop",
"download.hero.subtitle": "Disponible en bêta pour macOS, Windows et Linux", "download.hero.subtitle": "Disponible en bêta pour macOS, Windows et Linux",
"download.hero.button": "Télécharger pour {{os}}", "download.hero.button": "Télécharger pour {{os}}",
"download.section.terminal": "OpenCode Terminal", "download.section.terminal": "OpenCode Terminal",
"download.section.desktop": "OpenCode Desktop (Bêta)", "download.section.desktop": "OpenCode Desktop",
"download.section.extensions": "Extensions OpenCode", "download.section.extensions": "Extensions OpenCode",
"download.section.integrations": "Intégrations OpenCode", "download.section.integrations": "Intégrations OpenCode",
"download.action.download": "Télécharger", "download.action.download": "Télécharger",
+8 -4
View File
@@ -102,10 +102,14 @@ export const dict = {
"temp.logoDarkAlt": "logo scuro di opencode", "temp.logoDarkAlt": "logo scuro di opencode",
"home.banner.badge": "Nuovo", "home.banner.badge": "Nuovo",
"home.banner.text": "App desktop disponibile in beta", "home.banner.text": "Scopri Tabs per Desktop.",
"home.banner.platforms": "su macOS, Windows e Linux", "home.banner.platforms": "Disponibile su macOS, Windows e Linux",
"home.banner.downloadNow": "Scarica ora", "home.banner.downloadNow": "Scarica ora",
"home.banner.downloadBetaNow": "Scarica ora la beta desktop", "home.banner.downloadBetaNow": "Scarica ora la beta desktop",
"home.promo.title": "Scopri Tabs per Desktop",
"home.promo.body": "Organizza il tuo lavoro e le sessioni attive con le schede.",
"home.promo.cta": "Scarica lultima versione per iniziare.",
"home.promo.close": "Chiudi lannuncio dellapp Desktop",
"home.hero.title": "L'agente di coding IA open source", "home.hero.title": "L'agente di coding IA open source",
"home.hero.subtitle.a": "Modelli gratuiti inclusi o collega qualsiasi modello da qualsiasi provider,", "home.hero.subtitle.a": "Modelli gratuiti inclusi o collega qualsiasi modello da qualsiasi provider,",
@@ -709,11 +713,11 @@ export const dict = {
"download.title": "OpenCode | Download", "download.title": "OpenCode | Download",
"download.meta.description": "Scarica OpenCode per macOS, Windows e Linux", "download.meta.description": "Scarica OpenCode per macOS, Windows e Linux",
"download.hero.title": "Scarica OpenCode", "download.hero.title": "Scarica OpenCode Desktop",
"download.hero.subtitle": "Disponibile in Beta per macOS, Windows e Linux", "download.hero.subtitle": "Disponibile in Beta per macOS, Windows e Linux",
"download.hero.button": "Scarica per {{os}}", "download.hero.button": "Scarica per {{os}}",
"download.section.terminal": "OpenCode Terminal", "download.section.terminal": "OpenCode Terminal",
"download.section.desktop": "OpenCode Desktop (Beta)", "download.section.desktop": "OpenCode Desktop",
"download.section.extensions": "OpenCode Extensions", "download.section.extensions": "OpenCode Extensions",
"download.section.integrations": "OpenCode Integrations", "download.section.integrations": "OpenCode Integrations",
"download.action.download": "Scarica", "download.action.download": "Scarica",
+8 -4
View File
@@ -102,10 +102,14 @@ export const dict = {
"temp.logoDarkAlt": "opencodeのロゴ(ダーク)", "temp.logoDarkAlt": "opencodeのロゴ(ダーク)",
"home.banner.badge": "新着", "home.banner.badge": "新着",
"home.banner.text": "デスクトップアプリのベータ版が利用可能", "home.banner.text": "デスクトップ版にタブが登場。",
"home.banner.platforms": "macOS、Windows、Linux で", "home.banner.platforms": "macOS、Windows、Linux で利用できます",
"home.banner.downloadNow": "今すぐダウンロード", "home.banner.downloadNow": "今すぐダウンロード",
"home.banner.downloadBetaNow": "デスクトップベータ版を今すぐダウンロード", "home.banner.downloadBetaNow": "デスクトップベータ版を今すぐダウンロード",
"home.promo.title": "デスクトップ版にタブが登場",
"home.promo.body": "タブで作業とアクティブなセッションを整理できます。",
"home.promo.cta": "始めるには最新版をダウンロードしてください。",
"home.promo.close": "デスクトップアプリのお知らせを閉じる",
"home.hero.title": "オープンソースのAIコーディングエージェント", "home.hero.title": "オープンソースのAIコーディングエージェント",
"home.hero.subtitle.a": "無料モデルが含まれています。また、任意のプロバイダーの任意のモデルに接続でき、", "home.hero.subtitle.a": "無料モデルが含まれています。また、任意のプロバイダーの任意のモデルに接続でき、",
@@ -708,11 +712,11 @@ export const dict = {
"download.title": "OpenCode | ダウンロード", "download.title": "OpenCode | ダウンロード",
"download.meta.description": "OpenCode を macOS、Windows、Linux 向けにダウンロード", "download.meta.description": "OpenCode を macOS、Windows、Linux 向けにダウンロード",
"download.hero.title": "OpenCode をダウンロード", "download.hero.title": "OpenCode デスクトップ版をダウンロード",
"download.hero.subtitle": "macOS、Windows、Linux 向けベータ版を利用可能", "download.hero.subtitle": "macOS、Windows、Linux 向けベータ版を利用可能",
"download.hero.button": "{{os}} 向けダウンロード", "download.hero.button": "{{os}} 向けダウンロード",
"download.section.terminal": "OpenCode Terminal", "download.section.terminal": "OpenCode Terminal",
"download.section.desktop": "OpenCode Desktop (Beta)", "download.section.desktop": "OpenCode Desktop",
"download.section.extensions": "OpenCode Extensions", "download.section.extensions": "OpenCode Extensions",
"download.section.integrations": "OpenCode Integrations", "download.section.integrations": "OpenCode Integrations",
"download.action.download": "ダウンロード", "download.action.download": "ダウンロード",
+8 -4
View File
@@ -102,10 +102,14 @@ export const dict = {
"temp.logoDarkAlt": "opencode 어두운 로고", "temp.logoDarkAlt": "opencode 어두운 로고",
"home.banner.badge": "신규", "home.banner.badge": "신규",
"home.banner.text": "데스크톱 앱 베타 버전 출시", "home.banner.text": "데스크톱 탭을 소개합니다.",
"home.banner.platforms": "macOS, Windows, Linux 지원", "home.banner.platforms": "macOS, Windows, Linux에서 사용할 수 있습니다",
"home.banner.downloadNow": "지금 다운로드", "home.banner.downloadNow": "지금 다운로드",
"home.banner.downloadBetaNow": "데스크톱 베타 다운로드", "home.banner.downloadBetaNow": "데스크톱 베타 다운로드",
"home.promo.title": "데스크톱 탭을 소개합니다",
"home.promo.body": "탭으로 작업과 활성 세션을 정리하세요.",
"home.promo.cta": "최신 버전을 다운로드하여 시작하세요.",
"home.promo.close": "데스크톱 앱 안내 닫기",
"home.hero.title": "오픈 소스 AI 코딩 에이전트", "home.hero.title": "오픈 소스 AI 코딩 에이전트",
"home.hero.subtitle.a": "무료 모델이 포함되어 있으며, 어떤 제공자의 모델이든 연결 가능합니다.", "home.hero.subtitle.a": "무료 모델이 포함되어 있으며, 어떤 제공자의 모델이든 연결 가능합니다.",
@@ -700,11 +704,11 @@ export const dict = {
"download.title": "OpenCode | 다운로드", "download.title": "OpenCode | 다운로드",
"download.meta.description": "macOS, Windows, Linux용 OpenCode 다운로드", "download.meta.description": "macOS, Windows, Linux용 OpenCode 다운로드",
"download.hero.title": "OpenCode 다운로드", "download.hero.title": "OpenCode 데스크톱 다운로드",
"download.hero.subtitle": "macOS, Windows, Linux용 베타 버전 사용 가능", "download.hero.subtitle": "macOS, Windows, Linux용 베타 버전 사용 가능",
"download.hero.button": "{{os}}용 다운로드", "download.hero.button": "{{os}}용 다운로드",
"download.section.terminal": "OpenCode 터미널", "download.section.terminal": "OpenCode 터미널",
"download.section.desktop": "OpenCode 데스크톱 (베타)", "download.section.desktop": "OpenCode 데스크톱",
"download.section.extensions": "OpenCode 확장 프로그램", "download.section.extensions": "OpenCode 확장 프로그램",
"download.section.integrations": "OpenCode 통합", "download.section.integrations": "OpenCode 통합",
"download.action.download": "다운로드", "download.action.download": "다운로드",
+8 -4
View File
@@ -102,10 +102,14 @@ export const dict = {
"temp.logoDarkAlt": "opencode logo mørk", "temp.logoDarkAlt": "opencode logo mørk",
"home.banner.badge": "Ny", "home.banner.badge": "Ny",
"home.banner.text": "Desktop-app tilgjengelig i beta", "home.banner.text": "Vi introduserer Tabs for Desktop.",
"home.banner.platforms": "på macOS, Windows og Linux", "home.banner.platforms": "Tilgjengelig på macOS, Windows og Linux",
"home.banner.downloadNow": "Last ned nå", "home.banner.downloadNow": "Last ned nå",
"home.banner.downloadBetaNow": "Last ned desktop-betaen nå", "home.banner.downloadBetaNow": "Last ned desktop-betaen nå",
"home.promo.title": "Vi introduserer Tabs for Desktop",
"home.promo.body": "Organiser arbeidet ditt og aktive økter med faner.",
"home.promo.cta": "Last ned den nyeste versjonen for å komme i gang.",
"home.promo.close": "Lukk kunngjøringen om Desktop-appen",
"home.hero.title": "Den åpne kildekode AI-kodingsagenten", "home.hero.title": "Den åpne kildekode AI-kodingsagenten",
"home.hero.subtitle.a": "home.hero.subtitle.a":
@@ -707,11 +711,11 @@ export const dict = {
"download.title": "OpenCode | Last ned", "download.title": "OpenCode | Last ned",
"download.meta.description": "Last ned OpenCode for macOS, Windows og Linux", "download.meta.description": "Last ned OpenCode for macOS, Windows og Linux",
"download.hero.title": "Last ned OpenCode", "download.hero.title": "Last ned OpenCode Desktop",
"download.hero.subtitle": "Tilgjengelig i beta for macOS, Windows og Linux", "download.hero.subtitle": "Tilgjengelig i beta for macOS, Windows og Linux",
"download.hero.button": "Last ned for {{os}}", "download.hero.button": "Last ned for {{os}}",
"download.section.terminal": "OpenCode Terminal", "download.section.terminal": "OpenCode Terminal",
"download.section.desktop": "OpenCode Desktop (Beta)", "download.section.desktop": "OpenCode Desktop",
"download.section.extensions": "OpenCode Extensions", "download.section.extensions": "OpenCode Extensions",
"download.section.integrations": "OpenCode Integrations", "download.section.integrations": "OpenCode Integrations",
"download.action.download": "Last ned", "download.action.download": "Last ned",
+8 -4
View File
@@ -101,10 +101,14 @@ export const dict = {
"temp.logoDarkAlt": "ciemne logo opencode", "temp.logoDarkAlt": "ciemne logo opencode",
"home.banner.badge": "Nowość", "home.banner.badge": "Nowość",
"home.banner.text": "Aplikacja desktopowa dostępna w wersji beta", "home.banner.text": "Przedstawiamy karty w aplikacji desktopowej.",
"home.banner.platforms": "na macOS, Windows i Linux", "home.banner.platforms": "Dostępne na macOS, Windows i Linux",
"home.banner.downloadNow": "Pobierz teraz", "home.banner.downloadNow": "Pobierz teraz",
"home.banner.downloadBetaNow": "Pobierz betę wersji desktopowej", "home.banner.downloadBetaNow": "Pobierz betę wersji desktopowej",
"home.promo.title": "Przedstawiamy karty w aplikacji desktopowej",
"home.promo.body": "Organizuj swoją pracę i aktywne sesje za pomocą kart.",
"home.promo.cta": "Pobierz najnowszą wersję, aby rozpocząć.",
"home.promo.close": "Zamknij ogłoszenie o aplikacji desktopowej",
"home.hero.title": "Open source'owy agent AI do kodowania", "home.hero.title": "Open source'owy agent AI do kodowania",
"home.hero.subtitle.a": "Darmowe modele w zestawie lub podłącz dowolny model od dowolnego dostawcy,", "home.hero.subtitle.a": "Darmowe modele w zestawie lub podłącz dowolny model od dowolnego dostawcy,",
@@ -708,11 +712,11 @@ export const dict = {
"download.title": "OpenCode | Pobierz", "download.title": "OpenCode | Pobierz",
"download.meta.description": "Pobierz OpenCode na macOS, Windows i Linux", "download.meta.description": "Pobierz OpenCode na macOS, Windows i Linux",
"download.hero.title": "Pobierz OpenCode", "download.hero.title": "Pobierz OpenCode Desktop",
"download.hero.subtitle": "Dostępne w wersji Beta na macOS, Windows i Linux", "download.hero.subtitle": "Dostępne w wersji Beta na macOS, Windows i Linux",
"download.hero.button": "Pobierz na {{os}}", "download.hero.button": "Pobierz na {{os}}",
"download.section.terminal": "Terminal OpenCode", "download.section.terminal": "Terminal OpenCode",
"download.section.desktop": "Pulpit OpenCode (Beta)", "download.section.desktop": "Pulpit OpenCode",
"download.section.extensions": "Rozszerzenia OpenCode", "download.section.extensions": "Rozszerzenia OpenCode",
"download.section.integrations": "Integracje OpenCode", "download.section.integrations": "Integracje OpenCode",
"download.action.download": "Pobierz", "download.action.download": "Pobierz",
+8 -4
View File
@@ -102,10 +102,14 @@ export const dict = {
"temp.logoDarkAlt": "темный логотип opencode", "temp.logoDarkAlt": "темный логотип opencode",
"home.banner.badge": "Новое", "home.banner.badge": "Новое",
"home.banner.text": "Доступно десктопное приложение (бета)", "home.banner.text": "Представляем вкладки в десктопном приложении.",
"home.banner.platforms": "на macOS, Windows и Linux", "home.banner.platforms": "Доступно на macOS, Windows и Linux",
"home.banner.downloadNow": "Скачать", "home.banner.downloadNow": "Скачать",
"home.banner.downloadBetaNow": "Скачать бету для десктопа", "home.banner.downloadBetaNow": "Скачать бету для десктопа",
"home.promo.title": "Представляем вкладки в десктопном приложении",
"home.promo.body": "Организуйте работу и активные сессии с помощью вкладок.",
"home.promo.cta": "Скачайте последнюю версию, чтобы начать.",
"home.promo.close": "Закрыть объявление о десктопном приложении",
"home.hero.title": "AI-агент с открытым кодом для программирования", "home.hero.title": "AI-агент с открытым кодом для программирования",
"home.hero.subtitle.a": "Бесплатные модели включены, или подключите любую модель от любого провайдера,", "home.hero.subtitle.a": "Бесплатные модели включены, или подключите любую модель от любого провайдера,",
@@ -716,11 +720,11 @@ export const dict = {
"download.title": "OpenCode | Скачать", "download.title": "OpenCode | Скачать",
"download.meta.description": "Скачать OpenCode для macOS, Windows и Linux", "download.meta.description": "Скачать OpenCode для macOS, Windows и Linux",
"download.hero.title": "Скачать OpenCode", "download.hero.title": "Скачать OpenCode Desktop",
"download.hero.subtitle": "Доступна бета для macOS, Windows и Linux", "download.hero.subtitle": "Доступна бета для macOS, Windows и Linux",
"download.hero.button": "Скачать для {{os}}", "download.hero.button": "Скачать для {{os}}",
"download.section.terminal": "OpenCode Terminal", "download.section.terminal": "OpenCode Terminal",
"download.section.desktop": "OpenCode Desktop (Beta)", "download.section.desktop": "OpenCode Desktop",
"download.section.extensions": "Расширения OpenCode", "download.section.extensions": "Расширения OpenCode",
"download.section.integrations": "Интеграции OpenCode", "download.section.integrations": "Интеграции OpenCode",
"download.action.download": "Скачать", "download.action.download": "Скачать",
+8 -4
View File
@@ -102,10 +102,14 @@ export const dict = {
"temp.logoDarkAlt": "โลโก้ opencode แบบมืด", "temp.logoDarkAlt": "โลโก้ opencode แบบมืด",
"home.banner.badge": "ใหม่", "home.banner.badge": "ใหม่",
"home.banner.text": "แอปเดสก์ท็อปพร้อมใช้งานในเวอร์ชันเบต้า", "home.banner.text": "ขอแนะนำแท็บสำหรับเดสก์ท็อป.",
"home.banner.platforms": "บน macOS, Windows และ Linux", "home.banner.platforms": "พร้อมใช้งานบน macOS, Windows และ Linux",
"home.banner.downloadNow": "ดาวน์โหลดตอนนี้", "home.banner.downloadNow": "ดาวน์โหลดตอนนี้",
"home.banner.downloadBetaNow": "ดาวน์โหลดเบต้าเดสก์ท็อปตอนนี้", "home.banner.downloadBetaNow": "ดาวน์โหลดเบต้าเดสก์ท็อปตอนนี้",
"home.promo.title": "ขอแนะนำแท็บสำหรับเดสก์ท็อป",
"home.promo.body": "จัดระเบียบงานและเซสชันที่ใช้งานอยู่ด้วยแท็บ",
"home.promo.cta": "ดาวน์โหลดเวอร์ชันล่าสุดเพื่อเริ่มต้นใช้งาน",
"home.promo.close": "ปิดประกาศเกี่ยวกับแอปเดสก์ท็อป",
"home.hero.title": "เอเจนต์เขียนโค้ดด้วย AI แบบโอเพนซอร์ส", "home.hero.title": "เอเจนต์เขียนโค้ดด้วย AI แบบโอเพนซอร์ส",
"home.hero.subtitle.a": "มีโมเดลฟรีรวมอยู่ หรือเชื่อมต่อโมเดลใดก็ได้จากผู้ให้บริการรายใดก็ได้,", "home.hero.subtitle.a": "มีโมเดลฟรีรวมอยู่ หรือเชื่อมต่อโมเดลใดก็ได้จากผู้ให้บริการรายใดก็ได้,",
@@ -703,11 +707,11 @@ export const dict = {
"download.title": "OpenCode | ดาวน์โหลด", "download.title": "OpenCode | ดาวน์โหลด",
"download.meta.description": "ดาวน์โหลด OpenCode สำหรับ macOS, Windows และ Linux", "download.meta.description": "ดาวน์โหลด OpenCode สำหรับ macOS, Windows และ Linux",
"download.hero.title": "ดาวน์โหลด OpenCode", "download.hero.title": "ดาวน์โหลด OpenCode สำหรับเดสก์ท็อป",
"download.hero.subtitle": "พร้อมใช้งานในเวอร์ชันเบต้าสำหรับ macOS, Windows และ Linux", "download.hero.subtitle": "พร้อมใช้งานในเวอร์ชันเบต้าสำหรับ macOS, Windows และ Linux",
"download.hero.button": "ดาวน์โหลดสำหรับ {{os}}", "download.hero.button": "ดาวน์โหลดสำหรับ {{os}}",
"download.section.terminal": "OpenCode Terminal", "download.section.terminal": "OpenCode Terminal",
"download.section.desktop": "OpenCode Desktop (Beta)", "download.section.desktop": "OpenCode Desktop",
"download.section.extensions": "ส่วนขยาย OpenCode", "download.section.extensions": "ส่วนขยาย OpenCode",
"download.section.integrations": "การเชื่อมต่อ OpenCode", "download.section.integrations": "การเชื่อมต่อ OpenCode",
"download.action.download": "ดาวน์โหลด", "download.action.download": "ดาวน์โหลด",
+8 -4
View File
@@ -102,10 +102,14 @@ export const dict = {
"temp.logoDarkAlt": "opencode koyu logo", "temp.logoDarkAlt": "opencode koyu logo",
"home.banner.badge": "Yeni", "home.banner.badge": "Yeni",
"home.banner.text": "Masaüstü uygulaması beta olarak mevcut", "home.banner.text": "Masaüstü uygulamasında sekmelerle tanışın.",
"home.banner.platforms": "macOS, Windows ve Linux'ta", "home.banner.platforms": "macOS, Windows ve Linux'ta kullanılabilir",
"home.banner.downloadNow": "Şimdi indir", "home.banner.downloadNow": "Şimdi indir",
"home.banner.downloadBetaNow": "Masaüstü betayı şimdi indir", "home.banner.downloadBetaNow": "Masaüstü betayı şimdi indir",
"home.promo.title": "Masaüstü uygulamasında sekmelerle tanışın",
"home.promo.body": "Çalışmalarınızı ve etkin oturumlarınızı sekmelerle düzenleyin.",
"home.promo.cta": "Başlamak için en son sürümü indirin.",
"home.promo.close": "Masaüstü uygulaması duyurusunu kapat",
"home.hero.title": "Açık kaynaklı yapay zeka kodlama ajanı", "home.hero.title": "Açık kaynaklı yapay zeka kodlama ajanı",
"home.hero.subtitle.a": "Ücretsiz modeller dahil veya herhangi bir sağlayıcıdan herhangi bir modeli bağlayın,", "home.hero.subtitle.a": "Ücretsiz modeller dahil veya herhangi bir sağlayıcıdan herhangi bir modeli bağlayın,",
@@ -711,11 +715,11 @@ export const dict = {
"download.title": "OpenCode | İndir", "download.title": "OpenCode | İndir",
"download.meta.description": "OpenCode'u macOS, Windows ve Linux için indirin", "download.meta.description": "OpenCode'u macOS, Windows ve Linux için indirin",
"download.hero.title": "OpenCode'u İndir", "download.hero.title": "OpenCode Desktop'u İndir",
"download.hero.subtitle": "macOS, Windows ve Linux için Beta olarak sunuluyor", "download.hero.subtitle": "macOS, Windows ve Linux için Beta olarak sunuluyor",
"download.hero.button": "{{os}} için indir", "download.hero.button": "{{os}} için indir",
"download.section.terminal": "OpenCode Terminal", "download.section.terminal": "OpenCode Terminal",
"download.section.desktop": "OpenCode Desktop (Beta)", "download.section.desktop": "OpenCode Desktop",
"download.section.extensions": "OpenCode Eklentileri", "download.section.extensions": "OpenCode Eklentileri",
"download.section.integrations": "OpenCode Entegrasyonları", "download.section.integrations": "OpenCode Entegrasyonları",
"download.action.download": "İndir", "download.action.download": "İndir",
+8 -4
View File
@@ -102,10 +102,14 @@ export const dict = {
"temp.logoDarkAlt": "темний логотип opencode", "temp.logoDarkAlt": "темний логотип opencode",
"home.banner.badge": "Нове", "home.banner.badge": "Нове",
"home.banner.text": "Десктопний застосунок доступний у бета-версії", "home.banner.text": "Представляємо вкладки в десктопному застосунку.",
"home.banner.platforms": "на macOS, Windows та Linux", "home.banner.platforms": "Доступно на macOS, Windows та Linux",
"home.banner.downloadNow": "Завантажити зараз", "home.banner.downloadNow": "Завантажити зараз",
"home.banner.downloadBetaNow": "Завантажити бета-версію десктопного застосунку", "home.banner.downloadBetaNow": "Завантажити бета-версію десктопного застосунку",
"home.promo.title": "Представляємо вкладки в десктопному застосунку",
"home.promo.body": "Упорядковуйте роботу й активні сесії за допомогою вкладок.",
"home.promo.cta": "Завантажте останню версію, щоб почати.",
"home.promo.close": "Закрити оголошення про десктопний застосунок",
"home.hero.title": "Відкритий AI-агент для кодування", "home.hero.title": "Відкритий AI-агент для кодування",
"home.hero.subtitle.a": "Безкоштовні моделі включено або підключіть будь-яку модель від будь-якого провайдера,", "home.hero.subtitle.a": "Безкоштовні моделі включено або підключіть будь-яку модель від будь-якого провайдера,",
@@ -670,11 +674,11 @@ export const dict = {
"download.title": "OpenCode | Завантажити", "download.title": "OpenCode | Завантажити",
"download.meta.description": "Завантажте OpenCode для macOS, Windows та Linux", "download.meta.description": "Завантажте OpenCode для macOS, Windows та Linux",
"download.hero.title": "Завантажити OpenCode", "download.hero.title": "Завантажити OpenCode Desktop",
"download.hero.subtitle": "Доступно в бета-версії для macOS, Windows та Linux", "download.hero.subtitle": "Доступно в бета-версії для macOS, Windows та Linux",
"download.hero.button": "Завантажити для {{os}}", "download.hero.button": "Завантажити для {{os}}",
"download.section.terminal": "Термінал OpenCode", "download.section.terminal": "Термінал OpenCode",
"download.section.desktop": "Десктоп OpenCode (Бета)", "download.section.desktop": "Десктоп OpenCode",
"download.section.extensions": "Розширення OpenCode", "download.section.extensions": "Розширення OpenCode",
"download.section.integrations": "Інтеграції OpenCode", "download.section.integrations": "Інтеграції OpenCode",
"download.action.download": "Завантажити", "download.action.download": "Завантажити",
+8 -4
View File
@@ -103,10 +103,14 @@ export const dict = {
"temp.logoDarkAlt": "opencode logo 暗色", "temp.logoDarkAlt": "opencode logo 暗色",
"home.banner.badge": "新", "home.banner.badge": "新",
"home.banner.text": "桌面应用 Beta 版现已推出", "home.banner.text": "桌面版标签页现已推出",
"home.banner.platforms": "支持 macOS, Windows, 和 Linux", "home.banner.platforms": "适用于 macOSWindows 和 Linux",
"home.banner.downloadNow": "立即下载", "home.banner.downloadNow": "立即下载",
"home.banner.downloadBetaNow": "立即下载桌面 Beta 版", "home.banner.downloadBetaNow": "立即下载桌面 Beta 版",
"home.promo.title": "桌面版标签页现已推出",
"home.promo.body": "使用标签页整理工作和活跃会话。",
"home.promo.cta": "下载最新版本即可开始使用。",
"home.promo.close": "关闭桌面应用公告",
"home.hero.title": "开源 AI 编程代理", "home.hero.title": "开源 AI 编程代理",
"home.hero.subtitle.a": "内置免费模型,或连接任意提供商的任意模型,", "home.hero.subtitle.a": "内置免费模型,或连接任意提供商的任意模型,",
@@ -682,11 +686,11 @@ export const dict = {
"download.title": "OpenCode | 下载", "download.title": "OpenCode | 下载",
"download.meta.description": "下载适用于 macOS, Windows, 和 Linux 的 OpenCode", "download.meta.description": "下载适用于 macOS, Windows, 和 Linux 的 OpenCode",
"download.hero.title": "下载 OpenCode", "download.hero.title": "下载 OpenCode 桌面版",
"download.hero.subtitle": "适用于 macOS, Windows, 和 Linux 的 Beta 版", "download.hero.subtitle": "适用于 macOS, Windows, 和 Linux 的 Beta 版",
"download.hero.button": "下载 {{os}} 版", "download.hero.button": "下载 {{os}} 版",
"download.section.terminal": "OpenCode 终端", "download.section.terminal": "OpenCode 终端",
"download.section.desktop": "OpenCode 桌面版 (Beta)", "download.section.desktop": "OpenCode 桌面版",
"download.section.extensions": "OpenCode 扩展", "download.section.extensions": "OpenCode 扩展",
"download.section.integrations": "OpenCode 集成", "download.section.integrations": "OpenCode 集成",
"download.action.download": "下载", "download.action.download": "下载",
+8 -4
View File
@@ -103,10 +103,14 @@ export const dict = {
"temp.logoDarkAlt": "opencode 深色標誌", "temp.logoDarkAlt": "opencode 深色標誌",
"home.banner.badge": "新", "home.banner.badge": "新",
"home.banner.text": "桌面應用已推出 Beta", "home.banner.text": "桌面版分頁功能全新推出。",
"home.banner.platforms": "支援 macOS、Windows 與 Linux", "home.banner.platforms": "適用於 macOS、Windows 與 Linux",
"home.banner.downloadNow": "立即下載", "home.banner.downloadNow": "立即下載",
"home.banner.downloadBetaNow": "立即下載桌面 Beta 版", "home.banner.downloadBetaNow": "立即下載桌面 Beta 版",
"home.promo.title": "桌面版分頁功能全新推出",
"home.promo.body": "使用分頁整理工作和作用中的工作階段。",
"home.promo.cta": "下載最新版本即可開始使用。",
"home.promo.close": "關閉桌面應用程式公告",
"home.hero.title": "開源 AI 編碼代理", "home.hero.title": "開源 AI 編碼代理",
"home.hero.subtitle.a": "內建免費模型,或連接任意供應商的任意模型,", "home.hero.subtitle.a": "內建免費模型,或連接任意供應商的任意模型,",
@@ -682,11 +686,11 @@ export const dict = {
"download.title": "OpenCode | 下載", "download.title": "OpenCode | 下載",
"download.meta.description": "下載適用於 macOS、Windows 與 Linux 的 OpenCode", "download.meta.description": "下載適用於 macOS、Windows 與 Linux 的 OpenCode",
"download.hero.title": "下載 OpenCode", "download.hero.title": "下載 OpenCode 桌面版",
"download.hero.subtitle": "適用於 macOS、Windows 與 Linux 的 Beta 版現已提供", "download.hero.subtitle": "適用於 macOS、Windows 與 Linux 的 Beta 版現已提供",
"download.hero.button": "下載 {{os}} 版", "download.hero.button": "下載 {{os}} 版",
"download.section.terminal": "OpenCode 終端", "download.section.terminal": "OpenCode 終端",
"download.section.desktop": "OpenCode 桌面版Beta", "download.section.desktop": "OpenCode 桌面版",
"download.section.extensions": "OpenCode 擴充功能", "download.section.extensions": "OpenCode 擴充功能",
"download.section.integrations": "OpenCode 整合", "download.section.integrations": "OpenCode 整合",
"download.action.download": "下載", "download.action.download": "下載",
@@ -284,7 +284,7 @@
} }
[data-component="content"] { [data-component="content"] {
padding: 6rem 5rem; padding: 3rem 5rem 6rem;
@media (max-width: 60rem) { @media (max-width: 60rem) {
padding: 4rem 1.5rem; padding: 4rem 1.5rem;
@@ -316,67 +316,43 @@
/* Download Hero Section */ /* Download Hero Section */
[data-component="download-hero"] { [data-component="download-hero"] {
/* display: grid; */ display: grid;
display: none; grid-template-columns: 255px 1fr;
grid-template-columns: 260px 1fr;
gap: 4rem; gap: 4rem;
padding-bottom: 2rem; padding: 4px;
border: 1px solid var(--color-border-weak);
border-radius: 8px;
margin-bottom: 4rem; margin-bottom: 4rem;
@media (max-width: 50rem) { @media (max-width: 50rem) {
grid-template-columns: 1fr; grid-template-columns: 1fr;
gap: 1.5rem; gap: 0;
padding-bottom: 2rem;
margin-bottom: 2rem; margin-bottom: 2rem;
} }
[data-component="hero-icon"] { [data-component="hero-video"] {
display: flex; video {
justify-content: flex-end; display: block;
align-items: center; width: 100%;
aspect-ratio: 1;
@media (max-width: 40rem) { object-fit: cover;
display: none; border-radius: 4px;
}
[data-slot="icon-placeholder"] {
width: 120px;
height: 120px;
background: var(--color-background-weak);
border: 1px solid var(--color-border-weak);
border-radius: 24px;
@media (max-width: 50rem) { @media (max-width: 50rem) {
width: 80px; aspect-ratio: 16 / 9;
height: 80px;
} }
} }
img {
width: 120px;
height: 120px;
border-radius: 24px;
box-shadow:
0 1.467px 2.847px 0 rgba(0, 0, 0, 0.42),
0 0.779px 1.512px 0 rgba(0, 0, 0, 0.34),
0 0.324px 0.629px 0 rgba(0, 0, 0, 0.24);
@media (max-width: 50rem) {
width: 80px;
height: 80px;
border-radius: 16px;
}
}
@media (max-width: 50rem) {
justify-content: flex-start;
}
} }
[data-component="hero-text"] { [data-component="hero-text"] {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
justify-content: center; justify-content: center;
padding-right: 3rem;
@media (max-width: 50rem) {
padding: 1.5rem;
}
h1 { h1 {
font-size: 1.5rem; font-size: 1.5rem;
@@ -11,7 +11,7 @@ import { LocaleLinks } from "~/component/locale-links"
import { config } from "~/config" import { config } from "~/config"
import { useI18n } from "~/context/i18n" import { useI18n } from "~/context/i18n"
import { useLanguage } from "~/context/language" import { useLanguage } from "~/context/language"
import desktopAppIcon from "../../asset/lander/opencode-desktop-icon.png" import desktopTabsVideo from "../../asset/lander/desktop-tabs-landscape.mp4"
import type { DownloadPlatform } from "./types" import type { DownloadPlatform } from "./types"
type OS = "macOS" | "Windows" | "Linux" | null type OS = "macOS" | "Windows" | "Linux" | null
@@ -93,12 +93,14 @@ export default function Download() {
<div data-component="content"> <div data-component="content">
<section data-component="download-hero"> <section data-component="download-hero">
<div data-component="hero-icon"> <div data-component="hero-video">
<img src={desktopAppIcon} alt="" /> <video src={desktopTabsVideo} autoplay playsinline loop muted preload="metadata" aria-hidden="true" />
</div> </div>
<div data-component="hero-text"> <div data-component="hero-text">
<h1>{i18n.t("download.hero.title")}</h1> <h1>{i18n.t("download.hero.title")}</h1>
<p>{i18n.t("download.hero.subtitle")}</p> <p>
{i18n.t("home.promo.body")} {i18n.t("home.promo.cta")}
</p>
<Show when={detectedOS()}> <Show when={detectedOS()}>
<a <a
href={language.route(getDownloadHref(getDownloadPlatform(detectedOS())))} href={language.route(getDownloadHref(getDownloadPlatform(detectedOS())))}
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"$schema": "https://json.schemastore.org/package.json", "$schema": "https://json.schemastore.org/package.json",
"name": "@opencode-ai/console-core", "name": "@opencode-ai/console-core",
"version": "1.17.20", "version": "1.18.2",
"private": true, "private": true,
"type": "module", "type": "module",
"license": "MIT", "license": "MIT",
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "@opencode-ai/console-function", "name": "@opencode-ai/console-function",
"version": "1.17.20", "version": "1.18.2",
"$schema": "https://json.schemastore.org/package.json", "$schema": "https://json.schemastore.org/package.json",
"private": true, "private": true,
"type": "module", "type": "module",
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "@opencode-ai/console-mail", "name": "@opencode-ai/console-mail",
"version": "1.17.20", "version": "1.18.2",
"dependencies": { "dependencies": {
"@jsx-email/all": "2.2.3", "@jsx-email/all": "2.2.3",
"@jsx-email/cli": "1.4.3", "@jsx-email/cli": "1.4.3",
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "@opencode-ai/console-support", "name": "@opencode-ai/console-support",
"version": "1.17.20", "version": "1.18.2",
"type": "module", "type": "module",
"license": "MIT", "license": "MIT",
"scripts": { "scripts": {
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"$schema": "https://json.schemastore.org/package.json", "$schema": "https://json.schemastore.org/package.json",
"version": "1.17.20", "version": "1.18.2",
"name": "@opencode-ai/core", "name": "@opencode-ai/core",
"type": "module", "type": "module",
"license": "MIT", "license": "MIT",
+8 -1
View File
@@ -116,7 +116,14 @@ export namespace FSUtil {
}) })
const ensureDir = Effect.fn("FileSystem.ensureDir")(function* (path: string) { const ensureDir = Effect.fn("FileSystem.ensureDir")(function* (path: string) {
yield* fs.makeDirectory(path, { recursive: true }) yield* fs.makeDirectory(path, { recursive: true }).pipe(
// Bun on Windows can throw EEXIST here despite recursive mode.
// https://github.com/oven-sh/bun/issues/21901
Effect.catchIf(
(error) => error.reason._tag === "AlreadyExists",
(error) => isDir(path).pipe(Effect.flatMap((exists) => (exists ? Effect.void : Effect.fail(error)))),
),
)
}) })
const writeWithDirs = Effect.fn("FileSystem.writeWithDirs")(function* ( const writeWithDirs = Effect.fn("FileSystem.writeWithDirs")(function* (
+3
View File
@@ -80,6 +80,9 @@ export const Info = Schema.Struct({
description: description:
"Default agent to use when none is specified. Must be a primary agent. Falls back to 'build' if not set or if the specified agent is invalid.", "Default agent to use when none is specified. Must be a primary agent. Falls back to 'build' if not set or if the specified agent is invalid.",
}), }),
subagent_depth: Schema.optional(NonNegativeInt).annotate({
description: "Maximum subagent nesting depth. Defaults to 1, which prevents subagents from launching subagents.",
}),
username: Schema.optional(Schema.String).annotate({ username: Schema.optional(Schema.String).annotate({
description: "Custom username to display in conversations instead of system username", description: "Custom username to display in conversations instead of system username",
}), }),
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"name": "@opencode-ai/desktop", "name": "@opencode-ai/desktop",
"private": true, "private": true,
"version": "1.17.20", "version": "1.18.2",
"type": "module", "type": "module",
"license": "MIT", "license": "MIT",
"homepage": "https://opencode.ai", "homepage": "https://opencode.ai",
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"$schema": "https://json.schemastore.org/package.json", "$schema": "https://json.schemastore.org/package.json",
"version": "1.17.20", "version": "1.18.2",
"name": "@opencode-ai/effect-drizzle-sqlite", "name": "@opencode-ai/effect-drizzle-sqlite",
"type": "module", "type": "module",
"license": "MIT", "license": "MIT",
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"$schema": "https://json.schemastore.org/package.json", "$schema": "https://json.schemastore.org/package.json",
"version": "1.17.20", "version": "1.18.2",
"name": "@opencode-ai/effect-sqlite-node", "name": "@opencode-ai/effect-sqlite-node",
"type": "module", "type": "module",
"license": "MIT", "license": "MIT",
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "@opencode-ai/enterprise", "name": "@opencode-ai/enterprise",
"version": "1.17.20", "version": "1.18.2",
"private": true, "private": true,
"type": "module", "type": "module",
"license": "MIT", "license": "MIT",
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "@opencode-ai/function", "name": "@opencode-ai/function",
"version": "1.17.20", "version": "1.18.2",
"$schema": "https://json.schemastore.org/package.json", "$schema": "https://json.schemastore.org/package.json",
"private": true, "private": true,
"type": "module", "type": "module",
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"$schema": "https://json.schemastore.org/package.json", "$schema": "https://json.schemastore.org/package.json",
"version": "1.17.20", "version": "1.18.2",
"name": "@opencode-ai/http-recorder", "name": "@opencode-ai/http-recorder",
"description": "Record and replay Effect HTTP and WebSocket traffic with deterministic cassettes", "description": "Record and replay Effect HTTP and WebSocket traffic with deterministic cassettes",
"type": "module", "type": "module",
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"$schema": "https://json.schemastore.org/package.json", "$schema": "https://json.schemastore.org/package.json",
"version": "1.17.20", "version": "1.18.2",
"name": "opencode", "name": "opencode",
"type": "module", "type": "module",
"license": "MIT", "license": "MIT",
+1 -1
View File
@@ -1152,7 +1152,7 @@ export function options(input: {
} }
if (input.model.providerID === "meta" && input.model.api.npm === "@ai-sdk/openai") { if (input.model.providerID === "meta" && input.model.api.npm === "@ai-sdk/openai") {
result["reasoningEffort"] = "high" result["reasoningEffort"] = "xhigh"
result["reasoningSummary"] = "auto" result["reasoningSummary"] = "auto"
result["include"] = INCLUDE_ENCRYPTED_REASONING result["include"] = INCLUDE_ENCRYPTED_REASONING
} }
+15 -1
View File
@@ -91,6 +91,21 @@ export const TaskTool = Tool.define(
const cfg = yield* config.get() const cfg = yield* config.get()
const runInBackground = params.background === true const runInBackground = params.background === true
const parent = yield* sessions.get(ctx.sessionID)
let current = parent
let depth = 0
while (current.parentID) {
depth++
current = yield* sessions.get(current.parentID)
}
if (depth >= (cfg.subagent_depth ?? 1)) {
return yield* Effect.fail(
new Error(
`Subagent depth limit reached (${cfg.subagent_depth ?? 1}). Increase "subagent_depth" to allow nested subagents.`,
),
)
}
if (!ctx.extra?.bypassAgentCheck) { if (!ctx.extra?.bypassAgentCheck) {
yield* ctx.ask({ yield* ctx.ask({
permission: id, permission: id,
@@ -111,7 +126,6 @@ export const TaskTool = Tool.define(
const session = params.task_id const session = params.task_id
? yield* sessions.get(SessionID.make(params.task_id)).pipe(Effect.catchCause(() => Effect.succeed(undefined))) ? yield* sessions.get(SessionID.make(params.task_id)).pipe(Effect.catchCause(() => Effect.succeed(undefined)))
: undefined : undefined
const parent = yield* sessions.get(ctx.sessionID)
const childPermission = deriveSubagentSessionPermission({ const childPermission = deriveSubagentSessionPermission({
parentSessionPermission: parent.permission ?? [], parentSessionPermission: parent.permission ?? [],
subagent: next, subagent: next,
+80
View File
@@ -387,6 +387,86 @@ describe("tool.task", () => {
}), }),
) )
it.instance("prevents subagents from launching subagents by default", () =>
Effect.gen(function* () {
const sessions = yield* Session.Service
const { chat, assistant } = yield* seed()
const child = yield* sessions.create({ parentID: chat.id, title: "child" })
const nestedAssistant = yield* sessions.updateMessage({
...assistant,
id: MessageID.ascending(),
parentID: MessageID.ascending(),
sessionID: child.id,
})
const tool = yield* TaskTool
const def = yield* tool.init()
let asked = false
const exit = yield* def
.execute(
{
description: "inspect bug",
prompt: "look into the cache key path",
subagent_type: "general",
},
{
sessionID: child.id,
messageID: nestedAssistant.id,
agent: "general",
abort: new AbortController().signal,
extra: { promptOps: stubOps() },
messages: [],
metadata: () => Effect.void,
ask: () => Effect.sync(() => (asked = true)),
},
)
.pipe(Effect.exit)
expect(Exit.isFailure(exit)).toBe(true)
expect(asked).toBe(false)
expect(yield* sessions.children(child.id)).toHaveLength(0)
}),
)
it.instance(
"allows nested subagents up to the configured depth",
() =>
Effect.gen(function* () {
const sessions = yield* Session.Service
const { chat, assistant } = yield* seed()
const child = yield* sessions.create({ parentID: chat.id, title: "child" })
const nestedAssistant = yield* sessions.updateMessage({
...assistant,
id: MessageID.ascending(),
parentID: MessageID.ascending(),
sessionID: child.id,
})
const tool = yield* TaskTool
const def = yield* tool.init()
const result = yield* def.execute(
{
description: "inspect bug",
prompt: "look into the cache key path",
subagent_type: "general",
},
{
sessionID: child.id,
messageID: nestedAssistant.id,
agent: "general",
abort: new AbortController().signal,
extra: { promptOps: stubOps() },
messages: [],
metadata: () => Effect.void,
ask: () => Effect.void,
},
)
expect((yield* sessions.get(result.metadata.sessionId)).parentID).toBe(child.id)
}),
{ config: { subagent_depth: 2 } },
)
it.instance( it.instance(
"execute shapes child permissions for task and primary tools", "execute shapes child permissions for task and primary tools",
() => () =>
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"$schema": "https://json.schemastore.org/package.json", "$schema": "https://json.schemastore.org/package.json",
"name": "@opencode-ai/plugin", "name": "@opencode-ai/plugin",
"version": "1.17.20", "version": "1.18.2",
"type": "module", "type": "module",
"license": "MIT", "license": "MIT",
"scripts": { "scripts": {
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"$schema": "https://json.schemastore.org/package.json", "$schema": "https://json.schemastore.org/package.json",
"name": "@opencode-ai/sdk", "name": "@opencode-ai/sdk",
"version": "1.17.20", "version": "1.18.2",
"type": "module", "type": "module",
"license": "MIT", "license": "MIT",
"scripts": { "scripts": {
+1
View File
@@ -1998,6 +1998,7 @@ export type Config = {
model?: string model?: string
small_model?: string small_model?: string
default_agent?: string default_agent?: string
subagent_depth?: number
username?: string username?: string
mode?: { mode?: {
build?: AgentConfig build?: AgentConfig
+4
View File
@@ -21122,6 +21122,10 @@
"default_agent": { "default_agent": {
"type": "string" "type": "string"
}, },
"subagent_depth": {
"type": "integer",
"minimum": 0
},
"username": { "username": {
"type": "string" "type": "string"
}, },
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"$schema": "https://json.schemastore.org/package.json", "$schema": "https://json.schemastore.org/package.json",
"name": "@opencode-ai/server", "name": "@opencode-ai/server",
"version": "1.17.20", "version": "1.18.2",
"private": true, "private": true,
"type": "module", "type": "module",
"license": "MIT", "license": "MIT",
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "@opencode-ai/session-ui", "name": "@opencode-ai/session-ui",
"version": "1.17.20", "version": "1.18.2",
"private": true, "private": true,
"type": "module", "type": "module",
"license": "MIT", "license": "MIT",
+1 -4
View File
@@ -16,10 +16,7 @@ export type DiffProps<T = {}> = FileDiffOptions<T> & {
const unsafeCSS = ` const unsafeCSS = `
:host { :host {
--diffs-bg: var( --diffs-bg: var(--opencode-diffs-bg, var(--color-background-stronger));
--opencode-diffs-bg,
light-dark(var(--diffs-light-bg, #fff), var(--diffs-dark-bg, #000))
);
} }
[data-diff], [data-diff],
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "@opencode-ai/slack", "name": "@opencode-ai/slack",
"version": "1.17.20", "version": "1.18.2",
"type": "module", "type": "module",
"license": "MIT", "license": "MIT",
"scripts": { "scripts": {
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"$schema": "https://json.schemastore.org/package.json", "$schema": "https://json.schemastore.org/package.json",
"name": "@opencode-ai/stats-app", "name": "@opencode-ai/stats-app",
"version": "1.17.20", "version": "1.18.2",
"private": true, "private": true,
"type": "module", "type": "module",
"license": "MIT", "license": "MIT",
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"$schema": "https://json.schemastore.org/package.json", "$schema": "https://json.schemastore.org/package.json",
"name": "@opencode-ai/stats-core", "name": "@opencode-ai/stats-core",
"version": "1.17.20", "version": "1.18.2",
"private": true, "private": true,
"type": "module", "type": "module",
"license": "MIT", "license": "MIT",
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"$schema": "https://json.schemastore.org/package.json", "$schema": "https://json.schemastore.org/package.json",
"name": "@opencode-ai/stats-server", "name": "@opencode-ai/stats-server",
"version": "1.17.20", "version": "1.18.2",
"private": true, "private": true,
"type": "module", "type": "module",
"license": "MIT", "license": "MIT",
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"$schema": "https://json.schemastore.org/package.json", "$schema": "https://json.schemastore.org/package.json",
"name": "@opencode-ai/tui", "name": "@opencode-ai/tui",
"version": "1.17.20", "version": "1.18.2",
"private": true, "private": true,
"type": "module", "type": "module",
"license": "MIT", "license": "MIT",
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "@opencode-ai/ui", "name": "@opencode-ai/ui",
"version": "1.17.20", "version": "1.18.2",
"type": "module", "type": "module",
"license": "MIT", "license": "MIT",
"repository": { "repository": {
+1 -1
View File
@@ -2,7 +2,7 @@
"name": "@opencode-ai/web", "name": "@opencode-ai/web",
"type": "module", "type": "module",
"license": "MIT", "license": "MIT",
"version": "1.17.20", "version": "1.18.2",
"scripts": { "scripts": {
"dev": "astro dev", "dev": "astro dev",
"dev:remote": "VITE_API_URL=https://api.opencode.ai astro dev", "dev:remote": "VITE_API_URL=https://api.opencode.ai astro dev",
+15
View File
@@ -538,6 +538,21 @@ This setting applies across all interfaces: TUI, CLI (`opencode run`), desktop a
--- ---
### Subagent depth
You can control how deeply subagents can invoke other subagents using the `subagent_depth` option.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"subagent_depth": 2
}
```
The default is `1`, which allows primary agents to launch subagents but prevents those subagents from launching additional subagents. Set it to `2` to allow one additional level of nested subagents, or `0` to prevent all subagent launches.
---
### Sharing ### Sharing
You can configure the [share](/docs/share) feature through the `share` option. You can configure the [share](/docs/share) feature through the `share` option.
+1 -1
View File
@@ -2,7 +2,7 @@
"name": "opencode", "name": "opencode",
"displayName": "opencode", "displayName": "opencode",
"description": "opencode for VS Code", "description": "opencode for VS Code",
"version": "1.17.20", "version": "1.18.2",
"publisher": "sst-dev", "publisher": "sst-dev",
"repository": { "repository": {
"type": "git", "type": "git",