Skip to content

Commit 2ac59c8

Browse files
authored
Merge pull request #37 from browser-use/sync/upstream-v1.14.39
sync: upstream v1.14.39 (773078e on dev)
2 parents 3d7f38f + b210708 commit 2ac59c8

853 files changed

Lines changed: 42461 additions & 35889 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.

.github/ISSUE_TEMPLATE/bug-report.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
name: Bug report
22
description: Report an issue that should be fixed
3-
labels: ["bug"]
43
body:
54
- type: textarea
65
id: description

.github/ISSUE_TEMPLATE/feature-request.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
name: 🚀 Feature Request
22
description: Suggest an idea, feature, or enhancement
3-
labels: [discussion]
43
title: "[FEATURE]:"
54

65
body:

.github/ISSUE_TEMPLATE/question.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
name: Question
22
description: Ask a question
3-
labels: ["question"]
43
body:
54
- type: textarea
65
id: question

.github/TEAM_MEMBERS

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,5 @@ MrMushrooooom
1111
nexxeln
1212
R44VC0RP
1313
rekram1-node
14-
RhysSullivan
1514
thdxr
1615
simonklee

.github/VOUCHED.td

Lines changed: 0 additions & 40 deletions
This file was deleted.

.opencode/agent/triage.md

Lines changed: 15 additions & 112 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
mode: primary
33
hidden: true
4-
model: opencode/minimax-m2.5
4+
model: opencode/gpt-5.4-nano
55
color: "#44BA81"
66
tools:
77
"*": false
@@ -14,127 +14,30 @@ Use your github-triage tool to triage issues.
1414

1515
This file is the source of truth for ownership/routing rules.
1616

17-
## Labels
17+
Assign issues by choosing the team with the strongest overlap. The github-triage tool will assign a random member from that team.
1818

19-
### windows
19+
Do not add labels to issues. Only assign an owner.
2020

21-
Use for any issue that mentions Windows (the OS). Be sure they are saying that they are on Windows.
21+
When calling github-triage, pass one of these team values: tui, desktop_web, core, inference, windows.
2222

23-
- Use if they mention WSL too
23+
## Teams
2424

25-
#### perf
25+
### TUI
2626

27-
Performance-related issues:
27+
Terminal UI issues, including rendering, keybindings, scrolling, terminal compatibility, SSH behavior, crashes in the TUI, and low-level TUI performance.
2828

29-
- Slow performance
30-
- High RAM usage
31-
- High CPU usage
29+
### Desktop / Web
3230

33-
**Only** add if it's likely a RAM or CPU issue. **Do not** add for LLM slowness.
31+
Desktop application and browser-based app issues, including `opencode web`, desktop-specific UI behavior, packaging, and web view problems.
3432

35-
#### desktop
33+
### Core
3634

37-
Desktop app issues:
35+
Core opencode server and harness issues, including sqlite, snapshots, memory, API behavior, agent context construction, tool execution, provider integrations, model behavior, documentation, and larger architectural features.
3836

39-
- `opencode web` command
40-
- The desktop app itself
37+
### Inference
4138

42-
**Only** add if it's specifically about the Desktop application or `opencode web` view. **Do not** add for terminal, TUI, or general opencode issues.
39+
OpenCode Zen, OpenCode Go, and billing issues.
4340

44-
#### nix
41+
### Windows
4542

