Skip to content

Commit 4cfe8a8

Browse files
author
Ryan Vogel
committed
Merge remote-tracking branch 'origin/dev' into opencode-remote-voice
# Conflicts: # packages/opencode/src/server/routes/instance/experimental.ts # packages/opencode/src/session/processor.ts # packages/opencode/src/session/run-state.ts # packages/opencode/src/session/status.ts
2 parents 754951b + cded68a commit 4cfe8a8

342 files changed

Lines changed: 27656 additions & 24230 deletions

File tree

Some content is hidden

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

.opencode/agent/translator.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -594,7 +594,6 @@ OPENCODE_DISABLE_CLAUDE_CODE
594594
OPENCODE_DISABLE_CLAUDE_CODE_PROMPT
595595
OPENCODE_DISABLE_CLAUDE_CODE_SKILLS
596596
OPENCODE_DISABLE_DEFAULT_PLUGINS
597-
OPENCODE_DISABLE_FILETIME_CHECK
598597
OPENCODE_DISABLE_LSP_DOWNLOAD
599598
OPENCODE_DISABLE_MODELS_FETCH
600599
OPENCODE_DISABLE_PRUNE

.opencode/opencode.jsonc

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
11
{
22
"$schema": "https://opencode.ai/config.json",
3-
"provider": {
4-
"opencode": {
5-
"options": {},
6-
},
7-
},
3+
"provider": {},
84
"permission": {
95
"edit": {
106
"packages/opencode/migration/*": "deny",

AGENTS.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ This file is for coding agents working in `/Users/ryanvogel/dev/opencode`.
1010
- Use Bun APIs when possible, like `Bun.file()`
1111
- Rely on type inference when possible; avoid explicit type annotations or interfaces unless necessary for exports or clarity
1212
- Prefer functional array methods (flatMap, filter, map) over for loops; use type guards on filter to maintain type inference downstream
13+
- In `src/config`, follow the existing self-export pattern at the top of the file (for example `export * as ConfigAgent from "./agent"`) when adding a new config module.
1314

1415
Reduce total variable count by inlining when a value is only used once.
1516

bun.lock

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

nix/hashes.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
{
22
"nodeModules": {
3-
"x86_64-linux": "sha256-NJAK+cPjwn+2ojDLyyDmBQyx2pD+rILetp7VCylgjek=",
4-
"aarch64-linux": "sha256-q8NTtFQJoyM7TTvErGA6RtmUscxoZKD/mj9N6S5YhkA=",
5-
"aarch64-darwin": "sha256-/ccoSZNLef6j9j14HzpVqhKCR+czM3mhPKPH51mHO24=",
6-
"x86_64-darwin": "sha256-6Pd10sMHL/5ZoWNvGPwPn4/AIs1TKjt/3gFyrVpBaE0="
3+
"x86_64-linux": "sha256-GjpBQhvGLTM6NWX29b/mS+KjrQPl0w9VjQHH5jaK9SM=",
4+
"aarch64-linux": "sha256-F5h9p+iZ8CASdUYaYR7O22NwBRa/iT+ZinUxO8lbPTc=",
5+
"aarch64-darwin": "sha256-jWo5yvCtjVKRf9i5XUcTTaLtj2+G6+T1Td2llO/cT5I=",
6+
"x86_64-darwin": "sha256-LzV+5/8P2mkiFHmt+a8zDeJjRbU8z9nssSA4tzv1HxA="
77
}
88
}

nix/node_modules.nix

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ stdenvNoCC.mkDerivation {
5555
--filter './packages/opencode' \
5656
--filter './packages/desktop' \
5757
--filter './packages/app' \
58+
--filter './packages/shared' \
5859
--frozen-lockfile \
5960
--ignore-scripts \
6061
--no-progress

package.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@
3434
"@types/cross-spawn": "6.0.6",
3535
"@octokit/rest": "22.0.0",
3636
"@hono/zod-validator": "0.4.2",
37+
"@opentui/core": "0.1.99",
38+
"@opentui/solid": "0.1.99",
3739
"ulid": "3.0.1",
3840
"@kobalte/core": "0.13.11",
3941
"@types/luxon": "3.7.1",
@@ -51,7 +53,7 @@
5153
"drizzle-kit": "1.0.0-beta.19-d95b7a4",
5254
"drizzle-orm": "1.0.0-beta.19-d95b7a4",
5355
"effect": "4.0.0-beta.48",
54-
"ai": "6.0.158",
56+
"ai": "6.0.168",
5557
"cross-spawn": "7.0.6",
5658
"hono": "4.10.7",
5759
"hono-openapi": "1.1.2",

packages/app/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@opencode-ai/app",
3-
"version": "1.4.6",
3+
"version": "1.4.10",
44
"description": "",
55
"type": "module",
66
"exports": {

packages/app/src/components/session/session-header.tsx

Lines changed: 61 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,15 @@ import { Spinner } from "@opencode-ai/ui/spinner"
88
import { showToast } from "@opencode-ai/ui/toast"
99
import { Tooltip, TooltipKeybind } from "@opencode-ai/ui/tooltip"
1010
import { getFilename } from "@opencode-ai/shared/util/path"
11-
import { createEffect, createMemo, For, Show } from "solid-js"
11+
import { createEffect, createMemo, createSignal, For, onMount, Show } from "solid-js"
1212
import { createStore } from "solid-js/store"
1313
import { Portal } from "solid-js/web"
1414
import { useCommand } from "@/context/command"
1515
import { useLanguage } from "@/context/language"
1616
import { useLayout } from "@/context/layout"
1717
import { usePlatform } from "@/context/platform"
1818
import { useServer } from "@/context/server"
19+
import { useSettings } from "@/context/settings"
1920
import { useSync } from "@/context/sync"
2021
import { useTerminal } from "@/context/terminal"
2122
import { focusTerminalById } from "@/pages/session/helpers"
@@ -134,6 +135,7 @@ export function SessionHeader() {
134135
const server = useServer()
135136
const platform = usePlatform()
136137
const language = useLanguage()
138+
const settings = useSettings()
137139
const sync = useSync()
138140
const terminal = useTerminal()
139141
const { params, view } = useSessionLayout()
@@ -151,6 +153,11 @@ export function SessionHeader() {
151153
})
152154
const hotkey = createMemo(() => command.keybind("file.open"))
153155
const os = createMemo(() => detectOS(platform))
156+
const isDesktopBeta = platform.platform === "desktop" && import.meta.env.VITE_OPENCODE_CHANNEL === "beta"
157+
const search = createMemo(() => !isDesktopBeta || settings.general.showSearch())
158+
const tree = createMemo(() => !isDesktopBeta || settings.general.showFileTree())
159+
const term = createMemo(() => !isDesktopBeta || settings.general.showTerminal())
160+
const status = createMemo(() => !isDesktopBeta || settings.general.showStatus())
154161

155162
const [exists, setExists] = createStore<Partial<Record<OpenApp, boolean>>>({
156163
finder: true,
@@ -262,12 +269,16 @@ export function SessionHeader() {
262269
.catch((err: unknown) => showRequestError(language, err))
263270
}
264271

265-
const centerMount = createMemo(() => document.getElementById("opencode-titlebar-center"))
266-
const rightMount = createMemo(() => document.getElementById("opencode-titlebar-right"))
272+
const [centerMount, setCenterMount] = createSignal<HTMLElement | null>(null)
273+
const [rightMount, setRightMount] = createSignal<HTMLElement | null>(null)
274+
onMount(() => {
275+
setCenterMount(document.getElementById("opencode-titlebar-center"))
276+
setRightMount(document.getElementById("opencode-titlebar-right"))
277+
})
267278

268279
return (
269280
<>
270-
<Show when={centerMount()}>
281+
<Show when={search() && centerMount()}>
271282
{(mount) => (
272283
<Portal mount={mount()}>
273284
<Button
@@ -415,24 +426,28 @@ export function SessionHeader() {
415426
</div>
416427
</Show>
417428
<div class="flex items-center gap-1">
418-
<Tooltip placement="bottom" value={language.t("status.popover.trigger")}>
419-
<StatusPopover />
420-
</Tooltip>
421-
<TooltipKeybind
422-
title={language.t("command.terminal.toggle")}
423-
keybind={command.keybind("terminal.toggle")}
424-
>
425-
<Button
426-
variant="ghost"
427-
class="group/terminal-toggle titlebar-icon w-8 h-6 p-0 box-border shrink-0"
428-
onClick={toggleTerminal}
429-
aria-label={language.t("command.terminal.toggle")}
430-
aria-expanded={view().terminal.opened()}
431-
aria-controls="terminal-panel"
429+
<Show when={status()}>
430+
<Tooltip placement="bottom" value={language.t("status.popover.trigger")}>
431+
<StatusPopover />
432+
</Tooltip>
433+
</Show>
434+
<Show when={term()}>
435+
<TooltipKeybind
436+
title={language.t("command.terminal.toggle")}
437+
keybind={command.keybind("terminal.toggle")}
432438
>
433-
<Icon size="small" name={view().terminal.opened() ? "terminal-active" : "terminal"} />
434-
</Button>
435-
</TooltipKeybind>
439+
<Button
440+
variant="ghost"
441+
class="group/terminal-toggle titlebar-icon w-8 h-6 p-0 box-border shrink-0"
442+
onClick={toggleTerminal}
443+
aria-label={language.t("command.terminal.toggle")}
444+
aria-expanded={view().terminal.opened()}
445+
aria-controls="terminal-panel"
446+
>
447+
<Icon size="small" name={view().terminal.opened() ? "terminal-active" : "terminal"} />
448+
</Button>
449+
</TooltipKeybind>
450+
</Show>
436451

437452
<div class="hidden md:flex items-center gap-1 shrink-0">
438453
<TooltipKeybind
@@ -451,30 +466,32 @@ export function SessionHeader() {
451466
</Button>
452467
</TooltipKeybind>
453468

454-
<TooltipKeybind
455-
title={language.t("command.fileTree.toggle")}
456-
keybind={command.keybind("fileTree.toggle")}
457-
>
458-
<Button
459-
variant="ghost"
460-
class="titlebar-icon w-8 h-6 p-0 box-border"
461-
onClick={() => layout.fileTree.toggle()}
462-
aria-label={language.t("command.fileTree.toggle")}
463-
aria-expanded={layout.fileTree.opened()}
464-
aria-controls="file-tree-panel"
469+
<Show when={tree()}>
470+
<TooltipKeybind
471+
title={language.t("command.fileTree.toggle")}
472+
keybind={command.keybind("fileTree.toggle")}
465473
>
466-
<div class="relative flex items-center justify-center size-4">
467-
<Icon
468-
size="small"
469-
name={layout.fileTree.opened() ? "file-tree-active" : "file-tree"}
470-
classList={{
471-
"text-icon-strong": layout.fileTree.opened(),
472-
"text-icon-weak": !layout.fileTree.opened(),
473-
}}
474-
/>
475-
</div>
476-
</Button>
477-
</TooltipKeybind>
474+
<Button
475+
variant="ghost"
476+
class="titlebar-icon w-8 h-6 p-0 box-border"
477+
onClick={() => layout.fileTree.toggle()}
478+
aria-label={language.t("command.fileTree.toggle")}
479+
aria-expanded={layout.fileTree.opened()}
480+
aria-controls="file-tree-panel"
481+
>
482+
<div class="relative flex items-center justify-center size-4">
483+
<Icon
484+
size="small"
485+
name={layout.fileTree.opened() ? "file-tree-active" : "file-tree"}
486+
classList={{
487+
"text-icon-strong": layout.fileTree.opened(),
488+
"text-icon-weak": !layout.fileTree.opened(),
489+
}}
490+
/>
491+
</div>
492+
</Button>
493+
</TooltipKeybind>
494+
</Show>
478495
</div>
479496
</div>
480497
</div>

packages/app/src/components/settings-general.tsx

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@ export const SettingsGeneral: Component = () => {
106106

107107
permission.disableAutoAccept(params.id, value)
108108
}
109+
const desktop = createMemo(() => platform.platform === "desktop")
109110

110111
const check = () => {
111112
if (!platform.checkUpdate) return
@@ -279,6 +280,74 @@ export const SettingsGeneral: Component = () => {
279280
</div>
280281
)
281282

283+
const AdvancedSection = () => (
284+
<div class="flex flex-col gap-1">
285+
<h3 class="text-14-medium text-text-strong pb-2">{language.t("settings.general.section.advanced")}</h3>
286+
287+
<SettingsList>
288+
<SettingsRow
289+
title={language.t("settings.general.row.showFileTree.title")}
290+
description={language.t("settings.general.row.showFileTree.description")}
291+
>
292+
<div data-action="settings-show-file-tree">
293+
<Switch
294+
checked={settings.general.showFileTree()}
295+
onChange={(checked) => settings.general.setShowFileTree(checked)}
296+
/>
297+
</div>
298+
</SettingsRow>
299+
300+
<SettingsRow
301+
title={language.t("settings.general.row.showNavigation.title")}
302+
description={language.t("settings.general.row.showNavigation.description")}
303+
>
304+
<div data-action="settings-show-navigation">
305+
<Switch
306+
checked={settings.general.showNavigation()}
307+
onChange={(checked) => settings.general.setShowNavigation(checked)}
308+
/>
309+
</div>
310+
</SettingsRow>
311+
312+
<SettingsRow
313+
title={language.t("settings.general.row.showSearch.title")}
314+
description={language.t("settings.general.row.showSearch.description")}
315+
>
316+
<div data-action="settings-show-search">
317+
<Switch
318+
checked={settings.general.showSearch()}
319+
onChange={(checked) => settings.general.setShowSearch(checked)}
320+
/>
321+
</div>
322+
</SettingsRow>
323+
324+
<SettingsRow
325+
title={language.t("settings.general.row.showTerminal.title")}
326+
description={language.t("settings.general.row.showTerminal.description")}
327+
>
328+
<div data-action="settings-show-terminal">
329+
<Switch
330+
checked={settings.general.showTerminal()}
331+
onChange={(checked) => settings.general.setShowTerminal(checked)}
332+
/>
333+
</div>
334+
</SettingsRow>
335+
336+
<SettingsRow
337+
title={language.t("settings.general.row.showStatus.title")}
338+
description={language.t("settings.general.row.showStatus.description")}
339+
>
340+
<div data-action="settings-show-status">
341+
<Switch
342+
checked={settings.general.showStatus()}
343+
onChange={(checked) => settings.general.setShowStatus(checked)}
344+
/>
345+
</div>
346+
</SettingsRow>
347+
</SettingsList>
348+
</div>
349+
)
350+
282351
const AppearanceSection = () => (
283352
<div class="flex flex-col gap-1">
284353
<h3 class="text-14-medium text-text-strong pb-2">{language.t("settings.general.section.appearance")}</h3>
@@ -527,6 +596,7 @@ export const SettingsGeneral: Component = () => {
527596
</div>
528597
)
529598

599+
console.log(import.meta.env)
530600
return (
531601
<div class="flex flex-col h-full overflow-y-auto no-scrollbar px-4 pb-10 sm:px-10 sm:pb-10">
532602
<div class="sticky top-0 z-10 bg-[linear-gradient(to_bottom,var(--surface-stronger-non-alpha)_calc(100%_-_24px),transparent)]">
@@ -609,6 +679,10 @@ export const SettingsGeneral: Component = () => {
609679
)
610680
}}
611681
</Show>
682+
683+
<Show when={desktop() && import.meta.env.VITE_OPENCODE_CHANNEL === "beta"}>
684+
<AdvancedSection />
685+
</Show>
612686
</div>
613687
</div>
614688
)

0 commit comments

Comments
 (0)