diff options
| author | Kit Langton <[email protected]> | 2026-04-15 22:07:42 -0400 |
|---|---|---|
| committer | GitHub <[email protected]> | 2026-04-16 02:07:42 +0000 |
| commit | 5eae92684658c36a5026c9a36edcdf1163517022 (patch) | |
| tree | 0770c7d674b274454a409211c0864ed613ef2bc3 /packages/server/src | |
| parent | cce05c16658a39d091f658bdb53dcce1e88c66d0 (diff) | |
| download | opencode-5eae92684658c36a5026c9a36edcdf1163517022.tar.gz opencode-5eae92684658c36a5026c9a36edcdf1163517022.zip | |
add experimental provider auth HttpApi slice (#22389)
Diffstat (limited to 'packages/server/src')
| -rw-r--r-- | packages/server/src/api/index.ts | 2 | ||||
| -rw-r--r-- | packages/server/src/api/question.ts | 37 | ||||
| -rw-r--r-- | packages/server/src/definition/api.ts | 12 | ||||
| -rw-r--r-- | packages/server/src/definition/index.ts | 2 | ||||
| -rw-r--r-- | packages/server/src/definition/question.ts | 94 | ||||
| -rw-r--r-- | packages/server/src/index.ts | 6 | ||||
| -rw-r--r-- | packages/server/src/openapi.ts | 5 | ||||
| -rw-r--r-- | packages/server/src/types.ts | 5 |
8 files changed, 0 insertions, 163 deletions
diff --git a/packages/server/src/api/index.ts b/packages/server/src/api/index.ts deleted file mode 100644 index 375e3584b..000000000 --- a/packages/server/src/api/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { makeQuestionHandler } from "./question.js" -export type { QuestionOps } from "./question.js" diff --git a/packages/server/src/api/question.ts b/packages/server/src/api/question.ts deleted file mode 100644 index f72c37aa1..000000000 --- a/packages/server/src/api/question.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { Effect, Schema } from "effect" -import { HttpApiBuilder } from "effect/unstable/httpapi" -import { QuestionReply, QuestionRequest, questionApi } from "../definition/question.js" - -export interface QuestionOps<R = never> { - readonly list: () => Effect.Effect<ReadonlyArray<unknown>, never, R> - readonly reply: (input: { - requestID: string - answers: Schema.Schema.Type<typeof QuestionReply>["answers"] - }) => Effect.Effect<void, never, R> -} - -export const makeQuestionHandler = <R>(ops: QuestionOps<R>) => - HttpApiBuilder.group( - questionApi, - "question", - Effect.fn("QuestionHttpApi.handlers")(function* (handlers) { - const decode = Schema.decodeUnknownSync(Schema.Array(QuestionRequest)) - - const list = Effect.fn("QuestionHttpApi.list")(function* () { - return decode(yield* ops.list()) - }) - - const reply = Effect.fn("QuestionHttpApi.reply")(function* (ctx: { - params: { requestID: string } - payload: Schema.Schema.Type<typeof QuestionReply> - }) { - yield* ops.reply({ - requestID: ctx.params.requestID, - answers: ctx.payload.answers, - }) - return true - }) - - return handlers.handle("list", list).handle("reply", reply) - }), - ) diff --git a/packages/server/src/definition/api.ts b/packages/server/src/definition/api.ts deleted file mode 100644 index e2f70196d..000000000 --- a/packages/server/src/definition/api.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { HttpApi, OpenApi } from "effect/unstable/httpapi" -import { questionApi } from "./question.js" - -export const api = HttpApi.make("opencode") - .addHttpApi(questionApi) - .annotateMerge( - OpenApi.annotations({ - title: "opencode experimental HttpApi", - version: "0.0.1", - description: "Experimental HttpApi surface for selected instance routes.", - }), - ) diff --git a/packages/server/src/definition/index.ts b/packages/server/src/definition/index.ts deleted file mode 100644 index e9a52dc93..000000000 --- a/packages/server/src/definition/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { api } from "./api.js" -export { questionApi, QuestionReply, QuestionRequest } from "./question.js" diff --git a/packages/server/src/definition/question.ts b/packages/server/src/definition/question.ts deleted file mode 100644 index 0d161e013..000000000 --- a/packages/server/src/definition/question.ts +++ /dev/null @@ -1,94 +0,0 @@ -import { Schema } from "effect" -import { HttpApi, HttpApiEndpoint, HttpApiGroup, OpenApi } from "effect/unstable/httpapi" - -const root = "/experimental/httpapi/question" - -// Temporary transport-local schemas until canonical question schemas move into packages/core. -export const QuestionID = Schema.String.annotate({ identifier: "QuestionID" }) -export const SessionID = Schema.String.annotate({ identifier: "SessionID" }) -export const MessageID = Schema.String.annotate({ identifier: "MessageID" }) - -export class QuestionOption extends Schema.Class<QuestionOption>("QuestionOption")({ - label: Schema.String.annotate({ - description: "Display text (1-5 words, concise)", - }), - description: Schema.String.annotate({ - description: "Explanation of choice", - }), -}) {} - -const base = { - question: Schema.String.annotate({ - description: "Complete question", - }), - header: Schema.String.annotate({ - description: "Very short label (max 30 chars)", - }), - options: Schema.Array(QuestionOption).annotate({ - description: "Available choices", - }), - multiple: Schema.optional(Schema.Boolean).annotate({ - description: "Allow selecting multiple choices", - }), -} - -export class QuestionInfo extends Schema.Class<QuestionInfo>("QuestionInfo")({ - ...base, - custom: Schema.optional(Schema.Boolean).annotate({ - description: "Allow typing a custom answer (default: true)", - }), -}) {} - -export class QuestionTool extends Schema.Class<QuestionTool>("QuestionTool")({ - messageID: MessageID, - callID: Schema.String, -}) {} - -export class QuestionRequest extends Schema.Class<QuestionRequest>("QuestionRequest")({ - id: QuestionID, - sessionID: SessionID, - questions: Schema.Array(QuestionInfo).annotate({ - description: "Questions to ask", - }), - tool: Schema.optional(QuestionTool), -}) {} - -export const QuestionAnswer = Schema.Array(Schema.String).annotate({ identifier: "QuestionAnswer" }) - -export class QuestionReply extends Schema.Class<QuestionReply>("QuestionReply")({ - answers: Schema.Array(QuestionAnswer).annotate({ - description: "User answers in order of questions (each answer is an array of selected labels)", - }), -}) {} - -export const questionApi = HttpApi.make("question").add( - HttpApiGroup.make("question") - .add( - HttpApiEndpoint.get("list", root, { - success: Schema.Array(QuestionRequest), - }).annotateMerge( - OpenApi.annotations({ - identifier: "question.list", - summary: "List pending questions", - description: "Get all pending question requests across all sessions.", - }), - ), - HttpApiEndpoint.post("reply", `${root}/:requestID/reply`, { - params: { requestID: QuestionID }, - payload: QuestionReply, - success: Schema.Boolean, - }).annotateMerge( - OpenApi.annotations({ - identifier: "question.reply", - summary: "Reply to question request", - description: "Provide answers to a question request from the AI assistant.", - }), - ), - ) - .annotateMerge( - OpenApi.annotations({ - title: "question", - description: "Experimental HttpApi question routes.", - }), - ), -) diff --git a/packages/server/src/index.ts b/packages/server/src/index.ts deleted file mode 100644 index 67b82a0be..000000000 --- a/packages/server/src/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -export { openapi } from "./openapi.js" -export { makeQuestionHandler } from "./api/question.js" -export { api } from "./definition/api.js" -export { questionApi, QuestionReply, QuestionRequest } from "./definition/question.js" -export type { OpenApiSpec, ServerApi } from "./types.js" -export type { QuestionOps } from "./api/question.js" diff --git a/packages/server/src/openapi.ts b/packages/server/src/openapi.ts deleted file mode 100644 index dda870d2b..000000000 --- a/packages/server/src/openapi.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { OpenApi } from "effect/unstable/httpapi" -import { api } from "./definition/api.js" -import type { OpenApiSpec } from "./types.js" - -export const openapi = (): OpenApiSpec => OpenApi.fromApi(api) diff --git a/packages/server/src/types.ts b/packages/server/src/types.ts deleted file mode 100644 index 9e89fe74c..000000000 --- a/packages/server/src/types.ts +++ /dev/null @@ -1,5 +0,0 @@ -import type { HttpApi, HttpApiGroup, OpenApi } from "effect/unstable/httpapi" - -export type ServerApi = HttpApi.HttpApi<string, HttpApiGroup.Any> - -export type OpenApiSpec = OpenApi.OpenAPISpec |
