Merge upstream opencode v1.17.14
Merged
KE
3mo ago+152603+152603+012345678901234567890123456789012345678901234567890123456789-38641-38641-01234567890123456789012345678901234567890123456789
TL;DR
Upstream v1.17.14 merged into dev, every fork patch preserved. This unlocks code mode (dark by default) โ measured โ51% session cost in the prod A/B. The merged tree is byte-identical to the fully-tested branch: nothing in this PR is untested.
flowchart TD
UP["upstream v1.17.14<br/>152k lines, already shipped upstream"] --> M
DEV["dev<br/>our 27-patch fork stack"] --> M
M["THIS PR: merge commit<br/>only 9 files / 21 hunks hand-resolved"] --> A
A["adaptation commits (this PR)<br/>API adapt + mock-free test + CI margin"] --> R
R["cut release v1.17.14-1"] --> P
P["andytown 25010<br/>fleet pins, 2 lines"] --> F
F["andytown 25011<br/>code-mode flag = minus 51 percent cost"]
๐ฏ Review in 3 steps (~10 min)
- (https://github.com/replohq/replopencode/pull/16/commits/5af16e9ba2cda089088852280292c7c21142682f), this is what actually changed on this version vs what opencode has natively. โ this is the actual review
- Our fork surface on the new base - sanity-check the 56-file footprint survived intact (+1,651/โ106 โ 7 lines smaller than before the bump)
- Skim the upstream release notes (folded below) โ that code already shipped to upstream users; it is not ours to review
๐ฅ The 2 conflict files that matter
src/mcp/index.tsโ 10 hunks. Upstream added per-serverinstructionstracking in the exact spots our live-headersauth-rotation patch (REPL-29064) lives. Resolution: state, interfaces,storeClientsignature, and every lifecycle callsite carry both.src/session/processor.tsโ 4 hunks. Upstream deleted the v2 dual-write blocks our TTFT stamps sat next to. Resolution:firstTokenAt/requestStartAtre-anchored to the newreasoning-start/text-startcases; dropped the removedcurrentTextIDfield.
๐งฉ The other 7 conflict files (1 hunk each โ click to expand)
src/server/event.tsโ upstream moved server events into@opencode-ai/schema/server-event; our fork-onlyglobal.reloadednow composes{ ...ServerEvent, Reloaded }via the schema package'sEvent.definesrc/server/routes/instance/httpapi/server.tsโ upstream replacedLayerNode.buildLayerwithAppNodeBuilderV1.build; our hoisted sharedappLayer(the per-listener memoMap singleton sharing SIGHUP reload depends on) adopts the new APIsrc/lsp/lsp.tsโ import adjacency: our stall-watchdogbreadcrumb(REPL-28760) beside upstream's newLspEventimport; unionsrc/session/tools.tsโ import adjacency:breadcrumbbeside upstream's new MCP-resource constants; uniontest/session/prompt.test.tsโ upstream rewrote the MCP mock into amakeMcpfactory; ourrefreshHeadersmock line added to ittest/server/httpapi-v2-location.test.tsโ our REPL-30054 quarantine carried onto upstream's rewritten test (still asserts the exact surface the leak broke; un-skip candidate if CI proves it stable here)bun.lockโ took upstream's wholesale; branch lockfile is byte-identical to v1.17.14's
๐ฆ What's in upstream 1.17.10 โ 1.17.14 (already live upstream)
- 1.17.10 โ MCP resources + resource templates, MCP server instructions in session context
- 1.17.11 โ session snapshots + revert controls
- 1.17.12 โ MCP OAuth fixes (reconnect, refresh-token scope, per-URL auth status), skill caching fixes
- 1.17.13 โ reasoning-mode fixes for OpenAI-compatible deployments
- 1.17.14 โ code-mode MCP adapter (
executetool, hidden unless enabled) + paginated MCP tool catalogs
โ Already verified โ on this exact tree
- Typecheck + 176 targeted tests green under repo-pinned bun 1.3.14, including the serve SIGHUP subprocess lifecycle tests
- Release build + throwaway-HOME installer verify (
Replopencode vโฆ, SIGHUP smoke) - Production sandbox soak: in-place SIGHUP reload (same pid),
harness reload+mcp headers refreshedlogs, full product sessions - A/B vs
1.17.9-8on real customer prompts: โ51% cost, 1.2โ2ร faster, zero errors (thread)
๐ฆ Landing order
This PR (now carries the #17 adaptations โ GitHub shows #17 as merged into this branch) โ cut v1.17.14-1 โ andytown#25010 (pins) โ andytown#25011 (flag). Merge normally โ no force-push choreography.
Supersedes #14/#15 โ the rebase-style split could never merge green into a dev that already carries the patch stack. This merge-train sets the convention for future base bumps.
๐ค Generated with Claude Code