Skip to content

Commit 623ba30

Browse files
authored
Merge branch 'dev' into fix/default-model-visibility
2 parents a24f267 + ae7a351 commit 623ba30

150 files changed

Lines changed: 6495 additions & 2232 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.

bun.lock

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

infra/console.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -236,7 +236,6 @@ new sst.cloudflare.x.SolidStart("Console", {
236236
SALESFORCE_INSTANCE_URL,
237237
ZEN_BLACK_PRICE,
238238
ZEN_LITE_PRICE,
239-
new sst.Secret("ZEN_LITE_COUPON_FIRST_MONTH_100_INVITEES"),
240239
new sst.Secret("ZEN_LIMITS"),
241240
new sst.Secret("ZEN_SESSION_SECRET"),
242241
...ZEN_MODELS,

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-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="
3+
"x86_64-linux": "sha256-DOGOZdPdkcuyDhVAyWHGsL4rrV28S+YFZj/VORuoQ8Q=",
4+
"aarch64-linux": "sha256-WRnAaEoKvgFFZ+UkbYtD9gBw0HtV1jdUqv7yUE2uTAQ=",
5+
"aarch64-darwin": "sha256-LxIj/dsL88M99T3WLaD9FL6Qdu2TV+kr1RMZaZ3i4WM=",
6+
"x86_64-darwin": "sha256-PgIvplw6yz9KN5nBWox3BXZIXDbkJ3ZuDPKKSVF82MU="
77
}
88
}

