Skip to content

refactor(server): simplify router middleware with next()#21720

Merged
thdxr merged 12 commits intodevfrom
server-cleanup
Apr 11, 2026
Merged

refactor(server): simplify router middleware with next()#21720
thdxr merged 12 commits intodevfrom
server-cleanup

Conversation

@thdxr
Copy link
Copy Markdown
Member

@thdxr thdxr commented Apr 9, 2026

Summary

Refactors the server router middleware to use Hono's next() function instead of manually invoking routes.

Changes

  • Removed unused imports (lazy, InstanceRoutes)
  • Removed lazy initialization of routes
  • Added next parameter to middleware handler
  • Replaced routes().fetch(c.req.raw, c.env) calls with next()

This simplifies the middleware by leveraging Hono's built-in middleware flow control.

Copy link
Copy Markdown
Contributor

@greptile-apps greptile-apps Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Your free trial has ended. If you'd like to continue receiving code reviews, you can add a payment method here.

thdxr added 10 commits April 9, 2026 22:46
…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.
thdxr added 2 commits April 11, 2026 16:49
…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
@thdxr thdxr merged commit ca5f086 into dev Apr 11, 2026
4 checks passed
@thdxr thdxr deleted the server-cleanup branch April 11, 2026 20:55
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.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant