refactor(server): simplify router middleware with next()#21720
Merged
Conversation
Contributor
There was a problem hiding this comment.
Your free trial has ended. If you'd like to continue receiving code reviews, you can add a payment method here.
…quest processing - Moves error handler registration to the root app instead of each sub-route - Ensures consistent error responses across all API endpoints - Removes unused imports and simplifies route composition
…ver.Default() synchronous Removes unnecessary await calls on Server.Default() throughout the codebase, simplifying the server initialization flow and removing async overhead for faster startup.
Enables running the agent on Bun runtime in addition to Node.js by abstracting server initialization into runtime-specific adapters. The server will automatically use Bun's native APIs when available.
The previous test was measuring heap growth while running inside the shared Instance context, which included unrelated tool runtime state that could obscure the actual abort controller leak signal. Now the fetch operations run in a dedicated Bun worker process, giving a clean baseline for memory measurement that accurately reflects whether abort listeners are being properly cleaned up after timed fetches.
…space event routing Refactors the core service layer from ServiceMap to Context for better composability and testability. This enables more reliable workspace switching in the TUI by properly scoping events to active workspaces. Key changes: - Migrate all services from ServiceMap to Effect Context pattern - Add AppRuntime and BootstrapRuntime for unified effect execution - Introduce WorkspaceContext for proper workspace scoping - Refactor TUI event system with dedicated Event context provider - Update tool system to return Effects instead of Promises - Add workspace status tracking and connection state events - Ensure session operations work reliably across workspace boundaries This provides the foundation for robust multi-workspace support where sessions and events are properly isolated per workspace.
the cleanup work is complete so automated publishes no longer need to run on this temporary branch
mrsimpson
pushed a commit
to mrsimpson/opencode
that referenced
this pull request
Apr 14, 2026
apstenku123
added a commit
to apstenku123/opencode
that referenced
this pull request
Apr 18, 2026
Adds a Python pytest e2e harness + five tests that drive a real
`opencode serve` subprocess over HTTP + SSE against a live LLM
(github-copilot#personal/claude-opus-4.6 by default, overridable via
`OPENCODE_E2E_MODEL`). No provider mocks. Tests validate the autosteer
detector by tuning `autosteering.{planningPhrases,actionMarkers,
similarityThreshold,stagnationTrigger}` via `opencode.json`, then
observing the `session.autosteer.nudge` SSE event and the
`/config/autosteering` GET counter (same surfaces the TUI sidebar reads).
Covers:
1. enabled + two stagnant turns → nudge fires.
2. disabled → no nudge on same input.
3. similarity path fires when threshold is met (Jaccard).
4. action markers suppress the planning-only classification.
5. cumulative counter increments per nudge, visible on GET
`/config/autosteering`.
Also wires back `WorkspaceRouterMiddleware` in `server.ts` (dropped
by anomalyco#21720 refactor), without which thread/session HTTP routes fail
with `No context found for instance` — the middleware is what plumbs
the per-request `directory`/`x-opencode-directory` into `Instance.provide`.
Default driver is from-source (`bun run src/index.ts serve`) so the
harness picks up uncommitted server edits without a binary rebuild;
toggle via `OPENCODE_E2E_FROM_SOURCE=0` to use a prebuilt binary.
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
Refactors the server router middleware to use Hono's
next()function instead of manually invoking routes.Changes
lazy,InstanceRoutes)nextparameter to middleware handlerroutes().fetch(c.req.raw, c.env)calls withnext()This simplifies the middleware by leveraging Hono's built-in middleware flow control.