sync: upstream v1.14.41 (fe594693a on dev)#57
Conversation
…ey (#24432) (#25573)
…ndencies (#25996)
Co-authored-by: jesse.mahnken <jesse.mahnken@tiefox.de>
Co-authored-by: LukeParkerDev <10430890+Hona@users.noreply.github.com>
…6037) Co-authored-by: Aiden Cline <aidenpcline@gmail.com>
There was a problem hiding this comment.
5 issues found across 193 files
Prompt for AI agents (unresolved issues)
Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.
<file name="infra/app.ts">
<violation number="1" location="infra/app.ts:33">
P1: The new early return skips `SYNC_SERVER` binding setup for the `vimtor` stage, which breaks share endpoints that require this binding.</violation>
</file>
<file name="packages/desktop/src/main/apps.ts">
<violation number="1" location="packages/desktop/src/main/apps.ts:61">
P1: `resolveWindowsAppPath` is using `execFilePromise` without `await`, so it parses a Promise object string instead of `where` output and fails to resolve paths.</violation>
</file>
<file name="packages/console/app/src/routes/honeycomb/webhook.ts">
<violation number="1" location="packages/console/app/src/routes/honeycomb/webhook.ts:64">
P2: Handle malformed JSON bodies before schema validation; otherwise invalid JSON returns 500 instead of 400.</violation>
<violation number="2" location="packages/console/app/src/routes/honeycomb/webhook.ts:79">
P2: Catch webhook delivery exceptions so network failures return the intended 502 response instead of an unhandled 500.</violation>
</file>
<file name="packages/opencode/src/config/config.ts">
<violation number="1" location="packages/opencode/src/config/config.ts:552">
P2: Validate that fetched remote config JSON is an object before merging; currently non-object responses can break config loading at runtime.</violation>
</file>
Note: This PR contains a large number of files. cubic only reviews up to 75 files per PR, so some files may not have been reviewed. cubic prioritizes the most important files to review.
On a pro plan you can use ultrareview for larger PRs.
Fix all with cubic
| transform: { | ||
| worker: (args) => { | ||
| args.logpush = true | ||
| if ($app.stage === "vimtor") return |
There was a problem hiding this comment.
P1: The new early return skips SYNC_SERVER binding setup for the vimtor stage, which breaks share endpoints that require this binding.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At infra/app.ts, line 33:
<comment>The new early return skips `SYNC_SERVER` binding setup for the `vimtor` stage, which breaks share endpoints that require this binding.</comment>
<file context>
@@ -30,6 +30,7 @@ export const api = new sst.cloudflare.Worker("Api", {
transform: {
worker: (args) => {
args.logpush = true
+ if ($app.stage === "vimtor") return
args.bindings = $resolve(args.bindings).apply((bindings) => [
...bindings,
</file context>
| if ($app.stage === "vimtor") return | |
| // Do not return early here; SYNC_SERVER bindings/migrations are required for API share routes. |
| let output: string | ||
| try { | ||
| output = execFileSync("where", [appName]).toString() | ||
| output = execFilePromise("where", [appName]).toString() |
There was a problem hiding this comment.
P1: resolveWindowsAppPath is using execFilePromise without await, so it parses a Promise object string instead of where output and fails to resolve paths.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At packages/desktop/src/main/apps.ts, line 61:
<comment>`resolveWindowsAppPath` is using `execFilePromise` without `await`, so it parses a Promise object string instead of `where` output and fails to resolve paths.</comment>
<file context>
@@ -32,26 +40,25 @@ export function wslPath(path: string, mode: "windows" | "linux" | null): string
let output: string
try {
- output = execFileSync("where", [appName]).toString()
+ output = execFilePromise("where", [appName]).toString()
} catch {
return null
</file context>
| output = execFilePromise("where", [appName]).toString() | |
| output = (await execFilePromise("where", [appName])).stdout.toString() |
| return Response.json({ message: "ignored" }, { status: 200 }) | ||
| } | ||
|
|
||
| const response = await postDiscordMessage(parsed.data) |
There was a problem hiding this comment.
P2: Catch webhook delivery exceptions so network failures return the intended 502 response instead of an unhandled 500.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At packages/console/app/src/routes/honeycomb/webhook.ts, line 79:
<comment>Catch webhook delivery exceptions so network failures return the intended 502 response instead of an unhandled 500.</comment>
<file context>
@@ -0,0 +1,85 @@
+ return Response.json({ message: "ignored" }, { status: 200 })
+ }
+
+ const response = await postDiscordMessage(parsed.data)
+ if (!response.ok) {
+ return Response.json({ message: "discord webhook failed" }, { status: 502 })
</file context>
| return Response.json({ message: "invalid token" }, { status: 401 }) | ||
| } | ||
|
|
||
| const body = await input.request.json() |
There was a problem hiding this comment.
P2: Handle malformed JSON bodies before schema validation; otherwise invalid JSON returns 500 instead of 400.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At packages/console/app/src/routes/honeycomb/webhook.ts, line 64:
<comment>Handle malformed JSON bodies before schema validation; otherwise invalid JSON returns 500 instead of 400.</comment>
<file context>
@@ -0,0 +1,85 @@
+ return Response.json({ message: "invalid token" }, { status: 401 })
+ }
+
+ const body = await input.request.json()
+ console.log(body, JSON.stringify(body, null, 2))
+
</file context>
| if (!response.ok) | ||
| throw new Error(`failed to fetch remote config from ${remote.url}: ${response.status}`) | ||
| const data = await response.json() | ||
| return isRecord(data) && isRecord(data.config) ? data.config : data |
There was a problem hiding this comment.
P2: Validate that fetched remote config JSON is an object before merging; currently non-object responses can break config loading at runtime.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At packages/opencode/src/config/config.ts, line 552:
<comment>Validate that fetched remote config JSON is an object before merging; currently non-object responses can break config loading at runtime.</comment>
<file context>
@@ -501,8 +531,28 @@ export const layer = Layer.effect(
+ if (!response.ok)
+ throw new Error(`failed to fetch remote config from ${remote.url}: ${response.status}`)
+ const data = await response.json()
+ return isRecord(data) && isRecord(data.config) ? data.config : data
+ })) as Record<string, unknown>)
+ : {}
</file context>
| return isRecord(data) && isRecord(data.config) ? data.config : data | |
| if (isRecord(data) && isRecord(data.config)) return data.config | |
| if (isRecord(data)) return data | |
| throw new Error(`invalid remote config payload from ${remote.url}: expected object JSON`) |
Summary
Brings
anomalyco/opencodeup to v1.14.41 (fe594693aondev). 70 upstream commits across v1.14.40 – v1.14.41.Targeted v1.14.41 instead of latest (v1.14.48, 289 commits) because v1.14.42 lands three sweeping refactors that warrant separate review:
Splitting keeps each sync mechanical. The v1.14.42+ window jumps from 214 files touched to 649; that's the structural-refactor signature we agreed to flag instead of swallow whole.
Notable upstream changes pulled in
.well-known/opencodenow supports an externalremote_configURL with substitution + headers. Adopted upstream's new fetch-and-merge body inconfig/config.tsverbatim, kept ourbcode.sh/config.jsondefault$schema.agent/→agents/(PR #14427) — adopted as.bcode/agents/for consistency. Updatedcli/cmd/agent.tscreate-target path andfeature-plugins/home/tips-view.tsxtip string.config/agent.ts:129already accepted both glob patterns, so existing.bcode/agent/setups keep working.packages/core/).Conflicts resolved
README.{ar,bn,br,bs,da,de,es,fr,gr,it,ja,ko,no,pl,ru,th,tr,uk,vi,zh,zht}.md.github/workflows/deploy.ymlREADME.mdbun.lockbun installpackages/opencode/package.json@browser-use/browsercode-core, bumped to 1.14.41packages/opencode/src/cli/cmd/agent.ts.opencode/agentsrename, flipped to.bcode/agentspackages/opencode/src/config/config.tsbcode.shschema URLYellow-zone audit
11 files touched upstream:
core/src/global.ts,packages/opencode/src/agent/agent.ts,cli/cmd/{agent,run,serve,web}.ts,cli/cmd/tui/{app.tsx,routes/session/index.tsx},config/config.ts,provider/provider.ts,session/session.ts.Customizations preserved:
app = "bcode", BC banner+title, BrowserCode GitHub link,bcode.shHTTP-Referer/X-Title/X-Source across 8 providers, CerebrasX-Cerebras-3rd-Party-Integration: bcode,.bcode/plans,Skillsimport, BrowserExecute renderer.Verification
bun install: clean (lockfile regenerated)bun run typecheck: 6/6 passed in 8.7sNext sync
Target v1.14.48 in a follow-up PR. v1.14.42 is the gate — needs design discussion on:
OPENCODE_EXPERIMENTAL_WORKSPACES, low risk if we leave the flag off, but thepackages/core/src/workspace/*additions arrive either way.