Repository navigation
chore(opencode): qualify and recommend runtime 2.2.1 - #1188
Merged
Merged
Conversation
OpenCode 2.2.1 is the latest stable release. Its authenticated OpenAPI, published client/schema/plugin declarations and host plugin modules keep every contract CodeNomad consumes: the 103 consumed schemas are byte-identical from 2.1.4, admission predicates hold, and new routes stay off the proxy allowlist. The recommendation moves to 2.2.1; the 2.1.2 minimum and the 2.1.0 client/plugin pins stay. 2.1.2, 2.1.4 and 2.2.0 daemons remain ready with an optional upgrade offer, and the reviewed-contract fast path lists 2.1.2 and 2.2.1. Help in all ten locales, both READMEs, CONTRIBUTING.md, OPENCODE_COMPATIBILITY.md and the architecture skill name the new recommendation. Validation: every native suite against the exact 2.2.1 CLI on Windows (Code Mode, plugins, pruning, Missions and all recurring journeys, sessions, providers, migrations from 2.1.0/2.1.2/2.1.4/2.2.0, install/upgrade/legacy replacement), compatibility units 35/35, full server units, and the ten-locale help checks.
Contributor
Author
|
Gatekeeper review Round 1: no code or documentation defects. Every recommendation reference moved to 2.2.1 consistently across code, tests and all ten help locales; historical references (e.g. session-identity fixtures) are intact, and the scope matches #1126. Compatibility/transport/update units pass 35/35. Admission accepts the saved 2.1.4, 2.2.0 and 2.2.1 runtime schemas, and all 14 new operations stay outside the proxy allowlist. Two P3s on the PR body, both fixed:
Round 2: both P3s resolved; compaction coverage confirmed ( ZERO FINDINGS |
shantur
added a commit
that referenced
this pull request
Oct 29, 2026
…ixes (#1192) # CodeNomad 1.0.1 - Steadier Missions, ranked history search and Linux fixes CodeNomad 1.0.1 removes the Missions project limit, makes mission states easier to read, and adds relevance-ranked search across a project's history. It also fixes transcripts and questions that could stay stale after a dropped connection, and fixes Linux AppImage display and F11 problems. ## Missions - A project is no longer limited to 20 missions, and storage limits now apply to each mission rather than the whole project. Deleted missions release their storage once their cleanup is done, and the Missions panel loads closed missions as lightweight summaries, so long mission histories stay fast (#1170, #1173, #1175, #1176, #1177, #1178, #1180). - Mission colours now follow the session list: red when an answer is needed, pulsing yellow for running work, orange for interrupted or paused missions, green for an unseen completion, and blue for a prepared mission that hasn't started. The collapsed chevron only signals answers, running work and unseen completions (#1150, #1155). - A coordinator can no longer end a one-time mission as failed on its own. When it can't continue, it asks you; a mission that stalls shows as **Interrupted** and can be resumed with **Recover interrupted mission**, including previously failed missions (#1150, #1151). - The creation form now takes up the whole Missions panel and includes the project's subagent nesting depth. An unsent draft is kept when you switch right-panel tabs or projects (#1142, #1155). - Fixed recurring missions never starting on OpenCode 2.2.0. A failed first start of a recurring run now shows a warning right away and retries after 30 seconds (#1158, #1171). - Fixed missions on OpenCode Zen's free models being refused at the coordinator's first request because of the mission session identifier format (#1133). - Fixed nested subagents stopping at depth 1 when a project config was left with an empty `experimental` block. **Inherit** now removes that empty block, and the shown depth matches what OpenCode applies (#1153). - The help now explains that a running one-time mission keeps going in OpenCode while CodeNomad is closed, and lists what waits for the backend (#1137). ## History and search - In the transcript search window, project-wide search now ranks results by relevance (rare words weigh more, exact phrases first, one result per conversation before repeats) and highlights every term. Conversation search stays chronological (#1161, #1164). - Project search scans the most recent 16,384 messages first, shows up to 40 results, and can search further back in older history (#1182). - Agents can search the project's past sessions themselves with the `session_search` Code Mode tool, which stays limited to the calling session's project (#1161, #1182). - History, cleanup and attachment views now read files stored with OpenCode 2.2.0's opt-in media blobs correctly. Before, cleanup could report a false conflict and attachments could look unavailable (#1172). ## Transcript and connection reliability - Opening a session that is already generating (after a restart, or from a subagent box) now shows its transcript and keeps streaming, instead of staying empty or frozen (#1156, #1181). - Tool rows that stayed "pending" after a missed event now settle on their own, including when the turn ended during a disconnect. A queued prompt delivered during a disconnect now appears in the transcript (#1169, #1184, #1187). - Missed questions now appear within seconds on unstable connections, such as a phone going through a tunnel. CodeNomad reconnects a stream that has gone silent, rechecks when the network comes back or the app returns to the foreground, and fetches a question the transcript shows as running when its form never arrived (#1162, #1165). - New session now shows a spinner while it is being created on a slow network. Repeated clicks or shortcuts no longer create duplicate sessions, and a failure shows an alert (#1157). - Sessions and permission requests of a repository opened as its own project no longer show up in a parent folder's project (#1174). - Session alerts, such as a usage-limit error, no longer appear a second time in the Preferences window (#1163). ## Panels and previews - When the window narrows, each panel shrinks once and then hides, and widening restores the same layouts in reverse. A panel that loses its room closes and comes back when the room returns. On phones and narrow windows, picking a session from the floating session panel closes the panel (#1144, #1149). - The active project tab can grow to 300 px so long project names fit (#1166). - Clicking a `localhost` link in a conversation opens it in the session's web preview; Ctrl+click (⌘-click on macOS) or middle-click still opens your browser. Apps that use `localStorage`, `sessionStorage` or cookies now work inside the preview (#1119). - Paired Remote Control devices can now use web previews, controlled by a new **Web previews** switch in Remote Control settings (on by default). SideCar connections now refuse requests from sandboxed pages (#1131, #1135). ## Desktop and Linux - Fixed a black window in the Linux AppImage on up-to-date systems: the AppImage now uses the system's display libraries (#1138). - Fixed F11 freezing the Linux app under X11/XWayland (#1143). - The CodeNomad server package now starts when installed with pnpm (#1186). ## Upgrade OpenCode 2.2.1 is now the recommended runtime; 2.1.2 remains the minimum, and 2.1.2, 2.1.4 and 2.2.0 keep working with an optional upgrade offer (#1188).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
testedversion. Newer and custom labels keep authenticated contract recognition.CONTRIBUTING.md,dev-docs/OPENCODE_COMPATIBILITY.mdand the architecture skill.Contract review (v2.1.4 → v2.2.0 → v2.2.1; 661 + 134 commits)
Reviewed from the exact tags
v2.1.4(68bc26b7da),v2.2.0(1097e2668b) andv2.2.1(3ebcf9a32c), the published npm packages, and an authenticated OpenAPI dump from each official CLI running in its own sandbox. The changelog covers 2.2.0. It had no 2.2.1 entry at review time (29 October), so 2.2.1 was reviewed from its commit log.packages/protocol/openapi.json.GET /api/plugin/gui;POST /api/experimental/generate/{text,image,decisions};POST/DELETE /api/experimental/fs/watch;GET /api/experimental/media/{hash}; andGET /api/experimental/usage/limits.POST /api/experimental/voice/session/{sessionID}/instructions./api/experimental/scheduleoperations (list, create, get, delete, pause, resume), gated byexperimental.schedules.GET /api/modelgains an optionaltypesfilter. Without it the route lists chat models only. Image and decision models are new in 2.2.0, so the default listing matches 2.1.4.GET /api/eventgains an optionaltypesfilter.GET /api/vcs/diffgains an optionaluntrackedparameter.POST /api/experimental/generatebecomes the deprecated alias of/generate/text.LocationNotFoundErrorfrom their 404 responses: they no longer boot a Location (#58997).GET /api/agentcan now answer 503 while plugins settle (#59082).experimental.*. Their paths are unchanged.V2EventEncoded,Session.*(messages, parts, inbox, info),Form.*,Permission.*,Prompt*,Event.*,Location.*and PTY/Shell. The session prompt, environment, message, form/permission reply and RPC operations are unchanged too. The onlyConfig.InfoEncodedchanges are additive opt-ins:experimental.media_blob,experimental.image_generate,experimental.schedulesandtimezone. Modeltype, prompt-cachecachesettings,FileDiff.Info.more,Mcp.Server.titleandServerInfo.hostnameare additive fields.compatibility/negotiate.tschecks holds on 2.2.0 and 2.2.1. That covers the canonical API,session_environmentand the 2.1 replay shape (nativewithoutstate, compactionmetadatawithoutrecent).client.experimental.*. The only removal isvoice.instructions, which CodeNomad doesn't use. 2.2.1 doesn't send theexperimental-media-uricapability, so media reads stay inline.MediaRef,Session.Message.MediaUser, inboxMediaUserPayload),generate,usage-limitsandModel.Type. 2.2.1 addsgoalandschedule. The one removal since 2.1.0 isSessionEvent.Source(2.1.4).gui/*SDK (excluded from the host runtime) andHost.packageID. 2.2.1 addsSessionIdle/SessionIdleBackground. The eventsubscribedomain gains an optionaltypesfilter; CodeNomad's plugins don't subscribe through it.pathsoverrides. The pinned 2.1.0 control is also clean.@opencode/plugin(Plugin),/effect(Plugin,Rpc,Location),/promise/adapter(fromPromise),/rpc(Rpc),effectandeffect/encoding(Base64Url) from the host.@opencode/schemaand@opencode/clientare bundled from the 2.1.0 pins, and@opencode/schema/locationimports are type-only. A probe plugin loaded in an isolated 2.2.1 daemon resolves every one of these modules and bindings, as on 2.1.4. The host Effect stays 4.0.1, with the same lockfile hash.LocationServiceMap,Form,Permission,Location,Job,Database,SessionandBus. Their keys are unchanged at v2.2.1, and the members CodeNomad calls are unchanged. The changes are additive:Permission.assertNotDenied,Session.*WithRefs, animageJob kind, andLocationServiceMap.canonicalnormalizing paths.blob/blob_ref(always created; written only withexperimental.media_blob) andscheduleare new.session_pendingis dropped; CodeNomad never reads it. Asession_v2.allowancecolumn is added and dropped within 2.2.0.session_message,session_v2,session_inbox,event,event_sequence,kv) keep their shape.media-blob.tsalready projectsmedia:<sha256>refs.media_blobexplicitly, so the always-presentblobtable doesn't change its expectation.session_inboxonly by count and ID in production code.{ total: 2000, beforeAwait: 1000, count: 1000 }.[]without booting a cold Location (#59083). Forms are in memory, so nothing pending is hidden. This matches CodeNomad's existing-only pending reader.session.createdirectories are canonical on POSIX too: trailing slash removed,posix.normalize(#59327). Windows already normalized. This is low risk; it was reviewed in source only, since the location and ownership fixtures run on Windows and the POSIX certification covers migration, Code Mode and Git-degraded.location-activity.tsonly canonicalizes paths and generalizes Job kinds. Long-waiting Missions sessions keep their Location as on 2.1.4.XDG_STATE_HOME(#58815); CodeNomad never sets it. TheOPENCODE_SERVER_USERNAMEchange was added and reverted within 2.2.0. Detached POSIX children are killed when OpenCode exits; service start uses its own spawn path.experimental.schedules;image_generateneedsexperimental.image_generate;/goalruns only when invoked;Verdict: no consumed contract changed from 2.1.4 to 2.2.1.
Bumping the pins is optional. It would bring the 2.2 client's discard-tool-result-payload option and its "register running sessions missed while disconnected" fix (#53012). It would also move the replay reducer, so it belongs in its own PR. The UI and server already typecheck against 2.2.1.
Not verified here:
Plugin.define,ctx.data.sessionandctx.data.listen, so the 0.7 renderable changes don't apply, but this wasn't run;Isolated Windows qualification
Base: dev
157766206; Node 25.2.1 (local; CI runs the pinned 24.20.0); exact official CLI 2.2.1; unchanged locked client/plugin 2.1.0.{ total: 2000, beforeAwait: 1000, count: 1000 }on 2.2.1), plugin runtime, automation; complete pruning, history, proxy, navigation and media; Location, worktree families/management and event relay; permission receipts; Git init/degraded.ABCDGELFWQN).--conditions=browser, as in CI), compaction isolation, prompt skills, provider usage/accounts/selection, service usage, web search, plugin packages, output limit, Promise-tool failure, subagent depth, temporary workspaces.index.test.tsshutdown test timed out at 5 s under full-suite load and passes 4/4 alone); ten-locale help checks pass.In CI,
latestresolves to 2.2.1: the compatibility job runs the native suites against the minimum and latest on Windows, and the migration and Git-degraded certification runs them on Ubuntu, Windows and macOS. WSL, packaged desktop, installers/updater end-to-end and real mobile devices keep their separate release gates.