summaryrefslogtreecommitdiffhomepage
path: root/packages/server/src
diff options
context:
space:
mode:
authorKit Langton <[email protected]>2026-04-15 22:07:42 -0400
committerGitHub <[email protected]>2026-04-16 02:07:42 +0000
commit5eae92684658c36a5026c9a36edcdf1163517022 (patch)
tree0770c7d674b274454a409211c0864ed613ef2bc3 /packages/server/src
parentcce05c16658a39d091f658bdb53dcce1e88c66d0 (diff)
downloadopencode-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.ts2
-rw-r--r--packages/server/src/api/question.ts37
-rw-r--r--packages/server/src/definition/api.ts12
-rw-r--r--packages/server/src/definition/index.ts2
-rw-r--r--packages/server/src/definition/question.ts94
-rw-r--r--packages/server/src/index.ts6
-rw-r--r--packages/server/src/openapi.ts5
-rw-r--r--packages/server/src/types.ts5
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