summaryrefslogtreecommitdiffhomepage
path: root/js/src/server
diff options
context:
space:
mode:
authorDax Raad <[email protected]>2025-05-29 10:21:59 -0400
committerDax Raad <[email protected]>2025-05-29 10:22:07 -0400
commit33a831d2be1fd7bea60421287f118be0bd968650 (patch)
tree9b82f8b958fa78c18b13284b9c7cd496dcec651e /js/src/server
parentd70201cd9365aec6c88f9794eb63f411f5040cb9 (diff)
downloadopencode-33a831d2be1fd7bea60421287f118be0bd968650.tar.gz
opencode-33a831d2be1fd7bea60421287f118be0bd968650.zip
rework types
Diffstat (limited to 'js/src/server')
-rw-r--r--js/src/server/message.ts135
-rw-r--r--js/src/server/server.ts10
2 files changed, 6 insertions, 139 deletions
diff --git a/js/src/server/message.ts b/js/src/server/message.ts
deleted file mode 100644
index 4ad301a35..000000000
--- a/js/src/server/message.ts
+++ /dev/null
@@ -1,135 +0,0 @@
-import z from "zod";
-
-const ToolCall = z
- .object({
- state: z.literal("call"),
- step: z.number().optional(),
- toolCallId: z.string(),
- toolName: z.string(),
- args: z.record(z.string(), z.any()),
- })
- .openapi({
- ref: "Session.Message.ToolInvocation.ToolCall",
- });
-
-const ToolPartialCall = z
- .object({
- state: z.literal("partial-call"),
- step: z.number().optional(),
- toolCallId: z.string(),
- toolName: z.string(),
- args: z.record(z.string(), z.any()),
- })
- .openapi({
- ref: "Session.Message.ToolInvocation.ToolPartialCall",
- });
-
-const ToolResult = z
- .object({
- state: z.literal("result"),
- step: z.number().optional(),
- toolCallId: z.string(),
- toolName: z.string(),
- args: z.record(z.string(), z.any()),
- result: z.string(),
- })
- .openapi({
- ref: "Session.Message.ToolInvocation.ToolResult",
- });
-
-const ToolInvocation = z
- .discriminatedUnion("state", [ToolCall, ToolPartialCall, ToolResult])
- .openapi({
- ref: "Session.Message.ToolInvocation",
- });
-export type ToolInvocation = z.infer<typeof ToolInvocation>;
-
-const TextPart = z
- .object({
- type: z.literal("text"),
- text: z.string(),
- })
- .openapi({
- ref: "Session.Message.Part.Text",
- });
-
-const ReasoningPart = z
- .object({
- type: z.literal("reasoning"),
- text: z.string(),
- providerMetadata: z.record(z.any()).optional(),
- })
- .openapi({
- ref: "Session.Message.Part.Reasoning",
- });
-
-const ToolInvocationPart = z
- .object({
- type: z.literal("tool-invocation"),
- toolInvocation: ToolInvocation,
- })
- .openapi({
- ref: "Session.Message.Part.ToolInvocation",
- });
-
-const SourceUrlPart = z
- .object({
- type: z.literal("source-url"),
- sourceId: z.string(),
- url: z.string(),
- title: z.string().optional(),
- providerMetadata: z.record(z.any()).optional(),
- })
- .openapi({
- ref: "Session.Message.Part.SourceUrl",
- });
-
-const FilePart = z
- .object({
- type: z.literal("file"),
- mediaType: z.string(),
- filename: z.string().optional(),
- url: z.string(),
- })
- .openapi({
- ref: "Session.Message.Part.File",
- });
-
-const StepStartPart = z
- .object({
- type: z.literal("step-start"),
- })
- .openapi({
- ref: "Session.Message.Part.StepStart",
- });
-
-const Part = z
- .discriminatedUnion("type", [
- TextPart,
- ReasoningPart,
- ToolInvocationPart,
- SourceUrlPart,
- FilePart,
- StepStartPart,
- ])
- .openapi({
- ref: "Session.Message.Part",
- });
-
-export const SessionMessage = z
- .object({
- id: z.string(),
- role: z.enum(["system", "user", "assistant"]),
- parts: z.array(Part),
- metadata: z.object({
- time: z.object({
- created: z.number(),
- completed: z.number().optional(),
- }),
- sessionID: z.string(),
- tool: z.record(z.string(), z.any()),
- }),
- })
- .openapi({
- ref: "Session.Message",
- });
diff --git a/js/src/server/server.ts b/js/src/server/server.ts
index 5fb0dfe62..2f388a183 100644
--- a/js/src/server/server.ts
+++ b/js/src/server/server.ts
@@ -9,7 +9,7 @@ import { z } from "zod";
import "zod-openapi/extend";
import { Config } from "../app/config";
import { LLM } from "../llm/llm";
-import { SessionMessage } from "./message";
+import { Message } from "../session/message";
const SessionInfo = Session.Info.openapi({
ref: "Session.Info",
@@ -40,6 +40,7 @@ export namespace Server {
version: "1.0.0",
description: "opencode api",
},
+ openapi: "3.0.0",
},
}),
)
@@ -120,7 +121,7 @@ export namespace Server {
description: "Successfully created session",
content: {
"application/json": {
- schema: resolver(SessionMessage.array()),
+ schema: resolver(Message.Info.array()),
},
},
},
@@ -194,7 +195,7 @@ export namespace Server {
description: "Chat with a model",
content: {
"application/json": {
- schema: resolver(SessionMessage),
+ schema: resolver(Message.Info),
},
},
},
@@ -206,7 +207,7 @@ export namespace Server {
sessionID: z.string(),
providerID: z.string(),
modelID: z.string(),
- parts: SessionMessage.shape.parts,
+ parts: Message.Part.array(),
}),
),
async (c) => {
@@ -252,6 +253,7 @@ export namespace Server {
version: "1.0.0",
description: "opencode api",
},
+ openapi: "3.0.0",
},
});
return result;