diff --git a/packages/opencode/src/server/routes/instance/httpapi/groups/session.ts b/packages/opencode/src/server/routes/instance/httpapi/groups/session.ts index cd2f3be19c81..bd2067b2b351 100644 --- a/packages/opencode/src/server/routes/instance/httpapi/groups/session.ts +++ b/packages/opencode/src/server/routes/instance/httpapi/groups/session.ts @@ -74,6 +74,7 @@ export const PermissionResponsePayload = Schema.Struct({ export const SessionPaths = { list: root, status: `${root}/status`, + getStatus: `${root}/:sessionID/status`, get: `${root}/:sessionID`, children: `${root}/:sessionID/children`, todo: `${root}/:sessionID/todo`, @@ -125,6 +126,18 @@ export const SessionApi = HttpApi.make("session") description: "Retrieve the current status of all sessions, including active, idle, and completed states.", }), ), + HttpApiEndpoint.get("getStatus", SessionPaths.getStatus, { + params: { sessionID: SessionID }, + query: WorkspaceRoutingQuery, + success: described(SessionStatus.Info, "Get single session status"), + error: [HttpApiError.BadRequest, ApiNotFoundError], + }).annotateMerge( + OpenApi.annotations({ + identifier: "session.getStatus", + summary: "Get single session status", + description: "Retrieve the current status of a specific session.", + }), + ), HttpApiEndpoint.get("get", SessionPaths.get, { params: { sessionID: SessionID }, query: WorkspaceRoutingQuery, diff --git a/packages/opencode/src/server/routes/instance/httpapi/handlers/session.ts b/packages/opencode/src/server/routes/instance/httpapi/handlers/session.ts index 4d4cce367b41..5f8afbc022a3 100644 --- a/packages/opencode/src/server/routes/instance/httpapi/handlers/session.ts +++ b/packages/opencode/src/server/routes/instance/httpapi/handlers/session.ts @@ -79,6 +79,11 @@ export const sessionHandlers = HttpApiBuilder.group(InstanceHttpApi, "session", return yield* SessionError.mapStorageNotFound(session.get(sessionID)) }) + const getStatus = Effect.fn("SessionHttpApi.getStatus")(function* (ctx: { params: { sessionID: SessionID } }) { + yield* requireSession(ctx.params.sessionID) + return yield* statusSvc.get(ctx.params.sessionID) + }) + const get = Effect.fn("SessionHttpApi.get")(function* (ctx: { params: { sessionID: SessionID } }) { return yield* requireSession(ctx.params.sessionID) }) @@ -406,6 +411,7 @@ export const sessionHandlers = HttpApiBuilder.group(InstanceHttpApi, "session", return handlers .handle("list", list) .handle("status", status) + .handle("getStatus", getStatus) .handle("get", get) .handle("children", children) .handle("todo", todo)