Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
d90532a
sync release versions for v1.18.16
Aug 10, 2026
941e71d
fix(app): use current default model (#38603)
Brendonovich Aug 10, 2026
550d1ff
fix(i18n): use widely recognized developer terminology (#41532)
opencode-agent[bot] Aug 10, 2026
b9f3b38
fix(session): route all Muse family models to the Meta system prompt …
mreso Aug 10, 2026
3a90639
fix(ui): correct OC-2 weak icon color (#41504)
OpeOginni Aug 10, 2026
5d95348
fix(provider): scope DeepSeek V4 Flash sampling defaults (#41620)
opencode-agent[bot] Aug 11, 2026
d62e500
chore: build beta from v2 (#41627)
Hona Aug 11, 2026
d041eee
chore: use DeepSeek for beta conflicts (#41669)
opencode-agent[bot] Aug 11, 2026
9fdd482
docs(zen): add Nemotron 3.5 Lightning (#41750)
MrMushrooooom Aug 11, 2026
0d927ba
chore: generate
opencode-agent[bot] Aug 11, 2026
6afef2f
fix(console): update blocked account message (#41819)
opencode-agent[bot] Aug 11, 2026
36b2053
docs(zen): add Hy3 Free (#41814)
MrMushrooooom Aug 11, 2026
2b8a596
feat(console): add go usage endpoint (#16513)
peculiarnewbie Aug 11, 2026
561afb4
fix(opencode): detect Copilot PDF input support (#41522)
stevenao Aug 11, 2026
d470434
refactor(console): simplify go usage response
vimtor Aug 11, 2026
c789868
fix(opencode): cap session retries with jitter (#41939)
rekram1-node Aug 12, 2026
1f94d8a
docs(zen): remove expired free models (#41943)
MrMushrooooom Aug 12, 2026
46a14e6
feat(stats): query r2 data catalog
adamdotdevin Aug 12, 2026
d92d1e6
docs(zen): add Grok 4.6
fwang Aug 12, 2026
8571a92
fix(provider): add Merge Gateway reasoning variants (#41867)
MatthewFeroz Aug 12, 2026
ca3df21
docs: fix broken DigitalOcean and Daytona links (#42048)
skyzhao1223 Aug 12, 2026
959c8bd
docs: fix provider display name and PAT typos (#42034)
skyzhao1223 Aug 12, 2026
7e0353c
fix(stats): correct r2 daily totals
adamdotdevin Aug 12, 2026
284187a
fix(ci): authenticate pulumi downloads
adamdotdevin Aug 12, 2026
6d3ae4d
chore: generate
opencode-agent[bot] Aug 12, 2026
df09c3e
update ds v4 pro
fwang Aug 12, 2026
069165e
Merge branch 'dev' of github.com:anomalyco/opencode into dev
fwang Aug 12, 2026
521906f
docs(go): clarify DeepSeek ZDR coverage (#42085)
opencode-agent[bot] Aug 12, 2026
999be62
chore: generate
opencode-agent[bot] Aug 12, 2026
39fb919
chore: add neriousy to team members (#42107)
opencode-agent[bot] Aug 12, 2026
dab2637
fix(compaction): adjust instructions and structure to be more clear t…
rekram1-node Aug 12, 2026
02546df
release: v1.18.17
Aug 12, 2026
c279523
chore(termux): seed release automation
github-actions[bot] Aug 12, 2026
6e296fc
Termux v1.18.17 (#50)
unemployabot[bot] Aug 12, 2026
cd257f7
Merge commit '6e296fc0c48cb284033b2774986ee292b3871fbc' into checkpoi…
github-actions[bot] Aug 12, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/TEAM_MEMBERS
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ kitlangton
kommander
ludvigrask
MrMushrooooom
neriousy
nexxeln
R44VC0RP
rekram1-node
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ jobs:

- run: bun sst deploy --stage=${{ github.ref_name }}
env:
GITHUB_TOKEN: ${{ github.token }}
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
PLANETSCALE_SERVICE_TOKEN_NAME: ${{ secrets.PLANETSCALE_SERVICE_TOKEN_NAME }}
PLANETSCALE_SERVICE_TOKEN: ${{ secrets.PLANETSCALE_SERVICE_TOKEN }}
Expand Down
2 changes: 1 addition & 1 deletion .opencode/tool/github-triage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { tool } from "@opencode-ai/plugin"
const TEAM = {
tui: ["kommander", "simonklee"],
desktop_web: ["Hona", "Brendonovich"],
core: ["jlongster", "rekram1-node", "nexxeln", "kitlangton"],
core: ["jlongster", "rekram1-node", "neriousy", "nexxeln", "kitlangton"],
inference: ["fwang", "MrMushrooooom", "starptech"],
windows: ["Hona"],
} as const
Expand Down
2 changes: 1 addition & 1 deletion .termux-release-automation
Submodule .termux-release-automation updated from 592ebe to 6e296f
56 changes: 28 additions & 28 deletions bun.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

14 changes: 13 additions & 1 deletion infra/stats.ts
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,16 @@ const statsSyncConfig = new sst.Linkable("StatsSyncConfig", {
},
})

const r2SqlAuthToken = new sst.Secret("R2SqlAuthToken")
const r2Sql = new sst.Linkable("R2Sql", {
properties: {
accountId: "15d29c8639fd3733b1b5486a2acfd968",
bucket: `platform-${$app.stage}-lake`,
namespace: "inference",
table: "generation",
},
})

export const statSync = new sst.aws.Service("StatsSyncService", {
cluster: lakeCluster,
architecture: "arm64",
Expand All @@ -193,7 +203,9 @@ export const statSync = new sst.aws.Service("StatsSyncService", {
dockerfile: "packages/stats/server/Dockerfile",
},
command: ["bun", "src/stat-sync.ts"],
link: [database, inferenceEvent, statsSyncConfig],
// Keep the legacy Athena link and IAM permissions during the first R2-backed
// release so reverting the application code remains a one-deploy rollback.
link: [database, inferenceEvent, r2Sql, r2SqlAuthToken, statsSyncConfig],
permissions: lakeQueryPermissions,
scaling: {
min: 1,
Expand Down
2 changes: 1 addition & 1 deletion packages/app/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@opencode-ai/app",
"version": "1.18.16",
"version": "1.18.17",
"description": "",
"type": "module",
"exports": {
Expand Down
5 changes: 5 additions & 0 deletions packages/app/src/context/global-sync/utils.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,7 @@ describe("normalizeProviderList", () => {
)

expect(result.connected).toEqual(["openai"])
expect(result.defaultModel).toEqual({ providerID: "openai", modelID: "gpt-5" })
expect(result.default).toEqual({ openai: "gpt-5" })
expect(result.all.get("openai")?.models["gpt-old"]).toBeUndefined()
expect(result.all.get("openai")?.models["gpt-5"]).toMatchObject({
Expand All @@ -113,6 +114,10 @@ describe("normalizeProviderList", () => {
variants: { high: {} },
})
})

test("preserves an empty current default", () => {
expect(normalizeProviderList([] as ProviderListOutput["data"], [], null).defaultModel).toBeNull()
})
})

describe("directoryKey", () => {
Expand Down
1 change: 1 addition & 0 deletions packages/app/src/context/global-sync/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,7 @@ export function normalizeProviderList(
return {
all,
connected: providers.map((provider) => provider.id),
defaultModel: defaultModel ? { providerID: defaultModel.providerID, modelID: defaultModel.id } : null,
default: Object.fromEntries(
providers.flatMap((provider) => {
const model =
Expand Down
7 changes: 3 additions & 4 deletions packages/app/src/context/local.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import { createStore } from "solid-js/store"
import { useModels } from "@/context/models"
import { useSettings } from "@/context/settings"
import { useProviders } from "@/hooks/use-providers"
import { resolveDefaultModel } from "@/hooks/provider-catalog"
import { Persist, persisted } from "@/utils/persist"
import { hasCustomAgent, resolveAgent } from "./local-agent"
import { cycleModelVariant, getConfiguredAgentVariant, resolveModelVariant } from "./model-variant"
Expand Down Expand Up @@ -149,10 +150,8 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({
})

const configuredModel = () => {
const configured = sync().data.config.model
if (!configured) return
const [providerID, modelID] = configured.split("/")
const model = { providerID, modelID }
const model = resolveDefaultModel(providers.defaultModel(), sync().data.config.model)
if (!model) return
if (validModel(model)) return model
}

Expand Down
20 changes: 19 additions & 1 deletion packages/app/src/hooks/provider-catalog.test.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { expect, test } from "bun:test"
import type { NormalizedProviderListResponse } from "@opencode-ai/session-ui/context"
import { selectProviderCatalog } from "./provider-catalog"
import { resolveDefaultModel, selectProviderCatalog } from "./provider-catalog"

const catalog = (id: string): NormalizedProviderListResponse => ({
all: new Map([[id, { id, name: id, source: "api", env: [], options: {}, models: {} }]]),
Expand Down Expand Up @@ -57,3 +57,21 @@ test("falls back to the global catalog for route consumers", () => {
}),
).toBe(global)
})

test("uses the current server default model", () => {
expect(resolveDefaultModel({ providerID: "openai", modelID: "gpt-5" }, "anthropic/claude")).toEqual({
providerID: "openai",
modelID: "gpt-5",
})
})

test("does not use legacy config when the current server has no default", () => {
expect(resolveDefaultModel(null, "anthropic/claude")).toBeUndefined()
})

test("uses config for legacy servers", () => {
expect(resolveDefaultModel(undefined, "anthropic/claude")).toEqual({
providerID: "anthropic",
modelID: "claude",
})
})
Loading