Repository navigation
Conversation
opencode 2.x replaced the HTTP API: routes moved under /api/, the SSE envelope
changed from {"payload":{id,type,properties}} to {id,type,data}, message/part
payloads were renamed (Session.Info, Message.Info, UserMessage/AssistantMessage),
and question prompts became server-side forms. `npm install -g opencode-ai` still
installs the 1.x line (1.18.32 as of 2026-09-24), so a client has to speak both
APIs.
v2 client (src/lib/sdk.ts, src/lib/v2-shape.ts):
- /api/... endpoints, the v2 message shapes, interrupt, staged revert, session diff
- SSE via /api/event; the question tool arrives as a form nested under data.form on
form.created - reading it flat silently dropped every prompt
- session-scoped permission and form replies
v1 client (src/lib/sdk-v1.ts, src/lib/api-detect.ts):
- the transport main already ships, restored unchanged (sessions, prompts, abort,
revert, diff, questions, permissions, agents, commands, providers, file browsing)
- a connect-time probe classifies the server by response content type: unknown
routes on both server generations answer 200 text/html through the web SPA, so
status codes cannot discriminate. /api/info JSON means v2, /global/health JSON
means v1; api + serverVersion are recorded on the connection and createClient()
dispatches on them
Message UI:
- selection and copying rework around MessageTextSheet: Select text / Edit are
header buttons and the sheet renders the whole message (text, reasoning, tool
input/result/error, files) in a plain ScrollView where native selection works,
with Copy all as the whole-message fallback. The bubble has no press at all: a
press whose movement stays inside its bounds is kept by the touchable, which
opened the message menu mid-scroll.
- inline selection is iOS-only for user message text, message error text, code
lines and diff lines: selectable <Text> inside FlatList rows is the Android bug
(react-native#46999, still open) that Markdown.tsx already works around.
ToolCallCard, ReasoningBlock, ErrorBoundary and Markdown.tsx are unchanged.
- wide code and diff lines wrap instead of scrolling sideways; CodeBlock's Copy
still hands the clipboard the original string, so pasted code is byte-identical
- keyboard avoidance via react-native-keyboard-controller, including system-bar
insets, so the composer is never hidden behind the keyboard; SSE reconnects on
app foreground
Verified against live servers: opencode 2.0.16 (v2 endpoints, and the question path
replayed from a captured form.created stream) and opencode 1.18.32 (`opencode
serve`: health, project, path, session create/list/update/delete/abort/messages,
agents, commands, questions, permissions, providers, and the wrapped {"payload":...}
event stream through the existing unwrap in stores/events.ts).
docs/v2-api-map.md records the verified API maps, event schemas and probe behaviour
for both server generations.
Signed-off-by: bluetoe-99 <102478736+bluetoe-99@users.noreply.github.com>
…ired) from rejected credentials The health probe only sends Authorization when a password is filled in. A 401/403 in that state says nothing about the saved password — the user may simply not have typed it yet — but classify() reported it as "the server rejected your credentials", sending people re-typing a perfectly good password (seen live against a self-hosted server that protects /global/health). - ProbeAttempt gains authProvided, set by probeConnection from the auth it sent - classify(): 401/403 + !authProvided -> new auth-required classification with an "enter the password" message instead of "rejected your credentials" - sentry-noise: auth-required joins the auth-failed drop family (user config) - tests for all four combinations
This was referenced Nov 1, 2026
Owner
|
Owner decision (2026-11-07): closing as superseded. OpenCode v2 support shipped in v0.4.16 (2026-11-01) and v0.4.17 is current, so this branch no longer applies cleanly to the product. If specific Android stability fixes are still needed on current main, please open a fresh, narrow PR for just those. Thank you for the work. |
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.
Supersedes #218 with a clean branch based on current
main, without rewriting the published PR branch. Incorporates the transport work and authorship from #209.What changed
cc.agentlabs.opencode.testAndroid artifact while preserving production identityValidation
npm test(411 passing)npm run typechecknpm run check:versionsnpm run check:android-identitiesnpx expo prebuild --platform android --no-install --clean./gradlew assembleRelease assembleTestRelease -PtestVersionCode=45Fresh live v2/cross-client testing remains dependent on a reachable server. Device installation remains dependent on a reachable ADB target.