46-
**Only** add if the issue explicitly mentions nix.
47-
48-
If the issue does not mention nix, do not add nix.
49-
50-
If the issue mentions nix, assign to `rekram1-node`.
51-
52-
#### zen
53-
54-
**Only** add if the issue mentions "zen" or "opencode zen" or "opencode black".
55-
56-
If the issue doesn't have "zen" or "opencode black" in it then don't add zen label
57-
58-
#### core
59-
60-
Use for core server issues in `packages/opencode/`, excluding `packages/opencode/src/cli/cmd/tui/`.
61-
62-
Examples:
63-
64-
- LSP server behavior
65-
- Harness behavior (agent + tools)
66-
- Feature requests for server behavior
67-
- Agent context construction
68-
- API endpoints
69-
- Provider integration issues
70-
- New, broken, or poor-quality models
71-
72-
#### acp
73-
74-
If the issue mentions acp support, assign acp label.
75-
76-
#### docs
77-
78-
Add if the issue requests better documentation or docs updates.
79-
80-
#### opentui
81-
82-
TUI issues potentially caused by our underlying TUI library:
83-
84-
- Keybindings not working
85-
- Scroll speed issues (too fast/slow/laggy)
86-
- Screen flickering
87-
- Crashes with opentui in the log
88-
89-
**Do not** add for general TUI bugs.
90-
91-
When assigning to people here are the following rules:
92-
93-
Desktop / Web:
94-
Use for desktop-labeled issues only.
95-
96-
- adamdotdevin
97-
- iamdavidhill
98-
- Brendonovich
99-
- nexxeln
100-
101-
Zen:
102-
ONLY assign if the issue will have the "zen" label.
103-
104-
- fwang
105-
- MrMushrooooom
106-
107-
TUI (`packages/opencode/src/cli/cmd/tui/...`):
108-
109-
- thdxr for TUI UX/UI product decisions and interaction flow
110-
- kommander for OpenTUI engine issues: rendering artifacts, keybind handling, terminal compatibility, SSH behavior, and low-level perf bottlenecks
111-
- rekram1-node for TUI bugs that are not clearly OpenTUI engine issues
112-
113-
Core (`packages/opencode/...`, excluding TUI subtree):
114-
115-
- thdxr for sqlite/snapshot/memory bugs and larger architectural core features
116-
- jlongster for opencode server + API feature work (tool currently remaps jlongster -> thdxr until assignable)
117-
- rekram1-node for harness issues, provider issues, and other bug-squashing
118-
119-
For core bugs that do not clearly map, either thdxr or rekram1-node is acceptable.
120-
121-
Docs:
122-
123-
- R44VC0RP
124-
125-
Windows:
126-
127-
- Hona (assign any issue that mentions Windows or is likely Windows-specific)
128-
129-
Determinism rules:
130-
131-
- If title + body does not contain "zen", do not add the "zen" label
132-
- If "nix" label is added but title + body does not mention nix/nixos, the tool will drop "nix"
133-
- If title + body mentions nix/nixos, assign to `rekram1-node`
134-
- If "desktop" label is added, the tool will override assignee and randomly pick one Desktop / Web owner
135-
136-
In all other cases, choose the team/section with the most overlap with the issue and assign a member from that team at random.
137-
138-
ACP:
139-
140-
- rekram1-node (assign any acp issues to rekram1-node)
43+
Windows-specific issues, including native Windows behavior, WSL interactions, path handling, shell compatibility, and installation or runtime problems that only happen on Windows.

.opencode/command/changelog.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,12 @@ Do not use `git log` or author metadata when deciding attribution.
1818

1919
Rules:
2020

21-
- Write the final file with sections in this order:
21+
- Write the final file with release sections in this order:
2222
`## Core`, `## TUI`, `## Desktop`, `## SDK`, `## Extensions`
2323
- Only include sections that have at least one notable entry
24+
- Within each release section, keep bug fixes grouped under `### Bugfixes`
25+
- Keep other notable entries under `### Improvements` when a section has bug fixes too
26+
- Omit empty subsections
2427
- Keep one bullet per commit you keep
2528
- Skip commits that are entirely internal, CI, tests, refactors, or otherwise not user-facing
2629
- Start each bullet with a capital letter

.opencode/tool/github-triage.ts

Lines changed: 12 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,14 @@
11
/// <reference path="../env.d.ts" />
22
import { tool } from "@opencode-ai/plugin"
3+
34
const TEAM = {
4-
desktop: ["adamdotdevin", "iamdavidhill", "Brendonovich", "nexxeln"],
5-
zen: ["fwang", "MrMushrooooom"],
6-
tui: ["kommander", "rekram1-node", "simonklee"],
7-
core: ["kitlangton", "rekram1-node", "jlongster"],
8-
docs: ["R44VC0RP"],
5+
tui: ["kommander", "simonklee"],
6+
desktop_web: ["Hona", "Brendonovich"],
7+
core: ["jlongster", "rekram1-node", "nexxeln", "kitlangton"],
8+
inference: ["fwang", "MrMushrooooom"],
99
windows: ["Hona"],
1010
} as const
1111

