Skip to content

Commit e3fc17b

Browse files
authored
Merge branch 'anomalyco:dev' into fix/plugin-exit-wait
2 parents 6c8079c + bfb954e commit e3fc17b

75 files changed

Lines changed: 1445 additions & 957 deletions

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: 3 additions & 3 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-NczRp8MPppkqP8PQfWMUWJ/Wofvf2YVy5m4i22Pi3jg=",
4-
"aarch64-linux": "sha256-QIxGOu8Fj+sWgc9hKvm1BLiIErxEtd17SPlwZGac9sQ=",
5-
"aarch64-darwin": "sha256-Rb9qbMM+ARn0iBCaZurwcoUBCplbMXEZwrXVKextp3I=",
6-
"x86_64-darwin": "sha256-KVxOKkaVV7W+K4reEk14MTLgmtoqwCYDqDNXNeS6ync="
3+
"x86_64-linux": "sha256-AgHhYsiygxbsBo3JN4HqHXKAwh8n1qeuSCe2qqxlxW4=",
4+
"aarch64-linux": "sha256-h2lpWRQ5EDYnjpqZXtUAp1mxKLQxJ4m8MspgSY8Ev78=",
5+
"aarch64-darwin": "sha256-xnd91+WyeAqn06run2ajsekxJvTMiLsnqNPe/rR8VTM=",
6+
"x86_64-darwin": "sha256-rXpz45IOjGEk73xhP9VY86eOj2CZBg2l1vzwzTIOOOQ="
77
}
88
}

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
"description": "AI-powered development tool",
55
"private": true,
66
"type": "module",
7-
"packageManager": "[email protected].11",
7+
"packageManager": "[email protected].13",
88
"scripts": {
99
"dev": "bun run --cwd packages/opencode --conditions=browser src/index.ts",
1010
"dev:desktop": "bun --cwd packages/desktop-electron dev",
@@ -30,7 +30,7 @@
3030
"@effect/opentelemetry": "4.0.0-beta.48",
3131
"@effect/platform-node": "4.0.0-beta.48",
3232
"@npmcli/arborist": "9.4.0",
33-
"@types/bun": "1.3.11",
33+
"@types/bun": "1.3.12",
3434
"@types/cross-spawn": "6.0.6",
3535
"@octokit/rest": "22.0.0",
3636
"@hono/zod-validator": "0.4.2",

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

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ export function DialogEditProject(props: { project: LocalProject }) {
2626

2727
const [store, setStore] = createStore({
2828
name: defaultName(),
29-
color: props.project.icon?.color || "pink",
30-
iconUrl: props.project.icon?.override || "",
29+
color: props.project.icon?.color,
30+
iconOverride: props.project.icon?.override,
3131
startup: props.project.commands?.start ?? "",
3232
dragOver: false,
3333
iconHover: false,
@@ -39,7 +39,7 @@ export function DialogEditProject(props: { project: LocalProject }) {
3939
if (!file.type.startsWith("image/")) return
4040
const reader = new FileReader()
4141
reader.onload = (e) => {
42-
setStore("iconUrl", e.target?.result as string)
42+
setStore("iconOverride", e.target?.result as string)
4343
setStore("iconHover", false)
4444
}
4545
reader.readAsDataURL(file)
@@ -68,7 +68,7 @@ export function DialogEditProject(props: { project: LocalProject }) {
6868
}
6969

7070
function clearIcon() {
71-
setStore("iconUrl", "")
71+
setStore("iconOverride", "")
7272
}
7373

7474
const saveMutation = useMutation(() => ({
@@ -81,17 +81,17 @@ export function DialogEditProject(props: { project: LocalProject }) {
8181
projectID: props.project.id,
8282
directory: props.project.worktree,
8383
name,
84-
icon: { color: store.color, override: store.iconUrl },
84+
icon: { color: store.color || "", override: store.iconOverride || "" },
8585
commands: { start },
8686
})
87-
globalSync.project.icon(props.project.worktree, store.iconUrl || undefined)
87+
globalSync.project.icon(props.project.worktree, store.iconOverride || undefined)
8888
dialog.close()
8989
return
9090
}
9191

9292
globalSync.project.meta(props.project.worktree, {
9393
name,
94-
icon: { color: store.color, override: store.iconUrl || undefined },
94+
icon: { color: store.color || undefined, override: store.iconOverride || undefined },
9595
commands: { start: start || undefined },
9696
})
9797
dialog.close()
@@ -130,21 +130,21 @@ export function DialogEditProject(props: { project: LocalProject }) {
130130
classList={{
131131
"border-text-interactive-base bg-surface-info-base/20": store.dragOver,
132132
"border-border-base hover:border-border-strong": !store.dragOver,
133-
"overflow-hidden": !!store.iconUrl,
133+
"overflow-hidden": !!store.iconOverride,
134134
}}
135135
onDrop={handleDrop}
136136
onDragOver={handleDragOver}
137137
onDragLeave={handleDragLeave}
138138
onClick={() => {
139-
if (store.iconUrl && store.iconHover) {
139+
if (store.iconOverride && store.iconHover) {
140140
clearIcon()
141141
} else {
142142
iconInput?.click()
143143
}
144144
}}
145145
>
146146
<Show
147-
when={store.iconUrl}
147+
when={store.iconOverride || (!store.color && props.project.icon?.url)}
148148
fallback={
149149
<div class="size-full flex items-center justify-center">
150150
<Avatar
@@ -156,7 +156,7 @@ export function DialogEditProject(props: { project: LocalProject }) {
156156
}
157157
>
158158
<img
159-
src={store.iconUrl}
159+
src={store.iconOverride || props.project.icon?.url}
160160
alt={language.t("dialog.project.edit.icon.alt")}
161161
class="size-full object-cover"
162162
/>
@@ -165,17 +165,17 @@ export function DialogEditProject(props: { project: LocalProject }) {
165165
<div
166166
class="absolute inset-0 size-16 bg-surface-raised-stronger-non-alpha/90 rounded-[6px] z-10 pointer-events-none flex items-center justify-center transition-opacity"
167167
classList={{
168-
"opacity-100": store.iconHover && !store.iconUrl,
169-
"opacity-0": !(store.iconHover && !store.iconUrl),
168+
"opacity-100": store.iconHover && !store.iconOverride,
169+
"opacity-0": !(store.iconHover && !store.iconOverride),
170170
}}
171171
>
172172
<Icon name="cloud-upload" size="large" class="text-icon-on-interactive-base drop-shadow-sm" />
173173
</div>
174174
<div
175175
class="absolute inset-0 size-16 bg-surface-raised-stronger-non-alpha/90 rounded-[6px] z-10 pointer-events-none flex items-center justify-center transition-opacity"
176176
classList={{
177-
"opacity-100": store.iconHover && !!store.iconUrl,
178-
"opacity-0": !(store.iconHover && !!store.iconUrl),
177+
"opacity-100": store.iconHover && !!store.iconOverride,
178+
"opacity-0": !(store.iconHover && !!store.iconOverride),
179179
}}
180180
>
181181
<Icon name="trash" size="large" class="text-icon-on-interactive-base drop-shadow-sm" />
@@ -198,7 +198,7 @@ export function DialogEditProject(props: { project: LocalProject }) {
198198
</div>
199199
</div>
200200

201-
<Show when={!store.iconUrl}>
201+
<Show when={!store.iconOverride}>
202202
<div class="flex flex-col gap-2">
203203
<label class="text-12-medium text-text-weak">{language.t("dialog.project.edit.color")}</label>
204204
<div class="flex gap-1.5">
@@ -215,7 +215,9 @@ export function DialogEditProject(props: { project: LocalProject }) {
215215
"bg-transparent border border-transparent hover:bg-surface-base-hover hover:border-border-weak-base":
216216
store.color !== color,
217217
}}
218-
onClick={() => setStore("color", color)}
218+
onClick={() => {
219+
setStore("color", store.color === color ? undefined : color)
220+
}}
219221
>
220222
<Avatar
221223
fallback={store.name || defaultName()}

packages/app/src/context/layout.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -516,7 +516,7 @@ export const { use: useLayout, provider: LayoutProvider } = createSimpleContext(
516516
}
517517

518518
for (const project of projects) {
519-
if (project.icon?.color) continue
519+
if (project.icon?.color || project.icon.url) continue
520520
const worktree = project.worktree
521521
const existing = colors[worktree]
522522
const color = existing ?? pickAvailableColor(used)

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,9 @@ export const ProjectIcon = (props: { project: LocalProject; class?: string; noti
4545
src={
4646
props.project.id === OPENCODE_PROJECT_ID
4747
? "https://opencode.ai/favicon.svg"
48-
: props.project.icon?.override || props.project.icon?.url
48+
: props.project.icon?.color
49+
? undefined
50+
: props.project.icon?.override || props.project.icon?.url
4951
}
5052
{...getAvatarColors(props.project.icon?.color)}
5153
class="size-full rounded"

packages/console/app/src/routes/zen/util/provider/anthropic.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -148,11 +148,13 @@ export const anthropicHelper: ProviderHelper = ({ reqModel, providerModel }) =>
148148
return {
149149
parse: (chunk: string) => {
150150
const data = chunk.split("\n")[1]
151-
if (!data.startsWith("data: ")) return
151+
// Claude models start with "data: {"
152+
// Alibaba models start with "data:{"
153+
if (!data.startsWith("data:")) return
152154

153155
let json
154156
try {
155-
json = JSON.parse(data.slice(6))
157+
json = JSON.parse(data.replace(/^data:\s*/, ""))
156158
} catch {
157159
return
158160
}

packages/containers/bun-node/Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ FROM ${REGISTRY}/build/base:24.04
44
SHELL ["/bin/bash", "-lc"]
55

66
ARG NODE_VERSION=24.4.0
7-
ARG BUN_VERSION=1.3.11
7+
ARG BUN_VERSION=1.3.13
88

99
ENV BUN_INSTALL=/opt/bun
1010
ENV PATH=/opt/bun/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

packages/desktop/src-tauri/release/appstream.metainfo.xml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,14 @@
2828

2929
<screenshots>
3030
<screenshot type="default">
31-
<image>https://opencode.ai/docs/_astro/screenshot.Bs5D4atL_ZvsvFu.webp</image>
31+
<image>https://raw.githubusercontent.com/anomalyco/opencode/b75d4d1c5ec449585d515c756fc81f080a157a9a/packages/web/src/assets/lander/screenshot.png</image>
3232
</screenshot>
3333
</screenshots>
3434

3535
<releases>
36+
<release version="1.4.0" date="2026-04-08">
37+
<url type="details">https://github.com/anomalyco/opencode/releases/tag/v1.4.0</url>
38+
</release>
3639
<release version="1.0.223" date="2026-01-01">
3740
<url type="details">https://github.com/anomalyco/opencode/releases/tag/v1.0.223</url>
3841
</release>

packages/desktop/src-tauri/tauri.conf.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
"icons/dev/icon.ico"
3333
],
3434
"active": true,
35+
"category": "DeveloperTool",
3536
"targets": ["deb", "rpm", "dmg", "nsis", "app"],
3637
"externalBin": ["sidecars/opencode-cli"],
3738
"linux": {

0 commit comments

Comments
 (0)