nix/opencode.nix

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
sysctl,
88
makeBinaryWrapper,
99
models-dev,
10+
ripgrep,
1011
installShellFiles,
1112
versionCheckHook,
1213
writableTmpDirAsHomeHook,
@@ -51,25 +52,25 @@ stdenvNoCC.mkDerivation (finalAttrs: {
5152
runHook postBuild
5253
'';
5354

54-
installPhase =
55-
''
56-
runHook preInstall
57-
58-
install -Dm755 dist/opencode-*/bin/opencode $out/bin/opencode
59-
install -Dm644 schema.json $out/share/opencode/schema.json
60-
''
61-
# bun runs sysctl to detect if dunning on rosetta2
62-
+ lib.optionalString stdenvNoCC.hostPlatform.isDarwin ''
63-
wrapProgram $out/bin/opencode \
64-
--prefix PATH : ${
65-
lib.makeBinPath [
66-
sysctl
55+
installPhase = ''
56+
runHook preInstall
57+
58+
install -Dm755 dist/opencode-*/bin/opencode $out/bin/opencode
59+
install -Dm644 schema.json $out/share/opencode/schema.json
60+
61+
wrapProgram $out/bin/opencode \
62+
--prefix PATH : ${
63+
lib.makeBinPath (
64+
[
65+
ripgrep
6766
]
68-
}
69-
''
70-
+ ''
71-
runHook postInstall
72-
'';
67+
# bun runs sysctl to detect if dunning on rosetta2
68+
++ lib.optional stdenvNoCC.hostPlatform.isDarwin sysctl
69+
)
70+
}
71+
72+
runHook postInstall
73+
'';
7374

7475
postInstall = lib.optionalString (stdenvNoCC.buildPlatform.canExecute stdenvNoCC.hostPlatform) ''
7576
# trick yargs into also generating zsh completions

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
"packageManager": "[email protected]",
88
"scripts": {
99
"dev": "bun run --cwd packages/opencode --conditions=browser src/index.ts",
10-
"dev:desktop": "bun --cwd packages/desktop tauri dev",
10+
"dev:desktop": "bun --cwd packages/desktop-electron dev",
1111
"dev:web": "bun --cwd packages/app dev",
1212
"dev:console": "ulimit -n 10240 2>/dev/null; bun run --cwd packages/console/app dev",
1313
"dev:storybook": "bun --cwd packages/storybook storybook",
@@ -127,6 +127,7 @@
127127
"@types/node": "catalog:"
128128
},
129129
"patchedDependencies": {
130+
"@npmcli/[email protected]": "patches/@npmcli%[email protected]",
130131
"@standard-community/[email protected]": "patches/@standard-community%[email protected]",
131132
132133
}

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.11",
3+
"version": "1.14.19",
44
"description": "",
55
"type": "module",
66
"exports": {
Binary file not shown.

packages/app/src/app.tsx

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -141,13 +141,11 @@ export function AppBaseProviders(props: ParentProps<{ locale?: Locale }>) {
141141
<LanguageProvider locale={props.locale}>
142142
<UiI18nBridge>
143143
<ErrorBoundary fallback={(error) => <ErrorPage error={error} />}>
144-
<QueryProvider>
145-
<DialogProvider>
146-
<MarkedProvider>
147-
<FileComponentProvider component={File}>{props.children}</FileComponentProvider>
148-
</MarkedProvider>
149-
</DialogProvider>
150-
</QueryProvider>
144+
<DialogProvider>
145+
<MarkedProvider>
146+
<FileComponentProvider component={File}>{props.children}</FileComponentProvider>
147+
</MarkedProvider>
148+
</DialogProvider>
151149
</ErrorBoundary>
152150
</UiI18nBridge>
153151
</LanguageProvider>
@@ -293,20 +291,22 @@ export function AppInterface(props: {
293291
>
294292
<ConnectionGate disableHealthCheck={props.disableHealthCheck}>
295293
<ServerKey>
296-
<GlobalSDKProvider>
297-
<GlobalSyncProvider>
298-
<Dynamic
299-
component={props.router ?? Router}
300-
root={(routerProps) => <RouterRoot appChildren={props.children}>{routerProps.children}</RouterRoot>}
301-
>
302-
<Route path="/" component={HomeRoute} />
303-
<Route path="/:dir" component={DirectoryLayout}>
304-
<Route path="/" component={SessionIndexRoute} />
305-
<Route path="/session/:id?" component={SessionRoute} />
306-
</Route>
307-
</Dynamic>
308-
</GlobalSyncProvider>
309-
</GlobalSDKProvider>
294+
<QueryProvider>
295+
<GlobalSDKProvider>
296+
<GlobalSyncProvider>
297+
<Dynamic
298+
component={props.router ?? Router}
299+
root={(routerProps) => <RouterRoot appChildren={props.children}>{routerProps.children}</RouterRoot>}
300+
>
301+
<Route path="/" component={HomeRoute} />
302+
<Route path="/:dir" component={DirectoryLayout}>
303+
<Route path="/" component={SessionIndexRoute} />
304+
<Route path="/session/:id?" component={SessionRoute} />
305+
</Route>
306+
</Dynamic>
307+
</GlobalSyncProvider>
308+
</GlobalSDKProvider>
309+
</QueryProvider>
310310
</ServerKey>
311311
</ConnectionGate>
312312
</ServerProvider>

packages/app/src/components/prompt-input.tsx

Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { useFilteredList } from "@opencode-ai/ui/hooks"
22
import { useSpring } from "@opencode-ai/ui/motion-spring"
3-
import { createEffect, on, Component, Show, onCleanup, createMemo, createSignal } from "solid-js"
3+
import { createEffect, on, Component, Show, onCleanup, createMemo, createSignal, createResource } from "solid-js"
44
import { createStore } from "solid-js/store"
55
import { useLocal } from "@/context/local"
66
import { selectionFromLines, type SelectedLineRange, useFile } from "@/context/file"
@@ -54,7 +54,7 @@ import { PromptImageAttachments } from "./prompt-input/image-attachments"
5454
import { PromptDragOverlay } from "./prompt-input/drag-overlay"
5555
import { promptPlaceholder } from "./prompt-input/placeholder"
5656
import { ImagePreview } from "@opencode-ai/ui/image-preview"
57-
import { useQuery } from "@tanstack/solid-query"
57+
import { useQueries, useQuery } from "@tanstack/solid-query"
5858
import { loadAgentsQuery, loadProvidersQuery } from "@/context/global-sync/bootstrap"
5959

6060
interface PromptInputProps {
@@ -1252,16 +1252,21 @@ export const PromptInput: Component<PromptInputProps> = (props) => {
12521252
}
12531253
}
12541254

1255-
const agentsQuery = useQuery(() => loadAgentsQuery(sdk.directory))
1256-
const agentsLoading = () => agentsQuery.isLoading
1257-
1258-
const globalProvidersQuery = useQuery(() => loadProvidersQuery(null))
1259-
const providersQuery = useQuery(() => loadProvidersQuery(sdk.directory))
1255+
const [agentsQuery, globalProvidersQuery, providersQuery] = useQueries(() => ({
1256+
queries: [loadAgentsQuery(sdk.directory), loadProvidersQuery(null), loadProvidersQuery(sdk.directory)],
1257+
}))
12601258

1259+
const agentsLoading = () => agentsQuery.isLoading
12611260
const providersLoading = () => agentsLoading() || providersQuery.isLoading || globalProvidersQuery.isLoading
12621261

1262+
const [promptReady] = createResource(
1263+
() => prompt.ready().promise,
1264+
(p) => p,
1265+
)
1266+
12631267
return (
12641268
<div class="relative size-full _max-h-[320px] flex flex-col gap-0">
1269+
{(promptReady(), null)}
12651270
<PromptPopover
12661271
popover={store.popover}
12671272
setSlashPopoverRef={(el) => (slashPopoverRef = el)}
@@ -1358,15 +1363,13 @@ export const PromptInput: Component<PromptInputProps> = (props) => {
13581363
}}
13591364
style={{ "padding-bottom": space }}
13601365
/>
1361-
<Show when={!prompt.dirty()}>
1362-
<div
1363-
class="absolute top-0 inset-x-0 pl-3 pr-2 pt-2 text-14-regular text-text-weak pointer-events-none whitespace-nowrap truncate"
1364-
classList={{ "font-mono!": store.mode === "shell" }}
1365-
style={{ "padding-bottom": space }}
1366-
>
1367-
{placeholder()}
1368-
</div>
1369-
</Show>
1366+
<div
1367+
class="absolute top-0 inset-x-0 pl-3 pr-2 pt-2 text-14-regular text-text-weak pointer-events-none whitespace-nowrap truncate"
1368+
classList={{ "font-mono!": store.mode === "shell" }}
1369+
style={{ "padding-bottom": space, display: prompt.dirty() ? "none" : undefined }}
1370+
>
1371+
{placeholder()}
1372+
</div>
13701373
</div>
13711374

13721375
<div
@@ -1457,7 +1460,7 @@ export const PromptInput: Component<PromptInputProps> = (props) => {
14571460
</div>
14581461
<div class="flex items-center gap-1.5 min-w-0 flex-1 h-7">
14591462
<Show when={!agentsLoading()}>
1460-
<div data-component="prompt-agent-control">
1463+
<div data-component="prompt-agent-control" style={{ animation: "fade-in 0.3s" }}>
14611464
<TooltipKeybind
14621465
placement="top"
14631466
gutter={4}
@@ -1483,7 +1486,7 @@ export const PromptInput: Component<PromptInputProps> = (props) => {
14831486
</Show>
14841487
<Show when={!providersLoading()}>
14851488
<Show when={store.mode !== "shell"}>
1486-
<div data-component="prompt-model-control">
1489+
<div data-component="prompt-model-control" style={{ animation: "fade-in 0.3s" }}>
14871490
<Show
14881491
when={providers.paid().length > 0}
14891492
fallback={
@@ -1554,7 +1557,7 @@ export const PromptInput: Component<PromptInputProps> = (props) => {
15541557
</TooltipKeybind>
15551558
</Show>
15561559
</div>
1557-
<div data-component="prompt-variant-control">
1560+
<div data-component="prompt-variant-control" style={{ animation: "fade-in 0.3s" }}>
15581561
<TooltipKeybind
15591562
placement="top"
15601563
gutter={4}

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

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@ import {
1919
sansDefault,
2020
sansFontFamily,
2121
sansInput,
22+
terminalDefault,
23+
terminalFontFamily,
24+
terminalInput,
2225
useSettings,
2326
} from "@/context/settings"
2427
import { decode64 } from "@/utils/base64"
@@ -181,6 +184,7 @@ export const SettingsGeneral: Component = () => {
181184
const soundOptions = [noneSound, ...SOUND_OPTIONS]
182185
const mono = () => monoInput(settings.appearance.font())
183186
const sans = () => sansInput(settings.appearance.uiFont())
187+
const terminal = () => terminalInput(settings.appearance.terminalFont())
184188

185189
const soundSelectProps = (
186190
enabled: () => boolean,
@@ -451,6 +455,29 @@ export const SettingsGeneral: Component = () => {
451455
/>
452456
</div>
453457
</SettingsRow>
458+
459+
<SettingsRow
460+
title={language.t("settings.general.row.terminalFont.title")}
461+
description={language.t("settings.general.row.terminalFont.description")}
462+
>
463+
<div class="w-full sm:w-[220px]">
464+
<TextField
465+
data-action="settings-terminal-font"
466+
label={language.t("settings.general.row.terminalFont.title")}
467+
hideLabel
468+
type="text"
469+
value={terminal()}
470+
onChange={(value) => settings.appearance.setTerminalFont(value)}
471+
placeholder={terminalDefault}
472+
spellcheck={false}
473+
autocorrect="off"
474+
autocomplete="off"
475+
autocapitalize="off"
476+
class="text-12-regular"
477+
style={{ "font-family": terminalFontFamily(settings.appearance.terminalFont()) }}
478+
/>
479+
</div>
480+
</SettingsRow>
454481
</SettingsList>
455482
</div>
456483
)

0 commit comments

Comments
 (0)