Dashboard › opencode › Session 1FLx4HpiJsUe
1FLx4HpiJsUezN8RmRead-only investigation in /home/byk/Code/opencode. Trace how the legacy server version represented by current source returns HTTP 499 for GET /provider, /config/providers, /command, /mcp when a project-scoped Instance bootstrap or cached service promise is aborted. Find exact source files/symbols and likely shared dependency among these routes. Also locate APIs or code paths to dispose/reload one project Instance without restarting server. Do not edit anything. Return concise file:line evidence and hypotheses ranked by confidence. Thoroughness: very thorough.
<path>/home/byk/Code/opencode</path> <type>directory</type> <entries> .dockerignore .editorconfig .git/ .gitattributes .github/ .gitignore .gitleaksignore .husky/ .lore.md .node-cache/ .opencode/ .oxlintrc.json .prettierignore .turbo/ .vscode/ .zed/ AGENTS.md artifacts/ bun.lock bunfig.toml CONTEXT.md CONTRIBUTING.md flake.lock flake.nix github/ infra/ install LICENSE nix/ node_modules/ package.json packages/ patches/ perf.data perf.data.old perf/ pnpm-lock.yaml pnpm-workspace.yaml README.ar.md README.bn.md README.br.md README.bs.md README.da.md README.de.md README.es.md README.fr.md README.gr.md README.it.md README.ja.md README.ko.md README.md README.no.md README.pl.md README.ru.md README.th.md README.tr.md README.uk.md README.vi.md README.zh.md README.zht.md screenshot-uk.png script/ sdks/ SECURITY.md specs/ sst-env.d.ts sst.config.ts STATS.md tsconfig.json turbo.json (70 entries) </entries>
Found 87 matches
/home/byk/Code/opencode/packages/tui/test/fixture/tui-sdk.ts:
Line 76: "/command",
Line 84: if (["/config", "/experimental/resource", "/mcp", "/provider/auth", "/session/status"].includes(url.pathname))
Line 86: if (url.pathname === "/config/providers") return json({ providers: {}, default: {} })
Line 103: if (url.pathname === "/provider") return json({ all: [], default: {}, connected: [] })
/home/byk/Code/opencode/packages/opencode/test/server/httpapi-provider.test.ts:
Line 80: const response = yield* request(`/provider/${input.providerID}/oauth/authorize`, {
Line 94: const response = yield* request(`/provider/${input.providerID}/oauth/callback`, {
Line 365: const providerResponse = yield* request("/provider", { headers })
Line 366: const configResponse = yield* request("/config/providers", { headers })
Line 387: const providerResponse = yield* request("/provider", { headers })
Line 388: ...
/home/byk/Code/opencode/packages/opencode/src/effect/instance-state.ts /home/byk/Code/opencode/packages/opencode/src/effect/instance-ref.ts /home/byk/Code/opencode/packages/opencode/src/effect/instance-registry.ts /home/byk/Code/opencode/packages/opencode/src/project/instance-store.ts /home/byk/Code/opencode/packages/opencode/src/project/instance-context.ts /home/byk/Code/opencode/packages/opencode/src/project/instance-runtime.ts /home/byk/Code/opencode/packages/opencode/src/server/routes/instance/httpapi/middleware/instance-context.ts /home/byk/Code/opencode/packages/opencode/src/server/routes/instance/httpapi/handlers/instance.ts /home/byk/Code/opencode/packages/opencode/src/server/routes/instance/httpapi/groups/instance.ts
Found 62 matches
/home/byk/Code/opencode/packages/opencode/src/acp/event.ts:
Line 63: if (this.abort.signal.aborted) return
Line 145: while (!this.abort.signal.aborted) {
Line 148: if (!this.abort.signal.aborted) await new Promise((resolve) => setTimeout(resolve, 1000))
Line 161: if (this.abort.signal.aborted) return
Line 169: if (this.abort.signal.aborted) throw new Error("ACP event subscription stopped")
/home/byk/Code/opencode/packages/opencode/src/plugin/openai/ws-pool.ts:
Line 146: if (OpenAIWebSocket.isAbortError(error)) {
/home/byk/Code/opencode/packages/opencode/src/cli/cmd/run/runtime.ts:
Line 669: if (signal.aborted || footer.isClosed) {
/home/byk/Code/opencode/packages/opencode/src/plugin/openai/ws.ts:
Line 67: export function isAbortError(error: unknown): error is DOMException {
Line 68: return error instanceof DOMException && error.name === "AbortError"
Line 73: if (options.signal?.aborted) ...
Found 14 matches
/home/byk/Code/opencode/STATS.md:
Line 174: | 2025-12-16 | 1,120,477 (+26,845) | 1,078,022 (+18,944) | 2,198,499 (+45,789) |
/home/byk/Code/opencode/packages/llm/test/executor.test.ts:
Line 187: remaining: { requests: "499", tokens: "29900" },
Line 202: "x-ratelimit-remaining-requests": "499",
Line 398: yield* TestClock.adjust(499)
/home/byk/Code/opencode/packages/console/app/src/routes/index.tsx:
Line 269: d="M150.932 -135.014L-251.766 267.684M154.115 -131.832L-248.582 270.865M157.295 -128.65L-245.402 274.047M160.479 -125.469L-242.219 277.229M163.662 -122.287L-239.035 280.41M166.842 -119.105L-235.855 283.592M170.025 -115.924L-232.672 286.773M173.205 -112.742L-229.492 289.955M176.385 -109.561L-226.312 293.137M179.568 -106.377L-223.129 296.32M182.752 -103.193L-219.945 299.504M185.936 -100.012L-216.762 302.686M189.119 -96.8301L-213.578 305.867M192.295 -93.6484L-210.402 309.049M195.479 ...
<path>/home/byk/Code/opencode/packages/opencode/src/server/routes/instance/httpapi/groups/provider.ts</path>
<type>file</type>
<content>
1: import { ProviderAuth } from "@/provider/auth"
2: import { Provider } from "@/provider/provider"
3:
4: import { Schema } from "effect"
5: import { HttpApi, HttpApiEndpoint, HttpApiGroup, OpenApi } from "effect/unstable/httpapi"
6: import { Authorization } from "../middleware/authorization"
7: import { InstanceContextMiddleware } from "../middleware/instance-context"
8: import { WorkspaceRoutingMiddleware, WorkspaceRoutingQuery } from "../middleware/workspace-routing"
9: import { described } from "./metadata"
10: import { ProviderV2 } from "@opencode-ai/core/provider"
11:
12: const root = "/provider"
13:
14: const ProviderAuthErrorName = Schema.Union([
15: Schema.Literal("BadRequest"),
16: Schema.Literal("ProviderAuthOauthMissing"),
17: Schema.Literal("ProviderAuthOauthCodeMissing"),
18: ...
<path>/home/byk/Code/opencode/packages/opencode/src/server/routes/instance/httpapi/handlers/provider.ts</path>
<type>file</type>
<content>
1: import { ProviderAuth } from "@/provider/auth"
2: import { Config } from "@/config/config"
3: import { ModelsDev } from "@opencode-ai/core/models-dev"
4: import { Provider } from "@/provider/provider"
5:
6: import { mapValues } from "remeda"
7: import { Effect, Schema } from "effect"
8: import { HttpServerRequest, HttpServerResponse } from "effect/unstable/http"
9: import { HttpApiBuilder } from "effect/unstable/httpapi"
10: import { InstanceHttpApi } from "../api"
11: import { ProviderAuthApiError } from "../groups/provider"
12: import { ProviderV2 } from "@opencode-ai/core/provider"
13:
14: function mapProviderAuthError<A, R>(self: Effect.Effect<A, ProviderAuth.Error, R>) {
15: return self.pipe(
16: Effect.mapError((error) => {
17: if (error instanceof ProviderAuth.OauthMissing) {
18: return new ProviderAuthApiError({ ...
<path>/home/byk/Code/opencode/packages/opencode/src/server/routes/instance/httpapi/groups/instance.ts</path>
<type>file</type>
<content>
1: import { Agent } from "@/agent/agent"
2: import { Command } from "@/command"
3: import { Format } from "@/format"
4: import { LSP } from "@/lsp/lsp"
5: import { Vcs } from "@/project/vcs"
6: import { Skill } from "@/skill"
7: import { Schema } from "effect"
8: import { HttpApi, HttpApiEndpoint, HttpApiGroup, HttpApiSchema, OpenApi } from "effect/unstable/httpapi"
9: import { Authorization } from "../middleware/authorization"
10: import { InstanceContextMiddleware } from "../middleware/instance-context"
11: import {
12: WorkspaceRoutingMiddleware,
13: WorkspaceRoutingQuery,
14: WorkspaceRoutingQueryFields,
15: } from "../middleware/workspace-routing"
16: import { described } from "./metadata"
17:
18: const PathInfo = Schema.Struct({
19: home: Schema.String,
20: state: Schema.String,
21: config: Schema.String,
22: worktree: ...
<path>/home/byk/Code/opencode/packages/opencode/src/server/routes/instance/httpapi/handlers/instance.ts</path>
<type>file</type>
<content>
1: import { Agent } from "@/agent/agent"
2: import { Command } from "@/command"
3: import * as InstanceState from "@/effect/instance-state"
4: import { Format } from "@/format"
5: import { Global } from "@opencode-ai/core/global"
6: import { LSP } from "@/lsp/lsp"
7: import { Vcs } from "@/project/vcs"
8: import { Skill } from "@/skill"
9: import { Effect } from "effect"
10: import { HttpApiBuilder } from "effect/unstable/httpapi"
11: import { InstanceHttpApi } from "../api"
12: import { ApiVcsApplyError } from "../groups/instance"
13: import { markInstanceForDisposal } from "../lifecycle"
14:
15: export const instanceHandlers = HttpApiBuilder.group(InstanceHttpApi, "instance", (handlers) =>
16: Effect.gen(function* () {
17: const agent = yield* Agent.Service
18: const command = yield* Command.Service
19: const format = yield* ...
<path>/home/byk/Code/opencode/packages/opencode/src/server/routes/instance/httpapi/groups/config.ts</path>
<type>file</type>
<content>
1: import { Config } from "@/config/config"
2: import { ConfigV1 } from "@opencode-ai/core/v1/config/config"
3: import { Provider } from "@/provider/provider"
4: import { HttpApi, HttpApiEndpoint, HttpApiError, HttpApiGroup, OpenApi } from "effect/unstable/httpapi"
5: import { Authorization } from "../middleware/authorization"
6: import { InstanceContextMiddleware } from "../middleware/instance-context"
7: import { WorkspaceRoutingMiddleware, WorkspaceRoutingQuery } from "../middleware/workspace-routing"
8: import { described } from "./metadata"
9:
10: const root = "/config"
11:
12: export const ConfigApi = HttpApi.make("config")
13: .add(
14: HttpApiGroup.make("config")
15: .add(
16: HttpApiEndpoint.get("get", root, {
17: query: WorkspaceRoutingQuery,
18: success: described(ConfigV1.Info, "Get config ...
<path>/home/byk/Code/opencode/packages/opencode/src/server/routes/instance/httpapi/handlers/config.ts</path>
<type>file</type>
<content>
1: import { Config } from "@/config/config"
2: import { Provider } from "@/provider/provider"
3: import * as InstanceState from "@/effect/instance-state"
4: import { Effect } from "effect"
5: import { HttpApiBuilder } from "effect/unstable/httpapi"
6: import { InstanceHttpApi } from "../api"
7: import { markInstanceForDisposal } from "../lifecycle"
8:
9: export const configHandlers = HttpApiBuilder.group(InstanceHttpApi, "config", (handlers) =>
10: Effect.gen(function* () {
11: const providerSvc = yield* Provider.Service
12: const configSvc = yield* Config.Service
13:
14: const get = Effect.fn("ConfigHttpApi.get")(function* () {
15: return yield* configSvc.get()
16: })
17:
18: const update = Effect.fn("ConfigHttpApi.update")(function* (ctx) {
19: yield* configSvc.update(ctx.payload)
20: yield* ...
<path>/home/byk/Code/opencode/packages/opencode/src/server/routes/instance/httpapi/groups/mcp.ts</path>
<type>file</type>
<content>
1: import { MCP } from "@/mcp"
2: import { ConfigMCPV1 } from "@opencode-ai/core/v1/config/mcp"
3: import { Schema } from "effect"
4: import { HttpApi, HttpApiEndpoint, HttpApiError, HttpApiGroup, OpenApi } from "effect/unstable/httpapi"
5: import { McpServerNotFoundError } from "../errors"
6: import { Authorization } from "../middleware/authorization"
7: import { InstanceContextMiddleware } from "../middleware/instance-context"
8: import { WorkspaceRoutingMiddleware, WorkspaceRoutingQuery } from "../middleware/workspace-routing"
9: import { described } from "./metadata"
10:
11: export const AddPayload = Schema.Struct({
12: name: Schema.String,
13: config: ConfigMCPV1.Info,
14: })
15:
16: export const StatusMap = Schema.Record(Schema.String, MCP.Status)
17: export const AuthStartResponse = Schema.Struct({
18: authorizationUrl: Schema.String,
19: ...
<path>/home/byk/Code/opencode/packages/opencode/src/server/routes/instance/httpapi/handlers/mcp.ts</path>
<type>file</type>
<content>
1: import { MCP } from "@/mcp"
2: import { Effect, Schema } from "effect"
3: import { HttpApiBuilder, HttpApiError } from "effect/unstable/httpapi"
4: import { InstanceHttpApi } from "../api"
5: import { McpServerNotFoundError } from "../errors"
6: import { AddPayload, AuthCallbackPayload, StatusMap, UnsupportedOAuthError } from "../groups/mcp"
7:
8: export const mcpHandlers = HttpApiBuilder.group(InstanceHttpApi, "mcp", (handlers) =>
9: Effect.gen(function* () {
10: const mcp = yield* MCP.Service
11:
12: const status = Effect.fn("McpHttpApi.status")(function* () {
13: return yield* mcp.status()
14: })
15:
16: const add = Effect.fn("McpHttpApi.add")(function* (ctx: { payload: typeof AddPayload.Type }) {
17: const result = (yield* mcp.add(ctx.payload.name, ctx.payload.config)).status
18: return yield* ...
<path>/home/byk/Code/opencode/packages/opencode/src/server/routes/instance/httpapi/middleware/instance-context.ts</path>
<type>file</type>
<content>
1: import { InstanceRef, WorkspaceRef } from "@/effect/instance-ref"
2: import { InstanceStore } from "@/project/instance-store"
3: import { Effect, Layer } from "effect"
4: import { HttpServerResponse } from "effect/unstable/http"
5: import { HttpApiMiddleware } from "effect/unstable/httpapi"
6: import { WorkspaceRouteContext } from "./workspace-routing"
7:
8: export class InstanceContextMiddleware extends HttpApiMiddleware.Service<
9: InstanceContextMiddleware,
10: {
11: requires: WorkspaceRouteContext
12: }
13: >()("@opencode/ExperimentalHttpApiInstanceContext") {}
14:
15: function decode(input: string): string {
16: try {
17: return decodeURIComponent(input)
18: } catch {
19: return input
20: }
21: }
22:
23: function provideInstanceContext<E>(
24: effect: ...
<path>/home/byk/Code/opencode/packages/opencode/src/project/instance-store.ts</path>
<type>file</type>
<content>
1: import { LayerNode } from "@opencode-ai/core/effect/layer-node"
2: import { makeGlobalNode, Node } from "@opencode-ai/core/effect/app-node"
3: import { GlobalBus } from "@/bus/global"
4: import { serviceUse } from "@opencode-ai/core/effect/service-use"
5: import { WorkspaceContext } from "@/control-plane/workspace-context"
6: import { InstanceRef } from "@/effect/instance-ref"
7: import { disposeInstance as runDisposers } from "@/effect/instance-registry"
8: import { FSUtil } from "@opencode-ai/core/fs-util"
9: import { Context, Deferred, Duration, Effect, Exit, Layer, Scope } from "effect"
10: import { type InstanceContext } from "./instance-context"
11: import { InstanceBootstrap } from "./bootstrap-service"
12: import * as Project from "./project"
13:
14: export interface LoadInput {
15: directory: string
16: worktree?: string
17: project?: Project.Info
18: ...
Found 4 matches /home/byk/Code/opencode/packages/opencode/src/lsp/lsp.ts: Line 116: spawning: Map<string, Promise<LSPClient.Info | undefined>> /home/byk/Code/opencode/packages/opencode/src/acp/service.ts: Line 603: const limits = new Map<string, Promise<number | undefined>>() /home/byk/Code/opencode/packages/opencode/src/acp/permission.ts: Line 27: private readonly queues = new Map<string, Promise<void>>() /home/byk/Code/opencode/packages/opencode/src/server/routes/instance/httpapi/middleware/instance-context.ts: Line 8: export class InstanceContextMiddleware extends HttpApiMiddleware.Service<
<path>/home/byk/Code/opencode/packages/opencode/src/server</path> <type>directory</type> <entries> auth.ts event.ts global-lifecycle.ts init-projectors.ts mdns.ts projectors.ts proxy-util.ts routes/ server.ts shared/ tui-event.ts (11 entries) </entries>
* 🟡 (19:53) `mcpHandlers` in `packages/opencode/src/server/routes/instance/httpapi/handlers/mcp.ts:8-110` acquires `MCP.Service` once while constructing the handler layer at line 10, adding another target-route service resolved during instance-scoped layer initialization. * 🟡 (19:53) `GET /mcp` is implemented by `McpHttpApi.status` at `packages/opencode/src/server/routes/instance/httpapi/handle…
Date: Sep 8, 2026 * 🔴 [requested-investigation] (19:44) User requested a read-only, very thorough investigation in `/home/byk/Code/opencode`; explicitly instructed not to edit anything. * 🟡 (19:44) User asked to trace how the legacy server version represented by current source returns HTTP 499 for `GET /provider`, `GET /config/providers`, `GET /command`, and `GET /mcp` when a project-scoped `In…