12-
const ASSIGNEES = [...new Set(Object.values(TEAM).flat())]
13-
1412
function pick<T>(items: readonly T[]) {
1513
return items[Math.floor(Math.random() * items.length)]!
1614
}
@@ -38,79 +36,25 @@ async function githubFetch(endpoint: string, options: RequestInit = {}) {
3836
}
3937

4038
export default tool({
41-
description: `Use this tool to assign and/or label a GitHub issue.
39+
description: `Use this tool to assign a GitHub issue.
4240
43-
Choose labels and assignee using the current triage policy and ownership rules.
44-
Pick the most fitting labels for the issue and assign one owner.
45-
46-
If unsure, choose the team/section with the most overlap with the issue and assign a member from that team at random.`,
41+
Provide the team that should own the issue. This tool picks a random assignee from that team and does not apply labels.`,
4742
args: {
48-
assignee: tool.schema
49-
.enum(ASSIGNEES as [string, ...string[]])
50-
.describe("The username of the assignee")
51-
.default("rekram1-node"),
52-
labels: tool.schema
53-
.array(tool.schema.enum(["nix", "opentui", "perf", "web", "desktop", "zen", "docs", "windows", "core"]))
54-
.describe("The labels(s) to add to the issue")
55-
.default([]),
43+
team: tool.schema
44+
.enum(Object.keys(TEAM) as [keyof typeof TEAM, ...(keyof typeof TEAM)[]])
45+
.describe("The owning team"),
5646
},
5747
async execute(args) {
5848
const issue = getIssueNumber()
5949
const owner = "anomalyco"
6050
const repo = "opencode"
61-
62-
const results: string[] = []
63-
let labels = [...new Set(args.labels.map((x) => (x === "desktop" ? "web" : x)))]
64-
const web = labels.includes("web")
65-
const text = `${process.env.ISSUE_TITLE ?? ""}\n${process.env.ISSUE_BODY ?? ""}`.toLowerCase()
66-
const zen = /\bzen\b/.test(text) || text.includes("opencode black")
67-
const nix = /\bnix(os)?\b/.test(text)
68-
69-
if (labels.includes("nix") && !nix) {
70-
labels = labels.filter((x) => x !== "nix")
71-
results.push("Dropped label: nix (issue does not mention nix)")
72-
}
73-
74-
const assignee = nix ? "rekram1-node" : web ? pick(TEAM.desktop) : args.assignee
75-
76-
if (labels.includes("zen") && !zen) {
77-
throw new Error("Only add the zen label when issue title/body contains 'zen'")
78-
}
79-
80-
if (web && !nix && !(TEAM.desktop as readonly string[]).includes(assignee)) {
81-
throw new Error("Web issues must be assigned to adamdotdevin, iamdavidhill, Brendonovich, or nexxeln")
82-
}
83-
84-
if ((TEAM.zen as readonly string[]).includes(assignee) && !labels.includes("zen")) {
85-
throw new Error("Only zen issues should be assigned to fwang or MrMushrooooom")
86-
}
87-
88-
if (assignee === "Hona" && !labels.includes("windows")) {
89-
throw new Error("Only windows issues should be assigned to Hona")
90-
}
91-
92-
if (assignee === "R44VC0RP" && !labels.includes("docs")) {
93-
throw new Error("Only docs issues should be assigned to R44VC0RP")
94-
}
95-
96-
if (assignee === "kommander" && !labels.includes("opentui")) {
97-
throw new Error("Only opentui issues should be assigned to kommander")
98-
}
51+
const assignee = pick(TEAM[args.team])
9952

10053
await githubFetch(`/repos/${owner}/${repo}/issues/${issue}/assignees`, {
10154
method: "POST",
10255
body: JSON.stringify({ assignees: [assignee] }),
10356
})
104-
results.push(`Assigned @${assignee} to issue #${issue}`)
105-
106-
if (labels.length > 0) {
107-
await githubFetch(`/repos/${owner}/${repo}/issues/${issue}/labels`, {
108-
method: "POST",
109-
body: JSON.stringify({ labels }),
110-
})
111-
results.push(`Added labels: ${labels.join(", ")}`)
112-
}
11357

114-
return results.join("\n")
58+
return `Assigned @${assignee} from ${args.team} to issue #${issue}`
11559
},
11660
})

UPSTREAM.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ Each upstream has its own append-only table. Add a row every time you pull.
7676
| 2026-05-01 | `eb7555d3c` | `bad732c26` | bcode | Merged upstream release point for v1.14.25 (`sync release versions for v1.14.25` on `dev`). 73 upstream commits. **Targeted v1.14.25 instead of latest (v1.14.31, 357 commits)** because v1.14.26 introduces a sweeping refactor — `packages/shared` → `packages/core` rename (PR #24309) + Global module move (`packages/opencode/src/global/index.ts` + `packages/shared/src/global.ts` → `packages/core/src/global.ts`) — that needs design discussion before adoption. Splitting into two syncs keeps each one mechanical. Conflicts: `packages/opencode/package.json` (kept `@browser-use/browsercode-core` name, took version bump to 1.14.25), `bun.lock` (took upstream, regenerated via `bun install`), `.github/workflows/publish.yml` (deleted by us per PR #14, upstream modified — kept our deletion). Yellow-zone audit (4 files: `cli/cmd/tui/app.tsx`, `config/config.ts`, `installation/index.ts`, `session/session.ts`): all auto-merged cleanly, BrowserCode customizations (USER_AGENT, `bcode.sh` URLs, `.bcode` paths, BCODE_UPGRADE_DISABLED block, doc-string overrides) verified present. **Notable upstream change pulled in:** PR #23244 — tool framework + all 18 built-in tools migrated from Zod to Effect Schema. Required adapting our Level-1 `packages/bcode-browser/src/browser-execute.ts` (`z.object` → `Schema.Struct`, `z.infer` → `Schema.Schema.Type`) and Level-2 adapter `packages/opencode/src/tool/browser-execute.ts` (drop `z` import, use `Schema.Schema.Type` for args). Filtered typecheck: 5/5 passed. Next sync should target v1.14.26+ with the shared→core rename as a documented integration step. |
7777
| 2026-05-01 | `bad732c26` | `af3998c8a` | bcode | Merged upstream release point for v1.14.26 (`sync release versions for v1.14.26` on `dev`). 72 upstream commits. **`packages/shared` → `packages/core` refactor.** PR #24309 renamed the directory + npm package (`@opencode-ai/shared` → `@opencode-ai/core`), purely mechanical (166 files, 218/218 lines, all import-string swaps). Five followup commits relocated modules into the new `packages/core/`: Global (from both `packages/opencode/src/global/index.ts` and `packages/shared/src/global.ts` consolidated into `packages/core/src/global.ts`), cross-spawn-spawner, npm service, and effect/util siblings (logger, runtime, observability, memo-map, log, opencode-process). BrowserCode integration: ported single-string divergence `app = "bcode"` from both deleted Global files into the new `packages/core/src/global.ts`; **dropped CACHE_VERSION cache-bust mechanism verbatim with upstream** — confirmed unused for BrowserCode (never bumped, no consumer depends on the wipe; investigated upstream/dev to confirm intentional removal); updated `browser-execute.ts` import `@/global` → `@opencode-ai/core/global` and trimmed CACHE_VERSION reference from comment. Conflicts: `.github/workflows/review.yml` (kept our deletion), `bun.lock` (regenerated), `packages/opencode/package.json` (kept name, bumped to 1.14.26), `packages/opencode/src/agent/agent.ts` (hunk 1 auto-merged: kept browser-sessions whitelist + took upstream's `_ctx`→`ctx` rename; hunk 2 resolved by keeping `.bcode/plans` and adopting upstream's `ctx.worktree`), `packages/opencode/src/global/index.ts` + `packages/shared/src/global.ts` (deleted with upstream). Filtered typecheck: 5/5 passed. |
7878
| 2026-05-01 | `af3998c8a` | `21f8027ef` | bcode | Merged upstream release point for v1.14.31 (`sync release versions for v1.14.31` on `dev`). 212 upstream commits across v1.14.27–v1.14.31. Conflicts: `.github/workflows/{deploy,publish}.yml` (kept our deletions per PR #14), `bun.lock` (regenerated), `packages/opencode/package.json` (kept name, bumped to 1.14.31), `packages/opencode/src/agent/agent.ts` (kept browser-sessions whitelist + took upstream's new `Global.Path.tmp` whitelist addition — both go in the same `whitelistedDirs` array), `packages/opencode/src/config/config.ts` (kept `bcode.json/bcode.jsonc` filenames + `bcode.sh` config schema URL; adopted upstream's `mergeConfig` helper pattern, retiring `mergeDeep(pipe(...))` chain), `packages/opencode/src/session/session.ts` (kept `.bcode/plans` rename; adopted upstream's new `(input, instance: InstanceContext)` signature using `instance.project`/`instance.worktree`), `packages/opencode/src/installation/index.ts` (substantial restructure — upstream switched from explicit `Service.of({...})` to `result: Interface = {...}` pattern with self-referential method calls; took upstream verbatim as the base, then re-applied 5 BrowserCode divergences: USER_AGENT prefix, `https://bcode.sh/install` URL, `.bcode/bin` execPath check, BCODE_UPGRADE_DISABLED const, early-return guards in `latest`/`upgrade`/`info`). Yellow-zone audit (7 files: `cli/cmd/tui/app.tsx`, `agent.ts`, `config.ts`, `installation/index.ts`, `session.ts`, `index.ts`, `core/src/global.ts`): customizations preserved (`scriptName("bcode")`, banner, USER_AGENT, `bcode.sh`, `.bcode` paths, `app = "bcode"`). Filtered typecheck: 5/5 passed. PR #29 (v1.14.25) supersedes — close in favor of this PR which covers the same window plus three additional release points. |
79+
| 2026-05-06 | `21f8027ef` | `773078e81` | bcode | Merged upstream release point for v1.14.39 (`sync release versions for v1.14.39` on `dev`). 178 upstream commits across v1.14.32–v1.14.39. **Notable upstream change pulled in:** PR #20039 — `tool/bash.{ts,txt}` renamed to `tool/shell.{ts,txt}` with sub-folder `tool/shell/{id,prompt}.ts`; `Match` predicate switched from string literal `"bash"` to `ShellID.ToolID`. Auto-merge handled the rename inside our session/index.tsx; only the import block needed manual resolution (kept our `BrowserExecuteTool` import, took upstream's `ShellTool` + `ShellID` imports). **CLI Effect-ification:** `cli/cmd/{run,serve,web,agent}.ts` switched from `async (args) => {...}` handlers to `Effect.fn("Cli.<name>")(function* (args) {...})` form (also adds new `instance: false` and `directory: ...` fields to delegate context loading to the framework). Resolved by adopting upstream handler shape verbatim and re-applying our `bcode` brand strings in `describe:` fields. `cli/cmd/agent.ts` also dropped a level of indentation (legacy nested-effect block) and switched from `Instance.worktree`/`AppRuntime.runPromise(Agent.Service.use(...))` to `ctx.worktree`/`Effect.runPromise(agentSvc.generate(...))`; took upstream wholesale, flipped post-merge `.opencode` → `.bcode` (one site). Conflicts: `.github/workflows/publish.yml` (re-deleted per PR #14), `bun.lock` (regenerated), `README.md` (kept our concise replacement, dropped upstream's reintroduced FAQ/Discord block), `packages/opencode/package.json` (kept name, bumped to 1.14.39), `cli/cmd/{agent,run,serve,web}.ts` (Effect-ification + brand strings), `cli/cmd/tui/routes/session/index.tsx` (Bash→Shell import block). Yellow-zone audit (9 files touched upstream: `core/src/global.ts`, `script/build.ts`, `cli/cmd/tui/app.tsx`, `cli/cmd/tui/routes/session/index.tsx`, `config/config.ts`, `plugin/index.ts`, `provider/provider.ts`, `session/session.ts`, `storage/db.ts`): customizations preserved (`app = "bcode"`, banner+title BrowserCode, BC-prefixed session title, `bcode.json/bcode.jsonc/.bcode/`, `bcode.sh` schema URLs, `bcode.db`, `.bcode/plans`, `bcode-<target>` asset name, BrowserExecute renderer, attribution headers `https://bcode.sh/`/`X-Title: bcode`). Filtered typecheck: 5/5 passed in 13.8s. |
7980

8081
### browser-use/browser-harness → `packages/bcode-browser/harness/`
8182

0 commit comments

Comments
 (0)