feat: prune cloud providers and console API, complete Neuron branding sweep

This commit is contained in:
2026-08-21 14:59:43 -05:00
parent f37714c9fc
commit e30d80389c
43 changed files with 324 additions and 2700 deletions
@@ -9,7 +9,6 @@ import { InstanceDisposed } from "@/server/event"
import { Question } from "@/question"
import { ConfigApi } from "./groups/config"
import { ControlApi } from "./groups/control"
import { ControlPlaneApi } from "./groups/control-plane"
import { EventApi } from "./groups/event"
import { ExperimentalApi } from "./groups/experimental"
import { FileApi } from "./groups/file"
@@ -53,7 +52,6 @@ export const ServerApi = makeApi({
export const RootHttpApi = HttpApi.make("opencode-root")
.addHttpApi(ControlApi)
.addHttpApi(ControlPlaneApi)
.addHttpApi(GlobalApi)
.middleware(SchemaErrorMiddleware)
.middleware(Authorization)
@@ -20,7 +20,7 @@ export const ConfigApi = HttpApi.make("config")
OpenApi.annotations({
identifier: "config.get",
summary: "Get configuration",
description: "Retrieve the current OpenCode configuration settings and preferences.",
description: "Retrieve the current Neuron configuration settings and preferences.",
}),
),
HttpApiEndpoint.patch("update", root, {
@@ -32,7 +32,7 @@ export const ConfigApi = HttpApi.make("config")
OpenApi.annotations({
identifier: "config.update",
summary: "Update configuration",
description: "Update OpenCode configuration settings and preferences.",
description: "Update Neuron configuration settings and preferences.",
}),
),
HttpApiEndpoint.get("providers", `${root}/providers`, {
@@ -1,35 +0,0 @@
import { MoveSession } from "@opencode-ai/core/control-plane/move-session"
import { Schema } from "effect"
import { HttpApi, HttpApiEndpoint, HttpApiGroup, HttpApiSchema, OpenApi } from "effect/unstable/httpapi"
import { described } from "./metadata"
const root = "/experimental/control-plane"
export const MoveSessionPayload = Schema.Struct({ ...MoveSession.Input.fields })
export class ApiMoveSessionError extends Schema.ErrorClass<ApiMoveSessionError>("MoveSessionError")(
{
name: Schema.Literal("MoveSessionError"),
data: Schema.Struct({
message: Schema.String,
}),
},
{ httpApiStatus: 400 },
) {}
export const ControlPlaneApi = HttpApi.make("controlPlane").add(
HttpApiGroup.make("controlPlane")
.add(
HttpApiEndpoint.post("moveSession", `${root}/move-session`, {
payload: MoveSessionPayload,
success: described(HttpApiSchema.NoContent, "Session moved"),
error: ApiMoveSessionError,
}).annotateMerge(
OpenApi.annotations({
identifier: "experimental.controlPlane.moveSession",
summary: "Move session",
description: "Move a session to another project directory, optionally transferring local changes.",
}),
),
)
.annotateMerge(OpenApi.annotations({ title: "controlPlane", description: "Control-plane orchestration routes." })),
)
@@ -112,7 +112,7 @@ export const ExperimentalApi = HttpApi.make("experimental")
OpenApi.annotations({
identifier: "experimental.capabilities.get",
summary: "Get experimental capabilities",
description: "Get experimental features enabled on the OpenCode server.",
description: "Get experimental features enabled on the Neuron server.",
}),
),
HttpApiEndpoint.get("console", ExperimentalPaths.console, {
@@ -146,7 +146,7 @@ export const ExperimentalApi = HttpApi.make("experimental")
OpenApi.annotations({
identifier: "experimental.console.switchOrg",
summary: "Switch active Console org",
description: "Persist a new active Console account/org selection for the current local OpenCode state.",
description: "Persist a new active Console account/org selection for the current local Neuron state.",
}),
),
HttpApiEndpoint.get("tool", ExperimentalPaths.tool, {
@@ -229,7 +229,7 @@ export const ExperimentalApi = HttpApi.make("experimental")
identifier: "experimental.session.list",
summary: "List sessions",
description:
"Get a list of all OpenCode sessions across projects, sorted by most recently updated. Archived sessions are excluded by default.",
"Get a list of all Neuron sessions across projects, sorted by most recently updated. Archived sessions are excluded by default.",
}),
),
HttpApiEndpoint.post("sessionBackground", ExperimentalPaths.sessionBackground, {
@@ -79,7 +79,7 @@ export const GlobalApi = HttpApi.make("global").add(
OpenApi.annotations({
identifier: "global.health",
summary: "Get health",
description: "Get health information about the OpenCode server.",
description: "Get health information about the Neuron server.",
}),
),
HttpApiEndpoint.get("event", GlobalPaths.event, {
@@ -88,7 +88,7 @@ export const GlobalApi = HttpApi.make("global").add(
OpenApi.annotations({
identifier: "global.event",
summary: "Get global events",
description: "Subscribe to global events from the OpenCode system using server-sent events.",
description: "Subscribe to global events from the Neuron system using server-sent events.",
}),
),
HttpApiEndpoint.get("configGet", GlobalPaths.config, {
@@ -97,7 +97,7 @@ export const GlobalApi = HttpApi.make("global").add(
OpenApi.annotations({
identifier: "global.config.get",
summary: "Get global configuration",
description: "Retrieve the current global OpenCode configuration settings and preferences.",
description: "Retrieve the current global Neuron configuration settings and preferences.",
}),
),
HttpApiEndpoint.patch("configUpdate", GlobalPaths.config, {
@@ -108,7 +108,7 @@ export const GlobalApi = HttpApi.make("global").add(
OpenApi.annotations({
identifier: "global.config.update",
summary: "Update global configuration",
description: "Update global OpenCode configuration settings and preferences.",
description: "Update global Neuron configuration settings and preferences.",
}),
),
HttpApiEndpoint.post("dispose", GlobalPaths.dispose, {
@@ -117,7 +117,7 @@ export const GlobalApi = HttpApi.make("global").add(
OpenApi.annotations({
identifier: "global.dispose",
summary: "Dispose instance",
description: "Clean up and dispose all OpenCode instances, releasing all resources.",
description: "Clean up and dispose all Neuron instances, releasing all resources.",
}),
),
HttpApiEndpoint.post("upgrade", GlobalPaths.upgrade, {
@@ -66,7 +66,7 @@ export const InstanceApi = HttpApi.make("instance")
OpenApi.annotations({
identifier: "instance.dispose",
summary: "Dispose instance",
description: "Clean up and dispose the current OpenCode instance, releasing all resources.",
description: "Clean up and dispose the current Neuron instance, releasing all resources.",
}),
),
HttpApiEndpoint.get("path", InstancePaths.path, {
@@ -77,7 +77,7 @@ export const InstanceApi = HttpApi.make("instance")
identifier: "path.get",
summary: "Get paths",
description:
"Retrieve the current working directory and related path information for the OpenCode instance.",
"Retrieve the current working directory and related path information for the Neuron instance.",
}),
),
HttpApiEndpoint.get("vcs", InstancePaths.vcs, {
@@ -143,7 +143,7 @@ export const InstanceApi = HttpApi.make("instance")
OpenApi.annotations({
identifier: "command.list",
summary: "List commands",
description: "Get a list of all available commands in the OpenCode system.",
description: "Get a list of all available commands in the Neuron system.",
}),
),
HttpApiEndpoint.get("agent", InstancePaths.agent, {
@@ -153,7 +153,7 @@ export const InstanceApi = HttpApi.make("instance")
OpenApi.annotations({
identifier: "app.agents",
summary: "List agents",
description: "Get a list of all available AI agents in the OpenCode system.",
description: "Get a list of all available AI agents in the Neuron system.",
}),
),
HttpApiEndpoint.get("skill", InstancePaths.skill, {
@@ -163,7 +163,7 @@ export const InstanceApi = HttpApi.make("instance")
OpenApi.annotations({
identifier: "app.skills",
summary: "List skills",
description: "Get a list of all available skills in the OpenCode system.",
description: "Get a list of all available skills in the Neuron system.",
}),
),
HttpApiEndpoint.get("lsp", InstancePaths.lsp, {
@@ -26,7 +26,7 @@ export const ProjectApi = HttpApi.make("project")
OpenApi.annotations({
identifier: "project.list",
summary: "List all projects",
description: "Get a list of projects that have been opened with OpenCode.",
description: "Get a list of projects that have been opened with Neuron.",
}),
),
HttpApiEndpoint.get("current", `${root}/current`, {
@@ -36,7 +36,7 @@ export const ProjectApi = HttpApi.make("project")
OpenApi.annotations({
identifier: "project.current",
summary: "Get current project",
description: "Retrieve the currently active project that OpenCode is working with.",
description: "Retrieve the currently active project that Neuron is working with.",
}),
),
HttpApiEndpoint.post("initGit", `${root}/git/init`, {
@@ -58,7 +58,7 @@ export const PtyApi = HttpApi.make("pty")
OpenApi.annotations({
identifier: "pty.list",
summary: "List PTY sessions",
description: "Get a list of all active pseudo-terminal (PTY) sessions managed by OpenCode.",
description: "Get a list of all active pseudo-terminal (PTY) sessions managed by Neuron.",
}),
),
HttpApiEndpoint.post("create", PtyPaths.create, {
@@ -115,7 +115,7 @@ export const SessionApi = HttpApi.make("session")
OpenApi.annotations({
identifier: "session.list",
summary: "List sessions",
description: "Get a list of all OpenCode sessions, sorted by most recently updated.",
description: "Get a list of all Neuron sessions, sorted by most recently updated.",
}),
),
HttpApiEndpoint.get("status", SessionPaths.status, {
@@ -138,7 +138,7 @@ export const SessionApi = HttpApi.make("session")
OpenApi.annotations({
identifier: "session.get",
summary: "Get session",
description: "Retrieve detailed information about a specific OpenCode session.",
description: "Retrieve detailed information about a specific Neuron session.",
}),
),
HttpApiEndpoint.get("children", SessionPaths.children, {
@@ -209,7 +209,7 @@ export const SessionApi = HttpApi.make("session")
OpenApi.annotations({
identifier: "session.create",
summary: "Create session",
description: "Create a new OpenCode session for interacting with AI assistants and managing conversations.",
description: "Create a new Neuron session for interacting with AI assistants and managing conversations.",
}),
),
HttpApiEndpoint.delete("remove", SessionPaths.remove, {
@@ -1,37 +0,0 @@
import { MoveSession } from "@opencode-ai/core/control-plane/move-session"
import { SessionV2 } from "@opencode-ai/core/session"
import { Effect } from "effect"
import { HttpApiBuilder } from "effect/unstable/httpapi"
import { RootHttpApi } from "../api"
import { ApiMoveSessionError, MoveSessionPayload } from "../groups/control-plane"
export const controlPlaneHandlers = HttpApiBuilder.group(RootHttpApi, "controlPlane", (handlers) =>
Effect.gen(function* () {
const service = yield* MoveSession.Service
const moveSession = Effect.fn("ControlPlaneHttpApi.moveSession")(function* (ctx: {
payload: typeof MoveSessionPayload.Type
}) {
yield* service.moveSession(ctx.payload).pipe(
Effect.mapError(
(error) =>
new ApiMoveSessionError({
name: "MoveSessionError",
data: { message: message(error) },
}),
),
)
})
return handlers.handle("moveSession", moveSession)
}),
)
function message(error: MoveSession.Error) {
if (error instanceof SessionV2.NotFoundError) return `Session not found: ${error.sessionID}`
if (error instanceof MoveSession.DestinationProjectMismatchError)
return "Destination directory belongs to another project"
if (error instanceof MoveSession.ApplyChangesError)
return `Unable to apply your changes in the destination directory. The files may conflict with existing changes.`
return error.message
}
@@ -49,7 +49,6 @@ import { ToolRegistry } from "@/tool/registry"
import { Truncate } from "@/tool/truncate"
import { Worktree } from "@/worktree"
import { RuntimeFlags } from "@/effect/runtime-flags"
import { MoveSession } from "@opencode-ai/core/control-plane/move-session"
import { Database } from "@opencode-ai/core/database/database"
import { AppNodeBuilderV1 } from "@/effect/app-node-builder-v1"
import { LayerNode } from "@opencode-ai/core/effect/layer-node"
@@ -84,7 +83,6 @@ import { PtyConnectApi } from "./groups/pty"
import { eventHandlers } from "./handlers/event"
import { configHandlers } from "./handlers/config"
import { controlHandlers } from "./handlers/control"
import { controlPlaneHandlers } from "./handlers/control-plane"
import { experimentalHandlers } from "./handlers/experimental"
import { fileHandlers } from "./handlers/file"
import { globalHandlers } from "./handlers/global"
@@ -139,7 +137,7 @@ const ptyConnectHttpApiAuthLayer = ptyConnectAuthorizationLayer.pipe(Layer.provi
const serverHttpApiAuthLayer = serverAuthorizationLayer.pipe(Layer.provide(ServerAuth.Config.layer))
const workspaceRoutingLive = workspaceRoutingLayer.pipe(Layer.provide(Socket.layerWebSocketConstructorGlobal))
const rootApiRoutes = HttpApiBuilder.layer(RootHttpApi).pipe(
Layer.provide([controlHandlers, controlPlaneHandlers, globalHandlers]),
Layer.provide([controlHandlers, globalHandlers]),
Layer.provide(schemaErrorLayer),
Layer.provide(httpApiAuthLayer),
)
@@ -288,7 +286,6 @@ export function createRoutes(
corsVaryFix,
fenceLayer,
cors(corsOptions),
AppNodeBuilderV1.build(MoveSession.node, [[LocationServiceMap.node, locationServiceMapV2]]),
HttpServer.layerServices,
]),
Layer.provide(Layer.succeed(CorsConfig)(corsOptions)),